数学形态学及其应用省名师优质课赛课获奖课件市赛课一等奖课件_第1页
数学形态学及其应用省名师优质课赛课获奖课件市赛课一等奖课件_第2页
数学形态学及其应用省名师优质课赛课获奖课件市赛课一等奖课件_第3页
数学形态学及其应用省名师优质课赛课获奖课件市赛课一等奖课件_第4页
数学形态学及其应用省名师优质课赛课获奖课件市赛课一等奖课件_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章数学形态学及其应用8.1引言8.2二值形态学8.3灰值形态学8.4形态学应用8.5应用实例——细化第1页8.1引言8.1.1数学形态学数学形态学(MathematicalMorphology)诞生于1964年,是由法国巴黎矿业学院博士生赛拉(J.Serra)和导师马瑟荣,在从事铁矿核定量岩石学分析及预测其开采价值研究中提出“击中/击不中变换”,并在理论层面上第一次引入了形态学表示式,建立了颗粒分析方法。他们工作奠定了这门学科理论基础,如击中/击不中变换、开闭运算、布尔模型及纹理分析器原型等。数学形态学基本思想是用含有一定形态结构元素去量度和提取图像中对应形状以到达对图像分析和识别目标。第2页数学形态学数学基础和所用语言是集合论,所以它含有完备数学基础,这为形态学用于图像分析和处理、形态滤波器特征分析和系统设计奠定了坚实基础。数学形态学应用能够简化图像数据,保持它们基本形状特征,并除去不相干结构。数学形态学算法含有天然并行实现结构,实现了形态学分析和处理算法并行,大大提升了图像分析和处理速度。第3页数学形态学是由一组形态学代数运算子组成,它基本运算有4个:膨胀(或扩张)、腐蚀(或侵蚀)、开启和闭合,它们在二值图像和灰度图像中各有特点。基于这些基本运算还可推导和组合成各种数学形态学实用算法,用它们能够进行图像形状和结构分析及处理,包含图像分割、特征抽取、边界检测、图像滤波、图像增强和恢复等。数学形态学方法利用一个称作结构元素“探针”搜集图像信息,当探针在图像中不停移动时,便可考查图像各个部分之间相互关系,从而了解图像结构特征。数学形态学基于探测思想,与人FOA(FocusOfAttention)视觉特点有类似之处。作为探针结构元素,可直接携带知识(形态、大小、甚至加入灰度和色度信息)来探测、研究图像结构特点。第4页数学形态学基本思想及方法适合用于与图像处理相关各个方面,如基于击中/击不中变换目标识别,基于流域概念图像分割,基于腐蚀和开运算骨架抽取及图像编码压缩,基于测地距离图像重建,基于形态学滤波器颗粒分析等。迄今为止,还没有一个方法能像数学形态学那样现有坚实理论基础,简练、朴素、统一基本思想,又有如此广泛实用价值。有些人称数学形态学在理论上是严谨,在基本观念上却是简单和优美。第5页数学形态学是一门建立在严格数学理论基础上学科,其基本思想和方法对图像处理理论和技术产生了重大影响。实际上,数学形态学已经组成一个新图像处理方法和理论,成为计算机数字图像处理一个主要研究领域,而且已经应用在多门学科数字图像分析和处理过程中。这门学科在计算机文字识别,计算机显微图像分析(如定量金相分析,颗粒分析),医学图像处理(比如细胞检测、心脏运动过程研究、脊椎骨癌图像自动数量描述),图像编码压缩,工业检测(如食品检验和印刷电路自动检测),材料科学,机器人视觉,汽车运动情况监测等方面都取得了非常成功应用。另外,数学形态学在指纹检测、经济地理、合成音乐和断层X光照像等领域也有良好应用前景。形态学方法已成为图像应用领域工程技术人员必备工具。当前,相关数学形态学技术和应用正在不停地研究和发展。第6页8.1.2基本符号和术语

1.元素和集合

在数字图像处理数学形态学运算中,把一幅图像称为一个集合。对于二值图像而言,习惯上认为取值为1点对应于景物中心,用阴影表示,而取值为0点组成背景,用白色表示,这类图像集合是直接表示。考虑全部值为1点集合为A,则A与图像是一一对应。对于一幅图像A,假如点a在A区域以内,那么就说a是A元素,记为a∈A,不然,记作a∈A,如图81(a)所表示。第7页图8-1元素与集合间关系第8页

2.交集、并集和补集

两个图像集合A和B公共点组成集合称为两个集合交集,记为A∩B,即A∩B={a|a∈A且a∈B}。两个集合A和B全部元素组成集合称为两个集合并集,记为A∪B,即A∪B={a|a∈A或a∈B}。对一幅图像A,在图像A区域以外全部点组成集合称为A补集,记为AC,即AC={a|a∈A}。交集、并集和补集运算是集合最基本运算,如图8-2所表示。第9页图8-2集合交集、并集和补集第10页

3.击中(Hit)与击不中(Miss)

设有两幅图像A和B,假如A∩B≠,那么称B击中A,记为B↑A,其中是空集合符号;不然,假如A∩B=,那么称B击不中A,如图8-3所表示。图8-3击中与击不中(a)B击中A;(b)B击不中A

第11页

4.平移和反射

设A是一幅数字图像(见图8-4(a)),b是一个点(见图8-4(b)),那么定义A被b平移后结果为A+b={a+b|a∈A},即取出A中每个点a坐标值,将其与点b坐标值相加,得到一个新点坐标值a+b,全部这些新点所组成图像就是A被b平移结果,记为A+b,如图8-4(c)所表示。第12页图8-4平移与反射第13页

5.目标和结构元素

被处理图像称为目标图像,普通用大写英文字母表示。为了确定目标图像结构,必须逐一考查图像各部分之间关系,而且进行检验,最终得到一个各部分之间关系集合。在考查目标图像各部分之间关系时,需要设计一个搜集信息“探针”,称为“结构元素”。“结构元素”普通用大写英文字母表示,比如用S表示。在图像中不停移动结构元素,就能够考查图像之间各部分关系。普通,结构元素尺寸要显著小于目标图像尺寸。第14页8.2二值形态学二值形态学中运算对象是集合。设A为图像集合,S为结构元素,数学形态学运算是用S对A进行操作。需要指出,实际上结构元素本身也是一个图像集合。对每个结构元素能够指定一个原点,它是结构元素参加形态学运算参考点。应注意,原点能够包含在结构元素中,也能够不包含在结构元素中,但运算结果常不相同。以下用阴影代表值为1区域,白色代表值为0区域,运算是对值为1区域进行。二值形态学中两个最基本运算——腐蚀与膨胀,如图8-5所表示。第15页图8-5腐蚀与膨胀示意图第16页8.2.1腐蚀

腐蚀是最基本一个数学形态学运算。对一个给定目标图像X和一个结构元素S,想象一下将S在图像上移动。在每一个当前位置x,S+x只有三种可能状态(见图8-6):(1)S+x

X;(2)S+x

XC;(3)S+x∩X与S+x∩XC均不为空。第17页图8-6S+x三种可能状态第18页第一个情形说明S+x与X相关最大,第二种情形说明S+x与X不相关,而第三种情形说明S+x与X只是部分相关。因而满足式(8-1)点x全体组成结构元素与图像最大相关点集,这个点集称为S对X腐蚀(简称腐蚀,有时也称X用S腐蚀),记为X

S。腐蚀也能够用集合方式定义,即

式(8-2)表明,X用S腐蚀结果是全部使S平移x后仍在X中x集合。换句话说,用S来腐蚀X得到集合是S完全包含在X中时S原点位置集合。上式也能够帮助我们借助相关概念来了解腐蚀操作。(8-2)第19页式(8-2)表明,X用S腐蚀结果是全部使S平移x后仍在X中x集合。换句话说,用S来腐蚀X得到集合是S完全包含在X中时S原点位置集合。上式也能够帮助我们借助相关概念来了解腐蚀操作。腐蚀在数学形态学运算中作用是消除物体边界点。假如结构元素取3×3像素块,腐蚀将使物体边界沿周围降低一个像素。腐蚀能够把小于结构元素物体(毛刺、小凸起)去除,这么选取不一样大小结构元素,就能够在原图像中去掉不一样大小物体。假如两个物体之间有细小连通,那么当结构元素足够大时,经过腐蚀运算能够将两个物体分开。第20页

例8-1腐蚀运算图解。图8-7给出腐蚀运算一个简单示例。其中,图8-7(a)中阴影部分为集合X,图8-7(b)中阴影部分为结构元素S,而图(c)中黑色部分给出了XS结果。由图可见,腐蚀将图像(区域)收缩小了。图8-7腐蚀运算示例第21页(8-3)假如S包含了原点,即O∈S,那么XS将是X一个收缩,即XSX(当O∈S时);假如S不包含原点,那么XSX未必成立。假如结构元素S关于原点O是对称,那么S=SV,所以XS=XSV,不过,假如S关于原点O不是对称,那么X被S腐蚀结果与X被SV腐蚀结果是不一样。利用腐蚀运算定义式能够直接设计腐蚀变换算法。但有时为了更方便,常使用腐蚀另一个表示式,即第22页式(8-3)可从定义式(8-2)中推出,它把腐蚀表示为图像平移交,这在一些并行处理环境中尤其有用。图8-8给出了一个例子。图8-8腐蚀表示为图像平移交第23页依据上述理论,利用VC++能够编写一个实现腐蚀运算函数MakeErosion()。

//******************************************//函数名称:BOOLMakeErosion()//基本功效:本函数对图像数据执行腐蚀操作//参数说明://int*nMask 结构元素数组指针//intnMaskLen 结构元素长度(以点数为计数单位)//unsignedchar*pOut输出图像数据指针//unsignedchar*pIn输入图像数据指针//intnWidthBytes图像宽度(以字节表示)//intnWidth图像宽度(以像素表示)第24页// intnHeight图像高度(以像素表示)//返回值:BOOL成功返回TRUE,失败返回FALSE//******************************************BOOLCMorphPro::MakeErosion(int*nMask,intnMaskLen, unsignedchar*pOut,unsignedchar*pIn, intnWidthBytes,intnWidth,intnHeight){//若传入图像数据为空,将无法完成操作,直接返回if(pOut==NULL||pIn==NULL)returnFALSE;//定义变量intx,y,k;unsignedcharMark;//执行腐蚀操作第25页for(y=0;y<nHeight;y++){unsignedchar*pOutTemp=pOut;pOutTemp+=y*nWidthBytes;for(x=0;x<nWidth;x++){Mark=1;for(k=0;k<nMaskLen;k++){//不能处理边界像素if((x+nMask[2*k]>=0)&&(x+nMask[2*k]<nWidth)&&(y+nMask[2*k+1]>=0)&&(y+nMask[2*k+1]<nHeight)){第26页 unsignedcharData; //取与模板中位置相对应像素值 unsignedchar*pTemp=pIn; pTemp+=y*nWidthBytes;pTemp+=nMask[2*k+1]*nWidthBytes;Data=pTemp[x+nMask[2*k]];if(Data!=255){Mark=0;k=nMaskLen;}}第27页else{Mark=0;k=nMaskLen;}}if(Mark==1) pOutTemp[x]=255;}}returnTRUE;}第28页函数MakeErosion()是一个保护型函数,在文档类中不能直接调用,CMorphPro类(形态学处理类)提供了一个公有型函数Erosion(),可调用MakeErosion进行腐蚀运算。相关CmorphPro类详细说明请参考配套光盘。Erosion()函数关键代码以下://**************************************//函数名称:BOOLErosion()//基本功效:本函数对CDibObject对象中图像进行腐蚀运算//参数说明:int*nMask结构元素数组指针// intnMaskLen结构元素长度(以点数为计数单位)//CDibObject*pDibObject输出图像数据指针//返回值:BOOL成功返回TRUE,失败返回FALSE第29页//**************************************BOOLCMorphPro::Erosion(int*nMask,intnMaskLen,CDibObject*pDibObject){//使用传入CDibObject对象//无CDibObject对象时,返回FALSE//取得图像宽度和高度及字节宽度intnWidth=m_pDibObject->GetWidth();intnHeight=m_pDibObject->GetHeight();intnWidthBytes=m_pDibObject->WidthBytes(8,nWidth);//图像数据区大小DWORDdwSize=nWidthBytes*nHeight;//取得图像数据区指针unsignedchar*pOldBuffer=GetBitsPoint();第30页//为新图像分配内存//新图像数据指针unsignedchar*pNewBuffer=(unsignedchar*)::GlobalLock(hNewDib);//将原图像数据移动到新图像中(原图像数据清零)MoveBuffer(pNewBuffer,pOldBuffer,(LONG)dwSize);//调用MakeErosion()保护型函数进行腐蚀操作MakeErosion(nMask,nMaskLen,pOldBuffer,pNewBuffer,nWidthBytes,nWidth,nHeight);//将内存解锁以及将不再使用内存释放return(TRUE);}第31页图8-9用3×3结构元素进行腐蚀(a)原始二值图像;(b)3×3结构元素;(c)腐蚀结果(a)(b)(c)第32页8.2.2膨胀

腐蚀能够看作是将图像X中每一与结构元素S全等子集S+x收缩为点x。反之,也能够将X中每一个点x扩大为S+x,这就是膨胀运算,记为X

S。若用集合语言,它定义为XS={x|S+x∪x≠}与式(8-4)等价膨胀运算定义形式还有:(1)XS=∩{X+s|s∈S} (8-5)(2)XS=∩{S+x|x∈X} (8-6)(8-4)第33页式(8-4)和式(8-5)在算法设计中更有用些,而式(8-6)便于刻画算法几何特征。从式(8-4)可知,腐蚀和膨胀运算对集合运算分配律只有在特定情况下才能成立,所以在应用时应注意。另外,用腐蚀和膨胀运算还能够实现图像平移。假如在自定义结构元素时选择不在原点一个点作为结构元素,则得到图像形状没有任何改变,只是位置发生了移动。仿照MakeErosion()函数,能够编写一个MakeDilation()函数进行膨胀运算,与腐蚀类似,由Dilation()调用MakeDilation()函数来实现膨胀运算。第34页8.2.3开、闭运算1.基本概念假如结构元素为一个圆盘,那么,膨胀可填充图像中小孔(比结构元素小孔洞)及图像边缘处小凹陷部分,而腐蚀能够消除图像边缘小成份,并将图像缩小,从而使其补集扩大。不过,膨胀和腐蚀并不互为逆运算,所以它们能够级连结合使用。在腐蚀和膨胀两个基本运算基础上,能够结构出形态学运算族,它由膨胀和腐蚀两个运算复合与集合操作(并、交、补等)组合成全部运算组成。比如,可先对图像进行腐蚀然后膨胀其结果,或先对图像进行膨胀然后腐蚀其结果(这里使用同一个结构元素)。前一个运算称为开运算(或开启),后一个运算称为闭运算(闭合)。开运算和闭运算是形态学运算族中两个最为主要组合运算。第35页对图像X及结构元素S,用符号X○S表示S对图像X作开运算,用符号X●S表示S对图像X作闭运算,它们定义为X○S=(X

S)S

X●S=(X

S)S

由式(8-7)和式(8-8)可知,X○S可视为对腐蚀图像X

S用膨胀来进行恢复,而X●S可看作是对膨胀图像X

S用腐蚀来进行恢复。不过这一恢复不是信息无损,即它们通常不等于原始图像X。由开运算定义式,能够推得(8-7)(8-8)(8-9)第36页因而X○S是全部X与结构元素S全等子集并组成。或者说,对X○S中每一个点x,均可找到某个包含在X中结构元S平移S+y,使得x∈S+y,即x在X近旁含有大于S几何结构。而对于X中不能被X○S恢复点,其近旁几何结构总比S要小。这一几何描述说明,X○S是一个基于几何结构滤波器。图8-10给出了两个开运算例子,其中图8-10(a)是结构元素S1和S2,图8-10(b)是用S1对X进行开运算结果,图8-10(c)是用S2对X进行开运算结果。当使用圆盘结构元素时,开运算对边界进行了平滑,去掉了凸角;当使用线段结构元素时,沿线段方向宽度较大部分才能够被保留下来,而较小凸部将被剔除。而X-X○S给出是图像凸出特征。可见,不一样结构元素选择造成了不一样分割,即提取出不一样特征。第37页图8-10开运算去掉了凸角(a)结构元素S1和S2;(b)X○S1;(c)X○S2

第38页开启和闭合不受原点是否在结构元素之中影响。由腐蚀和膨胀对偶性,可知 (XC○S)C=X●S; (XC●S)C=X○S (8-10)开、闭变换也是一对对偶变换,所以,闭运算几何意义能够由补集开运算几何意义导出。图8-11给出了两个闭运算例子,其中,图8-11(a)是结构元素S1和S2,图8-11(b)是用S1对X进行闭运算结果,图8-11(c)是用S2对X进行闭运算结果。可见,闭运算经过填充图像凹角来平滑图像,而X●S-X给出是图像凹入特征。第39页图8-11闭运算填充了凹角(a)结构元素S1和S2;(b)X●S1;(c)X●S2第40页图8-12开、闭运算示例(a)原图像;(b)结构元素S;(c)结构元素S腐蚀图像X;(d)结构元素S腐蚀X结果;(e)对腐蚀结构再膨胀;(f)再膨胀(开运算)结果X○S;(g)结构元素S膨胀X;(h)结构元素S膨胀X结果XS;(i)对膨胀结果再腐蚀;(j)再腐蚀结果(闭运算)X●S第41页

2.开闭运算代数性质因为开、闭运算是在腐蚀和膨胀运算基础上定义,依据腐蚀和膨胀运算代数性质,我们不难得到下面性质。 1)对偶性(XC○S)C=X●S,(XC●S)C=X○S

2)扩展性(收缩性)X○S

XX●S

即开运算恒使原图像缩小,而闭运算恒使原图像扩大第42页3)单调性假如XY,则X●S

Y●S,X○S

Y○S

假如Y

Z且Z●Y=Z,那么X●Y

X●Z

根椐这一性质能够知道,结构元素扩大只有在确保扩大后结构元素对原结构元素开运算不变条件下方能保持单调性。第43页4)平移不变性(X+h)●S=(X●S)+h,(X+h)○S=(X○S)+h

X●(S+h)=X●S,X○(S+h)=X○S5)等幂性(X●S)●S=X●S,(X○S)○S=X○S

开、闭运算等幂性意味着一次滤波就能把全部特定结构元素噪声滤除洁净,作重复运算不会再有效果。这是一个与经典方法(比如中值滤波、线性卷积)不一样性质。第44页6)开、闭运算与集合关系●●●●●在操作对象为多个图像情况下,可借助集合性质来进行开、闭运算,上述开、闭运算与集合关系可用语言描述以下:(1)开运算与并集:并集开运算包含了开运算并集;(2)开运算与交集:交集开运算包含在开运算交集中;(3)闭运算与并集:并集闭运算包含了闭运算并集;(4)闭运算与交集:交集闭运算包含在闭运算交集中。第45页

3.开运算实现

依据上述理论,利用VC++能够编写一个实现开运算函数Opening()。开运算相当于对图像先进行腐蚀运算再进行膨胀运算。//*****************************************//函数名称:BOOLOpening()//基本功效:本函数对CDibObject对象中图像进行开运算//参数说明:int*nMask结构元素数组指针//intnMaskLen结构元素长度(以点数为计数单位)//CDibObject*pDibObject输出图像数据指针//返回值:BOOL成功返回TRUE,失败返回FALSE第46页//*****************************************BOOLCMorphPro::Opening(int*nMask,intnMaskLen, CDibObject*pDibObject){//对传入CDibObject对象进行腐蚀if(Erosion(nMask,nMaskLen,pDibObject)!=TRUE)return(FALSE);//对传入CDibObject对象进行膨胀if(Dilation(nMask,nMaskLen,pDibObject)!=TRUE)return(FALSE);return(TRUE);}第47页图8-13开、闭运算效果示意图(a)原始图像;(b)开运算结果;(c)闭运算结果

  (a)(b)(c)第48页

4.闭运算实现

一样,依据上述理论,利用VC++能够编写一个实现闭运算函数Closing()。闭运算相当于对图像先进行膨胀运算再进行腐蚀运算。//******************************************//函数名称:BOOLClosing()//基本功效:本函数对CDibObject对象中图像进行闭运算//参数说明:int *nMask结构元素数组指针// int nMaskLen结构元素长度(以点数为计数单位)第49页//CDibObject*pDibObject输出图像数据指针//返回值:BOOL成功返回TRUE,失败返回FALSE//******************************************BOOLCMorphPro::Closing(int*nMask,intnMaskLen, CDibObject*pDibObject){//对传入CDibObject对象进行膨胀if(Dilation(nMask,nMaskLen,pDibObject)!=TRUE)return(FALSE);//对传入CDibObject对象进行腐蚀if(Erosion(nMask,nMaskLen,pDibObject)!=TRUE)return(FALSE);returnTRUE;}第50页8.2.4击中/击不中(Hit/Miss)变换

在8.1.2节中曾经简单地给出了击中与击不中概念,下面讨论击中与击不中严格定义及其在数字图像处理中意义。普通来说,一个物体结构能够由物体内部各种成份之间关系来确定。为了研究物体(在这里指图像)结构,能够逐一地利用其各种成份(比如各种结构元素)对其进行检验,判定哪些成份包含在图像内,哪些在图像外,从而最终确定图像结构。击中/击不中变换就是在这个意义上提出。设X是被研究图像,S是结构元素,而且S由两个不相交部分S1和S2组成,即S=S1∪S2,且S1∩S2=。于是,X被S“击中”(X⊙S)结果定义为(8-11)第51页图8-14X被S击中示意图(a)结构元素S=S1∪S2;(b)图像X;(c)X被S击中X⊙S

第52页击中运算还有另外一个表示形式:式(8-12)表明,X被S击中结果相当于X被S1腐蚀结果与X被S2反射集S2V膨胀结果之差。图8-15解释了这一过程。由此可见,击中运算也能够借助于腐蚀、膨胀两基本运算来实现。第53页8-15第54页下面,深入来讨论击中运算含义。在图8-15中,假如S中不包含S2,那么X⊙S与X⊙S1相同,共包含6个点。这表明X被S腐蚀后还剩6个点,就是说,X中共包含6个形如S1结构元素,它们原点位置组成X⊙S。但将S2加入S后,相当于对X⊙S增加了一个条件:不但要从X中找出那些形如S1部分,而且要去掉那些在左边有一个邻点部分。这么一来,在X中只剩下两部分(方框内)满足要求结构元素,它们原点位置组成了最终X⊙S。第55页由此可见,击中运算相当于一个条件比较严格模板匹配,它不但指出被匹配点所应满足性质即模板形状,同时也指出这些点所不应满足性质,即对周围环境背景要求。击中/击不中变换能够用于保持拓扑结构形状细化,以及形状识别和定位。设有一个模板形状(集合)A,对给定图像X,假定X中有包含A在内多个不一样物体。我们目标是识别和定位其中A物体。此时,取一个比A稍大集合S作为结构元素而且使A不与S边缘相交,令S1=A且S2=S-A,S2为“包围”A或B1外接边框,此时称S1、S2为一个结构元素对,简称结构对,记为(S1,S2),那么X⊙(S1,S2)将给出且仅给出全部X中与A误差在设定范围内物体位置。图8-16描述了一个字符识别示例。第56页图8-16用击中/击不中变换识别字符(a)结构元素S;(b)图像X;(c)X⊙(S1,S2)第57页8.3灰值形态学8.3.1灰值腐蚀

用结构元素b对输入图像f(x,y)进行灰值腐蚀记为f

b,其定义为(f

b)(s,t)=min{f(s+x,t+y)-b(x,y)|s+x,t+y∈Df,x+y∈Db}(8-13)式中,Df和Db分别是f和b定义域。这里限制(s+x)和(t+y)在f定义域之内,类似于二值腐蚀定义中要求结构元素完全包含在被腐蚀集合中。第58页为简单起见,下面用一维函数来简单介绍式(8-13)含义和运算操作机理。用一维函数时,式(8-13)可简化为(fb)(s)=min{f(s+x)-b(x)|s+x∈Df,x+y∈Db}(8-14)如同在相关计算中,对正s,f(s+x)移向右边,对负s,f(s+x)移向左边。要求(s+x)在f定义域内并要求x值在b定义域内,是为了把b完全包含在f平移范围内。第59页图8-17灰值腐蚀示意图(a)图像f;(b)结构元素b;(c)用结构元素b对f腐蚀;(d)用结构元素b对f腐蚀结果第60页图8-18灰值腐蚀与膨胀前后图像(a)原始图像;(b)灰值腐蚀后图像;(c)灰度膨胀后图像第61页腐蚀计算是在由结构元素确定邻域中选取fb最小值,所以,对灰值图像腐蚀操作有两类效果:①假如结构元素值都为正,则输出图像会比输入图像暗;②假如输入图像中亮细节尺寸比结构元素小,则其影响会被减弱,减弱程度取决于这些亮细节周围灰度值和结构元素形状和幅值。第62页8.3.2灰值膨胀用结构元素b对输入图像f(x,y)进行灰值膨胀记为f

b,其定义为(f

b)(s,t)=max{f(s-x,t-y)+b(x,y)|s-x,t-y∈Df,x+y∈Db}(8-15)式中,Df和Db分别是f和b定义域。这里限制(s-x)和(t-y)在f定义域之内,类似于在二值膨胀定义中要求两个运算集合最少有一个(非零)元素相交。式(8-15)与二维离散函数卷积形式很类似,区分是式(8-15)用max(最大)替换了卷积求和,用加法替换了卷积相乘。第63页为简单起见,下面用一维函数来简单介绍式(8-15)含义和运算操作机理。用一维函数时,式(8-15)可简化为(fb)(s)=max{f(s-x)+b(x)|s-x∈Df,x∈Db}(8-16)和卷积相同,f(-x)是对应x轴原点映射。对正s,f(s-x)移向右边,对负s,f(s-x)移向左边。要求(s-x)在f定义域内并要求x值在b定义域内,是为了使f和b交集非空(有相重合部分)。第64页注意,与8.2.2节中介绍二值膨胀时不一样是,在式(8-15)和式(8-16)里是让f而不是让b反转平移。这是因为膨胀含有交换性,而腐蚀不含有交换性。为了让膨胀和腐蚀表示形式相互对应,采取了式(8-15)和式(8-16)表示,但由图8-19中例子能够看出,假如让b反转平移进行膨胀,其结果也完全一样。膨胀计算是在由结构元素确定邻域中选取fb最大值,所以对灰值图像膨胀操作有两类效果:①假如结构元素值都为正,则输出图像会比输入图像亮;②依据输入图像中暗细节灰度值以及它们形状相对于结构元素关系,它们在膨胀中或被消减或被除掉。第65页图8-19灰值膨胀示意图(a)灰度膨胀过程;(b)灰度膨胀结果第66页下面简单介绍膨胀和腐蚀对偶性。膨胀和腐蚀相对于函数补(补函数)和反射也是对偶,对偶关系为(8-17)(8-18)这里函数补定义为fC(x,y)=-f(x,y),而函数反射定义为bV(x,y)=b(-x,-y)。第67页8.3.3灰值开、闭运算数学形态学中关于灰值开和闭运算定义与它们在二值数学形态学中对应运算是一致。用结构元素b(灰值图像)对灰值图像f做开运算记为f○b,其定义为

f○b=(f

b)b (8-19)用结构元素b(灰值图像)对灰值图像f做闭运算记为f●b,其定义为

f●b=(f

b)b (8-20)第68页开、闭运算相对于函数补和反射也是对偶,对偶关系可写为(f○b)C=(fC●bV) (8-21)(f●b)C=(fC○bV) (8-22)因为f(x,y)=-f(x,y),所以式(8-21)和式(8-22)可写为-(f○b)=(-fC●bV) (8-23) -(f●b)=(-f○bV) (8-24)第69页灰值开、闭运算也有简单几何解释,如图8-20所表示。在图(a)中,给出了一幅图像f(x,y)在y为常数时一个剖面f(x),其形状为一连串山峰山谷。假设结构元素b是球状,投影到x和f(x)平面上是个圆。下面分别讨论开、闭运算情况。用b对f做开运算,即f○b,可看作将b贴着f下沿从一端滚到另一端。图8-20(b)给出了b在开运算中几个位置,图8-20(c)给出了开运算操作结果。从图8-20(c)可看出,对全部比b直径小山峰其高度和尖锐度都减弱了。换句话说,当b贴着f下沿滚动时,f中没有与b接触部位都削减到与b接触。实际中惯用开运算操作消除与结构元素相比尺寸较小亮细节,而保持图像整体灰度值和大亮区域基本不受影响。详细地说就是,第一步腐蚀去除了小亮细节并同时减弱了图像亮度,第二步膨胀增加了图像亮度,但又不重新引入前面去除细节。第70页图8-20灰值开、闭运算示意图第71页用b对f做闭运算,即f●b,可看作将b贴着f上沿从一端滚到另一端。图8-20(d)给出了b在闭运算操作中几个位置,图8-20(e)给出了闭运算操作结果。从图8-20(e)可看出,山峰基本没有改变,而全部比b直径小山谷得到了“填充”。换句话说,当b贴着f上沿滚动时,f中没有与b接触部位都得到“填充”,使其与b接触。实际中惯用闭运算操作消除与结构元素相比尺寸较小暗细节,而保持图像整体灰度值和大暗区域基本不受影响。详细说来,第一步膨胀去除了小暗细节并同时增强了图像亮度,第二步腐蚀减弱了图像亮度但又不重新引入前面去除细节。第72页图8-21灰值开闭运算实例(a)开运算结果;(b)闭运算结果第73页利用最大最小值运算也能够把数学形态学运算规则从二值图像推广到灰值图像。为此下面引入集合顶面(Topsurfaceofaset,简写为T)和阴影(Umbraofasurface,简写为U)概念。为了易于表示,先考虑在空间平面xOy上一个区域A,如图8-22所表示。把A向x轴投影,可得xmin和xmax。对属于A每个点(x,y)来说,都有y=f(x)成立。对A来说,它在平面xOy上有一条顶线T(A),也就是A上边缘T(A),它可表示为(8-26)第74页第75页把T(A)向X轴投影得到F。在T(A)与F之间阴影就是U(A),阴影U(A)也包含区域A。以上讨论能够方便地推广到空间Oxyz中去。一个二维灰值图像对应于Oxyz上一个体积V,它有一个顶面T(V),也就是V上曲面。类似于式(8-25),这个顶面能够写为(8-26)第76页依据灰值图像顶面和阴影定义,假如把U(V)以内看成“黑”区,U(V)以外看成“白”区,就能够把二值图像中几个形态学运算符加以引申,用到灰值图像中。如用f表示灰值图像,用b表示灰值结构元素,则将用b对f腐蚀和膨胀分别定义为(8-27)(8-28)按照开、闭运算定义,它们实现能够参考腐蚀与膨胀算法给出,即对于开运算先腐蚀然后再膨胀,对闭运算先膨胀然后再腐蚀。第77页8.4形态学应用8.4.1形态学滤波

因为开、闭运算所处理信息分别与图像凸、凹处相关,所以,它们本身都是单边算子,能够利用开、闭运算去除图像噪声、恢复图像,也可交替使用开、闭运算以到达双边滤波目标。普通,能够将开、闭运算结合起来组成形态学噪声滤波器,比如(X○S)●S或(X●S)○S等。第78页图8-23给出消除噪声一个图例。图8-23(a)包含一个长方形目标X,因为噪声影响在目标内部有一些噪声孔而在目标周围有一些噪声块。现在用图8-23(b)所表示结构元素S经过形态学操作来滤除噪声,这里结构元素应该比全部噪声孔和块都要大。先用S对X进行腐蚀得到图8-23(c),再用S对腐蚀结果进行膨胀得到图8-23(d),这两个操作串行结合就是开运算,它将目标周围噪声块消除掉了。再用S对图8-23(d)进行一次膨胀得到图8-23(e),然后用S对膨胀结果进行腐蚀得到图8-23(f),这两个操作串行结合就是闭运算,它将目标内部噪声孔消除掉了。整个过程是先做开运算再做闭运算,能够写为●(8-29)第79页图8-23形态学滤波示意图第80页比较图8-23(a)和(f),可看出目标区域内外噪声都消除掉了,而目标本身除原来4个直角变为圆角外没有太大改变。在利用开、闭运算滤除图像噪声时,选择圆形结构元素会得到很好结果。为了能使从噪声污染图像X中恢复原始图像X0结果到达最优,在确定结构元素半径时,能够采取优化方法。为了到达这一目标,可将图像和噪声视为随机过程,经过统计优化分析得到优化结果。第81页相同方法也能够应用于灰值图像处理。灰值开运算可用于过滤最大噪声(高亮度噪声),因为被滤掉噪声位于信号上方。假如将图8-20信号上方尖峰视为噪声,那么,灰值开运算后可得到很好滤波效果,如图8-20(c)所表示。依据对偶性,闭运算能够滤掉信号下方噪声尖峰。图8-20(d)给出了利用圆形结构元素进行灰值闭滤波结果。与二值情况相同,能够利用适当结构元素进行开-闭滤波,而且适当地选择结构元素尺寸是非常关键。另外,假如信号中还混杂有不一样尺寸噪声脉冲,而且噪声之间并没有很好地分离,那么,能够选取一个交变序列滤波器,这种滤波器使用逐步增加宽度结构元素交替地做灰值开、闭运算。在普通情况下,噪声往往由信号上下凸起尖峰组成。只要这些噪声是很好分离,就能够利用开运算和闭运算迭代运算或闭运算和开运算迭代运算将其消除。第82页8.4.2骨架抽取把一个平面区域简化成图(Graph)是一个主要结构形状表示法。利用细化技术得到区域细化结构是惯用方法。所以,寻找二值图像细化结构是图像处理一个基本问题。在图像识别或数据压缩时,经常要用到这么细化结构,比如,在识别字符之前,往往要先对字符作细化处理,求出字符细化结构。骨架便是这么一个细化结构,它是目标主要拓扑描述,含有非常广泛应用。第83页下面首先对数字图像细化概念做简明介绍。许多数学形态学算法都依赖于击中/击不中变换。其中数字图像细化,便是一个最常见使用击中/击不中变换形态学算法。对于结构对B=(B1,B2),利用B细化X定义为即XB为X与X

B差集。更普通地,利用结构对序列B1,B2,…,BN迭代地产生输出序列(8-30)(8-31)或者

i=1,2,…,N

(8-32)第84页伴随迭代进行,得到集合也不停细化。假设输入集合是有限(即N为有限),最终将得到一个细化图像。结构正确选择仅受结构元素不相交限制。实际上,每一个Bi(i=1,2,…,N)都能够是相同结构对,即在不停重复迭代细化过程使用同一个结构对。在实际应用中,通常选择一组结构元素对,迭代过程不停在这些结构对中循环,当一个完整循环结束时,如果所得结果不再改变,则终止迭代过程。第85页骨架还能够用中轴表示。构想在t=0时刻,将目标边界各处同时点燃,火前沿以匀速向目标内部蔓延,当前沿相交时火焰熄灭,火焰熄灭点集合就组成了中轴。图8-24(a)是这个过程图示。另外一个定义骨架方法使用了最大圆盘概念:目标X骨架由X内全部最大内切圆盘圆心组成,如图8-24(b)、(c)所表示。最大圆盘不是其它任何完全属于X圆盘子集,而且最少有两点与目标边界轮廓相切。骨架每个点都对应一个对应最大圆盘和半径r。最大圆盘定义骨架与火种方式定义骨架除在一些特殊情况下端点处存在差异外,绝大多数情况下都是一致。第86页图8-24骨架定义第87页按照最大圆盘定义骨架方式,在欧氏二值图像内部任意给定一点,假如以该点为圆心存在一个最大圆盘,其整个盘体都在图像内部,且最少有两点与目标边界相切,则该点便是骨架上点。全部最大圆盘圆心组成了图像骨架(中轴)。对于图像X,普通用S(X)表示其骨架。注意,不一样图像可能有相同骨架。骨架对噪声非常敏感,而且连通集合可能含有不连通骨架(比如两个相切圆盘骨架)。第88页数字骨架能够从形态学角度进行定义。对于k=0,1,2,…,定义骨架子集Sk(X)为图像X内全部最大圆盘kB圆心x组成集合。从骨架定义可知,骨架是全部骨架子集并,即

S(X)=∪{Sk(X)|k=0,1,2,…} (8-33)能够证实骨架子集为Sk(X)=(X

kB)-[(XkB)○B]式中,B为结构元素,(XkB)代表连续k次用B对X腐蚀,即(X

kB)=((…(XB)B)…)B。由此式和式(8-33)可得S(X)=∪{(X

kB)-[(XkB)○B]|k=0,1,2,…}(8-34)第89页这就是骨架形态学表示,它也是用数学形态学方法提取图像骨架技术依据。对于给定图像X以及结构元素B,(X

kB)能够将X腐蚀为空集,假如用N表示(XkB)运算将X腐蚀成空集前最终一次迭代次数,即N=max{k|(XkB)≠},则式(8-34)能够写为(8-35)相反,图像X也能够用Sk(X)重构,即(8-36)第90页式中,B为结构元素,(Sk(X)⊕kB)代表连续k次用B对Sk(X)膨胀,即利用式(8-35)以及图像腐蚀、膨胀算法能够编写程序实现形态学骨架抽取变换,有兴趣读者请参考书后参考文件。图8-25给出了用形态学方法抽取图像骨架一个实例。其中,图8-25(a)为一幅二值图像,图8-25(b)为用3×3结构元素S(原点在中心)得到骨架,图8-25(c)为用5×5结构元素得到骨架,图8-25(d)为用7×7结构元素得到骨架。注意图8-25(c)和(d)中因为模板较大叶柄没有保留下来。第91页图8-25骨架抽取示例(a)一幅二值图像;(b)用3×3结构元素S得到骨架;(c)用5×5结构元素得到骨架;(d)用5×5结构元素得到骨架第92页8.5应用实例——细化利用前面所介绍形态学知识,下面给出一个实用对二值区域进行形态学细化一个算法。如前所述,一个图像“骨架”,是指图像中央骨骼部分,是描述图像几何及拓扑性质主要特征之一。求一幅图像骨架过程就是对图像进行“细化”过程。在文字识别、地质结构识别、工业零件形状识别或图像了解中,先对被处理图像进行细化有利于突出形状特点和降低冗余信息量。第93页依据8.4.2节中骨架和细化定义以及式(8-30)、式(8-32)和式(8-35)等能够看到,在细化一幅图像X时应满足两个条件:第一,在细化过程中,X应该有规律地缩小;第二,在X逐步缩小过程中,应该使X连通性质保持不变。下面介绍一个详细细化算法。设已知目标点标识为1,背景点标识为0。边界点是指本身标识为1而其8连通邻域中最少有一个标识为0点。算法对一幅图像全部边界点即一个3×3区域都进行以下检验和操作:第94页(1)考虑以边界点为中心8邻域,设p1为中心点,对其邻域8个点逆时针绕中心点分别标识为p2,p3,…,p9,其中p2位于p1上方。假如p1=1(即黑点)时,下面4个条件同时满足,则删除p1(p1=0):①2≤N(p1)≤6,其中N(p1)是p1非零邻点个数;②S(p1)=1,其中S(p1)是以p2,p3,p4,…,p9为序时这些点值从0到1改变次数;③p2p4p6=0或者S(p1)≠1;④p4p6p8=0或者S(p1)≠1。第95页(2)同第(1)步,仅将③中条件改为p2p4p8=0,④中条件改为p2p6p8=0。一样当对全部边界点都检验完成后,将全部满足条件点删除。以上两步操作组成一次迭代。算法重复迭代,直至没有点再满足标识删除条件,这时剩下点就组成区域骨架。图8-26给出了这一算法应用示例。其中,图8-26(b)、(c)、(d)是p1不可删除三种情况。在图8-26(b)中删除p1会分割区域,图8-26(c)中删除p1会分割缩短边缘,图8-26(d)中满足条件2≤N(p1)≤6但p1不可删除。第96页图8-26细化算法示意图(a)标识p1和邻点;(b)p1不可删除情况一;(c)p1不可删除情况二;(d)p1不可删除情况三;(e)细化前图像;(f)细化后结果第97页下面是上述细化算法VC++函数框架和主要算法。//******************************************//函数名称:BOOLThiningDIB()//基本功效:本函数对CDibObject对象中图像进行细化运算//参数说明:CDibObject*pDibObject 默认为NULL//返回值:BOOL成功返回TRUE,失败返回FALSE//******************************************BOOLCMorphPro::ThiningDIB(CDibObject*pDibObject){//使用传入CDibObject对象//无CDibObject对象时,返回FALSE//定义变量unsignedchar*pBuffer,*pBits;RGBQUAD*pPalette;第98页intnWidthBytes,nNumColors;intlWidth,lHeight;//取得图像指针//取得颜色数//取得调色板指针//取得位图数据指针//指向源图像指针//指向缓存图像指针//指向缓存DIB图像指针//循环变量longi;longj;intn;intm;第99页//四个条件BOOLbCondition1;BOOLbCondition2;BOOLbCondition3;BOOLbCondition4;//计数器unsignedcharnCount;//像素值unsignedcharpixel;//5×5相邻区域像素值unsignedcharneighbour[5][5];//暂时分配内存,以保留新图像hNewDIBBits=LocalAlloc(LHND,lWidth*lHeight);//锁定内存第100页lpNewDIBBits=(char*)LocalLock(hNewDIBBits);//初始化新分配内存,设定初始值为255lpDst=(char*)lpNewDIBBits;memset(lpDst,(BYTE)255,lWidth*lHeight);bModified=TRUE;while(bModified){bModified=FALSE;//初始化新分配内存,设定初始值为255lpDst=(char*)lpNewDIBBits;memset(lpDst,(BYTE)255,lWidth*lHeight);for(j=2;j<lHeight-2;j++){for(i=2;i<lWidth-2;i++){第101页bCondition1=FALSE;bCondition2=FALSE;bCondition3=FALSE;bCondition4=FALSE;//指向源图像倒数第j行,第i个像素指针lpSrc=(char*)pBits+lWidth*j+i;//指向目标图像倒数第j行,第i个像素指针lpDst=(char*)lpNewDIBBits+lWidth*j+i;//取得当前指针处像素值,注意要转换为unsignedchar型pixel=(unsignedchar)*lpSrc;//目标图像中含有0和255外其它灰度值if(pixel!=255&&*lpSrc!=0)第102页 returnFALSE;continue;//假如源图像中当前点为白色,则跳过elseif(pixel==255)continue;//取得当前点相邻5×5区域内像素值,白色用0代表,黑色用1代表for(m=0;m<5;m++){for(n=0;n<5;n++){neighbour[m][n]=(255-(unsignedchar)*(lpSrc+((4-m)-2)*lWidth\+n-2))/255;}}第103页//逐一判断条件。判断2<=NZ(P1)<=6nCount=[ZK(]neighbour[1][1]+neighbour[1][2]+neighbour[1][3]\+neighbour[2][1]+neighbour[2][3]+\+neighbour[3][1]+neighbour[3][2]+neighbour[3][3];if(nCount>=2&&nCount<=6)bCondition1=TRUE;//判断Z0(P1)=1nCount=0;if(neighbour[1][2]==0&&neighbour[1][1]==1)nCount++;if(neighbour[1][1]==0&&neighbour[2][1]==1)nCount++;第104页if(neighbour[2][1]==0&&neighbour[3][1]==1)nCount++;if(neighbour[3][1]==0&&neighbour[3][2]==1)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论