- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
数据集:任意选择一组图片。! `: 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的逆变换来重构图片,尽量恢复原始图片。- import numpy as np! h& _9 d1 o9 U& T& f! E
- from sklearn.decomposition import PCA
( V, z- h2 P2 |/ J - import matplotlib.pyplot as plt4 P# H( z; i' p. d9 Q, ]
- from PIL import Image: ?5 L2 m! t0 M5 E6 p6 ^: j- N
-
+ B* ^5 v: W3 m7 |4 V - # 加载图片并转换为灰度图- D8 U' A$ {3 g2 V1 c8 Y. { k
- image_path = 'path_to_your_image.jpg'
5 g& @; x; T8 V$ I2 n - image = Image.open(image_path).convert('L')
2 d1 } J3 B; c& p\" t - image_array = np.array(image)
; u, C\" w( T% y; N2 S -
- c8 r, j. Z \2 G - # 展平图像数组\" } l/ M& D3 m' _' R
- h, w = image_array.shape\" w0 T+ Q1 ~6 x I5 f& h& T
- image_flattened = image_array.flatten().reshape(1, h * w)
4 K6 A, G: N3 k5 B- q: ?# @ - ( f8 W5 K$ u! y0 E/ @
- # 应用PCA) t& P/ [4 U; V
- n_components = 100 # 选择保留的主成分数量
; T4 g: B1 U) L1 _, F - pca = PCA(n_components=n_components), g; H# H! W5 N/ g
- image_compressed = pca.fit_transform(image_flattened); ~* Z( B7 A* E G* F
- ( ?! y' s1 {) R9 H
- # 重构图像
- ~5 h2 y% y\" F* m6 Q# Z( ]; q - image_reconstructed = pca.inverse_transform(image_compressed).reshape(h, w)3 C3 r* B* b3 s4 O; s
- 7 X$ U4 D5 G5 a5 A% \# O7 {9 U
- # 显示原始和重构的图像
, w( c* [, D! g+ L& K' m# S - plt.figure(figsize=(10, 5))
& K: @* H9 ]1 {# r) w* C4 u3 Q b - plt.subplot(1, 2, 1)0 P7 R+ N; \* a0 p: z0 u
- plt.imshow(image_array, cmap='gray')* w- t5 V3 t. |3 R* t
- plt.title('Original Image')
% G) y* c4 u1 q7 f4 Z - plt.subplot(1, 2, 2)1 Y& L! w7 ?. ]9 J- D7 X
- plt.imshow(image_reconstructed, cmap='gray')
( M& L\" r# Z+ w0 g - plt.title('Reconstructed Image') ]) \+ }2 Y) |: m
- 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
|