完整教程:【图像处理基石】PCA图像压缩与还原:基于OpenCV的Lena图实验

在这里插入图片描述

算法原理介绍

PCA(主成分分析)是一种常用的降维手艺,其核心思想是通过线性变换将高维数据映射到低维空间,同时保留资料中最主要的信息。在图像压缩中,PCA的工作原理如下:

  1. 数据表示:将图像视为像素值矩阵,对于灰度图可表示为二维矩阵,彩色图则为三维张量
  2. 中心化:对图像资料进行中心化处理(减去均值)
  3. 协方差矩阵:计算数据的协方差矩阵,反映像素间的相关性
  4. 特征值分解:对协方差矩阵进行特征值分解,得到特征值和特征向量
  5. 主成分选择:选择特征值最大的前k个特征向量作为主成分
  6. 降维映射:将原始数据投影到选定的主成分上,得到低维表示(压缩)
  7. 重构还原:使用低维表示和主成分重构原始数据(还原)

压缩率取决于选择的主成分数量k,k越小压缩率越高,但图像质量可能下降。

代码实现与解释

下面是使用PCA对Lena图像进行压缩与还原的完整代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
def 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]
posted @ 2025-08-18 15:51  yjbjingcha  阅读(105)  评论(0)    收藏  举报