Python 使用 OpenCV 实现图像二维 DFT 变换后保留相位进行逆变换
以下是对图像进行二维 DFT 变换、只保留相位并进行逆变换,最后显示图像的代码示例:
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 = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
# 提取相位谱
dft_magnitude, dft_phase = cv2.cartToPolar(dft_image[:, :, 0], dft_image[:, :, 1], angleInDegrees=False)
# 只保留相位并进行逆变换
dft_inverse = cv2.idft(np.multiply(np.ones_like(dft_magnitude), np.exp(1j * dft_phase)), flags=cv2.DFT_SCALE)
# 显示图像
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), cmap='gray')
plt.title('Inverse DFT')
plt.show()
请将 your_image.bmp 替换为实际的BMP图像路径。运行代码后,将在一个窗口中显示原始图像和进行逆变换后的图像。
这段代码首先加载 BMP 图像,并使用 cv2.dft() 对图像进行二维 DFT 变换。然后,使用 cv2.cartToPolar() 函数将复数形式的 DFT 结果转换为幅度谱和相位谱。接下来,将相位谱与一个相位为 1 的复数数组相乘,以保留相位并丢弃幅度。最后,使用 cv2.idft() 对保留了相位的 DFT 结果进行逆变换,得到逆变换后的图像。最后,使用 matplotlib.pyplot 库显示原始图像和逆变换后的图像。
该示例展示了如何通过保留 DFT 变换后的相位信息并执行逆变换来重建图像。此技术可用于分离和分析图像的相位和幅度信息,并可能用于各种图像处理应用,例如图像压缩、噪声去除和图像增强。
原文地址: https://www.cveoy.top/t/topic/bAwp 著作权归作者所有。请勿转载和采集!