幾何變換為在不改變圖像內(nèi)容的前提下,對圖像像素進(jìn)行相對空間位置移動的處理方式。包括了平移、鏡像、轉(zhuǎn)置、縮放旋轉(zhuǎn)等。
基本理論
變換方式
圖像幾何變換就是建立源圖像與變換后圖像之間的映射關(guān)系。
可以分為向前映射與向后映射
向前映射

數(shù)學(xué)公式如圖,只要給出輸入像素坐標(biāo),即可獲得變換后的坐標(biāo)。
不過向前映射存在如下問題
- 易產(chǎn)生浮點(diǎn)數(shù)坐標(biāo),如(1.5,1.5)便是無效坐標(biāo)
- 映射不完全和映射重疊。如放大和縮小。
向后映射

由輸出圖像坐標(biāo)反過來推算該像素在源圖像的位置。實(shí)際處理中基本應(yīng)用向后映射。
平移變換
平移變換就是將所有坐標(biāo)分別加上指定的垂直偏移量。

鏡像變換
鏡像變換是以中線為軸,進(jìn)行對稱變換。
width為圖像寬度。以矩陣形式表示,如下

matlab中可以使用maketform()與imtransform()函數(shù)來進(jìn)行變換。
圖像的轉(zhuǎn)置
圖像的轉(zhuǎn)置就是將橫坐標(biāo)與縱坐標(biāo)交換位置。轉(zhuǎn)置后圖像寬度與高度對調(diào)。

圖像的縮放
圖像的縮放數(shù)學(xué)表達(dá)式為:

其中,sx與sy為縮放系數(shù)。這里采用的是向后映射。
在影射過程中,會產(chǎn)生浮點(diǎn)坐標(biāo)像素,它可以通過一系列算法獲得浮點(diǎn)坐標(biāo)的近似值。
常見插值法有最鄰近插值法、雙線性插值法與二次立方插值法
- 最鄰近插值法:
即為四舍五入,像素值等于離該點(diǎn)最近的輸入圖像像素值。會產(chǎn)生馬賽克鋸齒。 - 雙線性插值法:
將四個點(diǎn)的像素值按照一定比例混合,得到改浮點(diǎn)像素值。
距離哪個點(diǎn)更近,這個點(diǎn)得到的權(quán)重就越高。
雙線性插值需要進(jìn)行3次線性插值,才可以得出最終的結(jié)果。
MATLAB中使用imresize函數(shù)來進(jìn)行縮放:
g = imresize(f, scale);
圖像的旋轉(zhuǎn)
圖像旋轉(zhuǎn)過程中,需要將圖像的坐標(biāo)進(jìn)行轉(zhuǎn)換。轉(zhuǎn)換成以中心點(diǎn)為原點(diǎn)的數(shù)學(xué)坐標(biāo)系。需要3步:
- 由輸入圖像的坐標(biāo)系轉(zhuǎn)化為數(shù)學(xué)坐標(biāo)系。
- 通過數(shù)學(xué)旋轉(zhuǎn)坐標(biāo)系計(jì)算指定像素旋轉(zhuǎn)后的坐標(biāo)。
- 由旋轉(zhuǎn)坐標(biāo)系轉(zhuǎn)換為輸出圖像的坐標(biāo)系。
矩陣表示為:

其中W,H為原圖像的寬度與高度,而Wnew和Hnew是旋轉(zhuǎn)后圖像的寬高。
旋轉(zhuǎn)過程中同樣有浮點(diǎn)坐標(biāo)的問題,也需要使用最鄰近插值和雙線性插值。
matlab中使用imrotate()函數(shù)進(jìn)行旋轉(zhuǎn):
B = imrotate(A, angle, method, bbox)
method為插值方法,bbox用來制定是否重新定義尺寸。
圖像仿射變換
tform = maketform('affine', T);
g = imtransform(f, tform, interp);
其中,interp可以是'nearest','bilinear'或者'bicubic'。

以上內(nèi)容來自《數(shù)字圖像處理:原理與實(shí)踐(matlab版)》左飛著,電子工業(yè)出版社。此為學(xué)習(xí)筆記。