5

local_binary_patternscikit-image パッケージの関数を使用しています。半径 1 内の 8 つの隣接点の回転不変の均一な LBP を計算したいと思います。これが私の Python コードです。

import numpy as np
from skimage.feature import local_binary_pattern

image = np.array([[150, 137, 137, 146, 146, 148],
                  [145, 144, 144, 144, 142, 144],
                  [149, 144, 144, 143, 153, 147],
                  [145, 144, 147, 150, 145, 150],
                  [146, 146, 139, 148, 144, 148],
                  [129, 139, 142, 150, 146, 140]]).astype(np.uint8)

lbp = local_binary_pattern(image, 8, 1, "uniform")

print("image =")
print(image)
print("lbp =")
print(lbp)

そして、ここに出力があります

image =
[[150 137 137 146 146 148]
 [145 144 144 144 142 144]
 [149 144 144 143 153 147]
 [145 144 147 150 145 150]
 [146 146 139 148 144 148]
 [129 139 142 150 146 140]]
lbp =
[[ 0.  5.  5.  1.  9.  0.]
 [ 9.  6.  9.  9.  8.  9.]
 [ 0.  8.  6.  8.  0.  3.]
 [ 9.  7.  1.  0.  7.  0.]
 [ 1.  1.  8.  9.  7.  1.]
 [ 3.  4.  9.  0.  2.  3.]]

私を混乱させるのは、いくつかの同じ値がlbp同じ均一なパターンに対応していないことです。たとえば、lbp[1, 1]lbp[2, 2]は両方とも6ですが、 の LBPimage[1, 1]は次のとおりです。

1 0 0
1 x 1
1 1 1

の LBPimage[2, 2]は次のとおりです。

1 1 1
1 x 0
1 1 1

の値に基づいて、関数は「以上」を使用して近隣と比較するとlbp仮定します。local_binary_pattern

image[1, 1]との LBPimage[2, 2]は両方とも一様です。しかし、どのようimage[1, 1]にしimage[2, 2]て同じ LBP 値を持つことができるのでしょうか?

4

2 に答える 2

3

回転不変 LBP は、近隣のピクセル値を直接使用するのではなく、(回転不変のために) 円に補間された値を使用します。https://github.com/scikit-image/scikit-image/blob/master/skimage/feature/_texture.pyx#L156を参照してください。

元の LBP 論文http://vision.stanford.edu/teaching/cs231b_spring1415/papers/lbp.pdfも参照してください。この論文では、「ピクセルの中心に正確に収まらない近傍のグレー値は、補間によって推定されます」と記載されています。

于 2016-08-18T11:32:51.547 に答える