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()

结果:
在这里插入图片描述

posted @ 2020-03-30 22:34  code_witness  阅读(147)  评论(0)    收藏  举报