QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
- q! f# ?$ h: x$ h任务:使用PCA对图片进行压缩和重构。9 [% v6 V: I* {, W% r
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。- _! a* m4 C8 i( X2 G
使用PCA进行图像压缩和重构. `0 F9 Y0 h# {. j
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。) G+ ?- j8 B# S- `- Q+ n( P
/ m* G5 p6 H3 a$ h
以下是使用PCA对单张图片进行压缩和重构的步骤:" k# |. e& \5 Y' j2 r& R2 b7 H

5 y* a; i7 q! `* r' C加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。$ k- @+ Y+ N% |# V6 [; k
) y/ Z, T+ T' K: Q, M3 C# B# W) z0 A
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。6 E$ u& z5 ?* D, M% _" P* Z
2 q5 c: \' X& P& a
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    : E  T* K: o4 U; ]3 D2 d2 J5 B
  2. from sklearn.decomposition import PCA' J\" I4 h7 a% Y; [3 e6 a
  3. import matplotlib.pyplot as plt/ {# L' U3 U( ]! k2 t
  4. from PIL import Image
    6 X, k+ x/ U) `; W/ P7 K
  5. 9 x1 P: r) G6 [9 b3 R; v
  6. # 加载图片并转换为灰度图
    5 t! ~- D; ]3 V% t& W
  7. image_path = 'path_to_your_image.jpg'6 |( t, i* Q\" R
  8. image = Image.open(image_path).convert('L')8 [9 ~$ S( \! h9 r+ p# ~
  9. image_array = np.array(image)
    5 W8 f5 D, j8 l6 Z8 y( Z

  10. 2 i& q2 \! [; Y8 Q$ V, m6 R. o
  11. # 展平图像数组, i3 ]. Z# R0 f2 m
  12. h, w = image_array.shape/ @8 Q* H  L/ D) P4 n0 m* ~2 E$ u0 s
  13. image_flattened = image_array.flatten().reshape(1, h * w)# g0 M' T* ]) ]% @5 F, v2 f\" T0 W

  14. 9 N7 a3 i: r! n  b/ H) J' j- ?
  15. # 应用PCA
    : b! _2 ]7 B! r8 q\" P+ D$ C* x
  16. n_components = 100  # 选择保留的主成分数量$ c7 |& X- Z2 y7 H
  17. pca = PCA(n_components=n_components)
    / u1 h7 w2 u* q4 {& A; \( V7 Z
  18. image_compressed = pca.fit_transform(image_flattened)
    ' L2 C7 {1 w  \

  19. / Z  H1 J4 i9 o2 P: Z* t0 R
  20. # 重构图像
      v/ B2 ^  R6 B, j( s
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)& O9 t; `& X! _0 r  h/ `
  22. . |* ~8 i; _; f* I5 A\" t: C' K' |
  23. # 显示原始和重构的图像
    ; s2 L- W( E# g) r
  24. plt.figure(figsize=(10, 5))) U; i& ]7 i+ `3 D& w0 L5 K
  25. plt.subplot(1, 2, 1)
    3 a% P( B0 S2 `2 j, j& R( r\" L. n
  26. plt.imshow(image_array, cmap='gray')+ @3 f3 n4 ~# t* }$ g! s
  27. plt.title('Original Image')
    0 Z\" P3 D8 [2 Z6 x2 h
  28. plt.subplot(1, 2, 2)
    5 [; W$ j# e2 \\" [) g. U9 I, m
  29. plt.imshow(image_reconstructed, cmap='gray'): D0 U2 W5 r' F7 c+ A7 V- ~7 u
  30. plt.title('Reconstructed Image')\" }3 t\" T! \6 d' q; n7 i
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系# m, h" A. a  @6 P& e; p" ^
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
: M7 I1 n( X, S' \
& [  \; N) _8 P+ [+ M尝试其他降维技术
$ M3 q6 I& m3 r: ^- X7 e  D除了PCA之外,还有其他降维技术可以用于图像压缩,例如:: R4 t% M4 I0 `# O) I: M! _$ T

( A" f- w$ D: H) g. f8 ^: k9 I; D随机投影(sklearn.random_projection)
6 z+ J1 S3 j/ E( E& Z* M非负矩阵分解(NMF,sklearn.decomposition.NMF)
: P3 H5 t5 t1 e9 F8 n) s3 X这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
" q: q- ]) H$ a: t% F
+ U& l4 ?; R% x, Z$ Z3 D# x# \$ k9 ~: l, [& R
+ ?- T8 j7 r" G
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-10 18:57 , Processed in 0.367726 second(s), 51 queries .

回顶部