QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。% L* V2 d9 {& k% P+ D* V
任务:使用PCA对图片进行压缩和重构。
% S" Q( L9 K: ~7 o& ~4 a9 w) P- F挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
0 F* X% j& Y% v使用PCA进行图像压缩和重构
: p8 y9 T" |. C; H7 f0 e# B3 ^! T0 Z" U假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。. ?, I* _1 a9 ]8 [' F
$ K2 D2 M" B+ q+ ?* {4 z0 M
以下是使用PCA对单张图片进行压缩和重构的步骤:0 t2 ?6 V$ w- \5 _4 J  q# I, \
; }) ^6 M) t7 K: V7 `
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。1 v* Z/ A, I+ M6 _
; s7 ]2 U" q' Y! e0 N# s, ?7 a. t
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。8 q' M  d! _, ], z( X+ n9 }

3 f7 f9 }! r( r' `9 j6 H# ?重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np8 @5 U2 }& G1 H7 q$ m8 u- R
  2. from sklearn.decomposition import PCA+ V' C0 @3 k1 F4 G7 l
  3. import matplotlib.pyplot as plt; [& L% H  N* [/ [5 R\" f- r
  4. from PIL import Image
    ) t- i$ [. T4 u1 j2 H

  5. \" [$ ?: F5 D% O9 A
  6. # 加载图片并转换为灰度图
    2 e9 d$ @7 O; {$ G% d\" C
  7. image_path = 'path_to_your_image.jpg'
    ) d/ b! Q% L. a! D: f\" j1 C
  8. image = Image.open(image_path).convert('L')
    3 x* o: O, d) @
  9. image_array = np.array(image)
    4 r9 s7 c2 u( K0 L  Z
  10. $ K3 S% M& b0 A/ e5 P
  11. # 展平图像数组
    8 O  }) _2 q- `0 |% [4 J+ c
  12. h, w = image_array.shape
    + A' [) c0 U9 Z\" W: a- A1 t
  13. image_flattened = image_array.flatten().reshape(1, h * w)$ M9 D( r$ j0 O5 e8 }3 c
  14. ( O' N. _3 ~5 G4 v' F\" Q/ w
  15. # 应用PCA
    ; Q# C& a$ d7 L- Y8 D' m+ @8 Y
  16. n_components = 100  # 选择保留的主成分数量3 S2 R+ J6 t1 ]# r$ B
  17. pca = PCA(n_components=n_components)$ H\" n4 ?6 P; `; P$ [# G
  18. image_compressed = pca.fit_transform(image_flattened)% t% Z1 \0 A4 U: g5 |, q7 `% R7 f

  19. 2 I( }9 u3 N+ W0 R. x  D! y* \
  20. # 重构图像
    . i$ d* U& r& }) N# v, J+ M: S
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)( P- V- P; G; n: P

  22. 0 B4 w2 y6 I6 N7 ]9 P. A
  23. # 显示原始和重构的图像
    # ~. E2 b\" A: V! e6 C: h$ r
  24. plt.figure(figsize=(10, 5))
      ^7 f  B# C; ]\" z\" y( B. S. a( v
  25. plt.subplot(1, 2, 1)
    . u\" t. S6 s8 y7 P& Z8 @# t/ M
  26. plt.imshow(image_array, cmap='gray')* f' H. N: P) n1 J! E8 n4 a* U\" H
  27. plt.title('Original Image')
    $ ~: M' E: K; J6 b0 V: f
  28. plt.subplot(1, 2, 2)2 M5 u. l8 v, x- Z\" d$ l& A
  29. plt.imshow(image_reconstructed, cmap='gray')
    + a1 r\" v; X3 e9 z
  30. plt.title('Reconstructed Image')
    4 {* {, c4 s\" h* `+ s\" s8 `
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系
' m2 l, ?: k+ h. D压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。- j7 E/ f3 h( {& z% @. m* F$ o$ j0 N
5 n, w+ Y) ~& e6 ?/ w8 M, M
尝试其他降维技术
+ |! b& @; x; s1 h  ?除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
7 d/ S& |5 }# j3 t6 Z/ Q
, s" I! l3 t- @7 j9 A7 j随机投影(sklearn.random_projection): e) F8 Q' L! V/ J$ F  p3 ~0 u, T
非负矩阵分解(NMF,sklearn.decomposition.NMF)! E3 y% h5 k5 @9 `2 |
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
& \% U; F, g. \) s8 C5 c& p% Q$ C
2 C1 z2 L) F3 G: [+ m! e3 e/ L9 i' P: e# G, y$ G3 r

9 O1 K$ g/ Z3 n
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-6-11 23:21 , Processed in 0.436158 second(s), 51 queries .

回顶部