这段代码的功能是利用主成分分析 (PCA) 对图像进行降维和重构,并观察选取不同数量的主成分后图像的重构效果。

代码解读如下:

  1. 导入所需的库:

    • scipy.io:用于导入和导出数据
    • numpy:用于数值计算和数组操作
    • matplotlib.pyplot:用于绘图和可视化
  2. 调整图像的主成分数量:

    • component_number = 10:将主成分数量设为 10,可以根据需要调整该值。
  3. 导入数据:

    • 使用 scipy.io.loadmat 函数从 ORL_32x32.mat 文件中导入数据,存储在变量 data 中。
    • 通过 data['X'] 获取图像数据,存储在变量 X 中。
  4. 进行主成分分析:

    • 调用自定义的 PCA 函数,传入图像数据 X 和主成分数量 component_number,得到降维后的重构矩阵,存储在变量 W 中。
  5. 可视化重构效果:

    • 选取一个样本图像,将其转换为二维数组的形式,存储在变量 X1 中。
    • 使用 plt.imshow 函数绘制原始图像,并设置参数 cmap='gray' 来显示灰度图像。
    • 使用 plt.axis('off') 函数取消坐标轴显示。
    • 使用 plt.title 函数设置标题为 '原始图像',并设置字体大小为 20。
    • 使用 plt.savefig 函数保存图像到文件 '原始图像.jpg'。
    • 使用 plt.pause(3) 函数暂停 3 秒钟。
    • 使用 plt.clf() 函数清除当前图像。
    • 使用 plt.ioff() 函数关闭交互式模式。
  6. 对图像进行重构:

    • 使用重构矩阵 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录