Python - 使用SSD快速模板匹配

时间:2017-10-14 21:58:53

标签: python numpy

我想做一些类似于过滤的事情,虽然不同,我无法找到任何快速实现。就像在卷积中一样,我想在一个数组中滑动一个带有滤波器的窗口,但是不是进行分段乘法(在窗口和滤波器之间)和求和,而是想要采用分段差异,将其平方然后求和。

我尝试的是一种蛮力方法,通过在python中编写一个函数,使用每个过滤器在图像上循环,但是正如你可以猜到的那样,即使用numba加速也远没有效率。代码如下:

def convolve(inputs, kernels):
# valid padding
batch = inputs.shape[0]
rows = inputs.shape[1]
cols = inputs.shape[2]
channels = inputs.shape[3]

n_kernels = kernels.shape[-1]
m_f = kernels.shape[0]
n_f = kernels.shape[1]

div = m_f * n_f

out = np.empty((batch, rows - m_f + 1, cols - n_f + 1, n_kernels), np.float32)
temp = np.empty((m_f, n_f, channels), np.float32)
for b in range(batch):
    for i in range(rows - m_f + 1):
        for j in range(cols - n_f + 1):
            for k in range(n_kernels):
                out[b, i, j, k] = np.sum(np.square(inputs[b, i:i + m_f, j:j + n_f, :] - kernels[:, :, :, k])) / div

return out

在python中是否有效实现此操作?或者您可能有任何提示我如何在python / cython / pure c中有效地实现这一点?

0 个答案:

没有答案