본 명세서에 첨부된 도면을 참조하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본 발명의 실시예를 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
본 명세서 전체에서, 어떤 부분이 다른 부분과 '연결'되어 있다고 할 때, 이는 직접적으로 연결되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 전기적으로 연결되어 있는 경우도 포함한다.
또한, 본 명세서 전체에서 어떤 부분이 어떤 구성요소를 '포함'한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있는 것을 의미한다.
또한, 제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다.
또한, 본 명세서에서 설명되는 장치 및 방법에 관한 실시예에 있어서, 장치의 구성 일부 또는 방법의 단계 일부는 생략될 수 있다. 또한 장치의 구성 일부 또는 방법의 단계 일부의 순서가 변경될 수 있다. 또한 장치의 구성 일부 또는 방법의 단계 일부에 다른 구성 또는 다른 단계가 삽입될 수 있다.
또한, 본 발명의 제1 실시예의 일부 구성 또는 일부 단계는 본 발명의 제2 실시예에 부가되거나, 제2 실시예의 일부 구성 또는 일부 단계를 대체할 수 있다.
덧붙여, 본 발명의 실시예에 나타나는 구성부들은 서로 다른 특징적인 기능들을 나타내기 위해 독립적으로 도시되는 것으로, 각 구성부들이 분리된 하드웨어나 하나의 소프트웨어 구성단위로 이루어짐을 의미하지 않는다. 즉, 각 구성부는 설명의 편의상 각각의 구성부로 나열하여 기술되고, 각 구성부 중 적어도 두 개의 구성부가 합쳐져 하나의 구성부로 이루어지거나, 하나의 구성부가 복수 개의 구성부로 나뉘어져 기능을 수행할 수 있다. 이러한 각 구성부의 통합된 실시예 및 분리된 실시예도 본 발명의 본질에서 벗어나지 않는 한 본 발명의 권리 범위에 포함된다.
이하, 첨부한 도면들을 참조하여, 본 발명의 실시예를 보다 상세하게 설명하고자 한다. 본 발명을 설명함에 있어 동일한 구성요소에 대해서 중복된 설명은 생략한다.
도 1은 영상 부호화 장치의 구성을 간략하게 나타낸 블록 흐름도이다. 영상 부호화 장치는 영상을 부호화하는 장치로써 크게 블록 분할부, 예측부, 변환부, 양자화부, 엔트로피 부호화부, 역 양자화부, 역 변환부, 가산부, 인루프 필터부, 메모리부, 감산부를 포함할 수 있다.
블록 분할부(101)는 최대 크기의 부호화 하고자 하는 블록(이하, 최대 부호화 블록이라 칭함)으로부터 최소 크기의 부호화 하고자 하는 블록(이하, 최소 부호화 블록이라 칭함)까지 분할해 나간다. 블록 분할 방법에는 다양한 방법이 있다. 쿼드-트리 분할(이하, QT(Quad-Tree) 분할이라 칭함)은 현재 부호화 블록을 정확히 사분하는 분할이다. 이진-트리 분할(이하, BT(Binary-Tree) 분할이라 칭함)은 부호화 블록을 가로 방향 혹은 세로 방향으로 정확히 이분하는 분할이다. 이 외에 다양한 분할 방법이 있을 수 있다. 또한, 여러 분할 방법들을 동시에 고려하여 분할해 나가는 방법도 가능하다.
도 2는 영상 부호화 장치에서 블록 분할부의 동작 흐름을 나타낸다. 상위 심도 블록에서 QT 분할(201) 혹은 BT 분할(203) 중 분할 방법이 선택 된다. QT 분할이 이루어질 경우, 상위 심도 블록을 정 사분(202)하여 하위 심도 블록을 생성하여 현재 블록을 결정한다. BT 분할이 이루어질 경우, 상위 심도 블록을 정 이분(204)하여 하위 심도 블록을 생성하여 현재 블록을 결정한다.
예측부(102)는 현재 원본 블록에서 현재 예측 하고자 하는 블록(이하, 예측 블록이라 칭함)의 주변 화소나 이전에 이미 부호화/복호화가 끝난 참조 픽쳐 내 화소들을 이용하여 예측 블록을 생성한다. 예측 블록은 부호화 블록 내에서 1개 혹은 그 이상의 예측 블록들이 생성될 수 있다. 부호화 블록 내 예측 블록이 1개일 경우, 예측 블록은 부호화 블록과 동일한 형태이다. 동영상 신호의 예측 기술에는 크게 화면 내 예측과 화면 간 예측으로 구성 되어 있는데, 화면 내 예측은 현재 블록의 주변 화소들을 이용하여 예측 블록을 생성하는 방식이고, 화면 간 예측은 이전에 이미 부호화/복호화가 끝난 참조 픽쳐에서 현재 블록과 가장 유사한 블록을 찾아서 예측 블록을 생성하는 방식이다. 그 후, 원본 블록과 예측 블록을 뺀 잔차 블록을 율-왜곡 최적화(RDO: Rate-Distortion Optimization) 등 다양한 기법을 이용하여 예측 블록의 최적 예측 모드를 결정한다. RDO 비용 계산식은 수학식 1과 같다.
D, R, J는 각각 양자화에 의한 열화, 압축 스트림의 레이트, RD 비용이고, Φ는 부호화 모드, λ는 라그랑지안 승수(Lagrangian multiplier)로 에러의 양과 비트량 간의 단위를 일치시키기 위한 스케일 보정용 계수로 사용한다. 부호화 과정에서 최적의 부호화 모드로 선택되기 위해서는 해당 모드를 적용했을 때의 J 즉, RD-비용값이 다른 모드를 적용했을 때보다 작아야 하는데, RD-비용값을 구하는 식에는 비트율과 에러를 동시에 고려하여 계산한다.
도 3은 영상 부호화 장치의 예측부 내의 흐름을 설명한 흐름도이다. 원본 정보와 복원 정보를 이용하여 화면 내 예측을 수행(301)하는 경우, 각 예측 모드 별로 최적 화면 내 예측 모드를 RD-비용값을 이용하여 결정(302)하고, 예측 블록을 생성한다. 복원 정보를 이용하여 화면 간 예측을 수행(303)하는 경우, SKIP 모드, Merge 모드, AMVP 모드에 대해서 RD-비용값을 계산한다. Merge 후보 탐색부(304)에서는 SKIP 모드와, Merge 모드를 위한 후보 움직임정보 세트를 구성한다. 해당 후보 움직임정보 세트 중, 최적 움직임정보를 RD-비용값을 이용하여 결정(305)한다. AMVP 후보 탐색부(306)에서는 AMVP 모드를 위한 후보 움직임정보 세트를 구성한다. 해당 후보 움직임정보 세트들을 이용하여 움직임 추정을 수행(307)하고, 최적 움직임정보를 결정한다. 각 모드들에서 결정된 최적 움직임정보를 이용하여 움직임보상을 수행(308)하여 예측 블록을 생성한다.
도 4는 상기 영상 부호화 장치 내 예측부에서 움직임 추정부의 흐름을 설명한 것이다. AMVP 모드의 후보 움직임정보를 이용하여 복원 픽쳐 내에서 움직임 추정 시작 지점을 결정(401)한다. 이 때, 움직임 추정의 시작 지점은 AMVP 후보 움직임 정보(즉, 이 정보가 Motion Vector Predictor를 의미함)를 이용하여 결정하지 않고, 기 설정된 임의의 시작 지점에서 움직임 추정을 시작할 수도 있다. 움직임 추정을 위한 움직임벡터의 탐색 최대/최소 정밀도(N, M)를 결정(402)하고, 현재 추정 정밀도 N에서의 움직임 추정 패턴을 결정하고 움직임 추정을 수행(403)한다. 여기서, 움직임 추정 패턴은 도 10을 참조한다. 도 10에서는 4가지의 움직임 추정 패턴에 대한 예시 그림을 나타낸 것이다. 각 예시 그림에서 R 표시가 된 화소 지점은 현재 추정중인 화소 지점을 의미한다. S1 표시가 된 화소 지점은 R 화소를 기준으로 인접한 화소 지점들 중, 각 패턴 별로 1단계 움직임 추정되는 화소 지점을 의미한다. S2 표시가 된 화조 지점은 S1 화소 지점들 중, 움직임 추정 비용값이 가장 작은 지점을 기준으로 동일한 패턴의 인접한 화소 지점들을 의미한다. 이와 같은 방법으로 SL(L=1, 2, ..)지점까지 움직임 추정을 반복 수행할 수 있다. 움직임 추정을 수행한 후, 현재 움직임 추정 정밀도 N을 세밀화(404)한다. 세밀화된 정밀도 N이 최소 추정 정밀도 M보다 작아진다면 현재 정밀도까지의 최적 움직임정보를 현재 블록의 최적 움직임정보로 결정하여 본 흐름도를 종료하고, 그렇지 않으면 403 단계로 돌아가서 전술한 과정을 반복한다.
상기 전술한 화면 간 예측은 3가지 모드(SKIP 모드, Merge 모드, AMVP 모드)로 구성되어 있을 수 있다. 각 예측 모드는 움직임정보(예측 방향 정보, 참조 픽쳐 정보, 움직임 벡터)를 이용하여 현재 블록의 예측 블록을 구하고, 움직임정보를 이용한 추가적인 예측 모드가 있을 수 있다.
SKIP 모드는 이미 복원된 영역의 움직임정보를 이용하여 최적 예측 정보를 결정한다. 복원된 영역 내에서 움직임정보 후보군을 구성하여 해당 후보군 중, RD-비용값이 최소인 후보를 예측 정보로 사용하여 예측 블록을 생성하는데, 여기서 움직임정보 후보군을 구성하는 방법은 하기 설명할 MERGE 모드의 움직임정보 후보군을 구성하는 방법과 동일하므로, 본 설명에서는 생략한다.
MERGE 모드는 이미 복원된 영역의 움직임정보를 이용하여 최적 예측 정보를 결정한다는 점에서 SKIP 모드와 동일하다. 그러나 SKIP 모드는 예측 에러가 0이 되도록 하는 움직임정보를 움직임정보 후보군에서 탐색하고, MERGE 모드는 예측 에러가 0이 아닌 움직임 정보를 움직임정보 후보군에서 탐색한다는 점에서 그 차이를 달리한다. SKIP 모드와 마찬가지로, 복원된 영역 내에서 움직임정보 후보군을 구성하여 해당 후보군 중, RD-비용값이 최소인 후보를 예측 정보로 사용하여 예측 블록을 생성한다.
도 5는 SKIP 모드와 MERGE 모드의 움직임정보 후보군을 생성하는 방법을 나타낸 것이다. 움직임정보 후보군의 최대 개수는 영상 부호화 장치와 영상 복호화 장치에서 동일하게 결정할 수도 있고, 영상 부호화 장치의 상위 헤더(상위 헤더란, 비디오 파라미터단, 시퀀스 파라미터단, 픽쳐 파라미터단 등 블록의 상위단에서 전송되는 파라미터들을 의미함)에서 해당 개수 정보가 기 전송될 수도 있다. S501 단계와 S502 단계의 설명에서 공간적 후보 블록과 시간적 후보 블록이 화면 간 예측 모드로 부호화 되었을 때에만, 해당 움직임정보를 이용하여 유도된 움직임정보를 움직임정보 후보군에 포함시킨다. S501 단계에서는 동일 픽쳐 내에서 현재 블록 주변의 공간적 후보 블록 5개 중, 4개 후보를 선택한다. 공간적 후보의 위치는 도 7을 참조하고, 각 후보들의 위치는 복원된 영역 내에서 어떤 블록으로든 변경 가능하다. 공간적 후보는 A1, A2, A3, A4, A5 순으로 고려하여 먼저 사용 가능한 공간적 후보 블록의 움직임정보를 공간적 후보로 결정한다. 중복되는 움직임정보가 있을 경우, 우선 순위가 높은 후보의 움직임정보만을 고려한다. S502 단계에서는 시간적 후보 블록 2개 중, 1개 후보를 선택한다. 시간적 후보의 위치는 도 7을 참조하고, 각 후보들의 위치는 Collocated 픽쳐 내에서 현재 픽쳐의 현재 블록 위치와 동일한 위치의 블록을 기준으로 결정된다. 여기서, Collocated 픽쳐는 복원 픽쳐 내에서 영상 부호화 장치와 영상 복호화 장치에서 동일한 조건으로 설정 가능하다. 시간적 후보는 B1, B2 블록 순으로 고려하여 먼저 사용 가능한 후보 블록의 움직임 정보를 시간적 후보로 결정한다. 시간적 후보의 움직임정보를 결정하는 방법은 도 8을 참조한다. Collocated 픽쳐 내의 후보 블록(B1, B2) 움직임정보는 참조 픽쳐 B에 있는 예측 블록을 가리키고 있다. (단, 각 후보 블록의 참조 픽쳐는 서로 다를 수 있음. 본 설명에서는 편의상 이를 모두 참조 픽쳐 B라고 표현함) 해당 움직임벡터를 Collocated 픽쳐와 참조 픽쳐 B의 거리 대비, 현재 픽쳐와 참조 픽쳐 A의 거리의 비율을 계산하여 해당 비율만큼 후보 블록의 움직임벡터를 스케일하여 시간적 후보 움직임정보의 움직임벡터를 결정한다. 수학식 2는 스케일링 수식을 의미한다.
MV는 시간적 후보 블록 움직임정보의 움직임벡터, MVscale은 스케일링된 움직임벡터, TB는 Collocated 픽쳐와 참조 픽쳐 B의 시간적 거리, TD는 현재 픽쳐와 참조 픽쳐 A의 시간적 거리를 의미한다. 또한, 참조 픽쳐 A, 참조 픽쳐 B는 동일한 참조 픽쳐일 수도 있다. 이렇게 스케일링된 움직임벡터를 시간적 후보의 움직임벡터로 결정하고, 시간적 후보 움직임정보의 참조 픽쳐 정보는 현재 픽쳐의 참조 픽쳐로 결정하여, 시간적 후보의 움직임정보를 유도한다. S503 단계는 S501, S502 단계에서 최대 움직임정보 후보군 개수를 채우지 못했을 경우에만 수행되며, 이전 단계에서 유도된 움직임정보 후보들의 조합으로 새로운 양방향 움직임정보 후보군을 추가하는 단계이다. 양방향 움직임정보 후보란, 이전까지 유도된 과거 혹은 미래 방향의 움직임정보들을 하나씩 가져와서 새로운 후보로 조합하여 만들어내는 것이다. 도 9의 표는 양방향 움직임정보 후보 조합의 우선순위를 나타낸 것이다. 본 표의 조합 이외에 추가적인 조합이 나올 수 있으며, 본 표는 하나의 예시를 나타낸 것이다. 양방향 움직임정보 후보를 이용하여도 최대 움직임정보 후보군 개수를 채우지 못했을 경우, S504 단계를 수행한다. S504 단계에서는 움직임정보 후보의 움직임벡터를 제로 움직임벡터로 고정하고, 예측 방향에 따른 참조 픽쳐를 달리하여서 최대 움직임정보 후보군의 개수를 채운다.
AMVP 모드는 예측 방향에 따른 참조 픽쳐 별로 움직임 추정을 거쳐 최적 움직임정보를 결정한다. 여기서, 예측 방향은 과거/미래 중 한 방향만을 사용하는 단방향 일수도 있고, 과거와 미래 방향 모두를 사용하는 양방향 일수도 있다. 움직임 추정을 통해 결정된 최적 움직임정보를 이용하여 움직임 보상을 수행하여 예측 블록을 생성한다. 여기서, 예측 방향에 따른 참조 픽쳐마다 움직임 추정을 위한 움직임정보 후보군을 유도한다. 해당 움직임정보 후보군은 움직임 추정의 시작 지점으로 사용된다. AMVP 모드의 움직임 추정을 위한 움직임정보 후보군을 유도하는 방법은 도 6을 참조한다.
움직임정보 후보군의 최대 개수는 영상 부호화 장치와 영상 복호화 장치에서 동일하게 결정할 수도 있고, 영상 부호화 장치의 상위 헤더에서 해당 개수 정보가 기 전송될 수도 있다. S601 단계와 S602 단계의 설명에서 공간적 후보 블록과 시간적 후보 블록이 화면 간 예측 모드로 부호화 되었을 때에만, 해당 움직임정보를 이용하여 유도된 움직임정보를 움직임정보 후보군에 포함시킨다. S601 단계에서는 도 5의 S501 단계의 설명과 다르게, 공간적 후보로서 유도되는 개수(2개)가 다를 수 있고, 공간적 후보를 선택하기 위한 우선 순위 또한 다를 수 있다. 나머지 설명은 S501 단계의 그것과 동일하다. S602 단계는 S502 단계의 설명과 동일하다. S603 단계에서는 현재까지 유도된 후보들 중, 중복되는 움직임정보가 있다면 제거한다. S604 단계는 S504 단계의 설명과 동일하다. 이렇게 유도된 움직임정보 후보들 중, RD-비용값이 최소인 움직임정보 후보를 최적 움직임정보 후보로 선택하여 해당 움직임정보를 기준으로 움직임 추정 과정을 거쳐 AMVP 모드의 최적 움직임정보를 구한다.
변환부(103)는 원본 블록과 예측 블록의 차이인 잔차 블록을 변환하여 변환 블록을 생성한다. 변환 블록은 변환 및 양자화 과정을 위해 사용되는 가장 작은 단위이다. 변환부는 잔차 신호를 주파수 영역으로 변환하여 변환 계수를 가지는 변환 블록을 생성한다. 여기서 잔차 신호를 주파수 영역으로 변환하는 방법으로는 이산 코사인 변환(DCT: Discrete Cosine Transform)기반 변환, 이산 사인 변환(DST: Discrete Sine Transform), KLT(Karhunen Loeve Transform) 등 다양한 변환 기법을 이용할 수 있으며, 이를 이용하여 잔차 신호가 주파수 영역으로 변환되어 변환 계수가 생성 된다. 변환 기법을 편하게 사용하기 위해 기저벡터(basis vector)를 이용하여 행렬 연산을 하게 되는데 예측 블록이 어떤 예측 모드로 부호화 되었는지에 따라서 행렬 연산 시 변환 기법들을 다양하게 섞어 사용할 수 있다. 예를 들어, 화면 내 예측 시 예측 모드에 따라 가로 방향으로는 이산 코사인 변환을 사용하고 세로 방향으로는 이산 사인 변환을 사용 할 수도 있다.
양자화부(104)는 변환 블록을 양자화 하여 양자화된 변환 블록을 생성한다. 즉, 양자화부는 변환부(103)로부터 생성되는 변환 블록의 변환 계수들을 양자화 하여 양자화된 변환 계수를 가지는 양자화된 변환 블록(Quantized Transform Coefficient)을 생성한다. 양자화 방법으로는 데드존 균일 경계 양자화(DZUTQ: Dead Zone Uniform Threshold Quantization) 또는 양자화 가중치 행렬 (Quantization Weighted Matrix) 등이 이용될 수 있지만, 이를 개량한 양자화 등 다양한 양자화 방법이 이용될 수 있다.
한편, 이상에서는 영상 부호화 장치가 변환부 및 양자화부를 포함하는 것을 도시하고 설명 했지만, 변환부 및 양자화부는 선택적으로 포함될 수 있다. 즉, 영상 부호화 장치는 잔차 블록을 변환하여 변환 블록을 생성하고 양자화 과정은 수행하지 않을 수 있으며, 잔차 블록을 주파수 계수로 변환하지 않고 양자화 과정만을 수행할 수 있을 뿐만 아니라, 심지어는 변환과 양자화 과정을 모두 수행하지 않을 수 있다. 영상 부호화 장치에서 변환부와 양자화부 중 일부 과정이 수행되지 않거나, 모든 과정이 수행 되지 않더라도 엔트로피 부호화부의 입력으로 들어가는 블록을 통상적으로 '양자화된 변환 블록'이라 일컫는다.
엔트로피 부호화부(105)는 양자화된 변환 블록을 부호화하여 비트스트림을 출력한다. 즉, 엔트로피 부호화부는 양자화부로부터 출력되는 양자화된 변환 블록의 계수들을 엔트로피 부호화(Entropy Encoding) 등 다양한 부호화 기법을 이용하여 부호화하고, 후술하는 영상 복호화 장치에서 해당 블록을 복호화 하는데 필요한 부가적인 정보들(예를 들면, 예측 모드에 대한 정보(예측 모드에 대한 정보란 예측부에서 결정된 움직임정보 혹은 화면 내 예측 모드 정보 등이 포함될 수 있음), 양자화 계수 등)을 포함하는 비트스트림을 생성하고 출력한다.
역 양자화부(106)는 양자화된 변환 블록에 대하여 양자화 시에 사용한 양자화 기법을 역으로 수행하여 역 양자화 변환 블록을 복원한다.
역 변환부(107)는 변환 시에 사용한 방법과 동일한 방법을 이용하여 역 양자화 변환 블록을 역 변환하여 잔차 블록을 복원하는데, 변환부에서 이용한 변환 기법을 역으로 수행하여 역 변환한다.
한편, 이상에서는 역 양자화부와 역 변환부는 양자화부와 변환부에서 사용한 양자화 방식과 변환 방식을 역으로 사용하여 역 양자화 및 역 변환 할 수 있다. 또한 변환부와 양자화부에서 양자화만을 수행하고 변환을 수행하지 않은 경우에는 역 양자화만을 수행하고 역 변환을 수행하지 않을 수 있다. 만약, 변환 및 양자화를 모두 수행하지 않은 경우, 역 양자화부와 역 변환부도 역 변환 및 역 양자화를 모두 수행하지 않거나 영상 부호화 장치에 포함되지 않고 생략 될 수 있다.
가산부(108)는 역 변환부에서 생성된 잔차 신호와, 예측을 통하여 생성된 예측 블록을 가산하여 현재 블록을 복원한다.
필터부(109)는 현재 픽쳐 내 모든 블록들이 복원된 이후, 픽쳐 전체에 걸쳐서 추가적으로 필터링 해주는 과정으로 디블로킹 필터링, SAO(Sample Adaptive Offset) 등이 있다. 디블로킹 필터링이란 영상을 블록 단위로 부호화하면서 발생하는 블록 왜곡을 감소시키는 작업을 말하며, SAO(Sample Adaptive Offset)란 복원 화소에 특정 값을 감산하거나 가산함으로써, 복원 영상과 원본 영상간 차이를 최소화시키는 작업을 말한다.
메모리(110)는 역 변환부에서 생성된 잔차 신호와, 예측을 통하여 생성된 예측 블록을 가산한 후, 인루프 필터부에서 추가적인 필터링을 거친 복원된 현재 블록을 저장하며, 다음 블록 또는 다음 사진 등을 예측하는데 활용 될 수 있다.
감산부(111)는 현재 원본 블록에서 예측 블록을 감산하여 잔차 블록을 생성한다.
도 11은 영상 부호화 장치에서 코딩 정보의 부호화 흐름을 나타낸 흐름도이다. S1101 단계에서는 현재 부호화 블록의 분할 여부를 알려주는 정보를 부호화한다. S1102 단계에서는 현재 부호화 블록의 분할 여부를 판단한다. S1102 단계에서 현재 부호화 블록이 분할이 되었다면 S1103 단계에서 QT 분할, BT 가로 분할, BT 세로 분할 중 어떤 분할 방법이 사용되었는지를 부호화한다. S1104 단계에서는 분할 방법에 맞게 현재 부호화 블록을 분할한다. S1105 단계에서는 현재 부호화 블록 내에서 분할된 첫 번째 서브 부호화 블록으로 이동한 후, S1101 단계로 되돌아간다. S1102 단계에서 현재 부호화 블록이 분할 되지 않았다면 S1106 단계에서 SKIP 모드의 동작 정보를 부호화한다. S1107 단계에서는 SKIP 모드의 동작 여부를 판단한다. S1107 단계에서 SKIP 모드가 동작한다면 S1113 단계에서 SKIP 모드를 위한 Merge 후보 색인 정보를 부호화한다. 이 후, S1123 단계로 넘어간다. 해당 설명은 하기 상세히 하기로 한다. S1107 단계에서 SKIP 모드가 동작하지 않는다면 S1108 단계에서 예측 모드를 부호화한다. S1109 단계에서는 예측 모드가 화면 간 예측인지 화면 내 예측 모드인지를 판단한다. S1109 단계에서 예측 모드가 화면 내 예측 모드였다면, S1110 단계에서 화면 내 예측 모드 정보들을 부호화하고, S1123 단계로 넘어간다. 해당 설명은 하기 상세히 하기로 한다. S1109 단계에서 예측 모드가 화면 간 예측 모드였다면, S1111 단계에서 Merge 모드의 동작 정보를 부호화한다. S1112 단계에서는 Merge 모드의 동작 여부를 판단한다. S1112 단계에서 Merge 모드가 동작한다면 S1113 단계로 넘어가서 Merge 모드를 위한 Merge 후보 색인 정보를 부호화한다. S1112 단계에서 Merge 모드가 동작하지 않는다면 S1114 단계에서 예측 방향을 부호화한다. 여기서 예측 방향은 과거 방향, 미래 방향, 양방향 중 하나일 수 있다. S1115 단계에서는 예측 방향이 미래방향인지 아닌지를 판단한다. S1115 단계에서 예측 방향이 미래 방향이 아니었다면 S1116 단계에서 과거 방향의 참조 픽쳐 색인 정보를 부호화한다. S1117 단계에서는 과거 방향의 MVD(Motion Vector Difference) 정보를 부호화한다. S1118 단계에서는 과거 방향의 MVP(Motion Vector Predictor) 정보를 부호화한다. S1115 단계에서 예측 방향이 미래 방향 혹은 양방향이거나 S1118 단계가 끝나면 S1119 단계에서 예측 방향이 과거 방향인지 아닌지를 판단한다. S1119 단계에서 예측 방향이 과거 방향이 아니었다면 S1120 단계에서 미래 방향 참조 픽쳐 색인 정보를 부호화한다. S1121 단계에서는 미래 방향의 MVD 정보를 부호화한다. S1122 단계에서는 미래 방향의 MVP 정보를 부호화한다. S1119 단계에서 예측 방향이 과거 방향 혹은 양방향이거나 S1122 단계가 끝나면 S1123 단계에서 모든 서브 부호화 블록의 부호화가 종료 되었는지를 판단한다. 여기서, S1113 단계가 종료된 후에도 본 단계의 과정이 수행된다. 종료 되었다면 본 흐름도를 종료하고, 종료되지 않았다면 S1124 단계에서 현재 서브 부호화 블록에서 다음 서브 부호화 블록으로 이동하고, S1101 단계에서부터 전술한 과정을 반복한다.
도 12는 영상 복호화 장치의 구성을 간략하게 나타낸 블록 흐름도이다. 영상 복호화 장치는 영상을 복호화하는 장치로써, 크게 블록 엔트로피 복호화부, 역 양자화부, 역 변환부, 예측부, 가산부, 인루프 필터부, 메모리부를 포함할 수 있다. 영상 부호화 장치에서 부호화 블록은 영상 복호화 장치에서 복호화 블록이라 칭한다.
엔트로피 복호화부(1201)는 영상 부호화 장치로부터 전송받은 비트스트림을 해석하여 해당 블록을 복호화 하는데 필요한 여러 정보들과 양자화된 변환 계수를 읽어 들인다.
역 양자화부(1202)는 엔트로피 복호화부에서 복호화한 양자화 계수에 대하여 양자화 시에 사용한 양자화 기법을 역으로 수행하여 역 양자화된 계수를 가지는 역 양자화되 블록을 복원한다.
역 변환부(1203)는 변환 시에 사용한 방법과 동일한 방법을 이용하여 역 양자화 변환 블록을 역 변환하여 차분 신호를 가지는 잔차 블록을 복원하는데, 변환부에서 이용한 변환 기법을 역으로 수행하여 역 변환한다.
예측부(1204)는 엔트로피 복호화부에서 복호화한 예측 모드 정보를 이용하여 예측 블록을 생성하는데, 이는 영상 부호화 장치의 예측부에서 수행했던 예측 방식과 동일한 방식을 이용한다.
가산부(1205)는 역 변환부에서 복원된 잔차 신호와, 예측을 통하여 생성된 예측 블록을 가산하여 현재 블록을 복원한다.
필터부(1206)는 현재 픽쳐 내 모든 블록을 복원한 이후, 픽쳐 전체에 걸쳐서 추가적인 필터링은 하는 과정으로 디블로킹 필터링, SAO(Sample Adaptive Offset) 등이 있으며, 상세한 내용은 기 전술한 영상 부호화 장치의 인루프 필터부에서 설명한 바와 동일하다.
메모리(1207)는 역 변환부에서 생성된 잔차 신호와, 예측을 통하여 생성된 예측 블록을 가산한 후, 인루프 필터부에서 추가적인 필터링을 거친 복원된 현재 블록을 저장하며, 다음 블록 또는 다음 사진 등을 예측하는데 활용 될 수 있다.
도 13은 영상 복호화 장치에서 블록 분할부의 동작 흐름을 나타낸다. 상위 심도 블록 레이어에서 분할 정보를 추출하고(1301) QT 분할(1302) 혹은 BT 분할(1304) 중 분할 방법이 선택 된다. QT 분할이 이루어질 경우, 상위 심도 블록을 정 사분(1303)하여 하위 심도 블록을 생성하여 현재 블록을 결정한다. BT 분할이 이루어질 경우, 상위 심도 블록을 정 이분(1305)하여 하위 심도 블록을 생성하여 현재 블록을 결정한다.
도 14는 영상 복호화 장치의 예측부 내의 흐름을 설명한 흐름도이다. 예측 모드가 화면 내 예측이라면, 최적 화면 내 예측 모드 정보를 결정(1401)하고, 화면 내 예측을 수행(1402)하여 예측 블록을 생성한다. 예측 모드가 화면 간 예측이라면, SKIP, Merge, AMVP 모드 중 최적 예측 모드를 결정(1403)한다. SKIP 모드 혹은 Merge 모드로 복호화할 경우, Merge 후보 탐색부(1404)에서 SKIP 모드와, Merge 모드를 위한 후보 움직임정보 세트를 구성한다. 해당 후보 움직임정보 세트 중, 최적 움직임정보를 결정(1405)한다. AMVP 모드로 복호화할 경우, AMVP 후보 탐색부(1406)에서는 AMVP 모드를 위한 후보 움직임정보 세트를 구성한다. 해당 후보 움직임정보 후보들 중, 전송된 MVP 정보를 이용하여 최적 움직임 정보를 결정(1407)한다. 이후, 각 모드들에서 결정된 최적 움직임정보를 이용하여 움직임 보상을 수행(1408)하여 예측 블록을 생성한다.
도 15는 영상 복호화 장치에서 코딩 정보의 복호화 흐름을 나타낸 흐름도이다. S1501 단계에서는 현재 복호화 블록의 분할 여부를 알려주는 정보를 복호화한다. S1502 단계에서는 현재 복호화 블록의 분할 여부를 판단한다. S1502 단계에서 현재 복호화 블록이 분할이 되었다면 S1503 단계에서 QT 분할, BT 가로 분할, BT 세로 분할 중 어떤 분할 방법이 사용되었는지를 복호화한다. S1504 단계에서는 분할 방법에 맞게 현재 복호화 블록을 분할한다. S1505 단계에서는 현재 복호화 블록 내에서 분할된 첫 번째 서브 복호화 블록으로 이동한 후, S1501 단계로 되돌아간다. S1502 단계에서 현재 복호화 블록이 분할 되지 않았다면 S1506 단계에서 SKIP 모드의 동작 정보를 복호화한다. S1507 단계에서는 SKIP 모드의 동작 여부를 판단한다. S1507 단계에서 SKIP 모드가 동작한다면 S1513 단계에서 SKIP 모드를 위한 Merge 후보 색인 정보를 복호화한다. 이 후, S1523 단계로 넘어간다. 해당 설명은 하기 상세히 하기로 한다. S1507 단계에서 SKIP 모드가 동작하지 않는다면 S1508 단계에서 예측 모드를 복호화한다. S1509 단계에서는 예측 모드가 화면 간 예측인지 화면 내 예측 모드인지를 판단한다. S1509 단계에서 예측 모드가 화면 내 예측 모드였다면, S1510 단계에서 화면 내 예측 모드 정보들을 복호화하고, S1523 단계로 넘어간다. 해당 설명은 하기 상세히 하기로 한다. S1509 단계에서 예측 모드가 화면 간 예측 모드였다면, S1511 단계에서 Merge 모드의 동작 정보를 복호화한다. S1512 단계에서는 Merge 모드의 동작 여부를 판단한다. S1512 단계에서 Merge 모드가 동작한다면 S1513 단계로 넘어가서 Merge 모드를 위한 Merge 후보 색인 정보를 복호화한다. S1512 단계에서 Merge 모드가 동작하지 않는다면 S1514 단계에서 예측 방향을 복호화한다. 여기서 예측 방향은 과거 방향, 미래 방향, 양방향 중 하나일 수 있다. S1515 단계에서는 예측 방향이 미래방향인지 아닌지를 판단한다. S1515 단계에서 예측 방향이 미래 방향이 아니었다면 S1516 단계에서 과거 방향의 참조 픽쳐 색인 정보를 복호화한다. S1517 단계에서는 과거 방향의 MVD(Motion Vector Difference) 정보를 복호화한다. S1518 단계에서는 과거 방향의 MVP(Motion Vector Predictor) 정보를 복호화한다. S1515 단계에서 예측 방향이 미래 방향 혹은 양방향이거나 S1518 단계가 끝나면 S1519 단계에서 예측 방향이 과거 방향인지 아닌지를 판단한다. S1519 단계에서 예측 방향이 과거 방향이 아니었다면 S1520 단계에서 미래 방향 참조 픽쳐 색인 정보를 복호화한다. S1521 단계에서는 미래 방향의 MVD 정보를 복호화한다. S1522 단계에서는 미래 방향의 MVP 정보를 복호화한다. S1519 단계에서 예측 방향이 과거 방향 혹은 양방향이거나 S1522 단계가 끝나면 S1523 단계에서 모든 서브 복호화 블록의 복호화가 종료 되었는지를 판단한다. 여기서, S1513 단계가 종료된 후에도 본 단계의 과정이 수행된다. 종료 되었다면 본 흐름도를 종료하고, 종료되지 않았다면 S1524 단계에서 현재 서브 복호화 블록에서 다음 서브 복호화 블록으로 이동하고, S1501 단계에서부터 전술한 과정을 반복한다.
본 실시예에서는 현재 부호화 블록의 주변 움직임 정보를 이용하여 현재 부호화 블록 경계에서 움직임 경계점을 탐색하여 현재 부호화 블록을 분할하는 방법을 설명하고, 각 서브 부호화 블록을 DMVD(Decoder-side Motion Vector Derivation) 모드를 이용하여 예측하는 방법에 대해서 설명할 것이다.
도 16은 일 실시예에 따른 영상 부호화 장치 내 블록 분할부이다. 상위 심도 블록에서 1601~1604 과정은 도 2의 201~204 과정과 동일한 과정을 거쳐 현재 블록을 결정한다. 상위 심도 블록을 MT(Motion Tree) 분할(1605)할 경우, 움직임 경계점을 탐색(1606)한다. 여기서, MT 분할이란 상위 심도 블록에서 움직임 경계점을 탐색하여, 해당 경계점에서 블록을 분할하는 방법을 나타낸다. 움직임 경계점을 탐색하는 방법은 하기 상세히 설명한다. 탐색된 움직임 경계점을 기준으로 상위 심도 블록을 분할(1607)하여 현재 블록을 결정한다. 상위 심도 블록을 분할하는 방법도 하기 상세히 설명한다.
도 17은 일 실시예에 따른 영상 복호화 장치 내 블록 분할부이다. 상위 심도 블록에서 분할 정보를 추출(1701)한다. 분할 정보를 통해 QT 분할인지 BT 분할인지를 MT 분할인지를 결정한다. 1702~1705 과정은 도 13의 1302~1305 과정과 동일한 과정을 거쳐 현재 블록을 결정한다. MT 분할(1706)인 경우, 움직임 경계점을 탐색(1707)한다. 움직임 경계점을 탐색하는 방법은 하기 상세히 설명한다. 탐색된 움직임 경계점을 기준으로 상위 심도 블록을 분할(1708)하여 현재 블록을 결정한다. 상위 심도 블록을 분할하는 방법도 하기 상세히 설명한다.
도 16, 17에서 QT, BT, MT 분할은 최대 부호화 블록에서 최소 부호화 블록까지 적용되어 사용될 수도 있지만, 부호화 블록의 크기 및 심도에 따라서 일부 분할 방법만을 사용하여 분할이 수행될 수도 있다. 예를 들어, 최대 부호화 블록의 크기가 64x64이고, 최소 부호화 블록의 크기가 4x4일 경우에 대해서 설명한다. QT 분할이 이루어질 수 있는 부호화 블록 크기는 64x64 ~ 16x16 이고, BT, MT 분할이 이루어질 수 있는 최대 부호화 블록 크기는 16x16, 분할 가능 심도가 3인 경우에 도 32를 참조한다. 도 32에서 실선은 QT 분할을 의미하고, 점선은 BT 분할, 점선 조합선은 MT 분할을 의미한다. 전술한 조건하에서 도 32처럼 부호화 블록 분할이 이루어질 수 있다. MT 분할이 발생할 경우, 현재 부호화 블록은 홀수 크기의 부호화 블록으로 분할 될 수 있다. 만약, 17x8 크기의 부호화 블록이 발생했을 때, 해당 부호화 블록에서 BT 분할이 이루어질 경우 9x4, 8x4 부호화 블록으로 분할하여 코딩 할 수 있다. 또한, 분할 방법 별 부호화 블록의 최대 크기, 최소 크기 및 분할 가능 심도 등은 상위헤더에서 기 전송될 수 있다.
도 18은 일 실시예에 따른 영상 부호화 장치 내 예측부이다. 1801~1807 과정은 도 3의 301~307 과정과 동일한 과정을 수행한다. 1801~1802 과정을 거쳐 결정된 최적 화면 내 예측 모드를 이용하여 예측 블록을 생성하거나, 1803~1807 과정을 거쳐 결정된 최적 움직임정보를 이용하여 움직임 보상(1810)을 수행하고 예측 블록을 생성할 수 있다. 추가적으로 화면 간 예측이 수행될 경우 DMVD 모드를 이용한 움직임정보 결정 방법이 있다. 영상 부호화/복호화 장치에서 동일하게 움직임 추정을 하기 위해 복원 영역의 움직임정보들을 이용하여 초기 움직임정보를 결정(1808)한다. 결정된 초기 움직임정보들을 이용하여 움직임 추정을 수행(1809)하여 최적 움직임정보를 결정하고, 움직임 보상(1810)을 수행하여 예측 블록을 생성한다.
도 19는 일 실시예에 따른 영상 복호화 장치 내 예측부이다. 1901~1907 과정은 도 14의 1401~1407 과정과 동일한 과정을 수행한다. 1901~1902 과정을 거쳐 결정된 최적 화면 내 예측 모드를 이용하여 예측 블록을 생성하거나, 1903~1907 과정을 거쳐 결정된 최적 움직임정보를 이용하여 움직임 보상(1910)을 수행하고 예측 블록을 생성할 수 있다. 추가적으로 화면 간 예측이 수행될 경우 DMVD 모드를 이용한 움직임정보 결정 방법이 있다. 영상 부호화/복호화 장치에서 동일하게 움직임 추정을 하기 위해 복원 영역의 움직임정보들을 이용하여 초기 움직임정보를 결정(1908)한다. 결정된 초기 움직임정보들을 이용하여 움직임 추정을 수행(1909)하여 최적 움직임정보를 결정하고, 움직임 보상(1910)을 수행하여 예측 블록을 생성한다.
도 18, 19의 DMVD 움직임 추정부(1809, 1909)에서 템플릿 블록을 이용한 움직임 추정을 통해 얻어진 최적 움직임정보를 현재 예측 블록에 적용할 수도 있지만, 템플릿 블록 내 복원된 움직임 정보를 그대로 현재 예측 블록의 최적 움직임정보로 결성할 수도 있다. 또한, 현재 부호화 블록이 상위 심도 블록에서 MT 분할되어 생성되었을 경우에는 현재 부호화 블록의 예측 모드는 DMVD 모드만을 사용할 수 있다. 또한, DMVD 모드로 유도된 최적 움직임정보를 AMVP 모드의 후보로써 사용할 수도 있다.
도 20은 영상 부호화/복호화 장치 내 예측부에서의 DMVD 움직임 추정부이다. 영상 부호화/복호화 장치 내의 DMVD 초기 움직임정보 탐색부에서 결정된 초기 움직임정보를 이용하여 DMVD 모드를 수행 후, 최적 움직임정보를 결정한다. DMVD 모드에는 템플릿을 사용하는 모드(이하, '템플릿 매칭 모드'라 칭함)와 템플릿을 사용하지 않는 모드(이하, '양방향 매칭 모드'라 칭함)가 있다. 양방향 매칭 모드를 이용(2001)할 경우, 각 초기 움직임정보들의 단방향 움직임벡터를 선형적으로 반대 예측 방향의 참조 픽쳐로 스케일링한다. 여기서, 움직임벡터의 스케일링은 현재 픽쳐와 각 방향의 참조 픽쳐들간의 거리에 비례하여 수행된다. 이렇게 양방향으로 움직임벡터를 결정(2002)한 후, 과거 방향과 미래 방향의 예측 블록 간 차이가 최소가 되게 하는 각 방향의 움직임벡터를 최적 움직임정보로 결정(2003)한다. 도 21의 2102 그림은 양방향 매칭 모드에서 현재 블록의 과거, 미래 방향의 움직임벡터가 선형적으로 생성된 후, 양방향의 두 예측 블록의 평균으로 현재 블록의 예측 블록을 생성하는 방법을 나타낸 것이다. 템플릿 매칭 모드를 이용(2004)할 경우, 현재 블록 주변의 복원 영역에서 템플릿 블록을 결정(2005)한다. 템플릿 블록은 도 22의 2201~2203의 예시 그림처럼 설정할 수 있다. 2201 그림은 템플릿 블록을 현재 블록의 좌하단(Template A), 좌상단(Template B), 상좌측(Template C), 상우측(Template D)에서 각각 결정한다. 각 템플릿 블록의 크기와 모양은 다양하게 결정할 수 있다. 2202 그림은 2201 그림의 방법과 마찬가지로 템플릿 블록을 현재 블록의 좌하단(Template A), 좌상단(Template B), 상좌측(Template C), 상우측(Template D)에서 결정할 수 있지만, 현재 블록과 인접한 좌측, 상단의 복원 영역을 모두 사용한다 점에서 그 차이를 달리한다. 2203 그림은 2201, 2202 그림의 템플릿 블록 생성 방법을 동시에 고려하여 템플릿 블록을 생성한 방법이다. 이 외에 현재 블록과 인접한 좌측, 상단의 복원 영역을 하나의 템플릿 블록으로 결정하여 사용할 수도 있는 등 다양한 방법으로 현재 블록 주변의 복원 영역에서 템플릿 블록을 생성할 수 있다. 단, 템플릿 블록의 모양 및 크기를 나타내는 정보를 영상 부호화 장치에서 전송하여 사용할 수도 있다. 결정된 각 템플릿 블록과 가장 유사한 예측 블록을 참조 픽쳐에서 탐색하는 움직임 추정(2006)을 수행한 후, 각 템플릿 블록에 최적인 움직임정보를 추정하고, 해당 움직임정보들 중 현재 블록에 가장 적합한 움직임정보를 탐색하여 최적 움직임 정보로 결정한다. 여기서, 템플릿 블록에 최적인 움직임정보를 추정할 때, 추정 패턴은 도 10에 도시된 움직임 추정 패턴 방법 4가지 중, 임의의 패턴을 선택하여 해당 방법으로 움직임 추정을 수행할 수 있다. 움직임 추정의 비용값은 예측 에러의 양과 움직임정보의 가상 비트량의 합을 의미한다. 예측 에러는 SAD(Sum of Absolute Difference), SATD(Sum of Absolute hadamard Trnasform Difference), SSD(Sum of Square Difference) 등 다양한 계산 방법을 통해서 얻을 수 있다. 수학식 (3), (4), (5)는 각각 SAD, SATD, SSD의 계산 방법을 나타낸 수식이다.
i, j는 화소의 위치 Template(i, j)는 템플릿 블록의 화소를 의미하고, PredBlk(i, j)는 예측 블록의 화소를 의미한다. 여기서, 수학식 4의 HT() 함수는 템플릿 블록과 예측 블록의 차이값 블록을 Hadamard 변환하여 얻어진 함수값을 의미한다. 움직임정보의 가상 비트량이란 실제로 전송되는 정보는 아니지만, 영상 부호화 장치와 영상 복호화 장치에서 동일하게 예상되는 움직임정보의 가상비트량을 계산한 것이다. 예를 들어, 초기 움직임정보의 움직임벡터와 현재 움직임 추정중인 움직임정보 내 움직임벡터의 차분벡터 크기량을 계산하여 가상비트량으로 결정할 수도 있다. 이 외에 참조 픽쳐 정보에 대한 비트량을 이용하여 움직임정보 가상비트량을 계산할 수도 있다. 도 21의 2101 그림은 현재 블록과 인접한 좌측, 상단의 복원 영역을 하나의 템플릿 블록으로 하였을 때, 템플릿 블록과 가장 유사한 템플릿 블록의 예측 블록을 탐색한 후, 해당 템플릿 블록과 인접한 블록을 현재 블록의 예측 블록으로 결정하는 방법을 나타낸 것이다.
도 23은 일 실시예에 따른 움직임 경계점을 탐색하는 방법을 나타낸 흐름도이다. 본 흐름도는 일 실시예에 따른 영상 부호화/복호화 장치 내 블록 분할부의 움직임 경계점 탐색(1606, 1707) 과정에서 수행된다. 최초, 움직임 경계점의 색인 정보(이하, 'MB Idx'라 칭함)를 -1로 초기화하고 템플릿 블록의 개수는 2NumOfMB 개로 초기화한다. NumOfMB는 움직임 경계점의 개수이다. 본 실시예에서는 움직임 경계점의 개수를 최대 2개까지로 제한하여 설명하지만 그 이상의 개수를 선택할 수도 있다. CostBuf[N] 버퍼에는 각 모든 인자를 무한대로 초기화하고, IdxBuf[N] 버퍼에는 각 모든 인자를 -1로 초기화한다. 이후, 초기 움직임정보 리스트를 결정(S2301)한다. 초기 움직임정보 리스트를 결정하는 방법은 도 25를 참조한다. 도 25 표의 색인은 초기 움직임정보 우선 순위를 의미한다. AMVP 모드의 후보 움직임정보, Merge 모드의 후보 움직임정보, 현재 블록 주변의 상단, 좌측, 좌상단, 우상단, 좌하단 방향에 있는 복원 영역 내 서브 블록이 가지고 있는 움직임정보, 제로 움직임정보 등을 초기 움직임정보로 고려할 수 있으며, 이외에 복원 정보를 이용하여 다양한 움직임정보 후보들을 이용할 수 있다. 이후, MB Idx를 1 증가 시켜줌으로써 MB Idx를 업데이트(S2302) 한다. 현재 움직임 경계점을 기준으로 복원 영역 내에서 템플릿 블록을 생성(S2303)하고, 각 템플릿 블록의 최적 움직임정보를 탐색(S2304)한다. S2303, S2304 단계의 상세한 설명을 위해 도 28, 29를 참조한다. 도 28, 29는 현재 움직임 경계점을 기준으로 복원 영역에서 템플릿 블록을 결정하고, 각 템플릿 블록에 최적 움직임정보를 유도하는 방법을 나타낸 그림이다. 도 28에서는 움직임 경계점을 기준으로 일부 복원 영역만을 템플릿 블록으로 생성한다. 템플릿 A 블록과 가장 유사한 예측 블록을 참조 픽쳐에서 탐색하고, 템플릿 B 블록도 마찬가지로 탐색한다. 템플릿 C 블록은 템플릿 A, B 블록을 합친 블록을 의미하고, 템플릿 C 블록과 가장 유사한 블록을 마찬가지로 참조 픽쳐에서 탐색한다. 도 29는 도 28과 달리 현재 블록과 인접한 좌측, 상단 영역의 복원 영역 내에서 움직임 경계점을 기준으로 템플릿 A, B, C 블록을 결정하고, 각 템플릿 블록과 가장 유사한 예측 블록을 참조 픽쳐에서 탐색한다. 이후, 각 템플릿 블록의 최적 움직임정보에 대한 비용값(SAD, SATD, SSD 비용값 등을 이용)을 이용하여 현재 움직임 경계점에서의 분할 비용값을 계산한다. 여기서 분할 비용값은 다양한 정보를 이용하여 결정할 수 있다. 분할 비용값을 결정하는 제 1 방법은 템플릿 A 블록의 비용값과 템플릿 B의 비용값의 합을 분할 비용값으로 결정하는 것이다. 이 때 템플릿 C 블록의 비용값은 이용하지 않는다. 분할 비용값을 결정하는 제 2 방법은 수학식 6을 참조한다.
수학식 6은 템플릿 C 블록의 비용값 대비 템플릿 A, B 블록의 비용값의 합의 변화율을 계산한 것이다.
현재 움직임 경계점에서의 분할 비용값이 CostBuf 버퍼 내 1개 이상의 원소값보다 작은지 아닌지를 판단(S2306)하고, 현재 분할 비용값이 Costbuf 버퍼 내 1개 이상의 원소값보다 작다면, CostBuf[N-1] 버퍼에 현재 분할 비용값을, IdxBuf[N-1] 버퍼에 현재 MB Idx를 저장(S2307)한다. 이후, CostBuf 버퍼 내 원소값을 오름차순 정렬(S2308)하고, IdxBuf 버퍼 내 원소값을 CostBuf 버퍼 정렬 순서에 따라 동일한 방법으로 정렬(S2309)한다. 예를 들어, N이 4일 때, CostBuf 버퍼 4개 원소가 {100, 200, 150, 180}로 저장되어 있고, IdxBuf 버퍼 4개 원소가 {0, 3, 2, 8}로 저장되어 있을 때, CostBuf는 {100, 150, 180, 200} 순으로 정렬되고, IdxBuf는 CostBuf 버퍼와 동일한 정렬 방법으로 {0, 2, 8, 3} 순으로 정렬된다. 현재 분할 비용값이 Costbuf 버퍼 내 어떤 원소보다도 크거나, S2309 단계가 끝나면 현재 MB Idx가 마지막 탐색 후보 분할 경계점인지를 판단(S2310)한다. 현재 움직임 경계점이 마지막 탐색 후보 분할 경계점 이었다면 본 흐름도를 종료하고, 그렇지 않다면 S2302 단계로 돌아가서 MB Idx를 업데이트하고 전술한 과정을 반복한다.
도 24는 일 실시예에 따른 움직임 경계점을 탐색하는 방법으로, 도 23 흐름도의 고속화 알고리즘이다. 본 흐름도는 도 23과 마찬가지로 일 실시예에 따른 영상 부호화/복호화 장치 내 블록 분할부의 움직임 경계점 탐색(1606, 1707) 과정에서 수행되거나, 예측부의 DMVD 움직임 추정부에 수행될 수 있다. 최초의 초기 정보는 도 23의 초기 정보들과 동일하다. 초기 움직임정보 리스트를 설정(S2401)하는 방법은 도 23의 S2301 단계의 설명과 동일하다. 복원 영역 내에서 현재 블록과 인접한 좌측, 상단 영역과 필요한 경우 좌상단, 우상단, 좌하단 영역의 인접하지 않은 일부 영역을 하나의 템플릿 블록으로 결정(S2402)한다. 템플릿 블록에 대해서 초기 움직임정보를 이용한 움직임추정 범위 내에서 모든 움직임정보의 비용값을 라인 단위로 계산하여 저장(S2403)한다. 여기서 라인 단위로 비용값을 저장하는 방법은 도 26을 참조한다. 도 26에서는 복원 영역 내에서 템플릿 블록으로 결정된 영역에서 라인 단위로 비용값을 저장하는 방법을 나타낸 것이다. H-Cost0 ~ H-CostH-1 의 의미는 현재 블록 좌측에서 각 움직임정보에 해당하는 비용값을 라인 단위로 저장한 것이고, W-Cost0 ~ W-CostW-1 의 의미는 현재 블록 상단에서 각 움직임정보에 해당하는 비용값을 라인 단위로 저장한 것이다. 이후, MB Idx를 업데이트(S2404)하는 과정은 도 23의 S2302 단계의 설명과 동일하다. 이후, 현재 움직임 경계점을 기준으로 복원 영역 내에서 템플릿 블록을 재생성(S2405)한다. 템플릿 블록을 재생성하는 방법은 도 23의 S2303 단계의 설명과 동일하다. 재생성된 템플릿 블록의 최적 움직임정보에 대한 라인 단위 비용값을 S2403 단계를 통해 기계산 하였으므로, 해당 라인 단위 비용값을 이용하여 현재 움직임 경계점에서의 분할 비용값을 계산한다. 여기서 분할 비용값을 계산하는 방법은 도 3의 S2305 단계에서 설명한 그것과 동일하다. S2407~S2410 단계는 도 23의 S2306~S2309 단계의 설명과 동일하다. S2411 단계에서 현재 MB Idx가 마지막 탐색 후보 분할 경계점이 아닌 경우에는 S2404 단계로 돌아가서 전술한 과정을 반복한다.
도 23, 24를 통해서 상위 심도 블록을 1개 혹은 2개의 움직임 경계점에서 분할 시킬 수 있다. 이 때, CostBuf 버퍼 내 상위 2개의 분할 비용값의 차이가 일정 임계치 이상 차이가 난다면 해당 블록은 1개의 움직임 경계점에서 분할하고, 그렇지 않고 상위 2개의 분할 비용값이 비슷한 경우에는 2개의 움직임 경계점에서 분할할 수 있다. 또한, 해당 움직임 경계점 정보를 영상 복호화 장치로 전송하여 영상 복호화 장치에서는 도 23, 24의 과정을 생략할 수 있다. 이후 설명할 영상 부호화/복호화 장치에서의 부호화/복호화 정보에는 움직임 경계점 정보를 전송하는 내용이 포함되어 있지는 않다. 모든 MB Idx 중 최적 MB Idx를 직접 전송할 수도 있지만, 후보 MB Idx를 M개 결정한 후 M개의 MB Idx 중 RD-비용값이 최적이 되는 움직임 경계점을 전송할 수도 있다.
도 27은 움직임 경계점 개수에 따라서 상위 심도 블록(현재 블록)을 분할하는 방법을 나타낸 것이다. 도 23, 24 과정을 거쳐서 분할 비용값이 작은 순서대로 MB Idx를 알고 있으므로, 움직임 경계점을 1개만 사용할 경우, 2701 그림처럼 분할 비용값이 가 장 작은 MB Idx에 해당하는 움직임 경계점을 분할 경계점으로 결정하여 현재 블록을 하위 심도 블록(예측 블록) A, B로 분할한다. 하위 심도 블록 B는 하위 심도 블록 A의 복원이 끝나고, 템플릿 A 블록과 하위 심도 블록 A의 하단 영역을 이용하여 움직임 추정을 다시 수행하여 최적 움직임 정보를 유도할 수 있다. 움직임 경계점을 2개 사용하고 도 23, 24의 IdxBuf 배열에 상단, 좌측 방향의 MB Idx가 최소 1개 이상씩 존재할 경우, 2702 그림처럼 상단 방향에서 분할 비용값이 가장 작았던 MB Idx에 해당하는 움직임 경계점, 좌측 방향에서 분할 비용값이 가장 작았던 MB Idx에 해당하는 움직임 경계점 2개를 분할 경계점으로 결정하여 현재 블록을 하위 심도 블록 A, B, C, D로 분할한다. 하위 심도 블록 B는 하위 심도 블록 A의 복원이 끝나고, 템플릿 D 블록과 하위 심도 블록 A의 우측 영역을 이용하여 움직임 추정을 다시 수행하여 최적 움직임 정보를 유도할 수 있고, 하위 심도 블록 C는 하위 심도 블록 A의 복원이 끝나고, 템플릿 A 블록과 하위 심도 블록 A의 하단 영역을 이용하여 움직임 추정을 다시 수행하여 최적 움직임 정보를 유도할 수 있고, 하위 심도 블록 D는 하위 심도 블록 B, C의 복원이 끝나고, 하위 심도 블록 C의 우측 영역과 하위 심도 블록 B의 하단 영역을 이용하여 움직임 추정을 다시 수행하여 최적 움직임 정보를 유도할 수 있다.
예측 블록 A는 템플릿 B, C 블록을 하나의 템플릿 블록으로 이용하여 전술한 DMVD 움직임 추정을 통해 얻어질 수 있다. 예측 블록 B응 템플릿 A 블록을 하나의 템플릿 블록으로 이용하여 전술한 DMVD 움직임 추정을 통해 얻어질 수 있다. 그러나, 변환/양자화 및 역양자화/역변환 과정을 현재 블록 단위가 아닌 예측 블록 단위로 수행하여 예측 블록 A를 먼저 복원할 경우, 예측 블록 B는 예측 블록 A의 복원 영역 템플릿 C' 블록과 템플릿 A 블록을 하나의 템플릿 블록으로 이용하여 DMVD 움직임 추정을 통해 얻어질 수도 있다. 움직임 경계점을 2개 사용하고 도 23, 24의 IdxBuf 배열에 상단, 좌측 방향의 MB Idx가 최소 1개 이상씩 존재할 경우, 2702 그림처럼 상단 방향에서 분할 비용값이 가장 작았던 MB Idx에 해당하는 움직임 경계점, 좌측 방향에서 분할 비용값이 가장 작았던 MB Idx에 해당하는 움직임 경계점 2개를 분할 경계점으로 결정하여 현재 블록을 하위 심도 블록 A, B, C, D로 분할한다.
블록 A는 템플릿 B, C 블록을 하나의 템플릿 블록으로 이용하여 전술한 DMVD 움직임 추정을 통해 얻어질 수 있다. 예측 블록 B는 템플릿 블록 D를 하나의 템플릿 블록으로, 예측 블록 C는 템플릿 블록 A를 하나의 템플릿 블록으로, 예측 블록 D는 예측 블록 D, A 블록을 하나의 템플릿 블록으로 이용하여 전술한 DMVD 움직임 추정을 통해 얻어질 수 있다. 그러나, 변환/양자화 및 역양자화/역변환 과정을 현재 블록 단위가 아닌 예측 블록 단위로 수행할 경우, 예측 블록 A를 복원한 후, 예측 블록 B는 템플릿 B' 블록과 템플릿 D 블록을 하나의 템플릿 블록으로 이용하여 예측 블록 B를 생성한 후 복원하고, 예측 블록 C는 템플릿 A 블록과 템플릿 C' 블록을 하나의 템플릿 블록으로 이용하여 예측 블록 C를 생성한 후 복원하고, 예측 블록 D는 템플릿 D' 블록과 템플릿 A' 블록을 하나의 템플릿 블록으로 이용하여 예측 블록 D를 생성한 후 복원한다
도 30은 영상 부호화 장치 내 엔트로피 부호화부에서 일부 코딩 정보를 부호화하는 흐름을 나타낸 흐름도이다. 본 실시예에서는 블록의 분할 정보 및 예측 정보들을 부호화하는 일 예시 방법을 설명할 것이다. 가장 먼저 부호화 블록의 분할 여부를 알려주는 정보를 부호화(S3001)한다. 부호화 블록의 분할 여부를 판단(S3002)하여, 분할이 참이라면 QT 분할, BT 분할, MT 분할 중 어떤 분할 방법으로 분할이 이루어졌는지를 알려주는 정보를 부호화(S3003)한다. 여기서, 움직임 경계점이 1개 혹은 2개 사용하는 것으로 고정되어 MT 분할이 이루어질 경우에는 추가 부호화 정보가 없지만, 움직임 경계점이 현재 블록의 특성에 따라 1개 혹은 2개를 적응적으로 선택하여 사용할 경우에는 움직임 경계점을 몇 개 사용 했는지에 대한 정보를 추가적으로 부호화한다. 또한, 각 분할 방법 별로 기 설정된 분할 범위를 벗어나는 경우에 대해서는 해0당 분할 방법은 제외한 나머지 분할 방법들 중 하나를 부호화하게 된다. 이후, 분할 경계점에서 분할 방법에 맞게 현재 부호화 블록을 분할(S3004)한 후 분할된 첫 번째 서브 부호화 블록으로 이동(S3005)한다. 이후, S3001 단계로 돌아가서 전술한 과정을 반복한다. S3002 단계에서 분할이 거짓이라면, 현재 부호화 블록이 MT 분할에 의해서 분할된 블록인지 아닌지를 판단(S3006)한다. 현재 부호화 블록이 MT 분할에 의해서 분할된 블록이 아니라면, SKIP 모드의 동작 정보를 부호화(S3007)한다. SKIP 모드의 동작 여부를 판단(S3008)하고, 해당 정보가 거짓이라면 예측 모드 정보를 부호화(S3009)한다. 예측 모드의 종류를 판단(S3010)하여, 해당 예측 모드가 화면 간 예측 모드가 아닌 경우에는 화면 내 예측 정보들을 부호화(S3011)한 후 S3030 단계로 넘어간다. 이후 내용은 하기 상세히 설명한다. S3008 단계에서 SKIP 모드가 동작한다고 판단되었다면, DMVD 모드 동작 정보를 부호화(S3012)한다. DMVD 모드의 동작 여부를 판단(S3013)한 후, 해당 정보가 참이었다면 템플릿 정보를 부호화(S3014)한다. 여기서, 템플릿 정보는 복원 영역 내 템플릿 블록들 중, 어떤 템플릿의 움직임정보를 이용하여 현재 블록을 예측하였는지를 알려주는 정보이다. 만약 템플릿 블록이 1개라면 해당 정보는 부호화되지 않을 수 있다. 이후 S3030 단계로 넘어가는데, 마찬가지로 이후 설명은 하기 상세히 설명한다. S3006 단계에서 현재 부호화 블록이 MT 분할에 의해서 분할된 블록이라면, 마찬가지로 템플릿 정보를 부호화(S3019)한 후 S3030 단계로 넘어간다. 이후 단계는 마찬가지로 하기 상세히 설명한다. S3013 단계에서 DMVD 모드의 동작이 거짓이었다면, SKIP 모드를 위한 Merge 후보 색인 정보를 부호화(S3020)한다. S3010 단계에서 예측 모드가 화면 간 예측 모드라면 Merge 모드의 동작 정보를 부호화(S3015)한다. Merge 모드의 동작 여부를 판단(S3016)한 후, 해당 정보가 참이라면 DMVD 모드 동작 정보를 부호화(S3017)한다. DMVD 모드의 동작 여부를 판단(S3018)한 후, 해당 정보가 참이면 템플릿 정보를 부호화(S3019)하고, 해당 정보가 거짓이라면 Merge 모드를 위한 Merge 후보 색인 정보를 부호화(S3020)한다. S3019, S3020 단계가 끝난 후, S3030 단계로 넘어간다. 이후 단계는 마찬가지로 하기 상세히 설명한다. S3016 단계에서 Merge 모드의 동작이 거짓이라면 예측 방향을 부호화(S3021)한다. 예측 방향은 과거 방향, 미래 방향, 양방향 중 한가지를 의미할 수 있다. 예측 방향이 미래 방향인지 아닌지를 판단(S3022)한다. 예측 방향이 미래 방향이 아니었다면 과거 방향의 참조 픽쳐 색인 정보, 과거 방향 MVD 정보, 과거 방향 MVP 정보를 부호화(S3023, S3024, S3025)한다. 예측 방향이 미래 방향이거나 S3025 단계가 끝난 후, 예측 방향이 과거 방향인지 아닌지를 판단(S3026)한다. 예측 방향이 과거 방향이 아니었다면 미래 방향의 참조 픽쳐 색인 정보, 미래 방향 MVD 정보, 미래 방향 MVP 정보를 부호화(S3027, S3028, S3029)한다. 예측 방향이 과거 방향이거나 S3029 단계가 끝난 후, S3030 단계로 넘어간다. 해당 단계에서는 모든 서브 부호화 블록의 부호화가 종료되었는지 아닌지를 판단(S3030)한다. 모든 서브 부호화 블록이 부호화가 종료되었다면 본 흐름도를 종료하고, 그렇지 않을 경우 다음 서브 부호화 블록으로 이동(S3031)한 후에 S3001 단계로 돌아가서 전술한 과정을 반복한다.
도 31은 영상 복호화 장치 내 엔트로피 복호화부에서 일부 코딩 정보를 복호화하는 흐름을 나타낸 흐름도이다. 본 실시예에서는 도 30의 영상 부호화 장치 내 엔트로피 부호화부에서 일부 코딩 정보의 부호화 정보들을 복호화하는 방법을 설명할 것이다. 가장 먼저 복호화 블록의 분할 여부를 알려주는 정보를 복호화(S3101)한다. 복호화 블록의 분할 여부를 판단(S3102)하여, 분할이 참이라면 QT 분할, BT 분할, MT 분할 중 어떤 분할 방법으로 분할이 이루어졌는지를 알려주는 정보를 복호화(S3103)한다. 움직임 경계점이 1개 혹은 2개 사용하는 것으로 고정되어 MT 분할이 이루어질 경우에는 추가 복호화 정보가 없지만, 움직임 경계점이 현재 블록의 특성에 따라 1개 혹은 2개를 적응적으로 선택하여 사용할 경우에는 움직임 경계점을 몇 개 사용 했는지에 대한 정보를 추가적으로 복호화한다. 이후, 분할 경계점에서 분할 방법에 맞게 현재 복호화 블록을 분할(S3104)한 후 분할된 첫 번째 서브 복호화 블록으로 이동(S3105)한다. 이후, S3101 단계로 돌아가서 전술한 과정을 반복한다. S3102 단계에서 분할이 거짓이라면, 현재 복호화 블록이 MT 분할에 의해서 분할된 블록인지 아닌지를 판단(S3106)한다. 현재 복호화 블록이 MT 분할에 의해서 분할된 블록이 아니라면, SKIP 모드의 동작 정보를 복호화(S3107)한다. SKIP 모드의 동작 여부를 판단(S3108)하고, 해당 정보가 거짓이라면 예측 모드 정보를 복호화(S3109)한다. 예측 모드의 종류를 판단(S3110)하여, 해당 예측 모드가 화면 간 예측 모드가 아닌 경우에는 화면 내 예측 정보들을 복호화(S3111)한 후 S3130 단계로 넘어간다. 이후 내용은 하기 상세히 설명한다. S3108 단계에서 SKIP 모드가 동작한다고 판단되었다면, DMVD 모드 동작 정보를 복호화(S3112)한다. DMVD 모드의 동작 여부를 판단(S3113)한 후, 해당 정보가 참이었다면 템플릿 정보를 복호화(S3114)한다. 이후 S3130 단계로 넘어가는데, 마찬가지로 이후 설명은 하기 상세히 설명한다. S3106 단계에서 현재 복호화 블록이 MT 분할에 의해서 분할된 블록이라면, 마찬가지로 템플릿 정보를 복호화(S3119)한 후 S3130 단계로 넘어간다. 이후 단계는 마찬가지로 하기 상세히 설명한다. S3113 단계에서 DMVD 모드의 동작이 거짓이었다면, SKIP 모드를 위한 Merge 후보 색인 정보를 복호화(S3120)한다. S3110 단계에서 예측 모드가 화면 간 예측 모드라면 Merge 모드의 동작 정보를 복호화(S3115)한다. Merge 모드의 동작 여부를 판단(S3116)한 후, 해당 정보가 참이라면 DMVD 모드 동작 정보를 복호화(S3117)한다. DMVD 모드의 동작 여부를 판단(S3118)한 후, 해당 정보가 참이면 템플릿 정보를 복호화(S3119)하고, 해당 정보가 거짓이라면 Merge 모드를 위한 Merge 후보 색인 정보를 복호화(S3120)한다. S3119, S3120 단계가 끝난 후, S3130 단계로 넘어간다. 이후 단계는 마찬가지로 하기 상세히 설명한다. S3116 단계에서 Merge 모드의 동작이 거짓이라면 예측 방향을 복호화(S3121)한다. 예측 방향은 과거 방향, 미래 방향, 양방향 중 한가지를 의미할 수 있다. 예측 방향이 미래 방향인지 아닌지를 판단(S3122)한다. 예측 방향이 미래 방향이 아니었다면 과거 방향의 참조 픽쳐 색인 정보, 과거 방향 MVD 정보, 과거 방향 MVP 정보를 복호화(S3123, S3124, S3125)한다. 예측 방향이 미래 방향이거나 S3125 단계가 끝난 후, 예측 방향이 과거 방향인지 아닌지를 판단(S3126)한다. 예측 방향이 과거 방향이 아니었다면 미래 방향의 참조 픽쳐 색인 정보, 미래 방향 MVD 정보, 미래 방향 MVP 정보를 복호화(S3127, S3128, S3129)한다. 예측 방향이 과거 방향이거나 S3129 단계가 끝난 후, S3130 단계로 넘어간다. 해당 단계에서는 모든 서브 복호화 블록의 복호화가 종료되었는지 아닌지를 판단(S3130)한다. 모든 서브 복호화 블록이 복호화가 종료되었다면 본 흐름도를 종료하고, 그렇지 않을 경우 다음 서브 복호화 블록으로 이동(S3131)한 후에 S3101 단계로 돌아가서 전술한 과정을 반복한다.
도 33은 영상 부호화/복호화 장치 내 예측부에서의 DMVD 움직임 추정부이다. 영상 부호화/복호화 장치 내의 DMVD 초기 움직임정보 탐색부에서 결정된 초기 움직임정보를 이용하여 DMVD 모드를 수행 후, 최적 움직임정보를 결정한다. DMVD 모드에는 템플릿을 사용하는 모드(이하, '템플릿 매칭 모드'라 칭함)와 템플릿을 사용하지 않는 모드(이하, '양방향 매칭 모드'라 칭함)가 있다. 양방향 매칭 모드를 이용(3301)할 경우, 각 초기 움직임정보들의 단방향 움직임벡터를 선형적으로 반대 예측 방향의 참조 픽쳐로 스케일링한다. 여기서, 움직임벡터의 스케일링은 현재 픽쳐와 각 방향의 참조 픽쳐들간의 거리에 비례하여 수행된다. 이렇게 양방향으로 움직임벡터를 결정(3302)한 후, 과거 방향과 미래 방향의 예측 블록 간 차이가 최소가 되게 하는 각 방향의 움직임벡터를 최적 움직임정보로 결정(3303)한다. 도 21의 2102 그림은 양방향 매칭 모드에서 현재 블록의 과거, 미래 방향의 움직임벡터가 선형적으로 생성된 후, 양방향의 두 예측 블록의 평균으로 현재 블록의 예측 블록을 생성하는 방법을 나타낸 것이다. 템플릿 매칭 모드를 이용(3304)할 경우, 복원 영역에서 템플릿 블록의 개수를 결정한다. 단일 템플릿 블록을 사용(3305)할 경우(이하, '단일 템플릿 매칭 모드'라 칭함) 현재 블록 주변과 인접한 좌측, 상단의 복원 영역을 템플릿 블록으로 결정하고, 해당 템플릿 블록을 이용한 움직임 추정(3306)을 통해 최적 움직임정보를 결정한다. 도 21의 2101 그림은 단일 템플릿 매칭 모드에서 템플릿 블록과 가장 유사한 템플릿 블록의 예측 블록을 탐색한 후, 해당 템플릿 블록과 인접한 블록을 현재 블록의 예측 블록으로 결정하는 방법을 나타낸 것이다. 여기서, 템플릿 블록에 최적인 움직임정보를 추정할 때, 추정 패턴은 도 10에 도시된 움직임 추정 패턴 방법 4가지 중, 임의의 패턴을 선택하여 해당 방법으로 움직임 추정을 수행할 수 있다. 움직임 추정의 비용값은 예측 에러의 양과 움직임정보의 가상 비트량의 합을 의미한다. 예측 에러는 SAD(Sum of Absolute Difference), SATD(Sum of Absolute hadamard Trnasform Difference), SSD(Sum of Square Difference) 등 다양한 계산 방법을 통해서 얻을 수 있다. 이는 도 20을 참조하여 살펴본 바와 같으며, 여기서 자세한 설명은 생략하기로 한다.
복수 템플릿 블록을 사용(3307)할 경우(이하, '복수 템플릿 매칭 모드'라 칭함) 복원 영역에서 복수의 템플릿 블록을 고정적으로 사용할 것인지 움직임 경계점을 이용하여 템플릿 블록을 적응적으로 생성할 것인지를 결정한다. 고정 템플릿 블록으로 사용(3308)할 경우, 템플릿 블록은 도 22의 2201~2203의 예시 그림처럼 설정할 수 있다. 2201 그림은 템플릿 블록을 현재 블록의 좌하단(Template A), 좌상단(Template B), 상좌측(Template C), 상우측(Template D)에서 각각 결정한다. 각 템플릿 블록의 크기와 모양은 다양하게 결정할 수 있다. 2202 그림은 2201 그림의 방법과 마찬가지로 템플릿 블록을 현재 블록의 좌하단(Template A), 좌상단(Template B), 상좌측(Template C), 상우측(Template D)에서 결정할 수 있지만, 현재 블록과 인접한 좌측, 상단의 복원 영역을 모두 사용한다 점에서 그 차이를 달리한다. 2203 그림은 2201, 2202 그림의 템플릿 블록 생성 방법을 동시에 고려하여 템플릿 블록을 생성한 방법이다. 이 외에 현재 블록과 인접한 좌측, 상단의 복원 영역을 하나의 템플릿 블록으로 결정하여 사용할 수도 있는 등 다양한 방법으로 현재 블록 주변의 복원 영역에서 템플릿 블록을 생성할 수 있다. 단, 템플릿 블록의 모양 및 크기를 나타내는 정보를 영상 부호화 장치에서 전송하여 사용할 수도 있다. 결정된 각 템플릿 블록과 가장 유사한 예측 블록을 참조 픽쳐에서 탐색하는 움직임 추정(3306)을 수행한 후, 각 템플릿 블록에 최적인 움직임정보를 추정하고, 해당 움직임정보들 중 현재 블록에 가장 적합한 움직임정보를 탐색하여 최적 움직임 정보로 결정한다. 고정 템플릿 블록이 아닌 움직임 경계점을 이용하여 템플릿 블록을 생성할 경우 움직임 경계점을 먼저 탐색(3309)한다. 움직임 경계점 탐색 방법은 하기 상세히 설명한다. 결정된 움직임 경계점을 기준으로 나뉜 각 템플릿 블록 별로 움직임 추정을 통해 각 템플릿 블록에 최적인 움직임정보를 추정(3310)하고, 움직임 경계점을 기준으로 나뉜 각 예측 블록 별로 인접한 템플릿 블록의 최적 움직임정보를 적용한다. 또한, 복수 템플릿 매칭 모드에서, 템플릿 블록을 이용한 움직임 추정을 통해 얻어진 최적 움직임정보를 현재 예측 블록에 적용할 수도 있지만, 템플릿 블록 내 복원된 움직임 정보를 그대로 현재 예측 블록의 최적 움직임정보로 결성할 수도 있다.
도 34는 결정된 움직임 경계점에서 현재 블록을 분할하는 움직임 경계선의 기울기를 결정하는 방법을 설명한 흐름도이다. 최초의 초기정보는 움직임 경계선 기울기 색인 정보(이하, 'MB Angle'이라 칭함)를 -1로 초기화하고 최적 분할 비용값(이하, 'PartCostBest'이라 칭함)을 무한대로 초기화한다. 현재 MB Angle을 1 증가 시켜줌으로써 MB Angle을 업데이트(S3401)한다. 여기서, MB Angle은 다양한 방법으로 영상 부호화/복호화 장치에서 동일하게 기 설정 될 수 있다. 이후, 움직임 경계 탐색 영역을 현재 MB Angle에 맞는 움직임 경계선 기울기 방향대로 분할하여 2개의 템플릿 블록으로 분할하고, 각 템플릿 블록 별로 DMVD 움직임 추정을 통해 최적 움직임정보에 대한 비용값을 계산(S3402)한다. 각 템플릿 블록의 최적 비용값을 이용하여 현재 MB Angle에 대한 분할 비용값(이하, 'PartCostMB Angle'라 칭함)을 계산한다. PartCostMB Angle을 계산하는 방법은 전술한 도 23 내에서의 방법과 동일하다. S3402, S3403 단계의 상세한 설명을 위해 도 35를 참조한다.
도 35는 현재 움직임 경계점을 기준으로 움직임 경계 탐색 영역에서 움직임 경계선의 기울기 방향으로 템플릿 블록을 결정하고, 각 템플릿 블록에 최적 움직임정보를 유도하는 방법을 나타낸 그림이다. 템플릿 A 블록과 가장 유사한 예측 블록을 참조 픽쳐에서 탐색하고, 템플릿 B 블록도 마찬가지로 탐색한다. 템플릿 C 블록은 템플릿 A, B 블록을 합친 블록을 의미하고, 템플릿 C 블록과 가장 유사한 블록을 마찬가지로 참조 픽쳐에서 탐색한다. 움직임 경계선 기울기 방향으로 현재 블록에 이어진 선을 가상 움직임 경계선이라 하고, 가상 움직임 경계선을 기준으로 해당 경계선에 걸친 화소들의 경우에는 어느 위치에 있는 예측 블록에 더 많은 화소 영역이 포함되어 있는지를 통해 실제 움직임 경계선을 결정할 수 있다. 현재 MB Angle에서의 PartCostMB Angle이 PartCostBest보다 작은지를 판단(S3404)한다. 현재 PartCostMB Angle이 PartCostBest보다 작으면, PartCostBest에 PartCostMB Angle을 저장하고, 최적 움직임 경계선 기울기 색인 정보에 현재 MB Angle을 저장(S3405)한다. 현재 PartCostMB Angle이 PartCostBest보다 크거나 같고, S3405 단계가 끝난 후, 현재 MB Angle이 마지막 탐색 후보 움직임 경계선 기울기 색인인지 아닌지를 판단(S3406)한다. 현재 MB Angle이 마지막 탐색 후보 움직임 경계선 기울기 색인이었다면 본 흐름도를 종료하고, 그렇지 않다면 S3401 단계로 돌아가서 전술한 과정을 반복한다.
움직임 경계점을 기준으로 나뉜 각 예측 블록 단위로 복원 과정을 먼저 수행하지 않는다면, 현재 블록에 예측 블록들을 생성한 후 예측 블록 경계에서 필터링 과정이 수행될 수 있다.
도 36에서는 움직임 경계점이 1개인 경우이면서 움직임 경계선이 사선 방향이 아닌 직선 방향으로 분할 되었을 경우의 예를 이용하여 필터링 방법을 설명한다. 예측 블록 경계에서의 필터링 방법은 다양할 수 있다. 예를 들어 필터링 영역 안에서 각 예측 블록의 인접한 화소끼리 가중합을 이용하여 필터링 될 수 있다. 수학식 7은 필터링 수식이다.
수학식 7에서 a', b'은 a, b 예측 화소의 필터링 된 값이다. W1~W4는 가중치 계수로써, 'W1+W2=1'이고, 'W3+W4=1'을 만족한다. 이 때, W1, W4에는 0.8을, W2, W3에는 0.2를 대입하여 a, b 예측 화소를 필터링할 수 있다. 이 외에 다양한 방법으로 필터링 할 수 있다.
도 37에서는 움직임 경계점이 1개인 경우이면서 움직임 경계선이 사선 방향으로 분할 되었을 경우의 예를 이용하여 필터링 방법을 설명한다. 3701 그림에서는 도 36의 설명과 유사한 방법으로 움직임 경계선에 인접한 각 예측 블록의 화소끼리 수학식 7의 가중합을 이용하여 필터링 될 수 있다. 3702 그림의 필터링 방법은 가상 움직임 경계선을 기준으로 예측 블록을 나눌 때, 가상 움직임 경계선을 관통하는 화소는 각 분할 블록(분할 블록 A, B)에 모두 포함시킨다. 이후, 각 분할된 블록마다 예측 블록을 생성한다. 필터링 시에는 실제 움직임 경계선이 아닌 가상 움직임 경계선을 기준으로 필터링이 수행될 수 있는데, 해당 경계선을 관통하는 각 화소 별로 어떤 예측 블록에 더 많은 화소 영역이 포함되어 있는지를 계산한다. 본 그림에서는 필터링 될 화소 S에서 가상 움직임 경계선이 관통하는 선을 기준으로 화소 영역 넓이 p, q를 계산하고, 수학식 8을 이용하여 화소 S를 필터링한다.
S'은 필터링된 S 화소이고, a 화소는 분할 블록 A의 예측 화소이고, b 화소는 분할 블록 B의 예측 화소이다. 이와 같이 3701, 3702 그림의 예시처럼 필터링 할 수도 있고, 이 외에 다양한 방법으로 필터링 할 수 있다.
도 38은 영상 부호화 장치 내 엔트로피 부호화부에서 예측 정보를 부호화하는 흐름을 나타낸 흐름도이다. 먼저 SKIP 모드의 동작 정보를 부호화(S3801)한다. SKIP 모드의 동작 여부를 판단(S3802)하고, 해당 정보가 거짓이면 예측 모드를 부호화(S3803)한다. 예측 모드가 화면 간 예측인지 아닌지를 판단(S3804)하고, 예측 모드가 화면 간 예측 모드가 아니었다면 화면 내 예측 정보들을 부호화하고 본 흐름도를 종료한다. S3802 단계에서 SKIP 모드 동작이 참이었다면 DMVD 모드 동작 정보를 부호화(S3806)한다. 여기서, DMVD 모드 동작 정보란 DMVD 모드가 동작을 안하는 경우, 양방향 매칭 모드인 경우, 템플릿 매칭 모드인 경우 중 어떤 상태인지를 나타내는 정보이다. 예를 들어, DMVD 모드가 동작을 안하면 0, 양방향 매칭 모드이면 10, 템플릿 매칭 모드이면 11을 부호화하여 어떤 상태인지를 알려줄 수 있다. DMVD 모드의 동작 여부를 판단(S3807)하고, 해당 정보가 참이라면(양방향 매칭 모드 혹은 템플릿 매칭 모드) 템플릿 정보를 부호화(S3808)한다. 여기서, 템플릿 정보는 템플릿 매칭 모드 중 복수 템플릿 매칭 모드인 경우에만 부호화되는 정보이다. 복수 템플릿 매칭 모드 중, 고정 템플릿 블록을 사용하는 경우에 어떤 템플릿 블록의 움직임정보를 이용하여 예측 블록을 생성하였는지를 나타내고, 움직임 경계점을 이용하는 경우에는 움직임 경계점을 기준으로 분할된 템플릿 블록 중, 현재 예측 블록에 어떤 템플릿 블록의 움직임정보를 이용하여 예측 블록을 생성하였는지를 나타낸다. 템플릿 정보를 부호화하면 본 흐름도를 종료한다. DMVD 모드 동작이 거짓이라면 SKIP 모드를 위한 Merge 후보 색인 정보를 부호화(S3809)하고 본 흐름도를 종료한다. S3804 단계에서 예측 모드가 화면 간 예측이었다면, Merge 모드 동작 정보를 부호화(S3810)한다. Merge 모드 동작 여부를 판단(S3811)하고, 해당 정보가 거짓이라면 예측 방향을 부호화(S3812)한다. 예측 방향은 과거 방향, 미래 방향, 양방향 중 한가지를 의미할 수 있다. 예측 방향이 미래 방향인지 아닌지를 판단(S3813)한다. 예측 방향이 미래 방향이 아니었다면 과거 방향의 참조 픽쳐 색인 정보, 과거 방향 MVD 정보, 과거 방향 MVP 정보를 부호화(S3814, S3815, S3816)한다. 예측 방향이 미래 방향이거나 S3816 단계가 끝난 후, 예측 방향이 과거 방향인지 아닌지를 판단(S3817)한다. 예측 방향이 과거 방향이 아니었다면 미래 방향의 참조 픽쳐 색인 정보, 미래 방향 MVD 정보, 미래 방향 MVP 정보를 부호화(S3818, S3819, S3820)하고, 본 흐름도를 종료하고, S3817 단계에서 예측 방향이 과거 방향 이었다면 본 흐름도를 종료한다. S3811 단계에서 Merge 모드 동작 정보가 참이라면, DMVD 모드 동작 정보를 부호화(S3821)한다. 해당 설명은 S3806 단계의 설명과 동일하다. DMVD 모드 동작 여부를 판단(S3822)하고, 해당 정보가 거짓이라면 Merge 모드를 위한 Merge 후보 색인 정보를 부호화하고 본 흐름도를 종료한다. S3822 단계에서 DMVD 모드 동작이 참이라면, 템플릿 정보를 부호화(S3823)하고 본 흐름도를 종료한다.
도 39는 영상 복호화 장치 내 엔트로피 복호화부에서 예측 정보를 복호화하는 흐름을 나타낸 흐름도이다. 먼저 SKIP 모드의 동작 정보를 복호화(S3901)한다. SKIP 모드의 동작 여부를 판단(S3902)하고, 해당 정보가 거짓이면 예측 모드를 복호화(S3903)한다. 예측 모드가 화면 간 예측인지 아닌지를 판단(S3904)하고, 예측 모드가 화면 간 예측 모드가 아니었다면 화면 내 예측 정보들을 복호화하고 본 흐름도를 종료한다. S3902 단계에서 SKIP 모드 동작이 참이었다면 DMVD 모드 동작 정보를 복호화(S3906)한다. DMVD 모드의 동작 여부를 판단(S3907)하고, 해당 정보가 참이라면(양방향 매칭 모드 혹은 템플릿 매칭 모드) 템플릿 정보를 복호화(S3908)하고 본 흐름도를 종료한다. DMVD 모드 동작이 거짓이라면 SKIP 모드를 위한 Merge 후보 색인 정보를 복호화(S3909)하고 본 흐름도를 종료한다. S3904 단계에서 예측 모드가 화면 간 예측이었다면, Merge 모드 동작 정보를 복호화(S3910)한다. Merge 모드 동작 여부를 판단(S3911)하고, 해당 정보가 거짓이라면 예측 방향을 복호화(S3912)한다. 예측 방향이 미래 방향인지 아닌지를 판단(S3913)한다. 예측 방향이 미래 방향이 아니었다면 과거 방향의 참조 픽쳐 색인 정보, 과거 방향 MVD 정보, 과거 방향 MVP 정보를 복호화(S3914, S3915, S3916)한다. 예측 방향이 미래 방향이거나 S3916 단계가 끝난 후, 예측 방향이 과거 방향인지 아닌지를 판단(S3917)한다. 예측 방향이 과거 방향이 아니었다면 미래 방향의 참조 픽쳐 색인 정보, 미래 방향 MVD 정보, 미래 방향 MVP 정보를 복호화(S3918, S3919, S3920)하고, 본 흐름도를 종료하고, S3917 단계에서 예측 방향이 과거 방향 이었다면 본 흐름도를 종료한다. S3911 단계에서 Merge 모드 동작 정보가 참이라면, DMVD 모드 동작 정보를 복호화(S3921)한다. 해당 설명은 S3906 단계의 설명과 동일하다. DMVD 모드 동작 여부를 판단(S3922)하고, 해당 정보가 거짓이라면 Merge 모드를 위한 Merge 후보 색인 정보를 복호화하고 본 흐름도를 종료한다. S3922 단계에서 DMVD 모드 동작이 참이라면, 템플릿 정보를 복호화(S3923)하고 본 흐름도를 종료한다.
도 40은, 본 발명이 적용되는 일실시예로서, 영상 부호화/복호화 장치의 예측부에서 화면 내 예측을 수행하는 방법을 도시한 것이다.
도 40을 참조하면, 현재 블록의 화면 내 예측 모드를 결정할 수 있다(S4000).
현재 블록은, 휘도 블록과 색차 블록으로 구분될 수 있다. 복호화 장치에 기-정의된 화면 내 예측 모드는, 비방향성 모드(Planar 모드, DC 모드) 및 N개의 방향성 모드를 포함할 수 있다. 여기서, N 값은 33, 65 또는 그 이상의 정수일 수 있다. 현재 블록의 화면 내 예측 모드는 휘도 블록과 색차 블록 각각에 대해서 결정되며, 이하 자세히 살펴 보도록 한다.
휘도 블록의 화면 내 예측 모드는, 후보 리스트(MPM list) 및 후보 인덱스(MPM Idx)에 기초하여 유도될 수 있다. 상기 후보 리스트는 복수의 후보 모드를 포함하고, 후보 모드는 현재 블록의 이웃 블록의 화면 내 예측 모드에 기초하여 결정될 수 있다.
후보 모드의 개수는 k개이며, k는 3, 4, 5, 6, 또는 그 이상의 정수일 수 있다. 후보 리스트에 속한 후보 모드의 개수는, 부호화/복호화 장치에 기-약속된 고정된 개수일 수도 있고, 블록의 속성을 고려하여 가변적으로 결정될 수도 있다. 여기서, 블록의 속성은, 크기, 너비(w) 또는 높이(h)의 길이, 너비와 높이의 비, 넓이, 형태, 분할 타입, 분할 뎁스, 스캔 순서, 부호화/복호화 순서, 화면 내 예측 모드의 가용성 등을 의미할 수 있다. 상기 블록은, 현재 블록 또는 이웃 블록 중 적어도 하나를 의미할 수 있다. 또는, 부호화 장치는 최적의 후보 모드의 개수를 결정하고, 이를 부호화하여 복호화 장치로 시그날링할 수도 있다. 복호화 장치는, 시그날링되는 정보에 기초하여 후보 모드의 개수를 결정할 수도 있다. 이때, 정보는, 후보 리스트에 포함되는 후보 모드의 최대/최소 개수를 나타낼 수 있다.
구체적으로, 후보 리스트는, 이웃 블록의 화면 내 예측 모드 modeN, (modeN-n), (modeN+n) 또는 디폴트 모드 중 적어도 하나를 포함할 수 있다.
예를 들어, 상기 이웃 블록은, 현재 블록의 좌측(L), 상단(T), 좌하단(BL), 좌상단(TL) 또는 우상단(TR) 중 적어도 하나에 인접한 이웃 블록을 포함할 수 있다. 여기서, n 값은 1, 2, 3, 4 또는 그 이상의 정수일 수 있다.
디폴트 모드는, Planar 모드, DC 모드, 또는 소정의 방향성 모드 중 적어도 하나일 수 있다. 소정의 방향성 모드는, 수평 모드(modeV), 수직 모드(modeH), (modeV-k), (modeV+k), (modeH-k) 또는 (modeH+k) 중 적어도 하나를 포함할 수 있다. 여기서, k 값은 1 보다 크거나 같고, 15보다 작거나 같은 자연수 중 임의의 값일 수 있다.
상기 후보 인덱스는, 후보 리스트의 후보 모드 중에서 휘도 블록의 화면 내 예측 모드와 동일한 후보 모드를 특정할 수 있다. 즉, 후보 인덱스에 의해 특정된 후보 모드가 휘도 블록의 화면 내 예측 모드로 설정될 수 있다.
또는, 휘도 블록의 화면 내 예측 모드는, 상기 후보 인덱스에 의해 특정된 후보 모드에 소정의 오프셋을 적용하여 유도될 수도 있다. 여기서, 오프셋은, 휘도 블록의 크기, 형태 또는 후보 인덱스에 의해 특정된 후보 모드의 값 중 적어도 하나에 기초하여 결정될 수 있다. 오프셋은, 0, 1, 2, 3 또는 그 이상의 정수로 결정될 수도 있고, 복호화 장치에 기-정의된 화면 내 예측 모드 또는 방향성 모드의 전체 개수로 결정될 수도 있다. 휘도 블록의 화면 내 예측 모드는, 상기 후보 인덱스에 의해 특정된 후보 모드에 상기 오프셋을 가산하거나 감산하여 유도될 수 있다. 상기 오프셋의 적용은, 전술한 블록의 속성을 고려하여 선택적으로 수행될 수 있다.
색차 블록의 화면 내 예측 모드는, 부호화 장치에서 시그날링되는 정보(intra_chroma_pred_mode)에 기초하여 다음 표 1 또는 표 2와 같이 유도될 수 있다.
| intra_chroma_pred_mode[ xCb ][ yCb ] |
IntraPredModeY[ xCb + cbWidth / 2 ][ yCb + cbHeight / 2 ] |
| 0 |
50 |
18 |
1 |
X ( 0 <= X <= 66 ) |
| 0 |
66 |
0 |
0 |
0 |
0 |
| 1 |
50 |
66 |
50 |
50 |
50 |
| 2 |
18 |
18 |
66 |
18 |
18 |
| 3 |
1 |
1 |
1 |
66 |
1 |
| 4 |
0 |
50 |
18 |
1 |
X |
표 1에 따르면, 색차 블록의 화면 내 예측 모드는, 상기 시그날링된 정보, 휘도 블록의 화면 내 예측 모드 및 복호화 장치에 기-정의된 테이블에 기초하여 결정될 수 있다. 표 1에서, mode66은 우상단 방향의 대각선 모드를 의미하고, mode50은 수직 모드를 의미하며, mode18은 수평 모드를 의미하고, mode1은 DC 모드를 의미할 수 있다. 예를 들어, 시그날링된 정보 intra_chroma_pred_mode의 값이 4인 경우, 색차 블록의 화면 내 예측 모드는 휘도 블록의 화면 내 예측 모드와 동일하게 설정될 수 있다.
| intra_chroma_pred_mode[ xCb ][ yCb ] |
IntraPredModeY[ xCb + cbWidth / 2 ][ yCb + cbHeight / 2 ] |
| 0 |
50 |
18 |
1 |
X ( 0 <= X <= 66 ) |
| 0 |
66 |
0 |
0 |
0 |
0 |
| 1 |
50 |
66 |
50 |
50 |
50 |
| 2 |
18 |
18 |
66 |
18 |
18 |
| 3 |
1 |
1 |
1 |
66 |
1 |
| 4 |
81 |
81 |
81 |
81 |
81 |
| 5 |
82 |
82 |
82 |
82 |
82 |
| 6 |
83 |
83 |
83 |
83 |
83 |
| 7 |
0 |
50 |
18 |
1 |
X |
표 2는, 색차 블록에 대해서 성분 간 참조 기반의 예측이 허용되는 경우에 적용될 수 있다. 이 경우에도 표 1과 동일한 방식으로 화면 내 예측 모드가 유도되며, 중복된 설명은 생략하기로 한다. 다만, 표 2는, 색차 블록의 화면 내 예측 모드로 mode81, mode82, mode83을 지원하며, 이는 성분 간 참조 기반의 예측 모드에 해당한다.
도 40을 참조하면, S4000에서 유도된 화면 내 예측 모드 또는 이웃 샘플 중 적어도 하나에 기초하여, 현재 블록을 복원할 수 있다(S4010).
상기 복원은, 현재 블록의 서브 블록 단위로 수행될 수 있다. 이를 위해, 현재 블록은 복수의 서브 블록으로 분할될 수 있다. 서브 블록으로의 분할 방법에 대해서는 도 41을 참조하여 자세히 살펴 보도록 한다.
예를 들어, 현재 블록에 속한 서브 블록은 상기 유도된 하나의 화면 내 예측 모드를 공유하고, 서브 블록 별로 서로 상이한 이웃 샘플이 이용될 수 있다. 또는, 현재 블록에 속한 서브 블록은 상기 유도된 하나의 후보 리스트를 공유하고, 각 서브 블록에 대해서 후보 인덱스가 독립적으로 결정될 수도 있다.
한편, 상기 유도된 화면 내 예측 모드가 성분 간 참조 기반의 예측 모드에 해당하는 경우, 색차 블록은 기-복원된 휘도 블록으로부터 예측될 수 있으며, 이에 대해서는 도 42를 참조하여 자세히 살펴 보도록 한다.
도 41은 본 발명이 적용되는 일실시예로서, 서브 블록 단위의 화면 내 예측 방법을 도시한 것이다.
전술한 바와 같이, 현재 블록은 복수의 서브 블록으로 분할될 수 있다. 여기서, 분할은, 복호화 장치에 기-정의된 분할 타입인 QT(quad tree), BT(binary tree) 또는 TT(ternary tree) 중 적어도 하나에 기초한 것일 수 있다. 또는, 상기 현재 블록은 리프 노드(leaf node)에 해당할 수 있다. 리프 노드는, 더 작은 코딩 블록으로 더 이상 분할되지 않는 코딩 블록을 의미할 수 있다. 즉, 서브 블록으로의 분할은, 복호화 장치에 기-정의된 분할 타입에 의해서 최종적으로 분할된 이후에 추가적으로 수행되는 분할을 의미할 수 있다.
도 41을 참조하면, 상기 분할은, 현재 블록의 크기에 기초하여 수행될 수 있다(실시예 1).
구체적으로, 현재 블록(4100)의 크기가 소정의 문턱크기보다 작은 경우, 현재 블록은 수직 또는 수평 방향으로 p분할될 수 있다. 반대로, 현재 블록(4110)의 크기가 상기 문턱크기보다 크거나 같은 경우, 현재 블록은 수직 또는 수평 방향으로 q분할되거나, 수직 및 수평 방향으로 q분할될 수 있다. 여기서, p는 1, 2, 3 또는 그 이상의 정수일 수 있고, q는, 2, 3, 4 또는 그 이상일 수 있다. 다만, p는 q보다 작게 설정될 수 있다.
상기 문턱크기는, 부호화 장치에서 시그날링될 수도 있고, 복호화 장치에 기-정의된 고정된 값일 수도 있다. 예를 들어, 문턱크기는 NxM으로 표현되며, N과 M은 4, 8, 16 또는 그 이상일 수 있다. 상기 N과 M은 동일할 수도 있고, 서로 상이할 수도 있다.
또는, 현재 블록의 크기가 소정의 문턱크기보다 작은 경우, 현재 블록은 비분할(non-split)되고, 그렇지 않은 경우, 현재 블록은 2분할, 4분할 또는 8분할될 수 있다.
한편, 상기 분할은, 현재 블록의 형태에 기초하여 수행될 수 있다(실시예 2).
구체적으로, 현재 블록의 형태가 정사각형인 경우, 현재 블록은 4분할되고, 그렇지 않은 경우, 현재 블록은 2분할될 수 있다. 역으로, 현재 블록의 형태가 정사각형인 경우, 현재 블록은 2분할되고, 그렇지 않은 경우, 현재 블록은 4분할될 수 있다.
또는, 현재 블록의 형태가 정사각형인 경우, 현재 블록은 2분할, 4분할 또는 8분할되고, 그렇지 않은 경우, 현재 블록은 비분할될 수 있다. 역으로, 현재 블록의 형태가 정사각형인 경우, 현재 블록은 비분할되고, 그렇지 않은 경우, 현재 블록은 2분할, 4분할 또는 8분할될 수 있다.
전술한 실시예 1 또는 2 중 어느 하나가 선택적으로 적용되어 분할될 수도 있고, 실시예 1과 2의 조합에 기초하여 분할될 수도 있다.
상기 2분할은, 수직 또는 수평 중 어느 하나의 방향으로 2분할되는 것이고, 4분할은 수직 또는 수평 중 어느 하나의 방향으로 4분할되거나, 수직 및 수평 방향으로 4분할되는 것을 포함할 수 있다. 8분할은 4분할과 동일한 방식으로 분할될 수 있다.
상기 실시예에서는 2분할, 4분할 또는 8분할을 설명하나, 이에 한정되지 아니하며, 현재 블록은 수직 또는 수평 방향으로 3분할될 수도 있다. 이 경우, 너비 또는 높이의 비가 (1:1:2), (1:2:1) 또는 (2:1:1)일 수 있다.
서브 블록 단위로의 분할 여부, 4분할 여부, 분할 "?*, 분할 개수 등에 관한 분할 정보는, 부호화 장치로부터 시그날링될 수도 있고, 소정의 부호화 파라미터에 기초하여 복호화 장치에서 가변적으로 결정될 수도 있다. 여기서, 부호화 파라미터는, 블록 크기/형태, 분할 타입(4분할, 2분할, 3분할), 화면 내 예측 모드, 화면 내 예측을 위한 이웃 화소의 범위/위치, 성분 타입(e,g., 휘도, 색차), 변환 블록의 최대/최소크기, 변환 타입(e.g., 변환 스킵, DCT2, DST7, DCT8) 등을 의미할 수 있다. 상기 분할 정보에 기초하여, 현재 블록을 복수의 서브 블록으로 분할 또는 비분할할 수 있다.
도 42는 본 발명이 적용되는 일실시예로서, 성분 간 참조 기반의 예측 방법을 도시한 것이다.
현재 블록은, 성분 타입에 따라 휘도 블록과 색차 블록으로 분류될 수 있다. 색차 블록은 기-복원된 휘도 블록의 화소를 이용하여 예측될 수 있으며, 이를 성분 간 참조라 부르기로 한다. 본 실시예에서는, 색차 블록은 (nTbW x nTbH)의 크기를 가지고, 색차 블록에 대응하는 휘도 블록은 (2*nTbW x 2*nTbH)의 크기를 가지는 것을 가정한다. 즉, 입력 비디오 시퀀스는, 4:2:0 칼라 포맷으로 부호화된 것일 수 있다.
도 42를 참조하면, 색차 블록의 성분 간 참조를 위한 휘도 영역을 특정할 수 있다(S4200).
상기 휘도 영역은, 휘도 블록 또는 휘도 블록에 인접한 템플릿 블록(이하, 이웃 영역이라 함) 중 적어도 하나를 포함할 수 있다. 여기서, 휘도 블록은 화소 pY[x][y] (x=0..nTbW*2-1, y=0..nTbH*2-1)을 포함하는 영역으로 정의될 수 있다. 상기 화소는, 인-루프 필터가 적용되기 전의 복원값이거나, 인-루프 필터가 적용된 복원값을 의미할 수 있다.
상기 이웃 영역은, 좌측 이웃 영역, 상단 이웃 영역 또는 좌상단 이웃 영역 중 적어도 하나를 포함할 수 있다. 상기 좌측 이웃 영역은, 화소 pY[x][y] (x=-1..-3, y=0..2*numSampL-1)을 포함하는 영역으로 설정될 수 있다. 상기 설정은, numSampL의 값이 0보다 큰 경우에 한하여 수행될 수 있다. 상기 상단 이웃 영역은, 화소 pY[x][y] (x=0..2*numSampT-1, y=-1..-3)을 포함하는 영역으로 설정될 수 있다. 상기 설정은, numSampT의 값이 0보다 큰 경우에 한하여 수행될 수 있다. 상기 좌상단 이웃 영역은, 화소 pY[x][y] (x=-1..-3, y=-1..-3) 중 적어도 하나를 포함하는 영역으로 설정될 수 있다. 상기 설정은, 휘도 블록의 좌상단 영역이 가용인 경우에 한하여 수행될 수 있다.
전술한, 변수 numSampL 및 numSampT은, 현재 블록의 화면 내 예측 모드에 기초하여 결정될 수 있다.
예를 들어, 현재 블록의 화면 내 예측 모드가 INTRA_LT_CCLM인 경우, 다음 수학식 9와 같이 유도될 수 있다. 여기서, INTRA_LT_CCLM은 성분 간 참조가 현재 블록의 좌측 및 상단에 인접한 영역에 기반하여 수행되는 모드를 의미할 수 있다.
[수학식 9]
numSampT = availT ? nTbW : 0
numSampL = availL ? nTbH : 0
수학식 9에 따르면, numSampT는 현재 블록의 상단 이웃 영역이 가용인 경우에는 nTbW으로 유도되고, 그렇지 않은 경우에는 0으로 유도될 수 있다. 마찬가지로, numSampL은 현재 블록의 좌측 이웃 영역이 가용인 경우에는 nTbH으로 유도되고, 그렇지 않은 경우에는 0으로 유도될 수 있다.
반면, 현재 블록의 화면 내 예측 모드가 INTRA_LT_CCLM가 아닌 경우, 다음 수학식 10과 같이 유도될 수 있다.
[수학식 10]
numSampT = ( availT && predModeIntra = = INTRA_T_CCLM ) ? ( nTbW + numTopRight ) : 0
numSampL = ( availL && predModeIntra = = INTRA_L_CCLM ) ? ( nTbH + numLeftBelow ) : 0
수학식 10에서, INTRA_T_CCLM은 성분 간 참조가 현재 블록의 상단에 인접한 영역에 기반하여 수행되는 모드를 의미하고, INTRA_L_CCLM은 성분 간 참조가 현재 블록의 좌측에 인접한 영역에 기반하여 수행되는 모드를 의미할 수 있다. numTopRight은, 색차 블록의 우상단에 인접한 영역에 속한 전부 또는 일부 화소의 개수를 의미할 수 있다. 일부 화소는, 해당 영역의 최하단 화소 라인(row)에 속한 화소 중 가용 화소를 의미할 수 있다. 가용성 판단은, 좌측에서 우측 방향으로 화소의 가용 여부를 순차적으로 판단하며, 이는 비가용 화소가 발견될 때까지 수행될 수 있다. numLeftBelow은, 색차 블록의 좌하단에 인접한 영역에 속한 전부 또는 일부 화소의 개수를 의미할 수 있다. 일부 화소는, 해당 영역의 최우측 화소 라인(column)에 속한 화소 중 가용 화소를 의미할 수 있다. 마찬가지로, 가용성 판단은, 위에서 아래 방향으로 화소의 가용 여부를 순차적으로 판단하며, 이는 비가용 화소가 발견될 때까지 수행될 수 있다.
한편, 전술한 휘도 영역 특정 단계는, 특정된 휘도 영역을 다운샘플링하는 과정을 더 포함할 수 있다.
상기 다운샘플링은, 1. 휘도 블록에 대한 다운샘플링, 2. 휘도 블록의 좌측 이웃 영역에 대한 다운샘플링, 또는 3. 휘도 블록의 상단 이웃 영역에 대한 다운샘플링 중 적어도 하나를 포함할 수 있으며, 이하 상세히 살펴 보도록 한다.
1. 휘도 블록에 대한 다운샘플링
(실시예 1)
다운샘플링된 휘도 블록의 화소 pDsY[x][y] (x=0..nTbW-1, y=0..nTbH-1)은, 휘도 블록의 대응 화소 pY[2*x][2*y] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소은, 대응 화소의 좌측, 우측, 상단, 또는 하단 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pDsY[x][y]은 다음 수학식 11과 같이 유도될 수 있다.
[수학식 11]
pDsY[ x ][ y ] = ( pY[ 2 * x ][ 2 * y - 1 ] + pY[ 2 * x - 1 ][ 2 * y ] + 4 * pY[ 2 * x ][ 2 * y ] + pY[ 2 * x + 1 ][ 2 * y ] + pY[ 2 * x ][ 2 * y + 1 ] + 4 ) >> 3
다만, 현재 블록의 좌측/상단 이웃 영역이 비가용인 경우가 존재할 수 있다. 만일 현재 블록의 좌측 이웃 영역이 비가용인 경우, 다운샘플링된 휘도 블록의 화소 pDsY[0][y] (y=1..nTbH-1)은, 휘도 블록의 대응 화소 pY[0][2*y] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 상단 또는 하단 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pDsY[0][y] (y=1..nTbH-1)은 다음 수학식 12와 같이 유도될 수 있다.
[수학식 12]
pDsY[ 0 ][ y ] = ( pY[ 0 ][ 2 * y - 1 ] + 2 * pY[ 0 ][ 2 * y ] + pY[ 0 ][ 2 * y + 1 ] + 2 ) >> 2
만일 현재 블록의 상단 이웃 영역이 비가용인 경우, 다운샘플링된 휘도 블록의 화소 pDsY[x][0] (x=1..nTbW-1)은, 휘도 블록의 대응 화소 pY[2*x][0] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 좌측 또는 우측 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pDsY[x][0] (x=1..nTbW-1)은 다음 수학식 13과 같이 유도될 수 있다.
[수학식 13]
pDsY[ x ][ 0 ] = ( pY[ 2 * x - 1 ][ 0 ] + 2 * pY[ 2 * x ][ 0 ] + pY[ 2 * x + 1 ][ 0 ] + 2 ) >> 2
한편, 다운샘플링된 휘도 블록의 화소 pDsY[0][0]은, 휘도 블록의 대응 화소 pY[0][0] 및/또는 주변 화소에 기초하여 유도될 수 있다. 주변 화소의 위치는, 현재 블록의 좌측/상단 이웃 영역의 가용 여부에 따라 상이하게 결정될 수 있다.
예를 들어, 좌측 이웃 영역은 가용하고, 상단 이웃 영역이 가용하지 않은 경우, pDsY[0][0]은 다음 수학식 14과 같이 유도될 수 있다.
[수학식 14]
pDsY[ 0 ][ 0 ] = ( pY[ -1 ][ 0 ] + 2 * pY[ 0 ][ 0 ] + pY[ 1 ][ 0 ] + 2 ) >> 2
반면, 좌측 이웃 영역은 가용하지 않고, 상단 이웃 영역이 가용한 경우, pDsY[0][0]은 다음 수학식 15과 같이 유도될 수 있다.
[수학식 15]
pDsY[ 0 ][ 0 ] = ( pY[ 0 ][ -1 ] + 2 * pY[ 0 ][ 0 ] + pY[ 0 ][ 1 ] + 2 ) >> 2
한편, 좌측 및 상단 이웃 영역 모두 가용하지 않은 경우, pDsY[ 0 ][ 0 ]은 휘도 블록의 대응 화소 pY[0][0]로 설정될 수 있다.
(실시예 2)
다운샘플링된 휘도 블록의 화소 pDsY[x][y] (x=0..nTbW-1, y=0..nTbH-1)은, 휘도 블록의 대응 화소 pY[2*x][2*y] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 하단, 좌측, 우측, 좌하단 또는 우하단 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pDsY[x][y]은 다음 수학식 16과 같이 유도될 수 있다.
[수학식 16]
pDsY[ x ][ y ] = ( pY[ 2 * x - 1 ][ 2 * y ] + pY[ 2 * x - 1 ][ 2 * y + 1 ] + 2* pY[ 2 * x ][ 2 * y ] + 2*pY[ 2 * x ][ 2 * y + 1 ] + pY[ 2 * x + 1 ][ 2 * y ] + pY[ 2 * x + 1 ][ 2 * y + 1 ] + 4 ) >> 3
다만, 만일 현재 블록의 좌측 이웃 영역이 비가용인 경우, 다운샘플링된 휘도 블록의 화소 pDsY[0][y] (y=0..nTbH-1)은, 휘도 블록의 대응 화소 pY[0][2*y] 및 하단 주변 화소에 기초하여 유도될 수 있다. 예를 들어, 화소 pDsY[0][y] (y=0..nTbH-1)은 다음 수학식 17과 같이 유도될 수 있다.
[수학식 17]
pDsY[ 0 ][ y ] = ( pY[ 0 ][ 2 * y ] + pY[ 0 ][ 2 * y + 1 ] + 1 ) >> 1
휘도 블록의 다운샘플링은, 전술한 실시예 1과 2 중 어느 하나에 기초하여 수행될 수 있다. 이때 소정의 플래그에 기초하여 실시예 1 또는 2 중 어느 하나가 선택적으로 수행될 수 있다. 상기 플래그는, 다운샘플링된 휘도 화소가 원 휘도 화소와 동일한 위치를 가지는지 여부를 나타낼 수 있다. 예를 들어, 상기 플래그가 제1 값인 경우, 다운샘플링된 휘도 화소가 원 휘도 화소와 동일한 위치를 가진다. 반면, 상기 플래그가 제2 값인 경우, 다운샘플링된 휘도 화소는 원 휘도 화소와 수평 방향으로는 동일한 위치를 가지나, 수직 방향으로는 하프 펠(half pel)만큼 쉬프트된 위치를 가진다.
2. 휘도 블록의 좌측 이웃 영역에 대한 다운샘플링
(실시예 1)
다운샘플링된 좌측 이웃 영역의 화소 pLeftDsY[y] (y=0..numSampL-1)은, 좌측 이웃 영역의 대응 화소 pY[-2][2*y] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 좌측, 우측, 상단, 또는 하단 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pLeftDsY[y]은 다음 수학식 18과 같이 유도될 수 있다.
[수학식 18]
pLeftDsY[ y ] = ( pY[ -2 ][ 2 * y - 1 ] + pY[ -3 ][ 2 * y ] + 4 * pY[ -2 ][ 2 * y ] + pY[ -1 ][ 2 * y ] + pY[ -2 ][ 2 * y + 1 ] + 4 ) >> 3
다만, 현재 블록의 좌상단 이웃 영역이 비가용인 경우, 다운샘플링된 좌측이웃 영역의 화소 pLeftDsY[ 0 ]은, 좌측 이웃 영역의 대응 화소 pY[-2][0] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 좌측 또는 우측 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pLeftDsY[ 0 ]은 다음 수학식 19와 같이 유도될 수 있다.
[수학식 19]
pLeftDsY[ 0 ] = ( pY[ -3 ][ 0 ] + 2 * pY[ -2 ][ 0 ] + pY[ -1 ][ 0 ] + 2 ) >> 2
(실시예 2)
다운샘플링된 좌측 이웃 영역의 화소 pLeftDsY[y] (y=0..numSampL-1)은, 좌측 이웃 영역의 대응 화소 pY[-2][2*y] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 하단, 좌측, 우측, 좌하단 또는 우하단 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pLeftDsY[y]은 다음 수학식 20과 같이 유도될 수 있다.
[수학식 20]
pLeftDsY[ y ] = ( pY[ -1 ][ 2 * y ] + pY[ -1 ][ 2 * y + 1 ] + 2* pY[ -2 ][ 2 * y ] + 2*pY[ -2 ][ 2 * y + 1 ] + pY[ -3 ][ 2 * y ] + pY[ -3 ][ 2 * y + 1 ] + 4 ) >> 3
마찬가지로, 좌측 이웃 영역의 다운샘플링은, 전술한 실시예 1과 2 중 어느 하나에 기초하여 수행될 수 있다. 이때 소정의 플래그에 기초하여 실시예 1 또는 2 중 어느 하나가 선택될 수 있다. 상기 플래그는, 다운샘플링된 휘도 화소가 원 휘도 화소와 동일한 위치를 가지는지 여부를 나타내며, 이는 전술한 바와 같다.
한편, 좌측 이웃 영역에 대한 다운샘플링은, numSampL 값이 0보다 큰 경우에 한하여 수행될 수 있다. numSampL 값이 0보다 큰 경우라 함은, 현재 블록의 좌측 이웃 영역이 가용이고, 현재 블록의 화면 내 예측 모드는 INTRA_LT_CCLM 또는 INTRA_L_CCLM인 경우를 의미할 수 있다.
3. 휘도 블록의 상단 이웃 영역에 대한 다운샘플링
(실시예 1)
다운샘플링된 상단 이웃 영역의 화소 pTopDsY[x] (x=0..numSampT-1)은, 상단 이웃 영역이 휘도 블록과 상이한 CTU에 속하는지 여부를 고려하여 유도될 수 있다.
상단 이웃 영역이 휘도 블록과 동일한 CTU에 속하는 경우, 다운샘플링된 상단 이웃 영역의 화소 pTopDsY[x]는 상단 이웃 영역의 대응 화소 pY[2*x][-2] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 좌측, 우측, 상단, 또는 하단 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pTopDsY[x]은 다음 수학식 21과 같이 유도될 수 있다.
[수학식 21]
pTopDsY[ x ] = ( pY[ 2 * x ][ -3 ] + pY[ 2 * x - 1 ][ -2 ] + 4 * pY[ 2 * x ][ -2 ] + pY[ 2 * x + 1 ][ -2 ] + pY[ 2 * x ][ -1 ] + 4 ) >> 3
반면, 상단 이웃 영역이 휘도 블록과 상이한 CTU에 속하는 경우, 다운샘플링된 상단 이웃 영역의 화소 pTopDsY[x]는 상단 이웃 영역의 대응 화소 pY[2*x][-1] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 좌측 또는 우측 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pTopDsY[ x ]은 다음 수학식 22와 같이 유도될 수 있다.
[수학식 22]
pTopDsY[ x ] = ( pY[ 2 * x - 1 ][ -1 ] + 2* pY[ 2 * x ][ -1 ] + pY[ 2 * x + 1 ][ -1 ] + 2 ) >> 2
또는, 현재 블록의 좌상단 이웃 영역이 비가용인 경우, 상기 주변 화소는 대응 화소의 상단 또는 하단 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pTopDsY[ 0 ]은 다음 수학식 23과 같이 유도될 수 있다.
[수학식 23]
pTopDsY[ 0 ] = ( pY[ 0 ][ -3 ] + 2 * pY[ 0 ][ -2 ] + pY[ 0 ][ -1 ] + 2 ) >> 2
또는, 현재 블록의 좌상단 이웃 영역이 비가용이고, 상단 이웃 영역이 휘도 블록과 상이한 CTU에 속하는 경우, 화소 pTopDsY[ 0 ]은 상단 이웃 영역의 화소 pY[ 0 ][ -1 ]로 설정될 수 있다.
(실시예 2)
다운샘플링된 상단 이웃 영역의 화소 pTopDsY[x] (x=0..numSampT-1)은, 상단 이웃 영역이 휘도 블록과 상이한 CTU에 속하는지 여부를 고려하여 유도될 수 있다.
상단 이웃 영역이 휘도 블록과 동일한 CTU에 속하는 경우, 다운샘플링된 상단 이웃 영역의 화소 pTopDsY[x]는 상단 이웃 영역의 대응 화소 pY[2*x][-2] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 하단, 좌측, 우측, 좌하단 또는 우하단 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pTopDsY[x]은 다음 수학식 24와 같이 유도될 수 있다.
[수학식 24]
pTopDsY[ x ] = ( pY[ 2 * x - 1 ][ -2 ] + pY[ 2 * x - 1 ][ -1 ] + 2* pY[ 2 * x ][ -2 ] + 2*pY[ 2 * x ][ -1 ] + pY[ 2 * x + 1 ][ -2 ] + pY[ 2 * x + 1 ][ -1 ] + 4 ) >> 3
반면, 상단 이웃 영역이 휘도 블록과 상이한 CTU에 속하는 경우, 다운샘플링된 상단 이웃 영역의 화소 pTopDsY[x]는 상단 이웃 영역의 대응 화소 pY[2*x][-1] 및 주변 화소에 기초하여 유도될 수 있다. 주변 화소는, 대응 화소의 좌측 또는 우측 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pTopDsY[ x ]은 다음 수학식 25와 같이 유도될 수 있다.
[수학식 25]
pTopDsY[ x ] = ( pY[ 2 * x - 1 ][ -1 ] + 2* pY[ 2 * x ][ -1 ] + pY[ 2 * x + 1 ][ -1 ] + 2 ) >> 2
또는, 현재 블록의 좌상단 이웃 영역이 비가용인 경우, 상기 주변 화소는 대응 화소의 상단 또는 하단 중 적어도 하나의 방향으로 인접한 화소를 의미할 수 있다. 예를 들어, 화소 pTopDsY[ 0 ]은 다음 수학식 26과 같이 유도될 수 있다.
[수학식 26]
pTopDsY[ 0 ] = ( pY[ 0 ][ -2 ] + pY[ 0 ][ -1 ] + 1 ) >> 1
또는, 현재 블록의 좌상단 이웃 영역이 비가용이고, 상단 이웃 영역이 휘도 블록과 상이한 CTU에 속하는 경우, 화소 pTopDsY[ 0 ]은 상단 이웃 영역의 화소 pY[ 0 ][ -1 ]로 설정될 수 있다.
마찬가지로, 상단 이웃 영역의 다운샘플링은, 전술한 실시예 1과 2 중 어느 하나에 기초하여 수행될 수 있다. 이때 소정의 플래그에 기초하여 실시예 1 또는 2 중 어느 하나가 선택될 수 있다. 상기 플래그는, 다운샘플링된 휘도 화소가 원 휘도 화소와 동일한 위치를 가지는지 여부를 나타내며, 이는 전술한 바와 같다.
한편, 상단 이웃 영역에 대한 다운샘플링은, numSampT 값이 0보다 큰 경우에 한하여 수행될 수 있다. numSampT 값이 0보다 큰 경우라 함은, 현재 블록의 상단 이웃 영역이 가용이고, 현재 블록의 화면 내 예측 모드는 INTRA_LT_CCLM 또는 INTRA_T_CCLM인 경우를 의미할 수 있다.
색차 블록의 성분 간 참조를 위한 파라미터를 유도할 수 있다(S4210).
상기 파라미터는, 현재 블록의 화면 내 예측 모드를 고려하여 결정될 수 있다. 즉, 현재 블록의 화면 내 예측 모드가 INTRA_LT_CCLM인지, INTRA_L_CCLM인지 또는 INTRA_T_CCLM인지에 따라 관련 파라미터가 상이하게 유도될 수 있다.
상기 파라미터는, 휘도 블록의 이웃 영역과 색차 블록의 이웃 영역 간의 선형적인 변화도에 기초하여 산출될 수 있다. 상기 파라미터는, 휘도 영역의 화소 또는 색차 블록의 좌측/상단 이웃 영역의 화소 중 적어도 하나를 이용하여 유도될 수 있다. 여기서, 휘도 영역은, 휘도 블록 또는 휘도 블록의 상단/좌측 이웃 영역 중 적어도 하나를 포함할 수 있다. 상기 휘도 영역은, 전술한 다운샘플링이 적용된 영역을 의미할 수 있다.
색차 블록은, 휘도 영역과 파라미터를 기반으로 예측될 수 있다(S4220).
예를 들어, 다운샘플링된 휘도 블록의 화소에 상기 파라미터를 적용하여, 색차 블록의 예측 블록을 생성할 수 있다.
본 개시의 다양한 실시 예는 모든 가능한 조합을 나열한 것이 아니고 본 개시의 대표적인 양상을 설명하기 위한 것이며, 다양한 실시 예에서 설명하는 사항들은 독립적으로 적용되거나 또는 둘 이상의 조합으로 적용될 수도 있다.
또한, 본 개시의 다양한 실시 예는 하드웨어, 펌웨어(firmware), 소프트웨어, 또는 그들의 결합 등에 의해 구현될 수 있다. 하드웨어에 의한 구현의 경우, 하나 또는 그 이상의 ASICs(Application Specific Integrated Circuits), DSPs(Digital Signal Processors), DSPDs(Digital Signal Processing Devices), PLDs(Programmable Logic Devices), FPGAs(Field Programmable Gate Arrays), 범용 프로세서(general processor), 컨트롤러, 마이크로 컨트롤러, 마이크로 프로세서 등에 의해 구현될 수 있다.
본 개시의 범위는 다양한 실시 예의 방법에 따른 동작이 장치 또는 컴퓨터 상에서 실행되도록 하는 소프트웨어 또는 머신-실행가능한 명령들(예를 들어, 운영체제, 애플리케이션, 펌웨어(firmware), 프로그램 등), 및 이러한 소프트웨어 또는 명령 등이 저장되어 장치 또는 컴퓨터 상에서 실행 가능한 비-일시적 컴퓨터-판독가능 매체(non-transitory computer-readable medium)를 포함한다.