1.Gray Values 灰度值
本章节介绍了灰度形态学运算符。
灰度形态学概念
灰度形态学提供一组运算符,允许对图像中的灰度值进行非线性处理,取决于它们的像素邻域。例如,形态学灰度值运算符可用于平滑或强调图像中的结构特征。与形态学/区域中的二进制运算不同,形态学灰度值运算符处理包含多于一个位的像素的输入图像。因此,灰度形态学可以看作是区域形态学的一般化。在下面的段落中,我们将更详细地研究形态学灰度值运算符。
灰度图像的膨胀和侵蚀
为了执行膨胀或侵蚀,图像的每个像素根据其邻域分配一个灰度值。影响每个像素的邻域的面积和形状由所选择的结构元素和当前像素作为参考点来定义。实施膨胀时,将输入图像的每个像素分配其邻域的最大灰度值,相应地,腐蚀的最小灰度值。因此,灰度膨胀扩大输入图像的亮区域,而灰度侵蚀则强调暗区域。
(1)原始灰度值图像,(2)参考点位于原点的结构元素,(3)侵蚀输入图像的结果,(4)膨胀输入图像的结果。
这些运算符可用于膨胀或侵蚀图像:
形态学灰度操作通常是在信息可以被正确提取之前图像预处理的一部分。下面的例子展示了需要进行灰度腐蚀以读取数据代码符号的情况。为了适应用于解码的数据模型,需要通过扩大方形局部最小值来减少图像中编码元素之间的间隙。因此,使用足够大小的矩形作为结构元素执行灰度腐蚀。矩形大小取决于使用create_data_code_2d_model创建的数据模型,其中确定了可接受的模块间隙大小。
(1)编码对象的图像,(2)使用方形结构元素进行腐蚀,(3)应用于解码的数据模型。这些图像来自于示例程序2d_data_codes_minimize_module_gaps.hdev。
开运算和闭运算
灰度开运算和灰度闭运算算子各是上述算子的组合。闭运算是膨胀后跟随腐蚀,而对于开运算,则是腐蚀先于膨胀操作。如示例图像所示,gray_closing减少甚至去除比其邻域更暗的图像部分,而gray_opening减少更亮的区域。此外,使用适当的结构元素,您可以在去除不需要的图像伪影的同时保留形状。
(1)原始灰度值图像,(2)以原点为参考点的结构元素,(3)输入图像的闭运算结果,(4)输入图像的开运算结果。
进一步的算子
为了更仔细地查看受灰度开运算或闭运算影响的区域,您可以执行gray_tophat或gray_bothat转换。生成的图像显示原始图像和开运算或闭运算的差异。您也可以使用这些算子来检测与结构元素相匹配的结构。
通过应用gray_range_rect运算符,您可以执行灰度开运算或闭运算操作的缓和形式。您可以通过调整参数ModePercent来控制转换。
(1)顶帽,(2)底帽,(3)灰度值范围。
通过应用gray_range_rect运算符,您可以执行灰度开运算或闭运算操作的缓和形式。您可以通过调整参数ModePercent来控制转换。
双重秩序操作:(1)ModePercent = 0(等于开运算),(2)ModePercent = 25,(3)ModePercent = 50(等于中值),(4)ModePercent = 75,(5)ModePercent = 100(等于闭运算)。
术语表
以下列出了在形态学上下文中使用的最重要的术语。
非线性算子
不一定保留输入图像结构的算子
结构元素
用于扫描输入图像的区域。
dual_rank | 使用圆形或矩形遮罩打开、中值和关闭。 |
gen_disc_se | 生成椭圆形结构元素,用于灰度形态学。 |
gray_bothat | 对图像执行灰度值底帽变换。 |
gray_closing | 对图像执行灰度值闭合操作。 |
gray_closing_rect | 使用矩形遮罩执行灰度值闭合操作。 |
gray_closing_shape | 使用选择的遮罩执行灰度值闭合操作。 |
gray_dilation | 对图像执行灰度值膨胀操作。 |
gray_dilation_rect | 确定矩形内的最大灰度值。 |
gray_dilation_shape | 确定所选遮罩内的最大灰度值。 |
gray_erosion | 对图像执行灰度值腐蚀操作。 |
gray_erosion_rect | 确定矩形内的最小灰度值。 |
gray_erosion_shape | 确定所选遮罩内的最小灰度值。 |
gray_opening | 对图像执行灰度值开放操作。 |
gray_opening_rect | 使用矩形遮罩执行灰度值开放操作。 |
gray_opening_shape | 使用选择的遮罩执行灰度值开放操作。 |
gray_range_rect | 确定矩形内的灰度值范围。 |
gray_tophat | 对图像执行灰度值顶帽变换。 |
read_gray_se | 加载灰度形态元素。 |
2.Region 区域
本章描述了区域形态学的运算符。
区域形态学的概念
区域形态学提供了一组形态学运算符,允许修改或描述区域的形状。形态学运算符可以用于连接或分离相邻区域,或平滑区域的边界。接下来,我们将更详细地了解形态学运算符。
膨胀和腐蚀
为了对输入区域进行膨胀或腐蚀,需要将一个结构元素应用于输入区域。该结构元素沿着图像逐行扫描。在膨胀过程中,只要结构元素和输入区域至少有一个像素相交,结构元素的参考点就会添加到结果区域中。这将导致区域增大,如下图所示。腐蚀会减小输入区域的面积,因为只有当结构元素完全位于输入区域内时,参考点才会添加到结果区域中。因此,可以使用腐蚀来查找对象。
(1)带有输入区域的图像,(2)带有原点的结构元素,(3)膨胀输入区域的结果,(4)腐蚀输入区域的结果。
这些运算符可以用于膨胀或腐蚀区域:
请注意,如果结构元素是对称的,则Minkowski加法和膨胀是相同的。Minkowski减法和腐蚀也是如此。腐蚀可用于分离彼此附着的对象。以下简要描述了分离对象所需的步骤。
首先,必须通过使用阈值运算符等方法对图像的对象进行分割。接下来,使用连接算子获取多个区域而不是单个区域。如下图(3)所示,连接的结果令人不满意,因为多个对象被合并。
(1)具有球形对象的图像,(2)分割区域,(3)连接的组件。
可以使用腐蚀来解决此问题。如上所述,腐蚀减少了输入区域的面积。因此,如果在运算符连接之前应用腐蚀,则可以按所需分离区域。最后,在分离的区域上应用膨胀以近似地恢复原始形状。
(1)腐蚀后的分割区域,(2)连接的组件,(3)膨胀后的连接组件。
开放和关闭
两个运算符通过组合膨胀和腐蚀生成结果区域。开放是一种腐蚀后跟随膨胀的操作。它有助于消除小的不需要的结构。关闭是开放的相反,即膨胀后跟随腐蚀。封闭运算符能够关闭小的间隙,如下所示。
(1)带有输入区域的图像,(2)具有参考点的结构元素,(3)应用开放到输入区域的结果,(4)应用关闭的结果。
这些运算符可用于打开或关闭区域:
更多的运算符
除了上述运算符之外,您可以使用top_hat获取输入区域和开放结果之间的差异,或者使用bottom_hat获取关闭结果与输入区域之间的差异。此外,您可以使用运算符边界计算区域的边界。
(1)顶帽,(2)底帽,(3)边界。
运算符hit_or_miss可用于考虑图像的前景和背景来查找对象。要从骨架中删除不需要的分支,修剪是一种合适的运算符。
术语表
在下面的列表中,描述了在形态学上下文中使用的最重要的术语。
输入区域
通过形态学运算符修改的区域。
结构元素
用于扫描输入区域的区域。
bottom_hat | 计算区域的底帽。 |
boundary | 将区域缩减为其边界。 |
closing | 关闭一个区域。 |
closing_circle | 使用圆形结构元素关闭一个区域。 |
closing_rectangle1 | 使用矩形结构元素关闭一个区域。 |
dilation1 | 膨胀一个区域。 |
dilation2 | 膨胀一个区域(使用参考点)。 |
dilation_circle | 使用圆形结构元素膨胀一个区域。 |
dilation_rectangle1 | 使用矩形结构元素膨胀一个区域。 |
erosion1 | 侵蚀一个区域。 |
erosion2 | 侵蚀一个区域(使用参考点)。 |
erosion_circle | 使用圆形结构元素侵蚀一个区域。 |
erosion_rectangle1 | 使用矩形结构元素侵蚀一个区域。 |
hit_or_miss | 区域的击中或不击中操作。 |
minkowski_add1 | 对区域执行Minkowski加法。 |
minkowski_add2 | 膨胀一个区域(使用参考点)。 |
minkowski_sub1 | 侵蚀一个区域。 |
minkowski_sub2 | 侵蚀一个区域(使用参考点)。 |
opening | 打开一个区域。 |
opening_circle | 使用圆形结构元素打开一个区域。 |
opening_rectangle1 | 使用矩形结构元素打开一个区域。 |
pruning | 修剪一个区域的分支。 |
top_hat | 计算区域的顶帽。 |
下一篇
四大“醒”,包括 wake,waken,awake 和 awaken,它們意思相近,有的時候甚至感覺它們是一樣的,那怎麼區分它們呢?一、wake1....