天天看點

圖像算法二:【圖像幾何變換】平移、鏡像、轉置、縮放、旋轉、插值圖像平移:imtransform(),maketform() 圖像鏡像:imtransform(),maketform() 圖像轉置:imtransform(),maketform() 圖像縮放:imresize() 圖像旋轉:imrotate()插值:  'bilinear'  ,   'nearest'  

作為一個強大的科學計算軟體,MATLAB廣泛運用于較多領域,以其簡單的程式設計風格著稱。這篇文章便通過matlab語言來講述如何進行圖像的各種幾何變換。

        圖像幾何變換又稱為圖像空間變換,它是将一幅圖像中的坐标位置,映射到另一幅圖像中的新坐标位置。幾何變換不改變圖像的像素值,隻是在圖像平面上進行像素的重新安排。

        接下來就是圖像算法的第二講,主要涉及的知識點有:

1.  幾何變換:平移、鏡像、轉置、縮放、旋轉;

2.  插值算法 

圖像平移:imtransform(),maketform()

%平移就是按照指定的平移量進行  【水準】or【垂直】  的移動。

x1=x0+Tx

y1=y0+Ty

%平移矩陣:

A =

     1     0     0

     0     1     0

    Tx    Ty   1

圖像平移的表達式:B=imtransform(Img , TFORM , method); 

%imtransform函數用于完成一般的二維空間變換

B=imtransform(Img , TFORM , method);        %Img-         要進行幾何變換的圖檔

                                                                           %TFORM-  指具體的變換類型 

                                                                           %method-   允許為imtransform函數選擇的插值方法,以下三種可填:

                                                                           %   'bicubic'         雙三次插值 

                                                                           %   'bilinear'        雙線性插值

                                                                           %   'nearest'        最近鄰插值

%maketform函數的作用:為獲得 TFORM 結構的方法。

T=maketform(transformtype, Matrix ); 

%參數transformtype指定了變換的類型,例如常見的‘affine’二維仿射變換(平移、旋轉、比例、拉伸等)

%例子:
function    Img_out = imMove(Img, Tx, Ty );                    %平移變換

                                                                                             
Img=imread('C:\Users\cat.jpg');
Tx=100;                                                        %Tx-   水準方向平移量
Ty=800;                                                        %Ty-   豎直方向平移量
tform =maketform('affine',[1 0 0 ; 0 1 0 ; Tx Ty 1 ]);
Img_out = imtransform(Img,tform,'XData',[1 size(Img,2)],'YData',[1, size(Img,1)]);%圖像平移

figure;
subplot(1,2,1);imshow(Img);title('原圖');
subplot(1,2,2);imshow(Img_out);title('平移後的圖像');
end
           
顯示出平移後的圖像,平移過的地方變成了黑色的。
圖像算法二:【圖像幾何變換】平移、鏡像、轉置、縮放、旋轉、插值圖像平移:imtransform(),maketform() 圖像鏡像:imtransform(),maketform() 圖像轉置:imtransform(),maketform() 圖像縮放:imresize() 圖像旋轉:imrotate()插值:  'bilinear'  ,   'nearest'  

圖像鏡像:imtransform(),maketform()

%平移就是按照指定的平移量進行  【水準】or【垂直】  的移動。

圖像鏡像分為兩類:水準鏡像,豎直鏡像。

%水準鏡像矩陣:

B=

     -1       0     0

     0        1     0

    Width  0     1

%豎直鏡像矩陣:

C =

     1       0        0  

     0       -1       0

     0    Height   1

%舉例:
Img=imread('C:\Users\people.jpg');

[Height, Width, dim ]=size(Img);

tform_B = maketform('affine',[-1 0 0 ; 0 1 0 ; Width 0  1 ]);           %定義水準鏡像變換矩陣

Img_B = imtransform(Img,tform,'nearest');



tform_C=maketform('affine',[1 0 0;0 -1 0;0 Height 1]);                  %定義豎直鏡像變換矩陣

 Img_C = imtransform(Img,tform_C,'nearest');



figure;

subplot(1,3,1);imshow(Img);title('原圖');

subplot(1,3,2);imshow(Img_B);title('水準鏡像');

subplot(1,3,3);imshow(Img_C);title('豎直鏡像');
           

圖像轉置:imtransform(),maketform()

%平移就是按照指定的平移量進行  【水準】or【垂直】  的移動。

%轉置變換矩陣:

D =

     0       1       0  

     1       0       0

     0       0       1

%圖像轉置
Img=imread('C:\Users\people.jpg');

tform_D = maketform('affine',[0 1 0 ; 1 0 0 ; 0 0 1 ]);    %定義轉置變換矩陣

Img_D = imtransform(Img,tform_D,'nearest');



figure;

subplot(1,2,1);imshow(Img);title('原圖');

subplot(1,2,2);imshow(Img_D);title('圖像轉置');
           

圖像縮放:imresize()

%圖像縮放是指圖像按照比率進行放大或者縮小

%縮放變換矩陣:

E =

     Sx     0       0  

     1     Sy       0

     0       0       1

%圖像縮放
Img=imread('C:\Users\people.jpg');

Img_E=imresize(Img, 1.5, 'nearest');                         %圖像擴大  1.5  倍


figure;imshow(Img);title('原圖');

figure;imshow(Img_E);title('圖像縮放');

           

圖像旋轉:imrotate()

%旋轉一般是将圖像圍繞某一點旋轉一定的角度。旋轉也會改變圖像的大小。

%旋轉變換矩陣:

F =

     cos(θ)     -sin(θ)       0  

     sin(θ)      cos(θ)       0

        0              0            1

%圍繞中心點的圖像旋轉
Img = imread('C:\Users\people.jpg');

Img_F = imrotate(Img,30, 'nearest', 'crop');        %最近鄰插值法逆旋轉30°,并剪切圖像;

subplot(1,2,1),imshow(Img);title('原圖');

subplot(1,2,2),imshow(Img_F);title('逆時針旋轉30度');
           

插值:  'bilinear'  ,   'nearest'  

之前說到的method:在這裡主要介紹一下

  1. 最近鄰插值算法           %   'nearest'        最近鄰插值
  2. 雙線性插值算法           %   'bilinear'        雙線性插值

%imtransform函數用于完成一般的二維空間變換

B=imtransform(Img , TFORM , method);        %Img-         要進行幾何變換的圖檔

                                                                           %TFORM-  指具體的變換類型 

                                                                           %method-   允許為imtransform函數選擇的插值方法,以下三種可填:

                                                                           %   'bicubic'         雙三次插值 

                                                                           %   'bilinear'        雙線性插值

                                                                           %   'nearest'        最近鄰插值

%最近鄰插值   'nearest'     

%輸出像素的值為輸入圖像中與其最近的采樣點的像素值

f(x,y) = g( round(x), round(y) );

%雙線性插值    'bilinear'     

%雙線性插值又稱為一階插值,可擴充成二維。

首先對上端的兩個點進行線性插值,得到:       f(x,0) = f(0,0)+x[f(1,0)-f(0,0)]

然後對下端的兩個頂點進行線性插值,得到:    f(x,1) = f(0,1)+x[f(1,1)-f(0,1)]

最後,對垂直方向進行線性插值,得到:           f(x,y) = f(x,y)+x[f(x,0)-f(x,0)]

整理得出:f(x,y) = [ f(1,0)-f(0,0) ]x+ [ f(0,1)-f(0,0) ]y + [ f(1,1)+f(0,0)-f(0,1) ]xy + f(0,0)

其他相關文章請點選:

圖像算法一:【圖像點運算】灰階直方圖、伽馬變換、灰階門檻值變換、分段線性變換、直方圖均衡化

圖像算法二:【圖像幾何變換】平移、鏡像、轉置、縮放、旋轉、插值

圖像算法三:【圖像增強--空間域】圖像平滑、中值濾波、圖像銳化

圖像算法四:【圖像增強--頻率域】傅裡葉變換、快速傅裡葉變換、頻域濾波、頻域低通濾波、頻域高通濾波

圖像算法五:【圖像小波變換】多分辨率重構、Gabor濾波器、Haar小波

圖像算法六:【彩色圖像處理】彩色模型、彩圖處理

圖像算法七:【形态學圖像處理】二值運算、膨脹、腐蝕

圖像算法八:【圖像分割】邊緣檢測(Roberts,Sobel,canny)、霍夫變換(hough)、門檻值分割、區域分割

圖像算法九:【圖像特征提取】特征降維、PCA人臉特征抽取、局部二進制

~~~~

繼續閱讀