QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |正序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
* p+ y$ Q9 r: L  s任务:使用PCA对图片进行压缩和重构。
6 N: u: K: d* C1 g; |挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
, i! Z# \! P9 ?使用PCA进行图像压缩和重构7 c& b" F, U4 U( [' J" {2 O- d; E
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
9 L& F: B: S+ r# F4 l. [  s/ k- v: S! U3 S, j3 Y8 v: u
以下是使用PCA对单张图片进行压缩和重构的步骤:7 d1 L6 r0 [: @

7 f& n6 L$ |  ?& l9 n" f( |加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
* Z: k  F0 w' n
2 n% b7 B! I+ l* v# |* }8 H应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。) s, u+ p1 F9 M) f; t0 x# [1 S2 s

  `& f; t$ w& t" h, w$ l3 [7 Z重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    . h- ]3 k( u! `2 D! g4 [4 ?
  2. from sklearn.decomposition import PCA
    ' K9 y( u' c7 i5 t) H7 |
  3. import matplotlib.pyplot as plt
    6 h; N4 x- p7 s$ Q
  4. from PIL import Image
    2 X0 [( [& g/ a$ A& P9 Q1 ?' {: E
  5. 6 f& l3 w4 _) P3 _
  6. # 加载图片并转换为灰度图* C. K7 X6 Z, Z7 ^7 P7 d7 X$ }
  7. image_path = 'path_to_your_image.jpg'
    . J9 e' ^/ e$ J( ?; k
  8. image = Image.open(image_path).convert('L')
    ) e5 N: Y9 J& _\" M. {* E. ~
  9. image_array = np.array(image)+ O% P( B* g( f7 i! L/ z5 c
  10. ) i0 o  M* z7 r+ e5 p
  11. # 展平图像数组' K2 d\" D3 j& S& G
  12. h, w = image_array.shape
    $ K6 ]8 b# o& L) G
  13. image_flattened = image_array.flatten().reshape(1, h * w)- s: C/ I+ T& V, X
  14. % m5 y( H7 q' s+ M$ K- _
  15. # 应用PCA2 f; [$ h: Z2 `% D6 f  \* P$ E
  16. n_components = 100  # 选择保留的主成分数量
    ; P5 {! X' U, N
  17. pca = PCA(n_components=n_components)
    3 a: s5 k6 V+ t* a4 X' }
  18. image_compressed = pca.fit_transform(image_flattened)9 ^. _, v9 U' H8 S$ ]* {& d6 b6 k7 V
  19. : K, L* k# P; H9 {/ r/ j; E6 W
  20. # 重构图像5 s! j% c& z' j9 Q2 U2 {& j
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    2 x' w6 e& j3 ]( Z

  22. 8 ^7 Y\" p  W9 G# L6 {; I, j
  23. # 显示原始和重构的图像  ^2 e# p) @7 P. b2 v' i
  24. plt.figure(figsize=(10, 5))5 i+ P. D\" V5 ]8 f! O! H+ y
  25. plt.subplot(1, 2, 1)
    2 S+ j! c$ S: N\" j& J
  26. plt.imshow(image_array, cmap='gray')1 ]1 t0 z2 I; r- ^2 Z2 f
  27. plt.title('Original Image')
    ; D! o! I& b( P3 Z& [
  28. plt.subplot(1, 2, 2), v8 k' @! H1 Z' G3 X9 \
  29. plt.imshow(image_reconstructed, cmap='gray')7 y\" N4 K2 b3 {. ^2 X' `  Q; o: T8 O6 D
  30. plt.title('Reconstructed Image')) r\" H1 U4 I9 V% J+ b
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系# n- R* O! }7 h; F& ?, R6 z
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。2 h) r, n4 _% C. d7 ?
' R* m& l" B3 h0 f0 Q
尝试其他降维技术2 O, I/ C  e4 ^9 G- \& ^2 z1 ?9 ?
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:1 ]* M% Q" s4 L8 w& p

* Y4 D$ V7 K1 a" V随机投影(sklearn.random_projection)/ S3 }: G+ F7 c
非负矩阵分解(NMF,sklearn.decomposition.NMF)
/ A  x9 ^% x# |$ N! z, C这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。( x' T) {9 A- g" b. U7 r
' Y1 r8 k% S0 A

" y1 K4 P9 \9 _' j0 K4 o- A4 R- {) K; }* f
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-13 16:19 , Processed in 0.577363 second(s), 52 queries .

回顶部