QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。/ 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的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    4 X- P3 U: a) i
  2. from sklearn.decomposition import PCA) ^7 }8 c3 ?; q3 _( R  t3 y3 T
  3. import matplotlib.pyplot as plt9 m. Z2 t# k  M( g
  4. from PIL import Image0 x) Z5 V6 C! s( `' g0 \
  5. 0 i7 _' J' ?7 l) C6 Z( O
  6. # 加载图片并转换为灰度图$ Y+ J- |( ]7 F; X' L; O- ]
  7. image_path = 'path_to_your_image.jpg'
    2 g# y2 C1 R$ W2 ]: `
  8. image = Image.open(image_path).convert('L')
    3 W' M2 i, u\" ]0 X
  9. image_array = np.array(image)9 P7 I: ~- H% S& U6 Y\" g

  10. , M/ v3 b! w9 E( u+ e: |0 X) O  A' E
  11. # 展平图像数组
    : R- n& Y$ N' ^
  12. h, w = image_array.shape
    + @  Y* O2 f1 U& g$ F: C: V# I2 K4 V
  13. image_flattened = image_array.flatten().reshape(1, h * w)0 ]' g4 b  e- @
  14. / l/ l* p  |. _. z; l8 G
  15. # 应用PCA/ D0 g8 j+ ]6 R2 M
  16. n_components = 100  # 选择保留的主成分数量
    \" Y# l\" r4 a% Z' ?# l8 y5 P2 H# S
  17. pca = PCA(n_components=n_components), _\" }( K! y* h4 u8 ], ~3 j1 u7 x
  18. image_compressed = pca.fit_transform(image_flattened)$ ?5 L6 B; S/ m+ C) o/ ]5 O
  19. $ y# ~; |  \/ f# u$ ^0 x2 y2 y
  20. # 重构图像  F1 t0 F4 \( N. U8 d
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    : g$ E& U2 b( J# Z

  22. / D7 \' L* ~8 a3 x
  23. # 显示原始和重构的图像4 Z4 U9 v/ j  }3 s: I3 A
  24. plt.figure(figsize=(10, 5))
    * p7 J) }& T: @\" B* e' ^
  25. plt.subplot(1, 2, 1)) }- y1 ^+ _) t: N% i1 G& ?
  26. plt.imshow(image_array, cmap='gray')
    ) }- J& `+ v3 t) [2 r- X
  27. plt.title('Original Image')+ i; f( d  ]; l
  28. plt.subplot(1, 2, 2)3 g\" W! n+ q$ B  o
  29. plt.imshow(image_reconstructed, cmap='gray')& ~  u: X1 ?3 F( d& l2 x3 J/ D
  30. plt.title('Reconstructed Image')7 j4 K# G' H+ S* q
  31. 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
转播转播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-4-16 01:32 , Processed in 0.780662 second(s), 51 queries .

回顶部