介绍
我在毕业研究中接触过Open3D,但是当我第一次接触Open3D时,由于日语信息太少而遇到麻烦,因此我将对其进行一些总结。
大多数开始接触Open3D的人都可能会访问的网站→Open3D:http://lang.sist.chukyo-u.ac.jp/classes/Open3D/
这是官方教程的日语翻译,但是除了教程之外,您还可以做很多事情。
如果您有需要做的事情,通常可以找到官方文档(英文)。
研究活动包括"从RGB-D摄像机图像生成点云","消除异常值"和"点云对齐"。
我所做的其他事情是"点云的体素化"和"使用RANSAC进行平面估计"。
这次,我将介绍Open3D和"点云的体素化"的基础知识(尽管它只是功能的介绍)。
环境
- Open3D 0.9.0
- Python 3.6
请注意,Open3D的规格因版本而异。
在本文中,它被描述为与v0.9.0兼容,但是由于我也使用v0.7.0进行研究,因此我仅检查了v0.9.0的最小操作。
Open3D基础
从RGB-D图像生成点云并进行可视化,读取和写入pcd文件
从RGB-D图像
生成点云

右上方是从RealSense采集的图像,左上方是生成的点云(在研究中,点云是在剪切图像后生成的。)
1 2 3 4 5 6 7 8 9 10 | import open3d as o3d """ Open3DにRGB-D画像入力 """ color = o3d.Image(color_numpy) # numpy配列から変換 depth = o3d.Image(depth_numpy) rgbd = o3d.geometry.RGBDImage.create_rgbd_image_from_color_and_depth(color, depth, convert_rgb_to_intensity=False) pcd = o3d.geometry.PointCloud.create_point_cloud_from_rgbd_image(rgbd, pinhole_camera_intrinsic) pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]]) # 見やすくするための回転 |
Pinhole_camera_intrinsic可以通过RealSense的以下方法获得。
诸如RealSense设置之类的处理被省略。
1 2 3 4 5 | import pyrealsense2 as rs # camera intrinsics取得 intr = profile.get_stream(rs.stream.color).as_video_stream_profile().get_intrinsics() pinhole_camera_intrinsic = o3d.camera.PinholeCameraIntrinsic(intr.width, intr.height, intr.fx, intr.fy, intr.ppx, intr.ppy) |
点云可视化
1 | o3d.visualization.draw_geometries([pcd]) |
除点云外,它还用于可视化体素和网格。
读取和写入pcd文件
写
1 2 3 4 5 | # バイナリでの書き込み o3d.io.write_point_cloud("hoge.pcd", pcd) # asciiでの書き込み o3d.io.write_point_cloud("hoge.pcd", pcd, True) |
可以输出
pcd文件以外的文件。
因为很容易看到,所以输出ascii很方便。
阅读
1 | pcd = o3d.io.read_point_cloud("./hoge.pcd") |
点云体素化
1 2 | voxel = o3d.geometry.VoxelGrid.create_from_point_cloud(pcd, 0.03) # ボクセルのサイズ指定 o3d.visualization.draw_geometries([voxel]) |
Open3D刚接触它时,我为点云创建了体素化功能,但似乎它是最初准备的。 .. ..
结论
这次,我总结了Open3D的基础知识。
如果有时间,我想用RANSAC总结我的研究和飞机评估,但我可能不会。