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

【Open3D】Ch.2:点云体素下采样 | Python

体素下采样

  • 前言
  • 1. 官方文档
  • 2. 基础概念简介
    • Voxel:体素
    • 下采样
    • 三维体素网格
    • 体素下采样
  • 3. 例程拆解和复现
    • 3.1 先跑例程
    • 3.2 例程拆解
  • 后记
  • 参考资料

前言

在处理点云数据时,我们有时候会遇到点数太多导致后续操作拖慢计算速度的情况。
在Ch.2中主要写Open3D库对点云数据进行体素下采样的基本操作,能在大幅减少点云数量的同时,最大程度保留点云的整体几何结构。

主要分成以下几个部分:

  1. 官方文档翻译
  2. 基础概念简介
  3. 例程拆解

本文仍为学习笔记,非系统教程,建议根据需求跳转到对应部分阅读。
文末参考资料我放了链接,可直接跳转到相关网站。

1. 官方文档

在这里插入图片描述

体素下采样使用规则的体素网格,从输入点云中创建出均匀下采样的点云。它通常被用作许多点云处理任务的预处理步骤。该算法分为两个步骤:

  1. 点被分到各个体素中。
  2. 每个被占据的体素通过对其内部所有点取平均,恰好生成一个点。

2. 基础概念简介

(在此只对概念做简单的介绍,想要深入了解的可以参考文末的参考文献)

Voxel:体素

可以类比为立体的像素,只是像素是在二维数据下的最小的可操作单位,而体素则是在三维空间下的。

下采样

下采样也叫降采样,是主动减少数据样本数量的过程,目的是降低数据量、简化计算或过滤噪声。

三维体素网格

三维体素网格滤波器,就是把三维空间切割成无数个体素的网格结构,每个体素代表一个三维空间单位。

该算法的使用步骤:

  1. 按照体素的空间范围,将点 分组装入 体素中。
  2. 对每个包含点的体素,计算体素内所有点的平均坐标,代表该体素内的所有点,这个平均点能反映体素内点云的密度中心,生成下采样后的点云。

体素下采样

体素下采样是用三维体素网格对密集点云分组简化

3. 例程拆解和复现

3.1 先跑例程

import open3d as o3d
import numpy as np# 这部分在Ch.1已经讲过就不要重复讲了
ply_point_cloud = o3d.data.PLYPointCloud()
pcd = o3d.io.read_point_cloud(ply_point_cloud.path)
print(pcd)
print(np.asarray(pcd.points))# 这块是新增的:体素下采样
print("Downsample the point cloud with a voxel of 0.05")
downpcd = pcd.voxel_down_sample(voxel_size=0.05)# 这块也已经讲过了
o3d.visualization.draw_geometries([downpcd],zoom=0.3412,front=[0.4257, -0.2125, -0.8795],lookat=[2.6172, 2.0475, 1.532],up=[-0.0694, -0.9768, 0.2024])

运行后,终端会输出带你云的基本信息,同时弹出可视化窗口,如下:
在这里插入图片描述
在这里插入图片描述
让我们回忆一下Ch.1中,没有进行过体素下采样的原始图:
在这里插入图片描述
可以看出很明显的变化,点云的体量变小了。

3.2 例程拆解

Open3D 为体素下采样提供了简介的API:

pcd.voxel_down_sample(voxel_size)

这是 PointCloud 对象的方法。
参数:voxel_size 用于调节体素的边长。它决定了下采样的 颗粒度。值越小,体素数量越多,保留的点云细节越丰富,但降采样效果越弱;值越大,体素数量越少,降采样越彻底,但可能丢失局部细节。
(如果想看体素下采样的过程以及Open3D中voxel_down_sample的底层代码,可以参看参考文末的参考资料)

我们复用 Ch.1 的测试数据,体验最基础的下采样流程:

# 体素下采样:调节体素边长
import open3d as o3d
import numpy as np# 读取点云(与Part 1一致)
ply_point_cloud = o3d.data.PLYPointCloud()
pcd = o3d.io.read_point_cloud(ply_point_cloud.path)# voxel_down_sample是 PointCloud 类的方法,专门用于体素下采样功能
# voxel_size参数 用于设定“体素的边长”;数值越小,体素数量越多,点云保留的细节越丰富,丢失的信息越少
voxel_size = 0.05
print(f"使用体素大小为 {voxel_size} 的体素来下采样点云")
downpcd = pcd.voxel_down_sample(voxel_size = voxel_size)# 可视化下采样结果(与Part 1一致)
o3d.visualization.draw_geometries([downpcd],zoom=0.3412,front=[0.4257, -0.2125, -0.8795],lookat=[2.6172, 2.0475, 1.532],up=[-0.0694, -0.9768, 0.2024])

运行以上代码后你可以得到下方窗口的结果:
在这里插入图片描述
我们可以调整 voxel_size 的大小看看会有什么变化:

  1. voxel_size = 0.001,基本和原数据相同,看不出有什么丢失的信息在这里插入图片描述2. voxel_size = 0.1,点云变得非常稀疏,信息丢失严重在这里插入图片描述

后记

感谢你能看到这,希望我的笔记能对你有帮助。

文章相关代码我已经放到了我的Gitee里了,有需要的可以自取Open3D点云笔记。

我还在学习阶段,个人能力有限,文章难免有疏漏和差错,望指出。

下一篇写 顶点法向估计。

参考资料

  1. Open3D官方文档
    Open3D Point cloud
  2. 体素
    什么是体素(Voxel)?
  3. 三维体素网格
    使用体素网格(VoxelGrid)滤波器进行下采样
    体渲染4:基于三维体素网格
http://www.dtcms.com/a/462569.html

相关文章:

  • 奉贤区做网站wordpress五分钟安装
  • 复杂网络仿真从入门到精通:0 学习路线
  • 怎样创建网站数据库服装租赁 网站 php
  • 礼品工艺品网站建设首页网站模板
  • 福州推广企业网站网站优化助手
  • Playwright MCP 使用归档:让 AI IDE 看懂 API 文档与流程图
  • 网站优化 情况公司注册地址在哪里查询
  • (二)Kafka学习笔记(p13-p23)
  • .net 微信网站开发wordpress 安装 此网页包含重定向循环
  • 【开题答辩过程】以《基于SpringBoot的消防安全应急培训管理平台》为例,不会开题答辩的可以进来看看
  • iis 创建网站o2o有哪些电商平台
  • 南京市环保局官方南京做网站wordpress制作404页面模板
  • python入门到入土---装饰器
  • 自己做网站不推广东莞网站建设哪家专业
  • ubuntu 安装应用
  • 重庆媒体网站建设单价做网站需要登录什么软件
  • 学生管理系统2.0(面向对象)
  • 桐庐建设局网站网络营销方案500字
  • 线段树上二分模板
  • Origin绘制3D坐标下边际直方图
  • 二叉树OJ(三)543. 二叉树的直径 124. 二叉树中的最大路径和 困难
  • 濮阳做公司网站重庆物流最新消息
  • IDEA Maven 仓库配置优先级
  • 手机网站建设网站wordpress 后台登陆 修改
  • 做网站分什么软件wordpress epanel
  • 微信生活门户网站源码局网站建设申请
  • 做的网站没流量吗什么叫门户类网站
  • 互动网站如何做h5邀请函制作软件app
  • ImageNet数据集
  • 做传销网站后果严重吗个人公司如何注册