- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。7 \8 u' |% z) M! ~' S2 }
任务:使用PCA对图片进行压缩和重构。3 B& k# w: r; i3 i2 c; D$ n0 ?5 G$ Z
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
2 @' K: _- [* T. r1 C1 S- l使用PCA进行图像压缩和重构" p( H$ p/ o$ b* q# X, R. S$ N
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
" l: X; g6 D! I1 n6 \' O! \0 s8 a
$ k# x# `6 z* ]6 O& H7 S) t以下是使用PCA对单张图片进行压缩和重构的步骤: C" y* o# n, u
. G# E; L# r. F9 `
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。& E( c6 Y" s/ ]
* @4 y9 n( k8 r& X( z
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
4 g7 C5 P$ H7 ]9 w$ l. c y H+ ?! W% [- j$ T
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np
' O+ h3 q4 O0 n# f- u - from sklearn.decomposition import PCA\" Z' _+ B1 {* g) l9 M# Q4 M: u
- import matplotlib.pyplot as plt
7 e' v% x) C! }& b, ~ - from PIL import Image- x2 J* a4 w+ H/ {9 V! _0 V- N
-
3 Q. O3 o! l2 _7 u& o, ^ - # 加载图片并转换为灰度图
& P( \ t4 T, ?6 F6 ` - image_path = 'path_to_your_image.jpg'9 t4 l3 J$ i# f
- image = Image.open(image_path).convert('L'). V1 Q) u' W* {* @, c' E
- image_array = np.array(image)
2 Z* ?3 _/ R7 e2 @& L2 z8 i -
7 I- A! p* O0 I. J6 E; ] - # 展平图像数组
1 @ P6 B. N3 T2 b2 Y, n - h, w = image_array.shape
! ~\" K2 X6 ^# N) C& Q' B! M3 b, \: E - image_flattened = image_array.flatten().reshape(1, h * w)
# [0 u4 {, p' I\" N3 y5 p4 r - ' G0 C/ ~, \3 V0 Q* L2 D
- # 应用PCA
7 e- N$ b% f0 r - n_components = 100 # 选择保留的主成分数量- z, K; _, o M
- pca = PCA(n_components=n_components)
4 P1 Z! ~/ @6 B - image_compressed = pca.fit_transform(image_flattened)( K; q; E8 C1 d' ~! ~7 t
- / q4 T6 x) `' M2 P6 \+ F* s
- # 重构图像4 J, `' Q: X f7 b
- image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
# f7 Z1 P' n! o; C - $ O* j/ l! ^/ n
- # 显示原始和重构的图像
& A* i5 Z. Z; G6 T$ v! N - plt.figure(figsize=(10, 5)): y9 X. G0 Z5 o& Y9 L\" q- v2 Y
- plt.subplot(1, 2, 1)) a) z$ C1 b# Y* e! C
- plt.imshow(image_array, cmap='gray')
8 o# k* u7 z1 f7 ] - plt.title('Original Image'): @! {( ~. A, H, Y1 o
- plt.subplot(1, 2, 2); ^& D. f! F' {9 C7 D4 z
- plt.imshow(image_reconstructed, cmap='gray')
, }1 D7 m! p2 d, F, q- n - plt.title('Reconstructed Image')) }% P$ G3 t7 M7 W4 F3 a+ |
- plt.show()
复制代码 分析压缩比例与图像质量之间的关系6 Z/ E/ n. [# X
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
: w+ o/ e: `) I, V# \ f: t; c; i4 K8 C4 k6 |
尝试其他降维技术$ A2 P! g) i u- m' y5 G
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:* n3 Y4 W& ?- t0 k) m% S1 L
- J0 K! X q# R/ B7 m. f
随机投影(sklearn.random_projection)6 r$ k9 u$ z k* E+ O& N) w1 M& ^! D
非负矩阵分解(NMF,sklearn.decomposition.NMF)
3 b1 K+ B) E8 o5 \. o这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。' b6 t! }! u- ~4 V
* o' V1 f/ J4 c# j% a- f
" x- g% i/ Z2 ~4 `* s3 S' }4 t; T% C; ^6 J. m
|
zan
|