Как рассчитать коды lbp на концах изображений?

Например, код lbp пикселя с координатой (1, 1) можно вычислить с помощью пикселей (0, 0); (0, 1); (0, 2); (1, 2); (2, 2); (2, 1); (2, 0); (1, 0), но пиксели крайних точек не имеют этих 8 пикселей соседства, то есть пиксель (0, 0) имеет только 3 соседей.

Этот вопрос возникает у меня, потому что я получил изображение LBP с помощью изображения sicikit, код выглядит следующим образом:

lbp = feature.local_binary_pattern (gray, 8, 1, 'ror')

Затем я напечатал значения серого изображения и получил такие значения:

[[185 185 190 ... 176 172 178]]
 [183 180 181 ... 194 185 175]
 [203 199 199 ... 201 193 179]
 ...
 [205 188 182 ... 183 183 182]
 [207 197 194 ... 193 190 186]
 [206 201 201 ... 201 199 197]]

Я также распечатал значения изображения LBP и получил такие значения:

[[  1.  17.   1. ...  15.  31.   1.]
 [ 27. 255. 127. ...   7.   7.  31.]
 [  0.  31.  31. ...   1.  31.  15.]
 ...
 [ 17.  31.  63. ...  63. 111.  31.]
 [  0.  31.  31. ...  15.  15.   7.]
 [  1.  25.  17. ...   0.   1.   1.]]

Я понимаю, что, например, lbp-код пикселей в правом верхнем углу правильный, поскольку он обеспечивает значение 7, но я не понимаю, как получаются LBP-коды экстремумов. Спасибо.


person SRG    schedule 29.01.2019    source источник


Ответы (1)


Функция skimage.feature.local_binary_pattern выполняет заполнение нулями под капотом. Как следствие, коды LBP фактически вычисляются из дополненного изображения:

[[  0   0   0   0 ...   0   0   0   0]
 [  0 185 185 190 ... 176 172 178   0]
 [  0 183 180 181 ... 194 185 175   0]
 [  0 203 199 199 ... 201 193 179   0]
 ...
 [  0 205 188 182 ... 183 183 182   0]
 [  0 207 197 194 ... 193 190 186   0]
 [  0 206 201 201 ... 201 199 197   0]
 [  0   0   0   0 ...   0   0   0   0]]

Когда вы используете метод 'ror' на изображении выше, LBP, соответствующий самому верхнему левому пикселю, будет следующим:

 0   0   0           0 0 0
 0  185 185    >>    0   1    >>    00000001    >>    1
 0  183 180          0 0 0  

LBP, соответствующий второму пикселю в первой строке, оказывается следующим:

 0   0   0           0 0 0
185 185 190    >>    1   1    >>    00010001    >>    17
183 180 181          0 0 0  

LBP, соответствующий самому верхнему правому пикселю:

 0    0   0          0 0 0
172  178  0    >>    0   0    >>    000000001    >>    1
185  175  0          1 0 0  

... и так далее.

person Tonechas    schedule 05.02.2019
comment
Спасибо, Тонечас, я так понимаю, ноль дописан. Тем не менее, у меня есть еще вопросы. Поскольку код 00010000 преобразуется в 00000001, а код 00000010 также преобразуется в 00000001, не предполагается, что должны быть получены 16 и 2 вместо 1 и 1 соответственно. - person SRG; 19.02.2019
comment
'ror' означает инвариантный метод вращения. Если вы хотите рассматривать 00010000 и 00000010 как разные шаблоны, вместо этого следует использовать метод 'default'. - person Tonechas; 19.02.2019
comment
Я понимаю, что битовое смещение или что-то в этом роде используется для обработки кодов как равных. Спасибо за ваши ответы. С Уважением - person SRG; 19.02.2019