QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。5 X% f. s. U5 M5 x$ {. Q/ i) h
任务:使用PCA对图片进行压缩和重构。+ e# K# k% V9 Z0 U5 w
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
1 F& ], j/ }4 J0 ?" ~使用PCA进行图像压缩和重构+ }  l0 |9 ~, \5 x1 q/ P( ^) P9 H
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
" p8 u/ \" L. b3 ?# w0 j
- z# \) i( M# U$ H# j! `" b以下是使用PCA对单张图片进行压缩和重构的步骤:
; j( A& \: P- m0 T8 A) X. J! [& Z5 N; a' }0 a6 }$ c/ A
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
4 E5 M( k$ P' S. V* N. [
* R' ^8 w9 U+ _! K) r. f! P  s+ o$ Q应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。9 O1 F- R" b( f- D  B8 z

; {. O+ A+ e, x7 F. l重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np0 y& ~$ U, K6 e8 B, W1 ]7 v
  2. from sklearn.decomposition import PCA
    ; J( J\" \: o: \4 N# B6 P
  3. import matplotlib.pyplot as plt$ p& L7 x: j& ^) ^8 J( q' y# d$ k  c
  4. from PIL import Image4 p5 h' _3 Q3 B0 q9 T

  5. : m4 |$ d2 |3 |$ ~; Y
  6. # 加载图片并转换为灰度图$ w) w0 u1 j, J
  7. image_path = 'path_to_your_image.jpg'
    , j8 _/ \6 N; k- Q. |) p: P
  8. image = Image.open(image_path).convert('L')
    ! G* T: N: b1 D9 k/ b2 Y: S7 p( o
  9. image_array = np.array(image)0 u1 ~' Z5 H& h% q4 p
  10. $ m. ]9 A6 n. R8 T4 \
  11. # 展平图像数组
    5 [+ c\" O+ w. l1 y
  12. h, w = image_array.shape
    - ^; d) j% r* n8 P0 A5 {  o1 m
  13. image_flattened = image_array.flatten().reshape(1, h * w)
    ) P9 B1 ^( w( y: L# U3 J

  14. / y$ _4 d) M: ^2 G9 ?9 b/ y' T
  15. # 应用PCA
    ) ^( t) E1 B( w0 c) W3 D
  16. n_components = 100  # 选择保留的主成分数量
    . M\" H% ?0 ^( p\" p! l9 t
  17. pca = PCA(n_components=n_components)5 Q- p. w( W- e2 X) y# m
  18. image_compressed = pca.fit_transform(image_flattened)- h$ `' t, B\" Y) V' v, r

  19. + X: t8 m) Z& R6 n
  20. # 重构图像
    3 {- e+ z- ?) ~2 u# q
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)6 j0 {/ H0 ?. S# }1 |# U8 i! q
  22. # F% i\" ~4 S. Z5 c
  23. # 显示原始和重构的图像& G7 j5 H* k5 ]$ R* p\" U! H8 ?
  24. plt.figure(figsize=(10, 5))$ }( p! s% ?9 p7 Y; m1 C  ]
  25. plt.subplot(1, 2, 1)
    ; r8 {  t/ I7 e! p7 w: M5 L0 h
  26. plt.imshow(image_array, cmap='gray')
    $ ~7 M3 R1 I* R) _0 J; q
  27. plt.title('Original Image')6 E; W( X% M3 u4 c* o
  28. plt.subplot(1, 2, 2)
    # f* V1 G: O0 a$ G1 g2 [
  29. plt.imshow(image_reconstructed, cmap='gray')5 }9 E# W7 [& \0 q9 K+ y
  30. plt.title('Reconstructed Image')\" p\" a5 A7 m. S- e
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系* W+ B4 j+ u1 y4 M" j0 q% i
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。+ _% U- O8 u' l( L; n3 Y( U$ I

0 p: ^( w! h" \$ Q, {尝试其他降维技术
. J# H  z) H1 m* H$ k' F2 h除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
  I- y8 h- w1 K) G# B1 j3 s3 s; k6 ?6 e) H" E& G& o2 v
随机投影(sklearn.random_projection)% b4 i" @/ x* b0 z! s' e9 c
非负矩阵分解(NMF,sklearn.decomposition.NMF)
" t5 m" j) b' i这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
2 A1 R0 n3 [6 c" t# h% {( U6 h; W" N& s  J9 `* |4 q
/ T7 P& [1 Q/ N7 C( Y& }1 g" d
( c3 F9 p: t- B2 P7 ]; k7 }
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 16:13 , Processed in 0.410515 second(s), 50 queries .

回顶部