6、ubuntu16.04 下 pcl的vogelgrid降取樣處理 過程
pcl的vogelgrid降取樣處理 過程
pcl安裝:Ubuntu16.04下面 PCL的最簡單的安裝方法
PCL可以實現點雲柵格化降取樣的功能。PCL實現的VoxelGrid是通過將整個空間劃分為若干大小相等的三維空間,把空間中的重心點代表整個柵格中的點保留下來,以此來達到實現降取樣的目的。
這樣處理過的點雲的密度將會顯著減小,但是能夠很好的保留原始的曲面特徵。
步驟:
1、新建voxel_grid_filter,voxel_grid_filter檔案下新建voxel_grid_filter.cpp 程式碼見:
#include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/filters/voxel_grid.h> #include <pcl/console/parse.h> #include <pcl/visualization/cloud_viewer.h> using namespace std; int main(int argc, char** argv) { std::vector<int> filenames; filenames = pcl::console::parse_file_extension_argument (argc, argv, ".pcd"); pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZI>); pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZI>); // 裝載點雲資料 pcl::io::loadPCDFile(argv[filenames[0]], *cloud); //輸出取樣前的點雲資訊 std::cerr << "PointCloud before filtering: " << cloud->width * cloud->height << " data points (" << pcl::getFieldsList (*cloud) << ")."<<endl; // 建立濾波器物件 pcl::VoxelGrid<pcl::PointXYZI> sor;//濾波器處理物件 sor.setInputCloud(cloud);//設定輸入點雲 //設定濾波器處理時採用的體素大小的引數,體素大小是長寬高均初始化為0.5,可以自己設定改變最後降取樣點的數量 sor.setLeafSize(0.50f, 0.50f, 0.50f); sor.filter(*cloud_filtered);//執行下采樣,下采樣之後的點雲資料儲存到 cloud_filtered 中 //輸出取樣後的點雲資訊 std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height << " data points (" << pcl::getFieldsList(*cloud_filtered) << ")."<<endl; pcl::io::savePCDFileASCII("output_downsampled.pcd", *cloud_filtered); //儲存轉換後的點雲 pcl::visualization::CloudViewer viewer("Cloud Viewer");//建立名為Cloud Viewer viewer.showCloud(cloud_filtered);//showCloud函式是同步的,會在此處等待直到渲染顯示為止 while (!viewer.wasStopped()) { //在此處新增其他處理 } return (0); }
2、voxel_grid_filter檔案下新建CMakeLists.txt 程式碼見檔案:
cmake_minimum_required(VERSION 2.6 FATAL_ERROR) project(voxel_grid_filter) find_package(PCL 1.2 REQUIRED) include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) add_definitions(${PCL_DEFINITIONS}) add_executable (voxel_grid_filter voxel_grid_filter.cpp) target_link_libraries (voxel_grid_filter ${PCL_LIBRARIES})
3、編譯:
voxel_grid_filter檔案下新建build編譯。(在 voxel_grid_filter檔案下開啟終端跟著做就可以了):
mkdir build
cd build
cmake ..
make
cd ..
build/voxel_grid_filter twoDroneLocalization.pcd
mkdir build
cd build/
cmake …
make #編譯
cd …#切換目錄
build/voxel_grid_filter twoDroneLocalization.pcd#執行,twoDroneLocalization.pcd可以換成自己的pcd檔案,但是要放在voxel_grid_filte下
4、結束:
降取樣前:
三維點雲降取樣前的樣子
降取樣後:
三維點雲降取樣後點樣子
從視覺化結果,明顯也能看出,點的密度大小與整齊程度不同,雖然處理後資料量大大減少,但很明顯其所含有的形狀特徵與空間結構資訊與原始點雲差不多。
降取樣的結果會儲存到同文件夾下的 output_downsampled.pcd 中。檔案中包含(除了sample_result):
在voxel_grid_filter下開啟終端,輸入pcl_viewer twoDroneLocalization.pcd可檢視原始點雲,
當前資料夾開啟終端輸入:pcl_viewer output_downsampled.pcd 可檢視醬菜樣結果。
需要pcd格式檔案做實驗的話可以留言。
同樣優秀的部落格推薦:https://blog.csdn.net/weixin_42208807/article/details/109807006
PCl 經典資料:《點雲庫PCL學習教程》 朱德海