二维 DFT 的平移性和旋转性。 具体理论知识可参考课本 56-59 页相关内容。编写代码,输出如下图所示的 结果: 提示:原图随此文档一起发送给大家,文件名为“Fig0424.tif”。结合实验四 的内容实现图像的平移和旋转;结合实验五的内容计算图像的傅里叶频谱图。根 据实验结果分析并理解 DFT
时间: 2023-06-09 09:06:52 浏览: 75
对于你的问题,我可以给出简要的回答和示例代码。首先,二维 DFT 具有平移不变性和旋转不变性,也就是说对于输入图像 f(x, y) 的 DFT F(u, v),当输入图像发生平移或旋转时,其 DFT 的值仍然保持不变。
下面是示例代码,实现图像的平移和旋转,并计算其傅里叶频谱图:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图像
img = cv2.imread("Fig0424.tif", cv2.IMREAD_GRAYSCALE)
# 计算图像的傅里叶频谱图
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20 * np.log(np.abs(fshift))
# 平移图像
rows, cols = img.shape
M = np.float32([[1, 0, 50], [0, 1, 100]])
dst = cv2.warpAffine(img, M, (cols, rows))
# 计算平移后图像的傅里叶频谱图
f = np.fft.fft2(dst)
fshift = np.fft.fftshift(f)
magnitude_spectrum_shift = 20 * np.log(np.abs(fshift))
# 旋转图像
M = cv2.getRotationMatrix2D((cols/2,rows/2),45,1)
dst = cv2.warpAffine(img,M,(cols,rows))
# 计算旋转后图像的傅里叶频谱图
f = np.fft.fft2(dst)
fshift = np.fft.fftshift(f)
magnitude_spectrum_rotate = 20 * np.log(np.abs(fshift))
# 显示结果
plt.subplot(2, 2, 1), plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 2), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 3), plt.imshow(dst, cmap='gray')
plt.title('Transformed Image'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 4), plt.imshow(magnitude_spectrum_shift, cmap='gray')
plt.title('Magnitude Spectrum of Transformed Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
上述代码的效果是将输入图像平移 50 个像素,并顺时针旋转 45 度,然后计算其傅里叶频谱图,并与原图的傅里叶频谱图进行比较。可以通过调整平移距离和旋转角度来观察其对傅里叶频谱图的影响。总体而言,二维 DFT 具有很强的平移和旋转不变性,是图像处理中重要的工具之一。