ICP已经成为点云配准的主流算法,因此,这两天测试了PCL库中的两个ICP函数:
GICP的用法和ICP类似,照葫芦画瓢即可。为了加快配准速度,程序中对点云做了半径和体素滤波处理。
经过多次实验,可以得出如下结论:
- 无论是在配准速度还是精度上,ICP的配准效果好于GICP;
- ICP 的配准速度受最大迭代次数影响,次数越多,耗时越长,GICP则不受最大迭代次数的影响;
- 在点云配准之前,是可以先进行滤波处理的,尤其是经过半径滤波和体素滤波,配准速度提升了6倍左右,精度则未受影响;
- 迭代的次数并不是越大越好,超过一定次数之后,配准精度提升微小;
- 即使设置了约束条件( setMaximumIterations,setMaxCorrespondenceDistance,setEuclideanFitnessEpsilon ),出来的结果并不是最好的。
程序如下:
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/registration/icp.h>
#include <pcl/visualization/pcl_visualizer.h>//可视化头文件
#include <pcl/filters/filter.h>
#include <pcl/filters/radius_outlier_removal.h>
#include <pcl/filters/conditional_removal.h>
#include <pcl/registration/gicp.h>
#include <pcl/common/time.h>
#include <pcl/filte