KLT Tracker

Kanade-Lucas-Tomasi (KLT) 추적기는 매 프레임마다 디스크립터를 다시 검출하고 다시 매칭하는 대신, 작은 이미지 패치를 직접 정렬하여 프레임 간 희소 특징점을 추적합니다. 이는 Lucas-Kanade 광류 해법(Lucas & Kanade, 1981), Tomasi & Kanade의 추적 공식화(1991), Shi & Tomasi의 특징 선택 기준(1994)을 결합한 것이며 — 피라미드형(Bouguet)으로는 많은 VIO 시스템(MSCKF 구현체, VINS-Mono)의 프론트엔드이자 cv::calcOpticalFlowPyrLK의 근간입니다.

Lucas-Kanade의 핵심

**밝기 불변성(brightness constancy)**을 가정합니다: 특징 주변의 패치는 프레임 사이에서 (u,v)(u, v)만큼 이동해도 강도를 유지합니다,

I(x,y,t)=I(x+u,  y+v,  t+1).I(x, y, t) = I(x + u,\; y + v,\; t + 1).

작은 움직임에 대해 1차 테일러 전개를 하면 **광류 제약 방정식(optical flow constraint equation)**을 얻습니다:

Ixu+Iyv+It=0I_x u + I_y v + I_t = 0

여기서 Ix,IyI_x, I_y는 공간 이미지 기울기이고 ItI_t는 시간적 차이입니다. 미지수 두 개에 방정식 하나 — 조리개 문제(aperture problem)입니다. Lucas-Kanade는 **공간적 일관성(spatial coherence)**을 추가합니다: 특징 주변 윈도우 WW 안의 모든 NN개 픽셀이 동일한 (u,v)(u, v)를 공유한다는 것입니다. NN개의 제약을 쌓아 최소제곱으로 풀면 2×22 \times 2 시스템을 얻습니다

ATA[uv]=ATb,ATA=[Ix2IxIyIxIyIy2]A^T A \begin{bmatrix} u \\ v \end{bmatrix} = -A^T \mathbf{b}, \qquad A^T A = \begin{bmatrix} \sum I_x^2 & \sum I_x I_y \\ \sum I_x I_y & \sum I_y^2 \end{bmatrix}

여기서 b\mathbf{b}는 시간적 기울기의 벡터입니다. 움직임이 실제로 무한소가 아니기 때문에, 이 풀이는 가우스-뉴턴 방식으로 반복됩니다: 현재 추정값으로 패치를 워핑하고, 잔차를 재계산하고, 증분에 대해 풀고, 업데이트가 임계값 아래로 떨어질 때까지 반복합니다.

추적하기 좋은 특징

행렬 ATAA^T A는 정확히 Harris 코너 검출기의 **구조 텐서(structure tensor)**이며, 그 조건은 추적 가능성을 결정합니다. 고유값 λ1λ2\lambda_1 \ge \lambda_2에 대해:

Shi & Tomasi의 기준은 min(λ1,λ2)>τ\min(\lambda_1, \lambda_2) > \tau인 특징을 선택합니다 — “추적하기 좋은 특징”은 그 구성 자체로 KLT 풀이가 안정적인 점들입니다. 이것이 cv::goodFeaturesToTrack입니다.

실제 움직임에서도 동작하게 만들기

SLAM에서의 의미

KLT는 프레임 간 대응을 위한 디스크립터 매칭의 저렴하고 정밀한 대안입니다: 디스크립터 계산도 없고, 최근접 이웃 검색도 없으며, 서브픽셀 정확도를 가지고, 계산량이 추적하는 점의 개수에 비례합니다 — 임베디드 하드웨어에서 실시간 시스템의 추적 스레드에 이상적입니다. 이 때문에 광류 기반 프론트엔드가 VIO를 지배하고 있으며(VINS-Mono는 KLT 코너를 추적하고 정상 동작 중에는 디스크립터를 전혀 계산하지 않습니다), SVO와 같은 반직접(semi-direct) 방법도 동일한 패치 정렬 수학 위에 구축됩니다. 그 한계 또한 프론트엔드 설계를 규정합니다: KLT는 큰 기준선, 조명 변화(밝기 불변성이 깨짐), 모션 블러 아래에서 저하되며, 잃어버린 특징을 다시 찾을 방법이 없습니다 — 이것이 바로 디스크립터 기반 매칭과 장소 인식이 존재하는 이유입니다. KLT의 정규 방정식은 또한 SLAM의 모든 스케일에서 — 완전한 광도 번들 조정에 이르기까지 — 반복적으로 나타나는 가우스-뉴턴 패턴의 가장 단순한 사례입니다.

실습

관련 문서