欢迎点云相关产学研的学者和团体加入我们。
本节中,我们将学习如何使用FeatureEvaluationFramework类对不同的特征描述子算法进行基准测试,基准测试框架可以测试不同种类的特征描述子算法,通过选择输入点云、算法参数、下采样叶子大小、搜索阈值等独立变量来进行测试。为了确保框架的可扩展性,不同的测试算子分成多个类实现,如下所示:
图1 基准测试框架
FeatureCorrespondenceTest类执行一个单一的“基于特征的对应估计测试”,执行以下过程:
· FeatureCorrespondenceTest类取两个输入点云(源和目标)。
· 它将使用指定算法和参数,在每个点云中计算特征描述子。
· 基于n-D特征空间中的最近邻元素搜索,源点云中的每个特征将和目标点云中对应的特征相对照。
· 对于每一个点,系统将把估计的目标对应点的三维位置和之前已知的实际位置相比较。
· 如果这两个点很接近(决定于用户指定的阈值),那么对应就是成功的。否则,就是失败的。
· 计算并保存下成功和失败的总数,以便进一步分析。
FeatureCorrespondenceTest类实现了执行普通任务的函数接口,针对某种特征描述子的运算的函数(如:特征的实际计算)必须在一个单独的子类中定义,这个子类继承于FeatureCorrespondenceTest。例如:FPFHTest 是FeatureCorrespondenceTest的一个子类,它实现两个函数:输入点云的FPFH特征计算函数(computeFeatures())以及在n-D特征空间内估算点云间对应关系的函数(computeCorrespondences())。这样,就得到一个FeatureCorrespondenceTest类的统一接口,可以通过FeatureEvaluationFramework来对此接口进行操作,并且,PCL用户在必要时可以很容易增加新特征算法到测试框架中。
FeatureEvaluationFramework类封装了实际的基准测试函数,它有一个模板参数,这个参数应该是使用框架时输入点云的point_type,该类的使用需要设置很多测试时需要的参数,首先初始化FeatureEvaluationFramework对象,然后调用以下一组函数:
l setFeatureTest:选择要被测试的特征描述子算法;
l setInputClouds:从.pcd文件加载源和目标点云;
l setGroundTruth:从一个文件中以4x4矩阵形式加载实际的变换矩阵;
l setThreshold:由下限值,上限值定义的阈值范围或者由delta规定的单个阈值,该阈值用于后期判断是否为对应点的标准;
l setParameters:特定于某一被测试特征描述符算子算法,形如“key1=value1, key2=value2, ...”字符串传递给参数给算法;
l setDownsampling:选择是否通过VoxelGrid过滤器对输入点云进行过滤,如果选择是则会在测试时对输入点云先进行下采样,再进行特征估计与对应点估计计算;
l setLeafSize:为下采样输入点云而设置Voxelgrid叶子尺寸;
l setLogfile:设置日志文档,以CSV格式存储测试输出;
l setVerbose:选择是否在控制台上详细打印基准测试的每一步过程。
了解这些之后,可以执行测试了,这里有两种选择:
l 单项测试:执行单个的特征提取,通过调用runSingleTest()保存输出统计;
l 多项测试: 通过改变一个单独的自变量来执行多项测试,并以CSV格式存储输出集合(在日志档案中)。
支持函数调用有
l runMultipleFeatures() –用多个特征描述子算法执行测试;
l runMultipleClouds() –用一(大)组输入点云运行相同的特征描述子算法进行测试评价;
l runMultipleParameters() –用不同的参数值执行特征算法测试评价;
l runMultipleLeafSizes() –在执行每个测试评价之前,改变Voxelgrid叶子尺寸来对输入点云下采样。
独立变量的值作为文本文件进行输入,文件名应该作为上述函数的参数被提供。例如:runMultipleLeafSizes(std::string filename)将从“filename”文件的每一行读取Voxelgrid叶子尺寸的值,并且为每个对应的叶子尺寸执行特征提取,把所有结果存储在输出日志文件中。
从.pcd文件中读取输入点云(源和目标),点云中的点类型与FeatureEvaluationFramework使用的模板参数相同,也就是:使用PointXYZRGB点云,创建类型为FeatureEvaluationFramework<PointXYZRGB>的对象来执行基准测试评价。实际真值(Vector3f, Quaternionf)是源点云到目标点云的刚体变换矩阵。PCL中目前,真值变换矩阵是从一文件中读取的,此文件只有一行数据,这行中包含7个参数值,前三个值被看作一个Vector3f,其他四个值被看作一个Quaternionf。在提供的源代码文件夹下有包含350个点云(cloud_###.pcd)和相应的摄像机7-D位姿(pose_###.txt)。我们将使用这组数据集中的点云来执行基准测试,PCL预计以后,框架修改能够很容易地与其他数据集兼容工作。
问题:会议室数据集的FPFH特征算计算时搜索半径取多大,最有效?本小节中演示程序对给定点云和真值变换矩阵,用一组已知的搜索半径值来进行测试,利用FPFHEstimation算法进行基准测试。
未完待续,敬请关注“特征描述算子算法基准化分析(2)”的代码﹑编译运行程序的结果等。