在JupyterLab上写一个对一张灰度图像进行图像压缩的代码
时间: 2024-02-20 18:58:36 浏览: 68
好的,以下是一个基于小波变换的灰度图像压缩代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
import pywt
def compress_image_gray(img_path, compress_ratio):
# 读入灰度图像
img = plt.imread(img_path)
img_gray = np.mean(img, axis=-1)
# 进行小波变换
coeffs = pywt.dwt2(img_gray, 'haar')
# 计算阈值
threshold = np.sort(np.abs(coeffs[1].ravel()))[::-1][int(compress_ratio * len(coeffs[1].ravel()))]
# 进行阈值处理
coeffs = list(coeffs)
coeffs[0] = np.round(coeffs[0])
coeffs[1] = np.where(np.abs(coeffs[1]) < threshold, 0, coeffs[1])
coeffs[2] = np.where(np.abs(coeffs[2]) < threshold, 0, coeffs[2])
# 进行小波逆变换
img_compressed = pywt.idwt2(coeffs, 'haar')
# 显示原图和压缩后的图像
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].imshow(img_gray, cmap='gray')
ax[0].set_title('Original Image')
ax[1].imshow(img_compressed, cmap='gray')
ax[1].set_title(f'Compressed Image ({int(compress_ratio*100)}% compression ratio)')
plt.show()
# 测试代码
img_path = 'test_gray.png'
compress_ratio = 0.5 # 压缩比例为 50%
compress_image_gray(img_path, compress_ratio)
```
在这个代码示例中,我们首先读入一张灰度图像,然后使用 pywt 库进行小波变换。通过计算阈值并对小波系数进行阈值处理,可以实现图像的压缩。最后,使用小波逆变换将压缩后的小波系数恢复为图像,并在一个子图中显示原图和压缩后的图像。
你可以将代码复制到 JupyterLab 中运行,修改 img_path 和 compress_ratio 参数以适应不同的图像文件和压缩比例。
阅读全文