主要内容

三维点云登记和缝合

这个例子展示了如何结合多个点云重建三维场景使用迭代最近点(ICP)算法。

概述

这个例子中缝合在一起的集合点云与Kinect被捕,构建一个更大的场景的三维视图。示例应用ICP连续两个点云。这种类型的可以用来开发3 d模型重建的对象或为同时定位和地图构建3 d世界地图(大满贯)。

注册两个点云

外部= fullfile (toolboxdir (“愿景”),“visiondata”,“livingRoom.mat”);负载(功能);%提取连续两个点云,使用第一个点云%的参考。ptCloudRef = livingRoomData {1};ptCloudCurrent = livingRoomData {2};

登记的质量取决于数据噪声和ICP算法的初始设置。您可以应用预处理步骤过滤噪音或一组初始属性值适合您的数据。这里,预处理的数据用一个盒子将采样网格过滤器和网格大小的过滤器设置为10厘米。网格过滤器将点云空间划分为多维数据集。点在每个立方体被组合到一个输出点通过平均X, Y, Z坐标。

gridSize = 0.1;固定= pcdownsample (ptCloudRef,“gridAverage”,gridSize);移动= pcdownsample (ptCloudCurrent,“gridAverage”,gridSize);%注意,将采样步骤不仅加快注册,%,但也可以提高准确性。

两个点云对齐,我们使用ICP算法来估计上的三维刚性变换downsampled数据。我们使用第一个点云作为参考,然后估计转换适用于原来的第二点云。我们需要合并现场点云对齐的点云处理重叠点。

首先发现的刚性变换第一与第二点云对齐点云。用它来转换第二点云的参考坐标系统定义的第一个点云。

tform = pcregistericp(移动,固定的,“指标”,“pointToPlane”,“推断”,真正的);ptCloudAligned = pctransform (ptCloudCurrent tform);

我们现在可以创建世界现场注册数据。重叠区域使用一个1.5厘米网格框过滤器过滤。增加合并的大小减少点云存储需求的场景,并减少合并规模增加现场解决。

mergeSize = 0.015;ptCloudScene = pcmerge (ptCloudRef ptCloudAligned mergeSize);%可视化输入图像。图次要情节(2 2 1)imshow (ptCloudRef.Color)标题(“第一输入图像”,“颜色”,' w ')drawnow次要情节(2,2,3)imshow (ptCloudCurrent.Color)标题(“第二个输入图像”,“颜色”,' w ')drawnow%想象世界舞台。次要情节(2 2 (2、4))pcshow (ptCloudScene,“VerticalAxis”,“Y”,“VerticalAxisDir”,“下来”)标题(“初始世界舞台”)包含(“X (m)”)ylabel (“Y (m)”)zlabel (“Z (m)”)

图包含3轴对象。坐标轴对象1与世界冠军初始场景,包含X (m), ylabel Y (m)包含一个散射类型的对象。坐标轴对象2标题第一个输入图像包含一个类型的对象的形象。坐标轴对象3标题第二输入图像包含一个类型的对象的形象。

drawnow

针的序列点云

组成一个更大的3 d场景,重复同样的步骤如上所述处理一系列的点云。使用第一个点云建立参考坐标系。每个点云变换参考坐标系。这种转变是成对的乘法运算转换。

%积累转换存储转换对象。accumTform = tform;图hax = pcshow (ptCloudScene,“VerticalAxis”,“Y”,“VerticalAxisDir”,“下来”);标题(“更新世界舞台”)%为更快的渲染设置坐标轴属性hax。CameraViewAngleMode =“汽车”;hScatter = hAxes.Children;我= 3:长度(livingRoomData) ptCloudCurrent = livingRoomData {};%使用前移动的点云作为参考。固定=移动;移动= pcdownsample (ptCloudCurrent,“gridAverage”,gridSize);%应用ICP登记。tform = pcregistericp(移动,固定的,“指标”,“pointToPlane”,“推断”,真正的);%转换当前的点云坐标系统的引用%定义的第一个点云。accumTform = rigidtform3d (accumTform。* tform.A);ptCloudAligned = pctransform (ptCloudCurrent accumTform);%更新世界舞台。ptCloudScene = pcmerge (ptCloudScene ptCloudAligned mergeSize);%想象世界舞台。hScatter。XData = ptCloudScene.Location (: 1);hScatter。YData = ptCloudScene.Location (:, 2);hScatter。ZData = ptCloudScene.Location (: 3);hScatter。CData = ptCloudScene.Color;drawnow (“limitrate”)结束

图包含一个坐标轴对象。坐标轴对象与标题更新世界场景包含一个散射类型的对象。

%在录音,Kinect是下行。形象化%结果更容易,让我们转换数据的地平面% x z平面平行。角= -10;翻译= (0,0,0);tform = rigidtform3d((角,0,0),翻译);ptCloudScene = pctransform (ptCloudScene tform);pcshow (ptCloudScene“VerticalAxis”,“Y”,“VerticalAxisDir”,“下来”,“父”hax)标题(“更新世界舞台”)包含(“X (m)”)ylabel (“Y (m)”)zlabel (“Z (m)”)

图包含一个坐标轴对象。坐标轴对象与标题更新世界场景,包含X (m), ylabel Y (m)包含一个散射类型的对象。