點雲分割可謂點雲處理的精髓,也是三維影象相對二維影象最大優勢的體現。不過多插一句,自niloy j mitra教授的global contrast based salient region detection出現,最優分割到底鹿死誰手還不好說。暫且不論他開掛的影象處理演算法,先安心做乙個pcl吹~
點雲分割的目的提取點雲中的不同物體,從而實現分而治之,突出重點,單獨處理的目的。而在現實點雲資料中,往往對場景中的物體有一定先驗知識。比如:桌面牆面多半是大平面,桌上的罐子應該是圓柱體,長方體的盒子可能是牛奶盒......對於複雜場景中的物體,其幾何外形可以歸結於簡單的幾何形狀。這為分割帶來了巨大的便利,因為簡單幾何形狀是可以用方程來描述的,或者說,可以用有限的引數來描述複雜的物體。而方程則代表的物體的拓撲抽象。於是,ransac演算法可以很好的將此類物體分割出來。
ransac演算法(隨機取樣一致)原本是用於資料處理的一種經典演算法,其作用是在大量雜訊情況下,提取物體中特定的成分。下圖是對ransac演算法效果的說明。圖中有一些點顯然是滿足某條直線的,另外有一團點是純雜訊。目的是在大量雜訊的情況下找到直線方程,此時雜訊資料量是直線的3倍。
如果用最小二乘法是無法得到這樣的效果的,直線大約會在圖中直線偏上一點。關於隨機取樣一致性演算法的原理,在wiki百科上講的很清楚,甚至給出了偽**和matlab,c**。見** 我想換乙個不那麼嚴肅或者說不那麼學術的方式來解釋這個演算法。
實際上這個演算法就是從一堆資料裡挑出自己最心儀的資料。所謂心儀當然是有個標準(目標的形式:滿足直線方程?滿足圓方程?以及能容忍的誤差e)。平面中確定一條直線需要2點,確定乙個圓則需要3點。隨機取樣演算法,其實就和小女生找男朋友差不多。
從人群中隨便找個男生,看看他條件怎麼樣,然後和他談戀愛,(平面中隨機找兩個點,擬合一條直線,並計算在容忍誤差e中有多少點滿足這條直線)
第二天,再重新找個男生,看看他條件怎麼樣,和男朋友比比,如果更好就換新的(重新隨機選兩點,擬合直線,看看這條直線是不是能容忍更多的點,如果是則記此直線為結果)
第三天,重複第二天的行為(迴圈迭代)
終於到了某個年齡,和現在的男朋友結婚(迭代結束,記錄當前結果)
顯然,如果乙個女生按照上面的方法找男朋友,最後一定會嫁乙個好的(我們會得到心儀的分割結果)。只要這個模型在直觀上存在,該演算法就一定有機會把它找到。優點是雜訊可以分布的任意廣,雜訊可以遠大於模型資訊。
這個演算法有兩個缺點,第一,必須先指定乙個合適的容忍誤差e。第二,必須指定迭代次數作為收斂條件。
綜合以上特性,本演算法非常適合從雜亂點雲中檢測某些具有特殊外形的物體。
pcl支援了大量幾何模型的ransac檢測,可以非常方便的對點雲進行分割。其呼叫方法如下:
//除了平面以外,pcl幾乎支援所有的幾何形狀。作為點雲分割的基礎演算法,ransac很強大且必收斂,可以作為機械人抓取,識別等後續任務的前處理。建立乙個模型引數物件,用於記錄結果
pcl::modelcoefficients::ptr coefficients (new
pcl::modelcoefficients);
//inliers表示誤差能容忍的點 記錄的是點雲的序號
pcl::pointindices::ptr inliers (new
pcl::pointindices);
//建立乙個分割器
pcl::sacsegmentationseg;
//optional
seg.setoptimizecoefficients (true
);
//mandatory-設定目標幾何形狀
seg.setmodeltype (pcl::sacmodel_plane);
//分割方法:隨機取樣法
seg.setmethodtype (pcl::sac_ransac);
//設定誤差容忍範圍
seg.setdistancethreshold (0.01
);
//輸入點雲
seg.setinputcloud (cloud);
//分割點雲
seg.segment (*inliers, *coefficients);
PCL 低層次視覺 點雲濾波(初步處理)
點雲濾波是點雲處理的基本步驟,也是進行 high level 三維影象處理之前必須要進行的預處理。其作用類似於訊號處理中的濾波,但實現手段卻和訊號處理不一樣。我認為原因有以下幾個方面 點雲不是函式,對於複雜三維外形其x,y,z之間並非以某種規律或某種數值關係定義。所以點雲無法建立橫縱座標之間的聯絡。...
PCL 低層次視覺 點雲濾波(基於點雲頻率)
今天在閱讀分割有關的文獻時,驚喜的發現,點雲和影象一樣,有可能也存在頻率的概念。但這個概念並未在文獻中出現也未被使用,謹在本博文中濫用一下 高頻 一詞。點雲表達的是三維空間中的一種資訊,這種資訊本身並沒有一一對應的函式值。故點雲本身並沒有在講訴一種變化的訊號。但在抽象意義上,點雲必然是在表達某種訊號...
PCL 低層次視覺 關鍵點檢測(Harris)
除去narf這種和特徵檢測聯絡比較緊密的方法外,一般來說特徵檢測都會對曲率變化比較劇烈的點更敏感。harris演算法是影象檢測識別演算法中非常重要的乙個演算法,其對物體姿態變化魯棒性好,對旋轉不敏感,可以很好的檢測出物體的角點。甚至對於標定演算法而言,harris角點檢測是使之能成功進行的基礎。ha...