首页 基于MATLAB数字图像处理的实现和仿

基于MATLAB数字图像处理的实现和仿

举报
开通vip

基于MATLAB数字图像处理的实现和仿通信专业课程设计一 太原科技大学 课程设计(论文) 设计(论文)题目:基于MATLAB数字图像处理的实现 和仿真 姓学班学名号级院指导教师 2010年12月31日 太原科技大学课程设计(论文)任务书 学院(直属系):华科学院电子信息工程系 学生姓名 设计(论文)题目时间:2010年12月17日指导教师基于MATLAB数字图像处理的实现和仿真 学习MATLABGUI程序设计,利用MATLAB图像处理工具箱, 主要研 究内容设计和实现自己的Photoshop。按照软件工程方法,根据需求进行程序的功能分析和界面设计,给...

基于MATLAB数字图像处理的实现和仿
通信专业课程设计一 太原科技大学 课程设计(论文) 设计(论文)题目:基于MATLAB数字图像处理的实现 和仿真 姓学班学名号级院指导教师 2010年12月31日 太原科技大学课程设计(论文)任务书 学院(直属系):华科学院电子信息工程系 学生姓名 设计(论文)题目时间:2010年12月17日指导教师基于MATLAB数字图像处理的实现和仿真 学习MATLABGUI程序设计,利用MATLAB图像处理工具箱, 主要研 究内容设计和实现自己的Photoshop。按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照拟定的功能 要求进行程序设计和调试。 研究方法主要运用MATLAB工具箱对图像进行处理和分析,通过编写程序 实现对数字图像的处理。 主要技术 指标(或研 究目标)综合运用MATLAB工具箱实现图像处理的GUI程序设计。 教研室 意见 教研室主任(专业负责人)签字:年月日 太原科技大学:基于MATLAB数字图像处理的实现和仿真 目录 摘要............................................................................................................................II 第1章绪论................................................................................................................1 第2章数字图像处理系统设计................................................................................2 2.1设计概括..........................................................................................................2 2.2文件..................................................................................................................3 2.2.1打开.......................................................................................................3 2.2.2保存.......................................................................................................3 2.2.3退出.......................................................................................................3 2.3编辑..................................................................................................................3 2.3.1灰度.......................................................................................................3 2.3.2亮度.......................................................................................................5 2.3.3截图.......................................................................................................7 2.3.4缩放.......................................................................................................7 2.4旋转..................................................................................................................9 2.4.1上下翻转...............................................................................................9 2.4.2左右翻转.............................................................................................10 2.4.3任意角度翻转.....................................................................................11 2.5噪声................................................................................................................12 2.6滤波................................................................................................................13 2.6.1中值滤波.............................................................................................13 2.6.2自适应滤波.........................................................................................13 2.6.3平滑滤波............................................................................................14 2.7直方图统计....................................................................................................15 2.8频谱分析........................................................................................................16 2.8.1、频谱图..............................................................................................16 2.8.2通过高通滤波器.................................................................................17 2.8.3通过低通滤波器.................................................................................18 2.9灰度图像处理................................................................................................19 2.9.1二值图像.............................................................................................19 2.9.2创建索引图像.....................................................................................20 2.10颜色模型转换..............................................................................................21 2.11操作界面设计..............................................................................................22 第3章程序调试及结果分析..................................................................................23总结............................................................................................................................24参考文献......................................................................................................................25附录..............................................................................................................................26 I 太原科技大学:基于MATLAB数字图像处理的实现和仿真 基于MATLAB数字图像处理的实现和仿真 摘要 数字图像处理(DigitalImageProcessing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。在数字图像处理过程中,输入的是质量低的图像,输出的是改善质量后的图像,常用的图像处理方法有图像增强、复原、编码、压缩等。 MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。 本文利用MATLAB图像处理工具箱,根据需求进行程序的功能分析和界面设计,实现数字图像的灰度处理、亮度处理、截图、缩放、旋转、噪声、滤波、直方图统计、频谱分析、颜色模型转换等。 关键词:数字图像处理,MATLAB II 太原科技大学:基于MATLAB数字图像处理的实现和仿真 第1章绪论 数字图像处理,即用计算机对图像进行处理。与人类对视觉机理研究的历史相比,它是一门相对年轻的学科。但在其短短的历史中,它却以程度不同的成功被广泛应用于几乎所有与图像有关的领域口数字图像处理技术在20多年的时间里,迅速地发展成为一门独立的有强大生命力的学科。 数字图像处理的手段有光学方法和电子学(数字)方法。前者已经有很长的一发展历史,从简单的光学滤波到现在的激光全息技术。光学处理理论已经日趋完善,而且处理速度快,信息容量大,分辨率高,处理经济。但是光学处理图像精度不够高,稳定性能差,操作不方便。最早的图像处理是上世纪六七十年代,随着电子技术和计算机技术的不断提高和普及,数字图像处理进入高速发展时期。数字图像处理就是利用数字计算机或者其它数字硬件,对从图像信息转换而得的电信号进行某些数学运算,以提高图像的实用性。例如从卫星图片中提取目标物的特征参数,三维立体断层图像的重建等等。数字图像处理技术处理精度比较高,而且还可以通过改进处理软件来优化处理效果。但是,由于数字图像处理的数据量非常庞大,因此处理速度相对较慢,这就限制了数字图像处理的发展。随着计算机技术的飞速发展,计算机的运算速度大大提高,这将大大促进数字图像处理技术的发展。 数字图像处理在它短短的发展历史中,迅速发展成为了一门独立的具有强大生命力的学科,它应用于很多领域:遥感技术、医用图像处理、工业领域中、军事公安、文化艺术等方面。 数字图像处理技术研究内容很多,主要包括以下几个方面:图像变换、图像编码压缩、图像增强和复原、图像分割、图像描述图像识别等。数字图像处理具有再现性好、处理精度高、适用面广、灵活性高、成本低等优点。在图像研究领域中图像特征的研究是一重要的研究方向。人们观察图像时主要通过观察图像纹理、亮度、几何等关键特征,从而来识别理解图像。实际上通过图像特征的提取匹配不仅用于图像识别,还可以用于图像分割、配准、拼接等各个方面。对图像特征的研究已经取得了很多研究成果,随着人们探知世界的深入,对图像特征的研究将更加重要。 1 太原科技大学:基于MATLAB数字图像处理的实现和仿真 第2章 2.1设计概括数字图像处理系统设计 由于要实现的功能并不是很多,所以在排版的过程中,把各个功能都安排在 目录栏上,整体安排如下图所示: 图2.1设计概括 同时在调节亮度时,虽然可以同对话框的形式输入调节的比例系数,但是这样效果不好了,不容易调节,因此这里考虑用滚动条来调节。因此,总体的设计 界面如下图所示: 图2.2设计界面 2 太原科技大学:基于MATLAB数字图像处理的实现和仿真 2.2文件 2.2.1打开 为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择uigetfile函数来实现,uigetfile函数显示一个打开文件对话框,该对话框自动列出当前路径下的目录和文件,由于这个GUI程序的操作对象是图像文件,所以设置这里的缺省后缀名为“.bmp”。 Uigetfile函数的调用格式为[name,path]=yigetfile(…),在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。如果按下取消按钮或是发生错误,则返回值是0。根据返回值的情况,如果是0,则弹出提示错误的对话框,否则,通过imread函数读出图像数据,把图像数据赋值给全局变量handles.img。 2.2.2保存 同样也通过对话框的形式来保存图像数据,通过uigetfile函数选择文件名和路径,用getimage(gca)取出坐标2变换后的图像数据保存到变量i,最后用imwrite函数,把数据i存到指定的文件。 2.2.3退出 退出比较简单,程序如下所示: clc; closeall; close(gcf); 2.3编辑 2.3.1灰度 将RGB图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255×255×255)的颜色的变化范围。而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。灰度图像的描述与彩色图像一样仍然反映了整 3 太原科技大学:基于MATLAB数字图像处理的实现和仿真 幅图像的整体和局部的色度和亮度等级的分布和特征。图像的灰度化处理可用两种方法来实现。 第一种方法使求出每个像素点的R、G、B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。 第二种方法是根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应,以这个亮度值表达图像的灰度值,公式为: NGray0.299R0.587G0.114B (2-1) 由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为: y=(handles.img(:,:,1));%当然也可以选择(:,:,2)或(:,:,3)󰀂󰀂󰀂󰀂 imshow(y); 但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。 另一种方法就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。程序为: y=rgb2gray(handles.img);󰀂󰀂󰀂󰀂󰀂 imshow(y); 这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。完整的程序如下: ifisrgb(handles.img) y=rgb2gray(handles.img);󰀂󰀂󰀂󰀂󰀂 imshow(y); else msgbox('这已经是灰度图像','转换失败'); end 4 太原科技大学:基于 MATLAB 数字图像处理的实现和仿真 如果原图是RGB,执行该操作的结果如下图: 图2.3灰度处理对比图 2.3.2亮度 亮度是指颜色的相对明暗程度,通常使用从0%(黑色)至100%(白色)的百分比来度量。 亮度处理是指图像整体变亮或者变暗,实现方法:加大或减小每个像素的三色数,公式为: VV1d其中:1d1 (2-2) 式中:V为调整后颜色值V'为原颜色值d为亮度调整系数 用imadjust函数,其调用格式如下: g=imadust(f,[low_inhigh_in],[low_outhigh_out]),gamma) gamma表示映射性质,默认值是1表示线性映射。 由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给[low_inhigh_in],[low_outhigh_out],gamma这五个参数,如下一组命令建立了如下图所示的输入对话框: 图2.4命令对话框 5 太原科技大学:基于MATLAB数字图像处理的实现和仿真 prompt={'输入参数1','输入参数2','输入gamma'}; defans={'[00.7]','[01]','1'}; p=inputdlg(prompt,'输入参数',1,defans); 但是,这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。所以应该用滑动条来调节图像的亮度和对比度,这样更适合用户的使用习惯。 由于imadjust函数有五个参数,所以原则上需要设计五个滑动条来调节对比度,这对用户来说显然比较麻烦,因此在设计的时候固定其中的三个参数,通过调节两个参数的值来改变亮度和对比度。 [0handles.beta],[01],handles.gm,这里的变量handles.beta和handles.gm就 通过滑动条得到,滑动条设计如下图: 图2.5滑动条设计图 亮度调整的tag名为ld,取值范围0~1,gamma值的tag名为gamma,取值范围为0~5。获取滑动条参数的程序如下: handles.beta=get(handles.ld,'value'); handles.gm=get(handles.gamma,'value'); 执行该操作,调节滑动条到上图所示位置,结果如下图: 图2.6亮度处理对比图 6 太原科技大学:基于MATLAB数字图像处理的实现和仿真 2.3.3截图 提取目标图像中的任意部分,公式:imcrop('图象名',[x起点,y起点,x宽度,y宽度]。 在MATLAB中,用函数imcrop实现对图像的剪切操作。该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。 Imcrop函数的调用格式如下: y=imcrop(handles.img); 不管handles.img是三维的还是二维数据,该函数都能进行操作。下图就是 对三维图像的截图: 图2.7截图处理对比图 2.3.4缩放 假设图像x轴缩放比例为c,y轴方向缩放比率为d,,那么原图中,点(x0,y0)对应与新图中的点(x1,y1)的转换矩阵为: x1c00x0y=0d0y1000111 (2-3) 要求:输入一副图像,根据输入的水平和垂直放量,显示缩放后的图像。在MATLAB中,用函数imresize来实现对图像的放大或缩小。插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。 该函数的调用格式如下: 7 太原科技大学:基于MATLAB数字图像处理的实现和仿真 B=imresize(A,m,method) 其中: 参数method用于指定插值的方法,可选的值为“nearest”(最近邻法),“bilinear”(双线性插值)、“bicubic”(双三次插值),缺省值为“nearest”。 B=imresizee(A.m,method)表示返回原图A的m倍放大图像(m小于1时实际上是缩小); 下图就是采用邻近插值法的放大和缩小图像,参数值保持默认设置: 图2.8放大处理对比图 虽然处理后看不出放大的效果,这是由于坐标轴限制的原因,如果把处理后 的图片保存起来,再把处理后的文件打开,就可以看到比较明显的放大效果。 图2.9放大效果图 缩小后的结果如下: 8 太原科技大学:基于 MATLAB数字图像处理的实现和仿真 图2.10缩小处理对比图 2.4旋转 2.4.1上下翻转 如果A是一个列向量,将A中的元素顺序进行翻转。 如果A是一个行向量,还等于A。 例一:A是一个3×2的矩阵 14 25 36 例二:A是一个列向量 1 2 33翻转则为:2136翻转则为:2514 例三:A是一个行向量 123翻转则为:321 函数flipud是实现一个二维矩阵的上下翻转,如a=[12;34],经过该函数处理后,原矩阵变为[34;12];所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对RGB图像和灰度图像分开处理,这就要用到isrgb函数来判断,如果是灰度图像,则可以直接用这个函数进行处理,否则就要对RGB图像进行降维处理。 fork=1:3 9 太原科技大学:基于MATLAB数字图像处理的实现和仿真 y(:,:,k)=flipud(x(:,:,k)); end 处理结果如图: 图2.11上下翻转处理对比图 2.4.2左右翻转 如果A是一个行向量,将A中元素的顺序进行翻转。 如果A是一个列向量,还等于A。 例一:A是一个行向量 123翻转则为:321 例一:A是一个3×2的矩阵 14 25 3641翻转则为:5263 例三:A是一个列向量 1 2 31翻转则为:23 对图像的左右翻转也可以用fliplr函数来处理,同样的,也要对灰度和彩色图像分开处理,处理结果如图: 10 太原科技大学:基于 MATLAB数字图像处理的实现和仿真 图2.12左右翻转处理对比图 2.4.3任意角度翻转 图像绕中心点旋转的公式为: x1cossin0x0y=sincos0y 1001011 (2-4) 图像如果绕一个指点点a,b旋转,则先要将坐标系平移到该点,再进行旋转,然后平移回新的坐标原点。则旋转变换公式为: x110acossin010ax0y=01bsincos001by 1001001001011 (2-5) 用函数imrotate来实现对图像的插值旋转。 该函数的调用格式如下: B=imrotate(A,angle,method,’crop’) 其中,参数method用于指定插值的方法,可选的值可以有三种,分别为邻近插值,双线性插值,双三次插值,缺省时为邻近插值,参数angle代表旋转的角度。 一般来说,旋转后的图像会比原图大,用户可以指定“crop”参数对旋转后的图像进行剪切(取图像的中间部分),使返回的图像与原图大小相同。执行结果为: 11 太原科技大学:基于 MATLAB数字图像处理的实现和仿真 图2.13任意角度翻转处理对比图 2.5噪声 图像是噪声:原本我们可以清晰的看到一副图像,但是有时候图像上会有一些我们不需要的图案,使我们无法很清楚的看清一副图,这就是图像的噪声。 去除噪声的方法:不同原因产生的噪声,其分布特性也不完全相同,根据噪声和信号的关系可将其氛围两种形式:1.加性噪声,此类噪声与输入图像信号无关,含噪声象表示为fx,ygx,ynx,y;2.乘性噪声,此类噪声与图像信号有关,含噪声象表示为fx,ygx,ynx,ygx,y。噪声对图像处理十分重要,如果图像伴有较大的噪声,它会直接影响到图像处理的输入、采集、处理的各个环节以及输出的全过程甚至输出结果,因此在进行数字图像处理的时候,首先需要对目标图像进行去除噪声的工作。 经常用到的噪声有三种,高斯噪声,椒盐噪声,乘性噪声,可以通过以下三个函数来实现: y=imnoise(handles.img,'gaussian',p1,p2); y=imnoise(x,'salt&pepper',p1); y=imnoise(handles.img,'speckle',p1);%高斯噪声%椒盐噪声%乘性噪声 p1,p2的参数也通过输入对话框的形式得到,原图加入高斯噪声后结果如下所示: 12 太原科技大学:基于 MATLAB数字图像处理的实现和仿真 图2.14噪声处理对比图 2.6滤波 2.6.1中值滤波 中值滤波是一种能有效抑制图像噪声而提高信噪比的非线性滤波技术。它是一种领域运算,类似与卷积,但计算的不是加权求和,而是把领域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值。 设有一个而为图像XP,二维中值滤波的结果为: yi,jmedianfi,j (2-6) 2.6.2自适应滤波 自适应滤波,就是利用前一时刻已获得的滤波器参数等结果,自动调节现时刻的滤波器参数,以适应信号和噪声未知或随时间变化的统计特性,从而实现最优滤波。自适应滤波器由两个部分组成:一是滤波器的结构;二是调节滤波器系数的自适应算法。自适应滤波器的特点是自动调节自身的冲激响应,达到最优滤波,此算法适用于平稳和非平稳随机信号,并且不要求知道信号和噪声的统计特性。公式为: ynWTnXninxni i0N1 (2-7) 式中:n为时间序列;N为滤波器阶数; xnxn,xn1,,xnN1 Wn0n,1n,,N1nT为输入矢量T为全系数矢量 (2-8) 13 太原科技大学:基于MATLAB数字图像处理的实现和仿真 2.6.3平滑滤波 平滑滤波是低频增强的空间域滤波技术。它的目的有两类:一类是模糊;另一类是消除噪音。空间域的平滑滤波一般采用简单平均法进行,就是求邻近像元点的平均亮度值。邻域的大小与平滑的效果直接相关,邻域越大平滑的效果越好,但邻域过大,平滑会使边缘信息损失的越大,从而使输出的图像变得模糊,因此需合理选择邻域的大小。 平滑滤波的基本算法是将函数Gsm,n,与原始图像f0m,n进行卷积,最后得到一个平滑图像f1m,n f1m,n=f0m,nGsm,n, Gsm,n,=122expmn1 (2-9) 式中:为高斯标准方差;m为原始图像点的横坐标变量;n为原始图像点的纵坐标变量。 这里选择三种滤波方法, k=medfilt2(handles.noise_img);%中值滤波 k=wiener2(handles.noise_img,[5,5]);%自适应滤波 k=filter2(fspecial('average',3),handles.noise_img)/255;%平滑滤波 同样的,这些函数也是针对二维数据,所以要先判断是彩色图像还是灰度图像,然后分别进行处理,下面是对彩色图像的自适应滤波处理: i=handles.noise_img; ifisrgb(i) a=handles.noise_img(:,:,1); b=handles.noise_img(:,:,2); c=handles.noise_img(:,:,3); k(:,:,1)=wiener2(a,[5,5]); k(:,:,2)=wiener2(b,[5,5]); k(:,:,3)=wiener2(c,[5,5]); 14 太原科技大学:基于MATLAB数字图像处理的实现和仿真 imshow(k); 执行结果如图: 图2.15滤波处理对比图 对其他方法的滤波程序也类似,由于把各个滤波方法放在一个选择框里,所以程序要用以下的选择语句: switchstr case'中值滤波' case'自适应滤波' case'平滑滤波' end 2.7直方图统计 概念:表示图像中具有某种灰度级的像素个数,反映图像中每种灰度出现的频率。 为了有利于数字图像处理,必须引入离散形式。在离散形式下,用rk代表离散灰度级,用Prrk代表Prr,并且有下式子成立: Prrk=nk0rk1 k0,1,2,,l1 (2-10) 式中nk为图像中出现rk这种灰度级像素,n是图像中像素总和。在直角坐标系中做出rk与Prrk的关系图形,这个图形称为直方图。 15 太原科技大学:基于MATLAB数字图像处理的实现和仿真 用imhist函数对图像数据进行直方图统计, x=imhist(handles.img(:,:,1)); bar(horz,x); 其中,x矩阵的数据是0~255灰度值的统计个数,如果直接对x矩阵数据进行图形图显示,由于有256个数据,在坐标系中就会很密集,为了更清楚的显示条形图,所以在程序设计时,把x数据进行部分提取, x1=x(1:10:256); horz=1:10:256; bar(horz,x1); 除了显示数据的直方图统计外,还可以对图像进行均衡处理,所用到的函数是histeq,这两个函数同样只使用于二维数据,所以也要对二维和三维数据分开处理。 直方图显示和均衡后的图像分别如下图所示: 图2.16直方图 2.8频谱分析 2.8.1、频谱图 由卷积定理可知,如果原始图像是fx,y,处理后的图像是gx,y,而hx,y是处理系统的冲激响应,那么,处理过程可由下式表示: gx,y=hx,y*fx,y (2-11) 式中*代表卷积 如果Gu,v,Hu,v,Fu,v分别是gx,y,hx,y,fx,y的傅立叶变 16 太原科技大学:基于MATLAB数字图像处理的实现和仿真 换,那么,上面的卷积关系表示为变换域的乘积关系,即: Gu,v=Hu,vFu,v (2-12) 式中Hu,v为传递函数。 在增强问题中,fx,y是给定的原始数据,经傅立叶变换可得Fu,v。选择合适的Hu,v,得到: gx,y=F1Hu,vFu,v (2-13) 得到的的gx,y比fx,y在某些特性方面更加鲜明、突出,因而更加易于识别、解释。 为了得到图像的频谱图,先要对数据进行傅里叶变换,用fft2函数对二维数据进行快速傅里叶变换,同时为了更好的观察频谱图,需要把fft2变换后的数据进行平移,利用fftshift函数,把快速傅里叶变换的DC组件移到光谱中心。这样图像能量的低频成分将集中到频谱中心,图像上的边缘、线条细节信息等高频 成分将分散在图像频谱的边缘。如下图所示: 图2.17频谱处理对比图 2.8.2通过高通滤波器 axes(handles.axes2); x=(handles.img); ifisrgb(x) msgbox('这是彩色图像,不能通过高通滤波器','失败'); else 17 太原科技大学:基于MATLAB数字图像处理的实现和仿真y1=imnoise(x,'gaussian'); f=double(y1); k=fft2(f); g=fftshift(k); [M,N]=size(g); nn=2; d0=3; m=fix(M/2);n=fix(N/2); fori=1:M forj=1:N%加高斯噪声%数据类型转换%傅立叶变换%转换数据矩阵%截止频率为3 d=sqrt((i-m)^2+(j-n)^2);%计算高通滤波器传递函数ifd<=d0 h=0; elseh=1; end result(i,j)=h*g(i,j); end end result=ifftshift(result); y2=ifft2(result); y3=uint8(real(y2)); imshow(y3); end 2.8.3通过低通滤波器 axes(handles.axes2); x=(handles.img); ifisrgb(x) msgbox('这是彩色图像,不能通过低通滤波器','失败');else 18 太原科技大学:基于MATLAB数字图像处理的实现和仿真 y1=imnoise(x,'salt&pepper');%叠加椒盐噪声 f=double(y1);%数据类型转换,不支持图像的无符号整型的计算 g=fft2(f); g=fftshift(g); [M,N]=size(g); nn=2; d0=10; m=fix(M/2);n=fix(N/2); fori=1:M forj=1:N d=sqrt((i-m)^2+(j-n)^2); h=1/(1+0.414*(d/d0)^(2*nn));%计算低通滤波器传递函数 result(i,j)=h*g(i,j); end end result=ifftshift(result); y2=ifft2(result); y3=uint8(real(y2)); imshow(y3); end%显示滤波处理后的图像%二阶巴特沃斯(Butterworth)低通滤波器%截止频率为10%傅立叶变换%转换数据矩阵 2.9灰度图像处理 2.9.1二值图像 二值图像是指数据矩阵中的元素只是0或1,读入matlab也是一个二维矩阵。值得注意的是,像素点取值只限于0,1。 图像二值化流程: 19 太原科技大学:基于 MATLAB数字图像处理的实现和仿真 图 2.18图像二值化流程图 用j=im2bw(x);来对灰度图像到二值图像的转换。转换结果为: 图2.19灰度图像转二值图像对比图 2.9.2创建索引图像 根据数据矩阵和图像像素颜色匹配关系,MATLAB中图像可分为:索引图像、灰度图像、二值图像和RGB图像。 索引图像:它的数据信息包括一个数据矩阵和一个双精度色图矩阵,它的数据矩阵中的值直接指定该点的颜色为色图矩阵中的某一种。色图矩阵中,每一行表示一种颜色,每行有三个数据,分别表示该种颜色中红、绿、蓝的比例情况, 20 太原科技大学:基于MATLAB数字图像处理的实现和仿真 所有元素值都在[0,1]内。 用X=grayslice(I,n) 函数来实现,转换后得到的图像为: 图2.20索引图像 2.10颜色模型转换 H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别相隔120度。互补色分别相差180度。 纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰度。 V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。 RGB转化到HSV的算法: max=max(R,G,B) min=min(R,G,B) ifR=max,H=(G-B)/(max-min) ifG=max,H=2+(B-R)/(max-min) ifB=max,H=4+(R-G)/(max-min) H=H*60 ifH<0,H=H+360 V=max(R,G,B) S=(max-min)/max 21 太原科技大学:基于MATLAB数字图像处理的实现和仿真 下面是RGB颜色模型到HSV模型的转换程序: axes(handles.axes2); x=(handles.img); ifisrgb(x) HSV=rgb2hsv(x); imshow(HSV); else msgbox('这是灰度图像,不能转换','转换失败'); end 转换后的结果为: 图2.21颜色模型转换对比图 同样的,转化为ntsc和ycbcr模型,只要改为相应的函数即可。函数如下:rgb2ntsc(x);%rgb模型转ntsc模型 rgb2ycbcr(x);%rgb模型转ycbcr模型 2.11操作界面设计 为了使整个操作界面更加的美观,对背景颜色和字体颜色进行设置。 22 太原科技大学:基于MATLAB数字图像处理的实现和仿真 第3章程序调试及结果分析 程序经过调试各个功能模块可以正确独立运行。 在设计过程中,发现程序的一些缺陷和不足: 1.一个函数只能对灰度图像处理,不能对RGB图像处理,那么如何才能对RGB图像处理: 这主要是对MATLAB函数的不够清楚,用到的很多函数是针对二维数据的,而RGB图像的数据是一个三维矩阵,所以处理要与灰度图像不同,在开始的时候,我认为应该找一个能够应用于三维矩阵的函数,结果却没找到,后来想到可以把三维数据进行降维处理,同样使用二维的函数,只要是同样处理三次。比如,彩色图像的滤波处理,直方图均衡等。 2.同一个操作对灰度图像可以使用,当用户选择的是彩色图像时,该操作就会出错: 这是由于设计程序时,本身程序是有针对性的,有些程序只能对灰度图像有效,有些对彩色图像有效,但是用户并不清楚这些,所以在设计的过程中就要考虑全面,要分开设计。在本次课程设计中,我均对每个程序的开始时,用ifisrgb(x)进行判断。 3.在没有加入噪声的情况下,点击“中值滤波”或是其它滤波,会提示错误:这是由于在滤波程序设计的过程中,开始用到的变量是handles.noise_img,而这个变量是在加入噪声时候才定义的,所以在没有加入噪声的情况下,点击各个滤波就会弹出变量没有定义的错误,解决方法就是在文件打开的时候就给定义handles.noise_img=x。 4.本次设计存在一个比较大的问题,就是每次操作都是独立的,比如:要对图像加入噪声,然后在此基础上进行亮度调整,截图,频谱分析就无法实现。 我认为应该是整个程序设计过程中对变量的设置没有做好,应该每次操作后,把处理后的数据保存在一个全局变量,这样还要对处理后的数据进行在处理时,只要把这个全局变量作为原始数据带入就可。 23 太原科技大学:基于MATLAB数字图像处理的实现和仿真 总结 在这次课程设计过程中,感触很深,由于对MATLAB图像处理的函数不熟悉,导致自己走了很多弯路,例如在设计图像左转90度和右转90度时,由于开始并不知道imrotate函数,只知道上下翻转flipud和左右翻转fliplr函数,怎样才能用这两个函数来实现左转和右转成了一个难题,如果只用矩阵转置的话,并不能达到要求,后来经过不断的调试发现可以结合flipud和fliplr函数来实现,同理,也可以通过转置和fliplr函数实现右转90度。 但是后来发现其实只要用imrotate函数就可以解决问题。通过这次经历后,后来在设计其它程序时,尽量找MATLAB自带的函数,而不是一碰到问题就自己想算法,这样可以节省较多的时间。 在理工科的专业应用背景下,用matlab进行相关计算与仿真编程的优势非常突出。特定的问题处理算法,我们通常都以M文件的文本形式给定最终的解决方案,自己设计的程序是在MATLAB环境下,用MATLAB语言编写的,这对于有安装MATLAB软件的计算机上运行并不存在什么问题,关键是一般的计算机很少有去安装MATLAB软件的,怎样在这些机子上运行该程序有成了一个问题,经过查阅资料发现.exe(可执行)文件可运行于所有的通用WINDOWS操作系统,为此,将M文件转换成.exe文件倒是个不错的想法。 通过本次课程设计,使自己对MATLABGUI设计流程有了比较深刻的体会,同时也了解了一般软件设计的过程。在设计过程中碰到了很多的问题,通过这些问题,使自己分析问题,解决问题的能力得到了较大的提高。 24 太原科技大学:基于MATLAB数字图像处理的实现和仿真 参考文献 [1]郑阿奇,曹戈,赵阳.MATLAB实用教程[M].北京:电子工业出版社 [2]程卫国,冯峰,姚东,徐听.MATLAB5.3应用指南[M].北京:人民邮电出版社 [3]陈杨.MATLAB6.X图像编程与图像处理[M].西安:西安电子科技大学出版社 25 太原科技大学:基于MATLAB数字图像处理的实现和仿真 附录 functionvarargout=two(varargin)%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct('gui_Name',mfilename,... 'gui_Singleton',gui_Singleton,...functionfile_Callback(hObject,eventdata,handles)--------------------------------------------------------%文件打开程序functionopen_Callback(hObject,eventdata,handles)[name,path]=uigetfile({'*.bmp'},' 载入图像'); ifisequal(name,0)|isequal(path,0)errordlg('没有选中文件','出错');return;elsex=imread([path,name]);axes(handles.axes1);imshow(x);handles.img=x;handles.noise_img=x;guidata(hObject,handles)end---------------------------------------------------functionsave_Callback(hObject,eventdata,handles)%文件保存[filename,pathname]=uiputfile('*.bmp','图片保存为');ifisequal([filename,pathname],[0,0])errordlg('没有保存','出错');return;elsefile=strcat(pathname,filename);(handles.axes2);i=getimage(gca);imwrite(i,file);end-----------------------------------------------------functionexit_Callback(hObject, 26'gui_OpeningFcn',@two_OpeningFcn,...'gui_OutputFcn','gui_LayoutFcn',@two_OutputFcn,...[],...'gui_Callback',[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State,varargin{:});end%Endinitializationcode-DONOTEDIT%---Executesjustbeforeerzhiismadevisible.functiontwo_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.---------------------------------------------------------%接下来是菜单的程序--------------------------------------------------------- 太原科技大学:基于MATLAB数字图像处理的实现和仿真 eventdata,handles)clc;closeall;close(gcf);---------------------------------------------------------%编辑菜单的程序------------------------------------------------------functionedit_Callback(hObject,eventdata,handles)-------------------------------------------------functionhuidu_Callback(hObject,eventdata,handles)%灰度处理axes(handles.axes2);ifisrgb(handles.img)y=rgb2gray(handles.img);%RGB󰀂 󰀂󰀂󰀂󰀂󰀂󰀂󰀂󰀂󰀂 imshow(y);elsemsgbox('这已经是灰度图像',' 转换失败'); end------------------------------------------------------functionliangdu_Callback(hObject,eventdata,handles)%亮度处理prompt={'输入参数1','输入参数2','输入gamma'};defans={'[00.7]','[01]','1'};p=inputdlg(prompt,'输入参数',1,defans);p1=str2num(p{1});p2=str2num(p{2});p3=str2num(p{3});gamma=p3;x=(handles.img);y=imadjust(x,p1,p2,gamma);axes(handles.axes2);imshow(y);------------------------------------------- 27-----------functionjietu_Callback(hObject,eventdata,handles)%截图set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);y=imcrop(handles.img);imshow(y);handles.Timage=y;------------------------------------------------------functionfangda_Callback(hObject,eventdata,handles)------------------------------------------------------functionlingjz_Callback(hObject,eventdata,handles)%邻近插值放大axes(handles.axes2);prompt={'输入放大倍数:'};defans={'2'};p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p{1});y=imresize(handles.img,p1,'nearest');%最近邻插值法放大imshow(y);------------------------------------------------------functionshuangxianfa_Callback(hObject,eventdata,handles)%双线放大axes(handles.axes2);prompt={'输入放大倍数:'};defans={'2'};p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p{1});y=imresize(handles.img,p1,'bilinear');%最近邻插值法放大imshow(y); 太原科技大学:基于MATLAB数字图像处理的实现和仿真 ------------------------------------------------functionshuangsanci_Callback(hObject,eventdata,handles)%双三次放大axes(handles.axes2);prompt={'输入放大倍数:'};defans={'2'};p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p{1});y=imresize(handles.img,p1,'bicubic');imshow(y);-------------------------------------------------------functionsuoxiao_Callback(hObject,eventdata,handles)%邻近插值缩小axes(handles.axes2);prompt={'输入放大倍数:'};defans={'0.2'};p=inputdlg(prompt,'输入放大倍 数',1,defans); p1=str2num(p{1});y=imresize(handles.img,p1,'nearest');%最近邻插值法缩小imshow(y);------------------------------------------------------functionshuangxian_Callback(hObject,eventdata,handles)%双线性缩小axes(handles.axes2);prompt={'输入放大倍数:'};defans={'0.2'};p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p{1});y=imresize(handles.img,p1,'bilinear');%最近邻插值法缩小imshow(y);------------------------------------------------- 28-------functionshuangsancisuox_Callback(hObject,eventdata,handles)%双三次缩小axes(handles.axes2);prompt={'输入放大倍数:'};defans={'0.2'};p=inputdlg(prompt,'输入放大倍数',1,defans);p1=str2num(p{1});y=imresize(handles.img,p1,'bicubic');imshow(y);------------------------------------------------------functionxuanzhuan_Callback(hObject,eventdata,handles)-------------------------------------------------------functionupdown_Callback(hObject,eventdata,handles)%上下翻转axes(handles.axes2);x=(handles.img);ifisrgb(handles.img)fork=1:3y(:,:,k)=flipud(x(:,:,k));%上下翻转函数endimshow(y);elsex=(handles.img);y=flipud(x);imshow(y);end---------------------------------------------------------functionleftright_Callback(hObject,eventdata,handles)%左右翻转axes(handles.axes2);ifisrgb(handles.img) 太原科技大学:基于MATLAB数字图像处理的实现和仿真 x=(handles.img);fork=1:3y(:,:,k)=fliplr(x(:,:,k));%左右翻转 函数 endimshow(y);elsex=(handles.img);y=fliplr(x);imshow(y);end------------------------------------------------------functionzeft90_Callback(hObject,eventdata,handles)%左转90度axes(handles.axes2);x=(handles.img);y=imrotate(x,90);imshow(y);-------------------------------------------------------functionright90_Callback(hObject,eventdata,handles)%右转90度axes(handles.axes2);x=(handles.img);y=imrotate(x,-90);imshow(y);------------------------------------------------------functionother_Callback(hObject,eventdata,handles)%任意角度旋转axes(handles.axes2);prompt={'输入参数1:'};defans={'30'};p=inputdlg(prompt,'输入参数',1,defans);p1=str2num(p{1});y=imrotate(handles.img,p1);imshow(y);----------------------------------------------------- 29functiongs_Callback(hObject,eventdata,handles)%加入高斯噪声axes(handles.axes2);prompt={'输入参数1:','输入参数2'};defans={'0','0.02'};p=inputdlg(prompt,'输入参数',1,defans);p1=str2num(p{1});p2=str2num(p{2});y=imnoise(handles.img,'gaussian',p1,p2);imshow(y);handles.noise_img=y;guidata(hObject,handles);-------------------------------------------------------functionjy_Callback(hObject,eventdata,handles)%加入椒盐噪声prompt={'输入参数1:'};%对话框的设置,用户输入的是字符串defans={'0.02'};%缺省值p=inputdlg(prompt,'输入参数',1,defans);p1=str2num(p{1});%字符串转化为数值axes(handles.axes2);x=(handles.img);y=imnoise(x,'salt&pepper',p1);imshow(y);handles.noise_img=y;guidata(hObject,handles);--------------------------------------------------------functioncx_Callback(hObject,eventdata,handles)%加入乘性噪声axes(handles.axes2);prompt={'输入参数1:'};defans={'0.02'};p=inputdlg(prompt,'输入参数',1,defans); 太原科技大学:基于MATLAB数字图像处理的实现和仿真 ;p1=str2num(p{1});y=imnoise(handles.img,'speckle',p1) imshow(y);handles.noise_img=y;guidata(hObject,handles);-----------------------------------------------------functionzhifangtutongji_Callback(hObject,eventdata,handles)---------------------------------------------------------functionred_Callback(hObject,eventdata,handles)%R直方图set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);x=imhist(handles.img(:,:,1));%直方图统计x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,'xtick',0:50:255);---------------------------------------------------------functiongray_Callback(hObject,eventdata,handles)%G直方图set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);ifisrgb(handles.img)x=imhist(handles.img(:,:,2));% 直方图统计 x1=x(1:10:256);horz=1:10:256;bar(horz,x1);set(handles.axes2,'xtick',0:50:255);elsemsgbox('这是灰度图像','旋转 失败');end 30------------------------------------------------------functionblue_Callback(hObject,eventdata,handles)%B直方图set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);ifisrgb(handles.img)x=imhist(handles.img(:,:,3));%直方图统计x1=x(1:10:256);horz=1:10:256;bar(horz,x1);%axis([02550150000]);set(handles.axes2,'xtick',0:50:255);%set(handles.axes2,'ytick',0:2000:15000);elsemsgbox('这是灰度图像','旋转失败');end---------------------------------------------------------functionjunheng_Callback(hObject,eventdata,handles)%直方图均衡set(handles.axes2,'HandleVisibility','ON');axes(handles.axes2);ifisrgb(handles.img)a=histeq(handles.img(:,:,1));b=histeq(handles.img(:,:,2));c=histeq(handles.img(:,:,3));k(:,:,1)=a;k(:,:,2)=b;k(:,:,3)=c;imshow(k);elseh=histeq(handles.img);%直方图均衡imshow(h);end------------------------------------------- 太原科技大学:基于MATLAB数字图像处理的实现和仿真 -------------%频谱分析-----------------------------------------------------functionpinpu_Callback(hObject,eventdata,handles)--------------------------------------------------------functionpinputu_Callback(hObject,eventdata,handles)%显示频谱图axes(handles.axes2);x=(handles.img);ifisrgb(x)m=fft2(x(:,:,1));y=fftshift(m);imshow(log(abs(y)),[]);elsem=fft2(x);y=fftshift(m);imshow(log(abs(y)),[]);end--------------------------------------------------------functionfrequency_Callback(hObject,eventdata,handles)%低通滤波器axes(handles.axes2);x=(handles.img);ifisrgb(x)msgbox('这是彩色图像,不能 通过低通滤波器','失败'); elsey1=imnoise(x,'salt&pepper');%叠加椒盐噪声f=double(y1);%数据类型转 换,MATLAB不支持图像的无符号整 型的计算 g=fft2(f);%傅立叶变换g=fftshift(g);%转换数据矩 阵 [M,N]=size(g);nn=2;%二阶巴特沃斯 31(Butterworth)低通滤波器d0=10;%截止频率为10m=fix(M/2);n=fix(N/2);fori=1:Mforj=1:Nd=sqrt((i-m)^2+(j-n)^2);h=1/(1+0.414*(d/d0)^(2*nn));%计算低通滤波器传递函数result(i,j)=h*g(i,j);endendresult=ifftshift(result);y2=ifft2(result);y3=uint8(real(y2));imshow(y3);%显示滤波处理后的图像end---------------------------------------------------------functiongaotong_Callback(hObject,eventdata,handles)%高通滤波器axes(handles.axes2);x=(handles.img);ifisrgb(x)msgbox('这是彩色图像,不能通过高通滤波器','失败');elsey1=imnoise(x,'gaussian');%加高斯噪声f=double(y1);%数据类型转换k=fft2(f);%傅立叶变换g=fftshift(k);%转换数据矩阵[M,N]=size(g);nn=2;d0=3;%截止频率为3m=fix(M/2);n=fix(N/2);fori=1:Mforj=1:N 太原科技大学:基于MATLAB数字图像处理的实现和仿真 d=sqrt((i-m)^2+(j-n)^2);%计 算高通滤波器传递函数 ifd<=d0h=0;elseh=1;endresult(i,j)=h*g(i,j);endendresult=ifftshift(result);y2=ifft2(result);y3=uint8(real(y2));imshow(y3);end---------------------------------------------------%接下来这段程序是灰度图像处 理程序 -------------------------------------------------functionhuiduchuli_Callback(hObject,eventdata,handles)---------------------------------------------------functionerzhituxiang_Callback(hObject,eventdata,handles)%二值图像axes(handles.axes2);x=(handles.img);ifisrgb(x)msgbox('这是彩色图像,不能 转换为二值图像','转换失败'); elsej=im2bw(x);imshow(j);end-------------------------------------------------------functiontuxiangfushi_Callback(hObject,eventdata,handles) 32%图像腐蚀axes(handles.axes2);x=(handles.img);ifisrgb(x)msgbox('这是彩色图像,不能进行图像腐蚀','失败');elsej=im2bw(x);se=eye(5);bw=bwmorph(j,'erode');imshow(bw);end--------------------------------------------------------functionsuoyintuxiang_Callback(hObject,eventdata,handles)%创建索引图像axes(handles.axes2);x=(handles.img);ifisrgb(x)msgbox('这是彩色图像,不能创建索引图像','创建失败');elsey=grayslice(x,16);axes(handles.axes2);imshow(y,jet(16));end------------------------------------------------------%这段是颜色模型的转换--------------------------------------------------functionysmx_Callback(hObject,eventdata,handles)----------------------------------------------------functionhsv_Callback(hObject,eventdata,handles)%RGB图像转HSVaxes(handles.axes2);x=(handles.img);ifisrgb(x)HSV=rgb2hsv(x); 太原科技大学:基于MATLAB数字图像处理的实现和仿真imshow(HSV);elsemsgbox('这是灰度图像,不 能转换','转换失败'); end------------------------------------------------------functionntsc_Callback(hObject,eventdata,handles)%RGB转NTSCaxes(handles.axes2);x=(handles.img);ifisrgb(x)ntsc=rgb2ntsc(x);imshow(ntsc);elsemsgbox('这是灰度图像,不 能转换','转换失败'); end--------------------------------------------------------functionycbcr_Callback(hObject,eventdata,handles)%RGB转YCBCRaxes(handles.axes2);x=(handles.img);ifisrgb(x)ycbcr=rgb2ycbcr(x);imshow(ycbcr);elsemsgbox('这是灰度图像,不 能转换','转换失败'); end---------------------------------------------------------%这是滤波程序--------------------------------------------------------- functionlvbo_SelectionChangeFcn(hObject,eventdata,handles)str=get(hObject,'string');set(handles.axes2,'HandleVisibility', 33'ON');axes(handles.axes2);i=handles.noise_img;ifisrgb(i)a=handles.noise_img(:,:,1);b=handles.noise_img(:,:,2);c=handles.noise_img(:,:,3);switchstrcase'中值滤波'k(:,:,1)=medfilt2(a);k(:,:,2)=medfilt2(b);k(:,:,3)=medfilt2(c);imshow(k)case'自适应滤波'k(:,:,1)=wiener2(a,[5,5]);k(:,:,2)=wiener2(b,[5,5]);k(:,:,3)=wiener2(c,[5,5]);imshow(k);case'平滑滤波'k(:,:,1)=filter2(fspecial('average',3),a)/255;k(:,:,2)=filter2(fspecial('average',3),b)/255;k(:,:,3)=filter2(fspecial('average',3),c)/255;imshow(k);endelseswitchstrcase'中值滤波'k=medfilt2(handles.noise_img);imshow(k)case'线性滤波'h=[111;111;111];H=h/9;m=double(handles.noise_img);k=conv2(m,h);imshow(k,[]);
本文档为【基于MATLAB数字图像处理的实现和仿】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_713593
暂无简介~
格式:doc
大小:632KB
软件:Word
页数:36
分类:
上传时间:2017-06-03
浏览量:26