Matlab 圖像平移、旋轉、縮放、鏡像
阿新 • • 發佈:2017-12-02
more msh ret 結果 src end 初始 求解 http
今天學習了用Matlab實現對圖像的基本操作。在Matlab中,圖像是按照二維矩陣的形式表示的。所以對圖像的操作就是對矩陣的操作。
對圖像進行縮放、平移、旋轉,都可以轉化為矩陣的運算。
關於變換矩陣的構造,請參考:
《 [gym 101047C Robotics Competition] 矩陣快速冪求解點旋轉平移N次之後的位置》
參考原圖:
1. 圖像平移
init = imread(‘Fig3.tif‘); % 讀取圖像
[R, C] = size(init); % 獲取圖像大小
res = zeros(R, C); % 構造結果矩陣。每個像素點默認初始化為0(黑色)
delX = 50; % 平移量X
delY = 50; % 平移量Y
tras = [1 0 delX; 0 1 delY; 0 0 1]; % 平移的變換矩陣
for i = 1 : R
for j = 1 : C
temp = [i; j; 1];
temp = tras * temp; % 矩陣乘法
x = temp(1, 1);
y = temp(2, 1);
% 變換後的位置判斷是否越界
if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
res(x, y) = init(i, j);
end
end
end;
imshow(uint8(res)); % 顯示圖像
2. 圖像旋轉
init = imread(‘Fig3.tif‘); % 讀取圖像
[R, C] = size(init); % 獲取圖像大小
res = zeros( R, C); % 構造結果矩陣。每個像素點默認初始化為0(黑色)
alfa = -15 * 3.1415926 / 180.0; % 旋轉角度
tras = [cos(alfa) -sin(alfa) 0; sin(alfa) cos(alfa) 0; 0 0 1]; % 旋轉的變換矩陣
for i = 1 : R
for j = 1 : C
temp = [i; j; 1];
temp = tras * temp;% 矩陣乘法
x = uint16(temp(1, 1));
y = uint16(temp(2, 1));
% 變換後的位置判斷是否越界
if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
res(i, j) = init(x, y);
end
end
end;
imshow(uint8(res)); % 顯示圖像
3. 圖像縮放
init = imread(‘Fig3.tif‘); % 讀取圖像
[R, C] = size(init); % 獲取圖像大小
timesX = 3; % X軸縮放量
timesY = 3; % Y軸縮放量
res = zeros(timesX * R, timesY * C); % 構造結果矩陣。每個像素點默認初始化為0(黑色)
tras = [1/timesX 0 0; 0 1/timesY 0; 0 0 1]; % 縮放的變換矩陣
for i = 1 : timesX * R
for j = 1 : timesY * C
temp = [i; j; 1];
temp = tras * temp; % 矩陣乘法
x = uint8(temp(1, 1));
y = uint8(temp(2, 1));
% 變換後的位置判斷是否越界
if (x <= R) & (y <= C) & (x >= 1) & (y >= 1)
res(i, j) = init(x, y);
end
end
end;
imshow(uint8(res)); % 顯示圖像
4. 圖像鏡像(水平)
init = imread(‘Fig3.tif‘);
[R, C] = size(init);
res = zeros(R, C);
for i = 1 : R
for j = 1 : C
x = i;
y = C - j + 1;
res(x, y) = init(i, j);
end
end
imshow(uint8(res));
Matlab 圖像平移、旋轉、縮放、鏡像