《《图像平滑》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《图像平滑》PPT课件.ppt(64页珍藏版)》请在三一办公上搜索。
1、第一部分 图像代数数学形态学,一、引言 二、二值形态学 三、形态学的应用 四、应用实例细化,1.引 言,数学形态学(Mathematical Morphology)诞生于1964年,是由法国巴黎矿业学院博士生赛拉(J.Serra)和导师马瑟荣,在从事铁矿核的定量岩石学分析及预测其开采价值的研究中提出“击中/击不中变换”,并在理论层面上第一次引入了形态学的表达式,建立了颗粒分析方法。他们的工作奠定了这门学科的理论基础。数学形态学的基本思想是用具有一定形态的结构元素去量度和提取图像中的对应形状以达到对图像分析和识别的目的。,数学形态学的数学基础和所用语言是集合论,因此它具有完备的数学基础,这为形态
2、学用于图像分析和处理奠定了坚实的基础。数学形态学的应用可以简化图像数据,保持它们基本的形状特性,并除去不相干的结构。数学形态学的算法具有天然的并行实现的结构,实现了形态学分析和处理算法的并行,大大提高了图像分析和处理的速度。,数学形态学的基本运算有4个:膨胀(或扩张)、腐蚀(或侵蚀)、开启和闭合,它们对图像的处理各有特点。基于这些基本运算还可推导和组合成各种数学形态学实用算法,用它们可以进行图像形状和结构的分析及处理,包括图像分割、特征抽取、边界检测、图像滤波、图像增强和恢复等。数学形态学方法利用一个称作结构元素的“探针”收集图像的信息,当探针在图像中不断移动时,便可考察图像各个部分之间的相互
3、关系,从而了解图像的结构特征。,基本符号和术语,1.元素和集合 在数字图像处理的数学形态学运算中,把一幅图像称为一个集合。对于二值图像而言,将整幅图像看作是由目标和背景组成,目标中所有的像素组成集合A,背景中所有像素就是集合A的补集,集合A中元素与目标中像素是一一对应的。对于一幅图像,如果点a在A的区域以内,那么就说a是A的元素,记为aA,否则,记作aA,如下图(a)所示。,3.击中(Hit)与击不中(Miss)设有两幅图像A和B,如果AB,那么称B击中A,记为BA,其中是空集合的符号;否则,如果AB=,那么称B击不中A,如图所示。,图 击中与击不中(a)B击中A;(b)B击不中A,4.平移和
4、反射 设A是一幅数字图像(见图(a)),b是一个点(见图(b)),那么定义A被b平移后的结果为Abab|aA,即取出A中的每个点a的坐标值,将其与点b的坐标值相加,得到一个新的点的坐标值a+b,所有这些新点所构成的图像就是A被b平移的结果,记为A+b,如图(c)所示。,图 平移与反射,5.目标和结构元素 将要被处理的图像称为目标图像,一般用大写英文字母表示。“结构元素”一般也用大写英文字母表示,例如用S表示。在图像中不断移动结构元素,就可以考察图像之间各部分的关系。一般,结构元素的尺寸要明显小于目标图像的尺寸。,2.二值形态学,设A为图像集合,S为结构元素,数学形态学运算是用S对A进行操作。对
5、每个结构元素需要指定一个原点,它是结构元素参与形态学运算的参考点。原点可以包含在结构元素中,也可以不包含在结构元素中,但运算的结果常不相同。二值形态学中两个最基本的运算腐蚀与膨胀,如图所示。,腐蚀与膨胀示意图,1.腐蚀,对一个给定的目标图像X和一个结构元素S,将S在图像上移动。在每一个当前位置x,S+x只有三种可能的状态(见图):(1)S+x X;(2)S+x XC;(3)S+xX与S+xXC均不为空。,S+x的三种可能的状态,第一种情形说明S+x与X相关最大,第二种情形说明S+x与X不相关,而第三种情形说明S+x与X只是部分相关。因而满足式(8-1)的点x的全体构成结构元素与图像最大相关点集
6、,这个点集称为S对X的腐蚀(简称腐蚀,有时也称X用S腐蚀),记为XS。腐蚀也可以用集合的方式定义,即 上式表明,X用S腐蚀的结果是所有使S平移后仍在X中的x的集合。换句话说,用S来腐蚀X得到的集合是S完全包括在X中时S的原点位置的集合。,腐蚀在数学形态学运算中的作用是消除物体边界点。如果结构元素取33的像素块,腐蚀一次将使物体的边界沿周边减少一个像素。腐蚀可以把小于结构元素的物体(毛刺、小凸起)去除,这样选取不同大小的结构元素,就可以在原图像中去掉不同大小的物体。如果两个物体之间有细小的连通,那么当结构元素足够大时,通过腐蚀运算可以将两个物体分开。,例腐蚀运算图解。给出腐蚀运算的一个简单示例。
7、其中,图(a)中的阴影部分为集合X,图(b)中的阴影部分为结构元素S,而图(c)中黑色部分给出了X被S腐蚀 的结果。由图可见,腐蚀将图像(区域)收缩小了。,图 腐蚀运算示例,如果S包含了原点,即OS,那么XS将是X的一个收缩,即XSX(当OS时);如果S不包含原点,那么XSX未必成立。如果结构元素S关于原点O是对称的,那么S=SV,因此 X S=XSV,但是,如果S关于原点O不是对称的,那么X被S腐蚀的结果与X被SV腐蚀的结果是不同的。,2.膨胀 膨胀记为XS。若用集合语言,它的定义为XS=x|S+xx 与上式等价的膨胀运算定义形式还有:(1)XS=X+s|sS(2)XS=S+x|xX 另外,
8、用腐蚀和膨胀运算还可以实现图像的平移。如果在自定义结构元素时选择不在原点的一个点作为结构元素,则得到的图像形状没有任何改变,只是位置发生了移动。,开、闭运算 1.基本概念 一般来讲,膨胀可填充图像中的小孔(比结构元素小的孔洞)及图像边缘处的小凹陷部分;而腐蚀可以消除图像边缘小的成分,并将图像缩小。对二值图像来讲,对目标的腐蚀就是对背景的膨胀,对目标的膨胀就是对背景的腐蚀。但是,膨胀和腐蚀并不互为逆运算,也就是说对图像先腐蚀再膨胀的结果与对图像先膨胀在腐蚀得到的结果是不同的。先对图像进行腐蚀然后再膨胀其结果(使用同一个结构元素)称为开运算(或开启)。先对图像进行膨胀然后腐蚀其结果(使用同一个结构
9、元素)称为闭运算(闭合)。开运算和闭运算是形态学运算族中两个最为重要的组合运算。,对图像X及结构元素S,用符号XS表示S对图像X作开运算,用符号XS表示S对图像X作闭运算,它们的定义为,XS=(XS)S,XS=(XS)S,XS可视为对腐蚀图像XS用膨胀来进行恢复,而XS可看作是对膨胀图像XS用腐蚀来进行恢复。不过这一恢复不是信息无损的,即它们通常不等于原始图像X。,图中给出了两个开运算的例子,其中图(a)是结构元素S1和S2,图中(b)是用S1对X进行开运算的结果,图中(c)是用S2对X进行开运算的结果。当使用圆盘结构元素时,开运算对边界进行了平滑,去掉了凸角;当使用线段结构元素时,沿线段方向
10、宽度较大的部分才能够被保留下来,而较小的凸部将被剔除。而XXS给出的是图像的凸出特征。可见,不同的结构元素的选择导致了不同的分割,即提取出不同的特征。,图 开运算去掉了凸角(a)结构元素S1和S2;(b)XS1;(c)XS2,开启和闭合不受原点是否在结构元素之中的影响。,图给出了两个闭运算的例子,其中,图(a)是结构元素S1 和S2,图(b)是用S1对X进行闭运算的结果,图(c)是用S2对X进行闭运算的结果。可见,闭运算通过填充图像的凹角来平滑图像,而XSX给出的是图像的凹入特征。,击中击不中(Hit/Miss)变换 曾经简单地给出了击中与击不中的概念,下面讨论击中与击不中的严格定义及其在数字
11、图像处理中的意义。一般来说,一个物体的结构可以由物体内部各种成分之间的关系来确定。为了研究物体(在这里指图像)的结构,可以逐个地利用各种成分(例如各种结构元素)对其进行检验,判定哪些成分包括在图像内,哪些在图像外,从而最终确定图像的结构。击中/击不中变换就是在这个意义上提出的。设X是被研究的图像,S是结构元素,而且S由两个不相交的部分S1和S2组成,即S=S1S2,且S1S2=。于是,X被S“击中”(XS)的结果定义为,(8-11),图8-14 X被S击中示意图(a)结构元素S=S1S2;(b)图像X;(c)X被S击中XS,击中运算还有另外一种表达形式:,式(8-12)表明,X被S击中的结果相
12、当于X被S1腐蚀的结果与X被S2的反射集S2V膨胀的结果之差。图8-15解释了这一过程。由此可见,击中运算也可以借助于腐蚀、膨胀两基本运算来实现。,8-15,下面,进一步来讨论击中运算的含义。在图8-15中,如果S中不包含S2,那么XS与XS1相同,共包括6个点。这表明X被S腐蚀后还剩6个点,就是说,X中共包含6个形如S1的结构元素,它们的原点位置构成XS。但将S2加入S后,相当于对XS增加了一个条件:不仅要从X中找出那些形如S1的部分,而且要去掉那些在左边有一个邻点的部分。这样一来,在X中只剩下两部分(方框内)满足要求的结构元素,它们的原点位置构成了最终的XS。,由此可见,击中运算相当于一种
13、条件比较严格的模板匹配,它不仅指出被匹配点所应满足的性质即模板的形状,同时也指出这些点所不应满足的性质,即对周围环境背景的要求。击中/击不中变换可以用于保持拓扑结构的形状细化,以及形状识别和定位。设有一个模板形状(集合)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描述了一个
14、字符识别的示例。,图8-16 用击中/击不中变换识别字符(a)结构元素S;(b)图像X;(c)X(S1,S2),3.形态学的应用,形态学滤波 由于开、闭运算所处理的信息分别与图像的凸、凹处相关,因此,它们本身都是单边算子,可以利用开、闭运算去除图像的噪声、恢复图像,也可交替使用开、闭运算以达到双边滤波目的。一般,可以将开、闭运算结合起来构成形态学噪声滤波器,例如(XS)S或(XS)S等。,图8-23 形态学滤波示意图,比较图中(a)和(f),可看出目标区域内外的噪声都消除掉了,而目标本身除原来的4个直角变为圆角外没有太大的变化。在利用开、闭运算滤除图像的噪声时,选择圆形结构元素会得到较好的结果
15、。,8.4.2 骨架抽取 把一个平面区域简化成图(Graph)是一种重要的结构形状表示法。利用细化技术得到区域的细化结构是常用的方法。因此,寻找二值图像的细化结构是图像处理的一个基本问题。在图像识别或数据压缩时,经常要用到这样的细化结构,例如,在识别字符之前,往往要先对字符作细化处理,求出字符的细化结构。骨架便是这样的一种细化结构,它是目标的重要拓扑描述,具有非常广泛的应用。,下面首先对数字图像细化概念做简要介绍。许多数学形态学算法都依赖于击中/击不中变换。其中数字图像细化,便是一种最常见的使用击中/击不中变换的形态学算法。对于结构对B=(B1,B2),利用B细化X定义为,即XB为X与XB的差
16、集。更一般地,利用结构对序列B1,B2,BN迭代地产生输出序列,(8-30),(8-31),或者,i=1,2,N,(8-32),随着迭代的进行,得到的集合也不断细化。假设输入集合是有限的(即N为有限),最终将得到一个细化的图像。结构对的选择仅受结构元素不相交的限制。事实上,每一个Bi(i=1,2,N)都可以是相同的结构对,即在不断重复的迭代细化过程使用同一个结构对。在实际应用中,通常选择一组结构元素对,迭代过程不断在这些结构对中循环,当一个完整的循环结束时,如果所得结果不再变化,则终止迭代过程。,骨架还可以用中轴表示。设想在时刻,将目标边界各处同时点燃,火的前沿以匀速向目标内部蔓延,当前沿相交
17、时火焰熄灭,火焰熄灭点的集合就构成了中轴。图8-24(a)是这个过程的图示。另外一种定义骨架的方法使用了最大圆盘概念:目标X的骨架由X内所有最大内切圆盘的圆心组成,如图8-24(b)、(c)所示。最大圆盘不是其他任何完全属于X的圆盘的子集,并且至少有两点与目标边界轮廓相切。骨架的每个点都对应一个相应的最大圆盘和半径r。最大圆盘定义的骨架与火种方式定义的骨架除在某些特殊情况下端点处存在差异外,绝大多数情况下都是一致的。,图8-24 骨架的定义,按照最大圆盘定义骨架的方式,在欧氏二值图像的内部任意给定一点,如果以该点为圆心存在一个最大圆盘,其整个盘体都在图像的内部,且至少有两点与目标边界相切,则该
18、点便是骨架上的点。所有最大圆盘的圆心构成了图像的骨架(中轴)。对于图像X,一般用S(X)表示其骨架。注意,不同的图像可能有相同的骨架。骨架对噪声非常敏感,而且连通的集合可能具有不连通的骨架(例如两个相切圆盘的骨架)。,(8-35),相反,图像X也可以用Sk(X)重构,即,(8-36),式中,B为结构元素,(Sk(X)kB)代表连续k次用B对Sk(X)膨胀,即,利用式(8-35)以及图像腐蚀、膨胀的算法可以编写程序实现形态学骨架抽取变换,有兴趣的读者请参考书后的参考文献。图8-25给出了用形态学方法抽取图像骨架的一个实例。其中,图8-25(a)为一幅二值图像,图8-25(b)为用33的结构元素S
19、(原点在中心)得到的骨架,图8-25(c)为用55的结构元素得到的骨架,图8-25(d)为用77的结构元素得到的骨架。注意图8-25(c)和(d)中由于模板较大叶柄没有保留下来。,图8-25 骨架抽取示例(a)一幅二值图像;(b)用33的结构元素S得到的骨架;(c)用55的结构元素得到的骨架;(d)用55的结构元素得到的骨架,8.5 应用实例细化,利用前面所介绍的形态学知识,下面给出一种实用的对二值区域进行形态学细化的一种算法。如前所述,一个图像的“骨架”,是指图像中央的骨骼部分,是描述图像几何及拓扑性质的重要特征之一。求一幅图像骨架的过程就是对图像进行“细化”的过程。在文字识别、地质构造识别
20、、工业零件形状识别或图像理解中,先对被处理的图像进行细化有助于突出形状特点和减少冗余信息量。,在细化一幅图像X时应满足两个条件:第一,在细化的过程中,X应该有规律地缩小;第二,在X逐步缩小的过程中,应当使X的连通性质保持不变。下面介绍一个具体的细化算法。设已知目标点标记为1,背景点标记为0。边界点是指本身标记为1而其8连通邻域中至少有一个标记为0的点。算法对一幅图像的所有边界点即一个33区域都进行如下检验和操作:,(1)考虑以边界点为中心的8邻域,设p1为中心点,对其邻域的8个点逆时针绕中心点分别标记为p2,p3,p9,其中p2位于p1的上方。如果p1=1(即黑点)时,下面4个条件同时满足,则
21、删除p1(p1=0):2N(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。,(2)同第(1)步,仅将中的条件改为p2p4p8=0,中的条件改为p2p6p8=0。同样当对所有边界点都检验完毕后,将所有满足条件的点删除。以上两步操作构成一次迭代。算法反复迭代,直至没有点再满足标记删除的条件,这时剩下的点就组成区域的骨架。图8-26给出了这一算法的应用示例。其中,图8-26(b)、(c)、(d)是p1不可删除的三种情况。在图8-26(b)中
22、删除p1会分割区域,图8-26(c)中删除p1会分割缩短边缘,图8-26(d)中满足条件2N(p1)6但p1不可删除。,图8-26 细化算法示意图(a)标记p1和邻点;(b)p1不可删除情况一;(c)p1不可删除情况二;(d)p1不可删除情况三;(e)细化前图像;(f)细化后的结果,下面是上述细化算法的VC+函数框架和主要算法。,/*/函数名称:BOOL ThiningDIB()/基本功能:本函数对CDibObject对象中的图像进行细化运算/参数说明:CDibObject*pDibObject默认为NULL/返回值:BOOL 成功返回TRUE,失败返回FALSE/*BOOL CMorphPr
23、o:ThiningDIB(CDibObject*pDibObject)/使用传入的CDibObject对象/无CDibObject对象时,返回FALSE/定义变量 unsigned char*pBuffer,*pBits;RGBQUAD*pPalette;,int nWidthBytes,nNumColors;int lWidth,lHeight;/获得图像指针/获得颜色数/获得调色板指针/获得位图数据指针/指向源图像的指针/指向缓存图像的指针/指向缓存DIB图像的指针/循环变量 long i;long j;int n;int m;,/四个条件 BOOL bCondition1;BOOL bC
24、ondition2;BOOL bCondition3;BOOL bCondition4;/计数器 unsigned char nCount;/像素值 unsigned char pixel;/55相邻区域像素值 unsigned char neighbour55;/暂时分配内存,以保存新图像 hNewDIBBits=LocalAlloc(LHND,lWidth*lHeight);/锁定内存,lpNewDIBBits=(char*)LocalLock(hNewDIBBits);/初始化新分配的内存,设定初始值为255 lpDst=(char*)lpNewDIBBits;memset(lpDst,
25、(BYTE)255,lWidth*lHeight);bModified=TRUE;while(bModified)bModified=FALSE;/初始化新分配的内存,设定初始值为255 lpDst=(char*)lpNewDIBBits;memset(lpDst,(BYTE)255,lWidth*lHeight);for(j=2;j lHeight-2;j+)for(i=2;i lWidth-2;i+),bCondition1=FALSE;bCondition2=FALSE;bCondition3=FALSE;bCondition4=FALSE;/指向源图像倒数第j行,第i个像素的指针 lp
26、Src=(char*)pBits+lWidth*j+i;/指向目标图像倒数第j行,第i个像素的指针 lpDst=(char*)lpNewDIBBits+lWidth*j+i;/取得当前指针处的像素值,注意要转换为unsigned char型 pixel=(unsigned char)*lpSrc;/目标图像中含有0和255外的其他灰度值 if(pixel!=255&*lpSrc!=0),return FALSE;continue;/如果源图像中当前点为白色,则跳过 else if(pixel=255)continue;/获得当前点相邻的55区域内像素值,白色用0代表,黑色用1代表 for(m=
27、0;m 5;m+)for(n=0;n 5;n+)neighbourmn=(255-(unsigned char)*(lpSrc+(4-m)-2)*lWidth+n-2)/255;,/逐个判断条件。判断2=2,if(neighbour21=0,if(nCount=1)bCondition2=TRUE;/判断P2*P4*P8=0 or Z0(p2)!=1 if(neighbour12*neighbour21*neighbour23=0)bCondition3=TRUE;else nCount=0;if(neighbour02=0,if(neighbour11=0,/判断P2*P4*P6=0 or Z0(p4)!=1if(neighbour12*neighbour21*neighbour32=0)bCondition4=TRUE;else nCount=0;if(neighbour11=0,if(neighbour31=0 if(bCondition1&bCondition2&bCondition3&bCondition4),*lpDst=(unsigned char)255;bModified=TRUE;else*lpDst=(unsigned char)0;/复制腐蚀后的图像/复制腐蚀后的图像/释放内存/返回 return TRUE;,