Halcon腐蚀
文章目录
腐蚀操作是对所选区域进行“收缩”的一种操作,可以用于消除边缘和杂点。腐蚀区域的大小与结构元素的大小和形状相关。其原理是使用,个自定义的结构元素,如矩形、圆形等,在二值图像上进行类似于“滤波”的滑动操作,然后将二值图像对应的像素点与结构元素的像素进行对比,得到的交集即为腐蚀后的图像像素。图(a)为二值化后的图像,图(b)为使用一个圆形的结构元素对图像进行腐蚀,得到的结果为“收缩”了一圈的图像,见图(c)。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/90d4266716f225662fa3adc5b5e342bc.jpeg#pic_center)
经过腐蚀操作,图像区域的边缘可能会变得平滑,区域的像素将会减少,相连的部分可能会断
开。即使如此,各部分仍然属于同一个区域。
Halcon 中有许多与腐蚀操作相关的算子,比较常用的有erosion_circle 算子和erosion_rectanglel算子,它们分别使用圆形与矩形结构元素对输入区域进行腐蚀操作。这里以erosion circle算子为例进行说明。erosion_circle算子的原型如下:
erosion circle(Region : RegionErosion : Radius :)
其中各参数的含义如下。
(1)参数1:Region 为输入图像中的区域,该区域往往是由上一环节的某种分割操作得到的输
出结果,如闽值处理提取的区域等。
(2)参数2:RegionErosion 为输出的腐蚀后的区域。
(3)参数3:Radius 为圆形结构元素的半径。其具体值取与想要被去除的杂点的大小有关。因为小于这个圆形结构元素的点都会被移除,而该圆形的直径一般是一个奇数,如3、5、7、9等,所以该半径取值一般会取 1.5、2.5、3.5、4.5……默认值是3.5。
注意,圆形的直径取奇数是因为圆形是对称图形,这样做是为了使圆形的中心点坐标为整数。
下面以一个简单的例子来说明腐蚀操作。图(a)即原始图像,为一幅背景较为复杂的图像。目标是提取较大的面积芯片区域。因此,可以先将图像转化为单通道灰度图像,并使用阈值进行简单的灰度分割。阈值分割图像如图(b)所示。在满足条件的区域使用erosion_circle算子移除杂点,erosion_circle 算子的输入区域为图(b)的红色部分,腐蚀的结果如图(c)所示。
图中腐蚀操作的代码如下:
read_image (Image,' data/board')
rgbl_to_gray (Image, GrayImage)
threshold (GrayImage, Region, 100, 255)
erosion _circle (Region, RegionErosion, 7.5)
erosion_circle (RegionErosion, RegionErosion2,6.5)
dev_clear_window ()
dev_display (RegionErosion2)
因为经阈值处理后,图像中会包含背景中的许多杂点和非关键区域,所以这里通过腐蚀操作移除杂点,并且在腐蚀的结果上进行重复腐蚀,以达到理想的结果。腐蚀操作很容易让图像中出现“空洞”,因此可以使用膨胀或者闭运算进行后续处理。
上文提到的erosion_circle算子是使用圆形结构元素进行腐蚀操作,还可以选择其他形状的结构元素,如erosion_rectangle1算子是使用矩形结构元素进行腐蚀,用法与erosion_circle算子类似、也可以使用自定义的结构元素或者其他方式。Halcon中与腐蚀有关的其他算子如下。
(1)erosion1:用一个自定义的结构元素对输入区域进行腐蚀操作。这个自定义的结构元素需要预先创建,可能是圆形、矩形、多边形,甚至是点,等等。
(2)erosion2:使用一个参考点对输入区域进行腐蚀操作。这个算子中的结构元素有一个参考点,这个点与erosion1中的点不同,它可以是指定的任意一点。
(3)erosion_golay:使用的结构元素来自格雷字母表,通过定义结构元素对输入区域进行腐蚀操作。
(4)erosion_seq:与erosiongolay 类似,使用格雷字母表中的元素对输入区域进行连续的腐蚀操作。