【Lidar】基于Python的点云数据下采样+体素显示

365365bet官网 📅 2026-02-07 09:57:27 👤 admin 👁️ 1884 ❤️ 819
【Lidar】基于Python的点云数据下采样+体素显示

1 Open3D库介绍

Open3D是一个开源的3D数据处理库,发布于2015年,目前已经更新到0.17.0版本。它基于MIT协议开源许可,使用C++11实现,并经过高度优化,还通过Python Pybinding提供了前端Python API。 Open3D为开发者提供了一组精心选择的数据结构和算法,内部实现高度优化并设置为并行化。它处理3D数据的各种应用,包括点云、网格、体积计算、可视化、深度学习、测量和场景图等。Open3D的目标是成为一个高效,可扩展和易用的3D数据处理库。

2 点云数据下采样代码

代码中包含了以体素显示的方式采样、均匀下采样、随机下采样三种采样方式,后两种我已经注释掉了,有需要的可以自己修改。然后在显示函数中,将原始点云平移10个单位,然后同时显示原始和下采样后的点云用来对比查看。

# -*- coding: utf-8 -*-

"""

@Time : 2023/11/28 11:10

@Auth : RS迷途小书童

@File :Point Cloud Sample.py

@IDE :PyCharm

@Purpose:点云下采样,体素显示

"""

import open3d as o3d

import numpy as np

def Sample_Voxel(path, point_type):

# 点云下采样、体素显示

"""

:param path: 输入点云文件

:param point_type: 输入点云格式

:return: None

"""

pcd = o3d.io.read_point_cloud(path, format=point_type, remove_nan_points=True,

remove_infinite_points=True, print_progress=True)

# 路径、输入格式、删除包含NAN的所有点、删除包含无限值的所有点、可视化进度条

print(pcd) # 输出点云点的个数

print(np.asarray(pcd.points)) # 输出点的三维坐标

down_pcd = pcd.voxel_down_sample(voxel_size=0.5)

# 对原始的点云数据进行下采样,使用一个边长为0.03的体素

# down_pcd = pcd.uniform_down_sample(every_k_points=10) # 均匀下采样

# down_pcd = pcd.random_down_sample(sampling_ratio=0.2) # 随机下采样

pcd = pcd.translate([10, 0, 0]) # 将原始的点云数据在x轴上平移4个单位,用于对比

pcd.colors = o3d.utility.Vector3dVector(np.random.uniform(0, 1, (1, 3))) # 随机颜色显示

o3d.visualization.draw_geometries([down_pcd, pcd],

zoom=0.3412,

front=[0.4257, -0.2125, -0.8795],

lookat=[2.6172, 2.0475, 1.532],

up=[-0.0694, -0.9768, 0.2024])

# zoom是缩放级别,front、lookat和up分别定义了相机的前向、观察点和上向向量,用于确定观察的视角

o3d.io.write_point_cloud(r'3.xyz', down_pcd, write_ascii=False, compressed=False, print_progress=True)

if __name__ == "__main__":

Path = r'433 - Cloud1 - Cloud.ply'

Type = 'ply'

Sample_Voxel(Path, Type)

相关推荐

血源诅咒老猎人全流程攻略 关键道具拿法
365365bet官网

血源诅咒老猎人全流程攻略 关键道具拿法

📅 07-19 👁️ 1950