- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。/ p" c* R i& @3 ~% A
任务:使用PCA对图片进行压缩和重构。
9 w V! o; b X$ |挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。- H w1 z" a; G$ O2 d; q
使用PCA进行图像压缩和重构+ p2 b" C$ q# l( z
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。1 C( [! B9 d) t S4 W3 q
( V! [0 f. v* F2 n& T, i. V! ^
以下是使用PCA对单张图片进行压缩和重构的步骤:
/ j! K7 k* i x- E* @
m& ^4 @% T0 E% D9 |$ Z加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
, s5 c q% L+ t" J
! M v2 p2 ]' u9 h/ D# l" G% f* @应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。9 _ V0 g9 n9 ]: `, X
( n# f9 W( l! ~重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np
4 X- P3 U: a) i - from sklearn.decomposition import PCA) ^7 }8 c3 ?; q3 _( R t3 y3 T
- import matplotlib.pyplot as plt9 m. Z2 t# k M( g
- from PIL import Image0 x) Z5 V6 C! s( `' g0 \
- 0 i7 _' J' ?7 l) C6 Z( O
- # 加载图片并转换为灰度图$ Y+ J- |( ]7 F; X' L; O- ]
- image_path = 'path_to_your_image.jpg'
2 g# y2 C1 R$ W2 ]: ` - image = Image.open(image_path).convert('L')
3 W' M2 i, u\" ]0 X - image_array = np.array(image)9 P7 I: ~- H% S& U6 Y\" g
-
, M/ v3 b! w9 E( u+ e: |0 X) O A' E - # 展平图像数组
: R- n& Y$ N' ^ - h, w = image_array.shape
+ @ Y* O2 f1 U& g$ F: C: V# I2 K4 V - image_flattened = image_array.flatten().reshape(1, h * w)0 ]' g4 b e- @
- / l/ l* p |. _. z; l8 G
- # 应用PCA/ D0 g8 j+ ]6 R2 M
- n_components = 100 # 选择保留的主成分数量
\" Y# l\" r4 a% Z' ?# l8 y5 P2 H# S - pca = PCA(n_components=n_components), _\" }( K! y* h4 u8 ], ~3 j1 u7 x
- image_compressed = pca.fit_transform(image_flattened)$ ?5 L6 B; S/ m+ C) o/ ]5 O
- $ y# ~; | \/ f# u$ ^0 x2 y2 y
- # 重构图像 F1 t0 F4 \( N. U8 d
- image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
: g$ E& U2 b( J# Z -
/ D7 \' L* ~8 a3 x - # 显示原始和重构的图像4 Z4 U9 v/ j }3 s: I3 A
- plt.figure(figsize=(10, 5))
* p7 J) }& T: @\" B* e' ^ - plt.subplot(1, 2, 1)) }- y1 ^+ _) t: N% i1 G& ?
- plt.imshow(image_array, cmap='gray')
) }- J& `+ v3 t) [2 r- X - plt.title('Original Image')+ i; f( d ]; l
- plt.subplot(1, 2, 2)3 g\" W! n+ q$ B o
- plt.imshow(image_reconstructed, cmap='gray')& ~ u: X1 ?3 F( d& l2 x3 J/ D
- plt.title('Reconstructed Image')7 j4 K# G' H+ S* q
- plt.show()
复制代码 分析压缩比例与图像质量之间的关系. n- ], z* j. C
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。! r% N! O- l: V: e9 T" x) o
/ Q1 P0 h; E! Q8 P尝试其他降维技术1 o+ i- v1 O: Z4 s/ w
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
9 b* F2 m# k5 C4 `) G' f
' d; d- ^" @/ h, p1 w随机投影(sklearn.random_projection): X$ m+ O% N; f, L$ S8 O
非负矩阵分解(NMF,sklearn.decomposition.NMF)$ B+ B, W U/ Y$ w* j8 Z7 C5 |3 F
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。% c# l8 j6 Q2 }4 h E" j4 b
0 V/ o& y1 ~5 v
1 {" n% z3 p% m) D$ L5 g& {) L
' f- p! o! p7 O2 L M6 z |
zan
|