在许多程序中,如https://gist.github.com/kkomakkoma/4fb21b853ce774fe5c6d47e9626e6570
用这种方法设计gabor滤波器:
def 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
{kern/=1.5是什么*核数和()}做什么? 谢谢你的帮助
我会尽力回答这个问题,因为我也在处理这个问题。在
首先,我认为这是一个相关的问题: gabor edge detection with OpenCV
执行此操作会导致一种平均操作(类似于仅使用平均遮罩卷积图像),因此在某种程度上它提供了一些平滑。它还用于规范化内核,如我上面的链接所述(以防止在卷积完成时某些像素的响应远远超过其他像素)。如果不这样做,那么内核的最大值可能比最小值大几个数量级。在
在使用openCV的filter2D函数之后,我在输入图像上测试了这一点,在使用openCV的filter2D函数之后,就像在你发布的github链接中一样(输出图像被缩放到0到255之间),结果是没有这行代码,很多像素的亮度刚好达到255,这是预期的,因为每个像素分配了内核的最大值。在
Without this line of code
我希望这有帮助…如果其他人有更多的理由或信息,我真的很想知道!在
相关问题 更多 >
编程相关推荐