Scipy的convolve2d显着增加了数组中的值

时间:2016-04-20 21:12:26

标签: python opencv numpy scipy

我处理图像,像素可以有的最大值是255,但是在旋转图像后进行卷积时,值会急剧增加,达到1000s,因此会给我一个白色图像。这背后的原因是什么?

以下是代码:

        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

2 个答案:

答案 0 :(得分:0)

我不是二维卷积的专家,但我会解释一维卷积,希望你能看到它与二维卷积的关系。卷积定义如下(对于离散序列):

(f*g)[n] = sum over all i f[i] * g[n-i]

fg需要紧凑支持(即无法将非零值关闭到无穷大)。例如,将f和g取为:

f = 1,1,1,1
g = 1,1,1,1
f*g = 1,2,3,4,3,2,1

如您所见,fg的卷积导致的值大于任一序列输入中的值。大致这可能是因为a+ba*b可能导致值大于ab中存在的值。简而言之,没有理由相信卷积将仅限于输入值。

2D卷积定义为:

(f*g)[m,n] = sum over all j sum over all i f[i,j] * g[m-i,n-j]

答案 1 :(得分:0)

您可以使用名为astropy的librairy。你有很多函数可以进行卷积等。你可以处理图像/数据表等...