,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,数字图像处理,单击此处编辑母版标题样式,*,2015,年,9,月,13,日,数字图像处理,第,09,章 形态学图像处理,高振国,内容,预备知识,集合运算,二值图像,膨胀与腐蚀,结构元素的分解,膨胀与腐蚀的组合,(,例如开运算、闭运算、击中或击不中,使用查找表,LUT,技术编程,),标注连通分量,函数,imlabel(),形态学重构,(,由重构做开运算,填充孔洞,清除边界对象,),灰度图像形态学,膨胀与腐蚀,开运算与闭运算,重构,引言,形态学,一词通常指生物学的一个分支,用于处理动物和植物的形状和结构。,数学形态学,(mathematical morphology,MM),是根据形态学概念发展而来具有严格数学理论基础的科学,并在图像处理和模式识别领域得到了成功应用。,除了通常作为一种抽取图像中区域形状特征,如边界、骨骼和凸壳等,的工具外,也经常用于图像的预处理和后处理,如形态学滤波、细化和修剪等。,9.1,预备知识,集合的运算,9.1,预备知识,针对像素坐标集合的基本符号,集合,B,的映像,集合,A,的平移,9.2,膨胀和腐蚀,(,二值图像,),膨胀,膨胀是二值图像中加长或变粗的操作,操作由一个称为结构元素的集合来控制。,结构元素中必须明确指定原点,图像,A,用结构元素,B,膨胀,记作,A,B,,其定义为:,9.2,膨胀和腐蚀,(,二值图像,),膨胀,9.2,膨胀和腐蚀,(,二值图像,),膨胀,例,9.1,,补全残缺文字,9.2,膨胀和腐蚀,(,二值图像,),结构元素的分解,膨胀满足结合律,即,A,(BC)=,A,BC,若结构元素,B,可以分解为,B=B,1,B,2,,则用,B,对,A,膨胀,A,B=A(B,1,B,2,)=AB,1,B,2,,后者计算效率更高,9.2,膨胀和腐蚀,(,二值图像,),9.2.3 matlab,函数,函数,Strel,函数,用于,产生预定义结构元素矩阵,信息,Se=strel(shape,parameters),9.2,膨胀和腐蚀,(,二值图像,),9.2.3 matlab,函数,函数,getsequence,可分解结构元素,例,9.2,,分解结构元素,9.2,膨胀和腐蚀,(,二值图像,),腐蚀,膨胀是二值图像中收缩或细化的操作,操作由一个称为结构元素的集合来控制。,结构元素中必须明确指定原点,图像,A,用结构元素,B,膨胀,记作,A,B,,其定义为:,9.2,膨胀和腐蚀,(,二值图像,),腐蚀,9.2,膨胀和腐蚀,(,二值图像,),腐蚀,例,9.3,,去除细线,A=imread(ic.tif);,se=strel(disk,10);,figure;,subplot(2,2,1);imshow(A),title(,原始图像,),A2=imerode(A,se);,subplot(2,2,2);imshow(A2),title(,使用结构元素,disk,(,10,),腐蚀后的图像,),se=strel(disk,5);,A3=imerode(A,se);,subplot(2,2,3);imshow(A3),title(,使用结构元素,disk,(,5,),腐蚀后的图像,),A4=imerode(A,strel(disk,20);,subplot(2,2,4);imshow(A4),title(,使用结构元素,disk,(,20,),腐蚀后的图像,),9.3,膨胀和腐蚀的组合运算,开运算,图像,A,用结构元素,B,的开运算记作,开运算效果:,平滑对象轮廓,断开狭窄的连接,取消细小的突出部分。,闭运算,图像,A,用结构元素,B,的闭运算记作,闭运算效果:,将狭窄的缺口连接起来形成细长的弯口,并填充比结构小的孔洞。,9.3,膨胀和腐蚀的组合运算,开运算和闭运算,开运算,matlab,函数,,C=imopen(A,B),闭运算,matlab,函数,,C=imclose(A,B),9.3,膨胀和腐蚀的组合运算,开运算和闭运算,例,9.4,,函数,imopen,和,imclose,的使用,9.3,膨胀和腐蚀的组合运算,开运算和闭运算,例,9.4,,指纹图像噪声去除,9.3,膨胀和腐蚀的组合运算,击中和,(,或,),击不中变换,图像,A,用结构元素组,B=(B1,B2),的击中击不中变换记作,A,B,该变换,用于识别特定形状,9.3,膨胀和腐蚀的组合运算,击中和,(,或,),击不中变换,图像,A,用结构元素组,B=(B1,B2),的击中击不中变换记作,A,B,该变换,用于识别特定形状,9.3,膨胀和腐蚀的组合运算,击中和,(,或,),击不中变换,该变换的,Matlab,函数,C=bwhitmiss(A,B1,B2),例,9.5,,定位图像中对象的左上角像素,%,例,9.5 bwhitmiss,击中或击不中变换,B1=strel(0 0 0;0 1 1;0 1 0);B2=strel(1 1 1;1 0 0;1 0 0);,f=imread(corner.tif);,figure;,subplot(1,2,1);imshow(f),title(,原始图像,),g=bwhitmiss(f,B1,B2);,subplot(1,2,2);imshow(g),title(,使用结构元素组,1,击中击不中变换后的图像,),9.3,膨胀和腐蚀的组合运算,击中和,(,或,),击不中变换的编程,当结构元素较小时,使用查找表方式运行较快。事先构造查找表,LUT,,其中记录各种可能邻域模式是否匹配。,为此需要为每种邻域模式定义一个编号,可另邻域各位权重如下。,工具箱两个相关函数,,makelut(),applylut(),9.3,膨胀和腐蚀的组合运算,击中和,(,或,),击不中变换的编程,9.3,膨胀和腐蚀的组合运算,击中和,(,或,),击不中变换的编程,提取图像的端点,9.3,膨胀和腐蚀的组合运算,击中和,(,或,),击不中变换的编程,例,9.6,,使用二值图像和查找表编写,conway,的生命游戏程序,test09_06.m,9.3,膨胀和腐蚀的组合运算,工具箱函数,bwmorph,9.3,膨胀和腐蚀的组合运算,工具箱函数,bwmorph,,,test09_0601.m,Bwmorph,的使用,细化指纹,骨骼化,去除端点,9.4,连通分量,基本概念,N,4,(p),N,D,(p),N,8,(p);,4,邻接,,8,邻接;,4,连接,,8,连接,9.4,连通分量,标记连通分量的函数,bwlabel,L,num=bwlabel(f,conn);,其中,f,是二进制图像,,conn,为,4,或,8,,表示考虑的连接类型,,L,标记矩阵,,num,连通分量数量,9.4,连通分量,标记连通分量的函数,bwlabel,L,num=bwlabel(f,conn);,其中,f,是二进制图像,,conn,为,4,或,8,,表示考虑的连接类型,,L,标记矩阵,,num,连通分量数量,f=imread(objects.tif);,L,n=bwlabel(f);,r,c=find(L=3);,rbar=mean(r);,cbar=mean(c);,imshow(f);,hold on;,for k=1:1:n,r,c=find(L=k);,rbar=mean(r);,cbar=mean(c);,plot(cbar,rbar,Marker,o,MarkerEdgeColor,k,.,MarkerFaceColor,k,MarkerSize,10);,plot(cbar,rbar,Marker,*,MarkerFaceColor,w);,end,9.5,形态学重构,重构变换,重构变换,涉及,两幅图像,和,一个结构元素;,一幅图像称为,标记,marker,,为变换的初始状态;另一幅图像称为,掩膜,mask,,为变换的限制区域。该结构元素决定连接性,通常为,ones(3,1),若,g,是掩膜,,f,为标记,则从,f,开始重构,g,的变换记作,R,g,(f),,其由如下迭代过程定义。,重构,matlab,函数,,out=imreconstruct(marker,mask),9.5,形态学重构,重构可以有很多应用,不同的应用体现在,marker,和,mask,的不同选择。,重构变换的应用,1-,由重构做开运算,由重构做开运算,传统开运算中,腐蚀去除掉小对象,随后的膨胀恢复原始对象形状,但受元素结构等影响,恢复的往往不是很精确;,而重构则能精确恢复原始对象。,使用结构元素,B,对图像,f,由重构做开运算的操作记作,R,f,(f,B,),。,例,9.8,,,test09_08.m,f=imread(text1.tif);,fe=imerode(f,ones(51,1);,fobr=imreconstruct(fe,f);,9.5,形态学重构,重构变换的应用,2-,填充孔洞;,定义标记图像,fm,如下,则 的作用是填充图像中的孔洞,,Matlab,函数,,g=imfill(f,holes,);,重构变换的应用,3-,清除边界对象;,定义标记图像,fm,如下,用原图像做掩膜,则 的作用是清除边界的对象,,Matlab,函数,,g=imclearborder(f,conn,);,9.6,灰度图像形态学,9.6.1,,膨胀,使用结构元素,b,对灰度图像,f,的膨胀记作,f,b,,定义为:,当结构元素,b,是平坦的,即,b(x,y),在其定义域内都为,0,时,,9.6.1,,腐蚀,使用结构元素,b,对灰度图像,f,的腐蚀记作,f,b,,定义为:,当结构元素,b,是平坦的,即,b(x,y),在其定义域内都为,0,时,,9.6,灰度图像形态学,9.6.1,膨胀与腐蚀,灰度图像的形态学梯度定义为,膨胀运算,与,腐蚀运算,的结果之间的差值。,f=imread(city.tif);,se=strel(square,3);,gd=imdilate(f,se);,ge=imerode(f,se);,morph_grad=imsubtract(gd,ge);,figure;,subplot(2,2,1);imshow(f,);,title(,原图,);,subplot(2,2,2);imshow(gd,);,title(,原图的膨胀结果,);,subplot(2,2,3);imshow(ge,);,title(,原图的腐蚀结果,);,subplot(2,2,4);imshow(morph_grad,);title(,原图的形态学梯度,);,9.6,灰度图像形态学,9.6.2,开运算与闭运算,开运算,把一幅图像看做是一个三维表明,其亮度值代表,xy,平面上的高度值,则当结构元素,b,在,f,下面活动,时,结构元素的任何部分的,最高值,构成了开运算的结果。,可以除去比结构元素更小的明亮细节,同时保持图像整体的灰度级和较大的明亮区域不变。,闭运算,当结构元素,b,在,f,的,上面活动,时,结构元素的任何部分的,最低值,构成了闭运算的结果。,除去比结构元素更小的暗部细节,同时保持图像整体的灰度级和较大的暗部区域不变,。,9.6,灰度图像形态学,9.6.2,开运算与闭运算,例,9.9,,使用开运算和闭运算做形态学平滑,,test09_09.m,%,例,9.9,使用开运算和闭运算进行形态学平滑,f=imread(dowel.tif);,figure;,subplot(2,2,1);imshow(f),title(,木按钉的原始图像,),se=strel(disk,5);,fo=imopen(f,se);,subplot(2,2,2);imshow(fo),title(,使用半径为,5,的圆盘执行开运算后的图像,),foc=imclose(fo,se);,subplot(2,2,3);imshow(foc),title(,经过开运算后再经闭运算后的图像,),fasf=f;,for k=2:5,se=strel