QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。7 \8 u' |% z) M! ~' S2 }
任务:使用PCA对图片进行压缩和重构。3 B& k# w: r; i3 i2 c; D$ n0 ?5 G$ Z
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
2 @' K: _- [* T. r1 C1 S- l使用PCA进行图像压缩和重构" p( H$ p/ o$ b* q# X, R. S$ N
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
" l: X; g6 D! I1 n6 \' O! \0 s8 a
$ k# x# `6 z* ]6 O& H7 S) t以下是使用PCA对单张图片进行压缩和重构的步骤:  C" y* o# n, u
. G# E; L# r. F9 `
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。& E( c6 Y" s/ ]
* @4 y9 n( k8 r& X( z
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
4 g7 C5 P$ H7 ]9 w$ l. c  y  H+ ?! W% [- j$ T
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    ' O+ h3 q4 O0 n# f- u
  2. from sklearn.decomposition import PCA\" Z' _+ B1 {* g) l9 M# Q4 M: u
  3. import matplotlib.pyplot as plt
    7 e' v% x) C! }& b, ~
  4. from PIL import Image- x2 J* a4 w+ H/ {9 V! _0 V- N

  5. 3 Q. O3 o! l2 _7 u& o, ^
  6. # 加载图片并转换为灰度图
    & P( \  t4 T, ?6 F6 `
  7. image_path = 'path_to_your_image.jpg'9 t4 l3 J$ i# f
  8. image = Image.open(image_path).convert('L'). V1 Q) u' W* {* @, c' E
  9. image_array = np.array(image)
    2 Z* ?3 _/ R7 e2 @& L2 z8 i

  10. 7 I- A! p* O0 I. J6 E; ]
  11. # 展平图像数组
    1 @  P6 B. N3 T2 b2 Y, n
  12. h, w = image_array.shape
    ! ~\" K2 X6 ^# N) C& Q' B! M3 b, \: E
  13. image_flattened = image_array.flatten().reshape(1, h * w)
    # [0 u4 {, p' I\" N3 y5 p4 r
  14. ' G0 C/ ~, \3 V0 Q* L2 D
  15. # 应用PCA
    7 e- N$ b% f0 r
  16. n_components = 100  # 选择保留的主成分数量- z, K; _, o  M
  17. pca = PCA(n_components=n_components)
    4 P1 Z! ~/ @6 B
  18. image_compressed = pca.fit_transform(image_flattened)( K; q; E8 C1 d' ~! ~7 t
  19. / q4 T6 x) `' M2 P6 \+ F* s
  20. # 重构图像4 J, `' Q: X  f7 b
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    # f7 Z1 P' n! o; C
  22. $ O* j/ l! ^/ n
  23. # 显示原始和重构的图像
    & A* i5 Z. Z; G6 T$ v! N
  24. plt.figure(figsize=(10, 5)): y9 X. G0 Z5 o& Y9 L\" q- v2 Y
  25. plt.subplot(1, 2, 1)) a) z$ C1 b# Y* e! C
  26. plt.imshow(image_array, cmap='gray')
    8 o# k* u7 z1 f7 ]
  27. plt.title('Original Image'): @! {( ~. A, H, Y1 o
  28. plt.subplot(1, 2, 2); ^& D. f! F' {9 C7 D4 z
  29. plt.imshow(image_reconstructed, cmap='gray')
    , }1 D7 m! p2 d, F, q- n
  30. plt.title('Reconstructed Image')) }% P$ G3 t7 M7 W4 F3 a+ |
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系6 Z/ E/ n. [# X
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
: w+ o/ e: `) I, V# \  f: t; c; i4 K8 C4 k6 |
尝试其他降维技术$ A2 P! g) i  u- m' y5 G
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:* n3 Y4 W& ?- t0 k) m% S1 L
- J0 K! X  q# R/ B7 m. f
随机投影(sklearn.random_projection)6 r$ k9 u$ z  k* E+ O& N) w1 M& ^! D
非负矩阵分解(NMF,sklearn.decomposition.NMF)
3 b1 K+ B) E8 o5 \. o这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。' b6 t! }! u- ~4 V

* o' V1 f/ J4 c# j% a- f
" x- g% i/ Z2 ~4 `* s3 S' }4 t; T% C; ^6 J. m
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-15 03:10 , Processed in 0.422771 second(s), 51 queries .

回顶部