1.Class pcl::ApproximateVoxelGrid< PointT >
类ApproximateVoxelGrid根据给定的点云形成三维体素栅格,并利用所有体素的中心点近似体素中包含的点集,这样完成下采样得到滤波结果。该类比较适合对海量点云数据在处理前进行数据压缩,特别是在特征提取等处理中选择合适的体素大小等尺度相关参数,可以很好地提高算法的效率。
#include <pcl/filters/approximate_voxel_grid.h>
ApproximateVoxelGrid ()
// 空构造函数
ApproximateVoxelGrid (const ApproximateVoxelGrid &src)
// 复制构造函数
~ApproximateVoxelGrid ()
// 析构函数
ApproximateVoxelGrid & operator= (const ApproximateVoxelGrid &src)
// 定义运算发重载函数
void setLeafSize (const Eigen::Vector3f &leaf_size)
// 设置体素栅格叶大小,向量参数leaf_size是体素栅格叶大小参数,每个元素分别表示体素在XYZ方向上的尺寸。
void setLeafSize (float lx, float ly, float lz)
// 同上,lx、ly,lz分别设置体素在XYZ方向上的尺寸。
Eigen::Vector3f getLeafSize () const
// 获得设置体素栅格叶大小参数。
void setDownsampleAllData (bool downsample)
// 设置是否对全部字段进行下采样,不同点类型包含的字段数量不同,在进行下采样时,大多是对空间XYZ进行下采样,有些字段在下采样时也有意义,例如颜色、强度等,若需要对全部字段进行下采样则设置为True,仅对XYZ字段下采样则设置为False。
bool getDownsampleAllData () const
// 获取内部下采样参数的状态(如果需要对所有字段进行下采样,则为true;如果仅为XYZ,则为false)。更多.。
2.Class pcl::BilateralFilter< PointT >
类 BilateralFilter是对双边滤波算法在点云上的实现,该类的实现利用的并非XYZ字段的数据进行,而是利用强度数据字段进行双边滤波算法的实现,所以在使用该类时点云的类型中字段必须有强度字段,否则无法进行双边滤波处理,详细算法信息请参考C. Tomasi and R. Manduchi的文章Bilateral Filtering for Gray andColor Images 。
#include <pcl/filters/bilateral.h>
BilateralFilter ()
// 构造函数
void applyFilter (PointCloud &output)
// 对输入数据进行滤波并储存结果到输出output。
double computePointWeight (const int pid, const std::vector< int > &indices, const std::vector< float > &distances)
// 对一个指定单点计算平均强度:输人要计算的点的索引 pid,最近邻近点索引集合indices 和到最近邻近点距离集合distances,输出对该点计算出的平均强度。
void setHalfSize (const double sigma_s)
// 设置高斯双边滤波的窗口的一半大小,其中,sigma_s设为Gaussian双边滤波窗口大小的一半。
double getHalfSize () const
// 获得高斯双边滤波的窗口的一半大小参数。
void setStdDev (const double sigma_r)
// 设置标准差参数为sigma_r。
double getStdDev () const
// 获得标准差参数为sigma_r。
void setSearchMethod (const KdTreePtr &tree)
// 提供指向搜索对象的指针。
3.Class pcl::BoxClipper3D< PointT >
类BoxClipper3D实现用一个以原点为中心、XYZ各个方向尺寸为2、经过用户指定仿射变换的立方体进行空间裁剪,通过设置一个仿射变换矩阵先对立方体进行变换处理,之后输出仿射变换后落在该立方体内的点集。
#include <pcl/filters/box_clipper3D.h>
BoxClipper3D (const Eigen::Affine3f &transformation)
// 利用仿射变换的矩阵transformation来构造滤波对象,最终输出点云为落在通过仿射变换矩阵变换后的立方体内的点集,立方体默认为以原点为中心.XYZ方向.尺度为2的立方体。
BoxClipper3D (const Eigen::Vector3f &rodrigues, const Eigen::Vector3f &translation, const Eigen::Vector3f &box_size)
// 功能同上,利用三个向量构造滤波对象,其中rodrigues用来指定变换的立方体的姿态,translation用来指定变换立方体的位置,box_size用来指定变换立方体各个方向的缩放系数,最终由三个向量指定-一个完整的放射变换矩阵。
void setTransformation (const Eigen::Affine3f &transformation)
// 设置仿射变换矩阵transformation。
void setTransformation (const Eigen::Vector3f &rodrigues, const Eigen::Vector3f &translation, const Eigen::Vector3f &box_size)
// 通过三个向量设置仿射变换,参数同上。
virtual ~BoxClipper3D () throw ()
// 析构函数
virtual bool clipPoint3D (const PointT &point) const
// 裁剪掉一个单点point的接口:如果点被裁剪掉则返回true,点不在裁剪空间则返回false.
virtual bool clipLineSegment3D (PointT &from, PointT &to) const
// 通过输入线段起始点from和终点to,裁剪掉一.条线段的接口:若线段被裁剪掉则返回true,若线段在剪贴空间外则返回false.
virtual void clipPlanarPolygon3D (std::vector< PointT, Eigen::aligned_allocator< PointT > > &polygon) const
// 通过一个有序点列表,提供裁剪一个平面多边形的接口。其中,polygon是指定的任何方向(ccw or cw).上的多边形,注意有序点,才能保证两个相邻的点定义多边形的边界。
virtual void clipPlanarPolygon3D (const std::vector< PointT, Eigen::aligned_allocator< PointT > > &polygon, std::vector< PointT, Eigen::aligned_allocator< PointT > > &clipped_polygon) const
// 通过一个有序点列表,提供裁剪一个平面多边形的接口:输入多边形polygon,输出裁剪后多边形clipped_ polygon。
virtual void clipPointCloud3D (const pcl::PointCloud< PointT > &cloud_in, std::vector< int > &clipped, const std::vector< int > &indices=std::vector< int >()) const
// 裁剪点云的接口
virtual Clipper3D< PointT > * clone () const
// 使用其参数克隆基础剪贴器的多态方法。
4.Class pcl::Clipper3D< PointT >
类Clipper3D是3D空间裁剪对象的基类。
#include <pcl/filters/clipper3D.h>
virtual ~Clipper3D () throw ()
// 虚拟析构函数
virtual bool clipPoint3D (const PointT &point) const =0
// 裁剪掉一个单点point的接口:如果点被裁剪掉则返回true,点不在裁剪空间则返回false.
virtual bool clipLineSegment3D (PointT &pt1, PointT &pt2) const =0
// 通过输入线段起始点pt1和终点pt2,裁剪掉一.条线段的接口:若线段被裁剪掉则返回true,若线段在剪贴空间外则返回false.
virtual void clipPlanarPolygon3D (std::vector< PointT, Eigen::aligned_