点云处理与可视化

目录

前言

一、点云 是什么?

二、使用步骤

1.下载库

2.导入相关的库

3.对点云进行处理和处理数据

总结


前言

本博客记录新手处理点云的过程。点云是由三维空间中的离散点构成的数据集,常用于描述物体的三维形状和结构。我将使用开源工具如Open3D、NumPy和Matplotlib来读取、处理和可视化点云数据。


一、点云 是什么?

点云(Point Cloud)是由三维空间中的离散点集合构成的数据形式。它是通过使用激光扫描仪、摄像机或其他传感器采集物体表面上的点的位置信息而生成的。每个点在三维空间中具有X、Y和Z坐标,以及可能的颜色信息和其他属性。点云数据通常用于描述和表示物体的形状、表面细节和几何结构。


二、使用步骤

1.下载库

  1. 使用pip安装: 打开终端或命令提示符,并运行以下命令来安装库(以Open3D为例):

    pip install open3d
    

  2. 使用conda安装: 如果您使用Anaconda环境,可以打开终端或Anaconda Prompt,并运行以下命令来安装库(以Open3D为例):

    conda install -c open3d-admin open3d

    下面还需要numpy库和matplotlib库,和上面操作一样

2.导入相关的库

import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt

3.对点云进行处理和处理数据

完整代码如下

def voxel_filter(input_cloud):
    voxel_size = 0.05
    output_cloud = input_cloud.voxel_down_sample(voxel_size)
    return output_cloud

path = "D:\\huatfsacthings\\1662794062.493068000.pcd"

# Read the original point cloud file
cloud1 = o3d.io.read_point_cloud(path)
print(cloud1)

# Perform point cloud filtering
cloud2 = voxel_filter(cloud1)
print(cloud2)

# Get the point cloud coordinates
points1 = np.asarray(cloud1.points)
points2 = np.asarray(cloud2.points)

# Create a figure window and subplots
fig, axs = plt.subplots(1, 2, figsize=(10, 5), subplot_kw={'projection': '3d'})

# Plot the original point cloud
axs[0].scatter(points1[:, 0], points1[:, 1], points1[:, 2], c='r', marker='o', s=1)
axs[0].set_xlabel('X')
axs[0].set_ylabel('Y')
axs[0].set_zlabel('Z')
axs[0].set_title('Original Point Cloud')
axs[0].text2D(0.05, 0.95, f'Points: {points1.shape[0]}', transform=axs[0].transAxes)

# Plot the processed point cloud
axs[1].scatter(points2[:, 0], points2[:, 1], points2[:, 2], c='b', marker='o', s=1)
axs[1].set_xlabel('X')
axs[1].set_ylabel('Y')
axs[1].set_zlabel('Z')
axs[1].set_title('Processed Point Cloud')
axs[1].text2D(0.05, 0.95, f'Points: {points2.shape[0]}', transform=axs[1].transAxes)

# Adjust the spacing between subplots
plt.tight_layout()

# Display the figure
plt.show()

效果图:

简单对比图

简单进行滤波后的结果,后续会进行地面分割。

还可以控制点云的一些性质

# 绘制原始点云,颜色为蓝色,大小为1,透明度为0.8,形状为圆形
ax.scatter(points1[:, 0], points1[:, 1], points1[:, 2], c='b', marker='o', s=0.1, alpha=0.8)


还可以使用open3d进行可视化

例如:

import open3d as o3d

def voxel_filter(input_cloud):
    voxel_size = 0.05
    output_cloud = input_cloud.voxel_down_sample(voxel_size)
    return output_cloud

cloud1 = o3d.io.read_point_cloud(r"D:\huatfsacthings\1662794062.493068000.pcd")
cloud2 = voxel_filter(cloud1)
#创建第一个可视化窗口,显示原始点云
vis1 = o3d.visualization.Visualizer()
vis1.create_window()
vis1.add_geometry(cloud1)
vis1.get_render_option().point_size = 2.0
vis1.get_view_control().set_lookat([0, 0, 0])
vis1.get_view_control().set_zoom(0.5)
vis1.get_render_option().background_color = [0, 0, 0]  # 设置为黑色
print(cloud1)
vis1.run()
vis1.destroy_window()

#创建第二个可视化窗口,显示滤波后的点云
vis2 = o3d.visualization.Visualizer()
vis2.create_window()
vis2.add_geometry(cloud2)
vis2.get_render_option().point_size = 2.0
vis2.get_view_control().set_lookat([0, 0, 0])
vis2.get_view_control().set_zoom(0.5)
vis2.get_render_option().background_color = [0, 0, 0]  # 设置为黑色
print(cloud2)
vis2.run()
vis2.destroy_window()



效果感觉,没那么好。


更多的资料请查阅官方说明


总结

希望本篇博客为您提供了入门点云处理的基础知识和启发,并帮助您在点云数据的处理和分析中取得进展。点云处理领域有着广阔的发展前景,期待您在这个领域中取得更多的成就。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值