1. 程式人生 > 其它 >PCL學習指南-基礎概要

PCL學習指南-基礎概要

技術標籤:點雲處理c++

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)

    • 複製點雲資料(點雲複製指在原資料基礎上覆制,非交叉部分不變)