Gabor滤波器:与平均值相比存在较大的方差

2024-10-03 04:29:14 发布

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

我试图从输入图像中提取Gabor特征。因此,我设置了一系列具有不同参数(频率、角度和标准差)的Gabor滤波器,并将每个滤波器与输入图像卷积,并查看输出幅度图像的平均值和方差。因此,在python中,它看起来像:

import numpy as np
from scipy import ndimage as nd

# Here kernel is a given Gabor filter
def filter_image(self, image):
    filtered = np.zeros((len(self.kernels)*2,) + image.shape)        
    for k, kernel in enumerate(self.kernels):            
        filtered[k*2, :] = nd.convolve(image, np.real(kernel), mode='wrap')
        filtered[k*2+1, :] = nd.convolve(image, np.imag(kernel), mode='wrap')

return filtered

现在,我将权力图像的均值和方差看作:

^{pr2}$

所以,当我查看每个过滤器响应的平均值和方差时,我注意到相对于平均值的方差确实很高。例如,我得到的值是(平均值=0.83,方差=900)。我想知道这是否是人们经常看到的东西。这是否说明我在图像中没有任何纹理?我不知道该怎么解释。在

我很抱歉,如果这不完全属于这个论坛。我也在crossvalidated上贴了这个。在


Tags: 图像imageimportselfasnpgaborfilter
1条回答
网友
1楼 · 发布于 2024-10-03 04:29:14

你只需看一眼就知道你的图像的纹理。在

我建议你看看example given in scikit-image documentation。您将能够看到纹理图像的典型结果,并检查您的代码。在

我认为你的代码片段中有一个错误:在你的函数filter_image中,你正在迭代所有的内核,你应该只做一个内核卷积。在

除此之外,您还应该检查您使用哪种类型的图像作为输入。在skimage示例中,图像首先被转换为float。所有功能都在[0,1]中。从您的结果来看,我怀疑您使用的是整数,它可以产生非常不同的均值和方差值,尽管在标准化之后它给出的输出是相同的。 如果我更改skimage示例中的代码并使用原始整数图像,那么我得到的结果更像您的结果,而不是使用float。我计算了平均值对方差的最小值/最大值/平均值比率:

print((ref_feats[:, :, 0] / ref_feats[:, :, 1]).min())
print((ref_feats[:, :, 0] / ref_feats[:, :, 1]).mean())
print((ref_feats[:, :, 0] / ref_feats[:, :, 1]).max())

(其中ref_feats是图像和内核上的(平均值,var)表,得到:

^{pr2}$

相关问题 更多 >