동영상 코덱과 연동이 가능한 객체 추적 카메라용 저연산량 움직임 추적기
상태바
동영상 코덱과 연동이 가능한 객체 추적 카메라용 저연산량 움직임 추적기
  • CCTV뉴스
  • 승인 2010.01.05 00:00
  • 댓글 0
이 기사를 공유합니다

고전적인 감시카메라의 경우 고정식 또는 일정 시간/간격동안 고정된 경로를 움직이는 정도가 일반적이었다. 하지만 현재에 와서는 다수의 고정형 카메라를 사용하는 것보다 적은 수의 카메라로 넓은 영역을 감시하기 위해 능동형 카메라를 사용하는 방법을 사용하고 있으며, 기본적인 영상의 취득뿐만 아니라 감시카메라의 비디오 정보를 저장하기 위한 DVR(Digital Video Recoder)등의 부가적인 장비에 대한 비용을 생각할 때 능동형 움직임을 가지는 감시카메라 시스템에 대한 요구는 증가하는 추세이다.

기본적으로 능동적인 움직임을 가지는 감시카메라에는 움직이는 객체에 대해서 반응하고, 객체를 인식하며 그것을 추적할 수 있는 연산을 수행해야 하므로 연산량이 상당히 커지는 경향이 많다. 일반적으로 움직이는 객체를 인식하는 분야는 지능형 로봇 개발의 일부분으로 개발되고 있으며, 초음파 센서나 이미지 센서 등을 이용하여 움직임이 있는 객체를 인식하거나 사물의 형태와 색상등의 정보로 인식하게 되는 방법을 사용한다.

특히, 영상을 이용한 객체 인식의 경우 DSP나 MCU를 사용하여 소프트웨어적으로 처리하는 것이 일반적이지만, 처리 영상의 크기와 해상도가 늘어남에 따라서 요구되는 연산량이 크게 증가하기 때문에 8051과 같은 저가의 MCU로는 처리하기 곤란하여 고성능의 프로세서를 필요로 하게 된다. 이에 따라서 시스템의 크기가 커지고 가격도 증가하는 단점이 있다.

또한, 앞서 언급되었던 대로 최근의 시스템에는 각종 사고나 사건이 발생했을 때 유용하게 이용할 수 있도록 촬영된 영상을 저장하는 기능을 대부분 가지고 있다. 그러나 저장해야 하는 영상 데이터의 크기가 매우 크기 때문에 MPEG2나 H.264와 같은 동영상 코덱을 사용하여 저장하며 이때 화면의 크기와 해상도가 증가할수록 요구되는 연산량도 매우 커진다. 이러한 동영상 코덱의 연산 처리 부분  중 가장 많은 연산을 수행하는 부분이 움직임 추정(motion estimation)이며 이 연산부에 대한 연산의 일부를 수행할 수 있는 구조의 객체 추적모듈을 이야기하고자 한다.

기존 알고리즘

이동 객체의 영역 및 움직임을 검출하기 위한 알고리즘은 많은 알고리즘들이 발표되었다. 그 중 영상정보를 이용하는 방법 중 대표적인 것으로 배경을 이용하는 방법, 객체의 특징값을 이용하는 방법, 움직임 정보를 이용하는 방법, 객체의 외곽선을 이용하는 방법, 차영상을 이용하는 방법 등이 있다.

배경 차이를 이용하는 방법은 카메라가 촬영 가능한 모든 영역에 대한 영상정보를 미리 저장하여서 저장되어있는 배경영상과 입력되어지는 영상을 비교하여 배경이외의 영역을 검출하는 방법이다. 이 방법의 경우 객체의 속도나 특성에 관계없이 객체만을 검출할 수 있는 장점을 가지는 반면, 넓은 배경 영상 데이터를 가지고 있어야 되므로 배경영상을 저장할 수 있는 메모리 영역이 필요하고 배경 영상이 파노라마 영상의 형태를 가지므로 저장할 때 렌즈의 왜곡부에 따른 보정이 필요하다.
또한 배경이 바뀌는 경우 객체의 검출 및 추적에 문제가 발생할 수 있어 주기적인 배경 영상의 갱신이 필요하다.

객체의 특징 정보를 이용하는 방법의 경우, 추적하고자 하는 객체의 색 또는 모양 등의 특징 정보를 모델링하여 가장 적합한 영역을 객체의 이동 영역으로 결정한다. 이 방법은 비교적 연산량이 작고, 객체의 특징이 두드러지는 경우에 객체 추출 및 움직임 파악이 쉽다. 하지만, 외부조건에 대한 객체의 특성변화에 대해 약하고 모델화되지 않은 객체에 대해서는 인식을 하지 못한다는 단점을 가진다.

또 다른 방법으로는 객체의 윤곽선을 이용하는 방법이 있다. 이 방법의 경우 일반적으로 임계값을 이용한 필터를 이용하거나 모의 침수(immersion simulation)등의 방법을 사용하여 객체의 외곽선을 검출하여 객체의 움직임을 검출한다. 이 방법은 객체의 모양을 최대한 살릴 수 있으며 객체의 세세한 움직임을 잘 파악할 수 있다는 장점을 가진다. 하지만 히스토그램 연산과 같은 복잡한 연산을 사용하기 때문에 다른 방법에 비해 연산량이 매우 높아진다는 단점을 가진다.

차영상을 이용하는 방법은 동일 배경을 가지는 장면에 대해서 일정한 시간 간격을 가지는 이전 영상과 현재 영상 사이의 차분값을 구하여 객체의 이동 및 방향을 식별하여 움직임을 추정하는 방법이다. 이 방법은 단순 연산인 차분값 계산을 사용하므로 하드웨어 구현이 간단하다는 장점을 가지나 잡음성분에 의한 성능저하가 심한 단점을 가진다.  또한 차영상간의 간격에 따라서 검출할 수 있는 객체가 달라질 수 있다. 즉, 시간 간격이 짧다면 저속의 객체를 검출하기 힘들고 시간 간격이 길다면 고속의 객체 검출에 문제가 발생할 수 있다.


<그림 1> 연속된 두 영상 차분값을 이용해 움직임을 검출하는 방법


움직임 추적 알고리즘

제안하는 움직임 추적 카메라는 다수의 객체가 이동하는 광장이나 거리를 대상으로 한 것이 아닌 도난방지용 감시카메라를 위한 이동 객체 추적을 목표로 개발되었다. 화면내에 이동하는 영역에 대한 처리를 기본으로 하여 객체의 인지보다는 최대한 움직이는 객체를 화면내에 담을 수 있는 것을 목표로 한다.

또한, 이동 객체의 영역 및 움직임을 검출하기 위한 추적기를 SoC(System on a Chip)로 구현하기 위해서는 사용하는 연산 및 구조가 작고 단순해야 하드웨어로 제작이 용이하며 이동 객체의 검출능력 또한 떨어져서는 안된다. 이 두가지 조건에 부합하는 이동 객체 검출 모듈을 제작하기 위해서 간단하면서도 효율이 좋은 차영상 기반의 알고리즘을 제안하도록 하겠다.

우선 객체라는 것을 정의해 보자. 여러 가지 방법이 있겠지만 제안하는 알고리즘에서는 휘도신호 (luminance)가 배경과 구분이 되는 일정 크기 이상의 면적을 갖는 영역을 객체로 정의하도록 한다.

휘도 신호를 이용하는 것은 영상시스템이 대부분 사람의 눈에 기반을 하고 있으며, 사람의 눈은 색차정보(chrominance)보다 휘도정도에 더 민감하게 되어있기 때문에 휘도정보만을 이용하여 연산을 단순화시키도록 한다.

영상의 차분 값을 구하기 위해서는 적어도 2프레임 이상의 영상이 필요하다. 720×480 화소의 NT SC 영상(4:2:0)을 처리하기 위해서는 화소당 2바이트의 공간이 필요하다. 제안하는 알고리즘의 경우 휘도 정보만을 이용할 경우 1바이트의 공간만 필요하게 되며 저장해야 하는 정보를 최소화하기 위해서 샘플링(sampling)방법을 사용하였다.

샘플링 방법 중 대표위치의 화소값만을 취득하는 경우 별다른 처리가 필요 없지만 샘플값의 수가 늘어날수록 오차값이 커지는 단점이 있지만 일반적인 객체의 인식에 있어서 x축방향과 y축방향으로 각각 1/2 샘플링을 수행하여서 차분영상을 수행하여도 문제가 없음을 모의실험으로 발견하여 저장하는 용량을 각각 1/4로 감소시킬 수 있었다. 간단한 방법을 이용해 기존에 필요하였던 저장 공간을 691,200바이트에서 86,400바이트로 감소시킬 수 있었다.

객체의 움직임을 검출하기 위해서 표본화된 N번째와 N-m번째의 영상을 이용하여 차분연산을 수행한다. 이때 단순 차분 연산을 하게 되면, 노이즈의 영향을 받게 되므로 N, N-m번째 영상 사이의 차이값이 임계치 이상인 영역을 검출하여 영상 Cmotionn을 생성한다.

Difference (In, In-m) = Cmotionn


<그림 2> 표본화된 영상차 이미지 (Cmotionn)

제안하는 알고리즘에서 이동 객체를 검출하기 위해서 Cmotionn 영상에서 수직/수평 방향의 차분영상의 값을 누적하여 생성된 프로파일로부터 임계치 이상의 영역을 추출하는 방법을 사용한다.

<그림 3>에서와 같이 차분영상의 누적값(적색선)이 임계치(녹색선)를 넘는 부분의 외각영역을 선택하여 움직임 영역을 검출하는 방법을 사용한다. 이 방법의 경우 기본적으로는 움직이는 영역을 검출하는 방법으로 다수의 이동 객체가 있을 경우 최대한 많은 객체가 영상에 보일 수 있도록 표준화(nomalizing)하여 임시적으로 여러 객체에 대해서도 최대한 객체를 영상 내에 표시할 수 있다.



<그림 3> 프로파일에서 움직임 영역 검출

추출된 객체의 정확도를 높이기 위해서 몇 가지 부가적인 정보를 이용하여 객체의 인식률을 높이는 방법을 사용하였다. 차영상의 보완을 위해 사용하는 정보는 움직임이 있다고 판단할 수 있는 민감도(sensitivity)부분, 객체라고 인식할 최소의 크기(minimum object size), 인지할 수 있는 배경과의 최소 임계값(limit difference threshold), 객체의 속도에 대한 반응을 결정할 수 있는 건너뛰기(skip frame)의 값을 사용하였다. 화면 건너뛰기 값이 클수록 고속으로 움직이는 물체가 저속으로 움직이는 물체보다 잘 검출되므로, 필요에 따라 다양한 속도의 객체를 추적할 수 있도록 두 가지 경우에 대하여 움직임 영역을 찾아서 비교하여 움직임이 큰 쪽의 결과를 내보내도록 하여 저속과 고속의 객체에 대해서 반응할 수 있도록 한다.

<그림 4> 고속 및 저속 객체에 대한 움직임 모드

<그림 4>에서 나타내듯이 제안하는 움직임 추적기는 고속의 객체를 위한 모드 1과 저속의 객체를 위한 모드 2를 가지고 있어서 다양한 속도를 가지는 객체를 추적할 수 있도록 되어있다. 모드의 결정은 일정 시간 간격동안 움직임이 검출된 객체의 유무를 관찰하여 움직임이 있을 때는 화면 건너뛰기 값을 줄이고 움직임이 없을 때는 화면 건너뛰기 값을 늘이는 방식을 사용하여 속도가 다른 객체에 대해서도 검출이 가능하도록 하였다.



<그림 5> 제안하는 객체 움직임 영역 검출 알고리즘

기본적으로 능동형 감시카메라는 움직이는 물체를 쫓아가는 형식을 취하게 된다. 이를 위해서 제안하는 움직임 추적기는 움직이는 객체를 화면 중앙에 놓기 위해서 화면 중앙부와 움직임 영역의 차이를 구하게 된다. 움직임 영역이 화면의 중심에서 거리인 movx, movy값의 역방향 벡터를 MCU로 전송하여 그 결과를 이용하여 모터의 움직임을 제어하도록 되어 있다.


<그림 6> 움직임이 있는 객체를 찾기 위한 보상 위치 계산


움직임 추적 모듈이 수행하는 연산은 다음과 같다. 

동영상 코덱과의 연동

감시 카메라의 경우 그 특성상 감시와 동시에 DVR등으로 대량의 영상데이터를 기록해야 하므로 영상을 압축하기 위한 방법을 사용한다. 영상압축을 위한 MPEG2, H.264 등의 동영상 압축 코덱에서는 일반적으로 움직임 추정연산이 전체 연산량의 50∼70를 움직임 추정이 차지하므로 이를 감소시킨다면 PC나 동영상처리용 SoC가 없이도 비교적 저가의 DSP나 MCU로도 동영상 압축 코덱을 구현할 수 있다.

움직임 추정이란 시간적으로 이웃한 화면간의 연관관계를 이용하여 동영상을 압축하기 위해서 화면상의 움직임을 구하는 방법이며 MPEG2, H.264 등 대부분의 동영상 압축 표준에서 널리 사용되고 있다. 대표적인 움직임 추정 방법에는 전역 탐색 방법(full search)이나 이 방법의 연산량을 줄인 TSS(Three Step Search)와 같은 고속 탐색 방법이 있으며 이 방법들의 기본 연산은 영상간의 차분연산이다. 제안하는 움직임 추적기의 경우도 역시 차분연산을 기본으로 수행하므로 두 모듈간의 연관성이 상당히 높다고 볼 수 있다.

제안하는 움직임 추적기는 움직임 탐색을 위해서 프레임 단위로 영상간의 차분연산을 수행하게 되는데 이것은 전역 탐색 방식의 SAD(Sum of Absolute Difference)의 값을 구하는 데 사용될 수 있다. SAD 연산의 식은 다음과 같다.

움직임 추정의 경우도 동일한 차분영상을 이용하므로 차분값을 구하는 연산영역을 공유할 수 있으며, 움직임 추정기의 경우 움직임 추적에 필요한 연산, 즉, 동일위치에서의 영상의 차분값을 구하는 연산을 포함하고 있어서 움직임 추정의 연산을 수행할 수 있다.

<그림 7>은 움직임 추적기를 내장한 H.264/ AVC용 움직임 추정기의 블록도이다. 움직임 추정기의 핵심 연산인 SAD는 움직임 추적기에서 이루어지게 된다. 일반적으로 움직임 추정기는 별도의 SoC로 만들어야 할 정도로 크기가 크지만, 위의 움직임 추정기는 움직임 추적기에 보조 블록만을 추가하여 구현되므로 크기가 작아진다.


<그림 7> 이동 객체 추적기 모듈을 포함하는 움직임 추정기 구조

또한, 감시 카메라의 특성상 대부분의 시간 동안에는 움직임이 발생하지 않는 경우가 많지만, 그럼에도 불구하고 일반적인 움직임 추정기는 계속 움직임 추정을 수행해야 한다. 이에 반하여 제안하는 움직임 추정기는 움직임 추적기가 내장되어 있기 때문에 움직임이 없는 경우에는 움직임 추정뿐만 아니라 동영상 압축 코덱 전체를 수행할 필요가 없어진다. 또한 일반적인 움직임 추정기는 전체 영상에 대해 움직임 추정을 추정하므로 연산량이 매우 크지만 제안하는 움직임 추정기의 경우 움직임이 발생한 영역에 대해서만 움직임 추정을 수행하고, 객체의 전체 움직임 크기를 이미 알고 있기 때문에 동영상 코덱에서 필요한 움직임 추정의 추정 범위를 매우 좁은 영역으로 한정할 수 있다.

따라서 일반적인 움직임 추정기에 비하여 움직임 추적기를 내장한 움직인 추적기는 움직임 추정에 필요한 SAD 연산의 숫자가 매우 작기 때문에 하드웨어 크기도 크게 줄어든다.

제안하는 움직임 추적기 구조


<그림 8> 제안하는 움직임 추적기 구조

움직임 추적기의 블록도는 <그림 8>과 같으며 차분영상값을 구하는 Process Element, 객체의 움직임을 비교하는 Comparing Unit, 각 위치를 가지고 x, y의 보정값을 계산해주는 Calc Unit, 이전 영상을 저장하는 Frame Memory, I2C버스 전송을 담당하는 I2C Unit과 움직임 추정기 부분을 가지고 있다. 움직임 추정기의 경우 핵심연산유닛을 제외한 보조 부분을 의미한다.

실험 및 구현

제안하는 알고리즘을 검증하기 위해서 우선 소프트웨어를 통한 검증을 실시하였다. 소프트웨어 상에서 Sensitivity, Limit Diff, Size Limit는 각각 알고리즘에서의 민감도, 임계치, 객체 최소 크기를 의미하며 N-2옵션은 선택시 한 프레임씩 띄어서 N과 N-2번째 영상을 비교하도록 하는 옵션이다.

카메라의 출력은 720×480 화소의 NTSC 영상이지만, 움직임 추적기가 수직/수평축으로 1/2 서브샘플링을 사용하므로 검증 소프트웨어는 320×240 화소, 30 frame/를 처리하도록 하였다. 수행결과, 일반적인 사람 움직임을 충분히 검출해 낼 수 있었으며 설정해주는 부가정보의 값을 이용하여 다른 움직임도 검출가능하지만 대부분의 감시 카메라는 이 이상의 속도를 내는 물체를 추적할 만큼의 모터 속도를 가지지 못하며 대부분의 감시 카메라 어플리케이션에서도 대상이 사람인만큼 이 이상의 속도를 감지할 필요가 없다고 가정하였다.



<그림 9> 제안하는 알고리즘의 모의실험 장면

소프트웨어적인 실험 뿐 만 아니라 제안하는 움직임 추적기를 이용하여 하이비젼시스템과 공동 제작한 능동적 움직임 추적 카메라 시스템(HVR-1500TR)의 구조는 <그림 10>과 같다. FPGA의 크기 관계로 움직임 추정부는 제외하고 움직임 추적부 위주로 제작되었다.


<그림 10> 능동적인 감시 카메라 시스템의 블록 다이어그램

입력되는 신호는 720×480의 NTSC 영상이며 입력신호는 ADC를 통해서 YCbCr 또는 YUV형태의 신호로 구현된 FPGA로 입력된다. 모터의 제어를 위해서 마이크로프로세서의 하나인 ATmega16을 사용하였고 모터 드라이브를 통해서 모터를 제어하여 팬-틸트 동작을 수행하게 된다. 또한 USB를 통한 인터페이스를 구성하여 외부로부터 기본적인 동작변수를 입력 받으며 입력되는 영상값을 출력하도록 해준다.

각 블록간의 데이터 통신은 I2C를 사용하여 차후 움직임 추정기 및 다른 모듈과의 SoC화에서도 쉽게 다른 모듈과 연결이 될 수 있도록 설계하였다. FPGA에서 구현된 움직임 추적기의 동작 결과는 BILA(Built In Logic Analyzer)로 측정하였고, 최대 100㎒에서 동작이 가능하였다.



<그림 11> BILA를 통한 움직임 추정 연산기의 동작 확인

움직임 추적기가 생성한 movx, movy는 ATme ga16를 통해 모터에 전달되어 <그림 12>와 같이 움직임 영역의 위치에 따라서 팬/틸트(pan/tilt)제어를 수행하게 된다. 움직임이 발생한 객체를 화면의 중심부에 보이게 하기 위해서 movx, movy 값에 따라 수평축 움직임(panning)과 수직축 움직임(tilting)의 유무와 크기가 결정된다.


<그림 12> 객체 영역에 따른 카메라의 움직임

제작된 움직임 추적기의 크기는 프레임 메모리를 제외하고 약 13,000 게이트(Xilinx사의 ISE로 합성된 기준으로 추정)의 작은 크기를 가지며 최대 109.5㎒로 동작이 가능하여 수평/수직 방향으로 1/2 서브 샘플링된 NTSC 영상을 초당 48프레임 정도로 처리가 가능하다. 


<그림 13> 제안하는 움직임 추적기로 개발된 (주)하이비젼시스템의 PVR-1500TR

결론

제안하는 움직임 추적기는 하드웨어 크기가 작으면서도 시속 10km 이내의 사람 움직임을 효과적으로 감지할 수 있는 모듈이다. 또한 I2C기반의 통신이 가능하여 여타 다른 장비 또는 모듈들과의 접속이 가능하며, 영상의 차분값을 이용하는 방법을 사용하였기 때문에 동영상 압축 표준 모듈의 부하를 감소시킬 수 있다. 더불어 제안하는 움직임 추적기 알고리즘의 경우 동영상 압축 연산 지원뿐만 아니라 객체의 움직임 영역을 검출하는 방식으로 영상의 저장시 전체 프레임 영역을 저장하는 것이 아닌 생성된 움직임 영역만을 저장하는 방법을 사용할 수 있어서 감시시스템의 저장 크기를 줄여 장시간의 기록을 가능하게 할 것으로 예상된다.

제안하는 구조의 경우 움직임 추적기의 크기가 내장메모리를 제외하고 약 13,000게이트이고 움직임 추정모듈을 포함할 경우 0.35㎛공정으로 약 17,000게이트 수준으로 소형 모듈로의 구현이 가능하여 차후 감시카메라용 SoC 구현에 있어서도 기여할 것으로 보인다.



            
           

이성수 교수(sslee@ssu.ac.kr) , 양현철(blueecho@ssu.ac.kr)
                      숭실대학교 전자통신전자공학부









댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글 0
0 / 400
댓글쓰기
계정을 선택하시면 로그인·계정인증을 통해
댓글을 남기실 수 있습니다.