数学建模社区-数学中国

标题: 图像压缩(主成分分析) [打印本页]

作者: 2744557306    时间: 2024-3-31 16:40
标题: 图像压缩(主成分分析)
数据集:任意选择一组图片。5 ~1 Z0 }/ R7 C2 u9 |
任务:使用PCA对图片进行压缩和重构。
+ _6 u6 f- M9 P3 I! }1 d挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。" E9 g6 n( z! R7 W: L0 c& w
使用PCA进行图像压缩和重构9 p/ G! U. w* F6 W3 X+ K
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。" h8 M1 a1 b$ [- r9 Y
2 \  V) F8 u6 `4 y9 V( m
以下是使用PCA对单张图片进行压缩和重构的步骤:
$ k" h! E) s% [: K1 b& y% g; i9 E
5 b/ E& W5 w: E* ~/ D加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
4 T% m$ G5 D# }5 b2 w/ e) X  E) P. V- ~
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
7 V* m- Y8 ]3 b
: C4 q! G0 O4 W4 G* \; a重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    , y- |5 ]% D9 j  c9 ?+ M0 {, `. G- F
  2. from sklearn.decomposition import PCA& v7 f: p2 J- q/ q
  3. import matplotlib.pyplot as plt3 n+ E" E4 b5 a3 F2 f  _
  4. from PIL import Image  Y% u4 h, A& h  Q7 l

  5. 9 x3 l, x- T( R+ m0 a3 R
  6. # 加载图片并转换为灰度图* G! ^5 `( q: K1 m3 Y9 d
  7. image_path = 'path_to_your_image.jpg'
    : ^, X" S! X4 @! K; m1 c
  8. image = Image.open(image_path).convert('L')
    # z9 M- L3 z) `, F
  9. image_array = np.array(image)! {" V; @6 V' B
  10. ' c7 ]" x! i8 g0 r
  11. # 展平图像数组7 {! D) U9 G. M
  12. h, w = image_array.shape
    # r2 q' V  y/ K
  13. image_flattened = image_array.flatten().reshape(1, h * w). `2 q( m% q+ ^/ F; E8 @

  14. $ @7 n9 h/ y- Q/ e
  15. # 应用PCA/ f" [( j, t( |1 Z! S$ c
  16. n_components = 100  # 选择保留的主成分数量. X% ^' x3 X3 P$ f8 m  {; t4 n
  17. pca = PCA(n_components=n_components)/ y/ g- }% l- L0 R4 W
  18. image_compressed = pca.fit_transform(image_flattened). Q5 g8 M3 u. E

  19. . L' Y. N$ w# _$ q# t3 V! R
  20. # 重构图像! ~3 G/ y9 N- T- Q. P/ n, K
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    ' a' Z5 F) }6 v8 R5 o9 m; ]3 j7 l% u
  22. ) w$ T( o/ l# l
  23. # 显示原始和重构的图像
    : V9 D' l4 D% v. w0 }  l$ z6 k
  24. plt.figure(figsize=(10, 5))7 P, H8 t, v* |
  25. plt.subplot(1, 2, 1)2 o* w6 z% L; u: l
  26. plt.imshow(image_array, cmap='gray')9 \# o+ k# p6 [$ c8 {
  27. plt.title('Original Image')' _0 r+ M: L7 ?* L) I, H
  28. plt.subplot(1, 2, 2)- m1 W! z3 K, Z4 W" i2 Y
  29. plt.imshow(image_reconstructed, cmap='gray'), f) u: P, a: V2 M  |) E$ l
  30. plt.title('Reconstructed Image')
    ; O5 b5 t  h  n! ?+ r0 O- X6 \
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系# g0 k: E: W. |/ g
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
: N! Y% R- E; z- M+ w: `: B* F
4 L, q* c. j- w% d0 o% h% |尝试其他降维技术3 {% i% e/ A* e+ O4 q- ?/ r& q) ^
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:0 [1 x' A# G# S2 l, K! {: ~
3 T: j& F+ ~& Q  y% a8 M$ Z
随机投影(sklearn.random_projection)
( F# I: k  e/ P, h2 b' C非负矩阵分解(NMF,sklearn.decomposition.NMF)2 W: R+ `3 [* E
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。+ T7 \, i2 ?1 K! F1 g" N
5 A0 @1 `8 u  d9 }& T. L5 F3 C! V
. m1 z1 x- p+ ~9 L- a( G" J3 ]

+ w* o- }! C+ e+ w( E




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5