2

错误信息:

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
4

1 回答 1

1

出现问题是因为您没有指定正确的mode.
在文档中阅读它:
numpy.convolve

numpy.convolve的默认值为mode='full'.

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

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

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

还可以查看 scipy.convolve,它允许使用 FFT 进行 2D 卷积。

于 2013-02-20T01:12:11.437 回答