本明細書で使用される用語は本発明における機能を考慮しながらできるだけ現在広く使用されている一般的な用語を選択したが、これは当分野に携わる技術者の意図、慣例または新たな技術の出現などによって異なり得る。また、特定の場合は出願人が任意に選定した用語もあるが、この場合、該当の発明を実施する形態の部分においてその意味を記載する。よって、本明細書で使用される用語は、単なる用語の名称ではなく、その用語の有する実質的な意味と本明細書全般にわたる内容に基づいて解釈すべきであることを明らかにする。
本明細書において、一部用語は以下のように解釈される。コーディングは、場合によってはエンコーディングまたはでコーディングに解釈される。本明細書において、ビデオ信号のエンコーディング(符号化)を行ってビデオ信号のビットストリームを生成する装置はエンコーディング装置またはエンコーダと称され、ビデオ信号ビットストリームのデコーディング(復号化)を行ってビデオ信号を復元する装置はデコーディング装置またはデコーダと称される。また、本明細書において、ビデオ信号処理装置はエンコーダ及びデコーダをいずれも含む概念の用語として使用される。情報(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)モードを指示する。
以下、図7を参照して、本発明の実施形態によるインター予測方法について説明する。本発明では、インター予測方法は、並進運動(translation motion)に最適化された一般インター予測方法とアフィン(affine)モデルベースのインター予測方法を含むことができる。また、動きベクトルは、通常、インター予測方法に基づいて動き補償のための一般的な動きベクトルとアフィン動き補償のためのコントロールポイントの動きベクトル(control point motion vector)のうちの少なくとも一つを含むことができる。
図7は、本発明の一実施形態に従うインター予測方法を図示する。前述したように、デコーダは復号化された他のピクチャの復元されたサンプルを参照して現在ブロックを予測することができる。図7を参照すると、デコーダは現在ブロック701の動き情報セットに基づいて参照ピクチャ720内の参照ブロック702を獲得する。この際、動き情報セットは参照ピクチャインデックス及び動きベクトル703を含むことができる。参照ピクチャインデックスは、参照ピクチャリストで現在ブロックのインター予測のための参照ブロックが含まれた参照ピクチャ720を指示する。一実施形態に従って、参照ピクチャリストは前述したL0ピクチャリストまたはL1ピクチャリストのうち、少なくとも1つを含むことができる。動きベクトル703は現在ピクチャ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)を生成できる。ここで、マージ候補リストは、現在ブロックよりも先に復元されたサンプルのうち、現在ブロックのモーション情報セットと関連したモーション情報セットに基づいて予測された可能性があるサンプルに対応する候補を含むことができる。エンコーダとデコーダは、あらかじめ定義された規則に基づいて現在ブロックのマージ候補リストを構成することができる。このとき、エンコーダとデコーダがそれぞれ構成したマージ候補リストは互いに同一であってよい。例えば、エンコーダ及びデコーダは、現在ピクチャ内で現在ブロックの位置に基づいて現在ブロックのマージ候補リストを構成することができる。エンコーダ及びデコーダが現在ブロックのマージ候補リストを構成する方法については、図9で後述する。本開示において、特定ブロックの位置は、特定ブロックを含むピクチャ内で特定ブロックの左上端(top-left)サンプルの相対的な位置を表す。
一方、コーディング効率を上げるために、前述したレジデュアル信号をそのままコードせず、レジデュアル信号を変換して取得された変換係数値を量子化し、量子化された変換係数をコードする方法を用いることができる。前述したように、変換部は、レジデュアル信号を変換して変換係数値を取得することができる。このとき、特定ブロックのレジデュアル信号は、現在ブロックの全領域に分散されていてよい。これによって、レジデュアル信号に対する周波数領域変換を用いて低周波領域にエネルギーを集中させ、コーディング効率を向上させることができる。以下では、レジデュアル信号が変換又は逆変換される方法について具体的に説明する。
図8は、エンコーダがレジデュアル信号を変換する方法を具体的に示す図である。前述したように、空間領域のレジデュアル信号は周波数領域に変換されてよい。エンコーダは、取得されたレジデュアル信号を変換して変換係数を取得することができる。まず、エンコーダは、現在ブロックに対するレジデュアル信号を含む少なくとも一つのレジデュアルブロックを取得することができる。レジデュアルブロックは、現在ブロック又は現在ブロックから分割されたブロックのいずれか一つであってよい。本開示において、レジデュアルブロックは、現在ブロックのレジデュアルサンプルを含むレジデュアルアレイ(array)又はレジデュアルマトリックス(matrix)と称することができる。また、本開示において、レジデュアルブロックは、変換ユニット又は変換ブロックのサイズと同じサイズのブロックを表す。
次に、エンコーダは、変換カーネルを用いてレジデュアルブロックを変換することができる。レジデュアルブロックに対する変換に用いられる変換カーネルは、垂直変換及び水平変換の分離可能な特性を有する変換カーネルであってよい。この場合、レジデュアルブロックに対する変換は、垂直変換及び水平変換に分離して行われてよい。例えば、エンコーダは、レジデュアルブロックの垂直方向に変換カーネルを適用して垂直変換を行うことができる。また、エンコーダは、レジデュアルブロックの水平方向に変換カーネルを適用して水平変換を行うことができる。本開示において、変換カーネルは、変換マトリックス、変換アレイ、変換関数、変換のようにレジデュアル信号の変換に用いられるパラメータセットを表す用語で使われてよい。一実施例によって、変換カーネルは、複数の使用可能なカーネルのいずれか一つであってよい。また、垂直変換及び水平変換のそれぞれに対して異なる変換タイプに基づく変換カーネルが用いられてもよい。複数の使用可能な変換カーネルのいずれか一つが選択される方法については、図12~図26で後述する。
エンコーダは、レジデュアルブロックから変換された変換ブロックを量子化部に伝達して量子化することができる。この時、変換ブロックは複数の変換係数を含むことができる。具体的に、変換ブロックは、2次元配列された複数の変換係数で構成されてよい。変換ブロックのサイズは、レジデュアルブロックと同様に、現在ブロック又は現在ブロックから分割されたブロックのいずれか一つと同一であってよい。量子化部に伝達された変換係数は、量子化された値で表現されてよい。
また、エンコーダは、変換係数が量子化される前に追加の変換を行うことができる。図8に示すように、前述した変換方法は、1次変換(primary transform)、追加の変換は2次変換(secondary transform)と呼ぶことができる。2次変換は、レジデュアルブロック別に選択的であり得る。一実施例によって、エンコーダは、1次変換だけでは低周波領域にエネルギーを集中させ難い領域に対して2次変換を行って、コーディング効率を向上させることができる。例えば、レジデュアル値がレジデュアルブロックの水平又は垂直方向以外の方向で大きく現れるブロックに対して2次変換が追加されてよい。イントラ予測されたブロックのレジデュアル値は、インター予測されたブロックのレジデュアル値に比べて水平又は垂直方向以外の方向に変化する確率が高くてよい。これによって、エンコーダは、イントラ予測されたブロックのレジデュアル信号に対して2次変換をさらに行うことができる。また、エンコーダは、インター予測されたブロックのレジデュアル信号に対して2次変換を省略することができる。
他の例として、現在ブロック又はレジデュアルブロックのサイズによって、2次変換を行うか否かが決定されてもよい。また、現在ブロック又はレジデュアルブロックのサイズによって、サイズの異なる変換カーネルが用いられてよい。例えば、幅又は高さのうち短い辺の長さが、第1の既に設定された長さよりも短いブロックに対しては8×8の2次変換が適用されてよい。また、幅又は高さのうち、短い辺の長さが第2の既に設定された長さよりも長いブロックに対しては4×4の2次変換が適用されてよい。この時、第1の既に設定された長さは、第2の既に設定された長さよりも大きい値であり得るが、本開示がこれに制限されるものではない。また、2次変換は、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は、本発明の一実施例に係るモーションベクトルシグナリング方法を例示する図である。本発明の一実施例によれば、モーションベクトル(motion vector,MV)は、モーションベクトル予測(又は、予測子)(motion vector prediction(or predictor)、MVP)に基づいて生成されてよい。一例として、次の数学式1のように、MVはMVPと決定されてよい。言い換えると、MVはMVPと同じ値と決定(又は、設定、誘導)されてよい。
他の例として、次の数学式2のように、MVはMVP及びモーションベクトル差分(motion vector difference,MVD)に基づいて決定されてよい。エンコーダは、より正確なMVを示すために、MVD情報をデコーダにシグナリングすることができ、デコーダは、取得されたMVDをMVPに加算することによってMVを誘導することができる。
本発明の一実施例によれば、エンコーダは、決定されたモーション情報をデコーダに伝送し、デコーダは、受信したモーション情報からMVを生成(又は、誘導)し、それに基づいて予測ブロックを生成することができる。例えば、前記モーション情報は、MVP情報、MVD情報を含むことができる。この時、インター予測モードによって前記モーション情報の構成要素が変わってよい。一例として、マージモードにおいて前記モーション情報はMVP情報を含み、MVD情報を含まなくてもよい。他の例として、AMVP(advanced motion vector prediction)モードにおいて前記モーション情報はMVP情報及びMVD情報を含んでもよい。
MVPに関する情報を決定、送信、受信するために、エンコーダとデコーダは同じ方法でMVP候補(又は、MVP候補リスト)を生成することができる。例えば、エンコーダとデコーダは、同じ順序で同じMVP候補を生成することができる。そして、エンコーダは、生成されたMVP候補の中から決定された(又は、選択された)MVPを示す(又は、指示する)インデックスをデコーダに伝送し、デコーダは、受信したインデックスに基づいて決定されたMVP及び/又はMVを誘導することができる。
本発明の一実施例によれば、MVP候補は、空間候補(spatial candidate)、時間候補(temporal candidate)などを含むことができる。前記MVP候補は、マージモードが適用される場合、マージ候補と呼ぶことができ、AMVPモードが適用される場合、AMVP候補と呼ぶことができる。空間候補は、現在ブロックを基準に特定位置にあるブロックに対するMV(又は、モーション情報)であってよい。例えば、前記空間候補は、現在ブロックと隣接したり又は隣接しない位置のブロックのMVであってよい。時間候補は、現在ピクチャと他のピクチャ内のブロックに該当するMVであってよい。また、例えば、MVP候補は、アフィン(affine)MV、ATMVP、STMVP、前述したMV(又は、候補)の組合せ、前述したMV(又は、候補)の平均MV、ゼロMVなどを含むことができる。
一実施例において、エンコーダは、参照ピクチャを示す情報をデコーダにシグナリングすることができる。実施例として、MVP候補の参照ピクチャと現在ブロック(又は、現在処理ブロック)の参照ピクチャとが異なる場合、エンコーダ/デコーダは、MVP候補のMVをスケーリング(motion vector scaling)することができる。この時、MVスケーリングは、現在ピクチャのピクチャ順序カウント(picture order count,POC)、現在ブロックの参照ピクチャのPOC、MVP候補の参照ピクチャのPOCに基づいて行われてよい。
以下、MVDシグナリング方法に関する具体的な実施例を説明する。下記の表1は、MVDシグナリングのためのシンタックス構造を例示する。
表1を参照すると、本発明の一実施例によれば、MVDは、MVDの符号(sign)及び絶対値(absolute value)を分けてコードされてよい。すなわち、MVDの符号及び絶対値は、それぞれ異なるシンタックス(又は、シンタックスエレメント)であってよい。また、MVDの絶対値は、その値が直接にコードされてもよく、表1のように、絶対値がNよりも大きいか否かを示すフラグに基づいて段階的にコードされてもよい。仮に、絶対値がNよりも大きい場合(絶対値-N)の値が共にシグナリングされてよい。具体的に、表1の例示において絶対値が0よりも大きいか否かを示すabs_mvd_greater0_flagが伝送されてよい。仮に、絶対値が0よりも大きくないことをabs_mvd_greater0_flagが示す(又は、指示する)場合、MVDの絶対値は0と決定されてよい。また、仮に絶対値が0よりも大きいことをabs_mvd_greater0_flagが示す場合、追加シンタックス(又は、シンタックスエレメント)が存在してよい。
例えば、絶対値が1よりも大きいか否かを示すabs_mvd_greater1_flagが伝送されてよい。仮に、絶対値が1よりも大きくないことをabs_mvd_greater1_flagが示す(又は、指示する)場合、MVDの絶対値は1と決定されてよい。仮に、絶対値が1よりも大きいことをabs_mvd_greater1_flagが示す場合、追加シンタックスが存在してよい。例えば、abs_mvd_minus2が存在してよい。abs_mvd_minus2は(絶対値-2)の値であってよい。abs_mvd_greater0_flag、abs_mvd_greater1_flag値によって絶対値が1よりも大きい(すなわち、2以上である)と決定されたので、(絶対値-2)値がシグナルされてよい。このように、絶対値に関する情報を階層的にシンタックスシグナリングすることによって、絶対値をそのまま二進化(binarization)してシグナリングする場合に比べてより少ないビットが使用されて済む。
一実施例において、上述した絶対値に関連したシンタックスは、指数ゴロム(Exponential-Golomb)、切削型単項(truncated unary)、切削型ライス(truncated Rice)などの変数長(variable length)である二進化方法を適用してコードされてよい。また、MVDの符号を示すフラグは、mvd_sign_flagでシグナルされてよい。
上述した実施例において、MVDに対するコーディング方法を説明したが、MVD以外の情報も符号及び絶対値を分けてシグナリングすることができる。そして、絶対値は、前記絶対値があらかじめ定義された特定値よりも大きいか否かを示すフラグ及び絶対値から前記特定値を引いた値にコードされてよい。前記表1において、[0]と[1]は、コンポーネントインデックス(component index)を表すことができる。例えば、x-コンポーネント(すなわち、水平成分)、y-コンポーネント(すなわち、垂直成分)を表すことができる。
図11は、本発明の一実施例に係る適応的なモーションベクトル解像度(adaptive motion vector resolution)情報のシグナリング方法を例示する図である。本発明の一実施例によれば、MV又はMVDを示すための解像度は多様であり得る。例えば、解像度は、ピクセル(pixel)(又は、ペル(pel))に基づいて表現されてよい。例えば、MV又はMVDは、1/4(quarter)、1/2(half)、1(integer)、2、4ピクセルなどの単位でシグナルされてよい。そして、エンコーダは、MV又はMVDの解像度情報をデコーダにシグナリングすることができる。また、例えば、16は、1/4単位のとき、64にコードされ(1/4*64=16)、1単位のとき、16にコードされ(1*16=16)、4単位のとき、4にコードされてよい(4*.4=16)。すなわち、MV又はMVD値は、次の数学式3によって決定されてよい。
数学式3において、valueDeterminedは、MV又はMVD値を表す。また、valuePerResolutionは、決定された解像度に基づいてシグナリングされる値を表す。このとき、MV又はMVDでシグナリングする値が決定された解像度で割り切れない場合、ラウンド(rounding)プロセスなどが適用されてよい。高い解像度を使用すれば正確度が向上できるが、コードされる値が大きいため多くのビットが使用されることがあり、低い解像度を使用すれば正確度が低くなることがあるが、コードされる値が小さいため少ないビットが使用されて済む。一実施例として、上述した解像度は、シーケンス、ピクチャ、スライス、コーディングツリーユニット(coding tree unit,CTU)、コーディングユニット(coding unit,CU)などの単位で個別に設定されてよい。すなわち、エンコーダ/デコーダは、上述した単位のうち、あらかじめ定義された単位によって適応的に解像度を決定/適用することができる。
本明細書の一実施例によれば、上述した解像度情報は、エンコーダからデコーダにシグナリングされてよい。この時、解像度に関する情報は、前述した変数長に基づいて二進化してシグナリングされてよい。このような場合、最小の値(すなわち、最も前にある値)に該当するインデックスに基づいてシグナリングされる場合、シグナリングオーバーヘッドが減ることができる。一実施例として、高い解像度から低い解像度の順にシグナリングインデックスにマッピングされてもよい。
本明細書の一実施例によれば、図11は、様々な複数の解像度のうち、3つの解像度が用いられる場合を仮定してシグナリング方法を示す。この場合、3つのシグナリングビットは、0、10、11でよく、前記3つのシグナリングインデックスはそれぞれ、第1解像度、第2解像度、第3解像度を表すことができる。第1解像度をシグナリングするために1ビットが要求され、残りの解像度をシグナリングするために2ビットが要求されるため、第1解像度をシグナリングする場合、シグナリングオーバーヘッドを相対的に減らすことができる。図11の例示において、第1解像度、第2解像度、第3解像度はそれぞれ、1/4、1,4ピクセル解像度と定義されてよい。以下の実施例において、MV解像度はMVDの解像度を意味できる。
図12は、本発明の一実施例に係るヒストリーベースモーションベクトル予測(history-based motion vector prediction,HMVP)方法を例示する図である。前述したように、エンコーダ/デコーダは、モーションベクトル候補として、空間候補、時間候補などを用いることができ、本発明の一実施例では、モーションベクトル候補としてヒストリーベースモーションベクトル(history-based motion vector)、すなわち、HMVPをさらに使用することができる。
本明細書の一実施例によれば、エンコーダ/デコーダは、テーブル(table)に、以前にコードされたブロックのモーション情報(motion information)を保存することができる。本明細書において、HMVPは、以前にコードされたブロックのモーション情報を表す。すなわち、エンコーダ/デコーダは、HMVPをテーブルに保存することができる。本明細書において、前記HMVPを保存するテーブルを、テーブル又はHMVPテーブルと呼ぶが、本発明がこのような名称に制限されるものではない。一例として、前記テーブル(又は、HMVPテーブル)は、バッファ、HMVPバッファ、HMVP候補バッファ、HMVPリスト、HMVP候補リストなどと呼ぶことができる。
HMVPテーブルに保存されるモーション情報は、MV、参照リスト(reference list)、参照インデックス(reference index)又は利用フラグ(utilization flag)のうち少なくとも一つを含むことができる。例えば、モーション情報は、参照リストL0のMV、L1のMV、L0参照インデックス、L1参照インデックス、L0予測リスト利用フラグ又はL1予測リスト利用フラグのうち少なくとも一つを含むことができる。このとき、予測リスト利用フラグは、当該リストに対して使用可能な情報であるか否か、有意な情報であるか否かなどを示すことができる。
また、本明細書の一実施例によれば、HMVPテーブルに保存されるモーション情報は、ヒストリーベース(history-based)で生成/保存されてよい。ヒストリーベースモーション情報は、コーディング順序において現在ブロック以前にコードされたブロックのモーション情報を表す。例えば、エンコーダ/デコーダは、現在ブロック以前にコードされたブロックのモーション情報をHMVPテーブルに保存することができる。このとき、前記ブロックはコーディングユニット(coding unit,CU)又は予測ユニット(prediction unit,PU)などであってよい。前記ブロックのモーション情報は、当該ブロックのモーション補償に用いられたモーション情報又はモーション補償に用いられたモーション情報候補などを意味できる。そして、HMVPテーブルに保存されたモーション情報(すなわち、HMVP)は、後でエンコード/デコードされるブロックのモーション補償に用いられてよい。例えば、HMVPテーブルに保存されたモーション情報は、モーション候補リスト構成(motion candidate list construction)に用いられてよい。
図12を参照すると、エンコーダ/デコーダは、HMVPテーブルから一つ以上のHMVP候補を取り込むことができる(S1201)。そして、エンコーダ/デコーダは前記HMVP候補をモーション候補リストに追加できる。例えば、モーション候補リストは、マージ候補リスト(又は、マージリスト)、AMVP候補リスト(又は、AMVPリスト)であってよい。そして、エンコーダ/デコーダは、前記モーション候補リストに基づいて、現在ブロックに対するモーション補償及びエンコーディング/デコーディングを行うことができる(S1202)。エンコーダ/デコーダは、現在ブロックのモーション補償又はデコーディングに用いられた情報を用いてHMVPテーブルをアップデートすることができる(S1203)。
本発明の一実施例によれば、HMVP候補は、マージ候補リスト構成プロセスで用いられてよい。HMVPテーブルの最新の複数のHMVP候補が順に確認され、時間モーションベクトル予測(又は、予測子)(temporal motion vector prediction(or predictor)、TMVP)候補以降の順序でマージ候補リストに挿入(又は、追加)されてよい。また、HMVP候補を追加するとき、サブ-ブロックモーション候補(すなわち、ATMVP)を除いてマージリストに含まれた空間又は時間マージ候補に対してプルーニングプロセス(又は、プルーニングチェック)が行われてよい。一実施例において、プルーニング動作の数を減らすために、次の実施例が適用されてよい。
1)例えば、HMPV候補の数は、次の数学式4のように設定されてよい。
数学式4において、Lは、HMPV候補の数を表す。そして、Nは、利用可能な非サブブロック(non-sub block)マージ候補の数を表し、Mは、テーブルで利用可能なHMVP候補の数を表す。例えば、Nは、マージ候補リストに含まれた非サブブロック(non-sub block)マージ候補の数を示すことができる。Nが4よりも小さいか等しい場合、HMVP候補の数はMと決定されてよく、そうでない場合、HMVP候補の数は(8-N)と決定されてよい。
2)また、例えば、利用可能なマージ候補の総数が、シグナリングされた最大許容マージ候補の数から1を引いた値に到達すれば、HMVPリストからのマージ候補リスト構成プロセスは終了してよい。
3)また、例えば、結合した双予測マージ候補(combined bi-predictive merge candidate)の誘導のための候補対の数は12から6に減少してよい。
また、本発明の一実施例によれば、HMVP候補は、AMVP候補リスト構成プロセスにおいても用いられてよい。テーブルにおいて、最後のKインデックスを有するHMVP候補のモーションベクトルは、TMVP候補に続いて挿入されてよい。一実施例において、AMVPターゲット参照ピクチャと同じ参照ピクチャを有するHMVP候補だけを、AMVP候補リストを構成するのに用いることができる。この場合にも、上述したプルーニングプロセスがHMVP候補に適用されてよい。例えば、上述したKは4に設定され、AMVPリストのサイズ(又は、長さ)は2に設定されてよい。
図13は、本発明の一実施例に係るHMVPテーブルのアップデート方法を例示する図である。本発明の一実施例によれば、HMVPテーブルは、FIFO(first-in,first-out)方式で維持/管理されてよい。すなわち、新しい入力がある場合、最も以前のエレメント(element)(又は、候補)がまず出力されてよい。例えば、現在ブロックで用いられたモーション情報をHMVPテーブルに追加するとき、エンコーダ/デコーダは、HMVPテーブルの最大エレメント個数分のエレメントが満たされている場合、最も以前に追加したモーション情報をHMVPテーブルから出力させ、現在ブロックで用いられたモーション情報をHMVPテーブルに追加することができる。この時、既存HMVPテーブルに存在するモーション情報を出力した場合、エンコーダ/デコーダは、その次の位置(又は、インデックス)のモーション情報を、出力された位置を埋めながら移動させることができる。例えば、出力されたモーション情報のHMVPテーブルインデックスがmであり、最も以前のエレメントがHMVPテーブルインデックス0に位置するとき、mよりも大きいインデックスnに該当するモーション情報はそれぞれ、HMVPテーブルのインデックス(n-1)位置に移動することができる。これによって、HMVPテーブルにおいてインデックスの高い位置が空になり、エンコーダ/デコーダは、現在ブロックに用いられたモーション情報に対して、HMVPテーブル内で最も高いインデックスを割り当てることができる。すなわち、現在ブロックのモーション情報は、有効なエレメントが含まれた最大インデックスがMであるとき、インデックス(M+1)の位置に挿入されてよい。
また、本発明の一実施例によれば、エンコーダ/デコーダは、特定モーション情報に基づいてHMVPテーブルをアップデートするとき、プルーニングプロセスを適用することができる。すなわち、エンコーダ/デコーダは、前記特定モーション情報又は前記特定モーション情報に該当する情報がHMVPテーブルに含まれているか否かを確認することができる。そして、重複するモーション情報が含まれている場合とそうでない場合のHMVPテーブルアップデート方法を個別に定義することができる。これによって、HMVPテーブルに重複するモーション情報が含まれることが防止でき、様々な候補をモーション補償に考慮することができる。
一実施例において、エンコーダ/デコーダは、現在ブロックに用いられたモーション情報に基づいてHMVPテーブルアップデートをするとき、前記モーション情報がHMVPテーブルに既に含まれた場合、既存にHMVPテーブルに含まれている重複するモーション情報を削除し、前記モーション情報をHMVPテーブルに新規に追加することができる。この時、既存の候補を削除して新規に追加する方法に先立って、FIFOで説明した方法用いることができる。すなわち、HMVPテーブル内で現在追加しようとするモーション情報のインデックスがmと決定され、最も以前のモーション情報が出力されてよい。モーション情報がHMVPテーブルに既に含まれていないと、エンコーダ/デコーダは、最も以前に追加したモーション情報を削除し、前記モーション情報をHMVPにテーブルに追加することができる。
他の実施例において、現在ブロックに用いられたモーション情報に基づいてHMVPテーブルをアップデートするとき、エンコーダ/デコーダは、前記モーション情報がHMVPテーブルに既に含まれていると、HMVPテーブルを変更せず、既に含まれていないと、HMVPテーブルをFIFO方式でアップデートすることができる。
また、本発明の一実施例によれば、エンコーダ/デコーダは、あらかじめ定義された時点又はあらかじめ定義された位置でHMVPテーブルを初期化(又は、リセット)することができる。エンコーダとデコーダで同じモーション候補リストを使用しなければならないので、エンコーダとデコーダは、同じHMVPテーブルを使用する必要がある。このとき、HMVPテーブルを初期化せずに続けて使用すれば、コーディングブロック間の依存性(dependency)が発生する問題がある。したがって、並列処理(parallel processing)を支援するためにブロック間の依存性を減らす必要があり、並列処理を支援する単位によってHMVPテーブルを初期化する動作があらかじめ設定されてよい。例えば、エンコーダ/デコーダは、スライスレベル、CTU行(row)レベル、CTUレベルなどにおいてHMVPテーブルを初期化するように設定することができる。例えば、CTU行レベルにおいてHMVPテーブルに対する初期化が定義された場合、エンコーダ/デコーダはそれぞれのCTU行に対するコーディングを始める時、HMVPテーブルが空いた(empty)状態でエンコーディング/デコーディングを行うことができる。
図14は、本発明の一実施例に係るHMVPテーブルのアップデート方法を説明するための図である。図14を参照すると、本発明の一実施例において、エンコーダ/デコーダは、HMVPCandListをmvCandに基づいてアップデートすることができる。本明細書において、HMVPCandListはHMVPテーブルを表し、mvCandは、現在ブロックのモーション情報を表す。図14に示すプロセスは、2個のモーションベクトルmvL0及びmvL1、2個の参照インデックスrefIdxL0及びrefIdxL1、及び2個の予測リスト利用フラグpredFlagL0及びpredFlagL1を有するモーション候補mvCandを入力とすることができる。そして、図14に示すプロセスは、修正されたHMVPCandList配列を出力することができる。
一番目の段階(Step1)で、エンコーダ/デコーダは、HMVPテーブル内HMVPのインデックスを示す変数であるHMVPIdx値を0から(HMVPCandNum-1)まで変化させながら、mvCandがHMVPCandList[HMVPIdx]と同一であるか否か確認することができる。ここで、HMVPCandNumは、HMVPテーブルに含まれたHMVPの個数を示す。そして、HMVPCandList[HMVPIdx]は、HMVPIdx値を有するHMVPテーブル内候補を示す。mvCandがHMVPCandList[HMVPIdx]と同じ場合、エンコーダ/デコーダは、候補の同一か否かを示す変数sameCandを真(true)と設定できる。一実施例において、mvCandがHMVPCandList[HMVPIdx]と同一であるか否かを確認するとき、エンコーダ/デコーダは、L0に関連したMV及び参照インデックス、又はL1に関連したMV及び参照インデックスのうち、当該予測リスト使用フラグ(prediction list utilization flag)が1であるモーション情報に対して比較を行うことができる。
そして、二番目の段階(Step2)で、エンコーダ/デコーダは、臨時インデックスを示す変数tempIdxをHMVPCandNumに設定することができる。三番目の段階(Step3)で、sameCandが真であるか、HMVPCandNumが最大HMVPテーブルの大きさ(又は、長さ)と同一である場合、エンコーダ/デコーダは、tempIdxを(sameCand?HMVPIdx:1)から(HMVPCandNum-1)まで変化させながら、HMVPCandList[tempIdx]をHMVPCandList[tempIdx-1]に複写することができる。すなわち、sameCandが真である場合、tempIdxはHMVPIdxから始まり、エンコーダ/デコーダは、HMVPIdxをHMVPテーブル内でmvCandと同じエレメントインデックスに1を足した値に設定することができる。また、sameCandが偽である場合、tempIdxは1から始まり、HMVPCandList[0]はHMVPCandList[1]の内容で書き込まれてよい。
四番目の段階(Step4)で、エンコーダ/デコーダは、アップデートしようとするモーション情報であるmvCandをHMVPCandList[tempIdx]に複写することができる。五番目の段階(Step5)で、HMVPCandNumが最大HMVPテーブルサイズよりも小さい場合、エンコーダ/デコーダは、HMVPCandNumを1増加させることができる。
図15は、本発明の一実施例に係るHMVPテーブルのアップデート方法を説明するための図である。図15を参照すると、本発明の一実施例において、エンコーダ/デコーダは、現在ブロックのモーション情報がHMVPテーブルに含まれているか否かを確認する過程でHMVPIdxを0よりも大きい値から比較し始めることができる。例えば、現在ブロックのモーション情報がHMVPテーブルに含まれている否かを確認するとき、エンコーダ/デコーダは、HMVPIdx0に該当するものを除いて比較することができる。言い換えると、エンコーダ/デコーダは、HMVPIdx1に該当する候補からmvCandと比較することができる。図15に示すプロセスは、2個のモーションベクトルmvL0及びmvL1、2個の参照インデックスrefIdxL0及びrefIdxL1、及び2個の予測リスト利用フラグpredFlagL0及びpredFlagL1を有するモーション候補mvCandを入力とすることができる。そして、図15に示すプロセスは、修正されたHMVPCandList配列を出力することができる。
上の図14で説明したHMVPテーブルアップデート方法をさらに説明すると、一番目の段階で、HMVPIdx0のものからmvCandと同じモーション情報があるかどうか確認することができる。しかし、前述したアップデート方法において、mvCandがHMVPCandList[0]に存在したり、或いはHMVPIdx0からHMVPCandNumに該当するHMVPCandList[HMVPIdx]に存在しない場合、HMVPCandList[0]のモーション情報を出力し、mvCandが0でないHMVPIdxのうちHMVPCandList[HMVPIdx]に存在する場合、HMVPCandList[0]の内容はアップデートされないので、mvCandをHMVPCandList[0]と比較しなくてもよい。また、現在ブロックのモーション情報が空間的に隣り合うブロックのモーション情報と類似するので、HMVPテーブル内で最近に追加されたモーション情報と類似する可能性が高い。このような仮定によれば、mvCandは、HMVPIdx0に該当する候補のモーション情報よりはHMVPIdxが0よりも大きい候補とモーション情報が類似であり得、類似の(又は、同一の)モーション情報が探索された場合、プルーニングプロセスを終了できるので、HMVPIdxを0よりも大きい値から上記の図14の一番目の段階を行うことによって、上述した図14の実施例に比べて、比較する回数を減らすことができる。
図16は、本発明の一実施例に係るHMVPテーブルのアップデート方法を説明するための図である。図16を参照すると、本発明の一実施例において、エンコーダ/デコーダは、現在ブロックのモーション情報、すなわち、mvCandがHMVPテーブルに含まれている否かを確認する過程でHMVPIdxを0よりも大きい値から比較できる。図16に示すプロセスは、2個のモーションベクトルmvL0及びmvL1、2個の参照インデックスrefIdxL0及びrefIdxL1、及び2個の予測リスト利用フラグpredFlagL0及びpredFlagL1を有するモーション候補mvCandを入力とすることができる。そして、図16に示すプロセスは、修正されたHMVPCandList配列を出力できる。例えば、エンコーダ/デコーダは、mvCandがHMVPテーブルに含まれている否かを確認するとき、HMVPIdx値が0以上に該当するあらかじめ定義された特定個数のモーション情報(又は、候補)を除いて比較プロセス(又は、プルーニングプロセス)を行うことができる。具体的に、比較しようとするエレメントの個数を示す変数をNumPruneで示すとき、エンコーダ/デコーダは、mvCandがHMVPIdx(HMVPCandNum-NumPrune+1)から(HMVPCandNum-1)に該当するHMVPテーブルエレメントと一致するかどうか確認することができる。これによって、以前に説明した実施例に比べて、比較回数を顕著に減らすことができる。
他の実施例において、エンコーダ/デコーダは、HMVPテーブル内でHMVPIdx0でない既に設定された特定位置とmvCandを比較することができる。例えば、エンコーダ/デコーダは、mvCandをHMVPIdx PruneStartから(HMVPCandNum-1)までに該当するHMVPテーブルエレメントと重複するモーション情報であるか否か比較することができる。
図17は、本発明の一実施例に係るHMVPテーブルのアップデート方法を説明するための図である。図17を参照すると、本発明の一実施例において、エンコーダ/デコーダは、mvCandがHMVPテーブルに含まれているか否か確認する過程で、最近に追加したHMVPテーブルエレメントから古いHMVPテーブルエレメントへの順にmvCandと比較することができる。図17に示すプロセスは、2個のモーションベクトルmvL0及びmvL1、2個の参照インデックスrefIdxL0及びrefIdxL1、及び2個の予測リスト利用フラグpredFlagL0及びpredFlagL1を有するモーション候補mvCandを入力とすることができる。そして、図17に示すプロセスは、修正されたHMVPCandList配列を出力することができる。mvCandが空間的に隣り合うブロックのモーション情報と類似する可能性が高いので、HMVPテーブル内で相対的に最近に追加されたモーション情報と類似し得る。このような方式により、類似の(又は、同一の)モーション情報が探索された場合、プルーニングプロセスを終了できる。これをよって、図17の実施例のように、最近に追加したエレメントに該当するHMVPIdxから比較を行うことによって、比較回数を減らすことができる。
図18は、本発明の一実施例に係るプルーニング(pruning)プロセスを例示する図である。本発明の一実施例によれば、エンコーダ/デコーダは、現在ブロックのモーション情報がHMVPテーブルに既に含まれている否かを確認するとき、HMVPテーブルの一部の情報と比較することができる。これは、比較プロセスによる複雑度(complexity)を減らすためである。例えば、モーション情報がHMVPCandList[HMVPIdx]に含まれている否かを確認するとき、エンコーダ/デコーダは、HMVPCandList[HMVPIdx]のサブセット(subset)又はあらかじめ定義されたインデックスを有するHMVPCandList[HMVPIdx]を用いてプルーニングプロセスを行うことができる。例えば、HMVPCandList[HMVPIdx]にはL0、L1に関する情報がそれぞれ含まれてよいが、L0、L1使用フラグ(utilization flag)がいずれも1である場合、エンコーダ/デコーダは、既に設定された約束(又は、条件)によってL0、L1のいずれか一つを選択して比較することができる。例えば、L0参照インデックスとL1参照インデックスのうち小さい参照リストに対してのみ、重複したモーション情報を確認するプルーニングプロセスを行うことができる。
一実施例において、エンコーダ/デコーダは、HMVPテーブルのモーション情報のL0参照インデックスとL1参照インデックスのうち小さい参照リストに対してのみプルーニングプロセスを行うことができる。例えば、エンコーダ/デコーダは、現在ブロックのモーション情報のL0参照インデックスとL1参照インデックスのうち小さい参照インデックスに対してのみプルーニングプロセスを行うことができる。他の実施例において、エンコーダ/デコーダは、現在ブロックの参照インデックスビットとモーション情報ビットのサブセットに基づく値を、HMVPテーブルエレメントの参照インデックスビットとモーション情報ビットのサブセットに基づく値と比較してHMVPテーブルに既に含まれているかいなか判断できる。一実施例として、参照インデックスビットとモーション情報ビットのサブセットに基づく値は、参照インデックスビットとビットとモーション情報ビットのうち一部のビットであってよい。他の実施例において、参照インデックスビットとモーション情報ビットのサブセットに基づく値は、第1サブセットと第2サブセットをハッシュ関数(hash function)に通過させた値(又は、出力)であってよい。他の実施例において、プルーニング過程で両モーションベクトルのサイズ差があらかじめ定義された臨界値よりも小さいか等しい場合、エンコーダ/デコーダは、両モーションベクトルを同一又は類似なものと判断できる。
図19は、本発明の一実施例に係るHMVP候補の追加方法を例示する図である。本発明の一実施例によれば、エンコーダ/デコーダは、HMVPテーブルに含まれたMVをモーション候補リストに追加できる。一実施例として、現在ブロックのモーションは、最近に追加されたモーションに類似する可能性があり、最近に追加されたモーションが候補として有用である可能性があるので、エンコーダ/デコーダは、HMVPテーブルで最近に追加されたエレメントを候補リストに追加することができる。
このとき、一実施例において、図19を参照すると、エンコーダ/デコーダは、最も最近に追加されたHMVPテーブルのエレメントではなく特定インデックス値を有するエレメントから候補リストに追加することができる。又は、エンコーダ/デコーダは、最も最近に追加されたHMVPテーブルエレメントではなくその次のエレメントからその以前に追加された特定個数のエレメントを候補リストに追加してもよい。
又は、一実施例において、エンコーダ/デコーダは、最近に追加されたHMVPテーブルエレメントの1個以上を除くエレメントからその以前に追加された特定個数のエレメントを候補リストに追加してもよい。この時、エンコーダ/デコーダは、HMVPテーブルエレメントのうち、相対的に最近に入力されたモーション情報を候補リストに優先的に追加することができる。
最も最近に追加されたHMVPテーブルエレメントは、現在ブロックと空間的に近接したブロックに当該し得るので、候補リスト構成過程で既に空間候補として追加されている可能性が高い。したがって、本実施例のように、最近に追加された特定個数の候補を除いて候補リストを構成することによって、不要な候補を候補リストに追加することを防止し、候補リストに追加するとき、プルーニングプロセッサの複雑度を下げることができる。HMVPテーブルエレメント及び使用をモーション候補リスト構成を中心に説明したが、本発明は、これに限定されず、他のパラメータ又はインター/イントラ予測関連情報に対して適用可能である。
図20は、本発明の一実施例に係るマージ共有ノード(merge sharing node)を例示する図である。本発明の一実施例によれば、エンコーダ/デコーダは、並列処理を容易にするために、複数のブロックに対して同じ候補リストを共有するようにしてよい。前記候補リストは、モーション候補リストであってよい。既に設定された約束にしたがって前記複数のブロックが定義されてよい。例えば、特定条件を満たすブロック(又は、領域)の下位にあるブロックが前記複数のブロックと定義されてよい。又は、特定条件を満たすブロックに含まれるブロックが前記複数のブロックと定義されてもよい。本明細書において、前記複数のブロックが同一に使用する候補リストは、共有されたリスト(shared list)と呼ぶことができる。仮に、マージ候補リストに適用される場合、共有されたマージリスト(shared merge list)と呼ぶことができる。
また、本明細書において、前記特定条件を満たすブロックは、マージ共有ノード(merge sharing node)(すなわち、図20に点線で表示された部分)、共有マージノード、マージ共有領域、共有マージ領域、共有マージリストノード、共有マージリスト領域などと呼ぶことができる。エンコーダ/デコーダは、前記マージ共有ノードに隣接した周辺ブロックのモーション情報に基づいてモーション候補リストを構成でき、これによって、前記マージ共有ノード内コーディングユニットに対する並列処理を保障することができる。また、上述した特定条件として臨界値を用いることができる。例えば、前記マージ共有ノードと定義されるブロックは、前記臨界値に基づいて定義(又は、決定)されてよい。一例として、前記特定条件で用いられる臨界値は、ブロックサイズ、ブロックの幅/高さに関連した値に設定されてよい。
図21は、本発明の一実施例に係る共有されたリスト(shared list)が用いられる場合、HMVPアップデート方法を説明するための図である。図21では、図20で前述した共有されたリストが用いられる場合を仮定する。HMVP候補を用いて共有されたリストを構成するとき、エンコーダとデコーダは互いに同一のHMVPテーブルを維持しなければならない。仮に、同一の共有されたリストを用いる複数のブロックが、使用したモーション情報に基づいてHMVPテーブルのアップデートルールが定義されていないと、同一の候補リストを構成することができない。したがって、後述する図22~図24では、図21に示したマージ共有ノード内でCU1、CU2、CU3、CU4が共有されたリストを用いる場合を仮定して、マージ共有ノード内で同じ共有されたリストを保障するためのHMVPテーブルアップデート方法を説明する。
図22は、本発明の一実施例に係るマージ共有ノード内のブロックのモーション情報に基づいてHMVPテーブルをアップデートする方法を例示する図である。図22を参照すると、エンコーダ/デコーダは、マージ共有ノードの下位ノードコーディングユニットにいるCU1、CU2、CU3、CU4に対して同じ共有リストを適用できる。具体的に、エンコーダ/デコーダは、マージ共有ノードに隣接している周辺ブロックのモーション情報に基づいてCU1、CU2、CU3、CU4に対する同一のモーション候補リストを構成できる(S2201、S2202、S2203、S2204)。前記モーション候補リストは、モーションベクトル成分及び参照インデックスを含むことができる。
共有モーション候補リストを用いてCU1、CU2、CU3、CU4に対するモーション情報誘導又はエンコーディング/デコーディング後に、エンコーダ/デコーダは、CU1、CU2、CU3、CU4に対するモーション情報を用いてHMVPテーブルをアップデートすることができる(S2205)。同一の候補リストを用いるべき状況で、すなわち、マージ共有ノード内で複数のCUがHMVPテーブルをアップデートすれば、同一の候補リストを使用できないこともある。したがって、本発明の一実施例によれば、共有リストを用いる状況で、HMVPテーブルのアップデートは、マージ共有ノードに属した全てのCUのMV誘導又はコーディングが終了した後に行われてよく、これによって、マージ共有ノードに属した全てのCUが同一のHMVPテーブルに基づいてモーション候補リストを構成することができる。
図23は、本発明の一実施例に係る共有されたリスト(shared list)が用いられる場合、HMVPアップデート方法を説明するための図である。図23を参照すると、上の図20~図22で説明した共有されたリストが用いられる場合を仮定する。このとき、図22における各CUのMV誘導又はエンコーディング/デコーディングが終了すると、マージ共有ノード内に複数のCUが存在するため、用いられたモーション情報も複数存在し得る。
本発明の一実施例によれば、図23に示すように、エンコーダ/デコーダは、マージ共有ノード内の全モーション情報を用いてHMVPテーブルをアップデートすることができる。言い換えると、同じ共有リストを用いる全てのCUで使用したモーション情報を用いて、エンコーダ/デコーダはHMVPテーブルをアップデートすることができる。この時アップデートの順序は、エンコーダとデコーダに既に設定されている必要がある。
一実施例において、エンコーダ/デコーダは、アップデート順序として正規デコーディング(regular decoding)順序を参照することができる。例えば、図23に示すように、正規コーディング順序にしたがって、各CUに該当するモーション情報をHMVPテーブルアップデート過程の入力として順に使用することができる。又は、一実施例として、エンコーダ/デコーダは、参照インデックス順序、現在ピクチャと参照ピクチャ間のPOC関係などを参照して、複数のCUのモーション情報に対するHMVPテーブルアップデート順序を決定してもよい。例えば、参照インデックス順序でマージ共有ノード内全モーション情報をHMVPテーブルにアップデートすることができる。又は、例えば、現在ピクチャと参照ピクチャ間のPOC差が低い順序又は高い順序でマージ共有ノード内全てのモーション情報をHMVPテーブルにアップデートすることができる。
図24は、本発明の一実施例に係るマージ共有ノード内のブロックのモーション情報に基づいてHMVPテーブルをアップデートする方法を例示する図である。図24を参照すると、上の図20~図22で説明した共有されたリストが用いられる場合を仮定する。この時、図22における各CUのMV誘導又はエンコーディング/デコーディングが終了すると、マージ共有ノード内複数のCUが存在するので、用いられたモーション情報も複数存在し得る。
本発明の一実施例によれば、エンコーダ/デコーダは、マージ共有ノード内複数のCUで使用したモーション情報のうち一部のモーション情報を用いてHMVPテーブルをアップデートすることができる。言い換えると、エンコーダ/デコーダは、マージ共有ノード内の複数のCUで使用したモーション情報のうち少なくとも一部のCUのモーション情報は、HMVPテーブルにアップデートしなくてもよい。一例として、エンコーダ/デコーダは、アップデート順序として正規コーディング(regular coding)順序を参照することができる。例えば、エンコーダ/デコーダは、正規デコーディング順序にしたがって各CUに該当するモーション情報のうちデコーディング順序が遅い既に設定された個数のモーション情報を用いてHMVPテーブルをアップデートすることができる。これは、正規コーディング順序において遅いブロックが次のコードされるブロックと空間的に隣接する可能性が高く、モーション補償時に類似のモーションを必要とすることがあるためである。
一実施例において、図24を参照すると、エンコーダ/デコーダは、同じ共有リストを用いるCU1~CU4があるとき、正規デコーディング順序において最後にコードするCU4に対するモーション情報だけをHMVPテーブルアップデートに使用することができる。他の実施例として、エンコーダ/デコーダは、参照インデックス順序、現在ピクチャと参照ピクチャ間のPOC関係などを参照して、複数のCUのモーション情報のうち一部のモーション情報を用いてHMVPテーブルをアップデートすることができる。
また、本発明の他の実施例によれば、HMVPテーブルからHMVP候補を候補リストに追加するとき、エンコーダ/デコーダは、現在ブロックとHMVPテーブル内エレメントに該当するブロックとの関係を参照してHMVP候補を候補リストに追加することができる。又は、エンコーダ/デコーダは、HMVPテーブルからHMVP候補を候補リストに追加するとき、HMVPテーブルに含まれた候補ブロック間の位置関係を参照することができる。例えば、エンコーダ/デコーダは、HMVP又はブロックのデコーディング順序を考慮してHMVPテーブルからHMVP候補を候補リストに追加することができる。
図25は、本発明の一実施例に係るHMVPに基づいてビデオ信号を処理する方法を例示する図である。図25を参照すると、説明の便宜のためにデコーダを中心に説明するが、本発明がこれに制限されるものではなくて、本実施例に係るHMVPベースビデオ信号処理方法はエンコーダにも実質的に同様に適用可能である。
具体的に、デコーダは、現在ブロックが複数のコーディングブロックを含むマージ共有ノード(merge sharing node)内に位置する場合、前記マージ共有ノードに隣接した空間候補(spatial candidate)を用いてマージ候補リストを構成することができる(S2501)。デコーダは、少なくとも一つのヒストリーベースモーションベクトル予測子(history-based motion vector predictor,HMVP)を含むHMVPテーブル内の特定HMVPを前記マージ候補リストに追加することができる(S2502)。ここで、前記HMVPは、前記複数のコーディングブロック以前にコードされたブロックのモーション情報を表す。
デコーダは、前記マージ候補リスト内で前記現在ブロックの予測に用いられるマージ候補を指示するインデックス情報を取得し(S2503)、前記マージ候補のモーション情報に基づいて前記現在ブロックの予測ブロックを生成する(S2504)。デコーダは、予測ブロックと残差ブロックを加算することによって、現在ブロックの復元ブロックを生成することができる。前述したように、本発明の一実施例によれば、前記マージ共有ノードに含まれた複数のコーディングブロックのうち少なくとも一つのコーディングブロックのモーション情報は、前記HMVPテーブルにアップデートされなくてもよい。前述したように、デコーダは、前記マージ共有ノードに含まれた複数のコーディングブロックのうち、デコーディング順序が相対的に遅いあらかじめ定義された個数のコーディングブロックのモーション情報を用いて、前記HMVPテーブルをアップデートすることができる。
また、前述したように、デコーダは、前記マージ共有ノードに含まれた複数のコーディングブロックのうち、デコーディング順序が相対的に最も遅いコーディングブロックのモーション情報を用いて、前記HMVPテーブルをアップデートすることができる。また、デコーダは、前記現在ブロックが前記マージ共有ノード内に位置しない場合、前記マージ候補のモーション情報を用いて前記HMVPテーブルをアップデートすることができる。また、前述したように、デコーダは、前記HMVPテーブル内であらかじめ定義された特定インデックスを有するHMVPを用いて、前記マージ候補リスト内の候補と重複するモーション情報を有するか否かを確認することができる。
図26は、本発明の一実施例に係る多重仮定予測(multi-hypothesis prediction)方法を説明するための図である。本発明の一実施例によれば、エンコーダ/デコーダは複数の予測方法に基づいて予測ブロックを生成することができる。本明細書において、このような複数の予測モードに基づく予測方法を、多重仮定予測と呼ぶ。ただし、本発明がこのような名称に制限されるものではなく、本明細書において前記多重仮定予測は、多重予測、複数予測、組合せ予測、インター-イントラ加重予測、組み合わせられたインター-イントラ予測、組み合わせられたインター-イントラ加重予測などと呼ぶことができる。一実施例として、多重仮定予測は、任意の予測方法によって生成したブロックを意味できる。また、一実施例として、多重予測における予測方法は、イントラ予測(intra prediction)、インター予測(inter prediction)などの方法を含むことができる。又は、多重予測における予測方法は、さらに細分してマージモード(merge mode)、AMVPモード、イントラ予測の特定モードなどを意味してもよい。また、エンコーダ/デコーダは、多重予測に基づいて生成された予測ブロック(又は、予測サンプル)を加重和(weighted sum)することによって最終的な予測ブロックを生成することができる。
本発明の一実施例によれば、多重予測に用いられる予測方法の最大個数があらかじめ設定されてよい。例えば、多重予測の最大個数は2でよい。したがって、エンコーダ/デコーダは、単方向予測(uni prediction)の場合に2個の予測から、両方向予測(bi prediction)の場合に2個(すなわち、1つの参照リストからの予測にのみ多重予測を用いる場合)又は4個(すなわち、2つの参照リストからの予測に多重予測を用いる場合)の予測を適用して予測ブロックを生成することができる。
又は、本発明の一実施例によれば、多重仮定予測で使用可能な予測モードがあらかじめ設定されてよい。又は、多重仮定予測で使用可能な予測モード組合せがあらかじめ設定されてもよい。例えば、エンコーダ/デコーダは、インター予測及びイントラ予測で生成した予測ブロック(又は、予測サンプル)を用いて多重仮定予測を行うことができる。
本発明の一実施例によれば、エンコーダ/デコーダは、インター予測及び/又はイントラ予測モードのうち一部の予測モードだけを多重仮定予測に使用することができる。例えば、エンコーダ/デコーダは、インター予測のうち、マージモードだけを多重仮定予測に用いることができる。又は、エンコーダ/デコーダは、インター予測のうち、サブブロックマージ(subblock merge)モードではなくマージモードを多重仮定予測に用いることができる。又は、エンコーダ/デコーダは、イントラ予測モードのうち、特定イントラモードを多重仮定予測に用いることができる。例えば、エンコーダ/デコーダは、イントラ予測のうち、プレーナ(planar)、DC、垂直(vertical)及び/又は水平(horizontal)モードのうち少なくとも一つを含む予測モードを制限的に多重仮定予測に用いることができる。一実施例として、エンコーダ/デコーダは、マージモード及びイントラ予測の予測に基づいて予測ブロックを生成でき、この時、イントラ予測には、プレーナ、DC、垂直及び/又は水平モードのうち少なくとも一つの制限的な予測モードだけを用いることができる。
図26を参照すると、エンコーダ/デコーダは、第1予測(prediction 1)と第2予測(prediction 2)を用いて予測ブロックを生成することができる。具体的に、エンコーダ/デコーダは、第1予測を適用して第1臨時予測ブロック(又は、予測サンプル)を生成し、第2予測を適用して第2臨時予測ブロックを生成することができる。エンコーダ/デコーダは、第1臨時予測ブロック及び第2臨時予測ブロックを加重和することによって最終予測ブロックを生成することができる。この時、エンコーダ/デコーダは、第1予測によって生成された第1臨時予測ブロックに第1加重値w1を適用し、第2予測によって生成された第2臨時予測ブロックに第2加重値w2を適用して、加重和(weighted sum)を行うことができる。
本発明の一実施例によれば、多重仮定予測に基づいて予測ブロックを生成するととき、多重仮定予測に適用される加重値(weight)は、ブロック内特定位置に基づいて決定されてよい。このとき、前記ブロックは、現在ブロック又は周辺ブロックであってよい。又は、多重仮定予測の加重値は、予測を生成するモードに基づいてもよい。例えば、エンコーダ/デコーダは、予測を生成するモードの一つがイントラ予測である場合、予測モードに基づいて加重値を決定することができる。また、例えば、エンコーダ/デコーダは、予測モードのいずれか一つがイントラ予測であり、且つ方向性モードである場合、参照サンプルから遠く離れた位置のサンプルに対する加重値を上げることができる。
本発明の一実施例によれば、エンコーダ/デコーダは、多重仮定予測に用いられるイントラ予測モードが方向性モードであり、他の予測モードがインター予測である場合、参照サンプルから遠い側のイントラ予測に基づいて生成した予測サンプルに、相対的に高い加重値を適用することができる。これは、インター予測の場合、空間隣候補を用いてモーション補償ができ、このような場合、現在ブロックとモーション補償のために参照した空間隣ブロックの動きが同一又は類似である確率が高く、これによって、空間隣ブロックに隣接した領域の予測及びモーションがあるオブジェクトを含む領域の予測が、他の部分に比べて正確である確率が高いためである。この場合、空間隣ブロックの反対方向境界に隣接した残差信号(residual signal)は、他の領域(又は、部分)よりも多く残されることがある。本発明の一実施例によれば、多重仮定予測においてイントラ予測されたサンプルを組み合わせて適用することによって、これを相殺することができる。また、一実施例において、イントラ予測の参照サンプル位置は、インター予測の空間隣候補の近傍であり得るので、エンコーダ/デコーダは、それから相対的に遠い領域に、高い加重値を適用することができる。
他の実施例として、多重仮定予測サンプルの生成に用いられるモードの一つがイントラ予測であり、且つ方向性モードである場合、エンコーダ/デコーダは、参照サンプルから相対的に近くに位置しているサンプルに対して高い加重値を適用することができる。より具体的に、多重仮定予測サンプルの生成に用いられるモードの一つがイントラ予測であり且つ方向性モードであり、他の多重仮定予測サンプルの生成に用いられるモードがインター予測である場合、エンコーダ/デコーダは、参照サンプルから近い側のイントラ予測に基づいて生成した予測に、高い加重値を適用することができる。これは、イントラ予測において予測サンプルと参照サンプル間の距離が近いほど、予測の正確度が高いためである。
他の実施例として、多重仮定予測サンプルの生成に用いられるモードの一つがイントラ予測であり、且つ方向性モードでない場合(例えばプレーナ、DCモードである場合)、加重値は、ブロック内における位置に関係なく一定の値に設定されてよい。また、一実施例において、多重仮定予測において予測2に対する加重値は、予測1に対する加重値に基づいて決定されてよい。次の式は、多重仮定予測に基づいて予測サンプルを決定する一例を表す。
数学式5において、pbSamplesは、多重仮定予測によって生成された(最終)予測サンプル(又は、予測ブロック)を表す。そして、predSamplesは、インター予測によって生成されたブロック/サンプルを表し、predSamplesIntraは、イントラ予測によって生成されたブロック/サンプルを表す。数学式5において、xとyは、ブロック内におけるサンプルの座標を表し、次の範囲であってよい。x=0..nCbW-1 and y=0..nCbH-1。また、nCbWとnCbHはそれぞれ、現在ブロックの幅と高さであってよい。また、一実施例において、加重値wは、次のようなプロセスによって決定されてよい。
- 仮にpredModeIntraがINTRA_PLANAR又はINTRA_DCであるか、nCbW<4であるか、nCbH<4であるか、又はcIdx>0である場合、wは4に設定されてよい。
- そうでない場合、仮に、predModeIntraがINTRA_ANGULAR50であり、y<(nCbH/4)である場合、wは6に設定されてよい。
- そうでない場合、仮に、predModeIntraがINTRA_ANGULAR50であり、(nCbH/4)<=y<(nCbH/2)である場合、wは5に設定されてよい。
- そうでない場合、仮に、predModeIntraがINTRA_ANGULAR50であり、(nCbH/2)<=y<(3*nCbH/4)である場合、wは4に設定されてよい。
- そうでない場合、仮に、predModeIntraがINTRA_ANGULAR50であり、(3*nCbH/4)<=y<nCbHである場合、wは3に設定されてよい。
- そうでない場合、仮に、predModeIntra is INTRA_ANGULAR18であり、x<(nCbW/4)である場合、wは6に設定されてよい。
- そうでない場合、仮に、predModeIntra is INTRA_ANGULAR18であり、(nCbW/4)<=x<(nCbW/2)である場合、wは5に設定されてよい。
- そうでない場合、仮に、predModeIntra is INTRA_ANGULAR18であり、(nCbW/2)<=x<(3*nCbW/4)である場合、wは4に設定されてよい。
- そうでない場合、仮に、predModeIntra is INTRA_ANGULAR18 and (3*nCbW/4)<=x<nCbWである場合、wは3に設定されてよい。
次の表2は、本発明の一実施例に係る多重仮定予測関連シンタックス構造を例示する。
表2で、mh_intra_flagは、多重仮定予測を使用するか否かを示すフラグである。本発明の一実施例によれば、多重仮定予測は、多重仮定予測のためのあらかじめ定義された特定条件(本明細書では説明の便宜のためにmh_conditionsと称する。)を満たす場合にのみ適用されてよい。mh_conditionsを満たさない場合、エンコーダ/デコーダは、mh_intra_flagをパーシングせず、0と推論(infer)することができる。例えば、mh_conditionsは、ブロックサイズに関する条件を含むことができる。また、mh_conditionsは、あらかじめ定義された特定モードを用いるか否かに関する条件を含むことができる。例えば、マージモードが適用されるか否かを示すフラグであるmerge_flagが1であり、サブブロックマージモードが適用されるか否かを示すフラグであるsubblock_merge_flagが0である場合にmh_intra_flagをパーシングすることができる。言い換えると、エンコーダ/デコーダは、現在ブロックにマージモードが適用され、サブブロックマージモードが適用されない場合、多重仮定予測を考慮(又は、適用)することができる。
また、本発明の一実施例によれば、エンコーダは、多重仮定予測におけるモードを決定するために候補モードを複数のリストに分けて構成し、どのリストを用いるかをデコーダにシグナリングすることができる。表2を参照すると、mh_intra_luma_mpm_flagが、複数のリストのうちどのリストを用いるかを示すフラグであってよい。仮にmh_intra_luma_mpm_flagが存在しない場合は、1と推論できる(又は、見なすことができる)。また、本発明の一実施例として、前記複数のリストは、MPMリストとnon-MPMリストであってよい。
また、一実施例として、エンコーダは、前記複数のリストのうちのリストでどのインデックスの候補を用いるかを示すインデックス(又は、インデックス情報)をデコーダにシグナリングすることができる。表2を参照すると、mh_intra_luma_mpm_idxが上述のインデックスであってよい。また、一実施例として、インデックスは、特定リストが選択された場合にのみシグナリングされてよい。デコーダにmh_intra_luma_mpm_flagで特定リストが決定された場合にのみmh_intra_luma_mpm_idxをパーシングすることができる。
本発明の一実施例によれば、図26で説明した一実施例のように、インター予測で生成した予測とイントラ予測で生成した予測に基づいて多重仮定予測を行うことができる。一例として、エンコーダ/デコーダは、インター予測を用いるとシグナリングされた場合にのみ多重仮定予測を行うことができる。又は、エンコーダ/デコーダは、マージモードのようなインター予測の特定モードを用いるとシグナリングされた場合にのみ、多重仮定予測を行うことができる。この場合、インター予測に対するシグナリングは別に要求されなくてもよい。また、一実施例として、エンコーダ/デコーダは、イントラ予測で予測を生成するとき、候補モードは総4個であってよい。例えば、総4個の候補モードのうち、それぞれ3個、1個の候補モードを用いて、第1リスト、第2リストを構成できる。この時、1つの予測モードを含む第2リストが選択された場合、エンコーダはインデックスをデコーダにシグナリングしなくてもよい。また、第1リストが選択された場合、特定候補を指示するインデックスをデコーダにシグナリングすることができる。この場合、第1リストに含まれた候補は3個であるから、可変長さコーディング(variable length coding)方式で1ビット又は2ビットでシグナリングを行うことができる。
次の表3は、本発明の一実施例に係る多重仮定予測関連シンタックス構造を例示する。
表3において、上の表2で説明したように、複数のリストのうちとのリストを用いるかを示すシグナリングが存在できるが、表2及び表3においてmh_intra_luma_mpm_flagがそのようなシンタックス要素であってよい。これと関連して前述した表2と重複するシンタックス要素は、説明を省略する。
本発明の一実施例によれば、どのリストを用いるかを示すシグナリングは、特定の場合にのみ明示的にシグナリングされてよい。仮に、明示的にシグナリングされない場合、エンコーダ/デコーダは、既に設定された方法によってシンタックス要素の値を推論することができる。表3を参照すると、mh_mpm_infer_conditionの条件を満たす場合、明示的シグナリングが存在しなく、mh_mpm_infer_conditionの条件を満たさない場合、明示的シグナリングが存在してよい。また、mh_mpm_infer_condition条件を満たす場合、mh_intra_luma_mpm_flagが存在しなく、その場合、1と推論されてよい。すなわち、エンコーダ/デコーダは、この場合、MPMリストを用いると推論できる。
次の表4は、本発明の一実施例に係る多重仮定予測関連シンタックス構造を例示する。
上に表2及び表3で説明したように、複数のリストのうちどのリストを用いるかを示すシグナリングが存在でき、あらかじめ定義された条件を満たす場合、エンコーダ/デコーダはその値を推論することができる。これと関連して前述した表2及び表3と重複するシンタックス要素は、説明を省略する。
本発明の一実施例によれば、複数のリストのうちどのリストを用いるかを示すシグナリング(又は、シンタックス要素、パラメータ)値を推論する条件は、現在ブロックサイズに基づいて決定されてよい。例えば、エンコーダ/デコーダは、現在ブロックの幅及び高さに基づいて決定されてよい。具体的に、エンコーダ/デコーダは、現在ブロックの幅及び高さのうち、大きいものが小さなもののn倍よりも大きい場合にシグナリング値を推論することができる。例えば、nは2、3、4などの自然数値に設定されてよい。表4を参照すると、複数のリストのうちどのリストを用いるかを示すシグナリング値を推論する条件は、現在ブロックの幅及び高さのうち、大きいものが小さいものの2倍よりも大きい条件であってよい。仮に、現在ブロックの幅、高さをそれぞれcbWidth、cbHeightとすれば、Abs(Log2(cbWidth/cbHeight))値は、cbWidthとcbHeightとが同一である時に0、2倍差である時に1となる。したがって、cbWidthとcbHeightの差が2倍よりも大きい場合、Abs(Log2(cbWidth/cbHeight))値は1よりも大きくなる(すなわち、2以上の値を有することができる)。
図27は、本発明の一実施例に係る多重仮定予測モード決定方法を示す図である。上の表2~表4で説明した通り、多重仮定予測に用いられる予測モードの決定は、複数のリストに基づいて行われてよい。一例として、前記予測モードは、イントラ予測に基づく予測を生成するイントラモードを示すことができる。また、前記複数のリストは、第1リスト及び第2リストの2個のリストを含むことができる。図27を参照すると、list1_flagから、第1リストを用いるか否かを判断することができる。一実施例において、第1リストに属し得る候補は複数であり、第2リストに属し得る候補は1個であってよい。
仮に、list1_flagが推論される場合、エンコーダ/デコーダは、第1リストを用いる旨とその値を推論できる(S2701)。この場合、第1リストにおいてどの候補を用いるかを指示するインデックスであるlist1_indexをパーシングすることができる(S2704)。また、仮にlist1_flagが推論されない場合(S2701)、エンコーダ/デコーダはlist1_flagをパーシングすることができる(S2702)。エンコーダ/デコーダは、仮にlist1_flagが1である場合、list1_indexをパーシングでき、list1_flagが1でない場合、インデックスをパーシングしなくてもよい。また、list1_flagが1である場合、インデックスに基づいて第1リストの候補モードのうち、実際に使用するモードを決定することができる(S2703)。また、エンコーダ/デコーダは、list1_flagが1でない場合、インデックス無しで、第2リストの候補モードを実際に使用するモードと決定することができる。すなわち、第1リストではフラグ及びインデックスに基づいてモードが決定され、第2リストではフラグに基づいてモードが決定されてよい。
図28は、本発明の一実施例に係る多重仮定予測モード決定方法を示す図である。本発明の一実施例によれば、リスト内の候補モードを決定するインデックスを可変長コードする場合、コーディング効率を上げるために、候補リストに含まれるモード順序を決定する方法が適用されてよい。例えば、第1リストに含まれるモード順序を決定する方法が存在してよい。このとき、エンコーダ/デコーダは、モード順序を決定するために、現在ブロック周辺のモードを参照することができる。また、第2リストは、現在ブロック周辺のモードを参照せずに決定することができる。例えば、エンコーダ/デコーダは、現在ブロック周辺のモードを参照して第1リストを生成し、第1リストに含まれていないモードを第2リストに含めることができる。一実施例において、第1リストはMPMモードであり、第2リストはnon-MPMモードであってよい。また、全候補モードは4個であり、第1リストに3個、第2リストに1個のモードが含まれてよい。
図28を参照すると、第1リストが用いられるか否かを示すシンタックス要素list1_flagが存在してよい。仮に、第1リストが用いられる場合、エンコーダ/デコーダは第1リストを生成し(S2801、S2802)、第1リストから特定モードを選択することができる。この時、第1リスト生成と第1リスト使用の有無の確認は、任意の順序で行われてよい。一例として、第1リストが用いられる状況で、第1リスト使用の有無の確認前又は後に、第1リストが生成されてよい。また、エンコーダ/デコーダは、第1リストが用いられる場合、第2リストを生成する過程を行わなくてもよい。
仮に、第1リストが用いられない場合、エンコーダ/デコーダは、第2リストを生成し(S2803)、第2リストから特定モードを選択することができる。この時、エンコーダ/デコーダは、第2リストを生成するために第1リストを生成することができる。そして、エンコーダ/デコーダは、候補モードのうち、第1リストに含まれない候補を第2リストに含めることができる。また、本発明の一実施例によれば、第1リスト生成方法は、第1リスト使用の有無(list1_flag値)、第1リスト使用の有無、推論の有無などに関係なく同一であってよい。この時、リストシグナリング及びモードシグナリングには、上の表2~表4、図27で前述した方法が適用されてよい。
以下では、上の図27~図28で説明した多重仮定予測に用いられる予測モード決定のための複数のリスト構成(又は、生成)方法をさらに説明する。一例として、前述したように、前記複数のリストは、2個のリストで構成されてよい。すなわち、前記複数のリストは、第1リストと第2リストを含むことができる。また、前記複数のリストは、多重仮定予測過程で用いられてよい。
本発明の一実施例によれば、エンコーダ/デコーダは、現在ブロック周辺のモードを参照して複数のリストを生成することができる。また、エンコーダ/デコーダは、前記リストから選択されたモードを用いてイントラ予測を行い、前記イントラ予測によって生成された予測サンプル(又は、予測ブロック)をインター予測された予測サンプルと結合して、多重仮定予測ブロックを生成することができる。本明細書において、多重仮定予測によって生成された最終予測サンプル(又は、予測ブロック)を多重仮定予測ブロックと呼ぶが、本発明がこれに制限されるものではない。例えば、多重仮定予測ブロックは、予測ブロック、最終予測ブロック、多重予測ブロック、組合せ予測ブロック、インター-イントラ加重予測ブロック、組み合わせられたインター-イントラ予測ブロック、組み合わせられたインター-イントラ加重予測ブロックなどと呼ぶことができる。
一実施例として、前記リストに含み得るモード(候補モード)は、イントラ予測方法のプレーナモード、DCモード、垂直モード及び/又は水平モードの少なくとも一つに設定されてよい。このとき、垂直モードは、前述した図6でインデックス(又は、モード番号)50のモードであり、水平モードは、図6でインデックス18のモードであってよい。また、プレーナモードとDCモードはそれぞれ、インデックス0、1であってよい。
本発明の一実施例によれば、現在ブロックの周辺ブロックの予測モードを参照して候補モードリストを生成することができる。また、候補モードリストは、本明細書においてcandModeListと呼ぶことができる。一例として、候補モードリストは、以上の実施例で説明した第1リストであってよい。また、一実施例として、現在ブロックの周辺ブロックのモードはcandIntraPredModeXと表現されてよい。すなわち、candIntraPredModeXは、周辺ブロックのモードを指示する変数を表す。ここで、Xは、A、Bなどの現在ブロック周辺の特定位置を指示する変数を表す。
一実施例として、エンコーダ/デコーダは、複数のcandIntraPredModeX間の一致の有無に基づいて候補モードリストを生成することができる。例えば、candIntraPredModeXは2個の位置に対して存在でき、当該位置のモードはcandIntraPredModeA及びcandIntraPredModeBと表現されてよい。一例として、仮にcandIntraPredModeAとcandIntraPredModeBが同一である場合、候補モードリストはプレーナモードとDCモードを含むことができる。
一実施例として、candIntraPredModeAとcandIntraPredModeBが同一であり、その値がプレーナモード又はDCモードを示す場合、エンコーダ/デコーダは、candIntraPredModeA及びcandIntraPredModeBが示すモードを候補モードリストに追加することができる。また、エンコーダ/デコーダは、プレーナモードとDCモードのうち、candIntraPredModeAとcandIntraPredModeBが示していないモードを候補モードリストに追加することができる。また、エンコーダ/デコーダは、プレーナモード又はDCモードではなく既に設定されたモードを候補モードリストに追加することができる。一実施例として、この場合、プレーナモード、DCモード、前記既に設定された特定モードの候補モードリスト内順序が、既に設定されていてよい。例えば、プレーナ、DC、前記既に設定されたモード順序であってよい。すなわち、candModeList[0]=プレーナモード、candModeList[1]=DCモード、candModeList[2]=前記既に設定されたモードであってよい。また、前記既に設定されたモードは垂直モードであってよい。さらに他の実施例として、プレーナモード、DCモード、前記既に設定されたモードのうち、candIntraPredModeAとcandIntraPredModeBが示すモードが候補モードリストに最初に追加され、プレーナモード及びDCモードのうち、candIntraPredModeAとcandIntraPredModeBが示していないモードが次の候補として追加され、前記既に設定されたモードが続いて追加されてよい。
また、仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、その値がプレーナモード及びDCモードを示さない場合、エンコーダ/デコーダは、candIntraPredModeAとcandIntraPredModeBが示すモードを候補モードリストに追加することができる。また、プレーナモードとDCモードが候補モードリストに追加されてよい。また、この場合、candIntraPredModeAとcandIntraPredModeBが示すモードとプレーナモード、DCモードの候補モードリストにおける順序は既に設定されていてよい。また、既に設定された順序は、candIntraPredModeAとcandIntraPredModeBが示すモード、プレーナモード、DCモードの順序であってよい。すなわち、candModeList[0]=candIntraPredModeA、candModeList[1]=プレーナモード、candModeList[2]=DCモードであってよい。
また、仮にcandIntraPredModeA及びcandIntraPredModeBが互いに異なる場合、エンコーダ/デコーダは、candIntraPredModeAとcandIntraPredModeBを両方とも候補モードリストに追加することができる。また、candIntraPredModeA及びcandIntraPredModeBはあらかじめ定義された特定順序にしたがって候補モードリストに含まれてよい。例えば、candIntraPredModeA、candIntraPredModeBの順に候補モードリストに含まれてよい。また、候補モード間の既に設定された順序があってもよく、エンコーダ/デコーダは、前記既に設定された順序によるモードのうち、candIntraPredModeAとcandIntraPredModeB以外のモードを候補モードリストに追加することができる。また、前記candIntraPredModeA及びcandIntraPredModeB以外のモードは、候補モードリストにおいてcandIntraPredModeAとcandIntraPredModeBの以降に追加されてよい。また、前記既に設定された順序は、プレーナモード、DCモード、垂直モードであってよい。又は、前記既に設定された順序は、プレーナモード、DCモード、垂直モード、水平モードであってもよい。すなわち、candModeList[0]=candIntraPredModeA、candModeList[1]=candIntraPredModeBでよく、candModeList[2」は、プレーナモード、DCモード、垂直モードのうち、candIntraPredModeAでなく、candIntraPredModeBでないモードの中でも最も前にあるモードであってよい。
また、一実施例において、候補モードのうち、候補モードリストに含まれていないモードがcandIntraPredModeCと定義されてよい。一例として、candIntraPredModeCは第2リストに含まれてよい。また、前述した第1リストが使用されるか否かを示すシグナリングが、使用しない旨を示す場合、candIntraPredModeCを決めることができる。第1リストを使用する場合、エンコーダ/デコーダは、候補モードリストのうち、インデックスによってモードを決定し、第1リストを使用しない場合に第2リストのモードを用いることができる。
また、前述したように、候補モードリストを生成した後に、候補モードリストを修正する過程が追加されてよい。例えば、エンコーダ/デコーダは、現在ブロックサイズ条件によって前記修正する過程をさらに行っても行わなくてもよい。例えば、前記現在ブロックサイズ条件は、現在ブロックの幅と高さに基づいて決定されてよい。例えば、現在ブロックの幅と高さのうち、大きい一方が他方のn倍よりも大きい場合、前記修正する過程をさらに行うことができる。例えば、前記nは2と定義されてよい。
また、一実施例において、前記修正する過程は、候補モードリストにいずれかのモードが含まれたとき、そのモードを他のモードに変える過程であってよい。例えば、候補モードリストに垂直モードが含まれた場合、エンコーダ/デコーダは、垂直モードの代わりに水平モードを候補モードリストに挿入することができる。又は、候補モードリストに垂直モードが含まれたとき、エンコーダ/デコーダは垂直モードの代わりに前記candIntraPredModeCを候補モードリストに挿入することができる。又は、前述した候補モードリスト生成時に、プレーナモードとDCモードは常に候補モードリストに含まれ得るので、この場合、candIntraPredModeCは水平モードであってよい。また、このような修正する過程を用いることは、現在ブロックの高さが幅のn倍よりも大きい時であってよい。例えば、nは2と定義されてよい。これは、高さが幅よりも大きい場合、ブロックの下側は、イントラ予測の参照サンプルから遠いため垂直モードの正確度が低いことがあるためである。又は、このような修正する過程を用いることは、第1リストを用いると推論される場合であってよい。
また、本発明の実施例によれば、前記候補リスト修正過程の他の例として、エンコーダ/デコーダは、候補モードリストに水平モードが含まれた場合、水平モードの代わりに垂直モードを候補モードリストに追加することができる。又は、候補モードリストに水平モードが含まれたとき、水平モードの代わりに前記candIntraPredModeCを候補モードリストに追加することができる。又は、前述した候補モードリスト生成時にプレーナモードとDCモードは常に候補モードリストに含まれてもよいので、この場合、candIntraPredModeCは垂直モードであってよい。また、このような修正する過程を用いることは、現在ブロックの幅が高さのn倍よりも大きい時であってよい。例えば、nは2と定義されてよい。これは、幅が高さよりも大きい場合、ブロック右側はイントラ予測の参照サンプルから遠いため、水平モードの正確度が低いことがあるためである。又は、このような修正する過程を用いることは、第1リストを用いると推論される場合であってよい。
以下、以上で説明したリスト設定方法の一例をさらに説明する。本明細書において、IntraPredModeYは、多重仮定予測時にイントラ予測に用いられるモードを示す。また、IntraPredModeYは、輝度コンポーネントのモードを示すことができる。一実施例として、多重仮定予測において色差コンポーネントのイントラ予測モードは、輝度コンポーネントから誘導されてよい。また、本明細書において、mh_intra_luma_mpm_flagは、複数のリストのうちどのリストを用いるかを示す変数(又は、シンタックス要素)を表す。例えば、mh_intra_luma_mpm_flagは、表2~表4のmh_intra_luma_mpm_flag、図27及び図28のlist1_flagであってよい。また、本明細書において、mh_intra_luma_mpm_idxは、リストにおいてどの候補を用いるかを示すインデックスを表す。例えば、mh_intra_luma_mpm_idxは、表2~表4のmh_intra_luma_mpm_idx、図27のlist1_indexであってよい。また、本明細書において、xCb、yCbは、現在ブロックの左上端(top-left)のx、y座標であってよい。また、cbWidthとcbHeightは、現在ブロックの幅と高さであってよい。
図29は、本発明の一実施例に係る多重仮定予測において参照する周辺位置を示す図である。図29を参照すると、前述したように、エンコーダ/デコーダは、多重仮定予測の候補リストを作る過程で周辺位置を参照することができる。例えば、前述したcandIntraPredModeXが必要であり得る。このとき、参照する現在ブロック周辺のAとBの位置は、図29に示したNbAとNbBであってよい。すなわち、現在ブロックの左上端サンプルに隣接した左側及び上側位置であってよい。仮に、現在ブロックの左上端位置が、図18に示したようにCbであり、その座標が(xCb,yCb)のとき、NbAは(xNbA,yNbA)=(xCb-1,yCb)であり、NbBは(xNbB,yNbB)=(xCb,yCb-1)でよい。
図30は、本発明の一実施例に係る周辺のモードを参照する方法を示す図である。図30を参照すると、前述したように、エンコーダ/デコーダは、多重仮定予測の候補リストを作る過程で周辺位置を参照することができる。また、周辺のモードをそのまま使用したり、周辺のモードに基づくモードを用いて、候補モードリストを生成することができる。一例として、周辺位置を参照して生成されたモードはcandIntraPredModeXであってよい。一実施例として、周辺位置が使用不可である場合、candIntraPredModeXは既に設定されたモードであってよい。使用不可である場合は、周辺位置がインター予測を使用した場合、定められたエンコーディング/デコーディング順序においてモード決定されていない場合などを含むことができる。又は、周辺位置が多重仮定予測を使用しない場合、candIntraPredModeXは既に設定されたモードであってよい。又は、周辺位置が、現在ブロックの属したCTUを越えて上にある場合、candIntraPredModeXは既に設定されたモードであってよい。他の例として、周辺位置が現在ブロックの属したCTUから外れる場合、candIntraPredModeXは、既に設定されたモードであってよい。また、一実施例として、前記既に設定されたモードはDCモードであってもよい。さらに他の実施例として、前記既に設定されたモードはプレーナモードであってもよい。
本発明の一実施例によれば、仮に周辺位置のモードがスレショルド角度を超えるか否か、或いは周辺位置のモードのインデックスがスレショルドを超えるか否かによってcandIntraPredModeXが設定されてよい。例えば、周辺位置のモードのインデックスが特定方向性モードインデックスよりも大きい場合、エンコーダ/デコーダは、candIntraPredModeXを垂直モードインデックスに設定することができる。また、エンコーダ/デコーダは、周辺位置のモードのインデックスが特定方向性モードインデックス以下であり、方向性モードである場合、エンコーダ/デコーダは、candIntraPredModeXを水平モードインデックスに設定することができる。例えば、特定方向性モードインデックスは、前述した図6においてモード34であってよい。また、仮に周辺位置のモードがプレーナモード又はDCモードである場合、candIntraPredModeXはプレーナモード又はDCモードに設定されてよい。
図30を参照すると、mh_intra_flagは多重仮定予測を用いるのか(用いたか)否かを示すシンタックス要素(又は、変数、パラメータ)であってよい。また、周辺ブロックで使用したイントラ予測モードがXであってよい。また、現在ブロックが多重仮定予測を用いることができ、周辺ブロックのモードに基づく候補イントラ予測モードを用いて候補リストを生成できるが、周辺が多重仮定予測を使用しなかったため、使用された周辺ブロックのイントラ予測モードに関係なく、又は周辺ブロックがイントラ予測を使用したか否かに関係なく、エンコーダ/デコーダは候補イントラ予測モードを、既に設定されたモードであるDCモードに設定できる。
以上で説明した周辺モード参照方法の一例を、以下にさらに記述する。
本発明の一実施例によれば、周辺ブロックのイントラ予測モードcandIntraPredModeX(Xは、A又はB)は、次のような方法で誘導できる。
1.隣ブロック可用性確認プロセスで指定されたブロックに対する可用性誘導プロセスが呼び出され、前記可用性誘導プロセスは、位置(xCurr,yCurr)を(xCb,yCb)に設定し、入力(xNbX、yNbX)を隣接する 隣位置(xNbY,yNbY)に設定でき、出力は、可用性変数availableXに割り当てることができる。
2.候補イントラ予測モードcandIntraPredModeXは次の方法で誘導されてよい:
A.仮に、一つ以上の次の条件が真である場合、candIntraPredModeXはINTRA_DCモードに設定されてよい。
a)The variable availableXがFALSEである場合。
b)mh_intra_flag[xNbX][yNbX]が1でない場合。
c)XがBであり、yCb-1が((yCb>>CtbLog2SizeY)<<CtbLog2SizeY)よりも小さい場合。
B.そうでない場合、仮にIntraPredModeY[xNbX][yNbX]>INTRA_ANGULAR34のとき、candIntraPredModeXはINTRA_ANGULAR50に設定されてよい。
C.そうでない場合、仮にIntraPredModeY[xNbX][yNbX]<=INTRA_ANGULAR34であり、IntraPredModeY[xNbX][yNbX]>INTRA_DCのとき、candIntraPredModeXはINTRA_ANGULAR18に設定されてよい。
D.そうでない場合、candIntraPredModeX is set equal to IntraPredModeY[xNbX][yNbX]に設定されてよい。
前述したように、以上で説明したリスト設定方法において、candIntraPredModeXは前記周辺モード参照方法によって決定されてよい。
図31は、本発明の一実施例に係る候補リスト生成方法を示す図である。上の表2~表4で説明した第1リスト及び第2リスト生成方法によれば、エンコーダ/デコーダは、現在ブロック周辺のモードを参照して第1リストを生成し、候補モードのうち、第1リストに含まれていないモードを用いて第2リストを生成することができる。ピクチャ内で空間的な類似性があるので、周辺のモードを参照したものは、優先順位が高くてよい。すなわち、第1リストが第2リストに比べて優先順位が高くてよい。しかし、表2~表4で説明した第1リスト及び第2リストシグナリング方法によれば、リストを決定するシグナリングが推論されない場合、エンコーダ/デコーダは、第1リストのモードを用いるためにフラグ及びインデックスを用いてシグナリングし、第2リストのモードを用いるためにフラグだけを用いることができる。すなわち、エンコーダ/デコーダは第2リストのシグナリングに相対的に少ないビットを用いることができる。しかし、優先順位が高いリストのモードのシグナリングに相対的に多いビットを用いられることは、コーディング効率の側面でよくないことがある。したがって、本発明の一実施例によれば、優先順位が高いリスト及びモードに相対的に少ないビットのシグナリングを用いる方法を提案する。
すなわち、本発明の一実施例によれば、優先順位が相対的に高いリストだけを使用可能か否かによって候補リスト生成方法が個別に定義されてよい。第1リストだけを使用可能か否かは、使用するリストを示すシグナリングが推論されるか否かを指示することができる。例えば、候補モードを用いて既に設定された方法によって生成する第2リストが存在すると仮定すれば、エンコーダ/デコーダは、第3リストを第1リストと第2リストに分けて挿入することができる。例えば、既に設定された方法によって生成する第3リスト及び第3リストの生成方法は、前述した候補モードリスト及びその生成方法が適用されてよい。仮に、使用するリストを示すシグナリングが推論される場合、第1リストだけを使用することができ、その場合、エンコーダ/デコーダは、第3リストの前部から第1リストに満たすことができる。また、仮に、使用するリストを示すシグナリングが推論されない場合、第1リスト又は第2リストが用いられてよく、その場合、第3リストの前部から第2リストに満たし、残りを第1リストに満たすことができる。この時、エンコーダ/デコーダは、第1リストを満たす時にも第3リストの順に満たすことができる。すなわち、現在ブロック周辺のモードを参照してcandIntraPredModeXを候補リストに入れることができるが、candIntraPredModeXを、リストを示すシグナリングが推論される場合に第1リストに入れ、推論されない場合に第2リストに追加することができる。
一実施例において、第2リストのサイズは1でよく、その場合、candIntraPredModeAを、リストを示すシグナリングが推論される場合、エンコーダ/デコーダは第1リストに追加し、推論されない場合、第2リストに追加することができる。candIntraPredModeAは、前記第3リストの先頭のモードであるリスト3[0]であってよい。したがって、本発明では、場合によって、第1リスト及び第2リストの両方に、周辺モードに基づくモードであるcandIntraPredModeAが追加されてもよい。一方、表2~表4で説明した方法では、candIntraPredModeAは第1リストにのみ入れることができた。すなわち、本発明では、第1リスト生成方法が、使用するリストを示すシグナリングが推論されるか否かによって個別に設定されてよい。
図31を参照すると、候補モードは、多重仮定予測のイントラ予測を生成するために使用できる候補であってよい。すなわち、使用するリストを示すシグナリングであるlist1_flagが推論されるか否かによって候補リスト生成方法が異なってよい(S3101、S3102)。仮に、推論される場合には、第1リストを用いると推論でき、第1リストだけを使用することができるので、エンコーダ/デコーダは、第3リストの最上位にあるものから第1リストに追加することができる(S3103)。エンコーダ/デコーダは、第3リストを生成するとき、周辺のモードに基づくモードを最上位に追加することができる。また、仮に推論されない場合には、第1リスト及び第2リストの両方が用いられてよいので、エンコーダ/デコーダは、第3リストの最上位にあるものから、シグナリングの少ない第2リストに追加することができる(S3104)。そして、第1リストが必要な場合、例えば、第1リストを用いるとシグナリングされた場合、エンコーダ/デコーダは、第3リストから第2リストに含まれた候補を除いて第1リストに追加することができる(S3105)。本発明では説明の便宜のために第3リストを生成する場合を中心に説明したが、これに制限されず、臨時的に候補を分類し、これに基づいて第1リスト、第2リストを生成することができる。
本発明の一実施例によれば、以下に説明する実施例によって候補リストを生成する方法と、図27~図28で説明した候補リストを生成する方法を、場合によって適応的に使用することができる。例えば、エンコーダ/デコーダは、どのリストを使用するかを示すシグナリングが推論されるか否かによって、2つの候補リストを作る方法のいずれか一方を選択できる。また、これは、多重仮定予測の場合であってよい。また、以下の第1リストは、3個のモードが含まれてよく、第2リストは1個のモードが含まれてよい。また、上の図27~図28で説明したように、エンコーダ/デコーダは、第1リストのモードはフラグ及びインデックスでシグナリングし、第2リストのモードはフラグでシグナリングすることができる。
一実施例として、candIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAがプレーナモード又はDCモードであるとき、List2[0]=プレーナモード、List1[0]=DCモード、List1[1]=垂直モード、List1[2]=水平モードと決定されてよい。さらに他の実施例として、candIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAがプレーナモード又はDCモードであるとき、List2[0]=candIntraPredModeA、List1[0]=!candIntraPredModeA、List1[1]=垂直モード、List1[2]=水平モードと決定されてよい。
また、一実施例として、candIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが方向性モードであるとき、List2[0]=candIntraPredModeA、List1[0]=プレーナモード、List1[1]=DCモード、List1[2]=垂直モードと決定されてよい。また、一実施例として、candIntraPredModeAとcandIntraPredModeBとが異なる場合、List2[0]=candIntraPredModeA、List1[0]=candIntraPredModeBであってよい。List1[1]とList1[2]はプレーナモード、DCモード、垂直モード、水平モードのうち、candIntraPredModeAとcandIntraPredModeBでないものから追加されてよい。
図32は、本発明の一実施例に係る候補リスト生成方法を示す図である。以上の実施例では、複数のリストに基づいてモードを決定する方法を説明した。図32を参照すると、本発明の一実施例によれば、複数のリストではなく単一のリストに基づいてモードが決定されてもよい。具体的に、図32に示すように、多重仮定予測の候補モードを全て含む一つの候補リストが生成されてよい。次の表5は、本発明の一実施例に係る多重仮定予測関連シンタックス構造を例示する。
表5を参照すると、候補リストが一つであるので、リストを選択するシグナリングは存在しなく、候補リストのモードのうちどのモードを用いるかを示すインデックスシグナリングが存在してよい。したがって、デコーダは、多重仮定予測使用の有無を示すmh_intra_flagが1である場合、候補インデックスであるmh_intra_luma_idxをパーシングできる。本発明の一実施例によれば、多重仮定予測の候補リスト生成方法は、既存イントラ予測においてMPMリスト生成方法に基づくことができる。又は、一実施例をよれば、多重仮定予測の候補リストは、前述した図28で説明した第1リスト及び第2リスト生成方法において第1リスト及び第2リストの順に結合した形態のリストで構成されてもよい。
すなわち、多重仮定予測の候補リストを候補モードリストとすれば、本実施例において候補モードリストのサイズは4でよい。仮に、candIntraPredModeAとcandIntraPredModeBが同一であり、プレーナモード又はDCモードである場合、候補モードリストは、既に設定された順序によって決定されてよい。例えば、candModeList[0]=プレーナモード、candModeList[1]=DCモード、candModeList[2]=垂直mode、candModeList[3]=水平モードであってよい。さらに他の例として、仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、プレーナモード又はDCモードである場合、candModeList[0]=candIntraPredModeA、candModeList[1]=!candIntraPredModeA、candModeList[2]=垂直モード、candModeList[3]=水平モードと決定されてよい。
又は、仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、方向性モードである場合、candModeList[0]=candIntraPredModeA、candModeList[1]=プレーナモード、candModeList[2]=DCモード、candModeList[3]=candIntraPredModeA、及びプレーナモードとDCモード以外のモードと決定されてよい。仮にcandIntraPredModeAとcandIntraPredModeBとが異なる場合、candModeList[0]=candIntraPredModeA、candModeList[1]=candIntraPredModeBでよい。また、candModeList[2]とcandModeList[3」は、候補モードの既に設定された順序によってcandIntraPredModeAとcandIntraPredModeB以外のモードを順次に追加することができる。前記既に設定された順序は、プレーナモード、DCモード、垂直モード、水平モードと決定されてよい。
本発明の一実施例によれば、ブロックサイズ条件によって候補リストが変わってよい。仮に、ブロック幅と高さのうち、相対的に大きい一方が他方のn倍よりも大きい場合に、候補リストはより短くてよい。例えば、幅が高さのn倍よりも大きい場合、エンコーダ/デコーダは、図31で説明した候補リストにおいて水平モードを候補リストから除き、その次にあるモードを前に移して満たすことができる。また、高さが幅のn倍よりも大きい場合、エンコーダ/デコーダは、図32で説明した候補リストにおいて垂直モードを候補リストから除き、その次にあるモードを前に移して満たすことができる。したがって、幅が高さのn倍よりも大きい場合には、候補リストサイズが3であってよい。また、幅が高さのn倍よりも大きい場合には、そうでない場合に比べて候補リストのサイズが小さいか等しくてよい。
一実施例として、図32で説明した実施例の候補インデックスは、可変長コードされてよい。これは、使用される確率が相対的に高いモードをリストの前の方に追加することによってシグナリング効率を上げることができる。他の実施例として、図32で説明した実施例における候補インデックスは、固定長コードされてよい。多重仮定予測で使用するモード個数は、2の指数乗の個数であってよい。例えば、前述したように、4個のイントラ予測モード中で使用することができる。このような場合、固定長コーディングしても割り当てられない値が発生せず、シグナリングにおいて不要な部分が生じなくて済むわけである。また、固定長コードされる場合、リスト構成される場合の数は1個でよい。いかなるインデックスをシグナリングしてもビット数が同じであるわけである。
一実施例をよれば、候補インデックスが、場合によって可変長コードされても固定長コードされてもよい。例えば、上の実施例のように、場合によって候補リストサイズが変わってよい。一実施例として、候補リストサイズによって候補インデックスが可変長コードされたり或いは固定長コードされてよい。例えば、候補リストサイズが2の指数乗である場合、固定長コードされ、2の指数乗でない場合、可変長コードされてよい。すなわち、上の実施例によれば、ブロックサイズ条件によってコーディング方法が変わってよい。
本発明の一実施例によれば、多重仮定予測を用いるとき、DCモードを使用する場合、ブロック全体に対して複数の予測間の加重値が同一であり得るので、予測ブロックの加重値を調節することと同一/類似の結果を招くことができる。したがって、多重仮定予測においてDCモードを除くことができる。一実施例として、エンコーダ/デコーダは、多重仮定予測においてプレーナモード、垂直モード、水平モードのいずれかのみを使用することができる。このような場合、エンコーダ/デコーダは、図32に示したように、一つのリストを用いて多重仮定予測をシグナリングすることができる。また、エンコーダ/デコーダは、インデックスシグナリングに可変長コーディングを用いることができる。一実施例として、固定された順序でリストを生成することができる。例えば、プレーナモード、垂直モード、水平モードの順でよい。
さらに他の実施例として、エンコーダ/デコーダは、現在ブロック周辺のモードを参照してリストを生成することができる。例えば、仮にcandIntraPredModeAとcandIntraPredModeBが同一である場合、candModeList[0]=candIntraPredModeAであってよい。仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAがプレーナモードである場合、candModeList[1]とcandModeList[2」は既に設定された順序にしたがって設定できる。仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAがプレーナモードでない場合、candModeList[1]=プレーナモード、candModeList[2]=candIntraPredModeAでなく、プレーナモード以外のモードであってよい。仮にcandIntraPredModeAとcandIntraPredModeBとが異なる場合、candModeList[0]=candIntraPredModeA、candModeList[1]=candIntraPredModeB、candModeList[2]=candIntraPredModeAでなく、candIntraPredModeBでないモードでよい。
他の実施例として、エンコーダ/デコーダは、多重仮定予測において3つのモードのいずれかのみを使用することができる。前記3つのモードは、プレーナモードとDCモードを含むことができる。また、前記3つのモードは、垂直モードと水平モードのいずれかを、条件によって含むことができる。前記条件は、ブロックサイズに関連した条件であってよい。例えば、ブロックの幅と高さのうちどれが大きいかによって、水平モードを含むか垂直モードを含むかが決定できる。例えば、ブロックの幅が高さよりも大きい場合、垂直モードを含むことができる。ブロックの高さが幅よりも大きい場合、水平モードを含むことができる。ブロックの高さと幅が等しい場合、垂直モード又は水平モードのうち、あらかじめ定義された特定モードを含むことができる。
また、一実施例において、エンコーダ/デコーダは、固定された順序でリストを生成することができる。例えば、プレーナモード、DCモード、垂直又は水平モードの順序と定義されてよい。また、他の実施例として、現在ブロック周辺のモードを参照してリストを生成することができる。例えば、仮にcandIntraPredModeAとcandIntraPredModeBが同一である場合、candModeList[0]=candIntraPredModeAであってよい。仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが方向性モードでない場合、エンコーダ/デコーダはcandModeList[1]とcandModeList[2]を既に設定された順序にしたがって設定することができる。仮にcandIntraPredModeAとcandIntraPredModeBが同一であり、candIntraPredModeAが方向性モードである場合、candModeList[1]=プレーナモード、candModeList[2]=DCモードであってよい。仮にcandIntraPredModeAとcandIntraPredModeBとが異なる場合、candModeList[0]=candIntraPredModeA、candModeList[1]=candIntraPredModeB、candModeList[2]=candIntraPredModeAでなく、candIntraPredModeB以外のモードでよい。
本発明の他の実施例によれば、多重仮定予測において2つのモードのいずれかのみを使用することができる。前記2つのモードは、プレーナモードを含むことができる。また、前記2つのモードは、垂直モードと水平モードのいずれかを、条件によって含むことができる。前記条件は、ブロックサイズと関連した条件であってよい。例えば、エンコーダ/デコーダは、ブロックの幅と高さのうちどれか大きいかによって、水平モードを含むか垂直モードを含むが決定できる。例えば、ブロックの幅が高さよりも大きい場合、垂直モードを含むことができる。ブロックの高さが幅よりも大きい場合、水平モードを含むことができる。ブロックの高さと幅が等しい場合、垂直モード又は水平モードのうち、約束されているモードを含むことができる。このような場合、多重仮定予測においてどのモードを使用するかを示すためのフラグがシグナリングされてよい。
一実施例をよれば、エンコーダ/デコーダは、ブロックサイズによって特定モードを除外することができる。例えば、ブロックサイズが小さい場合、特定モードを除外することができる。例えば、ブロックサイズが小さい場合、多重仮定予測においてプレーナモードだけを使用することができる。仮に、特定モードが除外されると、モードシグナリングを省略したり減らしてシグナリングすることができる。
本発明の他の実施例によれば、エンコーダ/デコーダは、多重仮定予測においてイントラ予測されたサンプルを生成するために1つのモード(すなわち、イントラ予測モード)だけを使用することができる。一実施例として、前記1つのモードはプレーナモードと定義されてよい。前述したように、多重仮定予測は、インター予測されたサンプル及びイントラ予測されたサンプルを用いることができる。インター予測されたサンプルを生成すると同時に最適の予測モードを決定してイントラ予測サンプルを生成すると、予測の正確度は上がるが、エンコーディング複雑度が高くなってシグナリングビットが増加する問題につながり得る。したがって、多重仮定予測を行うとき、イントラ予測モードとして統計的に最も多く発生するプレーナモードだけを用いることによって、エンコーディング複雑度を改善し、シグナリングビットを節約し、これによって映像の圧縮性能を上げることができる。
さらに他の実施例として、前記1つのモードは、垂直モードと水平モードのうち、ブロックサイズに基づいて決定されてよい。例えば、ブロックの幅と高さのどれが大きいかによって、垂直モードと水平モードのいずれかと決定されてよい。例えば、ブロックの幅が高さよりも大きい場合、垂直モードと決定され、ブロックの高さが幅よりも大きい場合、水平モードと決定されてよい。仮にブロックの幅と高さが等しい場合、エンコーダ/デコーダは既に設定されたモードと決定されてよい。仮にブロックの幅と高さが等しい場合、エンコーダ/デコーダは、水平モード又は垂直モードのうち、既に設定されたモードと決定することができる。仮にブロックの幅と高さが等しい場合、エンコーダ/デコーダは、プレーナモード又はDCモードのうち、既に設定されたモードと決定できる。
また、本発明の実施例によれば、多重仮定予測で生成された予測をフリッピング(flipping)するフリッピングシグナリングが存在してよい。これによって、多重仮定予測において一つのモードが選択されても、フリッピングによって反対側の残差(residual)をなくす効果を有することができる。また、これによって、多重仮定予測で使用可能な候補モードを減らす効果を有することができる。より具体的に、例えば、前記実施例のうち、1つのモードだけを使用する場合にフリッピングを使用することができる。これによって、予測性能を高めることができる。前記フリッピングは、x軸に対するフリッピング、y軸に対するフリッピング、又はx、y軸両方に対するフリッピングを意味することができる。一実施例として、多重仮定予測で選択されたモードに基づいてフリッピング方向が決定されてよい。例えば、多重仮定予測で選択されたモードがプレーナモードである場合、エンコーダ/デコーダは、x、y軸両方に対するフリッピングであると決定できる。また、x、y軸両方に対してフリッピングすることは、ブロックサイズ又は形状によるものでよい。例えば、ブロックが正方形でない場合、エンコーダ/デコーダは、x、y軸両方に対してフリッピングしないと決定できる。例えば、多重仮定予測で選択されたモードが水平モードである場合、エンコーダ/デコーダはx軸に対するフリッピングであると決定できる。例えば、多重仮定予測で選択されたモードが垂直モードである場合、エンコーダ/デコーダは、y軸に対するフリッピングであると決定できる。また、多重仮定予測で選択されたモードがDCモードである場合、エンコーダ/デコーダは、フリッピングがないと決定し、明示的なシグナリング/パーシングを行わなくてもよい。
また、多重仮定予測においてDCモードは、照度補償(illumination compensation)と類似の効果を有することができる。したがって、本発明の一実施例によれば、多重仮定予測においてDCモードと照度補償方法のいずれか一方を使用すれば、他方を使用しなくてもよい。また、多重仮定予測は、GBi(generalized bi-prediction )と類似の効果を有することができる。例えば、多重仮定予測においてDCモードはGBiと類似の効果を有することができる。GBi予測は、ブロック単位、CU単位において両方向予測の2つの参照ブロック間の加重値を調節する技法であってよい。したがって、本発明の一実施例によれば、多重仮定予測(又は、多重仮定予測においてDCモード)とGBi予測方法のいずれか一方を使用すれば、他方を使用しなくてもよい。また、これは、多重仮定予測の予測のうち両方向予測である場合を含むものでよい。例えば、多重仮定予測の選択されたマージ候補が両方向予測である場合、GBi予測を使用しなくてもよい。これらの実施例において多重仮定予測とGBi予測間の関係は、多重仮定予測の特定モード、例えば、DCモードを用いるときに限ってもよい。又は、GBi予測関連シグナリングが多重仮定予測関連シグナリングよりも前に存在する場合、GBi予測を使用すれば、多重仮定予測又は多重仮定予測の特定モードを使用しなくて済む。本発明において、いずれかの方法を使用しないということは、前記いずれかの方法に対するシグナリングをせず、関連シンタックスをパーシングしないことを意味できる。
図33は、本発明の一実施例に係る多重仮定予測で参照する周辺位置を示す図である。前述したように、エンコーダ/デコーダは、多重仮定予測の候補リストを作る過程で周辺位置を参照することができる。例えば、前述したcandIntraPredModeXが用いられてよい。このとき、参照する現在ブロック周辺のAとBの位置は、図33に示したNbAとNbBであってよい。仮に、現在ブロックの左上端サンプルの位置が、図29に示したのと同様にCbであり、その座標が(xCb,yCb)のとき、NbAは(xNbA,yNbA)=(xCb-1,yCb+cbHeight-1)であり、NbBは(xNbB,yNbB)=(xCb+cbWidth-1,yCb-1)であってよい。ここで、cbWidthとcbHeightはそれぞれ、現在ブロックの幅と高さであってよい。また、多重仮定予測の候補リストを作る過程で周辺位置はイントラ予測のMPMリスト生成で参照する周辺位置と同一であってよい。
さらに他の実施例として、多重仮定予測の候補リストを作る過程で参照する周辺位置は、現在ブロックの左中央位置と上中央位置又はこれに近接した位置であってよい。例えば、NbAとNbBは、(xCb-1,yCb+cbHeight/2-1)、(xCb+cbWidth/2-1,yCb-1)であってよい。又は、NbAとNbBは、(xCb-1,yCb+cbHeight/2)、(xCb+cbWidth/2,yCb-1)であってよい。
図34は、本発明の一実施例に係る周辺のモードを参照する方法を示す図である。前述したように、多重仮定予測の候補リストを作る過程で周辺位置を参照できるが、図30の実施例では、周辺位置が多重仮定予測を使用しない場合、candIntraPredModeXを既に設定されたモードに設定した。これは、candIntraPredModeXを設定するとき、周辺位置のモードがそのままcandIntraPredModeXにならない場合があるわけであろう。したがって、本発明の一実施例によれば、周辺位置が多重仮定予測を使用しなかった場合でも、周辺位置が使用したモードが多重仮定予測に用いられるモードであれば、エンコーダ/デコーダは、candIntraPredModeXを周辺位置が使用したモードに設定できる。多重仮定予測に用いられるモードは、プレーナモード、DCモード、垂直モード、水平モードであってよい。
又は、周辺位置が多重仮定予測を使用しない場合でも、周辺位置が使用したモードが特定モードであれば、エンコーダ/デコーダは、candIntraPredModeXを周辺位置が使用したモードに設定できる。又は、周辺位置が多重仮定予測を使用しなかった場合でも、周辺位置が使用したモードが垂直モード或いは高さモードであれば、エンコーダ/デコーダは、candIntraPredModeXを周辺位置が使用したモードに設定できる。又は、周辺位置が現在ブロックの上側である場合、周辺位置が多重仮定予測を使用しなかった場合でも、周辺位置が使用したモードが垂直モードであれば、エンコーダ/デコーダは、candIntraPredModeXを周辺位置が使用したモードに設定できる。また、周辺位置が現在ブロックの左側であるとき、周辺位置が多重仮定予測を使用しなかった場合でも、周辺位置が使用したモードが水平モードであれば、エンコーダ/デコーダは、candIntraPredModeXを周辺位置が使用したモードに設定できる。
図34を参照すると、mh_intra_flagは、多重仮定予測を使用するか(使用したか)否かを示すシンタックス要素(又は、変数)であってよい。また、周辺ブロックで使用したイントラ予測モードは、水平モードであってよい。また、現在ブロックが多重仮定予測を用いることができ、周辺ブロックのモードに基づくcandIntraPredModeを用いて候補リストが生成できるが、周辺が多重仮定予測を使用しなかった場合でも、周辺ブロックのイントラ予測モードが特定モード、例えば、水平モードであるので、エンコーダ/デコーダは、candIntraPredModeを水平モードに設定できる。
以上で説明した周辺モード参照方法の例を、前述した図30の他の実施例と結合して以下に再び記述する。本発明の一実施例によれば、周辺ブロックのイントラ予測モードcandIntraPredModeX(Xは、A又はB)は、次のような方法で誘導できる。
1.隣ブロック可用性確認プロセスで指定されたブロックに対する可用性誘導プロセスが呼び出され、前記可用性誘導プロセスは、位置(xCurr,yCurr)を(xCb,yCb)に設定し、隣位置(xNbY,yNbY)を(xNbX,yNbX)を入力とすることができ、出力は可用性変数availableXに割り当てられてよい。
2.候補イントラ予測モードcandIntraPredModeXは、次の方法で誘導されてよい:
A.仮に、一つ以上の次の条件が真である場合、candIntraPredModeXはINTRA_DCモードに設定されてよい。
a)The variable availableXがFALSEである場合。
b)mh_intra_flag[xNbX][yNbX]が1でなく、そして、IntraPredModeY[xNbX][yNbX]がINTRA_ANGULAR50及びINTRA_ANGULAR18でない場合。
c)XがBであり、yCb-1が((yCb>>CtbLog2SizeY)<<CtbLog2SizeY)よりも小さい場合。
B.そうでない場合、仮にIntraPredModeY[xNbX][yNbX]>INTRA_ANGULAR34である場合、candIntraPredModeXはINTRA_ANGULAR50に設定されてよい。
C.そうでない場合、仮にIntraPredModeY[xNbX][yNbX]<=INTRA_ANGULAR34であり、IntraPredModeY[xNbX][yNbX]>INTRA_DCである場合、candIntraPredModeXはINTRA_ANGULAR18に設定されてよい。
D.そうでない場合、candIntraPredModeXはIntraPredModeY[xNbX][yNbX]に設定されてよい。
本発明の他の実施例によれば、周辺ブロックのイントラ予測モードcandIntraPredModeX(Xは、A又はB)は、次のような方法で誘導できる。
1.隣ブロック可用性確認プロセスで指定されたブロックに対する可用性誘導プロセスが呼び出され、前記可用性誘導プロセスは位置(xCurr,yCurr)を(xCb,yCb)に設定し、隣位置(xNbY,yNbY)を(xNbX,yNbX)を入力とすることができ、出力は可用性変数availableXに割り当てられてよい。
2.候補イントラ予測モードcandIntraPredModeXは、次の方法で誘導できる:
A.仮に、一つ以上の次の条件が真である場合、candIntraPredModeXはINTRA_DCモードに設定されてよい。
a)The variable availableXがFALSEである場合。
b)mh_intra_flag[xNbX][yNbX]が1でなく、そして、IntraPredModeY[xNbX][yNbX]がINTRA_PLANAR、INTRA_DC、INTRA_ANGULAR50及びINTRA_ANGULAR18でない場合。
c)XがBであり、yCb-1が((yCb>>CtbLog2SizeY)<<CtbLog2SizeY)よりも小さい場合。
B.そうでない場合、仮にIntraPredModeY[xNbX][yNbX]>INTRA_ANGULAR34である場合、candIntraPredModeXはINTRA_ANGULAR50に設定されてよい。
C.そうでない場合、仮にIntraPredModeY[xNbX][yNbX]<=INTRA_ANGULAR34であり、IntraPredModeY[xNbX][yNbX]>INTRA_DCである場合、candIntraPredModeXはINTRA_ANGULAR18に設定されてよい。
D.そうでない場合、candIntraPredModeXはIntraPredModeY[xNbX][yNbX]に設定されてよい。
前述したリスト設定方法においてcandIntraPredModeXは前記周辺モード参照方法によって決定されてよい。
図35は、本発明の一実施例に係る周辺参照サンプルを用いる方法を示す図である。前述したように、多重仮定予測を用いる場合、イントラ予測を他の予測と結合して使用することができる。したがって、多重仮定予測を用いる場合、現在ブロック周辺のサンプルを参照サンプルとして用いてイントラ予測を生成することができる。本発明の一実施例によれば、多重仮定予測を使用する場合、復元サンプルを用いるモードを使用することができる。また、多重仮定予測を使用しない場合、復元サンプルを用いるモードを使用しなくてもよい。前記復元サンプルは現在ブロック周辺の復元サンプルであってよい。
前記復元サンプルを用いるモードの一例として、テンプレートマッチング(template matching)方法を用いることができる。すなわち、あるブロックを基準に既に設定された位置の復元サンプルを、テンプレート(又は、テンプレート領域)と定義することができる。前記テンプレートマッチングは、現在ブロックのテンプレートと比較しようとするブロックのテンプレートの費用を比較し、費用の小さいブロックを探す動作であってよい。このとき、費用は、テンプレートの絶対値の和、差分の二乗の和などと定義することができる。例えば、エンコーダ/デコーダは、現在ブロックと参照ピクチャのブロック間のテンプレートマッチングを用いて、現在ブロックと類似すると予想されるブロックを検索でき、これに基づいてモーションベクトルを設定したり或いはモーションベクトルを改善(refine)することができる。また、前記復元サンプルを用いるモードの例として、復元サンプルを用いるモーション補償、モーションベクトル改善などが挙げられる。
現在ブロック周辺の復元サンプルを用いるためには、現在ブロックをデコードするとき、周辺ブロックのデコーディングが完了することを待たなければならない。このような場合、現在ブロックと周辺ブロックを並列処理することが困難であり得る。したがって、多重仮定予測を使用しない場合、エンコーダ/デコーダは、並列処理を可能にするために、現在ブロック周辺の復元サンプルを用いるモードを使用しなくてもよい。又は、多重仮定予測を使用する場合、現在ブロック周辺の復元サンプルを用いてイントラ予測を生成できるので、エンコーダ/デコーダは、現在ブロック周辺の復元サンプルを用いる他のモードも使用することができる。
また、本発明の一実施例によれば、多重仮定予測を使用しても、候補インデックスによって、現在ブロック周辺の復元サンプル使用の可否が異なってよい。一実施例として、候補インデックスがあらかじめ定義された特定スレショルドよりも小さいとき、現在ブロック周辺の復元サンプルを使用可能である。候補インデックスが小さいと、候補インデックスシグナリングビット数が少なく、候補の正確度が高くてすみ、コーディング効率の高いものに復元サンプルを用いてさらに正確度を上げることができる。他の実施例として、候補インデックスが特定スレショルドよりも大きいとき、現在ブロック周辺の復元サンプルを使用可能である。候補インデックスが大きいと、候補インデックスシグナリングビット数が多く、候補の正確度が低いことがあり、正確度の低い候補に現在ブロック周辺の復元サンプルを用いることによって正確度を補完することができる。
本発明の一実施例によれば、多重仮定予測を使用する場合、エンコーダ/デコーダは、現在ブロック周辺の復元サンプルを用いてインター予測を生成し、前記インター予測を多重仮定予測のイントラ予測と結合して予測ブロックを生成することができる。図35を参照すると、現在ブロックが多重仮定予測を使用するか否かを示すシグナリングであるmh_intra_flag値が1である。現在ブロックが多重仮定予測を使用するので、現在ブロック周辺の復元サンプルを用いるモードを使用することができる。
図36は、本発明の一実施例に係る変換モードを示す図である。本発明の一実施例によれば、ブロックのサブパート(sub-part)に対してのみ変換を行う変換モードが存在してよい。本明細書において、このように、サブパート(sub-part)に対してのみ変換が適用される変換モードを、サブブロック変換(sub-block transform,SBT)又は空間的に変わる変換(spatially varying transform,SVT)などと呼ぶことができる。例えば、CU又はPUが複数のTUに分けられ、複数のTUの一部だけが変換されてよい。又は、例えば、複数のTUのいずれか一つのTUだけが変換されてよい。前記複数のTUのうち変換しないTUは、残差が0であると設定できる。
図36を参照すると、一つのCU又はPUを複数のTUに分けるタイプとしてSBT-V(SBT-vertical)とSBT-H(SBT-horizontal)の2種類があり得る。SBT-Vは、複数のTUの高さがCU又はPU高さと等しく、複数のTUの幅がCU又はPU幅と異なるタイプでよい。SBT-Hは、複数のTUの高さがCU又はPU高さと異なり、複数のTUの幅がCU又はPU幅と等しいタイプでよい。一実施例として、SBT-Vにおける変換するTUの幅及び位置はシグナリングされてよい。また、SBT-Hにおける変換するTUの高さ及び位置はシグナリングされてよい。一実施例をよれば、SBTタイプと位置、幅又は高さによる変換カーネルがあらかじめ設定されてもよい。
このように、CU又はPUの一部だけを変換するモードがあることは、予測後に残差がCU又はPUの一部に主として存在することが可能なためである。すなわち、SBTは、TUに対するスキップモードと同一の概念を有する。このとき、既存のスキップモードは、CUに対するスキップモードであってよい。
図36を参照すると、SBT-V(図36の(a)及び(b))、SBT-H(図36の(c)及び(d))の各タイプに対して、A表示された変換する位置が定義されてよい。そして、幅又は高さがCU幅又はCU高さの1/2又は1/4と定義されてよい。また、Aと表示された領域以外の部分は、残差を0値と見なすことができる。また、SBTを使用できる条件が定義されてよい。例えば、SBTが可能な条件は、ブロックサイズと関連した条件、上位レベル(high level)(例えば、シーケンス、スライス、タイルなど)のシンタックスで、使用可能か否かについてシグナリングされてよい。
本発明の一実施例によれば、多重仮定予測と変換モード間には関連関係を有することができる。例えば、いずれか一方の使用の有無によって他方の使用の有無が決定されてよい。又は、いずれか一つのモードによって他のモードの使用の有無が決定されてよい。又は、いずれか一方の使用の有無によって他方のモードの使用の有無が決定されてよい。一実施例として、前記変換モードは、図36で説明したSBTであってよい。すなわち、多重仮定予測使用の有無によってSBT使用の有無が決定されてよい。又は、SBT使用の有無によって多重仮定予測使用の有無が決定されてよい。次の表6は、本発明の一実施例に係る多重仮定予測と変換モード間の関係を例示するシンタックス構造を示す。
表6を参照すると、多重仮定予測使用の有無によってSBT使用の有無が決定されてよい。すなわち、現在ブロックに多重仮定予測が適用されない場合(!mh_intra_flagが真である場合)、デコーダは、SBT適用の有無を示すシンタックス要素であるcu_sbt_flagをパーシングできる。現在ブロックに多重仮定予測が適用されない場合、cu_sbt_flagをパーシングしなくてもよい。この場合、cu_sbt_flagは、あらかじめ定義された条件によって、その値が0と推論されてよい。
前述したように、SBTは、処理ブロックに対する予測後に残差がブロック内の一部にのみ存在する場合に圧縮性能改善が続く。一方、多重仮定予測の場合には、インター予測を用いてオブジェクトの動きを効果的に反映すると同時に、イントラ予測を用いてその残りの領域に対する予測を効率的に行うことができるので、ブロック全体に対する予測性能の向上が期待される。すなわち、多重仮定予測が適用される場合、ブロック全般に対する予測性能が向上し、ブロックの一部にのみ残差が偏重する現象が相対的に少なく発生してすむ。したがって、本発明の一実施例によれば、エンコーダ/デコーダは、多重仮定予測が適用される場合、SBTを適用しなくてもよい。又は、エンコーダ/デコーダは、SBTが適用される場合、多重仮定予測を適用しなくてもよい。
本発明の一実施例によれば、多重仮定予測使用の有無或いは多重仮定予測のモードによって、SBTの変換するTUの位置が制限されてよい。又は、多重仮定予測使用の有無或いは多重仮定予測のモードによってSBTの変換するTUの幅(SBT-V)又は高さ(SBT-H)が制限されてよい。これによって、位置、幅又は高さに関するシグナリングを減らすことができる。例えば、SBTの変換するTUの位置が多重仮定予測においてイントラ予測の加重値が高い領域でなくて済む。加重値が大きい領域の残差は多重仮定予測によって減らすことができるためである。
したがって、多重仮定予測を使用するとき、SBTで加重値が大きい側を変換するモードはなくてもよい。例えば、多重仮定予測において水平モード又は垂直モードを用いる場合、図36の(b)と(d)のSBTタイプは省略されてよい(すなわち、考慮しなくてもよい)。さらに他の実施例として、多重仮定予測においてプレーナモードを用いる場合、SBTの変換するTUの位置が制限されてよい。例えば、多重仮定予測においてプレーナモードを用いる場合、図36の(a)と(c)のSBTタイプは省略されてよい。これは、多重仮定予測においてプレーナモードを用いる場合、イントラ予測の参照サンプルに隣接した領域は、参照サンプル値と類似する値になり得、これによって、参照サンプルに隣接した領域は相対的に残差が小さくなり得るためである。
他の実施例において、多重仮定予測を使用する場合、可能なSBT変換するTUの幅又は高さの値は変わてよい。又は、多重仮定予測において特定モードを用いる場合、可能なSBT変換するTUの幅又は高さの値は変わってよい。例えば、多重仮定予測を使用する場合、ブロックのうち広い部分に残差が多く残らなくて済むので、SBT変換するTUの幅又は高さの大きい値は除外させることができる。又は、多重仮定予測を使用する場合、多重仮定予測において加重値が変わる単位のようなSBT変換するTUの幅又は高さの値は除外させることができる。
表6を参照すると、SBT使用の有無を示すcu_sbt_flagと多重仮定予測使用の有無を示すmh_intra_flagが存在してよい。mh_intra_flagが0である場合、cu_sbt_flagをパーシングすることができる。また、cu_sbt_flagが存在しない場合、0と推論されてよい。多重仮定予測でイントラ予測を結合すること及びSBTはいずれも、当該技術を使用しないとき、CU又はPUの一部にのみ残差が多く残り得る問題を解決するために用いることができる。したがって、両技術の連関性があり得るので、一つの技術の使用の有無或いは一つの技術の特定モード使用の有無などを他の技術に対するものに基づいて決定することができる。
また、表6で、sbtBlockConditionsは、SBTが可能な条件を示すことができる。SBTが可能な条件は、ブロックサイズと関連した条件、上位レベル(high level)(例えば、シーケンス、スライス、タイルなど)で、使用可能か否かについてのシグナリング値などを含むことができる。
図37は、本発明の一実施例に係る色差成分間の関係を示す図である。図37を参照すると、カラーフォーマット(color format)は、chroma_format_idc、Chroma format、separate_colour_plane_flagなどと表現されてよい。仮に、モノクローム(Monochrome)である場合、1個のサンプル配列(sample array)のみ存在し得る。また、SubWidthC、SubHeightCはいずれも1でよい。仮に、4:2:0サンプリングである場合、色差配列(chroma array)(又は、色差コンポーネント、色差ブロック)は2個存在してよい。また、色差配列(chroma array)は、輝度配列(luma array)(又は、輝度コンポーネント、輝度ブロック)の幅の半分、高さの半分を有することができる。SubWidthC、SubHeightCはいずれも2でよい。SubWidthCとSubHeightCは、輝度配列と比較しての色差配列のサイズを示すことができ、色差配列の幅又は高さが輝度配列の半分サイズである場合、SubWidthC又はSubHeightCは2でよく、色差配列の幅又は高さが輝度配列と同じサイズである場合、SubWidthC又はSubHeightCは1でよい。
仮に、4:2:2サンプリングである場合、色差配列が2個存在してよい。また、色差配列は、輝度配列の半分の幅、同一の高さであってよい。SubWidthC、SubHeightCはそれぞれ、2、1でよい。仮に4:4:4サンプリングである場合、色差配列は、輝度配列と同じな幅、同じ高さであってよい。SubWidthC、SubHeightCはいずれも1でよい。このとき、separate_colour_plane_flagに基づいて個別に処理されてよい。仮にseparate_colour_plane_flagが0である場合、色差配列は輝度配列と幅、高さが同一であってよい。仮にseparate_colour_plane_flagが1である場合、3個のカラープレーン(color plane)(輝度、Cb、Cr)はそれぞれ処理されてよい。separate_colour_plane_flagに関係なく、4:4:4である場合、SubWidthC、SubHeightCはいずれも1でよい。
仮に、separate_colour_plane_flagが1である場合、一つのスライスに一つのカラー成分に該当するものだけが存在してよい。separate_colour_plane_flagが0である場合、一つのスライスに複数のカラー成分に該当するものが存在してよい。図38を参照すると、4:2:2である場合に限ってSubWidthC、SubHeightCが異なることが可能である。したがって、4:2:2である場合、輝度基準幅対高さの関係が、色差基準幅対高さの関係が異なってよい。
例えば、輝度サンプル基準幅がwidthLで、色差サンプル基準幅がwidthCであり、仮にwidthLとwidthCが対応する場合、その関係は次の数学式6のようである。
また、同様に、輝度サンプル基準高さがheightLで、色差サンプル基準高さがheightCであり、仮にheightLとheightCが対応する場合、その関係は、次の数学式7のようである。
また、カラーコンポーネントを指示する(示す)値が存在してよい。例えば、cIdxは、カラーコンポーネントを指示できる。例えば、cIdxは、カラーコンポーネントインデックスであってよい。仮にcIdxが0であれば、輝度コンポーネントを示すことができる。また、cIdxが0でなければ、色差コンポーネントを示すことができる。またcIdxが1であれば、色差Cbコンポーネントを示すことができる。また、cIdxが2であれば、色差Crコンポーネントを示すことができる。
図38は、本発明の一実施例に係るカラー(color)成分間の関係を示す図である。図38の(a)、(b)、(c)はそれぞれ、4:2:0、4:2:2、4:4:4の場合を仮定する。図38(a)を参照すると、水平方向において輝度サンプル2個当たりに色差サンプルが1個(Cb 1個、Cr 1個)位置してよい。また、垂直方向において輝度サンプル2個当たりに色差サンプルが1個(Cb 1個、Cr 1個)位置してよい。図38(b)を参照すると、水平方向において輝度サンプル2個当たりに色差サンプルが1個(Cb 1個、Cr 1個)位置してよい。また、垂直方向において輝度サンプル1個当たりに色差サンプルが1個(Cb 1個、Cr 1個)位置してよい。図38(c)を参照すると、水平方向において輝度サンプル1個当たりに色差サンプルが1個(Cb 1個、Cr 1個)位置してよい。また、垂直方向において輝度サンプル1個当たりに色差サンプルが1個(Cb 1個、Cr 1個)位置してよい。
前述したように、このような関係によって、図37で説明したSubWidthC、SubHeightCが決定されたものでよい。そして、SubWidthC、SubHeightCに基づいて輝度サンプル基準、色差サンプル基準間の変換を行うことができる。
図39は、本発明の一実施例に係る周辺参照位置を示す図である。本発明の実施例によれば、エンコーダ/デコーダは、予測時に周辺位置を参照することができる。例えば、前述したように、CIIP(combined inter-picture merge and intra-picture prediction)行うとき、周辺位置を参照することができる。CIIPは、前述した多重仮定予測であってよい。すなわち、CIIPは、インター予測(例えば、マージモードインター予測)とイントラ予測を結合した予測方法であってよい。本発明の実施例によれば、エンコーダ/デコーダは、周辺位置を参照してインター予測とイントラ予測を結合させることができる。例えば、エンコーダ/デコーダは、周辺位置を参照してインター予測対イントラ予測の比率を決定することができる。又は、エンコーダ/デコーダは、周辺位置を参照してインター予測とイントラ予測を結合させるとき、加重値(weighting)を決定することができる。又は、エンコーダ/デコーダは、周辺位置を参照してインター予測とイントラ予測を加重和(weighted sum)(又は、加重平均(weighted average))するとき、加重値を決定することができる。
本発明の一実施例によれば、参照する周辺位置は、NbAとNbBを含むことができる。NbAとNbBの座標はそれぞれ、(xNbA,yNbA)、(xNbB,yNbB)であってよい。また、NbAは、現在ブロックの左(left)位置であってよい。具体的に、現在ブロックの左上端座標が(xCb,yCb)であり、現在ブロックの幅、高さがそれぞれcbWidth、cbHeightである場合、NbAは(xCb-1,yCb+ cbHeight-1)であってよい。現在ブロックの左上端座標(xCb,yCb)は、輝度サンプルを基準にした値でよい。又は、現在ブロックの左上端座標(xCb,yCb)は、現在ピクチャの左上端輝度サンプルに対する現在輝度コーディングブロックの左上端輝度サンプルの位置であってよい。また、前記cbWidth、cbHeightはそれぞれ、当該色差コンポーネント(color component)を基準にした幅及び高さを示すことができる。前記説明した座標は、輝度コンポーネント(luma component)(又は、輝度ブロック(luma block))に対するものであってよい。例えば、cbWidth、cbHeightは、輝度コンポーネントを基準にした幅及び高さを示すことができる。
また、NbBは、現在ブロックの上側位置であってよい。より具体的に、現在ブロックの左上端座標が(xCb,yCb)であり、現在ブロックの幅、高さがそれぞれcbWidth、cbHeightである場合、NbBは(xCb+ cbWidth-1,yCb-1)であってよい。現在ブロックの左上端座標(xCb,yCb)は、輝度サンプルを基準にした値であってよい。又は、現在ブロックの左上端座標(xCb,yCb)は、現在ピクチャ(picture)の左上端輝度サンプルに対する現在輝度コーディングブロックの左上端(top-left)輝度サンプル位置であってよい。また、前記cbWidth、cbHeightは、当該カラーコンポーネントを基準にした値であってよい。前述した座標は、輝度コンポーネント(輝度ブロック)に対するものであってよい。例えば、cbWidth、cbHeightは、輝度コンポーネントを基準にした値であってよい。
図39を参照すると、輝度ブロックに対して左上端、NbAの座標、NbBの座標などを図示する。また、NbAは、現在ブロックの左側位置であってよい。より具体的に、現在ブロックの左上端座標が(xCb,yCb)であり、現在ブロックの幅、高さがそれぞれcbWidth、cbHeightである場合、NbAは(xCb-1,yCb+2*cbHeight-1)であってよい。現在ブロックの左上端座標(xCb,yCb)は輝度サンプルを基準にした値であってよい。又は、現在ブロックの左上端座標(xCb,yCb)は、現在ピクチャの左上端輝度サンプルに対する現在輝度コーディングブロックの左上端輝度サンプル位置であってよい。また、前記cbWidth、cbHeightは、当該カラーコンポーネントを基準にした値であってよい。前述した座標は、色差コンポーネント(色差ブロック)に対するものであってよい。例えば、cbWidth、cbHeightは、色差コンポーネントを基準にした値であってよい。また、この座標は4:2:0フォーマットであるケースに該当し得る。
また、NbBは、現在ブロックの上側位置であってよい。より具体的に、現在ブロックの左上端座標が(xCb,yCb)であり、現在ブロックの幅、高さがそれぞれcbWidth、cbHeightである場合、NbBは(xCb+2*cbWidth-1,yCb-1)であってよい。現在ブロックの左上端座標(xCb,yCb)は、輝度サンプルを基準にした値であってよい。又は、現在ブロックの左上端座標(xCb,yCb)は、現在ピクチャの左上端輝度サンプルに対する現在輝度コーディングブロックの左上端輝度サンプル位置であってよい。また、前記cbWidth、cbHeightは、当該カラーコンポーネントを基準にした値であってよい。前述した座標は、色差コンポーネント(chroma block)に対するものであってよい。例えば、cbWidth、cbHeightは、色差コンポーネントを基準にした値であってよい。また、この座標は4:2:0フォーマット又は4:2:2フォーマットであるケースに該当し得る。図39を参照すると、色差ブロックに対して左上端、NbAの座標、NbBの座標などを図示する。
図40は、本発明の一実施例に係る加重サンプル予測プロセスを示す図である。図40の実施例では、2つ以上の予測信号を結合する方法を説明する。また、図40の実施例は、CIIPを用いる場合に適用できる。また、図40の実施例は、図39で説明した周辺位置参照方法を含むことができる。図44を参照すると、スケーリングファクターを示す変数scallFactは、次の数学式8のように説明できる。
数学式8において、エンコーダ/デコーダは、cIdxが0の場合、scallFactを0に設定し、cIdxが0でない場合、scallFactを1に設定できる。本発明の実施例において、x?y:zは、xが真である場合又はxが0でない場合に、y値を示し、そうでない場合(xが偽である場合(又は、xが0である場合))に、z値を示すものでよい。
また、エンコーダ/デコーダは、多重仮定予測に参照する周辺位置NbAとNbBの座標である(xNbA,yNbA)、(xNbB,yNbB)を設定できる。図39で説明した実施例によれば、輝度コンポーネントに対して(xNbA,yNbA)、(xNbB,yNbB)はそれぞれ、(xCb-1,yCb+ cbHeight-1)、(xCb+ cbWidth-1,yCb-1)であり、色差コンポーネントに対して(xNbA,yNbA)、(xNbB,yNbB)はそれぞれ、(xCb-1,yCb+2*cbHeight-1)、(xCb+2*cbWidth-1,yCb-1)に設定されてよい。また2^nをかける演算は、nビットを左側シフト(left shift)する演算と同一であってよい。例えば、2をかける演算は、1ビットを左側シフト(left shift)する値と計算されてよい。また、xをnビット左側シフトすることは、“x<<n”と表すことができる。また、2^nで割る演算は、nビットを右側シフト(right shift)する演算と同一であってよい。また、2^nで割って少数点以下を捨てる演算は、nビットを右側シフトした値と計算されてよい。例えば、2で割る演算は、1ビットを右側シフトした値と計算されてよい。また、xをnビット右側シフトすることは、“x>>n”と表すことができる。したがって、(xCb-1,yCb+2*cbHeight-1)、(xCb+2*cbWidth-1,yCb-1)を(xCb-1,yCb+(cbHeight<<1)-1)、(xCb+(cbWidth<<1)-1,yCb-1)と表すことができる。したがって、上で説明した輝度コンポーネントに対する座標と色差コンポーネントに対する座標を共に表すと、次の数学式9のようである。
数学式9において、scallFactは、前述したように、(cIdx ==0)?0:1と決定されてよい。このとき、cbWidth、cbHeightは、各カラーコンポーネントを基準にそれぞれ幅と高さを表す。例えば、輝度コンポーネントを基準にした幅、高さがそれぞれcbWidthL、cbHeightLであり、輝度コンポーネントに対する加重サンプル予測プロセスを行うとき、cbWidth、cbHeightはそれぞれ、cbWidthL、cbHeightLであってよい。また、輝度コンポーネントを基準にした幅、高さがそれぞれcbWidthL、cbHeightLであり、色差コンポーネントに対する加重サンプル予測プロセスを行うとき、cbWidth、cbHeightはそれぞれcbWidthL/SubWidthC、cbHeightL/SubHeightCであってよい。
また、本発明の一実施例によれば、エンコーダ/デコーダは、周辺位置を参照して当該位置の予測モードを決定することができる。例えば、エンコーダ/デコーダは、予測モードがイントラ予測であるか判断できる。また、予測モードは、CuPredModeによって指示されてよい。CuPredModeがMODE_INTRAである場合、イントラ予測を使用するモードであってよい。また、CuPredMode値は、MODE_INTRA、MODE_INTER、MODE_IBC、MODE_PLTであってよい。CuPredModeがMODE_INTERである場合、インター予測を使用することができる。また、CuPredModeがMODE_IBCである場合、イントラブロックコピー(intra block copy,IBC)を用いることができる。また、CuPredModeがMODE_PLTである場合、パレット(palette)モードを用いることができる。また、CuPredModeはチャネルタイプ(channel type,chType)、位置によって示されてよい。例えば、CuPredMode[chType][x][y]と示されてよく、この値は、(x,y)位置でチャネルタイプchTypeに対するCuPredMode値であってよい。
また、本発明の一実施例によれば、chTypeはツリータイプ(tree type)に基づくものでよい。例えば、ツリータイプは、SINGLE_TREE、DUAL_TREE_LUMA、DUAL_TREE_CHROMAなどの値に設定されてよい。SINGLE_TREEである場合、輝度成分と色差成分のブロックパーティショニング(partitioning)が共有される部分があってよい。例えば、SINGLE_TREEである場合、輝度成分と色差成分のブロックパーティショニングが同一であってよい。又は、SINGLE_TREEである場合、輝度成分と色差成分のブロックパーティショニングが同一であるか或いは部分的に同一であってよい。又は、SINGLE_TREEである場合、輝度成分と色差成分のブロックパーティショニングが同一シンタックス要素値によって行われてよい。
また、本発明の一実施例によれば、DUAL TREEである場合、輝度成分と色差成分のブロックパーティショニングが独立的であってよい。又は、DUAL TREEである場合、輝度成分と色差成分のブロックパーティショニングが異なるシンタックス要素値によって行われてよい。また、DUAL TREEである場合、ツリータイプ値は、DUAL_TREE_LUMA又はDUAL_TREE_CHROMAであってよい。仮にツリータイプがDUAL_TREE_LUMAである場合、DUAL TREEを使用し、輝度成分に対するプロセスであることを示すことができる。仮にツリータイプがDUAL_TREE_CHROMAである場合、DUAL TREEを使用し、色差成分に対するプロセスであることを示すことができる。また、chTypeは、ツリータイプがDUAL_TREE_CHROMAであるか否かに基づいて決定されてよい。例えば、chTypeは、ツリータイプがDUAL_TREE_CHROMAである場合、1に設定され、ツリータイプがDUAL_TREE_CHROMAでない場合、0に設定されてよい。したがって、図40を参照すると、CuPredMode[0][xNbX][yNbY]値が判断できる。Xは、AとBに代替可能である。すなわち、NbA、NbB位置に対するCuPredMode値が判断できる。
また、本発明の一実施例によれば、周辺位置に対する予測モードを判断したものに基づいてisIntraCodedNeighbourX値を設定することができる。例えば、周辺位置に対するCuPredModeがMODE_INTRAであるか否かによってisIntraCodedNeighbourX値を設定することができる。仮に周辺位置に対するCuPredModeがMODE_INTRAである場合、isIntraCodedNeighbourX値をTRUEに設定し、周辺位置に対するCuPredModeがMODE_INTRAでない場合、isIntraCodedNeighbourX値をFALSEに設定することができる。上に説明しており、下に説明する本発明において、XはA又はBなどに取り替えてもよい。また、Xと書かれているものは、X位置に該当することを示すことができる。
また、本発明の一実施例によれば、周辺位置を参照して、当該位置が利用可能であるか否かを判断できる。当該位置が利用可能であるか否かをavailableXで設定できる。また、availableXに基づいてisIntraCodedNeighbourXを設定することができる。例えば、availableXがTRUEである場合、isIntraCodedNeighbourXをTRUEに設定し、例えば、availableXがFALSEである場合、isIntraCodedNeighbourXをFALSEに設定できる。図40を参照すると、当該位置が利用可能か否かは、“the derivation process for neighbouring block availability”を呼び出すことによって判断することができる。また、当該位置が利用可能か否かは、当該位置が現在ピクチャ内側にあるか否かに基づいて判断できる。当該位置が(xNbY,yNbY)であり、xNbY又はyNbYが0よりも小さい場合、現在ピクチャを外れたものであって、availableXがFALSEに設定されてよい。また、xNbYがピクチャ幅以上である場合、現在ピクチャをはずれたものであって、availableXがFALSEに設定されてよい。ピクチャ幅は、pic_width_in_luma_samplesによって示すことができる。また、yNbYがピクチャ高さ以上である場合、現在ピクチャをはずれたものであって、availableXがFALSEに設定されてよい。ピクチャ高さは、pic_height_in_luma_samplesで示すことができる。また、当該位置が現在ブロックと異なるブロック又は異なるスライスにある場合、availableXがFALSEに設定されてよい。また、当該位置の復元(reconstruction)が完了していない場合、availableXがFALSEに設定されてよい。復元が完了したか否かは、IsAvailable[cIdx][xNbY][yNbY]で示すことができる。要するに、下記の条件のいずれか一つを満たす場合、availableXをFALSEに設定し、そうでない場合(下記の条件を全て満たさない場合)、availableXをTRUEに設定することができる。
- 条件1:xNbY<0
- 条件2:yNbY<0
- 条件3:xNbY>=pic_width_in_luma_samples
- 条件4:yNbY>=pic_height_in_luma_samples
- 条件5:IsAvailable[cIdx][xNbY][yNbY]==FALSE
- 条件6:当該位置(周辺位置(xNbY,yNbY)位置)が現在ブロックと異なるブロック(又は、異なるスライス)に属した場合
また、本発明の一実施例によれば、オプションによって現在位置と当該位置が同一のCuPredModeであるかを判断し、availableXを設定することができる。説明した2つの条件を結合してisIntraCodedNeighbourXを設定することができる。例えば、次の条件を全て満たす場合、isIntraCodedNeighbourXをTRUEに設定し、そうでない場合(次の条件の少なくとも一つを満たさない場合)、isIntraCodedNeighbourXをFALSEに設定できる。
- 条件1:availableX==TRUE
- 条件2:CuPredMode[0][xNbX][yNbX]==MODE_INTRA
また、本発明の一実施例によれば、複数のisIntraCodedNeighbourXに基づいてCIIPの加重値を決定することができる。例えば、複数のisIntraCodedNeighbourXに基づいてインター予測とイントラ予測を結合させるとき、加重値を決定することができる。例えば、isIntraCodedNeighbourAとisIntraCodedNeighbourBに基づいて決定することができる。一実施例によれば、isIntraCodedNeighbourAとisIntraCodedNeighbourBが両方ともTRUEである場合、wを3に設定できる。例えば、wは、CIIPの加重値又は加重値を決定する値であってよい。また、isIntraCodedNeighbourAとisIntraCodedNeighbourBが両方ともFALSEである場合、wを1に設定できる。また、isIntraCodedNeighbourAとisIntraCodedNeighbourBの一方がFALSEである場合(両方のうち一方がTRUEである場合と同一)、wを2に設定できる。すなわち、周辺位置がイントラ予測で予測されたか否かに基づいて又は周辺位置がどれくらいイントラ予測で予測されたかに基づいてwを設定することができる。
また、本発明の一実施例によれば、wはイントラ予測に該当する加重値であってよい。また、インター予測に該当する加重値は、wに基づいて決定されてよい。例えば、インター予測に該当する加重値は、(4-w)であってよい。エンコーダ/デコーダは、2つ以上の予測信号を結合するとき、次の数学式10を用いることができる。
数学式10で、predSamplesIntra、predSamplesInterは、予測信号であってよい。例えば、predSamplesIntra、predSamplesInterはそれぞれ、イントラ予測によって予測された予測信号、インター予測(例えば、マージモード、より具体的にレギュラーマージモード)によって予測された予測信号であってよい。また、predSampleCombは、CIIPで用いられる予測信号であってよい。
また、本発明の一実施例によれば、数学式10を適用するに先立って、結合前の予測信号をアップデートする過程が含まれてよい。例えば、前記アップデート過程に次の数学式11が適用されてよい。例えば、予測信号をアップデートする過程は、CIIPのインター予測信号をアップデートする過程であってよい。
図41は、本発明の一実施例に係る周辺参照位置を示す図である。
図39及び図40で周辺参照位置について説明したが、説明した位置を全ての場合(例えば、全ての色差ブロック)に使用すれば問題が発生することがあり、この問題を図41で説明する。図41の実施例は、色差ブロックを示している。図39及び図40で、色差ブロックに対して輝度サンプルを基準にしたNbA、NbB座標はそれぞれ、(xCb-1,yCb+2*cbHeight-1)、(xCb+2*cbWidth-1,yCb-1)であった。しかし、SubWidthC又はSubHeightCが1である場合、図39で示した位置と異なる図41に示した位置を示すことがある。上の座標でcbWidth、cbHeightに2をかけたものは、cbWidth、cbHeightは各カラー成分(この実施例では色差成分)を基準に示しており、座標を輝度基準で示すので、4:2:0である場合、輝度サンプル対色差サンプルの個数を補償するためのものであってよい。すなわち、輝度サンプルx軸基準2個に該当する色差サンプル1個であり、輝度サンプルy軸基準2個に該当する色差サンプル1個である場合の座標を輝度基準で表すためのものでよい。したがって、SubWidthC又はSubHeightCが1である場合、異なる位置を示すことができる。したがって、このように色差ブロックに対して常に(xCb-1,yCb+2*cbHeight-1)、(xCb+2*cbWidth-1,yCb-1)位置を使用する場合、現在色差ブロックから遠く離れた位置を参照することが発生し得る。また、この場合、現在ブロックの輝度ブロックで使用する相対的な位置と色差ブロックで使用する相対的な位置が一致しないことがある。また、色差ブロックに対して異なる位置を参照することになるため、現在ブロックと連関性の少ない位置を参照して加重値を設定することがあるか、或いはブロックデコーディング順序においてデコーディング/復元が行われないことがあった。
図41を参照すると、4:4:4の場合、すなわち、SubWidthCとSubHeightCが両方とも1である場合の、上述した輝度基準座標の位置を示している。実線で表示した色差ブロックから離れた位置にNbA,NbBが存在している。
図42は、本発明の一実施例に係る加重サンプル予測プロセスを示す図である。図42の実施例は、図39~図41で説明した問題を解決するための実施例であってよい。また前述した内容と重複する内容は、説明を省略する。図40で、scallFactに基づいて周辺位置を設定し、図41で説明したように、scallFactは、SubWidthCとSubHeightCが2である場合に位置を変換するための値である。しかし、前述したように、カラーフォーマットによって問題が発生することがあり、色差サンプル対輝度サンプルの比率は、横と縦が異なることがあるので、本発明の一実施例によれば、scallFactを横(width)と縦(height)に分離することができる。
本発明の一実施例によれば、scallFactWidthとscallFactHeightが存在してよく、scallFactWidthとscallFactHeightに基づいて周辺位置を設定することができる。また、周辺位置は、輝度サンプル(輝度ブロック)を基準に設定したものでよい。また、scallFactWidthは、cIdx及びSubWidthCに基づいて設定できる。例えば、cIdxが0であるか、SubWidthCが1である場合、scallFactWidthを0に設定でき、そうでない場合(cIdxが0でなく、SubWidthCが1でない場合(SubWidthCが2である場合))、scallFactWidthを1に設定できる。この時、scallFactWidthは、次の数学式12を用いて決定できる。
また、scallFactHeightは、cIdx及びSubHeightCに基づいて設定することができる。例えば、cIdxが0であるかSubHeightCが1である場合、scallFactHeightを0に設定でき、そうでない場合(cIdxが0でなく、SubHeightCが1でない場合(SubHeightCが2である場合))、scallFactHeightを1に設定できる。このとき、scallFactHeightは、次の数学式13を用いて決定できる。
また、scallFactWidthに基づいて周辺位置のx座標を示すことができ、scallFactHeightに基づいて周辺位置のy座標を示すことができる。例えば、scallFactWidthに基づいてNbBの座標を設定することができる。例えば、scallFactHeightに基づいてNbAの座標を設定することができる。また、前述したように、ここでscallFactWidthに基づくことは、SubWidthCに基づくことでよく、scallFactHeightに基づくことは、SubHeightCに基づくことでよい。例えば、周辺位置座標は、次の数学式14の通りである。
このとき、xCb、yCbは、前述したように、輝度サンプル基準で示した座標でよい。また、cbWidth、cbHeightは、各カラー成分を基準に示したものでよい。
したがって、色差ブロックであり、SubWidthCが1である場合、(xNbB,yNbB)=(xCb+cbWidth-1,yCb-1)であってよい。すなわち、この場合、輝度ブロックに対するNbB座標と色差ブロックに対するNbB座標が同一であってよい。また、色差ブロックであり、SubHeightCが1である場合、(xNbA,yNbA)=(xCb-1,yCb+cbHeight-1)であってよい。すなわち、この場合、輝度ブロックに対するNbA座標と色差ブロックに対するNbA座標が同一であってよい。
したがって、図42の実施例は、4:2:0フォーマットである場合には、図39及び図40の実施例と同じ周辺座標を設定し、4:2:2フォーマット又は4:4:4フォーマットである場合には、図39及び図40の実施例と異なる周辺座標を設定することができる。
図42以外の過程は、図40で説明したのと同一であってよい。すなわち、図42で説明した周辺位置座標に基づいて予測モード又は利用可能の有無を判断し、CIIPの加重値を決定することができる。本発明において周辺位置と周辺位置の座標は同じ意味で使われてよい。
図43は、本発明の一実施例に係る加重サンプル予測プロセスを示す図である。図43の実施例は、図42で説明した周辺位置座標を他の方式で表現したものである。したがって、前述したのと重複する内容は省略してもよい。前述したように、ビットシフトを掛け算で表現できる。図42は、ビットシフトを用いて示し、図43は、掛け算を用いて示したものでよい。
一実施例をよれば、scallFactWidthは、cIdx及びSubWidthCに基づいて設定することができる。例えば、cIdxが0であるかSubWidthCが1である場合、scallFactWidthを1に設定でき、そうでない場合(cIdxが0でなく、SubWidthCが1でない場合(SubWidthCが2である場合))、scallFactWidthを2に設定できる。このとき、scallFactWidthは、次の数学式15を用いて決定できる。
また、scallFactHeightは、cIdx及びSubHeightCに基づいて設定することができる。例えば、cIdxが0であるかSubHeightCが1である場合、scallFactHeightを1に設定でき、そうでない場合(cIdxが0でなく、SubHeightCが1でない場合(SubHeightCが2である場合))、scallFactHeightを2に設定できる。このとき、scallFactHeightは、次の数学式16を用いて決定できる。
また、scallFactWidthに基づいて周辺位置のx座標を示すことができ、scallFactHeightに基づいて周辺位置のy座標を示すことができる。例えば、scallFactWidthに基づいてNbBの座標を設定することができる。例えば、scallFactHeightに基づいてNbAの座標を設定することができる。また、前述したように、ここで、scallFactWidthに基づくことは、SubWidthCに基づくことであってよく、scallFactHeightに基づくことは、SubHeightCに基づくことであってよい。例えば、周辺位置座標は、次の数学式17の通りである。
このとき、xCb、yCbは、前述したように、輝度サンプル基準で示した座標でよい。また、cbWidth、cbHeightは、各カラー成分を基準に示したものでよい。
図44は、本発明の一実施例に係る加重サンプル予測プロセスを示す図である。図40、図42、図43などの実施例において周辺位置を参照して当該位置が利用可能か否かを判断した。このとき、カラーコンポーネントを示すインデックスであるcIdxを0(輝度コンポーネント)に設定した。また、当該位置が利用可能か否かを判断するとき、cIdxは、当該位置cIdxの復元(reconstruction)が完了したか否かを判断するために使用することができる。すなわち、当該位置が利用可能か否かを判断するとき、cIdxはIsAvailable[cIdx][xNbY][yNbY]値を判断するために使用することができる。しかし、色差ブロックに対するweighted sample予測プロセスを行うとき、cIdx0に該当するIsAvailable値を参照すると、誤った判断をすることがある。例えば、周辺位置を含むブロックの輝度成分の復元が完了しなかったが、色差成分の復元が完了した場合、cIdxが0でなければ、IsAvailable[0][xNbY][yNbY]はFALSEであり、IsAvailable[cIdx][xNbY][yNbY]はTRUEであってよい。したがって、実際に周辺位置が利用可能であるにもかかわらず、利用可能でないと判断する場合が発生し得る。図44の実施例では、このような問題を解決するために、周辺位置を参照して当該位置が利用可能か否か判断するとき、現在コーディングブロックのcIdxを入力として用いることができる。すなわち、“the derivation process for neighbouring block availability”を呼び出すとき、入力であるcIdxを現在コーディングブロックのcIdxにすることができる。本実施例において、図42及び図43で説明した内容と重複する説明は省略される。
また、前述した周辺位置の予測モードを判断するとき、chType0に該当するCuPredModeであるCuPredMode[0][xNbX][yNbY]を参照したが、仮に現在ブロックに対するchTypeが一致しない場合、誤ったパラメータを参照することがある。したがって、本発明の一実施例によれば、周辺位置の予測モードを判断するとき、現在ブロックに該当するchType値に該当するCuPredMode[chType][xNbX][yNbY]を参照することができる。
図45は、本発明が適用される一実施例に係る多重仮定予測に基づくビデオ信号処理方法を例示する図である。図45を参照すると、説明の便宜のためにデコーダを中心に説明するが、本発明がこれに制限されるものではなく、本実施例に係る多重仮定予測ベースビデオ信号処理方法は、エンコーダにも実質的に同じ方法で適用可能である。
具体的に、デコーダは、現在ブロックにマージモードが適用される場合、前記現在ブロックに組合せ予測(combined prediction)が適用されるか否かを示す第1シンタックス要素を取得することができる(S4501)。ここで、前記組合せ予測は、インター予測及びイントラ予測を結合した予測モードを表す。前述したように、本発明はこのような名称に制限されず、本明細書において前記多重仮定予測は、多重予測、複数予測、組合せ予測、インター-イントラ加重予測、組み合わせられたインター-イントラ予測、組み合わせられたインター-イントラ加重予測などと呼ぶことができる。一実施例において、デコーダは、前記S4501段階に先立って、現在ブロックの予測のための情報を受信し、前記予測のための情報に基づいて、前記現在ブロックにマージモードが適用されるか否かが判別できる。
デコーダは、前記第1シンタックス要素が、前記現在ブロックに前記組合せ予測が適用されることを示す場合、前記現在ブロックのインター予測ブロック及びイントラ予測ブロックを生成することができる(S4502)。そして、デコーダは、前記インター予測ブロック及び前記イントラ予測ブロックを加重和することによって組合せ予測ブロック(combined prediction)を生成することができる(S4503)。そして、デコーダは、前記現在ブロックの残差ブロックを復号化し、前記組合せ予測ブロック及び前記残差ブロックを用いて前記現在ブロックを復元することができる。
前述したように、一実施例において、前記残差ブロックを復号化する段階は、前記第1シンタックス要素が、前記現在ブロックに前記組合せ予測が適用されないことを示す場合、前記現在ブロックにサブブロック変換(sub-block transform)が適用されるか否かを示す第2シンタックス要素を取得する段階を含むことができる。すなわち、サブブロック変換は、前記現在ブロックに前記組合せ予測が適用されない場合に限って適用可能であり、それを適用するか否かに関するシンタックスシグナリングがなされてよい。ここで、前記サブブロック変換は、水平又は垂直方向に分割された前記現在ブロックのサブブロックのいずれか一つのサブブロックに対して変換を適用する変換モードを表す。
前述したように、一実施例において、前記第2シンタックス要素が存在しない場合、前記第2シンタックス要素の値は0と推論されてよい。
前述したように、一実施例において、前記第1シンタックス要素が、前記現在ブロックに前記組合せ予測が適用されることを示す場合、前記現在ブロックに対するイントラ予測のためのイントラ予測モードは、プレーナモード(planar mode)に設定されてよい。
前述したように、一実施例において、デコーダは、前記組合せ予測のために参照される左側及び上側の周辺ブロックの位置を設定でき、設定された位置のイントラ予測モードに基づいて組合せ予測を行うことができる。一実施例において、デコーダは、設定された位置のイントラ予測モードに基づいて組合せ予測に用いられる加重値を決定することができる。また、前述したように、前記左側及び上側周辺ブロックの位置は、前記現在ブロックのカラーコンポーネントインデックス(color component index)値によって決定されるスケーリングファクター変数を用いて決定されてよい。
上述した本発明の実施例は多様な手段を介して具現される。例えば、本発明の実施例は、ハードウェア、ファームウェア(firmware)、ソフトフェアまたはそれらの組み合わせによって具現される。
ハードウェアによる具現の場合、本発明の実施例による方法は、一つまたはそれ以上のASICs(Application Specific Integrated Circuits)、DSPs(Digital Signal Processors)、DSDPs(Digital Signal Processing Devices)、PDLs(Programmable Logic Devices)、FPGAs(Field Programmable Gate Arrays)、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサなどによって具現される。
ファームフェアやソフトウェアによる具現の場合、本発明の実施例による方法は、上述した機能または動作を行うモジュール、手順または関数などの形態で具現される。ソフトウェアコードは、メモリに貯蔵されてプロセッサによって具現される。前記メモリはプロセッサの内部または外部に位置し、既に公知の多様な手段によってプロセッサとデータを交換する。
一部の実施例はコンピュータによって実行されるプログラムモジュールのようなコンピュータで実行可能な命令語を含む記録媒体の形態にも具現される。コンピュータで判読可能な媒体は、コンピュータでアクセスされ得る任意の利用可能な媒体であり、揮発性及び非揮発性媒体、分離型及び非分離型媒体をいずれも含む。また、コンピュータ読取可能媒体は貯蔵媒体及び通信媒体をいずれも含む。コンピュータ貯蔵媒体は、コンピュータ判読可能な命令語、データ構造、プログラムモジュール、またはその他のデータのような情報の貯蔵のための任意の方法または技術で具現された揮発性及び非揮発性媒体、分離型及び非分離型媒体をいずれも含む。通信媒体は、典型的にコンピュータ読取可能な命令語、データ構造、またはプログラムモジュールのような変調されたデータ信号のその他のデータ、またはその他の伝送メカニズムを含み、任意の情報伝達媒体を含む。
上述した本発明の説明は例示のためのものであって、本発明が属する技術分野における通常の知識を有する者は、本発明の技術的思想や必須的特徴を変更せずも他の具体的な形態に容易に変更可能であることを理解できるはずである。よって、上述した実施例は全ての面で例示的なものであり、限定的なものではないと理解すべきである。例えば、単一型として説明されている各構成要素は分散されて実施されてもよく、同じく分散されていると説明されている構成要素も結合された形態で実施されてもよい。
本発明の範囲は、上述した詳細な説明よりは後述する特許請求の範囲によって示され、特許請求の範囲の意味及び範囲、そしてその均等概念から導き出される全ての変更または変形された形態が本発明の範囲に含まれると解釈すべきである。