首页 / 专利库 / 多媒体工具与应用 / 视频编码 / 움직임 벡터를 이용한 영상 복호화 방법 및 및 컴퓨터로 판독 가능한 저장매체

움직임 벡터를 이용한 영상 복호화 방법 및 및 컴퓨터로 판독 가능한 저장매체

阅读:0发布:2022-11-09

专利汇可以提供움직임 벡터를 이용한 영상 복호화 방법 및 및 컴퓨터로 판독 가능한 저장매체专利检索,专利查询,专利分析的服务。并且PURPOSE: An image decoding method using a motion vector and a storage media capable of being decoded by a computer are provided to reduce the size of memory space needed for storage of the motion vector. CONSTITUTION: A decoder cuts a motion vector of a reference picture with a predetermined dynamic range (S1510). The decoder stores the motion vector which is cut in a buffer (S1520). The decoder deducts the motion vector of a decoding object block by using the stored motion vector (S1530). The decoder performs inter prediction decoding of the decoding object block by using the motion vector of the decoding object block (S1540). [Reference numerals] (S1510) Cut a motion vector of a reference picture; (S1520) Store a cut motion vector; (S1530) Deduct a motion vector of a decoding object block; (S1540) Perform inter prediction decoding,下面是움직임 벡터를 이용한 영상 복호화 방법 및 및 컴퓨터로 판독 가능한 저장매체专利的具体信息内容。

  • 참조 픽쳐의 움직임 벡터를 소정의 다이내믹 레인지로 절삭하여 절삭된 움직임 벡터를 생성하는 단계;
    상기 절삭된 움직임 벡터를 버퍼에 저장하는 단계;
    상기 버퍼에 저장된 움직임 벡터를 이용하여 복호화 대상 블록의 움직임 벡터를 도출하는 단계; 및
    상기 복호화 대상 블록의 움직임 벡터를 이용하여 인터 예측 복호화를 수행하는 단계를 포함하는 영상 복호화 방법.
  • 说明书全文

    움직임 벡터를 이용한 영상 부호화/복호화 방법 및 장치{VIDEO CODING/DECODING METHOD USING MOTION VECTOR AND APPARATUS THEREOF}

    본 발명은 영상 처리에 관한 것으로, 더욱 상세하게는 움직임 벡터를 이용한 부호화/복호화 방법 및 장치에 관한 것이다.

    최근 HD(High Definition) 해상도를 지원하는 방송 시스템이 국내뿐만 아니라 세계적으로 확대되면서, 많은 사용자가 고해상도, 고화질의 영상에 익숙해지고 있으며, 이에 따라 많은 기관들이 차세대 영상기기에 대한 개발에 박차를 가하고 있다. 또한, HDTV와 더불어 HDTV의 4배 이상의 해상도를 지원하는 UHD(Ultra High Definition)에 대한 관심이 증대되면서, 더욱 높은 해상도, 고화질의 영상에 대한 압축 기술이 요구되고 있다.

    영상의 압축을 위해, 선행하는 픽쳐 및/또는 뒤에 나오는 픽쳐로부터 현재 픽쳐에 포함된 픽셀 값을 예측하는 인터(inter) 예측 기술, 픽쳐 내의 픽셀 정보를 이용하여 픽셀 값을 예측하는 인트라(intra) 예측 기술 및/또는 출현 빈도가 높은 심볼(symbol)에 짧은 부호를 할당하고 출현 빈도가 낮은 심볼에 긴 부호를 할당하는 엔트로피 부호화 기술 등이 사용될 수 있다.

    본 발명은 절삭된 움직임 벡터를 이용하여 영상을 부호화/복호화하는 방법 및 장치를 제공한다.

    본 발명은 참조 픽쳐의 움직임 벡터를 절삭하는 방법을 제공한다.

    본 발명은 움직임 벡터에 대한 정보를 전송하는 방법을 제공한다.

    [1] 본 발명의 일 실시예에 따르면 영상 부호화 방법이 제공된다. 영상 부호화 방법은 참조 픽쳐의 움직임 벡터를 소정의 다이내믹 레인지로 절삭하여 절삭된 움직임 벡터를 생성하는 단계, 절삭된 움직임 벡터를 버퍼에 저장하는 단계 및 버퍼에 저장된 움직임 벡터를 이용하여 부호화 대상 블록의 움직임 벡터를 부호화 단계를 포함한다.

    [2] [1]에 있어서, 다이내믹 레인지는 영상 코덱의 레벨에 의해 정의될 수 있다.

    [3] [1]에 있어서, 다이내믹 레인지는 소정의 비트 심도에 의해 결정되고, 비트 심도는 영상 코덱의 레벨에 의해 정의될 수 있다.

    [4] [1]에 있어서, 참조 픽쳐의 움직임 벡터의 X 성분과 Y 성분은 서로 다른 다이내믹 레인지로 절삭될 수 있다.

    [5] 본 발명의 일 실시예에 따르면 영상 복호화 방법이 제공된다. 영상 복호화 방법은 참조 픽쳐의 움직임 벡터를 소정의 다이내믹 레인지로 절삭하여 절삭된 움직임 벡터를 생성하는 단계, 절삭된 움직임 벡터를 버퍼에 저장하는 단계 및 버퍼에 저장된 움직임 벡터를 이용하여 복호화 대상 블록의 움직임 벡터를 도출하는 단계 및 복호화 대상 블록의 움직임 벡터를 이용하여 인터 예측 복호화를 수행하는 단계를 포함한다.

    [6] [5]에 있어서, 다이내믹 레인지는 영상 코덱의 레벨에 의해 정의될 수 있다.

    [7] [5]에 있어서, 다이내믹 레인지는 소정의 비트 심도에 의해 결정되고, 비트 심도는 영상 코덱의 레벨에 의해 정의될 수 있다.

    [8] [5]에 있어서, 다이내믹 레인지는 소정의 비트 심도에 의해 결정되고, 비트 심도는 영상 부호화 장치로부터 전송되는 시퀀스 파라미터 셋을 통해 획득될 수 있다.

    [9] [8]에 있어서, 시퀀스 파라미터 셋은 참조 픽쳐의 움직임 벡터가 절삭되었는지를 나타내는 플래그 및 비트 심도를 획득하기 위한 파라미터를 포함할 수 있다.

    [10] [9]에 있어서, 영상 복호화 방법은 참조 픽쳐의 움직임 벡터를 압축하는 단계를 더 포함하고, 시퀀스 파리미터 셋은 참조 픽쳐의 움직임 벡터가 압축되었는지를 나타내는 플래그 및 참조 픽쳐의 움직임 벡터의 압축 비율을 획득하기 위한 파라미터를 포함할 수 있다.

    [11] [5]에 있어서, 영상 복호화 방법은 참조 픽쳐의 움직임 벡터의 표현 해상도를 제한하는 단계를 더 포함할 수 있다.

    [12] [5]에 있어서, 절삭된 움직임 벡터는 우선순위에 따라 저장될 수 있다.

    [13] [5]에 있어서, 절삭된 움직임 벡터는 인터 예측 모드로 부호화된 블록의 움직임 벡터일 수 있다.

    [14] [5]에 있어서, 영상 복호화 방법은 참조 픽쳐의 움직임 벡터에 대한 스케일링(scaling)을 수행하는 단계를 더 포함할 수 있다.

    [15] [5]에 있어서, 참조 픽쳐의 움직임 벡터의 X 성분과 Y 성분은 서로 다른 다이내믹 레인지로 절삭될 수 있다.

    [16] [15]에 있어서, X 성분의 다이내믹 레인지와 Y 성분의 다이내믹 레인지는 영상 코덱의 레벨에 의해 정의될 수 있다.

    [17] 본 발명의 일 실시예에 따르면, 참조 픽쳐 버퍼 및 움직임 보상부를 포함하는 영상 복호화 장치가 제공된다. 참조 픽쳐 버퍼는 참조 픽쳐를 저장한다. 움직임 보상부는 참조 픽쳐 및 참조 픽쳐의 움직임 벡터를 이용하여 예측 블록을 생성한다. 여기서, 참조 픽쳐의 움직임 벡터는 소정의 다이내믹 레인지로 절삭된 것이다.

    [18] [17]에 있어서, 다이내믹 레인지는 영상 코덱의 레벨에 의해 정의될 수 있다.

    [19] [17]에 있어서, 다이내믹 레인지는 소정의 비트 심도에 의해 결정되고, 비트 심도는 영상 코덱의 레벨에 의해 정의될 수 있다.

    [20] [17]에 있어서, 다이내믹 레인지는 소정의 비트 심도에 의해 결정되고, 비트 심도는 영상 부호화 장치로부터 전송되는 시퀀스 파라미터 셋을 통해 획득될 수 있다.

    본 발명에 따르면 절삭된 움직임 벡터를 이용하여 영상을 부호화/복호화할 수 있다.

    본 발명에 따르면 움직임 벡터를 저장하는데 필요한 메모리 공간의 크기를 감소시킬 수 있다.

    본 발명에 따르면 메모리로부터 데이터를 가져오는데 요구되는 메모리 접근 대역폭을 감소시킬 수 있다.

    도 1은 영상 부호화 장치의 구조의 일 예를 나타내는 블록도이다.
    도 2는 영상 복호화 장치의 구조의 일 예를 나타내는 블록도이다.
    도 3은 부호화/복호화 대상 픽쳐와 참조 픽쳐의 일 예를 나타낸다.
    도 4는 움직임 벡터의 다이내믹 레인지를 제한하는 일 예이다.
    도 5 내지 도 8은 참조 픽쳐의 움직임 벡터를 저장하는 방법을 나타낸 순서도이다.
    도 9는 움직임 벡터를 양자화하는 일 예이다.
    도 10 내지 도 13은 참조 픽쳐로부터 움직임 정보를 가져오는 예들을 나타낸다.
    도 14는 본 발명의 일 실시예에 따른 영상의 부호화 방법을 나타낸 순서도이다.
    도 15는 본 발명의 일 실시예에 따른 영상의 복호화 방법을 나타낸 순서도이다.

    이하, 도면을 참조하여 본 발명의 실시 형태에 대하여 구체적으로 설명하기로 한다. 단, 본 발명의 실시예를 설명함에 있어서, 공지의 구성 또는 기능에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략한다.

    어떤 구성 요소가 다른 구성 요소에 "연결되어" 있거나 "접속되어" 있다고 서술되어 있는 경우, 다른 구성 요소에 직접 연결되어 있거나 접속되어 있을 수 있으나, 또 다른 구성요소가 중간에 존재할 수도 있음을 의미한다. 또한, 본 발명에서 특정 구성 요소를 "포함"한다고 서술되어 있는 경우, 해당 구성 요소 이외의 구성 요소를 배제하는 것이 아니라, 추가적인 구성 요소가 본 발명의 실시예 또는 기술적 사상의 범위에 포함될 수 있음을 의미한다.

    "제 1", "제 2" 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되지 않는다. 즉, 상기 용어 들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제 1 구성 요소는 제 2 구성 요소로 명명될 수 있고, 마찬가지로 제 2 구성요소도 제 1 구성 요소로 명명될 수 있다.

    또한, 본 발명의 실시예에 나타나는 구성 요소는 서로 다른 특징적인 기능을 수행하는 것을 나타내기 위해 독립적으로 도시될 뿐, 각 구성 요소가 하나의 하드웨어 또는 소프트웨어로 구현될 수 없음을 의미하는 것은 아니다. 즉, 각 구성 요소는 설명의 편의상 구분된 것으로, 복수의 구성 요소가 합쳐져 하나의 구성 요소로 동작하거나, 하나의 구성 요소가 복수의 구성 요소로 나뉘어져 동작할 수 있고, 이는 본 발명의 본질에서 벗어나지 않는 한 본 발명의 권리 범위로 포함된다.

    또한, 일부 구성 요소는 본 발명의 본질적인 기능을 수행하는 필수 구성 요소가 아닌 성능의 향상을 위한 선택적 구성 요소일 수 있다. 본 발명은 선택적 구성 요소를 제외하고 필수 구성 요소만을 포함한 구조로도 구현될 수 있으며, 필수 구성 요소만을 포함한 구조 역시 본 발명의 권리 범위에 포함된다.

    도 1은 영상 부호화 장치의 구조의 일 예를 나타내는 블록도이다.

    도 1을 참조하면, 영상 부호화 장치(100)는 움직임 예측부(111), 움직임 보상부(112), 인트라 예측부(120), 스위치(115), 감산기(125), 변환부(130), 양자화부(140), 엔트로피 부호화부(150), 역양자화부(160), 역변환부(170), 가산기(175), 필터부(180) 및 참조 픽쳐 버퍼(190)를 포함한다.

    영상 부호화 장치(100)는 입력 영상을 인트라 예측 모드(intra prediction mode) 또는 인터 예측 모드(inter prediction mode)로 부호화하여 비트스트림(bitstream)을 출력한다. 인트라 예측은 화면 내 예측, 인터 예측은 화면 간 예측을 의미한다. 영상 부호화 장치(100)는 스위치(115)의 전환을 통해 인트라 예측 모드와 인터 예측 모드 사이를 천이한다. 영상 부호화 장치(100)는 입력 영상의 입력 블록에 대한 예측 블록을 생성한 후, 입력 블록과 예측 블록의 차분(residual)을 부호화한다.

    인트라 예측 모드의 경우, 인트라 예측부(120)는 현재 블록 주변의 이미 부호화된 블록의 픽셀 값을 이용하여 공간적 예측을 수행하여 예측 블록을 생성한다.

    인터 예측 모드의 경우, 움직임 예측부(111)는 움직임 예측 과정에서 참조 픽쳐 버퍼(190)에 저장되어 있는 참조 픽쳐 내에서 입력 블록과 가장 매칭이 잘 되는 참조 블록을 찾아 움직임 벡터를 구한다. 움직임 보상부(112)는 상기 움직임 벡터를 이용하여 움직임 보상을 수행하여 예측 블록을 생성한다. 여기서, 움직임 벡터는 인터 예측에 사용되는 2차원 벡터이며, 현재 부호화/복호화의 대상 블록과 참조 블록 사이의 오프셋을 나타낸다.

    감산기(125)는 입력 블록과 예측 블록의 차분에 기반하여 차분 블록(residual block)을 생성하고, 변환부(130)는 상기 차분 블록을 변환(transform)하여 변환 계수(transform coefficient)를 출력한다. 양자화부(140)는 상기 변환 계수를 양자화하여 양자화된 계수(quantized coefficient)를 출력한다.

    엔트로피 부호화부(150)는 부호화/양자화 과정에서 획득한 정보에 기반한 엔트로피 부호화를 수행하여 비트스트림을 출력한다. 엔트로피 부호화는 빈번하게 발생되는 심볼(symbol)을 적은 수의 비트로 표현함으로써 부호화의 대상 심볼에 대한 비트열의 크기를 감소시킨다. 따라서, 엔트로피 부호화를 통해 영상의 압축 성능의 향상을 기대할 수 있다. 엔트로피 부호화부(150)는 엔트로피 부호화를 위해 지수 골룸(exponential golomb), CAVLC(Context-Adaptive Variable Length Coding, CABAC(Context-Adaptive Binary Arithmetic Coding)과 같은 부호화 방법을 사용할 수 있다.

    인터 예측 부호화를 수행하기 위한 참조 픽쳐로 사용되기 위해 부호화된 픽쳐는 다시 복호화되어 저장될 필요가 있다. 따라서, 역양자화부(160)는 양자화된 계수를 역양자화하고, 역변화부(170)는 역양자화된 계수를 역변환(inverse transform)하여 복원된 차분 블록을 출력한다. 가산기(175)는 예측 블록에 복원된 차분 블록을 더하여 복원 블록을 생성한다.

    필터부(180)는 적응적 인-루프(in-loop) 필터로도 불리며, 복원 블록에 디블록킹 필터링(deblocking filtering), SAO(Sample Adaptive Offset) 보상, ALF(Adaptive Loop Filtering) 중 적어도 하나 이상을 적용한다. 디블록킹 필터링은 블록 간 경계에 생긴 블록 왜곡을 제거하는 것을 의미하고, SAO 보상은 코딩 에러를 보상하기 위해 픽셀 값에 적정 오프셋(offset)을 더해주는 것을 의미한다. 또한, ALF는 복원된 영상과 원래의 영상을 비교한 값에 기반하여 필터링을 수행하는 것을 의미한다.

    한편, 참조 픽쳐 버퍼(190)는 필터부(180)를 거친 복원 블록을 저장한다.

    도 2는 영상 복호화 장치의 구조의 일 예를 나타내는 블록도이다.

    도 2를 참조하면, 영상 복호화 장치(200)는 엔트로피 복호화부(210), 역양자화부(220), 역변환부(230), 인트라 예측부(240), 움직임 보상부(250), 가산기(255), 필터부(260) 및 참조 픽쳐 버퍼(270)를 포함한다.

    영상 복호화 장치(200)는 비트스트림을 인트라 예측 모드 또는 인터 예측 모드로 복호화하여 복원 영상을 출력한다. 영상 복호화 장치(200)는 스위치의 전환을 통해 인트라 예측 모드와 인터 예측 모드 사이를 천이한다. 영상 복호화 장치(200)는 비트스트림으로부터 차분 블록을 획득하여 예측 블록을 생성한 후, 차분 블록과 예측 블록을 더하여 복원 블록을 생성한다.

    엔트로피 복호화부(210)는 확률 분포에 기반한 엔트로피 복호화를 수행한다. 엔트로피 복호화 과정은 상술한 엔트로피 부호화 과정의 반대과정이다. 즉, 엔트로피 복호화부(210)는 빈번하게 발생되는 심볼을 적은 수의 비트로 표현한 비트스트림으로부터 양자화된 계수를 포함하는 심볼을 생성한다.

    역양자화부(220)는 양자화된 계수를 역양자화하고, 역변환부(230)는 역양자화된 계수를 역변환하여 차분 블록을 생성한다.

    인트라 예측 모드의 경우, 인트라 예측부(240)는 현재 블록 주변의 이미 복호화된 블록의 픽셀 값을 이용하여 공간적 예측을 수행하여 예측 블록을 생성한다.

    인터 예측 모드의 경우, 움직임 보상부(250)는 움직임 벡터 및 참조 픽쳐 버퍼(270)에 저장된 참조 픽쳐를 이용한 움직임 보상을 수행하여 예측 블록을 생성한다.

    가산기(255)는 차분 블록에 예측 블록을 더하고, 필터부(260)는 가산기를 거친 블록에 디블록킹 필터링, SAO 보상, ALF 중 적어도 하나 이상을 적용하여 복원 영상을 출력한다.

    한편, 복원 영상은 참조 픽쳐 버퍼(270)에 저장되어 움직임 보상에 사용될 수 있다.

    이하, 블록은 부호화/복호화의 단위를 의미한다. 부호화/복호화 과정에서, 영상은 소정의 크기로 분할되어 부호화/복호화된다. 따라서, 블록은 부호화 유닛(CU: Coding Unit), 예측 유닛(PU: Prediction Unit), 변환 유닛(TU: Transform Unit) 등으로도 불릴 수도 있으며, 하나의 블록은 더 작은 크기의 하위 블록으로 분할될 수도 있다.

    여기서, 예측 유닛은 예측 및/또는 움직임 보상 수행의 기본 단위를 의미한다. 예측 유닛은 복수의 파티션(partition)으로 분할될 수 있으며, 각각의 파티션은 예측 유닛 파티션(prediction unit partition)으로 불린다. 예측 유닛이 복수의 파티션으로 분할된 경우, 예측 유닛 파티션은 예측 및/또는 움직임 보상 수행의 기본 단위가 될 수 있다. 이하, 본 발명의 실시예에서는 예측 유닛은 예측 유닛 파티션을 의미할 수도 있다.

    한편, HEVC(High Efficiency Video Coding)에서는 향상된 움직임 벡터 예측(AMVP: Advanced Motion Vector Prediction)에 기반한 움직임 벡터 예측(motion vector prediction) 방법을 사용한다.

    향상된 움직임 벡터 예측에 기반한 움직임 벡터 예측 방법에서는 부호화/복호화 대상 블록의 주변에 위치하는 복원 블록의 움직임 벡터(MV: Motion Vector)뿐만 아니라, 참조 픽쳐(reference picture) 내에서 부호화/복호화 대상 블록과 동일한 위치 또는 대응되는 위치에 존재하는 블록의 움직임 벡터를 이용할 수 있다. 이때. 참조 픽쳐 내에서 부화화/복호화 대상 블록과 동일한 위치 또는 공간적으로 대응되는 위치에 존재하는 블록을 동등 위치 블록(collocated block), 동등 위치 블록의 움직임 벡터를 동등 위치 움직임 벡터(collocated motion vector) 또는 시간적 움직임 벡터(temporal motion vector)라고 부른다. 그러나, 동동 위치 블록(collocated block)은 참조 픽쳐의 부호화/복호화 대상 블록과 반드시 동일한 위치에 존재하는 블록만이 아니라, 부호화/복호화 대상 블록과 위치가 유사한, 즉 대응되는 위치에 존재하는 블록일 수도 있다.

    움직임 정보 병합(motion information merge) 방법에서는 움직임 정보를 주변에 위치하는 복원 블록뿐만 아니라 동등 위치 블록으로부터도 유추하여, 부호화/복호화 대상 블록의 움직임 정보로 이용한다. 이때, 움직임 정보는 인터 예측 시에 필요한 참조 픽쳐 인덱스(reference picture index), 움직임 벡터, 단방향(uni-direction) 또는 양방향(bi-direction) 등을 나타내는 인터 예측 모드 정보, 참조 픽쳐 리스트(reference picture list), 인트라 예측 모드로 부호화되었는지 인터 예측 모드로 부호화되었는지에 관한 예측 모드(prediction mode) 정보 중 적어도 하나 이상을 포함하는 정보이다.

    부호화/복호화 대상 블록에서 예측된 움직임 벡터(predictied motion vector)는 부호화/복호화 대상 블록과 공간적으로 인접한 주변 블록의 움직임 벡터뿐만 아니라, 부호화/복호화 대상 블록과 시간적으로 인접한 블록인 동등 위치 블록의 움직임 벡터일 수도 있다.

    도 3은 부호화/복호화 대상 픽쳐와 참조 픽쳐의 일 예를 나타낸다.

    도 3에서 블록 X는 부호화/복호화 대상 픽쳐(310) 내의 부호화/복호화 대상 블록을 나타내며, 블록 A, 블록 B, 블록 C, 블록 D 및 블록 E는 부호화/복호화 대상 블록의 주변에 위치하는 복원 블록을 나타낸다. 그리고, 참조 픽쳐(320) 내의 블록 T는 부호화/복호화 대상 블록과 대응되는 위치에 존재하는 동등 위치 블록을 나타낸다.

    부호화/복호화 대상 블록에서 어떠한 움직임 벡터를 예측된 움직임 벡터로 이용한지에 대해서는 움직임 백터 예측기 인덱스(motion vector predictor index)을 통해서 알 수 있다.

    표 1과 같이, 각각의 참조 픽쳐 리스트에 대한 움직임 벡터 예측기 인덱스(mvp_idx_l0, mvp_idx_l1)가 복호화 장치로 전송되며, 복호화 장치는 부호화 장치가 예측한 움직임 벡터와 동일한 움직임 벡터를 예측된 움직임 벡터로 이용한다.

    부호화/복호화 대상 블록과 공간적으로 인접한 주변 블록의 움직임 벡터를 이용하여 부호화/복호화 대상 블록을 부호화/복호화하는 경우, 상대적으로 작은 크기의 메모리(memory)만으로 움직임 벡터를 저장할 수 있다. 하지만, 시간적 움직임 벡터를 이용하는 경우, 참조 픽쳐의 모든 움직임 벡터를 메모리에 저장해야 하므로, 상대적으로 큰 크기의 메모리가 필요하고, 메모리로부터 데이터를 가져오는데 요구되는 메모리 접근 대역폭(memory access bandwidth)의 크기도 증가하게 된다. 따라서, 휴대수신단말기 등 메모리 공간이 충분하지 않거나, 전력의 소모를 최소화해야하는 응용 환경에서는 시간적 움직임 벡터를 더욱 효율적으로 저장할 필요가 있다.

    한편, 움직임 벡터를 메모리에 저장하는 종래의 기술로 움직임 벡터의 공간 해상도(spatial resolution)를 낮추는 방법이 있다. 상기 방법에서는 움직임 벡터를 임의의 비율로 압축하여 메모리에 저장한다. 예를 들어, 4x4 블록 단위로 저장되는 움직임 벡터를 4x4 이상의 블록 단위로 저장하여, 저장되는 움직임 벡터의 개수를 줄인다. 이때, 저장되는 움직임 벡터의 블록 크기를 조정하기 위해, 압축 비율에 대한 정보가 전송된다. 상기 정보는 표 2와 같이 시퀀스 파라미터 셋(SPS: Sequence Parameter Set)을 통해 전송된다.

    표 2를 참조하면, motion_vector_buffer_comp_flag가 1일 경우, 움직임 벡터 버퍼 압축 과정이 수행된다.

    motion_vector_buffer_comp_ratio_log2는 움직임 벡터 버퍼 압축 과정의 압축 비율을 나타낸다. motion_vector_buffer_comp_ratio_log2가 존재하지 않을 경우, motion_vector_buffer_comp_ratio_log2는 0으로 유추되며, 움직임 벡터 버퍼 압축 비율을 수학식 1과 같이 표현된다.

    예를 들어, 1920x1080(1080p) 픽쳐의 모든 4x4 블록이 다른 움직임 벡터를 가지고, 2개의 참조 픽쳐 리스트를 사용하며, 각각의 리스트마다 2개의 참조 픽쳐를 사용하는 경우, 아래와 같이, 총 3.21 Mbytes의 메모리 공간이 시간적 움직임 벡터를 저장하기 위해 요구된다.

    1. 하나의 움직임 벡터마다 26 bis의 비트 심도(bit depth)

    (1) 움직임 벡터의 X 성분의 다이내믹 레인지(dynamic range): -252 내지 +7676(비트 심도: 13 bits)

    (2) 움직임 벡터의 Y 성분의 다이내믹 레인지(dynamic range): -252 내지 +4316(비트 심도: 13 bits)

    (3) (움직임 벡터의 각각의 성분의 다이내믹 레인지는 해당 픽쳐 내의 첫 번째 예측 유닛을 기준으로 계산되었다.)

    2. 4x4 블록 단위 모두 다른 움직임 벡터를 가질 경우: 480 x 270 = 129600 블록

    3. 각각의 블록마다 2개의 움직임 벡터를 사용

    4. 참조 픽쳐 리스트의 수: 2개

    5. 참조 픽쳐 리스트마다 2개의 참조 픽쳐를 사용

    => 26 bits x 129600 블록 x 2개의 움직임 벡터 x 2개의 참조 픽쳐 리스트 x 2개의 참조 픽쳐 = 26956800 bits = 3.21 Mbytes

    전술한 움직임 벡터의 공간 해상도를 낮추는 방법에 따르면, 움직임 벡터의 공간적인 상관성을 이용하여 요구되는 메모리 공간의 크기 및 메모리 접근 대역폭을 줄일 수 있다. 그러나, 움직임 벡터의 공간 해상도를 낮추는 상기 방법은 움직임 벡터의 다이내믹 레인지를 제한하지 않았다.

    만약 메모리 공간의 크기를 1/4로 줄일 경우, 상술한 예에서 요구되는 메모리 공간의 크기는 약 0.8 Mbytes로 줄어들게 된다. 이때, 추가로 움직임 벡터의 다이내믹 레인지를 제한하여, 움직임 벡터를 저장하는데 필요한 비트 심도를 움직임 벡터의 각각의 성분마다 6 bits만을 사용하게 하면, 요구되는 메모리 공간의 크기는 0.37 Mbytes로 더욱 줄일 수 있다.

    따라서, 본 발명에서는 움직임 벡터를 저장하는데 필요한 메모리 공간의 크기와 메모리로부터 데이터를 가져오는데 요구되는 메모리 접근 대역폭을 감소시키기 위해, 움직임 벡터의 다이내믹 레인지를 제한한다. 다이내믹 레인지가 제한된 참조 픽쳐의 움직임 벡터는 부호화/복호화 대상 블록에서 시간적 움직임 벡터로 이용될 수 있다.

    이하, 다이내믹 레인지는 0을 기준으로 움직임 벡터의 음의 성분이나 양의 성분이 가질 수 있는 최솟값과 최댓값 사이의 구간을 의미하고, 비트 심도는 움직임 벡터를 저장하는데 필요한 공간의 크기를 나타내는 것으로, 비트 폭(bit width)을 의미할 수도 있다. 또한, 특별한 언급이 없는 한, 움직임 벡터는 참조 픽쳐의 움직임 벡터, 즉 시간적 움직임 벡터를 의미한다.

    움직임 벡터의 각각의 성분은 다이내믹 레인지를 벗어나는 경우 해당 다이내믹 레인지의 최솟값 또는 최댓값으로 표현된다. 예를 들어, 움직임 벡터의 X 성분이 312이고, 움직임 벡터의 각각의 성분의 다이내믹 레인지의 최댓값이 256일 경우, 움직임 벡터의 X 성분은 256으로 제한된다.

    마찬가지로, 움직임 벡터의 각각의 성분의 비트 심도가 16 bits이고, 움직임 벡터가 (-36, 24)인 경우, 상기 움직임 벡터의 각각의 성분의 비트 심도를 6 bits로 제한하면, 움직임 벡터의 각각의 성분은 -32 내지 +31의 다이내믹 레인지를 가지게 되어, 상기 움직임 벡터는 다이내믹 레인지 내인 (-32, 24)로 표현된다.

    또한, 움직임 벡터의 각각의 성분의 비트 심도가 16 bits이고, 움직임 벡터가 (-49, 142)인 경우, 상기 움직임 벡터의 각각의 성분의 비트 심도를 9 bits로 제한하면, 움직임 벡터의 각각의 성분은 -256 내지 +255의 다이내믹 레인지를 가지게 되어, 상기 움직임 벡터는 변화없이 (-49, 142)로 표현된다.

    도 4는 움직임 벡터의 다이내믹 레인지를 제한하는 일 예이다.

    도 4를 참조하면, -4096 내지 +4095의 다이내믹 레인지를 가지는 움직임 벡터의 다이내믹 레인지를 -128 내지 +127로 제한하면, 비트 심도를 13 bits에서 8 bits로 감소시킬 수 있다.

    시간적 움직임 벡터의 각각의 성분은 N bit(s)의 비트 심도로 저장되기 위해 수학식 2 및 수학식 3과 같이 절삭(clip)된다. 여기서, N은 양의 정수이다.

    여기서, MV_X는 움직임 벡터의 X 성분, MV_Y는 움직임 벡터의 Y 성분이고, min(a,b)는 a와 b 중에서 작은 값을 출력하는 연산, max(a,b)는 a와 b 중에서 큰 값을 출력하는 연산이다. clippedMV_X와 clippedMV_Y는 각각 절삭된 시간적 움직임 벡터의 X 성분, Y 성분이며, 메모리에 저장되어 부호화/복호화 대상 블록의 시간적 움직임 벡터로 이용된다.

    예를 들어, 표 3과 같이 메모리 공간의 크기가 48 byte이고, 움직임 벡터의 각각의 성분마다 16 bits의 비트 심도를 사용하는 경우, 총 12개의 움직임 벡터를 저장할 수 있다.

    MV1-X MV1-Y MV2-X MV2-Y MV3-X MV3-Y MV4-X MV4-Y
    MV5-X MV5-Y MV6-X MV6-Y MV7-X MV7-Y MV8-X MV8-Y
    MV9-X MV9-Y MV10-X MV10-Y MV11-X MV11-Y MV12-X MV12-Y

    그러나, 움직임 벡터의 각각의 성분마다 8 bits의 비트 심도만을 사용한다면, 표 4와 같이 총 24개의 움직임 벡터를 저장할 수 있다.

    MV1-X MV1-Y MV2-X MV2-Y MV3-X MV3-Y MV4-X MV4-Y
    MV5-X MV5-Y MV6-X MV6-Y MV7-X MV7-Y MV8-X MV8-Y
    MV9-X MV9-Y MV10-X MV10-Y MV11-X MV11-Y MV12-X MV12-Y
    MV13-X MV13-Y MV14-X MV14-Y MV15-X MV15-Y MV16-X MV16-Y
    MV17-X MV17-Y MV18-X MV18-Y MV19-X MV19-Y MV20-X MV20-Y
    MV21-X MV21-Y MV22-X MV22-Y MV23-X MV23-Y MV24-X MV24-Y

    따라서, 본 발명에 따르면, 부호화 장치 및/또는 복호화 장치에서 복원된 영상이 디블록킹 필터(deblocking filter), 적응적 루프 필터(adpative loop filter) 등의 인-루프 필터링(in-loop filtering) 과정을 거쳐 복원된 영상 버퍼(DPB: decoded picture buffer)에 저장될 때, 움직임 벡터의 다이내믹 레인지를 제한하여 참조 픽쳐의 움직임 벡터를 저장한다. 여기서, 복원된 영상 버퍼는 도 1 또는 도 2의 참조 픽쳐 버퍼를 의미할 수 있다.

    I. 움직임 벡터 절삭 과정

    움직임 벡터의 각각의 성분을 절삭하는 과정은 슬라이스 타입(slice_type)이 I 픽쳐가 아닌 경우 수행된다. 움직임 벡터 절삭 과정은 필터링 과정을 마친 뒤, 트리블록(treeblock) 또는 최대 크기 부호화 유닛(LCU: Largest Coding Unit) 단위로 수행된다.

    움직임 벡터 절삭 과정의 입력은 현재 픽쳐에서의 예측 유닛의 좌상단 픽셀 위치인 (xP, yP)와 움직임 벡터 행렬 MvL0 및 MvL1이고, 출력은 절삭된 움직임 벡터 행렬 CMvL0 및 CMvL1이다.

    행렬 MvL0, MvL1, CMvL0 및 CMvL1에 대해서 수학식 4 내지 수학식 7의 연산이 수행된다.

    여기서, TMVBitWidth는 움직임 벡터의 비트 심도를 나타내며, Clip3(a, b, c)는 c를 a와 b 사이의 범위 내에 존재하도록 절삭하는 함수를 의미한다.

    II. 움직임 벡터 저장 과정

    도 5 내지 도 8은 참조 픽쳐의 움직임 벡터를 저장하는 방법을 나타낸 순서도이다.

    도 5를 참조하면, 복원된 영상을 저장하는 영상 버퍼와 움직임 벡터를 저장하는 움직임 벡터 버퍼를 함께 이용하여, 참조 픽쳐의 움직임 벡터를 저장할 수 있다. 이때, 복원된 영상은 인-루프 필터링 과정(S510)을 거치고, 움직임 벡터는 다이내믹 레인지가 제한(S520)되어 저장(S540)된다.

    또한, 도 6을 참조하면, 영상 버퍼와 움직임 벡터 버퍼를 함께 이용하되, 움직임 벡터는 다이내믹 레인지 제한 과정(S620) 및 공간 해상도 감소 과정(S630)을 거쳐 저장(S640)된다.

    또한, 도 7을 참조하면, 복원된 영상은 인-루프 필터링 과정(S710)을 거쳐 영상 버퍼에 저장(S740)되고, 움직임 벡터는 다이내믹 레인지가 제한(S720)되어 움직임 벡터 버퍼에 저장(S750)된다.

    또한, 도 8을 참조하면, 복원된 영상은 인-루프 필터링 과정(S810)을 거쳐 영상 버퍼에 저장(S840)되고, 움직임 벡터는 다이내믹 레인지 제한 과정(S820) 및 공간 해상도 감소 과정(S830)을 거쳐 저장(S850)된다.

    한편, 도 6과 도 8의 실시예에서 다이내믹 레인지 제한 과정(S620, S820)과 공간 해상도 감소 과정(S630, S830)은 순서에 한정되지 않고, 변경될 수 있다.

    또한, 메모리 접근 대역폭을 더욱 감소시키기 위해, 움직임 벡터의 각각의 성분에 대한 다이내믹 레인지를 서로 다르게 제한할 수 있다. 예를 들어, X 성분의 다이내믹 레인지와 Y 성분의 다이내믹 레인지 중 하나만을 제한하거나, Y 성분의 다이내믹 레인지를 X 성분의 다이내믹 레인지보다 더 제한할 수 있다.

    움직임 벡터의 제한된 다이내믹 레인지는 시퀀스 파라미터 셋, 픽쳐 파리마터 셋(PPS: Picture Parameter Set) 또는 슬라이스 헤더(slice header) 등을 통해 전송되며, 복호화 장치는 시퀀스, 픽쳐 또는 슬라이스 내에서 시간적 움직임 벡터의 다이내믹 레인지의 제한을 동일하게 수행한다. 이때, 다이내믹 레인지 범위 내로 표현되는 움직임 벡터를 저장하는데 필요한 메모리 공간의 크기인 비트 심도가 함께 전송될 수 있다. 또한, 고정된 크기의 비트 심도를 이용하여 움직임 벡터를 저장하지 않고, 시퀀스 파리미터, 픽쳐 파라미터 셋 또는 슬레이스 헤더 등을 통해 전송된 다이내믹 레인지를 이용하여, 시간적 움직임 벡터를 영상의 움직임 특성에 맞게 효율적으로 저장할 수도 있다.

    한편, 움직임 벡터는 양자화되어 저장될 수 있다. 움직임 벡터가 양자화되어 저장되는 경우, 움직임 벡터의 정밀도는 감소하게 된다. 양자화 방법으로는 스텝 크기(step size)가 균등한 균등 양자화(uniform quantization), 스텝 크기가 균등하지 않은 비균등 양자화(non-uniform quantization) 등이 있다. 양자화의 스텝 크기는 부호화 장치와 복호화 장치에서 미리 약속된 고정된 값으로 설정되거나, 시퀀스 파라미터 셋. 픽쳐 파라미터 셋, 또는 슬라이스 헤더 등을 통해 부호화 장치로부터 복호화 장치로 전송된다. 복호화 장치에서는 양자화된 움직임 벡터를 그대로 이용하거나, 역양자화하여 이용한다. 도 9는 움직임 벡터를 양자화하는 일 예이다. 도 9를 참조하면, 움직임 벡터가 32 내지 48의 성분 값을 갖는 경우, 움직임 벡터는 40으로 양자화된다.

    또한, 움직임 벡터는 표현 해상도가 제한되어 저장될 수 있다. 표현 해상도는 정수 화소 단위(1화소 단위), 분수 화소 단위(1/2화소 단위, 1/4화소 단위 등)를 의미한다. 예를 들어, 1/4화소 단위로 처리되는 움직임 벡터의 해상도를 정수 화소로 저장할 수 있다. 움직임 벡터의 표현 해상도는 부호화 장치와 복호화 장치에서 미리 약속된 고정된 값으로 설정되거나, 시퀀스 파라미터 셋, 픽쳐 파라미터 셋 또는 슬라이스 헤더 등을 통해 부호화 장치로부터 복호화 장치로 전송된다.

    또한, 메모리에 저장되는 시간적 움직임 벡터들 중에서 일부의 움직임 벡터들에 대해서만 움직임 벡터의 다이내믹 레인지 제한 과정, 공간 해상도 감소 과정, 양자화 과정을 수행할 수 있다.

    움직임 벡터의 다이내믹 레인지를 제한하여 저장하는 경우, 움직임 벡터의 다이내믹 레인지에 대한 정보를 추가하여 메모리에 저장할 수 있다. 예를 들어, 움직임 벡터의 다이내믹 레인지를 -128 내지 +127로 하는 경우, 1의 플래그를 추가로 저장하고, -32 내지 +31로 하는 경우, 0의 플래그를 추가로 저장할 수 있다. 이때, 플래그 정보는 움직임 벡터와 함께 저장되거나, 움직임 벡터가 저장되는 메모리가 아닌 다른 메모리에 저장될 수 있다. 플래그 정보와 움직임 벡터가 다른 메모리에 저장되는 경우, 특정 움직임 벡터가 어떤 다이내믹 레인지로 저장되었는지에 대해 알아낼 때 플래그 정보에 임의 접근하게 할 수 있다. 또한, 일부 움직임 벡터가 어떤 다이내믹 레인지로 저장되었는지에 대한 정보를 시퀀스 파라미터 셋, 픽쳐 파라미터 셋 또는 슬라이스 헤더 등을 통해 전송하여, 복호화기에서도 부호화기와 동일하게 동작하게 할 수 있다.

    움직임 벡터의 공간 해상도를 감소시켜 저장하는 경우, 움직임 벡터의 블록 크기에 대한 정보를 추가하여 메모리에 저장할 수 있다. 예를 들어, 움직임 벡터의 블록 크기를 4x4로 하는 경우, 1의 플래그를 추가로 저장하고, 16x16로 하는 경우, 0의 플래그를 추가로 저장할 수 있다. 이때, 플래그 정보는 움직임 벡터와 함께 저장되거나, 움직임 벡터가 저장되는 메모리가 아닌 다른 메모리에 저장될 수 있다. 플래그 정보와 움직임 벡터가 다른 메모리에 저장되는 경우, 특정 움직임 벡터가 어떤 블록 크기로 저장되었는지에 대해 알아낼 때 플래그 정보에 임의 접근하게 할 수 있다. 또한, 일부 움직임 벡터가 어떤 블록 크기로 저장되었는지에 대한 정보를 시퀀스 파라미터 셋, 픽쳐 파라미터 셋 또는 슬라이스 헤더 등을 통해 전송하여, 복호화기에서도 부호화기와 동일하게 동작하게 할 수 있다.

    움직임 벡터를 양자화하여 저장하는 경우, 움직임 벡터의 정밀도에 대한 정보를 추가하여 메모리에 저장할 수 있다. 예를 들어, 양자화의 스텝 크기를 4로 하는 경우, 1의 플래그를 추가로 저장하고, 양자화의 스텝 크기를 1로 하는 경우, 0의 플래그를 추가로 저장할 수 있다. 이때, 플래그 정보는 움직임 벡터와 함께 저장되거나, 움직임 벡터가 저장되는 메모리가 아닌 다른 메모리에 저장될 수 있다. 플래그 정보와 움직임 벡터가 다른 메모리에 저장되는 경우, 특정 움직임 벡터가 어떤 스텝 크기로 양자화되어 저장되었는지에 대해 알아낼 때 플래그 정보에 임의 접근하게 할 수 있다. 또한, 일부 움직임 벡터가 어떤 스텝 크기로 양자화되어 저장되었는지에 대한 정보를 시퀀스 파라미터 셋, 픽쳐 파라미터 셋 또는 슬라이스 헤더 등을 통해 전송하여, 복호화기에서도 부호화기와 동일하게 동작하게 할 수 있다.

    또한, 움직임 정보를 메모리에 저장하는 경우, 움직임 벡터의 공간 해상도를 감소시켜 저장할 수 있다. 이때, 움직임 정보는 인터 예측 시에 필요한 참조 픽쳐 인덱스(reference picture index), 움직임 벡터, 단방향(uni-direction) 또는 양방향(bi-direction) 등을 나타내는 인터 예측 모드 정보, 참조 픽쳐 리스트(reference picture list), 인트라 예측 모드로 부호화되었는지 인터 예측 모드로 부호화되었는지에 관한 예측 모드(prediction mode) 정보 중 적어도 하나 이상을 포함하는 정보이다.

    예를 들어, 특정 영역의 다수의 움직임 정보 중에서 파티션의 크기가 가장 큰 예측 유닛의 움직임 정보를 대표 움직임 정보로 메모리에 저장할 수 있다. 이때, 특정 영역은 부호화/복호화 대상 블록 내의 영역과 주변 블록의 영역을 포함할 수 있다. 또한, 특정 영역은 픽쳐 또는 슬라이스 전체가 일정한 크기로 분할되는 경우, 움직임 정보가 저장되는 블록을 포함하는 영역일 수 있다.

    예를 들어, 특정 영역에 포함되는 다수의 움직임 정보 중에 움직임 정보 병합 방법이나, 부호화 정보 생략(skip) 방법 등으로 부호화된 움직임 정보를 제외한 뒤, 대표 움직임 정보를 메모리에 저장할 수 있다.

    예를 들어, 특정 영역에 포함되는 다수의 움직임 정보 중에 가장 자주 발생하는 움직임 정보를 대표 움직임 정보로 메모리에 저장할 수 있다. 이때, 블록의 크기별로 움직임 정보의 발생 횟수 등을 계산할 수 있다.

    예를 들어, 특정 영역에 포함되는 다수의 움직임 정보 중에 특정 위치의 움직임 정보를 저장할 수 있다. 이때, 특정 위치는 특정 영역에 포함되는 위치로서, 특정 영역의 고정된 위치일 수 있다. 또한, 특정 위치는 다수 개 중 하나의 위치로 선택될 수 있다. 다수 개의 위치가 상용된다면, 위치별로 우선순위가 결정될 수 있으며, 우선순위에 따라 움직임 정보가 메모리에 저장될 수 있다.

    예를 들어, 특정 영역에 포함되는 다수의 움직임 정보를 메모리에 저장할 때, 인트라 예측 모드로 부호화된 블록, PCM(Pulse Coded Modulation) 모드로 부호화된 블록, 슬라이스 또는 픽쳐 경계 밖은 움직임 정보가 존재하지 않으므로, 해당 위치의 움직임 정보는 메모리에 저장하지 않을 수 있다.

    만약 상술한 예들 중에서 특정 위치의 움직임 정보를 저장할 때, 해당 위치의 움직임 정보가 존재하지 않은 경우, 동등 위치 블록의 움직임 정보, 먼저 부호화되는 블록의 움직임 정보 또는 주변 블록의 움직임 정보가 해당 위치의 움직임 정보로 사용될 수 있다. 이때, 특정 위치는 부호화/복호화 대상 블록 내의 주변에 존재하는 블록 내의 하나의 샘플 위치 또는 블록의 위치일 수 있다. 예를 들어, 특정 위치의 움직임 정보가 존재하지 않은 경우, 해당 위치 주변의 인터 예측 부호화된 블록들의 움직임 정보 중 중간값(median) 또는 평균값(average)을 메모리에 저장할 수 있다. 예를 들어, 특정 위치의 움직임 정보가 존재하지 않은 경우, 해당 위치의 주변 블록들의 움직임 정보의 평균값을 메모리에 저장할 수 있다. 중간값 및 평균값을 계산할 때, 주변 블록들의 움직임 정보가 참조 픽쳐 인덱스, 참조 픽쳐 리스트, 인터 예측 모드 정보 중 하나 이상이 다른 경우, 움직임 벡터는 참조 픽쳐 인덱스. 참조 픽쳐 리스트, 인터 예측 모드 정보 및 픽쳐 디스플레이 순서(picture order count) 등에 따라 크기조정될 수 있다.

    III. 움직임 벡터 도출 과정

    상술한 움직임 정보 방법들을 이용하여 움직임 정보를 메모리에 저장하고, 움직임 벡터 예측 방법, 향상된 움직임 벡터 예측 방법 또는 움직임 정보 병합 방법에서 참조 픽쳐의 움직임 정보를 이용할 경우, 저장된 움직임 정보를 가져올 수 있다.

    예를 들어, 참조 픽쳐 내에서 부호화/복호화 대상 블록의 위치와 대응되는 위치의 움직임 정보를 가져올 수 있다. 이때, 참조 픽쳐 내에서 부호화/복호화 대상 블록의 위치와 대응되는 위치는 특정 영역 내의 고정된 위치나 부호화/복호화 대상 블록의 위치로부터 상대적인 위치일 수 있다.

    도 10 내지 도 13은 참조 픽쳐로부터 움직임 정보를 가져오는 예들을 나타낸다.

    도 10 내지 도 13에서 블록 X는 부호화/복호화 대상 픽쳐(1010, 1110, 1210, 1310) 내의 부호화/복호화 대상 블록을 나타내며, 블록 A, 블록 B, 블록 C, 블록 D 및 블록 E는 부호화/복호화 대상 블록의 주변에 위치하는 복원 블록을 나타낸다. 그리고, 참조 픽쳐(1020, 1120, 1220, 1320) 내의 블록 T는 부호화/복호화 대상 블록과 대응되는 동등 위치 블록을 나타낸다. 도 13의 참조 픽쳐(1320) 내의 블록 Y는 부호화/복호화 대상 블록 외의 위치와 대응되는 블록을 나타낸다.

    도 10을 참조하면, 참조 픽쳐 내에서 부호화/복호화 대상 블록 X의 위치 중 좌상단 픽셀 위치와 대응되는 위치에 해당하는 움직임 정보를 가져올 수 있다.

    도 11을 참조하면, 참조 픽쳐 내에서 부호화/복호화 대상 블록 X의 위치 중 가운데 픽셀 위치와 대응되는 위치에 해당하는 움직임 정보를 가져올 수 있다.

    도 12를 참조하면, 참조 픽쳐 내에서 부호화/복호화 대상 블록 X의 위치 중 우하단 픽셀 위치와 대응되는 위치에 해당하는 움직임 정보를 가져올 수 있다.

    도 13을 참조하면, 참조 픽쳐 내에서 부호화/복호화 대상 블록 X 외의 위치와 대응되는 위치에 해당하는 움직임 정보를 가져올 수 있다.

    메모리에 저장된 움직임 정보, 즉 참조 픽쳐의 움직임 정보를 사용하여, 움직임 벡터 예측, 향상된 움직임 벡터 예측, 움직임 정보 병합, 움직임 정보 병합 생략(merge skip) 등의 부호화/복호화 방법을 수행할 수 있다.

    움직임 벡터의 다이내믹 레인지 제한 방법, 움직임 벡터의 공간 해상도 감소 방법, 움직임 벡터의 양자화 방법, 움직임 벡터의 표현 해상도 감소 방법 중 적어도 하나 이상을 사용하여 움직임 벡터를 메모리에 저장하고, 저장된 움직임 벡터를 부호화/복호화 대상 블록의 움직임 벡터 예측 및 움직임 정보 병합에 이용할 수 있다.

    참조 픽쳐의 움직임 벡터를 메모리로부터 가져오는 과정을 시간적 움직임 벡터의 도출 과정이라고 한다. 시간적 움직임 벡터 도출 과정에서 TMVbitWidth는 메모리에 저장된 시간적 움직임 벡터의 비트 폭을 나타낸다.

    시간적 움직임 벡터 도출 과정의 입력은 현재 픽쳐에서의 예측 유닛의 좌상단 픽셀 위치인 (xP, yP), 휘도 예측 유닛의 가로 길이와 세로 길이인 nPSW와 nPSH 및 현재 예측 유닛 파티션의 참조 픽쳐 인덱스인 refIdxLX이고, 출력은 움직임 벡터 예측값 mxLXCl과 존재 여부 플래그인 availableFlagLXCol이다.

    RefPicOrderCnt(pic, refidx, LX)는 pic의 참조 픽쳐 RefPicListX[refidx]의 PicOrderCnt를 출력하는 함수이다. 여기서 X는 0 또는 1이 될 수 있다. 참조 픽쳐의 PicOrderCnt는 픽쳐가 "존재하지 않음(non-exisiting)"으로 처리될 때까지 존재한다. Clip3(a, b, c)는 c를 a와 b 사이의 범위 내에 존재하도록 절삭하는 함수를 의미한다.

    동등 위치 파티션(collocated partition)을 가지고 있는 colPic은 슬라이스 타입(slice_type)이 B-슬라이스이고, collocated_from_l0_flag가 0인 경우, RefPicList1[0]이 된다; 그렇지 않은 경우, 즉 슬라이스 타입이 P-슬라이스이거나, collocated_from_l0_flag가 1인 경우, RefPicList0[0]이 된다.

    colPu와 colPu의 위치인 (xPCol, yPCol)은 다음과 같은 순서로 유도된다.

    1. 현재 예측 유닛의 우하단 휘도 성분 위치 (xPRb, yPRb)는 수학식 8 및 수학식 9와 같이 정의된다.

    2. colPu가 인트라 예측 모드로 부호화되었거나, colPu가 존재하지 않으면,

    (1) 현재 예측 유닛의 중앙 휘도 성분 위치 (xPCtr, yPCtr)는 수학식 10 및 수학식 11과 같이 정의된다.

    (2) colPu는 colPic에서 ((xPCtr>>4 )<<4, (yPCtr>>4)<<4)의 위치를 포함하는 예측 유닛으로 설정된다.

    3. (xPCol, yPCol)은 colPic의 좌상단 휘도 성분 위치로부터 colPu의 좌상단 휘도 성분 위치의 값이 된다.

    mvLXCol과 availableFlagLXCol은 다음과 같이 유도된다.

    1. colPu가 인트라 예측 모드로 부호화되었거나, colPu가 존재하지 않으면, mvLXCol의 각각의 성분은 0, availableFlagLXCol도 0이 된다.

    2. 그렇지 않으면, 즉 colPu가 인트라 예측 모드로 부호화되지 않고, colPu가 존재하면, mvLXCol과 refIdxCol이 다음과 같이 유도된다.

    (1) PredFlagL0[xPCol][yPCol]이 0이면, 움직임 벡터 mvCol은 MvL1[xPCol][yPCol]으로, 참조 픽쳐 인덱스 refIdxCol은 RefIdxL1[xPCol][yPCol]로 결정된다.

    (2) 그렇지 않으면, 즉 PredFlagL0[xPCol][yPCol]이 1이면, 다음과 같은 과정이 수행된다.

    1) PredFlagL1[xPCol][yPCol]이 0이면, 움직임 벡터 mvCol은 MvL0[xPCol][yPCol]로, 참조 픽쳐 인덱스 refIdxCol은 RefIdxL0[xPCol][yPCol]로 결정된다.

    2) 그렇지 않으면, 즉 PredFlagL1[xPCol][yPCol]이 1이면, 다음과 같은 과정이 수행된다.

    a. X는 0 또는 1이 되며, 다음과 같은 할당 과정이 수행된다.

    i. RefIdxColLX은 RefIdxLX[xPCol][yPCol]로 할당된다.

    ii. PicOrderCnt(colPic)이 PicOrderCnt(currPic)보다 작고, RefPicOrderCnt(colPic, RefIdxColLX, LX)가 PicOrderCnt(currPic)보다 크거나, 또는 PicOrderCnt(colPic)이 PicOrderCnt(currPic)보다 크고 RefPicOrderCnt(colPic, RefIdxColLX, LX)가 PicOrderCnt(currPic)보다 작으면 MvXCross는 1로 할당된다.

    iii. 그렇지 않으면, 즉 PicOrderCnt(colPic)이 PicOrderCnt(currPic)보다 작고, RefPicOrderCnt(colPic, RefIdxColLX, LX)가 PicOrderCnt(currPic)보다 작거나 같거나, 또는 PicOrderCnt(colPic)이 PicOrderCnt(currPic)보다 크고 RefPicOrderCnt(colPic, RefIdxColLX, LX)가 PicOrderCnt(currPic)보다 크거나 같으면, MvXCross는 1로 할당된다.

    b. 다음의 조건 중 하나를 만족하는 경우, 움직임 벡터 mvCol, 참조 픽쳐 인덱스 refIdxCol, ListCol은 각각 MvL1[xPCol][yPCol], RefIdxColL1, L1로 결정된다.

    i. Mv0Cross는 0, Mv1Cross는 1.

    ii. Mv0Cross와 Mv1Cross가 같고, 참조 픽쳐 리스트가 L1.

    c. 그렇지 않으면, 움직임 벡터 mvCol, 참조 픽쳐 인덱스 refIdxCol, ListCol은 각각 MvL0[xPCol][yPCol], RefIdxColL0, L0으로 결정된다.

    3) availableFlagLXCol은 1이 되며, 수학식 12 또는 수학식 13 내지 수학식 18의 연산이 수행된다.

    a. PicOrderCnt(colPic)-RefPicOrderCnt(colPic, refIdxCol, ListCol)이 PicOrderCnt(currPic)-RefPicOrderCnt(currPic, refIdxLX, LX)와 같은 경우,

    b. 그렇지 않은 경우,

    여기서, td와 tb는 수학식 17 및 수학식 18과 같다.

    즉, 수학식 13 내지 수학식 16을 참조하면, mvLXCol은 움직임 벡터 mvCol의 크기조정 값(scaled version)으로 유도된다.

    한편, 움직임 벡터가 다이내믹 레인지로 절삭되어도, 절삭된 움직임 벡터가 크기조정(scaling)되는 경우, 다시 다이내믹 레인지를 벗어날 수 있다. 따라서, 크기조정된 움직임 벡터를 도출한 후, 상기 움직임 벡터의 다이내믹 레인지를 제한할 수 있다. 이 경우, 수학식 15와 수학식 16은 각각 수학식 19 와 수학식 20으로 대체될 수 있다.

    IV. 복호화 장치에서 시간적 움직임 벡터를 절삭하기 위한 정보 전송 방법

    이하에서는 복호화 장치에서 시간적 움직임 벡터를 부호화 장치와 동일한 방법으로 절삭하기 위해 필요한 정보를 전송하는 방법을 설명하기로 한다.

    상술한 시간적 움직임 벡터 도출 과정에서의 TMVBitWidth는 시퀀스 파라미터 셋, 픽쳐 파라미터 셋 또는 슬라이스 헤더 등을 통해 부호화 장치로부터 복호화 장치로 전송될 수 있다.

    표 5의 bit_width_temporal_motion_vector_minus8은 시간적 움직임 벡터 성분의 비트 폭을 나타낸다. bit_width_temporal_motion_vector_minus8이 존재하지 않을 경우, 0으로 유추되며, 시간적 움직임 벡터 성분의 비트 폭은 수학식 21과 같이 표현된다.

    1. 정보 전송 방법 1 - 움직임 벡터를 압축하고, 움직임 벡터의 비트 심도를 제한하는 경우

    표 6을 참조하면, motion_vector_buffer_comp_flag가 1일 경우, 움직임 벡터 버퍼 압축 과정이 수행된다.

    motion_vector_buffer_comp_ratio_log2는 움직임 벡터 버퍼 압축 과정의 압축 비율을 나타낸다. motion_vector_buffer_comp_ratio_log2이 존재하지 않을 경우, 0으로 유추되며, 움직임 벡터 버퍼 압축 비율은 수학식 22와 같이 표현된다.

    다시 표 6을 참조하면, bit_depth_temporal_motion_vector_constraint_flag가 1일 경우, 시간적 움직임 벡터 비트 심도 제한 과정이 수행된다.

    bit_depth_temporal_motion_vector_minus8는 시간적 움직임 벡터의 비트 심도를 나타낸다. bit_depth_temporal_motion_vector_minus8이 존재하지 않을 경우, 0으로 유추되며, 시간적 움직임 벡터의 비트 심도는 수학식 23과 같이 표현된다.

    2. 정보 전송 방법 2 - 움직임 벡터의 비트 심도를 제한하는 경우

    표 7을 참조하면, bit_depth_temporal_motion_vector_constraint_flag가 1일 경우, 시간적 움직임 벡터 비트 심도 제한 과정이 수행된다.

    bit_depth_temporal_motion_vector_minus8는 시간적 움직임 벡터의 비트 심도를 나타낸다. bit_depth_temporal_motion_vector_minus8이 존재하지 않을 경우, 0으로 유추되며, 시간적 움직임 벡터의 비트 심도는 수학식 24와 같이 표현된다.

    3. 정보 전송 방법 3 - 움직임 벡터의 비트 심도를 제한하는 경우

    표 8의 bit_depth_temporal_motion_vector_minus8는 시간적 움직임 벡터의 비트 심도를 나타낸다. bit_depth_temporal_motion_vector_minus8이 존재하지 않을 경우, 0으로 유추되며, 시간적 움직임 벡터의 비트 심도는 수학식 25와 같이 표현된다.

    4. 정보 전송 방법 4 - 움직임 벡터의 X 성분, Y 성분 각각에 대해 비트 심도를 제한하는 경우

    표 9를 참조하면, bit_depth_temporal_motion_vector_constraint_flag가 1일 경우, 시간적 움직임 벡터 비트 심도 제한 과정이 수행된다.

    bit_depth_temporal_motion_vector_x_minus8는 시간적 움직임 벡터의 X 성분 비트 심도를 나타낸다. bit_depth_temporal_motion_vector_x_minus8이 존재하지 않을 경우, 0으로 유추되며, 시간적 움직임 벡터의 비트 심도는 수학식 26과 같이 표현된다.

    bit_depth_temporal_motion_vector_y_minus8는 시간적 움직임 벡터의 Y 성분 비트 심도를 나타낸다. bit_depth_temporal_motion_vector_x_minus8이 존재하지 않을 경우, 0으로 유추되며, 시간적 움직임 벡터의 비트 심도는 수학식 27과 같이 표현된다.

    5. 정보 전송 방법 5 - 움직임 벡터를 압축하고, 움직임 벡터의 비트 심도를 제한하는 경우

    표 10을 참조하면, motion_vector_buffer_comp_flag가 1일 경우, 움직임 벡터 버퍼 압축 과정이 수행된다.

    motion_vector_buffer_comp_ratio_log2는 움직임 벡터 버퍼 압축 과정의 압축 비율을 나타낸다. motion_vector_buffer_comp_ratio_log2이 존재하지 않을 경우, 0으로 유추되며, 움직임 벡터 버퍼 압축 비율은 수학식 28과 같이 표현된다.

    V. 영상 코덱의 레벨을 통한 다이내믹 레인지의 정의

    시간적 움직임 벡터의 다이내믹 레인지는 시퀀스 파라미터 셋, 픽쳐 파라미터 셋 또는 슬라이스 헤더를 통해 전송되지 않고, 영상 코덱의 레벨(level)을 통해 정의될 수 있다. 부호화 장치와 복호화 장치는 레벨 정보를 이용하여 움직임 벡터의 제한된 다이내믹 레인지를 판별할 수 있다.

    또한, 레벨에서도 움직임 벡터의 X 성분과 Y 성분 각각의 다이내믹 레인지 및/또는 비트 심도를 서로 다르게 정의할 수 있으며, 각각의 성분들의 최솟값 및 최댓값을 정의할 수도 있다.

    표 11와 표 12는 전술한 시간적 움직임 벡터 도출 과정에서의 TMVBitWidth를 레벨(level)에서 정의하는 경우의 일 예이다.

    표 11을 참조하면, TMVBitWidth는 레벨에서 정의된 MaxTMVBitWidth로 설정된다. 이때, MaxTMVBitWidth는 시간적 움직임 벡터가 메모리에 저장될 때 움직임 벡터의 최대 비트 폭을 나타낸다.

    한편, TMVBitWidth는 레벨에서 정의하고, 정의된 값과의 차이(delta value)를 시퀀스 파라미터 셋, 픽쳐 파라미터 셋, 또는 슬라이스 헤더를 전송할 수도 있다. 즉, TMVBitWidth는 레벨에서 정의된 MaxTMVBitWidth에 시퀀스 파라미터 셋, 픽쳐 파라미터 셋 또는 슬라이스 헤더에서 전송된 차이를 더한 값으로 설정될 수 있다. 이때, TMVBitWidth는 시간적 움직임 벡터가 메모리에 저장될 때 움직임 벡터의 비트 폭을 나타낸다.

    표 13의 delta_bit_width_temporal_motion_vector_minus8는 시간적 움직임 벡터 성분의 비트 폭의 차이를 나타낸다. delta_bit_width_temporal_motion_vector_minus8이 존재하지 않을 경우, 0으로 유추되며, 시간적 움직임 벡터 성분의 비트 폭은 수학식 29와 같이 표현된다.

    또한, 표 14와 같이 레벨에 시간적 움직임 벡터 각각의 성분의 다이내믹 레인지를 정의할 수도 있다.

    또한, 표 15 내지 표 17과 같이 레벨에 시간적 움직임 벡터 각각의 성분의 비트 폭을 정의할 수도 있다.

    또한, 표 18과 같이 레벨에 시간적 움직임 벡터 Y 성분의 비트 폭을 정의할 수도 있다.

    또한, 시간적 움직임 벡터의 다이내믹 레인지는 움직임 벡터의 제한에 대한 정보의 전송 없이 부호화 장치 및 복호화 장치에서 미리 약속한 고정된 값으로 정의되거나, 고정된 비트 심도의 형태로 저장될 수 있다.

    TMVBitWidth를 부호화 장치와 복호화 장치에서 동일한 값으로 고정해서 사용하는 경우, TMVBitWidth는 4, 6, 8, 10, 12, 14, 16 등의 양의 정수일 수 있다. 이때, TMVBitWidth는 시간적 움직임 벡터가 메모리에 저장될 때 움직임 벡터의 비트 폭을 나타낸다.

    도 14는 본 발명의 일 실시예에 따른 영상의 부호화 방법을 나타낸 순서도이다. 도 14를 참조하면, 영상 부호화 방법은 절삭 단계(S1410), 저장 단계(S1420) 및 부호화 단계(S1430)를 포함한다.

    영상 부호화 장치 및/또는 복호화 장치는 참조 픽쳐의 움직임 벡터를 소정의 다이내믹 레인지로 절삭한다(S1410). "I. 움직임 벡터 절삭 과정"을 통해 전술한 바와 같이, 다이내믹 레인지를 벗어난 움직임 벡터는 해당 다이내믹 레인지의 최솟값 또는 최댓값으로 표현된다. 따라서, "IV. 복호화 장치에서 시간적 움직임 벡터를 절삭하기 위한 정보 전송 방법"과 "V. 영상 코덱의 레벨을 통한 다이내믹 레인지의 정의"을 통해 전술한 바와 같이, 영상 코덱의 레벨 및/또는 시퀀스 파라미터 셋 등을 통해 비트 심도를 제한하거나, 영상 코덱의 레벨을 통해 다이내믹 레인지를 제한하여, 참조 픽쳐의 움직임 벡터를 소정의 다이내믹 레인지로 절삭할 수 있다.

    영상 부호화 장치 및/또는 복호화 장치는 "II. 움직임 벡터 저장 과정"을 통해 전술한 바와 같이, 절삭된 참조 픽쳐의 움직임 벡터를 버퍼에 저장한다(S1420). 움직임 벡터는 복원된 영상과 함께 또는 따로 버퍼에 저장될 수 있다.

    영상 부호화 장치는 저장된 참조 픽쳐의 움직임 벡터를 이용하여 부호화 대상 블록의 움직임 벡터를 부호화한다(S1430). "III. 움직임 벡터 도출 과정"을 통해 전술한 바와 같이, HEVC에서 사용되는 향상된 움직임 벡터 예측 방법에서는 부호화/복호화 대상 블록의 주변에 위치하는 복원 블록의 움직임 벡터뿐만 아니라, 참조 픽쳐 내에서 부호화/복호화 대상 블록과 동일한 위치 또는 대응되는 위치에 존재하는 블록의 움직임 벡터를 이용한다. 따라서, 부호화 대상 블록의 움직임 벡터는 부호화 대상 블록과 인접한 주변 블록의 움직임 벡터뿐만 아니라 참조 픽쳐의 움직임 벡터, 즉 시간적 움직임 벡터일 수도 있다.

    한편, 참조 픽쳐의 움직임 벡터의 X 성분의 다이내믹 레인지와 Y 성분의 다이내믹 레인지는 서로 다르게 정의될 수 있으므로, 참조 픽쳐의 움직임 벡터의 각각의 성분은 각각의 다이내믹 레인지로 절삭될 수 있다.

    또한, 참조 픽쳐의 움직임 벡터의 다이내믹 레인지를 제한하는 방법뿐만 아니라 참조 픽쳐의 움직임 벡터를 압축하는 방법을 사용할 수도 있다. 참조 픽쳐의 움직임 벡터의 다이내믹 레인지를 제한하거나 참조 픽쳐의 움직임 벡터를 압축하는 경우, 영상 코덱의 레벨 및/또는 시퀀스 파라미터 셋 등에 이를 나타내는 플래그와 이에 관한 파라미터를 정의할 수 있다.

    또한, 메모리에 저장된 움직임 정보, 즉 참조 픽쳐의 움직임 정보를 사용하여, 움직임 벡터 예측, 향상된 움직임 벡터 예측, 움직임 정보 병합, 움직임 정보 병합 생략(merge skip) 등의 부호화 방법을 수행할 수도 있다.

    도 15는 본 발명의 일 실시예에 따른 영상의 복호화 방법을 나타낸 순서도이다. 도 15를 참조하면 영상 복호화 방법은 절삭 단계(S1510), 저장 단계(S1520), 도출 단계(S1530) 및 복호화 단계(S1540)를 포함한다.

    도 15의 절삭 단계(S1510)와 저장 단계(S1520)는 전술한 "I. 움직임 벡터 절삭 과정"과 " II. 움직임 벡터 저장 과정"을 이용하는 도 14의 절삭 단계(S1410)와 저장 단계(S1420)와 유사하다. 또한, 도 15의 도출 단계(S1530)는 전술한 "III. 움직임 벡터 도출 과정"을 이용하며, 도 14의 부호화 단계(S1430)와 대칭적이다. 따라서, 자세한 설명은 생략하기로 한다.

    영상 복호화 장치는 복호화 대상 블록의 움직임 벡터를 이용하여 인터 예측 복호화를 수행한다(S1540). 영상 복호화 장치는 움직임 벡터의 다이내믹 레인지 제한 방법, 움직임 벡터의 공간 해상도 감소 방법, 움직임 벡터의 양자화 방법, 움직임 벡터의 표현 해상도 감소 방법 중 적어도 하나 이상을 사용하여 움직임 벡터를 메모리에 저장하고, 저장된 움직임 벡터를 복호화 대상 블록의 움직임 벡터 예측 및 움직임 정보 병합에 이용할 수 있다.

    또한, 메모리에 저장된 움직임 정보, 즉 참조 픽쳐의 움직임 정보를 사용하여, 움직임 벡터 예측, 향상된 움직임 벡터 예측, 움직임 정보 병합, 움직임 정보 병합 생략(merge skip) 등의 복호화 방법을 수행할 수도 있다.

    상술한 실시예들은 일련의 단계 또는 블록으로 표현된 순서도를 통해 설명되고 있으나, 본 발명은 상술한 단계들의 순서에 한정되는 것은 아니며, 일부의 단계는 다른 단계와, 다른 순서 또는 동시에 발생할 수 있다. 또한, 본 발명이 속하는 기술 분야의 통상의 지식을 가진자라면 순서도에 나타낸 단계들은 배타적이지 않으며, 다른 단계가 포함되거나, 일부의 단계가 삭제될 수 있음을 이해할 수 있을 것이다.

    또한, 상술한 실시예들은 다양한 양태의 예시들을 포함한다. 다양한 양태들을 나타내기 위해, 모든 가능한 조합을 기술할 수는 없지만, 본 발명이 속하는 기술 분야의 통상의 지식을 가진자라면 다른 조합이 가능함을 인식할 수 있을 것이다. 따라서, 본 발명은 이하의 특허청구범위 내에 속하는 모든 다른 교체, 수정 및 변경을 포함한다고 할 것이다.

    100 : 영상 부호화 장치 111: 움직임 예측부
    125 : 변환부 140 : 양자화부
    150 : 엔트로피 부호화부 160 : 역양자화부
    170 : 역변환부 180 : 필터부

    高效检索全球专利

    专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

    我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

    申请试用

    分析报告

    专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

    申请试用

    QQ群二维码
    意见反馈