点云分割经典论文复现 (一):地面分割
Fast Segmentation of 3D Point Clouds: A Paradigm on LiDAR Data for Autonomous Vehicle Application 中的GPF
算法回顾 【点云分割|点云分割经典论文复现 (一) (地面分割)】
文章图片
算法解读 推荐看原文中的英文算法解释,讲得很清楚。
主要的思想为: 通过设定的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);
end
pg=seeds;
png=n_seeds;
model=[normal;
d];
end
实际分割效果 图中蓝色为非地面点云,绿色为地面点云。该方法可以在较小范围内将较为平整的地面分割出来,原文中也只给出了一个测试实例。对于跨度较大,坡度变化较多的地面,该方法可能会显得无能为力。但是这篇论文中提出可以将跨度较大的点云先粗分割一下,再送入到GPF中进行分割。另外,若想利用该方法得到较好的分割效果,则解算较为耗时。
文章图片
结束 此篇博客中代码以及分割结果属于个人成果,转载请注明出处,谢谢。
推荐阅读
- 自动驾驶|autoware1.14安装相机和激光雷达联合标定工具
- 自动驾驶|如何使用Autoware标定工具包进行相机和激光雷达的联合标定(无需完整安装Autoware)
- 深度学习实战项目|深度学习实战6-卷积神经网络(Pytorch)+聚类分析实现空气质量与天气预测
- 自动驾驶|自动驾驶算法-滤波器系列(五)——高级运动模型在UKF中的应用
- 产品营销|无人驾驶网约车营销分析
- kmeans|手撕K-means聚类算法
- 自动驾驶|自动驾驶争议不断,距离落地还有几道坎(|上云那些事)
- 自动驾驶|高级驾驶辅助系统ADAS简介
- 数学建模|系统(层次)聚类