答案 0 :(得分:10)
一个简单的检查是声明一个零的二维数组,除了中心的一个系数设置为1,然后将laplace
函数应用于它。具有过滤功能的属性是,如果您提交带有单个1的图像,则输出将是实际过滤器本身位于1所在位置的中心 - 查找impulse response ...或更具体地说,{ {3}}
如果您这样做,那么在您运行laplace
方法后,您会看到它的样子:
In [13]: import numpy as np
In [14]: import scipy.ndimage.filters
In [15]: A = np.zeros((5,5))
In [16]: A[2,2] = 1
In [17]: B = scipy.ndimage.filters.laplace(A)
In [18]: A
Out[18]:
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
In [19]: B
Out[19]:
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 1., -4., 1., 0.],
[ 0., 0., 1., 0., 0.],
[ 0., 0., 0., 0., 0.]])
因此,它是第一个正在使用的内核,但请注意符号的变化。中心系数为正,而其他系数为负。
但是,如果你真的想知道底层发生了什么,请查看函数的文档:Point Spread Function - 这里有一个指向函数定义源的链接:
http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.filters.laplace.html
您需要查看的相关代码如下:
def derivative2(input, axis, output, mode, cval):
return correlate1d(input, [1, -2, 1], axis, output, mode, cval, 0)
return generic_laplace(input, derivative2, output, mode, cval)
基本上,[1, -2, 1]
的一维内核正在独立地应用于每个维度,就像correlate1d
函数所做的那样...所以首先是行,然后是列。这实际上会计算您在问题中看到的第一个遮罩。