數字圖像處理與機器視覺-5-圖像幾何變換(1)


首先明確一點,圖像幾何變換不改變像素的值。例如,平移,旋轉,鏡像等。但是也會遇到特殊情況 ,比如旋轉角度不是90°的整數倍,會出現原圖像素在新圖中沒有位置(映射後位置不爲整數),這時候還需要用插值法來補充。

幾何變換過程可以概括爲:



其中x和y座標映射關係分別爲:


假設原圖爲I,變換後的圖爲J,新圖J中的點(x1,y1),算法大概原理是:

1.確定變換後新圖J的尺寸(w,h);
2.通過逆變換求得新圖中點(x1,y1)在原圖中對應的點(x0,y0),需要注意的是,逆變換後的點座標可能不是整數,需要通過插值轉換成整數;
3.判斷(x0,y0)是否在原圖區域內,如果在,則將I(x0,y0)的像素值賦給J(x1,y1);不在則直接將J(x1,y1)賦爲(0,0);

下面來見識下圖像變換裏最最基礎的變換

圖像平移

這個應該是幾何變換中最簡單了,不用考慮變換後像素點座標不爲整數的情況,變換函數爲:


矩陣變換:

木有接觸過灰度形態學,書上的方法先不管了,有興趣的可以敲下書上示例代碼;

按照之前的變換算法,MATLAB實現如下:

function O = translate(I,x,y)
%translate image I 
%   Detailed explanation goes here

[m,n] = size(I);

O = zeros(m,n);

for i = 1 : m
    for j = 1 : n
        if i - x > 0 && i - x < m + 1 && j - y > 0 && j - y < n + 1
            O (i,j) = I(i - x, j - y);
%         else  %這裏默認超過邊界的像素爲0,黑色
%             O (i,j) = 0;
%         end
    end
end

O = uint8(O);

end
上效果圖:


圖像鏡像

分爲水平鏡像和垂直鏡像,話不多說,直接上矩陣表達式:



MATLAB實現:

imtransform 用於一般的二維空間變換

B = imtransform(A,TFORM,method);

TFORM是具體的變換類型,method是選擇變換後用哪種插值方法

定義變換類型的函數爲,T = maketform(transformtype,Matrix);

transformtype有如下幾個選項(參見'maketform'函數用法)

'affine':在二維或n維仿射變換,什麼是仿射變換,可以理解爲線性變換+平移;變換前是直線的,變換後依然是直線,並且比例保持不變。參考如何通俗的講解仿射變換

'projective':在二維或n維投影變換;

'custom':用戶自定義變換;

'box':每個維度的獨立仿射變換(平移和縮放);

'composite':任意多個基本變換的組合;

效果圖:


總的來說,平移和鏡像變換都比較簡單,理解起來沒有什麼難度,就是要多熟悉下MATLAB函數和處理方法。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章