【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)

Open3D库是一个非常强大的点云处理库,后续我会更新更多的相关代码,如果感兴趣可以关注我!

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用Python从激光雷达点数据中重建3D建筑是一个复杂而有挑战性的任务,涉及到多个步骤和算法。下面将以大致的流程来回答。 首先,需要一个能够读取和处理激光雷达点数据Python库,比如open3d、Pyntcloud等。通过这些工具可以加载和可视化点数据。 接下来,需要对点数据进行预处理。这可能包括去除离群点、滤波和降采样等操作,以减少噪声和数据量,简化后续的处理过程。 第三步是进行点分割和聚类。使用聚类算法,比如基于DBSCAN,将点分为不同的聚类,即建筑物的不同组成部分。这将有助于后续的建模和重建过程。 在得到聚类结果后,可以通过进行平面拟合来提取建筑物的水平面。通过拟合算法,比如随机采样一致性(RANSAC),可以找到建筑物的水平面并将其分离出来。这将为后续重建提供一个基准。 接下来是建模和重建的过程。根据点的分布和形状特征,可以使用网格化或基于特征的方法来重建建筑物的3D模型。网格化将点数据转化为稠密的3D网格,而基于特征的方法则利用点的法线和几何特征来进行建模。 最后,可以通过可视化工具将重建的3D建筑物模型呈现出来,并进行进一步的后处理和优化。 需要注意的是,基于Python从激光雷达点数据中重建3D建筑是一个复杂的过程,涉及到多个算法和工具,需要一定的计算资源和专业知识。此外,点数据本身可能存在一定的噪声和缺失,对结果的质量也会有一定的影响。因此在实际应用中,还需要根据具需求和情况进行针对性的参数调整和优化,以得到更好的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RS迷途小书童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值