QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。
2 K! [5 r; q6 N* j9 U6 x7 i8 i/ Z4 h任务:使用PCA对图片进行压缩和重构。% [1 ?7 B$ P* O, t
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
7 R, f5 ]2 ?( f# u! ?# W* \) M使用PCA进行图像压缩和重构
  C+ _1 g2 Z" U4 o) q3 d假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
( \, n. A' g: f& Y3 o
2 s4 E0 }+ Q* F. m以下是使用PCA对单张图片进行压缩和重构的步骤:# P6 r, b9 [( S+ L  ?

% \* R' c+ |' m! b' o( X0 u; [加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
+ w6 W9 Z+ t; C% w
; s6 U# v+ P# \应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。2 Z% z# X- }% h6 Q" v

' {1 N4 p+ ?# Y" F重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np
    \" y! l; b& |* F' S' Q9 S( w; M
  2. from sklearn.decomposition import PCA! {9 l2 V( ?: E2 M# s
  3. import matplotlib.pyplot as plt
    5 b- V# T: G, `\" }+ o1 d
  4. from PIL import Image
    : h( T. B/ U% L- \

  5. % e* k; a9 d, y- J\" V6 p6 F5 N$ X/ h
  6. # 加载图片并转换为灰度图2 S\" L5 w% c/ K, D! b' B
  7. image_path = 'path_to_your_image.jpg'. f* E% f! m2 O4 A
  8. image = Image.open(image_path).convert('L')
    8 S1 I8 s# ]$ p7 @* q# h
  9. image_array = np.array(image)' b9 b8 g2 c; g% {1 k0 C+ _

  10. 3 V5 r, {: n1 C8 {* t4 l% a
  11. # 展平图像数组
    + }- b  @. [1 f! q' [! f/ P- T& c
  12. h, w = image_array.shape
    8 j( y% z9 G. A4 {( e9 a- h3 P
  13. image_flattened = image_array.flatten().reshape(1, h * w)# t3 o& V. K7 n( `2 D# R) O

  14. . R' l- S9 J1 }8 K; ]) @2 b+ \; Q
  15. # 应用PCA! d2 }7 p* L1 `% z8 u& x5 a
  16. n_components = 100  # 选择保留的主成分数量
    - d. u, Y/ Y9 D. G\" C) j  }
  17. pca = PCA(n_components=n_components)- I6 [4 Q+ E4 u\" O/ j
  18. image_compressed = pca.fit_transform(image_flattened)
    6 x% t. g\" ^0 E7 J, X

  19. & r. ~' X; P4 e# F6 v- P
  20. # 重构图像
    9 `+ ^. D4 X3 t0 P) l. O
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
    \" j9 `1 z: k5 u' J3 @

  22. . x( O\" Z5 l4 e( n1 X- m& F: ?
  23. # 显示原始和重构的图像
      z! m8 H, d1 x$ z4 f% M/ x6 ~% h
  24. plt.figure(figsize=(10, 5))
    2 ]6 ?' x5 _) l6 Y
  25. plt.subplot(1, 2, 1)\" k( M, z+ c, X' t
  26. plt.imshow(image_array, cmap='gray')
    7 L; `4 E# p  H
  27. plt.title('Original Image')
    ( d8 o$ W1 a6 j% D7 [
  28. plt.subplot(1, 2, 2)' g, a\" J- X8 v+ G0 a0 g' c1 h& S
  29. plt.imshow(image_reconstructed, cmap='gray')
    ( d* T! g\" I! q  {& B
  30. plt.title('Reconstructed Image'). D7 K# I0 X) I7 Q0 w- x5 k/ t\" ]. V
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系
" ]* N' x! L  Y压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
+ D' D) z* O6 s# b! h8 B5 E) B& b+ l5 t/ Z/ Y
尝试其他降维技术2 s) p( H  C' B
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:% b7 x# O' Q0 F& G9 O+ u/ S- t
% q; l0 V) G. g/ K: }( [9 q* l: G4 |
随机投影(sklearn.random_projection)
/ K2 [" ]* j/ H7 D! ~, X非负矩阵分解(NMF,sklearn.decomposition.NMF)* \; Q2 Q) }* |
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
- a  C2 r1 i0 z  _$ Y5 k2 V) A5 `% L. Z- v3 h. e+ j

$ T. \. f7 o: L* A: Z
+ q( n+ m3 A) L- A! R+ P; o
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 04:20 , Processed in 0.772592 second(s), 51 queries .

回顶部