本明細書で使用される用語は本発明における機能を考慮しながらできるだけ現在広く使用されている一般的な用語を選択したが、これは当分野に携わる技術者の意図、慣例または新たな技術の出現などによって異なり得る。また、特定の場合は出願人が任意に選定した用語もあるが、この場合、該当の発明を実施する形態の部分においてその意味を記載する。よって、本明細書で使用される用語は、単なる用語の名称ではなく、その用語の有する実質的な意味と本明細書全般にわたる内容に基づいて解釈すべきであることを明らかにする。
本明細書において、一部用語は以下のように解釈される。コーディングは、場合によってはエンコーディングまたはデコーディングに解釈される。本明細書において、ビデオ信号のエンコーディング(符号化)を行ってビデオ信号のビットストリームを生成する装置はエンコーディング装置またはエンコーダと称され、ビデオ信号ビットストリームのデコーディング(復号化)を行ってビデオ信号を復元する装置はデコーディング装置またはデコーダと称される。また、本明細書において、ビデオ信号処理装置はエンコーダ及びデコーダをいずれも含む概念の用語として使用される。情報(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予測をいずれも行うピクチャ(または、タイル/スライス)をインターピクチャ(または、タイル/スライス)という。インターピクチャ(または、タイル/スライス)のうち各ブロックのサンプル値を予測するために最大一つのモーションベクトル及び参照ピクチャインデックスを利用するピクチャ(または、タイル/スライス)を予測ピクチャ(predictive picture)またはPピクチャ(または、タイル/スライス)と言い、最大2つのモーションベクトル及び参照ピクチャインデックスを利用するピクチャ(または、タイル/スライス)を双予測ピクチャ(Bi-predictive picture)またはBピクチャ(または、タイル/スライス)という。つまり、Pピクチャ(または、タイル/スライス)は各ブロックを予測するために最大一つのモーション情報セットを利用し、Bピクチャ(または、タイル/スライス)は各ブロックを予測するために最大2つのモーション情報セットを利用する。ここで、モーション情報セットは一つ以上のモーションベクトルと一つの参照ピクチャインデックスを含む。
イントラ予測部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を参照すると、ノードの分割可否を指示するフラッグ「split_cu_flag」、クォードツリーノードの分割可否を指示するフラッグ「split_qt_flag」、マルチ-タイプツリーノードの分割方向を指示するフラッグ「mtt_split_cu_vertical_flag」、またはマルチ-タイプツリーノードの分割模様を指示するフラッグ「mtt_split_binarycu_flag」のうち少なくとも一つが使用される。
本発明の実施例によると、現在ノードの分割可否を指示するフラッグである「split_cu_flag」が先にシグナリングされる。「split_cu_flag」の値が0であれば現在ノードが分割されないことを示し、現在ノードはコーディングユニットになる。現在ノードがコーディングツリーユニットであれば、コーディングツリーユニットは分割されない一つのコーディングユニットを含む。現在ノードがクォードツリーノード「QT node」であれば、現在ノードはクォードツリーノードのリーフノード「QT leaf node」であって、コーディングユニットになる。現在ノードがマルチ-タイプツリーノード「MTT node」であれば、現在ノードはマルチ-タイプツリーのリーフノード「MTT leaf node」であって、コーディングユニットになる。
「split_cu_flag」の値が1であれば、現在ノードは「split_qt_flag」の値に応じてクォードツリーまたはマルチ-タイプツリーのノードに分割される。コーディングツリーユニットはクォードツリーのルートノードであり、クォードツリー構造に優先分割される。クォードツリー構造ではそれぞれのノード「QT node」別に「split_qt_flag」がシグナリングされる。「split_qt_flag」の値が1であれば、該当ノードは4つの正方形ノードに分割され、「qt_split_flag」の値が0であれば、該当ノードはクォードツリーのリーフノード「QT leaf node」となり、該当ノードはマルチ-タイプノードに分割される。本発明の実施例によると、現在ノードの種類に応じてクォードツリー分割は制限され得る。現在ノードがコーディングツリーユニット(クォードツリーのルートノード)またはクォードツリーノードであればクォードツリー分割が許容され、現在ノードがマルチ-タイプツリーユニットであればクォードツリー分割は許容されない。それぞれのクォードツリーリーフノード「QT leaf node」は、マルチ-タイプツリー構造に更に分割される。上述したように、「split_qt_flag」が0であれば、現在ノードはマルチ-タイプノードに分割される。分割方向及び分割模様を指示するために、「mtt_split_cu_vertical_flag」及び「mtt_split_cu_binary_flag」がシグナリングされる。「mtt_split_cu_vertical_flag」の値が1であればノード「MTT node」の垂直分割が指示され、「mtt_split_cu_vertical_flag」の値が0であればノード「MTT node」の水平分割が指示される。また、「mtt_split_cu_binary_flag」の値が1であればノード「MTT node」は2つの長方形ノードに分割され、「mtt_split_cu_binary_flag」の値が0であればノード「MTT node」は3つの長方形ノードに分割される。
コーディングのためのピクチャ予測(モーション補償)はそれ以上分けられないコーディングユニット(つまり、コーディングユニットツリーのリーフノード)を対象に行われる。このような予測を行う基本単位を、以下では予測ユニット(prediction unit)または予測ブロック(prediction block)という。
以下、本明細書で使用されるユニットという用語は、予測を行う基本単位である前記予測ユニットを代替する用語として使用される。但し、本発明はこれに限らず、より広い意味では、前記コーディングユニットを含む概念として理解される。
図5及び図6は、本発明の実施例によるイントラ予測方法をより詳しく示す図である。上述したように、イントラ予測部は、現在ブロックの左側及び/または上側に位置する復元されたサンプルを参照サンプルとして利用して、現在ブロックのサンプル値を予測する。
まず、図5はイントラ予測モードで現在ブロックを予測するために使用される参照サンプルの一実施例を示す。一実施例によると、参照サンプルは現在ブロックの左側境界に隣接したサンプル及び/または上側境界に隣接したサンプルである。図5に示したように、現在ブロックのサイズがW×Hで現在ブロックに隣接した単一参照ライン(line)のサンプルがイントラ予測に使用されれば、現在ブロックの左側及び/または上側に位置した最大2W+2H+1個の周辺サンプルを使用して参照サンプルが設定される。
また、参照サンプルとして使用される少なくとも一部のサンプルがまだ復元されていなければ、イントラ予測部は参照サンプルパッディング過程を行って参照サンプルを獲得する。また、イントラ予測部は、イントラ予測の誤差を減らすために参照サンプルフィルタリング過程を行う。つまり、周辺サンプル及び/または参照サンプルパッディング過程によって獲得された参照サンプルにフィルタリングを行って、フィルタリングされた参照サンプルを獲得する。イントラ予測部は、このように獲得された参照サンプルを利用して現在ブロックのサンプルを予測する。イントラ予測部は、フィルタリングされていない参照サンプル、またはフィルタリングされた参照サンプルを利用して現在ブロックのサンプルを予測する。本開示において、周辺サンプルは少なくとも一つの参照ライン上のサンプルを含む。例えば、周辺サンプルは現在ブロックの境界に隣接したライン上の隣接サンプルを含んでもよい。
次に、図6はイントラ予測に使用される予測モードの一実施例を示す図である。イントラ予測のために、イントラ予測方向を指示するイントラ予測モード情報がシグナリングされる。イントラ予測モードは、イントラ予測モードセットを構成する複数のイントラ予測モードのうちいずれか一つを指示する。現在ブロックがイントラ予測ブロックであれば、デコーダはビットストリームから現在ブロックのイントラ予測モード情報を受信する。デコーダのイントラ予測部は、抽出されたイントラ予測モード情報に基づいて現在ブロックに対するイントラ予測を行う。
本発明の実施例によると、イントラ予測モードセットは、イントラ予測に使用される全てのイントラ予測モード(例えば、総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)モードを指示する。
一方、予め設定された角度範囲は現在ブロックの模様に応じて互いに異なるように設定される。例えば、現在ブロックが長方形ブロックであれば、時計回りに45度を超過するか-135度未満の角度を指示する広角モードが更に使用される。現在ブロックが水平ブロックであれば、角度モードは時計回りに(45+offset1)度から(-135+offset1)度の間の角度範囲(つまり、第2角度範囲)以内の角度を指示する。この際、第1角度範囲を逸脱する角度モード67乃至76が更に使用される。また、現在ブロックが水直ブロックであれば、角度モードは時計回りに(45-offset2)度から(-135-offset2)度の間の角度範囲(つまり、第3角度範囲)以内の角度を指示する。この際、第1角度範囲を逸脱する角度モード-10乃至-1が更に使用される。本発明の実施例によると、offset1及びoffset2の値は、長方形ブロックの幅と高さとの間の割合によって互いに異なるように決定される。また、offset1及びoffset2は正数である。
本発明の更なる実施例によると、イントラ予測モードセットを構成する複数の角度モードは、基本角度モードと拡張角度モードを含む。この際、拡張角度モードは基本角度モードに基づいて決定される。
一実施例によると、基本角度モードは従来のHEVC(High Efficiency Video Coding)標準のイントラ予測で使用される角度に対応するモードであり、拡張角度モードは次世代ビデオコーデック標準のイントラ予測で新たに追加される角度に対応するモードである。より詳しくは、基本角度モードはイントラ予測モード{2、4、6、…、66}のうちいずれか一つに対応する角度モードであり、拡張角度モードはイントラ予測モード{3、5、6、…、65}のうちいずれか一つに対応する角度モードである。つまり、拡張角度モードは、第1角度範囲内での基本角度モードの間の角度モードである。よって、拡張角度モードが指示する角度はは基本角度モードが指示する角度に基づいて決定される。
他の実施例によると、基本角度モードは予め設定された第1角度範囲以内の角度に対応するモードであり、拡張角度モードは前記第1角度範囲を逸脱する広角モードである。つまり、基本角度モードはイントラ予測モード{2、3、4、…、66}のうちいずれか一つに対応する角度モードであり、拡張角度モードはイントラ予測モード{-10、-9、…、-1}及び{67、68、…、76}のうちいずれか一つに対応する角度モードである。拡張角度モードが指示する角度は、対応する基本角度モードが指示する角度の反対側の角度と決定される。よって、拡張角度モードが指示する角度はは基本角度モードが指示する角度に基づいて決定される。一方、拡張角度モードの個数はこれに限らず、現在ブロックのサイズ及び/または模様によって更なる拡張角度が定義される。例えば、拡張角度モードはイントラ予測モード{-14、-13、…、-1}及び{67、68、…、80}のうちいずれか一つに対応する角度モードで定義されてもよい。一方、イントラ予測モードセットに含まれるイントラ予測モードの総個数は、上述した基本角度モードと拡張角度モードの構成によって可変する。
前記実施例において、拡張角度モードの間の間隔は、対応する基本角度モードの間の間隔に基づいて設定される。例えば、拡張角度モード{3、5、7、…、65}の間の間隔は、対応する基本角度モード{2、4、6、…、66}の間の間隔に基づいて決定される。また、拡張角度モード{-10、-9、…、-1}の間の間隔は、対応する反対側の基本角度モード{56、57、…、65}の間の間隔に基づいて決定され、拡張角度モード{67、68、…、76}の間の間隔は、対応する反対側の基本角度モード{3、4、…、12}の間の間隔に基づいて決定される。拡張角度モードの間の角度間隔は、対応する基本角度モードの間の角度間隔と同じように設定される。また、イントラ予測モードセットにおいて、拡張角度モードの個数は基本角度モードの個数以下に設定される。
本発明の実施例によると、拡張角度モードは基本角度モードに基づいてシグナリングされる。例えば、広角モード(つまり、拡張角度モード)は第1角度範囲以内の少なくとも一つの角度モード(つまり、基本角度モード)を代替する。代替される基本角度モードは、広角モードの反対側に対応する角度モードである。つまり、代替される基本角度モードは広角モードが指示する角度の反対方向の角度に対応するか、または前記反対方向の角度から予め設定されたオフセットインデックスだけ差がある角度に対応する角度モードである。本発明の実施例によると、予め設定されたオフセットインデックスは1である。代替される基本角度モードに対応するイントラ予測モードインデックスは、広角モードに更にマッピングされて該当広角モードをシグナリングする。例えば、広角モード{-10、-9、…-1}はイントラ予測モードインデックス{57、58、…、66}によってそれぞれシグナリングされ、広角モード{67、68、…76}はイントラ予測モードインデックス{2、3、…、11}によってそれぞれシグナリングされる。このように基本角度モードのためのイントラ予測モードインデックスが拡張角度モードをシグナリングするようにすることで、各ブロックのイントラ予測に使用される角度モードの構成が互いに異なっても、同じセットのイントラ予測モードインデックスがイントラ予測モードのシグナリングに使用されることができる。よって、イントラ予測モードの構成変化によるシグナリングオーバーヘッドが最小化される。
一方、拡張角度モードの使用可否は、現在ブロックの模様及びサイズのうち少なくとも一つに基づいて決定される。一実施例によると、現在ブロックのサイズが予め設定されたサイズより大きければ、拡張角度モードが現在ブロックのイントラ予測のために使用され、そうでなければ基本角度モードのみ現在ブロックのイントラ予測のために使用される。他の実施例によると、現在ブロックが正方形ではないブロックであれば、拡張角度モードが現在ブロックのイントラ予測のために使用され、現在ブロックが正方形であれば、基本角度モードのみ現在ブロックのイントラ予測のために使用される。
一方、コーディング効率を上げるために、上述したレジデュアル信号をそのままコーデックするのではなく、レジデュアル信号を変換して獲得された変換係数値を量子化し、量子化された変換係数をコーデックする方法が使用される。上述したように、変換部はレジデュアル信号を変換して変換係数値を獲得する。この際、特定ブロックのレジデュアル信号は現在ブロックの全領域に分散されている可能性がある。それによって、レジデュアル信号に対する周波数領域変換を介して低周波領域にエネルギーを集中させ、コーディング効率を上げることができる。以下では、レジデュアル信号が変換または逆変換される方法について詳しく説明する。
図7は、エンコーダがレジデュアル信号を変換する方法を詳しく示す図である。上述したように、空間領域のレジデュアル信号は周波数領域に変換される。エンコーダは、獲得されたレジデュアル信号を変換して変換係数を獲得する。まず、エンコーダは現在ブロックに対するレジデュアル信号を含む少なくとも一つのレジデュアルブロックを獲得する。レジデュアルブロックは、現在ブロックまたは現在ブロックから分割されたブロックのうちいずれか一つである。本開示において、レジデュアルブロックは、現在ブロックのレジデュアルサンプルを含むレジデュアルアレイ(array)またはレジデュアルマトリックス(matrix)と称される。また、本開示において、レジデュアルブロックは、変換ユニットまたは変換ブロックのサイズと同じサイズのブロックを示す。
次に、エンコーダは変換カーネルを使用してレジデュアルブロックを変換する。レジデュアルブロックに対する変換に使用される変換カーネルは、垂直変換及び水平変換の分離可能な特性を有する変換カーネルである。この場合、レジデュアルブロックに対する変換は垂直変換及び水平変換に分離されて行われる。例えば、エンコーダはレジデュアルブロックの垂直方向に変換カーネルを適用して垂直変換を行う。また、エンコーダはレジデュアルブロックの水平方向に変換カーネルを適用して水平変換を行う。本開示において、変換カーネルは、変換マトリックス、変換アレイ、変換関数、変換のようにレジデュアル信号の変換に使用されるパラメータセットを称する用語として使用される。一実施例によって、変換カーネルは複数の使用可能なカーネルのうちいずれか一つである。また、垂直変換及び水平変換それぞれに対して互いに異なる変換タイプに基づく変換カーネルが使用されてもよい。
エンコーダは、レジデュアルブロックから変換された変換ブロックを量子化部に伝達して量子化する。この場合、変換ブロックは複数の変換係数を含む。詳しくは、変換ブロックは2次元配列された複数の変換係数からなる。変換ブロックのサイズは、レジデュアルブロックと同じく現在ブロックまたは現在ブロックから分割されたブロックのうちいずれか一つと同じである。量子化部に伝達された変換係数は、量子化された値で表現される。
また、エンコーダは変換係数が量子化される前に更なる変換を行う。図7に示したように、上述した変換方法は1次変換(primary transform)と称され、更なる変換は2次変換(secondary transform)と称される。2次変換はレジデュアルブロックごとに選択的である。一実施例によって、エンコーダは、1次変換のみで低周波領域にエネルギーを集中させることが難しい領域に対して2次変換を行い、コーディング効率を上げることができる。例えば、レジデュアル値がレジデュアルブロックの水平または垂直方向以外の方向で大きく表されるブロックに対して2次変換が追加されてもよい。イントラ予測されたブロックのレジデュアル値は、インター予測されたブロックのレジデュアル値に比べ水平または垂直方向以外の方向に変化する確率が高い。それによって、エンコーダは、イントラ予測されたブロックのレジデュアル信号に対して2次変換を更に行う。また、エンコーダは、インター予測されたブロックのレジデュアル信号に対して2次変換を省略してもよい。
他の例として、現在ブロックまたはレジデュアルブロックのサイズに応じて、2次変換を行うか否かが決定される。また、現在ブロックまたはレジデュアルブロックのサイズに応じてサイズが互いに異なる変換カーネルが使用される。例えば、幅または高さのうち短辺の長さが第1予め設定された長さと同じであるか大きいブロックに対しては8×8 2次変換が適用される。また、幅または高さのうち短辺の長さが第2予め設定された長さと同じであるか大きくて、第1予め設定された長さより小さいブロックに対しては4×4 2次変換が適用される。この際、第1予め設定された長さは第2予め設定された長さより大きい値であってもよいが、本開示はこれに限らない。また、2次変換は1次変換とは異なって、垂直変換及び水平変換に分離されて行われなくてもよい。このような2次変換は、低帯域非-分離変換(LFNST)と称される。
また、特定領域のビデオ信号の場合、急激な明るさの変化のため周波数変換を行っても高周波帯域エネルギーが減らない。それによって、量子化による圧縮性能が低下する恐れがある。また、レジデュアル値が稀に存在する領域に対して変換を行う場合、エンコーディング及びデコーディング時間が無駄に増加する恐れがある。それによって、特定領域のレジデュアル信号に対する変換は省略されてもよい。特定領域のレジデュアル信号に対する変換を行うか否かは、特定領域の変換に関するシンタックス要素によって決定される。例えば、前記シンタックス要素は変換スキップ情報(transform skip information)を含む。変換スキップ情報は、変換スキップフラッグ(transform skip flag)である。レジデュアルブロックに対する変換スキップ情報が変換スキップを示せば、該当レジデュアルブロックに対する変換が行われない。この場合、エンコーダは、該当領域の変換が行われていないレジデュアル信号を直ちに量子化する。図7を参照して説明したエンコーダの動作は、図1の変換部を介して行われる。
上述した変換に関するシンタックス要素は、ビデオ信号ビットストリームからパージングされた情報である。デコーダは、ビデオ信号ビットストリームをエントロピーデコーディングし、変換に関するシンタックス要素を獲得する。また、エンコーダは、変換に関するシンタックス要素をエントロピーコーディングしてビデオ信号ビットストリームを生成する。
図8は、エンコーダ及びデコーダが変換係数を逆変換してレジデュアル信号を獲得する方法を詳しく示す図である。以下、説明の便宜上、エンコーダ及びデコーダそれぞれの逆変換部を介して逆変換動作が行われると説明する。逆変換部は、逆量子化された変換係数を逆変換してレジデュアル信号を獲得する。まず、逆変換部は、特定領域の変換に関するシンタックス要素から該当領域に対する逆変換が行われるのかを検出する。一実施例によって、特定の変換ブロックに対する変換に関するシンタックス要素が変換スキップを示せば、該当変換ブロックに対する変換が省略される。この場合、変換ブロックに対して1次逆変換及び2次逆変換がいずれも省略される。また、逆量子化された変換係数は、レジデュアル信号として使用される。例えば、デコーダは逆量子化された変換係数をレジデュアル信号として使用して現在ブロックを復元する。上述した1次逆変換は1次変換に対する逆変換を示し、逆1次変換(inverse primary transform)と称される。2次逆変換は2次変換に対する逆変換を示し、逆2次変換(inverse secondary transform)またはinverse LFNSTと称される。本発明において、1次(逆)変換は第1(逆)変換と称され、2次(逆)変換は第2(逆)変換と称される。
他の実施例によって、特定の変換ブロックに対する変換に関するシンタックス要素が変換スキップを示さない可能性がある。この場合、逆変換部は2次変換に対し2次逆変換を行うのか否かを決定する。例えば、変換ブロックがイントラ予測されたブロックの変換ブロックであれば、変換ブロックに対する2次逆変換が行われる。また、変換ブロックに対するイントラ予測モードに基づいて、該当変換ブロックに使用される2次変換カーネルが決定される。他の例として、変換ブロックのサイズに応じて2次逆変換を行うのか否かが決定されてもよい。2次逆変換は、逆量子化過程の後、1次逆変換が行われる前に行われる。
逆変換部は、逆量子化された変換係数または2次逆変換された変換係数に対する1次逆変換を行う。1次逆変換の場合、1次変換と同じく、垂直変換及び水平変換に分離されて行われる。例えば、逆変換部は変換ブロックに対する垂直逆変換及び水平逆変換を行ってレジデュアルブロックを獲得する。逆変換部は、変換ブロックの変換に使用された変換カーネルに基づいて変換ブロックを逆変換する。例えば、エンコーダは、複数の使用可能な変換カーネルのうち現在変換ブロックに適用されている変換カーネルを指示する情報を明示的または目次的にシグナリングする。デコーダは、シグナリングされた変換カーネルを示す情報を利用し、複数の使用可能な変換カーネルのうち変換ブロックの逆変換に使用される変換カーネルを選択する。逆変換部は、逆変換係数に対する逆変換を介して獲得されたレジデュアル信号を利用して現在ブロックを復元する。
一方、ピクチャのレジデュアル信号の分布は領域別に異なり得る。例えば、特定領域内のレジデュアル信号は、予測方法によって値の分布が異なり得る。複数の互いに異なる変換領域に対して同じ変換カーネルを使用して変換を行う場合、変換領域内の値の分布と特性に応じて変換領域別にコーディング効率が異なり得る。それによって、複数の使用可能な変換カーネルのうち特定の変換ブロックの変換に使用される変換カーネルを適応的に選択すれば、コーディング効率が更に向上される。つまり、エンコーダ及びデコーダは、ビデオ信号の変換において、基本変換カーネル以外の変換カーネルを更に使用することができるように設定される。変換カーネルを適応的に選択する方法は、適応的多重コア変換(adaptive multiple core transform、ATM)、または多重変換選択(multiple transform selection、MTS)と称される。本開示では、説明の便宜上、変換及び逆変換を合わせて変換と称する。また、変換カーネル及び逆変換カーネルを合わせて変換カーネルと称する。
原本信号と画面間予測または画面内予測を介して生成し生成た予測信号の差の信号である残差(レジデュアル)信号は、ピクセルドメインの全領域にエネルギーが分散されている炒め、残差信号のピクセル値自体が符号化されれば圧縮効率が下がる問題が発生する。よって、ピクセルドメインの残差信号を変換符号化を介して周波数ドメインの低周波領域にエネルギーを集中させる過程が必要である。
HEVC(high efficiency video coding)標準では、信号がピクセルドメインに均一に分布する場合(隣り合うピクセル値が類似する場合)に効率的なDCT-II(discrete cosine trasnform type-II)を殆ど使用し、画面内の予測された4×4ブロックにのみDST-VII(discrete sine trasnform type-VII)を限定的に使用して、ピクセルドメインの残差信号を周波数領域に変換している。DCT-II変換は、画面間予測を介して生成した残差信号(ピクセルドメインでエネルギーが均一に分布する場合)に適合している。しかし、画面内予測を介して生成した残差信号の場合、現在符号化ユニット周辺の復元された参照サンプルを使用して予測する画面内予測の特性上、参照サンプルと遠くなるほど残差信号のエネルギーが増加する傾向を示す。よって、残差信号を周波数領域に変換するためにDCT-II変換のみを使用する場合、高い符号化効率を達成することができない。
AMTは、予測方法に応じて多数個の予め設定されたカーネルのうち適応的に変換カーネルを選択する変換技法である。どの予測方法が使用されたのかによって、残差信号のピクセルドメインにおけるパターン(水平方向への信号特性、垂直方向への信号特性)が異なるため、単純にDCT-IIのみが残差信号の変換のために使用されたときより高い符号化効率が期待される。本発明において、AMTはその名称に限らず、MTS(multiple transform selection)と称されてもよい。
図9は、1次変換で使用可能な複数の変換カーネルに対する基底関数を示す図である。
詳しくは、図9はAMTで使用する変換カーネルの基底関数を示す図であって、AMTに適用されるDCT-II、DCT-V(discrete cosine transform type-V)、DCT-VIII(discrete cosine transform type-VIII)、DST-I(discrete sine transform type-I)、DST-VIIカーネルの数式を示す。
DCTとDSTはそれぞれコサイン、サインの関数で表されるが、サンプル数Nに対する変換カーネルの基底関数をTi(j)で表す場合、インデックスiは周波数ドメインにおけるインデックスを示し、インデックスjは基底関数内のインデックスを示す。つまり、iが小さくなるほど低周波基底関数を示し、iが大きいほど高周波基底関数を示す。基底関数Ti(j)は2次元行列で表せばi番目行のj番目の要素を示すが、図9に示した変換カーネルはいずれも分離可能な特性を有するため、残差信号Xに対して水平方向と垂直方向にそれぞれ変換を行うことができる。つまり、残差信号ブロックをXとし、変換カーネル行列をTとすれば、残差信号Xに対する変換はTXT’に表される。この際、T’は変換カーネル行列Tの転置(transpose)行列を意味する。
図9に示した基底関数によって定義される変換マトリックス値は、整数形態ではなく素数形態である。素数形態の値はビデオエンコーディング装置及びデコーディング装置にハードウェア的に具現されることが難しい可能性がある。よって、素数形態の値を含む原型(original)変換カーネルから整数近似化された変換カーネルがビデオ信号のエンコーディング及びデコーディングで使用される。整数形態の値を含む近似化された変換カーネルは、原型変換カーネルに対するスケーリング及びラウンディングを介して生成される。近似化された変換カーネルが含む整数値は、予め設定された個数のビットで表現可能な範囲内の値である。予め設定された個数のビットは8-bitまたは10-bitである。近似化によってDCTとDSTの正規直交(orthogonal)性質が維持されない可能性がある。しかし、それによる符号化効率の損失が大きくないため、変換カーネルを整数形態に近似化させることがハードウェア的具現の側面で有利である。
図7乃至図8で説明した1次変換領域及び逆1次変換の場合、分離可能な変換カーネルに対し2次元行列で表して垂直方向と水平方向にそれぞれ変換を行うことであるため、2次元行列積演算が2回行われると考えられる。これは多くの演算量を伴うため、具現の観点で問題となり得る。よって、具現の観点でDCT-IIのようにバタフライ構造(butterfly structure)またはハーフバタフライ構造(half butterfly structure)と、ハーフマトリックス乗算器(hlaf matrix mutiplier)の組み合わせ構造を使用して演算量を減らすことができるのか、または該当変換カーネルを具現の複雑度が低い変換カーネルに分解することができるのか(複雑度が低い行列の積で該当チャネルを表すことができるのか)が重要なイシューになり得る。そして、変換カーネルの要素(変換カーネルの行列要素)は演算のためにメモリに貯蔵されているべきであるため、カーネル行列を貯蔵するためのメモリ容量も具現の際に考慮すべきである。このような観点から、DST-VIIとDCT-VIIIの具現の複雑度は高い方であるため、DST-VII、DCT-VIIIと類似した特性を示しながら具現の複雑度が低い変換はDST-VIIとDCT-VIIIを代替することができる。
DST-IV(discrete sine transform type-IV)とDCT-IV(discrete cosine transform type-IV)は、それぞれDST-VII、DCT-VIIIを代替し得る候補と考えられる。サンプル数2Nに対するDCT-IIカーネルはサンプル数Nに対するDCT-IVカーネルを含んでおり、サンプル数Nに対するDST-IVカーネルはサンプル数Nに対するDCT-IVカーネルから簡単な演算である符号反転と該当基底関数を逆順に整列することで具現することができるため、サンプル数2Nに対するDCT-IIから簡単にサンプル数Nに対するDST-IVとDCT-IVを誘導することができる。
原本信号と予測信号との差である残差信号は予測方法によって信号のエネルギー分布が変わる特性を示すため、AMTまたはMTSのように予測方法によって変換カーネルを適応的に選択すれば、符号化効率を上げることができる。また、図7乃至図8で説明したように、1次変換及び逆1次変換(1次変換に相応する逆変換)以外に追加の変換である2次変換及び逆2次変換(2次変換に相応する逆変換)を行って符号化効率を上げることができる。このような2次変換は、特に残差信号の水平及び垂直方向ではない方向に強いエネルギーが存在する可能性が高い画面内予測済み残差信号ブロックに対して、エネルギー圧縮(energy compaction)を向上させる。上述したように、このような2次変換は、低帯域非-分離変換(LFNST)と称される。そして、前記1次変換はコア変換(core transform)と称される。
図10は、本発明の一実施例による2次変換を行う復号化器で残差信号を復元する過程を示すブロック図である。まず、エントロピーコーダはビットストリームから残差信号に関するシンタックス要素をパージングし、逆二進化(de-binarization)を介して量子化係数が獲得される。デコーダは復元された量子化係数に逆量子化を行って変換係数を獲得し、変換係数に逆変換を行って残差信号ブロックを復元する。逆変換は変換省略(transform skip、TS)が適用されないブロックに適用される。逆変換は復号化器で2次逆変換、1次逆変換の順に行われる。この際、2次逆変換は省略されてもよい。画面間予測済みブロックには2次逆変換が行われずに省略されてもよい。または、ブロックサイズの条件に応じて2次逆変換が省略されてもよい。復元された残差信号には量子化誤差が含まれており、2次変換は残差信号のエネルギー分布を変化させることで、1次変換のみを行った際より量子化誤差を減らすことができる。
図11は、本発明の一実施例による2次変換を行う復号化器で残差信号を復元する過程をブロックレベルで示す図である。残差信号の復元は変換変換ユニット(transform unit、TU)またはTU内のサブ-ブロック単位で行われる。図11は2次変換が適用される残差信号ブロックの復元過程を示しており、逆量子化された変換係数ブロックに対して2次逆変換が先に行われる。デコーダは、TU内のW×H(W:幅、水平サンプルの数、H:高さ、垂直サンプルの数)個の全てのサンプルに対して2次逆変換を行ってもよいが、複雑度を考慮して最も影響力が高い低周波領域である左-上端W’×H’サイズのサブ-ブロックに対してのみ2次逆変換を行ってもよい。この際、W’はWと同じであるか小さい。H’はHと同じであるか小さい。左上端サブ-ブロックサイズであるW’×H’はTUサイズに応じて異なるように設定される。例えば、min(W,H)=4であれば、W’とH’はいずれも4に設定される。min(W,H)>=8であれば、W’とH’はいずれも8に設定される。min(x,y)は、xがyと同じであるか小さい場合xを返還し、xがyより同じであればyを返還する演算を示す。デコーダは2次逆変換を行った後、TU内の左-上端W’×H’サイズのサブ-ブロック変換係数を獲得し、全体のW×Hサイズの変換係数ブロックに対して1次逆変換を行って、残差信号ブロックを復元する。
2次変換の活性化または適用可能可否は、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、ピクチャヘッダ、スライスヘッダ、タイルグループヘッダなど、上位レベルシンタックス(High Level Syntax、HLS)RBSPのうち少なくともいずれか一つに1-bitフラッグの形態で含まれて指示される。更に、2次変換が適用可能であれば、HLS RBSPのうち少なくともいずれか一つに1-bitフラッグの形態で2次変換で考慮する左上端サブ-ブロックのサイズが指示されてもよい。例えば、4×4、8×8サイズのサブ-ブロックを考慮する2次変換に8×8サイズのサブ-ブロックが使用可能であるのかは、HLS RBSPのうち少なくともいずれか一つに1-bitフラッグで指示される。
2次変換の活性化または適用可能可否が上位レベル(例えば、HLS)で指示されれば、2次変換が提要されるのか否かは符号化ユニット(coding unit、CU)レベルで1-bitフラッグで指示される。また、現在ブロックに2次変換が適用されれば、符号化ユニットレベルで2次変換に使用される変換カーネルを示すインデックスが指示される。デコーダは、予測モードによって予め設定された変換カーネルセット内で該当インデックスが指示する変換カーネルを使用し、2次変換が適用されるブロックに2次逆変換を行う。変換カーネル示すインデックスは、切り捨てられた単項(truncate unary)、または固定長二進化方法を使用して二進化される。CUレベルで2次変換が適用されるのか否かを示す1-bitフラッグと2次変換に使用される変換カーネルを指示するインデックスは一つのシンタックス要素を使用して指示されてもよく、本発明ではそれをlfnst_idx[x0][y0]またはlfnst_idxと称するが、本発明はこれに限らない。一実施例として、lfnst_idx[x0][y0]の最初のビットは、CUレベルで2次変換の適用可否を示す。そして、残りのビットは2次変換に使用された変換カーネルを指示するインデックスを示す。つまり、lfnst_idx[x0][y0]は、2次変換(LFNST)の適用可否、及び2次変換が適用される場合に使用される変換カーネルを指示するインデックスを示す。このようなlfnst_idx[x0][y0]は、コンテキスト(context)によって適応的に符号化するCABAC(context-based adaptive binary arithmetic coding)、CAVLC(context-based adaptive variable length coding)などのエントロピーコーダを介して符号化される。現在CUに対してCUサイズより小さい多数のTUに分割されれば2次変換は適用されず、2次変換に関するシンタックス要素であるlfnst_idx[x0][y0]はシグナリングなしに0と設定される。例えば、lfnst_idx[x0][y0]が0であれば2次変換が適用されないことを示す。それに対し、lfnst_idx[x0][y0]が0より大きければ2次変換が適用されることを示し、lfnst_idx[x0][y0]に基づいて2次変換に使用された変換カーネルが選択される。
上述したように、コーディングツリーユニット、クォードツリーのリーフノード、マルチ-タイプツリーのリーフノードはコーディングユニットになり得る。コーディングユニットが最大変換長に比べ大きくなければ、該当コーディングユニットはそれ以上分割されずに予測及び/または変換の単位として使用される。一実施例として、現在コーディングユニットの幅または高さが最大変換長さより大きければ、現在コーディングユニットは分割に関する明示的シグナリングなしに複数の変換ユニットに分割される。コーディングユニットのサイズが最大変換サイズより大きければ、シグナリングなしに複数個の変換ブロックに分割される。この場合、2次変換を適用したら性能が低下し複雑度が増加するため、2次変換が適用される最大コーディングブロック(またはコーディングブロックの最大サイズ)は制限的である。最大コーディングブロックのサイズは、最大変換サイズと同じである。または、最大コーディングブロックのサイズは、予め設定されたコーディングブロックのサイズと定義される。一実施例として、予め設定された値は64、32、16であってもよいが、本発明はこれに限らない。この際、予め設定された値(または最大変換サイズ)と比較される値は、長辺の長さまたはサンプルの個数と定義される。
一方、1次変換で使用されるDCT-II、DST-VII、DCT-VIII基底関数に基づく変換カーネルは分離可能な特性を有する。よって、N×Nサイズの残差ブロック内のサンプルに対して垂直/水平方向の2回の変換が行われ、変換カーネルのサイズはN×Nである。それに対し、2次変換の場合、変換カーネルが分離不可能な(non-separable)特性を有する。よって、2次変換で考慮されるサンプル数がn×nであれば、1回の変換が行われる。この際、変換カーネルのサイズは(n^2)×(n^2)である。例えば、左-上端4×4係数ブロックに2次変換を行う場合、16×16サイズの変換カーネルが適用される。そして、左-上端8×8係数ブロックに2次変換を行う場合、64×64サイズの変換カーネルが適用される。64×64サイズの変換カーネルは多量の積演算を伴うため、エンコーダとデコーダに大きな負担となり得る。よって、2次変換で考慮されるサンプル数が減る場合、演算量と変換カーネルの貯蔵に必要なメモリを減らすことができる。
図12は、本発明の一実施例による減少されたサンプル数を移用する2次変換を適用する方法を示す図である。本発明の一実施例によると、2次変換は2次変換カーネル行列と1次変換された係数ベクトルの積で表され、1次変換された係数を他の空間にマッピングと解釈される。この際、2次変換される係数の個数を減らせば、つまり、2次変換カーネルを構成する基底ベクトルの数を減らせば、2次変換で必要な演算量と変換カーネルの貯蔵に必要なメモリ容量を減らすことができる。例えば、左-上端8×8係数ブロックに2次変換を行う際、2次変換される係数の個数を16個に減らせば、16(行)×64(列)サイズ(または16(行)×48(列)サイズ)の2次変換カーネルが適用される。エンコーダの変換部は、変換カーネルマトリックスを構成するそれぞれの行ベクトルと1次変換された係数ベクトルの内積(inner product)を介して2次変換された係数ベクトルを獲得する。エンコーダ及びデコーダの逆変換部は、変換カーネルマトリックスを構成するそれぞれの列ベクトルと2次変換された係数ベクトルの内積を介して1次変換された係数ベクトルを獲得する。
図12を参照すると、エンコーダは、まず残差信号ブロックに対して1次変換(forward primary transform)を行って1次変換された係数ブロックを得る。1次変換された係数ブロックのサイズをM×Nとすれば、min(M,N)の値が4であるイントラ予測されたブロックに対し、1次変換された係数ブロックの左-上端4×4サンプルに4×4 2次変換(forward secondary transform)が行われる。min(M,N)の値が8以上のイントラ予測されたブロックに対しは、1次変換された係数ブロックの左-上端8×8サンプルに8×8 2次変換が行われる。8×8 2次変換の場合、多量の演算量とメモリを伴うため、8×8サンプルのうち一部のみが活用されてもよい。一実施例において、符号化効率を上げるために、min(M,N)の値が4で、MまたはNが8より大きい長方形ブロックに対して(例えば、4×16、16×4サイズの長方形ブロック)、1次変換された係数ブロック内の2つの左-上端4×4サブブロックにそれぞれ4×4 2次変換が行われてもよい。
2次変換は2次変換カーネル行列と入力ベクトルの積で計算されるため、まず、エンコーダは1次変換された係数ブロックの左-上端サブブロック内の係数をベクトルの形態に構成する。ベクトルで構成する方法は、イントラ予測モードに依存的である。例えば、イントラ予測モードが前記図6で示したイントラ予測モードのうち34番角度モード以下であれば、エンコーダは1次変換された係数ブロックの左-上端サブブロックを水平方向にスキャンして係数をベクトルに構成する。1次変換された係数ブロックの左-上端n×nブロックのi番目の行、j番目の列の元素をx(i、j)と表すと、ベクトル化された係数は、[X(0,0)、X(0,1)、…、X(0,n-1)、X(1,0)、X(1,1)、…、X(1,n-1)、…、X(n-1,0)、X(n-1,1)、…、X(n-1,n-1)]で表される。それに対し、イントラ予測モードが34番角度モードより大きければ、1次変換された係数ブロックの左-上端サブブロックを垂直方向にスキャンして係数をベクトルに構成する。ベクトル化された係数は、[X(0,0)、X(1,0)、…、X(n-1,0)、X(0,1)、X(1,1)、…、X(n-1,1)、…、X(0,n-1)、X(1,n-1)、…、X(n-1,n-1)]で表される。演算量を減らすために、8×8 2次変換で8×8サンプルのうち一部のみを活用する場合、上述したベクトル構成方法においてi>3でj>3である係数x_ijは含まれなくてもよい。この場合、4×4 2次変換では16個の1次変換された係数が2次変換の入力となり得る。8×8 2次変換では48個の1次変換された係数が2次変換の入力となり得る。
エンコーダは、ベクトル化された1次変換係数ブロックの左-上端サブブロックサンプルと2次変換カーネルマトリックスの積を介して2次変換された係数を獲得する。2次変換に適用される2次変換カーネルは、変換ユニットまたは変換ブロックのサイズ、イントラモード、及び変換カーネルを指示するシンタックス要素に応じて決定される。上述したように、2次変換される係数の個数が減ると、演算量と変換カーネルの貯蔵に必要なメモリを減らすことができる。よって、現在変換ブロックのサイズに応じて2次変換される係数の個数が決定される。例えば、エンコーダは、4×4ブロックの場合、長さ16のベクトルと8(行)×16(列)変換カーネルマトリックスの積を介して長さが8の係数ベクトルを獲得する。8(行)×16(列)変換カーネルマトリックスは、16(行)×16(列)変換カーネルマトリックスを構成する最初の基底ベクトルから8番目の基底ベクトルに基づいて獲得される。エンコーダは、4×NまたはM×4ブロック(NとMは8以上)の場合、長さ16のベクトルと16(行)×16(列)変換カーネルマトリックスの積を介して長さが16の係数ベクトルを獲得する。エンコーダは、8×8ブロックの場合、長さ48のベクトルと8(行)×48(列)変換カーネルマトリックスの積を介して長さが8の係数ベクトルを獲得する。8(行)×48(列)変換カーネルマトリックスは、16(行)×48(列)変換カーネルマトリックスを構成する最初の基底ベクトルから8番目の基底ベクトルに基づいて獲得される。エンコーダは、8×8を除いたM×Nブロック(MとNは8以上)の場合、長さ48のベクトルと16(行)×48(列)変換カーネルマトリックスの積を介して長さが16の係数ベクトルを獲得する。
本発明の一実施例によると、2次変換された係数はベクトルの形態であるため、2次元形態のデータで表される。予め設定されたスキャン順によって、2次変換された係数は左-上端係数サブ-ブロックに構成される。一実施例において、予め設定されたスキャン順は右上側対角スキャン順である。本発明はこれに限らず、右上側対角スキャン順は後述する図13、図14で説明する方法に基づいて決定される。
また、本発明の一実施例によると、2次変換された係数を含む全体変換変換ユニットの変換係数は量子化(quantization)の後、ビットストリームに含まれて伝送される。ビットストリームは2次変換に関するシンタックス要素を含む。詳しくは、ビットストリームは、現在ブロックに2次変換が適用されるのか否かに関する情報、及び前記現在ブロックに適用される変換カーネルを指示する情報を含む。
デコーダは、まずビットストリームから量子化された変換係数をパージングし、逆-量子化(de-quantization)を介して変換係数を獲得する。逆-量子化はスケーリング(scaling)と称される。デコーダは、2次変換に関するシンタックス要素に基づいて現在ブロックに2次逆変換が行われるのかを決定する。現在変換ユニットまたは変換ブロックに2次逆変換が適用されれば、変換ユニットまたは変換ブロックのサイズに応じて8個または16個の変換係数が2次逆変換の入力になり得る。2次逆変換の入力となる係数の個数は、エンコーダの2次変換で出力される係数の個数と一致する。例えば、変換ユニットまたは変換ブロックのサイズが4×4または8×8であれば、8個の変換係数が2次逆変換の入力となり、そうでなければ、16個の変換係数が2次逆変換の入力となる。変換ユニットのサイズがM×Nであれば、min(M,N)の値が4であるイントラ予測済みブロックに対し、変換係数ブロックの左-上端4×4サブブロックの16個または8個の係数に4×4 2次逆変換が行われる。min(M,N)が8以上のイントラ予測済みブロックに対しは、変換係数ブロックの左-上端4×4サブブロックの16個または8個の係数に8×8 2次変換が行われる。一実施例において、符号化効率を上げるために、min(M,N)が4で、MまたはNが8より大きければ(例えば、4×16、16×4サイズの長方形ブロック)、係数ブロック内の2つの左-上端4×4サブブロックにそれぞれ4×4 2次逆変換が行われてもよい。
本発明の一実施例によると、2次逆変換は2次逆変換カーネル行列と入力ベクトルの積で計算されるため、デコーダは、先に入力される逆-量子化された変換係数ブロックを予め設定されたスキャン順によってベクトルの形態に構成する。一実施例によると、予め設定されたスキャン順は右上側対角スキャン順であるが、本発明はこれに限らず、右上側対角スキャン順は後述する図13、図14で説明する方法に基づいて決定される。
また、本発明の一実施例によると、デコーダは、ベクトル化された変換係数と2次逆変換カーネルマトリックスの積を介して1次変換された係数を獲得する。この際、2次逆変換カーネルは、変換ユニットまたは変換ブロックのサイズ、イントラモード及び変換カーネルを指示するシンタックス要素に応じて決定される。2次逆変換カーネル行列は2次変換カーネル行列の転置行列である。具現の複雑度を考慮して、カーネル行列の元素は10-bitまたは8-bitの正確度で表される整数である。現在変換ブロックのサイズに基づいて、2次逆変換の出力となるベクトルの長さが決定される。例えば、4×4ブロックの場合、長さ8のベクトルと8(行)×16(列)変換カーネルマトリックスの積を介して長さ16の係数ベクトルが獲得される。8(行)×16(列)変換カーネルマトリックスは、16(行)×16(列)変換カーネルマトリックスを構成する最初の基底ベクトルから8番目の基底ベクトルに基づいて獲得される。4×NまたはM×Nブロック(NとMは8以上)の場合、長さ16のベクトルと16(行)×16(列)変換カーネルマトリックスの積を介して長さが16の係数ベクトルが獲得される。8×8ブロックの場合、長さ8のベクトルと8(行)×48(列)変換カーネルマトリックスの積を介して長さが48の係数ベクトルを獲得する。8(行)×48(列)変換カーネルマトリックスは、16(行)×48(列)変換カーネルマトリックスを構成する最初の基底ベクトルから8番目の基底ベクトルに基づいて獲得される。8×8を除いたM×Nブロック(MとNは8以上)の場合、長さ16のベクトルと16(行)×48(列)変換カーネルマトリックスの積を介して長さが48の係数ベクトルを獲得する。
一実施例において、2次逆変換を介して獲得した1次変換係数はベクトルの形態であるため、デコーダはこれを更に2次元形態のデータに表すことができるが、これはイントラモードに依存的である。この際、エンコーダで適用したイントラモードに基づくマッピング関係が同じく適用される。上述したように、イントラ予測モードが34番角度モード以下であれば、デコーダは2次逆変換された係数ベクトルを水平方向にスキャンし、2次元形態の変換係数アレイを獲得する。デコーダは、イントラ予測モードが34番角度モードより大きければ、2次逆変換された係数ベクトルを垂直方向にスキャンし、2次元形態の変換係数アレイを獲得する。デコーダは、2次逆変換を行って獲得した変換係数を含む全ての変換ユニットまたは変換ブロックサイズの変換係数ブロックに対して1次逆変換を行い、残差信号を獲得する。
図12では示していないが、変化または逆変換の後、変換カーネルによって増加するスケールを補正するために、変換または逆変換を適用するに当たって、ビットシフト演算を利用したスケーリング過程が含まれてもよい。
図13は、本発明の一実施例による右上側対角スキャン順の決定方法を示す図である。本発明の一実施例によると、エンコーディングまたはデコーディングの際、スキャン順を初期化する過程が行われる。ブロックサイズに応じてスキャン順情報を含む配列の初期化が行われる。詳しくは、log2BlockWidth、log2BlockHeightの組み合わせてに対し、1<<log2BlockWidth、1<<log2BlockHeightを入力とする図13に示した右上側対角スキャン順の配列初期化過程が呼び出される(または行われる)。右上側対角スキャン順の配列初期化過程の出力は、DiagScanOrder[log2BlockWidth][log2BlockHeight]に割り当てられる。ここで、log2BlockWidth及びlog2BlockHeightは、それぞれブロックの幅及び高さに対して底が2のログをとった値を示す変数であり、[0,4]範囲の値である。
図13に示した右上側対角スキャン順の配列初期化過程を介し、エンコーダ/デコーダは、入力されたブロックの幅であるblkWidth、ブロックの高さであるblkHeightに対して配列diagScan[sPos][sComp]を出力する。配列のインデックスであるsPosはスキャンポジション(スキャンインデックス)を示し、[0,blkWidth*blkHeight-1]の範囲の値である。配列のインデックスであるsCompが0であればsPosは水平コンポーネント(x)を示し、sCompが1であればsPosは垂直コンポーネント(y)を示す。図13に示したアルゴリズムは、右上側対角スキャン順によってスキャンポジションsPosの際の2次元座標上のx座標値、y座標値が、それぞれdiagScan[sPos][0]、diagScan[sPos][1]に割り当てられると解釈される。つまり、DiagScanOrder[log2BlockWidth][log2BlockHeight][sPos][sComp]配列(またはアレイ)に貯蔵された値は、ブロックの幅と高さがそれぞれ1<<log2BlockWidth、1<<log2BlockHeightであるブロックの右上側対角スキャン順において、sPosスキャン位置(スキャンインデックス)の際のsCompに当たる座長値を意味する。
図14は、本発明の一実施例による右上側対角スキャン順をブロックサイズによって示す図である。図14(a)を参照すると、log2BlockWidthとlog2BlockHeightがいずれも2であれば、4×4サイズのブロックを意味する。図14(b)を参照すると、log2BlockWidthとlog2BlockHeightがいずれも3であれば、8×8サイズのブロックを意味する。図14において、灰色のシェード領域に表された数字はスキャン位置(スキャンインデックス)sPosを示す。sPos位置におけるx座標値、y座標値がそれぞれDiagScanOrder[log2BlockWidth][log2BlockHeight][sPos][0]、DiagScanOrder[log2BlockWidth][log2BlockHeight][sPos][1]に割り当てられる。
エンコーダ/デコーダは、上述したスキャン順に基づいて変換係数情報をコーディングする。本発明では右上側スキャン方法が使用される場合に基づく実施例を主に説明するが、本発明はこれに限らず、これ以外の公知の他のスキャン方法に対しても適用することができる。
以下、2次変換に関するデコーディング過程を詳しく説明する。説明の便宜上、2次変換に関する過程についてデコーダを主に説明するが、以下で説明する実施例は実質的に同じ方法でエンコーダに適用される。
図15は、コーディングユニットレベルで2次変換を指示する方法を示す図である。2次変換はコーディングユニットレベルで指示され、22次変換に関するシンタックス要素がcoding_unitシンタックス構造に含まれる。coding_unitシンタックス構造はコーディングユニットに関するシンタックス要素を含む。この際、ピクチャの左-上端ルマサンプルを基準に現在ブロックの左-上端ルマサンプルの座標である(x0,y0)ブロックの幅であるcbWidth、ブロックの高さであるcbHeight、及び符号化ツリーの種類を示す変数であるtreeTypeがcoding_unitシンタックス構造の入力である。ルマとクロマの間には相関関係が存在するため、ルマとクロマを同じ符号化構造で符号化すると効率的な映像圧縮が可能になる。また、符号化効率を上げるために、ルマとクロマは互いに異なる符号化構造で符号化されてもよい。変数treeTypeがSINGLE_TREEであれば、ルマとクロマが同じ符号化ツリー構造で符号化されていることを意味し、コーディングユニットはルマコーディングブロックとカラーフォーマットに応じてクロマコーディングブロックを含む。treeTypeがDUAL_TREE_LUMAであれば、ルマとクロマが互いに異なる符号化ツリーで符号化されていることを意味し、現在処理されているツリーがルマに対するツリーであることを示す。この際、コーディングユニットはルマコーディングブロックのみを含む。treeTypeがDUAL_TREE_CHROMAであれば、ルマとクロマが互いに異なる符号化ツリーで符号化されていることを意味し、現在処理されているツリーがクロマに対するツリーであることを示す。この際、コーディングユニットはカラーフォーマットによってクロマコーディングブロックを含む。
coding_unitシンタックス構造では現在コーディングユニットに対する予測方法が指示され、変数CuPredMode[x0][y0]は現在ブロックに対する予測方法を示す。CuPredMode[x0][y0]がMODE_INTRAであれば、現在ブロックにイントラ予測方法が適用されていることを示し、MODE_INTERであれば、現在ブロックにインター予測方法が適用されていることを示す。また、CuPredMode[x0][y0]がMODE_IBCであれば、現在ピクチャの復元が完了された領域から参照ブロックを生成して予測を行うIBC(Intra Block Copy)予測が現在ブロックに適用されていることを示す。変数CuPredMode[x0][y0]の値に応じて、予測方法に関するシンタックス要素の処理が行われる。例えば、変数CuPredMode[x0][y0]がイントラ予測を示せば、デコーダはイントラ予測モード、参照ラインインデックス、ISP(Intra Sub-Partitions)予測に関する情報を含むシンタックス要素をパージングするか、予め設定された方法によってイントラ予測モードに関する変数を設定する。
予測方法に関するシンタックス要素を処理した後、残差信号に関するシンタックス要素の処理が行われる。transform_tree()シンタックス構造は変換ツリー(transform tree)に対するシンタックス構造であって、変換ツリーはコーディングユニットと同じサイズをルートノードとしてルートノードより小さいサイズのノードに分割され、変換ツリーのリーフノードは変換ユニットになる。transform_treeシンタックス構造は変換ツリーの分割に関する情報を含む。
イントラ予測方法のうち一つとして、PCM(Pulse Code Modulation)予測がある。PCM予測が現在コーディングユニットの予測に使用されれば変換と量子化が行われないため、transform_treeシンタックス構造が存在しない。つまり、transform_treeシンタックス構造が存在しないため、デコーダは、transform_treeシンタックス構造に対する動作を行わない。PCM予測は、現在コーディングユニットにイントラ予測が指示される場合、pcm_flag[x0][y0]で指示される。つまり、pcm_flag[x0][y0]が1であれば、transform_treeシンタックス構造に対するデコーダの動作は行われない。一方、現在コーディングユニットに対してtransform_treeシンタックス構造が存在するのか否かは1-bitフラッグで指示され、これを本発明ではcu_cbfと称するが、これに限らない。デコーダはcu_cbfパージングするか、cu_cbfがパーシングされなければ、予め設定された方法によってcu_cbfを設定する。cu_cbfが1であれば、デコーダはtrasnform_treeシンタックス構造に対する動作を行う。現在コーディングユニットの予測にインター予測またはIBC予測が使用されれば、現在コーディングユニットの予測にマージ予測も使用可能である。マージ予測が使用されるのか否かは、merge_flag[x0][y0]で指示される。現在ブロックにマージ予測が使用されると指示されれば(merge_flag[x0][y0]==1)cu_cbfはパージングされず、予め設定された方法によってcu_cbfの値が決定される。予め設定された方法は、スキップモードを指示するcu_skip_flag[x0][y0]に基づく方法である。例えば、cu_skip_flag[x0][y0]が1であればcu_cbfは0と推論(infer)され、そうでなければcu_cbfは1と推論される。cu_cbfが1であれば、transform_treeシンタックス構造の処理が行われ、0ではない量子化係数(significant coefficient)の個数を測定するためのカウンタ値は0と初期化される。
numSigCoeff変数は現在コーディングユニットの変換ユニット内に存在する0ではない量子化係数の個数を示す変数を意味し、numSigCoeffの値によって2次変換に関するシンタックス要素の処理が異なり得る。
numZeroOutSigCoeff変数は現在コーディングユニットが含む変換ユニット内の特定位置上に存在する0ではない量子化係数の個数を示す変数を意味し、numZeroOutSigCoeffの値によって2次変換に関するシンタックス要素の処理が異なり得る。
transform_treeにおいて、変換ツリーが分割され、変換ツリーのリーフノードは変換ユニットである。transform_treeはリーフノードである変換ユニットに関するシンタックス構造であるtrasnform_unitシンタックス構造を含む。trasnform_unitは変換ユニットに関するシンタックス要素を処理し、該当変換ユニットが0ではない係数を一つ以上含めば、residual_codingシンタックス構造を含む。residual_codingシンタックス構造は、量子化された変換係数に関するシンタックス構造、及びそれに関する処理を含む。現在処理されるツリーのタイプに応じて変換ユニットを構成する変換ブロックが異なり得る。treeTypeがSINGLE_TREEであれば、現在変換ユニットはルマ変換ブロック及びカラーフォーマットに応じてクロマ変換ブロックを含む。treeTypeがDUAL_TREE_LUMAであれば、現在変換ユニットはルマ変換ブロックを含む。treeTypeがDUAL_TREE_CHROMAであれば、現在変換ユニットはクロマ変換ブロックを含む。trasnform_unitシンタックス構造は、treeTypeに応じて、現在変換ユニットが含む変換ブロックに対し変換ブロックが0ではない係数を一つ以上含むのかを指示する情報であるCBF(coded block flag)情報を含む。前記CBF情報は、カラー成分別に指示される情報である。例えば、現在変換ユニットのルマ変換ブロックに対するCBFの値がルマ変換ブロックが0ではない係数を一つ以上含まないことを示せば、ルマ変換ブロックの係数はいずれも0であるため、ルマ変換ブロックに対するresidual_codingシンタックス構造は処理されない。他の例として、現在変換ユニットのクロマCb変換ブロックに対するCBFの値がクロマCb変換ブロックが0ではない係数を一つ以上含むことを示せば、現在変換ユニットのCb変換ブロックに対するresidual_codingシンタックス構造は存在する。
現在ブロックに2次変換が適用されのか否かは、CUレベルで指示される。2次変換が適用されれば、更に2次変換に使用される変換カーネルを示すインデックスが指示されてもよい。図11で説明したように、lfnst_idx[x0][y0]シンタックス要素を使用して、現在ブロックに2次変換が適用されるのか否かが指示される。lfnst_idx[x0][y0]の最初のビットは、現在コーディングユニットに2次変換の適用されるのか否かを示す。lfnst_idx[x0][y0]の最初のビットが0であれば、つまり、lfnst_idx[x0][y0]が0であれば、現在ブロックに2次変換が適用されていないことを示す。それに対し、lfnst_idx[x0][y0]の最初のビットが1であれば、つまり、lfnst_idx[x0][y0]が0より大きければ(lfnst_idx[x0][y0]>0)、現在ブロックに2次変換が適用されていることを示す。この際、2次変換に使用された変換カーネルを指示するために追加のビットが使用され、追加のビットを介して2次変換カーネルを指示するインデックスがシグナリングされる。
lfnst_idx[x0][y0]シンタックス要素は、後述する条件を満足すればパージングされる。それに対し、後述する条件が満足されなければ、lfnst_idx[x0][y0]は現在コーディングユニットに存在せず、lfnst_idx[x0][y0]は0に設定される。
言い換えれば、後述するlfnst_idx[x0][y0]シンタックス要素パージング条件を含む第1実施例乃至第4実施例で説明する条件が満足されれば、エンコーダは、現在コーディングユニットに対するlfnst_idx[x0][y0]シンタックス要素を含むビットストリームを生成する。それに対し、後述する条件が満足されなければ、エンコーダが生成するビットストリームには現在コーディングユニットに対するlfnst_idx[x0][y0]シンタックス要素が含まれず、lfnst_idx[x0][y0]は0に設定される。このようなビットストリームを受信したデコーダは、後述する条件に基づいてlfnst_idx[x0][y0]シンタックス要素をパージングする。
lfnst_idx[x0][y0]シンタックス要素のパージング条件
i)Min(lfnWidth,lfnHeight)>=4
まず、第1条件はブロックのサイズに関し、ブロックの幅及び高さがそれぞれ4ピクセル以上であれば、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、デコーダは2次変換を適用可能なブロックサイズ条件を検査する。変数SubWidthC、SubHeightCはカラーフォーマットによって設定されるものであって、それぞれピクチャのルマ成分の幅、高さ対比のクロマ成分の幅、高さの比を示す。例えば、4:2:0カラーフォーマット映像は、ルマサンプル4個当たりそれに相当するクロマサンプル1個を含む構造であるため、SubWidthCとSubHeightCはいずれも2に設定される。他の例として、4:4:4カラーフォーマット映像は、ルマサンプル1個当たりそれに相当するクロマサンプル1個を含む構造であるため、SubWidthCとSubHeightCはいずれも1に設定される。現在ブロックの水平方向のサンプル数であるlfnWidth、垂直方向のサンプル数であるlfnHeightは、SubWidthC、SubHeightCに基づいて設定される。treeTypeがDUAL_TREE_CHROMAであればコーディングユニットはクロマ成分のみを含むため、クロマコーディングブロックの水平方向のサンプル数はルマコーディングブロックの幅であるcbwidthをSubWidthCで割った値と同じである。同じく、クロマコーディングブロックの垂直方向のサンプル数は、ルマコーディングブロックの高さであるcbHeightをSubHeightCで割った値と同じである。treeTypeがSINGLE_TREEであるかDUAL_TREE_LUMAであれば、コーディングユニットはルマ成分を含むため、lfnWidth、lfnHeightはそれぞれcbwidth、cbHeightに設定される。22次変換を適用可能なブロックの最小条件は4×4であるため、Min(lfnWidth,lfnHeight)>=4を満足すれば、lfnst_idx[x0][y0]はパージングされる。
ii)sps_lfnst_enabled_flag==1
第2条件は2次変換の活性化または適用可能可否を指示するフラッグ値に関し、2次変換の活性化または適用可能可否を指示するフラッグ(sps_lfnst_enabled_flag)の値が1に設定されれば、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、2次変換は上位レベルシンタックスRBSPで指示される。SPS、PPS、VPS、タイルグループヘッダ、スライスヘッダのうち少なくとも一つに2次変換の活性化及び適用可能可否を指示する1-bitサイズを有するフラッグが含まれる。sps_lfnst_enabled_flagが1であれば、lfnst_idx[x0][y0]シンタックス要素がコーディングユニットシンタックス内に存在することを示す。sps_lfnst_enabled_flagが0であれば、lfnst_idx[x0][y0]シンタックス要素がコーディングユニットシンタックス内に存在しないことを示す。
iii)CuPredMode[x0][y0]==MODE_INTRA
第3条件は予測モードに関し、2次変換はイントラ予測されたブロックにのみ適用される。よって、現在ブロックがイントラ予測されたブロックであれば、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
iv)IntraSubPartitionsSplitType==ISP_NO_SPLIT
第4条件はISP予測方式が適用されるのか否かに関し、現在ブロックにISPが適用されていなければ、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、図11を参照して説明したように、現在CUに対してCUサイズより小さい多数の変換ユニットに分割される場合、分割された変換ユニットには2次変換はが適用されない。この際、2次変換に関するシンタックス要素であるlfnst_idx[x0][y0]はパージングされずに0と設定される。現在CUに対して変換ツリーよりCUサイズが小さい多数の変換ユニットに分割される場合、ISP予測が現在コーディングユニットに適用される場合を含む。ISP予測方法は、現在コーディングユニットにイントラ予測が適用される場合、予め設定された分割方法によって変換ツリーをCUサイズより小さい多数の変換ユニットに分割する予測方法である。コーディングユニットレベルでISP予測モードが指示され、それに基づいて変数IntraSubPartitionsSplitTypeが設定される。この際、IntraSubPartitionsSplitTypeがISP_NO_SPLITであれば、現在ブロックにISPが適用されないことを示す。2次変換はコーディングユニットレベルで指示されるが、実際の2次変換は変換ユニットレベルで適用される。よって、変換ツリーが多数の変換ユニットに分割されたら、分割された全ての変換ユニットに同じ2次変換カーネルが適用されることは非効率である。また、変換ユニットレベルで予測サンプルを生成するイントラ予測の特性上、変換ツリーを分割して多数の変換ユニットに分割したときが分割しなかったときより予測の正確度が上がる。よって、変換ツリーが多数の変換ユニットに分割されたら、分割された多数の変換ユニットに2次変換が適用されなくても、残差信号のエネルギーが効率的に圧縮される可能性が高い。また、現在CUのサイズがルマ最大変換ブロックのサイズ(MaxTbSizeY)より大きければ(つまり、cbWidth>MaxTbSizeY||cbHeight>MaxTbSizeY)、変換ツリーはCUサイズより小さい多数の変換ユニットに分割される。図15には示していないが、この現在CUのサイズがルマ最大変換ブロックサイズ(MaxTbSizeY)より大きい場合も2次変換は適用されない。よって、第4条件は、IntraSubPartitionsSplitType==ISP_NO_SPLIT&&cbWidth<=MaxTbSizeY&&cbHeight<=MaxTbSizeで表されてもよい。この際、MaxTbSizeYは2の冪乗の形態に表現される自然数である。MaxTbSizeYはSPS、PPS、スライスヘッダ、タイルグループヘッダなどの上位レベルシンタックスRBSPに含まれて指示されるか、エンコーダとデコーダが予め設定された同じ値を使用してもよい。例えば、予め設定された値は64(2^6)であってもよい。
v)!intra_mip_flag[x0][y0]
第5条件はイントラ予測方法に関し、現在コーディングユニットの予測にMIP(Matrix based Intra Prediction)が適用されなければ、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、イントラ予測の一方法としてMIPが使用されるが、MIPの適用可否はコーディングユニットレベルでintra_mip_flag[x0][y0]で指示される。intra_mip_flag[x0][y0]が1であれば、MIPが現在コーディングユニットの予測に適用されることを示し、現在ブロックの周辺の復元されたサンプルと予め設定された行列の積で予測が行われる。MIPが適用されれば、方向性または無方向性の予測を行う一般的なイントラ予測とは異なる残差信号の性質を示すため、MIPが適用される際には変換ブロックに2次変換が適用されなくてもよい。
vi)numSigCoeff>((treeType==SIGNLE_TREE)?2:1)
第6条件はtreeType及び係数に関する。
詳しくは、treeTypeがSINGLE_TREEであれば、変数numSigCoeffの値が2より大きければ現在ブロックに2次変換が適用され、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
treeTypeがDUAL_TREE_LUMAまたはDUAL_TREE_CHROMAである場合、変数numSigCoeffの値が1より大きければ現在ブロックに2次変換が適用され、lfnst_idx[x0][y0]はパージングされる。この際、numSigCoeffは現在コーディングユニット内に存在する有効係数の個数を示す変数を意味する。numSigCoeffが臨界値より小さければ、現在ブロックに2次変換が適用されても効率的な符号化が行われない恐れがある。有効係数の個数が少なければ、係数コーディング(coefficient coding)に必要なビット対比のlfnst_idx[x0][y0]をシグナリングするオーバーヘッドが相対的に大きいためである。この際、有効係数は0ではない係数を意味する。以下、本発明で述べる有効係数は、上述したように0ではない係数を意味する。
vii)numZeroOutSigCoeff==0
第7条件は特定位置に存在する有効係数に関する。
詳しくは、現在ブロックに2次変換が適用されれば、デコーダで量子化された変換係数は特定位置で常に0である。よって、特定位置で0ではない(量子化)係数が存在すれば現在ブロックに2次変換が適用されていないということであるため、特定位置における有効係数の個数に応じてlfnst_idx[x0][y0]のパージング可否が決定される。例えば、numZeroOutSigCoeffが0でなければ、特定位置に有効係数が存在することを意味するため、lfnst_idx[x0][y0]はパージングされずに0と設定される。それに対し、numZeroOutSigCoeffが0であれば、特定位置に有効係数が存在しないことを意味するため、lfnst_idx[x0][y0]はパージングされる。
図16は、本発明の一実施例によるresidual_codingシンタックス構造を示す図である。
residual_codingシンタックス構造は量子化係数に関するシンタックス構造であり、x0、y0、log2TbWidth、log2TbHeightを入力として受ける。この際、x0、y0は変換ブロックの左-上端座標である(x0,y0)を意味し、log2TbWidthは変換ブロックの幅に底が2のログをとった値であり、log2TbHeightは変換ブロックの高さに底2のログをとった値を意味する。変換ブロック内の個数はサブブロック単位でコーディングされ、それぞれのサブブロック内の係数の値はsig_coeff_flagを含む様々なシンタックス要素に基づいて決定される。この際、サブブロック単位の係数は係数グループ(Coefficient Group、CG)と表現されてもよい。sig_coeff_flag[xC][yC]は、現在ブロック内の(xC,yC)位置の係数値が0であるのか否かを示す。sig_coeff_flag[xC][yC]が1であれば、該当位置の係数値が0ではない値であることを示し、sig_coeff_flag[xC][yC]が0であれば、該当位置の係数値が0であることを示す。residual_codingではスキャン順上最後の有効係数(last significant coefficient)のx座標値、y座標値が指示される。スキャン順上最後の有効係数のx座標値、y座標値に基づいて、スキャン順上最後の有効係数を含むサブブロックのインデックス(lastSubBlock)が決定される。前記サブブロックのインデックスもスキャン順に基づいてインデクシングされる。前記スキャン順は、図13で説明した右上側対角スキャン順である。サブブロック単位の係数コーディングにおいて、係数位置(座標値)を示すインデックスxC、yCは、サブブロックの左-上端座標(xS<<log2SbW、yS<<log2SbH)、右上側対角スキャン順(DiagScanOrder)に基づいて決定される。この際、xS、ySはそれぞれ水平方向へのインデックス、垂直方向へのインデックスを示す。log2SbW、log2SbHは、それぞれサブブロックの幅と高さに底が2のログをとった値である。
sig_coeff_flag[xC][yC]の値が1で(つまり、(xC,yC)位置の個数が0ではない場合)、現在ブロックに変換スキップが適用されなければ(つまり、!transform_skip_flag[x0][y0])、numSigCoeffがカウントされる(counting)。変換スキップが適用される際には2次変換が適用されない可能性があるため、lfnst_idx[x0][y0]のパージングに活用されるnumSigCoeffは変換スキップが適用されないブロックの有効係数の個数をカウントする。
また、図15で説明したように、変換ブロックに2次変換が適用されれば、変換ブロック内の特定領域では有効係数が存在しない。よって、特定領域内に存在する有効係数の個数(numZeroOutSigCoeff)をnumZeroOutSigCoeffカウンタ(counter)がカウントし、numZeroOutSigCoeffが0でなければlfnst_idx[x0][y0]はパージングされない。詳しくは、変換ブロックに2次変換が適用されたら、有効係数が存在することができない領域は変換ブロックのサイズによって決定される。
例えば、2次変換が適用されるためには、変換ブロックのサイズが4×4である場合(つまり、log2TbWidth==2&&log2TbHeight==2)、変換ブロック内でスキャン順上インデックス[0,7]領域と[8,15]領域を区分し、[0,7]領域には有効係数が存在し、[8,15]領域には有効係数が存在することができない。前記4×4変換ブロックは、一つのサブブロックを含む。よって、変換ブロックのサイズが4×4の場合、スキャン位置が8以上で、サブブロックのインデックスが0であれば(つまり、n>=8&&i==0)、有効係数の個数がカウントされる。この際、スキャン順は右上側対角スキャン順である。
他の例として、2次変換が適用されるためには、変換ブロックのサイズが8×8である場合(つまり、log2TbWidth==3&&log2TbHeight==3)、変換ブロック内で最初のサブブロック内にのみ有効係数が存在し、残りのサブブロック(例えば、2番目、3番目のサブブロック)には有効係数が存在することができない。前記最初のサブブロック内でもスキャン順上インデックス[0,7]領域では有効係数がが存在するが、インデックス[8,15]領域では有効係数が存在することができない。よって、変換ブロックのサイズが8×8である場合、最初のサブブロックでスキャン位置が8以上であるか(つまり、n>=8&&i==0)、スキャン位置が最初のサブブロックを除いた残りのサブブロックに存在すれば(例えば、2番目、3番目のサブブロックに存在、i==1||i==2)、有効係数の個数がカウントされる。
最後に、変換ブロックのサイズが8×8より大きい場合、変換ブロック内で最初のサブブロッ内にのみ有効係数が存在し、残りのサブブロック(例えば、2番目、3番目のサブブロック)には有効係数が存在することができない。よって、サブブロックが2番目または3番目であれば(つまり、i==1||i==2)、有効係数の個数がカウントされる。numZeroOutSigCoeffカウンタは、numSigCoeffカウンタと同じく、sig_coeff_flag[xC][yC]が1で、transform_skip_flag[x0][y0]が0である場合にのみ有効係数の個数をカウントする。この際、サブブロックは図13で説明した右上側対角スキャン順によってインデクシングされる。
言い換えれば、有効係数が存在することができない領域(特定領域)に0ではない係数が存在すれば2次変換が行われていないことを意味するため、特定領域に0ではない係数が存在するのか否かを確認するために有効係数がカウントされるのである。
図17は、本発明の一実施例によるコーディングユニットレベルで2次変換を指示する方法を示す図である。
図15及び図16説明したように、2次変換が適用されるのか否かは、コーディングユニットレベルでlfnst_idx[x0][y0]シンタックス要素で指示され、lfnst_idx[x0][y0]がパーシングされるためには2つの有効係数カウンタ(significant coefficient counter、つまり、numSigCoeffカウンタ、numZeroOutSigCoeffカウンタ)が必要である。特に、numSigCoeffの場合、numSigCoeffカウンタがコーディングユニットの全体領域内に存在する有効係数の個数をカウントすべきであるため、係数コーディングの処理率(throughput)が低下する恐れがある。よって、カウンタの個数を減らすか、カウンタを使用しない方法が必要である。
図17に示した2次変換指示方法は、numSigCoeffとは関係なくlfnst_idx[x0][y0]をパージングする方法である。言い換えれば、図15で説明した条件のうち、i)、ii)、iii)、iv)、v)がいずれも満足すれば(いずれも真であれば)、デコーダはlfnst_idx[x0][y0]をパージングする。また、numSigCoeffの値は参照されないため、図16で説明したnumSigCoeffカウンタの動作は行われない。
以下、本明細書では、スキャン順上最後の有効係数の位置情報に基づいて、2次変換を指示する方法について説明する。有効係数の個数が少ないときと同じく、スキャン順上最後の有効係数の位置(スキャンインデックス)が小さければ、2次変換による符号化効率性が低い。よって、カウンタを使用せずに、スキャン順上最後の有効係数の位置情報に基づいて2次変換を効率的に指示する必要がある。
(第1実施例)
図18は、本発明の一実施例によるコーディングユニットレベルで2次変換を指示する方法を示す図である。
図18は、numSigCoeffカウンタの代わりに、residual_codingで獲得するスキャン順上最後の有効係数の位置情報を利用してlfnst_idx[x0][y0]をパージングする方法を示す図である。
図18によると、numSigCoeffカウンタは使用されないためnumSigCoeff値は初期化される必要がなく、スキャン順上最後の有効係数の位置情報の位置に関する変数であるlfnLastScanPosが1に初期化される。lfnLastScanPosの値が1であれば、スキャン順上最後の有効係数の位置(スキャンインデックス)が臨界値より小さいか、ブロック内の変換係数がいずれも0であることを示す。それに対し、lfnLastScanPosの値が0であればブロック内に有効係数が一つ以上存在し、スキャン順上最後の有効係数の位置(スキャンインデックス)が臨界値以上であることを示す。よって、lfnLastScanPosの値が1であればlfnst_idx[x0][y0]はパージングされず、lfnLastScanPosの値が0であればlfnst_idx[x0][y0]はパージングされる。加えて、lfnst_idx[x0][y0]は、lfnLastScanPosの値が0で、図15で説明した条件i)、ii)、iii)、iv)、v)、vii)がいずれも満足されれば(いずれも真であれば)パージングされてもよい。
言い換えれば、現在ブロック内に有効係数が一つ以上存在し、スキャン順上最後の有効係数の位置(スキャンインデックス)が臨界値以上であれば、lfnst_idx[x0][y0]はパージングされる。この際、後述するように臨界値は0以上の整数である。例えば、臨界値が1と仮定すると、スキャン順上最後の有効係数の位置(スキャンインデックス)が臨界値以上ということは、有効係数がブロックの左上端以外の位置に存在するという意味である。つまり、有効係数が現在ブロックに存在しないか、現在ブロックの左上端にのみ存在する場合を除いた残りの場合、つまり、現在ブロックの左上端を除いた位置に有効係数が存在する場合にのみlfnst_idx[x0][y0]がパージングされる。現在ブロックの左上端を除いた位置に有効係数が存在するという意味は、「LfnstDConly==0」で表されてもよい。本発明で説明するブロックの左上端は、垂直座標の値が(0,0)であることを意味してもよく、予め設定されたスキャン順(例えば、右上側対角順)による最初の位置を意味してもよく、またはDCと称されてもよい。
図19は、本発明の実施例によるresidual_codingシンタックス構造を示す図である。
図19は上述した図18によるresidual_codingシンタックス構造を示し、residual_codingではスキャン順上最後の有効係数のx座標、y座標に関するシンタックス要素がパーシングされ、LastSignificantCoeffX、LastSignificantCoeffY変数が設定される。LastSignificantCoeffXはスキャン順上最後の有効係数のx座標を示し、LastSignificantCoeffYはスキャン順上最後の有効係数のy座標を示す。LastSignificantCoeffX、LastSignificantCoeffYに基づいて、スキャン順上最後の有効係数のスキャンインデックスであるLastScanPos変数と最後の有効係数を含むサブブロックのインデックス(lastSubBlock)が決定される。この際、図16で説明したように、現在ブロックに2次変換が適用される場合、最初のサブブロックにのみ有効係数が存在する。言い換えれば、有効係数が最初のサブブロックにのみ存在すれば、2次変換が適用されるということである。
例えば、図14(a)の4×4サイズのブロックにおいて、LastSignificantCoeffXが2でLastSignificantCoeffYが3であれば、LastScanPosは13に決定される。4×4サイズのブロックは一つのサブブロックで構成されるため、最後の有効係数を含むサブブロックのインデックス(lastSubBlock)は0に決定される。他の例として、図14(b)の8×8サイズのブロックは、4×4サイズのサブブロックに分けられる。詳しくは、図14(b)において、x座標0乃至3及びy座標0乃至3に当たる4×4ブロックは最初のサブブロックに、x座標0乃至3及びy座標4乃至37に当たる4×4ブロックは2番目のサブブロックに、x座標4乃至7及びy座標0乃至34に当たる4×4ブロックは3番目のサブブロックに、x座標4乃至7及びy座標4乃至37に当たる4×4ブロックは4番目のサブブロックに設定される。この際、最初のサブブロックはインデックス0、2番目のサブブロックはインデックス1、3番目のサブブロックはインデックス2、4番目のサブブロックはインデックス3にインデクシングされる。サブブロックは、図13で説明した右上側対角スキャン順によってインデクシングされる。この際、LastSignificantCoeffXが2でLastSignificantCoeffYが3であれば、lastScanPosは13に決定される。lastScanPosは13であるため、lastScanPos13を含むサブブロックは最初のサブブロック(つまり、サブブロックインデックス0)であり、最後の有効係数を含むサブブロックのインデックス(lastSubBlock)は0に決定される。
上述したlastScanPosに基づいて、lfnstLastScanPosが決定される。詳しくは、変換ブロックの幅及び高さが4以上で、変換ブロックに変換スキップが適用されなければ、lfnstLastScanPosは下記数式1のように設定される。言い換えれば、log2TbWidth>=2で、log2TbHeight>=2で、transform_skip_flag[x0][y0]が0であれば、lfnstLastScanPosは下記数式1のように設定される。この際、transform_skip_flag[x0][y0]が0であれば、現在変換ブロックに変換スキップが適用されない場合を意味する。詳しくは、本明細書で説明するフラッグtransform_skip_flag[x0][y0]は、変換ブロックに1次変換及び2次変換が適用されるのか否かを指示する。例えば、前記transform_skip_flag[x0][y0]の値が1であれば、変換ブロックに1次変換及び2次変換が適用されないことを示し(つまり、変換スキップが適用される)、前記transform_skip_flag[x0][y0]の値が0であれば、変換ブロックに1次変換及び2次変換が適用されることを示す(つまり、変換スキップが適用されない)。
上述したように、lfnstLastScanPosの初期化値は1に設定される。
数式1において、cIdxは現在変換ブロックのカラー成分を意味する変数を示す。例えば、cIdxが0であれば、residual_codingで処理される変換ブロックがルマY成分であることを示す。cIdxが1であれば、residual_codingで処理される変換ブロックがクロマCb成分であることを示し、cIdxが2であれば、処理される変換ブロックがクロマCr成分であることを示す。lastScanPosに対する臨界値であるlfnstLastScanPosTh[cIdx]は、カラー成分に応じて異なる値に設定される。
数式1によると、直線のlfnstLastScanPosが1でlastScanPosがlfnstLastScanPosTh[cIdx]より小さければ、lfnstLastScanPosは1にアップデートされる。それに対し、直線のlfnstLastScanPosが0であるか、lastScanPosがlfnstLastScanPosTh[cIdx]以上であれば、lfnstLastScanPosは0にアップデートされる。言い換えれば、コーディングユニットが含む全ての変換ブロックのlastScanPosが臨界値より小さいか、全ての変換ブロックの個数がいずれも0であればlfnstLastScanPosは1に決定され、図18のlfnst_idx[x0][y0]パージング条件によって、lfnst_idx[x0][y0]はパージングされずに0に設定される。lfnst_idx[x0][y0]がパーシングされずに0に設定されるとは、現在ブロックに2次変換が適用されないことを示す。それに対し、コーディングユニットが含む変換ブロックのうちいずれか一つでもLastScanPosが臨界値以上であれば、lfnstLastScanPosは0に決定され、図15で説明した条件i)、ii)、iii)、iv)、v)、vii)をいずれも満足すれば(いずれも真であれば)、デコーダはlfnst_idx[x0][y0]をパージングする。デコーダはlfnst_idx[x0][y0]をパージングして現在ブロックに2次変換が適用されるか否かを確認し、2次変換が適用されれば、2次変換に使用される変換カーネルを確認/決定する。
数式1のlfnstLastScanPosTh[cIdx]は予め設定された0以上の整数値であって、エンコーダとデコーダがいずれも同じ値を使用する。また、全てのカラー成分に対して同じ臨界値が使用されてもよい。この場合、lfnstLastScanPosは下記数式2のように設定される。本明細書で説明するコーディングユニットは複数のコーディングブロックで構成され、それぞれのコーディングブロックに対応する変換ブロックが存在する。変換ブロックは輝度、色差成分を有する変換ブロックである。詳しくは、Y変換ブロック、Cb変換ブロック、Cr変換ブロックである。この際、本明細書で説明するlfnst_idx[x0][y0]をパージングするのか否かは、前記それぞれのコーディングブロックに対応する変換ブロックごとに判断される。つまり、Y変換ブロック、Cb変換ブロック、Cr変換ブロックのうちいずれか一つの変換ブロックでも本明細書で説明する条件を満足すれば、lfnst_idx[x0][y0]はパージングされる。
lfnstLastScanPosThは予め設定された0以上の整数値であって、エンコーダとデコーダがいずれも同じ値を使用する。例えば、lfnstLastScanPosThは1であってもよい。つまり、lastScanPosが1以上であればlfnstLastScanPosは0にアップデートされ、lfnst_idx[x0][y0]がパージングされる。この際、臨界値(lfnstLastScanPosTh)は整数値であるため、lastScanPosが1以上であればlastScanPosが0より大きい場合と同じ意味である。本発明の一例示として臨界値が1である場合について説明したが、本発明はこれに限らない。
言い換えれば、lastScanPosに基づいてlfnst_idx[x0][y0]のパージング可否が決定される。詳しくは、上述したように2次変換が適用されされば、スキャン順上最後の有効係数は変換ブロックの最初のサブブロックにのみ存在する。よって、スキャン順上最後の有効係数を含む(lastScanPosが示すインデックスが位置する)サブブロックのインデックス(lastSubBlock)は0で、変換ブロックの幅が4以上で(log2TbWidth>=2)、変換ブロックの高さが4以上で(log2TbHeight>=2)、transform_skip_flag[x0][y0]が0で(変換スキップが適用されない)、LastScanPosが0より大きければ(LastScanPosが1以上であれば)、lfnst_idx[x0][y0]はパージングされる。これを数式で表すと、下記数式3のように表される。
一方、上述した第1実施例ではnumSigCoeffカウンタをlfnst_idx[x0][y0]のパージングに利用しないため、有効係数の個数(numSigCoeff)はカウントされない。
(第2実施例)
図20は、本発明の他の実施例によるresidual_codingシンタックス構造を示す図である。
図20は、residual_codingは図19に更にtreeType変数を入力され、treeTypeによってLastScanPosに対する臨界値を設定する方法を示す図である。
変換ブロックの幅及び高さが4以上で、変換ブロックに変換スキップが適用されなければ、lfnstLastScanPosは下記数式4のように設定される。言い換えれば、log2TbWidth>=2で、log2TbHeight>=2で、transform_skip_flag[x0][y0]が0であれば、lfnstLastScanPosは下記数式4のように設定される。この際、transform_skip_flag[x0][y0]が0であれば、現在変換ブロックに変換スキップが適用されない場合を意味する。
数式4において、lfnstLastScanPosThはlastScanPosに対する臨界値を意味し、treeTypeによって値が設定される。treeTypeがSINGLE_TREE、DUAL_TREE_LUMA、DUAL_TREE_CHROMAであれば、lfnstLastScanPosThはそれぞれval1、val2、val3に設定される。直線のlfnstLastScanPosが1で、lastScanPosがlfnstLastScanPosThより小さければ、lfnstLastScanPosは1にアップデートされる。それに対し、直線のlfnstLastScanPosが0であるか、lastScanPosがlfnstLastScanPosTh以上であれば、lfnstLastScanPosは0にアップデートされる。
数式4は、結果的に、コーディングユニットが含む全ての変換ブロックのlastScanPosが臨界値より小さいか、全ての変換ブロックの個数がいずれも0であればlfnstLastScanPosは1に決定され、図18のlfnst_idx[x0][y0]パージング条件によって、lfnst_idx[x0][y0]はパージングされずに0に設定される。これは、現在ブロックに2次変換が適用されないことを示す。一方、コーディングユニットが含む変換ブロックのうちいずれか一つでもLastScanPosが臨界値以上であれば、lfnstLastScanPosは0に決定され、図15で説明したi)、ii)、iii)、iv)、v)、vii)をいずれも満足すれば(いずれも真であれば)、デコーダはlfnst_idx[x0][y0]をパージングする。デコーダはlfnst_idx[x0][y0]をパージングして現在ブロックに2次変換が適用されるか否かを確認し、2次変換が適用されれば、2次変換に使用される変換カーネルを確認/決定する。
val1、val2、val3、は予め設定された0以上の整数値であって、エンコーダとデコーダがいずれも同じ値を使用する。treeTypeがSINGLE_TREEであればルマ、クロマ成分をいずれも含むため、lfnstLastScanPosThの値であるval1はval2とval3の和で表現されてもよい。
第2実施例ではnumSigCoeffカウンタをlfnst_idx[x0][y0]のパージングに利用しないため、有効係数の個数(numSigCoeff)はカウントされない。
(第3実施例)
図21は、本発明の他の実施例によるコーディングユニットレベルで2次変換を指示する方法を示す図である。
図21によると、numSigCoeffカウンタの代わりに、residual_codingで獲得されるスキャン順上最後の有効係数の位置情報を活用してlfnst_idx[x0][y0]がパージングされる。
numSigCoeffカウンタが使用されないためnumSigCoeffは初期化される必要がなく、スキャン順上最後の有効係数の位置情報の位置に関する変数であるlfnLastScanPosは0に初期化される。図21のlfnstLastScanPos変数は、コーディングユニットが含む変換ブロックのlastScanPosを足した値である。この際、lfnLastScanPosが臨界値より大きく、図15で説明した条件i)、ii)、iii)、iv)、v)、vii)をいずれも満足すれば(いずれも真であれば)、デコーダはlfnst_idx[x0][y0]をパージングする。デコーダはlfnst_idx[x0][y0]をパージングして現在ブロックに2次変換が適用されるか否かを確認し、2次変換が適用されれば、2次変換に使用される変換カーネルを確認/決定する。それに対し、lfnLastScanPosが臨界値以下であれば、lfnst_idx[x0][y0]はパージングされずに0と設定される。これは、2次変換が適用されないことを示す。
臨界値はtreeTypeによって設定される。treeTypeがSINGLE_TREE、DUAL_TREE_LUMA、DUAL_TREE_CHROMAであれば、臨界値はそれぞれTh1、Th2、Th3に設定される。Th1、Th2、Th3は予め設定された0以上の整数値であって、エンコーダとデコーダがいずれも同じ値を使用する。treeTypeがSINGLE_TREEであればルマ、クロマ成分をいずれも含むため、臨界値であるTh1はTh2とTh3の和で表現されてもよい。
図22は、本発明の他の実施例によるresidual_codingシンタックス構造を示す図である。
図22は上述した図21によるresidual_codingシンタックス構造を示しており、変換ブロックの幅及び高さが4以上で、変換ブロックに変換スキップが適用されなければ、lfnstLastScanPosは下記数式5のように設定される。言い換えれば、log2TbWidth>=2で、log2TbHeight>=2で、transform_skip_flag[x0][y0]が0であれば、lfnstLastScanPosは下記数式5のように設定される。この際、transform_skip_flag[x0][y0]が0であれば、現在変換ブロックに変換スキップが適用されない場合を意味する。
前記数式5において、lfnLastScanPosはコーディングユニットが含む変換ブロックのlastScanPosを全て足した値であって、図21で説明したように、lfnLastScanPosと臨界値を比較してlfnst_idx[x0][y0]のパージング可否が決定される。
第3実施例ではnumSigCoeffカウンタをlfnst_idx[x0][y0]のパージングに利用しないため、有効係数の個数(numSigCoeff)はカウントされない。
一方、コーディングユニットは、コーディングユニットと同じサイズをルートノードとして変換ツリーによって分割される変換ユニットを含む。この際、変換ユニットはそれぞれのカラー成分に対する変換ブロックを含む。2次変換がコーディングユニットレベルで指示されれば、コーディングユニットが含む全ての変換ブロックに対してレジデュアルコーディングが行われた後、係数情報に基づいてlfnst_idx[x0][y0]がパーシングされる。他の実施例として、2次変換は変換ユニットレベルで指示されてもよい。2次変換が変換ユニットレベルで指示されれば、コーディングユニットが含むそれぞれの変換ユニットはそれぞれ異なるlfnst_idx[x0][y0]をを使用する。よって、エンコーダはそれぞれの変換ユニットに最適のlfnst_idx[x0][y0]を探すことができ、符号化効率を更に向上させることができる。また、2次変換がコーディングユニットレベルで指示され、コーディングユニットが4個の変換ユニットを含めば、lfnst_idx[x0][y0]をがパーシングされるためには4個の変換ユニットが含む全ての変換ブロックに対するレジデュアルコーディングが処理されるべきである。つまり、デコーダが最初の変換ユニットに対してレジデュアルコーディングを介した変換係数を獲得しても、lfnst_idx[x0][y0]値を獲得することができなかったため、デコーダは最初の変換ユニットに対する逆変換を行うことができない。これはデコーダのバッファサイズを増加させるだけでなく、デコーダにおける過度な遅延時間を引き起こす恐れがある。
図18乃至図22で説明した第1実施例乃至第3実施例は、2次変換が変換ユニットレベルで指示される場合にも適用可能である。2次変換がコーディングユニットレベルで指示されれば、第1実施例乃至第3実施例によってコーディングユニットが含む変換ブロックのスキャン順上最後の有効係数の位置に基づいて、lfnst_idx[x0][y0]をパージング可否が決定される。また、2次変換が変換ユニットレベルで指示されれば、第1実施例乃至第3実施例によって変換ユニットが含む変換ブロックのスキャン順上最後の有効係数の位置に基づいて、lfnst_idx[x0][y0]をパージング可否が決定される。
以下、本明細書において、2次変換が変換ユニットレベルで指示される具体的な方法について説明する。
図23は、本発明の実施例による変換ユニットレベルで2次変換を指示する方法を示す図である。
図12によると、numSigCoeffカウンタの代わりに、residual_codingで獲得されるスキャン順上最後の有効係数の位置情報を利用してlfnst_idx[x0][y0]がパージングされる。
まず、residual_codingを行う前にスキャン順上最後の有効係数の位置に関する変数であるlfnLastScanPosは1に初期化される。lfnLastScanPosの変数が1であれば、変換ユニットが含む全ての変換ブロックに対してスキャン順上最後の有効係数の位置(スキャンインデックス)が臨界値より小さいか、ブロック内の変換係数がいずれも0であることを示す。lfnLastScanPosの変数が0であれば、変換ユニットが含む一つ以上の変換ブロックに対してブロック内に有効係数が一つ以上存在し、スキャン順上最後の有効係数の位置(スキャンインデックス)が臨界値以上であることを示す。上述した第1実施例によると、変換ブロックのスキャン順上最後の有効係数の位置に基づいて設定されるlfnLastScanPosが0で、後述する条件i)、ii)、iii)、iv)、v)、vi)がいずれも満足されれば(いずれも真であれば)、デコーダはlfnst_idx[x0][y0]をパージングする。
lfnst_idx[x0][y0]シンタックス要素のパージング条件
i)Min(lfnWidth,lfnHeight)>=4
まず、第1条件は、ブロックのサイズに関するものであり、ブロックの幅及び高さがそれぞれ4ピクセル以上であれば、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、デコーダは2次変換を適用可能なブロックサイズ条件を検査する。変数SubWidthC、SubHeightCはカラーフォーマットによって設定されるものであって、それぞれピクチャのルマ成分の幅、高さ対比のクロマ成分の幅、高さの比を示す。例えば、4:2:0カラーフォーマット映像は、ルマサンプル4個当たりそれに相当するクロマサンプル1個を含む構造であるため、SubWidthCとSubHeightCはいずれも2に設定される。他の例として、4:4:4カラーフォーマット映像は、ルマサンプル1個当たりそれに相当するクロマサンプル1個を含む構造であるため、SubWidthCとSubHeightCはいずれも1に設定される。現在ブロックの水平方向のサンプル数であるlfnWidth、垂直方向のサンプル数であるlfnHeightは、SubWidthC、SubHeightCに基づいて設定される。treeTypeがDUAL_TREE_CHROMAであれば変換ユニットはクロマ成分のみを含むため、クロマ変換ブロックの水平方向のサンプル数はルマ変換ブロックの幅であるtbwidthをSubWidthCで割った値と同じである。同じく、クロマ変換ブロックの垂直方向のサンプル数は、ルマ変換ブロックの高さであるtbHeightをSubHeightCで割った値と同じである。treeTypeがSINGLE_TREEであるかDUAL_TREE_LUMAであれば、変換ユニットはルマ成分を含むため、lfnWidth、lfnHeightはそれぞれtbwidth、tbHeightに設定される。2次変換を適用可能なブロックの最小条件は4×4であるため、Min(lfnWidth,lfnHeight)>=4を満足すれば、lfnst_idx[x0][y0]はパージングされる。
ii)sps_lfn_enabled_flag==1
第2条件は2次変換の活性化または適用可能可否を指示するフラッグ値に関し、2次変換の活性化または適用可能可否を指示するフラッグ(sps_lfnst_enabled_flag)の値が1に設定されれば、デコーダはlfnst_idx[x0][y0]をパージングする。
詳しくは、2次変換は上位レベルシンタックスRBSPで指示される。SPS、PPS、VPS、タイルグループヘッダ、スライスヘッダのうち少なくとも一つに2次変換の活性化及び適用可能可否を指示する1-bitサイズを有するフラッグが含まれる。sps_lfnst_enabled_flagが1であれば、変換ユニットシンタックス内にlfnst_idx[x0][y0]シンタックス要素が存在することを示す。sps_lfnst_enabled_flagが0であれば、変換ユニットシンタックス内にlfnst_idx[x0][y0]シンタックス要素が存在しないことを示す。
iii)CuPredMode[x0][y0]==MODE_INTRA
第3条件は予測モードに関し、2次変換はイントラ予測されたブロックにのみ適用される。よって、現在ブロックがイントラ予測されたブロックであれば、デコーダはlfnst_idx[x0][y0]をパージングする。
iv)IntraSubPartitionsSplitType==ISP_NO_SPLIT
第4条件はISP予測方式が適用されるのか否かに関し、現在ブロックにISPが適用されていなければ、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、図11を参照して説明したように、現在CUに対してCUサイズより小さい多数の変換ユニットに分割される場合、分割された変換ユニットには2次変換はが適用されない。この際、2次変換に関するシンタックス要素であるlfnst_idx[x0][y0]はパージングされずに0と設定される。現在CUに対して変換ツリーよりCUサイズが小さい多数の変換ユニットに分割される場合、ISP予測が現在コーディングユニットに適用される場合を含む。ISP予測方法は、現在コーディングユニットにイントラ予測が適用される場合、予め設定された分割方法によって変換ツリーをCUサイズより小さい多数の変換ユニットに分割する予測方法である。コーディングユニットレベルでISP予測モードが指示され、それに基づいて変数IntraSubPartitionsSplitType変数が設定される。この際、IntraSubPartitionsSplitTypeがISP_NO_SPLITであれば、現在ブロックにISPが適用されないことを示す。変換ユニットレベルで予測サンプルを生成するイントラ予測の特性上、変換ツリーを分割して多数の変換ユニットに分割されたときが分割しなかったときより予測の正確度が上がる。よって、分割された多数の変換ユニットに2次変換が適用されなくても、残差信号のエネルギーが効率的に圧縮される可能性が高い。
v)!intra_mip_flag[x0][y0]
第5条件はイントラ予測方法に関し、現在コーディングユニットにMIP(Matrix based Intra Prediction)が適用されなければ、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、イントラ予測の一方法都市てMIPが使用されるが、MIPの適用可否はコーディングユニットレベルでintra_mip_flag[x0][y0]で指示される。intra_mip_flag[x0][y0]が1であれば、MIPが現在コーディングユニットの予測に適用されることを示し、現在ブロックの周辺の復元されたサンプルと予め設定された行列の積で予測が行われる。MIPが適用されれば、方向性または無方向性の予測を行う一般的なイントラ予測とは異なる残差信号の性質を示すため、MIPが適用される際には変換ブロックに2次変換が適用されなくてもよい。
vi)numZeroOutSigCoeff==0
第6条件は特定位置に存在する有効係数に関する。
詳しくは、現在ブロックに2次変換が適用されれば、デコーダで量子化された変換係数は特定位置で常に0である。よって、特定位置で0ではない量子化係数が存在すれば2次変換が適用されていないということであるため、特定位置における有効係数の個数に応じてlfnst_idx[x0][y0]はパージングされる。例えば、numZeroOutSigCoeffが0でなければ、特定位置に有効係数が存在することを意味するため、lfnst_idx[x0][y0]はパージングされずに0と設定される。それに対し、numZeroOutSigCoeffが0であれば、特定位置に有効係数が存在しないことを意味するため、lfnst_idx[x0][y0]はパージングされる。
上述した第1実施例に基づいて現在ブロックに2次変換が適用されるのか否かが変換ユニットレベルで指示されれば、図19で説明したresidual_coding方法に従う。図19で説明したlfnLastScanPosを決定する数式1によって変換ユニットが含む全ての変換ブロックのlastScanPosが臨界値より小さいか全ての変換ブロックの個数が0であれば、lfnLastScanPosは1に決定され、lfnst_idx[x0][y0]はパージングされずに0と設定される。これは、現在ブロックに2次変換が適用されないことを示す。それに対し、変換ユニットが含む変換ブロックのうちいずれか一つでもLastScanPosが臨界値以上であれば、lfnstLastScanPosは0に決定され、図23で説明した条件i)、ii)、iii)、iv)、v)、vi)をいずれも満足すれば(いずれも真であれば)、デコーダはlfnst_idx[x0][y0]をパージングする。デコーダはlfnst_idx[x0][y0]をパージングして、現在ブロックに2次変換が適用されるか否かを確認し、2次変換が適用されれば、2次変換に使用される変換カーネルを確認/決定する。
上述した第2実施例に基づいて2次変換が適用されるのか否かが変換ユニットレベルで指示されれば、図23で説明する変換ユニットシンタックス構造が適用され、図20で説明したresidual_coding方法が使用される。図20で説明したlfnLastScanPosを決定する数式4によって変換ユニットが含む全ての変換ブロックのlastScanPosが臨界値より小さいか全ての変換ブロックの個数が0であれば、lfnLastScanPosは1に決定され、lfnst_idx[x0][y0]はパージングされずに0と設定される。これは、現在ブロックに2次変換が適用されないことを示す。一方、変換ユニットが含む変換ブロックのうち一つでもLastScanPosが臨界値以上であれば、lfnstLastScanPosは0に決定され、図23で説明した条件i)、ii)、iii)、iv)、v)、vi)をいずれも満足すれば(いずれも真であれば)、デコーダはlfnst_idx[x0][y0]をパージングする。デコーダは、lfnst_idx[x0][y0]をパージングして現在ブロックに2次変換が適用されるか否かを確認し、2次変換が適用されれば、2次変換に使用される変換カーネルを確認/決定する。
図24は、本発明の他の実施例による変換ユニットレベルで2次変換を指示する方法を示す図である。
上述した第3実施例によると、numSigCoeffカウンタの代わりに、residual_codingで獲得するスキャン順上最後の有効係数の位置情報を活用してlfnst_idx[x0][y0]がパージングされる。
residual_codingを行う前にスキャン順上最後の有効係数の位置に関する変数であるlfnLastScanPosは0に初期化される。変数lfnLastScanPosは、変換ユニットが含む変換ブロックのlastScanPosを足した値である。この際、lfnLastScanPosが臨界値より大きく、図23で説明した条件i)、ii)、iii)、iv)、v)、vii)をいずれも満足すれば(いずれも真であれば)、デコーダはlfnst_idx[x0][y0]をパージングする。デコーダはlfnst_idx[x0][y0]をパージングして現在ブロックに2次変換が適用されるか否かを確認し、2次変換が適用されれば、2次変換に使用される変換カーネルを確認/決定する。それに対し、lfnLastScanPosが臨界値以下であれば、lfnst_idx[x0][y0]はパージングされずに0と設定される。これは、2次変換が適用されないことを示す。
臨界値はtreeTypeによって設定される。treeTypeがSINGLE_TREE、DUAL_TREE_LUMA、DUAL_TREE_CHROMAであれば、臨界値はそれぞれTh1、Th2、Th3に設定される。Th1、Th2、Th3は予め設定された0以上の整数値であって、エンコーダとデコーダがいずれも同じ値を使用する。treeTypeがSINGLE_TREEであればルマ、クロマ成分をいずれも含むため、臨界値であるTh1はTh2とTh3の和で表現されてもよい。
上述した第3実施例に基づいてに2次変換が適用されるのか否かが変換ユニットレベルで指示されれば、図22で説明したresidual_coding方法が使用される。図22で説明したlfnLastScanPosはを決定する数式5によって、変数lfnLastScanPosは変換ユニットが含む変換ブロックのlastScanPosを全て足した値に設定される。そして、lfnLastScanPosと臨界値を比較して、lfnst_idx[x0][y0]のパージング可否が決定される。
一方、変換ユニットレベルで2次変換が指示されれば、コーディングユニットが含む変換ユニットの間には相関関係が高い可能性がある。これは、予測の方法がコーディングユニットレベルで決定されるためである。よって、コーディングユニットが含む最初の変換ユニットでのみlfnst_idx[x0][y0]がシグナリングされ、シグナリングされたlfnst_idx[x0][y0]は残りの変換ユニットと共有される。つまり、変換ユニットのインデックスを示すsubTuIndexが0である場合にのみ、上述した第1実施例乃至第3実施例を使用してlfnst_idx[x0][y0]がパージングされてもよい。subTuIndexが0より大きければ、それに当たる変換ユニットはlfnst_idx[x0][y0]をパージングせず、共有される最初の変換ユニットのlfnst_idx[x0][y0]の値を利用する。
一方、有効係数をカウントするためにカウンタが使用されるが、デコーダがlfnst_idx[x0][y0]をパージングするのか否かは、変換ブロックの左-上端サブブロック内に存在する有効係数のみを考慮して決定される。これは演算量を減少させるためである。
一方、2次変換が変換ユニットレベルで指示されれば、コーディングユニットレベルで指示される場合よりデコーダの遅延時間は減少されるが、他の遅延時間が発生する可能性がある。例えば、2次変換が変換ユニットレベルで指示されても、ルマ変換係数、Cb変換係数、Cr変換係数のコーディングが全て完了されてから2次変換が指示される。よって、ルマ変換係数のコーディング(処理)が全て完了されても、Cb変換係数、Cr変換係数のコーディング(処理)が完了されてからルマ変換係数に対する逆変換処理が行われる。これはデコーダの他の遅延時間をもたらす。
以下、本明細書では、デコーダの遅延時間を最小化することができる2次変換の指示方法について説明する。
(第4実施例)
デコーダの遅延時間を最小化することができる2次変換の指示方法の一例として、2次変換は変換ユニットレベルで指示されるが、ルマ変換係数をコーデックする前に2次変換に関するシンタックス要素であるlfnst_idx[x0][y0]をパージングする方法がある。よって、デコーダは、Cb変換係数及びCr変換係数を待たず、ルマ変換係数のコーディングが完了された後、直ちにルマ変換係数に対する逆変換プロセスを行うことができる。同じく、デコーダはCb変換係数のコーディングが完了された後、Cr変換係数のコーディングを待たずに直ちにCb変換係数に対する逆変換プロセスを行うことができる。このような2次変換の指示方法はデコーダの遅延時間を最小化して、パイプライン問題を解決することができる。
図25は、本発明の一実施例によるコーディングユニットシンタックスを示す図である。
図25を見ると、2次変換は変換ユニットレベルで指示されるため、2次変換に関するシンタックスであるlfnst_idx[x0][y0]はコーディングユニットレベルでパージングされず、transform_treeによって分割される変換ユニットレベルでパージングされる。
図26は、本発明の他の実施例による変換ユニットレベルで2次変換を指示する方法を示す図である。
図26を見ると、2次変換の指示方法は変換ユニットレベルで指示され、ルマ及びクロマ変換係数コーディング(residual_coding)の前に2次変換に関するシンタックス要素であるlfnst_idx[x0][y0]が先にパージングされる。例えば、lfnst_idx[x0][y0]が変換係数を獲得する前にパージングされれば、それぞれのカラー成分であるY、Cb、Crに対する係数コーディングが完了されたら、直ちにY、Cb、Cr変換係数に対する逆変換が処理される。例えば、Y成分に対する変換係数コーディングが完了されたら、直ちにルマ(Y)変換係数に対する逆変換が行われる。同じく、Cb成分に対する変換係数コーディング(residual_coding)が完了されたら、直ちにCb変換係数に対する逆変換が行われ、Cr成分に対する変換係数コーディング(residual_coding)が完了されたら、直ちにCr変換係数に対する逆変換が行われる。
lfnst_idx[x0][y0]がY、Cb、Crに対する変換係数コーディング(residual_coding)の後にパージングされれば、Yに対する変換係数コーディング(residual_coding)が完了されても、Cb、Crに対する変換係数コーディング(residual_coding)が完了・処理されなければ、Y変換係数に対する逆変換は遂行/処理されない。よって、Yに対応する変換係数コーディング(residual_coding)が完了されても、他の成分(Cb、Cr)の変換係数コーディング(residual_coding)が完了されるまでデコーダはY変換係数に対する逆変換を行うことができず、不必要な遅延時間が発生するという問題があった。しかし、上述したようにlfnst_idx[x0][y0]が変換係数コーディング(residual_coding)前に先にパージングされれば、カラー成分(Y、Cb、Cr)それぞれに対する変換係数コーディング(residual_coding)が完了された後、直ちにカラー成分それぞれの変換係数に対する逆変換が行われるため、デコーダの遅延時間が最小化される効果がある。
transform_unit()シンタックス構造では、tu_cbf_luma[x0][y0]、tu_cbf_cb[x0][y0]、tu_cbf_cr[x0][y0]、transform_skip_flag[x0][y0]などがパージングされる。
詳しくは、tu_cbf_luma[x0][y0]は、現在ルマ変換ブロックが0ではない変換係数を一つ以上含むのか否かを示す要素である。tu_cbf_luma[x0][y0]が1であれば、現在ルマ変換ブロックが0ではない変換係数を一つ以上含むことを示す。tu_cbf_luma[x0][y0]が0であれば、現在ルマ変換ブロックの変換係数がいずれも0であることを示す。tu_cbf_cb[x0][y0]は、現在クロマCb変換ブロックが0ではない変換係数を一つ以上含むのか否かを示す要素である。tu_cbf_cb[x0][y0]が1であれば、現在クロマCb変換ブロックが0ではない変換係数を一つ以上含むことを示す。tu_cbf_cb[x0][y0]が0であれば、現在クロマCb変換ブロックの変換係数がいずれも0であることを示す。tu_cbf_cr[x0][y0]は、現在クロマCr変換ブロックが0ではない変換係数を一つ以上含むのか否かを示す要素である。tu_cbf_cr[x0][y0]が1であれば、現在クロマCr変換ブロックが0ではない変換係数を一つ以上含むことを示す。tu_cbf_cr[x0][y0]が0であれば、現在クロマCr変換ブロックの変換係数がいずれも0であることを示す。transform_skip_flag[x0][y0]は、変換スキップに関するシンタックス要素である。transform_skip_flag[x0][y0]が1であれば、現在ルマ変換ブロックに逆変換が適用されないことを示す。transform_skip_flag[x0][y0]が0であれば、現在ルマ変換ブロックに逆変換が適用されるのか否かは他のシンタックス要素によって決定されることを示す。
図26による2次変換の指示方法の一実施例として、0ではない変換係数の個数に基づくのではなく、スキャン順上最後の有効係数の位置に基づいて2次変換に関するシンタックス要素であるlfnst_idx[x0][y0]がパーシングされる。
まず、lfnLastScanPos変数は1に初期化されて設定される。変数lfnLastScanPosは、図23で説明したように、現在変換ユニットが含む変換ブロックのスキャン順上最後の有効係数の位置情報を示す。詳しくは、lfnLastScanPosが1であれば、変換ユニットが含む全ての変換ブロックに対してスキャン順上最後の有効係数の位置(スキャンインデックス)が臨界値より小さいか、ブロック内の変換係数がいずれも0であることを示す。lfnLastScanPosが0であれば、変換ユニットが含む一つ以上の変換ブロックに対してブロック内に有効係数が一つ以上存在し、スキャン順上最後の有効係数の位置(スキャンインデックス)が臨界値以上であることを示す。
次に、変数numZeroOutSigCoeffは0に初期化されて設定される。変換ブロックに2次変換が適用されれば、スキャン順上最後の有効係数が存在することができない。よって、変数numZeroOutSigCoeffは特定位置に有効係数が存在するのかを示し、それに基づいて2次変換が適用されるのか否かが確認される。例えば、変換ブロックに2次変換が適用されれば、最大16個の有効係数のみが許容されると仮定する。4×4、8×8サイズの変換ブロックには、スキャン順上インデックス[0,7]領域に有効係数が存在し得る(最大8個の0ではない変換係数を許容)。一方、4×4、8×8以外のサイズを有する変換ブロックには、スキャン順上インデックス[0,15]領域に有効係数が存在し得る(最大16個の0ではない変換係数を許容)。よって、スキャン順上最後の有効係数の位置(スキャンインデックス)が上述した有効係数が存在し得る領域以外に存在すれば、デコーダは、現在変換ブロックに2次変換が適用されないことを自ずと認識することができる。
スキャン順上最後の有効係数の位置(スキャンインデックス)に基づいて、係数コーディング(residual_coding)の前に2次変換に関するシンタックス要素であるlfnst_idx[x0][y0]のパージング可否が決定される。よって、デコーダは係数コーディング(residual_coding)の前に、スキャン順上最後の有効係数の位置に関する情報を処理する。
詳しくは、現在ルマ変換ブロックが0ではない有効係数を一つ以上含み(tu_cbf_luma[x0][y0]==1)、現在ルマ変換ブロックに変換スキップが適用されなければ(transform_skip_flag[x0][y0]==0)、ルマのスキャン順上最後の有効係数の位置に関するシンタックス構造であるlast_significant_posが処理される。
tu_cbf_luma[x0][y0]の値が0であれば(tu_cbf_luma[x0][y0]==0)、該当変換ブロックの全ての係数が0であることを示すため、これは係数コーディング(residual_coding)が行われないことを示す。よって、スキャン順上最後の有効係数の位置情報に関する処理は行われる必要がない。
transform_skip_flag[x0][y0]が1であれば、現在ルマ変換ブロックに逆変換が適用されないことを示す。よって、係数コーディング(residual_coding)は、スキャン順上最後の有効係数の位置情報に基づかずに行われる。
現在クロマCb変換ブロックが有効係数を一つ以上含めば(tu_cbf_cb[x0][y0]==1)、現在クロマCb変換ブロックのスキャン順上0ではない最後の係数の位置に関すシンタックス構造であるlast_significant_posが処理される。last_significant_posシンタックス構造は、変換ブロックの左-上端座標である(x0,y0)と、変換ブロックの幅に底が2のlog演算をとった値、変換ブロックの高さに底が2のlog演算をとった値、及び変換ブロックがどのカラー成分であるのかを示す変数であるcIdxを入力として受ける。例えば、cIdxが0であればルマY変換ブロックを示し、cIdxが1であればクロマCb変換ブロックを示し、cIdxが2であればクロマCr変換ブロックを示す。tu_cbf_cb[x0][y0]の値が0であれば(tu_cbf_cb[x0][y0]==0)、該当変換ブロックの全ての係数が0であることを示す。これは係数コーディング(residual_coding)が行われないことを意味するため、スキャン順上0ではない最後の係数の位置情報に対する処理は行われる必要がない。
一方、現在ルマCr変換ブロックが有効係数を一つ以上含めば(tu_cbf_cr[x0][y0]==1)、last_significant_posを処理する前にクロマCbとCrを一つの残差信号で表すのか否かを指示するシンタックス要素であるtu_joint_cbcr_residual[x0][y0]がパーシングされる。例えば、tu_joint_cbcr_residual[x0][y0]1であればCrに対する係数コーディング(residual_coding)は処理されず、Crに対する残差信号はCbの復元された残差信号から誘導される。それに対し、tu_joint_cbcr_residual[x0][y0]が0であれば、tu_cbf_cr[x0][y0]の値によってCrに対する係数コーディング(residual_coding)が行われる。現在クロマCr変換ブロックが有効係数を一つ以上含めば(tu_cbf_cr[x0][y0]==1)、クロマCrのスキャン順上最後の有効係数の位置に関すシンタックス構造であるlast_significant_posが処理される。tu_cbf_cbr[x0][y0]の値が0であれば(tu_cbf_cr[x0][y0]==0)、クロマCr変換ブロックの全ての係数が0であることを示す。これは係数コーディング(residual_coding)が行われないことを意味するため、スキャン順上0ではない最後の係数の位置情報に対する処理は行われる必要がない。
それぞれのカラー成分に対するlast_significant_posの処理が行われることでそれぞれのカラー成分に対するスキャン順上最後の有効係数の位置(スキャンインデックス)が獲得され、それに基づいてlfnLastScanPos及びnumZeroOutSigCoeff値がアップデートされる。
そして、後述する条件i)、ii)、iii)、iv)、v)、vi)、vii)をいずれも満足すれば(いずれも真であれば)、デコーダは係数コーディング(residual_coding)の前にlfnst_idx[x0][y0]をパージングする。
係数コーディング(residual_coding)前のlfnst_idx[x0][y0]シンタックス要素のパージング条件
i)Min(lfnWidth,lfnHeight)>=4
まず、第1条件は、ブロックのサイズに関するものであり、ブロックの幅及び高さがそれぞれ4ピクセル以上であれば、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、デコーダは2次変換を適用可能なブロックサイズ条件を検査する。変数SubWidthC、SubHeightCはカラーフォーマットによって設定されるものであって、それぞれピクチャのルマ成分の幅、高さ対比のクロマ成分の幅、高さの比を示す。例えば、4:2:0カラーフォーマット映像は、ルマサンプル4個当たりそれに相当するクロマサンプル1個を含む構造であるため、SubWidthCとSubHeightCはいずれも2に設定される。他の例として、4:4:4カラーフォーマット映像は、ルマサンプル1個当たりそれに相当するクロマサンプル1個を含む構造であるため、SubWidthCとSubHeightCはいずれも1に設定される。現在ブロックの水平方向のサンプル数であるlfnWidth、垂直方向のサンプル数であるlfnHeightは、SubWidthC、SubHeightCに基づいて設定される。treeTypeがDUAL_TREE_CHROMAであれば変換ユニットはクロマ成分のみを含むため、クロマ変換ブロックの水平方向のサンプル数はルマ変換ブロックの幅であるtbwidthをSubWidthCで割った値と同じである。同じく、クロマ変換ブロックの垂直方向のサンプル数は、ルマ変換ブロックの高さであるtbHeightをSubHeightCで割った値と同じである。treeTypeがSINGLE_TREEであるかDUAL_TREE_LUMAであれば、変換ユニットはルマ成分を含むため、lfnWidth、lfnHeightはそれぞれtbwidth、tbHeightに設定される。2次変換を適用可能なブロックの最小条件は4×4であるため、Min(lfnWidth,lfnHeight)>=4を満足すれば、lfnst_idx[x0][y0]はパージングされる。
ii)sps_lfnst_enabled_flag==1
第2条件は2次変換の活性化または適用可能可否を指示するフラッグ値に関し、2次変換の活性化または適用可能可否を指示するフラッグ(sps_lfnst_enabled_flag)の値が1に設定されれば、デコーダはlfnst_idx[x0][y0]をパージングする。
詳しくは、2次変換は上位レベルシンタックスRBSPで指示される。SPS、PPS、VPS、タイルグループヘッダ、スライスヘッダのうち少なくとも一つに2次変換の活性化及び適用可能可否を指示する1-bitサイズを有するフラッグが含まれる。sps_lfnst_enabled_flagが1であれば、変換ユニットシンタックス内にlfnst_idx[x0][y0]シンタックス要素が存在することを示し、sps_lfnst_enabled_flagが0であれば、変換ユニットシンタックス内にlfnst_idx[x0][y0]シンタックス要素が存在しないことを示す。
iii)CuPredMode[x0][y0]==MODE_INTRA
第3条件は予測モードに関し、2次変換はイントラ予測されたブロックにのみ適用される。よって、現在ブロックがイントラ予測されたブロックであれば、デコーダはlfnst_idx[x0][y0]をパージングする。
iv)IntraSubPartitionsSplitType==ISP_NO_SPLIT
第4条件はISP予測方式が適用されるのか否かに関し、現在ブロックにISPが適用されていなければ、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、図11を参照して説明したように、現在CUに対してCUサイズより小さい多数の変換ユニットに分割される場合、分割された変換ユニットには2次変換はが適用されない。この際、2次変換に関するシンタックス要素であるlfnst_idx[x0][y0]はパージングされずに0と設定される。現在CUに対して変換ツリーよりCUサイズが小さい多数の変換ユニットに分割される場合、ISP予測が現在コーディングユニットに適用される場合を含む。ISP予測方法は、現在コーディングユニットにイントラ予測が適用される場合、予め設定された分割方法によって変換ツリーをCUサイズより小さい多数の変換ユニットに分割する予測方法である。コーディングユニットレベルでISP予測モードが指示され、それに基づいて変数IntraSubPartitionsSplitType変数が設定される。IntraSubPartitionsSplitTypeがISP_NO_SPLITであれば、現在ブロックにISPが適用されないことを示す。変換ユニットレベルで予測サンプルを生成するイントラ予測の特性上、変換ツリーを分割して多数の変換ユニットに分割されたときが分割しなかったときより予測の正確度が上がる。よって、分割された多数の変換ユニットに2次変換が適用されなくても、残差信号のエネルギーが効率的に圧縮される可能性が高い。
v)!intra_mip_flag[x0][y0]
第5条件はイントラ予測方法に関し、現在コーディングユニットにMIP(Matrix based Intra Prediction)が適用されなければ、デコーダはlfnst_idx[x0][y0]シンタックス要素をパージングする。
詳しくは、イントラ予測の一方法都市てMIPが使用されるが、MIPの適用可否はコーディングユニットレベルでintra_mip_flag[x0][y0]で指示される。intra_mip_flag[x0][y0]が1であれば、MIPが現在コーディングユニットの予測に適用されることを示し、現在ブロックの周辺の復元されたサンプルと予め設定された行列の積で予測が行われる。MIPが適用されれば、方向性または無方向性の予測を行う一般的なイントラ予測とは異なる残差信号の性質を示すため、MIPが適用される際には変換ブロックに2次変換が適用されなくてもよい。
vi)lfnLastScanPos==0
第6条件は、変換ブロックのスキャン順上最後の有効係数に関する。
詳しくは、現在変換ユニットが含む変換ブロックのスキャン順上最後の有効係数の位置情報(スキャンインデックス)が予め設定された臨界値より小さければ、2次変換で得られる符号化効率の利得が少ない恐れがある。よって、このような場合、エンコーダは変換ブロックに2次変換を適用しない可能性が高く(lfnst_idx[x0][y0]は0)、よって、エンコーダがlfnst_idx[x0][y0]をシグナリングすることはオーバーヘッドが大きいと考えられる。よって、変換ユニットが含む変換ブロックのうち少なくとも一つの変換ブロックに対して、スキャン順上最後の有効係数の位置(スキャンインデックス)が予め設定された臨界値以上である場合にのみ、lfnst_idx[x0][y0]がパージングされる。
言い換えれば、上述したように臨界値は0以上の整数である。例えば、臨界値が1と仮定すると、スキャン順上最後の有効係数の位置(スキャンインデックス)が臨界値以上ということは、有効係数がブロックの左上端(スキャンインデックス0、DC)以外の位置に存在するという意味である。この際、変換ブロックのスキャン順上最後の有効係数の位置が臨界値以上であるということは、「lfnLastScanPos==」で表されてもよい。
vii)numZeroOutSigCoeff==0
第7条件は、特定位置に存在する有効係数に関する。
詳しくは、現在ブロックに2次変換が適用されれば、スキャン位置上の特定位置では有効係数が存在することができない。つまり、numZeroOutSigCoeff変数は、特定位置に0ではない変換係数が存在するのか否かを示す。例えば、現在ブロックに2次変換が適用されれば、最大16個の有効係数のみが許容されると仮定する。4×4、8×8サイズの変換ブロックには、スキャン順上インデックス[0,7]領域に有効係数が存在し得る(最大8個の0ではない変換係数を許容)。一方、4×4、8×8以外のサイズを有する変換ブロックには、スキャン順上インデックス[0,15]領域に有効係数が存在し得る(最大16個の0ではない変換係数を許容)。よって、スキャン順上最後の有効係数の位置(スキャンインデックス)が上述した有効係数が存在し得る領域以外に存在すれば、デコーダは、現在ブロックに2次変換が適用されないことを自ずと認識することができる。よって、numZeroOutSigCoeff>0であれば、現在ブロックに2次変換が適用されないということであるため、lfnst_idx[x0][y0]はパージングされずに0と設定される。
言い換えれば、numZeroOutSigCoeffが0でなければ、特定位置に有効係数が存在することを意味するため、lfnst_idx[x0][y0]はパージングされずに0と設定される。それに対し、numZeroOutSigCoeffが0であれば、特定位置に有効係数が存在しないことを意味するため、lfnst_idx[x0][y0]はパージングされる。
上述した条件i)乃至vii)がいずれも真であればlfnst_idx[x0][y0]がパージングされ、そうではければlfnst_idx[x0][y0]はパージングされずに0と設定される。
図27は、本発明の実施例によるスキャン順上の最後の有効係数の位置に関するシンタックス構造を示す図である。
図27を見ると、last_significant_posシンタックス構造はそれぞれのカラー成分Y、Cb、Cr変換ブロックに対するスキャン順上最後の有効係数の位置情報を含むシンタックス構造を意味する。そして、last_significant_posシンタックス構造は、変換ブロックの左-上端座標である(x0,y0)と、変換ブロックの幅に底が2のlogをとったlog2TbWidth、変換ブロックの高さに底が2のlogをとったlog2TbHeight、及び変換ブロックがどのカラー成分を示すcIdxを入力として受ける。cIdxが0であればルマ変換ブロックを、cIdxが1であればクロマCb変換ブロックを、cIdxが2であればクロマCr変換ブロックを示す。
last_significant_posシンタックス構造では、スキャン順上最後の有効係数の位置情報に関するシンタックス要素がパーシングされる。詳しくは、スキャン順上最後の有効係数のx座標値、y座標値に関するシンタックス要素がパーシングされる。この際、それぞれの座標値は、プレフィックス(prefix)情報とサフィックス(suffix)情報に分割されて指示される。デコーダは、x座標に対するプレフィックス情報とサフィックス情報に基づいて、スキャン順上最後の有効係数のx座標であるLastSignificantCoeffX変数を設定する。同じく、デコーダは、y座標に対するプレフィックス情報とサフィックス情報に基づいて、スキャン順上最後の有効係数のy座標であるLastSignificantCoeffY変数を設定する。デコーダは、図27に示したように、do{}while()構造でLastSignificantCoeffX、LastSignificantCoeffY、DiagScanOrderに基づいて、スキャン順上最後の有効係数のスキャンインデックスえあるlastScanPosを設定する。また、デコーダはlastScanPosに基づいて、2次変換に関するシンタックス要素であるlfnst_idx[x0][y0]のパージング条件に活用される変数であるnumZeroOutSigCoeffとlfnstLastScanPosをアップデートする。
現在ブロックに2次変換が適用されれば、スキャン位置上の特定位置では有効係数が存在することができない。numZeroOutSigCoeff変数は、このような位置で0ではない変換係数が存在するのかを示す。例えば、現在ブロックに2次変換が適用されれば、最大16個の有効係数のみが許容されると仮定する。4×4、8×8サイズの変換ブロックには、スキャン順上インデックス[0,7]領域に有効係数が存在し得る(最大8個の0ではない変換係数を許容)。一方、4×4、8×8以外のサイズを有する変換ブロックには、スキャン順上インデックス[0,15]領域に有効係数が存在し得る(最大16個の0ではない変換係数を許容)。よって、スキャン順上最後の有効係数の位置(スキャンインデックス)が上述した有効係数が存在し得る領域以外に存在すれば、デコーダは、現在ブロックに2次変換が適用されないことを自ずと認識することができる。2次変換を適用可能なブロックの最小サイズは4×4で、変換スキップが適用されれば(transform_skip_flag[x0][y0]==1)、2次変換が適用されない。よって、変換ブロックの幅が4以上で(log2TbWidth>=2)、変換ブロックの高さが4以上で(log2TbHeight>=2)、変換スキップが適用されない(transform_skip_flag[x0][y0]==0)変換ブロックに対して、numZeroOutSigCoeffがアップデートされる。2次変換を適用されれば、4×4、8×8サイズの変換ブロックに対してはスキャン順上インデックス[0,7]領域でのみ0ではない変換係数が存在し得る。よって、変換ブロックが4×4、8×8で、((log2TbWidth==2||log2TbHeight==3)&&(log2TbWidth==log2TbHeight))、lastScanPosが7より大きければ(lastScanPos>7)、numZeroOutSigCoeffは1増加する。2次変換を適用可能な4×4、8×8サイズを除いた変換ブロックに対して、はスキャン順上インデックス[0,15]領域でのみ0ではない変換係数が存在し得る。よって、lastScanPosが15より大きければ(lastScanPos>15)、numZeroOutSigCoeffは1増加する。
デコーダは、lastScanPosに基づいてlfnstLastScanPosを決定する。詳しくは、変換ブロックの幅及び高さが4以上で、変換ブロックに変換スキップが適用されなければ、lfnstLastScanPosは下記数式6のように設定される。言い換えれば、log2TbWidth>=2で、log2TbHeight>=2で、transform_skip_flag[x0][y0]が0であれば、lfnstLastScanPosは下記数式1のように設定される。この際、transform_skip_flag[x0][y0]が0であれば、現在変換ブロックに変換スキップが適用されない場合を意味する。
上述したように、lfnstLastScanPosの初期化値は1に設定される。
数式6において、cIdxは、上述したように現在変換ブロックのカラー成分を意味する変数を示す。
数式6によると、直線のlfnstLastScanPosが1でlastScanPosがlfnstLastScanPosTh[cIdx]より小さければ、lfnstLastScanPosは1にアップデートされる。それに対し、直線のlfnstLastScanPosが0であるか、lastScanPosがlfnstLastScanPosTh[cIdx]以上であれば、lfnstLastScanPosは0にアップデートされる。
言い換えれば、変換ユニットが含む全ての変換ブロックのlastScanPosが臨界値より小さいか、全ての変換ブロックの個数がいずれも0であればlfnstLastScanPosは1に決定され、図26のlfnst_idx[x0][y0]パージング条件によって、lfnst_idx[x0][y0]はパージングされずに0に設定される。これは、現在ブロックに2次変換が適用されないことを示す。それに対し、変換ユニットが含む変換ブロックのうちいずれか一つでもLastScanPosが臨界値以上であれば、lfnstLastScanPosは0に決定され、図26で説明した条件i)、ii)、iii)、iv)、v)、vii)をいずれも満足すれば(真であれば)、デコーダはlfnst_idx[x0][y0]をパージングする。デコーダは、lfnst_idx[x0][y0]をパージングして現在ブロックに2次変換が適用されるか否かを確認し、現在ブロックに2次変換が適用されれば、2次変換に使用される変換カーネルを確認/決定する。
数式6のlfnstLastScanPosTh[cIdx]は予め設定された0以上の整数値であって、エンコーダとデコーダがいずれも同じ値を使用する。また、全てのカラー成分が同じ臨界値を使用してもよい。この場合、lfnstLastScanPosは下記数式7のように設定される。
lfnstLastScanPosThは予め設定された0以上の整数値であって、エンコーダとデコーダがいずれも同じ値を使用する。例えば、lfnstLastScanPosThは1であってもよい。つまり、lastScanPosが1以上であればlfnstLastScanPosは0にアップデートされ、lfnst_idx[x0][y0]がパージングされる。この際、臨界値(lfnstLastScanPosTh)は整数値であるため、lastScanPosが1以上であればlastScanPosが0より大きい場合と同じ意味である。図27では全てのカラー成分が同じ臨界値である1の場合について説明したが、本発明はこれに限らない。
図28は、本発明の実施例によるresidual_codingシンタックス構造を示す図である。
図28を見ると、スキャン順上最後の有効係数の位置情報は、係数コーディング(residual_coding)の目に指示される。よって、係数コーディング(residual_coding)のシンタックス構造は、スキャン順上最後の有効係数の位置情報に関するシンタックス構造を含まなくてもよい。例えば、スキャン順上最後の有効係数の位置情報は、スキャン順上最後の有効係数のx座標に対するプレフィックス、サフィックス、y座標に対するプレフィックス、サフィックスである。図28による係数コーディング(residual_coding)シンタックス構造を調べると、係数コーディング(residual_coding)の前に決定されたスキャン順上最後の有効係数のx座標、y座標であるLastSignificantCoeffX、LastSignificantCoeffYに基づいて係数コーディング(residual_coding)が行われる。
第4実施例による2次変換の指示方法は、numSigCoeffカウンタを使用しない。よって、(xC,yC)位置の係数が有効係数であっても(sig_coeff_flag[xC][yC]==1)、numSigCoeffはアップデートされない。言い換えれば、第4実施例による2次変換の指示方法は、有効係数に対するカウンタを使用しない方法である。また、第4実施例による2次変換の指示方法によると、lastScanPosに基づいてnumZeroOutSigCoeff変数が設定されるため、係数コーディング(residual_coding)でsig_coeff_flagに基づくカウンタは使用されなくてもよい。
図29は、本発明の実施例によるビデオ信号処理方法を示す順序図である。
以下では、図15乃至図28を介して説明した実施例に基づくビデオ信号処理方法及び装置について説明する。
ビデオ信号復号化装置は、図29で説明したビデオ信号処理方法を行うプロセッサを含む。
まず、前記プロセッサは、コーディングユニットの2次変換に関するシンタックス要素が含まれたビットストリームを受信する。
前記プロセッサは、予め設定された一つ以上の条件が満足されたのか否かを確認し、前記予め設定された一つ以上の条件が満足されれば、前記コーディングユニットの2次変換に関するシンタックス要素をパージングするS2910、S2920。一方、プロセッサは、予め設定された一つ以上の条件が満足されなければ、前記コーディングユニットの2次変換に関するシンタックス要素をパージングしないS2930。この際、2次変換に関するシンタックス要素の値は0に設定される。
図29で説明するコーディングユニットの2次変換に関するシンタックス要素は、図5乃至図28で説明した現在コーディングユニットに含まれる変換ブロック2次変換が適用されるのか否かを示すシンタックス要素であるlfnst_idx[x0][y0]である。
前記プロセッサはS2920ステップを介してコーディングユニットの2次変換に関するシンタックス要素をパージングし、パージングされたシンタックス要素に基づいて、前記コーディングユニットに含まれる変換ブロックに前記2次変換が適用されるのか否かを確認するS2940。
この際、前記変換ブロックに前記2次変換が適用されていれば、プロセッサは前記変換ブロックを構成する一つ以上のサブブロックのうち一つである第1サブブロックの一つ以上の係数に基づく2次逆変換を行い、前記第1サブブロックに対する一つ以上の逆変換係数を確認するS2950。
そして、前記プロセッサはS2950ステップで獲得した前記一つ以上の逆変換係数に基づく1次逆変換を行い、前記変換ブロックに対する残差サンプルを確認するS2960。
前記2次変換は、低帯域非-分離変換(LFNST)である。そして、前記変換ブロックは、垂直変換及び水平変換にそれぞれ分離されて行われる1次変換が適用されたブロックである。この際、前記1次逆変換は前記1次変換に対する逆変換であり、前記2次逆変換は前記2次変換に対する逆変換を意味する。
前記コーディングユニットの2次変換に関するシンタックス要素は、前記コーディングユニットに前記2次変換が適用されるのか否かを指示する情報と、前記2次変換に使用される変換カーネルを指示する情報と、を含む。
前記第1サブブロックは予め設定されたスキャン順による最初のサブブロックであるが、この際、前記第1サブブロックのインデックスは0である。
前記予め設定された一つ以上の条件のうち第1条件は、前記第1サブブロックの前記一つ以上の係数のうち第1係数の位置を示すインデックス値が予め設定された臨界値より大きい場合である。この際、前記第1係数は予め設定されたスキャン順による最後の有効係数であり、前記有効係数は0ではない係数を意味する。前記予め設定された臨界値は0である。前記予め設定されたスキャン順は、図13、14で説明した右上側対角スキャン順である。
前記予め設定された一つ以上の条件のうち第2条件は、前記変換ブロックの幅及び高さは4ピクセル以上である。
前記予め設定された一つ以上の条件のうち第3条件は、前記ビットストリームに含まれた変換スキップフラッグ値が特定値ではない場合である。この際、変換スキップフラッグの値が特定値を有すれば、前記変換スキップフラッグは前記変換ブロックに前記1次変換及び前記2次変換が適用されないことを指示する。
前記予め設定された一つ以上の条件のうち第4条件は、前記第1サブブロックの前記一つ以上の係数のうち少なくとも一つの係数は0ではなく、前記少なくとも一つ以上の係数は予め設定されたスキャン順による最初の位置を除いたところに存在する場合である。この際、前記予め設定されたスキャン順による最初の位置は、上述したように水平、垂直座標の値が(0,0)である位置を意味するか、予め設定されたスキャン順(例えば、右上側対角順)による最初の位置を意味する。
また、前記コーディングユニットは複数のコーディングブロックで構成される。この際、前記複数のコーディングブロックそれぞれに対応する変換ブロックのうち少なくともいずれか一つでも前記予め設定された一つ以上の条件を満足すれば、前記2次変換に関するシンタックス要素がパージングされる。
一方、2次変換に関するシンタックス要素がパーシングされないか0に設定される場合S2930、またはS2940ステップで前記コーディングユニットに含まれる変換ブロックに前記2次変換が適用されないと確認される場合、プロセッサは、前記変換ブロックの一つ以上の係数に基づく1次逆変換を行って、前記変換ブロックに対する残差サンプルを獲得するS2970。
この際、上述した1次逆変換、2次逆変換はそれぞれ1次変換、2次変換に対する逆変換である。
図29で説明したビデオ信号復号化装置で行われるビデオ信号処理方法、またはそれと類似した方法がビデオ信号符号化装置で行われる。
ビデオ信号符号化装置は、ビデオ信号を符号化するプロセッサを含む。
この際、前記プロセッサは、コーディングユニットに含まれるブロックの残差サンプルに対する1次変換を行い、前記ブロックに対する複数の1次変換係数を獲得する。前記複数個の1次変換係数のうち一つ以上の係数に基づく2次変換を行い、前記ブロックを構成するサブブロックのうち一つである第1サブブロックに対する一つ以上の2次変換係数を獲得する。前記一つ以上の2次変換係数に対する情報、及び前記コーディングユニットの2次変換に関するシンタックス要素を符号化してビットストリームを獲得する。
前記2次変換は低帯域非-分離変換(LFNST)であり、前記1次変換は水平変換及び垂直変換にそれぞれ分離されて行われてもよい。
また、前記2次変換に関するシンタックス要素は、予め設定された一つ以上の条件を満足すれば符号化される。前記2次変換に関するシンタックス要素は、前記コーディングユニットに前記2次変換が適用されるのか否かを指示する情報と、前記2次変換に使用される変換カーネルを指示する情報と、を含む。この際、前記2次変換に関するシンタックス要素は、図15乃至図28で説明したシンタックス要素であるlfnst_idx[x0][y0]である。
前記第1サブブロックは、予め設定されたスキャン順による最初のサブブロックである。この際、前記第1サブブロックのインデックスは0である。
前記予め設定された一つ以上の条件のうち第1条件は、前記一つ以上の2次変換係数のうち第1係数の位置を示すインデックス値が予め設定された臨界値より大きい場合である。この際、前記第1係数は予め設定されたスキャン順による最後の有効係数であり、前記有効係数は0ではない係数を意味する。前記予め設定された臨界値は0である。前記予め設定されたスキャン順は、図13、14で説明した右上側対角スキャン順である。
前記予め設定された一つ以上の条件のうち第2条件は、前記1次変換ブロックの幅及び高さは4ピクセル以上である。
前記予め設定された一つ以上の条件のうち第3条件は、前記ビットストリームに含まれた変換スキップフラッグ値が特定値ではない場合である。この際、変換スキップフラッグの値が特定値を有すれば、前記変換スキップフラッグは前記ブロックに前記1次変換及び前記2次変換が適用されないことを指示する。
前記予め設定された一つ以上の条件のうち第4条件は、前記一つ以上の2次変換係数のうち少なくとも一つの係数は0ではなく、前記一つ以上の係数は予め設定されたスキャン順による最初の位置を除いたところに存在する場合である。この際、前記予め設定されたスキャン順による最初の位置は、上述したように水平、垂直座標の値が(0,0)である位置を意味するか、予め設定されたスキャン順(例えば、右上側対角順)による最初の位置を意味する。
また、前記コーディングユニットは複数のコーディングブロックで構成される。この際、前記複数のコーディングブロックそれぞれに対応するコーディングユニットに含まれる(変換)ブロックのうち少なくともいずれか一つでも前記予め設定された一つ以上の条件を満足すれば、前記2次変換に関するシンタックス要素が符号化される。
また、ビデオ信号符号化装置は、図29で説明したビデオ信号処理方法を行うビデオ信号復号化プロセッサを含んでもよい。
上述したように、ビットストリームには図15乃至図29で説明したコーディングユニットの2次変換に関するシンタックス要素が含まれる。この際、前記ビットストリームは非-一時的コンピュータ読取可能媒体に貯蔵される。一方、ビデオ信号符号化装置は、上述した予め設定された一つ以上の条件が満足されなければ、2次変換に関するシンタックス要素を前記ビットストリームに含まないか、2次変換に関するシンタックス要素を0に設定する。ビットストリームは、図29を介して説明したビデオ信号復号化装置によって復号化されるか、上述したビデオ信号符号化装置によって符号化される。
このようなビットストリームを符号化する方法は、例えば、コーディングユニットに含まれるブロックの残差サンプルに対する1次変換を行って前記ブロックに対する複数個の1次変換係数を獲得し、前記複数個の1次変換係数のうち一つ以上の係数に基づく2次変換を行って、前記ブロックを構成するサブブロックのうち一つである第1サブブロックに対する一つ以上の2次変換係数を獲得し、及び前記一つ以上の2次変換係数に対する情報及び前記コーディングユニットの2次変換に関するシンタックス要素を符号化する過程を含む符号化方法である。
本明細書で説明する係数を獲得するということは、係数に関するピクセル/ブロックを獲得するという意味であり、残差サンプルを獲得するということは、残差サンプルに関する残差信号/ピクセル/ブロックを獲得するという意味である。
上述した本発明の実施例は多様な手段を介して具現される。例えば、本発明の実施例は、ハードウェア、ファームウェア(firmware)、ソフトフェアまたはそれらの組み合わせによって具現される。
ハードウェアによる具現の場合、本発明の実施例による方法は、一つまたはそれ以上のASICs(Application Specific Integrated Circuits)、DSPs(Digital Signal Processors)、DSDPs(Digital Signal Processing Devices)、PDLs(Programmable Logic Devices)、FPGAs(Field Programmable Gate Arrays)、プロセッサ、コントローラ、マイクロコントローラ、マイクロプロセッサなどによって具現される。
ファームフェアやソフトウェアによる具現の場合、本発明の実施例による方法は、上述した機能または動作を行うモジュール、手順または関数などの形態で具現される。ソフトウェアコードは、メモリに貯蔵されてプロセッサによって具現される。前記メモリはプロセッサの内部または外部に位置し、既に公知の多様な手段によってプロセッサとデータを交換する。
一部の実施例はコンピュータによって実行されるプログラムモジュールのようなコンピュータで実行可能な命令語を含む記録媒体の形態にも具現される。コンピュータで判読可能な媒体は、コンピュータでアクセスされ得る任意の利用可能な媒体であり、揮発性及び非揮発性媒体、分離型及び非分離型媒体をいずれも含む。また、コンピュータ読取可能媒体は貯蔵媒体及び通信媒体をいずれも含む。コンピュータ貯蔵媒体は、コンピュータ判読可能な命令語、データ構造、プログラムモジュール、またはその他のデータのような情報の貯蔵のための任意の方法または技術で具現された揮発性及び非揮発性媒体、分離型及び非分離型媒体をいずれも含む。通信媒体は、典型的にコンピュータ読取可能な命令語、データ構造、またはプログラムモジュールのような変調されたデータ信号のその他のデータ、またはその他の伝送メカニズムを含み、任意の情報伝達媒体を含む。
上述した本発明の説明は例示のためのものであって、本発明が属する技術分野における通常の知識を有する者は、本発明の技術的思想や必須的特徴を変更せずも他の具体的な形態に容易に変更可能であることを理解できるはずである。よって、上述した実施例は全ての面で例示的なものであり、限定的なものではないと理解すべきである。例えば、単一型として説明されている各構成要素は分散されて実施されてもよく、同じく分散されていると説明されている構成要素も結合された形態で実施されてもよい。
本発明の範囲は、上述した詳細な説明よりは後述する特許請求の範囲によって示され、特許請求の範囲の意味及び範囲、そしてその均等概念から導き出される全ての変更または変形された形態が本発明の範囲に含まれると解釈すべきである。