Python 为什么scipy中的高斯滤波器的阶数给出x和y导数?

Python 为什么scipy中的高斯滤波器的阶数给出x和y导数?,python,numpy,image-processing,scipy,computer-vision,Python,Numpy,Image Processing,Scipy,Computer Vision,我使用了一个高斯滤波器和Scipy,我在网上看到了这段代码,我很好奇 imx = zeros(im.shape) filters.gaussian_filter(im, (sigma,sigma), (0,1), imx) imy = zeros(im.shape) filters.gaussian_filter(im, (sigma,sigma), (1,0), imy) 对于第一个高斯滤波器调用,阶数为(0,1),根据,这将给出高斯在y方向的一阶导数。然而,在运行代码时,我可以看到高斯分布

我使用了一个高斯滤波器和Scipy,我在网上看到了这段代码,我很好奇

imx = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (0,1), imx)
imy = zeros(im.shape)
filters.gaussian_filter(im, (sigma,sigma), (1,0), imy)
对于第一个高斯滤波器调用,阶数为(0,1),根据,这将给出高斯在y方向的一阶导数。然而,在运行代码时,我可以看到高斯分布是沿着X方向的

同样的道理也适用于imy。为什么代码是这样工作的

作为参考,运行:

filters.gaussian_filter(im, (sigma, sigma), (0, 1), output= imx)
在此阵列上:

[[0 3 2]
[1 4 1]
[3 4 2]]
返回:

[[0.00071801 0.00148952 0.00077151]
 [0.0006947  0.00144284 0.00074815]
 [0.00067141 0.00139622 0.00072482]]

它在x方向是高斯分布,尽管(0,1)的阶数表明它应该在y方向。我想我可能遗漏了什么。

SciPy使用数组,而不是图像。数组没有x坐标和y坐标,它们有索引。因此,SciPy的行为是:

顺序:整数或整数序列,可选
滤波器沿每个轴的顺序以整数序列或单个数字的形式给出。0阶对应于高斯核的卷积。正阶对应于与高斯函数导数的卷积

因此,
[0,1]
是第二个指数变化方向上的导数,
[0,0,0,1,0]
是第四个指数变化方向上的导数

以图形方式表示二维数组时,通常将第一个索引解释为“行编号”,将第二个索引解释为“列编号”。这使得第一个索引对应于垂直向下方向,第二个索引对应于水平方向(从左到右,除非我们在RTL环境中)


所以,
(0,1)
是水平的,
(1,0)
是垂直的。该页面的作者可能犯了一个术语错误。此外,没有法律禁止调用横轴
y
和纵轴
x
,因此他们可能已经这样做了

你确定你和那篇文章的作者一样“命名”轴吗?数组的第一个维度是
y
,第二个维度是
x
(例如
imx[y][x]
)。对不起,我想我不明白你的意思。在那里我看到了密码。我知道数组的维度是imx[列(y)][行(x)]。这同样适用于高斯滤波器类的“顺序”参数吗?(0,1)在这个意义上是指(列,行)吗?我回顾了它,让我问你,x或y的方向是什么,你会期望
[[1,1,1],[2,2],[3,3]]
的高斯分布为非零吗?(仅从矩阵中,不运行代码)我希望它在y方向上是非零的。图形图像显示可能会转置图像吗?也许他们认为行索引是x?