机器视觉——(三)halcon的XLD技术拟合圆
利用halcon提供的操作XLD的算子,可以对XLD轮廓进行优化、选择、拟合等操作。以下例子提取XLD轮廓并选取需要的轮廓来拟合工件的外径圆。
基本步骤:
- 对图像进行平滑处理。常用算子:滤波类算子。
- 边缘提取。常用算子:edges_sub_pix等提取边缘的算子。
- 初次挑选边缘、分类边缘、根据边缘的特性来筛选边缘。总之,最终挑选出想要的边缘。常用算子:select_shape_xld、segment_contours_xld。
- 边缘的连接。根据需求来连接轮廓。 常用算子:union_*类算子。
- 形状拟合。根据最终轮廓来拟合目标形状。常用算子:fit_*类算子。
*平滑
median_image(Image,ImageMedian,'square', 5, 'mirrored')
*canny边缘
edges_sub_pix(Image,edges,'canny',1,20,40)
*第一次挑选出长的轮廓,有效滤除假边缘
select_shape_xld(edges,select_edges,'area','or',2000,9999999)
*将XLD轮廓分割为直线段、圆(圆弧)、椭圆弧。
segment_contours_xld (select_edges, ContoursSplit, 'lines_circles', 5, 4, 3)
*根据轮廓点面积挑选出长的圆形轮廓
select_shape_xld(ContoursSplit,select_edges2,'area','or',4000,999999)
*根据圆度挑选轮廓
select_shape_xld(select_edges2,select_edges3,'circularity','or',0,0.15)
count_obj (select_edges3, Number)
*连接轮廓
union_cocircular_contours_xld (select_edges3, CircleContours, rad(45), rad(0), rad(45), 300, 50, 50, 'true', 10)
*利用连接的轮廓拟合圆
fit_circle_contour_xld (CircleContours, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
*拟合圆的坐标、半径
拟合结果: