基于PCA的图像压缩实现
注:该内容为校内课程实验,仅供参考,请勿抄袭!
源码:PPCA-for-Image-Compession
摘要
随着计算机互联网的发展和数据的日益增长,如何高效的处理和传输海量数据成为大数据处理的瓶颈问题,尤其对于图像类数据,通常其占有空间大,包含信息量丰富,如何对图像数据进行压缩吸引广大研究者们的注意。本文通过调研PCA图像压缩的相关工作,认为当前方法依赖于整个数据集,压缩效率低、占据内存量大的问题,本文提出一种分片PCA(P-PCA)图像压缩算法,旨在通过对图像进行分片,并在每个分片上单独进行压缩。该方法既可以单独对一张图像进行压缩,且在较低的压缩率下依然保持很好的恢复效果。在NWPU VHR-10数据集上实验表明,我们的方法相比基线模型在压缩率、MSE、PSNR和SSIM指标上均达到最好效果。
PCA降维理论
主成成分分析用于对大规模数据进行降维的方法,其核心思路是考察样本或属性之间的相关性并进行空间变换,其秉持基本原则是最小化压缩率(或最小化MSE、最小化矩阵的秩),且保证压缩后的每个样本或属性至今线性不相关。直观理解则是选择方差较大的维度,因为方差越大包含的分布信息越明显,而方差越小,所有样本几乎聚集在一块,所以包含的分布信息很少。PCA理论则建立在上述描述的基础上,通过拉格朗日乘法推导而成,给出计算方法:
给定矩阵 X ∈ R m × n X\in\mathbb{R}^{m\times n} X∈Rm×n ,其中 m m m 和 n n n 分别表示矩阵的行列数。定义一个矩阵 X ˉ ∈ R m × n \bar{X}\in\mathbb{R}^{m\times n} Xˉ∈Rm×n 表示的均值:
则可以得到中心化矩阵 X − X ˉ X-\bar{X} X−Xˉ。根据协方差定义,可以得出该矩阵的协方差矩阵,记做:
其中:
因为 C X C^{X} CX 是实值方阵,因此存在 m m m 个特征向量和特征值,即:
因此可以得到由特征向量组成的特征矩阵,记做 V = [ v 1 , v 2 , . . . , v m ] T ∈ R m × n V=[v_1, v_2, ..., v_m]^{\mathbb{T}}\in\mathbb{R}^{m\times n} V=[v1,v2,...,vm]T∈Rm×n。
特征矩阵的功能则是空间变换,即给定一个输入矩阵或向量,通过该特征矩阵可以变换到另一个特征空间,因此我们需要使用对输入矩阵进行变换,即:
在PCA中,首先根据特征值降序对特征向量排序,并挑选前 k k k 个特征向量,此时 k k k 可以满足 ∑ i = 1 k λ t 2 / ∑ i = 1 m λ t 2 ≥ θ 0 \sum_{i=1}^{k}\lambda^{2}_{t}/\sum_{i=1}^{m}\lambda^{2}_{t}\geq\theta_0 ∑i=1kλt2/∑i=1mλt2≥θ0。则组成的特征矩阵变为:
则有:
因此我们可以得到压缩后的可保存数据 X ˉ \bar{X} Xˉ, Y k Y_k Yk和 V k V_k Vk。这三个矩阵可以通过(6)式恢复原始矩阵。因为 X X X与 X ^ \hat{X} X^不完全一样,因此称PCA是一种有损压缩。
PCA图像压缩
为了改进传统PCA图像压缩方法的缺陷,本文提出一种分片PCA图像压缩算法,旨在对单独对图像进行压缩,从而使得图像压缩过程中不依赖于其他图像,且适用于任意灰度或彩色图像。下面给出具体的实现细节
为了使得算法可以同时对灰度与彩色图像进行处理,首先进行图像标准化。考虑到不同图像可能拥有不同的尺寸,因此首先对图像的尺寸进行标准化,规范到相同尺寸,形成统一格式的图像数据集,记做 I = { I 1 , I 2 , . . . , I N } ∈ R N × m × n × d I=\{I_1,I_2,...,I_N\}\in\mathbb{R}^{N\times m\times n\times d} I={I1,I2,...,IN}∈RN×m×n×d ,其中 N , m , n , d N,m,n,d N,m,n,d 分别表示图像的数量、宽、高和通道数, d ∈ { 1 , 3 } d\in\{1, 3\} d∈{1,3}。考虑对于一张图像 I t I_t It,将其按照通道数展开为 d d d 个 m × n m\times n m×n 矩阵,并按列拼接为一个 m × ( n d ) m\times(nd) m×(nd) 的矩阵,记做 X X X。
对于一张图像,由于不同区域内的信息之间会有一定的相关性,如图1和2所示。图1是原始的彩色图像,其来自卫星拍摄的机场俯视图,我们发现对于局部的区域的像素之间往往存在一定的相关性。例如如果对图像按照行进行划分,可以划分为多个分片,而每个分片由于区域缩小,可以形成局部区域的相关性。图2展示了原始图像的一个分片(蓝色区域),在这个分片内有诸多像素之间存在相关性,例如两个红色的平行四边形对应的分别是跑到和草坪,其所处的像素通常相关性很高,因此如果对局部的分片进行压缩。相比之前的2DPCA等直接对图像整体进行压缩的方法,分片后可以使得PCA仅需要关注该分片内的信息,而不会受到其他分片信息的干扰,从而可以有效的降低压缩率。
本文提出一种PCA算法,旨在实现对图像进行分段,算法流程图如下所示:
评价指标
(1)MSE:
(2)PSNR
(3)SSIM
(4)压缩率
实验结果
(1)不同算法在不同阈值条件下压缩效果比较
(2)P-PCA算法下不同压缩率对应的某一张图像还原图像比较