当前位置: 首页 > news >正文

Open3D 计算点云的占地面积

目录

一、概述

1.1实现步骤

1.2应用

二、代码实现

1.1关键函数

1.2完整代码

三、实现效果

3.1原始点云

3.2数据显示


前期试读,后续会将博客加入下列链接的专栏,欢迎订阅

Open3D与点云深度学习的应用_白葵新的博客-CSDN博客

一、概述

        该博客在Open3D中实现点云占地面积的计算。该方法在地形分析、建筑物面积估算、环境监测、农业应用和灾害评估等领域具有广泛的应用。通过提取地面点云、投影到二维平面、计算凸包和凸包面积,可以准确计算点云的占地面积。

1.1实现步骤

  1. 取点云数据:加载点云数据。
  2. 提取地面点云:通过高度阈值提取地面附近的点云。
  3. 投影到2D平面:将三维点云数据投影到二维平面(通常是xy平面)。
  4. 计算二维凸包:使用凸包算法计算投影后的点云的二维边界。
  5. 计算凸包面积:计算二维凸包的面积,得到点云的占地面积。

1.2应用

1.地形分析:
        - 计算地形点云的占地面积,用于地形图绘制和地理信息系统(GIS)分析。
2.建筑物面积估算:
        - 计算建筑物点云的占地面积,用于建筑物面积估算和城市规划。
3.环境监测:
        - 计算植被点云的占地面积,用于生态系统监测和环境保护。
4.农业应用:
        - 计算农田点云的占地面积,用于农业资源管理和产量预测。
5.灾害评估:
        - 计算受灾区域点云的占地面积,用于灾害评估和救援工作。

二、代码实现

1.1关键函数

        使用SciPy库的 ConvexHull 函数计算投影后的点云的二维凸包。凸包是包含所有点的最小凸多边形。

  1. 使用自定义函数 extract_points_within_height_range 提取高度在阈值以下的地面点云。
  2. 将提取的地面点云投影到二维平面(xy平面),即只保留x和y坐标。
  3. 使用SciPy的 ConvexHull 函数计算投影后的点云的二维凸包。
  4. 根据凸包的顶点计算面积,得到点云的占地面积。
def compute_ground_area(pcd, height_threshold=0.5):"""计算点云的占地面积。参数:pcd (open3d.geometry.PointCloud): 输入点云。height_threshold (float): 高度阈值,用于提取地面点云。返回:float: 点云的占地面积。"""# 提取指定高度范围内的点云ground_pcd = extract_points_within_height_range(pcd, -np.inf, height_threshold)# 提取点云数据并投影到二维平面(xy平面)ground_points = np.asarray(ground_pcd.points)ground_points_2d = ground_points[:, :2]# 计算二维凸包hull = ConvexHull(ground_points_2d)# 计算凸包面积area = hull.volumereturn area

1.2完整代码

import open3d as o3d
import numpy as np
from scipy.spatial import ConvexHulldef compute_ground_area(pcd, height_threshold=0.5):"""计算点云的占地面积。参数:pcd (open3d.geometry.PointCloud): 输入点云。height_threshold (float): 高度阈值,用于提取地面点云。返回:float: 点云的占地面积。"""# 提取点云数据points = np.asarray(pcd.points)# 提取地面点云ground_points = points[points[:, 2] <= height_threshold]# 投影到二维平面(xy平面)ground_points_2d = ground_points[:, :2]# 计算二维凸包hull = ConvexHull(ground_points_2d)# 计算凸包面积area = hull.volumereturn area# 读取点云数据
pcd = o3d.io.read_point_cloud("bunny.pcd")# 计算占地面积
ground_area = compute_ground_area(pcd)
print(f"点云的占地面积: {ground_area:.2f} 平方单位")

三、实现效果

3.1原始点云

3.2数据显示

点云的占地面积: 0.02 平方单位

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • HarmonyOS NEXT零基础入门到实战-第四部分
  • 速盾:cdn能防御ddos吗?
  • Codeforces Round 874 (Div. 3)(A~D题)
  • 掌握AJAX技术:从基础到实战
  • reduceByKey 函数详解
  • 1-如何挑选Android编译服务器
  • Git拉取国外远程嵌套代码
  • Kylin自定义函数全解:释放数据分析的无限潜能
  • 【Web】LitCTF 2024 题解(全)
  • JavaScript数据筛选和模糊搜索
  • Infuse Pro for Mac全能视频播放器
  • PySide(PyQt)的QPropertyAnimation(属性动画)的应用实践
  • vue elementui 在table里使用el-switch
  • 经典文献阅读之--LIV-GaussMap(实时3D辐射场地图渲染的LiDAR惯性视觉融合算法)
  • tmux相关命令
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • crontab执行失败的多种原因
  • Just for fun——迅速写完快速排序
  • laravel5.5 视图共享数据
  • MySQL QA
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 关于使用markdown的方法(引自CSDN教程)
  • 跨域
  • 怎样选择前端框架
  • 大数据全解:定义、价值及挑战
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • "无招胜有招"nbsp;史上最全的互…
  • #数据结构 笔记三
  • (C语言)fgets与fputs函数详解
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (二)c52学习之旅-简单了解单片机
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (力扣题库)跳跃游戏II(c++)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)elasticsearch 源码之启动流程分析
  • (未解决)macOS matplotlib 中文是方框
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (状压dp)uva 10817 Headmaster's Headache
  • .cfg\.dat\.mak(持续补充)
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net 4.0并行库实用性演练
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET分布式缓存Memcached从入门到实战
  • .NET和.COM和.CN域名区别
  • .NET轻量级ORM组件Dapper葵花宝典
  • /proc/vmstat 详解
  • @property python知乎_Python3基础之:property
  • @Valid和@NotNull字段校验使用