编程实现提取点云数据的树的中心和提取山区的DEM
- 芒果树a的圆心拟合
1.1 数据:树木主干数据-芒果树a
图1 芒果树a点云情况
1.2 大致思路:
该点云数据是空间中的离散点,在三维坐标中,构成一个圆柱,由于树干处于垂直树立状态,因此从已知点云坐标入手,圆柱在不同高度的各个圆的圆心可以视为x坐标与y坐标相同,根据各点云坐标求出该圆柱的圆心坐标。
1.3 实现原理:
平均值法:
首先考虑在三维空间中处于立体状态下对于均匀分布在圆柱上的n个点(Xi,Yi),从理论上讲,圆心的X坐标应为Xi的平均值,同样圆心的Y坐标应为Yi的平均值,圆心到圆上任一点的距离即为圆的半径。
在实际情况中,点云各点不可能正好均匀分布在圆上,甚至有些点还不在圆上,但只要各离散点分布较为均匀,仍可将均值作为圆心坐标,圆心到各离散点的距离的平均值可作为圆半径的近似值。
加权平均法:
考虑到一般情况下点云数据点不可能分布很均匀,用求平均值法求得的圆心位置会偏向数据点密集的一边,求出的半径也会偏小。要克服这种方法的不足,在求圆心坐标和半径大小时,可采用加权平均法。其基本思想是:设L为所有相邻两点之间的弧长之和,点(Xi,Yi)与相邻两点之间的弧长之和为li,在计算圆心坐标和半径大小时,该点和该点到圆心距离的权数为li/(2l)。 则 圆 心 坐 标 为(Xili/(2l),Yili/(2*l))。在圆心和半径还没确定的情况下,相邻两点之间的弧长无法确定,但可用相邻两点之间的距离代替相邻两点之间的弧长。
由于数据中点云都是有一定的高度的,采用该方法计算圆心坐标,点云数据在Z方向上的高度有一定限制。
最小二乘法:
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。基于最小二乘法的原理,实现圆心坐标拟合计算。
1.4 代码实现:
读取点云数据,计算圆心坐标x与y
1.5 计算结果:
- 柱体4的圆心拟合
2.1 数据:柱体数据-柱体4
图2 柱体4点云情况
2.2 大致思路:
该点云数据与芒果树a类似,同样是空间中的离散点,在三维坐标中,构成一个圆柱,但是由于路灯杆子有倾斜,并且倾斜圆柱有一定的高度,因此从已知点云坐标入手,将三维点数据导入,存为多行3列的一个数组,所有三维点先按Z坐标的值从小到大排列,通过循环,每隔100个点或更少点提取子数组,也就是根据不同高度将点云划分成多个较小高度的圆柱,再按照上述求解芒果树a的方法求出该圆柱子圆心位置坐标,从而得到一组各自不同高度的圆心坐标。
2.3 实现原理:
以下原理与1.3类似,倾斜圆柱在以上基础上考虑的点多,难度稍大。
由于点云数据是较高的倾斜圆柱,首先根据点云高度将点云划分为多个较小高度的圆柱,以达到圆柱大致呈垂直圆柱状态,然后同样按照以下方法求圆心坐标。
平均值法:
首先考虑在三维空间中处于立体状态下对于均匀分布在圆柱上的n个点(Xi,Yi),从理论上讲,圆心的X坐标应为Xi的平均值,同样圆心的Y坐标应为Yi的平均值,圆心到圆上任一点的距离即为圆的半径。
在实际情况中,点云各点不可能正好均匀分布在圆上,甚至有些点还不在圆上,但只要各离散点分布较为均匀,仍可将均值作为圆心坐标,圆心到各离散点的距离的平均值可作为圆半径的近似值。
最后得到一组高度不同的圆心坐标。
加权平均法:
考虑到一般情况下点云数据点不可能分布很均匀,用求平均值法求得的圆心位置会偏向数据点密集的一边,求出的半径也会偏小。要克服这种方法的不足,在求圆心坐标和半径大小时,可采用加权平均法。其基本思想是:设l为所有相邻两点之间的弧长之和,点(Xi,Yi)与相邻两点之间的弧长之和为li,在计算圆心坐标和半径大小时,该点和该点到圆心距离的权数为li/(2l)。则圆心坐标为(Xili/(2l),Yili/(2*l))。在圆心和半径还没确定的情况下,相邻两点之间的弧长无法确定,但可用相邻两点之间的距离代替相邻两点之间的弧长。
由于数据中点云都是有一定的高度的,采用该方法计算圆心坐标,点云数据在Z方向上的高度有一定限制。因此,对于倾斜圆柱来说,将圆柱分为若干个高度较小的小圆柱,再分别计算出各个圆的圆心。
最小二乘法:
最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。
基于最小二乘法的原理,推算圆上观测若干坐标点拟合圆心坐标的公式,实现圆心坐标拟合计算。
2.4 代码实现:
读取数据代码同1.4一样,只是路径中的文件名字换成柱体4.txt。
以下代码是将点云数据进行排序,计算圆柱高
通过循环,提取子数组,依次计算各圆心三维坐标。
2.5 计算结果:
- 两个相交面求交线方程
3.1 数据:两个面相交4
图3 两个面相交4点云情况
3.2 大致思路:
该点云数据在三维空间中,2个墙面与地面点总体上呈垂直关系,2个墙面均垂直于地面,并且2个墙面之间也呈垂直状态。从三维空间中,沿Z轴俯视2个墙面,查看X,Y坐标的分布,可以看到2个墙面与X,Y轴不平行,如下图所示。
图4 两个面相交4俯视图
在求两个面的交线方程前,先要把两个面的点区分开来,两个面分别计算平面方程,进而计算交线方程。
正如俯视图展示的,可以通过求出Y坐标的最小值时的X坐标的值为阈值来划分两个面的点。两个面的点划分为两个数组,再求平面方程,进而求两个平面法向量,两个面的法向量都与交线垂直,得到交线方向向量,通过交线上的点确定交线方程。
3.3 代码
两个面相交求交线方程的代码只完成了数据导入,Y坐标最值得计算。
- 山区点云提取DEM
4.1 数据:山区点云数据-G01-2
图5 山区点云数据-G01-2情况
4.2 大致思路:
点云数据以树木点居多,树木点数据与地面数据的Z坐标值相差较大,首先可以把Z坐标值较大的点数据舍去,减少数据量,再分区域考虑地面点的地物剔除问题。小片区域内的地面点的Z坐标值相差较小,根据点的近邻点Z值的判断,筛选地面点的数据,最后得到山区的DEM数据。
编程实现提取点云数据的树的中心和提取山区的DEM相关推荐
- 如何在三维模型中按一定密度提取点云数据(详细说明)
最近在查提取点运数据的相关资料时,发现在三维模型中提取点云数据的资料较少,有都不适合没有基础的小白阅读,于是在本人仔细查阅资料并研读一天后总结了一种较为方便且利于没有这方面基础的小白阅读完成. 1.所 ...
- 利用PCL库从点云数据生成深度图像及关键点提取
利用PCL库从点云数据生成生成深度图像及关键点提取 利用PCL库从点云数据生成深度图像及关键点提取 本想利用标准点云数据库分割成若干块,利用标准点云数据生成深度图像作为数据库用来验证算法,目前效果不是 ...
- PCLl从Vlp-16录制好的bag包提取点云数据
本文将记录Vlp-16的使用的一些常规操作,以及报错解决方法. 查看录制的bag包信息 rosbag info out.bag 录制的bag包为out.bag保存在data文件夹下,创建文件夹存放提取 ...
- 如何提取多层json数据 python_Postgre数据库字段Json内容提取(基于Python)
需求 将列表中全部Json元素的指定内容提取后通过连接符拼接在一起 如: [{'id': '77276086769716567954', 'cnName': '大正', 'enName': 'Tais ...
- HoPE杂乱场景的点云数据平面的提取
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:HoPE: Horizontal Plane Extractor for Cluttered 3 ...
- 交通数字孪生高速公路规划设计市政道路BIM正向改扩建设计利用实景三维无人机机载LiDAR倾斜摄影车载地面三维激光扫描仪LiDAR点云数据提取自动驾驶高精地图三维矢量车道标线3d点云标注
实景三维数据价值挖掘实操系列1-道路车道标线高效自动化三维提 本系列视频的第一部分 标线提取 这段路大概有1.5km的长度 我们来看一下标线提取的效果如何 首先我们通过反射强度 将道路标线的点云数据单 ...
- 基于点云数据提取道路标线的思路
1.概述 基于激光雷达传感器的车载扫描生成的点云数据,提取点云数据中道路标线相关特征,包括实线.虚线.转向箭头等非结构化数据(点云格式或转化的图像投影等,最终转化为矢量化的地图格式数据,用于高级地图绘 ...
- 从bag包中提取图片和点云数据为pcd格式点云文件
从bag包中提取图片和点云数据为pcd格式点云文件 1 开始提取bag包之前的准备工作 2 从bag包中提取图片和点云数据 首先说明一下我运行的系统环境: python2 Ubuntu18.04 RO ...
- 概述—基于机载LiDAR点云数据的建筑物轮廓提取
一.机载LiDAR系统介绍 机载激光雷达测量技术的英文名称是LiDAR, LiDAR是英文Light Detection And Ranging(光探测与光测距)的缩写,是融合了 GPS.INS.激光 ...
- 动手学无人驾驶(4):基于激光雷达点云数据3D目标检测
上一篇文章<动手学无人驾驶(3):基于激光雷达3D多目标追踪>介绍了3D多目标追踪,多目标追踪里使用的传感器数据为激光雷达Lidar检测到的数据,本文就介绍如何基于激光雷达点云数据进行3D ...
最新文章
- 【渝粤教育】21秋期末考试个人与团队管理10257k2
- JAVA调用动态链接库
- CV2 puttext不能显示中文问题
- Python计算有向图中所有节点出度和入度
- centos7的firewall-cmd怎么让指定ip能访问指定端口?
- android .9横向拉伸,神奇的问题!android .9图片拉伸不是不会变形吗?但是这里变形了...
- 天天模拟器显示获取服务器失败,天天模拟器FAQ、天天模拟器常见问题快速帮助...
- 通信upf是什么意思_管理UPF的方法、装置及系统与流程
- dart语言(dart语言菜鸟教程)
- 基于iReport5.5+JavaBean+Struts2(注解方式)的报表设计与查看
- PTrade和QMT对比那个更好用?
- matlab数值微分与数值积分
- spring @Value 的取值顺序 优先级
- 【华为OD机试真题2023 JAVA】不含101的数
- 创新实训(46)——基于ElasticSearch的Completion Suggest实现搜索提示
- Lyra——开启下一个十亿用户的语音通话
- 分享68个ASP电子商务源码,总有一款适合您
- Linux服务器 SSH端口修改、禁用root账户远程登录
- heic格式照片打不开?可以试试这2种办法
- 关于杀不死的进程QQ/微信?
热门文章
- java byte转十六进制_Python 十六进制hexbytesstr之间的转换和Bcc码的生成
- 猜数字游戏python程序_【自学编程】python 小游戏—猜数字
- java.lang.integer_java 中 关于java.lang.ArrayStoreException: java.lang.Integer异常,是什么原因?...
- miui11精简_MIUI11评测:真的是缺乏创新吗?
- Python:身份运算符is和==的区别
- 计算机社团招新个人简历,大学社团招新面试自我介绍五篇
- 一个VO(Visual Odometry)的简单实现
- 随手记_选方向读论文发论文相关
- Kmeans算法解析(非常详细)
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字(简单易懂)