QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1198

主题

4

听众

2976

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
( ~% A& O) X: Z0 v# h2 [) D任务:使用PCA对图片进行压缩和重构。6 y5 a2 m7 _& C) F& G; J+ R. p
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
' @0 @! E9 ?* L1 u9 A使用PCA进行图像压缩和重构
2 \/ y8 Y- a( B, ]假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。& r5 U! X' |8 I! Q  X

, q$ f) R5 y' m% X以下是使用PCA对单张图片进行压缩和重构的步骤:
6 u4 o7 |2 a! T- u8 q5 S3 I" Z1 N& W& ~6 v' \; X% L' @
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。; N, L+ f* x5 {% b5 c) g. u- x
, }/ w7 Y+ B  L  }7 b
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。7 ?. i' S! i- H. S3 \8 e7 l
+ O( e3 _' F" U9 W: B( u
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np) w8 n; D1 }% L* X% M* `5 j8 D$ W
  2. from sklearn.decomposition import PCA
    ) R& }6 ^\" K' p' n1 n0 Y
  3. import matplotlib.pyplot as plt
    / g& m% X\" V, f* M
  4. from PIL import Image& i, x5 Y& B8 e6 A& D( ?
  5. / T# z7 F$ N% J0 g. c\" g/ i
  6. # 加载图片并转换为灰度图' G; B1 i: m' w8 \' g
  7. image_path = 'path_to_your_image.jpg'/ a: y# Q( h# D' q% l
  8. image = Image.open(image_path).convert('L')! O) Z/ N# k  H
  9. image_array = np.array(image), S- r) c! v9 U& Y2 g

  10. . A! G& N0 h% ]: p, m7 E
  11. # 展平图像数组
    ) B  P. g; p: d9 a2 V7 g+ [7 K1 u6 v
  12. h, w = image_array.shape
    * _1 x$ N7 i( g% ]
  13. image_flattened = image_array.flatten().reshape(1, h * w)4 ?( r, B2 d; W- s

  14. # v$ B6 m* L% p; o
  15. # 应用PCA
    ' s# g0 L. Z+ W- G: w
  16. n_components = 100  # 选择保留的主成分数量2 S5 g  `+ J! D6 d$ c# A, N1 F
  17. pca = PCA(n_components=n_components)
    # w/ X, U3 y5 M8 y
  18. image_compressed = pca.fit_transform(image_flattened)
    4 t+ P) Y3 s( j

  19. % ~& W9 y) V, ?% f( ?( x7 h$ i1 r
  20. # 重构图像4 d! }( A( f$ s7 K/ c  B6 {\" M4 ~. u
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)% S( c) l( Y& H- A
  22. / m) p1 R  a0 W5 s3 H
  23. # 显示原始和重构的图像
    7 {, p1 ?: K& ~! J8 M) d+ w
  24. plt.figure(figsize=(10, 5)). U# [8 V6 `' D' u$ ~- \
  25. plt.subplot(1, 2, 1)) @$ `: j' G/ O) N
  26. plt.imshow(image_array, cmap='gray')
    / S\" s' N3 T8 [! F. a/ S
  27. plt.title('Original Image')
    9 E; |+ l/ L* i( ~
  28. plt.subplot(1, 2, 2)
    + W. a3 W& ]9 b# b
  29. plt.imshow(image_reconstructed, cmap='gray')$ y* G9 y. O- ~/ y8 ?
  30. plt.title('Reconstructed Image'). D- |) V- a& \$ R. X: t
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系; _: [( t/ d8 @4 \+ I( R0 N' U
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。! t! K3 Z7 S! s/ _) V- D4 V1 a
( }" Z& D# `! O6 H; z; |' o
尝试其他降维技术# x8 E" z1 `9 q& C( S2 u/ z! {; z2 h; y
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
9 u7 y% [$ A0 [& |) I; i5 ~, f* k7 O& Q: D4 g1 ]" t
随机投影(sklearn.random_projection)8 H2 M, k! i; {' A; F) R5 y" H
非负矩阵分解(NMF,sklearn.decomposition.NMF)
6 I3 q) e2 ?3 P% x3 \这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。' d2 Q/ C- K4 L; x$ u8 W3 r

2 x: l1 W) l9 }8 Q/ [* R& f4 E  v! G3 E7 G
$ j' n; A! f" G
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-9-13 19:50 , Processed in 0.262526 second(s), 51 queries .

回顶部