QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。+ D8 H5 O7 {, \
任务:使用PCA对图片进行压缩和重构。
8 \) q/ m& `. X挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。) \! ~& ]3 g5 I) d/ F$ v9 [
使用PCA进行图像压缩和重构9 x* E  u/ o) G# e, j
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
- E1 }. j2 J/ ]2 Z: D/ W6 W& O2 m/ L9 }8 u: _. l
以下是使用PCA对单张图片进行压缩和重构的步骤:) ]" }3 L! y. o3 M# a8 g: `' k6 b' @
# o9 F6 f  K$ [' ]6 C' A
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。4 R4 E3 @1 x6 [5 s9 y3 U, `. I6 j9 u# S# J
( V. F1 F, u8 ?0 J: {
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。+ D# l& i7 k' f3 \2 Q8 x  |
" }7 r( I6 [6 K: m0 M
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    $ C9 C  ~! r6 T3 W2 i
  2. from sklearn.decomposition import PCA4 R1 p* i( G% v  g8 |
  3. import matplotlib.pyplot as plt5 a' U1 Y* j* J5 v; E; v
  4. from PIL import Image
    1 t6 R1 ?5 k: }/ w8 k& \  ^4 I: c5 F& E
  5. 1 V  }% K9 l7 H
  6. # 加载图片并转换为灰度图! C, {; x! d5 R1 X
  7. image_path = 'path_to_your_image.jpg'
    9 J7 U  |\" Q0 }5 s+ D, U7 ?
  8. image = Image.open(image_path).convert('L')
    # s5 D5 F- J/ v8 r3 u! [
  9. image_array = np.array(image)
    5 y/ |( G8 w3 l5 o8 T# H

  10. : s6 C+ H# p! I8 ~& [& A
  11. # 展平图像数组& E% c: p( A0 q1 O4 H5 x1 L
  12. h, w = image_array.shape
    4 X\" l' ^; u, i
  13. image_flattened = image_array.flatten().reshape(1, h * w)\" G) c- X+ A$ |7 y\" b6 _- S$ d: Y

  14. # `9 b1 w4 D8 K: k8 s1 N0 q% M
  15. # 应用PCA
    . k; N6 @& B5 H4 j) C* W8 H
  16. n_components = 100  # 选择保留的主成分数量
    # J\" |$ [; D1 V; r3 ^$ S' v$ l: i
  17. pca = PCA(n_components=n_components): w7 t2 |$ X2 {/ m0 }
  18. image_compressed = pca.fit_transform(image_flattened)) n- t& |% l6 T- a+ Q( `# R

  19. 8 X& |, K) O8 R# V8 U  ~
  20. # 重构图像5 d' f$ Z$ x: T8 O\" F
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    9 i% E0 y5 `3 u7 N
  22. 7 I\" |  K/ x; e5 d7 X
  23. # 显示原始和重构的图像9 t; F- ]) a  J  |
  24. plt.figure(figsize=(10, 5)), X/ C% X2 C7 M) |
  25. plt.subplot(1, 2, 1)% D* i/ R) e8 D5 g0 B
  26. plt.imshow(image_array, cmap='gray')7 B  E6 U' e  Z% t4 o7 `2 [\" U% I2 M
  27. plt.title('Original Image')
    * R, Y  w3 \+ `; c. h9 x* S# M3 I1 z; A
  28. plt.subplot(1, 2, 2)
    7 a. k0 k& S8 j
  29. plt.imshow(image_reconstructed, cmap='gray')+ H1 F7 c8 A# J0 l
  30. plt.title('Reconstructed Image')
    2 {\" B/ A% j3 F9 Z/ |2 L+ P
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系. s- C, ^3 K! W
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。6 g5 z4 P* k) |: p! |
; ^+ m3 {0 p7 {+ N
尝试其他降维技术: Q: B: @+ U" \% F0 B* F6 Q3 w6 w
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
1 V- ]) H7 i+ h" z2 h  [) d5 D# \( l& ?. M0 ]+ m- T
随机投影(sklearn.random_projection)
3 n5 J+ P& M/ g, W+ r, F非负矩阵分解(NMF,sklearn.decomposition.NMF)  C2 v1 k( r& i  r5 b
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。# U1 I4 s/ ?6 }( q! N/ g7 [

0 e8 S( d  W5 X. t. \
# _2 M3 T- @4 ]. s; N1 k& h1 m
& B  z, ^5 V/ B$ `' S' q
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-8-25 22:08 , Processed in 0.383971 second(s), 51 queries .

回顶部