Python 主成分分析 (PCA) 图像降维与重构 - 代码详解
这段代码的功能是利用主成分分析 (PCA) 对图像进行降维和重构,并观察选取不同数量的主成分后图像的重构效果。
代码解读如下:
-
导入所需的库:
scipy.io:用于导入和导出数据numpy:用于数值计算和数组操作matplotlib.pyplot:用于绘图和可视化
-
调整图像的主成分数量:
component_number = 10:将主成分数量设为 10,可以根据需要调整该值。
-
导入数据:
- 使用
scipy.io.loadmat函数从ORL_32x32.mat文件中导入数据,存储在变量data中。 - 通过
data['X']获取图像数据,存储在变量X中。
- 使用
-
进行主成分分析:
- 调用自定义的
PCA函数,传入图像数据X和主成分数量component_number,得到降维后的重构矩阵,存储在变量W中。
- 调用自定义的
-
可视化重构效果:
- 选取一个样本图像,将其转换为二维数组的形式,存储在变量
X1中。 - 使用
plt.imshow函数绘制原始图像,并设置参数cmap='gray'来显示灰度图像。 - 使用
plt.axis('off')函数取消坐标轴显示。 - 使用
plt.title函数设置标题为 '原始图像',并设置字体大小为 20。 - 使用
plt.savefig函数保存图像到文件 '原始图像.jpg'。 - 使用
plt.pause(3)函数暂停 3 秒钟。 - 使用
plt.clf()函数清除当前图像。 - 使用
plt.ioff()函数关闭交互式模式。
- 选取一个样本图像,将其转换为二维数组的形式,存储在变量
-
对图像进行重构:
- 使用重构矩阵
W对选取的样本图像进行重构,得到重构后的图像,存储在变量X2中。 - 使用
plt.imshow函数绘制重构后的图像,并设置参数cmap='gray'来显示灰度图像。 - 使用
plt.axis('off')函数取消坐标轴显示。 - 使用
plt.title函数设置标题为 '基于 X 个主成分的重构结果',并设置字体大小为 20,其中 X 为component_number的值。 - 使用
plt.savefig函数保存图像到文件 '基于 X 个主成分的重构结果.jpg'。 - 使用
plt.pause(5)函数暂停 5 秒钟。 - 使用
plt.clf()函数清除当前图像。 - 使用
plt.ioff()函数关闭交互式模式。
- 使用重构矩阵
代码示例
import scipy.io as sio
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
from PCA import PCA
####### 需要你完成: #######
# 1. 调整主成分数量,观察选取不同数量的主成分后,图像的重构表现
component_number = 10
##########################
## 导入数据
data = sio.loadmat('ORL_32x32.mat')
X = data['X']
## 对数进行主成分分析
W = PCA(X, component_number)
## 选取一个样本,使用学得的重构矩阵W来可视化其重建效果
X1 = X[79, :].reshape((32, 32)).T
# 展示原始图像
plt.imshow(X1, cmap='gray')
plt.axis('off')
plt.title('原始图像', fontsize=20)
plt.savefig('原始图像.jpg')
plt.pause(3)
plt.clf()
plt.ioff()
# 对图像重构
X2 = (X[79, :] @ W @ W.T).astype(float)
X2 = X2.reshape((32, 32)).T
plt.imshow(X2, cmap='gray')
plt.axis('off')
plt.title('基于' + str(component_number) + '个主成分的重构结果', fontsize=20)
plt.savefig('基于' + str(component_number) + '个主成分的重构结果.jpg')
plt.pause(5)
plt.clf()
plt.ioff()
原文地址: https://www.cveoy.top/t/topic/l1RC 著作权归作者所有。请勿转载和采集!