此示例演示如何估计两点云之间的刚性变换。在本例中,使用特征提取和匹配可以显著减少估计所需的点数。在你使用特征提取
函数从点云中提取快速点特征直方图(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])标题(“对齐点云”)