分析一则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')

 

结果:工具

 

步骤分析:spa

① 图像三角形主要由3根直线构成;设计

阈值化、skeleton提取骨架、将骨架(region)转为xld、将xld打散分割、筛选xld获得3条主xld、将这3条xld拟合成3条直线code

 

效果分析:blog

这种算法虽然步骤简单,可是其实鲁棒性并很差。主要风险在“筛选xld获得3条主xld”这一步,有时候,它没办法准确筛选到咱们想要的xld,这样后面的准确拟合也就无从谈起。图片

用过VisionPro的都知道,VisionPro它有抓边的卡尺工具,它直接做用于图像,简单分析就知道鲁棒性好得多。惋惜的是halcon并无直接提供相似工具,不过网上有大神作了个halcon本身的卡尺工具——rake函数。ci

 

除非线条特征特别明显的图片,否则不建议使用本例的算法去抓边,相似于rake的抓边工具鲁棒性更好,抓边能力也更强。it

固然,若是你足够有耐心,也能够根据本例以及halcon的测量(Measure)助手设计本身的抓边工具(函数)。

相关文章
相关标签/搜索