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

Open3D 体素化下采样

参考笔记:Open3D: 3D点云的体素下采样技术-CSDN博客 

目录

一、算法原理

二、计算过程

三、代码实现


一、算法原理

体素化下采样是一种点云数据下采样方法,通常在点云处理任务的预处理步骤,体素化下采样分为两大步:

把点云装进体素网格

把每个体素网格中的所有点做平均,只保留一个代表点

二、计算过程

依据点云数据坐标集合,求取 \color{red}X\color{red}Y\color{red}Z 三个坐标值上的最大值 \color{red}X_{max}\color{red}Y_{max}\color{red}Z_{max} 和最小值  \color{red}X_{min}\color{red}Y_{min}\color{red}Z_{min}

根据 \color{red}X\color{red}Y\color{red}Z 三个坐标轴上的最大值、最小值求得点云的最小包围盒边长 \color{red}l_{x }\color{red}l _y\color{red}l_z,公式如下:

设置体素网格的边长 voxel_size,为了方便,记为 r

计算体素网格的数量:

D_x=\left \lfloor l_x/r\right \rfloor\\ \\ D_y=\left \lfloor l_y/r\right \rfloor\\ \\ D_z=\left \lfloor l_z/r\right \rfloor\\ \\

 其中,\color{red}D_x  指的是 \color{red}x 轴方向有多少个体素网格,\color{red}D_y\color{red}D_z 同理。所以总体素网格数量为:\color{red}D_x\times D_y\times D_z 。\left \lfloor \right \rfloor 指的是向下取整

计算每个体素网格的质心作为该体素网格的代表点,替代其他的所有点,完成下采样

        质心算法:已知一个非空体素网格 \color{red}V,包含 \color{red}m 个点,则该体素网格的质心 \color{red}P_{centroid}(x_{centroid}\;\;,y_{centroid}\;\;,z_{centroid}) 为:

注:质心说白了就是求平均值。如果点还有其他属性,比如RGB、法线等也是取平均值

三、代码实现

主要函数:

def voxel_down_sample(self, voxel_size): 

 voxel_size:体素网格的边长 


我们用经典的兔子点云做一下对比

import open3d as o3d
import numpy as nppcd = o3d.io.read_point_cloud("rabbit.txt",format="xyz")#读取点云
print("原始点云中点的个数为:", np.asarray(pcd.points).shape[0])
o3d.visualization.draw_geometries([pcd])#原始点云可视化print("使用边长为0.5的体素对点云进行下采样")
downpcd = pcd.voxel_down_sample(voxel_size=0.5)
print("体素下采样后点的个数为:", np.asarray(downpcd.points).shape[0])#可视化体素下采样后的点云
o3d.visualization.draw_geometries([downpcd], window_name="体素滤波",width=1200, height=800,left=50, top=50,mesh_show_back_face=False)

运行结果

原始点云中点的个数为: 35947
使用边长为0.5的体素对点云进行下采样
体素下采样后点的个数为: 3023
http://www.xdnf.cn/news/453295.html

相关文章:

  • 当DeepSeek遇上百年医院:解码AI医疗落地实践
  • 香橙派/树莓派读取GY39数据
  • Spring Boot 日志
  • 仿真每日一练 | 多刚体动力学分析中的自由度问题
  • 领麦微红外温度传感器:发面机非接触测温
  • AI短期学习计划(持续完善更新)
  • 基于CETOL 6σ的生产不良判定与故障分析技术应用
  • Android Framework学习五:APP启动过程原理及速度优化
  • Made with Unity | 拓展“双点”宇宙版图
  • 再来1章linux系列-17 ssh sshd sshd非对称加密(密钥加密)‌SSH对称加密组件/流程
  • 树莓派3B+ wiringPi库安装
  • 【golang】网络数据包捕获库 gopacket
  • 用户模块 - IP归属地框架吞吐测试
  • 运维日志管理全解析:从存储优化到合规审计
  • LeetCode 题解 41. 缺失的第一个正数
  • 静电的起因与静电效应:技术分析与应用
  • svn status . 命令返回分析
  • 交易所功能设计的核心架构与创新实践
  • 论文查询的ai工具 —— SCAICH
  • 总共76dp 空出20dp然后放一个控件的写法
  • Shell和Bash介绍
  • PT2022E单触控三段LED调光IC
  • 云渲染实用指南:如何高效省心地使用炫云平台
  • JVM 精华
  • [特殊字符] GSG 插件 + 渲染 101:C4D 渲染效率革命!
  • 程序设计语言----软考中级软件设计师(自用学习笔记)
  • 防御保护-----第十三章:L2TP VPN
  • 强力巨彩谷亚推出专业智慧显示屏,满足多元场景需求
  • Java 垃圾回收机制深度解析与优化实践
  • IO复用详解——C/C++