数字图像处理论文--图像的几何变换及其MATLAB实现学院:理学院专业:信息与计算科学班级:信计1012 姓名:学号:任课老师:集美大学理学院二○一三年十一月二十八日目录摘要 (1)一、何谓数字图像处理 (1)二、数字图像几何变换简介 (1)三、MATLAB图像处理工具介绍 (1)四、图像几何变换的MATLAB实现 (2)4.1图像几何变换的概述 (2)4.2 图像的平移变换 (2)4.3 图像的比例缩放 (4)4.4 图像的镜像变换 (5)4.5 图像的旋转变换 (7)4.6 图像的剪取 (8)五、图像几何变换的应用以及技术局限 (10)参考文献 (10)摘要:图像变换就是把图像从空间域转换到变换域(如频率域)的过程。
图像变换可以使人们从另一角度来分析图像信号的特性,利用变换域中特有的性质,使图像处理过程更加简单、有效。
图像变换是许多图像处理与分析技术的基础,而几何变换是图像变换中最基础也是应用最广泛的技术之一,本文基于MATLAB的图像处理工具,通过改变图像像素的空间位置或估算新空间位置上的像素值,从而实现图像的平移、缩放、旋转、镜像变换、图像插值等几何变换。
关键字:图像变换、几何变换、MATLAB一、何谓数字图像处理数字图像处理(Digital Image Processing),就是利用数字计算机或则其他数字硬件,对从图像信息转换而得到的电信号进行某些数学运算,以提高图像的实用性。
例如从卫星图片中提取目标物的特征参数,三维立体断层图像的重建等。
总的来说,数字图像处理包括点运算、几何处理、图像增强、图像复原、图像形态学处理、图像编码、图像重建、模式识别等。
目前数字图像处理的应用越来越广泛,已经渗透到工业、医疗保健、航空航天、军事等各个领域,在国民经济中发挥越来越大的作用。
二、数字图像几何变换简介[3]今天数字技术时代,我们身边接触到很多的数字图像,而对数字图像的处理往往会遇到需要对图像进行几何变换的一些问题。
图像几何变换是图像显示技术中的一个重要组成部分。
在图像几何变换中主要包括图像的缩放、旋转、移动、剪取等内容。
无论照片、图画、书报、还是医学X光和卫星遥感图像等领域都会用到这些技术。
通过图像的几何变换技术,可以显著提高图像处理效率和质量,为更进一步的图像处理奠定基础。
三、MATLAB图像处理工具介绍[1]MATLAB全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件。
它绝大多数的运算都是通过矩阵这一形式进行的,这一特点也就决定了MATLAB 在处理数字图像上的独特优势。
在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,二维图像进行均匀采样,就可以得到一幅离散化成M ×N 样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。
而MATLAB 的长处就是处理矩阵运算,因此用MATLAB 处理数字图像非常的方便。
我们可以应用MATLAB 的图像处理工具包实现图像平移、缩放和旋转等几何变换。
图像处理工具包是由一系列支持图像处理操作的函数组成的。
所支持的图像处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT 变换等) 、图像分析和统计、二值图像操作等。
MATLAB 在图像中的应用都是由相应的MATLAB 函数来实现的,使用时,只需按照函数的调用语法正确输入参数即可实现图像的几何变换。
四、图像几何变换的MATLAB 实现[2]4.1、图像几何变换的概述图像几何变换的实质是改变像素的空间位置或估算新空间位置上的像素值。
图像几何变换的一般表达式:[,][(,),(,)]u v X x y Y x y =其中,[,]u v 为变换后图像像素的笛卡尔坐标,[,]x y 为原始图像中像素的笛卡尔坐标。
这样就得到了原始图像与变换后图像的像素的对应关系。
如果(,),(,)X x y x Y x y y ==则有[,][,]u v x y =即变换后图像仅仅是原图像的简单拷贝。
4.2、图像的平移变换图像平移就是将图像中所有的点都按照指定的平移量水平、垂直移动。
设(x0,y0)为原图像上的一点,图像水平平移量为tx ,垂直平移量为ty ,则平移后点(x0,y0)坐标将变为(x1,y1)。
显然(x0,y0)和(x1,y1)的关系如下:⎩⎨⎧+=+=tyy y tx x x 0101用矩阵表示如下:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1001001001111y x ty tx y x 对该矩阵求逆,可以得到逆变换:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1111001001100y x ty tx y x 即⎩⎨⎧-=-=tyy y tx x x 1010这样,平移后的图像上的每一点都可以在原图像中找到对应的点。
例如,对于新图中的(0,0)像素,代入上面的方程组,可以求出对应原图中的像素(-tx ,-ty )。
如果tx 或ty 大于0,则(- tx ,- ty )不在原图中。
对于不在原图中的点,可以直接将它的像素值统一设置为0或则255(对于灰度图就是黑色或白色)。
同样,若有点不在原图中,也就说明原图中有点被移出显示区域。
如果不想丢失被移出的部分图像,可以将新生成的图像宽度扩大|tx |,高度扩大| ty |。
Matlab 实现J=imread('E:\image3.jpg');figure; subplot(1,3,1); imshow(J); title('原图');s=translate(strel(1),[50,-50]); J1=imdilate(J,s); subplot(1,3,2); imshow(J1);title('左下方平移');s=translate(strel(1),[50,50]); J2=imdilate(J,s); subplot(1,3,3); imshow(J2);title('右下方平移'); 运行结果:4.3、图像的比例缩放图像比例缩放是指将给定的图像在x 轴方向按比例缩放x f 倍,在y 轴按比例缩放y f 倍,从而获得一幅新的图像。
如果x y f f =,即在x 轴方向和y 轴方向缩放的比率相同,称这样的比例缩放为图像的全比例缩放。
如果x y f f ≠,图像的比例缩放会改变原始图象的像素间的相对位置,产生几何畸变。
设原图像中的点000(,)P x y 比例缩放后,在新图像中的对应点为(,)P x y ,则比例缩放前后两点000(,)P x y 、(,)P x y 之间的关系用矩阵形式可以表示为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11000000100y x fy fx y x其中, x f 和y f 分别为0x 和0y 坐标的缩放因子,其大于1表示放大,小于1表示缩小。
MATLAB 实现:I=imread('E:\image3.jpg');figure;imshow(I); title('原图');J1=imresize(I,0.5,'nearest'); figure; imshow(J1);title('缩小图');J2=imresize(I,2,'nearest');figure;imshow(J2);title('放大图');运行结果:4.4、图像的镜像变换图像的镜像变换分为两种:一种是水平镜像,另外一种是垂直镜像。
图像的水平镜像操作是将图像的左半部分和右半部分以图像垂直中轴线为中心镜像进行对换;图像的垂直镜像操作是将图像上半部分和下半部分以图像水平中轴线为中心镜像进行对换。
设图像高度为lHeight,宽度为lWidth,原图中(x0,y0)经过水平镜像后坐标将变为(lWidth-x0,y0),其矩阵表达式为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡10010001001111x y lWidth y x逆运算矩阵表达式为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11110001001100y x lWidth y x 即⎩⎨⎧=-=1010y y x lWidth x同样,(x0,y0)经过垂直镜像后坐标将变为(x0,lHeight-y0),其矩阵表达式为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡10010010001111y x lHeight y x 逆运算矩阵表达式为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡11110010001100y x lHeight y x 即⎩⎨⎧-==1010y lHeight y x xMATLAB 实现:I=imread('E:\MAN.tif');figure;subplot(1,3,1); imshow(I); title('原图');tform1=maketform('affine',[-1 0 0;0 1 0;1 0 1]); J1=imtransform(I,tform1,'nearest'); subplot(1,3,2); imshow(J1);title('水平镜像');tform2=maketform('affine',[1 0 0;0 -1 0;0 1 1]); J2=imtransform(I,tform2,'nearest'); subplot(1,3,3); imshow(J2);title('垂直镜像'); 运行结果:4.5、图像的旋转一般图像的旋转是以图像的中心为原点,旋转一定的角度。
旋转后,图像的大小一般会改变。
和图像平移一样,既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。
可以推导一下旋转运算的变换公式。
如下图所示,点(x0,y0)经过旋转θ度后坐标变成(x1,y1)。
在旋转前:⎩⎨⎧==)sin(0)cos(0θθr y r x 旋转后:⎩⎨⎧+-=-=-=+=+=-=)cos(0)sin(0)sin()cos()cos()sin()sin(1)sin(0)cos(0)sin()sin()cos()cos()cos(1θθθαθαθαθθθαθαθαy x r r r y y x r r r x 写成矩阵表达式为:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1001000)cos()sin(0)sin()cos(111y x y x θθθθ其逆运算如下:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡1111000)cos()sin(0)sin()cos(100y x y x θθθθMATLAB 实现:I=imread('E:\WOMAN.jpg'); figure;subplot(1,2,1); imshow(I); title('原图'); [M,N]=size(I);ang=30; J=I;for i=1:M for j=1:Nx=floor((i-M/2)*cos(ang*pi/180)-(j-N/2)*(-sin(ang*pi/180))+M/2); y=floor((j-N/2)*cos(ang*pi/180)+(i-M/2)*(-sin(ang*pi/180))+N/2); if((x<M)&(y<N)&(x>0)&(y>0)) J(i,j)=I(x,y); elseJ(i,j)=0; end end endsubplot(1,2,2);imshow(J);title('图像旋转'); 运行结果:4.6、图像的剪取有时候我们为了减少图像所占存储空间,舍弃图像的无用部分,只保留感兴趣的部分,则需要用到图像的剪取。