QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
! V. u7 j6 e4 H; D  f任务:使用PCA对图片进行压缩和重构。( u3 D) k4 {- u) o$ b
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。) l  n: ~. T, |9 {
使用PCA进行图像压缩和重构
7 F' U( q! j# J* }+ \' f* Z6 @假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
- M( e+ y& z; D* c: M* B* Y! W
% a7 r0 a! d" n1 N9 Q以下是使用PCA对单张图片进行压缩和重构的步骤:
7 [  u8 f0 U+ e- Y
) J9 A4 x7 e' @2 ]4 O加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。: _' C+ H# C: Z" }/ ^! ]

, l) a. p5 m4 e& Z# S* `应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。( z4 W. I# f0 L$ l  }: h1 Y
. e' l. e& |( [% |
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    6 ~, j' F; T0 e2 j: i$ r
  2. from sklearn.decomposition import PCA1 }# f+ f& Q6 v
  3. import matplotlib.pyplot as plt6 Y. Y8 F2 `7 V8 T
  4. from PIL import Image, V0 A/ R: N6 D; |0 P
  5. : J& e* F; @: l( X
  6. # 加载图片并转换为灰度图
    % b1 @- v) r/ M
  7. image_path = 'path_to_your_image.jpg'8 j$ V7 q2 n8 v. e
  8. image = Image.open(image_path).convert('L')! E  d5 h3 ~* ]. g+ Q! S
  9. image_array = np.array(image)5 l- r2 @/ i1 V  [7 ^

  10. ) R! l. y0 F) ~0 A  W) D) t$ E
  11. # 展平图像数组. D- t; M+ V5 x- C: t5 r: `, Q) N
  12. h, w = image_array.shape
    5 |% c3 r* b+ L( G- B
  13. image_flattened = image_array.flatten().reshape(1, h * w)' W* X9 U5 ~9 n, [9 ^; Z1 \
  14. ( ?. i$ _\" Q5 e4 m. W6 y$ z
  15. # 应用PCA( _& z  G9 O8 m  y2 C6 a4 {% T
  16. n_components = 100  # 选择保留的主成分数量( O3 C\" L7 ?. E1 n: f
  17. pca = PCA(n_components=n_components)% v) O; _& r# u/ K1 x6 ^7 ^
  18. image_compressed = pca.fit_transform(image_flattened)3 c' {) `) W9 X0 x

  19. / c* W. O% B# o' \0 R
  20. # 重构图像
    4 }6 k/ O% k6 w3 j( n8 a) K: O
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    \" l- r: V- ?1 O  |7 [' }

  22. ) d7 c7 x' x( [4 j7 v
  23. # 显示原始和重构的图像
      h2 b( Q1 E! Q( b3 t6 i5 w
  24. plt.figure(figsize=(10, 5))
    ' Z$ f1 x$ d4 l: w8 `
  25. plt.subplot(1, 2, 1)8 ~2 R+ L- T7 V  q* ~8 }* C( m  m# {
  26. plt.imshow(image_array, cmap='gray')
    - M1 ]3 _  @$ Q1 Z6 n4 E6 ]2 O
  27. plt.title('Original Image')# ^. X; w0 K5 D* U
  28. plt.subplot(1, 2, 2)
      s7 Y3 X4 c2 I1 b9 i: r
  29. plt.imshow(image_reconstructed, cmap='gray')
    ( s4 l7 g- `- W) ]. b, q- V
  30. plt.title('Reconstructed Image')
    : R5 u+ o# B$ a2 ?$ k& O
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系
; {9 \& p* m9 b1 s压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。5 C' r, `- Z  ]. X
, s5 g9 H) M  ^" U6 B
尝试其他降维技术
5 S7 K2 y8 U6 A* {1 C$ G! C( W除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
. }* T! i' x( l( k. B3 O4 Y" R1 z$ c, {
随机投影(sklearn.random_projection)2 j6 b/ ^; w1 E9 x% g! z: X
非负矩阵分解(NMF,sklearn.decomposition.NMF)
8 b* k7 z$ \, q5 a这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。- C8 O: o6 d! Z7 A

  V' z( x* L1 F8 _0 w2 W$ A1 v# W  n
3 [' [. p4 k: G* \* p! w- L$ q- f: G1 O( s
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-8-25 20:50 , Processed in 0.385931 second(s), 50 queries .

回顶部