点云的预处理主要包括:点云去噪和点云的简化
点云的去噪主要是去除离群点点云的平滑处理
去除离群点方法:半径滤波和统计滤波
平滑处理方法:双边滤波和导向滤波
点云简化:体素滤波
去除背景:主要是去除地面
方法:渐进形态学滤波,平面拟合,布料法
点云体素滤波
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>
using namespace std;
int
main(int argc, char** argv)
{
// -------------------------------读入点云数据--------------------------------
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
pcl::PCDReader reader;
reader.read("data//table_scene_lms400.pcd", *cloud);
cout << "PointCloud before filtering: " << *cloud << endl;
// --------------------------------VoxelGrid----------------------------------
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);
pcl::VoxelGrid<pcl::PointXYZ> vg;
vg.setInputCloud(cloud); // 输入点云
vg.setLeafSize(0.3,0.3,0.3); // 设置最小体素边长
vg.filter(*cloud_filtered); // 进行滤波
cout << "PointCloud after filtering: " << *cloud_filtered << endl;
// ---------------------------------保存结果----------------------------------
pcl::PCDWriter writer;
writer.write<pcl::PointXYZ>("2f.pcd", *cloud_filtered, false);
// ---------------------------------结果可视化--------------------------------
boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer(new pcl::visualization::PCLVisualizer("ShowCloud"));
int v1(0);
viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);
viewer->setBackgroundColor(0, 0, 0, v1);
viewer->addText("Raw point clouds", 10, 10, "v1_text", v1);
int v2(0);
viewer->createViewPort(0.5, 0.0, 1, 1.0, v2);
viewer->setBackgroundColor(0.1, 0.1, 0.1, v2);
viewer->addText("filtered point clouds", 10, 10, "v2_text", v2);
viewer->setWindowName("VoxelGrid");
viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud", v1);
viewer->addPointCloud<pcl::PointXYZ>(cloud_filtered, "cloud_filtered", v2);
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 0, 0, "sample cloud", v1);
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 1, 0, "cloud_filtered", v2);
//view->addCoordinateSystem(1.0);
//view->initCameraParameters();
while (!viewer->wasStopped())
{
viewer->spinOnce(100);
boost::this_thread::sleep(boost::posix_time::microseconds(100000));
}
return 0;
}
统计滤波
#include <iostream>
#include <pcl/io/pcd_io.h>
#include