Open3D 三维重建-Alpha Shapes (α-形状)

news2024/11/15 10:19:07

目录

一、概述

1.1原理

1.2实现步骤

二、代码实现

2.1关键函数

2.1.1函数

2.1.2参数详解

2.2完整代码

三、实现效果

3.1原始点云

3.2处理后点云


Open3D点云算法汇总及实战案例汇总的目录地址:

Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客


一、概述

        Alpha Shapes(α-形状)是一种用于点云边界重建的算法通过调节α参数,可以生成不同分辨率的边界形状。α-形状是通过将点云中的点连成三角形,并移除长于α的边,从而生成符合数据特征的形状。

1.1原理

α-形状算法的基本原理是

  1. 构建点云的Delaunay三角剖分。
  2. 移除所有边长大于α的边。
  3. 剩下的边和三角形构成了α-形状。

1.2实现步骤

  1. 加载点云数据:读取点云数据文件。
  2. 计算α-形状:使用α-形状算法重建边界。
  3. 可视化和保存结果:可视化生成的形状,并将其保存到文件中。

二、代码实现

2.1关键函数

2.1.1函数

def create_from_point_cloud_alpha_shape(self, alpha, alpha_1, tetra_mesh, pt_map):

2.1.2参数详解

1.alpha (float):
        控制形状细节的参数α。较小的α值会生成较细致的形状,而较大的α值会生成较粗略的形状。α值决定了要移除的边的最大长度。
2.alpha_1 (float):
        备用的α参数,用于生成备选的α-形状。当alpha参数生成的形状不理想时,可以使用alpha_1参数进行调整。
3.tetra_mesh (open3d.geometry.TetraMesh):
        四面体网格对象,表示通过 Delaunay 三角剖分生成的四面体网格。这个参数是用来辅助计算α-形状的中间数据。
4.pt_map (open3d.utility.Vector3iVector):
        点映射,用于记录点云中的点在四面体网格中的映射关系。这个参数是用来辅助计算α-形状的中间数据。

2.2完整代码

import open3d as o3d
import numpy as np


pcd = o3d.io.read_point_cloud("bunny.pcd")
o3d.visualization.draw_geometries([pcd], width=800, height=800,
                                  window_name="原始点云",
                                  mesh_show_back_face=False)  # 可视化点云
alpha = 0.03
print(f"alpha={alpha:.3f}")
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha)  # 执行单一alpah阈值
mesh.compute_vertex_normals()  # 计算mesh的法线
o3d.visualization.draw_geometries([mesh], window_name="单一alpah阈值的结果",
                                  width=800, height=800,
                                  mesh_show_back_face=True)

# 从给定点云中计算多个a-shape
tetra_mesh, pt_map = o3d.geometry.TetraMesh.create_from_point_cloud(pcd)  # 从点云创建四面体网格
for alpha in np.logspace(np.log10(0.5), np.log10(0.01), num=4):
    print(f"alpha={alpha:.3f}")
    mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(
        pcd, alpha, tetra_mesh, pt_map)
    mesh.compute_vertex_normals()
    o3d.visualization.draw_geometries([mesh], mesh_show_back_face=True)

三、实现效果

3.1原始点云

3.2处理后点云

alpha=0.030

alpha=0.500
 

alpha=0.136

alpha=0.037

alpha=0.010

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

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

相关文章

08-PCB工程文件的创建

1.创建工程文件 2.创建原理图库 3.创建PCB元件库 4.创建原理图 5.创建PCB 6.改名,保持和项目名一致 最后save。

uniapp获取swiper中子组件的内容高度

swiper有默认高度,如果不单独设置一个具体高度&#xff0c;swiper后面的内容将不会展示 这里展示的例子是: swiper中放有一个子组件,想要完整展示子组件的内容&#xff0c;swiper就需要获取到子组件的内容高度并设置 <!-- 注意: 这里的单位是 px,不是rpx --><swiper…

【STM32】IO口取反 | 寄存器方式 | 异或运算符 | 原理

目录 STM32 IO口取反 | 寄存器方式 | 异或运算符 | 原理1. 引言2. GPIO基础知识2.1 GPIO概述2.2 STM32的GPIO架构2.3 GPIO寄存器简介 3. GPIO引脚取反原理3.1 寄存器操作实现取反3.2 异或运算符的应用 4. 示例代码4.1 基础示例&#xff1a;LED闪烁4.2 应用实例&#xff1a;继电…

大数据面试SQL(三):每分钟在线直播人数

文章目录 每分钟在线直播人数 一、题目 二、分析 三、SQL实战 四、样例数据参考 每分钟在线直播人数 一、题目 有如下数据记录直播平台主播上播及下播时间&#xff0c;根据该数据计算出平台每分钟的在线直播人数。 这里用主播名称做统计&#xff0c;前提是主播名称唯一…

【初阶数据结构题目】16.用队列实现栈

用队列实现栈 点击链接答题 思路&#xff1a; 出栈&#xff1a;找不为空的队列&#xff0c;将size-1个数据导入到另一个队列中。 入栈&#xff1a;往不为空队列里面插入数据 取栈顶元素&#xff1a; 例如&#xff1a; 两个队列&#xff1a; Q1&#xff1a;1 2 3Q2&#xff1a;…

『大模型笔记』从API到Agent:万字长文洞悉LangChain工程化设计

『大模型笔记』从API到Agent&#xff1a;万字长文洞悉LangChain工程化设计 具体内容来自&#xff1a;从API到Agent&#xff1a;万字长文洞悉LangChain工程化设计

Spring源码解析(30)之AOP拦截链执行过程

一、前言 在上一节中我们介绍了AOP动态代理对象的创建过程&#xff0c;并且看到了Spring AOP在生成calllBacks的时候第一个拦截器就是&#xff1a;DynamicAdvisorInterceptor&#xff0c;所以我们通过代理对象执行对应的方法的时候就如跳入到这个拦截器中&#xff0c;接下来我们…

【RISC-V设计-07】- RISC-V处理器设计K0A之CSR

【RISC-V设计-07】- RISC-V处理器设计K0A之CSR 文章目录 【RISC-V设计-07】- RISC-V处理器设计K0A之CSR1.简介2.顶层设计3.端口说明4.寄存器说明5.代码设计6.总结 1.简介 控制和状态寄存器&#xff08;Control and Status Register&#xff0c;简称CSR&#xff09;是用于控制和…

使用历史版本比对法排查C++程序中的内存泄漏问题

目录 1、问题描述 2、使用Process Explorer实时查看程序的虚拟内存占用 2.1、对于内存泄漏问题&#xff0c;需要查看程序占用的虚拟内存 2.2、Windows任务管理器中看不到程序进程占用的虚拟内存&#xff0c;使用Process Explorer工具可以看到 2.3、通过Process Explorer工…

通世智库:姚力渟——第一次走进缓和医疗

2024年7月9日&#xff0c;我因工作原因&#xff0c;第一次以工作者的视角走进了位于北京市中心最具盛名的协和医院缓和医疗门诊&#xff0c;亲临现场去感受缓和医疗给患者及家属的贴心温暖和有益帮助。在此之前&#xff0c;我是一个惧怕医院&#xff0c;并时刻抱着能不去医院就…

Waterfox水狐浏览器:追求性能与隐私的64位网络探索者

大家好&#xff0c;今天电脑天空要为大家详细介绍一款基于Mozilla Firefox源代码开发的浏览器——Waterfox&#xff08;水狐浏览器&#xff09;。它专为64位系统优化&#xff0c;致力于提供更快速、更高效的浏览体验&#xff0c;并高度重视用户隐私保护。 主要特点 1. 高性能…

Stable Diffusion绘画 | 图生图-批量处理

批量处理中&#xff0c;对待处理图片的要求&#xff1a;宽高比一致 修改提示词后批量处理 调整参数&#xff1a; 确保宽高与原图一致增加一定的重绘幅度 调整提示词信息&#xff1a; 批量处理后&#xff0c;出图如下所示&#xff1a; 修改模型后批量处理 恢复提示词&#xf…

【数学建模】 多模数据与智能模型

文章目录 多模数据与智能模型1. 数字图像处理与计算机视觉1.1 数字图像的表示与处理1.1.1 认识OpenCV1.1.2 色彩学1.1.3 常见图像操作 1.2 数字图像的特征点1.2.1 Sobel算子1.2.2 Canny算子1.2.3 Harris角点检测1.2.4 ORB特征点检测 1.3 计算机视觉1.3.1 卷积神经网络1.3.2 YOL…

学习日志8.7--NGFW(Next Generation Firewall)下一代防火墙

目录 一、NGFW&#xff08;Next Generation Firewall&#xff09;下一代防火墙 二、防火墙CLI命令行配置 三、防火墙初始化Web登入 一、NGFW&#xff08;Next Generation Firewall&#xff09;下一代防火墙 防火墙是用来实现识别外部的安全流量&#xff0c;抵御外部的攻击流…

vue3+element-plus+flask 简易【工作日志本】小软件(过程超详细)

终于有时间继续学习技术了&#xff01;开发了一个简易的用于记录日常工作内容的小软件&#xff0c;权当学习和练手。功能如下&#xff1a;用户登录、日志内容的查、增、删、改以及导出。 开发环境&#xff1a; windows 10&#xff0c;mysql 8&#xff0c;Hbuilder X&#xff08…

Linux -- 进度条小程序

目录 一、缓冲区 二、回车与换行 三、进度条 1、版本一 2、版本二 在写小程序之前先来了解两个知识点 一、缓冲区 缓冲区(buffer)&#xff0c;它是内存空间的一部分。也就是说在内存空间中预留了一定的存储空间&#xff0c;这些存储空间用来缓冲输入或者输出的数据&#…

【eNSP模拟实验】交换机调整stp根端口和配置边缘端口

拓扑 关闭提示和设备重命名 将S1~S4交换机都做如下相关对应的配置 <Huawei>sys [Huawei]un in en [Huawei]sys S1 调整根端口 当前S3交换机生成树简要信息&#xff0c;其中e0/0/1是阻塞端口&#xff0c;e0/0/5是根端口。如何让e0/0/5变成阻塞端口&#xff0c;让e0/0/1…

【面试题】IDEA实现Debug远程调试Linux中的系统

有朋友面试时被问到&#xff0c;怎么远程调试部署在Linux中的系统&#xff1f;听到这个问题&#xff0c;那位朋友直接懵了&#xff0c;第一反应是震惊&#xff0c;已经部署在Linux中的系统还能调试&#xff1f; 沉默了几秒&#xff0c;只好说没有远程调试过Linux中的系统&#…

Debian 12 Linux系统安装Mongodb服务器步骤

在本地或云中运行的 Debian12 或 11 Linux 发行版上设置 MongoDB 数据库服务器并不是一件困难的事情&#xff0c;但是&#xff0c;必须知道如何使用终端和 Linux 命令行。虽然 MongoDB 除了社区版之外还提供了企业版&#xff0c;但在这里我们将使用这个免费的开源 NoSQL 文档数…

Spring基础知识学习总结(四)

&#xff08;5&#xff09;Spring新注解 使用上面的注解还不能全部替代xml配置文件&#xff0c;还需要使用注解替代的配置如下&#xff1a; 非自定义的Bean的配置&#xff1a;<bean>加载properties文件的配置&#xff1a;<context:property-placeholder>组件扫描…