在线时间 472 小时 最后登录 2025-9-5 注册时间 2023-7-11 听众数 4 收听数 0 能力 0 分 体力 7679 点 威望 0 点 阅读权限 255 积分 2884 相册 0 日志 0 记录 0 帖子 1161 主题 1176 精华 0 分享 0 好友 1
该用户从未签到
数据集:任意选择一组图片。
* T M9 w# K0 z: z4 q6 x: l; \ 任务:使用PCA对图片进行压缩和重构。, ^2 P$ u$ Z( q
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
8 s* Z3 ]9 L$ C/ z' t3 ` 使用PCA进行图像压缩和重构
' t* A8 ~" i4 S 假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。! \( m L6 B7 f. a0 W
6 g% \! \' r& \, @7 r( B
以下是使用PCA对单张图片进行压缩和重构的步骤:8 j8 k* X0 b* T# r4 W$ z1 A$ [
/ m! S7 r+ `' V" m. \1 f0 i" \
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。) }& F: e" S" N9 M! \' H/ M
0 j# }- m6 v/ Z3 F 应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
`; a) b8 e/ b
+ ]$ G9 R: Q( v/ ^8 P9 N 重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。import numpy as np
N+ n8 \6 L0 t0 c from sklearn.decomposition import PCA# V7 |; g. E6 C4 c\" H5 v
import matplotlib.pyplot as plt
0 m1 `) [. n\" Y7 J$ p! A from PIL import Image6 C9 r2 N5 Y, Y2 j5 O' `- D5 m: X
1 N/ _$ z9 [1 j: ?: r; ^
# 加载图片并转换为灰度图# c# w& U2 N& r5 x' p
image_path = 'path_to_your_image.jpg'2 k8 N, z# M7 N2 P
image = Image.open(image_path).convert('L')! G# h* C, {# T% G+ |
image_array = np.array(image)
& X& M h4 p, e1 T ' s0 R2 {5 i5 ?$ s( F$ I
# 展平图像数组# D( y- E, O* g2 Z, K6 \
h, w = image_array.shape\" z. V6 [ h2 V* H1 ^5 k3 U3 A; f$ y
image_flattened = image_array.flatten().reshape(1, h * w)
# K) L! B* D- K8 M; f) ]- m\" r3 c\" N9 D # y3 ^\" L8 A4 N/ H- J
# 应用PCA
* e* K9 q2 K5 b/ v2 g8 i: L3 ?\" s n_components = 100 # 选择保留的主成分数量 l5 V$ R1 |) `& T
pca = PCA(n_components=n_components)\" {( [' x+ o0 @& T0 {6 Y
image_compressed = pca.fit_transform(image_flattened)% o. G1 l, F3 L\" j
$ _; H, d. g- q, e
# 重构图像
+ w }+ @/ F0 M. r image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
5 }+ Q3 a: W, D\" h 8 r4 v+ D( ~. q4 S$ h; g
# 显示原始和重构的图像/ Z7 g\" h0 ?* _! }* F M/ e
plt.figure(figsize=(10, 5))% k\" h6 Y. J$ ]+ W9 g) U: ~
plt.subplot(1, 2, 1); H. O6 v& t/ \
plt.imshow(image_array, cmap='gray')$ c- L& c3 ?4 G$ S2 `) \5 e
plt.title('Original Image'): T! F6 L3 x. n3 K- y, z/ R8 G
plt.subplot(1, 2, 2)2 O' a- ? L\" P
plt.imshow(image_reconstructed, cmap='gray')1 A5 H4 v1 {\" S; @2 U\" |* Y! }
plt.title('Reconstructed Image')
1 f9 L6 t0 ^0 b2 b6 m1 J plt.show() 复制代码 分析压缩比例与图像质量之间的关系; {" l0 \1 H( m
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。5 e- y/ l. }5 m( ?# O
6 N+ [# }( S# | 尝试其他降维技术
4 e9 k: w) U5 u/ u0 X 除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
( i \/ p& L( O' M
7 x; O% S% Z: g5 D) x1 j' e8 x 随机投影(sklearn.random_projection)
8 \& D) D3 f4 X' q6 ]) i% r f 非负矩阵分解(NMF,sklearn.decomposition.NMF)8 a5 b& R4 ]7 _3 o+ x+ O/ w# d
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
2 e' s. I1 r2 T
$ x8 Z+ Q2 Z: l9 h. ^; {# _& ^
N! Q8 Q; R* y" l6 r( e: s 0 L. u2 H5 C- b9 H. T! O9 V7 C
zan