KR102323406B1 - 최종 유효 계수 플래그들의 코딩 - Google Patents

최종 유효 계수 플래그들의 코딩 Download PDF

Info

Publication number
KR102323406B1
KR102323406B1 KR1020197035897A KR20197035897A KR102323406B1 KR 102323406 B1 KR102323406 B1 KR 102323406B1 KR 1020197035897 A KR1020197035897 A KR 1020197035897A KR 20197035897 A KR20197035897 A KR 20197035897A KR 102323406 B1 KR102323406 B1 KR 102323406B1
Authority
KR
South Korea
Prior art keywords
coefficient
scan
coefficients
group
zero
Prior art date
Application number
KR1020197035897A
Other languages
English (en)
Other versions
KR20200004358A (ko
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 구글 엘엘씨
Priority to KR1020217035650A priority Critical patent/KR20210135351A/ko
Publication of KR20200004358A publication Critical patent/KR20200004358A/ko
Application granted granted Critical
Publication of KR102323406B1 publication Critical patent/KR102323406B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets
    • H04N19/64Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets characterised by ordering of coefficients or of bits for transmission
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • 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/129Scanning of coding units, e.g. zig-zag scan of transform coefficients or flexible macroblock ordering [FMO]
    • 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/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • 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/174Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a slice, e.g. a line of blocks or a group of blocks
    • 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/18Methods 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 set of transform coefficients
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • 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/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Landscapes

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

Abstract

계수들의 변환 블록의 최종 비-제로 계수의 위치를 인코딩하는 것은 최종 비-제로 계수의 위치를 결정하는 것을 포함하고, 위치는 열 값 및 행 값을 포함한다. 변환 블록의 계수 열 및 계수 행에 있는 비-제로 계수가 인코딩된다. 비-제로 계수가 계수 열에서 인코딩되어야 할 최초 비-제로 계수일 경우에, 계수 열이 최종 비-제로 계수의 열 값과 동일한지 여부가 인코딩되고, 그렇지 않을 경우에는, 인코딩이 스킵된다. 비-제로 계수가 계수 행에서 인코딩되어야 할 최초 비-제로 계수일 경우에, 계수 행이 최종 비-제로 계수의 행 값과 동일한지 여부가 인코딩되고, 그렇지 않을 경우에는, 인코딩이 스킵된다.

Description

최종 유효 계수 플래그들의 코딩
디지털 비디오 스트림들은 프레임들의 시퀀스(sequence of frames) 또는 스틸 이미지(still image)를 이용하여 비디오를 표현할 수 있다. 디지털 비디오는 예컨대, 비디오 회의, 고 해상도 비디오 엔터테인먼트, 비디오 광고들, 또는 사용자-생성된 비디오들의 공유를 포함하는 다양한 애플리케이션들에 대해 이용될 수 있다. 디지털 비디오 스트림은 다량의 데이터를 포함할 수 있고, 비디오 데이터의 프로세싱, 송신, 또는 저장을 위해 컴퓨팅 디바이스의 상당한 양의 컴퓨팅 또는 통신 자원들을 소비할 수 있다. 압축 및 다른 인코딩 기법들을 포함하는 다양한 접근법들은 비디오 스트림들에서의 데이터의 양을 감소시키도록 제안되었다.
모션 추정 및 보상에 기초한 인코딩은 프레임들 또는 이미지들을, 참조 프레임들의 하나 이상의 예측 블록들에 기초하여 예측되는 블록들로 분해함으로써 수행될 수 있다. 블록들과 예측 블록들 사이의 차이들(즉, 잔차 오차들)은 비트스트림에서 압축되고 인코딩된다. 디코더는 프레임들 또는 이미지들을 재구성하기 위하여 차이들 및 참조 프레임들을 이용한다.
양상은 인코딩된 비트스트림에서, 계수들의 변환 블록의 최종 비-제로 계수(last non-zero coefficient)의 위치를 인코딩하기 위한 방법으로서, 최종 비-제로 계수의 위치 ― 위치는 열 값(column value) 및 행 값(row value)을 포함함 ― 를 결정하는 단계, 계수들의 변환 블록의 비-제로 계수를 인코딩하는 단계를 포함한다. 비-제로 계수는 변환 블록의 계수 열(coefficient column) 및 계수 행(coefficient row)에 있다. 방법은 또한, 비-제로 계수가 계수 열에서 인코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 계수 열이 최종 비-제로 계수의 열 값과 동일한지 여부를 인코딩하는 단계, 및 비-제로 계수가 계수 열에서 인코딩될 최초 비-제로 계수가 아닌 것으로 결정하는 것에 응답하여, 계수 열이 최종 비-제로 계수의 열 값과 동일한지 여부를 인코딩하는 것을 스킵(skip)하는 단계를 포함한다. 방법은 또한, 비-제로 계수가 계수 행에서 인코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 계수 행이 최종 비-제로 계수의 행 값과 동일한지 여부를 인코딩하는 단계, 및 비-제로 계수가 계수 행에서 인코딩될 최초 비-제로 계수가 아닌 것으로 결정하는 것에 응답하여, 계수 행이 최종 비-제로 계수의 행 값과 동일한지 여부를 인코딩하는 것을 스킵하는 단계를 포함한다.
또 다른 양상은 인코딩된 비트스트림에서, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 인코딩하기 위한 방법이다. 방법은 최종 비-제로 계수의 위치 ― 위치는 열 값 및 행 값을 포함함 ― 를 결정하는 단계; 스캔 순서(scan order)에 대한 계수들의 변환 블록의 하나 이상의 비-제로 계수들 ― 하나 이상의 비-제로 계수들의 각각은 변환 블록의 개개의 계수 열 및 개개의 계수 행에 있음 ― 을 인코딩하는 단계; 하나 이상의 비-제로 계수들의 비-제로 계수가 최종 비-제로 계수의 열 값과 동일한, 열에서 인코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 그 비-제로 계수의 계수 열이 최종 비-제로 계수의 열 값과 동일한 것으로 인코딩하는 단계; 및 하나 이상의 비-제로 계수들의 비-제로 계수가 최종 비-제로 계수의 행 값과 동일한, 행에서 인코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 그 비-제로 계수의 계수 행이 최종 비-제로 계수의 열 값과 동일한 것으로 인코딩하는 단계를 포함한다.
또 다른 양상은 인코딩된 비트스트림에서, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 인코딩하기 위한 장치이다. 장치는 메모리, 및 메모리에 저장된 명령들을 실행하도록 구성된 프로세서를 포함하고, 명령들은, 최종 비-제로 계수의 위치를 결정하고 ― 위치는 열 값 및 행 값을 포함함 ―; 계수들의 변환 블록의 하나 이상의 비-제로 계수들을 인코딩하고 ― 각각의 비-제로 계수는 변환 블록의 개개의 계수 열 및 개개의 계수 행에 있음 ―; 그리고 하나 이상의 비-제로 계수들의 각각에 대하여: (i) 비-제로 계수가 계수 열에서 인코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 계수 열이 최종 비-제로 계수의 열 값과 동일한지 여부를 인코딩하거나, 또는 비-제로 계수가 계수 열에서 인코딩될 최초 비-제로 계수가 아닌 것으로 결정하는 것에 응답하여, 계수 열이 최종 비-제로 계수의 열 값과 동일한지 여부를 인코딩하는 것을 스킵(skip)하는 것 중의 어느 하나; 및 (ii) 비-제로 계수가 계수 행에서 인코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 계수 행이 최종 비-제로 계수의 행 값과 동일한지 여부를 인코딩하거나, 또는 비-제로 계수가 계수 행에서 인코딩될 최초 비-제로 계수가 아닌 것으로 결정하는 것에 응답하여, 계수 행이 최종 비-제로 계수의 행 값과 동일한지 여부를 인코딩하는 것을 스킵하는 것 중의 어느 하나를 위한 것이다.
또 다른 양상은 메모리 및 프로세서를 포함하는, 변환 블록의 최종-비-제로 계수의 위치를 디코딩하기 위한 장치이다. 프로세서는 메모리에 저장된 명령들을 실행하도록 구성되고, 명령들은, 인코딩된 비트스트림으로부터, 변환 블록의 최초 계수가 비-제로인지 여부를 디코딩하고, 최초 계수가 비-제로인 것으로 결정하는 것에 응답하여, 그리고 최초 계수가 제1 차원의 제1 값에 대해 디코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 인코딩된 비트스트림으로부터, 제1 차원의 제1 값이 블록-종료 계수를 표시하는지 여부를 표시하는 제1 신택스 엘리먼트를 디코딩하고, 제1 신택스 엘리먼트가 블록-종료 계수를 표시하는 것에 응답하여, 최종-비-제로 계수의 위치를 결정하기 위하여 제1 값을 이용하기 위한 것이다.
또 다른 양상은 계수들의 변환 블록의 최종 비-제로 계수의 위치를 디코딩하기 위한 방법이다. 방법은 변환 블록의 계수들을, 제1 차원 및 제2 차원을 가지는 계수 그룹 좌표계(coefficient groups coordinate system)로 맵핑하는 단계를 포함하고, 제1 차원은 변환 계수들의 그룹들에 대응하고, 제2 차원은 계수들의 그룹들 중 일 그룹 내의 오프셋 포지션에 대응한다. 방법은 또한, 인코딩된 비트스트림으로부터, 최종 비-제로 계수를 포함하는 계수 그룹을 결정하는 단계, 인코딩된 비트스트림으로부터, 최종 비-제로 계수의, 계수 그룹에서의 최종 비-제로 계수의 오프셋 포지션을 결정하는 단계, 및 인코딩된 비트스트림으로부터, 계수 그룹 및 오프셋 포지션에 대응하는 계수까지 계수들을 디코딩하는 단계를 포함한다.
본 개시내용의 이러한 그리고 다른 양상들은 실시예들, 첨부된 청구항들, 및 동반 도면들의 다음의 상세한 설명에서 개시된다.
본원에서의 설명은 유사한 참조 번호들이 몇몇 도면들 전반에 걸쳐 유사한 부분들을 참조하는 동반 도면들을 참조한다.
도 1은 비디오 인코딩 및 디코딩 시스템의 개략도이다.
도 2는 송신국(transmitting station) 또는 수신국(receiving station)을 구현할 수 있는 컴퓨팅 디바이스의 예의 블록도이다.
도 3은 인코딩되고 그 후에 디코딩될 비디오 스트림의 도면이다.
도 4는 이 개시내용의 구현예들에 따른 인코더의 블록도이다.
도 5는 이 개시내용의 구현예들에 따른 디코더의 블록도이다.
도 6은 이 개시내용의 구현예들에 따른, 양자화된 변환 계수들을 예시하는 도면이다.
도 7은 이 개시내용의 구현예들에 따른, 변환 블록들을 엔트로피 코딩하기 위하여 이용될 수 있는 계수 토큰 트리(coefficient token tree)의 도면이다.
도 8은 이 개시내용의 구현예들에 따른, EOB 포지션(position)을 이진화(binarize)하기 위한 트리의 예의 도면이다.
도 9는 이 개시내용의 구현예에 따른, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 인코딩하기 위한 프로세스의 흐름도이다.
도 10은 이 개시내용의 구현예들에 따른, 스캔 순서 및 블록의 예이다.
도 11은 이 개시내용의 구현예에 따른, 데카르트 좌표계(Cartesian coordinate system)를 이용하여, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 코딩하기 위한 프로세스의 흐름도이다.
도 12는 이 개시내용의 구현예에 따른, 데카르트 그룹화 좌표계(Cartesian grouping coordinate system)를 이용하여, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 코딩하기 위한 프로세스의 흐름도이다.
도 13은 이 개시내용의 구현예에 따른, 극 좌표계(polar coordinate system)를 이용하여, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 코딩하기 위한 프로세스의 흐름도이다.
도 14는 이 개시내용의 구현예에 따른, 계수 그룹 좌표계를 이용하여, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 코딩하기 위한 프로세스의 흐름도이다.
도 15는 이 개시내용의 구현예들에 따른, 극 좌표계의 예이다.
도 16은 이 개시내용의 구현예들에 따른, 계수 그룹 좌표계의 예이다.
도 17은 이 개시내용의 구현예에 따른, 변환 블록의 최종-비-제로 계수의 위치를 디코딩하기 위한 프로세스의 흐름도이다.
도 18은 이 개시내용의 구현예에 따른, 변환 블록의 최종-비-제로 계수의 위치를 디코딩하기 위한 또 다른 프로세스의 흐름도이다.
위에서 언급된 바와 같이, 비디오 스트림들을 코딩하는 것에 관련된 압축 방식들은 이미지들을 블록들로 분해하고, 출력에 포함된 정보를 제한하기 위한 하나 이상의 기법들을 이용하여 디지털 비디오 출력 비트스트림을 생성하는 것을 포함할 수 있다. 수신된 인코딩된 비트스트림은 제한된 정보로부터 블록들 및 소스 이미지(source image)들을 재생성하기 위하여 디코딩될 수 있다. 비디오 스트림, 또는 프레임 또는 블록과 같은 그 부분을 인코딩하는 것은 코딩 효율을 개선시키기 위하여 비디오 스트림에서의 시간적 또는 공간적 유사성들을 이용하는 것을 포함할 수 있다. 예컨대, 비디오 스트림의 현재의 블록은 이전에 코딩된 픽셀 값들 및 현재의 블록에서의 픽셀 값들 사이의 차이(잔차(residual))를 식별하는 것에 기초하여 인코딩될 수 있다. 이러한 방법으로, 잔차 및 잔차를 생성하기 위하여 이용된 파라미터들만이 인코딩된 비트스트림에 추가될 필요가 있다. 잔차는 손실 있는 양자화 단계(lossy quantization step)를 이용하여 인코딩될 수 있다.
이하에서 추가로 설명된 바와 같이, 잔차 블록은 픽셀 도메인(pixel domain)에 있을 수 있다. 잔차 블록은 주파수 도메인으로 변환될 수 있어서, 변환 계수들의 변환 블록을 초래할 수 있다. 변환 계수들은 양자화될 수 있어서, 양자화된 변환 계수들의 양자화된 변환 블록을 초래할 수 있다. 양자화된 계수들은 엔트로피 인코딩(entropy encode)될 수 있고, 인코딩된 비트스트림에 추가될 수 있다. 디코더는 인코딩된 비트스트림을 수신할 수 있고, 원래의 비디오 프레임을 재구성하기 위하여 양자화된 변환 계수들을 엔트로피 디코딩할 수 있다.
엔트로피 코딩은 인코딩된 비디오 비트스트림에서 발생하는 값들의 분포를 모델링하는 확률 모델(probability model)들에 의존하는 "무손실(lossless)" 코딩을 위한 기법이다. 값들의 측정된 또는 추정된 분포에 기초한 확률 모델들을 이용함으로써, 엔트로피 코딩은 이론적인 최소치에 근접한 비디오 데이터를 표현하기 위하여 요구된 비트들의 수를 감소시킬 수 있다. 실제적으로, 비디오 데이터를 표현하기 위하여 요구된 비트들의 수 ― 코딩은 비트들의 수에 대하여 수행됨 ― 에서의 실제적인 감소는 확률 모델의 정확도 및 코딩을 수행하기 위하여 이용된 고정소수점 산술(fixed-point arithmetic)의 연산 정확도의 함수일 수 있다.
인코딩된 비디오 비트스트림에서는, 많은 비트들이 2 가지 중의 하나를 위하여 이용된다: 컨텐츠 예측(content prediction)(예컨대, 인터 모드/모션 벡터 코딩, 인트라 예측 모드 코딩 등) 또는 잔차 코딩(예컨대, 변환 계수들) 중의 어느 하나. 인코더들은 계수 코딩에 소비된 비트들의 양/수를 감소시키기 위한 기법들을 이용할 수 있다. 예컨대, (이진 토큰 트리(binary token tree)로서 또한 지칭될 수 있는) 계수 토큰 트리는 이 토큰 트리에서의 각각의 가지(branch)를 위한 순방향-적응적(forward-adaptive) 확률들로 값의 범위를 특정한다. 토큰 기본 값(token base value)은 잔차를 형성하기 위하여, 코딩될 값으로부터 감산(subtract)되고, 그 다음으로, 블록은 고정된 확률들로 코딩된다. 역방향-적응성(backward-adaptivity)을 포함하는 사소한 변형예들을 갖는 유사한 방식이 또한 가능하다. 적응적 기법들은 비디오 스트림이 데이터의 특성들을 변화시키는 것에 적응하기 위하여 인코딩되고 있을 때, 확률 모델들을 변경할 수 있다. 어떤 경우든, 디코더는 비디오 비트스트림을 디코딩하기 위하여 엔트로피-코딩된 비디오 비트스트림을 인코딩하기 위해 이용된 확률 모델을 통지받는다(또는 이용가능하게 함).
양자화된 변환 블록은 제로(zero) 및 비-제로(non-zero) 양자화된 변환 계수들을 포함할 수 있다. 비-제로 계수들은 또한, 유효 계수(significant coefficient)들로서 본원에서 지칭된다. 양자화된 변환 블록을 인코딩하고 디코딩하는 것은 스캔 순서에 따라 변환 블록의 변환 계수들을 인코딩하고 디코딩하는 것을 포함할 수 있다. 양자화된 변환 블록을 인코딩하고 디코딩하는 것은 변환 블록에서의 최종 비-제로 양자화된 변환 계수(즉, 최종 유효 계수)인 유효 계수에 관한 정보를 인코딩하고 디코딩하는 것을 포함할 수 있다. 이것은 블록-종료(end-of-block; EOB) 포지션들의 코딩으로서 지칭된다. 어느 변환 계수가 최종 비-제로 변환 계수로서 지정되는지는 스캔 순서에 기초하여 결정된다.
일부 코딩 시스템들에서는, 최종 비-제로 계수의 데카르트 좌표들(즉, 양자화된 변환 블록에서의 열 및 행)이 코딩된다. 이것은 EOB 포지션들의 코딩에 대한 데카르트 좌표 접근법으로서 본원에서 지칭된다.
다른 코딩 시스템들에서는, 각각의 양자화된 변환 계수가 방문(visit)될 때(즉, 코딩되거나 디코딩될 때), 변환 계수가 최종 비-제로 계수인지 여부에 관한 정보가 코딩된다. 이와 같이, EOB 포지션들은 유효 계수 포지션들과 함께, 인터리빙 방식(interleaving manner)으로 코딩된다. 이것은 EOB 포지션들의 코딩에 대한 인터리빙 접근법으로서 본원에서 지칭된다.
이하에서 추가로 예시된 바와 같이, 데카르트 좌표 접근법은 변환 블록이 밀집(dense)될 때에 더 효율적일 수 있다. 밀집된 변환 블록은 비-제로 계수들(즉, 유효 계수들)의 수가 상대적으로 크도록 되어 있다. 다른 한편으로, 인터리빙 접근법은 변환 블록이 희소(sparse)할 때에 더 효율적일 수 있다. 희소 계수 블록은 비-제로 계수들의 수가 상대적으로 작은 것이다.
이 개시내용에 따른 구현예들은 EOB 포지션들을 코딩하기 위하여 데카르트 좌표 접근법 및 인터리빙 접근법의 장점들을 조합할 수 있으며, 그에 의해 비디오 데이터를 표현하기 위하여 요구된 비트들의 수를 감소시킨다. 본원에서의 교시내용들에 따른 EOB 포지션들의 코딩은 밀집 및 희소 변환 블록들 둘 모두에 대해 (예컨대, EOB 포지션을 코딩하기 위하여 요구된 비트들의 측면에서) 매우 양호하게 수행될 수 있다.
이 개시내용에 따른 구현예들은 변환 블록의 변환 계수들을, 차원(dimension)들을 가지는 좌표계로 맵핑한다. 차원의 값들의 일부는 유의(즉, 비-제로) 변환 계수들을 포함한다. 예컨대, (이하에서 설명된) 데카르트 좌표계에서는, 차원이 열 차원일 수 있다. 도 10의 (변환 블록인) 블록(1050)을 참조하면, 차원 값 6(즉, 열 인덱스 6)은 유효 계수들, 즉, 계수(1052) 및 계수(1056)를 포함하는 반면; 차원 값 3(3)(즉, 열 인덱스 3)은 비-제로 계수들을 포함하지 않는다. 유효 계수들을 포함하는 차원 값에 대하여, 차원 값이 최종 비-제로 계수를 포함하는지 또는 포함하지 않는지 여부를 오직 한 번 코딩함으로써, EOB 포지션들을 코딩하기 위하여 요구된 비트들의 수가 감소될 수 있다. 좌표계들의 예들은 데카르트 좌표계, 극 좌표계, 데카르트 그룹화 좌표계, 및 계수 그룹 좌표계를 포함한다. 다른 좌표계들은 이 개시내용의 구현예들에 따라 또한 가능하다. 본원에서 설명된 좌표계들에서는, 2 개의 차원들이 좌표계에 대해 설명된다. 그러나, 좌표계는 2 개를 초과하는 차원들을 포함할 수 있다.
위에서 언급된 바와 같이, 좌표계는 데카르트 좌표계일 수 있고, 차원들은 변환 블록의 열들 및 행들일 수 있다. 좌표계는 DC 계수(즉, 변환 블록의 블록 위치 (0, 0))가 중심일 수 있고 중심으로부터의 거리가 반-대각 라인(anti-diagonal line)들을 이용하여 측정될 수 있는 극 좌표계일 수 있다. 반-대각 라인들은 제1 차원일 수 있고, 반-대각 라인들 상의 포지션들은 제2 차원일 수 있다. 좌표계는 변환 계수들이 번호부여된 그룹들로 그룹화되도록 한 그룹화 계일 수 있고, 제1 차원은 그룹 인덱스일 수 있고, 제2 차원은 그룹 내에서의 변환 계수의 오프셋 포지션일 수 있다. 다른 좌표계들이 또한 가능하다.
비디오 압축에서의 최종 유효 계수 플래그들의 개선된 코딩은 교시내용들이 편입될 수 있는 시스템을 참조하여 먼저 본원에서 설명된다.
도 1은 비디오 인코딩 및 디코딩 시스템(100)의 개략도이다. 송신국(102)은 예컨대, 도 2에서 설명된 것과 같은 하드웨어의 내부 구성을 가지는 컴퓨터일 수 있다. 그러나, 송신국(102)의 다른 적당한 구현예들이 가능하다. 예컨대, 송신국(102)의 프로세싱은 다수의 디바이스들 사이에서 분산될 수 있다.
네트워크(104)는 비디오 스트림의 인코딩 및 디코딩을 위해 송신국(102)과 수신국(106)을 연결시킬 수 있다. 구체적으로, 비디오 스트림은 송신국(102)에서 인코딩될 수 있고, 인코딩된 비디오 스트림은 수신국(106)에서 디코딩될 수 있다. 네트워크(104)는 예컨대, 인터넷일 수 있다. 네트워크(104)는 또한, 로컬 영역 네트워크(local area network; LAN), 광역 네트워크(wide area network; WAN), 가상 사설 네트워크(virtual private network; VPN), 셀룰러 전화 네트워크, 또는 비디오 스트림을 송신국(102)으로부터, 이 예에서, 수신국(106)으로 전달하는 임의의 다른 수단일 수 있다.
수신국(106)은 이 예에서, 도 2에서 설명된 것과 같은 하드웨어의 내부 구성을 가지는 컴퓨터일 수 있다. 그러나, 수신국(106)의 다른 적당한 구현예들이 가능하다. 예컨대, 수신국(106)의 프로세싱은 다수의 디바이스들 사이에서 분산될 수 있다.
비디오 인코딩 및 디코딩 시스템(100)의 다른 구현예들이 가능하다. 예컨대, 구현예는 네트워크(104)를 생략할 수 있다. 또 다른 구현예에서, 비디오 스트림은 인코딩될 수 있고, 그 다음으로, 더 이후의 시간에, 수신국(106) 또는 메모리를 가지는 임의의 다른 디바이스로의 송신을 위하여 저장될 수 있다. 하나의 구현예에서, 수신국(106)은 (예컨대, 네트워크(104), 컴퓨터 버스, 및/또는 일부 통신 경로를 통해) 인코딩된 비디오 스트림을 수신하고, 더 이후의 디코딩을 위하여 비디오 스트림을 저장한다. 일 예의 구현예에서, 실시간 전송 프로토콜(real-time transport protocol; RTP)은 네트워크(104) 상에서의 인코딩된 비디오의 송신을 위하여 이용된다. 또 다른 구현예에서, RTP 이외의 전송 프로토콜, 예컨대, HTTP-기반 비디오 스트리밍 프로토콜이 이용될 수 있다.
예컨대, 비디오 회의 시스템에서 이용될 때, 송신국(102) 및/또는 수신국(106)은 이하에서 설명된 바와 같이 비디오 스트림을 인코딩하는 것 및 디코딩하는 것 둘 모두를 위한 능력을 포함할 수 있다. 예컨대, 수신국(106)은, 디코딩하고 뷰잉(view)할 인코딩된 비디오 비트스트림을 비디오 회의 서버(예컨대, 송신국(102))로부터 수신하고, 추가로, 그 자신의 비디오 비트스트림을 인코딩하여 다른 참여자들에 의한 디코딩 및 뷰잉을 위해 비디오 회의 서버로 송신하는 비디오 회의 참여자일 수 있다.
도 2는 송신국 또는 수신국을 구현할 수 있는 컴퓨팅 디바이스(200)의 예의 블록도이다. 예컨대, 컴퓨팅 디바이스(200)는 도 1의 송신국(102) 및 수신국(106) 중의 하나 또는 둘 모두를 구현할 수 있다. 컴퓨팅 디바이스(200)는 다수의 컴퓨팅 디바이스들을 포함하는 컴퓨팅 시스템의 형태, 또는 단일 컴퓨팅 디바이스 예컨대, 이동 전화, 태블릿 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 데스크톱 컴퓨터 등의 형태일 수 있다.
컴퓨팅 디바이스(200)에서의 CPU(202)는 중앙 프로세싱 유닛일 수 있다. 대안적으로, CPU(202)는 지금 현존하거나 이후에 개발된, 정보를 조작할 수 있거나 프로세싱할 수 있는 임의의 다른 유형의 디바이스 또는 다수의 디바이스들일 수 있다. 개시된 구현예들은 도시된 바와 같은 단일 프로세서, 예컨대, CPU(202)로 실시될 수 있지만, 속력 및 효율에서의 장점들은 하나를 초과하는 프로세서를 이용하여 달성될 수 있다.
컴퓨팅 디바이스(200)에서의 메모리(204)는 구현예에서 판독-전용 메모리(read-only memory; ROM) 디바이스 또는 랜덤 액세스 메모리(random access memory; RAM) 디바이스일 수 있다. 임의의 다른 적당한 유형의 저장 디바이스가 메모리(204)로서 이용될 수 있다. 메모리(204)는 버스(212)를 이용하여 CPU(202)에 의해 액세스되는 코드 및 데이터(206)를 포함할 수 있다. 메모리(204)는 운영 체제(208) 및 애플리케이션 프로그램들(210)을 더 포함할 수 있고, 애플리케이션 프로그램(210)은 CPU(202)가 여기에서 설명된 방법들을 수행하는 것을 허용하는 적어도 하나의 프로그램을 포함한다. 예컨대, 애플리케이션 프로그램(210)은, 여기에서 설명된 방법들을 수행하는 비디오 코딩 애플리케이션을 더 포함하는 애플리케이션들 1 내지 N을 포함할 수 있다. 컴퓨팅 디바이스(200)는 또한, 이동식인 컴퓨팅 디바이스(200)와 함께 이용된 예컨대, 메모리 카드일 수 있는 보조 스토리지(secondary storage)(214)를 포함할 수 있다. 비디오 통신 세션들은 상당한 양의 정보를 포함할 수 있으므로, 이들은 전체적으로 또는 부분적으로 보조 스토리지(214)에 저장될 수 있고, 프로세싱을 위하여 필요한 바와 같이 메모리(204)로 로딩될 수 있다.
컴퓨팅 디바이스(200)는 또한, 디스플레이(218)와 같은 하나 이상의 출력 디바이스들을 포함할 수 있다. 디스플레이(218)는 하나의 예에서, 디스플레이를, 터치 입력들을 감지하도록 동작가능한 터치 감지 엘리먼트와 조합하는 터치 감지 디스플레이일 수 있다. 디스플레이(218)는 버스(212)를 통해 CPU(202)에 결합될 수 있다. 사용자가 컴퓨팅 디바이스(200)를 프로그래밍하거나, 또는 그렇지 않을 경우에 이용하는 것을 허용하는 다른 출력 디바이스들은 디스플레이(218)에 추가적으로, 또는 디스플레이(218)에 대한 대안으로서 제공될 수 있다. 출력 디바이스가 디스플레이이거나 디스플레이를 포함할 때, 디스플레이는 액정 디스플레이(liquid crystal display; LCD), 음극선관(cathode-ray tube; CRT) 디스플레이, 또는 유기 LED(organic LED; OLED) 디스플레이와 같은 발광 다이오드(light emitting diode; LED) 디스플레이에 의한 것을 포함하는 다양한 방법들로 구현될 수 있다.
컴퓨팅 디바이스(200)는 또한, 이미지-감지 디바이스(220) 예컨대, 컴퓨팅 디바이스(200)를 동작시키는 사용자의 이미지와 같은 이미지를 감지할 수 있는, 지금 현존하거나 이후에 개발된 카메라 또는 임의의 다른 이미지-감지 디바이스(220)를 포함할 수 있거나 이와 통신할 수 있다. 이미지-감지 디바이스(220)는 그것이 컴퓨팅 디바이스(200)를 동작시키는 사용자를 향해 지향되도록 포지셔닝(position)될 수 있다. 예에서, 이미지-감지 디바이스(220)의 포지션 및 광학 축은, 시야(field of vision)가 디스플레이(218)에 직접적으로 인접하고 디스플레이(218)가 그로부터 가시적인 영역을 포함하도록 구성될 수 있다.
컴퓨팅 디바이스(200)는 또한, 사운드-감지 디바이스(222) 예컨대, 컴퓨팅 디바이스(200) 근처에서 사운드들을 감지할 수 있는, 지금 현존하거나 이후에 개발된 마이크로폰 또는 임의의 다른 사운드-감지 디바이스를 포함할 수 있거나 이와 통신할 수 있다. 사운드-감지 디바이스(222)는 그것이 컴퓨팅 디바이스(200)를 동작시키는 사용자를 향해 지향되도록 포지셔닝될 수 있고, 사용자가 컴퓨팅 디바이스(200)를 동작시키는 동안에 사용자에 의해 행해진 사운드들 예컨대, 음성(speech) 또는 다른 발성(utterance)들을 수신하도록 구성될 수 있다.
도 2는 단일 유닛으로 통합되는 것으로서 컴퓨팅 디바이스(200)의 CPU(202) 및 메모리(204)를 도시하지만, 다른 구성들이 사용될 수 있다. CPU(202)의 동작들은 직접적으로 또는 로컬 영역 또는 다른 네트워크에 걸쳐 결합될 수 있는 다수의 머신들(각각의 머신은 프로세서들 중의 하나 이상을 가짐)에 걸쳐 분산될 수 있다. 메모리(204)는 네트워크-기반 메모리 또는 컴퓨팅 디바이스(200)의 동작들을 수행하는 다수의 머신들에서의 메모리와 같이, 다수의 머신들에 걸쳐 분산될 수 있다. 단일 버스로서 여기에서 도시되지만, 컴퓨팅 디바이스(200)의 버스(212)는 다수의 버스들로 구성될 수 있다. 또한, 보조 스토리지(214)는 컴퓨팅 디바이스(200)의 다른 컴포넌트들에 직접적으로 결합될 수 있거나 네트워크를 통해 액세스될 수 있고, 메모리 카드와 같은 단일 통합된 유닛, 또는 다수의 메모리 카드들과 같은 다수의 유닛들을 포함할 수 있다. 컴퓨팅 디바이스(200)는 이에 따라, 널리 다양한 구성들로 구현될 수 있다.
도 3은 인코딩되고 그 후에 디코딩될 비디오 스트림(300)의 예의 도면이다. 비디오 스트림(300)은 비디오 시퀀스(302)를 포함한다. 다음 레벨에서, 비디오 시퀀스(302)는 다수의 인접한 프레임들(304)을 포함한다. 3 개의 프레임들은 인접한 프레임들(304)로서 도시되지만, 비디오 시퀀스(302)는 임의의 수의 인접한 프레임들(304)을 포함할 수 있다. 인접한 프레임들(304)은 그 다음으로, 개별적인 프레임들, 예컨대, 프레임(306)으로 세분(subdivide)될 수 있다. 다음 레벨에서, 프레임(306)은 일련의 세그먼트(segment)들(308) 또는 평면들로 분할될 수 있다. 세그먼트들(308)은 예컨대, 병렬 프로세싱(parallel processing)을 허용하는 프레임들의 서브세트(subset)들일 수 있다. 세그먼트들(308)은 또한, 비디오 데이터를 별도의 컬러(color)들로 분리시킬 수 있는 프레임들의 서브세트들일 수 있다. 예컨대, 컬러 비디오 데이터의 프레임(306)은 휘도 평면(luminance plane) 및 2 개의 색차 평면(chrominance plane)들을 포함할 수 있다. 세그먼트들(308)은 상이한 해상도들에서 샘플링될 수 있다.
프레임(306)이 세그먼트들(308)로 분할되든지 또는 그렇지 않든지, 프레임(306)은 예컨대, 프레임(306)에서의 16x16 픽셀들에 대응하는 데이터를 포함할 수 있는 블록들(310)로 추가로 세분될 수 있다. 블록들(310)은 또한, 픽셀 데이터의 하나 이상의 세그먼트들(308)로부터의 데이터를 포함하도록 배열될 수 있다. 블록들(310)은 또한, 4x4 픽셀들, 8x8 픽셀들, 16x8 픽셀들, 8x16 픽셀들, 16x16 픽셀들 또는 더 큰 것과 같은 임의의 다른 적당한 크기일 수 있다.
도 4는 이 개시내용의 구현예들에 따른, 인코더(400)의 블록도이다. 인코더(400)는 위에서 설명된 바와 같이, 이를테면 메모리 예컨대, 메모리(204)에 저장된 컴퓨터 소프트웨어 프로그램을 제공함으로써 송신국(102)에서 구현될 수 있다. 컴퓨터 소프트웨어 프로그램은, CPU(202)와 같은 프로세서에 의해 실행될 때, 송신국(102)으로 하여금, 본원에서 설명된 방식으로 비디오 데이터를 인코딩하게 하는 머신 명령들을 포함할 수 있다. 인코더(400)는 또한, 예컨대, 송신국(102)에 포함된 특화된 하드웨어로서 구현될 수 있다. 인코더(400)는 비디오 스트림(300)을 입력으로서 이용하여 인코딩된 또는 압축된 비트스트림(420)을 생성하기 위하여 (실선 연결 라인들에 의해 도시된) 순방향 경로에서 다양한 기능들을 수행하기 위한 다음의 스테이지(stage)들을 가진다: 인트라/인터(intra/inter) 예측 스테이지(402), 변환 스테이지(404), 양자화 스테이지(406), 및 엔트로피 인코딩 스테이지(408). 인코더(400)는 또한, 미래의 블록들의 인코딩을 위하여 프레임을 재구성하기 위한 (점선 연결 라인들에 의해 도시된) 재구성 경로를 포함할 수 있다. 도 4에서, 인코더(400)는 재구성 경로에서 다양한 기능들을 수행하기 위한 다음의 스테이지들을 가진다: 역양자화 스테이지(410), 역 변환 스테이지(412), 재구성 스테이지(414), 및 루프 필터링 스테이지(416). 인코더(400)의 다른 구조적 변형예들은 비디오 스트림(300)을 인코딩하기 위하여 이용될 수 있다.
비디오 스트림(300)이 인코딩을 위하여 제시될 때, 프레임(306)은 블록들의 단위로 프로세싱될 수 있다. 인트라/인터 예측 스테이지(402)에서, 블록은 인트라-프레임 예측(또한, 인트라-예측(intra-prediction)으로 칭해짐) 또는 인터-프레임 예측(또한, 인터-예측(inter-prediction)으로 칭해짐), 또는 둘 모두의 조합을 이용하여 인코딩될 수 있다. 어떤 경우든, 예측 블록이 형성될 수 있다. 인트라-예측의 경우에, 예측 블록의 전부 또는 일부는 이전에 인코딩되었고 재구성되었던 현재의 프레임에서의 샘플들로부터 형성될 수 있다. 인터-예측의 경우에, 예측 블록의 전부 또는 일부는 모션 벡터(motion vector)들을 이용하여 결정된 하나 이상의 이전에 구성된 참조 프레임들에서의 샘플들로부터 형성될 수 있다.
다음으로, 도 4를 여전히 참조하면, 예측 블록은 잔차 블록(또한, 잔차로서 칭해짐)을 생성하기 위하여 인트라/인터 예측 스테이지(402)에서 현재의 블록으로부터 감산될 수 있다. 변환 스테이지(404)는 블록-기반 변환들을 이용하여 예컨대, 주파수 도메인에서 잔차를 변환 계수들로 변환한다. 이러한 블록-기반 변환들은 예컨대, 이산 코사인 변환(Discrete Cosine Transform; DCT) 및 비대칭적 이산 사인 변환(Asymmetric Discrete Sine Transform; ADST)을 포함한다. 다른 블록-기반 변환들이 가능하다. 또한, 상이한 변환들의 조합들은 단일 잔차에 적용될 수 있다. 변환의 적용의 하나의 예에서, DCT는 잔차 블록을, 변환 계수 값들이 공간적 주파수에 기초하는 주파수 도메인으로 변환한다. 행렬의 상단-좌측에서의 최저 주파수 (DC) 계수 및 행렬의 하단-우측에서의 최고 주파수 계수. 예측 블록의 크기, 및 이에 따른 결과적인 잔차 블록은 변환 블록의 크기와는 상이할 수 있다는 것은 주목할 가치가 있다. 예컨대, 예측 블록은 별도의 변환들이 적용되는 더 작은 블록들로 분할될 수 있다.
양자화 스테이지(406)는 양자화기 값 또는 양자화 레벨을 이용하여 변환 계수들을, 양자화된 변환 계수들로서 지칭되는 이산 양자 값(discrete quantum value)들로 변환한다. 예컨대, 변환 계수들은 양자화기 값에 의해 제산(divide)될 수 있고 절단(truncate)될 수 있다. 양자화된 변환 계수들은 그 다음으로, 엔트로피 인코딩 스테이지(408)에 의해 엔트로피 인코딩된다. 엔트로피 코딩은 토큰(token) 및 이진 트리(binary tree)들을 포함하는 임의의 수의 기법들을 이용하여 수행될 수 있다. 엔트로피-인코딩된 계수들은 예컨대, 이용된 예측의 유형, 변환 유형, 모션 벡터들, 및 양자화기 값을 포함할 수 있는, 블록을 디코딩하기 위하여 이용된 다른 정보와 함께, 그 다음으로, 압축된 비트스트림(420)으로 출력된다. 블록을 디코딩하기 위한 정보는 압축된 비트스트림(420) 내의 블록, 프레임, 슬라이스(slice), 및/또는 섹션 헤더들로 엔트로피 코딩될 수 있다. 압축된 비트스트림(420)은 또한, 인코딩된 비디오 스트림 또는 인코딩된 비디오 비트스트림으로서 지칭될 수 있고, 용어들은 본원에서 상호 교환가능하게 이용될 것이다.
(점선 연결 라인들에 의해 도시된) 도 4에서의 재구성 경로는 (이하에서 설명된) 인코더(400) 및 디코더(500) 둘 모두가 압축된 비트스트림(420)을 디코딩하기 위하여 동일한 참조 프레임들 및 블록들을 이용한다는 것을 보장하기 위하여 이용될 수 있다. 재구성 경로는, 역양자화 스테이지(410)에서 양자화된 변환 계수들을 역양자화하고 역 변환 스테이지(412)에서 역양자화된 변환 계수들을 역 변환하여, 미분 잔차 블록(derivative residual block)(또한, 미분 잔차로 칭해짐)을 생성하는 것을 포함하는, 이하에서 더 상세하게 논의되는 디코딩 프로세스 동안에 발생하는 기능들과 유사한 기능들을 수행한다. 재구성 스테이지(414)에서, 인트라/인터 예측 스테이지(402)에서 예측되었던 예측 블록은 재구성된 블록을 생성하기 위하여 미분 잔차에 추가될 수 있다. 루프 필터링 스테이지(416)는 블록화 아티팩트(blocking artifact)들과 같은 왜곡을 감소시키기 위하여 재구성된 블록에 적용될 수 있다.
인코더(400)의 다른 변형예들은 압축된 비트스트림(420)을 인코딩하기 위하여 이용될 수 있다. 예컨대, 비-변환 기반 인코더(400)는 특정한 블록들 또는 프레임들을 위한 변환 스테이지(404) 없이 직접적으로 잔차 신호를 양자화할 수 있다. 또 다른 구현예에서, 인코더(400)는 단일 스테이지로 조합된 양자화 스테이지(406) 및 역양자화 스테이지(410)를 가질 수 있다.
도 5는 이 개시내용의 구현예들에 따른, 디코더(500)의 블록도이다. 디코더(500)는 예컨대, 메모리(204)에 저장된 컴퓨터 소프트웨어 프로그램을 제공함으로써, 수신국(106)에서 구현될 수 있다. 컴퓨터 소프트웨어 프로그램은, CPU(202)와 같은 프로세서에 의해 실행될 때, 수신국(106)으로 하여금, 이하의 도 8 및 도 9에서 설명된 방식으로 비디오 데이터를 디코딩하게 하는 머신 명령들을 포함할 수 있다. 디코더(500)는 또한, 예컨대, 송신국(102) 또는 수신국(106)에 포함된 하드웨어로 구현될 수 있다. 위에서 논의된 인코더(400)의 재구성 경로와 유사한 디코더(500)는 하나의 예에서, 압축된 비트스트림(420)으로부터 출력 비디오 스트림(516)을 생성하기 위해 다양한 기능들을 수행하기 위한 다음의 스테이지들을 포함한다: 엔트로피 디코딩 스테이지(502), 역양자화 스테이지(504), 역 변환 스테이지(506), 인트라/인터-예측 스테이지(508), 재구성 스테이지(510), 루프 필터링 스테이지(512), 및 비블록화 필터링(deblocking filtering) 스테이지(514). 디코더(500)의 다른 구조적 변형예들은 압축된 비트스트림(420)을 디코딩하기 위하여 이용될 수 있다.
압축된 비트스트림(420)이 디코딩을 위하여 제시될 때, 압축된 비트스트림(420) 내의 데이터 엘리먼트(data element)들은 양자화된 변환 계수들의 세트를 생성하기 위하여 엔트로피 디코딩 스테이지(502)에 의해 디코딩될 수 있다. 역양자화 스테이지(504)는 (예컨대, 양자화된 변환 계수들을 양자화기 값과 승산(multiply)함으로써) 양자화된 변환 계수들을 역양자화하고, 역 변환 스테이지(506)는 인코더(400)에서의 역 변환 스테이지(412)에 의해 생성된 것과 동일할 수 있는 미분 잔차를 생성하기 위하여 선택된 변환 유형을 이용하여 역양자화된 변환 계수들을 역 변환한다. 압축된 비트스트림(420)으로부터 디코딩된 헤더 정보를 이용하면, 디코더(500)는 인코더(400)에서, 예컨대, 인트라/인터 예측 스테이지(402)에서 생성되었던 것과 동일한 예측 블록을 생성하기 위하여 인트라/인터-예측 스테이지(508)를 이용할 수 있다. 재구성 스테이지(510)에서, 예측 블록은 재구성된 블록을 생성하기 위하여 미분 잔차에 추가될 수 있다. 루프 필터링 스테이지(512)는 블록화 아티팩트들을 감소시키기 위하여 재구성된 블록에 적용될 수 있다. 다른 필터링은 재구성된 블록에 적용될 수 있다. 예에서, 비블록화 필터링 스테이지(514)는 블록화 왜곡(blocking distortion)을 감소시키기 위하여 재구성된 블록에 적용되고, 결과는 출력 비디오 스트림(516)으로서 출력된다. 출력 비디오 스트림(516)은 또한, 디코딩된 비디오 스트림으로서 지칭될 수 있고, 용어들은 본원에서 상호 교환가능하게 이용될 것이다.
디코더(500)의 다른 변형예들은 압축된 비트스트림(420)을 디코딩하기 위하여 이용될 수 있다. 예컨대, 디코더(500)는 비블록화 필터링 스테이지(514) 없이 출력 비디오 스트림(516)을 생성할 수 있다. 디코더(500)의 일부 구현예들에서, 비블록화 필터링 스테이지(514)는 루프 필터링 스테이지(512) 전에 적용된다. 추가적으로 또는 대안적으로, 인코더(400)는 루프 필터링 스테이지(416)에 추가적으로, 비블록화 필터링 스테이지를 포함한다.
도 6은 이 개시내용의 구현예들에 따른, 양자화된 변환 계수들을 예시하는 도면(600)이다. 도면(600)은 현재의 블록(620), 스캔 순서(602), 양자화된 변환 블록(604), 비-제로 맵(606), 블록-종료 맵(622), 및 부호 맵(626)을 도시한다. 현재의 블록(620)은 4x4 블록으로서 예시된다. 그러나, 임의의 블록 크기가 가능하다. 예컨대, 현재의 블록은 4x4, 8x8, 16x8, 8x16, 32x32, 또는 임의의 다른 정사각형 또는 직사각형 블록 크기의 크기(즉, 차원들)를 가질 수 있다. 현재의 블록(620)은 현재의 프레임의 블록일 수 있다. 또 다른 예에서, 현재의 프레임은 각각이 블록들의 집합을 포함하는, (도 3의 세그먼트들(308)과 같은) 세그먼트들, 타일(tile)들 등으로 파티션화(partition)될 수 있고, 여기서, 현재의 블록은 파티션의 블록이다.
양자화된 변환 블록(604)은 현재의 블록(620)의 크기와 유사한 크기의 블록일 수 있다. 양자화된 변환 블록(604)은 비-제로 계수들(예컨대, 계수(608)) 및 제로 계수들(예컨대, 계수(610))을 포함한다. 위에서 설명된 바와 같이, 양자화된 변환 블록(604)은 현재의 블록(620)에 대응하는 잔차 블록에 대한 양자화된 변환 계수들을 포함한다. 또한, 위에서 설명된 바와 같이, 양자화된 변환 계수들은 도 4의 엔트로피 코딩 스테이지(408)와 같은 엔트로피-코딩 국면에 의해 엔트로피 코딩된다.
양자화된 변환 계수를 엔트로피 코딩하는 것은 예컨대, 도 7에 대하여 이하에서 설명된 바와 같은 이진화된 변환 계수의 이진 심볼들을 코딩하기 위한 조건적 확률들의 추정치를 제공하는 컨텍스트 모델(context model)(또한, 확률 컨텍스트 모델, 확률 모델, 모델, 및 컨텍스트로서 지칭됨)의 선택을 수반할 수 있다. 양자화된 변환 계수를 엔트로피 코딩할 때, 추가적인 정보는 컨텍스트 모델을 선택하기 위한 컨텍스트로서 이용될 수 있다. 예컨대, 이전에 코딩된 변환 계수들의 크기들은 확률 모델을 결정하기 위하여 적어도 부분적으로 이용될 수 있다.
변환 블록을 인코딩하기 위하여, 비디오 코딩 시스템은 스캔 순서로 변환 블록을 횡단(traverse)할 수 있고, 양자화된 변환 계수들이 각각 횡단(즉, 방문됨)될 때에 양자화된 변환 계수들을 인코딩(예컨대, 엔트로피 인코딩)할 수 있다. 스캔 순서(602)와 같은 지그-재그(zig-zag) 스캔 순서에서는, 변환 블록(또한, DC 계수로서 알려짐)의 상단 좌측 코너가 먼저 횡단되고 인코딩되고, 스캔 순서에서의 다음 계수(즉, "1"로 표기된 위치에 대응하는 변환 계수)가 횡단되고 인코딩되는 등과 같다. 지그-재그 스캔 순서(즉, 스캔 순서(602))에서는, 현재의 양자화된 변환 계수(예컨대, 인코딩될 변환 계수)의 상부 및 좌측의 일부 양자화된 변환 계수들이 먼저 횡단된다. 다른 스캔 순서들이 가능하다. 양자화된 변환 계수들의 1 차원(one-dimensional) 구조(예컨대, 어레이(array))는 스캔 순서를 이용한 2 차원(two-dimensional) 양자화된 변환 블록의 횡단으로부터 기인할 수 있다.
양자화된 변환 블록(604)을 인코딩하는 것은 양자화된 변환 블록(604)의 어느 양자화된 변환 계수들이 제로이고 어느 것이 비-제로인지를 표시하는 비-제로 맵(606)을 결정하는 것을 포함할 수 있다. 비-제로 계수 및 제로 계수는 비-제로 맵에서, 값들 1(1) 및 제로(0)로 각각 표시될 수 있다. 예컨대, 비-제로 맵(606)은 계수(608)에 대응하는 데카르트 위치 (0, 0)에서의 비-제로(607), 및 계수(610)에 대응하는 데카르트 위치 (2, 0)에서의 제로(608)를 포함한다.
양자화된 변환 블록(604)을 인코딩하는 것은 블록-종료 맵(622)을 생성하고 인코딩하는 것을 포함할 수 있다. 블록-종료 맵은 양자화된 변환 블록(604)의 비-제로 양자화된 변환 계수가 주어진 스캔 순서에 대하여 최종 비-제로 계수인지 여부를 표시할 수 있다. 비-제로 계수가 변환 블록에서 최종 비-제로 계수가 아닐 경우에, 그것은 블록-종료 맵에서 이진 비트 제로(0)로 표시될 수 있다. 다른 한편으로, 비-제로 계수가 변환 블록에서 최종 비-제로 계수일 경우에, 그것은 블록-종료 맵에서 이진 값 1(일)로 표시될 수 있다. 예컨대, 스캔 포지션 11에 대응하는 양자화된 변환 계수(즉, 최종 비-제로 양자화된 변환 계수(628))가 양자화된 변환 블록(604)의 최종 비-제로 계수일 때, 그것은 1(일)의 블록-종료 값(624)으로 표시되고; 모든 다른 비-제로 변환 계수들은 제로로 표시된다.
양자화된 변환 블록(604)을 인코딩하는 것은 부호 맵(626)을 생성하고 인코딩하는 것을 포함할 수 있다. 부호 맵(626)은 양자화된 변환 블록(604)의 어느 비-제로 양자화된 변환 계수들이 양수(positive) 값들을 가지고 어느 것이 음수(negative) 값들을 가지는지를 표시한다. 제로인 변환 계수들은 부호 맵에서 표시될 필요가 없다. 부호 맵(626)은 양자화된 변환 블록(604)을 위한 부호 맵의 예를 예시한다. 부호 맵(626)에서, 음수 양자화된 변환 계수들은 0으로 표시되고, 양수 양자화된 변환 계수들은 1로 표시될 수 있다.
위에서 언급된 바와 같이, 인터리빙 접근법은 최종 비-제로 양자화된 변환 계수(628)의 EOB 포지션을 인코딩하고 및/또는 디코딩하기 위하여 일부 코딩 시스템들에 의해 이용될 수 있다. 인터리빙 접근법의 예가 이제 주어진다.
인터리빙 접근법에서, 플래그(flag)(예컨대, 신택스 엘리먼트(syntax element) sig_coef_flag)는 인코딩되거나 디코딩되고 있는 계수가 유효한(significant)지 아닌지 여부를 표시하기 위하여 이용될 수 있다. 변환 계수를 위하여, 신택스 엘리먼트 sig_coef_flag는 질문: 변환 계수가 제로 또는 비-제로인가에 답변한다. 예컨대, 신택스 엘리먼트 sig_coef_flag가 제로(0)일 경우에, 현재의 변환 계수는 제로이고; sig_coef_flag가 일(1)일 경우에, 현재의 변환 계수는 비-제로이다.
인터리빙 접근법에서, 또 다른 플래그는 스캔 순서(602)와 같은 스캔 순서가 주어지면, 코딩되는(즉, 인코딩되거나 디코딩됨) 계수가 변환 블록의 최종 유의 플래그인지 여부를 표시한다. 플래그는 last_sig_flag로 칭해진 신택스 엘리먼트일 수 있다. 비-제로 변환 계수에 대해, 신택스 엘리먼트 last_sig_flag는 질문: 변환 계수가 최종 비-제로 계수인가에 답변한다. 제로(0)의 값은 변환 계수가 최종 비-제로 계수가 아닌 것을 표시할 수 있고, 일(1)의 값은 변환 계수가 최종 비-제로 계수인 것을 표시할 수 있다. 신택스 엘리먼트 last_sig_flag는 변환 블록의 모든 각각의 유효 계수 후에 인코딩될 수 있고 디코딩될 수 있다.
이와 같이, 현재의 계수가 비-제로인 것을 표시하는 신택스 엘리먼트 sig_coef_flag(즉, 일(1)의 값을 가지는 sig_coef_flag)가 인코딩되거나 디코딩될 때, 대응하는 신택스 엘리먼트 last_sig_flag는 현재의 비=제로 계수가 현재의 블록에서 최종 유효 계수인지(예컨대, last_sig_flag = 1) 또는 그렇지 않은지(예컨대, last_sig_flag = 0)를 표시한다. 따라서, 설정되는(예컨대, last_sig_flag = 1) 플래그 last_sig_flag가 인코딩되거나 디코딩될 때, 현재의 블록의 EOB 포지션이 결정된다.
NxN 변환 블록에서의 EOB 포지션을 코딩하기 위한 인터리빙 접근법은 다음과 같이 요약될 수 있다:
단계 1에서, 스캔 포지션 i를 제로로 초기화함(즉, i = 0). 스캔 포지션 i는 스캔 순서 포지션에 대응한다. 단계 2에서, 스캔 순서 포지션 i에서 신택스 엘리먼트 sig_coef_flag를 인코딩/디코딩함. 단계 3에서, 신택스 엘리먼트 sig_coef_flag가 설정(예컨대, sig_coef_flag = 1)되는지 여부를 결정하고, 그러할 경우에, 스캔 순서 포지션 i에서 신택스 엘리먼트 last_sig_flag를 인코딩/디코딩함. 단계 4에서, i를 증가시킴(즉, i = i+1). 단계들 2 내지 4는 그 다음으로, EOB 포지션이 인코딩/디코딩될 때까지(즉, last_sig_flag = 1), 또는 블록 종료에 도달될 때까지(즉, i가 값 N*N에 도달하였을 때) 반복된다. 단계 3에서, 포지션 i에서의 신택스 엘리먼트 last_sig_flag는 블록 종료에 도달될 경우에(즉, i = N*N-1) 인코딩/디코딩되지 않는다. 이러한 경우에, 변환 블록의 최종 계수(즉, 최종 스캔 순서 포지션에서의 변환 계수)는 EOB인 것으로 가정된다.
위의 방식의 변형예에서, 신택스 엘리먼트 last_sig_flag는, 현재의 블록에서의 현재의 포지션에서 하나를 포함하는 모든 나머지 계수들이 제로들인 것을 표시하는 eob_flag에 의해 대체될 수 있다. 그 경우에, 신택스 엘리먼트 eob_flag는 설정된 sig_coef_flag 직후에 코딩될(인코딩/디코딩됨) 수 있다. 즉, sig_coef_flag가 포지션 i에서 설정될 경우에, eob 플래그는 포지션 i+1에서 코딩된다.
인터리빙 접근법을 이용하는 코딩 시스템의 또 다른 예는 도 7에 대하여 이제 제공된다. 도 7의 예에서는, 계수 이진 트리가 이용된다.
도 7은 이 개시내용의 구현예들에 따른, 변환 블록들을 엔트로피 코딩하기 위하여 이용될 수 있는 계수 토큰 트리(700)의 도면이다. 계수 토큰 트리(700)는 트리의 각각의 노드에서, 2 개의 가지들 중의 하나가 취해져야(즉, 횡단됨) 하기 때문에 이진 트리로서 지칭된다. 계수 토큰 트리(700)는 A 및 B로 표기된 노드들에 각각 대응하는 루트 노드(root node)(701) 및 노드(703)를 포함한다.
도 6에 대하여 위에서 설명된 바와 같이, 블록-종료(EOB) 토큰이 블록에 대하여 검출될 때, 현재의 블록에서의 계수들의 코딩은 종결될 수 있고, 블록에서의 나머지 계수들은 제로인 것으로 추론될 수 있다. 이와 같이, EOB 포지션들의 코딩은 비디오 코딩 시스템에서의 계수의 필수적인 부분일 수 있다.
계수 토큰 트리(700)를 이용하면, 이진 디지트(binary digit)들의 스트링(string)은 (도 6의 양자화된 변환 블록(604)과 같은) 양자화된 변환 블록의 양자화된 계수(예컨대, 도 6의 계수들(608, 610))에 대해 생성된다.
예에서, NxN 블록(예컨대, 양자화된 변환 블록(604))에서의 양자화된 계수들은 규정된 스캔 순서(예컨대, 도 6의 스캔 순서(602))를 따라 1D(1 차원) 어레이(본원에서, 어레이 u)로 편성된다. N은 4, 8, 16, 32, 또는 임의의 다른 값일 수 있다. 1D 어레이의 i 번째 포지션에서의 양자화된 계수는 u[i]로서 지칭될 수 있고, 여기서, i = 0, ..., N*N-1이다. u[i], ..., u[N*N-1]에서의 제로들의 최종 런(run)의 시작 포지션은 eob로서 나타내어질 수 있다. 1D 어레이(즉, u[N*N-1])의 최종 위치가 제로가 아닌 경우에, eob는 값 N*N으로 설정될 수 있다. 즉, 1D 어레이 u의 최종 계수가 제로가 아닐 경우에, eob는 1D 어레이의 최종 위치인 것으로 설정될 수 있다(즉, eob는 값 N*N으로 설정됨). 도 6의 예들을 이용하면, 1D 어레이 u는 엔트리들 u[] = [-6, 0, -1, 0, 2, 4, 1, 0, 0, 1, 0, -1, 0, 0, 0, 0]를 가질 수 있다. u[i]들의 각각에서의 값들은 양자화된 변환 계수이다. 1D 어레이 u의 양자화된 변환 계수들은 또한, "계수들" 또는 "변환 계수들"로서 간단하게 본원에서 지칭될 수 있다. 포지션 i = 0(즉, u[0] = -6)에서의 계수는 DC 계수에 대응한다. 도 6의 예에서, 1D 어레이 u의 포지션 12에서의 제로 계수 후에는 비-제로 계수들이 없으므로, eob는 12와 동일하다.
i = 0 내지 N*N-1에 대하여, 계수들 u[i], ..., u[N*N-1]를 인코딩하고 디코딩하기 위하여, 토큰 t[i]는 각각의 포지션 i <= eob에서 생성된다. i < eob에 대한 토큰 t[i]는 u[i]에서의 대응하는 양자화된 변환 계수의 크기 및/또는 크기 범위를 표시할 수 있다. eob에서의 양자화된 변환 계수에 대한 토큰은, 1D 어레이 u가 eob 포지션(포괄적)에 후속하여 비-제로 계수들을 포함하지 않는다는 것을 표시하는 토큰인 EOB_TOKEN일 수 있다. 즉, t[eob] = EOB_TOKEN는 현재의 블록의 EOB 포지션을 표시한다. 이하의 표 I는 이 개시내용의 구현예에 따라, EOB_TOKEN을 제외하는 토큰 값들 및 그 대응하는 명칭들의 목록을 제공한다.
Figure 112019125280091-pct00001
예에서, 양자화된 계수 값들은 부호화된 12-비트 정수들인 것으로 취해진다. 양자화된 계수 값을 표현하기 위하여, 12-비트 부호화된 값들의 범위는 11 개의 토큰들(표 I에서의 토큰들 0 내지 10) 플러스(plus) 블록 종료 토큰(EOB_TOKEN)으로 분할될 수 있다. 양자화된 계수 값을 표현하기 위한 토큰을 생성하기 위하여, 계수 토큰 트리(700)가 횡단될 수 있다. 트리를 횡단한 결과(즉, 비트 스트링)는 그 다음으로, 도 4의 엔트로피 인코딩 스테이지(408)에 대하여 설명된 바와 같이, 인코더에 의해 (도 4의 비트스트림(420)과 같은) 비트스트림으로 인코딩될 수 있다.
계수 토큰 트리(700)는 토큰들 EOB_TOKEN(토큰(702)), ZERO_TOKEN(토큰(704)), ONE_TOKEN(토큰(706)), TWO_TOKEN(토큰(708)), THREE_TOKEN(토큰(710)), FOUR_TOKEN(토큰(712)), CAT1(표 I에서의 DCT_VAL_CAT1인 토큰(714)), CAT2(표 I에서의 DCT_VAL_CAT2인 토큰(716)), CAT3(표 I에서의 DCT_VAL_CAT3인 토큰(718)), CAT4(표 I에서의 DCT_VAL_CAT4인 토큰(720)), CAT5(표 I에서의 DCT_VAL_CAT5인 토큰(722)), 및 CAT6(표 I에서의 DCT_VAL_CAT6인 토큰(724))을 포함한다. 알 수 있는 바와 같이, 계수 토큰 트리는 단일 양자화된 계수 값을 토큰들(704, 706, 708, 710, 및 712) 중의 하나와 같은 단일 토큰으로 맵핑한다. 토큰들(714, 716, 718, 720, 722, 및 724)과 같은 다른 토큰들은 양자화된 계수 값들의 범위들을 표현한다. 예컨대, 37의 값을 갖는 양자화된 변환 계수는 토큰 DCT_VAL_CAT5 - 도 7에서의 토큰(722)에 의해 표현될 수 있다.
토큰을 위한 기본 값은 그 범위에서의 가장 작은 수로서 정의된다. 예컨대, 토큰(720)을 위한 기본 값은 19이다. 엔트로피 코딩은 각각의 양자화된 계수에 대한 토큰을 식별하고, 토큰이 범위를 표현할 경우에, 양자화된 계수로부터 기본 값을 감산함으로써 잔차를 형성할 수 있다. 예컨대, 20의 값을 갖는 양자화된 변환 계수는 디코더가 원래의 양자화된 변환 계수를 재구성하는 것을 허용하기 위하여 인코딩된 비디오 비트스트림에서 토큰(720) 및 1의 잔차 값(즉, 20 마이너스(minus) 19)을 포함함으로써 표현될 수 있다. 블록 종료 토큰(즉, 토큰(702))은 추가의 비-제로 양자화된 계수들이 변환된 블록 데이터에서 남아 있지 않다는 것을 시그널링한다.
(도 4의 엔트로피 인코딩 스테이지(408)에 의한 것과 같은) 이진 산술 코딩 엔진을 이용함으로써 토큰 t[i]를 인코딩하거나 디코딩하기 위하여, 계수 토큰 트리(700)가 이용될 수 있다. 계수 토큰 트리(700)는 루트 노드(701)(즉, A로 표기된 노드)에서 시작하여 횡단된다. 계수 토큰 트리를 횡단하는 것은 예컨대, 이진 산술 코딩을 이용하여 비트스트림으로 인코딩될 비트 스트링(코드워드(codeword))을 생성한다. 비트 스트링은 현재의 계수(즉, 인코딩되고 있는 양자화된 변환 계수)의 표현이다.
현재의 계수가 제로이고, 나머지 변환 계수들을 위한 더 많은 비-제로 값들이 없을 경우에, 토큰(702)(즉, EOB_TOKEN)은 비트스트림으로 추가된다. 이것은 예컨대, 도 6의 스캔 순서 위치 11에서의 변환 계수에 대한 경우이다. 다른 한편으로, 현재의 계수가 비-제로일 경우, 또는 현재의 블록의 임의의 나머지 계수들 사이에서 비-제로 값들이 있을 경우에, "1" 비트가 코드워드에 추가되고, 횡단은 노드(703)(즉, B로 표기된 노드)로 통과한다. 노드 B에서, 현재의 계수는 그것이 제로와 동일한지를 알아보기 위하여 테스트된다. 그러할 경우에, 좌측 가지는 값 ZERO_TOKEN 및 비트 "0"을 표현하는 토큰(704)이 코드워드에 추가되도록 취해진다. 그렇지 않을 경우에, 비트 "1"이 코드워드에 추가되고, 횡단은 노드 C로 통과한다. 노드 C에서, 현재의 계수는 그것이 1 초과인지를 알아보기 위하여 테스트된다. 현재의 계수가 1과 동일할 경우에, 좌측 가지가 취해지고, 값 ONE_TOKEN을 표현하는 토큰(706)이 비트스트림에 추가된다(즉, "0" 비트가 코드워드에 추가됨). 현재의 계수가 1 초과일 경우에, 횡단은 값 4와 비교하여 현재의 계수의 값을 체크하기 위하여 노드 D로 통과한다. 현재의 계수가 4 이하일 경우에, 횡단은 노드 E로 통과하고, "0" 비트가 코드워드에 추가된다. 노드 E에서, 값 "2"와의 동일성에 대한 테스트가 행해질 수 있다. 참(true)일 경우에, 값 "2"를 표현하는 토큰(706)은 비트스트림에 추가된다(즉, 비트 "0"이 코드워드에 추가됨). 그렇지 않을 경우에, 노드 F에서, 현재의 계수는 값 "3" 또는 값 "4"의 어느 하나, 그리고 적절한 바와 같은 비트스트림에 대한 토큰(710)(즉, 비트 "0"이 코드워드에 추가됨) 또는 토큰(712)(즉, 비트 "1"이 코드워드에 추가됨)의 어느 하나 등에 대하여 테스트된다.
필수적으로, "0" 비트는 좌측 자식 노드(child node)로의 횡단 시에 코드워드에 추가되고, "1" 비트는 우측 자식 노드로의 횡단 시에 코드워드에 추가된다. 유사한 프로세스는 압축된 비트스트림으로부터 코드워드를 디코딩할 때에 디코더에 의해 착수된다. 디코더는 비트 스트림으로부터 비트를 판독한다. 비트가 "1"일 경우에, 계수 토큰 트리는 우측으로 횡단되고, 비트가 "0"일 경우에, 트리는 좌측으로 횡단된다. 디코더는 그 다음으로, 다음 비트를 판독하고, 트리의 횡단이 리프 노드(leaf node)(즉, 토큰)에 도달할 때까지 프로세스를 반복시킨다. 예로서, 루트 노드(즉, 루트 노드(701))로부터 시작하여 토큰 t[i] = THREE_TOKEN를 인코딩하기 위하여, 111010의 이진 스트링이 인코딩된다. 또 다른 예로서, 코드워드 11100를 디코딩하는 것은 토큰 TWO_TOKEN을 초래한다.
좌측 및 우측 자식 노드들에 대한 "0" 및 "1" 비트들 사이의 대응성은 인코딩 및 디코딩 프로세스들을 설명하기 위하여 이용된 관례(convention)에 불과하다는 것에 주목한다. 일부 구현예들에서는, 예컨대, "1"이 좌측 자식 노드에 대응하고 "0"이 우측 자식 노드에 대응하는 것에서의 상이한 관례가 이용될 수 있다. 인코더 및 디코더 둘 모두가 동일한 관례를 채택하는 한, 본원에서 설명된 프로세스들이 적용된다.
EOB_TOKEN은 비-제로 계수 후에 오직 가능하므로, u[i-1]가 제로일 때(즉, 1D 어레이 u의 위치 i-1에서의 양자화된 변환 계수가 제로와 동일할 때), 디코더는 최초 비트가 1이어야 하는 것을 추론할 수 있다. 트리를 횡단할 시에, 제로 변환 계수(예컨대, 도 6의 지그-재그 스캔 순서 위치 1에서의 변환 계수)를 후속하는 변환 계수(예컨대, 도 6의 지그-재그 스캔 순서 위치 2에서의 변환 계수)에 대해, 횡단이 루트 노드(701)로부터 노드(703)로 반드시 이동해야 하므로, 최초 비트는 1이어야 한다.
이와 같이, 이진 플래그 checkEob는 계수 토큰 트리(700)에서의 루트 노드로부터 선두인 최초 비트를 인코딩하고 디코딩하는 것을 스킵할 것을 인코더 및 디코더에 명령하기 위하여 이용될 수 있다. 사실상, 이진 플래그 checkEob가 0(즉, 루트 노드가 체크되지 않아야 한다는 것을 표시함)일 때, 계수 토큰 트리(700)의 루트 노드(701)는 스킵되고, 노드(703)는 횡단을 위하여 방문될 계수 토큰 트리(700)의 최초 노드가 된다. 즉, 루트 노드(701)가 스킵될 때, 인코더는 인코딩을 스킵할 수 있고, 디코더는 디코딩을 스킵할 수 있고, 인코딩된 스트링의 최초 비트(즉, 이진 비트 "1")를 추론할 수 있다.
블록을 인코딩하거나 디코딩하는 것의 시작 시에, 이진 플래그 checkEob는 1(즉, 루트 노드가 체크되어야 한다는 것을 표시함)로 초기화될 수 있다. 다음의 단계들은 NxN 블록에서의 양자화된 변환 계수들을 디코딩하기 위한 일 예의 프로세스를 예시한다.
단계 1에서, 이진 플래그 checkEob는 제로로 설정되고(즉, checkEob = 0), 인덱스 i는 또한, 제로로 설정된다(즉, i = 0).
단계 2에서, 토큰 t[i]는 다음의 어느 하나를 이용함으로써 디코딩된다.
1) 이진 플래그 checkEob가 1과 동일할 경우에 (즉, 계수 토큰 트리(700)의 루트 노드(701)에서 시작하는) 전체 계수 토큰 트리, 또는
2) checkEob가 0과 동일할 경우에, EOB_TOKEN이 스킵되는 (예컨대, 노드(703)에서 시작하는) 부분적인 트리를 이용하는 것.
단계 3에서, 토큰 t[i] = EOB_TOKEN일 경우에, 양자화된 변환 계수들 u[i], ..., u[N*N-1]은 제로로 모두 설정되고, 디코딩 프로세스는 종결되고; 그렇지 않을 경우에는, 여분의 비트들이 필요할 경우에(즉, t[i]가 ZERO_TOKEN과 동일하지 않을 때) 디코딩될 수 있고, u[i]를 재구성할 수 있다.
단계 4에서, 이진 플래그 checkEob는 u[i]가 제로와 동일할 경우에 1로 설정되고, 그렇지 않을 경우에는, checkEob가 0으로 설정된다. 즉, checkEob는 값(u[i] ! = 0)으로 설정될 수 있다.
단계 5에서, 인덱스 i는 증분(increment)된다(즉, i = i +1).
단계 6에서, 단계들 2 내지 5는 모든 양자화된 변환 계수들이 디코딩되었을 때까지(즉, 인덱스 i = N*N일 때까지), 또는 EOB_TOKEN이 디코딩될 때까지 반복된다.
위의 단계 2에서, 토큰 t[i]를 디코딩하는 것은 컨텍스트 ctx를 결정하는 단계, 컨텍스트 ctx로부터 이진 확률 분포(즉, 모델)를 결정하는 단계, 및 결정된 확률 분포들을 이용함으로써 계수 토큰 트리(700)의 루트 노드로부터 리프 노드까지의 경로를 디코딩하기 위하여 불리언 산술 코드(Boolean arithmetic code)를 이용하는 단계를 포함할 수 있다. 컨텍스트 ctx는 컨텍스트 유도의 방법을 이용하여 결정될 수 있다. 컨텍스트 유도의 방법은 컨텍스트 ctx를 결정하기 위하여 블록 크기, 평면 유형(즉, 휘도 또는 색차), 포지션 i, 및 이전에 디코딩된 토큰들 t[0], ..., t[i-1] 중의 하나 이상을 이용할 수 있다. 다른 기준들은 컨텍스트 ctx를 결정하기 위하여 이용될 수 있다. 이진 확률 분포는 checkEOB = 1일 때에 루트 노드(701)로부터, 또는 checkEOB = 0일 때에 노드(703)로부터 시작하는 계수 토큰 트리(700)의 임의의 내부 노드에 대하여 결정될 수 있다.
일부 인코딩 시스템들에서, 컨텍스트 ctx가 주어질 경우에 토큰 t[i]를 인코딩하거나 디코딩하기 위하여 이용된 확률은 고정될 수 있고, 픽처(즉, 프레임)에서 적응(adapt)되지 않는다. 예컨대, 확률은 주어진 컨텍스트 ctx에 대하여 정의되는 디폴트 값일 수 있거나, 확률은 그 프레임에 대한 프레임 헤더의 일부로서 코딩될(즉, 시그널링됨) 수 있다. 프레임을 코딩할 시에 모든 각각의 컨텍스트에 대한 확률을 코딩하는 것은 고비용일 수 있다. 이와 같이, 인코더는 각각의 컨텍스트에 대하여, 프레임 헤더에서의 컨텍스트의 연관된 확률을 코딩하는 것이 유익한지 여부를 분석할 수 있고, 이진 플래그를 이용함으로써 그 판정을 디코더로 시그널링할 수 있다. 또한, 컨텍스트에 대한 확률을 코딩하는 것은 (예컨대, 비트 레이트에서의) 비용을 감소시키기 위하여 예측을 이용할 수 있고, 여기서, 예측은 이전에 디코딩된 프레임에서의 동일한 컨텍스트의 확률로부터 유도될 수 있다. 일부 인코딩 시스템들에서, 컨텍스트 ctx가 주어질 경우의 확률은 새로운 심볼이 디코딩되거나 인코딩될 때에 픽처(즉, 프레임)에서 적응될 수 있다. 다양한 적응 방법들이 이용될 수 있다. 적응 방법들의 예들은 라플라스(Laplace) 추정기, 크리체프스키-트로피모브(Krichevsky-Trofimov) 추정기, 양호한-터닝(Good-Turning) 추정기, IIR(infinite impulse response; 유한 임펄스 응답) 필터-기반 추정기, 및 유한-상태(finite-state) 머신-기반 추정기를 포함한다.
도 8은 이 개시내용의 구현예들에 따른, EOB 포지션을 이진화하기 위한 트리(800)의 예의 도면이다. 트리(800)는 EOB 포지션을 코딩하는 데카르트 좌표 접근법을 구현하는 코딩 시스템에 의해 이용될 수 있다. 데카르트 좌표 접근법에서, EOB 포지션들은 블록 포지션들로서 코딩될 수 있다. 이와 같이, 그리고 위에서 설명된 인터리빙 접근법들과 달리, EOB 포지션들의 코딩은 스캔 순서들에 독립적이다. 현재의 블록은 최종 유효 계수가 현재의 블록에서의 주어진 스캔 순서에 따라, 블록 포지션 (eob_x, eob_y)에 있도록 된 크기 NxN이기 때문에, eob_x는 열 번호를 표시하고, eob_y는 행 번호를 표시한다. 예컨대, 그리고 도 6을 참조하면, 회추 비-제로 양자화된 변환 계수(628)는 블록 포지션 (2, 2)에 있다. 인터리빙 접근법에서는, 일단 EOB 블록 포지션 (eob_x, eob_y)이 식별되면, 열 번호 eob_x 및 행 번호 eob_y의 코딩은 코딩 프로세스의 다른 양상들에 대해 이용될 수 있는 임의의 스캔 순서에 독립적이다.
트리(800)는 양자화된 변환 계수들의 인코딩 및 디코딩을 위해 이진화, 컨텍스트 모델링, 및 이진 산술 코딩의 단계들을 이용하는 비디오 코딩 시스템에 의해 이용될 수 있다. 프로세스는 컨텍스트-적응적 이진 산술 코딩(context-adaptive binary arithmetic coding; CABAC)으로서 지칭될 수 있다. 예컨대, 양자화된 변환 계수 x를 코딩하기 위하여, 코딩 시스템은 다음의 단계들을 수행할 수 있다. 양자화된 변환 계수 x는 도 6의 양자화된 변환 블록(604)의 계수들 중의 임의의 것(예컨대, 계수(608))일 수 있다.
다음의 단계들은 열 번호 eob_x 및 행 번호 eob_y 둘 모두에 대하여 유사하게 수행된다. 단순함을 위하여, 열 번호 eob_x에 대한 단계들만이 설명된다.
이진화 단계에서, EOB 계수의 열 번호 eob_x는 트리(800)를 이용함으로써 이진 스트링으로 먼저 이진화된다. 이진 트리(800)는 열 번호 eob_x에 대응하는 이진 스트링 프리픽스(binary string prefix)를 생성하기 위하여 횡단된다. 예컨대, 삼(3)의 열 번호 eob_x에 대하여, 이진 트리(800)를 횡단함으로써 생성된 프리픽스는 노드(802)에 대응하는 1110이다. 또 다른 예로서, 열 번호 eob_x가 사(4) 또는 오(5)일 경우에, 생성된 프리픽스는 노드(804)에 대응하는 11110이다. 노드(804)의 경우에, 서픽스(suffix)는 또한, 열 번호 eob_x가 4(즉, 0의 서픽스) 또는 5(즉, 1의 서픽스)인지 여부를 표시하기 위하여 생성된다. 이와 같이, 열 번호 eob_x가 4일 경우에, 이진 스트링 111100이 코딩되고, 열 번호 eob_x가 5일 경우에, 이진 스트링 111101이 코딩된다.
컨텍스트 유도 단계에서는, 코딩될 각각의 빈(bin)에 대하여, 컨텍스트가 유도된다. 컨텍스트는 블록 크기, 평면 유형(즉, 휘도 또는 색차), 계수 x의 블록 포지션, 및 이전에 디코딩된 계수들(예컨대, 이용가능할 경우에, 좌측 및/또는 상부의 이웃하는 계수들) 중의 하나 이상과 같은 정보로부터 유도될 수 있다. 다른, 더 많은, 또는 더 적은 정보가 컨텍스트를 유도하기 위하여 이용될 수 있다.
이진 산술 코딩 단계에서, 컨텍스트가 주어질 경우에, 빈은 예컨대, 이진 산술 코딩 엔진을 이용함으로써, 컨텍스트와 연관된 확률 값과 함께, 이진 코드워드로 코딩된다.
위에서 설명된 바와 같이, 데카르트 좌표 접근법 및 인터리빙 접근법은 EOB 포지션을 코딩하기 위한 상이한 접근법들을 이용한다. 데카르트 좌표 접근법은 블록 포지션 (eob_x, eob_y)을 직접적으로 코딩한다. 인터리빙 접근법은 (유효 계수가 최종 유효 계수인지 여부를 표시하는) last_sig_flag의 코딩을 (계수가 유효 계수인지 여부를 표시하는) sig_flag_coding로 인터리빙한다.
변환 블록이 상대적으로 적은 비-제로 계수들로 희소할 경우에, 인터리빙 접근법이 더 효율적일 수 있다. 예컨대, 변환 블록이 블록 위치 (4, 5)에서 오직 하나의 비-제로 계수를 포함할 경우에, 인터리빙 접근법은 정확하게 하나의 last_sig_flag를 인코딩하고 디코딩하고; 다른 한편으로, 데카르트 좌표 접근법은 12 개의 빈들(즉, 이진 판정들)을 인코딩하고 디코딩한다. 12 개의 빈들은 위의 도 8에 대하여 설명된 바와 같이, 이진 스트링들 111100(즉, eob_x = 4) 및 111101(즉, eob_y = 5)의 인코딩에 대응한다.
다른 한편으로, 블록이 상대적으로 큰 수의 비-제로 계수들을 포함할 경우에는, 데카르트 좌표 접근법이 더 효율적일 수 있다. 예컨대, 최악의 경우에(즉, 블록의 모든 각각의 계수가 비-제로일 경우), 16x16 블록에 대하여, 인터리빙 접근법을 이용하여 코딩될 last_sig_flags의 수는 255이다. 다른 한편으로, 데카르트 좌표 접근법을 이용하면, 16x16 블록에서의 eob 포지션에 대하여 코딩될 빈들의 수는 블록 포지션 (15, 14) 또는 (14, 15)에 대응하는 빈들의 수이다. 위에서 설명된 바와 같이, EOB가 (15, 15)에 있을 경우에, last_sig_flag는 코딩될 필요가 없다는 것에 주목한다. 값들 14 및 15는 트리(800)를 이용하여, 프리픽스 스트링들 11111110 및 서픽스들 10 및 11, 또는 이진 스트링들 1111111010 및 1111111011로 각각 이진화된다. 이것은 총 20 개의 빈들의 코딩을 초래한다. 이와 같이, 최악의 경우에는, 데카르트 좌표 접근법이 인터리빙 접근법의 것보다 연산적으로 덜 복잡하다.
도 9는 이 개시내용의 구현예에 따른, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 인코딩하기 위한 프로세스(900)의 흐름도이다. 프로세스(900)는 스캔 순서에 따라 변환 블록의 계수들을 인코딩할 수 있다. 대안적으로, 프로세스(900)는 변환 블록의 계수들을 인코딩하는 또 다른 프로세스에 의해 호출될 수 있거나 또 다른 프로세스에서 내장될 수 있다. 프로세스(900)는 EOB 포지션에 관한 정보를 인코딩한다.
프로세스(900)는 도 4의 인코더(400)와 같은 인코더에서 구현될 수 있다. 프로세스(900)는 예컨대, 송신국(102)과 같은 컴퓨팅 디바이스들에 의해 실행될 수 있는 소프트웨어 프로그램으로서 구현될 수 있다. 소프트웨어 프로그램은, 메모리(204) 또는 보조 스토리지(214)와 같은 메모리에 저장될 수 있고, 컴퓨팅 디바이스로 하여금, 프로세스(900)를 수행하게 하기 위하여 CPU(202)와 같은 프로세서에 의해 실행될 수 있는 머신-판독가능 명령들을 포함할 수 있다. 적어도 일부 구현예들에서, 프로세스(900)는 도 4의 인코더(400)의 엔트로피 인코딩 스테이지(408)에 의해 전체적으로 또는 부분적으로 수행될 수 있다.
프로세스(900)는 도 10을 참조하여 설명된다. 도 10은 이 개시내용의 구현예들에 따른, 스캔 순서(1000) 및 블록(1050)의 예이다. 블록(1050)은 양자화된 변환 계수들의 블록일 수 있다.
스캔 순서(1000)는 도 6의 스캔 순서(602)에 대하여 설명된 바와 같을 수 있다. 예컨대, 스캔 인덱스(1002)는 블록(1050)의 계수(1052)(즉, 위치 (6, 0)에서의 계수)가 스캔 인덱스 값 21에 있다는 것을 표시하고, 스캔 인덱스(1004)는 블록(1050)의 계수(1054)(즉, 위치 (2, 2)에서의 계수)가 스캔 인덱스 값 12에 있다는 것을 표시하고, 스캔 인덱스(1006)는 블록(1050)의 계수(1056)(즉, 위치 (6, 2)에서의 계수)가 스캔 인덱스 값 37에 있다는 것을 표시한다. 계수(1056)는 스캔 순서(1000)가 주어질 경우에 블록(1050)의 최종 비-제로 계수이다. 즉, 스캔 인덱스(1006)(즉, 스캔 인덱스 값 37)에 대응하는 계수는 최종 비-제로 계수이다.
902에서, 프로세스(900)는 최종 비-제로 계수의 위치를 결정한다. 이 개시내용에서 이용된 바와 같이, "결정하다"는 선택하거나, 구성하거나, 결정하거나, 특정하거나, 식별하거나, 수신하거나, 또는 어떠한 임의의 방식으로 다르게 결정하는 것을 의미한다. 최종 비-제로 계수의 위치는 위의 블록 포지션 (eob_x, eob_y)에 대하여 설명된 바와 같을 수 있다. 이와 같이, 위치는 열 값(예컨대, EOB 계수의 열 번호를 표시하는 eob_x)을 포함한다. 위치는 행 값(예컨대, EOB 계수의 행 번호를 표시하는 eob_y)을 포함한다. 본원에서, 열 값 및 열 번호는 상호 교환가능하게 이용되고; 행 값 및 행 번호는 상호 교환가능하게 이용된다.
예에서, 프로세스(900)는 최종 비-제로 계수를 결정하기 위하여 스캔 순서(예컨대, 스캔 순서(1000))에 따라 블록(예컨대, 블록(1050))의 계수들을 스캔할 수 있다. 일단 최종 비-제로 계수가 식별되면, 최종 비-제로 계수의 위치가 결정된다. 또 다른 예에서, 프로세스(900)는 또 다른 모듈, 코딩 스테이지, 프로세스 등으로부터 위치를 수신함으로써 최종 비-제로 계수의 위치를 결정할 수 있다.
904에서, 프로세스(900)는 계수들의 변환 블록의 비-제로 계수를 인코딩한다. 비-제로 계수는 변환 블록의 계수 열 및 계수 행에 있다. 예에서, 프로세스(900)는 비-제로 계수를 인코딩하는 것이 아니라, 계수 열 및 계수 행을 단지 수신할 수 있다. 수신하는 것은 생성하거나, 결정하거나, 또는 임의의 방식으로 수신하는 것을 의미할 수 있다. 예컨대, 계수(예컨대, 스캔 순서 값 23에서의 계수)가 인코딩된 후 또는 그 전에, 프로세스(900)는 계수 열(즉, 4) 및 계수 행(즉, 2)을 수신할 수 있다.
(도 11의 시퀀스(1118 내지 1126)에 대하여 이하에서 추가로 설명된) 906에서, 비-제로 계수가 계수 열에서 인코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 프로세스(900)는 계수 열이 최종 비-제로 계수의 열 값과 동일한지 여부를 인코딩한다. (도 11의 블록(1118)에 대하여 이하에서 추가로 설명된) 908에서, 비-제로 계수가 계수 열에서 인코딩될 최초 비-제로 계수가 아닌 것으로 결정하는 것에 응답하여, 프로세스(900)는 계수 열이 최종 비-제로 계수의 열 값과 동일한지 여부를 인코딩하는 것을 스킵한다.
(도 11의 시퀀스(1128 내지 1136)에 대하여 이하에서 추가로 설명된) 910에서, 비-제로 계수가 계수 행에서 인코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 프로세스(900)는 계수 행이 최종 비-제로 계수의 행 값과 동일한지 여부를 인코딩한다. (도 11의 블록(1128)에 대하여 이하에서 추가로 설명된) 912에서, 비-제로 계수가 계수 행에서 인코딩될 최초 비-제로 계수가 아닌 것으로 결정하는 것에 응답하여, 프로세스(900)는 계수 행이 최종 비-제로 계수의 행 값과 동일한지 여부를 인코딩하는 것을 스킵한다.
프로세스(900)의 예에서, 계수들의 변환 블록은 인트라-예측을 이용하여 예측된 잔차 블록의 변환 블록이다. 즉, 프로세스(900)는 인터-예측된 블록이 아닌, 인트라-예측된 블록과 함께 이용될 수 있다. 예에서, 계수들의 변환 블록은 휘도 컬러 컴포넌트(luminance color component)들의 블록의 변환 블록이다. 즉, 프로세스는 색차가 아닌, 휘도 블록들을 위하여 이용될 수 있다. 예에서, 프로세스(900)는 다른 것들이 아닌, 일부 블록 크기들과 함께 이용될 수 있다. 예컨대, 프로세스(900)는 더 큰 것이 아닌, 크기 4x4의 변환 블록들에 대해 이용될 수 있다.
도 9에서 도시된 바와 같은 최종 유효 계수 플래그들의 개선된 코딩의 다른 구현예들이 이용가능하다. 구현예들에서는, 최종 유효 계수 플래그들의 개선된 코딩의 추가적인 엘리먼트들이 추가될 수 있고, 어떤 엘리먼트들이 조합될 수 있고, 및/또는 어떤 엘리먼트들이 제거될 수 있다.
도 11은 이 개시내용의 구현예에 따른, 데카르트 좌표계를 이용하여, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 코딩하기 위한 프로세스(1100)의 흐름도이다. 프로세스(1100)는 비-제로 변환 계수를 포함하는 열이 최종 비-제로 계수를 포함하는 열인지 여부를 오직 한 번 코딩(즉, 인코딩 또는 디코딩)한다. 프로세스(1100)는 비-제로 변환 계수를 포함하는 행이 최종 비-제로 계수를 포함하는 행인지 여부를 오직 한 번 코딩(즉, 인코딩 또는 디코딩)한다. 프로세스(1100)는 스캔 순서에 따라 변환 블록의 계수들을 코딩하는 프로세스에 의해, 또는 이 프로세스와 함께 이용될 수 있다.
프로세스(1100)의 데카르트 좌표계는 변환 블록의 DC 계수들에서 그의 원점을 가질 수 있다. 데카르트 좌표계의 차원들은 행들 및 열들이다. 변환 블록의 변환 계수들은 행 값들 열 값들을 따라 배열된다. 예컨대, 변환 블록(1050)에서, 행들은 행 값들 0 내지 7을 가지고, 열들은 값들 0 내지 7을 가지고; 계수(1054)는 열 값 2 및 행 값 2에 있다. 최종 비-제로 계수(예컨대, 도 10의 계수(1056))의 위치는 열 값(예컨대, 열 값 6) 및 행 값(예컨대, 행 값 2)을 포함한다. 위에서 설명된 바와 같이, 최종 비-제로 계수는 스캔 순서에 대하여 결정될 수 있다. 즉, 계수(1056)는 변환 블록(1050)의 계수들이 스캔 순서(1000)에 따라 스캔될 경우에 최종 비-제로 계수이다. (즉, 계수(1056) 이외의) 상이한 계수는 예컨대, 스캔 순서(1000) 이외의 스캔 순서가 이용될 경우에 최종 비-제로 계수로서 식별될 수 있다.
프로세스(1100)는 도 4의 인코더(400)와 같은 인코더에서 구현될 수 있다. 프로세스(1100)는 예컨대, 송신국(102)과 같은 컴퓨팅 디바이스들에 의해 실행될 수 있는 소프트웨어 프로그램으로서 구현될 수 있다. 소프트웨어 프로그램은, 메모리(204) 또는 보조 스토리지(214)와 같은 메모리에 저장될 수 있고, 컴퓨팅 디바이스로 하여금, 프로세스(1100)를 수행하게 하기 위하여 CPU(202)와 같은 프로세서에 의해 실행될 수 있는 머신-판독가능 명령들을 포함할 수 있다. 적어도 일부 구현예들에서, 프로세스(1100)는 도 4의 인코더(400)의 엔트로피 인코딩 스테이지(408)에 의해 전체적으로 또는 부분적으로 수행될 수 있다.
프로세스(1100)는 도 5의 디코더(500)와 같은 디코더에서 구현될 수 있다. 프로세스(1100)는 예컨대, 수신국(106)과 같은 컴퓨팅 디바이스들에 의해 실행될 수 있는 소프트웨어 프로그램으로서 구현될 수 있다. 소프트웨어 프로그램은, 메모리(204) 또는 보조 스토리지(214)와 같은 메모리에 저장될 수 있고, 컴퓨팅 디바이스로 하여금, 프로세스(1100)를 수행하게 하기 위하여 CPU(202)와 같은 프로세서에 의해 실행될 수 있는 머신-판독가능 명령들을 포함할 수 있다. 적어도 일부 구현예들에서, 프로세스(1100)는 도 5의 디코더(500)의 엔트로피 디코딩 스테이지(502)에 의해 전체적으로 또는 부분적으로 수행될 수 있다.
인코더에 의해 구현될 때, "코딩"은 도 4의 압축된 비트스트림(420)과 같은 인코딩된 비트스트림에서의 인코딩을 의미한다. 디코더에 의해 구현될 때, "코딩"은 도 5의 압축된 비트스트림(420)과 같은 인코딩된 비트스트림으로부터의 디코딩을 의미한다.
다음의 설명에서, 크기 NxN의 블록(예컨대, 변환 블록(1050))이 가정되지만; 그러나, 블록은 또한, 크기 MxN의 직사각형 블록일 수 있고, 여기서, M 및 N은 동일하지 않다. 1 차원 어레이 u는 도 6에 대하여 설명된 바와 같다. 이와 같이, u[i]는 주어진 스캔 순서(예컨대, 도 10의 스캔 순서(1000))를 따르는 i 번째 스캔 포지션에서의 변환 계수를 표시한다. 예컨대, u[21](즉, 스캔 포지션 21(즉, 스캔 인덱스(1002))에서의 계수의 값)은 계수 값 - 1(즉, 계수(1052))이다.
스캔 인덱스(즉, 스캔 순서(1000)의 값)에 대하여, 어레이 스캔은 블록(1050)에서의 대응하는 열 번호 및 행 번호를 제공할 수 있다. 이와 같이, scan[i]는 스캔 포지션 i로부터 블록 포지션으로의 맵핑을 나타낸다. 블록 포지션은 계수의 열 번호 및 행 번호를 포함하는 튜플(tuple)(즉, (ci, ri), 여기서, ci는 열 번호 또는 열 값을 나타내고; ri는 행 번호 또는 행 값을 나타냄)일 수 있다. 예컨대, scan[37]은 튜플(6, 2)을 제공할 수 있다. 스캔 인덱스로부터 블록 위치로의 맵핑은 스캔 어레이 이외의 수단에 의해 제공될 수 있다. 예컨대, 입력으로서 스캔 인덱스를 취하는 함수(등)는 블록 위치를 제공(예컨대, 반환)할 수 있다.
튜플(eob_c, eob_r)은 주어진 스캔 순서를 따르는 현재의 블록에서의 최종 유효 계수의 블록 포지션(즉, 열 값 및 행 값)을 나타낸다. 이와 같이, 그리고 도 10을 참조하면, (eob_c, eob_r)는 튜플(6, 2)에 의해 주어진다.
1102에서, 프로세스(1100)는 행 세트 R을 비어 있는 세트로 초기화하고, 열 세트 C를 비어 있는 세트로 초기화한다. 행 세트 R은 프로세스(1100)에 의해 이미 방문된 행들(즉, 행 값들)의 추적을 계속한다. 열 세트 C는 프로세스(1100)에 의해 이미 방문된 열들(즉, 열 값들)의 추적을 계속한다. 방문된 행은 이 문맥에서, 현재의 비-제로 계수가 스캔 순서가 주어져서 방문될 때, 또 다른 비-제로 계수는 현재의 비-제로 계수와 동일한 행에 있는 것으로 이미 결정된다는 것을 의미한다. 방문된 열은 이 문맥에서, 현재의 비-제로 계수가 스캔 순서가 주어져서 방문될 때, 또 다른 비-제로 계수는 현재의 비-제로 계수와 동일한 열에 있는 것으로 이미 결정된다는 것을 의미한다. 예컨대, 스캔 순서(1000)에서, 스캔 인덱스(1010)(즉, 스캔 인덱스 값 3)가 프로세싱(즉, 계수(1060)에 대응함)될 때, 또 다른 비-제로 계수(즉, 스캔 인덱스(1008)에 대응하는 계수(1058))가 동일한 행(즉, 행 0)에 있는 것으로 이미 결정되므로, 행 0은 방문된 것으로 결정되고(즉, 행 세트 R은 행 0을 포함함): 계수들(1058 및 1060) 둘 모두는 동일한 행 0에 있고, 계수(1058)는 스캔 순서에서 계수(1060) 전에 프로세싱된다.
1104에서, 스캔 포지션 i는 제로로 초기화되고; 플래그들 EOB_C_FOUND 및 EOB_R_FOUND는 거짓(false)(즉, 값 제로)으로 설정된다. 스캔 포지션 i는 1 차원 어레이 u로의 인덱스로서 이용된다. 플래그 EOB_C_FOUND는 블록-종료 계수와 동일한 열에 있는 변환 계수가 프로세싱(즉, 스캔 순서에 따라 방문됨)되었는지 여부를 표시한다. 플래그 EOB_R_FOUND는 블록-종료 계수와 동일한 행에 있는 변환 계수가 프로세싱되었는지 여부를 표시한다.
1106에서, 프로세스(1100)는 스캔 인덱스 u[i]에 대응하는 계수가 제로 또는 비-제로 계수인지 여부를 코딩하고, sig[i]를 이것으로 설정할 수 있다. sig 데이터 구조(예컨대, 어레이, 플래그 등)는 스캔 인덱스 i에서의 계수가 제로인지 그렇지 않은지 여부를 표시한다. 이 예에서, 비-제로 계수는 일(1)의 값(즉, sig[i] = 1)으로 표시된다. 그러나, 다른 값들이 가능하다. 위에서 표시된 바와 같이, 인코더에서 구현될 때, 스캔 인덱스 u[i]에 대응하는 계수가 제로 또는 비-제로인지 여부를 코딩하는 것은 계수가 제로 또는 비-제로인지 여부를 표시하는 신택스 엘리먼트(예컨대, 0 또는 1 비트)를 인코딩된 비트스트림으로 출력하는 것을 의미할 수 있다. 디코더에서 구현될 때, 스캔 인덱스 u[i]에 대응하는 계수가 제로 또는 비-제로인지 여부를 코딩하는 것은 인코딩된 비트스트림으로부터, 계수가 제로 또는 비-제로인지 여부를 표시하는 신택스 엘리먼트(예컨대, 0 또는 1 비트)를 판독하는 것을 의미할 수 있다.
1108에서, 계수가 비-제로 계수가 아닐 경우에(즉, sig[i] = 1), 프로세스(1100)는 1110으로 진행하고; 그렇지 않을 경우에는, 프로세스(1100)가 1116으로 진행한다. 달리 말하자면, 스캔 인덱스 i에서의 계수가 제로일 경우에, 프로세스(1100)는 1110에서, 다음 계수가 프로세싱될지 여부를 결정하도록 진행하고; 그렇지 않을 경우에는, 프로세스(1100)가 현재의 계수를 추가로 프로세싱한다.
1110에서, 변환 블록의 모든 계수들이 프로세싱되었을 경우(즉, 스캔 포지션 i = N*N-1), 또는 현재의 계수가 블록-종료 계수일 경우에(즉, ci = eob_c 및 ri = eob_r 경우), 프로세스(1100)는 종결되고; 그렇지 않을 경우에는, 프로세스가 1112에서 계속된다. 1112에서, 프로세스(1100)는 다음 계수를 프로세싱하기 위하여 스캔 포지션 i를 증분(increment)시킨다.
1116에서, 프로세스(1100)는 스캔 포지션 i에서의 변환 계수의 열 값(즉, ci) 및 행 값(즉, ri)을 결정한다. 열 값 및 행 값은 위에서 설명된 어레이 스캔을 이용하여 결정될 수 있다. 이와 같이, 1116에서, 튜플(ci, ri)이 결정된다. 1117에서, 프로세스(1100)는 시퀀스(1118 내지 1126) 및 시퀀스(1128 내지 1136)에 의해 주어진 2 개의 가지들을 프로세싱한다. 예에서, 2 개의 가지들은 순차적으로 프로세싱될 수 있다. 또 다른 예에서, 2 개의 가지들은 병렬로 프로세싱될 수 있다.
1118에서, 최종 비-제로 계수의 열이 아직 발견되지 않았고(즉, EOB_C_FOUND = 0) 현재의 계수의 열(즉, 열 값 ci)이 아직 방문되지 않았을 경우에(즉, 열 값 ci은 열 세트 C에 포함되지 않음), 프로세스(1100)는 1120으로 진행하고; 그렇지 않을 경우에는, 시퀀스(1118 내지 1126)가 스킵된다.
1120에서, 프로세스(1100)는 플래그 LAST_EOB_C_FLAG를 코딩할 수 있다. 플래그 LAST_EOB_C_FLAG는 현재의 비-제로 계수의 열이 최종 비-제로 계수의 열인지 여부를 표시한다. 예컨대, 인코더에 의해 구현될 때, 프로세스(1100)는 값 ci = eob_c를 인코딩할 수 있다. 이와 같이, 불리언 값 ci = eob_c에 대응하는 비트가 인코딩될 수 있다. 디코더에서 구현될 때, 프로세스(1100)는 그것으로부터의 플래그 LAST_EOB_C_FLAG가 설정될 수 있는 신택스 엘리먼트를 디코딩할 수 있다. 제로(0)는 현재의 계수의 열이 최종 비-제로 계수의 열과 동일하지 않을 때에 코딩될 수 있고; 그렇지 않을 경우에는, 일(1)이 코딩된다. 다시, 위에서 설명된 바와 같이, 인코더에 의해 구현될 때, 코딩하는 것은 인코딩된 비트스트림에서 인코딩하는 것을 의미하고; 디코더에 의해 구현될 대, 코딩하는 것은 인코딩된 비트스트림으로부터 디코딩하는 것을 의미한다.
1122에서, 열 값 ci을 가지는 또 다른 비-제로 변환 계수가 방문될 때/경우에, 프로세스(1100)는 시퀀스(1118 내지 1126)를 스킵할 수 있고, 결과적으로, 열 값 ci이 블록의 최종 비-제로 변환 계수를 포함하는지 여부를 표시하는 또 다른 값을 (1120에서) 코딩하는 것을 스킵할 수 있도록, 열 값 ci이 방문되었다는 것을 표시하기 위하여, 열 값 ci은 열 세트 C에 추가된다.
1124에서, 열 값 ci이 최종 비-제로 계수의 열 값과 동일할 경우에(즉, ci = eob_c일 때, 또는 등가적으로, LAST_EOB_C_FLAG = 1일 때), 프로세스(1100)는 (1126에서) 플래그 EOB_C_FOUND를 참(예컨대, EOB_C_FOUND = 1)으로 설정한다. 디코더에 의해 구현될 때, 프로세스(1100)는 1126에서, 열 값 ci이 최종 비-제로 계수의 열 값(즉, eob_c)인 것을 또한 레코딩할 수 있다. 프로세스(1100)는 그 다음으로, 1117의 2 개의 가지들이 완료될 때에 1110으로 진행한다.
시퀀스(1128 내지 1136)에서, 프로세스(1100)는 가지(1118 내지 1136)의 단계들과 유사한 단계들을 수행한다. 각각 EOB_C_FOUND, 열 값 ci, 및 열 세트 C 대신에, EOB_R_FOUND, 행 값 ri, 및 행 세트 R이 이용된다는 것을 제외하고는, 블록(1128)은 블록(1118)과 동일할 수 있다. LAST_EOB_C_FLAG를 코딩하는 대신에, 프로세스(1100)는 현재의 비-제로 계수의 행이 최종 비-제로 계수의 행인지 여부를 표시하는 LAST_EOB_R_FLAG를 코딩한다는 것을 제외하고는, 블록(1130)은 블록(1120)과 동일할 수 있다. 열 세트 C 및 열 값 ci 대신에, 행 세트 R 및 행 값 ri이 이용된다는 것을 제외하고는, 블록(1132)은 블록(1122)과 동일할 수 있다. 열 값 ci을 eob_c와 비교하는 대신에, 행 값 ri이 최종 비-제로 계수의 행 값 eob_r과 비교된다는 것을 제외하고는, 블록(1134)은 블록(1124)과 동일할 수 있다. EOB_C_FOUND 플래그를 설정하는 대신에, EOB_R_FOUND 플래그가 설정되고, 디코더에 의해 구현될 때, 프로세스(1100)는 또한, 행 값 ri이 최종 비-제로 계수의 행 값(즉, eob_r)인 것을 레코딩할 수 있다는 것을 제외하고는, 블록(1136)은 블록(1126)과 동일할 수 있다.
프로세스(1100)는 다음과 같이 대안적으로 기재될 수 있다:
단계 1: 2 개의 비어 있는 세트들 R 및 C를 초기화함. 또한, i = 0, EOB_C_FOUND = 0, 및 EOB_R_FOUND = 0을 초기화함.
단계 2: (u[i]! = 0), 즉, 스캔 포지션 i에서의 significant_coef_flag sig[i]를 인코딩하거나 디코딩함.
단계 3: sig[i] = 1일 경우에, (ci, ri) = scan[i]을 결정하고, 다음을 행함.
a. EOB_C_FOUND = 0일 경우, 및 ci
Figure 112019125280091-pct00002
C일 경우에, (eobc = ci)인지 또는 그렇지 않은지 여부를 표시하는 LAST_EOB_C_FLAG를 인코딩하거나 디코딩하고, C = C
Figure 112019125280091-pct00003
{ci}를 설정함. eobc가 ci와 동일할 경우에(즉, LAST_EOB_C_FLAG = 1), EOB_C_FOUND = 1을 설정하고, (디코더에서) eobc를 레코딩함.
b. EOB_R_FOUND = 0일 경우, 및 ri
Figure 112019125280091-pct00004
R일 경우에, (eobr = ri)인지 또는 그렇지 않은지 여부를 표시하는 LAST_EOB_R_FLAG를 인코딩하거나 디코딩하고, R = R
Figure 112019125280091-pct00005
{ri}를 설정함. eobr가 ri와 동일할 경우에(즉, LAST_EOB_R_FLAG = 1), EOB_R_FOUND = 1을 설정하고, (디코더에서) eobr를 레코딩함.
단계 4: i를 1만큼 증가시킴.
단계 5: 다음의 2 개의 조건들 중의 어느 하나가 충족될 때까지 단계들 2 내지 4를 반복시킴:
I = N*N 또는
둘 모두의 eobc = ci-1 및 eobr = ri-1
이하의 표 1은 스캔 순서(1000)에 따른 블록(1050)의 비-제로 계수들의 프로세스(1100)의 가지들(1117)에 의한 프로세싱의 결과들을 예시한다. 위에서 표시된 바와 같이, 스캔 순서(1000)가 주어질 경우에, 최종 비-제로 계수는 계수(1056)이다.
Figure 112019125280091-pct00006
스캔 순서(1000)를 이용하면, 1 차원 어레이 u는 값들 u[0-37] = {8, 2, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1}을 포함한다. 값들 u[0-37]은 최종 비-제로 계수(즉, 계수(1056)까지의, 그리고 이를 포함하는 u 어레이의 서브세트이다. 값들 u[0-37]은 11 개의 비-제로 계수들을 포함한다. 표 1로부터 알 수 있는 바와 같이, LAST_EOB_C_FLAG는 네 번(4) 코딩되고, LAST_EOB_R_FLAG는 네 번(4) 코딩된다. 대조적으로, 인터리빙 접근법을 구현하는 시스템은 비-제로 계수가 최종 비-제로 계수인지 여부를 11 번 코딩하고; 데카르트 좌표 접근법을 구현하는 시스템은 컨텍스트-기반 코딩을 이용하여, 1111100의 7 개의 빈들(즉, 열 값 6) 및 110의 3 개의 빈들(즉, 행 값 2)을 코딩한다.
구현예에서, 프로세스(1100)는 열 세트 C가 N-2개의 엘리먼트들을 포함할 때(즉, 열 세트 C의 기수(cardinality), |C|가 N-1과 동일함), 1120에서 플래그 LAST_EOB_C_FLAG를 코딩하는 것을 스킵할 수 있다. 열 세트 C가 N-1개의 엘리먼트들을 포함하고, 프로세스(1100)가 블록(1120)에 있을 경우에, 그것은 열 세트 C에서의 N-1 열 값들의 어느 것도 최종 비-제로 계수를 포함하지 않는 경우이어야 한다. 스캔 순서에 따라서는, 열 세트 C에서의 열 인덱스들은 순차적인 순서로 반드시 추가되지 않을 수 있다. 즉, 더 큰 인덱스는 일부 스캔 순서들에서의 더 작은 인덱스 전에 추가될 수 있다. 추가적으로, 프로세스(1100)가 1120에 있으므로, 그것은 열 값 ci가 (블록(1108)에서 sig[i] = 1이기 때문에) 적어도 하나의 비-제로 계수를 포함하는 경우이어야 한다. 이와 같이, 또한, 열 세트 C 외부의 최종 나머지 열인 현재의 열은 블록의 최종 비-제로 계수를 포함하는 것으로 추론될 수 있다. 이와 같이, LAST_EOB_C_FLAG를 코딩하는 것이 스킵될 수 있다. 유사하게, 프로세스(1100)는 행 세트 R이 N-1개의 엘리먼트들을 포함할 때(즉, 행 세트 R의 기수, |R|은 N-1과 동일함), 1130에서 플래그 LAST_EOB_R_FLAG를 코딩하는 것을 스킵할 수 있다.
NxN 블록의 모든 각각의 계수가 비-제로 계수일 경우에, 이 개시내용에 따른 구현예들은 N-1개의 LAST_EOB_C_FLAG들(즉, 열 당 하나의 플래그) 및 N-1개의 LAST_EOB_R_FLAG들(즉, 행 당 하나의 플래그)을 코딩(인코딩 및/또는 디코딩)한다. 대조적으로, 인터리빙 접근법은 N*N-1개의 LAST_SIG_FLAG들(즉, 모든 각각의 비-제로 계수에 대한 하나의 플래그)을 코딩한다. 데카르트 좌표 접근법은 N = 4일 경우에 6 개의 빈들(열 및 행 값들의 각각을 위한 3 개의 빈들); N = 8일 경우에 12 개의 빈들, N = 16일 경우에 18 개의 빈들, 및 N = 32일 경우에 24 개의 빈들을 코딩한다. 이하의 표 2는 N의 상이한 값들에 대한 최악의 경우의 복잡도(즉, 값의 수)를 요약한다.
Figure 112019125280091-pct00007
표 2가 예시하는 바와 같이, 이 개시내용에 따른 구현예들은 NxN 블록에서 인코딩되고 디코딩될 가장 높은 수의 빈들에서 측정된 바와 같은 최악의 경우의 복잡도의 측면에서, 인터리빙 접근법에 비해 개선들을 제공할 수 있다.
위에서 설명된 바와 같이, 표 2는 이 개시내용에 따른 구현예들과 인터리빙 접근법 사이의, 최악의 경우의 복잡도에서의 차이들은 블록 크기가 증가함에 따라 늘어난다는 것을 표시한다. 추가적으로, 위에서 설명된 바와 같이, 인터리빙 접근법은 희소 변환 블록들에 대해 양호하게 작동한다. 이와 같이, 이 개시내용에 따른 구현예들은 (즉, 본원에서 개시된 접근법과 인터리빙 접근법 사이에서) 인코딩 접근법을 선택적으로 선택할 수 있다. 예컨대, 작은 블록들(예컨대, 4x4 블록들)에 대하여, 인터리빙 접근법은 eob 포지션들을 코딩(즉, 인코딩 및/또는 디코딩)하기 위하여 이용될 수 있는 반면, 본원에서 개시된 바와 같은 접근법은 더 큰 블록들(예컨대, 8x8 블록들 또는 더 큰 것)에 대해 이용될 수 있다. 또 다른 예에서, 어느 접근법을 이용할 것인지의 선택은 컬러 컴포넌트들에 종속될 수 있다. 예컨대, 본원에서 개시된 바와 같은 접근법은 휘도 블록들에 대해 이용될 수 있는 반면, 데카르트 좌표 접근법 또는 인터리빙 접근법은 (전형적으로 희소한) 색차 블록들에 대해 이용될 수 있다. 또 다른 예에서, 선택은 픽처 유형들 및/또는 코딩 모드들에 종속될 수 있다. 예컨대, 본원에서 개시된 바와 같은 접근법은 인트라-코딩된 블록들에 대해 이용될 수 있고, 데카르트 좌표 접근법 또는 인터리빙 접근법은 인터-코딩된 블록들에 대해 이용될 수 있다. 또 다른 예에서, 선택은 이전에 디코딩된 블록들로부터의 통계들에 종속될 수 있어서, 선택이 데이터 자체에 적응적으로 되게 할 수 있다. 추가의 예에서, 선택들은 픽처/프레임 헤더에서, 그리고 픽처/프레임 내의 블록들에 대해 시그널링될 수 있고, 그 블록들에 대한 시그널링된 선택이 이용된다.
도 12는 이 개시내용의 구현예에 따른, 데카르트 그룹화 좌표계를 이용하여, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 코딩하기 위한 프로세스(1200)의 흐름도이다. 데카르트 그룹화 좌표계에서, 변환 블록의 열 값들은 열 그룹들로 그룹화되고, 변환 블록의 행 값들은 행 그룹들로 그룹화된다. 프로세스(1200)는 열 값의 그룹 내에서, 열 값 및 인덱스를 포함하는 열 그룹을 표시함으로써 최종 비-제로 계수의 열 값을 코딩할 수 있다. 프로세스(1200)는 비-제로 변환 계수를 포함하는 열 그룹이 비-제로 변환 계수를 포함하는지 여부를 코딩한다.
프로세스(1200)는 프로세스(1100)의 양상들을 공유할 수 있다. 프로세스(1100)의 블록들로서 번호부여되는 프로세스(1200)의 블록들을 위한 설명들은 생략된다.
예에서, 프로세스(1200)는 변환 블록이 상대적으로 높은 수의 비-제로 변환 계수들을 포함하는 경우들에 있어서 이용될 수 있다. 즉, 프로세스(1200)는 변환 블록이 밀집될 때에 이용될 수 있다. 예에서, 블록에서의 비-제로 변환 계수들의 수가 주어진 임계치를 초과할 때, 프로세스(1200)는 변환 블록의 최종 비-제로 계수의 위치를 코딩하기 위하여 실행될 수 있고; 그렇지 않을 경우에는, 프로세스(1100) 또는 본원에서 개시된 또 다른 프로세스가 실행될 수 있다. 대안적으로, 실시예는 프로세스들(1100 및 1200)을 편입시킬 수 있다. 따라서, 프로세스(1200)의 고유한 양상들은 비-제로 변환 계수들의 수가 주어진 임계치를 초과할 때에 수행될 수 있고; 그렇지 않을 경우에는, 프로세스(1100)의 고유한 양상들이 수행될 수 있다.
프로세스(1200)는 밀집된 변환 블록들의 경우에, 프로세스(1100)에 비해 코딩 개선들을 제공할 수 있다. 프로세스(1200)는 (위에서 설명된) 최악의 경우의 복잡도의 측면에서 데카르트 좌표 접근법의 성능과 정합할 수 있거나 이 성능에 접근할 수 있다.
열 그룹들 및 행 그룹들을 예시하기 위하여, 크기 NxN의 블록에 대하여, P가 번호들 {0, ..., N-1}로부터 그룹 번호들 {0, 1, ..., G-1}로의 맵핑을 나타낸다고 하고, 여기서, G는 그룹들의 수이다. 예에서, 제1 맵핑은 열 값들에 대하여 정의될 수 있고, 제2 맵핑은 행 값들에 대하여 정의될 수 있다. N ≤ 32인 예에서, 맵핑 P는 다음에 의해 주어질 수 있다:
P(i) = i, i < 4일 경우
P(i) = 4, 4 ≤ i < 6 일 경우
P(i) = 5, 6 ≤ i < 8 일 경우
P(i) = 6, 8 ≤ i < 12 일 경우
P(i) = 7, 12 ≤ i < 16 일 경우
P(i) = 8, 16 ≤ i < 24 일 경우
P(i) = 9, 24 ≤ i < 32 일 경우
위의 맵핑을 이용하면, 열 값 15(즉, 12 ≤ i < 16)는 열 그룹 번호 7로 맵핑될 수 있고(즉, P(15) = 7); 행 값 3(즉, i < 4)은 행 그룹 번호 3으로 맵핑될 수 있다(즉, P(3) = 3). 더 많거나 더 적은 그룹들이 이용가능할 수 있다. 그룹들의 수는 블록 크기에 종속될 수 있다. N = 64인 예에서, 위의 맵핑은 다음을 포함하도록 확장될 수 있다:
P(i) = 10, 32 ≤ i < 48 일 경우
P(i) = 11, 48 ≤ i < 64 일 경우
위의 맵핑들을 이용하면, 도 10의 계수(1056)는 열 그룹 번호 5로 맵핑하고, 열 그룹 번호 5 내의 0 번째 열에 있다. 열 그룹 번호 5는 블록(1050)의 열들 6 및 7을 포함한다. 상이한 맵핑들이 이용가능할 수 있다. 상이한 맵핑들은 클록-종료(end-of-clock) 계수에 관련되는 신택스 엘리먼트들이 코딩되는 횟수의 측면에서 상이한 최악의 경우의 복잡도를 유발할 수 있다.
프로세스(1200)와 프로세스(1100) 사이의 차이들이 이제 설명된다. 도 12에서 도시되지 않지만, 프로세스(1200)는 최종 비-제로 계수의 열 그룹 eobc 및 행 그룹 eobr를 결정할 수 있다.
1202에서, 프로세스(1200)는 열 그룹 세트 C를 비어 있는 세트로 초기화하고, 행 그룹 세트 R을 비어 있는 세트로 초기화한다.
열 그룹 세트 C는 프로세스(1200)에 의해 이미 방문된 열 그룹들의 추적을 계속한다. 방문된 열 그룹은 이 문맥에서, 현재의 비-제로 계수가 스캔 순서가 주어져서 방문될 때, 또 다른 비-제로 계수는 현재의 비-제로 계수와 동일한 열 그룹에 있는 것으로 이미 결정된다는 것을 의미한다. 예컨대, 스캔 순서(1000)에서, 스캔 인덱스 값 23이 프로세싱될 때(즉, 블록 포지션 (4, 2)에서의 계수 값 1에 대응함), 또 다른 비-제로 계수(즉, 스캔 인덱스 값 22에 대응하는 블록 포지션 (5, 1)에서의 계수)가 동일한 열 그룹(즉, 열 그룹 4)에 있는 것으로 이미 결정되므로, 열 그룹 번호 4는 방문되었던 것으로 결정된다(즉, 열 그룹 세트 C는 열 그룹 번호 4를 포함함).
행 그룹 세트 R은 프로세스(1200)에 의해 이미 방문된 행 그룹들의 추적을 계속한다. 방문된 행 그룹은 이 문맥에서, 현재의 비-제로 계수가 스캔 순서가 주어져서 방문될 때, 또 다른 비-제로 계수는 현재의 비-제로 계수와 동일한 행 그룹에 있는 것으로 이미 결정된다는 것을 의미한다.
도 12의 블록(1116) 후에, 프로세스(1200)는 1217로 진행한다. 1217에서, 프로세스(1200)는 시퀀스(1218 내지 1227) 및 시퀀스(1228 내지 1237)에 의해 주어진 2 개의 가지들을 프로세싱한다. 예에서, 2 개의 가지들은 순차적으로 프로세싱될 수 있다. 또 다른 예에서, 2 개의 가지들은 병렬로 프로세싱될 수 있다.
1218에서, 최종 비-제로 계수의 열 그룹이 아직 발견되지 않았고(즉, EOB_C_FOUND = 0) 현재의 계수의 열 값(즉, 열 그룹 P(ci))을 포함하는 열 그룹이 아직 방문되지 않았을 경우에(즉, 열 그룹 값 P(ci)가 열 그룹 세트 C에 포함되지 않음), 프로세스(1200)는 1120으로 진행한다. 그렇지 않을 경우에는, 시퀀스(1220 내지 1127)가 스킵된다.
1220에서, 프로세스(1200)는 플래그 LAST_EOB_C_FLAG를 코딩할 수 있다. 플래그 LAST_EOB_C_FLAG는 현재의 비-제로 계수의 열 그룹이 최종 비-제로 계수를 포함하는 열 그룹인지 여부를 표시한다. 예컨대, 인코더에 의해 구현될 때, 프로세스(1200)는 값 P(ci) = P(eobc)를 인코딩할 수 있다. 디코더에서 구현될 때, 프로세스(1100)는 그것으로부터의 플래그 LAST_EOB_C_FLAG가 설정될 수 있는 신택스 엘리먼트를 디코딩할 수 있다. 제로(0)는 현재의 계수의 열 그룹이 최종 비-제로 계수의 열 그룹과 동일하지 않을 때에 코딩될 수 있고; 그렇지 않을 경우에는, 일(1)이 코딩된다. 다시, 위에서 설명된 바와 같이, 인코더에 의해 구현될 때, 코딩하는 것은 인코딩된 비트스트림에서 인코딩하는 것을 의미하고; 디코더에 의해 구현될 대, 코딩하는 것은 인코딩된 비트스트림으로부터 디코딩하는 것을 의미한다.
1222에서, 열 그룹 값 P(ci)을 가지는 또 다른 비-제로 변환 계수가 방문될 때/경우에, 프로세스(1200)는 시퀀스(1220 내지 1227)를 스킵할 수 있고, 결과적으로, 열 그룹 P(ci)가 블록의 최종 비-제로 변환 계수를 포함하는지 여부를 표시하는 또 다른 값을 (1220에서) 코딩하는 것을 스킵할 수 있도록, 열 그룹 P(ci)가 방문되었다는 것을 표시하기 위하여, 열 그룹 값 P(ci)는 열 세트 C에 추가된다.
1224에서, 열 그룹 값 P(ci)가 최종 비-제로 계수의 열 그룹 값과 동일할 경우에(즉, P(ci) = P(eob_c)일 때, 또는 등가적으로, LAST_EOB_C_FLAG = 1일 때), 프로세스(1200)는 (1226에서) 플래그 EOB_C_FOUND를 참(예컨대, EOB_C_FOUND = 1)으로 설정한다. 디코더에 의해 구현될 때, 프로세스(1200)는 1226에서, 열 그룹 값 P(ci)가 최종 비-제로 계수의 열 그룹 값(즉, P(eobc))인 것을 또한 레코딩할 수 있다. 1227에서, 프로세스(1200)는 최종 비-제로 계수, eobc의 열을 재구성하기 위하여 P(ci) ≥ 4일 때에 추가적인 비트들을 코딩한다. 예컨대, 그리고 도 10을 참조하면, 최종 비-제로 계수(즉, 계수(1056))가 (위의 맵핑에 따라 열 값들 6 및 7을 포함하는) 열 그룹 번호 5 및 그룹 내의 최초 열에 있으므로, 프로세스(1200)는 추가적인 비트(예컨대, 제로 0의 값)를 코딩할 수 있다. 1227에서 코딩된 추가적인 비트들은 그룹에서의 열들의 수에 종속될 수 있다. 프로세스(1200)는 그 다음으로, 1217의 2 개의 가지들이 완료될 때에 1110으로 진행한다.
시퀀스(1228 내지 1237)에서, 프로세스(1200)는 가지(1218 내지 1237)의 단계들과 유사한 단계들을 수행한다. EOB_C_FOUND, 열 그룹 P(ci), 및 열 그룹 세트 C 대신에, EOB_R_FOUND, 행 그룹 P(ri), 및 행 그룹 세트 R이 이용된다는 것을 제외하고는, 블록(1228)은 블록(1218)과 동일할 수 있다. LAST_EOB_C_FLAG를 코딩하는 대신에, 프로세스(1200)는 현재의 비-제로 계수의 행 그룹이 최종 비-제로 계수의 행 그룹인지 여부를 표시하는 LAST_EOB_R_FLAG를 코딩한다는 것을 제외하고는, 블록(1230)은 블록(1220)과 동일할 수 있다. 열 그룹 세트 C 및 열 그룹 값 P(ci) 대신에, 행 그룹 세트 R 및 행 그룹 값 P(ri)가 이용된다는 것을 제외하고는, 블록(1232)은 블록(1222)과 동일할 수 있다. 열 그룹 값 P(ci)를 최종 비-제로 계수의 열 그룹 값(P(eobc))과 비교하는 대신에, 행 그룹 값 P(ri)는 최종 비-제로 계수의 행 그룹 값(P(eobr))과 비교된다는 것을 제외하고는, 블록(1234)은 블록(1224)과 동일할 수 있다. 플래그 EOB_C_FOUND 대신에, 플래그 EOB_R_FOUND인 것을 제외하고는, 블록(1236)은 블록(1226)과 동일할 수 있다. 추가적인 비트들이 최종 비-계수 계수의 행을 재구성하기 위하여 코딩된다는 것을 제외하고는, 블록(1237)은 블록(1227)과 동일할 수 있다.
도 13은 이 개시내용의 구현예에 따른, 극 좌표계를 이용하여, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 코딩하기 위한 프로세스(1300)의 흐름도이다. 프로세스(1300)는 위에서 설명된 프로세스들(1100 및 1200)과 유사하다. 그러나, 프로세스(1300)는 극 좌표계를 이용한다. 프로세스(1300)의 극 좌표계는 도 15 및 도 10의 블록(1050)에 대하여 추가로 설명된다.
도 15는 이 개시내용의 구현예들에 따른, 극 좌표계(1500)의 예이다. 도 15는 도 10의 스캔 순서(1000)를 복제한다. 극 좌표계(1500)는 원점 및 대각 라인들에 의해 특징지어질 수 있다. 예에서, 원점은 블록(1050)의 DC 계수(즉, 계수(1058))일 수 있다. 즉, 원점은 스캔 인덱스 값 0(즉, 스캔 인덱스(1504))에 대응할 수 있다.
위에서 표시된 바와 같이, 도 10의 블록(1050)의 각각의 계수는 데카르트 위치 (열, 행)에서 위치된다. 예컨대, 계수(1056)는 데카르트 위치 (6, 2)에 있다. 극 좌표계(1500)의 반-대각 라인들은 동일한 값 col+row을 가지는 블록(1050)의 계수들이 동일한 반-대각 라인 상에 있는 것으로 고려되도록 한 라인들일 수 있다.
예컨대, 반-대각 라인(1502)은 col + row = 1을 가지는 그 계수들을 포함한다. 이와 같이, (블록 위치 (0, 1)에서의 계수에 대응하는) 스캔 인덱스 값 일(1) 및 (블록 위치 (1, 0)에서의 계수에 대응하는) 스캔 인덱스 값 이(2)에 대응하는 계수들은 동일한 반-대각 라인(즉, 반-대각 라인(1502)) 상에 있다.
또 다른 예로서, 반-대각 라인(1506)은 col + row = 4를 가지는 블록(1050)의 그 계수들을 포함한다. 이와 같이, 반-대각 라인(1506)은 데카르트 위치들 (4, 0), (3, 1), (2, 2), (1, 3), 및 (0, 4)에서의 계수들에 각각 대응하는 스캔 포지션들 10, 11, 12, 13, 및 14에서의 계수들을 포함한다. 유사하게, 반-대각 라인(1508)은 col + row = 8을 가지는 블록(1050)의 그 계수들을 포함한다. 이와 같이, 반-대각 라인(1508)은 데카르트 위치들 (7, 1), (6, 2), (5, 3), (4, 4), (3, 5), (2, 6), 및 (1, 7)에서의 계수들에 각각 대응하는 스캔 포지션들 36, 37, 38, 39, 40, 41, 및 42에서의 계수들을 포함한다.
극 좌표계(1500)에서, 계수는 대각 라인 상의 계수 및 계수의 포지션을 포함하는 반-대각 라인에 의해 설명된다. 즉, 계수는 튜플(반-대각 라인, 포지션)로 설명될 수 있다. 예에서, 포지션은 계수 행 번호에 의해 주어질 수 있다. 또 다른 예에서, 포지션은 계수의 열 번호에 의해 주어질 수 있다. 포지션을 설명하기 위한 다른 옵션들이 이용가능할 수 있다.
이와 같이, 변환 블록에서의 최종 비-제로 계수(예컨대, 도 10의 스캔 인덱스(1006)에 대응하는 계수(1056))의 포지션은 튜플(eobd, eoba)을 이용하여 설명될 수 있다. 계수(1056)의 반-대각 라인은 eobd = 6 + 2 = 8에 의해 주어질 수 있다. 계수의 열 번호가 포지션 eoba에 대해 이용될 경우에, 계수(1056)는 튜플 (8, 6)로 설명될 수 있다. 계수의 행 번호가 포지션 eoba에 대해 이용될 경우에, 계수(1056)는 튜플 (8, 2)로 설명될 수 있다. 이하의 설명에서, 반-대각 라인을 따르는 포지션은 계수 행 번호에 의해 주어지도록 가정된다. DC 포지션을 원점으로서 간주하면, 극 좌표계(1500)는 극 좌표계의 별개의 버전으로서 간주될 수 있다. 도 13에서 도시되지 않지만, 프로세스(1300)는 최종 비-제로 계수의 반-대각 라인 eobd 및 포지션 eoba를 결정할 수 있다.
프로세스(1300)는 비-제로 계수를 포함하는 반-대각 라인이 스캔 순서가 주어진 블록의 최종 비-제로 계수를 포함하는 반-대각 라인인지 여부를 한 번 코딩한다. 프로세스(1300)는 최종 비-제로 계수를 포함하는 반-대각 라인 상의 현재의 비-제로 계수에 대하여, 현재의 비-제로 계수가 최종 비-제로 계수인지 여부를 코딩(또는 추론할 수 있음)한다. 프로세스(1300)는 도 11의 프로세스(1100)의 블록들과 동일한 블록들의 일부를 포함한다. 단순함을 위하여, 유사하게 번호부여된 블록들의 설명이 생략된다.
1302에서, 프로세스(1300)는 대각 세트 D를 비어 있는 세트로 초기화한다. 대각 세트 D는 프로세스(1300)에 의해 이미 방문된 반-대각 라인들의 추적을 계속한다. 방문된 반-대각 라인은 이 문맥에서, 현재의 비-제로 계수가 스캔 순서가 주어져서 방문될 때, 또 다른 비-제로 계수는 현재의 비-제로 계수와 동일한 반-대각 라인에 포함되는 것으로 이미 결정된다는 것을 의미한다. 예컨대, 스캔 순서(1000)에서, 스캔 인덱스 값 2가 프로세싱될 때(예컨대, 블록 위치 (1, 0)에서의 계수 값 3에 대응함), 또 다른 비-제로 계수(즉, 스캔 인덱스 값 1에 대응하는 블록 위치 (0, 1)에서의 계수)가 반-대각 라인(즉, 반-대각 라인 값 1)에 포함되는 것으로 이미 결정되므로, 반-대각 라인 1(즉, 1 + 0)은 방문된 것으로 결정된다(즉, 대각 세트 D는 값 2를 갖는 반-대각 라인을 포함함).
1304에서, 스캔 포지션 i는 제로로 초기화되고; 플래그 EOB_D_FOUND 및 플래그 EOB_A_FOUND는 각각 거짓(예컨대, 값 제로)으로 설정된다. 스캔 포지션 i는 1 차원 어레이 u로의 인덱스로서 이용된다. 플래그 EOB_D_FOUND는 블록-종료 계수와 동일한 반-대각 라인 상에 있는 변환 계수가 프로세싱(즉, 스캔 순서에 따라 방문됨)되었는지 여부를 표시한다. 플래그 EOB_A_FOUND는 최종 비-제로 계수의 반-대각 라인 상의 현재의 변환 계수의 포지션이 최종 비-제로 계수의 포지션인지 여부를 표시한다.
1317에서, 프로세스(1300)는 현재의 계수에 대한 반-대각 라인 값을 연산한다. 현재의 계수는 스캔 포지션 i의 스캔 인덱스 값에 대응하는 변환 블록의 계수이다. 1116에서 결정된 열 값(즉, ci) 및 행 값(즉, ri)을 이용하면, 프로세스(1300)는 현재의 반-대각 라인 di를 di = ci + ri로서 연산한다.
1318에서, 프로세스(1300)가 최종 비-제로 계수를 포함하는 반-대각 라인이 결정되지 않았고(즉, 플래그 EOB_D_FOUND = 0) 현재의 반-대각 라인 di가 방문되지 않은(즉, 값 di는 세트 D에 있지 않음) 것으로 결정할 경우에, 프로세스(1300)는 1320으로 진행하고; 그렇지 않을 경우에는, 프로세스(1300)가 1328로 진행한다.
1320에서, 프로세스(1300)는 플래그 LAST_EOB_D_FLAG를 코딩한다. 플래그 LAST_EOB_D_FLAG는 현재의 비-제로 계수의 반-대각 라인이 최종 비-제로 계수의 반-대각 라인인지 여부를 표시한다. 예컨대, 인코더에 의해 구현될 때, 프로세스(1300)는 값 di = eobd을 인코딩할 수 있다. 디코더에서 구현될 때, 프로세스(1300)는 그것으로부터의 플래그 LAST_EOB_D_FLAG가 설정될 수 있는 신택스 엘리먼트를 디코딩할 수 있다. 제로(0)는 현재의 계수의 반-대각 라인이 최종 비-제로 계수의 반-대각 라인과 동일하지 않을 때에 코딩될 수 있고; 그렇지 않을 경우에는, 일(1)이 코딩된다. 다시, 위에서 설명된 바와 같이, 인코더에 의해 구현될 때, 코딩하는 것은 인코딩된 비트스트림에서 인코딩하는 것을 의미하고; 디코더에 의해 구현될 대, 코딩하는 것은 인코딩된 비트스트림으로부터 디코딩하는 것을 의미한다.
1322에서, 동일한 반-대각 라인 값 di를 가지는 또 다른 변환 계수가 방문될 때/경우에, 프로세스(1300)는 가지(1320 내지 1326)를 스킵할 수 있고, 결과적으로, 반-대각 값 di가 블록의 최종 비-제로 변환 계수를 포함하는지 여부를 표시하는 또 다른 값을 (1320에서) 코딩하는 것을 스킵할 수 있도록, 반-대각 라인 값 di가 방문되었다는 것을 표시하기 위하여, 현재의 계수의 반-대각 라인 값 di는 반-대각 세트 D에 추가된다.
1324에서, 반-대각 라인 값 di가 최종 비-제로 계수의 반-대각 라인 값과 동일할 경우에(즉, di = eobd일 때, 또는 등가적으로, LAST_EOB_D_FLAG = 1일 때), 프로세스(1300)는 플래그 EOB_D_FOUND를 참으로(예컨대, EOB_D_FOUND = 1) (1326에서) 설정하고; 그렇지 않을 경우에는, 프로세스(1300)가 1328로 진행한다. 디코더에 의해 구현될 때, 프로세스(1300)는 1326에서, 반-대각 라인 값 di가 최종 비-제로 계수의 반-대각 라인 값(즉, eobd)인 것을 또한 레코딩할 수 있다. 프로세스(1300)는 그 다음으로, 1328로 진행한다.
1328에서, 프로세스(1300)가 EOB_D_FOUND가 설정된 것으로(즉, EOB_D_FOUND = 1) 결정할 경우에, 프로세스(1300)는 1330으로 진행하고; 그렇지 않을 경우에는, 프로세스(1300)가 1112로 진행한다. 시퀀스(1330 내지 1338)에서, 프로세스(1300)는 반-대각 라인 상의 현재의 비-제로 계수의 포지션이 최종 비-제로 계수의 포지션인지 여부를 코딩하거나 추론한다. 1328에서, 플래그 EOB_D_FOUND가 설정될 경우에, 그것은 또한, 반-대각 라인 값 di가 최종 비-제로 계수의 반-대각 라인 값(즉, eobd)인 것을 의미하고; 그것은 또한, 현재의 반-대각 라인이 최종 비-제로 계수를 포함하므로, 후속 반-대각 라인들이 오직 제로 계수들을 포함한다는 것을 의미한다. 후속 반-대각 라인은 임의의 반-대각 라인 di+k이고, 여기서, k는 제로(0) 초과인 임의의 값이다.
1330에서, 프로세스(1300)는 현재의 계수 포지션 (ci, ri)이 반-대각 라인 di의 최종 포지션인지 여부를 결정한다. 그렇지 않을 경우에, 프로세스는 1334로 진행한다. 그러할 경우에, 1332에서, 프로세스(1300)는 최종 비-제로 계수의 포지션(즉, eoba)이 현재의 계수의 행 값과 동일한 것을 (인코더에 의해 인코딩하거나 디코더에 의해 디코딩하는 대신에) 추론할 수 있다. 즉, eoba가 ri과 동일한 것으로 추론될 수 있다. 예에서, 프로세스(1330)는 모든 k > 0에 대하여, di+k가 di와 동일하지 않은 것으로 결정함으로써, 현재의 계수 포지션 (ci, ri)이 반-대각 라인 di의 최종 포지션인 것으로 결정할 수 있다. 프로세스(1300)는 그 다음으로, 1112로 진행한다.
1334에서, 프로세스(1300)는 플래그 LAST_EOB_A_FLAG를 코딩한다. 플래그 LAST_EOB_A_FLAG는 현재의 비-제로 계수의 반-대각 라인 상의 포지션이 최종 비-제로 계수의 포지션인지 여부를 표시한다. 예컨대, 인코더에 의해 구현될 때, 프로세스(1300)는 값 ri = eoba을 인코딩할 수 있다. 디코더에서 구현될 때, 프로세스(1300)는 그것으로부터의 플래그 LAST_EOB_A_FLAG가 설정될 수 있는 신택스 엘리먼트를 디코딩할 수 있다. 제로(0)는 현재의 계수의 반-대각 라인 상의 포지션이 최종 비-제로 계수의 반-대각 라인 상의 포지션과 동일하지 않을 때에 코딩될 수 있고; 그렇지 않을 경우에는, 일(1)이 코딩된다.
1336에서, 프로세스(1300)는 포지션 값 ri이 최종 비-제로 계수의 반-대각 라인 di 상의 포지션 값과 동일한지 여부(즉, ri = eobr일 때, 또는 등가적으로, LAST_EOB_A_FLAG = 1일 때)를 결정한다. 그렇지 않을 경우에, 프로세스(1300)는 1112로 진행한다. 그러할 경우에, 프로세스(1300)는 (1338에서) 플래그 EOB_A_FOUND를 참인 것으로(예컨대, EOB_A_FOUND = 1)으로 설정한다. 디코더에 의해 구현될 때, 프로세스(1300)는 1338에서, 행 값 ri이 최종 비-제로 계수의 반-대각 라인을 따르는 포지션(즉, eobr)인 것을 또한 레코딩할 수 있다. 프로세스(1300)는 그 다음으로, 1112로 진행한다.
1312에서, 변환 블록의 모든 계수들이 프로세싱되었을 경우(즉, 스캔 포지션 i = N*N), 또는 최종 비-제로 변환 계수의 반-대각 라인이 방문되었고(즉, EOB_D_FOUND = 1) 반-대각 라인 상의 최종 비-제로 포지션의 포지션이 발견되었을 경우에(즉, EOB_A_FOUND = 1), 프로세스(1300)는 종결되고; 그렇지 않을 경우에는, 프로세스가 1106에서 계속된다.
위에서 설명된 바와 같이, 프로세스(1300)는 현재의 계수가 EOB_D_FOUND = 1일 때에(즉, 현재의 반-대각 라인이 최종 비-제로 계수를 포함하는 반-대각 라인임) 비-제로 계수이고 현재의 계수 포지션 (ci, ri)은 반-대각 라인의 최종 포지션인 것을 (인코더에 의해 인코딩하거나 디코더에 의해 디코딩하는 대신에) 추론할 수 있다. 이와 같이, 프로세스(1300)는 값 sig[i]을 인코딩하거나 디코딩하는 비용을 절약할 수 있다.
도 14는 이 개시내용의 구현예에 따른, 계수 그룹 좌표계를 이용하여, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 코딩하기 위한 프로세스(1400)의 흐름도이다. 계수 그룹 좌표계는 변환 블록을 변환 계수들의 그룹들로 파티셔닝한다. 계수 그룹 좌표계의 제1 차원은 양자화된 변환 계수들의 그룹들일 수 있고, 제2 차원은 그룹 내의 위치일 수 있다. 계수 그룹 좌표계는 모든 스캔 포지션들 {0, ..., N*N-1}을 다수의 비-중첩하는 그룹들 {G0, ..., GK}로 파티셔닝할 수 있고, 여기서, K는 N*N-1 미만인 양의 정수이다. 다음의 설명에서, 그룹이 계수를 포함한다는 것을 언급하는 것은 그룹이 계수의 스캔 인덱스를 포함한다는 것을 언급하는 것과 동등하다. 유사하게, 비-제로 계수의 그룹 번호는 비-제로 계수의 스캔 인덱스를 포함하는 그룹 번호와 동등하다.
계수 그룹들 {G0, ..., GK}이 주어질 경우에, 변환 블록에서의 최종 비-제로 계수의 포지션 eob는 (eobg, eoba)를 이용하여 설명될 수 있고, 여기서, eobg는 블록-종료 계수를 포함하는 그룹 Gk의 인덱스 k를 표시하고, eoba는 그룹 Gk에서의 오프셋 포지션을 표시한다. 오프셋 포지션 eoba는 eoba = eob - Gk,0로서 결정될 수 있다. 즉, 오프셋 포지션 eoba는 블록-종료 계수의 스캔 인덱스 포지션 마이너스 블록-종료 계수를 포함하는 그룹의 최초 스캔 인덱스이다.
도 16은 이 개시내용의 구현예들에 따른, 계수 그룹 좌표계(1600)의 예이다. 계수 그룹 좌표계(1600)는 각각의 그룹이 스캔 포지션들 {16k, 16k + 1, ..., 16k + 15}을 포함하도록, 스캔 포지션들을 그룹들 Gk로 파티셔닝한다. 즉, 각각의 그룹 Gk는 16 개의 연속 스캔 포지션들로 구성된다. 이와 같이, 계수 그룹 좌표계(1600)는 네 개(4)의 그룹들을 포함한다. 그룹 G1(즉, 그룹(1602))은 스캔 포지션들 {0, 1, ..., 15}을 포함한다. 그룹 G2(즉, 그룹(1604))는 스캔 포지션들 {16, 17, ..., 31}을 포함한다. 그룹 G3(즉, 그룹(1606))은 스캔 포지션들 {31, 32, ..., 47}을 포함한다. 그룹 G4(즉, 그룹(1608))는 스캔 포지션들 {48, 49, ..., 63}을 포함한다.
다른 계수 그룹들이 또한 가능하다. 예컨대, 스캔 포지션들은 그룹들 G0 = {0}, G1 = {1}, G2 = {2, 3}, G3 = {4, 5, 6, 7}, G4 = {8, ..., 15}, G5 = {16, ..., 31}, G6 = {32, ..., 63}, G7 = {64, ..., 127}, G8 = {128, ..., 255}, G9 = {256, 511}, G10 = {512, ..., 1023}으로 파티셔닝될 수 있다. 계수 그룹들 Gk의 또 다른 예는 k ≥ 6에 대하여, G0 = {0}, G1 = {1}, G2 = {2, 3}, G3 = {4, 5, 6, 7}, G4 = {8, ..., 15}, G5 = {16, ..., 31}, Gk = {32 + 16(k - 6), ..., 47 + 16(k - 6)}일 수 있다.
프로세스(1400)는 계수 그룹 및 블록-종료의 포지션 오프셋, (eobg, eoba)을 코딩하는 예이다. 프로세스(1400)는 프로세스(1100)의 양상들을 공유할 수 있다. 프로세스(1100)의 블록들로서 번호부여되는 프로세스(1400)의 블록들을 위한 설명들은 생략된다.
1402에서, 프로세스(1400)는 그룹 세트 G를 비어 있는 세트로 초기화한다. 그룹 세트 G는 프로세스(1400)에 의해 이미 방문된 행 그룹들의 추적을 계속한다. 방문된 그룹은 이 문맥에서, 현재의 비-제로 계수가 스캔 순서가 주어져서 방문될 때, 또 다른 비-제로 계수는 현재의 비-제로 계수와 동일한 그룹에 포함되는 것으로 이미 결정된다는 것을 의미한다.
1404에서, 스캔 포지션 i는 제로로 초기화되고, 플래그 EOB_G_FOUND는 거짓(예컨대, 값 제로)인 것으로 설정되고; 플래그 EOB_A_FOUND는 거짓으로 설정된다. 스캔 포지션 i는 1 차원 어레이 u로의 인덱스로서 이용된다. 플래그 EOB_G_FOUND는 블록-종료 계수의 스캔 포지션과 동일한 그룹 내에 속하는 변환 계수의 스캔 포지션이 프로세싱(즉, 스캔 순서에 따라 방문됨)되었는지 여부를 표시한다. 플래그 EOB_A_FOUND는 최종 비-제로 계수를 포함하는 그룹 내의 현재의 변환 계수의 포지션 오프셋이 최종 비-제로 계수의 포지션 오프셋인지 여부를 표시한다.
1416에서, 프로세스(1400)는 현재의 계수가 속하는 그룹 번호를 결정한다. 등가적으로, 프로세스(1400)는 현재의 계수의 스캔 포지션이 속하는 그룹의 현재의 그룹 번호를 결정한다. 프로세스(1400)는 스캔 포지션 i가 그룹 Gki에 있도록, 스캔 포지션 i(즉, 스캔 포지션 i)의 현재의 그룹 번호 ki를 결정할 수 있다.
1418에서, 프로세스(1400)가 최종 비-제로 계수를 포함하는 그룹이 결정되지 않았고(즉, 플래그 EOB_G_FOUND = 0) 현재의 그룹 번호 ki가 방문되지 않은(즉, 값 ki는 세트 G에 있지 않음) 것으로 결정할 경우에, 프로세스(1400)는 1420으로 진행하고; 그렇지 않을 경우에는, 프로세스(1400)가 1428로 진행한다.
1420에서, 프로세스(1400)는 플래그 LAST_EOB_G_FLAG를 코딩한다. 플래그 LAST_EOB_G_FLAG는 현재의 그룹 번호 ki가 최종 비-제로 계수의 그룹 번호인지 여부를 표시한다. 예컨대, 인코더에 의해 구현될 때, 프로세스(1400)는 값 ki = eobg을 인코딩할 수 있다. 디코더에서 구현될 때, 프로세스(1400)는 그것으로부터의 플래그 LAST_EOB_G_FLAG가 설정될 수 있는 신택스 엘리먼트를 디코딩할 수 있다. 제로(0)는 현재의 그룹 번호가 최종 비-제로 계수의 그룹 번호와 동일하지 않을 때에 코딩될 수 있고; 그렇지 않을 경우에는, 일(1)이 코딩된다.
1422에서, 동일한 그룹 내의 또 다른 비-제로 변환이 방문될 때/경우에, 프로세스(1400)는 시퀀스(1420 내지 1426)를 스킵할 수 있고, 결과적으로, 그룹 번호 ki가 블록의 최종 비-제로 변환 계수를 포함하는지 여부를 표시하는 또 다른 값을 (1420에서) 코딩하는 것을 스킵할 수 있도록, 그룹 번호 ki가 방문되었다는 것을 표시하기 위하여, 현재의 그룹 번호 ki는 그룹 세트 G에 추가된다.
1424에서, 현재의 그룹 번호 ki가 최종 비-제로 계수의 그룹 번호와 동일할 경우에(즉, ki = eobg일 때, 또는 등가적으로, LAST_EOB_G_FLAG = 1일 때), 프로세스(1400)는 (1426에서) 플래그 EOB_G_FOUND를 참으로(예컨대, EOB_G_FOUND = 1) 설정하고; 그렇지 않을 경우에는, 프로세스(1400)가 1428로 진행한다. 디코더에 의해 구현될 때, 프로세스(1400)는 1426에서, ki로 번호부여된 그룹이 최종 비-제로 계수(즉, eobg)를 포함하는 그룹인 것을 또한 레코딩할 수 있다. 프로세스(1400)는 그 다음으로, 1428로 진행한다.
1428에서, 프로세스(1400)가 EOB_G_FOUND가 설정된 것으로(즉, EOB_G_FOUND = 1) 결정할 경우에, 프로세스(1400)는 1430으로 진행하고; 그렇지 않을 경우에는, 프로세스(1400)가 1112로 진행한다. 시퀀스(1430 내지 1438)에서, 프로세스(1400)는 최종 비-제로 계수를 포함하는 그룹에서의 비-제로 계수의 포지션 오프셋이 최종 비-제로 계수의 포지션인지 여부를 코딩하거나 추론한다. 1428에서, 플래그 EOB_G_FOUND가 설정될 경우에, 그것은 또한, ki로 번호부여된 현재의 그룹이 최종 비-제로 계수(즉, eobg)의 스캔 인덱스를 포함하는 그룹인 것을 의미한다.
1430에서, 스캔 포지션 i가 그룹에서의 최종 포지션일 경우에, 프로세스(1400)는 1432로 진행하고; 그렇지 않을 경우에는, 프로세스(1400)가 1434로 진행한다. 예에서, 프로세스(1400)는 다음 스캔 포지션 값(즉, i+1)이 그룹 외부에 있는지 여부를 테스트함으로써, 스캔 포지션 i가 그룹에서의 최종 포지션인지 여부를 결정할 수 있다. 예시를 위하여 도 16을 참조하면, 스캔 인덱스 15가 그룹 G1(즉, 그룹(1602))의 최종 포지션인지 여부를 결정하기 위하여, 프로세스(1400)는 스캔 인덱스 i + 1 = 16이 그룹 G1에 있는지 여부를 테스트한다. 위에서 표시된 바와 같이, 그룹 G2(즉, 그룹(1604))는 스캔 포지션 16을 포함하는 그룹이다. 이와 같이, (i+1)은 G1에 있지 않고, 그러므로, 스캔 포지션 i는 그룹 G1에서의 최종 포지션이다.
1432에서, 프로세스(1400)는 최종 비-제로 계수(즉, eoba)의 포지션 오프셋이 최종 비-제로 계수의 오프셋과 동일한 것을 (인코더에 의해 인코딩하거나 디코더에 의해 디코딩하는 대신에) 추론할 수 있다. 즉, eoba가 i - Gki,0과 동일한 것으로 추론될 수 있다. 즉, 최종 비-제로 계수의 오프셋 포지션은 현재의 스캔 인덱스 (i) 마이너스 스캔 인덱스 i를 포함하는 그룹의 최초 스캔 인덱스와 동일하다. 예컨대, 그리고 도 16의 그룹들을 이용하면, 현재의 스캔 포지션 i = 39로 주어질 경우에, 스캔 포지션 i를 포함하는 그룹의 최초 스캔 포지션은 32이다. 이것은 스캔 포지션 39를 포함하는 그룹이 그룹(1604)이고 그룹(1604)의 최초 스캔 포지션이 스캔 포지션 32이기 때문에 그러하다.
1434에서, 프로세스(1400)를 플래그 LAST_EOB_A_FLAG를 코딩한다. 플래그 LAST_EOB_A_FLAG는 그룹 내의 현재의 비-제로 계수의 포지션 오프셋이 최종 비-제로 계수의 포지션 오프셋인지 여부를 표시한다. 예컨대, 인코더에 의해 구현될 때, 프로세스(1400)는 값 (i - Gki,0 = eoba)을 인코딩할 수 있다. 디코더에서 구현될 때, 프로세스(1400)는 그것으로부터의 플래그 LAST_EOB_A_FLAG가 설정될 수 있는 신택스 엘리먼트를 디코딩할 수 있다. 제로(0)는 현재의 계수의 그룹 내의 포지션 오프셋이 최종 비-제로 계수의 포지션 오프셋과 동일하지 않을 때에 코딩될 수 있고; 그렇지 않을 경우에는, 일(1)이 코딩된다.
1436에서, 프로세스(1400)는 (i - Gki,0 = eoba)인지 여부, 또는 등가적으로, 언제 LAST_EOB_A_FLAG = 1인지를 결정한다. 그렇지 않을 경우에, 프로세스(1400)는 1112로 진행한다. 그러할 경우에, 프로세스(1400)는 (1438에서) 플래그 EOB_A_FOUND를 참인 것으로(예컨대, EOB_A_FOUND = 1)으로 설정한다. 디코더에 의해 구현될 때, 프로세스(1400)는 1438에서, 값 i - Gki,0이 최종 비-제로 계수의 포지션 오프셋(eoba)인 것을 또한 레코딩할 수 있다. 프로세스(1400)는 그 다음으로, 1112로 진행한다.
1412에서, 변환 블록의 모든 계수들이 프로세싱되었을 경우(즉, 스캔 포지션 i = N*N), 또는 최종 비-제로 변환 계수의 그룹이 방문되었고(즉, EOB_G_FOUND = 1) 그룹 내의 최종 비-제로 포지션의 포지션 오프셋이 발견되었을 경우에(즉, EOB_A_FOUND = 1), 프로세스(1400)는 종결되고; 그렇지 않을 경우에는, 프로세스가 1106에서 계속된다.
구현예에서, 프로세스(1400)는 1106에서, EOB_G_FOUND = 1일 때(즉, 현재의 그룹이 최종 비-제로 계수를 포함하는 그룹임), 현재의 계수가 비-제로 계수이고, 현재의 스캔 포지션 i가 그룹의 최종 오프셋 포지션인 것(즉, i는 Gki의 최종 포지션임)을 (인코더에 의해 인코딩하거나 디코더에 의해 디코딩하는 대신에) 추론할 수 있다. 이와 같이, 프로세스(1400)는 값 sig[i]을 인코딩하거나 디코딩하는 비용을 절약할 수 있다.
도 17은 이 개시내용의 구현예에 따른, 변환 블록의 최종-비-제로 계수의 위치를 디코딩하기 위한 프로세스(1700)의 흐름도이다. 프로세스(1700)는 디코더(500)와 같은 디코더에서 구현될 수 있다. 프로세스(1700)는 수신국에 의해 구현될 수 있다. 프로세스(1700)는 예컨대, 컴퓨팅 디바이스들에 의해 실행될 수 있는 소프트웨어 프로그램으로서 구현될 수 있다. 소프트웨어 프로그램은, 메모리(204) 또는 보조 스토리지(214)와 같은 메모리에 저장될 수 있고, 컴퓨팅 디바이스로 하여금, 프로세스(1700)를 수행하게 하기 위하여 CPU(202)와 같은 프로세서에 의해 실행될 수 있는 머신-판독가능 명령들을 포함할 수 있다. 프로세스(1700)는 특화된 하드웨어 또는 펌웨어를 이용하여 구현될 수 있다. 일부 컴퓨팅 디바이스들은 다수의 메모리들, 다수의 프로세서들, 또는 둘 모두를 가질 수 있다. 프로세스(1700)의 단계들 또는 동작들은 상이한 프로세서들, 메모리들, 또는 둘 모두를 이용하여 분산될 수 있다. 단수인 용어들 "프로세서" 또는 "메모리"의 이용은 하나의 프로세서 또는 하나의 메모리를 가지는 컴퓨팅 디바이스들 뿐만 아니라, 인용된 단계들의 일부 또는 전부의 수행에서 이용될 수 있는 다수의 프로세서들 또는 다수의 메모리들을 가지는 디바이스들을 망라한다.
1702에서, 프로세스(1700)는 도 5의 압축된 비트스트림(420)과 같은 인코딩된 비트스트림으로부터, 변환 블록의 최초 계수가 비-제로인지 여부를 디코딩한다. 예에서, 블록(1702)은 도 11 내지 도 14의 블록(1108)에 대하여 설명된 바와 같을 수 있다.
1704에서, 프로세스(1700)는 최초 계수가 비-제로인지, 그리고 최초 계수가 제1 차원의 제1 값에 대해 디코딩될 최초 비-제로 계수인지를 결정한다. 그러할 경우에, 프로세스(1700)는 1706으로 진행하고; 그렇지 않을 경우에는, 프로세스가 종료된다.
예에서, 제1 차원의 제1 값은 도 11에 대하여 설명된 바와 같은 데카르트 좌표계의 열 차원에 대한 열 값일 수 있고, 결정하는 것은 블록(1118)에 대하여 설명된 바와 같을 수 있다. 예에서, 제1 차원의 제1 값은 도 11에 대하여 설명된 바와 같은 데카르트 좌표계의 행 차원에 대한 행 값일 수 있고, 결정하는 것은 블록(1128)에 대하여 설명된 바와 같을 수 있다. 예에서, 제1 차원의 제1 값은 도 12에 대하여 설명된 바와 같은 데카르트 그룹화 좌표계의 열 그룹 차원에 대한 열 그룹 값일 수 있고, 결정하는 것은 블록(1218)에 대하여 설명된 바와 같을 수 있다. 예에서, 제1 차원의 제1 값은 도 12에 대하여 설명된 바와 같은 데카르트 그룹화 좌표계의 행 그룹 차원에 대한 행 그룹 값일 수 있고, 결정하는 것은 블록(1228)에 대하여 설명된 바와 같을 수 있다. 예에서, 제1 차원의 제1 값은 도 13에 대하여 설명된 바와 같은 극 좌표계의 반-대각 차원에 대한 반-대각 라인 값일 수 있고, 결정하는 것은 블록(1318)에 대하여 설명된 바와 같을 수 있다. 예에서, 제1 차원의 제1 값은 도 14에 대하여 설명된 바와 같은 계수 그룹 좌표계의 계수 그룹 차원에 대한 계수 그룹 값일 수 있고, 결정하는 것은 블록(1418)에 대하여 설명된 바와 같을 수 있다.
1706에서, 프로세스(1700)는 인코딩된 비트스트림으로부터, 제1 차원의 제1 값이 블록-종료 계수를 표시하는지 여부를 표시하는 제1 신택스 엘리먼트를 디코딩한다. 디코딩은 이용된 좌표계에 종속될 수 있다. 예에서, 디코딩은 도 11의 1120 또는 1130에 대하여 설명된 바와 같을 수 있다. 예에서, 디코딩은 도 12의 1220 또는 1230에 대하여 설명된 바와 같을 수 있다. 예에서, 디코딩은 도 13의 1320에 대하여 설명된 바와 같을 수 있다. 예에서, 디코딩은 도 14의 1420에 대하여 설명된 바와 같을 수 있다.
1708에서, 제1 신택스 엘리먼트가 블록-종료 계수를 표시하는 것에 응답하여, 프로세스(1700)는 최종-비-제로 계수의 위치를 결정하기 위하여 제1 값을 이용한다. 예에서, 블록은 도 11의 시퀀스(1124 내지 1126)에 대하여 설명된 바와 같을 수 있다. 예에서, 블록은 도 11의 시퀀스(1134 내지 1136)에 대하여 설명된 바와 같을 수 있다. 예에서, 블록은 도 12의 시퀀스(1224 내지 1127)에 대하여 설명된 바와 같을 수 있다. 예에서, 블록은 도 12의 시퀀스(1234 내지 1237)에 대하여 설명된 바와 같을 수 있다. 예에서, 블록은 도 13의 시퀀스(1324 내지 1326)에 대하여 설명된 바와 같을 수 있다. 예에서, 블록은 도 14의 시퀀스(1424 내지 1426)에 대하여 설명된 바와 같을 수 있다.
구현예에서, 프로세스(1700)는 최초 변환 계수가 제2 차원의 제2 값에 대해 디코딩될 최초 비-제로 계수인 것으로 결정하는 것에 응답하여, 인코딩된 비트스트림으로부터, 제2 차원의 제2 값이 블록-종료 계수를 표시하는지 여부를 표시하는 제2 신택스 엘리먼트를 디코딩하는 것, 및 제2 신택스 엘리먼트가 블록-종료 계수를 표시하는 것에 응답하여, 최종-비-제로 계수의 위치를 결정하기 위하여 제2 값을 이용하는 것을 포함할 수 있다.
제1 차원 및 제2 차원은 변환 블록의 열들 및 행들을 포함하는 좌표계에서의 차원들일 수 있다. 좌표계는 도 11의 데카르트 좌표계에 대하여 설명된 바와 같을 수 있다.
구현예에서, 제1 차원 및 제2 차원은 극 좌표계에서의 차원들이다. 극 좌표계는 도 7에 대하여 설명된 바와 같을 수 있다. 극 좌표계는 변환 블록의 DC 계수에 중심이 두어질 수 있고, 제1 차원은 변환 블록을 인코딩하기 위하여 이용된 스캔 순서의 반-대각 라인들에 대응할 수 있고, 제2 차원은 제1 차원의 반-대각 라인 상의 포지션에 대응할 수 있다.
제1 차원 및 제2 차원은 계수 그룹 좌표계에서의 차원들일 수 있다. 계수 그룹 좌표계는 도 14에 대하여 설명된 바와 같을 수 있다. 예에서, 계수 그룹 좌표계는 스캔 순서의 스캔 포지션들을 스캔 포지션들의 그룹들로 파티셔닝할 수 있고, 제1 차원은 스캔 포지션들의 그룹들에 대응할 수 있고, 제2 차원은 그룹 내의 스캔 인덱스의 오프셋 포지션에 대응할 수 있다. 예에서, 계수 그룹 좌표계는 변환 블록을 변환 계수들의 그룹들로 파티셔닝할 수 있고, 제1 차원은 변환 계수들의 그룹들에 대응할 수 있고, 제2 차원은 그룹 내의 위치에 대응할 수 있다.
계수 그룹 좌표계의 구현예에서, 그룹들은 동일한 수의 스캔 포지션들을 포함할 수 있다. 예컨대, 동일한 수의 스캔 포지션들은 16일 수 있다.
프로세스(1700)의 구현예에서, 제1 차원 및 제2 차원은 데카르트 그룹화 좌표계에서의 차원들이다. 데카르트 그룹화 좌표계는 도 12에 대하여 설명된 바와 같을 수 있다. 제1 차원은 변환 블록의 열들의 그룹들에 대응할 수 있고, 제2 차원은 변환 블록의 행들의 그룹들에 대응할 수 있다.
계수들의 변환 블록은 인트라-예측을 이용하여 에측된 잔차 블록의 변환 블록일 수 있다. 변환 계수들은 휘도 컬러 컴포넌트들의 블록에 대한 변환 계수들일 수 있다.
도 18은 이 개시내용의 구현예에 따른, 변환 블록의 최종-비-제로 계수의 위치를 디코딩하기 위한 또 다른 프로세스(1800)의 흐름도이다. 프로세스(1800)는 도 5의 디코더(500)와 같은 디코더에서 구현될 수 있다. 프로세스(1800)는 예컨대, 수신국(106)과 같은 컴퓨팅 디바이스들에 의해 실행될 수 있는 소프트웨어 프로그램으로서 구현될 수 있다. 소프트웨어 프로그램은, 메모리(204) 또는 보조 스토리지(214)와 같은 메모리에 저장될 수 있고, 컴퓨팅 디바이스로 하여금, 프로세스(1800)를 수행하게 하기 위하여 CPU(202)와 같은 프로세서에 의해 실행될 수 있는 머신-판독가능 명령들을 포함할 수 있다. 적어도 일부 구현예들에서, 프로세스(1100)는 도 5의 디코더(500)의 엔트로피 디코딩 스테이지(502)에 의해 전체적으로 또는 부분적으로 수행될 수 있다.
1802에서, 프로세스(1800)는 변환 블록의 계수들을 계수 그룹 좌표계로 맵핑한다. 계수 그룹 좌표계는 제1 차원 및 제2 차원을 가질 수 있다. 제1 차원은 변환 계수들의 그룹들에 대응할 수 있다. 제2 차원은 계수들의 그룹들 중 일 그룹 내의 오프셋 포지션에 대응할 수 있다. 예에서, 그룹들의 일부는 비-동일한 수의 계수들을 포함할 수 있다.
1804에서, 프로세스(1800)는 인코딩된 비트스트림으로부터, 최종 비-제로 계수를 포함하는 계수 그룹을 결정한다. 예컨대, 그리고 도 14 및 도 16에 대하여 설명된 바와 같이, 프로세스는 1420에 대하여 설명된 바와 같이 그룹(1606)을 표시하는 신택스 엘리먼트 또는 플래그를 디코딩함으로써, 최종 비-제로 계수를 포함하는 계수 그룹을 결정할 수 있다.
1806에서, 프로세스(1800)는 인코딩된 비트스트림으로부터, 최종 비-제로 계수의, 계수 그룹에서의 최종 비-제로 계수의 오프셋 포지션을 결정한다. 예컨대, 프로세스는 도 14에 대하여 설명된 바와 같이 오프셋 포지션을 결정할 수 있다.
1808에서, 프로세스(1800)는 인코딩된 비트스트림으로부터, 계수 그룹 및 오프셋 포지션에 대응하는 계수까지 계수들을 디코딩한다. 예에서, 계수들은 도 14의 1412 및 1106에 대하여 설명된 바와 같이 디코딩될 수 있다.
프로세스(1800)의 구현예에서, 오프셋 포지션을 결정하는 것은 인코딩된 비트스트림으로부터, 예컨대, 도 14의 1434에 대하여 설명된 바와 같이 오프셋 포지션을 표시하는 신택스 엘리먼트를 디코딩하는 것을 포함할 수 있다.
프로세스(1800)의 구현예에서, 오프셋 포지션을 결정하는 것은, 디코딩되고 있는 현재의 계수가 계수 그룹에서의 최종 오프셋 포지션에 있는 것으로 결정하는 것에 응답하여, 최종 비-제로 계수의 오프셋 포지션이 최종 오프셋 포지션인 것을 추론하는 것을 포함할 수 있다. 예에서, 오프셋 포지션은 도 14의 1430 및 1432에 대하여 설명된 바와 같이 추론될 수 있다.
프로세스(1800)의 구현예에서, 계수 그룹 및 오프셋 포지션에 대응하는 계수까지 계수들을 디코딩하는 것은, 디코딩되고 있는 현재의 계수가 계수 그룹에서의 최종 오프셋 포지션에 있는 것으로 결정하는 것에 응답하여, 현재의 계수가 비-제로 계수인 것을 추론하는 것을 포함할 수 있다. 프로세스는 현재의 계수가 도 14의 1106에 대하여 설명된 바와 같이 비-제로 계수인 것을 추론할 수 있다.
구현예에 따른, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 디코딩하기 위한 또 다른 프로세스가 이제 개시된다. 프로세스는 변환 블록의 계수들을, 제1 차원 및 제2 차원을 가지는 좌표계로 맵핑하는 것을 포함한다. 계수들의 제1의 하나 이상은 제1 차원의 제1 값에서의 좌표계 상에서 배열되고, 계수들의 제2의 하나 이상은 제2 차원의 제2 값에서의 좌표계 상에서 배열된다. 프로세스는 또한, 인코딩된 비트스트림으로부터, 제1 차원의 제1 값이 최종 비-제로 계수를 포함하는지 여부를 제1 값에 대하여 오직 한 번 디코딩하는 것, 인코딩된 비트스트림으로부터, 제2 차원의 제2 값이 최종 비-제로 계수를 포함하는지 여부를 제2 값에 대하여 오직 한번 디코딩하는 것, 및 제1 차원의 디코딩된 제3 값 및 제2 차원의 디코딩된 제4 값을 이용하여 최종 비-제로 계수를 결정하는 것을 포함한다. 디코딩된 제3 값 및 디코딩된 제4 값은 최종 비-제로 계수를 표시할 수 있다.
예컨대, 극 좌표계의 경우에, 제1 차원은 반-대각 라인일 수 있고, 제2 차원은 대각 라인 상의 포지션일 수 있다. 따라서, 제1 차원의 제1 값이 최종 비-제로 계수를 포함하는지 여부를 제1 값에 대하여 오직 한 번 디코딩하는 예는, (즉, row + col = 0 + 1 = 1 + 0 = 1에 대응하는) 도 15의 반-대각 라인(1502)이 최종 비-제로 계수를 포함하는지 여부를 오직 한번 디코딩하는 것일 수 있다. 이 경우에, 반-대각 라인 차원(즉, 제1 차원)의 반-대각 라인(1502)(즉, 제1 값)은 최종 비-제로 계수를 포함하지 않는다.
구현예에서, 제4 값을 디코딩하는 것은 제4 값을 추론하는 것을 의미할 수 있다. 예컨대, 데카르트 좌표계의 경우에, 제4 값은 도 11의 1120에 대하여 설명된 바와 같이 추론될 수 있다. 예컨대, 극 좌표계의 경우에, 제4 값은 도 13의 1332에 대하여 설명된 바와 같이 추론될 수 있다. 예컨대, 계수 그룹 좌표계의 경우에, 제4 값은 도 14의 1432에 대하여 위에서 설명된 바와 같이 추론될 수 있다. 예컨대, 제1 차원이 오직 하나의 엘리먼트를 포함할 경우에, 제4 값은 하나의 값인 것으로 추론될 수 있다. 예컨대, 그룹들 좌표계에서의 그룹이 오직 하나의 스캔 포지션(예컨대, G0 = {0}, G1 = {1})을 포함할 경우에, 제4 값은 그룹의 하나의 스캔 포지션인 것으로 추론될 수 있다. 예컨대, 극 좌표계에서는, 결정된 반-대각 라인이 DC 계수를 포함하는 반-대각 라인(즉, row + col = 0 + 0 = 0에 대응하는 반-대각 라인)인 경우에, 제4 값이 추론될 수 있다.
위에서 설명된 인코딩 및 디코딩의 양상들은 일부 인코딩 및 디코딩 기법들을 예시한다. 그러나, 인코딩 및 디코딩은, 그 용어들이 청구항들에서 이용되므로, 압축, 압축해제, 변환, 또는 데이터의 임의의 다른 프로세싱 또는 변화를 의미할 수 있다는 것이 이해되어야 한다.
단어들 "예" 또는 "구현예"는 예, 사례, 또는 예시로서 작용하는 것을 의미하도록 본원에서 이용된다. "예" 또는 "구현예"로서 본원에서 설명된 임의의 양상 또는 설계는 다른 양상들 또는 설계들에 비해 바람직하거나 유리한 것으로서 반드시 해석되어야 하는 것은 아니다. 오히려, 단어들 "예" 또는 "구현예"의 이용은 구체적인 방식으로 개념들을 제시하도록 의도된다. 이 출원에서 이용된 바와 같이, 용어 "또는"은 배타적 "또는"이 아니라, 포괄적인 "또는"을 의미하도록 의도된다. 즉, 이와 다르게 특정되거나 맥락으로부터 명확하지 않으면, "X 는 A 또는 B 를 포함함"은 자연적인 포괄적 치환들 중의 임의의 것을 의미하도록 의도된다. 즉, X가 A를 포함하거나; X가 B를 포함하거나; 또는 X가 A 및 B 둘 모두를 포함할 경우, "X가 A 또는 B를 포함함"은 전술한 사례들 중의 임의의 것 하에서 충족된다. 게다가, 이 출원 및 첨부된 청구항들에서 이용된 바와 같은 관사들 "a" 및 "an" 은, 이와 다르게 특정되거나 단수 형태로 지향되도록 하기 위하여 맥락으로부터 명확하지 않으면, "하나 이상"을 의미하도록 일반적으로 해석되어야 한다. 또한, 전반에 걸친 용어 "구현예" 또는 "하나의 구현예"의 이용은 이와 같이 설명되지 않으면, 동일한 실시예 또는 구현예를 의미하도록 의도되지는 않는다.
송신국(102) 및/또는 수신국(106)(및 인코더(400) 및 디코더(500)에 의한 것을 포함하는, 그 상에 저장되고 및/또는 그에 의해 실행된 알고리즘들, 방법들, 명령들 등)의 구현예들은 하드웨어, 소프트웨어, 또는 이들의 임의의 조합으로 실현될 수 있다. 하드웨어는 예컨대, 컴퓨터들, 지적 재산(intellectual property; IP) 코어들, 애플리케이션-특정 집적 회로(application-specific integrated circuits; ASIC)들, 프로그래밍가능 로직 어레이들, 광학 프로세서들, 프로그래밍가능 로직 제어기들, 마이크로코드, 마이크로제어기들, 서버들, 마이크로프로세서들, 디지털 신호 프로세서들, 또는 임의의 다른 적당한 회로를 포함할 수 있다. 청구항들에서, 용어 "프로세서"는 전술한 하드웨어 중의 임의의 것을 단독으로 또는 조합하여 중의 어느 하나로 망라하는 것으로서 이해되어야 한다. 용어들 "신호" 및 "데이터"는 상호 교환가능하게 이용된다. 또한, 송신국(102) 및 수신국(106)의 부분들은 동일한 방식으로 반드시 구현되어야 하는 것은 아니다.
또한, 하나의 양상에서, 예컨대, 송신국(102) 또는 수신국(106)은, 실행될 때, 본원에서 설명된 개개의 방법들, 알고리즘들, 및/또는 명령들 중의 임의의 것을 수행하는 컴퓨터 프로그램을 갖는 범용 컴퓨터 또는 범용 프로세서를 이용하여 구현될 수 있다. 추가적으로 또는 대안적으로, 예컨대, 본원에서 설명된 방법들, 알고리즘들, 또는 명령들 중의 임의의 것을 수행하기 위한 다른 하드웨어를 포함할 수 있는 특수 목적 컴퓨터/프로세서가 사용될 수 있다.
송신국(102) 및 수신국(106)은 예컨대, 비디오 회의 시스템에서의 컴퓨터들 상에서 구현될 수 있다. 대안적으로, 송신국(102)은 서버 상에서 구현될 수 있고, 수신국(106)은 핸드-헬드(hand-held) 통신 디바이스와 같은, 서버와는 별도인 디바이스 상에서 구현될 수 있다. 이 사례에서, 송신국(102)은 인코더(400)를 이용하여 컨텐츠를 인코딩된 비디오 신호로 인코딩할 수 있고, 인코딩된 비디오 신호를 통신 디바이스로 송신할 수 있다. 결국, 통신 디바이스는 그 다음으로, 디코더(500)를 이용하여 인코딩된 비디오 신호를 디코딩할 수 있다. 대안적으로, 통신 디바이스는 통신 디바이스 상에 국부적으로 저장된 컨텐츠, 예컨대, 송신국(102)에 의해 송신되지 않았던 컨텐츠를 디코딩할 수 있다. 다른 송신국(102) 및 수신국(106) 구현 방식들이 이용가능하다. 예컨대, 수신국(106)은 휴대용 통신 디바이스가 아니라, 일반적인 정지식 개인용 컴퓨터일 수 있고 및/또는 인코더(400)를 포함하는 디바이스는 또한, 디코더(500)를 포함할 수 있다.
또한, 본 개시내용의 구현예들의 전부 또는 일부는 예컨대, 유형의 컴퓨터-이용가능 또는 컴퓨터-판독가능 매체로부터 액세스가능한 컴퓨터 프로그램 제품의 형태를 취할 수 있다. 컴퓨터-이용가능 또는 컴퓨터-판독가능 매체는 예컨대, 임의의 프로세서에 의한 이용을 위하여, 또는 임의의 프로세서와 관련하여, 프로그램을 유형적으로 포함할 수 있거나, 저장할 수 있거나, 통신할 수 있거나, 전송할 수 있는 임의의 디바이스일 수 있다. 매체는 예컨대, 전자, 자기, 광학, 전자기, 또는 반도체 디바이스일 수 있다. 다른 적당한 매체들이 또한 이용가능하다.
전술한 실시예들, 구현예들, 및 양상들은 본 개시내용의 용이한 이해를 허용하기 위하여 설명되었고, 본 개시내용을 제한하지 않는다. 반대로, 개시내용은 그 범위가 법률 하에서 허용되는 바와 같은 이러한 모든 수정들 및 등가 구조를 망라하기 위하여 가장 넓은 해독을 따라야 할 첨부된 청구항들의 범위 내에 포함된 다양한 수정들 및 등가적인 배열들을 포괄하도록 의도된다.

Claims (21)

  1. 계수들의 변환 블록의 최종 비-제로 계수의 위치를 디코딩하기 위한 방법으로서,
    상기 변환 블록은 스캔 순서를 이용하여 디코딩되고,
    상기 방법은:
    상기 스캔 순서의 모든 스캔 포지션들을 비-중첩하는 그룹들로 파티셔닝하는 단계 ― 상기 비-중첩하는 그룹들의 각각은 상기 스캔 순서의 연속 스캔 포지션들로 구성되고, 상기 스캔 순서는 상기 변환 블록의 계수들의 횡단(traversal)의 순서를 특정하는 1-차원(one-dimensional) 구조이고, 그리고 상기 스캔 순서의 상기 1-차원 구조의 각각의 포지션은 상기 변환 블록의 2-차원(two-dimensional) 위치에 맵핑됨 ―;
    인코딩된 비트스트림으로부터, 상기 비-중첩하는 그룹들 중 하나의 그룹을 결정하는 단계 ― 상기 그룹은 상기 변환 블록의 최종 비-제로 계수를 포함함 ―;
    상기 인코딩된 비트스트림으로부터, 오프셋 포지션을 결정하는 단계 ― 상기 오프셋 포지션은 상기 최종 비-제로 계수의 상기 그룹 내의 포지션을 표시함 ―; 및
    상기 인코딩된 비트스트림으로부터, 상기 비-중첩하는 그룹들 중 상기 그룹 및 상기 오프셋 포지션을 이용하여 상기 변환 블록의 상기 계수들을 디코딩하는 단계를 포함하는, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 디코딩하기 위한 방법.
  2. 제1항에 있어서,
    상기 오프셋 포지션을 결정하는 단계는, 상기 인코딩된 비트스트림으로부터, 상기 오프셋 포지션을 표시하는 신택스 엘리먼트(syntax element)를 디코딩하는 단계를 포함하는, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 디코딩하기 위한 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 오프셋 포지션을 결정하는 단계는, 디코딩되고 있는 현재의 계수가 상기 비-중첩하는 그룹들 중 상기 하나의 그룹 내의 최종 오프셋 포지션에 있는 것으로 결정하는 것에 응답하여, 상기 현재의 계수가 상기 최종 비-제로 계수라고 추론하는 단계를 포함하는, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 디코딩하기 위한 방법.
  4. 제3항에 있어서,
    상기 비-중첩하는 그룹들의 제1 그룹 및 상기 비-중첩하는 그룹들의 제2 그룹은 상이한 수들의 스캔 포지션들을 포함하는, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 디코딩하기 위한 방법.
  5. 제4항에 있어서,
    상기 비-중첩하는 그룹들은 3 개의 그룹들을 포함하는, 계수들의 변환 블록의 최종 비-제로 계수의 위치를 디코딩하기 위한 방법.
  6. 계수들의 변환 블록을 코딩하기 위한 장치로서,
    상기 변환 블록은 스캔 순서를 이용하여 코딩되고,
    상기 장치는 프로세서를 포함하고,
    상기 프로세서는:
    상기 스캔 순서에서 연속 스캔 포지션들의 그룹을 표시하는 제1 인덱스를 결정하고 ― 상기 연속 스캔 포지션들의 그룹은 최종 비-제로 계수의 스캔 포지션을 포함하고, 그리고 상기 스캔 순서는 상기 변환 블록의 계수들의 횡단의 순서를 특정하는 1-차원 구조이고, 그리고 상기 스캔 순서의 상기 1-차원 구조의 각각의 포지션은 상기 변환 블록의 2-차원 위치에 맵핑됨 ―;
    상기 최종 비-제로 계수의 상기 연속 스캔 포지션들의 그룹 내의 오프셋을 표시하는 제2 인덱스를 결정하고; 그리고
    상기 제2 인덱스가 결정될 때까지 상기 변환 블록의 상기 계수들의 서브세트를 코딩하도록
    구성되는, 계수들의 변환 블록을 코딩하기 위한 장치.
  7. 제6항에 있어서,
    상기 연속 스캔 포지션들의 그룹은 최초 스캔 포지션 및 최종 스캔 포지션을 포함하고, 그리고
    상기 제2 인덱스를 결정하는 것은, 상기 최종 비-제로 계수의 스캔 포지션과 상기 최초 스캔 포지션 사이의 차이로서 상기 제2 인덱스를 결정하는 것을 포함하는, 계수들의 변환 블록을 코딩하기 위한 장치.
  8. 제6항에 있어서,
    상기 제2 인덱스를 결정하는 것은, 상기 최종 비-제로 계수의 스캔 포지션이 상기 연속 스캔 포지션들의 그룹 내의 최종 스캔 포지션과 동일한 것을 조건으로 하여, 상기 제2 인덱스가 상기 최종 스캔 포지션이라고 추론하는 것을 포함하는, 계수들의 변환 블록을 코딩하기 위한 장치.
  9. 제6항 내지 제8항 중 어느 한 항에 있어서,
    상기 스캔 순서는 스캔 포지션들을 포함하고, 상기 스캔 포지션들은 비-중첩하는 스캔 그룹들 내로 파티셔닝되고, 그리고 상기 비-중첩하는 스캔 그룹들은 상기 연속 스캔 포지션들의 그룹을 포함하는, 계수들의 변환 블록을 코딩하기 위한 장치.
  10. 제9항에 있어서,
    상기 프로세서는, 상기 비-중첩하는 스캔 그룹들의 각각의 그룹에 대해 오직 한 번, 개개의 그룹이 상기 최종 비-제로 계수의 스캔 포지션을 포함하는지 여부를 표시하는 개개의 플래그(flag)를 코딩하도록 구성되는, 계수들의 변환 블록을 코딩하기 위한 장치.
  11. 제10항에 있어서,
    상기 프로세서는, 상기 그룹이 상기 최종 비-제로 계수를 포함한다는 것을 표시하는 플래그를 코딩한 후에, 상기 제2 인덱스를 표시하는 제2 플래그를 코딩하도록 구성되는, 계수들의 변환 블록을 코딩하기 위한 장치.
  12. 제10항에 있어서,
    상기 비-중첩하는 스캔 그룹들은 제1 그룹, 제2 그룹, 제3 그룹, 및 제4 그룹을 포함하고,
    상기 제1 그룹은 스캔 포지션 0으로 구성되고,
    상기 제2 그룹은 스캔 포지션 1로 구성되고,
    상기 제3 그룹은 스캔 포지션들 2 및 3으로 구성되고, 그리고
    상기 제4 그룹은 스캔 포지션들 4 내지 7로 구성되는, 계수들의 변환 블록을 코딩하기 위한 장치.
  13. 제12항에 있어서,
    상기 비-중첩하는 스캔 그룹들은 제5 그룹을 포함하고, 그리고
    상기 제5 그룹은 스캔 포지션들 8 내지 15로 구성되는, 계수들의 변환 블록을 코딩하기 위한 장치.
  14. 제9항에 있어서,
    상기 비-중첩하는 스캔 그룹들의 각각의 그룹은 동일한 수의 스캔 포지션들로 구성되는, 계수들의 변환 블록을 코딩하기 위한 장치.
  15. 제6항 내지 제8항 중 어느 한 항에 있어서,
    상기 장치는 디코더이고, 그리고
    상기 제1 인덱스가 결정되고 그리고 상기 제2 인덱스가 결정될 때까지 상기 변환 블록의 상기 계수들의 서브세트를 코딩하는 것은, 상기 제1 인덱스가 결정되는 것을 표시하는 제1 플래그까지 그리고 상기 제2 인덱스가 결정되는 것을 표시하는 제2 플래그까지, 압축된 비트스트림으로부터, 상기 계수들의 서브세트의 각각의 계수를 순차적으로 디코딩하는 것을 포함하고, 상기 제1 플래그 및 상기 제2 플래그는 상기 압축된 비트스트림으로부터 디코딩되는, 계수들의 변환 블록을 코딩하기 위한 장치.
  16. 계수들의 변환 블록을 디코딩하기 위한 장치로서,
    상기 변환 블록은 스캔 순서를 이용하여 디코딩되고,
    상기 장치는 프로세서를 포함하고,
    상기 프로세서는:
    상기 스캔 순서의 모든 스캔 포지션들을 비-중첩하는 그룹들로 파티셔닝하고 ― 상기 비-중첩하는 그룹들의 각각은 상기 스캔 순서의 연속 스캔 포지션들로 구성되고, 상기 비-중첩하는 그룹들은 제1 차원(dimension) 및 제2 차원을 갖는 계수 그룹 좌표계(coefficient groups coordinate system)를 구성하고, 상기 제1 차원의 제1 값은 상기 비-중첩하는 그룹들 중 일 그룹에 대응하고 그리고 상기 제2 차원의 제2 값은 상기 비-중첩하는 그룹들의 상기 일 그룹 내의 오프셋 포지션에 대응함 ―;
    인코딩된 비트스트림으로부터, 상기 제1 차원의 상기 제1 값에 대응하는 그룹 값을 결정하고 ― 상기 그룹 값은 상기 비-중첩하는 그룹들 중 하나의 그룹을 표시하고, 그리고 상기 비-중첩하는 그룹들 중 상기 하나의 그룹은 상기 변환 블록의 최종 비-제로 계수를 포함함 ―;
    상기 인코딩된 비트스트림으로부터, 상기 제2 차원의 상기 제2 값에 대응하는 오프셋 포지션을 결정하고 ― 상기 오프셋 포지션은 상기 최종 비-제로 계수의 상기 비-중첩하는 그룹들 중 상기 하나의 그룹 내의 포지션을 표시함 ―; 그리고
    상기 인코딩된 비트스트림으로부터, 상기 비-중첩하는 그룹들 중 상기 하나의 그룹 및 상기 오프셋 포지션을 이용하여 계수들을 디코딩하도록
    구성되는, 계수들의 변환 블록을 디코딩하기 위한 장치.
  17. 제16항에 있어서,
    상기 오프셋 포지션을 결정하는 것은, 상기 인코딩된 비트스트림으로부터, 상기 오프셋 포지션을 표시하는 신택스 엘리먼트를 디코딩하는 것을 포함하는, 계수들의 변환 블록을 디코딩하기 위한 장치.
  18. 제16항에 있어서,
    상기 오프셋 포지션을 결정하는 것은, 디코딩되고 있는 현재의 계수가 상기 비-중첩하는 그룹들 중 상기 하나의 그룹에서의 최종 오프셋 포지션에 있는 것으로 결정하는 것에 응답하여, 상기 최종 비-제로 계수의 상기 오프셋 포지션이 상기 최종 오프셋 포지션이라고 추론하는 것을 포함하는, 계수들의 변환 블록을 디코딩하기 위한 장치.
  19. 제18항에 있어서,
    상기 비-중첩하는 그룹들의 제1 그룹 및 상기 비-중첩하는 그룹들의 제2 그룹은 상이한 수들의 스캔 포지션들을 포함하는, 계수들의 변환 블록을 디코딩하기 위한 장치.
  20. 제16항에 있어서,
    상기 오프셋 포지션을 결정하는 것은, 상기 최종 비-제로 계수의 상기 오프셋 포지션이 상기 최종 비-제로 계수의 스캔 포지션이라고 추론하는 것을 포함하는, 계수들의 변환 블록을 디코딩하기 위한 장치.
  21. 삭제
KR1020197035897A 2017-09-18 2018-05-08 최종 유효 계수 플래그들의 코딩 KR102323406B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020217035650A KR20210135351A (ko) 2017-09-18 2018-05-08 최종 유효 계수 플래그들의 코딩

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/707,300 US10523968B2 (en) 2017-09-18 2017-09-18 Coding of last significant coefficient flags
US15/707,300 2017-09-18
PCT/US2018/031576 WO2019055071A1 (en) 2017-09-18 2018-05-08 CODING INDICATORS OF LAST SIGNIFICANT COEFFICIENT

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020217035650A Division KR20210135351A (ko) 2017-09-18 2018-05-08 최종 유효 계수 플래그들의 코딩

Publications (2)

Publication Number Publication Date
KR20200004358A KR20200004358A (ko) 2020-01-13
KR102323406B1 true KR102323406B1 (ko) 2021-11-05

Family

ID=62223331

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020197035897A KR102323406B1 (ko) 2017-09-18 2018-05-08 최종 유효 계수 플래그들의 코딩
KR1020217035650A KR20210135351A (ko) 2017-09-18 2018-05-08 최종 유효 계수 플래그들의 코딩

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020217035650A KR20210135351A (ko) 2017-09-18 2018-05-08 최종 유효 계수 플래그들의 코딩

Country Status (6)

Country Link
US (3) US10523968B2 (ko)
EP (1) EP3685586A1 (ko)
JP (2) JP7170669B2 (ko)
KR (2) KR102323406B1 (ko)
CN (2) CN110710217B (ko)
WO (1) WO2019055071A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU2018372561B2 (en) 2017-11-21 2023-01-05 Immersive Robotics Pty Ltd Image compression for digital reality
AU2019298855B2 (en) * 2018-07-02 2022-10-20 Huawei Technologies Co., Ltd. Apparatus and method for filtering in video coding
TWI738077B (zh) * 2018-10-08 2021-09-01 新加坡商聯發科技(新加坡)私人有限公司 圖像以及視訊編解碼中最後有效係數的編解碼方法以及裝置
US11218735B2 (en) 2019-04-02 2022-01-04 Qualcomm Incorporated Context derivation for last position coding for video coding
CN112449184B (zh) * 2019-08-28 2022-01-25 腾讯科技(深圳)有限公司 变换系数优化方法、编解码方法、装置、介质及电子设备
WO2021121418A1 (en) 2019-12-19 2021-06-24 Beijing Bytedance Network Technology Co., Ltd. Joint use of adaptive colour transform and differential coding of video
CN115191118A (zh) * 2020-01-05 2022-10-14 抖音视界有限公司 在视频编解码中使用自适应颜色变换
CN115176470A (zh) 2020-01-18 2022-10-11 抖音视界有限公司 图像/视频编解码中的自适应颜色变换
US11658682B2 (en) * 2020-04-28 2023-05-23 POSTECH Research and Business Development Foundation Methods for encoding and decoding sparse code and orthogonal sparse superposition code
CN116998149A (zh) * 2021-03-12 2023-11-03 Oppo广东移动通信有限公司 系数的编解码方法、编码器、解码器及计算机存储介质
CN116888965A (zh) * 2021-04-12 2023-10-13 Oppo广东移动通信有限公司 系数编解码方法、编码器、解码器以及计算机存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013509782A (ja) 2009-10-28 2013-03-14 サムスン エレクトロニクス カンパニー リミテッド 残差ブロックの符号化方法及びその装置、並びに残差ブロックの復号化方法及びその装置

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE343302T1 (de) 2002-05-02 2006-11-15 Fraunhofer Ges Forschung Kodierung und dekodierung von transformationskoeffizienten in bild- oder videokodierern
CN100488254C (zh) * 2005-11-30 2009-05-13 联合信源数字音视频技术(北京)有限公司 一种基于上下文的熵编码方法及解码方法
RS56512B1 (sr) * 2010-04-13 2018-02-28 Ge Video Compression Llc Kodiranje mapa značaja i blokova koeficijenata transformacije
KR101791242B1 (ko) * 2010-04-16 2017-10-30 에스케이텔레콤 주식회사 영상 부호화/복호화 장치 및 방법
US8976861B2 (en) * 2010-12-03 2015-03-10 Qualcomm Incorporated Separately coding the position of a last significant coefficient of a video block in video coding
US9042440B2 (en) 2010-12-03 2015-05-26 Qualcomm Incorporated Coding the position of a last significant coefficient within a video block based on a scanning order for the block in video coding
US8964849B2 (en) 2011-11-01 2015-02-24 Blackberry Limited Multi-level significance maps for encoding and decoding
CN107257463B (zh) 2011-11-07 2020-02-28 太阳专利托管公司 图像编码方法和图像编码装置
US9154792B2 (en) 2011-11-08 2015-10-06 Qualcomm Incorporated Progressive coding of position of last significant coefficient
CA2773990C (en) 2011-11-19 2015-06-30 Research In Motion Limited Multi-level significance map scanning
EP4236318A3 (en) * 2012-01-20 2023-11-08 Google Technology Holdings LLC Devices and methods for context reduction in last significant coefficient position coding
AU2013211004B2 (en) * 2012-01-20 2016-03-17 Ge Video Compression, Llc Transform coefficient coding
US9124872B2 (en) 2012-04-16 2015-09-01 Qualcomm Incorporated Coefficient groups and coefficient coding for coefficient scans
CN108259900B (zh) * 2013-01-16 2021-01-01 黑莓有限公司 针对视频的上下文自适应二进制熵编码的变换系数编码
CN108259901B (zh) * 2013-01-16 2020-09-15 黑莓有限公司 用于对游长编码变换系数进行熵编码的上下文确定
US20170180757A1 (en) * 2015-12-18 2017-06-22 Blackberry Limited Binarizer selection for image and video coding
WO2018012830A1 (ko) * 2016-07-13 2018-01-18 한국전자통신연구원 영상 부호화/복호화 방법 및 장치

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013509782A (ja) 2009-10-28 2013-03-14 サムスン エレクトロニクス カンパニー リミテッド 残差ブロックの符号化方法及びその装置、並びに残差ブロックの復号化方法及びその装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Nguyen Nguyen et al, Multi-level significance maps for Large Transform Units, JCT-VC of ITU-T and ISO/IEC, JCTVC-G644 (2011.11.26.).*

Also Published As

Publication number Publication date
CN110710217A (zh) 2020-01-17
JP2020522181A (ja) 2020-07-27
JP2022048351A (ja) 2022-03-25
CN110710217B (zh) 2022-08-02
CN115379241A (zh) 2022-11-22
KR20210135351A (ko) 2021-11-12
US10523968B2 (en) 2019-12-31
EP3685586A1 (en) 2020-07-29
JP7170669B2 (ja) 2022-11-14
WO2019055071A1 (en) 2019-03-21
US11070843B2 (en) 2021-07-20
US20200396486A1 (en) 2020-12-17
US20190089984A1 (en) 2019-03-21
US10791339B2 (en) 2020-09-29
KR20200004358A (ko) 2020-01-13
US20200084474A1 (en) 2020-03-12
CN115379241B (zh) 2023-06-06

Similar Documents

Publication Publication Date Title
KR102323406B1 (ko) 최종 유효 계수 플래그들의 코딩
CN110679148B (zh) 用于代码化视频数据块的方法和装置
WO2019045797A1 (en) MIXTURE OF PROBABILITIES FOR ENTROPY CODING IN A VIDEO COMPRESSION
US10951894B2 (en) Transform block-level scan order selection for video coding
US10523944B2 (en) Modifying a scan order to limit scan distance
EP3732882A1 (en) Efficient context model computation design in transform coefficient coding
AU2019201683A1 (en) Techniques for high efficiency entropy coding of video data
US10715821B2 (en) Embedding information about EOB positions
CN115604473B (zh) 用于代码化视频数据块的方法和装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant