움직임 추적(motion tracking)

컴퓨터비전/영상처리 2015. 4. 5. 21:58

움직임 추적에서 보통 많이 사용하는 mean-shift와 cam-shift에 대해 정리해본다.


1. mean-shift(민시프트)

mean-shift 알고리즘은 데이터 집합의 밀도 분포에서 지역 극값(local extrema)을 찾아내는 방법이다.



언덕오르기 알고리즘과 비슷한 방법으로 생각할 수 있다. 

데이터 집합이 있을때 보통 mean-shift는 데이터의 이상치(outlier)를 무시한다. 쉽게 말하면 데이터의

정점(peak)으로부터 너무 멀리 떨어진 데이터는 무시한다는 것을 의미한다. 

따라서 특정 지역내의 윈도우 안에 존재하는 데이터 점들만을 사용하여 윈도우를 움직인다.



mean-shift 알고리즘은 다음과 같이 동작한다.

  1. 탐색 윈도우내의 데이터들로 무게중심(center of mass)를 구한다.

  2. 윈도우의 중심을 무게 중심 위치로 옮긴다.

  3. 윈도우가 움직임을 멈출 때까지 2번 단계부터 반복한다.


보통 윈도우 내의 데이터들로 부터 무게중심을 구할때 가우시안 분포(Gaussian distribution)을 사용한다.

보통 중심으로 부터 가까이 있는 데이터에 가중치를 좀더 높여 주는 방식이 좋다.


위 그림은 mean-shift 알고리즘의 이동 분포를 표현한 것이다. 사진을 보면 데이터의 중심(많은 픽셀이 분포한 점)

으로 윈도우가 이동하는것을 확인할 수 있다.


mean-shift알고리즘은 지역적 정점을 찾기 때문에 여러 지점에서 정점이 발견 될 수도 있다.

이런 움직임으로 인하여 윈도우 아래 존재하는 데이터들이 바뀌게 되고, 반복적으로 중심 이동 작업을 수행할 

수행할 수 있다. 중심 이동이 반복되면 mean-shift 벡터가 0이 되는 경우가 생기면 이때 수렴하는 순간이라고

판단하면 된다.


OpenCV는 mean-shift 함수를 제공한다.


1
int meanShift(InputArray probImage, Rect& window, TermCriteria criteria)
cs

probImage는 역투영 히스토그램 이미지를 입력으로 받는다. calcBackProject()함수를 이용하면 된다.

window는 커널 윈도우 초기위치, 크기를 나타낸다. criteria는 반복연산의 종료조건을 입력하면 된다.


2. camshift(캠시프트)


[Bradski98] Bradski, Gary R. "Computer vision face tracking for use in a perceptual user interface." (1998).


meanshift와 다르게 camshift는 탐색 윈도우가 스스로 크기를 조정한다는 점에서 다르다.

예를 들어 얼굴 특징을 이용하여 추적하는 경우, 카메라로부터 사람이 가까워지거나 멀어짐에

따라 얼굴 크기에 맞게 자동으로 윈도우 크기를 변화시킨다. 


1
RotatedRect CamShift(InputArray probImage, Rect& window, TermCriteria criteria)
cs


mean shift와 cam shift 알고리즘은 색상 특징값을 이용하는 추적 알고리즘이라고 생각하기 쉬운데, 

이 생각은 잘못된 생각일 수 있다. 이 두 알고리즘은 확률적 분포에서 표현되는 모든 종류의 특징 분포를 추적한다.