使用python和opencv对原始图像巴特沃斯高通滤波的代码
时间: 2024-05-05 11:20:28 浏览: 18
这是一个使用Python和OpenCV对原始图像进行巴特沃斯高通滤波的示例代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('input.jpg', 0)
# 将图像转换为float类型,并进行归一化
img_float32 = np.float32(img)
img_norm = cv2.normalize(img_float32, None, 0, 1, cv2.NORM_MINMAX)
# 设置参数
d = 50 # 滤波器大小(必须是奇数)
sigmaColor = 50 # 颜色域中的sigma值
sigmaSpace = 50 # 空间域中的sigma值
butterworthN = 2 # 巴特沃斯滤波器中的n值
# 巴特沃斯高通滤波器
rows, cols = img_norm.shape
crow, ccol = int(rows / 2), int(cols / 2)
mask = np.zeros((rows, cols, 2), np.float32)
for i in range(rows):
for j in range(cols):
mask[i, j] = pow(-1, i+j) # 中心化移动谱
dft = cv2.dft(img_norm, flags=cv2.DFT_COMPLEX_OUTPUT) # 对图像进行傅里叶变换
dft_shift = np.fft.fftshift(dft)
mask_highpass = 1 - (1 / (1 + np.power((d / np.sqrt((i-crow)**2 + (j-ccol)**2)), (2*butterworthN))))
mask[:,:,0] = mask_highpass
mask[:,:,1] = mask_highpass
dft_shift_masked = dft_shift * mask
dft_ifft_shift = np.fft.ifftshift(dft_shift_masked)
img_back = np.fft.ifft2(dft_ifft_shift)
img_back = np.real(img_back)
# 将归一化的图像转换回uint8类型,并保存输出图像
img_back_uint8 = cv2.normalize(img_back, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
cv2.imwrite('output.jpg', img_back_uint8)
```
这段代码可以对名为“input.jpg”的图片进行巴特沃斯高通滤波,并将结果保存在名为“output.jpg”的文件中。在代码中,我们首先读入图像,然后将其转换为float类型和归一化处理。然后,我们设置了几个滤波器参数,包括滤波器大小、颜色和空间域中的sigma值以及巴特沃斯滤波器中的n值。接下来,我们使用傅里叶变换对图像进行频域转换,并构建一个巴特沃斯高通滤波器,将其应用于频域图像,最后使用傅里叶逆变换将图像转换回空间域。最后,我们将输出结果保存在名为“output.jpg”的文件中。