资源描述
数字图像灰度处理的MATLAB GUI实现现阶段用于图像处理的软件很多,如PHOTOSHOP、PAINTSHOP、GIMP、SaperaProcessing,还可以使用VB、C/C+等编程语言来进行数字图像处理,但是大部分软件对图像的处理运算并不是很完善。介绍一种用可视化数值计算软件MATLAB实现的数字图像处理系统平台,系统使用MATLAB中提供的GUI设计系统可视化的用户界面,下拉式的菜单方便用户选择对图像的处理。用户可以随意选择要处理的图片。但是该系统只支持灰度图片,可实现内容主要包括灰度图像的代数运算、几何运算、正交变换、图像增强、图像形态学描述、边缘检测。基于数字图像处理的一些基本原理,利用MATLAB设计程序进行对灰度图像的处理。有部分处理运算有很多种方法,我选择了最简单、最明了的方法。本系统虽然基本纳含了对图像的一些基本处理,但是在部分功能模块实现上仍存在不足,恳请各位评审老师予以批评指正。引言数字图像处理又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。理论上讲,图像是一种二维的连续函数,然而在计算机上对图像进行数字处理的时候,首先必须对其在空间和亮度上进行数字化,这就是图像的采样和量化的过程。二维图像进行均匀采样,就可以得到一幅离散化成MN样本的数字图像,该数字图像是一个整数阵列,因而用矩阵来描述该数字图像是最直观最简便的了。随着计算机的发展,图像处理技术在许多领域得到了广泛应用,用于图像处理的软件也很多,如PHOTOSHOP、PAINTSHOP、GIMP、SaperaProcessing、MATLAB等,其中大部分软件都是基于广告策划和图像修饰处理而设计的应用软件,进行图像处理时并不是很方便。而MATLAB(矩阵实验室) 它在矩阵运算上有自己独特的特点,在矩阵运算处理具有很大的优势,因此用MATLAB处理数字图像非常的方便。不仅如此,MATLAB提供了丰富的图形命令和图形函数,而且其面向对象的图形系统具有强大的用户界面(GUI)生成能力。这样,用户就可以充分利用系统提供的 GUI 特性,编写自己需要的图形界面,从而可以高效地进行图像处理。MATLAB支持五种图像类型,即索引图像、灰度图像、二值图像、RGB图像和多帧图像阵列;支持BMP、GIF、HDF、JPEG、PCX、PNG、TIFF、XWD、CUR、ICO等图像文件格式的读,写和显示。MATLAB对图像的处理功能主要集中在它的图像处理工具箱(Image Processing Toolbox)中。图像处理工具箱是由一系列支持图像处理操作的函数组成,可以对图像进行诸如几何操作、线性滤波和滤波器设计、图像变换、图像分析与图像增强、二值图像操作以及形态学处理等图像处理操作。第一章 系统简介1.1系统特色本系统利用MATLAB语言设计程序进行灰度图像处理,主要功能包括灰度图像的代数运算、几何运算、正交变换、图像增强、图像形态学描述、边缘检测,基本上包含了图像的所有变换和运算。菜单式选择图像处理运算清晰方便,可视化的界面形象生动、使用方便、交互性强、具有无限的扩展能力。是被选图片是否为灰度图片选择并打开图片开 始否提示错误信息选 择 操 作结 束几何运算正交变换图像增强图像描述边缘检测代数运算文件打开退出1.2系统流程图1.3系统总体结构本系统共设计了6种图像处理运算,其总体结构如下图所示:第二章 系统设计原理2.1各模块功能及图像处理原理代数运算代数运算是指两幅输入图象之间进行点对点的加、减、乘、除运算得到输出图象的过程。如果记输入图象为A(x,y)和B(x,y),输出图象为C(x,y),则有如下四种简单形式: C(x,y) = A(x,y)+B(x,y) C(x,y) = A(x,y)-B(x,y) C(x,y) = A(x,y)B(x,y) C(x,y) = A(x,y)/ B(x,y) 对于图像的代数运算应注意以下问题:(1)代数运算的结果很容易超出数据类型允许的范围,有些运算(如除法)会产生分数结果,这个结果是不能用整数类型描述的,所以在图像代数运算中会采用以下的截取规则:超出数据类型允许的范围的值用数据类型的最大值代替;分数的结果采用四舍五入的方法整取。(2)在使用Matlab中代数运算函数时,不用进行数据类型的转换,这些函数可以接受uint8和uint16数据类型,并返回相同格式的图象结果。(3)可以使用+、-、*、/等基本算术运算符来进行图像的算数操作运算,但是不同于Matlab中提供的运算函数,必须在运算前将图像转换为适合进行算数运算的双精度数据类型。(4)任何一个代数运算,都必须保证输入图像的大小相等,且数据类型一致。在该功能模块中主要设计了图像的求补、叠加、减法、线性组合、乘法、除法运算。几何运算在该功能模块中主要包含了改变图像大小、图像水平镜像、垂直镜像、图像转置、图象旋转、图像裁剪。图像的几何变换可以看成是像素在图像内的移动过程,该移动过程可以改变图像中物体对象(像素)之间的空间关系。完整的几何运算需要由两个算法来实现:空间变换算法和灰度插值算法。空间变换主要用来保持图像中曲线的连续性和物理的连通性,一般都采用数学函数形式来描述输入、输出图像相应像素间的空间关系。空间变换一般定义为,其中,f便是输入图像,g表示输出图像,坐标指的空间变换后的坐标,要注意这时的坐标已经不是原来的坐标了,和分别图像的x和y坐标的空间变换函数。灰度级插值主要是对空间变换后的像素赋予灰度值,使之恢复原位置处的灰度值,在几何运算中,灰度级插值是必不可少的组成部分。因为图像一般用整数位置处的像素来定义。而在几何变换中,的灰度值一般由处在非整数坐标上的的值来确定,即g中的一个像素一般对英语f中的几个像素之间的位置,反过来看也是一样,即f中的一个像素往往被映射到g中的几个像素之间的位置。正交变换在该功能模块中主要包含了离散傅里叶变换、离散余弦变换、Radon变换。(1)离散傅里叶变换离散傅里叶变换(DFT)在数字信号处理和数字图像处理中应用十分广泛。使用离散傅里叶变换的根本原因有二:一是DFT的输入、输出均为离散形式的,这使得计算机非常容易操作:二是因为计算DFT存在快速算法,即快速傅里叶变换(FFT),因而计算比较方便。在数字图像处理中,令f(x,y)表示一幅大小为MN的图像,其中x=0,1M-1,y=0,1N-1。其离散傅里叶正反变换对为:空间域是由f(x,y)所组成的坐标系,其中x和y用作(空间)变量。频率系统是由F(u,v)所组成的坐标系,其中u和v用作(频率)变量。由u=0,1M-1,v=0,1N-1定义的MN矩形区域常称为频率矩形。显然,频率矩形的大小与输入图像的大小相同。(2)离散余弦变换离散余弦变换是仅次于K-L变换的次最佳正交变换,且已获广泛应用,并称为多图像编码国际标准的核心。离散余弦变换的变换核为余弦函数,计算速度块,有利于图像压缩和其他处理。如果数字图像用MN方阵表示,二维离散余弦变换的正反变换可简化为:u=0,1M-1,v=0,1N-1 x=0,1M-1,y=0,1N-1其中: ,(3)Radon变换所谓Radon变换,就是将原始图像变换为它在各个角度的投影表示。图像f(x,y)在任意角度上投影定义为其中:图像增强在该功能模块中主要包含了空域变换增强、空域滤波增强和频域增强。其中空域变换增强包括直接灰度调整、直方图处理(直方图均衡化、直方图规定化),空域滤波增强包括平滑滤波(均值滤波、中值滤波)、锐化滤波(Unsharp算子、Sobel算子、Prewitt算子、LOG算子),频域增强包括低通滤波、高通滤波。图像增强按所用方法可分成空域增强方法和频域增强方法。前者是直接在图像所在的空间进行处理,也就是在像素组成的空间里直接对像素进行操作;后者是将原来图像空间中的图像以某种形式转换到其他空间,然后利用该空间特有的性质方便地进行图像处理,最后再转换到原来的图像空间中,从而得到处理后的图像。(1)直方图均衡化算法:设Pf(fi)原始图像直方图,Pz(zi)期望输出图像的直方图, fj,zi0,L-1。a.列出原始图像灰度级fj, j=0,1,k,L-1; b.统计各灰度级的象素数目,nj, j=0,1,k,L-1; c.计算原始图像直方图Pf(fj)=nj/n,n为原始图像总的象素数目; d.计算累积分布函数c(f); e.应用转移函数gi=INT(gmax-gmin)c(f)+gmin+0.5 ,计算映射后的灰度级;f.统计映射后各灰度级的象素数目ni, i=0,1,p-1; g.计算输出图像直方图Pg(gi)= nj/n,i=0,1,p-1; h.用fj和gi的映射关系,修改原始图像灰度级,获得直方图近似均匀分布的输出图像。(2)直方图规定化算法设Pf(fi)原始图像直方图,Pz(zi)期望输出图像的直方图, fj,zi0,L-1。a.分别对Pf(fj), Pz(zi)作均衡化处理,fjgm, ziyn;b.在gmyn处组合,Pf(fi) Pz(zi)。gm=T(fj), yn=G(zi), gmyn, zi=G-1T(fj)。(3)空域滤波平滑滤波平滑滤波本质上是一个低通滤波器,它主要用来使图像模糊或降低噪声。对图像识别的目的而言,图像模糊可去除妨碍重要特征抽取的小细节并使断线相连。对于脉冲型的高频噪声,平滑滤波可减轻此噪声的效应。平滑滤波主要包括:均值滤波和中值滤波。a.均值滤波:一个33平均滤波器所采用的一般模板如图所示,W1W2W3W4W5W6W7W8W9由此可明显看出其名称的由来。一般常用的还有55的模板,或77的模板。愈大的模板模糊效果愈强,相当于此滤波器的截止频率越来越低,高频部分被滤除越多。b.中值滤波:均值滤波往往不只是把干扰去除,还常把图像的边缘变模糊,因而造成视觉上的失真。如果目的只是要把干扰去除,而不是刻意让图像模糊,则中值滤波是很好的选择。把模板内所涵盖的像素灰度值由小到大排列,中值是指排序在中间的那一个值,此值即为滤波器的输出。此法特别适合用在很强的胡椒粉式或脉冲式的干扰,因为这些灰度值的干扰值与其邻近像素的灰度值有很大的差异,因此经排序后取中值的结果是强迫将此干扰点变成与其相邻的某些像素的灰度值一样,达到去除干扰的效果。由中值滤波器的原理不难看出中值滤波是一个非线性的操作。锐化滤波锐化(sharpening)滤波本质上是一个高通滤波器,它主要用来使图像的细节(detail)或边缘更突显,而达到图像增强的目的。一个基本高通空间滤波如下:若模板中心点对应较大灰度的像素,则经此滤波后,此像素与其旁边像素之间的灰度的差异会被放大,反之,此模板对灰度变化相当慢的平滑区域,其输出将非常小。极端状况是若模板涵盖范围内的灰度都一样时,则不管原来是多大灰度值,其输出恒为零,这表示此种模板有降低整体图像平均值使图像整体变暗的缺点。另外,实际的输出有负值的可能性,必须要做大小的调整。(4)频域滤波频域滤波包括低通滤波和高通滤波:低通滤波是要保留图像中的低频分量而除去高频分量。图像中的边缘和噪声都对应图像傅里叶频谱中的高频部分,所以通过在频域中的低通滤波可以除去或消弱噪声的影响并模糊边缘轮廓。Butterworth低通滤波器是一种物理上可以实现的低通滤波器。N阶截断频率为d0的Butterworth低通滤波器的转移函数为。高通滤波也称高频滤波,它的频值在0频率处为1,随着频率的增长,传递函数的值逐渐增加;当频率增加到一定值之后,传递函数的值通常又回到0值或者降低到某个大于1的值。在前一种情况下,高频增强滤波器实际上是一种带通滤波器,只不过规定0频率处的增益为单位1.在实际应用中,为了减少图像中面积大且缓慢变化的成分的对比度,有时让0频率处的增益小于单位1更合适。如果传递函数通过原点,则可以称为laplacian滤波器。N阶截断频率为d0的Butterworth高通滤波器的转移函数为图像描述数学形态学图像处理的基本思想是利用一个称作结构元素的“探针”收集图像的信息。当探针在图像中不断移动时,便可考察图像各个部分间的相互关系,从而了解图像各个部分的结构特征。作为探针的结构元素,可直接携带知识(形态、大小、以及灰度和色度信息)探测所研究图像结构特点。二值形态学中的运算对象是集合,通常给出一个图像集合和一个结构元素集合,利用结构元素对图像进行操作。其基本运算有四种:腐蚀、膨胀、开运算和关运算。基于这些基本运算及其组合来进行图像形状和结构的分析及处理。如果A是图像集合,B是结构元素(B本身也是一个图像集合),形态学运算将使用B对A进行操作。结构元素往往比图像小得多,基本运算将遵循这个原则。(1)膨胀和腐蚀膨胀是在二值图像中“加长”或“变粗”的操作。加长和变粗的程度由一个结构元素控制。数学上,膨胀定义为集合运算。A被B膨胀,记为,定义为腐蚀是指“收缩”或“细化”二值图像中的对象。像在膨胀中一样,收缩的方式和程度也是由一个结构元素控制。腐蚀的数学定义与膨胀相似,A被B腐蚀记为A B,定义为A B=x|(B)xA(2)开运算和闭运算在图像处理的实际应用中,更多地以各种组合的形式来使用膨胀和腐蚀,它们可以级连结合使用,膨胀后再腐蚀,或者腐蚀后在膨胀,通常不能变换成原来的图像(目标),而是产生一种新的形态学变换,这就是开运算和闭运算。A被B的形态学开运算可以记做A B,这种运算是A被B腐蚀后再用B来膨胀结果:A被B的形态学闭运算记做,它是先膨胀再腐蚀的结果:当处理二值图像时,采用上述的形态学变换组合,主要应用于提取某一区域的边界线、图像边缘轮廓、物理骨架特征和目标识别等实际应用。边缘检测两个具有不同灰度值的相邻区域之间总存在边缘,边缘是灰度值不连续的结果。这种不连续性可以利用求导数的方法方便地检测到,一般常用一阶导数和二阶导数来检测。边缘检测的基本思想是首先利用边缘增强算子,突出图像中的局部边缘,然后定义像素的“边缘强度”,通过设置门限的方法提取边缘点集。常用的边缘检测算子由Robert算子、Sobel算子、Prewitt算子、LOG算子、Canny算子。(1)Robert算子Robert算子是一种利用局部差分算子寻找边缘的算子,其模板如下图所示。Robert算子对具有陡峭的低噪声图像效果较好。(2)Sobel算子Sobel算子的两个卷积计算模板如下图所示,图像中的每个点都用这两个模板作卷积,第一个模板通常对垂直边缘响应最大,第二个模板对水平边缘响应最大。两个卷积的最大值作为该点的输出值,运算结果是一副边缘幅度图像。Sobel算子对灰度渐变和噪声较多的图像处理的较好。(3)Prewiitt算子Prewiitt算子的两个卷积计算模板如下图所示,与使用Sobel算子的方法一样,图像中的每个点都用这两模板作卷积,取最大值作为输出。Prewiitt算子也产生一副边缘幅度图像。也是对灰度渐变和噪声较多的图像处理得较好。(4)LOG算子拉普拉斯算子的卷积模板如下图所示,它是一个二阶算子,将在边缘处产生一个陡峭的零交叉。拉普拉斯算子是一个线性的、移不变的算子。它的传递函数在频域空间的原点是进行预先平滑的,然后用拉普拉斯算子滤波,处理后的图像具有零点平均灰度。在log算子的检测过程中log算子先用高斯低通滤波器将图像进行预先平滑,然后用拉普拉斯算子找出图像中的陡峭边缘,最后用零灰度值进行二值化产生闭合的、连通的轮廓、消除所有内部点。(5)Canny算子Canny算子检测边缘的方法是寻找图像梯度的局部极大值。梯度是用高斯滤波器的一阶微分计算的。Canny方法使用两个阈值来分别检测强边缘和弱边缘,而且仅当弱边缘与强边缘相连时,弱边缘才会被输出。因此,此方法不容易受噪声的干扰,能够检测到真正的弱边缘。2.2 MATLAB程序编写原理界面设计该系统的界面设计程序MainInterface.m主要运用了Matlab GUI中的figure(图形窗口)、uimenu(图形窗口主菜单)两个对象。在GUI中所有的对象创建都有着相同的格式:handle=function(propertyname, propertyvalue,)uimenu对象的一些常用属性如表2. 1所示:表2.1 uimenu对象的属性列表属性说明Backgroundcoloruimenu背景色,是一个3元素的RGB向量或Matlab预定义的颜色名称。默认的背景色是亮灰色CallbackMatalab回调字符串,选择菜单项时,回调字符串传给函数eval。初始值为空矩阵Checked被选项的校验标记 on:校验标记出现在所选项旁边;off:不显示Enable菜单式能状态 on:菜单项使能。选择菜单项能将callback字符串传给eval;off:菜单项不使能。选择菜单项不起任何作用。Label含有菜单项标志的文本串。在PC系统中,用“&”定义快捷键Positionuimenu对象的相对位置。顶层菜单从左到右编号,子菜单从上至下Separator分隔符线模式 on:分割线在菜单项之上;off:不画分割线Visibleuimenu对象的可视性 on:uimenu在屏幕上可见;off:不可见在本系统菜单设计过程中主要使用了figure、uimenu的Backgroundcolor、Callback、Label、 Position 、Separator、 Visible属性。在被处理图片打开之前除“文件”、“帮助”菜单的visible属性为“on”,即可见外其它均为“off”。打开图片该系统的打开图片程序OpenImage.m设计思路如下:1.首先要选择一个*.jpg、*.bmp、*.gif或*.png图片,这要用到uigetfile。该函数会打开当前目录让用户选择要打开的文件;2.在选择了要打开的图片之后,要判断所选择的图片是否为灰度图片,使用灰度图片判断函数Isgray;如果所选择的图片不是灰度图片,提示选择图片的错误信息;如果是则打开图片进入主界面,并显示被处理图片;3.当进入了主界面后,要将原本不可见的菜单项,即代数运算、几何运算、正交变换、图像增强、图像描述、边缘检测的visible属性由“off”改为“on”;图像代数运算(1)图像求补函数imcomplement语法格式:Y=imcomplement(X)说明:该函数适用于何种图像格式,如果是二进制图像,那么函数将对图像的每一位求补;如果是RGB格式图像,函数将会用像素的最大值将去图像的原始值,得到输出图像相应位置的值。(2)图像叠加函数imadd语法格式Y=imadd (X)说明:imadd函数用于产生两张图像的叠加效果,其中X,Y是类型相同的数组。imadd函数还可以通过指定常数参数增强一张图像的亮度。在本系统中就采用了此方法,指定常数参数增强灰度图像的亮度。(3)图像线性组合函数imlincomb语法格式:Y=imlincomb(K1,A1,K2,A2,Kn,An)Y=imlincomb(K1,A1,K2,A2,Kn,An,K)Y=imlincomb(,output_class)说明:其中所有的Ki为实数类型双精度浮点标量值,Ai为同类型的数组,而K为实数类双精度常数,这个函数还可以以字符串的形式指定输出类型。在本系统中使用了imlincomb函数对图形进行符合下列公式的线性组合操作:Z(r,c)=X(r,c)-Y(r,c)+128.(4)图像其他代数运算函数 图像的乘法、除法、减法运算类似于叠加运算。乘法函数immultiply用于对两张图像进行掩膜操作,即屏蔽掉图像的某些部分。使用乘法函数时需指定缩放参数,如果大于1则增强图像亮度,反之则减弱图像亮度。除法函数imdivide通常用于校正成像设备的非线性误差,也可以用于检测两张图像之间的差别,它给出的是相应像素值的变化比率,而不是每个像素值的绝对差异。减法函数imsubtract通常用于检测图像变化以及运动物体的图像处理。图像几何运算(1)改变图像大小函数imresize语法格式:Y=imresize(X,M,Method) 说明:其中X表示需要进行操作的图像,M是放大的倍数,一般来说M是大于0的实数,如果M大于1表示放大图像,小于1则表示缩小图像。Method参数用来选择使用何种插值方法,其值及其含义如下:nearest最近邻插值法、bilinear双线性插值法、bicubic双三次插值法,默认为nearest。imresize还可以指定图像输出大小,即传递一个向量参数给imresize函数,其中参数的两个分量分别指定输出图像的行数和列数。如要将原图像X输出为200480的图像,命令为:Y=imresize(X,200 480)。在本系统中采用了后一种方法,并使用了随机产生函数,使得图像改变大小随机性。(2)图像水平镜像fliplr、垂直镜像flipud、转置ctranspose语法格式:Y=fliplr(X) Y=flipud(X) Y=ctranspose (X)说明:水平镜像函数fliplr是将图像沿垂直轴翻转矩阵,即将矩阵左右方向翻转。垂直镜像函数flipud是将图像沿水平轴翻转矩阵,即将矩阵水平方向翻转。图像转置可以使用函数ctranspose ,也可以直接使用矩阵转置Y=X。(3)图像旋转函数imrotate语法格式:Y=imresize(X,angle,method) Y=imresize(X,angle,method,crop)说明:其中X表示原图像,angle表示旋转的角度,这个角度是以逆时针方向计算的,负值表示顺时针方向旋转。method参数与前面imresize中的参数意义相同。而crop参数表示将旋转以后的图像取与原图像大小的中心部分输出。本系统中采用了后一种方法,旋转以后的图像取与原图像大小的中心部分输出,并使用了随机产生函数,使得旋转角度随机性。(4)图像裁剪函数imcrop语法格式:Y=imcrop(X,rect)Y=imcrop(X,map,rect)说明:如果不指定原图像,imcrop函数将当前坐标轴中的图像作为待裁剪图像,map参数表示原图像为索引图像时的调色板。rect参数定义图像裁剪区域的矩形坐标,如果不指定坐标,则可以在原图像中使用拖放的方式来手动选择一个矩形区域。本系统采用指定裁剪区域矩形坐标的方法。正交变换(1)离散傅里叶变换函数在Matlab的图像处理工具箱中提供的进行傅里叶变换的函数有fft2、fftn、fftshift、ifft2、ifftn。下面我们重点介绍本系统中所采用的fft2和fftshift。函数fft2功能:用于计算二维快速傅里叶变换。语法格式:Y=fft2(X) Y=fft2(X,m,n)说明:X是输入图像矩阵,Y是返回图像矩阵X的二维傅里叶变换,X和Y大小相同。在Y=fft2(X,m,n)中,按照m,n指定的值对图像进行剪切或零补后进行傅里叶变换,返回矩阵大小为mn。函数fftshift功能:将傅里叶变换后的图象频谱中心从矩阵的原点移动到矩阵的中心。语法格式:Y=f fftshift(X) Y= fftshift(X,dim)说明:fftshift用来调整fft、fft2、fftn的输出结果。对于向量X,将其左右两半交换维值;对于矩阵X,将其一、三象限和二、四象限进行交换;对于高维向量,将矩阵各维的两半进行交换。(2)离散余弦变换函数dct2功能:实现图像的二维离散余弦变换。语法格式:Y=dct2 (X) Y=dct2 (X,m n) Y=dct2 (X,m,n)说明:X是要变换的图像矩阵,Y是变换后的图像矩阵,X和Y大小相同,并且包含了余弦变换后的系数。M、n是可选参数,表示对图像矩阵X的填充或截取,即剪切或零补。(3) Radon变换函数radon语法格式:R,xp=radon(X,theta,N)说明:其中X表示要变换的图像,R表示各行返回角度参数theta中各方向上的Radon变换值;xp向量表示沿x轴相应的坐标值;N是可选参数,指定Radon变换将在N点上进行,如果指定了N,那么R将包含N个行向量。默认条件下N由下式决定:2*ceil(norm(size(X)-floor(size(X)-1)/2-1)+3。图像增强(1)空域变换增强直接灰度调整本系统中主要通过对比度扩展来增强图像,Matlab工具箱中提供了imadjust函数来实现图像的灰度级变换。语法格式:Y=imadjust(X,low_in high_in, low_out high_out,gamma)newmap=imadjust(map,low high, bottom top,gamma)说明:X是输入图像矩阵,Y是经过直方图变换后的输出图像矩阵,low_in和high_in参数分别用来指定输入图像需要映像的灰度范围, low_out和high_out参数分别用来指定输出图像需要映像的灰度范围;newmap=imadjust(map,low high, bottom top,gamma)调整索引图像的调色板map。gamma是一个可选参数,通过调整gamma参数可以将线性的映像变为非线性的映像。直方图处理a直方图均衡化函数histeq语法格式:Y= histeq(X,hgram)Y= histeq(X,n)Y,T = histeq(X,.) newmap = histeq(X,map,hgram) newmap = histeq(X,map) newmap,T = histeq(X,.)说明:指定直方图均衡后的灰度级数n,默认值为64。Y = histeq(X,hgram)将原始图像X的直方图变成用户指定的向量hgram。hgram中的各元素的值域为0,1。Y,T = histeq(X,.)返回从图像X的灰度直方图变换成图像Y的直方图变换T。newmap = histeq(X,map)用来对索引图像进行处理,索引图像的返回值newmap将是输出图像的调色板。b直方图规定化histeq 在Matlab中可以调用函数Y= histeq(X,hgram)来实现直方图规定化。其中hgram是用户指定的向量,规定将原始图像X的直方图近似变换成hgram,hgram中的各元素的值域为0,1。(2)空域滤波增强平滑滤波a均值滤波函数fspecialMatlab提供了函数fspecial来生成滤波时所用的模板,并提供filter2函数用指定的滤波器模板对图像进行运算。语法格式:h=fspecial(type,parameters)说明:参数type指定滤波器的种类,parameters是与滤波器种类有关的具体参数,这两个参数的种类及其含义见表2.2:表2.2 Matlab中预定义的滤波器种类typeParameters说明averagehsize均值滤波,如果邻域为方阵,则hsize为标量,否则有两元素向量hsize指定领域的行数和列数diskradius有(radius*2+1)个边的圆形均值滤波器gaussianhsize,sigma标准偏差为sigma,大小为hsize的高斯低通滤波器laplacianalpha系数由alpha(0.01.0)决定的二维拉普拉斯操作loghsize,sigma标准偏差为sigma,大小为hsize的高斯旋转对称拉氏算子motionlen,thete按角度thete移动len个像素的运动滤波器prewitt无近似计算垂直梯度的水平边缘强调算子soble无近似计算垂直梯度的光滑效应的水平边缘强调算子unsharpalpha根据alpha决定的拉氏算子创建的模块滤波器b中值滤波函数 medfilt2语法格式:Y= medfilt2(X,m n) Y= medfilt2(X)说明:X是输入图像;Y是中值滤波后输出的图像;m n指定滤波模板的大小,默认模板是3*3的。本系统使用的是5*5的模板。锐化滤波函数fspecial如前均值滤波所述,本系统采用该函数选择type参数分别为Laplacian 、Unsharp、Sobel、Prewitt、LOG对图像进行了锐化滤波。(3)频域增强低通滤波函数常用的频率低通滤波器有理想圆形低通滤波器(Ideal Circular LowPass Filter,ICLPF)、巴特沃斯低通滤波器(Butterworth LowPass Filter,BLPF)、指数低通滤波器(Exponential LowPass Filter,ELPF)。在该系统中采用巴特沃斯低通滤波器,计算ButterWorth低通变换的函数为d=sqrt(i-n1)2+(j-n2)2。高通滤波函数常用的频率高通滤波器有理想高通滤波器(Ideal HighPass Filter,IHPF)、巴特沃斯高通滤波器(Butterworth HighPass Filter,BHPF)、指数高通滤波器(Exponential HighPass Filter,EHPF)、梯形高通滤波器( Trapezoida HighPass Filter,THPF)。在该系统中同样采用巴特沃斯高通滤波器,计算ButterWorth高通变换的函数为d=sqrt(i-n1)2+(j-n2)2。图像描述(1)图像开启、闭合、细化、抽取骨架利用Matlab图像处理工具箱中的bwmorph函数来进行图像的开启、闭合、细化、抽取骨架等运算。下面介绍该函数的用法:语法格式:Y=bwmorph(X,operatiom) Y=bwmorph(X,operatiom,n) 说明:Y=bwmorph(X,operatiom)对图像X作operation指定的形态学运算;Y=bwmorph(X,operatiom,n)对图像X作n次operation指定的形态学运算n可以取Inf,在这种情况下,操作将持续到图像不再变化为止。Operation指定的形态学运算有很多种,在本系统中用到的参数类型和功能表如表2.3所示:表2.3 operation参数operation参数功能open开启运算(先腐蚀,然后膨胀)close进行二值闭运算(先膨胀,在扩张)thinn=Inf,将对象细化成为线。如果是无孔的对象,则缩小成最小连接的一笔;如果是有孔的对象,则缩小成外层边缘,而在每个孔间缩成相连的环skel抽取骨架运算,n=Inf,消除对象边缘上的点,但不导致图像分裂,这样得到图像的骨架erode用结构元素ones(3)作腐蚀运算dilate用结构元素ones(3)作膨胀运算(2)图像腐蚀函数imerode语法格式:Y=imerode(X,SE) Y=imerode(X,NHOOD)Y=imerode(X,SE,PACKOPT,M)Y=imerode(,PADOPT) 说明:X是输入图像,Y是腐蚀运算后输出图像,SE是结构元素对象,SE可以是一个定义结构元素邻域的二进制矩阵或是由strel函数返回的对象;PADOPT、PACKOPT、和M是可选参数,PADOPT参数用来影响输出图像的大小;PACKOPT参数用来说明输入图像是否为打包的二进制图像,如果图像是打包的二进制图像,那么M将指定原始图像的行数。(3)图像膨胀函数imdilate 该函数的语法格式及使用方法完全类同图像腐蚀函数imerode,在此不做详细介绍。另外,图像的腐蚀、膨胀运算也可以使用bwmorph函数,将operation参数指定为erode(腐蚀)、dilate(膨胀)。边缘检测常用的边缘检测算子有微分算子、log算子和canny算子,现在经常使用的微分算子有roberts算子、sobel算子和prewitt算子。在Matlab图像处理工具箱中,提供了edge函数利用以上算子来检测灰度图像的边缘。下面介绍该函数的用法:语法格式:Y=edge(X,method) Y=edge(X,method,thresh) Y=edge(X,method,thresh,direction)说明:X是输入图像。Y是返回的二进制图像。method是使用算子类型,默认为sobel,表示用导数的sobel近似值检测边缘,那些梯度最大点返回边缘;为prewitt时表示用导数的prewitt近似值检测边缘,那些梯度最大点返回边缘;为 roberts时表示用导数的roberts近似值检测边缘,那些梯度最大点返回边缘;为log时表示使用高斯滤波器的拉普拉斯运算对X进行滤波,通过寻找0相交检测边缘;为canny时表示用拉普拉斯算子检测边缘。Thresh是指定的阀值,所有不强于thresh的边都被忽略。direction是对于sobel、prewitt方法指定方向,direction字符串,当为“horizontal”表示水平方向,为“vertical”表示垂直方向,默认为“both”表示两个方向。第三章 系统调试3.1系统各功能模块演示选择并打开图像运行主界面程序photo.m,选择“文件打开”会出现如图3.1所示的图片打开窗口。图3.1 图片打开界面本系统只支持灰度图像,所以在选择要处理的图像时必须要选择灰度图像,否则会提示错误。如下图3.2所示:图3.2 打开图片时的错误提示图像代数运算调试选择灰度图片hd1.jpg作求补运算调试结果如图3.3所示:图3.3 图像求补图像几何运算调试选择灰度图片hd2.jpg作垂直镜像调试结果如图3.4所示:图3.4 图像垂直镜像图像正交变换选择灰度图片hd3.jpg 作Radon变换调试结果如图3.5所示:图3.5 Radon变换图像增强选择灰度图片hd4.jpg在空域变换增强、空域滤波增强、频率增强调试中进行如下几个功能的调试:(1) hd4.jpg直方图规定化调试,结果如图3.6所示:图3.6 直方图规定化(2) hd4.jpg中值滤波调试,结果如图3.7所示:图3.7 中值滤波(3) hd4.jpg Sobel算子实现锐化滤波调试,结果如图3.8所示:图3.8 Sobel算子实现锐化滤波(4) hd4.jpg ButterWorth低通滤波调试,结果如图3.9所示: 图3.9 ButterWorth低通滤波图像描述在该模块中选择了灰度图片hd5.jpg进行膨胀运算调试,调试结果如图3.10所示:图3.10 膨胀运算边缘检测在该模块中选择了灰度图片hd6.jpg进行Sobel算子边缘检测运算调试,调试结果如图3.11所示:图3.11 Sobel算子边缘检测3.2调试结果及系统存在的问题调试结果通过对该系统的调试,系统利用Matlab对灰度图像进行的六大处理代数运算、几何运算、正交变换、图像增强、图像形态学描述、边缘检测,基本上纳含了对图像的一些基本处理。其中在几何运算中的改变图像大小、图象旋转采用了随机产生函数rand使得输出图像随机性;图像增强功能模块中包含了三种图像增强方法空域变换增强、空域滤波增强和频域增强。而在锐化滤波中也涉及到了常用的几种算子:Unsharp算子、Sobel算子、Prewitt算子、LOG算子,内容涉及全面。另外,在代数运算中没有使用传统的矩阵代数运算方法,而直接调用Matlab提供的图像处理函数,显得简练。
展开阅读全文