直線的擬合是幾何基元的擬合基礎部分。平常我們表示平面上一條直線用
y=ux+v
此時,u-v平面上每個點(u,v)都可以唯一對應一條x-y平面上的一條直線。
對於直線y=ux+v可以轉換成v=y-ux,可見,這條直線上每個點都對應著u-v平面上的一條直線,這些直線會相交於(u,v)點,利用這個性質可以檢測共線點。實際上,上述的變化被稱為hough變換。
對於實際的應用中,由於y=ux+v並不是能表示所有的直線(如u=∞時,x=c直線無法表示)。此時,有一種直線的黑塞正規化
αr+βc+γ=0
令α²+β²=1(拉格朗日運算元),則點(r,c)到該直線的舉例可直接用αr+βc+γ得到。
通過一些列的點(ri,ci),i=1,……n來擬合一條直線,可以通過最小二乘法得到,即對這些點到直線的舉例的平方和進行最小化。
ε²=∑(αr+βc+γ)²
約束條件(α²+β²=1)。
以上這種方法對於大的離群值不足夠魯棒。這裡離群值就是指與正確擬合出來直線偏差很大的點,魯棒指這個你和方法對這些允許偏差之外的可行性,比如如果擬合演算法對離群值的影響可以見到最小甚至消除離群值的影響,此時演算法的魯棒性就好。而最小平方擬合對於大的離群值明顯不夠魯棒,因為離群點對擬合直線的影響和一般點對擬合直線的影響是相同的,從而會引起擬合直線的不準確。為了減少這些遠離點(離群點)的影響,可以為每個點引入權重ωi,最小化過程變為
ε²=∑ωi*(αr+βc+γ)²-λ*(α²+β²-1)*n
引入權重ωi之後,又有新的問題出現了,那就是怎麼定義這權重呢?(每個點的權重該如何定義)。這裡的解決方法是使用多次迭代。
用多次迭代來擬合直線,第一次迭代中使用權重ωi=1.,i=1,……n,即執行乙個標準的直線擬合先擬合出一條近似直線,並通過此計算出點到線的距離δi。應用權重函式ω(δ)來定義後續的迭代權重。
權重函式也有很多種,最常用的有兩種:huber權重函式和tukey權重函式。
權重函式就是定義削波值來定義那些點會被視為離群值,由此可以削弱離群值的權重。利用這種方法,迭代中的初始擬合直線仍然是標準的最小平方和擬合,給出的結果是被離群值干擾的,所以權重函式不僅會削弱離群值,也可能丟掉一些正常值。對此,還需要有其他的魯棒擬合方法。ransac(the random sample consensus)演算法就是這樣一組演算法。
ransac演算法的核心就是通過隨機選擇最少數量的點(直線為兩點)來構造乙個解(擬合),然後檢查存在多少與此解相一致的點。如此不斷重複,直到點的一致率達到一定的值(如99%),選擇一直點數量最大的解作為擬合結果。
通過對直線擬合的學習,圓和橢圓的擬合基本也是類似的思路。
線性擬合函式
線性擬合函式 regress 呼叫格式 b regress y,x b,bint,r,rint,stats regress y,x b,bint,r,rint,stats regress y,x,alpha 該函式求解線性模型 y x 是p 1的引數向量 是服從標準正態分佈的隨機干擾的n 1的向量 ...
MATLAB擬合函式
1.線性擬合函式 regress 呼叫格式 b regress y,x 2.多項式曲線擬合函式 polyfit 呼叫格式 p polyfit x,y,n p,s polyfit x,y,n 說明 x,y為資料點,n為多項式階數,返回p為冪次從高到低的多項式係數向量p。矩陣s用於生成 值的誤差估計。3...
函式擬合3
所謂函式擬合,就是給定一些輸入點,輸出乙個函式曲線。選擇的基函式會直接影響線性組合函式的表達能力。當取樣點較多,而係數較少時,會出現欠擬合,表達能力不夠。當取樣點較少,而係數較多時,會出現過擬合。為了防止過擬合,可以百分之九十的資料擬合,百分之十的資料驗證。有時候很難確定基函式,可以選取一些冗餘的,...