PCL:点云中的超体素数据
-----------------------體素數據---------------------體素化網格
體素(Voxel)是體積元素(Volume pixel)的簡稱,是數據位于三維空間內規則網格上的最小單位,體素,其物理意義類似于二維圖像像素在三維空間上的推廣,是一組均勻分布、位于正交網格中心的立方體的集合。體素不能表示三維空間中的位置信息,即不具有三維坐標。可以通過體素數據在立體空間內的相對位置關系表示場景或物體的三維信息。
場景的體素數據表示
1.首先將點云數據進行體素化
體素化(Voxelization)是利用體素來近似表示場景或物體的空間結構和幾何形狀的過程。體素化的基本原理是:在輸入的點云數據上創建一個三維立體的網格,立體網格是一種微小的三維立方體的集合。然后,在每個三維立方體內,利用立方體內所有點云數據的重心點來近似表示網格內的所有點,網格處理后得到相應的體素云數據。體素云數據可以表示模型的表面幾何特征和內部屬性信息,并且利用體素數據的相對位置關系還可以表示三維信息。
點云數據是雜亂、無組織結構的,但是通過體素化處理后,在體素空間內存在三
種拓撲結構:6 鄰接、18 鄰接以及 26 鄰接。其中 6 鄰接的兩個體素具有 6 個公共面,
18 鄰接的體素具有 12 條公共邊和 6 個公共面,26 鄰接體素在此基礎上還具有 8 個
公共點。如圖 3.3 所示,從左到右依次為 6 鄰接、18 鄰接以及 26 鄰接。
?
2.體素化后獲得體素云數據
體素化處理首先需要建立體素空間,體素空間類似于二維圖像模型的像素空間。體素空間的范圍可以根據點云數據坐標分別在 X,Y,Z 軸的最大、最小值來確定,然后設定固定的體素分辨率 R,以體素分辨率為基本單位對體素空間下的最大包圍盒進行劃分,得到體積為 的微小的立方體集合。每個立方體內的中心點或者質心點可以用來表示相應的體素立方體,所有中心點或者質心點形成的數據集即為體素云數據。
--------------------超體素數據------------------------
超體素(Supervoxel)是一種由體素數據組成的集合,是在三維空間內具有一定語義感知信息的原子體積的三維網格的子集,類似于二維圖像上的超像素。超體素是根據位置關系或者其他屬性的相似性來生成不規則形狀的簇,與體素的本質類似,是三維空間內的由體素構成的不規則的幾何體。超體素內攜帶豐富的屬性信息,例如具有空間一致性,并且相對于體素數據更加易于理。一個性質良好的超體素應該具有較為規則的幾何形狀與均勻的體素密度,并且可以很好的依附于邊界信息。
場景的超體素數據表示
超體素的獲取過程即體素數據的聚類過程,其基本原理是對局部范圍內滿足相似性約束的體素數據的融合,根據紋理、顏色、法線等相似屬性將體素云數據劃分為相應的超體素,用于研究體素簇之間的關系,有利于后續的分類和識別工作。這類似于在圖像分割處理中,將像素聚類得到超像素,利用超像素的關系來分割、理解圖像。目前,超體素已普遍應用于三維數據處理和視頻分析等研究領域,如點云分割,目標識別,運動分析和場景重構等。
--------------------
應用在體素濾波、超體聚類等。
1.體素濾波
在使用PCL的處理點云時,很多時候我們不需要有太過高的分辨率,因為點云過多會造成計算變慢,并且更加消耗計算資源,所以我們需要把點云變稀,voxel就是一個很好的方法。
voxel就是三維的pixel,也就是把點云畫出網格,然后每個網格內保留一個點就可以了。網格的大小可以自己定義,這就相當于一個downsample(下采樣)
我顯示出了所有的點,如果某一個格子內沒有點就可以不顯示了,你也可以把格子調的很密,顏色也可以保留。
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>//Pcl自帶的voxel功能pcl::VoxelGrid<pcl::PCLPointCloud2> sor;//pcl的一貫規則,你要使用voxel功能,首先需要創建一個voxel類的一個對象,也就是sor sor.setInputCloud (cloud);//然后輸入需要過濾的點云,也就是cloudsor.setLeafSize (0.01f, 0.01f, 0.01f);//然后設置一下葉子大小,也就是resolution(分辨率),也就是這個格子的最小間距,設置的越小則越密集,保留的點越多。三個參數分別是xyzsor.filter (*cloud_filtered);//然后給一個輸出的點云用來接收過濾的結果,即cloud_filtered就是變稀疏后的cloud
點云數量很有可能點數減少了十倍,但是形狀還保留,基本上沒什么太大的影響,不過如果你要做精確的體積估計的話這個肯定是不可以的,因為邊緣肯定會變短,但是不那么精確,知道大致形狀,知道中心就可以的需求就可以放心大膽的使用這個功能
左右是過濾前后的對比,右邊的圖然能夠看出來是一張桌子上面放了個杯子,但是點明顯變稀疏了,能夠滿足你的要求且不會破壞你的結果那么就可以嘗試讀入點云就用這個過濾一遍,點云少了后續的處理速度會快的很多。
-----------------------
后續可以基于體素做超體聚類,LCCP等算法。
?
總結
以上是生活随笔為你收集整理的PCL:点云中的超体素数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pcl:Normal的定义结构及输出
- 下一篇: 机器学习中的数学基础:(1)实际应用中矩