《基于MATLAB的图像处理的课程设计.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的图像处理的课程设计.docx(27页珍藏版)》请在第一文库网上搜索。
1、目录一、课程设计目的3二、课程设计要求3三、课程设计的内容3四、题目分析3五、总体设计4六、具体设计56.1、 文件56.1.1、 打开56.1.2、 保存56.1.3、 退出56.2、 编辑56.2.1、 灰度56.2.2、 亮度66.2.3、 截图76.2.4、 缩放76.3、 旋转96.3.1、 上下翻转96.3.2、 左右翻转9633任意角度翻转96.4、 噪声106.5、 滤波106.6、 直方图统计116.7、 频谱分析126.7.1、 频谱图126.7.2、 通过高通滤波器126.7.3、 通过低通滤波器136.8、 灰度图像处理146.8.1、 二值图像146.8.2、 创建索
2、引图像146.9、 颜色模型转换146.10、 操作界面设计15七、程序调试及结果分析15八、心得体会16九、参考文献17十、附录18基于MAT1AB的图像处理的课程设计摘要:数字图像处理技术是20世纪60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。MAT1AB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或编程以完成各自的计算。M
3、AT1AB中集成了功能强大的图像处理工具箱。由于MAT1AB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MAT1AB在图像处理的应用中具有很大的优势。关键词:MAT1AB,数字图像处理一、课程设计目的综合运用MAT1AB工具箱实现图像处理的GUI程序设计。二、课程设计要求1)熟悉和掌握MAr1AB程序设计方法2)掌握MAT1ABGU1程序设计3)学习和熟悉MAr1AB图像处理工具箱4)学会运用MAT1AB工具箱对图像进行处理和分析三、课程设计的内容学习MAT1ABGUI程序设计,利
4、用MAT1AB图像处理工具箱,设计和实现自己的PhotoshopO要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。以下几点是程序必须实现的功能。1)图像的读取和保存。2)设计图形用户界面,让用户能够对图像进行任意的亮度和对比度变化调整,显示和对比变换前后的图像。3)设计图形用户界面,让用户能够用鼠标选取图像感兴趣区域,显示和保存该选择区域。4)编写程序通过最近邻插值和双线性插值等算法将用户所选取的图像区域进行放大和缩小整数倍的操作,并保存,比较几种插值的效果。5)图像直方图统计和直方图均衡,要求显示直方图统计,比较直
5、方图均衡后的效果。6)能对图像加入各种噪声,并通过几种滤波算法实现去噪并显示结果。比较去噪效果。四、题目分析信息化社会中,计算机在各种信息处理中发挥着重要的作用。我们可以借助计算机,对数字图像进行处理,以达到不同的效果。根据题目的要求,除了实现要求的功能外,还有很多的功能需要用到。(1)、将一个RGB图像转换为灰度图像。(2)、可以对图像做各种变换,如旋转等。(3)、有时并不需要图像显示其细节部分,只要其轮廓,这时候不要很高的灰度级。可以把图像转换为二值图像,进行图像腐蚀,或是创建索引图像等。(4)、分析一个图像的频谱特征,利用傅里叶变换,将图像从空间域变换到频域,然后进行各种处理,经过高通滤
6、波器或是低通滤波器。(5)、为了科学地定量描述和使用颜色,人们提出了各种颜色模型,按用途可分为三类:计算颜色模型,视觉颜色模型和工业颜色模型。有时为了不同的需要,要对颜色模型进行转换。五、总体设计由于要实现的功能并不是很多,所以在排版的过程中,把各个功能都安排在目录栏上,整体安排如下图所示:三1文件I打开目保存I退出&隹)编辑用灰度I亮度M截图日一M放大占最近邻插值法三双线性插值法-I缩小最近邻插值法U双线性插值法二囱旋转I上下翻转I左右翻转I左转grI右转90。任意角度囱噪声口高斯噪声I椒盐噪声I乘性噪声3囱直方图统计IR直方图口G直方图RB直方图I直方图均衡目频谱图臼高斯高通虑波器日巴特沃
7、斯低通滤波囱灰度图像处理口二值图像B图像腐蚀片创建索引图像M轮廊图囱颜色模型的转换IRGB转HSVmRGB转NTSC由GRB转YCBCR同时在调节亮度时,虽然可以同对话框的形式输入调节的比例系数,但是这样效果不好了,不容易调节,因此这里考虑用滚动条来调节。因此,总体的设计界面如下图所示:Ontit1ed31文件说蜴烬稀少声直方由妩计捌分析灰反图传处理阳色梨的衿投处理前处理后六、具体设计6.1、 文件6.1.1、 打开为了让使用者更方便的使用,所以在设计的时候,通过对话框的形式来选择文件,选择Uigetfi1e函数来实现,Uigetfi1e函数显示一个打开文件对话框,该对话框自动列出当前路径下的
8、目录和文件,由于这个GUI程序的操作对象是图像文件,所以设置这里的缺省后缀名为“.bmp”。Uigetfi1e函数的调用格式为name,path=yigetfeC.),在按下对话框中的执行按钮“打开”后,返回选择的文件名和路径,分别保存到“name”和“path”中。如果按下取消按钮或是发生错误,则返回值是Oo根据返回值的情况,如果是0,则弹出提示错误的对话框,否则,通过imread函数读出图像数据,把图像数据赋值给全局变量hand1es.imgo6.1.2、 保存同样也通过对话框的形式来保存图像数据,通过Uigetfi1e函数选择文件名和路径,用getimage(gca)取出坐标2变换后的图
9、像数据保存到变量i,最后用imwrite函数,把数据i存到指定的文件。6.1.3、 退出退出比较简单,程序如下所示:c1c;c1osea11;c1ose(gcf);6.2、 编辑6.2.1、 灰度由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为:y=(hand1es.img(:,:,1);%当然也可以选择(:,:,2)或(:,:,3)imshow(y);但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。另一种方法就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。程序为:y=rgb2gra
10、y(hand1es.img);imshow(y);这个程序只能用于RGB图像转换灰度图像,当原始图像本来就是灰度图像时,运行该程序时就会出错,但是使用者在使用时有时并不知道这些,为了使该程序更加完善,应该在使用者原先图像时灰度图像时使用该功能时,应该要显示提示类信息。所以在开始时应该要有一个RGB图像或是灰度图像的判断过程。完整的程序如下:ifisrgb(hand1es.img)y=rgb2gray(hand1es.img);imshow(y);e1semsgbox(,这已经是灰度图像I,转换失败,);end如果原图是RGB,执行该操作的结果如下图:转换失败二I区如果原图本身已经是灰度图像了,
11、执行该操作弹出如右图所示的提示对话框6.2.2、 亮度用imadjust函数,其调用格式如下:这已经是灰度图像g=imadust(f,1ow_inhigh_in,1ow_outhigh_out),gamma)gamma表示映射性质,默认值是1表示线性映射。由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给1ow_inhigh_in,1ow_outhigh_out,gamma这五个参数,如下一向命令建立了如囱所示的输入对话框:PromPt=输入参数输入参数2?输入gamma);defans=100.7017);p=inputd1g(prom
12、pt;输入参数defans);但是,这种方法并不能很好的让用户能够对图像进行任意的亮度和对比度变化调整,有时并不事先知道参数的值要多少,也不关心,而是任意调节的,直到满意为止。所以应该用滑动条来调节图像的亮度和对比度,这样更适合用户的使用习惯。由于imadjust函数有五个参数,所以原则上需要设计五个滑动条来调节对比度,这对用户来说显然比较麻烦,因此在设计的时候固定其中的三个参数,通过调节两个参数的值来改变亮度和对比度。Ohand1es.beta,O1,hand1es.gm,这里的变量hand1es.beta和hand1es.gm就亮度调整的tag名为Id,取值范围01,gamma值的tag名
13、为gamma,取值范围为05。获取滑动条参数的程序如下:hand1es.beta=get(hand1es.1d,va1ue*);hand1es.gm=get(hand1es.gamma,va1ue*);执行该操作,调节滑动条到上图所示位置,结果如下图:6.2.3、6.2.4、 截图在MAT1AB中,用函数imcrop实现对图像的剪切操作。该操作剪切的是图像中的个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。ImCrOP函数的调用格式如下:y=imcrop(hand1es.img);不管hand1es.img是三维的还是二维数据,该函数都能进行操作。下图就
14、是对三维图像的截图:6.2.5、 缩放在MAT1AB中,用函数imresize来实现对图像的放大或缩小。插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。该函数的调用格式如下:B=imresize(A,m,method)其中:参数method用于指定插值的方法,可选的值为nearest”(最近邻法”bi1inear”(双线性插值)、bicubic”(双三次插值),缺省值为unearest,oB=imresizee(A.m,method)表示返回原图A的m倍放大图像(m小于1时实际上是缩小);下图就是采用邻近插值法的放大和缩小图像,参数值保持默认设置:虽然处理后看不出放大的效果,这是由
15、于坐标轴限制的原因,如果把处理后的图片保存起来,再把处理后的文件打开,就可以看到比较明显的放大效果。缩小后的结果如下:6.3、 旋转631、上下翻转函数f1ipud是实现一个二维矩阵的上下翻转,如a=U2;34,经过该函数处理后,原矩阵变为34;12;所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对RGB图像和灰度图像分开处理,这就要用到isrgb函数来判断,如果是灰度图像,则可以直接用这个函数进行处理,否则就要对RGB图像进行降维处理,fork=1:3y(:,:,k)=f1ipud(x(:,:,k);处理结果如图:6.3.1、6.3.2、 左右翻转对图像的左右翻转也可以用f1ip1r函数来处理,同样的,也要对灰度和彩色图像分开处理,处理结果如图:6.3.3、6.3.4、