QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
, o% ]( e/ d* O0 e5 j6 q任务:使用PCA对图片进行压缩和重构。
; a0 O$ ^$ e5 p; @- l& P" R% R- r& b挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
8 W# }& |$ W7 B使用PCA进行图像压缩和重构& e7 {1 _# h6 a2 ?* E0 u  b3 Y
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。1 K6 b/ _, t$ d8 n
3 E9 b7 i( o! M; B& }$ a5 ]
以下是使用PCA对单张图片进行压缩和重构的步骤:6 Y: C: \2 I! L  L+ j. L$ J
* g, R! @% N: O; T) X
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。' t4 c( l2 C# R/ `8 a1 b0 C" {4 W

# l: c$ r# O  s# q应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
( X1 Y6 b, D* }4 C7 {) J. U: J# g  n3 C
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    9 e7 N/ v- K( j\" Z
  2. from sklearn.decomposition import PCA
    6 u# Z+ u% ~! X$ x$ R2 l; }
  3. import matplotlib.pyplot as plt( c5 e6 M4 Z3 H$ o9 c. {
  4. from PIL import Image1 x5 E# B. ]* l3 f0 S! R

  5. % }% s0 k7 ?0 q4 h! I% p2 S6 i
  6. # 加载图片并转换为灰度图/ L  `) e: ?8 c2 f6 y9 W
  7. image_path = 'path_to_your_image.jpg'
    ' a2 S, T7 W8 F! g\" z
  8. image = Image.open(image_path).convert('L')
    0 j7 I% Y: n' z  D: D
  9. image_array = np.array(image)1 k# `6 ]! E; X+ @

  10. 4 S  e8 T3 s% ]% Q( o2 g\" V
  11. # 展平图像数组
    # d  ]$ D0 j9 M  G2 ^/ {+ d& [
  12. h, w = image_array.shape3 P( t9 V4 y/ m
  13. image_flattened = image_array.flatten().reshape(1, h * w)# \2 b$ p9 X* y  L\" l6 Y
  14. / D: Z4 N) u$ F( v
  15. # 应用PCA
    % C, |. I2 x% q: |) W9 b\" K' }+ j- |
  16. n_components = 100  # 选择保留的主成分数量
    # j. d4 a9 l$ L
  17. pca = PCA(n_components=n_components)
    4 f3 A3 o# V2 I8 v  N
  18. image_compressed = pca.fit_transform(image_flattened)
      n# ]  J4 s+ [3 j/ v  G: z6 c2 |9 I

  19. 1 ?2 o# m3 i/ y
  20. # 重构图像% X4 h; D) K\" _) l7 y4 ]
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    6 I9 N: `! c: f

  22. \" J7 M) \3 J. n
  23. # 显示原始和重构的图像& p! a) |: k; R3 s
  24. plt.figure(figsize=(10, 5))
    1 L- j, ~' @5 t
  25. plt.subplot(1, 2, 1)6 t! s6 p4 n4 ]5 y
  26. plt.imshow(image_array, cmap='gray')$ @+ ^' Y2 X9 `0 i8 l2 Y, Z. c
  27. plt.title('Original Image')% x5 Z6 Q# l7 a( m$ V0 H4 {8 O1 Q
  28. plt.subplot(1, 2, 2)
    7 [6 v$ r\" V* L
  29. plt.imshow(image_reconstructed, cmap='gray')\" A$ t- ~) T7 m- Q+ t/ A
  30. plt.title('Reconstructed Image')% W: p/ U1 `- J7 P: f1 I* a, B  z
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系$ K  v* d1 A+ a6 v. y/ k
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
* v1 j# D2 I* |9 X# t+ T& @
! g/ Z) H- p8 B尝试其他降维技术2 k* J* w- q& g  S- b
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:4 B+ c4 s+ z/ J- C
5 L3 e9 \+ c2 u9 U  h
随机投影(sklearn.random_projection)
7 h/ u5 ?6 M1 M1 @' s非负矩阵分解(NMF,sklearn.decomposition.NMF)3 \+ x8 m! {" c% m! }5 s: s, l
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。0 F2 m4 E! `5 O8 D4 c

* I" v5 U( X. x  Z: o# W- {/ y6 U1 l1 c# u# E  p6 M+ U- F5 y

2 @* Q) |( [  P$ J& U& ?
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-7-28 15:38 , Processed in 0.516119 second(s), 50 queries .

回顶部