- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。5 X% f. s. U5 M5 x$ {. Q/ i) h
任务:使用PCA对图片进行压缩和重构。+ e# K# k% V9 Z0 U5 w
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
1 F& ], j/ }4 J0 ?" ~使用PCA进行图像压缩和重构+ } l0 |9 ~, \5 x1 q/ P( ^) P9 H
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
" p8 u/ \" L. b3 ?# w0 j
- z# \) i( M# U$ H# j! `" b以下是使用PCA对单张图片进行压缩和重构的步骤:
; j( A& \: P- m0 T8 A) X. J! [& Z5 N; a' }0 a6 }$ c/ A
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
4 E5 M( k$ P' S. V* N. [
* R' ^8 w9 U+ _! K) r. f! P s+ o$ Q应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。9 O1 F- R" b( f- D B8 z
; {. O+ A+ e, x7 F. l重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np0 y& ~$ U, K6 e8 B, W1 ]7 v
- from sklearn.decomposition import PCA
; J( J\" \: o: \4 N# B6 P - import matplotlib.pyplot as plt$ p& L7 x: j& ^) ^8 J( q' y# d$ k c
- from PIL import Image4 p5 h' _3 Q3 B0 q9 T
-
: m4 |$ d2 |3 |$ ~; Y - # 加载图片并转换为灰度图$ w) w0 u1 j, J
- image_path = 'path_to_your_image.jpg'
, j8 _/ \6 N; k- Q. |) p: P - image = Image.open(image_path).convert('L')
! G* T: N: b1 D9 k/ b2 Y: S7 p( o - image_array = np.array(image)0 u1 ~' Z5 H& h% q4 p
- $ m. ]9 A6 n. R8 T4 \
- # 展平图像数组
5 [+ c\" O+ w. l1 y - h, w = image_array.shape
- ^; d) j% r* n8 P0 A5 { o1 m - image_flattened = image_array.flatten().reshape(1, h * w)
) P9 B1 ^( w( y: L# U3 J -
/ y$ _4 d) M: ^2 G9 ?9 b/ y' T - # 应用PCA
) ^( t) E1 B( w0 c) W3 D - n_components = 100 # 选择保留的主成分数量
. M\" H% ?0 ^( p\" p! l9 t - pca = PCA(n_components=n_components)5 Q- p. w( W- e2 X) y# m
- image_compressed = pca.fit_transform(image_flattened)- h$ `' t, B\" Y) V' v, r
-
+ X: t8 m) Z& R6 n - # 重构图像
3 {- e+ z- ?) ~2 u# q - image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)6 j0 {/ H0 ?. S# }1 |# U8 i! q
- # F% i\" ~4 S. Z5 c
- # 显示原始和重构的图像& G7 j5 H* k5 ]$ R* p\" U! H8 ?
- plt.figure(figsize=(10, 5))$ }( p! s% ?9 p7 Y; m1 C ]
- plt.subplot(1, 2, 1)
; r8 { t/ I7 e! p7 w: M5 L0 h - plt.imshow(image_array, cmap='gray')
$ ~7 M3 R1 I* R) _0 J; q - plt.title('Original Image')6 E; W( X% M3 u4 c* o
- plt.subplot(1, 2, 2)
# f* V1 G: O0 a$ G1 g2 [ - plt.imshow(image_reconstructed, cmap='gray')5 }9 E# W7 [& \0 q9 K+ y
- plt.title('Reconstructed Image')\" p\" a5 A7 m. S- e
- plt.show()
复制代码 分析压缩比例与图像质量之间的关系* W+ B4 j+ u1 y4 M" j0 q% i
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。+ _% U- O8 u' l( L; n3 Y( U$ I
0 p: ^( w! h" \$ Q, {尝试其他降维技术
. J# H z) H1 m* H$ k' F2 h除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
I- y8 h- w1 K) G# B1 j3 s3 s; k6 ?6 e) H" E& G& o2 v
随机投影(sklearn.random_projection)% b4 i" @/ x* b0 z! s' e9 c
非负矩阵分解(NMF,sklearn.decomposition.NMF)
" t5 m" j) b' i这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
2 A1 R0 n3 [6 c" t# h% {( U6 h; W" N& s J9 `* |4 q
/ T7 P& [1 Q/ N7 C( Y& }1 g" d
( c3 F9 p: t- B2 P7 ]; k7 }
|
zan
|