区域

算子列表 ↓

本章描述区域形态学的算子。

区域形态学概念

区域形态学提供了一组形态学算子,用于修改或描述区域的形状。这些形态学算子可用于连接或分离相邻区域,或平滑区域边界。下面我们将深入探讨这些形态学算子。

膨胀与腐蚀

对输入区域进行膨胀或腐蚀时,需将结构元素应用于该区域。该结构元素会逐行扫描整个图像。在膨胀过程中,当结构元素与输入区域至少存在一个像素重叠时,结构元素的参考点会被添加到结果区域中。这将形成一个放大的区域,如下图所示。而腐蚀则会缩小输入区域的面积,因为只有当结构元素完全位于输入区域内部时,其参考点才会被添加到结果区域。因此,腐蚀也可作为查找对象的替代方法。

( 1) ( 2) ( 3) ( 4)
(1) 带输入区域的图像,(2) 原点为参考点的结构元素,(3) 输入区域膨胀后的结果,(4) 输入区域腐蚀后的结果。

这些算子可用于对区域进行膨胀或腐蚀:

形态学算子 结构元素 参考点
dilation1dilation1Dilation1Dilation1Dilation1dilation1 erosion1erosion1Erosion1Erosion1Erosion1erosion1 任意 原点
minkowski_add1minkowski_add1MinkowskiAdd1MinkowskiAdd1MinkowskiAdd1minkowski_add1 minkowski_sub1minkowski_sub1MinkowskiSub1MinkowskiSub1MinkowskiSub1minkowski_sub1 任意,转置 原点
dilation2dilation2Dilation2Dilation2Dilation2dilation2 erosion2erosion2Erosion2Erosion2Erosion2erosion2 任意 任意
minkowski_add2minkowski_add2MinkowskiAdd2MinkowskiAdd2MinkowskiAdd2minkowski_add2 minkowski_sub2minkowski_sub2MinkowskiSub2MinkowskiSub2MinkowskiSub2minkowski_sub2 任意,转置 任意
dilation_circledilation_circleDilationCircleDilationCircleDilationCircledilation_circle erosion_circleerosion_circleErosionCircleErosionCircleErosionCircleerosion_circle 原点
dilation_rectangle1dilation_rectangle1DilationRectangle1DilationRectangle1DilationRectangle1dilation_rectangle1 erosion_rectangle1erosion_rectangle1ErosionRectangle1ErosionRectangle1ErosionRectangle1erosion_rectangle1 矩形 原点

需注意,当结构元素为对称时,明可夫斯基(Minkowski)加法与扩张运算结果相同。明可夫斯基减法与腐蚀运算亦遵循此特性。腐蚀运算可用于分离相互粘连的对象。下文将简要描述分离对象所需的步骤。

首先,必须对图像中的对象进行分割,例如使用 thresholdthresholdThresholdThresholdThresholdthreshold 算子。接下来,使用 connectionconnectionConnectionConnectionConnectionconnection 算子将单一区域分割为多个区域。如下方图(3)所示,连接处理的结果并不理想,因为多个对象被合并在一起。

( 1) ( 2) ( 3)
(1) 含球状对象的图像,(2) 分割区域,(3) 连通分量。

该问题可通过腐蚀运算解决。如前所述,腐蚀会缩小输入区域的面积。因此,若在 connectionconnectionConnectionConnectionConnectionconnection 算子前应用腐蚀,即可实现区域分离。最后对分离区域进行膨胀运算,大致恢复原始形状。

( 1) ( 2) ( 3)
(1) 腐蚀后的分割区域,(2) 连通分量,(3) 膨胀后的连通分量。

开与闭

两种运算均通过组合膨胀与腐蚀操作生成结果区域。开运算即先进行腐蚀再进行膨胀,可有效消除微小无用结构。闭运算与开运算相反,即先膨胀后腐蚀。闭运算能闭合微小间隙,如下图所示。

( 1) ( 2) ( 3) ( 4)
(1) 带输入区域的图像,(2) 带参考点的结构元素,(3) 对输入区域应用开运算的结果,(4) 应用闭运算的结果。

这些算子可用于打开或关闭区域:

形态学算子 结构元素 参考点
openingopeningOpeningOpeningOpeningopening closingclosingClosingClosingClosingclosing 任意 原点
opening_circleopening_circleOpeningCircleOpeningCircleOpeningCircleopening_circle closing_circleclosing_circleClosingCircleClosingCircleClosingCircleclosing_circle 原点
opening_rectangle1opening_rectangle1OpeningRectangle1OpeningRectangle1OpeningRectangle1opening_rectangle1 closing_rectangle1closing_rectangle1ClosingRectangle1ClosingRectangle1ClosingRectangle1closing_rectangle1 矩形 原点

其他算子

除了上述算子外,您还可以使用 top_hattop_hatTopHatTopHatTopHattop_hat 算子获取输入区域与开运算结果之间的差异,或使用 bottom_hatbottom_hatBottomHatBottomHatBottomHatbottom_hat 算子获取闭运算结果与输入区域之间的差异。此外,您还可以使用 boundaryboundaryBoundaryBoundaryBoundaryboundary 算子计算区域的边界。

( 1) ( 2) ( 3)
(1)顶帽,(2)底帽,(3)边界。

hit_or_misshit_or_missHitOrMissHitOrMissHitOrMisshit_or_miss 算子可用于查找对象,同时考虑图像的前景和背景。若需从骨架中移除多余分支, pruningpruningPruningPruningPruningpruning 算子是合适的选择。

术语表

在下面的列表中,描述了形态学领域中使用的重要术语。

输入区域

受形态学算子修改的区域。

结构元素

用于扫描输入区域的区域。


算子列表

bottom_hatBottomHatbottom_hatBottomHatbottom_hat底帽
计算区域的底帽。
boundaryBoundaryboundaryBoundaryboundary边界
将一个区域缩小到其边界。
closingClosingclosingClosingclosing
关闭一个区域。
closing_circleClosingCircleclosing_circleClosingCircleclosing_circle闭圆
用圆形结构元素关闭一个区域。
closing_rectangle1ClosingRectangle1closing_rectangle1ClosingRectangle1closing_rectangle1闭矩形1
用矩形结构元素关闭一个区域。
dilation1Dilation1dilation1Dilation1dilation1膨胀1
膨胀一个区域。
dilation2Dilation2dilation2Dilation2dilation2膨胀2
膨胀一个区域(使用参考点)。
dilation_circleDilationCircledilation_circleDilationCircledilation_circle膨胀圆
用圆形结构元素膨胀一个区域。
dilation_rectangle1DilationRectangle1dilation_rectangle1DilationRectangle1dilation_rectangle1膨胀矩形1
用矩形结构元素膨胀一个区域。
erosion1Erosion1erosion1Erosion1erosion1腐蚀1
腐蚀一个区域。
erosion2Erosion2erosion2Erosion2erosion2腐蚀2
腐蚀一个区域(使用参考点)。
erosion_circleErosionCircleerosion_circleErosionCircleerosion_circle腐蚀圆
用圆形结构元素腐蚀一个区域。
erosion_rectangle1ErosionRectangle1erosion_rectangle1ErosionRectangle1erosion_rectangle1腐蚀矩形1
用矩形结构元素腐蚀一个区域。
hit_or_missHitOrMisshit_or_missHitOrMisshit_or_miss击中或击不中
区域的击中或击不中操作。
minkowski_add1MinkowskiAdd1minkowski_add1MinkowskiAdd1minkowski_add1闵可夫斯基加法1
在一个区域上执行闵可夫斯基加法。
minkowski_add2MinkowskiAdd2minkowski_add2MinkowskiAdd2minkowski_add2闵可夫斯基加法2
膨胀一个区域(使用参考点)。
minkowski_sub1MinkowskiSub1minkowski_sub1MinkowskiSub1minkowski_sub1闵可夫斯基减法1
腐蚀一个区域。
minkowski_sub2MinkowskiSub2minkowski_sub2MinkowskiSub2minkowski_sub2闵可夫斯基减法2
腐蚀一个区域(使用参考点)。
openingOpeningopeningOpeningopening
打开一个区域。
opening_circleOpeningCircleopening_circleOpeningCircleopening_circle开圆
用圆形结构元素打开一个区域。
opening_rectangle1OpeningRectangle1opening_rectangle1OpeningRectangle1opening_rectangle1开矩形1
使用矩形结构元素打开一个区域。
pruningPruningpruningPruningpruning剪枝
修剪一个区域的分枝。
top_hatTopHattop_hatTopHattop_hat顶帽
计算区域的顶帽。