- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。
: ^/ H/ e2 A# I( u. L$ r任务:使用PCA对图片进行压缩和重构。. u; }$ f+ |+ Z5 ~6 ~
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。! [. v1 l7 s b/ v' m; w
使用PCA进行图像压缩和重构
& _" j6 d# _6 n6 v假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。) z$ D! P+ w( D7 l6 Q
) R) u1 S. x6 d
以下是使用PCA对单张图片进行压缩和重构的步骤:, |' o7 [0 Z" L* r6 t. ~, K2 B
4 @; P7 ?) k2 c/ a5 _加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。$ P0 ~$ y. {) S! J
. |( ?* J% K7 ^5 \: j! L0 l
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。$ |' O/ | g' Q# F3 T; S
* Q8 n* ]5 b. a9 v) Z- x3 k重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np9 O: M( g$ N- d8 s; i
- from sklearn.decomposition import PCA9 X( n& f; S: {; p) t1 j7 I
- import matplotlib.pyplot as plt
4 p8 @\" G$ N- Z- N6 O0 C - from PIL import Image
& B8 u! y+ w; T' R& ` - 2 m0 W: B2 g9 M' P6 M; F
- # 加载图片并转换为灰度图\" |0 U' Z+ L! [8 t
- image_path = 'path_to_your_image.jpg'& E5 c ?! ^3 ]% `5 L
- image = Image.open(image_path).convert('L') `; v* [% s b) J
- image_array = np.array(image)
' C6 ~7 T2 f6 N; L - \" d* f( b7 f5 d' j
- # 展平图像数组
* _. A3 m; n6 ^1 x - h, w = image_array.shape
5 b+ h5 z# n# C\" M/ l/ [ - image_flattened = image_array.flatten().reshape(1, h * w)
$ t2 W: s% [2 i0 Z5 ~ O - 2 U. E\" F8 _2 j# H4 z5 a a\" {
- # 应用PCA* K' g) g4 U) M. }: e# x
- n_components = 100 # 选择保留的主成分数量, s) A4 d, O i2 o
- pca = PCA(n_components=n_components)' o\" G4 _# Z8 I6 A2 B
- image_compressed = pca.fit_transform(image_flattened)
; B5 a: h. x8 j( J4 ?1 F3 q* ` -
9 n) Q5 S9 M8 h9 a6 Q1 |3 K - # 重构图像
n! ?4 [$ K2 m0 c6 I - image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w); n( n+ v8 S0 j9 B
-
; q3 K# C9 P! g' o O, i\" c - # 显示原始和重构的图像; |' l. k; M8 I\" c
- plt.figure(figsize=(10, 5))
! d7 C9 p+ {9 c - plt.subplot(1, 2, 1)
. `) B: u7 ]% P - plt.imshow(image_array, cmap='gray')8 x8 b2 h8 u/ X
- plt.title('Original Image')8 W\" e5 J9 `$ E
- plt.subplot(1, 2, 2)
$ ~8 H0 J0 R5 s+ q( t) w6 S - plt.imshow(image_reconstructed, cmap='gray')
% S# z* I; `. H1 i6 ^( U2 p' E; V6 J - plt.title('Reconstructed Image')
; T8 K: v6 H1 I( C - plt.show()
复制代码 分析压缩比例与图像质量之间的关系& Y! m' a( k) U/ L8 @
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。7 C$ q0 Y7 @- ? [4 F1 T
0 A0 m8 I6 `7 H
尝试其他降维技术( l H: a9 Z$ @0 ^
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:5 G" @; l0 _; `
# l5 h4 t$ b( T" E1 k) l0 d
随机投影(sklearn.random_projection)- Q0 h/ w" u7 y! ]8 Z. @/ F
非负矩阵分解(NMF,sklearn.decomposition.NMF)& G6 b, ]* O- b j" }6 i5 S& h
这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。$ ?1 E0 q) S8 C4 ^! }; `
. \0 C' T/ d3 w* O7 c# ]$ O
' n8 S8 w- T0 N+ d/ ~8 B- r l# ?' ^* M* h0 r6 s, d6 ~
|
zan
|