能够实现将点云栅格化,然后提取路面;以下代码默认的栅格大小为0.5*0.5*0.5,如果需要精细则可自行更改size_x/size_y/size_z的大小。

对于栅格区分地面的地面的原理更为粗暴:若一个栅格内的点在z轴上的差距超过0.2,则判定此栅格不是地面(对于此处,很多论文中给出了精确的理论和思路,可自行查阅)。

程序优化思路:

代码对于空间栅格搜索,占用内存比较大。每次判定点云在此栅格中点的时候,都会全部过一遍点集,这是不科学的,应当丢弃存入栅格的点集,以免后面重复计算。

栅格搜索寻找点云的重心,从重心出开始搜索。

clc ;
clear ;
%读取点云,将点云数据读取到lidardata矩阵(n*4的矩阵),但实际中只用到了前三列n*3
lidardata=load('ac.txt');%  显示原始点云
x2=lidardata(:,1);
y2=lidardata(:,2);
z2=lidardata(:,3);
figure(1);
plot3(x2,y2,z2,'.');
xlabel('X');
ylabel('Y');
zlabel('Z');
%计算x/y/z差值,以方便确定空间栅格的大小
minx=min(lidardata(:,1));
miny=min(lidardata(:,2));
minz=min(lidardata(:,3));
maxx=max(lidardata(:,1));
maxy=max(lidardata(:,2));
maxz=max(lidardata(:,3));
x_long=maxx-minx;
y_long=maxy-miny;
z_long=maxz-minz;
length_lidardata=length(lidardata);
after_lidardata=zeros(1,4);%数组的预分配内存%after_lidardata1=zeros(100000,4);
% mycell{200,1} = [];i_C=1;%作为cell数组的列数使用,也就代表空间栅格的个数
a_i=0;%测试for循环次数%以下for循环就是将空间进行栅格化划分,从x/y/z依次以固定空间范围内搜索点
%将同一个空间栅格内的点放到一起,如果搜索的空间没有点,则跳出,不增加栅格数
%size_x size_y size_z   分别代表栅格在x/y/z上的大小
size_x=0.5;
size_y=0.5;
size_z=0.5;for i_z=minz :size_z: maxzfor i_y=miny:size_y:maxyfor i_x=minx:size_x:maxx%前面三个for循环是依次搜索空间,以划分栅格%下面这个for循环  是搜索空间中所有的点,是不是在当前栅格中,如果是则赋给矩阵after_ladardatak=1;for i=1:length_lidardataif (    lidardata(i,1)>=i_x && lidardata(i,1)<=i_x+size_x && ...lidardata(i,2)>=i_y && lidardata(i,2)<=i_y+size_y &&...lidardata(i,3)>=i_z && lidardata(i,3)<=i_z+size_z)after_lidardata(k,1:4)=lidardata(i,:);k=k+1;endend%这里检测after_ladardata数组是不是空集,如果是则跳出此次循环,不增加栅格数%如果不是空集,则将数组赋给cell,增加cell所代表的栅格数目TF=isempty(after_lidardata);a_i=a_i+1;if TF==1continue;endmycell{i_C,1}= after_lidardata;i_C=i_C+1;after_lidardata=[];%用完之后,一定要致空after_ladardataendenddisp("距离算法结束");disp(maxz-i_z);%显示进度所有,无实义
end
%seg_buf
seg_mat_B=zeros(1,4);
% A_B=cell2mat(mycell);
A_A=max(size(mycell));%读取mycell数组的维度,以便进行for循环
seg_buf_mat=[];
%这里的4522代表着cell中矩阵的数量,应尽快用程序解决这个问题
for i_p=2:1:A_Aseg_buf_mat=cell2mat(mycell(i_p,1));seg_buf_number=length(seg_buf_mat);seg_buf_maxz=max(seg_buf_mat(:,3));seg_buf_minz=min(seg_buf_mat(:,3));seg_buf_distance=seg_buf_maxz-seg_buf_minz;if (seg_buf_number>10 && seg_buf_distance<0.1)seg_mat_A=cell2mat(mycell(i_p,1));seg_mat_B=[seg_mat_B;seg_mat_A];end% seg_buf_mat=[];endB_mycell=seg_mat_B;
B_mycell(all(B_mycell==0,2),:)=[];
A=all(B_mycell==0,2);
my_cell_x=B_mycell(:,1);
my_cell_y=B_mycell(:,2);
my_cell_z=B_mycell(:,3);
figure(2);
plot3(my_cell_x,my_cell_y,my_cell_z,'.');xlabel('X');ylabel('Y');zlabel('Z');

matlab对于点云栅格化,并且提取路面(粗糙版)相关推荐

  1. 基于MATLAB的点云建筑物轮廓提取与基于平面探测法的点云建筑物提取

    博客中轮廓提取使用的点云数据 建筑物平面检测使用的点云数据 **两个小的点云处理实验项目,(源码资源****有常(注意目前是有常哦)私我vx:xdsqczkyqs713 ,第一个项目点云建筑物轮廓提取 ...

  2. 利用matlab处理点云

    本文主要分享利用matlab点云工具的相关模块来处理点云,并通过点云轮廓对点云体积进行简单的估计测量. 目录 利用matlab处理点云 目录 主要的操作流程图 2具体流程 1 点云的读入和显示 2 点 ...

  3. 基于像素聚类的分割方法基于slic的方法_博士论文摘要 | 张荣春:数码影像与TLS点云数据融合提取地质结构面方法研究...

    <测绘学报> 构建与学术的桥梁 拉近与权威的距离 数码影像与TLS点云数据融合提取地质结构面方法研究 张荣春1,2 1.南京邮电大学地理与生物信息学院, 江苏 南京 210023;2.河海 ...

  4. MATLAB: 2018a百度云资源、迅雷资源、安装步骤

    原文链接:https://blog.csdn.net/YDC123458/article/details/102696295 MATLAB 2018a 百度云链接:https://pan.baidu. ...

  5. MATLAB 颜色提取器 —— APP 版

    MATLAB 颜色提取器 -- APP 版 日常设计GUI或者APP时,往往需要与颜色打交道,文章链接: MATLAB 如何画出漂亮的图. 在颜色选取上可以通过 颜色对照表 来选择合适的颜色,有个不方 ...

  6. 激光雷达点云--点云栅格化(二)

    二维点云栅格化优化   基本思路:按照点云中的xyz坐标值,直接判断放到相应的栅格中,因为定义每个栅格的大小和多少是知道的,比如我的x值是11.5,每个栅格设置的大小是1m,那我x所在的行就是第12行 ...

  7. 基于ROS2开发的点云栅格化

    0. 简介 最近在收到了很多读者的消息后,我觉得有必要开这个坑,来给大家阐述下如何对激光雷达点云以及图像点云去做栅格化以及体素化的操作.这部分需要各位读者拥有PCL,octomap,ROS2,C++的 ...

  8. matlab从fig图文件中提取数据

    matlab从fig图文件中提取数据 lh=findall(gca,'type','line'); cell_l = cellfun('length',get(lh,'xdata')); i_lh=f ...

  9. matlab数学建模可应用到第几章,《MATLAB在数学建模中的应用(第2版)》

    <MATLAB在数学建模中的应用(第2版)> 卓金武 (编者)) 基本信息 •出版社: 北京航空航天大学出版社; 第2版 (2014年9月1日) •丛书名: MATLAB开发实例系列图书 ...

最新文章

  1. [EffectiveC++]item32:确定你的public继承模塑出is-a关系
  2. linux之通过tail命令动态跟踪日志文件里面的末尾信息
  3. mybatis学习(36):动态sql-set
  4. python中split啥意思_python中split的用法详解_后端开发
  5. 计算机休眠能降低硬件损耗,Win7居然会出现“失眠”——Win7无法休眠问题解析...
  6. js怎么制作html的主题,用HTML和CSS以及JS制作简单的网页菜单界面的代码
  7. php统计用户留存脚本,SQL 统计用户留存
  8. Maven学习总结(38)——Maven下载失败文件夹批量删除问题的两种解决方法
  9. PHP递归写入MySQL无限级分类数据
  10. linux log变色
  11. U盘大容量存储设备 感叹号,错误10
  12. 【科研绘图】Adobe illustrator加Origin组合绘图
  13. [数据挖掘] 朴素贝叶斯 以及西瓜集特征工程
  14. Android 查询设备信息c/c++常用方法
  15. 使用opencv-python快速读取视频——进阶版
  16. 信息学奥赛一本通(c++):2066:【例2.3】买图书
  17. 问题:oracle id自增 insert语句如何写?
  18. ACM儿童节热身训练
  19. 微信小程序学习笔记2
  20. 史上最完美的 Typora 教程

热门文章

  1. 机器学习期末复习笔记
  2. 苹果系10大必备应用
  3. web项目开发 之 前端规范 --- JSON数据传输规范
  4. 暑假清凉套餐小说+漫画
  5. 笔记1 标识符与基本数据类型
  6. android sqlite 操作类封装,SQLiteUtils 一个简单的基于 Android 的 Sqlite 数据库的操作封装库 @codeKK Android开源站...
  7. 日志采样率_为什么要在生产中采样调试日志
  8. Javaweb在线拍卖管理系统买家卖家mysql
  9. “金三银四”春招指南!java语言程序设计第二版答案朱庆生
  10. 再谈Android的许可证