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