我正在处理图像,一个像素可以具有的最大值是 255,但是在旋转图像后进行卷积时,该值急剧增加,达到 1000 秒,因此给我一个白色图像。这背后的原因是什么?
代码如下:
h.extend([scipy.misc.imrotate(h[0], 15*i, 'bicubic') for i in range(1, 12)])
h = np.asarray(h)
print h.shape
R = []
for i in range(0, 12):
R.append(scipy.signal.convolve2d(self.img, h[i], mode = 'same'))
R = np.asarray(R)
rt = np.zeros(self.img.shape)
x, y = self.img.shape
print (x,y)
for i in range(0, x):
for j in range(0, y):
for k in range(0, 12):
if k == 0:
max_er = R[k][i, j]
#print max_er
if(R[k][i, j]>max_er):
max_er = R[k][i, j]
rt[i, j] = max_er
最佳答案
我不是 2D 卷积方面的专家,但我会解释 1D 卷积,希望您能了解它与 2D 卷积的关系。卷积定义如下(对于离散序列):
(f*g)[n] = sum over all i f[i] * g[n-i]
f
和 g
需要有紧凑的支持(即没有非零值到无穷大)。举个例子,取f和g为:
f = 1,1,1,1
g = 1,1,1,1
f*g = 1,2,3,4,3,2,1
如您所见,f
和 g
的卷积产生的值大于任一序列的输入值。粗略地说,这可以看作是 a+b
和 a*b
可能导致值大于 a
或 b 中存在的值
。简而言之,没有理由相信卷积会局限于输入值。
二维卷积定义为:
(f*g)[m,n] = sum over all j sum over all i f[i,j] * g[m-i,n-j]
关于python - Scipy 的 convolve2d 显着增加数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36755280/