KR20210149759A - 적응적 모션 벡터 해상도를 이용한 비디오 신호 처리 방법 및 장치 - Google Patents

적응적 모션 벡터 해상도를 이용한 비디오 신호 처리 방법 및 장치 Download PDF

Info

Publication number
KR20210149759A
KR20210149759A KR1020217034935A KR20217034935A KR20210149759A KR 20210149759 A KR20210149759 A KR 20210149759A KR 1020217034935 A KR1020217034935 A KR 1020217034935A KR 20217034935 A KR20217034935 A KR 20217034935A KR 20210149759 A KR20210149759 A KR 20210149759A
Authority
KR
South Korea
Prior art keywords
flag
affine
motion vector
amvr
enabled
Prior art date
Application number
KR1020217034935A
Other languages
English (en)
Inventor
고건중
김동철
손주형
정재홍
곽진삼
Original Assignee
주식회사 윌러스표준기술연구소
(주)휴맥스
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 윌러스표준기술연구소, (주)휴맥스 filed Critical 주식회사 윌러스표준기술연구소
Publication of KR20210149759A publication Critical patent/KR20210149759A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • H04N19/517Processing of motion vectors by encoding
    • H04N19/52Processing of motion vectors by encoding by predictive encoding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods 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/103Selection of coding mode or of prediction mode
    • H04N19/11Selection of coding mode or of prediction mode among a plurality of spatial predictive coding modes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods 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/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods 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/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • H04N19/139Analysis of motion vectors, e.g. their magnitude, direction, variance or reliability
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods 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/17Methods 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/176Methods 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 block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/537Motion estimation other than block-based
    • H04N19/54Motion estimation other than block-based using feature points or meshes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods 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)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

본 개시는 비디오 신호의 처리 방법 및 장치에 관한 것으로, 보다 상세하게는 비트스트림으로부터 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 나타내는 AMVR(Adaptive Motion Vector Resolution) 가능 플래그(sps_amvr_enabled_flag)를 파싱하는 단계, 비트스트림으로부터 어파인 모션 보상이 사용될 수 있는지 여부를 나타내는 어파인 가능 플래그(sps_affine_enabled_flag)를 파싱하는 단계, 어파인 가능 플래그에 기초하여 어파인 모션 보상이 사용될 수 있는지 여부를 결정하는 단계, 어파인 모션 보상이 사용될 수 있는 경우, AMVR 가능 플래그에 기초하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 결정하는 단계, 및 적응적인 모션 벡터 차분 해상도가 사용되는 경우, 비트스트림으로부터 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타내는 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)를 파싱하는 단계를 포함하는 것을 특징으로 한다.

Description

적응적 모션 벡터 해상도를 이용한 비디오 신호 처리 방법 및 장치
본 개시는 비디오 신호의 처리 방법 및 장치에 관한 것으로, 보다 상세하게는 비디오 신호를 인코딩하거나 디코딩하는 비디오 신호 처리 방법 및 장치에 관한 것이다.
압축 부호화란 디지털화한 정보를 통신 회선을 통해 전송하거나, 저장 매체에 적합한 형태로 저장하기 위한 일련의 신호 처리 기술을 의미한다. 압축 부호화의 대상에는 음성, 영상, 문자 등의 대상이 존재하며, 특히 영상을 대상으로 압축 부호화를 수행하는 기술을 비디오 영상 압축이라고 일컫는다. 비디오 신호에 대한 압축 부호화는 공간적인 상관관계, 시간적인 상관관계, 확률적인 상관관계 등을 고려하여 잉여 정보를 제거함으로써 이루어진다. 그러나 최근의 다양한 미디어 및 데이터 전송 매체의 발전으로 인해, 더욱 고효율의 비디오 신호 처리 방법 및 장치가 요구되고 있다.
본 개시의 목적은 비디오 신호의 코딩 효율을 높이고자 함에 있다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법은 비트스트림으로부터 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 나타내는 AMVR(Adaptive Motion Vector Resolution) 가능 플래그(sps_amvr_enabled_flag)를 파싱하는 단계, 비트스트림으로부터 어파인 모션 보상이 사용될 수 있는지 여부를 나타내는 어파인 가능 플래그(sps_affine_enabled_flag)를 파싱하는 단계, 어파인 가능 플래그(sps_affine_enabled_flag)에 기초하여 어파인 모션 보상이 사용될 수 있는지 여부를 결정하는 단계, 어파인 모션 보상이 사용될 수 있는 경우, AMVR 가능 플래그(sps_amvr_enabled_flag)에 기초하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 결정하는 단계 및 적응적인 모션 벡터 차분 해상도가 사용되는 경우, 비트스트림으로부터 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타내는 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)를 파싱하는 단계를 포함하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법에 있어서, AMVR 가능 플래그(sps_amvr_enabled_flag), 어파인 가능 플래그(sps_affine_enabled_flag) 또는 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag) 중 하나는 Coding Tree Unit, 슬라이스(slice), 타일(tile), 타일 그룹(tile group), 영상(picture), 또는 시퀀스(sequence) 단위 중 하나로 시그날링 되는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법에 있어서, 어파인 모션 보상이 사용될 수 있고, 적응적인 모션 벡터 차분 해상도가 사용되지 않은 경우, 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)는 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 암시하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법에 있어서, 어파인 모션 보상이 사용될 수 없는 경우, 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)는 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 암시(infered)하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법은, AMVR 가능 플래그(sps_amvr_enabled_flag)가 적응적인 모션 벡터 차분 해상도의 사용을 나타내고, 비트스트림으로부터 획득된 인터 어파인 플래그(inter_affine_flag)가 현재 블락에 대해 어파인 모션 보상이 사용되지 않음을 나타내고, 현재 블락에 대한 복수의 모션 벡터 차분들 중 적어도 하나가 0이 아닌 경우, 비트스트림으로부터 모션 벡터 차분의 해상도(resolution)에 대한 정보를 파싱하는 단계 및 모션 벡터 차분의 해상도에 대한 정보에 기초하여 현재 블락에 대한 복수의 모션 벡터 차분을 수정하는 단계를 포함하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법은, 어파인 AMVR 가능 플래그가 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있음을 나타내고, 비트스트림으로부터 획득된 인터 어파인 플래그(inter_affine_flag)가 현재 블락에 대해 어파인 모션 보상의 사용을 나타내고, 현재 블락에 대한 복수의 컨트롤 포인트 모션 벡터 차분들 중 적어도 하나가 0이 아닌 경우, 비트스트림으로부터 모션 벡터 차분의 해상도(resolution)에 대한 정보를 파싱하는 단계 및 모션 벡터 차분의 해상도에 대한 정보에 기초하여 현재 블락에 대한 복수의 컨트롤 포인트 모션 벡터 차분을 수정하는 단계를 포함하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법은, 현재 블락에 대하여 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)를 획득하는 단계, 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 제 0 참조 픽쳐 리스트(list 0)만 사용하는 것이 아님을 나타내는 경우, 비트스트림으로부터 제 1 참조 픽쳐 리스트(list 1)의 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하는 단계, 모션 벡터 예측자 후보자들을 생성하는 단계, 모션 벡터 예측자 인덱스에 기초하여 모션 벡터 예측자 후보자들로부터 모션 벡터 예측자를 획득하는 단계 및 모션 벡터 예측자에 기초하여 현재 블락을 예측하는 단계를 포함하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법은 비트스트림으로부터, 제 1 참조 픽쳐 리스트에 대해 모션 벡터 차분 및 복수의 컨트롤 포인트 모션 벡터 차분들이 0으로 설정될지 여부를 나타내는 모션 벡터 차분 제로 플래그(mvd_l1_zero_flag)를 획득하는 단계를 더 포함하고, 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하는 단계는, 모션 벡터 차분 제로 플래그(mvd_l1_zero_flag)가 1이고, 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 제 0 참조 픽쳐 리스트 및 제 1 참조 픽쳐 리스트 모두를 사용하는 것을 나타내는지 여부에 관련 없이 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하는 단계를 포함하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법은 머지 모션 벡터 예측에 대한 후보들의 최대 개수에 관련된 제 1 정보(six_minus_max_num_merge_cand)를 비트스트림으로부터 시퀀스 단위로 파싱하는 단계, 제 1 정보에 기초하여 머지 후보의 최대 개수를 획득하는 단계, 인터 예측을 위해 블락을 파티셔닝 할 수 있는지 여부를 나타내는 제 2 정보를 비트스트림으로부터 파싱하는 단계 및 제 2 정보가 1을 나타내고, 머지 후보의 최대 개수가 2보다 큰 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수와 관련된 제 3 정보를 비트스트림으로부터 파싱하는 단계를 포함하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법은 제 2 정보가 1을 나타내고, 머지 후보의 최대 개수가 3보다 크거나 같은 경우, 머지 후보의 최대 개수에서 제 3 정보를 차감하여 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 획득하는 단계, 제 2 정보가 1을 나타내고, 머지 후보의 최대 개수가 2인 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 2로 설정하는 단계 및 제 2 정보가 0이거나, 머지 후보의 최대 개수가 1인 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 0으로 설정하는 단계를 더 포함하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치는 비디오 신호를 처리하는 장치는 프로세서 및 메모리를 포함하고, 프로세서는 메모리에 저장된 명령어에 기초하여, 비트스트림으로부터 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 나타내는 AMVR(Adaptive Motion Vector Resolution) 가능 플래그(sps_amvr_enabled_flag)를 파싱하고, 비트스트림으로부터 어파인 모션 보상이 사용될 수 있는지 여부를 나타내는 어파인 가능 플래그(sps_affine_enabled_flag)를 파싱하고, 어파인 가능 플래그(sps_affine_enabled_flag)에 기초하여 어파인 모션 보상이 사용될 수 있는지 여부를 결정하고, 어파인 모션 보상이 사용될 수 있는 경우, AMVR 가능 플래그(sps_amvr_enabled_flag)에 기초하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 결정하고, 적응적인 모션 벡터 차분 해상도가 사용되는 경우, 비트스트림으로부터 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타내는 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)를 파싱하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치에 있어서, AMVR 가능 플래그(sps_amvr_enabled_flag), 어파인 가능 플래그(sps_affine_enabled_flag) 또는 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag) 중 하나는 Coding Tree Unit, 슬라이스(slice), 타일(tile), 타일 그룹(tile group), 영상(picture), 또는 시퀀스(sequence) 단위 중 하나로 시그날링 되는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치에 있어서, 어파인 모션 보상이 사용될 수 있고, 적응적인 모션 벡터 차분 해상도가 사용되지 않은 경우, 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)는 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 암시하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치에 있어서, 어파인 모션 보상이 사용될 수 없는 경우, 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)는 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 암시(infered)하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치에 있어서, 프로세서는 메모리에 저장된 명령어에 기초하여, AMVR 가능 플래그(sps_amvr_enabled_flag)가 적응적인 모션 벡터 차분 해상도의 사용을 나타내고, 비트스트림으로부터 획득된 인터 어파인 플래그(inter_affine_flag)가 현재 블락에 대해 어파인 모션 보상이 사용되지 않음을 나타내고, 현재 블락에 대한 복수의 모션 벡터 차분들 중 적어도 하나가 0이 아닌 경우, 비트스트림으로부터 모션 벡터 차분의 해상도(resolution)에 대한 정보를 파싱하고; 모션 벡터 차분의 해상도에 대한 정보에 기초하여 현재 블락에 대한 복수의 모션 벡터 차분을 수정하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치에 있어서, 프로세서는 메모리에 저장된 명령어에 기초하여, 어파인 AMVR 가능 플래그가 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있음을 나타내고, 비트스트림으로부터 획득된 인터 어파인 플래그(inter_affine_flag)가 현재 블락에 대해 어파인 모션 보상의 사용을 나타내고, 현재 블락에 대한 복수의 컨트롤 포인트 모션 벡터 차분들 중 적어도 하나가 0이 아닌 경우, 비트스트림으로부터 모션 벡터 차분의 해상도(resolution)에 대한 정보를 파싱하고, 모션 벡터 차분의 해상도에 대한 정보에 기초하여 현재 블락에 대한 복수의 컨트롤 포인트 모션 벡터 차분을 수정하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치에 있어서, 프로세서는 메모리에 저장된 명령어에 기초하여, 현재 블락에 대하여 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)를 획득하고, 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 제 0 참조 픽쳐 리스트(list 0)만 사용하는 것이 아님을 나타내는 경우, 비트스트림으로부터 제 1 참조 픽쳐 리스트(list 1)의 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하고, 모션 벡터 예측자 후보자들을 생성하고, 모션 벡터 예측자 인덱스에 기초하여 모션 벡터 예측자 후보자들로부터 모션 벡터 예측자를 획득하고, 모션 벡터 예측자에 기초하여 현재 블락을 예측하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치에 있어서, 프로세서는 메모리에 저장된 명령어에 기초하여, 비트스트림으로부터, 제 1 참조 픽쳐 리스트에 대해 모션 벡터 차분 및 복수의 컨트롤 포인트 모션 벡터 차분들이 0으로 설정될지 여부를 나타내는 모션 벡터 차분 제로 플래그(mvd_l1_zero_flag)를 획득하고; 모션 벡터 차분 제로 플래그(mvd_l1_zero_flag)가 1이고, 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 제 0 참조 픽쳐 리스트 및 제 1 참조 픽쳐 리스트 모두를 사용하는 것을 나타내는지 여부에 관련 없이 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치는 프로세서 및 메모리를 포함하고, 프로세서는 메모리에 저장된 명령어에 기초하여, 머지 모션 벡터 예측에 대한 후보들의 최대 개수에 관련된 제 1 정보(six_minus_max_num_merge_cand)를 비트스트림으로부터 시퀀스 단위로 파싱하고, 제 1 정보에 기초하여 머지 후보의 최대 개수를 획득하고, 인터 예측을 위해 블락을 파티셔닝 할 수 있는지 여부를 나타내는 제 2 정보를 비트스트림으로부터 파싱하고, 제 2 정보가 1을 나타내고, 머지 후보의 최대 개수가 2보다 큰 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수와 관련된 제 3 정보를 비트스트림으로부터 파싱하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 장치에 있어서, 프로세서는 메모리에 저장된 명령어에 기초하여, 제 2 정보가 1을 나타내고, 머지 후보의 최대 개수가 3보다 크거나 같은 경우, 머지 후보의 최대 개수에서 제 3 정보를 차감하여 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 획득하고, 제 2 정보가 1을 나타내고, 머지 후보의 최대 개수가 2인 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 2로 설정하고, 제 2 정보가 0이거나, 머지 후보의 최대 개수가 1인 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 0으로 설정하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법은, 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 나타내는 AMVR(Adaptive Motion Vector Resolution) 가능 플래그(sps_amvr_enabled_flag)를 생성하는 단계, 어파인 모션 보상이 사용될 수 있는지 여부를 나타내는 어파인 가능 플래그(sps_affine_enabled_flag)를 생성하는 단계, 어파인 가능 플래그(sps_affine_enabled_flag)에 기초하여 어파인 모션 보상이 사용될 수 있는지 여부를 결정하는 단계, 어파인 모션 보상이 사용될 수 있는 경우, AMVR 가능 플래그(sps_amvr_enabled_flag)에 기초하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 결정하는 단계, 적응적인 모션 벡터 차분 해상도가 사용되는 경우, 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타내는 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)를 생성하는 단계, 및 AMVR 가능 플래그(sps_amvr_enabled_flag), 어파인 가능 플래그(sps_affine_enabled_flag) 및 AMVR 가능 플래그(sps_amvr_enabled_flag)를 엔트로피 코딩하여 비트스트림을 생성하는 단계를 포함하는 것을 특징으로 한다.
본 개시의 일 실시예를 따른 비디오 신호를 처리하는 방법은, 머지 후보의 최대 개수에 기초하여 머지 모션 벡터 예측에 대한 후보들의 최대 개수에 관련된 제 1 정보(six_minus_max_num_merge_cand)를 생성하는 단계, 인터 예측을 위해 블락을 파티셔닝 할 수 있는지 여부를 나타내는 제 2 정보를 생성하는 단계, 제 2 정보가 1을 나타내고, 머지 후보의 최대 개수가 2보다 큰 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수와 관련된 제 3 정보를 생성하는 단계, 및 제 1 정보(six_minus_max_num_merge_cand), 제 2 정보 및 제 3 정보를 엔트로피 코딩하여 시퀀스 단위로 비트스트림으로 생성하는 단계를 포함하는 것을 특징으로 한다.
본 개시의 실시예에 따르면, 비디오 신호의 코딩 효율이 높아질 수 있다.
도 1은 본 개시의 실시예에 따른 비디오 신호 인코더 장치의 개략적인 블록도.
도 2는 본 개시의 실시예에 따른 비디오 신호 디코더 장치의 개략적인 블록도.
도 3은 코딩 유닛을 분할하는 본 개시의 일 실시예를 나타내는 도면.
도 4는 도 3의 분할 구조를 계층적으로 나타내는 방법의 일 실시예를 도시한 도면.
도 5는 코딩 유닛을 분할하는 본 개시의 추가적인 실시예를 나타낸 도면.
도 6은 화면내 예측을 위한 참조 픽셀 획득 방법을 나타낸 도면.
도 7은 화면내 예측에 사용되는 예측 모드들의 일 실시예를 도시한 도면.
도 8은 본 개시의 일 실시예에 따른 inter prediction을 나타낸 도면.
도 9는 본 개시의 일 실시예에 따른 모션 벡터 시그날링 방법을 나타낸 도면.
도 10은 본 개시의 일 실시예에 따른 motion vector difference syntax를 나타낸 도면.
도 11은 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면.
도 12는 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면.
도 13은 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면.
도 14는 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면.
도 15는 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면.
도 16은 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면.
도 17은 본 개시의 일 실시예에 따른 affine motion prediction을 나타낸 도면.
도 18은 본 개시의 일 실시예에 따른 affine motion prediction을 나타낸 도면.
도 19는 본 개시의 일 실시예에 따른 motion vector field를 나타낸 식.
도 20은 본 개시의 일 실시예에 따른 affine motion prediction을 나타낸 도면.
도 21은 본 개시의 일 실시예에 따른 motion vector field를 나타낸 식.
도 22는 본 개시의 일 실시예에 따른 affine motion prediction을 나타낸 도면.
도 23은 본 개시의 일 실시예에 따른 affine motion prediction의 한 모드를 나타낸 도면.
도 24는 본 개시의 일 실시예에 따른 affine motion prediction의 한 모드를 나타낸 도면.
도 25는 본 개시의 일 실시예에 따른 affine motion predictor derivation을 나타낸 도면.
도 26은 본 개시의 일 실시예에 따른 affine motion predictor derivation을 나타낸 도면.
도 27은 본 개시의 일 실시예에 따른 affine motion predictor derivation을 나타낸 도면.
도 28은 본 개시의 일 실시예에 따른 affine motion predictor derivation을 나타낸 도면.
도 29는 본 개시의 일 실시예에 따른 control point motion vector 생성 방법을 나타낸 도면.
도 30은 도 29에서 설명한 방법을 통한 motion vector difference 결정 방법을 나타낸 도면.
도 31은 본 개시의 일 실시예에 따른 control point motion vector 생성 방법을 나타낸 도면.
도 32는 도 31에서 설명한 방법을 통한 motion vector difference 결정 방법을 나타낸 도면.
도 33은 본 개시의 일 실시예에 따른 motion vector difference syntax를 나타낸 도면.
도 34는 본 개시의 일 실시예에 따른 상위 레벨 시그날링 구조를 나타낸 도면.
도 35는 본 개시의 일 실시예에 따른 coding unit syntax 구조를 나타낸 도면.
도 36은 본 개시의 일 실시예에 따른 상위 레벨 시그날링 구조를 나타낸 도면.
도 37은 본 개시의 일 실시예에 따른 상위 레벨 시그날링 구조를 나타낸 도면.
도 38은 본 개시의 일 실시예에 따른 coding unit syntax 구조를 나타낸 도면.
도 39는 본 개시의 일 실시예에 따른 MVD 기본값 설정을 나타낸 도면.
도 40은 본 개시의 일 실시예에 따른 MVD 기본값 설정을 나타낸 도면.
도 41은 본 개시의 일 실시예를 따른 AMVR 관련 syntax 구조를 나타낸 도면.
도 42는 본 개시의 일 실시예를 따른 inter prediction 관련 syntax 구조를 나타낸 도면.
도 43은 본 개시의 일 실시예를 따른 inter prediction 관련 syntax 구조를 나타낸 도면.
도 44는 본 개시의 일 실시예를 따른 inter prediction 관련 syntax 구조를 나타낸 도면.
도 45는 본 발명의 일 실시예에 따른 inter prediction 관련 syntax를 나타낸 도면.
도 46은 본 발명의 일 실시예를 따른 triangle partitioning mode를 나타낸 도면.
도 47은 본 발명의 일 실시예에 따른 merge data syntax를 나타낸 도면.
도 48은 본 발명의 일 실시예에 따른 상위 레벨 시그날링을 나타낸 도면.
도 49는 본 발명의 일 실시예에 따른 TPM에서 사용되는 candidate의 maximum number를 나타낸 도면.
도 50은 본 발명의 일 실시예에 따른 TPM에 관한 상위 레벨 시그날링을 나타낸 도면.
도 51은 본 발명의 일 실시예에 따른 TPM에서 사용되는 candidate의 maximum number를 나타낸 도면.
도 52는 본 발명의 일 실시예에 따른 TPM 관련 syntax element들을 나타낸 도면.
도 53은 본 발명의 일 실시예에 따른 TPM candidate index 시그날링을 나타낸 도면.
도 54는 본 발명의 일 실시예에 따른 TPM candidate index 시그날링을 나타낸 도면.
도 55는 본 발명의 일 실시예에 따른 TPM candidate index 시그날링을 나타낸 도면.
본 명세서에서 사용되는 용어는 본 발명에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어를 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도, 관례 또는 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한 특정 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 발명의 설명 부분에서 그 의미를 기재할 것이다. 따라서 본 명세서에서 사용되는 용어는, 단순한 용어의 명칭이 아닌 그 용어가 가진 실질적인 의미와 본 명세서의 전반에 걸친 내용을 토대로 해석되어야 함을 밝혀두고자 한다.
본 개시에서 다음 용어는 다음과 같은 기준으로 해석될 수 있고, 기재되지 않은 용어라도 하기 취지에 따라 해석될 수 있다. 코딩은 경우에 따라 인코딩 또는 디코딩으로 해석될 수 있고, 정보(information)는 값(values), 파라미터(parameter), 계수(coefficients), 성분(elements) 등을 모두 포함하는 용어로서, 경우에 따라 의미는 달리 해석될 수 있으므로 본 개시는 이에 한정되지 아니한다. '유닛'은 영상(픽쳐) 처리의 기본 단위 또는 픽쳐의 특정 위치를 지칭하는 의미로 사용되었으며, 경우에 따라서는 '블록', '파티션' 또는 '영역' 등의 용어와 서로 혼용하여 사용될 수 있다. 또한, 본 명세서에서 유닛은 코딩 유닛, 예측 유닛, 변환 유닛을 모두 포함하는 개념으로 사용될 수 있다.
도 1은 본 개시의 일 실시예에 따른 비디오 신호 인코딩 장치의 개략적인 블록도이다. 도 1을 참조하면, 본 개시의 인코딩 장치(100)는 크게 변환부(110), 양자화부(115), 역양자화부(120), 역변환부(125), 필터링부(130), 예측부(150) 및 엔트로피 코딩부(160)를 포함한다.
변환부(110)는 입력 받은 비디오 신호에 대한 화소값을 변환하여 변환 계수 값을 획득한다. 예를 들어, 이산 코사인 변환(Discrete Cosine Transform, DCT) 또는 웨이블릿 변환(Wavelet Transform) 등이 사용될 수 있다. 특히 이산 코사인 변환은 입력된 픽쳐 신호를 일정 크기의 블록 형태로 나누어 변환을 수행하게 된다. 변환에 있어서 변환 영역 내의 값들의 분포와 특성에 따라서 코딩 효율이 달라질 수 있다.
양자화부(115)는 변환부(110)에서 출력된 변환 계수 값을 양자화한다. 역양자화부(120)에서는 변환 계수 값을 역양자화하고, 역변환부(125)에서는 역양자화된 변환 계수값을 이용하여 원래의 화소값을 복원한다.
필터링부(130)는 복원된 픽쳐의 품질 개선을 위한 필터링 연산을 수행한다. 예를 들어, 디블록킹 필터 및 적응적 루프 필터 등이 포함될 수 있다. 필터링을 거친 픽쳐는 출력되거나 참조 픽쳐로 이용하기 위하여 복호 픽쳐 버퍼(Decoded Picture Buffer, 156)에 저장된다.
코딩 효율을 높이기 위하여 픽쳐 신호를 그대로 코딩하는 것이 아니라, 예측부(150)를 통해 이미 코딩된 영역을 이용하여 픽쳐를 예측하고, 예측된 픽쳐에 원 픽쳐와 예측 픽쳐 간의 레지듀얼 값을 더하여 복원 픽쳐를 획득하는 방법이 사용된다. 인트라 예측부(152)에서는 현재 픽쳐 내에서 화면내 예측을 수행하며, 인터 예측부(154)에서는 복호 픽쳐 버퍼(156)에 저장된 참조 픽쳐를 이용하여 현재 픽쳐를 예측한다. 인트라 예측부(152)는 현재 픽쳐 내의 복원된 영역들로부터 화면내 예측을 수행하여, 화면내 부호화 정보를 엔트로피 코딩부(160)에 전달한다. 인터 예측부(154)는 다시 모션 추정부(154a) 및 모션 보상부(154b)를 포함하여 구성될 수 있다. 모션 추정부(154a)에서는 복원된 특정 영역을 참조하여 현재 영역의 모션 벡터값을 획득한다. 모션 추정부(154a)에서는 참조 영역의 위치 정보(참조 프레임, 모션 벡터 등) 등을 엔트로피 코딩부(160)로 전달하여 비트스트림에 포함될 수 있도록 한다. 모션 추정부(154a)에서 전달된 모션 벡터값을 이용하여 모션 보상부(154b)에서는 화면간 모션 보상을 수행한다.
엔트로피 코딩부(160)는 양자화된 변환 계수, 화면간 부호화 정보, 화면내 부호화 정보 및 인터 예측부(154)로부터 입력된 참조 영역 정보 등을 엔트로피 코딩하여 비디오 신호 비트스트림을 생성한다. 여기서 엔트로피 코딩부(160)에서는 가변 길이 코딩(Variable Length Coding, VLC) 방식과 산술 코딩(arithmetic coding) 등이 사용될 수 있다. 가변 길이 코딩(VLC) 방식은 입력되는 심볼들을 연속적인 코드워드로 변환하는데, 코드워드의 길이는 가변적일 수 있다. 예를 들어, 자주 발생하는 심볼들을 짧은 코드워드로, 자주 발생하지 않은 심볼들은 긴 코드워드로 표현하는 것이다. 가변 길이 코딩 방식으로서 컨텍스트 기반 적응형 가변 길이 코딩(Context-based Adaptive Variable Length Coding, CAVLC) 방식이 사용될 수 있다. 산술 코딩은 연속적인 데이터 심볼들을 하나의 소수로 변환하는데, 산술 코딩은 각 심볼을 표현하기 위하여 필요한 최적의 소수 비트를 얻을 수 있다. 산술 코딩으로서 컨텍스트 기반 적응형 산술 부호화(Context-based Adaptive Binary Arithmetic Code, CABAC)가 이용될 수 있다.
상기 생성된 비트스트림은 NAL(Network Abstraction Layer) 유닛을 기본 단위로 캡슐화 되어 있다. NAL 유닛은 부호화된 슬라이스 세그먼트를 포함하는데, 상기 슬라이스 세그먼트는 정수 개의 코딩 트리 유닛(Coding Tree Unit)으로 이루어진다. 비디오 디코더에서 비트스트림을 디코딩하기 위해서는 먼저 비트스트림을 NAL 유닛 단위로 분리한 후, 분리 된 각각의 NAL 유닛을 디코딩해야 한다.
도 2는 본 개시의 일 실시예에 따른 비디오 신호 디코딩 장치(200)의 개략적인 블록도이다. 도 2를 참조하면 본 개시의 디코딩 장치(200)는 크게 엔트로피 디코딩부(210), 역양자화부(220), 역변환부(225), 필터링부(230), 예측부(250)를 포함한다.
엔트로피 디코딩부(210)는 비디오 신호 비트스트림을 엔트로피 디코딩하여, 각 영역에 대한 변환 계수, 모션 정보 등을 추출한다. 역양자화부(220)는 엔트로피 디코딩된 변환 계수를 역양자화하고, 역변환부(225)는 역양자화된 변환 계수를 이용하여 원래의 화소값을 복원한다.
한편, 필터링부(230)는 픽쳐에 대한 필터링을 수행하여 화질을 향상시킨다. 여기에는 블록 왜곡 현상을 감소시키기 위한 디블록킹 필터 및/또는 픽쳐 전체의 왜곡 제거를 위한 적응적 루프 필터 등이 포함될 수 있다. 필터링을 거친 픽쳐는 출력되거나 다음 프레임에 대한 참조 픽쳐로 이용하기 위하여 복호 픽쳐 버퍼(Decoded Picture Buffer, 256)에 저장된다.
또한, 본 개시의 예측부(250)는 인트라 예측부(252) 및 인터 예측부(254)를 포함하고, 전술한 엔트로피 디코딩부(210)를 통해 디코딩된 부호화 타입, 각 영역에 대한 변환 계수, 모션 정보 등을 활용하여 예측 픽쳐를 복원하게 된다.
이와 관련하여, 상기 인트라 예측부(252)에서는 현재 픽쳐 내의 디코딩된 샘플로부터 화면내 예측을 수행하게 된다. 인터 예측부(254)는 복호 픽쳐 버퍼(256)에 저장된 참조 픽쳐 및 모션 정보를 이용하여 예측 픽쳐를 생성한다. 인터 예측부(254)는 다시 모션 추정부(254a) 및 모션 보상부(254b)를 포함하여 구성될 수 있다. 모션 추정부(254a)에서는 현재 블록과 코딩에 사용하는 참조 픽쳐의 참조 블록간의 위치 관계를 나타내는 모션 벡터를 획득하여 모션 보상부(254b)로 전달한다.
상기 인트라 예측부(252) 또는 인터 예측부(254)로부터 출력된 예측값, 및 역변환부(225)로부터 출력된 화소값이 더해져서 복원된 비디오 프레임이 생성된다.
이하에서는, 상기 인코딩 장치(100)와 디코딩 장치(200)의 동작에 있어서, 도 3 내지 도 5를 참조하여 코딩 유닛 및 예측 유닛 등을 분할하는 방법을 설명하기로 한다.
코딩 유닛이란 상기에서 설명한 비디오 신호의 처리 과정에서, 예를 들어 화면내(intra)/화면간(inter) 예측, 변환(transform), 양자화(quantization) 및/또는 엔트로피 코딩(entropy coding) 등의 과정에서 픽쳐를 처리하기 위한 기본 단위를 의미한다. 하나의 픽쳐를 코딩하는 데 있어서 사용되는 코딩 유닛의 크기는 일정하지 않을 수 있다. 코딩 유닛은 사각형 형태를 가질 수 있고, 하나의 코딩 유닛은 다시 여러 개의 코딩 유닛으로 분할 가능하다.
도 3은 코딩 유닛을 분할하는 본 개시의 일 실시예를 나타낸다. 예를 들어, 2N X 2N 크기를 가지는 하나의 코딩 유닛은 다시 N X N 크기를 가지는 네 개의 코딩 유닛으로 분할될 수 있다. 이러한 코딩 유닛의 분할은 재귀적으로 이루어질 수 있으며, 모든 코딩 유닛들이 동일한 형태로 분할될 필요는 없다. 다만, 코딩 및 처리과정에서의 편의를 위하여 최대 코딩 유닛의 크기 및/또는 최소 코딩 유닛의 크기에 대한 제한이 있을 수 있다.
하나의 코딩 유닛에 대하여, 해당 코딩 유닛이 분할되는지 여부를 나타내는 정보를 저장할 수 있다. 도 4는 도 3에서 도시하는 코딩 유닛의 분할 구조를 플래그 값을 이용하여 계층적으로 나타내는 방법에 대한 일 실시예를 도시한 것이다. 코딩 유닛의 분할 여부를 나타내는 정보는 해당 유닛이 분할 된 경우 '1', 분할되지 않은 경우 '0'의 값으로 할당할 수 있다. 도 4에서 도시하듯이, 분할 여부를 나타내는 플래그 값이 1이면 해당 노드에 대응하는 코딩 유닛은 다시 4개의 코딩 유닛으로 나누어지고, 0이면 더 이상 나누어지지 않고 해당 코딩 유닛에 대한 처리 프로세스가 수행될 수 있다.
상기에서 설명한 코딩 유닛의 구조는 재귀적인 트리 구조를 이용하여 나타낼 수 있다. 즉, 하나의 픽쳐 또는 최대 크기 코딩 유닛을 루트(root)로 하여, 다른 코딩 유닛으로 분할되는 코딩 유닛은 분할된 코딩 유닛의 개수만큼의 자식(child) 노드를 가지게 된다. 따라서, 더 이상 분할되지 않는 코딩 유닛이 리프(leaf) 노드가 된다. 하나의 코딩 유닛에 대하여 정방형 분할만이 가능하다고 가정할 때, 하나의 코딩 유닛은 최대 4개의 다른 코딩 유닛으로 분할될 수 있으므로 코딩 유닛을 나타내는 트리는 쿼드 트리(Quad tree) 형태가 될 수 있다.
인코더에서는 비디오 픽쳐의 특성(예를 들어, 해상도)에 따라서 혹은 코딩의 효율을 고려하여 최적의 코딩 유닛의 크기가 선택되고 이에 대한 정보 또는 이를 유도할 수 있는 정보가 비트스트림에 포함될 수 있다. 예를 들면, 최대 코딩 유닛의 크기 및 트리의 최대 깊이가 정의될 수 있다. 정방형 분할을 할 경우, 코딩 유닛의 높이 및 너비는 부모 노드의 코딩 유닛의 높이 및 너비의 반이 되므로, 상기와 같은 정보를 이용하면 최소 코딩 유닛 크기를 구할 수 있다. 혹은 역으로, 최소 코딩 유닛 크기 및 트리의 최대 깊이를 미리 정의하여 이용하고, 이를 이용하여 최대 코딩 유닛의 크기를 유도하여 이용할 수 있다. 정방형 분할에서 유닛의 크기는 2의 배수 형태로 변화하기 때문에, 실제 코딩 유닛의 크기는 2를 밑으로 하는 로그값으로 나타내어 전송 효율을 높일 수 있다.
디코더에서는 현재 코딩 유닛이 분할되었는지 여부를 나타내는 정보를 획득할 수 있다. 이러한 정보는 특정 조건 하에만 획득하게(전송되게) 하면 효율을 높일 수 있다. 예를 들어 현재 코딩 유닛이 분할 가능한 조건은 현재 위치에서 현재 코딩 유닛 크기를 더한 것이 픽쳐의 크기보다 작고, 현재 유닛 크기가 기 설정된 최소 코딩 유닛 크기보다 큰 경우이므로, 이러한 경우에만 현재 코딩 유닛이 분할되었는지를 나타내는 정보를 획득할 수 있다.
만약 상기 정보가 코딩 유닛이 분할되었음을 나타내는 경우, 분할될 코딩 유닛의 크기는 현재 코딩 유닛의 반이 되고, 현재 처리 위치를 기준으로 하여 4개의 정방형 코딩 유닛들로 분할된다. 각 분할된 코딩 유닛들에 대해서 상기와 같은 처리를 반복할 수 있다.
도 5는 코딩 유닛을 분할하는 본 개시의 추가적인 실시예를 나타낸다. 본 개시의 추가적인 실시예에 따르면, 전술한 쿼드 트리 형태의 코딩 유닛은 수평 분할 또는 수직 분할의 바이너리 트리(binary tree) 구조로 더욱 분할될 수 있다. 즉, 루트 코딩 유닛에 대하여 정사각형의 쿼드 트리 분할이 먼저 적용되며, 쿼드 트리의 리프 노드에서 직사각형의 바이너리 트리 분할이 추가적으로 적용될 수 있다. 일 실시예에 따르면, 바이너리 트리 분할은 대칭적인 수평 분할 또는 대칭적인 수직 분할일 수 있으나, 본 개시는 이에 한정되지 않는다.
바이너리 트리의 각 분할 노드에서, 분할 형태(즉, 수평 분할 또는 수직 분할)를 지시하는 플래그가 추가적으로 시그널링 될 수 있다. 일 실시예에 따르면, 상기 플래그의 값이 '0'인 경우 수평 분할이 지시되고, 상기 플래그의 값이 '1'인 경우 수직 분할이 지시될 수 있다.
다만, 본 개시의 실시예에서 코딩 유닛의 분할 방법은 전술한 방법들로 한정되지 않으며, 비대칭적인 수평/수직 분할, 3개의 직사각형 코딩 유닛으로 분할되는 트리플 트리(triple tree) 등이 적용될 수도 있다.
코딩을 위한 픽쳐 예측(모션 보상)은 더 이상 나누어지지 않는 코딩 유닛(즉 코딩 유닛 트리의 리프 노드)을 대상으로 이루어진다. 이러한 예측을 수행하는 기본 단위를 이하에서는 예측 유닛(prediction unit) 또는 예측 블록(prediction block)이라고 한다.
이하, 본 명세서에서 사용되는 유닛 이라는 용어는 예측을 수행하는 기본 단위인 상기 예측 유닛을 대체하는 용어로 사용될 수 있다. 다만, 본 개시가 이에 한정되는 것은 아니며, 더욱 광의적으로는 상기 코딩 유닛을 포함하는 개념으로 이해될 수 있다.
디코딩이 수행되는 현재 유닛을 복원하기 위해서 현재 유닛이 포함된 현재 픽쳐 또는 다른 픽쳐들의 디코딩된 부분이 이용될 수 있다. 복원에 현재 픽쳐만을 이용하는, 즉 화면내 예측만을 수행하는 픽쳐(슬라이스)를 인트라 픽쳐 또는 I 픽쳐(슬라이스), 화면내 예측과 화면간 예측을 모두 수행할 수 있는 픽쳐(슬라이스)를 인터 픽쳐(슬라이스)라고 한다. 인터 픽쳐(슬라이스) 중 각 유닛을 예측하기 위하여 최대 하나의 모션 벡터 및 참조 인덱스(reference index)를 이용하는 픽쳐(슬라이스)를 예측 픽쳐(predictive picture) 또는 P 픽쳐(슬라이스)라고 하며, 최대 두 개의 모션 벡터 및 참조 인덱스를 이용하는 픽쳐(슬라이스)를 쌍예측 픽쳐(Bi-predictive picture) 또는 B 픽쳐(슬라이스) 라고 한다.
인트라 예측부에서는 현재 픽쳐 내의 복원된 영역들로부터 대상 유닛의 픽셀값을 예측하는 화면내 예측(Intra prediction)을 수행한다. 예를 들어, 현재 유닛을 중심으로, 좌측 및/또는 상단에 위치한 유닛들의 복원된 픽셀로부터 현재 유닛의 픽셀값을 예측할 수 있다. 이때, 현재 유닛의 좌측에 위치한 유닛들은 현재 유닛에 인접한 좌측 유닛, 좌측 상단 유닛 및 좌측 하단 유닛을 포함할 수 있다. 또한, 현재 유닛의 상단에 위치한 유닛들은 현재 유닛에 인접한 상단 유닛, 좌측 상단 유닛 및 우측 상단 유닛을 포함할 수 있다.
한편, 인터 예측부에서는 현재 픽쳐가 아닌 복원된 다른 픽쳐들의 정보를 이용하여 대상 유닛의 픽셀값을 예측하는 화면간 예측(Inter prediction)을 수행한다. 이때, 예측에 이용되는 픽쳐를 참조 픽쳐(reference picture)라고 한다. 화면간 예측 과정에서 현재 유닛을 예측하는데 어떤 참조 영역을 이용하는지는, 해당 참조 영역이 포함된 참조 픽쳐를 나타내는 인덱스 및 모션 벡터(motion vector) 정보 등을 이용하여 나타낼 수 있다.
화면간 예측에는 L0 예측, L1 예측 및 쌍예측(Bi-prediction)이 있을 수 있다. L0 예측은 L0(제 0 참조 픽쳐 리스트)에 포함된 1개의 참조 픽쳐를 이용한 예측이고, L1 예측은 L1(제 1 참조 픽쳐 리스트)에 포함된 1개의 참조 픽쳐를 이용한 예측을 의미한다. 이를 위해서는 1세트의 모션 정보(예를 들어, 모션 벡터 및 참조 픽쳐 인덱스)가 필요할 수 있다. 쌍예측 방식에서는 최대 2개의 참조 영역을 이용할 수 있는데, 이 2개의 참조 영역은 동일한 참조 픽쳐에 존재할 수도 있고, 서로 다른 픽쳐에 각각 존재할 수도 있다. 즉, 쌍예측 방식에서는 최대 2세트의 모션 정보(예를 들어, 모션 벡터 및 참조 픽쳐 인덱스)가 이용될 수 있는데, 2개의 모션 벡터가 동일한 참조 픽쳐 인덱스에 대응될 수도 있고 서로 다른 참조 픽쳐 인덱스에 대응될 수도 있다. 이때, 참조 픽쳐들은 시간적으로 현재 픽쳐 이전이나 이후 모두에 표시(또는 출력)될 수 있다.
모션 벡터 및 참조 픽쳐 인덱스를 이용하여 현재 유닛의 참조 유닛을 획득할 수 있다. 상기 참조 유닛은 상기 참조 픽쳐 인덱스를 가진 참조 픽쳐 내에 존재한다. 또한, 상기 모션 벡터에 의해서 특정된 유닛의 픽셀값 또는 보간(interpolation)된 값이 상기 현재 유닛의 예측값(predictor)으로 이용될 수 있다. 서브펠(sub-pel) 단위의 픽셀 정확도를 갖는 모션 예측을 위하여 이를 테면, 휘도 신호에 대하여 8-탭 보간 필터가, 색차 신호에 대하여 4-탭 보간 필터가 사용될 수 있다. 다만, 서브펠 단위의 모션 예측을 위한 보간 필터는 이에 한정되지 않는다. 이와 같이 모션 정보를 이용하여, 이전에 디코딩된 픽쳐로부터 현재 유닛의 텍스쳐를 예측하는 모션 보상(motion compensation)이 수행된다.
이하, 도 6 및 도 7을 참고로 본 개시의 실시예에 따른 화면내 예측 방법을 더욱 구체적으로 설명하도록 한다. 전술한 바와 같이, 인트라 예측부에서는 현재 유닛의 좌측 및/또는 상단에 위치한 인접 픽셀들을 참조 픽셀로 이용하여 현재 유닛의 픽셀값을 예측한다.
도 6에 도시된 바와 같이, 현재 유닛의 크기가 NXN일 경우, 현재 유닛의 좌측 및/또는 상단에 위치한 최대 4N+1개의 인접 픽셀들을 사용하여 참조 픽셀들이 설정될 수 있다. 참조 픽셀로 사용될 적어도 일부의 인접 픽셀이 아직 복원되지 않은 경우, 인트라 예측부는 기 설정된 규칙에 따른 참조 샘플 패딩 과정을 수행하여 참조 픽셀을 획득할 수 있다. 또한, 인트라 예측부는 화면내 예측의 오차를 줄이기 위해 참조 샘플 필터링 과정을 수행할 수 있다. 즉, 인접 픽셀들 및/또는 참조 샘플 패딩 과정에 의해 획득된 픽셀들에 필터링을 수행하여 참조 픽셀들이 획득할 수 있다. 인트라 예측부는 이와 같이 획득된 참조 픽셀들을 이용하여 현재 유닛의 픽셀들을 예측한다.
도 7은 화면내 예측에 사용되는 예측 모드들의 일 실시예를 도시한다. 화면내 예측을 위해, 화면내 예측 방향을 지시하는 화면내 예측 모드 정보가 시그널링될 수 있다. 현재 유닛이 화면내 예측 유닛일 경우, 비디오 신호 디코딩 장치는 비트스트림으로부터 현재 유닛의 화면내 예측 모드 정보를 추출한다. 비디오 신호 디코딩 장치의 인트라 예측부는 추출된 화면내 예측 모드 정보에 기초하여 현재 유닛에 대한 화면내 예측을 수행한다.
본 개시의 일 실시예에 따르면, 화면내 예측 모드는 총 67개의 모드를 포함할 수 있다. 각각의 화면내 예측 모드는 기 설정된 인덱스(즉, 인트라 모드 인덱스)를 통해 지시될 수 있다. 예를 들어, 도 7에 도시된 바와 같이 인트라 모드 인덱스 0은 평면(planar) 모드를 지시하고, 인트라 모드 인덱스 1은 DC 모드를 지시하며, 인트라 모드 인덱스 2~66은 서로 다른 방향 모드들(즉, 각도 모드들)을 각각 지시할 수 있다. 화면내 예측부는 현재 유닛의 화면내 예측 모드 정보에 기초하여, 현재 유닛의 화면내 예측에 사용될 참조 픽셀들 및/또는 보간된 참조 픽셀들을 결정한다. 인트라 모드 인덱스가 특정 방향 모드를 지시할 경우, 현재 유닛의 현재 픽셀로부터 상기 특정 방향에 대응하는 참조 픽셀 또는 보간된 참조 픽셀이 현재 픽셀의 예측에 사용된다. 따라서, 화면내 예측 모드에 따라 서로 다른 세트의 참조 픽셀들 및/또는 보간된 참조 픽셀들이 화면내 예측에 사용될 수 있다.
참조 픽셀들 및 화면내 예측 모드 정보를 이용하여 현재 유닛의 화면내 예측이 수행되고 나면, 비디오 신호 디코딩 장치는 역변환부로부터 획득된 현재 유닛의 잔차 신호를 현재 유닛의 화면내 예측값과 더하여 현재 유닛의 픽셀 값들을 복원한다.
도 8은 본 개시의 일 실시예에 따른 inter prediction을 나타낸 도면이다.
앞서 설명한 것처럼 현재 픽쳐 또는 블락을 인코딩, 디코딩할 때 다른 픽쳐 또는 블락으로부터 예측할 수 있다. 즉, 다른 픽쳐 또는 블락과의 유사성에 기반하여 인코딩, 디코딩하는 것이 가능하다. 다른 픽쳐 또는 블락과 유사한 부분을 현재 픽쳐 또는 블락에서는 생략한 시그날링으로 인코딩, 디코딩할 수 있고, 이에 대해 이하에서 더 설명한다. 블락 단위의 예측을 하는 것이 가능하다.
도 8을 참조하면 왼쪽에 Reference picture(참조 픽쳐)가 있고, 오른쪽에 Current picture(현재 픽쳐)가 있는데, current picture 또는 current picture의 일부를 참조 픽쳐(reference picture) 또는 reference picture의 일부와의 유사성을 이용해서 예측할 수 있다. 도 8의 current picture 안에 실선으로 나타낸 사각형이 현재 인코딩, 디코딩하는 블락이라고 했을 때 reference picture의 점선으로 나타낸 사각형으로부터 현재 블락을 예측할 수 있다. 이때 현재 블락이 참조해야할 블락(참조 블락)을 지시하는 정보가 존재할 수 있고, 이는 직접 시그날링 될 수도 있고, 시그날링 오버헤드를 줄이기 위해 어떠한 약속에 의해 만들어낼 수 있을 수도 있다. 상기 현재 블락이 참조해야할 블락을 지시하는 정보는 모션 벡터(motion vector)을 포함할 수 있다. 이는 현재 블락과 참조 블락 간의 픽쳐 내에서의 상대적인 위치를 나타내는 벡터일 수 있다. 도 8을 참조하면 reference picture의 점선으로 나타낸 부분이 존재하는데 현재 블락이 어떻게 이동하면 reference picture의 참조해야할 블락으로 이동할 수 있는지 나타내는 벡터가 모션 벡터일 수 있다. 즉, 현재 블락을 모션 벡터에 따라 움직이면 나오는 블락은 도 8의 current picture에 점선으로 나타낸 부분일 수 있고, 이 점선으로 나타낸 부분은 current picture 안에서의 위치가 reference picture의 참조 블락 위치와 같을 수 있다.
또한 상기 현재 블락이 참조해야할 블락을 지시하는 정보는 참조 픽쳐(reference picture)를 나타내는 정보를 포함할 수 있다. 참조 픽쳐를 나타내는 정보를 참조 픽쳐 리스트(reference picture list)와 참조 픽쳐 인덱스(reference picture index)를 포함할 수 있다. 참조 픽쳐 리스트는 참조 픽쳐들(refrerence pitures)을 포함하는 리스트이고 참조 픽쳐 리스트에 포함된 참조 픽쳐에서 참조 블락을 사용하는 것이 가능하다. 즉 참조 픽쳐 리스트에 포함된 참조 픽쳐로부터 현재 블락을 예측하는 것이 가능하다. 또한 참조 픽쳐 인덱스(reference picture index)는 사용할 참조 픽쳐(reference picture)를 지시하기 위한 인덱스일 수 있다.
도 9는 본 개시의 일 실시예에 따른 모션 벡터 시그날링 방법을 나타낸 도면이다.
본 개시의 일 실시예에 따르면 모션 벡터(motion vector; MV)는 motion vector predictor(MVP; 모션 벡터 예측자)에 기초하여 생성하는 것이 가능하다. 예를 들면 아래와 같이 motion vector predictor가 motion vector가 될 수 있다.
MV = MVP
또다른 예를 들면 아래와 같이 motion vector는 motion vector difference(MVD)에 기초할 수 있다. motion vector predictor에 정확한 motion vector를 나타내기 위해 motion vector difference(MVD; 모션 벡터 차분)를 더해줄 수 있다.
MV = MVP + MVD
또한 비디오 코딩에서 인코더에서 결정한 motion vector 정보를 디코더로 전송하고, 디코더는 수신한 motion vector 정보로부터 motion vector를 생성하고 예측 블록을 결정하는 것이 가능하다. 예를 들어 상기 motion vector 정보는 motion vector predictor(모션 벡터 예측자)에 관한 정보, motion vector difference(모션 벡터 차분)를 포함할 수 있다. 이때 모드에 따라서 상기 motion vector 정보의 구성 요소가 달라질 수 있다. 예를 들어 merge mode에서는 상기 motion vector 정보는 motion vector predictor(모션 벡터 예측자)에 관한 정보를 포함하고, motion vector difference(모션 벡터 차분)를 포함하지 않을 수 있다. 또다른 예로 AMVP(advanced motion vector prediction) mode에서는 상기 motion vector 정보는 motion vector predictor(모션 벡터 예측자)에 관한 정보를 포함하고, motion vector difference(모션 벡터 차분)를 포함할 수 있다.
Motion vector predictor(모션 벡터 예측자)에 관한 정보를 결정, 송신, 수신하기 위해서 인코더와 디코더는 동일한 방법으로 MVP candidates(모션 벡터 예측자 후보자들)를 생성할 수 있다. 예를 들어 인코더와 디코더는 동일한 순서로 동일한 MVP candidate(모션 벡터 예측자 후보자)를 생성할 수 있다. 그리고 인코더는 생성한 MVP candidates(모션 벡터 예측자 후보자들) 중에서 결정한 MVP(모션 벡터 예측자)를 나타내는 인덱스(mvp_lx_flag)를 디코더로 전송하고, 디코더는 이 인덱스(mvp_lx_flag)를 기초로 결정된 MVP(모션 벡터 예측자) 및 MV를 알아내는 것이 가능하다. 인덱스(mvp_lx_flag)는 제 0 참조 픽쳐 리스트(list 0)의 모션 벡터 예측자 인덱스(mvp_l0_flag) 및 제 1 참조 픽쳐 리스트(list 1)의 모션 벡터 예측자 인덱스(mvp_l1_flag)를 포함할 수 있다. 인덱스(mvp_lx_flag)를 수신하는 방법에 대해서는 도 56 내지 도 59에서 설명한다.
MVP candidate 및 MVP candidate 생성 방법은 spatial candidate, temporal candidate 등을 포함할 수 있다. Spatial candidate는 현재 블록으로부터 일정한 위치에 있는 블록에 대한 motion vector일 수 있다. 예를 들어 현재 블록과 인접하거나 인접하지 않은 블록이나 위치에 해당하는 motion vector일 수 있다. Temporal candidate는 현재 픽쳐와 다른 픽쳐 내의 블록에 해당하는 motion vector일 수 있다. 또는 MVP candidate는 affine motion vector, ATMVP, STMVP, 앞서 설명한 motion vector 들의 combination, 앞서 설명한 motion vector 들의 평균 vector, zero motion vector 등을 포함할 수 있다.
또한 앞서 설명한 참조 픽쳐(reference picture)를 나타내는 정보 또한 인코더에서 디코더로 전송될 수 있다. 또한 MVP candidate에 해당하는 참조 픽쳐가 참조 픽쳐를 나타내는 정보에 해당하지 않을 때 motion vector scaling을 할 수 있다. Motion vector scaling은 현재 픽쳐의 POC(picture order count), 현재 블록의 참조 픽쳐의 POC, MVP candidate의 참조 픽쳐의 POC, MVP candidate에 기초한 계산일 수 있다.
도 10은 본 개시의 일 실시예에 따른 motion vector difference syntax를 나타낸 도면이다.
Motion vector difference(모션 벡터 차분)는 motion vector difference의 sign과 absolute value가 나누어서 코딩될 수 있다. 즉, motion vector difference의 sign과 absolute value는 다른 syntax일 수 있다. 또한 motion vector difference의 absolute value는 값이 직접 코딩될 수도 있지만 도 10과 같이 absolute value가 N보다 큰지 여부를 나타내는 flag를 포함하여 코딩될 수 있다. 만약 absolute value가 N보다 큰 경우 (absolute value - N)의 값이 함께 시그날링 될 수 있다. 도 10의 예에서는 abs_mvd_greater0_flag가 전송될 수 있고, 이 flag는 absolute value가 0보다 큰지를 나타내는 flag일 수 있다. 만약 absolute value가 0보다 크지 않다고 abs_mvd_greater0_flag가 나타내진 경우 absolute value가 0인 것으로 결정할 수 있다. 또한 만약 absolute value가 0보다 크다고 abs_mvd_greater0_flag가 나타내진 경우 추가 syntax가 존재할 수 있다. 예를 들어 abs_mvd_greater1_flag가 존재할 수 있고, 이 flag는 absolute value가 1보다 큰지를 나타내는 flag일 수 있다. 만약 absolute value가 1보다 크지 않다고 abs_mvd_greater1_flag가 나타내진 경우 absolute value가 1인 것으로 결정할 수 있다. 만약 absolute value가 1보다 크다고 abs_mvd_greater1_flag가 나타내진 경우 추가 syntax가 존재할 수 있다. 예를 들어 abs_mvd_minus2가 존재할 수 있는데, 이것은 (absolute value - 2)의 값일 수 있다. 앞서 설명한 abs_mvd_greater0_flag, abs_mvd_greater1_flag를 통해 absolute value가 1보다 크다고(2 이상이라고) 결정되었으므로 (absolute value - 2)를 나타내는 것이다. abs_mvd_minus2가 variable length로 binarization 되는 경우 더 적은 비트로 시그날링하기 위한 것이다. 예를 들면 Exp-Golomb, truncated unary, truncated Rice 등의 variable length인 binarization 방법이 존재한다. 또한 mvd_sign_flag는 motion vector difference의 sign을 나타내는 flag일 수 있다.
이 실시예에서 코딩 방법을 motion vector difference를 통해 설명했지만 motion vector difference 이외의 정보도 sign과 absolute value에 관해 나누고, absolute value는 absolute value가 어떤 값보다 큰지 여부를 나타내는 flag와 absolute value에서 상기 어떤 값을 뺀 값으로 코딩하는 것이 가능하다. 또한 도 10에서 [0]과 [1]은 component index를 나타낼 수 있다. 예를 들면 x-component, y-component를 나타낼 수 있다.
도 11은 본 개시의 일 실시예에 따른 adaptive motion vector resolution(적응적인 모션 벡터 해상도) 시그날링을 나타낸 도면이다.
본 개시의 일 실시예를 따르면 motion vector(모션 벡터) 또는 motion vector difference(모션 벡터 차분)를 나타내는 resolution(해상도)은 다양할 수 있다. 다시 말하면 motion vector 또는 motion vector difference가 코딩되는 resolution은 다양할 수 있다. 예를 들면 resolution은 pixel(pel)을 기초로 나타낼 수 있다. 예를 들어 1/4(quarter), 1/2(half), 1(integer), 2, 4 pixel 등의 단위로 motion vector 또는 motion vector difference를 시그날링할 수 있다. 예를 들어 16을 나타내고 싶을 때 1/4 단위로 하면 64로 코딩하고(1/4 * 64 = 16), 1 단위로 하면 16으로 코딩하고(1 * 16 = 16), 4 단위로 하면 4로 코딩할 수 있다(4 *. 4 = 16). 즉 다음과 같이 값을 결정할 수 있다.
valueDetermined = resolution*valuePerResolution
여기서 valueDetermined는 전달하는 값으로써, 본 실시예에서는 motion vector(모션 벡터) 또는 motion vector difference(모션 벡터 차분) 일 수 있다. 또한 valuePerResolution은 valueDetermined를 [/resolution] 단위로 나타낸 값일 수 있다.
이때 motion vector 또는 motion vector difference로 시그날링하는 값이 resolution으로 나누어 떨어지지 않는 경우 rounding 등으로 prediction 성능이 가장 좋은 motion vector 또는 motion vector difference가 아닌 부정확한 값을 보낼 수 있다. High resolution을 사용하면 부정확함이 떨어질 수 있지만 코딩되는 값이 크므로 많은 비트를 사용할 수 있고, low resolution을 사용하면 부정확함이 높아질 수 있지만 코딩되는 값이 작으므로 적은 비트를 사용할 수 있다.
또한 상기 resolution을 블락, CU, slice 등의 단위로 다르게 설정하는 것이 가능하다. 따라서 단위에 맞도록 adaptive하게 resolution을 적용할 수 있다.
상기 resolution은 인코더에서 디코더로 시그날링될 수 있다. 이때 resolution에 대한 시그날링은 앞서 설명한 variable length로 binarization한 시그날링일 수 있다. 이러한 경우 가장 작은 값(가장 앞에 있는 값)에 해당하는 인덱스로 시그날링하는 경우 시그날링 오버헤드가 적어지게 된다.
일 실시예로 high resolution(자세히 시그날링)부터 low resolution 순서대로 시그날링 인덱스에 매칭시킬 수 있다.
도 11은 3가지 resolution에 대한 시그날링을 나타내고 있다. 이러한 경우 3가지 시그날링은 0, 10, 11일 수 있고, 3가지 시그날링 각각이 resolution 1, resolution 2, resolution 3에 해당할 수 있다. resolution 1을 시그날링 하는 데에는 1비트가 필요하고 나머지 resolution을 시그날링 하는 데에 2비트가 필요하므로 resolution 1을 시그날링 할 때 시그날링 오버헤드가 적다. 도 11의 예에서는 resolution 1, resolution 2, resolution 3이 각각 1/4, 1, 4 pel이다.
이하의 개시들에서 motion vector resolution은 motion vector difference의 resolution을 의미하는 것일 수 있다.
도 12는 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면이다.
도 11에서 설명한 것처럼 resolution(해상도)을 시그날링 하는 데에 필요한 비트수가 resolution(해상도)에 따라 다를 수 있으므로 상황에 맞게 시그날링 방법을 변경하는 것이 가능하다. 예를 들면 어떤 resolution을 시그날링하는 시그날링 값이 상황에 따라 다를 수 있다. 예를 들면 시그날링 인덱스와 resolution을 상황에 따라 다른 순서로 매칭시킬 수 있다. 예를 들어 시그날링 0, 10, 110, ... 에 해당하는 resolution이 어떤 상황에서는 각각 resolution 1, resolution 2, resolution 3, ... 이고, 다른 상황에서는 각각 resolution 1, resolution 2, resolution 3, ... 이 아니고 다른 순서일 수 있다. 또한 2개 이상의 상황을 정의하는 것이 가능하다.
도 12를 참조하면 0, 10, 11에 해당하는 resolution이 Case 1에서는 각각 resolution 1, resolution 2, resolution 3이고, Case 2에서는 각각 resolution 2, resolution 1, resolution 3 일 수 있다. 이때 Case는 2개 이상일 수 있다.
도 13은 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면이다.
도 12에서 설명한 것처럼 motion vector resolution을 상황에 따라 다르게 시그날링할 수 있다. 예를 들면 1/4, 1, 4 pel의 resolution이 존재한다고 했을 때 어떤 상황에서는 도 11에서 설명한 것과 같은 시그날링을 사용하고, 어떤 상황에서는 도 13(a) 또는 도 13(b)와 같은 시그날링을 사용할 수 있다. 도 11, 도 13(a), 도 13(b) 중 두가지 경우만 존재하거나 세가지 모두 존재하는 것이 가능하다. 따라서 어떤 상황에서는 가장 높은 resolution이 아닌 resolution을 적은 비트로 시그날링하는 것이 가능하다.
도 14는 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면이다.
본 개시의 일 실시예를 따르면 도 11에서 설명한 adaptive motion vector resolution(적응적인 모션 벡터 해상도)에서 상황에 따라 가능한 resolution이 바뀔 수 있다. 예를 들면 resolution 값이 상황에 따라 바뀔 수 있다. 일 실시예로 어떤 상황에서는 resolution 1, resolution 2, resolution 3, resolution 4, ... 중에서 사용하고 어떤 상황에서는 resolution A, resolution B, resolution C, resolution D, ... 중에서 사용햐는 것이 가능하다. 또한 {resolution 1, resolution 2, resolution 3, resolution 4, ...}와 {resolution B, resolution C, resolution D, ...}에는 공집합이 아닌 교집합이 있을 수 있다. 즉, 어떤 resolution 값은 두 개 이상의 상황에서 사용하고, 상기 두 개 이상의 상황은 사용 가능한 resolution 값의 set이 다를 수 있다. 또한 상황 별로 사용 가능한 resolution 값의 개수가 다를 수 있다.
도 14를 참조하면 Case 1에서는 Resolution 1, Resolution 2, Resolution 3를 사용 가능하고, Case 2에서는 Resolution A, Resolution B, Resolution C를 사용 가능하다. 예를 들면 Resolution 1, Resolution 2, Resolution 3은 1/4, 1, 4 pel 일 수 있다. 또한 예를 들면 Resolution A, Resolution B, Resolution C는 1/4, 1/2, 1 일 수 있다.
도 15는 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면이다.
도 15를 참조하면 motion vector candidate(모션 벡터 후보) 또는 motion vector predictor candidate(모션 벡터 예측자 후보)에 따라 resolution(해상도) 시그날링을 달리할 수 있다. 예를 들어 도 12 내지 도 14에서 설명한 상황(case)이 선택되거나 시그날링된 motion vector나 motion vector predictor가 어떤 candidate이냐에 관한 것일 수 있다. 시그날링을 달리하는 방법은 도 12 내지 도 14의 방법을 따를 수 있다.
예를 들어 candidate(후보) 중에서 어떤 위치에 있느냐에 따라 상황을 달리 정의할 수 있다. 또는 candidate(후보)가 어떻게 만들어졌는지에 따라 상황을 달리 정의할 수 있다.
인코더 또는 디코더는 적어도 하나의 MV candidate(모션 벡터 후보) 또는 적어도 하나의 MVP candidate(모션 벡터 예측자 후보)를 포함하는 candidate list(후보 리스트)를 생성할 수 있다. MV candidate(모션 벡터 후보) 또는 MVP candidate(모션 벡터 예측자 후보)에 대한 candidate list(후보 리스트)에서 앞에 있는 MVP(모션 벡터 예측자)는 정확도가 높고, candidate list(후보 리스트)에서 뒤에 있는 MVP(모션 벡터 예측자)는 정확도가 낮은 경향이 있을 수 있다. 이것은 candidate list(후보 리스트)의 앞에 있는 것은 더 적은 비트로 시그날링하고 candidate list(후보 리스트) 앞에 있는 MVP(모션 벡터 예측자)가 더 정확도가 높도록 설계한 것일 수도 있다. 본 개시의 실시예에서 MVP(모션 벡터 예측자)의 정확도가 높으면 예측 성능 좋은 motion vector(모션 벡터)를 나타내기 위한 MVD(모션 벡터 차분) 값이 작을 수 있고, MVP(모션 벡터 예측자)의 정확도가 낮으면 예측 성능 좋은 motion vector(모션 벡터)를 나타내기 위한 MVD(모션 벡터 차분) 값이 클 수 있다. 따라서 MVP(모션 벡터 예측자)의 정확도가 낮을 때 low resolution(낮은 해상도)으로 시그날링해서 motion vector difference(모션 벡터 차분) 값을 나타내는 데에 필요한 비트(예를 들면 difference 값을 resolution에 기반하여 나타낸 값)를 줄이는 것이 가능하다.
이러한 원리로 MVP(모션 벡터 예측자) 정확도가 낮을 때 low resolution(낮은 해상도)을 사용할 수 있으므로, 본 개시의 일 실시예를 따르면 MVP candidate(모션 벡터 에측자 후보)에 따라 가장 high resolution(높은 해상도)이 아닌, resolution이 가장 적은 비트 시그날링할 것을 약속할 수 있다. 예를 들어 1/4, 1, 4 pel이 가능한 resolution 일 때 1 또는 4를 가장 적은 비트(1-bit)로 시그날링 할 수 있다. 도 15를 참조하면 Candidate 1, Candidate 2에 대해서는 high resolution인 1/4 pel을 가장 적은 비트로 시그날링하고, Candidate 1, Candidate 2보다 뒤에 있는 Candidate N에 대해서는 1/4 pel이 아닌 resolution을 가장 적은 비트로 시그날링하고 있다.
도 16은 본 개시의 일 실시예에 따른 adaptive motion vector resolution 시그날링을 나타낸 도면이다.
도 15에서 설명한 것처럼 결정된 motion vector(모션 벡터) 또는 motion vector predictor(모션 벡터 예측자)가 어떤 candidate(후보)인지에 따라 motion vector resolution(모션 벡터 해상도) 시그날링을 다르게 할 수 있다. 시그날링을 달리하는 방법은 도 12 내지 도 14의 방법을 따를 수 있다.
도 16을 참조하면 어떤 candidate(후보)에 대해서는 high resolution(높은 해상도)을 가장 적은 비트로 시그날링하고, 어떤 candidate(후보)에 대해서는 high resolution(높은 해상도)이 아닌 resolution(해상도)을 가장 적은 비트로 시그날링하고 있다. 예를 들면 high resolution(높은 해상도)이 아닌 resolution(해상도)을 가장 적은 비트로 시그날링하는 candidate(후보)는 부정확한 candidate(후보)일 수 있다. 예를 들면 high resolution(해상도)이 아닌 resolution(해상도)을 가장 적은 비트로 시그날링하는 candidate(후보)는 temporal candidate, zero motion vector, non-adjacent spatial candidate, refinement 과정이 있는지 없는지 여부에 따른 candidate 등일 수 있다.
Temporal candidate는 다른 픽쳐로부터의 motion vector일 수 있다. Zero motion vector는 vector 성분이 모두 0인 motion vector일 수 있다. Non-adjacent spatial candidate는 현재 블록과 인접하지 않은 위치로부터 참조한 motion vector일 수 있다. Refinement(개선) 과정은 motion vector predictor(모션 벡터 예측자)를 refine 하는 과정일 수 있고, 예를 들면 template matching, bilateral matching 등을 통해 refine 할 수 있다.
본 개시의 일 실시예를 따르면 motion vector predictor(모션 벡터 예측자)를 refine 한 후에 motion vector difference(모션 벡터 차분)를 더하는 것이 가능하다. 이것은 motion vector predictor(모션 벡터 예측자)를 정확하게 하여 motion vector difference(모션 벡터 차분) 값을 줄이기 위한 것일 수 있다. 이러한 경우 refinement(개선) 과정이 없는 candidate(후보)에 대해 motion vector resolution(모션 벡터 해상도) 시그날링을 다르게 할 수 있다. 예를 들면 가장 high resolution(높은 해상도)이 아닌 resolution(해상도)을 가장 적은 비트로 시그날링할 수 있다.
또다른 실시예를 따르면 motion vector predictor(모션 벡터 예측자)에 motion vector difference(모션 벡터 차분)를 더한 후에 refinement(개선) 과정을 할 수 있다. 이때 refinement(개선) 과정이 있는 candidate에 대해 motion vector resolution(모션 벡터 해상도) 시그날링을 다르게 할 수 있다. 예를 들면 가장 high resolution(높은 해상도)이 아닌 resolution(해상도)을 가장 적은 비트로 시그날링할 수 있다. 이것은 motion vector difference(모션 벡터 차분)를 더한 후에 refinement(개선 과정이 수행될 것이기 때문에 MV difference(모션 벡터 차분)를 최대한 정확히(예측 오차가 적도록) 시그날링하지 않더라도 refinement(개선) 과정을 통해 예측 오차를 줄이는 것이 가능하기 때문일 수 있다.
또다른 예로 선택된 candidate(후보)가 다른 candidate(후보)와 일정 이상 값이 다를 때 motion vector resolution(모션 벡터 해상도) 시그날링을 변경할 수 있다.
또다른 실시예로 결정된 motion vector(모션 벡터) 또는 motion vector predictor(모션 벡터 예측자)가 어떤 candidate(후보)인지에 따라 후에 수행되는 motion vector refinement(모션 벡터 개선) 과정을 다르게할 수 있다. Motion vector refinement(모션 벡터 개선) 과정은 더 정확한 motion vector(모션 벡터)를 찾기 위한 과정일 수 있다. 예를 들면 기준점으로부터 정해진 약속에 따라 현재 블록과 matching(매칭)되는 블록을 찾는 과정일 수 있다(예를 들어 template matching 또는 bilateral matching). 기준점은 결정된 motion vector(모션 벡터) 또는 motion vector predictor(모션 벡터 예측자)에 해당하는 위치일 수 있다. 이때 정해진 약속에 따라 기준점으로부터 움직이는 정도가 달라질 수 있는데, motion vector refinement(모션 벡터 개선) 과정을 다르게 한다는 것은 기준점으로부터 움직이는 정도를 다르게 하는 것일 수 있다. 예를 들어 정확한 candidate(후보)에 대해서는 자세한 refinement(개선) 과정으로부터 시작할 수 있고, 부정확한 candidate(후보)에 대해서는 덜 자세한 refinement(개선) 과정으로부터 시작할 수 있다. 정확하고, 부정확한 candidate(후보)는 candidate list(후보 리스트)에서의 위치, 혹은 어떠한 방식으로 candidate(후보)가 생성되었는지 등에 따라 결정될 수 있다. 어떠한 방식으로 candidate(후보)가 생성되었는지는 spatial candidate를 어느 위치에서 가져왔는지 일 수 있다. 또한 이에 대해서 도 16의 설명을 참조할 수 있다. 또한 자세하고 덜 제세한 refinement(개선)는 matching(매칭)하는 블록을 기준점으로부터 조금씩 움직이면서 찾는지 많이 움직이면서 찾는지일 수 있다. 또한 많이 움직이면서 찾는 경우, 많이 움직이면서 찾은 가장 matching(매칭)되는 블록으로부터 추가적으로 조금씩 움직이면서 찾는 과정을 추가할 수 있다.
또다른 실시예로 현재 픽쳐의 POC 및 motion vector 또는 motion vector predictor candidate의 reference picture의 POC를 기초로 motion vector resolution 시그날링을 변경할 수 있다. 시그날링을 달리하는 방법은 도 12 내지 도 14의 방법을 따를 수 있다.
예를 들어 현재 픽쳐의 POC(Picture Order Count)와 motion vector(모션 벡터) 또는 motion vector predictor candidate(모션 벡터 예측자 후보)의 reference picture(참조 픽쳐)의 POC 차이가 큰 경우 motion vector(모션 벡터) 또는 motion vector predictor(모션 벡터 예측자)가 부정확할 수 있고, high resolution이 아닌 resolution을 가장 적은 비트로 시그날링할 수 있다.
또다른 예로 motion vector scaling(모션 벡터 스케일링)을 해야 하는지를 기초로 motion vector resolution(모션 벡터 해상도) 시그날링을 변경할 수 있다. 예를 들어 선택한 motion vector(모션 벡터) 또는 motion vector predictor(모션 벡터 예측자)가 motion vector scaling(모션 벡터 스케일일)을 하는 candidate인 경우에 high resolution이 아닌 resolution을 가장 적은 비트로 시그날링할 수 있다. Motion vector scaling(모션 벡터 스케일링)을 하는 경우는 현재 블록에 대한 reference picture(참조 픽쳐)와 참조한 candidate(후보)의 reference picture(참조 픽쳐)가 다른 경우일 수 있다.
도 17은 본 개시의 일 실시예에 따른 affine motion prediction을 나타낸 도면이다.
도 8에서 설명한 것과 같은 기존의 예측 방법에서는 현재 블락이 회전이나 스케일링 없이 단지 이동한 위치로부터의 블락으로부터 예측할 수 있다. 현재 블락과 같은 크기와 모양, 각도의 참조 블락으로부터 예측할 수 있다. 도 8은 단지 translation motion model인 것이다. 그러나 실제 영상에 담긴 컨텐츠는 더 복잡한 움직임을 가질 수 있고, 다양한 모양으로부터 예측한다면 예측 성능이 더 향상될 수 있다.
도 17을 참조하면 current picture(현재 픽쳐)에 현재 예측하는 블락을 실선으로 나타내었다. 현재 예측하는 블락과 다른 모양, 크기, 각도의 블락을 참조하여 현재 블락을 예측할 수 있고, 참조 블락을 reference picture(참조 픽쳐)에 점선으로 나타내었다. 참조 블락의 픽쳐 내에서의 위치와 같은 위치를 current picture에 점선으로 나타내었다. 이때 참조 블락은 현재 블락에 affine transformation으로 나타내어지는 블락일 수 있다. 이를 통해 stretching(scaling), rotation, shearing, reflection, orthogonal projection 등을 나타내는 것이 가능하다.
Affine motion(어파인 모션), affine transformation(어파인 변환)을 나타내는 parameter의 개수는 다양할 수 있는데, 더 많은 parameter를 사용하면 더 적은 parameter를 사용할 때보다 더 다양한 motion을 나타낼 수 있지만 signaling이나 계산 등에서 오버헤드가 발생할 가능성이 있다.
예를 들면 6개의 parameters에 의해 affine transformation이 나타내어질 수 있다. 또는 3개의 control point motion vectors에 의해 affine transformation이 나타내어질 수 있다.
도 18은 본 개시의 일 실시예에 따른 affine motion prediction을 나타낸 도면이다.
도 17에서와 같이 affine transformation(어파인 변환)을 이용해서 복잡한 움직임을 표현하는 것이 가능하지만 이를 위한 시그날링 오버헤드 및 연산을 줄이기 위해 더 간단한 affine motion prediction(어파인 모션 예측) 또는 affine transformation(어파인 변환)을 사용할 수 있다. 움직임을 제한함으로써 더 간단한 affine motion prediction(어파인 모션 예측)을 할 수 있다. 움직임을 제한하면 현재 블락이 참조 블락으로 변형되는 모양이 제한되는 것일 수 있다.
도 18을 참조하면 v0, v1의 control point motion vectors(컨트롤 포인트 모션 벡터들)를 이용하여 affine motion prediction(어파인 모션 예측)을 할 수 있다. v0, v1 두 개의 vectors를 사용하는 것은 4개의 parameters를 사용하는 것과 같을 수 있다. 상기 v0, v1 두 개의 vectors 또는 상기 4개의 parameters로 현재 블락이 어떤 모양의 참조 블락으로부터 예측하는지 나타낼 수 있다. 이와 같은 간단한 affine transformation을 사용함으로써 블락의 rotation, scaling(zoom in/out)의 움직임을 나타낼 수 있다. 도 18을 참조하면 실선으로 나타낸 현재 블락은 reference picture(참조 픽쳐)에서 도 18의 점선으로 나타낸 위치로부터 예측할 수 있다. Affine transformation을 통해 현재 블락의 각 point(pixel)이 다른 point로 매핑될 수 있다.
도 19는 본 개시의 일 실시예에 따른 motion vector field(모션 벡터 필드)를 나타낸 식이다. 도 18에서의 control point motion vector(컨트롤 포인트 모션 벡터) v0는 (v_0x, v_0y)이고 top-left corner control point의 motion vector일 수 있다. 또한, control point motion vector v1은 (v_1x, v_1y)이고 top-right corner control point의 motion vector일 수 있다. 이 때 (x, y) 위치의 motion vector (v_x, v_y)는 도 19와 같을 수 있다. 따라서 각 pixel 위치 또는 어떤 위치에 대한 motion vector를 도 19의 식에 따라 추정할 수 있고, 이것은 v0, v1을 기초로 하고 있다.
또한 도 19의 수식에서 (x, y)는 block(블락) 안에서의 상대적 좌표일 수 있다. 예를 들면 (x, y)는 block(블락)의 left top 위치를 (0, 0)이라고 했을 때의 위치일 수 있다.
만약 v0가 픽쳐에 상에서 위치(x0, y0)에 대한 control point motion vector(컨트롤 포인트 모션 벡터)이고, v1이 픽쳐 상에서 위치(x1, y1)에 대한 control point motion vector(컨트롤 포인트 모션 벡터)인 경우, block(블락) 내의 위치(x, y)를 v0, v1의 위치와 같은 좌표를 사용하여 나타내려면 도 19의 수식에서 x와 y를 각각 (x-x0), (y-y0)로 변경하여 나타낼 수 있다. 또한 w (block의 width)는 (x1-x0)일 수 있다.
도 20은 본 개시의 일 실시예에 따른 affine motion prediction을 나타낸 도면이다.
본 개시의 일 실시예를 따르면 다수의 control point motion vector(컨트롤 포인트 모션 벡터) 또는 다수의 parameter를 사용하여 affine motion(어파인 모션)을 나타낼 수 있다.
도 20을 참조하면 v0, v1, v2의 control point motion vector(컨트롤 포인트 모션 벡터)를 이용하여 affine motion prediction(어파인 모션 예측)을 할 수 있다. v0, v1, v2 세 개의 vectors를 사용하는 것은 6개의 parameters를 사용하는 것과 같을 수 있다. 상기 v0, v1, v2 세 개의 vectors 또는 상기 6개의 parameters로 현재 블락이 어떤 모양의 참조 블락으로부터 예측하는지 나타낼 수 있다. 도 20를 참조하면 실선으로 나타낸 현재 블락은 reference picture에서 도 20의 점선으로 나타낸 위치로부터 예측할 수 있다. Affine transformation을 통해 현재 블락의 각 point(pixel)이 다른 point로 매핑될 수 있다.
도 21은 본 개시의 일 실시예에 따른 motion vector field를 나타낸 식이다. 도 20에서, control point motion vector(컨트롤 포인트 모션 벡터) v0가 (mv_0^x, mv_0^y)이고 top-left corner control point의 motion vector일 수 있고, control point motion vector(컨트롤 포인트 모션 벡터) v1이 (mv_1^x, mv_1^y)이고 top-right corner control point의 motion vector일 수 있고, control point motion vector(컨트롤 포인트 모션 벡터) v2가 (mv_2^x, mv_2^y)이고 bottom-left corner control point의 motion vector일 수 있다. 그럴 때 (x, y) 위치의 motion vector(모션 벡터) (mv^x, mv^y)는 도 21과 같을 수 있다. 따라서 각 pixel 위치 또는 어떤 위치에 대한 motion vector를 도 21의 식에 따라 추정할 수 있고, 이것은 v0, v1, v2를 기초로 하고 있다.
또한 도 21의 수식에서 (x, y)는 block(블락) 안에서의 상대적 좌표일 수 있다. 예를 들면 (x, y)는 block(블락)의 left top 위치를 (0, 0)이라고 했을 때의 위치일 수 있다. 따라서 만약 v0가 위치(x0, y0)에 대한 control point motion vector(컨트롤 포인트 모션 벡터)이고, v1이위치(x1, y1)에 대한 control point motion vector(컨트롤 포인트 모션 벡터)이고, v2가 위치(x2, y2)에 대한 control point motion vector(컨트롤 포인트 모션 벡터)이라고 하고, (x, y)를 v0, v1, v2의 위치와 같은 좌표를 사용하여 나타내려면 도 21의 수식에서 x와 y를 각각 (x-x0), (y-y0)로 변경하여 나타낼 수 있다. 또한 w (block의 width)는 (x1-x0)이고, h (block의 height)는 (y2 - y0)일 수 있다.
도 22는 본 개시의 일 실시예에 따른 affine motion prediction을 나타낸 도면이다.
앞서 설명한 것처럼 motion vector field(모션 벡터 필드)가 존재하고, 각 pixel에 대해 motion vector를 계산할 수 있지만 좀 더 간단히 하기 위해 도 22과 같이 subblock based(서브블락 기반)로 affine transform을 할 수 있다. 예를 들면 도 22 (a)의 작은 사각형이 subblock(서브블락)인데, subblock의 대표 motion vector(모션 벡터)를 만들 수 있고, 그 subblock의 pixel들에 대해 상기 대표 motion vector(모션 벡터)를 이용할 수 있다. 또한 도 17, 도 18 도 20 등에서 복잡한 움직임을 표현했던 것처럼 subblock이 그러한 움직임을 표현하여 참조 블럭과 대응할 수 있고, 또는 subblock에 translation motion만 적용하여 더 간단히 할 수도 있다. 도 22 (a)에서 v0, v1, v2는 control point motion vector(컨트롤 포인트 모션 벡터)일 수 있다.
이때 subblock(서브블락) 사이즈는 M*N일 수 있고, M과 N은 도 22 (b)에 나타낸 것과 같을 수 있다. 그리고 MvPre는 motion vector fraction accuracy(모션 벡터 프랙션 정확도)일 수 있다. 또한 (v_0x, v_0y)와 (v_1x, v_1y), (v_2x, v_2y)는 각각 top-left, top-right, bottom-left control point의 motion vector(모션 벡터)일 수 있다. (v_2x, v_2y)는 현재 블락의 bottom-left control point의 motion vector일 수 있고, 예를 들면 4-parameter인 경우 도 19의 식에 의해 계산한 bottom-left에 대한 MV(모션 벡터)일 수 있다.
또한 subblock의 대표 motion vector를 만들 때 subblock의 가운데 샘플 위치를 이용하여 대표 motion vector를 계산하는 것이 가능하다. 또한 subblock의 motion vector를 만들 때 normal motion vector보다 더 정확도가 높은 motion vector를 사용할 수 있고, 이를 위해 motion compensation interpolation filters(모션 보상 보간 필터)가 적용될 수 있다.
또다른 실시예로 subblock의 크기가 가변이지 않고 특정 크기로 고정되어 있을 수 있다. 예를 들면 4*4 사이즈로 subblock 크기가 고정되어 있을 수 있다.
도 23은 본 개시의 일 실시예에 따른 affine motion prediction의 한 모드를 나타낸 도면이다.
본 개시의 일 실시예를 따르면 affine motion prediction(어파인 모션 예측)의 한 예로 affine inter mode(어파인 인터 모드)가 있을 수 있다. Affine inter mode(어파인 인터 모드)인 것을 지시하는 flag(플래그)가 있을 수 있다. 도 23을 참조하면 v0, v1 근처의 A, B, C, D, E 위치의 블락이 있을 수 있고, 각 블락에 해당하는 motion vector(모션 벡터)를 vA, vB, vC, vD, vE라고 할 수 있다. 이를 이용하여 다음과 같은 motion vector(모션 벡터) 또는 motion vector predictor(모션 벡터 예측자)에 대한 candidate list(후보 리스트)를 만들 수 있다.
{(v0, v1)|v0 = {vA, vB, vC}, v1 = {vD, vE}}
즉, vA, vB, vC 중에서 뽑은 v0와 vD, vE 중에서 뽑은 v1으로 (v0, v1) pair를 만들 수 있다. 이때 neighbor block(이웃 블락)의 reference의 POC(Picture Order Count)와 current CU(현재 코딩 유닛; 현재 블락)에 대한 reference(참조)의 POC, current CU(현재 코딩 유닛; 현재 블락)의 POC에 따라 motion vector를 scaling(스케일링)할 수 있다. 앞서 설명한 것과 같은 motion vector pair들로 candidate list(후보 리스트)가 만들어지면 candidate list 중 어떤 것을 선택했는지, 선택되었는지 시그날링하는 것이 가능하다. 또한 candidate list가 충분히 채워지지 않았으면 다른 inter prediction(인터 예측)의 candidate(후보)로 채우는 것이 가능하다. 예를 들면 AMVP(Advanced Motion Vector Prediction) candidates를 활용하여 채울 수 있다. 또한 candidate list에서 뽑은 v0, v1을 affine motion prediction(어파인 모션 예측)의 control point motion vector(컨트롤 포인트 모션 벡터)로 바로 사용하지 않고, 보정할 difference(차분)를 시그날링하는 것이 가능하고 이에 따라 더 좋은 control point motion vector(컨트롤 폴인트 모션 벡터)를 만들 수 있다. 즉, 디코더에서는 candidate list(후보 리스트)에서 뽑은 v0, v1에 difference(차분)를 더해서 만든 v0', v1'을 affine motion prediction의 control point motion vector로 사용하는 것이 가능하다.
일 실시예로 특정 사이즈 이상의 CU(코딩 유닛)에 대해서 affine inter mode(어파인 인터 모드)를 사용하는 것도 가능하다.
도 24는 본 개시의 일 실시예에 따른 affine motion prediction의 한 모드를 나타낸 도면이다.
본 개시의 일 실시예를 따르면 affine motion prediction(어파인 모션 예측)의 한 예로 affine merge mode(어파인 머지 모드)가 있을 수 있다. Affine merge mode(어파인 머지 모드)인 것을 지시하는 flag(플래그)가 있을 수 있다. Affine merge mode(어파인 머지 모드)에서는 현재 블락의 주변에서 affine motion prediction(어파인 모션 예측)을 사용했던 경우 그 주변 블락의 motion vector(모션 벡터)들로부터 현재 블락의 control point motion vector(컨트롤 포인트 모션 벡터)를 계산할 수 있다. 예를 들면 주변 블락이 affine motion prediction(어파인 모션 예측)을 사용했는지 확인할 때 candidate(후보)가 되는 주변 블락은 도 24(a)와 같을 수 있다. 또한 A, B, C, D, E 순서대로 affine motion prediction(어파인 모션 예측)을 사용했는지 확인할 수 있고, affine motion prediction(어파인 모션 예측)을 사용한 블락을 발견하면 그 블락 또는 그 블락 주변의 motion vector(모션 벡터)를 사용하여 현재 블락의 control point motion vector(컨트롤 포인트 모션 벡터)를 계산할 수 있다. A, B, C, D, E는 도 24(a)에 나타낸 것과 같이 각각 left, above, above right, left bottom, above left일 수 있다.
일 실시예로 도 24(b)와 같이 A 위치의 블락이 affine motion prediction(어파인 모션 예측)을 사용했던 경우 그 블락 또는 그 블락 주변의 motion vector를 이용해서 v0, v1을 계산할 수 있다. 상기 그 블락 또는 그 블락 주변의 motion vector는 v2, v3, v4일 수 있다.
앞 실시예에서는 참조하는 주변 블락의 순서가 정해져있다. 하지만 특정 위치로부터 derive(도출)한 control point motion vector(컨트롤 포인트 모션 벡터)가 항상 더 성능이 좋은 것은 아니다. 따라서 또다른 실시예로 어떤 위치의 block을 참조하여 control point motion vector(컨트롤 포인트 모션 벡터)를 derive 할 지 시그날링 하는 것이 가능하다. 예를 들면 control point motion vector derivation의 candidate 위치가 도 24(a)의 A, B, C, D, E 순서대로 정해져있고, 그 중에서 무엇을 참조할지 시그날링할 수 있다.
또다른 실시예로 control point motion vector(컨트롤 포인트 모션 벡터)를 derive할 때 각 control point motion vector에 대해 가까운 block으로부터 가져와서 정확도를 높일 수 있다. 예를 들어 도 24를 참조하면 v0를 derivation할 때 left block을 참조하고, v1을 derivation할 때 above block을 참조할 수 있다. 또는 v0를 derivation할 때 A, D, 또는 E를 참조하고, v1을 derivation할 때 B, 또는 C를 참조할 수 있다.
도 25는 본 개시의 일 실시예에 따른 affine motion predictor derivation을 나타낸 도면이다.
Affine motion prediction(어파인 모션 예측)을 위해 control point motion vectors(컨트롤 포인트 모션 벡터들)가 필요할 수 있고, 상기 control point motion vectors(컨트롤 포인트 모션 벡터들)를 기초로 motion vector field(모션 벡터 필드), 즉 subblock(서브블락)이나 어떤 위치에 대한 motion vector(모션 벡터)가 계산될 수 있다. Control point motion vector(컨트롤 포인트 모션 벡터)는 seed vector(시드 벡터)라고 불릴 수도 있다.
이때 control point MV(컨트롤 포인트 모션 벡터)는 predictor(예측자)를 기초로할 수 있다. 예를 들면 predictor(예측자)가 control point MV(컨트롤 포인트 모션 벡터)가 될 수 있다. 또다른 예로 predictor(예측자)와 difference(차분)를 기초로 control point MV(컨트롤 포인트 모션 벡터)가 계산될 수 있다. 구체적으로 predictor(예측자)에 difference(차분)를 더하거나 빼서 control point MV(컨트롤 포인트 모션 벡터)를 계산할 수 있다.
이때 control point MV의 predictor를 만드는 과정에서 주변의 affine motion prediction(affine motion compensation(MC))한 block의 control point MVs(컨트롤 포인트 모션 벡터들) 또는 MVs(모션 벡터들)로부터 derive하는 것이 가능하다. 예를 들어 기설정된 위치에 해당하는 block이 affine motion prediction 되었으면 그 block의 control point MVs 또는 MVs로부터 현재 block의 affine motion compensation을 위한 predictor를 derivation할 수 있다. 도 25을 참조하면 기설정된 위치는 A0, A1, B0, B1, B2 일 수 있다. 또는 기설정된 위치는 현재 block과 인접한 위치와 인접하지 않은 위치를 포함할 수 있다. 또한 기설정된 위치의 control point MVs(컨트롤 포인트 모션 벡터들) 또는 MVs(모션 벡터들)를 참조하는 것이 가능하고(spatial), 기설정된 위치의 temporal control point MVs 또는 MVs를 참조하는 것이 가능하다.
도 25의 실시예와 같은 방법으로 affine MC(어파인 모션 보상)의 candiate를 만들 수 있는데 이러한 candidate를 inherited candidate라고 부를 수도 있다. 또는 이러한 candidate를 merge candidate(머지 후보)라고 부를 수도 있다. 또한 도 25의 방법에서 기설정된 위치들을 참조할 때 기설정된 순서를 따라 참조할 수 있다.
도 26은 본 개시의 일 실시예에 따른 affine motion predictor derivation을 나타낸 도면이다.
Affine motion prediction(어파인 모션 보상)을 위해 control point motion vectors(컨트롤 포인트 모션 벡터들)가 필요할 수 있고, 상기 control point motion vectors를 기초로 motion vector field(모션 벡터 필드), 즉 subblock(서브블락)이나 어떤 위치에 대한 motion vector가 계산될 수 있다. Control point motion vector(컨트롤 포인트 모션 벡터)는 seed vector(시트 벡터)라고 불릴 수도 있다.
이때 control point MV(컨트롤 포인트 모션 벡터)는 predictor(예측자)를 기초로할 수 있다. 예를 들면 predictor가 control point MV(컨트롤 포인트 모션 벡터)가 될 수 있다. 또다른 예로 predictor와 difference(차분)를 기초로 control point MV(컨트롤 포인트 모션 벡터)가 계산될 수 있다. 구체적으로 predictor(예측자)에 difference(차분)를 더하거나 빼서 control point MV(컨트롤 포인트 모션 벡터)를 계산할 수 있다.
이때 control point MV의 predictor를 만드는 과정에서 주변의 MVs로부터 derive하는 것이 가능하다. 이때 주변의 MVs는 affine MC(어파인 모션 보상)된 MVs(모션 벡터들)가 아닌 경우의 MVs(모션 벡터들)도 포함할 수 있다. 예를 들어 현재 block의 각 control point MV(컨트롤 포인트 모션 벡터)를 derivation할 때 각 control point MV에 대해 기설정된 위치의 MV를 control point MV의 predictor로 사용할 수 있다. 예를 들면 기설정된 위치는 그 부분과 인접한 block에 포함된 부분일 수 있다.
도 26을 참조하면 control point MV(컨트롤 포인트 모션 벡터) mv0, mv1, mv2를 결정할 수 있다. 이때 본 개시의 일 실시예를 따르면 기설정된 위치 A, B, C에 해당하는 MV(모션 벡터)를 mv0에 대한 predictor로 사용할 수 있다. 또한 기설정된 위치 D, E에 해당하는 MV(모션 벡터)를 mv1에 대한 predictor로 사용할 수 있다. 기설정된 위치 F, G에 해당하는 MV(모션 벡터)를 mv2에 대한 predictor로 사용할 수 있다.
또한 도 26의 실시예를 따라 control point MV(컨트롤 포인트 모션 벡터) mv0, mv1, mv2의 각 predictor(예측자)를 결정할 때 각 control point 위치에 대한 기설정된 위치를 참조하는 순서가 정해있을 수 있다. 또한 control point MV의 predictor로 참조하는 기설정된 위치가 각 control point에 대해 다수 있을 수 있는데, 가능한 기설정된 위치의 조합이 정해있을 수 있다.
도 26의 실시예와 같은 방법으로 affine MC(어파인 모션 보상)의 candiate를 만들 수 있는데 이러한 candidate를 constructed candidate라고 부를 수도 있다. 또는 이러한 candidate를 inter candidate 또는 virtual candidate라고 부를 수도 있다. 또한 도 41의 방법에서 기설정된 위치들을 참조할 때 기설정된 순서를 따라 참조할 수 있다.
본 개시의 일 실시예를 따르면 도 23 내지 도 26에서 설명한 실시예 또는 그들의 조합으로 affine MC(어파인 모션 보상)의 candidate list 또는 affine MC(어파인 모션 보상)의 control point MV candidate list(컨트롤 포인트 모션 보상 후보 리스트)를 생성할 수 있다.
도 27은 본 개시의 일 실시예에 따른 affine motion predictor derivation을 나타낸 도면이다.
도 24 내지 도 25에서 설명한 것처럼 주변의 affine motion prediction된 block으로부터 현재 block의 affine motion prediction을 위한 control point MV(컨트롤 포인트 모션 벡터)를 derivation할 수 있다. 이때 도 27과 같은 방법을 사용할 수 있다. 도 27의 식에서 주변의 affine motion prediction된 block의 top-left, top-right, bottom-left의 MV(모션 벡터) 혹은 control point MV(컨트롤 포인트 모션 벡터)를 각각 (v_E0x, v_E0y), (v_E1x, v_E1y), (v_E2x, v_E2y)일 수 있다. 또한 주변의 affine motion prediction된 block의 top-left, top-right, bottom-left의 좌표를 각각 (x_E0, y_E0), (x_E1, y_E1), (x_E2, y_E2)라고 할 수 있다. 이때 도 27에 따라 현재 block의 control point MV(컨트롤 포인트 모션 벡터)의 predictor 또는 control point MV(컨트롤 포인트 모션 벡터)인 (v_0x, v_0y), (v_1x, v_1y)를 계산할 수 있다.
도 28은 본 개시의 일 실시예에 따른 affine motion predictor derivation을 나타낸 도면이다.
앞서 설명한 것처럼 affine motion compensation(어파인 모션 보상)을 위해 다수의 control motion MV(컨트롤 포인트 모션 벡터) 또는 다수의 control point MV predictor(컨트롤 포인트 모션 벡터 에측자)가 필요할 수 있다. 이때 어떤 control motion MV(컨트롤 포인트 모션 벡터) 또는 control point MV predictor(컨트롤 포인트 모션 벡터 예측자)로부터 다른 control motion MV(컨트롤 포인트 모션 벡터) 또는 control point MV predictor(컨트롤 포인트 모션 벡터 예측자)를 유도할 수 있다.
예를 들면 앞선 도면들에서 설명한 방법으로 2개의 control point MV(컨트롤 포인트 모션 벡터) 혹은 2개의 control point MV predictor(컨트롤 포인트 모션 벡터 예측자)를 만들어냈을 때 이를 기초로 또다른 control point MV(컨트롤 포인트 모션 벡터) 혹은 또다른 control point MV predictor(컨트롤 포인트 모션 벡터 예측자)를 생성할 수 있다.
도 28을 참조하면 top-left, top-right, bottom-left의 control point MV predictor(컨트롤 포인트 모션 벡터 예측자) 또는 control point MV(컨트롤 포인트 모션 벡터)인 mv0, mv1, mv2를 생성하는 방법을 나타내고 있다. 도면의 x, y는 각각 x-component, y-component를 나타내고 있고, 현재 block size가 w*h일 수 있다.
도 29는 본 개시의 일 실시예에 따른 control point motion vector 생성 방법을 나타낸 도면이다.
본 개시의 일 실시예를 따르면 현재 block을 affine MC(어파인 모션 보상)하기 위해서 control point MV(컨트롤 포인트 모션 벡터)에 대한 predictor를 만들고 이에 difference를 더해서 control point MV(컨트롤 포인트 모션 벡터)를 결정하는 것이 가능하다. 일 실시예를 따르면 도 23 내지 도 26에서 설명한 방법으로 control point MV의 predictor를 만드는 것이 가능하다. Difference는 인코더에서 디코더로 시그날링 되는 것이 가능하다.
도 29를 참조하면 각 control point MV(컨트롤 포인트 모션 벡터)에 대한 difference가 존재할 수 있다. 또한 각 control point MV(컨트롤 포인트 모션 벡터)에 대한 difference가 각각 시그날링될 수 있다. 도 29 (a)는 4-parameter model의 control point MV인 mv0, mv1을 결정하는 방법을 나타내고 있고, 도 29 (b)는 6-parameter model의 control point MV(컨트롤 포인트 모션 벡터)인 mv0, mv1, mv2를 결정하는 방법을 나타내고 있다. 각 control point MV(컨트롤 포인트 모션 벡터)에 대한 difference인 mvd0, mvd1, mvd2를 predictor에 더함으로써 control point MV(컨트롤 포인트 모션 벡터)를 결정하고 있다.
도 29에서 상단 바(bar)로 나타낸 것은 control point MV(컨트롤 포인트 모션 벡터)의 predictor일 수 있다.
도 30는 도 29에서 설명한 방법을 통한 motion vector difference 결정 방법을 나타낸 도면이다.
일 실시예로 도 10에서 설명한 방법으로 motion vector difference(모션 벡터 차분)가 시그날링될 수 있다. 그리고 시그날링된 방법으로 결정한 motion vector difference(모션 벡터 차분)가 도 30의 lMvd일 수 있다. 또한 도 29에서 나타낸 시그날링되는 mvd(모션 벡터 차분), 즉 mvd0, mvd1, mvd2와 같은 값이 도 30의 lMvd일 수 있다. 도 29에서 설명한 것처럼 시그날링된 mvd(모션 벡터 차분)를 control point MV(컨트롤 포인트 모션 벡터)의 predictor(에측자)와의 difference(차분)로 결정할 수 있고, 그 결정한 difference(차분)가 도 30의 MvdL0와 MvdL1일 수 있다. L0는 reference list 0(제 0 참조 픽쳐 리스트)를, L1은 reference list 1(제 1 참조 픽쳐 리스트)을 나타낼 수 있다. compIdx는 component index로 x, y component 등을 나타낼 수 있다.
도 31은 본 개시의 일 실시예에 따른 control point motion vector 생성 방법을 나타낸 도면이다.
본 개시의 일 실시예를 따르면 현재 block을 affine MC(어파인 모션 보상)하기 위해서 control point MV(컨트롤 포인트 모션 벡터)에 대한 predictor를 만들고 이에 difference를 더해서 control point MV(컨트롤 포인트 모션 벡터)를 결정하는 것이 가능하다. 일 실시예를 따르면 도 23 내지 도 26에서 설명한 방법으로 control point MV(컨트롤 포인트 모션 벡터)의 predictor를 만드는 것이 가능하다. Difference(차분)는 인코더에서 디코더로 시그날링 되는 것이 가능하다.
도 31을 참조하면 각 control point MV(컨트롤 포인트 모션 벡터)에 대한 difference(차분)에 대한 predictor(예측자)가 존재할 수 있다. 예를 들어 어떤 control point MV(컨트롤 포인트 모션 벡터)의 difference(차분)를 기초로 다른 control point MV(컨트롤 포인트 모션 벡터)의 difference(차분)를 결정할 수 있다. 이것은 control point MV(컨트롤 포인트 모션 벡터)에 대한 difference(차분) 간의 유사성에 기반한 것일 수 있다. 유사하기 때문에 predictor를 결정하면 predictor와의 차이를 적게 만들 수 있는 것일 수 있다. 이때 control point MV(컨트롤 포인트 모션 벡터)에 대한 difference predictor(차분 예측자)가 시그날링되고, control point MV(컨트롤 포인트 모션 벡터)에 대한 difference predictor(차분 예측자)와의 difference(차분)가 시그날링될 수 있다.
도 31 (a)는 4-parameter model의 control point MV(컨트롤 포인트 모션 벡터)인 mv0, mv1을 결정하는 방법을 나타내고 있고, 도 31 (b)는 6-parameter model의 control point MV(컨트롤 포인트 모션 벡터)인 mv0, mv1, mv2를 결정하는 방법을 나타내고 있다.
도 31을 참조하면 각 control point MV에 대한 difference를 control point MV 0인 mv0의 difference(mvd0)를 기초로 control point MV에 대한 difference 및 control point MV를 결정하고 있다. 도 31에 나타낸 mvd0, mvd1, mvd2를 인코더에서 디코더로 시그날링할 수 있다. 도 29에서 설명한 방법과 비교하여 도 31의 방법은 도 29와 같은 mv0, mv1, mv2이고 같은 predictor를 사용하더라도 시그날링하는 mvd1과 mvd2의 값이 다를 수 있다. Control point MV mv0, mv1, mv2의 predictor와의 difference가 유사하다면 도 31의 방법을 사용했을 때 도 29의 방법을 사용했을 때보다 mvd1과 mvd2의 절대값이 적을 가능성이 있으며 이에 따라 mvd1과 mvd2의 시그날링 오버헤드를 줄일 수 있다. 도 31을 참조하면 mv1의 predictor와의 difference를 (mvd1+mvd0), mv2의 predictor와의 difference를 (mvd2+mvd0)로 결정할 수 있다.
도 31에서 상단 바(bar)로 나타낸 것은 control point MV의 predictor일 수 있다.
도 32은 도 31에서 설명한 방법을 통한 motion vector difference 결정 방법을 나타낸 도면이다.
일 실시예로 도 10 또는 도 33에서 설명한 방법으로 motion vector difference(모션 벡터 차분)가 시그날링될 수 있다. 그리고 시그날링된 파라미터에 기초하여 결정된 motion vector difference(모션 벡터 차분)가 도 32의 lMvd일 수 있다. 또한 도 31에서 나타낸 시그날링되는 mvd, 즉 mvd0, mvd1, mvd2와 같은 값이 도 32의 lMvd일 수 있다.
도 32의 MvdLX는 각 control point MV(컨트롤 포인트 모션 벡터)와 predictor(예측자)와의 차이일 수 있다. 즉 (mv - mvp)일 수 있다. 이때 도 31에서 설명한 것처럼 control point MV 0(mv_0)에 대해서는 시그날링된 motion vector difference를 바로 control point MV에 대한 difference(MvdLX)를 사용할 수 있고, 다른 control point MV(mv_1, mv_2)에 대해서는 시그날링된 motion vector difference(도 31에서 mvd1, mvd2) 및 control point MV 0(mv_0)에 대해 시그날링된 motion vector difference(도 31에서 mvd0)에 기초히여 control point MV의 difference인 MvdLX를 결정하여 사용할 수 있다.
도 32에서 LX는 reference list X(참조 픽쳐 리스트 X)를 나타낼 수 있다. compIdx는 component index로 x, y component 등을 나타낼 수 있다. cpIdx는 control point index를 나타낼 수 있다. cpIdx는 도 31에서 나타내는 0, 1 또는 0, 1, 2를 의미할 수 있다.
도 10, 12, 13 등에서 나타내는 값들에 motion vector difference의 resolution을 고려할 수 있다. 예를 들어 resolution이 R일 때 도면의 lMvd에 lMvd*R의 값을 사용할 수 있다.
도 33은 본 개시의 일 실시예에 따른 motion vector difference syntax를 나타낸 도면이다.
도 33을 참조하면 도 10에서 설명한 것과 유사한 방법으로 motion vector difference를 코딩할 수 있다. 이때 코딩은 cpIdx, control point index에 따라서 따로 될 수 있다.
도 34는 본 개시의 일 실시예에 따른 상위 레벨 시그날링 구조를 나타낸 도면이다.
본 개시의 일 실시예를 따르면 하나 이상의 상위 레벨 시그날링이 존재할 수 있다. 상위 레벨 시그날링은 상위 레벨에서의 시그날링을 의미할 수 있다. 상위 레벨은 어떤 단위를 포함하는 단위일 수 있다. 예를 들어 현재 block(블락) 또는 현재 coding unit(코딩 유닛)의 상위 레벨은 CTU, slice, tile, tile group, picture, sequence 등을 포함할 수 있다. 상위 레벨 시그날링은 해당 상위 레벨의 하위 레벨에 대하여 영향을 미칠 수 있다. 예를 들어 상위 레벨이 sequence인 경우, sequence의 하위인 CTU, slice, tile, tile group, picture 단위에 영향을 미칠 수 있다. 여기서 영향을 미친다는 것은 상위 레벨 시그날링이 하위 레벨에 대한 인코딩 또는 디코딩에 영향을 미친다는 것이다.
또한 상위 레벨 시그날링은 어떤 mode를 사용가능한지 여부를 나타내는 시그날링을 포함할 수 있다. 도 34를 참조하면 상위 레벨 시그날링은 sps_modeX_enabled_flag를 포함할 수 있다. 일 실시예를 따르면 sps_modeX_enabled_flag에 기초하여 mode modeX를 사용 가능한지 여부를 판단할 수 있다. 예를 들어 sps_modeX_enabled_flag가 어떤 값일 때는 mode modeX를 사용할 수 없을 수 있다. 또한 sps_modeX_enabled_flag가 다른 어떤 값일 때는 mode modeX를 사용하는 것이 가능할 수 있다. 또한 sps_modeX_enabled_flag가 다른 어떤 값일 때는 추가적인 시그날링에 기초하여 mode modeX를 사용하는지 여부를 판단할 수 있다. 예를 들어 상기 어떤 값은 0일 수 있고, 상기 다른 어떤 값은 1일 수 있다. 하지만 이에 한정되는 것은 아니며, 상기 어떤 값은 1일 수 있고, 상기 다른 어떤 값은 0일 수 있다.
본 개시의 일 실시예를 따르면 affine motion compensation(어파인 모션 보상)이 사용될 수 있는지를 나타내는 시그날링이 존재할 수 있다. 예를 들면 이 시그날링은 상위 레벨 시그날링일 수 있다. 도 34를 참조하면 이 시그날링은 sps_affine_enabled_flag(어파인 가능 플래그)일 수 있다. 도 2 및 도 7을 참조하면, 시그날링은 비트스트림을 통하여 인코더에서 디코더로 전송되는 신호를 의미할 수 있다. 디코더는 비트스트림으로부터 어파인 가능 플래그를 파싱할 수 있다.
예를 들어 sps_affine_enabled_flag(어파인 가능 플래그)가 0인 경우 affine motion compensation(어파인 모션 보상)이 사용되지 않도록 syntax가 제한될 수 있다. 또한 sps_affine_enabled_flag(어파인 가능 플래그)가 0인 경우 inter_affine_flag(인터 어파인 플래그), cu_affine_type_flag(코딩 유닛 어파인 타입 플래그)가 존재하지 않을 수 있다.
예를 들어 inter_affine_flag(인터 어파인 플래그)는 block에서 affine MC(어파인 모션 보상)가 사용되는지 여부를 나타내는 시그날링일 수 있다. 도 2 및 도 7을 참조하면, 시그날링은 비트스트림을 통하여 인코더에서 디코더로 전송되는 신호를 의미할 수 있다. 디코더는 비트스트림으로부터 inter_affine_flag(인터 어파인 플래그)를 파싱할 수 있다.
또한 cu_affine_type_flag(코딩 유닛 어파인 타입 플래그)는 block(블락)에서 어떤 type의 affine MC(어파인 모션 보상)가 사용되는지 나타내는 시그날링일 수 있다. 또한 여기서 type은 4-parameter affine model인지, 6-parameter affine model인지를 나타낼 수 있다. 또한 sps_affine_enabled_flag(어파인 가능 플래그)가 1인 경우 affine model compensation(어파인 모션 보상)이 사용되는 것이 가능하다.
Affine motion compensation(어파인 모션 보상)은 affine model based motion compensation(어파인 모델 기반 모션 보상) 또는 affine model based motion compensation for inter prediction(인터 예측에 대한 어파인 모델 기반 모션 보상)을 의미할 수 있다.
또한 본 개시의 일 실시예를 따르면 어떤 mode의 특정 type을 사용할 수 있는지를 나타내는 시그날링이 존재할 수 있다. 예를 들면 특정 type의 affine motion compensation을 사용할 수 있는지를 나타내는 시그날링이 존재할 수 있다. 예를 들면 이 시그날링은 상위 레벨 시그날링일 수 있다. 도 34를 참조하면 이 시그날링은 sps_affine_type_flag일 수 있다. 또한 상기 특정 type은 6-parameter affine model을 의미할 수 있다. 예를 들어 sps_affine_type_flag가 0인 경우 6-parameter affine model이 사용되지 않도록 syntax가 제한될 수 있다. 또한 sps_affine_type_flag가 0인 경우 cu_affine_type_flag가 존재하지 않을 수 있다. 또한 만약 sps_affine_type_flag가 1인 경우 6-parameter affine model이 사용될 수 있다. 만약 sps_affine_type_flag가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다.
또한 본 개시의 일 실시예를 따르면 어떤 mode의 특정 type을 사용할 수 있는지를 나타내는 시그날링은 상기 어떤 mode를 사용할 수 있는지 나타내는 시그날링이 존재하는 경우에 존재하는 것이 가능하다. 예를 들어 상기 어떤 mode를 사용할 수 있는지 나타내는 시그날링 값이 1인 경우, 상기 어떤 mode의 특정 type을 사용할 수 있는지를 나타내는 시그날링을 parsing하는 것이 가능하다. 또한 상기 어떤 mode를 사용할 수 있는지 나타내는 시그날링 값이 0인 경우, 상기 어떤 mode의 특정 type을 사용할 수 있는지를 나타내는 시그날링을 parsing하지 않는 것이 가능하다. 예를 들어 어떤 mode를 사용할 수 있는지 나타내는 시그날링은 sps_affine_enabled_flag(어파인 가능 플래그)를 포함할 수 있다. 또한 어떤 mode의 특정 type을 사용할 수 있는지를 나타내는 시그날링은 sps_affine_type_flag(어파인 가능 플래그)를 포함할 수 있다. 도 34를 참조하면 sps_affine_enabled_flag(어파인 가능 플래그)가 1인 경우 sps_affine_type_flag를 parsing하는 것이 가능하다. 또한 sps_affine_enabled_flag(어파인 가능 플래그)가 0인 경우 sps_affine_type_flag를 parsing하지 않는 것이 가능하고, 그 값을 0으로 infer(암시)할 수 있다.
또한 앞서 설명한 것처럼 adaptive motion vector resolution(AMVR; 적응적인 모션 벡터 해상도)를 사용하는 것이 가능하다. AMVR의 resolution set를 상황에 따라 다르게 사용하는 것이 가능하다. 예를 들어 prediction mode에 따라 AMVR의 resolution set를 다르게 사용하는 것이 가능하다. 예를 들면 AMVP와 같은 regular inter prediction을 사용할 때와 affine MC(어파인 모션 보상)를 사용할 때의 AMVR resolution set가 다를 수 있다. 또한 AMVP와 같은 regular inter prediction에 적용되는 AMVR은 motion vector difference(모션 벡터 차분)에 적용되는 것일 수 있다. 또는 AMVP(Advanced Motion Vector Prediction)와 같은 regular inter prediction에 적용되는 AMVR은 motion vector predictor에 적용되는 것일 수 있다. 또한 affine MC(어파인 모션 보상)에 적용되는 AMVR은 control point motion vector(컨트롤 포인트 모션 벡터) 또는 control point motion vector difference(컨트롤 포인트 모션 벡터 차분)에 적용되는 것일 수 있다.
또한 본 개시의 일 실시예를 따르면 AMVR을 사용할 수 있는지를 나타내는 시그날링이 존재할 수 있다. 이 시그날링은 상위 레벨 시그날링일 수 있다. 도 34를 참조하면 sps_amvr_enabled_flag(AMVR 가능 플래그)가 존재할 수 있다. 도 2 및 도 7을 참조하면, 시그날링은 비트스트림을 통하여 인코더에서 디코더로 전송되는 신호를 의미할 수 있다. 디코더는 비트스트림으로부터 AMVR 가능 플래그를 파싱할 수 있다.
본 개시의 일 실시예에 따른 sps_amvr_enabled_flag(AMVR 가능 플래그)는 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 나타낼 수 있다. 또한 본 개시의 일 실시예에 따른 sps_amvr_enabled_flag(AMVR 가능 플래그)는 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타낼 수 있다. 예를 들어, 본 개시의 일 실시예를 따르면 sps_amvr_enabled_flag(AMVR 가능 플래그)가 1인 경우 AMVR이 motion vector coding에 사용되는 것이 가능할 수 있다. 또한, 본 개시의 일 실시예를 따르면 sps_amvr_enabled_flag(AMVR 가능 플래그)가 1인 경우 AMVR이 motion vector coding에 사용될 수 있다. 또한 sps_amvr_enabled_flag(AMVR 가능 플래그)가 1인 경우 어떤 resolution이 사용되는지 가리키기 위한 추가적인 시그날링이 존재할 수 있다. 또한 sps_amvr_enabled_flag(AMVR 가능 플래그)가 0인 경우 AMVR이 motion vector coding에 사용되지 않을 수 있다. 또한, sps_amvr_enabled_flag(AMVR 가능 플래그)가 0인 경우 AMVR이 motion vector coding에 사용 가능하지 않을 수 있다. 본 개시의 일 실시예를 따르면 sps_amvr_enabled_flag(AMVR 가능 플래그)에 해당하는 AMVR은 regular inter prediction에 사용되는 것을 의미할 수 있다. 예를 들면 sps_amvr_enabled_flag(AMVR 가능 플래그)에 해당하는 AMVR은 affine MC(어파인 모션 보상)에 사용되는 것을 의미하는 것이 아닐 수 있다. 또한 affine MC(어파인 모션 보상) 사용 여부는 inter_affine_flag(인터 어파인 플래그)에 의해 나타내어지는 것이 가능하다. 즉, sps_amvr_enabled_flag(AMVR 가능 플래그)에 해당하는 AMVR은 inter_affine_flag(인터 어파인 플래그)가 0인 경우에 사용되는 것을 의미하거나, inter_affine_flag(인터 어파인 플래그)가 1인 경우에 사용되는 것을 의미하지 않을 수 있다.
또한 본 개시의 일 실시예를 따르면 affine MC(어파인 모션 보상)에 AMVR이 사용될 수 있는지를 나타내는 시그날링이 존재할 수 있다. 이 시그날링은 상위 레벨 시그날링일 수 있다. 도 34를 참조하면 affine MC(어파인 모션 보상)에 AMVR이 사용될 수 있는지를 나타내는 시그날링인 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그) 가 존재할 수 있다. 도 2 및 도 7을 참조하면, 시그날링은 비트스트림을 통하여 인코더에서 디코더로 전송되는 신호를 의미할 수 있다. 디코더는 비트스트림으로부터 어파인 AMVR 가능 플래그를 파싱할 수 있다.
sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)는 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 나타낼 수 있다. 또한 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)는 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타낼 수 있다. 일 실시예를 따르면 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 1인 경우 AMVR이 affine inter mode motion vector coding에 사용되는 것이 가능할 수 있다. 또한, sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 1인 경우 AMVR이 affine inter mode motion vector coding에 사용될 수 있다. 또한 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 0인 경우 affine inter mode motion vector coding에 AMVR을 사용할 수 없을 수 있다. sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 0인 경우 affine inter mode motion vector coding에 AMVR을 사용되지 않을 수 있다.
예를 들면 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 1인 경우 inter_affine_flag(인터 어파인 플래그)가 1인 경우에 해당하는 AMVR이 사용되는 것이 가능하다. 또한 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 1인 경우 어떤 resolution이 사용되는지 지시하기 위한 추가적인 시그날링이 존재할 수 있다. 또한 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 0인 경우 inter_affine_flag(인터 어파인 플래그)가 1인 경우에 해당하는 AMVR이 사용될 수 없을 수 있다.
도 35은 본 개시의 일 실시예에 따른 coding unit syntax 구조를 나타낸 도면이다.
도 34에서 설명한 것처럼 AMVR을 사용하는 상위 레벨 시그날링에 기초하여 resolution을 지시하기 위한 추가적인 시그날링이 존재할 수 있다. 도 34를 참조하면 resolution을 지시하기 위한 추가적인 시그날링은 amvr_flag 또는 amvr_precision_flag를 포함할 수 있다. amvr_flag 또는 amvr_precision_flag는 모션 벡터 차분의 해상도에 대한 정보일 수 있다.
일 실시예를 따르면 amvr_flag가 0인 경우가 나타내는 시그날링이 존재할 수 있다. 또한 amvr_flag가 1인 경우 amvr_precision_flag가 존재할 수 있다. 또한 amvr_flag가 1인 경우 amvr_precision_flag에도 기초하여 resolution이 결정될 수 있다. 예를 들어 amvr_flag가 0인 경우 1/4 resolution일 수 있다. 또한 만약 amvr_flag가 존재하지 않는 경우 CuPredMode에 기초하여 amvr_flag 값을 infer할 수 있다. 예를 들어 CuPredMode가 MODE_IBC인 경우 amvr_flag 값을 1로 infer하고, CuPredMode가 MODE_IBC가 아니거나 CuPredMode(Coding unit prediction mode)가 MODE_INTER인 경우 amvr_flag 값을 0으로 infer할 수 있다.
또한 inter_affine_flag(인터 어파인 플래그)가 0이고, amvr_precision_flag가 0인 경우 1-pel resolution을 사용할 수 있다. 또한 inter_affine_flag(인터 어파인 플래그)가 1이고, amvr_precision_flag가 0인 경우 1/16-pel resolution을 사용할 수 있다. 또한 inter_affine_flag(인터 어파인 플래그)가 0이고, amvr_precision_flag가 1인 경우 4-pel resolution을 사용할 수 있다. 또한 inter_affine_flag(인터 어파인 플래그)가 1이고, amvr_precision_flag가 1인 경우 1-pel resolution을 사용할 수 있다.
만약 amvr_precision_flag가 0인 경우 그 값을 0으로 infer할 수 있다.
일 실시예를 따르면 resolution은 MvShift 값에 의해 적용될 수 있다. 또한 MvShift는 모션 벡터 차분의 해상도에 대한 정보인 amvr_flag 및 amvr_precision_flag에 의해 결정될 수 있다. 예를 들어 inter_affine_flag가 0인 경우 MvShift 값은 아래와 같이 결정될 수 있다.
MvShift = (amvr_flag + amvr_precision_flag) << 1
또한 MvShift 값에 기초하여 Mvd(motion vector difference; 모션 벡터 차분) 값이 shift될 수 있다. 예를 들면 Mvd(모션 벡터 차분)는 아래와 같이 shift되고, 이에 따라 AMVR의 resolution이 적용되는 것일 수 있다.
MvdLX = MvdLX << (MvShift + 2)
또다른 예로 inter_affine_flag(인터 어파인 플래그)가 1인 경우 MvShift 값은 아래와 같이 결정될 수 있다.
MvShift = amvr_precision_flag ? (amvr_precision_flag << 1) : ( -(amvr_flag << 1) )
또한 MvShift 값에 기초하여 MvdCp(컨트롤 포인트 모션 벡터 차분) 값이 shift될 수 있다. MvdCP는 control point motion vector difference 또는 control point motion vector일 수 있다. 예를 들면 MvdCp(컨트롤 포인트 모션 벡터 차분)는 아래와 같이 shift되고, 이에 따라 AMVR의 resolution이 적용되는 것일 수 있다.
MvdCpLX = MvdCpLX << (MvShift + 2)
또한 Mvd 또는 MvdCp는 mvd_coding에 의해 시그날링되는 값일 수 있다.
도 35을 참조하면 CuPredMode가 MODE_IBC인 경우 모션 벡터 차분의 해상도에 대한 정보인 amvr_flag가 존재하지 않을 수 있다. 또한 CuPredMode가 MODE_INTER인 경우 모션 벡터 차분의 해상도에 대한 정보인 amvr_flag가 존재할 수 있고, 이때 어떤 조건을 만족시키는 경우 amvr_flag를 parsing하는 것이 가능할 수 있다.
본 개시의 일 실시예를 따르면 AMVR이 사용될 수 있는지를 나타내는 상위 레벨 시그날링 값에 기초하여 AMVR 관련 syntax elements를 parsing할지를 결정할 수 있다. 예를 들어 AMVR이 사용될 수 있는지를 나타내는 상위 레벨 시그날링 값이 1인 경우 AMVR 관련 syntax elements를 parsing하는 것이 가능하다. 또한 AMVR이 사용될 수 있는지를 나타내는 상위 레벨 시그날링 값이 0인 경우 AMVR 관련 syntax elements를 parsing하지 않을 수 있다. 도 35을 참조하면 CuPredMode가 MODE_IBC인 경우 sps_amvr_enabled_flag(AMVR 가능 플래그)가 0인 경우 모션 벡터 차분의 해상도에 대한 정보인 amvr_precision_flag를 parsing하지 않을 수 있다. 또한 CuPredMode가 MODE_IBC인 경우 sps_amvr_enabled_flag(AMVR 가능 플래그)가 1인 경우 모션 벡터 차분의 해상도에 대한 정보인 amvr_precision_flag를 parsing할 수 있다. 이때 parsing하기 위한 추가적인 조건이 고려될 수 있다.
예를 들어 MvdLX(복수의 모션 벡터 차분들) 값 중 0이 아닌 것이 적어도 하나 존재하는 경우 amvr_precision_flag를 parsing하는 것이 가능하다. MvdLX는 reference list LX에 대한 Mvd 값일 수 있다. 또한 Mvd(모션 벡터 차분)는 mvd_coding을 통해 시그날링될 수 있다. LX는 L0(제 0 참조 픽쳐 리스트), L1(제 1 참조 픽쳐 리스트)을 포함할 수 있다. 또한 MvdLX는 x축, y축 각각에 해당하는 성분이 존재할 수 있다. 예를 들어 x축은 picture의 가로축에 해당하고, y축은 picture의 세로축에 해당할 수 있다. 도 35을 참조하면 MvdLX[x0][y0][0], MvdLX[x0][y0][1]에서 [0], [1]이 각각 x축, y축 성분에 대한 것임을 지시할 수 있다. 또한 CuPredMode가 MODE_IBC인 경우 L0만 사용하는 것이 가능하다. 도 35을 참조하면 1) sps_amvr_enabled_flag가 1이고, 2) MvdL0[x0][y0][0] 또는 MvdL0[x0][y0][1]가 0이 아닌 경우 amvr_precision_flag를 parsing할 수 있다. 또한 1) sps_amvr_enabled_flag(AMVR 가능 플래그)가 0이거나 2) MvdL0[x0][y0][0]과 MvdL0[x0][y0][1] 모두 0인 경우 amvr_precision_flag를 parsing하지 않을 수 있다.
또한 CuPredMode가 MODE_IBC가 아닌 경우가 있을 수 있다. 이때 도 35을 참조하면 sps_amvr_enabled_flag(AMVR 가능 플래그)가 1이고, inter_affine_flag(인터 어파인 플래그)가 0이고, MvdLX(복수의 모션 벡터 차분들) 값 중 0이 아닌 것이 적어도 하나 존재하는 경우 amvr_flag를 parsing할 수 있다. 여기서, amvr_flag는 모션 벡터 차분의 해상도에 대한 정보일 수 있다. 또한, 이미 설명한 바와 같이 sps_amvr_enabled_flag(AMVR 가능 플래그)가 1인 것은 적응적인 모션 벡터 차분 해상도의 사용을 나타낼 수 있다. 또한, inter_affine_flag(인터 어파인 플래그)가 0인 것은 현재 블락에 대해 어파인 모션 보상을 사용하지 않음을 나타낼 수 있다. 또한 도 34에서 설명한 바와 같이 amvr_flag과 같은 모션 벡터 차분의 해상도에 대한 정보에 기초하여 현재 블락에 대한 상기 복수의 모션 벡터 차분이 수정될 수 있다. 이 조건을 conditionA라고 칭할 수 있다.
또한 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 1이고, inter_affine_flag(인터 어파인 플래그)가 1이고, MvdCpLX(복수의 컨트롤 포인트 모션 벡터 차분들) 값 중 0이 아닌 것이 적어도 하나 존재하는 경우 amvr_flag를 parsing할 수 있다. 여기서, amvr_flag는 모션 벡터 차분의 해상도에 대한 정보일 수 있다. 또한, 이미 설명한 바와 같이 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 1인 것은 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있음을 나타낼 수 있다. 또한, inter_affine_flag(인터 어파인 플래그)가 1인 것은 현재 블락에 대해 어파인 모션 보상의 사용을 나타낼 수 있다. 또한 도 34에서 설명한 바와 같이 amvr_flag과 같은 모션 벡터 차분의 해상도에 대한 정보에 기초하여 현재 블락에 대한 상기 복수의 컨트롤 포인트 모션 벡터 차분이 수정될 수 있다. 이 조건을 conditionB라고 칭할 수 있다.
또한 conditionA 또는 conditionB를 만족하는 경우 amvr_flag를 parsing할 수 있다. 또한 conditionA와 conditionB를 모두 만족하지 않는 경우 모션 벡터 차분의 해상도에 대한 정보인 amvr_flag를 parsing하지 않을 수 있다. 즉, 1) sps_amvr_enabled_flag(AMVR 가능 플래그)가 0이거나 inter_affine_flag(인터 어파인 플래그)가 1이거나 MvdLX(복수의 모션 벡터 차분들)가 모두 0이고, 2) sps_affine_amvr_enabled_flag가 0이거나 inter_affine_flag(인터 어파인 플래그)가 0이거나 MvdCpLX(복수의 컨트롤 포인트 모션 벡터 차분들) 값이 모두 0인 경우, amvr_flag를 parsing하지 않을 수 있다.
또한 amvr_flag 값에 기초하여 amvr_precision_flag parsing 여부를 결정할 수 있다. 예를 들어 amvr_flag 값이 1인 경우 amvr_precision_flag를 parsing할 수 있다. 또한 amvr_flag 값이 0인 경우 amvr_precision_flag를 parsing하지 않을 수 있다.
또한 MvdCpLX(복수의 컨트롤 포인트 모션 벡터 차분들)는 control point motion vector에 대한 difference를 의미할 수 있다. 또한 MvdCpLX(복수의 컨트롤 포인트 모션 벡터 차분들)는 mvd_coding을 통해 시그날링될 수 있다. LX는 L0(제 0 참조 픽쳐 리스트), L1(제 1 참조 픽쳐 리스트)을 포함할 수 있다. 또한 MvdCpLX는 control point motion vector 0, 1, 2 등에 해당하는 성분이 존재할 수 있다. 예를 들어 control point motion vector 0, 1, 2 등은 현재 block을 기준으로한 기설정된 위치에 해당하는 control point motion vector일 수 있다.
도 35을 참조하면 MvdCpLX[x0][y0][0][], MvdCpLX[x0][y0][1][], MvdCpLX[x0][y0][2][]에서 [0], [1], [2]가 각각 control point motion vector 0, 1, 2에 해당하는 것임을 지시할 수 있다. 또한 control point motion vector 0에 해당하는 MvdCpLX(복수의 컨트롤 포인트 모션 벡터 차분들) 값은 다른 control point motion vector들에도 사용될 수 있다. 예를 들면 도 47에서 사용된 것과 같이 control point motion vector 0를 사용할 수 있다. 또한 MvdCpLX(복수의 컨트롤 포인트 모션 벡터 차분들)는 x축, y축 각각에 해당하는 성분이 존재할 수 있다. 예를 들어 x축은 picture의 가로축에 해당하고, y축은 picture의 세로축에 해당할 수 있다. 도 35을 참조하면 MvdCpLX[x0][y0][][0], MvdCpLX[x0][y0][][1]에서 [0], [1]이 각각 x축, y축 성분에 대한 것임을 지시할 수 있다.
도 36은 본 개시의 일 실시예에 따른 상위 레벨 시그날링 구조를 나타낸 도면이다.
도 34 내지 도 35에서 설명한 것과 같은 상위 레벨 시그날링들이 존재할 수 있다. 예를 들어 sps_affine_enabled_flag(어파인 가능 플래그), sps_affine_amvr_enabled_flag, sps_amvr_enabled_flag(AMVR 가능 플래그), sps_affine_type_flag 등이 존재할 수 있다.
본 개시의 일 실시예를 따르면 상기 상위 레벨 시그날링들은 parsing dependency를 가질 수 있다. 예를 들어 어떤 상위 레벨 시그날링 값에 기초하여 다른 상위 레벨 시그날링을 parsing할지 여부를 결정할 수 있다.
본 개시의 일 실시예에 따르면 affine MC(어파인 모션 보상)를 사용할 수 있는지에 기초하여 affine AMVR을 사용할 수 있는지를 결정하는 것이 가능하다. 예를 들어 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링에 기초하여 affine AMVR을 사용할 수 있는지를 결정할 수 있다. 더 구체적으로 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링에 기초하여 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링 parsing 여부를 결정하는 것이 가능하다.
일 실시예로 affine MC를 사용할 수 있는 경우에 affine AMVR을 사용할 수 있는 것이 가능하다. 또한 affine MC를 사용할 수 없는 경우에는 affine AMVR을 사용할 수 없을 수 있다.
더 구체적으로 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 1인 경우 affine AMVR을 사용할 수 있을 수 있다. 이때 추가적인 시그날링이 존재하는 것이 가능하다. 또한 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 0인 경우 affine AMVR을 사용할 수 없을 수 있다. 예를 들어 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 1인 경우 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 parsing 할 수 있다. 또한 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 0인 경우 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 parsing하지 않을 수 있다. 또한 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 존재하지 않는 경우 그 값을 infer할 수 있다. 예를 들면 0으로 infer할 수 있다. 또다른 예로 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 기초로 infer할 수 있다. 또다른 예로 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 기초로 infer할 수 있다.
일 실시예를 따르면 affine AMVR은 도 34 내지 도 35에서 설명한 affine MC에 사용하는 AMVR일 수 있다. 예를 들어 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링은 sps_affine_enabled_flag(어파인 가능 플래그)일 수 있다. 또한 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링은 sps_affine_amvr_enabled_flag일 수 있다.
도 36을 참조하면 sps_affine_enabled_flag(어파인 가능 플래그)가 1인 경우 sps_affine_amvr_enabled_flag를 parsing할 수 있다. 또한 sps_affine_enabled_flag(어파인 가능 플래그)가 0인 경우 sps_affine_amvr_enabled_flag를 parsing하지 않을 수 있다. 또한 sps_affine_amvr_enabled_flag가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다.
본 개시의 실시예는 affine AMVR은 affine MC를 사용하는 경우에 의미있을 수 있기 때문일 수 있다.
도 37은 본 개시의 일 실시예에 따른 상위 레벨 시그날링 구조를 나타낸 도면이다.
도 34 내지 도 35에서 설명한 것과 같은 상위 레벨 시그날링들이 존재할 수 있다. 예를 들어 sps_affine_enabled_flag(어파인 가능 플래그), sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그), sps_amvr_enabled_flag(AMVR 가능 플래그), sps_affine_type_flag 등이 존재할 수 있다.
본 개시의 일 실시예를 따르면 상기 상위 레벨 시그날링들은 parsing dependency(파싱 의존성)를 가질 수 있다. 예를 들어 어떤 상위 레벨 시그날링 값에 기초하여 다른 상위 레벨 시그날링을 parsing할지 여부를 결정할 수 있다.
본 개시의 일 실시예에 따르면 AMVR을 사용할 수 있는지에 기초하여 affine AMVR을 사용할 수 있는지를 결정하는 것이 가능하다. 예를 들어 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링에 기초하여 affine AMVR을 사용할 수 있는지를 결정할 수 있다. 더 구체적으로 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링에 기초하여 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링 parsing 여부를 결정하는 것이 가능하다.
일 실시예로 AMVR을 사용할 수 있는 경우에 affine AMVR을 사용할 수 있는 것이 가능하다. 또한 AMVR을 사용할 수 없는 경우에는 affine AMVR을 사용할 수 없을 수 있다.
더 구체적으로 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 1인 경우 affine AMVR을 사용할 수 있을 수 있다. 이때 추가적인 시그날링이 존재하는 것이 가능하다. 또한 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 0인 경우 affine AMVR을 사용할 수 없을 수 있다. 예를 들어 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 1인 경우 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 parsing 할 수 있다. 또한 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 0인 경우 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 parsing하지 않을 수 있다. 또한 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 존재하지 않는 경우 그 값을 infer할 수 있다. 예를 들면 0으로 infer할 수 있다. 또다른 예로 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 기초로 infer할 수 있다. 또다른 예로 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 기초로 infer할 수 있다.
일 실시예를 따르면 affine AMVR은 도 34 내지 도 35에서 설명한 affine MC(어파인 모션 보상)에 사용하는 AMVR일 수 있다. 예를 들어 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링은 sps_amvr_enabled_flag(AMVR 가능 플래그)일 수 있다. 또한 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링은 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)일 수 있다.
도 37 (a)를 참조하면 sps_amvr_enabled_flag(AMVR 가능 플래그)가 1인 경우 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)를 parsing할 수 있다. 또한 sps_amvr_enabled_flag(AMVR 가능 플래그)가 0인 경우 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)를 parsing하지 않을 수 있다. 또한 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다.
본 개시의 실시예는 sequence에 따라 adaptive resolution(적응적인 해상도)이 효율적인지가 달라질 수 있기 때문일 수 있다.
또한 affine AMVR을 사용할 수 있는지 여부가 affine MC를 사용할 수 있는지 여부 및 AMVR을 사용할 수 있는지 여부를 모두 고려하여 결정될 수 있다. 예를 들어 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링과 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링에 기초하여 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링 parsing 여부를 결정하는 것이 가능하다. 일 실시예를 따르면 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링과 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 모두 1인 경우 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 parsing할 수 있다. 또한 affine MC를 사용할 수 있는지를 나타내는 상위 레벨 시그날링 또는 AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 0인 경우 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링을 parsing하지 않을 수 있다. 또한 affine AMVR을 사용할 수 있는지를 나타내는 상위 레벨 시그날링이 존재하지 않는 경우 그 값을 infer할 수 있다.
도 37 (b)를 참조하면 sps_affine_enabled_flag(어파인 가능 플래그)와 sps_amvr_enabled_flag(AMVR 가능 플래그)가 모두 1인 경우 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)를 parsing할 수 있다. 또한 sps_affine_enabled_flag(어파인 가능 플래그)와 sps_amvr_enabled_flag(AMVR 가능 플래그) 중 적어도 하나가 0인 경우 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)를 parsing하지 않을 수 있다. 또한 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다.
보다 구체적으로 도 37(b)를 설명하면, 라인(3701)에서 sps_affine_enabled_flag(어파인 가능 플래그)에 기초하여 어파인 모션 보상이 사용될 수 있는지 여부가 결정될 수 있다. 도 34 내지 35에서 이미 설명한 바와 같이 sps_affine_enabled_flag(어파인 가능 플래그)가 1 인 경우 어파인 모션 보상이 사용될 수 있음을 의미할 수 있다. 또한, sps_affine_enabled_flag(어파인 가능 플래그)가 0 인 경우 어파인 모션 보상이 사용될 수 없음을 의미할 수 있다.
도 37(b)의 라인(3701)에서 어파인 모션 보상이 사용되는 것으로 결정된 경우, 라인(3702)에서 sps_amvr_enabled_flag(AMVR 가능 플래그)에 기초하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부가 결정될 수 있다. 도 34 내지 35에서 이미 설명한 바와 같이 sps_amvr_enabled_flag(AMVR 가능 플래그)가 1 인 경우 적응적인 모션 벡터 차분 해상도가 사용됨을 의미할 수 있다. sps_amvr_enabled_flag(AMVR 가능 플래그)가 0은 경우 적응적인 모션 벡터 차분 해상도가 사용되지 않음을 의마할 수 있다.
라인(3701)에서 어파인 모션 보상이 사용되지 않는 것으로 결정된 경우, sps_amvr_enabled_flag(AMVR 가능 플래그)에 기초하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부가 결정되지 않을 수 있다. 즉, 도 37(b)의 라인(3702)이 수행되지 않을 수 있다. 구체적으로, 어파인 모션 보상이 사용되지 않은 경우, sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)는 인코더로부터 디코더에 전송되지 않을 수 있다. 즉, 디코더는 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)를 수신하지 않을 수 있고, sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 디코더에서 파싱되지 않을 수 있다. 이 때, sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)는 존재하지 않으므로 0으로 암시(infer)될 수 있다. 이미 설명한 바와 같이, sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 0인 경우, 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 나타낼 수 있다.
도 37(b)의 라인(3702)에서 적응적인 모션 벡터 차분 해상도가 사용되는 것으로 결정된 경우, 라인(3703)에서 비트스트림으로부터 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타내는 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 파싱될 수 있다.
라인(3702)에서 적응적인 모션 벡터 차분 해상도가 사용되지 않는 것으로 결정된 경우, sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)는 비트스트림으로부터 파싱되지 않을 수 있다. 즉, 도 37(b)의 라인(3703)이 수행되지 않을 수 있다. 보다 구체적으로, 어파인 모션 보상을 사용하고, 적응적인 모션 벡터 차분 해상도를 사용하지 않은 경우, sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)는 인코더로부터 디코더에 전송되지 않을 수 있다. 즉, 디코더는 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)를 수신하지 않을 수 있다. 디코더는 sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)를 비트스트림으로부터 파싱하지 않을 수 있다. 이 때, sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)는 존재하지 않으므로 0으로 암시(infer)될 수 있다. 이미 설명한 바와 같이, sps_affine_amvr_enabled_flag(어파인 AMVR 가능 플래그)가 0인 경우, 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 나타낼 수 있다.
도 37(b)와 같이 sps_affine_enabled_flag(어파인 가능 플래그)를 먼저 확인하고, sps_amvr_enabled_flag(AMVR 가능 플래그)를 다음으로 확인함으로써, 불필요한 처리과정을 줄일 수 있어 효율성이 높아질 수 있다. 예를 들어, sps_amvr_enabled_flag(AMVR 가능 플래그)가 먼저 확인되고 sps_affine_enabled_flag(어파인 가능 플래그)가 다음으로 확인되는 경우, 7번째 줄에서 sps_affine_type_flag를 도출하기 위하여 sps_affine_enabled_flag(어파인 가능 플래그)가 다시 한 번 확인되어야할 수 있다. 하지만 sps_affine_enabled_flag(어파인 가능 플래그)가 먼저 확인되고, sps_amvr_enabled_flag(AMVR 가능 플래그)를 다음으로 확인함으로써, 이러한 불필요한 과정이 줄어들 수 있다.
도 38은 본 개시의 일 실시예에 따른 coding unit syntax 구조를 나타낸 도면이다.
도 35에서 설명한 것과 같이 MvdLX 또는 MvdCpLX 중 0이 아닌 값이 적어도 하나 존재하는지 여부로 AMVR 관련 syntax를 parsing할 지 여부를 결정할 수 있다. 그러나 어떤 reference list(참조 픽쳐 리스트)를 사용하는지, affine model이 몇 개 parameter를 사용하는지 등에 따라 사용하는 MvdLX(모션 벡터 차분) 또는 MvdCpLX(컨트롤 포인트 모션 벡터 차분)가 다를 수 있다. 만약 MvdLX 또는 MvdCpLX의 초기값이 0이 아닌 경우, 현재 block에서 사용하지 않는 MvdLX 또는 MvdCpLX가 0이 아니기 때문에 불필요한 AMVR 관련 syntax element를 시그날링하게 되고, encoder와 decoder 간의 mismatch를 발생시킬 수 있다. 도 38 내지 도 39는 encoder와 decoder 간의 mismatch를 발생시키지 않는 방법을 설명할 수 있다.
일 실시예를 따르면 inter_pred_idc(참조 픽쳐 리스트에 대한 정보 )는 어떤 참조 리스트(reference list)를 사용하는지 또는 prediction 방향이 어떤지를 나타낼 수 있다. 예를 들면 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)는 PRED_L0 또는 PRED_L1 또는 PRED_BI의 값인 것이 가능하다. 만약 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_L0인 경우, reference list 0(제 0 참조 픽쳐 리스트)만을 사용하는 것일 수 있다. 또한 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_L1인 경우, reference list 1(제 1 참조 픽쳐 리스트)만을 사용하는 것일 수 있다. 또한 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_BI인 경우, reference list 0(제 0 참조 픽쳐 리스트)와 reference list 1(제 1 참조 픽쳐 리스트)을 모두 사용하는 것일 수 있다. inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_L0이거나 PRED_L1인 경우 uni-prediction일 수 있다. 또한 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_BI인 경우 bi-prediction일 수 있다.
또한 MotionModelIdc 값에 기초하여 어떤 affine model을 사용하는지 결정하는 것이 가능하다. 또한 MotionModelIdc 값에 기초하여 affine MC를 사용하는지 결정하는 것이 가능하다. 예를 들면 MotionModelIdc가 translational motion 또는 4-parameter affine motion 또는 6-parameter affine motion을 나타낼 수 있다. 예를 들면 MotionModelIdc 값이 0, 1, 2일 때 각각 translational motion, 4-parameter affine motion, 6-parameter affine motion을 지시할 수 있다. 또한 일 실시예를 따르면 MotionModelIdc는 inter_affine_flag(인터 어파인 플래그)와 cu_affine_type_flag를 기초로 결정되는 것이 가능하다. 예를 들면 merge_flag가 0인 경우(merge mode가 아닌 경우) MotionModelIdc가 inter_affine_flag(인터 어파인 플래그)와 cu_affine_type_flag를 기초로 결정되는 것이 가능하다. 예를 들면 MotionModelIdx는 (inter_affine_flag + cu_affine_type_flag)일 수 있다. 또다른 실시예를 따르면 MotionModelIdc는 merge_subblock_flag에 의해 결정되는 것이 가능하다. 예를 들면 merge_flag가 1인 경우(merge mode인 경우) MotionModelIdc는 merge_subblock_flag에 의해 결정되는 것이 가능하다. 예를 들면 MotionModelIdc 값은 merge_subblock_flag 값으로 설정될 수 있다.
예를 들면 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_L0이거나 PRED_BI인 경우 MvdLX(모션 벡터 차분) 또는 MvdCpLX(컨트롤 포인트 모션 벡터 차분)에서 L0에 해당하는 값을 사용하는 것이 가능하다. 따라서 AMVR 관련 syntax를 parsing할 때 MvdL0 또는 MvdCpL0는 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_L0이거나 PRED_BI인 경우에만 고려하는 것이 가능하다. 즉, inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_L1인 경우에는 MvdL0(제 0 참조 픽쳐 리스트에 대한 모션 벡터 차분) 또는 MvdCpL0(제 0 참조 픽쳐 리스트에 대한 컨트롤 포인트 모션 벡터 차분)를 고려하지 않는 것이 가능하다.
또한 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_L1이거나 PRED_BI인 경우 MvdLX 또는 MvdCpLX에서 L1에 해당하는 값을 사용하는 것이 가능하다. 따라서 AMVR 관련 syntax를 parsing할 때 MvdL1(제 1 참조 픽쳐 리스트에 대한 모션 벡터 차분) 또는 MvdCpL1(제 1 참조 픽쳐 리스트에 대한 컨트롤 포인트 모션 벡터 차분)는 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_L1이거나 PRED_BI인 경우에만 고려하는 것이 가능하다. 즉, inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_L0인 경우에는 MvdL1 또는 MvdCpL1을 고려하지 않는 것이 가능하다.
도 38을 참조하면 MvdL0와 MvdCpL0는 inter_pred_idc가 PRED_L1이 아닌 경우에만 그 값이 0이 아닌지에 따라 AMVR 관련 syntax parsing 여부를 결정하는 것이 가능하다. 즉, inter_pred_idc가 PRED_L1인 경우에는 MvdL0 중에 0이 아닌 값이 있거나 MvdCpL0 중에 0이 아닌 값이 있는 경우에도 AMVR 관련 syntax를 parsing하지 않을 수 있다.
또한 MotionModelIdc가 1인 경우, MvdCpLX[x0][y0][0][], MvdCpLX[x0][y0][1][], MvdCpLX[x0][y0][2][] 중 MvdCpLX[x0][y0][0][], MvdCpLX[x0][y0][1][]만을 고려하는 것이 가능하다. 즉, MotionModelIdc가 1인 경우, MvdCpLX[x0][y0][2][]를 고려하지 않는 것이 가능하다. 예를 들면 MotionModelIdc가 1인 경우, MvdCpLX[x0][y0][2][] 중에 0이 아닌 값이 있는지 없는지는 AMVR 관련 syntax parsing 여부에 영향 끼치지 않을 수 있다.
또한 MotionModelIdc가 2인 경우, MvdCpLX[x0][y0][0][], MvdCpLX[x0][y0][1][], MvdCpLX[x0][y0][2][] 모두를 고려하는 것이 가능하다. 즉 MotionModelIdc가 2인 경우, MvdCpLX[x0][y0][2][]를 고려하는 것이 가능하다.
또한 상기 실시예에서 MotionModelIdc 1, 2로 표시한 것은 cu_affine_type_flag가 0, 1인 것으로 표현할 수도 있다. 이는 affine MC를 사용하는지 여부를 판단할 수 있기 때문일 수 있다. 예를 들어 affine MC를 사용하는지 여부를 inter_affine_flag(인터 어파인 플래그)를 통해 판단할 수 있다.
도 38을 참조하면 MvdCpLX[x0][y0][2][] 중 0이 아닌 것이 있는지를 MotionModelIdc가 2인 경우에만 고려할 수 있다. 만약 MvdCpLX[x0][y0][0][], MvdCpLX[x0][y0][1][]가 모두 0이고, MvdCpLX[x0][y0][2][]가 중 0이 아닌 것이 적어도 하나 있는 경우(앞선 실시예에 따라 여기서 L0, L1을 나누어 L0, L1 중 하나에 해당되는 것만을 고려할 수도 있다.) MotionModelIdc가 2가 아니면 AMVR 관련 syntax를 parsing하지 않을 수 있다.
도 39는 본 개시의 일 실시예에 따른 MVD 기본값 설정을 나타낸 도면이다.
앞서 설명한 것처럼 MvdLX(모션 벡터 차분) 또는 MvdCpLX(컨트롤 포인트 모션 벡터 차분)는 mvd_coding을 통해 시그날링될 수 있다. 또한 mvd_coding을 통해 lMvd 값이 시그날링될 수 있고, MvdLX 또는 MvdCpLX를 lMvd 값으로 설정할 수 있다. 도 39를 참조하면 MotionModelIdc가 0인 경우 lMvd 값을 통해 MvdLX를 설정할 수 있다. 또한 MotionModelIdc가 0이 아닌 경우 lMvd 값을 통해 MvdCpLX를 설정할 수 있다. 또한 refList 값에 따라 LX 중 어떤 것에 해당하는 동작을 할 지 결정할 수 있다.
또한 도 10 또는 도 33, 도 34, 도 35 등에서 설명한 것과 같은 mvd_coding이 존재할 수 있다. 또한 mvd_coding은 abs_mvd_greater0_flag, abs_mvd_greater1_flag, abs_mvd_minus2, mvd_sign_flag 등을 parsing하는 단계, 혹은 결정하는 단계를 포함할 수 있다. 또한 lMvd는 abs_mvd_greater0_flag, abs_mvd_greater1_flag, abs_mvd_minus2, mvd_sign_flag 등을 통해 결정되는 것이 가능하다.
도 39를 참조하면 lMvd는 다음과 같이 설정될 수 있다.
lMvd = abs_mvd_greater0_flag * ( abs_mvd_minus2 + 2 ) * ( 1 - 2*mvd_sign_flag)
MvdLX(모션 벡터 차분) 또는 MvdCpLX(컨트롤 포인트 모션 벡터 차분)의 기본값을 기설정된 값으로 설정하는 것이 가능하다. 본 개시의 일 실시예를 따르면 MvdLX 또는 MvdCpLX의 기본값을 0으로 설정하는 것이 가능하다. 또는 lMvd의 기본값을 기설정된 값으로 설정하는 것이 가능하다. 또는 lMvd 또는 MvdLX 또는 MvdCpLX의 값이 기설정된 값이 되도록 관련 syntax element의 기본값을 설정하는 것이 가능하다. Syntax element의 기본값은 syntax element가 존재하지 않을 경우 infer하는 값을 의미할 수 있다. 상기 기설정된 값은 0일 수 있다.
본 개시의 일 실시예를 따르면 abs_mvd_greater0_flag는 MVD의 absolute value가 0보다 큰지 아닌지를 지시할 수 있다. 또한 본 개시의 일 실시예를 따르면 abs_mvd_greater0_flag가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다. 이러한 경우 lMvd 값이 0으로 설정될 수 있다. 또한 이러한 경우 MvdLX 또는 MvdCpLX 값이 0으로 설정될 수 있다.
또는 본 개시의 일 실시예를 따르면 lMvd 또는 MvdLX 또는 MvdCpLX 값이 설정되지 않은 경우 그 값을 기설정된 값으로 설정할 수 있다. 예를 들면 0으로 설정할 수 있다.
또한 본 개시의 일 실시예를 따르면 abs_mvd_greater0_flag가 존재하지 않는 경우 해당하는 lMvd 또는 MvdLX 또는 MvdCpLX 값을 0으로 설정할 수 있다.
또한 abs_mvd_greater1_flag는 MVD의 absolute value가 1보다 큰지 아닌지를 지시할 수 있다. 또한 abs_mvd_greater1_flag가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다.
또한 abs_mvd_minus2 + 2는 MVD의 absolute value 값을 지시할 수 있다. 또한 abs_mvd_minus2 값이 존재하지 않는 경우 그 값을 -1로 infer할 수 있다.
또한 mvd_sign_flag는 MVD의 sign을 지시할 수 있다. mvd_sign_flag가 0, 1인 경우 해당 MVD가 각각 positive, negative value인 것을 나타낼 수 있다. 만약 mvd_sign_flag가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다.
도 40는 본 개시의 일 실시예에 따른 MVD 기본값 설정을 나타낸 도면이다.
MvdLX 또는 MvdCpLX의 초기값을 0으로 하여, encoder와 decoder 간의 mismatch를 발생시키지 않기 위해 도 39에서 설명한 것과 같이 MvdLX(복수의 모션 벡터 차분들) 또는 MvdCpLX(복수의 컨트롤 포인트 모션 벡터 차분들) 값은 초기화될 수 있다. 또한 이때 초기화하는 값은 0일 수 있다. 도 40의 실시예는 이에 대해 더 자세히 설명한다.
본 개시의 일 실시예를 따르면 MvdLX(복수의 모션 벡터 차분들) 또는 MvdCpLX(복수의 컨트롤 포인트 모션 벡터 차분들) 값은 기설정된 값으로 초기화될 수 있다. 또한 초기화하는 위치는 AMVR 관련 syntax elements를 parsing하는 위치보다 앞일 수 있다. 상기 AMVR 관련 syntax elements는 도 40의 amvr_flag, amvr_precision_flag 등을 포함할 수 있다. amvr_flag 또는 amvr_precision_flag는 모션 벡터 차분의 해상도에 대한 정보일 수 있다.
또한 상기 AMVR 관련 syntax elements에 의해 MVD(모션 벡터 차분) 또는 MV(모션 벡터)의 resolution, 또는 MVD 또는 MV의 시그날링되는 resolution이 결정될 수 있다. 또한 본 개시의 실시예들에서 초기화하는 기설정된 값은 0일 수 있다.
초기화를 함으로써 AMVR 관련 syntax elements를 parsing할 때 encoder, decoder 간의 MvdLX, MvdCpLX 값이 같아질 수 있기 때문에 encoder와 decoder 간의 mismatch가 발생하지 않을 수 있다. 또한 초기화를 0의 값으로 함으로써 불필요하게 AMVR 관련 syntax elements가 비트스트림에 포함되지 않을 수 있다.
본 개시의 일 실시예를 따르면 MvdLX는 reference list(L0, L1 등), x- or y-component 등에 대해 정의될 수 있다. 또한 MvdCpLX는 reference list(L0, L1 등), x- or y-component, control point 0, 1, 2 등에 대해 정의될 수 있다.
본 개시의 일 실시예를 따르면 MvdLX 또는 MvdCpLX 값을 모두 초기화하는 것이 가능하다. 또한 초기화하는 위치는 해당 MvdLX 또는 MvdCpLX에 대한 mvd_coding을 수행하기 전일 수 있다. 예를 들면 L0만을 사용하는 prediction block에서도 L0에 해당하는 MvdLX, MvdCpLX를 초기화하는 것이 가능하다. 초기화가 필수적으로 필요한 것만을 초기화하기 위해서는 조건 확인이 필요할 수 있는데 이렇게 구분 없이 초기화함에 따라 조건 확인에 부담을 줄일 수 있다.
본 개시의 또다른 실시예를 따르면 MvdLX 또는 MvdCpLX 값 중 사용하지 않는 것에 해당하는 값을 초기화하는 것이 가능하다. 여기서 사용하지 않는다는 것은 현재 block에서 사용하지 않는 것을 의미할 수 있다. 예를 들면 MvdLX 또는 MvdCpLX 중 현재 사용하지 않는 reference list에 해당하는 값을 초기화할 수 있다. 예를 들어 L0를 사용하지 않는 경우 MvdL0, MvdCpL0에 해당하는 값을 초기화할 수 있다. L0를 사용하지 않는 것은 inter_pred_idc가 PRED_L1인 경우일 수 있다. 또한 L1을 사용하지 않는 경우 MvdL1, MvdCpL1에 해당하는 값을 초기화할 수 있다. L1을 사용하지 않는 것은 inter_pred_idc가 PRED_L0인 경우일 수 있다. L0를 사용하는 것은 inter_pred_idc가 PRED_L0이거나 PRED_BI인 경우일 수 있다, 또한 L1을 사용하는 것은 inter_pred_idc가 PRED_L1이거나 PRED_BI인 경우일 수 있다. 도 40를 참조하면 inter_pred_idc가 PRED_L1인 경우 MvdL0[x0][y0][0], MvdL0[x0][y0][1], MvdCpL0[x0][y0][0][0], MvdCpL0[x0][y0][0][1], MvdCpL0[x0][y0][1][0], MvdCpL0[x0][y0][1][1], MvdCpL0[x0][y0][2][0], MvdCpL0[x0][y0][2][1]를 초기화할 수 있다. 또한 초기화하는 값은 0일 수 있다. 또한 inter_pred_idc가 PRED_L0인 경우 MvdL1[x0][y0][0], MvdL1[x0][y0][1], MvdCpL1[x0][y0][0][0], MvdCpL1[x0][y0][0][1], MvdCpL1[x0][y0][1][0], MvdCpL1[x0][y0][1][1], MvdCpL1[x0][y0][2][0], MvdCpL1[x0][y0][2][1]을 초기화할 수 있다. 또한 초기화하는 값은 0일 수 있다.
MvdLX[x][y][compIdx]는 reference list LX에 대한 (x,y) 위치, component index compIdx에 대한 motion vector difference일 수 있다. MvdCpLX[x][y][cpIdx][compIdx]는 reference list LX에 대한 motion vector difference일 수 있다. 또한, MvdCpLX[x][y][cpIdx][compIdx]는 위치(x,y), control point motion vector index cpIdx, 및 component index compIdx에 대한 motion vector difference일 수 있다. 여기서 component는 x 또는 y 성분을 나타내는 것일 수 있다.
또한 본 개시의 일 실시예를 따르면 MvdLX(모션 벡터 차분) 또는 MvdCpLX(컨트롤 포인트 모션 벡터 차분) 중 사용하지 않는 것은 affine motion compensation을 사용하는지 아닌지에 따른 것일 수 있다. 예를 들어 affine motion compensation이 사용되는 경우 MvdLX를 초기화할 수 있다. 또한 affine motion compensation이 사용되지 않는 경우 MvdCpLX를 초기화할 수 있다. 예를 들면 affine motion compensation을 사용하는지 나타내는 시그날링이 존재할 수 있다. 도 40를 참조하면 inter_affine_flag(인터 어파인 플래그)는 affine motion compensation을 사용하는지 나타내는 시그날링일 수 있다. 예를 들어 inter_affine_flag(인터 어파인 플래그)가 1인 경우 affine motion compensation을 사용하는 것일 수 있다. 또는 MotionModelIdc는 affine motion compensation을 사용하는지 나타내는 시그날링일 수 있다. 예를 들어 MotionModelIdc가 0이 아닌 경우 affine motion compensation을 사용하는 것일 수 있다.
또한 본 개시의 일 실시예를 따르면 MvdLX 또는 MvdCpLX 중 사용하지 않는 것은 어떤 affine motion model을 사용하는지에 관한 것일 수 있다. 예를 들면 4-parameter affine model을 사용하는지 6-parameter affine model을 사용하는지에 따라 사용하지 않는 MvdLX 또는 MvdCpLX가 다를 수 있다. 예를 들어 어떤 affine motion model을 사용하는지에 따라 MvdCpLX[x][y][cpIdx][compIdx]의 cpIdx에 대해 사용하지 않는 것이 다를 수 있다. 예를 들어 4-parameter affine model을 사용하는 경우에는 MvdCpLX[x][y][cpIdx][compIdx] 중 일부만을 사용할 수 있다. 또는 6-parameter affine model을 사용하지 않는 경우에는 MvdCpLX[x][y][cpIdx][compIdx] 중 일부만을 사용할 수 있다. 따라서 사용하지 않는 MvdCpLX를 기설정된 값으로 초기화할 수 있다. 이때 사용하지 않는 MvdCpLX는 6-parameter affine model에서는 사용하고 4-parameter affine model에서는 사용하지 않는 cpIdx에 해당하는 것일 수 있다. 예를 들어 4-parameter affine model을 사용하는 경우 MvdCpLX[x][y][cpIdx][compIdx]의 cpIdx가 2인 값을 사용하지 않을 수 있고, 이 것을 기설정된 값으로 초기화할 수 있다. 또한 앞서 설명한 것처럼 4-parameter affine model을 사용하는지 6-parameter affine model을 사용하는지를 나타내는 시그날링 또는 parameter가 존재할 수 있다. 예를 들면 MotionModelIdc 또는 cu_affine_type_flag에 의해 4-parameter affine model을 사용하는지 6-parameter affine model을 사용하는지를 알 수 있다. MotionModelIdc 값이 1, 2인 것은 각각 4-parameter affine model, 6-parameter affine model을 사용함을 나타내는 것일 수 있다. 도 40를 참조하면 MotionModelIdc가 1인 경우 MvdCpL0[x0][y0][2][0], MvdCpL0[x0][y0][2][1], MvdCpL1[x0][y0][2][0], MvdCpL1[x0][y0][2][1]를 기설정된 값으로 초기화하는 것이 가능하다. 또한 이때 MotionModelIdc가 1인 경우 대신 MotionModelIdc가 2가 아닌 경우의 조건을 사용하는 것이 가능하다. 상기 기설정된 값은 0일 수 있다.
또한 본 개시의 일 실시예를 따르면 MvdLX 또는 MvdCpLX 중 사용하지 않는 것은 mvd_l1_zero_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 차분 제로 플래그) 값에 기초할 수 있다. 예를 들면 mvd_l1_zero_flag가 1인 경우 MvdL1, MvdCpL1들을 기설정된 값으로 초기화하는 것이 가능하다. 또한 이때 추가적인 조건을 고려할 수 있다. 예를 들어 mvd_l1_zero_flag와 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)에 기초하여 MvdLX 또는 MvdCpLX 중 사용하지 않는 것이 결정될 수 있다. 예를 들어 mvd_l1_zero_flag가 1이고, inter_pred_idc가 PRED_BI인 경우 MvdL1, MvdCpL1들을 기설정된 값으로 초기화하는 것이 가능하다. 예를 들어 mvd_l1_zero_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 차분 제로 플래그)는 reference list L1에 대한 MVD 값(예를 들면 MvdLX 또는 MvdCpLX)들이 0인 것을 나타낼 수 있는 상위 레벨 시그날링일 수 있다. 시그날링은 비트스트림을 통하여 인코더에서 디코더로 전송되는 신호를 의미할 수 있다. 디코더는 mvd_l1_zero_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 차분 제로 플래그)를 비트스트림으로부터 파싱할 수 있다.
본 개시의 또다른 실시예를 따르면 어떤 block에 대하여 mvd_coding을 수행하기 전에 모든 Mvd, MvdCp를 기설정된 값으로 초기화하는 것이 가능하다. 이때 mvd_coding은 어떤 CU에 대한 모든 mvd_coding을 의미할 수 있다. 따라서 mvd_coding syntax를 parsing하고 결정한 Mvd 또는 MvdCp 값을 초기화하는 일이 발생하지 않도록 할 수 있고, 모든 Mvd, MvdCp 값을 초기화함으로써 설명한 문제를 해결할 수 있다.
도 41은 본 개시의 일 실시예를 따른 AMVR 관련 syntax 구조를 나타낸 도면이다.
도 41의 실시예는 도 38의 실시예를 기반으로 할 수 있다.
도 38에서 설명한 것처럼 MvdLX(모션 벡터 차분) 또는 MvdCpLX(컨트롤 포인트 모션 벡터 차분) 중 0이 아닌 값이 적어도 하나 존재하는지 여부를 확인할 수 있다. 이때 확인하는 MvdLX 또는 MvdCpLX는 mvd_l1_zero_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 차분 제로 플래그)를 기초로 결정되는 것이 가능하다. 따라서 mvd_l1_zero_flag를 기초로 AMVR 관련 syntax parsing 여부가 결정되는 것이 가능하다. 앞서 설명한 것처럼 mvd_l1_zero_flag가 1인 경우 reference list L1에 대한 MVD(모션 벡터 차분)들이 0인 것을 나타낼 수 있으므로 이 경우에 MvdL1(제 1 참조 픽쳐 리스트에 대한 모션 벡터 차분) 또는 MvdCpL1(제 1 참조 픽쳐 리스트에 대한 컨트롤 포인트 모션 벡터 차분)을 고려하지 않을 수 있다. 예를 들어 mvd_l1_zero_flag가 1인 경우에는 MvdL1 또는 MvdCpL1이 0인지 아닌지에 상관 없이 MvdL0(제 0 참조 픽쳐 리스트에 대한 모션 벡터 차분) 또는 MvdCpL0(제 0 참조 픽쳐 리스트에 대한 컨트롤 포인트 모션 벡터 차분) 중에서 0인 값이 적어도 하나 존재하는지 여부를 기초로 AMVR 관련 syntax를 parsing할 수 있다. 추가적인 실시예를 따르면 mvd_l1_zero_flag가 reference list L1에 대한 MVD들이 0인 것을 나타내는 것은 bi-prediction인 block에 대해서만일 수 있다. 따라서 mvd_l1_zero_flag 및 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)에 기초하여 AMVR 관련 syntax를 parsing할 수 있다. 예를 들어 mvd_l1_zero_flag 및 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)에 기초하여 0이 아닌 값이 적어도 하나 존재하는지 여부를 판단하는 MvdLX 또는 MvdCpLX가 결정될 수 있다. 예를 들어 mvd_l1_zero_flag 및 inter_pred_idc에 기초하여 MvdL1 또는 MvdCpL1을 고려하지 않을 수 있다. 예를 들어 mvd_l1_zero_flag가 1이고, inter_pred_idc가 PRED_BI인 경우 MvdL1 또는 MvdCpL1을 고려하지 않을 수 있다. 예를 들어 mvd_l1_zero_flag가 1이고, inter_pred_idc가 PRED_BI인 경우 MvdL1 또는 MvdCpL1이 0인지 아닌지에 상관 없이 MvdL0 또는 MvdCpL0 중에서 0인 값이 적어도 하나 존재하는지 여부를 기초로 AMVR 관련 syntax를 parsing할 수 있다.
도 41을 참조하면 mvd_l1_zero_flag가 1이고, inter_pred_idc[x0][y0] == PRED_BI인 경우에 MvdL1[x0][y0][0], MvdL1[x0][y0][1], MvdCpL1[x0][y0][0][0], MvdCpL1[x0][y0][0][1], MvdCpL1[x0][y0][1][0], MvdCpL1[x0][y0][1][1], MvdCpL1[x0][y0][2][0], MvdCpL1[x0][y0][2][1] 중 0이 아닌 값이 존재하는지에 상관 없는 동작을 할 수 있다. 예를 들어 mvd_l1_zero_flag가 1이고, inter_pred_idc[x0][y0] == PRED_BI인 경우에 MvdL0 또는 MvdCpL0 중 0이 아닌 값이 존재하지 않으면 MvdL1[x0][y0][0], MvdL1[x0][y0][1], MvdCpL1[x0][y0][0][0], MvdCpL1[x0][y0][0][1], MvdCpL1[x0][y0][1][0], MvdCpL1[x0][y0][1][1], MvdCpL1[x0][y0][2][0], MvdCpL1[x0][y0][2][1] 중 0이 아닌 값이 존재하더라도 AMVR 관련 syntax를 parsing하지 않을 수 있다.
또한 mvd_l1_zero_flag가 0이거나 inter_pred_idc[x0][y0] != PRED_BI인 경우에는 MvdL1[x0][y0][0], MvdL1[x0][y0][1], MvdCpL1[x0][y0][0][0], MvdCpL1[x0][y0][0][1], MvdCpL1[x0][y0][1][0], MvdCpL1[x0][y0][1][1], MvdCpL1[x0][y0][2][0], MvdCpL1[x0][y0][2][1] 중 0이 아닌 값이 존재하는지를 고려할 수 있다. 예를 들어 mvd_l1_zero_flag가 0이거나 inter_pred_idc[x0][y0] != PRED_BI인 경우에는 MvdL1[x0][y0][0], MvdL1[x0][y0][1], MvdCpL1[x0][y0][0][0], MvdCpL1[x0][y0][0][1], MvdCpL1[x0][y0][1][0], MvdCpL1[x0][y0][1][1], MvdCpL1[x0][y0][2][0], MvdCpL1[x0][y0][2][1] 중 0이 아닌 값이 존재하는 경우 AMVR 관련 syntax를 parsing할 수 있다. 예를 들어 mvd_l1_zero_flag가 0이거나 inter_pred_idc[x0][y0] != PRED_BI인 경우에는 MvdL1[x0][y0][0], MvdL1[x0][y0][1], MvdCpL1[x0][y0][0][0], MvdCpL1[x0][y0][0][1], MvdCpL1[x0][y0][1][0], MvdCpL1[x0][y0][1][1], MvdCpL1[x0][y0][2][0], MvdCpL1[x0][y0][2][1] 중 0이 아닌 값이 존재하는 경우, 만약 MvdL0와 MvdCpL0들이 모두 0일지라도 AMVR 관련 syntax를 parsing할 수 있다.
도 42은 본 개시의 일 실시예를 따른 inter prediction 관련 syntax 구조를 나타낸 도면이다.
본 개시의 일 실시예를 따르면 mvd_l1_zero_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 차분 제로 플래그)는 reference list L1(제 1 참조 픽쳐 리스트)에 대한 Mvd(모션 벡터 차분) 값들이 0인 것을 나타내는 시그날링일 수 있다. 또한 이 시그날링은 현재 block보다 상위 레벨에서 시그날링되는 것일 수 있다. 따라서 mvd_l1_zero_flag 값에 기초하여 다수의 block에서 reference list L1에 대한 Mvd 값들이 0일 수 있다. 예를 들어 mvd_l1_zero_flag 값이 1인 경우 reference list L1에 대한 Mvd 값들이 0일 수 있다. 또는 mvd_l1_zero_flag 및 inter_pred_idc(참조 픽쳐 리스트에 대한 정보)에 기초하여 reference list L1에 대한 Mvd 값들이 0일 수 있다. 예를 들어 mvd_l1_zero_flag가 1이고, inter_pred_idc가 PRED_BI인 경우 reference list L1에 대한 Mvd 값들이 0일 수 있다. 이때 Mvd 값들은 MvdL1[x][y][compIdx]들일 수 있다. 또한 이때 Mvd 값들은 control point motion vector difference를 의미하지 않을 수 있다. 즉, 이때 Mvd 값들은 MvdCp 값들을 의미하지 않을 수 있다.
본 개시의 또다른 실시예를 따르면 mvd_l1_zero_flag는 reference list L1에 대한 Mvd, MvdCp 값들이 0인 것을 나타내는 시그날링일 수 있다. 또한 이 시그날링은 현재 block보다 상위 레벨에서 시그날링되는 것일 수 있다. 따라서 mvd_l1_zero_flag 값에 기초하여 다수의 block에서 reference list L1에 대한 Mvd, MvdCp 값들이 0일 수 있다. 예를 들어 mvd_l1_zero_flag 값이 1인 경우 reference list L1에 대한 Mvd, MvdCp 값들이 0일 수 있다. 또는 mvd_l1_zero_flag 및 inter_pred_idc에 기초하여 reference list L1에 대한 Mvd, MvdCp 값들이 0일 수 있다. 예를 들어 mvd_l1_zero_flag가 1이고, inter_pred_idc가 PRED_BI인 경우 reference list L1에 대한 Mvd, MvdCp 값들이 0일 수 있다. 이때 Mvd 값들은 MvdL1[x][y][compIdx]들일 수 있다. 또한 MvdCp 값들은 MvdCpL1[x][y][cpIdx][compIdx]들일 수 있다.
또는 Mvd 또는 MvdCp 값들이 0인 것은 해당하는 mvd_coding syntax structure를 parsing하지 않는 것을 의미할 수 있다. 즉, 예를 들어 mvd_l1_zero_flag 값이 1인 경우 MvdL1 또는 MvdCpL1에 해당하는 mvd_coding syntax structure를 parsing하지 않을 수 있다. 또한 mvd_l1_zero_flag 값이 0인 경우 MvdL1 또는 MvdCpL1에 해당하는 mvd_coding syntax structure를 parsing할 수 있다.
본 개시의 일 실시예를 따르면 mvd_l1_zero_flag에 기초하여 Mvd 또는 MvdCp 값들이 0인 경우 MVP를 나타내는 시그날링을 parsing하지 않을 수 있다. MVP를 나타내는 시그날링은 mvp_l1_flag를 포함할 수 있다. 또한 앞서 설명한 mvd_l1_zero_flag 설명을 따르면 mvd_l1_zero_flag 시그날링은 Mvd와 MvdCp 모두에 대해 0인 것을 나타내는 것을 의미할 수 있다. 예를 들어 reference list L1에 대한 Mvd 또는 MvdCp 값들이 0인 것을 나타내는 조건을 만족하게 되면 MVP를 나타내는 시그날링을 parsing하지 않을 수 있다. 이러한 경우 MVP를 나타내는 시그날링을 기설정된 값으로 infer할 수 있다. 예를 들면 MVP를 나타내는 시그날링이 존재하지 않는 경우 그 값을 0으로 infer할 수 있다. 또한 mvd_l1_zero_flag에 기초하여 Mvd 또는 MvdCp 값들이 0인 것을 나타내는 조건을 만족시키지 않는 경우 MVP를 나타내는 시그날링을 parsing할 수 있다. 그러나 이러한 실시예에서 Mvd 또는 MvdCp 값들이 0인 경우에 MVP를 선택하는 자유도가 없어질 수 있고, 이에 따라 코딩 효율이 떨어질 수 있다.
더 구체적으로 reference list L1에 대한 Mvd 또는 MvdCp 값들이 0인 것을 나타내는 조건을 만족하고, affine MC를 사용하는 경우에 MVP를 나타내는 시그날링을 parsing하지 않을 수 있다. 이러한 경우 MVP를 나타내는 시그날링을 기설정된 값으로 infer할 수 있다.
도 42을 참조하면 mvd_l1_zero_flag가 1이고, inter_pred_idc 값이 PRED_BI인 경우 mvp_l1_flag를 parsing하지 않을 수 있다. 또한 이러한 경우 mvp_l1_flag 값을 0으로 infer할 수 있다. 또는 mvd_l1_zero_flag가 0이거나 inter_pred_idc 값이 PRED_BI가 아닌 경우에 mvp_l1_flag를 parsing할 수 있다.
본 실시예에서 mvd_l1_zero_flag에 기초하여 MVP를 나타내는 시그날링의 parsing 여부를 결정하는 것은 특정 조건을 만족시킬 때 일어나는 것이 가능하다. 예를 들어 특정 조건은 general_merge_flag가 0인 조건을 포함할 수 있다. 예를 들어 general_merge_flag는 앞서 설명한 merge_flag와 같은 의미일 수 있다. 또한 특정 조건은 CuPredMode에 기초한 조건을 포함할 수 있다. 더 구체적으로 특정 조건은 CuPredMode가 MODE_IBC가 아닌 조건을 포함할 수 있다. 또는 특정 조건은 CuPredMode가 MODE_INTER인 조건을 포함할 수 있다. CuPredMode가 MODE_IBC인 경우 현재 picture를 reference로 하는 예측을 사용하는 것이 가능하다. 또한 CuPredMode가 MODE_IBC인 경우 그 block에 해당하는 block vector 또는 motion vector가 존재할 수 있다. 만약 CuPredMode가 MODE_INTER인 경우 현재 picture가 아닌 picture를 reference로 하는 예측을 사용하는 것이 가능하다. CuPredMode가 MODE_INTER인 경우 그 block에 해당하는 motion vector가 존재할 수 있다.
따라서 본 개시의 실시예를 따르면 general_merge_flag가 0이고, CuPredMode가 MODE_IBC아 아니고, mvd_l1_zero_flag가 1이고, inter_pred_idc가 PRED_BI인 경우에는 mvp_l1_flag를 parsing하지 않을 수 있다. 또한 mvp_l1_flag가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다.
또한 더 구체적으로 general_merge_flag가 0이고, CuPredMode가 MODE_IBC아 아니고, mvd_l1_zero_flag가 1이고, inter_pred_idc가 PRED_BI이고, affine MC를 사용하는 경우에는 mvp_l1_flag를 parsing하지 않을 수 있다. 또한 mvp_l1_flag가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다.
도 42을 참조하면 sym_mvd_flag를 symmetric MVD를 나타내는 시그날링일 수 있다. Symmetric MVD인 경우 어떤 MVD를 기초로 다른 MVD를 결정할 수 있다. Symmetric MVD인 경우 explicit signaling된 MVD를 기초로 다른 MVD를 결정할 수 있다. 예를 들어 symmetric MVD인 경우 하나의 reference list에 대한 MVD를 기초로 다른 reference list에 대한 MVD를 결정할 수 있다. 예를 들면 symmetric MVD인 경우 reference list L0에 대한 MVD를 기초로 reference list L1에 대한 MVD를 결정할 수 있다. 어떤 MVD를 기초로 다른 MVD를 결정할 때 상기 어떤 MVD의 부호를 반대로 한 값을 다른 MVD로 결정하는 것이 가능하다.
도 43은 본 개시의 일 실시예를 따른 inter prediction 관련 syntax 구조를 나타낸 도면이다.
도 43의 실시예는 도 42에서 설명한 문제를 해결하기 위한 실시예일 수 있다.
본 개시의 일 실시예를 따르면 mvd_l1_zero_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 차분 제로 플래그)에 기초하여 Mvd(모션 벡터 차분) 또는 MvdCp(컨트롤 포인트 모션 벡터 차분) 값들이 0인 경우 MVP(모션 벡터 예측자)를 나타내는 시그날링을 parsing하는 것이 가능하다. MVP를 나타내는 시그날링은 mvp_l1_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 예측자 인덱스)를 포함할 수 있다. 또한 앞서 설명한 mvd_l1_zero_flag 설명을 따르면 mvd_l1_zero_flag 시그날링은 Mvd와 MvdCp 모두에 대해 0인 것을 나타내는 것을 의미할 수 있다. 예를 들어 reference list L1(제 1 참조 픽쳐 리스트)에 대한 Mvd 또는 MvdCp 값들이 0인 것을 나타내는 조건을 만족하게 되면 MVP를 나타내는 시그날링을 parsing할 수 있다. 따라서 MVP를 나타내는 시그날링을 infer하지 않을 수 있다. 이에 따라 mvd_l1_zero_flag에 기초하여 Mvd 또는 MvdCp 값이 0인 경우에도 MVP를 선택하는 자유도를 가질 수 있다. 이에 따라 코딩 효율이 향상될 수 있다. 또한 mvd_l1_zero_flag에 기초하여 Mvd 또는 MvdCp 값들이 0인 것을 나타내는 조건을 만족시키지 않는 경우에도 MVP를 나타내는 시그날링을 parsing할 수 있다.
더 구체적으로 reference list L1에 대한 Mvd 또는 MvdCp 값들이 0인 것을 나타내는 조건을 만족하고, affine MC를 사용하는 경우에 MVP를 나타내는 시그날링을 parsing할 수 있다.
도 43의 라인(4301)을 참조하면 현재 블락에 대하여 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 획득될 수 있다. 라인(4302)을 참조하면 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 제 0 참조 픽쳐 리스트(list 0)만 사용하는 것이 아님을 나타내는 경우, 라인(4303)에서 비트스트림으로부터 제 1 참조 픽쳐 리스트(list 1)의 모션 벡터 예측자 인덱스(mvp_l1_flag)가 파싱될 수 있다.
mvd_l1_zero_flag(모션 벡터 차분 제로 플래그)가 비트스트림으로부터 획득될 수 있다. mvd_l1_zero_flag(모션 벡터 차분 제로 플래그)는 제 1 참조 픽쳐 리스트에 대해 MvdLX(모션 벡터 차분) 및 MvdCpLX(복수의 컨트롤 포인트 모션 벡터 차분들)이 0으로 설정될지 여부를 나타낼 수 있다. 시그날링은 비트스트림을 통하여 인코더에서 디코더로 전송되는 신호를 의미할 수 있다. 디코더는 mvd_l1_zero_flag(모션 벡터 차분 제로 플래그)를 비트스트림으로부터 파싱할 수 있다.
mvd_l1_zero_flag(모션 벡터 차분 제로 플래그)가 1이고, inter_pred_idc(참조 픽쳐 리스트에 대한 정보) 값이 PRED_BI인 경우 mvp_l1_flag(모션 벡터 예측자 인덱스)를 parsing할 수 있다. 여기서 PRED_BI는 List 0(제 0 참조 픽쳐 리스트) 및 List 1(제 1 참조 픽쳐 리스트) 모두를 사용하는 것을 나타낼 수 있다. 또는 mvd_l1_zero_flag(모션 벡터 차분 제로 플래그)가 0이거나 inter_pred_idc(참조 픽쳐 리스트에 대한 정보) 값이 PRED_BI가 아닌 경우에 mvp_l1_flag(모션 벡터 예측자 인덱스)를 parsing할 수 있다. 즉, mvd_l1_zero_flag(모션 벡터 차분 제로 플래그)가 1이고, inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 제 0 참조 픽쳐 리스트 및 제 1 참조 픽쳐 리스트 모두를 사용하는 것을 나타내는지 여부에 관련 없이 mvp_l1_flag(모션 벡터 예측자 인덱스)가 파싱될 수 있다.
본 실시예에서 mvd_l1_zero_flag(제 1 참조 픽쳐 리스트의 모션 벡터 차분 제로 플래그)에 기초하여 Mvd, MvdCp를 결정하고, MVP를 나타내는 시그날링을 parsing하는 것은 특정 조건을 만족시킬 때 일어나는 것이 가능하다. 예를 들어 특정 조건은 general_merge_flag가 0인 조건을 포함할 수 있다. 예를 들어 general_merge_flag는 앞서 설명한 merge_flag와 같은 의미일 수 있다. 또한 특정 조건은 CuPredMode에 기초한 조건을 포함할 수 있다. 더 구체적으로 특정 조건은 CuPredMode가 MODE_IBC가 아닌 조건을 포함할 수 있다. 또는 특정 조건은 CuPredMode가 MODE_INTER인 조건을 포함할 수 있다. CuPredMode가 MODE_IBC인 경우 현재 picture를 reference로 하는 예측을 사용하는 것이 가능하다. 또한 CuPredMode가 MODE_IBC인 경우 그 block에 해당하는 block vector 또는 motion vector가 존재할 수 있다. 만약 CuPredMode가 MODE_INTER인 경우 현재 picture가 아닌 picture를 reference로 하는 예측을 사용하는 것이 가능하다. CuPredMode가 MODE_INTER인 경우 그 block에 해당하는 motion vector가 존재할 수 있다.
따라서 본 개시의 실시예를 따르면 general_merge_flag가 0이고, CuPredMode가 MODE_IBC아 아니고, mvd_l1_zero_flag가 1이고, inter_pred_idc가 PRED_BI인 경우에는 mvp_l1_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 예측자 인덱스)를 parsing할 수 있다. 따라서 mvp_l1_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 예측자 인덱스)가 존재하게 되고, 그 값을 infer하지 않을 수 있다.
또한 더 구체적으로 general_merge_flag가 0이고, CuPredMode가 MODE_IBC아 아니고, mvd_l1_zero_flag(제 1 참조 픽쳐 리스트의에 대한모션 벡터 차분 제로 플래그)가 1이고, inter_pred_idc(참조 픽쳐 리스트에 대한 정보)가 PRED_BI이고, affine MC를 사용하는 경우에 mvp_l1_flag를 parsing할 수 있다. 또한 mvp_l1_flag(제 1 참조 픽쳐 리스트에 대한 모션 벡터 예측자 인덱스)가 존재하게 되고, 그 값을 infer하지 않을 수 있다.
또한 도 43과 도 40의 실시예를 함께 실시하는 것이 가능하다. 예를 들면 Mvd 또는 MvdCp 초기화를 한 뒤에 mvp_l1_flag를 parsing하는 것이 가능하다. 이때 Mvd 또는 MvdCp 초기화는 도 40에서 설명한 초기화일 수 있다. 또한 mvp_l1_flag parsing은 도 43의 설명을 따를 수 있다. 예를 들어 mvd_l1_zero_flag에 기초하여 reference list L1에 대한 Mvd, MvdCp 값이 0이 아닌 경우에 MotionModelIdc 값이 1인 경우 control point index 2인 MvdCpL1 값들을 초기화하고 mvp_l1_flag를 parsing할 수 있다.
도 44는 본 개시의 일 실시예를 따른 inter prediction 관련 syntax 구조를 나타낸 도면이다.
도 44의 실시예는 MVP를 선택하는 자유도를 없애지 않아 코딩 효율을 높이기 위한 실시예일 수 있다. 또한 도 44의 실시예는 도 43에서 설명한 실시예를 다른 방식으로 표현한 것일 수 있다. 따라서 도 43의 실시예와 중복되는 설명을 생략할 수 있다.
도 44의 실시예에서 mvd_l1_zero_flag를 기초로 Mvd 또는 MvdCp 값이 0인 것을 나타내는 경우 MVP를 나타내는 시그날링을 parsing할 수 있다. MVP를 나타내는 시그날링은 mvp_l1_flag를 포함할 수 있다.
도 45는 본 개시의 일 실시예에 따른 inter prediction 관련 syntax를 나타낸 도면이다.
본 개시의 일 실시예를 따르면 inter prediction 방법은 skip mode, merge mode, inter mode 등을 포함할 수 있다. 일 실시예를 따르면 skip mode에서는 residual signal이 전송되지 않을 수 있다. 또한 skip mode에서 merge mode와 같은 MV 결정 방법을 사용할 수 있다. Skip mode 사용 여부는 skip flag에 따라 결정될 수 있다. 도 33를 참조하면 cu_skip_flag 값에 따라 skip mode 사용 여부가 결정될 수 있다.
일 실시예를 따르면 merge mode에서는 motion vector difference를 사용하지 않을 수 있다. Motion candidate index를 기초로 motion vector를 결정할 수 있다. Merge mode 사용 여부는 merge flag에 따라 결정될 수 있다. 도 33를 참조하면 merge_flag 값에 따라 merge mode 사용 여부가 결정될 수 있다. 또한 skip mode를 사용하지 않는 경우에 merge mode를 사용하는 것이 가능하다.
Skip mode 또는 merge mode에서 하나 이상의 candidate list 종류 중에서 선택적으로 사용하는 것이 가능하다. 예를 들어 merge candidate 또는 subblock merge candidate를 사용하는 것이 가능하다. 또한 merge candidate은 spatial neighboring candidate, temporal candidate 등을 포함할 수 있다. 또한 merge candidate는 현재 block(CU; Coding Unit) 전체에 대한 motion vector를 사용하는 candidate를 포함할 수 있다. 즉, 현재 block에 속하는 각 subblock의 motion vector가 같은 candidate를 포함할 수 있다. 또한 subblock merge candidate는 subblock-based temporal MV, affine merge candidate 등을 포함할 수 있다. 또한 subblock merge candidate는 현재 block(CU)의 subblock 별로 다른 motion vector를 사용하는 것이 가능한 candidate를 포함할 수 있다. Affine merge candidate는 affine motion prediction의 control point motion vector를 결정할 때 motion vector difference를 사용하지 않고 결정하는 방법으로 만든 방법일 수 있다. 또한 subblock merge candidate는 현재 block에서 subblock 단위로 motion vector를 결정하는 방법들을 포함할 수 있다. 예를 들어 subblock merge candidate는 앞서 언급한 subblock-based temporal MV와 affine merge candidate 이외에도 planar MV, regression based MV, STMVP 등을 포함할 수 있다.
일 실시예를 따르면 inter mode에서는 motion vector difference를 사용할 수 있다. Motion candidate index를 기초로 motion vector predictor를 결정하고 상기 motion vector predictor와 motion vector difference를 기초로 motion vector를 결정할 수 있다. Inter mode 사용 여부는 다른 mode들의 사용 여부에 따라 결정될 수 있다. 또다른 실시예로 inter mode 사용 여부는 flag에 의해 결정될 수 있다. 도 45에서는 다른 mode들인 skip mode와 merge mode를 사용하지 않는 경우에 inter mode를 사용하는 예를 나타내고 있다.
Inter mode는 AMVP mode, affine inter mode 등을 포함할 수 있다. Inter mode는 motion vector predictor와 motion vector difference를 기초로 motion vector를 결정하는 모드일 수 있다. Affine inter mode는 affine motion prediction의 control point motion vector를 결정할 때 motion vector difference를 사용하는 방법일 수 있다.
도 45를 참조하면 skip mode 또는 merge mode로 결정된 후에 subblock merge candidate를 사용할 지, merge candidate를 사용할 지 결정할 수 있다. 예를 들면 특정 조건을 만족하는 경우에 subblock merge candidate를 사용하는지 여부를 나타내는 merge_subblock_flag를 parsing할 수 있다. 또한 상기 특정 조건은 block size와 관련된 조건일 수 있다. 예를 들면 width, height, area 등에 관한 조건일 수 있고, 이것들을 조합하여 사용할 수도 있다. 도 45를 참조하면 예를 들어 현재 block(CU)의 width 및 height가 특정값 이상일 때의 조건일 수 있다. merge_subblock_flag를 parsing하는 경우에는 그 값을 0으로 infer할 수 있다. 만약 merge_subblock_flag가 1인 경우에 subblock merge candidate를 사용하고 0인 경우에 merge candidate를 사용하는 것일 수 있다. Subblock merge candidate를 사용하는 경우에 candidate index인 merge_subblock_idx를 parsing할 수 있고, merge candidate를 사용하는 경우에 candidate index인 merge_idx를 parsing할 수 있다. 이때 candidate list의 maximum 개수가 1인 경우에는 parsing하지 않을 수 있다. merge_subblock_idx 또는 merge_idx를 parsing하지 않는 경우에는 0으로 infer할 수 있다.
도 45는 coding_unit 함수를 나타내고 있는데, intra prediction 관련 내용은 생략된 것일 수 있고, 도 45는 inter prediction으로 결정된 경우를 나타내는 것일 수 있다.
도 46은 본 개시의 일 실시예를 따른 triangle partitioning mode를 나타낸 도면이다.
본 개시에서 언급하는 triangle partitioning mode(TPM)은 triangle partition mode, triangle prediction, triangle based prediction, triangle motion compensation, triangular prediction, triangle inter prediction, triangular merge mode, triangle merge mode 등 다양한 이름으로 부를 수 있다. 또한, TPM은 geometric partitioning mode(GPM)에 포함될 수 있다.
도 46에서 보는 바와 같이 TPM은 직사각형의 블락을 두개의 삼각형으로 나누는 방식일 수 있다. 하지만, GPM은 블락을 다양한 방식으로 두개의 블락으로 분할할 수 있다. 예를 들어, GPM은 하나의 직사각형 블락을 도 46과 같이 두개의 삼각형 블락으로 분할할 수 있다. 또한 GPM은 하나의 직사각형 블락을 하나의 오각형 블락과 하나의 삼각형블락으로 분할할 수 있다. 또한 GPM은 하나의 직사각형 블락을 두개의 사각형 블락으로 분할할 수 있다. 여기서 직사각형은 정사각형을 포함할 수 있다. 이하에서는 설명의 편의를 위하여 GPM의 간단한 버젼인 TPM을 기준으로 설명하지만 GPM을 포함하는 것으로 해석되어야한다.
본 개시의 일 실시예를 따르면 예측하는 방법으로 uni-prediction이 존재할 수 있다. Uni-prediction은 하나의 reference list를 사용하는 예측 방법일 수 있다. 상기 referent list는 다수 존재할 수 있고, 일 실시예를 따르면 L0, L1으로 두 개가 존재하는 것이 가능하다. Uni-prediction을 사용하는 경우 하나의 block에서 하나의 reference list를 사용하는 것이 가능하다. 또한 uni-prediction을 사용하는 경우 하나의 pixel을 예측하는 데에 하나의 motion information을 사용하는 것이 가능하다. 본 개시에서 block은 CU(coding unit), PU(prediction unit)을 의미하는 것일 수 있다. 또한 본 개시에서 block은 TU(transform unit)을 의미하는 것일 수 있다.
본 개시의 또다른 실시예를 따르면 예측하는 방법으로 bi-prediction이 존재할 수 있다. Bi-prediction은 다수의 reference list를 사용하는 예측 방법일 수 있다. 일 실시예로 bi-prediction은 두 개의 reference list를 사용하는 예측 방법일 수 있다. 예를 들면 bi-prediction은 L0와 L1 reference list를 사용할 수 있다. Bi-prediction을 사용하는 경우 하나의 block에서 다수의 reference list를 사용하는 것이 가능하다. 예를 들어 bi-prediction을 사용하는 경우 하나의 block에서 두 개의 reference list를 사용하는 것이 가능하다. 또한 bi-prediction을 사용하는 경우 하나의 pixel을 예측하는 데에 다수의 motion information을 사용하는 것이 가능하다.
상기 motion information은 motion vector, reference index, prediction list utilization flag를 포함하는 것이 가능하다.
상기 reference list는 reference picture list일 수 있다.
본 개시에서 uni-prediction 또는 bi-prediction에 해당하는 motion information들을 하나의 motion information set로 정의할 수 있다.
본 개시의 일 실시예를 따르면 TPM을 사용하는 경우 다수의 motion information set를 사용하는 것이 가능하다. 예를 들어 TPM을 사용하는 경우 두 개의 motion information set를 사용하는 것이 가능하다. 예를 들어 TPM을 사용하는 경우 많아야 두 개의 motion information set를 사용하는 것이 가능하다. 또한 TPM을 사용하는 block 내에서 두 개의 motion information set가 적용되는 방법은 위치에 기반할 수 있다. 예를 들어 TPM을 사용하는 block 내에서 기설정된 위치에 대해서는 하나의 motion information set를 사용하고, 다른 기설정된 위치에 대해서는 다른 하나의 motion information set를 사용하는 것이 가능하다. 추가적으로 또다른 기설정된 위치에 대해서는 두 개의 motion information set를 함께 사용하는 것이 가능하다. 예를 들면 상기 또다른 기설정된 위치에 대해서는 하나의 motion information set를 기초로 한 예측1과 다른 하나의 motion information set를 기초로한 예측2를 기초로 예측3을 예측에 사용할 수 있다. 예를 들면 예측3은 예측1과 예측2의 weighted sum일 수 있다.
도 46을 참조하면 Partition 1과 Partition 2는 상기 기설정된 위치와 상기 다른 기설정된 위치를 개략적으로 나타낸 것일 수 있다. TPM을 사용하는 경우 도 46에 나타낸 것과 같이 두 가지 split 방법 중 하나를 사용할 수 있다. 두 가지 split 방법은 diagonal split, anti-diagonal split을 포함할 수 있다. 또한 split에 의해 두 개의 triangle-shaped partitions로 나뉠 수 있다. 이미 설명한 바와 같이 TPM은 GPM에 포함될 수 있다. GPM에 대해서는 이미 설명한 바 있으므로, 중복되는 설명은 생략한다.
본 개시의 일 실시예를 따르면 TPM을 사용하는 경우 각 partition에 대해 uni-prediction만을 사용하는 것이 가능하다. 즉, 각 partition에 대해 하나의 motion information을 사용하는 것이 가능하다. 이것은 memory access, computational complexity 등의 복잡도를 낮추기 위한 것일 수 있다. 따라서 각 CU에 대해서 두 개의 motion information만을 사용하는 것이 가능하다.
또한 각 motion information을 candidate list로부터 결정하는 것이 가능하다. 일 실시예를 따르면 TPM에 사용되는 candidate list는 merge candidate list를 기초로 할 수 있다. 또다른 실시예로 TPM에 사용되는 candidate list는 AMVP candidate list를 기초로 할 수 있다. 따라서 TPM을 사용하기 위해 candidate index를 시그날링하는 것이 가능하다. 또한 TPM을 사용하는 block에 대해 TPM에서 partition의 개수만큼 혹은 많아야 partition의 개수만큼의 candidate index를 encoding, decoding, parsing하는 것이 가능하다.
또한 어떤 block이 TPM에 의해 다수의 motion information에 기초하여 prediction 되었더라도 transform 및 quantization은 상기 어떤 block 전체에 대하여 수행하는 것이 가능하다.
도 47은 본 개시의 일 실시예에 따른 merge data syntax를 나타낸 도면이다.
본 개시의 일 실시예를 따르면 merge data syntax를 다양한 mode에 관한 시그날링을 포함하고 있을 수 있다. 상기 다양한 mode는 regular merge mode, MMVD(merge with MVD), subblock merge mode, CIIP(combined intra- and inter-prediction), TPM 등을 포함할 수 있다. Regular merge mode는 HEVC에서 merge mode와 같은 mode일 수 있다. 또한 상기 다양한 mode를 block에서 사용하는지 나타내는 시그날링들이 존재할 수 있다. 또한 이 시그날링들은 syntax element로서 parsing되는 것이 가능하거나 implicitly signaling될 수 있다. 도 47를 참조하면 regular merge mode, MMVD, subblock merge mode, CIIP, TPM을 사용하는지 나타내는 시그날링은 각각 regular_merge_flag, mmvd_merge_flag(또는 mmvd_flag), merge_subblock_flag, ciip_flag(또는 mh_intra_flag), MergeTriangleFlag(또는 merge_triangle_flag) 일 수 있다.
본 개시의 일 실시예를 따르면 merge mode를 사용하는 경우 상기 다양한 mode 중 어떤 mode를 제외한 모든 mode를 사용하지 않는다고 시그날링한 경우 상기 어떤 mode를 사용하는 것으로 결정할 수 있다. 또한 merge mode를 사용하는 경우 상기 다양한 mode 중 어떤 mode를 제외한 mode 중 적어도 하나는 사용한다고 시그날링한 경우 상기 어떤 mode를 사용하지 않는 것으로 결정할 수 있다. 또한 mode를 사용할 수 있는지 나타내는 상위 레벨 시그날링이 존재할 수 있다. 상위 레벨은 block을 포함하는 단위일 수 있다. 상위 레벨은 sequence, picture, slice, tile group, tile, CTU 등일 수 있다. 만약 mode를 사용할 수 있는지 나타내는 상위 레벨 시그날링이 사용할 수 있는 것을 나타내면 그 mode를 사용하는지 나타내는 추가적인 시그날링이 존재할 수 있고, 그 mode를 사용하거나 사용하지 않을 수 있다. 만약 mode를 사용할 수 있는지 나타내는 상위 레벨 시그날링이 사용할 수 없는 것을 나타내면 그 mode를 사용하지 않을 수 있다. 예를 들어 merge mode를 사용하는 경우 regular merge mode, MMVD, subblock merge mode, CIIP를 모두 사용하지 않는다고 시그날링한 경우 TPM을 사용하는 것으로 결정할 수 있다. 또한 merge mode를 사용하는 경우 regular merge mode, MMVD, subblock merge mode, CIIP 중 적어도 하나를 사용한다고 시그날링한 경우 TPM을 사용하지 않는 것으로 결정할 수 있다. 또한 merge mode를 사용하는지를 나타내는 시그날링이 존재할 수 있다. 예를 들면 merge mode를 사용하는지 나타내는 시그날링은 general_merge_flag 또는 merge_flag일 수 있다. 만약 merge mode를 사용하는 경우 도 47와 같은 merge data syntax를 parsing할 수 있다.
또한 TPM을 사용할 수 있는 block size가 제한적일 수 있다. 예를 들어 width, height가 모두 8 이상일 때 TPM을 사용할 수 있는 것이 가능하다.
만약 TPM을 사용하는 경우에 TPM 관련 syntax element들이 parsing될 수 있다. TPM 관련 syntax element는 split 방법을 나타내는 시그날링, candidate index를 나타내는 시그날링을 포함할 수 있다. Split 방법은 split 방향을 의미하는 것일 수 있다. Candidate index를 나타내는 시그날링은 TPM을 사용하는 block에 대해 다수(예를 들면 두 개) 존재할 수 있다. 도 47를 참조하면 split 방법을 나타내는 시그날링은 merge_triangle_split_dir일 수 있다. 또한 candidate index를 나타내는 시그날링은 merge_triangle_idx0, merge_triangle_idx1일 수 있다.
본 개시에서 TPM에 대한 candidate index를 m, n이라고 할 수 있다. 예를 들면 도 46의 Partition 1과 Partition 2에 대한 candidate index가 각각 m, n일 수 있다. 일 실시예를 따르면 m, n은 도 47에서 설명한 candidate index를 나타내는 시그날링에 기초하여 결정될 수 있다. 본 개시의 일 실시예를 따르면 m, n 중 하나는 merge_triangle_idx0과 merge_triangle_idx1 중 하나에 기초하여 결정되고, m, n 중 나머지 하나는 merge_triangle_idx0과 merge_triangle_idx1 모두에 기초하여 결정되는 것이 가능하다.
또는 m, n 중 하나는 merge_triangle_idx0과 merge_triangle_idx1 중 하나에 기초하여 결정되고, m, n 중 나머지 하나는 merge_triangle_idx0과 merge_triangle_idx1 중 나머지 하나에 기초하여 결정되는 것이 가능하다.
더 구체적으로 m은 merge_triangle_idx0에 기초하여 결정되고, n은 merge_triangle_idx0(또는 m)와 merge_triangle_idx1에 기초하여 결정되는 것이 가능하다. 예를 들면 다음과 같이 m, n이 결정될 수 있다.
m = merge_triangle_idx0
n = merge_triangle_idx1 + (merge_triangle_idx1 >= m) ? 1 : 0
본 개시의 일 실시예를 따르면 m과 n이 같이 않을 수 있다. 이것은 TPM에서 두 개의 candidate index가 같은 경우, 즉 두 개의 motion information이 같은 경우 partitioning의 효과를 얻을 수 없을 수 있기 때문이다. 따라서 위와 같은 시그날링 방법은 n을 시그날링할 때 n > m인 경우 시그날링 비트수를 줄이기 위함일 수 있다. 전체 candidate 중에서 m은 n이 아닐 것이기 때문에 시그날링에서 제외할 수 있는 것이다.
TPM에서 사용하는 candidate list를 mergeCandList라고 하면 TPM에서 mergeCandList[m]과 mergeCandList[n]을 motion information으로 사용할 수 있다.
도 48는 본 개시의 일 실시예에 따른 상위 레벨 시그날링을 나타낸 도면이다.
본 개시의 일 실시예를 따르면 다수의 상위 레벨 시그날링이 존재할 수 있다. 상위 레벨 시그날링은 상위 레벨 단위에서 전송되는 시그날링일 수 있다. 상위 레벨 단위는 하나 이상의 하위 레벨 단위를 포함할 수 있다. 상위 레벨 시그날링은 하나 이상의 하위 레벨 단위에 적용되는 시그날링일 수 있다. 예를 들어 slice 또는 sequence는 CU, PU, TU 등에 대해 상위 레벨 단위일 수 있다. 반대로 CU, PU, 또는 TU는 slice 또는 sequence에 대해 하위 레벨 단위일 수 있다.
본 개시의 일 실시예를 따르면 상위 레벨 시그날링은 candidate의 maximum number를 나타내는 시그날링을 포함할 수 있다. 예를 들면 상위 레벨 시그날링은 merge candidate의 maximum number를 나타내는 시그날링을 포함할 수 있다. 예를 들면 상위 레벨 시그날링은 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링을 포함할 수 있다. 상기 merge candidate의 maximum number를 나타내는 시그날링 또는 상기 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링은 inter prediction이 허용되는 경우에 시그날링, parsing되는 것이 가능하다. Inter prediction이 허용되는지는 slice type에 의해 결정되는 것이 가능하다. Slice type은 I, P, B 등이 존재할 수 있다. 예를 들어 slice type이 I인 경우에는 inter prediction이 허용되지 않을 수 있다. 예를 들어 slice type이 I인 경우에는 intra prediction 또는 intra block copy(IBC) 만을 사용할 수 있다. 또한 slice type이 P 또는 B인 경우에는 inter prediction이 허용될 수 있다. 또한 slice type이 P 또는 B인 경우에는 intra prediction, IBC 등이 허용될 수 있다. 또한 slice type이 P인 경우에는 pixel을 예측하는 데에 많아야 1개의 reference list를 사용하는 것이 가능하다. 또한 slice type이 B인 경우에는 pixel을 예측하는 데에 다수의 reference list를 사용하는 것이 가능하다. 예를 들면 slice type이 B인 경우에는 pixel을 예측하는 데에 많으면 두 개의 reference list를 사용하는 것이 가능하다.
본 개시의 일 실시예를 따르면 maximum number를 시그날링할 때 기준값을 기초로 시그날링하는 것이 가능하다. 예를 들면 (기준값 - maximum number)를 시그날링하는 것이 가능하다. 따라서 decoder에서 parsing한 값과 기준값을 기초로 maximum number를 derive하는 것이 가능하다. 예를 들면 (기준값 - parsing한 값)을 maximum number로 결정할 수 있다.
일 실시예를 따르면 상기 merge candidate의 maximum number를 나타내는 시그날링에서의 기준값은 6일 수 있다.
일 실시예를 따르면 상기 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링에서의 기준값은 상기 merge candidate의 maximum number일 수 있다.
도 48를 참조하면 merge candidate의 maximum number를 나타내는 시그날링은 six_minus_max_num_merge_cand일 수 있다. 여기서 merge candidate는 머지 모션 벡터 예측에 대한 후보를 의미할 수 있다. 이하에서는 설명의 편의를 위하여 six_minus_max_num_merge_cand를 제 1 정보라고도 지칭한다. 도 2 및 도 7을 참조하면, 시그날링은 비트스트림을 통하여 인코더에서 디코더로 전송되는 신호를 의미할 수 있다. six_minus_max_num_merge_cand(제 1 정보)는 시퀀스 단위로 시그날링될 수 있다. 디코더는 비트스트림으로부터 six_minus_max_num_merge_cand(제 1 정보)를 파싱할 수 있다.
또한 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링은 max_num_merge_cand_minus_max_num_triangle_cand일 수 있다. 도 2 및 도 7을 참조하면, 시그날링은 비트스트림을 통하여 인코더에서 디코더로 전송되는 신호를 의미할 수 있다. 디코더는 비트스트림으로부터 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)를 파싱할 수 있다. max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)는 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수와 관련된 정보일 수 있다.
또한 merge candidate의 maximum number는 MaxNumMergeCand(머지 후보의 최대 개수)일 수 있고, 이 값은 six_minus_max_num_merge_cand(제 1 정보)에 기초할 수 있다. 또한 TPM에서 사용되는 candidate의 maximum number는 MaxNumTriangleMergeCand일 수 있고, 이 값은 max_num_merge_cand_minus_max_num_triangle_cand에 기초할 수 있다. MaxNumMergeCand(머지 후보의 최대 개수)는 머지 모드에 사용될 수 있으며, 블락이 모션 보상을 위해 파티셔닝되거나, 또는 파티서닝되지 않는 경우에 사용될 수 있는 정보이다. 이상에서는 TPM을 기준으로 설명하였으나 GPM에 대해서도 동일한 방식으로 설명될 수 있다.
본 개시의 일 실시예를 따르면 TPM mode를 사용할 수 있는지 나타내는 상위 레벨 시그날링이 존재할 수 있다. 도 48를 참조하면 TPM mode를 사용할 수 있는지 나타내는 상위 레벨 시그날링은 sps_triangle_enabled_flag(제 2 정보)일 수 있다. TPM mode를 사용할 수 있는지 여부를 나타내는 정보는 인터 예측을 위해 도 46과 같이 블락을 파티셔닝할 수 있는지 여부를 나타내는 정보와 동일할 수 있다. GPM은 TPM을 포함하므로 블락을 파티셔닝할 수 있는지 여부를 나타내는 정보는 GPM 모드를 사용할지 여부를 나타내는 정보와 동일할 수 있다. 인터 예측을 위한 다는 것은 모션 보상을 한다는 것을 나타낼 수 있다. 즉, sps_triangle_enabled_flag(제 2 정보)는 인터 예측을 위해 블락을 파티셔닝할 수 있는지 여부를 나타내는 정보일 수 있다. 블락을 파티셔닝할 수 있는지 여부를 나타내는 제 2 정보가 1 인 경우 TPM 또는 GPM을 사용할 수 있음을 나타낼 수 있다. 또한 제 2 정보가 0인 경우 TPM 또는 GPM을 사용할 수 없음을 나타낼 수 있다. 하지만 이에 한정되는 것은 아니며 제 2 정보가 0 인 경우 TPM 또는 GPM을 사용할 수 있음을 나타낼 수 있다. 또한 제 2 정보가 1인 경우 TPM 또는 GPM을 사용할 수 없음을 나타낼 수 있다.
도 2 및 도 7을 참조하면, 시그날링은 비트스트림을 통하여 인코더에서 디코더로 전송되는 신호를 의미할 수 있다. 디코더는 비트스트림으로부터 sps_triangle_enabled_flag(제 2 정보)를 파싱할 수 있다.
본 개시의 일 실시예를 따르면 TPM의 partition 개수 이상의 TPM에서 사용되는 candidate가 존재할 수 있는 경우에만 TPM을 사용하는 것이 가능하다. 예를 들어 TPM이 두 개로 partitioning 될 때 TPM에서 사용되는 candidate가 2개 이상 존재할 수 있는 경우에만 TPM을 사용하는 것이 가능하다. 일 실시예를 따르면 TPM에서 사용되는 candidate는 merge candidate에 기초할 수 있다. 따라서 본 개시의 일 실시예를 따르면 merge candidate의 maximum number가 2 이상일 때 TPM을 사용하는 것이 가능할 수 있다. 따라서 merge candidate의 maximum number가 2 이상일 때 TPM과 관련된 시그날링을 parsing하는 것이 가능하다. TPM과 관련된 시그날링은 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링일 수 있다.
도 48를 참조하면 sps_triangle_enabled_flag가 1이고, MaxNumMergeCand가 2 이상인 경우에 max_num_merge_cand_minus_max_num_triangle_cand를 parsing하는 것이 가능하다. 또한 sps_triangle_enabled_flag가 0 이거나 MaxNumMergeCand가 2보다 작은 경우에 max_num_merge_cand_minus_max_num_triangle_cand를 parsing하지 않는 것이 가능하다.
도 49은 본 개시의 일 실시예에 따른 TPM에서 사용되는 candidate의 maximum number를 나타낸 도면이다.
도 49을 참조하면 TPM에서 사용되는 candidate의 maximum number는 MaxNumTriangleMergeCand일 수 있다. 또한 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링은 max_num_merge_cand_minus_max_num_triangle_cand일 수 있다. 또한 도 48에서 설명한 내용은 생략했을 수 있다.
본 개시의 일 실시예를 따르면 TPM에서 사용되는 candidate의 maximum number는 "TPM의 partition 개수"부터 "TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링에서의 기준값" 범위(inclusive)에서 존재할 수 있다. 따라서 TPM의 partition 개수가 2이고, 기준값이 merge candidate의 maximum number인 경우, 도 49에 나타낸 것처럼 MaxNumTriangleMergeCand는 2부터 MaxNumMergeCand 범위(inclusive)에서 존재할 수 있다.
본 개시의 일 실시예를 따르면 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링이 존재하지 않는 경우 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링을 infer하거나 TPM에서 사용되는 candidate의 maximum number를 infer하는 것이 가능하다. 예를 들어 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링이 존재하지 않는 경우 TPM에서 사용되는 candidate의 maximum number를 0으로 infer할 수 있다. 또는 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링이 존재하지 않는 경우 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링을 기준값으로 infer할 수 있다.
또한 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링이 존재하지 않는 경우 TPM을 사용하지 않는 것이 가능하다. 또는 TPM에서 사용되는 candidate의 maximum number가 TPM의 partition 개수보다 적은 경우 TPM을 사용하지 않는 것이 가능하다. 또는 TPM에서 사용되는 candidate의 maximum number가 0인 경우 TPM을 사용하지 않는 것이 가능하다.
그러나 도 48 내지 도 49의 실시예를 따르면 TPM의 partition 개수와 "TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링에서의 기준값"이 같은 경우 TPM에서 사용되는 candidate의 maximum number으로 가능한 값은 1개 뿐일 수 있다. 그러나 도 48 내지 도 49의 실시예를 따르면 그러한 경우에도 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링이 parsing될 수 있고, 이것은 불필요한 것일 수 있다. 만약 MaxNumMergeCand가 2인 경우에 도 49을 참조하면 MaxNumTriangleMergeCand로 가능한 값은 2 뿐만일 수 있다. 그러나 도 48를 참조하면 그러한 경우에도 max_num_merge_cand_minus_max_num_triangle_cand를 parsing할 수 있다.
도 49을 참조하면 MaxNumTriangleMergeCand는 (MaxNumMergeCand - max_num_merge_cand_minus_max_num_triangle_cand)로 결정될 수 있다.
도 50은 본 개시의 일 실시예에 따른 TPM에 관한 상위 레벨 시그날링을 나타낸 도면이다.
본 개시의 일 실시예를 따르면 TPM의 partition 개수와 "TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링에서의 기준값"이 같은 경우 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링을 parsing하지 않을 수 있다. 또한 앞서 설명한 실시예를 따르면 TPM의 partition 개수는 2일 수 있다. 또한 "TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링에서의 기준값"은 merge candidate의 maximum number일 수 있다. 따라서 merge candidate의 maximum number가 2인 경우 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링을 parsing하지 않을 수 있다.
또는 "TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링에서의 기준값"이 TPM의 partition 개수 이하인 경우 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링을 parsing하지 않을 수 있다. 따라서 merge candidate의 maximum number가 2 이하인 경우 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링을 parsing하지 않을 수 있다.
도 50의 라인(5001)을 참조하면 MaxNumMergeCand(머지 후보의 최대 개수)가 2인 경우 혹은 MaxNumMergeCand(머지 후보의 최대 개수)가 2 이하인 경우 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)를 parsing하지 않을 수 있다. 또한 sps_triangle_enabled_flag(제 2 정보)가 1이고, MaxNumMergeCand(머지 후보의 최대 개수)가 2보다 큰 경우에 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)를 parsing할 수 있다. 또한 sps_triangle_enabled_flag(제 2 정보)가 0인 경우 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)를 parsing하지 않을 수 있다. 따라서 sps_triangle_enabled_flag(제 2 정보)가 0이거나 MaxNumMergeCand(머지 후보의 최대 개수)가 2 이하인 경우 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)를 parsing하지 않을 수 있다.
도 51은 본 개시의 일 실시예에 따른 TPM에서 사용되는 candidate의 maximum number를 나타낸 도면이다.
도 51의 실시예는 도 50의 실시예의 경우에 함께 실시되는 것이 가능하다. 또한 앞서 설명한 것들은 본 도면에서 설명을 생략했을 수 있다.
본 개시의 일 실시예를 따르면 "TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링에서의 기준값"이 TPM의 partition 개수인 경우, TPM에서 사용되는 candidate의 maximum number를 TPM의 partition 개수로 infer, 설정할 수 있다. 또한 infer, 설정하는 것은 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링이 존재하지 않는 경우일 수 있다. 도 50의 실시예를 따르면 "TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링에서의 기준값"이 TPM의 partition 개수인 경우, TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링을 parsing하지 않을 수 있고, TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링이 존재하지 않는 경우, TPM에서 사용되는 candidate의 maximum number 값을 TPM의 partition 개수로 infer할 수 있다. 또한 이것을 추가적인 조건을 만족시키는 경우에 수행하는 것이 가능하다. 추가적인 조건은 TPM mode를 사용할 수 있는지 나타내는 상위 레벨 시그날링이 1인 조건일 수 있다.
또한 본 실시예에서 TPM에서 사용되는 candidate의 maximum number를 infer, 설정하는 것을 설명하였는데, TPM에서 사용되는 candidate의 maximum number를 infer, 설정하는 대신에 설명한 TPM에서 사용되는 candidate의 maximum number 값이 도출되도록 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링을 infer, 설정하는 것도 가능하다.
도 50을 참조하면, sps_triangle_enabled_flag(제 2 정보)가 1을 나타내고 MaxNumMergeCand(머지 후보의 최대 개수)가 2보다 큰 경우에 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)가 수신될 수 있다. 이때, 도 51의 라인(5101)을 참조하면, 명확히 시그날링된 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)를 이용하여 MaxNumTriangleMergeCand(파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수)가 획득될 수 있다. 정리하자면, sps_triangle_enabled_flag(제 2 정보)가 1을 나타내고 MaxNumMergeCand(머지 후보의 최대 개수)가 3보다 크거나 같은 경우, MaxNumMergeCand(머지 후보의 최대 개수)에서 제 3 정보(max_num_merge_cand_minus_max_num_triangle_cand)를 차감하여 MaxNumTriangleMergeCand(파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수)가 획득될 수 있다.
도 51의 라인(5102)을 참조하면 sps_triangle_enabled_flag(제 2 정보)가 1이고, MaxNumMergeCand(머지 후보의 최대 개수)가 2인 경우 MaxNumTriangleMergeCand(파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수)를 2로 설정하는 것이 가능하다. 보다 자세히 설명하면, 이미 설명한 바와 같이, sps_triangle_enabled_flag(제 2 정보)가 1을 나타내고 MaxNumMergeCand(머지 후보의 최대 개수)가 2보다 큰 경우에 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)가 수신될 수 있으므로, 라인(5102)과 같이 sps_triangle_enabled_flag(제 2 정보)가 1이고, MaxNumMergeCand(머지 후보의 최대 개수)가 2인 경우, max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)가 수신되지 않을 수 있다. 이 때, umTriangleMergeCand(파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수)는 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보) 없이 결정될 수 있다.
또한 도 51의 라인(5103)을 참조하면 sps_triangle_enabled_flag(제 2 정보)가 0이거나 MaxNumMergeCand(머지 후보의 최대 개수)가 2가 아닌 경우 MaxNumTriangleMergeCand(파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수)를 0으로 infer, 설정하는 것이 가능하다. 이때, 라인(5101)에서 이미 설명한 바와 같이, sps_triangle_enabled_flag(제 2 정보)가 1을 나타내고 MaxNumMergeCand(머지 후보의 최대 개수)가 3보다 크거가 같은 경우는 max_num_merge_cand_minus_max_num_triangle_cand(제 3 정보)가 시그날링될 것이므로, MaxNumTriangleMergeCand를 0으로 infer, 설정되는 경우는 상기 제 2 정보가 0이거나, 상기 머지 후보의 최대 개수가 1인 경우일 수 있다. 정리하자면, sps_triangle_enabled_flag(제 2 정보)가 0이거나, MaxNumMergeCand(머지 후보의 최대 개수)가 1인 경우, MaxNumTriangleMergeCand(파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수)는 0으로 설정될 수 있다.
MaxNumMergeCand(머지 후보의 최대 개수)와 MaxNumTriangleMergeCand(파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수)는 서로 다른 용도로 사용될 수 있다. 예를 들어 MaxNumMergeCand(머지 후보의 최대 개수)는 블락이 모션 보상을 위하여 파티셔닝 되거나 파티셔닝 되지 않는 경우에 사용될 수 있다. 하지만 MaxNumTriangleMergeCand(파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수)는 블락이 파티셔닝된 경우에 사용될 수 있는 정보이다. 머지 모드인 파티셔닝된 블락에 대한 후보들의 개수는 MaxNumTriangleMergeCand(파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수)를 넘을 수 없다.
또한 또다른 실시예를 사용하는 것도 가능하다. 도 51의 실시예에서 MaxNumMergeCand가 2가 아닌 경우는 2보다 큰 경우도 포함하게 되는데 그 경우 MaxNumTriangleMergeCand를 0으로 infer, 설정한다는 것의 의미가 불분명할 수 있지만 그러한 경우에는 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링이 존재하므로 infer하지 않게 되므로 동작이 이상이 없다. 그러나 이 실시예에서는 의미를 살려서 infer할 수 있다.
만약 sps_triangle_enabled_flag(제 2 정보)가 1이고, MaxNumMergeCand(머지 후보의 최대 개수)가 2 이상인 경우 MaxNumTriangleMergeCand를 2(또는 MaxNumMergeCand)로 infer, 설정하는 것이 가능하다. 그렇지 않은 경우(즉, sps_triangle_enabled_flag가 0이거나 MaxNumMergeCand가 2보다 작은 경우) MaxNumTriangleMergeCand를 0으로 infer, 설정하는 것이 가능하다.
또는 만약 sps_triangle_enabled_flag가 1이고, MaxNumMergeCand가 2인 경우 MaxNumTriangleMergeCand를 2로 infer, 설정하는 것이 가능하다. 그렇지 않고 만약(otherwise if) sps_triangle_enabled_flag가 0인 경우 MaxNumTriangleMergeCand를 0으로 infer, 설정하는 것이 가능하다.
따라서 상기 실시예들에서 도 50의 실시예를 따르면 MaxNumMergeCand가 0 or 1 or 2인 경우 TPM에서 사용되는 candidate의 maximum number를 나타내는 시그날링가 존재하지 않을 수 있고, MaxNumMergeCand가 0 or 1인 경우에는 TPM에서 사용되는 candidate의 maximum number을 0으로 infer, 설정할 수 있다. MaxNumMergeCand가 2인 경우에는 TPM에서 사용되는 candidate의 maximum number를 2로 infer, 설정할 수 있다.
도 52는 본 개시의 일 실시예에 따른 TPM 관련 syntax element들을 나타낸 도면이다.
앞서 설명한 것과 같이 TPM에서 사용되는 candidate의 maximum number가 존재할 수 있고, TPM의 partition 개수가 기설정되어 있을 수 있다. 또한 TPM에서 사용하는 candidate index들은 서로 다를 수 있다.
본 개시의 일 실시예를 따르면 TPM에서 사용되는 candidate의 maximum number가 TPM의 partition 개수와 같은 경우에는 그렇지 않은 경우와 다른 시그날링을 할 수 있다. 예를 들어 TPM에서 사용되는 candidate의 maximum number가 TPM의 partition 개수와 같은 경우에는 그렇지 않은 경우와 다른 candidate index 시그날링을 할 수 있다. 이에 따라 더 적은 비트로 시그날링하는 것이 가능하다. 또는 TPM에서 사용되는 candidate의 maximum number가 TPM의 partition 개수 이하인 경우에는 그렇지 않은 경우와 다른 시그날링을 할 수 있다(이 중 TPM의 partition 개수보다 작은 경우에는 TPM을 사용할 수 없는 경우일 수 있다).
TPM의 partition이 2인 경우 두 개의 candidate index를 시그날링할 수 있다. 만약 TPM에서 사용되는 candidate의 maximum number가 2인 경우 가능한 candidate index 조합은 두 개 뿐일 수 있다. 두 개의 조합은 m, n이 각각 0, 1인 것과 1, 0인 것일 수 있다. 따라서 1-bit의 시그날링만으로 두 개의 candidate index를 시그날링할 수 있다.
도 52를 참조하면 MaxNumTriangleMergeCand가 2인 경우에는 그렇지 않은 경우(그렇지 않고 TPM을 사용하는 경우엔 MaxNumTriangleMergeCand가 2보다 큰 경우)와 다른 candidate index 시그날링을 할 수 있다. 또는 MaxNumTriangleMergeCand가 2이하인 경우에는 그렇지 않은 경우(그렇지 않고 TPM을 사용하는 경우엔 MaxNumTriangleMergeCand가 2보다 큰 경우)와 다른 candidate index 시그날링을 할 수 있다. 다른 candidate index 시그날링은 도 52를 참조하면 merge_triangle_idx_indicator parsing일 수 있다. 다른 candidate index 시그날링은 merge_triangle_idx0 또는 merge_triangle_idx1을 parsing하지 않는 시그날링 방법일 수 있다. 이에 대하여 도 53에서 더 설명한다.
도 53은 본 개시의 일 실시예에 따른 TPM candidate index 시그날링을 나타낸 도면이다.
본 개시의 일 실시예를 따르면 도 52에서 설명한 다른 index 시그날링을 사용하는 경우에 candidate index를 merge_triangle_idx_indicator에 기초하여 결정할 수 있다. 또한 다른 index 시그날링을 사용하는 경우에 merge_triangle_idx0 또는 merge_triangle_idx1이 존재하지 않을 수 있다.
본 개시의 일 실시예를 따르면 TPM에서 사용되는 candidate의 maximum number가 TPM의 partition 개수와 같은 경우에는 TPM candidate index를 merge_triangle_idx_indicator에 기초하여 결정할 수 있다. 또한 이것은 TPM을 사용하는 block인 경우일 수 있다.
더 구체적으로 MaxNumTriangleMergeCand가 2인 경우(또는 MaxNumTriangleMergeCand가 2이고 MergeTriangleFlag가 1인 경우)에는 merge_triangle_idx_indicator에 기초하여 TPM candidate index를 결정할 수 있다. 이 경우에 만약 merge_triangle_idx_indicator가 0이면 TPM candidate indices인 m, n을 각각 0, 1로 설정하고, 만약 merge_triangle_idx_indicator가 1이면 TPM candidate indices인 m, n을 각각 1, 0로 설정할 수 있다. 또는 m, n이 설명한 것과 같도록 parsing될 수 있는 값(syntax element)인 merge_triangle_idx0 또는 merge_triangle_idx1을 infer, 설정할 수 있다.
도 47에서 설명한 merge_triangle_idx0, merge_triangle_idx1을 기초로 m, n 설정하는 방법을 참조하고, 도 53을 참조하면 merge_triangle_idx0이 존재하지 않는 경우, 만약 MaxNumTriangleMergeCand가 2이면(또는 MaxNumTriangleMergeCand가 2이고, MergeTriangleFlag가 1이면) merge_triangle_idx_indicator가 1이면 merge_triangle_idx0 값을 1로 infer할 수 있다. 또한 그렇지 않은 경우 merge_triangle_idx0 값을 0으로 infer할 수 있다. 또한 merge_triangle_idx1이 존재하지 않는 경우 merge_triangle_idx1을 0으로 infer할 수 있다. 따라서 MaxNumTriangleMergeCand가 2이면 merge_triangle_idx_indicator가 0일 때 merge_triangle_idx0, merge_triangle_idx1이 각각 0, 0이고, 이에 따라 m, n은 각각 0, 1이 될 수 있다. 또한 MaxNumTriangleMergeCand가 2이면 merge_triangle_idx_indicator가 1일 때 merge_triangle_idx0, merge_triangle_idx1이 각각 1, 0이고, 이에 따라 m, n은 각각 1, 0이 될 수 있다.
도 54은 본 개시의 일 실시예에 따른 TPM candidate index 시그날링을 나타낸 도면이다.
도 47에서 TPM candidate indices를 결정하는 방법을 설명하였는데 도 54에서의 실시예에서는 다른 결정 방법, 시그날링 방법을 설명한다. 앞서 설명한 것과 중복된 설명은 생략할 수 있다. 또한 m, n은 도 47에서 설명한 것처럼 candidate indices를 나타낼 수 있다.
본 개시의 일 실시예를 따르면 merge_triangle_idx0과 merge_triangle_idx1 중 기설정된 syntax element에 m, n 중 작은 값을 시그날링할 수 있다. 또한 merge_triangle_idx0과 merge_triangle_idx1 중 나머지 하나에는 m과 n의 차이에 기초한 값을 시그날링할 수 있다. 또한 m, n의 대소관계를 나타내는 값을 시그날링을 할 수 있다.
예를 들어 merge_triangle_idx0은 m, n 중 작은 값일 수 있다. 또한 merge_triangle_idx1은 |m-n|에 기초한 값일 수 있다. merge_triangle_idx1은 (|m-n| - 1)일 수 있다. 이것은 m과 n이 같이 않을수 있기 때문이다. 또한 m, n의 대소관계를 나타내는 값이 도 54의 merge_triangle_bigger일 수 있다.
이 관계를 이용하여 merge_triangle_idx0과 merge_triangle_idx1, merge_triangle_bigger에 기초하여 m, n을 결정할 수 있다. 도 54을 참조하면 merge_triangle_bigger 값에 기초하여 다른 동작을 할 수 있다. 예를 들어 merge_triangle_bigger가 0인 경우 n이 m보다 큰 것일 수 있다. 이 경우 m은 merge_triangle_idx0일 수 있다. 또한 n은 (merge_triangle_idx1 + m + 1)일 수 있다. 또한 merge_triangle_bigger가 1인 경우 m이 n보다 큰 것일 수 있다. 이 경우 n은 merge_triangle_idx0일 수 있다. 또한 m은 (merge_triangle_idx1 + n + 1)일 수 있다.
도 54에서의 방법은 도 47에서의 방법에 비해 m, n 중 작은 값이 0이 아닌 경우에(혹은 큰 경우) 시그날링 오버헤드를 줄일 수 있는 장점이 있다. 예를 들어 m, n이 각각 3, 4인 경우 도 47의 방법에서는 merge_triangle_idx0, merge_triangle_idx1을 각각 3, 3으로 시그날링 해야할 수 있다. 그러나 도 54의 방법에서는 m, n이 각각 3, 4인 경우 merge_triangle_idx0, merge_triangle_idx1을 각각 3, 0으로 시그날링 해야할 수 있다(이에 추가로 대소관계를 나타내는 시그날링이 필요할 수 있다.). 따라서 variable length signaling을 쓸 때 encoding, decoding하는 값의 크기가 줄어들기 때문에 적은 비트를 사용하는 것이 가능하다.
도 55는 본 개시의 일 실시예에 따른 TPM candidate index 시그날링을 나타낸 도면이다.
도 47에서 TPM candidate indices를 결정하는 방법을 설명하였는데 도 55에서의 실시예에서는 다른 결정 방법, 시그날링 방법을 설명한다. 앞서 설명한 것과 중복된 설명은 생략할 수 있다. 또한 m, n은 도 47에서 설명한 것처럼 candidate indices를 나타낼 수 있다.
본 개시의 일 실시예를 따르면 merge_triangle_idx0과 merge_triangle_idx1 중 기설정된 syntax element에 m, n 중 큰 값에 기초한 값을 시그날링할 수 있다. 또한 merge_triangle_idx0과 merge_triangle_idx1 중 나머지 하나에는 m, n 중 작은 값을 기초로 한 값을 시그날링할 수 있다. 또한 m, n의 대소관계를 나타내는 값을 시그날링을 할 수 있다.
예를 들어 merge_triangle_idx0은 m, n 중 큰 값에 기초할 수 있다. 일 실시예를 따르면 m, n이 같지 않기 때문에 이에 따라 m, n 중 큰 값은 1 이상일 것이다. 따라서 m, n 중 큰 값이 0이 제외된다는 것을 고려하여 더 적은 비트로 시그날링 할수 있다. 예를 들어 merge_triangle_idx0은 ((m, n 중 큰 값) - 1) 일 수 있다. 이때 merge_triangle_idx0의 maximum 값은 (MaxNumTriangleMergeCand - 1 - 1) 일 수 있다(0부터 시작하는 값이기 때문에 -1, 큰 값이 0인 것을 제외할 수 있기 때문에 -1). Maximum 값은 binarization에서 사용될 수 있고, maximum 값이 줄어들면 더 적은 비트를 사용하는 경우가 있을 수 있다. 또한 merge_triangle_idx1은 m, n 중 작은 값일 수 있다. 또한 merge_triangle_idx1의 maximum 값은 merge_triangle_idx0일 수 있다. 따라서 maximum 값을 MaxNumTriangleMergeCand로 설정하는 것보다 더 적은 비트를 사용하는 경우가 있을 수 있다. 또한 merge_triangle_idx0이 0인 경우, 즉, m, n 중 큰 값이 1인 경우에는 m, n 중 작은 값이 0이므로 추가적인 시그날링이 존재하지 않을 수 있다. 예를 들어 merge_triangle_idx0이 0인 경우, 즉, m, n 중 큰 값이 1인 경우에는 m, n 중 작은 값을 0으로 결정할 수 있다. 또는 merge_triangle_idx0이 0인 경우, 즉, m, n 중 큰 값이 1인 경우에는 merge_triangle_idx1을 0으로 infer, 결정할 수 있다. 도 22를 참조하면 merge_triangle_idx0에 기초하여 merge_triangle_idx1 parsing 여부를 결정할 수 있다. 예를 들어 merge_triangle_idx0가 0보다 큰 경우 merge_triangle_idx1을 parsing할 수 있고, merge_triangle_idx0가 0인 경우 merge_triangle_idx1를 parsing하지 않을 수 있다.
또한 m, n의 대소관계를 나타내는 값이 도 55의 merge_triangle_bigger일 수 있다.
이 관계를 이용하여 merge_triangle_idx0과 merge_triangle_idx1, merge_triangle_bigger에 기초하여 m, n을 결정할 수 있다. 도 55를 참조하면 merge_triangle_bigger 값에 기초하여 다른 동작을 할 수 있다. 예를 들어 merge_triangle_bigger가 0인 경우 m이 n보다 큰 것일 수 있다. 이 경우 m은 (merge_triangle_idx0 + 1)일 수 있다. 또한 n은 merge_triangle_idx1일 수 있다. 또한 merge_triangle_bigger가 1인 경우 n이 m보다 큰 것일 수 있다. 이 경우 n은 (merge_triangle_idx0 + 1) 일 수 있다. 또한 m은 merge_triangle_idx1일 수 있다. 또한 merge_triangle_idx1가 존재하지 않는 경우 그 값을 0으로 infer할 수 있다.
도 55에서의 방법은 도 47에서의 방법에 비해 m, n 값에 따라 시그날링 오버헤드를 줄일 수 있는 장점이 있다. 예를 들어 m, n이 각각 1, 0인 경우 도 47의 방법에서는 merge_triangle_idx0, merge_triangle_idx1을 각각 1, 0으로 시그날링 해야할 수 있다. 그러나 도 55의 방법에서는 m, n이 각각 1, 0인 경우 merge_triangle_idx0, merge_triangle_idx1을 각각 0, 0으로 시그날링 해야할 수 있는데 merge_triangle_idx1는 encoding, parsing 하지 않고 infer할 수 있다(이에 추가로 대소관계를 나타내는 시그날링이 필요할 수 있다.). 따라서 variable length signaling을 쓸 때 encoding, decoding하는 값의 크기가 줄어들기 때문에 적은 비트를 사용하는 것이 가능하다. 또는 m, n이 각각 2, 1인 경우, 도 47의 방법에서는 merge_triangle_idx0, merge_triangle_idx1을 각각 2, 1로, 도 55의 방법에서는 merge_triangle_idx0, merge_triangle_idx1을 각각 1, 1로 시그날링해야할 수 있다. 그런데 이때 도 55의 방법에서는 merge_triangle_idx1의 maximum 값이 (3-1-1)=1이기 때문에 maximum 값이 클 때보다 1을 적은 비트로 시그날링할 수 있다. 예를 들면 도 55의 방법은 m, n간의 차이가 적을 때, 예를 들면 차이가 1일 때 장점을 가지는 방법일 수 있다.
또한 도 55의 syntax 구조에서 merge_triangle_idx1를 parsing하는지 여부를 결정하기 위해 merge_triangle_idx0을 참조하는 것으로 설명하였는데, m, n 중 큰 값을 기초로 결정하는 것도 가능하다. 즉, m, n 중 큰 값이 1 이상인 경우와 그렇지 않은 경우로 구분할 수 있다. 다만 이 경우 merge_triangle_bigger parsing이 merge_triangle_idx1를 parsing하는지 여부를 결정보다 먼저 일어나야할 수 있다.
이상에서는 구성을 구체적인 실시예를 통하여 설명하였으나, 당업자라면 본 개시의 취지 및 범위를 벗어나지 않고 수정, 변경을 할 수 있다. 따라서 본 개시의 상세한 설명 및 실시예로부터 본 개시가 속하는 기술분야에 속한 사람이 용이하게 유추할 수 있는 것은 본 개시의 권리범위에 속하는 것으로 해석된다.

Claims (22)

  1. 비디오 신호를 처리하는 방법에 있어서,
    비트스트림으로부터 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 나타내는 AMVR(Adaptive Motion Vector Resolution) 가능 플래그(sps_amvr_enabled_flag)를 파싱하는 단계;
    비트스트림으로부터 어파인 모션 보상이 사용될 수 있는지 여부를 나타내는 어파인 가능 플래그(sps_affine_enabled_flag)를 파싱하는 단계;
    상기 어파인 가능 플래그(sps_affine_enabled_flag)에 기초하여 어파인 모션 보상이 사용될 수 있는지 여부를 결정하는 단계;
    상기 어파인 모션 보상이 사용될 수 있는 경우, 상기 AMVR 가능 플래그(sps_amvr_enabled_flag)에 기초하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 결정하는 단계; 및
    상기 적응적인 모션 벡터 차분 해상도가 사용되는 경우, 비트스트림으로부터 상기 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타내는 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)를 파싱하는 단계;
    를 포함하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  2. 제 1 항에 있어서,
    상기 AMVR 가능 플래그(sps_amvr_enabled_flag), 상기 어파인 가능 플래그(sps_affine_enabled_flag) 또는 상기 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag) 중 하나는 Coding Tree Unit, 슬라이스(slice), 타일(tile), 타일 그룹(tile group), 영상(picture), 또는 시퀀스(sequence) 단위 중 하나로 시그날링 되는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  3. 제 1 항에 있어서,
    상기 어파인 모션 보상이 사용될 수 있고, 상기 적응적인 모션 벡터 차분 해상도가 사용되지 않은 경우, 상기 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)는 상기 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 암시하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  4. 제 1 항에 있어서,
    상기 어파인 모션 보상이 사용될 수 없는 경우, 상기 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)는 상기 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 암시(infered)하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  5. 제 1 항에 있어서,
    상기 AMVR 가능 플래그(sps_amvr_enabled_flag)가 적응적인 모션 벡터 차분 해상도의 사용을 나타내고, 비트스트림으로부터 획득된 인터 어파인 플래그(inter_affine_flag)가 현재 블락에 대해 어파인 모션 보상이 사용되지 않음을 나타내고, 상기 현재 블락에 대한 복수의 모션 벡터 차분들 중 적어도 하나가 0이 아닌 경우, 비트스트림으로부터 모션 벡터 차분의 해상도(resolution)에 대한 정보를 파싱하는 단계; 및
    상기 모션 벡터 차분의 해상도에 대한 정보에 기초하여 상기 현재 블락에 대한 상기 복수의 모션 벡터 차분을 수정하는 단계를 포함하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  6. 제 1 항에 있어서,
    상기 어파인 AMVR 가능 플래그가 상기 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있음을 나타내고, 비트스트림으로부터 획득된 인터 어파인 플래그(inter_affine_flag)가 현재 블락에 대해 어파인 모션 보상의 사용을 나타내고, 상기 현재 블락에 대한 복수의 컨트롤 포인트 모션 벡터 차분들 중 적어도 하나가 0이 아닌 경우, 비트스트림으로부터 모션 벡터 차분의 해상도(resolution)에 대한 정보를 파싱하는 단계; 및
    상기 모션 벡터 차분의 해상도에 대한 정보에 기초하여 상기 현재 블락에 대한 상기 복수의 컨트롤 포인트 모션 벡터 차분을 수정하는 단계를 포함하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  7. 제 1 항에 있어서,
    현재 블락에 대하여 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)를 획득하는 단계;
    상기 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 제 0 참조 픽쳐 리스트(list 0)만 사용하는 것이 아님을 나타내는 경우, 비트스트림으로부터 제 1 참조 픽쳐 리스트(list 1)의 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하는 단계;
    모션 벡터 예측자 후보자들을 생성하는 단계;
    상기 모션 벡터 예측자 인덱스에 기초하여 상기 모션 벡터 예측자 후보자들로부터 모션 벡터 예측자를 획득하는 단계; 및
    상기 모션 벡터 예측자에 기초하여 상기 현재 블락을 예측하는 단계를 포함하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  8. 제 7 항에 있어서,
    비트스트림으로부터, 상기 제 1 참조 픽쳐 리스트에 대해 모션 벡터 차분 및 복수의 컨트롤 포인트 모션 벡터 차분들이 0으로 설정될지 여부를 나타내는 모션 벡터 차분 제로 플래그(mvd_l1_zero_flag)를 획득하는 단계를 더 포함하고,
    상기 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하는 단계는,
    상기 모션 벡터 차분 제로 플래그(mvd_l1_zero_flag)가 1이고, 상기 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 상기 제 0 참조 픽쳐 리스트 및 상기 제 1 참조 픽쳐 리스트 모두를 사용하는 것을 나타내는지 여부에 관련 없이 상기 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하는 단계를 포함하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  9. 머지 모션 벡터 예측에 대한 후보들의 최대 개수에 관련된 제 1 정보(six_minus_max_num_merge_cand)를 비트스트림으로부터 시퀀스 단위로 파싱하는 단계;
    상기 제 1 정보에 기초하여 머지 후보의 최대 개수를 획득하는 단계;
    인터 예측을 위해 블락을 파티셔닝 할 수 있는지 여부를 나타내는 제 2 정보를 비트스트림으로부터 파싱하는 단계; 및
    상기 제 2 정보가 1을 나타내고, 상기 머지 후보의 최대 개수가 2보다 큰 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수와 관련된 제 3 정보를 비트스트림으로부터 파싱하는 단계를 포함하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  10. 제 9 항에 있어서,
    상기 제 2 정보가 1을 나타내고, 상기 머지 후보의 최대 개수가 3보다 크거나 같은 경우, 상기 머지 후보의 최대 개수에서 상기 제 3 정보를 차감하여 상기 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 획득하는 단계;
    상기 제 2 정보가 1을 나타내고, 상기 머지 후보의 최대 개수가 2인 경우, 상기 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 2로 설정하는 단계; 및
    상기 제 2 정보가 0이거나, 상기 머지 후보의 최대 개수가 1인 경우, 상기 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 0으로 설정하는 단계를 더 포함하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  11. 비디오 신호를 처리하는 장치는 프로세서 및 메모리를 포함하고,
    상기 프로세서는 상기 메모리에 저장된 명령어에 기초하여,
    비트스트림으로부터 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 나타내는 AMVR(Adaptive Motion Vector Resolution) 가능 플래그(sps_amvr_enabled_flag)를 파싱하고;
    비트스트림으로부터 어파인 모션 보상이 사용될 수 있는지 여부를 나타내는 어파인 가능 플래그(sps_affine_enabled_flag)를 파싱하고;
    상기 어파인 가능 플래그(sps_affine_enabled_flag)에 기초하여 어파인 모션 보상이 사용될 수 있는지 여부를 결정하고;
    상기 어파인 모션 보상이 사용될 수 있는 경우, 상기 AMVR 가능 플래그(sps_amvr_enabled_flag)에 기초하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 결정하고;
    상기 적응적인 모션 벡터 차분 해상도가 사용되는 경우, 비트스트림으로부터 상기 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타내는 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)를 파싱하는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  12. 제 11 항에 있어서,
    상기 AMVR 가능 플래그(sps_amvr_enabled_flag), 상기 어파인 가능 플래그(sps_affine_enabled_flag) 또는 상기 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag) 중 하나는 Coding Tree Unit, 슬라이스(slice), 타일(tile), 타일 그룹(tile group), 영상(picture), 또는 시퀀스(sequence) 단위 중 하나로 시그날링 되는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  13. 제 11 항에 있어서,
    상기 어파인 모션 보상이 사용될 수 있고, 상기 적응적인 모션 벡터 차분 해상도가 사용되지 않은 경우, 상기 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)는 상기 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 암시하는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  14. 제 11 항에 있어서,
    상기 어파인 모션 보상이 사용될 수 없는 경우, 상기 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)는 상기 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 없음을 암시(infered)하는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  15. 제 11 항에 있어서,
    상기 프로세서는 상기 메모리에 저장된 명령어에 기초하여,
    상기 AMVR 가능 플래그(sps_amvr_enabled_flag)가 적응적인 모션 벡터 차분 해상도의 사용을 나타내고, 비트스트림으로부터 획득된 인터 어파인 플래그(inter_affine_flag)가 현재 블락에 대해 어파인 모션 보상이 사용되지 않음을 나타내고, 상기 현재 블락에 대한 복수의 모션 벡터 차분들 중 적어도 하나가 0이 아닌 경우, 비트스트림으로부터 모션 벡터 차분의 해상도(resolution)에 대한 정보를 파싱하고;
    상기 모션 벡터 차분의 해상도에 대한 정보에 기초하여 상기 현재 블락에 대한 상기 복수의 모션 벡터 차분을 수정하는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  16. 제 11 항에 있어서,
    상기 프로세서는 상기 메모리에 저장된 명령어에 기초하여,
    상기 어파인 AMVR 가능 플래그가 상기 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있음을 나타내고, 비트스트림으로부터 획득된 인터 어파인 플래그(inter_affine_flag)가 현재 블락에 대해 어파인 모션 보상의 사용을 나타내고, 상기 현재 블락에 대한 복수의 컨트롤 포인트 모션 벡터 차분들 중 적어도 하나가 0이 아닌 경우, 비트스트림으로부터 모션 벡터 차분의 해상도(resolution)에 대한 정보를 파싱하고;
    상기 모션 벡터 차분의 해상도에 대한 정보에 기초하여 상기 현재 블락에 대한 상기 복수의 컨트롤 포인트 모션 벡터 차분을 수정하는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  17. 제 11 항에 있어서,
    상기 프로세서는 상기 메모리에 저장된 명령어에 기초하여,
    현재 블락에 대하여 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)를 획득하고;
    상기 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 제 0 참조 픽쳐 리스트(list 0)만 사용하는 것이 아님을 나타내는 경우, 비트스트림으로부터 제 1 참조 픽쳐 리스트(list 1)의 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하고;
    모션 벡터 예측자 후보자들을 생성하고;
    상기 모션 벡터 예측자 인덱스에 기초하여 상기 모션 벡터 예측자 후보자들로부터 모션 벡터 예측자를 획득하고;
    상기 모션 벡터 예측자에 기초하여 상기 현재 블락을 예측하는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  18. 제 17 항에 있어서,
    상기 프로세서는 상기 메모리에 저장된 명령어에 기초하여,
    비트스트림으로부터, 상기 제 1 참조 픽쳐 리스트에 대해 모션 벡터 차분 및 복수의 컨트롤 포인트 모션 벡터 차분들이 0으로 설정될지 여부를 나타내는 모션 벡터 차분 제로 플래그(mvd_l1_zero_flag)를 획득하고;
    상기 모션 벡터 차분 제로 플래그(mvd_l1_zero_flag)가 1이고, 상기 참조 픽쳐 리스트에 대한 정보(inter_pred_idc)가 상기 제 0 참조 픽쳐 리스트 및 상기 제 1 참조 픽쳐 리스트 모두를 사용하는 것을 나타내는지 여부에 관련 없이 상기 모션 벡터 예측자 인덱스(mvp_l1_flag)를 파싱하는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  19. 비디오 신호를 처리하는 장치는 프로세서 및 메모리를 포함하고,
    상기 프로세서는 상기 메모리에 저장된 명령어에 기초하여,
    머지 모션 벡터 예측에 대한 후보들의 최대 개수에 관련된 제 1 정보(six_minus_max_num_merge_cand)를 비트스트림으로부터 시퀀스 단위로 파싱하고;
    상기 제 1 정보에 기초하여 머지 후보의 최대 개수를 획득하고;
    인터 예측을 위해 블락을 파티셔닝 할 수 있는지 여부를 나타내는 제 2 정보를 비트스트림으로부터 파싱하고;
    상기 제 2 정보가 1을 나타내고, 상기 머지 후보의 최대 개수가 2보다 큰 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수와 관련된 제 3 정보를 비트스트림으로부터 파싱하는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  20. 제 19 항에 있어서,
    상기 프로세서는 상기 메모리에 저장된 명령어에 기초하여,
    상기 제 2 정보가 1을 나타내고, 상기 머지 후보의 최대 개수가 3보다 크거나 같은 경우, 상기 머지 후보의 최대 개수에서 상기 제 3 정보를 차감하여 상기 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 획득하고;
    상기 제 2 정보가 1을 나타내고, 상기 머지 후보의 최대 개수가 2인 경우, 상기 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 2로 설정하고;
    상기 제 2 정보가 0이거나, 상기 머지 후보의 최대 개수가 1인 경우, 상기 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수를 0으로 설정하는 것을 특징으로 하는 비디오 신호를 처리하는 장치.
  21. 비디오 신호를 처리하는 방법에 있어서,
    적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 나타내는 AMVR(Adaptive Motion Vector Resolution) 가능 플래그(sps_amvr_enabled_flag)를 생성하는 단계;
    어파인 모션 보상이 사용될 수 있는지 여부를 나타내는 어파인 가능 플래그(sps_affine_enabled_flag)를 생성하는 단계;
    상기 어파인 가능 플래그(sps_affine_enabled_flag)에 기초하여 어파인 모션 보상이 사용될 수 있는지 여부를 결정하는 단계;
    상기 어파인 모션 보상이 사용될 수 있는 경우, 상기 AMVR 가능 플래그(sps_amvr_enabled_flag)에 기초하여 적응적인 모션 벡터 차분 해상도가 사용되는지 여부를 결정하는 단계;
    상기 적응적인 모션 벡터 차분 해상도가 사용되는 경우, 상기 어파인 모션 보상에 대하여 적응적인 모션 벡터 차분 해상도가 사용될 수 있는지 여부를 나타내는 어파인 AMVR 가능 플래그(sps_affine_amvr_enabled_flag)를 생성하는 단계; 및
    상기 AMVR 가능 플래그(sps_amvr_enabled_flag), 상기 어파인 가능 플래그(sps_affine_enabled_flag) 및 상기 AMVR 가능 플래그(sps_amvr_enabled_flag)를 엔트로피 코딩하여 비트스트림을 생성하는 단계;
    를 포함하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
  22. 머지 후보의 최대 개수에 기초하여 머지 모션 벡터 예측에 대한 후보들의 최대 개수에 관련된 제 1 정보(six_minus_max_num_merge_cand)를 생성하는 단계;
    인터 예측을 위해 블락을 파티셔닝 할 수 있는지 여부를 나타내는 제 2 정보를 생성하는 단계;
    상기 제 2 정보가 1을 나타내고, 상기 머지 후보의 최대 개수가 2보다 큰 경우, 파티셔닝된 블락을 위한 머지 모드 후보들의 최대 개수와 관련된 제 3 정보를 생성하는 단계; 및
    상기 제 1 정보(six_minus_max_num_merge_cand), 상기 제 2 정보 및 상기 제 3 정보를 엔트로피 코딩하여 시퀀스 단위로 비트스트림으로 생성하는 단계;
    를 포함하는 것을 특징으로 하는 비디오 신호를 처리하는 방법.
KR1020217034935A 2019-04-30 2020-05-04 적응적 모션 벡터 해상도를 이용한 비디오 신호 처리 방법 및 장치 KR20210149759A (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
KR20190050960 2019-04-30
KR1020190050960 2019-04-30
KR20190057185 2019-05-15
KR1020190057185 2019-05-15
KR1020190057650 2019-05-17
KR20190057650 2019-05-17
PCT/KR2020/005830 WO2020222588A1 (ko) 2019-04-30 2020-05-04 적응적 모션 벡터 해상도를 이용한 비디오 신호 처리 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20210149759A true KR20210149759A (ko) 2021-12-09

Family

ID=73028924

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217034935A KR20210149759A (ko) 2019-04-30 2020-05-04 적응적 모션 벡터 해상도를 이용한 비디오 신호 처리 방법 및 장치

Country Status (5)

Country Link
EP (1) EP3965420A4 (ko)
JP (2) JP7335358B2 (ko)
KR (1) KR20210149759A (ko)
CN (1) CN113906750A (ko)
WO (1) WO2020222588A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023132692A1 (ko) * 2022-01-09 2023-07-13 엘지전자 주식회사 영상 인코딩/디코딩 방법 및 장치, 그리고 비트스트림을 저장한 기록 매체

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020233661A1 (en) 2019-05-21 2020-11-26 Beijing Bytedance Network Technology Co., Ltd. Syntax signaling in sub-block merge mode
US11218718B2 (en) * 2019-08-26 2022-01-04 Tencent America LLC Adaptive motion vector resolution signaling
CN114631317B (zh) 2019-10-18 2024-03-15 北京字节跳动网络技术有限公司 子图片的参数集信令中的语法约束
US20230134017A1 (en) * 2021-11-01 2023-05-04 Tencent America LLC Template-matching based adaptive motion vector resolution (amvr) for bi-prediction and an affine mode
WO2023220970A1 (zh) * 2022-05-18 2023-11-23 Oppo广东移动通信有限公司 视频编码方法、装置、设备、系统、及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10638152B2 (en) * 2016-03-15 2020-04-28 Mediatek Inc. Method and apparatus of video coding with affine motion compensation
WO2018049594A1 (en) * 2016-09-14 2018-03-22 Mediatek Inc. Methods of encoder decision for quad-tree plus binary tree structure
US10602180B2 (en) * 2017-06-13 2020-03-24 Qualcomm Incorporated Motion vector prediction
CN111183642B (zh) * 2017-09-28 2023-09-15 三星电子株式会社 编码方法和装置以及解码方法和装置
WO2021136747A1 (en) * 2019-12-30 2021-07-08 Interdigital Vc Holdings France Merge mode, adaptive motion vector precision, and transform skip syntax

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023132692A1 (ko) * 2022-01-09 2023-07-13 엘지전자 주식회사 영상 인코딩/디코딩 방법 및 장치, 그리고 비트스트림을 저장한 기록 매체

Also Published As

Publication number Publication date
JP2023164843A (ja) 2023-11-14
EP3965420A1 (en) 2022-03-09
WO2020222588A1 (ko) 2020-11-05
CN113906750A (zh) 2022-01-07
EP3965420A4 (en) 2022-07-06
JP2022531264A (ja) 2022-07-06
JP7335358B2 (ja) 2023-08-29

Similar Documents

Publication Publication Date Title
US11166040B2 (en) Video signal processing method and apparatus using adaptive motion vector resolution
US20190124336A1 (en) Method and Apparatus for Processing a Video Signal
JP7335358B2 (ja) 適応的動きベクトル解像度を利用したビデオ信号処理方法及び装置
CN111656783B (zh) 使用基于子块的运动补偿进行视频信号处理的方法和装置
KR101782929B1 (ko) 비디오 신호의 처리 방법 및 장치
KR102490375B1 (ko) 움직임 벡터 리스트 설정 방법 및 이러한 방법을 사용하는 장치
US20220053206A1 (en) Video signal processing method and apparatus using adaptive motion vector resolution
KR102550530B1 (ko) 서브블록 기반의 모션 보상을 이용한 비디오 신호 처리 방법 및 장치
JP2022500894A (ja) インター予測方法および装置
KR102617235B1 (ko) 인터 예측 모드 기반 영상 처리 방법 및 이를 위한 장치
KR20200123244A (ko) 모션 보상을 이용하는 비디오 신호 처리 방법 및 장치
KR20220036942A (ko) 비디오 신호 처리 방법 및 장치
EP4383703A1 (en) Video signal processing method and device using current picture reference
KR20200095982A (ko) 모션 벡터 차이를 사용하는 머지를 기반으로 한 모션 예측을 이용한 비디오 신호 처리 방법 및 장치
KR20240026180A (ko) 인트라 예측을 이용한 비디오 신호 처리 방법 및 이를 위한 장치
KR20200137326A (ko) 현재 픽쳐 참조를 이용한 비디오 신호 처리 방법 및 장치

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant