基于奇异值分解进行图像压缩的Python代码
时间: 2024-04-12 14:08:25 浏览: 110
以下是基于奇异值分解(SVD)进行图像压缩的Python代码:
```
import numpy as np
from PIL import Image
def compress_image(image_path, k):
# 打开图像并转换为灰度
image = Image.open(image_path).convert('L')
# 将图像转换为numpy数组
image_data = np.array(image)
# 对图像数组进行SVD分解
U, S, V = np.linalg.svd(image_data)
# 保留前k个奇异值
S = S[:k]
# 重构图像数组
compressed_image_data = np.dot(U[:, :k], np.dot(np.diag(S), V[:k, :]))
# 将图像数组转换为图像
compressed_image = Image.fromarray(compressed_image_data.astype(np.uint8))
return compressed_image
# 示例
compressed_image = compress_image('example_image.png', 50)
compressed_image.show()
```
代码中的 `compress_image` 函数接受两个参数:图像路径和保留的奇异值数量 `k`。该函数首先打开并转换图像为灰度,然后将其转换为numpy数组。接下来,对图像数组进行SVD分解,保留前k个奇异值,并重构图像数组。最后,将重构的图像数组转换为图像并返回。
在示例中,我们将保留前50个奇异值来压缩图像。您可以根据需要调整此参数。
阅读全文