PCL RANSAC取樣一致性演算法

2021-09-28 23:59:13 字數 3197 閱讀 2132

在計算機視覺領域廣泛的使用各種不同的取樣一致性引數估計演算法用於排除錯誤的樣本,樣本不同對應的應用不同,例如剔除錯誤的配準點對,分割出處在模型上的點集,pcl中以隨機取樣一致性演算法(ransac)為核心,同時實現了五種類似與隨機取樣一致形演算法的隨機引數估計演算法,例如隨機取樣一致性演算法(ransac)最大似然一致性演算法(mlesac),最小中值方差一致性演算法(lmeds)等,所有估計引數演算法都符合一致性原則。在pcl中設計的取樣一致性演算法的應用主要就是對點雲進行分割,根據設定的不同的幾個模型,估計對應的幾何引數模型的引數,在一定容許的範圍內分割出在模型上的點雲。

(1) ransac隨機取樣一致性演算法的介紹

ransac是「random sample consensus(隨機抽樣一致)」的縮寫。它可以從一組包含「局外點」的觀測資料集中,通過迭代方式估計數學模型的引數。它是一種不確定的演算法——它有一定的概率得出乙個合理的結果;為了提高概率必須提高迭代次數。

數 據分兩種:有效資料(inliers)和無效資料(outliers)。偏差不大的資料稱為有效資料,偏差大的資料是無效資料。如果有效資料佔大多數,無 效資料只是少量時,我們可以通過最小二乘法或類似的方法來確定模型的引數和誤差;如果無效資料很多(比如超過了50%的資料都是無效資料),最小二乘法就 失效了,我們需要新的演算法

乙個簡單的例子是從一組觀測資料中找出合適的2維直線。假設觀測資料中包含局內點和局外點,其中局內點近似的被直線所通過,而局外點遠離於直線。簡單的最 小二乘法不能找到適應於局內點的直線,原因是最小二乘法盡量去適應包括局外點在內的所有點。相反,ransac能得出乙個僅僅用局內點計算出模型,並且概 率還足夠高。但是,ransac並不能保證結果一定正確,為了保證演算法有足夠高的合理概率,我們必須小心的選擇演算法的引數。

(a) 包含很多局外點的資料集 (b) ransac找到的直線(局外點並不影響結果)

(2) 最小中值法(lmeds)

lmeds的做法很簡單,就是從樣本中隨機抽出n個樣本子集,使用最大似然(通常是最小二乘)對每個子集計算模型引數和該模型的偏差,記錄該模型參 數及子集中所有樣本中偏差居中的那個樣本的偏差(即med偏差),最後選取n個樣本子集中med偏差最小的所對應的模型引數作為我們要估計的模型引數。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#pragma comment(lib,"user32.lib")

#pragma comment(lib, "gdi32.lib")

boost::shared_ptr<:visualization::pclvisualizer>

******vis

(pcl::pointcloud<:pointxyz>

::constptr cloud)

/*對點雲進行初始化,並對其中乙個點雲填充點雲資料作為處理前的的原始點雲,其中大部分點雲資料是基於設定的圓球和平面模型計算

而得到的座標值作為局內點,有1/5的點雲資料是被隨機放置的,作為局外點。

*/int

main

(int argc,

char

** ar**)

else

} std::vector<

int> inliers;

//儲存局內點集合的點的索引的向量

//建立隨機取樣一致性物件

pcl::sampleconsensusmodelsphere<:pointxyz>

::ptr

model_s

(new pcl::sampleconsensusmodelsphere<:pointxyz>

(cloud));

//針對球模型的物件

pcl::sampleconsensusmodelplane<:pointxyz>

::ptr

model_p

(new pcl::sampleconsensusmodelplane<:pointxyz>

(cloud));

//針對平面模型的物件

if(pcl::console::

find_argument

(argc, ar**,

"-f"

)>=0)

else

if(pcl::console::

find_argument

(argc, ar**,

"-sf"

)>=0)

// 複製估算模型的所有的局內點到final中

pcl::copypointcloud<:pointxyz>

(*cloud, inliers,

*final)

;// 建立視覺化物件並加入原始點雲或者所有的局內點

取樣一致性探測平面

pcl中所列有兩個ransac與lmeds兩種取樣方法,原理在這裡不做詳細介紹了。但是涉及到如何將分割的物件單獨儲存出來,以及使用不同顏色進行顯示,官網上介紹比較少。現給出乙個案例,進行講解,以ransac探測平面為例,其他的以及lmeds不再做詳細介紹。ransac探測多個平面 include i...

強一致性 弱一致性 最終一致性

這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...

RANSAC 隨機取樣一致性演算法

ransac範例的正式描述如下 首先,要給定 1乙個模型,該模型需要最少n個資料點去例項化它的自由引數 2一組資料點p,p中包含資料點的數量 p 大於n。然後,從p中隨機地選擇n個點 組成p的乙個子集s1 並例項化這個模型 構造成m1 接下來,利用例項化的模型m1去測定p中點的某個子集s1 這些點相...