- 在线时间
- 481 小时
- 最后登录
- 2026-8-25
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7859 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2946
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1177
- 主题
- 1192
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。+ D8 H5 O7 {, \
任务:使用PCA对图片进行压缩和重构。
8 \) q/ m& `. X挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。) \! ~& ]3 g5 I) d/ F$ v9 [
使用PCA进行图像压缩和重构9 x* E u/ o) G# e, j
假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。
- E1 }. j2 J/ ]2 Z: D/ W6 W& O2 m/ L9 }8 u: _. l
以下是使用PCA对单张图片进行压缩和重构的步骤:) ]" }3 L! y. o3 M# a8 g: `' k6 b' @
# o9 F6 f K$ [' ]6 C' A
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。4 R4 E3 @1 x6 [5 s9 y3 U, `. I6 j9 u# S# J
( V. F1 F, u8 ?0 J: {
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。+ D# l& i7 k' f3 \2 Q8 x |
" }7 r( I6 [6 K: m0 M
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np
$ C9 C ~! r6 T3 W2 i - from sklearn.decomposition import PCA4 R1 p* i( G% v g8 |
- import matplotlib.pyplot as plt5 a' U1 Y* j* J5 v; E; v
- from PIL import Image
1 t6 R1 ?5 k: }/ w8 k& \ ^4 I: c5 F& E - 1 V }% K9 l7 H
- # 加载图片并转换为灰度图! C, {; x! d5 R1 X
- image_path = 'path_to_your_image.jpg'
9 J7 U |\" Q0 }5 s+ D, U7 ? - image = Image.open(image_path).convert('L')
# s5 D5 F- J/ v8 r3 u! [ - image_array = np.array(image)
5 y/ |( G8 w3 l5 o8 T# H -
: s6 C+ H# p! I8 ~& [& A - # 展平图像数组& E% c: p( A0 q1 O4 H5 x1 L
- h, w = image_array.shape
4 X\" l' ^; u, i - image_flattened = image_array.flatten().reshape(1, h * w)\" G) c- X+ A$ |7 y\" b6 _- S$ d: Y
-
# `9 b1 w4 D8 K: k8 s1 N0 q% M - # 应用PCA
. k; N6 @& B5 H4 j) C* W8 H - n_components = 100 # 选择保留的主成分数量
# J\" |$ [; D1 V; r3 ^$ S' v$ l: i - pca = PCA(n_components=n_components): w7 t2 |$ X2 {/ m0 }
- image_compressed = pca.fit_transform(image_flattened)) n- t& |% l6 T- a+ Q( `# R
-
8 X& |, K) O8 R# V8 U ~ - # 重构图像5 d' f$ Z$ x: T8 O\" F
- image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)
9 i% E0 y5 `3 u7 N - 7 I\" | K/ x; e5 d7 X
- # 显示原始和重构的图像9 t; F- ]) a J |
- plt.figure(figsize=(10, 5)), X/ C% X2 C7 M) |
- plt.subplot(1, 2, 1)% D* i/ R) e8 D5 g0 B
- plt.imshow(image_array, cmap='gray')7 B E6 U' e Z% t4 o7 `2 [\" U% I2 M
- plt.title('Original Image')
* R, Y w3 \+ `; c. h9 x* S# M3 I1 z; A - plt.subplot(1, 2, 2)
7 a. k0 k& S8 j - plt.imshow(image_reconstructed, cmap='gray')+ H1 F7 c8 A# J0 l
- plt.title('Reconstructed Image')
2 {\" B/ A% j3 F9 Z/ |2 L+ P - plt.show()
复制代码 分析压缩比例与图像质量之间的关系. s- C, ^3 K! W
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。6 g5 z4 P* k) |: p! |
; ^+ m3 {0 p7 {+ N
尝试其他降维技术: Q: B: @+ U" \% F0 B* F6 Q3 w6 w
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
1 V- ]) H7 i+ h" z2 h [) d5 D# \( l& ?. M0 ]+ m- T
随机投影(sklearn.random_projection)
3 n5 J+ P& M/ g, W+ r, F非负矩阵分解(NMF,sklearn.decomposition.NMF) C2 v1 k( r& i r5 b
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。# U1 I4 s/ ?6 }( q! N/ g7 [
0 e8 S( d W5 X. t. \
# _2 M3 T- @4 ]. s; N1 k& h1 m
& B z, ^5 V/ B$ `' S' q |
zan
|