- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。
- S A8 M9 c/ F7 X: v [* u& T* o任务:使用PCA对图片进行压缩和重构。
, w5 @% E/ l1 c- d挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。2 {: h1 _- k9 U- H* [
使用PCA进行图像压缩和重构
! _- B" E/ v$ S4 a+ u% y, }假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。$ v6 _5 q8 J. }& M/ j! U0 `) _1 m5 ^
3 e- w. [) }9 w+ N3 a
以下是使用PCA对单张图片进行压缩和重构的步骤:
6 a5 k9 ?4 W5 ]/ I
0 E, \% a8 @# D% O; }* G7 I7 ]. k加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。
# @9 D( ^, k$ R5 [
% \$ ], Q! A' j4 C! X0 ?; O应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。
. k/ r+ V) w3 o3 Z9 O! }! ~# m3 g6 L+ h& k' I* N
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np
% R- w# x+ R) m n1 |- a- c8 f0 J! f! t\" R - from sklearn.decomposition import PCA; [8 {0 i6 R5 i' {\" _
- import matplotlib.pyplot as plt
+ W/ v% R x ?$ T\" j! }7 F - from PIL import Image( v% a1 x v3 }8 g
-
\" H0 w1 u8 ?, ^- e: n1 Q5 v3 V - # 加载图片并转换为灰度图
) S( f: Z0 }* r1 Q/ t' m - image_path = 'path_to_your_image.jpg'$ L% q! l5 S9 b Q9 F( i' b
- image = Image.open(image_path).convert('L')7 C4 [+ \2 A4 r
- image_array = np.array(image)
: a+ x# C/ \& H* m) L* N -
% m/ k+ l* G2 ~2 ]. }0 h; s2 m - # 展平图像数组
\" N9 z* w0 q; Y: P+ y( J/ s% ] - h, w = image_array.shape
% _\" @; [6 V) `. a' j - image_flattened = image_array.flatten().reshape(1, h * w)$ n& c k$ s' E% A& d8 V+ K
- \" n6 Q# n; u+ u* i `* R' { C
- # 应用PCA
9 h* L, D. }8 G- ?$ {% B( @ - n_components = 100 # 选择保留的主成分数量9 M8 S4 i\" N( d( k! r\" `6 M+ ~1 `\" I
- pca = PCA(n_components=n_components)3 I/ d- R( B9 u4 e& l4 X+ @
- image_compressed = pca.fit_transform(image_flattened)) K, H2 {\" y+ g, |8 }9 w( b\" E# Q( J, X5 b
- 3 j# r1 O6 G* ^+ f
- # 重构图像
% }$ v& o# k: L2 T1 C7 j1 a/ x0 R( d - image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)6 C3 Y4 c% P. K1 o8 v& k& L1 s
-
0 B: |5 {( M( E$ @ - # 显示原始和重构的图像
0 V' T1 |* }1 A) O - plt.figure(figsize=(10, 5))
, B- E$ b, q; U4 O. m! f\" O\" E2 f - plt.subplot(1, 2, 1). _' u5 K* d\" j& Z8 b
- plt.imshow(image_array, cmap='gray')
' T5 H! i% e$ L/ | - plt.title('Original Image')
) u, H$ R9 x; u - plt.subplot(1, 2, 2)4 _8 B\" H! V; @4 g3 k' N
- plt.imshow(image_reconstructed, cmap='gray')
5 s! Y& m% `) o - plt.title('Reconstructed Image')
4 T) K8 E* h; t - plt.show()
复制代码 分析压缩比例与图像质量之间的关系
* F- I8 [- v; e% E压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。
4 h# b3 R- m, Y, K8 u; q3 p
! s; K9 f7 f( _4 e' K% h% u+ G0 [+ i& \7 `尝试其他降维技术# y& p2 h) }4 |
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:: |% F! ^5 Z& X7 N
; m1 U3 a8 P G
随机投影(sklearn.random_projection)
% ~5 C% _! J' a. O" f3 X5 K非负矩阵分解(NMF,sklearn.decomposition.NMF)
. @( {5 i- j5 t6 P+ F这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。
0 t6 n+ k( f( ]9 t
5 n0 K& h: J& e6 h6 [
# i# z3 P5 g+ ?5 B/ q' B2 Y
. Q/ P& b0 C1 A: @ |
zan
|