第10章图像形态学处理用具有一定形态的结构元素去度量和提取图像中的对应形状,以达到分析和识别图像的目的。所有的形态学处理都基于填放结构元素的概念结构元素是在特定研究目的下用来探测图像的一个小的集合或者子图像原点结构元素MATLAB图像处理工具箱提供strel函数生成任意维数和形状的结构元素,其调用方式如下:SE=strel(shape,parameters)根据shape指定的类型创建一个结构元素SE。shape的类型有'arbitrary'、'pair'、'diamond'、'periodicline'、'disk'、'rectangle'、'line'、'square'、'octagon'。se=strel('diamond',3)输出结果如下se=FlatSTRELobjectcontaining25neighbors.Decomposition:3STRELobjectscontainingatotalof13neighborsNeighborhood:0001000001110001111101111111011111000111000001000两种定义方式从填充的角度定义由所有可以填入A内部的结构元素的原点组成从平移的角度定义将图像平移-b(b属于结构元素),并计算所有平移的交集而得到{|}xABxBA{:}ABAbbB从图像处理的观点看,具有重要含义无论对计算还是理论分析都十分重要对于信号处理,相应地为填入信号下方腐蚀定义将结构元素B(原点)移动到图像A中每个像素的位置,提问:结构元素B是不是完全包含在图像A中?所有回答“是”的像素组成了腐蚀的结果{|}xABxBA结构元素BA腐蚀结果图像A可以填入无法填入从填充的角度定义腐蚀结构元素(B)原始图像(A)相交的像素原点从填充的角度定义腐蚀腐蚀结果B在A内部的原点组成的边界结构元素(B)先平移再求交集,结构元素形状决定图像平移方向A{:}ABAbbB结构元素BA腐蚀结果当原点不在几何中心时形状不变,位置偏移膨胀从平移的角度定义腐蚀AAB!BAAB!B原点在结构元素内部时,腐蚀结果也在原始图像内部原点在结构元素外部时,腐蚀结果偏离了原始图像的位置结构元素原点位置对腐蚀结果的影响(a)原图(b)结构元素图(c)腐蚀示意图原点不在结构元素的中心,腐蚀结果也将发生偏移,但是结果的形状保持不变结构元素原点位置对腐蚀结果的影响0000000000000000000000000000111100000000000000000011110000000011100000001111000000001110000001111000000001110000000111100000000111000011111110000000111100001111000000100001110000000111100000110000111000000000000000000000000000000ABerode(A,B)结构元素原点位置对腐蚀结果的影响ABBAABBABABA原始图像凸出的角在腐蚀后保持不变凹陷的角在腐蚀后具有结构元素的形状结构元素形状对腐蚀结果的影响结构元素图像有一种收缩的效果图像两部分之间的缝隙变得更大腐蚀的效果MATLAB图像处理工具箱提供用于图像腐蚀的函数是imerode,其调用方式如下IM2=imerode(IM,SE)IM2=imerode(IM,NHOOD)IM2=imerode(IM,SE,PACKOPT,M)IM2=imerode(...,SHAPE)其中IM是输入图像,返回输出图像IM2。参数SE为由strel函数返回的结构元素或者结构元素对象组。NHOOD是定义结构元素邻域0和1的矩阵,用于表示自定义形状的结构元素。PACKOPT用来指定图像是否为腐蚀的二值图像,其中'ispacked'表示为二值图像,'notpacked'表示为普通的数组。SHAPE指定输出图像的大小,有两种选择,'same'表示跟输入图像的大小相同,'full'表示全腐蚀后的结果。表10-1腐蚀填充图像规则操作规则腐蚀输出像素的值是所有输入像素值中的最小值。在二值图像中,如果邻域中有一个像素值为0,则输出像素的值为0超出图像边界的像素值定义为该数据类型允许的最大值。对于二进制图像,这些像素值设置为1;对于灰度图像,uint8类型的最大值为256originalBW=imread('text.png');se=strel('line',11,90);erodedBW=imerode(originalBW,se);subplot(121),imshow(originalBW);title('原始图像')subplot(122),imshow(erodedBW);title('腐蚀后的图像')originalI=imread('cameraman.tif');se=strel('ball',5,5);erodedI=imerode(originalI,se);subplot(121),imshow(originalI);title('原始图像')subplot(122),imshow(erodedI);title('腐蚀后的图像')两种定义方式从击中的角度定义结构元素的反射与图像的交集至少有一个像素从平移的角度定义相对结构元素的所有点平移输入图像,然后计算其并集得到(Matlab:imdilate)ˆ{|}zABzBA{:}{:}ABAbbBABBaaAABBA将B平移到A的每个像素,平移过程中B所覆盖点的并集膨胀运算满足交换律,所以有两种平移方程膨胀的定义A将结构元素B的反射移动到图像A中每个像素的位置,提问:结构元素B的反射和图像A的交集是不是为空集?所有回答“否”的像素组成了膨胀的结果结构元素B的反射还是自身图像Aˆ{|}zABzBA交集不为空交集为空膨胀结果从击中的角度定义膨胀结构元素(B)原始图像(A)Bˆ反射相交的像素原点从击中的角度定义膨胀膨胀的结果B的反射和A相交的原点组成的边界图像扩张了两个像素从击中的角度定义膨胀A123451234567-101-101A(1,1)123451234567A(-1,1)123451234567A(1,-1)123451234567A(-1,-1)123451234567{:}ABAbbB123451234567AB膨胀结果原点位于几何中心从平移的角度定义膨胀A(2,0)A123451234567012012A(1,1)A(2,2){:}ABAbbBAB0123450123456701234501234567012345012345670123450123456701234501234567A(0,2)原点位于左上角膨胀结果腐蚀从平移的角度定义膨胀(a)原图(b)结构元素图(c)膨胀示意图结构元素的原点不在几何中心,使得膨胀图像发生偏移结构元素原点位置对膨胀结果的影响0000000000000000000000000000111100000001111100000011110000000111110000001111000000011111000001111000000011111000000111100000001111100011111110000111111110001111000000100011111110000111100000110001111100000000000000000000111110000ABdilate(A,B)结构元素原点位置对膨胀结果的影响BAABBAABBAABˆB原始图像凹陷的角在膨胀后保持不变凸出的角在膨胀后具有结构元素的形状结构元素形状对膨胀结果的影响3×3正方结构元素膨胀后的效果3×3正方结构元素Setofcoordinatepoints={(-1,-1),(0,-1),(1,-1),(-1,0),(0,0),(1,0),(-1,1),(0,1),(1,1)}狭窄的间断被填充膨胀的效果MATLAB图像处理工具箱提供用于图像膨胀的函数是imdilate,其调用方式如下IM2=imdilate(IM,SE)IM2=imdilate(IM,NHOOD)IM2=imdilate(IM,SE,PACKOPT)IM2=imdilate(...,SHAPE)其中各个参数的含义与imerode函数的参数含义相同,只不过imdilate函数对输入图像执行的是膨胀操作,而imerode函数对输入图像执行的是腐蚀操作。originalBW=imread('text.png');se=strel('line',11,90);dilatedBW=imdilate(originalBW,se);subplot(121),imshow(originalBW);title('原始图像')subplot(122),imshow(dilatedBW);title('膨胀后的图像')originalI=imread('cameraman.tif');se=strel('ball',5,5);dilatedI=imdilate(originalI,se);subplot(121),imshow(originalI);title('原始图像')subplot(122),imshow(dilatedI);title('膨胀后的图像')original=imread('cameraman.tif');originalI=256-original;se=strel('ball',5,5);dilatedI=imdilate(originalI,se);dilatedII=256-dilatedIsubplot(121),imshow(original);title('原始图像')subplot(122),imshow(dilatedII);title('膨胀后的图像')ABABBOpening=Erosion+Dilation(使用相同的结构元素)一般来说,输出的图像不同于输入的图像(已经被腐蚀掉的部分无法通过膨胀运算恢复)经过开运算的图像比原始图像更规则化(含有较少细节)轮廓被平滑细长的部分被去除小的孤岛被去除.(Matlab:imopen)开运算结构元素:结构元素:横向轮廓被平滑纵向轮廓被保留轮廓被平滑原始图像被腐蚀腐蚀再膨胀开运算结构元素:结构元素:细的连接被断开后无法恢复横的细的连接被断开后可以恢复纵的细的连接被断开后无法恢复开运算是否有开运算后保持不变的图像呢?——取决于结构元素的选择结构元素:所有像素都可以被结构元素填充的图像,开运算后保持不变开运算开运算通过结构元素的尺寸选择特征原始图像使用小的结构元素开运算阈值处理后的二值图像使用大的结构元素开运算更多的细节特征被抑制开运算通过结构元素的形状选择特征使用圆形结构元素进行开运算输入图像图像中只有与SE形态相匹配的特征被保留开运算通过结构元素的形状选择特征9x3和3x9的结构元素图像中只有与SE形态相匹配的特征被保留开运算使用imdilate函数和imerode函数来进行形态学的开运算BW1=imread('circbw.tif');%读取图像subplot(131),imshow(BW1);title('原始图像');SE=strel('rectangle',[4030]);%生成矩形结构元素BW2=imerode(BW1,SE);%对图像进行腐蚀subplot(132),imshow(BW2);title('腐蚀后的图像');BW3=imdilate(BW2,SE);%对图像进行膨胀subplot(133),imshow(BW3);title('先腐蚀后膨胀的图像');MATLAB图像处理工具箱使用imopen函数来进行开运算,其调用方式如下IM2=imopen(IM,SE)IM2=imopen(IM,N