matlab实现图像的放大及旋转.doc_第1页
matlab实现图像的放大及旋转.doc_第2页
matlab实现图像的放大及旋转.doc_第3页
matlab实现图像的放大及旋转.doc_第4页
matlab实现图像的放大及旋转.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如距阵,特征向量、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。(4)出色的图形处理功能 MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和距阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使他不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。(5)应用广泛的模块集合工具箱MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。一般来说,他们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。(6)实用的程序接口和发布平台新版本的MATLAB可以利用MATLAB编译器和C/C 数学库和图形库,将自己的MATLAB程序自动转换为独立于MZATLAB运行的C和C 代码。允许用户编写可以和MATLAB进行交互的C或语言程序。另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是他有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。(7)应用软件开发(包括用户界面)在开发环境中,使用户更方便地控制多个文件和图形窗口;在编程方面支持了函数嵌套,有条件中断等;在图形化方面,有了更强大的图形标注和处理功能,包括对性对起连接注释等;在输入输出方面,可以直接向Excel和HDF5。 实验三 图像的几何操作一、 图像的基本运算1、 加法运算图像相加一般用于对同一场景的多幅图像求平均效果,以便有效地降低具有叠加性质的随机噪声。直接采集的图像品质一般都较好,不需要进行加法运算处理,但是对于那些经过长距离模拟通信方式传送的图像(如卫星图像),这种处理是必不可少的。在MATLAB7.0中,如果要进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输入图像。imadd函数的调用格式可参考图像处理的工具箱。下面的程序可将图1两幅图像叠加在一起,叠加效果如图2所示。imshow(rice.png); imshow(cameraman.tif); I=imread(rice.png); J=imread(cameraman.tif); K=imadd(I,J,uint16);%大小必须一样 imshow(K,) 图1 图2给图像的每一个像素加上一个常数可以使图像的亮度增加。例如以下程序示例的处理效果如图3所示。I=imread(rice.png);J=imadd(I,50);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J); 图32、 减法运算图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。图像减法可以作为许多图像处理过程的准备步骤。例如,可以使用图像减法来检测一系列相同场景图像的差异。图像减法与阈值化处理的综合使用通常是建立机器视觉系统最有效的方法之一。当然,在利用图像减法处理图像时,往往需要考虑背景的更新机制,尽量补偿因天气、光线等因素对图像显示效果造成的影响。在MATLAB7.0中,使用imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将相应的像素值之差作为输出图像相应的像素值。以下的程序代码示例首先根据原始图像生成其背景亮度图像,然后再从原始图像中将背景亮度图像减去,从而生成如图4所示的图像。I=imread(rice.png);blocks=blkproc(I,32 32,min(x(:);%背景background=imresize(blocks,256 256,bilinear);Ip=imsubtract(I,background);imshow(Ip,) 图43、 乘法运算两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常被称为缩放,这是一种常见的图像处理操作。如果使用的缩放因数大于1,那么将增强图像的亮度,如果因数小于1则会使图像变暗。缩放操作通常将产生比简单添加像素便宜量自然得多的明暗效果。这是因为该操作能够更好的维持图像的相关对比度。此外,由于时域的卷积或相关运算与频域的乘积运算对应,因此乘法运算有时也作为一种技巧来实现卷积或相关处理。在MATLAB7.0中,可以使用immultiply函数实现两幅图像的乘法。immultiply函数将两幅图像相应的像素值进行元素对元素的乘法操作,并将乘法的运算结果作为输出图像相应的像素值。例如,以下程序示例将使用给定的缩放因数对图5所示的图像进行缩放,从而得到如图6所示的较为明亮的图像。I=imread(moon.tif);I16=uint16(I);J=immultiply(I16,I16);imshow(I),figure,imshow(J) 图5 缩放前 图6 缩放后4、 除法运算除法运算可用于校正成像设备的非线性影响,这在特殊形态的图像(如断层扫描等医学图像)处理中经常用到。图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法操作也称为比率变换。在MATLAB7.0中,可以使用imdivide函数进行两幅图像的除法。imdivide函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除),并将得到的结果作为输出图像的相应像素值。以下程序代码示例将图7的两幅图进行除法操作,得到如图8所示的效果图。I=imread(rice.png);blocks=blkproc(I,32 32,min(x(:);background=imresize(blocks,256 256,bilinear);Ip=imdivide(I,background);imshow(Ip,) %相除后 figureI=imread(rice.png);I16=uint16(I);J=immultiply(I16,I16);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(J);%两张相除 a 图像一 b 图像二 图7 两幅待相除的图像 图8 相除后的图像二、 图像的插值运算MATLAB7.0中的imresize函数和imrotate函数用于二维图像的差值运算,MATLAB7.0的图像处理工具箱提供了3种插补方法:近邻(nearest neighbor)插值双线性(bilinear)插值双立方(bicubic)插值这三种插补方法的运算方式基本类似。对于每种插补方法,为了确定插值像素点的数据值,用户必须在输入图像中查找到与输出像素相应的点。但是上述三种插值方法的主要区别在于其对像素点赋值内容的不同:对于近邻插值来说,输出像素的赋值为当前点的像素点。对于双线性插值来说,输出像素的赋值为2*2矩阵所包含的有效点的加权平均值。对于双立方插值来说,输出像素的赋值为4*4矩阵所包含的有效点的加权平均值。三、 调整图像的大小改变图像的大小可用imresize函数来调整。imresize函数主要特点有:可以指定输出图像的大小。可以指定插值方法。可以指定滤波器来阻止混淆。1、 指定输出图像的大小指定输出图像大小的方法有两种:一是指定放大因子,二是指定输出图像的维数。以下程序代码示例用指定放大因子的方法说明imresize函数的使用用法,并将原图像放大了1.25倍,其效果如图9所示。 a 改变前 b 改变后 图9 图像大小改变前、后的效果对比2、 指定插值方法在默认的情况下,imresize函数可用最近邻插值法来指定输出图像的像素值。当然,也可以指定其他的插值方法,以下命令行用imresize函数指定了双线性插值方法。Y=imresize(X,100 150,bilinear)四、 图像的旋转可通过imrotate函数来旋转图像。imrotate函数主要包括两个参数:需要旋转的图像和旋转的角度。如果指定一个正的旋转角度,那么imrotate函数将使用指定的插值方法和旋转角度将图像逆时针旋转;如果指定一个负值,那么将按顺时针方向旋转。如果命令中没有指定插补方法,则函数采用默认的最近邻插补方法。例如以下的程序代码示例将ic.tif图像旋转35,其旋转效果如图10所示。I=imread(circuit.tif);J=imrotate(I,35,bilinear);imshow(I);figure,imshow(J); a 旋转前 b 旋转后 图10 图像旋转前、后的显示效果比较五、 实验报告要求:1、 说明利用MATLAB图像处理工具箱进行图像的加、减、乘、除处理的方法;2、 (作业)不调用函数,自行编写代码实现二维图像的放大与旋转并记录结果图像。提交: 放大(基于像素放大原理)A=imread(C:Documents and SettingsAdministrator桌面matlablogo.tif)B=zeros(320,320)x=1.2 for i=1:1:round(x*107);for j=1:1:round(x*122);B(i,j)=A(round(i/x),round(j/x);endend imshow(B) 旋转A=imread(C:Documents and SettingsAdministrator桌面matlablogo.tif)y=pi/6%角度a=zeros(107,122)%矩阵ifor i=1:1:107;for j=1:1:122;a(i,j)=i;endendaa=zeros(107,122)%ifor i=1:1:107;for j=1:1:122;aa(i,j)=round(i*cos(y)-j*sin(y);endendaa=aa+61%调整b=zeros(107,122)%矩阵jfor i=1:1:107;for j=1:1:122;b(i,j)=j;endendbb=zeros(107,122)%jfor i=1:1:107;for j=1:1:122;bb(i,j)=round(i*sin(y)+j*cos(y);endendG=zeros(153,159)%扩展画布for i=1:1:107;for j=1:1:122;m=aa(i,j);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论