对灰度图像二维傅立叶变换
时间: 2023-09-10 22:07:21 浏览: 132
对于灰度图像的二维傅立叶变换,可以分为以下几个步骤:
1. 将灰度图像进行补零,使其大小变为 $2^m \times 2^n$,其中 $m$ 和 $n$ 为正整数。
2. 对补零后的图像进行中心化处理,即将图像的中心移动到图像的左上角。
3. 对中心化后的图像进行二维傅立叶变换,得到频域图像。
4. 对频域图像进行中心化处理,即将频域图像的中心移动到频域图像的左上角。
5. 对中心化后的频域图像进行逆二维傅立叶变换,得到空域图像。
下面是 Python 代码示例:
```python
import numpy as np
import cv2
# 读取灰度图像
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
# 补零,使图像大小为 512x512
rows, cols = img.shape
m = np.ceil(np.log2(rows)).astype(int)
n = np.ceil(np.log2(cols)).astype(int)
padded = np.zeros((2**m, 2**n), dtype=np.float32)
padded[:rows, :cols] = img
# 中心化处理
centered = np.zeros_like(padded)
for i in range(2**m):
for j in range(2**n):
centered[i, j] = (-1)**(i+j) * padded[i, j]
# 二维傅立叶变换
freq = np.fft.fft2(centered)
# 中心化处理
centered_freq = np.zeros_like(freq)
for i in range(2**m):
for j in range(2**n):
centered_freq[i, j] = (-1)**(i+j) * freq[i, j]
# 逆二维傅立叶变换
restored_centered = np.fft.ifft2(centered_freq).real
# 去掉补零的部分,得到原始大小的图像
restored = restored_centered[:rows, :cols]
# 显示图像
cv2.imshow('Original', img)
cv2.imshow('Restored', restored.astype(np.uint8))
cv2.waitKey(0)
cv2.destroyAllWindows()
```
阅读全文