- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7949 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2976
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。
( ~% A& O) X: Z0 v# h2 [) D任务:使用PCA对图片进行压缩和重构。6 y5 a2 m7 _& C) F& G; J+ R. p
挑战:分析压缩比例与图像质量之间的关系,并尝试使用其他降维技术。
' @0 @! E9 ?* L1 u9 A使用PCA进行图像压缩和重构
2 \/ y8 Y- a( B, ]假设你已经安装了必要的Python库,如numpy, matplotlib, 和scikit-learn。如果没有,你可以通过pip安装它们。& r5 U! X' |8 I! Q X
, q$ f) R5 y' m% X以下是使用PCA对单张图片进行压缩和重构的步骤:
6 u4 o7 |2 a! T- u8 q5 S3 I" Z1 N& W& ~6 v' \; X% L' @
加载图片:首先,我们需要加载一张图片并将其转换为合适的格式。; N, L+ f* x5 {% b5 c) g. u- x
, }/ w7 Y+ B L }7 b
应用PCA:然后,我们将应用PCA来降低图片的维度,实现压缩。7 ?. i' S! i- H. S3 \8 e7 l
+ O( e3 _' F" U9 W: B( u
重构图片:最后,我们将使用PCA的逆变换来重构图片,尽量恢复原始图片。- import numpy as np) w8 n; D1 }% L* X% M* `5 j8 D$ W
- from sklearn.decomposition import PCA
) R& }6 ^\" K' p' n1 n0 Y - import matplotlib.pyplot as plt
/ g& m% X\" V, f* M - from PIL import Image& i, x5 Y& B8 e6 A& D( ?
- / T# z7 F$ N% J0 g. c\" g/ i
- # 加载图片并转换为灰度图' G; B1 i: m' w8 \' g
- image_path = 'path_to_your_image.jpg'/ a: y# Q( h# D' q% l
- image = Image.open(image_path).convert('L')! O) Z/ N# k H
- image_array = np.array(image), S- r) c! v9 U& Y2 g
-
. A! G& N0 h% ]: p, m7 E - # 展平图像数组
) B P. g; p: d9 a2 V7 g+ [7 K1 u6 v - h, w = image_array.shape
* _1 x$ N7 i( g% ] - image_flattened = image_array.flatten().reshape(1, h * w)4 ?( r, B2 d; W- s
-
# v$ B6 m* L% p; o - # 应用PCA
' s# g0 L. Z+ W- G: w - n_components = 100 # 选择保留的主成分数量2 S5 g `+ J! D6 d$ c# A, N1 F
- pca = PCA(n_components=n_components)
# w/ X, U3 y5 M8 y - image_compressed = pca.fit_transform(image_flattened)
4 t+ P) Y3 s( j -
% ~& W9 y) V, ?% f( ?( x7 h$ i1 r - # 重构图像4 d! }( A( f$ s7 K/ c B6 {\" M4 ~. u
- image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)% S( c) l( Y& H- A
- / m) p1 R a0 W5 s3 H
- # 显示原始和重构的图像
7 {, p1 ?: K& ~! J8 M) d+ w - plt.figure(figsize=(10, 5)). U# [8 V6 `' D' u$ ~- \
- plt.subplot(1, 2, 1)) @$ `: j' G/ O) N
- plt.imshow(image_array, cmap='gray')
/ S\" s' N3 T8 [! F. a/ S - plt.title('Original Image')
9 E; |+ l/ L* i( ~ - plt.subplot(1, 2, 2)
+ W. a3 W& ]9 b# b - plt.imshow(image_reconstructed, cmap='gray')$ y* G9 y. O- ~/ y8 ?
- plt.title('Reconstructed Image'). D- |) V- a& \$ R. X: t
- plt.show()
复制代码 分析压缩比例与图像质量之间的关系; _: [( t/ d8 @4 \+ I( R0 N' U
压缩比例与图像质量之间的关系可以通过改变n_components(PCA中保留的主成分数量)来探索。减少n_components会增加压缩比例,但可能会降低重构图像的质量。通过观察不同n_components值对应的重构图像,可以分析这种权衡关系。! t! K3 Z7 S! s/ _) V- D4 V1 a
( }" Z& D# `! O6 H; z; |' o
尝试其他降维技术# x8 E" z1 `9 q& C( S2 u/ z! {; z2 h; y
除了PCA之外,还有其他降维技术可以用于图像压缩,例如:
9 u7 y% [$ A0 [& |) I; i5 ~, f* k7 O& Q: D4 g1 ]" t
随机投影(sklearn.random_projection)8 H2 M, k! i; {' A; F) R5 y" H
非负矩阵分解(NMF,sklearn.decomposition.NMF)
6 I3 q) e2 ?3 P% x3 \这些方法也可以用类似的方式应用于图像压缩,通过比较不同方法的效果,你可以深入理解各种降维技术在图像压缩任务中的表现和适用性。' d2 Q/ C- K4 L; x$ u8 W3 r
2 x: l1 W) l9 }8 Q/ [* R& f4 E v! G3 E7 G
$ j' n; A! f" G
|
zan
|