2017-02-22 82 views
0

像这样https://gist.github.com/kkomakkoma/4fb21b853ce774fe5c6d47e9626e6570代码关于蟒蛇Gabor滤波器

设计Gabor滤波器许多程序:)

高清build_filters(:

filters = [] 
ksize = 31 
for theta in np.arange(0, np.pi, np.pi/32): 
    params = {'ksize':(ksize, ksize), 'sigma':1.0, 'theta':theta, 'lambd':15.0, 
       'gamma':0.02, 'psi':0, 'ktype':cv2.CV_32F} 
    kern = cv2.getGaborKernel(**params) 
    kern /= 1.5*kern.sum() #why? why? why? 
    filters.append((kern,params)) 
return filters 

什么呢{克恩/ = 1.5 *克恩.sum()}呢? 谢谢你的安抚者

回答

0

我会尽我所能来回答这个问题,因为我正在处理这个问题。

首先,我觉得这是一个有点相关的问题: gabor edge detection with OpenCV

做的是一种平均操作的这种操作的结果(类似于只是用一个平均面膜卷积的图像),所以在某种程度上,它提供了一些平滑。它也用来规范内核,正如我上面的链接所述(以防止某些像素在卷积完成时远远超过其他像素的响应)。如果没有完成,那么内核的最大值可能比最小值大几个数量级。

我在使用openCV的filter2D函数之后,使用和不使用这行代码在输入图像上测试了这一点,就像在您发布的github链接中一样(输出图像缩放为0到255之间),结果是如果没有这一行代码,许多像素的拍摄强度达到255,这是预期的,因为每个像素都被分配了内核的最大值。

Without this line of code

我希望这有助于...如果任何人有任何这更推理或信息,我真的想知道!