本明細書で使用される用語は本発明における機能を考慮しながらできるだけ現在広く使用されている一般的な用語を選択したが、これは当分野に携わる技術者の意図、慣例または新たな技術の出現などによって異なり得る。また、特定の場合は出願人が任意に選定した用語もあるが、この場合、該当の発明を実施する形態の部分においてその意味を記載する。よって、本明細書で使用される用語は、単なる用語の名称ではなく、その用語の有する実質的な意味と本明細書全般にわたる内容に基づいて解釈すべきであることを明らかにする。
本明細書において、一部用語は以下のように解釈される。コーディングは、場合によってはエンコーディングまたはでコーディングに解釈される。本明細書において、ビデオ信号のエンコーディング(符号化)を行ってビデオ信号のビットストリームを生成する装置はエンコーディング装置またはエンコーダと称され、ビデオ信号ビットストリームのデコーディング(復号化)を行ってビデオ信号を復元する装置はデコーディング装置またはデコーダと称される。また、本明細書において、ビデオ信号処理装置はエンコーダ及びデコーダをいずれも含む概念の用語として使用される。情報(information)は値(values)、パラメータ(parameter)、係数(coefficients)、成分(elements)などをいずれも含む用語であって、場合によっては意味が異なるように解釈されることがあるため、本発明はこれに限らない。 ‘ユニット’は、映像処理の基本単位又はピクチャの特定位置を表す意味で使われ、ルーマ(luma)成分及びクロマ(chroma)成分のうち少なくとも一つを含むイメージ領域のことを指す。また、「ブロック」は輝度成分及び色差成分(つまり、Cb及びCr)のうち特定成分を含むイメージ領域を指す。但し、実施例によって「ユニット」、「ブロック」、「パーティション」、及び「領域」などの用語は互いに混合して使用されてもよい。また、本明細書において、ユニットはコーディングユニット、予測ユニット、変換ユニットをいずれも含む概念として使用される。ピクチャはフィールドまたはフレームを指し、実施例よっては前記用語は互いに混用して使用される。
図1は、本発明の一実施例によるビデオ信号エンコーディング装置100の概略的なブロック図である。図1を参照すると、本明細書のエンコーディング装置100は、変換部110、量子化部115、逆量子化部120、逆変換部125、フィルタリング部130、予測部150、及びエントロピーコーディング部160を含む。
変換部110は、入力されたビデオ信号と予測部150で生成された予測信号の差であるレジデュアル信号を変換して変換系数値を獲得する。例えば、離散コサイン変換(Discrete Cosine Transform、DCT)、離散サイン変換(Discrete Sine Transform、DST)、またはウェーブレット変換(Wavelet Transform)などが使用される。離散コサイン変換及び離散サイン変換は、入力されたピクチャ信号をブロックの形態に分けて変換を行うようになる。変換において、変換領域内の値の分布と特性によってコーディング効率が異なり得る。量子化部115は、変換部110内で出力された変換係数の値を量子化する。
コーディング効率を上げるために、ピクチャ信号をそのままコーディングするのではなく、予測部150を介して予めコーディングされた領域を利用してピクチャを予測し、予測されたピクチャに原本ピクチャと予測ピクチャの間のレジデュアル値を足して復元ピクチャを獲得する方法が使用される。エンコーダとデコーダでミスマッチが発生しないように、エンコーダで予測を行う際にはデコーダでも使用可能な情報を使用すべきである。そのために、エンコーダでは符号化した現在ブロックを更に復元する過程を行う。逆量子化部120では変換係数値を逆量子化し、逆変換部125では逆量子化された変換系数値を利用してレジデュアル値を復元する。一方、フィルタリング部130は、復元されたピクチャの品質改善及び符号化効率の向上のためのフィルタリング演算を行う。例えば、デブロッキングフィルタ、サンプル適応的オフセット(Sample Adpative Offset、SAO)、及び適応的ループフィルタなどが含まれてもよい。フィルタリングを経たピクチャは、出力されるか参照ピクチャとして利用するために復号ピクチャバッファ(Decoded Picture Buffer、DPB)156に貯蔵される。
コーディング効率を上げるために、ピクチャ信号をそのままコードせず、予測部150で既にコードされた領域を用いてピクチャを予測し、予測されたピクチャに原ピクチャと予測ピクチャ間のレジデュアル値を足して復元ピクチャを取得する方法が用いられる。イントラ予測部152では、現在ピクチャ内で画面内予測を行い、インター予測部154では、復号ピクチャバッファ156に保存された参照ピクチャを用いて現在ピクチャを予測する。イントラ予測部152は、現在ピクチャ内の復元された領域から画面内予測を行い、画面内符号化情報をエントロピーコーディング部160に伝達する。インター予測部154はさらに、モーション推定部154a及びモーション補償部154bを含んで構成されてよい。モーション推定部154aでは、復元された特定領域を参照して現在領域のモーションベクトル値を取得する。モーション推定部154aでは、参照領域の位置情報(参照フレーム、モーションベクトルなど)などをエントロピーコーディング部160に伝達してビットストリームに含まれ得るようにする。モーション推定部154aから伝達されたモーションベクトル値を用いて、モーション補償部154bでは画面間モーション補償を行う。
予測部150は、イントラ予測部152とインター予測部154を含む。イントラ予測部152は現在ピクチャ内でイントラ(intra)予測を行い、インター予測部154は復号ピクチャバッファ156に貯蔵された参照バッファを利用して現在ピクチャを予測するインター(inter)予測を行う。イントラ予測部152は、現在ピクチャ内の復元されたサンプルからイントラ予測を行い、イントラ符号化情報をエントロピーコーディング部160に伝達する。イントラ符号化情報は、イントラ予測モード、MPM(Most Probable Mode)フラッグ、MPMインデックスのうち少なくとも一つを含む。 イントラ符号化情報は、参照サンプルに関する情報を含むことができる。 イントラ符号化情報は参照サンプルに関する情報を含む。インター予測部154は、モーション推定部154a及びモーション補償部154bを含んで構成される。モーション推定部154aは、復元された参照信号ピクチャの特定領域を参照して現在領域のモーションベクトル値を獲得する。モーション推定部154aは、参照領域に対するモーション情報セット(参照ピクチャインデックス、モーションベクトル情報)をエントロピーコーディング部160に伝達する。モーション補償部154bは、モーション補償部154aから伝達されたモーションベクトル値を利用してモーション補償を行う。インター予測部154は、参照領域に対するモーション情報を含むインター符号化情報をエントロピーコーディング部160に伝達する。
更なる実施例によって、予測部150はイントラブロックコピー(block copy、BC)予測部(図示せず)を含む。イントラBC予測部は、現在ピクチャ内の復元されたサンプルからイントラBC予測を行い、イントラBC符号化情報をエントロピーコーディング部160に伝達する。イントラBC予測部は、現在ピクチャ内の特定領域を参照して現在領域の予測に利用される参照領域を示すブロックベクトル値を獲得する。イントラBC予測部は、獲得されたブロックベクトル値を利用してイントラBC予測を行う。イントラBC予測部は、イントラBC符号化情報をエントロピーコーディング部160に伝達する。イントラBC予測部はブロックベクトル情報を含む。
上述したピクチャ予測が行われれば、変換部110は原本ピクチャと予測ピクチャの間のレジデュアル値を変換して変換係数値を獲得する。この際、変換はピクチャ内で特定ブロック単位で行われるが、特定ブロックのサイズは予め設定された範囲内で可変する。量子化部115は、変換部110で生成された変換係数の値を量子化してエントロピーコーディング部160に伝達する。
エントロピーコーディング部160は、量子化された変換係数を示す情報、イントラ符号化情報、及びインター符号化情報などをエントロピーコーディングしてビデオ信号ビットストリームを生成する。 エントロピーコーディング部160では、可変長コーディング(Variable Length Codeing、VLC)方式と算術コーディング(arithmetic coding)方式などが使用される。可変長コーディング(VLC)方式は入力されるシンボルを連続したコードワードにへ難するが、コードワードの長さは可変的である。例えば、よく発生するシンボルは短いコードワードで、よく発生しないシンボルは長いコードワードで表現する。可変長コーディング方式として、コンテキスト基盤適応型可変長コーディング(Context-based Adaptive Variable Length Coding、CAVLC)方式が使用される。算術コーディングは連続したデータシンボルを一つの素数に変換するが、算術コーディングは各シンボルを表現するために必要な最適の素数ビットを得る。算術コーディングとして、コンテキスト基盤適合型算術符号化(Context-based Adaptive Binary Arithmetic Coding、CABAC)方式が使用される。 例えば、エントロピーコーディング部160は、量子化された変換係数を示す情報を二進化することができる。また、エントロピーコーディング部160は、二進化された情報を算術コーディングしてビットストリームを生成することができる。
前記生成されたビットストリームは、NAL(Network Abstraction Layer)ユニットを基本単位にカプセル化される。NALユニットは、符号化された整数個のコーディングツリーユニット(coding tree unit)を含む。ビデオデコーダでビットストリームを復号化するためには、まずビットストリームをNALユニット単位に分離した後、分離されたそれぞれのNALユニットを復号化すべきである。一方、ビデオ信号ビットストリームの復号化のために必要な情報は、ピクチャパラメータセット(Picture Parameter Set、PPS)、シーケンスパラメータセット(Sequence Parameter Set、SPS)、ビデオパラメータセット(Video Parameter Set、VPS)などのような上位レベルセットのRBSP(Raw Byte Sequence Payload)を介して伝送される。
一方、図1のブロック図は本発明の一実施例によるエンコーディング装置100を示し、分離して示したブロックはエンコーディング装置100のエレメントを論理的に区別して示している。よって、上述したエンコーディング装置100のエレメントは、ディバイスの設計に応じて一つのチップまたは複数のチップに取り付けられる。一実施例によると、上述したエンコーディング装置100のの各エレメントの動作はプロセッサ(図示せず)によって行われる。
図2は、本発明の実施例によるビデオ信号デコーディング装置の200概略的なブロック図である。図2を参照すると、本明細書のデコーディング装置200は、エントロピーデコーディング部210、逆量子化部220、逆変換部225、フィルタリング部230、及び予測部250を含む。
エントロピーデコーディング部210は、ビデオ信号ビットストリームをエントロピーデコードし、各領域に対する変換係数情報、イントラ符号化情報、インター符号化情報などを抽出する。例えば、エントロピーデコーディング部210は、ビデオ信号ビットストリームから特定領域の変換係数情報に対する二進化コードを取得することができる。また、エントロピーデコーディング部210は二進化コードを逆二進化し、量子化された変換係数を取得する。逆量子化部220は量子化された変換係数を逆量子化し、逆変換部225は、逆量子化された変換係数を用いてレジデュアル値を復元する。ビデオ信号処理装置200は、逆変換部225から取得したレジデュアル値を、予測部250から取得した予測値と合算して、元来の画素値を復元する。
一方、フィルタリング部230は、ピクチャに対するフィルタリングを行って画質を向上させる。ここには、ブロック歪曲現象を減少させるためのデブロッキングフィルタ及び/またはピクチャ全体の歪曲を除去するための適応的ループフィルタなどが含まれる。フィルタリングを経たピクチャは出力されるか、次のピクチャに対する参照ピクチャとして利用するために復号ピクチャバッファ(DPB)256に貯蔵される。
予測部250は、イントラ予測部252及びインター予測部254を含む。予測部250は、前述したエントロピーデコーディング部210を通じて復号化された符号化タイプ、各領域に対する変換係数、イントラ/インター符号化情報などを活用して予測ピクチャを生成する。復号化が遂行される現在ブロックを復元するために、現在ブロックが含まれた現在ピクチャまたは他のピクチャの復号化された領域が利用できる。 復元に現在ピクチャだけを用いる、すなわち、イントラ予測又はイントラBC予測を行うピクチャ(又は、タイル/スライス)をイントラピクチャ又はIピクチャ(又は、タイル/スライス)、イントラ予測、インター予測及びイントラBC予測を全て行うことができるピクチャ(又は、タイル/スライス)を、インターピクチャ(又は、タイル/スライス)という。インターピクチャ(又は、タイル/スライス)のうち、各ブロックのサンプル値を予測するために、最大で1つのモーションベクトル及び参照ピクチャインデックスを用いるピクチャ(又は、タイル/スライス)を、予測ピクチャ(predictive picture)又はPピクチャ(又は、タイル/スライス)といい、最大で2つのモーションベクトル及び参照ピクチャインデックスを用いるピクチャ(又は、タイル/スライス)を、双予測ピクチャ(Bi-predictive picture)又はBピクチャ(又は、タイル/スライス)という。 言い換えると、Pピクチャ(または、タイル/スライス)は各ブロックを予測するために最大1つの動き情報セットを用いて、Bピクチャ(または、タイル/スライス)は各ブロックを予測するために最大2つの動き情報セットを用いる。ここで、動き情報セットは1つ以上の動きベクトルと1つの参照ピクチャインデックスを含む。
イントラ予測部252は、イントラ符号化情報及び現在ピクチャ内の復元されたサンプルを利用して予測ブロックを生成する。上述したように、イントラ符号化情報は、イントラ予測モード、MPM(MOST Probable Mode)フラッグ、MPMインデックスのうち少なくとも一つを含む。イントラ予測部252は、現在ブロックの左側及び/または上側に位置する復元されたサンプルを参照サンプルとして利用して、現在ブロックのサンプル値を予測する。本開示において、復元されたサンプル、参照サンプル、及び現在ブロックのサンプルはピクセルを示す。また、サンプル値(sample value)はピクセル値を示す。
一実施例において、参照サンプルは現在ブロックの周辺ブロックに含まれたサンプルである。例えば、参照サンプルは現在ブロックの左側境界に隣接したサンプル及び/または上側境界に隣接したサンプルである。また、参照サンプルは現在ブロックの周辺ブロックのサンプルのうち、現在ブロックの左側境界から予め設定された距離以内のライン上に位置するサンプル及び/または現在ブロックの上側境界から予め設定された距離以内のライン上に位置するサンプルである。この際、現在ブロックの周辺ブロックは、現在ブロックに隣接した左側(L)ブロック、上側(A)ブロック、下左側(Below Left、BL)ブロック、右上側(Above Right、AR)ブロック、または左上側(Above Left、AL)ブロックのうち少なくとも一つを含む。
インター予測部254は、復号ピクチャバッファ256に貯蔵された参照ピクチャ及びインター符号化情報を利用して予測ブロックを生成する。インター符号化情報は、参照ブロックに対する現在ブロックのモーション情報セット(参照ピクチャインデックス、モーションベクトルなど)を含む。インター予測には、L0予測、L1予測、及び双予測(Bi-prediction)がある。L0予測はL0ピクチャリストに含まれた一つの参照ピクチャを利用した予測であり、L1予測はL1ピクチャリストに含まれた一つの参照ピクチャを利用した予測を意味する。そのためには、1セットのモーション情報(例えば、モーションベクトル及び参照ピクチャインデックス)が必要である。双予測方式では最大2つの参照領域を利用するが、この2つの参照領域は同じ参照ピクチャに存在してもよく、互いに異なるピクチャにそれぞれ存在してもよい。つまり、双予測方式では最大2セットのモーション情報(例えば、モーションベクトル及び参照ピクチャインデックス)が利用されるが、2つのモーションベクトルが同じ参照ピクチャインデックスに対応してもよく、互いに異なる参照ピクチャインデックスに対応してもよい。この際、参照ピクチャは時間的に現在ピクチャの以前や以降のいずれにも表示(または出力)される。 一実施例によって、双予測方式では、使用される2個の参照領域は、L0ピクチャリスト及びL1ピクチャリストのそれぞれから選択された領域であってよい。
インター予測部254は、モーションベクトル及び参照ピクチャインデックスを利用して現在の参照ブロックを獲得する。前記参照ブロックは、参照ピクチャインデックスに対応する参照ピクチャ内に存在する。また、モーションベクトルによって特定されたブロックのサンプル値またはこれの補間(interpolation)された値が現在ブロックの予測子(predictor)として利用される。サブペル(sub-pel)単位のピクセル正確度を有するモーション予測のために、例えば、輝度信号に対して8-タブ補間フィルタが、色差信号に対して4-タブ補間フィルタが使用される。但し、サブペル単位のモーション予測のための補間フィルタはこれに限らない。このように、インター予測部254は、以前復元されたピクチャから現在ユニットのテクスチャを予測するモーション補償(motion compensation)を行う。この際、インター予測部はモーション情報セットを利用する。
更なる実施例によって、予測部250は、イントラBC予測部(図示せず)を含むことができる。イントラBC予測部は、現在ピクチャ内の復元されたサンプルを含む特定領域を参照して現在領域を復元することができる。イントラBC予測部は、エントロピーデコーディング部210から、現在領域に対するイントラBC符号化情報を取得する。イントラBC予測部は、現在ピクチャ内の特定領域を指示する現在領域のブロックベクトル値を取得する。イントラBC予測部は、取得されたブロックベクトル値を用いてイントラBC予測を行うことができる。イントラBC符号化情報は、ブロックベクトル情報を含むことができる。
前記イントラ予測部252又はインター予測部254から出力された予測値、及び逆変換部225から出力されたレジデュアル値が合算されて復元されたビデオピクチャが生成される。すなわち、ビデオ信号デコーディング装置200は、予測部250で生成された予測ブロックと逆変換部225から取得されたレジデュアルを用いて現在ブロックを復元する。
一方、図2のブロック図は本発明の一実施例によるデコーディング装置200を示し、分離して示したブロックはデコーディング装置200のエレメントを論理的に区別して示している。よって、上述したデコーディング装置200のエレメントは、ディバイスの設計に応じて一つのチップまたは複数のチップに取り付けられる。一実施り例によると、上述したデコーディング装置200のの各エレメントの動作はプロセッサ(図示せず)によって行われる。
図3は、ピクチャ内でコーディングツリーユニット(Coding Tree Unit、CTU)がコーディングユニット(Coding Units、CUs)に分割される実施例を示している。ビデオ信号のコーディング過程において、ピクチャはコーディングツリーユニット(CTU)のシーケンスに分割される。コーディングツリーユニットは、輝度サンプルのNXNブロックと、それに対応する色差サンプルの2つのブロックからなる。コーディングツリーユニットは、複数のコーディングユニットに分割される。コーディングツリーユニットは分割されずにリーフノードになってもよい。この場合、コーディングツリーユニット自体がコーディングユニットになり得る。コーディングユニットは上述したビデオ信号の処理過程、つまり、イントラ/インター予測、変換、量子化及び/またはエントロピーコーディングなどの過程でピクチャを処理するための基本単位を指す。一つのピクチャ内において、コーディングユニットのサイズ及び模様は一定ではない。コーディングユニットは正方形または長方形の模様を有する。長方形コーディングユニット(または、長方形ブロック)は垂直コーディングユニット(または、垂直ブロック)と水平コーディングユニット(または、水平ブロック)を含む。本明細書において、垂直ブロックは高さが幅より大きいブロックであり、水平ブロックは幅が高さより大きいブロックである。また、本明細書において、正方形ではない(non-square)ブロックは長方形ブロックを指すが、本発明はこれに限らない。
図3を参照すると、コーディングツリーユニットは、まずクォードツリー(Quad Tree、QT)構造に分割される。つまり、クォードツリー構造において、2N×2Nのサイズを有する一つのノードはN×Nのサイズを有する4つのノードに分割される。本明細書において、クォードツリーは4進(quaternary)ツリーとも称される。クォードツリー分割は再帰的に行われ、全てのノードが同じ深さに分割される必要はない。
一方、上述したクォードツリーのリーフノード(leaf node)は、マルチ-タイプツリー(Multi-Type Tree、MTT)構造に更に分割される。本発明の実施例によると、マルチタイプツリー構造では一つのノードが水平または垂直分割の2進(binary、バイナリー)または3進(ternary、ターナリー)ツリー構造に分割される。つまり、マルチ-タイプツリー構造には、垂直バイナリー分割、水平バイナリー分割、垂直ターナリー分割、及び水平ターナリー分割の4つの分割構造が存在する。本発明の実施例によると、前記各ツリー構造において、ノードの幅及び高さはいずれも2の累乗値を有する。例えば、バイナリーツリー(binary Tree、BT)構造において、2N×2Nのサイズのノードは垂直バイナリー分割によって2つのN×2Nノードに分割され、水平バイナリー分割によって2つの2N×Nノードに分割される。また、ターナリーツリー(Ternary Tree、TT)構造において、2N×2Nのサイズのノードは垂直ターナリー分割によって(N/2)×2N、N×2N及び(N/2)×2Nのノードに分割され、水平ターナリー分割によって2N×(N/2)、2N×N及び2N×(N/2)のノードに分割される。このようなマルチ-タイプツリー分割は再帰的に行われる。
マルチ-タイプツリーのリーフノードはコーディングユニットできる。コーディングユニットに対する分割が指示されないか、またはコーディングユニットが最大変換長さに比べて大きくない場合、該当コーディングユニットはこれ以上の分割無しで予測及び変換の単位に使われる。 一方、上述したクォードツリー及びマルチ-タイプツリーにおいて、次のパラメータのうち少なくとも一つが事前に定義されるか、PPS、SPS、VPSなどのような上位レベルセットのRBSPを介して伝送される。1)CTUサイズ:クォードツリーのルートノード(root node)のサイズ、2)最小QTサイズ(MinQtSize):許容された最小QTリーフノードのサイズ、3)最大BTサイズ(MaxBtSize):許容された最大BTルートノードのサイズ、4)最大TTサイズ(MaxTtSize):許容された最大TTルートノードのサイズ、5)最大MTT深さ(MaxMttDepth):QTのリーフノードからのMTT分割の最大許容深さ、6)最小BTサイズ(MinBtSize):許容された最小BTリーフノードのサイズ、7)最小TTサイズ:許容された最小TTリーフノードのサイズ。
図4は、クワッドツリー及びマルチ-タイプツリーの分割をシグナリングする方法の一実施形態を図示する。前述したクワッドツリー及びマルチ-タイプツリーの分割をシグナリングするために既設定されたフラグが使われることができる。図4を参照すると、クワッドツリーノードの分割するか否かを指示するフラグ‘qt_split_flag’、マルチ-タイプツリーノードの分割するか否かを指示するフラグ‘mtt_split_flag’、マルチ-タイプツリーノードの分割方向を指示するフラグ‘mtt_split_vertical_flag’またはマルチ-タイプツリーノードの分割形態を指示するフラグ‘mtt_split_binary_flag’のうち、少なくとも1つが使われることができる。
本発明の実施形態によれば、コーディングツリーユニットはクワッドツリーのルートノードであり、クワッドツリー構造に先に分割できる。クワッドツリー構造では各々のノード‘QT_node’別に‘qt_split_flag’がシグナリングされる。‘qt_split_flag’の値が1の場合、該当ノードは4個の正四角形ノードに分割され、‘qt_split_flag’の値が0の場合、該当ノードはクワッドツリーのリーフノード‘QT_leaf_node’となる。
各々のクワッドツリーリーフノード‘QT_leaf_node’はマルチ-タイプツリー構造にさらに分割できる。マルチ-タイプツリー構造では、各々のノード‘MTT_node’別に‘mtt_split_flag’がシグナリングされる。‘mtt_split_flag’の値が1の場合、該当ノードは複数の矩形ノードに分割され、‘mtt_split_flag’の値が0の場合、該当ノードはマルチ-タイプツリーのリーフノード‘MTT_leaf_node’となる。マルチ-タイプツリーノード‘MTT_node’が複数の矩形ノードに分割される場合(即ち、‘mtt_split_flag’の値が1の場合)、ノード‘MTT_node’のための‘mtt_split_vertical_flag’及び‘mtt_split_binary_flag’が追加でシグナリングできる。‘mtt_split_vertical_flag’の値が1の場合、ノード‘MTT_node’の垂直分割が指示され、‘mtt_split_vertical_flag’の値が0の場合、ノード‘MTT_node’の水平分割が指示される。また、‘mtt_split_binary_flag’の値が1の場合、ノード‘MTT_node’は2つの矩形ノードに分割され、‘mtt_split_binary_flag’の値が0の場合、ノード‘MTT_node’は3個の矩形ノードに分割される。
コーティングのためのピクチャ予測(モーション補償)はそれ以上分けられないコーディングユニット(つまり、コーディングユニットツリーのリーフノード)を対象に行われる。このような予測を行う基本単位を、以下では予測ユニット(prediction unit)または予測ブロック(prediction block)という。
以下、本明細書で使用されるユニットという用語は、予測を行う基本単位である前記予測ユニットを代替する用語として使用される。但し、本発明はこれに限らず、より広い意味では、前記コーディングユニットを含む概念として理解される。
図5及び図6は、本発明の実施例によるイントラ予測方法をより詳しく示す図である。上述したように、イントラ予測部は、現在ブロックの左側及び/または上側に位置する復元されたサンプルを参照サンプルとして利用して、現在ブロックのサンプル値を予測する。
まず、図5はイントラ予測モードで現在ブロックを予測するために使用される参照サンプルの一実施例を示す。一実施例によると、参照サンプルは現在ブロックの左側境界に隣接したサンプル及び/または上側境界に隣接したサンプルである。図5に示したように、現在ブロックのサイズがW×Hで現在ブロックに隣接した単一参照ライン(line)のサンプルがイントラ予測に使用されれば、現在ブロックの左側及び/または上側に位置した最大2W+2H+1個の周辺サンプルを使用して参照サンプルが設定される。
また、参照サンプルとして使用される少なくとも一部のサンプルがまだ復元されていなければ、イントラ予測部は参照サンプルパッディング過程を行って参照サンプルを獲得する。また、イントラ予測部は、イントラ予測の誤差を減らすために参照サンプルフィルタリング過程を行う。つまり、周辺サンプル及び/または参照サンプルパッディング過程によって獲得された参照サンプルにフィルタリングを行って、フィルタリングされた参照サンプルを獲得する。 イントラ予測部は、このように取得された参照サンプルを用いて現在ブロックのサンプルを予測する。イントラ予測部は、フィルタリングされない参照サンプル又はフィルタリングされた参照サンプルを用いて現在ブロックのサンプルを予測する。本開示において、周辺サンプルは、少なくとも一つの参照ライン上のサンプルを含むことができる。例えば、周辺サンプルは、現在ブロックの境界に隣接したライン上の隣接サンプルを含むことができる。
次に、図6はイントラ予測に使われる予測モードの一実施形態を図示する。イントラ予測のために、イントラ予測方向を指示するイントラ予測モード情報がシグナリングできる。イントラ予測モード情報は、イントラ予測モードセットを構成する複数のイントラ予測モードのうち、いずれか1つを指示する。現在ブロックがイントラ予測されたブロックである場合、デコーダーはビットストリームから現在ブロックのイントラ予測モード情報を受信する。デコーダのイントラ予測部は、抽出されたイントラ予測モード情報に基づいて現在ブロックに対するイントラ予測を遂行する。
本発明の実施例によると、イントラ予測モードセットは、イントラ予測に使用される全てのイントラ予測モード(例えば、総67個のイントラ予測モード)を含む。より詳しくは、イントラ予測モードセットは、平面モード、DCモード、及び複数の(例えば、65個の)角度モード(つまり、方向モード)を含む。 それぞれのイントラ予測モードは、予め設定されたインデックス(つまり、イントラ予測モードインデックス)を介して指示される。例えば、図6に示したように、イントラ予測モードインデックス0は平面(planar)モードを指示し、イントラ予測モードインデックス1はDCモードを指示する。また、イントラ予測モードインデックス2乃至66は、互いに異なる角度モードをそれぞれ指示する。 角度モードは、既に設定された角度範囲以内の異なる角度をそれぞれ指示する。例えば、角度モードは時計回り方向に45°~-135°の角度範囲(すなわち、第1角度範囲)以内の角度を指示できる。前記角度モードは12時方向を基準に定義されてよい。この際、イントラ予測モードインデックス2は水平対角(Horizontal Diagonal、HDIA)モードを指示し、イントラ予測モードインデックス18は水平(Horizontal、HOR)モードを指示し、イントラ予測モードインデックス34は対角(Diagonal、DIA)モードを指示し、イントラ予測モードインデックス50は水直(Vertical、VER)モードを指示し、イントラ予測モードインデックス66は垂直対角(Vertical Diagonal、VDIA)モードを指示する。
本発明の更なる一実施例において、第1角度範囲を外れる角度モードがさらに用いられてよい。実施例として、第1角度範囲を外れる角度モードは、図6における角度モード-14~-1又は角度モード67~80であってよい。また、前述したように、拡張角度モードの個数は、現在ブロックのサイズ及び/又は形状によって異なってよく、図6における角度モード80まで拡張されたり或いは角度モード-14まで拡張されてよい。例えば、現在ブロックの幅(width)及び高さ(height)の比率に基づく値に基づき、拡張される角度の個数又は拡張されるモードのインデックスが決定されてよい。一実施例において、現在ブロックの幅及び高さの比率に基づく値は、Abs(Log2(width/height))であってよい。また、前記現在ブロックは、変換ブロックであってよい。又は、前記現在ブロックは、CU又はPUであってもよい。
以下、図7を参照して、本発明の実施形態によるインター予測方法について説明する。本発明では、インター予測方法は、並進運動(translation motion)に最適化された一般インター予測方法とアフィン(affine)モデルベースのインター予測方法を含むことができる。また、動きベクトルは、通常、インター予測方法に基づいて動き補償のための一般的な動きベクトルとアフィン動き補償のためのコントロールポイントの動きベクトル(control point motion vector)のうちの少なくとも一つを含むことができる。
図7は、本発明の一実施形態に従うインター予測方法を図示する。前述したように、デコーダは復号化された他のピクチャの復元されたサンプルを参照して現在ブロックを予測することができる。図7を参照すると、デコーダは現在ブロック701の動き情報セットに基づいて参照ピクチャ720内の参照ブロック702を獲得する。この際、動き情報セットは参照ピクチャインデックス及び動きベクトル703を含むことができる。参照ピクチャインデックスは、参照ピクチャリストで現在ブロックのインター予測のための参照ブロックが含まれた参照ピクチャ720を指示する。一実施形態に従って、参照ピクチャリストは前述したL0ピクチャリストまたはL1ピクチャリストのうち、少なくとも1つを含むことができる。動きベクトルは現在ピクチャ710内で現在ブロック701の座標値と参照ピクチャ720内で参照ブロック702の座標値との間のオフセットを示す。デコーダは、参照ブロック702のサンプル値に基づいて現在ブロック701の予測子を獲得し、前記予測子を用いて現在ブロック701を復元する。
具体的に、インコーダーは復元順序が早いピクチャで現在ブロックと類似のブロックを探索して前述した参照ブロックを獲得することができる。例えば、エンコーダは既設定された探索領域内で現在ブロックとサンプル値との差の和が最小となる参照ブロックを探索することができる。この際、現在ブロックと参照ブロックのサンプルとの間の類似度を測定するために、SAD(Sum Of Absolute Difference)またはSATD(Sum of Hadamard Transformed Difference)のうち、少なくとも1つが使われることができる。ここで、SADは2つのブロックに含まれたサンプル値の差の各々の絶対値を全て足した値でありうる。また、SATDは2つのブロックに含まれたサンプル値の差をアダマール変換(Hadamard Transform)して獲得されたアダマール変換係数の絶対値を全て足した値でありうる。
一方、現在ブロックは1つ以上の参照領域を用いて予測されることもできる。前述したように、現在ブロックは2つ以上の参照領域を用いる双予測方式によりインター予測できる。一実施形態に従って、デコーダは現在ブロックの2つの動き情報セットに基づいて2つの参照ブロックを獲得することができる。また、デコーダは獲得された2つの参照ブロックの各々のサンプル値に基づいて現在ブロックの第1予測子及び第2予測子を獲得することができる。また、デコーダは第1予測子及び第2予測子を用いて現在ブロックを復元することができる。例えば、デコーダは第1予測子及び第2予測子のサンプル別平均に基づいて現在ブロックを復元することができる。
前述したように、現在ブロックの動き補償のために、1つ以上の動き情報セットがシグナリングできる。この際、複数のブロックの各々の動き補償のための動き情報セットの間の類似性が利用できる。例えば、現在ブロックの予測に使われる動き情報セットは既復元された他のサンプルのうち、いずれか1つの予測に使われた動き情報セットから誘導できる。これを通じて、エンコーダ及びデコーダはシグナリングオーバーヘッドを減少させることができる。以下では、現在ブロックの動き情報セットがシグナリングされる多様な実施形態に対して説明する。
例えば、現在ブロックのモーション情報セットと同一又は類似のモーション情報セットに基づいて予測された可能性がある複数の候補ブロックが存在し得る。デコーダは、当該複数の候補ブロックに基づいてマージ候補リスト(merge candidate list)を生成できる。ここで、マージ候補リストは、現在ブロックよりも先に復元されたサンプルのうち、現在ブロックのモーション情報セットと関連したモーション情報セットに基づいて予測された可能性があるサンプルに対応する候補を含むことができる。エンコーダとデコーダは、あらかじめ定義された規則に基づいて現在ブロックのマージ候補リストを構成することができる。このとき、エンコーダとデコーダがそれぞれ構成したマージ候補リストは互いに同一であってよい。例えば、エンコーダ及びデコーダは、現在ピクチャ内で現在ブロックの位置に基づいて現在ブロックのマージ候補リストを構成することができる。本開示において、特定ブロックの位置は、特定ブロックを含むピクチャ内で特定ブロックの左上端(top-left)サンプルの相対的な位置を表す。
一方、コーディング効率を上げるために、前述したレジデュアル信号をそのままコードせず、レジデュアル信号を変換して取得された変換係数値を量子化し、量子化された変換係数をコードする方法を用いることができる。前述したように、変換部は、レジデュアル信号を変換して変換係数値を取得することができる。このとき、特定ブロックのレジデュアル信号は、現在ブロックの全領域に分散されていてよい。これによって、レジデュアル信号に対する周波数領域変換を用いて低周波領域にエネルギーを集中させ、コーディング効率を向上させることができる。以下では、レジデュアル信号が変換又は逆変換される方法について具体的に説明する。
図8は、エンコーダがレジデュアル信号を変換する方法を具体的に示す図である。前述したように、空間領域のレジデュアル信号は周波数領域に変換されてよい。エンコーダは、取得されたレジデュアル信号を変換して変換係数を取得することができる。まず、エンコーダは、現在ブロックに対するレジデュアル信号を含む少なくとも一つのレジデュアルブロックを取得することができる。レジデュアルブロックは、現在ブロック又は現在ブロックから分割されたブロックのいずれか一つであってよい。本開示において、レジデュアルブロックは、現在ブロックのレジデュアルサンプルを含むレジデュアルアレイ(array)又はレジデュアルマトリックス(matrix)と称することができる。また、本開示において、レジデュアルブロックは、変換ユニット又は変換ブロックのサイズと同じサイズのブロックを表す。
次に、エンコーダは、変換カーネルを用いてレジデュアルブロックを変換することができる。レジデュアルブロックに対する変換に用いられる変換カーネルは、垂直変換及び水平変換の分離可能な特性を有する変換カーネルであってよい。この場合、レジデュアルブロックに対する変換は、垂直変換及び水平変換に分離して行われてよい。例えば、エンコーダは、レジデュアルブロックの垂直方向に変換カーネルを適用して垂直変換を行うことができる。また、エンコーダは、レジデュアルブロックの水平方向に変換カーネルを適用して水平変換を行うことができる。本開示において、変換カーネルは、変換マトリックス、変換アレイ、変換関数、変換のようにレジデュアル信号の変換に用いられるパラメータセットを表す用語で使われてよい。一実施例によって、変換カーネルは、複数の使用可能なカーネルのいずれか一つであってよい。また、垂直変換及び水平変換のそれぞれに対して異なる変換タイプに基づく変換カーネルが用いられてもよい。
エンコーダは、レジデュアルブロックから変換された変換ブロックを量子化部に伝達して量子化することができる。この時、変換ブロックは複数の変換係数を含むことができる。具体的に、変換ブロックは、2次元配列された複数の変換係数で構成されてよい。変換ブロックのサイズは、レジデュアルブロックと同様に、現在ブロック又は現在ブロックから分割されたブロックのいずれか一つと同一であってよい。量子化部に伝達された変換係数は、量子化された値で表現されてよい。
また、エンコーダは、変換係数が量子化される前に追加の変換を行うことができる。図8に示すように、前述した変換方法は、1次変換(primary transform)、追加の変換は2次変換(secondary transform)と呼ぶことができる。2次変換は、レジデュアルブロック別に選択的であり得る。一実施例によって、エンコーダは、1次変換だけでは低周波領域にエネルギーを集中させ難い領域に対して2次変換を行って、コーディング効率を向上させることができる。例えば、レジデュアル値がレジデュアルブロックの水平又は垂直方向以外の方向で大きく現れるブロックに対して2次変換が追加されてよい。イントラ予測されたブロックのレジデュアル値は、インター予測されたブロックのレジデュアル値に比べて水平又は垂直方向以外の方向に変化する確率が高くてよい。これによって、エンコーダは、イントラ予測されたブロックのレジデュアル信号に対して2次変換をさらに行うことができる。また、エンコーダは、インター予測されたブロックのレジデュアル信号に対して2次変換を省略することができる。
他の例として、現在ブロック又はレジデュアルブロックのサイズによって、二次変換を行うか否かが決定されてよい。また、現在ブロック又はレジデュアルブロックのサイズによって、互いにサイズの異なる変換カーネルが用いられてよい。例えば、幅又は高さのうち短い辺の長さが、第1の予め設定された長さより大きいか等しいブロックに対しては、8×8の二次変換が適用されてよい。また、幅又は高さのうち短い辺の長さが、第2の予め設定された長さより大きいか等しく、第1の予め設定された長さより小さいブロックに対しては、4×4の二次変換が適用されてよい。このとき、第1の予め設定された長さは第2の予め設定された長さより大きい値であってよいが、本開示がこれに制限されるものではない。また、二次変換は、一次変換と違い、垂直変換及び水平変換に分離して行われなくてもよい。このような二次変換は、低帯域非分離変換(Low Frequency Non-Separable Transform,LFNST)と呼ぶことができる。
また、特定領域のビデオ信号の場合、急な明るさ変化によって、周波数変換を行っても高周波帯域エネルギーが減らないことがある。これによって、量子化による圧縮性能が低下することがある。また、レジデュアル値がまれに存在する領域に対して変換を行う場合、エンコーディング時間及びデコーディング時間が不要に増加することがある。このため、特定領域のレジデュアル信号に対する変換は省略されてもよい。特定領域のレジデュアル信号に対する変換を行うか否かは、特定領域の変換と関連したシンタックス要素によって決定されてよい。例えば、前記シンタックス要素は、変換スキップ情報(transform skip information)を含むことができる。変換スキップ情報は、変換スキップフラグ(transform skip flag)であってよい。レジデュアルブロックに対する変換スキップ情報が変換スキップを示す場合、当該レジデュアルブロックに対する変換が行われない。この場合、エンコーダは、当該領域の変換が行われないレジデュアル信号を直ちに量子化することができる。図8を参照して説明されたエンコーダの動作は、図1の変換部で行うことができる。
前述した変換関連シンタックス要素は、ビデオ信号ビットストリームからパースされた情報であってよい。デコーダは、ビデオ信号ビットストリームをエントロピーデコードして変換関連シンタックス要素を取得することができる。また、エンコーダは、変換関連シンタックス要素をエントロピーコーディングしてビデオ信号ビットストリームを生成することができる。
図9は、エンコーダ及びデコーダが変換係数を逆変換してレジデュアル信号を取得する方法を具体的に示す図である。以下、説明の便宜のために、エンコーダ及びデコーダの各逆変換部で逆変換動作が行われるとして説明する。逆変換部は、逆量子化された変換係数を逆変換してレジデュアル信号を取得することができる。まず、逆変換部は、特定領域の変換関連シンタックス要素から当該領域に対する逆変換が行われるか否か検出することができる。一実施例によって、特定変換ブロックに対する変換関連シンタックス要素が変換スキップを示す場合、当該変換ブロックに対する変換は省略されてよい。この場合、変換ブロックに対して、前述した1次逆変換及び2次逆変換が全て省略されてもよい。また、逆量子化された変換係数は、レジデュアル信号として用いられてよい。例えば、デコーダは、逆量子化された変換係数をレジデュアル信号として用いて現在ブロックを復元することができる。
他の実施例によって、特定変換ブロックに対する変換関連シンタックス要素が変換スキップを表せなくてもよい。この場合、逆変換部は、2次変換に対する2次逆変換を行うか否かを決定することができる。例えば、変換ブロックがイントラ予測されたブロックの変換ブロックである場合、変換ブロックに対する2次逆変換が行われてよい。また、変換ブロックに対応するイントラ予測モードに基づいて、当該変換ブロックに用いられる2次変換カーネルが決定されてよい。他の例として、変換ブロックのサイズに基づいて2次逆変換を行うか否かが決定されてよい。2次逆変換は、逆量子化過程後に1次逆変換が行われる前に行われてよい。
逆変換部は、逆量子化された変換係数又は2次逆変換された変換係数に対する1次逆変換を行うことができる。1次逆変換の場合、1次変換と同様に、垂直変換及び水平変換に分離されて行われてよい。例えば、逆変換部は、変換ブロックに対する垂直逆変換及び水平逆変換を行ってレジデュアルブロックを取得することができる。逆変換部は、変換ブロックの変換に用いられた変換カーネルに基づいて変換ブロックを逆変換することができる。例えば、エンコーダは、複数の使用可能な変換カーネルのうち、現在変換ブロックに適用された変換カーネルを指示する情報を明示的又は暗黙的にシグナルすることができる。デコーダは、シグナルされた変換カーネルを示す情報を用いて、複数の使用可能な変換カーネルから、変換ブロックの逆変換に用いられる変換カーネルを選択することができる。逆変換部は、変換係数に対する逆変換によって取得されたレジデュアル信号を用いて現在ブロックを復元することができる。
図10は、本発明の実施例に係る現在ピクチャ参照(current picture referencing)方法を説明するための図である。前述したように、エンコーダ/デコーダは、現在ブロックに対する予測を行うとき、参照ピクチャ内のブロック(すなわち、参照ピクチャ内の参照ブロック)を参照することができる。本発明の一実施例によれば、前記参照ピクチャは、現在ブロックを含むピクチャ、すなわち、現在ピクチャであってよい。すなわち、エンコーダ/デコーダは、現在ブロックに対する予測を行うとき、現在ピクチャ内のブロックを参照することができる。本発明において、このように現在ピクチャ内のブロックを参照して予測を行う方法を、現在ピクチャ参照(current picture referencing,CPR)、イントラブロックコピー(intra block copy,IBC)と呼ぶことができる。一実施例において、IBCを用いる場合、すなわち、現在ブロックにCPRが適用される場合、現在ピクチャはIBC予測のための唯一の参照ピクチャであってよい。このような場合、エンコーダ/デコーダは、参照ピクチャを示すためのシグナリング/パーシングを省略して推論(infer)することができる。
また、一実施例によれば、IBCが適用される場合、現在ブロックが参照する参照ブロックを示すモーションベクトルが存在し得る。一実施例によれば、IBCが適用される場合、参照ブロックの位置は制限されてよい。例えば、参照ブロックの位置は、現在ブロック位置を基準にして一定範囲内の領域に制限されてよい。例えば、参照ブロックの位置が、現在ブロックを含むCTU(coding tree unit)(すなわち、現在CTU)内の領域に制限されてよい。又は、参照ブロック位置は、現在ブロックを含むCTUの少なくとも一部を含む位置に制限されてよい。本発明の実施例によれば、参照ブロック位置を制限することによってメモリ負担を軽減し、圧縮効率を改善することができる。
本発明の一実施例によれば、現在ブロックがIBCを用いるか(又は、現在ブロックにIBCが適用されるか)を示すシグナリング(又は、シンタックス要素)が存在してよい。一実施例として、このようなシグナリングは、現在ブロックを含むより大きい単位(又は、上位レベル)におけるシグナリングであってよい。例えば、現在ブロックがIBCを用いるか否かを示すシンタックス要素は、スライス又はタイルレベルでシグナルされてよい。一実施例として、現在ブロックが参照する参照ピクチャが現在ピクチャである場合、IBCが用いられてよい。又は、現在ピクチャが唯一の参照ピクチャである場合、エンコーダ/デコーダはIBCを用いることができる。さらに、現在ブロックがイントラ予測を用いないブロックである場合に、IBCを用いることができる。すなわち、例えば、現在ブロックに該当する参照ピクチャが現在ピクチャである場合、イントラ予測を用いなければ、IBCを用いることができる。実施例として、現在ピクチャが唯一の参照ピクチャであるか否かを示す変数が定義されてよく、一例として、前記現在ピクチャが唯一の参照ピクチャであることを示す変数は、CurrPicIsOnlyRefと表現されてよい。又は、IBCを用いるということは、参照ピクチャが現在ピクチャであることを示すことができる。又は、IBCを用いるということは、参照ピクチャが現在ピクチャであり、イントラ予測を用いないことを示すことができる。
また、本発明の一実施例によれば、IBCが用いる(又は、適用される)場合、エンコーダ/デコーダは、前述したマージモード、AMVPモードなどを用いてモーション情報(motion information)を示す(又は、シグナリングする)ことができる。また、IBCを用いる場合、現在スライス又はタイルは、Pスライス又はPタイルに設定(又は、定義)されてよい。また、IBCを用いる場合、デュアルツリー(dual tree)を用いることを示すフラグ(又は、シンタックス要素、変数)が、デュアルツリーを用いることを示す値に設定されてよい。本発明において、デュアルツリーは、ルマ成分(luma component)に該当するツリーとクロマ成分(chroma component)に該当するツリーとが異なり得るツリー構造を意味できる。
図10を参照すると、現在ピクチャ内に実線で表現された現在ブロックが存在しており、点線で表現された参照ブロックが現在ピクチャ内に存在している。このとき、前記参照ブロック位置を示すモーション情報が存在してよい。図10を参照すると、表示されている矢印が、参照ブロック位置を示すモーション情報であってよい。また、本発明の一実施例によれば、IBCを用いる場合、候補リスト構成が異なってよい。例えば、IBCを用いる場合、時間候補(temporal candidate)を候補リスト(candidate list)に含めなくてもよい。また、一実施例において、IBCを用いる場合、周辺から参照したモーション情報をスケール(scaling)しなくてもよい。
図11は、本発明の実施例に係るマージ候補リスト(merge candidate list)を構成する方法を例示する図である。本発明の一実施例によれば、IBCを用いる場合、マージ候補リスト構成方法は、IBCを用いない場合と異なってよい。例えば、IBCを用いない場合にマージ候補リストに追加され得る候補の一部が、IBCを用いる場合にマージ候補リストに追加されなくてもよい。一実施例として、IBCを用いる場合、ゼロ(zero)モーションベクトル(motion vector,MV)を用いなくてもよい。現在ピクチャ内でゼロMVが示す参照ブロックは現在ブロックになり得るためである。一実施例として、IBCを用いる場合、時間MV(すなわち、コロゲイテッド(collocated)MV)を用いなくてもよい。IBCを用いる場合、現在ピクチャ以外のピクチャを参照することができないためである。
また、一実施例として、IBCを用いる場合、HMVP候補又はペアワイズ平均候補(pairwise average candidate)を用いなくてもよい。一実施例として、IBCを用いる場合、HMVP候補又はペアワイズ平均候補に基づく候補を用いることができる。また、一実施例として、IBCを用いる場合、サブブロックマージモードを用いなくてもよい。デコーダは、IBCを用いる場合、サブブロックマージモードの適用されるか否かを示すフラグをパースしないで推論することができる。
図12は、本発明の実施例に係るコーディングユニットシンタックス(coding unit syntax)構造を例示する図である。本発明の一実施例によれば、IBCは、独立した予測モードとして存在(又は、定義)してよい。すなわち、前述したイントラ予測、インター予測はそれぞれ、MODE_INTRA、MODE_INTERと示すことができ、MODE_INTRA及びMODE_INTERと異なるMODE_IBCが定義されてよい。また、先の図面に示すように、MODE_INTRA、MODE_INTER、MODE_IBCは、CuPredMode値によって示すことができる。ここで、CuPredModeは、現在予測モードを示す変数である。
図12を参照すると、タイルグループ(tile group)は、CU、CTU、PUなどよりも上位のレベルの処理単位であってよい。本発明の実施例に係るタイルグループは、並列処理(parallel processing)可能な単位であってよい。本発明において、前記タイルグループは、スライス又は他の並列処理可能な単位に代替されてもよい。B(bi-predictive)タイルグループは、イントラ予測又はインター予測、IBCなどを用いることができる。また、Bタイルグループは、ブロックにおいてモーションベクトルと参照インデックスをそれぞれ2個まで用いることができる。又は、Bタイルグループは、ブロックにおいてモーションベクトルと参照インデックスをそれぞれ1個以上用いることができる。
一実施例において、イントラ予測はIBC予測を含むことができる。イントラ予測は、現在ピクチャだけを参照する予測方法であってよい。また、インター予測は、現在ピクチャ以外のピクチャを参照ピクチャとして参照する予測方法であってよい。P(predictive)タイルグループは、イントラ予測又はインター予測、IBC予測などを用いることができる。また、Pタイルグループは、ブロックにおいてモーションベクトルと参照インデックスをそれぞれ1個まで用いることができる。又は、Bタイルグループは、ブロックにおいてモーションベクトルと参照インデックスをそれぞれ2個以上用いなくてよい。
また、I(intra)タイルグループは、イントラ予測、IBC予測を用いることができるタイルグループ(スライス)を表す。また、Iタイルグループは、現在ピクチャ以外のピクチャを参照ピクチャとして参照しなくてよい。
本発明の一実施例によれば、S1201段階において、(tile_group_type !=I | | sps_ibc_enabled_flag)である場合、cu_skip_flag、pred_mode_flag、pred_mode_ibc_flagをパースする可能性が存在し得る。すなわち、(tile_group_type !=I | | sps_ibc_enabled_flag)を満たさない場合、デコーダは、cu_skip_flag、pred_mode_flag、pred_mode_ibc_flagを全てパースしなくてもよい。ここで、sps_ibc_enabled_flagは、IBCの使用可能か否かを示す(又は、指示する)上位レベルのシグナリング(又は、シンタックス要素)であってよい。仮に、sps_ibc_enabled_flagが0に設定された場合にはIBCを使用しなく、1に設定された場合にはIBCを使用することができる。そして、cu_skip_flagは、スキップモードの使用されるか否かを示すシンタックス要素を表す。仮にcu_skip_flagが1である場合、スキップモードが使用されるものであってよい。また、pred_mode_flag又はpred_mode_ibc_flagに基づいて予測モードが決定されてよい。すなわち、pred_mode_flag又はpred_mode_ibc_flagに基づき、現在モードがMODE_INTRAなのか、MODE_INTERなのか、MODE_IBCなのかが決定されてよい。又は、pred_mode_flag又はpred_mode_ibc_flagに基づいてCuPredMode値が決定されてよい。
また、tile_group_typeは、タイルグループの種類を示すことができる。タイルグループの種類は、前述したように、Iタイルグループ、Pタイルグループ、Bタイルグループを含むことができる。また、tile_group_type値がI、P、Bである場合、それぞれ、Iタイルグループ、Pタイルグループ、Bタイルグループを示すことができる。前述したように、本発明において、前記タイルグループは、スライス又は他の並列処理可能な単位と呼ぶことができる。
本発明の一実施例によれば、S1203段階において、(cu_skip_flag[x0][y0]==0 && tile_group_type !=I))である場合、デコーダは、pred_mode_flagをパースすることができる。また、cu_skip_flagが1である場合、デコーダは、pred_mode_flagをパースしなくてもよい。また、tile_group_typeがIである場合、デコーダはpred_mode_flagをパースしなくてもよい。
本発明の一実施例によれば、S1204段階において、((tile_group_type==I && cu_skip_flag[x0][y0]==0)||(tile_group_type !=I &&(cu_skip_flag[x0][y0]| |CuPredMode[x0][y0] !=MODE_INTRA)) && sps_ibc_enabled_flag && blockSizeCondition)である場合、デコーダはpred_mode_ibc_flagをパースすることができる。例えば、(tile_group_type==I && cu_skip_flag[x0][y0]==0)である場合、デコーダはpred_mode_ibc_flagをパースすることができる。又は、(tile_group_type !=I &&(cu_skip_flag[x0][y0]| |CuPredMode[x0][y0] !=MODE_INTRA))である場合、デコーダはpred_mode_ibc_flagをパースすることができる。又は、(tile_group_type==I && cu_skip_flag[x0][y0]==0)でもなく、(tile_group_type !=I &&(cu_skip_flag[x0][y0]| |CuPredMode[x0][y0] !=MODE_INTRA))でもない場合、デコーダはpred_mode_ibc_flagをパースしなくてもよい。また、sps_ibc_enabled_flagが1である場合、デコーダはpred_mode_ibc_flagがパースでき、sps_ibc_enabled_flagが0である場合、pred_mode_ibc_flagをパースしなくてもよい。また、pred_mode_ibc_flagをパースできるブロックサイズ(block size)に基づく条件があらかじめ定義されてよい。図12を参照すると、一例として、ブロックサイズ条件は、cbWidthとcbHeightがいずれも32よりも小さい場合と定義(又は、設定)されてよい。ここで、cbWidthは、現在ブロック(すなわち、コーディングユニット、コーディングブロック)の幅を示す変数であり、cbHeightは、現在ブロックの高さを示す変数である。
また、実施例として、S1205段階において、CuPredModeがMODE_INTRAである場合、デコーダは、イントラ予測に関連したシンタックス要素をパースすることができる。また、CuPredModeがMODE_INTRAである場合、デコーダは、モーションベクトルに関連したシンタックス要素をパースしなくてもよい。また、CuPredModeがMODE_INTRAでない場合、デコーダは、インター予測関連シンタックス要素をパースすることができる。また、CuPredModeがMODE_INTRAでない場合、IBC関連シンタックス要素をパースすることができる。IBC関連シンタックス要素は、モーションベクトル関連シンタックス要素を含むことができる。すなわち、CuPredModeがMODE_IBCである場合、IBC関連シンタックス要素をパースすることができる。IBC関連シンタックス要素は、マージモード関連シンタックス要素、AMVP関連シンタックス要素を含むことができる。また、IBCは、MODE_INTERである場合に比べて予測モードが制限的であり得、パースするシンタックス要素の個数もより少なくてよい。例えば、MODE_IBCである場合、デコーダは、参照リストL0に対するシンタックス要素のみをパースすることができる。他の例として、デコーダは、MODE_IBCである場合、merge_dataシンタックス構造においてモードの使用されるか否かを示すフラグの一部をパースしなくてもよい。また、CuPredModeがMODE_INTRAでない場合、デコーダは、インター予測関連シンタックス要素をパースするか、IBC関連シンタックス要素をパースすることができる。IBC関連シンタックス要素をパースする場合、デコーダは、クロマ成分に対するシンタックス要素をパースしなくてもよい。又は、CuPredModeがMODE_INTRAでない場合、デコーダはインター予測関連シンタックス要素をパースし、IBC関連シンタックス要素をパースすることは、treeTypeがDUAL_TREE_CHROMAでない場合であってよい。DUAL_TREE_CHROMAは、ツリータイプがクロマ成分のデュアルツリーであることを示す。
ここで、treeTypeは、現在ブロック(すなわち、コーディングユニット、コーディングブロック)のツリータイプを示す変数である。言い換えると、treeTypeは、現在コーディングツリーノードである現在ブロックがいずれのツリータイプを用いて分割されるかを示す変数である。前記ツリータイプは、デュアルツリー又はシングルツリーを含むことができる。デュアルツリーの場合、treeTypeは、ルマ成分のデュアルツリー又はクロマ成分のデュアルツリーを示すことができる。
本発明の一実施例として、エンコーダ/デコーダは、treeTypeに基づき、いずれの成分(例えば、ルマ成分(ブロック)又はクロマ成分(ブロック))に対するシンタックスをパースするか、いずれの成分に対する処理を行うものかを判断(又は、決定)することができる。仮に、treeTypeがSINGLE_TREEである場合、ルマ成分とクロマ成分がシンタックス要素値を共有できる。また、仮にtreeTypeがSINGLE_TREEである場合には、ルマブロックとクロマブロックが同一の方法で(又は、同一の構造で)分割(partitioning)されてよい。仮に、treeTypeがDUAL_TREEである場合には、ルマブロックとクロマブロックが個別の方法で分割されてよい。また、DUAL_TREEであるtreeTypeは、DUAL_TREE_LUMA、DUAL_TREE_CHROMAを含むことができる。treeTypeがDUAL_TREE_LUMAかDUAL_TREE_CHROMAかによって、デコーダは、ルマ成分に対する処理をするものか、クロマ成分に対する処理をするものかが判断(又は、決定)できる。
本発明の一実施例によれば、現在コーディングユニットの予測モードは、pred_mode_flagに基づいて決定されてよい。また、pred_mode_flagに基づいてCuPredModeが決定されてよい。また、pred_mode_flagに基づき、インター予測かイントラ予測かを示すことができる。本発明の一実施例によれば、pred_mode_flagが0であれば、CuPredModeはMODE_INTERに設定されてよい。また、pred_mode_flagが1であれば、CuPredModeがMODE_INTRAに設定されてよい。一実施例によれば、pred_mode_flagは、現在CUがインター予測モードかイントラ予測モードかを示すことができる。
仮にpred_mode_flagが存在しない場合、デコーダは、pred_mode_flag又はCuPredModeを推論することができる。仮に、pred_mode_flagが存在しない場合、pred_mode_flag又はCuPredModeを、タイルグループ(又は、スライス)に基づいて推論することができる。例えば、Iタイルグループである場合、デコーダは、CuPredModeをMODE_INTRAと推論できる。また、Pタイルグループ又はBタイルグループである場合、デコーダは、CuPredModeをMODE_INTERと推論できる。
また、本発明の一実施例によれば、現在コーディングユニットの予測モードはpred_mode_ibc_flagに基づいて決定されてよい。また、pred_mode_ibc_flagに基づいてCuPredModeが決定されてよい。また、エンコーダ/デコーダは、pred_mode_ibc_flagに基づいてIBCモードであるか否かを示すことができる。
一実施例において、pred_mode_ibc_flagが0である場合、CuPredModeはMODE_INTERに設定されてよい。また、pred_mode_ibc_flagが1である場合、CuPredModeはMODE_IBCに設定されてよい。又は、pred_mode_ibc_flagが0である場合、CuPredModeは、MODE_IBCでない値に設定されてよい。
仮に、pred_mode_ibc_flagが存在しない場合、デコーダは、pred_mode_ibc_flag又はCuPredModeを推論することができる。仮にpred_mode_ibc_flagが存在しない場合、デコーダは、pred_mode_ibc_flag又はCuPredModeを、タイルグループ(又は、スライス)に基づいて推論することができる。例えば、Iタイルグループである場合、CuPredModeをMODE_INTRAと推論できる。また、Pタイルグループ又はBタイルグループである場合、CuPredModeをMODE_INTERと推論できる。
本発明の一実施例によれば、IBCを用いる場合、エンコーダ/デコーダは、スキップモードを用いることができる。例えば、Iタイルグループ(又は、スライス)に対してIBCを用いる場合、エンコーダ/デコーダはスキップモードを用いることができる。例えば、Iタイルグループに対して、エンコーダ/デコーダは、IBCを用いるCUに対してスキップモードを使用することができる。例えば、Iタイルグループにおいて、IBCモードであり、スキップモードである場合を仮定することができる。この場合、sps_ibc_enabled_flagは1であってよい。また、デコーダは、cu_skip_flagをパースすることができる。このとき、cu_skip_flagの値は、1(スキップモードを用いることを示す値)であってよい。また、cu_skip_flagが1であるか或いはIタイルグループである場合、デコーダは、pred_mode_flagをパースしなくてもよい。この場合、Iタイルグループに対して、デコーダはCuPredModeをMODE_INTRAと推論できる。また、Iタイルグループであり、cu_skip_flagが1である場合、pred_mode_ibc_flagをパースしなくてもよい。この場合、デコーダは、Iタイルグループに対してCuPredModeをMODE_INTRAと推論できる。したがって、IBCを用いるにもかかわらず、CuPredModeがMODE_IBCと表現されない状況が発生し得る。
図13は、本発明の一実施例に係るコーディングユニットシンタックス構造を例示する図である。本発明の一実施例によれば、エンコーダ/デコーダは、クロマ成分に対してIBCモードを用いなくてもよい。具体的に、ツリータイプがDUAL_TREE_CHROMAである場合、エンコーダ/デコーダはIBCモードを用いなくてもよい。図13を参照すると、S1301段階において、treeTypeがDUAL_TREE_CHROMAでない場合、デコーダはpred_mode_ibc_flagをパースすることができる。また、treeTypeがDUAL_TREE_CHROMAである場合、デコーダはpred_mode_ibc_flagをパースしなくてもよい。一実施例によれば、treeTypeがDUAL_TREE_CHROMAである場合、デコーダはCuPredModeをMODE_INTRAと推論できる。
図14は、本発明の一実施例に係るコーディングユニットシンタックス構造を例示する図である。図14に示すコーディングユニットシンタックスは、イントラ予測に関連したシンタックスを例示する。本発明の一実施例によれば、intra_chroma_pred_modeシグナリングが存在してよい。ここで、intra_chroma_pred_modeは、クロマ成分のイントラ予測モードを示すシンタックス要素を表す。後述するように、前記intra_chroma_pred_modeは、ルマ成分のイントラ予測モードによるイントラ予測モードテーブル内で特定予測モード組合せを示すインデックスであってよく、本発明において、前記intra_chroma_pred_modeは、クロマイントラ予測モードインデックスと呼ぶことができる。
図14を参照すると、S1401段階において、treeTypeがSINGLE_TREEであるか或いはDUAL_TREE_CHROMAである場合、デコーダは、intra_chroma_pred_modeをパースすることができる。また、treeTypeがDUAL_TREE_LUMAである場合、デコーダはintra_chroma_pred_modeをパースしなくてもよい。
図15は、本発明の一実施例に係るクロマ成分に対するイントラ予測モード誘導方法を例示する図である。図15を参照すると、本発明の実施例に係るクロマ成分に対するイントラ予測モード誘導プロセスは、現在クロマコーディングブロックの左上端(top-left)サンプル位置、現在クロマコーディングブロックの幅及び高さを入力とすることができ、本プロセスにおいてクロマイントラ予測モードが誘導されてよい。図15で、IntraPredModeCは、クロマ成分に対するイントラ予測モードを表す。また、xCb、yCbは、クロマコーディングブロックの左上端サンプルを、ルマ位置を基準にして表したものであってよい。また、IntraPredModeYは、ルマ成分に対するイントラ予測モードであってよい。
本発明の一実施例によれば、IntraPredModeCは、IntraPredModeYに基づいて決定されてよい。また、IntraPredModeCは、IntraPredModeY及びintra_chroma_pred_modeに基づいて決定されてよい。このとき、IntraPredModeYは、現在クロマブロックに該当する(又は、対応する)ルマブロックのイントラ予測モードであってよい。一実施例によれば、特定位置のIntraPredModeCに該当するIntraPredModeYの使用位置は、既に設定されていてよい。一実施例によれば、既に設定された位置は、現在クロマブロックの中央位置に該当する(又は、対応する)ルマブロック位置であってよい。例えば、(xCb,yCb)位置のIntraPredModeCを誘導するとき、エンコーダ/デコーダは、(xCb+cbWidth/2,yCb+cbHeight/2)位置のIntraPredModeYを参照することができる。又は、(xCb,yCb)位置のIntraPredModeCを誘導するとき、既に設定された位置は、(xCb,yCb)ルマ位置に基づいて設定される位置であってよい。
本発明の一実施例によれば、IntraPredModeYによるIntraPredModeC値は、次の表1又は表2を参照して決定できる。表1は、CCLM(cross-component linear model)を使用できない場合(すなわち、sps_cclm_enalbed_flagが0である場合)のクロマイントラ予測モード決定方法を示しており、表2は、CCLMを使用できる場合(すなわち、sps_cclm_enalbed_flagが1である場合)のクロマイントラ予測モード決定方法を示している。CCLM予測モードは、他のカラー成分の値(例えば、他のカラー成分の復元された値)に基づいて予測サンプルが取得される予測方法であってよい。又は、CCLM予測モードは、カラー成分間の線形モデルに基づいて予測サンプルが取得される予測方法であってよい。
表1及び表2を参照すると、エンコーダ/デコーダは、既に設定された位置(例えば、クロマコーディングブロックの右下中央ルマ位置)のIntraPredModeY値による列(column)を参照することができ、当該列においてintra_chroma_pred_modeに該当する値がIntraPredModeCになり得る。例えば、IntraPredModeYが1であり、intra_chroma_pred_modeが1である場合、IntraPredModeCは50であってよい。
一実施例によれば、sps_cclm_enalbed_flagは、CCLMが適用され得るか否かを示す上位レベルのシグナリング(又は、シンタックス要素)であってよい。例えば、sps_cclm_enalbed_flagが1である場合、CCLMが適用され得るものであってよい。また、sps_cclm_enalbed_flagが0である場合、CCLMが適用され得ないものであってよい。
また、表2で、IntraPredModeC値が81、82又は83であるものは、CCLMモードが適用される場合であることを示すことができる。また、表1のsps_cclm_enabled_flagが0のとき、IntraPredModeC値が4であるものは、現在クロマ成分の予測モードがDMモードに該当することを示すことができる。また、表2のsps_cclm_enabled_flagが1のとき、IntraPredModeC値が7であるものは、現在クロマ成分の予測モードがDMモードに該当することを示すことができる。
また、intra_chroma_pred_modeをシグナルするビンストリング(bin string)があらかじめ定義されてよい。例えば、エンコーダ/デコーダは、DMモードを、最も少ないビット数のintra_chroma_pred_modeを用いて示すことができる。例えば、エンコーダ/デコーダは、DMモードを1ビットのintra_chroma_pred_modeを用いて示すことができる。
また、一実施例によれば、sps_cclm_enalbed_flagが0である場合、エンコーダ/デコーダは、intra_chroma_pred_mode値4、0、1、2、3を示すビット数を次第に増加するように設定(又は、割り当て)したり、又は同じ値に設定することができる。一実施例によれば、sps_cclm_enalbed_flagが0である場合、intra_chroma_pred_mode値4、0、1、2、3を示すビンストリングはそれぞれ、0、100、101、110、111に設定(又は、割り当て)されてよい。
また、一実施例によれば、sps_cclm_enalbed_flagが1である場合、エンコーダ/デコーダは、intra_chroma_pred_mode値7、4、5、6、0、1、2、3を示すビット数を次第に増加するように設定(又は、割り当て)したり、又は同じ値に設定することができる。一実施例によれば、sps_cclm_enalbed_flagが1である場合、intra_chroma_pred_mode値7、4、5、6、0、1、2、3を示すビンストリングはそれぞれ、0、10、1110、1111、11000、11001、11010、11011に設定(又は、割り当て)されてよい。
上述した実施例によれば、クロマブロックに対するイントラ予測が容易でない場合が発生し得る。特に、クロマブロックに対するイントラ予測モード誘導が容易でない場合が発生し得る。前述したように、クロマブロックがイントラ予測である場合、イントラ予測モードを決定するために、該当のルマブロックに対するイントラ予測モードを参照しなければならないことがある。しかし、仮に該当のルマ位置がイントラ予測をしない場合、即ちMODE_INTRAでない場合が発生し得る。例えば、該当のルマ位置がMODE_IBCである場合、該当するイントラ予測モードが存在しないことがある。一実施例によれば、SINGLE_TREEである場合には、該当するルマブロックとクロマブロックが同一の予測モードを用いることができる。また、DUAL_TREEである場合には、該当するルマブロックとクロマブロックが異なる予測モードを用いることができる。また、Iタイルグループである場合にDUAL_TREEを用いることができる。また、Iタイルグループである場合に、MODE_INTRA又はMODE_IBCを用いることができる。したがって、同一の位置(又は、対応する位置)でDUAL_TREE_LUMAはMODE_IBCを使用し、DUAL_TREE_CHROMAはMODE_INTRAを使用する場合が発生し得る。
図16は、本発明の一実施例に係るクロマ成分のイントラ予測モードを誘導する方法を例示する図である。図16の実施例において、先の図15で説明した問題を解決するための方法を提示することができる。本発明の一実施例によれば、IntraPredModeYが存在しない場合、IntraPredModeYは、既に設定されたモード(又は、値)に設定されてよい。言い換えると、クロマ成分の対応位置のルマ成分のイントラ予測モードが存在しない場合、クロマ成分のイントラ予測モードを誘導するためのルマイントラ予測モードは、あらかじめ設定されたモード(又は、値)に設定されてよい。したがって、クロマブロックに該当する(又は、対応する)ルマ位置がイントラ予測を使用していない場合又はIBCモードを使用した場合にも、既に設定された値に基づいてIntraPredModeCを誘導することができる。
より具体的に、IntraPredModeYが存在しない場合、IntraPredModeYはプラナーモード(すなわち、値0又はモード番号0)に設定されてよい。このような場合、上の表1及び表2で説明したシグナリング方法において、エンコーダはプラナーモードを少ないビット数を用いてデコーダにシグナルすることができる。
又は、IntraPredModeYが存在しない場合、IntraPredModeYは、DCモード(すなわち、値1又はモード番号1)に設定されてよい。このような場合、上の表1及び表2で説明したシグナリング方法において、エンコーダは、DCモードを少ないビット数を用いてデコーダにシグナルすることができる。
又は、IntraPredModeYが存在しない場合、IntraPredModeYは、垂直モード(すなわち、値50又はモード番号50)に設定されてよい。このような場合、上の表1及び表2で説明したシグナリング方法において、エンコーダは、垂直モードを少ないビット数を用いてデコーダにシグナルすることができる。
又は、IntraPredModeYが存在しない場合、IntraPredModeYは、水平モード(すなわち、値18又はモード番号18)に設定されてよい。このような場合、上の表1及び表2で説明したシグナリング方法において、エンコーダは、水平モードを少ないビット数を用いてシグナルすることができる。
他の実施例として、IntraPredModeYが存在しない場合、intra_chroma_pred_mode値に該当するIntraPredModeC値は、上の表1及び表2に示されていない値に定めれてもよい。すなわち、上の表1及び表2において、IntraPredModeY値が存在しない場合の列が別に存在してもよい。例えば、intra_chroma_pred_mode4、0、1、2、3に該当するIntraPredModeCはそれぞれ、0、1、50、18であってよい。又は、intra_chroma_pred_mode4、0、1、2、3に該当するIntraPredModeCはそれぞれ、0、50、18、1であってよい。これは、sps_cclm_enabled_flagが0である場合と1である場合のいずれにも適用可能である。
他の実施例として、IntraPredModeYが存在しない場合、IntraPredModeCを既に設定された値に設定することができる。例えば、IntraPredModeYが存在しない場合、intra_chroma_pred_modeに関係なく、IntraPredModeCを、既に設定された値に設定することができる。また、IntraPredModeYが存在しない場合、intra_chroma_pred_mode値を常に0としてシグナルすることができる。例えば、IntraPredModeYが存在しない場合、IntraPredModeCをプラナーモードに設定できる。又はIntraPredModeYが存在しない場合、IntraPredModeCをCCLMに設定できる。又は、IntraPredModeYが存在しない場合、IntraPredModeCをDMモードに設定できる。また、IntraPredModeYが存在しない場合、デコーダは、先の図14で説明したintra_chroma_pred_modeをパースしなくてもよい。
他の実施例として、IntraPredModeYが存在しない場合、エンコーダ/デコーダは、IntraPredModeYを参照する位置を変更することができる。
前述したように、上記の実施例において、IntraPredModeYが存在しない場合は、クロマイントラ予測モードを誘導する時に参照する該当のルマ位置MODE_INTRAでない場合を表すことができる。すなわち、(xCb,yCb)位置のクロマイントラ予測モードを誘導するとき、ルマ成分に該当するCuPredMode[xCb+cbWidth/2][yCb+cbHeight/2]がMODE_INTRAでない場合又はMODE_IBCである場合を意味できる。
図16を参照すると、エンコーダ/デコーダは、IntraPredModeC[xCb][yCb]を誘導するとき、IntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]が存在しなければ(MODE_INTRAでない場合又はMODE_IBCである場合)、IntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]を、既に設定された値に設定できる。そして、設定されたIntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]及び前述の表1又は表2を参照してIntraPredModeCを誘導することができる。
また、エンコーダ/デコーダは、IntraPredModeC[xCb][yCb]を誘導するとき、IntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]が存在する場合、IntraPredModeY[xCb+cbWidth/2][yCb+cbHeight/2]及び前述の表1又は表2を参照してIntraPredModeCを誘導することができる。
本発明の他の実施例によれば、クロマブロックを予測するとき、該当のルマブロックがIBCモードを使用した場合に予測モードが制限され得る。より具体的に、クロマブロックをイントラ予測するとき、該当のルマブロックがIBCモードを使用した場合にイントラ予測モードが制限されてよい。例えば、このような場合、DMモードを用いなくてもよい。該当するルマブロックとクロマブロックが個別のモードを使用した場合、両者間の類似性が低下し得るためである。
本発明の一実施例によれば、イントラ予測モードの予測モードインデックスによってイントラ予測モードの予測角度が定義されてよい。一実施例において、次の表3のような予測モードインデックスと角度とのマッピングテーブルが定義されてよい。本明細書において、イントラ予測モードインデックスは、モードインデックス、予測モード番号、モード番号などと呼ぶこともできる。
表3で、predModeIntraは、イントラ予測モード(又は、予測モードインデックス、予測モード番号)を示すパラメータ(又は、変数)である。本明細書において、predModeIntraは、イントラ予測モードと呼ぶことができる。そして、intraPredAngleは、イントラ予測モードの角度(又は、予測角度)を示すパラメータ(又は、変数)である。本明細書において、intraPredAngleは、予測角度と呼ぶことができる。一実施例において、予測角度はイントラ予測モードによって決定されてよい。また、エンコーダ/デコーダは、予測角度に基づき、現在サンプルを基準にしていずれの位置又は角度の参照サンプルを用いて予測するかを決定することができる。
本発明の一実施例によれば、表3は、先の図6で説明した予測モードの予測角度に関連した予測モードインデックス及び角度パラメータ間のマッピングを示すことができる。一実施例によれば、表3のイントラ予測モードは、シグナルされたインデックスから変換した、実際の予測に用いる予測モードのインデックスを示すことができる。例えば、シグナルされたモードインデックスに対して現在ブロックが非正方形ブロック(non-square block)である場合、次の過程を経て変換が適用されてよい。言い換えると、一実施例において、幅と高さが同一でない非正方形ブロックに対して、イントラ予測モードは、次のようなプロセスで修正されてよい。
- A.仮に、以下の全ての条件を満たす場合、イントラ予測モード(predModeIntra)は、(predModeIntra(すなわち、シグナルされたモードインデックス)+65)に設定されてよい。
- a.nTbWがnTbHよりも大きい場合
- b.イントラ予測モードが2よりも大きいか同一である場合
- c.イントラ予測モードが(whRatio>1)?12:8よりも小さい場合
- B.そうでなければ、仮に以下の全ての条件を満たす場合、イントラ予測モードは(predModeIntra-67)に設定されてよい。
- a.nTbHがnTbWよりも大きい場合
- b.イントラ予測モードが66よりも小さいか同一である場合
- c.イントラ予測モードが(whRatio>1)?56:60よりも大きい場合
上述したプロセスにおいて、nTbWは、現在処理ブロック(コーディングブロック又は変換ブロック)の幅を表し、nTbHは、現在処理ブロックの高さを表す。whRatioは、幅と高さとの比率を示す変数である。一例として、whRatioはMin(Abs(Log2(nTbW/nTbH),2)に設定されてよい。A?B:Cは、Aが真である場合、B、Aが偽である場合に、Cの値を導出する演算を表す。
本発明の一実施例によれば、イントラ予測モードの予測モードインデックスによってイントラ予測モードの予測角度が定義されてよい。一実施例において、次の表4のような予測モードインデックスと角度とのマッピングテーブルが定義されてよい。
表4で、predModeIntraは、イントラ予測モード(又は、予測モードインデックス、予測モード番号)を示すパラメータ(又は、変数)である。本明細書において、predModeIntraは、イントラ予測モードと呼ぶことができる。そして、intraPredAngleは、イントラ予測モードの角度(又は、予測角度)を示すパラメータ(又は、変数)である。本明細書において、intraPredAngleは、予測角度と呼ぶことができる。一実施例において、予測角度はイントラ予測モードによって決定されてよい。また、エンコーダ/デコーダは、予測角度に基づき、現在サンプルを基準にしていずれの位置又は角度の参照サンプルを用いて予測するかが決定できる。
本発明の一実施例によれば、表4は、図6で説明した予測モードの予測角度に関連した予測モードインデックス及び角度パラメータ間のマッピングを示すことができる。一実施例によれば、表2のイントラ予測モードは、シグナルされたインデックスから変換した、実際の予測に用いる予測モードのインデックスを示すことができる。例えば、シグナルされたモードインデックスに対して現在ブロックが非正方形ブロック(non-square block)である場合、次の過程を経て変換が適用されてよい。言い換えると、一実施例において、幅と高さが同一でない非正方形ブロックに対して、イントラ予測モードは、次のようなプロセスで修正されてよい。
- A.仮に、以下の全ての条件を満たす場合、wideAngleは1に設定され、イントラ予測モード(predModeIntra)は、(predModeIntra(すなわち、シグナルされたモードインデックス)+65)に設定されてよい。
- a.nTbWがnTbHよりも大きい場合
- b.イントラ予測モードが2よりも大きいか同一である場合
- c.イントラ予測モードが(whRatio>1)?(8+2*whRatio):8よりも小さい場合
- B.そうでなければ、仮に以下の全ての条件を満たす場合、wideAngleは1に設定され、イントラ予測モードは(predModeIntra-67)に設定されてよい。
- a.nTbHがnTbWよりも大きい場合
- b.イントラ予測モードが66よりも小さいか同一である場合
- c.イントラ予測モードが(whRatio>1)?(60-2*whRatio):60よりも大きい場合
上述したプロセスにおいて、nTbWは、現在処理ブロック(コーディングブロック又は変換ブロック)の幅を表し、nTbHは、現在処理ブロックの高さを表す。whRatioは、幅と高さとの比率を示す変数(又は、パラメータ)である。一例として、whRatioは、Min(Abs(Log2(nTbW/nTbH),2)に設定されてよい。A?B:Cは、Aが真である場合、B、Aが偽である場合に、Cの値を導出する演算を表す。wideAngleは、現在ブロックに広角(wide angle)が適用されるか否かを示す変数(又は、パラメータ)である。
本発明の一実施例によれば、表3及び表4で説明したイントラ予測角度は、次のような方法で利用(又は、適用)されてよい。例えば、インバース(inverse)角度パラメータであるinvAngleは、予測角度に基づいて誘導されてよい。より具体的に、invAngleは、Round(256*32/intraPredAngle)で誘導されてよい。また、エンコーダ/デコーダは、invAngleに基づいて参照サンプル配列を生成することができる。また、エンコーダ/デコーダは、invAngleに基づいて位置依存のイントラ予測サンプルフィルタリング(position-dependent intra prediction sample filtering)を行うことができる。また、参照サンプル(又は、予測サンプル)の位置を特定するための変数iIdx及びiFact値は、イントラ予測角度に基づいて誘導されてよい。また、予測サンプルは、iIdx及びiFactに基づいて誘導されてよい。また、予測サンプルは、ref、iIdx、iFactに基づいて誘導されてよい。
一実施例において、エンコーダ/デコーダは、以下に説明する方法を適用して、イントラ予測角度に基づいて予測サンプルを生成することができる。仮に、イントラ予測モードが34よりも大きいか同一である場合、インデックス変数iIdx及び乗算因子iFactは、次の式1に基づいて誘導されてよい。
式1で、refIdxは、イントラ予測のためにいずれの参照サンプルラインを用いるかを示すインデックスであってよい。また、予測サンプルは、次の式2のように誘導されてよい。
一実施例において、式2による予測サンプル誘導は、cIdxが0である場合(すなわち、現在成分が輝度成分(luma component)である場合)に行われてよい。式2で、fTは、補間フィルター係数(interpolation filter coefficients)であってよい。また、summation{i is from x to y}(eq(i))は、eq(i)の値に対してiをxからyまでに変化させながら加算する演算を表す。また、Clip1Y演算は、次の式3のような意味を有することができる。
Clip3(x,y,z)は、z<xの時にx、z>yの時にy、そうでない時にzであってよい。
また、予測サンプルは、次のようなプロセスによって誘導されてよい。
- 仮に、iFactが0でない場合、予測サンプル値を示すpredSamples[x][y]は、次の式4によって誘導されてよい。
- そうでなければ、予測サンプル値を示すpredSamples[x][y]は、次の式5によって誘導されてよい。
一実施例において、数学式4及び5による誘導は、cIdxが0でない場合(すなわち、現在成分が色差成分(chroma component)である場合)に行われてよい。仮に、イントラ予測モードが34未満である場合、インデックス変数iIdx及び乗算因子iFactは、次の式6に基づいて誘導されてよい。
式6で、refIdxは、イントラ予測のためにいずれの参照サンプルラインを用いるかを示すインデックスであってよい。また、予測サンプルは、次の式7のように誘導されてよい。
一実施例において、式7による予測サンプル誘導は、cIdxが0である場合(すなわち、現在成分が輝度成分(luma component)である場合)に行われてよい。式2で、fTは、補間フィルター係数(interpolation filter coefficients)であってよい。また、summation{i is from x to y}(eq(i))は、eq(i)の値を、iをxからyまでに変化させながら足す演算を表す。
また、予測サンプルは、次のようなプロセスによって誘導されてよい。
- 仮に、iFactが0でない場合、予測サンプル値を示すpredSamples[x][y]は、次の式8によって誘導されてよい。
- そうでなければ、予測サンプル値を示すpredSamples[x][y]は、次の式9によって誘導されてよい。
一実施例において、数学式8及び9による誘導は、cIdxが0でない場合(すなわち、現在成分が色差成分(chroma component)である場合)に行われてよい。
前述した表3及び表4を比較すると、表4において、表3に比して-14~-11と77~80のイントラ予測モードが追加されている。また、表3及び表4において、同じイントラ予測モードに対してイントラ予測角度値が異なるように決定されてよい。例えば、表3及び表4を参照すると、-10~-4、6~14、22~30、38~46、54~62、70~76のイントラ予測モードにおいてイントラ予測角度値が個別に定義(又は、設定)されてよい。
次の表5は、前述した実施例をより具体的に示す予測サンプル誘導プロセスを例示する。
表5で、p[x][y]は、周辺参照サンプルを示すことができる。また、現在ブロックの左上端(top-left)座標は(0,0)と定義されてよい。表5を参照すると、エンコーダ/デコーダは、現在ブロックの予測サンプルを、表5に示したプロセスによって誘導することができる。エンコーダ/デコーダは、現在ブロックのイントラ予測モードによって個別の誘導方法を適用することができる。具体的に、エンコーダ/デコーダは、現在ブロックの予測モードに基づいて参照サンプル配列(メイン参照サンプルともいう。)を誘導し、誘導された参照サンプルに基づいて現在ブロックの予測サンプルを誘導することができる。このとき、上の式1~9で説明した方法が適用されてよい。
図17は、本発明の一実施例に係るイントラ予測モード誘導方法を例示する図である。図17を参照すると、IntraPredModeYは、イントラ予測モードを示す値であってよい。例えば、IntraPredModeYは、ルマイントラ予測モードを示す値であってよい。本発明の一実施例によれば、IntraPredModeYをモードリストから誘導する方法があり得る。さらに他の実施例において、IntraPredModeYを、前記モードリストに含まれていないモードから誘導する方法があり得る。本発明において、前記モードリストは、MPMリスト、候補リスト、候補モードリストと呼ぶことができる。例えば、前記モードリストは、図17の候補モードリストを示す変数candModeListであってよい。また、一実施例によれば、モードリストは一つ以上存在してよい。また、モードリストに含まれるモードの個数は1個以上であってよい。
本発明の一実施例によれば、MPM(most probable mode)フラグに基づいてイントラ予測モードを誘導する方法が個別に設定(又は、定義)されてよい。ここで、MPM(most probable mode)は、現在ブロックのイントラ予測モードが現在ブロック周辺のイントラ予測されたブロックから誘導されるモードを表す。前記MPM(most probable mode)フラグは、現在ブロックのイントラ予測モードがMPMを用いて符号化されたか否かを示すフラグ(又は、シンタックス要素)を表す。本発明において、前記MPMフラグは、intra_luma_mpm_flagと表現されてよい。例えば、MPMフラグが1である場合、前述したように、モードリストからIntraPredModeYを誘導することができる。又は、MPMフラグが0である場合、前述したように、モードリストに含まれていないモードからIntraPredModeYを誘導することができる。
一実施例において、MPMフラグが1である場合、IntraPredModeYは、シグナルされたインデックスに基づいて設定されてよい。例えば、MPMフラグが1である場合、IntraPredModeYは、シグナルされたインデックス及びモードリストに基づいて設定されてよい。より具体的に、図17を参照すると、MPMフラグが1である場合、IntraPredModeYはcandModeList[intra_luma_mpm_idx]に設定されてよい。
本発明及び図面において、パラメータ(又は、変数)値やシンタックス要素値などは、座標や位置に基づくものでよいが、現在ブロックに該当する場合、表記が省略されていてもよい。例えば、図17において、[xCb][yCb]は現在ブロックの位置を示すことができるが、本発明ではこれを省略して説明してもよい。
一実施例として、MPMフラグが0である場合、候補モードリスト再整列、IntraPredModeY設定過程が行われてよい。再整列前の候補モードリストは、MPMリストであってよい。また、再整列は、候補モードリスト値に対する再整列であってよい。例えば、再整列前の候補モードリストが、candModeList[0]=a_0、candModeList[1]=a_1、candModeList[2]=a_2、...、candModeList[N-1]=a_{N-1}のとき、a_0、a_1、a_2、...、a_{N-1}を整列してcandModeList[0]、candModeList[1]、candModeList[2]、...、candModeList[N-1]に割り当てることができる。ここで、整列は、昇順又は降順整列であってよい。例えば、a_0、a_1、a_2、...、a_{N-1}を昇順整列すれば、b_0、b_1、b_2、...、b_{N-1}でよく、candModeList[0]=b_0、candModeList[1]=b_1、candModeList[2]=b_2、...、candModeList[N-1]=b_{N-1}に設定されてよい。図17で(1.)と表示した部分が、候補モードリスト再整列過程であってよい。例えば、candModeList[i]がi=0からN-1まで定義されていてよい。このとき、iは0から(N-2)まで、jは各iに対して(i+1)から(N-1)までに対してcandModeList[i]がcandModeList[j]よりも大きい場合、candModeList[i]とcandModeList[j]値がスワップ(swap)されてよい。スワップ動作は、(candModeList[i],candModeList[j])=Swap(candModeList[i],candModeList[j])と表現されてよい。Swap(x,y)の結果は、(y,x)であってよい。
したがって、(candModeList[i],candModeList[j])=Swap(candModeList[i],candModeList[j])は、これを行う前にcandModeList[i]とcandModeList[j]がそれぞれa、bであるとき、これを行ってからはcandModeList[i]とcandModeList[j]がそれぞれb、aになる動作であってよい。図17を参照すると、Nは6であってよい。また、candModeList[i]はiが0から5までに設定されてよい。
また、IntraPredModeY設定過程は、intra_luma_mpm_remainder値に基づくことができる。図17を参照すると、IntraPredModeYは、intra_luma_mpm_remainderに設定されてよい。また、候補モードリストに基づいてIntraPredModeYを修正する過程が続いてよい。例えば、iは、0からN-1に対してIntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeYに1を足す過程を行うことができる。結果として生成されたIntraPredModeYに基づく値をイントラ予測モードとして用いることができる。例えば、本発明で説明したIntraPredModeY誘導後に広角(wide angle)判断及びモード修正プロセスが行われてよい。
図17を参照すると、この過程は、(2.)と表示した部分で起きる過程であってよい。candModeList[i]は、iが0から5までに設定されていてよい場合、iは0から5までに対してIntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeYに1を足す過程を行うことができる。前述したIntraPredModeY修正をする過程は、MPMフラグが0である場合、モードリストに含まれたモード以外のいずれかがintra_luma_mpm_remainderとしてシグナルされるため、必要であり得る。例えば、candModeList[0]=0、candModeList[1]=3、candModeList[2]=1、candModeList[3]=5、candModeList[4]=33、candModeList[5]=65のとき、候補モードリストに入っている値をシグナルする時はMPMフラグが1であってよく、MPMフラグが0の時は、IntraPredModeYとして可能な値が2、4、6、...、32、34、...、64、66などであり得るためである。このとき、intra_luma_mpm_remainderが0とシグナルされたとき、これはIntraPredModeY2を示すことができる。
図18は、本発明の一実施例に係るMPMリスト構成方法を示す図である。MPMリストは候補モードリストであってよい。本発明の一実施例によれば、MPMリストはcandIntraPredModeXに基づいて構成されてよい。例えば、candIntraPredModeXは複数であってよい。例えば、candIntraPredModeXはcandIntraPredModeAとcandIntraPredModeBであってよい。例えば、candIntraPredModeXは、現在ブロック周辺位置に該当するIntraPredModeYであってよい。又は、candIntraPredModeXは、既に設定されたモードを示す。例えば、INTRA_PLANARであってよい。INTRA_PLANARは、モードインデックス(又は、モード番号)0に該当する値であってよい。また、INTRA_DCは、モードインデックス(又は、モード番号)1に該当する値であってよい。図18を参照すると、INTRA_PLANAR及びINTRA_DCをそれぞれ、プラナー及びDCと表示している。
本発明の一実施例によれば、候補モードリストは特定値を常に含むことができる。また、候補モードリスト内で前記特定値の位置は固定されていてよい。例えば、候補モードリストは常にINTRA_PLANARを含むことができる。また、INTRA_PLANARは常に候補モードリストにおいて最前方に位置してよい。他の例として、候補モードリストは常にINTRA_DCを含むことができる。
図18には、MPMリスト構成方法を簡略化して示す。一実施例によれば、candIntraPredModeAとcandIntraPredModeBは、現在ブロック周辺のそれぞれ左側、上側に該当するIntraPredModeYであってよい。例えば、candIntraPredModeAは、IntraPredModeY[xCb-1][yCb+cbHeight-1]であってよい。例えば、candIntraPredModeBは、IntraPredModeY[xCb+cbWidth-1][yCb-1]であってよい。[xCb][yCb]は、現在ブロックに該当する座標であってよい。より具体的に、[xCb][yCb]は、現在ブロックの左上端(top-left)に該当する座標であってよい。また、cbWidth、cbHeightはそれぞれ、現在ブロックの幅、高さであってよい。また、前述したように、candIntraPredModeA、candIntraPredModeBは、既に設定された値に設定されてよい。
一実施例によれば、candIntraPredModeAとcandIntraPredModeBとが同じか異なるかに基づいてMPMリスト構成方法が変わってよい。また、candIntraPredModeAとcandIntraPredModeBが方向性モードであるか否かによってMPMリスト構成方法が変わってもよい。方向性モードは、INTRA_PLANARとINTRA_DCを含まなくてもよい。方向性モードは、INTRA_PLANARとINTRA_DC以外のいかなる値であってもよい。また、方向性モードに該当する値は、INTRA_PLANARとINTRA_DC値よりも大きくてよい。また、INTRA_PLANARとINTRA_DCを非方向性モード(non-angular mode)と呼ぶこともできる。
仮にcandIntraPredModeAとcandIntraPredModeBとが同一であり、candIntraPredModeAが方向性モードである場合、候補モードリストは次の通りに決定されてよい。
- candModeList[0]=INTRA_PLANAR
- candModeList[1]=candIntraPredModeA
- candModeList[2]=2+((candIntraPredModeA+61)%64)
- candModeList[3]=2+((candIntraPredModeA-1)%64)
- candModeList[4]=INTRA_DC
- candModeList[5]=2+((candIntraPredModeA+60)%64)
ここで、%はmodular演算を表してよい。
仮にcandIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeA又はcandIntraPredModeBが方向性モードである場合、候補モードリストは次の通りに決定されてよい。
- minAB=Min(candIntraPredModeA,candIntraPredModeB)
- maxAB=Max(candIntraPredModeA,candIntraPredModeB)
仮にcandIntraPredModeAとcandIntraPredModeBがいずれも方向性モードである場合、候補モードリストは次の通りに決定されてよい。すなわち、前の条件と結合すれば、candIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeAとcandIntraPredModeBがいずれも方向性モードである場合である。
- candModeList[0]=INTRA_PLANAR
- candModeList[1]=candIntraPredModeA
- candModeList[2]=candIntraPredModeB
- candModeList[3]=INTRA_DC
仮に、maxAB-minABが2から62の範囲(inclusive)にない場合:
- candModeList[4]=2+((maxAB+61)%64)
- candModeList[5]=2+((maxAB-1)%64)
仮に、maxAB-minABが2から62の範囲(inclusive)にない場合:
- candModeList[4]=2+((maxAB+60)%64)
- candModeList[5]=2+((maxAB)%64)
仮に、candIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeA又はcandIntraPredModeBが方向性モードである場合、候補モードリストは次の通りに決定されてよい。
- minAB=Min(candIntraPredModeA,candIntraPredModeB)
- maxAB=Max(candIntraPredModeA,candIntraPredModeB)
仮にcandIntraPredModeAとcandIntraPredModeBのいずれか一方のみが方向性モードである場合、候補モードリストは次の通りに決定されてよい。すなわち、前の条件と結合すれば、candIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeAとcandIntraPredModeBのいずれか一方のみが方向性モードである場合である。
- candModeList[0]=INTRA_PLANAR
- candModeList[1]=maxAB
- candModeList[2]=INTRA_DC
- candModeList[3]=2+((maxAB+61)%64)
- candModeList[4]=2+((maxAB-1)%64)
- candModeList[5]=2+((maxAB+60)%64)
その他の場合、候補モードリストは次の通りに決定されてよい。すなわち、1)candIntraPredModeAとcandIntraPredModeBとが同一であり、candIntraPredModeAが非方向性モードである場合であるか、或いは2)candIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeAとcandIntraPredModeBの両方とも非方向性モードである場合、候補モードリストは次の通りに決定されてよい。
- candModeList[0]=INTRA_PLANAR
- candModeList[1]=INTRA_DC
- candModeList[2]=INTRA_ANGULAR50
- candModeList[3]=INTRA_ANGULAR18
- candModeList[4]=INTRA_ANGULAR46
- candModeList[5]=INTRA_ANGULAR54
ここで、INTRA_ANGULARxxは、モードインデックス(又は、モード番号)xxに該当する値であってよい。
図19は、本発明の一実施例に係るイントラ予測モード誘導を示す図である。図17で説明したモード誘導方法は、重複する動作(redundant operation)を含むことがある。例えば、図18で説明したMPMリスト構成方法を用いるとき、図17で説明したモード誘導方法は、重複する動作を含むことがある。本発明の実施例を説明するとき、先の図17と重複する説明は省略する。
一実施例として、MPMフラグが0である場合、候補モードリスト再整列、IntraPredModeY設定過程が起きてよい。再整列前の候補モードリストは、MPMリストであってよい。また、再整列は、候補モードリスト値に対する再整列であってよい。候補モードリスト再整列をする時に、candModeList[i]がcandModeList[j]よりも大きい場合、candModeList[i]とcandModeList[j]値がスワップされてよい。スワップ動作は、(candModeList[i],candModeList[j])=Swap(candModeList[i],candModeList[j])と表現されてよい。Swap(x,y)の結果は、(y,x)であってよい。したがって(candModeList[i],candModeList[j])=Swap(candModeList[i],candModeList[j])は、これを行う前にcandModeList[i]とcandModeList[j]がそれぞれa、bのとき、これを行ってからはcandModeList[i]とcandModeList[j]がそれぞれb、aになる動作であってよい。
本発明の一実施例によれば、全体候補モードリストではなく一部の候補モードリストに対してのみ再整列動作を行うことができる。すなわち、candModeList[i]が、iが0からN-1までに対して定義されているとき、全体候補モードリストではなくN個よりも少ない個数の候補モードリストに対してのみ再整列動作を行うことができる。再整列動作を行わない候補モードリストは、既に設定されていてよい。例えば、再整列動作を行わない候補モードリストは、MPMリスト構成において場合によって変わる構成方法において同じ位置に存在することになるモードインデックスと関連していてよい。例えば、candModeList[0]以外の候補モードリストに対してのみ再整列動作を行うことができる。例えば、candModeList[i]がi=0からN-1まで定義されているとき、iは1から(N-2)まで、jは各iに対して(i+1)から(N-1)までに対してcandModeList[i]がcandModeList[j]よりも大きい場合、candModeList[i]とcandModeList[j]値がスワップされてよい。
これは、candModeList[0]に対しては再整列動作をしようがしようまいが、同じ結果が得られるためであろう。例えば、図18で説明したように、candModeList[0]は常にINTRA_PLANARであることが可能であり、このような場合、candModeList[0]は常に最小値になり得る。
図19を参照すると、(1.)と表示した部分において候補モードリスト再整列過程が起きてよい。例えば、Nは6であってよい。また、candModeList[i]は、iが0から5まで定義されていてよい。すなわち、候補モードリストは合計6個の要素を持っていてよい。このとき、iは1から4まで、jは各iに対して(i+1)から5までに対してcandModeList[i]がcandModeList[j]よりも大きい場合、candModeList[i]とcandModeList[j]値がスワップされてよい。Swap動作は、(candModeList[i],candModeList[j])=Swap(candModeList[i],candModeList[j])と表現されてよい。
また、IntraPredModeY設定過程はintra_luma_mpm_remainder値に基づくことができる。図19を参照すると、IntraPredModeYは、intra_luma_mpm_remainderに設定されてよい。また、IntraPredModeYを修正する過程が続いてよい。このとき、候補モードリストに基づかずにIntraPredModeYを修正する過程と、候補モードリストに基づいてIntraPredModeYを修正する過程を含むことができる。
一実施例によれば、intra_luma_mpm_remainderはシンタックス要素であってよい。また、intra_luma_mpm_remainderは、MPMリストに含まれないモードを示す時にシグナルされる値であってよい。例えば、intra_luma_mpm_remainderは、MPMフラグが0の時にシグナルされる値であってよい。また、intra_luma_mpm_remainderは、全体イントラモード個数よりも小さい値が最大値であってよい。例えば、intra_luma_mpm_remainderは、((シグナリング範囲で全体イントラモード個数)-(MPMリスト要素個数)-1)が最大値であってよい。例えば、(シグナリング範囲で全体イントラモード個数)は67であってよい。例えば、(MPMリスト要素個数)は6であってよい。例えば、intra_luma_mpm_remainderの最大値は60であってよい。
本発明の一実施例によれば、IntraPredModeYを修正する過程において、候補モードリストに基づかずに既に設定された修正をする過程を含むことができる。例えば、IntraPredModeYを修正する過程においてIntraPredModeYに既に設定された値を足す過程を含むことができる。図19の(ii.)と表示した部分を参照すると、IntraPredModeY値に2を足した値をIntraPredModeYに設定できる。
また、本発明の一実施例によれば、IntraPredModeYを修正する過程は、候補モードリストに基づいてIntraPredModeYを修正する過程を含むことができる。例えば、IntraPredModeYをcandModeList[i]と比較して条件を満たす場合、IntraPredModeYを修正する過程を行うことができる。本発明の一実施例によれば、candModeList[i]と比較してIntraPredModeYを修正するとき、全体候補モードリストではなく一部の候補モードリストに対してのみ比較、修正することができる。すなわち、candModeList[i]が、iが0からN-1までに対して定義されている時、全体候補モードリストではなくN個よりも少ない個数の候補モードリストに対してのみ比較して修正する動作を行うことができる。また、ここで、動作を行わない候補モードリストは、既に設定されていてよい。例えば、動作を行わない候補モードリストは、MPMリスト構成において場合によって変わる構成方法において複数の場合において含むようになるモードインデックスと関連していてよい。例えば、candModeList[0]又はcandModeList[1]以外の候補モードリストに対してのみIntraPredModeYと比較してIntraPredModeYを修正する動作を行うことができる。
例えば、candModeList[i]がi=0からN-1まで定義されているとき、iは0よりも大きい値から(N-1)までに対してIntraPredModeYと比較してIntraPredModeYを修正する動作を行うことができる。例えば、candModeList[i]がi=0からN-1まで定義されているとき、iは2から(N-1)までに対してIntraPredModeYと比較してIntraPredModeYを修正する動作を行うことができる。
例えば、比較して修正する動作は、次の通りでよい。例えば、IntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeYを修正する過程を行うことができる。例えば、IntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeY値が1増加してよい。
図19で、(iii.)と表示した部分を参照すると、iは2から5までに対してIntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeYを1増加させる動作を行うことができる。これは、候補モードリストがいずれかのモードインデックスを常に含み得るためである。また、これによって再整列された候補モードリストにおいていずれかの位置には、固定したモードインデックスが存在し得るためである。例えば、再整列された候補モードリストにおいて常に、candModeList[0]はINTRA_PLANAR、candModeList[1]はINTRA_DCであり得るためである。
本発明の一実施例によれば、IntraPredModeYを修正する過程において、候補モードリストに基づかずに既に設定された修正をする過程で既に設定された値と、候補モードリストに基づいてIntraPredModeYを修正する過程で比較対象から除外される候補モードリストの個数は関連していてよい。例えば、候補モードリストに基づいてIntraPredModeYを修正する過程で比較対象から全体のうちのM個の候補モードリストが除外される場合、候補モードリストに基づかずに既に設定された修正をする過程で既に設定された値は、M以上であってよい。より具体的に、例えば、候補モードリストに基づいてIntraPredModeYを修正する過程で比較対象から全体のうちのM個の候補モードリストが除外される場合、候補モードリストに基づかずに既に設定された修正をする過程で既に設定された値は、Mであってよい。例えば、Mは2であってよい。
したがって、図19を参照すると、IntraPredModeYを修正する過程は、次の通りでよい。IntraPredModeY値をintra_luma_mpm_remainder値に設定できる。また、IntraPredModeY値を2だけ増加させることができる。また、iは2から5に対して(inclusive)IntraPredModeYがcandModeList[i]よりも大きいか同一であるとき、IntraPredModeYを1だけ増加させることができる。
また、図19では、候補モードリストを再整列し、IntraPredModeYを修正する過程を、MPMフラグが0である場合に行うとしているか、図20~図22で後述するように、プラナーフラグが存在する場合、又は既に設定されたモード、候補モードリストに含まれるモード、その他のモードに分けてシグナルする場合に、その他のモードを誘導する時に図19の実施例で説明した方法を用いることができる。前記プラナーフラグは、イントラ予測モードがプラナーモードであるか否かを示すフラグ(又は、シンタックス要素)を表し、本発明において、planar_flagと表現されてよい。
図20は、本発明の一実施例に係るMPMリスト構成方法を例示する図である。本発明の一実施例によれば、INTRA_PLANARは、プラナーフラグによって指示されてよい。また、プラナーフラグは、前述したMPMフラグと異なるシグナリング(又は、シンタックス要素)であってよい。本発明の一実施例によれば、既に設定されたモードは、MPMリスト、すなわち候補モードリストに常に含まれなくてもよい。例えば、本発明の一実施例によれば、INTRA_PLANARは、MPMリスト、すなわち候補モードリストに常に含まれなくてもよい。
MPMリストは候補モードリストであってよい。本発明の一実施例によれば、MPMリストはcandIntraPredModeXに基づいて構成されてよい。例えば、candIntraPredModeXは複数であってよい。例えば、candIntraPredModeXは、candIntraPredModeAとcandIntraPredModeBであってよい。例えば、candIntraPredModeXは、現在ブロック周辺位置に該当するIntraPredModeYであってよい。又は、candIntraPredModeXは、既に設定されたモードを示すことができる。例えば、INTRA_PLANARであってよい。INTRA_PLANARは、モードインデックス0に該当する値であってよい。また、INTRA_DCは、モードインデックス1に該当する値であってよい。図20を参照すると、INTRA_PLANAR及びINTRA_DCはそれぞれ、プラナー及びDCと表現されてよい。
本発明の一実施例によれば、候補モードリストは特定値を常に含むことができる。また、候補モードリスト内で前記特定値の位置は固定されていてよい。例えば、候補モードリストは常にINTRA_DCを含むことができる。
図20には、MPMリスト構成方法を簡略化して示す。一実施例によれば、candIntraPredModeAとcandIntraPredModeBはそれぞれ、現在ブロック周辺の左側と上側に該当するIntraPredModeYであってよい。例えば、candIntraPredModeAは、IntraPredModeY[xCb-1][yCb+cbHeight-1]であってよい。例えば、candIntraPredModeBは、IntraPredModeY[xCb+cbWidth-1][yCb-1]であってよい。[xCb][yCb]は、現在ブロックに該当する座標であってよい。より具体的に、[xCb][yCb]は、現在ブロックの左上端に該当する座標であってよい。また、cbWidth、cbHeightはそれぞれ、現在ブロックの幅、高さであってよい。また、前述したように、candIntraPredModeA、candIntraPredModeBは、既に設定された値に設定されることも可能である。
一実施例によれば、candIntraPredModeAとcandIntraPredModeBとが同一であるか否かに基づいてMPMリスト構成方法が変わってよい。また、candIntraPredModeAとcandIntraPredModeBが方向性モードか否かによってMPMリスト構成方法が変わってよい。方向性モードは、INTRA_PLANARとINTRA_DCを含まなくてもよい。方向性モードは、INTRA_PLANARとINTRA_DC以外の全ての値であってよい。また、方向性モードに該当する値は、INTRA_PLANARとINTRA_DC値よりも大きくてよい。また、INTRA_PLANARとINTRA_DCを非方向性モードと呼ぶことができる。
仮に、candIntraPredModeAとcandIntraPredModeBとが同一であり、candIntraPredModeAが方向性モードである場合、候補モードリストは次の通りに決定されてよい。
- candModeList[0]=candIntraPredModeA
- candModeList[1]=2+((candIntraPredModeA+61)%64)
- candModeList[2]=2+((candIntraPredModeA-1)%64)
- candModeList[3]=INTRA_DC
- candModeList[4]=2+((candIntraPredModeA+60)%64)
ここで、%はモジューラー(modular)演算を表してよい。
仮に、candIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeA又はcandIntraPredModeBが方向性モードである場合、候補モードリストは次の通りに決定されてよい。
- minAB=Min(candIntraPredModeA,candIntraPredModeB)
- maxAB=Max(candIntraPredModeA,candIntraPredModeB)
仮に、candIntraPredModeAとcandIntraPredModeBがいずれも方向性モードである場合、候補モードリストは次の通りに決定されてよい。すなわち、前の条件と結合すれば、candIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeAとcandIntraPredModeBがいずれも方向性モードである場合である。
- candModeList[0]=candIntraPredModeA
- candModeList[1]=candIntraPredModeB
- candModeList[2]=INTRA_DC
仮にmaxAB-minABが2から62の範囲(inclusive)にある場合:
- candModeList[3]=2+((maxAB+61)%64)
- candModeList[4]=2+((maxAB-1)%64)
仮にmaxAB-minABが2から62の範囲(inclusive)にない場合:
- candModeList[3]=2+((maxAB+60)%64)
- candModeList[4]=2+((maxAB)%64)
仮にcandIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeA又はcandIntraPredModeBが方向性モードである場合、候補モードリストは次の通りに決定されてよい。
- minAB=Min(candIntraPredModeA,candIntraPredModeB)
- maxAB=Max(candIntraPredModeA,candIntraPredModeB)
仮にcandIntraPredModeAとcandIntraPredModeBのいずれか一方のみが方向性モードである場合、候補モードリストは次の通りに決定されてよい。すなわち、前の条件と結合すれば、candIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeAとcandIntraPredModeBのいずれか一方のみが方向性モードである場合である。
- candModeList[0]=maxAB
- candModeList[1]=INTRA_DC
- candModeList[2]=2+((maxAB+61)%64)
- candModeList[3]=2+((maxAB-1)%64)
- candModeList[4]=2+((maxAB+60)%64)
その他の場合、候補モードリストは次の通りに決定されてよい。すなわち、1)candIntraPredModeAとcandIntraPredModeBとが同一であり、candIntraPredModeAが非方向性モードである場合であるか、或いは2)candIntraPredModeAとcandIntraPredModeBとが同一でなく、candIntraPredModeAとcandIntraPredModeBの両方とも非方向性モードである場合、候補モードリストは次の通りに決定されてよい。
- candModeList[0]=INTRA_DC
- candModeList[1]=INTRA_ANGULAR50
- candModeList[2]=INTRA_ANGULAR18
- candModeList[3]=INTRA_ANGULAR46
- candModeList[4]=INTRA_ANGULAR54
ここで、INTRA_ANGULARxxは、モードインデックス(又は、モード番号)xxに該当する値であってよい。
図21は、本発明の一実施例に係るイントラ予測モード誘導方法を例示する図である。
図20で説明したように、プラナーフラグによって指示される既に設定されたモードが存在し、候補モードリストに含まれるモードが存在し、その他のモードが存在してよい。本発明の一実施例によれば、プラナーフラグが1である場合、IntraPredModeYは、前記既に設定されたmodeに設定されてよい。図21を参照すると、プラナーフラグが1である場合、IntraPredModeYをINTRA_PLANARに設定することができる。
また、本発明の一実施例によれば、前記候補モードリストに含まれるmodeを指示するためにMPMフラグを参照することができる。仮にMPMフラグが1である場合、IntraPredModeYがcandModeList[intra_luma_mpm_idx]に設定されてよい。図21を参照すると、プラナーフラグが0であり、MPMフラグが1である場合、IntraPredModeYがcandModeList[intra_luma_mpm_idx]に設定されてよい。
本発明の一実施例によれば、プラナーフラグとMPMフラグとの組合せを用いて、IntraPredModeYが既に設定されたモードであるか、候補モードリストに含まれるモードであるか、その他のモードであるかを決定することができる。例えば、プラナーフラグが1である場合、IntraPredModeYが既に設定されたモードであってよい。また、プラナーフラグが0であり、MPMフラグが1である場合、IntraPredModeYが候補モードリストに含まれるモードであってよい。また、プラナーフラグが0であり、MPMフラグが0である場合、IntraPredModeYがその他のモードであってよい。
本発明のさらに他の実施例によれば、プラナーフラグとMPMフラグとの組合せを用いて、IntraPredModeYが既に設定されたモードであるか、候補モードリストに含まれるモードであるか、その他のモードであるかを決定することができる。例えば、プラナーフラグが1であり、MPMフラグが1である場合、IntraPredModeYが既に設定されたモードであってよい。また、プラナーフラグが0であり、MPMフラグが1である場合、IntraPredModeYが候補モードリストに含まれるモードであってよい。また、MPMフラグが0である場合、IntraPredModeYがその他のモードであってよい。
また、次の説明のように、その他のモードである場合のイントラ予測モードを誘導することができる。
図20で説明したように、候補モードリストの要素の個数は、5個でよい。また、候補モードリストは常にINTRA_PLANARを含まなくてもよい。また、候補モードリストは常にINTRA_DCを含むことができる。本実施例において、図17~図20と重複する説明は省略れてもよい。
一実施例として、その他のモードを指示する場合、候補モードリスト再整列、IntraPredModeY設定過程が起きてよい。再整列前の候補モードリストはMPMリストであってよい。また、再整列は、候補モードリスト値に対する再整列であってよい。例えば、再整列前の候補モードリストがcandModeList[0]=a_0、candModeList[1]=a_1、candModeList[2]=a_2、...、candModeList[N-1]=a_{N-1}のとき、a_0、a_1、a_2、...、a_{N-1}を整列してcandModeList[0]、candModeList[1]、candModeList[2]、...、candModeList[N-1]に入れることができる。ここで、整列は、昇順又は降順整列であってよい。例えば、a_0、a_1、a_2、...、a_{N-1}を昇順整列すれば、b_0、b_1、b_2、...、b_{N-1}でよく、candModeList[0]=b_0、candModeList[1]=b_1、candModeList[2]=b_2、...、candModeList[N-1]=b_{N-1}に設定されてよい。
図21の(1.)と表示した部分が候補モードリスト再整列過程であってよい。例えば、candModeList[i]がi=0からN-1まで定義されていてよい。このとき、iは0から(N-2)まで、jは各iに対して(i+1)から(N-1)までに対してcandModeList[i]がcandModeList[j]よりも大きい場合、candModeList[i]とcandModeList[j]値がスワップされてよい。スワップ動作は、(candModeList[i],candModeList[j])=Swap(candModeList[i],candModeList[j])と表現されてよい。Swap(x,y)の結果は、(y,x)であってよい。したがって、(candModeList[i],candModeList[j])=Swap(candModeList[i],candModeList[j])は、これを行う前にcandModeList[i]とcandModeList[j]がそれぞれa、bであるとき、これを行ってからはcandModeList[i]とcandModeList[j]がそれぞれb,aになる動作であってよい。図21を参照すると、Nは5であってよい。また、candModeList[i]は、iが0から4までに設定されていてよい。
図21を参照すると、(1.)と表示した部分において候補モードリスト再整列過程が起きてよい。例えば、candModeList[i]は、iが0から4までに定義されていてよい。すなわち、候補モードリストは、合計5個の要素を持っていてよい。このとき、iは0から3まで、jは各iに対して(i+1)から4までに対してcandModeList[i]がcandModeList[j]よりも大きい場合、candModeList[i]とcandModeList[j]値がスワップされてよい。スワップ動作は、(candModeList[i],candModeList[j])=Swap(candModeList[i],candModeList[j])と表現されてよい。
また、IntraPredModeY設定過程は、intra_luma_mpm_remainder値に基づくことができる。図21を参照すると、IntraPredModeYはintra_luma_mpm_remainderに設定されてよい。また、IntraPredModeYを修正する過程が続いてよい。このとき、候補モードリストに基づかずにIntraPredModeYを修正する過程と、候補モードリストに基づいてIntraPredModeYを修正する過程を含むことができる。
一実施例によれば、intra_luma_mpm_remainderは、シンタックス要素であってよい。また、intra_luma_mpm_remainderは、前記その他のモードを示す時にシグナルされる値であってよい。例えば、intra_luma_mpm_remainderは、MPMフラグが0の時にシグナルされる値であってよい。又は、intra_luma_mpm_remainderは、プラナーフラグとMPMフラグがいずれも0の時にシグナルされる値であってよい。また、intra_luma_mpm_remainderは、全体イントラモード個数よりも小さい値が最大値であってよい。例えば、intra_luma_mpm_remainderは、((シグナリング範囲で全体イントラモード個数)-(既に設定されたモード個数)-(MPMリスト要素個数)-1)が最大値であってよい。例えば、(シグナリング範囲で全体イントラモード個数)は、67であってよい。例えば、(既に設定されたモード個数)は、1であってよい。例えば、(MPMリスト要素個数)は、5であってよい。例えば、intra_luma_mpm_remainderの最大値は、60であってよい。
また、本発明の一実施例によれば、IntraPredModeYを修正する過程において、候補モードリストに基づかずに既に設定された修正をする過程を含むことができる。例えば、IntraPredModeYを修正する過程において、IntraPredModeYに既に設定された値を足す過程を含むことができる。図21の(ii.)と表示した部分を参照すると、IntraPredModeY値に1を足した値を、IntraPredModeYに設定することができる。これは、既に設定されたモードが候補モードリストに属するモードと別個にシグナルされ得るためであろう。
また、本発明の一実施例によれば、IntraPredModeYを修正する過程は、候補モードリストに基づいてIntraPredModeYを修正する過程を含むことができる。例えば、iは0からN-1に対してIntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeYに1を足す過程を行うことができる。そして、このようにして得られたIntraPredModeYに基づく値を、イントラ予測モードとして用いることができる。例えば、本発明で説明したIntraPredModeY誘導後に広角(wide angle)判断及びモード修正プロセスが行われてよい。図21を参照すると、この過程は、(iii.)と表示した部分で起きる過程であってよい。例えば、Nは5であってよい。candModeList[i]は、iが0から4までに設定されていてよい場合、iは0から4に対してIntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeYに1を足す過程を行うことができる。前述したIntraPredModeY修正をする過程は、MPMフラグが0である場合、モードリストに含まれたモード以外のもののいずれかがintra_luma_mpm_remainderとしてシグナルされるため、必要であり得る。例えば、candModeList[0]=64、candModeList[1]=3、candModeList[2]=1、candModeList[3]=5、candModeList[4]=33のとき、候補モードリストに入っている値をシグナルする時はMPMフラグ又はプラナーフラグが1であり得、既に設定されたモードと候補モードリストに属するモード以外のモードをシグナルする時にIntraPredModeYとして可能な値が2、4、6、...、32、34、...、63、65、66などであり得るためである。このとき、intra_luma_mpm_remainderが0とシグナルされた時、これはIntraPredModeY2を示すことができる。
図22は、本発明の一実施例に係るイントラ予測モード誘導方法を例示する図である。図22で説明したように、プラナーフラグによって指示される既に設定されたモードが存在し、候補モードリストに含まれるモードが存在し、その他のモードが存在してよい。本発明の一実施例によれば、プラナーフラグが1である場合、IntraPredModeYは前記既に設定されたモードに設定されてよい。図22を参照すると、プラナーフラグが1である場合、IntraPredModeYをINTRA_PLANARに設定することができる。
また、本発明の一実施例によれば、前記候補モードリストに含まれるモードを指示するためにMPMフラグを参照することができる。仮にMPMフラグが1である場合、IntraPredModeYがcandModeList[intra_luma_mpm_idx]に設定されてよい。図15を参照すると、プラナーフラグが0であり、MPMフラグが1である場合、IntraPredModeYがcandModeList[intra_luma_mpm_idx]に設定されてよい。
本発明の実施例によれば、プラナーフラグとMPMフラグとの組合せを用いて、IntraPredModeYが既に設定されたモードであるか、候補モードリストに含まれるモードであるか、その他のモードであるかを決定することができる。例えば、プラナーフラグが1である場合、IntraPredModeYが既に設定されたモードであってよい。また、プラナーフラグが0であり、MPMフラグが1である場合、IntraPredModeYが、候補モードリストに含まれるモードであってよい。また、プラナーフラグが0であり、MPMフラグが0である場合、IntraPredModeYがその他のモードであってよい。
本発明のさらに他の実施例によれば、プラナーフラグとMPMフラグとの組合せを用いて、IntraPredModeYが既に設定されたモードであるか、候補モードリストに含まれるモードであるか、その他のモードであるかを決定することができる。例えば、プラナーフラグが1であり、MPMフラグが1である場合、IntraPredModeYが既に設定されたモードであってよい。また、プラナーフラグが0であり、MPMフラグが1である場合、IntraPredModeYが、候補モードリストに含まれるモードであってよい。また、MPMフラグが0である場合、IntraPredModeYがその他のモードであってよい。
また、下の説明のように、その他のモードである場合のイントラ予測モードを誘導することができる。
図22で説明したように、候補モードリストの要素の個数は5個であってよい。また、候補モードリストは常にINTRA_PLANARを含まなくてもよい。また、候補モードリストは常にINTRA_DCを含むことができる。
本実施例において、図17~図21と重複する説明は省略されてよい。
一実施例として、その他のモードを指示する場合、候補モードリスト再整列、IntraPredModeY設定過程が起きてよい。本実施例において、再整列過程に関する説明は、図21を参照することができる。
図21を参照すると、(1.)と表示した部分において候補モードリスト再整列過程が起きてよい。例えば、candModeList[i]は、iが0から4まで定義されていてよい。すなわち、候補モードリストは、合計5個の要素を持っていてよい。このとき、iは0から3まで、jは各iに対して(i+1)から4までに対してcandModeList[i]がcandModeList[j]よりも大きい場合、candModeList[i]とcandModeList[j]値がスワップされてよい。スワップ動作は、(candModeList[i],candModeList[j])=Swap(candModeList[i],candModeList[j])と表現されてよい。
図21で説明したモード誘導方法は、重複する動作を含むことがある。例えば、図18又は図22で説明したMPMリスト構成方法を用いるとき、図21で説明したモード誘導方法は、重複する動作を含むことがある。
また、IntraPredModeY設定過程は、intra_luma_mpm_remainder値に基づくことができる。図21を参照すると、IntraPredModeYはintra_luma_mpm_remainderに設定されてよい。また、IntraPredModeYを修正する過程が続いてよい。このとき、候補モードリストに基づかずにIntraPredModeYを修正する過程と、候補モードリストに基づいてIntraPredModeYを修正する過程を含むことができる。一実施例によれば、intra_luma_mpm_remainderはシンタックス要素であってよく、それに関する説明は、図21を参照することができる。
本発明の一実施例によれば、IntraPredModeYを修正する過程において、候補モードリストに基づかずに既に設定された修正をする過程を含むことができる。例えば、IntraPredModeYを修正する過程において、IntraPredModeYに既に設定された値を足す過程を含むことができる。図22の(ii.)と表示した部分を参照すると、IntraPredModeY値に2を足した値を、IntraPredModeYに設定することができる。
また、本発明の一実施例によれば、IntraPredModeYを修正する過程は、候補モードリストに基づいてIntraPredModeYを修正する過程を含むことができる。例えば、IntraPredModeYをcandModeList[i]と比較して条件を満たす場合、IntraPredModeYを修正する過程を行うことができる。本発明の一実施例によれば、candModeList[i]と比較してIntraPredModeYを修正するとき、全体候補モードリストではなく一部の候補モードリストに対してのみ比較、修正することができる。すなわち、candModeList[i]が、iが0からN-1までに対して定義されているとき、全体候補モードリストではなくN個よりも少ない個数の候補モードリストに対してのみ比較して修正する動作を行うことができる。また、ここで、動作を行わない候補モードリストは、既に設定されていてよい。例えば、動作を行わない候補モードリストは、MPMリスト構成において場合によって変わる構成方法において複数の場合において含むようになるモードインデックスと関連していてよい。例えば、candModeList[0]以外の候補モードリストに対してのみIntraPredModeYと比較してIntraPredModeYを修正する動作を行うことができる。
例えば、candModeList[i]がi=0からN-1まで定義されているとき、iは0よりも大きい値から(N-1)までに対してIntraPredModeYと比較してIntraPredModeYを修正する動作を行うことができる。例えば、candModeList[i]がi=0からN-1まで定義されているとき、iは1から(N-1)までに対してIntraPredModeYと比較してIntraPredModeYを修正する動作を行うことができる。
例えば、比較して修正する動作は次の通りでよい。例えば、IntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeYを修正する過程を行うことができる。例えば、IntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeY値が1増加してよい。
図22(iii.)と表示した部分を参照すると、iは1から4までに対してIntraPredModeYがcandModeList[i]よりも大きいか同一であれば、IntraPredModeYを1増加させる動作を行うことができる。これは、候補モードリストがいずれかのモードインデックスを常に含むことができるためである。また、これによって再整列された候補モードリストにおいていずれかの位置には、固定されたモードインデックスが存在し得るためである。例えば、再整列された候補モードリストにおいて、常に、candModeList[0]はINTRA_DCであるためである。
本発明の実施例によれば、IntraPredModeYを修正する過程において、候補モードリストに基づかずに既に設定された修正をする過程で既に設定された値と、候補モードリストに基づいてIntraPredModeYを修正する過程で比較対象から除外される候補モードリストの個数は、関連していてよい。例えば、候補モードリストに基づいてIntraPredModeYを修正する過程で比較対象から全体のうちのM個の候補モードリストが除外される場合、候補モードリストに基づかずに既に設定された修正をする過程で既に設定された値はM以上であってよい。より具体的に、例えば、候補モードリストに基づいてIntraPredModeYを修正する過程で比較対象から全体のうちのM個の候補モードリストが除外される場合、候補モードリストに基づかずに既に設定された修正をする過程で既に設定された値は、Mよりも大きくてよい。例えば、Mは1であってよい。
また、IntraPredModeYを修正する過程において、候補モードリストに基づかずに既に設定された修正をする過程で既に設定された値と、既に設定されたモード個数とは、関連していてよい。例えば、既に設定されたモード個数がL個である場合、候補モードリストに基づかずに既に設定された修正をする過程で既に設定された値は、L以上であってよい。より具体的に、例えば、既に設定されたモード個数がL個である場合、候補モードリストに基づかずに既に設定された修正をする過程で既に設定された値は、Lよりも大きくてよい。例えば、Lは1であってよい。
したがって、図22を参照すると、IntraPredModeYを修正する過程は、次の通りでよい。IntraPredModeY値をintra_luma_mpm_remainder値に設定することができる。また、IntraPredModeY値を2だけ増加させることができる。また、iは1から4に対して(inclusive)IntraPredModeYがcandModeList[i]よりも大きいか同一であるとき、IntraPredModeYを1だけ増加させることができる。
図23は、本発明の一実施例に係るビデオ信号処理方法を示すフローチャートである。図23を参照すると、説明の便宜のために、デコーダを中心に説明するが、本発明がこれに制限されるものではなく、本実施例に係るビデオ信号処理方法は、エンコーダにも実質的に同じ方法で適用可能である。
デコーダは、現在クロマブロック(current chroma block)のツリータイプ(tree type)を確認する(S2301)。
デコーダは、既に設定された位置のルマイントラ予測モードに基づいて前記現在クロマブロックのクロマイントラ予測モードを誘導する(S2302)。
デコーダは、前記クロマイントラ予測モードに基づいて前記現在クロマブロックの予測ブロックを生成する(S2303)。
デコーダは、前記予測ブロックに前記現在クロマブロックの残差ブロックを加算することによって前記現在クロマブロックを復元する(S2304)。
以上の段階を含み、前記既に設定された位置のルマ予測モードがイントラブロックコピー(intra block copy)モードである場合、前記ルマイントラ予測モードは既に設定されたモードに設定されることを特徴とする、ビデオ信号処理方法が提供される。
前述したように、前記クロマイントラ予測モードを誘導する段階は、前記ルマイントラ予測モードによってモードインデックスが既に設定されたマッピングテーブルから、前記現在クロマイントラ予測モードを示す第1シンタックス要素を取得する段階を含むことができる。
前述したように、前記既に設定された位置は、前記現在クロマブロックの右下中央サンプル位置のルマ位置でよい。
前述したように、前記既に設定されたモードは、イントラDCモードであってよい。
前述したように、前記現在クロマブロックのツリータイプがデュアルツリーである場合、前記現在クロマブロックに対するイントラブロックコピーモードの適用されるか否かを示す第2シンタックス要素はパースされず、既に設定された値と推論されてよい。
前述したように、前記既に設定された値は0であり、前記ツリータイプがデュアルツリーである前記現在クロマブロックにはイントラブロックコピーモードが適用されなくてもよい。
上述した本発明の実施例は多様な手段を介して具現される。例えば、本発明の実施例は、ハードウェア、ファームウェア(firmware)、ソフトフェアまたはそれらの組み合わせによって具現される。
ハードウェアによる具現の場合、本発明の実施例による方法は、一つまたはそれ以上のASICs(Application Specific Integrated Circuits)、DSPs(Digital Signal Processors)、DSDPs(Digital Signal Processing Devices)、PDLs(Programmable Logic Devices)、FPGAs(Field Programmable Gate Arrays)、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサなどによって具現される。
ファームフェアやソフトウェアによる具現の場合、本発明の実施例による方法は、上述した機能または動作を行うモジュール、手順または関数などの形態で具現される。ソフトウェアコードは、メモリに貯蔵されてプロセッサによって具現される。前記メモリはプロセッサの内部または外部に位置し、既に公知の多様な手段によってプロセッサとデータを交換する。
一部の実施例はコンピュータによって実行されるプログラムモジュールのようなコンピュータで実行可能な命令語を含む記録媒体の形態にも具現される。コンピュータで判読可能な媒体は、コンピュータでアクセスされ得る任意の利用可能な媒体であり、揮発性及び非揮発性媒体、分離型及び非分離型媒体をいずれも含む。また、コンピュータ読取可能媒体は貯蔵媒体及び通信媒体をいずれも含む。コンピュータ貯蔵媒体は、コンピュータ判読可能な命令語、データ構造、プログラムモジュール、またはその他のデータのような情報の貯蔵のための任意の方法または技術で具現された揮発性及び非揮発性媒体、分離型及び非分離型媒体をいずれも含む。通信媒体は、典型的にコンピュータ読取可能な命令語、データ構造、またはプログラムモジュールのような変調されたデータ信号のその他のデータ、またはその他の伝送メカニズムを含み、任意の情報伝達媒体を含む。
上述した本発明の説明は例示のためのものであって、本発明が属する技術分野における通常の知識を有する者は、本発明の技術的思想や必須的特徴を変更せずも他の具体的な形態に容易に変更可能であることを理解できるはずである。よって、上述した実施例は全ての面で例示的なものであり、限定的なものではないと理解すべきである。例えば、単一型として説明されている各構成要素は分散されて実施されてもよく、同じく分散されていると説明されている構成要素も結合された形態で実施されてもよい。
本発明の範囲は、上述した詳細な説明よりは後述する特許請求の範囲によって示され、特許請求の範囲の意味及び範囲、そしてその均等概念から導き出される全ての変更または変形された形態が本発明の範囲に含まれると解釈すべきである。