日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多帧点云数据拼接合并_PCL点云处理实践(二):点云的处理和拼接

發(fā)布時間:2024/7/23 编程问答 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多帧点云数据拼接合并_PCL点云处理实践(二):点云的处理和拼接 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

濾除背景

我們獲得的點云可能包含一部分背景的點云。要去除背景,只保留人體信息,最簡單的方式是使用直通濾波器濾除較遠點。這部分代碼如下:1

2

3

4

5

6pcl::PassThrough<:pointxyz>pass; //設(shè)置濾波器對象

pass.setInputCloud(cloud); //設(shè)置輸入點云

pass.setFilterFieldName("z"); //設(shè)置過濾時所需要點云類型的z字段

pass.setFilterLimits(0.0,1.0); //設(shè)置在過濾字段上的范圍

//pass.setFilterLimitsNegative (true); //設(shè)置保留范圍內(nèi)的還是過濾掉范圍內(nèi)的

pass.filter(*cloud_filtered); //執(zhí)行濾波,保存過濾結(jié)果在cloud_filtered

濾除背景也可以通過Kinect SDK實現(xiàn),這部分可以參考SDK的“游戲者ID”。

移除離群點

激光掃描通常會產(chǎn)生密度不均勻的點云數(shù)據(jù)集。另外,測量中的誤差會產(chǎn)生稀疏的離群點,使效果更糟。因此對每個點的鄰域進行一個統(tǒng)計分析,并修剪掉那些不符合一定標(biāo)準(zhǔn)的點。1

2

3

4

5pcl::StatisticalOutlierRemoval<:pointxyz> sor;// 創(chuàng)建濾波器對象

sor.setInputCloud(cloud); //設(shè)置呆濾波的點云

sor.setMeanK(50); //設(shè)置在進行統(tǒng)計時考慮查詢點鄰近點數(shù)

sor.setStddevMulThresh(1.0); //設(shè)置判斷是否為離群點的閾值

sor.filter(*cloud_filtered); //執(zhí)行濾波處理保存內(nèi)點到cloud_filtered

下采樣

為什么要進行下采樣?

Kinect直接得到的點云數(shù)據(jù)非常龐大,由于我們下一步要對其進行配準(zhǔn)和拼接處理,如果不對點云進行適當(dāng)精簡,運算時間可能非常長。因此,要等效一個Point較少的點云,取代原始點云進行配準(zhǔn)操作。

PCL實現(xiàn)的VoxelGrid類通過輸入的點云數(shù)據(jù)創(chuàng)建一個三維體素柵格(可把體素柵格想象為微小的空間三維立方體的集合),然后在每個體素(即,三維立方體)內(nèi),用體素中所有點的重心來近似顯示體素中其他點,這樣該體素就內(nèi)所有點就用一個重心點最終表示,對于所有體素處理后得到過濾后的點云。1

2

3

4pcl::VoxelGrid<:pointcloud2>sor; //創(chuàng)建濾波對象

sor.setInputCloud(cloud); //設(shè)置需要過濾的點云給濾波對象

sor.setLeafSize(0.01f,0.01f,0.01f); //設(shè)置濾波時創(chuàng)建的體素大小為1cm立方體

sor.filter(*cloud_filtered); //執(zhí)行濾波處理,存儲輸出cloud_filtered

點云拼接

配準(zhǔn)

什么是配準(zhǔn)

配準(zhǔn)是將一個點云找到與另一個點云相對應(yīng)的部分,并得到兩個點云之間的轉(zhuǎn)換矩陣。

配準(zhǔn)之后,我們就可以將一個點云轉(zhuǎn)換到另一個點云所在的坐標(biāo)系內(nèi)。在同一個坐標(biāo)系內(nèi)的點云可以進行拼接,形成一個更大的點云。

PCL內(nèi)置了許多配準(zhǔn)算法,例如迭代最近點對(ICP)算法,正態(tài)分布變換算法,隨機一致采樣(ransac)算法,等等。實際使用中,往往需要根據(jù)點云的特征選取合適的算法。這里使用了ransac算法。

隨機抽樣一致性算法(RANSAC)

概述

RANSAC是“RANdom SAmple Consensus(隨機抽樣一致)”的縮寫。它可以從一組包含“局外點”的觀測數(shù)據(jù)集中,通過迭代方式估計數(shù)學(xué)模型的參數(shù)。

RANSAC通過反復(fù)選擇數(shù)據(jù)中的一組隨機子集來達成目標(biāo)。被選取的子集被假設(shè)為局內(nèi)點,并進行驗證。

算法

RANSAC算法的輸入是一組觀測數(shù)據(jù),一個可以解釋或者適應(yīng)于觀測數(shù)據(jù)的參數(shù)化模型,一些可信的參數(shù)。

模型對應(yīng)的是空間中一個點云數(shù)據(jù)到另外一個點云數(shù)據(jù)的旋轉(zhuǎn)以及平移。

第一步隨機選取點云中的一個點對,利用其不變特征(兩點距離,兩點法向量夾角)作為哈希表的索引值搜索另一個點云中的一個對應(yīng)點對,然后計算得到旋轉(zhuǎn)及平移的參數(shù)值。

用得到的變換模型去測試其它點,如果某個點適用于估計的模型,認(rèn)為它也是局內(nèi)點。

用所有假設(shè)的局內(nèi)點去重新估計模型,重新計算旋轉(zhuǎn)及平移的參數(shù)。

和上一個模型進行比較:是否有更多的局內(nèi)點和更小的錯誤率。

然后迭代上述過程,直到找到最好的模型,或達到迭代次數(shù)。

優(yōu)勢和缺點

RANSAC的優(yōu)點是它能從包含大量局外點的數(shù)據(jù)集中估計出高精度的參數(shù)。

RANSAC的缺點是它計算參數(shù)的迭代次數(shù)沒有上限;如果設(shè)置迭代次數(shù)的上限,得到的結(jié)果可能不是最優(yōu)的結(jié)果,甚至可能得到錯誤的結(jié)果。RANSAC只有一定的概率得到可信的模型,概率與迭代次數(shù)成正比。RANSAC的另一個缺點是它要求設(shè)置跟問題相關(guān)的閥值。

如何提高配準(zhǔn)的精確度

對于兩個點云來說,提高精確度的方法是選取合適的算法、增加迭代次數(shù)、修改參數(shù)。

實際配準(zhǔn)中,我們可能要連續(xù)配準(zhǔn)多個點云。這樣,在兩個點云匹配中出現(xiàn)的誤差可能被放大。嘗試了以下幾種思路:第n個點云與第n+1個點云配準(zhǔn),得到轉(zhuǎn)換矩陣。將第n-1個轉(zhuǎn)換矩陣乘以這個轉(zhuǎn)換矩陣,得到第n個轉(zhuǎn)換矩陣。第n+1個點云乘以第n個轉(zhuǎn)換矩陣,得到它投影到第1個點云所在坐標(biāo)系的新點云。

上一方法的改進策略:同時由第1個點云向后出發(fā),第n個點云向前出發(fā)進行配準(zhǔn),最終重合。

第n個點云與第n+1個點云配準(zhǔn),得到轉(zhuǎn)換矩陣,并將第n+1個點云乘以轉(zhuǎn)換矩陣,將得到的新點云替換第n+1個點云。

第n個點云與第n+1個點云配準(zhǔn),得到轉(zhuǎn)換矩陣,并將第n+1個點云乘以轉(zhuǎn)換矩陣,將得到的新點云拼接上第n個點云,然后替換第n+1個點云。

最終選擇了第二種方法,它可以達到較好的效果。

配準(zhǔn)部分的代碼,根據(jù)采取的算法不同有所變化,建議從官方文檔參看這部分代碼。

最終效果

實際使用中,很難做到短時間高精度地配準(zhǔn)出點云,對于一些情況,可能要進行有針對性的優(yōu)化。這是測試中配準(zhǔn)效果較好的一個:

總結(jié)

以上是生活随笔為你收集整理的多帧点云数据拼接合并_PCL点云处理实践(二):点云的处理和拼接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。