用Python 基于PCA实现1张图片压缩,并保存压缩后的图像的代码
时间: 2024-05-09 12:17:44 浏览: 88
使用主成分分析 (PCA) 算法 重建和压缩彩色 图像_Python_代码_下载
5星 · 资源好评率100%
很高兴回答你的问题!以下是基于Python实现PCA压缩图像并保存的代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
# 加载原图像
img = Image.open('input.jpg')
# 利用numpy将图像转换为矩阵
img_data = np.array(img)
# 将图像矩阵展成向量
rows, cols, dims = img_data.shape
img_vector = np.reshape(img_data, (rows*cols, dims))
# PCA降维
mean = np.mean(img_vector, axis=0)
img_vector -= mean
cov = np.cov(img_vector, rowvar=False)
eigvals, eigvecs = np.linalg.eig(cov)
idx = eigvals.argsort()[::-1]
eigvecs = eigvecs[:, idx]
k = 400 # 设置降维的维数
eigvecs_k = eigvecs[:, :k]
img_vector = np.dot(img_vector, eigvecs_k)
# 反向投影到原空间
img_vector = np.dot(img_vector, eigvecs_k.T) + mean
# 将图像向量转换为图像矩阵
img_data = np.reshape(img_vector, (rows, cols, dims))
# 将图像矩阵转换为图像并保存
img = Image.fromarray(img_data.astype(np.uint8))
img.save('output.jpg')
```
这段代码可以将输入的图片进行PCA降维压缩,设置降维的维数为k,压缩后得到的图像将保存在output.jpg中。需要注意的是,由于 PCA 压缩是有损压缩,压缩后的图像往往会有一定的失真。
阅读全文