1、2020/3/7,物理系 MATLAB应用图像处理,第六章 二值形态学操作,本章要点: 二值形态学基本运算 膨胀和腐蚀的MATLAB实现方法 形态操作应用 二进制图像的形态学应用,2020/3/7,物理系 MATLAB应用图像处理,6.1 二值形态学基本运算,6.1.1 二值形态学概念 形态学的基本思想是使用具有一定形态的结构元素来度量和提取图像中的对应形状,从而达到对图像进行分析和识别的目的。 使用形态学操作可以完成增强对比度、消除噪声、细化、骨架化、填充和分割等常用图像处理任务。,2020/3/7,物理系 MATLAB应用图像处理,其基本运算有四种:膨胀(或扩张)、腐蚀(或侵蚀)、开启和闭
2、合。 二值形态学中的运算对象是集合,通常给出一个图像集合和一个结构元素集合,利用结构元素对图像进行操作。 结构元素是一个用来定义形态操作中所用到的邻域的形状和大小的矩阵,该矩阵仅由0和1组成,可以具有任意的大小和维数,数值1代表邻域内的像素,形态学运算都是对数值1的区域进行的运算。,2020/3/7,物理系 MATLAB应用图像处理,6.1.2 膨胀和腐蚀,膨胀的运算符图像集合A 用结构元素B来膨胀用B对A进行膨胀的过程是:首先对B作关于原点的映射,再将其映像平移x,A与B映像的交集不为空集时,B的原点就是膨胀集合的像素。,2020/3/7,物理系 MATLAB应用图像处理,也就是说,用B来膨
3、胀A得到的集合是B的位移与A至少有一个非零元素相交时B的原点的位置集合。 如果将B看成是一个卷积模板,膨胀就是对B作关于原点的映像,然后再将映像连续地在A上移动而实现的。 P102 图6.1 膨胀运算示意图,2020/3/7,物理系 MATLAB应用图像处理,腐蚀的运算符号 A用B腐蚀的结果是所有满足将B平移x后,B仍全部包含在A中的x的集合。 从直观上看就是B经过平移后全部包含在A中的原点组成的集合。 P102 图6.2腐蚀运算示意图 P103 原点不包含在结构元素中的膨胀或腐蚀运算示意图,2020/3/7,物理系 MATLAB应用图像处理,6.1.3 膨胀和腐蚀的对偶性,使用结构元素对图像
4、进行腐蚀操作相当于使用该结构元素的映像对图像背景进行膨胀操作,反之亦然。 P104 图6.6 膨胀与腐蚀对偶性示意图,2020/3/7,物理系 MATLAB应用图像处理,6.1.4 开启和闭合,使用同一个结构元素对图像先进行腐蚀,然后再进行膨胀的运算称为开启。 先进行膨胀,然后再进行腐蚀的运算称为闭合。 开启的运算符为“。”,A用B来开启记为A。B 闭合的运算符为“.”,A用B来闭合记为A.B 开启和闭合不受原点位置的影响,无论原点是否包含在结构元素中,开启和闭合的结果都是一定的。根据膨胀和腐蚀的对偶性可知,开启和闭合也具有对偶性。,2020/3/7,物理系 MATLAB应用图像处理,6.2
5、膨胀和腐蚀的MATLAB实现方法,6.2.1 图像处理的膨胀和腐蚀概念在MATLAB图像工具箱中,膨胀一般是给图像中的对象边界添加像素,而腐蚀则是删除对象边界像素。在形态学的膨胀和腐蚀操作中,输出图像中所有给定像素的状态都是通过对输入图像中相应像素及其邻域使用一定的规则来确定的。,2020/3/7,物理系 MATLAB应用图像处理,膨胀和腐蚀规则:P105 图6.7 图6.8,进行膨胀操作时,输出像素值是输入图像相应像素邻域内所有像素的最大值。 在二进制图像中,如果任何一个像素值为1,那么对应的输出像素值为1。 而在腐蚀操作中,输出像素值是输入图像相应像素邻域内所有像素值的最小值。 在二进制图
6、像中,如果任何一个像素值为0,那么对应的输出像素值为0。,2020/3/7,物理系 MATLAB应用图像处理,膨胀和腐蚀操作使用的填充方法,膨胀:超出图像边界的像素值定义为该数据类型允许的最小值。对于二进制图像,这些像素值被设置为0;对于灰度图像,uint8类型的最小值也是0。 腐蚀:超出图像边界的像素值定义为该数据类型允许的最大值。对于二进制图像,这些像素值被设置为1;对于灰度图像,uint8类型的最大值是255。,2020/3/7,物理系 MATLAB应用图像处理,6.2.2 结构元素,膨胀和腐蚀操作的基本组成部分就是用来测试输入图像的结构元素。 结构元素的原点都定义在对输入图像感兴趣的位
7、置处。 结构元素的原点指定了图像中需要处理的像素范围,结构元素中数值为1的点决定了结构元素邻域中的像素在进行膨胀或腐蚀操作时是否需要参与计算。,2020/3/7,物理系 MATLAB应用图像处理,二维(平面)结构元素由一个数值为0或1的矩阵组成,通常比待处理的图像小得多。 三维或非平面的结构元素使用0和1来定义结构元素在X和Y平面上的范围,采用第三维来定义高度。,2020/3/7,物理系 MATLAB应用图像处理,MATLAB的形态函数使用以下函数来获得任意大小和维数的结构元素的原点坐标:origin=floor(size(nhood)+1)/2) 在以上语句中,nhood是指结构元素定义的邻
8、域。结构元素在MATLAB中被定义为一个称为STREL的对象。 getsequence函数返回一个分解后的结构元素数组。 NOTE:通常可以选择一个与希望处理的输入图像相同形状的结构元素。,2020/3/7,物理系 MATLAB应用图像处理,可以使用MATLAB图像处理工具箱函数strel来创建任意大小的STREL对象。 Strel函数支持许多种常用形状,如线形(line)、钻石形(diamond)、圆盘形(disk)、球形(ball)和任意形状(arbitrary)等。 如,以下语句将创建一个平面钻石结构元素:se=strel(diamond,3),2020/3/7,物理系 MATLAB应用
9、图像处理,6.2.3 图像膨胀,MATLAB使用imdilate函数进行图像膨胀。 调用格式:BW2=imdilate(BW,SE) 其中,BW是待处理的输入图像;SE是结构元素。 P107 例6.1,2020/3/7,物理系 MATLAB应用图像处理,6.2.4 图像腐蚀,MATLAB使用imerode函数进行图像腐蚀。 调用格式: BW2=imerode(BW,SE) P108 例6.2,2020/3/7,物理系 MATLAB应用图像处理,6.2.5 综合使用膨胀和腐蚀操作,MATLAB图像处理工具箱中提供了函数imopen来实现对图像的开启操作。 综合使用imdilate和imerode
10、同样可以实现图像的开启操作。 P109 例6.3,2020/3/7,物理系 MATLAB应用图像处理,6.2.6 基于膨胀和腐蚀的形态操作,MATLAB图像处理工具箱中基于膨胀和腐蚀的形态操作函数主要有: bwhitmiss:图像的逻辑“与”操作。该函数使用一个结构元素对图像进行腐蚀操作后,再使用第二个结构元素对图像进行腐蚀操作。 调用格式:BW2=bwhitmiss(BW,SE1,SE2) 其中,BW是二进制图像,SE1和SE2分别是结构元素。,2020/3/7,物理系 MATLAB应用图像处理,imbothat:从原始图像中减去经过形态关闭后的图像。该函数可以用来寻找图像中的灰度槽,其调用
11、格式: IM2=imbothat(IM,SE) 其中,IM为输入图像,SE为结构元素。 imclose:闭合操作。该函数首先对图像进行膨胀,然后再对膨胀后的图像进行腐蚀,两个操作使用同样的结构元素,其调用格式: IM=imclose(IM,SE),2020/3/7,物理系 MATLAB应用图像处理,imopen:开启操作。该函数首先对图像进行腐蚀,然后再对腐蚀后的图像进行膨胀,两个操作使用同样的结构元素,其调用格式: IM=imopen(IM,SE) imtophat:从原始图像中减去形态开启后的图像,可以用来增强图像的对比度。其调用格式: IM=imtophat(IM,SE) MATLAB工
12、具箱还有一些较为复杂的形态复合操作,例如,bwmorph、bwperim等。,2020/3/7,物理系 MATLAB应用图像处理,6.3 形态操作应用,6.3.1 形态重构 形态重构是图像形态处理的重要操作之一,通常用来强调图像中与掩模图像指定对象相一致的部分,同时忽略图像中的其他对象。 形态重构根据一幅图像(称之为掩模图像)的特征对另一幅图像(称之为标记图像)进行重复膨胀,重点是要选择一个合适的标记图像,使膨胀所得的结果能够强调掩模图像中的主要对象。 每一次膨胀处理从标记图像的峰值点开始,整个膨胀过程将一直重复,直到图像的像素值不再变化为止。,2020/3/7,物理系 MATLAB应用图像处
13、理,形态重构操作具有一些独有的特性,1.形态重构处理是基于两幅图像的,一个是标记图像,另一个是掩模图像,而不仅仅是一幅图像和一个结构元素; 2.重构将一直重复直至图像稳定(即图像不再变化); 3.形态重构是基于连通性概念的,而不是基于结构元素的。 P111,图6.15一维图像形态重构过程及结果示意图,2020/3/7,物理系 MATLAB应用图像处理,表6.1 MATLAB标准二维和三维连通类型,P112 MATLAB形态重构实现方法 P112图6.17 首先要创建标记图像。标记图像的峰值应该确定掩模图像中希望强调对象的位置。 MATLAB使用函数imsubtract将掩模图像减去一个常数,例
14、如: marker=imsubbtract(A,2) 然后调用函数imreconstruct进行图像的形态重构。,2020/3/7,物理系 MATLAB应用图像处理,调用格式:IM=imreconstruct(MARKER,MASK,CONN) 其中,MARKER和MASK分别表示标记图像和掩模图像,CONN是可选项,用来指定连通类型,缺省值为对二维图像使用8连通,对三维图像使用26连通。 形态重构所得的图像仅仅包含原始图像的主要对象,其他次要对象都被忽略了。,2020/3/7,物理系 MATLAB应用图像处理,6.3.2 填充操作,填充操作是一种根据像素边界求取像素区域的操作,也是形态学的一
15、种常用操作。 MATLAB图像处理工具箱函数imfill可以用来实现灰度图像和二进制图像的填充操作。 对于二进制图像,imfill函数将相邻的背景像素(数值为0)设置为对象的边界像素(数值为1); 对于灰度图像,imfill函数将被较亮区域围绕的黑暗区域的灰度值,设置为与围绕区域的像素值相同的数值。 从效果上来看,imfill函数将删除没有连接到边界的局部极小值。,2020/3/7,物理系 MATLAB应用图像处理,这个操作在删除图像中的人为痕迹是非常有用的。Imfill函数有许多种调用格式,最常用的: BW2=imfill(BW1,LOCATIONS) 其中,BW1为输入二进制图像,LOCA
16、TIONS表示填充的起始点。 实现填充操作主要通过三个步骤:首先要指定填充操作的连通性;然后指定二进制图像填充起始点;最后进行二进制图像和灰度图像区域的填充。 Help imfill,2020/3/7,物理系 MATLAB应用图像处理,6.3.3 图像的极值处理方法,如果将灰度图像视为三维图像,其中x和y轴描述像素位置,而Z轴表示每一个像素的亮度,那么在这种理解下,灰度值就可以代表地图中的高度值,图像的高灰度值和低灰度值处就相当于地图的峰和谷。 通常图像的峰、谷都代表相关的图像对象,具有重要的形态特征。,2020/3/7,物理系 MATLAB应用图像处理,MATLAB图像工具箱提供函数imre
17、gionalmax和imregionalmin来确定图像的所有局部极大值和极小值,另外,还提供imextendedmax和imextendedmin函数来确定所有大于或小于指定值的局部极大值和极小值。 这些函数以灰度图像作为输入参数,返回一个二进制图像。在输出的二进制图像中,局部极大值或极小值被设置为,其他像素则被设置为0。,2020/3/7,物理系 MATLAB应用图像处理,调用格式: BW=imregionalmax(I,CONN) BW=imregionalmin(I,CONN) BW=imextendedmax(I,H,CONN) BW=imextendedmin(I,H,CONN)
18、其中,I表示输入图像,CONN表示连通类型,H为一个非负标量,表示搜索阈值。,2020/3/7,物理系 MATLAB应用图像处理,Imregionalmax函数返回的二进制图像将会查明所有局部极大值。 可以通过函数imextendedmax函数找到那些灰度变化最大的区域,即像素与其邻域像素间的灰度变化大于一个固定阈值的区域。 使用函数imhmax和imhmin,可压制所有其他高度h的极大值或大于h的极小值。 调用格式:I2=imhmax(I,H,CONN) I2=imhmin(I,H,CONN) NOTE:imhmax和imhmin函数返回一幅直接在原始图像上进行修改后的图像,2020/3/7,物理系 MATLAB应用图像处理,可使用imimposemin函数强调图像中指定的极小值。Imimposemin函数使用形态重构来消除图像中除指定极小值以外的其他所有的极小值。 调用格式:I2=imimposemin(I,BW,CONN) 其中,I为输入图像,BW是一个与I大小相同的二进制图像,其不为零的元素指定极小值,实际上就是由函数imextendedmin创建的标记图像,CONN表示连通类型。,