물체 추적 Object Tracking 분야에서 주요하게 사용되는 기술이 Pattern Matching 기술 입니다. 물체 추적이라는 단어에서 느껴지는 것처럼 실시간 영상처리에 한 분야 입니다. 보안 및 감시 카메라에서 출력되는 연속 영상 또는 동영상 처리 정도로 이해하면 됩니다. 알고리즘 구현에서는 크게 물체 탐색과 추적으로 나뉘고, 예를 들어 물체가 자동차라면 첫 영상에서 자동차를 추출하고 자동차 영역을 이용하여 다음 영상에 차량 위치를 탐색하고자 할 때 사용되는 기술이 Pattern Matching에 응용 입니다.

OpenCV 라이브러리에서는 Pattern Matching 함수를 제공하고 있습니다. 아래 그림에서처럼 Pattern(Template) 영상과 원본영상 Input Image 만 있으면 테스트를 해 볼 수 있고 이를 통해 다양한 실무 응용분야를 찾을 수 있습니다. 결과에서 Feature Map을 볼 수 있는데 Matching에 최종 결과로 볼 수 있고, Feature Map에 가장 높은 Pixel 값에 위치가 Template과 가장 유사한 영역으로 생각할 수 있습니다.

 

 

위 함수를 보면 C/C++ Python 언어로도 사용할 수 있게 제공되고 있습니다. 함수 사용시 입력 변수들 중 “Method” Matching에 사용되는 수식이라고 보면 되며 실제 다양한 수학적 접근 방법들이 사용되고 있습니다. OpenCV에서는 여섯 가지 방법들을 제공하고 있습니다. 그 중에 하나가 아래 사용 예에 “CV_TM_SQDIFF”가 있는데 Pixel 간 차이 제곱에 총합 Sum of Square Difference을 의미합니다. 수학적 방법에 상세한 내용은 영상처리기술에서 기술하도록 하겠습니다.

 

Template Matching 사용 예)

C: void cvMatchTemplate( Input_Image, Template, Feature_Map, CV_TM_SQDIFF )

 

cvMatchTemplate 함수 수행 후에 최종 결과인 Feature Map에서 최대값에 위치를 찾을 때 손수 코딩을 통해 찾을 수 있지만 OpenCV 함수에 하나인 cvMinMaxLoc을 사용할 수 있습니다. 이 함수를 이용하면 최대 및 최소값과 영상에서 그 위치를 추출할 수 있습니다.

실무에서는 Pattern Matching 기술 개발 시 OpenCV에서 사용되는 General Method도 사용할 수 있지만 물체에 특성에 맞게 Feature를 정의해서 직접 알고리즘을 구현하여 적용할 때도 있습니다. 하지만 기존 방법들의 답습을 통해 장단점을 파악하는 것도 자신만에 기술을 고도화 시킬 수 있는 방법이기도 하겠죠.

 

+ Recent posts