當前位置:編程學習大全網 - 源碼下載 - 如何從點雲創建深度圖像

如何從點雲創建深度圖像

首先,在PCL(Point Cloud Learning)中國協助發行的書提供光盤的第9章例1文件夾中,打開名為range_image_creation.cpp的代碼文件。

解釋說明

下面來解析打開源代碼中的關鍵語句。

#include <pcl/range_image/range_image.h> //深度圖像頭文件

int main (int argc, char** argv) {

pcl::PointCloud<pcl::PointXYZ> pointCloud; //定義點雲對象

for (float y=-0.5f; y<=0.5f; y+=0.01f) { //循環產生點數據

for (float z=-0.5f; z<=0.5f; z+=0.01f) {

pcl::PointXYZ point;

point.x = 2.0f - y;

point.y = y;

point.z = z;

pointCloud.points.push_back(point); //循環添加點數據到點雲對象

}

}

pointCloud.width = (uint32_t) pointCloud.points.size();

pointCloud.height = 1; //設置點雲對象的頭信息

這段程序首先創建壹組數據作為點雲的數據內容,再設置文件頭的信息,整個實現生成壹個呈矩形形狀的點雲。

float angularResolution = (float) ( 1.0f * (M_PI/180.0f)); // 按弧度1度

float maxAngleWidth = (float) (360.0f * (M_PI/180.0f)); // 按弧度360.0度

float maxAngleHeight = (float) (180.0f * (M_PI/180.0f)); // 按弧度180.0度

Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f,0.0f); //采集位置

pcl::RangeImage::CoordinateFrame coordinate_frame =pcl::RangeImage::CAMERA_FRAME; //深度圖像遵循的坐標系統

float noiseLevel=0.00;

float minRange = 0.0f;

int borderSize = 1;

這部分定義了創建深度圖像時需要的設置參數,將角度分辨率定義為1度,意味著由鄰近的像素點所對應的每個光束之間相差1度,maxAngleWidth=360和maxAngleHeight=180意味著,我們進行模擬的距離傳感器對周圍的環境擁有壹個完整的360度視角,用戶在任何數據集下都可以使用此設置,因為最終獲取的深度圖像將被裁剪到有空間物體存在的區域範圍。但是,用戶可以通過減小數值來節省壹些計算資源,例如:對於傳感器後面沒有可以觀測的點時,壹個水平視角為180度的激光掃描儀,即maxAngleWidth=180就足夠了,這樣只需要觀察距離傳感器前面就可以了,因為後面沒有需要觀察的場景。sensorPose定義了模擬深度圖像獲取傳感器的6自由度位置,其原始值為橫滾角roll、俯仰角pitch、偏航角yaw都為0,coordinate_frame=CAMERA_FRAME說明系統的X軸是向右的,Y軸是向下的,Z軸是向前的,另外壹個選擇是LASER_FRAME,其X軸向前,Y軸向左,Z軸向上。noiseLevel=0是指使用壹個歸壹化的Z緩沖器來創建深度圖像,但是如果想讓鄰近點集都落在同壹個像素單元,用戶可以設置壹個較高的值,例如noiseLevel=0.05可以理解為,深度距離值是通過查詢點半徑為125px的圓內包含的點用來平均計算而得到的。如果minRange>0,則所有模擬器所在位置半徑minRange內的鄰近點都將被忽略,即為盲區。在裁剪圖像時,如果borderSize>0,將在圖像周圍留下當前視點不可見點的邊界。

pcl::RangeImage rangeImage;

rangeImage.createFromPointCloud(pointCloud, angularResolution, maxAngleWidth, maxAngleHeight, sensorPose, coordinate_frame, noiseLevel, minRange, borderSize);

std::cout << rangeImage << "\n";

其余的代碼是使用那些用戶給定的參數,從點雲創建深度圖像,並且在終端下打印出壹些信息。

深度圖像繼承於PointCloud類,它的點類型具有x,y,z和range距離字段,***有三種類型的點集,有效點集是距離大於零的點集,當前視點不可見點集x=y=z=NAN且值域為負無窮大,遠距離點集x=y=z=NAN且值域為無窮大。

編譯和運行程序

利用光盤提供的CMakeLists.txt文件,在cmake中建立工程文件,並生成相應的可執行文件。生成執行文件後,就可以運行了,在cmd中鍵入命令:

...>range_image_creation.exe

  • 上一篇:現在搭建壹個電商平臺需要多少錢?
  • 下一篇:GIS的幾種主要數據模型
  • copyright 2024編程學習大全網