欢迎点云相关产学研的学者和团体加入我们。
本小节综合利于PCL中多个模块,介绍如何对齐已有的模型与一个获取的深度图像数据,在这个例子中,利用包含一个人的深度图像场景作为目标,与获取的脸部模板数据进行对齐配准,通过模板匹配可以估计脸部在场景中的位置与姿态。
首先,在PCL(Point Cloud Learning)中国协助发行的书提供光盘的第16章例1文件夹中,打开名为template_alignment.cpp的代码文件,在同文件夹下有data文件夹包含测试点云。
下面详细分析上面打开的源文件,我们将从FeatureCloud类开始分析,定义这个类是为了方便计算和储存每个点云数据和对应的特征描述子,下面代码的构造函数创建了一个新的KdTreeFLANN对象并且初始化半径参数,这些参数将会被用于计算曲面法线和特征估计时。
FeatureCloud () :
search_method_xyz_ (new SearchMethod),
normal_radius_ (0.02f),
feature_radius_ (0.02f)
{}
然后我们定义设置输入云的方法,通过一个指向点云的共享指针或PCD文件名称作为输入,实现将对应的点云数据存储为该类的对象,设置输入点云数据后,函数processInput将计算法线数据与对应的特征描述子。
// 从输入点云指针传入对象点云数据并处理输入
void
setInputCloud (PointCloud::Ptr xyz)
{
xyz_ = xyz;
processInput ();
}
// 加载给定pcd文件名的点云数据到对象并处理处理输入
void
loadInputCloud (const std::string &pcd_file)
{
xyz_ =PointCloud::Ptr (new PointCloud);
pcl::io::loadPCDFile (pcd_file, *xyz_);
processInput ();
}
定义一些存取的方法用来得到点云的共享指针、曲面法线和局部特征描述子。
// 获取指向点云的指针
PointCloud::Ptr
getPointCloud () const
{
return (xyz_);
}
//获取指向点云法线的指针
SurfaceNormals::Ptr
getSurfaceNormals () const
{
return (normals_);
}
// 获取指向点云特征描述子的指针
LocalFeatures::Ptr
getLocalFeatures () const
{
return (features_);
}
未完待续,敬请关注“对齐对象模板到点云(2)”的其他内容。