错误讯息:
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
答案 0 :(得分:1)
问题出现是因为您没有指定权利mode
请在文档中阅读:
numpy.convolve
numpy.convolve 的默认设置为mode='full'
。
这将返回每个重叠点处的卷积,并带有输出 形状(N + M-1,)。
N
是输入数组的大小,M
是过滤器的大小。所以输出大于输入。
相反,您想使用np.convolve(filter,img[...],mode='same')
。
另外看看 scipy.convolve允许使用FFT进行2D卷积。