< LBP, LTP, SILTP >
Ref : Shengcai Liao et al, 'Modeling Pixel Process with Scale Invariant Local Patterns for Background Subtraction in Complex Scenes', CVPR'10
Feature를 뽑는 방법은 여러가지가 있지만 빠르고 구현 하기 쉬우나 잘 안쓰고 있지만 정리하다가 보면 아이디어가 떠오르지 않을까 해서 정리해 본다.
LBP (Local Binary Pattern)
LBP의 경우 중심 값을 기준으로 주변의 이웃들 (보통은 8개) 의 index를 정의한다.
중심값보다 같거나 크면 1이고 작으면 0을 부여한 뒤 시계방향 또는 반 시계 방향으로 나열하여 code를 만든다. 바로 이 code가 중심 값의 패턴이 된다.
맨 윗부분의 경우 code는 01001101(시계방향)또는 01011001(반시계방향)이된다.
LTP (Local Ternary Pattern)
LTP의 경우 LBP보다 진화된 경우인데 noise의 경우까지 대부분 커버를 한다고 한다. 이름 그대로 Ternary, 3개를 다룬다는 소린데 이전의 LBP에서는 0과 1의 두가지 숫자를 다루었다면 LTP에서는 -1,0,1의 3가지 숫자를 다룬다.
중심값을 기준으로 적당한 threshold를 부여한 뒤 범위를 정하게 된다.
중심값이 예를 들어 64이면 [64-t, 64+t] 가 되고 이때 t의 값에 따라 범위가 결정된다.
이웃들의 값이 [64-t, 64+t] 범위 안에 있으면 0을 부여하고 범위보다 작으면 -1, 크면 1을 부여하게된다.
그 뒤 LBP와 마찬가지로 code를 형성해 준다.
SILTP (Scale Invariant Local Ternary Pattern)
LTP에서 scale까지 보강하기 위해서 진화된 녀석이다. 보통의 경우 덧셈이나 뺄셈보단 곱셈이나 나눗셈이 비율적으로 적용되서 강한건 더 강하고 약한건 더 약하게 만들어주는 특성이 있는건 알고 있다. 아마 이를 적용한듯 한데 방법은 LTP와 비슷하나 덧셈이 아닌 곱셈이다. 즉, 중심값이 64라고 치면 [64(1-t), 64(1+t)]를 이웃들에게 적용하게 되는데 t는 LTP와 같이 threshold가 된다.
부여된는 index는
01, if 이웃 < 범위의 최소값
10, if 이웃 > 범위의 최대값
00, otherwise
가된다.