Open3D mesh Taubin滤波

目录

一、概述

1.1原理

1.2实现步骤

1.3应用场景

二、代码实现

2.1关键函数

参数详解

返回值

2.2完整代码

三、实现效果

3.1加入噪声的mesh

3.2Taubin迭代10次

3.3Taubin迭代100次


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

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


一、概述

        在三维网格处理中,Taubin 滤波是一种常用的平滑技术,它通过对网格顶点位置进行反复平滑和拉伸操作,以消除高频噪声和细节,但不会像简单的拉普拉斯平滑那样导致体积收缩。因此,Taubin 滤波可以在保持网格整体形状的前提下,消除噪声并平滑网格。

1.1原理

        Taubin 滤波是一种基于拉普拉斯平滑的迭代方法。它的基本思想是通过交替应用两个相反的拉普拉斯平滑操作,一个平滑操作用于去除噪声(收缩网格),另一个平滑操作用于抵消第一次操作的体积收缩。这样可以平滑网格表面,而不引入明显的体积损失。

1.2实现步骤

  1. 加载网格模型: 使用 Open3D 加载一个三角网格模型,准备进行平滑处理。
  2. 应用 Taubin 滤波: 调用 Open3D 中的平滑函数对网格进行 Taubin 滤波处理。
  3. 可视化结果: 显示平滑后的网格模型,与原始模型进行比较,观察平滑效果。

1.3应用场景

  • 噪声去除: 适用于三维扫描数据的噪声去除,保留主要形状特征的同时消除高频噪声。
  • 模型修复: 在三维建模中,用于修复和优化不规则的网格,特别是在3D扫描后数据处理中。
  • 光滑化表面: 在计算机图形学和动画中,用于生成光滑的表面效果。

二、代码实现

2.1关键函数

        filter_smooth_taubin 是 Open3D 中用于执行 Taubin 平滑的函数。Taubin 滤波的特点是通过交替应用两个相反的拉普拉斯平滑操作来实现平滑处理,同时避免网格的体积收缩。

def filter_smooth_taubin(self, number_of_iterations: int = 1, lambda: float = 0.5, mu: float = -0.53, filter_scope=None) -> open3d.cpu.pybind.geometry.TriangleMesh

参数详解

1.number_of_iterations: int
        - 描述: 指定平滑操作的迭代次数。
        - 作用: 决定平滑处理的强度,迭代次数越多,平滑效果越显著。
        - 默认值: 1,表示进行一次迭代。
2.lambda: float
        - 描述: 拉普拉斯平滑的收缩系数。
        - 作用: 控制第一次平滑操作的强度,通常设置为正值。典型值为 0.5。
3.mu: float
        - 描述: 拉普拉斯平滑的扩展系数。
        - 作用: 控制第二次平滑操作的强度,用于抵消第一次平滑引起的体积收缩。典型值为 -0.53。
4.filter_scope: open3d.geometry.FilterScope
        - 描述: 控制平滑操作的作用范围。
        - 作用: 可以指定只平滑顶点、面片或整个网格。
        - 默认值: None,表示对整个网格进行平滑。

返回值

- smoothed_mesh: open3d.geometry.TriangleMesh
- 描述: 返回经过 Taubin 滤波处理后的三角网格模型。

2.2完整代码

import open3d as o3d
import numpy as npclass o3dtut:def get_knot_mesh():# 读取三角网格模型并计算顶点法线mesh = o3d.io.read_triangle_mesh("bunny.ply")mesh.compute_vertex_normals()  # 计算并存储顶点法线return mesh# 获取网格模型
mesh_in = o3dtut.get_knot_mesh()# 将网格的顶点转换为numpy数组
vertices = np.asarray(mesh_in.vertices)# 生成并添加噪声到顶点上
noise = 0.001  # 设置噪声的幅度
vertices += np.random.uniform(0, noise, size=vertices.shape)  # 给顶点添加均匀分布的噪声# 将带噪声的顶点数据重新赋值回网格
mesh_in.vertices = o3d.utility.Vector3dVector(vertices)
mesh_in.compute_vertex_normals()  # 重新计算顶点法线以反映新的顶点位置# 可视化带有噪声的网格
o3d.visualization.draw_geometries([mesh_in], width=800, height=800)# 使用 Taubin 滤波进行平滑处理,迭代10次
print('Filter with Taubin with 10 iterations')
mesh_out = mesh_in.filter_smooth_taubin(number_of_iterations=10)
mesh_out.compute_vertex_normals()  # 重新计算顶点法线以反映平滑后的顶点位置# 可视化平滑处理后的网格
o3d.visualization.draw_geometries([mesh_out], width=800, height=800)# 使用 Taubin 滤波进行平滑处理,迭代100次
print('Filter with Taubin with 100 iterations')
mesh_out = mesh_in.filter_smooth_taubin(number_of_iterations=100)
mesh_out.compute_vertex_normals()  # 重新计算顶点法线以反映平滑后的顶点位置# 可视化经过100次迭代平滑处理后的网格
o3d.visualization.draw_geometries([mesh_out], width=800, height=800)

三、实现效果

3.1加入噪声的mesh

3.2Taubin迭代10次

3.3Taubin迭代100次

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式云扩展 AI 边缘算力,助力用户智能化创新

近期,AI 创新圈再次发布重磅产品更新。OpenAI 全新旗舰版多模态模型 GPT-4o 横空出世,其打通文本、图像、视频的富媒体理解能力以及敏捷的智能化对话,将 AI 助手的人性化表达效果,提升至更高水平。 ​ 从技术源头来看&#xff0c…

数据线性结构

一、线性表 优点:可以很快速的找到内存地址 查询,修改快 缺点:在中间部分新增,删除部时需要移动后续的元素 像java中的stream流的过滤等操作都是新建立一个集合有序插入返回,空间换时间 java中list下标为什么要从0开…

网工面试题(安全)

上一篇:网工面试题(数通) 防火墙 防火墙的应用场景 防火墙:部署在网络出口处/服务器区(数据中心)/广域网接入,用于防止外界黑客攻击、保护内网安全硬件。 传统防火墙和下一代防护墙的区别 传统防火墙的功能…

AJAX day-02 HTTP格式JSON格式

目录 一. 计算机网络 1.1 网络参考模型 1.2 各层重要对应的协议 1.3 DNS解析(域名解析服务器) 1.4 FTP(文件传输协议) 1.5 UDP(用户数据报协议) 1.6 TCP(传输控制协议) 1.7 IP(网际互连协议) 1.8 …

golang本地缓存fastcache高性能实现原理

1. git仓库 https://github.com/abbothzhang/fastcache 2. 整体原理 initCache时不会申请内存,只有第一次set时候才会申请,且会一次性申请64MB,后面不够了又一次性申请1024*64MB大小内存 2.1. 时序图 3. 高性能原因 将cache分为512个buc…

C++奇迹之旅:深度解析list的模拟实现

文章目录 📝前言🌠list节点🌉list 🌠迭代器的创建🌉const迭代器 🌠代码🚩总结 📝前言 🌠list节点 我们先建立一个列表里的节点类listnode,用来构造list的节…

数据仓库系列 3:数据仓库的主要组成部分有哪些?

你是否曾经好奇过,当你在网上购物或使用手机应用时,背后的数据是如何被存储和分析的?答案就在数据仓库中。本文将为你揭开数据仓库的神秘面纱,深入探讨其核心组成部分,以及这些组件如何协同工作,将海量数据转化为有价值的商业洞察。 目录 引言:数据仓库的魔力1. 数据源和数据…

[Algorithm][综合训练][体育课测验(二)][合唱队形][宵暗的妖怪]详细讲解

目录 1.体育课测验(二)1.题目链接2.算法原理详解 && 代码实现 2.合唱队形1.题目链接2.算法原理详解 && 代码实现 3.宵暗的妖怪1.题目链接2.算法原理详解 && 代码实现 1.体育课测验(二) 1.题目链接 体育课测验(二) 2.算法原理详解 && 代码实现…

解决Selenium已安装,在pycharm导入时报错

搭建设selenium环境时,selenium已安装,但是在pycharm中使用“from selenium import webdriver”语句时红线报错 解决方案: 1.file->settings进入设置 2.点击加号,搜索‘selenium’安装 3,等待安装完成&#xff0…

项目技巧二

目录 java中Date和mysql数据库datetime数据类型 注意: 在yml文件中配置成员变量的值 1.写一个yml文件 2.写一个与yml相互映射的类来读取yml的属性信息 3.在其他子模块的配置类中开启此类,读取yml文件的内容信息 4.直接依赖注入(因为已…

Java多进程调用dll程序和exe程序

🎯导读:本文介绍了使用Java调用本地DLL及EXE程序的方法。针对DLL调用,文章提供了基于Java Native Access (JNA) 库的具体实现方案,包括定义Java接口以映射DLL中的函数,并展示了如何加载DLL及调用其中的方法。对于EXE程…

opencv之几何变换

文章目录 1 前言2 线性几何变换的主要类型2.1 平移 (Translation):2.1.1 定义2.1.2代码 2.2 缩放 (Scaling):2.2.1 定义2.2.2 代码 2.3 旋转 (Rotation):2.3.1 定义2.3.2 代码 2.4 仿射变换 (Affine Transformation):2.4.1 定义2.…

数据源10min自动断开连接导致查询抛异常(未获取可用连接)

由于个人能力有限,本文章仅仅代表本人想法,若有不对请即时指出,若有侵权,请联系本人。 1 背景 工作中引入druid来管理数据源连接,由于数据源每隔10分钟强制管理空闲超过10分钟的连接,导致每隔10分钟出现1…

3D打印透气钢与传统透气钢的差异

透气钢作为一种集金属强度与透气性能于一体的特殊材料,在注塑模具领域扮演着关键角色,通过有效排除模具内困气,显著提升制品成型质量与生产效率。当前,市场上主流的透气钢产品多源自日本、美国,其高昂成本与技术壁垒限…

Golang | Leetcode Golang题解之第388题文件的最长绝对路径

题目&#xff1a; 题解&#xff1a; func lengthLongestPath(input string) (ans int) {n : len(input)level : make([]int, n1)for i : 0; i < n; {// 检测当前文件的深度depth : 1for ; i < n && input[i] \t; i {depth}// 统计当前文件名的长度length, isFi…

生成艺术,作品鉴赏:物似主人形

2001年&#xff0c;当21岁的我&#xff0c;还在恒基伟业当高级工程师时。我有一个女同事&#xff0c;她有个特别大的杯子用来喝水&#xff0c;不夸张的说&#xff0c;是那种我从来没见过的大杯子&#xff0c;由于她是很大只的那种&#xff0c;她便自嘲说&#xff1a;「物似主人…

【Kubernetes部署篇】二进制搭建K8s高可用集群1.26.15版本(超详细,可跟做)

文章目录 一、服务器环境信息及部署规划1、K8S服务器信息及网段规划2、服务器部署架构规划3、组件版本信息4、实验架构图 二、初始化环境操作1、关闭防火墙2、配置本地域名解析3、配置服务器时间保持一致4、禁用swap交换分区(K8S强制要求禁用)5、配置主机之间无密码登录6、修改…

JVM2-JVM组成、字节码文件、类的生命周期、类加载器

Java虚拟机的组成 Java虚拟机主要分为以下几个组成部分&#xff1a; 类加载子系统&#xff1a;核心组件类加载器&#xff0c;负责将字节码文件中的内容加载到内存中运行时数据区&#xff1a;JVM管理的内存&#xff0c;创建出来的对象、类的信息等内容都会放在这块区域中执行引…

RelativeLayout相对布局

activity_relative_layout.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"150dp…

QT QGraphicsView实现预览图片显示缩略图功能

QT QGraphicsView实现预览图片显示缩略图功能QT creator Qt5.15.2 头文件&#xff1a; #ifndef TGRAPHICSVIEW_H #define TGRAPHICSVIEW_H#include <QGraphicsView> #include <QMainWindow> #include <QObject> #include <QWidget>class TGraphicsVie…