QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1171

主题

4

听众

2781

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。2 N% I) ^( h, G# H
任务:使用PCA对图片进行压缩和重构。; D* A6 C6 m: M
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
- i0 o- M/ D. d4 V& x8 r7 U使用PCA进行图像压缩和重构
- t) G' L; R9 L, Y假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。$ ^3 D6 _: |# d' Q8 |
# v4 [: ]5 [$ q9 N, F
以下是使用PCA对单张图片进行压缩和重构的步骤:6 C4 ^0 ~9 ^+ K( h, e

+ B0 J" @. I: M+ o  Q* r. x加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
* s; l8 |! V/ B7 H- a
0 h, [0 V  y5 R& {7 C应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
1 m2 |& l4 \, ]3 y& s: ]/ ?( I0 M, {! `( w/ T, {6 b" ^5 {) ~4 B& l
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    $ z. \$ E: H/ ^2 V0 w2 _
  2. from sklearn.decomposition import PCA
    / C6 L2 j5 _5 S* U
  3. import matplotlib.pyplot as plt
    5 c! W- [& A  Z1 b
  4. from PIL import Image
    , S4 j; ^; b. l0 u2 P
  5. 8 C8 B! e: }3 f\" k) L/ \
  6. # 加载图片并转换为灰度图
    \" V) b: y* U0 [# Y/ r! _\" R
  7. image_path = 'path_to_your_image.jpg'
    ) i# R! y& F- \/ a\" L2 o7 c; V
  8. image = Image.open(image_path).convert('L')
    ; U' f, e+ a# n# t) a
  9. image_array = np.array(image)
    2 d9 R; Y! o7 |! A- p) K
  10. : u; [; J/ b% P8 W
  11. # 展平图像数组5 x3 ^4 x3 a  A/ ]; |
  12. h, w = image_array.shape
    2 @7 J' }- {- V. q: ^+ D( N0 V. O
  13. image_flattened = image_array.flatten().reshape(1, h * w)/ j6 m* B: u$ Q7 ^) _3 q/ K* ~
  14. ; z9 o( ^* W0 Z' l/ W
  15. # 应用PCA4 F) o- i$ N% [. h
  16. n_components = 100  # 选择保留的主成分数量0 W$ R, X, A+ J2 F
  17. pca = PCA(n_components=n_components)\" q* l5 l6 z\" H: G# V6 Q2 j9 ^
  18. image_compressed = pca.fit_transform(image_flattened)( B8 G$ J( m5 F1 c& u* [& Q* K

  19. 0 v% Q9 L) L: o5 b7 _% e6 I7 e
  20. # 重构图像
    , M. P* j6 M' f8 |2 d, @' S
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w). z  M7 g/ _1 I/ _% S
  22. ' u- i4 ^2 t* T0 a/ k3 _3 T
  23. # 显示原始和重构的图像
    6 q* b0 F$ M3 e2 ]9 P2 E, K2 t
  24. plt.figure(figsize=(10, 5))5 t* l0 V0 [. ?; n
  25. plt.subplot(1, 2, 1)
    : K: o  e2 A) q% ~9 Q8 h( t
  26. plt.imshow(image_array, cmap='gray')& E' t: a% V. ]8 _
  27. plt.title('Original Image')
    ( x$ T- B: Z* V& [2 e% Z. F: I
  28. plt.subplot(1, 2, 2)  I0 N, {- ?+ |. m- m
  29. plt.imshow(image_reconstructed, cmap='gray')3 F) c! ?- R! a! r3 ?
  30. plt.title('Reconstructed Image')2 @; l6 D& ]! x' o% q7 x7 e& n' V
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系- G% R  z' X+ K1 r
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。# i6 a3 H. U% ?, M, H0 B1 |( U
* i2 N, F" ]( k8 o9 O
尝试其他降维技术( U$ J' _6 r6 L% n* J
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
' h" d+ U1 m, v0 A' Q0 N7 K: w* _" K* e, a2 v0 `# V
随机投影(sklearn.random_projection)# k- V& u. w, D) P' p
非负矩阵分解(NMF,sklearn.decomposition.NMF)8 L0 F" S; C$ S$ f9 v3 O
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。* K* W* |; d5 h8 R( z* E; M

9 K' ]4 ]9 W* [! f! G* ]+ M1 c# _! l. Y0 q9 h& V4 c. z5 i+ b
3 {- D6 r$ z' \0 Z0 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, 2025-6-24 09:16 , Processed in 0.973362 second(s), 50 queries .

回顶部