2021-08-07 Gabor滤波器简介以及简单应用

Gabor滤波器(Gabor Filter)

简介

  • Gabor滤波器是一种线性滤波器,用于边缘检测、纹理分析、特征提取等。这些过滤器已被证明在空间域和频率域都具有最佳定位特性,因此非常适合纹理分割问题。
  • Gabor滤波器是带通滤波器的特殊类别,即它们允许特定的频率“带”而拒绝其他频率
  • Gabor滤波器可以被视为特定频率和方向的正弦信号。
  • 在实践中,为了分析纹理或从图像中获得特征,需使用不同方向的Gabor滤波器。
  • 当输入图像与所有Gabor滤波器卷积时,模式很容易突出显示。当Gabor滤波器应用于图像时,它在边缘和纹理变化点给出最高的响应。当我们说滤波器响应特定特征时,指的是滤波器在该特征的空间位置具有显著值。

Gabor滤波器的不同参数

滤波器有一个表示正交方向的实数和虚数分量。这两个组件可以形成一个复数或单独使用。方程如图所示:
方程
在上述方程中,

  • λ \lambda λ :正弦分量的波长。波长控制着Gabor函数条带的宽度。增加波长会产生较厚的条纹,减少波长会产生更薄的条纹。
    lambda
  • θ \theta θ:控制Gabor函数的方向。零度对应于Gabor函数的垂直位置。
    theta
  • γ \gamma γ:控制长宽比或Gabor函数的高度。对于非常大的长宽比,高度变得非常小;对于非常小的长宽比,高度变得非常大,就像圆形与椭圆各自的长宽比。
    gamma
  • σ \sigma σ:控制带宽或Gabor包络的整体大小。对于较大的带宽,条纹数量增加。
    sigma

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

original
filtered

  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值