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

news2024/12/29 9:22:39

目录

一、概述

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 np

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

# 加载点云数据
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.coloradmin.cn/o/2051046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

林小茶 C语言程序设计 8.48.58.6答案

【8.4】用结构体表示日期&#xff0c;编写程序计算北京奥运会倒计时的天数并输出&#xff08;2008年8月8日北京奥运会开幕&#xff0c;输入的日期范围是2008年1月1日-2008年8月7日&#xff09;。 #include<stdio.h> struct Date{int year;int month;int day; }; int mai…

硬件电路仿真-LTspice官方软件使用-运放电路仿真实战

文章目录 一&#xff1a;LTspice简介1.1 推荐先简单运用1.2 课程配套资料1.3 仿真过程1.4 SPICE模型1.5 LTSPICE工具栏和快捷键1.6 LTSPICE数量级 二&#xff1a;基本功能&#xff08;探索功能如何使用&#xff09;2.1 瞬态分析(.tran)2.2 交流分析&#xff08;.ac&#xff09;…

基于Springboot3 +vue2的民宿酒店预订系统

这个一个大数据库课程设计&#xff0c;也是计算机软件课程设计大作业&#xff0c;Springboot vue民宿酒店预订系统 本系统是采用Springboot3 vue2的酒店预订系统 &#xff0c;数据库mysql ,用户权限分为系统管理员&#xff0c;客房操作人员、和 普通用户&#xff08;游客&…

如何在Python中使用情感分析API

情感分析 API 服务是一种借助人工智能技术的工具&#xff0c;能够自动识别并衡量文本数据&#xff08;像社交媒体的帖子、产品的评论、新闻文章等等&#xff09;所蕴含的情感色彩。在本文里&#xff0c;我们会一同探讨怎样在 Python 中集成情感分析 API &#xff0c;并且展示它…

【Python机器学习】利用SVD简化数据——示例:菜肴推荐引擎

现在&#xff0c;构建一个推荐引擎&#xff0c;该推荐引擎关注的是餐馆食物的推荐。假设一个人决定外出吃饭&#xff0c;但并不知道去哪吃什么&#xff0c;我们这个推荐系统就可以帮他做到这两点。 首先我们构建一个基本的推荐引擎&#xff0c;它能够寻找用户没有尝过的菜肴&a…

C++(11)类语法分析(2)

C(10)之类语法分析(2) Author: Once Day Date: 2024年8月17日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 …

有关缓存的一些面试知识

1、讲一讲Redis各种数据类型与底层实现 底层数据结构一共有 7 种&#xff0c;分别是简单动态字符串、双向链表、压缩列表、哈希表、跳表和整数数组、快速列表。它们和数据类型的对应关系如下图所示 String 类型的底层实现只有一种数据结构&#xff0c;也就是简单动态字符串。而…

57qi5rW35LqRZUhS pc.mob SQL注入漏洞复现

0x01 产品简介 57qi5rW35LqRZUhS是大中型企业广泛采用人力资源管理系统。某云是国内顶尖的HR软件供应商,是新一代eHR系统的领导者。 0x02 漏洞概述 57qi5rW35LqRZUhS pc.mob 接口存在SQL注入漏洞,未经身份验证的远程攻击者除了可以利用 SQL 注入漏洞获取数据库中的信息(例…

Linux-LVM创建和扩容

文章目录 1. 直接上手1.2 LVM 概念1.2.1 关键术语 1.3 LVM使用步骤1.3.1 创建物理卷&#xff08;PV&#xff09;1.3.2 创建卷组&#xff08;VG)1.3.3 创建逻辑卷&#xff08;LV&#xff09;1.3.4 格式化逻辑卷1.3.5 挂载逻辑卷1.3.6 扩展和缩小逻辑卷1.3.6.1 扩展逻辑卷1.3.6.2…

Science Robotics 受螳螂视觉启发的立体人工复眼技术及其边缘计算应用

在自然界中&#xff0c;生物体的独特生理结构和功能一直是人类技术创新的灵感源泉。节肢动物&#xff0c;尤其是昆虫类生物&#xff0c;高效的视觉系统吸引了众多研究者的关注。所有昆虫当中&#xff0c;螳螂因其独特的视觉机制&#xff08;左眼和右眼视野重叠形成的立体视觉&a…

网络编程项目篇

一、tftp客户端下载 1&#xff09;tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&#xff0…

【SpringBoot】SpringBoot中分页插件(PageHelper)的使用

目录 1.分页概念 2.原生写法 3.PageHelper插件分页查询 3.1 介绍 3.2 使用 3.3 Page对象和PageInf对象 1.分页概念 用户查询的数据不可能一次性全部展示给用户&#xff08;如果用户有一万条数据呢&#xff09;&#xff0c;而是分页展示给用户&#xff0c;这就是分页查询。…

Hospital Information System (HIS)

Hospital Information System &#xff08;HIS&#xff09; 医院门诊就诊流程

快速体验Ollama安装部署并支持AMD GPU推理加速

序言 Ollama 是一个专注于本地运行大型语言模型&#xff08;LLM&#xff09;的框架&#xff0c;它使得用户能够在自己的计算机上轻松地部署和使用大型语言模型&#xff0c;而无需依赖昂贵的GPU资源。Ollama 提供了一系列的工具和服务&#xff0c;旨在简化大型语言模型的安装、…

深入理解JVM运行时数据区(内存布局 )5大部分 | 异常讨论

前言&#xff1a; JVM运行时数据区&#xff08;内存布局&#xff09;是Java程序执行时用于存储各种数据的内存区域。这些区域在JVM启动时被创建&#xff0c;并在JVM关闭时销毁。它们的布局和管理方式对Java程序的性能和稳定性有着重要影响。 目录 一、由以下5大部分组成 1.…

【html+css 绚丽Loading】 - 000004 玄天旋轮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

STM32 编码器模式详解

编码器模式 stm32的定时器带的也有编码器模式。 所用的编码器是有ABZ三相&#xff0c;其中ab相是用来计数&#xff0c;z相输出零点信号。 AB相根据旋转的方向不同&#xff0c;输出的波形如下图所示&#xff1a; 从图上可以看出来&#xff0c;cw方向A相会超前B相90度左右&#…

egret 拖尾的实现 MotionStreak

背景&#xff1a;egret项目中需要用到拖尾效果&#xff0c;引擎原生没有提供&#xff0c;参考cocos2dx 的 MotionStreak实现拖尾效果。 原理 拖尾的原理很简单&#xff0c;定时记录节点的位置&#xff0c;根据运行的轨迹和指定的拖尾宽度生成拖尾网格&#xff0c;然后将纹理绘…

VS2019开发跨平台(Linux)程序时,怎么配置第三方库的路径

一、问题描述&#xff1a; 使用跨平台编译时&#xff0c;VS2019总是提示链接openssl库有问题&#xff1b; 二、错误时的配置&#xff1a; 1、前提 openssl在Linux系统默认下是1.0.0版本&#xff0c;而自己准备好的是1.1.1版本&#xff0c;并且路径完全不在一个地方&#xf…

【Linux-进程】系统初识:冯诺依曼体系结构

系列文章&#xff1a;《Linux入门》 目录 冯诺依曼体系结构 1&#xff09;硬件上 &#x1f337;1.什么是冯诺依曼体系结构&#xff1f; &#x1f337;2.冯诺依曼结构的五个主要组成部分 1.运算器 2.控制器 3.存储器 4.输入输出 设备 ⁉️3.为什么还需要内存呢&#xf…