代码关于蟒蛇Gabor滤波器
问题描述:
像这样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()}呢? 谢谢你的安抚者
答
我会尽我所能来回答这个问题,因为我正在处理这个问题。
首先,我觉得这是一个有点相关的问题: gabor edge detection with OpenCV
做的是一种平均操作的这种操作的结果(类似于只是用一个平均面膜卷积的图像),所以在某种程度上,它提供了一些平滑。它也用来规范内核,正如我上面的链接所述(以防止某些像素在卷积完成时远远超过其他像素的响应)。如果没有完成,那么内核的最大值可能比最小值大几个数量级。
我在使用openCV的filter2D函数之后,使用和不使用这行代码在输入图像上测试了这一点,就像在您发布的github链接中一样(输出图像缩放为0到255之间),结果是如果没有这一行代码,许多像素的拍摄强度达到255,这是预期的,因为每个像素都被分配了内核的最大值。
我希望这有助于...如果任何人有任何这更推理或信息,我真的想知道!