当前位置: 首页 > 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

相关文章:

  • Python面向对象编程精解:从两大编程范式到类与对象实战
  • 前后端分离博客 Weblog 项目实战
  • 启动窗体自动输入上次内容——CAD c#二次开发
  • 50. Pow(x, n)
  • 『 测试 』软件测试全流程与Bug管理核心要点解析
  • 前端~三维地图(cesium)动态材质扩散圆环
  • 编译openssl源码
  • LLM定制新路径:微调与上下文学习的博弈与融合
  • JS中本地存储(LocalStorage)和会话存储(sessionStorage)的使用和区别
  • python使用matplotlib画图
  • 交易所功能设计的核心架构与创新实践
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(21):复习
  • 一般枚举题目合集
  • 【HALCON】 HALCON 教程:正确使用 `get_dict_tuple` 获取字典内容
  • gd32e230c8t6 keil6工程模板
  • loss = -F.log_softmax(logits[:, -1, :], dim=1)[0, irrational_id]
  • 快消零售AI转型:R²AIN SUITE如何破解效率困局
  • CK-S654-PA60一拖四分体式半导体电子货架专用RFID读写器|读码器接线使用说明
  • java day 11
  • acwing 1488. 最短距离 超级源点 最短路 堆优化Dijkstra
  • 曾犯强奸罪教师出狱后办教培机构?柳州鱼峰区教育局回应
  • “85后”贵阳市政府驻重庆办事处主任吴育材拟任新职
  • 从能源装备向应急装备蓝海拓展,川润股份发布智能综合防灾应急仓
  • 菲律宾中期选举初步结果出炉,杜特尔特家族多人赢得地方选举
  • 男子退机票被收90%的手续费,律师:虽然合规,但显失公平
  • 泽连斯基:乌克兰已做好与俄罗斯举行会谈的准备