QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
( m: V& ?8 J! t" c任务:使用PCA对图片进行压缩和重构。6 v/ _/ x; U& r+ b, d+ Q# R4 R  n
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。1 [5 h2 C1 A' j0 m' D- k# y! W/ c
使用PCA进行图像压缩和重构
: h( |7 `$ i# A4 J2 e/ z假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
7 [, i$ r6 v3 ^/ n' g" g% S% G6 k  d8 V; s) N/ z; k$ m
以下是使用PCA对单张图片进行压缩和重构的步骤:
! o( b, i% R& S4 s3 {. L- [# O( }( G! K, x
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
3 x2 J5 Z& _! e
. I! j! u; \0 l- j8 o9 @应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。7 P5 Y4 X% s! X2 `- g+ S
7 ~; Y7 j- w% p4 e: C6 \1 U2 S. F
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np. j8 U& s7 i& T0 }  V/ j8 {$ R\" {
  2. from sklearn.decomposition import PCA
    1 v, K% f: F$ o  X% [% Z
  3. import matplotlib.pyplot as plt+ u! n5 I' e: o+ `' _! o
  4. from PIL import Image
    / u2 R. M- C# \* E, W- N8 z- B/ p
  5. : [% f: j6 E) W6 {4 N$ g# c
  6. # 加载图片并转换为灰度图
    ) x\" E9 s' \+ b& Y0 R% a
  7. image_path = 'path_to_your_image.jpg'
    6 [# p1 s0 S: S9 [) i( Y- \
  8. image = Image.open(image_path).convert('L')* a7 b, e7 t9 V' S) J\" ?
  9. image_array = np.array(image)0 F; j  t+ ]  P% j

  10. % ?* g: d4 c0 M3 E; i2 B4 O
  11. # 展平图像数组
    . H6 t. t! k; W9 L$ O
  12. h, w = image_array.shape
    + i+ s8 q, @* B: Q; Q
  13. image_flattened = image_array.flatten().reshape(1, h * w): E; [5 {$ K* A4 n& A7 M& i. s

  14. 6 M8 \- y& ]+ X- j; p
  15. # 应用PCA
    0 x4 m$ P) _6 E
  16. n_components = 100  # 选择保留的主成分数量1 U. u& I7 y+ h! z, |
  17. pca = PCA(n_components=n_components)' d9 ^! w, R7 B& r& o- d  H$ ^8 n
  18. image_compressed = pca.fit_transform(image_flattened)
    ' p9 n- w% s, _2 f& ?- _7 _3 F; |
  19. $ X$ s3 s\" p  }* g
  20. # 重构图像  O: R% E; A# _) ~0 W7 o! |
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
      @\" O4 G: c3 v. n! \
  22. . J) t\" L' t, r( I* f5 W
  23. # 显示原始和重构的图像' t/ }  K) x. M. g& J* O  f
  24. plt.figure(figsize=(10, 5))/ s' C1 f5 l9 x: g* K% O
  25. plt.subplot(1, 2, 1)
    \" h% o$ S. b( M
  26. plt.imshow(image_array, cmap='gray')
    % L\" }\" S0 Q0 i+ u2 o9 J, ?
  27. plt.title('Original Image')% g: }+ @\" J2 v* w
  28. plt.subplot(1, 2, 2)
    * n: U6 C5 w* c& \7 D% O
  29. plt.imshow(image_reconstructed, cmap='gray')
    1 T! r% d4 o) g# b
  30. plt.title('Reconstructed Image')
    \" W7 Y, u) j\" k5 L: e' o
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系
$ [! q% E6 h# a' P# U压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
$ c- r- `3 f5 j
! @  h9 G, o5 f' Q4 V1 Q- Z尝试其他降维技术5 Z# T: x$ D3 @4 H5 \  p
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
7 N, l$ M7 S3 v! t% x
" H# Z. O" B+ V3 D/ ?# W随机投影(sklearn.random_projection)6 x  u4 F/ L; S3 i: ?% y0 Y, l" r
非负矩阵分解(NMF,sklearn.decomposition.NMF)
2 O$ Q( o9 Q# V) q9 j# D  ^0 N这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。" m- c4 u5 M* @

* K( f( T3 b1 L4 y
8 M7 [5 f* b& W: j) R
) ]0 b; c! ^5 n3 X
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-12 20:02 , Processed in 0.550626 second(s), 51 queries .

回顶部