QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |正序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
: D4 K) j; L. W$ V$ J' K1 F0 C任务:使用PCA对图片进行压缩和重构。
# n( P) O+ }% R6 F( J  q/ v挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
& B$ O2 R6 K0 j使用PCA进行图像压缩和重构
- A& G+ W  F. N9 s" U7 M假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。. u0 c1 {7 Y( @5 m7 [* W( e1 U

" H  V; J7 `4 _: ?6 s& O( k& y以下是使用PCA对单张图片进行压缩和重构的步骤:
1 _  m  L! C- h. W! G
8 ?$ D1 z9 f8 v- r1 T加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
' @7 m/ W, B$ L5 F
. e- B& R, N) C9 M应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。0 {  G6 p7 g9 t) ]/ F- N: e

1 X5 c. v* S& n* y8 ]& P; U重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np5 ]5 }* p& v2 u& U
  2. from sklearn.decomposition import PCA
    6 t\" [! c% g* ]6 g1 S
  3. import matplotlib.pyplot as plt1 Z! f! `/ b, V4 a0 I  L
  4. from PIL import Image) u5 C9 e/ R6 c! Z\" A

  5. / F- o\" h# n1 Y/ U, n
  6. # 加载图片并转换为灰度图  }1 p! h- N8 u7 `' ]: ~4 {
  7. image_path = 'path_to_your_image.jpg'
    5 D+ |( ^6 e. n7 Z( R2 }
  8. image = Image.open(image_path).convert('L')
    - _) P; E) _\" h0 C* R: f
  9. image_array = np.array(image)9 T* o# I5 u! G\" @
  10. : d5 z, S; m; s3 B1 t+ K
  11. # 展平图像数组3 x, F5 @/ Q3 K8 h) S
  12. h, w = image_array.shape& \5 P( F+ }# [# J) A* Q% z% o5 A
  13. image_flattened = image_array.flatten().reshape(1, h * w)& x3 O: }' S  a% g6 E\" X6 e; f

  14. \" @\" _/ V4 R2 |  A\" i\" K2 O1 M  x. R, u
  15. # 应用PCA
    8 `* R3 F! u2 q5 q( Q; v. z, {. \
  16. n_components = 100  # 选择保留的主成分数量8 |/ {( l3 F7 ~4 E
  17. pca = PCA(n_components=n_components)+ u9 Q\" X+ Y: Q\" a- ]
  18. image_compressed = pca.fit_transform(image_flattened)- z0 J\" ]* Y4 p. y/ W/ {

  19. * H; o9 p\" f( R3 S# {
  20. # 重构图像
    ) j& A- Q# a' q( j! _( |
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    & X0 ^. Y, p3 g9 [; f! S

  22.   S( G( r8 k3 y1 }) p$ s( n
  23. # 显示原始和重构的图像
    ( W/ t8 i+ p# A6 @6 _
  24. plt.figure(figsize=(10, 5))
    $ C+ N7 a  w1 {* ?( O6 G/ ]
  25. plt.subplot(1, 2, 1)9 h& E% b9 T, x! f\" B\" o
  26. plt.imshow(image_array, cmap='gray')# B3 [6 `* P# |4 r6 ?' `/ m
  27. plt.title('Original Image')
    % W7 ~7 D) {+ m0 h' V) D
  28. plt.subplot(1, 2, 2)1 B8 u* c. V, y$ B$ @' c2 E4 Q
  29. plt.imshow(image_reconstructed, cmap='gray')1 Y' s: \/ ]5 O& |6 ]. S; r
  30. plt.title('Reconstructed Image')
    * l2 d9 {3 c( E  a8 J4 }+ z/ {
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系$ C; u  N3 k" [( x' u5 m0 q5 ]
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。" Y% U. k6 ?. d
1 b9 Y" x- }5 b& M  P3 f
尝试其他降维技术+ p# r% u. U' A- G9 y7 R
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
& e) ]% _9 V/ o& B0 u' C: N$ N5 {- m: _8 G
随机投影(sklearn.random_projection)- m& l/ p; m$ P4 ~9 a- Q, O
非负矩阵分解(NMF,sklearn.decomposition.NMF)
; |) K6 l! h0 o% P4 R7 m8 c这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。+ m& G0 o4 ]; i' i9 p; H
. Z; D! t' D5 M8 H1 e$ ^) P
1 Z( ?8 D5 h9 O6 n5 O" N
6 R' T9 m2 }- e' y2 T* l
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-4-14 10:47 , Processed in 0.360034 second(s), 51 queries .

回顶部