QQ登录

只需要一步,快速开始

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

图像压缩(主成分分析)

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-31 16:40 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
数据集:任意选择一组图片。! `: w. ?2 T0 l" ?( H( `" s7 B: v
任务:使用PCA对图片进行压缩和重构。
2 y& n8 j4 g! e6 B+ a3 u挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。" Y1 f8 q. p+ U+ h# }( ~+ {' @
使用PCA进行图像压缩和重构5 X1 @( s: }0 r7 |, B# T
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
0 [8 G" S: K1 B/ t& L, |4 \
6 q6 b0 P. ~4 u4 x9 q" Q以下是使用PCA对单张图片进行压缩和重构的步骤:/ ~5 |6 ]: U. U: b9 u0 G; i8 k9 A

/ F3 t) O7 E9 I: D  J加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。8 I! j( p( W8 z$ w! Y! A' ?

. |& J& K) O7 ?! i3 W应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。- \! w- Y8 k+ G8 _' O% M) U9 |

0 z) t0 n+ c  M) B: ~% u4 `重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。
  1. import numpy as np! h& _9 d1 o9 U& T& f! E
  2. from sklearn.decomposition import PCA
    ( V, z- h2 P2 |/ J
  3. import matplotlib.pyplot as plt4 P# H( z; i' p. d9 Q, ]
  4. from PIL import Image: ?5 L2 m! t0 M5 E6 p6 ^: j- N

  5. + B* ^5 v: W3 m7 |4 V
  6. # 加载图片并转换为灰度图- D8 U' A$ {3 g2 V1 c8 Y. {  k
  7. image_path = 'path_to_your_image.jpg'
    5 g& @; x; T8 V$ I2 n
  8. image = Image.open(image_path).convert('L')
    2 d1 }  J3 B; c& p\" t
  9. image_array = np.array(image)
    ; u, C\" w( T% y; N2 S

  10. - c8 r, j. Z  \2 G
  11. # 展平图像数组\" }  l/ M& D3 m' _' R
  12. h, w = image_array.shape\" w0 T+ Q1 ~6 x  I5 f& h& T
  13. image_flattened = image_array.flatten().reshape(1, h * w)
    4 K6 A, G: N3 k5 B- q: ?# @
  14. ( f8 W5 K$ u! y0 E/ @
  15. # 应用PCA) t& P/ [4 U; V
  16. n_components = 100  # 选择保留的主成分数量
    ; T4 g: B1 U) L1 _, F
  17. pca = PCA(n_components=n_components), g; H# H! W5 N/ g
  18. image_compressed = pca.fit_transform(image_flattened); ~* Z( B7 A* E  G* F
  19. ( ?! y' s1 {) R9 H
  20. # 重构图像
    - ~5 h2 y% y\" F* m6 Q# Z( ]; q
  21. image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)3 C3 r* B* b3 s4 O; s
  22. 7 X$ U4 D5 G5 a5 A% \# O7 {9 U
  23. # 显示原始和重构的图像
    , w( c* [, D! g+ L& K' m# S
  24. plt.figure(figsize=(10, 5))
    & K: @* H9 ]1 {# r) w* C4 u3 Q  b
  25. plt.subplot(1, 2, 1)0 P7 R+ N; \* a0 p: z0 u
  26. plt.imshow(image_array, cmap='gray')* w- t5 V3 t. |3 R* t
  27. plt.title('Original Image')
    % G) y* c4 u1 q7 f4 Z
  28. plt.subplot(1, 2, 2)1 Y& L! w7 ?. ]9 J- D7 X
  29. plt.imshow(image_reconstructed, cmap='gray')
    ( M& L\" r# Z+ w0 g
  30. plt.title('Reconstructed Image')  ]) \+ }2 Y) |: m
  31. plt.show()
复制代码
分析压缩比例与图像质量之间的关系7 X  u+ a9 N9 @# d7 J( }/ F! D+ `
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。6 t! }5 D; T. E5 H% |0 }# y

" m- x* h; ?- ?  q. W尝试其他降维技术
, N0 Y/ I( Y, U! X除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
4 y0 _* Q/ |" Y) P/ O" J
9 ^; G) i  m2 c  H随机投影(sklearn.random_projection)6 S! x6 X, a9 K3 [  G0 v# Q
非负矩阵分解(NMF,sklearn.decomposition.NMF)
) t5 E( b: e! l6 A- X4 D# ]/ V( v这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
2 B' f) W! z9 Y( L1 U, s; b$ Q) v* D. \( f7 K

) C; \: [, k3 d* n9 H( i* B  t
7 D5 C8 X: F& E
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-15 01:44 , Processed in 0.398755 second(s), 51 queries .

回顶部