read_image (Image,'data/shapes')
*将图像进行通道分解,分别转换为3个通道的RGB图像
decompose3 (Image, Red, Green, Blue)
*使用颜色转换将 RGB的3个通道图像转化为HSV通道图像
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
*对饱和度通道的图像进行阈值处理
threshold (Saturation, Regions,180,255)
*创建圆形结构元素,用于闭运算
gen_circle(StructElement,10,10,10)
*对图像中较亮的区域进行闭运算处理,填补各自轮廓中的小空隙
closing(Regions,StructElement,Large)
dev_clear_window ()
dev_display (Large)
之所以选择对饱和度通道的图像进行阈值处理,是因为这个通道的图像符合暗背景、亮目标。
经过闭运算后,区域内的小缝隙被填补,选区变得封闭。
上文中使用了closing算子进行闭运算处理。该算子的原型如下:
closing(Region, StructElement : RegionClosing ::)
其中各参数的含义如下。
(1)参数1:Region 为输入的图像区域。
(2)参数2:StructElement 为输入的结构元素,如圆形、矩形等。
(3)参数3:RegionClosing 为输出的经闭运算处理后的区域。
闭运算也是一种扩张的操作。经闭运算处理后,图像上的大面积的区域依然能基本维持原状,而面积小的区域之间的空隙和区域内部的小孔将被封闭。
该算子本质虽然是扩张,但并不会将不同的区域合并,区域之间仍保持相对独立。
除了上文中的closing算子以外,Halcon中与闭运算有关的算子如下。
(1) closing_circle :使用圆形结构元素对区域进行闭运算处理。
(2) closing_golay:使用格雷字母表中的元素对区域进行闭运算处理。
(3)closing_rectangle1:使用矩形结构元素对区域进行闭运算处理。
总体来说,开运算适合去除图上的杂点和噪声等非关键的元素。而闭运算则相反,它是用于填
补区域中的小空隙。开运算和闭运算都不会改变主体部分的形态。