python - python中关于gabor过滤器的代码

标签 python gabor-filter

在许多程序中,例如 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*kern.sum()} 是做什么的? 谢谢你的回答

最佳答案

我会尽力回答这个问题,因为我也在处理这个问题。

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

执行此操作会产生一种平均操作(类似于仅使用平均掩模来对图像进行卷积),因此在某种程度上它提供了一些平滑。它还用于标准化内核,如我上面的链接中所述(以防止卷积完成时某些像素的响应远远超过其他像素)。如果不这样做,那么内核的最大值有可能比最小值大几个数量级。

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

Without this line of code

我希望这会有所帮助...如果其他人对此有更多推理或信息,我真的很想知道!

关于python - python中关于gabor过滤器的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42381462/

相关文章:

python - 如何在二维数组中输入元素

python - 如果 python 脚本在任何时候崩溃,有没有办法向它提供命令?

computer-vision - 从 SuperPixels 中提取特征的最佳方法,例如 gabor 和 HOG 特征

python - 在 Python 中重现 MATLAB 的 imgaborfilt

Python:导入 "import file"

python - Kivy刷新布局(异步加载)

python - 使用PIL查看tif文件,调整大小时质量较差

image-processing - 固定 Gabor 滤波器卷积神经网络

matlab - 每个超像素上的 Gabor 滤波器