Реализация локальной модели градиента
Я пытаюсь понять шаблон локального градиента, который описан в разделе Шаблон локального градиента - новая функция представления для распознавания выражений лица.
Вот пример вычисления нового значения пикселя, как показано ниже:
Я вижу, что центральный пиксель (который составляет 25) Pattern-1
значение 10
а также Pattern-2
значение 01
, У меня есть несколько вопросов.
- Каково будет новое значение этого центрального пикселя?
- Как LGP связан с LBP?
- Есть ли какой-нибудь псевдокод для преобразования 2D-матрицы с использованием LGP (предпочтительно Python)?
1 ответ
Каково будет новое значение этого центрального пикселя?
Это зависит от схемы кодирования. В справочном документе не дается четкого объяснения того, как кодируются локальные градиентные узоры. Одним из возможных кодировок будет:
где
Если вы введете значения интенсивности вашего примера в выражения над результатами кода шаблона:
Обратите внимание, что результатом использования другого кодирования будет изменение порядка элементов гистограммы, но это не повлияет на точность классификации.
Как LGP связан с LBP?
LGP - просто один из многих вариантов LBP. Взгляните на эту книгу для всестороннего обзора.
Есть ли какой-нибудь псевдокод для преобразования 2D-матрицы с использованием LGP (предпочтительно Python)?
Попробуйте этот код:
import numpy as np
def LGP_codes(img, r=1):
padded = np.pad(img, (r, r), 'constant')
a1 = padded[:-2*r, :-2*r]
b1 = padded[:-2*r, r:-r]
a2 = padded[:-2*r, 2*r:]
b2 = padded[r:-r, 2*r:]
a3 = padded[2*r:, 2*r:]
b3 = padded[2*r:, r:-r]
a4 = padded[2*r:, :-2*r]
b4 = padded[r:-r, :-2*r]
codes = (a1 >= a3) + 2*(a2 >= a4) + 4*(b1 >= b3) + 8*(b2 >= b4)
return codes[r:-r, r:-r]
демонстрация
In [31]: patch = np.array([[18, 25, 14],
...: [85, 25, 86],
...: [45, 65, 14]])
...:
In [32]: LGP_codes(patch)
Out[32]: array([[9]])