主要内容

利用特征估计两点云之间的变换

此示例演示如何估计两点云之间的刚性变换。在本例中,使用特征提取和匹配可以显著减少估计所需的点数。在你使用特征提取函数从点云中提取快速点特征直方图(FPFH)特征,使用pcmatchfeatures函数在提取的特征中搜索匹配项估计几何变换3D函数和匹配特征来估计刚性变换。

预处理

通过对输入点云应用刚性变换来创建两个点云。

将点云数据读入工作区。

rng(“默认值”)ptCld=pcread(“highwayScene.pcd”);ptCld.计数
ANS = 65536.

向下采样点云以提高计算速度,因为它包含约65000个点。

ptCloud=pcdownsample(ptCld,“网格平均”,0.2); ptCloud.Count
ans=24596

创建一个刚性变换矩阵,旋转30度,平移5个单位x- 和y-斧头。

旋转角度=30;旋转角度=0;...-sind(旋转角度)cosd(旋转角度)0;...0 0 1];trans=[5 5 0];tform=rigid3d(rot,trans);

变换输入点云。

ptCloudTformed=pctransform(ptCloud,tform);

将两点云可视化。

pcshowpair(ptCloud,ptCloudTformed)xlim([-5075])ylim([-4080])图例(“原件”,“转化”,“文本颜色”,[1 1 0])

特征提取与配准

使用特征提取作用

fixedFeature=extractFPFHFeatures(ptCloud);movingFeature=extractFPFHFeatures(ptCloudTformed);

查找匹配特征并显示匹配对的数量。

[matchingPairs,scores]=PCMatchingFeatures(固定特征,移动特征,...ptCloud,ptCloudTformed,“方法”,“详尽的”);长度(配对)
ans=1814

从点云中选择匹配点。

fixedPts=select(ptCloud,matchingPairs(:,1));matchingPts=select(ptCloudTformed,matchingPairs(:,2));

使用匹配点估计变换矩阵。

EstimatedForm=EstimatedGeometricTransform3D(固定点位置,...匹配点位置,“刚性”);disp(估计表T)
0.8660 0.5000 0.0002 0 -0.5000 0.8660 -0.0002 0 -0.0003 0.0000 1.0000 0 4.9995 5.0022 0.0020 1.0000

显示定义的变换矩阵。

显示(格式T)
0.8660 0.5000 0 0 -0.5000 0.8660 0 0 0 0 1.0000 0 5.0000 5.0000 0 1.0000

使用估计的变换重新传输云彩格式返回到初始点云。

ptCloudTformed=pctransform(ptCloudTformed,invert(estimatedTform));

将两点云可视化。

pcshowpair(ptCloud,ptCloudTformed)xlim([-50])ylim([-40 60])标题(“对齐点云”)