QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1176

主题

4

听众

2884

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
* T  M9 w# K0 z: z4 q6 x: l; \任务:使用PCA对图片进行压缩和重构。, ^2 P$ u$ Z( q
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
8 s* Z3 ]9 L$ C/ z' t3 `使用PCA进行图像压缩和重构
' t* A8 ~" i4 S假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。! \( m  L6 B7 f. a0 W
6 g% \! \' r& \, @7 r( B
以下是使用PCA对单张图片进行压缩和重构的步骤:8 j8 k* X0 b* T# r4 W$ z1 A$ [
/ m! S7 r+ `' V" m. \1 f0 i" \
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。) }& F: e" S" N9 M! \' H/ M

0 j# }- m6 v/ Z3 F应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
  `; a) b8 e/ b
+ ]$ G9 R: Q( v/ ^8 P9 N重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
      N+ n8 \6 L0 t0 c
  2. from sklearn.decomposition import PCA# V7 |; g. E6 C4 c\" H5 v
  3. import matplotlib.pyplot as plt
    0 m1 `) [. n\" Y7 J$ p! A
  4. from PIL import Image6 C9 r2 N5 Y, Y2 j5 O' `- D5 m: X
  5. 1 N/ _$ z9 [1 j: ?: r; ^
  6. # 加载图片并转换为灰度图# c# w& U2 N& r5 x' p
  7. image_path = 'path_to_your_image.jpg'2 k8 N, z# M7 N2 P
  8. image = Image.open(image_path).convert('L')! G# h* C, {# T% G+ |
  9. image_array = np.array(image)
    & X& M  h4 p, e1 T
  10. ' s0 R2 {5 i5 ?$ s( F$ I
  11. # 展平图像数组# D( y- E, O* g2 Z, K6 \
  12. h, w = image_array.shape\" z. V6 [  h2 V* H1 ^5 k3 U3 A; f$ y
  13. image_flattened = image_array.flatten().reshape(1, h * w)
    # K) L! B* D- K8 M; f) ]- m\" r3 c\" N9 D
  14. # y3 ^\" L8 A4 N/ H- J
  15. # 应用PCA
    * e* K9 q2 K5 b/ v2 g8 i: L3 ?\" s
  16. n_components = 100  # 选择保留的主成分数量  l5 V$ R1 |) `& T
  17. pca = PCA(n_components=n_components)\" {( [' x+ o0 @& T0 {6 Y
  18. image_compressed = pca.fit_transform(image_flattened)% o. G1 l, F3 L\" j
  19. $ _; H, d. g- q, e
  20. # 重构图像
    + w  }+ @/ F0 M. r
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    5 }+ Q3 a: W, D\" h
  22. 8 r4 v+ D( ~. q4 S$ h; g
  23. # 显示原始和重构的图像/ Z7 g\" h0 ?* _! }* F  M/ e
  24. plt.figure(figsize=(10, 5))% k\" h6 Y. J$ ]+ W9 g) U: ~
  25. plt.subplot(1, 2, 1); H. O6 v& t/ \
  26. plt.imshow(image_array, cmap='gray')$ c- L& c3 ?4 G$ S2 `) \5 e
  27. plt.title('Original Image'): T! F6 L3 x. n3 K- y, z/ R8 G
  28. plt.subplot(1, 2, 2)2 O' a- ?  L\" P
  29. plt.imshow(image_reconstructed, cmap='gray')1 A5 H4 v1 {\" S; @2 U\" |* Y! }
  30. plt.title('Reconstructed Image')
    1 f9 L6 t0 ^0 b2 b6 m1 J
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系; {" l0 \1 H( m
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。5 e- y/ l. }5 m( ?# O

6 N+ [# }( S# |尝试其他降维技术
4 e9 k: w) U5 u/ u0 X除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
( i  \/ p& L( O' M
7 x; O% S% Z: g5 D) x1 j' e8 x随机投影(sklearn.random_projection)
8 \& D) D3 f4 X' q6 ]) i% r  f非负矩阵分解(NMF,sklearn.decomposition.NMF)8 a5 b& R4 ]7 _3 o+ x+ O/ w# d
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
2 e' s. I1 r2 T
$ x8 Z+ Q2 Z: l9 h. ^; {# _& ^
  N! Q8 Q; R* y" l6 r( e: s0 L. u2 H5 C- b9 H. T! O9 V7 C
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, 2025-9-20 05:54 , Processed in 0.651473 second(s), 50 queries .

回顶部