点云处理库Open3D基础操作1


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


基础介绍

Open3D是英特尔公司于2015年发布的开源3D视觉算法库,截至2023年03月已经更新到了0.17.0版本。基于MIT协议开源许可。

其后端使用C++11实现,经过了高度优化,使用OpenMP并行运算优化。通过Python Pybinding,其提供前端Python API

Open3D的介绍论文发布在http://www.open3d.org/wordpress/wp-content/paper.pdf。更多详细的介绍可以参考这里。

值得一提的是在另外一个大名鼎鼎的3D视觉算法库是Point Cloud Library(PCL)PCLWillow Garage实验室开源于2011年,与Robot Operating System(ROS)同出一源。关于PCL的介绍可以参考这里https://pointclouds.org/assets/pdf/pcl_icra2011.pdf。在Open3D的介绍论文中,作者指出,PCL作为较早出现的3D视觉算法库,经过一段时间的开源维护后,代码变的臃肿,且更新维护频率比较低。

Open3D的更新历史https://github.com/isl-org/Open3D/tags
PCL的更新历史https://github.com/PointCloudLibrary/pcl/tags

作为Open3DPCL的使用者,客观的讲Open3DPython接口更好用,维护更新做的也更好。

Open3D读取文件

使用的测试数据可以从这里下载。

数据下载地址http://graphics.stanford.edu/data/3Dscanrep/

物体的3D表示可以使用点云/Mesh/Model

Open3D支持的Mesh类型有:

Open3D支持的点云类型有:

  • 读取ply格式的Mesh
filename = "dragon_recon/dragon_vrip_res2.ply"
dragon_mesh = o3d.io.read_triangle_mesh(filename)
print(dragon_mesh)
dragon_mesh.compute_vertex_normals()
print(np.asarray(dragon_mesh.triangles).shape)
print(np.asarray(dragon_mesh.vertices).shape)
o3d.visualization.draw_geometries([dragon_mesh])    # 可视化Mesh

# TriangleMesh with 100250 points and 202520 triangles.
# (202520, 3)
# (100250, 3)

  • 读取pcd格式的点云
  • 保存点云write_point_cloud(filename, pointcloud, write_ascii=False, compressed=False, print_progress=False)
    Function to write PointCloud to file
  • 可视化点云
      1. draw_geometries(geometry_list, window_name='Open3D', width=1920, height=1080, left=50, top=50, point_show_normal=False, mesh_show_wireframe=False, mesh_show_back_face=False) Function to draw a list of geometry.Geometry objects。
        使用OpenGL进行渲染。
    • 2.draw_geometries_with_key_callbacks参考自callback
dragon_pc = dragon_mesh.sample_points_uniformly(number_of_points=20000)
save_file = "dragon_recon/dragon_vrip_res2.pcd"
o3d.io.write_point_cloud(save_file, dragon_pc)
o3d.visualization.draw_geometries([dragon_pc])    # 可视化点云 +/-可调点云的大小

def rotate_callback(vis):
    ctr = vis.get_view_control()
    ctr.rotate(10.0, 0.0)
    return False
key_to_callback = dict()
key_to_callback[ord("r")] = rotate_callback
o3d.visualization.draw_geometries_with_key_callbacks([dragon_pc], key_to_callback)

Voxel降采样

刚刚随机采样生成点云时,number_of_points设置的是20000,点太多了的时候,可以使用体素Voxel来降采样。

voxel_down_sample(self, voxel_size)
Function to downsample input pointcloud into output pointcloud with a voxel. Normals and colors are averaged if they exist.

  • o3d.visualization.read_selection_polygon_volume 通过空间多边形和最大最小距离来裁剪点云数据

  • compute_convex_hull(…) method of open3d.cpu.pybind.geometry.PointCloud instance,计算点云的凸包

  • estimate_normals 计算点云的法向量

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值