【3维视觉】网格的谱分解和应用(GFT图傅里叶变换)

网格的谱分解即网格的频率分解,我们学过信号的傅里叶变换,将信号从空域变换到频域。二维图像由离散傅里叶变换DFT(Discrete Fourier Transform)。在图信号领域,也有图的傅里叶变换GFT(Graph Fourier Transform),网格可以看作是图,因此网格的谱分解,就是进行图傅里叶变换。
在这里插入图片描述

网格谱分解

GFT图傅里叶变换

  • 先构建图的拉普拉斯矩阵,拉普拉斯矩阵=度矩阵-邻接矩阵

  • 计算拉普拉斯矩阵的特征值和特征向量: 对构建的拉普拉斯矩阵进行特征值分解,得到其特征值和对应的特征向量。特征值表示了网格的频谱信息,而特征向量则表示了网格不同的频谱分量。

  • 然后将图的拉普拉斯矩阵可以表示程基向量的线性组合,其系数就代表了不同频率分量的强度。

  • 在特征值中,较大的特征值对应的频谱分量通常包含了网格中的高频信息,而较小的特征值对应的频谱分量则表示了网格中的低频信息。因此,可以通过特征值的大小来判定高频信息。

图的拉普拉斯矩阵

拉普拉斯矩阵=度矩阵-邻接矩阵

为什么这个矩阵叫拉普拉斯矩阵呢?依我有限的理解,可以联系网格顶点的拉普拉斯坐标。
假设图有n个顶点,则图的拉普拉斯矩阵 L n × n L^{n\times n} Ln×n,将图的顶点坐标也表示为矩阵为 V n × 3 V^{n\times 3} Vn×3, 将拉普拉斯矩阵左乘顶点矩阵,即 L × V L \times V L×V,得到的是图的顶点的拉普拉斯坐标矩阵 L v n × 3 Lv^{n\times 3} Lvn×3

举个栗子

拉普拉斯矩阵=度矩阵-邻接矩阵

考虑一个简单的二维网格,由4个顶点和4条边组成,如下所示:

   1 -- 2
   |    |
   3 -- 4

我们可以使用邻接矩阵和度矩阵来构建拉普拉斯矩阵。

  • 邻接矩阵:邻接矩阵表示了顶点之间的连接关系。在这个例子中,邻接矩阵为:
   [[0, 1, 0, 1],
    [1, 0, 1, 0],
    [0, 1, 0, 1],
    [1, 0, 1, 0]]
  • 度矩阵:度矩阵表示了每个顶点的度数(即与之相连的边的数量)。在这个例子中,度矩阵为:
   [[2, 0, 0, 0],
    [0, 2, 0, 0],
    [0, 0, 2, 0],
    [0, 0, 0, 2]]
  • 拉普拉斯矩阵:通过将度矩阵减去邻接矩阵,我们可以得到拉普拉斯矩阵。在这个例子中,拉普拉斯矩阵为:
   [[2, -1, 0, -1],
    [-1, 2, -1, 0],
    [0, -1, 2, -1],
    [-1, 0, -1, 2]]

这个拉普拉斯矩阵描述了网格中顶点之间的连接关系和边界条件。通过对该矩阵进行特征值分解,可以进行网格的谱分解和频谱分析。
对于给定的拉普拉斯矩阵:

L = [ 2 − 1 0 − 1 − 1 2 − 1 0 0 − 1 2 − 1 − 1 0 − 1 2 ] L = \begin{bmatrix} 2 & -1 & 0 & -1 \\ -1 & 2 & -1 & 0 \\ 0 & -1 & 2 & -1 \\ -1 & 0 & -1 & 2 \\ \end{bmatrix} L= 2101121001211012

  • 进行特征值分解

使用适当的数值计算库或线性代数软件进行特征值分解。这可以通过调用相应的函数或方法来完成。

特征值分解的结果可以表示为:
L = Q Λ Q − 1 L = Q\Lambda Q^{-1} L=QΛQ1

其中, Q Q Q 是特征向量矩阵, Λ \Lambda Λ 是特征值对角矩阵。

得到结果如下:

特征值(Eigenvalues):
λ 1 = 0 \lambda_1 = 0 λ1=0 λ 2 = 1 \lambda_2 = 1 λ2=1 λ 3 = 3 \lambda_3 = 3 λ3=3 λ 4 = 4 \lambda_4 = 4 λ4=4

特征向量(Eigenvectors):
v 1 = [ 1 1 1 1 ] v_1 = \begin{bmatrix} 1 \\ 1 \\ 1 \\ 1 \end{bmatrix} v1= 1111
v 2 = [ − 1 1 − 1 1 ] v_2 = \begin{bmatrix} -1 \\ 1 \\ -1 \\ 1 \end{bmatrix} v2= 1111
v 3 = [ 1 − 1 − 1 1 ] v_3 = \begin{bmatrix} 1 \\ -1 \\ -1 \\ 1 \end{bmatrix} v3= 1111
v 4 = [ − 1 − 1 1 1 ] v_4 = \begin{bmatrix} -1 \\ -1 \\ 1 \\ 1 \end{bmatrix} v4= 1111

请注意,特征值的顺序是按照从小到大排列的。特征向量对应于特征值的顺序,即 v 1 v_1 v1 对应于 λ 1 \lambda_1 λ1 v 2 v_2 v2 对应于 λ 2 \lambda_2 λ2,依此类推。

特征值分解提供了关于矩阵的结构和性质的重要信息。在这个例子中,特征值分解揭示了该网格的特征模式和频率,其中特征值 0 对应于一个常数模式,特征值 1 对应于一个线性模式,特征值 3 和 4 对应于更高频率的模式。特征向量表示了每个特征模式的空间形状。

应用

网格压缩

Spectral Compression of Mesh Geometry

文章概述:
这篇文章主要介绍了一种称为"网格几何谱压缩"的技术,用于对网格几何数据进行压缩。该方法利用了网格的谱性质,并通过保留关键频率分量来实现高效的压缩。作者通过实验证明了该方法在减小网格数据尺寸的同时,能够保持较高的几何质量和视觉效果。

技术要点:

  1. 网格谱性质的利用: 该方法利用了网格的谱性质,即网格的特征向量和特征值之间的关系。通过对网格进行谱分解,可以得到一组特征向量和对应的特征值,这些特征向量表示了网格的几何形状。基于这些特征向量,可以对网格进行重建或者压缩。

  2. 关键频率分量的保留: 为了实现高效的压缩,该方法选择保留网格特征向量中的关键频率分量,即对应于较大特征值的特征向量。这些关键频率分量包含了网格的主要几何信息,而忽略较小特征值对应的特征向量可以有效减小数据尺寸。

  3. 压缩算法: 文章提出了一种基于关键频率分量的压缩算法。该算法首先对网格进行谱分解,然后根据预设的压缩比例选择要保留的特征向量数量。通过仅保留关键频率分量并丢弃其他分量,可以大幅减小数据尺寸。最后,利用保留的特征向量重建原始网格。

相比以前方法的改进:
相较于以前的方法,这篇文章提出的网格几何谱压缩方法具有以下改进:

  1. 高效性: 该方法利用了网格的谱性质,通过保留关键频率分量实现了高效的压缩。相比于传统的方法,该方法可以在减小数据尺寸的同时保持较高的几何质量和视觉效果。
  2. 几何质量的保持: 该方法在压缩过程中,选择保留关键频率分量,这些分量包含了网格的主要几何信息。因此,通过该方法压缩后的网格能够保持较高的几何质量,避免了传统压缩方法可能引入的形变或失真。

文章的不足:
尽管这篇文章提出的网格几何谱压缩方法具有一定的优势,但也存在一些不足之处:

  1. 压缩比例的限制: 该方法在选择要保留的特征向量数量时,依赖于预设的压缩比例。这可能导致在一些情况下,无法达到较高的压缩比例要求。
  2. 计算复杂度: 文章未详细探讨该方法的计算复杂度。由于谱分解等操作可能较为耗时,该方法在大规模网格数据上的计算效率仍然需要进一步研究和改进。

综上所述,这篇文章介绍了一种利用网格谱性质进行几何压缩的方法。相比以前的方法,该方法具有高效性和几何质量保持的优势。然而,仍然存在一些不足,包括压缩比例的限制和计算复杂度方面的待改进之处。

High-Pass Quantization for Mesh Encoding

文章概述:
这篇文章介绍了一种称为"High-Pass Quantization for Mesh Encoding"的方法,用于对网格进行编码和压缩。该方法利用高通滤波器和量化技术,通过保留网格的高频细节信息来实现高效的压缩。作者通过实验证明了该方法在减小网格数据尺寸的同时,能够保持较高的几何质量和视觉效果。

技术要点:

  1. 高通滤波器的应用: 该方法使用高通滤波器对网格进行处理,以保留高频细节信息。高通滤波器可以滤除低频成分,使得编码过程更加集中于网格的细节部分,从而实现更高效的压缩。

  2. 量化技术: 文章采用了一种基于量化的编码策略。通过将高频细节信息进行量化,将连续的浮点数值转换为离散的整数值,从而减小数据的表示和存储开销。同时,为了保持编码的质量,文章提出了一种自适应的量化策略,根据网格的局部特征调整量化的精度。

  3. 编码算法: 文章提出了一种基于高通滤波和量化的编码算法。首先,通过高通滤波器处理网格,提取高频细节信息。然后,对提取的高频细节信息进行自适应量化,得到离散的整数值。最后,将量化后的数据进行编码和压缩,以减小存储空间。

相比以前方法的改进:
相较于以前的方法,这篇文章提出的High-Pass Quantization for Mesh Encoding方法具有以下改进:

  1. 高频细节保留: 传统的网格编码方法通常只关注低频成分,而该方法通过使用高通滤波器,专注于保留高频细节信息。这样可以更好地捕捉网格的细节特征,提高几何质量和视觉效果。

  2. 自适应量化: 文章提出了一种自适应的量化策略,根据网格的局部特征调整量化的精度。这种自适应性可以更好地平衡压缩比和几何质量,提供更好的编码效果。

文章的不足:
尽管该方法在网格编码和压缩方面有一定的优势,但仍存在一些不足之处:

  1. 编码复杂度: 文章未详细探讨该方法的编码复杂度。由于高通滤波和自适应量化等操作的影响,该方法的编码过程可能较为复杂,需要进一步研究和改进。

  2. 压缩率的限制: 该方法主要关注高频细节的保留,而对于低频成分的处理相对较少。这可能导致在一些情况下,无法达到较高的压缩比例要求。

综上所述,这篇文章介绍了一种利用高通滤波器和量化技术进行网格编码和压缩的方法。相比以前的方法,该方法通过保留高频细节信息和自适应量化策略,提高了几何质量和视觉效果。然而,仍然存在一些不足,包括编码复杂度和压缩率的限制,需要进一步研究和改进。

网格平滑

参考文章

图的拉普拉斯矩阵介绍:理解图的拉普拉斯矩阵 - 知乎 (zhihu.com)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DevExpress WinForms数据编辑器组件,提供丰富的数据输入样式!(二)

DevExpress WinForms超过80个高影响力的WinForms编辑器和多用途控件,从屏蔽数据输入和内置数据验证到HTML格式化,DevExpress数据编辑库提供了无与伦比的数据编辑选项,包括用于独立数据编辑或用于容器控件(如Grid, TreeList和Ribbon)的单元格。…

关于slot-scope已经废弃的问题

说起来啊,这个问题啊,我之前一直没关注,还是webstorm给我的警告。 因为使用了element-ui的组件库,所以在使用组件的时候往往就cv大法了,直到今天用webstorm写代码是,提示了如下的错误 我这一看&#xff0c…

Springboot中sharding-jdbc的API模式并使用自定义算法

Springboot中sharding-jdbc的API模式并使用自定义算法 可配合AbstractRoutingData使用切换数据源 程序用到了AbstractRoutingData来切换数据源(数据源是自定义的格式编写并没有用springboot的自动装配的格式写),但是又用到sharding-jdbc进行…

基于微信小程序+Springboot校园二手商城系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、目前专注于大学生项目实战开发,讲解,毕业答疑辅导✌ 🍅文末获取源码联系🍅 👇&#x1f3…

【Java 高阶】一文精通 Spring MVC - 数据格式化器(六)

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

接口经典题目

​ White graces:个人主页 🙉专栏推荐:《Java入门知识》🙉 🙉 内容推荐:继承与组合:代码复用的两种策略🙉 🐹今日诗词:人似秋鸿来有信,事如春梦了无痕。🐹 目录 &…

供应链安全和第三方风险管理:讨论如何应对供应链中的安全风险,以及评估和管理第三方合作伙伴可能带来的威胁

第一章:引言 在当今数字化时代,供应链的安全性越来越受到重视。企业的成功不仅仅依赖于产品和服务的质量,还取决于供应链中的安全性。然而,随着供应链越来越复杂,第三方合作伙伴的参与也带来了一系列安全风险。本文将…

RPC和HTTP协议

RPC 全称(Remote Procedure Call),它是一种针对跨进程或者跨网络节点的应用之间的远程过程调用协议。 它的核心目标是,让开发人员在进行远程方法调用的时候,就像调用本地方法一样,不需要额外为了完成这个交…

[JavaWeb]【十】web后端开发-SpringBootWeb案例(配置文件)

目录 一、参数配置化 1.1 问题分析 1.2 问题解决(application.properties) 1.2.1 application.properties 1.2.2 AliOSSUtils 1.2.3 启动服务-测试 二、yml配置文件 2.1 配置格式 2.1.1 新增 application.yml 2.1.2 启动服务 2.2 XML与prope…

linux 同时kill杀死多进程实践

使用场景 当程序中有使用到多进程且进程数较多的情况,如下图,且需要通过控制台杀死所有的 GSM_run.py 的进程时,利用 kill 命令一个一个的去结束进程是及其耗时且繁琐的,这时就需要我们的kill多进程的命令工作了。 批量 Kill 进程…

【ARM】Day9 cortex-A7核I2C实验(采集温湿度)

1. 2、编写IIC协议,采集温湿度值 iic.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "led.h" /* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_S…

WiFi天线和NB-IoT天线不通用

表面看起来完全一样。但是把WiFi天线插到NB-IoT设备后,信号弱了很多。还导致设备反复重启

轮转数组——C语言

题目: 解法1:把最后一位数字移动到数组的第一位,然后将第二位开始的每一位往前移动一位 这种方法的时间复杂度O(N^2) 空间复杂度O(1) rotate(int* arr, int n, int k) {k % n;int i 0;for (i …

Prompt本质解密及Evaluation实战(一)

一、基于evaluation的prompt使用解析 基于大模型的应用评估与传统应用程序的评估不太一样,特别是基于GPT系列或者生成式语言模型,因为模型生成的内容与传统意义上所说的内容或者标签不太一样。 以下是借用了ChatGPT官方的evaluation指南提出的对结果的具…

Star History 月度开源精选|Llama 2 及周边生态特辑

7 月 18 日,Meta 发布了 Llama,大语言模型 Llama 1 的进阶版,可以自由免费用于研究和商业,支持私有化部署。 所以本期 Star History 的主题是:帮助你快速把 Llama 2 在自己机器上跑起来的开源工具,无论你的…

多环境开发

多环境 1、多环境开发(YAML版) 小结: 多环境开发需要设置若干种常用环境,例如开发、生产、测试环境yaml格式中设置多环境使用—区分环境设置边界每种环境的区别在于加载的配置属性不同启用某种环境时需要指定启动时使用该环境 …

高手进阶之路---pyqt自定义信号

高手进阶之路—pyqt自定义信号 1.思考问题为什么要自定义信号,qt5本身已有信号槽函数 # pushButton 被clicked的时候connect 函数print self.pushButton.clicked.connect(self.print)def print(self):print("我被点击了")或者使用 # 需要引入 pyqtSlo…

使用ffmpeg将WebM文件转换为MP4文件的简单应用程序

tiktok网上下载的short视频是webm格式的,有些程序无法处理该程序,比如roop程序,本文介绍了如何使用wxPython库创建一个简单的GUI应用程序,用于将WebM文件转换为MP4文件。这个应用程序使用Python编写,通过调用FFmpeg命令…

docker: /lib64/libc.so.6: version `GLIBC_2.32‘ not found (required by docker)

Linux环境 Ubuntu 22.04 docker 最新版 jenkins docker 版本(以下版本都会报错 jenkins/jenkins:centos7 jenkins/jenkins:lts-centos7 jenkins/jenkins:ltsdocker-compose.yml配置 version: 3.6 services:gitlab:image: twang2218/gitlab-ce-zhrestart: alwayscontainer_nam…

C#实现简单TCP服务器和客户端网络编程

在C#中进行网络编程涉及许多类和命名空间,用于创建和管理网络连接、传输数据等。下面是一些主要涉及的类和命名空间: System.Net 命名空间:这个命名空间提供了大部分网络编程所需的类,包括: IPAddress:用于…