3D-NDT 算法是把一个三维体素内的点云数据集转换成一个连续可微的概率分布函数。首先把一个三维点云数据集划分成均匀规则的固定大小的三维单元格,然后对包含一定数量的每个三维体素单元,为了以概率密度形式对三维点云进行分段连续可微描述,通过正态分布表示体素单元中每个三维点位置测量样本的概率分布:
说实话我也是看不懂的(一开始还以为是法线变换来着)
废话不多说,来看看真正要调的参数吧(PCL==调参)
pcl::NormalDistributionsTransform<pcl::PointXYZ, pcl::PointXYZ> ndt;
ndt.setTransformationEpsilon (0.01);
ndt.setMaximumIterations (35);
ndt.setStepSize (0.1);
ndt.setResolution (1.0);
好了,以上四个参数,俩屁用没有,最大迭代要不超了,要不没搞到,最小精度同理
对配准精度有作用的只有stepSize和Resolution
resolution在追求精度的情况下最好与点密度相等或者低一个数量级
这里是激光点云,所以我设了1米
step的话可以先放大后变小,当然只是经验公式
话说我还是不会三维找特征点呢
跑出来的结果,绿色为目标点云 蓝色为原点云 红色为配准点云
可以发现,配准的相当不错(ICP要是没有粗配矩阵跑这个简直蛋疼)
照例上传一点材料,把写出来的程序和点云传上来
链接: https://pan.baidu.com/s/1Gd9jsq89AaQ964fkBgKQig
提取码: gsuw