영상추적 프로그램(DTracker)

개발한 것들 2013. 11. 29. 14:37

최근 몇년간 개인적으로 가장 많은 시간을 들여서 연구했던 것이 영상추적 알고리즘입니다. OpenCV meanshift / camshift를 이용한 추적 프로그램 예제코드와 그동안 제가 개발했던 영상추적기(실행파일만)를 순서대로 올립니다.



1. OpenCV의 MeanShift / CamShift 추적기


처음 영상추적 개발을 시작하면서 저도 가장 기본적이라고 할 수 있는 meanshift부터 시작했습니다. 당시에 직접 meanshift를 구현하여 돌려보았지만 성능이 그다지 만족스럽지는 않았습니다.


블로그에 올릴 목적으로 최근 OpenCV에서 제공하는 meanshift, camshift를 이용한 영상 추적기를 새로 구현해 보았습니다. 아래의 프로그램을 이용하면 meanshift, camshift 추적기의 사용법 및 성능, 장단점에 대해 쉽게 테스트할 수 있습니다 (소스코드 포함).


tracker_opencv.zip



사용법: 위 화면에 보는 것처럼 camshift 알고리즘, meanshift 알고리즘을 선택할 수 있고 사용할 색상모델을 선택할 수 있게 되어 있습니다. 마우스로 추적할 박스영역을 그리면 되고 스페이스바를 누르면 일시멈춤이 됩니다. 실행도중 언제든지 추적대상을 바꿀 수 있습니다.


OpenCV에서 제공하는 샘플코드 등에는 단일채널(hue, gray 등) 히스토그램만을 이용한 예가 나와 있지만 실제로는 HSV나 RGB의 3D 채널을 모두 이용할 경우에 추적 성능이 훨씬 좋습니다. 그 구체적인 방법에 대해서는 첨부 파일에 있는 소스코드를 참조하기 바랍니다.


다음은 위 프로그램을 적용한 데모 동영상들입니다 (OpenCV에서 제공하는 기본적인 tracker 들로서 일반적인 성능은 좋지 않습니다. 어떤 면이 강하고 또 어떤 경우에 잘 안되는지 아래 동영상들을 보면서 확인하시기 바랍니다).


opencv camshift demo - hsv 3d color model


opencv meanshift demo - rgb 3d color model


opencv meanshift demo - rgb 3d color model


실제 테스트를 해 보면 알겠지만 camshift의 경우 크기, 회전 변화를 추적할 수 있으며 특히 사람 얼굴을 추적하는데에 매우 뛰어난 성능을 보입니다. 하지만 camshift는 물체가 단일색일 경우 그리고 배경과 구분되는 색일 경우의 성능은 매우 뛰어나지만 물체에 여러 색상이 섞여있거나 배경과 유사한 색일 경우에는 오히려 meanshift보다 성능이 떨어집니다


meanshift나 camshift 모두 색상 히스토그램을 이용한 추적 방식이기 때문에 이에 따른 장단점은 명확합니다. 히스토그램의 특성상 위치정보는 고려하지 않기 때문에 물체의 형태가 변해도 추적이 가능한 반면, 다른 한편으로는 색이 배치된 위치정보를 잃어버리기 때문에 물체의 색 구성이 배경과 유사한 경우에는 추적에 실패하기 쉽습니다.


결론적으로 meanshift/camshift 등은 단순한 환경(공장자동화 응용, 배경도 단색, 물체도 단색)에서는 최고의 tracker이지만 일반적인 환경에서는 거의 적용이 힘들다고 볼 수 있습니다.



2. DTracker Ver.1 (히스토그램 기반)


처음에 시도해 보았던 meanshift가 일반적인 환경에서는 성능이 너무 떨어졌기에 이를 개선하고자 당시 여러 시도를 해 보았었는데 그 때 개발한 영상추적기가 dtracker v1입니다. meanshift와 마찬가지로 색상 히스토그램을 이용합니다만 meanshift보다는 훨씬 성능이 뛰어납니다. 사용한 색상 모델은 RGB 3D 모델입니다 (실행파일 첨부: 소스코드는 포함되지 않음).


dtracker_v1.zip


특징은 meanshift로 추적 가능한 것은 모두 추적할 수 있으며 배경이 유사한 경우에도 어느정도 추적이 가능합니다. 특히 서서 걸어가는 보행자를 추적할 때 성능이 좋은 편입니다. 그레이/칼라 영상 모두 가능하며 처리속도는 i7기준으로 200 ~ 1,000 fps 정도입니다.


다음은 dtracker v1 추적기를 적용한 데모 동영상들입니다.


dtracker(histogram) demo1


dtracker(histogram) demo2


dtracker(histogram) demo3


dtracker(histogram) demo4


dtracker(histogram) demo5


dtracker(histogram) demo6



3. DTracker Ver2 (Optical Flow 기반)


처음 개발했던 히스토그램 기반의 dtracker v1는 물체의 크기변화는 추적하지 못하며 다른 물체에 의해 가려지는 경우 추적 성능이 떨어지는 문제가 있었습니다 (예: 위 dtracker v1 데모동영상 6). 이러한 단점을 개선하고자 개발한 것이 dtracker v2인데 dtracker v2에서는 기존 히스토그램 방식을 버리고 optical flow 방식을 사용하였습니다 (테스트용 실행파일 첨부: 소스코드는 포함되지 않음).


dtracker_v2.zip


특징은 추적 대상의 크기변화, 회전변화를 추적할 수 있으며 부분적으로 가려지는 경우에도 추적이 가능합니다. 또한 추적 도중 흔들림이 거의 없고 초기 설정한 추적 영역을 정확하게 추적할 수 있습니다. 그레이/칼라 영상 모두 가능하며 처리속도는 i7 기준으로 40 ~ 300 fps 정도입니다.


다음은 dtracker v2 추적기를 적용한 데모 동영상들입니다.


dtracker(optical flow) demo1


dtracker(optical flow) demo2


dtracker(optical flow) demo3


dtracker(optical flow) demo4


dtracker(optical flow) demo5



4. 향후 개발할 tracker


1차 목표는 현재 개발된 히스토그램 방식과 optical flow 방식을 결합하는 것입니다. 형태가 고정된 물체의 경우 optical flow 방식이 훨씬 좋은 성능을 내지만 사람 등과 같이 형태가 변하는 경우에는 히스토그램 방식이 더 뛰어날 때가 많습니다. 각각의 장단점이 있으므로 이들 장점을 잘 결합하는게 1차 목표입니다.


2차 목표는 detector 기능을 추가하는 것입니다. 현재까지 개발한 tracker들은 detector 기능이 없습니다. 그래서 추적하던 물체가 완전히 사라졌다가 나타나는 경우에는 다시 복구하지 못하는 문제가 있습니다(예: dtracker v2 demo4). 개발한 tracker는 속도와 추적 정확도 면에서 기존 어떤 추적기와도 견줄 수 있지만 detector 기능이 없음으로 해서 요즘 나오는 tld tracker 등에 밀리고 있습니다. detection 기능만 보완되면 괜찮은 추적기가 완성될 것으로 생각합니다.


저의 궁극적인 목표는 추적할 대상 물체를 스스로 인식하고 그 경계까지 완벽하게 추적하는 것입니다. 예를 들어 초기에 물체의 정확한 영역이 아닌 배경까지 포함된 영역을 추적 대상으로 설정해 줘도 그 안에 포함된 실제 물체 영역만을 찾아내어 추적하는 추적기, 또는 초기에 물체의 일부 영역만 지정해줘도 알아서 전체 물체 영역을 식별하고 해당 물체를 추적해 주는 추적기를 개발하는 것입니다.



※ 동영상 출처


참고로 테스트에 사용한 동영상들의 원본 출처는 다음과 같습니다 (대부분 영상추적 분야에서 벤치마킹용으로 사용되는 공개 동영상들입니다).


[VTD] http://cv.snu.ac.kr/research/~vtd/

[FragT] http://www.cs.technion.ac.il/~amita/fragtrack/fragtrack.htm

[LOT] http://www.eng.tau.ac.il/~oron/LOT/LOT.html

[TLD] http://info.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html



by 다크 프로그래머


'개발한 것들' 카테고리의 다른 글

카메라 캘리브레이션 프로그램 (DarkCamCalibrator)  (169) 2014.07.17
Ferns Detector  (18) 2013.08.28
가상 3D 영상 생성 프로그램  (16) 2013.08.01