1、直线和圆拟合概述html
直线和圆的拟合,是视觉项目中很是常见的需求,可是对新手来讲,在Halcon中实现却比较困难。算法
其基本思路都是:函数
① 分割出边缘,获得XLD(gen_contours_skeleton_xld、edges_sub_pix等)工具
② 将XLD进行分割、筛选(segment_contours_xld、select_contours_xld)spa
③ 将XLD进行拟合(fit_line_contour_xld、fit_circle_contour_xld等)cdn
直线的拟合参考:http://www.javashuo.com/article/p-plkdkesr-eu.htmlhtm
虽然思路比较固定,可是算子组合、调参仍是须要至关的技巧,而且不少时候效果都不尽如人意。blog
若是有用过康耐视的VisionPro的话,你会发现里面的抓圆、抓边操做很是简单。只须要用卡尺去拟合,而后简单设置参数便可。ip
2、Halcon测量助手ci
实际上,Halcon是很是强大的,只是有时候没有那么方便而已。可是已经有大神封装了抓圆和抓边的工具函数。其基本原理主要参考Halcon自带的“测量助手”:
它涉及的主要算子以下,你们有时间能够本身研究一下:
gen_measure_rectangle二、gen_measure_arc(gen_measure_arc.hdev)
measure_pos :获得测量区域内边缘处的交点坐标,以及交点之间的直线距离或弧线距离。
measure_pairs:与measure_pos相似
3、卡尺工具(rake、spoke)
rake和spoke工具函数就是大神封装的抓边和抓圆工具。下载连接:
https://files-cdn.cnblogs.com/files/xh6300/find_line_find_circle.zip
解压之后将文件夹放在下面的路径下便可(根据Halcon安装路径不一样而有所不一样):
C:\Program Files\MVTec\HALCON-12.0\procedures
该卡尺工具执行过程为:
① 肯定边缘检测方向
② 高斯滤波
③ 执行投影处理
④ 执行微分处理
⑤ 设置边缘敏感度、边缘极性、边缘的位置
⑥ 边缘执行亚像素处理
4、拟合时不一样算法参数的说明
一、fit_line_contour_xld
对于参数Algorithm中的一些类型解释以下:
regression:回归,标准的最小二乘法拟合
huber:加权的最小二乘法拟合,异常值的影响被减少基于Huber方法(越远权值越低)
tukey:加权的最小二乘法拟合,异常值的影响被减少基于Tukey方法(异常值直接抛掉)
drop:加权的最小二乘法拟合,异常值的影响被消除
gauss:加权的最小二乘法拟合,异常值的影响被减少基于最逼近线上的全部其轮廓点的平均值和距离标准方差
参考:http://blog.sina.com.cn/s/blog_d38f8be50102wbtp.html
二、fit_circle_contour_xld
参数Algorithm的可选项解释以下:
algebraic:这种方法减小了轮廓点与结果圆之间的代数距离
ahuber:相似于algebraic,轮廓点被加权以减少异常值的影响基于方法Huber
atukey:相似于algebraic,轮廓点被加权以减少异常值的影响基于方法Tukey
geometric:该法减小了轮廓点与结果圆之间的几何距离,该法被统计是最优的,但占用不少计算时间。若是轮廓点被噪声干扰严重,能够考虑使用该方法。
geohuber:相似于geometric,轮廓点被加权以减少异常值的影响基于方法Huber
geotukey:相似于geometric,轮廓点被加权以减少异常值的影响基于方法Tukey