具有 scikit-image local_binary_pattern 函数的统一 LBP

Uniform LBP with scikit-image local_binary_pattern function

我正在使用 skimage.feature 中的 local_binary_pattern,统一模式如下:

>>> from skimage.feature import local_binary_pattern
>>> lbp_image=local_binary_pattern(some_grayscale_image,8,2,method='uniform')
>>> histogram=scipy.stats.itemfreq(lbp_image)
>>> print histogram
[[  0.00000000e+00   1.57210000e+04]
 [  1.00000000e+00   1.86520000e+04]
 [  2.00000000e+00   2.38530000e+04]
 [  3.00000000e+00   3.23200000e+04]
 [  4.00000000e+00   3.93960000e+04]
 [  5.00000000e+00   3.13570000e+04]
 [  6.00000000e+00   2.19800000e+04]
 [  7.00000000e+00   2.46530000e+04]
 [  8.00000000e+00   2.76230000e+04]
 [  9.00000000e+00   4.88030000e+04]]

由于我在邻域内取8个像素,预计会得到59个不同的LBP代码(因为统一方法),但它只给了我9个不同的LBP代码。更一般地,总是 return P+1 个标签(其中 P 是邻居的数量)。

这是另一种统一的方法,还是我理解错了什么?

好问题。看看LBP example in the gallery。具体看下图:

  • 均匀度: 由于您选择了'uniform',结果仅包括所有黑点相邻和所有白点相邻的图案。 全部 其他组合标注为'non-uniform'.
  • 旋转不变性: 注意你选择的是'uniform',而不是'nri_uniform'(见API docs),其中"nri"表示非旋转不变性。也就是说'uniform'旋转不变的。结果,表示为 00001111 的边(0 和 1 代表上图中的黑点和白点)被收集到与 00111100 相同的 bin 中(0 是相邻的,因为我们从前到后环绕)。
  • 旋转不变,均匀组合:考虑旋转不变性,有9个独特的均匀组合:
    • 00000000
    • 00000001
    • 00000011
    • 00000111
    • 00001111
    • 00011111
    • 00111111
    • 01111111
    • 11111111
  • 不均匀的结果:如果您更仔细地查看结果,实际上有 10 个 bin,而不是 9 个。第 10 个 bin 将所有不均匀的结果集中在一起。

希望对您有所帮助!如果您还没有,LBP example 值得一看。我听说 有人 花了很多时间在上面 ;)