QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
% Y7 ?: z4 M( Y; o/ _5 I任务:使用PCA对图片进行压缩和重构。. h( R- s& z/ b$ n+ z
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。6 j5 n  Z9 q1 b4 v+ T
使用PCA进行图像压缩和重构
# _! Z3 q4 Y+ o- ]8 G2 O) q; N) Y假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
$ V9 C- J7 M# W9 v' ]! Z. @+ [: b& K' i4 b
% n" d0 {/ x! Q; z' N0 h& C以下是使用PCA对单张图片进行压缩和重构的步骤:
1 w0 D7 B; D# o4 V: U5 h, p
1 M8 Q* k+ }, {/ ~. M3 \; J- H& h加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。/ D8 J0 h7 E% w+ a
: N" R0 }0 q- i$ @+ b! T
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
/ f7 |8 }% p  H8 z; \; a8 }: N8 X& b; s6 \+ C
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    % h6 l1 x# c1 j, J& o: [1 ?
  2. from sklearn.decomposition import PCA* E1 v2 G( k! o/ d
  3. import matplotlib.pyplot as plt
    2 j8 ^( ]' [& C1 X( p; G( e! l7 h7 o& i
  4. from PIL import Image; x9 ?$ S\" d0 R8 R9 b' V

  5. ) Y; A/ N& ^$ N1 y' ~- l. o4 e\" W
  6. # 加载图片并转换为灰度图
    ( T: S, \7 g) I+ o* A: {
  7. image_path = 'path_to_your_image.jpg'/ P* i( U* Q2 D/ {
  8. image = Image.open(image_path).convert('L')9 n% }5 I6 u' e0 i\" v
  9. image_array = np.array(image)2 `2 x+ V# P) n2 J  P  f
  10. : C. l5 v# V5 m) X3 c- w8 N4 ^
  11. # 展平图像数组. A$ \+ ~7 |1 [% D# J' c  e
  12. h, w = image_array.shape- h- H0 _: H; s1 P5 Y1 K+ A! F
  13. image_flattened = image_array.flatten().reshape(1, h * w)
    : `1 t1 [3 `8 C/ R

  14. * [0 Z2 n1 T% K/ v' ?  j# H
  15. # 应用PCA\" b% f; |. p$ [9 K; x
  16. n_components = 100  # 选择保留的主成分数量$ g2 c9 s- {  S& }% o& F: r
  17. pca = PCA(n_components=n_components)1 ~! Q, `/ h5 H1 j6 Z  j
  18. image_compressed = pca.fit_transform(image_flattened)& x5 \$ H8 {/ S: I/ T. r. S  i$ e
  19. - \. c# n( A! m6 n' [) [( u
  20. # 重构图像
    ) ?9 W0 R  B  I7 Z3 y8 q* i
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)5 P' g* I8 p) k
  22. - t: J  \\" y1 Y7 V) n) q\" m
  23. # 显示原始和重构的图像
    + j1 \. d6 H6 ^- u2 ]7 k
  24. plt.figure(figsize=(10, 5)): _6 Z) f$ F+ u
  25. plt.subplot(1, 2, 1)
    5 p\" e/ R, f0 }\" p& Q& B
  26. plt.imshow(image_array, cmap='gray')
    \" L' ^) ]( x' o; }2 r, ?
  27. plt.title('Original Image')0 i+ }- t% w; Y0 O5 u( k4 o
  28. plt.subplot(1, 2, 2)
    $ W( q* q5 }( n! E4 s
  29. plt.imshow(image_reconstructed, cmap='gray')
    ( e8 q& }0 T8 y- U  R- S
  30. plt.title('Reconstructed Image')5 M/ z6 V6 l4 ^6 L7 {) V
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系  U( N" B8 s0 Q: o3 g/ t
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
- i  {/ u; \8 E$ M+ V) ]$ j, ?! i$ Z1 M. x5 F) `! o; k( k
尝试其他降维技术9 ^" M% ~8 q4 Y! A: B' d2 S
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
; i' \7 L% o* Z9 i5 K, J! y7 g# F  X! U: d; h4 }' e: G
随机投影(sklearn.random_projection)
5 x/ r4 j' U+ b3 r非负矩阵分解(NMF,sklearn.decomposition.NMF)
0 ?' s+ n& Y3 |这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
. R5 @7 m5 B* L  C: t, x/ L# e5 s# n, X; ]: I0 F: j

2 W0 P- [: q; h- Z( d4 l4 N- T: Z+ G- P6 p' F0 q$ M' X: K- q; U& f
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-6-14 02:13 , Processed in 0.409489 second(s), 50 queries .

回顶部