- 在线时间
- 479 小时
- 最后登录
- 2026-4-17
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7790 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2923
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。$ s4 J. [) q4 W. |0 _- U8 w: ?
任务:使用PCA对图片进行压缩和重构。
' v! ]- P& B/ E, T" {挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。8 v: ?2 l4 l' E0 I: w
使用PCA进行图像压缩和重构
' D: e, z) D! [' t6 L5 v假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
- f- w X% B9 v7 Z( I8 v
( X! B4 c$ @2 P/ [& I7 U, X- y以下是使用PCA对单张图片进行压缩和重构的步骤:3 D2 G( Y9 J. |- D+ x3 v8 c
7 N2 B$ @3 J& a) [% f( X6 ?
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
: f1 V* Z3 v! p3 N! `! N
' ] x- ?$ _5 q/ B0 S6 R9 l6 t# _应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。5 Y7 v, x$ x; u" } B# V
1 B6 W5 K) j& a0 L6 W7 r4 v2 J
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np8 A/ c; @+ k; v: x: \& N
- from sklearn.decomposition import PCA- v& u7 @; T5 c$ W6 C& o2 A
- import matplotlib.pyplot as plt
0 g/ J9 |7 v+ K% S+ [0 z- Z7 Z - from PIL import Image
( F, l g3 v E# Y& i -
- Q* n: `9 L& b9 _+ I* O\" a - # 加载图片并转换为灰度图
% l9 r\" {8 B; k' L- U% {* q - image_path = 'path_to_your_image.jpg' R3 k& X* [0 b- _ ~9 |) I
- image = Image.open(image_path).convert('L')
\" \% x/ Q8 I! }- ^ - image_array = np.array(image)
4 P# Z; M: V: F( J) ^- ` -
, i. q$ R# l8 d8 j8 ?( P. g) d5 T - # 展平图像数组
9 A# h) a7 r9 P8 \, ?, M1 J, D - h, w = image_array.shape
! `; ]# c/ ], i0 @ - image_flattened = image_array.flatten().reshape(1, h * w). u. k) F# r6 q) N9 K+ m\" E$ B! Z2 r5 k& b
-
% h1 \, M3 I# N% h2 t - # 应用PCA0 Z7 V2 |3 }$ r W e
- n_components = 100 # 选择保留的主成分数量\" D( M\" g. g* j9 C4 v# D @1 P$ e. x
- pca = PCA(n_components=n_components)3 N. l E8 i, w
- image_compressed = pca.fit_transform(image_flattened)
c: I+ p( `) U - & ]3 s( ?% W, ^3 a, ?
- # 重构图像
+ E$ |. ~7 B9 j% {. g9 ]7 E. ^ - image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
; |! F6 v# X1 A7 v5 t5 Q1 S - / j% j\" i* m6 t/ k9 N! ^, J+ W
- # 显示原始和重构的图像 T2 K$ i( V( ]5 A% L5 P- L H
- plt.figure(figsize=(10, 5))
% J* ~% c' }3 |* D* m6 Z, P | - plt.subplot(1, 2, 1)' U# s& z/ e- q; V6 j1 }% {4 q& `/ i
- plt.imshow(image_array, cmap='gray')
3 M2 X( j2 f1 E- ?+ `7 J - plt.title('Original Image')
@) Z- q& ]& q% j6 B - plt.subplot(1, 2, 2)
# D) a1 D! ^1 Q( I8 g/ p - plt.imshow(image_reconstructed, cmap='gray')% r- `1 L! P' V/ K
- plt.title('Reconstructed Image')
b: p; S\" C; P+ W( v- `# O! m: H\" V - plt.show()
复制代码 分析压缩比例与图像质量之间的关系& D) N/ n* Z, h4 i3 _5 x$ @
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。2 n1 K C5 C/ C$ ?9 i
$ m9 u0 h0 P" p8 e2 e尝试其他降维技术
. I$ ?! |% s1 \( V除了PCA之外,还有其他降维技术可以用于图像压缩,例如:( m# K* J2 ]" _1 f* s4 z& q
) X! J+ C3 T) j! N
随机投影(sklearn.random_projection)8 T% P3 ]1 O% U) [' K" {: n
非负矩阵分解(NMF,sklearn.decomposition.NMF)9 I4 ]) M+ j5 Q8 H" p0 v' j
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。 J4 |7 E: Z( x2 r0 {. u
! h4 G- r, ?: y' H
! ?5 v& S2 |7 L- f
9 ?8 k: u" u) G0 i |
zan
|