在jupyter notebooks上将一张灰度图像进行基于DWT的图像压缩,并计算压缩率
时间: 2023-07-25 13:15:46 浏览: 105
下面是将一张灰度图像进行基于DWT的图像压缩,并计算压缩率的代码:
```python
import cv2
import numpy as np
import pywt
import os
# 读取灰度图像
img = cv2.imread('gray_image.jpg', 0)
# 进行DWT压缩
coeffs2 = pywt.dwt2(img, 'haar') # 进行二维Haar小波变换
LL, (LH, HL, HH) = coeffs2 # 提取LL、LH、HL和HH系数
# 重构压缩图像
compress_coeffs = LL[:LL.shape[0]//2, :LL.shape[1]//2], (np.zeros_like(LH), np.zeros_like(HL), np.zeros_like(HH))
compress_img = pywt.idwt2(compress_coeffs, 'haar')
# 计算压缩率
original_size = os.path.getsize('gray_image.jpg')
compress_size = cv2.imencode('.jpg', compress_img)[1].size
compression_ratio = original_size / compress_size
# 显示压缩前后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Compressed Image', compress_img.astype(np.uint8))
print('Compression Ratio:', compression_ratio)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,我们首先使用OpenCV库读取一张灰度图像。然后,我们使用PyWavelets库进行DWT压缩。这里我们选择二维Haar小波作为变换基,提取其LL、LH、HL和HH系数。接着,我们将LL系数进行压缩,即只保留其左上角的1/4部分,而将LH、HL和HH系数全部置零。最后,我们使用PyWavelets库的idwt2函数对压缩后的系数进行反变换,得到压缩图像。
接下来,我们使用os库的getsize函数获取原始图像文件的大小,并使用OpenCV库的imencode函数将压缩图像编码为JPG格式,并获取其大小。然后,我们计算压缩率,并将其打印出来。最后,我们使用OpenCV库显示压缩前后的图像。
需要注意的是,在计算压缩率时,我们假设原始图像文件的大小就是图像数据的大小,这在实际应用中可能不是完全准确的。此外,压缩率的计算结果仅供参考,实际压缩率可能会因压缩参数、压缩算法、图像内容等因素而有所不同。
阅读全文