在numpy.convolve中不匹配的形状

时间:2013-02-20 00:31:31

标签: python numpy convolution

错误讯息:

operands could not be broadcast together with shapes (603) (613)

我该怎么办? 两个列表都需要长度相同吗?
或者我应该将其置零?

这是我的代码:

def gaussian_smooth1(img, sigma): 
    '''
    Do gaussian smoothing with sigma.
    Returns the smoothed image.
    '''
    result = np.zeros_like(img)

    #get the filter
    filter = gaussian_filter(sigma)

    #get the height and width of img
    width = len(img[0])
    height = len(img)

    #smooth every color-channel
    for c in range(3):
        #smooth the 2D image img[:,:,c]
        #tip: make use of numpy.convolve
        for x in range(height):
            result[x,:,c] = np.convolve(filter,img[x,:,c])
        for y in range(width):
            result[:,y,c] = np.convolve(filter,img[:,y,c])
    return result

1 个答案:

答案 0 :(得分:1)

问题出现是因为您没有指定权利mode 请在文档中阅读:
numpy.convolve

numpy.convolve 的默认设置为mode='full'

  

这将返回每个重叠点处的卷积,并带有输出   形状(N + M-1,)。

N是输入数组的大小,M是过滤器的大小。所以输出大于输入。

相反,您想使用np.convolve(filter,img[...],mode='same')

另外看看 scipy.convolve允许使用FFT进行2D卷积。