scikitimage Gabor滤波器错误:`filter weights数组的形状不正确`

2024-10-03 04:25:04 发布

您现在位置:Python中文网/ 问答频道 /正文

输入是灰度图像,转换为130x130 numpy矩阵。我总是会犯错误:

Traceback (most recent call last):
  File "test_final.py", line 87, in <module>
    a._populate_gabor()

  File "C:\Users\Bears\Dropbox\School\Data Science\final.py", line 172, in _populate_gabor
    self.gabor_imgs[i] = self._matrix_2_1d(self._gabor_this(self.grey_imgs[i]),kernels[0])

  File "C:\Users\Bears\Dropbox\School\Data Science\final.py", line 179, in _gabor_this
    filtered = ndi.convolve(image, kernel, mode='reflect')

  File "C:\Users\Bears\Anaconda3\lib\site-packages\scipy\ndimage\filters.py", line 696, in convolve
    origin, True)

  File "C:\Users\Bears\Anaconda3\lib\site-packages\scipy\ndimage\filters.py", line 530, in _correlate_or_convolve
    raise RuntimeError('filter weights array has incorrect shape.')
RuntimeError: filter weights array has incorrect shape.

我的代码如下

def _populate_gabor(self):
    kernels = []
    for theta in range(self.gabor_range[0],self.gabor_range[1]):
        theta = theta / 4. * np.pi
        for sigma in (1, 3):
            for frequency in (0.05, 0.25):
                kernel = np.real(gabor_kernel(frequency, theta=theta,
                                      sigma_x=sigma, sigma_y=sigma))
                kernels.append(kernel)
    print (len(kernels))

    for i in range(self.length):
        self.gabor_imgs[i] = self._matrix_2_1d(self._gabor_this(self.grey_imgs[i]),kernels[0])


def _gabor_this(image, kernels): 
    feats = np.zeros((len(kernels), 2), dtype=np.double)
    for k, kernel in enumerate(kernels):
        filtered = ndi.convolve(image, kernel, mode='reflect')
        feats[k, 0] = filtered.mean()
        feats[k, 1] = filtered.var()
    return feats

我直接从http://scikit-image.org/docs/dev/auto_examples/plot_gabor.html的示例中获取了这段代码,但我不知道如何避免这个错误。任何帮助都将不胜感激。 请注意,所有其他函数都与其他过滤器一起工作,而不是gabor。


Tags: inpyselfforlinegaborthiskernel
1条回答
网友
1楼 · 发布于 2024-10-03 04:25:04

似乎您正在使用scipy中的“ndimage.convalve”函数。记住ndimage提供了一个“N”维卷积。所以如果你想卷积运算,图像和核的维数必须相同。其中任何一个尺寸不正确都会导致您描述的错误。

从上面的注释可以看出,内核(4,4,7)不能与and-image(130130)卷积。尝试在卷积之前添加一个单重维度,然后在卷积之后删除它。

img = np.zeros(shape=(130,130),dtype=np.float32)
img = img[:,:,None] # Add singleton dimension
result = convolve(img,kernel)
finalOutput = result.squeeze() # Remove singleton dimension

相关问题 更多 >