KR20200145998A - 비디오 신호 처리 방법 및 장치 - Google Patents
비디오 신호 처리 방법 및 장치 Download PDFInfo
- Publication number
- KR20200145998A KR20200145998A KR1020190074679A KR20190074679A KR20200145998A KR 20200145998 A KR20200145998 A KR 20200145998A KR 1020190074679 A KR1020190074679 A KR 1020190074679A KR 20190074679 A KR20190074679 A KR 20190074679A KR 20200145998 A KR20200145998 A KR 20200145998A
- Authority
- KR
- South Korea
- Prior art keywords
- block
- brick
- tile
- affine
- inter
- Prior art date
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/17—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
- H04N19/174—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a slice, e.g. a line of blocks or a group of blocks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/119—Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/12—Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
- H04N19/122—Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- Discrete Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
타일 및 슬라이스 정보 시그날링 부호화를 이용하여 예측 부호화 방법 및 장치를 제공한다.
Description
본 발명은 비디오 신호 처리 방법 및 장치에 관한 것이다.
비디오 영상은 시공간적 중복성 및 시점 간 중복성을 제거하여 압축 부호화되며, 이는 저장 매체에 적합한 형태로 저장되거나 통신 회선을 통해 전송될 수 있다.
본 발명은 비디오 신호의 코딩 효율을 향상시키고자 함에 있다.
상기 과제를 해결하기 위하여 본 발명은 타일 및 슬라이스 정보 시그날링 부호화 방법 및 장치를 제공한다.
본 발명에 따른 비디오 신호 처리 방법 및 장치는 장치는 타일 및 슬라이스 정보 시그날링 부호화를 이용한 예측 방법을 통해 비디오 신호 코딩 효율을 향상 시킬 수 있다.
1
기본 코딩 블록 구조
픽쳐는 그림 1과 같이 복수개의 기본 코딩 유닛(Coding Tree Unit, 이하, CTU)으로 나누어진다.
그림 1
다른 CTU와 겹치지 않도록 구성되어 있다. 예를 들어, 전체 시퀀스에서 CTU 사이즈를 128x128로 설정할 수 있고, 픽쳐 단위로 128x128 내지 256x256 중 어느 하나를 선택해서 사용할 수도 있다.
CTU를 계층적으로 분할하여 코딩 블록/코딩 유닛(Coidng Unit, 이하 CU)을 생성할 수 있다. 코딩 유닛 단위로 예측 및 변환을 수행할 수 있으며, 예측 부호화 모드를 결정하는 기본 단위가 된다. 예측 부호화 모드는 예측 영상을 생성하는 복수개의 방법을 나타내며, 화면 내 예측 (intra prediction, 이하, 인트라 예측), 화면 간 예측(inter prediction, 이하, 인터 예측) 또는 복합 예측(combined prediction)등을 예로 들수 있다. 구체적으로 예를 들어, 코딩 유닛 단위로 인트라 예측, 인터 예측 또는 복합 예측 중 적어도 어느 하나의 예측 부호화 모드를 이용하여 예측 블록(prediction block)을 생성할 수 있다. 화면 간 예측 모드에서 참조 픽쳐가 현재 픽쳐를 가리키는 경우에는 이미 복호화된 현재 픽쳐 내 영역에서 예측 블록을 생성할 수 있다. 참조 픽쳐 인덱스와 모션 벡터를 이용하여 예측 블록을 생성하기 때문에 화면 간 예측에 포함할 수 있다. 인트라 예측은 현재 픽쳐의 정보를 이용하여 예측 블록을 생성하는 방법이고, 인터 예측은 이미 복호화된 다른 픽쳐의 정보를 이용하여 예측 블록을 생성하는 방법이며, 복합 예측은 인터 예측과 인트라 예측을 혼합하여 사용하는 방법이다.
CTU는 그림 2와 같이 쿼드 트리 ,바이너리 트리 또는 트리플 트리 형태로 분할 (파티셔닝)될 수 있다. 분할된 블록은 다시 쿼드 트리, 바이너리 트리 또는 트리플 트리 형태로 추가 분할 될수 있다. 현재 블록을 4개의 정방 형태 파티션으로 나누는 방법을 쿼드 트리 파티셔닝이라고 부르고, 현재 블록을 2개의 비정방 형태 파티션으로 나누는 방법을 바이너리 트리 파티셔닝이라고 부르며, 현재 블록을 3개의 비정방 형태 파티션으로 나누는 방법을 바이너리 트리 파티셔닝이라고 정의 한다.
수직 방향으로 바이너리 파티셔닝(그림 2의 SPLIT_BT_VER)을 수직 바이너리 트리 파티셔닝이라고 부르며, 수평 방향으로 바이너리 트리 파티셔닝 (그림 2의 SPLIT_BT_HOR)을 수평 바이너리 트리 파티셔닝이라고 정의 한다.
수직 방향으로 트리플 파티셔닝 (그림 2의 SPLIT_TT_VER)을 수직 트리플 트리 파티셔닝이라고 부르며, 수평 방향으로 트리플 트리 파티셔닝 (그림 2의 SPLIT_TT_HOR)을 수평 트리플 트리 파티셔닝이라고 정의 한다.
추가 분할 횟수를 파티셔닝 뎁스(partitioning depth)라고 부르며, 시퀀스 내지 픽쳐/타일 세트 별로 파티셔닝 뎁스가 최대치를 서로 다르게 설정할 수도 있으며, 파티셔닝 트리 형태(쿼드 트리/바이너리 트리/트리플 트리)에 따라 서로 다른 파티셔닝 뎁스를 가지도록 설정할 수 있으며, 이를 나타내는 신택스를 시그날링할 수도 있다.
그림 2
분할된 코딩 블록은 쿼드 파티셔닝, 바이너리 파니셔닝 또는 멀티 파티셔닝과 같은 방법으로 추가로 분할하여 코딩 유닛을 구성하거나 추가 분할 없이 코딩 유닛을 구성할 수도 있다.
그림 3
그림 3 과 같이 하나의 CTU를 계층적으로 코딩 유닛을 설정할 수 있으며, 바이너리 트리 파티셔닝, 쿼드 트리 파티셔닝/트리플 트리 파티셔닝을 이용하여 코딩 유닛을 중 적어도 어느 하나를 이용하여 코딩 유닛을 분할할 수 있다. 이와 같은 방법을 멀티 트리 파티셔닝(Multi tree partitioning)이라고 정의 한다.
파티셔닝 뎁스가 k인 임의의 코딩 유닛을 분할하여 생성된 코딩 유닛을 하위 코딩 유닛이라하며, 파티셔닝 뎁스는 k+1이 된다. 파티셔닝 뎁스 k+1인 하위 코딩 유닛을 포함하고 있는 파티셔닝 뎁스 k인 코딩 유닛을 상위 코딩 유닛이라 한다.
상위 코딩 유닛의 파티셔닝 타입 및/또는 현재 코딩 유닛의 주변에 있는 코딩 유닛의 파티셔닝 타입에 따라 현재 코딩 유닛의 파티셔닝 타입이 제한될 수도 있다.
여기서, 파티셔닝 타입은 바이너리 트리 파티셔닝, 쿼드 트리 파티셔닝/트리플 트리 파티셔닝 중 어느 파티셔닝을 사용했는지를 알려주는 지시자를 나타낸다.
2
예측 영상 생성 방법
비디오 부호화에서 예측 영상은 복수 개의 방법으로 생성할 수 있으며, 예측 영상을 생성하는 방법을 예측 부호화 모드라고 한다.
예측 부호화 모드는 인트라 예측 부호화 모드, 인터 예측 부호화 모드, 현재 픽쳐 레퍼런스 부호화 모드 또는 결합 부호화 모드 (combined prediction)등으로 구성될 수 있다.
인터 예측 부호화 모드는 이전 픽쳐의 정보를 이용하여 현재 블록의 예측 블록(예측 영상)을 생성하는 예측 부호화 모드라고 하고, 인트라 예측 부호화 모드는 현재 블록과 이웃한 샘플을 이용하여 예측 블록을 생성하는 예측 부호화 모드라 한다. 현재 픽쳐의 이미 복원된 영상을 이용하여 예측 블록을 생성할 수도 있으며, 이를 현재 픽쳐 레퍼런스 모드 또는 인트라 블록 카피 모드라고 정의 한다.
인터 예측 부호화 모드, 인트라 예측 부호화 모드 또는 현재 픽쳐 레퍼런스 부호화 모드 중 적어도 2개 이상의 예측 부호화 모드를 사용하여 예측 블록을 생성할 수도 있으며, 이를 결합 부호화 모드(Combined prediction)이라고 정의 한다.
2.1
인트라 예측 부호화 방법
인트라 예측은 그림 4와 같이 현재 블록 주변에 있는 이미 부호화된 경계 샘플을 인트라 예측을 생성하는데 사용하며, 이를 인트라 레퍼런스 샘플이라고 정의 한다.
인트라 레퍼런스 샘플의 평균값을 예측 블록 전체 샘플의 값을 설정하거나 (DC 모드), 수평 방향 레퍼런스 가중 예측을 수행하여 생성한 수평 방향 예측 샘플과 수직 방향 레퍼런스 샘플을 가중 예측하여 생성한 수직 방향 예측 샘플을 생성한 후, 수평 방향 예측 샘플과 수직 방향 예측 샘플을 가중 예측하여 예측 샘플을 생성하거나(Planar 모드), 방향성 인트라 예측 모드등을 이용하여 인트라 예측을 수행할 수 있다.
그림 4
그림 5의 왼쪽 그림과 같이 33개의 방향을 사용(총 35개 인트라 예측 모드)하여 인트라 예측을 수행할 수 있고, 그림 5의 오른쪽 그림과 같이 65개의 방향을 사용(총 67개 인트라 예측 모드)할 수도 있다. 방향성 인트라 예측을 사용하는 경우에는 인트라 예측 모드의 방향성을 고려하여 인트라 레퍼런스 샘플(레퍼런스 참조 샘플)을 생성하고, 이로 부터 인트라 예측을 수행할 수 있다.
코딩 유닛의 좌측에 있는 인트라 레퍼런스 샘플을 좌측 인트라 레퍼런스 샘플이라하고, 코딩 유닛의 상측에 있는 인트라 레퍼런스 샘플을 상측 인트라 레퍼런스 샘플이라 한다.
방향성 인트라 예측을 수행하는 경우에는 표 1과 같이 인트라 예측 모드에 따라 예측 방향(또는 예측 각도)을 나타내는 파라미터인 인트라 방향 파라미터 (intraPredAng)를 설정할 수 있다. 아래 표 1은 35개 인트라 예측 모드를 사용할 때 2 내지 34의 값을 가지는 방향성 인트라 예측 모드를 기반으로 하는 일예에 불과하다. 방향성 인트라 예측 모드의 예측 방향(또는 예측 각도)은 더 세분화되어 33개보다 많은 개수의 방향성 인트라 예측 모드가 이용될 수 있음은 물론이다.
그림 5
표 1
그림 6
intraPredAng이 음수인 경우 (예를 들어, 인트라 예측 모드 인덱스가 11과 25 사이인 경우)에는 그림 6과 같이 현재 블록에 좌측 인트라 레퍼런스 샘플과 상측 인트라 레퍼런스 샘플을 인트라 예측 모드의 각도에 따라 1D로 구성된 일차원 레퍼런스 샘플 (Ref_1D)로 재구성할 수 있다.
그림 7
인트라 예측 모드 인덱스가 11과 18 사이인 경우에는 그림 7과 같이 현재 블록의 상변 우측에 위치한 인트라 레퍼런스 샘플부터 좌변 하단에 위치한 인트라 레퍼런스 샘플까지 반 시계 방향으로 일차원 레퍼런스 샘플을 생성할 수 있다.
그 외의 모드에서는 상변 인트라 레퍼런스 샘플 또는 좌변 인트라 레퍼런스 샘플만 이용하여 일차원 레퍼런스 샘플을 생성할 수 있다.
그림 8
인트라 예측 모드 인덱스가 19 와 25 사이인 경우에는 그림 8과 같이 현재 블록의 좌변 하단에 위치한 인트라 레퍼런스 샘플부터 상변 우측에 위치한 인트라 레퍼런스 샘플까지 시계 방향으로 일차원 레퍼런스 샘플을 생성할 수 있다.
참조 샘플 결정 인덱스 iIdx와 iIdx에 기초하여 결정되는 적어도 하나의 참조 샘플에 적용되는 가중치 관련 파라미터 ifact를 다음 식 (1) 내지 (2)와 같이 유도할 수 있다. iIdx와 ifact는 방향성 인트라 예측 모드의 기울기에 따라 가변적으로 결정되며, iIdx에 의해 특정되는 참조 샘플은 정수 펠(integer pel)에 해당할 수 있다.
iIdx = (y+1) * P
ang
/32
(1)
i
fact
= [ (y+1) * P
ang
] & 31
(2)
예측 샘플 별로 적어도 하나 이상의 일차원 레퍼런스 샘플을 특정하여 예측 영상을 유도 할 수도 있다. 예를 들어, 방향성 인트라 예측 모드의 기울기 값을 고려하여 예측 샘플 생성에 사용할 수 있는 일차원 레퍼런스 샘플의 위치를 특정할 수 있다. 예측 샘플 별로 상이한 방향성 인트라 예측 모드를 가질 수도 있다. 하나의 예측 블록에 대해 복수의 인트라 예측 모드가 이용될 수도 있다. 복수의 인트라 예측 모드는 복수의 비방향성 인트라 예측 모드의 조합으로 표현될 수도 있고, 하나의 비방향성 인트라 예측 모드와 적어도 하나의 방향성 인트라 예측 모드의 조합으로 표현될 수도 있고, 또는 복수의 방향성 인트라 예측 모드의 조합으로 표현될 수도 있다. 하나의 예측 블록 내의 소정의 샘플 그룹 별로 상이한 인트라 예측 모드가 적용될 수 있다. 소정의 샘플 그룹은 적어도 하나의 샘플로 구성될 수 있다. 샘플 그룹의 개수는 현재 예측 블록의 크기/샘플 개수에 따라 가변적으로 결정될 수도 있고, 예측 블록의 크기/샘플 개수와는 독립적으로 부호화기/복호화기에 기-설정된 고정된 개수일 수도 있다.
구체적으로 예를 들어, 참조 샘플 결정 인덱스 iIdx를 이용하여 일차원 레퍼런스 샘플의 위치를 특정할 수 있다.
인트라 예측 모드의 기울기에 따라 하나의 일차원 레퍼런스 샘플만으로는 인트라 예측 모드의 기울기를 표현할 수 없을 때는 식 (3)와 같이 인접한 일차원 레퍼런스 샘플을 보간하여 제 1 예측 영상을 생성할 수 있다. 인트라 예측 모드의 기울기/각도에 따른 angular line이 정수 펠에 위치한 레퍼런스 샘플을 지나가지 않는 경우, 해당 angular line에 좌/우 또는 상/하에 인접한 레퍼런스 샘플을 보간하여 제1 예측 영상을 생성할 수 있다. 이때 이용되는 보간 필터의 필터 계수는 ifact에 기초하여 결정될 수 있다. 예를 들어, 보간 필터의 필터 계수는 angular line 상에 위치한 소수 펠과 상기 정수 펠에 위치한 레퍼런스 샘플 간의 거리에 기초하여 유도될 수 있다.
P(x,y) = ((32-i
fact
)/32)* Ref_1D(x+iIdx+1) + (i
fact
/32)* Ref_1D(x+iIdx+2)
(3)
하나의 일차원 레퍼런스 샘플만으로 인트라 예측 모드의 기울기를 표현할 수 있을 때 (ifact 값이 0 일때) 는 다음 식 (4)와 같이 제 1 예측 영상을 생성할 수 있다.
P(x,y) = Ref_1D(x+iIdx+1)
(4)
2.2
와이드 앵글 인트라 예측 부호화 방법
방향성 인트라 예측 모드의 예측 각도는 그림 9와 같이 45 내지 -135 사이로 설정될 수 있다.
그림 9
비정방 형태 코딩 유닛에서 인트라 예측 모드를 수행하는 경우 기 정의된 예측 각도 때문에 현재 샘플과 가까운 인트라 레퍼런스 샘플 대신 현재 샘플과 거리가 먼 인트라 레퍼런스 샘플에서 현재 샘플을 예측하는 단점이 발생할 수 있다.
예를 들어, 그림 10의 왼쪽 그림과 같이 코딩 유닛의 너비가 코딩 유닛의 높이보다 큰 코딩 유닛(이하, 수평 방향 코딩 유닛)에서는 거리가 가까운 샘플 T 대신에 거리가 먼 L에서 인트라 예측을 수행할 수 있다. 또 다른 예를 들어, 그림 10의 오른쪽 그림과 같이 코딩 유닛의 높이가 코딩 유닛의 너비보다 큰 코딩 유닛(이하, 수직 방향 코딩 유닛)에서는 거리가 가까운 샘플 L 대신에 거리가 먼 샘플 T로 부터 인트라 예측을 수행할 수 있다.
그림 10
비정방 형태 코딩 유닛에서는 기 정의된 예측 각도보다 더 넓은 예측 각도에서 인트라 예측을 수행할 수도 있으며, 이를 와이드 앵글 인트라 예측 모드라고 정의 한다.
그림 10의 좌측 그림에서 수평 방향 코딩 유닛에 있는 샘플 A는 와이드 앵글 인트라 예측 모드를 사용하여 인트라 레퍼런스 샘플 T로 부터 예측할 수 있다.
그림 10의 우측 그림에서 수직 방향 코딩 유닛에 있는 샘플 A는 와이드 앵글 인트라 예측 모드를 사용하여 인트라 레퍼런스 샘플 L로 부터 예측할 수 있다.
기존 인트라 예측 모드 N개에 M개의 와이드 앵글 각도를 더해 N+M 개의 인트라 예측 모드가 정의될 수 있다. 구체적으로 예를 들어, 표 2와 같이 67개 인트라 모드에 28개 와이드 앵글 각도를 더해 총 95개 인트라 예측 모드가 정의될 수 있다.
현재 블록이 이용할 수 있는 인트라 예측 모드는 현재 블록의 형태에 따라 결정될 수 있다. 일 예로, 현재 블록의 크기, 종횡비(예컨대, 너비와 높이의 비율), 레퍼런스 라인 인덱스 중 적어도 하나에 기초하여, 95개의 방향성 인트라 예측 모드 중 65개의 방향성 인트라 예측 모드를 선택할 수 있다.
표 2
표 2에 나타난 인트라 예측 모드 각도는, 현재 블록의 형태, 레퍼런스 라인 인덱스 중 적어도 하나에 기초하여 적응적으로 결정될 수 있다. 일 예로, Mode 15의 intraPredAngle은 현재 블록이 비정방형인 경우보다 현재 블록이 정방형인 경우에 더 큰 값을 갖도록 설정될 수 있다. 또는, Mode 75의 intraPredAngle은 인접 레퍼런스 라인이 선택된 경우보다 비인접 레퍼런스 라인이 선택된 경우 더 큰 값을 갖도록 설정될 수 있다.
와이드 앵글 인트라 예측 모드를 사용하는 경우 그림 11과 같이 상측 인트라 레퍼런스 샘플의 길이를 2W+1로 설정하고, 좌측 인트라 레퍼런스 샘플의 길이를 2H+1로 설정할 수 있다.
그림 11
와이드 앵글 인트라 예측을 사용하는 경우에 와이드 앵글 인트라 예측 모드의 인트라 예측 모드를 부호화 하는 경우에는 인트라 예측 모드의 개수가 많아져서 부호화 효율이 낮아 질수 있다. 와이드 앵글 인트라 예측 모드는 와이드 앵글 인트라에서 사용되지 않는 기존 인트라 예측 모드로 대체하여 부호화 할 수 있으며, 대체되는 예측 모드를 와이드 앵글 대체 모드라고 한다. 와이드 앵글 대체 모드는 와이드 앵글 인트라 예측 모드와 반대 방향인 인트라 예측 모드일 수 있다.
구체적으로 예를 들어, 그림 12와 같이 35개 인트라 예측을 사용하는 경우 와이드 앵글 인트라 예측 모드 35는 와이드 앵글 대체 모드인 인트라 예측 모드 2로 부호화할 수 있고, 와이드 앵글 인트라 예측 모드 36은 와이드 앵글 대체 모드인 인트라 예측 모드 3으로 부호화 할 수 있다.
그림 12
코딩 블록의 형태 또는 코딩 블록 높이대 너비의 비에 따라 대체하는 모드와 개수를 다르게 설정할 수 있다. 구체적으로 예를 들어, 표 3은 코딩 블록의 너비와 높이의 비에 따라 사용되는 인트라 예측 모드를 나타낸다.
표 3
인트라 예측 영상을 생성 한 후, 샘플 포지션에 기초하여 각 샘플 별로 인트라 예측 영상을 업데이트 할수 있으며, 이를 샘플 포지션 기반 인트라 가중 예측 방법 (Position dependent prediction combination, PDPC)라고 정의한다.
2.3
멀티 라인 인트라 예측 부호화 방법
그림 13
인접한 인트라 페러런스 라인과 비인접 인트라 레퍼런스 라인으로 구성된 복수개의 인트라 레퍼런스 라인 중 어느 하나를 선택해서 인트라 예측을 수행할 수 있으며, 이를 복수 라인 인트라 예측 방법이라고 한다. 비인접 인트라 레퍼런스 라인은 제 1 비인접 인트라 레퍼런스 라인(비인접 레퍼런스 라인 인덱스 1), 제 2 비인접 인트라 레퍼런스 라인(비인접 레퍼런스 라인 인덱스 2), 제 3 비인접 인트라 레퍼런스 라인(비인접 레퍼런스 라인 인덱스 3)으로 구성할 수 있다. 비인접 인트라 레퍼런스 라인 중 일부만 사용할 수도 있다. 일 예로, 제 1 비인접 인트라 레퍼런스 라인 과 제 2 비인접 인트라 레퍼런스 라인만 사용할 수도 있고, 제 1비인접 인트라 레퍼런스 라인과 제 3 비인접 인트라 레퍼런스 라인만 사용할 수도 있다.
인트라 예측에 사용된 레퍼런스 라인을 특정하는 신택스인 인트라 레퍼런스 라인 인덱스(intra_luma_ref_idx)를 코딩 유닛 단위로 시그날링 할 수 있다.
구체적으로 인접 인트라 레퍼런스 라인, 제 1 비인접 인트라 레퍼런스 라인, 제 3 비인접 인트라 레퍼런스 라인을 사용하는 경우에 다음 표 4와 같이 intra_luma_ref_idx를 정의할 수도 있다.
표 4
비인접 인트라 레퍼런스 라인을 사용하는 경우에는 비방향성 인트라 예측 모들를 사용하지 않도록 설정할 수도 있다. 즉, 비인접 인트라 레퍼런스 라인을 사용하는 경우에는 DC 모드 내지 플래너 모드 (Planar mode)를 사용하지 않도록 제한 할 수도 있다.
비인접 인트라 레퍼런스 라인에 속한 샘플의 개수는 인접 인트라 페러런스 라인의 샘플 개수보다 크게 설정할 수 있다. 또한 제 i 비인접 인트라 레퍼런스 라인의 샘플 개수보다 제 i+1 비인접 인트라 레퍼런스 라인의 샘플 개수가 더 많게 설정할 수도 있다. 제 i 비인접 인트라 레퍼런스 라인의 상측 샘플 개수와 제 i-1 비인접 인트라 레퍼런스 라인의 상측 샘플 개수 차이는 레퍼런스 샘플 개수 오프셋 offsetX[i]로 나타낼 수 있다.
offsetX[1]은 제 1 비인접 인트라 레퍼런스 라인의 상측 샘플 개수와 인접 인트라 레퍼런스 라인의 상측 샘플 개수의 차분 값을 나타낸다. 제 i 비인접 인트라 레퍼런스 라인의 좌측샘플 개수와 제 i-1 비인접 인트라 레퍼런스 라인의 좌측 샘플 개수 차이는 레퍼런스 샘플 개수 오프셋 offsetY[i]로 나타낼 수 있다. offsetY[1]은 제 1 비인접 인트라 레퍼런스 라인의 좌측 샘플 개수와 인접 인트라 레퍼런스 라인의 좌측 샘플 개수의 차분 값을 나타낸다.
인트라 레퍼런스 라인 인덱스가 i인 비인접 인트라 레퍼런스 라인은 상측 비인접 레퍼런스 라인 refW + offsetX[i] 와 좌측 비인접 레퍼런스 라인 refH+ offsetY[i] 그리고 좌상단 샘플로 구성될 수 있으며, 비인접 인트라 레퍼런스 라인에 속한 샘플의 개수는 refW + refH + offsetX[i] + offsetY[i] +1 로 구성될 수 있다.
refW =2* nTbW
(5)
refH =2* *nTbH
(6)
식 (5) 내지 (6)에서 nTbW는 코딩 유닛의 너비를 나타내고, nTbH는 코딩 유닛의 높이를 나타내며, whRatio는 다음 식 (7)과 같이 정의 할 수 있다.
whRatio = log2(nTbW/nTbH)
(7)
멀티 라인 인트라 예측 부호화 방법에서는 비인접 인트라 레퍼런스 라인을 사용하는 경우에는 와이드 앵글 인트라 모드는 사용하지 않도록 설정할 수도 있다. 또는 현재 코딩 유닛의 MPM 모드가 와이드 앵글 인트라 모드이면 멀티 라인 인트라 예측 부호화 방법을 사용하지 않도록 설정할 수도 있다.
이 경우 인트라 레퍼런스 라인 인덱스가 i인 비인접 인트라 레퍼런스 라인은 상측 비인접 레퍼런스 라인 W + H + offsetX[i] 와 좌측 비인접 레퍼런스 라인 H + W + offsetY[i] 그리고 좌상단 샘플로 구성될 수 있으며, 비인접 인트라 레퍼런스 라인에 속한 샘플의 개수는 2W + 2H + offsetX[i] + offsetY[i] +1 로 구성될 수 있으며, whRatio 값에 따라서 offsetX[i]와 offsetY[i] 값이 달라질 수 있다.
예를 들어, whRatio 값이 1 보다 큰 경우에는 offsetX[i] 값을 1, offsetY[i] 값을 0 으로 설정할 수 있고, whRatio 값이 1 보다 작은 경우에는 offsetX[i] 값을 0, offsetY[i] 값을 1로 설정할 수도 있다.
2.5
인터 예측 부호화 및 복호화 방법
이전 픽쳐의 정보를 이용하여 현재 픽쳐에 있는 블록의 예측 블록(예측 영상)을 생성하는 방법을 인터 예측 부호화 모드라고 한다.
현재 블록의 이전 픽쳐 내에 있는 특정 블록으로 부터 예측 블록을 생성할 수도 있다.
부호화 단계에서 이전 픽쳐 내 블록 중 복원 에러가 가장 작은 블록을 콜 블록( collocated block)을 중심으로 탐색하여 선택할 수 있으며, 현재 블록의 좌상단 샘플과 선택된 블록의 좌상단 샘플 사이의 x축 차분 및 y축 차분을 모션 벡터(motion vector)라 정의하고, 이를 비트스트림에 전송하여 시그날링할 수 있다. 모션 벡터가 특정하는 참조 픽쳐의 특정 블록에서 인터폴레이션 등을 통해 생성한 블록을 움직임 보상 예측 블록(motion compensated predictor block)이라 한다.
콜 블록은 그림 14와 같이 현재 블록과 좌상단 샘플의 위치 및 크기가 같은 해당 픽쳐의 블록을 나타낸다. 해당 픽쳐는 참조 픽쳐 레퍼런스와 같은 신택스로 부터 특정 될 수 있다.
그림 14
인터 예측 부호화 모드에서는 오브젝트의 움직임을 고려하여 예측 블록을 생성할 수 있다.
예를 들어, 이전 픽쳐에 있는 오브젝트가 현재 픽쳐에서 어느 방향으로 어느 정도 움직였는지 알면 현재 블록에서 움직임을 고려한 블록을 차분하여 예측 블록(예측 영상)을 생성할 수 있으며, 이를 움직임 예측 블록이라고 정의한다.
현재 블록에서 움직임 예측 블록 또는 해당 예측 블록을 차분하여 잔차 블록을 생성할 수 있다.
오브젝트에 움직임이 발생하면, 해당 예측 블록보다 움직임 예측 블록을 사용하면 잔차 블록의 에너지가 작아져서 압축 성능이 좋아질 수 있다.
이와 같이 움직임 예측 블록을 이용하는 방법을 움직임 보상 예측이라고 부르며, 대부분의 인터 예측 부호화에서는 움직임 보상 예측을 사용한다.
이전 픽쳐에 있는 오브젝트가 현재 픽쳐에서 어느 방향으로, 어느 정도 움직였는지를 나타내는 값을 모션 벡터라고 한다. 모션 벡터는 시퀀스 단위 또는 타일 그룹 단위 또는 블록 단위로 서로 다른 화소 정밀도를 갖는 모션벡터를 사용할 수 있다. 예를 들어, 특정 블록에서 모션 벡터의 화소 정밀도는 octor-pel,Quarter-Pel, Half-Pel, Integer pel, 4 Integer pel 중 적어도 어느 하나 일수 있다.
인터 예측 모드는 translaton 모션을 이용한 인터 예측 방법과 affine 모션을 이용한 affine 인터 예측 방법이 선택적으로 사용될 수도 있다.
2.4.1
어파인 인터 예측 부호화 및 복호화 방법
비디오에서 특정 물체(object)의 움직임이 선형적으로 나타나지 않는 경우가 많이 발생한다. 예를 들어, 그림 15와 같이 카메라 줌인 (Zoom-in), 줌 아웃(Zoom-out), 회전(roation), 임의 형태로 변환을 가능하게 하는 affine 변환 등의 affine motion이 사용된 영상에서는 오브젝트의 움직임을 translation 움직임 벡터만 사용하는 경우 물체의 움직임을 효과적으로 표현할 수 없으며, 부호화 성능이 낮아질 수 있다.
그림 15
어파인 모션은 다음 식 (8)과 같이 표현할 수 있다.
어파인 모션을 총 6개의 파라미터를 사용하여 표현하는 것은 복잡한 움직임이 있는 영상에 효과적이지만, 어파인 모션 파라미터를 부호화하는데 사용하는 비트가 많아서 부호화 효율이 떨어질 수도 있다.
이에, 4개의 파라미터로 어파인 모션을 간략화하여 표현할 수 있으며,, 이를 4 파라미터 어파인 모션 모델이라고 정의한다. 식 (9)는 4개의 파라미터로 어파인 모션을 표현한 것이다.
4 파라미터 어파인 모션 모델은 현재 블록의 두 컨트롤 포인트에서의 움직임 벡터를 포함할 수 있다. 컨트롤 포인트는 현재 블록의 좌상단 코너, 우상단 코너 및 좌하단 코너를 포함할 수 있다. 일 예로, 4파라미터 어파인 모션 모델은 그림 16의 좌측 그림과 같이 코딩 유닛의 좌상단 샘플 (x0,y0)에서의 모션 벡터 sv0 와 코딩 유닛의 우상단 샘플 (x1,y1)에서의 모션 벡터 sv1에 의해서 결정 될 수 있으며, sv0와 sv1을 어파인 시드 벡터라고 정의한다. 이하, 좌상단에 위치한 어파인 시드 벡터 sv0를 제 1 어파인 시드 벡터라 가정하고, 우상단에 위치한 어파인 시드 벡터 sv1를 제 2 어파인 시드 벡터라 가정하기로 한다. 4파라미터 어파인 모션 모델에서 제1/2 어파인 시드 벡터 중 하나를 좌하단에 위치한 어파인 시드 벡터로 교체하여 사용하는 것도 가능하다.
그림 16
6 파라미터 어파인 모션 모델은 그림 16의 우측 그림과 같이 4 파라미터 어파인 모션 모델에 잔여 컨트롤 포인트(예컨대, 좌하단에 샘플 (x2,y2))의 모션 벡터 sv2가 추가된 어파인 모션 모델이다. 이하, 좌상단에 위치한 어파인 시드 벡터 sv0를 제 1 어파인 시드 벡터라 가정하고, 우상단에 위치한 어파인 시드 벡터 sv1를 제 2 어파인 시드 벡터라 가정하고, 좌하단에 위치한 어파인 시드 벡터 sv2를 제3 어파인 시드 벡터라 가정한다.
어파인 모션을 표현하기 위한 파라미터의 개수에 관한 정보가 비트스트림에 부호화될 수 있다. 예컨대, 6 파라미터의 사용 여부를 나타내는 플래그, 4 파라미터의 사용 여부를 나타내는 플래그가 타일 그룹, 타일, 코딩 유닛 또는 CTU 단위로 부호화될 수 있다. 이에 따라, 타일 그룹, 코딩 유닛 또는 CTU 단위로 4 파라미터 어파인 모션 모델 내지 6 파라미터 어파인 모션 모델을 선택적으로 사용할 수도 있다.
어파인 시드 벡터를 이용하여 그림 17과 같이 코딩 유닛의 서브 블록 별로 모션 벡터를 유도할 수 있으며, 이를 어파인 서브 블록 벡터라고 정의한다. _
그림 17
어파인 서브 블록 벡터는 다음 식 (10)과 같이 유도할 수도 있다. 여기서 서브 블록의 기준 샘플 위치(x,y)는 블록의 코너에 위치한 샘플(예컨대, 좌상단 샘플)일 수도 있고, x축 또는 y축 중 적어도 하나가 중앙인 샘플(예컨대, 중앙 샘플)일 수도 있다.
어파인 서브 블록 벡터를 이용하여 코딩 유닛 단위 내지 코딩 유닛 내 서브 블록 단위로 움직임 보상을 수행할 수 있으며, 이를 어파인 인터 예측 모드라고 정의한다. 식 (10)에서 (x1-x0)는 코딩 유닛의 너비와 유닛의 너비 w와 같은 값이거나, w/2 또는 w/4로 설정할 수도 있다.
현재 코딩 유닛의 주변 블록의 어파인 모션 벡터(어파인 서브 블록 벡터 내지 어파인 시드 벡터)를 이용하여 현재 코딩 유닛의 어파인 시드 벡터 및 참조 픽쳐 리스트를 를 유도할 수 있으며, 이를 어파인 머지 모드라고 부른다.
그림 18
어파인 머지 모드는 현재 코딩 유닛의 주변 블록 (예를 들어, 그림 18의 A, B, C, D, E) 중 적어도 어느 하나가 어파인 모드(어파인 인터 예측 모드 내지 어파인 머지 모드)로 부호화 된 경우에 주변 블록의 어파인 모션 벡터로 부터 현재 블록의 어파인 시드 벡터를 유도할 수 있다. 주변 블록 중 어파인 모드로 부호화 된 블록을 어파인 주변 블록이라고 부른다.
주변 블록의 탐색 순서는 A --> B --> C --> D --> E와 같이 기 정의된 순서를 따르며, 탐색 순서 중 가장 첫 번째 오는 어파인 주변 블록에서 현재 블록의 어파인 시드 벡터를 유도할 수 있다 또는 주변 블록 중 어느 하나의 어파인 주변 블록을 선택하고, 선택된 주변 블록의 인덱스를 부호화할 수도 있다.
그림 19
또는 현재 코딩 유닛의 주변 블록 A0, A1, B0, B1, B2 에서 최대 2개의 어파인 시드 벡터를 유도할 수도 있다. 일 예로, 그림 19의 주변 블록 중 {A0,A1 }중어느 하나의 주변 블록에서 어파인 시드 벡터를 유도하고, {B0, B1, B2 } 중에서 또 하나의 어파인 시드 벡터를 유도할 수 있으며, 이를 어파인 머지 모드라고 한다.
그림 20과 같이 어파인 주변 블록의 시드 벡터 nv0 = (nv0x, nv0y) 및 nv1 = (nv1x, nv1y)에서 제 3 시드 벡터 nv2= (nv2x, nv2y) 를 유도할 수 있다.
그림 20
다음 식 (11)과 같이 어파인 주변 블록의 제 3 시드 벡터를 유도할 수 있다.
다음 식 (12) 내지 (13)과 같이 주변 블록의 제1 어파인 시드 벡터, 제 2 어파인 시드 벡터 및 제 3 시드 벡터를 이용하여 현재 블록의 시드 벡터를 유도할 수 있다.
또는, 주변 블록의 제1 어파인 시드 벡터, 제 2 어파인 시드 벡터 및 제 3 시드 벡터 중 2개를 이용하여 현재 블록의 시드 벡터를 유도할 수도 있다.
그림 21
주변 블록의 제1 시드 벡터, 제2 시드 벡터 또는 제3 시드 벡터 중 적어도 하나를 어파인 주변 블록의 서브 블록 중 최하단에 위치한 서브 블록의 움직임 벡터로 치환할 수 있다. 일 예로, 그림 21와 같이 어파인 주변 블록 중 좌하단 서브 블록 또는 하단 중앙 서브 블록 (이하, 제 4 어파인 서브 블록 )과 어파인 주변 블록 중 우하단 서브 블록 또는 하단 중앙 서브 블록(이하, 제 5 어파인 서브 블록)을 기준으로 특정 샘플 위치를 특정할 수 있고, 특정 샘플 위치를 이용하여 어파인 시드 벡터를 유도할 수도 있다. 이 특정 샘플위치를 어파인 기준 샘플의 위치라고 부른다.
제 4 어파인 서브 블록 및 제 5 어파인 서브 블록의 위치는 대상 블록이 현재 블록의 상위 CTU에 존재하는지 여부에 따라 서로 다르게 설정할 수도 있다. 예를 들어, 대상 블록이 현재 블록의 상위 CTU(현재 블록이 속한 CTU의 상측 CTU)에 존재하면, 그림 22와 같이 제 4 어파인 서브 블록은 하단 중앙 서브 블록으로 설정하고, 제 5 어파인 서브 블록은 우하단 서브 블록으로 설정할 수도 있다. 이 때 제 4 어파인 기준 샘플 (제 4 어파인 서브 블록의 기준 샘플)과 제 5 어파인 기준 샘플(제 5 어파인 서브 블록의 기준 샘플)의 차이는 멱급수(2n)이 되도록 설정할 수 있다.예컨대, nbW/2이 되도록 설정할 수도 있다. 여기서 nbW는 주변 블록의 너비로 설정할 수도 있다.
주변 블록의 제1 시드 벡터, 제2 시드 벡터 또는 제3 시드 벡터 중 적어도 하나를 어파인 주변 블록의 서브 블록 중 최하단에 위치한 서브 블록의 움직임 벡터로 치환할 수 있다. 일 예로, 그림 21와 같이 어파인 주변 블록 중 좌하단 서브 블록 또는 하단 중앙 서브 블록 (이하, 제 4 어파인 서브 블록 )과 어파인 주변 블록 중 우하단 서브 블록 또는 하단 중앙 서브 블록(이하, 제 5 어파인 서브 블록)을 기준으로 특정 샘플 위치를 특정할 수 있고, 특정 샘플 위치를 이용하여 어파인 시드 벡터를 유도할 수도 있다. 이 특정 샘플위치를 어파인 기준 샘플의 위치라고 부른다.
제 4 어파인 서브 블록 및 제 5 어파인 서브 블록의 위치는 대상 블록이 현재 블록의 상위 CTU에 존재하는지 여부에 따라 서로 다르게 설정할 수도 있다. 예를 들어, 대상 블록이 현재 블록의 상위 CTU(현재 블록이 속한 CTU의 상측 CTU)에 존재하면, 그림 22와 같이 제 4 어파인 서브 블록은 하단 중앙 서브 블록으로 설정하고, 제 5 어파인 서브 블록은 우하단 서브 블록으로 설정할 수도 있다. 이 때 제 4 어파인 기준 샘플 (제 4 어파인 서브 블록의 기준 샘플)과 제 5 어파인 기준 샘플(제 5 어파인 서브 블록의 기준 샘플)의 차이는 멱급수(2n)이 되도록 설정할 수 있다.예컨대, nbW/2이 되도록 설정할 수도 있다. 여기서 nbW는 주변 블록의 너비로 설정할 수도 있다.
그림 22
대상 블록이 현재 블록의 좌측 CTU에 존재하면(현재 블록이 속한 CTU의 좌측 CTU), 제 4 어파인 서브 블록은 좌하단 서브 블록으로 설정하고, 제 5 어파인 서브 블록은 우하단 서브 블록으로 설정할 수도 있다.
그림 23
또 다른 예를 들어, 대상 블록이 현재 블록의 상위 CTU(현재 블록이 속한 CTU의 상측 CTU)에 존재하면, 그림 23과 같이 제 4 어파인 서브 블록은 좌하단 서브 블록으로 설정하고, 제 5 어파인 서브 블록은 하단 중앙 서브 블록으로 설정할 수도 있다. 이 때 제 4 어파인 기준 샘플 (제 4 어파인 서브 블록의 기준 샘플)과 제 5 어파인 기준 샘플(제 5 어파인 서브 블록의 기준 샘플)의 차이는 멱급수(2n)이 되도록 설정할 수 있다.예컨대, nbW/2이 되도록 설정할 수도 있다. 여기서 nbW는 주변 블록의 너비로 설정할 수도 있다.
어파인 기준 샘플 위치는 서브 블록의 좌상단 블록이나 우하단 블록으로 설정하거나, 중앙에 위치한 샘플로 설정할 수도 있다. 또는 제 4 어파인 서브 블록과 제 5 어파인 서브 블록이 서로 다른 어파인 기준 샘플 위치를 갖도록 설정할 수도 있다. 구체적으로 예를 들어, 그림 24의 왼쪽 그림과 같이 제 4 어파인 서브 블록의 어파인 기준 샘플 위치(이하, 제 4 어파인 기준 샘플 위치) 는 서브 블록 내 좌상단 샘플로 설정할 수 있고, 제5 어파인 서브 블록의 어파인 기준 샘플 위치(이하, 제 5 어파인 기준 샘플 위치)는 서브 블록내 우상단 샘플 (xi, yi)의 우측 샘플 (xi+1, yi)로 설정할 수 있다.
이때, 제5 어파인 서브 블록의 기준 위치는 우상단 샘플의 우측 샘플을 사용하되, 제5 어파인 서브 블록의 움직임 벡터는 우상단 샘플의 움직임 벡터로 설정될 수 있다. 또는, 우상단 샘플의 우측 샘플의 움직임 벡터를 제5 어파인 서브 블록의 움직임 벡터로 설정할 수 있다.
또 다른 예를 들어, 그림 24의 오른쪽 그림과 같이 제 4 어파인 기준 샘플 위치는 제 4 어파인 서브 블록 내 우상단 샘플 (xi,yi)의 좌측 샘플 (xi-1,yi)로 설정할 수 있다. 이 때, 제 4 어파인 서브 블록의 기준 위치는 좌상단 샘플의 좌측 샘플을 사용하되, 제 4 어파인 서브 블록의 움직임 벡터는 좌상단 샘플의움직임 벡터로 설정될 수 있다. 또는, 좌상단 샘플의 좌측 샘플의 움직임 벡터를 제 4 어파인 서브 블록의 움직임 벡터로 설정할 수 있다.
그림 24
다른 예를 들어, 그림 25의 좌측 그림과 같이 제 4 어파인 기준 샘플 위치는 서브 블록 내 좌하단 샘플로 설정할 수 있고, 제 5 어파인 기준 샘플 위치는 서브 블록내 우하단 샘플 (xj, yj)의 우측 샘플 (xj+1, yj)로 설정할 수 있다. 이때, 제5 어파인 서브 블록의 기준 위치는 우하단 샘플의 우측 샘플을 사용하되, 제5 어파인 서브 블록의 움직임 벡터는 우하단 샘플의 움직임 벡터로 설정될 수 있다. 또는, 우하단 샘플의 우측 샘플의 움직임 벡터를 제5 어파인 서브 블록의 움직임 벡터로 설정할 수 있다.
또 다른 예를 들어, 그림 25의 좌측 그림과 같이 제 4 어파인 기준 샘플 위치는 서브 블록 내 좌하단 샘플 (xj, yj)의 좌측 샘플 (xj-1, yj)로 설정할 수 있고, 제 5 어파인 기준 샘플 위치는 서브 블록내 우하단 샘플로 설정할 수 있다.
이때, 제5 어파인 서브 블록의 기준 위치는 좌하단 샘플의 좌측 샘플을 사용하되, 제5 어파인 서브 블록의 움직임 벡터는 좌하단 샘플의 움직임 벡터로 설정될 수 있다. 또는, 좌하단 샘플의 좌측 샘플의 움직임 벡터를 제5 어파인 서브 블록의 움직임 벡터로 설정할 수 있다.
그림 25
다른 예를 들어, 그림 26의 좌측 그림과 같이 제 4 어파인 기준 샘플 위치는 서브 블록 내 좌상단 샘플과 좌하단 샘플 사이에 있는 샘플(이하, 좌 중간 샘플) 로 설정할 수 있고, 제 5 어파인 기준 샘플 위치는 서브 블록내 우상단 샘플과 우하단 샘플 사이에 있는 샘플 (이하, 우 중간 샘플) (xk, yk)의 우측 샘플 (xk+1, yk)로 설정할 수 있다. 이때, 제5 어파인 서브 블록의 기준 위치는 우 중간 샘플의 우측 샘플을 사용하되, 제5 어파인 서브 블록의 움직임 벡터는 우 중간 샘플의 움직임 벡터로 설정될 수 있다. 또는, 우 중간 샘플의 우측 샘플의 움직임 벡터를 제5 어파인 서브 블록의 움직임 벡터로 설정할 수 있다.
또 다른 예를 들어, 그림 26의 우측 그림과 같이 제 4 어파인 기준 샘플 위치는 좌 중간 샘플 (xk, yk)의 좌측 샘플 (xk-1, yk)로 설정할 수 있고, 제 5 어파인 기준 샘플 위치는 우 중간 샘플로 설정할 수 있다.
그림 26
또는 식 (14) 내지 (15)와 같이 어파인 주변 블록의 제 1 시드 벡터와 제 2 시드 벡터로 부터 제 4 어파인 서브 블록/제 5 어파인 서브 블록의 어파인 모션 벡터를 유도할 수 있으며, 이를 각각 제 4 어파인 시드 벡터 nv3=(nv3x, nv3y) 및 제 5 어파인 시드 벡터 nv4=(nv4x, nv4y)라 부른다.
제 4 어파인 시드 벡터 및 제 5 어파인 시드 벡터를 이용하여 식 (16) 내지 (17)과 같이 현재 블록의 제 1 어파인 시드 벡터 및 제 2 어파인 시드 벡터를 유도할 수 있다.
식 (16)내지 (17)에서 xn4-xn3을 Wseed로 설정할 수 있다. Wseed 를 서브 시드 벡터 너비라고 부른다. 서브 시드 벡터 너비 Wseed는 2의 멱급수(2n)가 되도록 설정할 수 있다.
서브 시드 벡터 너비 Wseed가 2의 멱급수(2n)가 아닌 경우에는 Wseed가 2의 멱급수가 되도록 특정 오프셋을 더한 후에 식 (16)내지 (17)을 적용할 수도 있고, 나누기 연산 대신에 비트 쉬프트 연산으로 대체할 수도 있다.
LCU boundary에 존재하는 경우에 식 (14) 내지 (15)와 같이 어파인 시드 벡터를 유도하지 않고, 제 4 어파인 기준 샘플 위치에 있는 translation모션 벡터 정보를 제 4 어파인 시드 벡터로 설정하고, 제 5어파인 기준 샘플 위치에 있는 translation 모션 벡터 정보를 제 5 어파인 시드 벡터로 설정할 수도 있다.
LCU boundary에 존재하는지 여부에 관계없이 제 i 어파인 기준 샘플 위치에 있는 translation 모션 벡터 정보를 제 i 어파인 시드 벡터로 설정할 수 있다. 여기서 i의 범위는 1 내지 5로 설정할 수 있다.
또는 제 4 어파인 기준 샘플 위치에 있는 translation 모션 벡터 정보를 제 1 어파인 시드 벡터로 설정할 수도 있고, 제 5 어파인 기준 샘플 위치에 있는 translation 모션 벡터 정보를 제 2 어파인 시드 벡터로 설정할 수도 있다.
그림 27
또는 어파인 기준 샘플이 어파인 주변 블록에 속하지 않는 경우에는 어파인 기준 샘플과 가장 가까운 어파인 주변 블록의 샘플에서 모션 벡터 정보를 유도할 수도 있으며, 이를 변형 어파인 머지 벡터 유도 방법 이라고 부른다.
구체적으로 예를 들어, 그림 27 과 같이 제 5 어파인 기준 샘플 (Xn4, yn4)이 어파인 주변 블록에 속하지 않는 경우에는 제 5 어파인 기준 샘플의 좌측 경계 샘플 (즉, (Xn4-1, yn4) )을 포함하는 블록의 translation 모션 벡터 정보를 제 5 어파인 시드 벡터로 설정할 수도 있다.
2.5.2
머지 모드 부호화 방법
현재 코딩 유닛의 모션 정보(모션 벡터, 참조 픽쳐 인덱스 등)를 부호화 하지 않고, 주변 블록의 모션 정보로 부터 유도할 수 있다. 주변 블록 중 어느 하나의 모션 정보를 현재 코딩 유닛의 모션 정보로 설정할 수 있으며, 이를 머지 모드(merge mode)라고 정의 한다.
머지 모드에 사용되는 주변 블록은 그림 28의 머지 후보 인덱스 0 내지 4 와 같이 현재 코딩 유닛과 인접한 블록 (현재 코딩 유닛의 경계와 맞닿은 블록)일 수도 있고, 그림 28의 머지 후보 인덱스 5 내지 26과 같이 인접하지 않은 블록일 수도 있다.
그림 28
머지 후보가 현재 블록과의 거리가 기정의된 임계값을 넘어가면 가용(available)하지 않은 것으로 설정할 수 있다.
예를 들어, 기 정의된 임계값을 CTU의 높이(ctu_height) 또는 ctu_height+N으로 설정할 수도 있으며, 이를 머지 후보 가용 임계값이라고 정의 한다. 즉 머지 후보의 y축 좌표(yi)와 현재 코딩 유닛의 좌상단 샘플(이하, 현재 코딩 유닛 기준 샘플)의 y축 좌표 차분 (y0) (즉, yi - y0)이 머지 후보 가용 임계값 보다 큰 경우에는 머지 후보를 가용(Available)하지 않은 것으로 설정할 수 있다. 여기서 N은 기 정의된 오프셋 값이다. 구체적으로 예를 들어, N을 16으로 설정할 수도 있고, ctu_height으로 설정할 수도 있다.
그림 29
CTU 경계 (CTU boundary)를 넘어가는 머지 후보가 많은 경우에는 비가용 머지 후보가 많이 발생하여, 부호화 효율이 낮아질 수도 있다. 코딩 유닛의 위쪽에 존재하는 머지 후보(이하, 상측 머지 후보) 는 가능한 작게 설정하고, 코딩 유닛의 좌측 및 하단(이하, 좌하단 머지 후보)에 존재하는 머지 후보는 가능한 많게 설정할 수도 있다.
그림 29와 같이 현재 코딩 유닛 기준 샘플의 y축 좌표와 상측 머지 후보의 y축 좌표의 차가 코딩 유닛 높이의 2배가 넘지 않도록 설정할 수도 있다.
그림 29와 현재 코딩 유닛 기준 샘플의 x축 좌표와 좌하단 머지 후보의 x축 좌표의 차가 코딩 유닛 너비의 2배가 넘지 않도록 설정할 수도 있다.
현재 코딩 유닛과 인접한 머지 후보를 인접 머지 후보라고 부르고, 현재 코딩 유닛과 인접하지 않은 머지 후보를 비인접 머지 후보라고 정의 한다.
현재 코딩 유닛의 머지 후보가 인접 머지 후보인지 여부를 나타내는 플래그 isAdjacentMergeflag을 시그날링할 수 있다.
isAdjacentMergeflag값이 1 이면 현재 코딩 유닛의 모션 정보는 인접 머지 후보에서 유도할 수 있음을 나타내고, isAdjacentMergeflag값이 0 이면 현재 코딩 유닛의 모션 정보는 비인접 머지 후보에서 유도할 수 있음을 나타낸다.
2.4.3
인터 복호화 영역 머지 방법
현재 픽쳐에서 이미 인터 예측으로 부호화된 코딩 유닛의 모션 정보(움직임 벡터 및 참조 픽쳐 인덱스)를 기 정의된 크기의 리스트에 저장할 수 있으며, 이를 인터 영역 모션 정보 리스트이라고 정의한다.
인터 영역 모션 정보 리스트에 있는 모션 정보(움직임 벡터 및 참조 픽쳐 인덱스)를 인터 복호화 영역 머지 후보라고 한다.
인터 복호화 영역 머지 후보를 현재 코딩 유닛의 머지 후보로 사용할 수 있으며, 이런 방법을 인터 복호화 영역 머지 방법이라고 정의한다.
타일 그룹이 초기화 되면 인터 영역 모션 정보 리스트는 비어 있으며, 픽쳐의 일부 영역을 부호화/복호화되면 인터 영역 모션 정보 리스트에 추가할 수 있다. 타일 그룹 헤더를 통해 인터 영역 모션 정보 리스트의 초기 인터 복호화 영역 머지 후보를 시그널링할 수도 있다.
코딩 유닛이 인터 예측으로 부호화/복호화 되면 그림 30과 같이 상기 코딩 유닛의 움직임 정보를 인터 영역 모션 정보 리스트에 업데이트 할 수 있다. 인터 영역 모션 정보 리스트에 있는 인터 복호화 영역 머지 후보의 개수가 최대값인 경우에는, 인터 영역 모션 정보 리스트 인덱스가 가장 작은 값 (가장 먼저 인터 영역 모션 정보 리스트에 있는 인터 복호화 영역 머지 후보)을 제거하고, 가장 최근에 부호화/복호화된 인터 영역의 모션 벡터를 인터 복호화 영역 머지 후보로 추가할 수 있다.
그림 30
디코딩 된 코딩 유닛의 모션 벡터 mvCand를 인터 영역 모션 정보 리스트 HmvpCandList에 업데이트 할수 있다. 이 때 디코딩 된 코딩 유닛의 모션 정보가 인터 영역 모션 정보 리스트에 있는 모션 정보 중 어느 하나와 같은 경우(모션 벡터와 레퍼런스 인덱스가 모두 같은 경우)에는 인터 영역 모션 정보 리스트를 업데이트 하지 않거나, 그림 32와 같이 디코딩 된 코딩 유닛의 모션 벡터 mvCand을 인터 영역 모션 정보 리스트의 제일 마지막에 저장할 수 있다. 이 때 mvCand과 같은 모션 정보를 가지고 있는 HmvpCandList의 인덱스를 hIdx이면, 그림 32와 같이 hIdx 보다 큰 모든 i에 대해 HMVPCandList [i]를 HVMPCandList[i-1]로 설정할 수도 있다. 현재 디코딩된 코딩 유닛에서 서브 블록 머지 후보 (sub-block merge candidates)가 사용된 경우에는 코딩 유닛 내 대표 서브 블록의 모션 정보를 인터 영역 모션 정보 리스트에 저장할 수도 있다.
일 예로, 코딩 유닛 내 대표 서블 블록은 그림 31과 같이 코딩 유닛 내 좌상단 서브 블록으로 설정하거나, 코딩 유닛 내 중간 서브 블록으로 설정할 수도 있다.
그림 31
그림 32
인터 영역 모션 정보 리스트에 총 NumHmvp 개의 모션 정보(움직임 벡터 및 참조 픽쳐 인덱스) 를 저장할 수 있으며, NumHmvp을 인터 영역 모션 정보 리스트 크기라고 정의한다.
인터 영역 모션 정보 리스트 크기는 기 정의된 값을 사용할 수 있다. 타일 그룹 헤더에 인터 영역 모션 정보 리스트 크기를 시그날링할 수도 있다. 일 예로, 인터 영역 모션 정보 리스트 크기는 16으로 정의할 수도 있고, 6으로 정의하거나 5로 정의할 수도 있다.
인터 예측이면서 어파인 모션 벡터를 갖는 코딩 유닛에서는 인터 영역 모션 정보 리스트를 갖지 않도록 한정할 수도 있다.
또는 인터 예측이면서 어파인 모션 벡터를 갖는 경우에는 어파인 서브 블록 벡터를 인터 영역 모션 정보 리스트에 추가할 수도 있다. 이 때 서브 블록의 위치는 좌상단 또는 우상단, 또는 중앙 서브 블록 등으로 설정할 수도 있다.
또는, 각 컨트롤 포인트의 모션 벡터 평균값을 인터 영역 머지 후보 리스트에 추가할 수도 있다.
특정 코딩 유닛을 부호화/복호화를 수행해서 유도한 움직임 벡터 MV0가 인터 복호화 영역 머지 후보 중 어느 하나와 동일한 경우에는 MV0를 인터 영역 모션 정보 리스트에 추가하지 않을 수 있다. 또는, MV0와 동일한 움직임 벡터를 갖는 기존의 인터 복호화 영역 머지 후보를 삭제하고, MV0를 새롭게 복호화 영역 머지 후보에 포함시켜, MV0에 할당되는 인덱스를 갱신할 수 있다.
인터 영역 모션 정보 리스트 이외에 인터 영역 모션 정보 롱텀 리스트 HmvpLTList를 구성할 수도 있다. 인터 영역 모션 정보 롱텀 리스트 크기는 인터 영역 모션 정보 리스트 크기와 같게 설정하거나, 상이한 값으로 설정할 수 있다.
인터 영역 모션 정보 롱텀 리스트는 타일 그룹 시작 위치에 처음 추가한 인터 복호화 영역 머지 후보로 구성될 수 있다. 인터 영역 모션 정보 롱텀 리스트가 모두 가용한 값으로 구성된 이후에 인터 영역 모션 정보 리스트를 구성하거나, 인터 영역 모션 정보 리스트 내 모션 정보를 인터 영역 모션 정보 롱텀 리스트의 모션 정보로 설정할 수도 있다.
이 때 한 번 구성된 인터 영역 모션 정보 롱텀 리스트는 업데이트를 수행하지 않거나, 타일 그룹 중 복호화된 영역이 전체 타일 그룹의 반 이상일 때 다시 업데이트 하거나, m개 CTU 라인마다 업데이트 하도록 설정할 수도 있다. 인터 영역 모션 정보 리스트는 인터 영역으로 복호화될 때마다 업데이트 하거나, CTU 라인 단위로 업데이트 하도록 설정할 수 있다.
인터 영역 모션 정보 리스트에 모션 정보와 코딩 유닛의 파티션 정보 또는 형태를 저장할 수도 있다. 현재 코딩 유닛과 파티션 정보 및 형태가 유사한 인터 영역 머지 후보만 사용하여 인터 복호화 영역 머지 방법을 수행할 수도 있다.
또는, 블록 형태에 따라 개별적으로 인터 영역 머지 후보 리스트을 구성할 수도 있다. 이 경우, 현재 블록의 형태에 따라, 복수의 인터 영역 머지 후보 리스트 중 하나를 선택하여 사용할 수 있다.
그림 33
그림 33과 같이 인터 영역 어파인 모션 정보 리스트와 인터 영역 모션 정보 리스트로 구성할 수도 있다. 복호화된 코딩 유닛이 어파인 인터 또는 어파인 머지 모드인 경우에는 인터 영역 어파인 모션 정보 리스트 HmvpAfCandList에 제1 어파인 시드 벡터와 제 2 어파인 시드 벡터를 저장할 수도 있다. 인터 영역 어파인 머지 후보 리스트에 있는 모션 정보를 인터 복호화 영역 어파인 머지 후보라고 한다.
현재 코딩 유닛에서 사용 가능한 머지 후보는 다음과 같이 구성할 수 있으며, 구성 순서와 같은 탐색 순서를 가질 수 있다.
1. 공간적 머지 후보 (코딩 블록 인접 머지 후보 및 코딩 블록 비인접 머지 후보)
2. 시간적 머지 후보 (이전 참조 픽쳐에서 유도한 머지 후보)
3. 인터 복호화 영역 머지 후보
4. 인터 복호화 영역 어파인 머지 후보
5. Zero motion 머지 후보
그림 34
디코딩된 모션 벡터의 해상도에 따라 서로 다른 인터 영역 모션 정보 리스트에 저장할 수 있다. 예를 들어, 그림 34와 같이 디코딩된 모션 벡터 mvCand가 1/4 pel 해상도를 갖는 경우에는 인터 영역 쿼터펠 모션 정보 리스트 HmvpQPCandList에 mvCand를 저장할 수 있고, 디코딩된 모션 벡터 mvCand가 integer pel 해상도를 갖는 경우에는 인터 영역 하프펠 모션 정보 리스트 HmvpIPCandList에 mvCand를 저장할 수 있으며, 디코딩된 모션 벡터 mvCand가 4 integer pel 해상도를 갖는 경우에는 인터 영역 인티저펠 모션 정보 리스트 Hmvp4IPCandList에 mvCand를 저장할 수 있다.
그림 35
그림 35와 같이 코딩 유닛이 머지 오프셋 벡터 부호화 방법을 사용한 경우에는 이 코딩 유닛의 모션 정보 mvCand를 HmvpCandList에 저장하지 않고 인터 영역 머지 오프셋 모션 정보 리스트 HmvpMMVDCandList에 저장할 수 있다.
먼저 머지 후보 리스트는 mergeCandList는 공간적 머지 후보 및 시간적 머지 후보로 구성할 수 있다. 가용한 공간적 머지 후보 및 시간적 머지 후보의 개수를 가용 머지 후보 개수 (NumMergeCand)라고 정의한다. 가용 머지 후보 개수가 머지 최대 허용 개수보다 작은 경우에는 인터 복호화 영역 머지 후보를 머지 후보 리스트 mergeCandList에 추가할 수 있다.
인터 영역 모션 정보 리스트 HmvpCandList를 머지 후보 리스트 mergeCandList에 추가할 때는 인터 영역 모션 정보 리스트 내 인터 복호화 영역 머지 후보의 모션 정보가 기존 머지 리스트 mergeCandList의 모션 정보와 동일한지 여부를 체크할 수 있다. 모션 정보가 동일한 경우에는 머지 리스트 mergeCandList에 추가하지 않고, 모션 정보가 동일하지 않은 경우에는 머지 리스트 mergeCandList에 인터 복호화 영역 머지 후보를 추가할 수 있다.
인터 복호화 영역 머지 후보 중 인덱스가 큰 것 부터 머지 후보 리스트 mergeCandList에 추가하거나 인덱스가 작은 것 부터 머지 후보 리스트 mergeCandList에 추가할 수 있다.
서브 블록 단위 머지 후보는 다음 프로세스와 같이 유도할 수 있다.
1. 현재 블록의 주변 머지 후보 블록의 모션 벡터로 부터 초기 쉬프트 벡터 (shVector)를 유도할 수 있다.
2. 식 (18)과 같이 코딩 유닛 내 서브 블록의 좌상단 샘플 (xSb,ySb)에 초기 쉬프트 벡터를 가산하여 좌상단 샘플의 위치가 (xColSb, yColSb)인 쉬프트 서브 블록을 유도할 수 있다.
(xColSb, yColSb) = (xSb + shVector[0]>> 4,ySb+shVector[1]>> 4)
(18)
3. (xColSb, yColSb)를 포함하고 있는 서브 블록의 센터 포지션과 대응되는 collocated block의 모션 벡터를 좌상단 샘플 (xSb,ySb)를 포함하고 있는 서브 블록의 모션 벡터로 유도할 수 있다.
그림 36
또는 현재 디코딩된 코딩 유닛에서 서브 블록 머지 후보 (sub-block merge candidates)가 사용된 경우에는 코딩 유닛 내 복수 개의 대표 서브 블록의 모션 정보를 인터 영역 서브 블록 모션 정보 리스트 HSubMVPCandList에 저장할 수도 있다. 예를 들어, 복수개의 대표 서브 블록은 그림 36과 같이 코딩 유닛의 좌상단 서브 블록(이하,제 1 대표 서브 블록), 우상단 서브 블록(이하,제 2 대표 서브 블록), 그리고 좌하단 서브 블록(이하,제 3 대표 서브 블록)으로 구성할 수도 있다. 인터 영역 서브 블록 모션 정보 리스트의 개수는 기 정의된 값으로 설정할 수 있으며, 통상 인터 영역 모션 정보 리스트의 개수보다 적게 설정할 수 있다. 제 1 대표 서브 블록의 모션 벡터를 제 1 대표 서브 블록 모션 벡터라 하고, 제 2 대표 서브 블록의 모션 벡터를 제 2 대표 서브 블록 모션 벡터라 하며, 제 3 대표 서브 블록의 모션 벡터를 제 3 대표 서브 블록 모션 벡터라 한다.
인터 영역 서브 블록 모션 정보 리스트 HSubMVPList에 있는 서브 블록 모션 벡터를 어파인 시드 벡터로 사용할 수도 있다. 구체적으로 예를 들어, 인터 영역 서브 블록 모션 정보 리스트 HSubMVPList에 있는 서브 블록 모션 후보의 제 1 대표 서브 블록 모션 벡터를 제 1 어파인 시드 벡터, 제 2 대표 서브 블록 모션 벡터를 제 2 어파인 시드 벡터, 그리고 제 3 대표 서브 블록 모션 벡터를 제 3 어파인 시드 벡터로 설정할 수도 있다. 또 다른 예를 들어, 인터 영역 서브 블록 모션 정보 리스트 HSubMVPList에 있는 제 1 대표 서브 블록 모션 벡터를 제 4 어파인 시드 벡터, 제 2 대표 서브 블록 모션 벡터는 제 5 어파인 시드 벡터로 사용할 수도 있다.
인터 영역 모션 정보 리스트 HMvpCandList에 있는 모션 벡터를 어파인 시드 벡터 중 어느 하나로 사용할 수도 있다. 예를 들어, HMvpCandList에 있는 모션 벡터를 제 1 어파인 시드 벡터 내지 제 5 어파인 시드 벡터 중 어느 하나의 값으로 사용할 수 있다.
인터 복호화 영역 모션 후보를 현재 코딩 유닛의 움직임 정보 예측자 (Motion vector predictor, MVP) 후보로 사용할 수 있으며, 이런 방법을 인터 복호화 영역 움직임 정보 예측 방법이라고 정의한다.
인터 복호화 영역 어파인 모션 후보를 현재 코딩 유닛의 움직임 정보 예측자 (Motion vector predictor, MVP) 후보로 사용할 수 있으며, 이런 방법을 인터 복호화 영역 움직임 정보 어파인 예측 방법이라고 정의한다.
현재 코딩 유닛에서 사용 가능한 움직임 정보 예측자 후보는 다음과 같이 구성할 수 있으며, 구성 순서와 같은 탐색 순서를 가질 수 있다.
1. 공간적 움직임 예측자 후보 (코딩 블록 인접 머지 후보 및 코딩 블록 비인접 머지 후보와 동일)
2. 시간적 머지 후보 (이전 참조 픽쳐에서 유도한 움직임 예측자 후보)
3. 인터 복호화 영역 머지 후보
4. 인터 복호화 영역 어파인 머지 후보
5. Zero motion 움직임 예측자 후보
2.4.4 머지 병렬 부호화 방법
코딩 유닛 단위로 머지 후보를 유도할 수 있으나, 그림 37과 같이 병렬 부호화/복호화를 위해 코딩 유닛 단위 보다 큰 기준 영역(이하, 병렬 머지 영역) 안에 있는 머지 후보는 비가용 머지 후보(unavaialble merge candidates)로 설정할 수도 있다. 구체적으로 예를 들어, 그림 37의 왼쪽 그림에서 코딩 유닛 CU5의 공간적 머지 후보는 병렬 머지 영역 내에 있는 공간적 머지 후보 x3 와 x4를 비가용 머지 후보로 설정하고, 병렬 머지 영역 밖에 있는 공간적 머지 후보 x0 내지 x3는 가용 머지 후보로 설정할 수 있다.
또 다른 예를 들어, 그림 37의 오른쪽 그림에서 코딩 유닛 CU9의 공간적 머지 후보는 병렬 머지 영역 내에 있는 공간적 머지 후보 x6, x7, x8을 비가용 머지 후보로 설정하고, 병렬 머지 영역 밖에 있는 공간적 머지 후보 x5 와 x9는 가용 머지 후보로 설정할 수 있다.
그림 37
병렬 머지 영역은 정방 형태일 수도 있고, 비정방 형태일 수도 있다. 병렬 머지영역의 형태를 나타내는 정보가 비트스트림을 통해 시그날링될 수 있다. 비 정방 형태일 경우, 병렬 머지 영역의 샘플의 개수, 병렬 머지 영역의 너비/높이를 나타내는 정보 중 적어도 하나가 시그날링될 수도 있다.
병렬 머지 영역의 크기는 비트스트림을 통해 시그널링되는 정보, 픽처 해상도, 슬라이스 또는 타일 크기 중 적어도 하나를 기초로 결정될 수 있다.
병렬 머지 영역에 존재하는 복수의 CU의 부호화/복호화가 완료되면, 부호화/복호화가 완료된 CU의 움직임 정보를 인터 영역 머지 리스트에 추가할 수 있다.
다만, 병렬 머지 영역에 존재하는 복수의 CU는 동시에(병렬로) 예측을 수행하기 때문에, 부호화/복호화의 선후 관계를 결정하기 어려운 문제점이 있다. 이에 따라, 병렬 머지 영역에 존재하는 CU들의 움직임 정보를 기 정의된 순서로 인터 영역 머지 리스트 HmvpcandList에 추가할 수 있다. 여기서, 기 정의된 순서는 현재 CTU 또는 MER 내 CU의 스캔 순서, 각 CU의 움직임 정보 또는 동일한 움직임 정보를 갖는 CU의 개수 중 적어도 하나를 기초로 결정될 수 있다. 일 예로, 현재 CTU 또는 MER 내 래스터 스캔, 수직 스캔, 수평 스캔 또는 지그재그 스캔 순서에 따라, 각 CU의 움직임 정보를 인터 영역 머지 리스트 HmvpcandList에 추가할 수 있다. 또는, 단방향 예측인 CU의 움직임 정보를 양방향 예측인 CU의 움직임 정보 보다 먼저(또는 나중에) 인터 영역 머지 리스트에 추가할 수 있다. 또는, 현재 CTU 또는 MER 내 사용 빈도 순(또는 이의 역순)으로 움직임 정보를 인터 영역 머지 리스트에 추가할 수 있다.
인터 복호화 영역 머지 후보가 병렬 머지 영역 내에 있고, 현재 코딩 유닛의 머지 후보로 사용되는 경우에는, 병렬 머지 영역에서 병렬 부호화 및 복호화를 수행할 수 없다. 병렬 머지 영역이 사용되는 경우에, 인터 복호화 영역 머지 후보를 사용하지 않도록 제한할 수도 있다.
인터 영역 머지 리스트를 MER 단위 또는 CTU 단위로 구성할 수도 있다. 예를 들어, 그림 38과 같이 CTU 또는 MER 영역 단위로 인터 영역 MER 머지 리스트 HmvpMERCandList를 구성할 수 있다. 인터 영역 MER 머지 리스트에 추가된 인터 영역 머지 후보는 인터 영역 머지 리스트(HmvpCandList)에 업데이트 하지 않을 수 있다. 현재 CTU 또는 MER 영역내 모션 정보 mvCand는 HmvpMERCandList에 추가될 수 있다. 인터 영역 MER 머지 리스트의 크기는 인터 영역 머지 리스트의 크기와 같도록 설정할 수도 있다. 또는, 현재 CTU 또는 MER의 크기에 따라, 인터 영역 MER 머지 리스트의 크기를 결정할 수도 있다.
그림 38
현재 CTU 또는 MER 영역내 CU는 현재 CTU 또는 MER 영역에 대한 인터 영역 MER 머지 리스트에 포함된 인터 영역 MER 머지 후보를 이용하지 못하도록 제한할 수 있다. 이를 통해, 현재 CU와 동일한 CTU 또는 MER 영역에 속하는 CU의 움직임 정보를 머지 후보로 이용하는 것이 제한될 수 있다. HmvpcandList만 사용하고, HmvpMERCandList는 사용하지 않는 경우에, 현재 코딩 유닛의 머지 후보는 현재 CTU 또는 MER 내의 모션 정보를 이용하지 않기 때문에, 병렬 머지 영역에서 병렬 부호화 및 복호화를 수행할 수 있다.
CTU 또는 MER에 포함된 모든 CU의 부호화/복호화가 끝나면 인터 영역 머지 리스트와 인터 영역 MER 머지 리스트를 병합할 수 있다. 구체적으로, 그림 39와 같이 HmvpcandList는 HmvpMerCandList에와 이전 HmvpcandList에서 업데이트 할 수 있다. 인터 영역 MER 머지 리스트가 포함하는 인터 영역 MER 머지 후보들은 인터 영역 MER 머지 리스트에 삽입된 순서에 따라, 인터 영역 머지 리스트에 추가될 수 있다.
다른 예로, 인터 영역 MER 머지 리스트 HmvpMerCandList에 포함된 인터 영역 MER 머지 후보는 기 정의된 순서로 인터 영역 머지 리스트 HmvpcandList에 추가될 수 있다. 여기서, 기 정의된 순서는 현재 CTU 또는 MER 내 CU의 스캔 순서, 각 CU의 움직임 정보 또는 동일한 움직임 정보를 갖는 CU의 개수 중 적어도 하나를 기초로 결정될 수 있다. 일 예로, 현재 CTU 또는 MER 내 래스터 스캔 순서에 따라, 인터 영역 MER 머지 후보들을 인터 영역 머지 리스트 HmvpcandList에 추가할 수 있다. 또는, 단방향 예측인 인터 영역 MER 머지 후보들을 양방향 예측인 인터 영역 MER 머지 후보들 보다 먼저(또는 나중에) 인터 영역 머지 리스트에 추가할 수 있다. 또는, 현재 CTU 또는 MER 내 사용 빈도 순(또는 이의 역순)으로 인터 영역 MER 머지 후보들을 인터 영역 머지 리스트에 추가할 수 있다.
그림 39
인터 영역 MER 머지 리스트 내 인터 영역 MER 머지 후보는 HmvpMERCand를 HmvpCandList내 인터 복호화 영역 머지 후보로 추가할 수 있다. 이 때, HmvpMERCand이 HmvpCand 중 어느 하나와 같은 경우에 HmvpCandList에 추가하지 않도록 설정할 수도 있다. 또는, HmvpMERCand가 기 정의된 값 이상의 인덱스를 갖는 HmvpCand와 동일한 경우에 HmvpMERCand가 HmvpCandList에 추가되지 않을 수 있다.
2.7
대칭 MVD (Symmetric MVD) 부호화방법
그림 40
그림 40과 같이 L0에서 사용한 모션 벡터의 MVD (Motion vector difference) 의 symmetric MVD(벡터의 크기는 같고, 방향이 반대인 MVD)를 L1의 MVD로 설정할 수도 있으며, 이를 symmetric MVD 부호화 방법이라 한다. Symmetric MVD 부호화를 사용하는 경우 다음 식 (19) 내지 (20)과 같이 MV를 유도할 수 있다.
(mvx0, mvy0) (mvp_x0 + mvd_x0 , mvpy0 + mvdy0)
(19)
(mvx0, mvy0) (mvp_x0 - mvd_x0 , mvpy0 - mvdy0)
(20)
즉, LIST1의 움직임 예측 정보는 mv
코딩 유닛 단위로 symmetric MVD를 사용하는지 여부를 나타내는 플래그 sym_mvd_flag를 비트스트림을 통해 시그날링할 수 있다. sym_mvd_flag 값이 1 이면, 코딩 유닛에서 symmetric MVD 부호화 방법을 사용함을 나타낸다.
Symmetric MVD 부호화를 사용하는 경우, 제 1 단방향 참조 픽쳐는 제 1 단방향 참조 픽쳐 리스트(RefPicList0) 중 현재 픽쳐보다 POC(Picture order count, 픽쳐 아웃풋 순서)가 작으면서, 현재 픽쳐와 가장 가까운 픽쳐(이하, 좌측 최소 거리 픽쳐)로 설정할 수 있으며, 제 1 단방향 참조 픽쳐 인덱스(RefPicList0)는 좌측 최소 거리 픽쳐의 참조 픽쳐 인덱스로 설정할 수 있다. 여기서 가장 가까운 픽쳐라 함은 현재 픽쳐의 POC와 참조 픽쳐의 POC 차분이 가장 작은 참조 픽쳐를 의미 한다.
또는 제 1 단방향 참조 픽쳐는 RefPicList0[0]로 설정할 수도 있다.
Symmetric MVD 부호화를 사용하는 경우, 제 2 단방향 참조 픽쳐는 제 2 단방향 참조 픽쳐 리스트(RefPicList1) 중 현재 픽쳐보다 POC가 크면서, 현재 픽쳐와 가장 가까운 픽쳐(이하, 우측 최소 거리 픽쳐)로 설정할 수 있으며, 제 2 단방향 참조 픽쳐 인덱스(RefPicList1)는 우측 최소 거리 픽쳐의 참조 픽쳐 인덱스로 설정할 수 있다.
또는 제 2 단방향 참조 픽쳐는 RefPicList1[1]로 설정할 수도 있다.
제 1 단방향 참조 픽쳐 리스트에서 현재 픽쳐보다 POC가 작은 픽쳐가 존재하지 않는 경우, 제 1 단방향 참조 픽쳐 리스트 중 현재 픽쳐보다 POC가 크고 현재 픽쳐와 가장 가까운 픽쳐를 제 1 단방향 참조 픽쳐로 설정할 수도 있다. /
제 2 단방향 참조 픽쳐 리스트에서 현재 픽쳐보다 POC가 큰 픽쳐가 존재하지 않는 경우, 제 2 단방향 참조 픽쳐 리스트 중 현재 픽쳐보다 POC가 작고 현재 픽쳐와 가장 가까운 픽쳐를 제 2 단방향 참조 픽쳐로 설정할 수도 있다.
제 1 단방향 참조 픽쳐의 POC와 제 2 단방향 참조 픽쳐의 POC가 현재 픽쳐의 POC 보다 작고, 제 1 단방향 참조 픽쳐의 POC와 제 2 단방향 참조 픽쳐의 POC가 같은 경우에는 symmetric mvd 부호화를 사용하지 않도록 설정할 수도 있다. 구체적으로 표 5와 같은 신택스 테이블을 사용할 수도 있다.
표 5
제 1 단방향 참조 픽쳐와 제 2 단방향 참조 픽쳐가 현재 픽쳐를 기준으로 모두 좌측에 있거나, 모두 우측에 있는 경우, symmetric MVD 대신에 다음식 (21) 내지 (22)와 같이 L1의 MVD를 스케일링하여 사용할 수도 있다.
(mvx0, mvy0) (mvp_x0 + mvd_x0 , mvpy0 + mvdy0)
(21)
(mvx0, mvy0) (mvp_x0 + scale*mvd_x0 , mvpy0 - mvdy0)
(22)
다음식 (21) 내지 (22)에서 scale값은 식 (23) 내지 (24)와 같이 정의 할 수 있다.
scale = abs(POC_Curr - POC_L0) / abs(POC_Curr - POC_L1)
(23)
scale = abs(POC_Curr - POC_L1) / abs(POC_Curr - POC_L0)
(24)
식 (23) 내지 (24)에서 POC_Curr은 현재 픽쳐의 POC 값을 나타내고, POC_L0은 제 1 단방향 참조 픽쳐의 POC 값을 나타내며, POC_L1은 제 2 단방향 참조 픽쳐의 POC 값을 나타낸다.
제 2 단방향 참조 픽쳐 리스트 중 현재 픽쳐보다 POC 값이 큰 참조 픽쳐가 존재하고, 제 1 단방향 참조 픽쳐 리스트 중 현재 픽쳐보다 POC 값이 작은 픽쳐가 적어도 하나 이상 존재하는 경우, symmetric MVD 부호화 방법을 사용하지 않을 수 있다.
또는 제 1 단방향 참조 픽쳐 리스트 중 현재 픽쳐보다 POC 값이 작은 참조 픽쳐가 존재하지 않고, 제 2 단방향 참조 픽쳐 리스트 중 현재 픽쳐보다 POC 값이 큰 참조 픽쳐가 적어도 하나 이상 존재하는 경우, symmetric MVD 부호화 방법을 사용하지 않을 수 있다.
3
변환 및 양자화
원본 영상에서 예측 영상을 차분한 영상을 잔차 영상(residual)이라 한다.
잔차 영상에 DCT(Discrete cosine transform)와 같은 2차원 변환(Transform)을 통하여 2원 주파수 성분으로 분해할 수 있다. 영상에서 고주파 성분을 제거해도 시각적으로 왜곡이 크게 발생하지 않는 특성이 있다. 고주파에 해당하는 값을 작게 하거나 0으로 설정하면 시각적 왜곡이 크지 않으면서도 압축 효율을 크게 할 수 있다.
예측 블록의 크기나 예측 모드에 따라 DST (Discrete sine transform)을 사용할 수도 있다. 구체적으로 예를 들어, 인트라 예측 모드이고, 예측 블록/코딩 블록의 크기가 NxN 보다 작은 크기인 경우에는 DST 변환을 사용하도록 설정하고, 그 외의 예측 블록/코딩 블록에서는 DCT를 사용하도록 설정할 수도 있다.
DCT는 영상을 코사인 (cosine) 변환을 이용하여 2차원 주파수 성분으로 분해(변환)하는 처리이고, 그 때의 주파수 성분들은 기저 영상으로 표현된다. 예를 들어, NxN 블록에서 DCT 변환을 수행하면 N2 개의 기본 패턴 성분을 얻을 수 있다. DCT 변환을 수행한다는 것은 원화소 블록에 포함된 기본 패턴 성분들 각각의 크기를 구하는 것이다. 각 기본 패턴 성분들의 크기는 DCT 계수라고 정의 한다.
대체적으로 저주파에 0이 아닌 성분들이 많이 분포하는 영상에서는 이산 여현 변환(Discrete Cosine Transform, DCT)을 주로 사용하고, 고주파 성분이 많이 분포하는 영상에서는 DST (Discrete Sine Transform)을 사용할 수도 있다.
DST는 영상을 sin 변환을 이용하여 2차원 주파수 성분으로 분해(변환)하는 처리를 나타낸다. DCT 또는 DST 변환 이외의 변환 방법을 사용하여 2차원 영상을 2차원 주파수 성분으로 분해(변환)할 수 있으며, 이를 2차원 영상 변환이라고 정의 한다.
잔차 영상 중 특정 블록에서는 2차원 영상 변환을 수행하지 않을 수 있으며, 이를 변환 스킵(transform skip)이라고 정의 한다. 변환 스킵 이후에 양자화를 적용할 수 있다. 변환 스킵의 허용 여부는, 코딩 유닛의 크기 또는 형태 중 적어도 하나에 기초하여 결정될 수 있다. 일 예로, 변환 스킵은 특정 크기 이하의 코딩 유닛에서만 사용하도록 제한할 수도 있다. 예를 들어, 32x32보다 작은 블록에서만 변환 스킵을 사용하도록 설정할 수도 있다. 또는, 정방형태 블록에서만 변환 스킵을 사용하도록 제한할 수도 있다. 구체적으로 예를 들어, 32x32, 16x16, 8x8, 4x4 블록 단위로 변환 스킵을 적용할 수도 있다.
또는 서브 파티션 인트라 부호화 방법을 사용하는 경우 서브 파티션 단위로 변환 스킵을 선택적으로 적용할 수도 있다. 구체적으로 예를 들어, 그림 41과 같이 상측 서브 파티션에서는 변환 스킵을 사용할 수도 있고, 하측 서브 파티션에서는 수평 방향으로 DST7, 수직 방향으로 DCT8(tu_mts_idx 3)을 수행할 수도 있다.
그림 41
2차원 영상 내에 있는 임의의 블록을 DCT 또는 DST 또는 2차원 영상 변환을 적용할 수 있으며, 이 때 사용된 변환을 제 1 변환이라고 정의 한다. 제 1 변환을 수행 후 변환 블록의 일부 영역에서 변환을 다시 수행할 수 있으며, 이를 제 2 변환이라고 정의 한다.
제 1 변환은 복수개의 변환 코어 중 하나를 사용할 수 있다. 구체적으로 예를 들어, 변환 블록에서 DCT2 , DCT8 또는 DST7 중 어느 하나를 선택하여 사용할 수 있다. 또는 변환 블록의 수평 방향 변환과 수직 방향 변환의 변환 코어를 개별적으로 결정할 수 있다. 이에 따라, 수평 방향 변환 및 수직 방향 변환은 상호 동일할 수도 있고, 상이할 수도 있다. 수평 방향 변환과 수직 방향 변환에서 서로 다른 변환 코어를 사용할 수도 있으며, 이를 복수 변환 코어 부호화 방법(Multiple Transform Selection, MTS)이라 정의 한다.
제 1변환과 제 2 변환을 수행하는 블록 단위가 서로 다르게 설정할 수도 있다. 구체적으로 예를 들어, 잔차 영상의 8x8 블록에서 제 1 변환을 수행한 후, 4x4 서브 블록 별로 제 2 변환을 각각 수행할 수도 있다. 또 다른 예를 들어, 각 4x4 블록에서 제 1 변환을 수행한 후, 8x8 크기의 블록에서 제 2 변환을 각각 수행할 수도 있다.
제 1 변환이 적용된 잔차 영상을 제 1 변환 잔차 영상이라고 정의한다.
제 1 변환 잔차 영상에 DCT 또는 DST 또는 2차원 영상 변환을 적용할 수 있으며, 이 때 사용된 변환을 제 2 변환이라고 정의한다. 제 2 변환이 적용된 2차원 영상을 제 2 변환 잔차 영상이라고 정의한다.
제 1 변환 및/또는 제 2 변환을 수행한 후의 블록 내 샘플 값 또는 변환 스킵을 수행한 후 블록 내 샘플 값을 변환 계수라고 정의한다. 양자화는 블록의 에너지를 줄이기 위해 변환 계수를 기 정의된 값으로 나누는 과정을 말한다. 변환 계수에 양자화를 적용하기 위해 정의된 값을 양자화 파라미터라고 정의한다.
시퀀스 단위 또는 블록 단위로 기 정의된 양자화 파라미터를 적용할 수 있다. 통상적으로 1에서 63 사이의 값으로 양자화 파라미터를 정의할 수 있다.
변환 및 양자화를 수행한 후에, 역양자화 및 역변환을 수행하여 잔차 복원 영상을 생성 할 수 있다. 잔차 복원 영상에 예측 영상을 더해서 제 1 복원 영상을 생성할 수 있다.
현재 블록의 변환 타입을 나타내는 인덱스 정보 'tu_mts_idx'를 비트스트림을 통해 시그날링할 수 있다. tu_mts_idx는 수직 방향 변환 타입 및 수평 방향 변환 변환 타입의 조합 예를 나타내는 복수의 변환 타입 후보 중 하나를 가리킬 수 있다. tu_mts_idx에 의해 특정되는 변환 타입 후보에 기초하여, 수직 방향 변환 및 수평 방향 변환의 스킵 여부, 및 수직 방향 변환 코어 및 수평 방향 변환 코어가 결정될 수 있다. 변환 코어는, DCT2, DCT8, 또는 DST7 중 적어도 하나를 포함할 수 있다. 표 5와 같이 tu_mts_idx 별로 transform type 후보를 설정할 수 있다. 구체적으로 예를 들어, 표 6과 같이 tu_mts_idx가 0이면, 수평 방향 변환과 수직 방향 변환 모두 DCT-II를 적용할 수 있으며, tu_mts_idx가 2이면 수평 방향 변환에 DCT-VIII를 적용하고, 수직 방향 변환에 DST-VII을 적용할 수 있다.
표 6
서브 파티션 부호화 방법을 사용하는 경우 각 서브 파티션 별로 서로 다른 변환 코어 세트를 사용할 수도 있고, 코딩 유닛 단위로 서로 같은 변환 코어 세트를 사용하도록 설정할 수도 있다. 이 때, 첫번째 서브 파티션에서만 tu_mts_idx를 비트스트림을 통해 시그날링할 수 있다.
구체적으로 예를 들어, 그림 42의 좌측 그림과 같이 코딩 유닛 내에 있는 모든 서브 파티션에서 수평 방향 변환 코어로 DST7을 사용하고, 수직 방향 변환 코어로 DCT8을 사용할 수도 있다. 또 다른 예를 들어, 그림 42의 우측 그림과 같이 코딩 유닛 내에 있는 모든 서브 파티션에서 수평 방향 변환 코어로 DCT8을 사용하고, 수직 방향 변환 코어로 DST8을 사용할 수도 있다.
그림 32
5
인루프 필터링 (In-loop filtering)
인루프 필터링(In-loop filtering)은 양자화 및 부호화 과정에서 발생하는 정보의 손실을 줄이기 위해 복호화 된 영상에 적응적으로 필터링을 수행하는 기술이다. 디블록킹 필터(Deblocking filter), 샘플 적응적 오프셋 필터(sample adaptive offset filter, SAO), 적응적 루프 필터(adaptive loop filter, ALF)는 인루프 필터링의 한 예이다.
제 1 복원 영상에 디블록킹 필터 , 샘플 적응적 오프셋(Sample Adaptive Offset, SAO) 또는 적응적 루프 필터(adaptive loop filter, ALF) 중 적어도 어느 하나를 수행하여 제 2 복원 영상을 생성할 수 있다.
복원 영상에 디블록킹 필터를 적용한 후, SAO 및 ALF를 적용할 수 있다.
비디오 부호화 과정에서 블록 단위로 변환과 양자화를 수행한다. 양자화 과정에서 발생한 손실이 발생하고, 이를 복원한 영상의 경계에서는 불연속이 발생한다. 블록 경계에 나타난 불연속 영상을 블록 화질 열화(blocking artifact)라고 정의 한다.
Deblocking filter는 제 1 영상의 블록 경계에서 발생하는 블록 화질 열화(blocking artifact)를 완화시키고, 부호화 성능을 높여주는 방법이다.
그림 43
블록 경계에서 필터링을 수행하여 블록 화질 열화를 완화 시킬수 있으며, 그림 43과 같이 블록이 인트라 예측 모드로 부호화 되었는지 여부, 또는 이웃한 블록의 모션 벡터 절대값의 차이가 기 정의된 소정의 문턱값 보다 큰지 여부, 이웃한 블록의 참조 픽쳐가 서로 동일한 지 여부 중 적어도 어느 하나에 기초하여 블록 필터 강도 (blocking strength, 이하 BS) 값을 결정할 수 있다. BS 값이 0이면 필터링을 수행하지 않으며, BS 값이 1 또는 2인 경우에 블록 경계에서 필터링을 수행할 수 있다.
변환 계수에 양자화를 수행하므로 주파수 영역에서 양자화를 수행하기 때문에, 물체 가장 자리에 링이 현상 (ringing artifact)를 발생시키거나, 화소 값이 원본에 비해 일정한 값만큼 커지거나 작아기게 된다. SAO는 제 1 복원 영상의 패턴을 고려하여 블록 단위로 특정 오프셋을 더하거나 빼는 방법으로 링잉 현상을 효과적으로 줄일 수 있다. SAO는 복원 영상의 특징에 따라 에지 오프셋(Edge offset, 이하 EO)과 밴드 오프셋(Band offset, BO)으로 구성된다. 에지 오프셋은 주변 화소 샘플 패턴에 따라 현재 샘플에 오프셋을 다르게 더해주는 방법이다. 밴드 오프셋은 영역 안의 비슷한 화소 밝기 값을 가진 화소 집합에 대해 일정 값을 더해 부호화 오류를 줄이는 것이다. 화소 밝기를 32개의 균일한 밴드로 나눠 비슷한 밝기 값을 가지는 화소를 하나의 집합이 되도록 할 수 있다. 예를 들어, 인접한 4개의 밴드를 하나의 범주로 묶을 수 있다. 하나의 범주에서는 동일한 오프셋 값을 사용하도록 설정할 수 있다.
ALF (Adaptive Loop Filter)는 식 (25)와 같이 제 1 복원 영상 또는 제 1 복원 영상에 deblocking filtering을 수행한 복원 영상에 기 정의된 필터 중 어느 하나를 사용하여 제 2 복원 영상을 생성하는 방법이다.
그림 44
이 때 필터는 픽쳐 단위 또는 CTU 단위로 선택할 수 있다.
Luma 성분에서는 다음 그림 44와 같이 5x5, 7x7 또는 9x9 다이아몬드 형태 중 어느 하나를 선택할 수 있다. Chroma 성분에서는 5x5 다이아몬드 형태만 사용할 수 있도록 제한할 수도 있다.
5
비디오 부호화 구조
그림 45
그림 45는 비디오 부호화 구조를 나타내는 다이아그램이다. 입력 비디오 신호는 Rate distortion 값이 가장 작은 소정의 코딩 유닛으로 나눌수 있다. 코딩 유닛 별로 인터 예측 또는 인트라 예측 또는 복합 예측 중 적어도 어느 하나를 수행하여 예측 영상을 생성할 수 있다. 부호화 단계에서 인터 예측을 수행하기 위해서는 움직임 추정 (Motion estimaition)을 수행할 수도 있다. 원본 영상에서 예측 영상을 차분하여 잔차 영상을 생성할 수 있다.
잔차 영상을 제 1 변환 및/또는 제 2 변환을 수행하여 변환 계수를 생성하거나 변환 스킵을 수행하여 변환 스킵 계수를 생성할 수 있다. 변환 계수 또는 변환 스킵 계수에 양자화를 수행하여 양자화된 변환 계수 내지 양자화된 변환 스킵 계수를 생성할 수 있다.
양자화된 변환 계수 내지 양자화된 변환 스킵 계수를 역양자화 및 역 변환을 수행하여 복원 영상을 생성할 수 있다. 이 복원 영상에 인루프 필터링을 수행하여 필터링 복원 영상을 생성할 수 있다. 이 필터링 복원 영상이 인코딩 단계에서 최종 아웃풋 (output) 영상이 된다. 필터링 복원 영상은 참조 픽쳐 버퍼 (Decoded picture buffer)로 저장되어 다른 픽쳐에서 참조 픽쳐로 사용할 수 있다.
6
타일을 이용한 비디오 부호화 방법
파노라믹 비디오나 360도 비디오 내지 4K/8K UHD(Ultra High Definition)과 같은 실감 미디어 어플리케이션에서는 고해상도 영상을 사용한다. 고해상도 영상을 실시간 내지 저지연 부호화를 위해서 병렬화가 필요하다. 타일을 이용하여 픽쳐의 일정 영역을 서로 독립적으로 부호화 및/또는 복호화 할 수 있다.
타일내에 있는 블록은 다른 타일에 있는 데이터를 참조하거나, 참조 샘플로 사용하여 영상을 부호화/복호화 하지 않도록 설정할 수 있다. 예를 들어, 다른 타일에 있는 데이터를 인트라 예측에서 참조 샘플로 사용하지 않거나, 다른 타일에 있는 데이터를 움직임 벡터 유도를 위한 후보(예컨대, 머지 후보, AMVP 후보 또는 HVMP 후보)로 사용하지 않거나 또는 다른 타일에 있는 데이터를 심볼의 컨텍스트 계산에 사용하지 않도록 설정할 수 있다.
각 타일 단위로 CABAC(Context adaptive Binary Arithmetric Coding) 컨텍스트의 확률 테이블을 초기화 할 수 있다. 타일 바운더리 (이웃한 두 타일의 경계 부분)에서 loop filter를 사용하지 않도록 설정할 수 있다. 또는, 타일 바운더리에서 loop filter 사용 여부를 나타내는 정보가 부호화될 수 있다.
그림 50
움직임 벡터 유도를 위한 후보(예컨대, 머지 후보, AMVP 후보 또는 HVMP 후보)로 사용하지 않거나 또는 다른 타일에 있는 데이터를 심볼의 컨텍스트 계산에 사용하지 않도록 설정할 수 있다.
각 타일 단위로 CABAC(Context adaptive Binary Arithmetric Coding) 컨텍스트의 확률 테이블을 초기화 할 수 있다. 타일 바운더리 (이웃한 두 타일의 경계 부분)에서 loop filter를 사용하지 않도록 설정할 수 있다. 또는, 타일 바운더리에서 loop filter 사용 여부를 나타내는 정보가 부호화될 수 있다.
그림 50
픽쳐는 하나 또는 적어도 하나 이상의 슬라이스로 구성될 수 있다. 슬라이스는 raster-scan 슬라이스(raster-scan slice) 또는 같이 사각 형태 슬라이스(rectangular slice)일 수 있다. 래스터 스캔 슬라이스는 래스터 스캔 순서를 따를 때 하나 이상의 연속된 타일(들)의 그룹으로 정의된다. 그림 50의 왼쪽 그림은 래스터 스캔 슬라이스를 나타낸 것이다. 래스터 스캔 슬라이스는 비사각형 형태를 띨 수 있다. 사각 형태 슬라이스는 직사각형 형태를 띄는 타일 그룹으로 정의된다. 그림 50의 오른쪽 그림은 사각 형태 슬라이스를 나타낸 것이다.
슬라이스의 경계는 픽처 바운더리 및/또는 타일 경계와 일치할 수 있다. 일 예로, 슬라이스의 경계가 좌측 바운더리 및 상측 바운더리가 픽쳐 바운더리에 위치하도록 설정하거나, 슬라이스의 경계가 이미 복호화된 타일의 경계에 위치하도록 설정할 수 있다.
슬라이스는 하나 또는 복수개의 타일로 구성될 수 있다.
타일은 직사각형(rectangular) 형태를 가질 수 있다. 또는, 비직사각형 형태의 타일을 허용할 수 있다. 비직사각형 형태의 타일이 존재하는지 여부를 나타내는 정보가 부호화될 수 있다. 타일의 경계는 픽처 바운더리 및/또는 CTU 경계와 일치할 수 있다.
픽처에 복수의 타일이 존재하는지 여부를 나타내는 정보가 비트스트림을 통해 시그날링될 수 있다. 픽처에 복수의 타일이 존재하는 경우, 그림 51과 같이 좌측 또는 우측으로 인접한 타일들의 높이는 서로 같도록 구성(이하, 가로 방향 타일 세트/tile row)할 수도 있고, 위쪽 또는 아래쪽으로 인접한 타일들의 너비가 같도록 구성(이하, 세로 방향 타일 세트/tile column)할 수도 있다. 이전 타일과 높이가 같은지 여부를 나타내는 정보 또는 이전 타일과 너비가 같은지 여부를 나타내는 정보가 비트스트림을 통해 시그날링될 수 있다.
또는, 픽쳐 내에서 픽쳐 바운더리에 인접한 타일들 제외한 모든 타일들이 모두 동일한 크기를 갖도록 제한할 수도 있다. 비트스트림을 통해 타일들의 크기가 균일한지 여부를 나타내는 정보가 비트스트림을 통해 시그날링될 수 있다.
그림 51
표 7
픽쳐 파라미터 세트, 시퀀스 파라미터 세트 또는 슬라이스 헤더를 통해 픽쳐 내 세로 방향 타일 세트의 개수를 나타내는 정보를 시그날링할 수 있다. 일 예로, 상기 정보는 표 7에 나타난 신택스 num_tile_columns_minus1일 수 있다. 그림 51의 예시에서는 세로 방향 타일 세트의 개수는 4이며, 이를 나타내는 신택스 num_tile_columns_minus1 값은 3으로 설정할 수 있다. i번째 세로 방향 타일 세트의 너비를 나타 내는 신택스 column_width_minus1[i]을 시그날링할 수 있다.
픽쳐 파라미터 세트, 시퀀스 파라미터 세트 또는 슬라이스 헤더를 통해 픽쳐 내 가로 방향 타일 세트의 개수를 나타내는 정보를 시그날링할 수 있다. 몇 개인지를일 예로, 상기 정보는 표 7에 나타난 신택스 num_tile_rows_minus1일 수 있다. 그림 51의 예시에서는 가로 방향 타일 세트의 개수는 3이며, 이를 나타내는 신택스 num_tile_rows_minus1 값은 2으로 설정할 수 있다. i번째 가로 방향 타일 세트의 높이를 나타내는 신택스 row_height_minus1[i] 을 시그날링할 수 있다.
픽쳐 파라미터 세트, 시퀀스 파라미터 세트 또는 슬라이스 헤더를 통해 타일들이 동일 크기를 갖는지 여부를 나타내는 정보를 시그날링할 수 있다. 일 예로, 상기 정보는 표 7에 나타난 동일 크기 타일 플래그 uniform_tile_spacing_flag일 수 있다. uniform_tile_spacing_flag 값이 1이면 픽쳐 내에 있는 각 타일의 너비가 균등하게 나누어 져 있으며, 상기 타일들의 높이도 균등하게 나누어져 있음을 나타낸다.
uniform_tile_spacing_flag 값이 1이면, 타일의 기본 너비를 나타내는 신택스 tile_cols_width_minus1 및 타일의 기본 높이를 나타내는 신택스 tile_rows_height_minus1을 시그날링할 수 있다. 현재 픽처 내 우측/하단 경계에 인접한 타일들 제외한 타일들은 상기 기본 너비 및 상기 기본 높이를 가질 수 있다.
일 예로, uniform_tile_spacing_flag이 1이면, 픽쳐 바운더리에 인접한 타일 이외의 타일의 너비가 (tile_cols_width_minus1+1)*CtbSizeWidth로 설정되고, 높이가 (tile_rows_hieight_minus1+1)*CtbSizeHeight로 설정될 수 있다.
픽쳐 바운더리에 있는 타일의 높이 (tile_rows_height_minus1+1)*CtbSizeHeight 이하이고, 너비는 (tile_cols_width_minus1+1)*CtbSizeWidth이하일 수 있다.
uniform_tile_spacing_flag 값이 0인 경우, 타일의 너비를 나타내는 정보및 타일의 높이를 나타내는 정보를 타일별로 부호화될 수 있다. 일 예로, 타일의 너비를 나타내는 신택스 tile_column_width_minus1[i]와 타일의 높이를 나타내는 신택스 tile_row_height_minus1[i]를 시그날링할 수 있다.
일 예로, tile_column_width_minus1[i]는 i번째 타일의 너비를 나타내고, tile_row_height_minus1[i]는 i번째 타일의 높이를 나타낸다.
그림 52
타일은 하나 또는 하나 이상의 브릭으로 구성할 수도 있다. 브릭은 병렬 처리의 단위일 수 있다. 브릭들은 서로 독립적으로 부호화/복호화될 수 있다. 브릭 내 블록의 부호화/복호화시 타 브릭의 데이터를 참조 하지 않도록 설정할 수 있다. 예를 들어, 브릭 내 블록을 부호화/복호화함에 있어서 타 브릭에 있는 데이터를 인트라 예측을 위한 참조 샘플로 사용하지 않도록 설정하거나, 타 브릭에 있는 데이터를 움직임 벡터 유도를 위한 후보(예컨대, 머지 후보, AMVP 후보 또는 HVMP 후보)로 사용하지 않도록 설정하거나, 타 브릭에 있는 데이터를 심볼의 컨텍스트 계산에 사용하지 않도록 설정할 수 있다.
또는, 브릭 간 병렬 처리가 요구되는지 여부를 나타내는 정보가 부호화될 수 있다. 상기 정보에 따라, 브릭에 포함된 블록의 부호화/복호화시 타 브릭에 포함된 데이터의 이용 가능성이 결정될 수 있다.
브릭은 타일을 수평방향 분할함으로써 생성될 수 있다. 그림 52는 최우측열에 위치한 타일들이 복수의 브릭으로 분할된 예를 나타낸다. 의 오른쪽 그림과 같이 raster scan 순서를 따라 타일들을 스캔할 때, 복수 브릭을 포함하는 타일에 대해서는, 타일 내 브릭을 모두 스캔한 후에 다음 타일을 스캔할 수 있다. 또한, 타일 스캔시, 그림 52의 왼쪽 그림과 같이 타일 내 CTB를 raster scan 순서에 따라 스캔한 후에 타일 스캔 순서에 따라 다음 타일 내 CTB를 스캔할 수 있다. 브릭의 경계는 CTU의 경계와 일치할 수 있다. 즉, 하나 이상의 CTU 행을 하나의 브릭으로 정의할 수 있다.
표 8
타일이 브릭으로 분할되는지 여부를 나타내는 정보, 타일 내 브릭의 개수를 나타내는 정보, 픽처 내 복수 브릭들로 분할되는 타일이 존재하는지 여부를 나타내는 정보 또는 브릭의 크기를 나타내는 정보 중 적어도 하나가 부호화될 수 있다. 일 예로, 표 8과 같이 적어도 하나 이상의 타일이 두개 이상의 브릭으로 나눌수 있음을 나타내는 플래그 brick_spliitng_present_flag을 비트스트림을 통해 시그날링할 수 있다.
brick_splitting_present_flag 값이 1이면, 적어도 하나 이상의 타일이 두개 이상의 브릭으로 분할됨을 나타내고, brick_splitting_present_flag 값이 0이면, 픽쳐 내 또는 PPS를 참조하는 픽쳐들에서 두개 이상의 브릭으로 분할 되는 타일이 존재하지 않음을 나타낸다.
표 8과 같이 타일 아이디가 i인 타일이 두개 이상의 브릭으로 나눌수 있는지를 나타내는 플래그 brick_split_flag[i]를 비트스트림을 통해 시그날링할 수 있다.
brick_split_flag[i] 값이 1이면, 타일 아이디가 i인 타일이 두개 이상의 브릭으로 분할 됨을 나타내고, brick_split_flag[i] 값이 0이면, 타일 아이디가 i인 타일이 두개 이상의 브릭으로 분할 되지 않음을 나타낸다.
표 8과 같이 타일 아이디가 i인 타일에 대한 brick_split_flag[i]가 1이면(즉, 두 개 이상의 브릭으로 나누어지는 타일인 경우), 타일 내 각 브릭들이 균등하게 분할되는지 여부를 나타내는 신택스 uniform_brick_spacing_flag가 통해 시그날링 할 수 있다. 상기 신택스 uniform_brick_spacing_flag는 타일내 브릭들의 높이가 균등한지 여부를 나타낸다.
uniform_brick_spacing_flag 값이 1이면 타일 내 브릭의 높이가 균등하게 나누어 져 있음을 나타낸다.
uniform_brick_spacing_flag 값이 1이면, 브릭의 기본 높이를 나타내는 신택스 brick_height_minus1을 시그날링할 수 있다. 타일 내 브릭들은 기본 높이를 가질 수 있다.
uniform_brick_spacing_flag이 1이면, 픽쳐 바운더리에 인접하는 브릭을 제외하고, 타일을 높이가 (brick_height_minus1+1)*CtbSizeHeight인 브릭들로 분할할 수 있다.
uniform_brick_spacing_flag 값이 0이면, i번째 타일 내 브릭의 개수를 나타내는 신택스 num_brick_rows_minusu1[i]과 i번째 타일 내 j번째 브릭의 높이를 나타내는 신택스 brick_row_height_minus1[i][j]를 시그날링할 수 있다.
신택스 brick_row_height_minus1[i]는 브릭의 개수 또는 브릭의 개수보다1을 차감한 수 만큼 시그날링할 수 있다. 일 예로, 타일 내 마지막 브릭은 타일의 높이에서 이전 브릭들의 높이값을 모두 더한 값을 차분하여 유도할 수 있다.
타일 및 브릭은 브릭 인덱스에 의해 식별될 수 있다. 브릭들로 포함되지 않는 타일은 하나의 브릭인 것으로 간주하여 브릭 인덱스가 할당될 수 있다. 일 예로, 래스터 스캔 순서에 따라, 타일 및 브릭에 브릭 인덱스가 할당될 수 있다.
브릭의 높이를 나타내는 신택스 brick_height_minus1[ i ]+1 또는brick_row_hegiht_minus1+1은 브릭 인덱스 i를 포함하는 타일의 높이 (타일 내에 있는 세로 방향 CTB의 개수, 이하, rowHeight)보다 작게 설정할 수 있다.
구체적으로 예를 들어, brick_height_minus1[i] 내지 brick_row_height_minus1은 0 내지 rowHeight-2 사이의 값을 가지도록 설정할 수 있다.
표 8과 같이 각 슬라이스가 하나의 브릭으로 구성되었는지를 나타내는 플래그 single_brick_per_slice_flag를 비트스트림을 통해 시그날링할 수 있다.
single_brick_per_slice_flag이 1이면, PPS를 참조하는 각 슬라이스가 모두 하나의 브릭으로 구성되어있음을 나타내고, single_brick_per_slice_flag이 0이면, PPS를 참조하는 각 슬라이스 중 적어도 하나는 두 개 이상의 브릭으로 구성되어 있음을 나타낸다.
슬라이스 타입을 나타내는 정보가 비트스트림을 통해 시그날링될 수 있다.상기 정보는 슬라이스가 래스터 스캔 타입인지 또는 사각 형태 타입인지 여부를 나타낸다. 일 예로, 표 8과 같이 사각 형태 슬라이스(rectangular slice)를 사용하는지를 나타내는 신택스 rect_slice_flag을 비트스트림을 통해 시그날링할 수도 있다.
rect_slice_flag이 1이면, rectangular slice를 사용함을 나타내고,rect_slice_flag이 0이면, raster-scan slice를 사용함을 나타낸다.
그림 53
rectangular slice를 사용하는 경우, 브릭 인덱스를 이용하여 슬라이스 영역을 정의할 수 있다. 구체적으로, 슬라이스 내 첫번째 브릭과 슬라이스 내 마지막 브릭을 특정하기 위한 정보를 결정할 수 있다. 여기서, 브릭의 순서는 스캔 순서에 의해 결정된다. 일 예로, 래스터 스캔을 따를 경우, 슬라이스 내 첫번째 브릭은 좌상단 브릭을 나타내고, 마지막 브릭은 우하단 브릭을 나타낸다.
그림 53과 같이 i번 째 슬라이스의 좌상단 브릭의 브릭 인덱스를 나타내는 신택스 top_left_brick_idx를 비트스트림을 통해 시그날링할 수 있다.
rectangular slice를 사용하면, 그림 53과 같이 i번 째 슬라이스의 우하단 브릭의 브릭 인덱스를 나타내는 신택스 bottom_right_brick_idx_delta를 비트스트림을 통해 시그날링할 수 있다. i번 째 슬라이스의 우하단 브릭의 브릭 인덱스 bottom_right_brick_idx(i)는 식 (26)과 같이 bottom_right_brick_idx_delta[i]에 top_left_brick_idx[i]를 합산하여 유도할 수 있다.
bottom_right_brick_idx[i] = top_left_brick_idx[i] +bottom_right_brick_idx_delta[i]
(26)
또는, 마지막 브릭의 브릭 인덱스를 나타내는 신택스 bottom_right_brick_idx를 비트스트림을 통해 시그날링할 수 있다.
또는, 첫번째 브릭과 첫번째 브릭과 동일한 행에 포함된 최우측 브릭의 브릭 인덱스 차분을 나타내는 수평 인덱스 차분 정보, 또는 첫번째 브릭과 첫번째 브릭과 동일한 열에 포함된 최하단 브릭의 브릭 인덱스 차분을 나타내는 수직 인덱스 차분 정보 중 적어도 하나를 부호화할 수 있다. 일 예로, 픽처의 우측 경계 또는 하단 경계에 인접하는 슬라이스에서는, 상기 수평 인덱스 차분 정보 또는 수직 인덱스 차분 정보를 이용하여 슬라이스를 정의할 수 있다.
loop_filter_across_bricks_enabled_flag은 브릭 바운더리(이웃한 두 타일 내지 브릭의 경계 부분)에서 loop filter를 사용하지 않도록 설정하는지를 나타내는 플래그 이다.
표 9
brick_split_flag[i] 값이 1이면, 타일 아이디가 i인 타일이 두개 이상의 브릭으로 분할 됨을 나타낸다. 이에 따라, 타일 아이디가 i인 타일의 brick_split_flag가 1이면, 타일은 최소 2개의 브릭을 포함할 수 있다.
uniform_brick_spacing_flag 값이 0(uniform_brick_spacing_flag은 brick_split_flag 값이 1인 경우에 시그날링) 인 경우표 9와 같이 i번째 타일 내 브릭의 개수를 나타내는 신택스 num_brick_row_minus2[i]를 비트스트림을 통해 시그날링할 수 있다.
i번째 타일 내 브릭의 개수는 num_brick_row_minus2[i]+2로 설정할 수 있으며, num_brick_row_minus2[i]은 0 내지 rowHeight-2로 설정할 수 있다.
표 10
또는 표 10과 같이 i번 째 슬라이스의 좌상단 브릭의 브릭 인덱스를 나타내는 신택스 top_left_brick_idx_minus1[i]를 비트스트림을 통해 시그날링할 수 있다.
i번째 슬라이스(i가 0이 아닌 경우)에서는 좌상단 브릭의 브릭 인덱스가 항상 0 보다 큰 값을 갖는다. 이 경우 슬라이스의 좌상단 브릭의 브릭 인덱스에서 1을 차분한 값을 나타내는 신택스 top_left_brick_idx_minus1[i]를 비트스트림을 통해 시그날링할 수 있다. 이 때, 신택스 top_left_brick_idx_minus1[i]의 비트수는 Ceil(Log2(NumBricksInPic-1))로 설정할 수 있다.
NumBricksInPic는 픽쳐내 브릭의 수를 나타내며, 여기서 Ceil(a)는 a보다 크거나 같은 가장 작은 정수를 나타낸다.
i번째 슬라이스에서 슬라이스의 좌상단 브릭 인덱스는 top_left_brick_idx_minus1[i]+1 로 설정할 수도 있다.
다음과 같은 프로세스를 이용하여 각 브릭 별 슬라이스 아이디를 설정할 수 있다. BricksToSliceMap[ j ]는 브릭 인덱스 j의 슬라이스 아이디를 나타낸다.
표 11
슬라이스의 address는 슬라이스 인덱스가 커질 수록 증가하기 때문에 이전 슬라이스의 좌상단 브릭의 브릭 인덱스보다 현재 슬라이스의 좌상단 브릭의 브릭 인덱스가 항상 큰 값일 수 있다. 이에 따라, 현재 슬라이스의 좌상단 브릭의 브릭 인덱스에서 이전 슬라이스의 좌상단 브릭의 브릭 인덱스를 차분 한 값은 항상 0보다 큰 값이 될 수 있다.
rectangular slice를 사용하는 경우, 이전 슬라이스의 첫번째 브릭과 현재 슬라이스의 첫번째 브릭의 인덱스 값 차분값을 이용하여, 현재 슬라이스 내 첫번째 브릭을 특정할 수 있다. 일 예로, 표 11과 같이 i번 째 슬라이스의 좌상단 브릭의 브릭 인덱스를 특정하기 위한 신택스 top_left_brick_idx_delta[i]를 비트스트림을 통해 시그날링할 수 있다.
i번째 슬라이스의 좌상단 브릭의 브릭 인덱스 top_left_brick_idx(i)는 식 (27)과 같이 top_left_brick_idx_delta[i]에 i-1 번째 슬라이스의 TopLeftBrickIdx(i-1)을 합산하여 유도할 수 있다. 신택스 top_left_brick_idx_delta[i]의 최대 비트수는 Ceil(Log2( NumBricksInPic-TopLeftBrickIdx(i-1)))일 수 있다. 여기서 Ceil(a)는 a보다 크거나 같은 가장 작은 정수를 나타낸다.
TopLeftBrickIdx(i) = TopLeftBrickIdx(i-1) +top_left_brick_idx_delta[i]
(27)
첫번째 슬라이스(즉, i가 0인 슬라이스)의 TopLeftBrickIdx(0) 값은 0으로 설정할 수 있다. 두번째 슬라이스(즉, i가 1인 슬라이스)에서는 top_left_brick_idx_delta[i] 대신 top_left_brick_idx[i]를 부호화할 수도 있다.
i번 째 슬라이스의 우하단 브릭의 브릭 인덱스 botRightBkIdx(i)는 식 (28)과 같이 bottom_right_brick_idx_delta[i]에 i번 째 슬라이스의 좌하단 블릭의 브릭 인덱스 TopLeftBrickIdx(i)를 합산하여 유도할 수 있다.
botRightBkIdx(i) = TopLeftBrickIdx(i) + bottom_right_brick_idx_delta[i]
(28)
다음과 같은 프로세스를 이용하여 각 브릭 별 슬라이스 아이디를 설정할 수 있다. BricksToSliceMap[ j ]는 브릭 인덱스 j의 슬라이스 아이디를 나타낸다.
표 12
또는, rectangular slice를 사용하는 경우, 이전 슬라이스의 첫번째 브릭과 현재 슬라이스의 첫번째 브릭의 인덱스 값 차분값에 1을 차분한 값을 이용하여, 현재 슬라이스 내 첫번째 브릭을 특정할 수 있다. 일 예로, 표 12와 같이 i번 째 슬라이스의 좌상단 브릭의 브릭 인덱스를 특정하기 위한 신택스 top_left_brick_idx_delta_minus1[i]를 비트스트림을 통해 시그날링할 수 있다.
i번째 슬라이스의 좌상단 브릭의 브릭 인덱스 top_left_brick_idx(i)는 식 (29)와 같이 (top_left_brick_idx_delta_minus1[i]+1)에 i-1 번째 슬라이스의 TopLeftBrickIdx(i-1)을 합산하여 유도할 수 있다. 신택스 top_left_brick_idx_delta_minus1[i]의 최대 비트수는 Ceil( Log2( NumBricksInPic - TopLeftBrickIdx( i-1) -1) ) 일 수 있다. 여기서 Ceil(a)는 a보다 크거나 같은 가장 작은 정수를 나타낸다.
TopLeftBrickIdx(i) = TopLeftBrickIdx(i-1) +top_left_brick_idx_delta_minus1[i]+1
(29)
첫번째 슬라이스(즉, i가 0인 슬라이스)의 TopLeftBrickIdx(0) 값은 0으로 설정할 수 있다. 두번째 슬라이스(즉, i가 1인 슬라이스)에서는 top_left_brick_idx_delta_minus1[i] 대신 top_left_brick_idx_minus1[i]를 부호화할 수도 있다.
다음과 같은 프로세스를 이용하여 각 브릭 별 슬라이스 아이디를 설정할 수 있다. BricksToSliceMap[ j ]는 브릭 인덱스 j의 슬라이스 아이디를 나타낸다.
그림 54
그림 54와 같이 관심 영역(Viewport)에 따라 서로 다른 크기의 tile 파티셔닝을 생성할 수 있으며, 이를 viewport adaptive partitioning structure라고 한다.
일 예로, 그림 54의 viewport adaptive partitioning structure는 다음 그림 55와 같은 슬라이스, 타일 및 브릭으로 분할 될 수도 있다.
그림 55
그림 55와 같이 360 video를 렌더링 또는 부호화, 복호화할때, 세로 방향 타일 세트(tile column) 중 특정 세로 방향 타일 세트에서만 브릭을 사용하는 파티셔닝 구조가 널리 사용될 수 있다. 이에 따라, 세로 방향 타일 세트(tile column) 단위로 브릭을 사용할 지 여부를 나타내는 정보를 사용하여 픽쳐 파라미터 세트의 비트를 줄일 수 있다.
표 13
일 예로, 상기 정보는 표 13과 같이 j번째 세로 방향 타일 세트(tile column)에 속한 타일 중 적어도 하나가 복수개의 brick으로 구성되었는지를 나타내는 플래그 brick_column_split_present_flag[ j ]일 수 있다. j는 세로 방향 타일의 개수를 나타내는 정보 num_tile_columns_minus1 보다 작거나 같은 값을 가질 수 있다.
brick_column_split_present_flag[j]가 0이면, j번째 세로 방향 타일 세트 내에서는 어떠한 타일도 복수개의 brick으로 구성되지 않았음을 나타내고, brick_column_split_present_flag[j]가 1이면, j번째 세로 방향 타일 세트 내에서는 적어도 하나의 타일이 복수개의 brick으로 구성되었음을 나타낸다.
구체적으로 예를 들어, 그림 56과 같이 3번째 세로 방향 타일 세트 (3rd tile column)에서만 브릭을 사용하는 경우 brick_column_split_present_flag[3]을 1로 설정할 수 있다.
그림 56
타일들이 균등 분할되는지 여부와 관계없이, 세로방향 타일 세트 단위로 브릭을 사용할지 여부를 나타내는 정보가 부호화될 수 있다. 또는, 타일들이 균등 분할되지 않는 것으로 결정되는 경우에만, 세로 방향 타일 세트 단위로 브릭을 사용할 지 여부를 나타내는 정보가 부호화될 수 있다.
또는, 세로 방향 타일 세트 중 너비가 가장 작은 타일 세트에 대해서만 세로 방향 타일 세트 단위로 브릭을 사용할지 여부를 나타내는 정보가 부호화될 수 있다.
또는, 세로 방향 타일 세트 중 너비 또는 높이가 기 설정된 값 이하인 타일 세트에 대해서만 세로 방향 타일 세트 단위로 브릭을 사용할지 여부를 나타내는 정보가 부호화될 수 있다.
또는, 세로 방향 타일 세트 중 특정 위치의 타일 세트에 대해서만 세로 방향 타일 세트 단위로 브릭을 사용할지 여부를 나타내는 정보가 부호화될 수 있다. 일 예로, 상기 특징 위치는, 픽쳐의 우측 경계에 인접하는 것일 수 있다.
세로 방향 타일 세트에 포함된 타일들의 분할에 공통의 규칙이 적용되는 경우, 상기 공통의 규칙을 결정하기 위한 정보가 부호화될 수 있다. 공통의 규칙은, 브릭의 개수 또는 브릭의 높이를 나타낼 수 있다. 일 예로, 상기 정보가 세로 방향 타일 세트들이 2개의 브릭으로 분할됨을 나타내는 경우, 세로 방향 타일 세트에 포함된 모든 타일들이 2개의 브릭으로 분할될 수 있다. 또는, 상기 정보가 브릭의 높이가 brick_height임을 나타내는 경우, 세로 방향 타일 세트에 포함된 모든 타일들이 높이가 brick_height인 브릭들로 분할될 수 있다. 이때, 높이가 brick_row_height과 같거나 작은 타일은 더 이상 분할되지 않을 수 있다.
세로 방향 타일 세트 단위로 브릭을 사용할 것인지 여부를 나타내는 정보 대신, 가로 방향 타일 세트 단위로 브릭을 사용할 것인지 여부를 나타내는 정보를 부호화할 수도 있다.
일 예로, j번째 가로 방향 타일 세트(tile row)에 속한 타일 중 적어도 하나가 복수개의 brick으로 구성되었는지를 나타내는 플래그 brick_row_split_present_flag[ j ]를 부호화할 수 있다. j는 가로 방향 타일의 개수를 나타내는 정보 num_tile_rows_minus1 보다 작은 값을 가질 수 있다.
표 14
맨 마지막 세로 방향 타일 세트에서, 이전 세로 방향 타일 세트의 brick_column_split_present_flag 값이 모두 0인 경우, 표 14와 같이 맨 마지막 세로 방향 타일 세트의 brick_cloumn_split_presnt_flag[num_tile_columns_minus1+1] 값은 시그날링하지 않고, 인코더 및 디코더에서 그 값을 1로 유도할 수 있다.
표 15
single_brick_per_slice_flag 값이 1이면, PPS를 참조하는 각 슬라이스가 하나의 브릭으로 구성됨을 나타낸다. 즉, single_brick_per_slice_flag 값이 1이면, 복수 개의 브릭으로 구성되지 않음을 나타낸다.
따라서, 표 15와 같이 single_brick_per_slice_flag 값이 1이면, 복수 개의 브릭을 갖는지 나타내는 플래그 brick_splitting_present_flag을 비트스트림을 통해 시그날링하지 않을 수 있다. 이 때 brick_splitting_present_flag 값은 0으로 설정할 수 있다.
표 16
픽쳐내 슬라이스의 개수가 1인지를 나타내는 신택스 one_slice_in_pic_flag 을 시그날링할 수 있다. one_slice_in_pic_flag 값이 1이면, 픽쳐 내 슬라이스의 개수가 1임을 나타내고, one_slice_in_pic_flag 값이 0이면, 픽쳐 내 슬라이스의 개수가 2이상임을 나타낸다. one_slice_in_pic_flag의 값이 0이면, 픽처 내 슬라이스 개수를 나타내는 정보를 추가 시그날링할 수 있다.
표 16과 같이 one_slice_in_pic_flag 값이 1이면, 슬라이스의 좌상단 및 우하단 브릭 아이디를 나타내는 신택스 top_left_brick_idx 및/또는 bottom_right_brick_idx_delta를 시그날링 하지 않을 수 있다.
표 17
또는, 표 17과 같이 one_slice_in_pic_flag의 값에 따라, single_brick_per_slice_flag, rect_slice_flag의 시그날링 여부가 결정될 수 있다. 일 예로, one_slice_in_pic_flag의 값이 1인 경우, single_brick_per_slice_flag 및 rect_slice_flag는 시그날링되지 않을 수 있다.
num_slices_in_pic_minus2는 픽처 내 슬라이스의 개수를 나타낸다. 상기 num_slices_in_pic_minus2가 나타내는 값에 2를 더하여 픽처 내 슬라이스의 개수를 결정할 수 있다.
또는, 픽처 내 브릭의 전체 개수와 슬라이스 개수 사이의 차분값을 나타내는 정보를 부호화할 수 있다. 픽처 내 브릭의 전체 개수는 타일 행의 개수, 타일 열의 개수 및 각 타일에 대한 브릭 행의 개수를 기초로 유도될 수 있다. 일 예로, 브릭의 전체 개수는 (타일 행의 개수*타일 열의 개수)+(모든 타일들의 num_brick_rows_minus1의 합)으로 유도될 수 있다. 슬라이스는 적어도 하나의 브릭을 포함하므로, 슬라이스의 개수는 브릭의 개수와 같거나 작다. 이에 따라, 브릭의 전체 개수에서 슬라이스 개수를 차분한 값을 비트스트림을 통해 시그날링할 수 있다.
표 18
또는, 표 18와 같이 single_brick_per_slice_flag 값이 0인 경우에 한정하여 one_slice_in_pic_flag을 시그날링할 수도 있다. one_slice_in_pic_flag의 값에 따라, rect_slice_flag의 시그날링 여부가 결정될 수 있다. 일 예로, one_slice_in_pic_flag의 값이 1인 경우, rect_slice_flag는 시그날링되지 않을 수 있다.
one_slice_in_pic_flag 값이 1이고, single_brick_per_slice_flag 값이 1인 경우에 bottom_right_brick_idx_delta[ i ]를 시그날링할 수 있다.
Claims (1)
- 타일 및 슬라이스 정보 시그날링 부호화를 이용한 예측 부호화 방법
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190074679A KR20200145998A (ko) | 2019-06-23 | 2019-06-23 | 비디오 신호 처리 방법 및 장치 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190074679A KR20200145998A (ko) | 2019-06-23 | 2019-06-23 | 비디오 신호 처리 방법 및 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20200145998A true KR20200145998A (ko) | 2020-12-31 |
Family
ID=74087700
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190074679A KR20200145998A (ko) | 2019-06-23 | 2019-06-23 | 비디오 신호 처리 방법 및 장치 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR20200145998A (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11425376B2 (en) | 2019-08-23 | 2022-08-23 | Apple Inc. | Image signal encoding/decoding method and apparatus therefor |
-
2019
- 2019-06-23 KR KR1020190074679A patent/KR20200145998A/ko unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11425376B2 (en) | 2019-08-23 | 2022-08-23 | Apple Inc. | Image signal encoding/decoding method and apparatus therefor |
US11825086B2 (en) | 2019-08-23 | 2023-11-21 | Apple Inc. | Image signal encoding/decoding method and apparatus therefor |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20200115322A (ko) | 영상 부호화/복호화 방법 및 장치 | |
KR20200081328A (ko) | 영상 부/복호화 방법 및 장치 | |
KR20200145998A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200141696A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200107260A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200141896A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200141703A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20210000979A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200145250A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200145415A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20210008783A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200133538A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20210014042A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200124077A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200107697A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200109059A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200108613A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200113346A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20210040240A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20210046504A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20210034860A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20210042440A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20210035677A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20200107265A (ko) | 비디오 신호 처리 방법 및 장치 | |
KR20210030818A (ko) | 비디오 신호 처리 방법 및 장치 |