- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7953 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2978
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。
( E" K. o* V# \# q7 l$ a任务:使用PCA对图片进行压缩和重构。7 ]9 u) {# u$ j: L& X6 \4 g. m8 r
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。0 K, N) y2 w; b% [, x. Q/ S' V
使用PCA进行图像压缩和重构* G# u& @4 c- h& G
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。: J G$ l4 l( W, K- B5 |
( D/ [ i5 \) `& w以下是使用PCA对单张图片进行压缩和重构的步骤:! G/ m) i+ t! } E: H
# r- b- f: l& S7 V6 O1 Z3 z( T1 z5 }
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。, C7 F# \4 ~# r6 j
0 n- y2 y- z7 a7 h: \& T. X
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
% z; a5 O1 a8 h# Y+ |
2 @( s, F3 A7 J- O重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np- {/ J h! P+ `# e8 ]
- from sklearn.decomposition import PCA' a2 ~6 p\" J\" \+ y$ l
- import matplotlib.pyplot as plt. v# {: D, o4 ^
- from PIL import Image
' c* p% u7 p1 A5 J+ s4 P6 L$ ? -
' k6 t, y6 s1 i& F3 f - # 加载图片并转换为灰度图$ x' X* R\" \6 J
- image_path = 'path_to_your_image.jpg'& m9 Q6 \8 g. c
- image = Image.open(image_path).convert('L')
5 ~, X+ W/ S0 {& E5 M - image_array = np.array(image)
\" A; u5 G! U9 W. e - 8 k# c. n( C: {' N; |
- # 展平图像数组. k z5 a# w\" [; A\" Y* m
- h, w = image_array.shape
( h' g7 S5 E8 J! m4 E - image_flattened = image_array.flatten().reshape(1, h * w)
5 u4 e& V4 \8 y8 c a; ] - \" y9 M3 f C4 a N5 ^& R$ B% C9 ~
- # 应用PCA
J6 C1 U8 V1 P& @+ O - n_components = 100 # 选择保留的主成分数量
f, J# T# y6 R2 s0 p2 u - pca = PCA(n_components=n_components)
6 Q8 g1 c( v0 D- S - image_compressed = pca.fit_transform(image_flattened)
$ ~4 C. Y$ r, H, _6 |3 h - 9 Q' o( L- `: D
- # 重构图像+ e: S2 V9 I, q\" Z) Z
- image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
) V% b7 O0 V( k* U, O! b - / v2 V1 v9 Q0 e4 i
- # 显示原始和重构的图像/ P% K# g6 Q' @2 P
- plt.figure(figsize=(10, 5))
7 C+ o1 Z v/ m6 P G# E2 {0 @5 h3 k - plt.subplot(1, 2, 1)
0 Q3 p, _9 s. C: s( D4 U, D; g - plt.imshow(image_array, cmap='gray')
8 i0 J7 R4 B3 b3 \- y+ R T! Q - plt.title('Original Image'); n- F# h! \. `- u* g) V
- plt.subplot(1, 2, 2)$ N( V, }3 |' h% \
- plt.imshow(image_reconstructed, cmap='gray')7 z9 s- K8 t- X, E! K' Q6 A
- plt.title('Reconstructed Image')
' R1 i4 W# D. H2 y - plt.show()
复制代码 分析压缩比例与图像质量之间的关系
; x& k) X6 M- f! T" c压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。* x' h3 A A+ @# z1 p/ j& O$ }
1 v8 P- O) h6 e3 |2 ^
尝试其他降维技术2 b u# s4 e& x* X
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
- C2 r' }) f. t; h# p
; {. e! U! U; G$ k随机投影(sklearn.random_projection)
% C/ @) Z1 A9 O6 G7 z非负矩阵分解(NMF,sklearn.decomposition.NMF)
2 m: z, W: |6 o% h# A& B2 Q- ^* i6 _这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
* [6 I \6 h. ?# q1 e0 X& E* J, y
% I8 a3 Z0 V0 v8 V
' O! Q. ?0 h/ {' l0 R7 h- N2 e9 N6 ]: a- o
|
zan
|