Open3D:3D数据处理的现代库,是一个开放源代码库,支持快速开发处理3D数据的软件。Open3D在C ++和Python中公开了一组精心选择的数据结构和算法。后端经过高度优化,并支持并行化。

推荐Python,支持Python(3.5、3.6、3.7、3.8),支持系统(Ubuntu 18.04+、macOS 10.14+、Windows 10 (64-bit))。

Open3D支持读取PointCloud、Mesh(与点云的数据结构相比,Mesh具有定义3D表面的三角形。文件类型有.ply,.stl,.obj,.off,.gltf)、Image;

Open3D的核心功能包括:

  • 3D数据结构
  • 3D数据处理算法
  • 场景重建
  • 表面对齐
  • 3D可视化
  • 基于物理的渲染【 Physically based rendering (PBR)】
  • 在C++、Python中可用

windows10安装(python3.7.4):

pip install open3d

验证安装成功与否:

python -c "import open3d as o3d"

点云读取、可视化、下采样、去除离群点、垂直法线估计、平面提取均可行,效果图如下:

原始点云:
下采样后(保留原始点云的50%左右):
离群点去除(statistical_outlier_removal 红色为去除的离群点)

下采样后的点云法向量估计:
平面提取后效果图(红色为地面点云)
地面提取效果同时展示法向量的:
从下图可看出:原点云24万点,下采样后12万点,移除离群点后11万点,地面点近10万点;

import open3d as o3ddef display_inlier_outlier(cloud, ind):inlier_cloud = cloud.select_by_index(ind)outlier_cloud = cloud.select_by_index(ind, invert=True)print("Showing outliers (red) and inliers (gray): ")outlier_cloud.paint_uniform_color([1, 0, 0])inlier_cloud.paint_uniform_color([0.8, 0.8, 0.8])o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud], window_name='Open3D Removal Outlier', width=1920,height=1080, left=50, top=50, point_show_normal=False, mesh_show_wireframe=False,mesh_show_back_face=False)# 读取:支持xyz、xyzn、xyzrgb、pts、ply、pcd、txt
pcd = o3d.io.read_point_cloud("D:/pcd/milk_cartoon_all_small_clorox.pcd")
# pcd = o3d.io.read_point_cloud("../../TestData/my_points.txt", format='xyz')
print(pcd)o3d.visualization.draw_geometries([pcd], window_name='Open3D Origin', width=1920, height=1080, left=50, top=50,point_show_normal=False, mesh_show_wireframe=False, mesh_show_back_face=False)# 下采样
# voxel_down_sample(把点云分配在三维的网格中,取平均值)
# uniform_down_sample (可以通过收集每第n个点来对点云进行下采样)
# select_down_sample (使用带二进制掩码的select_down_sample仅输出所选点。选定的点和未选定的点并可视化。)
print("Downsample the point cloud with a voxel of 0.003")
downpcd = pcd.voxel_down_sample(voxel_size=0.003)
print(downpcd)
o3d.visualization.draw_geometries([downpcd], window_name='Open3D downSample', width=1920, height=1080, left=50, top=50,point_show_normal=False, mesh_show_wireframe=False, mesh_show_back_face=False)# 重新计算平面法线
# 顶点法线估计【Vertex normal estimation】
# 点云的另一个基本操作是点法线估计。按n查看法线。键-和键+可用于控制法线的长度。
print("Recompute the normal of the downsampled point cloud")
downpcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))
o3d.visualization.draw_geometries([downpcd], window_name='Open3D downSample Normals', width=1920, height=1080, left=50,top=50, point_show_normal=True, mesh_show_wireframe=False, mesh_show_back_face=False)# 离群点去除 【outlier removal】
# 点云离群值去除 从扫描设备收集数据时,可能会出现点云包含要消除的噪声和伪影的情况。本教程介绍了Open3D的异常消除功能。 准备输入数据,使用降采样后的点云数据。
# statistical_outlier_removal 【统计离群值移除】 删除与点云的平均值相比更远离其邻居的点。
#          它带有两个输入参数:nb_neighbors 允许指定要考虑多少个邻居,以便计算给定点的平均距离
#                           std_ratio 允许基于跨点云的平均距离的标准偏差来设置阈值级别。此数字越低,过滤器将越具有攻击性
#
# radius_outlier_removal 【半径离群值去除】  删除在给定球体中周围几乎没有邻居的点。
#          两个参数可以调整以适应数据:nb_points 选择球体应包含的最小点数
#                                  radius 定义将用于计算邻居的球体的半径
print("Statistical oulier removal")
cl, ind = downpcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)
display_inlier_outlier(downpcd, ind)
downpcd_inlier_cloud = downpcd.select_by_index(ind)
print(downpcd_inlier_cloud)# 平面分割 【Plane Segmentation】
# Open3D还包含使用RANSAC从点云中分割几何图元的支持。要在点云中找到具有最大支持的平面,我们可以使用segement_plane。该方法具有三个参数。
# distance_threshold定义一个点到一个估计平面的最大距离,该点可被视为一个不规则点; ransac_n定义随机采样的点数以估计一个平面; num_iterations定义对随机平面进行采样和验证的频率。
# 函数然后将平面返回为(a,b,c,d) 这样,对于平面上的每个点(x,y,z),我们都有ax + by + cz + d = 0。该功能进一步调整内部点的索引列表。
plane_model, inliers = downpcd_inlier_cloud.segment_plane(distance_threshold=0.01,ransac_n=5,num_iterations=10000)
[a, b, c, d] = plane_model
print(f"Plane equation: {a:.2f}x + {b:.2f}y + {c:.2f}z + {d:.2f} = 0")inlier_cloud = downpcd_inlier_cloud.select_by_index(inliers)
print('----inlier_cloud: ', inlier_cloud.points)
inlier_cloud.paint_uniform_color([1.0, 0, 0])
outlier_cloud = downpcd_inlier_cloud.select_by_index(inliers, invert=True)
print('----outlier_cloud: ', outlier_cloud.points)
o3d.visualization.draw_geometries([inlier_cloud, outlier_cloud], window_name='Open3D Plane Model', width=1920,height=1080, left=50, top=50, point_show_normal=False, mesh_show_wireframe=False,mesh_show_back_face=False)
o3d.io.write_point_cloud("D:/pcd/1001140020191217_las2pcd_cx_g.pcd", inlier_cloud)
# help(o3d.visualization.draw_geometries)

参考:

  • http://www.open3d.org/docs/release/introduction.html#open3d-a-modern-library-for-3d-data-processing
  • https://github.com/intel-isl/Open3D/releases

Open3D 三维点云读取可视化、下采样、去除离群点、地面提取相关推荐

  1. 【点云StatisticalOutlierFilter】python-pcl:去除离群点

    点云去除离群点 方法:StatisticalOutlierFilter 原理:使用K近邻方法找到点云中每个点k近邻,计算出标准距离:设置俩个点之间距离超过标准距离*std倍数的为离群点. 结果:将点云 ...

  2. Open3d之点云体素下采样

    原理 体素下采样通过输入的点云数据创建一个三维体素栅格,然后在每个体素内,用体素中所有点的重心来近似显示体素中其他点,这样该体素内所有点就用一个重心点最终表示,从而将输入点云创建统一下采样的点云. 它 ...

  3. 点云体素下采样 ❤️(体素质心 | 体素中心)

    文章目录 1 体素质心下采样 1.1 原理 1.2 体素质心的计算 1.2 代码实现 1.3 与 PCL:VoxelGrid 点云体素下采样结果对比 2 体素中心下采样 2.1 原理 2.2 体素中心 ...

  4. 利用PCL点云下采样实现数据体素化

    利用PCL点云下采样实现数据体素化 PCL PCL(Point Cloud Library) 库集成了针对大体量级别的空间点数据处理所需要的算法和操作,降低了处理相关需求的复杂度,对快速建立点云数据文 ...

  5. matlab练习程序(点云下采样)

    点云处理有时因为数据量太大,我们需要对其进行下采样. 这里的方法是先将点云填入固定大小的三维网格中,然后每个网格中选一个点生成新的点云. 新点云即为下采样后的点云. 这里使用斯坦福兔子作为测试点云. ...

  6. PCL教程-点云滤波之体素滤波器(下采样)

    原文链接:Downsampling a PointCloud using a VoxelGrid filter 点云文件下载: table_scene_lms400.pcd 目录 原理 程序代码 PC ...

  7. 使用MATLAB来可视化三维点云上的法向量

    下面展示一种在三维点云上可视化法向量的方法,将单位向量映射到RGB立方体上相应的RGB颜色.用于将三维点云或网格数据上的法向矢量可视化为彩色,而不是法向量箭头因为有时很难看清楚箭头的指向. 对于点云中 ...

  8. 3.Open3D教程——点云数据操作

    点云数据 本教程阐述了基本的点云用法. 随需要的文件链接 1. 显示点云 import open3d as o3d import numpy as npprint("Load a ply p ...

  9. Open3d之点云离群点剔除

    当从扫描设备收集数据时,产生的点云往往包含要删除的噪声和伪影.本教程介绍Open3D的离群点剔除功能. 数据预处理 加载点云并使用 voxel_downsample对其下采样. # -*-coding ...

最新文章

  1. 英伟达推出全球首个元宇宙平台,豪砸数亿是为什么?
  2. Linux tomcat日志分割按天分割
  3. 验证视图状态MAC失败问题正确的解决办法
  4. What is the difference between BTD and Q35
  5. 大话数据结构学习笔记一:第一章
  6. Liunx常用的100条命令汇存
  7. Windows 自启动总结《转》
  8. oracle中季末最后一天,oracle有关时间计算,得到季度第一天、最后一天
  9. springMVC视图解析器的配置和使用
  10. 苹果账户登录_苹果版的「一键登录」上线了,它真的安全又保护隐私吗?
  11. 计算机密码怎么重置,电脑忘记密码了怎么重置密码
  12. 【金融市场基础知识】——中国的金融体系(二)
  13. 360校企培训:安全导论-试卷
  14. 华为无线网卡无服务器,联通华为无线上网卡连接时连接被终止解决方法 - 小众知识...
  15. 二级python试题分值_2020年12月计算机二级各考试科目题型及分值比例
  16. win10启动项_win10系统开机启动项的设置教程
  17. Scheme协议详细介绍
  18. 深入理解Eureka自我保护机制
  19. Ubuntu 18.04及几款应用的安装
  20. 玩转华为ENSP模拟器系列 | 配置OSPFv3 HMAC-SHA256认证示例

热门文章

  1. [JS] undefined、null、ReferenceError的区别、变量作用域问题
  2. Android ListView (多个adapter 说明)
  3. Android Edittext digits 属性限制输入的内容
  4. SnackBar使用注意事项
  5. 关于Activity class {package/class} does not exist
  6. 机器学习典型步骤以及训练集、验证集和测试集概念
  7. POJ 2430 状压DP
  8. mac 使用nvm安装node
  9. iptables-save和iptables-restore
  10. 事件绑定在IE下this是window的问题