使用Python和NumPy进行2D卷积

22
我正在尝试使用numpy在python中执行2D卷积。
我有一个如下的2D数组,其中行使用H_r核,列使用H_c核。
data = np.zeros((nr, nc), dtype=np.float32)

#fill array with some data here then convolve

for r in range(nr):
    data[r,:] = np.convolve(data[r,:], H_r, 'same')

for c in range(nc):
    data[:,c] = np.convolve(data[:,c], H_c, 'same')

data = data.astype(np.uint8);

它没有产生我期望的输出,这段代码看起来没问题,我认为问题在于从float32转换成8位时的强制类型转换。最好的方法是什么?

谢谢


输出的方式与您预期的不同在哪里? - Justin Peel
嗨,这不是Matlab所产生的相同结果。 - mikip
你在Matlab中是如何进行类型转换的?这是四舍五入还是截断的差别吗? - Justin Peel
更好的2D卷积代码在这个后续问答中提供:https://dev59.com/O1YItIcB2Jgan1znmdA-(不是完全相同的副本)。 - Cris Luengo
11个回答

-2

这段代码不正确:

for r in range(nr):
    data[r,:] = np.convolve(data[r,:], H_r, 'same')

for c in range(nc):
    data[:,c] = np.convolve(data[:,c], H_c, 'same')

查看Nussbaumer变换,从多维卷积到一维。


2
这个答案非常模糊。它哪里不正确?你指的是Nussbaumer变换的哪个方面? - Hannes Johansson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接