本文主要介绍python Gabor滤镜的讲解,给大家讲的很详细,对大家的学习或者工作都有一定的参考价值。有需要的朋友可以参考一下。
解读Gabor滤波器
傅立叶变换是一种强有力的信号处理工具,可以将图像从空间域变换到频率域,提取空间域难以提取的特征。但是傅立叶变换缺少时间和位置的局部信息。
Gabor变换是一种短时加窗傅里叶变换(简单理解为特定时间窗内的傅里叶变换),是短时傅里叶变换中窗函数为高斯函数时的特例。因此,Gabor滤波器可以在频域中提取不同尺度和方向的相关特征。此外,Gabor函数与人眼的功能相似,因此常被用于纹理识别,并取得了较好的效果。
在二维空间中,用一个三角函数(A)(比如正弦函数)和一个高斯函数(B)叠加,我们得到一个Gabor滤波器(C)。如下图所示:
Gabor函数解读
二维Gabor函数的数学表达式如下:
复数表示:
实部:
虚部:
x ,y 计算公式:
介绍公式中每个参数的含义:
波长():表示Gabor核函数中余弦函数的波长参数。其值以像素为单位设置,通常大于或等于2,但不大于输入图像大小的1/5。
方向():表示Gabor滤波器核中平行条纹的方向。有效值是从0到360的实数。
相移():表示Gabor核函数中余弦函数的相位参数。它的取值范围是-180到180。其中0和180对应的方程关于原点对称,-90和90对应的方程关于原点中心对称。
纵横比():空间纵横比,决定Gabor函数形状的椭圆度。当=1时,形状为圆形;当1时,形状沿平行条纹方向拉长。通常值为0.5。
带宽(B):Gabor滤波器的半响应空间频率带宽B与/的比值有关,其中代表Gabor函数高斯因子的标准差。这三者具有以下关系:
的值不能直接设置,它只随带宽B而变化.的带宽值必须是正实数,通常为1。在这种情况下,标准差与波长的关系为=0.56。带宽越小,标准差越大,Gabor形状越大,平行条纹越明显。
python实现Gabor滤波器
# Gabor滤波器实施
# k _ size: Gabor内核大小K_size x K_size
#适马:
#:
#:
# Psi :
#角度:
def Gabor_filter(K_size=111,适马=10,伽马=1.2,=10,Psi=0,角度=0):
#获得一半尺寸
d=K_size //2
#准备内核
gabor=np.zeros((K_size,K_size),dtype=np.float32)
#每个值
对于范围内的y(K _ size):
对于范围内的x(K _ size):
#距中心的距离
px=x - d
py=y - d
#度-弧度
=角度/180。* np.pi
#获取内核x
_ x=NP . cos()* px NP . sin()* py
#获取内核y
_ y=-NP . sin()* px NP . cos()* py
#填充内核
gabor[y,x]=np.exp(-(_x**2伽马**2 * _y**2)/(2 *适马* * 2))* NP . cos(2 * NP . pi * _ x/Psi)
#内核规范化
gabor /=np.sum(np.abs(gabor))
返回gabor
Python制作不同角度的Gabor滤镜图像。
导入cv2
将numpy作为np导入
将matplotlib.pyplot作为plt导入
# Gabor滤波器实施
# k _ size: Gabor内核大小K_size x K_size
#适马:
#:
#:
# Psi :
#角度:
def Gabor_filter(K_size=111,适马=10,伽马=1.2,=10,Psi=0,角度=0):
#获得一半尺寸
d=K_size //2
#准备内核
gabor=np.zeros((K_size,K_size),dtype=np.float32)
#每个值
对于范围内的y(K _ size):
对于范围内的x(K _ size):
#距中心的距离
px=x - d
py=y - d
#度-弧度
=角度/180。* np.pi
#获取内核x
_ x=NP . cos()* px NP . sin()* py
#获取内核y
_ y=-NP . sin()* px NP . cos()* py
#填充内核
gabor[y,x]=np.exp(-(_x**2伽马**2 * _y**2)/(2 *适马* * 2))* NP . cos(2 * NP . pi * _ x/Psi)
#内核规范化
gabor /=np.sum(np.abs(gabor))
返回gabor
#定义每个角度
As=[0,45,90,135]
#准备pyplot
plt.subplots_adjust(left=0,right=1,top=1,bottom=0,hspace=0,wspace=0.2)
#每个角度
对于我,一个在列举(如):
#获取加博尔内核
gabor=Gabor_filter(K_size=111,适马=10,伽玛=1.2,=10,Psi=0,角度=A)
#标准化为[0,255]
out=gabor - np.min(gabor)
out /=np.max(out)
out *=255
out=out.astype(np.uint8)
情节子情节(1,4,11)
plt.imshow(out,cmap=gray )
plt.axis("关")
plt.title(角度字符串(一))
PLT。保存fig("out。png”)
plt.show()
实验输出伽柏滤波器图像
opencv(python)中使用伽柏滤波器
函数原型:
retval=cv.getGaborKernel(ksize,sigma,theta,lambd,gamma[,psi[,ktype]])
函数使用举例
将numpy作为铭牌导入
将cv2作为简历导入
# retval=cv。getgaborkernel(ksize,sigma,theta,lambd,gamma[,psi[,ktype]])
# Ksize是一个元组
retval=cv。getgaborkernel(ksize=(111,111),sigma=10,theta=60,lambd=10,gamma=1.2)
image1=cv.imread(./paojie。jpg’)
# dst=cv.filter2D(src,ddepth,kernel[,dst[,anchor[,delta[,borderType]])
result=cv.filter2D(image1,-1,retval)
cv.imshow(结果,结果)
cv.waitKey(0)
cv.destroyAllWindows()
实验结果:
参考:
大蟒实现伽柏滤波器
伽柏滤波器参数详解
伽柏滤波器原理及opencv中的实现
到此这篇关于python Gabor滤波器讲解的文章就介绍到这了,更多相关伽柏滤波器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!