KR101821069B1 - 팔레트-기반 비디오 코딩에서의 팔레트 예측 - Google Patents

팔레트-기반 비디오 코딩에서의 팔레트 예측 Download PDF

Info

Publication number
KR101821069B1
KR101821069B1 KR1020167001705A KR20167001705A KR101821069B1 KR 101821069 B1 KR101821069 B1 KR 101821069B1 KR 1020167001705 A KR1020167001705 A KR 1020167001705A KR 20167001705 A KR20167001705 A KR 20167001705A KR 101821069 B1 KR101821069 B1 KR 101821069B1
Authority
KR
South Korea
Prior art keywords
palette
current
entries
prediction
block
Prior art date
Application number
KR1020167001705A
Other languages
English (en)
Other versions
KR20160031495A (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 퀄컴 인코포레이티드
Publication of KR20160031495A publication Critical patent/KR20160031495A/ko
Application granted granted Critical
Publication of KR101821069B1 publication Critical patent/KR101821069B1/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/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/46Colour picture communication systems
    • H04N1/64Systems for the transmission or the storage of the colour picture signal; Details therefor, e.g. coding or decoding means therefor
    • H04N1/644Systems for the transmission or the storage of the colour picture signal; Details therefor, e.g. coding or decoding means therefor using a reduced set of representative colours, e.g. each representing a particular range in a colour space
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/196Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding being specially adapted for the computation of encoding parameters, e.g. by averaging previously computed encoding parameters
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • 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/93Run-length coding
    • 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/94Vector quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Image Processing (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)

Abstract

팔레트-기반 코딩에서, 비디오 코더는 소정의 블록의 비디오 데이터를 나타내는 컬러들의 테이블로서 소위 "팔레트" 를 형성할 수도 있다. 비디오 코더는 비디오 데이터의 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 코딩할 수도 있고, 여기서, 인덱스 값들은 현재의 블록의 픽셀 값들을 나타내는 팔레트에서의 엔트리들을 표시한다. 기법들에 따르면, 비디오 코더는 현재의 팔레트로 복사되는 예측 팔레트에서의 하나 이상의 팔레트 엔트리들과, 현재의 팔레트 내에 포함되는 예측 팔레트 내에 있지 않은 새로운 팔레트 엔트리들의 수를 결정한다. 비디오 코더는 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 현재의 팔레트의 사이즈를 계산하고, 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하는 현재의 팔레트를 생성한다.

Description

팔레트-기반 비디오 코딩에서의 팔레트 예측{PALETTE PREDICTION IN PALETTE-BASED VIDEO CODING}
이 출원은 2013 년 7 월 12 일자로 출원된 미국 가출원 제 61/845,824 호, 2013 년 11 월 1 일자로 출원된 미국 가출원 제 61/899,048 호, 및 2013 년 12 월 6 일자로 출원된 미국 가출원 제 61/913,040 호의 이익을 주장하고, 그 각각의 전체 내용들은 참조를 위해 본원에서 편입된다.
본 개시는 비디오 인코딩 및 디코딩에 관한 것이다.
디지털 비디오 기능들은, 디지털 텔레비전들, 디지털 다이렉트 브로드캐스트 시스템들, 무선 브로드캐스트 시스템들, 개인 정보 단말 (personal digital assistant; PDA) 들, 랩톱 또는 데스크톱 컴퓨터들, 태블릿 컴퓨터들, 전자책 리더들, 디지털 카메라들, 디지털 레코딩 디바이스들, 디지털 미디어 플레이어들, 비디오 게임용 디바이스들, 비디오 게임 콘솔들, 셀룰러 또는 위성 무선 전화들, 소위 "스마트폰들", 화상 원격회의 디바이스들, 비디오 스트리밍 디바이스들 및 기타 등등을 포함하는 광범위한 디바이스들 내에 편입될 수 있다. 디지털 비디오 디바이스들은 MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264/MPEG-4, Part 10, 진보된 비디오 코딩 (Advanced Video Coding; AVC), 현재 개발 중인 고효율 비디오 코딩 (High Efficiency Video Coding; HEVC) 표준에 의해 정의된 표준들, 및 이러한 표준들의 확장들에서 설명된 것들과 같은 비디오 압축 기법들을 구현한다. 비디오 디바이스들은 이러한 비디오 압축 기법들을 구현함으로써 디지털 비디오 정보를 더욱 효율적으로 송신하고, 수신하고, 인코딩하고, 디코딩하고, 및/또는 저장할 수도 있다.
비디오 압축 기법들은 비디오 시퀀스들에 고유한 중복성을 감소시키거나 제거하기 위해 공간적 (인트라-픽처 (intra-picture)) 예측 및/또는 시간적 (인터-픽처 (inter-picture)) 예측을 수행한다. 블록-기반 비디오 코딩을 위하여, 비디오 슬라이스 (즉, 비디오 프레임 또는 비디오 프레임의 부분) 는 비디오 블록들로 파티셔닝 (partition) 될 수도 있다. 픽처의 인트라-코딩된 (I) 슬라이스에서의 비디오 블록들은 동일한 픽처에서의 이웃하는 블록들 내의 참조 샘플들에 대한 공간적 예측을 이용하여 인코딩된다. 픽처의 인터-코딩된 (P 또는 B) 슬라이스 내의 비디오 블록들은 동일한 픽처에서의 이웃하는 블록들 내의 참조 샘플들에 대한 공간적 예측, 또는 다른 참조 픽처들에서의 참조 샘플들에 대한 시간적 예측을 이용할 수도 있다. 픽처들은 프레임들로서 지칭될 수도 있고, 참조 픽처들은 참조 프레임들로서 지칭될 수도 있다.
공간적 또는 시간적 예측은 코딩되어야 할 블록에 대한 예측 블록으로 귀착된다. 잔차 데이터 (residual data) 는 코딩되어야 할 원래의 블록 및 예측 블록 사이의 픽셀 차이들을 나타낸다. 인터-코딩된 블록은 예측 블록을 형성하는 참조 샘플들의 블록을 지시하는 모션 벡터에 따라 인코딩되고, 잔차 데이터는 코딩된 블록 및 예측 블록 사이의 차이를 표시한다. 인트라-코딩된 블록은 인트라-코딩 모드 및 잔차 데이터에 따라 인코딩된다. 추가의 압축을 위하여, 잔차 데이터는 픽셀 도메인으로부터 변환 도메인으로 변환되어 잔차 계수들로 귀착될 수도 있고, 이 잔차 계수들은 그 후에 양자화될 수도 있다. 2 차원 어레이로 초기에 배열된 양자화된 계수들은 계수들의 1 차원 벡터를 생성하기 위하여 스캔될 수도 있고, 엔트로피 코딩 (entropy coding) 은 훨씬 더 많은 압축을 달성하도록 적용될 수도 있다.
멀티뷰 코딩 비트스트림은 예컨대, 다수의 관점들로부터의 뷰들을 인코딩함으로써 생성될 수도 있다. 멀티뷰 코딩 양태들을 이용하는 일부의 3 차원 (3D) 비디오 표준들이 개발되었다. 예를 들어, 상이한 뷰들은 3D 비디오를 지원하기 위하여 좌안 및 우안 뷰들을 송신할 수도 있다. 대안적으로, 일부의 3D 비디오 코딩 프로세스들은 소위 멀티뷰 플러스 심도 코딩 (multiview plus depth coding) 을 적용할 수도 있다. 멀티 플러스 심도 코딩에서, 3D 비디오 비트스트림은 텍스처 뷰 컴포넌트들뿐 아니라, 심도 뷰 컴포넌트들도 포함할 수도 있다. 예를 들어, 각각의 뷰는 하나의 텍스처 뷰 컴포넌트 및 하나의 심도 뷰 컴포넌트를 포함할 수도 있다.
본 개시의 기법들은 팔레트-기반 비디오 코딩에 관한 것이다. 팔레트-기반 코딩에서, 비디오 코더 (예컨대, 비디오 인코더 또는 비디오 디코더) 는 특정 구역 (예컨대, 소정의 블록) 의 비디오 데이터를 나타내는 컬러들 또는 픽셀 값들의 테이블 (table) 로서 소위 "팔레트" 를 형성할 수도 있다. 이러한 방식으로, 비디오 데이터의 현재의 블록에 대한 실제적인 픽셀 값들 또는 그 잔차들을 코딩하는 것이 아니라, 비디오 코더는 현재의 블록의 픽셀들 값들 중의 하나 이상에 대한 인덱스 값들을 코딩할 수도 있고, 여기서, 인덱스 값들은 현재의 블록의 픽셀 값들을 나타내기 위해 이용되는 팔레트에서의 엔트리들을 표시한다. 비디오 데이터의 현재의 블록에 대한 현재의 팔레트는 명시적으로 인코딩될 수도 있으며 비디오 디코더로 전송될 수도 있거나, 이전의 팔레트 엔트리들로부터 예측될 수도 있거나, 이전의 픽셀 값들로부터 예측될 수도 있거나, 그 조합일 수도 있다.
현재의 블록에 대한 현재의 팔레트를 생성하기 위한 본 개시에서 설명된 기법들에 따르면, 비디오 디코더는 먼저, 현재의 팔레트로 복사되는 예측 팔레트에서의 하나 이상의 팔레트 엔트리들을 결정하고, 그 다음으로, 예측 팔레트 내에 있는 것이 아니라 현재의 팔레트 내에 포함되는 새로운 팔레트 엔트리들의 수를 결정한다. 이 정보에 기초하여, 비디오 디코더는 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 것으로 현재의 팔레트의 사이즈를 계산하고, 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하는 결정된 사이즈의 현재의 팔레트를 생성한다. 비디오 인코더는 현재의 블록에 대한 현재의 팔레트를 생성하기 위한 유사한 기법들을 수행할 수도 있다. 게다가, 비디오 인코더는 새로운 팔레트 엔트리들에 대한 픽셀 값들을 명시적으로 인코딩하고 비디오 디코더로 전송할 수도 있다. 본 개시에서 설명된 기법들은 또한, 팔레트-기반 코딩 모드들을 시그널링하는 것, 팔레트들을 송신하는 것, 팔레트들을 예측하는 것, 팔레트들을 유도하는 것, 또는 팔레트-기반 코딩 맵들 및 다른 신택스 엘리먼트들을 송신하는 것 중의 하나 이상의 다양한 조합들에 대한 기법들을 포함할 수도 있다.
하나의 예에서, 본 개시는 비디오 데이터를 코딩하는 방법에 대한 것이고, 상기 방법은, 픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 예측 팔레트를 생성하는 단계, 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사되는 예측 팔레트에서의 팔레트 엔트리들 중의 하나 이상을 결정하는 단계, 현재의 블록에 대한 현재의 팔레트 내에 포함되는 예측 팔레트 내에 있지 않은 새로운 팔레트 엔트리들의 수를 결정하는 단계, 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 현재의 팔레트의 사이즈를 계산하는 단계, 및 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하는 현재의 팔레트를 생성하는 단계를 포함한다. 상기 방법은, 현재의 블록의 픽셀 값들을 나타내기 위해 이용된 현재의 팔레트에서의 팔레트 엔트리들을 식별하는 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정하는 단계를 더 포함한다.
또 다른 예에서, 본 개시는 비디오 데이터를 코딩하기 위한 장치에 대한 것이고, 상기 장치는, 비디오 데이터를 저장하는 메모리 및 하나 이상의 프로세서들을 포함하고, 상기 하나 이상의 프로세서들은, 픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 예측 팔레트를 생성하고, 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사되는 예측 팔레트에서의 팔레트 엔트리들 중의 하나 이상을 결정하고, 현재의 블록에 대한 현재의 팔레트 내에 포함되는 예측 팔레트 내에 있지 않은 새로운 팔레트 엔트리들의 수를 결정하고, 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 현재의 팔레트의 사이즈를 계산하고, 그리고 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하는 현재의 팔레트를 생성하도록 구성된다. 프로세서들은 추가로, 현재의 블록의 픽셀 값들을 나타내기 위해 이용된 현재의 팔레트에서의 팔레트 엔트리들을 식별하는 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정하도록 구성된다.
또 다른 예에서, 본 개시는 비디오 데이터를 코딩하기 위한 장치에 대한 것이고, 상기 장치는, 픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 예측 팔레트를 생성하는 수단, 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사되는 예측 팔레트에서의 팔레트 엔트리들 중의 하나 이상을 결정하는 수단, 현재의 블록에 대한 현재의 팔레트 내에 포함되는 예측 팔레트 내에 있지 않은 새로운 팔레트 엔트리들의 수를 결정하는 수단, 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 현재의 팔레트의 사이즈를 계산하는 수단, 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하는 현재의 팔레트를 생성하는 수단, 및 현재의 블록의 픽셀 값들을 나타내기 위해 이용된 현재의 팔레트에서의 팔레트 엔트리들을 식별하는 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정하는 수단을 포함한다.
추가의 예에서, 본 개시는 명령들을 저장하는 비-일시적인 컴퓨터-판독가능 매체에 대한 것으로, 상기 명령들은, 실행될 경우, 하나 이상의 프로세서들로 하여금, 픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 예측 팔레트를 생성하게 하고, 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사되는 예측 팔레트에서의 팔레트 엔트리들 중의 하나 이상을 결정하게 하고, 현재의 블록에 대한 현재의 팔레트 내에 포함되는 예측 팔레트 내에 있지 않은 새로운 팔레트 엔트리들의 수를 결정하게 하고, 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 현재의 팔레트의 사이즈를 계산하게 하고, 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하는 현재의 팔레트를 생성하게 하고, 그리고 현재의 블록의 픽셀 값들을 나타내기 위해 이용된 현재의 팔레트에서의 팔레트 엔트리들을 식별하는 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정하게 한다.
본 개시의 하나 이상의 예들의 세부사항들은 첨부한 도면들 및 이하의 설명에서 기재된다. 다른 특징들, 목적들, 및 장점들은 설명, 도면들, 및 청구항들로부터 명백할 것이다.
도 1 은 본 개시에서 설명된 기법들을 사용할 수도 있는 일 예의 비디오 코딩 시스템을 예시하는 블록도이다.
도 2 는 본 개시에서 설명된 기법들을 구현할 수도 있는 일 예의 비디오 인코더를 예시하는 블록도이다.
도 3 은 본 개시에서 설명된 기법들을 구현할 수도 있는 일 예의 비디오 디코더를 예시하는 블록도이다.
도 4 는 본 개시의 기법들과 부합하는, 비디오 데이터를 코딩하기 위한 팔레트를 결정하는 예를 예시하는 개념도이다.
도 5 는 본 개시의 기법들과 부합하는, 비디오 블록에 대한 팔레트에 대한 인덱스들을 결정하는 예들을 예시하는 개념도이다.
도 6 은 본 개시의 기법들과 부합하는, 크로마 컴포넌트들에 대해 적응적으로 다운샘플링된 루마 컴포넌트에 대한 팔레트 인덱스들의 런 (run) 을 이용하여 비디오 블록의 기하학적 에지 (geometric edge) 를 결정하는 예들을 예시하는 개념도이다.
도 7 은 본 개시의 기법들과 부합하는, 팔레트-기반 코딩 모드를 이용하여 예측 잔차 비디오 데이터를 인코딩하기 위한 일 예의 프로세스를 예시하는 플로우차트이다.
도 8 은 본 개시의 기법들과 부합하는, 팔레트-기반 코딩 모드를 이용하여 예측 잔차 비디오 데이터를 디코딩하기 위한 일 예의 프로세스를 예시하는 플로우차트이다.
도 9 는 본 개시의 기법들과 부합하는, 팔레트-기반 코딩을 위한 팔레트를 생성하기 위한 일 예의 프로세스를 예시하는 플로우차트이다.
본 개시는 비디오 코딩 및 압축을 위한 기법들을 포함한다. 특히, 본 개시는 비디오 데이터의 팔레트-기반 코딩을 위한 기법들을 설명한다. 전통적인 비디오 코딩에서는, 이미지들이 연속-톤 (continuous-tone) 이고 공간적으로 평활한 것으로 가정된다. 이 가정들에 기초하여, 블록-기반 변환, 필터링 등과 같은 다양한 툴들이 개발되었고, 이러한 툴들은 자연적 컨텐츠 비디오에 대하여 양호한 성능을 보여주었다.
그러나, 원격 데스크톱, 협업 작업 및 무선 디스플레이와 같은 애플리케이션들에서, (예컨대, 텍스트 또는 컴퓨터 그래픽과 같은) 컴퓨터 생성 스크린 컨텐츠는 압축되어야 할 지배적인 컨텐츠일 수도 있다. 이 타입의 컨텐츠는 이산-톤 (discrete-tone) 을 가지며, 예리한 라인들 및 높은 콘트라스트의 객체 경계들을 특징으로 하는 경향이 있다. 연속-톤 및 평활성의 가정은 더 이상 스크린 컨텐츠에 대해 적용될 수도 없고, 이에 따라, 전통적인 비디오 코딩 기법들은 스크린 컨텐츠를 포함하는 비디오 데이터를 압축하기 위한 효율적인 방식들이 아닐 수도 있다.
본 개시는 특히, 스크린 생성 컨텐츠 코딩을 위해 적합할 수도 있는 팔레트-기반 코딩을 설명한다. 예를 들어, 비디오 데이터의 특정 구역이 상대적으로 작은 수의 컬러들을 가지는 것으로 가정하면, 비디오 코더 (비디오 인코더 또는 비디오 디코더) 는 특정 구역 (예컨대, 소정의 블록) 의 비디오 데이터를 나타내는 컬러들 또는 픽셀 값들의 테이블로서 소위 "팔레트" 를 형성할 수도 있다. 예를 들어, 팔레트는 소정의 블록에서 가장 지배적인 픽셀 값들을 포함할 수도 있다. 일부의 경우들에는, 가장 지배적인 픽셀 값들이 블록 내에서 가장 빈번하게 발생하는 하나 이상의 픽셀 값들을 포함할 수도 있다. 게다가, 일부의 경우들에는, 픽셀 값이 블록에서 가장 지배적인 픽셀 값들 중의 하나로서 포함되는지 여부를 정의하기 위하여, 임계 값 (threshold value) 이 적용될 수도 있다. 본 개시에 따르면, 비디오 데이터의 현재의 블록에 대한 실제적인 픽셀 값들 또는 그 잔차들을 코딩하는 것이 아니라, 비디오 코더는 현재의 블록의 픽셀들 값들 중의 하나 이상을 표시하는 인덱스 값들을 코딩할 수도 있고, 여기서, 인덱스 값들은 현재의 블록의 픽셀 값들을 나타내기 위해 이용되는 팔레트에서의 엔트리들을 표시한다.
예를 들어, 비디오 인코더는 블록에 대한 팔레트를 결정하고 (예컨대, 팔레트를 명시적으로 코딩하거나, 팔레트를 예측하거나, 또는 그 조합을 행하고), 픽셀 값들 중의 하나 이상을 나타내기 위하여 팔레트에서 엔트리를 위치시키고, 블록의 픽셀 값들을 나타내기 위해 이용된 팔레트에서의 엔트리를 표시하는 인덱스 값들로 블록을 인코딩함으로써, 비디오 데이터의 블록을 인코딩할 수도 있다. 일부의 예들에서, 비디오 인코더는 인코딩된 비트스트림에서 인덱스 값들을 시그널링할 수도 있다. 비디오 디코더는 인코딩된 비트스트림으로부터, 블록에 대한 팔레트뿐만 아니라 블록의 픽셀들에 대한 인덱스 값들을 획득할 수도 있다. 비디오 디코더는 블록의 픽셀 값들을 재구성하기 위하여 픽셀들의 인덱스 값들을 팔레트의 엔트리들에 관련시킬 수도 있다.
상기 예들은 팔레트-기반 코딩의 일반적인 설명을 제공하도록 의도된다. 다양한 예들에서, 본 개시에서 설명된 기법들은 팔레트-기반 코딩 모드들을 시그널링하는 것, 팔레트들을 송신하는 것, 팔레트들을 예측하는 것, 팔레트들을 유도하는 것, 또는 팔레트-기반 코딩 맵들 및 다른 신택스 엘리먼트들을 송신하는 것 중의 하나 이상의 다양한 조합들에 대한 기법들을 포함할 수도 있다. 이러한 기법들은 비디오 코딩 효율을 개선시킬 수도 있어서, 예컨대, 스크린 생성 컨텐츠를 나타내기 위하여 더 적은 비트들을 요구할 수도 있다.
예를 들어, 비디오 데이터의 현재의 블록에 대한 현재의 팔레트는 명시적으로 인코딩될 수도 있으며 비디오 디코더로 전송될 수도 있거나, 이전의 팔레트 엔트리들로부터 예측될 수도 있거나, 이전의 픽셀 값들로부터 예측될 수도 있거나, 그 조합일 수도 있다. 현재의 블록에 대한 현재의 팔레트를 생성하기 위한 본 개시에서 설명된 기법들에 따르면, 비디오 디코더는 먼저, 현재의 팔레트로 복사되는 예측 팔레트에서의 하나 이상의 팔레트 엔트리들을 결정하고, 그 다음으로, 예측 팔레트 내에 있는 것이 아니라 현재의 팔레트 내에 포함되는 새로운 팔레트 엔트리들의 수를 결정한다. 이 정보에 기초하여, 비디오 디코더는 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 것으로 현재의 팔레트의 사이즈를 계산하고, 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하는 결정된 사이즈의 현재의 팔레트를 생성한다. 비디오 인코더는 현재의 블록에 대한 현재의 팔레트를 생성하기 위한 유사한 기법들을 수행할 수도 있다. 게다가, 비디오 인코더는 새로운 팔레트 엔트리들에 대한 픽셀 값들을 명시적으로 인코딩할 수도 있고 이 픽셀 값들을 비디오 디코더로 전송할 수도 있다.
본 개시의 일부의 예들에서, 비디오 데이터의 팔레트-기반 코딩을 위한 기법들은 비디오 데이터의 인터-예측 코딩 또는 인트라-예측 코딩을 위한 기법들과 같은 하나 이상의 다른 코딩 기법들과 함께 이용될 수도 있다. 예를 들어, 이하에서 더욱 상세하게 설명된 바와 같이, 인코더 또는 디코더, 또는 조합된 인코더-디코더 (코덱) 는 인터-예측 및 인트라-예측 코딩뿐만 아니라, 팔레트-기반 코딩을 수행하도록 구성될 수도 있다. 일부의 예들에서, 팔레트-기반 코딩 기법들은 고효율 비디오 코딩 (HEVC) 의 하나 이상의 코딩 유닛 (coding unit; CU) 모드들에서의 이용을 위해 구성될 수도 있다. 다른 예들에서, 팔레트-기반 코딩 기법들은 독립적으로, 또는 다른 기존의 또는 미래의 시스템들 또는 표준들의 일부로서 이용될 수도 있다.
고효율 비디오 코딩 (HEVC) 은 ITU-T 비디오 코딩 전문가 그룹 (Video Coding Experts Group; VCEG) 및 ISO/IEC 모션 픽처 전문가 그룹 (Motion Picture Experts Group; MPEG) 의 비디오 코딩에 관한 합동 협력팀 (Joint Collaboration Team on Video Coding; JCT-VC) 에 의해 개발된 새로운 비디오 코딩 표준이다. "WD10" 의 "HEVC 초안 10" 으로서 지칭된 HEVC 표준의 최근의 초안은, http://phenix.int-evry.fr/jct/doc_end_user/documents/12_Geneva/wg11/JCTVC-L1003-v34.zip 로부터 입수가능한, Bross 등, "High Efficiency Video Coding (HEVC) Text Specification Draft 10 (for FDIS & Last Call) (FDIS & 최후 호출에 대한) (고효율 비디오 코딩 (HEVC) 텍스트 사양 초안 10)", ITU-T SG16 WP3 및 ISO/IEC JTC1/SC29/WG11 의 비디오 코딩에 관한 합동 협력 팀 (JCT-VC), 12 차 회의: 스위스, 제네바, 2013 년 1 월 14-23 일의 문서 JCTVC-L1003v34 에서 설명되어 있다.
HEVC 프레임워크에 대하여, 일 예로서, 팔레트-기반 코딩 기법들은 CU 모드로서 이용되도록 구성될 수도 있다. 다른 예들에서, 팔레트-기반 코딩 기법들은 HEVC 의 프레임워크에서 PU 모드로서 이용되도록 구성될 수도 있다. 따라서, CU 모드의 맥락에서 설명되는 다음의 개시된 프로세스들의 전부는 추가적으로 또는 대안적으로, PU 에 적용할 수도 있다. 그러나, 이 HEVC-기반 예들은 본원에서 설명된 팔레트-기반 코딩 기법들의 한정 또는 제한으로 간주되지 않아야 하는데, 이것은 이러한 기법들이 독립적으로, 또는 다른 기존의 또는 아직 개발되어야 할 시스템들/표준들의 일부로서 작동하도록 적용될 수도 있기 때문이다. 이 경우들에는, 팔레트 코딩을 위한 유닛이 정사각형 블록들, 직사각형 블록들 또는 심지어 직사각형이 아닌 형상의 영역들일 수 있다.
도 1 은 본 개시의 기법들을 사용할 수도 있는 일 예의 비디오 코딩 시스템 (10) 을 예시하는 블록도이다. 본원에서 이용된 바와 같이, 용어 "비디오 코더" 는 일반적으로 비디오 인코더들 및 비디오 디코더들의 양자를 지칭한다. 본 개시에서, 용어들 "비디오 코딩" 또는 "코딩" 은 일반적으로 비디오 인코딩 또는 비디오 디코딩을 지칭할 수도 있다. 비디오 코딩 시스템 (10) 의 비디오 인코더 (20) 및 비디오 디코더 (30) 는, 본 개시에서 설명된 다양한 예들에 따라 팔레트-기반 비디오 코딩을 위한 기법들을 수행하도록 구성될 수도 있는 디바이스들의 예들을 나타낸다. 예를 들어, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트-기반 코딩 또는 비-팔레트 (non-palette) 기반 코딩의 어느 하나를 이용하여, HEVC 코딩에서의 CU 들 및 PU 들과 같은 비디오 데이터의 다양한 블록들을 선택적으로 코딩하도록 구성될 수도 있다. 비-팔레트 기반 코딩 모드들은 HEVC 초안 10 에 의해 특정된 다양한 코딩 모드들과 같은, 다양한 인터-예측 시간적 코딩 모드들 또는 인트라-예측 공간적 코딩 모드들을 지칭할 수도 있다.
도 1 에서 도시된 바와 같이, 비디오 코딩 시스템 (10) 은 소스 디바이스 (12) 및 목적지 디바이스 (14) 를 포함한다. 소스 디바이스 (12) 는 인코딩된 비디오 데이터를 생성한다. 따라서, 소스 디바이스 (12) 는 비디오 인코딩 디바이스 또는 비디오 인코딩 장치로서 지칭될 수도 있다. 목적지 디바이스 (14) 는 소스 디바이스 (12) 에 의해 생성된 인코딩된 비디오 데이터를 디코딩할 수도 있다. 따라서, 목적지 디바이스 (14) 는 비디오 디코딩 디바이스 또는 비디오 디코딩 장치로서 지칭될 수도 있다. 소스 디바이스 (12) 및 목적지 디바이스 (14) 는 비디오 코딩 디바이스들 또는 비디오 코딩 장치들의 예들일 수도 있다.
소스 디바이스 (12) 및 목적지 디바이스 (14) 는, 데스크톱 컴퓨터들, 이동 컴퓨팅 디바이스들, 노트북 (예컨대, 랩톱) 컴퓨터들, 태블릿 컴퓨터들, 셋톱 (set-top) 박스들, 소위 "스마트" 폰들과 같은 전화 핸드셋들, 텔레비전들, 카메라들, 디스플레이 디바이스들, 디지털 미디어 플레이어들, 비디오 게임용 콘솔들, 차량내 컴퓨터들 등을 포함하는 광범위한 디바이스들을 포함할 수도 있다.
목적지 디바이스 (14) 는 채널 (16) 을 통해 소스 디바이스 (12) 로부터 인코딩된 비디오 데이터를 수신할 수도 있다. 채널 (16) 은 인코딩된 비디오 데이터를 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로 이동시킬 수 있는 하나 이상의 매체들 또는 디바이스들을 포함할 수도 있다. 하나의 예에서, 채널 (16) 은 소스 디바이스 (12) 가 인코딩된 비디오 데이터를 실시간으로 목적지 디바이스 (14) 로 직접 송신하는 것을 가능하게 하는 하나 이상의 통신 매체들을 포함할 수도 있다. 이 예에서, 소스 디바이스 (12) 는 무선 통신 프로토콜과 같은 통신 표준에 따라 인코딩된 비디오 데이터를 변조시킬 수도 있고, 변조된 비디오 데이터를 목적지 디바이스 (14) 로 송신할 수도 있다. 하나 이상의 통신 매체들은 무선 주파수 (radio frequency; RF) 스펙트럼 또는 하나 이상의 물리적 송신 라인들과 같은 무선 및/또는 유선 통신 매체들을 포함할 수도 있다. 하나 이상의 통신 매체들은 로컬 영역 네트워크, 광역 네트워크, 또는 글로벌 네트워크 (예컨대, 인터넷) 와 같은 패킷-기반 네트워크의 일부를 형성할 수도 있다. 하나 이상의 통신 매체들은 라우터들, 스위치들, 기지국들, 또는 소스 디바이스 (12) 로부터 목적지 디바이스 (14) 로의 통신을 용이하게 하는 다른 장비를 포함할 수도 있다.
또 다른 예에서, 채널 (16) 은 소스 디바이스 (12) 에 의해 생성된 인코딩된 비디오 데이터를 저장하는 저장 매체를 포함할 수도 있다. 이 예에서, 목적지 디바이스 (14) 는 디스크 액세스 또는 카드 액세스를 통해 저장 매체를 액세스할 수도 있다. 저장 매체는 블루-레이 (Blu-ray) 디스크들, DVD 들, CD-ROM 들, 플래시 메모리, 또는 인코딩된 비디오 데이터를 저장하기 위한 다른 적당한 디지털 저장 매체들과 같은, 다양한 국소적으로 액세스된 데이터 저장 매체들을 포함할 수도 있다.
추가의 예에서, 채널 (16) 은 소스 디바이스 (12) 에 의해 생성된 인코딩된 비디오 데이터를 저장하는 파일 서버 또는 또 다른 중간 저장 디바이스를 포함할 수도 있다. 이 예에서, 목적지 디바이스 (14) 는 스트리밍 또는 다운로드를 통해 파일 서버 또는 다른 중간 저장 디바이스에서 저장된 인코딩된 비디오 데이터를 액세스할 수도 있다. 파일 서버는 인코딩된 비디오 데이터를 저장할 수 있으며 인코딩된 비디오 데이터를 목적지 디바이스 (14) 로 송신할 수 있는 타입의 서버일 수도 있다. 일 예의 파일 서버들은 (예컨대, 웹사이트를 위한) 웹 서버들, 파일 전송 프로토콜 (file transfer protocol; FTP) 서버들, 네트워크 연결 저장 (network attached storage; NAS) 디바이스들, 및 로컬 디스크 드라이브들을 포함한다.
목적지 디바이스 (14) 는 인터넷 접속과 같은 표준 데이터 접속을 통해 인코딩된 비디오 데이터를 액세스할 수도 있다. 데이터 접속들의 일 예의 타입들은, 파일 서버 상에 저장된 인코딩된 비디오 데이터를 액세스하기에 적당한 무선 채널들 (예컨대, Wi-Fi 접속들), 유선 접속들 (예컨대, DSL, 케이블 모뎀 등), 또는 양자의 조합들을 포함할 수도 있다. 파일 서버로부터의 인코딩된 비디오 데이터의 송신은 스트리밍 송신, 다운로드 송신, 또는 양자의 조합일 수도 있다.
본 개시의 기법들은 무선 애플리케이션들 또는 설정들에 한정되지 않는다. 기법들은 오버-디-에어 (over-the-air) 텔레비전 브로드캐스트들, 케이블 텔레비전 송신들, 위성 텔레비전 송신들, 예컨대, 인터넷을 통한 스트리밍 비디오 송신들, 데이터 저장 매체 상에서의 저장을 위한 비디오 데이터의 인코딩, 데이터 저장 매체 상에 저장된 비디오 데이터의 디코딩, 또는 다른 애플리케이션들과 같은 다양한 멀티미디어 애플리케이션들의 지원 하에서 비디오 코딩에 적용될 수도 있다. 일부의 예들에서, 비디오 코딩 시스템 (10) 은 비디오 스트리밍, 비디오 재생, 비디오 브로드캐스팅, 및/또는 영상 통화 (video telephony) 와 같은 애플리케이션들을 지원하기 위하여 일방향 (one-way) 또는 양방향 (two-way) 비디오 송신을 지원하도록 구성될 수도 있다.
도 1 에서 예시된 비디오 코딩 시스템 (10) 은 예에 불과하고, 본 개시의 기법들은 인코딩 및 디코딩 디바이스들 사이의 임의의 데이터 통신을 반드시 포함하지는 않는 비디오 코딩 설정들 (예컨대, 비디오 인코딩 또는 비디오 디코딩) 에 적용할 수도 있다. 다른 예들에서, 데이터는 로컬 메모리로부터 취출 (retrieve) 되거나, 네트워크 상에서 스티리밍되는 등등이다. 비디오 인코딩 디바이스는 데이터를 인코딩하고 메모리에 저장할 수도 있고, 및/또는 비디오 디코딩 디바이스는 데이터를 메모리로부터 취출하고 디코딩할 수도 있다. 다수의 예들에서, 인코딩 및 디코딩은, 서로 통신하지 않지만, 간단하게 데이터를 메모리로 인코딩하고 및/또는 메모리로부터 데이터를 취출하고 이 데이터를 디코딩하는 디바이스들에 의해 수행된다.
도 1 의 예에서, 소스 디바이스 (12) 는 비디오 소스 (18), 비디오 인코더 (20), 및 출력 인터페이스 (22) 를 포함한다. 일부의 예들에서, 출력 인터페이스 (22) 는 변조기/복조기 (모뎀) 및/또는 송신기를 포함할 수도 있다. 비디오 소스 (18) 는 비디오 캡처 디바이스, 예컨대, 비디오 카메라, 이전에 캡처된 비디오 데이터를 포함하는 비디오 아카이브 (video archive), 비디오 컨텐츠 제공자로부터 비디오 데이터를 수신하기 위한 비디오 공급 인터페이스, 및/또는 비디오 데이터를 생성하기 위한 컴퓨터 그래픽 시스템, 또는 비디오 데이터의 이러한 소스들의 조합을 포함할 수도 있다.
비디오 인코더 (20) 는 비디오 소스 (18) 로부터의 비디오 데이터를 인코딩할 수도 있다. 일부의 예들에서, 소스 디바이스 (12) 는 출력 인터페이스 (22) 를 통해 인코딩된 비디오 데이터를 목적지 디바이스 (14) 로 직접 송신한다. 다른 예들에서, 인코딩된 비디오 데이터는 또한, 디코딩 및/또는 재생을 위한 목적지 디바이스 (14) 에 의한 나중의 액세스를 위하여 저장 매체 또는 파일 서버 상으로 저장될 수도 있다.
도 1 의 예에서, 목적지 디바이스 (14) 는 입력 인터페이스 (28), 비디오 디코더 (30), 및 디스플레이 디바이스 (32) 를 포함한다. 일부의 예들에서, 입력 인터페이스 (28) 는 수신기 및/또는 모뎀을 포함한다. 입력 인터페이스 (28) 는 채널 (16) 상에서 인코딩된 비디오 데이터를 수신할 수도 있다. 디스플레이 디바이스 (32) 는 목적지 디바이스 (14) 와 통합될 수도 있거나, 목적지 디바이스 (14) 의 외부에 있을 수도 있다. 일반적으로, 디스플레이 디바이스 (32) 는 디코딩된 비디오 데이터를 디스플레이한다. 디스플레이 디바이스 (32) 는 액정 디스플레이 (LCD), 플라즈마 디스플레이, 유기 발광 다이오드 (OLED) 디스플레이, 또는 또 다른 타입의 디스플레이 디바이스와 같은 다양한 디스플레이 디바이스들을 포함할 수도 있다.
본 개시는 일반적으로, 비디오 인코더 (20) 가 어떤 정보를 비디오 디코더 (30) 와 같은 또 다른 디바이스에 "시그널링" 또는 "송신" 하는 것을 지칭할 수도 있다. 용어 "시그널링" 또는 "송신"은 일반적으로, 압축된 비디오 데이터를 디코딩하기 위해 이용된 신택스 엘리먼트들 및/또는 다른 데이터의 통신을 지칭할 수도 있다. 이러한 통신은 실시간 또는 실시간에 근접하여 발생할 수도 있다. 대안적으로, 이러한 통신은, 인코딩 시에 인코딩된 비트스트림으로, 신택스 엘리먼트들을 컴퓨터-판독가능 저장 매체에 저장할 때에 발생할 수도 있는 것과 같이, 시간의 기간에 걸쳐 발생할 수도 있고, 그 다음으로, 신택스 엘리먼트들은 이 매체에 저장된 후의 임의의 시간에 디코딩 디바이스에 의해 취출될 수도 있다. 이에 따라, 비디오 디코더 (30) 는 어떤 정보를 "수신" 하는 것으로서 지칭될 수도 있지만, 정보의 수신은 반드시 실시간 또는 실시간에 근접하여 발생할 필요는 없고, 저장 후의 일부의 시간에 매체로부터 취출될 수도 있다.
비디오 인코더 (20) 및 비디오 디코더 (30) 는 각각, 하나 이상의 마이크로프로세서들, 디지털 신호 프로세서 (digital signal processor; DSP) 들, 애플리케이션 특정 집적 회로 (application-pecific integrated circuit; ASIC) 들, 필드-프로그래밍가능 게이트 어레이 (field-programmable gate array; FPGA) 들, 개별 로직, 하드웨어, 또는 그 임의의 조합들과 같은 다양한 적당한 회로부 중의 임의의 것으로서 구현될 수도 있다. 기법들이 부분적으로 소프트웨어로 구현될 경우, 디바이스는 소프트웨어를 위한 명령들을 적당한 비-일시적인 (non-transitory) 컴퓨터-판독가능 저장 매체 내에 저장할 수도 있고, 본 개시의 기법들을 수행하기 위하여 하나 이상의 프로세서들을 이용하여 명령들을 하드웨어로 실행할 수도 있다. (하드웨어, 소프트웨어, 하드웨어 및 소프트웨어의 조합 등을 포함하는) 상기한 것 중의 임의의 것은 하나 이상의 프로세서들인 것으로 간주될 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 의 각각은 하나 이상의 인코더들 또는 디코더들 내에 포함될 수도 있고, 그 어느 하나는 조합된 인코더/디코더 (combined encoder/decoder; CODEC) 의 일부로서 각각의 디바이스 내에 통합될 수도 있다.
일부의 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 위에서 언급되고 HEVC 초안 10 에서 설명된 HEVC 표준과 같은 비디오 압축 표준에 따라 동작한다. 기본 HEVC 표준에 추가하여, HEVC 에 대한 스케일러블 비디오 코딩, 멀티뷰 비디오 코딩, 및 3D 코딩 확장들을 생성하기 위한 노력들이 계속되고 있다. 게다가, 예컨대, 본 개시에서 설명된 것과 같은 팔레트-기반 코딩 모드들은 HEVC 표준의 확장을 위해 제공될 수도 있다. 일부의 예들에서, 팔레트-기반 코딩을 위해 본 개시에서 설명된 기법들은 ITU-T-H.264/AVC 표준 또는 미래의 표준들과 같은 다른 비디오 코딩 표준들에 따라 동작하도록 구성된 인코더들 및 디코더들에 적용될 수도 있다. 따라서, HEVC 코덱에서 코딩 유닛 (CU) 들 또는 예측 유닛 (PU) 들의 코딩을 위한 팔레트-기반 코딩 모드의 적용은 예시의 목적들을 위해 설명된다.
HEVC 및 다른 비디오 코딩 표준들에서는, 비디오 시퀀스가 전형적으로 일련의 픽처들을 포함한다. 픽처들은 또한 "프레임들" 로서 지칭될 수도 있다. 픽처는 SL, SCb 및 SCr 로 나타낸 3 개의 샘플 어레이들을 포함할 수도 있다. SL 은 루마 샘플 (luma sample) 들의 2 차원 어레이 (즉, 블록) 이다. SCb 는 Cb 크로미넌스 샘플 (chrominance sample) 들의 2 차원 어레이이다. SCr 은 Cr 크로미넌스 샘플 (chrominance sample) 들의 2 차원 어레이이다. 크로미넌스 샘플들은 또한 본원에서 "크로마 (chroma)" 샘플들로서 지칭될 수도 있다. 다른 사례들에서, 픽처는 단색일 수도 있으며 오직 루마 샘플들의 어레이를 포함할 수도 있다.
픽처의 인코딩된 표현을 생성하기 위하여, 비디오 인코더 (20) 는 코딩 트리 유닛 (coding tree unit; CTU) 들의 세트를 생성할 수도 있다. CTU 들의 각각은 루마 샘플들의 코딩 트리 블록, 크로마 샘플들의 2 개의 대응하는 코딩 트리 블록들, 및 코딩 트리 블록들의 샘플들을 코딩하기 위해 이용된 신택스 구조들일 수도 있다. 코딩 트리 블록은 샘플들의 NxN 블록일 수도 있다. CTU 는 또한 "트리 블록" 또는 "최대 코딩 유닛 (largest coding unit)" (LCU) 으로서 지칭될 수도 있다. HEVC 의 CTU 들은 H.264/AVC 와 같은 다른 표준들의 매크로블록들과 대략 유사할 수도 있다. 그러나, CTU 는 반드시 특정 사이즈로 제한되는 것은 아니고, 하나 이상의 코딩 유닛 (coding unit; CU) 들을 포함할 수도 있다. 슬라이스는 래스터 스캔 (raster scan) 으로 연속적으로 순서화된 정수 (integer number) 의 CTU 들을 포함할 수도 있다. 코딩된 슬라이스는 슬라이스 헤더 및 슬라이스 데이터를 포함할 수도 있다. 슬라이스의 슬라이스 헤더는 슬라이스에 대한 정보를 제공하는 신택스 엘리먼트들을 포함하는 신택스 구조일 수도 있다. 슬라이스 데이터는 슬라이스의 코딩된 CTU 들을 포함할 수도 있다.
본 개시는 하나 이상의 샘플 블록들과, 샘플들의 하나 이상의 블록들의 샘플들을 코딩하기 위해 이용된 신택스 구조들을 지칭하기 위하여 용어 "비디오 유닛" 또는 "비디오 블록" 또는 "블록" 을 이용할 수도 있다. 일 예의 타입들의 비디오 유닛들 또는 블록들은 CTU 들, CU 들, PU 들, 변환 유닛 (TU) 들, 매크로블록들, 매크로블록 파티션들 등을 포함할 수도 있다. 일부의 맥락들에서, PU 들의 논의는 매크로블록들 또는 매크로블록 파티션들의 논의와 상호교환될 수도 있다.
코딩된 CTU 를 생성하기 위하여, 비디오 인코더 (20) 는 코딩 트리 블록들을 코딩 블록들, 이 때문에, 명칭 "코딩 트리 유닛들" 로 분할하기 위하여, CTU 의 코딩 트리 블록들에 대해 쿼드-트리 파티셔닝을 재귀적으로 수행할 수도 있다. 코딩 블록은 샘플들의 NxN 블록이다. CU 는 루마 샘플들의 코딩 블록과, 루마 샘플 어레이, Cb 샘플 어레이 및 Cr 샘플 어레이를 가지는 픽처의 크로마 샘플들의 2 개의 대응하는 코딩 블록들, 그리고 코딩 블록들의 샘플들을 코딩하기 위해 이용된 신택스 구조들일 수도 있다. 비디오 인코더 (20) 는 CU 의 코딩 블록을 하나 이상의 예측 블록들로 파티셔닝할 수도 있다. 예측 블록은 동일한 예측이 적용되는 샘플들의 직사각형 (즉, 정사각형 또는 비-정사각형) 블록일 수도 있다. CU 의 예측 유닛 (PU) 은 루마 샘플들의 예측 블록, 픽처의 크로마 샘플들의 2 개의 대응하는 예측 블록들, 및 예측 블록 샘플들을 예측하기 위해 이용된 신택스 구조들일 수도 있다. 비디오 인코더 (20) 는 CU 의 각각의 PU 의 루마, Cb 및 Cr 예측 블록들에 대한 예측 루마, Cb, 및 Cr 블록들을 생성할 수도 있다.
비디오 인코더 (20) 는 PU 에 대한 예측 블록들을 생성하기 위하여 인트라 예측 또는 인터 예측을 이용할 수도 있다. 비디오 인코더 (20) 가 PU 의 예측 블록들을 생성하기 위하여 인트라 예측을 이용할 경우, 비디오 인코더 (20) 는 PU 와 연관된 픽처의 디코딩된 샘플들에 기초하여 PU 의 예측 블록들을 생성할 수도 있다.
비디오 인코더 (20) 가 PU 의 예측 블록들을 생성하기 위하여 인터 예측을 이용할 경우, 비디오 인코더 (20) 는 PU 와 연관된 픽처 이외의 하나 이상의 픽처들의 디코딩된 샘플들에 기초하여 PU 의 예측 블록들을 생성할 수도 있다. 비디오 인코더 (20) 는 PU 의 예측 블록들을 생성하기 위하여 단방향-예측 (uni-prediction) 또는 양방향-예측 (bi-prediction) 을 이용할 수도 있다. 비디오 인코더 (20) 가 PU 에 대한 예측 블록들을 생성하기 위하여 단방향-예측을 이용할 때, PU 는 단일 모션 벡터 (MV) 를 가질 수도 있다. 비디오 인코더 (20) 가 PU 에 대한 예측 블록들을 생성하기 위하여 양방향-예측을 이용할 때, PU 는 2 개의 MV 들을 가질 수도 있다.
비디오 인코더 (20) 가 CU 의 하나 이상의 PU 들에 대한 예측 블록들 (예컨대, 예측 루마, Cb 및 Cr 블록들) 을 생성한 후, 비디오 인코더 (20) 는 CU 에 대한 잔차 블록들을 생성할 수도 있다. CU 의 잔차 블록에서의 각각의 샘플은 CU 의 PU 의 예측 블록에서의 샘플과, CU 의 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 표시할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 CU 에 대한 루마 잔차 블록을 생성할 수도 있다. CU 의 루마 잔차 블록에서의 각각의 샘플은 CU 의 예측 루마 블록들 중의 하나에서의 루마 샘플과, CU 의 원래의 루마 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 표시한다. 게다가, 비디오 인코더 (20) 는 CU 에 대한 Cb 잔차 블록을 생성할 수도 있다. CU 의 Cb 잔차 블록에서의 각각의 샘플은 CU 의 예측 Cb 블록들 중의 하나에서의 Cb 샘플과, CU 의 원래의 Cb 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 표시할 수도 있다. 비디오 인코더 (20) 는 또한, CU 에 대한 Cr 잔차 블록을 생성할 수도 있다. CU 의 Cr 잔차 블록에서의 각각의 샘플은 CU 의 예측 Cr 블록들 중의 하나에서의 Cr 샘플과, CU 의 원래의 Cr 코딩 블록에서의 대응하는 샘플과의 사이의 차이를 표시할 수도 있다.
또한, 비디오 인코더 (20) 는 CU 의 잔차 블록들 (예컨대, 루마, Cb 및 Cr 잔차 블록들) 을 하나 이상의 변환 블록들 (예컨대, 루마, Cb 및 Cr 변환 블록들) 로 분해하기 위하여 쿼드-트리 파티셔닝 (quad-tree partitioning) 을 이용할 수도 있다. 변환 블록은 동일한 변환이 적용되는 샘플들의 직사각형 블록일 수도 있다. CU 의 변환 유닛 (TU) 은 루마 샘플들의 변환 블록, 크로마 샘플들의 2 개의 대응하는 변환 블록들, 및 변환 블록 샘플들을 변환하기 위해 이용된 신택스 구조들일 수도 있다. 이에 따라, CU 의 각각의 TU 는 루마 변환 블록, Cb 변환 블록, 및 Cr 변환 블록과 연관될 수도 있다. TU 와 연관된 루마 변환 블록은 CU 의 루마 잔차 블록의 서브-블록 (sub-block) 일 수도 있다. Cb 변환 블록은 CU 의 Cb 잔차 블록의 서브-블록일 수도 있다. Cr 변환 블록은 CU 의 Cr 잔차 블록의 서브-블록일 수도 있다.
비디오 인코더 (20) 는 TU 에 대한 계수 블록 (coefficient block) 을 생성하기 위하여 하나 이상의 변환들을 변환 블록에 적용할 수도 있다. 계수 블록은 변환 계수들의 2 차원 어레이일 수도 있다. 변환 계수는 스칼라 양 (scalar quantity) 일 수도 있다. 예를 들어, 비디오 인코더 (20) 는 TU 에 대한 루마 계수 블록을 생성하기 위하여 하나 이상의 변환들을 TU 의 루마 변환 블록에 적용할 수도 있다. 비디오 인코더 (20) 는 TU 에 대한 Cb 계수 블록을 생성하기 위하여 하나 이상의 변환들을 TU 의 Cb 변환 블록에 적용할 수도 있다. 비디오 인코더 (20) 는 TU 에 대한 Cr 계수 블록을 생성하기 위하여 하나 이상의 변환들을 TU 의 Cr 변환 블록에 적용할 수도 있다.
계수 블록 (예컨대, 루마 계수 블록, Cb 계수 블록, 또는 Cr 계수 블록) 을 생성한 후, 비디오 인코더 (20) 는 계수 블록을 양자화할 수도 있다. 양자화는 일반적으로, 변환 계수들을 나타내기 위해 이용된 데이터의 양을 가능한 대로 감소시키기 위하여 변환 계수들이 양자화되어 추가의 압축을 제공하는 프로세스를 지칭한다. 비디오 인코더 (20) 가 계수 블록을 양자화한 후, 비디오 인코더 (20) 는 양자화된 변환 계수들을 표시하는 신택스 엘리먼트들을 엔트로피 인코딩할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 양자화된 변환 계수들을 표시하는 신택스 엘리먼트들에 대해 컨텍스트-적응 2진 산술 코딩 (Context-Adaptive Binary Arithmetic Coding; CABAC) 을 수행할 수도 있다. 비디오 인코더 (20) 는 비트스트림에서의 엔트로피-인코딩된 신택스 엘리먼트들을 출력할 수도 있다. 비트스트림은 또한, 엔트로피 인코딩되지 않은 신택스 엘리먼트들을 포함할 수도 있다.
비디오 인코더 (20) 는 엔트로피-인코딩된 신택스 엘리먼트들을 포함하는 비트스트림을 출력할 수도 있다. 비트스트림은 코딩된 픽처들 및 연관된 데이터의 표현을 형성하는 비트들의 시퀀스를 포함할 수도 있다. 비트스트림은 네트워크 추상화 계층 (network abstraction layer; NAL) 유닛들의 시퀀스를 포함할 수도 있다. NAL 유닛들의 각각은 NAL 유닛 헤더를 포함하고, 원시 바이트 시퀀스 페이로드 (raw byte sequence payload; RBSP) 를 캡슐화한다. NAL 유닛 헤더는 NAL 유닛 타입 코드를 표시하는 신택스 엘리먼트를 포함할 수도 있다. NAL 유닛의 NAL 유닛 헤더에 의해 특정된 NAL 유닛 타입 코드는 NAL 유닛의 타입을 표시한다. RBSP 는 NAL 유닛 내에서 캡슐화되는 정수의 바이트들을 포함하는 신택스 구조일 수도 있다. 일부의 사례들에서, RBSP 는 제로 비트 (zero bit) 들을 포함한다.
상이한 타입들의 NAL 유닛들은 상이한 타입들의 RBSP 들을 캡슐화할 수도 있다. 예를 들어, 제 1 타입의 NAL 유닛은 픽처 파라미터 세트 (picture parameter set; PPS) 에 대한 RBSP 를 캡슐화할 수도 있고, 제 2 타입의 NAL 유닛은 코딩된 슬라이스에 대한 RBSP 를 캡슐화할 수도 있고, 제 3 타입의 NAL 유닛은 보충 강화 정보 (Supplemental Enhancement Information; SEI) 에 대한 RBSP 를 캡슐화할 수도 있는 등등과 같다. (파라미터 세트들 및 SEI 메시지들에 대한 RBSP 들과는 반대로) 비디오 코딩 데이터에 대한 RBSP 들을 캡슐화하는 NAL 유닛들은 비디오 코딩 계층 (video coding layer; VCL) NAL 유닛들로서 지칭될 수도 있다.
비디오 디코더 (30) 는 비디오 인코더 (20) 에 의해 생성된 비트스트림을 수신할 수도 있다. 게다가, 비디오 디코더 (30) 는 비트스트림으로부터 신택스 엘리먼트들을 획득할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 비트스트림으로부터 신택스 엘리먼트들을 디코딩하기 위하여 비트스트림을 파싱 (parse) 할 수도 있다. 비디오 디코더 (30) 는 비트스트림으로부터 획득된 (예컨대, 디코딩된) 신택스 엘리먼트들에 적어도 부분적으로 기초하여 비디오 데이터의 픽처들을 재구성할 수도 있다. 비디오 데이터를 재구성하기 위한 프로세스는 일반적으로, 비디오 인코더 (20) 에 의해 수행된 프로세스와 상반적일 수도 있다. 예를 들어, 비디오 디코더 (30) 는 현재의 CU 의 PU 들에 대한 예측 샘플 블록들 (즉, 예측 블록들) 을 결정하기 위하여 PU 들의 MV 들을 이용할 수도 있다. 게다가, 비디오 디코더 (30) 는 현재의 CU 의 TU 들과 연관된 변환 계수 블록들을 역양자화할 수도 있다. 비디오 디코더 (30) 는 현재의 CU 의 TU 들과 연관된 변환 블록들을 재구성하기 위하여 변환 계수 블록들에 대해 역변환들을 수행할 수도 있다. 비디오 디코더 (30) 는 현재의 CU 의 PU 들에 대한 예측 샘플 블록들의 샘플들을 현재의 CU 의 TU 들의 변환 블록들의 대응하는 샘플들에 추가함으로써, 현재의 CU 의 코딩 블록들을 재구성할 수도 있다. 픽처의 각각의 CU 에 대한 코딩 블록들을 재구성함으로써, 비디오 디코더 (30) 는 픽처를 재구성할 수도 있다.
일부의 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트-기반 코딩을 수행하도록 구성될 수도 있다. 예를 들어, 팔레트 기반 코딩에서는, 위에서 설명된 인트라-예측 또는 인터-예측 코딩 기법들을 수행하는 것이 아니라, 비디오 인코더 (20) 및 비디오 디코더 (30) 가 특정 구역 (예컨대, 소정의 블록) 의 비디오 데이터를 나타내는 컬러들 또는 픽셀 값들의 테이블로서, 소위 팔레트를 코딩할 수도 있다. 이러한 방식으로, 비디오 데이터의 현재의 블록에 대한 실제적인 픽셀 값들 또는 그 잔차들을 코딩하는 것이 아니라, 비디오 코더는 현재의 블록의 픽셀들 값들 중의 하나 이상에 대한 인덱스 값들을 코딩할 수도 있고, 여기서, 인덱스 값들은 현재의 블록의 픽셀 값들을 나타내기 위해 이용되는 팔레트에서의 엔트리들을 표시한다.
하나의 예에서, 비디오 인코더 (20) 는, 블록에 대한 팔레트를 결정하고, 블록의 하나 이상의 픽셀의 값을 나타내는 값을 가지는 팔레트에서의 엔트리를 위치시키고, 블록의 하나 이상의 픽셀 값들을 나타내기 위해 이용된 팔레트에서의 엔트리를 표시하는 인덱스 값들로 블록을 인코딩함으로써, 비디오 데이터의 블록을 인코딩할 수도 있다. 일부의 예들에서, 비디오 인코더 (20) 는 인코딩된 비트스트림에서의 인덱스 값들을 시그널링할 수도 있다. 비디오 디코더는 인코딩된 비트스트림으로부터, 블록에 대한 팔레트뿐만 아니라, 블록의 픽셀들에 대한 인덱스 값들을 획득할 수도 있다. 비디오 디코더는 블록의 픽셀 값들을 재구성하기 위하여 픽셀들의 인덱스 값들을 팔레트의 엔트리들에 관련시킬 수도 있다.
또 다른 예에서, 비디오 인코더 (20) 는, 블록에 대한 예측 잔차 값들을 결정하고, 블록에 대한 팔레트를 결정하고, 예측 잔차 값들 중의 하나 이상의 값을 나타내는 값을 가지는 팔레트에서의 엔트리를 위치시키고, 블록에 대한 예측 잔차 값들을 나타내기 위해 이용된 팔레트에서의 엔트리를 표시하는 인덱스 값들로 블록을 인코딩함으로써, 비디오 데이터의 블록을 인코딩할 수도 있다. 비디오 디코더 (30) 는 인코딩된 비트스트림으로부터, 블록에 대한 팔레트뿐만 아니라, 블록의 예측 잔차 값들에 대한 인덱스 값들을 획득할 수도 있다. 비디오 디코더 (30) 는 블록의 예측 잔차 값들을 재구성하기 위하여 예측 잔차 값들의 인덱스 값들을 팔레트의 엔트리들에 관련시킬 수도 있다. 예측 잔차 값들은 블록의 픽셀 값들을 재구성하기 위하여 (예를 들어, 인트라 또는 인터 예측을 이용하여 획득된) 예측 값들에 추가될 수도 있다.
이하에서 더욱 상세하게 설명된 바와 같이, 팔레트-기반 코딩의 기본적인 사상은, 코딩되어야 할 비디오 데이터의 소정의 블록에 대하여, 현재의 블록에서 가장 지배적인 픽셀 값들을 포함하는 팔레트가 유도된다는 것이다. 예를 들어, 팔레트는 현재의 CU 에 대한 지배적 및/또는 대표적인 것으로 가정되는 다수의 픽셀 값들을 지칭할 수도 있다. 비디오 인코더 (20) 는 먼저, 팔레트의 사이즈 및 엘리먼트들을 비디오 디코더 (30) 로 송신할 수도 있다. 비디오 인코더 (20) 는 어떤 스캔 순서에 따라 소정의 블록에서의 픽셀 값들을 인코딩할 수도 있다. 소정의 블록에서의 각각의 픽셀 로케이션 (location) 에 대하여, 비디오 인코더 (20) 는 픽셀 로케이션에서의 픽셀 값이 팔레트에서 포함되는지 아닌지의 여부를 표시하기 위하여 플래그 또는 다른 신택스 엘리먼트를 송신할 수도 있다. 픽셀 값이 팔레트 내에 있을 경우 (즉, 픽셀 값을 특정하는 팔레트 엔트리가 존재함), 비디오 인코더 (20) 는 소정의 블록에서의 픽셀 로케이션에 대한 픽셀 값과 연관된 인덱스 값과, 그 다음으로, 소정의 블록에서의 유사-값 (like-valued) 의 연속적인 픽셀 값들의 "런 (run)" 을 시그널링할 수도 있다. 이 경우, 비디오 인코더 (20) 는 "런" 에 의해 커버되는 다음의 픽셀 로케이션들에 대한 플래그 또는 팔레트 인덱스를 송신하지 않는데, 이것은 이 픽셀 로케이션들이 모두 동일한 픽셀 값을 가지기 때문이다.
픽셀 값이 팔레트 내에 있지 않을 경우 (즉, 픽셀 값을 특정하는 팔레트 엔트리가 존재지 않음), 비디오 인코더 (20) 는 소정의 블록에서의 소정의 픽셀 로케이션에 대한 픽셀 값 또는 잔차 값 (또는 그 양자화된 버전들) 을 송신할 수도 있다. 비디오 디코더 (30) 는 먼저, 비디오 인코더 (20) 로부터 수신된 정보에 기초하여 팔레트를 결정할 수도 있다. 다음으로, 비디오 디코더 (30) 는 소정의 블록의 픽셀 값들을 재구성하기 위하여, 소정의 블록에서의 픽셀 로케이션들과 연관된 수신된 인덱스 값들을 팔레트의 엔트리들로 맵핑할 수도 있다.
팔레트-기반 코딩은 어떤 양의 시그널링 오버헤드 (signaling overhead) 를 가질 수도 있다. 예를 들어, 팔레트의 사이즈와 같은 팔레트의 특성들뿐만 아니라 팔레트 자체를 시그널링하기 위하여 다수의 비트들이 필요하게 될 수도 있다. 게다가, 블록의 픽셀들에 대한 인덱스 값들을 시그널링하기 위하여 다수의 비트들이 필요하게 될 수도 있다. 본 개시의 기법들은 일부의 예들에서, 이러한 정보를 시그널링하기 위해 필요하게 된 비트들의 수를 감소시킬 수도 있다. 예를 들어, 본 개시에서 설명된 기법들은 팔레트-기반 코딩 모드들을 시그널링하는 것, 팔레트들을 송신하는 것, 팔레트들을 예측하는 것, 팔레트들을 유도하는 것, 또는 팔레트-기반 코딩 맵들 및 다른 신택스 엘리먼트들을 송신하는 것 중의 하나 이상의 다양한 조합들에 대한 기법들을 포함할 수도 있다. 본 개시의 특정 기법들은 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 에서 구현될 수도 있다.
본 개시의 양태들은 팔레트 예측에 대한 것이다. 예를 들어, 본 개시의 양태들에 따르면, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 제 1 픽셀 값들을 표시하는 엔트리들의 제 1 세트를 가지는 제 1 팔레트를 결정할 수도 있다. 다음으로, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 제 1 팔레트의 엔트리들의 제 1 세트에 기초하여, 제 2 팔레트의 제 2 픽셀 값들을 표시하는 엔트리들의 제 2 세트를 결정할 수도 있다. 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 또한, 제 2 팔레트를 이용하여 (즉, 픽셀 값들의 제 2 세트를 이용하여) 비디오 데이터의 블록의 픽셀들을 코딩할 수도 있다.
엔트리들의 제 1 세트에 기초하여 제 2 팔레트의 엔트리들의 제 2 세트를 결정할 때, 비디오 인코더 (20) 는 제 2 팔레트를 재구성하기 위하여 비디오 디코더 (30) 에 의해 이용될 수도 있는 다양한 신택스 엘리먼트들을 인코딩할 수도 있다. 예를 들어, 비디오 인코더 (20) 는, 전체 팔레트 (또는 별도의 팔레트를 가지는 비디오 데이터의 각각의 컬러 컴포넌트, 예컨대 Y, Cb, Cr, 또는 Y, U, V, 또는 R, G, B 의 경우에는 팔레트들) 가 현재 코딩되고 있는 블록의 하나 이상의 이웃하는 블록들로부터 예측 (예컨대, 복사) 되는 것을 표시하기 위하여, 비트스트림에서의 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다.
현재의 블록의 현재의 팔레트의 엔트리들이 예측 (예컨대, 복사) 되는 팔레트는 예측 팔레트로서 지칭될 수도 있다. 예측 팔레트는 공간적으로 이웃하는 블록들 및/또는 블록들의 특정 스캔 순서에서 이웃하는 블록들을 포함하는 하나 이상의 이웃하는 블록들로부터의 팔레트 엔트리들을 포함할 수도 있다. 예를 들어, 이웃하는 블록들은 현재 코딩되고 있는 블록의 좌측 (좌측의 이웃하는 블록) 또는 상부 (상부의 이웃하는 블록) 에 공간적으로 위치될 수도 있다. 또 다른 예에서, 비디오 인코더 (20) 는 현재의 블록의 인과적 이웃 (causal neighborhood) 에서의 가장 빈번한 샘플 값들을 이용하여 예측 팔레트 엔트리들을 결정할 수도 있다. 또 다른 예에서, 이웃하는 블록들은 블록들을 코딩하기 위해 이용된 특정 스캔 순서에 따라 현재 코딩되고 있는 블록을 이웃할 수도 있다. 즉, 이웃하는 블록들은 스캔 순서에서 현재의 블록 이전에 코딩된 하나 이상의 블록들일 수도 있다. 비디오 인코더 (20) 는 팔레트들이 복사되는 이웃하는 블록들의 로케이션을 표시하기 위하여 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다.
일부의 예들에서, 팔레트 예측은 엔트리 별로 수행될 수도 있다. 예를 들어, 비디오 인코더 (20) 는 예측 팔레트의 각각의 엔트리에 대하여, 소정의 팔레트 엔트리가 현재의 블록에 대한 현재의 팔레트 내에 포함되는지 여부를 표시하기 위하여 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 비디오 인코더 (20) 가 현재의 블록에 대한 현재의 팔레트의 엔트리를 파퓰레이팅 (populating) 하기 위하여 예측을 이용하지 않을 경우, 비디오 인코더 (20) 는 현재의 블록에 대한 현재의 팔레트에서, 예측되지 않은 엔트리들뿐 아니라 이러한 엔트리들의 수를 특정하기 위하여, 하나 이상의 추가적인 신택스 엘리먼트들을 인코딩할 수도 있다.
위에서 설명된 바와 같이, 현재의 블록, 예컨대, CU 또는 PU 에 대하여, 그 팔레트에서의 엔트리들은 하나 이상의 이전에 코딩된 이웃하는 블록들로부터의 팔레트 엔트리들을 포함하는 예측 팔레트에서의 엔트리들로부터 예측될 수도 있다. 본 개시는 현재의 블록에 대한 팔레트를 예측하기 위한 몇몇 대안적인 기법들을 설명한다.
하나의 예에서, 예측 팔레트는 엔트리들의 수, N 을 포함한다. 이 예에서, 비디오 인코더 (20) 는 먼저, 예측 팔레트와 동일한 사이즈를 가지는 2진 벡터 (binary vector) V, 즉, 사이즈 N 의 벡터를 비디오 디코더 (30) 로 송신한다. 2진 벡터에서의 각각의 엔트리는 예측 팔레트에서의 대응하는 엔트리가 재이용되거나 현재의 블록에 대한 현재의 팔레트로 복사될 것인지 여부를 표시한다. 예를 들어, 비디오 인코더 (20) 는 2진 벡터를 포함하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 일부의 경우들에는, 비디오 인코더 (20) 가 각각의 팔레트 엔트리가 현재의 팔레트로 복사되는지 여부를 표시하는 예측 팔레트에서의 팔레트 엔트리들의 각각에 대한 1-비트 플래그를 포함하는 2진 벡터를 인코딩한다. 다른 경우들에 있어서, 비디오 인코더 (20) 는 2진 벡터에서의 엔트리들에 대한 표시들이 1-비트 플래그들로서 개별적으로 전송되는 대신에 압축되거나 함께 조합되는 무손실 압축된 2진 벡터를 인코딩한다. 이러한 방식으로, 비디오 디코더 (30) 는 현재의 팔레트로 복사되는 예측 팔레트에서의 팔레트 엔트리들 중의 하나 이상을 결정한다.
게다가, 비디오 인코더 (20) 는 얼마나 많은 새로운 엔트리들이 현재의 블록에 대한 팔레트 내에 포함될 것인지를 표시하는 수 M 을 송신하고, 다음으로, 새로운 엔트리들에 대한 픽셀 값들을 비디오 디코더 (30) 로 송신한다. 예를 들어, 비디오 인코더 (20) 는 1진 코드 (unary code) 들, 절단된 1진 코드 (truncated unary code) 들, 지수-골롬 코드 (Exponential-Golomb code) 들, 또는 골롬-라이스 코드 (Golomb-Rice code) 들 중의 하나를 이용하여 현재의 팔레트 내에 포함되는 새로운 팔레트 엔트리들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 이러한 방식으로, 비디오 디코더 (30) 는 현재의 블록에 대한 현재의 팔레트 내에 포함되는 예측 팔레트에 있지 않은 새로운 팔레트 엔트리들의 수를 결정한다.
이 예에서, 현재의 블록에 대한 현재의 팔레트의 최종 사이즈는 M + S 와 동일한 것으로 유도될 수도 있고, 여기서, S 는 현재의 블록에 대한 팔레트에서 재이용되는 예측 팔레트에서의 엔트리들의 수이다. 비디오 디코더 (30) 는 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 것으로 현재의 팔레트의 사이즈를 계산할 수도 있다. 일단 현재의 팔레트의 사이즈가 결정되면, 비디오 디코더 (30) 는 예측 팔레트로부터의 복사의 팔레트 엔트리들 및 비디오 인코더 (20) 로부터 명시적으로 시그널링된 새로운 팔레트 엔트리들을 포함하는 현재의 팔레트를 생성한다.
현재의 블록에 대한 팔레트를 생성하기 위하여, 비디오 디코더 (30) 는 수신된 M 개의 새로운 팔레트 엔트리들과, 예측 팔레트로부터 재이용되고 있는 S 개의 복사된 팔레트 엔트리들을 병합할 수도 있다. 일부의 경우들에는, 병합이 픽셀 값들에 기초할 수도 있어서, 별도의 팔레트가 각각의 컴포넌트에 대해 이용될 때, 현재의 블록에 대한 팔레트에서의 엔트리들은 팔레트 인덱스와 함께 증가 (또는 감소) 할 수도 있다. 다른 경우들에는, 병합이 엔트리들의 2 개의 세트들, 즉, 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들의 연결일 수도 있다.
또 다른 예에서, 비디오 인코더 (20) 는 먼저, 현재의 블록에 대한 팔레트의 사이즈, N 의 표시를 비디오 디코더 (30) 로 송신한다. 다음으로, 비디오 인코더 (20) 는 현재의 블록에 대한 팔레트와 동일한 사이즈를 가지는 벡터 V, 즉, 사이즈 N 의 벡터를 비디오 디코더 (30) 로 송신한다. 벡터에서의 각각의 엔트리는 현재의 블록에 대한 팔레트에서의 대응하는 엔트리가 비디오 인코더 (20) 에 의해 명시적으로 송신되는지, 또는 예측 팔레트로부터 복사되는지 여부를 표시한다. 예측 팔레트로부터 복사되는 엔트리들에 대하여, 비디오 인코더 (20) 는 예측 팔레트에서의 어느 엔트리가 현재의 블록에 대한 팔레트에서 이용되는지를 시그널링하기 위해 상이한 방법들을 이용할 수도 있다. 일부의 경우들에는, 비디오 인코더 (20) 가 예측 팔레트로부터 현재의 블록에 대한 팔레트로 복사되어야 할 엔트리를 표시하는 팔레트 인덱스를 시그널링할 수도 있다. 다른 경우들에는, 비디오 인코더 (20) 가 현재의 블록에 대한 팔레트에서의 인덱스 및 예측 팔레트에서의 인덱스 사이의 차이인 인덱스 오프셋을 시그널링할 수도 있다.
2 개의 상기 예들에서, 현재의 블록에 대한 현재의 팔레트의 예측을 위해 이용된 예측 팔레트가 형성되는 하나 이상의 이전에 코딩된 이웃하는 블록들은 현재의 블록의 공간적으로 이웃하는 블록들 및/또는 블록들의 특 정 스캔 순서에서 현재의 블록의 이웃하는 블록들일 수도 있다. 예를 들어, 이웃하는 블록들은 현재의 블록의 상부 (즉, 상부-이웃 블록들) 또는 좌측 (즉, 좌측-이웃 블록들) 에 공간적으로 위치될 수도 있다. 일부의 예들에서, 이웃하는 블록들의 후보 리스트가 구성될 수도 있고, 비디오 인코더 (20) 는 후보 이웃 블록들 중의 하나 이상 및 연관된 팔레트들이 예측 팔레트를 형성하기 위해 이용되는 것을 표시하기 위한 인덱스를 송신한다.
어떤 블록들, 예컨대, 슬라이스의 시작 (beginning) 또는 다른 슬라이스 경계들에서의 CU 들, 또는 비디오 데이터의 슬라이스 또는 픽처의 가장 좌측 CU 들에 대하여, 팔레트 예측은 디스에이블 (disable) 될 수도 있다. 예를 들어, 비디오 데이터의 현재의 블록이 비디오 데이터의 슬라이스에서 하나 또는 제 1 블록, 또는 비디오 데이터의 슬라이스 또는 픽처의 가장 좌측 블록을 포함할 때, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 현재의 블록에 대한 현재의 팔레트로의 예측 팔레트에서의 팔레트 엔트리들의 복사를 디스에이블할 수도 있다.
추가적인 예에서, 비디오 인코더 (20) 는 현재의 블록에 대한 팔레트 내에 포함된 엔트리들의 수의 표시를 비디오 디코더 (30) 로 송신한다. 다음으로, 팔레트 엔트리들의 각각에 대하여, 비디오 인코더 (20) 는 현재의 블록에 대한 팔레트의 팔레트 엔트리가 비디오 인코더 (20) 에 의해 명시적으로 송신되는지 여부, 또는 팔레트 엔트리가 이전에 재구성된 픽셀로부터 유도되는지 여부를 표시하기 위하여, 플래그 또는 다른 신택스 엘리먼트를 송신한다. 이전에 재구성된 픽셀로부터 유도되는 현재의 블록에 대한 팔레트의 팔레트 엔트리들의 각각에 대하여, 비디오 인코더 (20) 는 현재의 블록에서의 재구성된 픽셀의 픽셀 로케이션, 또는 팔레트 엔트리에 대응하는 이웃하는 블록에서의 재구성된 픽셀의 픽셀 로케이션에 관한 또 다른 표시를 송신한다. 일부의 경우들에는, 재구성된 픽셀 로케이션 표시가 현재의 블록의 상부-좌측 위치에 대한 변위 벡터 (displacement vector) 일 수도 있다. 다른 경우들에는, 재구성된 픽셀 로케이션 표시가 현재의 블록에 대한 팔레트 엔트리를 특정하기 위해 이용될 수 있는 재구성된 픽셀들의 리스트로의 인덱스일 수도 있다. 예를 들어, 이 리스트는 HEVC 에서의 정상적인 인트라 예측을 위해 이용될 수도 있는 모든 참조 픽셀들을 포함할 수도 있다.
일부의 예들에서, 전체 팔레트를 예측하기 위한 기법들은 팔레트의 하나 이상의 엔트리들을 예측하기 위한 기법들과 조합될 수도 있다. 예를 들어, 비디오 인코더 (20) 는 현재의 팔레트가 예측 팔레트 (예를 들어, 최후의 팔레트-코딩된 블록에 대한 팔레트) 로부터 전체적으로 복사되는지 여부를 표시하기 위하여, 비트스트림에서의 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 그렇지 않을 경우, 비디오 인코더 (20) 는 예측 팔레트에서의 각각의 엔트리가 복사되는지 여부를 표시하기 위하여, 비트스트림에서의 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다.
일부의 사례들에서, 팔레트의 사이즈는 비디오 인코더 (20) 및 비디오 디코더 (30) 에 의해 적용된 비디오 코딩 표준에서 특정된 고정된 값일 수도 있거나, 비디오 인코더 (20) 로부터 비디오 디코더 (30) 로 시그널링될 수도 있다. 컬러 컴포넌트들의 각각이 별도의 팔레트를 가지는 경우에는, 비디오 인코더 (20) 가 상이한 팔레트들에 대한 사이즈들을 별도로 시그널링할 수도 있다. 모든 컬러 컴포넌트들에 대한 단일 팔레트의 경우, 비디오 인코더 (20) 는 단일 팔레트에 대한 단일 사이즈를 인코딩할 수도 있다. 또 다른 예에서, 엔트리들의 수 및 팔레트 값들을 시그널링하는 대신에, 비디오 인코더 (20) 는 각각의 팔레트 값을 시그널링한 후에, 시그널링된 팔레트 값이 팔레트에 대한 최종 팔레트 엔트리인지 여부를 표시하기 위하여 플래그를 시그널링할 수도 있다. 비디오 인코더 (20) 는 팔레트가 어떤 최대 사이즈에 이미 도달하였을 경우에 이러한 "팔레트의 종료 (end of palette)" 플래그를 시그널링하지 않을 수도 있다.
비디오 인코더 (20) 는 팔레트 예측이 인에이블 (enable) 되는지 및/또는 활성인지 여부를 표시하기 위하여 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 예시의 목적들을 위한 예로서, 비디오 인코더 (20) 는 각각의 블록 (예컨대, CU 또는 PU) 에 대하여, 비디오 인코더 (20) 가 각각의 블록에 대한 팔레트를 예측하기 위해 팔레트 예측을 이용하는지 여부를 표시하기 위하여, pred_palette_flag 를 인코딩할 수도 있다. 일부의 예들에서, 비디오 인코더는 각각의 컬러 컴포넌트에 대하여 별도의 플래그 (예컨대, 각각의 블록에 대하여 3 개의 플래그들) 을 시그널링할 수도 있다. 다른 예들에서, 비디오 인코더 (20) 는 블록의 모든 컬러 컴포넌트들에 적용가능한 단일 플래그를 시그널링할 수도 있다.
비디오 디코더 (30) 는 인코딩된 비트스트림으로부터 상기 식별된 정보를 획득할 수도 있고, 팔레트를 재구성하기 위하여 정보를 이용할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 특정 팔레트가 또 다른 팔레트로부터 예측되는지 여부를 표시하는 데이터뿐만 아니라, 비디오 디코더 (30) 가 적절한 예측 팔레트 엔트리들을 이용하도록 하는 정보도 수신할 수도 있다.
일부의 사례들에서, 추가적으로 또는 대안적으로, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트를 "온-더-플라이 (on-the-fly)" 로, 즉, 동적으로 구성할 수도 있다. 예를 들어, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 코딩하는 동안에 엔트리들을 비어 있는 팔레트에 추가할 수도 있다. 즉, 비디오 인코더 (20) 는 픽셀 값들이 블록에서의 위치들에 대해 생성되고 송신될 때에, 픽셀 값들을 팔레트에 추가할 수도 있다. 블록에서 상대적으로 더 이후에 코딩되는 픽셀들 (예컨대, 팔레트 내에서 이전에 추가되었고 인덱싱되었던 값들을 가지는 픽셀들) 은 예컨대, 픽셀 값들을 송신하는 대신에, 픽셀 값들과 연관된 인덱스 값들로, 팔레트의 더 이전에 추가된 엔트리들을 참조할 수도 있다. 마찬가지로, 블록에서의 위치에 대한 새로운 픽셀 값을 수신할 시에, 비디오 디코더 (30) 는 비디오 인코더 (20) 와 동일한 프로세스를 따를 수도 있고, 픽셀 값을 팔레트 내에 포함할 수도 있다. 이러한 방식으로, 비디오 디코더 (30) 는 비디오 인코더 (20) 와 동일한 팔레트를 구성한다. 비디오 디코더 (30) 는 팔레트 내에 이미 포함되는 값들을 가지는 픽셀들에 대하여, 픽셀 값들을 식별하는 인덱스 값들을 수신할 수도 있다. 비디오 디코더 (30) 는 블록의 픽셀들을 재구성하기 위하여, 수신된 정보, 예컨대, 팔레트에 대한 픽셀 값들 및/또는 인덱스 값들을 이용할 수도 있다.
일부의 사례들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 고정된 사이즈의 팔레트를 유지할 수도 있다. 예를 들어, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 가장 최근의 재구성된 픽셀 값들을 팔레트에 추가할 수도 있다. 팔레트에 추가되는 각각의 엔트리에 대하여, 가장 이전에 팔레트에 추가되었던 엔트리는 폐기된다. 이것은 또한, 선입선출 (First-in-First-out; FIFO) 로 때때로 지칭된다. 팔레트를 업데이트하는 이 프로세스는, 팔레트 모드를 이용하여 코딩되는 블록들에만, 또는 코딩 모드에 관계없이 모든 블록들에 적용될 수도 있다.
위에서 설명된 기법들은 일반적으로, 팔레트-기반 코딩을 위하여 팔레트를 구성하고 및/또는 송신하는 비디오 인코더 (20) 및 비디오 디코더 (30) 에 관한 것이다. 본 개시의 다른 양태들은 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 가 픽셀 값들을 결정하도록 하는 맵을 구성하고 및/또는 송신하는 것에 관한 것이다. 예를 들어, 본 개시의 다른 양태들은 비디오 데이터의 블록의 픽셀 값들을 특정하는 팔레트에서의 엔트리들을 표시하는 인덱스들의 맵을 구축하고 및/또는 송신하는 것에 관한 것이다.
일부의 예들에서, 비디오 인코더 (20) 는 블록의 픽셀들이 팔레트에서 대응하는 값을 가지는지 여부를 표시할 수도 있다. 예시의 목적들을 위한 예에서, 맵의 (i, j) 엔트리는 비디오 데이터의 블록에서 (i, j) 픽셀 위치에 대응하는 것으로 가정한다. 이 예에서, 비디오 인코더 (20) 는 블록의 각각의 픽셀 위치에 대한 플래그를 인코딩할 수도 있다. 비디오 인코더 (20) 는 (i, j) 로케이션에서의 픽셀 값이 팔레트에서의 값들 중의 하나인 것을 표시하기 위하여 플래그를 (i, j) 엔트리에 대하여 1 과 동일하게 설정할 수도 있다. 픽셀 값이 팔레트 내에 포함될 때 (즉, 플래그가 1 과 동일함), 비디오 인코더 (20) 는 또한, 픽셀 값을 특정하는 팔레트에서의 대응하는 엔트리를 식별하는 (i, j) 엔트리에 대한 팔레트 인덱스를 표시하는 데이터를 인코딩할 수도 있다. 픽셀 값이 팔레트 내에 포함되지 않을 때 (즉, 플래그가 제로와 동일함), 비디오 인코더 (20) 는 또한, 픽셀에 대한 (아마도 양자화된) 샘플 값을 표시하는 데이터를 인코딩할 수도 있다. 일부의 경우들에는, 팔레트 내에 포함되지 않는 픽셀이 "이스케이프 픽셀 (escape pixel)" 로서 지칭된다.
비디오 디코더 (30) 는 인코딩된 비트스트림으로부터 상기 설명된 데이터를 획득할 수도 있고, 블록에서의 특정 로케이션에 대한 팔레트 인덱스 및/또는 픽셀 값을 결정하기 위하여 데이터를 이용할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 현재의 블록의 픽셀 값들의 각각이 현재의 팔레트에서 대응하는 픽셀 값을 가지는지 여부를 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩할 수도 있고, 현재의 팔레트에서 대응하는 픽셀 값들을 가지는 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩할 수도 있고, 현재의 팔레트에서 대응하는 픽셀을 가지지 않는 현재의 블록의 하나 이상의 픽셀 값들에 대한 픽셀 값들을 표시하는 하나 이상의 신택스 엘리먼트를 디코딩할 수도 있다.
일부의 사례들에서, 소정의 위치에서의 픽셀이 맵핑되는 팔레트 인덱스와, 이웃하는 픽셀이 동일한 팔레트 인덱스로 맵핑될 확률과의 사이의 상관 (correlation) 이 있을 수도 있다. 즉, 픽셀이 특정 팔레트 인덱스로 맵핑될 때, (공간적 로케이션의 측면에서의) 하나 이상의 이웃하는 픽셀들이 동일한 팔레트 인덱스로 맵핑되는 확률은 상대적으로 높을 수도 있다.
본 개시의 양태들에 따르면, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 비디오 데이터의 동일한 블록의 하나 이상의 인덱스들과 관련하여, 비디오 데이터의 블록의 하나 이상의 인덱스들을 결정하고 코딩할 수도 있다. 예를 들어, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 비디오 데이터의 블록에서 제 1 픽셀과 연관된 제 1 인덱스 값을 결정하도록 구성될 수도 있고, 여기서, 제 1 인덱스 값은 제 1 픽셀의 값을 팔레트의 엔트리에 관련시킨다. 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 또한, 제 1 인덱스 값에 기초하여, 비디오 데이터의 블록에서 하나 이상의 제 2 픽셀들과 연관된 하나 이상의 제 2 인덱스 값들을 결정하고, 비디오 데이터의 블록의 제 1 및 하나 이상의 제 2 픽셀들을 코딩하도록 구성될 수도 있다. 이에 따라, 이 예에서는, 맵의 인덱스들이 맵의 하나 이상의 다른 인덱스들과 관련하여 코딩될 수도 있다.
일부의 예들에서, 비디오 인코더 (20) 는 동일한 인덱스 값으로 맵핑되는 소정의 스캔 순서에서의 연속적인 픽셀들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 유사-값의 인덱스 값들의 스트링 (string) 은 본원에서 "런 (run)" 으로서 지칭될 수도 있다. 일부의 예들에서, 픽셀 값은 팔레트에서 정확하게 하나의 인덱스 값과 연관될 수도 있다. 따라서, 일부의 사례들에서, 값들의 런은 또한, 유사-값의 픽셀 값들의 스트링을 지칭할 수도 있다. 다른 예들에서, 이하에서 손실 코딩에 대하여 설명된 바와 같이, 하나를 초과하는 픽셀 값이 팔레트에서 동일한 인덱스 값으로 맵핑할 수도 있다. 이러한 예들에서, 값들의 런은 유사-값의 인덱스 값들을 지칭한다. 이 시나리오에서, 디코더 측에서는, 유사-값의 인덱스 값들의 런들이 인덱스 값들에 대응하는 픽셀 값들의 런들에 대응할 수도 있다.
예시의 목적들을 위한 예에서, 소정의 스캔 순서에서의 2 개의 연속적인 인덱스들이 상이한 값들을 가질 경우, 런은 제로와 동일하다. 소정의 스캔 순서에서의 2 개의 연속적인 인덱스들이 동일한 값을 가지지만, 스캔 순서에서의 제 3 인덱스가 상이한 값을 가질 경우에는, 런이 1 과 동일하다. 비디오 디코더 (30) 는 인코딩된 비트스트림으로부터 런을 표시하는 신택스 엘리먼트들을 획득할 수도 있고, 동일한 인덱스 값을 가지는 연속적인 픽셀 로케이션들의 수를 결정하기 위하여 신택스 엘리먼트들에 의해 표시된 데이터를 이용할 수도 있다.
일부의 예들에서, 현재의 블록에 대한 팔레트 내에 있는 픽셀 값들을 가지는 현재의 블록에서의 모든 픽셀 로케이션들은 팔레트 인덱스와, 그 다음으로, 연속적인 픽셀 로케이션들에서의 픽셀 값의 "런" 으로 인코딩된다. 팔레트에서 하나의 엔트리만 있을 경우에는, 팔레트 인덱스 또는 "런" 의 송신이 현재의 블록에 대해 스킵 (skip) 될 수도 있다. 현재의 블록에서의 픽셀 로케이션들 중의 하나에서의 픽셀 값이 팔레트에서의 픽셀 값과 정확한 일치를 가지지 않을 경우에는, 비디오 인코더 (20) 가 가장 근접한 픽셀 값을 가지는 팔레트 엔트리들 중의 하나를 선택할 수도 있고, 원래의 픽셀 값 및 팔레트 내에 포함된 예측 픽셀 값 사이의 예측 에러 또는 잔차 값을 계산할 수도 있다. 비디오 인코더 (20) 는 픽셀 로케이션에 대한 잔차 값을 양자화하고, 인코딩하고, 비디오 디코더 (30) 로 송신할 수도 있다.
다음으로, 비디오 디코더 (30) 는 대응하는 수신된 팔레트 인덱스에 기초하여 픽셀 로케이션에서의 픽셀 값을 유도할 수도 있다. 다음으로, 유도된 픽셀 값 및 (비디오 인코더 (20) 로부터 수신된) 잔차 값은 현재의 블록에서의 픽셀 로케이션에서 픽셀 값을 예측하기 위해 이용된다. 하나의 예에서는, 잔차 값을 변환하고, 변환 계수들을 양자화하고, 양자화된 변환 계수들을 엔트로피 인코딩하기 위하여 잔차 쿼드-트리 (RQT) 를 적용하는 것과 같은, HEVC 초안 10 에 의해 특정된 HEVC 방법을 이용하여 잔차 값이 인코딩된다. 일부의 경우들에는, 잔차 값들이 변환을 적용하지 않고 직접적으로 양자화될 수도 있다. 일 예로서, 비디오 디코더 (30) 는 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩할 수도 있고, 여기서, 인덱스 값들은 현재의 팔레트에서의 대응하는 픽셀 값들을 예측 픽셀 값들로서 식별하고, 그리고 비디오 디코더 (30) 는 현재의 블록의 하나 이상의 픽셀 값들과 현재의 팔레트에서의 식별된 예측 픽셀 값들 사이의 잔차 값들을 표시하는 하나 이상의 신택스 엘리먼트를 디코딩할 수도 있다. 일부의 경우들에는, 상기 예들이 손실 코딩으로서 지칭될 수도 있다.
추가적으로 또는 대안적으로, 본 개시의 양태들에 따르면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 맵의 하나 이상의 엔트리들에 대하여 라인 복사 (line copying) 를 수행할 수도 있다. 엔트리들은 또한, 맵의 엔트리들 및 블록의 픽셀 위치들 사이의 관계로 인해 "위치들" 로서 지칭될 수도 있다. 라인 복사는 일부의 예들에서, 스캔 방향에 종속될 수도 있다. 예를 들어, 비디오 인코더 (20) 는, 블록에서의 특정 위치에 대한 픽셀 값 또는 인덱스 맵 값이 (수평으로 배향된 스캔에 대하여) 특정 위치 상부의 (예컨대, 선행하는) 라인, 또는 (수직으로 배향된 스캔에 대하여) 특정 위치의 좌측의 (예컨대, 선행하는) 컬럼 (column) 에서의 픽셀 또는 인덱스 값과 동일한 것을 표시할 수도 있다. 비디오 인코더 (20) 는 또한, 특정 위치의 상부의 라인 또는 특정 위치의 좌측의 컬럼에서의 픽셀 값들 또는 인덱스들과 동일한, 스캔 순서에서의 픽셀 값들 또는 인덱스들의 수를 런으로서 표시할 수도 있다. 이 예에서, 비디오 인코더 (20) 및 또는 비디오 디코더 (30) 는 특정된 이웃하는 라인 (또는 수직 스캔에 대한 컬럼) 으로부터, 그리고 현재 코딩되고 있는 블록의 라인 (또는 수직 스캔에 대한 컬럼) 에 대한 엔트리들의 특정된 수에 대하여 픽셀 또는 인덱스 값들을 복사할 수도 있다.
일부의 사례들에서, 값들이 복사되는 라인 (또는 수직 스캔에 대한 컬럼) 은 현재 코딩되고 있는 위치의 라인 (또는 수직 스캔에 대한 컬럼) 에 바로 인접할 수도 있고, 예컨대, 라인의 상부 또는 좌측에 있을 수도 있다. 다른 예들에서, 블록의 다수의 라인들이 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 에 의해 버퍼링될 수도 있어서, 맵의 다수의 라인들 중의 임의의 것은 현재 코딩되고 있는 맵의 라인에 대한 예측 값들로서 이용될 수도 있다. 유사한 기법들이 수직 스캔에 대한 이전의 컬럼들에 적용될 수도 있다. 예시의 목적들을 위한 예에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 픽셀들의 현재의 로우 (row) 를 코딩하기 이전에 인덱스들 또는 픽셀 값들의 이전의 4 개의 로우들을 저장하도록 구성될 수도 있다. 이 예에서, 예측 로우 (인덱스들 또는 픽셀 값들이 복사되는 로우) 는 절단된 1진 코드 또는 1진 코드들과 같은 다른 코드들과 함께 비트스트림에서 표시될 수도 있다. 절단된 1진 코드에 대하여, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 수평 스캔들에 대한 최대 로우 계산 (예컨대, row_index-1) 또는 수직 스캔들에 대한 최대 컬럼 계산 (예컨대, column_index-1) 에 기초하여 절단된 1진 코드에 대한 최대 값을 결정할 수도 있다. 게다가, 복사되는 예측 로우로부터의 위치들의 수의 표시는 또한, 비트스트림 내에 포함될 수도 있다. 일부의 사례들에서, 현재의 위치가 예측되고 있는 라인 (또는 수직 스캔들의 경우에 컬럼) 이 또 다른 블록 (예컨대, CU 또는 CTU) 에 속할 경우, 이러한 예측은 디스에이블될 수도 있다.
또 다른 예로서, 비디오 인코더 (20) 는, 현재 코딩되고 있는 맵의 라인으로 복사하기 위하여 이웃하는 라인 및 이웃하는 라인의 엔트리들의 수 또는 부분을 표시하는, "상부 라인 좌측 절반으로부터 복사" 또는 "상부 라인 우측 절반으로부터 복사" 와 같은 명령을 시그널링할 수도 있다. 추가적인 예로서, 인덱스 값들의 맵은 코딩하기 전에 재순서화 (re-order) 될 수도 있다. 예를 들어, 인덱스 값들의 맵은 코딩 효율을 개선시키기 위하여 90, 180 또는 270 도만큼 회전될 수도 있거나, 상부면 하부로 또는 좌측면 우측으로 플립 (flip) 될 수도 있다. 이에 따라, 임의의 스캔은 픽셀 또는 인덱스 값들의 2 차원 어레이를 1 차원 어레이로 변환하기 위하여 이용될 수도 있다.
소위 엔트리들의 런들을 코딩하기 위한 기법들은 위에서 설명된 라인 복사를 위한 기법들과 함께 이용될 수도 있다. 예를 들어, 비디오 인코더 (20) 는 맵에서의 엔트리의 값이 팔레트로부터 획득되는지, 또는 맵에서의 엔트리의 값이 맵에서 이전에 코딩된 라인으로부터 획득되는지 여부를 표시하는 하나 이상의 신택스 엘리먼트들 (예컨대, 플래그) 을 인코딩할 수도 있다. 비디오 인코더 (20) 는 또한, 팔레트의 인덱스 값 또는 라인 (로우 또는 컬럼) 에서의 엔트리의 로케이션을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 비디오 인코더 (20) 는 또한, 동일한 값을 공유하는 연속적인 엔트리들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 비디오 디코더 (30) 는 인코딩된 비트스트림으로부터 이러한 정보를 획득할 수도 있고, 블록에 대한 픽셀 값들 및 맵을 재구성하기 위하여 정보를 이용할 수도 있다.
위에서 언급된 바와 같이, 맵의 인덱스들은 특정 순서로 스캔된다. 본 개시의 양태들에 따르면, 스캔 방향은 수직, 수평, 또는 대각 (예컨대, 블록에서 대각선으로 45 도 또는 135 도) 일 수도 있다. 일부의 예들에서, 비디오 인코더 (20) 는 블록의 인덱스들을 스캔하기 위한 스캔 방향을 표시하는, 각각의 블록에 대한 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 추가적으로 또는 대안적으로, 스캔 방향은 일정한 값일 수도 있거나, 예를 들어, 블록 사이즈, 컬러 공간, 및/또는 컬러 컴포넌트와 같은 소위 부가 정보에 기초하여 시그널링되거나 추론될 수도 있다. 비디오 인코더 (20) 는 블록의 각각의 컬러 컴포넌트에 대한 스캔들을 특정할 수도 있다. 대안적으로, 특정된 스캔은 블록의 모든 컬러 컴포넌트들에 적용할 수도 있다.
일부의 예들에서, 비디오 인코더 (20) 는 소정의 스캔 순서에서의 유사-값의 인덱스 값들의 런들을 비디오 디코더 (30) 로 송신하지 않을 수도 있다. 그 대신에, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 맵의 엔트리들을 결정하기 위하여 런들의 값들을 묵시적으로 유도할 수도 있다. 이 경우, 비디오 인코더 (20) 는 소정의 인덱스 값의 런이 발생한 것을 비디오 디코더 (30) 로 시그널링할 수도 있지만, 런의 값을 시그널링하지 않을 수도 있다. 예를 들어, 런의 값은 일정한 값일 수도 있거나, 예를 들어, 블록 사이즈와 같은, 코딩되고 있는 비디오 데이터의 현재의 블록에 대한 부가 정보에 기초하여 유도될 수도 있다. 런의 값이 블록 사이즈에 종속되는 경우, 런은 현재의 블록의 폭, 현재의 블록의 높이, 현재의 블록의 절반의 폭 (또는 절반의 높이), 현재의 블록의 폭 및/또는 높이의 분수 (fraction), 또는 현재의 블록의 폭 및/또는 높이의 배수 (multiple) 와 동일할 수도 있다. 일부의 예들에서, 비디오 인코더 (20) 는 하이 레벨 신택스 (high level syntax) 를 이용하여 런의 값을 비디오 디코더 (30) 로 시그널링할 수도 있다. 일부의 예들에서, 어구 "하이-레벨 신택스" 는 파라미터 세트들, 예컨대, 픽처 파라미터 세트 (picture parameter set; PPS) 들, 시퀀스 파라미터 세트 (sequence parameter set; SPS), 및 비디오 파라미터 세트 (video parameter set; VPS), 그리고 슬라이스 헤더들에서의 신택스를 지칭한다.
추가적으로 또는 대안적으로, 비디오 인코더 (20) 는 심지어 맵을 비디오 디코더 (30) 로 송신할 필요가 없을 수도 있다. 그 대신에, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 맵 내에 포함된 인덱스 값들의 각각의 런의 시작 위치 또는 로케이션을 묵시적으로 유도할 수도 있다. 하나의 예에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 에 의해 적용된 비디오 코딩 표준은 런이 어떤 로케이션들에서 시작하기만 할 수 있는 것으로 결정할 수도 있다. 예를 들어, 런은 각각의 로우의 시작, 또는 현재의 블록의 매 N 로우들의 시작에서 시작하기만 할 수도 있다. 시작 로케이션은 상이한 스캔 방향들에 대해 상이할 수도 있다. 예를 들어, 수직 스캔이 이용될 경우, 런은 컬럼의 시작, 또는 현재의 블록의 매 N 컬럼들의 시작에서 시작하기만 할 수도 있다. 또 다른 예에서, 시작 로케이션은 현재의 블록에 대한 부가 정보에 따라 유도될 수도 있다. 런의 시작 로케이션이 블록 사이즈에 종속될 경우, 시작 로케이션은 현재의 블록의 각각의 로우 및/또는 각각의 컬럼의 중간-포인트 (mid-point), 또는 현재의 블록의 각각의 로우 및/또는 컬럼의 분수일 수도 있다. 일부의 예들에서, 비디오 인코더 (20) 는 하이 레벨 신택스를 이용하여 시작 위치를 비디오 디코더 (30) 로 시그널링할 수도 있다.
일부의 예들에서는, 위에서 각각 설명된 묵시적 시작 위치 유도 및 묵시적 런 유도가 조합될 수도 있다. 예를 들어, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 맵에서의 유사-값의 인덱스 값들의 런이 2 개의 이웃하는 시작 위치들 사이의 거리와 동일한 것으로 결정할 수도 있다. 시작 위치가 현재의 블록의 매 로우의 시작 (즉, 제 1 위치) 인 경우, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 런의 길이가 현재의 블록의 전체의 로우의 길이와 동일한 것으로 결정할 수도 있다.
이하에서 더욱 상세하게 설명된 일부의 경우들에는, 하나의 팔레트가 생성되고, 현재의 블록에서의 다수의 컬러 컴포넌트들에 대해 공유된다. 예를 들어, 현재의 블록에서의 각각의 픽셀 로케이션에 대하여, 3 개의 컬러 컴포넌트들 (예컨대, Y 루마 및 양자의 U 및 V 크로마 컴포넌트들) 에서의 픽셀 값들은 벡터 (즉, 컬러 벡터) 를 형성할 수도 있다. 다음으로, 팔레트는 현재의 블록을 나타내기 위하여 어떤 수의 벡터들을 선택함으로써 형성될 수도 있다. 루마 컴포넌트에 대한 픽셀 값들의 하나의 팔레트와, 크로마 컴포넌트들에 대한 픽셀 값들의 또 다른 팔레트를 가지는 것이 가능할 수도 있다. 위에서 더욱 상세하게 설명된 라인 복사는 또한, 단일 팔레트와 함께 작동할 수도 있다. 공유된 팔레트로, 팔레트 엔트리는 (Y, U, V) 또는 (Y, Cb, Cr) 또는 (R, G, B) 의 트리플렛 (triplet) 일 수도 있다. 이 경우, 각각의 픽셀 로케이션에 대한 팔레트 인덱스는 스캔이 수평일 경우에 상부 로우, 또는 스캔이 수직일 경우에는 좌측의 컬럼의 팔레트 인덱스와 동일한 것으로서 시그널링되고, 다음으로, 팔레트 인덱스들의 연관된 수는 또한, 런에 기초하여 이전의 로우 또는 컬럼으로부터 복사된다.
2 개 이상의 컬럼 컴포넌트들에 대한 공유된 팔레트, 또는 컬러 컴포넌트들의 각각에 대한 별도의 팔레트들의 어느 하나의 경우, 기하학적 정보는 컬러 컴포넌트들 사이에서 공유될 수도 있다. 통상적으로, 크로마 컴포넌트들은 4:2:2 또는 4:2:0 샘플링과 같은 사전-정의된 방식으로 루마 컴포넌트들로부터 다운샘플링되었을 수도 있으므로, 상이한 컬러 컴포넌트들에서의 공동위치된 블록 (collocated block) 들의 에지 로케이션들 사이에 높은 상관이 있다.
예를 들어, 팔레트-기반 코딩에서는, 현재의 블록의 에지가 런을 파괴할 것이므로, 런 코딩은 현재의 블록에 대한 기하학적 정보를 표시하기 위하여 이용될 수도 있다. 4:4:4 크로마 포맷의 경우, 런은 한 번 생성될 수도 있고 모든 컬러 컴포넌트들에 대해 이용될 수도 있다. 런은 컬러 컴포넌트들 중의 하나에 기초하여 생성될 수도 있거나, 런은 컬러 컴포넌트들 중의 하나를 초과하는 것을 이용하여 생성될 수도 있다. 4:2:2 크로마 포맷 또는 4:2:0 크로마 포맷의 경우, 루마 컴포넌트에 대해 이용된 런은 크로마 컴포넌트들로의 적용을 위하여 다운샘플링될 수도 있다.
본 개시의 기법들은 또한, 팔레트-기반 코딩의 다른 양태들을 포함한다. 예를 들어, 본 개시의 양태들에 따르면, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 블록이 팔레트 코딩 모드를 이용하여 코딩되는 것을 표시하기 위하여, 각각의 블록에 대한 하나 이상의 신택스 엘리먼트들을 코딩할 수도 있다. 예를 들어, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트-기반 코딩 모드가 특정 블록을 코딩하기 위하여 이용되어야 할 것인지 여부를 표시하기 위하여, 팔레트 모드 플래그 (PLT_Mode_flag) 를 코딩할 수도 있다. 이 예에서, 비디오 인코더 (20) 는 현재 인코딩되고 있는 블록 ("현재의 블록") 이 팔레트 모드를 이용하여 인코딩되는 것을 특정하기 위하여 1 과 동일한 PLT_Mode_flag 를 인코딩할 수도 있다. 0 과 동일한 PLT_Mode_flag 의 값은 현재의 블록이 팔레트 모드를 이용하여 인코딩되지 않는 것으로 특정한다. 이 경우, 비디오 디코더 (30) 는 인코딩된 비트스트림으로부터 PLT_Mode_flag 를 획득할 수도 있고, 블록을 디코딩하기 위하여 팔레트-기반 코딩 모드를 적용할 수도 있다. 이용가능한 하나를 초과하는 팔레트-기반 코딩 모드가 있는 사례들에서는 (예컨대, 코딩을 위하여 이용가능한 하나를 초과하는 팔레트-기반 기법이 있음), 하나 이상의 신택스 엘리먼트들이 블록에 대한 복수의 상이한 팔레트 모드들 중의 하나를 표시할 수도 있다.
일부의 사례들에서, 비디오 인코더 (20) 는 현재의 블록이 팔레트 모드를 이용하여 인코딩되지 않는 것을 특정하기 위하여, 0 과 동일한 PLT_Mode_flag 를 인코딩할 수도 있다. 이러한 사례들에서, 비디오 인코더 (20) 는 다양한 인터-예측, 인트라-예측, 또는 다른 코딩 모드들 중의 임의의 것을 이용하여 블록을 인코딩할 수도 있다. PLT_Mode_flag 가 0 과 동일할 때, 비디오 인코더 (20) 는 각각의 블록을 인코딩하기 위해 이용되는 특정 모드를 표시하기 위하여 추가적인 정보 (예컨대, 신택스 엘리먼트들) 를 송신할 수도 있다. 일부의 예들에서는, 이하에서 설명된 바와 같이, 모드가 HEVC 코딩 모드, 예컨대, HEVC 표준에서의 규칙적인 인터-예측 모드 또는 인트라-예측 모드일 수도 있다. PLT_Mode_flag 의 이용은 예시의 목적들을 위하여 설명된다. 다른 예들에서, 멀티-비트 코드들과 같은 다른 신택스 엘리먼트들은 팔레트-기반 코딩 모드가 하나 이상의 블록들에 대해 이용되어야 하는지 여부를 표시하기 위하여, 또는 복수의 모드들 중의 어느 것이 이용되어야 하는지를 표시하기 위하여 이용될 수도 있다.
팔레트-기반 코딩 모드가 이용될 때, 팔레트는 비디오 디코더 (30) 에 의한 이용을 위하여 인코딩된 비디오 데이터 비트스트림에서 예컨대, 본원에서 설명된 기법들 중의 하나 이상을 이용하여 비디오 인코더 (20) 에 의해 송신된다. 팔레트는 각각의 블록에 대하여 송신될 수도 있거나, 또는 다수의 블록들 사이에서 공유될 수도 있다. 팔레트는 블록에 대하여 지배적인 및/또는 대표적인 다수의 픽셀 값들을 지칭할 수도 있다.
팔레트의 사이즈는, 예컨대, 팔레트 내에 포함되는 픽셀 값들의 수의 측면에서, 고정될 수도 있거나, 인코딩된 비트스트림에서의 하나 이상의 신택스 엘리먼트들을 이용하여 시그널링될 수도 있다. 이하에서 더욱 상세하게 설명된 바와 같이, 픽셀 값은 예컨대, 코딩을 위해 이용된 컬러 공간에 따라 다수의 샘플들로 구성될 수도 있다. 예를 들어, 픽셀 값은 루마 및 크로미넌스 샘플들 (예컨대, 루마, U 크로미넌스 및 V 크로미넌스 (YUV) 또는 루마, Cb 크로미넌스, 및 Cr 크로미넌스 (YCbCr) 샘플들) 을 포함할 수도 있다. 또 다른 예에서, 픽셀 값은 적색, 녹색 및 청색 (RGB) 샘플들을 포함할 수도 있다. 본원에서 설명된 바와 같이, 용어 픽셀 값은 일반적으로 픽셀에 기여하는 샘플들 중의 하나 이상을 지칭할 수도 있다. 즉, 용어 픽셀 값은 반드시 픽셀에 기여하는 모든 샘플들을 지칭하는 것은 아니며, 픽셀에 기여하는 단일 샘플 값을 설명하기 위하여 이용될 수도 있다.
일부의 예들에서, 팔레트는 특정 블록의 각각의 컬러 컴포넌트에 대하여 별도로 송신될 수도 있다. 예를 들어, YUV 컬러 공간에서, (Y 값들을 나타내는) Y 컴포넌트에 대한 팔레트, (U 값들을 나타내는) U 컴포넌트에 대한 또 다른 팔레트, 및 (V 값들을 나타내는) V 컴포넌트에 대한 또 다른 팔레트가 있을 수도 있다. 또 다른 예에서, 팔레트는 특정 블록의 모든 컴포넌트들을 포함할 수도 있다. 이 예에서, 팔레트에서의 i 번째 엔트리는 3 개의 값들 (예컨대, Yi, Ui, Vi) 을 포함할 수도 있다. 본 개시의 양태들에 따르면, 하나 이상의 신택스 엘리먼트들은 각각의 컴포넌트 (예컨대, Y, U, V 등등) 에 대하여 팔레트의 사이즈를 별도로 표시할 수도 있다. 다른 예들에서는, 단일 사이즈가 모든 컴포넌트들에 대하여 이용될 수도 있어서, 하나 이상의 신택스 엘리먼트들은 모든 컴포넌트들의 사이즈를 표시한다.
비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 손실 또는 무손실 방식으로 팔레트-기반 코딩을 수행할 수도 있다. 즉, 일부의 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 블록의 픽셀 값들과 일치하는 팔레트 엔트리들을 이용하여 (또는 픽셀 값이 팔레트 내에 포함되지 않을 경우에 실제적인 픽셀 값들을 전송함으로써) 블록에 대한 비디오 데이터를 무손실 코딩할 수도 있다. 다른 예들에서는, 이하의 도 5 에 대하여 더욱 상세하게 설명된 바와 같이, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 가 블록의 픽셀 값들과 정확하게 일치하지 않는 팔레트 엔트리들을 이용하여 블록에 대한 비디오 데이터를 코딩할 수도 있다 (손실 코딩). 유사하게, 실제적인 픽셀 값이 팔레트 내에 포함되지 않을 경우, 실제적인 픽셀 값은 손실 방식으로 양자화될 수도 있다.
본 개시에서 설명된 기법들에 따르면, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 예측된 비디오 블록들의 팔레트-기반 코딩을 수행할 수도 있다. 하나의 예에서, 비디오 인코더 (20) 는 먼저, 현재의 블록에서의 픽셀 값들에 기초하여 현재의 블록에 대한 팔레트를 유도하고, 다음으로, 현재의 블록에서의 픽셀 값들을 인코딩을 위한 팔레트 인덱스들로 맵핑한다. 맵핑은 (즉, 무손실 코딩에 대하여) 일대일 (one to one) 일 수도 있거나, (즉, 손실 코딩에 대하여) 다대일 (multiple to one) 일 수도 있다. 비디오 인코더 (20) 는 또한, 현재의 블록에서의 픽셀 값들을 예측하기 위해 이용될 이전에 코딩된 블록에서의 참조 픽셀 값들을 맵핑한다. 일단 현재의 블록의 픽셀 값들이 팔레트 인덱스들로 맵핑되었으면, 비디오 인코더 (20) 는 규칙적인 인코딩 방법들, 예컨대, HEVC 표준에서의 규칙적인 인트라 코딩을 이용하여 팔레트 인덱스들을 갖는 현재의 블록을 인코딩할 수도 있다.
상기 예에서, 팔레트 인덱스들을 갖는 현재의 블록은 현재의 블록이 픽셀 값들을 갖는 원래의 블록이었던 것처럼 취급된다. 유사하게, 참조 픽셀들의 팔레트 인덱스들은 팔레트 인덱스들을 갖는 현재의 블록에 대해 규칙적인 인트라 예측을 수행하기 위하여 이용된다. 비디오 인코더 (20) 는 예측 에러 또는 잔차 값들을 비디오 디코더 (30) 로 송신한다. 현재의 블록을 인코딩한 후, 비디오 인코더 (20) 는 참조 픽셀들의 인덱스들, 예측 픽셀들, 및 잔차 값들을 현재의 블록의 재구성 및 추후의 블록들의 정상적인 예측을 위한 픽셀 값들로 다시 변환한다. 비디오 디코더 (30) 는 비트스트림으로부터 현재의 블록에 대한 인코딩된 잔차 값들을 획득할 수도 있고, 팔레트 인덱스들을 갖는 현재의 블록을 획득하기 위하여 규칙적인 디코딩 방법을 이용하여 현재의 블록을 디코딩할 수도 있다. 다음으로, 비디오 디코더 (30) 는 팔레트 인덱스들과 연관되는 팔레트에서의 픽셀 값들에 기초하여 현재의 블록의 픽셀 값들을 결정할 수도 있다.
또 다른 예에서, 비디오 인코더 (20) 는 현재의 블록에 대한 팔레트를 생성할 수도 있고, 여기서, 팔레트는 소정의 블록에 대한 예측 잔차 값들을 표시하는 엔트리들을 포함한다. 소정의 블록에 대한 예측 잔차 값들은 임의의 예측 모드, 예컨대, HEVC 표준에서의 규칙적인 인터-예측 또는 인트라-예측을 이용하여 생성될 수도 있다. 소정의 블록에 대한 예측 잔차 값들은 잔차 픽셀 값들 또는 잔차 변환 계수 값들일 수도 있다. 어떤 경우든, 예측 잔차 값들은 양자화될 수도 있다. 이 예에서, 비디오 인코더 (20) 는 현재의 블록에 대한 예측 잔차 값들을, 현재의 블록에 대한 예측 잔차 값들을 나타내기 위해 이용된 현재의 블록에 대한 팔레트에서의 엔트리들을 표시하는 인덱스 값들로 맵핑하고, 인덱스 값들을 이용하여 예측 잔차 값들을 인코딩한다. 비디오 디코더 (30) 는 비트스트림으로부터 인덱스 값들의 블록을 획득할 수도 있고, 인덱스 값들에 의해 식별되는 팔레트에서의 대응하는 예측 잔차 값들에 기초하여 현재의 블록에 대한 예측 잔차 값들을 결정할 수도 있다. 다음으로, 비디오 디코더 (30) 는 예측 잔차 값들 및 이전에 코딩된 참조 픽셀 값들에 기초하여 규칙적인 디코딩 방법들을 이용하여 현재의 블록의 픽셀 값들을 재구성할 수도 있다.
일부의 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 인트라 예측 모드 (즉, 예측은 현재의 픽처에서 이전에 코딩된 픽셀 정보를 이용하기만 함) 를 적용함으로써 비디오 블록 예측으로 팔레트-기반 비디오 코딩을 수행할 수도 있다. 다른 경우들에는, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 가 인터 예측 모드 (즉, 예측은 이전에 코딩된 픽처에서의 픽셀들로부터 됨) 를 적용할 수도 있다. 일부의 경우들에는, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 가 인터 예측 모드 또는 인트라 예측 모드의 어느 하나에 대한 예측 모드 프로세스들의 서브세트만을 이용하여 현재의 블록에 대한 예측 잔차 값들을 결정할 수도 있다.
또 다른 예에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 현재의 블록에 대한 예측을 수행하지 않을 수도 있다. 이 경우, 비디오 인코더 (20) 는 그 대신에, 픽셀 값들을 팔레트 인덱스들로 맵핑하고, 예측 없이 엔트로피 코딩을 이용하여 인덱스들을 인코딩한다. 추가적인 예에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트 인덱스 값들로 맵핑되는 현재의 블록의 픽셀 값들을 이용하여 잔차 차등 펄스 코드 변조 (residual differential pulse code modulation; RDPCM) 를 수행할 수도 있다. 이 예에서, 현재의 블록 외부의 픽셀들로부터의 예측은 이용되지 않고, 수평 또는 수직 예측은 현재의 CU 내에서 인덱스 값들을 라인 복사하기 위하여 이용될 수도 있다.
일부의 예들에서, 비디오 데이터의 팔레트-기반 코딩을 위한 기법들은 인터-예측 또는 인트라-예측 코딩을 위한 기법들과 같은 하나 이상의 다른 코딩 기법들과 함께 이용될 수도 있다. 예를 들어, 이하에서 더욱 상세하게 설명된 바와 같이, 인코더 또는 디코더, 또는 조합된 인코더-디코더 (코덱) 는 인터-예측 및 인트라-예측 코딩뿐만 아니라, 팔레트-기반 코딩을 수행하도록 구성될 수도 있다.
도 2 는 본 개시의 기법들을 구현할 수도 있는 일 예의 비디오 인코더 (20) 를 예시하는 블록도이다. 도 2 는 설명의 목적들을 위하여 제공되고, 본 개시에서 대략 예시 및 설명된 바와 같은 기법들의 제한으로 간주되지 않아야 한다. 설명의 목적들을 위하여, 본 개시는 HEVC 코딩의 맥락에서 비디오 인코더 (20) 를 설명한다. 그러나, 본 개시의 기법들은 다른 코딩 표준들 또는 방법들에 적용가능할 수도 있다.
비디오 인코더 (20) 는 본 개시에서 설명된 다양한 예들에 따라 팔레트-기반 비디오 코딩을 위한 기법들을 수행하도록 구성될 수도 있는 디바이스의 예를 나타낸다. 예를 들어, 비디오 인코더 (20) 는 팔레트-기반 코딩 또는 비-팔레트 기반 코딩의 어느 하나를 이용하여, HEVC 코딩에서의 CU 들 및 PU 들과 같은 비디오 데이터의 다양한 블록들을 선택적으로 코딩하도록 구성될 수도 있다. 비-팔레트 기반 코딩 모드들은 HEVC 초안 10 에 의해 특정된 다양한 코딩 모드들과 같은, 다양한 인터-예측 시간적 코딩 모드들 또는 인트라-예측 공간적 코딩 모드들을 지칭할 수도 있다. 비디오 인코더 (20) 는 하나의 예에서, 픽셀 값들을 표시하는 엔트리들을 가지는 팔레트를 생성하도록 구성될 수도 있다. 또한, 이 예에서, 비디오 인코더 (20) 는 비디오 데이터의 블록의 적어도 일부의 위치들의 픽셀 값들을 나타내기 위하여 팔레트에서 픽셀 값들을 선택할 수도 있다. 이 예에서, 비디오 인코더 (20) 는 비디오 데이터의 블록의 위치들 중의 적어도 일부를, 선택된 픽셀 값들에 각각 대응하는 팔레트에서의 엔트리들과 연관시키는 정보를 시그널링할 수도 있다. 비디오 디코더 (30) 는 비디오 디코딩하기 위하여 시그널링된 정보를 이용할 수도 있다.
도 2 의 예에서, 비디오 인코더 (20) 는 비디오 데이터 메모리 (98), 예측 프로세싱 유닛 (100), 잔차 생성 유닛 (102), 변환 프로세싱 유닛 (104), 양자화 유닛 (106), 역양자화 유닛 (108), 역변환 프로세싱 유닛 (110), 재구성 유닛 (112), 필터 유닛 (114), 디코딩된 픽처 버퍼 (116), 및 엔트로피 인코딩 유닛 (118) 을 포함한다. 예측 프로세싱 유닛 (100) 은 인터-예측 프로세싱 유닛 (120) 및 인트라-예측 프로세싱 유닛 (126) 을 포함한다. 인터-예측 프로세싱 유닛 (120) 은 모션 추정 유닛 및 모션 보상 유닛 (도시되지 않음) 을 포함한다. 비디오 인코더 (20) 는 또한, 본 개시에서 설명된 팔레트-기반 코딩 기법들의 다양한 양태들을 수행하도록 구성된 팔레트-기반 인코딩 유닛 (122) 을 포함한다. 다른 예들에서, 비디오 인코더 (20) 는 더 많거나, 더 적거나, 또는 상이한 기능적 컴포넌트들을 포함할 수도 있다.
비디오 데이터 메모리 (98) 는 비디오 인코더 (20) 의 컴포넌트들에 의해 인코딩되어야 할 비디오 데이터를 저장할 수도 있다. 비디오 데이터 메모리 (98) 에서 저장된 비디오 데이터는 예를 들어, 비디오 소스 (18) 로부터 획득될 수도 있다. 디코딩된 픽처 버퍼 (116) 는 예컨대, 인트라-코딩 또는 인터-코딩 모드들에서 비디오 인코더 (20) 에 의해 비디오 데이터를 인코딩함에 있어서 이용하기 위한 참조 비디오 데이터를 저장하는 참조 픽처 메모리일 수도 있다. 비디오 데이터 메모리 (98) 및 디코딩된 픽처 버퍼 (116) 는 동기식 DRAM (synchronous DRAM; SDRAM), 자기저항 RAM (magnetoresistive RAM; MRAM), 저항 RAM (resistive RAM; RRAM), 또는 다른 타입들의 메모리 디바이스들을 포함하는 동적 랜덤 액세스 메모리 (dynamic random access memory; DRAM) 와 같은 다양한 메모리 디바이스들 중의 임의의 것에 의해 형성될 수도 있다. 비디오 데이터 메모리 (98) 및 디코딩된 픽처 버퍼 (116) 는 동일한 메모리 디바이스 또는 별도의 메모리 디바이스들에 의해 제공될 수도 있다. 다양한 예들에서, 비디오 데이터 메모리 (98) 는 비디오 인코더 (20) 의 다른 컴포넌트들과 함께 온-칩 (on-chip) 일 수도 있거나, 그러한 컴포넌트들과 관련하여 오프-칩 (off-chip) 일 수도 있다.
비디오 인코더 (20) 는 비디오 데이터를 수신할 수도 있다. 비디오 인코더 (20) 는 비디오 데이터의 픽처의 슬라이스에서의 각각의 CTU 를 인코딩할 수도 있다. CTU 들의 각각은 동일한 사이즈의 루마 코딩 트리 블록 (coding tree block; CTB) 들 및 픽처의 대응하는 CTB 들과 연관될 수도 있다. CTU 를 인코딩하는 것의 일부로서, 예측 프로세싱 유닛 (100) 은 CTU 의 CTB 들을 점진적으로 더 작은 블록들로 분할하기 위하여 쿼드-트리 파티셔닝 (quad-tree partitioning) 을 수행할 수도 있다. 더 작은 블록은 CU 들의 코딩 블록들일 수도 있다. 예를 들어, 예측 프로세싱 유닛 (100) 은 CTU 와 연관된 CTB 를 4 개의 동일한 사이즈의 서브-블록들로 파티셔닝할 수도 있고, 서브-블록들 중의 하나 이상을 4 개의 동일한 사이즈의 서브-서브-블록 (sub-sub-block) 들로 파티셔닝할 수도 있는 등등과 같다.
비디오 인코더 (20) 는 CU 들의 인코딩된 표현들 (즉, 코딩된 CU 들) 을 생성하기 위하여 CTU 의 CU 들을 인코딩할 수도 있다. CU 를 인코딩하는 것의 일부로서, 예측 프로세싱 유닛 (100) 은 CU 의 하나 이상의 PU 들 중에서 CU 와 연관된 코딩 블록들을 파티셔닝할 수도 있다. 이에 따라, 각각의 PU 는 루마 예측 블록 및 대응하는 크로마 예측 블록들과 연관될 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 는 다양한 사이즈들을 가지는 PU 들을 지원할 수도 있다. 위에서 표시된 바와 같이, CU 의 사이즈는 CU 의 루마 코딩 블록의 사이즈를 지칭할 수도 있고, PU 의 사이즈는 PU 의 루마 예측 블록의 사이즈를 지칭할 수도 있다. 특정 CU 의 사이즈가 2Nx2N 인 것으로 가정하면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 인트라 예측을 위한 2Nx2N 또는 NxN 의 PU 사이즈들과, 인터 예측을 위한 2Nx2N, 2NxN, Nx2N, NxN, 또는 유사한 것의 대칭적인 PU 사이즈들을 지원할 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 는 또한, 인터 예측을 위한 2NxnU, 2NxnD, nLx2N, 및 nRx2N 의 PU 사이즈들에 대한 비대칭적인 파티셔닝을 지원할 수도 있다.
인터-예측 프로세싱 유닛 (120) 은 CU 의 각각의 PU 에 대해 인터 예측을 수행함으로써 PU 에 대한 예측 데이터를 생성할 수도 있다. PU 에 대한 예측 데이터는 PU 의 하나 이상의 예측 샘플 블록들 및 PU 에 대한 모션 정보를 포함할 수도 있다. 인터-예측 유닛 (121) 은 PU 가 I 슬라이스, P 슬라이스, 또는 B 슬라이스에 있는지 여부에 따라 CU 의 PU 에 대한 상이한 동작들을 수행할 수도 있다. I 슬라이스에서는, 모든 PU 들이 인트라 예측된다. 이 때문에, PU 가 I 슬라이스에 있을 경우, 인터-예측 유닛 (121) 은 PU 에 대한 인터 예측을 수행하지 않는다. 이에 따라, I-모드에서 인코딩된 블록들에 대하여, 예측 블록은 동일한 프레임 내에서의 이전에 인코딩된 이웃하는 블록들로부터의 공간적 예측을 이용하여 형성된다.
PU 가 P 슬라이스에 있을 경우, 인터-예측 프로세싱 유닛 (120) 의 모션 추정 유닛은 PU 에 대한 참조 영역을 위하여 참조 픽처들의 리스트 (예컨대, "RefPicList0") 에서 참조 픽처들을 검색할 수도 있다. PU 에 대한 참조 영역은, 참조 픽처 내에서, PU 의 샘플 블록들에 가장 근접하게 대응하는 샘플 블록들을 포함하는 영역일 수도 있다. 모션 추정 유닛은 PU 에 대한 참조 영역을 포함하는 참조 픽처의 RefPicList0 에서의 위치를 표시하는 참조 인덱스를 생성할 수도 있다. 게다가, 모션 추정 유닛은 PU 의 코딩 블록과, 참조 영역과 연관된 참조 로케이션과의 사이의 공간적 변위를 표시하는 MV 를 생성할 수도 있다. 예를 들어, MV 는 현재의 디코딩된 픽처에서의 좌표들로부터 참조 픽처에서의 좌표들까지의 오프셋을 제공하는 2 차원 벡터일 수도 있다. 모션 추정 유닛은 PU 의 모션 정보로서 참조 인덱스 및 MV 를 출력할 수도 있다. 인터-예측 프로세싱 유닛 (120) 의 모션 보상 유닛은 PU 의 모션 벡터에 의해 표시된 참조 로케이션에서의 실제적인 또는 보간된 샘플들에 기초하여 PU 의 예측 샘플 블록들을 생성할 수도 있다.
PU 가 B 슬라이스에 있을 경우, 모션 추정 유닛은 PU 에 대한 단방향-예측 또는 양방향-예측을 수행할 수도 있다. PU 에 대해 단방향-예측을 수행하기 위하여, 모션 추정 유닛은 PU 에 대한 참조 영역을 위하여 RefPicList0 또는 제 2 참조 픽처 리스트 ("RefPicList1") 의 참조 픽처들을 검색할 수도 있다. 모션 추정 유닛은 PU 의 모션 정보로서, 참조 영역을 포함하는 참조 픽처의 RefPicList0 또는 RefPicList1 에서의 위치를 표시하는 참조 인덱스, PU 의 샘플 블록과, 참조 영역과 연관된 참조 로케이션과의 사이의 공간적 변위를 표시하는 MV, 및 참조 픽처가 RefPicList0 또는 RefPicList1 에 있는지 여부를 표시하는 하나 이상의 예측 방향 표시자들을 출력할 수도 있다. 인터-예측 프로세싱 유닛 (120) 의 모션 보상 유닛은 PU 의 모션 벡터에 의해 표시된 참조 영역에서의 실제적인 또는 보간된 샘플들에 적어도 부분적으로 기초하여 PU 의 예측 샘플 블록들을 생성할 수도 있다.
PU 에 대한 양방향 인터 예측을 수행하기 위하여, 모션 추정 유닛은 PU 에 대한 참조 영역을 위하여 RefPicList0 에서의 참조 픽처들을 검색할 수도 있고, 또한, PU 에 대한 또 다른 참조 영역을 위하여 RefPicList1 에서의 참조 픽처들을 검색할 수도 있다. 모션 추정 유닛은 참조 영역들을 포함하는 참조 픽처들의 RefPicList0 및 RefPicList1 에서의 위치들을 표시하는 참조 픽처 인덱스들을 생성할 수도 있다. 게다가, 모션 추정 유닛은 참조 영역들과 연관된 참조 로케이션과, PU 의 샘플 블록과의 사이의 공간적 변위들을 표시하는 MV 들을 생성할 수도 있다. PU 의 모션 정보는 PU 의 MV들 및 참조 인덱스들을 포함할 수도 있다. 모션 보상 유닛은 PU 의 모션 벡터에 의해 표시된 참조 영역에서의 실제적인 또는 보간된 샘플들에 적어도 부분적으로 기초하여 PU 의 예측 샘플 블록들을 생성할 수도 있다.
본 개시의 다양한 예들에 따르면, 비디오 인코더 (20) 는 팔레트-기반 코딩을 수행하도록 구성될 수도 있다. HEVC 프레임워크에 대하여, 일 예로서, 팔레트-기반 코딩 기법들은 CU 모드로서 이용되도록 구성될 수도 있다. 다른 예들에서, 팔레트-기반 코딩 기법들은 HEVC 의 프레임워크에서 PU 모드로서 이용되도록 구성될 수도 있다. 따라서, CU 모드의 맥락에서 본원에서 (본 개시의 전반에 걸쳐) 설명되는 개시된 프로세스들 전부는 추가적으로 또는 대안적으로, PU 모드에 적용할 수도 있다. 그러나, 이 HEVC-기반 예들은 본원에서 설명된 팔레트-기반 코딩 기법들의 한정 또는 제한으로 간주되지 않아야 하는데, 이것은 이러한 기법들이 독립적으로, 또는 다른 기존의 또는 아직 개발되어야 할 시스템들/표준들의 일부로서 작동하도록 적용될 수도 있기 때문이다. 이 경우들에는, 팔레트 코딩을 위한 유닛이 정사각형 블록들, 직사각형 블록들 또는 심지어 직사각형이 아닌 형상의 영역들일 수 있다.
팔레트-기반 인코딩 유닛 (122) 은 예를 들어, 팔레트-기반 인코딩 모드가 예컨대, CU 또는 PU 에 대하여 선택될 때에 팔레트-기반 디코딩을 수행할 수도 있다. 예를 들어, 팔레트-기반 인코딩 유닛 (122) 은, 픽셀 값들을 표시하는 엔트리들을 가지는 팔레트를 생성하고, 비디오 데이터의 블록의 적어도 일부의 위치들의 픽셀 값들을 나타내기 위하여 팔레트에서 픽셀 값들을 선택하고, 비디오 데이터의 블록의 위치들 중의 적어도 일부를, 선택된 픽셀 값들에 각각 대응하는 팔레트에서의 엔트리들과 연관시키는 정보를 시그널링하도록 구성될 수도 있다. 다양한 기능들이 팔레트-기반 인코딩 유닛 (122) 에 의해 수행되고 있는 것으로 설명되지만, 이러한 기능들의 일부 또는 전부는 다른 프로세싱 유닛들, 또는 상이한 프로세싱 유닛들의 조합에 의해 수행될 수도 있다.
팔레트-기반 인코딩 유닛 (122) 은 본원에서 설명된 다양한 신택스 엘리먼트들 중의 임의의 것을 생성하도록 구성될 수도 있다. 따라서, 비디오 인코더 (20) 는 본 개시에서 설명된 것과 같은 팔레트-기반 코드 모드들을 이용하여 비디오 데이터의 블록들을 인코딩하도록 구성될 수도 있다. 비디오 인코더 (20) 는 선택적으로, 팔레트 코딩 모드를 이용하여 비디오 데이터의 블록을 인코딩할 수도 있거나, 또는 예컨대, HEVC 인터-예측 또는 인트라-예측 코딩 모드와 같은 상이한 모드를 이용하여 비디오 데이터의 블록을 인코딩할 수도 있다. 비디오 데이터의 블록은 예를 들어, HEVC 코딩 프로세스에 따라 생성된 CU 또는 PU 일 수도 있다. 비디오 인코더 (20) 는 인터-예측 시간적 예측 또는 인트라-예측 공간적 코딩 모드들로 일부의 블록들을 인코딩할 수도 있고, 팔레트-기반 코딩 모드로 다른 블록들을 디코딩할 수도 있다.
인트라-예측 프로세싱 유닛 (126) 은 PU 에 대해 인트라 예측을 수행함으로써 PU 에 대한 예측 데이터를 생성할 수도 있다. PU 에 대한 예측 데이터는 PU 에 대한 예측 샘플 블록들 및 다양한 신택스 엘리먼트들을 포함할 수도 있다. 인트라-예측 프로세싱 유닛 (126) 은 I 슬라이스들, P 슬라이스들, 및 B 슬라이스들에서의 PU 들에 대해 인트라 예측을 수행할 수도 있다.
PU 에 대해 인트라 예측을 수행하기 위하여, 인트라-예측 프로세싱 유닛 (126) 은 PU 에 대한 예측 데이터의 다수의 세트들을 생성하기 위하여 다수의 인트라 예측 모드들을 이용할 수도 있다. PU 에 대한 예측 데이터의 세트를 생성하기 위하여 일부의 인트라 예측 모드들을 이용할 때, 인트라-예측 프로세싱 유닛 (126) 은 인트라 예측 모드들과 연관된 방향들로 PU 의 예측 블록들에 걸쳐 이웃하는 PU 들의 샘플 블록들로부터 샘플들의 값들을 확장할 수도 있다. PU 들, CU 들, 및 CTU 들에 대한 좌측에서 우측, 상부에서 하부의 인코딩 순서를 가정하면, 이웃하는 PU 들은 PU 의 상부, 상부 및 우측, 상부 및 좌측, 또는 좌측에 있을 수도 있다. 인트라-예측 프로세싱 유닛 (126) 은 다양한 개수들의 인트라 예측 모드들, 예컨대, 33 개의 방향성 인트라 예측 모드 (directional intra prediction mode) 들을 이용할 수도 있다. 일부의 예들에서, 인트라 예측 모드들의 수는 PU 와 연관된 영역의 사이즈에 종속될 수도 있다.
예측 프로세싱 유닛 (100) 은 PU 들에 대한 인터-예측 프로세싱 유닛 (120) 에 의해 생성된 예측 데이터 또는 PU 들에 대한 인트라-예측 프로세싱 유닛 (126) 에 의해 생성된 예측 데이터 중으로부터 CU 의 PU 들에 대한 예측 데이터를 선택할 수도 있다. 일부의 예들에서, 예측 프로세싱 유닛 (100) 은 예측 데이터의 세트들의 레이트/왜곡 메트릭 (distortion metric) 들에 기초하여 CU 의 PU 들에 대한 예측 데이터를 선택한다. 선택된 예측 데이터의 예측 샘플 블록들은 선택된 예측 샘플 블록들로서 본원에서 지칭될 수도 있다.
잔차 생성 유닛 (102) 은 CU 의 코딩 블록들 (예컨대, 루마, Cb 및 Cr 코딩 블록들) 과, CU 의 PU 들의 선택된 예측 샘플 블록들 (예컨대, 예측 루마, Cb 및 Cr 블록들) 에 기초하여, CU 의 잔차 블록들 (예컨대, 루마, Cb 및 Cr 잔차 블록들) 을 생성할 수도 있다. 예를 들어, 잔차 생성 유닛 (102) 은, 잔차 블록들에서의 각각의 샘플이 CU 의 코딩 블록에서의 샘플과, CU 의 PU 의 대응하는 선택된 예측 샘플 블록에서의 대응하는 샘플과의 사이의 차이와 동일한 값을 가지도록, CU 의 잔차 블록들을 생성할 수도 있다.
변환 프로세싱 유닛 (104) 은 CU 와 연관된 잔차 블록들을 CU 의 TU 들과 연관된 변환 블록들로 파티셔닝하기 위하여 쿼드-트리 파티셔닝을 수행할 수도 있다. 이에 따라, 일부의 예들에서, TU 는 루마 변환 블록 및 2 개의 크로마 변환 블록들과 연관될 수도 있다. CU 의 TU들의 루마 및 크로마 변환 블록들의 사이즈들 및 위치들은 CU 의 PU들의 예측 블록들의 사이즈들 및 위치들에 기초할 수도 있거나 기초하지 않을 수도 있다. "잔차 쿼드-트리" (residual quad-tree; RQT) 로서 알려진 쿼드-트리 구조는 영역들의 각각과 연관된 노드들을 포함할 수도 있다. CU 의 TU 들은 RQT 의 리프 노드 (leaf node) 들에 대응할 수도 있다.
변환 프로세싱 유닛 (104) 은 하나 이상의 변환들을 TU 의 변환 블록들에 적용함으로써 CU 의 각각의 TU 에 대한 변환 계수 블록들을 생성할 수도 있다. 변환 프로세싱 유닛 (104) 은 다양한 변환들을 TU 와 연관된 변환 블록에 적용할 수도 있다. 예를 들어, 변환 프로세싱 유닛 (104) 은 이산 코사인 변환 (discrete cosine transform; DCT), 방향성 변환, 또는 개념적으로 유사한 변환을 변환 블록에 적용할 수도 있다. 일부의 예들에서, 변환 프로세싱 유닛 (104) 은 변환들을 변환 블록에 적용하지 않는다. 이러한 예들에서는, 변환 블록이 변환 계수 블록으로서 취급될 수도 있다.
양자화 유닛 (106) 은 계수 블록에서의 변환 계수들을 양자화할 수도 있다. 양자화 프로세스는 변환 계수들의 일부 또는 전부와 연관된 비트 심도 (bit depth) 를 감소시킬 수도 있다. 예를 들어, n-비트 변환 계수는 양자화 동안에 m-비트 변환 계수로 라운딩 다운 (round down) 될 수도 있고, 여기서, nm 보다 더 크다. 양자화 유닛 (106) 은 CU 와 연관된 양자화 파라미터 (quantization parameter; QP) 값에 기초하여 CU 의 TU 와 연관된 계수 블록을 양자화할 수도 있다. 비디오 인코더 (20) 는 CU 와 연관된 QP 값을 조절함으로써 CU 와 연관된 계수 블록들에 적용된 양자화도 (degree of quantization) 를 조절할 수도 있다. 양자화는 정보의 손실을 도입할 수도 있고, 이에 따라, 양자화된 변환 계수들은 원래의 것들보다 더 낮은 정밀도를 가질 수도 있다.
역양자화 유닛 (108) 및 역변환 프로세싱 유닛 (110) 은 계수 블록으로부터 잔차 블록을 재구성하기 위하여, 역양자화 및 역변환들을 계수 블록에 각각 적용할 수도 있다. 재구성 유닛 (112) 은 TU 와 연관된 재구성된 변환 블록을 생성하기 위하여, 재구성된 잔차 블록을, 예측 프로세싱 유닛 (100) 에 의해 생성된 하나 이상의 예측 샘플 블록들로부터의 대응하는 샘플들에 추가할 수도 있다. CU 의 각각의 TU 에 대한 변환 블록들을 이러한 방식으로 재구성함으로써, 비디오 인코더 (20) 는 CU 의 코딩 블록들을 재구성할 수도 있다.
필터 유닛 (114) 은 CU 와 연관된 코딩 블록들에서의 블록킹 아티팩트 (blocking artifact) 들을 감소시키기 위하여 하나 이상의 디블록킹 동작 (deblocking operation) 들을 수행할 수도 있다. 필터 유닛 (114) 이 재구성된 코딩 블록들에 대해 하나 이상의 디블록킹 동작들을 수행한 후, 디코딩된 픽처 버퍼 (116) 는 재구성된 코딩 블록들을 저장할 수도 있다. 인터-예측 프로세싱 유닛 (120) 은 다른 픽처들의 PU 들에 대해 인터 예측을 수행하기 위하여, 재구성된 코딩 블록들을 포함하는 참조 픽처를 이용할 수도 있다. 게다가, 인트라-예측 프로세싱 유닛 (126) 은 CU 와 동일한 픽처에서의 다른 PU 들에 대해 인트라 예측을 수행하기 위하여, 디코딩된 픽처 버퍼 (116) 에서의 재구성된 코딩 블록들을 이용할 수도 있다.
엔트로피 인코딩 유닛 (118) 은 비디오 인코더 (20) 의 다른 기능적 컴포넌트들로부터 데이터를 수신할 수도 있다. 예를 들어, 엔트로피 인코딩 유닛 (118) 은 양자화 유닛 (106) 으로부터 계수 블록들을 수신할 수도 있고, 예측 프로세싱 유닛 (100) 으로부터 신택스 엘리먼트들을 수신할 수도 있다. 엔트로피 인코딩 유닛 (118) 은 엔트로피-인코딩된 데이터를 생성하기 위하여, 데이터에 대해 하나 이상의 엔트로피 인코딩 동작들을 수행할 수도 있다. 예를 들어, 엔트로피 인코딩 유닛 (118) 은 데이터에 대하여, CABAC 동작, 컨텍스트-적응 가변 길이 코딩 (context-adaptive variable length coding; CAVLC) 동작, 가변-대-가변 (variable-to-variable; V2V) 길이 코딩 동작, 신택스-기반 컨텍스트-적응 2진 산술 코딩 (syntax-based context-adaptive binary arithmetic coding; SBAC) 동작, 확률 간격 파티셔닝 엔트로피 (Probability Interval Partitioning Entropy; PIPE) 코딩 동작, 지수-골롬 (Exponential-Golomb) 인코딩 동작, 또는 또 다른 타입의 엔트로피 인코딩 동작을 수행할 수도 있다. 비디오 인코더 (20) 는 엔트로피 인코딩 유닛 (118) 에 의해 생성된 엔트로피-인코딩된 데이터를 포함하는 비트스트림을 출력할 수도 있다. 예를 들어, 비트스트림은 CU 에 대한 RQT 를 나타내는 데이터를 포함할 수도 있다.
일부의 예들에서, 잔차 코딩은 팔레트 코딩과 함께 수행되지 않는다. 따라서, 비디오 인코더 (20) 는 팔레트 코딩 모드를 이용하여 코딩될 때에 변환 또는 양자화를 수행하지 않을 수도 있다. 게다가, 비디오 인코더 (20) 는 잔차 데이터와는 별도로 팔레트 코딩 모드를 이용하여 생성된 데이터를 엔트로피 인코딩할 수도 있다.
본 개시의 기법들 중의 하나 이상에 따르면, 비디오 인코더 (20), 그리고 구체적으로 팔레트-기반 인코딩 유닛 (122) 은 예측된 비디오 블록들의 팔레트-기반 비디오 코딩을 수행할 수도 있다. 위에서 설명된 바와 같이, 비디오 인코더 (20) 에 의해 생성된 팔레트는 명시적으로 인코딩될 수도 있으며 비디오 디코더 (30) 로 전송될 수도 있거나, 이전의 팔레트 엔트리들로부터 예측될 수도 있거나, 이전의 픽셀 값들로부터 예측될 수도 있거나, 그 조합일 수도 있다.
하나의 예에서, 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 은 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사되는 예측 팔레트에서의 하나 이상의 팔레트 엔트리들을 결정하고, 예측자 팔레트 (predictor palette) 에 있는 것이 아니라 현재의 팔레트 내에 포함되는 새로운 팔레트 엔트리들의 수를 결정한다. 이 정보에 기초하여, 팔레트-기반 비디오 인코더 (20) 는 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 것으로 현재의 팔레트의 사이즈를 계산하고, 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하는 결정된 사이즈의 현재의 팔레트를 생성한다. 비디오 인코더 (20) 는 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들에 관한 결정된 정보를 비디오 디코더 (30) 로 송신할 수도 있다. 게다가, 비디오 인코더 (20) 는 새로운 팔레트 엔트리들에 대한 픽셀 값들을 명시적으로 인코딩할 수도 있고 이 픽셀 값들을 비디오 디코더 (30) 로 송신할 수도 있다. 다음으로, 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 은, 현재의 블록의 픽셀 값들을 나타내기 위해 이용된 현재의 팔레트에서의 팔레트 엔트리들을 식별하는 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정함으로써 현재의 블록을 인코딩할 수도 있다.
본 개시에서 설명된 기법들은 또한, 팔레트-기반 코딩 모드들을 시그널링하는 것, 팔레트들을 송신하는 것, 팔레트들을 예측하는 것, 팔레트들을 유도하는 것, 또는 팔레트-기반 코딩 맵들 및 다른 신택스 엘리먼트들을 송신하는 것 중의 하나 이상의 다양한 조합들에 대한 기법들을 포함할 수도 있다.
도 3 은 본 개시의 기법들을 구현하도록 구성되는 일 예의 비디오 디코더 (30) 를 예시하는 블록도이다. 도 3 은 설명의 목적들을 위하여 제공되고, 본 개시에서 대략 예시 및 설명된 바와 같은 기법들에 대해 제한하지 않는다. 설명의 목적들을 위하여, 본 개시는 HEVC 코딩의 문맥에서 비디오 디코더 (30) 를 설명한다. 그러나, 본 개시의 기법들은 다른 코딩 표준들 또는 방법들에 적용가능할 수도 있다.
비디오 디코더 (30) 는 본 개시에서 설명된 다양한 예들에 따라 팔레트-기반 비디오 코딩을 위한 기법들을 수행하도록 구성될 수도 있는 디바이스의 예를 나타낸다. 예를 들어, 비디오 디코더 (30) 는 팔레트-기반 코딩 또는 비-팔레트 기반 코딩의 어느 하나를 이용하여, HEVC 코딩에서의 CU 들 및 PU 들과 같은 비디오 데이터의 다양한 블록들을 선택적으로 디코딩하도록 구성될 수도 있다. 비-팔레트 기반 코딩 모드들은 HEVC 초안 10 에 의해 특정된 다양한 코딩 모드들과 같은, 다양한 인터-예측 시간적 코딩 모드들 또는 인트라-예측 공간적 코딩 모드들을 지칭할 수도 있다. 하나의 예에서, 비디오 디코더 (30) 는 픽셀 값들을 표시하는 엔트리들을 가지는 팔레트를 생성하도록 구성될 수도 있다. 또한, 이 예에서, 비디오 디코더 (30) 는 비디오 데이터의 블록의 적어도 일부의 위치들을 팔레트에서의 엔트리들과 연관시키는 정보를 수신할 수도 있다. 이 예에서, 비디오 디코더 (30) 는 정보에 기초하여 팔레트에서 픽셀 값들을 선택할 수도 있고, 선택된 픽셀 값들에 기초하여 블록의 픽셀 값들을 재구성할 수도 있다.
도 3 의 예에서, 비디오 디코더 (30) 는 비디오 데이터 메모리 (148), 엔트로피 디코딩 유닛 (150), 예측 프로세싱 유닛 (152), 역양자화 유닛 (154), 역변환 프로세싱 유닛 (156), 재구성 유닛 (158), 필터 유닛 (160), 및 디코딩된 픽처 버퍼 (162) 를 포함한다. 예측 프로세싱 유닛 (152) 은 모션 보상 유닛 (164) 및 인트라-예측 프로세싱 유닛 (166) 을 포함한다. 비디오 디코더 (30) 는 또한, 본 개시에서 설명된 팔레트-기반 코딩 기법들의 다양한 양태들을 수행하도록 구성된 팔레트-기반 디코딩 유닛 (165) 을 포함한다. 다른 예들에서, 비디오 디코더 (30) 는 더 많거나, 더 적거나, 또는 상이한 기능적 컴포넌트들을 포함할 수도 있다.
비디오 데이터 메모리 (148) 는 비디오 디코더 (30) 의 컴포넌트들에 의해 디코딩되어야 할, 인코딩된 비디오 비트스트림과 같은 비디오 데이터를 저장할 수도 있다. 비디오 데이터 메모리 (148) 내에 저장된 비디오 데이터는 예를 들어, 컴퓨터-판독가능 매체 (16) 로부터, 예컨대, 카메라와 같은 로컬 비디오 소스로부터, 비디오 데이터의 유선 또는 무선 네트워크 통신을 통해, 또는 물리적 데이터 저장 매체들을 액세스함으로써 획득될 수도 있다. 비디오 데이터 메모리 (148) 는 인코딩된 비디오 비트스트림으로부터의 인코딩된 비디오 데이터를 저장하는 코딩된 픽처 버퍼 (coded picture buffer; CPB) 를 형성할 수도 있다. 디코딩된 픽처 버퍼 (162) 는 예컨대, 인트라-코딩 또는 인터-코딩 모드들에서 비디오 디코더 (30) 에 의해 비디오 데이터를 디코딩함에 있어서 이용하기 위한 참조 비디오 데이터를 저장하는 참조 픽처 메모리일 수도 있다. 비디오 데이터 메모리 (148) 및 디코딩된 픽처 버퍼 (162) 는 동기식 DRAM (SDRAM), 자기저항 RAM (MRAM), 저항 RAM (RRAM), 또는 다른 타입들의 메모리 디바이스들을 포함하는 동적 랜덤 액세스 메모리 (DRAM) 와 같은 다양한 메모리 디바이스들 중의 임의의 것에 의해 형성될 수도 있다. 비디오 데이터 메모리 (148) 및 디코딩된 픽처 버퍼 (162) 는 동일한 메모리 디바이스 또는 별도의 메모리 디바이스들에 의해 제공될 수도 있다. 다양한 예들에서, 비디오 데이터 메모리 (148) 는 비디오 디코더 (30) 의 다른 컴포넌트들과 함께 온-칩일 수도 있거나, 그러한 컴포넌트들과 관련하여 오프-칩일 수도 있다.
비디오 데이터 메모리 (148), 즉, CPB 는 비트스트림의 인코딩된 비디오 데이터 (예컨대, NAL 유닛들) 를 수신 및 저장할 수도 있다. 엔트로피 디코딩 유닛 (150) 은 비디오 데이터 메모리 (148) 로부터 인코딩된 비디오 데이터 (예컨대, NAL 유닛들) 를 수신할 수도 있고, 신택스 엘리먼트들을 디코딩하기 위하여 NAL 유닛들을 파싱할 수도 있다. 엔트로피 디코딩 유닛 (150) 은 NAL 유닛들에서의 엔트로피-인코딩된 신택스 엘리먼트들을 엔트로피 디코딩할 수도 있다. 예측 프로세싱 유닛 (152), 역양자화 유닛 (154), 역변환 프로세싱 유닛 (156), 재구성 유닛 (158), 및 필터 유닛 (160) 은 비트스트림으로부터 획득된 (예컨대, 추출된) 신택스 엘리먼트들에 기초하여 디코딩된 비디오 데이터를 생성할 수도 있다.
비트스트림의 NAL 유닛들은 코딩된 슬라이스 NAL 유닛들을 포함할 수도 있다. 비트스트림을 디코딩하는 것의 일부로서, 엔트로피 디코딩 유닛 (150) 은 코딩된 슬라이스 NAL 유닛들로부터 신택스 엘리먼트들을 추출할 수도 있고 이를 엔트로피 디코딩할 수도 있다. 코딩된 슬라이스들의 각각은 슬라이스 헤더 및 슬라이스 데이터를 포함할 수도 있다. 슬라이스 헤더는 슬라이스에 속하는 신택스 엘리먼트들을 포함할 수도 있다. 슬라이스 헤더에서의 신택스 엘리먼트들은 슬라이스를 포함하는 픽처와 연관된 PPS 를 식별하는 신택스 엘리먼트를 포함할 수도 있다.
비트스트림으로부터의 신택스 엘리먼트들을 디코딩하는 것에 추가하여, 비디오 디코더 (30) 는 비-파티셔닝된 CU 에 대해 재구성 동작을 수행할 수도 있다. 비-파티셔닝된 CU 에 대해 재구성 동작을 수행하기 위하여, 비디오 디코더 (30) 는 CU 의 각각의 TU 에 대해 재구성 동작을 수행할 수도 있다. CU 의 각각의 TU 에 대한 재구성 동작을 수행함으로써, 비디오 디코더 (30) 는 CU 의 잔차 블록들을 재구성할 수도 있다.
CU 의 TU 에 대해 재구성 동작을 수행하는 것의 일부로서, 역양자화 유닛 (154) 은 TU 와 연관된 계수 블록들을 역양자화, 즉, 비-양자화 (de-quantize) 할 수도 있다. 역양자화 유닛 (154) 은 양자화도와, 마찬가지로, 역양자화 유닛 (154) 이 적용하기 위한 역양자화도를 결정하기 위하여 TU 의 CU 와 연관된 QP 값을 이용할 수도 있다. 즉, 압축 비율, 즉, 원래의 시퀀스 및 압축된 것을 나타내기 위해 이용된 비트들의 수의 비율은, 변환 계수들을 양자화할 때에 이용된 QP 의 값을 조절함으로써 제어될 수도 있다. 압축 비율은 또한, 채용된 엔트로피 코딩의 방법에 종속될 수도 있다.
역양자화 유닛 (154) 이 계수 블록을 역양자화한 후, 역변환 프로세싱 유닛 (156) 은 TU 와 연관된 잔차 블록을 생성하기 위하여 하나 이상의 역변환들을 계수 블록에 적용할 수도 있다. 예를 들어, 역변환 프로세싱 유닛 (156) 은 역 DCT, 역정수 변환, 역 카루넨-루베 변환 (Karhunen-Loeve transform; KLT), 역회전 변환, 역 방향성 변환, 또는 또 다른 역변환을 계수 블록에 적용할 수도 있다.
PU 가 인트라 예측을 이용하여 인코딩될 경우, 인트라-예측 프로세싱 유닛 (166) 은 PU 에 대한 예측 블록들을 생성하기 위하여 인트라 예측을 수행할 수도 있다. 인트라-예측 프로세싱 유닛 (166) 은 공간적으로 이웃하는 PU 들의 예측 블록들에 기초하여 PU 에 대한 예측 루마, Cb 및 Cr 블록들을 생성하기 위하여 인트라 예측 모드를 이용할 수도 있다. 인트라-예측 프로세싱 유닛 (166) 은 비트스트림으로부터 디코딩된 하나 이상의 신택스 엘리먼트들에 기초하여 PU 에 대한 인트라 예측 모드를 결정할 수도 있다.
예측 프로세싱 유닛 (152) 은 비트스트림으로부터 추출된 신택스 엘리먼트들에 기초하여 제 1 참조 픽처 리스트 (RefPicList0) 및 제 2 참조 픽처 리스트 (RefPicList1) 를 구성할 수도 있다. 또한, PU 가 인터 예측을 이용하여 인코딩될 경우, 엔트로피 디코딩 유닛 (150) 은 PU 에 대한 모션 정보를 추출할 수도 있다. 모션 보상 유닛 (164) 은 PU 의 모션 정보에 기초하여, PU 에 대한 하나 이상의 참조 영역들을 결정할 수도 있다. 모션 보상 유닛 (164) 은 PU 에 대한 하나 이상의 참조 블록들에서의 샘플들 블록들에 기초하여, PU 에 대한 예측 블록들 (예컨대, 예측 루마, Cb 및 Cr 블록들) 을 생성할 수도 있다.
재구성 유닛 (158) 은 CU 의 코딩 블록들 (예컨대, 루마, Cb 및 Cr 코딩 블록들) 을 재구성하기 위하여, CU 의 TU 들과 연관된 변환 블록들 (예컨대, 루마, Cb 및 Cr 변환 블록들) 및 CU 의 PU 들의 예측 블록들 (예컨대, 루마, Cb 및 Cr 블록들), 즉, 적용 가능하다면, 인트라-예측 데이터 또는 인터-예측 데이터의 어느 하나를 이용할 수도 있다. 예를 들어, 재구성 유닛 (158) 은 CU 의 코딩 블록들 (예컨대, 루마, Cb 및 Cr 코딩 블록들) 을 재구성하기 위하여, 변환 블록들 (예컨대, 루마, Cb 및 Cr 변환 블록들) 의 샘플들을 예측 블록들 (예컨대, 예측 루마, Cb 및 Cr 블록들) 의 대응하는 샘플들에 추가할 수도 있다.
필터 유닛 (160) 은 CU 의 코딩 블록들 (예컨대, 루마, Cb 및 Cr 코딩 블록들) 과 연관된 블록킹 아티팩트들을 감소시키기 위하여 디블록킹 동작을 수행할 수도 있다. 비디오 디코더 (30) 는 CU 의 코딩 블록들 (예컨대, 루마, Cb 및 Cr 코딩 블록들) 을 디코딩된 픽처 버퍼 (162) 내에 저장할 수도 있다. 디코딩된 픽처 버퍼 (162) 는 추후의 모션 보상, 인트라 예측, 및 도 1 의 디스플레이 디바이스 (32) 와 같은 디스플레이 디바이스 상에서의 제시를 위하여 참조 픽처들을 제공할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 디코딩된 픽처 버퍼 (162) 에서의 블록들 (예컨대, 루마, Cb 및 Cr 블록들) 에 기초하여, 다른 CU 들의 PU 들에 대해 인트라 예측 또는 인터 예측 동작들을 수행할 수도 있다. 이러한 방식으로, 비디오 디코더 (30) 는 비트스트림으로부터, 중요한 계수 블록의 변환 계수 레벨들을 추출할 수도 있고, 변환 계수 레벨들을 역양자화할 수도 있고, 변환 블록을 생성하기 위하여 변환을 변환 계수 레벨들에 적용할 수도 있고, 변환 블록에 적어도 부분적으로 기초하여, 코딩 블록을 생성할 수도 있고, 디스플레이를 위하여 코딩 블록을 출력할 수도 있다.
본 개시의 다양한 예들에 따르면, 비디오 디코더 (30) 는 팔레트-기반 코딩을 수행하도록 구성될 수도 있다. 팔레트-기반 디코딩 유닛 (165) 은 예를 들어, 팔레트-기반 디코딩 모드가 예컨대, CU 또는 PU 에 대하여 선택될 때에 팔레트-기반 디코딩을 수행할 수도 있다. 예를 들어, 팔레트-기반 디코딩 유닛 (165) 은 픽셀 값들을 표시하는 엔트리들을 가지는 팔레트를 생성하도록 구성될 수도 있다. 또한, 이 예에서, 팔레트-기반 디코딩 유닛 (165) 은 비디오 데이터의 블록의 적어도 일부의 위치들을 팔레트에서의 엔트리들과 연관시키는 정보를 수신할 수도 있다. 이 예에서, 팔레트-기반 디코딩 유닛 (165) 은 정보에 기초하여 팔레트에서의 픽셀 값들을 선택할 수도 있다. 추가적으로, 이 예에서, 팔레트-기반 디코딩 유닛 (165) 은 선택된 픽셀 값들에 기초하여 블록의 픽셀 값들을 재구성할 수도 있다. 다양한 기능들이 팔레트-기반 디코딩 유닛 (165) 에 의해 수행되는 것으로서 설명되지만, 이러한 기능들의 일부 또는 전부는 다른 프로세싱 유닛들, 또는 상이한 프로세싱 유닛들의 조합에 의해 수행될 수도 있다.
팔레트-기반 디코딩 유닛 (165) 은 팔레트 코딩 모드 정보를 수신할 수도 있고, 팔레트 코딩 모드 정보가 팔레트 코딩 모드가 블록에 적용되는 것을 표시할 때에 상기 동작들을 수행할 수도 있다. 팔레트 코딩 모드 정보가 팔레트 코딩 모드가 블록에 적용되지 않는 것을 표시할 때, 또는 다른 모드 정보가 상이한 모드의 이용을 표시할 때, 팔레트-기반 디코딩 유닛 (165) 은 팔레트 코딩 모드 정보가 팔레트 코딩 모드가 블록에 적용되지 않는 것을 표시할 때에 예컨대, HEVC 인터-예측 또는 인트라-예측 코딩 모드와 같은 비-팔레트 기반 코딩 모드를 이용하여 비디오 데이터의 블록을 디코딩한다. 비디오 데이터의 블록은 예를 들어, HEVC 코딩 프로세스에 따라 생성된 CU 또는 PU 일 수도 있다. 비디오 디코더 (30) 는 인터-예측 시간적 예측 또는 인트라-예측 공간적 코딩 모드들로 일부의 블록들을 디코딩할 수도 있고, 팔레트-기반 코딩 모드로 다른 블록들을 디코딩할 수도 있다. 팔레트-기반 코딩 모드는 복수의 상이한 팔레트-기반 코딩 모드들 중의 하나를 포함할 수도 있거나, 단일 팔레트-기반 코딩 모드가 있을 수도 있다.
본 개시의 기법들 중의 하나 이상에 따르면, 비디오 디코더 (30), 그리고 구체적으로 팔레트-기반 디코딩 유닛 (165) 은 예측된 비디오 블록들의 팔레트-기반 비디오 디코딩을 수행할 수도 있다. 위에서 설명된 바와 같이, 비디오 디코더 (30) 에 의해 생성된 팔레트는 비디오 인코더 (20) 에 의해 명시적으로 인코딩될 수도 있거나, 이전의 팔레트 엔트리들로부터 예측될 수도 있거나, 이전의 픽셀 값들로부터 예측될 수도 있거나, 그 조합일 수도 있다.
하나의 예에서, 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 은 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사되는 예측 팔레트에서의 하나 이상의 팔레트 엔트리들을 결정하고, 예측자 팔레트에 있는 것이 아니라 현재의 팔레트 내에 포함되는 새로운 팔레트 엔트리들의 수를 결정한다. 비디오 디코더 (30) 는 비디오 인코더 (20) 로부터, 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들에 관한 정보를 수신할 수도 있다. 게다가, 비디오 디코더 (30) 는 비디오 인코더 (20) 로부터 송신된 새로운 팔레트 엔트리들에 대한 명시적으로 인코딩된 픽셀 값들을 수신할 수도 있다. 이 정보에 기초하여, 팔레트-기반 디코딩 유닛 (165) 은 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 것으로 현재의 팔레트의 사이즈를 계산하고, 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하는 결정된 사이즈의 현재의 팔레트를 생성한다. 다음으로, 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 은, 현재의 블록의 픽셀 값들을 나타내기 위해 이용된 현재의 팔레트에서의 팔레트 엔트리들을 식별하는 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정함으로써 현재의 블록을 디코딩할 수도 있다.
본 개시에서 설명된 기법들은 또한, 팔레트-기반 코딩 모드들을 시그널링하는 것, 팔레트들을 송신하는 것, 팔레트들을 예측하는 것, 팔레트들을 유도하는 것, 또는 팔레트-기반 코딩 맵들 및 다른 신택스 엘리먼트들을 송신하는 것 중의 하나 이상의 다양한 조합들에 대한 기법들을 포함할 수도 있다.
위에서 설명된 바와 같이, 일부의 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 예측된 비디오 블록들의 팔레트-기반 코딩을 수행할 수도 있다. 하나의 예에서, 비디오 인코더 (20) 는 먼저, 현재의 블록에서의 픽셀 값들에 기초하여 현재의 블록에 대한 팔레트를 유도하고, 다음으로, 현재의 블록에서의 픽셀 값들을 인코딩을 위한 팔레트 인덱스들로 맵핑한다. 맵핑은 (즉, 무손실 코딩에 대하여) 일대일일 수도 있거나, (즉, 손실 코딩에 대하여) 다대일일 수도 있다. 비디오 인코더 (20) 는 또한, 현재의 블록에서의 픽셀 값들을 예측하기 위해 이용될 수도 있는 이전에 코딩된 블록에서의 참조 픽셀 값들을 맵핑할 수도 있다. 일단 비디오 인코더 (20) 가 현재의 블록의 픽셀 값들을 팔레트 인덱스들로 맵핑하면, 비디오 인코더 (20) 는 규칙적인 인코딩 방법들, 예컨대, HEVC 표준에서의 규칙적인 인트라 코딩을 이용하여 현재의 블록을 인코딩한다.
상기 예에서, 팔레트 인덱스들을 갖는 현재의 블록은 현재의 블록이 픽셀 값들을 갖는 원래의 블록이었던 것처럼 취급된다. 유사하게, 참조 픽셀들의 팔레트 인덱스들은 팔레트 인덱스들을 갖는 현재의 블록에 대해 규칙적인 인트라 예측을 수행하기 위하여 이용된다. 비디오 인코더 (20) 는 예측 에러 또는 잔차 값들을 비디오 디코더 (30) 로 송신할 수도 있다. 일부의 경우들에는, 예측 에러 또는 잔차 값들이 변환될 수도 있고, 양자화될 수도 있고, 비트스트림으로 엔트로피 인코딩될 수도 있다. 다른 경우들에는, 변환 및 양자화가 팔레트 코딩 모드에 대해 디스에이블되는 것이 또한 가능하다. 현재의 블록을 인코딩한 후, 비디오 인코더 (20) 는 참조 픽셀들의 인덱스들, 예측 픽셀들, 및/또는 잔차 값들을 현재의 블록의 재구성 및 추후의 블록들의 정상적인 예측을 위한 픽셀 값들로 다시 변환할 수도 있다. 비디오 디코더 (30) 는 비트스트림으로부터 현재의 블록에 대한 인코딩된 잔차 값들을 획득할 수도 있다. 또한, 비디오 디코더 (30) 는 팔레트 인덱스들을 갖는 현재의 블록을 획득하기 위하여 규칙적인 디코딩 방법을 이용하여 현재의 블록을 디코딩할 수도 있다. 다음으로, 비디오 디코더 (30) 는 팔레트 인덱스들과 연관되는 팔레트에서의 픽셀 값들에 기초하여 현재의 블록의 픽셀 값들을 결정할 수도 있다.
또 다른 예에서, 비디오 인코더 (20) 는 현재의 블록에 대한 팔레트를 생성할 수도 있다. 팔레트는 소정의 블록에 대한 예측 잔차 값들을 표시하는 엔트리들을 포함할 수도 있다. 소정의 블록에 대한 예측 잔차 값들은 임의의 예측 모드, 예컨대, HEVC 표준에서의 규칙적인 인터-예측 또는 인트라-예측을 이용하여 생성될 수도 있다. 소정의 블록에 대한 예측 잔차 값들은 (아마도 양자화된) 잔차 픽셀 값들 또는 (아마도 양자화된) 잔차 변환 계수 값들일 수도 있다. 이 예에서, 비디오 인코더 (20) 는 현재의 블록에 대한 예측 잔차 값들을, 현재의 블록에 대한 예측 잔차 값들을 나타내기 위해 이용되는 현재의 블록에 대한 팔레트에서의 엔트리들을 표시하는 인덱스 값들로 맵핑한다. 이 예에서, 비디오 인코더 (20) 는 현재의 블록에서의 하나 이상의 위치들에 대한 인덱스 값들을 인코딩할 수도 있고, 여기서, 인덱스 값들은 현재의 블록에 대한 예측 잔차 값들을 특정하는 현재의 블록에 대한 팔레트에서의 엔트리들을 표시한다. 비디오 디코더 (30) 는 비트스트림으로부터 인덱스 값들의 인코딩된 블록을 획득할 수도 있고, 인덱스 값들에 의해 식별된 팔레트에서의 대응하는 예측 잔차 값들에 기초하여 현재의 블록에 대한 예측 잔차 값들을 결정할 수도 있다. 다음으로, 비디오 디코더 (30) 는 예측 잔차 값들 및 이전에 코딩된 참조 픽셀 값들에 기초하여 규칙적인 디코딩 방법들을 이용하여 현재의 블록의 픽셀 값들을 재구성할 수도 있다.
일부의 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 인트라 예측 모드 (즉, 예측은 현재의 픽처에서 이전에 코딩된 픽셀 정보를 이용하기만 함) 를 적용함으로써 비디오 블록 예측으로 팔레트-기반 비디오 코딩을 수행할 수도 있다. 다른 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 인터 예측 모드 (즉, 예측은 이전에 코딩된 픽처들에서의 픽셀들로부터 됨) 를 적용할 수도 있다. 하나의 예에서, 현재의 블록에 대한 예측 잔차 값들은 현재의 블록의 픽셀 값들 및 이전에 코딩된 참조 픽셀 값들로부터 계산된 현재의 블록에 대한 잔차 픽셀 값들일 수도 있다. 잔차 픽셀 값들은 양자화될 수도 있다. 또 다른 예에서, 현재의 블록에 대한 예측 잔차 값들은, 현재의 블록의 픽셀 값들 및 이전에 코딩된 참조 픽셀 값들로부터 계산되고, 그 다음으로, 변환되고 아마도 양자화된 현재의 블록에 대한 잔차 변환 계수 값들일 수도 있다.
일부의 경우들에는, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 가 인터 예측 모드 또는 인트라 예측 모드의 어느 하나에 대한 예측 모드 프로세스들의 서브세트만을 이용하여 현재의 블록에 대한 예측 잔차 값들을 결정할 수도 있다. 예를 들어, 인트라 예측 모드의 경우, DC, 수평, 및/또는 수직 예측 프로세스들은 인에이블될 수도 있지만, 다른 인트라 예측 모드 프로세스들은 디스에이블될 수도 있다. 디스에이블된 프로세스들은 인트라 예측 모드에서의 필터링을 포함할 수도 있고, 예컨대, 모드-종속적 인트라-평활화 (mode-dependent intra-smoothing; MDIS), 1/32-펠 이중선형 보간 (1/32-pel bilinear interpolation), 에지 필터 및/또는 DC 필터 (배경 도입부는 출원인 참조 번호 1212-671USP3/134960P3 이고, "Adaptive Filter Control for Intra Prediction in Video Coding (비디오 코딩에서의 인트라 예측을 위한 적응적 필터 제어)" 라는 명칭으로 2013 년 10 월 14 일자로 출원된 미국 가출원 제 61/890,844 호에서 발견될 수 있음) 중의 하나 이상은 이 예에서 디스에이블된다. 추가의 예로서, 인터 예측 모드의 경우, 픽셀들의 평균 프로세스, 예컨대, 가중화된 예측, 양방향-예측, 또는 서브-펠 보간 (sub-pel interpolation) 중의 하나 이상은 디스에이블될 수도 있다.
또 다른 예에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 현재의 블록에 대한 예측을 수행하지 않을 수도 있다. 이 경우, 비디오 인코더 (20) 는 그 대신에, 픽셀 값들을 팔레트 인덱스들로 맵핑하고, 예측 없이 엔트로피 코딩을 이용하여 인덱스들을 인코딩한다. 추가적인 예에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트 인덱스 값들로 맵핑되는 현재의 블록의 픽셀 값들을 이용하여 잔차 차등 펄스 코드 변조 (RDPCM) 를 수행할 수도 있다. 이 경우, 현재의 블록 외부의 픽셀들로부터의 예측은 이용되지 않고, 수평 또는 수직 예측은 현재의 CU 내에서 인덱스 값들을 라인 복사하기 위하여 이용될 수도 있다. 예를 들어, 수직 예측을 이용할 때, 현재의 블록의 제 1 로우에서의 로케이션들은 예측되지 않고, 후속 로우들에서의 로케이션들은 이전의 로우들에서의 값들을 이용하여 예측될 수도 있고, 예컨대, x(i, j) 와 동일한 로우 i (i>0) 에서의 값들은 x(i-1, j) 를 이용하여 예측된다. 수평 예측을 이용할 때, 현재의 블록의 제 1 컬럼에서의 로케이션들은 예측되지 않고, 후속 컬럼들에서의 로케이션들은 이전의 컬럼들에서의 값들을 이용하여 예측될 수도 있다.
일부의 예들에서, 비디오 데이터의 팔레트-기반 코딩을 위한 기법들은 인터-예측 또는 인트라-예측 코딩을 위한 기법들과 같은 하나 이상의 다른 코딩 기법들과 함께 이용될 수도 있다. 예를 들어, 이하에서 더욱 상세하게 설명된 바와 같이, 인코더 또는 디코더, 또는 조합된 인코더-디코더 (코덱) 는 인터-예측 및 인트라-예측 코딩뿐만 아니라, 팔레트-기반 코딩을 수행하도록 구성될 수도 있다.
도 4 는 본 개시의 기법들과 부합하는, 비디오 데이터를 코딩하기 위한 팔레트를 결정하는 예를 예시하는 개념도이다. 도 4 의 예는 팔레트들의 제 1 세트 (즉, 제 1 팔레트들 (184)) 과 연관되는 제 1 코딩 유닛 (CU) (180) 과, 팔레트들의 제 2 세트 (즉, 제 2 팔레트들 (192)) 와 연관되는 제 2 CU (188) 를 가지는 픽처 (178) 를 포함한다. 이하에서 더욱 상세하게 설명된 바와 같이, 그리고 본 개시의 기법들 중의 하나 이상에 따르면, 제 2 팔레트들 (192) 은 제 1 팔레트들 (184) 에 기초한다. 픽처 (178) 는 또한, 인트라-예측 코딩 모드로 코딩된 블록 (196) 과, 인터-예측 코딩 모드로 코딩되는 블록 (200) 을 포함한다.
도 4 의 기법들은 비디오 인코더 (20) (도 1 및 도 2) 및 비디오 디코더 (30) (도 1 및 도 3) 의 맥락에서, 그리고 설명의 목적들을 위한 HEVC 비디오 코딩 표준에 대하여 설명된다. HEVC 프레임워크에 대하여, 일 예로서, 팔레트-기반 코딩 기법들은 CU 모드로서 이용되도록 구성될 수도 있다. 다른 예들에서, 팔레트-기반 코딩 기법들은 HEVC 의 프레임워크에서 PU 모드 또는 TU 모드로서 이용되도록 구성될 수도 있다. 따라서, CU 모드의 맥락에서 설명된 다음의 개시된 프로세스들의 전부는 추가적으로 또는 대안적으로, PU 또는 TU 에 적용할 수도 있다. 그러나, 본 개시의 기법들은 이러한 방식으로 제한되는 것은 아니며, 다른 비디오 코딩 프로세스들 및/또는 표준들에서 다른 비디오 코딩 프로세서들 및/또는 디바이스들에 의해 적용될 수도 있다는 것이 이해되어야 한다.
일반적으로, 팔레트는 현재 코딩되고 있는 CU (예컨대, 도 4 의 예에서의 CU (188)) 에 대하여 지배적이고 및/또는 대표적인 다수의 픽셀 값들을 지칭한다. 제 1 팔레트들 (184) 및 제 2 팔레트들 (192) 은 다수의 팔레트들을 포함하는 것으로서 도시된다. 일부의 예들에서, 본 개시의 양태들에 따르면, (비디오 인코더 (20) 또는 비디오 디코더 (30) 와 같은) 비디오 코더는 CU 의 각각의 컬러 컴포넌트에 대해 별도로 팔레트들을 코딩할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 CU 의 루마 (Y) 컴포넌트에 대한 팔레트, CU 의 크로마 (U) 컴포넌트에 대한 또 다른 팔레트, 및 CU 의 크로마 (V) 컴포넌트에 대한 또 다른 팔레트를 인코딩할 수도 있다. 이 예에서, Y 팔레트의 엔트리들은 CU 의 픽셀들의 Y 값들을 나타낼 수도 있고, U 팔레트의 엔트리들은 CU 의 픽셀들의 U 값들을 나타낼 수도 있고, V 팔레트의 엔트리들은 CU 의 픽셀들의 V 값들을 나타낼 수도 있다.
다른 예들에서, 비디오 인코더 (20) 는 CU 의 모든 컬러 컴포넌트들에 대하여 단일 팔레트를 인코딩할 수도 있다. 이 예에서, 비디오 인코더 (20) 는 Yi, Ui, 및 Vi 를 포함하는, 트리플 값인 i 번째 엔트리를 가지는 팔레트를 인코딩할 수도 있다. 이 경우, 팔레트는 픽셀들의 컴포넌트들의 각각에 대한 값들을 포함한다. 따라서, 다수의 개별적인 팔레트들을 가지는 팔레트들의 세트로서의 팔레트들 (184 및 192) 의 표현은 단지 하나의 예일 뿐이고 제한하는 것으로 의도되는 것은 아니다.
도 4 의 예에서, 제 1 팔레트들 (184) 의 각각은 엔트리 인덱스 값 1, 엔트리 인덱스 값 2, 및 엔트리 인덱스 값 3 을 각각 가지는 3 개의 엔트리들 (202 내지 206) 을 포함한다. 엔트리들 (202 내지 206) 은 인덱스 값들을 각각 픽셀 값 A, 픽셀 값 B, 및 픽셀 값 C 을 포함하는 픽셀 값들에 관련시킨다. 제 1 팔레트들 (184) 의 각각은 실제적으로 인덱스들 및 컬럼 헤더들을 포함하지 않지만, 픽셀 값들 A, B 및 C 를 포함하기만 하고, 인덱스들은 팔레트에서 엔트리들을 식별하기 위하여 이용되는 것에 주목해야 한다.
본원에서 설명된 바와 같이, 제 1 CU (180) 의 실제적인 픽셀 값들을 코딩하는 것이 아니라, (비디오 인코더 (20) 또는 비디오 디코더 (30) 와 같은) 비디오 코더는 인덱스들 1 내지 3 을 이용하여 블록의 픽셀들을 코딩하기 위하여 팔레트-기반 코딩을 이용할 수도 있다. 즉, 제 1 CU (180) 의 각각의 픽셀 위치에 대하여, 비디오 인코더 (20) 는 픽셀에 대한 인덱스 값을 인코딩할 수도 있고, 여기서, 인덱스 값은 제 1 팔레트들 (184) 중의 하나 이상에서의 픽셀 값과 연관된다. 비디오 디코더 (30) 는 비트스트림으로부터 인덱스 값들을 획득할 수도 있고, 인덱스 값들 및 제 1 팔레트들 (184) 중의 하나 이상을 이용하여 픽셀 값들을 재구성할 수도 있다. 다시 말해서, 블록에 대한 각각의 개별 인덱스 값에 대하여, 비디오 디코더 (30) 는 제 1 팔레트들 (184) 중의 하나에서의 엔트리를 결정할 수도 있다. 비디오 디코더 (30) 는 블록에서의 각각의 인덱스 값을 팔레트에서의 결정된 엔트리에 의해 특정된 픽셀 값으로 대체할 수도 있다. 비디오 인코더 (20) 는 팔레트-기반 디코딩에서의 비디오 디코더 (30) 에 의한 이용을 위한 인코딩된 비디오 데이터 비트스트림 내의 제 1 팔레트들 (184) 을 송신할 수도 있다. 일반적으로, 하나 이상의 팔레트들은 각각의 CU 에 대하여 송신될 수도 있거나, 상이한 CU 들 사이에서 공유될 수도 있다.
본 개시의 양태들에 따르면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 제 1 팔레트들 (184) 에 기초하여 제 2 팔레트들 (192) 을 결정할 수도 있다. 예를 들어, 비디오 인코더 (20) 는, CU 에 대한 팔레트가 (공간적으로 또는 스캔 순서에 기초하여) 이웃하는 CU 들 또는 인과적 이웃의 가장 빈번한 샘플들과 같은 하나 이상의 다른 CU 들과 관련된 하나 이상의 팔레트들로부터 예측되는지 여부를 표시하기 위하여, (일 예로서, 제 2 CU (188) 를 포함하는) 각각의 CU 에 대한 pred_palette_flag 를 인코딩할 수도 있다. 예를 들어, 이러한 플래그의 값이 1 과 동일할 때, 비디오 디코더 (30) 는, 제 2 CU (188) 에 대한 제 2 팔레트들 (192) 이 하나 이상의 이미 디코딩된 팔레트들로부터 예측되고, 그러므로, 제 2 CU (188) 에 대한 새로운 팔레트들이 pred_palette_flag 를 포함하는 비트스트림 내에 포함되지 않는 것으로 결정할 수도 있다. 이러한 플래그가 0 과 동일할 때, 비디오 디코더 (30) 는 제 2 CU (188) 에 대한 팔레트들 (192) 이 새로운 팔레트로서 비트스트림 내에 포함되는 것으로 결정할 수도 있다. 일부의 예들에서, pred_palette_flag 는 CU 의 각각의 상이한 컬러 컴포넌트에 대하여 별도로 코딩될 수도 있다 (예컨대, YUV 비디오에서의 CU 에 대하여 3 개의 플래그들, 즉 Y 에 대하여 하나의 플래그, U 에 대하여 하나의 플래그, 및 V 에 대하여 하나의 플래그). 다른 예들에서, 단일 pred_palette_flag 는 CU 의 모든 컬러 컴포넌트들에 대하여 코딩될 수도 있다.
상기 예에서, pred_palette_flag 는 현재의 블록에 대한 팔레트의 엔트리들 중의 임의의 것이 예측되는지 여부를 표시하기 위하여 CU 마다 시그널링된다. 이것은 제 2 팔레트들 (192) 이 제 1 팔레트들 (184) 와 동일하며 추가적인 정보가 시그널링되지 않는 것을 의미한다. 다른 예들에서, 하나 이상의 신택스 엘리먼트들은 엔트리 마다에 기초하여 시그널링될 수도 있다. 즉, 플래그는 엔트리가 현재 팔레트에서 존재하는지 여부를 표시하기 위하여 팔레트 예측자의 각각의 엔트리에 대하여 시그널링될 수도 있다. 위에서 언급된 바와 같이, 팔레트 엔트리가 예측되지 않을 경우, 팔레트 엔트리는 명시적으로 시그널링될 수도 있다. 다른 예들에서는, 이 2 개의 방법들이 조합될 수 있다. 예를 들어, 먼저, pred_palette_flag 가 시그널링된다. 플래그가 0 일 경우, 엔트리 마다의 예측 플래그가 시그널링될 수도 있다. 게다가, 새로운 엔트리들의 수 및 그 명시적 값들이 시그널링될 수도 있다.
제 1 팔레트들 (184) 과 관련하여 제 2 팔레트들 (192) 을 결정할 때 (예컨대, pred_palette_flag 는 1 과 동일함), 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 예측 팔레트들, 이 예에서는 제 1 팔레트들 (184) 이 결정되는 하나 이상의 블록들을 위치시킬 수도 있다. 예측 팔레트들은 ((공간적으로 또는 스캔 순서에 기초하여) 이웃하는 CU들 또는 인과적 이웃의 가장 빈번한 샘플들과 같은) 현재 코딩되고 있는 CU, 즉, 제 2 CU (188) 의 하나 이상의 이웃하는 CU들과 연관될 수도 있다. 하나 이상의 이웃하는 CU 들의 팔레트들은 예측자 팔레트와 연관될 수도 있다. 도 4 에서 예시된 예와 같은 일부의 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 제 2 CU (188) 에 대한 예측 팔레트를 결정할 때, 좌측의 이웃하는 CU, 제 1 CU (180) 를 위치시킬 수도 있다. 다른 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 상부 CU, CU (196) 와 같은, 제 2 CU (188) 와 관련된 다른 위치들에서의 하나 이상의 CU 들을 위치시킬 수도 있다. 또 다른 예에서, 팔레트 모드를 이용하였던 스캔 순서에서의 최후 CU 에 대한 팔레트는 예측 팔레트로서 이용될 수도 있다.
비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 계층구조 (hierarchy) 에 기초하여 팔레트 예측을 위한 CU 를 결정할 수도 있다. 예를 들어, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트 예측을 위한 좌측의 이웃하는 CU, 제 1 CU (180) 를 초기에 식별할 수도 있다. 좌측의 이웃하는 CU 가 예측을 위하여 이용가능하지 않을 경우 (예컨대, 좌측의 이웃하는 CU 가 인트라-예측 모드 또는 인트라-예측 모드와 같은 팔레트-기반 코딩 모드 이외의 모드로 코딩되거나, 픽처 또는 슬라이스의 가장 좌측 에지에서 위치됨), 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 상부의 이웃하는 CU, CU (196) 를 식별할 수도 있다. 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트 예측을 위하여 이용가능한 팔레트를 가지는 CU 를 위치시킬 때까지, 미리 결정된 순서의 로케이션들에 따라 이용가능한 CU 에 대한 검색을 계속할 수도 있다. 일부의 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 다수의 블록들 및/또는 이웃하는 블록의 재구성된 샘플들에 기초하여 예측 팔레트를 결정할 수도 있다.
도 4 의 예가 단일 CU (즉, 제 1 CU (180)) 로부터의 예측 팔레트들로서 제 1 팔레트들 (184) 을 도시하지만, 다른 예들에서는, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 가 이웃하는 CU 들의 조합으로부터의 예측을 위한 팔레트들을 위치시킬 수도 있다. 예를 들어, 비디오 인코더 (20) 및/또는 비디오 디코더는 (공간적으로 또는 스캔 순서에서의) 복수의 이웃하는 CU 들 중의 하나 또는 조합의 팔레트들에 기초하여 예측 팔레트를 생성하기 위하여 하나 이상의 공식들, 함수들, 규칙들 등등을 적용할 수도 있다.
또 다른 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트 예측을 위한 다수의 잠재적인 후보들을 포함하는 후보 리스트를 구성할 수도 있다. 이러한 예들에서, 비디오 인코더 (20) 는 팔레트 예측을 위해 이용된 현재의 CU 가 선택되는 (예컨대, 팔레트를 복사하는) 리스트에서의 후보 CU 를 표시하기 위하여 후보 리스트로의 인덱스를 인코딩할 수도 있다. 비디오 디코더 (30) 는 동일한 방식으로 후보 리스트를 구성할 수도 있고, 인덱스를 디코딩할 수도 있고, 현재의 CU 와 함께 이용하기 위한 대응하는 CU 의 팔레트를 선택하기 위하여 디코딩된 인덱스를 이용할 수도 있다. 또 다른 예에서, 리스트에서의 표시된 후보 CU 의 팔레트는 현재의 CU 에 대한 현재의 팔레트의 엔트리 마다의 예측을 위한 예측 팔레트로서 이용될 수도 있다.
예시의 목적들을 위한 예에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 현재 코딩되고 있는 CU 의 상부에 위치되는 하나의 CU 와, 현재 코딩되고 있는 CU 의 좌측에 위치되는 하나의 CU 를 포함하는 후보 리스트를 구성할 수도 있다. 이 예에서, 비디오 인코더 (20) 는 후보 선택을 표시하기 위하여 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 현재의 CU 에 대한 팔레트가 현재의 CU 의 좌측에 위치된 CU 로부터 복사되는 것을 표시하기 위하여 제로의 값을 가지는 플래그를 인코딩할 수도 있다. 비디오 인코더 (20) 는 현재의 CU 에 대한 팔레트가 현재의 CU 상부에 위치된 CU 로부터 복사되는 것을 표시하기 위하여 1 의 값을 가지는 플래그를 인코딩할 수도 있다. 비디오 디코더 (30) 는 플래그를 디코딩하고, 팔레트 예측을 위하여 적절한 CU 를 선택한다. 또 다른 예에서, 플래그는 상부 또는 좌측의 이웃하는 CU 의 팔레트가 예측 팔레트로서 이용되는지 여부를 표시할 수도 있다. 다음으로, 예측 팔레트에서의 각각의 엔트리에 대하여, 그 엔트리가 현재의 CU 에 대한 팔레트에서 이용되는지 여부가 표시될 수도 있다.
또 다른 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 하나 이상의 다른 팔레트들 내에 포함된 샘플 값들이 하나 이상의 이웃하는 CU 들에서 발생하는 빈도에 기초하여 현재 코딩되고 있는 CU 에 대한 팔레트를 결정한다. 예를 들어, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 미리 결정된 수의 CU 들의 코딩 동안에 가장 빈번하게 이용된 인덱스 값들과 연관된 컬러들을 추적할 수도 있다. 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 현재 코딩되고 있는 CU 에 대한 팔레트에서 가장 빈번하게 이용된 컬러들을 포함할 수도 있다.
위에서 언급된 바와 같이, 일부의 예들에서는, 비디오 인코더 (20) 및/또는 비디오 디코더가 현재의 CU 를 코딩하기 위하여 이웃하는 CU 로부터 전체 팔레트를 복사할 수도 있다. 추가적으로 또는 대안적으로, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 엔트리별 기반의 팔레트 예측을 수행할 수도 있다. 예를 들어, 비디오 인코더 (20) 는, 각각의 엔트리들이 예측 팔레트 (예컨대, 또 다른 CU 의 팔레트) 에 기초하여 예측되는지 여부를 표시하는 팔레트의 각각의 엔트리에 대한 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 이 예에서, 비디오 인코더 (20) 는, 엔트리가 예측 팔레트로부터의 예측된 값 (예컨대, 이웃하는 CU 와 연관된 팔레트의 대응하는 엔트리) 일 때, 소정의 엔트리에 대하여 1 의 값을 가지는 플래그를 인코딩할 수도 있다. 비디오 인코더 (20) 는 특정 엔트리가 또 다른 CU 의 팔레트로부터 예측되지 않는 것을 표시하기 위하여 특정 엔트리에 대하여 0 의 값을 가지는 플래그를 인코딩할 수도 있다. 이 예에서, 비디오 인코더 (20) 는 또한, 예측되지 않은 팔레트 엔트리의 값을 표시하는 추가적인 데이터를 인코딩할 수도 있다.
본 개시는 현재의 CU 에 대한 팔레트를 예측하기 위한 몇몇 대안적인 기법들을 설명한다. 하나의 예에서, 하나 이상의 이전에 코딩된 이웃하는 CU 들로부터의 팔레트 엔트리들을 포함하는 예측 팔레트는 엔트리들의 수, N 을 포함한다. 이 경우, 비디오 인코더 (20) 는 먼저, 예측 팔레트와 동일한 사이즈, 즉, 사이즈 N 을 가지는 2진 벡터 V 를 비디오 디코더 (30) 로 송신한다. 2진 벡터에서의 각각의 엔트리는 예측 팔레트에서의 대응하는 엔트리가 재이용되거나 현재의 CU 에 대한 팔레트로 복사될 것인지 여부를 표시한다. 예를 들어, V(i) = 1 은, 이웃하는 CU 에 대한 예측 팔레트에서의 i 번째 엔트리가 재이용될 것이고, 현재의 CU 에서 상이한 인덱스를 가질 수도 있는, 현재의 CU 에 대한 팔레트로 복사될 것이라는 것을 의미한다.
게다가, 비디오 인코더 (20) 는, 얼마나 많은 새로운 팔레트 엔트리들이 현재의 CU 에 대한 팔레트 내에 포함되는지를 표시하는 수 M 을 송신할 수도 있고, 다음으로, 새로운 팔레트 엔트리들의 각각에 대한 픽셀 값을 비디오 디코더 (30) 로 송신한다. 이 예에서, 현재의 CU 에 대한 팔레트의 최종 사이즈는 M + S 과 동일한 것으로서 유도될 수도 있고, 여기서, S 는 현재의 CU 에 대한 팔레트에서 재이용될 수도 있거나 이것으로 복사될 수도 있는 예측 팔레트에서의 엔트리들의 수이다 (즉, V(i) = 1). 현재의 CU 에 대한 팔레트를 생성하기 위하여, 비디오 디코더 (30) 는 송신된 새로운 팔레트 엔트리들과, 예측 팔레트로부터 재이용되는 복사된 팔레트 엔트리들을 병합할 수도 있다. 일부의 경우들에는, 병합이 픽셀 값들에 기초할 수도 있어서, 현재의 CU 에 대한 팔레트에서의 엔트리들은 팔레트 인덱스와 함께 증가 (또는 감소) 할 수도 있다. 다른 경우들에는, 병합이 엔트리들의 2 개의 세트들, 즉, 새로운 팔레트 엔트리들 및 복사된 팔레트 엔트리들의 연결일 수도 있다.
또 다른 예에서, 비디오 인코더 (20) 는 먼저, 현재의 CU 에 대한 팔레트의 사이즈, N 의 표시를 비디오 디코더 (30) 로 송신한다. 다음으로, 비디오 인코더 (20) 는 현재의 CU 에 대한 팔레트와 동일한 사이즈, 즉, 사이즈 N 을 가지는 벡터 V 를 비디오 디코더 (30) 로 송신한다. 벡터에서의 각각의 엔트리는 현재의 CU 에 대한 팔레트에서의 대응하는 엔트리가 비디오 인코더 (20) 에 의해 명시적으로 송신되는지, 또는 예측 팔레트로부터 복사되는지 여부를 표시한다. 예를 들어, V(i) = 1 은 비디오 인코더 (20) 가 팔레트에서의 i 번째 엔트리를 비디오 디코더 (30) 로 송신하는 것을 의미하고, V(i) = 0 은 팔레트에서의 i 번째 엔트리가 예측 팔레트로부터 복사되는 것을 의미한다. 예측 팔레트로부터 복사되는 엔트리들에 대하여 (즉, V(i) = 0), 비디오 인코더 (20) 는 예측 팔레트에서의 어느 엔트리가 현재의 CU 에 대한 팔레트에서 이용되는지를 시그널링하기 위하여 상이한 방법들을 이용할 수도 있다. 일부의 경우들에는, 비디오 인코더 (20) 가 예측 팔레트로부터 현재의 CU 에 대한 팔레트로 복사되어야 할 엔트리의 팔레트 인덱스를 시그널링할 수도 있다. 다른 경우들에는, 비디오 인코더 (20) 가 현재의 CU 에 대한 팔레트에서의 인덱스 및 예측 팔레트에서의 인덱스 사이의 차이인 인덱스 오프셋을 시그널링할 수도 있다.
상기 2 개의 예들에서, 현재의 CU 에 대한 팔레트의 예측을 위해 이용된 예측 팔레트를 생성하기 위해 이용된 하나 이상의 이전에 코딩된 이웃하는 CU 들은 현재의 CU 에 대하여 상부-이웃하는 (즉, 상부) CU 또는 좌측-이웃하는 CU 일 수도 있다. 일부의 예들에서, 이웃하는 CU 들의 후보 리스트가 구성될 수도 있고, 비디오 인코더 (20) 는 어느 후보 이웃 CU 들 및 연관된 팔레트들이 현재의 CU 에 대한 팔레트 예측을 위해 이용되는지를 표시하기 위한 인덱스를 송신한다. 어떤 CU 들, 예컨대, 슬라이스의 시작 또는 다른 슬라이스 경계들에서 위치되는 CU 들, 또는 비디오 데이터의 슬라이스 또는 픽처에서의 가장 좌측 CU 들에 대하여, 팔레트 예측은 디스에이블될 수도 있다.
추가적인 예에서, 비디오 인코더 (20) 는 현재의 CU 에 대한 팔레트 내에 포함된 엔트리들의 수의 표시를 비디오 디코더 (30) 로 송신한다. 다음으로, 팔레트 엔트리들의 각각에 대하여, 비디오 인코더 (20) 는 팔레트 엔트리가 비디오 인코더 (20) 에 의해 명시적으로 송신되는지 여부, 또는 그것이 이전에 재구성된 픽셀로부터 유도되는지 여부를 표시하기 위하여, 플래그 또는 다른 신택스 엘리먼트를 송신한다. 예를 들어, 1 과 동일하게 설정된 1-비트 플래그는 비디오 인코더 (20) 가 팔레트 엔트리를 명시적으로 전송하는 것을 의미할 수도 있고, 0 과 동일하게 설정된 1-비트 플래그는 팔레트 엔트리가 이전에 재구성된 픽셀로부터 유도되는 것을 의미할 수도 있다. 이전에 재구성된 픽셀로부터 유도되는 팔레트 엔트리들의 각각에 대하여, 비디오 인코더 (20) 는 팔레트 엔트리에 대응하는 현재의 CU 또는 이웃하는 CU 에서의 재구성된 픽셀의 픽셀 로케이션에 관한 또 다른 표시를 송신한다. 일부의 경우들에는, 재구성된 픽셀 로케이션 표시가 현재의 CU 의 상부-좌측 위치에 대한 변위 벡터일 수도 있다. 다른 경우들에는, 재구성된 픽셀 로케이션 표시가 현재의 CU 에 대한 팔레트 엔트리를 특정하기 위해 이용될 수 있는 재구성된 픽셀들의 리스트로의 인덱스일 수도 있다. 예를 들어, 이 리스트는 HEVC 에서의 정상적인 인트라 예측을 위하여 이용될 수도 있는 모든 참조 픽셀들을 포함할 수도 있다.
도 4 의 예에서, 제 2 팔레트들 (192) 은 각각, 엔트리 인덱스 값 1, 엔트리 인덱스 값 2, 엔트리 인덱스 값 3, 및 엔트리 인덱스 4 를 가지는 4 개의 엔트리들 (208 내지 214) 을 포함한다. 엔트리들 (208 내지 214) 은 인덱스 값들을, 각각 픽셀 값 A, 픽셀 값 B, 픽셀 값 C 및 픽셀 값 D 를 포함하는 픽셀 값들에 관련시킨다. 본 개시의 하나 이상의 양태들에 따르면, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트 예측의 목적들을 위하여 제 1 CU (180) 를 위치시키고 제 2 CU (188) 를 코딩하기 위하여 제 1 팔레트들 (184) 의 엔트리들 1 내지 3 을 제 2 팔레트들 (192) 의 엔트리들 1 내지 3 로 복사하기 위하여 상기 설명된 기법들 중의 임의의 것을 이용할 수도 있다. 이러한 방식으로, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 제 1 팔레트들 (184) 에 기초하여 제 2 팔레트들 (192) 을 결정할 수도 있다. 게다가, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 제 2 팔레트들 (192) 과 함께 포함되어야 할 엔트리 4 에 대한 데이터를 코딩할 수도 있다. 이러한 정보는 예측 팔레트로부터 예측되지 않은 팔레트 엔트리들의 수 및 그 팔레트 엔트리들에 대응하는 픽셀 값들을 포함할 수도 있다.
일부의 예들에서, 본 개시의 양태들에 따르면, 하나 이상의 신택스 엘리먼트들은 제 2 팔레트들 (192) 과 같은 팔레트들이 (도 4 에서 제 1 팔레트들 (184) 로서 도시되지만 하나 이상의 블록들로부터의 엔트리들로 구성될 수도 있는) 예측 팔레트로부터 전체적으로 예측되는지의 여부 또는 제 2 팔레트들 (192) 의 특정 엔트리들이 예측되는지의 여부를 표시할 수도 있다. 예를 들어, 초기 신택스 엘리먼트는 엔트리들의 전부가 예측되는지 여부를 표시할 수도 있다. 초기 신택스 엘리먼트가 엔트리들 전부가 예측되지는 않는 것을 표시할 경우 (예컨대, 0 의 값을 가지는 플래그), 하나 이상의 추가적인 신택스 엘리먼트들은 제 2 팔레트들 (192) 의 어느 엔트리들이 예측 팔레트로부터 예측되는지를 표시할 수도 있다.
본 개시의 일부의 양태들에 따르면, 팔레트 예측과 연관된 어떤 정보는 코딩되고 있는 데이터의 하나 이상의 특성들로부터 추론될 수도 있다. 즉, 비디오 인코더 (20) 가 신택스 엘리먼트들을 인코딩하는 것 (그리고 비디오 디코더 (30) 가 이러한 신택스 엘리먼트들을 디코딩하는 것) 이 아니라, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 코딩되고 있는 데이터의 하나 이상의 특성들에 기초하여 팔레트 예측을 수행할 수도 있다.
일 예에서, 예시의 목적들을 위하여, 위에서 설명된 pred_palette_flag 의 값은 예들로서, 코딩되고 있는 CU 의 사이즈, 프레임 타입, 컬러 공간, 컬러 컴포넌트, 프레임 사이즈, 프레임 레이트, 스케일러블 비디오 코딩에서의 계층 id 또는 멀티-뷰 코딩에서의 뷰 id 중의 하나 이상으로부터 추론될 수도 있다. 즉, 일 예로서, CU 의 사이즈에 대하여, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 위에서 설명된 pred_palette_flag 가 미리 결정된 사이즈를 초과하거나 미리 결정된 사이즈보다 더 작은 임의의 CU 들에 대하여 1 과 동일한 것으로 결정할 수도 있다. 이 예에서, pred_palette_flag 는 인코딩된 비트스트림에서 시그널링될 필요가 없다.
pred_palette_flag 에 대하여 위에서 설명되었지만, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 또한, 또는 대안적으로, 코딩되고 있는 데이터의 하나 이상의 특성들에 기초하여, 팔레트가 예측을 위해 이용되는 후보 CU 와 같은, 팔레트 예측과 연관된 다른 정보, 또는 팔레트 예측 후보들을 구성하기 위한 규칙들을 추론할 수도 있다.
본 개시의 다른 양태들에 따르면, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트를 온-더-플라이로 구성할 수도 있다. 예를 들어, 초기에 제 2 CU (188) 를 코딩할 때, 팔레트들 (192) 내에는 어떤 엔트리들도 없다. 비디오 인코더 (20) 및 비디오 디코더 (30) 가 제 2 CU (188) 의 픽셀들에 대한 새로운 값들을 코딩할 때에, 각각의 새로운 값은 팔레트들 (192) 내에 포함된다. 즉, 예를 들어, 비디오 인코더 (20) 는 픽셀 값들이 생성되고 CU (188) 에서의 위치들에 대해 시그널링됨에 따라 픽셀 값들을 팔레트들 (192) 에 추가한다. 비디오 인코더 (20) 가 CU 에서 상대적으로 더 이후에 픽셀들을 인코딩할 때에, 비디오 인코더 (20) 는 픽셀 값들을 시그널링하는 것이 아니라, 인덱스 값들을 이용하여 팔레트에서 이미 포한된 것들과 동일한 값들을 가지는 픽셀들을 인코딩할 수도 있다. 유사하게, 비디오 디코더 (30) 가 제 2 CU (188) 에서의 위치에 대하여 (예컨대, 비디오 인코더 (20) 에 의해 시그널링된) 새로운 픽셀 값을 수신할 때, 비디오 디코더 (30) 는 픽셀 값을 팔레트들 (192) 내에 포함한다. 제 2 CU (188) 에서 상대적으로 더 이후에 디코딩된 픽셀 위치들이 제 2 팔레트들 (192) 에 추가되었던 픽셀 값들을 가질 때, 비디오 디코더 (30) 는 제 2 CU (188) 의 픽셀 값들의 재구성을 위하여 제 2 팔레트들 (192) 에서 대응하는 픽셀 값들을 식별하는, 예컨대, 인덱스 값들과 같은 정보를 수신할 수도 있다.
일부의 예들에서, 이하에서 더욱 상세하게 설명된 바와 같이, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트들 (184 및 192) 을 최대 팔레트 사이즈로 또는 그 미만으로 유지할 수도 있다. 본 개시의 양태들에 따르면, 최대 팔레트 사이즈가 도달될 경우, 예컨대, 제 2 팔레트들 (192) 이 온-더-플라이로 동적으로 구성될 때에, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 제 2 팔레트들 (192) 의 엔트리를 제거하기 위하여 동일한 프로세스를 수행한다. 팔레트 엔트리들을 제거하기 위한 하나의 예의 프로세스는, 비디오 인코더 (20) 및 비디오 디코더 (30) 가 팔레트의 가장 오래된 엔트리를 제거하는 선입선출 (first-in-first-out; FIFO) 기법이다. 다른 예에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트로부터 최소로 빈번하게 이용된 팔레트 엔트리를 제거할 수도 있다. 또 다른 예에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 어느 엔트리를 제거할 것인지 결정하기 위하여 FIFO 및 이용 빈도 프로세스들의 양자를 가중화할 수도 있다. 즉, 엔트리의 제거는 엔트리가 얼마나 오래된 것인지와, 그것이 얼마나 빈번하게 이용되는지에 기초할 수도 있다.
일부의 양태들에 따르면, 엔트리 (픽셀 값) 가 팔레트로부터 제거되고 픽셀 값이 코딩되고 있는 CU 의 더 이후의 위치에서 다시 발생할 경우, 비디오 인코더 (20) 는 팔레트 내에 엔트리를 포함하고 인덱스를 인코딩하는 대신에, 픽셀 값을 인코딩할 수도 있다. 추가적으로 또는 대안적으로, 비디오 인코더 (20) 는 예컨대, 비디오 인코더 (20) 및 비디오 디코더 (30) 가 CU 에서의 위치들을 스캔할 때에, 제거된 이후의 팔레트 내로 팔레트 엔트리들을 재입력할 수도 있다.
일부의 예들에서, 팔레트를 온-더-플라이로 유도하기 위한 기법들은 팔레트를 결정하기 위한 하나 이상의 다른 기법들과 조합될 수도 있다. 특히, 일 예로서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 (예컨대, 제 1 팔레트들 (184) 로부터 제 2 팔레트들 (192) 을 예측하기 위한 팔레트 예측을 이용하여) 제 2 팔레트들 (192) 을 초기에 코딩할 수도 있고, 제 2 CU (188) 의 픽셀들을 코딩할 때에 제 2 팔레트들 (192) 을 업데이트할 수도 있다. 예를 들어, 초기 팔레트를 송신할 시에, 비디오 인코더 (20) 는 CU 에서의 추가적인 로케이션들의 픽셀 값들이 스캔될 때에, 값들을 초기 팔레트에 추가할 수도 있거나 초기 팔레트에서의 값들을 변경시킬 수도 있다. 마찬가지로, 초기 팔레트를 수신할 시에, 비디오 디코더 (30) 는 CU 에서의 추가적인 로케이션들의 픽셀 값들이 스캔될 때에, 값들을 초기 팔레트에 추가 (즉, 포함) 할 수도 있거나 초기 팔레트에서의 값들을 변경시킬 수도 있다.
비디오 인코더 (20) 는, 일부의 예들에서, 현재의 CU 가 전체 팔레트의 송신, 또는 온-더-플라이 팔레트 생성, 또는 초기 팔레트의 송신과, 온-더-플라이 유도에 의한 초기 팔레트의 업데이트와의 조합을 이용하는지 여부를 시그널링할 수도 있다. 일부의 예들에서, 초기 팔레트는 최대 팔레트 사이즈인 전체 팔레트일 수도 있고, 이 경우, 초기 팔레트에서의 값들이 변경될 수도 있다. 다른 예들에서, 초기 팔레트는 최대 팔레트 사이즈보다 더 작을 수도 있고, 이 경우, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 값들을 초기 팔레트에 추가할 수도 있고 및/또는 초기 팔레트의 값들을 변경시킬 수도 있다.
본 개시의 하나 이상의 양태들에 따르면, 예컨대, 팔레트 내에 포함된 픽셀 값들의 수의 측면에서의, 제 1 팔레트들 (184) 및 제 2 팔레트들 (192) 과 같은 팔레트들의 사이즈는 고정될 수도 있거나, 인코딩된 비트스트림에서의 하나 이상의 신택스 엘리먼트들을 이용하여 시그널링될 수도 있다. 예를 들어, 일부의 양태들에 따르면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트 사이즈를 코딩하기 위하여 1진 코드들 또는 절단된 1진 코드들 (예컨대, 팔레트 사이즈의 최대 제한치에서 절단하는 코드들) 을 이용할 수도 있다. 다른 양태들에 따르면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트 사이즈를 코딩하기 위하여 지수-골롬 또는 라이스 골롬 (Rice-Golomb) 코드들을 이용할 수도 있다.
또 다른 양태들에 따르면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트의 각각의 엔트리 이후에 팔레트의 사이즈를 표시하는 데이터를 코딩할 수도 있다. 일 예로서, 제 2 팔레트들 (192) 에 대하여, 비디오 인코더 (20) 는 엔트리들 (208 내지 214) 의 각각 이후에 정지 플래그 (stop flag) 를 인코딩할 수도 있다. 이 예에서, 1 과 동일한 정지 플래그는, 현재 코딩되고 있는 엔트리가 제 2 팔레트들 (192) 의 최종 엔트리인 것으로 특정할 수도 있는 반면, 제로와 동일한 정지 플래그는 제 2 팔레트들 (192) 내에 추가적인 엔트리들이 있는 것을 표시할 수도 있다. 따라서, 비디오 인코더 (20) 는 엔트리들 (208 내지 212) 의 각각 이후에 제로의 값을 가지는 정지 플래그들과, 엔트리 (214) 이후에 1 의 값을 가지는 정지 플래그를 인코딩할 수도 있다. 일부의 사례들에서, 정지 플래그는 구성된 팔레트가 최대 팔레트 사이즈 제한에 도달할 시에 비트스트림 내에 포함되지 않을 수도 있다. 상기 예들이 팔레트들의 사이즈를 명시적으로 시그널링하기 위한 기법들을 개시하지만, 다른 예들에서는, 팔레트들의 사이즈가 또한, 조건적으로 송신될 수도 있거나, 소위 부가 정보 (예컨대, 위에서 언급된 바와 같이, 코딩되고 있는 CU 의 사이즈, 프레임 타입, 컬러 공간, 컬러 컴포넌트, 프레임 사이즈, 프레임 레이트, 스케일러블 비디오 코딩에서의 계층 id 또는 멀티-뷰 코딩에서의 뷰 id 와 같은 특성 정보) 에 기초하여 추론될 수도 있다.
본 개시의 기법들은 데이터를 무손실, 또는 대안적으로, 일부의 손실들로 (손실 코딩) 코딩하는 것을 포함한다. 예를 들어, 손실 코딩에 대하여, 비디오 인코더 (20) 는 팔레트들의 픽셀 값들을 CU 에서의 실제적인 픽셀 값들과 정확하게 일치시키지 않으면서 CU 의 픽셀들을 코딩할 수도 있다. 본 개시의 기법들이 손실 코딩에 적용될 때, 일부 한정들이 팔레트에 적용될 수도 있다. 예를 들어, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 제 1 팔레트들 (184) 및 제 2 팔레트들 (192) 과 같은 팔레트들을 양자화할 수도 있다. 즉, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 엔트리들의 픽셀 값들이 서로의 미리 결정된 범위 내에 있을 때에 팔레트의 엔트리들을 병합 또는 조합 (즉, 양자화) 할 수도 있다. 다시 말해서, 새로운 팔레트 값의 에러 마진 내에 있는 팔레트 값이 이미 있을 경우에는, 새로운 팔레트 값이 팔레트에 추가되지 않는다. 다른 예에서, 블록에서의 복수의 상이한 픽셀 값들이 단일 팔레트 엔트리로, 또는 등가적으로, 단일 팔레트 픽셀 값으로 맵핑될 수도 있다.
비디오 디코더 (30) 는 특정 팔레트가 무손실인지 또는 손실인지 여부에 관계없이, 동일한 방식으로 픽셀 값들을 디코딩할 수도 있다. 하나의 예로서, 비디오 디코더 (30) 는 팔레트가 무손실인지 또는 손실인지 여부에 관계없이, 픽셀 위치에 대한 팔레트에서의 엔트리를 선택하기 위하여 코딩된 블록에서의 소정의 픽셀 위치에 대하여 비디오 인코더 (20) 에 의해 송신된 인덱스 값을 이용할 수도 있다. 이 예에서, 팔레트 엔트리의 픽셀 값은 원래의 픽셀 값과 정확하게 일치하든지 또는 그렇지 않든지, 코딩된 블록에서의 픽셀 값으로서 이용된다.
손실 코딩의 예에서, 예시의 목적들을 위하여, 비디오 인코더 (20) 는 델타 값 (delta value) 으로서 지칭된 에러 경계를 결정할 수도 있다. 후보 픽셀 값 엔트리 Plt_cand 는 CU 또는 PU 와 같은, 코딩되어야 할 블록의 위치에서의 픽셀 값에 대응할 수도 있다. 팔레트의 구성 동안에, 비디오 인코더 (20) 는 후보 픽셀 값 엔트리 Plt_cand 와, 팔레트에서의 기존의 픽셀 값 엔트리들의 전부와의 사이의 절대 차이를 결정한다. 후보 픽셀 값 엔트리 Plt_cand 와, 팔레트에서의 기존의 픽셀 값 엔트리들과의 사이의 절대 차이들의 전부가 델타 값보다 더 클 경우, 비디오 인코더 (20) 는 픽셀 값 후보를 팔레트에 엔트리로서 추가할 수도 있다. 픽셀 값 엔트리 Plt_cand 와, 팔레트에서의 적어도 하나의 기존의 픽셀 값 엔트리와의 사이의 절대 차이가 델타 값과 동일하거나 그보다 더 작을 경우, 비디오 인코더 (20) 는 후보 픽셀 값 엔트리 Plt_cand 를 팔레트에 추가하지 않을 수도 있다. 이에 따라, 픽셀 값 엔트리 Plt_cand 를 코딩할 때, 비디오 인코더 (20) 는 픽셀 값 엔트리 Plt_cand 에 가장 근접한 픽셀 값을 갖는 엔트리를 선택할 수도 있음으로써, 일부의 손실을 시스템 내로 도입할 수도 있다. 팔레트가 다수의 컴포넌트들 (예컨대, 3 개의 컬러 컴포넌트들) 로 구성될 때, 개별적인 컴포넌트 값들의 절대 차이의 합은 델타 값에 대한 비교를 위하여 이용될 수도 있다. 대안적으로 또는 추가적으로, 각각의 컴포넌트 값에 대한 절대 차이는 제 2 델타 값에 대하여 비교될 수도 있다.
일부의 예들에서, 위에서 언급된 팔레트에서의 기존의 픽셀 값 엔트리들은 유사한 델타 비교 프로세스를 이용하여 추가되었을 수도 있다. 다른 예들에서, 팔레트에서의 기존의 픽셀 값들은 다른 프로세스들을 이용하여 추가되었을 수도 있다. 예를 들어, 하나 이상의 초기 픽셀 값 엔트리들은 팔레트를 구성하는 델타 비교 프로세스를 시작하기 위하여 (델타 비교 없이) 팔레트에 추가될 수도 있다. 위에서 설명된 프로세스는 루마 및/또는 크로마 팔레트들을 생성하기 위하여 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 에 의해 구현될 수도 있다.
팔레트 구성에 대하여 위에서 설명된 기법들은 또한, 픽셀 코딩 동안에 비디오 인코더 (20) 및 비디오 디코더 (30) 에 의해 이용될 수도 있다. 예를 들어, 픽셀 값의 인코딩할 때, 비디오 인코더 (20) 는 픽셀의 값을 팔레트에서의 엔트리들의 픽셀 값들과 비교할 수도 있다. 픽셀의 값과 팔레트에서의 엔트리들 중의 하나와의 사이의 절대 픽셀 값 차이가 델타 값과 동일하거나 그보다 더 작을 경우, 비디오 인코더 (20) 는 픽셀 값을 팔레트의 엔트리로서 인코딩할 수도 있다. 즉, 이 예에서, 비디오 인코더 (20) 는 픽셀 값이 충분히 작은 (예컨대, 미리 결정된 범위 내의) 절대 차이 대 팔레트 엔트리를 생성할 때에 팔레트의 엔트리들 중의 하나를 이용하여 픽셀 값을 인코딩한다.
일부의 예들에서, 비디오 인코더 (20) 는 픽셀 값을 인코딩하기 위하여 (코딩되고 있는 픽셀 값과 비교하여) 최소 절대 픽셀 값 차이를 산출하는 팔레트 엔트리를 선택할 수도 있다. 일 예로서, 비디오 인코더 (20) 는 픽셀 값에 대하여 이용될 팔레트 엔트리, 예컨대, 비디오 디코더 (30) 에서 코딩된 픽셀 값을 재구성하기 위하여 이용될 팔레트 픽셀 값 엔트리를 표시하기 위하여 인덱스를 인코딩할 수도 있다. 픽셀의 값과, 팔레트에서의 엔트리들의 전부와의 사이의 절대 픽셀 값 차이가 델타보다 더 클 경우, 인코더는 픽셀 값을 인코딩하기 위하여 팔레트 엔트리들 중의 하나를 이용하지 않을 수도 있고, 그 대신에, (아마도 양자화 후의) 픽셀의 픽셀 값을 비디오 디코더 (30) 로 송신할 수도 있다 (그리고 아마도 픽셀 값을 팔레트로의 엔트리로서 추가함).
다른 예에서, 비디오 인코더 (20) 는 픽셀 값을 인코딩하기 위한 팔레트의 엔트리를 선택할 수도 있다. 비디오 인코더 (20) 는 선택된 엔트리를 예측 픽셀 값으로서 이용할 수도 있다. 즉, 비디오 인코더 (20) 는 실제적인 픽셀 값과, 선택된 엔트리와의 사이의 차이를 나타내는 잔차 값을 결정할 수도 있고, 잔차를 인코딩할 수도 있다. 비디오 인코더 (20) 는 팔레트의 엔트리들에 의해 예측되는 블록에서의 픽셀들에 대한 잔차 값들을 생성할 수도 있고, 픽셀들의 블록에 대한 각각의 잔차 픽셀 값들을 포함하는 잔차 블록을 생성할 수도 있다. 비디오 인코더 (20) 는 이후에 (도 2 에 대하여 위에서 언급된 바와 같은) 변환 및 양자화를 잔차 블록에 적용할 수도 있다. 이러한 방식으로, 비디오 인코더 (20) 는 양자화된 잔차 변환 계수들을 생성할 수도 있다. 또 다른 예에서, 잔차는 무손실 (변환 및 양자화 없이) 또는 변환 없이 코딩될 수도 있다.
비디오 디코더 (30) 는 잔차 블록을 재생하기 위해 변환 계수들을 역변환 및 역양자화할 수도 있다. 그 다음으로, 비디오 디코더 (30) 는 픽셀 값에 대한 예측 팔레트 엔트리 값 및 잔차 값을 이용하여 픽셀 값을 재구성할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 코딩된 픽셀 값을 재구성하기 위하여 잔차 값을 팔레트 엔트리 값과 조합할 수도 있다.
일부의 예들에서, 델타 값은 상이한 CU 사이즈들, 픽처 사이즈들, 컬러 공간들 또는 상이한 컬러 컴포넌트들에 대하여 상이할 수도 있다. 델타 값은 다양한 코딩 조건들에 기초하여 미리 결정되거나 결정될 수도 있다. 예를 들어, 비디오 인코더 (20) 는 PPS, SPS, VPS 및/또는 슬라이스 헤더에서의 신택스와 같은 하이 레벨 신택스를 이용하여 델타 값을 비디오 디코더 (30) 로 시그널링할 수도 있다. 다른 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 동일한 고정된 델타 값을 이용하도록 미리 구성될 수도 있다. 또 다른 예들에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 (예컨대, 위에서 언급된 바와 같은 CU 사이즈, 컬러 공간, 컬러 컴포넌트 등등과 같은) 부가 정보에 기초하여 델타 값을 적응적으로 유도할 수도 있다.
일부의 예들에서, 손실 코딩 팔레트 모드는 HEVC 코딩 모드로서 포함될 수도 있다. 예를 들어, 코딩 모드들은 인트라-예측 모드, 인터-예측 모드, 무손실 코딩 팔레트 모드, 및 손실 코딩 팔레트 모드를 포함할 수도 있다. HEVC 코딩에서, 도 2 및 도 3 에 대하여 위에서 언급된 바와 같이, 양자화 파라미터 (QP) 는 허용된 왜곡을 제어하기 위하여 이용된다. 팔레트-기반 코딩에 대한 델타의 값은 계산될 수도 있거나, 이와 다르게, QP 의 함수로서 결정될 수도 있다. 예를 들어, 상기 설명된 델타 값은 1<<(QP/6) 또는 1<<((QP+d)/6) 일 수도 있으며, 여기서, d 는 상수이고 "<<" 는 비트별 좌측-시프트 연산자 (bitwise left-shift operator) 를 나타낸다.
본 개시에서 설명된 손실 코딩 기법들을 이용한 팔레트의 생성은 비디오 인코더 (20), 비디오 디코더 (30) 또는 양자에 의해 수행될 수도 있다. 예를 들어, 비디오 인코더 (20) 는 위에서 설명된 델타 비교 기법들을 이용하여 CU 에 대한 팔레트에서의 엔트리들을 생성할 수도 있고, 비디오 디코더 (30) 에 의한 이용을 위하여 팔레트의 구성에 대한 정보를 시그널링할 수도 있다. 즉, 비디오 인코더 (20) 는, CU 에 대한 팔레트에서의 엔트리들에 대한 픽셀 값들을 표시하는 정보를 시그널링하고, 그 다음으로, 이러한 팔레트 엔트리들과 연관된 픽셀 값들을 이용하여 픽셀 값들을 인코딩하도록 구성될 수도 있다. 비디오 디코더 (30) 는 이러한 정보를 이용하여 팔레트를 구성할 수도 있고, 그 다음으로, 코딩된 블록의 픽셀 값들을 디코딩하기 위하여 엔트리들을 이용할 수도 있다. 일부의 예들에서, 비디오 인코더 (20) 는 코딩된 블록의 하나 이상의 픽셀 위치들에 대한 팔레트 엔트리들을 식별하는 인덱스 값들을 시그널링할 수도 있고, 비디오 디코더 (30) 는 팔레트로부터 적절한 픽셀 값 엔트리들을 취출하기 위하여 인덱스 값들을 이용할 수도 있다.
다른 예들에서, 비디오 디코더 (30) 는 위에서 설명된 델타 비교 기법들을 적용함으로써 팔레트를 구성하도록 구성될 수도 있다. 예를 들어, 비디오 디코더 (30) 는 코딩된 블록 내의 위치들에 대한 픽셀 값들을 수신할 수도 있고, 픽셀 값들과 팔레트에서의 기존의 픽셀 값 엔트리들과의 사이의 절대 차이들이 델타 값보다 더 큰지 여부를 결정할 수도 있다. 그러할 경우, 비디오 디코더 (30) 는, 예컨대, 비디오 인코더 (20) 에 의해 시그널링된 대응하는 인덱스 값들을 이용한 블록의 다른 픽셀 위치들에 대한 픽셀 값들의 팔레트-기반 디코딩에서의 더 이후의 이용을 위하여, 픽셀 값들을 팔레트에서의 엔트리들로서 추가할 수도 있다. 이 경우, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트를 생성하기 위하여 동일하거나 유사한 프로세스들을 적용한다. 그렇지 않을 경우, 비디오 디코더 (30) 는 픽셀 값들을 팔레트에 추가하지 않을 수도 있다.
예시의 목적들을 위한 예에서, 비디오 디코더 (30) 는 블록에서의 다양한 픽셀 위치들에 대한 인덱스 값들 또는 픽셀 값들을 수신할 수도 있다. 인덱스 값이 픽셀 위치에 대해 수신될 경우, 예를 들어, 비디오 디코더 (30) 는 팔레트에서 엔트리를 식별하기 위하여 인덱스 값을 이용할 수도 있고, 픽셀 위치에 대한 팔레트 엔트리의 픽셀 값을 이용할 수도 있다. 픽셀 값이 픽셀 위치에 대해 수신될 경우, 비디오 디코더 (30) 는 픽셀 위치에 대한 수신된 픽셀 값을 이용할 수도 있고, 또한, 픽셀 값이 팔레트에 추가되어야 하고 그 다음으로, 팔레트 코딩을 위하여 더 이후에 이용되어야 하는지 여부를 결정하기 위하여, 델타 비교를 적용할 수도 있다.
인코더 측에서는, 블록에서의 위치에 대한 픽셀 값이 픽셀 값과, 델타 값 이하인 팔레트에서의 기존의 픽셀 값 엔트리와의 사이의 절대 차이를 생성할 경우, 비디오 인코더 (20) 는 그 위치에 대한 픽셀 값을 재구성함에 있어서 이용하기 위하여 팔레트에서 엔트리를 식별하기 위한 인덱스 값을 전송할 수도 있다. 블록에서의 위치에 대한 픽셀 값이 픽셀 값과, 델타 값보다 모두 더 큰 팔레트에서의 기존의 픽셀 값 엔트리들과의 사이의 절대 차이 값들을 생성할 경우, 비디오 인코더 (20) 는 픽셀 값을 전송할 수도 있고, 픽셀 값을 팔레트에서의 새로운 엔트리로서 추가할 수도 있다. 팔레트를 구성하기 위하여, 비디오 디코더 (30) 는 예컨대, 위에서 설명된 바와 같이, 인코더에 의해 시그널링된 델타 값들을 이용할 수도 있거나, 고정된 또는 알려진 델타 값에 의존할 수도 있거나, 델타 값을 추론 또는 유도할 수도 있다.
위에서 언급된 바와 같이, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 비디오 데이터를 코딩할 때, 인트라-예측 모드, 인터-예측 모드, 무손실 코딩 팔레트 모드, 및 손실 코딩 팔레트 모드를 포함하는 코딩 모드들을 이용할 수도 있다. 본 개시의 일부의 양태들에 따르면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 팔레트-기반 코딩이 인에이블되는지 여부를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩할 수도 있다. 예를 들어, 각각의 CU 에서, 비디오 인코더 (20) 는 플래그 PLT_Mode_flag 와 같은 신택스 엘리먼트를 인코딩할 수도 있다. PLT_Mode_flag 또는 다른 신택스 엘리먼트는 팔레트-기반 코딩 모드가 소정의 CU (또는 다른 예들에서의 PU) 에 대하여 이용되어야 할 것인지 여부를 표시할 수도 있다. 예를 들어, 이 플래그는 CU 레벨에서 인코딩된 비디오 비트스트림에서 시그널링될 수도 있고, 그 다음으로, 인코딩된 비디오 비트스트림을 디코딩할 시에 비디오 디코더 (30) 에 의해 수신될 수도 있다.
이 예에서, 1 과 동일한 이 PLT_Mode_flag 의 값은, 현재의 CU 가 팔레트-기반 코딩 모드를 이용하여 인코딩되는 것을 특정할 수도 있다. 이 경우, 비디오 디코더 (30) 는 CU 를 디코딩하기 위하여 팔레트-기반 코딩 모드를 적용할 수도 있다. 일부의 예들에서, 신택스 엘리먼트는 CU 에 대한 복수의 상이한 팔레트-기반 코딩 모드들 중의 하나를 표시할 수도 있다 (예컨대, 손실있음 또는 손실없음). 0 과 동일한 이 PLT_Mode_flag 의 값은, 현재의 CU 가 팔레트 모드 이외의 모드를 이용하여 인코딩되는 것을 특정할 수도 있다. 예를 들어, 다양한 인터-예측, 인트라-예측, 또는 다른 코딩 모드들 중의 임의의 것이 이용될 수도 있다. PLT_Mode_flag 의 값이 0 일 때, 비디오 인코더 (20) 는 또한, 각각의 CU 를 인코딩하기 위하여 이용된 특정 모드 (예컨대, HEVC 코딩 모드) 를 표시하기 위하여 추가적인 데이터를 인코딩할 수도 있다. PLT_Mode_flag 의 이용은 예시의 목적들을 위하여 설명된다. 그러나, 다른 예들에서, 멀티-비트 코드들과 같은 다른 신택스 엘리먼트들은 팔레트-기반 코딩 모드가 CU (또는 다른 예들에서의 PU) 에 대하여 이용되어야 할 것인지 여부를 표시하거나, 또는 복수의 모드들 중의 어느 것이 코딩을 위하여 이용되어야 할 것인지를 표시하기 위하여 이용될 수도 있다.
일부의 예들에서, 상기 설명된 플래그 또는 다른 신택스 엘리먼트들은 CU (또는 PU) 레벨보다 더 높은 레벨에서 송신될 수도 있다. 예를 들어, 비디오 인코더 (20) 는 슬라이스 레벨에서 이러한 플래그를 시그널링할 수도 있다. 이 경우, 1 과 동일한 값은 슬라이스에서의 CU 들 전부가 팔레트 모드를 이용하여 인코딩되는 것을 표시한다. 이 예에서, 예컨대, 팔레트 모드 또는 다른 모드들에 대한 추가적인 모드 정보는 CU 레벨에서 시그널링되지 않는다. 다른 예에서, 비디오 인코더 (20) 는 PPS, SPS 또는 VPS 에서 이러한 플래그를 시그널링할 수도 있다.
본 개시의 일부의 양태들에 따르면, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 팔레트 모드가 특정 슬라이스, 픽처, 시퀀스 등등에 대하여 인에이블 또는 디스에이블되는지 여부를 특정하는 (예컨대, 상기 설명된 플래그와 같은) 하나 이상의 신택스 엘리먼트들을 슬라이스, PPS, SPS, 또는 VPS 레벨들 중의 하나에서 코딩할 수도 있는 반면, PLT_Mode_flag 는 팔레트-기반 코딩 모드가 각각의 CU 에 대하여 이용되는지 여부를 표시한다. 이 경우, 슬라이스, PPS, SPS 또는 VPS 레벨에서 전송된 플래그 또는 다른 신택스 엘리먼트가 팔레트 코딩 모드가 디스에이블되는 것을 표시할 경우, 일부의 예들에서는, 각각의 CU 에 대하여 PLT_Mode_flag 를 시그널링할 필요성이 없을 수도 있다. 대안적으로, 슬라이스, PPS, SPS, 또는 VPS 레벨에서 전송된 플래그 또는 다른 신택스 엘리먼트가 팔레트 코딩 모드가 인에이블되는 것을 표시할 경우, PLT_Mode_flag 는 팔레트-기반 코딩 모드가 각각의 CU 에 대하여 이용되어야 할 것인지 여부를 표시하기 위하여 추가로 시그널링될 수도 있다. 다시, 위에서 언급된 바와 같이, CU 의 팔레트-기반 코딩을 표시하기 위한 이 기법들의 적용은 추가적으로 또는 대안적으로, PU 의 팔레트-기반 코딩을 표시하기 위하여 이용될 수 있다.
일부의 예들에서, 상기 설명된 신택스 엘리먼트들은 비트스트림에서 조건적으로 시그널링될 수도 있다. 예를 들어, 비디오 인코더 (20) 및 비디오 디코더 (30) 가 CU 의 사이즈, 프레임 타입, 컬러 공간, 컬러 컴포넌트, 프레임 사이즈, 프레임 레이트, 스케일러블 비디오 코딩에서의 계층 id 또는 멀티-뷰 코딩에서의 뷰 id 에 기초하여 신택스 엘리먼트들을 각각 인코딩 또는 디코딩하기만 할 수도 있다.
위에서 설명된 예들은 예컨대, 비트스트림에서의 하나 이상의 신택스 엘리먼트들에 의한 명시적 시그널링에 관한 것이지만, 다른 예들에서는, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 가 팔레트 코딩 모드가 활성이고 및/또는 특정 블록을 코딩하기 위하여 이용되는지 여부를 묵시적으로 결정할 수도 있다. 비디오 인코더 (20) 및 비디오 디코더 (30) 는 예를 들어, CU 의 사이즈, 프레임 타입, 컬러 공간, 컬러 컴포넌트, 프레임 사이즈, 프레임 레이트, 스케일러블 비디오 코딩에서의 계층 id 또는 멀티-뷰 코딩에서의 뷰 id 에 기초하여 팔레트-기반 코딩이 블록에 대해 이용되는지 여부를 결정할 수도 있다.
도 4 의 기법들이 CU 들 (HEVC) 의 맥락에서 위에서 설명되지만, 기법들은 또한, 예측 유닛들 (PU 들) 에 대하여, 또는 다른 비디오 코딩 프로세스들 및/또는 표준들에서 적용될 수도 있다는 것이 이해되어야 한다.
도 5 는 본 개시의 기법들과 부합하는, 비디오 블록에 대한 팔레트로의 인덱스들을 결정하는 예들을 예시하는 개념도이다. 예를 들어, 도 5 는 인덱스 값들과 연관된 픽셀들의 각각의 위치들을 팔레트들 (244) 의 엔트리에 관련시키는 인덱스 값들 (값들 1, 2, 및 3) 의 맵 (240) 을 포함한다. 팔레트들 (244) 은 도 4 에 대하여 위에서 설명된 제 1 팔레트들 (184) 및 제 2 팔레트들 (192) 과 유사한 방식으로 결정될 수도 있다.
다시, 도 5 의 기법들은 비디오 인코더 (20) (도 1 및 도 2) 및 비디오 디코더 (30) (도 1 및 도 3) 의 맥락에서, 그리고 설명의 목적들을 위한 HEVC 비디오 코딩 표준에 대하여 설명된다. 그러나, 본 개시의 기법들이 이러한 방식으로 제한되는 것은 아니며, 다른 비디오 코딩 프로세스들 및/또는 표준들에서 다른 비디오 코딩 프로세서들 및/또는 디바이스들에 의해 적용될 수도 있다는 것이 이해되어야 한다.
맵 (240) 은 각각의 픽셀 위치에 대한 인덱스 값을 포함하는 것으로서 도 5 의 예에서 도시되지만, 다른 예들에서는, 모든 픽셀 위치들이 블록의 픽셀 값을 특정하는 팔레트들 (244) 의 엔트리를 표시하는 인덱스 값과 연관되지는 않을 수도 있다는 것이 이해되어야 한다. 즉, 위에서 언급된 바와 같이, 일부의 예들에서, 비디오 인코더 (20) 는 픽셀 값이 팔레트들 (244) 내에 포함되지 않을 경우, 맵 (240) 에서의 위치에 대한 실제적인 픽셀 값 (또는 그 양자화 버전) 의 표시를 인코딩할 수도 있다 (그리고 비디오 디코더 (30) 는 이 표시를 인코딩된 비트스트림으로부터 획득할 수도 있다).
일부의 예들에서, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 어느 픽셀 위치들이 인덱스 값들과 연관되는지를 표시하는 추가적인 맵을 코딩하도록 구성될 수도 있다. 예를 들어, 맵에서의 (i, j) 엔트리는 CU 의 (i, j) 위치에 대응하는 것으로 가정한다. 비디오 인코더 (20) 는 엔트리가 연관된 인덱스 값을 가지는지 여부를 표시하는, 맵의 각각의 엔트리 (즉, 각각의 픽셀 위치) 에 대한 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 CU 에서의 (i, j) 로케이션에서의 픽셀 값이 팔레트들 (244) 에서의 값들 중의 하나인 것을 표시하기 위하여 1 의 값을 가지는 플래그를 인코딩할 수도 있다. 비디오 인코더 (20) 는 이러한 예에서, 또한, 그 픽셀 값을 팔레트에서 표시하고 비디오 디코더가 픽셀 값을 재구성하도록 하기 위하여 (도 5 의 예에서 값들 1 내지 3 으로서 도시된) 팔레트 인덱스를 인코딩할 수도 있다. 팔레트들 (244) 이 단일 엔트리 및 연관된 픽셀 값을 포함하는 사례들에서, 비디오 인코더 (20) 는 인덱스 값의 시그널링을 스킵할 수도 있다. 비디오 인코더 (20) 는 CU 에서의 (i, j) 로케이션에서의 픽셀 값이 팔레트들 (244) 에서의 값들 중의 하나가 아니라는 것을 표시하기 위하여 제로의 값을 가지는 플래그를 인코딩할 수도 있다. 이 예에서, 비디오 인코더 (20) 는 또한, 픽셀 값을 재구성함에 있어서 비디오 디코더 (30) 에 의한 이용을 위하여 픽셀 값의 표시를 인코딩할 수도 있다. 일부의 사례들에서, 픽셀 값은 손실 방식으로 코딩될 수도 있다.
CU 의 하나의 위치에서의 픽셀의 값은 CU 의 다른 위치들에서의 하나 이상의 다른 픽셀들의 값들의 표시를 제공할 수도 있다. 예를 들어, CU 의 이웃하는 픽셀 위치들이 동일한 픽셀 값을 가질 것이거나, (하나를 초과하는 픽셀 값이 단일 인덱스 값으로 맵핑될 수도 있는 손실 코딩의 경우에) 동일한 인덱스 값으로 맵핑될 수도 있다는 상대적으로 높은 확률이 있을 수도 있다.
따라서, 본 개시의 양태들에 따르면, 비디오 인코더 (20) 는 동일한 픽셀 값 또는 인덱스 값을 가지는, 소정의 스캔 순서에서의 연속적인 픽셀들 또는 인덱스 값들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 위에서 언급된 바와 같이, 유사-값의 픽셀 또는 인덱스 값들의 스트링은 본원에서 런으로서 지칭될 수도 있다. 예시의 목적들을 위한 예에서, 소정의 스캔 순서에서의 2 개의 연속적인 픽셀들 또는 인덱스들이 상이한 값들을 가질 경우, 런은 제로와 동일하다. 소정의 스캔 순서에서의 2 개의 연속적인 픽셀들 또는 인덱스들이 동일한 값을 가지지만 스캔 순서에서의 제 3 픽셀 또는 인덱스가 상이한 값을 가질 경우, 런은 1 과 동일하다. 동일한 값을 갖는 3 개의 연속적인 인덱스들 또는 픽셀들에 대하여, 런은 2 이고, 기타 등등과 같다. 비디오 디코더 (30) 는 인코딩된 비트스트림으로부터 런을 표시하는 신택스 엘리먼트들을 획득할 수도 있고, 동일한 픽셀 또는 인덱스 값을 가지는 연속적인 로케이션들의 수를 결정하기 위하여 데이터를 이용할 수도 있다.
일부의 예들에서, 현재의 CU 에 대한 팔레트 내에 있는 픽셀 값들을 가지는 현재의 CU 에서의 모든 픽셀 로케이션들은 팔레트 인덱스와, 그 다음으로, 연속적인 픽셀 로케이션들에서의 픽셀 값의 "런" 으로 인코딩된다. 팔레트에서 하나의 엔트리만 있을 경우에는, 팔레트 인덱스 또는 "런" 의 송신이 현재의 CU 에 대해 스킵될 수도 있다. 현재의 CU 에서의 픽셀 로케이션들 중의 하나에서의 픽셀 값이 팔레트에서의 픽셀 값과 정확한 일치를 가지지 않을 경우에는, 비디오 인코더 (20) 가 가장 근접한 픽셀 값을 가지는 팔레트 엔트리들 중의 하나를 선택할 수도 있고, 원래의 픽셀 값 및 팔레트 내에 포함된 예측 픽셀 값 사이의 예측 에러 또는 잔차 값을 계산할 수도 있다. 비디오 인코더 (20) 는 픽셀 로케이션에 대한 잔차 값을 인코딩하고 비디오 디코더로 송신한다. 다음으로, 비디오 디코더 (30) 는 대응하는 수신된 팔레트 인덱스에 기초하여 픽셀 로케이션에서의 픽셀 값을 유도할 수도 있고, 다음으로, 유도된 픽셀 값 및 잔차 값은 현재의 CU 에서의 픽셀 로케이션에서 원래의 픽셀 값을 예측하기 위하여 이용된다. 하나의 예에서는, 잔차 값을 변환하고, 변환 계수들을 양자화하고, 양자화된 변환 계수들을 엔트로피 인코딩하기 위하여 RQT 를 적용하는 것과 같은, HEVC 초안 10 에 의해 특정된 HEVC 방법을 이용하여 잔차 값이 인코딩된다. 일부의 경우들에는, 상기 예가 손실 코딩으로서 지칭될 수도 있다.
예시의 목적들을 위한 예에서는, 맵 (240) 의 라인 (248) 을 고려한다. 수평의 좌-우 스캔 방향을 가정하면, 라인 (248) 은 "2" 의 5 개의 인덱스 값들 및 "3" 의 3 개의 인덱스 값들을 포함한다. 본 개시의 양태들에 따르면, 비디오 인코더 (20) 는 스캔 방향에서 라인 (248) 의 제 1 위치에 대하여 2 의 인덱스 값을 인코딩할 수도 있다. 게다가, 비디오 인코더 (20) 는 시그널링된 인덱스 값과 동일한 인덱스 값을 가지는 스캔 방향에서 연속적인 값들의 런을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 라인 (248) 의 예에서, 비디오 인코더 (20) 는 4 의 런을 시그널링할 수도 있음으로써, 스캔 방향에서의 뒤따르는 4 개의 위치들의 인덱스 값들이 시그널링된 인덱스 값과 동일한 인덱스 값을 공유하는 것을 표시할 수도 있다. 비디오 인코더 (20) 는 라인 (248) 에서 다음의 상이한 인덱스 값에 대하여 동일한 프로세스를 수행할 수도 있다. 즉, 비디오 인코더 (20) 는 3 의 인덱스 값 및 2 의 런을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 비디오 디코더 (30) 는 인덱스 값과, 동일한 인덱스 값을 가지는 스캔 방향에서의 연속적인 인덱스들의 수 (런) 를 표시하는 신택스 엘리먼트들을 획득할 수도 있다.
위에서 언급된 바와 같이, 맵의 인덱스들은 특정 순서로 스캔된다. 본 개시의 양태들에 따르면, 스캔 방향은 수직, 수평, 또는 대각 (예컨대, 블록에서 대각선으로 45 도 또는 135 도) 일 수도 있다. 일부의 예들에서, 비디오 인코더 (20) 는 블록의 인덱스들을 스캔하기 위한 스캔 방향을 표시하는, 각각의 블록에 대한 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 추가적으로 또는 대안적으로, 스캔 방향은 예를 들어, 블록 사이즈, 컬러 공간, 및/또는 컬러 컴포넌트와 같은 소위 부가 정보에 기초하여 시그널링되거나 추론될 수도 있다. 비디오 인코더 (20) 는 블록의 각각의 컬러 컴포넌트에 대한 스캔들을 특정할 수도 있다. 대안적으로, 특정된 스캔은 블록의 모든 컬러 컴포넌트들에 적용할 수도 있다.
예를 들어, 컬럼 기반 스캔에 대하여, 맵 (240) 의 컬럼 (252) 을 고려한다. 수직의 상-하 스캔 방향을 가정하면, 컬럼 (252) 은 "1" 의 하나의 인덱스 값, "2" 의 5 개의 인덱스 값들, 및 "3" 의 2 개의 인덱스 값들을 포함한다. 본 개시의 양태들에 따르면, 비디오 인코더 (20) 는 (컬럼 (252) 의 상대적 상부에서) 스캔 방향에서의 라인 (252) 의 제 1 위치에 대하여 1 의 인덱스 값을 인코딩할 수도 있다. 게다가, 비디오 인코더 (20) 는 제로의 런을 시그널링할 수도 있음으로써, 스캔 방향에서의 뒤따르는 위치의 인덱스 값이 상이하다는 것을 표시할 수도 있다. 다음으로, 비디오 인코더 (20) 는 스캔 방향에서의 다음의 위치에 대한 2 의 인덱스 값과, 4 의 런, 즉, 스캔 방향에서의 뒤따르는 4 개의 위치들의 인덱스 값들이 시그널링된 인덱스 값과 동일한 인덱스 값을 공유한다는 것을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 다음으로, 비디오 인코더 (20) 는 스캔 방향에서의 다음의 상이한 인덱스 값에 대한 3 의 인덱스 값과, 1 의 런을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 비디오 디코더 (30) 는 인덱스 값과, 동일한 인덱스 값을 가지는 스캔 방향에서의 연속적인 인덱스들의 수 (런) 를 표시하는 신택스 엘리먼트들을 획득할 수도 있다.
본 개시의 양태들에 따르면, 비디오 인코더 (20) 및 비디오 디코더 (30) 는 추가적으로 또는 대안적으로, 맵 (240) 의 하나 이상의 엔트리들에 대한 라인 복사를 수행할 수도 있다. 라인 복사는 일부의 예들에서, 스캔 방향에 종속될 수도 있다. 예를 들어, 비디오 인코더 (20) 는 맵에서의 특정 엔트리에 대한 픽셀 또는 인덱스 값이 (수평 스캔에 대하여) 특정 엔트리 상부의 라인, 또는 (수직 스캔에 대하여) 특정 엔트리 좌측의 컬럼에서의 픽셀 또는 인덱스 값과 동일한 것을 표시할 수도 있다. 비디오 인코더 (20) 는 또한, 특정 엔트리의 상부의 라인 또는 좌측의 컬럼에서의 엔트리와 동일한, 스캔 순서에서의 픽셀 또는 인덱스 값들의 수를, 런으로서 표시할 수도 있다. 이 예에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 특정된 이웃하는 라인으로부터, 그리고 현재 코딩되고 있는 맵의 라인에 대한 특정된 수의 엔트리들로부터 픽셀 또는 인덱스 값들을 복사할 수도 있다.
예시의 목적들을 위한 예에서는, 맵 (240) 의 컬럼들 (256 및 260) 을 고려한다. 수직의 상-하 스캔 방향을 가정하면, 컬럼 (256) 은 "1" 의 3 개의 인덱스 값들, "2" 의 3 개의 인덱스 값들, 및 "3" 의 2 개의 인덱스 값들을 포함한다. 컬럼 (260) 은 스캔 방향에서 동일한 순서를 가지는 동일한 인덱스 값들을 포함한다. 본 개시의 양태들에 따르면, 비디오 인코더 (20) 는 전체 컬럼 (260) 이 컬럼 (256) 으로부터 복사되는 것을 표시하는, 컬럼 (260) 에 대한 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 하나 이상의 신택스 엘리먼트들은 맵 (240) 의 상대적인 상부에서 컬럼 (260) 의 제 1 엔트리와 연관될 수도 있다. 비디오 디코더 (30) 는 라인 복사를 표시하는 신택스 엘리먼트들을 획득할 수도 있고, 컬럼 (260) 을 디코딩할 때에 컬럼 (260) 에 대한 컬럼 (256) 의 인덱스 값들을 복사할 수도 있다.
본 개시의 양태들에 따르면, 소위 엔트리들의 런들을 코딩하기 위한 기법들은 위에서 설명된 라인 복사를 위한 기법들과 함께 이용될 수도 있다. 예를 들어, 비디오 인코더 (20) 는 맵에서의 엔트리의 값이 팔레트로부터 획득되는지, 또는 맵에서의 엔트리의 값이 맵 (240) 에서의 이전에 코딩된 라인으로부터 획득되는지 여부를 표시하는 하나 이상의 신택스 엘리먼트들 (예컨대, 플래그) 을 인코딩할 수도 있다. 비디오 인코더 (20) 는 또한, 팔레트의 인덱스 값 또는 라인 (로우 또는 컬럼) 에서의 엔트리의 로케이션을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 비디오 인코더 (20) 는 또한, 동일한 값을 공유하는 연속적인 엔트리들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 비디오 디코더 (30) 는 인코딩된 비트스트림으로부터 이러한 정보를 획득할 수도 있고, 블록에 대한 픽셀 값들 및 맵을 재구성하기 위하여 정보를 이용할 수도 있다.
예시의 목적들을 위한 예에서, 맵 (240) 의 로우들 (264 및 268) 을 고려한다. 수평의 좌-우 스캔 방향을 가정하면, 로우 (264) 는 "1" 의 5 개의 인덱스 값들 및 "3" 의 3 개의 인덱스 값들을 포함한다. 로우 (268) 는 "1" 의 3 개의 인덱스 값들, "2" 의 2 개의 인덱스 값들, 및 "3" 의 3 개의 인덱스 값들을 포함한다. 이 예에서, 비디오 인코더 (20) 는 로우 (264) 의 특정 엔트리들과, 그 다음으로, 로우 (268) 에 대하여 데이터를 인코딩할 때에 런을 식별할 수도 있다. 예를 들어, 비디오 인코더 (20) 는 로우 (268) 의 제 1 위치 (로우 (268) 의 가장 좌측 위치) 가 로우 (264) 의 제 1 위치와 동일한 것을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 비디오 인코더 (20) 는 또한, 로우 (268) 에서의 스캔 방향에서 2 개의 연속적인 엔트리들의 다음 런이 로우 (264) 의 제 1 위치와 동일한 것을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다.
일부의 예들에서, 비디오 인코더 (20) 는 또한, 또 다른 로우 (또는 컬럼) 에서의 위치에 관련하여 현재의 픽셀 또는 인덱스 값을 코딩할 것인지, 또는 런 신택스 엘리먼트를 이용하여 현재의 픽셀 또는 인덱스 값을 코딩할 것인지 여부를 결정할 수도 있다. 예를 들어, 로우 (264) 의 제 1 위치 및 (위에서 언급된) 2 개 엔트리들의 런을 표시하는 하나 이상의 신택스 엘리먼트를 인코딩한 후에, 비디오 인코더 (20) 는 (좌측으로부터 우측으로) 라인 (268) 에서의 제 4 및 제 5 위치들에 대하여, 제 4 위치에 대하여 2 의 값을 표시하는 하나 이상의 신택스 엘리먼트들과, 1 의 런을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩할 수도 있다. 이 때문에, 비디오 인코더 (20) 는 또 다른 라인 (또는 컬럼) 을 참조하지 않고 이 2 개의 위치들을 인코딩한다. 그 다음으로, 비디오 인코더 (20) 는 (예컨대, 상부 로우 (264) 로부터의 복사, 및 동일한 인덱스 값을 가지는 스캔 순서에서의 연속적인 위치들의 런을 표시하는) 상부 로우 (264) 에 관련하여 로우 (268) 에서의 3 의 인덱스 값을 가지는 제 1 위치를 코딩할 수도 있다. 이 때문에, 본 개시의 양태들에 따르면, 비디오 인코더 (20) 는 예컨대, 런을 이용하여 라인 (또는 컬럼) 의 다른 값들에 관련하여 라인 (또는 컬럼) 의 픽셀 또는 인덱스 값들을 코딩하거나, 또 다른 라인 (또는 컬럼) 의 값들에 관련하여 라인 (또는 컬럼) 의 픽셀 또는 인덱스 값들을 코딩하거나, 또는 이들의 조합 사이에서 선택할 수도 있다. 일부의 예들에서, 비디오 인코더 (20) 는 선택을 행하기 위하여 레이트/왜곡 최적화를 수행할 수도 있다.
비디오 디코더 (30) 는 위에서 설명된 신택스 엘리먼트들을 수신할 수도 있고, 로우 (268) 를 재구성할 수도 있다. 예를 들어, 비디오 디코더 (30) 는 현재 코딩되고 있는 맵 (240) 의 위치에 대한 연관된 인덱스 값을 복사하기 위한 이웃하는 로우에서의 특정 로케이션을 표시하는 데이터를 획득할 수도 있다. 비디오 디코더 (30) 는 또한, 동일한 인덱스 값을 가지는 스캔 순서에서 연속적인 위치들의 수를 표시하는 데이터를 획득할 수도 있다.
일부의 사례들에서, 엔트리들이 복사되는 라인은 (도 5 의 예들에서 예시된 바와 같이) 현재 코딩되고 있는 라인의 엔트리에 직접적으로 인접할 수도 있다. 그러나, 다른 예들에서, 다수의 라인들은 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 에 의해 버퍼링될 수도 있어서, 맵의 다수의 라인들 중의 임의의 것은 현재 코딩되고 있는 맵의 라인에 대한 예측 엔트리들로서 이용될 수도 있다. 이 때문에, 일부의 예들에서, 엔트리에 대한 픽셀 값은 현재의 로우 바로 상부의 로우 (또는 그 좌측의 컬럼) 또는 현재의 로우 상부의 2 이상의 로우들 (또는 그 좌측의 컬럼) 에서의 엔트리의 픽셀 값과 동일하도록 시그널링될 수도 있다.
예시의 목적들을 위한 예에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 엔트리들의 현재의 로우를 코딩하기 이전에 엔트리들의 이전의 n 개의 로우들을 저장하도록 구성될 수도 있다. 이 예에서, 비디오 인코더 (20) 는 절단된 1진 코드 또는 다른 코드들을 갖는 비트스트림에서 예측 로우 (엔트리들이 복사되는 로우) 를 표시할 수도 있다. 또 다른 예에서, 비디오 인코더 (20) 는 현재의 라인을 코딩하기 위한 참조로서 이용된 맵 (240) 의 예측 라인과 현재 라인과의 사이의 변위 값을 인코딩할 수도 있다 (그리고 디코더 (30) 는 디코딩할 수도 있다). 즉, 비디오 인코더 (20) 는 인덱스 값이 복사되는 특정 라인 (또는 컬럼) 의 표시를 인코딩할 수도 있다. 일부의 예들에서, 변위 값은 변위 벡터일 수도 있다. 즉, c[0], c[1], ..., 는 맵 (240) 의 현재의 라인의 인덱스들을 나타낸다고 하고, u[0], u[1], u[2], ..., 는 상부의 이웃하는 라인과 같은 맵 (240) 의 예측 라인의 인덱스들을 나타낸다고 한다. 이 예에서, 변위 벡터가 d 인 것으로 주어지면, c[i] 에 대한 인덱스 값은 u[i+d] 로부터, 또는 d 가 네거티브 값들을 취하는 것을 회피하기 위하여 u[i-d] 로부터 예측될 수도 있다. d 의 값은 1진, 절단된 1진, 지수 골롬 또는 골롬 라이스 코드들을 이용하여 코딩될 수도 있다.
또 다른 예로서, 비디오 인코더 (20) 는, 현재 코딩되고 있는 맵의 라인으로 복사하기 위하여 이웃하는 라인 및 이웃하는 라인의 엔트리들의 수 또는 부분을 표시하는, "상부 라인 좌측 절반으로부터 복사" 또는 "상부 라인 우측 절반으로부터 복사" 와 같은 명령을 시그널링할 수도 있다. 추가적인 예로서, 인덱스 값들의 맵은 코딩하기 전에 재순서화될 수도 있다. 예를 들어, 인덱스 값들의 맵은 코딩 효율을 개선시키기 위하여 90, 180 또는 270 도만큼 회전될 수도 있거나, 상부면 하부로 또는 좌측면 우측으로 플립될 수도 있다.
다른 예들에서, 비디오 인코더 (20) 는 맵 (240) 의 유사-값의 인덱스 값들의 런들을 비디오 디코더 (30) 로 송신하지 않을 수도 있다. 이 경우, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 런들의 값들을 묵시적으로 유도할 수도 있다. 하나의 예에서, 런의 값은 일정한 값, 예컨대, 4, 8, 16 등등일 수도 있다. 또 다른 예에서, 런의 값은 예를 들어, 블록 사이즈, 양자화 파라미터 (QP), 프레임 타입, 컬러 컴포넌트, 컬러 포맷 (예컨대, 4:4:4, 4:2:2, 또는 4:2:0), 컬러 공간 (예컨대, YUV 또는 RGB), 스캔 방향 및/또는 현재의 블록에 대한 다른 타입들의 특성 정보와 같은, 코딩되고 있는 비디오 데이터의 현재의 블록에 대한 부가 정보에 종속적일 수도 있다. 런의 값이 블록 사이즈에 종속되는 경우, 런은 현재의 블록의 폭, 현재의 블록의 높이, 현재의 블록의 절반의 폭 (또는 절반의 높이), 현재의 블록의 폭 및/또는 높이의 분수, 또는 현재의 블록의 폭 및/또는 높이의 배수와 동일할 수도 있다. 또 다른 예에서, 비디오 인코더 (20) 는 픽처 파라미터 세트 (PPS), 시퀀스 파라미터 세트 (SPS), 비디오 파라미터 세트 (VPS) 및/또는 슬라이스 헤더에서의 신택스와 같은 하이 레벨 신택스를 이용하여 런의 값을 비디오 디코더 (30) 로 시그널링할 수도 있다.
추가적으로 또는 대안적으로, 비디오 인코더 (20) 는 맵 (240) 을 비디오 디코더 (30) 로 심지어 송신할 필요가 없을 수도 있다. 그 대신에, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 맵 (240) 내에 포함된 인덱스 값들의 각각의 런의 시작 위치 또는 로케이션을 묵시적으로 유도할 수도 있다. 하나의 예에서, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 에 의해 적용된 비디오 코딩 표준은 런이 어떤 로케이션들에서 시작하기만 할 수 있는 것으로 결정할 수도 있다. 예를 들어, 런은 각각의 로우의 시작, 또는 코딩되고 있는 현재의 블록의 매 N 로우들의 시작에서 시작하기만 할 수도 있다. 시작 로케이션은 상이한 스캔 방향들에 대해 상이할 수도 있다. 예를 들어, 수직 스캔이 이용될 경우, 런은 컬럼의 시작, 또는 현재의 블록의 매 N 컬럼들의 시작에서 시작하기만 할 수도 있다.
또 다른 예에서, 시작 로케이션은 예를 들어, 블록 사이즈, QP, 프레임 타입, 컬러 컴포넌트, 컬러 포맷 (예컨대, 4:4:4, 4:2:2, 또는 4:2:0), 컬러 공간 (예컨대, YUV 또는 RGB), 스캔 방향 및/또는 현재의 블록에 대한 다른 타입들의 특성 정보와 같은, 현재의 블록에 대한 부가 정보에 따라 유도될 수도 있다. 런의 시작 로케이션이 블록 사이즈에 종속될 경우, 시작 로케이션은 각각의 로우 및/또는 각각의 컬럼의 중간-포인트, 또는 각각의 로우 및/또는 컬럼의 분수 (예컨대, 1/n, 2/n, … (n-1)/n) 일 수도 있다. 또 다른 예에서, 비디오 인코더 (20) 는 PPS, SPS, VPS 및/또는 슬라이스 헤더에서의 신택스와 같은 하이 레벨 신택스를 이용하여 시작 위치를 비디오 디코더 (30) 로 시그널링할 수도 있다.
일부의 예들에서는, 위에서 각각 설명된 묵시적 시작 위치 유도 및 묵시적 런 유도가 조합될 수도 있다. 예를 들어, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 맵의 유사-값의 인덱스 값들의 런이 2 개의 이웃하는 시작 위치들 사이의 거리와 동일한 것으로 결정할 수도 있다. 시작 위치가 현재의 블록의 매 로우의 시작 (즉, 제 1 위치) 인 경우, 비디오 인코더 (20) 및/또는 비디오 디코더 (30) 는 런의 길이가 현재의 블록의 전체의 로우의 길이와 동일한 것으로 결정할 수도 있다.
도 6 은 본 개시의 기법들과 부합하는, 크로마 컴포넌트들에 대해 적응적으로 다운샘플링된 루마 컴포넌트에 대한 팔레트 인덱스들의 런을 이용하여 비디오 블록의 기하학적 에지 (270, 272, 또는 274) 를 결정하는 예들을 예시하는 개념도이다. 도 6 에서, 루마 샘플들은 비어있는 원들로서 예시되고, 크로마 샘플들은 x-기호와 중첩된 루마 샘플들의 하나로서 예시된다. 도 6 은 비디오 블록의 기하학적 에지 (270, 272, 또는 274) 의 로케이션에 기초하여 루마 및 크로마 컴포넌트들에 대한 상이한 런 값들의 예들을 예시한다.
일부의 경우들에는, 하나의 팔레트가 생성되고 현재의 블록에서 다수의 컬러 컴포넌트들에 대해 공유되고, 다른 경우들에는, 별도의 팔레트들이 컬러 컴포넌트들 중의 하나 이상에 대해 생성된다. 하나의 경우에 있어서, 하나의 팔레트는 루마 컴포넌트에 대해 생성될 수도 있고, 또 다른 팔레트는 양자의 크로마 컴포넌트들에 대해 생성될 수도 있다. 어떤 경우든, 기하학적 정보는 컬러 컴포넌트들 사이에서 공유될 수도 있다. 통상적으로, 크로마 컴포넌트들은 4:2:2 또는 4:2:0 샘플링과 같은 사전-정의된 방식으로 루마 컴포넌트들로부터 다운샘플링되었을 수도 있으므로, 상이한 컬러 컴포넌트들에서의 공동위치된 블록들의 에지 로케이션들 사이에 높은 상관이 있다.
예를 들어, 팔레트-기반 코딩에서는, 현재의 블록의 에지가 런을 파괴할 것이므로, 런 코딩은 현재의 블록에 대한 기하학적 정보를 표시하기 위하여 이용될 수도 있다. 4:4:4 크로마 포맷의 경우, 런은 한 번 생성될 수도 있고 모든 컬러 컴포넌트들에 대해 이용될 수도 있다. 런은 컬러 컴포넌트들 중의 하나에 기초하여 생성될 수도 있거나, 런은 컬러 컴포넌트들 중의 하나를 초과하는 것을 이용하여 생성될 수도 있다. 4:2:2 크로마 포맷의 경우, 루마 컴포넌트에 대해 이용된 런은 크로마 컴포넌트들에 대한 적용을 위하여 2 배 수평으로 다운샘플링될 수도 있다. 4:2:0 크로마 포맷의 경우, 루마 컴포넌트에 대해 이용된 런은 크로마 컴포넌트들에 대한 적용을 위하여 2 배 수평 및 수직으로 다운샘플링될 수도 있다.
일부의 경우들에는, 런 다운샘플링 방법이 크로마 다운샘플링 방법에 대해 적응적일 수 있다. 이 경우, 크로마 컴포넌트들에 대한 다운샘플링된 런 값은 에지, 예컨대, 도 6 에서 도시된 바와 같은 비디오 블록의 에지 (270, 272, 또는 274) 의 로케이션에 따라 상이하게 계산될 수도 있다. 제 1 예에서, 도 6 은 루마 컴포넌트에 대한 런이 좌측 블록에서 값 "1" 과, 우측 블록에서 "3" 의 값을 가지도록 위치되는 2 개의 이웃하는 비디오 블록들 사이의 기하학적 에지 (270) 를 예시한다. 이 경우, 크로마 컴포넌트들에 대한 다운샘플링된 런은 좌측 블록 및 우측 블록의 양자에서 "1" 의 값을 가진다. 제 2 예에서, 도 6 은 루마 컴포넌트에 대한 런이 좌측 블록 및 우측 블록의 양자에서 값 "2" 를 가지도록 위치되는 2 개의 이웃하는 비디오 블록들 사이의 기하학적 에지 (272) 를 예시한다. 이 경우, 크로마 컴포넌트들에 대한 다운샘플링된 런은 좌측 블록 및 우측 블록의 양자에서 "1" 의 값을 가진다. 제 3 예에서, 도 6 은 루마 컴포넌트에 대한 런이 좌측 블록에서 값 "3" 과, 우측 블록에서 "1" 의 값을 가지도록 위치되는 2 개의 이웃하는 비디오 블록들 사이의 기하학적 에지 (274) 를 예시한다. 이 경우, 크로마 컴포넌트들에 대한 다운샘플링된 런은 좌측 블록에서 "2" 의 값과, 우측 블록에서 "0" 의 값을 가진다.
기하학적 정보에 추가하여, 모든 컬러 컴포넌트들의 픽셀 값에 대하여 단일 팔레트를 가지는 것이 또한 가능할 수도 있다. 예를 들어, 현재의 블록에서의 각각의 픽셀 로케이션에 대하여, 3 개의 컬러 컴포넌트들 (예컨대, Y 루마 및 양자의 U 및 V 크로마 컴포넌트들) 에서의 픽셀 값들은 벡터 (즉, 컬러 벡터) 를 형성할 수도 있다. 다음으로, 팔레트는 현재의 블록을 나타내기 위하여 어떤 수의 벡터들을 선택함으로써 형성될 수도 있다. 루마 컴포넌트에 대한 픽셀 값들의 하나의 팔레트와, 크로마 컴포넌트들에 대한 픽셀 값들의 또 다른 팔레트를 가지는 것이 가능할 수도 있다. 일부의 경우들에는, 기하학적 정보를 공유하고 컬러 벡터를 이용하는 픽셀 값들의 단일 팔레트를 가지는 2 개의 방법들을 조합하는 것이 또한 가능할 수도 있다.
일부의 예들에서, 본 개시의 어딘가에서 더욱 상세하게 설명된 라인 복사는 또한, 단일 팔레트와 함께 작동할 수도 있다. 이 경우, 각각의 픽셀 로케이션에 대한 팔레트 인덱스는 스캔이 수평일 경우에 상부 로우, 또는 스캔이 수직일 경우에는 좌측의 컬럼의 팔레트 인덱스와 동일한 것으로서 시그널링되고, 다음으로, 팔레트 인덱스들의 연관된 런은 또한, 이전의 로우 또는 컬럼으로부터 복사된다. 공유된 팔레트에 있어서, 팔레트 엔트리는 (Y, U, V) 의 트리플렛일 수도 있어서, 후자의 Y, U, V 값들은 팔레트 인덱스로부터 재구성될 수도 있다. 재구성된 값들은 디코딩된 픽셀 값들로서 작용할 수도 있거나, 디코딩된 픽셀 값들을 유도하기 위하여 잔차 값들과 조합되는 예측 값들로서 작용할 수도 있다. 4:2:2 크로마 포맷 및 4:2:0 크로마 포맷에서, 크로마 컴포넌트들은 루마 컴포넌트들과 비교하여 다운샘플링되었다. 2:1 다운샘플링의 예에서, 루마 위치들은 0, 1, 2, … 에 있을 수도 있고, 크로마 위치들은 1, 3, 5, … 에 있을 수도 있거나 0, 2, 4, … 에 있을 수도 있다. 크로마 컴포넌트들이 존재하지 않는 위치들에 대하여, 팔레트 엔트리에서의 U 및 V 컴포넌트들은 폐기될 수도 있다.
도 7 은 본 개시의 기법들과 부합하는, 팔레트-기반 코딩 모드를 이용하여 예측 잔차 비디오 데이터를 인코딩하기 위한 일 예의 프로세스를 예시하는 플로우차트이다. 도 7 에서 예시된 일 예의 프로세스는 도 2 로부터의 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 에 대하여 본원에서 설명된다. 다른 예들에서, 하나 이상의 다른 또는 추가적인 컴포넌트들은 도 7 에서 예시된 일 예의 프로세스를 수행할 수도 있다.
비디오 인코더 (20) 는 예측된 비디오 블록들의 팔레트-기반 비디오 코딩을 이용하여 인코딩되어야 할 현재의 비디오 블록의 비디오 데이터를 수신하고, 비디오 데이터를 팔레트-기반 인코딩 유닛 (122) 으로 전송한다. 팔레트-기반 인코딩 유닛 (122) 은 현재의 블록의 픽셀 값들 및 이전에 코딩된 참조 픽셀 값들에 기초하여 현재의 블록에 대한 예측 잔차 값들을 결정한다 (280).
팔레트기반 인코딩 유닛 (122) 은 임의의 예측 모드, 예컨대, HEVC 표준의 인터-예측 모드 또는 인트라-예측 모드를 이용하여 예측 잔차 값들을 계산할 수도 있다. 하나의 예에서, 팔레트-기반 인코딩 유닛 (122) 은 참조 블록에서의 이전에 코딩된 픽셀 값들을 이용하여 현재의 블록의 픽셀 값들을 예측하기 위하여 인터-예측 프로세싱 유닛 (120) 을 이용할 수도 있다. 또 다른 예에서, 팔레트-기반 인코딩 유닛 (122) 은 현재의 블록에서의 이전에 코딩된 픽셀 값들을 이용하여 현재의 블록의 픽셀 값들을 예측하기 위하여 인트라-예측 프로세싱 유닛 (126) 을 이용할 수도 있다.
일부의 경우들에는, 팔레트-기반 인코딩 유닛 (122) 이 예측 모드 프로세스들의 서브세트만을 이용하여 현재의 블록에 대한 예측 잔차 값들을 결정할 수도 있다. 예를 들어, 인트라 예측 모드의 경우, DC, 수평, 및/또는 수직 예측 프로세스들은 인에이블될 수도 있지만, 다른 인트라 예측 모드 프로세스들은 디스에이블될 수도 있다. 디스에이블된 프로세스들은 인트라 예측 모드에서의 필터링, 예컨대, MDIS, 1/32 펠 이중선형 보간, 에지 필터 또는 DC 필터를 포함할 수도 있다. 추가의 예로서, 인터 예측 모드의 경우, 픽셀들의 평균 프로세스, 예컨대, 가중화된 예측, 양방향-예측, 또는 서브-펠 보간 중의 하나 이상은 디스에이블될 수도 있다.
하나의 예에서, 현재의 블록에 대한 예측 잔차 값들은 현재의 블록에 대한 잔차 픽셀 값들일 수도 있다. 이 예에서, 팔레트-기반 인코딩 유닛 (122) 은 현재의 블록의 픽셀 값들 및 이전에 코딩된 참조 픽셀 값들로부터 현재의 블록에 대한 잔차 픽셀 값들을 계산한다. 다음으로, 팔레트-기반 인코딩 유닛 (122) 은 다음의 단계들에서 설명된 바와 같이 팔레트-기반 비디오 코딩을 이용하여 현재의 블록에 대한 잔차 픽셀 값들을 인코딩하도록 진행한다.
또 다른 예에서, 현재의 블록에 대한 예측 잔차 값들은 현재의 블록에 대한 잔차 양자화된 변환 계수 값들일 수도 있다. 이 예에서, 팔레트-기반 인코딩 유닛 (122) 은 현재의 블록의 픽셀 값들 및 이전에 코딩된 참조 픽셀 값들로부터 현재의 블록에 대한 잔차 픽셀 값들을 계산하고, 그 다음으로, 현재의 블록에 대한 잔차 양자화된 변환 계수 값들로 변환 및 양자화되도록 하기 위하여, 잔차 픽셀 값들을 변환 프로세싱 유닛 (104) 및 양자화 유닛 (106) 으로 전송한다. 다음으로, 팔레트-기반 인코딩 유닛 (122) 은 다음의 단계들에서 설명된 바와 같이 팔레트-기반 비디오 코딩을 이용하여 현재의 블록에 대한 잔차 양자화된 변환 계수들 값들을 인코딩하도록 진행한다.
팔레트-기반 인코딩 유닛 (122) 은 현재의 블록에 대한 예측 잔차 값들을 표시하는 하나 이상의 엔트리들을 포함하는 현재의 블록에 대한 팔레트를 생성한다 (282). 팔레트-기반 인코딩 유닛 (122) 은 현재의 블록에 대한 예측 잔차 값들 중의 하나 이상을, 현재의 블록에 대한 팔레트에서 예측 잔차 값들을 나타내기 위해 이용된 팔레트에서의 엔트리들을 식별하는 인덱스 값들로 맵핑한다 (284). 팔레트-기반 인코딩 유닛 (122) 은 현재의 블록에서의 하나 이상의 위치들에 대한 인덱스 값들을 인코딩한다 (286). 인코딩된 인덱스 값들은 현재의 블록에 대한 예측 잔차 값들을 나타내기 위해 이용되는 현재의 블록에 대한 팔레트 내에 포함된 예측 잔차 값들을 표시한다. 다음으로, 비디오 인코더 (20) 는 현재의 블록에서의 하나 이상의 위치들에 대한 인덱스 값들을 송신한다.
도 8 은 본 개시의 기법들과 부합하는, 팔레트-기반 코딩 모드를 이용하여 예측 잔차 비디오 데이터를 디코딩하기 위한 일 예의 프로세스를 예시하는 플로우차트이다. 도 8 에서 예시된 일 예의 프로세스는 도 3 으로부터의 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 에 대하여 본원에서 설명된다. 다른 예들에서, 하나 이상의 다른 또는 추가적인 컴포넌트들은 도 8 에서 예시된 일 예의 프로세스를 수행할 수도 있다.
비디오 디코더 (30) 는 팔레트-기반 코딩을 이용하여 코딩된 비디오 데이터를 나타내는 비트스트림을 수신하고, 엔트로피 디코딩된 비디오 데이터를 팔레트-기반 디코딩 유닛 (165) 으로 전송한다. 디코딩된 비트스트림 내에 포함된 하나 이상의 신택스 엘리먼트들에 기초하여, 팔레트-기반 디코딩 유닛 (165) 은 현재의 블록에 대한 예측 잔차 값들을 표시하는 하나 이상의 엔트리들을 포함하는 비디오 데이터의 현재의 블록에 대한 팔레트를 생성한다 (290). 다음으로, 팔레트-기반 디코딩 유닛 (165) 은 현재의 블록에서의 하나 이상의 위치들에 대한 인덱스 값들을 디코딩한다 (292). 디코딩된 인덱스 값들은 현재의 블록에 대한 예측 잔차 값들을 나타내기 위해 이용되는 현재의 블록에 대한 팔레트 내에 포함된 예측 잔차 값들을 표시한다.
팔레트-기반 디코딩 유닛 (165) 은 현재의 블록에 대한 예측 잔차 값들을 나타내는 팔레트에서의 엔트리들을 식별하는 인덱스 값들에 기초하여 현재의 블록에 대한 예측 잔차 값들 중의 하나 이상을 결정한다 (294). 팔레트기반 디코딩 유닛 (165) 은 임의의 예측 모드, 예컨대, HEVC 표준의 인터-예측 모드 또는 인트라-예측 모드를 이용하여 예측 잔차 값들을 계산할 수도 있다. 하나의 예에서, 팔레트-기반 디코딩 유닛 (165) 은 참조 블록에서의 이전에 코딩된 픽셀 값들을 이용하여 현재의 블록의 픽셀 값들을 예측하기 위하여 모션 보상 유닛 (164) 을 이용할 수도 있다. 또 다른 예에서, 팔레트-기반 디코딩 유닛 (165) 은 현재의 블록에서의 이전에 코딩된 픽셀 값들을 이용하여 현재의 블록의 픽셀 값들을 예측하기 위하여 인트라-예측 프로세싱 유닛 (166) 을 이용할 수도 있다.
일부의 경우들에는, 팔레트-기반 디코딩 유닛 (165) 이 예측 모드 프로세스들의 서브세트만을 이용하여 현재의 블록에 대한 예측 잔차 값들을 결정할 수도 있다. 예를 들어, 인트라 예측 모드의 경우, DC, 수평, 및/또는 수직 예측 프로세스들은 인에이블될 수도 있지만, 다른 인트라 예측 모드 프로세스들은 디스에이블될 수도 있다. 디스에이블된 프로세스들은 인트라 예측 모드에서의 필터링, 예컨대, MDIS, 1/32 펠 이중선형 보간, 에지 필터 또는 DC 필터를 포함할 수도 있다. 추가의 예로서, 인터 예측 모드의 경우, 픽셀들의 평균 프로세스, 예컨대, 가중화된 예측, 양방향-예측, 또는 서브-펠 보간 중의 하나 이상은 디스에이블될 수도 있다.
다음으로, 비디오 디코더 (30) 는 현재의 블록에 대한 예측 잔차 값들 및 이전에 코딩된 참조 픽셀 값들에 기초하여 현재의 블록의 픽셀 값들을 결정한다 (296). 하나의 예에서, 현재의 블록에 대한 예측 잔차 값들은 현재의 블록에 대한 잔차 픽셀 값들일 수도 있다. 이 경우, 비디오 디코더 (30) 는 잔차 픽셀 값들 및 이전에 코딩된 참조 픽셀 값들을 이용하여 현재의 블록의 픽셀 값들을 재구성한다. 또 다른 예에서, 현재의 블록에 대한 예측 잔차 값들은 현재의 블록에 대한 잔차 양자화된 변환 계수 값들일 수도 있다. 이 경우, 팔레트-기반 디코딩 유닛 (165) 은 먼저, 현재의 블록에 대한 잔차 픽셀 값들로 역양자화되고 영변환되도록 하기 위하여, 잔차 양자화된 변환 계수 값들을 역양자화 유닛 (154) 및 역변환 프로세싱 유닛 (156) 으로 전송한다. 다음으로, 비디오 디코더 (30) 는 잔차 픽셀 값들 및 이전에 코딩된 참조 픽셀 값들을 이용하여 현재의 블록의 픽셀 값들을 재구성한다.
도 9 는 본 개시의 기법들과 부합하는, 팔레트-기반 코딩을 위한 팔레트를 생성하기 위한 일 예의 프로세스를 예시하는 플로우차트이다. 도 9 에서 예시된 일 예의 프로세스는 도 3 으로부터의 비디오 디코더 (30) 의 팔레트-기반 디코딩 유닛 (165) 에 대하여 본원에서 설명된다. 다른 예들에서, 프로세스는 또한, 도 2 로부터의 비디오 인코더 (20) 의 팔레트-기반 인코딩 유닛 (122) 에 의해 수행될 수도 있다. 팔레트-기반 코딩을 위한 팔레트를 생성하기 위한 일 예의 프로세스는 픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 팔레트를 생성하기 위하여 이용될 수도 있다. 다른 예들에서, 유사한 프로세스는 예측 잔차 값들을 표시하는 팔레트 엔트리들을 포함하는 팔레트를 생성하기 위하여 이용될 수도 있다.
비디오 디코더 (30) 는 팔레트-기반 코딩을 이용하여 코딩된 비디오 데이터를 나타내는 비트스트림을 수신하고, 엔트로피 디코딩된 비디오 데이터를 팔레트-기반 디코딩 유닛 (165) 으로 전송한다. 팔레트-기반 디코딩 유닛 (165) 은 픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 예측 팔레트를 생성한다 (300). 일부의 예들에서, 팔레트-기반 디코딩 유닛 (165) 은 비디오 데이터의 하나 이상의 이전에 코딩된 블록들로부터의 팔레트 엔트리들을 포함하기 위한 예측 팔레트를 생성한다. 이전에 코딩된 블록들은 공간적으로 이웃하는 블록들 및/또는 블록들의 특정 스캔 순서에서 이웃하는 블록들을 포함하는 현재의 블록의 이웃하는 블록들을 포함할 수도 있다.
다음으로, 팔레트-기반 디코딩 유닛 (165) 은 엔트로피 디코딩된 비디오 데이터로부터, 현재의 블록에 대한 현재의 팔레트로 복사되는 예측 팔레트에서의 팔레트 엔트리들 중의 하나 이상을 결정한다 (302). 더욱 구체적으로, 팔레트-기반 디코딩 유닛 (165) 은 예측 팔레트에서의 팔레트 엔트리들의 각각이 현재의 팔레트로 복사되는지 여부를 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩할 수도 있다. 하나의 예에서, 하나 이상의 신택스 엘리먼트들은, 각각의 팔레트 엔트리가 현재의 팔레트로 복사되는지 여부를 표시하는 예측 팔레트에서의 팔레트 엔트리들의 각각에 대한 플래그를 포함하는 2진 벡터를 포함한다. 또 다른 예에서, 하나 이상의 신택스 엘리먼트들은 2진 벡터의 무손실 압축된 버전을 포함하고, 여기서, 2진 벡터의 비압축 버전은 각각의 팔레트 엔트리가 현재의 팔레트로 복사되는지 여부를 표시하는 예측 팔레트에서의 팔레트 엔트리들의 각각에 대한 플래그를 포함한다.
팔레트-기반 디코딩 유닛 (165) 은 또한, 엔트로피 디코딩된 비디오 데이터로부터, 현재의 블록에 대한 현재의 팔레트 내에 포함되는 예측 팔레트 내에 있지 않은 새로운 팔레트 엔트리들의 수를 결정한다 (304). 팔레트-기반 디코딩 유닛 (165) 은 현재의 팔레트 내에 포함되는 새로운 팔레트 엔트리들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩할 수도 있다. 일부의 예들에서, 팔레트-기반 디코딩 유닛 (165) 은 1진 코드들, 절단된 1진 코드들, 지수-골롬 코드들, 또는 골롬-라이스 코드들 중의 하나를 이용하여 신택스 엘리먼트들을 디코딩한다. 현재의 팔레트 내에 포함되는 새로운 팔레트 엔트리들의 수를 결정한 후, 팔레트-기반 디코딩 유닛 (165) 은 새로운 팔레트 엔트리들의 각각에 대한 픽셀 값을 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩한다.
엔트로피 디코딩된 비디오 데이터로부터 결정된 정보에 기초하여, 팔레트-기반 디코딩 유닛 (165) 은 복사된 팔레트 엔트리들의 수 및 새로운 팔레트 엔트리들의 수의 합과 동일한 것으로 현재의 팔레트의 사이즈를 계산한다 (306). 현재의 팔레트의 사이즈를 결정한 후, 팔레트-기반 디코딩 유닛 (165) 은 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 포함하기 위한 현재의 팔레트를 생성한다 (308). 하나의 예에서, 팔레트-기반 디코딩 유닛 (165) 은 복사된 팔레트 엔트리들 및 새로운 팔레트 엔트리들을 연결함으로써 현재의 팔레트를 생성한다.
다음으로, 팔레트-기반 디코딩 유닛 (165) 은 현재의 팔레트를 이용하여 현재의 블록의 팔레트-기반 코딩을 수행할 수 있을 수 있다. 예를 들어, 팔레트-기반 디코딩 유닛 (165) 은 현재의 블록의 픽셀 값들을 나타내기 위해 이용된 현재의 팔레트에서의 팔레트 엔트리들을 식별하는 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정한다 (310). 현재의 블록의 하나 이상의 픽셀 값들이 현재의 팔레트에서 대응하는 픽셀 값을 가지지 않을 경우, 비디오 인코더 (20) 는 픽셀 값들 중의 어느 것이 현재의 팔레트 내에 포함되지 않는지를 표시하기 위하여 이스케이프 픽셀 개념을 이용할 수도 있고, 이 픽셀 값들을 명시적으로 송신할 수도 있다. 다음으로, 비디오 디코더 (30) 에서의 팔레트-기반 디코딩 유닛 (165) 은, 현재의 팔레트에서 대응하는 픽셀 값을 가지지 않는 하나 이상의 픽셀 값들에 대한 픽셀 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩할 수도 있다.
또 다른 예에서, 비디오 인코더 (20) 는 이스케이프 픽셀 개념을 이용할 수도 있는 것이 아니라, 현재의 블록의 하나 이상의 픽셀 값들의 각각에 대한 예측 픽셀 값들로서 현재의 팔레트 내에 포함된 픽셀 값들을 식별할 수도 있고, 현재의 블록의 픽셀 값들 및 현재의 팔레트에서의 예측 픽셀 값들 사이의 잔차 값들을 송신할 수도 있다. 다음으로, 비디오 디코더 (30) 에서의 팔레트-기반 디코딩 유닛 (165) 은 현재의 팔레트 내에 포함된 대응하는 예측 픽셀 값들을 식별하는 인덱스 값들과, 현재의 블록의 하나 이상의 픽셀 값들과 현재의 팔레트에서의 식별된 예측 픽셀 값들 사이의 잔차 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩할 수도 있다.
본 개시는 또한, 인덱스 값들을 현재의 블록에 대한 픽셀 값들 또는 예측 잔차 값들과 연관시키는 엔트리들을 가지는 팔레트를 생성하기 위하여 이용될 수도 있는, 팔레트-기반 코딩을 위한 팔레트를 생성하기 위한 몇몇 대안적인 기법들을 설명한다. 하나의 예에서, 팔레트-기반 디코딩 유닛 (165) 은 현재의 블록에 대한 팔레트의 사이즈의 표시를 디코딩하고, 현재의 블록에 대한 팔레트와 동일한 사이즈를 가지는 벡터를 디코딩하고, 여기서, 벡터에서의 각각의 엔트리는 연관된 팔레트 엔트리가 예측 팔레트로부터 송신 또는 복사되는지 여부를 표시하고, 이 팔레트-기반 디코딩 유닛 (165) 은 예측 팔레트로부터 복사된 하나 이상의 팔레트 엔트리들에 대하여, 예측 팔레트에서의 엔트리의 위치의 표시를 디코딩한다. 또 다른 예에서, 팔레트-기반 디코딩 유닛 (165) 은 현재의 블록에 대한 팔레트에서의 엔트리들의 수의 표시를 디코딩하고, 팔레트 엔트리가 명시적으로 전송되는지, 또는 이전에 재구성된 픽셀로부터 유도되는지 여부를 표시하는 팔레트 엔트리들의 각각에 대한 1-비트 플래그를 디코딩하고, 이전에 재구성된 픽셀로부터 유도된 하나 이상의 팔레트 엔트리들의 각각에 대하여, 각각의 팔레트 엔트리에 대응하는 재구성된 픽셀의 위치의 표시를 디코딩한다. 그 예에서, 재구성된 픽셀의 위치의 표시는 현재의 블록의 상부-좌측 위치에 대한 변위 벡터일 수도 있거나, 그것은 정상적인 인트라 예측을 위하여 이용된 모든 참조 픽셀들을 포함할 수도 있는 재구성된 픽셀들의 리스트로의 인덱스일 수도 있다.
또 다른 예에서, 팔레트-기반 디코딩 유닛 (165) 은 소정의 사이즈를 가지는 이웃하는 블록에 대한 예측 팔레트와 함께 시작하고, 예측 팔레트와 동일한 사이즈를 가지는 2진 벡터를 디코딩하고, 여기서, 벡터에서의 각각의 엔트리는 연관된 팔레트 엔트리가 예측 팔레트로부터 재이용되는지 여부를 표시한다. 팔레트-기반 디코딩 유닛 (165) 은 또한, 송신되어야 할 새로운 엔트리들의 수의 표시를 디코딩하고, 비디오 인코더 (20) 로부터 새로운 엔트리들을 수신한다. 다음으로, 팔레트-기반 디코딩 유닛 (165) 은 현재의 블록에 대한 새로운 팔레트를 생성하기 위하여 재이용된 엔트리들 및 새로운 엔트리들을 병합한다.
예에 따라서는, 본원에서 설명된 기법들 중의 임의의 것의 어떤 액트 (act) 들 또는 이벤트 (event) 들이 상이한 시퀀스에서 수행될 수 있거나, 추가될 수도 있거나, 병합될 수도 있거나, 또는 모두 배제 (예를 들어, 모든 설명된 액트들 또는 이벤트들이 기법들의 실시를 위해 필요한 것은 아님) 될 수도 있다는 것이 인식되어야 한다. 또한, 어떤 예들에서는, 액트들 또는 이벤트들이 순차적인 것이 아니라, 예컨대, 멀티-스레딩된 (multi-threaded) 프로세싱, 인터럽트 프로세싱, 또는 다수의 프로세서들을 통해 동시에 수행될 수도 있다. 게다가, 본 개시의 어떤 양태들은 명료함의 목적들을 위하여 단일 모듈 또는 유닛에 의해 수행되는 것으로서 설명되지만, 본 개시의 기법들은 비디오 코더와 연관된 유닛들 또는 모듈들의 조합에 의해 수행될 수도 있는 것이 이해되어야 한다.
본 개시의 어떤 양태들은 예시의 목적들을 위하여 개발 중인 HEVC 표준에 대하여 설명되었다. 그러나, 본 개시에서 설명된 기법들은 아직 개발되지 않은 다른 표준 또는 전용 비디오 코딩 프로세스들을 포함하는 다른 비디오 코딩 프로세스들에 대해 유용할 수도 있다.
위에서 설명된 기법들은 비디오 인코더 (20) (도 1 및 도 2) 및/또는 비디오 디코더 (30) (도 1 및 도 3) 에 의해 수행될 수도 있고, 이들 양자는 일반적으로 비디오 코더로서 지칭될 수도 있다. 마찬가지로, 비디오 코딩은 적용가능한 바와 같이, 비디오 인코딩 또는 비디오 디코딩을 지칭할 수도 있다.
기법들의 다양한 양태들의 특정 조합들이 위에서 설명되지만, 이 조합들은 본 개시에서 설명된 기법들의 예들을 단지 예시하기 위하여 제공된다. 따라서, 본 개시의 기법들은 이 예의 조합들에 제한되지 않아야 하고, 본 개시에서 설명된 기법들의 다양한 양태들의 임의의 상상가능한 조합을 망라할 수도 있다.
하나 이상의 예들에서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 그 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현될 경우, 기능들은 하나 이상의 명령들 또는 코드로서, 컴퓨터-판독가능 매체 상에 저장되거나 컴퓨터-판독가능 매체 상에서 송신될 수도 있고, 하드웨어-기반 프로세싱 유닛에 의해 실행될 수도 있다. 컴퓨터-판독가능 매체들은 데이터 저장 매체들과 같은 유형의 매체에 대응하는 컴퓨터-판독가능 저장 매체들, 또는 예컨대, 통신 프로토콜에 따라 하나의 장소로부터 또 다른 장소로 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체들을 포함할 수도 있다. 이러한 방식으로, 컴퓨터-판독가능 매체들은 일반적으로 (1) 비-일시적인 유형의 컴퓨터-판독가능 저장 매체들, 또는 (2) 신호 또는 반송파와 같은 통신 매체에 대응할 수도 있다. 데이터 저장 매체들은 본 개시에서 설명된 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체들일 수도 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독가능 매체를 포함할 수도 있다.
제한이 아닌 예로서, 이러한 컴퓨터-판독가능 저장 매체들은 RAM, ROM, EEPROM, CD-ROM 또는 다른 광학 디스크 저장, 자기 디스크 저장, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 명령들 또는 데이터 구조들의 형태로 희망하는 프로그램 코드를 저장하기 위해 이용될 수 있으며 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 또한, 임의의 접속은 컴퓨터-판독가능 매체로 적절하게 칭해진다. 예를 들어, 동축 케이블, 광섬유 케이블, 트위스트 페어 (twisted pair), 디지털 가입자 회선 (digital subscriber line; DSL), 또는 적외선, 전파 (radio), 및 마이크로파 (microwave) 와 같은 무선 기술들을 이용하여 웹사이트, 서버, 또는 다른 원격 소스로부터 명령들이 송신될 경우, 동축 케이블, 광섬유 케이블, 트위스트 페어, DSL, 또는 적외선, 전파, 및 마이크로파와 같은 무선 기술들은 매체의 정의 내에 포함된다. 그러나, 컴퓨터-판독가능 저장 매체들 및 데이터 저장 매체들은 접속들, 반송파들, 신호들, 또는 다른 순시적 매체 (transient medium) 들을 포함하는 것이 아니라, 그 대신에, 비-순시적인, 유형의 저장 매체들에 관한 것이라는 것이 이해되어야 한다. 본원에서 이용된 바와 같은 디스크 (disk) 및 디스크 (disc) 는 컴팩트 디스크 (compact disc; CD), 레이저 디스크 (laser disc), 광학 디스크 (optical disc), 디지털 다기능 디스크 (digital versatile disc; DVD), 플로피 디스크 (floppy disk) 및 블루레이 디스크 (Blu-ray disc) 를 포함하고, 여기서, 디스크 (disk) 들은 통상 데이터를 자기적으로 재생하는 반면, 디스크 (disc) 들은 데이터를 레이저들로 광학적으로 재생한다. 상기의 조합들은 또한, 컴퓨터 판독가능 매체들의 범위 내에 포함되어야 한다.
명령들은 하나 이상의 디지털 신호 프로세서 (digital signal processor; DSP) 들, 범용 마이크로프로세서들, 주문형 집적 회로 (application specific integrated circuit; ASIC) 들, 필드 프로그래밍가능한 게이트 어레이 (field programmable gatec array; FPGA) 들, 또는 다른 등가의 통합된 또는 개별 로직 회로부와 같은 하나 이상의 프로세서들에 의해 실행될 수도 있다. 따라서, 본원에서 이용된 바와 같은 용어 "프로세서" 는 상기한 구조, 또는 본원에서 설명된 기법들의 구현을 위해 적당한 임의의 다른 구조 중의 임의의 것을 지칭할 수도 있다. 게다가, 일부의 양태들에서는, 본원에서 설명된 기능성이 인코딩 및 디코딩을 위해 구성되거나 조합된 코덱 (codec) 내에 통합된 전용 하드웨어 및/또는 소프트웨어 모듈들 내에서 제공될 수도 있다. 또한, 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들에서 완전히 구현될 수 있다.
본 개시의 기법들은 무선 핸드셋 (wireless handset), 집적 회로 (integrated circuit; IC) 또는 IC 들의 세트 (예컨대, 칩셋) 를 포함하는 광범위한 디바이스들 또는 장치들에서 구현될 수도 있다. 다양한 컴포넌트들, 모듈들, 또는 유닛들은 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위하여 본 개시에서 설명되어 있지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 요구하지는 않는다. 오히려, 위에서 설명된 바와 같이, 다양한 유닛들은 코덱 하드웨어 유닛 내에 조합될 수도 있거나, 적당한 소프트웨어 및/또는 펌웨어와 함께, 위에서 설명된 바와 같은 하나 이상의 프로세서들을 포함하는 상호동작하는 하드웨어 유닛들의 집합에 의해 제공될 수도 있다.
다양한 예들이 설명되었다. 이러한 그리고 다른 예들은 다음의 청구항들의 범위 내에 있다.

Claims (30)

  1. 비디오 데이터를 코딩하는 방법으로서,
    하나 이상의 프로세서들에 의해, 픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 예측 팔레트를 생성하는 단계로서, 상기 예측 팔레트는 하나 이상의 이전에 코딩된 블록들로부터 하나 이상의 팔레트 엔트리들을 포함하고, 상기 하나 이상의 이전에 코딩된 블록들은 현재의 블록의 하나 이상의 이웃하는 블록들을 포함하고, 상기 하나 이상의 이웃하는 블록들은 상기 현재의 블록 및 적어도 하나의 이웃하는 블록을 스캔하기 위한 스캔 순서에서의 상기 현재의 블록의 적어도 하나의 이웃하는 블록 또는 적어도 하나의 공간적으로 이웃하는 블록을 포함하는, 상기 예측 팔레트를 생성하는 단계;
    상기 하나 이상의 프로세서들에 의해, 상기 예측 팔레트에서의 상기 팔레트 엔트리들 중의 어느 것이 메모리에 저장된 상기 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사될 것인지를 결정하는 단계로서, 복사될 상기 팔레트 엔트리들을 결정하는 것은 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 것을 포함하는, 상기 현재의 팔레트로 복사될 것인지를 결정하는 단계;
    상기 하나 이상의 프로세서들에 의해, 상기 현재의 블록에 대한 상기 현재의 팔레트 내에 포함될 새로운 팔레트 엔트리들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 단계로서, 상기 새로운 팔레트 엔트리들은 상기 예측 팔레트 내에 있지 않은, 상기 하나 이상의 신택스 엘리먼트들을 코딩하는 단계;
    상기 하나 이상의 프로세서들에 의해, 상기 현재의 팔레트에 포함될 상기 새로운 팔레트 엔트리들의 각각에 대한 픽셀 값을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 단계;
    상기 하나 이상의 프로세서들에 의해, 복사된 상기 팔레트 엔트리들의 수 및 상기 새로운 팔레트 엔트리들의 수의 합과 동일한 상기 현재의 팔레트의 사이즈를 계산하는 단계;
    상기 하나 이상의 프로세서들에 의해, 복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 포함하는 계산된 상기 사이즈를 갖는 상기 현재의 팔레트를 생성하는 단계; 및
    상기 하나 이상의 프로세서들에 의해, 상기 현재의 블록의 픽셀 값들을 나타내기 위하여 이용된 상기 현재의 팔레트에서의 상기 팔레트 엔트리들을 식별하는 상기 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  2. 제 1 항에 있어서,
    상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 하나 이상의 신택스 엘리먼트들은, 각각의 팔레트 엔트리가 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각에 대한 플래그를 포함하는 2진 벡터를 포함하는, 비디오 데이터를 코딩하는 방법.
  3. 제 1 항에 있어서,
    상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 하나 이상의 신택스 엘리먼트들은 2진 벡터의 무손실 압축된 버전을 포함하고, 상기 2진 벡터의 비압축 버전은, 각각의 팔레트 엔트리가 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각에 대한 플래그를 포함하는, 비디오 데이터를 코딩하는 방법.
  4. 제 1 항에 있어서,
    상기 현재의 팔레트에 포함될 상기 새로운 팔레트 엔트리들의 수를 표시하는 상기 하나 이상의 신택스 엘리먼트들은 1진법의 코드 (unary code) 들, 절단된 1진법의 코드 (truncated unary code) 들, 지수-골롬 코드들, 또는 골롬-라이스 코드들 중의 적어도 하나를 이용하여 코딩되는, 비디오 데이터를 코딩하는 방법.
  5. 제 1 항에 있어서,
    복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 포함하는 상기 현재의 팔레트를 생성하는 단계는, 복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 연결하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  6. 제 1 항에 있어서,
    상기 현재의 블록은 상기 비디오 데이터의 슬라이스에서의 제 1 블록, 또는 상기 비디오 데이터의 상기 슬라이스 또는 픽처의 가장 좌측 블록 중의 하나에 대응하고, 상기 방법은, 상기 현재의 블록에 대한 상기 현재의 팔레트로의 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 복사를 디스에이블하는 단계를 더 포함하는, 비디오 데이터를 코딩하는 방법.
  7. 제 1 항에 있어서,
    상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 결정하는 단계는,
    상기 현재의 블록의 상기 픽셀 값들의 각각이 상기 현재의 팔레트에서 대응하는 픽셀 값을 가지는지 여부를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 단계;
    상기 현재의 팔레트에서 대응하는 픽셀 값들을 가지는 상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 단계; 및
    상기 현재의 팔레트에서 대응하는 픽셀 값을 가지지 않는 상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 픽셀 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  8. 제 1 항에 있어서,
    상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 결정하는 단계는,
    상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 단계로서, 상기 인덱스 값들은 상기 현재의 팔레트에서의 대응하는 픽셀 값들을 예측 픽셀 값들로서 식별하는, 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 단계; 및
    상기 현재의 블록의 상기 하나 이상의 픽셀 값들과 상기 현재의 팔레트에서의 상기 식별된 예측 픽셀 값들 사이의 잔차 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  9. 제 1 항에 있어서,
    상기 비디오 데이터를 코딩하는 방법은 비디오 데이터를 디코딩하는 방법을 포함하고, 상기 방법은,
    상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 하나 이상의 신택스 엘리먼트들을 디코딩하는 단계;
    상기 현재의 팔레트 내에 포함될 상기 새로운 팔레트 엔트리들의 수를 표시하는 상기 하나 이상의 신택스 엘리먼트들을 디코딩하는 단계;
    상기 새로운 팔레트 엔트리들의 각각에 대한 상기 픽셀 값을 표시하는 상기 하나 이상의 신택스 엘리먼트들을 디코딩하는 단계;
    복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 포함하는 상기 현재의 팔레트를 생성하는 단계; 및
    상기 현재의 블록의 픽셀 값들을 나타내기 위하여 이용된 상기 현재의 팔레트에서의 상기 팔레트 엔트리들을 식별하는 상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  10. 제 1 항에 있어서,
    상기 비디오 데이터를 코딩하는 방법은 비디오 데이터를 인코딩하는 방법을 포함하고, 상기 방법은,
    복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 포함하는 상기 현재의 팔레트를 생성하는 단계;
    상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 하나 이상의 신택스 엘리먼트들을 인코딩하는 단계;
    상기 현재의 팔레트 내에 포함될 상기 새로운 팔레트 엔트리들의 수를 표시하는 상기 하나 이상의 신택스 엘리먼트들을 인코딩하는 단계;
    상기 새로운 팔레트 엔트리들의 각각에 대한 픽셀 값을 표시하는 상기 하나 이상의 신택스 엘리먼트들을 인코딩하는 단계; 및
    상기 현재의 블록의 픽셀 값들을 나타내기 위하여 이용된 상기 현재의 팔레트에서의 상기 팔레트 엔트리들을 식별하는 상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩하는 단계를 포함하는, 비디오 데이터를 코딩하는 방법.
  11. 비디오 데이터를 코딩하기 위한 장치로서,
    비디오 데이터를 저장하는 메모리; 및
    하나 이상의 프로세서들을 포함하고,
    상기 하나 이상의 프로세서들은,
    픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 예측 팔레트를 생성하는 것으로서, 상기 예측 팔레트는 하나 이상의 이전에 코딩된 블록들로부터 하나 이상의 팔레트 엔트리들을 포함하고, 상기 하나 이상의 이전에 코딩된 블록들은 현재의 블록의 하나 이상의 이웃하는 블록들을 포함하고, 상기 하나 이상의 이웃하는 블록들은 상기 현재의 블록 및 적어도 하나의 이웃하는 블록을 스캔하기 위한 스캔 순서에서의 상기 현재의 블록의 적어도 하나의 이웃하는 블록 또는 적어도 하나의 공간적으로 이웃하는 블록을 포함하는, 상기 예측 팔레트를 생성하고;
    상기 예측 팔레트에서의 상기 팔레트 엔트리들 중의 어느 것이 상기 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사될 것인지를 결정하는 것으로서, 상기 하나 이상의 프로세서들은 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하도록 구성되는, 상기 현재의 팔레트로 복사될 것인지를 결정하고;
    상기 현재의 블록에 대한 상기 현재의 팔레트 내에 포함될 새로운 팔레트 엔트리들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 것으로서, 상기 새로운 팔레트 엔트리들은 상기 예측 팔레트 내에 있지 않은, 상기 하나 이상의 신택스 엘리먼트들을 코딩하고;
    상기 현재의 팔레트에 포함될 상기 새로운 팔레트 엔트리들의 각각에 대한 픽셀 값을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하고;
    복사된 상기 팔레트 엔트리들의 수 및 상기 새로운 팔레트 엔트리들의 수의 합과 동일한 상기 현재의 팔레트의 사이즈를 계산하고;
    복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 포함하는 계산된 상기 사이즈를 갖는 상기 현재의 팔레트를 생성하고; 그리고
    상기 현재의 블록의 픽셀 값들을 나타내기 위하여 이용된 상기 현재의 팔레트에서의 상기 팔레트 엔트리들을 식별하는 상기 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정하도록 구성되는, 비디오 데이터를 코딩하기 위한 장치.
  12. 제 11 항에 있어서,
    상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 하나 이상의 신택스 엘리먼트들은, 각각의 팔레트 엔트리가 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각에 대한 플래그를 포함하는 2진 벡터를 포함하는, 비디오 데이터를 코딩하기 위한 장치.
  13. 제 11 항에 있어서,
    상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 하나 이상의 신택스 엘리먼트들은 2진 벡터의 무손실 압축된 버전을 포함하고, 상기 2진 벡터의 비압축 버전은, 각각의 팔레트 엔트리가 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각에 대한 플래그를 포함하는, 비디오 데이터를 코딩하기 위한 장치.
  14. 제 11 항에 있어서,
    상기 현재의 팔레트에 포함될 상기 새로운 팔레트 엔트리들의 수를 표시하는 상기 하나 이상의 신택스 엘리먼트들은 1진법의 코드 (unary code) 들, 절단된 1진법의 코드 (truncated unary code) 들, 지수-골롬 코드들, 또는 골롬-라이스 코드들 중의 적어도 하나를 이용하여 코딩되는, 비디오 데이터를 코딩하기 위한 장치.
  15. 제 11 항에 있어서,
    상기 프로세서들은 상기 현재의 팔레트를 생성하기 위하여 복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 연결하도록 구성되는, 비디오 데이터를 코딩하기 위한 장치.
  16. 제 11 항에 있어서,
    상기 현재의 블록은 상기 비디오 데이터의 슬라이스에서의 제 1 블록, 또는 상기 비디오 데이터의 상기 슬라이스 또는 픽처의 가장 좌측 블록 중의 하나에 대응하고, 상기 프로세서들은 상기 현재의 블록에 대한 상기 현재의 팔레트로의 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 복사를 디스에이블하도록 구성되는, 비디오 데이터를 코딩하기 위한 장치.
  17. 제 11 항에 있어서,
    상기 프로세서들은,
    상기 현재의 블록의 상기 픽셀 값들의 각각이 상기 현재의 팔레트에서 대응하는 픽셀 값을 가지는지 여부를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하고;
    상기 현재의 팔레트에서 대응하는 픽셀 값들을 가지는 상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하고; 그리고
    상기 현재의 팔레트에서 대응하는 픽셀 값을 가지지 않는 상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 픽셀 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하도록 구성되는, 비디오 데이터를 코딩하기 위한 장치.
  18. 제 11 항에 있어서,
    상기 프로세서들은,
    상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 것으로서, 상기 인덱스 값들은 상기 현재의 팔레트에서의 대응하는 픽셀 값들을 예측 픽셀 값들로서 식별하는, 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하고; 그리고
    상기 현재의 블록의 상기 하나 이상의 픽셀 값들과 상기 현재의 팔레트에서의 상기 식별된 예측 픽셀 값들 사이의 잔차 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하도록 구성되는, 비디오 데이터를 코딩하기 위한 장치.
  19. 제 11 항에 있어서,
    상기 장치는 비디오 데이터를 디코딩하기 위한 비디오 디코딩 디바이스를 포함하고, 상기 프로세서들은,
    상기 예측 팔레트에서의 상기 팔레트 엔트리들 중의 상기 하나 이상의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 하나 이상의 신택스 엘리먼트들을 디코딩하고;
    상기 현재의 팔레트 내에 포함될 상기 새로운 팔레트 엔트리들의 수를 표시하는 상기 하나 이상의 신택스 엘리먼트들을 디코딩하고;
    상기 새로운 팔레트 엔트리들의 각각에 대한 픽셀 값을 표시하는 상기 하나 이상의 신택스 엘리먼트들을 디코딩하고;
    복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 포함하는 상기 현재의 팔레트를 생성하고; 그리고
    상기 현재의 블록의 픽셀 값들을 나타내기 위하여 이용된 상기 현재의 팔레트에서의 상기 팔레트 엔트리들을 식별하는 상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 디코딩하도록 구성되는, 비디오 데이터를 코딩하기 위한 장치.
  20. 제 11 항에 있어서,
    상기 장치는 비디오 데이터를 인코딩하기 위한 비디오 인코딩 디바이스를 포함하고, 상기 프로세서들은,
    복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 포함하는 상기 현재의 팔레트를 생성하고;
    상기 예측 팔레트에서의 상기 팔레트 엔트리들 중의 상기 하나 이상의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 상기 하나 이상의 신택스 엘리먼트들을 인코딩하고;
    상기 현재의 팔레트 내에 포함될 상기 새로운 팔레트 엔트리들의 수를 표시하는 상기 하나 이상의 신택스 엘리먼트들을 인코딩하고;
    상기 새로운 팔레트 엔트리들의 각각에 대한 픽셀 값을 표시하는 상기 하나 이상의 신택스 엘리먼트들을 인코딩하고; 그리고
    상기 현재의 블록의 픽셀 값들을 나타내기 위하여 이용된 상기 현재의 팔레트에서의 상기 팔레트 엔트리들을 식별하는 상기 현재의 블록의 상기 하나 이상의 픽셀 값들에 대한 상기 인덱스 값들을 표시하는 하나 이상의 신택스 엘리먼트들을 인코딩하도록 구성되는, 비디오 데이터를 코딩하기 위한 장치.
  21. 비디오 데이터를 코딩하기 위한 장치로서,
    픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 예측 팔레트를 생성하는 수단으로서, 상기 예측 팔레트는 하나 이상의 이전에 코딩된 블록들로부터 하나 이상의 팔레트 엔트리들을 포함하고, 상기 하나 이상의 이전에 코딩된 블록들은 현재의 블록의 하나 이상의 이웃하는 블록들을 포함하고, 상기 하나 이상의 이웃하는 블록들은 상기 현재의 블록 및 적어도 하나의 이웃하는 블록을 스캔하기 위한 스캔 순서에서의 상기 현재의 블록의 적어도 하나의 이웃하는 블록 또는 적어도 하나의 공간적으로 이웃하는 블록을 포함하는, 상기 예측 팔레트를 생성하는 수단; 및;
    상기 예측 팔레트에서의 상기 팔레트 엔트리들 중의 어느 것이 상기 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사될 것인지를 결정하는 수단으로서, 복사될 상기 팔레트 엔트리들을 결정하는 수단은 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 수단을 포함하는, 상기 현재의 팔레트로 복사될 것인지를 결정하는 수단;
    상기 현재의 블록에 대한 상기 현재의 팔레트 내에 포함될 새로운 팔레트 엔트리들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 수단으로서, 상기 새로운 팔레트 엔트리들은 상기 예측 팔레트 내에 있지 않은, 상기 하나 이상의 신택스 엘리먼트들을 코딩하는 수단;
    상기 현재의 팔레트에 포함될 상기 새로운 팔레트 엔트리들의 각각에 대한 픽셀 값을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하는 수단;
    복사된 상기 팔레트 엔트리들의 수 및 상기 새로운 팔레트 엔트리들의 수의 합과 동일한 상기 현재의 팔레트의 사이즈를 계산하는 수단;
    복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 포함하는 계산된 상기 사이즈를 갖는 상기 현재의 팔레트를 생성하는 수단; 및
    상기 현재의 블록의 픽셀 값들을 나타내기 위하여 이용된 상기 현재의 팔레트에서의 상기 팔레트 엔트리들을 식별하는 상기 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정하는 수단을 포함하는, 비디오 데이터를 코딩하기 위한 장치.
  22. 명령들을 저장하는 비-일시적 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 실행될 경우, 하나 이상의 프로세서들로 하여금,
    픽셀 값들을 표시하는 팔레트 엔트리들을 포함하는 예측 팔레트를 생성하게 하는 것으로서, 상기 예측 팔레트는 하나 이상의 이전에 코딩된 블록들로부터 하나 이상의 팔레트 엔트리들을 포함하고, 상기 하나 이상의 이전에 코딩된 블록들은 현재의 블록의 하나 이상의 이웃하는 블록들을 포함하고, 상기 하나 이상의 이웃하는 블록들은 상기 현재의 블록 및 적어도 하나의 이웃하는 블록을 스캔하기 위한 스캔 순서에서의 상기 현재의 블록의 적어도 하나의 이웃하는 블록 또는 적어도 하나의 공간적으로 이웃하는 블록을 포함하는, 상기 예측 팔레트를 생성하게 하고;
    상기 예측 팔레트에서의 상기 팔레트 엔트리들 중의 어느 것이 비디오 데이터의 현재의 블록에 대한 현재의 팔레트로 복사될 것인지를 결정하게 하는 것으로서, 상기 명령들은 상기 하나 이상의 프로세서들로 하여금 상기 예측 팔레트에서의 상기 팔레트 엔트리들의 각각이 상기 현재의 팔레트로 복사될 것인지 여부를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하게 하는, 상기 현재의 팔레트로 복사될 것인지를 결정하게 하고;
    상기 현재의 블록에 대한 상기 현재의 팔레트 내에 포함될 새로운 팔레트 엔트리들의 수를 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하게 하는 것으로서, 상기 새로운 팔레트 엔트리들은 상기 예측 팔레트 내에 있지 않은, 상기 하나 이상의 신택스 엘리먼트들을 코딩하게 하고;
    상기 현재의 팔레트에 포함될 상기 새로운 팔레트 엔트리들의 각각에 대한 픽셀 값을 표시하는 하나 이상의 신택스 엘리먼트들을 코딩하게 하고;
    복사된 상기 팔레트 엔트리들의 수 및 상기 새로운 팔레트 엔트리들의 수의 합과 동일한 상기 현재의 팔레트의 사이즈를 계산하게 하고;
    복사된 상기 팔레트 엔트리들 및 상기 새로운 팔레트 엔트리들을 포함하는 상기 현재의 팔레트를 생성하게 하고; 그리고
    상기 현재의 블록의 픽셀 값들을 나타내기 위하여 이용된 상기 현재의 팔레트에서의 상기 팔레트 엔트리들을 식별하는 상기 현재의 블록의 하나 이상의 픽셀 값들에 대한 인덱스 값들을 결정하게 하는, 비-일시적 컴퓨터 판독가능 저장 매체.
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
KR1020167001705A 2013-07-12 2014-07-11 팔레트-기반 비디오 코딩에서의 팔레트 예측 KR101821069B1 (ko)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US201361845824P 2013-07-12 2013-07-12
US61/845,824 2013-07-12
US201361899048P 2013-11-01 2013-11-01
US61/899,048 2013-11-01
US201361913040P 2013-12-06 2013-12-06
US61/913,040 2013-12-06
US14/328,502 2014-07-10
US14/328,502 US9558567B2 (en) 2013-07-12 2014-07-10 Palette prediction in palette-based video coding
PCT/US2014/046402 WO2015006724A2 (en) 2013-07-12 2014-07-11 Palette prediction in palette-based video coding

Publications (2)

Publication Number Publication Date
KR20160031495A KR20160031495A (ko) 2016-03-22
KR101821069B1 true KR101821069B1 (ko) 2018-01-22

Family

ID=52277073

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167001705A KR101821069B1 (ko) 2013-07-12 2014-07-11 팔레트-기반 비디오 코딩에서의 팔레트 예측

Country Status (21)

Country Link
US (1) US9558567B2 (ko)
EP (1) EP3020198B1 (ko)
JP (1) JP6246920B2 (ko)
KR (1) KR101821069B1 (ko)
CN (1) CN105556974B (ko)
AU (1) AU2014286986B2 (ko)
BR (1) BR112016000465B1 (ko)
CA (1) CA2913615C (ko)
CL (1) CL2016000057A1 (ko)
DK (1) DK3020198T3 (ko)
ES (1) ES2633947T3 (ko)
HK (1) HK1219372A1 (ko)
HU (1) HUE032104T2 (ko)
MX (1) MX353756B (ko)
MY (1) MY182937A (ko)
PH (1) PH12016500079B1 (ko)
RU (1) RU2641252C2 (ko)
SA (1) SA516370356B1 (ko)
SG (1) SG11201509667TA (ko)
SI (1) SI3020198T1 (ko)
WO (1) WO2015006724A2 (ko)

Families Citing this family (131)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9979960B2 (en) 2012-10-01 2018-05-22 Microsoft Technology Licensing, Llc Frame packing and unpacking between frames of chroma sampling formats with different chroma resolutions
US9654777B2 (en) 2013-04-05 2017-05-16 Qualcomm Incorporated Determining palette indices in palette-based video coding
US9558567B2 (en) 2013-07-12 2017-01-31 Qualcomm Incorporated Palette prediction in palette-based video coding
CN105659602B (zh) 2013-10-14 2019-10-08 微软技术许可有限责任公司 用于视频和图像编码的帧内块复制预测模式的编码器侧选项
WO2015054811A1 (en) 2013-10-14 2015-04-23 Microsoft Corporation Features of intra block copy prediction mode for video and image coding and decoding
WO2015054812A1 (en) 2013-10-14 2015-04-23 Microsoft Technology Licensing, Llc Features of base color index map mode for video and image coding and decoding
US10291827B2 (en) 2013-11-22 2019-05-14 Futurewei Technologies, Inc. Advanced screen content coding solution
KR20150059269A (ko) * 2013-11-22 2015-06-01 삼성디스플레이 주식회사 영상 데이터 인코딩 장치 및 방법
JP6537511B2 (ja) * 2013-12-10 2019-07-03 キヤノン株式会社 Hevcにおける改良型パレットモード
CN105814891B (zh) * 2013-12-10 2019-04-02 佳能株式会社 用于在调色板编码模式中对调色板进行编码或解码的方法和设备
GB201321850D0 (en) * 2013-12-10 2014-01-22 Canon Kk Palette Prediction
BR112016014327B1 (pt) 2013-12-18 2023-03-21 Hfi Innovation Inc. Método de decodificação de um bloco de dados de vídeo
CN106031142B (zh) * 2013-12-18 2019-07-26 寰发股份有限公司 在视频编码中用于调色板预测和共享的方法和装置
BR112016012417B1 (pt) 2013-12-18 2023-04-11 Hfi Innovation Inc Método e aparelho para inicialização e gerenciamento de paleta
GB2523076B (en) * 2013-12-19 2016-08-10 Canon Kk Improved palette mode in HEVC for the encoding process
US10972742B2 (en) * 2013-12-19 2021-04-06 Canon Kabushiki Kaisha Encoding process using a palette mode
EP3087742B1 (en) * 2013-12-27 2020-09-23 HFI Innovation Inc. Method and apparatus for syntax redundancy removal in palette coding
CN106063270A (zh) * 2013-12-27 2016-10-26 寰发股份有限公司 用于主颜色索引图编码的方法及装置
US10182242B2 (en) 2013-12-27 2019-01-15 Mediatek Inc. Method and apparatus for palette coding with cross block prediction
WO2015103496A2 (en) 2014-01-02 2015-07-09 Vid Scale, Inc. Two-demensional palette coding for screen content coding
MX360926B (es) 2014-01-03 2018-11-22 Microsoft Technology Licensing Llc Prediccion de vector de bloque en codificacion/descodificacion de video e imagen.
US10390034B2 (en) 2014-01-03 2019-08-20 Microsoft Technology Licensing, Llc Innovations in block vector prediction and estimation of reconstructed sample values within an overlap area
CN105850132B (zh) * 2014-01-07 2019-10-22 联发科技股份有限公司 编解码视频数据块的方法和装置
US11284103B2 (en) 2014-01-17 2022-03-22 Microsoft Technology Licensing, Llc Intra block copy prediction with asymmetric partitions and encoder-side search patterns, search ranges and approaches to partitioning
CN104853209B (zh) * 2014-02-16 2020-09-29 同济大学 图像编码、解码方法及装置
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
US10291915B2 (en) * 2014-03-06 2019-05-14 Samsung Electronics Co., Ltd. Video decoding method and apparatus and video encoding method and apparatus
KR101845462B1 (ko) 2014-03-14 2018-04-04 브이아이디 스케일, 인크. 스크린 콘텐츠 코딩을 위한 팔레트 코딩
US9826242B2 (en) 2014-03-14 2017-11-21 Qualcomm Incorporated Palette-based video coding
JP6164360B2 (ja) * 2014-03-14 2017-07-19 富士通株式会社 画像符号化装置、画像復号装置、画像符号化方法、及び画像復号方法
WO2015135509A1 (en) 2014-03-14 2015-09-17 Mediatek Inc. Method for palette table initialization and management
US9788004B2 (en) * 2014-03-14 2017-10-10 Hfi Innovation Inc. Method of color index coding with palette stuffing
EP3120548B1 (en) * 2014-03-17 2019-12-11 Nokia Technologies Oy Decoding of video using a long-term palette
WO2015140400A1 (en) * 2014-03-17 2015-09-24 Nokia Technologies Oy Method and technical equipment for video encoding and decoding
US10638143B2 (en) * 2014-03-21 2020-04-28 Futurewei Technologies, Inc. Advanced screen content coding with improved color table and index map coding methods
US10362336B2 (en) 2014-03-25 2019-07-23 Qualcomm Incorporated Palette predictor signaling with run length code for video coding
US10750198B2 (en) * 2014-05-22 2020-08-18 Qualcomm Incorporated Maximum palette parameters in palette-based video coding
US10038915B2 (en) 2014-05-22 2018-07-31 Qualcomm Incorporated Escape sample coding in palette-based video coding
US10264285B2 (en) 2014-05-22 2019-04-16 Qualcomm Incorporated Coding runs in palette-based video coding
US10091512B2 (en) 2014-05-23 2018-10-02 Futurewei Technologies, Inc. Advanced screen content coding with improved palette table and index map coding methods
WO2015176685A1 (en) * 2014-05-23 2015-11-26 Mediatek Inc. Methods for palette size signaling and conditional palette escape flag signaling
EP3158734A4 (en) 2014-06-19 2017-04-26 Microsoft Technology Licensing, LLC Unified intra block copy and inter prediction modes
CN106664414B (zh) * 2014-06-19 2019-07-05 寰发股份有限公司 视频编码中用于单个样本模式的候选生成的方法及装置
US10623747B2 (en) * 2014-06-20 2020-04-14 Hfi Innovation Inc. Method of palette predictor signaling for video coding
JP2017522839A (ja) * 2014-06-20 2017-08-10 シャープ株式会社 整合パレット符号化
US9906799B2 (en) 2014-06-20 2018-02-27 Qualcomm Incorporated Copy from previous rows for palette mode coding
US9955157B2 (en) 2014-07-11 2018-04-24 Qualcomm Incorporated Advanced palette prediction and signaling
US11330297B2 (en) 2014-08-19 2022-05-10 Qualcomm Incorporated Methods incorporating extensions to copy-above mode for palette mode coding
CN107079151B (zh) * 2014-09-26 2020-06-05 株式会社Kt 用于处理视频信号的方法和设备
KR102330740B1 (ko) 2014-09-30 2021-11-23 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 파면 병렬 프로세싱이 인에이블되는 경우의 인트라 픽쳐 예측 모드에 대한 규칙
CN105491379A (zh) * 2014-10-01 2016-04-13 财团法人工业技术研究院 解码器、编码器、解码方法、编码方法与编解码系统
US9807402B2 (en) 2014-10-06 2017-10-31 Industrial Technology Research Institute Method of color palette coding applicable to electronic device and electronic device using the same
GB2531005A (en) * 2014-10-06 2016-04-13 Canon Kk Improved encoding process using a palette mode
US9596479B2 (en) * 2014-10-07 2017-03-14 Hfi Innovation Inc. Method of pulse-code modulation and palette coding for video coding
US20160112724A1 (en) 2014-10-15 2016-04-21 Qualcomm Incorporated Hrd descriptor and buffer model of data streams for carriage of hevc extensions
US10477218B2 (en) * 2014-10-20 2019-11-12 Kt Corporation Method and apparatus for predicting and restoring a video signal using palette entry
EP3207712B1 (en) * 2014-11-12 2021-06-09 HFI Innovation Inc. Method of escape pixel coding in palette coding mode
US9961351B2 (en) 2014-11-26 2018-05-01 Qualcomm Incorporated Palette mode coding
US10097839B2 (en) * 2014-12-19 2018-10-09 Qualcomm Incorporated Palette mode for subsampling format
KR101724555B1 (ko) * 2014-12-22 2017-04-18 삼성전자주식회사 부호화 방법 및 장치와 복호화 방법 및 장치
CN111800632B (zh) * 2015-01-15 2024-03-29 株式会社Kt 对编码视频信号解码的方法和对视频信号编码的方法
US9749646B2 (en) * 2015-01-16 2017-08-29 Microsoft Technology Licensing, Llc Encoding/decoding of high chroma resolution details
US9854201B2 (en) * 2015-01-16 2017-12-26 Microsoft Technology Licensing, Llc Dynamically updating quality to higher chroma sampling rate
JP6122516B2 (ja) 2015-01-28 2017-04-26 財團法人工業技術研究院Industrial Technology Research Institute エンコーディング方法及びエンコーダ
US9986248B2 (en) * 2015-01-29 2018-05-29 Qualcomm Incorporated Palette mode coding for video coding
CN107211153B (zh) * 2015-01-29 2020-10-02 株式会社Kt 用于处理视频信号的方法和设备
EP3251358B1 (en) 2015-01-29 2019-11-13 Canon Kabushiki Kaisha Palette predictor initializer when encoding or decoding self-contained coding structures
CN107211134B (zh) * 2015-01-29 2020-05-29 Vid拓展公司 用于调色编码模式的逃逸色彩编码
CN107431817B (zh) * 2015-01-29 2020-03-24 Vid拓展公司 用于调色板译码的方法及装置
CN107409224B (zh) * 2015-01-29 2020-09-08 株式会社Kt 用于处理视频信号的方法和设备
US10425659B2 (en) * 2015-01-30 2019-09-24 Qualcomm Incorporated Coding escape pixels for palette coding
US10212434B2 (en) * 2015-01-30 2019-02-19 Qualcomm Incorporated Palette entries coding in video coding
US10057587B2 (en) * 2015-01-31 2018-08-21 Qualcomm Incorporated Coding escape pixels for palette mode coding
US9900624B2 (en) * 2015-02-05 2018-02-20 Mediatek Inc. Methods and apparatus of decoding process for palette syntax
CN105872539B (zh) * 2015-02-08 2020-01-14 同济大学 图像编码方法和装置及图像解码方法和装置
US20160234494A1 (en) * 2015-02-10 2016-08-11 Qualcomm Incorporated Restriction on palette block size in video coding
EP3248377B1 (en) 2015-02-16 2022-05-04 HFI Innovation Inc. Method and apparatus for palette predictor initialization for palette coding in video and image compression
US9460365B1 (en) 2015-03-24 2016-10-04 Intel Corporation Clustered palette compression
WO2016159610A1 (ko) * 2015-04-02 2016-10-06 주식회사 케이티 비디오 신호 처리 방법 및 장치
SG11201708026TA (en) * 2015-04-08 2017-10-30 Hfi Innovation Inc Methods of palette mode coding in video coding
JP2018514142A (ja) * 2015-04-08 2018-05-31 寰發股▲ふん▼有限公司HFI Innovation Inc. ビデオ符号化におけるパレットモードコンテキスト符号化、および、2値化の方法
WO2016169020A1 (en) * 2015-04-23 2016-10-27 Mediatek Singapore Pte. Ltd. A simplified coding method for palette coding
WO2016190627A1 (ko) * 2015-05-27 2016-12-01 주식회사 케이티 비디오 신호 처리 방법 및 장치
US20160360205A1 (en) * 2015-06-08 2016-12-08 Industrial Technology Research Institute Video encoding methods and systems using adaptive color transform
US10659783B2 (en) 2015-06-09 2020-05-19 Microsoft Technology Licensing, Llc Robust encoding/decoding of escape-coded pixels in palette mode
WO2016200100A1 (ko) * 2015-06-10 2016-12-15 삼성전자 주식회사 적응적 가중치 예측을 위한 신택스 시그널링을 이용하여 영상을 부호화 또는 복호화하는 방법 및 장치
US11146788B2 (en) 2015-06-12 2021-10-12 Qualcomm Incorporated Grouping palette bypass bins for video coding
GB2539488B8 (en) * 2015-06-18 2020-08-19 Gurulogic Microsystems Oy Encoder, decoder and method employing palette utilization and compression
GB2539486B (en) * 2015-06-18 2019-07-31 Gurulogic Microsystems Oy Encoder, decoder and method employing palette compression
JP6545570B2 (ja) * 2015-08-18 2019-07-17 株式会社東芝 符号化装置、復号装置および画像処理装置
JP6613842B2 (ja) * 2015-11-24 2019-12-04 富士通株式会社 画像符号化装置、画像符号化方法、及び画像符号化プログラム
JP6662123B2 (ja) * 2016-03-14 2020-03-11 富士通株式会社 画像符号化装置、画像符号化方法、及び画像符号化プログラム
CN109479137B (zh) * 2016-05-28 2021-09-21 联发科技股份有限公司 用于彩色视频数据的调色板模式编解码的方法及装置
US10368080B2 (en) 2016-10-21 2019-07-30 Microsoft Technology Licensing, Llc Selective upsampling or refresh of chroma sample values
CN106713921B (zh) * 2016-11-29 2019-07-23 西安万像电子科技有限公司 文字块的压缩方法和装置以及图像压缩方法和装置
CN115733973A (zh) * 2016-12-23 2023-03-03 华为技术有限公司 一种用于矩形视频编码块的编码方法、装置及计算机可读存储介质
JP2019022129A (ja) * 2017-07-19 2019-02-07 富士通株式会社 動画像符号化装置、動画像符号化方法、動画像復号装置、動画像復号方法、及び動画像符号化用コンピュータプログラムならびに動画像復号用コンピュータプログラム
CN109788290A (zh) 2017-11-13 2019-05-21 慧荣科技股份有限公司 影像处理装置及利用帧内预测的无损影像压缩方法
US10986349B2 (en) 2017-12-29 2021-04-20 Microsoft Technology Licensing, Llc Constraints on locations of reference blocks for intra block copy prediction
US10262451B1 (en) * 2018-04-09 2019-04-16 8i Limited View-dependent color compression
US10848787B2 (en) 2018-08-28 2020-11-24 Google Llc Lossy image compression using palettization of locally mixed colors
US11695919B2 (en) 2018-08-28 2023-07-04 Google Llc Lossy image compression using palettization of locally mixed colors
US11412260B2 (en) * 2018-10-29 2022-08-09 Google Llc Geometric transforms for image compression
FR3088511B1 (fr) * 2018-11-09 2021-05-28 Fond B Com Procede de decodage d’au moins une image, procede de codage, dispositifs, signal et programmes d’ordinateur correspondants.
WO2020141984A2 (en) * 2018-12-31 2020-07-09 Huawei Technologies Co., Ltd. Method and apparatus of mode- and size-dependent block-level restrictions for position dependent prediction combination
US11134258B2 (en) 2019-02-11 2021-09-28 Qualcomm Incorporated Predictive coefficient coding
US10924750B2 (en) * 2019-03-01 2021-02-16 Alibaba Group Holding Limited Palette size constraint in palette mode for video compression system
US11503311B2 (en) * 2019-03-08 2022-11-15 Sony Group Corporation Hybrid palette-DPCM coding for image compression
US11252442B2 (en) * 2019-04-08 2022-02-15 Tencent America LLC Method and apparatus for video coding
JP7414843B2 (ja) 2019-04-24 2024-01-16 バイトダンス インコーポレイテッド 符号化映像の量子化残差差分パルス符号変調表現
CN117857783A (zh) 2019-05-01 2024-04-09 字节跳动有限公司 使用量化残差差分脉冲码调制编解码的帧内编解码视频
CN117615130A (zh) 2019-05-02 2024-02-27 字节跳动有限公司 基于编解码树结构类型的编解码模式
US20220358685A1 (en) * 2019-06-24 2022-11-10 Nippon Telegraph And Telephone Corporation Image encoding method and image decoding method
US11206413B2 (en) * 2019-08-13 2021-12-21 Qualcomm Incorporated Palette predictor updates for local dual trees
WO2021040398A1 (ko) * 2019-08-26 2021-03-04 엘지전자 주식회사 팔레트 이스케이프 코딩 기반 영상 또는 비디오 코딩
AU2020337678B2 (en) * 2019-08-26 2023-12-14 Lg Electronics Inc. Image or video coding based on palette coding
WO2021040400A1 (ko) * 2019-08-26 2021-03-04 엘지전자 주식회사 팔레트 모드 기반 영상 또는 비디오 코딩
KR20210027175A (ko) * 2019-08-30 2021-03-10 주식회사 케이티 비디오 신호 처리 방법 및 장치
JP2022548582A (ja) * 2019-09-12 2022-11-21 バイトダンス インコーポレイテッド 映像符号化におけるパレット予測子の使用
WO2021055114A1 (en) * 2019-09-20 2021-03-25 Alibaba Group Holding Limited Method and system for signaling chroma quantization parameter offset
US11240507B2 (en) * 2019-09-24 2022-02-01 Qualcomm Incorporated Simplified palette predictor update for video coding
CN114762335B (zh) * 2019-10-05 2023-10-31 Lg电子株式会社 基于变换跳过和调色板编码相关数据的图像或视频编码
KR20220051373A (ko) * 2019-10-05 2022-04-26 엘지전자 주식회사 변환 스킵 및 팔레트 코딩 관련 정보의 시그널링 기반 영상 또는 비디오 코딩
US20220353506A1 (en) * 2019-10-05 2022-11-03 Lg Electronics Inc. Image or video coding based on transform skip- and palette coding-related advanced syntax element
EP4070557A4 (en) * 2019-12-03 2023-01-18 Alibaba Group Holding Limited VIDEO PROCESSING METHOD AND APPARATUS FOR USING PALETTE MODE
CN116405677B (zh) * 2019-12-30 2023-10-31 阿里巴巴(中国)有限公司 用于在调色板模式下对视频数据进行编码的方法和装置
US11595665B2 (en) * 2021-02-11 2023-02-28 Qualcomm Incorporated Upsampling reference pixels for intra-prediction in video coding
US11463716B2 (en) * 2021-02-25 2022-10-04 Qualcomm Incorporated Buffers for video coding in palette mode
US20240129469A1 (en) * 2021-04-13 2024-04-18 Telefonaktiebolaget Lm Ericsson (Publ) Block importance mapping
US11937070B2 (en) 2021-07-01 2024-03-19 Tencent America LLC Layered description of space of interest
WO2024081012A1 (en) * 2022-10-13 2024-04-18 Google Llc Inter-prediction with filtering

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015006724A2 (en) 2013-07-12 2015-01-15 Qualcomm Incorporated Palette prediction in palette-based video coding
US20160323591A1 (en) 2013-12-18 2016-11-03 Hfi Innovation Inc. Method and Apparatus for Palette Initialization and Management

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5686961A (en) * 1992-01-27 1997-11-11 Harris Corporation Automatic video image data reduction and prioritization system and method
US5408542A (en) 1992-05-12 1995-04-18 Apple Computer, Inc. Method and apparatus for real-time lossless compression and decompression of image data
WO1996002895A1 (en) * 1994-07-14 1996-02-01 Johnson Grace Company Method and apparatus for compressing images
US5930390A (en) * 1996-03-28 1999-07-27 Intel Corporation Encoding/decoding signals using a remap table
US6008816A (en) 1996-04-25 1999-12-28 Microsoft Corporation Method and system for managing color specification using attachable palettes and palettes that refer to other palettes
US6157746A (en) * 1997-02-12 2000-12-05 Sarnoff Corporation Apparatus and method for encoding wavelet trees generated by a wavelet-based coding method
US6064771A (en) * 1997-06-23 2000-05-16 Real-Time Geometry Corp. System and method for asynchronous, adaptive moving picture compression, and decompression
US6256415B1 (en) * 1998-06-10 2001-07-03 Seiko Epson Corporation Two row buffer image compression (TROBIC)
JP2000115782A (ja) * 1998-10-06 2000-04-21 Canon Inc 符号化装置及び方法及び記憶媒体
JP2003519988A (ja) * 1999-12-22 2003-06-24 ネオムテル・カンパニー・リミテッド 無線通信を用いた動画像送受信システム及び転送方法
US6909804B2 (en) * 2000-01-27 2005-06-21 Marger Johnson & Mccollom, P.C. Image compression usable with animated images
US6819793B1 (en) 2000-06-30 2004-11-16 Intel Corporation Color distribution for texture and image compression
US6748116B1 (en) 2000-08-22 2004-06-08 Airzip, Inc. Apparatus and method for compressing and decompressing image files
AUPR212600A0 (en) * 2000-12-18 2001-01-25 Canon Kabushiki Kaisha Efficient video coding
JP2002369011A (ja) * 2001-06-06 2002-12-20 Canon Inc 画像処理装置、画像処理方法及び画像処理プログラム
US7319720B2 (en) * 2002-01-28 2008-01-15 Microsoft Corporation Stereoscopic video
US6898313B2 (en) * 2002-03-06 2005-05-24 Sharp Laboratories Of America, Inc. Scalable layered coding in a multi-layer, compound-image data transmission system
US7433526B2 (en) * 2002-04-30 2008-10-07 Hewlett-Packard Development Company, L.P. Method for compressing images and image sequences through adaptive partitioning
US7302006B2 (en) * 2002-04-30 2007-11-27 Hewlett-Packard Development Company, L.P. Compression of images and image sequences through adaptive partitioning
GB2388502A (en) * 2002-05-10 2003-11-12 Chris Dunn Compression of frequency domain audio signals
US20040071351A1 (en) * 2002-10-07 2004-04-15 Johan Rade Method and system for graphics compression and display
US20040151394A1 (en) * 2003-01-31 2004-08-05 Mikael Soderberg Symmetrical, highly deterministic, low complexity, temporal transform video codec and vehicle distribution system incorporating same
US7343037B1 (en) * 2004-02-04 2008-03-11 Microsoft Corporation Dynamic, locally-adaptive, lossless palettization of color and grayscale images
WO2006022741A1 (en) * 2004-08-23 2006-03-02 Marger Johnson & Mccollom, P.C. Image compression usable with animated images
WO2006085301A2 (en) * 2005-02-09 2006-08-17 Mobixell Networks Image adaptation with target size, quality and resolution constraints
US8848789B2 (en) * 2006-03-27 2014-09-30 Qualcomm Incorporated Method and system for coding and decoding information associated with video compression
US7343837B1 (en) 2006-09-15 2008-03-18 James Anthony Domanico Multi-plane flexible handle for ratchets and wrenches
US8170101B2 (en) * 2006-10-27 2012-05-01 Sharp Laboratories Of America, Inc. Methods and systems for low-complexity data compression
AU2006246497B2 (en) * 2006-11-30 2010-02-11 Canon Kabushiki Kaisha Method and apparatus for hybrid image compression
US8213511B2 (en) * 2007-04-30 2012-07-03 Texas Instruments Incorporated Video encoder software architecture for VLIW cores incorporating inter prediction and intra prediction
US9232226B2 (en) * 2008-08-19 2016-01-05 Marvell World Trade Ltd. Systems and methods for perceptually lossless video compression
RU2420021C2 (ru) * 2009-03-24 2011-05-27 Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд." Способ сжатия изображений и видеопоследовательностей
US20110110416A1 (en) * 2009-11-12 2011-05-12 Bally Gaming, Inc. Video Codec System and Method
EP3349360B1 (en) * 2011-01-14 2019-09-04 GE Video Compression, LLC Entropy encoding and decoding scheme
US20120294353A1 (en) * 2011-05-16 2012-11-22 Mediatek Inc. Apparatus and Method of Sample Adaptive Offset for Luma and Chroma Components
US20130101033A1 (en) * 2011-10-14 2013-04-25 Qualcomm Incorporated Coding non-symmetric distributions of data
WO2013152401A1 (en) * 2012-04-13 2013-10-17 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding a subset of transform units of encoded video data
US9654777B2 (en) 2013-04-05 2017-05-16 Qualcomm Incorporated Determining palette indices in palette-based video coding
WO2015103496A2 (en) * 2014-01-02 2015-07-09 Vid Scale, Inc. Two-demensional palette coding for screen content coding

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015006724A2 (en) 2013-07-12 2015-01-15 Qualcomm Incorporated Palette prediction in palette-based video coding
US20160323591A1 (en) 2013-12-18 2016-11-03 Hfi Innovation Inc. Method and Apparatus for Palette Initialization and Management

Also Published As

Publication number Publication date
HK1219372A1 (zh) 2017-03-31
WO2015006724A3 (en) 2015-03-26
WO2015006724A2 (en) 2015-01-15
SI3020198T1 (sl) 2017-08-31
BR112016000465A2 (ko) 2017-07-25
MX2016000358A (es) 2016-05-05
EP3020198A2 (en) 2016-05-18
US9558567B2 (en) 2017-01-31
BR112016000465B1 (pt) 2023-04-18
AU2014286986B2 (en) 2018-03-15
JP6246920B2 (ja) 2017-12-13
SG11201509667TA (en) 2016-01-28
MX353756B (es) 2018-01-26
MY182937A (en) 2021-02-05
SA516370356B1 (ar) 2019-07-21
CL2016000057A1 (es) 2016-08-19
JP2016529783A (ja) 2016-09-23
DK3020198T3 (en) 2017-06-06
CN105556974B (zh) 2019-03-12
HUE032104T2 (en) 2017-08-28
RU2641252C2 (ru) 2018-01-16
CN105556974A (zh) 2016-05-04
PH12016500079A1 (en) 2016-04-18
RU2016104535A (ru) 2017-08-16
PH12016500079B1 (en) 2016-04-18
ES2633947T3 (es) 2017-09-26
US20150016501A1 (en) 2015-01-15
CA2913615C (en) 2019-03-05
EP3020198B1 (en) 2017-04-26
CA2913615A1 (en) 2015-01-15
AU2014286986A1 (en) 2016-02-11
KR20160031495A (ko) 2016-03-22

Similar Documents

Publication Publication Date Title
KR101821069B1 (ko) 팔레트-기반 비디오 코딩에서의 팔레트 예측
KR102409816B1 (ko) 비디오 코딩을 위한 팔레트 모드 코딩
US9654777B2 (en) Determining palette indices in palette-based video coding
EP3155815B1 (en) Determining quantization parameter (qp) values and delta qp values for palette coded blocks in video coding
EP3178226B1 (en) Palette mode encoding and decoding design
CA2951569C (en) Determining application of deblocking filtering to palette coded blocks in video coding
KR102344232B1 (ko) 비디오 코딩을 위한 런 길이 코드를 이용한 팔레트 예측자 시그널링
JP6749925B2 (ja) ビデオコーディングにおけるパレットブロックサイズに対する制限
KR102465026B1 (ko) 고 스루풋 cabac 코딩을 위한 팔레트 인덱스 그루핑
AU2016211272B2 (en) Coding escape pixels for palette coding
KR20180056687A (ko) 팔레트 모드 비디오 코딩에서의 이스케이프 픽셀 시그널링된 값들의 제한
KR20220062539A (ko) 비디오 코딩에서의 조인트 크로마 잔차 모드를 위한 양자화 파라미터 시그널링

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant