读取一幅图像,对其进行DCT变换,输出显示原图像及其DCT变换和DCT逆变换的结果的代码
时间: 2024-12-16 17:31:29 浏览: 14
在Python中,我们可以使用`PIL`库来处理图像,`scipy`库来进行离散余弦变换(DCT),并使用`numpy`库进行矩阵运算。以下是一个简化的示例,展示了如何读取图像、进行DCT变换、存储结果并展示原始图像和处理后的图像:
```python
from PIL import Image
import numpy as np
from scipy.fftpack import dct
# 1. 读取图像
def read_image(file_path):
with Image.open(file_path) as img:
return np.array(img)
# 2. DCT变换
def dct_transform(image):
# 对图像数据做归一化
normalized_img = image / 255.0
# 计算二维DCT
dct_img = dct(dct(normalized_img, axis=0), axis=1)
return dct_img
# 3. DCT逆变换
def idct_transform(dct_img):
# 对DCT系数做归一化
normalized_dct_img = dct_img.copy()
# 反向计算DCT逆变换
idct_img = np.real(np.fft.ifft2(np.fft.ifftshift(normalized_dct_img)))
# 将值映射回0-255范围内的像素
result = (idct_img * 255).astype(np.uint8)
return result
# 示例
img_file = 'example.jpg' # 替换为你需要处理的图片路径
original_img = read_image(img_file)
dct_result = dct_transform(original_img)
inverse_img = idct_transform(dct_result)
# 显示原始图像和处理结果
plt.subplot(2, 2, 1), plt.imshow(original_img), plt.title('Original Image')
plt.subplot(2, 2, 2), plt.imshow(dct_result, cmap='gray'), plt.title('DCT Transformation')
plt.subplot(2, 2, 3), plt.imshow(inverse_img), plt.title('Inverse DCT Transformation')
# 输出显示
plt.tight_layout()
plt.show()
阅读全文