Gabor滤波器用篇python实现
时间: 2023-12-04 17:01:02 浏览: 208
Gabor滤波器是一种基于Gabor函数的滤波器,用于图像处理和计算机视觉中。下面是用Python实现Gabor滤波器的步骤:
1. 导入必要的库:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
```
2. 定义Gabor函数:
```python
def gabor_kernel(size, theta, lambd, sigma, gamma):
"""
size: int, 滤波器尺寸
theta: float, 方向角度
lambd: float, 波长
sigma: float, 标准差
gamma: float, 空间纵横比
"""
x, y = np.meshgrid(np.linspace(-1, 1, size), np.linspace(-1, 1, size))
x_theta = x * np.cos(theta) + y * np.sin(theta)
y_theta = -x * np.sin(theta) + y * np.cos(theta)
gb = np.exp(-0.5 * (x_theta ** 2 + gamma ** 2 * y_theta ** 2) / sigma ** 2) * np.cos(2 * np.pi * x_theta / lambd)
return gb
```
3. 定义Gabor滤波器函数:
```python
def gabor_filter(img, kernels):
"""
img: numpy.ndarray, 输入图像
kernels: list, Gabor函数列表
"""
result = np.zeros_like(img)
for kernel in kernels:
fimg = cv2.filter2D(img, cv2.CV_8UC3, kernel)
result = np.maximum(result, fimg, result)
return result
```
4. 使用Gabor滤波器对图像进行滤波:
```python
# 读取图像
img = cv2.imread("lena.png", cv2.IMREAD_GRAYSCALE)
# 定义Gabor函数列表
kernels = []
for theta in range(4):
theta = theta / 4. * np.pi
for lambd in [1, 3]:
for sigma in [1, 3]:
for gamma in [0.05, 0.5]:
kernel = gabor_kernel(64, theta, lambd, sigma, gamma)
kernels.append(kernel)
# 对图像进行Gabor滤波
result = gabor_filter(img, kernels)
# 显示结果
plt.subplot(121), plt.imshow(img, cmap="gray")
plt.title("Original"), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(result, cmap="gray")
plt.title("Gabor Filter"), plt.xticks([]), plt.yticks([])
plt.show()
```
这里以Lena图像为例,使用了16个不同参数的Gabor函数进行滤波。最后将滤波结果和原图像进行对比并显示出来。
阅读全文