特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩

2024-09-08 01:04

本文主要是介绍特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩

目录

前言

一、特征值分解

二、应用特征值分解对图片进行压缩

三、矩阵的奇异值分解

四、应用奇异值分解对图片进行压缩

五、MATLAB仿真代码


前言

        学习了特征值分解和奇异值分解相关知识,发现其可以用于图片压缩,但网上没有找到相应代码,本文在学习了之后编写出了图片压缩的代码,发现奇异值分解的效果要远好于特征值分解,本文在此简要记录一下。


提示:以下是本篇文章正文内容,欢迎各位阅读,转载请附上链接。

一、特征值分解

特征值分解英文缩写为EVD,全称为eigenvalue decomposition。

如果说一个向量\textbf{v}是m×m阶方阵\textbf{A}的特征向量,将一定可以表示成下面的形式:

\textbf{A}\textbf{v}=\lambda \textbf{v}

这种形式在数学上的含义:描述的是矩阵对向量的变换效果只有拉伸,没有旋转。(因为这个值是一个数值),这时候就被称为特征向量对应的特征值。

那么方阵\textbf{A}可以表示成

\textbf{A}=(\lambda_1\textbf{v}_1,\lambda_2\textbf{v}_2,\ldots,\lambda_m\textbf{v}_m)=(\textbf{v}_1,\textbf{v}_2,\ldots,\textbf{v}_m)\begin{bmatrix}\lambda_1&\ldots&0\\\vdots&\ddots&\vdots\\0&\ldots&\lambda_m\end{bmatrix}

\textbf{AV}=\textbf{V}\Lambda

那么就可以得到方阵\textbf{A}的特征分解公式:

\textbf{A}=\textbf{V}\Lambda \textbf{V}^{-1}

总结:特征分解,可以得到个m特征向量和特征值,利用这m个特征(代表这个矩阵最重要的特征),就可以近似这个矩阵。

二、应用特征值分解对图片进行压缩

假设原图大小为m×m,保留前k个特征值需要存储的点数为m×k+k+k×m,定义压缩率为:

r=(m×k+k+k×m)/(m×m)。

下面是一张大小为1024×1024大小的图片。

保留前10个特征值(压缩率为0.0196)可得到下图:

保留前100个特征值(压缩率为0.2048)可得到下图:

保留前200个特征值(压缩率为0.4288)可得到下图:

保留前500个特征值(压缩率为1.2150)可得到下图:

保留前988个特征值(压缩率为2.8606)可得到下图:

总结:这张原始图片的秩为988,发现保留前988个特征值就能完全恢复原图像,但是会发现保留特征值个数太多,其实并没有起到压缩的作用。因此特征值分解的确能压缩图片,但是恢复的效果不是很好,而且仅仅适用于方阵。所以接下来继续介绍矩阵的奇异值分解。

三、矩阵的奇异值分解

奇异值分解英文缩写为SVD,全称为singular value decomposition。

先上结论:对于任意一个矩阵m×n阶矩阵\textbf{A},我们都可以将它分解为

\textbf{A}=\textbf{U}\sum \textbf{V}^{T}

其中U,V是正交矩阵,∑是对角矩阵,其主对角线上的每个值我们称为奇异值。

具体原理推导可以参考文章:奇异值分解(SVD分解)———超详细讲解-CSDN博客

本文重在应用。

四、应用奇异值分解对图片进行压缩

假设原图大小为m×n,保留前k个奇异值需要存储的点数为m×k+k+k×n,定义压缩率为:

r=(m×k+k+k×n)/(m×n)。

还是刚才那张大小为1024×1024大小的图片。

保留前10个奇异值(压缩率为0.0195)可得到下图:

保留前100个奇异值(压缩率为0.1954)可得到下图:

保留前200个奇异值(压缩率为0.3908)可得到下图:

保留前300个奇异值(压缩率为0.5862)可得到下图:

总结:可以看出奇异值分解的效果比特征值分解好的多,能在起到压缩大小的情况下还能比较好的保留原图像的效果。

五、MATLAB仿真代码

https://download.csdn.net/download/m0_66360845/89724139icon-default.png?t=O83Ahttps://download.csdn.net/download/m0_66360845/89724139

这篇关于特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146671

相关文章

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验