QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
: ^/ H/ e2 A# I( u. L$ r任务:使用PCA对图片进行压缩和重构。. u; }$ f+ |+ Z5 ~6 ~
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。! [. v1 l7 s  b/ v' m; w
使用PCA进行图像压缩和重构
& _" j6 d# _6 n6 v假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。) z$ D! P+ w( D7 l6 Q
) R) u1 S. x6 d
以下是使用PCA对单张图片进行压缩和重构的步骤:, |' o7 [0 Z" L* r6 t. ~, K2 B

4 @; P7 ?) k2 c/ a5 _加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。$ P0 ~$ y. {) S! J
. |( ?* J% K7 ^5 \: j! L0 l
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。$ |' O/ |  g' Q# F3 T; S

* Q8 n* ]5 b. a9 v) Z- x3 k重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np9 O: M( g$ N- d8 s; i
  2. from sklearn.decomposition import PCA9 X( n& f; S: {; p) t1 j7 I
  3. import matplotlib.pyplot as plt
    4 p8 @\" G$ N- Z- N6 O0 C
  4. from PIL import Image
    & B8 u! y+ w; T' R& `
  5. 2 m0 W: B2 g9 M' P6 M; F
  6. # 加载图片并转换为灰度图\" |0 U' Z+ L! [8 t
  7. image_path = 'path_to_your_image.jpg'& E5 c  ?! ^3 ]% `5 L
  8. image = Image.open(image_path).convert('L')  `; v* [% s  b) J
  9. image_array = np.array(image)
    ' C6 ~7 T2 f6 N; L
  10. \" d* f( b7 f5 d' j
  11. # 展平图像数组
    * _. A3 m; n6 ^1 x
  12. h, w = image_array.shape
    5 b+ h5 z# n# C\" M/ l/ [
  13. image_flattened = image_array.flatten().reshape(1, h * w)
    $ t2 W: s% [2 i0 Z5 ~  O
  14. 2 U. E\" F8 _2 j# H4 z5 a  a\" {
  15. # 应用PCA* K' g) g4 U) M. }: e# x
  16. n_components = 100  # 选择保留的主成分数量, s) A4 d, O  i2 o
  17. pca = PCA(n_components=n_components)' o\" G4 _# Z8 I6 A2 B
  18. image_compressed = pca.fit_transform(image_flattened)
    ; B5 a: h. x8 j( J4 ?1 F3 q* `

  19. 9 n) Q5 S9 M8 h9 a6 Q1 |3 K
  20. # 重构图像
      n! ?4 [$ K2 m0 c6 I
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w); n( n+ v8 S0 j9 B

  22. ; q3 K# C9 P! g' o  O, i\" c
  23. # 显示原始和重构的图像; |' l. k; M8 I\" c
  24. plt.figure(figsize=(10, 5))
    ! d7 C9 p+ {9 c
  25. plt.subplot(1, 2, 1)
    . `) B: u7 ]% P
  26. plt.imshow(image_array, cmap='gray')8 x8 b2 h8 u/ X
  27. plt.title('Original Image')8 W\" e5 J9 `$ E
  28. plt.subplot(1, 2, 2)
    $ ~8 H0 J0 R5 s+ q( t) w6 S
  29. plt.imshow(image_reconstructed, cmap='gray')
    % S# z* I; `. H1 i6 ^( U2 p' E; V6 J
  30. plt.title('Reconstructed Image')
    ; T8 K: v6 H1 I( C
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系& Y! m' a( k) U/ L8 @
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。7 C$ q0 Y7 @- ?  [4 F1 T
0 A0 m8 I6 `7 H
尝试其他降维技术( l  H: a9 Z$ @0 ^
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:5 G" @; l0 _; `
# l5 h4 t$ b( T" E1 k) l0 d
随机投影(sklearn.random_projection)- Q0 h/ w" u7 y! ]8 Z. @/ F
非负矩阵分解(NMF,sklearn.decomposition.NMF)& G6 b, ]* O- b  j" }6 i5 S& h
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。$ ?1 E0 q) S8 C4 ^! }; `
. \0 C' T/ d3 w* O7 c# ]$ O

' n8 S8 w- T0 N+ d/ ~8 B- r  l# ?' ^* M* h0 r6 s, d6 ~
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-2 16:07 , Processed in 0.420976 second(s), 51 queries .

回顶部