
在 OpenCV 中,cv2.dft 和 cv2.idft 分别用于执行图像的离散傅里叶变换(DFT)和逆离散傅里叶变换(IDFT)。这些变换在图像处理中非常有用,特别是在频率域分析、滤波和图像增强等方面。
cv2.dft - 离散傅里叶变换cv2.dft 函数用于将图像从空间域转换到频率域。其基本语法如下:
cv2.dft(src, dst, flags, nonzeroRows)cv2.DFT_COMPLEX_OUTPUT(输出复数结果)。cv2.dft 进行傅里叶变换import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像并转换为灰度
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)
# 将图像转换为浮点数
f = np.float32(image)
# 进行傅里叶变换
dft = cv2.dft(f, flags=cv2.DFT_COMPLEX_OUTPUT)
# 将低频部分移动到图像中心
dft_shift = np.fft.fftshift(dft)
# 计算幅度谱
magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:, :, 0], dft_shift[:, :, 1]))
# 显示结果
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()cv2.idft - 逆离散傅里叶变换cv2.idft 函数用于将图像从频率域转换回空间域。其基本语法如下:
cv2.idft(src, dst, flags)cv2.DFT_SCALE(缩放结果)和 cv2.DFT_REAL_OUTPUT(输出实部)。cv2.idft 进行逆傅里叶变换# 逆傅里叶变换
idft_shift = np.fft.ifftshift(dft_shift)
idft = cv2.idft(idft_shift)
# 获取实部并转换为8位图像
real_part = idft[:, :, 0]
real_part = cv2.normalize(real_part, None, 0, 255, cv2.NORM_MINMAX)
real_part = np.uint8(real_part)
# 显示结果
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(real_part, cmap='gray')
plt.title('Reconstructed Image'), plt.xticks([]), plt.yticks([])
plt.show()cv2.dft:将图像从空间域转换到频率域,输出复数结果。cv2.idft:将图像从频率域转换回空间域,可以输出实部。这些函数在图像处理中非常有用,特别是在进行频率域分析和滤波时。通过这些变换,可以实现图像的平滑、锐化、去噪等操作。