【问题标题】:Comparing textures with OpenCV and Gabor Filters使用 OpenCV 和 Gabor 过滤器比较纹理
【发布时间】:2019-11-08 21:47:08
【问题描述】:

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

采集样本后,我将它们传递给一组 Gabor 滤波器(具有 2 个滤波器大小和 6 个方向),因此现在每个样本有 12 个滤波器输​​出。

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

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

过滤器看起来像(不完全是):

输出看起来像这样(我借用了这张图片作为示例)

【问题讨论】:

  • 我从论文"Palm Vein recognition using adaptive Gabor filter"(Han, Lee, 2012)中识别出您的输出图片。在本文中,他们建议对 Gabor 滤波后的输出图像进行二进制编码(第 4.2.2.3 节),然后使用汉明距离将来自一幅图像的二进制编码矢量与另一幅图像进行比较(实际上是稍微改变的一个,因此计算对旋转和平移,见 4.3 节)。

标签: image opencv image-processing computer-vision


【解决方案1】:

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

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

【讨论】:

  • 希望得到更详细的答案,但您为我指明了正确的方向。谢谢!
【解决方案2】:

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

这是 Python 中的一个示例,它使用过滤后图像的均值和方差作为判别特征(请参阅函数“compute_feats”)。用于比较的指标只是最小二乘误差(请参阅函数“匹配”)。

【讨论】:

    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多