Halcon 膨胀dilation_circle

2023-12-31 18:37:56

Halcon 膨胀

文章目录


膨胀是对选区进行“扩大”的一种操作。其原理是使用一个自定义的结构元素,在待处理的二值图像上进行类似于“滤波”的滑动操作,然后将二值图像对应的像素点与结构元素的像素进行对比,得到的并集为膨胀后的图像像素。图8.3(a)为二值化之后的图像,使用一个圆形结构元素对图像进行膨胀操作,如图(b)所示,得到的结果为“膨胀”了一圈的图像,如图(c)所示。
在这里插入图片描述
经过膨胀操作,图像区域的边缘可能会变得平滑,区域的像素将会增加,不相连的部分可能会连接起来,这些都与腐蚀操作正好相反。即使如此,原本不相连的区域仍然属于各自的区域,不会因为像素重叠就发生合并。
注意,膨胀后发生重叠的区域可以用opening_seq算子分离开来。
Halcon中有许多与膨胀操作相关的算子,比较常用的有dilation_circle算子和dilation rectangle1算子,它们分别使用圆形与矩形结构元素对输入区域进行膨胀操作。这里以dilation circle 算子为例进行说明。dilation_circle 算子的原型如下:

dilation _circle(Region : RegionDilation : Radius:)

其中各参数的含义如下。
(1)参数1:Region 为输入的区域。
(2)参数2:RegionDilation 为输出的膨胀后的区域。
(3)参数3:Radius 为圆形结构元素的半径,该半径的大小决定了膨胀的程度。其具体取值与
待填补的空洞大小有关。该半径默认值依然是3.5。
下面以一个简单的例子来说明膨胀操作。图(a)中的红色部分即输入区域,也就是上文中的膨胀操作提取出的区域。图(a)为一幅背景较为复杂的图像,目标是提取芯片区域,因此可以先将图像转化为单通道灰度图像,并使用阈值进行简单的灰度分割。闽值分割图像如图(a)所示,可见该区域有许多因为过度腐蚀而产生的“空洞”。接下来在该区域使用dilation_circle算子填补满足尺寸条件的小洞,得到的膨胀效果如图 (b)所示。
在这里插入图片描述
图中针对腐蚀后的区域进行膨胀操作的代码如下:

read_image (Image, 'data/board')
rgbl_to_gray (Image, GrayImage)
threshold (GrayImage, Region, 100, 255)
gen_image_proto (GrayImage, ImageCleared, 0)
erosion_circle (Region, RegionErosion, 7.5)
erosion_circle (RegionErosion, RegionErosion2, 6.5)
erosion_circle (RegionErosion2, RegionErosion3, 5.5)
*膨胀操作
dilation_circle (RegionErosion3, RegionDilation, 23.5)
dev_clear_window ()
dev_display (RegionDilation)

在最后一行使用膨胀算子,其中膨胀算子中的圆形结构元素半径可根据空洞的大小和需要的填补效果进行调节。
经过阈值处理或腐蚀操作后,图像中包含了许多小空隙,为了使提取出的区域尽量完整,这里通过膨胀操作来填补空隙。根据膨胀的实际效果,可能还需要进行平滑边缘等处理,可以选择使用闭运算进行后续处理。
除了上文提到的dilation_circle 和 dilation_rectangle1算子外,在Halcon中还可以使用其他方式进行膨胀操作。与膨胀有关的其他算子如下。
(1)dilation1:用一个自定义的结构元素对输入区域进行膨胀操作。结构元素需要预先创建好,这个自定义的结构元素可能是圆形、矩形、多边形,甚至是点,等等。
(2)dilation2:使用一个参考点对输入区域进行膨胀操作。这个算子中的结构元素有一个参考点,这个点与dilation1中的点不同,这个参考点可以是指定的任意一点。
(3)dilation_golay:使用的结构元素来自格雷字母表,通过定义结构元素对输入区域进行膨胀操作。
(4)dilationseq:与dilation golay 类似,使用格雷字母表中的元素对输入区域进行连续的膨胀操作。

文章来源:https://blog.csdn.net/fallingleafgrief/article/details/135317704
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。