使用opencv用巴特沃斯高通滤波器进行图像频率域锐化代码
时间: 2023-10-31 15:04:12 浏览: 171
好的,下面是使用OpenCV实现巴特沃斯高通滤波器进行图像频率域锐化的代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test.jpg', 0)
# 转换为浮点数类型
img_float32 = np.float32(img)
# 傅里叶变换
dft = cv2.dft(img_float32, flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
# 构建巴特沃斯高通滤波器
rows, cols = img.shape
crow, ccol = int(rows / 2), int(cols / 2)
D0 = 50 # 截止频率
n = 2 # 阶数
W = np.zeros((rows, cols), np.float32)
for i in range(rows):
for j in range(cols):
D = np.sqrt((i - crow) ** 2 + (j - ccol) ** 2)
W[i, j] = 1 / (1 + (D / D0) ** (2 * n))
# 应用滤波器
fshift = dft_shift * W[:, :, np.newaxis]
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])
# 将结果转换为 uint8 类型
img_back = cv2.normalize(img_back, None, 0, 255, cv2.NORM_MINMAX)
img_back = np.uint8(img_back)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Sharpened Image', img_back)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码将读取名为 `test.jpg` 的图像,然后使用巴特沃斯高通滤波器进行频率域锐化,最后将结果显示出来。你可以根据需要进行修改和调整。
阅读全文