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