QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。( P& J7 w6 Z3 M" {1 s9 N
任务:使用PCA对图片进行压缩和重构。& j! M, U' E. c) m
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
# Z2 h% t0 W: h5 y) O+ I: o使用PCA进行图像压缩和重构) W% B% g+ u. K; p- p1 i
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。$ }, }3 ^& h- _& I3 U* q7 L
) O# \5 @! k( A# _4 C
以下是使用PCA对单张图片进行压缩和重构的步骤:; i3 l/ [, i4 j5 m$ f  T

' y! g% k5 V/ z2 i# ^( y% r加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
7 B1 X: }) r6 z8 E7 f1 k* w( _: L; v$ L9 l9 |* q+ K
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
& d6 p' H% {8 d7 c. {, R! S  a% z
, U0 I& F/ c4 |8 J( t2 U重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np& e) q9 N7 o0 k# U% x- u+ q( R
  2. from sklearn.decomposition import PCA, m3 W& f9 ?0 @! l; P- O$ Q- B\" T
  3. import matplotlib.pyplot as plt9 q! c% C  U' w2 z+ a
  4. from PIL import Image3 B# @8 N0 W4 [
  5. & w/ e8 Q& ^8 I4 K. [. W
  6. # 加载图片并转换为灰度图
    2 z6 M* {& b* `4 B, S\" f+ O
  7. image_path = 'path_to_your_image.jpg'
    \" X7 K$ ]! N# a7 [
  8. image = Image.open(image_path).convert('L')3 p5 Y# M6 ?6 }! Q: X6 I# g* M
  9. image_array = np.array(image)
    # C4 W' N9 O. }
  10. 8 p. d# ?5 Q* Q3 x2 a/ s6 z
  11. # 展平图像数组9 \2 c: X, T* h
  12. h, w = image_array.shape* J0 _3 U& M8 f& L% W- k
  13. image_flattened = image_array.flatten().reshape(1, h * w)0 `  Z6 ^: r9 ]3 q

  14. & G, I5 p4 w' Y9 h\" w  q4 v7 I, R
  15. # 应用PCA$ B# @  t- X! i, r! ~
  16. n_components = 100  # 选择保留的主成分数量
    4 t6 t- l5 a$ F: r3 k5 V' d) Q: N& L
  17. pca = PCA(n_components=n_components)
    9 A8 L$ Z4 m7 b' r! ^! @4 z
  18. image_compressed = pca.fit_transform(image_flattened)
    ' u( B; j\" j& z- U* @% \
  19. $ I1 m2 I: _' V% {1 R
  20. # 重构图像' m' [6 w. P/ m5 I\" k: ?/ |& K: K
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)$ V) o6 s, I. Z% }& ^
  22. 7 H' W# B$ c6 o9 f
  23. # 显示原始和重构的图像
    ; X- S* l6 @8 V/ s0 `' J( a
  24. plt.figure(figsize=(10, 5))8 O$ }  G, a, O# r/ d: W
  25. plt.subplot(1, 2, 1)9 F6 c6 }7 J  p( q+ K- H
  26. plt.imshow(image_array, cmap='gray')
    ) Z9 j6 b+ b5 J6 [% I; ]
  27. plt.title('Original Image')
    \" S0 x. K% v: f; Z
  28. plt.subplot(1, 2, 2)
    * k8 Q8 d/ b% W% ~5 K1 s2 m
  29. plt.imshow(image_reconstructed, cmap='gray')
    1 B; k3 w; j5 ?; r\" a
  30. plt.title('Reconstructed Image')
    \" ]6 i- G+ h  ~
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系8 l, J' L2 V, L- W5 ?
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
8 U. w  a- N+ h- K! x: @
. E5 C" w' S8 Y" |8 o; e  _尝试其他降维技术
' f3 F- {. l9 _( ]# E6 C% G$ a除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
* `4 {% A/ _- ]" `' U9 r) ~1 B# b9 Z* V% ^% \0 q
随机投影(sklearn.random_projection)" p1 e' R. F  _" H! C9 A
非负矩阵分解(NMF,sklearn.decomposition.NMF)
% K( @+ b( Z% q' b: P4 K" X( W4 X这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
2 I7 _' ^7 J2 X  e) M  V- C, ?* X1 I
  t# _3 q+ ~% U7 D' v: D: n9 y) X$ A6 w* z& ?+ \0 |1 S
, T$ G4 Q* a- E% v
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-20 10:58 , Processed in 0.415991 second(s), 51 queries .

回顶部