Progressive-Morphological-Filter-PCL-Cpp (50%)
ํญ๊ณต Lidar
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/segmentation/progressive_morphological_filter.h>
// Identifying ground returns using ProgressiveMorphologicalFilter segmentation
// http://pointclouds.org/documentation/tutorials/progressive_morphological_filtering.php#progressive-morphological-filtering
int
main (int argc, char** argv)
{
// *.PCD ํ์ผ ์ฝ๊ธฐ
// https://github.com/adioshun/gitBook_Tutorial_PCL/blob/master/Intermediate/sample/samp11-utm.pcd
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
pcl::io::loadPCDFile<pcl::PointXYZ> ("samp11-utm.pcd", *cloud);
// ํฌ์ธํธ ์ ๋ณด ์ถ๋ ฅ
std::cerr << "Cloud before filtering: " << std::endl;
std::cerr << *cloud << std::endl;
// ์ค๋ธ์ ํธ ์์ฑ
pcl::PointIndicesPtr ground (new pcl::PointIndices);
pcl::ProgressiveMorphologicalFilter<pcl::PointXYZ> pmf;
pmf.setInputCloud (cloud);
pmf.setMaxWindowSize (20);
pmf.setSlope (1.0f);
pmf.setInitialDistance (0.5f);
pmf.setMaxDistance (3.0f);
pmf.extract (ground->indices);
// ์ค๋ธ์ ํธ ์์ฑ
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>);
pcl::ExtractIndices<pcl::PointXYZ> extract;
extract.setInputCloud (cloud);
extract.setIndices (ground);
//extract.setNegative (true); //samp11-utm_object.pcd
extract.filter (*cloud_filtered);
// ํฌ์ธํธ ์ ๋ณด ์ถ๋ ฅ
std::cerr << "Ground cloud after filtering: " << std::endl;
std::cerr << *cloud_filtered << std::endl;
// ์์ฑ๋ ํฌ์ธํธํด๋ผ์ฐ๋(inlier) ์ ์ฅ
pcl::io::savePCDFile<pcl::PointXYZ>("samp11-utm_ground.pcd", *cloud_filtered);
return (0);
}
Last updated
Was this helpful?