第一篇:matlab数字图像处理 膨胀和腐蚀
基于Matlab的腐蚀和膨胀的边缘检测
一、实验目的: 掌握运用Matlab软件对灰度与二值图像的膨胀与腐蚀的处理方法。
二、实验环境(软件条件):
Windws2000/XP
MATLAB 7.x
三、实验内容:
1、图像膨胀的Matlab实现 ① 实验原理:
膨胀:给图像中的对象边界添加像素。
在操作中,输出图像中所有给定像素的状态都是通过对输入图像的相应像素及邻域使用一定的规则进行确定。在膨胀操作时,输出像素值是输入图像相应像素邻域内所有像素的最大值。在二进制图像中,如果任何像素值为1,那么对应的输出像素值为1。
可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象。结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。此外,imdilate还可以接受两个可选参数:PADOPT(padopt)——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。② 实验步骤:
A、首先创建一个包含矩形对象的二值图像矩阵。R=zeros(9,10);R(4:6,4:7)=1 R = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 B、使用一个3×3的正方形结构元素对象对创建的图像进行膨胀。
C=strel('square',3)C = Flat STREL object containing 9 neighbors.Neighborhood: 1 1 1 1 1 1 1 1 1 C、将图像R和结构元素C传递给imdilate函数。R1=imdilate(R,C)R1 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 D、显示结果: imshow(R,'notruesize')imshow(R1,'notruesize')③ 实验结果: 膨胀前后效果图:
2、图像腐蚀的Matlab实现 ① 实验原理:
腐蚀:删除对象边界某些像素。
在操作中,输出图像中所有给定像素的状态都是通过对输入图像的相应像素及邻域使用一定的规则进行确定。在腐蚀操作中,输出像素值是输入图像相应像素邻域内所有像素的最小值。在二进制图像中,如果任何一个像素值为0,那么对应的输出像素值为0。
可以使用imerode函数进行图像腐蚀。imerode函数需要两个基本输入参数:待处理的输入图像以及结构元素对象。此外,imerode函数还可以接受3个可选参数:PADOPT(padopt)——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。M——指定原始图像的行数。② 实验内容及步骤:
A、读取图像cameraman.tif(该图像是Matlab当前目录下自带的图片)R=imread('cameraman.tif');B、创建一个任意形状的结构元素对象 C=strel('arbitrary',eye(5));C、以图像R和结构元素C为参数调用imerode函数进行腐蚀操作。R1=imerode(R,C);D、显示操作结果 imshow(R); figure,imshow(C); ③ 实验结果:
图像cameraman.tif 腐蚀前后的效果对比:
3、膨胀和腐蚀联合操作 ① 实验内容及步骤: A、创建结构元素: clear;close all C= strel('rectangle',[40 30]);
%结构元素必须具有适当的大小,既可以删电流线又可以删除矩形.B、使用结构元素腐蚀图像:
%将会删除所有直线,但也会缩减矩形 R=imread('circbw.tif');R1=imerode(R,C);imshow(R1);figure,imshow(R);C、恢复矩形为原有大小,使用相同的结构元素对腐蚀过的图像进行膨胀.R2=imdilate(R1,C);figure,imshow(R2);② 实验结果: 最终效果如下图: 原始图像 腐蚀后的图像 膨胀后的图像
4、边缘检测 ① 实验原理:
对于一副灰度二进制图像,如果图像像素值为1,则该像素的状态为ON,如果其像素值为0,则该像素的状态为OFF。在一副图像中,如果图像某个像素满足以下两个条件:
1.该像素状态为ON; 2.该像素邻域中有一个或多个像素状态为OFF。则认为该像素为边缘像素。
Matlab中提供了专门的函数bwperim,可以用于判断一副二进制图像中的哪些像素为边缘像素。② 实验内容及步骤:
以下程序代码示例就是利用bwperim函数,对图像circbw.tif进行边缘检测,其边缘像素检测效果如尾图。clear;close all R=imread('circbw.tif');R1=bwperim(R);
imshow(R); figure,imshow(R1); ② 实验结果:
心得体会:
本次实验利用形态学运算—腐蚀和膨胀对图像进行了处理。数学形态学的基本思想是:用具有一定形态的结构元素去量度和提取图像中的对应形状,以达到图像分析和识别的目的。它的优点有:有效滤除噪声、保留图像中原有信息、算法易于用并行处理方法有效实现等等。
总的来说,在此次实验中遇到了较多问题,经过对相关知识的复习以及对相关资料的查询,才逐个地解决了。在今后的实验课中要有充分的准备与预习,不懂的问题要提前查资料,这样在实验中才会胸有成竹,才不会手忙脚乱。
第二篇:MATLAB函数处理图像实现膨胀腐蚀
MATLAB函数处理图像实现膨胀腐蚀
一、实验目的
1、了解二值形态学的基本运算
2、掌握二值图像膨胀、腐蚀的基本方法
3、编程实现膨胀、腐蚀
二、实验要求
1、使用imdilate函数进行图像膨胀,并观察膨胀后图像的变化。
2、使用imerode函数进行图像腐蚀,观察腐蚀后的图像变化情况。
三、实验原理
膨胀:将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。利用它可以填补物体中的空洞。B对X膨胀所产生的二值图像D是满足以下条件的点(x,y)的集合:如果B的原点平移到点(x,y),那么它与X的交集非空。数学表达式:CAB
腐蚀:一种消除边界点,使边界向内部收缩的过程。利用它可以消除小而且无意义的物体。B对X腐蚀所产生的二值图像E是满足以下条件的点(x,y)的集合:如果B的原点平移到点(x,y),那么B将完全包含于X中。数学表达式:CAB
膨胀处理:一种消除边界点,使边界点向内部收缩的过程。
腐蚀处理:将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。
四、实验步骤
1.图像膨胀的Matlab实现:
可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象。结构元素对象可以是strel函数返回的对象,也可以是一个自己定义的表示结构元素邻域的二进制矩阵。此外,imdilate还可以接受两个可选参数:PADOPT(padopt)——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。步骤1,首先创建一个包含矩形对象的二值图像矩阵。>> BW=zeros(9,10);>> BW(4:6,4:7)=1 BW = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 步骤2,使用一个3×3的正方形结构元素对象对创建的图像进行膨胀。>> SE=strel('square',3)SE = Flat STREL object containing 9 neighbors.Neighborhood: 1 1 1 1 1 1 1 1 1 步骤3,将图像BW和结构元素SE传递给imdilate函数。>> BW2=imdilate(BW,SE)BW2 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0
0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 步骤4,显示结果。>> imshow(BW,'notruesize')>> imshow(BW2,'notruesize')2.图像腐蚀的Matlab实现:
可以使用imerode函数进行图像腐蚀。imerode函数需要两个基本输入参数:待处理的输入图像以及结构元素对象。此外,imerode函数还可以接受3个可选参数:PADOPT(padopt)——影响输出图片的大小、PACKOPT(packopt).——说明输入图像是否为打包的二值图像(二进制图像)。M——指定原始图像的行数。以下程序示例说明了如何对某一副具体图像进行腐蚀操作,腐蚀前后的效果对比如图末。
步骤1,读取图像cameraman.tif(该图像是Matlab当前目录下自带的图片)>> BW1=imread('cameraman.tif');步骤2,创建一个任意形状的结构元素对象 >> SE=strel('arbitrary',eye(5));步骤3,以图像BW1和结构元素SE为参数调用imerode函数进行腐蚀操作。>> BW2=imerode(BW1,SE);步骤4,显示操作结果 >> imshow(BW1)>> figure,imshow(BW2)
五、实验代码及结果
代码:
imerode函数,该函数能够实现二值图像的腐蚀操作; imdilate函数,该函数能够实现二值图像的膨胀操作; bw=imread(‘d:image1’)bw=rgb2gray(bw)se1=strel(‘disk’,11);
se2=strel(‘line’,11,90);bw2= imdilate(bw,se2);bw1=imerode(bw,se1);imshow(bw),title(‘原图’)figure,imshow(bw2), title(‘膨胀后的图像’)figure,imshow(bw1), title(‘腐蚀后的图像’)
结果:
原
图
膨胀后的图像
腐蚀后的图像
六、实验心得体会
通过本次的实验,我了解了二值形态学的基本运算,掌握了二值图像膨胀、腐蚀的基本方法,并且会运用编程实现膨胀、腐蚀,本次的实验目的已经完成,意识到在以后的生活中要了解做事情的目的,注重每一个与细节,认真思考遇到的所有问题,提高自己各方面的能力。感谢尹强老师教会我们理论与实践知识,也让我明白了什么是学习,怎么样学习,为以后的生活奠定的基础与指引了方向。
第三篇:基于MATLAB的数字图像处理
目 录 引言.................................................................................................................1 2 设计使用软件....................................................................................................2 2.1MATLAB简介.........................................................................................2 2.2matlab基本操作.......................................................................................2 3 图像几何变换设计原理....................................................................................4 3.1图像几何变换设计说明..........................................................................4 3.2 图像平移理论基础.................................................................................4 3.3图像缩放的理论基础..............................................................................5 3.4双线性插值法..........................................................................................5 3.5最邻近差值法..........................................................................................6 4图像变换总体设计.............................................................................................7 4.1基于MATLAB的GUI设计..................................................................7 4.2插入图像..................................................................................................8 4.3图像的平移变换......................................................................................9 4.3.1图像右下方平移...........................................................................9 4.3.3图像左上方平移.........................................................................10 4.4图像的缩放变换....................................................................................12 4.4.1基于双线性插值法的图像缩放.................................................12 4.4.2邻近插值法的图像缩放.............................................................13 5心得体会...........................................................................................................14 参考文献..............................................................................................................15 附录一..................................................................................................................16
课程设计说明书 引言
数字图像处理技术是20世界60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。MATLAB既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。根据它提供的500多个数学和工程函数,工程技术人员和科学工作者可以在它的集成环境中交互或变成以完成各自的计算。MATLAB中集成了功能强大的图像处理工具箱。由于MATLAB语言的语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式,而且这种语言可移植性好、可扩展性强,再加上其中有丰富的图像处理函数,所以MATLAB在图像处理的应用中具有很大的优势。
MATLAB是一种以矩阵运算为基础的交互式程序语言,能够满足科学、工程计算和绘图的要求,与其它计算机语言相比,其特点是简洁和智能化,适应科技专业人员的思维方式和书写习惯,使得编程和调试效率大大提高。我们学习掌握MATLAB,也可以说是在科学工具上与国际接轨。
课程设计说明书 设计使用软件
2.1MATLAB简介
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为四大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连
接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
2.2matlab基本操作
Matlab中基本变量都是以矩阵的形式保存的。一幅图像即是一个二维的矩阵。变量名区分大小写,如a和A表示两个不同的变量。图像I中第i行第j列的像素用I(i,j)表示,其中行号和列号都从1开始计数。要了解更多关于Matlab的基本知识,可看Matlab help下的Matlab目录。
本实验可能用到的matlab函数有:zeros,imwrite,imread,imshow,FFT2,abs,log,min,max,查询具体的函数用法可以在Matlab help中查找,或在Matlab command window中打(空格)函数名。
课程设计说明书
在Matlab command window中的命令在打回车后直接执行。也可以在m-file editor中编写程序,存盘为.m文件后,按Debug菜单下的Run,自动逐条执行命令。Debug菜单下还提供了设置断点逐行执行等调试命令。做本实验时可先在command window中熟悉Matlab命令与函数,最后所有命令应保存在一个m文件中,便于检查和调试。
每次画图前可用figure命令新开一个图像窗口,否则前一次显示的图像会被新的图像覆盖。也可用figure(n)命令规定当前图像窗口序号。
课程设计说明书
图像几何变换设计原理
3.1图像几何变换设计说明
数字图像几何变换是一种用途广泛的图像处理技术,在图像校正、图像匹配、图像变形等方面有广泛用途。图像的几何变换需要两个过程:空间变换和灰度插值,需要对离散数据组成的象素位置和间距进行重新采样,以构成几何变换后的新图像,即根据离散的数字图像重建二维连续函数,再按新的像素位置和间距进行采样。
要求编程实现图像的平移、缩放两种几何变换,插值分别采用最近邻插值和双线性插值。
在图像的几何变换中,通常包括图像的平移、图像的转置、图像的镜像变换、图像的缩放和图像的旋转等。
几种图像几何变换中都是1:1的变换,而图像的缩放操作会改变图像的大小,产生的图像中的像素可能在原图中找不到相应的像素点,这样就必须进行近似处理。一般的方法是直接赋值为和它最相近的像素值,但也可以通过一些插值算法来计算。下面的代码直接采用了前一种做法。
3.2 图像平移理论基础
图像平移就是将图像中所有的点都按照指定的平移量水平、垂直移动。设(x0,y0)为原图像上的一点,图像水平平移量为tx,垂直平移量为ty,则平移后点(x0,y0)坐标将变为(x1,y1)。
显然(x0,y0)和(x1,y1)的关系如下:
x1y1x0txy0ty
用矩阵表示如下:
x110txx0y101tyy0 10011
对该矩阵求逆,可以得到逆变换:
课程设计说明书
x010txx1y001tyy1
即x0y010011x1txy1ty
这样,平移后的图像上的每一点都可以在原图像中找到对应的点。例如,对于新图中的(0,0)像素,代入上面的方程组,可以求出对应原图中的像素(-tx,-ty)。如果tx或ty大于0,则(-tx,-ty)不在原图中。对于不在原图中的点,可以直接将它的像素值统一设置为0或则255(对于灰度图就是黑色或白色)。同样,若有点不在原图中,也就说明原图中有点被移出显示区域。如果不想丢失被移出的部分图像,可以将新生成的图像宽度扩大|tx |,高度扩大| ty |。
3.3图像缩放的理论基础
假设图像x轴方向缩放比率为fx,y轴方向缩放比率为fy,那么原始图中点(x0,y0)对应与新图中的点(x1,y1)的转换矩阵为:
x1fxy10100x0y0 fy00110
其逆运算如下:
00x1x01/fxy00y1
即x01/fy0y001110x1/fxy1/fy
例,当fx=fy=0.5时,图像被缩一半大小,此时缩小后图像中的(0,0)像素对应于原图中的(0,0)像素;(0,1)像素对应于原图中的(0,2)像素;(1,0)像素对应于原图中的(2,0)像素,以此类推。在原图基础上,每行隔一个像素进行取点,每隔一行进行操作。其实是将原图每行中的像素取值重复一遍,然后每行重复一次。
3.4双线性插值法
双线性插值[是利用了需要处理的原始图像像素点周围的四个像素点的相关陛,通过双线眭算法计算得出的。对于一个目的坐标,通过向后映射法得到其在原始图像的对应的浮点坐标(i+u,j+v),其中i,j均为非负整数,u,v为[0,l]区间的浮点数,则这个像素的值f(i+u,j+v)可由原图像中坐标为(i,j)、(i+l,j)、课程设计说明书
(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:
f(i+u,j+v)=(1-u)×(1-v)×f(i,j)+(1-u)×V× f(i,j+1)+u×(1-v)×f(i+l,j)+u×v×f(i+l,j+1),其中f(i,j)表示源图像(i,j)处的的像素值,这就是双线性内插值法。
如图3.1所示,已知(0,0)、(0,1)、(1,0)、(1,1)四点的的灰度,可以由相邻像素的灰度值f(0,0)和f(1,0)在X方向线性插值求出(x,0)的灰度f(x,0),由另外两个相邻像素f(0,1)和f(1,1)在X方向上线性插值可求出(x,1)的灰度f(x,1),最后由f(x,0),f(x,1)在Y方向上进行线性插值就可以得到(x,y)的灰度f(x,y)。
在同一行内根据待插值像素点与其前后的原图像像素点的位置距离进行加权线性插值,即离原图像像素点越近的待插值像素点,原图像像素的加权系数就越大;行间根据待插值行与其上下的原图像行间的距离进行加权线性插值,即离原图像行越近的待插值行,原图像行的加权系数就越大。
图3.1 双线性插值原理
3.5最邻近差值法
最简单的插值算法是最邻近插值,也称为零阶插值。它输出的像素灰度值就等于距离它映射到的位置最近的输入像素的灰度值,最邻近插值算法简单,在许多情况下都能得到令人满意的结果,但是当图像中包含像素之间灰度级有变化的细微结构时,最邻近算法会在图像中产生人为加工的痕迹。双线性插值算法计算
课程设计说明书
量比零阶插值大,但缩放后图像质量高,不会出现像素值不连续的的情况,这样就可以获得一个令人满意的结果[2,6]。
最邻近点插值[6]取插值点的4个邻点中距离最近的邻点灰度值作为该点的灰度值。设插值点(i,j)到周边4个邻点fk(i,j)(k = 1,2,3,4)的距离为dk(k = 1,2,3,4),则:g(i,j)=fk(i,j),dl = min{d1,d2,d3,d4},l= 1,2,3,4。
4图像变换总体设计
4.1基于MATLAB的GUI设计
图形用户界面(GUI)是用户与计算机程序之间的交互方式,是用户与计算机进行信息交流的方式。计算机在屏幕显示图形和文本,若有扬声器还可产生 声音。用户通过输入设备,如:键盘、鼠标、跟踪球、绘制板或麦克风,与计算机
课程设计说明书
通讯。用户界面设定了如何观看和如何感知计算机、操作系统或应用程序。通常,多是根据悦目的结构和用户界面功能的有效性来选择计算机或程序。图形用户界面或GUI是包含图形对象,如:窗口、图标、菜单和文本的用户界面。以某种方式 选择或激活这些对象,通常引起动作或发生变化。最常见的激活方法是用鼠标或其它点击设备去控制屏幕上的鼠标指针的运动。
图4.1GUI界面设计
通过MATLAB里面GUI功能自己设计出的关于本次课程设计的GUI界面,在这个界面中有预览图像,图像平移,图像缩放三个选项以及四个数据填充空格,来填写关于图像平移的长度与宽度,以及缩放的比例。
4.2插入图像
单击GUI界面的预览图像按钮,就可以选择将自己想要进行平移或缩放的图片插入到这个程序里面去,并显示出来。在这次课程设计当中将“lena.bmp”这张图片插入到所做的程序当中,如图所示。
图4.2预览的图片
课程设计说明书
插入的“lena.bmp”图片在MTALAB中所做的GUI图形用户界面中显示了出来。
4.3图像的平移变换
在所设计的GUI界面当中,首先设定所要平移的像素长度以及宽度,并且在设计当中用正负符号来表示图像的方向,设置完成之后,单击图片平移按钮,就会弹出窗口当中显示出两张图片。通过左右两张的图片对比可以清楚的看到右边图片是经过平移处理之后的。
4.3.1图像右下方平移
图4.3图像右下方向移动
如图所示,在GUI界面中将参数设置成平移长度为100,平移宽度为100之后,单击图像平移按钮,在弹出来的窗口之中,明显可以看到右边的图片向右下方向移动了各100个像素点,空出来的部分通过用黑像素点替换,以便能够进行清晰的对比结果。
4.3.2图像左下方平移
课程设计说明书
图 4.4图像的左下方向移动
如图所示,在GUI界面中将参数设置成平移长度为-100,平移宽度为100之后,单击图像平移按钮,在弹出来的窗口之中,明显可以看到右边的图片向左下方向移动了各100个像素点,空出来的部分通过用黑像素点替换,以便能够进行清晰的结果对比。
4.3.3图像左上方平移
图4.5图像向左上方向移动
课程设计说明书
如图所示,在GUI界面中将参数设置成平移长度为-100,平移宽度为-100之后,单击图像平移按钮,在弹出来的窗口之中,明显可以看到右边的图片向左上方向移动了各100个像素点,空出来的部分通过用黑像素点替换,以便能够进行清晰的结果对比。
4.3.4图像右上平移
图4.6图像向右上方向移动
如图所示,在GUI界面中将参数设置成平移长度为100,平移宽度为-100之后,单击图像平移按钮,在弹出来的窗口之中,明显可以看到右边的图片向右上方向移动了各100个像素点,空出来的部分通过用黑像素点替换,以便能够进行清晰的结果对比
课程设计说明书
4.4图像的缩放变换
在所设计的GUI界面当中,首先设定所要缩放的像素长度以及宽度比例系数,设置完成之后,单击双线性差值法缩放按钮,就会弹出窗口,在当中显示出两张图片。通过左右两张的图片对比可以清楚的看到右边图片是经过缩放处理之后的,在长度宽度的比例上有所变化
4.4.1基于双线性插值法的图像缩放
课程设计说明书
图4.6双线性差值法的图像缩放
如图所示,在所设计的GUI界面中将参数设置成长度缩放比例系数为2,宽度缩放比例系数为3之后,单击双线性插值法按钮,在弹出来的窗口之中,明显可以看到右边的图片相比较左边的图片,在长度上是要比宽度上要放大了所设置的比例系数的,由于对应的系数为2倍3倍,所以可以清楚明了的看到缩放效果。所以当设置为长宽系数形同时,缩放效果是不明显的。
4.4.2邻近插值法的图像缩放
课程设计说明书
图4.7邻近插值法的图像缩放
如图所示,在所设计的GUI界面中将参数设置成长度缩放比例系数为2,宽度缩放比例系数为3之后,单击邻近插值法按钮,在弹出来的窗口之中,明显可以看到右边的图片相比较左边的图片,在长度上是要比宽度上要放大了所设置的比例系数的,由于对应的系数为2倍3倍,所以可以清楚明了的看到缩放效果。
5心得体会
通过这次课程设计,使得我更加的掌握了在数字图像处理方面的知识,以及
课程设计说明书
加强了我对数字图像处理这一门学科的兴趣与爱好。此外还掌握了相关MATLAB的一些基本操作与应用,能够在以后的学习生活之中进行一些简单的设计。虽然在这次设计实践过程之中,遇到了重重困难,但是在经过一次次的更正,一次次的修改之后,以及经过网络上多方面材料的查找与老师的悉心指导,终于能够最终的完成这次课程设计的题目要求。
两周的时间不算很长,但是在这两周的时间里面,我们却学习到了很多之前多不能学习到的东西。在这次课程设计中不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。
实验过程中,此次设计也让我明白了有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。
参考文献
[1]章毓晋.《图像处理和分析教程》,人们邮电出版社,2009。
课程设计说明书
[2]龚声蓉.《数字图像处理与分析》,清华大学出版社,2006 [3]余成波.《数字图像处理及MATLAB实现》,重庆大学出版社,2003 [4]姚敏.《数字图像处理》,机械工业出版社,2006 [5]李显宏.《MATLAB7.x界面设计与编程技巧》电子工业出版社,2006 [6]Kenneth R.Castleman著,朱志刚等译,《数字图像处理》,电子工业出版社,2006
1.MATLAB图像平移程序
附录
课程设计说明书
N1 = get(handles.cc,'String');N2 = get(handles.kk,'String');Tx = str2double(N1);Ty = str2double(N2);[m, n] = size(I);H = uint8(zeros(m+abs(Ty), n+abs(Tx)));if(Tx>0&&Ty>0)
H(1+Ty:m+Ty,1+Tx:n+Tx)= I;else if(Tx<0&&Ty<0)
H(1:m,1:n)= I;
else if(Tx<0&&Ty>0)
H(1+Ty:m+Ty,1:n)= I;
else
H(1:m,1+Tx:n+Tx)= I;
end
end end figure,subplot(1,2,1);imshow(I);title('原图像');subplot(1,2,2);imshow(H);title('输出图像');2.MATLAB图像双线性插值法图像缩放 I=imread('lena.bmp');[rows,cols]=size(I);N1=get(handles.chang,'String');N2=get(handles.kuan,'String');K1=str2double(N1);K2=str2double(N2);width = K1 * rows;
课程设计说明书
height = K2 * cols;Out = uint8(zeros(width,height));widthScale = rows/width;heightScale = cols/height;for x = 2:width2
oldX = x * widthScale;
oldY = y * heightScale;
if(oldX/double(uint16(oldX))== 1.0)&(oldY/double(uint16(oldY))== 1.0)
Out(x,y)= I(int16(oldX),int16(oldY));
else
a = double(uint16(oldX));
b = double(uint16(oldY));
x11 = double(I(a,b));
x12 = double(I(a,b+1));
x21 = double(I(a+1,b));
x22 = double(I(a+1,b+1));
Out(x,y)= uint8((b+1-oldY)*((oldX-a)*x21 +(a+1-oldX)*x11)+(oldY-b)*((oldX-a)*x22 +(a+1-oldX)* x12));
end
end end figure,subplot(1,2,1);imshow(I);title('原图像')subplot(1,2,2);imshow(Out);title('输出图像');2.MATLAB图像最邻近差值法图像缩放 I=imread('lena.bmp');[rows,cols]=size(I);
课程设计说明书
N1 = get(handles.chang,'String');N2 = get(handles.kuan,'String');K1 = str2double(N1);K2 = str2double(N2);width = K1 * rows;
height = K2 * cols;im2 = uint8(zeros(width,height));widthScale = rows/width;heightScale = cols/height;for x = 2:width2
oldX = x * widthScale;
oldY = y * heightScale;
if(oldX/double(uint16(oldX))== 1.0)&(oldY/double(uint16(oldY))== 1.0)
im2(x,y)= I(int16(oldX),int16(oldY));
else
a = double(round(oldX));
b = double(round(oldY));
im2(x,y)= I(a,b);
end
end end figure,subplot(1,2,1);imshow(I);title('原图像')subplot(1,2,2);imshow(im2);title('输出图像')
第四篇:基于MATLAB数字图像处理平台设计
基于MATLAB 数字图像处理平台设计
摘要
数字图像处理技术在各个行业得到广泛的应用,其交互式的图形界面是操作者方便使用这些技术的途径。本文主要介绍了基于MATLAB的图形用户界面(GUI)来设计一个简单实用的图像处理软件平台,其中具备图像处理的常用功能,以满足用户的使用。文章详细阐述了一下图像处理软件平台的设计过程。本文的GUI设计所制作的图像处理软件平台可以实现的功能有五个模块:图像变换、图像增强、图像分割、图像变形以及其它常用处理。其中也讲述了GUI的基本常用操作及文件的打开、保存及退出。文章基本介绍了以上的内容,关于软件还有许多未能实现的功能有待于日后的逐步开发和学习。关键词:GUI;图像变换;图像增强;图像分割;图像变形;图像处理
ABSTRACT Digital image processing technology has been widely used in various industries, their interactive graphical interface is the way of the operator ease of use of these technologies.This article mainly introduced the graphical user interface(GUI)based on MATLAB to design a simple and practical platform for the image processing software, Which have commonly used image processing function, in order to meet the user's use.The article expounds the design process of the image processing software platform.This paper made the GUI design of image processing software platform can realize the function of five modules: image transformation, image enhancement, image segmentation, image distortion and other commonly used processing.The basic common operations of which also tells the story of GUI and file open, save, and exit.The content of the article introduces the above basic, about software and many fail to realize the function of the subject to the gradual development and learning in the future.Key words: GUI;Image transformation;Image enhancement;Image segmentation;Image deformation;The image processing
目录 绪论................................................................................................................................................................1 1.1设计要求及目的....................................................................................................................................1 1.2 课题分析...............................................................................................................................................1 1.3 总体设计...............................................................................................................................................2 2 具体设计.......................................................................................................................................................2 2.1 菜单设计...............................................................................................................................................2 2.2 图像的打开、保存及退出...................................................................................................................3 2.2.1 图像打开....................................................................................................................................3 2.2.2 图像保存....................................................................................................................................4 2.2.3程序退出.....................................................................................................................................4 2.3 图像变换...............................................................................................................................................4 2.3.1 傅里叶变换................................................................................................................................4 2.3.3 离散余弦变换............................................................................................................................5 2.4 图像增强...............................................................................................................................................5 2.4.1 空间域增强................................................................................................................................5 2.4.2 频率域增强................................................................................................................................6 2.5 图像分割...............................................................................................................................................7 2.5.1 阈值分割....................................................................................................................................8 2.5.2 梯度分割....................................................................................................................................8 2.6 图像变形...............................................................................................................................................9 2.6.1 翻转............................................................................................................................................9 2.6.2 旋转..........................................................................................................................................10 2.7 其它常用处理.....................................................................................................................................10 2.7.1 亮度..........................................................................................................................................10 2.7.2 对比度.......................................................................................................................................11 2.7.3 截图...........................................................................................................................................11 2.7.4 底片效果..................................................................................................................................12 2.7.5 二值处理..................................................................................................................................12 3 结果分析.....................................................................................................................................................13 4 心得体会.....................................................................................................................................................13 附录...................................................................................................................................................................14 基于MATLAB数字图像处理平台设计
MATLAB是近几年来国内外使用最为广泛的优秀科技软件之一。其语法结构简单,具有极强的数值计算、数据分析、图形绘制及图像处理等功能。具有高质量的图形可视化效果和强大的界面设计能力。因而在数字图像处理中有着其他语言所无法比拟的优势。图形用户界面(GUI)是提供人机交互的工具和方法。利用GUI制作图像处理软件能够实现图像处理的各个内容,主要有:图像空间变换:邻域和块操作;二值图像操作;线性滤波和滤波器设计;变换域处理;图像分析和增强;图像恢复;图像压缩;形态学运算等。绪论
1.1设计要求及目的
设计要求:以MATLAB作为工具,开发一个图像处理软件。主要进行图像处理的常用算法。由以下模块组成:图像变换;图像增强;图像分割。按各个模块进行功能扩充,也可加入其它常用的图像处理功能。
设计目的:MATLAB 软件为数字图像处理提供了功能丰富的工具,应用MATLAB友好的界面和实用高效的指令及模块,可以使人较快地认识、理解图像处理的相关概念,逐步掌握图像处理的基本方法。此课题的设计目的是综合运用MATLAB工具箱实现图像处理的GUI程序设计,学会和掌握GUI的图像处理平台设计。
1.2 课题分析
此课题利用MATLAB的GUI程序设计一个简单实用的图像处理程序。该程序具备
数字图像处理平台设计功能图 像 变 换图 像 增 强图 像 分 割图 像 变 形其它常用处理空间域增强频率域增强阈 值分 割梯 度分 割旋 转翻 转傅里叶变换离散余弦变换灰度变换直方图均衡化低通滤波器高通滤波器roberts算子canny算子sobel算子上下翻转左右翻转亮度对比度底截图片效果二值图1.1 整体功能框图 图像处理的常用功能,以满足用户的使用。程序实现的图像处理功能分为五个模块:图像变换、图像增强、图像分割、图像变形以及其它常用处理。如图1.1所示。
除以上的数字图像处理的功能外,该程序还要实现图像的读取显示、图像的保存及退出等基本功能。从而实现完整的数字图像平台设计,具有更好的交互性。
1.3 总体设计
软件的总体设计界面主要分为两个部分:显示区域与操作区域。具体界面布局如图1.2所示。
图1.2 界面布局
显示区域:定义两个图形区域,左面为待处理图片来显示载入的原图像,右面为通过处理后的图像。
操作区域:通过菜单栏的编辑实现对图像的各种处理,分为文件和编辑两大部分。通过文件中的打开操作显示出处理前的图像,在编辑中选择某个图像处理功能后,将在已处理图片下就会显示出处理后的图片。具体设计
2.1 菜单设计
通过Menu Editor创建菜单栏如图2.1所示。菜单的设计主要分为两大部分:文件和编辑。文件包含图像的打开、保存和退出;编辑包含图像处理功能的五个模块:图像变换、图像增强、图像分割、图像变形及其它常用处理,还有各个模块的分支。通过此菜单来控制显示或隐藏功能键。
以图2.1的傅里叶变换为例,当添加上某一菜单后,修改名称为傅里叶变换,句柄为FFT,从而会在M文件中自动生成傅里叶变换的功能函数function FFT_Callback(hObject, eventdata, handles),在此函数下编写能够实现傅里叶变换的程序便能实现对图像的傅里叶 变换。
图2.1 菜单栏
2.2 图像的打开、保存及退出
2.2.1 图像打开
图像的打开主要是通过以下程序来实现的:
“[filename,pathname]=uigetfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'载入图像');” 选择相应路径打开图像;
“file=[pathname,filename];x=imread(file);”读取选中的图像; “imshow(x);”在显示区域上显示图像。
具体操作如图2.2所示,选择“文件”菜单中的“打开”后,出现“载入图像”,选中想要处图2.2 图像的打开
理的图片后点击“打开”,即可在显示区域中显示出处理前的图片。
2.2.2 图像保存
图像的保存主要是通过以下程序来实现的:
“[sfilename,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'保存图像文件','untitled.jpg');” 选择图像文件保存的路径与格式;
“sfilefullname=[sfilepath ,sfilename];imwrite(handles.img,sfilefullname);”实现对图像的保存。
具体操作如图2.3所示,选择“文件”菜单中的“保存”后,出现“保存图像文件”,修改文件名后点击“保存”,即可将处理后的图像保存到keshe的文件夹下。
图2.3 图像的保存
2.2.3程序退出
程序的退出是通过“clc;”,“close all;”,“close(gcf);”,“clear;”这些指令来清除指令窗,窗口,内存变量及函数。
具体操为选择“文件”菜单中的“退出”后,便关闭了执行界面的窗口并清除了指令窗的所有指令。
2.3 图像变换
2.3.1 傅里叶变换
傅里叶变换(FFT)实际上是将信号f(t)与一组不同频率的复正弦作内积,这一组复正弦是变换的基向量,傅里叶系数或傅里叶变换是f(t)在这一组基向量上的投影。在图像处理技术的发展过程中,FFT起着十分重要的作用。它是线性系统分析的一个有力工具,它能够定量地分析诸如数字图像之类的数字化系统。FFT主要分为连续傅里叶变换和离散傅里叶变换,在数字图像处理中经常用到的是二维离散傅里叶变换。
程序中主要是通过二维离散傅里叶变换函数fft2(),变换后四个角部分对应于低频成分,中央部分对应于高频成分。若想使低频成分出现在中央位置,则通过函数fftshift()将图像频谱中心从矩阵的原点移到矩阵中心。从而实现图像的二维傅里叶变换。具体程序见 附录。原图像及傅里叶变换后的图像如图2.4所示。
图2.4 傅里叶变换
2.3.3 离散余弦变换
离散余弦变换(DFT)在图像处理中占有重要的位置,它实际上是傅里叶变换的实数部分,但是它比傅里叶变换有更强的信息集中能力。对于大多数自然图像,DCT能将大多数的信息放到较少的系数上去,因此就更能提高编码的效率。
程序中主要是通过灰度变换函数rgb2gray()及二维离散余弦变换函数dct2()来实现对图像的二维离散余弦变换,具体程序见附录。其变换后的图像低频能量都集中在左上角区域,而向着右下角方向,频率越来越高。原图像及离散余弦变换后的图像如图2.5所示。
图2.5 离散余弦变换
2.4 图像增强
图像增强是图像处理中的一类基本技术,其主要的目的改善图像的视觉效果,提高图像的清晰度。图像增强能够扩展对比度,增强图像中对象的边缘,消除或抑制噪声或保留图像中感兴趣的某些特性而抑制另一些特性等。图像增强方法按其处理所进行的空间不同,可分为空间域法和频率域法。2.4.1 空间域增强
空间域法是在空间域内直接对像素灰度值进行运算处理,常用的空间域法有图像的直接灰度变换和直方图均衡化,下面分别介绍两种空域上的图像增强方法。(1)灰度变换
通过灰度变换可使图像动态范围加大,图像对比度扩展,图像清晰,特征明显,大大改善人眼的视觉效果。
程序中主要通过灰度处理函数rgb2gray()对图像进行灰度变换,将彩色图像转换成灰度图像。原图像及灰度图像如图2.6所示。
图2.6 灰度变换
(2)直方图均衡化
直方图均衡化是对原始图像中的像素灰度作某种映射变换,使变换后的图像灰度的概率密度是均匀分布的,即变换后图像是一幅灰度级均匀分布图像,这意味着图像灰度的动态范围得到了增加,从而可提高图像的对比度。
程序中主要通过灰度处理函数rgb2gray()先对图像进行灰度变换,然后通过直方图均衡化处理函数histeq()对灰度图像进行直方图均衡化处理。原图像及直方图均衡化后的图像如图2.7所示。
图2.7 直方图均衡化
2.4.2 频率域增强
频率域法就是在图像的某种变换域内,对图像的变换值进行运算,然后通过逆变换获得图像增强效果。这是一种间接处理方法,一般采用二维数字滤波方法来进行频率域的图像增强。(1)低通滤波
图像的边缘以及噪声干扰在图像的频域上对应于图像傅里叶变换中的高频部分,而图像的背景区则对应于低频部分,因此可以用频域低通滤波法去除图像的高频成分,以去掉噪声,使图像平滑。
程序中采用二阶巴特沃斯低通滤波器,先用函数fft2()对图像进行二维离散傅里叶变换,然后通过低通滤波器进行滤波后,再对滤波后的图像数据通过ifft2()进行傅里叶反变换,从而得到低通滤波后的图像。如图2.8所示。
图2.8 低通滤波器
(2)高通滤波
图像中的边缘或线条与图像频谱中的高频分量相对应,因此采用高通滤波器让高频分量顺利通过,可以使图像的边缘或线条变得更清楚,可实现图像的锐化。
程序中采用二阶巴特沃斯高通滤波器,与低通滤波过程相同,先进行傅里叶变换,然后通过高通滤波器,再进行傅里叶反变换,从而得到高通滤波后的图像,具体程序见附录。原图像及滤波后的图像如图2.9所示。
图2.9 高通滤波器
2.5 图像分割
图像分割是一种重要的图像分析技术。为了识别和分析图像中的目标,需要将它们从图像中分离提取出来,在此基础上才有可能进一步对目标进行测量和对图像进行利用。图像分割就是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。2.5.1 阈值分割
灰度阈值法是把图像的灰度分成不同的等级,然后用设置灰度阈值的方法确定有意义的区域或欲分割物的边界,该方法中最简单的就是二值化的阈值分割。
程序中先通过函数graythresh()即用Otsu方法计算出全局图像阈值,再通过函数im2bw(,)基于一定阈值将图像转换成二值图像。原图像及阈值分割后的图像如图2.10所示。
图2.10 阈值分割
2.5.2 梯度分割
梯度分割即对图像进行边缘检测,图像边缘对图像识别和计算机分析十分有用。边缘能勾划出目标物体,使观察者一目了然。边缘蕴含了丰富的内在信息,是图像识别中抽取图像特征的重要属性。
(1)Roberts算子
程序中先通过函数rgb2gray()对图像进行灰度变换,再通过函数edge(,'roberts')即用Roberts算子识别灰度图像的轮廓,从而实现对图像的边缘检测。如图2.11所示。
图2.11 Roberts算子
(2)Canny算子
程序中先通过函数rgb2gray()对图像进行灰度变换,再通过函数edge(,'canny')即用Canny算子识别灰度图像的轮廓,如图2.12所示。(3)Sobel算子
程序中先通过函数rgb2gray()进行灰度变换,再通过函数edge(,'sobel')即用Sobel算 子识别灰度图像的轮廓,从而实现对图像的边缘检测。如图2.13所示。
图2.12 Canny算子
图2.13 Sobel算子
2.6 图像变形
2.6.1 翻转
上下翻转:程序中通过函数flipud()对图像数据矩阵进行上下翻转,由于彩色图像不能直接进行矩阵翻转,因此需要先将彩色图像通过灰度变换处理后再进行翻转,原图及翻转后的图像如图2.14所示。
图2.14 上下翻转 左右翻转:与上下翻转相同,先将图像进行灰度变换后,通过函数fliplr()将图像数据矩阵进行左右翻转,原图及翻转后的图像如图2.15所示。
图2.15 左右翻转
2.6.2 旋转
打开图片后,选择“编辑”菜单“图像变形”中的“旋转”后,执行界面会出现调整角度的输入对话框,在对话框中输入任意角度,则原图像将会旋转任意角度,输入正数逆时针旋
。转,输入负数顺时针旋转。以90为例,在对话框中输入90,则图像逆时针旋转90,如图2.16所示。
在程序中由prompt={'调整角度'};来显示输入对话框,函数inputdlg()创建对话框和输入框,输入角度后通过函数imrotate()进行相应的旋转。
图2.16 图像旋转
2.7 其它常用处理
2.7.1 亮度
当在“编辑”菜单中选择“亮度”后,会出现调整倍数的输入对话框,默认值为1,在对话框中输入数值后图像便会相应变换亮度。输入数值小于1时,图像变亮,输入数值大于1时,图像变暗。程序中通过函数imadjust()来实现,即将原图像的亮度值以输入数值描述的曲线关系映射到新的数值中,从而实现亮度的变化。以输入值0.5为例,变换后的图像如图2.17所示。
图2.17 亮度调整
2.7.2 对比度
对比度增强:选择菜单中“对比度增强”后,弹出输入参数的对话框,以输入参数2为例,对比度增强后的图像如图2.18所示。程序中通过乘法函数immultiply()将原图像数据与输入数值相乘,从而增强图像的对比度。
图2.18 对比度增强
对比度减弱:选择菜单中“对比度减弱”后,弹出输入参数的对话框,同样以输入参数2为例,对比度减弱后的图像如图2.19所示。程序中通过除法函数imdivide()将原图像数据与输入数值相除,从而减弱图像的对比度。
图2.19 对比度减弱
2.7.3 截图 当选择完菜单中的“截图”后,鼠标箭头会变成一个十字,能够选择想要截取的图像部分,选中后就会直接显示出截取后的图像,如图2.20所示。程序中通过函数imcrop()来实
图2.20 截图
现的,即返回图像的一个裁剪区域,允许用户以交互方式使用鼠标选定要剪切的区域。2.7.4 底片效果
程序中通过函数imcomplement()对图像数据矩阵进行取反运算,即可实现底片效果,原图像及底片效果的图像如图2.21所示。
图2.21 底片效果
2.7.5 二值处理
二值化即将彩色图像转换成只有0和1两个数值的图像,程序中通过二值转换函数im2bw()将彩色图像转换为二值图像。原图像及转换后的二值图像如图2.22所示。
图2.22 二值处理 3 结果分析
经过我们小组的不断调试,软件已经得到了完善,达到了课设的基本要求,基于MATLAB数字图像处理平台设计能实现的全部功能如下:(1)设计图形用户界面,实现了图像的打开、保存及退出
(2)实现了对图像的傅里叶变换及离散余弦变换,其中离散余弦变换只能对灰度图像处理。(3)实现了图像空间域增强包括灰度变换和直方图均衡化,还有图像频率域增强包括低通滤波器和高通滤波器。其中直方图均衡化,低通滤波和高通滤波均只支持对灰度图像处理。
(4)实现了图像分割:阈值分割和梯度分割,梯度分割有Roberts算子、Canny算子、Sobel算子。其中梯度分割需要对图像先进行灰度变换。(5)实现了图像的翻转和旋转。图像的翻转只支持灰度图像。
(6)实现了图像的亮度,对比度的调整,能够对图像截图、做出底片效果及二值化处理。
实验程序虽然基本实现了以上这些功能,但遗憾的是有些功能只支持对灰度的图像处理,还不能直接对彩色图像进行处理。心得体会
通过两周的MATLAB课程设计实践,使我对MATLAB的使用有了进一步的了解和熟悉。还记得当初我们小组抽到这个题目的时候,每个人看到这个题目都无所适从。虽然曾经学过关于数字图像处理的课程,但对于MATLAB的数字图像处理的实际运用并不是很熟悉,特别是对此次GUI设计更是没有丝毫接触过的。
虽然对课题感到很懵懂,但在指导老师的提示与指导后,我们开始找到了解决问题的路径。我们到图书馆借了几本相关的书,又从网上收集了大量的资料,为这次课设做了较为充分的准备,在参考了相关材料及程序后,我对自己要做的课设内容有了进一步的了解,并对MATLAB的使用有了更深的体会。
当然,在课设的进行过程中,我们还是遇到了不少问题。例如,起初由于我对句柄使用以及一些函数使用的不恰当,使得在对图像文件的保存上就遇到了问题,不过在我们小组的讨论研究下轻松的就解决了。随着课设的进行,对matlab的的熟悉度逐步加深。在基本功能已经完成的基础上,我们开始进行一些扩张功能的尝试,比如图像的旋转、翻转,图像亮度、对比度的调整,截图等功能,也实现了较为理想的结果。
虽然这课题最终的功能还不是很完善,但是我还是较为满意的。本次的课程设计,不但鞭策着我去巩固MATLAB的理论知识,还提高了我对MATLAB的实际操作运用,使得理论与实践相结合,为进一步学MATLAB打下了坚实的基础。附录
function varargout = keshe(varargin)gui_Singleton = 1;gui_State = struct('gui_Name',mfilename,...'gui_Singleton', gui_Singleton,...'gui_OpeningFcn', @keshe_OpeningFcn,...'gui_OutputFcn', @keshe_OutputFcn,...'gui_LayoutFcn', [] ,...'gui_Callback',[]);if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});end if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else
gui_mainfcn(gui_State, varargin{:});end %----------function keshe_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);%--------function varargout = keshe_OutputFcn(hObject, eventdata, handles)varargout{1} = handles.output;%--------function open_Callback(hObject, eventdata, handles)% hObject
handle to open(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)[sfilename ,sfilepath]=uiputfile({'*.jpg';'*.bmp';'*.tif';'*.*'},'保存图像文件','untitled.jpg');
%返回要保存的图像文件
if ~isequal([sfilename,sfilepath],[0,0])
%如果不是取消保存
sfilefullname=[sfilepath ,sfilename];
%将文件名和目录名组合成一个完整的路径
imwrite(handles.img,sfilefullname);
%保存图像
else
msgbox('取消保存?','保存图像文件');%弹出一个名为保存图像文件的对话框,内
容为“取消保存?”
end %--------function exit_Callback(hObject, eventdata, handles)% hObject
handle to exit(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)axes(handles.axes2);i1=handles.img;
%获取图像
i2=im2double(i1);
%图像矩阵转换成双精度浮点类型 f1=fft2(i2);
%对图像进行二维离散傅里叶变换
fc1=fftshift(f1);
%将变换后的图象频谱中心从矩阵的原点移到矩阵的中心 i=log(1+abs(fc1));
%对变换后的图像矩阵数据求绝对值后取自然对数 imshow(i);
xlabel('傅里叶变换图像');handles.img=i;guidata(hObject,handles);
%把handles句柄更新
%--------function DCT_Callback(hObject, eventdata, handles)% hObject
handle to DCT(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)global T
%定义全局变量
axes(handles.axes2);
%定义图形区域axes2 T=getimage;
%从坐标轴获取图像数据
x=rgb2gray(handles.img);%利用 rgb2gray函数对源图像进行灰度处理
imshow(x);
%显示图像
xlabel('灰度图像');
% x轴名为“灰度图像” handles.img=x;
%把图像发给handles.img guidata(hObject,handles);
%把handles句柄更新
%--------function zhifangtu_Callback(hObject, eventdata, handles)% hObject
handle to zhifangtu(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)axes(handles.axes2);y1=handles.img;
%获取图像 x=rgb2gray(handles.img);
%灰度变换
f=double(x);
%数据类型转换为双精度数值 g=fft2(f);
%二维离散傅里叶变换
g=fftshift(g);
%将变换后的图象频谱中心从矩阵的原点移到矩阵的中心 [M,N]=size(g);
%返回矩阵g的大小,即M为行数,N为列数 nn=2;
%二阶巴特沃斯低通滤波器 d0=50;
%截止频率50Hz m=fix(M/2);n=fix(N/2);
%取矩阵g的行数和列数一半的整数 for i=1:M
for j=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);
%结果返回到result
end end result=ifftshift(result);
%将图象频谱中心从矩阵的中心移到矩阵的原点 y2=ifft2(result);
%二维离散傅里叶反变换
y3=uint8(real(y2));
%把矩阵y2实部转换成8位无符号数据 imshow(y3);
%显示低通滤波后的图像 xlabel('低通滤波图像');handles.img=y3;guidata(hObject,handles);
%把handles句柄更新
%--------function high_Callback(hObject, eventdata, handles)% hObject
handle to high(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)axes(handles.axes2);T=getimage;
%从坐标轴获取图像数据
level=graythresh(T);
%用Otsu方法计算全局图像阈值
BW=im2bw(T,level);
%基于一定阈值把图像转换为二值图像 imshow(BW);
%显示阈值分割后的图像 xlabel('阈值分割图像');handles.img=BW;guidata(hObject,handles);
%把handles句柄更新
%--------function tidu_Callback(hObject, eventdata, handles)function kongyu_Callback(hObject, eventdata, handles)function pinyu_Callback(hObject, eventdata, handles)function bianxing_Callback(hObject, eventdata, handles)function qita_Callback(hObject, eventdata, handles)function duibidu_Callback(hObject, eventdata, handles)%--------function roberts_Callback(hObject, eventdata, handles)% hObject
handle to roberts(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)axes(handles.axes2);T=getimage;
%从坐标轴获取图像数据 C1=rgb2gray(T);
%灰度变换
C2=edge(C1,'canny');
%用canny算子识别灰度图像的轮廓 imshow(C2);xlabel('Canny算子图像');handles.img=C2;guidata(hObject,handles);
%把handles句柄更新
%--------function sobel_Callback(hObject, eventdata, handles)% hObject
handle to sobel(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)axes(handles.axes2);T=getimage;
%从坐标轴获取图像数据
prompt={'调整角度'};
%用于显示可提示用户进行输入角度的对话框 defans={'0'};
%对话框内显示默认数值为0 p=inputdlg(prompt,'input',1,defans);
%创建并打开标题为input的输入对话框,包含
“调整角度”,输入框为1行,对话框中默认显示数值为0 p1=str2num(p{1});
%将字符串转换为数值
f=imrotate(handles.img,p1,'bilinear','crop');%将图像handles.img饶图像的中心点旋转p1
度,p1为正数逆时针旋转,为负数顺时针旋转,bilinear为使用双线性插值法,crop为旋19
转后输出图像尺寸与原图像尺寸一样
imshow(f);
%显示旋转后图像 xlabel('旋转后的图像');handles.img=f;guidata(hObject,handles);
%把handles句柄更新
%--------function shangxia_Callback(hObject, eventdata, handles)% hObject
handle to shangxia(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)
axes(handles.axes2);
T= getimage;
%从坐标轴获取图像数据
f=fliplr(handles.img);
%将图像矩阵左右翻转
imshow(f);
%显示翻转后的图像
xlabel('左右翻转后的图像');
handles.img=f;
guidata(hObject,handles);
%把handles句柄更新
%--------function liangdu_Callback(hObject, eventdata, handles)% hObject
handle to liangdu(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)axes(handles.axes2);T=getimage;
%从坐标轴获取图像数据
prompt={'输入参数'};
%用于显示可提示用户进行输入参数的对话框
defans={'1'};
%对话框内显示默认数值为1 p=inputdlg(prompt,'input',1,defans);%创建并打开标题为input的输入对话框,包含“输入
参数”,输入框为1行,对话框中默认显示数值为1 p1=str2num(p{1});
%将字符串转换为数值
f=immultiply(handles.img,p1);
%将原图像数据与输入数值相乘,从而增强对比度
imshow(f);
%显示对比度增强后的图像 xlabel('对比度增强的图像');handles.img=f;guidata(hObject,handles);
%把handles句柄更新
%--------function jianruo_Callback(hObject, eventdata, handles)% hObject
handle to jianruo(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)axes(handles.axes2);T=getimage;
%从坐标轴获取图像数据 x=imcrop(handles.img);
% 返回图像的一个裁剪区域,允许用户以交互方式使用
鼠标选定要剪切的区域
imshow(x);
%显示裁剪后的图像 xlabel('裁剪后的图像');handles.img=x;guidata(hObject,handles);
%把handles句柄更新
%--------function dipian_Callback(hObject, eventdata, handles)% hObject
handle to dipian(see GCBO)% eventdata reservedto be defined in a future version of MATLAB % handles
structure with handles and user data(see GUIDATA)axes(handles.axes2);T=getimage;
%从坐标轴获取图像数据 BW=im2bw(handles.img);
%将图像转换为二值图像 imshow(BW);
%显示二值图像 xlabel('二值图像');handles.img=BW;guidata(hObject,handles);
%把handles句柄更新
第五篇:《数字图像处理》
实验五 图像的几何变换
一.实验目的及要求
掌握图像几何变换的基本原理,熟练掌握数字图像的缩放、旋转、平移、镜像和转置的基本原理及其MATLAB编程实现方法。
二、实验内容
(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结果。熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
1.图像缩放 clear all, close all I = imread('cameraman.tif');Scale = 1.35;
% 将图像放大1.35倍
J1 = imresize(I, Scale, 'nearest');
% using the nearest neighbor interpolation J2 = imresize(I, Scale, 'bilinear');
% using the bilinear interpolation imshow(I), title('Original Image');figure, imshow(J1), title('Resized Image--using the nearest neighbor interpolation ');figure, imshow(J2), title('Resized Image--using the bilinear interpolation ');help imresize
% 查看imresize使用帮助
1.95倍
I = imread('cameraman.tif');Scale = 1.96;
% 将图像放大1.96倍
J1 = imresize(I, Scale, 'nearest');
% using the nearest neighbor interpolation J2 = imresize(I, Scale, 'bilinear');
% using the bilinear interpolation imshow(I), title('Original Image');figure, imshow(J1), title('Resized Image--using the nearest neighbor interpolation ');figure, imshow(J2), title('Resized Image--using the bilinear interpolation ');
说明:
注意观察不同插值方法的图像表现; 改变图像缩放因子Scale,重做上述实验。2.图像旋转
clear all, close all I = imread('cameraman.tif');Theta = 45;
% 将图像逆时针旋转45。
J1 = imrotate(I, Theta, 'nearest');
% using the nearest neighbor interpolation Theta =-45;
% 将图像顺时针旋转45。
J2 = imrotate(I, Theta, 'bilinear', 'crop');% using bilinear interpolation and crops the output image imshow(I), title('Original Image');figure, imshow(J1), title('Rotated Image--using the nearest neighbor interpolation ');figure, imshow(J2), title(' Rotated Image--using the bilinear interpolation ');% 查看imrotate使用帮助 help imrotate %-------
图像旋转30顺时针逆时针
clear all, close all I = imread('cameraman.tif');Theta = 30;
% 将图像逆时针旋转30。
J1 = imrotate(I, Theta, 'nearest');
% using the nearest neighbor interpolation Theta =-30;
% 将图像顺时针旋转30。
J2 = imrotate(I, Theta, 'bilinear', 'crop');% using bilinear interpolation and crops the output image imshow(I), title('Original Image');figure, imshow(J1), title('Rotated Image--using the nearest neighbor interpolation ');figure, imshow(J2), title(' Rotated Image--using the bilinear interpolation ');7 说明:
注意观察不同插值方法和输出图像后处理方法的图像表现; 改变旋转角度大小和方向,重做上述实验。
3.图像水平镜象
clear all, close all I = imread('cameraman.tif');I1 = flipdim(I,2);
I2 = flipdim(I,1);figure(1), subplot(1,2,1), imshow(I);subplot(1,2,2), imshow(I1);figure(2), subplot(2,1,1), imshow(I);subplot(2,1,2), imshow(I2);%----
(二)用MATLAB编程实现以下图像几何变换(参考自编讲义相关章节)
1.图像扭曲变换 2.球面变换
三、实验设备
1.PIII以上微机; 2.MATLAB6.5;
四、预习与思考
1.预习实验内容,阅读教材熟悉实验原理;
2.查阅资料,熟悉实验中涉及的有关MATLAB函数;
3.利用课余时间,采用MATLAB底层函数编程实现实验内容
(二)中的图像平移、图像转置等几何变换。
五、实验报告要求
1.简述试验的目的和试验原理;
2.叙述各段程序功能,改变有关函数的参数,分析比较实验结果; 3.打印出所编写的实验程序。4.写出本实验的心得体会及意见。
实验六
数字图像处理应用
一.实验目的及要求
1.利用MATLAB提供的图像处理函数实现图像中物体属性的测量; 2.训练综合运用MATLAB图像处理函数的能力; 3.了解数字图像处理基本应用。
二、实验内容
以大米粒特性测量为例,综合应用课程中图像分割、形态学滤波、图像增强、图像特征提取等图像处理方法,实现大米粒特性自动测量。实验过程简述:
1. 读取和显示图像 2. 估计图像背景 3. 获取背景均匀的图像 4. 图像增强 5. 图像二值化分割 6. 区域标记及为彩色处理
7. 测量图像中的区域特性(面积、质心等)
8.统计大米粒的特性分布规律。
(一)研究以下程序,分析程序功能;输入执行各命令行,认真观察命令执行的结 果。熟悉程序中所使用函数的调用方法,改变有关参数,观察试验结果。
% Read and Display an Image clear, close all,close all;I = imread('rice.png');
figure, imshow(I)
% Use Morphological Opening to Estimate the Background
background = imopen(I,strel('disk',15));
figure, imshow(background);
%Display the Background Approximation as a Surface
figure, surf(double(background(1:8:end,1:8:end))),zlim([0 255]);set(gca,'ydir','reverse');% Subtract the Background Image from the Original Image I2 = imsubtract(I,background);figure, imshow(I2)% Adjust the Image Contrast I3 = imadjust(I2, stretchlim(I2), [0 1]);figure, imshow(I3);% Apply Thresholding to the Image level = graythresh(I3);bw = im2bw(I3,level);figure, imshow(bw)% Determine the Number of Objects in the Image [labeled,numObjects] = bwlabel(bw,4);
% Label components.numObjects % Examine the Label Matrix RGB_label = label2rgb(labeled, @spring, 'c', 'shuffle');figure, imshow(RGB_label);% Measure Object Properties in the Image graindata = regionprops(labeled,'basic')allgrains = [graindata.Area];% Compute Statistical Properties of Objects in the Image max(allgrains);biggrain = find(allgrains==695)mean(allgrains);figure, hist(allgrains,20);12
(详见MATLAB IPT的 帮助文档demo中的Correcting Nonuniform Illumination)
(二)查看MATLAB IPT 帮助文档,研究其它应用演示
三、实验设备 1.PIII以上微机; 2.MATLAB6.5;
四、预习与思考
1.预习实验内容,阅读教材熟悉实验原理; 2.查阅资料,熟悉实验中涉及的有关函数。
3.利用课余时间,采用MATLAB函数编程实现实验内容
(二)。
五、实验报告要求
1.简述试验的目的和试验原理;
2.叙述各段程序功能,改变有关函数的参数,分析比较实验结果; 3.打印出所编写的实验程序。4.写出本实验的心得体会及意见。