1. 原理

  • 最小二乘法(leastSquares)的原理​​1​

leastSquares通过最小化测量数据与模型数据的平方和, 求出模型参数。

e=sum(Yi−f(Xi))

其中 e是k与 t的二次函数, 求其最小, 即求其极值; 求偏导dk=0,dt=0。可以计算出 k与t值。

  • 随机抽样一致性(ransac)的原理​​2​

ransac的线性拟合算法步骤大致如下:

while 最大尝试次数
从观测点集中随机取两点, 计算出直线的参数k, t(或者k用向量表示), 得出一个候选的直线模型.
计算候选直线与整个点集的匹配程度,可以采用统计在直线上(或到直线的距离小于一个阈值)的点的个数.
保留匹配程度最好的直线的参数.
如果本次尝试匹配点的个数占整个点集大部分, 超出预期(阈值), 提前结束尝试.
endwhile

匹配程度也可以用其他指标来衡量, 替换上面的匹配计算.

两者的共同点都是要首先确定模型, 模型分为线性模型非线性模型. 一般常见的应用是线性模型, 如f(x)=kx+t。

2. 误差/性能分析

  • leastSquares的误差为e, 但一般用相关系数r来表示, r越接近1, 模型越好; r等于0, 拟合无意义, 模型不实际情况不符合.
  • ransac的误差一般用在拟合直线的一个范围内, 在此范围内点的个数占整个点集比例来衡量.

3. 差别

在应用上, 二者的差别是:

  • leastSquares对噪声比较敏感, 算法简单;
  • ransac能去除一些噪声的干扰, 如果假定模型与实际的情形一致, 那么一般由观测数据计算的ransac模型, 更能接近实际情况, 去除观测或过程噪声干扰, 算法稍微复杂些.

最小二乘法也可以先进行去除离群点的数据预处理, 应用ransac或穷举的方法, 利用任意两点计算一条直线, 将距离直线太远的点设置为离群点, 距离直线较近的点为符合条件的点. 循环处理, 比较群内点的个数, 记录下群内点数最多的集合. 这些点就是 去除离群点的点集合, 利用这些点再进行最小二乘法拟合.

4. 应用

在图像处理及图形学中, 这两种算法经常被用到, 特别是ransac.
在OpenCV的三维重建和标定模块中有很多应用, 如solvePnPRansac, findHomography, estimateAffine3D​3​​等。

5. 参考

  1. RANSAC与最小二乘算法的应用
  2. RANSAC与最小二乘法实现

  1. ​leastSquares​​​​↩​
  2. ​ransac​​​​↩​
  3. ​opencv-ransac​​​​↩​