QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
- S  A8 M9 c/ F7 X: v  [* u& T* o任务:使用PCA对图片进行压缩和重构。
, w5 @% E/ l1 c- d挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。2 {: h1 _- k9 U- H* [
使用PCA进行图像压缩和重构
! _- B" E/ v$ S4 a+ u% y, }假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。$ v6 _5 q8 J. }& M/ j! U0 `) _1 m5 ^
3 e- w. [) }9 w+ N3 a
以下是使用PCA对单张图片进行压缩和重构的步骤:
6 a5 k9 ?4 W5 ]/ I
0 E, \% a8 @# D% O; }* G7 I7 ]. k加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
# @9 D( ^, k$ R5 [
% \$ ], Q! A' j4 C! X0 ?; O应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
. k/ r+ V) w3 o3 Z9 O! }! ~# m3 g6 L+ h& k' I* N
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    % R- w# x+ R) m  n1 |- a- c8 f0 J! f! t\" R
  2. from sklearn.decomposition import PCA; [8 {0 i6 R5 i' {\" _
  3. import matplotlib.pyplot as plt
    + W/ v% R  x  ?$ T\" j! }7 F
  4. from PIL import Image( v% a1 x  v3 }8 g

  5. \" H0 w1 u8 ?, ^- e: n1 Q5 v3 V
  6. # 加载图片并转换为灰度图
    ) S( f: Z0 }* r1 Q/ t' m
  7. image_path = 'path_to_your_image.jpg'$ L% q! l5 S9 b  Q9 F( i' b
  8. image = Image.open(image_path).convert('L')7 C4 [+ \2 A4 r
  9. image_array = np.array(image)
    : a+ x# C/ \& H* m) L* N

  10. % m/ k+ l* G2 ~2 ]. }0 h; s2 m
  11. # 展平图像数组
    \" N9 z* w0 q; Y: P+ y( J/ s% ]
  12. h, w = image_array.shape
    % _\" @; [6 V) `. a' j
  13. image_flattened = image_array.flatten().reshape(1, h * w)$ n& c  k$ s' E% A& d8 V+ K
  14. \" n6 Q# n; u+ u* i  `* R' {  C
  15. # 应用PCA
    9 h* L, D. }8 G- ?$ {% B( @
  16. n_components = 100  # 选择保留的主成分数量9 M8 S4 i\" N( d( k! r\" `6 M+ ~1 `\" I
  17. pca = PCA(n_components=n_components)3 I/ d- R( B9 u4 e& l4 X+ @
  18. image_compressed = pca.fit_transform(image_flattened)) K, H2 {\" y+ g, |8 }9 w( b\" E# Q( J, X5 b
  19. 3 j# r1 O6 G* ^+ f
  20. # 重构图像
    % }$ v& o# k: L2 T1 C7 j1 a/ x0 R( d
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)6 C3 Y4 c% P. K1 o8 v& k& L1 s

  22. 0 B: |5 {( M( E$ @
  23. # 显示原始和重构的图像
    0 V' T1 |* }1 A) O
  24. plt.figure(figsize=(10, 5))
    , B- E$ b, q; U4 O. m! f\" O\" E2 f
  25. plt.subplot(1, 2, 1). _' u5 K* d\" j& Z8 b
  26. plt.imshow(image_array, cmap='gray')
    ' T5 H! i% e$ L/ |
  27. plt.title('Original Image')
    ) u, H$ R9 x; u
  28. plt.subplot(1, 2, 2)4 _8 B\" H! V; @4 g3 k' N
  29. plt.imshow(image_reconstructed, cmap='gray')
    5 s! Y& m% `) o
  30. plt.title('Reconstructed Image')
    4 T) K8 E* h; t
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系
* F- I8 [- v; e% E压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
4 h# b3 R- m, Y, K8 u; q3 p
! s; K9 f7 f( _4 e' K% h% u+ G0 [+ i& \7 `尝试其他降维技术# y& p2 h) }4 |
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:: |% F! ^5 Z& X7 N
; m1 U3 a8 P  G
随机投影(sklearn.random_projection)
% ~5 C% _! J' a. O" f3 X5 K非负矩阵分解(NMF,sklearn.decomposition.NMF)
. @( {5 i- j5 t6 P+ F这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
0 t6 n+ k( f( ]9 t
5 n0 K& h: J& e6 h6 [
# i# z3 P5 g+ ?5 B/ q' B2 Y
. Q/ P& b0 C1 A: @
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-6-14 23:26 , Processed in 0.435045 second(s), 51 queries .

回顶部