QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。0 L5 z$ t  {* B( }
任务:使用PCA对图片进行压缩和重构。
8 N; t8 s  R0 l挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
, _2 \  @4 Y1 ^# o使用PCA进行图像压缩和重构
" m1 b. ?6 {  x5 X; j& T假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
$ y% N7 ^1 F8 I$ G9 n6 b# |
1 t+ {6 L( w) t# M8 a  n. b3 M以下是使用PCA对单张图片进行压缩和重构的步骤:( [% H  x8 `7 }+ d9 U! n. N2 r

1 i+ j7 V; b5 t; t; ~加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。, o0 L+ `$ L+ [; _5 @

6 W0 H* X9 e, _4 [( J应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
' _2 i  @( p  t3 L) c0 ]0 s! ]0 s
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np\" k8 t9 H2 s4 }7 u' B8 c
  2. from sklearn.decomposition import PCA5 w& t0 {6 {3 ~6 F- N# K* G
  3. import matplotlib.pyplot as plt7 I, G2 k. T% d. y
  4. from PIL import Image1 y\" ]\" U\" i9 E, X0 @& d$ O
  5. 9 L+ v. A! s\" Q+ a* O
  6. # 加载图片并转换为灰度图3 ^8 T+ l' r0 M( x
  7. image_path = 'path_to_your_image.jpg'
    % f6 b\" }0 V\" A; _% c
  8. image = Image.open(image_path).convert('L')1 `\" M% u1 c0 ]3 g0 B% L( `4 P% }8 ^
  9. image_array = np.array(image)
      h: _- ^' a* O7 N3 @6 F

  10. % f; x; c3 N, \/ u8 v- ]
  11. # 展平图像数组4 _& A2 Z! U: N
  12. h, w = image_array.shape
    ; W# B6 g- [( D2 s6 d1 z0 V
  13. image_flattened = image_array.flatten().reshape(1, h * w)
    2 s/ m4 W7 D* X9 X
  14. 3 M\" g* [  j8 G. d& T
  15. # 应用PCA
    & V1 I- n3 ?1 S9 j6 N. Y+ M% k
  16. n_components = 100  # 选择保留的主成分数量: l5 o# u' q& g- d. {  T
  17. pca = PCA(n_components=n_components)
    % N  U# \- C. q9 G* T; _\" F1 k
  18. image_compressed = pca.fit_transform(image_flattened)* S. d4 ~+ u: E. X% h7 `
  19. : M6 G/ k\" i* Z6 |! K: d! L
  20. # 重构图像9 V+ p2 X! R# O
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    5 X7 ]% k, y- n\" f
  22. $ V( f+ {\" I8 @( R# f! H4 G
  23. # 显示原始和重构的图像
    # e6 {% V' J. N# f4 N$ ~; t, `2 x0 T
  24. plt.figure(figsize=(10, 5))% B7 q6 o' @( g1 ?6 F
  25. plt.subplot(1, 2, 1)
    % j9 P( Q7 l. S) k
  26. plt.imshow(image_array, cmap='gray')2 R- m4 p$ C; \\" W) ^( Y
  27. plt.title('Original Image'), f9 z  H6 z% C5 R$ p: A
  28. plt.subplot(1, 2, 2)
    5 T7 Z\" [  Z. D* r' u3 x, b
  29. plt.imshow(image_reconstructed, cmap='gray')
    7 \- Q: u% j+ Z1 V5 Y# v
  30. plt.title('Reconstructed Image'), j* h5 A% |2 W8 G' }$ }1 v9 ~& d
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系
; d% k$ X# I* F- \' B压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
2 _3 ?# ~; v/ {" \3 i" y
4 S* y. \, T* D1 r% ]尝试其他降维技术' ~6 r: }! W+ e  K. v+ N8 R
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:8 f  A; S$ ]4 J
" _( D% ~: C9 t2 o8 q
随机投影(sklearn.random_projection)' T0 d# v0 a2 H
非负矩阵分解(NMF,sklearn.decomposition.NMF)
* J) V( l( z* r2 K' p这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
8 f: ^$ K1 |% F. Z" B
8 ^' K' e; I( k& |" M4 k, U
! J& u! ^- H. }! {: L' |5 q# x- q# K4 M4 w/ ^) Y; G+ T
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-11 02:32 , Processed in 0.295827 second(s), 50 queries .

回顶部