【点云处理技术之open3d】第一篇:open3d的快速安装、简介、文件的读写和可视化操作

1. open3d简介、安装与测试

Open3D是一个开源库,支持快速开发和处理3D数据。Open3D在c++和Python中公开了一组精心选择的数据结构和算法。后端是高度优化的,并且是为并行化而设置的。Open3D的核心功能包括:

  • 3D 数据结构
  • 3D 数据处理算法
  • 场景重建
  • 表面对齐
  • 3D 可视化
  • 基于物理渲染 (PBR)
  • 支持使用 PyTorch 和 TensorFlow 的 3D 机器学习
  • 内核 3D 操作的 GPU 加速
  • 在C ++ 和 Python 中可用
  • 安装

python版本的open3d安装很简单,直接执行下列命令即可(使用了镜像安装)

pip3 install open3d -i https://pypi.tuna.tsinghua.edu.cn/simple
  • 测试

直接运行下列命令测试是否安装成功,如果没有报错,则安装成功!

python -c "import open3d as o3d; print(o3d)"

2. 读写点云数据并可视化

open3d可以通过文件扩展名自动推断文件类型,下面是支持的点云文件类型。

FormatDescription
xyz每一行包括 [x,y,z] 三个值,x,y,z 是三维坐标
xyzn每一行包括 [x,y,z,nx,ny,nz] 六个值,其中nx,ny,nz 是法线
xyzrgb每一行包括 [x,y,z,r,g,b] 六个值,这里r,g,b的范围在[0,1]的浮点数
pts第一行是一个整数,表示点的个数,之后的每一行可以是下列格式之一:[x, y, z, i, r, g, b], [x, y, z, r, g, b], [x, y, z, i] or [x, y, z],其中x,y,z和i是double类型,r,g,b是uint8类型。
ply这个格式可以包含点云和网格数据,可以参考链接
pcdPoint Cloud Data

也可以显示的指定文件类型,这样将会忽略文件扩展名。

#忽略.txt格式,读取的格式为xyz
pcd =o3d.io.read_point_cloud("../../my_points.txt",format='xyz')

下列代码功能:读取一个pcd文件,并显示,同时将读取的pcd文件进行写入,生成copy_of_fragment.pcd文件。

import open3d as o3d

pcd = o3d.io.read_point_cloud("../test_data/fragment.pcd") # 读取pcd文件

print(pcd) #只是简单的打印信息:PointCloud with 113662 points.

#显示,zoom等信息是一些可选项
o3d.visualization.draw_geometries([pcd])
# o3d.visualization.draw_geometries([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])

# 在同级目录下写入 copy_of_fragment.pcd文件
o3d.io.write_point_cloud("copy_of_fragment.pcd", pcd)

显示效果:
在这里插入图片描述

3. 读写网格(mesh)数据并可视化

与点云的数据结构相比,网格(mesh)数据具有定义三维曲面的三角形。默认情况下,Open3D尝试通过文件扩展名推断文件类型。支持以下网格文件类型:

格式描述
ply同点云
stl请查看链接
obj请查看链接
off请查看链接
gltf请查看链接

代码举例:

import open3d as o3d

mesh = o3d.io.read_triangle_mesh("../test_data/knot.ply")
print(mesh) #打印简单的信息:TriangleMesh with 1440 points and 2880 triangles.

# 写入(这里是复制)一份新数据
o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh)

#显示
o3d.visualization.draw_geometries([mesh])

输出显示效果:

在这里插入图片描述

4. 读写图像(rgbd)数据并可视化

下面的程序先读入jpg的普通图片和png的深度图片,然后合成rgbd的深度图像。

import open3d as o3d

color_raw = o3d.io.read_image("../test_data/RGBD/color/00000.jpg")
depth_raw = o3d.io.read_image("../test_data/RGBD/depth/00000.png")
#创建一个rgbd图像
rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth(
    color_raw, depth_raw)
print(rgbd_image)

#使用matplotlib显示图像
import matplotlib.pyplot as plt
plt.subplot(1, 2, 1)
plt.title('Redwood grayscale image')
plt.imshow(rgbd_image.color)
plt.subplot(1, 2, 2)
plt.title('Redwood depth image')
plt.imshow(rgbd_image.depth)
plt.show()

#rgbd 转==》pcd ,并显示
pcd = o3d.geometry.PointCloud.create_from_rgbd_image(
    rgbd_image,
    o3d.camera.PinholeCameraIntrinsic(
        o3d.camera.PinholeCameraIntrinsicParameters.PrimeSenseDefault))
# Flip it, otherwise the pointcloud will be upside down
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
o3d.visualization.draw_geometries([pcd])


# image的读取与写入

img = o3d.io.read_image("../test_data/lena_color.jpg")
print(img)
'''
输出:
Image of size 512x512, with 3 channels.
Use numpy.asarray to access buffer data.
'''
# 写入(这里是拷贝)一份新的image数据
o3d.io.write_image("copy_of_lena_color.jpg", img)

输出:

RGBDImage of size 
Color image : 640x480, with 1 channels.
Depth image : 640x480, with 1 channels.
Use numpy.asarray to access buffer data.

matplotlib显示图像效果:
在这里插入图片描述
RGBD转PCD显示效果:
在这里插入图片描述

Open3D是一个强大的开源库,用于处理可视化3D数据。在Open3D中,点云配准是一项重要的任务,可以将多个点云数据对齐,以便进行后续的处理和分析。 要进行点云配准,您可以使用Open3D的配准模块,它提供了多种配准算法和工具。配准的目标是找到最佳的变换,将两个或多个点云对齐,使它们在空间中尽可能重合。 在Open3D中,可以使用ICP(最近点迭代法)算法进行点云配准。ICP算法通过迭代的方式,将目标点云的每个点与参考点云中最近的点进行匹配,并计算出最佳的刚性变换参数,以最小化点云之间的距离。 以下是使用Open3D进行点云配准的基本步骤: 1. 读取点云数据:可以使用Open3D的函数来读取点云数据,可以是PCD、PLY、TXT或BIN格式的文件。 2. 进行配准:使用Open3D的ICP算法或其他配准算法来对点云进行配准。您可以选择不同的参数和策略来获得最佳的配准结果。 3. 可视化结果:使用Open3D可视化工具,可以将配准后的点云数据进行可视化,以便进行进一步的分析和处理。 下面是一个示例代码,展示了如何使用Open3D进行点云配准: ```python import open3d as o3d # 读取目标点云和参考点云 target_pcd = o3d.io.read_point_cloud("target.pcd") source_pcd = o3d.io.read_point_cloud("source.pcd") # 进行点云配准 transformation = o3d.registration.registration_icp( target_pcd, source_pcd, max_correspondence_distance, estimation_method=o3d.registration.TransformationEstimationPointToPoint()) # 将参考点云根据配准结果进行变换 transformed_source_pcd = source_pcd.transform(transformation.transformation) # 可视化配准结果 o3d.visualization.draw_geometries([target_pcd, transformed_source_pcd]) ``` 请注意,上述代码仅提供了一个简单的示例,实际应用中可能需要根据具体情况进行参数调整和优化。 综上所述,Open3D可以通过使用ICP算法来实现点云配准,并提供了方便的函数和工具来读取、处理可视化点云数据。123 #### 引用[.reference_title] - *1* *2* *3* [Open3d系列 | 1. Open3d实现点云数据读写点云配准、点云法向量计算](https://blog.csdn.net/weixin_44751294/article/details/127631360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

非晚非晚

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

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

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

打赏作者

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

抵扣说明:

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

余额充值