Introdução à filtragem de nuvem de pontos

1. Introdução

1、Filtrando um PointCloud usando um filtro PassThrough

2、Redução da resolução de um PointCloud usando um filtro VoxelGrid

3、Remoção de valores discrepantes esparsos usando StatisticalOutlierRemoval

4、Projeção de pontos usando um modelo paramétrico

Conjunto de dados: Link: https://pan.baidu.com/s/1jR7k5iI-acVyyehKcYbetA?pwd=mr16
     Código de extração: mr16

2. Código

1、Filtro de passagem

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/passthrough.h>
#include <pcl/visualization/cloud_viewer.h>

int main()
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (-1 == pcl::io::loadPCDFile("rabbit.pcd", *cloud))
	{
		std::cout << "read pcd file error!" << std::endl;
	}
	std::cout << "cloud1 size = " << cloud->points.size() << std::endl;

	pcl::PointCloud<pcl::PointXYZ>::Ptr filter(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PassThrough<pcl::PointXYZ> pass;
	pass.setInputCloud(cloud);
	pass.setFilterFieldName("x");
	pass.setFilterLimits(-10.0f, 0.0f);
	pass.filter(*filter);
	std::cout << "filter size = " << filter->points.size() << std::endl;

	pcl::visualization::CloudViewer viewer("Cloud Viewer");
	viewer.showCloud(filter);
	while (!viewer.wasStopped())
	{
	}

	return 0;
}

 

 

2. Filtro VoxelGrid

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/voxel_grid.h>

int main()
{
    pcl::PCLPointCloud2::Ptr cloud(new pcl::PCLPointCloud2());
	pcl::PCDReader reader;
    reader.read("rabbit.pcd", *cloud);
	std::cout << "cloud size = " << cloud->data.size() << std::endl;

	pcl::PCLPointCloud2::Ptr filter(new pcl::PCLPointCloud2());
	pcl::VoxelGrid<pcl::PCLPointCloud2> sor;
	sor.setInputCloud(cloud);
	sor.setLeafSize(0.5f, 0.5f, 0.5f);
	sor.filter(*filter);
	std::cout << "filter size = " << filter->data.size() << std::endl;

	pcl::PCDWriter writer;
	writer.write("rabbit_down.pcd", *filter, Eigen::Vector4f::Zero(), Eigen::Quaternionf::Identity(), false);

	return 0;
}

 

 

3、Remoção Estatística de Outlier

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/visualization/cloud_viewer.h>
#include <pcl/filters/statistical_outlier_removal.h>

int main()
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (-1 == pcl::io::loadPCDFile("filtered1.pcd", *cloud))
	{
		std::cout << "read pcd file error!" << std::endl;
	}
	std::cout << "cloud1 size = " << cloud->points.size() << std::endl;

	pcl::PointCloud<pcl::PointXYZ>::Ptr filter(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
	sor.setInputCloud(cloud);
	sor.setMeanK(80);
	sor.setStddevMulThresh(1.0);
	sor.filter(*filter);
	std::cout << "filter size = " << filter->points.size() << std::endl;

	pcl::visualization::CloudViewer viewer("Cloud Viewer");
	viewer.showCloud(filter);
	while (!viewer.wasStopped())
	{
	}

	return 0;
}

  

4. Pontos de projeção

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/project_inliers.h>
#include <pcl/visualization/cloud_viewer.h>

int main()
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	if (-1 == pcl::io::loadPCDFile("filtered1.pcd", *cloud))
	{
		std::cout << "read pcd file error!" << std::endl;
	}
	std::cout << "cloud1 size = " << cloud->points.size() << std::endl;

	
	// z=0 plane
	pcl::ModelCoefficients::Ptr coefficients(new pcl::ModelCoefficients());
	coefficients->values.resize(4);
	coefficients->values[0] = coefficients->values[1] = 0;
	coefficients->values[2] = 1.0;
	coefficients->values[3] = 0;

    pcl::PointCloud<pcl::PointXYZ>::Ptr filter(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::ProjectInliers<pcl::PointXYZ> proj;
	proj.setModelType(pcl::SACMODEL_PLANE);
	proj.setInputCloud(cloud);
	proj.setModelCoefficients(coefficients);
	proj.filter(*filter);
	std::cout << "filter size = " << filter->points.size() << std::endl;

	pcl::visualization::CloudViewer viewer("Cloud Viewer");
	viewer.showCloud(filter);
	while (!viewer.wasStopped())
	{
	}

	return 0;
}

 

 

3. Referência

Introdução - Documentação da Biblioteca de Nuvem de Pontos 0.0

Acho que você gosta

Origin blog.csdn.net/Goodness2020/article/details/132333217
Recomendado
Clasificación