参考:PCL双边滤波
代码
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/filters/bilateral.h>
typedef pcl::PointXYZI PointT;
int
main (int argc, char*argv[])
{
std::string incloudfile = argv[1];
std::string outcloudfile = argv[2];
float sigma_s = atof (argv[3]);
float sigma_r = atof (argv[4]);
pcl::PointCloud<PointT>::Ptr cloud (new pcl::PointCloud<PointT>);
pcl::io::loadPCDFile (incloudfile.c_str (), *cloud);
pcl::PointCloud<PointT> outcloud;
// 创建kd-tree
// pcl::BilateralFilter<pcl::PointXYZI>::KdTreePtr tree(new pcl::KdTreeFLANN<PointT>);
// pcl::search::Search<PointT>::Ptr tree(new pcl::KdTreeFLANN::Search<PointT>);
pcl::search::KdTree<PointT>::Ptr tree1(new pcl::search::KdTree<PointT>);//用一个子类作为形参传入
pcl::BilateralFilter<PointT> bf;
bf.setInputCloud (cloud);
bf.setSearchMethod (tree1);
bf.setHalfSize (sigma_s);
bf.setStdDev (sigma_r);
bf.filter (outcloud);
pcl::io::savePCDFile (outcloudfile.c_str (), outcloud);
return (0);
}