分析一則halcon抓邊擬合直線的小案例


例圖:

完整算法:

 1 read_image (Image, 'C:/Users/Administrator/Desktop/1.png')  2 threshold (Image, Regions, 0, 112)  3 
 4 skeleton(Regions,TriangleSkeleton)  5 
 6 gen_contours_skeleton_xld(TriangleSkeleton,TriangleContours,1,'filter')  7 
 8 segment_contours_xld(TriangleContours,ContoursSplit,'lines_circles', 5, 4, 2)  9 
10 select_contours_xld(ContoursSplit,SelectedContours, 'contour_length',100, 999, -0.5, 0.5) 11 
12 fit_line_contour_xld (SelectedContours, 'tukey', -1, 10, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist) 13 
14 *計算三個夾角 15 angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], Angle1) 16 angle_ll (RowBegin[0], ColBegin[0], RowEnd[0], ColEnd[0], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle2) 17 angle_ll (RowBegin[1], ColBegin[1], RowEnd[1], ColEnd[1], RowBegin[2], ColBegin[2], RowEnd[2], ColEnd[2], Angle3) 18 
19 Angle1:=abs(deg(Angle1)) 20 Angle2:=abs(deg(Angle2)) 21 Angle3:=abs(deg(Angle3)) 22 
23 dev_display (Image) 24 dev_display (SelectedContours) 25 disp_message (3600, '角度:' + Angle1 + '°、 ' + Angle2 + '°、 ' + Angle3 + '°', 'image', 20, 20, 'red', 'true')

 

結果:

 

步驟分析:

① 圖像三角形主要由3根直線構成;

閾值化、skeleton提取骨架、將骨架(region)轉為xld、將xld打散分割、篩選xld得到3條主xld、將這3條xld擬合成3條直線

 

效果分析:

這種算法雖然步驟簡單,但是其實魯棒性並不好。主要風險在“篩選xld得到3條主xld”這一步,有時候,它沒辦法准確篩選到我們想要的xld,這樣后面的准確擬合也就無從談起。

用過VisionPro的都知道,VisionPro它有抓邊的卡尺工具,它直接作用於圖像,簡單分析就知道魯棒性好得多。可惜的是halcon並沒有直接提供類似工具,不過網上有大神做了個halcon自己的卡尺工具——rake函數。

 

除非線條特征特別明顯的圖片,不然不建議使用本例的算法去抓邊,類似於rake的抓邊工具魯棒性更好,抓邊能力也更強。

當然,如果你足夠有耐心,也可以根據本例以及halcon的測量(Measure)助手設計自己的抓邊工具(函數)。

 


免責聲明!

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



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