听说Open3D很好用,我先学习学习,后面再转战PCL,毕竟PCL是点云届的经典大佬*.*

本人使用的是python版本噢:)

1.官网功能介绍及例程
http://www.open3d.org/docs/release/tutorial/geometry/index.html
也可以参考这位朋友整理的Open3D算法资料:

https://blog.csdn.net/qq_40985985/article/details/108715871?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

2.环境配置
ubuntu18.04下可以使用pip命令:
pip install open3d
安装完毕后,在终端使用python:

yy@yy:~$ python
Python 3.7.6 (default, Jan  8 2020, 19:59:22)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import open3d
>>>

如果没有报错说明安装成功>.<
3.开始使用
官网提供了丰富的python接口教程,动手试一试吧:
http://www.open3d.org/docs/release/tutorial/geometry/python_interface.html
3.1 读取点云数据并可视化
需要使用的函数有:
1)read_point_cloud 文件读取函数
2)draw_geometries 可视化函数

yy@yy:~$ python
Python 3.7.6 (default, Jan  8 2020, 19:59:22)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import open3d as o3d
>>> pcd = o3d.io.read_point_cloud("/home/yy/文档/pointcloud/desk_1.pcd")  ###输入被读取文件的路径
>>> print(pcd)
PointCloud with 1595906 points.
>>> import numpy as np
>>> print(np.asarray(pcd.points))
[[-0.7070244  -0.52971417  1.2640001 ][-0.7070244  -0.52084869  1.2640001 ][-0.7070244  -0.51198316  1.2640001 ]...[-0.76719701 -0.32806134  1.2508162 ][-0.77002394 -0.32122216  1.2594384 ][-0.76220942 -0.31320193  1.2549695 ]]
>>> 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])

执行完毕后会显示出我们读取文件的3d图像:

3.2 体素下采样
体素下采样使用常规体素网格从输入点云创建统一下采样的点云,它通常用作许多点云处理任务的预处理步骤。
1) 点被存储到体素中;
2) 每个占用的体素通过平均内部的所有点来精确生成一个点。

>>> downpcd = pcd.voxel_down_sample(voxel_size=0.05)  ###使用0.05的体素对点云下采样,值越大,得到点数越少
>>> o3d.visualization.draw_geometries([downpcd],zoom=0.3412,front=[0.4257, -0.2125, -0.8795],lookat=[2.6172, 2.0475, 1.532],up=[-0.0694, -0.9768, 0.2024])

结果如下:
PS:可以使用键盘上的-或者+改变点的大小

3.3 顶点法线估计
1) estimate_normals 法线估计(计算法向量)

>>> downpcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30)) ###设置kd树查找半径为0.1,最大点数为30的领域,拟合平面求出该平面法向量
>>> o3d.visualization.draw_geometries([downpcd],zoom=0.3412,front=[0.4257, -0.2125, -0.8795],lookat=[2.6172, 2.0475, 1.532],up=[-0.0694, -0.9768, 0.2024],.                                  point_show_normal=True)

PPS:键入n可以隐藏或者显示法向量,使用键盘上的-或者+改变点的大小以及法线的长短

3.4 读取法向量

>>> print(downpcd.normals[0])  ###打印第一个点的法向量
[ 0.48468789  0.85733389 -0.17336738]
>>> print(np.asarray(downpcd.normals)[:5, :]) ###打印前5个点的法向量
[[ 0.48468789  0.85733389 -0.17336738][ 0.8085128   0.04854127 -0.58647318][-0.07516671 -0.98791843 -0.13552542][ 0.8371842   0.18250328 -0.51557267][ 0.06751124  0.97692563  0.20262907]]

3.5 点云上色
1)paint_uniform_color 将所有点绘制为统一的颜色,颜色范围在[0,1]的RGB空间中。

>>> downpcd.paint_uniform_color([1, 0.5, 0])
PointCloud with 1595906 points.
>>> o3d.visualization.draw_geometries([downpcd],zoom=0.7,front=[0.5439, -0.2333, -0.8060],lookat=[2.4615, 2.1331, 1.338],up=[-0.1781, -0.9708, 0.1608])

经过体素下采样后的点云上色效果:

原点云上色效果:

3.6 边界体积
Open3D实现了AxisAlignedBoundingBox和OrientedBoundingBox也可以用于裁剪几何。
1)axis_aligned_bounding_box 轴对齐包围盒AABB
2)oriented_bounding_box 方向包围盒OBB

>>> aabb = downpcd.get_axis_aligned_bounding_box()
>>> aabb.color = (1, 0, 0)
>>> obb = downpcd.get_oriented_bounding_box()
>>> obb.color = (0, 1, 0)
>>> o3d.visualization.draw_geometries([downpcd, aabb, obb],zoom=0.7,front=[0.5439, -0.2333, -0.8060],lookat=[2.4615, 2.1331, 1.338],up=[-0.1781, -0.9708, 0.1608])


3.7 凸包
点云的凸包是包含所有点的最小凸集。Open3D包含compute_convex_hull计算点云的凸包的方法。该实现基于Qhull。
首先从网格中采样点云,然后计算返回为三角形网格的凸包,最后将凸包可视化为红LineSet。

>>> hull, _ = downpcd.compute_convex_hull()
>>> hull_ls = o3d.geometry.LineSet.create_from_triangle_mesh(hull)
>>> hull_ls.paint_uniform_color((1, 0, 0))
>>> o3d.visualization.draw_geometries([downpcd, hull_ls])

ply格式的点云数据呈现的效果:

>>> chair = o3d.io.read_point_cloud("/home/yy/文档/pointcloud/chair1.ply")
>>> hull, _ = chair.compute_convex_hull()
>>> hull_ls = o3d.geometry.LineSet.create_from_triangle_mesh(hull)
>>> hull_ls.paint_uniform_color((1, 0, 0))
>>> o3d.visualization.draw_geometries([chair, hull_ls])


3.8 DBSCAN集群
DBSCAN集群是一种基于密度的聚类算法,该算法在中实现,cluster_dbscan并且需要两个参数:eps定义到群集中邻居的距离,并使用min_points定义形成群集所需的最小点数。该函数返回labels,其中标签-1指示噪音。

with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:labels = np.array(pcd.cluster_dbscan(eps=0.02, min_points=10, print_progress=True))
max_label = labels.max()
colors = plt.get_cmap("tab20")(labels / (max_label if max_label > 0 else 1))
colors[labels < 0] = 0
pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])
o3d.visualization.draw_geometries([pcd],zoom=0.455,front=[-0.4999, -0.1659, -0.8499],lookat=[2.1813, 2.0619, 2.0999],up=[0.1204, -0.9852, 0.1215])

But,遇到问题了!进程被杀死了!

[Open3D DEBUG] Precompute Neighbours
已杀死pute Neighbours[===================================>    ] 87%

逛了下相关博客,据说可能是点数太多。我的数据有1595906 points

3维图像处理的新星--Open3D(实操过程持续更新ing....相关推荐

  1. “1+X”云计算平台运维与开发职业技能等级认证教程(持续更新)

    "1+X"云计算平台运维与开发职业技能等级认证教程(持续更新) 目录 一.Linux基础知识 1.1 Linux简介 1.2 IP地址的配置 1.3 配置yum源 1.4 下载的必 ...

  2. 框架里面的标签采集不到怎么办_2019最新人群标签落地‘实操’过程与解析

    关于标签过程才没有人去给你去解析,但我会,一起来看看 标签分为流量标签.意向标签和转化标签三类 什么叫做流量标签?按照我们以前的说法就是一些大词.流量标签可以分成类目词属性词和产品名.比如说衬衫就是我 ...

  3. 图像处理: OpenCV编程详解(C++) 【持续更新中】

    原创不易,侵权必究 作者联系方式 : QQ:993678929 一. 开发环境配置 Visual Studio 2019 + opencv 这里仅记录配置过程中可能遇到的问题 由于找不到 opencv ...

  4. 智能设计(智能家居的研发实战实操)专项技能培训通知

    随着物联网产业的不断发展,物联网相关技术人才成为企业最大的需求,为解决该专业人才紧缺现状,同时配合工业和信息化部教育与考试中心在全国范围内开展的以服务产业人才需求为导向,紧紧围绕"两化深度融 ...

  5. git原理详解与实操指南_基于dockercompose的Gitlab CI/CD实践amp;排坑指南

    长话短说 经过长时间实操验证,终于完成基于Gitlab的CI/CD实践,本次实践的坑位很多, 实操过程尽量接近最佳实践(不做hack, 不做骚操作),记录下来加深理解. 看过博客园<docker ...

  6. [scRNA-seq]单细胞转录因子分析——SCENIC实操示例

    之前的文章我们写到了用SCENIC对单细胞RNA测序数据进行转录因子分析的原理:[scRNA-seq]单细胞转录因子分析--SCENIC算法简析.在这篇推送中,我们就用数据实例来展示如何得到SCENI ...

  7. 【沙龙】基于MDM9206芯片的gokit4(G)的应用实操

    导读 紧跟前沿通信技术.Get最新开发技能,高通Qualcomm&机智云&移远通信高级工程师手把手教开发:通过GoKit4(G)+MDM9206快速接入机智云,4小时掌握高通MDM92 ...

  8. 新网站如何做seo?小白站长实操案例!

    缘起:作者本人起初只是公司的客服人员,老板觉得工作中闲余时间较多,就安排加增网站的seo工作,可是完全不懂,是纯小白-于是从网上各种学习,各种恶补,理论知识一大堆,真到做的时候,还是有些傻眼,毕竟还得 ...

  9. 1W字长文:蓝绿发布、金丝雀发布、滚动发布、A/B测试 原理和实操

    背景: 蓝绿发布.金丝雀发布.滚动发布.A/B测试 ,是大家日常常见的发布工作.所以发布的原理和实操是一个非常.非常核心的面试知识点. 在40岁老架构师 尼恩的读者交流群(50+)中,其相关面试题是一 ...

  10. 手把手实操|深度剖析电商贷款风控相关细节(电商贷模型)

    序言: 在电商领域中,一直都有这样的场景:对于电商企业而言,资金短缺是经常出现的问题,尤其是在目前疫情状况下,经济下行,营业额逐渐降低,现金流紧张,企业这时就会考虑去借贷融资. 有需求就有供给,目前许 ...

最新文章

  1. 杨英(帮别人名字作诗)
  2. 解决xtraFinder在EI下不能使用问题
  3. ORACLE11G自动维护任务简析
  4. 买的情侣裤衩寄前男友家了,怎么办?
  5. word图片嵌入式为何只能看到一部分_Word排版的正确姿势!(Word论文排版教学)...
  6. matlab读取adtx文件,求大家帮我看看下面中matlab中的程序问题出在哪里? - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  7. ai画面怎么调大小_AI人脸抓拍摄像机安装指导,这样安装抓拍更准
  8. selenium IDE Chrome下载安装与使用
  9. 下载 Chrome插件 crx的教程
  10. 结构梁配筋最牛插件_老师傅总结建筑结构设计技巧经验,看完涨知识了
  11. react+UmiJS+Antd Pro简介
  12. jpeg格式说明与解码学习
  13. HTB-Antique
  14. poi 大量数据写入
  15. oracle 11g 服务端下载地址及安装说明
  16. 线性代数系列(1)行列式
  17. AnimationPacker重写
  18. 2020 年值得关注的20个区块链项目,来看看今年该把目光放在哪?
  19. 浪潮也要玩OpenStack,元芳你怎么看?
  20. springboot+vue幼儿园管理系统(源码+文档)

热门文章

  1. git cherry-pick的使用教程
  2. thinkpad E430拆装与升级
  3. ssm基于web的教务管理系统毕业设计源码261620
  4. 计算机处理器性能排名,2020最新电脑cpu性能天梯图_i5i7i9处理器性能排行榜介绍...
  5. 2、通信中的交换技术
  6. git添加对勾图标 TortoiseGit安转配置
  7. Vue关键词搜索高亮
  8. 163邮箱邮件被退回,什么企业邮箱可以接收国外邮件?
  9. python不是内部命令或外部命令,也不是可执行程序解决方案”解决方法
  10. html5中display flex,详解CSS中的display:flex||inline-flex属性