- 在线时间
- 479 小时
- 最后登录
- 2026-4-13
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7789 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。
: D4 K) j; L. W$ V$ J' K1 F0 C任务:使用PCA对图片进行压缩和重构。
# n( P) O+ }% R6 F( J q/ v挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
& B$ O2 R6 K0 j使用PCA进行图像压缩和重构
- A& G+ W F. N9 s" U7 M假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。. u0 c1 {7 Y( @5 m7 [* W( e1 U
" H V; J7 `4 _: ?6 s& O( k& y以下是使用PCA对单张图片进行压缩和重构的步骤:
1 _ m L! C- h. W! G
8 ?$ D1 z9 f8 v- r1 T加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
' @7 m/ W, B$ L5 F
. e- B& R, N) C9 M应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。0 { G6 p7 g9 t) ]/ F- N: e
1 X5 c. v* S& n* y8 ]& P; U重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np5 ]5 }* p& v2 u& U
- from sklearn.decomposition import PCA
6 t\" [! c% g* ]6 g1 S - import matplotlib.pyplot as plt1 Z! f! `/ b, V4 a0 I L
- from PIL import Image) u5 C9 e/ R6 c! Z\" A
-
/ F- o\" h# n1 Y/ U, n - # 加载图片并转换为灰度图 }1 p! h- N8 u7 `' ]: ~4 {
- image_path = 'path_to_your_image.jpg'
5 D+ |( ^6 e. n7 Z( R2 } - image = Image.open(image_path).convert('L')
- _) P; E) _\" h0 C* R: f - image_array = np.array(image)9 T* o# I5 u! G\" @
- : d5 z, S; m; s3 B1 t+ K
- # 展平图像数组3 x, F5 @/ Q3 K8 h) S
- h, w = image_array.shape& \5 P( F+ }# [# J) A* Q% z% o5 A
- image_flattened = image_array.flatten().reshape(1, h * w)& x3 O: }' S a% g6 E\" X6 e; f
-
\" @\" _/ V4 R2 | A\" i\" K2 O1 M x. R, u - # 应用PCA
8 `* R3 F! u2 q5 q( Q; v. z, {. \ - n_components = 100 # 选择保留的主成分数量8 |/ {( l3 F7 ~4 E
- pca = PCA(n_components=n_components)+ u9 Q\" X+ Y: Q\" a- ]
- image_compressed = pca.fit_transform(image_flattened)- z0 J\" ]* Y4 p. y/ W/ {
-
* H; o9 p\" f( R3 S# { - # 重构图像
) j& A- Q# a' q( j! _( | - image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
& X0 ^. Y, p3 g9 [; f! S -
S( G( r8 k3 y1 }) p$ s( n - # 显示原始和重构的图像
( W/ t8 i+ p# A6 @6 _ - plt.figure(figsize=(10, 5))
$ C+ N7 a w1 {* ?( O6 G/ ] - plt.subplot(1, 2, 1)9 h& E% b9 T, x! f\" B\" o
- plt.imshow(image_array, cmap='gray')# B3 [6 `* P# |4 r6 ?' `/ m
- plt.title('Original Image')
% W7 ~7 D) {+ m0 h' V) D - plt.subplot(1, 2, 2)1 B8 u* c. V, y$ B$ @' c2 E4 Q
- plt.imshow(image_reconstructed, cmap='gray')1 Y' s: \/ ]5 O& |6 ]. S; r
- plt.title('Reconstructed Image')
* l2 d9 {3 c( E a8 J4 }+ z/ { - plt.show()
复制代码 分析压缩比例与图像质量之间的关系$ C; u N3 k" [( x' u5 m0 q5 ]
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。" Y% U. k6 ?. d
1 b9 Y" x- }5 b& M P3 f
尝试其他降维技术+ p# r% u. U' A- G9 y7 R
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
& e) ]% _9 V/ o& B0 u' C: N$ N5 {- m: _8 G
随机投影(sklearn.random_projection)- m& l/ p; m$ P4 ~9 a- Q, O
非负矩阵分解(NMF,sklearn.decomposition.NMF)
; |) K6 l! h0 o% P4 R7 m8 c这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。+ m& G0 o4 ]; i' i9 p; H
. Z; D! t' D5 M8 H1 e$ ^) P
1 Z( ?8 D5 h9 O6 n5 O" N
6 R' T9 m2 }- e' y2 T* l
|
zan
|