




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计任务书学生姓名: 专业班级: 通信1102 指导教师: 许建霞 工作单位: 武汉理工大学 题 目: 图像处理 初始条件:要求学生已完成通信专业各主干课程的学习,通过本课设进一步掌握专业课程群的综合原理、操作技能,形成基本的解决实践问题的知识体系,提高学生对现代通信系统的全面认识。要求完成的主要任务: 编程实现一幅图像的平移、镜像、旋转、缩小和放大。要求:给出所用算法的理论依据和必要的推导过程;给出原始图像和处理后的图像。 时间安排:2015年1月 6日 布置任务;2015年1月 7日10日 查阅资料,确定设计方案;2015年1月 11日16日 完成仿真、制作实物等;2015年1月 17
2、日 完成答辩。指导教师签名: 2015 年 1 月 6 日系主任(或责任教师)签名: 2015 年 1 月 6 日目录摘要IAbstractII1MATLAB简介11.1 MATLAB说明11.2 MATLAB的语言特点11.3 MATLAB系统构成12基本原理32.1总体思路32.2各部分原理3平移变换3镜像翻转3缩小和放大43编程与实现63.1原始图像选择读取63.2 平移变换7平移变换法17平移变换法283.3 镜像翻转93.4 旋转变换113.5 缩小和放大124总结与分析165心得体会176参考文献18附录:程序19摘要MATLAB自产生之日起就具有方便的数据可视化功能,以将向量和矩
3、阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这
4、方面有特殊要求的用户也可以得到满足。关键字:matlab 图像处理AbstractSince the date of MATLAB produced has convenient data visualization function, to vector and matrix with graphics demonstrated, and can be graph to mark and print. High level of construction including 2 d and 3 d visualization, image processing, animation and
5、expression mapping. Can be used in scientific computing and engineering drawing. The new version of the MATLAB to the graphics functions made a lot of improvement and perfect, make it not only in the general data visualization software with a function (such as 2 d and 3 d curve of surface rendering
6、and processing, etc) to be more perfect, and for some other software not function (such as graphical light treatment, chromaticity processing and four dimensional data performance, etc.), MATLAB also showed good processing capacity. At the same time for some special visual requirements, such as grap
7、hics dialogue, MATLAB also has the corresponding function function to ensure that the user requirements of different levels. In addition the new version of the MATLAB is mainly in the graphical user interface (GUI) for the production of the great improvement, in this respect have special requirement
8、s of users can also satisfied.Key words: matlab Image processing1MATLAB简介1.1 MATLAB说明MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MA
9、TLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。1.2 MATLAB的语言特点(1)语言简洁紧凑,使用方便灵活,库函数极其丰富。运算符丰富。 (2)MATLAB既具有结构化的控制语句(如for循环,while循环,break语句和 if语句),又有面向对象编程的特性。(3)程序限制不严格,程序设计自由度大。(4)MATLAB的图形功能强大。(5)
10、MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。(6)由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。1.3 MATLAB系统构成 主要由以下五部分构成:开发环境:MATLAB开发环境是一套方便用户使用的MATLAB函数和文件工具集,其中许多工具是图形化用户接口。它是一个集成的 用户工作空间,允许用户输入输出数据,并提供了M文件的集成编译和调试环境,包括MATLAB桌面、命令窗口、M文件编辑调试器、MATLAB工作空间和在线帮助文档。数学函数库:MATLAB数学函数库包括了大量的计算算法。从基本算法如加法、正弦,到复杂算法如矩阵求逆、快
11、速傅里叶变换等。语言:MATLAB语言是一种高级的基于矩阵/数组的语言,它有程序流控制、函数、数据结构、输入/输出和面向对象编程等特色。用这种语言能够方便快捷建立起简单运行快的程序,也能建立复杂的程序。图形处理系统:图形处理系统使得MATLAB能方便的图形化显示向量和矩阵,而且能对图形添加标注和打印。它包括强大的二维三维图形函数、图像处理和动画显示等函数。应用程序接口:MATLAB应用程序接口(API)是一个使MATLAB语言能与C、Fortran等其它高级编程语言进行交互的函数库。该函数库的函数通过调用动态链接库(DLL)实现与MATLAB文件的数据交换,其主要功能包括在MATLAB中调用C
12、和Fortran程序,以及在MATLAB与其它应用程序间建立客户、服务器关系。2基本原理2.1总体思路几何变换是图像处理和图像分析的重要内容之一。通过几何变换,可以根据应用的需要使原图像产生大小、形状和位置等各方面的变化。也就是说,几何变换可以改变像素点所在的几何位置以及图像中各物体之间的空间位置关系,这种运算可以被看成是将各物体在图像内移动,特别是图像具有一定的规律性时,一个图像可以由另一个图像通过做几何变换来产生。 几何变换可以分为图像的位置变换(平移、镜像、旋转)、形状变换(放大、缩小和剪切)以及图像的复合变换。图像几何变换的一般表达式为:其中(x, y)表示像素点的坐标位置,f(x,
13、y)表示图像像素点(x, y)的灰度值. 图像几何变换就是建立一幅图像与其变换后的图像中所有各点之间的映射关系。2.2各部分原理平移变换若将像素点(x, y)平移到, 则图像平移变换函数的矩阵表示式为:镜像翻转图像的镜像变换是与人们日常生活密切相关的一种变换。图像的镜像变换不改变图像的形状。图像的镜像变换包括水平镜像、垂直镜像和对角镜像。图像的水平镜像变换的矩阵表示形式为: 图像的垂直镜像变换的矩阵表示形式为:所以,图像的对角镜像变换的矩阵表示形式为:旋转变换原始图像的任意点A(x0, y0)经旋转 角度后到新的位置A(x, y),则旋转变换函数的矩阵表示式为:对图像进行旋转变换时应注意以下几
14、点:(1)为了避免图像旋转之后可能产生的信息丢失, 可以先进行平移, 然后进行图像旋转。(2)图像旋转之后, 可能会出现一些空白点, 需对这些空白点进行灰度级的插值处理, 否则会影响旋转之后的图像质量。缩小和放大若图像坐标缩放倍, 则缩放变换函数的矩阵表示为:如果, 即在x 轴方向和y 轴方向缩放的比率相同, 称为图像的全比例缩放;如果,图像的比例缩放会改变原始图像像素间的相对位置, 产生几何畸变。图像放大有三种方法,常用的插值算法有三种:最近邻插值、双线性插值、立方卷积插值,其中使用立方卷积插值达到的效果是最佳的。最近邻插值算法最简单的插值法是最近邻插值法,也叫零阶插值法。它输出的像素灰度值
15、就等于距离它映射到的位置最近的输入像素的灰度值,最邻近插值算法简单,在许多情况下都能得到令人满意的结果,但是当图像中包含像素之间灰度级有变化的细微结构时,最邻近算法会在图像中产生人为加工的痕迹。在实际应用中,对于二维图像,是取待测样点周围4 个相邻像素点中距离最近1 个相邻点的灰度值作为待测样点的像素值。若几何变换后输出图像上坐标为的对应位置为。双线性插值算法双线性插值又叫一阶插值法,它要经过三次插值才能获得最终结果,是对最近邻插值法的一种改进,双线性插值算法计算量比零阶插值大,但缩放后图像质量高,不会出现像素值不连续的的情况,这样就可以获得一个令人满意的结果。先对两水平方向进行一阶线性插值,
16、然后再在垂直方向上进行一阶线性插值。立方卷积插值算法立方卷积插值又叫双三次插值,是对双线性插值的改进,是一种较为复杂的插值方式,它不仅考虑到周围四个直接相邻像素点灰度值的影响,还考虑到它们灰度值变化率的影响。3编程与实现3.1原始图像选择读取MATLAB为用户提供了专门的函数以从图像格式的文件中读写图像数据。采用的是imread函数来实现图像文件的读取操作,采用的格式如下: A=imread(filename.png)该语句用于读取字符串“filename”对应的灰度图像或彩色图像,“png”指定了文件的格式。采用imshow函数进行图像的显示,采用的格式如下: A=imread(filena
17、me.png); imshow(A);当这种显示方式要求被显示的图像要么在当前目录下或MATLAB的目录下。图像读入与显示和变化的源代码如下:x=imread( shu.png);imshow(x);title(原始图像)程序运行结果如下图3.1所示:图3.1 原始图像3.2 平移变换平移变换法1平移变换主要通过move函数实现将一幅图像向右下方移动,空白的地方用黑色填充。A=double(A);A_move=zeros(size(A);H=size(A);A_x=30;A_y=30;A_move(A_x+1:H(1),A_y+1:H(2),1:H(3)=A(1:H(1)-A_x,1:H(2)
18、-A_y,1:H(3);subplot(122);imshow(uint8(A_move);title(平移后图像)运行程序,效果如图3.2所示。图3.2法1平移后图像3.2.2平移变换法2方法1结果中有部分图像被切割掉,方法2则不会。平移变换主要通过zeros函数和for函数实现。同样是将一幅图像向右下方移动,空白的地方用黑色填充。首先创立一个增长增宽的三维零矩阵,然后使用for函数的嵌套来对新的矩阵进行赋值。A=imread(basketball.png); figure(1)imshow(A);title(原始图像)width=size(imread(basketball.png),2)
19、 %获取图像宽lenght=size(imread(basketball.png),1) %获取图像长%平移h=30w=90width1=width+h;lenght1=lenght+w;A_large=zeros(lenght1,width1,3); %生成增长增宽的零矩阵for i=1:1:lenght for j=1:1:width for k=1:1:3 A_large(i+w,j+h,k)=A(i,j,k); end endendfigure(2)imshow(uint8(A_large);% 改变数据类型title(平移后图像)imwrite(uint8(A_large),afte
20、rmoving.png)运行程序,效果如图3.3所示,并生成新的图像文件。图3.3 平移后的图像3.3 镜像翻转镜像翻转主要采用fliplr、flipud两种函数,对角翻转时两者同时应用即可用法:fliplr(X)功能:matlab中的fliplr函数实现矩阵的左右翻转。 fliplr(X)使矩阵X沿垂直轴左右翻转。相关函数:flipud函数可以实现矩阵的上下翻转。备注:matlab中提供了许多对矩阵操作的函数,可以实现矩阵的三角矩阵的提取(triu、tril)、矩阵的翻转(flipud、fliplr、Flipdim)和旋转(rot90)等各种操作。用法:flipud(X)功能:matlab中
21、的flipud函数实现矩阵的上下翻转。flipud(X)实现了矩阵X的上下翻转。相关函数:fliplr函数实现矩阵的左右翻转。备注:matlab中提供了许多对矩阵操作的函数,可以实现矩阵的三角矩阵的提取(triu、tril)、矩阵的翻转(flipud、fliplr、Flipdim)和旋转(rot90)等各种操作。对图像进行不同类型的镜像变换:I=imread(basketball.png);figure(1)subplot(221);imshow(uint8(I);title(原始图像)I=double(I);h=size(I);I_fliplr(1:h(1),1:h(2),1:h(3)=I(
22、1:h(1),h(2):-1:1,1:h(3); %水平镜像变换I1=uint8(I_fliplr);subplot(222);imshow(I1);title(水平镜像变换)I_flipud(1:h(1),1:h(2),1:h(3)=I(h(1):-1:1,1:h(2),1:h(3); %垂直镜像变换I2=uint8(I_flipud);subplot(223);imshow(I2);title(垂直镜像变换)I_fliplr_flipud(1:h(1),1:h(2),1:h(3)=I(h(1):-1:1,h(2):-1:1,1:h(3); %对角镜像变换I3=uint8(I_fliplr_
23、flipud);subplot(224);imshow(I3);title(对角镜像变换)运行程序,效果如图3.4所示。图3.4镜像变换图像3.4 旋转变换旋转变换主要采用imrotate函数函数功能:对图像进行旋转操作。在matlab命令窗口中键入help 或 doc imrotate或lookfor imrotate可以获得该函数帮助信息。调用格式:B = imrotate(A,angle)将图像A(图像的数据矩阵)绕图像的中心点旋转angle度, 正数表示逆时针旋转, 负数表示顺时针旋转。返回旋转后的图像矩阵。 以这种格式调用该函数, 该函数默认采用最近邻线性插值(Nearest-nei
24、ghbor interpolation)。旋转后的图像超出的部分填充0(黑色)。B = imrotate(A,angle,method)使用method参数可以改变插值算法,method参数可以为下面这三个值:nearest:最邻近线性插值(Nearest-neighbor interpolation)bilinear: 双线性插值(Bilinear interpolation)bicubic: 双三次插值(或叫做双立方插值)(Bicubic interpolation)B = imrotate(A,angle,method,bbox)bbox参数用于指定输出图像属性:crop: 通过对旋转后
25、的图像B进行裁剪, 保持旋转后输出图像B的尺寸和输入图像A的尺寸一样。loose: 使输出图像足够大, 以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。 一般上这种格式产生的图像的尺寸都要大于源图像的尺寸。将图像逆时针旋转15 度。I=imread(basketball.png );I1=imrotate(I,15);figure(1);imshow(I1);title(逆时针旋转15 度)运行程序,效果如图3.5所示。图3.5旋转图像3.5 缩小和放大图像的缩放操作主要采用imresize函数操作。函数功能该函数用于对图像做缩放处理。在matlab的命令窗口中输入doc imresize
26、或者help imresize即可获得该函数的帮助信息。调用格式B = imresize(A, scale)返回的图像B的长宽是图像A的长宽的m倍。即缩放图像。 m大于1, 则放大图像; m小于1, 缩小图像。B = imresize(A, numrows numcols)numrows和numcols分别指定目标图像的高度和宽度。 显而易见, 由于这种格式允许图像缩放后长宽比例和源图像长宽比例不相同,因此所产生的图像有可能发生畸变。Y newmap = imresize(X, map, scale). = imresize(., method)method参数用于指定在改变图像尺寸时所使用的
27、算法, 可以为一下几种:nearest: 这个参数也是默认的, 即改变图像尺寸时采用最近邻插值算法;bilinear:采用双线性插值算法;bicubic: 采用双三次插值算法;. = imresize(., parameter, value,.)使用最近邻域法将图像放大1.5倍和缩小0.5倍。I=imread(basketball.png); %I为原始图像figure;subplot(312);imshow(I); %显示原始图像a1 = subplot(312) I=double(I);I_en=imresize(I,2,nearest); %最近邻法标志函数nearest 扩大1.5倍i
28、mwrite(uint8(I_en),larger.png);subplot(311);imshow(uint8(I_en); %显示扩大1.5倍后的图像a2 = subplot(311);I_re=imresize(I,0.5,nearest); %缩小两倍subplot(313);imshow(uint8(I_re);%显示缩小0.5 倍后的图像imwrite(uint8(I_re),smaller.png);a3 = subplot(313);xsize = get(a2, XLim);ysize = get(a2, YLim);set(a1, XLim,xsize,YLim,ysize
29、);set(a3, XLim,xsize,YLim,ysize);运行程序,效果如图所示图3.6放大图像,原始图像,缩小图像使用不同插值方法将图像缩小为原图像的0.2 倍,再使用不同的方法放大5 倍。I=imread(basketball.png);J=imresize(I,0.2); %图像缩小为0.2J2=imresize(J,5,nearest); %图像放大,最近邻插值法J3=imresize(J,5,bilinear); %图像放大,双线性插值法J4=imresize(J,5,bicubic); %图像放大,双立方插值法subplot(2,2,1);imshow(I);title(原
30、始图像);subplot(2,2,2);imshow(J2);title(最近邻插值法);imwrite(uint8(J2),最近邻插值法.png);subplot(2,2,3);imshow(J3);title(双线性插值法);imwrite(uint8(J3),双线性插值法.png);subplot(2,2,4);imshow(J4);title(双立方插值法);imwrite(uint8(J4),双立方插值法.png);运行程序,效果如图3.8所示。图3.7不同插值法放大图像4总结与分析Matlab作为一个极其强大的计算平台,拥有许多优势,在对图像进行处理时,可以看做是对于矩阵的运算,通
31、过不同的函数运算,可以达到不同效果。本次设计主要对于图像进行四种变换,分别是平移、镜像、旋转、缩放。在平移操作中,可以通过move函数更改每个像素的点位置,通过手动更改(x,y)参数控制水平竖直方向的移动距离。在镜像试验中,主要应用fliplr、flipud两种函数进行反转,其本质仍然是矩阵的翻转。在对角线翻转时,可以看做先进行水平方向的翻转在进行水平防线的翻转。翻转变换操作同样是对像素的(x,y)进行运算和重排布,以达到整体翻转 效果。图像的缩放变换通过全比例缩放对像素进行舍弃或补充性运算,放大过程中填充的像素均是由附近像素灰度值等信息计算出来的。值得一提的是,旋转和缩放变换中,默认算法是最
32、邻近差值法,也就是令变换后像素的灰度值等于距它最近的输入像素的灰度值,我在缩放变换中加入了最邻近插值法和双线性插值法(其核心思想是在两个方向分别进行一次线性插值,混合的比例与离像素的距离成反比)以及双立方插值法(在每个维度上对于连续的4个点进行插值)的比较,比较的结果是最近邻插值法锯齿感明显,色彩过渡也存在突变。双线性插值法则优于最近邻插值法,双立方插值法不仅考虑了周围四个直接相邻像素点灰度值的影响,还考虑到它们灰度值变化率的影响。因此克服了前两种方法的不足之处,能够产生比双线性插值更为平滑的边缘,计算精度很高,处理后的图像像质损失最少,效果是最佳的。在进行图像缩放处理时,应根据实际情况对三种
33、算法做出选择,既要考虑时间方面的可行性,又要对变换后图像质量进行考虑,这样才能达到较为理想的结果。 5心得体会通过此次的课程设计,感触颇深,因为让我认识到了MATLAB的强大功能,同时也对图像处理的认识有了进一步的加深。在此次课程设计中我遇到了前所未有的难题。在此我非常感谢曾经教育过我们的老师,是他们在平时教学中帮助我培养了良好的学习习惯和查阅新知识,快速理解运用新知识的能力。经过一段时间的查阅和向老师的请教,我弄清楚了此时课程设计所需的全部原理知识。在编程的过程中,我也遇到了很多困难,所幸的是图书馆有相关书籍,网络上有学长学姐们做过的仿真作为参考,有老师和同学们帮助我,于是我一步步实现了各个
34、步骤的相关编程,并且在最后得以综合整理,完成了此次的仿真任务。但是不得不说,此时课程设计由于时间和我的知识储备的问题,仍然有一些不完备的地方:在整个过程中虽然结果较为直观,但我还有过将程序加上操作界面或者将画面失真度量化等等想法,如果时间允许或有懂得更多的同学协助,应该可以做得更好。尽管此时课程设计仍然有很多不足,但是我在这个过程中加深了对各方面理论知识的了解,对我以后的学习工作产生了一定影响,十分感谢此次课程设计。 6参考文献1 高展宏,徐文波.基于MATLAB的数字图像处理案例教程.北京:清华大学 版社,20112 贺兴华等.MATLAB7.x图像处理.北京:人民邮电出版社,20063 陈
35、杰.MATLAB宝典.北京:电子工业出版社,2007.4 张德丰. MATLAB数值分析与应用. 北京:国防工业出版社,2009.5 冈萨雷斯.温茨著.数字图像处理.2版.阮秋琦,等译. 北京:电子工业出版 社,2002.6 汪晓银,邹庭荣.数学软件与数学实验.武汉:华中农业大学教务处,2007附录:程序clear;clc;A=imread(basketball.png); figure(1)imshow(A);title(原始图像)width=size(imread(basketball.png),2) %获取图像宽lenght=size(imread(basketball.png),1)
36、%获取图像长%平移h=30w=90width1=width+h;lenght1=lenght+w;A_large=zeros(lenght1,width1,3); %生成增长增宽的零矩阵for i=1:1:lenght for j=1:1:width for k=1:1:3 A_large(i+w,j+h,k)=A(i,j,k); end endendfigure(2)imshow(uint8(A_large);% 改变数据类型title(平移后图像)imwrite(uint8(A_large),aftermoving.png)%镜像I=imread(basketball.png);figure(1)sub
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年部门级安全培训考试试题及答案综合卷
- 25年公司安全管理员安全培训考试试题及答案综合卷
- 2025新版车间安全培训考试试题7A
- 2025民间借款抵押合同书范本
- 2025光纤采购合同范本3
- 2025YY简易建筑工程劳务承包合同
- 2025标准设备采购合同模板
- 2025家居、电器商品购销合同
- 2025技术研发合作合同
- 2025年油气储层保护剂项目合作计划书
- 【华为】通信行业:华为下一代铁路移动通信系统白皮书2023
- Python 程序设计智慧树知到期末考试答案章节答案2024年四川师范大学
- 03D201-4 10kV及以下变压器室布置及变配电所常用设备构件安装
- 城乡环卫保洁投标方案(技术标)
- 充值合同范本
- 湖南省炎德英才名校联考联合体2024年4月春季高一年级下学期第二次(期中)联考数学试卷
- MSDS中文版(锂电池电解液)
- 《职业病防治法》知识考试题库160题(含答案)
- 全国初中数学青年教师优质课一等奖《反比例函数的图象和性质》教学设计
- 2023-2024学年人教版数学八年级下册期中复习卷
- 环境监测仪器安装施工方案(更新版)
评论
0/150
提交评论