《通信专业课程设计二论文基于Matlab的数字图像几何变换的实现.doc》由会员分享,可在线阅读,更多相关《通信专业课程设计二论文基于Matlab的数字图像几何变换的实现.doc(20页珍藏版)》请在三一办公上搜索。
1、通信专业课程设计二(论文)学 生 姓 名指 导 教 师设计(论文)题目基于Matlab的数字图像几何的变换主要研究内容数字图像处理的特点及目的。数字图像几何变换的理论。数字图像缩放、剪取、旋转的实现。研究方法本论文采用了Matlab作为工具,以最近邻插法、双线性插值法和双三次插值法三种常用数字图像插值算法为基础,实现了数字图像的比例缩放、旋转和剪取一系列几何变换。主要技术指标(或研究目标)用最近邻插法、双线性插值法和双三次插值法这三种常用的数字图像插值算法实现数字图像的比例缩放、旋转和剪取一系列几何变换。教研室意见教研室主任(专业负责人)签字: 年 月 日 - 18 -目 录第1章 前言- 1
2、 -1.1数字图像概述- 1 -1.2 数字图像几何变换介绍- 2 -第2章 图像几何变换理论- 3 -2.1图像缩放原理- 3 -2.2图像旋转原理- 4 -2.3图像剪取原理- 6 -第3章 数字图像几何变换实现- 7 -3.1数字图像缩放- 7 -3.1.1 IMRESIZE函数- 7 -3.1.2数字图象缩放- 7 -3.2数字图像旋转- 10 -3.2.1 IMROTATE函数- 10 -3.2.2数字图象旋转- 10 -3.3数字图像剪取- 12 -3.3.1 IMCOPY函数- 12 -3.3.2数字图象剪取- 12 -第4章 结论- 15 -参考文献- 16 -附录- 17 -
3、第1章 前言1.1数字图像概述在20世纪20年代,图像处理首次应用于改善伦敦和纽约之间海底电缆发送的图片质量。直到20世纪50年代数字计算机发展到一定水平后,数字图像处理才真正引起人们的兴趣。1964年美国喷气推进实验室(JPL),用计算机对“徘徊者2号”太空船发回的大批月球照片进行处理,受到明显的效果。60年代末,数字图像处理已经形成了比较完善的体系,形成一门新的学科。60年代到70年代,由于离散数学的创立和完善,使数字图像处理技术得到迅猛的发展,理论和方法进一步完善,应用范围更加广阔。这一时期,图像处理主要与模式识别和图像理解的研究相联系,如文字识别、医学图像处理、遥感图像的处理等。70年
4、代后期至今,各个应用领域对数字图像处理提出越来越高的要求,促进这门学科向更高级的方向发展,特别是在景物理解和机器视觉方面,图像由二维处理变成三维解释。近几年来随着计算机和各个领域研究的迅速发展,科学计算可视化、多媒体技术等的研究和应用,数字图像处理从一个专门领域的学科变成了一种新型的科学研究和人机界面的工具。从二十世纪六十年代美国航空和太空总署(NASA)的喷气推进实验室第一次使用计算机对太空船发回的大批月球图片进行处理到信息技术不断提高的今天,数字图像的应用处理技术得到了广泛的应用,形成了自己的技术特色和完善的学科体系。用计算机进行图像处理的前提是图像必须以数字格式存储,我们把以数字格式存放
5、的图像称之为数字图像。常见的各种照片、图片、海报、广告画等均属模拟图像,要将模拟图像数字化后生成数字图像,需要利用数字化设备。目前,将模拟图像数字化的主要设备是扫描仪,将视频画面数字化的设备有图像采集卡。当然,也可以利用数码照相机直接拍摄以数字格式存放的数字图像。模拟图像经扫描仪进行数字化或由数码相机拍摄的自然景物图像,在计算机中均是以数字格式存储的。既然是数字,计算机当然可以方便地进行各种处理,以达到视觉效果和特殊效果。在计算机中,图像被分割成如下所示的像素(Pixel),各像素的灰度值用整数表示。一幅个像素的数字图像,其像素灰度值可以用行、列的矩阵表示: (1-1)1.2 数字图像几何变换
6、介绍我们在处理图像时往往会遇到需要对图像进行几何变换的一些问题。图像的几何变换时图像处理和图像分析的基础内容之一,它不仅提供了产生某些图像的可能,而且还可以使图像处理和分析的程序简单化,特别是图像具有一定的规律性时,一个图像可以由另一个图像通过几何变换来实现。所以,为了提高图像处理和分析程序设计的速度和质量,开拓图像程序应用范围的新领域,对图像进行几何变换是十分必要的。图像的几何变换不改变图像的像素值,而是改变像素所在的几何位置。从变换的性质分,图像的几何变换有图像的位置变换(平移、镜像、旋转)、图像的形状变换(放大、缩小、错切)等基本变换以及图像的复合变换等。其中使用最频繁的是图像的缩放和旋
7、转,不论照片、图画、书报,还是医学X光和卫星遥感图像都会用到这两项技术。MATLAB全称是Matrix Laboratory(矩阵实验室),一开始它是一种专门用于矩阵数值计算的软件,从这一点上也可以看出,它在矩阵运算上有自己独特的特点。实际上MATLAB中的绝大多数的运算都是通过矩阵这一形式进行的。这一特点也就决定了MATLAB在处理数字图像上的独特优势。理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。二维图像进行均匀采样,就可以得到一幅离散化成MN样本的数字图像,该数字图像是一个整数阵列,因而用矩
8、阵来描述该数字图像是最直观最简便的了。而MATLAB的长处就是处理矩阵运算,因此用MATLAB处理数字图像非常的方便。在本文中我们用MATLAB的图像处理工具包实现了图像的缩放、旋转和剪取。图像处理工具包是由一系列支持图像处理操作的函数组成的。所支持的图像处理操作有:图像的几何操作、邻域和区域操作、图像变换、图像恢复与增强、线性滤波和滤波器设计、变换(DCT变换等) 、图像分析和统计、二值图像操作等。下面就MATLAB 在图像处理中各方面的应用分别进行介绍:(1) 图像文件格式的读写和显示。(2) 图像处理的基本运算。(3) 图像变换。 (4) 图像的分析和增强。(5) 图像的数学形态学处理。
9、以上所提到的 MATLAB在图像中的应用都是由相应的MATLAB函数来实现的,使用时,只需按照函数的调用语法正确输入参数即可。1第2章 图像几何变换理论2.1图像缩放原理图像比例缩放是指将给定的图像在轴方向按比例缩放倍,在轴按比例缩放倍,从而获得一幅新的图像。如果,即在轴方向和轴方向缩放的比率相同,称这样的比例缩放为图像的全比例缩放。如果,图像的比例缩放会改变原始图象的像素间的相对位置,产生几何畸变。设原图像中的点比例缩放后,在新图像中的对应点为,则比例缩放前后两点、之间的关系用矩阵形式可以表示为 (2-6)其逆运算为 (2-7)即 (2-8)比例缩放所产生的图像中的像素可能在原图像中找不到相
10、应得像素点,这样就必须进行插值处理。有关插值的内容在后面我们会讨论。下面首先讨论图像的比例缩小。最简单的比例缩小时当时,图像被缩到一半大小,此时缩小后图像中的(0,0)像素对应于原图像中的(0,0)像素;(0,1)像素对应于原图像中的(0,2)像素;(1,0)像素对应于原图像中的(2,0)像素,以此类推。图像缩小之后,因为承载的数据量小了,所以画布可相应缩小。此时,只需在原图像基础上,每行隔一个像素取一点,每隔一行进行操作,即取原图的偶(奇)数行和偶(奇)数列构成新的图像。如果图像按任意比例缩小,则需要计算选择的行和列。如果大小的原图像缩小为大小的新图像时,则 (2-9)其中,。由此公式可以构
11、造出新图像。当时,图像不按比例缩小,这种操作因为在方向和方向的缩小比例不同,一定会带来图像的几何畸变。图像不按比例缩小的方法是:如果大小的旧图缩小为大小的新图像时,则 (2-10)其中,由此公式可以构造出新图像。图像的缩小操作中,是在现有的信息里如何挑选所需要的有用信息。而在图像的放大操作中,则需要对尺寸放大后所多出来的空格填入适当的像素值,这是信息的估计问题,所以较图像的缩小要难一些。当时,图像被按全比例放大二倍,放大后图像中的(0,0)像素对应于原图中的(0,0)像素;(0,1)像素对应于原图中的(0,0.5)像素,该像素不存在,可以近似为(0,0)也可以近似为(0,1);(0,2)像素对
12、应于原图像中的(0,1)像素;(1,0)像素对应于原图中的(0.5,0),它的像素值近似于(0,0)或(1,0)像素;(2,0)像素对应于原图中的(1,0)像素,依此类推。其实这是将原图像每行中的像素重复取值一遍,然后每行重复一次。按比例将原图像放大k倍时,如果按照最近邻域法则需要将一个像素值添在新图像的的子块中。显然,如果放大倍数太大,按照这种方法处理会出现马赛克效应。当时,图像在方向和方向不按比例放大,此时这种操作由于方向和方向的放大倍数不同,一定会带来图像的几何畸变。放大的方法是将原图像的一个像素添到新图像的一个的子块中去。为了提高几何变换后的图像质量,常采用线性插值法。该方法的原理是,
13、当求出的分数地址与像素点不一致时,求出周围四个像素点的距离比,根据该比率,由四个邻域的像素灰度值进行线性插值。2.2图像旋转原理一般图像的旋转是以图像的中心为原点,将图像上的所有像素都旋转一个相同的角度。图像的旋转变换时图像的位置变换,但旋转后,图像的大小一般会改变。在图像旋转变换中既可以把转出显示区域的图像截去,也可以扩大图像范围以显示所有的图像。同样,图像的旋转变换也可以用矩阵变换来表示。设点逆时针旋转角后的对应点为。那么,旋转前后点、的坐标分别是: (2-11) (2-12)写成矩阵表达式为 (2-13)其逆运算为 (2-14)利用上述方法进行图像旋转时需要注意如下两点:(1)图像旋转之
14、前,为了避免信息的丢失,一定要有坐标平移。(2)图像旋转之后,会出现许多空洞点。对这些空洞点必须进行填充处理,否则画面效果不好,一般也称这种操作为插值处理。以上所讨论的旋转是绕坐标轴原点(0,0)进行的。如果图像旋转是绕一个指定点(a,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图象平移回原来的坐标原点,这实际上是图像的复合变换。如将一幅图像绕点(a,b)逆时针旋转度,首先将原点平移到(a,b),即 (2-15)然后旋转 (2-16)然后再平移回来 (2-17)综上所述,变换矩阵为。2.3图像剪取原理有些时候我们为了减少图像所占存储空间,舍弃图像的无用部分,只保留感兴趣的部分
15、,这就需要用到图像的剪取。在本文中,我们只讨论对原图像剪取一个形状为矩形的部分的操作。对一幅图像进行剪取操作前,首先初始化该图像,这样图像上每个点,就对应了一个二维坐标,即。首先,我们先取二维坐标系上的一点,这点就作为要截取的矩形的左上角的起始坐标。然后我们定义一两个常量、,其中,代表矩形的长素,代表矩形的宽度,然后舍弃掉在矩形外的点,这样,在整个坐标系上,由、和四个点所围成的矩形部分便被保留下来。1第3章 数字图像几何变换实现在论文的实现过程中,主要利用了MATLAB的图像处理工具包来编写程序。MATLAB图像处理工具包是由一系列支持图像处理操作的函数组成的,所支持的图像处理操作有:几何操作
16、、区域操作和块操作;线性滤波和滤波器设计;变换(DCT变换);图像分析和增强;二值图像操作等。本论文所采用图像为分辨率为的灰度图像,其格式为JPEG。3.1数字图像缩放3.1.1 imresize函数MATLAB图像处理工具箱中的函数imresize可以用上述3种方法对图像进行插值缩放,如果不指定插值方法,则默认使用最近邻插值法。imresize函数的语法格式为:B=imresize(A,m,method)B=imresize(A,mrows ncols,method)B=imresize(,method,n)B=imresize(,method,h)这里参数method用于指定插值的方法,可
17、选的值为nearest(最近邻法),bilinear(双线性插值)及bicubic(双三次插值),默认值为nearest。B=imresize(A,m,method)返回原图A的m倍放大图像(小于1时效果是缩 小)。B=imresize(A,mrows ncols,method)返回一个mrows行,ncols列的图像,若 mrows和ncols定义的长宽比与原图不同,则图像会产生畸变。在使用bilinear和bicubic方法缩小图像时,为消除引入的高频成分,imresize使用一个前端平滑滤波器,默认的滤波器尺寸为11*11。也可通过参数n指定滤波器的尺寸,即B=imresize(,met
18、hod,n)。对于nearest插值方法,imresize不使用前端滤波器,除非函数明确指定。B=imresize(,method,h)使用用户设计的插值核h进行插值,h可以看作一个 二维FIR滤波器。3.1.2数字图象缩放首先,我们用最近邻插法将图像按原比例放大1.5倍, 其运行结果如下:图3.1 原图像图3.2 最近临插法按原比例放大1.5倍后的图像图3.1为原图,图3.2为用最近临插法按原比例放大1.5倍后的图像。下面我们分别用双线性插值法和将双三次插值法将图像按原比例放大1.5倍,并与采用最近邻插法放大的图像做比较图3.3 采用最近邻插法所得图像图3.4 采用双线性插值法所得图像图3.
19、5 双三次插值法所得图像图3.3为采用最近邻插法所得图像,图3.4为采用双线性插值法所得图像,图3-5为双三次插值法所得图像。下面我们用双线性插值法将图像按原比例缩小为0.8倍。 图3.6 原图图3.7 用双线性插值法按原比例缩小为0.8倍后的图像图3.6为原图,图3.7为用双线性插值法按原比例缩小为0.8倍后的图像。3.2数字图像旋转3.2.1 imrotate函数在对数字图像进行旋转的时候,各像素的坐标将会发生变化,使得旋转之后不能正好落在整数坐标处,需要进行插值。在工具箱中的函数imrotate可用3种方法对图像进行插值旋转,默认的插值方法也是最近邻插值法。函数imrotate的语法格式
20、为:B=imrotate(A,angle,method)B=imrotate(A,angle,method,crop)函数imrotate对图像进行旋转,参数method用于指定插值的方法,可选的值为nearest(最近邻法),bilinear(双线形插值)及bicubic(双三次插值),默认值为 nearest。一般来说,旋转后的图像会比原图大,超出原图像的部分值为0。用户也可以指定crop参数对旋转后的图像进行剪切(取图像的中间部分),使返回的图像与原图大小相同。3.2.2数字图象旋转首先,我们用双线性插值法将原图像旋转45度,不裁去超出原图的部分。图3.10 原图 图3.11 用双线性插
21、值法旋转45度后的图像,未裁去超出原图的部分图3.10为原图,图3.11为用双线性插值法旋转45度后的图像,未裁去超出原图的部分。用双线性插值法将原图像旋转45度,裁去超出原图的部分,并与未裁去超出部分的做比较, 图1是用双线性插值法将原图像旋转45度,裁去超出原图的部分,图2为未裁去超出部分的,可见图1与原图大小相同下面,我们用双线性插值法将原图像旋转90度,并与旋转45度的图像做比较。 图1为用双线性插值法将原图像旋转90度所得图像,图2为旋转45度的所得图像。3.3数字图像剪取3.3.1 IMCOPY函数有时只需要处理图像中的一部分,或者需要将某一部分取出,这样就要对图像进行剪取。图形的
22、裁剪处理可使用imcrop函数实现。函数imcrop用于剪取图像中的一个矩形子图,用户可以通过参数指定这个矩形顶点的坐标,也可以用鼠标指针选取这个矩形。其语法规则如下:I2=imcrop(I)X2=imcrop(X,map)RGB2=imcrop(RGB)I2=imcrop(I,rect)X2=imcrop(X,map,rect)RGB2=imcrop(RGB,rect)=imcrop(x,y,)A,rect=imcrop()x,y,A,rect=imcrop()其中I2=imcrop(I),X2=imcrop(x,map)和RGB2=imcrop(RGB)为交互式地对灰度图像,索引图像和真彩
23、色图像进行剪切。I2=imcrop(I,rect),X2=imcrop(X,map,rect)和RGB2=imcrop(RGB,rect)按指定的矩形框rect剪切图像,rect是一个四元向量xmin ymin width height,分别表示矩形左上角的坐标和长度及宽度。=imcrop(x,y,)在指定坐标系统(x,y)中剪取图像。A,rect=imcrop()和x,y,A,rect=imcrop()在用户交互剪取图像的同时返回剪取框的参数rect。3.3.2数字图象剪取首先,我们从坐标(0,0)开始,从原图上剪取一个长度为100,宽度为100的矩形部分。图3.16 原图图3.17 以坐标
24、(0,0)开始,剪取长度为100,宽度为100的矩形部分 下面,我们以坐标(50,50)开始,剪取长度为100,宽度为100的矩形部分,并与以坐标(0,0)开始,剪取同样大小的图像相比较。 图1为以坐标(50,50)开始,剪取长度为100,宽度为100的矩形部分,并与以坐标(0,0)开始,取长度为100,宽度为100的矩形部分。下面我们在原图像上用鼠标拖动出一个矩形框,返回该矩形框的起始坐标、长度和宽度,语句如下:i=imread(dd.jpg);A,rect=imcrop(i)截取部分如下图所示:图3.21 用鼠标截取部分返回的值为rect = 14.3004 10.6290 107.077
25、7 119.0671我们将返回的rect值带入到以下语句中:i=imread(dd.jpg);j=imcrop(i, 14.3004 10.6290 107.0777 119.0671);imshow(i),title(1)figure,imshow(j),title(2)可得图像图3.22 将返回的rect值代入后所得图像该图像与用鼠标截取的图像完全相同。6第4章 结论 本文采用了MATLAB作为工具,以最近邻插法、双线性插值法和双三次插值法三种常用数字图像插值算法为基础,实现了数字图像的比例缩放、旋转和剪取等一系列几何变换。通过研究可以发现,插值算法的选取直接影响到数字图像在经过几何变换之
26、后的质量。最近邻插法质量最差,但是算法简单,速度快;双线性插值法质量好,但是需要较大的计算量才能完成;双线性插值法无论在质量上还是速度上,都介于两者之间。插值技术的提高是以数学方法的改进和提高为前提的。运用到现实中,还应结合硬件处理速度选择合适的算法,硬件处理速度的提高也是实现复杂算法的前提。随着数学的发展和计算机硬件水平的提高,将会有更优秀的插值算法运用到实际当中,数字图像几何变换的质量和速度将得到很大程度上的提高。参考文献1 章毓晋.图像工程上册图像处理和分析M.北京:清华大学出版社,1999.32 章毓晋.图像工程下册图像理解与计算机视觉M.北京:清华大学出版社,2000.83 张兆礼,
27、赵春晖,梅晓丹.现代图像处理技术M.北京:人民邮电出版社,2001.1l4 崔屹.图像处理与分析数学形态学方法及应用M.北京:科学出版社,2000.45 贾云得.机器视觉M.北京:科学出版社,2000.46 陈桂明,张明照,戚红雨.应用MATLAB语言处理数字信号与数字图像M.北京:科学出版社,2000.17 何斌,马大予,于运坚,朱红莲.VisualC+数字 图像处理M.北京:人民邮电出版社,2001.4附录我们用最近邻插法将图像按原比例放大1.5倍,语句如下:i=imread(dd.jpg);a=1.5j=imresize(i,a);imshow(i),title(1)figure,ims
28、how(j),title(2)用双线性插值法和双三次插值法将图像按原比例放大1.5倍,语句如下:i=imread(dd.jpg);a=1.5j=imresize(i,a);k=imresize(i,a, bilinear);l=imresize(i,a, bicubic);imshow(j),title(1)figure,imshow(k),title(2) figure,imshow(l),title(3) 下面我们用双线性插值法将图像按原比例缩小为0.8倍,语句如下:i=imread(dd.jpg);a=0.8j=imresize(i,a ,bilinear);imshow(i),titl
29、e(1)figure,imshow(j),title(2) 用双线性插值法将原图像旋转45度,不裁去超出原图的部分,语句如下:i=imread(dd.jpg);a=45j=imrotate(i,a,bilinear);imshow(i),title(1)figure,imshow(j),title(2)用双线性插值法将原图像旋转45度,裁去超出原图的部分,并与未裁去超出部分的做比较,语句如下:i=imread(dd.jpg);a=45j=imrotate(i,a,bilinear);k=imrotate(i,a, bilinear, crop);imshow(k),title(1)figure
30、,imshow(j),title(2)我们从坐标(0,0)开始,从原图上剪取一个长度为100,宽度为100的矩形部分,语句如下:i=imread(dd.jpg);j=imcrop(i,0 0 100 100);imshow(i),title(1)figure,imshow(j),title(2)我们用双线性插值法将原图像旋转60度,并与旋转45度的图像做比较,语句如下:i=imread(qb.jpg);a=45b=90j=imrotate(i,b,bilinear);k=imrotate(i,a,bilinear);imshow(j),title(1)figure,imshow(k),title(2)我们以坐标(50,50)开始,剪取长度为100,宽度为100的矩形部分,并与以坐标(0,0)开始,剪取同样大小的图像相比较,语句如下:i=imread(qb.jpg);j=imcrop(i,0 0 100 100);k=imcrop(i,50 50 100 100);imshow(k),title(1)figure,imshow(j),title(2)