Halcon开运算
文章目录
- Halcon开运算
开运算的计算步骤是先腐蚀,后膨胀。通过腐蚀运算能去除小的非关键区域,也可以把离得很近的元素分隔开,再通过膨胀填补过度腐蚀留下的空隙。因此,通过开运算能去除一些孤立的、细小的点,平滑毛糙的边缘线,同时原区域面积也不会有明显的改变,类似于一种“去毛刺”的效果。图(a)所示为原始图像,目标是提取图中比较亮的一块区域。
图(b)的红色部分为经阀值处理后提取的较亮区域,可见有一些杂点和毛边。为了在保留主体部分的同时平滑选区的边缘,这里使用开运算进行处理。经过opening算子处理后,杂点消失,毛糙的边缘也有所平滑。图(c)是开运算后的效果,可见边缘杂点被移除,前景目标更清晰。
图中的开运算处理代码如下:
*读取待检测的图像
read_image (Image,'data/board')
*将图像转换为单通道的灰度图像
rgbl_to_gray(Image, GrayImage)
*创建矩形区域
gen_rectanglel (Rectangle, 259, 87, 957, 909)
*进行裁剪,将感兴趣区域单独提取出来
reduce_domain (GrayImage, Rectangle, ImageReduced)
*使用阈值处理,将灰度值大于设定范围的像素选取出来
threshold(ImageReduced,Light,85,255)
*创建圆形结构元素,用于开运算
gen_circle(StructElement,6,6,7)
*进行开运算,去除背景中的杂点
opening(Light,StructElement, Large)
dev_clear_window ()
dev _display (Large)
其中关于灰度阈值的选择,可以通过将鼠标指针悬停在关键像素上,查看其灰度值进行估算。注意,这里的图像都是暗背景、亮目标。如果是亮背景、暗目标,可以用invert_image进行颜色反转。
如果圆形结构元素半径过大,可能导致图像内部出现大的空洞;如果圆形结构元素半径过小,可能会使杂点消除得不完全,因此可以根据实际需要不断调整该参数。
上文中使用了opening算子进行开运算处理。该算子的原型如下:
opening(Region, StructElement : RegionOpening ::)
其中各参数的含义如下。
(1)参数1:Region 为输入的图像区域。
(2)参数2:StructElement 为输入的结构元素,该结构元素应提前指定。
(3)参数3:RegionOpening为输出的经开运算处理后的区域。
开运算的效果与腐蚀类似,其本质也是一种腐蚀操作。经开运算处理后,图像上的大面积的区
域依然能基本保持完整,而面积小的区域,如点或短线将被移除。
除了上文中的opening 算子以外,Halcon中与开运算有关的算子如下。(1)opening_circle:使用圆形结构元素对区域进行开运算处理。(2)opening_rectangle1:使用矩形结构元素对区域进行开运算处理。(3)opening golay:使用格雷字母表中的元素对区域进行开运算处理。
(4)opening_seq:分隔重叠的区域。该算子一般是erosionl、connection和dilation1算子的连
续使用。如果重叠的区域小于结构元素,相交的两个区域将被分隔开来。