QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。5 q/ \4 x. N: n% r% }
任务:使用PCA对图片进行压缩和重构。& w3 O0 z" o- N
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
  _  P9 A& [* w- k使用PCA进行图像压缩和重构* B( {8 U9 M$ e4 @0 x% J* Z
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。7 {' `$ P3 u# ?  B
* ]. {# J! R0 h8 x+ ~6 G
以下是使用PCA对单张图片进行压缩和重构的步骤:3 O+ G. ], n0 ?( H( j. _6 @& S; s

( r7 n8 {6 Z* `加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
, [3 j9 _0 R7 o: f. C8 g) z/ b! g5 g4 C, a' v* _
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。1 v5 X7 b: o! d1 ^9 z
8 {- ]4 T( o# I0 B
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    0 [) X& S. l6 v2 G6 b! E% G) E/ g
  2. from sklearn.decomposition import PCA: Q2 f4 n5 w) a. s
  3. import matplotlib.pyplot as plt
    5 K8 J/ T) G9 m1 x; w, x\" x/ G
  4. from PIL import Image
    ) B, i4 L+ Q; F
  5. ) m\" D% Q- o9 `  `4 T# O
  6. # 加载图片并转换为灰度图3 {5 J5 I4 R1 l$ \/ L( p* @. {; f
  7. image_path = 'path_to_your_image.jpg'
    ! }; |1 b; i& ?2 k/ ^4 r
  8. image = Image.open(image_path).convert('L')) E/ F$ ]1 M. N\" o
  9. image_array = np.array(image)
    \" y! Z* [5 r1 X
  10. 6 Q7 b* ~7 f5 e
  11. # 展平图像数组
    & S' m2 A( M( c( h1 p. s
  12. h, w = image_array.shape5 V2 ^. M6 M0 y5 }! G
  13. image_flattened = image_array.flatten().reshape(1, h * w)+ }% \* r\" r6 O  Y, E& R) [! z8 x

  14. 1 t' ~: c) B$ G, J: a
  15. # 应用PCA
    # m2 f* K! z# F\" ]
  16. n_components = 100  # 选择保留的主成分数量
    ) _! ]' O! x8 ]
  17. pca = PCA(n_components=n_components)
    \" f# j6 e3 ]1 |) ]; v
  18. image_compressed = pca.fit_transform(image_flattened)
    ( C2 N$ N( P: w1 N6 C& i) o
  19. / e% K' A4 k\" l* N* ~
  20. # 重构图像
    - W& U1 c) G4 k
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    0 D7 r& U$ k! s8 O; \- O4 x# H\" }8 o. ]
  22. 7 d0 Z0 y( d' J% R/ K
  23. # 显示原始和重构的图像6 |' Y, ^7 Z$ x$ s4 M$ h1 ^
  24. plt.figure(figsize=(10, 5))& J0 @% s8 D: P\" r2 }* J5 ?
  25. plt.subplot(1, 2, 1)
    , f$ S, J7 t1 [3 b& d& u1 t6 h
  26. plt.imshow(image_array, cmap='gray')# U$ q\" Q+ L# a9 B+ y  h/ L
  27. plt.title('Original Image')
    5 I. s7 R7 y- t& i
  28. plt.subplot(1, 2, 2)
    , m: N# o8 X\" n2 |
  29. plt.imshow(image_reconstructed, cmap='gray')
    ) u) ]: z- E  E& Q4 J4 o% G
  30. plt.title('Reconstructed Image')/ ^  w* x% T6 \+ E) ]8 ~
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系+ [7 j5 t) X/ |; j) Q7 _6 P
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。6 C( \; T6 P8 x9 k5 o6 a' H
7 g# d) T  G4 A& U9 |
尝试其他降维技术) L- {5 p* }9 \$ f
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:2 Y7 L) a+ H2 l+ \( ~- S- k2 |) ]
9 F4 _7 O/ J% u' Q, r* z
随机投影(sklearn.random_projection), L& x+ [4 ]1 |0 R  \
非负矩阵分解(NMF,sklearn.decomposition.NMF)
  c+ f9 V$ V8 S! Z) n, c! f1 q这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
. u  i) a3 i) ~) F% `# i4 h7 M$ B, C* s" O- ^/ C* k2 m' r! D( F+ l2 m

5 o1 N$ g* a# }/ k+ K- K- z: ?  E0 y# u9 {
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-28 16:34 , Processed in 0.395231 second(s), 51 queries .

回顶部