Python 为什么scipy中的高斯滤波器的阶数给出x和y导数?
我使用了一个高斯滤波器和Scipy,我在网上看到了这段代码,我很好奇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方向的一阶导数。然而,在运行代码时,我可以看到高斯分布
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?