Python scipy.signal.convalve在使用';相同';

Python scipy.signal.convalve在使用';相同';,python,python-3.x,scipy,convolution,Python,Python 3.x,Scipy,Convolution,我正在使用scipy.signal.convalve对灰度图片应用一个简单的过滤器 我的输入如下: kk->filer(2x2) im->图像(500x800)通过枕头打开 >>> from scipy.signal import convolve as cv >>> kk [[1, 2], [1, 2]] >>> im.size (500, 800) >>> cvRes = cv(im,kk,'same') 当我应用卷积

我正在使用scipy.signal.convalve对灰度图片应用一个简单的过滤器 我的输入如下:
kk->filer(2x2)
im->图像(500x800)通过枕头打开

>>> from scipy.signal import convolve as cv
>>> kk
[[1, 2], [1, 2]]
>>> im.size
(500, 800)
>>> cvRes = cv(im,kk,'same')
当我应用卷积时,我期望结果的形状为(500800),即与输入图像(im)相同,但结果的形状为(800500)

对于这个输出,我有点困惑,我想我可能遗漏了什么或者误解了库的工作原理。
感谢您对如何获得非翻转输出以及在尝试获取单个像素值时是否可以翻转x/y的帮助。


谢谢

这是PIL的副作用。大小为(800500)的PIL图像有500行800列。当它成为numpy数组时,它的形状为(500800)。所以,不是数组被转置,而是两个模块对轴的编号不同。

我在使用convolve2d时也得到了相同的结果,这就解释了这一点。在卷积之前转置图像是个好主意吗?不。记住,这些不是转置的。它有500行800列。PIL将其标记为(800500),因为这就是我们对位图的看法。Numpy将其记为(500800)。你只需要确保你的卷积矩阵是相同的:列的行,而不是(x,y)。因此,在读取输出np数组时,只需使用一对翻转的坐标就可以了,即使用
cvRes[y,x]
而不是
cvRes[x,y]
。。。如果我没有弄错你的意思,那就是:)对。在numpy中,第一个轴是“行”,这是图像思维中的y坐标。非常感谢Tim,非常感谢您的帮助:)
>>> cvRes = cv(im,kk,'same')
>>> cvRes.shape
(800, 500)