ransac演算法
專案主頁
1、演算法簡介
隨機抽樣一致演算法(random sample consensus,ransac)。它是一種迭代的方法,用來在一組包含離群的被觀測資料中估算出數學模型的引數。 ransac是乙個非確定性演算法,在某種意義上說,它會產生乙個在一定概率下合理的結果,其允許使用更多次的迭代來使其概率增加。此ransac演算法在2023年由fischler和bolles首次提出。
ransac的基本假設是 「內群」資料可以通過幾組模型引數來敘述其資料分布,而「離群」資料則是不適合模型化的資料。 資料會受雜訊影響,雜訊指的是離群,例如從極端的雜訊或錯誤解釋有關資料的測量或不正確的假設。 ransac假定,給定一組(通常很小)的內群,存在乙個程式,這個程式可以估算最佳解釋或最適用於這一資料模型的引數。
2、範例
這裡用乙個簡單的例子來說明,在一組資料點中找到一條最適合的線。 假設,此有一組集合包含了內群以及離群,其中內群為可以被擬合到線段上的點,而離群則是無法被擬合的點。如果我們用簡單的最小平方法來找此線,我們將無法得到一條適合於內群的線,因為最小平方法會受離群影響而影響其結果。而ransac,可以只由內群來計算出模型,而且概率還夠高。 然而,ransac無法保證結果一定最好,所以必須小心選擇引數,使其能有足夠的概率。
3、概述
在資料中隨機選擇幾個點設定為內群
計算適合內群的模型
把其它剛才沒選到的點帶入剛才建立的模型中,計算是否為內群
記下內群數量
重複以上步驟多做幾次
比較哪次計算中內群數量最多,內群最多的那次所建的模型就是我們所要求的解
這裡有幾個問題
一開始的時候我們要隨機選擇多少點(n)
以及要重複做多少次(k)
4、引數確定
假設每個點時真正內群的概率為 w
w = 內群的數目/(內群數目+外群數目)通常我們不知道 w 是多少, w^n是所選擇的n個點都是內群的機率, 1-w^n 是所選擇的n個點至少有乙個不是內群的機率, (1 − w^n)^k 是表示重複 k 次都沒有全部的n個點都是內群的機率, 這邊定演算法跑 k 次以後成功的機率是p,那麼,
1 − p = (1 − w^n)^k
p = 1 − (1 − w^n)^k所以如果希望成功機率高,p = 0.99, 當n不變時,k越大,p越大, 當w不變時,n越大,所需的k就越大, 通常w未知,所以n 選小一點比較好。
5、應用
ransac常被用在電腦視覺 ,例如,對應點問題 和 估算立體攝影機雙眼相對點的基本矩陣。
6、c實現原始碼
float ransac
( point2d32f* points,
size_t cnt,
float *line,
int numforestimate,
float successprobability,
float maxoutlierspercentage
) //擬合
pointcnt = 0;
for(int k = 0; k < numdataobjects; k++)
}fitline2d(subpoints, pointcnt, templine);
float a = templine[1]/templine[0];
float b = templine[3] - a*templine[2];
//擬合完整之後要對擬合的結果進行鑑定,選出最優的結果
votecnt = 0;
for(int k = 0; k < cnt; k++)
}if(votecnt > maxvotecnt)
} //當inliers的比例比較高的時候就可以直接取該值作為最優解
// if(inlierspercentage > 0.2)
//
} return inlierspercentage;
}
7、優缺點
ransac的優點是它能魯棒的估計模型引數。例如,它能從包含大量局外點的資料集中估計出高精度的引數。ransac的缺點是它計算引數的迭代次數沒有上限;如果設定迭代次數的上限,得到的結果可能不是最優的結果,甚至可能得到錯誤的結果。ransac只有一定的概率得到可信的模型,概率與迭代次數成正比。ransac的另乙個缺點是它要求設定跟問題相關的閥值。
ransac只能從特定的資料集中估計出乙個模型,如果存在兩個(或多個)模型,ransac不能找到別的模型。
利用 ransac 演算法擬合平面
最近專案中遇到乙個問題,老闆給了一組資料然後要求獲取其中處於同乙個平面上的資料點的資訊,很明顯就是使用ransac 演算法進行處理。這裡我們使用自己的理解來說明下這個演算法。1.首先我們從給定的資料集中隨機挑選幾組資料獲取乙個模型 最好可以保證隨機挑選的資料不重複 2.將這個擬合方程作用於所有的資料...
直線擬合 matlab基礎直線擬合
本文介紹利用矩陣除法進行最小二乘直線擬合 矩陣除法最小二乘直線擬合的函式檔案,參考matlab2018從入門到精通 中文版 function k,b linefit x,y n length x x reshape x,n,1 生成列向量 y reshape y,n,1 a x,ones n,1 b...
擬合專題 直線擬合
閒來無事,整理下擬合方面的一些方法 部分內容參考gloomyfish grooveboy等部落格,在此先行謝過 直線擬合方法主流方法有最小二乘 hough兩種,其他如halcon上的最小距離也是最小二乘的思想,其他如hough變換和最小二乘結合 混沌粒子群結合等等 1 最小二乘擬合直線 曲線擬合中最...