PCL學習指南-基礎概要
阿新 • • 發佈:2021-01-05
PCL學習指南-基礎概要
此係列文章旨在小白對PCL入門,以個人在PCL官方文件所學,加以理解通過中文解讀程式碼的意圖
1.前言
- PCL 全程Point Cloud Libirary 中文翻譯為點雲庫;它是在C++基礎上開發的點雲處理包,包含點雲資料結構,點雲輸入輸出,點雲濾波,點雲特徵,點雲配準,點雲識別,點雲分割,三維重建,視覺化等模組。極大簡化了相關人員開發與實驗過程。
- PCL學習之前,你需要了解C++語法基礎,否則PCL程式碼將成為學習的第一道門檻
2.PCD資料格式
- PCD點雲格式是PCL獨有的點雲組織結構,
- 對於有序點雲
cloud.width代表寬度方向上點個數 cloud.height代表高度方向上點個數
- 而對於無序點雲
cloud.width代表點總數 cloud.height此時為1
- 對於有序點雲
PCD格式示例:
# .PCD v.7 - Point Cloud Data file format
VERSION .7 //版本號
FIELDS x y z rgb //欄位 其中rgb是一個數值,由r g b得到rgb(float): rgb = ((int)r << 16 | (int)g << 8 | (int)b); 式中的“<<”為左移符號;由rgb得到r g b(int):int r = (rgb >> 16) & 0x0000ff; int g = (rgb >> 8) & 0x0000ff; int b = (rgb) & 0x0000ff;
SIZE 4 4 4 4 //每個欄位的位元組大小
TYPE F F F F //每個欄位型別 F指Float
COUNT 1 1 1 1 //每個欄位所含元素 一般無此屬性均設定為1
WIDTH 213 //無序點雲總數
HEIGHT 1 //無序點雲
VIEWPOINT 0 0 0 1 0 0 0 //視點 X=0 Y=0 Z=0; 1 0 0 0 代表旋轉四元數
POINTS 213 //總數
DATA ascii //編碼格式
0.93773 0.33763 0 4.2108e+06 //X Y Z rgb
0.90805 0.35641 0 4.2108e+06
0.81915 0.32 0 4.2108e+06
3.PCL資料結構
-
點雲物件一般定義形式為
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
- 其中pcl::PointCloud 意思為pcl名稱空間下的PointCloud類,< pcl::PointXYZ >則為XYZ資料結構泛型, Ptr指指標 之後則為物件名及例項化;
- 即建立一個XYZ結構的點雲共享指標(共享指標為C++新特性,PCL封裝好了,無需人工釋放)
-
pcl::PointXYZ 則為最為常用的點雲資料結構,包含XYZ座標。
-
pcl提供了大量資料結構包括但不限於 < pcl::PointXYZRGB > < pcl::PointNormal > < Normal >等
-
資料結構內部採用C++ union和struct結構,具體作用自查。簡單理解就是共享記憶體和封裝結構
4.PCL點雲預處理所需的常用函式
-
pcl::isFinite<pcl::Normal>((*normals)[i])
- 判斷是否有定義
-
cloud.is_dense
- 點雲中是否有無效資料
-
pcl::removeNaNFromPointCloud(*cloud, *new_cloud, NaNIndices);
- 移除點雲中NaN資料
-
cloud1.swap(cloud2)
- 交換點雲資料
-
pcl::copyPointCloud(cloud1,cloud2,indexs)
- 複製點雲資料(點雲複製指在原資料基礎上覆制,非交叉部分不變)