Open3D 格网法计算点云的占地面积

目录

一、概述

1.1原理

1.2实现步骤

二、代码实现

2.1关键函数

2.2完整代码

三、实现效果

3.1原始点云

3.2数据显示


Open3D点云算法汇总及实战案例汇总的目录地址:

Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客


一、概述

        在三维点云处理中,计算点云的占地面积是一个常见的任务,特别是在环境建模、地形分析和建筑测量等应用中。使用格网法(也称为栅格化方法)来计算点云的占地面积是一种常见的方法。本文将介绍如何使用 Open3D 来实现这一任务。

1.1原理

        格网法计算点云的占地面积的基本思路是将点云投影到二维平面(通常是 XY 平面),然后将该平面划分为一系列的小网格(格网)。通过统计每个网格中是否存在点云数据,我们可以计算出覆盖点云的网格的总面积,从而估算出点云的占地面积。

  • 投影: 将三维点云投影到 XY 平面,这样我们就可以忽略 Z 轴的高度信息,只关注点云在地面上的分布。
  • 格网划分: 将投影后的点云区域划分为一系列大小相同的网格。每个网格代表一个固定的面积单位。
  • 统计覆盖的网格数量: 统计有点云数据的网格数量,这些网格的面积总和即为点云的占地面积。

1.2实现步骤

  1. 加载点云: 使用 Open3D 加载点云数据。
  2. 投影点云: 将点云投影到 XY 平面上。
  3. 格网划分: 根据指定的网格大小将投影后的点云划分为网格。
  4. 计算占地面积: 统计覆盖的网格数量,并计算总面积。

二、代码实现

2.1关键函数

def compute_ground_area(pcd, grid_size=0.1):"""使用格网法计算点云的占地面积。参数:pcd (open3d.geometry.PointCloud): 输入的点云数据。grid_size (float): 网格大小,单位为米。返回:float: 点云的占地面积,单位为平方米。"""# 将点云投影到 XY 平面points = np.asarray(pcd.points)[:, :2]# 计算点云的最小和最大边界min_bound = np.min(points, axis=0)max_bound = np.max(points, axis=0)# 计算网格划分的数量grid_shape = np.ceil((max_bound - min_bound) / grid_size).astype(int)# 创建一个空的格网grid = np.zeros(grid_shape, dtype=bool)# 将点云映射到格网indices = np.floor((points - min_bound) / grid_size).astype(int)grid[indices[:, 0], indices[:, 1]] = True# 计算占地面积area = np.sum(grid) * (grid_size ** 2)return area

2.2完整代码


import open3d as o3d
import numpy as npdef compute_ground_area(pcd, grid_size=0.1):"""使用格网法计算点云的占地面积。参数:pcd (open3d.geometry.PointCloud): 输入的点云数据。grid_size (float): 网格大小,单位为米。返回:float: 点云的占地面积,单位为平方米。"""# 将点云投影到 XY 平面points = np.asarray(pcd.points)[:, :2]# 计算点云的最小和最大边界min_bound = np.min(points, axis=0)max_bound = np.max(points, axis=0)# 计算网格划分的数量grid_shape = np.ceil((max_bound - min_bound) / grid_size).astype(int)# 创建一个空的格网grid = np.zeros(grid_shape, dtype=bool)# 将点云映射到格网indices = np.floor((points - min_bound) / grid_size).astype(int)grid[indices[:, 0], indices[:, 1]] = True# 计算占地面积area = np.sum(grid) * (grid_size ** 2)return area# 加载点云数据
pcd = o3d.io.read_point_cloud("many_tree.pcd")# 计算点云的占地面积 单位根据点云的单位来
area = compute_ground_area(pcd, grid_size=0.01)
print(f"点云的占地面积: {area:.2f} 平方米")# 可视化点云
o3d.visualization.draw_geometries([pcd], window_name="Point Cloud", width=800, height=600)

三、实现效果

3.1原始点云

3.2数据显示

点云的占地面积: 3.47 平方米

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403070.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解语义安全(semantically secure)

目录 一. 引入 二. 密文与明文 2.1 通俗性理解 2.2 定理 2.3 定理理解 三. 语义安全的第一个版本 3.1 基本理解 3.2 定理 3.3 定理理解 四. 语义安全的第二个版本 4.1 直观解释 4.2 小结 一. 引入 密码学中安全加密要求:敌手(adversary&…

串(4/6)

目录 1. 串的概念及应用实例 1.1 串的定义 1.2 应用实例 2. 串的基本操作 2.1 创建和读取 2.2 串的拼接 2.3 串的比较 2.4 插入和删除 2.5 查找子串 3. 串的存储结构及实现 3.1 顺序存储结构 3.2 链式存储结构 3.3 存储结构的选择 4. 串的模式匹配算法 4.1 朴素匹…

Hive3:常用的内置函数

1、查看函数列表 -- 查看所有可用函数 show functions; -- 查看count函数使用方式 describe function extended count;2、数学函数 -- round 取整,设置小数精度 select round(3.1415926); -- 取整(四舍五入) select round(3.1415926, 4); -- 设置小数精度4位(四…

应急响应-DDOS-典型案例

某单位遭受DDoS攻击事件如下 事件背景 2019年2月17日,某机构门户网站无法访问,网络运维人员称疑似遭受DDoS攻击,请求应急响应工程师协助。 事件处置 应急响应工程师在达到现场后,通过查看流量设备,发现攻击者使用僵…

汇编语言:call、call far ptr、call word ptr、call dword ptr、call 寄存器

引言 call指令是转移指令,CPU执行call指令,进行两步操作: (1)将当前IP或当前CS和IP压入栈中 (2)转移。call指令不能短转移,除此之外,call指令转移的方法跟jmp指令的原理…

Java流程控制09:练习题:打印三角形

本节视频链接:https://www.bilibili.com/video/BV12J41137hu?p44&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p44&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 通过嵌套for循环可以实现打印三角形&#xff…

使用C#禁止Windows系统插入U盘(除鼠标键盘以外的USB设备)

试用网上成品的禁用U盘的相关软件,发现使用固态硬盘改装的U盘以及手机等设备,无法被禁止,无奈下,自己使用C#手搓了一个。 基本逻辑: 开机自启;启动时,修改注册表,禁止系统插入USB存…

银河麒麟服务器操作系统Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤

银河麒麟服务器操作系统 Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤 一、准备工作1. 下载ISO镜像2. 制作安装介质3. 设置BIOS 二、安装过程1. 启动系统2. 选择安装语言3. 选择安装配置4. 配置root密码与创建用户5. 开始安装6. 重启系统7. 同意许可协议 三、系…

通义千问( 四 ) Function Call 函数调用

4.2.function call 函数调用 大模型在面对实时性问题、私域知识型问题或数学计算等问题时可能效果不佳。 您可以使用function call功能,通过调用外部工具来提升模型的输出效果。您可以在调用大模型时,通过tools参数传入工具的名称、描述、入参等信息。…

C语言(16)——初识单链表

1.链表的概念及结构 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 结构图: 补充说明: 1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续 2、…

Oracle Java JDK 21 下载地址及安装教程

Oracle JDK 21 官方地址 https://www.oracle.com/java/technologies/downloads/#java21 1. Linux 版本 ARM64 Compressed Archive https://download.oracle.com/java/21/latest/jdk-21_linux-aarch64_bin.tar.gz ARM64 RPM Package https://download.oracle.com/java/21/late…

Python爬虫图片:从入门到精通

在数字化时代,图片作为信息传递的重要媒介之一,其获取和处理变得越来越重要。Python作为一种功能强大且易于学习的编程语言,非常适合用来编写爬虫程序,帮助我们自动化地从互联网上获取图片资源。本文将从基础到高级,详…

【qt】跳转到另一个界面

如何在一个界面跳转到另一个界面呢? 1.具体步骤 1.先新建一个界面 2.选择qt设计师界面 3.选择W 4.新界面名称 5.界面设计 因为我们要实现通信,需要一个发送信息栏,一个发送按钮,一个清空发送栏按钮 6.实现跳转 我们可以参…

python 已知x+y=8 求x*y*(x-y)的最大值

先用导数求解 已知xy8 求xy(x-y)的最大值 令y8-x 则 f(x)x⋅(8−x)⋅(x−(8−x))x⋅(8−x)⋅(2x−8) 导数方程为 f(x)-3x^2 24x - 32 求方程 − 3 x 2 24 x − 32 0 -3x^2 24x - 32 0 −3x224x−320 的根。 首先,我们可以尝试对方程进行因式分解。观察…

Airtest 的使用

Airtest 介绍 Airtest Project 是网易游戏推出的一款自动化测试框架,其项目由以下几个部分构成 Airtest : 一个跨平台的,基于图像识别的 UI 自动化测试框架,适用于游戏和 App , 支持 Windows, Android 和 iOS 平台&#xff0c…

鸿蒙应用程序框架基础

鸿蒙应用程序框架基础 应用程序包基础知识应用的多Module设计机制Module类型 Stage模型应用程序包结构开发态包结构编译包形态发布台包结构选择合适的包类型 应用程序包基础知识 应用的多Module设计机制 **支持模块化开发:**一个应用通常会包含多种功能&#xff0…

为什么MCU I2C波形中会出现的脉冲毛刺?

在I2C的波形中,经常会发现有这样的脉冲毛刺,会被认为是干扰或者器件不正常。 看到这个波形时,可以先数一下出现在第几个clock的位置,如果出现在第9个clock的低电平期间,就不是干扰或者器件异常导致。 在I2C的协议中&a…

虎牙驶入快车道

撰稿 | 多客 来源 | 贝多财经 一份Q2财报,狠狠打脸了那些唱反调的人,特别是故意唱衰直播和游戏公司的一些TMT观察者。 同时,直播平台如何健康转型实现可持续发展,游戏相关服务业务应该怎么做增量,虎牙的这份财报也给…

【Kubernetes】虚拟 IP 与 Service 的代理模式

虚拟 IP 与 Service 的代理模式 1.userspace 代理模式2.iptables 代理模式3.IPVS 代理模式 由于 Service 的默认发布类型是 ClusterlP,因此也可以把 ClusterIP 地址叫作 虚拟 IP 地址。在 Kubernetes 创建 Service 时,每个节点上运行的 kube-proxy 会自动…

golang基于WMI获取所有外接硬盘(USB,移动硬盘)信息

golang基于WMI获取所有外接硬盘(USB,移动硬盘)信息 package mainimport ("fmt""regexp""github.com/StackExchange/wmi""github.com/shirou/gopsutil/v3/disk" )// 定义 WMI 类结构体 type Win32_LogicalDiskToPartition struct {Ant…