我在scikit-image包中使用local_binary_pattern
函数。我想计算半径为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
,但image[1, 1]
的LBP是:
1 0 0
1 x 1
1 1 1
image[2, 2]
的LBP是:
1 1 1
1 x 0
1 1 1
根据lbp
中的值,我假设local_binary_pattern
函数使用'大于或等于'来与邻居进行比较。
image[1, 1]
和image[2, 2]
的LBP都是统一的。但image[1, 1]
和image[2, 2]
如何具有相同的LBP值?
答案 0 :(得分: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,其中提到“不落下的邻居的灰色价值 精确地在像素的中心通过插值来估计。“
答案 1 :(得分:3)