본 발명의 일 실시예에 따른 비디오 신호를 부호화하는 방법은 다계층 비디오 신호를 구성하는 블록을 부호화하는 방법에 있어서, 현재 계층의 제 1 블록에 대응하는 하위 계층의 제 2 블록의 제 1 모션 벡터를 역변환하여 제 2 모션 벡터를 생성하는 단계, 상기 제 2 모션 벡터를 사용하여 상기 제 1 블록의 전방향 모션벡터 또는 후방향 모션벡터를 예측하는 단계, 및 상기 예측한 결과를 사용하여 상기 제 1 블록을 부호화하는 단계를 포함하며, 상기 제 1 모션 벡터는 상기 제 2 블록을 기준으로 시간적으로 전 또는 후에 위치한 블록에 대한 모션 벡터이다.
본 발명의 일 실시예에 따른 비디오 신호를 복호화하는 방법은 다계층 비디오 신호를 구성하는 블록을 복호화하는 방법에 있어서, 현재 계층의 제 1 블록에 대응하는 하위 계층의 제 2 블록의 제 1 모션 벡터를 역변환하여 제 2 모션 벡터를 생성하는 단계, 상기 제 2 모션 벡터를 사용하여 상기 제 1 블록의 전방향 모션벡터 또는 후방향 모션 벡터를 예측하는 단계, 및 상기 예측한 결과를 사용하여 상기 제 1 블록을 복호화하는 단계를 포함하며, 상기 제 1 모션 벡터는 상기 제 2 블록을 기준으로 시간적으로 전 또는 후에 위치한 블록에 대한 모션 벡터이다.
본 발명의 일 실시예에 따른 비디오 인코더는 다계층 비디오 신호를 구성하 는 블록을 부호화하는 인코더에 있어서, 현재 계층의 제 1 블록에 대응하는 하위 계층의 제 2 블록의 제 1 모션 벡터를 역변환하여 제 2 모션 벡터를 생성하는 모션벡터 역변환부, 상기 제 2 모션 벡터를 사용하여 상기 제 1 블록의 전방향 모션벡터 또는 후방향 모션벡터를 예측하는 예측부, 및 상기 예측한 결과를 사용하여 상기 제 1 블록을 부호화하는 인터 예측 인코딩부를 포함하며, 상기 제 1 모션 벡터는 상기 제 2 블록을 기준으로 시간적으로 전 또는 후에 위치한 블록에 대한 모션 벡터이다.
본 발명의 일 실시예에 따른 비디오 디코더는 다계층 비디오 신호를 구성하는 블록을 복호화하는 디코더에 있어서, 현재 계층의 제 1 블록에 대응하는 하위 계층의 제 2 블록의 제 1 모션 벡터를 역변환하여 제 2 모션 벡터를 생성하는 모션벡터 역변환부, 상기 제 2 모션 벡터를 사용하여 상기 제 1 블록의 전방향 모션벡터 또는 후방향 모션 벡터를 예측하는 예측부, 및 상기 예측한 결과를 사용하여 상기 제 1 블록을 복호화하는 인터 예측 디코딩부를 포함하며, 상기 제 1 모션 벡터는 상기 제 2 블록을 기준으로 시간적으로 전 또는 후에 위치한 블록에 대한 모션 벡터이다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태 로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다
이하, 본 발명의 실시예들에 의하여 계층적 구조에 적합하게 시간적 다이렉트 모드로 인코딩하며, 디코딩하는 방법 및 장치를 설명하기 위한 블록도 또는 처리 흐름도에 대한 도면들을 참고하여 본 발명에 대해 설명하도록 한다. 이 때, 처리 흐름도 도면들의 각 블록과 흐름도 도면들의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수 있음을 이해할 수 있을 것이다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 흐름도 블록(들)에서 설명된 기능들을 수행하는 수단을 생성하게 된다. 또한, 각 블록은 특정된 논리적 기능(들)을 실행하기 위한 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실행예들에서는 블록들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 블록들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
도 4는 본 발명의 일 실시예에 따른 기초 계층의 모션 벡터를 역변환하여 예 측하는 과정을 보여주는 도면이다.
도 4의 410, 420. 430, 412, 422, 432는 프레임 또는 픽쳐일 수 있으며, 블록, 매크로 블록일 수 있다. 도 4의 설명에서는 편의상 프레임으로 하지만, 이는 일 실시예이다. 마찬가지로 블록 또한 서브 블록, 매크로블록 등이 될 수 있다.
420에 포함되는 블록 또는 매크로 블록 450은 시간적으로 선, 후에 있는 프레임 또는 픽쳐의 블록을 참조한다. cMV0는 이전 프레임/픽쳐의 블록에 대한 모션 벡터이며, cMV1은 시간적으로 이후에 존재하는 프레임/픽쳐의 블록에 대한 모션 벡터이다. cMV0는 전방향 모션 벡터라 할 수 있으며, cMV1은 후방향 모션 벡터라 명명할 수 있다. cRefIdx0와 cRefIdx1은 양 방향을 참조하는 420 프레임/픽쳐에서 양방향의 블록을 참조함을 나타내는 모션 벡터가 존재함을 나타내는 변수이다. 이때, 하위 계층에 모션 벡터가 존재할 경우, 이들의 값에서 현재 계층의 모션 벡터를 계산할 수 있다. 예를 들어, 450 블록의 경우 하위 계층의 동일한 시간적 위치에 존재하는 422 프레임/픽쳐의 블록인 452의 모션 벡터인 bMV1을 참조하여 cMV1을 생성할 수 있다.
그런데, 450 블록이 양방향을 참조하므로, cMV0에 대한 값도 필요한다. 만약 452 블록이 한 방향만을 참조하는 경우(도 4에서와 같이 bMV0), 하나만 존재하는 모션 벡터의 역을 구하여 참조할 수 있다. 하위 계층에는 bMV1이 존재하지 않지만, bMV0을 역으로 한, 즉 -1을 곱한 값을 bMV1로 하여 이 값에서 cMV1를 산출할 수 있다.
도 4의 실시예에서 알 수 있듯이, 450과 같이 백워드(backward)/포워 드(forward) 예측을 수행하는 블록의 하위 블록이 백워드 또는 포워드 예측만을 수행하는 경우, 그 값의 역을 구하여 하위 블록에는 없는 포워드 또는 백워드 예측을 산출할 수 있다.
도 5는 본 발명의 일 실시예에 따른 디코딩 측에서 기초 계층의 모션 벡터를 역변환하는 과정을 보여주는 도면이다.
520 프레임/픽쳐의 550 블록은 시간적으로 전/후에 있는 510, 530 프레임/픽쳐의 블록에 대한 전방향 모션 벡터 cMV0, 후방향 cMV1의 값을 가지고 있다. 그런데 이 값은 하위 계층의 모션 벡터를 통해 산출된 값이므로, 하위 계층의 모션 벡터의 값이 무엇인지 구해야 한다.
하위 계층 프레임인 522의 552 블록은 시간적으로 이전 프레임인 512의 블록을 참조하는 bMV0 모션벡터만 존재한다. 따라서 시간적으로 이후 프레임인 532의 블록을 참조하는 bMV1의 값이 존재하지 않는다. 그러나 시간적으로 순차적인 관계에 있는 세 프레임이므로, 도 4에서 살펴본 바와 같이, bMV0의 값에 -1을 곱하는 등, 역의 관계에 있는 벡터 값을 구한다. 그 결과를 bMV1으로 하여 이를 기준으로 cMV1을 산출할 수 있다.
도 4 또는 도 5에서 하위 계층의 모션 벡터를 참조하는지 여부를 알리거나 또는 그러한 사실을 알기 위해서는 모션 예측 플래그를 사용할 수 있다. motion_prediction_flag를 사용하여 하위 계층의 모션벡터값을 참조하여 예측하는지 여부를 판단할 수 있다.
한편, 시간적으로 앞선 블록을 참조하는 경우 RefIdx0에서 가리키는 블록을 참조하며, 시간적으로 뒤따르는 블록을 참조하는 경우 RefIdx1에서 가리키는 블록을 참조한다. 따라서, RefIdx0 또는 RefIdx1이 세팅된 경우, 하위 계층의 동일한 블록을 가리키는 RefIdx0 또는 RefIdx1값이 존재하는 경우에 본원 발명이 적용 가능하다.
도 6은 본 발명의 일 실시예에 따른 인코딩 과정을 보여주는 도면이다.
인코딩(encoding)은 소정의 데이터를 부호화 하는 과정을 의미한다.
현재 계층의 블록을 부호화함에 있어서 대응되는 하위 계층의 블록을 검색한다(S610). 부호화하고자 하는 블록의 모션 벡터가 하위 계층의 블록의 제 1 모션 벡터를 통해 예측 가능한지 판단한다(S620). 도 4의 경우에서 cMV0는 예측가능하지만, bMV1이 존재하지 않기 때문에 cMV1은 예측이 가능하지 않다.
예측이 가능하지 않은 경우, 하위 계층의 블록의 제 2 모션 벡터를 역변환하여 제 1 모션 벡터를 생성한다(S630). 그리고 제 1 모션 벡터를 사용하여 부호화하고자 하는 블록의 모션 벡터를 예측한다(S640). 예측한 결과 또는 잔차 데이터를 사용하여 부호화하고자 하는 블록을 부호화(encoding)한다(S650). S620 단계에서 예측 가능한 것으로 판단되면 S630 과정 없이 부호화(인코딩) 과정을 수행한다.
제 2 모션 벡터와 제 1 모션 벡터가 참조하게 되는 블록은 하위 계층의 블록을 시간적인 기준으로 동일한 위치에 있으며 시간상 반대의 방향에 있는 블록이다. 예를 들어, 제 1 모션 벡터가 참조하게 되는 블록의 POC(Point of Count)를 기준으로 10이며, 제 2 모션 벡터가 참조하게 되는 블록의 POC는 12이며, 하위 계층의 블록의 POC는 11인 경우이다.
시간적으로 동일한 위치에 있으며 방향은 반대이므로, 시간적 흐름에 따라 텍스쳐의 이동 또는 변화의 크기는 비슷할 가능성이 높으므로, 시간적으로 반대의 위치에 있는 블록을 참조하는 모션 벡터를 역변환하여 사용할 수 있다.
상기 과정을 도 4의 경우와 비교하여 보면, 다음과 같다.
비디오 인코더에서 부호화 하고자 하는 블록은 450 블록이다. 블록은 매크로 블록 또는 서브 블록 등을 포함하는 개념이다. 450 블록의 모션 벡터 cMV1이 하위 계층의 블록 452의 모션 벡터를 사용하여 예측할 수 없는 경우에, 인코더는 블록 452의 다른 모션 벡터인 bMV0를 역변환하여 bMV1을 생성한다. 그리고 생성한 bMV1에 의해 cMV1을 예측할 수 있다. 비디오 인코더는 cMV1을 사용하여 450 블록을 부호화 할 수 있다. 여기서 cMV0와 bMV0에 의해 각각 참조되는 410 픽쳐와 412 픽쳐는 동일한 시간축에 있으며, cMV1에 의해 참조되는 430 픽쳐와 420 픽쳐와의 차이는 410 픽쳐와 420 픽쳐와의 차이와 같을 수 있다.
도 6에서의 제 1 모션 벡터 또는 제 2 모션 벡터는 하나의 블록이 인터 예측에 의해 가질 수 있는 모션 벡터가 2개인 경우를 예로 든 것이다. 제 1 모션 벡터가 시간적으로 앞선 블록을 참조한다면 제 2 모션 벡터는 시간적으로 뒤따르는 블록을 참조하게 되며, 제 1 모션 벡터가 시간적으로 뒤따르는 블록을 참조한다면 제 2 모션 벡터는 시간적으로 앞선 블록을 참조할 수 있다.
도 7은 본 발명의 일 실시예에 따른 디코딩 과정을 보여주는 도면이다.
디코딩(decoding)은 소정의 부호화된 데이터를 복호화 하는 과정을 의미한다.
비디오 디코더는 수신한, 또는 저장된 비디오 신호를 복호화한다. 복호화하고자 하는 블록이 참조하는 모션 벡터에 대한 정보를 추출한다(S710). 모션 벡터에 대한 정보의 일 실시예로, 전술한 RefIdx0 또는 RefIdx1과 같이 list0, list1상의 참조 프레임/픽쳐 등에 대한 정보가 존재한다. 또한 하위 계층의 모션 벡터를 참조하는지 여부는 motion_prediction_flag와 같은 정보를 통해 추출 가능하다. 추출한 정보를 사용하여 복호화하고자 하는 블록이 하위 계층의 대응되는 블록의 제 1 모션 벡터를 참조하는지 여부를 판단한다(S720). 판단 결과 하위 계층의 제 1 모션 벡터를 참조하지 않는 경우, 다른 방식 또는 통상의 방식에 따라 복호화한다.
하위 계층의 블록의 제 1 모션 벡터를 참조한다면, 제 1 모션 벡터가 존재하는지를 검토한다(S730). 제 1 모션 벡터가 존재하지 않는면 하위 계층의 블록의 제 2 모션 벡터를 역변환하여 제 1 모션 벡터를 생성한다(S740).
상기 제 1 모션 벡터와 상기 제 2 모션 벡터가 하위 계층의 블록을 기준으로 시간적으로 동일한 거리에 반대 방향에 있는 블록을 참조함은 도 6에서 설명하였다.
역변환에 의해 생성된 제 1 모션 벡터를 사용하여 복호화하고자 하는 블록의 모션 벡터를 예측한다(S750). 예측한 결과를 사용하여 복호화하고자 하는 블록을 복호화한다(S760).
상기 과정을 도 5의 경우와 비교하여 보면, 다음과 같다.
비디오 디코더에서 복호화 하고자 하는 블록은 550 블록이다. 블록은 매크로 블록 또는 서브 블록 등을 포함하는 개념이다. 550 블록의 cRefIdx1은 cMV1이 530 픽쳐/프레임을 참조함을 알리며, 도면 5에 미도시되었으나 motion_prediction_flag와 같은 정보에 의해 하위 계층의 모션 벡터를 참조함을 나타내고 있다. 그런데, 하위 계층의 블록 552에서 530 픽쳐/프레임과 동일한 시간적 위치에 있는 532 픽쳐/프레임을 참조하는 모션 벡터를 가지고 있지 않는 경우에, 디코더는 블록 552의 다른 모션 벡터인 bMV0를 역변환하여 bMV1을 생성한다. 그리고 생성한 bMV1에 의해 cMV1을 예측할 수 있다. 비디오 디코더는 cMV1을 사용하여 550 블록을 복호화 할 수 있다. 여기서 cMV0와 bMV0에 의해 각각 참조되는 510 픽쳐와 512 픽쳐는 동일한 시간축에 있으며, cMV1에 의해 참조되는 530 픽쳐와 520 픽쳐와의 차이는 510 픽쳐와 520 픽쳐와의 차이와 같을 수 있다.
디코딩하는 과정에서 역변환을 하는 과정을 살펴보면 다음과 같다.
refPicBase를 기초계층의 매크로블록의 ref_idx_IX[mbPartIdxBase]의 신택스 엘리먼트에 의해 참조되는 픽쳐라고 가정한다(X는 1 또는 0). 이때, ref_idx_lX[mbPartIdxBase] 가 이용 가능하면, refPicBase는 ref_idx_lX[mbPartIdxBase]에 의해 참조되는 픽쳐이다. 이용 가능하지 않다면, refPicBase는 반대쪽을 선택한다. 즉, ref_idx_l0[mbPartIdxBase]이 이용가능하지 않을 경우 ref_idx_l1[mbPartIdxBase]을 선택하고, 반대로 ref_idx_l1[mbPartIdxBase]이 이용가능하지 않을 경우 ref_idx_l0[mbPartIdxBase]을 선택한다. 그리고 선택한 픽쳐에 대한 모션 벡터에 -1을 곱하여 역변환을 시킬 수 있다. 기초 계층의 루마 모션 벡터 예측(luma motion vection prediction)의 경우에도 적용 가능하다.
본 실시예에서 사용되는 '~부'라는 용어, 즉 '~모듈' 또는 '~테이블' 등은 소프트웨어, FPGA(Field Programmable Gate Array) 또는 주문형 반도체(Application Specific Integrated Circuit, ASIC)와 같은 하드웨어 구성요소를 의미하며, 모듈은 어떤 기능들을 수행한다. 그렇지만 모듈은 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. 모듈은 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 모듈은 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다. 구성요소들과 모듈들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 모듈들로 결합되거나 추가적인 구성요소들과 모듈들로 더 분리될 수 있다. 뿐만 아니라, 구성요소들 및 모듈들은 디바이스 내의 하나 또는 그 이상의 CPU들을 재생시키도록 구현될 수도 있다.
도 8은 본 발명의 일 실시예에 따른 비디오 인코더 중 향상 계층을 인코딩하는 향상 계층 인코딩부(800)의 구성을 보여주는 도면이다. 기초 계층의 인코딩 과정 또는 비디오 신호를 인코딩함에 있어서 양자화 하는 과정 등은 종래의 기술이므로 본 명세서에서 생략하고자 한다.
향상 계층 인코딩부(800)는 모션 벡터 역변환부(810), 시간적 위치 꼐산부(820), 예측부(850), 그리고 인터 예측 인코딩부(860)을 포함한다. 영상 데이터 는 예측부(850)에 입력되며, 하위 계층의 영상 데이터는 모션 벡터 역변환부(810)으로 입력된다.
모션 벡터 역변환부(810)는 현재 계층의 제 1 블록에 대응하는 하위 계층의 제 2 블록의 제 1 모션 벡터를 역변환하여 제 2 모션 벡터를 생성한다. 도 4의 예에서, bMV0를 사용하여 bMV1을 생성하는 것이 일실시예이다. 그리고 예측부(850)는 역변환을 통해 생성된 모션 벡터를 사용하여 현재 계층(향상 계층)의 영상 데이터에 대해 모션 예측을 수행한다. 시간적 위치 계산부(820)는 모션 벡터 역변환부(810)에서 모션 벡터 역변환시, 어느 모션 벡터를 역변환 할 것인지를 알기 위한 시간적 위치 또는 시간적 정보를 계산한다. 예측부(850)에서 예측한 결과는 인터 예측 인코딩부(860)를 통해 향상 계층 비디오 스트림으로 출력된다.
도 4의 예에서 살펴본 바와 같이, 예측부(850)는 인코딩하고자 하는 블록의 전방향 모션 벡터 또는 후방향 모션 벡터를 예측하는데, 그 예측 자료로, 하위 계층의 블록의 모션 벡터를 사용한다. 그리고 모션 벡터 역변환부(810)는 하위 계층의 블록의 소정 모션 벡터가 존재하지 않을 경우, 시간적으로 반대의 블록을 참조하는 모션 벡터를 역변환한다.
향상 계층은 하위 계층을 참조하며, 하위 계층의 실시예로는 기초 계층 또는 FGS 계층, 또는 하위의 향상 계층이 될 수 있다.
예측부(850)는 역변환하여 생성된 하위 계층의 모션 벡터와의 잔차를 계산할 수 있다. 그리고 인터 예측 인코딩부(820)는 하위 계층의 모션 벡터를 참조함을 알리도록 motion_prediction_flag와 같은 정보를 설정할 수 있다.
도 9는 본 발명의 일 실시예에 따른 비디오 디코더 중 향상 계층을 디코딩하는 향상 계층 디코딩부(900)의 구성을 보여주는 도면이다. 기초 계층의 디코딩 과정 또는 비디오 신호를 디코딩함에 있어서 역양자화 하는 과정 등은 종래의 기술이므로 본 명세서에서 생략하고자 한다.
향상계층 디코딩부(900)는 모션 벡터 역변환부(910), 시간적 위치 계산부(920), 예측부(950), 그리고 인터 예측 디코딩부(960)으로 구성된다. 하위 계층 비디오 스트림은 모션 벡터 역변환부(910)으로 입력된다. 한편 향상계층 비디오 스트림 역시 예측부(950)로 입력되는데, 예측부(950)는 향상계층 비디오 스트림의 특정 블록의 모션 벡터가 하위 계층의 모션 벡터를 참조하는지 검토한다. 그리고 하위 계층의 모션 벡터를 참조하지만 하위 계층 비디오 스트림에 모션 벡터가 존재하지 않는 경우, 시간적 위치 계산부(920)를 통해 역변환할 모션 벡터를 선택하고, 모션 벡터 역변환부(910)에서 모션 벡터를 역변환한다. 이는 도 5 및 도 7에서 살펴본 사항이다. 예측부(950)는 역변환된 하위 계층의 모션 벡터를 사용하여, 해당 블록의 모션 벡터를 예측하고, 인터 예측 디코딩부(960)는 예측된 모션 벡터를 사용하여 블록을 디코딩한다. 디코딩한 결과는 영상 데이터로 복원되어 출력된다.
도 10은 본 발명의 일 실시예에 따른 실험 결과이다. 도 10에서 향상 계층의 모션 검색 범위는 8, 32, 그리고 96으로 변화한다. 네 개의 CIF 시퀀스가 사용되었다. 최대 성능의 향상은 3.6%의 비트가 절약되었으며, 0.17dB PSNR의 효과가 있다.
표 1에서는 도 10의 향상을 비교하고 있다.
|
종래 |
본 실시예에 의한 경우 |
|
비트율 |
PSNR |
비트율 |
PSNR |
8 |
401.00 |
32.50 |
386.50 |
32.67 |
32 |
383.07 |
32.66 |
378.62 |
32.69 |
96 |
373.77 |
32.68 |
373.27 |
32.69 |
본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구의 범위에 의하여 나타내어지며, 특허청구의 범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.