【问题标题】:scipy.signal.convolve flips axis in result when using 'same'scipy.signal.convolve 在使用“相同”时翻转轴结果
【发布时间】:2021-05-12 02:59:07
【问题描述】:

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

>>> from scipy.signal import convolve as cv
>>> kk
[[1, 2], [1, 2]]
>>> im.size
(500, 800)
>>> cvRes = cv(im,kk,'same')

当我应用卷积时,我期望结果的形状为 (500,800),即与输入图像 (im) 相同,但结果的形状为 (800,500)。

>>> cvRes = cv(im,kk,'same')
>>> cvRes.shape
(800, 500)

我对这个输出有点困惑,我想我可能遗漏了一些东西或误解了库应该如何工作。
感谢任何关于如何获得非翻转输出的帮助,如果我可以的话尝试获取单个像素的值时翻转 x/y?

谢谢!

【问题讨论】:

  • 我在使用 convolve2d 时也得到了相同的结果

标签: python python-3.x scipy convolution


【解决方案1】:

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

【讨论】:

  • 非常感谢,这解释了它。在卷积之前转置图像是个好主意吗?
  • 没有。请记住,这些不是转置的。它是 500 行,每列 800 列。 PIL 将其记为 (800,500),因为这就是我们对位图的看法。 Numpy 将其记为 (500,800)。你只需要确保你的卷积矩阵是相同的:列的行,而不是 (x,y)。
  • 因此,在读取输出 np 数组时,只需使用一对翻转的坐标就可以解决问题,即使用 cvRes[y,x] 而不是 cvRes[x,y] ...如果我的观点正确,那就是: )
  • 对。在numpy中,第一个轴是“rows”,也就是图像思维中的y坐标。
  • 非常感谢蒂姆,非常感谢您的帮助 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多