本章描述区域形态学的算子。
区域形态学提供了一组形态学算子,用于修改或描述区域的形状。这些形态学算子可用于连接或分离相邻区域,或平滑区域边界。下面我们将深入探讨这些形态学算子。
对输入区域进行膨胀或腐蚀时,需将结构元素应用于该区域。该结构元素会逐行扫描整个图像。在膨胀过程中,当结构元素与输入区域至少存在一个像素重叠时,结构元素的参考点会被添加到结果区域中。这将形成一个放大的区域,如下图所示。而腐蚀则会缩小输入区域的面积,因为只有当结构元素完全位于输入区域内部时,其参考点才会被添加到结果区域。因此,腐蚀也可作为查找对象的替代方法。
| ( 1) | ( 2) | ( 3) | ( 4) |
这些算子可用于对区域进行膨胀或腐蚀:
| 形态学算子 | 结构元素 | 参考点 | |
|---|---|---|---|
|
|
任意 | 原点 |
|
|
任意,转置 | 原点 |
|
|
任意 | 任意 |
|
|
任意,转置 | 任意 |
|
|
圆 | 原点 |
|
|
矩形 | 原点 |
需注意,当结构元素为对称时,明可夫斯基(Minkowski)加法与扩张运算结果相同。明可夫斯基减法与腐蚀运算亦遵循此特性。腐蚀运算可用于分离相互粘连的对象。下文将简要描述分离对象所需的步骤。
首先,必须对图像中的对象进行分割,例如使用 算子。接下来,使用
threshold 算子将单一区域分割为多个区域。如下方图(3)所示,连接处理的结果并不理想,因为多个对象被合并在一起。
connection
| ( 1) | ( 2) | ( 3) |
该问题可通过腐蚀运算解决。如前所述,腐蚀会缩小输入区域的面积。因此,若在 算子前应用腐蚀,即可实现区域分离。最后对分离区域进行膨胀运算,大致恢复原始形状。
connection
| ( 1) | ( 2) | ( 3) |
两种运算均通过组合膨胀与腐蚀操作生成结果区域。开运算即先进行腐蚀再进行膨胀,可有效消除微小无用结构。闭运算与开运算相反,即先膨胀后腐蚀。闭运算能闭合微小间隙,如下图所示。
| ( 1) | ( 2) | ( 3) | ( 4) |
这些算子可用于打开或关闭区域:
| 形态学算子 | 结构元素 | 参考点 | |
|---|---|---|---|
|
|
任意 | 原点 |
|
|
圆 | 原点 |
|
|
矩形 | 原点 |
除了上述算子外,您还可以使用
算子获取输入区域与开运算结果之间的差异,或使用 top_hat 算子获取闭运算结果与输入区域之间的差异。此外,您还可以使用 bottom_hat 算子计算区域的边界。boundary
| ( 1) | ( 2) | ( 3) |
算子可用于查找对象,同时考虑图像的前景和背景。若需从骨架中移除多余分支, hit_or_miss 算子是合适的选择。
pruning
在下面的列表中,描述了形态学领域中使用的重要术语。
受形态学算子修改的区域。
用于扫描输入区域的区域。
bottom_hat底帽boundary边界closing闭closing_circle闭圆closing_rectangle1闭矩形1dilation1膨胀1dilation2膨胀2dilation_circle膨胀圆dilation_rectangle1膨胀矩形1erosion1腐蚀1erosion2腐蚀2erosion_circle腐蚀圆erosion_rectangle1腐蚀矩形1hit_or_miss击中或击不中minkowski_add1闵可夫斯基加法1minkowski_add2闵可夫斯基加法2minkowski_sub1闵可夫斯基减法1minkowski_sub2闵可夫斯基减法2opening开opening_circle开圆opening_rectangle1开矩形1pruning剪枝top_hat顶帽