本文主要是介绍特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩
目录
前言
一、特征值分解
二、应用特征值分解对图片进行压缩
三、矩阵的奇异值分解
四、应用奇异值分解对图片进行压缩
五、MATLAB仿真代码
前言
学习了特征值分解和奇异值分解相关知识,发现其可以用于图片压缩,但网上没有找到相应代码,本文在学习了之后编写出了图片压缩的代码,发现奇异值分解的效果要远好于特征值分解,本文在此简要记录一下。
提示:以下是本篇文章正文内容,欢迎各位阅读,转载请附上链接。
一、特征值分解
特征值分解英文缩写为EVD,全称为eigenvalue decomposition。
如果说一个向量是m×m阶方阵的特征向量,将一定可以表示成下面的形式:
这种形式在数学上的含义:描述的是矩阵对向量的变换效果只有拉伸,没有旋转。(因为这个值是一个数值),这时候就被称为特征向量对应的特征值。
那么方阵可以表示成
即
那么就可以得到方阵的特征分解公式:
总结:特征分解,可以得到个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阶矩阵,我们都可以将它分解为
其中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/89724139https://download.csdn.net/download/m0_66360845/89724139
这篇关于特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!