形态学运算的类型
形态学是基于形状处理图像的一组广泛的图像处理运算。形态学运算将结构元素应用于输入图像,从而创建相同大小的输出图像。在形态学运算中,输出图像中每个像素的值基于输入图像中对应像素与其相邻像素的比较。
形态学膨胀和腐蚀
最基本的形态学运算是膨胀和腐蚀。膨胀指将像素添加到图像中对象的边界,而腐蚀指删除对象边界上的像素。对图像中对象添加或删除的像素数量取决于用于处理图像的结构元素的大小和形状。在形态学膨胀和腐蚀运算中,输出图像中任何给定像素的状态通过对输入图像中的对应像素及其相邻像素应用规则来确定。用于处理像素的规则将运算定义为膨胀或腐蚀。下表列出了膨胀和腐蚀的规则。
膨胀和腐蚀的规则
操作 | 规则 | 示例(原始图像和处理后的图像) |
---|---|---|
膨胀 | 输出像素的值是邻域中所有像素的最大值。在二值图像中,如果一个像素的任何相邻像素的值为 形态学膨胀使对象更加明显可见并填充对象中的小孔。线条看起来更粗,填充的形状看起来更大。 | |
腐蚀 | 输出像素的值是邻域中所有像素的最小值。在二值图像中,如果一个像素的任何相邻像素的值为 形态学腐蚀去除了孤立像素和细线,从而只留下实质对象。剩余线条看起来更细,形状更小。 | |
下图说明了二值图像的膨胀。结构元素如何定义感兴趣的像素的邻域,该邻域带圆圈。膨胀函数将适当的规则应用于邻域中的像素,并为输出图像中的对应像素赋值。在图中,形态学膨胀函数将输出像素的值设置为 1
,因为由结构元素定义的邻域中的元素之一处于打开状态。有关详细信息,请参阅Structuring Elements。
二值图像的形态学膨胀
下图说明灰度图像的这种处理。膨胀函数将规则应用于感兴趣的圈中像素的邻域。输出图像中对应像素的值被指定为所有邻域像素中的最高值。在图中,输出像素的值是 16
,因为它是由结构元素定义的邻域中的最高值。
灰度图像的形态学膨胀
基于膨胀和腐蚀的运算
膨胀和腐蚀经常结合使用来实现图像处理运算。例如,图像的形态学开运算的定义是先腐蚀再膨胀,这两种运算使用相同的结构元素。您可以将膨胀和腐蚀结合起来,以从图像中删除小对象,并对大对象的边框进行平滑处理。
下表列出了工具箱中执行基于膨胀和腐蚀的常见形态学运算的函数。
函数 | 形态学定义 | 示例(原始图像和处理后的图像) |
---|---|---|
执行形态学开运算。开运算先腐蚀图像,然后膨胀经过腐蚀的图像,两种运算使用相同的结构元素。 形态学开运算有助于从图像中删除小对象和细线,同时保持图像中较大对象的形状和大小。有关示例,请参阅Use Morphological Opening to Extract Large Image Features。 | | |
执行形态学闭运算。闭运算先膨胀图像,然后腐蚀经过膨胀的图像,两种运算使用相同的结构元素。 形态学闭运算可用于填充图像中的小孔,同时保留图像中的大孔和对象的形状和大小。 | | |
bwskel | 骨架化二值图像中的对象。骨架化处理过程会将所有对象腐蚀到中心线,而不会改变对象的基本结构,例如存在的孔洞和分支。 | |
bwperim | 求二值图像中对象的边界。如果某像素非零并且与至少一个零值像素连通,则该像素是边界的一部分。因此,内孔的边沿被视为对象周长的一部分。 | |
bwhitmiss | 执行二值命中与否变换。对二值图像进行命中与否变换时,如果像素的邻域匹配某结构元素的形状,而不匹配另一个不相交结构元素的形状,则保留该像素。 命中与否变换可用于检测图像中的图案。 |
此示例使用一个中心点上方和右侧具有邻域的结构元素,以及另一个中心点下方和左侧具有邻域的结构元素。变换只保留其顶部和右侧具有邻点的像素。 |
imtophat | 执行形态学顶帽变换。顶帽变换先对一个图像进行开运算,然后从原始图像中减去经过开运算的图像。 顶帽变换可用于增强亮度不均匀的灰度图像中的对比度。该变换还可以隔离图像中较小的明亮对象。 | |
imbothat | 执行形态学底帽变换。底帽变换先对图像进行闭合运算,然后从经过闭合运算的图像中减去原始图像。 底帽变换会孤立比其邻域中的其他像素暗的像素。因此,该变换可用于在灰度图像中找到光强谷。 | |
另请参阅
imclose
| imopen
| imdilate
| imerode