在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整除時,因為在這里兩個整型相除會出現精度的損失,從而造成了可能會出現這段輪廓的有幾個像素點訪問不到的情況。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM