2015-03-31 141 views
0

我正在試驗RANSAC算法,即本文中的RANSAC實現:http://cg.cs.uni-bonn.de/en/publications/paper-details/schnabel-2007-efficient/爲什麼RANSAC每次在同一個點雲上運行時會給我不同的結果?

我使用的代碼基礎是作者提供的。我試圖將物體,比如用Kinect 1獲得的杯子分割成原始形狀。

我的問題是,每當我在相同的物體點雲上運行原始形狀檢測時,我會得到不同的結果,就像一次運行,我會檢測到3個圓柱體和一個圓錐體,並在下一次運行時檢測到2圓環和1個球體。

我知道候選對象基元的第一個點是隨機選取的。所以在代碼中,我將隨機種子參數設置爲一個靜態數字。在這種情況下,我的結果總是與它應該是一樣的。但是,即使使用像實際時間那樣的非靜態種子,RANSAC是否應該產生相同或幾乎相同的結果?

回答

1

RANSAC代表RANdom SAmple Consensus,它是一種迭代算法,它在習慣形式下,在最大迭代次數之後停止,或者如果達到某個標準(誤差最小化),該算法會停止。 「隨機」部分意味着根據數據集的不同,應用RANSAC並不總能得到相同的結果,特別是當它由於達到最大迭代次數而不是最小化誤差而停止時。有許多數值求解器表現這種方式。 In computing, a Monte Carlo algorithm is a randomized algorithm whose running time is deterministic, but whose output may be incorrect with a certain (typically small) probability.這與所謂的「拉斯維加斯」算法相反。 In computing, a Las Vegas algorithm is a randomized algorithm that always gives correct results; that is, it always produces the correct result or it informs about the failure,但它不能保證在一組時間/計算資源內這麼做。

現在,我不知道你提到的具體實現,但這是它是如何工作的那種算法。

0

好吧,由於RANSAC有一個隨機組件,算法的精度(結果的可變性)取決於您嘗試檢測和分割的場景/對象的複雜程度。

在運行基於RANSAC的算法時,有許多因素會影響準確度和精度。它通常是數據分辨率的函數(在這種情況下爲點密度),對象的複雜性以及檢測和分割中使用的方法。

通常,在處理中使用隨機組件時,一個好主意是多次運行相同的場景/對象,並通過某種投票(頻率主義方法),選擇最可能的結果。

相關問題