OpenCV-Gabor滤波
Gabor滤波函数:
实数部分:
虚数部分:
其中:

波长λ是余弦函数的波长,方向θ,相位偏移ψ,长宽比γ,标准差σ。
Python:
import cv2 as cv
import numpy as np
def Gabor_kernel(Ksize,Sigma,Theta,Lambda,Gamma,Psi):
d = Ksize[0]// 2
Gabor=np.zeros((Ksize[0],Ksize[1]),np.float32)
for x in range(Ksize[0]):
for y in range(Ksize[1]):
cx = x - d
cy = y - d
theta=Theta/180.0*np.pi
_x=cx*np.cos(theta)+cy*np.sin(theta)
_y = -cx * np.sin(theta) + cy * np.cos(theta)
#Gabor实数公式
Gabor[x][y]=np.exp(-(_x**2+Gamma**2*_y**2)/(2*Sigma**2))*np.cos((2*np.pi*_x)/Lambda+Psi)
#归一化
#Gabor/=np.sum(np.abs(Gabor))
return Gabor
def Gabor_blur(image,Ksize,Sigma,Theta,Lambda,Gamma,Psi):
h,w=image.shape
m=Ksize[0]//2
n=Ksize[1]//2
expand_image = cv.copyMakeBorder(image, m,m, n, n,cv.BORDER_CONSTANT)
Gabor_image=np.zeros((h,w),np.float32)
Gabor=Gabor_kernel(Ksize=Ksize,Sigma=Sigma,Theta=Theta,Lambda=Lambda,Gamma=Gamma,Psi=Psi)
for i in range(h):
for j in range(w):
Gabor_image[i, j] = np.sum(expand_image[i:i+Ksize[0],j:j+Ksize[1]] * Gabor)
Gabor_image = np.clip(Gabor_image, 0, 255)
Gabor_image = Gabor_image.astype(np.uint8)
return Gabor_image
if __name__=="__main__":
img = cv.imread("D:/testimage/apple.jpg")
gray_dst=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv.imshow("original image",gray_dst)
src=Gabor_blur(gray_dst,(25,25),2.0,25,3.7,1.5,0)
cv.imshow("gaborblur_src",src)
cv.waitKey(0)
cv.destroyAllWindows()
结果:


浙公网安备 33010602011771号