1. 程式人生 > >Matlab 圖像平移、旋轉、縮放、鏡像

Matlab 圖像平移、旋轉、縮放、鏡像

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 圖像平移、旋轉、縮放、鏡像