主要内容

pcregisterndt

用NDT算法配准两点云

描述

例子

tform= pcregisterndt (移动固定gridStep返回将移动点云注册到固定点云的刚性转换。点云被体素化成大小的立方体gridStep

该配准算法基于正态分布变换(NDT)算法[1][2].这个迭代过程的最佳性能需要调整数据的属性。为了提高配准的精度和效率,可以考虑对点云进行降采样pcdownsample使用前pcregisterndt

tformmovingReg) = pcregisterndt (移动固定gridStep还返回与固定点云对齐的转换点云。

___rmse) = pcregisterndt (移动固定gridStep也返回对齐点云之间的欧氏距离的均方根误差,使用前面的任何语法。

___) = pcregisterndt (移动固定gridStep名称,值使用一个或多个指定的附加选项名称,值对参数。

例子

全部折叠

加载点云数据。

ld =负载(“livingRoom.mat”);移动= ld.livingRoomData {1};固定= ld.livingRoomData {2};pcshowpair(移动,固定的,“VerticalAxis”“Y”“VerticalAxisDir”“下来”

图中包含一个坐标轴。坐标轴包含两个散点类型的对象。

为了提高NDT配准算法的效率和精度,对移动点云进行下采样。

movingDownsampled = pcdownsample(移动,“gridAverage”, 0.1);

将点云体素化成边长0.5的立方体。使用NDT算法应用刚性配准。

gridStep = 0.5;tform = pcregisterndt (movingDownsampled、固定、gridStep);

可视化对齐。

movingReg = pctransform(移动,tform);pcshowpair (movingReg,固定,“VerticalAxis”“Y”“VerticalAxisDir”“下来”

图中包含一个坐标轴。坐标轴包含两个散点类型的对象。

输入参数

全部折叠

移动点云,指定为pointCloud对象。

定点云,指定为pointCloud对象。

对定点云进行体素化的三维立方体的大小,指定为正标量。

数据类型:|

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“MaxIterations”,20在20次迭代后停止NDT算法。

初始刚性变换,指定为逗号分隔对,由'InitialTransform”和rigid3d对象。当您提供外部粗略估计时,初始的刚性变换是有用的。

rigid3d对象包含一个平移,该平移将移动点云的中心移动到固定点云的中心。

相对于正态分布的异常值的预期百分比,指定为逗号分隔对,包括“OutlierRatio’和[0,1)范围内的标量。NDT算法假设一个点是由嵌线的正态分布和离群值的均匀分布混合生成的。'的较大值OutlierRatio减少了异常值的影响。

数据类型:|

NDT停止前的最大迭代次数,指定为逗号分隔对,包含'MaxIterations'和一个非负整数。

数据类型:|

连续NDT迭代之间的公差,指定为逗号分隔的对,由'宽容'和具有非负值的2元素向量。向量,TdiffRdiff,表示在连续的NDT迭代中估计的平移和旋转绝对差的公差。Tdiff度量两个平移向量之间的欧氏距离。Rdiff用度数来度量角差。当最近连续迭代中估计的刚性转换之间的差值低于指定的公差值时,算法停止。

数据类型:|

显示进度信息,指定为逗号分隔的对,由'详细的和一个逻辑标量。集详细的真正的显示进度信息。

数据类型:逻辑

输出参数

全部折叠

刚性转换,返回为rigid3d对象。tform描述了记录移动点云的刚性三维变换,移动,到定点云,固定

变换点云,返回为pointCloud对象。变换后的点云与不动点云对齐,固定

均方根误差,返回正数。rmse为对齐点云之间的欧氏距离。

算法

全部折叠

提示

兼容性的考虑

全部展开

行为在R2020a中改变

参考文献

[1] Biber, P.和W. Straßer。正态分布变换:激光扫描匹配的新方法。IEEE/RSJ智能机器人与系统国际会议论文集.拉斯维加斯,NV. Vol. 3, November 2003, pp. 2743-2748。

[2] Magnusson, M.“三维正态分布变换——配准、表面分析和环路检测的有效表示”博士论文。Örebro大学,Örebro,瑞典,2013。

扩展功能

C / c++代码生成
使用MATLAB®Coder™生成C和c++代码。

GPU的代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。

介绍了R2018a