使用OpenCV和Gabor Filters比较纹理

时间:2013-04-17 12:02:17

标签: image opencv image-processing computer-vision

作为项目的一部分,我正在尝试测量从图像中采样的2个纹理的相似程度。 (我拍摄了大约40 x 40像素的2平方样本。)

在我取样之后,我将它们传递给一组Gabor滤波器(具有2个滤波器尺寸和6个方向),所以现在每个样本有12个滤波器输​​出。

目标是计算一个指标,它告诉我们 2个纹理的相似程度,这样如果2个样本是木材或砖块,则指标得分是低(差异很小),但如果1个样本是岩石而其他样本是织物,那么度量应该很高(纹理非常不同)。

问题是:如何使用此输出测量纹理差异? 我被建议为每个样本创建一个输出分布,然后测量两个分布之间的距离,但我根本不知道如何做到这一点。

过滤器看起来像(非常严格):

Filter bank

输出看起来像这样(我借这个图像就是一个例子)

enter image description here

2 个答案:

答案 0 :(得分:3)

编码纹理的基本方法是计算窗口上的直方图滤波器响应。然后使用直方图比较纹理。一个好的开始方式是查看Local Binary Patterns

LBP直方图的简化说明:输入图像中的每个像素都由其3x3邻域描述。通过阈值将邻域转换为索引[0,255]。然后索引标识直方图中的bin。

答案 1 :(得分:2)

我知道这是一个旧线程,但此页面可能会有助于未来的访问者:http://scikit-image.org/docs/dev/auto_examples/plot_gabor.html

这是Python中的一个例子,它使用过滤图像的均值和方差作为判别特征(参考函数'compute_feats')。用于比较的度量标准只是最小平方误差(参见函数'match')。