pcl_filters模块提供了对噪声点和离群点去除的具体实现。
类ApproximateVoxelGrid根据给定的点云形成三维体素栅格,并利用所有体素的中心点近似体素中包含的点集,这样完成下采样得到滤波结果。该类比较适合对海量点云数据在处理前进行数据压缩,特别是在特征提取等处理中选择合适的体素大小等尺度相关参数,可以很好地提高算法的效率。
#include
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)。更多.。
类 BilateralFilter是对双边滤波算法在点云上的实现,该类的实现利用的并非XYZ字段的数据进行,而是利用强度数据字段进行双边滤波算法的实现,所以在使用该类时点云的类型中字段必须有强度字段,否则无法进行双边滤波处理,详细算法信息请参考C. Tomasi and R. Manduchi的文章Bilateral Filtering for Gray andColor Images 。
#include
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)
// 提供指向搜索对象的指针。
类BoxClipper3D实现用一个以原点为中心、XYZ各个方向尺寸为2、经过用户指定仿射变换的立方体进行空间裁剪,通过设置一个仿射变换矩阵先对立方体进行变换处理,之后输出仿射变换后落在该立方体内的点集。
#include
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
// 使用其参数克隆基础剪贴器的多态方法。
类Clipper3D是3D空间裁剪对象的基类。
#include
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_allocator< PointT > > &polygon) const =0
// 通过一个有序点列表,提供裁剪一个平面多边形的接口。其中,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 =0
// 通过一个有序点列表,提供裁剪一个平面多边形的接口:输入多边形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 =0
// 提供一个裁剪点云的接口:输人点云cloud_ in 和被裁剪点云的索引indices,输出裁剪后剩余点云的索引clipped.
virtual Clipper3D< PointT > * clone () const =0
// 使用其参数克隆基础剪贴器的多态方法。
类ConditionalRemoval实现过滤满足一定条件的点云数据,非常灵活,可由用户设置滤波条件。
#include
ConditionalRemoval (int extract_removed_indices=false)
// 默认构造函数
ConditionalRemoval (ConditionBasePtr condition, bool extract_removed_indices=false)
// 包含更多条件的构造函数
void setKeepOrganized (bool val)
// 设置是否保留滤波后删除的点,以保持点云的有序性,并通过setUserFilterValue设置的值填充其数据,或从点云中删除滤波后的点,从而改变其组织结构。如果需要保留滤波掉的点,则将val设置为true,否则设置为false.
bool getKeepOrganized () const
// 获得是否保留滤波后删除的点的bool值。
void setUserFilterValue (float val)
// 若保留而不是移除滤波后的点,通过value设置保留滤波掉的点需要填充的值,该函数与setKeepOrganized ( )函数起使用。
void setCondition (ConditionBasePtr condition)
// 设置滤波条件condition:每个点都必须满足这个条件,否则作为过滤点处理,根据setKeepOrganized的设置删除或保留赋给定的值。
类Convolution实现卷积滤波的功能,卷积操作是通过将两个函数f和g通过数学运算产生了第三个函数的过程,一般产生的函数是原来f或g的改变,此类通过设备的设置为0. 001较为合适。
#include
Convolution ()
// 构造函数
~Convolution ()
// 空析构函数
void setInputCloud (const PointCloudInConstPtr &cloud)
// 设置输入点云input。
void setKernel (const Eigen::ArrayXf &kernel)
// 设置卷积核(卷积时用此决定当前点邻域的权重)。
void setBordersPolicy (int policy)
// 设置边缘处理采用的方式即在遇到边缘时,如果处理缺失区域的点的值共有三种处理方式,设定policy为-1时,对特殊位置的值都以零处理,设定policy为0时,镜像处理设定policy为1时扩展处理,直接赋附近点的值。
int getBordersPolicy ()
// 获得边缘处理采用的方式。
void setDistanceThreshold (const float &threshold)
// 在卷积处理时,行向或列向相邻点之间(在三维空间行向与列向相邻的点实际距离可能过大)允许的最大距离threshold,该值与获取设备相关度很大,例如kinect设备的设置为0. 001较为合适。
const float & getDistanceThreshold () const
// 获得行向或列向相邻点之间允许的最大距离threshold。
void setNumberOfThreads (unsigned int nr_threads=0)
// 初始化调度程序,设置要使用的线程数,nr_.threads是所使用的线程的数量,值为-1时是设置程序自己决定线程数目。
void convolveRows (PointCloudOut &output)
// 根据给定卷积核按行方向对点云进行卷积处理,输出卷积后的点云output(若输出的点云行数或列数少于输入点云将会调用策略补齐)。
void convolveCols (PointCloudOut &output)
// 根据给定卷积核按列方向对点云进行卷积处理,输出卷积后的点云output(若输出的点云行数或列数少于输入点云将会调用策略补齐)。
void convolve (const Eigen::ArrayXf &h_kernel, const Eigen::ArrayXf &v_kernel, PointCloudOut &output)
// 先根据一个水平卷积核按行对点云卷积,然后根据一个垂直卷积核按列对点云卷积,输入按行卷积的卷积核h_kernel和按列卷积的卷积核v_kernel,输出卷积后的点云output(若输出的点云行数或列数少于输入点云将会调用策略补齐)。
void convolve (PointCloudOut &output)
// 根据设定的同一个卷积核按行按列分别对点云卷积,输出卷积后的点云output(若输出的点云行数或列数少于输入点云将会调用策略补齐)。
类ConvolvingKernel是所有卷积核的基类。
#include
ConvolvingKernel ()
// 空构造函数。
virtual ~ConvolvingKernel ()
// 空析构函数
void setInputCloud (const PointCloudInConstPtr &input)
// 设置输入点云input。
virtual PointOutT operator() (const std::vector< int > &indices, const std::vector< float > &distances)=0
// 根据点的邻域信息对查询点进行卷积处理,输入卷积的点邻域集在源点云的索引的向量indices和到这一点的欧式距离平方向量distances,输出卷积处理后的点。
virtual bool initCompute ()
// 在进行任何计算前,必须调用此方法。注意:在其子类中必须重载此函数,因为在此类中只是接口定义。
类GaussianKernel是基于高斯核的卷积滤波实现,高斯过滤器相当于一个具有平滑性能的低通滤波器,通过该类处理后的点云,相对比较平滑。
#include
GaussianKernel ()
// 默认构造函数
virtual ~GaussianKernel ()
// 析构函数
void setSigma (float sigma)
// 设置sigma参数,sigma参数即高斯函数的标准方差,决定了函数的宽度。
void setThresholdRelativeToSigma (float sigma_coefficient)
// 设置相对sigma参数的距离阈值,距离>sigma_coefficient^2 * sigma^2的点在计算时不予考虑。
void setThreshold (float threshold)
// 设置距离阈值,若点间距离大于阈值则不予考虑。
bool initCompute ()
// 在进行任何计算前,必须调用此方法。
virtual PointOutT operator() (const std::vector< int > &indices, const std::vector< float > &distances)
// 此局部信息中心的卷积点。
类GaussianKernelRGB是附加RGB通道基于高斯核的卷积滤波实现,相对上面的类,其在滤波处理时不仅考虑的空间XYZ信息,而且考虑了RGB可见光信息。
类CropBox过滤掉在用户给定立方体内的点云数据。
#include
CropBox (bool extract_removed_indices=false)
// 构造函数
void setMin (const Eigen::Vector4f &min_pt)
// 设置给定的最小立方体min_ _pt。
Eigen::Vector4f getMin () const
// 获取用户设置的最小立方体。
void setMax (const Eigen::Vector4f &max_pt)
// 设置给定的最大立方体ax_pt。
Eigen::Vector4f getMax () const
// 获取用户设置的最大立方体。
void setTranslation (const Eigen::Vector3f &translation)
// 设置立方体平移向量translation, translation为立方体在3个方向上被平移的(tx,ty,tz)值。
Eigen::Vector3f getTranslation () const
// 获得立方体平移向量。
void setRotation (const Eigen::Vector3f &rotation)
// 通过输入向量,设置立方体旋转变换,rotation为立方体被旋转的(rx,ry,rz)值。
Eigen::Vector3f getRotation () const
// 通过输入一个仿射变换矩阵transform,该变换是滤波前应用到点云的仿射变换。
void setTransform (const Eigen::Affine3f &transform)
// 设置立方体仿射变换矩阵transform。
Eigen::Affine3f getTransform () const
// 获得用户设置的立方体仿射变换矩阵transform。
void setNegative (bool negative)
// 设置最终output点云返回滤波掉点还是保留点,其中,参数negative默认为false,即剔除滤波算法设计需要剔除的点,如果设置为true,则剔除滤波算法设计需要保留的点。
bool getNegative ()
// 获得最终output点云返回滤波掉点还是保留点的布尔值。
void setKeepOrganized (bool keep_organized)
// 设置是否保持滤波后的点云的结构,如果设置keep_organized为true,则保留需要剔除点并通过setUserFilterValue(默认:NaN)设定的值进行赋值,如果设置为false则输出点云中删除滤波后的点,从而改变其组织结构。
bool getKeepOrganized ()
// 获得是否保持滤波后的点云的结构的布尔值。
void setUserFilterValue (float value)
// 提设置过滤掉的点的填充值。
与Class pcl::CropBox< PointT > 的实现相似,详情请参考Class pcl::CropBox< PointT >
类CropBox过滤在给定三维封闭曲面或二维封闭多边形内部或外部的点云数据,封闭曲面或多边形由类ConvexHull或ConcaveHull 处理产生。
#include
CropHull ()
// 空构造函数
void setHullIndices (const std::vector< Vertices > &polygons)
// 通过输入多边形来设置用于对点进行滤波的多边形外壳的顶点,polygons多边形外壳的有序顶点的向量。
std::vector< Vertices > getHullIndices () const
// 获取进行滤波的多边形外壳的顶点。
void setHullCloud (PointCloudPtr points)
// 设置外壳索引对应的点云points。
PointCloudPtr getHullCloud () const
// 获得外壳索引对应的点云指针points。
void setDim (int dim)
// 设置外壳所要使用的维度,该值的设置要对应于pcl:: ConvexHull and pcl::ConcaveHull类所产生的多边形外壳的维度,其中,dim为用于点云滤波的凸多边形的维数(值为2或3)。
void setCropOutside (bool crop_outside)
// 设置去除外壳外部的点还是内部的点,参数crop_outside如果设置为true,滤波器将会滤除多边形外的点,如果设置为false 则滤除多边形内的点。参数crop_ outside默认为true。
类ExtractIndices从一个点云中提取索引。
与class pcl:: ExtractIndices< PointT >的实现相似。
类Filter是滤波模块的最重要的基类,其他所有的滤波模块的类都从它继承,其自身继承于pcl::PCLBase类。
#include
Filter (bool extract_removed_indices=false)
// 空的构造函数,其中参数extract_removed_indices设置为true时,过滤掉的数据点索引保留且存于-一个单独的列表,否则设置为false.
virtual ~Filter ()
// 空析构函数。
IndicesConstPtr const getRemovedIndices ()
// 获取要被剔除的点的索引的指针。
void getRemovedIndices (PointIndices &pi)
// 获取要被剔除的点的索引的指针。
void filter (PointCloud &output)
// 调用滤波方法并返回滤波处理后的点云数据集output。
与class pel::Filter< PointT >的实现相似,详情请参考Class pcl::Filter< PointT >。
类FilterIndices是剔除符合一定限定的点集的基类。
#include
FilterIndices (bool extract_removed_indices=false)
// 构造函数
virtual ~FilterIndices ()
// 空虚拟析构函数
void filter (PointCloud &output)
// 调用滤波方法并返回滤波后的输出点云数据集,参数output是滤波后的输出点
void filter (std::vector< int > &indices)
// 调用滤波方法并返回滤波后的输点云索引,参数indices是滤波后的点云索引。
void setNegative (bool negative)
// 设置最终output点云返回滤波掉点还是保留点,其中,参数negative默认为false,即剔除滤波算法设计需要剔除的点,如果设置为true,则剔除滤波算法设计需要保留的点。
bool getNegative ()
// 获得最终output点云返回滤波掉点还是保留点的布尔值。
void setKeepOrganized (bool keep_organized)
// 设置是否保持滤波后的点云的结构,如果设置keep_organized为true,则保留需要剔除点并通过setUserFilterValue(默认:NaN)设定的值进行赋值,如果设置为false则输出点云中删除滤波后的点,从而改变其组织结构。
bool getKeepOrganized ()
// 获得是否保持滤波后的点云的结构的布尔值。
void setUserFilterValue (float value)
// 提设置过滤掉的点的填充值。
与Class pcl::FilterIndices< PointT >的实现相似,详情请参考Class pcl::FilterIndices< PointT >。
类NormalSpaceSampling对计算输入点云的每个点的法线,通过对法线方向的采样来对点云进行重采样。
#include
NormalSpaceSampling ()
// 空构造函数
~NormalSpaceSampling ()
// 析构函数
void setSample (unsigned int sample)
// 设置要采样的索引的数量,参数sample为采样索引的数量。
unsigned int getSample () const
// 获得要采样的索引的数量。
void setSeed (unsigned int seed)
// 设置随机函数的种子,参数seed为输入的种子。
unsigned int getSeed () const
// 获得随机函数的种子参数。
void setBins (unsigned int binsx, unsigned int binsy, unsigned int binsz)
// 分别设置X.Y、Z方向射线的数量binsx、binsy、binsz。
void getBins (unsigned int &binsx, unsigned int &binsy, unsigned int &binsz) const
// 分别获得X.Y、Z方向射线的数量binsx、binsy、binsz。
void setNormals (const NormalsConstPtr &normals)
// 设置通过输入点云计算得到的法线,参数normals为通过输入点云计算得到的法线。
NormalsConstPtr getNormals () const
// 获得通过输入点云计算得到的法线。
类PassThrough实现对用户给定点云某个字段的限定下,对点云进行简单的基本过滤,例如限制过滤掉点云中所有X字段不在某个范围内的点,该类的使用比较灵活但完全取决于用户的限定字段和对应条件。
#include
PassThrough (bool extract_removed_indices=false)
// 构造函数
void setFilterFieldName (const std::string &field_name)
// 设置限定字段的名称字符串field_ name, 例如”z”等。
std::string const getFilterFieldName ()
// 获得限定字段的名称字符串field_ name。
void setFilterLimits (const float &limit_min, const float &limit_max)
// 设置滤波限制条件,包括最小值limit_ min 和最大值limit_ max。该函数与setFilterFieldName( )一起使用,点云中所有点的setFilterFieldName( )设置的字段的值未在用户所设定区间范围外的点将被删除。参数limit__min为允许的区间范围的最小值,默认为DBL_MIN,limit_max为允许的区间范围的最大值,默认为DBL_ MAX.
void getFilterLimits (float &limit_min, float &limit_max)
// 获得滤波限制条件,包括最小值limit_ min 和最大值limit_ max。
void setFilterLimitsNegative (const bool limit_negative)
// 设置返回滤波限制条件外的点还是内部点,limit_negative默认值为false,输出点云为在设定字段的设定范围内的点集,如果设置为true 则刚好相反。警告:该方法将来将会被移除,用setNegative( )函数代替。
void getFilterLimitsNegative (bool &limit_negative)
// 获得返回滤波限制条件外的点还是内部点的布尔值。
bool getFilterLimitsNegative ()
// 获得返回滤波限制条件外的点还是内部点的布尔值。
与Class pcl::PassThrough< PointT > 的实现相似,详情请参考Class pcl::PassThrough< PointT > 。
类PlaneClipper3D在三维空间实现平面裁剪。
#include
PlaneClipper3D (const Eigen::Vector4f &plane_params)
// 以Eigen::Vector4f作为平面参数的构造函数。
virtual ~PlaneClipper3D () throw ()
// 析构函数
void setPlaneParameters (const Eigen::Vector4f &plane_params)
// 通过输入向量设置平面参数plane_ params。
const Eigen::Vector4f & getPlaneParameters () const
// 获得平面参数plane_ params的输入向量。
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
// 使用其参数克隆基础剪贴器的多态方法。
类ProjectInliers使用一个模型和一组的内点的索引,将内点投影到模型形成新的一个独立点云。
#include
ProjectInliers ()
// 空构造函数
virtual ~ProjectInliers ()
// 空析构函数
void setModelType (int model)
// 通过用户给定的参数设置使用的模型类型,参数Model为模型类型(见model_types. h),有圆球、平面.直线等。
int getModelType ()
// 获得用户给定的模型类型参数。
void setModelCoefficients (const ModelCoefficientsConstPtr &model)
// 设定指向模型系数的指针,model为指向模型系数的指针,对于不同的模型,有不同系数对象,针对模型和模型系数在随机采样一致性一章详细阐述。
ModelCoefficientsConstPtr getModelCoefficients ()
// 获得指向模型系数的指针
void setCopyAllData (bool val)
// 设置返回所有点还是仅返回投影内点后得到的点云,参数val设置为true,则返回所有点,val设置为false, 则仅返回投影的内点。
bool getCopyAllData ()
// 获得返回所有点还是仅返回投影内点后得到的点云的布尔值。
void filter (PointCloud &output)
// 获取滤波处理后的点云output。
与Class pcl::ProjectInliers< PointT > 的实现相似,详情请参考Class pcl::ProjectInliers< PointT > 。
类RadiusOutlierRemoval实现删除离群点的简单的滤波功能,如果一个点在给定搜索半径范围内邻近点数量小于给定阈值K,则判定为离群点并删除。
#include
RadiusOutlierRemoval (bool extract_removed_indices=false)
// 构造函数。
void setRadiusSearch (double radius)
// 设置用于确定滤波的K近邻的球体半径radius.
double getRadiusSearch ()
// 获得用于确定滤波的K近邻的球体半径radius.
void setMinNeighborsInRadius (int min_pts)
// 设置一个点在给定搜索半径内被认为是内部点(即,有效点)所需要的最低近邻数量min_ pts。
int getMinNeighborsInRadius ()
// 获得一个点在给定搜索半径内被认为是内部点(即,有效点)所需要的最低近邻数量min_ pts。
与Class pcl::RadiusOutlierRemoval< PointT >的实现相似,详情请参考Class pcl::RadiusOutlierRemoval< PointT >。
类RandomSample实现对点云的均匀概率随机抽样,具体是参照JeffreyScottVitter的Faster Methods for Random Sampling中的算法A。
#include
RandomSample (bool extract_removed_indices=false)
// 空构造函数
void setSample (unsigned int sample)
// 设置采样数目sample.
unsigned int getSample ()
// 获得采样数目sample.
void setSeed (unsigned int seed)
// 设置随机函数的种子,参数seed为输入的种子。
unsigned int getSeed ()
// 获得随机函数的种子参数seed。
void filter (PointCloud &output)
// 执行基于均匀分布的随机采样,并采样后的点云结果output。
与Class pcl::RandomSample< PointT >的实现相似,详情请参考Class pcl::RandomSample< PointT >。
类StatisticalOutlierRemoval,通过对查询点与邻域点集之间的距离统计判断来过滤离群点。详细算法信息见参考文献R. B. Rusu, Z. C. Marton, N. Blodow,M. Dolha, and M. Beetz. Towards 3D Point Cloud Based Object Maps for Household Environments Robotics and Autonomous Systems Journal (Special Issue onSemantic Knowledge), 2008。
#include
StatisticalOutlierRemoval (bool extract_removed_indices=false)
// 构造函数
void setMeanK (int nr_k)
// 设置用于计算平均距离估计时用的邻域点的数量nr_k。
int getMeanK ()
// 获得用于计算平均距离估计时用的邻域点的数量。
void setStddevMulThresh (double stddev_mult)
// 设置标准差倍数阈值std_ mul,点云中所有点与其邻域的距离大于μ士σ●std_mul则被认为是离群点,其中μ代表估计的平均距离,σ代表标准差。
double getStddevMulThresh ()
// 获得标准差倍数阈值
与Class pcl::StatisticalOutlierRemoval< PointT >的实现相似,详情请参考Class pcl::StatisticalOutlierRemoval< PointT >。
类VoxelGrid根据给定的点云构造一个三维体素栅格并进行下采样达到滤波的效果。具体说来类VoxelGrid通过输入的点云数据创建一个三维体素栅格,然后将每个体素内所有的点都用该体素内的点集的重心来近似,这样就大大减少了数据量,所以该类常用于对大数据量的下采样处理,特别是在配准、曲面重建等工作之前作为预处理,可以很好地提高程序的速度。
#include
VoxelGrid ()
// 空构造函数
virtual ~VoxelGrid ()
// 析构函数
void setLeafSize (const Eigen::Vector4f &leaf_size)
// 通过向量设置体素栅格leaf_ size。
void setLeafSize (float lx, float ly, float lz)
// 通过lx.ly.Iz分别设置体素栅格在XYZ 3个方向上的尺寸。
Eigen::Vector3f getLeafSize ()
// 获得设置体素栅格的向量。
void setDownsampleAllData (bool downsample)
// 设置是否对全部字段进行下采样,若需要在全部字段下采样则设置参数downsammple为True,仅对XYZ字段下采样则设置为False.
bool getDownsampleAllData ()
// 获得是否对全部字段进行下采样的布尔值。
void setMinimumPointsNumberPerVoxel (unsigned int min_points_per_voxel)
// 设置要使用的体素所需的最小点数。
unsigned int getMinimumPointsNumberPerVoxel ()
// 获得要使用的体素所需的最小点数。
void setSaveLeafLayout (bool save_leaf_layout)
// 若需要保存叶结构信息以供将来访问则设置参数save._leaf_layout为true,否则为false。
bool getSaveLeafLayout ()
// 获得是否需要保存叶结构信息的布尔值。
Eigen::Vector3i getMinBoxCoordinates ()
// 滤波后,该函数获取包围盒的3个方向上的最小坐标。
Eigen::Vector3i getMaxBoxCoordinates ()
// 滤波后,该函数获取包围盒的3个方向上的最大坐标。
Eigen::Vector3i getNrDivisions ()
// 滤波后得到三个方向上的分度数。
Eigen::Vector3i getDivisionMultiplier ()
// 滤波后,该函数获取体素索引与3个方向分度数之间转化的乘积系数。
int getCentroidIndex (const PointT &p)
// 获取点p在体素栅格坐标下的一维索引。
std::vector< int > getNeighborCentroidIndices (const PointT &reference_point, const Eigen::MatrixXi &relative_coordinates)
// 相对于指定点的栅格坐标,返回指定栅格坐标处的点的结果下采样云中的索引(如果单元为空/超出边界,则返回-1)。
std::vector< int > getLeafLayout ()
// 返回叶的布局,以便相对于当前位置快速访问单元格。
Eigen::Vector3i getGridCoordinates (float x, float y, float z)
// 返回在某(x,y,z)坐标点对应的的体素(i,j,k)栅格坐标。
int getCentroidIndexAt (const Eigen::Vector3i &ijk)
// 返回与给定的一组坐标对应的下采样云中的索引。
void setFilterFieldName (const std::string &field_name)
// 设置要用于滤波数据的字段的名称。
std::string const getFilterFieldName ()
// 获得用于筛选的字段的名称。
void setFilterLimits (const double &limit_min, const double &limit_max)
// 设置滤波的字段限制
void getFilterLimits (double &limit_min, double &limit_max)
// 获得滤波的字段限制
void setFilterLimitsNegative (const bool limit_negative)
// 设置是否需要返回setFilterLimits(min,max)指定的间隔之外的数据,需要返回则设置limit_negative为true。
void getFilterLimitsNegative (bool &limit_negative)
// 获得是否需要返回setFilterLimits(min,max)指定的间隔之外的数据的布尔值。
bool getFilterLimitsNegative ()
// 获得是否需要返回setFilterLimits(min,max)指定的间隔之外的数据的布尔值。
与Class pcl::VoxelGrid< PointT >的实现相似,详情请参考Class pcl::VoxelGrid< PointT >。
#include
void pcl::removeNaNFromPointCloud (const pcl::PointCloud< PointT > &cloud_in, pcl::PointCloud< PointT > &cloud_out, std::vector< int > &index)
// 输入点云cloud_in,移除X、Y、Z值为NaN的点后,输出点云cloud_out。
void pcl::removeNaNFromPointCloud (const pcl::PointCloud< PointT > &cloud_in, std::vector< int > &index)
// 输入点云,移除X.Y.Z值为NaN的点后,输出点云以cloud_ in. points[index[i]]方式返回。
#include
Eigen::MatrixXi pcl::getHalfNeighborCellIndices ()
// 在体素栅格坐标系下,获取相对点的“上半部”13个邻近点的索引。
Eigen::MatrixXi pcl::getAllNeighborCellIndices ()
// 在体素栅格坐标系下,获取相对点的周围26个邻近点的索引。
#include
void pcl::getMinMax3D (const typename pcl::PointCloud< PointT >::ConstPtr &cloud, const std::string &distance_field_name, float min_distance, float max_distance, Eigen::Vector4f &min_pt, Eigen::Vector4f &max_pt, bool limit_negative=false)
// 指定点云中distance_field_name字段的允许最小值min_ distance 和最大值max_distance,返回min_pt与max_pt,此两个向量限定空间一个矩形框包含在min_distance和max_distance 之内的点集,limit negative如果设置为true则不包含。