- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。% L* V2 d9 {& k% P+ D* V
任务:使用PCA对图片进行压缩和重构。
% S" Q( L9 K: ~7 o& ~4 a9 w) P- F挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
0 F* X% j& Y% v使用PCA进行图像压缩和重构
: p8 y9 T" |. C; H7 f0 e# B3 ^! T0 Z" U假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。. ?, I* _1 a9 ]8 [' F
$ K2 D2 M" B+ q+ ?* {4 z0 M
以下是使用PCA对单张图片进行压缩和重构的步骤:0 t2 ?6 V$ w- \5 _4 J q# I, \
; }) ^6 M) t7 K: V7 `
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。1 v* Z/ A, I+ M6 _
; s7 ]2 U" q' Y! e0 N# s, ?7 a. t
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。8 q' M d! _, ], z( X+ n9 }
3 f7 f9 }! r( r' `9 j6 H# ?重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np8 @5 U2 }& G1 H7 q$ m8 u- R
- from sklearn.decomposition import PCA+ V' C0 @3 k1 F4 G7 l
- import matplotlib.pyplot as plt; [& L% H N* [/ [5 R\" f- r
- from PIL import Image
) t- i$ [. T4 u1 j2 H -
\" [$ ?: F5 D% O9 A - # 加载图片并转换为灰度图
2 e9 d$ @7 O; {$ G% d\" C - image_path = 'path_to_your_image.jpg'
) d/ b! Q% L. a! D: f\" j1 C - image = Image.open(image_path).convert('L')
3 x* o: O, d) @ - image_array = np.array(image)
4 r9 s7 c2 u( K0 L Z - $ K3 S% M& b0 A/ e5 P
- # 展平图像数组
8 O }) _2 q- `0 |% [4 J+ c - h, w = image_array.shape
+ A' [) c0 U9 Z\" W: a- A1 t - image_flattened = image_array.flatten().reshape(1, h * w)$ M9 D( r$ j0 O5 e8 }3 c
- ( O' N. _3 ~5 G4 v' F\" Q/ w
- # 应用PCA
; Q# C& a$ d7 L- Y8 D' m+ @8 Y - n_components = 100 # 选择保留的主成分数量3 S2 R+ J6 t1 ]# r$ B
- pca = PCA(n_components=n_components)$ H\" n4 ?6 P; `; P$ [# G
- image_compressed = pca.fit_transform(image_flattened)% t% Z1 \0 A4 U: g5 |, q7 `% R7 f
-
2 I( }9 u3 N+ W0 R. x D! y* \ - # 重构图像
. i$ d* U& r& }) N# v, J+ M: S - image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)( P- V- P; G; n: P
-
0 B4 w2 y6 I6 N7 ]9 P. A - # 显示原始和重构的图像
# ~. E2 b\" A: V! e6 C: h$ r - plt.figure(figsize=(10, 5))
^7 f B# C; ]\" z\" y( B. S. a( v - plt.subplot(1, 2, 1)
. u\" t. S6 s8 y7 P& Z8 @# t/ M - plt.imshow(image_array, cmap='gray')* f' H. N: P) n1 J! E8 n4 a* U\" H
- plt.title('Original Image')
$ ~: M' E: K; J6 b0 V: f - plt.subplot(1, 2, 2)2 M5 u. l8 v, x- Z\" d$ l& A
- plt.imshow(image_reconstructed, cmap='gray')
+ a1 r\" v; X3 e9 z - plt.title('Reconstructed Image')
4 {* {, c4 s\" h* `+ s\" s8 ` - plt.show()
复制代码 分析压缩比例与图像质量之间的关系
' m2 l, ?: k+ h. D压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。- j7 E/ f3 h( {& z% @. m* F$ o$ j0 N
5 n, w+ Y) ~& e6 ?/ w8 M, M
尝试其他降维技术
+ |! b& @; x; s1 h ?除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
7 d/ S& |5 }# j3 t6 Z/ Q
, s" I! l3 t- @7 j9 A7 j随机投影(sklearn.random_projection): e) F8 Q' L! V/ J$ F p3 ~0 u, T
非负矩阵分解(NMF,sklearn.decomposition.NMF)! E3 y% h5 k5 @9 `2 |
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
& \% U; F, g. \) s8 C5 c& p% Q$ C
2 C1 z2 L) F3 G: [+ m! e3 e/ L9 i' P: e# G, y$ G3 r
9 O1 K$ g/ Z3 n |
zan
|