偶然用到matlab的圆柱拟合函数pcfitcylinder。简洁好用,速度比C++的pcl还快一点。可以搭配粗提取。同系列还有其他拟合函数。
sd=load('xxx.mat');
ptCloud2=pointCloud(sd);
xlabel('X(m)')
ylabel('Y(m)')
zlabel('Z(m)')
figure
pcshow(ptCloud2)
title('Original Point Cloud')
maxDistance = 400;%点到圆柱面的距离阈值
roi = [-inf,-inf,-inf,inf,inf,inf];%点云ROI选取。不需要ROI则设置为-inf到inf就可以了
sampleIndices = findPointsInROI(ptCloud2,roi);%ROI点索引
referenceVector = [1,0,0];%初始轴向。根据情况,设置为xyz轴都可以
[model,inlierIndices] = pcfitcylinder(ptCloud2,maxDistance,...
referenceVector,'SampleIndices',sampleIndices);
pc = select(ptCloud2,inlierIndices);
figure
pcshow(pc)
title('Cylinder Point Cloud')
hold on
plot(model)
参考
Fit cylinder to 3-D point cloud - MATLAB pcfitcylinder
其他参考