在对图像进行8x8的二维DFT变换时,每个8x8的块被转换为频域表示。而频域表示通常具有较高的动态范围,因此在显示时需要进行适当的缩放。在输出结果之前,我们可以对DFT图像进行归一化处理,以便在显示时更好地可视化图像。

以下是更新后的代码,包括归一化处理以及一些输出调整:

import numpy as np
import cv2
import time

# 加载BMP图像
image_path = 'your_image.bmp'  # 替换为实际的BMP图像路径
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
height, width = image.shape

# 分块8x8的二维DFT变换
dft_image = np.zeros_like(image, dtype=np.float32)
start_time = time.time()
for i in range(0, height, 8):
    for j in range(0, width, 8):
        block = np.float32(image[i:i+8, j:j+8])
        dft_block = cv2.dft(block, flags=cv2.DFT_COMPLEX_OUTPUT)
        dft_image[i:i+8, j:j+8] = cv2.magnitude(dft_block[:, :, 0], dft_block[:, :, 1])

# 对DFT图像进行归一化处理
dft_image_normalized = cv2.normalize(dft_image, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)

end_time = time.time()
total_time = end_time - start_time

# 显示DFT图像
cv2.imshow('DFT Image', dft_image_normalized)
cv2.waitKey(0)

# 保存灰度图像
output_path = 'output.bmp'  # 替换为保存输出图像的路径
cv2.imwrite(output_path, dft_image_normalized)

# 统计计算时间
print('计算时间:', total_time, '秒')

请确保将your_image.bmp替换为实际的BMP图像路径,并将output.bmp替换为保存输出图像的路径。运行代码后,将显示经过归一化处理的DFT图像,并在控制台上输出计算时间。

这样处理后,你应该能够看到更好的结果,而不是一片白色。

二维DFT变换后图像显示为白色?使用归一化处理优化显示效果

原文地址: https://www.cveoy.top/t/topic/brNa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录