1. 程式人生 > >最小二乘法和隨機抽樣一致性

最小二乘法和隨機抽樣一致性

1. 原理

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

leastSquares通過最小化測量資料與模型資料的平方和, 求出模型引數。

e=sum(Yif(Xi)) 其中ekt的二次函式, 求其最小, 即求其極值; 求偏導dk=0,dt=0。可以計算出kt值。
  • 隨機抽樣一致性(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, estimateAffine3D3等。

5. 參考