代码如下(也可打开HDevelop中浏览示例程序中的circles.hdev):
只列出了部分重要代码,算子的深度翻译和解析可以参考我的专栏内的halcon算子,有详细讲解
fast_threshold (Image, Region, 0, 120, 7)
由于图片基本没有什么干扰,只是黑白,属于很理想的图片,所有可以直接快速阈值就可以了,不需要太多的预处理,使用fast_threshold直接选出0-120灰度值的部分,7这个参数在我的halcon算子中有详细说明,可以理解为就是一个加速算子,使用的一般范围是2 ≤ MinSize ≤ 200,在大部分工控机上使用,只要不是存在大量的循环,时间上基本忽略,所以在这里设置7和设置100是一样的;
boundary (Region, RegionBorder, 'inner')
快速阈值操作后,可以得出上图红色部分,因为我们最终的目标是要得到中间的那几段圆弧,进而你合成圆;所以下一步肯定是提取边缘,使用boundary操作得到边界,但是从boundary的定义我们可以得知,boundary只是把一个区域缩小到它的边界,放大图片之后我们可以看出,boundary只是像素级的,为了得到更高的精度,需要提取xld轮廓;
clip_region_rel (RegionBorder, RegionClipped, 5, 5, 5, 5)
从上图中可以看到,在使用boundary后,得到了很多干扰边界,首先需要去除干扰边界,只留下中间的边界,也就是去除四边,clip_region_rel就是去除边界的功能,后面的四个参数控制四条边多向内裁剪5个像素(详细算子解释可以参考我的专栏内的halcon算子),最终得出如下图所示的边界: