图像去噪与PCA重建

图像处理领域,去噪是一个重要的任务,它旨在从含有噪声的图像中恢复出原始的、清晰的图像。本文将介绍如何利用主成分分析(PCA)和核PCA(Kernel PCA)对USPS数字数据集中的图像进行去噪和重建。将通过比较PCA和核PCA的结果,来展示它们在去噪和图像重建方面的效果。

数据集加载与预处理

首先,需要加载USPS数字数据集。这个数据集可以通过OpenML平台获取。为了使像素值位于(0, 1)的范围内,使用MinMaxScaler对数据进行了归一化处理。

from sklearn.datasets import fetch_openml from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler # 加载数据集 X, y = fetch_openml(data_id=41082, as_frame=False, return_X_y=True) # 数据归一化 scaler = MinMaxScaler() X = scaler.fit_transform(X)

接下来,将数据集分为训练集和测试集,其中训练集包含1000个样本,测试集包含100个样本。这些图像是无噪声的,将用它们来评估去噪方法的有效性。此外,还在原始数据集的副本上添加了高斯噪声,以模拟实际的噪声情况。

PCA与核PCA模型训练

将在有噪声的图像上学习PCA基和核PCA基,然后使用这些模型来重建和去噪图像。这里,使用线性PCA和使用径向基函数(RBF)核的核PCA。

from sklearn.decomposition import PCA, KernelPCA # 初始化PCA和核PCA模型 pca = PCA(n_components=32, random_state=42) kernel_pca = KernelPCA(n_components=400, kernel='rbf', gamma=1e-3, fit_inverse_transform=True, alpha=5e-3, random_state=42) # 训练模型 pca.fit(X_train_noisy) kernel_pca.fit(X_train_noisy)

在模型训练完成后,可以将噪声测试集转换并重建。由于使用的组件数量少于原始特征的数量,将得到原始集合的一个近似。通过在PCA中丢弃解释方差最小的组件,希望能够去除噪声。在核PCA中,期望得到更好的重建效果,因为使用非线性核来学习PCA基和映射函数。

图像重建与去噪效果评估

将使用均方误差(MSE)来定量评估图像重建的效果。首先,通过绘制测试图像来定性地评估图像重建。

import matplotlib.pyplot as plt def plot_digits(X, title): ""“辅助函数,用于绘制100个数字。”"" fig, axs = plt.subplots(nrows=10, ncols=10, figsize=(8, 8)) for img, ax in zip(X, axs.ravel()): ax.imshow(img.reshape((16, 16)), cmap="Greys") ax.axis("off") fig.suptitle(title, fontsize=24) # 绘制无噪声和有噪声的测试图像 plot_digits(X_test, "无噪声测试图像") plot_digits(X_test_noisy, f"有噪声测试图像\nMSE: {np.mean((X_test - X_test_noisy) ** 2):.2f}")

接下来,使用PCA和核PCA模型对有噪声的测试集进行重建,并评估重建效果。

# 重建图像 X_reconstructed_kernel_pca = kernel_pca.inverse_transform(kernel_pca.transform(X_test_noisy)) X_reconstructed_pca = pca.inverse_transform(pca.transform(X_test_noisy)) # 绘制重建图像 plot_digits(X_test, "无噪声测试图像") plot_digits(X_reconstructed_pca, f"PCA重建\nMSE: {np.mean((X_test - X_reconstructed_pca) ** 2):.2f}") plot_digits(X_reconstructed_kernel_pca, f"核PCA重建\nMSE: {np.mean((X_test - X_reconstructed_kernel_pca) ** 2):.2f}")

从结果可以看出,PCA的MSE值低于核PCA,但从定性分析来看,核PCA在去除背景噪声和提供更平滑的图像方面可能更胜一筹。然而,需要注意的是,核PCA的去噪效果将取决于参数n_components、gamma和alpha的选择。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485