6 장동영상처리 4AVI 파일처리 4AVI 플레이어만들기 4 움직임벡터추정
6.. AVI 파일처리 o AVI(Audio video Iterleave) 파일 마이크로소프트사에서만든디지털비디오파일포맷 오디오 (audio) 과비디오 (video) 을함께포함가능 여러개의오디오또는비디오스트림 (stream) 을가질수있음 AVI 파일은압축하지않은비디오와압축된비디오포맷을동시에지원 압축된비디오포맷의 AVI 파일은해당압축방법을해제할수있는코덱 (codec) 이필요 한빛미디어영상처리프로그래밍 By Visual C++ - 2 -
6.. AVI 파일 처리 o AVI 파일포맷 RIFF(Resource Iterchage File Format) 의특별한한형태 RIFF ('AVI ' LIST ('hdrl' 'avih'(<mai AVI Header>) LIST ('strl' 'strh'(<stream header>) 'strf'(<stream format>) [ 'strd'(<additioal header data>) ] [ 'str'(<stream ame>) ]... )... ) LIST ('movi' {SubChuk LIST ('rec ' SubChuk SubChuk2... )... }... ) ['idx' (<AVI Idex>) ] ) 한빛미디어영상처리프로그래밍 By Visual C++ - 3 -
6.. AVI 파일처리 o AVIFile 함수 윈도우즈에서 AVI 파일같은 RIFF 포맷을처리하기위해제공되는함수들 AVIFileIit AVIFileExit AVIFileOpe AVIFileRelease AVIFileGetStream AVIStreamRelease AVIStreamGetFrameOpe AVIStreamGetFrameClose AVIStreamGetFrame 한빛미디어영상처리프로그래밍 By Visual C++ - 4 -
6.. AVI 파일처리 o CAvi 클래스 CAvi(void) ~CAvi(void) 함수이름 Ope(LPCTSTR lpszpathname) Close() AVI 파일의사용을중지한다. 함수설명 생성자함수이다. AVIFileIit() 함수를호출하여 AVIFile 함수의사용을알리고, 멤버변수의값들을초기화한다. 소멸자함수이다. Close() 함수와 AVIFileExit() 함수를호출한다. 인자로넘어온 AVI 파일을열고, 비디오스트림으로부터압축되지않은비디오프레임을준비한다. DrawFrame( ) 특정프레임을화면에출력한다. GetFrame(it Frame, CDib& dib) 특정프레임을 CDib 클래스타입으로변환한다. GetFrameRate() 초당프레임수를반환한다. GetTotalFrame() 전체프레임수를반환한다. GetHeight() 비디오프레임의세로픽셀크기를반환한다. GetWidth() 비디오프레임의가로픽셀크기를반환한다. GetBitCout() 비디오프레임의픽셀당비트수를반환한다. IsValid() 비디오프레임이유효한지를검사한다. 한빛미디어영상처리프로그래밍 By Visual C++ - 5 -
6.2. AVI 플레이어만들기 o 새도큐먼트템플릿등록하기. 새도큐먼트를위한클래스추가 ( 차일드프레임, 도큐먼트, 뷰클래스 ) 2. 새도큐먼트를위한리소스추가 ( 툴바, 메뉴, 문자열테이블 ) 3. IitIstace 함수에서도큐먼트템플릿등록 한빛미디어영상처리프로그래밍 By Visual C++ - 6 -
6.2. AVI 플레이어만들기 o ImageTool 프로그램에서 AVI 파일재생 한빛미디어영상처리프로그래밍 By Visual C++ - 7 -
6.3. 움직임벡터추정 o 움직임벡터 (motio vector) 영상의시간축방향으로의변화를감지하여동영상내객체의움직임정보를추출 o 움직임벡터를구하는방법 옵티컬플로우 (optical flow) 블록매칭 (block matchig) o MPEG, 2 등에서사용 한빛미디어영상처리프로그래밍 By Visual C++ - 8 -
6.3. 움직임벡터추정 o 블록매칭움직임추정방법 현재프레임의특정위치의블록이이전프레임의어느위치에서이동한블록인지를찾는방법 연속하는두동영상프레임에오직 2 차원이동 (traslatio) 움직임만존재한다고가정 I I t t - M N W W 한빛미디어영상처리프로그래밍 By Visual C++ - 9 -
6.3. 움직임벡터추정 o 평균절대값차이 (Mea Absolute Differece) 두블록의유사도평가척도 M-N- MAD (, x y) = I ( k + i, l + j) - I ( k + x + i, l + y + j) åå ( kl, ) t t- MN i= 0 j= 0 o 움직임벡터검출 MAD 값을가장작게만드는변위 (x,y) 의값을해당블록의움직임벡터로간주 vkl (, ) = argmi MAD ( xy, ) ( xy, ) ( kl, ) 한빛미디어영상처리프로그래밍 By Visual C++ - 0 -
6.3. 움직임벡터추정 o 전역검색 (full search) 블록주변의모든변위에대하여 MAD 를계산하는방법 정확하지만시간이너무오래걸림 o 다이아몬드검색 (diamod search) 큰다이아몬드검색패턴 (LDSP) 작은다이아몬드검색패턴 (SDSP) LDSP 방법으로최소 MAD 위치의근방으로빠르게이동하고, 마지막에 SDSP 방법으로정확한위치를찾음 한빛미디어영상처리프로그래밍 By Visual C++ - -
6.3. 움직임벡터추정 o 다이아몬드검색알고리즘. 블록의중심을 (0, 0) 으로설정한다. 2. 9 개의 LDSP 위치에서 MAD 값을계산한다. 만약 9 개 LDSP 점들중에서가운데점에서최소 MAD 값이나타나면 4 번으로이동한다. 아니면, 3 번으로이동한다. 3. 2 번에서구한최소 MAD 위치를다시블록의중심으로설정하고, 9 개의점들에서 LDSP 방법으로 MAD 를구한다. 만약, LDSP 의가운데점에서최소 MAD 값이나타나면 4 번으로이동한다. 아니면, 이과정을반복한다. 4. SDSP 방법으로 5 개의점에서 MAD 를계산한다. 5 개의위치중최소 MAD 값을나타내는위치가최종위치이다. 한빛미디어영상처리프로그래밍 By Visual C++ - 2 -
6.3. 움직임벡터추정 o 다이아몬드검색방법을이용한움직임추정 -4-3 -2-0 2 3 4 5 6 7-5 8-4 4-3 3 5 4-2 2 5 3 5 4-2 5 3 0 2 2 2 3 2 한빛미디어영상처리프로그래밍 By Visual C++ - 3 -
6.3. 움직임벡터추정 o 2 차원대수적탐색 (2D logarithmic search) o Takes several iteratios ad is aki to a biary search: 4/4 As illustrated i the ext figure, iitially oly ie locatios i the search widow are used as seeds for a MAD-based search; they are marked as `'. After the oe that yields the miimum MAD is located, the ceter of the ew search regio is moved to it ad the step-size ("offset") is reduced to half. I the ext iteratio, the ie ew locatios are marked as `2', ad so o.
6.3. 움직임벡터추정 o 2 차원대수적탐색 (2D logarithmic search) 5/4
6.3. 움직임벡터추정 o Hierarchical Search The search ca beefit from a hierarchical (multiresolutio) approach i which iitial estimatio of the motio vector ca be obtaied from images with a sigificatly reduced resolutio. 6/4
6.3. 움직임벡터추정 7/4
6.3. 움직임벡터추정 o 차영상과움직임벡터검출결과 한빛미디어영상처리프로그래밍 By Visual C++ - 8 -