数字图像处理 python 高通滤波
时间: 2023-09-20 11:14:48 浏览: 163
使用opencv-pythonPyQt5完成的数字图像处理系统,包括图像缩放裁剪灰度变换高低通滤波边缘检测等功能.zip
在数字图像处理中,高通滤波器用于增强图像中的高频细节,如边缘和纹理。Python提供了多种库和方法来实现高通滤波。下面是一些常用的高通滤波器及其实现示例:
1. 理想高通滤波器(Ideal Highpass Filter):
```python
import numpy as np
import cv2
from matplotlib import pyplot as plt
# 读取图像并进行灰度化处理
image = cv2.imread('image.jpg', 0)
# 进行二维傅里叶变换
f = np.fft.fft2(image)
fshift = np.fft.fftshift(f)
# 构建理想高通滤波器
rows, cols = image.shape
crow, ccol = rows // 2, cols // 2
D = 30 # 截止频率
mask = np.ones((rows, cols), np.uint8)
mask[crow - D:crow + D, ccol - D:ccol + D] = 0
# 将滤波器应用于频域图像
fshift_filtered = fshift * mask
# 将滤波后的频域图像转回原始图像域
f_ishift = np.fft.ifftshift(fshift_filtered)
image_filtered = np.fft.ifft2(f_ishift)
image_filtered = np.abs(image_filtered)
# 显示原始图像和滤波后的图像
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(image_filtered, cmap='gray')
plt.title('Filtered Image')
plt.xticks([]), plt.yticks([])
plt.show()
```
2. 巴特沃斯高通滤波器(Butterworth Highpass Filter):
```python
import numpy as np
import cv2
from matplotlib import pyplot as plt
from scipy.ndimage import filters
# 读取图像并进行灰度化处理
image = cv2.imread('image.jpg', 0)
# 进行巴特沃斯高通滤波
D = 30 # 截止频率
n = 2 # 阶数
filtered_image = filters.gaussian_high_pass(image, D, n)
# 显示原始图像和滤波后的图像
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(filtered_image, cmap='gray')
plt.title('Filtered Image')
plt.xticks([]), plt.yticks([])
plt.show()
```
这里我们使用了SciPy库中的`filters.gaussian_high_pass`函数来实现巴特沃斯高通滤波。
这些示例演示了如何使用理想高通滤波器和巴特沃斯高通滤波器对图像进行处理。你可以根据需要调整截止频率和其他参数,以达到不同的滤波效果。
希望这些示例对你有帮助!如果还有其他问题,请随时提问。
阅读全文