1. 程式人生 > >PCL入門/基本結構(Getting Started / Basic Structures)

PCL入門/基本結構(Getting Started / Basic Structures)

#入門/基本結構
PCL 1.x中的基本資料型別是PointCloud
PointCloud是一個包含以下資料欄位的C ++類:

寬度width (int)
在點數中指定點雲資料集的寬度。寬度有兩個含義:

它可以指定點的雲中的總數(equal with the number of elements in points - 見下文),用於無組織的資料集;
它可以指定有組織的點雲資料集的寬度(連續點的總數)。

注意:
一個有組織的點雲資料集是賦予點雲類似於一個有組織的影象(或矩陣)狀的結構,其中,資料被劃分為行和列的名稱。這種點雲的例子包括來自立體相機或飛行時間相機(TOF相機)的資料。有組織的資料集的優點在於,通過了解相鄰點(例如畫素)之間的關係,最近鄰的操作效率更高,從而加快了計算速度,降低了PCL中某些演算法的成本。

注意:
可投影的點雲資料集是給予點雲的名稱,其根據針孔相機模型在有組織的點雲中的點(u,v)的索引與實際的3D值之間具有相關性。這種相關性可以用最簡單的形式表示為:u = f * x / zv = f * y / z

例子:

cloud.width = 640; // there are 640 points per line

高度height (int)
在點數中指定點雲資料集的高度。高度有兩層含義:
它可以指定有組織的點雲資料集的高度(總行數)
對於未組織的資料集它被設定為1(因此用於檢查資料集是否被組織)。
例:

cloud.width = 640; // Image-like organized structure, with 640 rows(行) and 480 columns(列),
cloud.height = 480; // thus 640*480=307200 points total in the dataset

例:

cloud.width = 307200;
cloud.height = 1; // unorganized point cloud dataset with 307200 points

points (std::vector<PointT>)

包含儲存所有PointT型別的點的資料陣列。例如,對於包含XYZ資料的雲,點包含pcl :: PointXYZ元素的向量:

pcl::PointCloud<pcl::PointXYZ> cloud;
std::vector<pcl::PointXYZ> data = cloud.points;

is_dense (bool)

指定點中的所有資料是有限的(true)還是某些點的XYZ值可能包含Inf / NaN值(false)。

sensor_origin_ (Eigen::Vector4f)

指定感測器採集姿態(原點origin/轉換translation)。這個成員通常是可選的,並且不被PCL中的大多數演算法使用。

sensor_orientation_ (Eigen::Quaternionf)

指定感測器採集姿勢(方向orientation)。這個成員通常是可選的,並且不被PCL中的大多數演算法使用。

為了簡化開發,PointCloud類包含一些輔助成員函式。例如,使用者不必檢查程式碼中的高度(height)是否等於1,以檢視是否組織資料集,代替使用PointCloud()

if (!cloud.isOrganized ())
  ...

所述PointT型別是主點資料型別並描述了點的每個元素都包含著什麼。PCL帶有大量不同的點型別,大部分在新增自定義的PointT型別教程中進行了解釋。

#編譯你的第一個程式碼示例
在找到合適的最小程式碼示例之前,請檢視在你自己的專案中使用PCL編寫新的PCL類教程,以瞭解如何編譯和編寫程式碼或使用PCL。

Getting Started / Basic Structures