数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-31 16:40
标题: 图像压缩(主成分分析)
数据集:任意选择一组图片。0 j$ D0 u" W- N( o4 n5 l6 g% r
任务:使用PCA对图片进行压缩和重构。
, l" _7 `/ F" D' E挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
8 d0 o3 H; f3 C) o使用PCA进行图像压缩和重构  [9 B) m) X% L7 J9 B
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。# a$ a& O  F% s% E, M+ i1 \
7 R( E9 P1 R# P7 j$ k1 |
以下是使用PCA对单张图片进行压缩和重构的步骤:1 x" p8 d4 l. a$ O+ L! G  [- }. W

" ?' {& t4 y: ^8 s: l/ x* f. i+ J6 x加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
  k7 y/ w" {9 S5 Y% G0 l0 ^1 N+ v3 q2 v2 F  I. }, [
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
$ ~! ?4 {. U) r$ {) M1 _6 ?: B# o" N# Z! o7 H* W& ~
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
      x; q. \# F5 Q$ M8 M! H; q
  2. from sklearn.decomposition import PCA/ k/ v6 k, x# S( `' d# D& Y( J( k
  3. import matplotlib.pyplot as plt
    - a& L1 E: i5 b2 `% T1 p2 @3 E, r( N! E+ ]
  4. from PIL import Image
    - T7 R- G9 d4 e% X

  5. & ^$ M& z. B( V% S
  6. # 加载图片并转换为灰度图/ ?9 y$ r9 l% \
  7. image_path = 'path_to_your_image.jpg'
    1 L. a7 S+ ?: S+ G; g
  8. image = Image.open(image_path).convert('L')1 U- d& C1 ?3 y7 B. z
  9. image_array = np.array(image)
    # u, t! R4 Y9 s2 g
  10. 1 V, o  @3 E- q
  11. # 展平图像数组' Y* p# c  w+ s9 q
  12. h, w = image_array.shape; C, J* j/ o! W
  13. image_flattened = image_array.flatten().reshape(1, h * w)7 A6 k/ S% c# D+ @: y

  14. 4 D) S1 I' Q1 k2 g0 s
  15. # 应用PCA0 a" v, W8 n! Q% f* ~
  16. n_components = 100  # 选择保留的主成分数量
    4 d4 V7 \3 a" }3 c
  17. pca = PCA(n_components=n_components)9 i  h: V& t  [' c  a1 k& L
  18. image_compressed = pca.fit_transform(image_flattened)
    " d9 l+ M  Y& [  ^) q. b

  19. , y# U* ?$ `1 B4 r
  20. # 重构图像/ c8 ]- v) c. C' b
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)* C) j3 v" M8 x# A  F8 |
  22. + _; I1 ~# I. u8 Z7 }$ q
  23. # 显示原始和重构的图像4 c% ~) ]8 G: a( s% X! q% a2 ]
  24. plt.figure(figsize=(10, 5))
    + o# O! z! S  Z$ N
  25. plt.subplot(1, 2, 1)
    ( U: o* h) ]) F' W% ]
  26. plt.imshow(image_array, cmap='gray')8 t; S" p$ d$ c' Q- z) X
  27. plt.title('Original Image')
    7 d! i) n2 m1 R9 E9 B
  28. plt.subplot(1, 2, 2)
    ; p. R! E) f& _: W/ c# N
  29. plt.imshow(image_reconstructed, cmap='gray')
    * Z! i8 k3 e- ?) W* J5 n4 M9 S. D
  30. plt.title('Reconstructed Image')8 A" T& b; H1 r$ [5 R
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系
2 ~. E4 h' l- l" {2 ~% x' c7 Y压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
9 Z8 h4 ~( f8 E/ P2 p3 }
( r. O6 k% ]+ r; v- P0 X& R尝试其他降维技术
9 }5 w2 z, I0 [* |: N2 I" e" m除了PCA之外,还有其他降维技术可以用于图像压缩,例如:/ H4 A& R+ J2 P3 V- n

- k9 }5 v- B0 h2 o随机投影(sklearn.random_projection)
7 j  F' Z* B2 E非负矩阵分解(NMF,sklearn.decomposition.NMF)
6 Y; L! s: h( _- n- D这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。+ w, n, h8 A' R1 x3 ?1 V

6 G) a% A" S$ P( F9 H& E8 O/ @; j0 U% k  T5 I$ c+ I

9 c6 n& c) N9 x$ O- {7 p




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