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 / z
和v = 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;
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。