KR20240042642A - 교차 성분 샘플 적응적 오프셋에서의 코딩 강화 - Google Patents

교차 성분 샘플 적응적 오프셋에서의 코딩 강화 Download PDF

Info

Publication number
KR20240042642A
KR20240042642A KR1020247007487A KR20247007487A KR20240042642A KR 20240042642 A KR20240042642 A KR 20240042642A KR 1020247007487 A KR1020247007487 A KR 1020247007487A KR 20247007487 A KR20247007487 A KR 20247007487A KR 20240042642 A KR20240042642 A KR 20240042642A
Authority
KR
South Korea
Prior art keywords
component
sample
samples
classifier
video
Prior art date
Application number
KR1020247007487A
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 KR20240042642A publication Critical patent/KR20240042642A/ko

Links

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/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/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • 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/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • 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/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/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • 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/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/186Methods 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 a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
    • H04N19/82Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
    • H04N19/86Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving reduction of coding artifacts, e.g. of blockiness

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

전자 장치는 비디오 데이터를 디코딩하는 방법을 수행한다. 상기 방법은 상기 비디오 신호로부터 제1 성분 및 제2 성분을 포함하는 픽처 프레임을 수신하는 단계; 상기 제2 성분의 개개의 샘플과 연관된 상기 제1 성분의 제1 샘플 세트로부터의 가중된 샘플 값 세트, 및 상기 제2 성분의 개개의 샘플과 연관된 상기 제2 성분의 제2 샘플 세트를 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계 - 상기 제1 샘플 세트와 상기 제2 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 동일 위치에 있는 샘플, 이웃하는 샘플 및 현재 샘플임 -; 상기 분류자에 따라 상기 제2 성분의 개개의 샘플에 대한 샘플 오프셋을 결정하는 단계; 및 상기 결정된 샘플 오프셋에 기초하여 상기 제2 성분의 개개의 샘플을 수정하는 단계를 포함한다.

Description

교차 성분 샘플 적응적 오프셋에서의 코딩 강화
관련 출원에 대한 상호 참조
본 출원은 2021년 8월 19일에 출원된 "CROSS-COMPONENT SAMPLE ADAPTIVE OFFSET(교차 성분 샘플 적응적 오프셋에서의 코딩 강화)"이라는 명칭의 미국 가특허출원 제63/235,090에 기초하고 이에 대한 우선권을 주장하며, 그 전체 내용은 참조에 의해 그 전체가 본 명세서에 포함된다.
본 출원은 일반적으로 비디오 코딩 및 압축에 관한 것이며, 더욱 구체적으로는 루마(luma) 코딩 효율과 크로마(chroma) 코딩 효율 모두를 개선하는 방법 및 장치에 관한 것이다.
디지털 비디오는 디지털 텔레비전, 랩톱 또는 데스크톱 컴퓨터, 태블릿 컴퓨터, 디지털 카메라, 디지털 레코딩 디바이스, 디지털 미디어 플레이어, 비디오 게이밍 콘솔, 스마트 폰, 비디오 원격회의 디바이스, 비디오 스트리밍 디바이스 등과 같은, 다양한 전자 디바이스에 의해 지원된다. 전자 디바이스는 통신 네트워크를 통해 디지털 비디오 데이터를 송신 및 수신하거나 다른 방식으로 통신하고/하거나, 디지털 비디오 데이터를 저장 디바이스에 저장한다. 통신 네트워크의 한정된 대역폭 용량과 저장 디바이스의 한정된 메모리 자원으로 인해, 비디오 데이터를 전달하거나 저장하기 전에 하나 이상의 비디오 코딩 표준에 따라 비디오 데이터를 압축하기 위해 비디오 코딩이 사용될 수 있다. 예를 들어, 비디오 코딩 표준으로는 VVC(Versatile Video Coding), JEM(Joint Exploration test Model), HEVC(High-Efficiency Video Coding)/H.265, AVC(Advanced Video Coding)/H.264, MPEG(Moving Picture Expert Group) 등을 포함한다. AV1(AOMedia Video 1)은 이전의 VP9의 후속으로 개발되었다. 디지털 오디오 및 디지털 비디오 압축 표준을 의미하는 AVS(Audio Video Coding)는 다른 비디오 압축 표준 시리즈이다. 비디오 코딩은 일반적으로 비디오 데이터에 내재된 중복성(redundancy)을 활용하는 예측 방법(예컨대, 인터 예측(inter-prediction), 인트라 예측(intra-prediction) 등)을 활용한다. 비디오 코딩은 비디오 품질의 저하를 회피하거나 최소화하면서 더 낮은 비트 레이트를 사용하는 형식으로 비디오 데이터를 압축하는 것을 목표로 한다.
본 출원은 비디오 데이터 인코딩 및 디코딩에 관련된 것으로, 보다 구체적으로는 루마 성분(luma component)과 크로마 성분(chroma component) 사이의 교차 성분 관계(cross-component relationship)를 탐색함으로써 코딩 효율을 향상시키는 것을 포함한, 루마 성분과 크로마 성분 모두의 코딩 효율을 향상시키는 것에 관한 방법 및 장치에 관련된 구현을 기술한다.
본 출원의 제1 측면에 따르면, 비디오 신호를 디코딩하는 방법은, 상기 비디오 신호로부터, 제1 성분과 제2 성분을 포함하는 픽처 프레임(picture frame)을 수신하는 단계; 상기 제2 성분의 개개의 샘플과 연관된 상기 제1 성분의 제1 샘플 세트로부터의 가중된 샘플 값 세트, 및 상기 제2 성분의 개개의 샘플과 연관된 상기 제2 성분의 제2 샘플 세트를 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자(classifier)를 결정하는 단계 - 상기 제1 성분의 상기 제1 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제1 성분의 동일 위치에 있는(collocated) 샘플 및 상기 제1 성분의 상기 동일 위치에 있는 샘플의 이웃하는 샘플을 포함하고, 상기 제2 성분의 상기 제2 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제2 성분의 현재 샘플 및 상기 제2 성분의 상기 현재 샘플의 이웃하는 샘플을 포함함 -; 상기 분류자에 따라 상기 제2 성분의 개개의 샘플에 대한 샘플 오프셋을 결정하는 단계; 및 상기 결정된 샘플 오프셋에 기초하여 상기 제2 성분의 개개의 샘플을 수정하는 단계를 포함한다.
본 출원의 제2 측면에 따르면, 비디오 신호를 디코딩하는 방법은, 상기 비디오 신호로부터 제1 성분, 제2 성분 및 제3 성분을 포함하는 픽처 프레임을 수신하는 단계; 상기 제2 성분의 개개의 샘플과 연관된 상기 제1 성분의 제1 샘플 세트로부터의 가중된 샘플 값 세트, 및 상기 제2 성분의 개개의 샘플과 연관된 상기 제3 성분의 제3 샘플 세트를 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계 - 상기 제1 성분의 상기 제1 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제1 성분의 동일 위치에 있는 샘플 및 상기 제1 성분의 상기 동일 위치에 있는 샘플의 이웃하는 샘플을 포함하고, 상기 제3 성분의 상기 제3 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제3 성분의 동일 위치에 있는 샘플 및 상기 제3 성분의 상기 동일 위치에 있는 샘플의 이웃하는 샘플을 포함함 -; 상기 분류자에 따라 상기 제2 성분의 개개의 샘플에 대한 샘플 오프셋을 결정하는 단계; 및 상기 결정된 샘플 오프셋에 기초하여 상기 제2 성분의 개개의 샘플을 수정하는 단계를 포함한다.
본 출원의 제3 측면에 따르면, 전자 장치는 하나 이상의 처리 유닛, 메모리, 및 메모리 내에 저장된 복수의 프로그램을 포함한다. 상기 복수의 프로그램은, 상기 하나 이상의 처리 유닛에 의해 실행될 때, 상기 전자 장치로 하여금, 전술한 비디오 신호를 코딩하는 방법을 수행하게 한다.
본 출원의 제4 측면에 따르면, 컴퓨터로 판독 가능한 비일시적 저장 매체는 하나 이상의 처리 유닛을 구비한 전자 장치에 의한 실행을 위한 복수의 프로그램을 저장한다. 상기 복수의 프로그램은, 상기 하나 이상의 처리 유닛에 의해 실행될 때, 상기 전자 장치로 하여금, 전술한 비디오 신호를 코딩하는 방법을 수행하게 한다.
본 출원의 제5 측면에 따르면, 컴퓨터로 판독 가능한 저장 매체는 비트스트림을 저장하며, 상기 비트스트림은 실행될 때, 디코딩 장치로 하여금 전술한 비디오 신호를 디코딩하는 방법을 수행하게 하는 명령어를 포함한다.
상기한 일반적인 설명과 다음의 상세한 설명은 모두 예시일 뿐이며, 본 개시를 한정하지 않는다는 것을 이해해야 한다.
본 명세서에 포함되고 본 명세서의 일부를 구성하는 첨부 도면은 본 개시와 일치하는 예를 나타내고, 설명과 함께 본 개시의 원리를 설명하는 역할을 한다.
도 1은 본 개시의 몇몇 구현에 따른 비디오 블록을 인코딩 및 디코딩하기 위한 예시적인 시스템을 나타낸 블록도이다.
도 2는 본 개시의 몇몇 구현에 따른 예시적인 비디오 인코더를 나타낸 블록도이다.
도 3은 본 개시의 몇몇 구현에 따른 예시적인 비디오 디코더를 나타낸 블록도이다.
도 4a 내지 도 4e는 본 개시의 몇몇 구현에 따라 프레임을 상이한 크기 및 형상의 다수의 비디오 블록으로 재귀적으로 파티셔닝하는 방법을 나타낸 블록도이다.
도 4f는 VVC에서 정의된 인트라 모드를 나타낸 블록도이다.
도 4g는 인트라 예측을 위한 다수의 참조 라인(reference line)을 나타낸 블록도이다.
도 5a는 본 개시의 몇몇 구현에 따라 샘플 적응적 오프셋(sample adaptive offset, SAO)에 사용되는 4개의 기울기 패턴(gradient pattern)을 묘사한 블록도이다.
도 5b는 본 개시의 몇몇 구현에 따라 중심 샘플을 둘러싸는 샘플에 대한 명명 관례를 묘사한 블록도이다.
도 6a는 본 개시의 몇몇 구현에 따라 크로마 샘플에 적용되고 DBF Y를 입력으로서 사용하는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 6b는 본 개시의 몇몇 구현에 따라 루마 샘플 및 크로마 샘플에 적용되고 DBF Y/Cb/Cr을 입력으로서 사용하는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 6c는 본 개시의 몇몇 구현에 따라 독립적으로 동작할 수 있는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 6d는 본 개시의 몇몇 구현에 따라 동일하거나 상이한 오프셋으로 재귀적으로(2회 또는 N회) 적용될 수 있는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 6e는 본 개시의 몇몇 구현에 따라 AVS 표준에서의 강화된 샘플 적응적 오프셋(enhanced sample adaptive offset, ESAO)과 병행하여 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 6f는 본 개시의 몇몇 구현에 따라 SAO 이후에 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 6g는 본 개시의 몇몇 구현에 따라 CCSAO의 시스템 및 프로세스가 CCALF 없이 독립적으로 동작될 수 있음을 나타낸 블록도이다.
도 6h는 본 개시의 몇몇 구현에 따라 교차 성분 적응적 루프 필터(cross-component adaptive loop filter, CCALF)와 병행하여 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 6i는 본 개시의 몇몇 구현에 따라 SAO 및 BIF와 병행하여 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 6j는 본 개시의 몇몇 구현에 따라 SAO를 대체하여 BIF와 병행하여 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 7은 본 개시의 몇몇 구현에 따라 CCSAO를 사용하는 샘플 프로세스를 나타낸 블록도이다.
도 8은 본 개시의 몇몇 구현에 따라 CCSAO 프로세스가 수직 및 수평 디블록킹 필터(deblocking filter, DBF)에 인터리빙되는(interleaved) 것을 나타낸 블록도이다.
도 9는 본 개시의 몇몇 구현에 따라 교차 성분 상관(cross-component correlation)을 사용하여 비디오 신호를 디코딩하는 예시적인 프로세스를 나타낸 흐름도이다.
도 10a는 본 개시의 몇몇 구현에 따라 C0 분류를 위해 상이한 루마(또는 크로마) 샘플 포지션(sample position)을 사용하는 분류자를 도시한 블록도이다.
도 10b는 본 개시의 몇몇 구현에 따라 루마 후보에 대한 서로 다른 형상의 몇몇 예를 나타낸다.
도 11은 본 개시의 몇몇 구현에 따라 모든 동일한 위치에 있는 루마/크로마 샘플 및 이웃하는 루마/크로마 샘플이 CCSAO 분류에 공급될 수 있음을 나타낸 샘플 프로세스의 블록도이다.
도 12a는 본 개시의 몇몇 구현에 따라 동일한 위치에 있는 루마 샘플 값을, 동일한 위치에 있는 루마 샘플 및 이웃하는 루마 샘플을 가중화하여 획득된 값으로 대체하는 것에 의한 예시적인 분류자를 나타낸다.
도 12b는 본 개시의 몇몇 구현에 따른 서브샘플링된(sample position) 라플라시안 계산(Laplacian calculation)을 나타낸다.
도 13은 본 개시의 몇몇 구현에 따라 CCSAO가 상이한 클리핑 조합(clipping combination)을 갖는 다른 인루프 필터와 함께 적용됨을 나타낸 블록도이다.
도 14a는 본 개시의 몇몇 구현에 따라 분류에 사용되는 동일 위치에 있는 루마(크로마) 샘플 및 이웃하는 루마(크로마) 샘플 중 어느 샘플이 현재 픽처의 외부에 있는 경우에 CCSAO가 현재 크로마(루마) 샘플에 적용되지 않음을 나타낸 블록도이다.
도 14b는 본 개시의 몇몇 구현에 따라 분류에 사용되는 동일 위치에 있는 루마 또는 크로마 샘플 및 이웃하는 루마 또는 크로마 샘플 중 어느 샘플이 현재 픽처의 외부에 있는 경우에 CCSAO가 현재 크로마 샘플 또는 루마 샘플에 적용됨을 나타낸 블록도이다.
도 14c는 본 개시의 몇몇 구현에 따라 분류에 사용되는 대응하는 선택된 동일 위치에 있는 루마 샘플 또는 이웃하는 루마 샘플이 가상 경계(virtual boundary, VB)에 의해 정의되는 가상 공간의 외부에 있는 경우에 CCSAO가 현재 크로마 샘플에 적용되지 않음을 나타낸 블록도이다.
도 15는 본 개시의 몇몇 구현에 따라 반복적 또는 미러 패딩(repetitive or mirror padding)이 가상 경계의 바깥쪽에 있는 루마 샘플에 적용됨을 도시한다.
도 16은 본 개시의 몇몇 구현에 따라 9개의 동일 위치에 있는, 이웃하는 루마 샘플 모두가 분류에 사용되는 경우에 1개의 추가적인 루마 라인 버퍼가 요구됨을 도시한다.
도 17은 본 개시의 몇몇 구현에 따라 VB와 교차하는 9개 루마 후보 CCSAO가 2개의 추가적인 루마 라인 버퍼를 증가시킬 수 있는 AVS의 실례(illustration)를 도시한다.
도 18a는 본 개시의 몇몇 구현에 따라 VB와 교차하는 9개 루마 후보 CCSAO가 1개의 추가적인 루마 라인 버퍼를 증가시킬 수 있는 VVC의 실례를 도시한다.
도 18b는 본 개시의 몇몇 구현에 따라 동일 위치에 있거나 이웃하는 크로마 샘플이 현재 루마 샘플을 분류하는 데 사용되는 경우, 선택된 크로마 후보가 VB와 교차하고 추가적인 크로마 라인 버퍼를 필요로 할 수 있는 실례를 도시한다.
도 19a∼도 19c는 AVS 및 VVC에서, 본 개시의 몇몇 구현에 따라 크로마 샘플의 루마 후보 중 어느 루마 후보가 VB 건너편(현재 크로마 샘플 VB의 바깥쪽)에 있는 경우에 CCSAO가 크로마 샘플에 대해 디스에이블(disable)됨을 도시한다.
도 20a∼도 20c는 AVS 및 VVC에서, 본 개시의 몇몇 구현에 따라 크로마 샘플의 루마 후보 중 어느 루마 후보가 VB 건너편(현재 크로마 샘플 VB의 바깥쪽)에 있는 경우에 CCSAO가 크로마 샘플에 대해 반복적 패딩(repetitive padding)을 사용하여 인에이블(enable)됨을 도시한다.
도 21a∼도 21c는 AVS 및 VVC에서, 본 개시의 몇몇 구현에 따라 크로마 샘플의 루마 후보 중 어느 루마 후보가 VB 건너편(현재 크로마 샘플 VB의 바깥쪽)에 있는 경우에, CCSAO가 크로마 샘플에 대해 미러 패딩(mirror padding)을 사용하여 인에이블됨을 도시한다.
도 22a∼도 22b는 본 개시의 몇몇 구현에 따라 CCSAO가 상이한 CCSAO 샘플 형상에 대해 양측 대칭 패딩(double sided symmetric padding)을 사용하여 인에이블됨을 도시한다.
도 23은 본 개시의 몇몇 구현에 따라 한정된 수의 루마 후보를 분류에 사용하는 제한을 도시한다.
도 24는 본 개시의 몇몇 구현에 따라 CCSAO 적용된 영역이 코딩 트리 블록(coding tree block, CTB)/코딩 트리 유닛(coding tree unit, CTU) 경계에 정렬되어 있지 않음을 도시한다.
도 25는 본 개시의 몇몇 구현에 따라 CCSAO 적용된 영역 프레임 파티션(region frame partition)이 CCSAO 파라미터로 고정될 수 있음을 도시한다.
도 26은 본 개시의 몇몇 구현에 따라 CCSAO 적용된 영역은 프레임/슬라이스/CTB 레벨로부터 분할된 바이너리 트리(binary-tree, BT)/쿼드 트리(quad-tree, QT)/터너리 트리(ternary-tree, TT)일 수 있음을 도시한다.
도 27은 본 개시의 몇몇 구현에 따라 픽처 프레임 내의 서로 다른 레벨에서 사용되고 스위칭되는(switched) 복수의 분류자를 나타낸 블록도이다.
도 28은 본 개시의 몇몇 구현에 따라, CCSAO 적용된 영역 파티션이 픽처 레벨에서 동적일 수 있고 스위칭될 수 있음을 나타낸 블록도이다.
도 29는 본 개시의 몇몇 구현에 따라, CCSAO 분류자가 현재 또는 교차 성분 코딩 정보를 고려할 수 있음을 나타낸 도면이다.
도 30은 본 개시의 몇몇 구현에 따라 본 개시에 개시된 SAO 분류 방법이 사후 예측 필터(post prediction filter)의 역할을 함을 나타낸 블록도이다.
도 31은 본 개시의 몇몇 구현에 따라 사후 예측 SAO 필터의 경우, 각각의 컴포넌트가 현재 샘플 및 이웃 샘플을 분류에 사용할 수 있음을 나타낸 블록도이다.
도 32는 본 개시의 몇몇 구현에 따라, 본 개시에 개시된 SAO 분류 방법이 사후 재구축 필터(post reconstruction filter)의 역할을 함을 나타낸 블록도이다.
도 33은 본 개시의 몇몇 구현에 따라 교차 성분 상관을 사용하여 비디오 신호를 디코딩하는 예시적인 프로세스를 나타낸 흐름도이다.
도 34는 본 개시의 몇몇 구현에 따라 사용자 인터페이스와 결합된 컴퓨팅 환경을 나타낸 도면이다.
이제 특정 구현에 대해 상세히 참조할 것이며, 그 예는 첨부 도면에 나타냈다. 이하의 상세한 설명에서는 본 명세서에 제시된 주제의 이해를 돕기 위해 많은 비한정적 세부사항을 기술한다. 그러나 청구범위의 범위를 벗어나지 않고 다양한 대안이 사용될 수 있으며 그러한 특정 세부사항 없이 주제가 실시될 수 있음은 당업자에게 명백할 것이다. 예를 들어, 본 명세서에 제시된 주제가 디지털 비디오 능력을 구비한 많은 유형의 전자 디바이스에서 구현될 수 있음은 당업자에게 명백할 것이다.
본 개시의 설명, 청구범위, 및 첨부 도면에 사용되는 "제1", "제2" 등의 용어는 대상을 구별하기 위해 사용된 것이지, 어떤 특정한 순서 또는 시퀀스를 설명하기 위해 사용된 것이 아님을 명확히 해둔다. 이러한 방식으로 사용되는 데이터는 적절한 조건 하에서 상호 교환될 수 있으므로, 본 명세서에 설명된 본 개시의 실시예는 첨부된 도면에 도시되거나 본 개시에서 설명된 것 이외의 순서로 구현될 수도 있음을 이해해야 한다.
1세대 AVS 표준으로는 중국 국가 표준 "정보 기술(Information Technology), 향상된 오디오 비디오 코딩(Advanced Audio Video Coding), 파트 2: 비디오"(AVS1로 알려짐) 및 "정보 기술, 향상된 오디오 비디오 코딩, 파트 16: 라디오 텔레비전 비디오(Radio Television Video)"(AVS+로 알려짐)를 포함한다. MPEG-2 표준과 비교하여 동일한 지각 품질(perceptual quality)에서 대략 50%의 비트레이트를 절감할 수 있다. 2세대 AVS 표준으로는, 주로 추가 HD TV 프로그램 송신을 목표로 하는 중국 국가 표준 시리즈 "정보 기술, 효율적인 멀티미디어 코딩(Efficient Multimedia Coding)"(AVS2로 알려짐을 포함한다. AVS2의 코딩 효율은 AVS+의 코딩 효율의 두 배이다. 한편, AVS2 표준 비디오 파트는 IEEE(Institute of Electrical and Electronics Engineers)에 의해 애플리케이션을 위한 국제 표준 중 하나로 제출되었다. AVS3 표준은 최신 국제 표준 HEVC의 코딩 효율을 뛰어넘는 것을 목표로 하는 UHD 비디오 애플리케이션을 위한 신세대 비디오 코딩 표준 중 하나이며, HEVC 표준보다 약 30%의 비트레이트를 절감한다. 2019년 3월의 68차 AVS 회의에서, AVS3-P2 베이스라인이 완성되었는데, 이는 HEVC 표준보다 약 30%의 비트레이트를 절감한다. 현재, 고성능 모델(high performance model, HPM)이라고 하는 하나의 참조 소프트웨어(reference software)가 AVS3 표준의 참조 구현을 보여주기 위해 AVS 그룹에 의해 유지관리되고 있다. HEVC와 마찬가지로, AVS3 표준은 블록 기반 하이브리드 비디오 코딩 프레임워크에 기초하여 구축되어 있다.
도 1은 본 개시의 몇몇 구현에 따라 비디오 블록을 병렬로 인코딩 및 디코딩하기 위한 예시적인 시스템(10)을 나타낸 블록도이다. 도 1에 도시된 바와 같이, 시스템(10)은 목적지(destination) 디바이스(14)에 의해 나중에 디코딩될 비디오 데이터를 생성 및 인코딩하는 근원지(source) 디바이스(12)를 포함한다. 근원지 디바이스(12) 및 목적지 디바이스(14)로는 데스크톱 또는 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트폰, 셋톱 박스, 디지털 텔레비전, 카메라, 디스플레이 디바이스, 디지털 미디어 플레이어, 비디오 게이밍 콘솔, 비디오 스트리밍 디바이스 등을 포함한, 다양한 전자 디바이스 중 임의의 전자 디바이스를 포함할 수 있다. 몇몇 구현에서, 근원지 디바이스(12)와 목적지 디바이스(14)는 무선 통신 능력을 갖추고 있다.
몇몇 구현에서, 목적지 디바이스(14)는 링크(16)를 통해, 디코딩될 인코딩된 비디오 데이터를 수신할 수 있다. 링크(16)는 인코딩된 비디오 데이터를 근원지 디바이스(12)에서 목적지 디바이스(14)로 이동시킬 수 있는 임의의 유형의 통신 매체 또는 디바이스를 포함할 수 있다. 하나의 예에서, 링크(16)는 근원지 디바이스(12)가 인코딩된 비디오 데이터를 목적지 디바이스(14)에 실시간으로 직접 송신할 수 있게 하는 통신 매체를 포함할 수 있다. 인코딩된 비디오 데이터는 무선 통신 프로토콜과 같은, 통신 표준에 따라 변조되어 목적지 디바이스(14)에 송신될 수 있다. 통신 매체로는 RF(Radio Frequency) 스펙트럼 또는 하나 이상의 물리 송신 라인(physical transmission line)과 같은, 임의의 무선 또는 유선 통신 매체를 포함할 수 있다. 통신 매체는 근거리 통신망(local area network), 광역 통신망(wide-area network), 또는 인터넷과 같은 글로벌 네트워크(global network) 등의, 패킷 기반 네트워크의 일부를 형성할 수 있다. 통신 매체는 라우터, 교환기, 기지국, 또는 근원지 디바이스(12)에서 목적지 디바이스(14)로의 통신을 용이하게 하는 데 유용할 수 있는 기타 장비를 포함할 수 있다.
몇몇 다른 구현에서, 인코딩된 비디오 데이터는 출력 인터페이스(22)에서 저장 디바이스(32)로 송신될 수 있다. 그 뒤에, 저장 디바이스(32)에 있는 인코딩된 비디오 데이터는 입력 인터페이스(28)를 통해 목적지 디바이스(14)에 의해 액세스될 수 있다. 저장 디바이스(32)로는 하드 드라이브, 블루레이 디스크, DVD(Digital Versatile Disk), CD-ROM(Compact Disc Read-Only Memory), 플래시 메모리, 휘발성 또는 비휘발성 메모리, 또는 인코딩된 비디오 데이터를 저장하기 위한 기타 적합한 디지털 저장 매체와 같은, 다양한 분산형(distributed) 또는 로컬 액세스형(locally accessed) 데이터 저장 매체 중 임의의 저장 매체를 포함할 수 있다. 추가 예에서, 저장 디바이스(32)는 근원지 디바이스(12)에 의해 생성되는 인코딩된 비디오 데이터를 보유할 수 있는 파일 서버 또는 다른 중간 저장 디바이스에 대응할 수 있다. 목적지 디바이스(14)는 스트리밍 또는 다운로딩을 통해 저장 디바이스(32)로부터의 저장된 비디오 데이터에 액세스할 수 있다. 파일 서버는 인코딩된 비디오 데이터를 저장하고 인코딩된 비디오 데이터를 목적지 디바이스(14)로 송신할 수 있는 임의의 유형의 컴퓨터일 수 있다. 파일 서버의 예로는 웹 서버(예컨대, 웹 사이트용), FTP(File Transfer Protocol) 서버, NAS(Network Attached Storage) 디바이스 또는 로컬 디스크 드라이브를 포함한다. 목적지 디바이스(14)는, 무선 채널(예컨대, Wi-Fi(Wireless Fidelity) 연결), 유선 연결(예컨대, DSL(Digital Subscriber Line), 케이블 모뎀 등), 또는 파일 서버에 저장된 인코딩된 비디오 데이터에 액세스하는 데 적합한 이 둘의 조합을 포함한, 임의의 표준 데이터 연결을 통해 인코딩된 비디오 데이터에 액세스할 수 있다. 저장 디바이스(32)로부터의 인코딩된 비디오 데이터의 송신은 스트리밍 송신, 다운로드 송신 또는 이 둘의 조합일 수 있다.
도 1에 도시된 바와 같이, 근원지 디바이스(12)는 비디오 소스(18), 비디오 인코더(20), 및 출력 인터페이스(22)를 포함한다. 비디오 소스(18)는 비디오 캡처 디바이스, 예컨대 비디오 카메라, 이전에 캡처된 비디오가 들어 있는 비디오 아카이브, 비디오 콘텐츠 제공자로부터 비디오를 수신하기 위한 비디오 피딩 인터페이스(video feeding interface), 및/또는 소스 비디오인 컴퓨터 그래픽 데이터를 생성하기 위한 컴퓨터 그래픽 시스템, 또는 이러한 소스들의 조합과 같은, 소스를 포함할 수 있다. 하나의 예로, 비디오 소스(18)가 보안 감시 시스템의 비디오 카메라인 경우, 근원지 디바이스(12)와 목적지 디바이스(14)는 카메라 폰 또는 비디오 폰을 형성할 수 있다. 그러나 본 출원에 기재된 구현은 일반적으로 비디오 코딩에 적용 가능할 수 있으며, 무선 및/또는 유선 애플리케이션에 적용될 수 있다.
캡처되거나, 사전 캡처되거나, 컴퓨터로 생성된 비디오는 비디오 인코더(20)에 의해 인코딩될 수 있다. 인코딩된 비디오 데이터는 근원지 디바이스(12)의 출력 인터페이스(22)를 통해 목적지 디바이스(14)로 직접 송신될 수 있다. 인코딩된 비디오 데이터는 또한(또는 대안적으로) 디코딩 및/또는 재생을 위해 목적지 디바이스(14) 또는 다른 디바이스에 의한 추후의 액세스를 위해 저장 디바이스(32)에 저장될 수 있다. 출력 인터페이스(22)는 모뎀 및/또는 송신기를 더 포함할 수 있다.
목적지 디바이스(14)는 입력 인터페이스(28), 비디오 디코더(30), 및 디스플레이 디바이스(34)를 포함한다. 입력 인터페이스(28)는 수신기 및/또는 모뎀을 포함하여 인코딩된 비디오 데이터를 링크(16)를 통해 수신할 수 있다. 링크(16)를 통해 통신되거나, 저장 디바이스(32)에 제공되는 인코딩된 비디오 데이터는 비디오 데이터의 디코딩 시에 비디오 디코더(30)에 의한 사용을 위해 비디오 인코더(20)에 의해 생성된 다양한 신택스 요소(syntax element)를 포함할 수 있다. 이러한 신택스 요소는 통신 매체상에서 송신되거나, 저장 매체에 저장되거나, 파일 서버에 저장되는, 인코딩된 비디오 데이터 내에 포함될 수 있다.
몇몇 구현에서, 목적지 디바이스(14)는 통합형 디스플레이 디바이스일 수 있는 디스플레이 디바이스(34)와, 목적지 디바이스(14)와 통신하도록 구성된 외부 디스플레이 디바이스를 포함할 수 있다. 디스플레이 디바이스(34)는 디코딩된 비디오 데이터를 사용자에게 표시하며, LCD(Liquid Crystal Display), 플라즈마 디스플레이, OLED(Organic Light Emitting Diode) 디스플레이 또는 기타 유형의 디스플레이 디바이스와 같은 다양한 디스플레이 디바이스 중 임의의 것을 포함할 수 있다.
비디오 인코더(20) 및 비디오 디코더(30)는 VVC, HEVC, MPEG-4, Part 10, AVC, AVS, 또는 이러한 표준의 확장판과 같은, 독점(proprietary) 또는 산업(industry) 표준에 따라 동작할 수 있다. 본 출원은 특정 비디오 코딩/디코딩 표준에 한정되지 않으며, 다른 비디오 코딩/디코딩 표준에 적용될 수 있음을 이해해야 한다. 근원지 디바이스(12)의 비디오 인코더(20)는 이러한 현재 또는 미래의 표준 중 임의의 표준에 따라 비디오 데이터를 인코딩하도록 구성될 수 있다고 일반적으로 생각된다. 유사하게, 목적지 디바이스(14)의 비디오 디코더(30)는 이러한 현재 또는 미래의 표준 중 임의의 표준에 따라 비디오 데이터를 디코딩하도록 구성될 수 있다고 일반적으로 생각된다.
비디오 인코더(20)와 비디오 디코더(30)는 각각 하나 이상의 마이크로프로세서, DSP(Digital Signal Processor), ASIC(Application Specific Integrated Circuit), FPGA(Field Programmable Gate Array), 이산 로직(discrete logic), 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합과 같은, 다양한 적절한 인코더 및/또는 디코더 회로 중 어느 하나로서 구현될 수 있다. 전자 디바이스가 부분적으로 소프트웨어로 구현되는 경우, 소프트웨어용 명령어를 적절한, 컴퓨터로 판독 가능한 비일시적 매체에 저장할 수 있고, 하나 이상의 프로세서를 사용하여 하드웨어에서 명령어를 실행하여 본 개시에 개시된 비디오 인코딩/디코딩 동작을 수행할 수 있다. 비디오 인코더(20)와 비디오 디코더(30)는 각각 하나 이상의 인코더 또는 디코더에 포함될 수 있으며, 이들 중 어느 하나는 개개의 디바이스 내의 조합된 인코더/디코더(CODEC)의 일부로서 통합될 수 있다.
도 2는 본 출원에 기재된 몇몇 구현에 따른 예시적인 비디오 인코더(20)를 나타낸 블록도이다. 비디오 인코더(20)는 비디오 프레임 내의 비디오 블록의 인트라 예측 코딩 및 인터 예측 코딩을 수행할 수 있다. 인트라 예측 코딩은 공간적 예측(spatial prediction)에 의존하여 주어진 비디오 프레임 또는 픽처 내에서 비디오 데이터 내의 공간적 중복성을 줄이거나 제거한다. 인터 예측 코딩은 시간적 예측(temporal prediction)에 의존하여 비디오 시퀀스의 인접한 비디오 프레임 또는 픽처 내에서 비디오 데이터의 시간적 중복성을 줄이거나 제거한다. "프레임(frame)"이라는 용어는 비디오 코딩 분야에서 "이미지(image)" 또는 "픽처(picture)"라는 용어와 동의어로 사용될 수 있다는 점에 유의해야 한다.
도 2에 도시된 바와 같이, 비디오 인코더(20)는 비디오 데이터 메모리(40), 예측 처리 유닛(41), 디코딩된 픽처 버퍼(decoded picture buffer, DPB)(64), 합산기(summer)(50), 변환 처리 유닛(52), 양자화 유닛(54) 및 엔트로피 인코딩 유닛(56)을 포함한다. 예측 처리 유닛(41)은 움직임 추정 유닛(42), 움직임 보상 유닛(44), 파티션(partition) 유닛(45), 인트라 예측 처리 유닛(46) 및 인트라 블록 복사(block copy, BC) 유닛(48)을 더 포함한다. 몇몇 구현에서, 비디오 인코더(20)는 또한 비디오 블록 재구축을 위해 역양자화 유닛(58), 역변환 처리 유닛(60), 및 합산기(62)를 포함한다. 디블로킹(deblocking) 필터와 같은, 인루프(in-loop) 필터(63)는 합산기(62)와 DPB(64) 사이에 위치되어, 블록 경계를 필터링하여 재구축된 비디오에서 블록화 아티팩트(blockiness artifact)를 제거할 수 있다. 합산기(62)의 출력을 필터링하기 위해, 디블로킹 필터에 더해, 샘플 적응적 오프셋(SAO) 필터 및/또는 적응적 인루프 필터(adaptive in-loop filter, ALF)와 같은, 다른 인루프 필터도 또한 사용될 수 있다. 몇몇 예에서, 인루프 필터는 생략될 수 있으며, 디코딩된 비디오 블록은 합산기(62)에 의해 DPB(64)에 직접 제공될 수 있다. 비디오 인코더(20)는 고정된 또는 프로그래밍 가능한 하드웨어 유닛의 형태를 취할 수 있거나, 예시된 고정된 또는 프로그래밍 가능한 하드웨어 유닛의 하나 이상 중에서 분할될 수 있다.
비디오 데이터 메모리(40)는 비디오 인코더(20)의 컴포넌트에 의해 인코딩될 비디오 데이터를 저장할 수 있다. 비디오 데이터 메모리(40) 내의 비디오 데이터는, 예를 들어 도 1에 도시된 바와 같이 비디오 소스(18)로부터 획득될 수 있다. DPB(64)는 (예컨대, 인트라 또는 인터 예측 코딩 모드에서) 비디오 인코더(20)에 의한 비디오 데이터의 인코딩 시에 사용하기 위한 참조 비디오 데이터(예를 들어, 참조 프레임 또는 픽처)를 저장하는 버퍼이다. 비디오 데이터 메모리(40) 및 DPB(64)는 다양한 메모리 디바이스 중 임의의 것에 의해 형성될 수 있다. 다양한 예에서, 비디오 데이터 메모리(40)는 비디오 인코더(20)의 다른 컴포넌트와 함께 온칩(on-chip)일 수 있거나, 그러한 컴포넌트에 대해 오프칩(off-chip)일 수 있다.
도 2에 도시된 바와 같이, 예측 처리 유닛(41) 내의 파티션 유닛(45)은 비디오 데이터를 수신한 후, 비디오 데이터를 비디오 블록들로 파티셔닝한다. 이 파티셔닝은 또한 비디오 데이터와 연관된 쿼드 트리(QT) 구조와 같은 미리 정의된 분할 구조에 따라, 비디오 프레임을 슬라이스, 타일(예를 들어, 비디오 블록 세트) 또는 다른 더 큰 코딩 유닛(coding unit, CU)으로 파티셔닝하는 것을 포함할 수 있다. 비디오 프레임은 샘플 값을 갖는 샘플의 2차원 배열 또는 행렬이거나 그렇게 간주될 수 있다. 어레이 내의 샘플은 픽셀 또는 펠(pel)이라고도 할 수 있다. 배열이나 픽처의 수평 및 수직 방향(또는 축)의 샘플 수는 비디오 프레임의 크기 및/또는 해상도를 정의한다. 비디오 프레임은, 예를 들어 QT 파티셔닝을 사용하여 다수의 비디오 블록으로 분할될 수 있다. 비디오 블록은 또 비디오 프레임보다 차원이 작지만, 샘플 값을 갖는 샘플의 2차원 배열 또는 행렬이거나 그렇게 간주될 수 있다.
비디오 블록의 수평 및 수직 방향(또는 축)의 샘플 수는 비디오 블록의 크기를 정의한다. 예를 들어 QT 파티셔닝, 바이너리 트리(BT) 파티셔닝 또는 트리플 트리(triple-tree, TT) 파티셔닝 또는 이들의 임의 조합을 반복적으로 사용하여, 비디오 블록을 하나 이상의 블록 파티션 또는 서브블록(이는 다시 블록을 형성할 수 있음)으로 파티셔닝할 수 있다. 본 명세서에 사용된 용어 "블록(block)" 또는 "비디오 블록(video block)"은 프레임 또는 픽처의 일부분, 특히 직사각형(정사각형 또는 비정사각형) 부분일 수 있다는 점에 유의해야 한다. 예를 들어, HEVC 및 VVC를 참조하면, 블록 또는 비디오 블록은 코딩 트리 유닛(CTU), CU, 예측 유닛(prediction unit, PU) 또는 변환 유닛(transform unit, TU)일 수 있거나 이에 대응할 수 있고/있거나 대응하는 블록, 예컨대, 코딩 트리 블록(CTB), 코딩 블록(coding block, CB), 예측 블록(prediction block, PB) 또는 변환 블록(transform block, TB)일 수 있거나 이에 대응할 수 있고/있거나 서브블록일 수 있거나 이에 대응할 수 있다.
예측 처리 유닛(41)은 오차 결과(error result)(예컨대, 코딩 레이트 및 왜곡 레벨)에 기초하여 현재 비디오 블록에 대해, 복수의 인트라 예측 코딩 모드 중 하나 또는 복수의 인터 예측 코딩 모드 중 하나와 같은, 복수의 가능한 예측 코딩 모드 중 하나를 선택할 수 있다. 예측 처리 유닛(41)은 결과로서 얻은(resulting) 인트라 또는 인터 예측 코딩된 블록을, 합산기(50)에 제공하여 잔차 블록을 생성할 수 있고 합산기(62)에 제공하여 이후에 참조 프레임의 일부로서 사용하기 위한 인코딩된 블록을 재구축할 수 있다. 예측 처리 유닛(41)은 또한 움직임 벡터, 인트라 모드 지시자(indicator), 파티션 정보, 및 기타 그러한 신택스 정보와 같은, 신택스 요소를 엔트로피 인코딩 유닛(56)에 제공한다.
현재 비디오 블록에 대한 적절한 인트라 예측 코딩 모드를 선택하기 위해, 예측 처리 유닛(41) 내의 인트라 예측 처리 유닛(46)은 코딩될 현재 블록과 동일한 프레임 내의 하나 이상의 이웃 블록(neighbor block)에 대해 현재 비디오 블록의 인트라 예측 코딩을 수행하여, 공간적 예측을 제공할 수 있다. 예측 처리 유닛(41) 내의 움직임 추정 유닛(42) 및 움직임 보상 유닛(44)은 하나 이상의 참조 프레임 내의 하나 이상의 예측 블록에 대해 현재 비디오 블록의 인터 예측 코딩을 수행하여, 시간적 예측을 제공할 수 있다. 비디오 인코더(20)는, 예컨대 비디오 데이터의 블록 각각에 대한 적절한 코딩 모드를 선택하기 위해 다수의 코딩 패스(coding pass)를 수행할 수 있다.
몇몇 구현에서, 움직임 추정 유닛(42)은 비디오 프레임의 시퀀스 내의 미리 결정된 패턴에 따라, 참조 비디오 프레임 내의 예측 블록에 대한 현재 비디오 프레임 내의 비디오 블록의 변위(displacement)를 지시하는 움직임 벡터를 생성함으로써 현재 비디오 프레임에 대한 인터 예측 모드를 결정한다. 움직임 추정 유닛(42)에 의해 수행되는 움직임 추정은 비디오 블록에 대해 움직임을 추정하는 움직임 벡터를 생성하는 프로세스이다. 움직임 벡터는, 예를 들어, 현재 비디오 프레임 내에서 코딩되고 있는 현재 블록에 대한 참조 프레임 내의 예측 블록에 대한 현재 비디오 프레임 또는 픽처 내의 비디오 블록의 변위를 지시할 수 있다. 미리 결정된 패턴은 시퀀스에서 비디오 프레임을 P 프레임 또는 B 프레임으로 지정할 수 있다. 인트라 BC 유닛(48)은 움직임 추정 유닛(42)에 의한 인터 예측을 위한 움직임 벡터의 결정과 유사한 방식으로 인트라 BC 코딩을 위한 벡터, 예컨대 블록 벡터를 결정할 수 있거나, 움직임 추정 유닛(42)을 활용하여 블록 벡터를 결정할 수 있다.
비디오 블록에 대한 예측 블록은 SAD(Sum of Absolute Difference), SSD(Sum of Square Difference), 또는 기타 차이 메트릭(difference metric)에 의해 결정될 수 있는 픽셀 차이의 관점에서 코딩될 비디오 블록과 밀접하게 매칭되는 것으로 간주되는 참조 프레임의 참조 블록 또는 블록일 수 있거나 그에 대응할 수 있다. 몇몇 구현에서, 비디오 인코더(20)는 DPB(64)에 저장된 참조 프레임의 정수 미만(sub-integer) 픽셀 포지션(pixel position)에 대한 값을 계산할 수 있다. 예를 들어, 비디오 인코더(20)는 참조 프레임의 1/4 픽셀 포지션, 1/8 픽셀 포지션, 또는 다른 분수 픽셀 포지션의 값들을 보간할 수 있다. 따라서 움직임 추정 유닛(42)은 완전한(full) 픽셀 포지션 및 분수 픽셀 포지션에 대해 움직임 탐색을 수행하여 분수 픽셀 정밀도로 움직임 벡터를 출력할 수 있다.
움직임 추정 유닛(42)은 각각 DPB(64)에 저장된 하나 이상의 참조 프레임을 식별하게 해주는 제1 참조 프레임 리스트(List 0) 또는 제2 참조 프레임 리스트(List 1)에서 선택된 참조 프레임의 예측 블록의 포지션과 비디오 블록의 포지션을 비교하여, 인터 예측 코딩된 프레임의 비디오 블록에 대한 움직임 벡터를 계산한다. 움직임 추정 유닛(42)은 계산된 움직임 벡터를 움직임 보상 유닛(44)에 전송하고 그런 다음 엔트로피 인코딩 유닛(56)으로 전송한다.
움직임 보상 유닛(44)에 의해 수행되는 움직임 보상은 움직임 추정 유닛(42)에 의해 결정되는 움직임 벡터에 기초한 예측 블록의 인출(fetching) 또는 생성을 수반할 수 있다. 현재 비디오 블록에 대한 움직임 벡터를 수신하면, 움직임 보상 유닛(44)은 참조 프레임 리스트 중 하나에서 움직임 벡터가 가리키는 예측 블록의 위치를 찾아내고, DPB(64)에서 예측 블록을 검색하여, 예측 블록을 합산기(50)에 포워딩할 수 있다. 그러면 합산기(50)는 코딩되고 있는 현재 비디오 블록의 픽셀 값에서 움직임 보상 유닛(44)에 의해 제공되는 예측 블록의 픽셀 값을 감산하여 픽셀 차이 값의 잔차 비디오 블록을 형성한다. 잔차 비디오 블록을 형성하는 픽셀 차이 값은 루마 차이 성분 또는 크로마 차이 성분 또는 둘 다를 포함할 수 있다. 움직임 보상 유닛(44)은 또한 비디오 프레임의 비디오 블록 디코딩 시에 비디오 디코더(30)에 의한 사용을 위해 비디오 프레임의 비디오 블록과 연관된 신택스 요소를 생성할 수 있다. 신택스 요소는, 예를 들어 예측 블록을 식별하는 데 사용되는 움직임 벡터를 정의하는 신택스 요소, 예측 모드를 지시하는 임의의 플래그, 또는 본 명세서에 기재된 기타 신택스 정보를 포함할 수 있다. 움직임 추정 유닛(42)과 움직임 보상 유닛(44)은 고도로 통합될 수 있지만, 개념적 목적을 위해 별개로 나타내고 있음에 유의한다.
몇몇 구현에서, 인트라 BC 유닛(48)은 움직임 추정 유닛(42) 및 움직임 보상 유닛(44)과 관련하여 전술한 것과 유사한 방식으로 벡터를 생성하고 예측 블록을 인출할 수 있지만, 예측 블록은 코딩되고 있는 현재 블록과 동일한 프레임에 있으며 벡터는 움직임 벡터가 아닌 블록 벡터라고 한다. 특히, 인트라 BC 유닛(48)은 현재 블록을 인코딩하는 데 사용할 인트라 예측 모드를 결정할 수 있다. 몇몇 예에서, 인트라 BC 유닛(48)은, 예컨대 개별 인코딩 패스 동안, 다양한 인트라 예측 모드를 사용하여 현재 블록을 인코딩하고, 레이트 왜곡 분석(rate-distortion analysis)을 통해 그 성능을 테스트할 수 있다. 다음으로, 인트라 BC 유닛(48)은 다양한 테스트된 인트라 예측 모드 중에서 사용하기에 적합한 인트라 예측 모드를 선택하고 그에 따라 인트라 모드 지시자를 생성할 수 있다. 예를 들어, 인트라 BC 유닛(48)은 다양한 테스트된 인트라 예측 모드에 대해 레이트 왜곡 분석을 사용하여 레이트 왜곡 값을 계산하고, 테스트된 모드 중에서 최상의 레이트 왜곡 특성을 갖는 인트라 예측 모드를 사용할 적절한 인트라 예측 모드로서 선택할 수 있다. 레이트 왜곡 분석은 일반적으로 인코딩된 블록과 인코딩된 블록을 생성하기 위해 인코딩되었던 원래의 인코딩되지 않은 블록 사이의 왜곡(또는 오차)의 양과, 인코딩된 블록을 생성하는 데 사용되는 비트레이트(즉, 비트 수)를 결정한다. 인트라 BC 유닛(48)은 어떤 인트라 예측 모드가 블록에 대해 최상의 레이트 왜곡 값을 나타내는지를 결정하기 위해 다양한 인코딩된 블록에 대한 레이트 및 왜곡으로부터 비율을 계산할 수 있다.
다른 예에서, 인트라 BC 유닛(48)은 움직임 추정 유닛(42) 및 움직임 보상 유닛(44)을 전체적으로 또는 부분적으로 사용하여, 본 명세서에 기재된 구현에 따른 인트라 BC 예측을 위한 그러한 기능을 수행할 수 있다. 어느 경우이든, 인트라 블록 복사의 경우, 예측 블록은 SAD, SSD 또는 다른 차이 메트릭에 의해 결정될 수 있는 픽셀 차이의 관점에서, 코딩될 블록과 밀접하게 매칭되는 것으로 간주되는 블록일 수 있으며, 예측 블록의 식별은 정수 미만 픽셀 포지션에 대한 값의 계산을 포함할 수 있다.
예측 블록이 인트라 예측에 따른 동일한 프레임으로부터의 것이든 인터 예측에 따른 서로 다른 프레임으로부터의 것이든, 비디오 인코더(20)는 코딩되고 있는 현재 블록의 픽셀 값에서 예측 블록의 픽셀 값을 감산하여, 픽셀 차이 값을 형성함으로써 잔차 비디오 블록을 형성할 수 있다. 잔차 비디오 블록을 형성하는 픽셀 차이 값은 루마 성분 차이와 크로마 성분 차이 둘 다를 포함할 수 있다.
인트라 예측 처리 유닛(46)은 위에서 설명한 바와 같이, 움직임 추정 유닛(42) 및 움직임 보상 유닛(44)에 의해 수행되는 인터 예측, 또는 인트라 BC 유닛(48)에 의해 수행되는 인트라 블록 복사 예측에 대한 대안으로서, 현재 비디오 블록을 인트라 예측할 수 있다. 특히, 인트라 예측 처리 유닛(46)은 현재 블록을 인코딩하는 데 사용할 인트라 예측 모드를 결정할 수 있다. 그렇게 하기 위해, 인트라 예측 처리 유닛(46)은, 예컨대 개별 인코딩 패스 동안, 다양한 인트라 예측 모드를 사용하여 현재 블록을 인코딩할 수 있고, 인트라 예측 처리 유닛(46)(또는 몇몇 예에서, 모드 선택 유닛)은 테스트된 인트라 예측 모드 중에서 사용할 적절한 인트라 예측을 선택할 수 있다. 인트라 예측 처리 유닛(46)은 블록에 대한 선택된 인트라 예측 모드를 지시하는 정보를 엔트로피 인코딩 유닛(56)에 제공할 수 있다. 엔트로피 인코딩 유닛(56)은 선택된 인트라 예측 모드를 지시하는 정보를 비트스트림으로 인코딩할 수 있다.
예측 처리 유닛(41)이 인터 예측 또는 인트라 예측을 통해 현재 비디오 블록에 대한 예측 블록을 결정한 후, 합산기(50)는 현재 비디오 블록에서 예측 블록을 감산하여 잔차 비디오 블록을 형성한다. 잔차 블록의 잔차 비디오 데이터는 하나 이상의 TU에 포함될 수 있으며, 변환 처리 유닛(52)에 제공된다. 변환 처리 유닛(52)은 DCT(Discrete Cosine Transform) 또는 개념적으로 유사한 변환과 같은, 변환을 사용하여 잔차 비디오 데이터를 잔차 변환 계수로 변환한다.
변환 처리 유닛(52)은 결과로서 얻은 변환 계수를 양자화 유닛(54)에 전송할 수 있다. 양자화 유닛(54)은 변환 계수를 양자화하여 비트 레이트를 더욱 감소시킨다. 양자화 프로세스는 또한 계수의 일부 또는 전부와 연관된 비트 심도(bit depth)를 감소시킬 수 있다. 양자화 정도(degree of quantization)는 양자화 파라미터를 조정함으로써 수정될 수 있다. 몇몇 예에서, 양자화 유닛(54)은 양자화된 변환 계수를 포함하는 행렬의 스캔(scan)을 수행할 수 있다. 대안적으로는, 엔트로피 인코딩 유닛(56)이 스캔을 수행할 수 있다.
양자화에 이어서, 엔트로피 인코딩 유닛(56)은, 예컨대 CAVLC(Context Adaptive Variable Length Coding), CABAC(Context Adaptive Binary Arithmetic Coding), SBAC(Syntax-based context-adaptive Binary Arithmetic Coding), PIPE(Probability Interval Partitioning Entropy) 코딩 또는 다른 엔트로피 인코딩 방법 또는 기술을 사용하여, 양자화된 변환 계수를 비디오 비트스트림으로 엔트로피 인코딩한다. 그 다음에 인코딩된 비트스트림은 도 1에 도시된 바와 같은 비디오 디코더(30)에 송신될 수 있거나, 나중에 비디오 디코더(30)로의 송신 또는 비디오 디코더(30)에 의한 검색을 위해 도 1에 도시된 바와 같은 저장 디바이스(32)에 보관될 수 있다. 엔트로피 인코딩 유닛(56)은 또한 코딩되고 있는 현재 비디오 프레임에 대한 움직임 벡터 및 다른 신택스 요소를 엔트로피 인코딩할 수 있다.
역양자화 유닛(58)과 역변환 처리 유닛(60)은 다른 비디오 블록의 예측을 위한 참조 블록을 생성하기 위해, 개별적으로 역양자화와 역변환을 적용하여, 픽셀 도메인에서 잔차 비디오 블록을 재구축한다. 전술한 바와 같이, 움직임 보상 유닛(44)은 DPB(64)에 저장된 프레임의 하나 이상의 참조 블록으로부터 움직임 보상된 예측 블록을 생성할 수 있다. 움직임 보상 유닛(44)은 또한 하나 이상의 보간 필터를 예측 블록에 적용하여, 움직임 추정에 사용하기 위한 정수 미만의 픽셀 값을 계산할 수 있다.
합산기(62)는 재구축된 잔차 블록을 움직임 보상 유닛(44)에 의해 생성된 움직임 보상 예측 블록에 가산하여, DPB(64)에 저장하기 위한 참조 블록을 생성한다. 그러면 참조 블록은 인트라 BC 유닛(48), 움직임 추정 유닛(42), 및 움직임 보상 유닛(44)에 의해 후속 비디오 프레임에서 다른 비디오 블록을 인터 예측하기 위한 예측 블록으로서 사용될 수 있다.
도 3은 본 출원의 몇몇 구현에 따른 예시적인 비디오 디코더(30)를 나타낸 블록도이다. 비디오 디코더(30)는 비디오 데이터 메모리(79), 엔트로피 디코딩 유닛(80), 예측 처리 유닛(81), 역양자화 유닛(86), 역변환 처리 유닛(88), 합산기(90), 및 DPB(92)를 포함한다. 예측 처리 유닛(81)은 움직임 보상 유닛(82), 인트라 예측 처리 유닛(84), 및 인트라 BC 유닛(85)을 더 포함한다. 비디오 디코더(30)는 도 2와 관련하여 비디오 인코더(20)와 관련한 전술한 인코딩 프로세스와 일반적으로 반대인 디코딩 프로세스를 수행할 수 있다. 예를 들어, 움직임 보상 유닛(82)은 엔트로피 디코딩 유닛(80)으로부터 수신된 움직임 벡터에 기초하여 예측 데이터를 생성할 수 있는 반면, 인트라 예측 유닛(84)은 엔트로피 디코딩 유닛(80)으로부터 수신된 인트라 예측 모드 지시자에 기초하여 예측 데이터를 생성할 수 있다.
몇몇 예에서, 비디오 디코더(30)의 유닛은 본 출원의 구현을 수행하도록 임무를 부여받을 수 있다. 또한, 몇몇 예에서, 본 개시의 구현은 비디오 디코더(30)의 유닛들 중의 하나 이상으로 나눠질 수 있다. 예를 들어, 인트라 BC 유닛(85)은 단독으로, 또는 움직임 보상 유닛(82), 인트라 예측 처리 유닛(84) 및 엔트로피 디코딩 유닛(80)과 같은 비디오 디코더(30)의 다른 유닛과 조합하여 본 출원의 구현을 수행할 수 있다. 몇몇 예에서, 비디오 디코더(30)는 인트라 BC 유닛(85)을 포함하지 않을 수 있으며, 인트라 BC 유닛(85)의 기능은 움직임 보상 유닛(82)과 같은, 예측 처리 유닛(81)의 다른 컴포넌트에 의해 수행될 수 있다.
비디오 데이터 메모리(79)는 비디오 디코더(30)의 다른 컴포넌트에 의해 디코딩될 인코딩된 비디오 비트스트림과 같은, 비디오 데이터를 저장할 수 있다. 비디오 데이터 메모리(79)에 저장된 비디오 데이터는, 예를 들어 저장 디바이스(32)로부터, 카메라와 같은 로컬 비디오 소스로부터, 비디오 데이터의 유선 또는 무선 네트워크 통신을 통해, 또는 물리적 데이터 저장 매체(예컨대, 플래시 드라이브 또는 하드 디스크)를 액세스하는 것에 의해 획득될 수 있다. 비디오 데이터 메모리(79)는 인코딩된 비디오 비트스트림으로부터의 인코딩된 비디오 데이터를 저장하는 코딩된 픽처 버퍼(coded picture buffer, CPB)를 포함할 수 있다. 비디오 디코더(30)의 DPB(92)는 (예컨대, 인트라 또는 인터 예측 코딩 모드에서) 비디오 디코더(30)에 의해 비디오 데이터를 디코딩하는 데 사용하기 위한 참조 비디오 데이터를 저장한다. 비디오 데이터 메모리(79)와 DPB(92)는 예컨대 SDRAM(Synchronous DRAM), MRAM(Magneto-resistive RAM), RRAM(Resistive RAM)을 포함한 동적 랜덤 액세스 메모리(dynamic random access memory, DRAM), 또는 기타 유형의 메모리 디바이스와 같은, 다양한 메모리 디바이스 중 임의의 메모리 디바이스에 의해 형성될 수 있다. 예시의 목적으로, 비디오 데이터 메모리(79)와 DPB(92)는 도 3에서 비디오 디코더(30)의 별개의 2개의 컴포넌트로서 묘사된다. 그러나 비디오 데이터 메모리(79)와 DPB(92)가 동일한 메모리 디바이스 또는 별개의 메모리 디바이스에 의해 제공될 수 있음은 당업자에게 명백할 것이다. 몇몇 예에서, 비디오 데이터 메모리(79)는 비디오 디코더(30)의 다른 컴포넌트와 함께 온칩일 수 있거나, 그러한 컴포넌트에 대해 오프칩일 수 있다.
디코딩 프로세스 동안, 비디오 디코더(30)는 인코딩된 비디오 프레임의 비디오 블록 및 연관된 신택스 요소를 나타내는 인코딩된 비디오 비트스트림을 수신한다. 비디오 디코더(30)는 비디오 프레임 레벨 및/또는 비디오 블록 레벨에서 신택스 요소를 수신할 수 있다. 비디오 디코더(30)의 엔트로피 디코딩 유닛(80)은 비트스트림을 엔트로피 디코딩하여 양자화된 계수, 움직임 벡터 또는 인트라 예측 모드 지시자, 및 다른 신택스 요소를 생성한다. 그런 다음 엔트로피 디코딩 유닛(80)은 움직임 벡터 및 다른 신택스 요소를 예측 처리 유닛(81)에 포워딩한다.
비디오 프레임이 인트라 예측 코딩된(I) 프레임으로서 코딩되거나 다른 유형의 프레임에서 인트라 코딩된 예측 블록에 대해 코딩되는 경우, 예측 처리 유닛(81)의 인트라 예측 처리 유닛(84)은 시그널링된 인트라 예측 모드 및 현재 프레임의 이전에 디코딩된 블록으로부터의 참조 데이터에 기초하여, 현재 비디오 프레임의 비디오 블록에 대한 예측 데이터를 생성할 수 있다.
비디오 프레임이 인터 예측 코딩된(즉, B 또는 P) 프레임으로 코딩되는 경우, 예측 처리 유닛(81)의 움직임 보상 유닛(82)은 엔트로피 디코딩 유닛(80)으로부터 수신된 움직임 벡터 및 다른 신택스 요소에 기초하여, 현재 비디오 프레임의 비디오 블록에 대한 하나 이상의 예측 블록을 생성한다. 각각의 예측 블록은 참조 프레임 리스트 중 하나 내의 참조 프레임으로부터 생성될 수 있다. 비디오 디코더(30)는 DPB(92)에 저장된 참조 프레임에 기초한 디폴트 구축 기술(default construction technique)을 사용하여, 참조 프레임 리스트인 리스트 0 및 리스트 1을 구축할 수 있다.
몇몇 예에서, 비디오 블록이 본 명세서에 기재된 인트라 BC 모드에 따라 코딩되는 경우, 예측 처리 유닛(81)의 인트라 BC 유닛(85)은 엔트로피 디코딩 유닛(80)으로부터 수신된 블록 벡터 및 다른 신택스 요소에 기초하여, 현재 비디오 블록에 대한 예측 블록을 생성한다. 예측 블록은 비디오 인코더(20)에 의해 정의된 현재 비디오 블록과 동일한 픽처의 재구축된 영역 내에 있을 수 있다.
움직임 보상 유닛(82) 및/또는 인트라 BC 유닛(85)은 움직임 벡터 및 다른 신택스 요소를 파싱함으로써 현재 비디오 프레임의 비디오 블록에 대한 예측 정보를 결정한 다음, 예측 정보를 사용하여, 디코딩되고 있는 현재 비디오 블록에 대한 예측 블록을 생성한다. 예를 들어, 움직임 보상 유닛(82)은 수신된 신택스 요소 중 일부를 사용하여, 비디오 프레임의 비디오 블록을 코딩하는 데 사용되는 예측 모드(예컨대, 인트라 예측 또는 인터 예측), 인터 예측 프레임 유형(예컨대, B 또는 P), 프레임에 대한 참조 프레임 리스트 중 하나 이상에 대한 구축 정보, 프레임의 인터 예측 인코딩된 비디오 블록 각각에 대한 움직임 벡터, 프레임의 인터 예측 코딩된 비디오 블록 각각에 대한 인터 예측 상태, 및 현재 비디오 프레임에서 비디오 블록을 디코딩하기 위한 기타 정보를 결정한다
마찬가지로, 인트라 BC 유닛(85)은 수신된 신택스 요소 중 일부, 예컨대 플래그를 사용하여, 현재 비디오 블록이 인트라 BC 모드, 프레임의 어떤 비디오 블록이 재구축된 프레임 영역 내에 있고 DBP(92)에 저장되어야 하는지에 대한 구축 정보, 프레임의 인트라 BC 예측된 비디오 블록 각각에 대한 블록 벡터, 프레임의 인트라 BC 예측된 비디오 블록 각각에 대한 인트라 BC 예측 상태, 및 현재 비디오 프레임의 비디오 블록을 디코딩하기 위한 기타 정보를 사용하여 예측되었음을 결정한다.
움직임 보상 유닛(82)은 또한 비디오 블록의 인코딩 동안에 비디오 인코더(20)에 의해 사용되는 보간 필터를 사용하여 보간을 수행하여, 참조 블록의 정수 미만 픽셀에 대한 보간 값을 계산할 수 있다. 이 경우, 움직임 보상 유닛(82)은 비디오 인코더(20)에 의해 사용된 보간 필터를 수신된 신택스 요소로부터 결정할 수 있고, 보간 필터를 사용하여 예측 블록을 생성할 수 있다.
역양자화 유닛(86)은 양자화 정도를 결정하기 위해 비디오 프레임 내의 비디오 블록 각각에 대해 비디오 인코더(20)에 의해 계산되는 동일한 양자화 파라미터를 사용하여 엔트로피 디코딩 유닛(80)에 의해 엔트로피 디코딩되고 비트스트림으로 제공되는 양자화된 변환 계수를 역양자화한다. 역변환 처리 유닛(88)은 픽셀 도메인에서 잔차 블록을 재구축하기 위해, 역변환, 예컨대 역DCT, 역정수 변환 또는 개념적으로 유사한 역변환 프로세스를 변환 계수에 적용한다.
움직임 보상 유닛(82) 또는 인트라 BC 유닛(85)이 벡터 및 다른 신택스 요소에 기초하여 현재 비디오 블록에 대한 예측 블록을 생성한 후, 합산기(90)는 역변환 처리 유닛(88)으로부터의 잔차 블록과 움직임 보상 유닛(82) 및 인트라 BC 유닛(85)에 의해 생성된 대응하는 예측 블록을 합산함으로써, 현재 비디오 블록에 대한 디코딩된 비디오 블록을 재구축한다. 디블록킹 필터, SAO 필터 및/또는 ALF와 같은 인루프 필터(91)는 합산기(90)와 DPB(92) 사이에 위치되어, 디코딩된 비디오 블록을 추가로 처리할 수 있다. 인루프 필터(91)는 재구축된 CU가 참조 픽처 저장소에 놓이기 전에 재구축된 CU에 적용될 수 있다. 몇몇 예에서, 인루프 필터(91)는 생략될 수 있으며, 디코딩된 비디오 블록은 합산기(90)에 의해 DPB(92)에 직접 제공될 수 있다. 그러 다음 주어진 프레임의 디코딩된 비디오 블록은 다음 비디오 블록의 후속 움직임 보상에 사용되는 참조 프레임을 저장하는 DPB(92)에 저장된다. DPB(92), 또는 DPB(92)와는 별개인 메모리 디바이스는 또한 도 1의 디스플레이 디바이스(34)와 같은, 디스플레이 디바이스에 나중에 나타내기 위해 디코딩된 비디오를 저장할 수 있다.
전형적인 비디오 코딩 프로세스에서, 비디오 시퀀스는 보통 프레임 또는 픽처의 순서화된 세트를 포함한다. 각각의 프레임은 SL, SCb 및 SCr로 표시된 3개의 샘플 배열을 포함할 수 있다. SL은 루마 샘플의 2차원 배열이다. SCb는 Cb 크로마 샘플의 2차원 배열이다. SCr은 Cr 크로마 샘플의 2차원 배열이다. 다른 사례에서, 프레임이 모노크롬일 수 있으므로, 루마 샘플의 2차원 배열을 하나만 포함한다.
HEVC와 마찬가지로, AVS3 표준은 블록 기반 하이브리드 비디오 코딩 프레임워크를 기초로 구축된다. 입력 비디오 신호는 블록별(코딩 유닛(CU)이라고 함)로 처리된다. 쿼드 트리에만 기초하여 블록을 파티셔닝하는 HEVC와 달리, AVS3에서는 하나의 코딩 트리 유닛(CTU)을 쿼드/바이너리/확장된 쿼드 트리(extended-quad-tree)에 기초하여 변화하는 로컬 특성에 적응시키기 위해 여러 CU로 분할한다. 추가적으로, HEVC에서 다수의 파티션 유닛 유형의 개념은 제거된다. 즉, CU, 예측 유닛(PU) 및 변환 유닛(TU)의 구분(separation)은 AVS3에 존재하지 않는다. 대신에, 각각의 CU는 항상 추가 파티션 없이 예측과 변환 둘 다를 위한 기본 유닛(basic unit)으로서 사용된다. AVS3의 트리 파티션 구조에서, 먼저 하나의 CTU가 쿼드 트리 구조에 기초하여 파티셔닝된다. 그런 다음 각각의 쿼드 트리 리프 노드가 바이너리 및 확장된 쿼드 트리 구조에 기초하여 추가로 파티셔닝될 수 있다.
도 4a에 도시된 바와 같이, 비디오 인코더(20)(또는 더 구체적으로 파티션 유닛(45))는 먼저 프레임을 CTU 세트로 파티셔닝함으로써 프레임의 인코딩된 표현을 생성한다. 비디오 프레임은 왼쪽에서 오른쪽으로 그리고 상단(top)에서 하단(bottom)으로 래스터 스캔 순서(raster scan order)에서 연속적으로 정렬된 정수개의 CTU를 포함할 수 있다. 각각의 CTU는 가장 큰 논리 코딩 유닛이며, CTU의 너비와 높이는 비디오 시퀀스의 모든 CTU가 128×128, 64×64, 32×32, 및 16×16 중 하나인 동일한 크기를 갖도록, 비디오 인코더(20)에 의해 시퀀스 파라미터 세트에서 시그널링된다. 그러나 본 출원이 반드시 특정한 크기로 한정되는 것은 아니라는 점에 유의해야 한다. 도 4b에 도시된 바와 같이, 각각의 CTU는 루마 샘플의 하나의 CTB, 크로마 샘플의 2개의 대응하는 코딩 트리 블록, 및 코딩 트리 블록의 샘플을 코딩하는 데 사용되는 신택스 요소를 포함할 수 있다. 신택스 요소는 픽셀의 코딩된 블록의 서로 다른 유형의 유닛의 속성과, 인터 또는 인트라 예측, 인트라 예측 모드, 움직임 벡터 및 기타 파라미터를 포함하여, 비디오 디코더(30)에서 비디오 시퀀스가 어떻게 재구축될 수 있는지를 기술한다. 모노크롬 픽처 또는 3개의 개별 색상 평면을 갖는 픽처에서, CTU는 단일 코딩 트리 블록 및 코딩 트리 블록의 샘플을 코딩하는 데 사용되는 신택스 요소를 포함할 수 있다. 코딩 트리 블록은 샘플의 N×N 블록일 수 있다.
더 나은 성능을 달성하기 위해, 비디오 인코더(20)는 CTU의 코딩 트리 블록에 대해 바이너리 트리 파티셔닝, 터너리 트리 파티셔닝, 쿼드 트리 파티셔닝 또는 이들의 조합과 같은 트리 파티셔닝을 재귀적으로 수행하고, CTU를 더 작은 CU로 나눌 수 있다. 도 4c에 도시된 바와 같이, 64×64 CTU(400)는 먼저 4개의 더 작은 CU로 나뉘며, 이들 각각은 32×32의 블록 크기를 갖는다. 4개의 더 작은 CU 중에서, CU(410)와 CU(420)는 각각 블록 크기가 16×16인 4개의 CU로 나뉜다. 2개의 16×16 CU(430, 440)는 각각 블록 크기가 8×8인 4개의 CU로 더 나뉜다. 도 4d는 도 4c에 묘사된 바와 같이 CTU(400)의 파티션 프로세스의 최종 결과를 나타낸 쿼드 트리 데이터 구조를 도시하며, 쿼드 트리의 각 리프 노드는 32×32에서 8×8까지 범위의 개별 크기를 갖는 하나의 CU에 대응한다. 도 4b에 도시된 CTU와 마찬가지로, 각각의 CU는 루마 샘플의 CB 및 동일한 크기의 프레임의 크로마 샘플의 2개의 대응하는 코딩 블록, 및 코딩 블록의 샘플을 코딩하는 데 사용되는 신택스 요소를 포함할 수 있다. 모노크롬 픽처 또는 3개의 개별 색상 평면을 갖는 픽처에서, CU는 단일 코딩 블록 및 코딩 블록의 샘플을 코딩하는 데 사용되는 신택스 구조를 포함할 수 있다. 도 4c 및 도 4d에 묘사된 쿼드 트리 파티셔닝은 설명을 위한 것일 뿐이며, 하나의 CTU를 여러 CU로 분할하여 쿼드/터너리/바이너리 트리 파티션에 기초하여 다양한 로컬 특성에 적응시킬 수 있음을 유의해야 한다. 다중 유형 트리 구조(multi-type tree structure)에서, 하나의 CTU는 쿼드 트리 구조로 파티셔닝되고, 각각의 쿼드 트리 리프 CU는 바이너리 트리 및 터너리 트리 구조로 추가로 파티셔닝될 수 있다. 도 4e에 도시된 바와 같이, 너비 W와 높이 H인 코딩 블록의 가능한 파티셔닝 유형에는 5가지가 있다, 즉, 쿼터너리(quaternary) 파티셔닝, 수평 바이너리 파티셔닝, 수직 바이너리 파티셔닝, 수평 터너리 파티셔닝 및 수직 터너리 파티셔닝이 있다. AVS3에는 5가지 가능한 파티셔닝 유형, 즉 쿼터너리 파티셔닝, 수평 바이너리 파티셔닝, 수직 바이너리 파티셔닝, 수평 확장형 쿼드트리(extended quad-tree) 파티셔닝(도 4e에 도시되지 않음) 및 수직 확장형 쿼드트리 파티셔닝(도 4e에 도시되지 않음)이 있다.
몇몇 구현에서, 비디오 인코더(20)는 추가로, CU의 코딩 블록을 하나 이상의 M×N PB로 파티셔닝할 수 있다. PB는 동일한 예측, 인터 또는 인트라가 적용되는 샘플의 직사각형(정사각형 또는 비정사각형) 블록이다. CU의 PU는 루마 샘플의 PB, 크로마 샘플의 대응하는 2개의 PB, 및 PB를 예측하는 데 사용되는 신택스 요소를 포함할 수 있다. 모노크롬 픽처 또는 3개의 개별 색상 평면을 갖는 픽처에서, PU는 단일 PB 및 PB를 예측하는 데 사용되는 신택스 구조를 포함할 수 있다. 비디오 인코더(20)는 CU의 PU 각각의 루마 PB, Cb PB, 및 Cr PB에 대한 예측 루마 블록, 예측 Cb 블록, 및 예측 Cr 블록을 생성할 수 있다.
비디오 인코더(20)는 인트라 예측 또는 인터 예측을 사용하여, PU에 대한 예측 블록을 생성할 수 있다. 비디오 인코더(20)가 인트라 예측을 사용하여 PU의 예측 블록을 생성하는 경우, 비디오 인코더(20)는 PU와 연관된 프레임의 디코딩된 샘플에 기초하여 PU의 예측 블록을 생성할 수 있다. 비디오 인코더(20)가 인터 예측을 사용하여 PU의 예측 블록을 생성하는 경우, 비디오 인코더(20)는 PU와 연관된 프레임 이외의 하나 이상의 프레임의 디코딩된 샘플에 기초하여 PU의 예측 블록을 생성할 수 있다.
비디오 인코더(20)가 CU의 하나 이상의 PU에 대한 예측 루마 블록, 예측 Cb 블록, 및 예측 Cr 블록을 생성한 후, 비디오 인코더(20)는 원래의 루마 코딩 블록에서 CU의 예측 루마 블록을 감산하여 CU에 대한 루마 잔차 블록을 생성하여, CU의 루마 잔차 블록의 각각의 샘플이 CU의 예측 루마 블록 중 하나의 루마 샘플과 CU의 원래의 루마 코딩 블록의 대응하는 샘플과의 차이를 지시할 수 있도록 한다. 마찬가지로, 비디오 인코더(20)는 CU에 대해 Cb 잔차 블록과 Cr 잔차 블록을 각각 생성하여, CU의 Cb 잔차 블록의 샘플 각각이 CU의 예측 Cb 블록 중 하나의 Cb 샘플과 CU의 원래의 Cb 코딩 블록의 대응하는 샘플과의 차이를 지시할 수 있도록, 그리고 CU의 Cr 잔차 블록의 샘플 각각은 CU의 예측 Cr 블록 중 하나의 Cr 샘플과 CU의 원래의 Cr 코딩 블록의 대응하는 샘플과의 차이를 지시할 수 있도록 한다
또한, 도 4c에 나타낸 바와 같이, 비디오 인코더(20)는 쿼드 트리 파티셔닝을 사용하여, CU의 루마 잔차 블록, Cb 잔차 블록, 및 Cr 잔차 블록을 하나 이상의 루마 변환 블록, Cb 변환 블록, 및 Cr 변환 블록으로 각각 분해할 수 있다. 변환 블록은 동일한 변환이 적용되는 샘플의 직사각형(정사각형 또는 비정사각형) 블록이다. CU의 TU는 루마 샘플의 변환 블록, 크로마 샘플의 2개의 대응하는 변환 블록, 및 변환 블록 샘플을 변환하는 데 사용되는 신택스 요소를 포함할 수 있다. 따라서, CU의 각 TU는 루마 변환 블록, Cb 변환 블록, 및 Cr 변환 블록과 연관될 수 있다. 몇몇 예에서, TU와 연관된 루마 변환 블록은 CU의 루마 잔차 블록의 서브블록일 수 있다. Cb 변환 블록은 CU의 Cb 잔차 블록의 서브블록일 수 있다. Cr 변환 블록은 CU의 Cr 잔차 블록의 서브블록일 수 있다. 모노크롬 픽처 또는 3개의 개별 색상 평면을 갖는 픽처에서, TU는 단일 변환 블록 및 변환 블록의 샘플을 변환하는 데 사용되는 신택스 구조를 포함할 수 있다.
비디오 인코더(20)는 TU의 루마 변환 블록에 하나 이상의 변환을 적용하여, TU에 대한 루마 계수 블록을 생성할 수 있다. 계수 블록은 변환 계수의 2차원 배열일 수 있다. 변환 계수는 스칼라량(scalar quantity)일 수 있다. 비디오 인코더(20)는 TU의 Cb 변환 블록에 하나 이상의 변환을 적용하여, TU에 대한 Cb 계수 블록을 생성할 수 있다. 비디오 인코더(20)는 TU의 Cr 변환 블록에 하나 이상의 변환을 적용하여, TU에 대한 Cr 계수 블록을 생성할 수 있다.
비디오 인코더(20)는 계수 블록(예컨대, 루마 계수 블록, Cb 계수 블록, 또는 Cr 계수 블록)을 생성한 후, 계수 블록을 양자화할 수 있다. 양자화는 일반적으로 변환 계수를 표현하는 데 사용되는 데이터의 양을 가능한 줄이기 위해 변환 계수를 양자화하여, 추가적인 압축을 제공하는 프로세스를 말한다. 비디오 인코더(20)가 계수 블록을 양자화한 후, 비디오 인코더(20)는 양자화된 변환 계수를 지시하는 신택스 요소를 엔트로피 인코딩할 수 있다. 예를 들어, 비디오 인코더(20)는 양자화된 변환 계수를 지시하는 신택스 요소에 대해 CABAC를 수행할 수 있다. 마지막으로, 비디오 인코더(20)는 코딩된 프레임 및 연관된 데이터의 표현을 형성하는 비트의 시퀀스를 포함하는 비트스트림을 출력할 수 있으며, 이는 저장 디바이스(32)에 저장되거나 목적지 디바이스(14)로 송신된다.
비디오 디코더(30)는 비디오 인코더(20)에 의해 생성된 비트스트림을 수신한 후, 비트스트림을 파싱하여 비트스트림으로부터 신택스 요소를 획득할 수 있다. 비디오 디코더(30)는 비트스트림으로부터 획득된 신택스 요소에 적어도 부분적으로 기초하여 비디오 데이터의 프레임을 재구축할 수 있다. 비디오 데이터를 재구축하는 프로세스는 일반적으로 비디오 인코더(20)에 의해 수행되는 인코딩 프로세스에 반대되는 것이다. 예를 들어, 비디오 디코더(30)는 현재 CU의 TU와 연관된 계수 블록에 대해 역변환을 수행하여, 현재 CU의 TU와 연관된 잔차 블록을 재구축할 수 있다. 비디오 디코더(30)는 또한 현재 CU의 PU에 대한 예측 블록의 샘플을 현재 CU의 TU의 변환 블록의 대응하는 샘플에 추가함으로써 현재 CU의 코딩 블록을 재구축한다. 비디오 디코더(30)는 프레임의 CU 각각에 대한 코딩 블록을 재구축한 후, 비프레임을 재구축할 수 있다.
위에서 언급한 바와 같이, 비디오 코딩은 주로 두 가지 모드, 즉 인트라 프레임 예측(또는 인트라 예측) 및 인터 프레임 예측(또는 인터 예측)을 사용하여 비디오 압축을 달성한다. IBC는 인트라 프레임 예측 또는 제3 모드로 간주될 수 있음에 유의하기 바란다. 두 모드 사이에서, 인터 프레임 예측은 참조 비디오 블록으로부터 현재 비디오 블록을 예측하기 위해 움직임 벡터를 사용하기 때문에 인트라 프레임 예측보다 코딩 효율에 더 많이 기여한다.
그러나 비디오 데이터 캡처 기술이 계속하여 향상되고 비디오 데이터의 세부사항을 보존하기 위해 비디오 블록 크기가 더욱 세밀하게 구분됨에 따라, 현재 프레임에 대한 움직임 벡터를 표현하는 데 필요한 데이터의 양도 상당히 증가한다. 이 문제를 극복하는 한 가지 방법은 공간 도메인과 시간 도메인 둘 다에서 이웃 CU 그룹이 예측 목적을 위해 유사한 비디오 데이터를 가질 뿐만 아니라 이러한 이웃 CU 간의 움직임 벡터도 유사하다는 사실로부터 이점을 얻는 것이다. 따라서, 공간적으로 이웃하는 CU 및/또는 시간적으로 동일 위치에 있는 CU의 움직임 정보를, 이들의 공간적 및 시간적 상관관계를 탐색함으로써 현재 CU의 움직임 정보(예컨대, 움직임 벡터)의 근사치(approximation)로 사용하는 것이 가능한데, 이는 현재 CU의 "움직임 벡터 예측자(motion vector predictor, MVP)라고도 한다.
도 2와 관련하여 전술한 바와 같이 움직임 추정 유닛(42)에 의해 결정된 현재 CU의 실제 움직임 벡터를 비디오 비트스트림으로 인코딩하는 대신, 현재 CU의 움직임 벡터 예측자를 현재 CU의 실제 움직임 벡터에서 감산하여 현재 CU에 대한 움직임 벡터 차이(motion vector difference, MVD)를 생성한다. 이렇게 함으로써, 프레임의 CU 각각에 대해 움직임 추정 유닛(42)에 의해 결정된 움직임 벡터를 비디오 비트스트림으로 인코딩할 필요가 없고, 비디오 비트스트림에서 움직임 정보를 표현하는 데 사용되는 데이터의 양을 상당히 줄일 수 있다.
코드 블록의 인터 프레임 예측 동안에 참조 프레임에서 예측 블록을 선택하는 프로세스와 마찬가지로, 현재 CU의 공간적으로 이웃하는 CU 및/또는 시간적으로 동일 위치에 있는 CU와 연관된 잠재적 후보 움직임 벡터(potential candidate motion vector)를 사용하여 현재 CU에 대한 움직임 벡터 후보 리스트("병합 리스트(merge list)"로도 알려짐)를 구축한 다음, 움직임 벡터 후보 리스트에서 하나의 멤버를 현재 CU에 대한 움직임 벡터 예측자로서 선택하기 위해 비디오 인코더(20)와 비디오 디코더(30) 둘 다에 의해 규칙 세트가 채택되어야 한다. 이렇게 함으로써, 움직임 벡터 후보 리스트 자체를 비디오 인코더(20)에서 비디오 디코더(30)로 송신할 필요가 없고, 움직임 벡터 후보 리스트 내에서 선택된 움직임 벡터 예측자의 인덱스는, 비디오 인코더(20)와 비디오 디코더(30)가 현재 CU를 인코딩 및 디코딩하기 위해 움직임 벡터 후보 리스트 내의 동일한 움직임 벡터 예측자를 사용하기에 충분하다.
일반적으로, VVC에 적용되는 기본적인 인트라 예측 방식은 예컨대, 광각 인트라 모드를 사용한 확장된 인트라 예측, MRL(Multiple Reference Line) 인트라 예측, PDPC(Position-Dependent intra Prediction Combination), ISP(Intra Sub-Partition) 예측, CCLM(Cross-Component Linear Model) 예측 및 MIP(Matrix weighted Intra Prediction)와 같은, 몇 가지 예측 도구가 추가로 확장, 추가 및/또는 개선되는 점을 제외하고는 HEVC의 그것과 거의 동일하게 유지된다.
HEVC와 마찬가지로, VVC는 현재 CU에 이웃하는(즉, 현재 CU 위의 또는 현재 CU 왼쪽의) 참조 샘플의 세트를 사용하여 현재 CU의 샘플을 예측한다. 그러나 자연 비디오(natural video)(특히 고해상도, 예컨대 4K의 비디오 콘텐츠)에 존재하는 더 미세한 에지 방향을 캡처하기 위해, 각도 인트라 모드(angular intra mode)의 수가 HEVC의 33개에서 VVC의 93개로 확장된다. 도 4f는 VVC에서 정의된 바와 같은 인트라 모드를 나타낸 블록도이다. 도 4f에 도시된 바와 같이, 93개의 각도(angular) 인트라 모드 중에서 모드 2 내지 l66은 종래의 각도 인트라 모드이고, 모드 -1 내지 -14와 모드 67 내지 80은 광각((wide-angle) 인트라 모드이다. 각도 인트라 모드 외에, HEVC의 평면(planar) 모드(도 1의 모드 0)와 직류(direct current, DC) 모드(도 1의 모드 1)도 VVC에 적용된다.
도 4e에 도시된 바와 같이, VVC에서는 쿼드/바이너리/터너리 트리 파티션 구조가 적용되므로, VVC에서는 인트라 예측을 위해 정사각형 모양의 비디오 블록 외에 직사각형 비디오 블록도 존재한다. 주어진 하나의 비디오 블록의 너비와 높이가 동일하지 않기 때문에, 서로 다른 블록 모양에 대한 93개의 각도 인트라 모드 중에서 다양한 각도 인트라 모드의 세트가 선택될 수 있다. 보다 구체적으로는, 정사각형 및 직사각형 비디오 블록 모두에 대해, 평면 및 DC 모드 외에도, 각각의 블록 모양에 대해 93개 각도 인트라 모드 중 65개 각도 인트라 모드가 또한 지원된다. 직사각형 블록 모양의 비디오 블록이 특정 조건을 충족하는 경우, 비디오 블록의 광각 인트라 모드의 인덱스는 아래 표 1에 나타낸 바와 같은 매핑 관계를 사용하여 비디오 인코더(20)로부터 수신된 종래의 각도 인트라 모드의 인덱스에 따라 비디오 디코더(30)에 의해 적응적으로 결정될 수 있다. 즉, 비정사각형 블록의 경우, 광각 인트라 모드는, 파싱된 후에 비디오 디코더(30)에 의해 광각 인트라 모드의 인덱스에 매핑되는, 종래의 각도 인트라 모드의 인덱스를 사용하여 비디오 인코더(20)에 의해 시그널링되므로, 인트라 모드(즉, 93개의 각도 인트라 모드 중 평면 모드, DC 모드 및 65개의 각도 인트라 모드)의 총수(67개)가 변경되지 않도록 보장한다. 결과적으로, 서로 다른 블록 크기에 걸쳐 일관된 설계를 제공하는 동시에 우수한 효율의 인트라 예측 모드 시그널링이 달성된다.
표 1-0은 VCC에서 서로 다른 블록 모양의 인트라 예측을 위한 종래의 각도 인트라 모드의 인덱스와 광각 인트라 모드의 인덱스 사이의 매핑 관계를 보여주며, 여기서 W는 비디오 블록의 너비를 나타내고, H는 비디오 블록의 높이를 나타낸다.
HEVC에서의 인트라 예측과 마찬가지로, VVC에서의 모든 인트라 모드(즉, 평면, DC 및 각도 인트라 모드)는 인트라 예측을 위해 현재 비디오 블록의 위와 왼쪽에 있는 참조 샘플 세트를 활용한다. 그러나, 참조 샘플의 가장 가까운 행/열(즉, 도 4g의 0번째 라인(201))만을 사용하는 HEVC와는 달리, VVC에서는 MRL 인트라 예측이 도입되어, 참조 샘플의 가장 가까운 행/열에 외에도 참조 샘플의 두 개의 추가 행/열(즉, 도 4g의 첫 번째 라인(203) 및 세 번째 라인(205))이 인트라 예측에 사용될 수 있다. 선택된 참조 샘플의 행/열의 인덱스는 비디오 인코더(20)에서 비디오 디코더(30)로 시그널링된다. 참조 블록의 가장 가까운 행/열이 아닌 것(즉, 도 4g에서 첫 번째 라인(203) 또는 세 번째 라인(205))이 선택되는 경우, 현재 비디오 블록을 예측하는데 사용될 수 있는 인트라 모드의 세트에서 평면 모드가 제외된다. 현재 CTU 외부의 확장된 참조 샘플을 사용하는 것을 방지하기 위해, 현재 CTU 내부의 비디오 블록의 첫 번째 행/열에 대해 MRL 인트라 예측이 디스에이블된다.
샘플 적응적 오프셋(SAO)은 인코더에 의해 송신되는 룩업 테이블(look-up table) 내의 값에 기초하여, 오프셋 값을 디블록킹 필터의 적용 후의 샘플 각각에 조건부로 가산함으로써 디코딩된 샘플을 수정하는 프로세스이다. SAO 필터링은 신택스 요소 sao-type-idx에 의해 CTB별로 선택된 필터링 유형에 기초하여, 영역 단위(region basis)로 수행된다. sao-type-idx의 값 0은 SAO 필터가 CTB에 적용되지 않음을 지시하고, 값 1과 2는 각각 대역 오프셋과 에지 오프셋 필터링 유형의 사용을 시그널링한다. sao-type-idx가 1로 지정된 대역 오프셋 모드에서, 선택된 오프셋 값은 샘플 진폭에 직접적으로 의존한다. 이 모드에서, 전체 샘플 진폭 범위는 대역으로 불리는 32개의 세그먼트로 균일하게 분할되고, (32개의 대역 내에서 연속적인) 이들 대역 중의 4개의 대역에 속하는 샘플 값은, 양이거나 음일 수 있는, 대역 오프셋으로 표시된 송신된 값을 가산함으로써 수정된다. 4개의 연속 대역을 사용하는 주요 이유는, 대역 아티팩트(banding artifact)가 나타날 수 있는 평활한 영역에서, CTB 내의 샘플 진폭이 대역 중의 몇몇 대역에서만 집중되는 경향이 있다는 것이다. 또, 4개의 오프셋을 사용하는 설계 선택은 또한 4개의 오프셋 값을 사용하는 동작의 에지 오프셋 모드와 통합된다. sao-type-idx가 2로 지정된 에지 오프셋 모드에서, 0으로부터 3까지의 값을 갖는 신택스 요소 sao-eo-class는 수평, 수직, 또는 2개의 대각선 기울기 방향 중 하나가 CTB에서의 에지 오프셋 분류에 사용되는지 여부를 시그널링한다.
도 5a는 본 개시의 몇몇 구현에 따라, SAO에 사용된 4개의 기울기 패턴을 묘사한 블록도이다. 4개의 기울기 패턴(502, 504, 506, 508)은 에지 오프셋 모드에서의 개개의 sao-eo-class에 대한 것이다. "p"로 라벨링된 샘플은 고려되어야 할 중심 샘플을 지시한다. "n0" 및 "n1"로 라벨링된 2개의 샘플은 (a) 수평(sao-eo-class = 0), (b) 수직(sao-eo-class = 1), (c) 135° 대각선(sao-eo-class = 2), 및 (d) 45°(sao-eo-class = 3) 기울기 패턴을 따라 2개의 이웃하는 샘플을 특정한다. CTB 내의 각각의 샘플은 도 5a에서 도시된 바와 같이, 어떤 포지션에 있는 샘플 값 p를 이웃하는 포지션에 위치한 2개 샘플의 값 n0 및 n1과 비교함으로써, 5개의 EdgeIdx 카테고리 중 하나로 분류된다. 이 분류는 디코딩된 샘플 값에 기초하여 각각의 샘플에 대하여 행해지므로, EdgeIdx 분류를 위한 추가적인 시그널링은 요구되지 않는다. 샘플 포지션에서의 EdgeIdx 카테고리에 따라, 1에서 4까지의 EdgeIdx 카테고리에 대해, 송신된 룩업 테이블로부터의 오프셋 값이 샘플 값에 가산된다. 오프셋 값은 항상 카테고리 1 및 2에 대해 양의 값이고, 카테고리 3 및 4에 대해 음의 값이다. 따라서, 필터는 일반적으로, 에지 오프셋 모드에서 평활화 효과(smoothing effect)를 가진다. 아래의 표 1-1은 SAO 에지 클래스에서의 샘플 EdgeIdx 카테고리를 나타낸다.
SAO 유형 1 및 2의 경우, 총 4개의 진폭 오프셋 값(amplitude offset value)이 각각의 CTB에 대한 디코더로 송신된다. 유형 1의 경우, 부호(sign)도 또한 인코딩된다. 오프셋 값과, sao-type-idx 및 sao-eo-class와 같은 관련된 신택스 요소는 인코더에 의해 결정되는데, 보통은 레이트 왜곡 성능을 최적화하는 기준(criteria)을 사용하여 결정된다. SAO 파라미터는 시그널링을 효율적으로 하기 위해 병합 플래그(merge flag)를 사용하여 왼쪽 또는 위의 CTB로부터 승계되도록 지시될 수 있다. 요약하면, SAO는 재구축된 신호의 추가적인 개선(refinement)를 허용하는 비선형 필터링 동작이며, 이는 평활한 구역(smooth area) 및 에지 주위 둘 다의 신호 표현을 강화할 수 있다.
몇몇 실시예에서, Pre-SAO(Pre-Sample Adaptive Offset)이 구현된다. 복잡도가 낮은 Pre-SAO의 코딩 성능은 미래의 비디오 코딩 표준 개발에 있어 유망하다. 몇몇 예에서, Pre-SAO는 분류에 루마 샘플을 사용하는 루마 성분 샘플에만 적용된다. Pre-SAO는 SAOV와 SAOH로 불리는 2개의 SAO 유사(SAO-like) 필터링 동작을 적용함으로써 동작하며, 이들은 기존(레거시) SAO를 적용하기 전에 디블록킹 필터(DBF)와 함께 적용된다. 첫 번째 SAO 유사 필터 SAOV는 수직 에지용 디블록킹 필터(deblocking filter for the vertical edge, DBFV)가 적용된 후에 입력 픽처 에 SAO를 적용하는 것과 같이 동작한다.
여기서 는 미리 결정된 양의 상수이고, 는 아래에 주어진 사이의 샘플별 차이(sample-wise difference)에 기초한 2개의 클래스와 연관된 오프셋 계수이다:
의 첫 번째 클래스는 이 되도록 모든 샘플 위치 를 취하는 것으로 주어지는 반면, 의 두 번째 클래스는 로 주어진다. 오프셋 계수 는 기존 SAO 프로세스에서와 동일한 방식으로, SAOV의 출력 픽처 와 원래의 픽처 사이의 평균 제곱 오차(mean square error)가 최소화되도록 인코더에서 계산된다. SAOV가 적용된 후, 두 번째 SAO 유사 필터 SAOH는 SAOV가 적용된 후에, 수평 에지용 디블록킹 필터(deblocking filter for the horizontal edge, DBFH)의 출력 픽처를, 사이의 샘플별 차이에 기초한 분류와 함께, 에 SAO를 적용하는 것과 같이 동작한다. SAOV와 동일한 프로시저가 그 분류를 위해 대신에 를 SAOH에 적용된다. 2개의 오프셋 계수, 미리 결정된 임계 값 , 그리고 SAOH 및 SAOV 각각에 대한 인에블링 플래그(enabling flag)가 슬라이스 레벨에서 시그널링된다. SAOH와 SAOV는 루마 성분과 2개의 크로마 성분에 독립적으로 적용된다.
몇몇 사례에서, SAOV와 SAOH는 모두 개개의 디블록킹(DBFV 또는 DBFH)에 의해 영향을 받은 픽처 샘플에 대해서만 동작한다. 따라서, 기존 SAO 프로세스와 달리, 주어진 공간적 영역(픽처, 또는 레거시 SAO의 경우에 CTU) 내의 모든 샘플의 서브세트만이 Pre-SAO에 의해 처리되고 있고, 이는 결과로서 생기는 픽처 샘플 당 디코더측 평균 연산의 증가를 낮게 유지한다(예비적인 추정치에 따른 최악의 경우의 시나리오에서 샘플 당 2번 또는 3번의 비교 및 2번의 가산). Pre-SAO는 디코더에서 추가적인 샘플을 저장하지 않고 디블록킹 필터에 의해 사용되는 샘플만을 필요로 한다.
몇몇 실시예에서, 양측 필터(bilateral filter, BIF)는 VVC를 능가하는 압축 효율 탐구를 위해 구현된다. BIF는 샘플 적응적 오프셋(SAO) 루프 필터 스테이지(loop-filter stage)에서 수행된다. 양측 필터(BIF)와 SAO는 둘 다 디블록킹으로부터의 샘플을 입력으로서 사용하고 있다. 각각의 필터는 샘플마다 오프셋을 생성하며, ALF로 진행하기 전에, 이는 입력 샘플에 가산된 다음 클리핑된다(clipped).
구체적으로, 출력 샘플 은 다음과 같이 획득된다:
,
여기서 는 디블록킹으로부터의 입력 샘플이고, 는 양측 필터로부터의 오프셋이며, 는 SAO로부터의 오프셋이다.
몇몇 실시예에서, 구현은 인코더가 CTU 및 슬라이스 레벨에서 필터링을 인에이블 또는 디스에이블할 가능성을 제공한다. 인코더는 레이트 왜곡 최적화(rate-distortion optimization, RDO) 비용을 평가함으로써 결정을 내린다.
다음의 신택스 요소가 PPS에서 도입된다:
0인 pps_bilateral_filter_enabled_flag는 양측 루프 필터가 PPS를 참조하는 슬라이스에 대해 디스에이블됨을 지정한다. 1인 인 pps_bilateral_filter_flag는 양측 루프 필터가 PPS를 참조하여 슬라이스에 대하여 인에이블됨을 지정한다.
bilateral_filter_strength는 양측 변환 블록 필터 프로세스에서 사용되는 양측 루프 필터 강도 값(bilateral loop filter strength value)을 지정한다. bilateral_filter_strength의 값은 0 내지 2(포함)의 범위 내에 있어야 한다.
bilateral_filter_qp_offset은 PPS를 참조하는 슬라이스에 대한, 양측 필터 룩업 테이블인 LUT(x)의 도출에 사용되는 오프셋을 지정한다. bilateral_filter_qp_offset은 -12 내지 +12(포함)의 범위 내에 있어야 한다.
다음의 신택스 요소가 도입된다:
시맨틱(semantic)은 다음과 같다: 1인 slice_bilateral_filter_all_ctb_enabled_flag는, 양측 필터가 인에이블되고 현재 슬라이스 내의 모든 CTB에 적용됨을 지정한다. slice_bilateral_filter_all_ctb_enabled_flag가 존재하지 않는 경우, 0인 것으로 추론된다.
1인 slice_bilateral_filter_enabled_flag는, 양측 필터가 인에이블되고 현재 슬라이스의 CTB에 적용될 수 있음을 지정한다. slice_bilateral_filter_enabled_flag가 존재하지 않는 경우, slice_bilateral_filter_all_ctb_enabled_flag와 동일한 것으로 추론된다.
1인 bilateral_filter_ctb_flag [xCtb >> CtbLog2SizeY ][ yCtb >> CtbLog2SizeY ]는, 양측 필터가 루마 위치 ( xCtb, yCtb )에서의 코딩 트리 유닛의 루마 코딩 트리 블록에 적용됨을 지정한다. 0인 bilateral_filter_ctb_flag [ cIdx ][ xCtb >> CtbLog2SizeY ][ yCtb >> CtbLog2SizeY ]는, 양측 필터가 루마 위치 ( xCtb, yCtb )에서의 코딩 트리 유닛의 루마 코딩 트리 블록에 적용되지 않음을 지정한다. bilateral_filter_ctb_flag가 존재하지 않는 경우, (slice_bilateral_filter_all_ctb_enabled_flag & slice_bilateral_filter_enabled_flag)와 동일한 것으로 추론된다.
몇몇 예에서, 필터링되는 CTU의 경우, 필터링 프로세스는 다음과 같이 진행된다. 샘플이 이용 불가능한 픽처 경계에서, 양측 필터는 이용 불가능한 샘플을 채워넣기 위해 확장(샘플 반복)을 사용한다. 가상 경계에 대해, 거동은 SAO에 대한 것과 동일하고, 즉, 필터링이 일어나지 않는다. 수평 CTU 경계를 교차할 때, 양측 필터는 SAO가 액세스하고 있는 것과 동일한 샘플을 액세스할 수 있다. 도 5b는 본 개시의 몇몇 구현에 따라, 중심 샘플을 둘러싸는 샘플에 대한 명명 관례를 묘사한 블록도이다. 일례로서, 중심 샘플 가 CTU의 상단 라인(top line)에 위치하는 경우, , , 및 는 SAO가 하는 것처럼 CTU 위쪽으로부터 판독되지만, 는 패딩되므로, 여분의 라인 버퍼가 필요하지 않다. 중심 샘플 를 둘러싸는 샘플은 도 5b에 따라 표시되며, A, B, L, 및 R은 위쪽, 아래쪽, 왼쪽, 및 오른쪽을 의미하고, 여기서, NW, NE, SW, SE는 북서쪽 등을 의미한다. 마찬가지로, AA는 위쪽의 위쪽(above-above)을 의미하고, BB는 아래쪽의 아래쪽(below-below)을 의미하는 등과 같다. 이 다이아몬드 모양은 정사각형 필터 지원을 사용하는 다른 방법과 달리, , , , 또는 을 사용하지 않는다. 각각의 주변 샘플(surrounding sample) , 등은 대응하는 수정자 값(modifier value) , 등에 기여할 것이다. 이들은 다음의 방식으로 계산된다: 샘플로부터 오른쪽 으로의 기여로 시작하면, 차이는 다음과 같이 계산된다:
여기서, 은 절대값을 표시한다. 10비트가 아닌 데이터의 경우, 이 대신에 사용되고, 여기서, 8비트 데이터의 경우 n = 8인 등이다. 결과로서 얻은 값은 이제 클리핑되어, 16보다 작다:
수정자 값은 이제 다음과 같이 계산된다:
여기서 은 qpb = clip(0, 25, QP + bilateral_filter_qp_offset-17)의 값에 의해 결정되는 16개 값의 배열이다:
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, qpb = 0인 경우
{ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, qpb = 1인 경우
{ 0, 2, 2, 2, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, }, qpb = 2인 경우
{ 0, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, -1, }, qpb = 3인 경우
{ 0, 3, 3, 3, 2, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, qpb = 4인 경우
{ 0, 4, 4, 4, 3, 2, 1, 2, 1, 1, 1, 1, 0, 1, 1, -1, }, qpb = 5인 경우
{ 0, 5, 5, 5, 4, 3, 2, 2, 2, 2, 2, 1, 0, 1, 1, -1, }, qpb = 6인 경우
{ 0, 6, 7, 7, 5, 3, 3, 3, 3, 2, 2, 1, 1, 1, 1, -1, }, qpb = 7인 경우
{ 0, 6, 8, 8, 5, 4, 3, 3, 3, 3, 3, 2, 1, 2, 2, -2, }, qpb = 8인 경우
{ 0, 7, 10, 10, 6, 4, 4, 4, 4, 3, 3, 2, 2, 2, 2, -2, }, qpb = 9인 경우
{ 0, 8, 11, 11, 7, 5, 5, 4, 5, 4, 4, 2, 2, 2, 2, -2, }, qpb = 10인 경우
{ 0, 8, 12, 13, 10, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, -2, }, qpb = 11인 경우
{ 0, 8, 13, 14, 13, 12, 11, 8, 8, 7, 7, 5, 5, 4, 4, -2, }, qpb = 12인 경우
{ 0, 9, 14, 16, 16, 15, 14, 11, 9, 9, 8, 6, 6, 5, 6, -3, }, qpb = 13인 경우
{ 0, 9, 15, 17, 19, 19, 17, 13, 11, 10, 10, 8, 8, 6, 7, -3, }, qpb = 14인 경우
{ 0, 9, 16, 19, 22, 22, 20, 15, 12, 12, 11, 9, 9, 7, 8, -3, }, qpb = 15인 경우
{ 0, 10, 17, 21, 24, 25, 24, 20, 18, 17, 15, 12, 11, 9, 9, -3, }, qpb = 16인 경우
{ 0, 10, 18, 23, 26, 28, 28, 25, 23, 22, 18, 14, 13, 11, 11, -3, }, qpb = 17인 경우
{ 0, 11, 19, 24, 29, 30, 32, 30, 29, 26, 22, 17, 15, 13, 12, -3, }, qpb = 18인 경우
{ 0, 11, 20, 26, 31, 33, 36, 35, 34, 31, 25, 19, 17, 15, 14, -3, }, qpb = 19인 경우
{ 0, 12, 21, 28, 33, 36, 40, 40, 40, 36, 29, 22, 19, 17, 15, -3, }, qpb = 20인 경우
{ 0, 13, 21, 29, 34, 37, 41, 41, 41, 38, 32, 23, 20, 17, 15, -3, }, qpb = 21인 경우
{ 0, 14, 22, 30, 35, 38, 42, 42, 42, 39, 34, 24, 20, 17, 15, -3, }, qpb = 22인 경우
{ 0, 15, 22, 31, 35, 39, 42, 42, 43, 41, 37, 25, 21, 17, 15, -3, }, qpb = 23인 경우
{ 0, 16, 23, 32, 36, 40, 43, 43, 44, 42, 39, 26, 21, 17, 15, -3, }, qpb = 24인 경우
{ 0, 17, 23, 33, 37, 41, 44, 44, 45, 44, 42, 27, 22, 17, 15, -3, }, qpb = 25인 경우
이 값들은 엔트리(entry) 당 6비트, 결과적으로 26*16*6/8=312바이트 또는 모두 0(영)인 첫 번째 행(row)을 제외하면 300바이트를 사용하여 저장될 수 있다. , , 및 에 대한 수정자 값은 동일한 방식으로 , , 및 로부터 계산된다. 대각선 샘플 , 및 2스텝 떨어져 있는(two-steps-away) 샘플 , 및 의 경우, 계산은 또한 다음의 식 2 및 3을 따르지만, 1만큼 시프트된(shifted) 값을 사용한다. 대각선 샘플 을 예로 사용하면 다음과 같다:
그리고 다른 대각선 샘플 및 2스텝 떨어져 있는 샘플이 마찬가지로 계산된다.
수정자 값은 함께 합산된다:
몇몇 예에서, 은 이전의 샘플에 대한 과 동일하다. 마찬가지로, 은 위쪽 샘플에 대한 과 동일하고, 대각선 및 2스텝 떨어져 있는 수정자 값에 대해서도 유사한 대칭성이 발견될 수 있다. 이것은 하드웨어 구현에 있어, 6개의 값 , 및 을 계산하는 것으로 충분하고 나머지 6개의 값은 이전에 계산된 값으로부터 획득될 수 있음을 의미한다. 값은 이제 = 1, 2, 또는 3 중 어느 하나에 의해 승산되고, 이것은 다음의 방식으로 단일 가산기 및 논리 AND 게이트를 사용하여 행해질 수 있다:
여기서, &은 논리곱을 나타내고, 은 승수(multiplier) 의 최상위 비트(most significant bit)이며, 은 최하위 비트(least significant bit)이다. 승산할 값은 표 1-5에서 나타낸 바와 같이 최소 블록 차원 을 사용하여 획득된다:
최종적으로, 양측 필터 오프셋 가 계산된다. 최대 강도 필터링(full strength filtering)의 경우, 다음이 사용된다:
반면, 절반 강도 필터링(half-strength filtering)의 경우, 다음이 사용된다:
n비트 데이터에 대한 일반적인 공식은 다음을 사용하는 것이다:
여기서 bilateral_filter_strength는 0 또는 1일 수 있으며, pps에서 시그널링된다.
몇몇 실시예에서, 교차 성분 정보를 도입함으로써 코딩 효율을 향상시키거나 샘플 적응적 오프셋(SAO)의 복잡도를 감소시키기 위한 방법 및 시스템이 본 명세서에서 개시된다. SAO는 HEVC, VVC, AVS2, 및 AVS3 표준에서 사용된다. HEVC, VVC, AVS2, 및 AVS3 표준에서의 기존 SAO 설계는 비디오 코딩의 기술분야에서의 통상의 기술자에게, 다음의 설명에서 기본적인 SAO 방법으로서 사용되지만, 본 개시에 기재된 교차 성분 방법은 또한 유사한 설계 사상을 갖는 다른 루프 필터 설계 또는 다른 코딩 도구에도 적용될 수 있다. 예를 들어, AVS3 표준에서, SAO는 강화된 샘플 적응적 오프셋(ESAO)이라고 하는 코딩 도구로 대체된다. 그러나, 본 명세서에서 개시된 CCSAO는 또한 ESAO와 병행하여 적용될 수 있다. 다른 예에서, CCSAO는 AV1 표준에서의 CDEF(Constrained Directional Enhancement Filter)와 병행하여 적용될 수 있다.
HEVC, VVC, AVS2, 및 AVS3 표준에서의 기존 SAO 설계의 경우, 루마 Y, 크로마 Cb, 및 크로마 Cr 샘플 오프셋 값이 독립적으로 결정된다. 즉, 예를 들어, 현재 크로마 샘플 오프셋은 동일 위치에 있거나 이웃하는 루마 샘플은 고려하지 않고, 현재 및 이웃하는 크로마 샘플 값에 의해서만 결정된다. 그러나, 루마 샘플은 크로마 샘플보다 더 많은 원래의 픽처 세부사항 정보를 보존하며, 이들은 현재 크로마 샘플 오프셋의 결정에 도움이 될 수 있다. 또한, 크로마 샘플은 대개 RGB에서 YCbCr로의 색상 변환 후, 또는 양자화 및 디블록킹 필터 이후에 고주파 세부사항을 잃기 때문에, 크로마 오프셋 결정을 위해 보존된 고주파 세부사항이 있는 루마 샘플을 도입하는 것이 크로마 샘플 재구축에 도움이 될 수 있다. 따라서, 교차 성분 상관(cross-component correlation)을 탐색함으로써, 예를 들어, CCSAO(Cross-Component Sample Adaptive Offset)의 방법 및 시스템을 사용함으로써, 추가의 이득이 예상될 수 있다. 몇몇 실시예에서, 여기에서의 상관은 교차 성분 샘플 값을 포함할 뿐만 아니라, 예측/잔차 코딩 모드, 변환 유형, 및 교차 성분로부터의 양자화/디블록킹/SAO/ALF 파라미터와 같은, 픽처/코딩 정보도 포함한다.
다른 예는, SAO의 경우, 루마 샘플 오프셋은 오직 루마 샘플에 의해서만 결정되는 것이다. 그러나, 예를 들어, 동일한 대역 오프셋(band offset, BO) 분류를 갖는 루마 샘플은 자신과 동일 위치에 있는 크로마 샘플 및 이웃하는 크로마 샘플에 의해 더 분류될 수 있으며, 이는 더욱 효과적인 분류로 이어질 수 있다. SAO 분류는 원래의 픽처와 재구축된 픽처 사이의 샘플 차이를 보상하기 위한 지름길로 이용될 수 있다. 따라서, 효과적인 분류가 기대된다.
도 6a는 본 개시의 몇몇 구현에 따라, 크로마 샘플에 대해 적용되고 DBF Y를 입력으로서 사용하는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다. 루마 디블록킹 필터(DBF Y) 후의 루마 샘플은 SAO Cb 및 SAO Cr 이후의 크로마 Cb 및 Cr에 대한 추가적인 오프셋을 결정하는 데 사용된다. 예를 들어, 현재 크로마 샘플(602)은 먼저, 동일한 위치에 있는 루마 샘플(604) 및 이웃하는 (백색) 루마 샘플(606)을 사용하여 분류되고, 대응하는 클래스의 대응하는 CCSAO 오프셋 값은 현재 크로마 샘플 값에 가산된다. 도 6b는 본 개시의 몇몇 구현에 따라, 루마 샘플 및 크로마 샘플에 적용되고 DBF Y/Cb/Cr을 입력으로서 사용하는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다. 도 6c는 본 개시의 몇몇 구현에 따라, 독립적으로 작동할 수 있는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다. 도 6d는 본 개시의 몇몇 구현에 따라, 동일한 코덱 스테이지에서 동일하거나 상이한 오프셋으로 재귀적으로(2회 또는 N회) 적용될 수 있거나, 상이한 스테이지에서 반복될 수 있는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다. 요약하면, 몇몇 실시예에서, 현재 루마 샘플을 분류하기 위해, 현재 루마 샘플 및 이웃하는 루마 샘플의 정보, 동일 위치에 있는 크로마 샘플 및 이웃하는 크로마 샘플(Cb 및 Cr)의 정보가 사용될 수 있다. 몇몇 실시예에서, 현재 크로마 샘플(Cb 또는 Cr)을 분류하기 위해, 동일 위치에 있는 루마 샘플 및 이웃하는 루마 샘플, 동일 위치에 있는 교차 크로마(cross-chroma) 샘플 및 이웃하는 교차 크로마 샘플, 그리고 현재 크로마 샘플 및 이웃하는 크로마 샘플이 사용될 수 있다. 몇몇 실시예에서, CCSAO는 (1) DBF Y/Cb/Cr 이후에, (2) DBF 이전의 재구축된 이미지 Y/Cb/Cr, 또는 (3) SAO Y/Cb/Cr 이후에, 또는 (4) ALF Y/Cb/Cr 이후에 캐스케이딩(cascade)될 수 있다.
몇몇 실시예에서, CCSAO는 또한, 다른 코딩 도구, 예를 들어, AVS 표준에서의 ESAO, 또는 AV1 표준에서의 CDEF, 또는 NNLF(Neural Network Loop Filter)와 병행하여 적용될 수 있다. 도 6e는 본 개시의 몇몇 구현에 따라, AVS 표준에서의 ESAO와 병행하여 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다.
도 6f는 본 개시의 몇몇 구현에 따라, SAO 이후에 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다. 몇몇 실시예에서, 도 6f는 CCSAO의 위치가 SAO 이후일 수 있음을, 즉, VVC 표준에서의 교차 성분 적응적 루프 필터(CCALF)의 위치를 도시한다. 도 6g는 본 개시의 몇몇 구현에 따라, CCSAO의 시스템 및 프로세스가 CCALF 없이 독립적으로 작동될 수 있음을 나타낸 블록도이다. 몇몇 실시예에서, SAO Y/Cb/Cr은 예를 들어, AVS3 표준에서의 ESAO로 대체될 수 있다.
도 6h는 본 개시의 몇몇 구현에 따라, CCALF와 병행하여 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다. 몇몇 실시예에서, CCSAO는 CCALF와 병행하여 적용될 수 있다. 몇몇 실시예에서, 도 6h에 도시된 바와 같이, CCALF와 CCSAO의 위치는 스위칭될 수 있다. 몇몇 실시예에서, 도 6a 내지 도 6h에 도시된 바와 같이, 또는 본 개시의 전반에 걸쳐, SAO Y/Cb/Cr 블록은 (AVS3에서의) ESAO Y/Cb/Cr 또는 (AV1에서의) CDEF로 대체될 수 있다. Y/Cb/Cr은 또한, 비디오 코딩 분야(video coding area)에서 Y/U/V로도 표시될 수 있음에 유의한다. 몇몇 실시예에서, 비디오가 RGB 포맷인 경우, CCSAO는 또한 본 개시에서 YUV 표기법을 GBR에 각각 간단히 매핑함으로써 적용될 수 있다.
도 6i는 본 개시의 몇몇 구현에 따라, SAO 및 BIF와 병행하여 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다. 도 6j는 본 개시의 몇몇 구현에 따라, SAO를 대체함으로써 BIF와 병행하여 적용되는 CCSAO의 시스템 및 프로세스를 나타낸 블록도이다. 몇몇 실시예에서, 현재 크로마 샘플 분류는 동일 위치에 있는 루마 샘플의 SAO 유형(에지 오프셋(edge offset, EO) 또는 BO), 클래스, 및 카테고리를 재사용하고 있다. 대응하는 CCSAO 오프셋은 시그널링될 수 있거나, 디코더 자체로부터 도출될 수 있다. 예를 들어, h_Y가 동일 위치에 있는 루마 SAO 오프셋이라고 하고, h_Cb 및 h_Cr가 각각 CCSAO Cb 및 Cr 오프셋이라고 하자. h_Cb (또는 h_Cr) = w * h_Y이며, 여기서 w는 한정된 표에서 선택될 수 있다. 예를 들어, +-1/4, +-1/2, 0, +-1, +-2, +-4...등이며, 여기서, |w|는 2의 거듭제곱(power-of-2) 값만을 포함한다.
몇몇 실시예에서, 동일 위치에 있는 루마 샘플 (Y0) 및 이웃하는 8개의 루마 샘플의 비교 점수 [-8, 8]이 사용되며, 이는 총 17개의 클래스를 산출한다.
초기 Class = 0
이웃하는 8개의 루마 샘플에 대한 루프(Yi, i=1 내지 8)
if Y0 > Yi Class += 1
else if Y0 < Yi Class -= 1
몇몇 실시예에서, 전술한 분류 방법들은 조합될 수 있다. 예를 들어, SAO BO(32개 대역 분류)와 조합된 비교 점수는 다이버시티(diversity)를 증가시키기 위해 사용되어, 총 17 * 32개의 클래스를 산출한다. 몇몇 실시예에서, Cb 및 Cr은 복잡도를 감소시키거나 비트를 절감하기 위해 동일한 클래스를 사용할 수 있다.
도 7은 본 개시의 몇몇 구현에 따라, CCSAO를 사용하는 샘플 프로세스를 나타낸 블록도이다. 구체적으로, 도 7은 클래스 결정을 단순화하거나 유연성을 증가시키기 위해, CCSAO의 입력은 수직 및 수평 DBF의 입력을 도입할 수 있음을 도시한다. 예를 들어, Y0_DBF_V, Y0_DBF_H, 및 Y0가 각각 DBF_V, DBF_H, 및 SAO의 입력에서의 동일 위치에 있는 루마 샘플이라고 하자. Yi_DBF_V, Yi_DBF_H, 및 Yi는 각각 DBF_V, DBF_H, 및 SAO의 입력에서의 이웃하는 8개의 루마 샘플이며, 여기서, i = 1 내지 8이다.
Max Y0 = max (Y0_DBF_V, Y0_DBF_H, Y0_DBF)
Max Yi = max (Yi_DBF_V, Yi_DBF_H, Yi_DBF)
그리고 max Y0 및 max Yi를 CCSAO 분류에 공급한다.
도 8은 본 개시의 몇몇 구현에 따라, CCSAO 프로세스가 수직 및 수평 DBF에 인터리빙됨을 나타낸 블록도이다. 몇몇 실시예에서, 도 6a∼도 6j(이하, 도 6), 도 7, 및 도 8에서의 CCSAO 블록은 선택적일 수 있다. 예를 들어, 첫 번째 CCSAO_V에 Y0_DBF_V 및 Yi_DBF_V를 사용하면, 이는 DBF_V 루마 샘플의 입력을 CCSAO 입력으로서 사용하면서, 도 6에서와 동일한 샘플 처리를 적용한다.
몇몇 실시예에서, 구현되는 CCSAO 신택스는 아래의 표 2에 나타냈다.
몇몇 실시예에서, CCSAO Cb 및 Cr 오프셋 값을 시그널링하기 위해, 하나의 추가적인 크로마 오프셋이 시그널링되는 경우, 다른 크로마 성분 오프셋은 비트 오버헤드(bits overhead)를 줄이기 위해 플러스(plus) 또는 마이너스(minus) 부호 또는 가중화(weighting)에 의해 도출될 수 있다.
예를 들어, h_Cb와 h_Cr이 각각 CCSAO Cb와 Cr의 오프셋이라고 하자.
명시적인 시그널링 w를 사용하면 - 여기서 한정된 | w | 후보를 갖는 w = +- | w |임 -, h_Cr은 h_Cr 자체를 명시적으로 시그널링하지 않고 h_Cb로부터 도출될 수 있다.
h_Cr = w * h_Cb
도 7은 본 개시의 몇몇 구현에 따라, CCSAO를 사용하는 샘플 프로세스를 나타낸 블록도이다. 도 8은 본 개시의 몇몇 구현에 따라, CCSAO 프로세스가 수직 및 수평 디블로킹 필터(DBF)에 인터리빙되는 것을 나타낸 블록도이다.
도 9는 본 개시의 몇몇 구현에 따라, 교차 성분 상관을 사용하여 비디오 신호를 디코딩하는 예시적인 프로세스(900)를 나타낸 흐름도이다.
비디오 디코더(30)는 제1 성분 및 제2 성분을 포함하는 비디오 신호를 수신한다(910). 몇몇 실시예에서, 제1 성분은 루마 성분이고, 제2 성분은 비디오 신호의 크로마 성분이다.
비디오 디코더(30)는 또한, 제2 성분과 연관된 복수의 오프셋을 수신한다(920).
그런 다음 비디오 디코더(30)는 제1 성분의 특성 측정(characteristic measurement)을 이용하여 제2 성분과 연관된 분류 카테고리를 획득한다(930). 예를 들어, 도 6에서, 현재 크로마 샘플(602)은 먼저 동일 위치에 있는 루마 샘플(604) 및 이웃하는 (백색) 루마 샘플(606)들을 사용하여 분류되고, 대응하는 CCSAO 오프셋 값이 현재 크로마 샘플 값에 가산된다.
비디오 디코더(30)는 또한 분류 카테고리에 따라 제2 성분에 대한 복수의 오프셋에서 제1 오프셋을 선택한다(940).
비디오 디코더(30)는 추가적으로, 선택된 제1 오프셋에 기초하여 제2 성분을 수정한다(950).
몇몇 실시예에서, 제1 성분의 특성 측정을 활용하여 제2 성분과 연관된 분류 카테고리를 획득하는 것(930)은, 제2 성분의 개개의 샘플을 활용하여 제2 성분의 샘플 개개의 샘플 각각의 분류 카테고리를 획득하는 것을 포함하며, 여기서, 제1 성분의 개개의 샘플은 제2 성분의 개개의 샘플 각각에 대한 제1 성분의 개개의 동일 위치에 있는 샘플이다. 예를 들어, 현재 크로마 샘플 분류는 동일 위치에 있는 루마 샘플의 SAO 유형(EO 또는 BO), 클래스, 및 카테고리를 재사용하고 있다.
몇몇 실시예에서, 제1 성분의 특성 측정을 활용하여 제2 성분과 연관된 분류 카테고리를 획득하는 것(930)은, 제1 성분의 개개의 샘플을 활용하여 제2 성분의 개개의 샘플 각각의 개별 분류 카테고리를 획득하는 것을 포함하며, 여기서, 제1 성분의 개개의 샘플은 디블록킹되기 전에 재구축되거나, 디블록킹된 후에 재구축된다. 몇몇 실시예에서, 제1 성분은 디블록킹 필터(DBF)에서 디블록킹되고 있다. 몇몇 실시예에서, 제1 성분은 루마 디블록킹 필터(DBF Y)에서 디블록킹되고 있다. 예를 들어, 도 6 또는 도 7에 대한 대안으로, CCSAO 입력은 또한 DBF Y 이전일 수 있다.
몇몇 실시예에서, 특성 측정은 제1 성분의 샘플 값의 범위를 몇개의 대역으로 분할하고 제1 성분에서의 샘플의 세기 값(intensity value)에 기초하여 대역을 선택함으로써 도출된다. 몇몇 실시예에서, 특성 측정은 대역 오프셋(BO)으로부터 도출된다.
몇몇 실시예에서, 특성 측정은 제1 성분에서의 샘플의 에지 정보의 방향 및 강도(strength)에 기초하여 도출된다. 몇몇 실시예에서, 특성 측정은 에지 오프셋(EO)으로부터 도출된다.
몇몇 실시예에서, 제2 성분을 수정하는 것(950)은 선택된 제1 오프셋을 제2 성분에 직접적으로 가산하는 것을 포함한다. 예를 들어, 대응하는 CCSAO 오프셋 값이 현재 크로마 성분 샘플에 가산된다.
몇몇 실시예에서, 제2 성분을 수정하는 것(950)은, 선택된 제1 오프셋을 제2 오프셋에 매핑하고 매핑된 제2 오프셋을 제2 성분에 가산하는 것을 포함한다. 예를 들어, CCSAO Cb 및 Cr 오프셋 값을 시그널링하기 위해, 하나의 추가적인 크로마 오프셋이 시그널링되는 경우, 다른 크로마 성분 오프셋은 비트 오버헤드를 줄이기 위기 위해 플러스 또는 마이너스 부호, 또는 가중화를 사용함으로써 도출될 수 있다.
몇몇 실시예에서, 비디오 신호를 수신하는 것(910)은, CCSAO를 사용하여 비디오 신호를 디코딩하는 방법이 시퀀스 파라미터 세트(sequence parameter set, SPS)의 비디오 신호에 대해 인에이블되어 있는지 여부를 지시하는 신택스 요소를 수신하는 것을 포함한다. 몇몇 실시예에서, cc_sao_enabled_ag는 CCSAO가 시퀀스 레벨에서 인에이블되어 있는지 여부를 지시한다.
몇몇 실시예에서, 비디오 신호를 수신하는 것(910)은, CCSAO를 사용하여 비디오 신호를 디코딩하는 방법이 슬라이스 레벨 상에서 제2 성분에 대하여 인에이블되어 있는지 여부를 지시하는 신택스 요소를 수신하는 것을 포함한다. 몇몇 실시예에서, slice_cc_sao_cb_ag 또는 slice_cc_sao_cr_ag는 CCSAO가 Cb 또는 Cr에 대한 개개의 슬라이스에서 인에이블되어 있는지 여부를 지시한다.
몇몇 실시예에서, 제2 성분과 연관된 복수의 오프셋을 수신하는 것(920)은, 상이한 코딩 트리 유닛(CTU)에 대한 상이한 오프셋을 수신하는 것을 포함한다. 몇몇 실시예에서, CTU에 대하여, cc_sao_offset_sign_flag는 오프셋에 대한 부호를 지시하고, cc_sao_offset_abs는 현재 CTU의 CCSAO Cb 및 Cr 오프셋 값을 지시한다.
몇몇 실시예에서, 제2 성분과 연관된 복수의 오프셋을 수신하는 것(920)은, CTU의 수신된 오프셋이 CTU의 이웃하는 CTU 중 하나의 오프셋과 동일한지 여부를 지시하는 신택스 요소를 수신하는 것을 포함하며, 여기서 이웃하는 CTU는 왼쪽 또는 상단의 이웃하는 CTU이다. 예를 들어, cc_sao_merge_up_flag는 CCSAO 오프셋이 왼쪽 또는 위쪽 CTU로부터 병합되는지 여부를 지시한다.
몇몇 실시예에서, 비디오 신호는 제3 성분을 더 포함하고, CCSAO를 사용하여 비디오 신호를 디코딩하는 방법은 제3 성분과 연관된 제2 복수의 오프셋을 수신하는 것; 제1 성분의 특성 측정을 활용하여 제3 성분과 연관된 제2 분류 카테고리를 획득하는 것; 제2 분류 카테고리에 따라 제3 성분에 대한 제2 복수의 오프셋으로부터 제3 오프셋을 선택하는 것; 및 선택된 제3 오프셋에 기초하여 제3 성분을 수정하는 것을 더 포함한다.
도 11은 본 개시의 몇몇 구현에 따라, 모든 동일 위치에 있는 루마/크로마 샘플 및 이웃하는 (백색) 루마/크로마 샘플이 CCSAO 분류에 공급될 수 있음을 나타낸 샘플 프로세스의 블록도이다. 도 6a, 도 6b, 및 도 11은 CCSAO 분류의 입력을 보여준다. 도 11에서, 현재 크로마 샘플은 1104이고, 교차 성분 동일 위치에 있는(cross-component collocated) 크로마 샘플은 1102이고, 동일 위치에 있는 루마 샘플은 1106이다.
몇몇 실시예에서, 분류자의 예(C0)는 분류를 위해 아래의 도 12a에서 동일 위치에 있는 루마 또는 크로마 샘플 값(Y0)(도 6b 및 도 6c에서의 Y4/U4/V4)을 사용한다. band_num은 루마 또는 크로마 동적 범위의 균등하게 분할된 대역의 수라고 하고, bit_depth는 시퀀스 비트 심도라고 하면, 현재 크로마 샘플에 대한 클래스 인덱스의 예는 다음과 같다:
Class (C0) = (Y0 * band_num) >> bit_depth
몇몇 실시예에서, 분류는 예를 들어, 다음과 같은 라운딩(rounding)을 고려한다:
Class (C0) = ((Y0 * band_num) + (1 << bit_depth)) >> bit_depth
몇몇 band_num 및 bit_depth의 예는 아래의 표 3에 열거되어 있다. 표 3은 대역의 수가 각각의 분류 예에 대해 상이한 경우에 3가지 분류 예를 보여준다.
몇몇 실시예에서, 분류자는 C0 분류에 상이한 루마 샘플 포지션을 사용한다. 도 10a는 본 개시의 몇몇 구현에 따라, C0 분류에 상이한 루마(또는 크로마) 샘플 포지션을 사용하는, 예를 들어, C0 분류에 Y0가 아닌 이웃하는 Y7을 사용하는 분류자를 도시하는 블록도이다.
몇몇 실시예에서, 상이한 분류자들이 시퀀스 파라미터 세트(SPS)/적응 파라미터 세트(adaptation parameter set, APS)/픽처 파라미터 세트(picture parameter set, PPS)/픽처 헤더(picture header, PH)/슬라이스 헤더(slice header, SH)/영역(region)/코딩 트리 유닛(CTU)/코딩 유닛(CU)/서브블록/샘플 레벨에서 스위칭될 수 있다. 예를 들어, 도 10에서는, 아래의 표 4에서 나타낸 바와 같이, POC0에는 Y0을 사용하지만, POC1에는 Y7을 사용한다.
몇몇 실시예에서, 도 10b는 본 개시의 몇몇 구현에 따라, 루마 후보에 대한 상이한 형상의 몇몇 예를 나타낸다. 예를 들어, 형상에는 제약이 적용될 수 있다. 몇몇 사례에서, 루마 후보의 총 수는 도 10b의 (b), (c), (d)에서 도시된 바와 같이, 2의 거듭제곱이어야 한다. 몇몇 사례에서, 루마 후보의 수는 도 10b의 (a), (c), (d), (e)에서 도시된 바와 같이, (중심에 있는) 크로마 샘플에 대해 수평 및 수직 대칭적이어야 한다. 몇몇 실시예에서, 2의 거듭제곱이라는 제약 및 대칭적이라는 제약은 또한 크로마 후보에도 적용될 수 있다. 도 6b 및 도 6c의 U/V 파트는 대칭적 제약에 대한 일례를 도시한다. 몇몇 실시예에서, 상이한 색상 포맷은 상이한 분류자 "제약"을 가질 수 있다. 예를 들어, 420 색상 포맷은 도 6b 및 도 6c에서 도시된 바와 같이, 루마/크로마 후보 선택(3×3 형상으로부터 하나의 후보가 선택됨)을 사용하지만, 444 색상 포맷은 루마 및 크로마 후보 선택을 위해 도 10b의 (f)를 사용하고, 422 색상 포맷은 루마에 대해 도 10b의 (g)(2개의 크로마 샘플이 4개의 루마 후보를 공유함)를 사용하고, 크로마 후보에 대해 도 10b의 (f)를 사용한다.
몇몇 실시예에서, C0 포지션과 C0 band_num은 조합될 수 있고 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 스위칭될 수 있다. 상이한 조합은 아래의 표 5에서 나타낸 바와 같이 상이한 분류자일 수 있다.
몇몇 실시예에서, 동일 위치에 있는 루마 샘플 값(Y0)은 동일 위치에 있는 루마 샘플 및 이웃하는 루마 샘플을 가중화하여 획득된 값(Yp)으로 대체된다. 도 12a는 본 개시의 몇몇 구현에 따라, 동일 위치에 있는 루마 샘플 값을, 동일 위치에 있는 루마 샘플 및 이웃하는 루마 샘플을 가중화하여 획득된 값으로 대체하는 것에 의한 예시적인 분류자를 나타낸다. 동일 위치에 있는 루마 샘플 값(Y0)은 이웃하는 루마 샘플을 가중화하여 획득된 위상 보정된 값(phase corrected value)(Yp)으로 대체될 수 있다. 상이한 Yp는 상이한 분류자일 수 있다.
몇몇 실시예에서, 상이한 Yp는 상이한 크로마 포맷에 적용된다. 예를 들어, 도 12a에 도시된 바와 같이, 도 12a의 (a)의 Yp는 420 크로마 포맷에 사용되고, 도 12a의 (b)의 Yp는 422 크로마 포맷에 사용되고, Y0은 444 크로마 포맷에 사용된다.
몇몇 실시예에서, 다른 분류자(C1)는 동일 위치에 있는 루마 샘플(Y0) 및 이웃하는 8개의 루마 샘플의 비교 점수 [-8, 8]이고, 이것은 아래에 나타낸 바와 같이 총 17개의 클래스를 산출한다.
초기 클래스 (C1) = 0, 이웃하는 8개의 루마 샘플에 대한 루프(Yi, i=1 내지 8)
if Y0 > Yi Class += 1
else if Y0 < Yi Class -= 1
몇몇 실시예에서, C1 예는 임계값 th가 0인 다음 함수와 같다.
여기서 Index2ClassTable은 룩업 테이블(look up table, LUT)이고, C는 현재 샘플 또는 동일 위치에 있는 샘플이고, P1 내지 P8은 이웃하는 샘플이다.
몇몇 실시예에서, C4 분류자와 마찬가지로, 차이를 분류(양자화)하는 것을 돕기 위해 하나 이상의 임계값이 미리 정의될 수 있거나(예컨대, LUT에 유지됨) SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다.
몇몇 실시예에서, 변동(C1')은 비교 점수 [0, 8]만을 카운팅하고, 이것은 8개의 클래스를 산출한다. (C1, C1')은 분류자 그룹이고, PH/SH 레벨 플래그는 C1과 C1' 사이를 스위칭하도록 시그널링될 수 있다.
초기 클래스 (C1') = 0, 이웃하는 8개의 루마 샘플에 대한 루프(Yi, i=1 내지 8)
if Y0 > Yi Class += 1
몇몇 실시예에서, 변동(C1s)은 M개의 이웃하는 샘플 중 이웃하는 N개를 선택적으로 사용하고 있다. 어느 이웃하는 샘플이 비교 점수를 카운팅하는 데 선택되는지를 지시하기 위해, M비트 비트마스크가 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다. 도 6b를 루마 분류자에 대한 예로서 사용하면 다음과 같다: 8개의 이웃하는 루마 샘플이 후보이고, 8비트 비트마스크 (01111110)이 PH에서 시그널링되어, Y1 내지 Y6의 6개 샘플이 선택된다는 것을 지시하므로, 비교 점수는 [-6, 6]에 있고, 이것은 13개의 오프셋을 산출한다. 선택적인 분류자 C1s는 오프셋 시그널링 오버헤드와 분류 그래뉼래러티(classification granularity) 사이의 절충(trade-off)을 위한 더 많은 선택권을 인코더에 부여한다.
C1s과 유사하게, (C1의) 변동은 비교 점수 [0, +N]만을 카운팅하고 있고, 이전의 비트마스크 01111110 예는 [0, 6]에서의 비교 점수를 부여하며, 이것은 7개의 오프셋을 산출한다.
몇몇 실시예에서, 일반 분류자(general classifier)를 산출하기 위해 상이한 분류자들이 조합된다. 예를 들어, 상이한 픽처(상이한 POC 값)에 대해, 아래의 표 6-1에 나타낸 상이한 분류자가 적용된다.
몇몇 실시예에서, 다른 분류자의 예(C3)는 표 6-2에 나타낸 바와 같이 분류를 위해 비트마스크(bitmask)를 사용하고 있다. 분류자를 지시하기 위해 10비트 비트마스크가 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링된다. 예를 들어, 비트마스크 11 1100 0000은, 주어진 10비트 루마 샘플 값에 대해, 최상위 비트(MBS) 4비트만 분류에 사용되며, 그것이 총 16개의 클래스를 산출한다는 것을 의미한다. 다른 예의 비트마스크 10 0100 0001은, 3비트만 분류에 사용되며, 그것이 총 8개의 클래스를 산출한다는 것을 의미한다.
몇몇 실시예에서, 비트마스크 길이(N)은 고정될 수 있거나 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 스위칭될 수 있다. 예를 들어, 10비트 시퀀스에 대해, 4비트 비트마스크 1110은 픽처의 PH에서 시그널링되고, MSB 3비트 b9, b8, b7이 분류에 사용된다. 다른 예는 LSB의 4비트 비트마스크 0011이고, b0, b1이 분류에 사용된다. 비트마스크 분류자는 루마 또는 크로마 분류에 적용될 수 있다. 비트마스크 N에 MSB를 사용할 것인지 LSB를 사용할 것인지 여부는 고정될 수 있거나 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 스위칭될 수 있다.
몇몇 실시예에서, 루마 포지션과 C3 비트마스크는 조합될 수 있고 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 스위칭될 수 있다. 상이한 조합은 상이한 분류자일 수 있다.
몇몇 실시예에서, 비트마스크 제한의 "1의 최대 수"는 오프셋의 대응하는 수를 제한하기 위해 적용될 수 있다. 예를 들어, 비트마스크의 "1의 최대 수"를 SPS에서 4로 제한하면, 시퀀스에서의 최대 오프셋은 16이 된다. 상이한 POC에서의 비트마스크는 상이할 수 있지만, "1의 최대 수"는 4를 초과해서는 안된다(총 클래스는 16을 초과해서는 안된다). "1의 최대 수" 값은 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있고 스위칭될 수 있다.
몇몇 실시예에서, 도 11에서 도시된 바와 같이, 다른 교차 성분 크로마 샘플, 예를 들어, 크로마 샘플(1102) 및 그것의 이웃하는 샘플은 또한, 예컨대, 현재 크로마 샘플(1104)에 대한 CCSAO 분류에 공급된다. 예를 들어, Cr 크로마 샘플은 CCSAO Cb 분류에 공급될 수 있다. Cb 크로마 샘플은 CCSAO Cr 분류에 공급될 수 있다. 교차 성분 크로마 샘플의 분류자는 루마 교차 성분 분류자와 동일할 수 있거나, 본 개시에 기재된 바와 같이 그 자신의 분류자를 가질 수 있다. 2개의 분류자는 조합되어 현재 크로마 샘플을 분류하기 위한 공동 분류자(joint classifier)를 형성할 수 있다. 예를 들어, 교차 성분 루마 샘플과 크로마 샘플을 조합하는 공동 분류자는 아래의 표 6-3에서 나타낸 바와 같이 총 16개의 클래스를 산출한다.
전술한 모든 분류자(C0, C1, C1', C2, C3)는 조합될 수 있다. 예를 들어, 아래의 표 6-4를 참조한다.
몇몇 실시예에서, 분류자의 예(C2)는 동일 위치에 있는 루마 샘플과 이웃하는 루마 샘플의 차이(Yn)를 사용한다. 도 12a의 (c)는 비트 심도가 10일 때, [-1024, 1023]의 동적 범위를 가지는 Yn의 예를 도시한다. C2 band_num가 Yn 동적 범위의 균등하게 분할된 대역의 수라고 하면,
Class (C2) = (Yn + (1 << bit_depth) * band_num) >> (bit_depth + 1).
몇몇 실시예에서, C0와 C2를 조합하여 일반 분류자를 산출한다. 예를 들어, 상이한 픽처(상이한 POC)에 대해, 상이한 분류자가 아래의 표 7에 나타낸 바와 같이 적용된다.
몇몇 실시예에서는 전술한 모든 분류자(C0, C1, C1', C2)가 조합된다. 예를 들어, 상이한 픽처(상이한 POC)에 대해, 상이한 분류자가 아래의 표 8-1에 나타낸 바와 같이 적용된다.
몇몇 실시예에서, 분류자의 예(C4)는 아래의 표 8-2에 나타낸 바와 같이, 분류에 CCSAO 입력 값과 보상될 샘플 값의 차이를 사용한다. 예를 들어, CCSAO가 ALF 스테이지에서 적용되는 경우에, 사전 ALF(pre-ALF)과 사후 ALF(post-ALF)의 현재 성분의 샘플 값의 차이가 분류에 사용된다. 차이를 분류(양자화)하는 것을 돕기 위해, 하나 이상의 임계값이 미리 정의될 수 있거나(예컨대, 룩업 테이블(LUT)에 유지됨), SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다. C4 분류자는 C0 Y/U/V bandNum과 조합되어 공동 분류자(예를 들어, 표 8-2에 나타낸 바와 같은 POC1 예)를 형성할 수 있다.
몇몇 실시예에서, 다른 코딩 모드는 재구축 이미지에 다른 왜곡 통계를 도입할 수 있기 때문에 분류자의 예(C5)는 서브블록 분류를 돕기 위해 "코딩 정보"를 사용한다. CCSAO 샘플은 그 샘플의 이전 코딩 정보에 의해 분류되고, 코딩 정보의 조합은 예를 들어, 아래의 표 8-3에서 나타낸 바와 같이, 분류자를 형성할 수 있다. 아래의 도 30은 C5에 대한 코딩 정보의 상이한 스테이지의 다른 예를 도시한다.
몇몇 실시예에서, 분류자의 예(C6)는 YUV 색상 변환된 값을 분류에 사용한다. 예를 들어, 현재 Y 성분을 분류하기 위해, 1/1/1 동일 위치에 있는 Y/U/V 샘플 또는 이웃하는 Y/U/V 샘플이 선택되어 RGB로 색상 변환되고, C3 bandNum을 사용하여 R 값을 양자화하여 현재 Y 성분 분류자가 되도록 한다.
몇몇 실시예에서, 분류자의 예(C7)는 C0/C3 및 C6의 일반화된 버전으로 간주될 수 있다. 현재 성분 C0/C3 bandNum 분류를 도출하기 위해, 동일 위치에 있는 샘플/현재 샘플/ 및 이웃하는 샘플의 3가지 색상 성분 모두가 사용된다. 예를 들어, 현재 U 샘플을 분류하기 위해, 동일 위치에 Y/V 및 이웃하는 Y/V, 현재 U 샘플 및 이웃하는 U 샘플이 도 3에서와 같이 사용되며, 이는 다음과 같이 공식화될 수 있다:
여기서 S는 C0/C3 bandNum 분류에 사용될 준비가 된 중간 샘플이고, Rij는 i번째 컴포넌트의 j번째 동일 위치에 있는/이웃하는/현재 샘플이며, i번째 컴포넌트는 Y/U/V 성분일 수 있으며, cij는 미리 정의될 수 있거나 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있는 가중 계수이다.
몇몇 실시예에서, C7의 하나의 특별한 서브세트 사례는 중간 샘플 S를 도출하기 위해 1/1/1 동일 위치에 있거나 이웃하는 Y/U/V 샘플만을 사용할 수 있으며, 이 또한 C6의 특별한 사례로 간주될 수 있다(3가지 성분을 사용하여 색상 변환). S는 C0/C3 bandNum 분류자에 추가로 공급될 수 있다.
classIdx = bandS = (S * bandNumS) >> BitDepth;
몇몇 실시예에서, C0/C3 bandNum 분류자와 마찬가지로, C7은 또한 다른 분류자와 조합되어 공동 분류자를 형성할 수도 있다. 몇몇 예에서, C7은 분류를 위해 동일 위치에 있는 Y/U/V 샘플 및 이웃하는 Y/U/V 샘플을 함께 사용하는 향후의 예와 동일하지 않을 수 있다(Y/U/V 성분 각각에 대한 3가지 성분 공동 bandNum 분류).
몇몇 실시예에서, 한 가지 제약, 즉 cij 시그널링 오버헤드를 줄이고 비트심도(bitdepth) 범위 내에서 S의 값을 제한하기 위해 cij의 합 = 1이 적용될 수 있다. 예를 들어 c00 = (1 - 다른 cij의 합)을 강제한다. 어떤 cij(이 예에서는 c00)가 강제되는지(다른 계수에 의해 도출되는지)는 미리 정의될 수 있거나 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다.
몇몇 실시예에서, 블록 활동도(activity) 분류자가 구현된다. 루마 성분의 경우, 각각의 4×4 블록은 25개 클래스 중 하나로 분류된다. 분류 인덱스 C는 방향성(directionality) D와 활동도 의 양자화된 값에 기초하여 다음과 같이 도출된다:
몇몇 실시예에서, D 및 를 계산하기 위해, 먼저 수평, 수직 및 두 대각선 방향의 기울기가 1-D 라플라시안을 사용하여 계산된다:
여기서 인덱스 i와 j는 4×4 블록 내의 왼쪽 위 샘플의 좌표를 가리키고 R(i,j)는 좌표 (i,j)에서 재구축된 샘플을 지시한다.
몇몇 실시예에서는 블록 분류의 복잡도를 줄이기 위해, 서브샘플링된 1-D 라플라시안 계산이 적용된다. 도 12b는 본 개시의 몇몇 구현에 따라, 서브샘플링된 라플라시안 계산을 나타낸다. 도 12b에 도시된 바와 같이, 모든 방향의 기울기 계산에 동일한 서브샘플링된 포지션이 사용된다.
그런 다음 수평 및 수직 방향의 기울기의 D 최대값과 최소값은 다음과 같이 설정된다:
몇몇 실시예에서, 두 대각선 방향의 기울기의 최대값과 최소값은 다음과 같이 설정된다:
몇몇 실시예에서, 방향성 D의 값을 도출하기 위해, 이 값들이 서로 비교되고 또 두 개의 임계값 t1 및 t2와 비교된다.
단계 1. 가 모두 참이면, D는 0으로 설정된다.
단계 2. 이면, 단계 3에서부터 계속하고; 그렇지 않으면 단계 4에서부터 계속한다.
단계 3. 이면, D는 2로 설정되고; 그렇지 않으면 D는 1로 설정된다.
단계 4. 이면, D는 4로 설정되고; 그렇지 않으면 D는 3으로 설정된다.
몇몇 실시예에서, 활동도 값 는 다음과 같이 계산된다:
몇몇 실시예에서, A는 0 내지 4의 범위로 추가로 양자화되고, 양자화된 값은 로 표시된다.
몇몇 실시예에서, 픽처의 크로마 성분에 대해서는 분류 방법이 적용되지 않는다.
몇몇 실시예에서, 각각의 4×4 루마 블록을 필터링하기 전에, 회전 또는 대각선 및 수직 플리핑(vertical flipping)과 같은 지오메트릭 변환(geometric transformation)이 해당 블록에 대해 계산된 기울기 값에 따라 필터 계수 및 대응하는 필터 클리핑(filter clipping) 값 에 적용된다. 이는 필터 지원 영역 내의 샘플에 이러한 변환을 적용하는 것과 동일하다. ALF가 적용되는 서로 다른 블록의 방향성을 정렬함으로써 그러한 블록들을 더 유사하게 만드는 것이 아이디어이다.
몇몇 실시예에서는 대각선, 수직 플립 및 회전을 포함한, 세 가지 지오메트릭 변환이 도입된다:
대각선:
수직 플립:
회전:
여기서 는 필터의 크기이고 는 계수 좌표여서, 위치 (0,0)은 왼쪽 위 코너에 있고 위치 (K-1,K-1)은 오른쪽 아래 코너에 있도록 한다. 변환은 해당 블록에 대해 계산된 기울기 값에 따라 필터 계수 및 클리핑 값 에 적용된다. 변환과 네 방향의 네 가지 기울기 사이의 관계는 다음 표 8-4에 요약되어 있다.
몇몇 실시예에서, 디코더 측에서, CTB에 대해 ALF가 인에이블되어 있는 경우, CU 내의 각각의 샘플 R(i,j)이 필터링되어, 아래에 나타낸 바와 같이 샘플 값 R'(i,j)를 결과로서 얻는다.
여기서 는 디코딩된 필터 계수를 나타내고, 는 클리핑 함수이며, 는 디코딩된 클리핑 파라미터를 나타낸다. 변수 k와 l은 사이에서 변화하며, 여기서 L은 필터 길이를 나타낸다. 클리핑 함수는 이며, 함수 에 대응한다. 클리핑 연산(clipping operation)은 비선형성을 도입함으로써 현재 샘플 값과 너무 다른 이웃 샘플 값의 영향을 줄여 ALF를 더욱 효율적으로 만든다.
몇몇 실시예에서, 다른 분류자의 예(C8)는 교차 성분/현재 성분 공간 활동도 정보를 분류자로서 사용한다. 위의 블록 활동도 분류자와 유사하게, (k,l)에 위치한 하나의 샘플은 다음에 의해 샘플 활동도를 얻을 수 있다:
(1) N개의 방향 기울기를 계산한다(라플라시안 또는 순방향(forward)/역방향(backward).
(2) N개의 방향 기울기를 합산하여 활동도 A를 얻는다.
(3) A를 양자화(또는 매핑)하여 클래스 인덱스 를 얻는다.
몇몇 실시예에서, 예를 들어 A를 얻기 위한 2방향 라플라시안 기울기 및 를 얻기 위한 미리 정의된 맵 {}
여기서 (BD-6), 또는 B로 표시된 것은 비트 심도와 연관된 미리 정의된 정규화 항(normalization term)이다.
몇몇 실시예에서, A는 다음과 같이 [0, 4]의 범위에 추가로 매핑될 수 있다:
여기서, B, Qn은 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 미리 정의될 수 있거나 시그널링될 수 있다.
몇몇 실시예에서, 현재 성분 분류를 위해 현재 성분 정보만을 사용하는 다른 분류자의 예가 교차 성분 분류로서 사용될 수 있다. 예를 들어, 도 5a 및 표 1에서 나타낸 바와 같이, 루마 샘플 정보 및 eo-class가 EdgeIdx를 도출하고 현재 크로마 샘플을 분류하는 데 사용된다. 교차 성분 분류자로서 또한 사용될 수 있는 다른 "비교차 성분(non-cross-component)" 분류자는 에지 방향(edge direction), 픽셀 세기(pixel intensity), 픽셀 변동(pixel variation), 픽셀 분산(pixel variance), 픽셀 라플라시안 합(sum-of-Laplacian), 소벨 연산자(sobel operator), 콤파스 연산자(compass operator), 고역 통과 필터링된 값(high-pass filtered value), 저역 통과 필터링된 값(low-pass filtered value) 등을 포함한다.
몇몇 실시예에서, 복수의 분류자가 동일한 POC에서 사용된다. 현재 프레임은 수 개의 영역에 의해 분할되고, 각각의 영역은 동일한 분류자를 사용한다. 예를 들어 3개의 상이한 분류자가 POC0에서 사용되고, 어느 분류자(0, 1, 또는 2)가 사용되는지는 아래의 표 9에서 나타낸 바와 같이 CTU 레벨에서 시그널링된다.
몇몇 실시예에서, 복수의 분류자(복수의 분류자는 대안 오프셋 세트라고도 함)의 최대 수는 고정될 수 있거나, SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다. 하나의 예에서, 복수의 분류자의 고정된(미리 정의된) 최대 수는 4이다. 그 경우에, 4개의 상이한 분류자가 POC0에서 사용되며, 어느 분류자(0, 1, 또는 2)가 사용되는지는 CTU 레벨에서 시그널링된다. 절단 유너리(truncated-unary, TU) 코드는 각각의 루마 또는 크로마 CTB에 사용된 분류자를 지시하는 데 사용될 수 있다. 예를 들어, 아래의 표 10에 나타낸 바와 같이, TU 코드가 0일 때: CCSAO가 적용되지 않고; TU 코드가 10일 때: 세트 0이 적용되고; TU 코드가 110일 때, 세트 1이 적용되고; TU 코드가 1110일 때: 세트 2가 적용되며; TU 코드가 1111일 때: 세트 3이 적용된다. 고정 길이 코드(fixed-length code), 골롬 라이스 코드(golomb-rice code), 및 지수 골롬 코드(exponential-golomb code)도 CTB에 대한 분류자(오프셋 세트 인덱스)를 지시하는 데 사용될 수 있다. 3개의 상이한 분류자가 POC1에서 사용된다.
Cb 및 Cr CTB 오프셋 세트 인덱스의 일례는 1280×720 시퀀스 POC0에 대하여 주어진다(CTU 크기가 128×128인 경우에 프레임 내의 CTU의 수는 10×6임). POC0 Cb는 4개의 오프셋 세트를 사용하고, Cr은 1개의 오프셋 세트를 사용한다. 아래의 표 11-1에 나타낸 바와 같이, 오프셋 세트 인덱스가 0일 때: CCSAO가 적용되지 않고; 오프셋 세트 인덱스가 1일 때; 세트 0이 적용되고; 오프셋 세트 인덱스가 2일 때: 세트 1이 적용되고; 오프셋 세트 인덱스가 3일 때: 세트 2가 적용되며; 오프셋 세트 인덱스가 4일 때: 세트 3이 적용된다. 유형은 선택된 동일 위치에 있는 루마 샘플(Yi)의 포지션을 의미한다. 상이한 오프셋 세트는 상이한 유형, band_num, 및 대응하는 오프셋을 가질 수 있다.
몇몇 실시예에서, 동일 위치에 있는/현재 및 이웃하는 Y/U/V 샘플을 공동으로 분류에 사용하는 예가 아래의 표 11-2에 열거되어 있다(각각의 Y/U/V 성분에 대한 3 성분 공동 bandNum 분류). POC0에서, {2,4,1} 오프셋 세트가 각각 {Y, U, V}에 사용된다. 각각의 오프셋 세트는 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 적응적으로 스위칭될 수 있다. 상이한 오프셋 세트는 상이한 분류자를 가질 수 있다. 예를 들어, 현재 Y4 루마 샘플을 분류하기 위해 도 6b 및 도 6c에서 지시하는 후보 포지션(candPos)으로서, Y set0은 {현재 Y4, 동일 위치에 있는 U4, 동일 위치에 있는 V4}를 후보로서 선택하며, 각각 다른 bandNum {Y, U, V} = {16,1,2}를 가진다. 선택된 {Y, U, V 후보의 샘플 값인 {candY, candU, candV}를 사용하면, 총 클래스의 수는 32개이고, 클래스 인덱스 도출은 다음과 같이 나타낼 수 있다:
bandY = (candY * bandNumY) >> BitDepth;
bandU = (candU * bandNumU) >> BitDepth;
bandV = (candV * bandNumV) >> BitDepth;
classIdx = bandY * bandNumU * bandNumV
+ bandU * bandNumV
+ bandV;
몇몇 실시예에서, 공동 분류자의 classIdx 도출은 도출 프로세스를 단순화하기 위해 "or-shift" 형태로서 표현될 수 있다. 예를 들어, max bandNum = {16, 4, 4}
classIdx = (bandY << 4) | (bandU << 2) | bandV
다른 예는 POC1 성분 V set1 분류에 있다. 그 예에서, bandNum = {4,1,2}인 candPos = {이웃하는 Y8, 이웃하는 U3, 이웃하는 V0}이 사용되며, 이는 8개의 클래스를 산출한다.
몇몇 실시예에서, 현재 Y/U/V 샘플 분류에 동일 위치에 있는 Y/U/V 샘플 및 이웃하는 Y/U/V 샘플을 공동으로 사용하는 예가, 예를 들어 아래의 표 11-3에 나타낸 바와 같이 열거된다(각각의 Y/U/V 성분에 대한 3성분 공동 edgeNum(C1s) 및 bandNum 분류). 에지 CandPos는 C1s 분류자에 사용되는 중심 포지션이고, 에지 bitMask는 C1s의 이웃하는 샘플 활성화 지시자이고, edgeNum은 C1s 클래스의 대응하는 수이다. 이 예에서, C1s는 에지 candPos가 항상 Y4(현재/동일 위치에 있는 샘플 포지션)인 Y 분류자에만 적용된다(따라서, edgeNum은 edgeNumY와 동일함). 그러나, C1s는 이웃하는 샘플 포지션으로서 에지 candPos를 갖는 Y/U/V 분류자에 적용될 수 있다.
Y C1s의 비교 점수를 표시하는 diff를 사용하면, classIdx 도출은 다음일 수 있다:
bandY = (candY * bandNumY) >> BitDepth;
bandU = (candU * bandNumU) >> BitDepth;
bandV = (candV * bandNumV) >> BitDepth;
edgeIdx = diff + (edgeNum >> 1);
bandIdx = bandY * bandNumU * bandNumV
+ bandU * bandNumV
+ bandV;
classIdx = bandIdx * edgeNum + edgeIdx;
몇몇 실시예에서, 최대 band_num(bandNumY, bandNumU, 또는 bandNumV)은 고정될 수 있거나 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다. 예를 들어, 디코더 및 각각의 프레임에서 max band_num=16으로 고정하면, 프레임 내의 C0 band_num을 지시하기 위해 4비트가 시그널링된다. 몇몇 다른 최대 band_num 예는 아래의 표 12에 열거되어 있다.
몇몇 실시예에서, 각각의 세트(또는 추가된 모든 세트)에 대한 클래스 또는 오프셋의 최대 수(다수의 분류자를 공동으로 사용하는 조합, 예를 들어, C1s edgeNum * C1 bandNumY * bandNumU * bandNumV)는 고정될 수 있거나, SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다. 예를 들어, max는 추가된 모든 세트에 대하여 class_num=256*4로 고정되고, 인코더 적합성 검사(encoder conformance check) 또는 디코더 규범 검사(decoder normative check)를 사용하여 제약사항을 검사할 수 있다.
몇몇 실시예에서, C0 분류에 대해 제한이 적용될 수 있고, 예를 들어, band_num(bandNumY, bandNumU, 또는 bandNumV)을 2의 거듭제곱 값으로만 제한한다. band_num을 명시적으로 시그널링하는 대신에, 신택스 band_num_shift가 시그널링된다. 디코더는 승산(multiplication)을 회피하기 위해 시프트 연산(shift operation)을 사용할 수 있다. 상이한 band_num_shift가 상이한 성분에 사용될 수 있다.
Class (C0) = (Y0 >> band_num_shift) >> bit_depth
다른 연산 예는 오차를 감소시키기 위해 라운딩을 고려하고 있다.
Class (C0) = ((Y0 + (1 << (band_num_shift - 1))) >> band_num_shift) >> bit_depth
예를 들어, band_num_max (Y, U, 또는 V)가 16인 경우, 가능한 band_num_shift 후보는 표 13에 나타낸 바와 같이, band_num = 1, 2, 4, 8, 16에 대응하는 0, 1, 2, 3, 4이다.
몇몇 실시예에서, Cb 및 Cr에 적용되는 분류자는 상이하다. 모든 클래스에 대한 Cb 및 Cr 오프셋은 별도로 시그널링될 수 있다. 예를 들어, 상이한 시그널링된 오프셋은 이하의 표 14에서 도시된 바와 같이 상이한 크로마 성분에 적용된다.
몇몇 실시예에서, 최대 오프셋 값은 고정되거나, 시퀀스 파라미터 세트(SPS)/적응 파라미터 세트(APS)/픽처 파라미터 세트(PPS)/픽처 헤더(PH)/슬라이스 헤더(SH)/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링된다. 예를 들어, 최대 오프셋은 [-15, 15] 사이에 있다. 상이한 성분은 상이한 최대 오프셋 값을 가질 수 있다.
몇몇 실시예에서, 오프셋 시그널링에는 차동 펄스 코드 변조(differential pulse-code modulation, DPCM)를 사용할 수 있다. 예를 들어, 오프셋 {3, 3, 2, 1, -1}은 {3, 0, -1, -1, -2}로서 시그널링될 수 있다.
몇몇 실시예에서, 오프셋은 다음 픽처/슬라이스의 재사용을 위해 APS 또는 메모리 버퍼 내에 저장될 수 있다. 어느 저장된 이전의 프레임 오프셋이 현재 픽처에 이용되는지를 지시하기 위해 인덱스가 시그널링될 수 있다.
몇몇 실시예에서, Cb와 Cr의 분류자는 동일하다. 모든 클래스에 대한 Cb 및 Cr 오프셋은 예를 들어, 아래의 표 15에 나타낸 바와 같이 공동으로 시그널링될 수 있다.
몇몇 실시예에서, Cb와 Cr의 분류자는 동일할 수 있다. 모든 클래스에 대한 Cb 및 Cr 오프셋은, 예를 들어 아래의 표 16에 나타낸 바와 같이, 부호 플래그 차이(sign flag difference)를 사용하여 공동으로 시그널링될 수 있다. 표 16에 따르면, Cb 오프셋이 (3, 3, 2, -1)일 때, 도출된 Cr 오프셋은 (-3, -3, -2, 1)이다.
몇몇 실시예에서, 부호 플래그는 예를 들어, 아래의 표 17에 나타낸 바와 같이 각각의 클래스에 대해 시그널링될 수 있다. 표 17에 따르면, Cb 오프셋이 (3, 3, 2, -1)일 때, 도출된 Cr 오프셋은 개개의 부호가 있는(signed) 플래그에 따라 (-3, 3, 2, 1)이다.
몇몇 실시예에서, Cb 및 Cr의 분류자는 동일할 수 있다. 모든 클래스에 대한 Cb 및 Cr 오프셋은 예를 들어, 아래의 표 18에 나타낸 바와 같이 가중치 차이를 사용하여 공동으로 시그널링될 수 있다. 가중치(w)는, 예를 들어, +-1/4, +-1/2, 0, +-1, +-2, +-4...등이 한정된 표에서 선택될 수 있으며, 여기서, |w|는 2의 거듭제곱 값만을 포함한다. 표 18에 따르면, Cb 오프셋이 (3, 3, 2, -1)일 때, 도출된 Cr 오프셋은 개개의 부호가 있는 플래그에 따라 (-6, -6, -4, 2)이다.
몇몇 실시예에서, 가중치는, 예를 들어 아래의 표 19에 나타낸 바와 같이 각각의 클래스에 대해 시그널링될 수 있다. 표 19에 따르면, Cb 오프셋이 (3, 3, 2, -1)일 때, 도출된 Cr 오프셋은 개개의 부호가 있는 플래그에 따라 (-6, 12, 0, -1)이다.
몇몇 실시예에서, 복수의 분류자가 동일한 POC에서 사용되는 경우, 상이한 오프셋 세트는 개별적으로 또는 공동으로 시그널링된다.
몇몇 실시예에서, 이전에 디코딩된 오프셋은 미래 프레임의 사용을 위해 저장될 수 있다. 오프셋 시그널링 오버헤드를 감소시키기 위해, 인덱스가 시그널링되어 이전에 디코딩된 어느 오프셋 세트가 현재 프레임에 사용되는지를 지시할 수 있다. 예를 들어, POC0 오프셋은 아래의 표 20에 나타낸 바와 같이, 오프셋 세트 idx = 0의 시그널링을 사용하여 POC2에 의해 재사용될 수 있다.
몇몇 실시예에서, Cb 및 Cr에 대한 재사용 오프셋 세트 idx는, 예를 들어 아래의 표 21에 나타낸 바와 같이 상이할 수 있다.
몇몇 실시예에서, 오프셋 시그널링은 시그널링 오버헤드를 감소시키기 위해, 시작(start) 및 길이(length)를 포함하는 추가 신택스를 사용할 수 있다. 예를 들어, band_num=256일 때, band_idx=37∼44의 오프셋만이 시그널링된다. 아래의 표22-1의 예에서, 시작과 길이 둘 다의 신택스는 band_num 비트와 매칭되어야 하므로 8비트 고정 길이로 코딩된다.
몇몇 실시예에서, CCSAO가 모든 YUV 3 성분에 적용되는 경우, 동일 위치에 있는 YUV 샘플 및 이웃하는 YUV 샘플이 분류에 공동으로 사용될 수 있고, Cb/Cr에 대한 모든 전술한 오프셋 시그널링 방법은 Y/Cb/Cr로 확장될 수 있다. 몇몇 실시예에서, 상이한 성분 오프셋 세트는 개별적으로 저장되고 사용될 수 있거나(각각의 성분이 자신의 저장된 세트를 가짐) 또는 공동으로 저장되고 사용될 수 있다(각각의 성분이 저장된 동일한 것을 공유/재사용함). 아래의 표 22-2에 개별 세트의 예를 나타낸다.
몇몇 실시예에서, 시퀀스 비트 심도가 10(또는 특정 비트 심도)보다 높은 경우, 오프셋은 시그널링 전에 양자화될 수 있다. 디코더 측에서, 디코딩된 오프셋은 아래의 표 23-1에 나타낸 바와 같이, 적용되기 전에 역양자화(dequantize)된다. 예를 들어, 12비트 시퀀스의 경우, 디코딩된 오프셋은 2만큼 왼쪽으로 시프트(역양자화)된다.
몇몇 실시예에서, 오프셋은 CcSaoOffsetVal=( 1 - 2 * ccsao_offset_sign_flag ) * (ccsao_offset_abs << ( BitDepth - Min( 10, BitDepth ) ) )로서 계산될 수 있다.
몇몇 실시예에서, 필터 강도 개념(filter strength concept)이 본 명세서에서 추가로 도입된다. 예를 들어, 분류자 오프셋은 샘플에 적용되기 전에 추가로 가중화될 수 있다. 가중치(w)는 2의 거듭제곱 값의 표에서 선택될 수 있다. 예를 들어, +-1/4, +-1/2, 0, +-1, +-2, +-4...등이며, 여기서 |w|는 2의 거듭제곱 값만을 포함한다. 가중치 인덱스는 SPS/APS/PPS/PH/SH/영역(세트)/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다. 양자화된 오프셋 시그널링은 이 가중치 적용의 서브세트로 간주될 수 있다. 재귀적 CCSAO가 도 6d에 도시된 바와 같이 적용되는 경우, 유사한 가중치 인덱스 메커니즘이 첫 번째 및 두 번째 스테이지 간에 적용될 수 있다.
몇몇 예에서, 상이한 분류자에 대한 가중치 부여: 복수의 분류자의 오프셋이 가중치 조합으로 동일한 샘플에 적용될 수 있다. 유사한 가중치 인덱스 메커니즘이 위에서 언급된 바와 같이 시그널링될 수 있다. 예를 들어,
offset_final = w * offset_1 + (1-w) * offset_2, 또는
offset_final = w1 * offset_1 + w2 * offset_2 + ...
몇몇 실시예에서, PH/SH에서 CCSAO 파라미터를 직접적으로 시그널링하는 대신에, 이전에 사용된 파라미터/오프셋은 다음 픽처/슬라이스 재사용을 위해 적응 파라미터 세트(APS) 또는 메모리 버퍼에 저장될 수 있다. 이전에 저장된 어느 프레임 오프셋이 현재 픽처/슬라이스에 사용되는지를 지시하기 위해 인덱스가 PH/SH에서 시그널링될 수 있다. CCSAO 이력 오프셋을 유지하기 위해 새로운 APS ID가 생성될 수 있다. 다음의 표는 도 6i, candPos, 및 bandNum{Y,U,V} = {16,4,4}를 사용하는 하나의 예를 보여준다. 몇몇 예에서, candPos, bandNum, 오프셋 시그널링 방법은 고정 길이 코드(fixed length code, FLC) 또는 다른 방법, 예컨대 절단 유너리(TU) 코드, 차수 k의 지수 골롬 코드(exponential-golomb code with order k, EGk), 부호가 있는 EG0(SLVC), 또는 부호가 없는 EG0(ULVC) 같은 것일 수 있다. 이 사례에서 sao_cc_y_class_num(또는 cb, cr)은 sao_cc_y_band_num_y * sao_cc_y_band_num_u * sao_cc_y_band_num_v(또는 cb, cr)와 동일하다. ph_sao_cc_y_aps_id는 이 픽처/슬라이스에서 사용되는 파라미터 인덱스이다. cb 및 cr 성분은 동일한 시그널링 로직을 따를 수 있음에 유의한다.
aps_adaptation_parameter_set_id는 다른 신택스 요소에 의한 참조를 위해 APS에 대한 식별자를 제공한다. aps_params_type이 CCSAO_APS와 동일한 경우, aps_adaptation_parameter_set_id의 값은 (예를 들어) 0 내지 7의 범위 내에 있을 것이다.
ph_sao_cc_y_aps_id는 현재 픽처 내에서 슬라이스의 Y 색상 성분이 참조하는 CCSAO APS의 aps_adaptation_parameter_set_id를 지정한다. ph_sao_cc_y_aps_id가 존재하는 경우, 다음이 적용된다: CCSAO_APS와 동일한 aps_params_type 및 ph_sao_cc_y_aps_id와 동일한 aps_adaptation_parameter_set_id를 갖는 APS NAL 유닛의 sao_cc_y_set_signal_flag의 값은 1과 동일할 것이고; CCSAO_APS와 동일한 aps_params_type 및 ph_sao_cc_y_aps_id와 동일한 aps_adaptation_parameter_set_id를 갖는 APS 네트워크 추상화 계층(network abstraction layer, NAL)의 TemporalId는 현재 픽처의 TemporalId 이하일 것이다.
몇몇 실시예에서는 APS 업데이트 메커니즘을 본 명세서에서 설명한다. APS 오프셋 세트의 최대 개수는 미리 정의될 수 있거나 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다. 상이한 구성요소는 상이한 최대 개수 제한을 가질 수 있다. APS 오프셋 세트가 풀(full) 상태이면, 새로 추가된 오프셋 세트는 선입선출(first in, first out, FIFO), 후입선출(last in, first out, LIFO) 또는 최근에 가장 적게 사용된 것을 교체하는 LRU(Least-Recently-Used) 메커니즘을 사용하여 기존의 저장된 오프셋 하나를 교체할 수 있거나, 어느 APS 오프셋 세트를 교체해야 하는지 지시하는 인덱스 값이 수신된다. 몇몇 예에서, 선택된 분류자가 candPos/에지 정보/코딩 정보… 등으로 구성되는 경우, 모든 분류자 정보는 APS 오프셋 세트의 일부로 간주될 수 있으며 또한 그 오프셋 값과 함께 APS 오프셋 세트에 저장될 수 있다. 몇몇 사례에서, 위에서 언급한 업데이트 메커니즘은 미리 정의되거나 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다.
몇몇 실시예에서, "프루닝(pruning)"이라고 하는 제약이 적용될 수 있다. 예를 들어, 새로 수신된 분류자 정보 및 오프셋은 (동일한 컴포넌트의, 또는 서로 다른 컴포넌트에 걸쳐) 저장된 APS 오프셋 세트 중 어느 것과도 동일할 수 없다.
몇몇 예에서, C0 candPos/bandNum 분류자가 사용되는 경우, APS 오프셋 세트의 최대 개수는 Y/U/V당 4개이고, FIFO 업데이트가 Y/V에 사용되며, 업데이트를 지시하는 idx는 U에 사용된다.
몇몇 실시예에서, 프루닝 기준은 인코더 절충(trade-off)에 보다 유연한 방식을 제공하기 위해 완화될 수 있다: 예를 들어, 프루닝 연산을 적용하는 경우에 N개의 오프셋이 달라지는 것을 허용(예컨대, N=4); 다른 예에서 프루닝 연산을 적용하는 경우에 각각 오프셋의 값에 대한 차이("thr"로 표시)를 허용(예컨대, +-2).
몇몇 실시예에서, 2가지 기준이 동시에 또는 개별적으로 적용될 수 있다. 각 기준의 적용 여부는 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 미리 정의되거나 스위칭된다.
몇몇 실시예에서, N/thr은 미리 정의되거나 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 스위칭될 수 있다.
몇몇 실시예에서, FIFO 업데이트는 (1) 위의 예에서와 같이 이전에 왼쪽 세트 idx로부터의 순환적 업데이트(모두 업데이트되는 경우, 세트 0에서 다시 시작됨), (2) 항상 세트 0에서부터의 업데이트일 수 있다. 몇몇 예에서, 업데이트는 새로운 오프셋 세트를 수신하는 경우, (예에서와 같이) PH 또는 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에 있을 수 있다.
LRU 업데이트의 경우, 디코더는 SPS/APS/픽처 그룹(GOP) 구조별/PPS/PH/SH/영역/cTU/CU/서브블록/샘플 레벨에서 리프레시될 수 있는 "총 오프셋 세트 사용 카운트"를 카운팅하는 카운트 테이블을 유지한다. 새로 수신된 오프셋 세트는 APS에서 최근에 가장 적게 사용된 오프셋 세트를 교체한다. 저장된 2개의 오프셋 세트가 동일한 카운트 값을 갖는 경우, FIFO/LIFO를 사용할 수 있다. 예를 들어, 아래의 표 23-4에서 성분 Y를 참조하기 바란다.
몇몇 실시예에서, 상이한 성분은 상이한 업데이트 메커니즘을 가질 수 있다.
몇몇 실시예에서, 상이한 성분(예를 들어, U/V)는 동일한 분류자를 공유할 수 있다(동일한 candPos/에지 정보/코딩 정보/오프셋은 추가로 수정자와 함께 가중치를 가질 수 있음).
몇몇 실시예에서, 상이한 픽처/슬라이스가 사용된 오프셋 세트는 약간의 오프셋 값 차이만 있을 수 있으므로, "패치(patch)" 구현이 오프셋 교체 메커니즘에 사용될 수 있다. 몇몇 실시예에서, "패치" 구현은 차동 펄스 코드 변조(differential pulse-code modulation, DPCM)이다. 예를 들어, 새로운 오프셋 세트(OffsetNew)를 시그널링하는 경우, 오프셋 값은 기존 APS 저장 오프셋 세트(OffsetOld)의 상단(top)에 있을 수 있다. 인코더는 구(old) 오프셋 세트를 업데이트하기 위해 델타 값만을 시그널링할 수 있다(DPCM: OffsetNew=OffsetOld+delta). 표 23-5에 나타낸 바와 같은 다음 예에서, FIFO 업데이트 이외의 선택(LRU, LIFO 또는 업데이트될 세트를 지시하는 인덱스를 시그널링)도 사용할 수 있다. YUV 성분은 동일한 업데이트 메커니즘을 가질 수 있거나 상이한 업데이트 메커니즘을 사용할 수 있다. 분류자 candPos/bandNum은 표 23-5의 예에서 변경되지 않지만, 세트 분류자의 덮어쓰기(overwriting)는 추가 플래그(플래그=0: 세트 오프셋만 업데이트, 플래그=1: 세트 분류자와 세트 오프셋 둘 다 업데이트)를 시그널링함으로써 지시될 수 있다.
몇몇 실시예에서, DPCM 델타 오프셋 값은 FLC/TU/EGk(차수=0,1,…) 코드로 시그널링될 수 있다. DPCM 시그널링의 인에이블 여부를 지시하는 각각의 오프셋 세트에 대해 하나의 플래그가 시그널링될 수 있다. DPCM 델타 오프셋 값, 또는 새로 추가된 오프셋 값(APS DPCM=0을 인에이블하는 경우, DPCM 없이 직접 시그널링됨)(ccsao_offset_abs)은 타깃 오프셋(CcSaoOffsetVal)에 적용되기 전에 역양자화/매핑될 수 있다. 오프셋 양자화 스텝은 미리 정의될 수 있거나 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다. 예를 들어, 한 가지 방법은 양자화 스텝=2인 오프셋을 직접 시그널링하는 것이다.
CcSaoOffsetVal=( 1 - 2 * ccsao_offset_sign_flag ) * ( ccsao_offset_abs << 1 )
다른 방법은 양자화 스텝=2인 DPCM 시그널링 오프셋을 사용하는 것이다.
CcSaoOffsetVal= CcSaoOffsetVal + ( 1 - 2 * ccsao_offset_sign_flag ) * ( ccsao_offset_abs << 1 )
몇몇 실시예에서, 직접적인 오프셋 시그널링 오버헤드를 줄이기 위해 하나의 제약이 적용될 수 있는데, 예를 들어, 업데이트된 오프셋 값은 구 오프셋 값과 동일한 부호를 가져야 한다. 이러한 추론된 오프셋 부호를 사용함으로써, 새로 업데이트된 오프셋은 부호 플래그를 다시 송신할 필요가 없다(ccsao_offset_sign_flag는 구 오프셋과 동일한 것으로 추론된다).
몇몇 실시예에서, 샘플 처리가 아래에 기술된다. R(x, y)는 CCSAO 이전의 입력 루마 또는 크로마 샘플 값이라 하고, R'(x, y)는 CCSAO 이후의 출력 루마 또는 크로마 샘플 값이라고 하자:
offset = ccsao_offset [R(x, y)의 class_index]
R'(x, y) = Clip3( 0, (1 << bit_depth) - 1, R(x, y) + offset )
위의 식에 따르면, 각각의 루마 또는 크로마 샘플 값 R(x, y)는 현재 픽처 및/또는 현재 오프셋 세트 idx의 지시된 분류자를 사용하여 분류된다. 도출된 클래스 인덱스의 대응하는 오프셋은 각각의 루마 또는 크로마 샘플 값 R(x, y)에 가산된다. 출력 루마 또는 크로마 샘플 값 R'(x, y)를 비트 심도 동적 범위 내에 있도록, 예를 들어, 범위 0 내지 (1 << bit_depth) - 1에 있도록 하기 위해 클립 함수(clip function) Clip 3이 (R(x, y) + offset)에 적용된다.
도 13은 본 개시의 몇몇 구현에 따라, 상이한 클리핑 조합을 갖는 다른 인루프 필터와 함께 CCSAO가 적용되는 것을 나타낸 블록도이다.
몇몇 실시예에서, CCSAO가 다른 루프 필터와 함께 동작되는 경우, 클립 연산(clip operation)은 다음일 수 있다:
(1) 가산 후의 클리핑. 다음 식은 (a) CCSAO가 SAO 및 BIF와 함께 동작되거나, (b) CCSAO가 SAO를 대체하지만 여전히 BIF와 함께 동작되는 예를 보여준다.
(2) 가산 전의 클리핑, BIF와 함께 동작됨. 몇몇 실시예에서, 클립 순서는 스위칭될 수 있다.
(3) 부분적 가산 후의 클리핑
몇몇 실시예에서, 상이한 클리핑 조합은 수정 정밀도(correction precision)와 하드웨어 임시 버퍼 크기(레지스터 또는 SRAM 비트폭) 사이의 상이한 상호 절충을 제공한다.
도 13의 (a)는 SAO/BIF 오프셋 클리핑을 도시한다. 도 13의 (b)는 CCSAO에 대한 하나의 추가적인 비트심도 클리핑을 도시한다. 도 13의 (c)는 SAO/BIF/CCSAO 오프셋을 입력 샘플에 가산한 후의 공동 클리핑을 도시한다. 더 구체적으로, 예를 들어, 도 13의 (a)는 SAO와 상호작용하는 경우의 현재 BIF 설계를 도시한다. SAO 및 BIF로부터의 오프셋이 입력 샘플에 가산되고, 그 후 한 번의 비트 심도 클리핑이 수행된다. 그러나, CCSAO도 SAO 스테이지에 합류하는 경우, 2가지 가능한 클리핑 설계가 선택될 수 있다: (1) CCSAO에 대해 한 번의 추가적인 비트 심도 클리핑의 추가, (2) 도 13의 (b) 및 도 13의 (c)에서 도시된 바와 같이, SAO/BIF/CCSAO 오프셋을 입력 샘플에 가산한 후에 공동 클리핑을 수행하는 하나의 조화된 설계. 몇몇 실시예에서, 전술한 클리핑 설계는 BIF가 루마 샘플에서만 적용되기 때문에 루마 샘플에서만 다르다.
몇몇 실시예에서, 경계 처리가 이하에서 설명된다. 분류에 사용되는 동일 위치에 있는 루마(크로마) 샘플 및 이웃하는 루마(크로마) 샘플 중 어느 샘플이 현재 픽처의 외부에 있는 경우, CCSAO는 현재 크로마(루마) 샘플에 적용되지 않는다. 도 14a는 본 개시의 몇몇 구현에 따라, 분류에 사용되는 동일 위치에 있는 루마(크로마) 샘플 및 이웃하는 루마(크로마) 샘플 중 어느 샘플이 현재 픽처의 외부에 있는 경우에, CCSAO가 현재 크로마(루마) 샘플에 대해 적용되지 않음을 나타낸 블록도이다. 예를 들어, 도 14a의 (a)에서, 분류자가 사용되는 경우, CCSAO는 현재 픽처의 왼쪽 1열(column) 크로마 성분에 적용되지 않는다. 예를 들어, C1'이 사용되는 경우, CCSAO는 도 14a의 (b)에서 도시된 바와 같이, 현재 픽처의 왼쪽 1열 및 상단 1행(row) 크로마 성분에 적용되지 않는다.
도 14b는 본 개시의 몇몇 구현에 따라, 분류에 사용되는 동일 위치에 있는 루마 또는 크로마 샘플 및 이웃하는 루마 또는 크로마 샘플 중 어느 샘플이 현재 픽처의 외부에 있는 경우, CCSAO가 현재 크로마 또는 루마 샘플에 적용되지 않는다는 것을 나타낸 블록도이다. 몇몇 실시예에서, 변형은, 분류에 사용되는 동일 위치에 있는 루마 또는 크로마 샘플 및 이웃하는 루마 또는 크로마 샘플 중 어느 샘플이 현재 픽처의 외부에 있는 경우, 누락된 샘플(missed sample)이 도 14b의 (a)에서 도시된 바와 같이 반복적으로 사용되거나, 누락된 샘플이 도 14b의 (b)에서 도시된 바와 같이 분류를 위한 샘플을 생성하도록 미러 패딩된다(mirror padded)는 것이고, CCSAO는 현재 루마 또는 크로마 샘플에 대해 적용될 수 있다. 몇몇 실시예에서, 본 명세서에서 개시된 디스에이블된/반복적/미러 픽처 경계 처리 방법이 또한, 분류에 사용되는 동일 위치에 있는 루마(크로마) 샘플 및 이웃하는 루마(크로마) 샘플 중 어느 샘플이 현재 서브픽처/슬라이스/타일/패치/CTU/360 가상 경계의 바깥쪽에 있는 경우에 서브픽처/슬라이스/타일/CTU/360 가상 경계에 적용될 수 있다.
예를 들어, 픽처는 하나 이상의 타일 행(tile row) 및 하나 이상의 타일 열(tile column)로 분할된다. 타일은 픽처의 직사각형 영역을 커버하는(cover) 일련의 CTU(a sequence of CTUs)이다.
슬라이스는 픽처의 타일 내에서 정수 개의 완전한 타일 또는 정수 개의 연속적인 완전한 CTU 행으로 구성된다.
서브픽처는 픽처의 직사각형 영역을 집합적으로 커버하는 하나 이상의 슬라이스를 포함한다.
몇몇 실시예에서, 360도 비디오는 구체(sphere) 상에 캡처되고 본질적으로 "경계"가 없으며, 투영된 도메인에서 참조 픽처의 경계 바깥쪽에 있는 참조 샘플은 구형 도메인(spherical domain)에서의 이웃하는 샘플로부터 항상 획득될 수 있다. 복수의 면(face)으로 구성된 투영 포맷의 경우, 어떤 종류의 간결한 프레임 패킹 배치(compact frame packing arrangement)가 사용되더라도, 프레임 패킹된 픽처 내의 2개 이상의 인접한 면 사이에는 불연속성(discontinuity)이 나타난다. VVC에서, 경계를 넘으면 인루프 필터링 동작이 디스에이블되는 수직 및/또는 수평 가상 경계가 도입되며, 그러한 경계의 포지션은 SPS 또는 픽처 헤더에서 시그널링된다. 각각의 연속 면 세트에 대해 하나씩, 2개의 타일을 사용하는 것과 비교하면, 360 가상 경계의 사용은 면 크기가 CTU 크기의 배수일 필요가 없기 때문에 더욱 유연하다. 몇몇 실시예에서, 수직 360 가상 경계의 최대 수는 3이고, 수평 360 가상 경계의 최대 수도 또한 3이다. 몇몇 실시예에서, 2개의 가상 경계 사이의 거리는 CTU 크기 이상이고, 가상 경계 그래뉼래러티(virtual boundary granularity)는 8개의 루마 샘플, 예를 들어, 8×8 샘플 그리드(sample grid)이다.
도 14c는 본 개시의 몇몇 구현에 따라, 분류에 사용되는 대응하는 선택된 동일 위치에 있는 루마 샘플 또는 이웃하는 루마 샘플이 가상 경계에 의해 정의되는 가상 공간의 외부에 있는 경우에 CCSAO가 현재 크로마 샘플에 적용되지 않는다는 것을 나타낸 블록도이다. 몇몇 실시예에서, 가상 경계(VB)는 픽처 프레임 내의 공간을 분리하는 가상 라인이다. 몇몇 실시예에서, 가상 경계(VB)가 현재 프레임에서 적용되는 경우, CCSAO는 가상 경계에 의해 정의되는 가상 공간의 외부의 대응하는 루마 포지션을 선택한 크로마 샘플에 적용되지 않는다. 도 14c는 9개의 루마 포지션 후보를 갖는 C0 분류자에 대한 가상 경계가 있는 예를 도시한다. 각각의 CTU에 대해, 대응하는 선택된 루마 포지션이 가상 경계에 의해 둘러싸인 가상 공간의 외부에 있는 크로마 샘플에 CCSAO는 적용되지 않는다. 예를 들어, 도 14c의 (a)에서, 선택된 Y7 루마 샘플 포지션이 프레임의 하단 측으로부터 4개 픽셀 라인에 위치하는 수평 가상 경계(1406)의 반대편에 위치하는 경우에 CCSAO는 크로마 샘플(1402)에 적용되지 않는다. 예를 들어, 도 14c의 (b)에서, 선택된 Y5 루마 샘플 포지션이 프레임의 오른쪽으로부터 y개 픽셀 라인에 위치하는 수직 가상 경계(1408)의 반대측에 위치하는 경우에 CCSAO는 크로마 샘플(1404)에 적용되지 않는다.
도 15는 본 개시의 몇몇 구현에 따라, 반복적 패딩 또는 미러 패딩이 가상 경계의 바깥쪽에 있는 루마 샘플에 대해 적용될 수 있다는 것을 도시한다. 도 15의 (a)는 반복적 패딩의 일례를 도시한다. 원래의 Y7이 VB(1502)의 하단 측에 위치하는 분류자로 선택되는 경우, 원래의 Y7 루마 샘플 값 대신에, Y4 루마 샘플 값이 분류에 사용된다(Y7 포지션으로 복사됨). 도 15의 (b)는 미러 패딩의 일례를 도시한다. Y7이 VB(1504)의 하단 측에 위치하는 분류자로 선택되는 경우, 원래의 Y7 루마 샘플 값 대신에, Y0 루마 샘플에 대한 Y7 값에 대칭인 Y1 루마 샘플 값이 분류에 사용된다. 패딩 방법은 더 많은 크로마 샘플에 CCSAO를 적용할 가능성을 제공하므로, 더 많은 코딩 이득이 달성될 수 있다.
몇몇 실시예에서, CCSAO에 필요한 라인 버퍼를 감소시키고 경계 처리 조건 확인을 단순화하기 위해 제한이 적용될 수 있다. 도 16은 추가적인 1개의 루마 라인 버퍼, 즉, 현재 VB(1602) 위쪽의 라인 -5의 전체 라인 루마 샘플 전체가, 본 개시의 몇몇 구현에 따라 동일 위치에 있는 이웃하는 루마 샘플 9개 모두가 분류에 사용되는 경우에 필요할 수 있다는 것을 도시한다. 도 10b의 (a)는 분류에 6개 루마 후보만을 사용하는 예를 도시하며, 이 예는 라인 버퍼를 감소시키고, 도 14a 및 도 14b에서의 임의의 추가적인 경계 확인을 필요로 하지 않는다.
몇몇 실시예에서, CCSAO 분류에 루마 샘플을 사용하는 것은 루마 라인 버퍼를 증가시킬 수 있고, 따라서 디코더 하드웨어 구현 비용을 증가시킬 수 있다. 도 17은 본 개시의 몇몇 구현에 따라, VB(1702)를 가로지르는 9개 루마 후보 CCSAO가 추가적인 루마 라인 버퍼 2개를 증가시킬 수 있는 AVS에서의 예시를 도시한다. 가상 경계(VB)(1702) 위쪽의 루마 및 크로마 샘플의 경우, DBF/SAO/ALF는 현재 CTU 행에서 처리된다. VB(1702) 아래쪽의 루마 및 크로마 샘플의 경우, DBF/SAO/ALF는 다음 CTU 행에서 처리된다. AVS 디코더 하드웨어 설계에서, 루마 라인 -4 내지 -1 사전 DBF 샘플, 라인 -5 사전 SAO 샘플, 및 크로마 라인 -3 내지 -1 사전 DBF 샘플, 라인 -4 사전 SAO 샘플은 다음 CTU 행 DBF/SAO/ALF 처리를 위해 라인 버퍼로서 저장된다. 다음 CTU 행을 처리할 때, 라인 버퍼에 없는 루마 및 크로마 샘플은 이용 불가능하다. 그러나, 예를 들어, 크로마 라인 -3 (b) 포지션에서, 크로마 샘플은 다음 CTU 행에서 처리되지만, CCSAO는 분류를 위해 사전 SAO 루마 샘플 라인 -7, -6, 및 -5를 필요로 한다. 사전 SAO 루마 샘플 라인 -7, -6은 라인 버퍼에 없으므로, 이들은 이용 불가능하다. 그리고 사전 SAO 루마 샘플 라인 -7 및 -6을 라인 버퍼에 추가하는 것은 디코더 하드웨어 구현 비용을 증가시킬 것이다. 몇몇 예에서, 루마 VB(라인 -4)과 크로마 VB(라인 -3)는 상이할 수 있다(정렬되지 않음).
도 17과 유사하게, 도 18a는 본 개시의 몇몇 구현에 따라, VB(1802)를 가로지르는 9개 루마 후보 CCSAO가 추가적인 루마 라인 버퍼 1개를 증가시킬 수 있는 VVC에서의 예시를 도시한다. VB는 상이한 표준에서 상이할 수 있다. VVC에서, 루마 VB는 라인 -4이고 크로마 VB는 라인 -2이므로, 9개 후보 CCSAO는 루마 라인 버퍼를 1개 증가시킬 수 있다.
몇몇 실시예에서, 제1 해결 방안에서는, 크로마 샘플의 루마 후보 중 어느 루마 후보가 VB 건너편(현재 크로마 샘플 VB의 바깥쪽)에 있는 경우에 CCSAO는 크로마 샘플에 대해 디스에이블된다. 도 19a 내지 도 19c는 본 개시의 몇몇 구현에 따라, 크로마 샘플의 루마 후보 중 어느 루마 후보가 VB(1902) 건너편 (현재 크로마 샘플 VB의 바깥쪽)에 있는 경우에 CCSAO가 크로마 샘플에 대해 디스에이블된다는 것을 AVS 및 VVC에서 도시한다. 도 14c는 또한, 이 구현의 몇몇 예를 도시한다.
몇몇 실시예에서, 제2 해결책에서는, "VB를 가로지르는(cross VB)" 루마 후보에 대해, VB에 가깝고 VB의 반대편에 있는 루마 라인, 예를 들어, 루마 라인 -4로부터의 CCSAO에 반복적 패딩을 사용한다. 몇몇 실시예에서는, "VB를 가로지르는" 크로마 후보에 대해 VB 아래쪽의 루마 최근방 이웃으로부터의 반복적 패딩을 구현한다. 도 20a 내지 도 20c는 AVS 및 VVC에서, 본 개시의 몇몇 구현에 따라, 크로마 샘플의 루마 후보 중 어느 루마 후보가 VB(2002) 건너편(현재 크로마 샘플 VB의 바깥쪽)에 있는 경우에 크로마 샘플에 대한 반복적 패딩을 사용하여 CCSAO가 인에이블된다는 것을 도시한다. 도 14c의 (a)도 또한, 이 구현에 대한 몇몇 예를 도시한다.
몇몇 실시예에서, 제3 해결방안에서는, "VB를 가로지르는" 루마 후보에 대해 루마 VB 아래로부터의 CCSAO에 미러 패딩을 사용한다. 도 21a 내지 도 21c는 AVS 및 VVC에서, 본 개시의 몇몇 구현에 따라, 크로마 샘플의 루마 후보 중 어느 루마 후보가 VB(2102) 건너편(현재 크로마 샘플 VB의 바깥쪽)에 있는 경우에 크로마 샘플에 대한 미러 패딩을 사용하여 CCSAO가 인에이블된다는 것을 도시한다. 도 14c의 (b) 및 도 14b의 (b)도 또한, 이 구현에 대한 몇몇 예를 도시한다. 몇몇 실시예에서, 제4 해결책에서는, CCSAO 적용에 "양측 대칭 패딩"을 사용한다. 도 22a∼도 22b는 본 개시의 몇몇 구현에 따라, 상이한 CCSAO 형상의 몇몇 예(예를 들어, 9개 루마 후보(도 22a) 및 8개 루마 후보(도 22b))에 대한 양측 대칭 패딩을 사용하여 CCSAO가 인에이블됨을 도시한다. 크로마 샘플의 동일 위치에 있는 중심 루마 샘플(collocated centered luma sample)을 갖는 루마 샘플 세트의 경우, 루마 샘플 세트의 한 변(one side)이 VB(2202) 바깥쪽에 있는 경우, 양측 대칭 패딩이 루마 샘플 세트의 양쪽 변(both side)에 적용된다. 예를 들어, 도 22a에서, 루마 샘플 Y0, Y1, 및 Y2는 VB(2202) 바깥쪽에 있으므로, Y0, Y1, Y2와 Y6, Y7, Y8는 모두 Y3, Y4, Y5를 사용하여 패딩된다. 예를 들어, 도 22b에서, 루마 샘플 Y0은 VB(2202) 바깥쪽에 있으므로, Y0은 Y2를 사용하여 패딩되고, Y7은 Y5를 사용하여 패딩된다.
도 18b는 본 개시의 몇몇 구현에 따라, 동일 위치에 있거나 이웃하는 크로마 샘플이 현재 루마 샘플의 분류에 사용되는 경우, 선택된 크로마 후보가 VB 건너편에 있을 수 있고 추가적인 크로마 라인 버퍼를 필요로 할 수 있다는 예시를 도시한다. 위에서 설명된 바와 유사한 해결방안 1 내지 4를 적용하여 이 문제를 해결할 수 있다.
해결방안 1은 크로마 후보 중 어느 후보가 VB 건너편에 있을 수 있는 경우에 루마 샘플에 대해 CCSAO를 디스에이블하는 것이다.
해결방안 2는 "VB 가로지르는" 크로마 후보에 대해 VB 아래쪽의 가장 가까운 크로마 이웃으로부터의 반복적 패딩을 사용하는 것이다.
해결방안 3은 "VB를 가로지르는" 크로마 후보에 대해 아래쪽의 크로마 VB로부터의 미러 패딩을 사용하는 것이다.
해결방안 4는 "양측 대칭 패딩"을 사용하는 것이다. CCSAO 동일 위치에 있는 크로마 샘플을 중심으로 후보 세트에 경우, 후보 세트의 한 변이 VB의 바깥쪽에 있는 경우, 양측 대칭 패딩이 양쪽 변에 적용된다.
이 패딩 방법은 더 많은 루마 또는 크로마 샘플에 CCSAO를 적용할 가능성을 부여하므로, 더 많은 코딩 이득이 달성될 수 있다.
몇몇 실시예에서, 하단 픽처(또는 슬라이스, 타일, 브릭(brick)) 경계 CTU 행에서, VB 아래쪽 샘플이 현재 CTU 행에서 처리되므로, 위의 특수한 처리(해결방안 1, 2, 3, 4)는 하단 픽처(또는 슬라이스, 타일, 브릭) 경계 CTU 행에서 적용되지 않는다. 예를 들어, 1920×1080의 프레임은 128×128의 CTU로 분할된다. 프레임은 15×9 CTU(라운드 업(round up))를 포함한다. 하단 CTU 행은 15번째 CTU 행이다. 디코딩 프로세스는 CTU 행 단위로, 그리고 각각의 CTU 행에 대해서는 CTU 단위로 이루어진다. 디블록킹은 현재와 다음의 CTU 행 사이의 수평 CTU 경계를 따라 적용되어야 한다. CTB VB는, 하단 4/2 루마/크로마 라인에서, 하나의 CTU 내부에서의, DBF 샘플(VVC의 경우)이 다음 CTU 행에서 처리되고 현재 CTU 행에서 CCSAO에 이용 불가능하기 때문에, 각각의 CTU 행에 대하여 적용된다. 그러나, 픽처 프레임의 하단 CTU 행에서, 하단 4/2 루마/크로마 라인 DBF 샘플은, 다음 CTU 행이 남아 있지 않고 이들이 현재 CTU 행에서 DBF 처리되기 때문에, 현재 CTU 행에서 이용 가능하다.
몇몇 실시예에서, 도 13 내지 도 22에 표시된 VB는 서브픽처/슬라이스/타일/패치/CTU/360 가상 경계의 경계로 대체될 수 있다. 몇몇 실시예에서, 도 13 내지 도 22에서의 크로마 샘플 및 루마 샘플의 포지션은 스위칭될 수 있다. 몇몇 실시예에서, 도 13 내지 도 22에서의 크로마 샘플 및 루마 샘플의 포지션은 제1 크로마 샘플 및 제2 크로마 샘플의 포지션으로 대체될 수 있다. 몇몇 실시예에서, CTU 내부의 ALF VB는 일반적으로 수평일 수 있다. 몇몇 실시예에서, 서브픽처/슬라이스/타일/패치/CTU/360 가상 경계의 경계는 수평 또는 수직일 수 있다.
몇몇 실시예에서, CCSAO에 필요한 라인 버퍼를 감소시키고, 도 16에서 설명된 바와 같은 경계 처리 조건 체크를 단순화하기 위해 제한이 적용될 수 있다. 도 23은 본 개시의 몇몇 구현에 따라, 분류를 위해 한정된 수의 루마 후보를 사용하는 제한을 도시한다. 도 23의 (a)는 분류를 위해 5개 루마 후보만을 사용하는 제한을 도시한다. 도 23의 (b)는 분류를 위해 4개 루마 후보만을 사용하는 제한을 도시한다.
몇몇 실시예에서, 적용된 영역이 구현된다. CCSAO 적용된 영역 유닛은 CTB 기반일 수 있다. 즉, 온/오프(on/off) 제어, CCSAO 파라미터(분류에 사용되는 오프셋, 루마 후보 포지션, band_num, 비트마스크 ... 등, 오프셋 세트 인덱스)는 하나의 CTB에서 동일하다.
몇몇 실시예에서, 적용된 영역은 CTB 경계에 정렬되지 않을 수 있다. 예를 들어, 적용된 영역은 크로마 CTB 경계에 정렬되는 것이 아니라 시프팅된다(shifted). 신택스(온/오프 제어, CCSAO 파라미터)는 각각의 CTB에 대해 여전히 시그널링되지만, 실제로 적용된 영역은 CTB 경계에 정렬되지 않는다. 도 24는 본 개시의 몇몇 구현에 따라, CCSAO 적용된 영역이 CTB/CTU 경계(2406)에 정렬되지 않는다는 것을 도시한다. 예를 들어, 적용된 영역은 크로마 CTB/CTU 경계(2406)에 정렬되지 않지만, 왼쪽 상단의 시프팅된 (4, 4) 샘플은 VB(2408)에 정렬된다. 이러한 정렬되지 않은 CTB 경계 설계는 동일한 디블로킹 파라미터가 각각의 8×8 디블록킹 프로세스 영역에 사용되기 때문에, 디블록킹 프로세스에서 유리하다.
몇몇 실시예에서, CCSAO 적용된 영역 유닛(마스크 크기)는 표 24에 나타낸 바와 같이 여러가지로 다를 수 있다(CTB 크기보다 크거나 작음). 마스크 크기는 상이한 성분에 대해 상이할 수 있다. 마스크 크기는 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 스위칭될 수 있다. 예를 들어, PH에서, 일련의 마스크 온/오프 플래그 및 오프셋 세트 인덱스는 각각의 CCSAO 영역 정보를 지시하기 위해 시그널링된다.
몇몇 실시예에서, CCSAO 적용된 영역 프레임 파티션은 고정될 수 있다. 예를 들어, 프레임을 N개의 영역으로 파티셔닝한다. 도 25는 본 개시의 몇몇 구현에 따라, CCSAO 적용된 영역 프레임 파티션이 CCSAO 파라미터로 고정될 수 있다는 것을 도시한다.
몇몇 실시예에서, 각각의 영역은 그 자신의 영역 온/오프 제어 플래그 및 CCSAO 파라미터를 가질 수 있다. 또한, 영역 크기가 CTB 크기보다 큰 경우, CTB 온/오프 제어 플래그 및 영역 온/오프 제어 플래그 둘 다를 가질 수 있다. 도 25의 (a) 및 (b)는 프레임을 N개의 영역으로 파티셔닝하는 몇몇 예를 도시한다. 도 25의 (a)는 4개 영역의 수직 파티셔닝을 도시한다. 도 25의 (b)는 4개의 영역의 정사각형 파티셔닝을 도시한다. 몇몇 실시예에서, 픽처 레벨 CTE 전부 온 제어 플래그(ph_cc_sao_cb_ctb_control_flag / ph_cc_sao_cr_ctb_control_flag)와 유사하게, 영역 온/오프 제어 플래그가 오프인 경우, CTB 온/오프 플래그가 추가로 시그널링될 수 있다. 그렇지 않은 경우, CTB 플래그를 추가로 시그널링하지 않고서 이 영역 내의 모든 CTB에 대해 CCSAO가 적용된다.
몇몇 실시예에서, 다른 CCSAO 적용된 영역은 동일한 영역 온/오프 제어 및 CCSAO 파라미터를 공유할 수 있다. 예를 들어, 도 25의 (c)에서, 영역 0∼2는 동일한 파라미터를 공유하고, 영역 3∼15는 동일한 파라미터를 공유한다. 도 25의 (c)는 또한, 영역 온/오프 제어 플래그 및 CCSAO 파라미터가 힐버트 스캔 순서(Hilbert scan order)로 시그널링될 수 있다는 것을 도시한다.
몇몇 실시예에서, CCSAO 적용된 영역 유닛은 픽처/슬라이스/CTB 레벨로부터의 쿼드 트리/바이너리 트리/터너리 트리 분할일 수 있다. CTB 분할과 유사하게, 일련의 분할 플래그는 CCSAO 적용된 영역 파티션을 지시하기 위해 시그널링될 수 있다. 도 26은 본 개시의 몇몇 구현에 따라, CCSAO 적용된 영역이 프레임/슬라이스/CTB 레벨로부터 분할된 바이너리 트리(BT)/쿼드 트리(QT)/터너리 트리(TT)일 수 있다는 것을 도시한다.
도 27은 본 개시의 몇몇 구현에 따라, 픽처 프레임 내에서 사용되고 상이한 레벨에서 스위칭되는 복수의 분류자를 나타낸 블록도이다. 몇몇 실시예에서, 복수의 분류자가 하나의 프레임에서 사용되는 경우, 분류자 세트 인덱스를 어떻게 적용할 것인지에 대한 방법은 SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 스위칭될 수 있다. 예를 들어, 4세트의 분류자가 프레임에 사용되며, 아래의 표 25에 나타낸 바와 같이 PH에서 스위칭된다. 도 27의 (a) 및 (c)는 디폴트 고정된 영역 분류자를 도시한다. 도 27의 (b)는 분류자 세트 인덱스가 마스크/CTB 레벨에서 시그널링된다는 것을 도시하고, 여기서, 0은 이 CTB에 대한 CCSAO 오프를 의미하고, 1∼4는 세트 인덱스를 의미한다.
몇몇 실시예에서, 디폴트 영역의 경우, 이 영역 내의 CTB가 디폴트 세트 인덱스를 사용하지 않고(예를 들어, 영역 레벨 플래그가 0임), 이 프레임 내의 다른 분류자 세트를 사용하는 경우에 영역 레벨 플래그가 시그널링될 수 있다. 예를 들어, 디폴트 세트 인덱스가 사용되는 경우, 영역 레벨 플래그는 1이다. 예를 들어, 정사각형 파티션 4개 영역에서, 다음의 분류자 세트가 아래의 표 26-1에 나타낸 바와 같이 사용된다.
도 28은 본 개시의 몇몇 구현에 따라, CCSAO 적용된 영역 파티션이 동적일 수 있고 픽처 레벨에서 스위칭될 수 있다는 것을 나타낸 블록도이다. 예를 들어, 도 28의 (a)는 3개의 CCSAO 오프셋 세트가 이 POC에서 사용되므로(set_num = 3), 픽처 프레임이 3개의 영역으로 수직으로 파티셔닝된다는 것을 도시한다. 도 28의 (b)는 4개의 CCSAO 오프셋 세트가 이 POC에서 사용되므로(set_num = 4), 픽처 프레임이 4개의 영역으로 수평으로 파티셔닝된다는 것을 도시한다. 도 28의 (c)는 3개의 CCSAO 오프셋 세트가 이 POC에서 사용되므로(set_num = 3), 픽처 프레임이 3개의 영역으로 래스터 파티셔닝된다는 것을 도시한다. 각각의 영역은 CTB 온/오프 제어 비트별 저장을 위해 그 자신의 영역 전부 온 플래그를 가질 수 있다. 영역의 수는 시그널링된 픽처 set_num에 따라 달라진다. CCSAO 적용된 영역은 블록의 내부의 코딩 정보(샘플 포지션, 샘플 코딩된 모드, 루프 필터 파라미터 등)에 따른 특정 구역(area)일 수 있다. 예를 들어, 1) CCSAO 적용된 영역은 샘플이 스킵 모드 코딩되는 경우에만 적용될 수 있거나, 2) CCSAO 적용된 영역은 CTU 경계를 따라 N개의 샘플만을 포함하거나, 3) CCSAO 적용된 영역은 프레임 내의 8×8 그리드 상의 샘플만을 포함하거나, 4) CCSAO 적용된 영역은 DBF-필터링된 샘플만을 포함하거나, 5) CCSAO 적용된 영역은 CU 내의 상단 M개 및 왼쪽 N개의 행만을 포함하거나, (6) CCSAO 적용된 영역은 인트라 코딩된 샘플만을 포함하거나, (7) CCSAO 적용된 영역은 cbf=0 블록 내의 샘플만을 포함하거나, (8) CCSAO 적용된 영역은 [N, M]인 블록 QP를 갖는 블록에만 있으며, 여기서, (N, M)은 미리 정의될 수 있거나, SPS/APS/PPS/PH/SH/영역/CTU/CU/서브블록/샘플 레벨에서 시그널링될 수 있다. 교차 성분 코딩 정보가 또한 참작될 수 있고, (9) CCSAO 적용된 영역은 동일 위치에 있는 루마 샘플이 cbf=0 블록 내에 있는 크로마 샘플 상에 있다.
몇몇 실시예에서, 영역 제한이 적용된 코딩 정보를 도입할 것인지 여부는 미리 정의될 수 있거나, 특정된 코딩 정보가 CCSAO 애플리케이션에 포함/제외되는지를 지시하기 위해 SPS/APS/PPS/PH/SH/영역(대안적인 세트마다)/CTU/CU/서브블록/샘플 레벨에서 하나의 제어 플래그를 시그널링할 수 있다. 디코더는 미리 정의된 조건 또는 제어 플래그에 따라 그러한 구역에 대한 CCSAO 처리를 스킵한다. 예를 들어, YUV는 영역 (세트) 레벨에서 스위칭된 상이한 미리 정의된/플래그 제어된 조건을 사용한다. CCSAO 적용 판단은 CU/TU/PU 또는 샘플 레벨에서 있을 수 있다.
다른 예는 쌍방 인에이블링 제약(미리 정의됨)의 전부 또는 일부를 재사용하는 것이다.
몇몇 실시예에서, 일부 특정 구역을 제외하는 것은 CCSAO 통계 수집에서 유리할 수 있다. 오프셋 도출은 엄밀하게 수정이 필요한 구역에 대해 더 정밀하거나 적합할 수 있다. 예를 들어, cbf=0인 블록은 통상적으로, 블록이 완벽하게 예측되어 추가로 수정될 필요가 없을 수 있다는 것을 의미한다. 그러한 블록을 제외하는 것은 다른 구역의 오프셋 도출에서 유리할 수 있다.
상이한 적용된 영역은 상이한 분류자를 사용할 수 있다. 예를 들어, CTU에서, 스킵 모드는 C1을 사용하고, 8×8 그리드는 C2를 사용하고, 스킵 모드 및 8×8 그리드는 C3을 사용한다. 예를 들어, CTU에서, 스킵 모드 코딩된 샘플은 C1을 사용하고, CU 중심에서의 샘플은 C2를 사용하고, CU 중심에서 스킵 모드 코딩되는 샘플은 C3을 사용한다. 도 29는 본 개시의 몇몇 구현에 따라, CCSAO 분류자가 현재 또는 교차 성분 코딩 정보를 고려할 수 있다는 것을 나타낸 도면이다. 예를 들어, 상이한 코딩 모드/파라미터/샘플 포지션은 상이한 분류자를 형성할 수 있다. 상이한 코딩 정보는 조합되어 공동 분류자를 형성할 수 있다. 상이한 구역은 상이한 분류자를 사용할 수 있다. 도 29는 또한, 적용된 영역의 다른 예를 도시한다.
몇몇 실시예에서, 미리 정의된 또는 플래그 제어의 "코딩 정보 제외 구역(coding information excluding area)" 메커니즘은 DBF/Pre-SAO/SAO/BIF/CCSAO/ALF/CCALF/NN 루프 필터(NN loop filter, NNLF), 또는 다른 루프 필터에 사용될 수 있다.
몇몇 실시예에서, 구현되는 CCSAO 신택스는 아래의 표 27에 표시되어 있다. 몇몇 예에서, 각각의 신택스 요소의 이진화는 변경될 수 있다. AVS3에서, 용어 패치(patch)는 슬라이스와 유사하고, 패치 헤더는 슬라이스 헤더와 유사하다. FLC는 고정 길이 코드(fixed length code)를 의미한다. TU는 절단된 유너리 코드(truncated unary code)를 의미한다. EGk는 차수 k인 지수 골롬 코드(exponential-golomb code)를 의미하며, 여기서, k는 고정될 수 있다. SVLC는 부호 있는 EG0을 의미한다. UVLC는 부호 없는 EG0을 의미한다.
상위 레벨(higer-level) 플래그가 오프인 경우, 하위 레벨(lower-level) 플래그는 플래그의 오프 상태로부터 추론될 수 있고, 시그널링될 필요가 없다. 예를 들어, ph_cc_sao_cb_ag가 이 픽처에서 거짓(false)인 경우, ph_cc_sao_cb_band_num_minus1, ph_cc_sao_cb_luma_type, cc_sao_cb_offset_sign_flag, cc_sao_cb_offset_abs, ctb_cc_sao_cb_flag, cc_sao_cb_merge_left_flag, 및 cc_sao_cb_merge_up_flag는 존재하지 않고 거짓인 것으로 추론된다.
몇몇 실시예에서, SPS ccsao_enabled_ag는 아래의 표 28에 표시된 바와 같이 SPS SAO 인에이블된 플래그를 조건으로 한다.
몇몇 실시예에서, ph_cc_sao_cb_ctb_control_flag, ph_cc_sao_cr_ctb_control_flag는 Cb/Cr CTB 온/오프 제어 그래뉼래러티를 인에이블할 것인지 여부를 지시한다. ph_cc_sao_cb_ctb_control_flag, 및 ph_cc_sao_cr_ctb_control_flag가 인에이블되는 경우, ctb_cc_sao_cb_flag 및 ctb_cc_sao_cr_flag는 추가로 시그널링될 수 있다. 그렇지 않은 경우, CTB 레벨에서 ctb_cc_sao_cb_flag 및 ctb_cc_sao_cr_flag를 추가로 시그널링하지 않고, CCSAO가 현재 픽처에서 적용되는지 여부는 ph_cc_sao_cb_ag, ph_cc_sao_cr_ag에 종속된다.
몇몇 실시예에서, ph_cc_sao_cb_type 및 ph_cc_sao_cr_type에 대해, 비트 오버헤드를 감소시키기 위해, 플래그를 추가로 시그널링하여 중심의 동일 위치에 있는 루마 포지션이 크로마 샘플에 대한 분류에 사용되는지(도 10에서의 Y0 포지션)를 구별할 수 있다. 유사하게, cc_sao_cb_type 및 cc_sao_cr_type이 CTB 레벨에서 시그널링되는 경우, 플래그가 동일한 메커니즘으로 추가로 시그널링될 수 있다. 예를 들어, C0 루마 포지션 후보의 수가 9인 경우, cc_sao_cb_type0_flag를 추가로 시그널링하여 중심의 동일 위치에 있는 루마 포지션이 아래의 표 29에 표시된 바와 같이 사용되는지를 구별한다. 중심의 동일 위치에 있는 루마 포지션이 사용되지 않는 경우, cc_sao_cb_type_idc는 나머지 8개의 이웃하는 루마 포지션 중 어느 것이 사용되는지를 지시하는 데 사용된다.
다음의 표 30은 단일(set_num = 1) 또는 복수(set_num > 1)의 분류자가 프레임에서 사용되는 AVS에서의 일례를 보여준다. 신택스 표기는 위에서 사용된 표기로 매핑될 수 있다는 것에 유의한다.
각각의 영역이 그 자신의 세트를 갖는 도 25 또는 도 27과 조합될 경우, 신택스 예는 아래의 표 31에 나타낸 바와 같이 영역 온/오프 제어 플래그(picture_ccsao_lcu_control_flag[compIdx][setIdx])를 포함할 수 있다.
몇몇 실시예에서, 하이 레벨 신택스의 경우, pps_ccsao_info_in_ph_flag 및 gci_no_sao_constraint_flag가 추가될 수 있다.
몇몇 실시예에서, 1인 pps_ccsao_info_in_ph_flag는, CCSAO 필터 정보가 PH 신택스 구조에 존재할 수 있고, PH 신택스 구조를 포함하지 않는 PPS를 참조하는 슬라이스 헤더에 존재하지 않는다는 것을 지정한다. 0인 pps_ccsao_info_in_ph_flag는, CCSAO 필터 정보가 PH 신택스 구조에 존재하지 않고, PPS를 참조하는 슬라이스 헤더에 존재할 수 있음을 지정한다. 존재하지 않는 경우, pps_ccsao_info_in_ph_flag의 값은 0인 것으로 추론된다.
몇몇 실시예에서, 1인 gci_no_ccsao_constraint_flag는, OlsInScope에서의 모든 픽처에 대한 sps_ccsao_enabled_flag가 0일 것임을 지정한다. 0인 gci_no_ccsao_constraint_flag는 이러한 제약을 두지 않는다. 몇몇 실시예에서, 비디오의 비트스트림은 규칙에 따른 하나 이상의 출력 계층 세트(output layer set, OLS)를 포함한다. 여기서의 예에서, OlsInScope는 범위 내에 있는 하나 이상의 OLS를 말한다. 몇몇 예에서, profile_tier_level( ) 신택스 구조는 레벨 정보, 및 선택적으로 OlsInScope이 준수하는 프로파일, 티어(tier), 서브프로파일, 및 일반적인 제약을 제공한다. profile_tier_level( ) 신택스 구조가 VPS에 포함되는 경우, OlsInScope는 VPS에 의해 지정되는 하나 이상의 OLS이다. profile_tier_level( ) 신택스 구조가 SPS에 포함되는 경우, OlsInScope는 SPS를 참조하는 계층 중에서 가장 낮은 계층만을 포함하는 OLS이고, 이 가장 낮은 계층은 독립적인 계층이다.
몇몇 실시예에서는, 인트라 및 인터 사후 예측 SAO 필터에 대한 확장을 이하에서 추가로 예시한다. 몇몇 실시예에서, 본 개시에서 개시된 SAO 분류 방법은 사후 예측 필터의 역할을 할 수 있고, 예측은 인트라, 인터, 또는 인트라 블록 복사와 같은 다른 예측 도구일 수 있다. 도 30은 본 개시의 몇몇 구현에 따라, 본 개시에서 개시된 SAO 분류 방법이 사후 예측 필터의 역할을 한다는 것을 나타낸 블록도이다.
몇몇 실시예에서, Y, U, 및 V 성분 각각에 대해, 대응하는 분류자가 선택된다. 그리고, 각각의 성분 예측 샘플에 대해, 그것은 먼저 분류되고, 대응하는 오프셋이 가산된다. 예를 들어, 각각의 성분은 분류를 위해 현재 샘플 및 이웃하는 샘플을 사용할 수 있다. 이하의 표 32에 도시된 바와 같이, Y는 현재 Y 샘플 및 이웃하는 Y 샘플을 사용하고, U/V는 분류를 위해 현재 U/V 샘플을 사용한다. 도 31은 본 개시의 몇몇 구현에 따라, 사후 예측 SAO 필터에 대해, 각각의 성분이 분류를 위해 현재 샘플 및 이웃하는 샘플을 사용할 수 있음을 나타낸 블록도이다.
몇몇 실시예에서, 개선된(refined) 예측 샘플(Ypred', Upred', Vpred')은 대응하는 클래스 오프셋을 가산함으로써 업데이트되고, 인트라, 인터, 또는 그 후의 다른 예측에 사용된다.
Ypred' = clip3(0, (1 << bit_depth)-1, Ypred + h_Y[i])
Upred' = clip3(0, (1 << bit_depth)-1, Upred + h_U[i])
Vpred' = clip3(0, (1 << bit_depth)-1, Vpred + h_V[i])
몇몇 실시예에서, 크로마 U 및 V 성분에 대해, 현재 크로마 성분을 제외하고, 교차 성분(Y)이 추가의 오프셋 분류를 위해 사용될 수 있다. 추가의 교차 성분 오프셋(h'_U, h'_V)은 예를 들어, 아래의 표 33에 나타낸 바와 같이, 현재 성분 오프셋(h_U, h_V)에 가산될 수 있다.
몇몇 실시예에서, 개선된 예측 샘플(Upred'', Vpred'')은 대응하는 클래스 오프셋을 가산함으로써 업데이트되고, 인트라, 인터, 또는 그 후의 다른 예측에 사용된다.
Upred'' = clip3(0, (1 << bit_depth)-1, Upred' + h'_U[i])
Vpred'' = clip3(0, (1 << bit_depth)-1, Vpred' + h'_V[i])
몇몇 실시예에서, 인트라 및 인터 예측은 상이한 SAO 필터 오프셋을 사용할 수 있다.
도 32는 본 개시에 개시된 SAO 분류 방법이 본 개시의 몇몇 구현에 따른 사후 재구축 필터의 역할을 한다는 것을 나타낸 블록도이다.
몇몇 실시예에서, 여기에 개시된 SAO/CCSAO 분류 방법(교차 성분 샘플/코딩 정보 분류 포함)은 트리 유닛(TU)의 재구축된 샘플에 적용되는 필터의 역할을 할 수 있다. 도 32에 도시된 바와 같이, CCSAO는 사후 재구축 필터의 역할을 할 수 있다, 즉 재구축된 샘플(예측/잔차 샘플 추가 후, 디블로킹 전)을 분류를 위한 입력으로 사용하여, 이웃하는 인트라/인터 예측에 들어가기 전에 루마/크로마 샘플을 보상한다. CCSAO 사후 재구축 필터는 현재 TU 샘플의 왜곡을 줄일 수 있고, 이웃하는 인트라/인터 블록에 대해 더 나은 예측을 제공할 수 있다. 보다 정밀한 예측을 통해 더 나은 압축 효율을 기대할 수 있다.
도 33은 본 개시의 몇몇 구현에 따라, 교차 성분 상관을 사용하여 비디오 신호를 디코딩하는 예시적인 프로세스(3300)를 나타낸 흐름도이다.
일 측면에서, (도 3에 도시된 바와 같은) 비디오 디코더(30)는 비디오 신호로부터 제1 성분 및 제2 성분을 포함하는 픽처 프레임을 수신한다(3310A).
비디오 디코더(30)는 제2 성분의 개개의 샘플과 연관된 제1 성분의 제1 샘플 세트, 및 제2 성분의 개개의 샘플과 연관된 제2 성분의 제2 샘플 세트로부터의 가중된 샘플 값 세트를 사용하여 제2 성분의 개개의 샘플에 대한 분류자를 결정한다(3320A). 몇몇 실시예에서, 제1 성분의 제1 샘플 세트는 제1 성분의 개개의 샘플에 대한 제1 성분의 동일한 위치에 있는 샘플과 제1 성분의 동일한 위치에 있는 샘플의 이웃 샘플을 포함하고, 제2 성분의 제2 샘플 세트는 제2 성분의 개개의 샘플에 대한 제2 성분의 현재 샘플과 제2 성분의 현재 샘플의 이웃하는 샘플을 포함한다(3320A-1).
비디오 디코더(30)는 분류자에 따라 제2 성분의 개개의 샘플에 대한 샘플 오프셋을 결정한다(3330A).
비디오 디코더(30)는 결정된 샘플 오프셋에 기초하여 제2 성분의 개개의 샘플을 수정한다(3340A).
몇몇 실시예에서, 제1 성분은 루마 성분, 제1 크로마 성분 및 제2 크로마 성분으로 이루어진 그룹에서 선택되는 하나이고, 제2 성분은 루마 성분, 제1 크로마 성분 및 제2 크로마 성분으로 이루어진 그룹에서 선택되는 하나이며, 여기서 제1 성분은 제2 성분과 다르다.
몇몇 실시예에서, 픽처 프레임은 제3 구성요소를 더 포함하고, 제2 구성요소의 개개의 샘플에 대한 분류자를 결정하는 것(3320A)은, 제2 성분의 개개의 샘플과 연관된 제3 성분의 제3 샘플 세트로부터 가중된 샘플 값의 세트 및 가중된 샘플 값의 추가 세트를 사용하여 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 것을 더 포함하며, 여기서 제3 성분의 제3 샘플 세트는 제2 성분의 개개의 샘플에 대해 제3 성분의 동일 위치에 있는 샘플 및 제3 샘플의 동일 위치에 있는 샘플의 이웃하는 샘플을 포함한다.
다른 측면에서, 비디오 디코더(30)는 비디오 신호로부터, 제1 성분, 제2 성분, 및 제3 성분을 포함하는 픽처 프레임을 수신한다(3310B).
비디오 디코더(30)는 제2 성분의 개개의 샘플과 연관된 제1 성분의 제1 샘플 세트, 및 제2 성분의 개개의 샘플과 연관된 제3 샘플 세트로부터의 가중된 샘플 값 세트를 사용하여 제2 성분의 개개의 샘플에 대한 분류자를 결정한다(3320B). 몇몇 실시예에서, 제1 성분의 제1 샘플 세트는 제2 성분의 개개의 샘플에 대한 제1 성분의 동일 위치에 있는 샘플 및 제1 성분의 동일 위치에 있는 샘플의 이웃 샘플을 포함하고, 제3 성분의 제3 샘플 세트는 제2 성분의 개개의 샘플에 대한 제3 성분의 동일 위치에 있는 샘플 및 제3 성분의 동일 위치에 있는 샘플의 이웃하는 샘플을 포함한다(3320B-1).
비디오 디코더(30)는 분류자에 따라 제2 성분의 개개의 샘플에 대한 샘플 오프셋을 결정한다(3330B).
비디오 디코더(30)는 결정된 샘플 오프셋에 기초하여 제2 성분의 개개의 샘플을 수정한다 (3340B).
몇몇 실시예에서, 제1 성분은 루마 성분, 제1 크로마 성분 및 제2 크로마 성분으로 이루어진 그룹에서 선택되는 하나이고, 제2 성분은 루마 성분, 제1 크로마 성분 및 제2 크로마 성분으로 이루어진 그룹에서 선택되는 하나이고, 제3 성분은 루마 성분, 제1 크로마 성분 및 제2 크로마 성분으로 이루어진 그룹에서 선택되는 하나이며, 여기서 제1 성분, 제2 성분 및 제3 성분은 서로 다른 성분이다.
몇몇 실시예에서, 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 것(3320B)은 가중된 샘플 값 세트 및 제2 성분의 개개의 샘플과 연관된 제2 성분의 제2 샘플 세트로부터의 추가의 가중된 샘플 값 세트를 사용하여 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 것을 더 포함하며, 여기서 제2 성분의 제2 샘플 세트는 제2 성분의 개개의 샘플에 대한 제2 성분의 현재 샘플 및 제2 성분의 현재 샘플의 이웃하는 샘플을 포함한다.
몇몇 실시예에서, 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 것(3320A 또는 3320B)은 가중된 샘플 값 세트의 합산을 사용하여 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 것을 포함한다.
몇몇 실시예에서, 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 것(3320A 또는 3320B)은 가중된 샘플 값 세트와 추가의 가중된 샘플 값 세트의 합산을 사용하여 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 것을 포함한다.
몇몇 실시예에서, 합산을 사용하여 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 것(3320A 또는 3320B)은 분류 샘플 값 S를 다음과 같이 결정하는 것:
여기서 Rij는 제2 성분의 개개의 샘플에 대한 i번째 성분의 동일 위치에 있는 샘플 또는 현재 샘플 및 이웃하는 샘플의 j번째 샘플이며, 여기서 i는 1, 2, 및 3이며, 각각의 제1, 제2, 제3 성분(예를 들어, Y/U/V 성분)을 각각 나타내고, j는 0 내지 N-1이고, i와 j는 모두 정수이고, cij는 Rij에 대응하는 가중 계수이고, 제2 성분의 개개의 샘플에 대한 동일 위치에 있는 샘플 또는 현재 샘플과 i 번째 성분의 이웃하는 샘플의 총 개수임; 및
분류 샘플 값 S에 기초하여 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 것을 포함한다.
몇몇 실시예에서, 합계
은 1이다.
몇몇 실시예에서, 분류 샘플 값 S는 비디오 신호의 동적 비트 심도 범위 내에 있다.
몇몇 실시예에서, 제2 성분의 개개의 샘플에 대한 분류자는 제2 성분의 개개의 샘플에 대한 제1 성분의 동일 위치에 있는 샘플의 에지 방향 및 강도로부터 결정되는 제2 분류자와 함께 조합된 가중된 샘플 값 세트의 합산을 사용하는 제1 분류자를 포함하며, 여기서 제1 분류자는 제2 분류자와 상이하다.
몇몇 실시예에서, 제2 성분의 현재 샘플의 가중 계수 중 하나는 다른 가중 계수로부터 도출된다.
몇몇 실시예에서, 분류 샘플 값 S는 classIdx = (S * bandNumS) >> BitDepth인 분류자의 클래스 인덱스를 결정하는 데 사용되며, 여기서 bandNumS는 S의 샘플 값과 연관된 밴드 번호이고 BitDepth는 비디오 신호의 동적 비트 심도이다.
도 34는 사용자 인터페이스(3450)와 결합된 컴퓨팅 환경(3410)을 도시한다. 컴퓨팅 환경(3410)은 데이터 처리 서버의 일부일 수 있다. 컴퓨팅 환경(3410)은 프로세서(3420), 메모리(3430), 및 입출력(input/output, I/O) 인터페이스(3440)를 포함한다.
프로세서(3420)는 일반적으로, 표시, 데이터 취득, 데이터 통신, 및 이미지 처리와 연관된 동작과 같은, 컴퓨팅 환경(3410)의 전체적인 동작을 제어한다. 프로세서(3420)는 전술한 방법에서의 단계의 전부 또는 일부를 수행할 명령어를 실행하기 위한 하나 이상의 프로세서를 포함할 수 있다. 또한, 프로세서(3420)는 프로세서(3420)와 다른 컴포넌트 사이의 상호작용을 용이하게 하는 하나 이상의 모듈을 포함할 수 있다. 프로세서는 중앙 처리 유닛(central processing unit, CPU), 마이크로프로세서, 단일 칩 기계(single chip machine), 그래픽 처리 유닛(graphical processing unit, GPU) 등일 수 있다.
메모리(3430)는 컴퓨팅 환경(3410)의 동작을 지원할 다양한 유형의 데이터를 저장하도록 구성된다. 메모리(3430)는 미리 결정된 소프트웨어(3432)를 포함할 수 있다. 이러한 데이터의 예로는 컴퓨팅 환경(3410)에서 동작되는 임의의 애플리케이션 또는 방법을 위한 명령어, 비디오 데이터세트(video dataset), 이미지 데이터 등을 포함한다. 메모리(3440)는 SRAM(Static Random Access Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), EPROM(Erasable Programmable Read-Only Memory), PROM(Programmable Read-Only Memory), ROM(Read-Only Memory), 자기 메모리, 플래시 메모리, 자기 또는 광학 디스크와 같은, 임의의 유형의 휘발성 또는 비휘발성의 메모리 디바이스 또는 그 조합을 사용하여 구현될 수 있다.
I/O 인터페이스(3440)는 프로세서(3420)와, 키보드, 클릭 휠(click wheel), 버튼 등과 같은, 주변 인터페이스 모듈 사이의 인터페이스를 제공한다. 버튼은 홈 버튼(home button), 스캔 시작 버튼(start scan button), 및 스캔 정지 버튼(stop scan button)을 포함할 수 있지만, 이에 한정되지 않는다. I/O 인터페이스(3440)는 인코더 및 디코더와 결합될 수 있다.
일 실시예에서, 전술한 방법들을 수행하기 위해, 컴퓨팅 환경(3410)의 프로세서(3420)에 의해 실행가능한, 예를 들어 메모리(3430) 내의 복수의 프로그램을 포함하는, 컴퓨터로 판독 가능한 비일시적 저장 매체가 제공된다. 대안적으로, 컴퓨터로 판독 가능한 비일시적 저장 매체는, 예를 들어, 비디오 데이터의 디코딩 시에 디코더(예를 들어, 도 3에서의 비디오 디코더(30))에 의한 사용을 위해 전술한 인코딩 방법을 사용하여 인코더(예를 들어, 도 2에서의 비디오 인코더(20))에 의해 생성되는 인코딩된 비디오 정보(예를 들어, 하나 이상의 신택스 요소를 포함하는 비디오 정보)를 포함하는 비트스트림 또는 데이터 스트림을 저장하였을 수 있다. 컴퓨터로 판독 가능한 비일시적 저장 매체는, 예를 들어, ROM, 랜덤 액세스 메모리(random access memory, RAM), CD-ROM, 자기 테이프, 플로피 디스크, 광학 데이터 저장 디바이스 등일 수 있다.
일 실시예에서, 하나 이상의 프로세서(예를 들어, 프로세서(3420))를 포함하는 컴퓨팅 디바이스; 및 하나 이상의 프로세서에 의해 실행 가능한 복수의 프로그램을 저장한, 컴퓨터로 판독 가능한 비일시적 저장 매체 또는 메모리(3430)가 더 제공되며, 여기서 하나 이상의 프로세서는 복수의 프로그램의 실행 시에, 전술한 방법을 수행하도록 구성된다.
일 실시예에서, 전술한 방법을 수행하기 위해, 컴퓨팅 환경(3410)의 프로세서(3420)에 의해 실행가능한, 예를 들어, 메모리(3430) 내의 복수의 프로그램을 포함하는 컴퓨터 프로그램 제품이 더 제공된다. 예를 들어, 컴퓨터 프로그램 제품은 컴퓨터로 판독 가능한 비일시적 저장 매체를 포함할 수 있다.
일 실시예에서, 컴퓨팅 환경(3410)은 위의 방법을 수행하기 위해, 하나 이상의 ASIC, DSP, DSPD(Digital Signal Processing Device), PLD(Programmable Logic Device), FPGA, GPU, 제어기, 마이크로제어기, 마이크로프로세서, 또는 다른 전자 컴포넌트로 구현될 수 있다.
추가의 실시예는 또한, 다양한 다른 실시예에서 조합되거나 아니면 재배치된 위의 실시예들의 다양한 서브세트를 포함한다.
하나 이상의 예에서, 설명된 기능은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수 있다. 기능이 소프트웨어로 구현되는 경우, 하나 이상의 명령어 또는 코드로서, 컴퓨터로 판독 가능한 매체에 저장되거나 컴퓨터로 판독 가능한 매체를 통해 송신되어 하드웨어 기반 처리 유닛에 의해 실행될 수 있다. 컴퓨터로 판독 가능한 매체는 데이터 저장 매체와 같은 유형의(tangible) 매체에 대응하는, 컴퓨터로 판독 가능한 저장 매체, 또는 예컨대, 통신 프로토콜에 따라 하나의 장소로부터 다른 장소로 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체를 포함할 수 있다. 이러한 방식으로, 컴퓨터로 판독 가능한 매체는 일반적으로 (1) 비일시적인, 컴퓨터로 판독 가능한 유형의 저장 매체, 또는 (2) 신호 또는 반송파와 같은 통신 매체에 대응할 수 있다. 데이터 저장 매체는 본 출원에서 설명된 구현들 중의 구현을 위한 명령어, 코드 및/또는 데이터 구조를 검색하기 위해 하나 이상의 컴퓨터 또는 하나 이상의 프로세서에 의해 액세스될 수 있는 임의의 이용 가능한 매체일 수 있다. 컴퓨터 프로그램 제품은 컴퓨터로 판독 가능한 매체를 포함할 수 있다.
본 개시의 설명은 예시의 목적으로 제시되었으며, 본 개시를 총망라하거나 한정하려는 의도는 아니다. 전술한 설명 및 관련 도면에 제시된 교시의 이점을 갖는 당업자에게는 많은 수정, 변형 및 대안적인 구현이 명백할 것이다.
달리 구체적으로 언급되지 않는 한, 본 개시에 따른 방법의 단계들의 순서는 단지 예시를 위한 것이며, 본 개시에 따른 방법의 단계들은 위에서 구체적으로 설명된 순서로 한정되지 않으며, 실제적인 상황에 따라 변경될 수 있다. 또한, 본 개시에 따른 방법의 단계들 중 적어도 하나는 실제 요구사항에 따라 조정, 조합 또는 삭제될 수 있다.
본 개시의 원리를 설명하고, 다른 당업자가 다양한 구현에 대한 본 개시를 이해할 수 있게 하고, 특정 용도에 적합한 다양한 수정을 통해 기본 원리 및 다양한 구현을 가장 잘 활용할 수 있도록 하기 위해 예를 선택하고 설명하였다. 따라서, 본 개시의 범위는 개시된 구현의 특정 예에 한정되어서는 안 되며, 수정 및 다른 구현도 본 개시의 범위 내에 포함되도록 의도된다는 것을 이해해야 한다.

Claims (19)

  1. 비디오 신호를 디코딩하는 방법으로서,
    상기 비디오 신호로부터, 제1 성분과 제2 성분을 포함하는 픽처 프레임(picture frame)을 수신하는 단계;
    상기 제2 성분의 개개의 샘플과 연관된 상기 제1 성분의 제1 샘플 세트로부터의 가중된 샘플 값 세트, 및 상기 제2 성분의 개개의 샘플과 연관된 상기 제2 성분의 제2 샘플 세트를 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자(classifier)를 결정하는 단계 - 상기 제1 성분의 상기 제1 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제1 성분의 동일 위치에 있는(collocated) 샘플 및 상기 제1 성분의 상기 동일 위치에 있는 샘플의 이웃하는 샘플을 포함하고, 상기 제2 성분의 상기 제2 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제2 성분의 현재 샘플 및 상기 제2 성분의 상기 현재 샘플의 이웃하는 샘플을 포함함 -;
    상기 분류자에 따라 상기 제2 성분의 개개의 샘플에 대한 샘플 오프셋을 결정하는 단계; 및
    상기 결정된 샘플 오프셋에 기초하여 상기 제2 성분의 개개의 샘플을 수정하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계는,
    상기 가중된 샘플 값 세트의 합산을 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계를 포함하는, 방법.
  3. 제1항에 있어서,
    상기 제1 성분은 루마 성분, 제1 크로마 성분 및 제2 크로마 성분으로 이루어진 그룹에서 선택되는 성분이고,
    상기 제2 성분은 상기 루마 성분, 상기 제1 크로마 성분 및 상기 제2 크로마 성분으로 이루어진 그룹에서 선택되는 성분이며,
    상기 제1 성분은 상기 제2 성분과 다른, 방법.
  4. 제1항에 있어서,
    상기 픽처 프레임은 제3 성분을 더 포함하고, 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계는,
    상기 가중된 샘플 값 세트 및 상기 제2 성분의 개개의 샘플과 연관된 상기 제3 성분의 제3 샘플 세트로부터의 추가의 가중된 샘플 값 세트를 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계 - 상기 제3 성분의 상기 제3 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제3 성분의 동일 위치에 있는 샘플 및 상기 제3 성분의 상기 동일 위치에 있는 샘플의 이웃하는 샘플을 포함함 -를 더 포함하는, 방법.
  5. 제4항에 있어서,
    상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계는,
    상기 가중된 샘플 값 세트와 상기 추가의 가중된 샘플 값 세트의 합산을 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계를 포함하는, 방법.
  6. 비디오 신호를 디코딩하는 방법으로서,
    상기 비디오 신호로부터 제1 성분, 제2 성분 및 제3 성분을 포함하는 픽처 프레임을 수신하는 단계;
    상기 제2 성분의 개개의 샘플과 연관된 상기 제1 성분의 제1 샘플 세트로부터의 가중된 샘플 값 세트, 및 상기 제2 성분의 개개의 샘플과 연관된 상기 제3 성분의 제3 샘플 세트를 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계 - 상기 제1 성분의 상기 제1 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제1 성분의 동일 위치에 있는 샘플 및 상기 제1 성분의 상기 동일 위치에 있는 샘플의 이웃하는 샘플을 포함하고, 상기 제3 성분의 상기 제3 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제3 성분의 동일 위치에 있는 샘플 및 상기 제3 성분의 상기 동일 위치에 있는 샘플의 이웃하는 샘플을 포함함 -;
    상기 분류자에 따라 상기 제2 성분의 개개의 샘플에 대한 샘플 오프셋을 결정하는 단계; 및
    상기 결정된 샘플 오프셋에 기초하여 상기 제2 성분의 개개의 샘플을 수정하는 단계
    를 포함하는 방법.
  7. 제6항에 있어서,
    상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계는,
    상기 가중된 샘플 값 세트의 합산을 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계를 포함하는, 방법.
  8. 제6항에 있어서,
    상기 제1 성분은 루마 성분, 제1 크로마 성분 및 제2 크로마 성분으로 이루어진 그룹에서 선택되는 성분이고,
    상기 제2 성분은 상기 루마 성분, 상기 제1 크로마 성분 및 상기 제2 크로마 성분으로 이루어진 그룹에서 선택되는 성분이고,
    상기 제3 성분은 상기 루마 성분, 상기 제1 크로마 성분 및 상기 제2 크로마 성분으로 이루어진 그룹에서 선택되는 성분이며,
    상기 제1 성분, 상기 제2 성분, 및 상기 제3 성분은 상이한, 방법.
  9. 제6항에 있어서,
    상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계는,
    상기 가중된 샘플 값 세트 및 상기 제2 성분의 개개의 샘플과 연관된 상기 제2 성분의 제2 샘플 세트로부터의 추가의 가중된 샘플 값 세트를 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계 - 상기 제2 성분의 상기 제2 샘플 세트는 상기 제2 성분의 개개의 샘플에 대한 상기 제2 성분의 현재 샘플 및 상기 제2 성분의 상기 현재 샘플의 이웃하는 샘플을 포함함 -를 더 포함하는, 방법.
  10. 제9항에 있어서,
    상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계는,
    상기 가중된 샘플 값 세트 및 상기 추가의 가중된 샘플 값 세트의 합산을 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계를 포함하는, 방법.
  11. 제5항 또는 제10항에 있어서,
    상기 합산을 사용하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계는,
    다음:

    과 같이 분류 샘플 값 S를 결정하는 단계 - 여기서 Rij는 상기 제2 성분의 개개의 샘플에 대한 i번째 성분의 동일 위치에 있는 샘플 또는 현재 샘플 및 이웃하는 샘플 중 j번째 샘플이고, i는 1, 2, 및 3이고, 상기 제1 성분, 상기 제2 성분 및 상기 제3 성분 각각을 개별적으로 나타내며, j는 0 내지 N-1이고, i와 j는 모두 정수이며, cij는 Rij에 대응하는 가중 계수이고, N은 상기 제2 성분의 개개의 샘플에 대한 상기 i 번째 성분의 동일 위치에 있는 샘플 또는 현재 샘플 및 이웃하는 샘플의 총 개수임 -; 및
    상기 분류 샘플 값 S에 기초하여 상기 제2 성분의 개개의 샘플에 대한 분류자를 결정하는 단계
    를 포함하는, 방법.
  12. 제11항에 있어서,
    합산
    는 1인, 방법.
  13. 제11항에 있어서,
    상기 분류 샘플 값 S는 상기 비디오 신호의 동적 비트 심도 범위 내에 있는, 방법.
  14. 제2항 또는 제7항에 있어서,
    상기 제2 성분의 개개의 샘플에 대한 분류자는, 상기 제2 성분의 개개의 샘플에 대한 상기 제1 성분의 동일 위치에 있는 샘플의 에지 방향 및 강도로부터 결정되는 제2 분류자와 함께 조합되는 상기 가중된 샘플 값 세트의 합산을 사용하는 제1 분류자를 포함하며, 상기 제1 분류자는 상기 제2 분류자와 다른, 방법.
  15. 제11항에 있어서,
    상기 제2 성분의 상기 현재 샘플의 가중 계수 중 하나는 다른 가중 계수로부터 도출되는, 방법.
  16. 제11항에 있어서,
    상기 분류 샘플 값 S는 상기 분류자에 대한 클래스 인덱스를 classIdx = (S * bandNumS) >> BitDepth로서 결정하는 데 사용되며, bandNumS는 S의 샘플 값과 연관된 대역 번호이고, BitDepth는 상기 비디오 신호의 동적 비트 심도인, 방법.
  17. 전자 장치로서,
    하나 이상의 처리 유닛;
    상기 하나 이상의 처리 유닛에 결합된 메모리; 및
    상기 메모리에 저장된 복수의 프로그램
    을 포함하고,
    상기 복수의 프로그램은 상기 하나 이상의 처리 유닛에 의해 실행될 때, 상기 전자 장치로 하여금 제1항 내지 제16항 중 어느 한 항의 방법을 수행하게 하는,
    전자 장치.
  18. 명령어를 포함하는 비트스트림이 저장되어 있는, 컴퓨터로 판독 가능한 비일시적 저장 매체로서,
    상기 명령어는 실행될 때, 디코딩 장치로 하여금 제1항 내지 제16항 중 어느 한 항에 따른 상기 비디오 신호를 디코딩 하는 방법을 수행하게 하는,
    컴퓨터로 판독 가능한 비일시적 저장 매체.
  19. 하나 이상의 처리 유닛을 구비한 전자 장치에 의한 실행을 위해 복수의 프로그램을 저장하는, 컴퓨터로 판독 가능한 비일시적 저장 매체로서,
    상기 복수의 프로그램은 상기 하나 이상의 처리 유닛에 의해 실행될 때, 상기 전자 장치로 하여금 제1항 내지 제16항 중 어느 한 항의 방법을 수행하게 하는,
    컴퓨터로 판독 가능한 비일시적 저장 매체.
KR1020247007487A 2021-08-19 2022-08-17 교차 성분 샘플 적응적 오프셋에서의 코딩 강화 KR20240042642A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202163235090P 2021-08-19 2021-08-19
US63/235,090 2021-08-19
PCT/US2022/040627 WO2023023174A1 (en) 2021-08-19 2022-08-17 Coding enhancement in cross-component sample adaptive offset

Publications (1)

Publication Number Publication Date
KR20240042642A true KR20240042642A (ko) 2024-04-02

Family

ID=85239750

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020247007487A KR20240042642A (ko) 2021-08-19 2022-08-17 교차 성분 샘플 적응적 오프셋에서의 코딩 강화

Country Status (7)

Country Link
US (1) US20240205438A1 (ko)
EP (1) EP4388737A1 (ko)
JP (1) JP2024534051A (ko)
KR (1) KR20240042642A (ko)
CN (1) CN117795957A (ko)
MX (1) MX2024002212A (ko)
WO (1) WO2023023174A1 (ko)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201119206D0 (en) * 2011-11-07 2011-12-21 Canon Kk Method and device for providing compensation offsets for a set of reconstructed samples of an image
BR112014015171B1 (pt) * 2011-12-22 2020-10-06 Samsung Electronics Co., Ltd Aparelho de decodificação de vídeo
US9282328B2 (en) * 2012-02-10 2016-03-08 Broadcom Corporation Sample adaptive offset (SAO) in accordance with video coding
EP3895423A4 (en) * 2018-12-23 2022-06-22 Huawei Technologies Co., Ltd. ENCODER, DECODER AND RELATED METHODS USING AN ADAPTIVE LOOP FILTER
WO2021136498A1 (en) * 2019-12-31 2021-07-08 Beijing Bytedance Network Technology Co., Ltd. Multiple reference line chroma prediction

Also Published As

Publication number Publication date
WO2023023174A1 (en) 2023-02-23
MX2024002212A (es) 2024-03-13
JP2024534051A (ja) 2024-09-18
EP4388737A1 (en) 2024-06-26
US20240205438A1 (en) 2024-06-20
CN117795957A (zh) 2024-03-29
CN117795957A8 (zh) 2024-05-14

Similar Documents

Publication Publication Date Title
KR20230139811A (ko) 교차-성분 샘플 적응적 오프셋에서의 코딩 향상
US20240137546A1 (en) Coding enhancement in cross-component sample adaptive offset
KR20230170072A (ko) 교차-컴포넌트 샘플 적응적 오프셋에서의 코딩 강화
EP4324198A1 (en) Coding enhancement in cross-component sample adaptive offset
EP4309365A1 (en) Coding enhancement in cross-component sample adaptive offset
KR20240042642A (ko) 교차 성분 샘플 적응적 오프셋에서의 코딩 강화
US20240214595A1 (en) Coding enhancement in cross-component sample adaptive offset
US20240195996A1 (en) Coding enhancement in cross-component sample adaptive offset
US20240259578A1 (en) Cross-component sample adaptive offset
CN117917074A (zh) 跨分量样点自适应偏移中的编解码增强
KR20240136935A (ko) 크로스-컴포넌트 샘플 적응식 오프셋
WO2024151874A1 (en) Cross-component sample adaptive offset
CN117413516A (zh) 跨分量样本自适应偏移中的编解码增强