在Halcon中如何将一段轮廓等分

  在视觉算法的设计中,有时候会遇到将一段轮廓等分成N段的需求,而Halcon中对于这一需求是没有现成的算子支持的,这个时候就需要我们自己去设计来实现这一功能了。我的思路是这样的,轮廓是由一个个像素点或者亚像素点组成,首先得到轮廓的像素点集合,然后将这些点等分成几个集合,通过gen_contour_polygon_xld把等分好的点集合连接在一起即可。代码如下:


 1 get_contour_xld (OneContour, Row, Col)
 2 if(|Row| < Num)
 3     return ()
 4 endif
 5 gen_empty_obj (Bisection_Contour)
 6 contourNum := |Row|/Num
 7 for Index := 0 to Num - 1 by 1
 8     beginPoint := Index * (contourNum) - 1
 9     if (beginPoint < 0)
10         beginPoint := 0
11     endif
12     Rowx := Row[beginPoint : (Index + 1) * (contourNum) - 1]
13     Colx := Col[beginPoint: (Index + 1) * (contourNum) - 1]
14     gen_contour_polygon_xld (Contour,Rowx,Colx)
15     concat_obj (Bisection_Contour, Contour, Bisection_Contour)
16 endfor
17 return ()

  


  以下为将一段圆形轮廓等分的实例代码

1 read_image (Circle, 'C:/Users/Niqiao/Desktop/circle.png')
2 edges_sub_pix (Circle, Edges, 'canny', 1, 20, 40)
3 bisection_contour (Edges, Bisection_Contour, 7)
圆轮廓等分

  以上为封装好的算法,我将其命名为:bisection_contour。但是需要注意的是,如果一段轮廓的点集数量不能将等分的段数Num整除时,因为在这里两个整型相除会出现精度的损失,从而造成了可能会出现这段轮廓的有几个像素点访问不到的情况。

posted @ 2020-07-22 09:21  木乔ni  阅读(2476)  评论(0编辑  收藏  举报