在視覺算法的設計中,有時候會遇到將一段輪廓等分成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整除時,因為在這里兩個整型相除會出現精度的損失,從而造成了可能會出現這段輪廓的有幾個像素點訪問不到的情況。
