图像算法二:【图像几何变换】平移、镜像、转置、缩放、旋转、插值

作为一个强大的科学计算软件,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

 

显示出平移后的图像,平移过的地方变成了黑色的。

图像算法二:【图像几何变换】平移、镜像、转置、缩放、旋转、插值_第1张图片

 

图像镜像: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人脸特征抽取、局部二进制

~~~~

你可能感兴趣的:(MATLAB,图像算法)