OpenCV实现鲁棒直线与圆的拟合

 对于OpenCV中提供的直线拟合函数fitLine函数虽然提供了L1、L12、L2、Fair、Welsch、Huber等权重方法,但是在效果上仍然比不上商业算法,而且没有圆拟合的算法,所以重新实现了一下直线与圆的拟合算法,在这里记录下实现原理。

算法基于OpenCV中fitLine函数修改,增加了Tukey权重,权重函数如下(γ默认值2.718):

OpenCV实现鲁棒直线与圆的拟合_第1张图片

对于IRLS算法就不作赘述,OpenCV里有详细的实现,在这里主要介绍当干扰过多以至于IRLS算法也不起作用时的处理方式提供一个思路。

首先,利用第一次迭代的结果(直线或圆)计算各点的权重,然后对权重进行排序。后续迭代过程仅仅针对前N个数据进行拟合,每迭代一次就对权重进行更新排序,舍弃一部分数据不参与迭代过程,直至误差不再变化或者达到预设迭代次数为止。

附圆拟合公式:

OpenCV实现鲁棒直线与圆的拟合_第2张图片

OpenCV实现鲁棒直线与圆的拟合_第3张图片

 OpenCV实现鲁棒直线与圆的拟合_第4张图片

OpenCV实现鲁棒直线与圆的拟合_第5张图片

你可能感兴趣的:(笔记,opencv,图像处理,视觉检测,c++,算法)