Gabor滤波器(Gabor Filter)
简介
- Gabor滤波器是一种线性滤波器,用于边缘检测、纹理分析、特征提取等。这些过滤器已被证明在空间域和频率域都具有最佳定位特性,因此非常适合纹理分割问题。
- Gabor滤波器是带通滤波器的特殊类别,即它们允许特定的频率“带”而拒绝其他频率。
- Gabor滤波器可以被视为特定频率和方向的正弦信号。
- 在实践中,为了分析纹理或从图像中获得特征,需使用不同方向的Gabor滤波器。
- 当输入图像与所有Gabor滤波器卷积时,模式很容易突出显示。当Gabor滤波器应用于图像时,它在边缘和纹理变化点给出最高的响应。当我们说滤波器响应特定特征时,指的是滤波器在该特征的空间位置具有显著值。
Gabor滤波器的不同参数
滤波器有一个表示正交方向的实数和虚数分量。这两个组件可以形成一个复数或单独使用。方程如图所示:
在上述方程中,
-
λ
\lambda
λ :正弦分量的波长。波长控制着Gabor函数条带的宽度。增加波长会产生较厚的条纹,减少波长会产生更薄的条纹。
-
θ
\theta
θ:控制Gabor函数的方向。零度对应于Gabor函数的垂直位置。
-
γ
\gamma
γ:控制长宽比或Gabor函数的高度。对于非常大的长宽比,高度变得非常小;对于非常小的长宽比,高度变得非常大,就像圆形与椭圆各自的长宽比。
-
σ
\sigma
σ:控制带宽或Gabor包络的整体大小。对于较大的带宽,条纹数量增加。
Gabor滤波器的简单应用(python)
import numpy as np
import cv2
import matplotlib.pyplot as plt
ksize = 5
sigma = 3
theta = 1*np.pi/1
lamda = 1*np.pi/4
gamma = 0.5
phi = 0
# ktype: what type of kernel values
# Once the kernel is generated, how do we want to store the numbers
# So 32F indicates the type and range of the values (float 32)
# sigma: bandwidth
# theta: orientation
# lamda: wavelength
# gamma: aspect ratio
# phi: phase offset
kernel = cv2.getGaborKernel((ksize, ksize), sigma, theta, lamda, gamma, phi, ktype=cv2.CV_32F)
img = cv2.imread('synthetic.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
fimg = cv2.filter2D(img, cv2.CV_8UC3, kernel)
kernel_resized = cv2.resize(kernel, (400,400))
cv2.imshow('Original Image', img)
cv2.imshow('Filtered Image', fimg)
cv2.imshow('Kernel', kernel_resized)
cv2.waitKey()
cv2.destroyAllWindows