1.Class pcl::registration::CorrespondenceEstimation< PointSource, PointTarget, Scalar >
类CorrespondenceEstimation是确定目标和查询点集(或特征)之间的对应关系的基类,输入为目标和源点云,输出为点对,即输出两组点云之间对应点集合。
#include <pcl/registration/correspondence_estimation.h>
CorrespondenceEstimation ()
// 空构造函数
virtual ~CorrespondenceEstimation ()
// 空析构函数
virtual void determineCorrespondences (pcl::Correspondences &correspondences, double max_distance=std::numeric_limits< double >::max())
// 确定输入点云和目标点云的对应关系:输入源点云和对应目标点云之间允许的最大距离max_distance,输出找到的对应关系(查询点索引、目标点索引和他们之间的距离)存储在correspondences中。
virtual void determineReciprocalCorrespondences (pcl::Correspondences &correspondences, double max_distance=std::numeric_limits< double >::max())
// 确定输入点云和目标点云的对应关系:输出找到的对应关系(查询点索引、目标点索引和他们之间的距离存储在correspondences中。该函数与上相同,但是查找的对应点是相互的。
virtual boost::shared_ptr< CorrespondenceEstimationBase< PointSource, PointTarget, Scalar > > clone () const
// 复制并强制转换为CorrespondenceEstimationBase。
void setInputTarget (const PointCloudTargetConstPtr &cloud)
// 设置指向目标点云的指针cloud。
void setPointRepresentation (const PointRepresentationConstPtr &point_representation)
// 当对点进行比较的时,设置指向PointRepresentation 的 boost库共享指针 point_representation,点的表示实现对点到n维特征向量的转化,进而在对应点集搜索时使用kdtree进行搜索。
2.Class pcl::registration::CorrespondenceEstimationNormalShooting< PointSource, PointTarget, NormalT, Scalar >
类CorrespondenceEstimationNormalShooting实现通过法线计算输入点云和目标点云在最小距离约束下的对应点对。输入为目标和源点云,输出为点对,即输出两组点云之间对应点集合。
include <pcl/registration/correspondence_estimation_normal_shooting.h>
CorrespondenceEstimationNormalShooting ()
// 空构造函数
virtual ~CorrespondenceEstimationNormalShooting ()
// 空析构函数
void setSourceNormals (const NormalsConstPtr &normals)
// 设置根据计算输入点云得到的法线normals,注意这里的法线是源点云对应的法线,并非目标点云对应的法线。
NormalsConstPtr getSourceNormals () const
// 获得根据计算输入点云得到的法线normals。
bool requiresSourceNormals () const
// 查看此程序是否需要源法线。
void setSourceNormals (pcl::PCLPointCloud2::ConstPtr cloud2)
// 设置源法线的BLOB方法。
void determineCorrespondences (pcl::Correspondences &correspondences, double max_distance=std::numeric_limits< double >::max())
// 确定输入点云和目标点云的对应关系:输入源点云和对应目标点云之间允许的最大距离max_distance,输出找到的对应关系(查询点索引、目标点索引和他们之间的距离)存储在correspondences中。
virtual void determineReciprocalCorrespondences (pcl::Correspondences &correspondences, double max_distance=std::numeric_limits< double >::max())
// 确定输入点云和目标点云的对应关系:输出找到的对应关系(查询点索引、目标点索引和他们之间的距离存储在correspondences中。该函数与上相同,但是查找的对应点是相互的。
void setKSearch (unsigned int k)
// 设置在对目标点云进行邻近搜索时的邻近点的数量k。
unsigned int getKSearch () const
// 获得在对目标点云进行邻近搜索时的邻近点的数量k。
virtual boost::shared_ptr< CorrespondenceEstimationBase< PointSource, PointTarget, Scalar > > clone () const
// 复制并强制转换为CorrespondenceEstimationBase。
3.Class pcl::registration::CorrespondenceRejector
类CorrespondenceRejector是错误对应关系去除的接口定义的基类。
#include <pcl/registration/correspondence_rejection.h>
CorrespondenceRejector ()
// 空构造函数
virtual ~CorrespondenceRejector ()
// 空析构函数
virtual void setInputCorrespondences (const CorrespondencesConstPtr &correspondences)
// 设置指向输入对应关系的指针引用correspondences。
CorrespondencesConstPtr getInputCorrespondences ()
// 获得指向输入对应关系的指针引用
void getCorrespondences (pcl::Correspondences &correspondences)
// 调用对应关系去除方法,输出没有被去除的对应关系向量correspondences。
virtual void getRemainingCorrespondences (const pcl::Correspondences &original_correspondences, pcl::Correspondences &remaining_correspondences)=0
// 得到在对原有的对应关系集进行去除操作后的有效对应关系列表:输人初始的对应关系列表original_correspondences,输出去除操作后仍保留的对应关系列表remaining_correspondences。
void getRejectedQueryIndices (const pcl::Correspondences &correspondences, std::vector< int > &indices)
// 确定已经被去除的查询点的索引:输入去除操作后的对应关系指针引用correspondences ,输出被去除的查询点索引的向量indices。
const std::string & getClassName () const
// 获取此类名称的字符串表示形式。
virtual bool requiresSourcePoints () const
// 查看此程序是否需要源点云。
virtual void setSourcePoints (pcl::PCLPointCloud2::ConstPtr)
// 设置源点云的抽象方法
virtual bool requiresSourceNormals () const
// 查看此程序是否需要源法线。
virtual void setSourceNormals (pcl::PCLPointCloud2::ConstPtr)
// 设置源法线的抽象方法。
virtual bool requiresTargetPoints () const
// 查看此程序是否需要目标点云。
virtual void setTargetPoints (pcl::PCLPointCloud2::ConstPtr)
// 设置目标点云的抽象方法
virtual bool requiresTargetNormals () const
// 查看此程序是否需要源目标法线。
virtual void setTargetNormals (pcl::PCLPointCloud2::ConstPtr)
// 设置目标法线的抽象方法。
4.Class pcl::registration::CorrespondenceRejectorDistance
类CorrespondenceRejectorDistance基于设定对应关系之间的距离阈值实现了一个简单的错误对应关系去除的算法。
#include <pcl/registration/correspondence_rejection_distance.h>
CorrespondenceRejectorDistance ()
// 空构造函数
virtual ~CorrespondenceRejectorDistance ()
// 空析构函数
void getRemainingCorrespondences (const pcl::Correspondences &original_correspondences, pcl::Correspondences &remaining_correspondences)
// 得到在对原有的对应关系集进行去除操作后的有效对应关系列表:输人初始的对应关系列表original_correspondences,输出去除操作后仍保留的对应关系列表remaining_correspondences。
virtual void setMaximumDistance (float distance)
// 设置用于对应关系去除的最大距离distance,若对应关系中的点间距离大于设置的阈值则去除。
float getMaximumDistance ()
// 获得用于对应关系去除的最大距离distance
template<typename PointT >
void setInputCloud (const typename pcl::PointCloud< PointT >::ConstPtr &cloud)
// 输入一个源点云数据集cloud(必须包含XYZ数据),用于计算对应关系距离。
template<typename PointT >
void setInputSource (const typename pcl::PointCloud< PointT >::ConstPtr &cloud)
// 输入一个源点云数据集cloud(必须包含XYZ数据),用于计算对应关系距离。
template<typename PointT >
void setInputTarget (const typename pcl::PointCloud< PointT >::ConstPtr &target)
// 输入一个目标点云数据集target(必须包含XYZ数据),用于计算对应关系距离其他成员函数均为基类成员函数的具体实现,详情请参考基类class pcl: : regis-tration: :CorrespondenceRejector。
virtual bool requiresSourcePoints () const
// 查看此程序是否需要源点云。
virtual void setSourcePoints (pcl::PCLPointCloud2::ConstPtr)
// 设置源点云的抽象方法
virtual bool requiresTargetPoints () const
// 查看此程序是否需要目标点云。
virtual void setTargetPoints (pcl::PCLPointCloud2::ConstPtr)
// 设置目标点云的抽象方法
5.Class pcl::registration::CorrespondenceRejectorFeatures
类CorrespondenceRejectorFeatures基于测度对应点之间的特征描述子之间的不同实现了一个错误对应关系去除的算法,上面的类是测度欧氏空间(欧几里德度量)的距离特征的不同。
#include <pcl/registration/correspondence_rejection_features.h>
CorrespondenceRejectorFeatures ()
// 空构造函数
virtual ~CorrespondenceRejectorFeatures ()
// 空析构函数
void getRemainingCorrespondences (const pcl::Correspondences &original_correspondences, pcl::Correspondences &remaining_correspondences)
// 得到在对原有的对应关系集进行去除操作后的有效对应关系列表:输人初始的对应关系列表original_correspondences,输出去除操作后仍保留的对应关系列表remaining_correspondences。
template<typename FeatureT >
void setSourceFeature (const typename pcl::PointCloud< FeatureT >::ConstPtr &source_feature, const std::string &key)
// 设置指向源点云的特征描述子的指针source_feature,key是表征特征描述子的唯一标识符。
template<typename FeatureT >
pcl::PointCloud< FeatureT >::ConstPtr getSourceFeature (const std::string &key)
// 获得指向源点云的特征描述子的指针source_feature
template<typename FeatureT >
void setTargetFeature (const typename pcl::PointCloud< FeatureT >::ConstPtr &target_feature, const std::string &key)
// 设置指向目标点云的特征描述子的指针 target_feature, key是表征特征描述子的唯一标识符。
template<typename FeatureT >
pcl::PointCloud< FeatureT >::ConstPtr getTargetFeature (const std::string &key)
// 获得指向目标点云的特征描述子的指针 target_feature,
template<typename FeatureT >
void setDistanceThreshold (double thresh, const std::string &key)
// 在特征FeatureT(该类的模板参数,指定测度时使用的特征描述子类型)空间设定一个源点云里和目标点云的特征之间的强制距离阈值:输人距离阈值thresh和标志特征的字符串 key。
bool hasValidFeatures ()
// 测试是否所有的特征都有效,即每一个字符串key都对应一个有效的源点云、目标点云和搜索方法,如果测试通过,则返回true,否则返回false。
template<typename FeatureT >
void setFeatureRepresentation (const typename pcl::PointRepresentation< FeatureT >::ConstPtr &fr, const std::string &key)
// 提供指向比较特征时使用的PointPresation的Boost共享指针。Provide a boost shared pointer to a PointRepresentation to be used when comparing features. More...
6.Class pcl::registration::CorrespondenceRejectorOneToOne
类CorrespondenceRejectorOneToOne基于消除重复匹配索引实现错误对应关系去除的算法,该算法处理的输入对应关系具有一对多的对应关系,即在源点云中一个点,在目标点云中有多个对应点的情况。
#include <pcl/registration/correspondence_rejection_one_to_one.h>
CorrespondenceRejectorOneToOne ()
// 空构造函数
void getRemainingCorrespondences (const pcl::Correspondences &original_correspondences, pcl::Correspondences &remaining_correspondences)
// 得到在对原有的对应关系集进行去除操作后的有效对应关系列表:输人初始的对应关系列表original_correspondences,输出去除操作后仍保留的对应关系列表remaining_correspondences。
7.Class pcl::registration::CorrespondenceRejectorSampleConsensus< PointT >
类CorrespondenceRejectorSampleConsensus基于随机采样一致性(RandomSample Consensus)来确定内部点(去除离群点)算法实现了一个错误对应关系去除的算法,这里的离群点表示错误的对应关系,内点则表示正确的需要保留的对应关系。
#include <pcl/registration/correspondence_rejection_sample_consensus.h>
CorrespondenceRejectorSampleConsensus ()
// 空构造函数
virtual ~CorrespondenceRejectorSampleConsensus ()
// 空析构函数
void getRemainingCorrespondences (const pcl::Correspondences &original_correspondences, pcl::Correspondences &remaining_correspondences)
// 得到在对原有的对应关系集进行去除操作后的有效对应关系列表:输人初始的对应关系列表original_correspondences,输出去除操作后仍保留的对应关系列表remaining_correspondences。
virtual void setInputCloud (const PointCloudConstPtr &cloud)
// 输入一个源点云数据集cloud(必须包含XYZ数据),用于计算对应关系距离。
PointCloudConstPtr const getInputCloud ()
// 获得输入的源点云的指针
virtual void setInputSource (const PointCloudConstPtr &cloud)
// 输入一个源点云数据集cloud(必须包含XYZ数据),用于计算对应关系距离。
PointCloudConstPtr const getInputSource ()
// 获得输入的源点云的指针
virtual void setTargetCloud (const PointCloudConstPtr &cloud)
// 输入一个目标点云数据集target(必须包含XYZ数据),用于计算对应关系距离。
virtual void setInputTarget (const PointCloudConstPtr &cloud)
// 输入一个目标点云数据集target(必须包含XYZ数据),用于计算对应关系距离。
PointCloudConstPtr const getInputTarget ()
// 获得输入的,飙点云的指针
virtual bool requiresSourcePoints () const
// 查看此程序是否需要源点云。
virtual void setSourcePoints (pcl::PCLPointCloud2::ConstPtr)
// 设置源点云的抽象方法
virtual bool requiresTargetPoints () const
// 查看此程序是否需要目标点云。
virtual void setTargetPoints (pcl::PCLPointCloud2::ConstPtr)
// 设置目标点云的抽象方法
void setInlierThreshold (double threshold)
// 设置用于对应点之间的最大距离threshold,若对应点间距离小于比设置的阈值则认为是内部点。
double getInlierThreshold ()
// 获得用于对应点之间的最大距离。
void setMaxIterations (int max_iterations)
// 设置最大迭代次数max_iterations,该迭代次数是采样一致性估计算法中的迭代次数,因为该算法没有迭代次数的上限。
void setMaximumIterations (int max_iterations)
// 设置最大迭代次数max_iterations,该迭代次数是采样一致性估计算法中的迭代次数,因为该算法没有迭代次数的上限。
int getMaxIterations ()
// 获得最大迭代次数
int getMaximumIterations ()
// 获得最大迭代次数
Eigen::Matrix4f getBestTransformation ()
// 在执行随机采样一致性的对应关系去除值后返回最佳的变换矩阵。
void setRefineModel (const bool refine)
// 设置是否应使用内嵌变量的方差在内部优化模型。
bool getRefineModel () const
// 获得是否应使用内嵌变量的方差在内部优化模型的布尔值。
void getInliersIndices (std::vector< int > &inlier_indices)
// 获得对应关系去除器找到的内嵌索引。
void setSaveInliers (bool s)
// 设置是否保存Inliers。
bool getSaveInliers ()
// 获得是否保存Inliers的布尔值。
8.Class pcl::registration::CorrespondenceRejectorTrimmed
类CorrespondenceRejectorTrimmed通过对两个配准中点云的重叠部分的k个最佳对应关系估计,实现一个类似ICP的配准算法的对应关系去除算法。
#include <pcl/registration/correspondence_rejection_trimmed.h>
CorrespondenceRejectorTrimmed ()
// 空构造函数
virtual ~CorrespondenceRejectorTrimmed ()
// 空析构函数
virtual void setOverlapRatio (float ratio)
// 设置点云之间重叠的预计比率ratio:0~1,若没有重叠则设为0,全部重叠则设为1。
float getOverlapRatio ()
// 获得点云之间重叠的预计比率。
void setMinCorrespondences (unsigned int min_correspondences)
// 设置一个对应关系的最低数量要求;如果指定的重叠率过低使得对应关系过少,则返回至少nr_min_correspondences_correspondences个对应关系(或者在nr_min_correspondences__correspondences 比给出的对应关系更少的时候,返回全部的对应关系)
unsigned int getMinCorrespondences ()
// 获得对应关系的最低数量要求
void getRemainingCorrespondences (const pcl::Correspondences &original_correspondences, pcl::Correspondences &remaining_correspondences)
// 得到在对原有的对应关系集进行去除操作后的有效对应关系列表:输人初始的对应关系列表original_correspondences,输出去除操作后仍保留的对应关系列表remaining_correspondences。
9.Class pcl::registration::ELCH< PointT >
类ELCH是 ELCH(Explicit Loop Closing Heuristic)对应算法的实现,该类输入为n组有顺序的点云,其中每连续两组(第一组和最后一组)之间有重叠,输出为估计所有点云到第一组点云的变换矩阵,并且通过第一组和最后一组之间的变换矩阵修正来提高精度修正整个所有变换,最终输出是以所有点云转化到同一坐标系下的形式表现,该算法的典型应用就是机器人中的SLAM(Simultaneous Localization andMapping,即时定位与地图创建)问题。ELCH是通过照相机进行闭合循环的移动同时扫描获取点云,然后根据相机的位姿信息的来对点云进行配准。一般情况下,相机在进行一个闭合循环的移动后,最后一次扫描的点云和第一次扫描的点云有所重叠,通过估计照相机位姿可以进行配准。具体可参考A Heuristic Loop Closing Tech-nique for Large—Scale 6D SLAM。
#include <pcl/registration/elch.h>
typedef boost::adjacency_list< boost::listS, boost::eigen_vecS, boost::undirectedS, Vertex, boost::no_property > LoopGraph
// 定义了一个名为LoopGraph 的新类型的邻接表来容纳SLAM图,存储点云获取设备移动过程当中每个位姿与其当时对应的场景点云。
ELCH ()
// 空构造函数
virtual ~ELCH ()
// 空析构函数
void addPointCloud (PointCloudPtr cloud)
// 向内部 LoopGraph添加一个新的点云数据。
LoopGraphPtr getLoopGraph ()
// 获取内部LoopGraph。
void setLoopGraph (LoopGraphPtr loop_graph)
// 设置一个新的内部LoopGraph。
boost::graph_traits< LoopGraph >::vertex_descriptor getLoopStart ()
// 获得一个循环的第一次扫描对应的vertex_descriptor对象loop_start,包含当时场景点云。
void setLoopStart (const typename boost::graph_traits< LoopGraph >::vertex_descriptor &loop_start)
// 设置一个循环的第一次扫描对应的vertex_descriptor对象loop_start,包含当时场景点云。
boost::graph_traits< LoopGraph >::vertex_descriptor getLoopEnd ()
// 获得一个循环的最后一次扫描对应的vertex_descriptor对象 loop_end,包含当时场景点云。
void setLoopEnd (const typename boost::graph_traits< LoopGraph >::vertex_descriptor &loop_end)
// 设置一个循环的最后一次扫描对应的vertex_descriptor对象 loop_end,包含当时场景点云。
RegistrationPtr getReg ()
// 获得用于计算变换矩阵时的配准算法对象。
void setReg (RegistrationPtr reg)
// 设置用于计算变换矩阵时的配准算法对象。
Eigen::Matrix4f getLoopTransform ()
// 获得第一次和最后一次扫描场景点云之间的变换矩阵
void setLoopTransform (const Eigen::Matrix4f &loop_transform)
// 设置第一次和最后一次扫描场景点云之间的变换矩阵
void compute ()
// 通过闭合开始和结束点云的循环LoopGraph,采用ELCH算法计算所有点云之间的变换矩阵,并将LoopGraph 中所有点云转化到同一坐标系下,即该函数不仅计算点云之间的变换矩阵,而且完成变换。
10.Class pcl::GeneralizedIterativeClosestPoint< PointSource, PointTarget >
类GeneralizedIterativeClosestPoint是一个ICP算法的变种,实现Alex Segal等人所称的广义迭代最近点算法,该类的输入为目标和源点云,输出为两组点云之间的变换矩阵。
#include <pcl/registration/gicp.h>
GeneralizedIterativeClosestPoint ()
// 空构造函数
void setInputCloud (const PointCloudSourceConstPtr &cloud)
// 输入一个源点云数据集cloud。
void setInputSource (const PointCloudSourceConstPtr &cloud)
// 输入一个源点云数据集cloud。
void setSourceCovariances (const MatricesVectorPtr &covariances)
// 输入指向输入源点云的协方差的指针(如果在外部计算!)。
void setInputTarget (const PointCloudTargetConstPtr &target)
// 输入一个目标点云数据集target。
void setTargetCovariances (const MatricesVectorPtr &covariances)
// 输入指向输入目标点云的协方差的指针(如果在外部计算!)。
void estimateRigidTransformationBFGS (const PointCloudSource &cloud_src, const std::vector< int > &indices_src, const PointCloudTarget &cloud_tgt, const std::vector< int > &indices_tgt, Eigen::Matrix4f &transformation_matrix)
// 使用Levenberg—Marquardt迭代非线性逼近法,估计一个刚体旋转变换:输入源点云数据集cloud_src、源点云数据集中感兴趣点的索引的向量indices_src、目标点云数据集 cloud_tgt和目标点云数据集中感兴趣点的索引的向量indices_tgt;输出由此计算产生的变换矩阵存储到transformation_matrix中。
const Eigen::Matrix3d & mahalanobis (size_t index) const
// 根据给定的点索引,返回马氏距离(马哈拉诺比斯距离)
void computeRDerivative (const Vector6d &x, const Eigen::Matrix3d &R, Vector6d &g) const
// 计算旋转矩阵微分,输入为旋转矩阵的旋转角度x[3],x[4]和x[5],R旋转矩阵本身,输出存储在g[3]、g[4].g[5]。
void setRotationEpsilon (double epsilon)
// 设置旋转矩阵收敛的判断系数epsilon(连续两次旋转之间的最大允许差异):当优化过程满足该系数时,可视为收敛到最终解。
double getRotationEpsilon ()
// 获得旋转矩阵收敛的判断系数epsilon(连续两次旋转之间的最大允许差异):当优化过程满足该系数时,可视为收敛到最终解。
void setCorrespondenceRandomness (int k)
// 设置计算协方差时选择附近多少个点为邻居:设置的点的数量k越高,协方差计算越准确但也会相应降低计算速度。
int getCorrespondenceRandomness ()
// 获得计算协方差时选择附近多少个点为邻居。
void setMaximumOptimizerIterations (int max)
// 设置优化步骤的最大迭代次数 。
int getMaximumOptimizerIterations ()
// 获得优化步骤的最大迭代次数 。
11.Class pcl::registration::GraphHandler< GraphT >
类GraphHandler是一个一般的SLAM( Simultaneous Localization and Map-ping,即时定位与地图创建)图接口模板类的封装,该类为模板类,参数为图的类型GraphT,具体的不同图实现的概念与boost: : graph中 BidirectionalGraph,Adjacen-cyGraph、VertexAndEdgeListGraph、MutableGraph是一致的,该类用于管理在SLAM中扫描时所产生的实时位姿与对应的点云,每个图的顶点对应一个点云和当时获取点云的位姿,每个边则存储两个相邻位姿与对应点云之间的约束关系,比如空间约束关系变换矩阵等。
#include <pcl/registration/graph_handler.h>
GraphHandler ()
// 空构造函数
~GraphHandler ()
// 空析构函数
void clear ()
// 清除对象管理的图。
GraphConstPtr getGraph () const
// 返回一个指向该对象对应图的共享指针
GraphPtr getGraph ()
// 返回一个指向该对象对应图的共享指针
template<class PointT >
Vertex addPointCloud (const typename pcl::PointCloud< PointT >::ConstPtr &cloud, const Eigen::Matrix4f &pose)
// 添加一个新的点云到图中并返回其对应的顶点:输人新的点云 cloud 和姿态pose,返回新的顶点v。
template<class EstimateT >
Vertex addGenericVertex (const EstimateT &estimate)
// 根据给定的estimate,estimate对象中存储一点云和其对应的扫描获取时或估计得来的位姿,添加一个新的普通顶点到图中,返回对应的顶点v。
template<class InformationT >
Edge addPoseConstraint (const Vertex &v_start, const Vertex &v_end, const Eigen::Matrix4f &relative_transformation, const InformationT &information_matrix)
// 在图添加一个新的边:输人两个顶点 v_start、v_end,以及从v_start到v_end 的变换矩阵relative_transformation, information_matrix未明确定义,方便用户存储除顶点和变换矩阵以外的额外信息进行扩展,返回一个对应的边e。
template<class MeasurementT >
Edge addGenericConstraint (const MeasurementT &measurement)
// 根据给定MeasurementT对象measurement 创建一个新的普通约柬:输入人measurement,返回一个对应的边e。
void removeVertex (const Vertex &v)
// 去除图中的一个顶点v。
void removeConstraint (const Edge &e)
// 去除图中一个约束(即一条边)e。
12.Class pcl::registration::GraphOptimizer< GraphT >
类GraphOptimizer是对不同类型的图优化的模板类接口的封装,该类为模板类,参数为图的类型GraphT,具体实现对不同类型图的优化处理,输入为图,输出为优化过的图。
#include <pcl/registration/graph_optimizer.h>
virtual bool optimize (GraphHandler< GraphT > &inout_graph)=0
// 优化给定的图inout_graph。
virtual ~GraphOptimizer ()
// 析构函数
13.Class pcl::GraphRegistration< GraphT >
类GraphRegistration是基于图的配准方法的基类,同样该类为模板类,参数为图的类型GraphT。
#include <pcl/registration/graph_registration.h>
GraphRegistration ()
// 空构造函数
virtual ~GraphRegistration ()
// 空析构函数
template<typename PointT >
void addPointCloud (const typename pcl::PointCloud< PointT >::ConstPtr &cloud, const Eigen::Matrix4f &pose)
// 添加一个点云和对应的扫描获取时的位姿到该对象的图管理对象gh中。
void setGraphHandler (GraphHandlerPtr &gh)
// 设置图管理对象gh。
GraphHandlerPtr getGraphHandler ()
// 获得图管理对象gh。
GraphHandlerConstPtr getGraphHandler () const
获取指向图管理对象的指针。
void compute ()
// 检查新的位姿及对应点云是否添加成功,如果成功。调用由子类实现的配准方法,完成对新加点云与图管理对象中原有点云之间的配准。
14.Class pcl::SampleConsensusInitialAlignment< PointSource, PointTarget, FeatureT >
类SampleConsensusInitialAlignment实现了Rusu 等人的Fast Point Feature Histograms (FPFH) for 3D Registration文中的SAC- IA采样一致性初始配准算法,该算法属于粗配准,一般和ICP精确配准配合使用。
#include <pcl/registration/ia_ransac.h>
SampleConsensusInitialAlignment ()
// 构造函数
void setSourceFeatures (const FeatureCloudConstPtr &features)
// 设置一个指向源点云的特征描述对象的boost库的共享指针features.
FeatureCloudConstPtr const getSourceFeatures ()
// 获取一个指向源点云特征描述对象的指针。
void setTargetFeatures (const FeatureCloudConstPtr &features)
// 设置一个指向目标点云的特征描述对象的boost库的共享指针features.
FeatureCloudConstPtr const getTargetFeatures ()
// 获取一个指向目标点云特征描述对象的指针。
void setMinSampleDistance (float min_sample_distance)
// 设置样本间的最小距离。
float getMinSampleDistance ()
// 获取样本间的最小距离。
void setNumberOfSamples (int nr_samples)
// 设置每次迭代中使用的样本数量。
int getNumberOfSamples ()
// 获取每次迭代中使用的样本数量。
void setCorrespondenceRandomness (int k)
// 设置计算协方差时选择附近多少个点为邻居:设置的点的数量k越高,协方差计算越准确但也会相应降低计算速度。
int getCorrespondenceRandomness ()
// 获取计算协方差时选择附近多少个点为邻居
void setErrorFunction (const boost::shared_ptr< ErrorFunctor > &error_functor)
// 指定误差函数,算法将对其求最小值来获取收敛结果。
boost::shared_ptr< ErrorFunctor > getErrorFunction ()
// 获取误差函数的boost共享指针。
15.Class pcl::IterativeClosestPoint< PointSource, PointTarget, Scalar >
类IterativeClosestPoint是实现ICP算法的基类,其输入为源点云与目标点云,以及相应的收敛参数设置等,输出为对源点云用ICP估计的变换矩阵变换后的点云。
#include <pcl/registration/icp.h>
IterativeClosestPoint ()
// 空构造函数
virtual ~IterativeClosestPoint ()
// 空析构函数
pcl::registration::DefaultConvergenceCriteria< Scalar >::Ptr getConvergeCriteria ()
// 返回指向IterativeClosestPoint类使用的DefaultConvergenceCriteria的指针。
virtual void setInputSource (const PointCloudSourceConstPtr &cloud)
// 输入一个源点云数据集cloud。
virtual void setInputTarget (const PointCloudTargetConstPtr &cloud)
// 输入一个目标点云数据集cloud。
void setUseReciprocalCorrespondences (bool use_reciprocal_correspondence)
// 设置是否使用倒数对应。
bool getUseReciprocalCorrespondences () const
// 获得是否使用倒数对应的布尔值。
void align (PointCloudSource &output)
// 利用ICP算法估计的变换矩阵,对输入点云即源点云进行变换并输出到 output中。
16.Class pcl::IterativeClosestPointNonLinear< PointSource, PointTarget, Scalar >
类IterativeClosestPointNonLinear是一个使用Levenberg - Marquardt非线性优化后的ICP算法变种的实现,其输入为源点云与目标点云,以及相应的收敛參数设置等,输出为对源点云用ICP估计的变换矩阵变换后的点云。
#include <pcl/registration/icp_nl.h>
IterativeClosestPointNonLinear ()
// 空构造函数
void align (PointCloudSource &output)
// 利用ICP算法估计的变换矩阵,对输入点云即源点云进行变换并输出到 output中。
17.Class pcl::registration::LUM< PointT >
类LUM是基于LuandMilios的算法实现的全局一致扫描配准(Globally Consistent Scan Matching),LUM与前面的ELCH有些相似,内部管理一个SLAM-Graph,其计算时是利用图中的第一个顶点的点云作为参照,对后续的顶点的点云进行配准,以达到所有点云最终都变换到与第一个点云统一 的坐标系下,目前该算法要求输入的图中顶点必须连续切有loop存在,这样就保证了每个顶点对应点云之间重叠的存在,该类对用户输入不检查,所有该条件用户需要自行保证,以便得到合理的输出。
#include <pcl/registration/lum.h>
typedef boost::adjacency_list< boost::eigen_vecS, boost::eigen_vecS, boost::bidirectionalS, VertexProperties, EdgeProperties, boost::no_property, boost::eigen_listS > SLAMGraph
// 定义了一个名为SLAMGraph的新类型的邻接链表来容纳SLAM(SimultaneousLocalizationandMapping,即时定位与地图创建)图,该结构实现对配准时点云的管理,其中顶点实现对点云和扫描点云时的位姿存储更新管理,边实现对两组邻接点云之间变化矩阵约束及对应点对向量的存储更新管理,该结构目前只在该LUM内部定义和使用,其实它同样可以用到其他类似的算法当中。
LUM ()
// 空构造函数
void setLoopGraph (const SLAMGraphPtr &slam_graph)
// 设置内部SLAMGraph对象slam_graph.
SLAMGraphPtr getLoopGraph () const
// 获得内部SLAMGraph对象slam_ .graph.
SLAMGraph::vertices_size_type getNumVertices () const
// 返回SLAMGraph中顶点的数量。
void setMaxIterations (int max_iterations)
// 设置调用compute()方法进行迭代计算的最大次数。
int getMaxIterations () const
// 获得调用compute()方法进行迭代计算的最大次数。
void setConvergenceThreshold (float convergence_threshold)
// 设置收敛距离阈值convergence_ distance, 在估计一条边上两个顶点的位姿时,图中边收敛时允许的最大距离。
float getConvergenceThreshold () const
// 获取收敛距离阈值
Vertex addPointCloud (const PointCloudPtr &cloud, const Eigen::Vector6f &pose=Eigen::Vector6f::Zero())
// 向内部SLAMGraph添加一个新的点云cloud。
void setPointCloud (const Vertex &vertex, const PointCloudPtr &cloud)
// 设置一个点云cloud到SLAMGraph的顶点vertex之中。
PointCloudPtr getPointCloud (const Vertex &vertex) const
// 获取一个点云cloud到SLAMGraph的顶点vertex之中。
void setPose (const Vertex &vertex, const Eigen::Vector6f &pose)
// 设置一个位姿pose到SLAMGraph的顶点vertex之中。
Eigen::Vector6f getPose (const Vertex &vertex) const
// 获取计算后的位姿。
Eigen::Affine3f getTransformation (const Vertex &vertex) const
// 返回vertex中点云当前对应的变换矩阵。
void setCorrespondences (const Vertex &source_vertex, const Vertex &target_vertex, const pcl::CorrespondencesPtr &corrs)
// 设置source_vertex和target_vertex两个顶点对应点云的对应点对集合。
pcl::CorrespondencesPtr getCorrespondences (const Vertex &source_vertex, const Vertex &target_vertex) const
// 获取source_vertex和target_vertex两个顶点对应点云的对应点对集合。
void compute ()
// 开始LUM的计算,其计算时是利用图中的第一个顶点的点云作为参照,对后续的顶点的点云进行配准,以达到所有点云最终都变换到与第一个点云统一的坐标系下,计算在两种情况系结束:
// (1)迭代次数超过setMaxIterations设置的最大值。
// (2)在图中所有的边都收敛,对于边收敛有三种情况:在迭代过程中一条边上的两个顶点之间的相对位姿距离和角度分别都小于用setConvergenceDistance和setConvergenceAngle设置的阈值时;精度达到LUM模型的精度要求;在计算当中遇到NAN或inf值时。计算过程并不改变顶点上点云本身的位姿,而是图中各个顶点的位姿,所有相关计算结果可通过函数获取。
PointCloudPtr getTransformedCloud (const Vertex &vertex) const
// 获取经过计算得到变换矩阵变换vertex中点云之后的点云。
PointCloudPtr getConcatenatedCloud () const
// 获取经过计算得到变换矩阵变换图中所有顶点中点云之后的点云。
18.Class pcl::PairwiseGraphRegistration< GraphT, PointT >
类PairwiseGraphRegistration实现对两个点云的两两配准。
#include <pcl/registration/pairwise_graph_registration.h>
virtual ~PairwiseGraphRegistration ()
// 析构函数
PairwiseGraphRegistration ()
// 构造函数
PairwiseGraphRegistration (const RegistrationPtr ®, bool incremental)
// 构造函数
void setRegistrationMethod (const RegistrationPtr ®)
// 设置配准方法reg。
RegistrationPtr getRegistrationMethod ()
// 获得配准方法。
void setIncremental (bool incremental)
// 如果设置incremental为True则总是设置初始变换为单位矩阵。
bool isIncremental () const
// 获取incremental是否为True的布尔值。
void addPointCloud (const typename pcl::PointCloud< PointT >::ConstPtr &cloud, const Eigen::Matrix4f &pose)
// 添加一个点云和相应照相机位姿到图中。
void setGraphHandler (GraphHandlerPtr &gh)
// 设置图处理对象gh,该对象用于类内部对点云和位姿的存储更新管理。
GraphHandlerPtr getGraphHandler ()
// 获取指向图处理对象的指针。
GraphHandlerConstPtr getGraphHandler () const
// 获取指向图处理对象的指针。
void compute ()
// 检查是否有新的位姿和点云添加成功,接下来调用由子类实现的配准方法,将新添加的点云变换到与图中其他点云同一坐标系下。
19.Class pcl::Registration< PointSource, PointTarget, Scalar >
类Registration是配准类的基类,定义配准需要的常用接口,。
#include <pcl/registration/registration.h>
Registration ()
// 空构造函数
virtual ~Registration ()
// 析构函数
void setTransformationEstimation (const TransformationEstimationPtr &te)
// 设置一个指向变换估计对象的指针te,该对象用于变换矩阵的估计。
void setCorrespondenceEstimation (const CorrespondenceEstimationPtr &ce)
// 设置一个指向对应估计对象的指针te,该对象用于变对应关系的估计。
void setInputCloud (const PointCloudSourceConstPtr &cloud)
// 设置一个指向源点云的指针cloud。
PointCloudSourceConstPtr const getInputCloud ()
// 获取一个指向源点云的指针。
virtual void setInputSource (const PointCloudSourceConstPtr &cloud)
// 设置一个指向源点云的指针cloud。
PointCloudSourceConstPtr const getInputSource ()
// 获取一个指向源点云的指针。
virtual void setInputTarget (const PointCloudTargetConstPtr &cloud)
// 设置一个指向目标点云的指针cloud。
PointCloudTargetConstPtr const getInputTarget ()
// 获取一个指向目标点云的指针c。
void setSearchMethodTarget (const KdTreePtr &tree, bool force_no_recompute=false)
// 设置指向用于在目标点云中查找对应关系的搜索对象的指针
KdTreePtr getSearchMethodTarget () const
// 获取指向用于在目标点云中查找对应关系的搜索对象的指针
void setSearchMethodSource (const KdTreeReciprocalPtr &tree, bool force_no_recompute=false)
// 设置是一个指向用于在源点云中查找对应关系的搜索对象的指针(通常用于相互对应关系查找)。
KdTreeReciprocalPtr getSearchMethodSource () const
// 获取是一个指向用于在源点云中查找对应关系的搜索对象的指针(通常用于相互对应关系查找)。
Matrix4 getFinalTransformation ()
// 返回通过配准方法估计的最终变换矩阵。
Matrix4 getLastIncrementalTransformation ()
// 返回通过配准方法估计的最后一次的增量变换矩阵。
void setMaximumIterations (int nr_iterations)
// 设置内部优化运行的最大迭代次数。
int getMaximumIterations ()
// 获取内部优化运行的最大迭代次数。
void setRANSACIterations (int ransac_iterations)
// 设置采用随机采样一致性(RANSAC)时运行的迭代次数。
double getRANSACIterations ()
// 获取采用随机采样--致性(RANSAC)时运行的迭代次数。
void setRANSACOutlierRejectionThreshold (double inlier_threshold)
// 设置RANSAC内部去除离群点循环时的内部点距离阈值:若目标点和变换后的源点之间的距离小于给定的内部点距离阈值,则认为这个点是内部点,否则认为为外点。阈值默认为0.05 m。
double getRANSACOutlierRejectionThreshold ()
// 获取RANSAC内部去除离群点循环时的内部点距离阈值:
void setMaxCorrespondenceDistance (double distance_threshold)
// 设置分别来自源点云和目标点云的两个对应点间的最大距离阈值:若两个对应点之间的距离大于设置的阈值,则将在点对齐过程中被忽略,即在对齐配准过程中只考虑对应点距离小于该阈值的点对。
double getMaxCorrespondenceDistance ()
// 获取分别来自源点云和目标点云的两个对应点间的最大距离阈值
void setTransformationEpsilon (double epsilon)
// 设置转换矩阵的收敛系数(连续两次变换矩阵之间的最大允许差异):当优化过程迭代满足该系数时,可视为收敛到最终变换矩阵。
double getTransformationEpsilon ()
// 设获取转换矩阵的收敛系数(连续两次变换矩阵之间的最大允许差异)
void setEuclideanFitnessEpsilon (double epsilon)
// 设置一个误差限,若两次连续的ICP循环间的误差大于设置的误差限,则不能被认为是收敛:该误差可由对应点之间距离的差平方和除以对应点对的数量得到。
double getEuclideanFitnessEpsilon ()
// 获取一个误差限,若两次连续的ICP循环间的误差大于设置的误差限,则不能被认为是收敛:该误差可由对应点之间距离的差平方和除以对应点对的数量得到。
void setPointRepresentation (const PointRepresentationConstPtr &point_representation)
// 当对点进行比较的时,设置指向PointRepresentation的boost库共享指针point_representation,其用于将点转化为n维向量。
template<typename FunctionSignature >
bool registerVisualizationCallback (boost::function< FunctionSignature > &visualizerCallback)
// 为了在可视化窗口更新每次迭代后得到的点云,通过该函数设置visualizerCalIback实现配准对象与可视化对象之间的信息传递,注册函数在配准线程中,每迭代一次就被调用一次。
double getFitnessScore (double max_range=std::numeric_limits< double >::max())
// 返回欧式适合度评分(从源点云到目标点云的距离平方和):输人的max_range考虑的点对之间的最大允许距离,大于该距离阈值的点对在计算时不考虑。
double getFitnessScore (const std::vector< float > &distances_a, const std::vector< float > &distances_b)
// 返回欧式适合度评分(从源点云到目标点云的距离平方和):distances_a是第一组对应点之间的距离,distances_b是第二组对应点之间的距离。
bool hasConverged ()
// 返回最新一次对齐配准迭代后的收敛状态,如果true表示已经收敛。
void align (PointCloudSource &output)
// 执行配准算法,输出变换后返回的源(输入)点云output.
void align (PointCloudSource &output, const Matrix4 &guess)
// 执行配准算法,输出估计变换矩阵guess和变换后返回的源(输入)点云output.
const std::string & getClassName () const
// 获取抽象类的名字。
bool initCompute ()
// 内部计算初始化。
bool initComputeReciprocal ()
// 需要倒数查找时的内部计算。
void addCorrespondenceRejector (const CorrespondenceRejectorPtr &rejector)
// 向列表中添加新的对应关系去除器。
std::vector< CorrespondenceRejectorPtr > getCorrespondenceRejectors ()
// 获得对应关系去除器的列表。
bool removeCorrespondenceRejector (unsigned int i)
// 移除对应关系去除器中的第i个去除器
void clearCorrespondenceRejectors ()
// 清除所有对应关系去除器
20.Class pcl::registration::TransformationEstimation< PointSource, PointTarget, Scalar >
类TransformationEstimation是基于以下输入的变换矩阵估计方法实现的基类:对应关系向量、两个相同大小的点云(源和目标)、一个具有一组索引的点云(源),和另一个点云(目标)、两个相同大小分别具有一组索引的点云(源和目标)。该类实现点云配准中的变换矩阵估计步骤,输入为两组点云与其对应点对,输出为估计的变换矩阵。
#include <pcl/registration/transformation_estimation.h>
TransformationEstimation ()
// 构造函数
virtual ~TransformationEstimation ()
// 西沟啊还能输
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输人源点云cloud_src和目标点云cloud_tgt ,输出变换矩阵transformation_ matrix.
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const std::vector< int > &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输入源点云cloud_src 和目标点云cloud_tgt以及源点云中描述感兴趣点的索引的向量indices_src,输出变换矩阵transformation_matrix。
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const std::vector< int > &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const std::vector< int > &indices_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输人源点云cloud_src 和目标点云cloud_tgt以及源点云中描述感兴趣点的索引的向量indices_src和目标点云中描述感兴趣点的索引的向量indices_tgt,输出变换矩阵transformation_matrix。
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const pcl::Correspondences &correspondences, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换,输入源点云cloud_src 和目标点云cloud_tgt以及源点云和目标点云之间的对应关系的向量correspondences,输出变换矩阵transformation_matrix。
21.Class pcl::registration::TransformationEstimationLM< PointSource, PointTarget, MatScalar >
类TransformationEstimationLM是基于Levenberg Marquardt 的对于给定对应关系估计变换矩阵的算法实现。
#include <pcl/registration/transformation_estimation_lm.h>
TransformationEstimationLM ()
// 构造函数
TransformationEstimationLM (const TransformationEstimationLM &src)
// 复制构造函数
TransformationEstimationLM & operator= (const TransformationEstimationLM &src)
// 复制运算符。
virtual ~TransformationEstimationLM ()
// 析构函数
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输人源点云cloud_src和目标点云cloud_tgt ,输出变换矩阵transformation_ matrix.
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const std::vector< int > &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输入源点云cloud_src 和目标点云cloud_tgt以及源点云中描述感兴趣点的索引的向量indices_src,输出变换矩阵transformation_matrix。
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const std::vector< int > &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const std::vector< int > &indices_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输人源点云cloud_src 和目标点云cloud_tgt以及源点云中描述感兴趣点的索引的向量indices_src和目标点云中描述感兴趣点的索引的向量indices_tgt,输出变换矩阵transformation_matrix。
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const pcl::Correspondences &correspondences, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换,输入源点云cloud_src 和目标点云cloud_tgt以及源点云和目标点云之间的对应关系的向量correspondences,输出变换矩阵transformation_matrix。
void setWarpFunction (const boost::shared_ptr< WarpPointRigid< PointSource, PointTarget, MatScalar > > &warp_fcn)
// 设置用于对点变形变换的函数,默认为刚体6D变形。
22.Class pcl::registration::TransformationEstimationPointToPlane< PointSource, PointTarget, Scalar >
类TransformationEstimationPointToPlane是使用Levenberg Marquardt 最优化找到变换矩阵算法的实现,使点到面的距离最小,该类的输入为需要配准的两个点云以及其对应的点对,输出为基于非线性优化LevenbergMarquardt得到的变换矩阵。
#include <pcl/registration/transformation_estimation_point_to_plane.h>
TransformationEstimationPointToPlane ()
// 构造函数
virtual ~TransformationEstimationPointToPlane ()
// 析构函数
void setWarpFunction (const boost::shared_ptr< WarpPointRigid< PointSource, PointTarget, MatScalar > > &warp_fcn)
// 设置用于对点变形的函数,默认为刚体6D变形函数。
23.Class pcl::registration::TransformationEstimationPointToPlaneLLS< PointSource, PointTarget, Scalar >
类TransformationEstimationPointToPlaneLLS实现一个线性最小二乘法(Linear Least Squares,LLS算法)近似来找到变换矩阵,使两个有法线的对应点云的点到面的距离最小,该算法的输入为两组需要配准的点云以及其对应点对,输出为利用线性最小二乘近似来求解的变换矩阵,原始的点到平面估计法在类Transformation EstimationPointToPlane中实现,本LLS算法的速度比原始的点到平面法快,因为其采用的是线性最小二乘的近似标准的非线性求法,但是其要求输入点云之间的相对方向偏差小于30°,否则算法失效。详细算法信息请参考Kok-Lim Low的文章Linear Least Squares Optimization for Point -to -Plane ICP Surface Registration。
#include <pcl/registration/transformation_estimation_point_to_plane_lls.h>
TransformationEstimationPointToPlaneLLS ()
// 构造函数
virtual ~TransformationEstimationPointToPlaneLLS ()
// 析构函数
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输人源点云cloud_src和目标点云cloud_tgt ,输出变换矩阵transformation_ matrix.
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const std::vector< int > &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输入源点云cloud_src 和目标点云cloud_tgt以及源点云中描述感兴趣点的索引的向量indices_src,输出变换矩阵transformation_matrix。
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const std::vector< int > &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const std::vector< int > &indices_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输人源点云cloud_src 和目标点云cloud_tgt以及源点云中描述感兴趣点的索引的向量indices_src和目标点云中描述感兴趣点的索引的向量indices_tgt,输出变换矩阵transformation_matrix。
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const pcl::Correspondences &correspondences, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换,输入源点云cloud_src 和目标点云cloud_tgt以及源点云和目标点云之间的对应关系的向量correspondences,输出变换矩阵transformation_matrix。
24.Class pcl::registration::TransformationEstimationSVD< PointSource, PointTarget, Scalar >
类TransformationEstimationSVD是基于SVD(Singular Value Decomposition)方法的对于给定对应关系估计变换矩阵的算法的实现,该算法的输入为两组需要配准的点云以及其对应点对,输出为利用SVD方法来求解的变换矩阵。
TransformationEstimationSVD (bool use_umeyama=true)
// 构造函数
virtual ~TransformationEstimationSVD ()
// 析构函数
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输人源点云cloud_src和目标点云cloud_tgt ,输出变换矩阵transformation_ matrix.
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const std::vector< int > &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输入源点云cloud_src 和目标点云cloud_tgt以及源点云中描述感兴趣点的索引的向量indices_src,输出变换矩阵transformation_matrix。
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const std::vector< int > &indices_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const std::vector< int > &indices_tgt, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换:输人源点云cloud_src 和目标点云cloud_tgt以及源点云中描述感兴趣点的索引的向量indices_src和目标点云中描述感兴趣点的索引的向量indices_tgt,输出变换矩阵transformation_matrix。
virtual void estimateRigidTransformation (const pcl::PointCloud< PointSource > &cloud_src, const pcl::PointCloud< PointTarget > &cloud_tgt, const pcl::Correspondences &correspondences, Matrix4 &transformation_matrix) const =0
// 估计源点云和目标点云之间的刚体旋转变换,输入源点云cloud_src 和目标点云cloud_tgt以及源点云和目标点云之间的对应关系的向量correspondences,输出变换矩阵transformation_matrix。
25.Class pcl::registration::TransformationValidation< PointSource, PointTarget, Scalar >
类TransformationValidation是验证通过TransformationEstimation找到的变换矩阵是否正确的算法实现的基类。
#include <pcl/registration/transformation_validation.h>
TransformationValidation ()
// 构造函数
virtual ~TransformationValidation ()
// 析构函数
virtual double validateTransformation (const PointCloudSourceConstPtr &cloud_src, const PointCloudTargetConstPtr &cloud_tgt, const Matrix4 &transformation_matrix) const =0
// 参照输入源点云数据cloud_src和目标点云数据cloud_tgt来验证给定的变换transformation_ matrix 是否有效,并返回评分。
virtual bool operator() (const double &score1, const double &score2) const =0
// 比较器运算符,用于在对多个转换运行验证后确定哪个分数更好。
virtual bool isValid (const PointCloudSourceConstPtr &cloud_src, const PointCloudTargetConstPtr &cloud_tgt, const Matrix4 &transformation_matrix) const =0
// 检查分数对于特定转换是否有效。
26.Class pcl::registration::TransformationValidationEuclidean< PointSource, PointTarget, Scalar >
类TransformationValidationEuclidean是在欧氏空间对估计得到的变换矩阵进行有效性测度。
#include <pcl/registration/transformation_validation_euclidean.h>
TransformationValidationEuclidean ()
// 构造函数
virtual ~TransformationValidationEuclidean ()
// 析构函数
void setMaxRange (double max_range)
// 设置两个点云中点对之间的距离阈值,大于该阈值的点对在计算时不考虑,只考虑小于该阈值的点对。
double getMaxRange ()
// 获得两个点云中点对之间的距离阈值,
void setSearchMethodTarget (const KdTreePtr &tree, bool force_no_recompute=false)
// 提供指向用于在目标云中查找对应的搜索对象的指针。
void setThreshold (double threshold)
// 设置特定转换被视为有效的阈值。
double getThreshold ()
// 得到特定转换被视为有效的阈值。
double validateTransformation (const PointCloudSourceConstPtr &cloud_src, const PointCloudTargetConstPtr &cloud_tgt, const Matrix4 &transformation_matrix) const
// 针对输入点云数据验证给定的转换,并返回分数。
virtual bool operator() (const double &score1, const double &score2) const
// 比较器运算符,用于在对多个转换运行验证后确定哪个分数更好。
virtual bool isValid (const PointCloudSourceConstPtr &cloud_src, const PointCloudTargetConstPtr &cloud_tgt, const Matrix4 &transformation_matrix) const
// 检查分数对于特定转换是否有效。
27.配准模块中相关结构体介绍
#include <pcl/registration/correspondence_sorting.h>
struct pcl::registration::sortCorrespondencesByQueryIndex
// 实现对应点的大小比较的仿函数:输人两个对应点对,比较它们的源点云索引后,输出真假值,若前者比较小输出true,否则输出false.
Struct pcl::registration::sortCorrespondencesByMatchIndex
// 实现对应点的大小比较的仿函数:输人两个对应点对,比较它们的目标点云索引后,后输出真假值,若前者比较小输出true,否则输出false。
struct pcl::registration::sortCorrespondencesByDistance
// 实现对应点的大小比较的仿函数:输入两个对应点对,比较它们的距离后输出真假值,若前者比较小输出true,否则输出false.-
struct pcl::registration::sortCorrespondencesByQueryIndexAndDistance
// 实现对应点的大小比较的仿函数:输人两个对应点对,首先比较它们的查询索引后输出真假值,若前者比较小输出true,相等则继续比较对应点间距离,若前者比较小则输出true,否则输出false。
struct pcl::registration::sortCorrespondencesByMatchIndexAndDistance
// 实现对应点的大小比较的仿函数:输入两个对应关系,首先比较它们的匹配索引后输出真假值,若前者比较小输出true,相等则继续比较对应点间距离,若前者比较小则输出true,否则输出false。
#include <pcl/registration/edge_measurements.h>
struct pcl::registration::NullMeasurement
// 空的测量结构。
struct pcl::registration::PoseMeasurement< VertexT, InformationT >
// 位姿的测量结构,存储两个图中的顶点及从开始图顶点到结東图顶点之间的变换矩阵等信息,在与图相关的配准类中使用。
#include <pcl/registration/vertex_estimates.h>
struct pcl::registration::NullEstimate
// 空的估计结构。
struct pcl::registration::PoseEstimate< PointT >
// 位姿的估计结构,存储一个变换矩阵以及一个点云,在与图相关的配准类中使用。