ValueError:当我尝试使用scipy的convolve2d方法时,对象太深,不适合所需的数组

时间:2016-04-20 12:50:24

标签: python numpy scipy

以下是代码:

x = range(-6,7)
tmp1 = []
for i in range(len(x)):
    tmp1.append(math.exp(-(i*i)/(2*self.sigma*self.sigma)))
max_tmp1 = max(tmp1)
mod_tmp1 = []
for i in range(len(tmp1)):
    mod_tmp1.append(max_tmp1 - i)
ht1 = np.kron(np.ones((9,1)),tmp1)
sht1 = sum(ht1.flatten(1))
mean = sht1/(13*9)
ht1 = ht1 - mean
ht1 = ht1/sht1
print ht1.shape
h = np.zeros((16,16))
for i in range(0, 9):
    for j in range(0, 13):
        h[i+3, j+1] = ht1[i, j]

for i in range(0, 10):
    ag = 15*i
    np.append(h, scipy.misc.imrotate(h, ag, 'bicubic'))

R = []
print h.shape
print self.img.shape
for i in range(0, 11):
    print 'here'
    R[i] = scipy.signal.convolve2d(self.img, h[i], mode = 'same')

rt = np.zeros(self.img.shape)
x, y = self.img.shape

我得到的错误说明:

  

ValueError:所需数组的深度太小的对象

1 个答案:

答案 0 :(得分:0)

我认为问题在于你错误地设置了h。我假设您希望h[i]是一个适合进行卷积的16x16阵列,但由于几个不同的原因,这不是您实际制作的阵列。

我建议您使用imrotate调用来更改循环:

h = [scipy.misc.imrotate(h, 15*i, 'bicubic') for i in range(10)]

(您现有的代码所做的是:首先将h设置为单个16x16阵列;然后重复:计算旋转版本,“展平”h两者以及制作256个元素向量,计算附加它们以产生512个元素向量的结果,然后抛出结果。numpy.append不能在适当的位置操作,并且默认在它附加之前展平它的参数。这些都不是你的想!)

上面的列表推导将为您提供一个包含旋转版本卷积内核的10元素Python列表。

...哦,我看到你的循环计算R实际上需要11个内核,而不是10个。然后将其设为range(11)。 (你的原始代码生成0,0,15,30,......,135度的旋转,但我猜0,15,30,......,150度更可能是你想要的。)< / p>