Lorsque vous utilisez PCL pour effectuer un filtrage spatial sur un nuage de points, PassThrough ne peut réaliser le filtrage que dans la direction de l'axe des coordonnées, et PlaneClipper3D peut diviser l'espace du nuage de points avec n'importe quel plan, ce qui est plus flexible. Voici comment l'utiliser:
Fonction définie:
pcl::PointCloud<PointT>::Ptr plane_clip(const pcl::PointCloud<PointT>::Ptr& src_cloud, const Eigen::Vector4f& plane, bool negative)
{
pcl::PlaneClipper3D<PointT> clipper(plane);
pcl::PointIndices::Ptr indices(new pcl::PointIndices);
clipper.clipPointCloud3D(*src_cloud, indices->indices);
pcl::PointCloud<PointT>::Ptr dst_cloud(new pcl::PointCloud<PointT>);
pcl::ExtractIndices<PointT> extract;
extract.setInputCloud(src_cloud);
extract.setIndices(indices);
extract.setNegative(negative);
extract.filter(*dst_cloud);
return dst_cloud;
}
Utilisation:
1. Introduisez le fichier d'en-tête #include <pcl / filters / plane_clipper3D.h>
2. Appelez la fonction, les paramètres d'entrée sont (nuage de points d'entrée, paramètres de plan, direction de division)
cloud_out = plane_clip(cloud_in, Eigen::Vector4f(1.0,1.0, 1.0,1.0), false);