(5)点云数据处理学习——其它官网例子2

news2024/11/27 12:31:47

1、主要参考

(1)官方稳定地址

Point cloud — Open3D 0.16.0 documentation

2、相关功能

2.1凸包(Convex hull)
(1)函数

compute_vertex_normals
create_from_triangle_mesh

(2)功能说明

点云的凸包是包含所有点的最小凸集。Open3D包含compute_convex_hull方法,用于计算点云的凸包。该实现基于Qhull。

(3)测试代码

在下面的示例代码中,我们首先从网格中采样一个点云,并计算作为三角形网格返回的凸包。然后,我们将凸包可视化为一个红色的LineSet。

1)本次测试还是那只兔子,原始的3d显示如下

import open3d as o3d
import numpy as np


#网络下载,官方例子
# bunny = o3d.data.BunnyMesh()
# mesh = o3d.io.read_triangle_mesh(bunny.path)
#或者下载后本地读取
#https://github.com/isl-org/open3d_downloads/releases/download/20220201-data/BunnyMesh.ply
plypath = "D:/RGBD_CAMERA/python_3d_process/BunnyMesh/BunnyMesh.ply"
# mesh = o3d.io.read_point_cloud(plypath)  # path为文件路径  #直接读取点云的方法
mesh = o3d.io.read_triangle_mesh(plypath)  # path为文件路径
o3d.visualization.draw_geometries([mesh])

兔子的图,网络问题暂时上传不了

注意:读取时使用了read_triangle_mesh(三角网格)而不是read_point_cloud

2)方法一直接对兔子做凸包

import open3d as o3d
import numpy as np


#网络下载,官方例子
# bunny = o3d.data.BunnyMesh()
# mesh = o3d.io.read_triangle_mesh(bunny.path)
#或者下载后本地读取
#https://github.com/isl-org/open3d_downloads/releases/download/20220201-data/BunnyMesh.ply
plypath = "D:/RGBD_CAMERA/python_3d_process/BunnyMesh/BunnyMesh.ply"
# mesh = o3d.io.read_point_cloud(plypath)  # path为文件路径  #直接读取点云的方法
mesh = o3d.io.read_triangle_mesh(plypath)  # path为文件路径
# o3d.visualization.draw_geometries([mesh])

#(方法一)直接对兔子做凸包
hull, _ = mesh.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([mesh,hull_ls])

#(方法二)对兔子采样后做凸包
# pcl = mesh.sample_points_poisson_disk(number_of_points=2000)
# hull, _ = pcl.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([pcl, hull_ls])

兔子的图如下

3)方法二,对兔子进行下采样后做凸包

import open3d as o3d
import numpy as np


#网络下载,官方例子
# bunny = o3d.data.BunnyMesh()
# mesh = o3d.io.read_triangle_mesh(bunny.path)
#或者下载后本地读取
#https://github.com/isl-org/open3d_downloads/releases/download/20220201-data/BunnyMesh.ply
plypath = "D:/RGBD_CAMERA/python_3d_process/BunnyMesh/BunnyMesh.ply"
# mesh = o3d.io.read_point_cloud(plypath)  # path为文件路径  #直接读取点云的方法
mesh = o3d.io.read_triangle_mesh(plypath)  # path为文件路径
# o3d.visualization.draw_geometries([mesh])


#(方法一)直接对兔子做凸包
# hull, _ = mesh.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([mesh,hull_ls])

#(方法二)对兔子采样后做凸包
pcl = mesh.sample_points_poisson_disk(number_of_points=2000)
hull, _ = pcl.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([pcl, hull_ls])

兔子的图如下

(4)函数说明

sample_points_poisson_disk    --  泊松磁盘采样,下采样的一个方法

2.2 DBSCAN 分类集群(DBSCAN clustering) 

(1)函数

cluster_dbscan(eps=0.02, min_points=10, print_progress=True)

(2)说明

给定一个点云,例如一个深度传感器,我们希望将局部点云数据集群分组在一起。为此,我们可以使用聚类算法。Open3D实现了DBSCAN [Ester1996],这是一种基于密度的聚类算法。该算法在cluster_dbscan中实现,需要两个参数:eps定义到集群中邻居的距离,min_points定义形成集群所需的最小点数。函数返回标签,其中标签-1表示噪声。

(3)测试代码

import open3d as o3d
import numpy as np
from matplotlib import pyplot as plt

# 初次使用下载模型
# ply_point_cloud = o3d.data.PLYPointCloud()
# pcd = o3d.io.read_point_cloud(ply_point_cloud.path)
# 或者直接使用本地
plypath = "D:/RGBD_CAMERA/python_3d_process/DemoCropPointCloud/fragment.ply"
pcd = o3d.io.read_point_cloud(plypath)  # path为文件路径

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()
print(f"point cloud has {max_label + 1} clusters")
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])

(4)测试结果

(稍微大一点的截图就没法上传,只能上小图)

 该算法预先计算了所有点在半径内的所有邻点。如果所选eps太大,这可能需要大量内存。

(5)自己的例子,未剔除点云的处理结果

import open3d as o3d
import numpy as np
from matplotlib import pyplot as plt

# 初次使用下载模型
# ply_point_cloud = o3d.data.PLYPointCloud()
# pcd = o3d.io.read_point_cloud(ply_point_cloud.path)
# 或者直接使用本地
# plypath = "D:/RGBD_CAMERA/python_3d_process/DemoCropPointCloud/fragment.ply"
plypath = "D:/RGBD_CAMERA/python_3d_process/1_hezi.pcd"
pcd = o3d.io.read_point_cloud(plypath)  # path为文件路径
pcd = pcd.remove_non_finite_points(True, False)#剔除无效值

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))
        pcd.cluster_dbscan(eps=10, min_points=200, print_progress=True))

max_label = labels.max()
print(f"point cloud has {max_label + 1} clusters")
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])

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Three.js教程之在网页快速实现 3D效果(教程含源码)

介绍 本文概述了与使用 Three.js 在常规 Web 浏览器中直接在 Web 上制作 3D 图形相关的术语和概念。对于 3D,就像任何主题一样,如果您深入了解所有细节,事情会很快变得复杂。我将尝试做相反的事情,并简单概述您在学习如何在常规 Web 浏览器中制作 3D 时会遇到的所有概念。 …

手把手教你用站长工具综查询网站域名在各个平台的权重情况 站长工具综查询

网站权重是根据流量值来判断网站的权重值。权重值是属于第三方评估就有参考的意义。 了解网站的权重可以助于SEO专员找到工作的方向。使用站长工具综合查询可以看到网站在各个平台的权重情况。 用站长工具综合查询网站在各个平台的权重情况的操作步骤吧&#xff01; 第一步、打…

德云一哥岳云鹏,准备录制河南和东方卫视节目,央视春晚还参加吗

时间如白驹过隙&#xff0c;转眼马上又要过年了&#xff0c;央视春晚也备受关注&#xff0c;不知道今年春晚究竟有哪些明星登台演出。说起央视春晚舞台&#xff0c;就不得不说起相声和小品&#xff0c;这两个节目是春晚的台柱子&#xff0c;也一直深受大家的喜爱。 尤其是最近几…

Linux基础概念,目录文件操作命令,压缩命令:

Linux基础概念&#xff1a; 1&#xff0c;linux登录方式&#xff0c;本地登录&#xff0c;远程登录&#xff08;借助xshell等&#xff09; 登录后是shell交互界面&#xff0c;用c编写的程序。常见的就是bash&#xff0c;sh&#xff0c;csh&#xff0c;ksh等。 2&#xff0c;li…

项目实战——Web自动化测试

目录 一、前言及测试用例设计 二、 首页测试&#xff08;未登录&#xff09; 三、注册测试 四、对局列表测试 五、排行榜测试 六、对战测试 七、Bot测试 八、测试套件Suite 一、前言及测试用例设计 整个项目已经部署完成&#xff0c;我们历经九九八十一难&#xff0c;…

英国Top20名校更偏爱IB申请党?

IB的全球超高认可度相信大家都有共识&#xff0c;英国大学对于A-Level、IB成绩都持认可态度。 但多数人会认为A-Level成绩申请英国名校会比IB更有优势&#xff0c;事实果真如此吗&#xff1f;接下来通过官方给出的数据&#xff0c;我们来一探究竟~ 01英国Top20名校更偏爱IB学生…

Linux的十个常用命令

目录 1、ls 2、pwd 3、cd 4、touch 5、cat 6、echo 7、mkdir 8、rm 9、mv 10、cp 1、ls ls命令用于显示目录中的文件信息. 格式&#xff1a;ls [选项] [文件] 参数&#xff1a; -a 显示所有文件及目录 (. 开头的隐藏文件也会列出)-l 除文件名称外&#xff0c;亦将文件型…

点云缩放(附open3d python代码)

1/ numpy 数组方法 通过将点云数组乘以一个缩放因子来改变大小, 同时通过加法运算实现质心平移。points = points/2.0#缩小到原来的一半 points[:, 0] = points[:, 0] + 20#质心平移到x=20处2/ open3d的缩放函数为scale,包含两个参数。 第一个参数是缩放的比例,即放大的倍数…

Kafka怎样完成建立和Broker之间的连接?

文章目录NetworkClient初始化1.基于Java NIO SocketChannel封装KafkaChannel2.Kafka提供的Selector是如何初始化跟Broker之间的连接的2.1 初始化SocketChannel&#xff0c;发起连接请求2.2 将发起连接请求后的SocketChannel缓存起来3.万能poll()方法之前的准备工作4. 通过不断轮…

win11电脑加密文件夹的两种方法

为了保证隐私安全&#xff0c;很多用户都会给文件夹设置密码&#xff0c;只有输对密码才能进入文件夹&#xff0c;那么升级到Win11新系统要怎么操作呢&#xff1f;下面小编就给大家带来两种加密方式&#xff0c;任你挑选。 方法一&#xff1a; 1、首先去找到要加密的文件夹。 2…

Java企业微信对接

最近项目中要对接企业微信&#xff0c;实现通讯录数据同步&#xff0c;即在企业端添加编辑删除用户&#xff0c;部门数据要同步到微信端&#xff0c;同时微信端添加编辑删除用户&#xff0c;部门数据要同步到企业端&#xff0c;实现数据同步功能&#xff0c;需要调用企业微信AP…

DDD的简单落地实现

目录 概述 和微服务的联系 具体划分 遵循依赖倒置原则 其他规范 具体实现代码 总结 概述 领域式驱动&#xff08;DDD&#xff09; 这种模式的核心就是根据功能去划分领域&#xff0c;然后在这个领域内只做这个领域的事情。 和微服务的联系 和微服务有什么类似的地方&am…

PyTorch 新库 TorchMultimodal 使用说明:将多模态通用模型 FLAVA 扩展到 100 亿参数

先前的文章中&#xff0c;我们介绍了 TorchMultimodal&#xff0c;今天我们将从一个具体案例出发&#xff0c;演示如何在 Torch Distributed 技术加持下&#xff0c;在 TorchMultimodal 库中扩展多模态基础模型。 近年来&#xff0c;大模型已成为一个备受关注的研究领域。以自然…

GOM传奇引擎登录器商业版与免费版的区别

商业版与免费版登录器的区别&#xff1a; 1商业版自定义界面功能可以保存配置 2商业版登录器支持读取二次加密的Pak。需要购买Pak二次加密工具。 3商业版增加数字证书&#xff0c;防止杀毒软件误报 4商业版支持163博客远程列表&#xff0c;列表首尾需要$BEGIN $END关键字 5商业…

如何提高网站安全防护?

网站安全是网站建设后非常关键的一个问题&#xff0c;是不可以忽视的&#xff0c;一个安全性不高的网站对于网站的危害是很多的&#xff0c;网站安全性不高的网站容易被攻击、容易被挂马、容易造成网站数据泄露&#xff0c;下面安全狗小编来跟大家聊一下网站安全性该如何提高。…

Git常见操作

什么是Git 简单说&#xff0c;git就是版本管理工具。 Git解决的问题 试想一下&#xff0c;你是公司的设计人员。老板要求你设计一份海报。你花了3天时间&#xff0c;画好了&#xff0c;并命名为海报1.0.然后你给老板看&#xff0c;老板看了说“设计的很好&#xff0c;要是能…

将 Vue.js 项目部署至静态网站托管,并开启 Gzip 压缩

摘要&#xff1a;关于使用 Nginx 开启静态网站 Gzip 压缩的教程已经有很多了&#xff0c;但是好像没几个讲怎么在对象存储的静态网站中开启 Gzip 压缩。其实也不复杂&#xff0c;我们一起来看下~本文分享自华为云社区《将 Vue.js 项目部署至静态网站托管&#xff0c;并开启 Gzi…

基于模糊推理的滑膜控制

目录 前言 1.系统描述 2.控制器设计 3.模糊推理估计不确定f 3.1构造模糊系统 3.2模糊推理过程 3.3 自适应律设计 4.仿真分析 4.1仿真模型 4.2仿真结果 5.总结 前言 在一般的建模仿真中&#xff0c;我们假设模型都是可以用数学模型描述出来的是确定的&#xff0c;称…

Flink系列之Flink集群搭建

title: Flink系列 二、Flink集群搭建 2.1 Flink的Standalone模式集群安装 1、上传解压重命名 [roothadoop10 software]# tar -zxvf flink-1.14.3-bin-scala_2.12.tgz [roothadoop10 software]# mv flink-1.14.3 flink2、进入到解压之后的目录里面修改配置文件flink-conf.yam…

Hash 的定义

Hash&#xff0c;一般翻译做散列、杂凑&#xff0c;或音译为哈希。 这句话就是很多混乱的根源。 笔者还是比较时候直接使用 哈希这个翻译&#xff0c;或者干脆不翻译。 混乱来源 在查看很多资料的时候&#xff0c;经常会看到最多的一个词就是散列算法。 如果不深入追究下的…