点云分割经典论文复现 (一) :地面分割

点云分割经典论文复现 (一):地面分割

Fast Segmentation of 3D Point Clouds: A Paradigm on LiDAR Data for Autonomous Vehicle Application 中的GPF

算法回顾

点云分割经典论文复现 (一) :地面分割_第1张图片

算法解读

推荐看原文中的英文算法解释,讲得很清楚。
主要的思想为: 通过设定的z坐标阈值选取初始种子点,然后利用初始种子点解算平面模型。然后在设定的循环次数以内,利用点到平面距离提取的地面点,并更新平面模型。解算距离模型时使用法向量模型,编写代码时可以用pca估计法向量。

matlab代码实现

输入为N x 3的离散点,输出为地面点和非地面点的索引。其它几个阈值参数与论文中写的保持一致。

function [pg,png,model,u]=gpf(p,n_iter,n_lpr,th_seeds,th_dist)
[m,~]=size(p);%初始尺寸,初始点的数量
lpr=mean(p(1:n_lpr,:),1);
seeds=[];
seeds=find(p(:,3)<(lpr(:,3)+th_seeds));
%%  fit plane
for i=1:n_iter
    pg=p(seeds,:);
    s_hat=mean(pg,1);
    s_nc=pg-s_hat;
    [C,~,~]=svd(s_nc');
    normal=C(:,end);
    u=C(:,1:2);
    d=-normal'*s_hat';
    seeds=[];
    n_seeds=[];
    seeds=find(((normal'*p'+d)/(norm(normal)))<th_dist);
    n_seeds=find(((normal'*p'+d)/(norm(normal)))>=th_dist);
end
pg=seeds;
png=n_seeds;
model=[normal;d];
end

实际分割效果

图中蓝色为非地面点云,绿色为地面点云。该方法可以在较小范围内将较为平整的地面分割出来,原文中也只给出了一个测试实例。对于跨度较大,坡度变化较多的地面,该方法可能会显得无能为力。但是这篇论文中提出可以将跨度较大的点云先粗分割一下,再送入到GPF中进行分割。另外,若想利用该方法得到较好的分割效果,则解算较为耗时。
点云分割经典论文复现 (一) :地面分割_第2张图片

结束

此篇博客中代码以及分割结果属于个人成果,转载请注明出处,谢谢。

你可能感兴趣的:(点云分割,自动驾驶,聚类)