【图像处理基石】PCA图像压缩与还原:基于OpenCV的Lena图实验
算法原理介绍
PCA(主成分分析)是一种常用的降维技术,其核心思想是通过线性变换将高维数据映射到低维空间,同时保留数据中最主要的信息。在图像压缩中,PCA的工作原理如下:
- 数据表示:将图像视为像素值矩阵,对于灰度图可表示为二维矩阵,彩色图则为三维张量
- 中心化:对图像数据进行中心化处理(减去均值)
- 协方差矩阵:计算数据的协方差矩阵,反映像素间的相关性
- 特征值分解:对协方差矩阵进行特征值分解,得到特征值和特征向量
- 主成分选择:选择特征值最大的前k个特征向量作为主成分
- 降维映射:将原始数据投影到选定的主成分上,得到低维表示(压缩)
- 重构还原:使用低维表示和主成分重构原始数据(还原)
压缩率取决于选择的主成分数量k,k越小压缩率越高,但图像质量可能下降。
代码实现与解释
下面是使用PCA对Lena图像进行压缩与还原的完整代码:
import cv2
import numpy as np
import matplotlib.pyplot as pltdef pca_compress(image, k):"""使用PCA压缩图像:param image: 输入灰度图像 (H, W):param k: 保留的主成分数量:return: 压缩后的图像、投影矩阵、均值"""# 获取图像尺寸h, w = image.shape# 将图像转换为浮点型并展平image_flat = image.astype(np.float32).reshape(h, w)# 计算均值并中心化mean = np.mean(image_flat, axis=0)image_centered = image_flat - mean# 计算协方差矩阵cov_matrix = np.cov(image_centered, rowvar=False)# 计算特征值和特征向量eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix)# 按特征值降序排序sorted_indices = np.argsort(eigenvalues)[::-1]sorted_eigenvectors = eigenvectors[:, sorted_indices]