QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。! X) V8 ]7 E2 `) Z
任务:使用PCA对图片进行压缩和重构。
1 E7 A. t! c9 Y: E3 ?( |8 X挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
' I7 a2 ^7 l+ u" ^$ O/ g, y0 f9 F& r9 }使用PCA进行图像压缩和重构3 ~) _3 f8 O# B, |& t; v8 l
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。2 ~: z; o8 _: u  @4 ~$ d

2 G" ~% n6 \/ ]  W3 p以下是使用PCA对单张图片进行压缩和重构的步骤:
/ N. H5 O& f4 m: B* W1 V/ }/ x0 ]4 U$ F
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
2 E) c7 J0 G5 c4 s5 R9 ^# ~$ ~0 ]6 [  B  G
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
# ^" K2 D# ~1 ~5 n( v9 T* Z+ i2 l  _
! c$ T2 i( q( Z& S" x重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    / Y\" T. ]  f  g5 ^$ g1 ?
  2. from sklearn.decomposition import PCA9 `) a0 m$ {% R! p
  3. import matplotlib.pyplot as plt
    ! M2 g( f  C. D. w
  4. from PIL import Image: ?! L% }0 _' L) r% V2 O: G
  5. 1 J; _0 A- n0 X. ?: s
  6. # 加载图片并转换为灰度图$ S1 r( E7 Z# @, ~2 [1 U
  7. image_path = 'path_to_your_image.jpg'0 P# H\" s+ t/ T8 W
  8. image = Image.open(image_path).convert('L')
    # r: `2 F1 W% Z0 d
  9. image_array = np.array(image)\" R- {, u; d; Q8 A4 o6 t

  10. % {7 `6 `# p3 d7 K5 u1 E
  11. # 展平图像数组7 Q4 q2 m5 g& J; z7 r
  12. h, w = image_array.shape
    9 R8 o7 M' e4 E9 o7 L  g5 H
  13. image_flattened = image_array.flatten().reshape(1, h * w)
    8 W  b\" c1 E; V8 i8 g+ x
  14. 0 \0 O  F# [* V& p& o\" ~1 V0 H
  15. # 应用PCA
      y2 t) y# T4 G
  16. n_components = 100  # 选择保留的主成分数量$ ]% n3 Y) b* ], J  F
  17. pca = PCA(n_components=n_components)0 `' B4 n5 D& J4 |6 O4 X3 ^
  18. image_compressed = pca.fit_transform(image_flattened)
    + Y) l1 Q, l: ?7 u
  19. 9 x  h6 G* s4 H/ [4 c, U
  20. # 重构图像) Q; u0 f% k7 L6 v
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    , d) [- P+ ~8 r# \

  22. / a/ J. N4 b! a( ^! v
  23. # 显示原始和重构的图像5 k0 ]  u9 E5 a. z$ S
  24. plt.figure(figsize=(10, 5))
    # f5 t% z. ~0 b3 }
  25. plt.subplot(1, 2, 1)* q: e( c$ u\" p
  26. plt.imshow(image_array, cmap='gray')7 v/ h% V, g  w3 L9 h0 C
  27. plt.title('Original Image')2 E1 W: ?7 V2 b1 d5 i1 |. _
  28. plt.subplot(1, 2, 2)9 _3 E  a. j5 {4 h
  29. plt.imshow(image_reconstructed, cmap='gray')
    / E\" h3 x6 ?7 d. m  X
  30. plt.title('Reconstructed Image')
    9 X$ F. v/ o2 Y5 q6 R
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系
4 V" J4 g, p* [: d9 o$ {1 z5 V压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。8 M% P9 d) u- r- f$ ?
$ l4 \! a. I; i/ s& F% k0 K; z( C
尝试其他降维技术
* X& Z6 A1 r. i除了PCA之外,还有其他降维技术可以用于图像压缩,例如:$ r# H! V, S# b6 T
6 p; G, d% H/ h) P# f. q
随机投影(sklearn.random_projection), b; E$ a4 x$ h$ |6 d
非负矩阵分解(NMF,sklearn.decomposition.NMF). z, `. t4 N; j
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。) X, j/ `5 a5 l$ f

  ?! f; k& O; K7 e8 }. B/ h5 ]7 r0 {, K$ g) m% u- i
8 a+ U8 e+ U1 V/ _0 M, K
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-7-29 22:39 , Processed in 0.403560 second(s), 51 queries .

回顶部