OpenCV 库中的 cv2.idft() 函数无法直接接受幅度谱作为输入进行逆变换,因此我们需要使用逆变换公式手动构建复数形式的频域表示。

以下是修改后的代码示例,使用逆变换公式手动构建频域表示进行逆变换:

import numpy as np
import cv2
import matplotlib.pyplot as plt

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

# 二维DFT变换
dft_image = np.fft.fft2(image)

# 提取幅度谱
dft_magnitude = np.abs(dft_image)

# 归一化幅度谱到 [0, 255]
dft_magnitude_scaled = (dft_magnitude / np.max(dft_magnitude)) * 255

# 构建复数形式的频域表示
dft_complex = dft_magnitude_scaled * np.exp(1j * np.angle(dft_image))

# 逆变换
dft_inverse = np.fft.ifft2(dft_complex)

# 显示图像
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')

plt.subplot(1, 2, 2)
plt.imshow(np.abs(dft_inverse).astype(np.uint8), cmap='gray')
plt.title('Inverse DFT')

plt.show()

请将 your_image.bmp 替换为实际的BMP图像路径。运行代码后,将在一个窗口中显示原始图像和进行逆变换后的图像。

这段代码首先加载BMP图像,并使用 np.fft.fft2() 对图像进行二维DFT变换。然后,使用 np.abs() 函数提取幅度谱。接下来,将幅度谱归一化到 [0, 255] 的范围内。然后,根据逆变换公式,利用归一化后的幅度谱和原始图像的相位信息构建复数形式的频域表示。最后,使用 np.fft.ifft2() 对复数形式的频域表示进行逆变换,得到逆变换后的图像。最后,使用 matplotlib.pyplot 库显示原始图像和逆变换后的图像。

OpenCV 中 cv2.idft() 函数的逆变换实现

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

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