QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2452|回复: 0
打印 上一主题 下一主题

图像压缩(主成分分析)

[复制链接]
字体大小: 正常 放大

1198

主题

4

听众

2978

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
6 }+ D; U. K! D6 S! Z0 s. Q$ k任务:使用PCA对图片进行压缩和重构。
3 V! u4 z* d9 t& W挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。' p# M/ o  g$ M; O- b2 L: H5 A
使用PCA进行图像压缩和重构
' t% G. @; e: y- K' F/ ?4 k" D8 q假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。- |  v: T, }' ^

; b. _+ }% V* m. p  b* ^6 x以下是使用PCA对单张图片进行压缩和重构的步骤:
6 `6 z$ _5 j" z* F. a! ?( m0 A1 ?
+ p. q" b9 i+ ?: ^加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
4 A1 K* g. Z+ Z0 [6 ^$ n9 z! ?0 F) b; m9 d/ ~: z) _6 }
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。5 f, S9 k/ `, M7 Q/ ^2 x

7 }5 c7 w% Y, _重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    . M2 M8 x8 t+ {; J
  2. from sklearn.decomposition import PCA
    3 n% k6 U3 a5 i9 s
  3. import matplotlib.pyplot as plt
    3 {$ ?0 \9 Y, V9 A4 ~
  4. from PIL import Image
    ) D/ u' V0 N. [: j  ^/ A
  5. # C5 W2 T7 h1 k# M
  6. # 加载图片并转换为灰度图# Y8 A5 T9 r$ D  K9 g$ ]$ Z  `+ q
  7. image_path = 'path_to_your_image.jpg'% u- x. F5 m\" S4 o; k
  8. image = Image.open(image_path).convert('L')
      ]5 a# ~6 B/ M' t4 Q$ o! X4 y
  9. image_array = np.array(image)
    , v7 V/ }' z9 M2 I\" g$ G9 v  {
  10. ; Y# D& R\" \- U, ], H
  11. # 展平图像数组) G9 V! `+ |8 l0 k+ ]+ f- n
  12. h, w = image_array.shape; O+ ~$ b' u, e9 E& D6 A
  13. image_flattened = image_array.flatten().reshape(1, h * w)
    , w# s9 }\" W+ \. t: w& a+ I) i$ z

  14. & c7 v# O3 j  {0 X. ~1 v
  15. # 应用PCA
    ( s( e; J\" R' B! }) r; Y$ Z0 ^+ d5 }
  16. n_components = 100  # 选择保留的主成分数量! a$ Q) V. p6 N& F+ e: @5 j
  17. pca = PCA(n_components=n_components)
    4 f8 V+ K( w8 H% D% e
  18. image_compressed = pca.fit_transform(image_flattened)4 E\" n- {6 z8 A1 d2 G1 a5 {
  19. ) i* d8 B1 Q6 `
  20. # 重构图像
    2 m+ \+ I3 E$ L; `/ I
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    . h. `, Q9 A4 |
  22. 6 Y  ~/ H6 K+ y# i& X+ X# \
  23. # 显示原始和重构的图像3 n6 W4 z% Z0 _& T
  24. plt.figure(figsize=(10, 5))4 B4 M! G9 K& y9 x8 C! n+ o/ e# k
  25. plt.subplot(1, 2, 1)8 i) z5 Q3 J3 o8 D& v
  26. plt.imshow(image_array, cmap='gray')
    7 f5 x$ Q; ]& q$ S% U) e( E0 I% p
  27. plt.title('Original Image')8 a- p* b& B  y2 ^, Q1 M. ~) V
  28. plt.subplot(1, 2, 2)
    & C# ?/ ^2 ^. c, H
  29. plt.imshow(image_reconstructed, cmap='gray')* U$ _* G  R$ ^- B3 Z1 O3 F+ u+ b0 H
  30. plt.title('Reconstructed Image')
    $ G2 w5 v. i5 _\" m! @
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系! f0 R1 ^6 u/ F. }% q7 F% T6 ?
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
# }& Z. }' p6 {- s$ s; V
, d" v' J' n3 p9 u尝试其他降维技术) l7 D. x% G0 K6 M! |+ {3 S
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:8 E: \  i. W+ k7 Y/ i' z

1 b0 J5 ]6 e/ {' F随机投影(sklearn.random_projection)0 r! C4 b- _1 o/ t
非负矩阵分解(NMF,sklearn.decomposition.NMF)" h) N1 i; ]# G6 ?# X- z+ s- B
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
8 O) @, A) t4 j. e6 s! d
9 Q; M- @: H# [8 @: ^. a' n' G$ e5 m1 P2 o/ F
& O7 L9 i; Y% F8 ^
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-10-15 09:30 , Processed in 1.479963 second(s), 51 queries .

回顶部