特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩
特征值分解(EVD)和奇异值分解(SVD)—应用于图片压缩
特征值分解(EVD)和奇异值分解(SVD)是线性代数中重要的矩阵分解方法,它们在图片压缩领域有着广泛的应用。本文将详细介绍这两种方法的基本原理,并通过实验展示它们在图片压缩中的效果。
一、特征值分解
特征值分解英文缩写为EVD,全称为eigenvalue decomposition。假设一个向量 $\mathbf{v}$ 是 $m \times m$ 阶方阵 $\mathbf{A}$ 的特征向量,那么一定可以表示成下面的形式:
$$
\mathbf{A}\mathbf{v} = \lambda\mathbf{v}
$$
其中,$\lambda$ 是特征值。这种形式在数学上的含义是描述矩阵对向量的变换效果只有拉伸,没有旋转。特征值分解可以表示为:
$$
\mathbf{A} = \mathbf{Q}\mathbf{\Lambda}\mathbf{Q}^{-1}
$$
其中,$\mathbf{Q}$ 是特征向量矩阵,$\mathbf{\Lambda}$ 是特征值矩阵。
应用特征值分解对图片进行压缩
假设原图大小为 $m \times m$,保留前 $k$ 个特征值需要存储的点数为 $m \times k + k + k \times m$,定义压缩率为:
$$
r = \frac{m \times k + k + k \times m}{m \times m}
$$
下面是一张大小为 $1024 \times 1024$ 的图片:
保留不同数量的特征值得到的压缩效果如下:
- 保留前10个特征值(压缩率为0.0196):
- 保留前100个特征值(压缩率为0.2048):
- 保留前200个特征值(压缩率为0.4288):
- 保留前500个特征值(压缩率为1.2150):
- 保留前988个特征值(压缩率为2.8606):
总结:这张原始图片的秩为988,发现保留前988个特征值就能完全恢复原图像,但是会发现保留特征值个数太多,其实并没有起到压缩的作用。因此特征值分解的确能压缩图片,但是恢复的效果不是很好,而且仅仅适用于方阵。所以接下来继续介绍矩阵的奇异值分解。
三、矩阵的奇异值分解
奇异值分解英文缩写为SVD,全称为singular value decomposition。对于任意一个 $m \times n$ 阶矩阵 $\mathbf{A}$,我们都可以将它分解为:
$$
\mathbf{A} = \mathbf{U}\mathbf{\Sigma}\mathbf{V}^T
$$
其中 $\mathbf{U}$ 和 $\mathbf{V}$ 是正交矩阵,$\mathbf{\Sigma}$ 是对角矩阵,其主对角线上的每个值我们称为奇异值。
具体原理推导可以参考文章:奇异值分解(SVD分解)———超详细讲解-CSDN博客
本文重在应用。
应用奇异值分解对图片进行压缩
假设原图大小为 $m \times n$,保留前 $k$ 个奇异值需要存储的点数为 $m \times k + k + k \times n$,定义压缩率为:
$$
r = \frac{m \times k + k + k \times n}{m \times n}
$$
还是刚才那张大小为 $1024 \times 1024$ 大小的图片。
保留不同数量的奇异值得到的压缩效果如下:
- 保留前10个奇异值(压缩率为0.0195):
- 保留前100个奇异值(压缩率为0.1954):
- 保留前200个奇异值(压缩率为0.3908):
- 保留前300个奇异值(压缩率为0.5862):
总结:可以看出奇异值分解的效果比特征值分解好的多,能在起到压缩大小的情况下还能比较好的保留原图像的效果。
五、MATLAB仿真代码
感兴趣的读者可以访问以下链接获取MATLAB仿真代码: