Python实现对二维图像进行理想高通滤波
时间: 2024-01-13 20:02:20 浏览: 88
可以使用NumPy和OpenCV库来实现对二维图像的理想高通滤波。下面是一份Python代码:
```python
import cv2
import numpy as np
# 读取图片并将它转换为灰度图像
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算图像的傅里叶变换
f = np.fft.fft2(gray)
fshift = np.fft.fftshift(f)
# 构建理想高通滤波器
rows, cols = gray.shape
crow, ccol = rows // 2, cols // 2
d = 30 # 我们设置截止半径为30
mask = np.zeros((rows, cols), np.uint8)
mask[crow-d:crow+d, ccol-d:ccol+d] = 1
fshift = fshift * mask
# 计算傅里叶逆变换以得到滤波后的图像
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)
# 将图像缩放到[0, 255]范围内
iimg = cv2.normalize(iimg, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8UC1)
# 显示输出图像
cv2.imshow('Input Image', gray)
cv2.imshow('High Pass Filter', iimg)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个代码中,我们首先使用OpenCV库读取输入图像,并将其转换为灰度图像。接下来,我们计算输入图像的傅里叶变换,并将其移动到图像的中心。然后,我们生成一个理想高通滤波器,将其乘以经过移位的傅里叶变换,并将结果傅里叶逆变换为滤波后的图像。最后,我们将结果调整为[0,255]范围内的8位图像(灰度图像),并使用OpenCV库显示输入和输出图像。
希望这个代码对你有所帮助!
阅读全文