QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1198

主题

4

听众

2976

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。* H- r* ~$ I3 i
任务:使用PCA对图片进行压缩和重构。' ~) \8 y% y9 a) j0 ]; w- c2 G0 v
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
; d; g3 z9 i& s, Y- P# y- ^使用PCA进行图像压缩和重构
1 d* J; k8 N# B! ^+ d9 Z/ _5 U假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
  M1 U  v( N) J
5 U9 X  e- r$ e+ @3 x  P# y6 u以下是使用PCA对单张图片进行压缩和重构的步骤:
! `1 o. k9 ^) v! s* d' ~# \
/ `* i1 E/ V) D加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。  ^+ j1 y1 l2 ]1 h8 x

1 Y. o, c6 j% n3 Q0 E+ ]应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。: G. j$ f8 E1 D/ o8 o

* V% M& S% {4 }- R' z! r8 e重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np' M\" g$ @# F( d5 |( k
  2. from sklearn.decomposition import PCA) `, f& h2 s6 g* ?! x
  3. import matplotlib.pyplot as plt
    ; z5 F7 L$ _; l2 b  \9 _
  4. from PIL import Image
    % k1 M) J: R7 Y! q) @
  5. 0 X$ W1 X2 h2 e( w
  6. # 加载图片并转换为灰度图0 _' ]# {1 m) r
  7. image_path = 'path_to_your_image.jpg') p0 T4 Q' n- W3 U. j% Q
  8. image = Image.open(image_path).convert('L')
    ; K- n( x! C/ s7 _6 \+ C2 X* [
  9. image_array = np.array(image)1 K8 \3 K+ c! _) u. M$ G$ {\" D

  10. : G6 K. |7 _: B
  11. # 展平图像数组* X' g- e: H1 m9 V7 |& U
  12. h, w = image_array.shape
    \" [: Z# V. ]& S$ e$ D  w\" R% _# F$ J
  13. image_flattened = image_array.flatten().reshape(1, h * w)& g3 t6 v; \& G. H# h
  14. ; Z; r/ N' `' l( N  b5 v6 p
  15. # 应用PCA
    ; b- a* u& g/ J# h. g. h2 i6 X- j
  16. n_components = 100  # 选择保留的主成分数量
    ' M' u- Y& |' K/ Q9 v5 U+ ~$ d! e3 H
  17. pca = PCA(n_components=n_components)
    / f5 f, ?$ Q7 \  K9 [. |
  18. image_compressed = pca.fit_transform(image_flattened)! }2 m; Q$ \+ i; d7 X7 \( U7 M
  19. , O! P% X: J- z6 o. R$ k
  20. # 重构图像
      Z+ U4 u5 ^0 d  W3 U) F
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)+ `9 K9 t- I: Y
  22. ! |8 z  M+ c  L5 q' O8 O5 H, j  [
  23. # 显示原始和重构的图像. F6 v; V4 S! Q
  24. plt.figure(figsize=(10, 5))  `- v8 o$ V7 S. m/ Q) P$ ^
  25. plt.subplot(1, 2, 1)
      l* D  a7 F: i  B+ z8 c! Y: U
  26. plt.imshow(image_array, cmap='gray'), ?/ m3 y, A8 A0 u
  27. plt.title('Original Image')
    ! ?5 J0 k* v7 n! P
  28. plt.subplot(1, 2, 2)
    + s( A4 @( i* [$ N! [0 u
  29. plt.imshow(image_reconstructed, cmap='gray')1 R$ D- C0 c$ [0 j* e5 [1 q\" y/ W
  30. plt.title('Reconstructed Image')
    ; m0 C5 {' S5 x* g+ W
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系
8 {; B- N. j# m3 `+ g压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
+ m* R! m5 I4 p# z% }1 b' ?; M: Q* U4 V* c6 a/ Q, U% z- v
尝试其他降维技术; x3 u: t1 _( ~1 m. v  y1 }9 m! W. j( x6 s
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
5 J/ S' Z4 C9 w3 X0 m6 y  s4 ^
  d% a# Z: ]( B. v& F随机投影(sklearn.random_projection)# I8 J9 W5 w" X4 f
非负矩阵分解(NMF,sklearn.decomposition.NMF)
+ w3 A, }. e2 i  \9 ~, v9 L( O这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
, n- h8 n6 j# Z! ?6 K7 ?6 d& U; g
0 y& @% X+ m. ?' }' Y/ b
/ w1 s6 }, C- x- M2 @
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-9-12 14:54 , Processed in 1.687578 second(s), 51 queries .

回顶部