以下、図面を参照して、本開示の実施形態について詳細に説明する。
映像の符号化および復号は、ブロック単位で行われる。一例として、コーディングブロック、変換ブロック、または予測ブロックに対して、変換、量子化、予測、インループフィルタリング、または復元などの符号化/復号処理が行われる場合がある。
以下、符号化/復号の対象であるブロックを「現在ブロック」と称する。一例として、現在ブロックは、現在の符号化/復号処理ステップに応じて、コーディングブロック、変換ブロック、または予測ブロックを示す場合がある。
なお、本明細書で使用される用語「ユニット」は、特定の符号化/復号プロセスを行うための基本単位を示し、「ブロック」は、所定のサイズのサンプルアレイを示すものと理解し得る。他に断らない限り、「ブロック」と「ユニット」は、同等な意味で使用される場合がある。一例として、後述する実施形態において、コーディングブロックとコーディングユニットは、互いに同等な意味を有するものと理解し得る。
図1は、本開示の一実施形態による映像符号化器(エンコーダ)のブロック図である。
図1を参照すると、映像符号化装置100は、ピクチャ分割部110と、予測部120、125と、変換部130と、量子化部135と、再整列部160と、エントロピー符号化部165と、逆量子化部140と、逆変換部145と、フィルタ部150と、メモリ155とを含む場合がある。
図1に示れている各構成要素は、映像符号化装置で互いに異なる特徴的な機能を示すために独立的に図示したものであり、各構成要素が分離されたハードウェアもしくは一つのソフトウェア構成単位からなることを意味しない。すなわち、各構成要素は、説明の便宜上、それぞれの構成要素として並べて含むものであって、各構成要素の少なくとも二つの構成要素がまとめられて一つの構成要素になるか、一つの構成要素が複数個の構成要素に分けられて機能を果たす場合があり、このような各構成要素の統合された実施形態および分離された実施形態も本開示の本質から逸脱しない限り、本開示の権利範囲に含まれる。
また、一部の構成要素は、本開示で本質的な機能を果たす必須な構成要素ではなく、単に性能を向上させるための選択的構成要素であり得る。本開示は、単に性能向上のために使用される構成要素以外の本開示の本質を実現するために必須な構成要素のみを含んで実現される場合があり、単に性能向上のために使用される選択的構成要素以外の必須構成要素のみを含む構造も本開示の権利範囲に含まれる。
ピクチャ分割部110は、入力されたピクチャを少なくとも一つの処理単位に分割する場合がある。ここで、処理単位は、予測単位(Prediction Unit:PU)であってもよく、変換単位(Transform Unit:TU)であってもよく、符号化単位(Coding Unit:CU)であってもよい。ピクチャ分割部110では、一つのピクチャに対して複数の符号化単位、予測単位および変換単位の組み合わせに分割し、所定の基準(例えば、費用関数)に基づいて、一つの符号化単位、予測単位および変換単位の組み合わせを選択し、ピクチャを符号化する場合がある。
例えば、一つのピクチャは、複数個の符号化単位に分割される場合がある。ピクチャで符号化単位を分割するためには、クワッドツリー構造(Quad Tree Structure)などの再帰的なツリー構造を使用する場合があり、一つの映像または最大サイズの符号化単位(largest coding unit)をルートとして他の符号化単位に分割される符号化ユニットは、分割された符号化単位の個数だけの子ノードを有して分割される場合がある。所定の制限によってこれ以上分割されない符号化単位は、リーフノードになる。すなわち、一つのコーディングユニットに対して正方形分割のみが可能であると仮定する場合、一つの符号化単位は、最大4個の異なる符号化単位に分割される場合がある。
以下、本開示の実施形態では、符号化単位は、符号化を行う単位の意味で使用することもでき、復号を行う単位の意味で使用することもできる。
予測単位は、一つの符号化単位内で同じサイズの少なくとも一つの正方形または長方形などの形状を有して分割されたものであってもよく、一つの符号化単位内で分割された予測単位のいずれか一つの予測単位が、他の一つの予測単位と相違する形状および/またはサイズを有するように分割されたものであってもよい。
符号化単位に基づいてイントラ予測を行う予測単位を生成する時に、最小符号化単位ではない場合、複数の予測単位N×Nに分割せず、イントラ予測を行う場合がある。
予測部120、125は、インタ予測を行うインタ予測部120と、イントラ予測を行うイントラ予測部125とを含む場合がある。予測単位に対してインタ予測を使用するかまたはイントラ予測を行うかを判定し、各予測方法による具体的な情報(例えば、イントラ予測モード、モーションベクトル、参照ピクチャなど)を判定する場合がある。この場合、予測が行われる処理単位と予測方法および具体的な内容が定められる処理単位とは、異なる場合がある。例えば、予測の方法と予測モードなどは予測単位で判定され、予測の実行は、変換単位で行われることもできる。生成された予測ブロックと原本ブロックとの残差値(残差ブロック)は、変換部130に入力される場合がある。また、予測のために使用した予測モード情報、モーションベクトル情報などは、残差値とともにエントロピー符号化部165で符号化されて復号器に伝達される場合がある。特定の符号化モードを使用する場合、予測部120、125を介して予測ブロックを生成せず、原本ブロックをそのまま符号化して復号部に送信することも可能である。
インタ予測部120は、現ピクチャの前のピクチャまたは後のピクチャの少なくとも一つのピクチャの情報に基づいて予測単位を予測することもでき、場合によっては、現ピクチャ内の符号化が完了した一部領域の情報に基づいて予測単位を予測することもできる。インタ予測部120は、参照ピクチャ補間部と、モーション予測部と、動き補償部とを含む場合がある。
参照ピクチャ補間部では、メモリ155から参照ピクチャ情報の提供を受け、参照ピクチャで整数画素以下の画素情報を生成する場合がある。輝度画素の場合、1/4画素単位で整数画素以下の画素情報を生成するために、異なるフィルタ係数を有するDCTベースの8タップ補間フィルタ(DCT-based Interpolation Filter)が使用される場合がある。色差信号の場合、1/8画素単位で整数画素以下の画素情報を生成するために、異なるフィルタ係数を有するDCTベースの4タップ補間フィルタ(DCT-based Interpolation Filter)が使用される場合がある。
モーション予測部は、参照ピクチャ補間部によって補間された参照ピクチャに基づいてモーション予測を行う場合がある。モーションベクトルを算出するための方法として、FBMA(Full search-based Block Matching Algorithm)、TSS(Three Step Search)、NTS(New Three-Step Search Algorithm)などの様々な方法が使用される場合がある。モーションベクトルは、補間された画素に基づいて、1/2または1/4画素単位のモーションベクトル値を有する場合がある。モーション予測部では、異なるモーション予測方法により現在予測単位を予測する場合がある。モーション予測方法として、スキップ(Skip)方法、マージ(Merge)方法、AMVP(Advanced Motion Vector Prediction)方法、イントラブロックコピー(Intra Block Copy)方法などの様々な方法が使用される場合がある。
イントラ予測部125は、現ピクチャ内の画素情報である現在ブロック周辺の参照ピクセル情報に基づいて予測単位を生成する場合がある。現在予測単位の周辺ブロックがインタ予測を行ったブロックであるため、参照ピクセルがインタ予測を行ったピクセルである場合、インタ予測を行ったブロックに含まれる参照ピクセルを周辺のイントラ予測を行ったブロックの参照ピクセル情報の代わりに使用する場合がある。すなわち、参照ピクセルが可用でない場合、可用でない参照ピクセル情報を可用な参照ピクセルの少なくとも一つの参照ピクセルの代わりに使用する場合がある。
イントラ予測で予測モードは、参照ピクセル情報を予測方向に応じて使用する方向性予測モードと、予測を行う時に方向性情報を使用しない非方向性モードを有する場合がある。輝度情報を予測するためのモードと色差情報を予測するためのモードが相違する場合があり、色差情報を予測するために、輝度情報を予測するために使用されたイントラ予測モード情報または予測された輝度信号情報を活用する場合がある。
イントラ予測を行う時に、予測単位のサイズと変換単位のサイズが同一である場合、予測単位の左側に存在するピクセル、左上端に存在するピクセル、上端に存在するピクセルに基づいて、予測単位に対するイントラ予測を行う場合がある。しかし、イントラ予測を行う時に、予測単位のサイズと変換単位のサイズが相違する場合、変換単位に基づく参照ピクセルを用いてイントラ予測を行う場合がある。また、最小符号化単位に対してのみN×N分割を使用するイントラ予測を使用する場合がある。
イントラ予測方法は、予測モードによって、参照画素にAIS(Adaptive Intra Smoothing)フィルタを適用した後、予測ブロックを生成する場合がある。参照画素に適用されるAISフィルタの種類は、相違する場合がある。イントラ予測方法を実行するために、現在予測単位のイントラ予測モードは、現在予測単位の周辺に存在する予測単位のイントラ予測モードから予測する場合がある。周辺予測単位から予測されたモード情報を用いて現在予測単位の予測モードを予測する場合、現在予測単位と周辺予測単位のイントラ予測モードが同一であると、所定のフラグ情報を用いて、現在予測単位と周辺予測単位の予測モードが同一であるという情報を送信する場合があり、仮に、現在予測単位と周辺予測単位の予測モードが相違すると、エントロピー符号化を行って現在ブロックの予測モード情報を符号化する場合がある。
また、予測部120、125で生成された予測単位に基づいて予測を行った予測単位と予測単位の原本ブロックとの差値である残差値(Residual)情報を含む残差ブロックが生成される場合がある。生成された残差ブロックは、変換部130に入力される場合がある。
変換部130では、原本ブロックと予測部120、125を介して生成された予測単位の残差値(residual)情報を含む残差ブロックをDCT(Discrete Cosine Transform)またはDST(Discrete Sine Transform)などの変換方法を使用して変換させる場合がある。ここで、DCT変換コアは、DCT2またはDCT8の少なくとも一つを含み、DST変換コアは、DST7を含む。残差ブロックを変換するためにDCTを適用するかまたはDSTを適用するかは、残差ブロックを生成するために使用された予測単位のイントラ予測モード情報に基づいて判定する場合がある。残差ブロックに対する変換をスキップすることもできる。残差ブロックに対する変換をスキップするか否かを示すフラグを符号化する場合がある。変換スキップは、サイズが閾値以下である残差ブロック、ルーマ成分または4:4:4のフォーマット下でのクロマ成分に対して許容される場合がある。
量子化部135は、変換部130で周波数領域に変換された値を量子化する場合がある。ブロックによってまたは映像の重要度によって量子化係数は変わる場合がある。量子化部135で算出された値は、逆量子化部140と再整列部160に提供される場合がある。
再整列部160は、量子化した残差値に対して係数値の再整列を行う場合がある。
再整列部160は、係数スキャニング(Coefficient Scanning)方法により、二次元のブロック形状係数を一次元のベクトル形状に変更する場合がある。例えば、再整列部160では、ジグザグスキャン(Zig-Zag Scan)方法を用いて、DC係数から高周波数領域の係数までスキャンし、一次元のベクトル形状に変更させる場合がある。変換単位のサイズおよびイントラ予測モードに応じて、ジグザグスキャンの代わりに、二次元のブロック形状係数を列方向にスキャンする垂直スキャン、二次元のブロック形状係数を行方向にスキャンする水平スキャンが使用されることもできる。すなわち、変換単位のサイズおよびイントラ予測モードに応じて、ジグザグスキャン、垂直方向スキャンおよび水平方向スキャンのいずれかのスキャン方法が使用されるかを判定する場合がある。
エントロピー符号化部165は、再整列部160によって算出された値に基づいてエントロピー符号化を行う場合がある。エントロピー符号化は、例えば、指数ゴロム(Exponential Golomb)、CAVLC(Context-Adaptive Variable Length Coding)、CABAC(Context-Adaptive Binary Arithmetic Coding)などの様々な符号化方法を使用する場合がある。
エントロピー符号化部165は、再整列部160および予測部120、125から符号化単位の残差値係数情報およびブロックタイプ情報、予測モード情報、分割単位情報、予測単位情報および伝送単位情報、モーションベクトル情報、参照フレーム情報、ブロックの補間情報、フィルタリング情報などの様々な情報を符号化する場合がある。
エントロピー符号化部165では、再整列部160から入力された符号化単位の係数値をエントロピー符号化する場合がある。
逆量子化部140および逆変換部145では、量子化部135で量子化された値を逆量子化し、変換部130で変換された値を逆変換する。逆量子化部140および逆変換部145で生成された残差値(Residual)は、予測部120、125に含まれた動き推定部、動き補償部およびイントラ予測部により予測された予測単位とまとめられて復元ブロック(Reconstructed Block)を生成する場合がある。
フィルタ部150は、デブロッキングフィルタ、オフセット補正部、ALF(Adaptive Loop Filter)の少なくとも一つを含む場合がある。
デブロッキングフィルタは、復元されたピクチャでブロック間の境界によって生じたブロック歪みを除去する場合がある。デブロッキングを行うか否かを判断するために、ブロックに含まれたいくつかの列または行に含まれたピクセルに基づいて、現在ブロックにデブロッキングフィルタを適用するか否かを判断する場合がある。ブロックにデブロッキングフィルタを適用する場合、必要なデブロッキングフィルタリング強度に応じて、強いフィルタ(Strong Filter)または弱いフィルタ(Weak Filter)を適用する場合がある。また、デブロッキングフィルタを適用するのに際し、垂直フィルタリングおよび水平フィルタリングを行う時に、水平方向フィルタリングおよび垂直方向フィルタリングが並列処理されるようにする場合がある。
オフセット補正部は、デブロッキングを行った映像に対して、ピクセル単位で原本映像とのオフセットを補正する場合がある。特定のピクチャに対するオフセット補正を行うために、映像に含まれたピクセルを所定の数の領域に区分した後、オフセットを行う領域を判定し、当該領域にオフセットを適用する方法または各ピクセルのエッジ情報を考慮してオフセットを適用する方法を使用する場合がある。
ALF(Adaptive Loop Filtering)は、フィルタリングした復元映像と最初の映像とを比較した値に基づいて行われる場合がある。映像に含まれたピクセルを所定のグループに分けた後、当該グループに適用される一つのフィルタを判定し、グループごとに差別的にフィルタリングを行う場合がある。ALFを適用するか否かに関する情報は、輝度信号は符号化単位(Coding Unit、CU)別に送信される場合があり、それぞれのブロックによって適用されるALFフィルタの形状およびフィルタ係数は、異なる場合がある。また、適用対象ブロックの特性に関係なく、同一の形状(固定された形状)のALFフィルタが適用されることもできる。
メモリ155は、フィルタ部150を介して算出された復元ブロックまたはピクチャを格納する場合があり、格納された復元ブロックまたはピクチャは、インタ予測を行う時に、予測部120、125に提供される場合がある。
図2は、本開示の一実施形態による映像復号器(デコーダ)のブロック図である。
図2を参照すると、映像復号器200には、エントロピー復号部210、再整列部215、逆量子化部220、逆変換部225、予測部230、235、フィルタ部240、メモリ245が含まれる場合がある。
映像符号化器から映像ビットストリームが入力された場合、入力されたビットストリームは、映像符号化器とは逆の処理で復号される場合がある。
エントロピー復号部210は、映像符号化器のエントロピー符号化部でエントロピー符号化を行ったこととは逆の処理でエントロピー復号を行う場合がある。例えば、映像符号化器で行われた方法に対応して、指数ゴロム(Exponential Golomb)、CAVLC(Context-Adaptive Variable Length Coding)、CABAC(Context-Adaptive Binary Arithmetic Coding)などの様々な方法が適用される場合がある。
エントロピー復号部210では、符号化器で行われたイントラ予測およびインタ予測に関する情報を復号する場合がある。
再整列部215は、エントロピー復号部210でエントロピー復号されたビットストリームを符号化部で再整列した方法に基づいて再整列を行う場合がある。一次元のベクトル形状で表現された係数をまた二次元のブロック形状の係数に復元して再整列する場合がある。再整列部215では、符号化部で行われた係数スキャニングに関する情報の提供を受け、当該符号化部で行われたスキャニング順序に基づいて、逆にスキャニングする方法により再整列を行う場合がある。
逆量子化部220は、符号化器から提供された量子化パラメータと再整列されたブロックの係数値に基づいて逆量子化を行う場合がある。
逆変換部225は、映像符号化器で行った量子化結果に対して変換部で行った変換、すなわち、DCTまたはDSTに対する逆変換、すなわち、逆DCTまたは逆DSTを行う場合がある。ここで、DCT変換コアは、DCT2またはDCT8の少なくとも一つを含み、DST変換コアは、DST7を含む場合がある。または、映像符号化器で変換がスキップされた場合、逆変換部225でも逆変換を行わない場合がある。逆変換は、映像符号化器で判定された伝送単位に基づいて行われる場合がある。映像復号器の逆変換部225では、予測方法、現在ブロックのサイズおよび予測方向など複数の情報に応じて、変換技法(例えば、DCTまたはDST)が選択的に行われる場合がある。
予測部230、235は、エントロピー復号部210から提供された予測ブロック生成関連情報と、メモリ245から提供された、前に復号されたブロックまたはピクチャ情報とに基づいて予測ブロックを生成する場合がある。
上述のように、映像符号化器での動作と同様にイントラ予測を行う時に、予測単位のサイズと変換単位のサイズが同一である場合、予測単位の左側に存在するピクセル、左上端に存在するピクセル、上端に存在するピクセルに基づいて予測単位に対するイントラ予測を行うが、イントラ予測を行う時に、予測単位のサイズと変換単位のサイズが相違する場合、変換単位に基づく参照ピクセルを用いてイントラ予測を行う場合がある。また、最小符号化単位に対してのみN×N分割を使用するイントラ予測を使用することもできる。
予測部230、235は、予測単位判別部、インタ予測部およびイントラ予測部を含む場合がある。予測単位判別部は、エントロピー復号部210から入力される予測単位情報、イントラ予測方法の予測モード情報、インタ予測方法のモーション予測関連情報など、様々な情報の入力を受けて現在の符号化単位から予測単位を区分し、予測単位がインタ予測を行うか、それともイントラ予測を行うかを判別する場合がある。インタ予測部230は、映像符号化器から提供された現在予測単位のインタ予測に必要な情報を用いて、現在予測単位が含まれた現ピクチャの前のピクチャまたは後のピクチャの少なくとも一つのピクチャに含まれた情報に基づいて、現在予測単位に対するインタ予測を行う場合がある。または、現在予測単位が含まれた現ピクチャ内で予め復元された一部領域の情報に基づいてインタ予測を行うこともできる。
インタ予測を行うために、符号化単位を基準に当該符号化単位に含まれた予測単位のモーション予測方法が、スキップモード(Skip Mode)、マージモード(Merge Mode)、モーションベクトル予測モード(AMVP Mode)、イントラブロックコピーモードのいずれかの方法であるかを判断する場合がある。
イントラ予測部235は、現ピクチャ内の画素情報に基づいて予測ブロックを生成する場合がある。予測単位がイントラ予測を行った予測単位である場合、映像符号化器から提供された予測単位のイントラ予測モード情報に基づいてイントラ予測を行う場合がある。イントラ予測部235は、AIS(Adaptive Intra Smoothing)フィルタ、参照画素補間部、DCフィルタを含む場合がある。AISフィルタは、現在ブロックの参照画素にフィルタリングを行う部分として、現在予測単位の予測モードによってフィルタを適用するか否かを判定し、適用する場合がある。映像符号化器から提供された予測単位の予測モードおよびAISフィルタ情報を用いて、現在ブロックの参照画素に対してAISフィルタリングを行う場合がある。現在ブロックの予測モードがAISフィルタリングを行わないモードである場合、AISフィルタは適用されない場合がある。
参照画素補間部は、予測単位の予測モードが参照画素を補間した画素値に基づいてイントラ予測を行う予測単位である場合、参照画素を補間して整数値以下の画素単位の参照画素を生成する場合がある。現在予測単位の予測モードが参照画素を補間せず予測ブロックを生成する予測モードである場合、参照画素は、補間されない場合がある。DCフィルタは、現在ブロックの予測モードがDCモードである場合、フィルタリングにより予測ブロックを生成する場合がある。
復元されたブロックまたはピクチャは、フィルタ部240に提供される場合がある。フィルタ部240は、デブロッキングフィルタと、オフセット補正部と、ALFとを含む場合がある。
映像符号化器から当該ブロックまたはピクチャにデブロッキングフィルタを適用したか否かに関する情報およびデブロッキングフィルタを適用した場合、強いフィルタを適用したかまたは弱いフィルタを適用したかに関する情報の提供を受ける場合がある。映像復号器のデブロッキングフィルタでは、映像符号化器から提供されたデブロッキングフィルタ関連情報の提供を受け、映像復号器で当該ブロックに対するデブロッキングフィルタリングを行う場合がある。
オフセット補正部は、符号化時に映像に適用されたオフセット補正の種類およびオフセット値の情報などに基づいて復元された映像にオフセット補正を行う場合がある。
ALFは、符号化器から提供されたALF適用可否情報、ALF係数情報などに基づいて符号化単位に適用される場合がある。このようなALF情報は、特定のパラメータセットに含まれて提供される場合がある。
メモリ245は、復元されたピクチャまたはブロックを格納して、参照ピクチャまたは参照ブロックとして使用可能にする場合があり、また、復元されたピクチャを出力部に提供する場合がある。
図3は、本開示の一実施形態による基本コーディングツリーユニットを図示した図である。
最大サイズのコーディングブロックをコーディングツリーブロックと定義する場合がある。一つのピクチャは、複数個のコーディングツリーユニット(Coding Tree Unit、CTU)に分割される。コーディングツリーユニットは、最大サイズのコーディングユニットであり、LCU(Largest Coding Unit)と称することもできる。図3は、一つのピクチャが複数個のコーディングツリーユニットに分割された例を示す図である。
コーディングツリーユニットのサイズは、ピクチャレベルまたはシーケンスレベルで定義される場合がある。このために、コーディングツリーユニットのサイズを示す情報が、ピクチャパラメータセットまたはシーケンスパラメータセットを介してシグナリングされる場合がある。
一例として、シーケンス内の全体ピクチャに対するコーディングツリーユニットのサイズが128×128に設定される場合がある。または、ピクチャレベルで、128×128または256×256のいずれか一つをコーディングツリーユニットのサイズに判定する場合がある。一例として、第1ピクチャでは、コーディングツリーユニットのサイズが128×128に設定され、第2ピクチャでは、コーディングツリーユニットのサイズが256×256に設定される場合がある。
コーディングツリーユニットを分割して、コーディングブロックを生成する場合がある。コーディングブロックは、符号化/復号処理のための基本単位を示す。一例として、コーディングブロック別に予測または変換が行われるか、コーディングブロック別に予測符号化モードが判定される場合がある。ここで、予測符号化モードは、予測映像を生成する方法を示す。一例として、予測符号化モードは、画面内予測(Intra Prediction、イントラ予測)、画面間予測(Inter Prediction、インタ予測)、現ピクチャ参照(Current Picture Referencing、CPR、またはイントラブロックコピー(Intra Block Copy、IBC))または複合予測(Combined Prediction)を含む場合がある。コーディングブロックに対して、イントラ予測、インタ予測、現ピクチャ参照または複合予測の少なくとも一つの予測符号化モードを用いて、コーディングブロックに対する予測ブロックを生成する場合がある。
現在ブロックの予測符号化モードを示す情報がビットストリームを介してシグナリングされる場合がある。一例として、情報は、予測符号化モードがイントラモードであるかまたはインタモードであるかを示す1ビットフラグである場合がある。現在ブロックの予測符号化モードがインタモードとして判定された場合にだけ、現ピクチャ参照または複合予測が利用可能である。
現ピクチャ参照は、現ピクチャを参照ピクチャに設定し、現ピクチャ内の既に符号化/復号が完了した領域から現在ブロックの予測ブロックを得るためのものである。ここで、現ピクチャは、現在ブロックを含むピクチャを意味する。現在ブロックに現ピクチャ参照が適用されるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。一例として、情報は、1ビットのフラグである場合がある。フラグが真の場合、現在ブロックの予測符号化モードは現ピクチャ参照として判定され、フラグが偽の場合、現在ブロックの予測モードはインタ予測として判定される場合がある。
または、参照ピクチャインデックスに基づいて、現在ブロックの予測符号化モードが判定される場合がある。一例として、参照ピクチャインデックスが現ピクチャを示す場合、現在ブロックの予測符号化モードは、現ピクチャ参照として判定される場合がある。参照ピクチャインデックスが現ピクチャではない他のピクチャを示す場合、現在ブロックの予測符号化モードは、インタ予測として判定される場合がある。すなわち、現ピクチャ参照は、現ピクチャ内の符号化/復号が完了した領域の情報を用いた予測方法であり、インタ予測は、符号化/復号が完了した他のピクチャの情報を用いた予測方法である。
複合予測は、イントラ予測、インタ予測および現ピクチャ参照のうち二つ以上を組み合わせた符号化モードを示す。一例として、複合予測が適用される場合、イントラ予測、インタ予測または現ピクチャ参照のいずれか一つに基づいて第1予測ブロックが生成され、他の一つに基づいて第2予測ブロックが生成される場合がある。第1予測ブロックおよび第2予測ブロックが生成されると、第1予測ブロックおよび第2予測ブロックの平均演算または加重和演算により最終予測ブロックが生成される場合がある。複合予測が適用されるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグである場合がある。
図4は、コーディングブロックの様々な分割形状を示す図である。
コーディングブロックは、クワッドツリー分割、バイナリツリー分割またはトリプルツリー分割に基づいて複数のコーディングブロックに分割される場合がある。分割されたコーディングブロックもまたクワッドツリー分割、バイナリツリー分割またはトリプルツリー分割に基づいて、また複数のコーディングブロックに分割される場合がある。
クワッドツリー分割は、現在ブロックを4つのブロックに分割する分割技法を示す。クワッドツリー分割の結果、現在ブロックは、4つの正方形状パーティションに分割される場合がある(図4(a)「SPLIT_QT」参照)。
バイナリツリー分割は、現在ブロックを2つのブロックに分割する分割技法を示す。垂直方向に沿って(すなわち、現在ブロックを横切る垂直線を利用)現在ブロックを二つのブロックに分割することを垂直方向バイナリツリー分割と称する場合があり、水平方向に沿って(すなわち、現在ブロックを横切る水平線を利用)現在ブロックを二つのブロックに分割することを水平方向バイナリツリー分割と称する場合がある。バイナリツリー分割の結果、現在ブロックは、2つの非正方形状パーティションに分割される場合がある。図4(b)「SPLIT_BT_VER」は、垂直方向バイナリツリー分割の結果を示すものでり、図4(c)「SPLIT_BT_HOR」は、水平方向バイナリツリー分割の結果を示すものである。
トリプルツリー分割は、現在ブロックを3つのブロックに分割する分割技法を示す。垂直方向に沿って(すなわち、現在ブロックを横切る二つの垂直線を利用)現在ブロックを三つのブロックに分割することを垂直方向トリプルツリー分割と称する場合があり、水平方向に沿って(すなわち、現在ブロックを横切る二つの水平線を利用)現在ブロックを三つのブロックに分割することを水平方向トリプルツリー分割と称する場合がある。トリプルツリー分割の結果、現在ブロックは、3つの非正方形状パーティションに分割される場合がある。この場合、現在ブロックの中央に位置するパーティションの幅/高さは、他のパーティションの幅/高さに対して2倍である場合がある。図4(d)「SPLIT_TT_VER」は、垂直方向トリプルツリー分割の結果を示すものであり、図4(e)「SPLIT_TT_HOR」は、水平方向トリプルツリー分割の結果を示すものである。
コーディングツリーユニットの分割回数を分割深さ(Partitioning Depth)と定義する場合がある。シーケンスまたはピクチャレベルでコーディングツリーユニットの最大分割深さが判定される場合がある。これにより、シーケンスまたはピクチャ別にコーディングツリーユニットの最大分割深さが相違する場合がある。
または、分割技法それぞれに対する最大分割深さを個別に判定する場合がある。一例として、クワッドツリー分割が許容される最大分割深さは、バイナリツリー分割および/またはトリプルツリー分割が許容される最大分割深さと相違する場合がある。
符号化器は、現在ブロックの分割形状または分割深さの少なくとも一つを示す情報をビットストリームを介してシグナリングする場合がある。復号器は、ビットストリームからパーシングされる情報に基づいて、コーディングツリーユニットの分割形状および分割深さを判定する場合がある。
図5は、コーディングツリーユニットの分割態様を例示した図である。
クワッドツリー分割、バイナリツリー分割および/またはトリプルツリー分割などの分割技法を用いてコーディングブロックを分割することをマルチツリー分割(Multi Tree Partitioning)と称する場合がある。
コーディングブロックにマルチツリー分割を適用して生成されるコーディングブロックを下位コーディングブロックと称する場合がある。コーディングブロックの分割深さがkである場合、下位コーディングブロックの分割深さは、k+1に設定される。
逆に、分割深さがk+1であるコーディングブロックに対して、分割深さがkであるコーディングブロックを上位コーディングブロックと称する場合がある。
現在コーディングブロックの分割タイプは、上位コーディングブロックの分割形状または近隣コーディングブロックの分割タイプの少なくとも一つに基づいて判定される場合がある。ここで、近隣コーディングブロックは、現在コーディングブロックに隣接するものであり、現在コーディングブロックの上端近隣ブロック、左側近隣ブロック、または左上端コーナに隣接する近隣ブロックの少なくとも一つを含む場合がある。ここで、分割タイプは、クワッドツリー分割可否、バイナリツリー分割可否、バイナリツリー分割方向、トリプルツリー分割可否、またはトリプルツリー分割方向の少なくとも一つを含む場合がある。
コーディングブロックの分割形状を判定するために、コーディングブロックが分割されるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグ「split_cu_flag」であり、フラグが真であることは、マージツリー分割技法によってコーディングブロックが分割されることを示す。
split_cu_flagが真の場合、コーディングブロックがクワッドツリー分割されるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグsplit_qt_flagであり、フラグが真の場合、コーディングブロックは、4つのブロックに分割される場合がある。
一例として、図5に図示されている例では、コーディングツリーユニットがクワッドツリー分割されることで、分割深さが1である4つのコーディングブロックが生成されるものと図示されている。また、クワッドツリー分割の結果として生成された4つのコーディングブロックのうち最初のコーディングブロックおよび四番目のコーディングブロックにまたクワッドツリー分割が適用されたものと図示されている。その結果、分割深さが2である4つのコーディングブロックが生成される場合がある。
また、分割深さが2であるコーディングブロックにまたクワッドツリー分割を適用することで、分割深さが3であるコーディングブロックを生成する場合がある。
コーディングブロックにクワッドツリー分割が適用されない場合、コーディングブロックのサイズ、コーディングブロックがピクチャ境界に位置するか否か、最大分割深さまたは近隣ブロックの分割形状の少なくとも一つを考慮して、コーディングブロックにバイナリツリー分割またはトリプルツリー分割を行うか否かを判定する場合がある。コーディングブロックにバイナリツリー分割またはトリプルツリー分割が行われるものと判定された場合、分割方向を示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグmtt_split_cu_vertical_flagである場合がある。フラグに基づいて、分割方向が垂直方向であるかまたは水平方向であるかが判定される場合がある。さらに、バイナリツリー分割またはトリプルツリー分割のいずれかがコーディングブロックに適用されるかを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグmtt_split_cu_binary_flagである場合がある。フラグに基づいて、コーディングブロックにバイナリツリー分割が適用されるかまたはトリプルツリー分割が適用されるかが判定される場合がある。
一例として、図5に図示されている例では、分割深さ1のコーディングブロックに垂直方向バイナリツリー分割が適用され、分割の結果として生成されたコーディングブロックのうち左側コーディングブロックには、垂直方向トリプルツリー分割が適用され、右側コーディングブロックには、垂直方向バイナリツリー分割が適用されたものと図示されている。
インタ予測は、前のピクチャの情報を用いて、現在ブロックを予測する予測符号化モードである。一例として、前のピクチャ内の現在ブロックと同一の位置のブロック(以下、コロケーテッドブロック、Collocated block)を現在ブロックの予測ブロックに設定する場合がある。以下、現在ブロックと同一の位置のブロックに基づいて生成された予測ブロックをコロケーテッド予測ブロック(Collocated Prediction Block)と称する。
一方、前のピクチャに存在したオブジェクトが現ピクチャでは他の位置に移動したとすると、オブジェクトの動きを用いて、効果的に現在ブロックを予測する場合がある。例えば、前のピクチャと現ピクチャとを比較することでオブジェクトの移動方向およびサイズを知ることができれば、オブジェクトの動き情報を考慮して、現在ブロックの予測ブロック(または、予測映像)を生成する場合がある。以下、動き情報を用いて生成された予測ブロックを動き予測ブロックと称する場合がある。
現在ブロックから予測ブロックを差分して、残差ブロック(residual block)を生成する場合がある。この場合、オブジェクトの動きが存在する場合であれば、コロケーテッド予測ブロックの代わりに動き予測ブロックを用いることで、残差ブロックのエネルギーを低減し、これにより、残差ブロックの圧縮性能を向上させる場合がある。
上記のように、動き情報を用いて予測ブロックを生成することを動き補償予測と称する場合がある。ほとんどのインタ予測では、動き補償予測に基づいて予測ブロックを生成する場合がある。
動き情報は、モーションベクトル、参照ピクチャインデックス、予測方向または双方向加重値インデックスの少なくとも一つを含む場合がある。モーションベクトルは、オブジェクトの移動方向およびサイズを示す。参照ピクチャインデックスは、参照ピクチャリストに含まれた参照ピクチャのうち、現在ブロックの参照ピクチャを特定する。予測方向は、単方向L0予測、単方向L1予測または双方向予測(L0予測およびL1予測)のいずれか一つを示す。現在ブロックの予測方向に応じて、L0方向の動き情報またはL1方向の動き情報の少なくとも一つが用いられる場合がある。双方向加重値インデックスは、L0予測ブロックに適用される加重値およびL1予測ブロックに適用される加重値を特定する。
図6は、本開示の一実施形態によるインタ予測方法のフローチャートである。
図6を参照すると、インタ予測方法は、現在ブロックのインタ予測モードを判定するステップ(S601)と、判定されたインタ予測モードによって現在ブロックの動き情報を得るステップ(S602)と、得られた動き情報に基づいて、現在ブロックに対する動き補償予測を行うステップ(S603)とを含む。
ここで、インタ予測モードは、現在ブロックの動き情報を判定するための様々な技法を示すものであり、並進(Translation)動き情報を用いるインタ予測モードと、アフィン(Affine)動き情報を用いるインタ予測モードとを含む場合がある。一例として、並進動き情報を用いるインタ予測モードは、マージモードおよびモーションベクトル予測モードを含み、アフィン動き情報を用いるインタ予測モードは、アフィンマージモードおよびアフィンモーションベクトル予測モードを含む場合がある。現在ブロックの動き情報は、インタ予測モードによって、現在ブロックに隣り合う近隣ブロックまたはビットストリームからパーシングされる情報に基づいて判定される場合がある。
以下、アフィン動き情報を用いるインタ予測方法について詳細に説明する。
図7は、オブジェクトの非線形動きを例示した図である。
映像内のオブジェクトの動きが線形的ではない動きが発生する場合がある。一例として、図7に図示されている例のように、カメラズームイン(Zoom-in)、ズームアウト(Zoom-out)、回転(Rotation)またはアフィン変換など、オブジェクトの非線形動きが発生する場合がある。オブジェクトの非線形動きが発生した場合、並進動きベクトルでは、オブジェクトの動きを効果的に表現することができない。そのため、オブジェクトの非線形動きが発生する部分では、並進動きの代わりにアフィン動きを用いて符号化効率を向上させる場合がある。
図8は、本開示の一実施形態によるアフィンモーションに基づくインタ予測方法のフローチャートである。
現在ブロックにアフィンモーションに基づくインタ予測技法が適用されるか否かは、ビットストリームからパーシングされる情報に基づいて判定される場合がある。具体的には、現在ブロックにアフィンマージモードが適用されるか否かを示すフラグまたは現在ブロックにアフィンモーションベクトル予測モードが適用されるか否かを示すフラグの少なくとも一つに基づいて、現在ブロックにアフィンモーションに基づくインタ予測技法が適用されるか否かを判定する場合がある。
現在ブロックにアフィンモーションに基づくインタ予測技法が適用される場合、現在ブロックのアフィンモーションモデルを判定する場合がある(S801)。アフィンモーションモデルは、6パラメータアフィンモーションモデルまたは4パラメータアフィンモーションモデルの少なくとも一つとして判定される場合がある。6パラメータアフィンモーションモデルは、6個のパラメータを用いてアフィンモーションを表現したものであり、4パラメータアフィンモーションモデルは、4個のパラメータを用いてアフィンモーションを表現したものである。
数式1は、6パラメータを用いてアフィンモーションを表現したものである。アフィンモーションは、アフィンシードベクトルによって判定される所定の領域に対する並進動きを示す。
6個のパラメータを用いてアフィンモーションを表現する場合、複雑な動きを表現する場合があるが、各パラメータを符号化するために必要なビット数が多くなって符号化効率が低下し得る。そのため、4個のパラメータを用いてアフィンモーションを表現する場合がある。数式2は、4個のパラメータを用いてアフィンモーションを表現したものである。
現在ブロックのアフィンモーションモデルを判定するための情報が符号化され、ビットストリームを介してシグナリングされる場合がある。一例として、情報は、1ビットのフラグ「affine_type_flag」である場合がある。フラグの値が0であることは、4パラメータアフィンモーションモデルが適用されることを示し、フラグの値が1であることは、6パラメータアフィンモーションモデルが適用されることを示す場合がある。フラグは、スライス、タイルまたはブロック(例えば、コーディングブロックまたはコーディングツリーユニット)単位で符号化される場合がある。スライスレベルでフラグがシグナリングされる場合、スライスレベルで判定されたアフィンモーションモデルがスライスに属するブロックのすべてに適用される場合がある。
または、現在ブロックのアフィンインタ予測モードに基づいて、現在ブロックのアフィンモーションモデルを判定する場合がある。一例として、アフィンマージモードが適用される場合、現在ブロックのアフィンモーションモデルを4パラメータモーションモデルとして判定する場合がある。一方、アフィンモーションベクトル予測モードが適用される場合、現在ブロックのアフィンモーションモデルを判定するための情報を符号化し、ビットストリームを介してシグナリングされる場合がある。一例として、現在ブロックにアフィンモーションベクトル予測モードが適用される場合、1ビットのフラグ「affine_type_flag」に基づいて、現在ブロックのアフィンモーションモデルを判定する場合がある。
次に、現在ブロックのアフィンシードベクトルを導出する場合がある(S802)。4パラメータアフィンモーションモデルが選択された場合、現在ブロックの二つのコントロールポイントでのモーションベクトルを導出する場合がある。一方、6パラメータアフィンモーションモデルが選択された場合、現在ブロックの三つのコントロールポイントでのモーションベクトルが導出される場合がある。コントロールポイントでのモーションベクトルをアフィンシードベクトルと称する場合がある。コントロールポイントは、現在ブロックの左上端コーナ、右上端コーナまたは左下端コーナの少なくとも一つを含む場合がある。
図9は、アフィンモーションモデル別のアフィンシードベクトルを例示した図である。
4パラメータアフィンモーションモデルでは、左上端コーナ、右上端コーナまたは左下端コーナのうち二つに対するアフィンシードベクトルを導出する場合がある。一例として、図9(a)に図示されている例のように、4パラメータアフィンモーションモデルが選択された場合、現在ブロックの左上端コーナ(例えば、左上端サンプル(x1,y1))に対するアフィンシードベクトルsv0と現在ブロックの右上端コーナ(例えば、右上端サンプル(x1,y1))に対するアフィンシードベクトルsv1を用いてアフィンベクトルを導出する場合がある。左上端コーナに対するアフィンシードベクトルの代わりに左下端コーナに対するアフィンシードベクトルを使用するか、右上端コーナに対するアフィンシードベクトルの代わりに左下端コーナに対するアフィンシードベクトルを使用することも可能である。
6パラメータアフィンモーションモデルでは、左上端コーナ、右上端コーナおよび左下端コーナに対するアフィンシードベクトルを導出する場合がある。一例として、図9(b)に図示されている例のように、6パラメータアフィンモーションモデルが選択された場合、現在ブロックの左上端コーナ(例えば、左上端サンプル(x1,y1))に対するアフィンシードベクトルsv0、現在ブロックの右上端コーナ(例えば、右上端サンプル(x1,y1))に対するアフィンシードベクトルsv1および現在ブロックの左上端コーナ(例えば、左上端サンプル(x2,y2))に対するアフィンシードベクトルsv2を用いてアフィンベクトルを導出する場合がある。
後述する実施形態では、4パラメータアフィンモーションモデル下で、左上端コントロールポイントおよび右上端コントロールポイントのアフィンシードベクトルを、それぞれ、第1アフィンシードベクトルおよび第2アフィンシードベクトルと称する。後述する第1アフィンシードベクトルおよび第2アフィンシードベクトルを用いる実施形態において、第1アフィンシードベクトルおよび第2アフィンシードベクトルの少なくとも一つの代わりに、左下端コントロールポイントのアフィンシードベクトル(第3アフィンシードベクトル)または右下端コントロールポイントのアフィンシードベクトル(第4アフィンシードベクトル)を使用する場合がある。
また、6パラメータアフィンモーションモデル下で、左上端コントロールポイント、右上端コントロールポイントおよび左下端コントロールポイントのアフィンシードベクトルを、それぞれ、第1アフィンシードベクトル、第2アフィンシードベクトルおよび第3アフィンシードベクトルと称する。後述する第1アフィンシードベクトル、第2アフィンシードベクトルおよび第3アフィンシードベクトルを用いる実施形態において、第1アフィンシードベクトル、第2アフィンシードベクトルおよび第3アフィンシードベクトルの少なくとも一つの代わりに、右下端コントロールポイントのアフィンシードベクトル(第4アフィンシードベクトル)を使用する場合がある。
アフィンシードベクトルを用いてサブブロック別にアフィンベクトルを導出する場合がある(S803)。ここで、アフィンベクトルは、アフィンシードベクトルに基づいて導出される並進モーションベクトルを示す。サブブロックのアフィンベクトルをアフィンサブブロックモーションベクトルまたはサブブロックモーションベクトルと称する場合がある。
図10は、4パラメータモーションモデル下で、サブブロックのアフィンベクトルを例示した図である。
サブブロックのアフィンベクトルは、コントロールポイントの位置、サブブロックの位置およびアフィンシードベクトルに基づいて導出される場合がある。一例として、数式3は、アフィンサブブロックモーションベクトルを導出する例を示す。
数式3において、(x,y)は、サブブロックの位置を示す。ここで、サブブロックの位置は、サブブロックに含まれた基準サンプルの位置を示す。基準サンプルは、サブブロックの左上端コーナに位置するサンプル、またはx軸またはy軸座標の少なくとも一つが中央位置であるサンプルである場合がある。(x0,y0)は、第1コントロールポイントの位置を示し、(sv0x,sv0y)は、第1アフィンシードベクトルを示す。また、(x1,y1)は、第2コントロールポイントの位置を示し、(sv1x,sv1y)は、第2アフィンシードベクトルを示す。
第1コントロールポイントおよび第2コントロールポイントが、それぞれ、現在ブロックの左上端コーナおよび右上端コーナに対応する場合、x1-x0は、現在ブロックの幅と同一の値に設定される場合がある。
次に、各サブブロックのアフィンベクトルを用いて、各サブブロックに対する動き補償予測を行う場合がある(S804)。動き補償予測を行った結果、各サブブロックに対する予測ブロックが生成される場合がある。サブブロックの予測ブロックが、現在ブロックの予測ブロックに設定される場合がある。
現在ブロックのアフィンシードベクトルは、現在ブロックに隣り合う近隣ブロックのアフィンシードベクトルに基づいて導出される場合がある。現在ブロックのインタ予測モードがアフィンマージモードである場合、マージ候補リストに含まれたマージ候補のアフィンシードベクトルを現在ブロックのアフィンシードベクトルに判定する場合がある。また、現在ブロックのインタ予測モードがアフィンマージモードである場合、現在ブロックの参照ピクチャインデックス、特定方向予測フラグまたは双方向加重値の少なくとも一つを含む動き情報もマージ候補と同様に設定される場合がある。
次に、並進動き情報を用いるインタ予測方法について詳細に説明する。
現在ブロックの動き情報は、現在ブロックと他のブロックの動き情報から導出される場合がある。ここで、他のブロックは、現在ブロックよりも先にインタ予測で符号化/復号されたブロックである場合がある。現在ブロックの動き情報を他のブロックの動き情報と同様に設定することをマージモードと定義する場合がある。また、他のブロックの動きベクトルを現在ブロックの動きベクトルの予測値に設定することをモーションベクトル予測モードと定義する場合がある。
図11は、マージモード下で、現在ブロックの動き情報を導出する過程のフローチャートである。
現在ブロックのマージ候補を導出する場合がある(S1101)。現在ブロックのマージ候補は、現在ブロックよりも先にインタ予測で符号化/復号されたブロックから導出される場合がある。
図12は、マージ候補を導出するために使用される候補ブロックを例示した図である。
候補ブロックは、現在ブロックに隣接するサンプルを含む近隣ブロックまたは現在ブロックに隣接しないサンプルを含む非近隣ブロックの少なくとも一つを含む場合がある。以下、候補ブロックを判定するサンプルを基準サンプルと定義する。また、現在ブロックに隣接する基準サンプルを近隣基準サンプルと称し、現在ブロックに隣接しない基準サンプルを非近隣基準サンプルと称する。
近隣基準サンプルは、現在ブロックの最左側列の近隣列または現在ブロックの最上端行の近隣行に含まれる場合がある。一例として、現在ブロックの左上端サンプルの座標を(0,0)とした時に、(-1,H-1)位置の基準サンプルを含むブロック、(W-1,-1)位置の基準サンプルを含むブロック、(W,-1)位置の基準サンプルを含むブロック、(-1,H)位置の基準サンプルを含むブロックまたは(-1,-1)位置の基準サンプルを含むブロックの少なくとも一つが候補ブロックとして用いられる場合がある。図面を参照すると、インデックス0~インデックス4の近隣ブロックが候補ブロックとして用いられる場合がある。
非近隣基準サンプルは、現在ブロックに隣接する基準サンプルとのx軸距離またはy軸距離の少なくとも一つが予め定義された値を有するサンプルを示す。一例として、左側基準サンプルとのx軸距離が予め定義された値である基準サンプルを含むブロック、上端基準サンプルとのy軸距離が予め定義された値である非近隣サンプルを含むブロックまたは左上端基準サンプルとのx軸距離およびy軸距離が予め定義された値である非近隣サンプルを含むブロックの少なくとも一つが候補ブロックとして用いられる場合がある。予め定義された値は、4、8、12、16などの自然数である場合がある。図面を参照すると、インデックス5~26のブロックの少なくとも一つが候補ブロックとして用いられる場合がある。
近隣基準サンプルと同一の垂直線、水平線または対角線上に位置しないサンプルを非近隣基準サンプルに設定することもできる。
マージ候補の動き情報は、候補ブロックの動き情報と同様に設定される場合がある。一例として、候補ブロックのモーションベクトル、参照ピクチャインデックス、予測方向または双方向加重値インデックスの少なくとも一つをマージ候補の動き情報に設定する場合がある。
マージ候補を含むマージ候補リストを生成する場合がある(S1102)。
マージ候補リスト内のマージ候補のインデックスは、所定の順序にしたがって割り当てられる場合がある。一例として、左側近隣ブロックから導出されたマージ候補、上端近隣ブロックから導出されたマージ候補、右上端近隣ブロックから導出されたマージ候補、左下端近隣ブロックから導出されたマージ候補、左上端近隣ブロックから導出されたマージ候補および時間的近隣ブロックから導出されたマージ候補の順にインデックスを付与する場合がある。
マージ候補に複数のマージ候補が含まれた場合、複数のマージ候補の少なくとも一つを選択する場合がある(S1103)。具体的には、複数のマージ候補のいずれか一つを特定するための情報がビットストリームを介してシグナリングされる場合がある。一例として、マージ候補リストに含まれたマージ候補のいずれか一つのインデックスを示す情報merge_idxがビットストリームを介してシグナリングされる場合がある。
マージ候補リストに含まれたマージ候補の個数が閾値より小さい場合、モーション情報テーブルに含まれたモーション情報候補をマージ候補としてマージ候補リストに追加する場合がある。ここで、閾値は、マージ候補リストが含む場合がある最大マージ候補の個数または最大マージ候補の個数からオフセットを減算した値である場合がある。オフセットは、1または2などの自然数である場合がある。
モーション情報テーブルは、現ピクチャ内のインタ予測に基づいて符号化/復号されたブロックから導出されるモーション情報候補を含む。一例として、モーション情報テーブルに含まれたモーション情報候補の動き情報は、インタ予測に基づいて符号化/復号されたブロックの動き情報と同様に設定される場合がある。ここで、動き情報は、モーションベクトル、参照ピクチャインデックス、予測方向または双方向加重値インデックスの少なくとも一つを含む場合がある。
モーション情報テーブルに含まれたモーション情報候補をインタ領域マージ候補または予測領域マージ候補と称することもできる。
モーション情報テーブルが含む場合があるモーション情報候補の最大個数は、符号化器および復号器で予め定義されていてもよい。一例として、モーション情報テーブルが含む場合がある最大モーション情報候補の個数は、1、2、3、4、5、6、7、8またはそれ以上(例えば、16)である場合がある。
または、モーション情報テーブルが含む場合があるモーション情報候補の最大個数を示す情報がビットストリームを介してシグナリングされる場合がある。情報は、シーケンス、ピクチャ、またはスライスレベルでシグナリングされる場合がある。情報は、モーション情報テーブルが含む場合があるモーション情報候補の最大個数を示す場合がある。または、情報は、モーション情報テーブルが含む場合があるモーション情報候補の最大個数とマージ候補リストが含む場合があるマージ候補の最大個数との差分を示す場合がある。
または、ピクチャのサイズ、スライスのサイズまたはコーディングツリーユニットのサイズに応じて、モーション情報テーブルが含む場合があるモーション情報候補の最大個数が判定される場合がある。
モーション情報テーブルは、ピクチャ、スライス、タイル、ブリック、コーディングツリーユニット、またはコーディングツリーユニットライン(行または列)単位で初期化される場合がある。一例として、スライスが初期化される場合、モーション情報テーブルも初期化され、モーション情報テーブルは、如何なるモーション情報候補も含まない場合がある。
または、モーション情報テーブルを初期化するか否かを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、スライス、タイル、ブリックまたはブロックレベルでシグナリングされる場合がある。情報がモーション情報テーブルを初期化することを指示するまで、予め構成されたモーション情報テーブルが用いられる場合がある。
または、ピクチャパラメータセットまたはスライスヘッダーを介して初期モーション情報候補に関する情報がシグナリングされる場合がある。スライスが初期化されても、モーション情報テーブルは、初期モーション情報候補を含む場合がある。これにより、スライス内の最初の符号化/復号対象であるブロックに対しても、初期モーション情報候補を用いる場合がある。
または、前のコーディングツリーユニットのモーション情報テーブルに含まれたモーション情報候補を初期モーション情報候補に設定する場合がある。一例として、前のコーディングツリーユニットのモーション情報テーブルに含まれたモーション情報候補のうちインデックスが最も小さいモーション情報候補またはインデックスが最も大きいモーション情報候補が初期モーション情報候補に設定される場合がある。
符号化/復号順序にしたがってブロックを符号化/復号し、この場合、インタ予測に基づいて符号化/復号されたブロックを符号化/復号順序にしたがって、順にモーション情報候補に設定する場合がある。
図13は、モーション情報テーブルのアップデート態様を説明するための図である。
現在ブロックに対して、インタ予測が行われた場合(S1301)、現在ブロックに基づいてモーション情報候補を導出する場合がある(S1302)。モーション情報候補の動き情報は、現在ブロックの動き情報と同様に設定される場合がある。
モーション情報テーブルが空の状態である場合(S1303)、現在ブロックに基づいて導出されたモーション情報候補をモーション情報テーブルに追加する場合がある(S1304)。
モーション情報テーブルが既にモーション情報候補を含んでいる場合(S1303)、現在ブロックの動き情報(または、これに基づいて導出されたモーション情報候補)に対する重複性検査を実施する場合がある(S1305)。重複性検査は、モーション情報テーブルに予め格納されたモーション情報候補の動き情報と現在ブロックの動き情報とが同一であるか否かを判定するためのものである。重複性検査は、モーション情報テーブルに予め格納されたすべてのモーション情報候補を対象に行われる場合がある。または、モーション情報テーブルに予め格納されたモーション情報候補のうち、インデックスが閾値以上または閾値以下であるモーション情報候補を対象に重複性検査を行う場合がある。または、予め定義された個数のモーション情報候補を対象に重複性検査が行われる場合がある。一例として、インデックスが小さい2個のモーション情報候補またはインデックスが大きい2個のモーション情報候補が重複性検査の対象に判定される場合がある。
現在ブロックの動き情報と同一の動き情報を有するモーション情報候補が含まれていない場合、現在ブロックに基づいて導出されたモーション情報候補をモーション情報テーブルに追加する場合がある(S1308)。モーション情報候補が同一であるか否かは、モーション情報候補の動き情報(例えば、モーションベクトルおよび/または参照ピクチャインデックスなど)が同一であるか否かに基づいて判定される場合がある。
この場合、モーション情報テーブルに既に最大個数のモーション情報候補が格納されている場合(S1306)、最も古いモーション情報候補を削除し(S1307)、現在ブロックに基づいて導出されたモーション情報候補をモーション情報テーブルに追加する場合がある(S1308)。ここで、最も古いモーション情報候補は、インデックスが最も大きいモーション情報候補またはインデックスが最も小さいモーション情報候補である場合がある。
モーション情報候補は、それぞれ、インデックスによって識別される場合がある。現在ブロックから導出されたモーション情報候補がモーション情報テーブルに追加される場合、モーション情報候補に最も低いインデックス(例えば、0)を割り当て、予め格納されたモーション情報候補のインデックスを1ずつ増加させる場合がある。この場合、モーション情報テーブルに既に最大個数のモーション情報候補が格納されている場合、インデックスが最も大きいモーション情報候補が除去される。
または、現在ブロックから導出されたモーション情報候補がモーション情報テーブルに追加される場合、モーション情報候補に最も大きいインデックスを割り当てる場合がある。一例として、モーション情報テーブルに予め格納されたモーション情報候補の個数が最大値より小さい場合、モーション情報候補には、予め格納されたモーション情報候補の個数と同一の値のインデックスが割り当てられる場合がある。または、モーション情報テーブルに予め格納されたモーション情報候補の個数が最大値と同一である場合、モーション情報候補には、最大値から1を減算したインデックスが割り当てられる場合がある。また、インデックスが最も小さいモーション情報候補が除去され、残りの予め格納されたモーション情報候補のインデックスが1ずつ減少する。
図14は、モーション情報テーブルのアップデート態様を示す図である。
現在ブロックから導出されたモーション情報候補がモーション情報テーブルに追加されて、モーション情報候補に最も大きいインデックスが割り当てられるものと仮定する。また、モーション情報テーブルには、既に最大個数のモーション情報候補が格納されているものと仮定する。
現在ブロックから導出されたモーション情報候補HmvpCand[n+1]をモーション情報テーブルHmvpCandListに追加する場合、予め格納されたモーション情報候補のうちインデックスが最も小さいモーション情報候補HmvpCand[0]を削除し、残りのモーション情報候補のインデックスを1ずつ減少させる場合がある。また、現在ブロックから導出されたモーション情報候補HmvpCand[n+1]のインデックスを最大値(図14に図示されている例ではn)に設定する場合がある。
現在ブロックに基づいて導出されたモーション情報候補と同一のモーション情報候補が予め格納されている場合(S1305)、現在ブロックに基づいて導出されたモーション情報候補をモーション情報テーブルに追加しない場合がある(S1309)。
または、現在ブロックに基づいて導出されたモーション情報候補をモーション情報テーブルに追加し、且つモーション情報候補と同一の予め格納されたモーション情報候補を除去することもできる。この場合、予め格納されたモーション情報候補のインデックスが新たに更新されることと同じ効果を引き起こす。
図15は、予め格納されたモーション情報候補のインデックスが更新される例を示す図である。
現在ブロックに基づいて導出されたモーション情報候補mvCandと同一の予め格納されたモーション情報候補のインデックスがhIdxである場合、予め格納されたモーション情報候補を削除し、インデックスがhIdxより大きいモーション情報候補のインデックスを1だけ減少させる場合がある。一例として、図15に図示されている例では、mvCandと同一のHmvpCand[2]がモーション情報テーブルHvmpCandListから削除され、HmvpCand[3]からHmvpCand[n]までのインデックスが1ずつ減少するものと図示されている。
また、現在ブロックに基づいて導出されたモーション情報候補mvCandをモーション情報テーブルの最後に追加する場合がある。
または、現在ブロックに基づいて導出されたモーション情報候補と同一の予め格納されたモーション情報候補に割り当てられたインデックスを更新する場合がある。例えば、予め格納されたモーション情報候補のインデックスを最小値または最大値に変更する場合がある。
所定の領域に含まれたブロックの動き情報は、モーション情報テーブルに追加されないように設定される場合がある。一例として、マージ処理領域に含まれたブロックの動き情報に基づいて導出されるモーション情報候補は、モーション情報テーブルに追加しない場合がある。マージ処理領域に含まれたブロックに対しては、符号化/復号順序が定義されていないため、これらのいずれか一つの動き情報を他のブロックのインタ予測時に用いることは不適切である。そのため、マージ処理領域に含まれたブロックに基づいて導出されたモーション情報候補は、モーション情報テーブルに追加しない場合がある。
または、予め設定されたサイズより小さいブロックの動き情報は、モーション情報テーブルに追加されないように設定される場合がある。一例として、幅または高さが4または8より小さいコーディングブロックの動き情報、または4×4サイズのコーディングブロックの動き情報に基づいて導出されるモーション情報候補は、モーション情報テーブルに追加しない場合がある。
現在ブロックのインタ予測モードに基づいて、現在ブロックをモーション情報候補として用いるか否かを判定することもできる。一例として、アフィンモーションモデルに基づいて符号化/復号されたブロックは、モーション情報候補として利用不可能なものに設定される場合がある。これにより、現在ブロックがインタ予測で符号化/復号されたとしても、現在ブロックのインタ予測モードがアフィン予測モードである場合には、現在ブロックに基づいてモーション情報テーブルをアップデートしない場合がある。
モーション情報候補が動き情報以外に追加情報を含むように設定する場合がある。一例として、モーション情報候補に対して、ブロックのサイズ、形状またはブロックのパーティション情報の少なくとも一つをさらに格納する場合がある。現在ブロックのマージ候補リストの構成時に、モーション情報候補のうち、サイズ、形状またはパーティション情報が現在ブロックと同一または類似するモーション情報候補のみを使用するか、サイズ、形状またはパーティション情報が現在ブロックと同一または類似するモーション情報候補を先にマージ候補リストに追加する場合がある。
現在ブロックのマージ候補リストに含まれたマージ候補の個数が閾値より小さい場合、モーション情報テーブルに含まれたモーション情報候補をマージ候補としてマージ候補リストに追加する場合がある。追加過程は、モーション情報候補のインデックスを昇順または降順に整列した時の順序にしたがって行われる。一例として、インデックスが最も大きいモーション情報候補から現在ブロックのマージ候補リストに追加する場合がある。
モーション情報テーブルに含まれたモーション情報候補をマージ候補リストに追加しようとする場合、モーション情報候補とマージ候補リストに予め格納されたマージ候補との重複性検査が行われる場合がある。重複性検査を行った結果、予め格納されたマージ候補と同一の動き情報を有するモーション情報候補は、マージ候補リストに追加されない場合がある。
重複性検査は、モーション情報テーブルに含まれたモーション情報候補のうち一部に対してのみ行われることもできる。一例として、インデックスが閾値以上または閾値以下であるモーション情報候補に対してのみ重複性検査が行われる場合がある。または、インデックスが最も大きいN個のモーション情報候補またはインデックスが最も小さいN個のモーション情報候補に対してのみ重複性検査が行われる場合がある。
または、マージ候補リストに予め格納されたマージ候補のうち一部に対してのみ重複性検査を行う場合がある。一例として、インデックスが閾値以上または閾値以下であるマージ候補または特定の位置のブロックから導出されたマージ候補に対してのみ重複性検査が行われる場合がある。ここで、特定の位置は、現在ブロックの左側近隣ブロック、上端近隣ブロック、右上端近隣ブロックまたは左下端近隣ブロックの少なくとも一つを含む場合がある。
図16は、マージ候補のうち一部に対してのみ重複性検査が行われる例を図示した図である。
モーション情報候補HmvpCand[j]をマージ候補リストに追加しようとする場合、モーション情報候補に対してインデックスが最も大きい2個のマージ候補mergeCandList[NumMerge-2]およびmergeCandList[NumMerge-1]との重複性検査を行う場合がある。ここで、NumMergeは、可用な空間的マージ候補および時間的マージ候補の個数を示す場合がある。
図示されている例とは異なり、モーション情報候補HmvpCand[j]をマージ候補リストに追加しようとする場合、モーション情報候補に対してインデックスが最も小さい最大2個のマージ候補との重複性検査を行うこともできる。例えば、mergeCandList[0]およびmergeCandList[1]に対して、HmvpCand[j]と同一であるか否かを確認する場合がある。
または、特定の位置から導出されたマージ候補に対してのみ重複性検査を行う場合がある。一例として、現在ブロックの左側に位置する周辺ブロックから導出されたマージ候補または現在ブロックの上端に位置する周辺ブロックから導出されたマージ候補の少なくとも一つに対して重複性検査を行う場合がある。マージ候補リストに特定の位置から導出されたマージ候補が存在しない場合、重複性検査を行うことなく、モーション情報候補をマージ候補リストに追加する場合がある。
モーション情報候補HmvpCand[j]をマージ候補リストに追加しようとする場合、モーション情報候補に対して、インデックスが最も大きい2個のマージ候補mergeCandList[NumMerge-2]およびmergeCandList[NumMerge-1]との重複性検査を行う場合がある。ここで、NumMergeは、可用な空間的マージ候補および時間的マージ候補の個数を示す場合がある。
モーション情報候補のうち一部に対してのみマージ候補との重複性検査を行うこともできる。一例として、モーション情報テーブルに含まれたモーション情報候補のうちインデックスが大きいN個またはインデックスが小さいN個のモーション情報候補に対してのみ重複性検査が行われる場合がある。一例として、モーション情報テーブルに含まれたモーション情報候補の個数と差分が閾値以下であるインデックスを有するモーション情報候補に対してのみ重複性検査が行われる場合がある。閾値が2である場合、モーション情報テーブルに含まれたモーション情報候補のうちインデックス値が最も大きい3個のモーション情報候補に対してのみ重複性検査が行われる場合がある。3個のモーション情報候補以外のモーション情報候補に対しては、重複性検査が省略される場合がある。重複性検査が省略される場合、マージ候補と同一の動き情報を有するか否かに関係なく、モーション情報候補をマージ候補リストに追加する場合がある。
これとは逆に、モーション情報テーブルに含まれたモーション情報候補の個数と差分が閾値以上であるインデックスを有するモーション情報候補に対してのみ重複性検査が行われるように設定することもできる。
重複性検査が行われるモーション情報候補の個数は、符号化器および復号器で予め定義されていてもよい。例えば、閾値は、0、1または2などの整数である場合がある。
または、マージ候補リストに含まれたマージ候補の個数またはモーション情報テーブルに含まれたモーション情報候補の個数の少なくとも一つに基づいて閾値を判定する場合がある。
第1モーション情報候補と同一のマージ候補が発見された場合、第2モーション情報候補に対する重複性検査の時に、第1モーション情報候補と同一のマージ候補との重複性検査を省略する場合がある。
図17は、特定のマージ候補との重複性検査が省略される例を示す図である。
インデックスがiであるモーション情報候補HmvpCand[i]をマージ候補リストに追加しようとする場合、モーション情報候補とマージ候補リストに予め格納されたマージ候補との重複性検査が行われる。この場合、モーション情報候補HmvpCand[i]と同一のマージ候補mergeCandList[j]が発見された場合、モーション情報候補HmvpCand[i]をマージ候補リストに追加せず、インデックスがi-1であるモーション情報候補HmvpCand[i-1]とマージ候補との重複性検査を行う場合がある。この場合、モーション情報候補HmvpCand[i-1]とマージ候補mergeCandList[j]との重複性検査は省略する場合がある。
一例として、図17に図示されている例では、HmvpCand[i]とmergeCandList[2]が同一のものに判定された。これにより、HmvpCand[i]は、マージ候補リストに追加されず、HmvpCand[i-1]に対する重複性検査が行われる場合がある。この場合、HvmpCand[i-1]とmergeCandList[2]との重複性検査は省略される場合がある。
現在ブロックのマージ候補リストに含まれたマージ候補の個数が閾値より小さい場合、モーション情報候補以外にも、ペアワイズマージ候補またはゼロマージ候補の少なくとも一つがさらに含まれることもできる。ペアワイズマージ候補は、二つ以上のマージ候補の動きベクトルを平均した値を動きベクトルとして有するマージ候補を意味し、ゼロマージ候補は、モーションベクトルが0であるマージ候補を意味する。
現在ブロックのマージ候補リストは、以下の順序にしたがって、マージ候補が追加される場合がある。
空間的マージ候補-時間的マージ候補-モーション情報候補-(アフィンモーション情報候補)-ペアワイズマージ候補-ゼロマージ候補
空間的マージ候補は、近隣ブロックまたは非近隣ブロックの少なくとも一つから導出されるマージ候補を意味し、時間的マージ候補は、前の参照ピクチャから導出されるマージ候補を意味する。アフィンモーション情報候補は、アフィンモーションモデルで符号化/復号されたブロックから導出されたモーション情報候補を示す。
モーションベクトル予測モードでもモーション情報テーブルが用いられる場合がある。一例として、現在ブロックの動きベクトル予測候補リストに含まれた動きベクトル予測候補の個数が閾値より小さい場合、モーション情報テーブルに含まれたモーション情報候補を現在ブロックに対する動きベクトル予測候補に設定する場合がある。具体的には、モーション情報候補の動きベクトルを動きベクトル予測候補に設定する場合がある。
現在ブロックの動きベクトル予測候補リストに含まれた動きベクトル予測候補のいずれか一つが選択されると、選択された候補を現在ブロックの動きベクトル予測子に設定する場合がある。次に、現在ブロックの動きベクトル残差値を復号した後、動きベクトル予測子と動きベクトル残差値を合算して、現在ブロックの動きベクトルを得る場合がある。
現在ブロックの動きベクトル予測候補リストは、以下の順序にしたがって構成される場合がある。
空間的モーションベクトル予測候補-時間的モーションベクトル予測候補-モーション情報候補-(アフィンモーション情報候補)-ゼロモーションベクトル予測候補
空間的モーションベクトル予測候補は、近隣ブロックまたは非近隣ブロックの少なくとも一つから導出されるモーションベクトル予測候補を意味し、時間的モーションベクトル予測候補は、前の参照ピクチャから導出されるモーションベクトル予測候補を意味する。アフィンモーション情報候補は、アフィンモーションモデルで符号化/復号されたブロックから導出されたモーション情報候補を示す。ゼロモーションベクトル予測候補は、動きベクトルの値が0である候補を示す。
コーディングブロックよりもさらに大きいサイズのマージ処理領域が画定される場合がある。マージ処理領域に含まれたコーディングブロックは、順に符号化/復号されず、並列処理される場合がある。ここで、順に符号化/復号されないということは、符号化/復号順序が定義されていないことを意味する。これにより、マージ処理領域に含まれたブロックの符号化/復号過程は、独立的に処理される場合がある。または、マージ処理領域に含まれたブロックは、マージ候補を共有する場合がある。ここで、マージ候補は、マージ処理領域を基準に導出される場合がある。
上述の特徴によって、マージ処理領域を、並列処理領域、マージ共有領域(Shared Merge Region、SMR)またはMER(Merge Estimation Region)と称することもできる。
現在ブロックのマージ候補は、コーディングブロックを基準に導出される場合がある。ただし、現在ブロックが現在ブロックよりもさらに大きいサイズのマージ処理領域に含まれた場合、現在ブロックと同一のマージ処理領域に含まれた候補ブロックは、マージ候補として利用不可能なものに設定される場合がある。
図18は、現在ブロックと同一のマージ処理領域に含まれた候補ブロックがマージ候補として利用不可能なものに設定される例を示す図である。
図18の左側に図示されている例において、CU5の符号化/復号の時に、CU5に隣接した基準サンプルを含むブロックが候補ブロックに設定される場合がある。この場合、CU5と同一のマージ処理領域に含まれた候補ブロックX3およびX4は、CU5のマージ候補として利用不可能なものに設定される場合がある。一方、CU5と同一のマージ処理領域に含まれていない候補ブロックX0、X1およびX2は、マージ候補として利用可能なものに設定される場合がある。
図18の右側に図示されている例において、CU8の符号化/復号の時に、CU8に隣接した基準サンプルを含むブロックが候補ブロックに設定される場合がある。この場合、CU8と同一のマージ処理領域に含まれた候補ブロックX6、X7およびX8は、マージ候補として非可用なものに設定される場合がある。一方、CU8と同一のマージ領域に含まれていない候補ブロックX5およびX9は、マージ候補として利用可能なものに設定される場合がある。
または、現在ブロックがマージ処理領域に含まれた場合、現在ブロックに隣接する近隣ブロックおよびマージ処理領域に隣接する近隣ブロックが候補ブロックに設定される場合がある。
図19は、現在ブロックがマージ処理領域に含まれている場合、現在ブロックに対するマージ候補を導出する例を示す図である。
図19(a)に図示されている例のように、現在ブロックが隣接する近隣ブロックが現在ブロックのマージ候補を導出するための候補ブロックに設定される場合がある。この場合、現在ブロックと同一のマージ処理領域に含まれた候補ブロックは、マージ候補として非可用なものに設定される場合がある。一例として、コーディングブロックCU3に対するマージ候補の導出時に、コーディングブロックCU3と同一のマージ処理領域に含まれた上端近隣ブロックy3および右上端近隣ブロックy4は、コーディングブロックCU3のマージ候補として利用不可能なものに設定される場合がある。
現在ブロックに隣接する近隣ブロックを予め定義された順序にしたがってスキャンし、マージ候補を導出する場合がある。一例として、予め定義された順序は、y1、y3、y4、y0およびy2の順である場合がある。
現在ブロックに隣接する近隣ブロックから導出する場合があるマージ候補の個数がマージ候補の最大個数または最大個数からオフセットを減算した値より小さい場合、図19(b)に図示されている例のように、マージ処理領域に隣接する近隣ブロックを用いて現在ブロックに対するマージ候補を導出する場合がある。一例として、コーディングブロックCU3を含むマージ処理領域に隣接する近隣ブロックを、コーディングブロックCU3に対する候補ブロックに設定する場合がある。ここで、マージ処理領域に隣接する近隣ブロックは、左側近隣ブロックx1、上端近隣ブロックx3、左下端近隣ブロックx0、右上端近隣ブロックx4または左上端近隣ブロックx2の少なくとも一つを含む場合がある。
マージ処理領域に隣接する近隣ブロックを予め定義された順序にしたがってスキャンし、マージ候補を導出する場合がある。一例として、予め定義された順序は、x1、x3、x4、x0およびx2の順である場合がある。
まとめると、マージ処理領域に含まれたコーディングブロックCU3に対するマージ候補は、以下のスキャン順序にしたがって候補ブロックをスキャンして導出される場合がある。
(y1,y3,y4,y0,y2,x1,x3,x4,x0,x2)
ただし、上記に例示されている候補ブロックのスキャン順序は、本開示の一例示を示すものに過ぎず、上記の例示と相違する順序にしたがって候補ブロックをスキャンすることも可能である。または、現在ブロックまたはマージ処理領域のサイズまたは形状の少なくとも一つに基づいて、スキャン順序を適応的に判定することもできる。
マージ処理領域は、正方形または非正方形である場合がある。マージ処理領域を判定するための情報がビットストリームを介してシグナリングされる場合がある。情報は、マージ処理領域の形状を示す情報またはマージ処理領域のサイズを示す情報の少なくとも一つを含む場合がある。マージ処理領域が非正方形状である場合、マージ処理領域のサイズを示す情報、マージ処理領域の幅および/または高さを示す情報またはマージ処理領域の幅と高さの比率を示す情報の少なくとも一つがビットストリームを介してシグナリングされる場合がある。
マージ処理領域のサイズは、ビットストリームを介してシグナリングされる情報、ピクチャ解像度、スライスのサイズまたはタイルのサイズの少なくとも一つに基づいて判定される場合がある。
マージ処理領域に含まれたブロックに対して動き補償予測が行われると、動き補償予測が行われたブロックの動き情報に基づいて導出されたモーション情報候補をモーション情報テーブルに追加する場合がある。
ただし、マージ処理領域に含まれたブロックから導出されたモーション情報候補をモーション情報テーブルに追加する場合、ブロックよりも実際に符号化/復号が遅れたマージ処理領域内の他のブロックの符号化/復号の時に、ブロックから導出されたモーション情報候補を使用する場合が発生し得る。すなわち、マージ処理領域に含まれたブロックの符号化/復号の時に、ブロック間の依存性を排除する必要があるにもかかわらず、マージ処理領域に含まれた他のブロックの動き情報を用いて動き予測補償が行われる場合が発生し得る。このような問題を解消するために、マージ処理領域に含まれたブロックの符号化/復号が完了しても、符号化/復号が完了したブロックの動き情報をモーション情報テーブルに追加しない場合がある。
または、マージ処理領域内の予め画定された位置のブロックのみを用いて、モーション情報テーブルをアップデートする場合がある。予め画定された位置は、マージ処理領域内の左上端に位置するブロック、右上端に位置するブロック、左下端に位置するブロック、右下端に位置するブロック、中央に位置するブロック、右側境界に隣接するブロックまたは下端境界に隣接するブロックの少なくとも一つを含む場合がある。一例として、マージ処理領域内の右下端コーナに隣接するブロックの動き情報のみをモーション情報テーブルにアップデートして、他のブロックの動き情報は、モーション情報テーブルにアップデートしない場合がある。
または、マージ処理領域に含まれたすべてのブロックの復号が完了した後、ブロックから導出されたモーション情報候補をモーション情報テーブルに追加する場合がある。すなわち、マージ処理領域に含まれたブロックが符号化/復号される間には、モーション情報テーブルがアップデートされない場合がある。
一例として、マージ処理領域に含まれたブロックに対して動き補償予測が行われると、ブロックから導出されたモーション情報候補を予め定義された順序でモーション情報テーブルに追加する場合がある。ここで、予め定義された順序は、マージ処理領域またはコーディングツリーユニット内のコーディングブロックのスキャン順序にしたがって判定される場合がある。スキャン順序は、ラスタースキャン、水平スキャン、垂直スキャンまたはジグザグスキャンの少なくとも一つである場合がある。または、予め定義された順序は、各ブロックの動き情報または同一の動き情報を有するブロックの個数に基づいて判定される場合がある。
または、単方向モーション情報を含むモーション情報候補を双方向モーション情報を含むモーション情報候補よりも先にモーション情報テーブルに追加する場合がある。これとは逆に、双方向モーション情報を含むモーション情報候補を単方向モーション情報を含むモーション情報候補よりも先にモーション情報テーブルに追加することもできる。
または、マージ処理領域またはコーディングツリーユニット内の使用頻度が高い順序または使用頻度が低い順序にしたがって、モーション情報候補をモーション情報テーブルに追加する場合がある。
現在ブロックがマージ処理領域に含まれており、現在ブロックのマージ候補リストに含まれたマージ候補の個数が最大個数より小さい場合、モーション情報テーブルに含まれたモーション情報候補をマージ候補リストに追加する場合がある。この場合、現在ブロックと同一のマージ処理領域に含まれたブロックから導出されたモーション情報候補は、現在ブロックのマージ候補リストに追加されないように設定される場合がある。
または、現在ブロックがマージ処理領域に含まれた場合、モーション情報テーブルに含まれたモーション情報候補を使用しないように設定する場合がある。すなわち、現在ブロックのマージ候補リストに含まれたマージ候補の個数が最大個数より小さい場合であっても、モーション情報テーブルに含まれたモーション情報候補をマージ候補リストに追加しない場合がある。
他の例として、マージ処理領域またはコーディングツリーユニットに対するモーション情報テーブルを構成する場合がある。このモーション情報テーブルは、マージ処理領域に含まれたブロックのモーション情報を臨時に格納する役割を果たす。一般的なモーション情報テーブルとマージ処理領域またはコーディングツリーユニットのためのモーション情報テーブルとを区別するために、マージ処理領域またはコーディングツリーユニットのためのモーション情報テーブルを臨時モーション情報テーブルと称する。なお、臨時モーション情報テーブルに格納されているモーション情報候補を臨時モーション情報候補と称する。
図20は、臨時モーション情報テーブルを示す図である。
コーディングツリーユニットまたはマージ処理領域のための臨時モーション情報テーブルを構成する場合がある。コーディングツリーユニットまたはマージ処理領域に含まれた現在ブロックに対して動き補償予測が行われた場合、ブロックの動き情報は、モーション情報テーブルHmvpCandListに追加しない場合がある。その代わりに、ブロックから導出された臨時モーション情報候補を臨時モーション情報テーブルHmvpMERCandListに追加する場合がある。すなわち、臨時モーション情報テーブルに追加された臨時モーション情報候補は、モーション情報テーブルに追加されない場合がある。これにより、モーション情報テーブルは、現在ブロックを含むコーディングツリーユニットまたはマージ処理領域に含まれたブロックのモーション情報に基づいて導出されたモーション情報候補を含まない場合がある。
または、マージ処理領域に含まれたブロックの一部ブロックの動き情報のみを臨時モーション情報テーブルに追加する場合がある。一例として、マージ処理領域内の予め画定された位置のブロックのみをモーション情報テーブルをアップデートするために用いる場合がある。予め画定された位置は、マージ処理領域内の左上端に位置するブロック、右上端に位置するブロック、左下端に位置するブロック、右下端に位置するブロック、中央に位置するブロック、右側境界に隣接するブロックまたは下端境界に隣接するブロックの少なくとも一つを含む場合がある。一例として、マージ処理領域内の右下端コーナに隣接するブロックの動き情報のみを臨時モーション情報テーブルに追加し、他のブロックの動き情報は、臨時モーション情報テーブルに追加しない場合がある。
臨時モーション情報テーブルが含む場合がある臨時モーション情報候補の最大個数は、モーション情報テーブルが含む場合があるモーション情報候補の最大個数と同様に設定される場合がある。または、臨時モーション情報テーブルが含む場合がある臨時モーション情報候補の最大個数は、コーディングツリーユニットまたはマージ処理領域のサイズによって判定される場合がある。または、臨時モーション情報テーブルが含む場合がある臨時モーション情報候補の最大個数をモーション情報テーブルが含む場合があるモーション情報候補の最大個数より小さく設定する場合がある。
コーディングツリーユニットまたはマージ処理領域に含まれた現在ブロックは、当該コーディングツリーユニットまたは当該マージ処理領域に対する臨時モーション情報テーブルを用いないように設定する場合がある。すなわち、現在ブロックのマージ候補リストに含まれたマージ候補の個数が閾値より小さい場合、モーション情報テーブルに含まれたモーション情報候補をマージ候補リストに追加し、臨時モーション情報テーブルに含まれた臨時モーション情報候補は、マージ候補リストに追加しない場合がある。これにより、現在ブロックと同一のコーディングツリーユニットまたは同一のマージ処理領域に含まれた他のブロックの動き情報を現在ブロックの動き補償予測に用いない場合がある。
コーディングツリーユニットまたはマージ処理領域に含まれたすべてのブロックの符号化/復号が完了すると、モーション情報テーブルと臨時モーション情報テーブルを併合する場合がある。
図21は、モーション情報テーブルと臨時モーション情報テーブルを併合する例を示す図である。
コーディングツリーユニットまたはマージ処理領域に含まれたすべてのブロックの符号化/復号が完了すると、図21に図示されている例のように、臨時モーション情報テーブルに含まれた臨時モーション情報候補をモーション情報テーブルにアップデートする場合がある。
この場合、臨時モーション情報テーブルに含まれた臨時モーション情報候補は、臨時モーション情報テーブルに挿入された順(すなわち、インデックス値の昇順または降順)にモーション情報テーブルに追加される場合がある。
他の例として、予め定義された順序にしたがって、臨時モーション情報テーブルに含まれた臨時モーション情報候補をモーション情報テーブルに追加する場合がある。ここで、予め定義された順序は、マージ処理領域またはコーディングツリーユニット内のコーディングブロックのスキャン順序にしたがって判定される場合がある。スキャン順序は、ラスタースキャン、水平スキャン、垂直スキャンまたはジグザグスキャンの少なくとも一つである場合がある。または、予め定義された順序は、各ブロックの動き情報または同一の動き情報を有するブロックの個数に基づいて判定される場合がある。
または、単方向モーション情報を含む臨時モーション情報候補を双方向モーション情報を含む臨時モーション情報候補よりも先にモーション情報テーブルに追加する場合がある。これとは逆に、双方向モーション情報を含む臨時モーション情報候補を単方向モーション情報を含む臨時モーション情報候補よりも先にモーション情報テーブルに追加することもできる。
または、マージ処理領域またはコーディングツリーユニット内の使用頻度が高い順序または使用頻度が低い順序にしたがって、臨時モーション情報候補をモーション情報テーブルに追加する場合がある。
臨時モーション情報テーブルに含まれた臨時モーション情報候補をモーション情報テーブルに追加する場合において、臨時モーション情報候補に対する重複性検査を行う場合がある。一例として、臨時モーション情報テーブルに含まれた臨時モーション情報候補と同一のモーション情報候補がモーション情報テーブルに予め格納されている場合、臨時モーション情報候補をモーション情報テーブルに追加しない場合がある。この場合、重複性検査は、モーション情報テーブルに含まれたモーション情報候補のうち一部を対象に行われる場合がある。一例として、インデックスが閾値以上または閾値以下であるモーション情報候補を対象に重複性検査が行われる場合がある。一例として、臨時モーション情報候補が予め定義された値以上のインデックスを有するモーション情報候補と同一である場合には、臨時モーション情報候補をモーション情報テーブルに追加しない場合がある。
現在ブロックと同一のコーディングツリーユニットまたは同一のマージ処理領域に含まれたブロックから導出されたモーション情報候補が現在ブロックのマージ候補として用いられることを制限する場合がある。このために、モーション情報候補に対してブロックのアドレス情報をさらに格納する場合がある。ブロックのアドレス情報は、ブロックの位置、ブロックのアドレス、ブロックのインデックス、ブロックが含まれたマージ処理領域の位置、ブロックが含まれたマージ処理領域のアドレス、ブロックが含まれたマージ処理領域のインデックス、ブロックが含まれたコーディングツリー領域の位置、ブロックが含まれたコーディングツリー領域のアドレスまたはブロックが含まれたコーディングツリー領域のインデックスの少なくとも一つを含む場合がある。
イントラ予測は、現在ブロックの周辺に符号化/復号が完了した復元サンプルを用いて、現在ブロックを予測するものである。この場合、現在ブロックのイントラ予測には、インループフィルタが適用される前の復元サンプルが用いられる場合がある。
イントラ予測技法は、マトリックス(Matrix)に基づくイントラ予測および周辺復元サンプルとの方向性を考慮した一般イントラ予測を含む。現在ブロックのイントラ予測技法を指示する情報がビットストリームを介してシグナリングされる場合がある。情報は、1ビットのフラグである場合がある。または、現在ブロックの位置、サイズ、形状または近隣ブロックのイントラ予測技法の少なくとも一つに基づいて、現在ブロックのイントラ予測技法を判定する場合がある。一例として、現在ブロックがピクチャバウンダリにわたり存在する場合、現在ブロックには、マトリックスに基づくイントラ予測が適用されないように設定される場合がある。
マトリックスに基づくイントラ予測は、符号化器および復号器で予め格納されたマトリックスと、現在ブロック周辺の復元サンプルとの行列乗算に基づいて、現在ブロックの予測ブロックを得る方法である。予め格納された複数個のマトリックスのいずれか一つを特定するための情報がビットストリームを介してシグナリングされる場合がある。復号器は、情報および現在ブロックのサイズに基づいて、現在ブロックのイントラ予測のためのマトリックスを判定する場合がある。
一般イントラ予測は、非方向性イントラ予測モードまたは方向性イントラ予測モードに基づいて、現在ブロックに対する予測ブロックを得る方法である。以下、図面を参照して、一般イントラ予測に基づくイントラ予測実行過程についてより詳細に説明する。
図22は、本開示の一実施形態によるイントラ予測方法のフローチャートである。
現在ブロックの参照サンプルラインを判定する場合がある(S2201)。参照サンプルラインは、現在ブロックの上端および/または左側からk番目離れたラインに含まれた参照サンプルの集合を意味する。参照サンプルは、現在ブロック周辺符号化/復号が完了した復元サンプルから導出される場合がある。
複数の参照サンプルラインのうち現在ブロックの参照サンプルラインを識別するインデックス情報がビットストリームを介してシグナリングされる場合がある。一例として、現在ブロックの参照サンプルラインを特定するためのインデックス情報intra_luma_ref_idxがビットストリームを介してシグナリングされる場合がある。インデックス情報は、コーディングブロック単位でシグナリングされる場合がある。
複数の参照サンプルラインは、現在ブロックに上端および/または左側1番目のライン、2番目のライン、3番目のラインの少なくとも一つを含む場合がある。複数個の参照サンプルラインのうち現在ブロックの上端に隣接する行および現在ブロックの左側に隣接する列で構成された参照サンプルラインを隣接参照サンプルラインと称し、それ以外の参照サンプルラインを非隣接参照サンプルラインと称することもできる。
表1は、候補参照サンプルラインそれぞれに割り当てられるインデックスを示すものである。
現在ブロックの位置、サイズ、形状または近隣ブロックの予測符号化モードの少なくとも一つに基づいて、現在ブロックの参照サンプルラインを判定することもできる。一例として、現在ブロックが、ピクチャ、タイル、スライスまたはコーディングツリーユニットの境界に接する場合、隣接参照サンプルラインを現在ブロックの参照サンプルラインに判定する場合がある。
参照サンプルラインは、現在ブロックの上端に位置する上端参照サンプルおよび現在ブロックの左側に位置する左側参照サンプルを含む場合がある。上端参照サンプルおよび左側参照サンプルは、現在ブロック周辺の復元サンプルから導出される場合がある。復元サンプルは、インループフィルタが適用される前の状態である場合がある。
次に、現在ブロックのイントラ予測モードを判定する場合がある(S2202)。現在ブロックのイントラ予測モードは、非方向性イントラ予測モードまたは方向性イントラ予測モードの少なくとも一つが現在ブロックのイントラ予測モードとして判定される場合がある。非方向性イントラ予測モードは、プランナーおよびDCを含み、方向性イントラ予測モードは、左下端対角方向から右上端対角方向まで33個または65個のモードを含む。
図23は、イントラ予測モードを示す図である。
図23(a)は、35個のイントラ予測モードを示すものであり、図23(b)は、67個のイントラ予測モードを示すものである。
図23に図示されているよりもさらに多い数あるいはさらに少ない数のイントラ予測モードが定義されることもできる。
現在ブロックに隣接する近隣ブロックのイントラ予測モードに基づいて、MPM(Most Probable Mode)を設定する場合がある。ここで、近隣ブロックは、現在ブロックの左側に隣接する左側近隣ブロックおよび現在ブロックの上端に隣り合う上端近隣ブロックを含む場合がある。
MPMリストに含まれるMPMの個数は、符号化器および復号器で予め設定される場合がある。一例として、MPMの個数は、3個、4個、5個あるいは6個である場合がある。または、MPMの個数を示す情報がビットストリームを介してシグナリングされる場合がある。または、近隣ブロックの予測符号化モード、現在ブロックのサイズ、形状または参照サンプルラインインデックスの少なくとも一つに基づいてMPMの個数が判定される場合がある。一例として、隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定された場合には、N個のMPMが用いられる一方、非隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定された場合には、M個のMPMが用いられる場合がある。Mは、Nより小さい自然数であり、一例として、Nは6であり、Mは5、4または3である場合がある。これにより、現在ブロックの参照サンプルラインのインデックスが0であり、MPMフラグが真の場合、現在ブロックのイントラ予測モードは、6個の候補イントラ予測モードのいずれか一つとして判定される一方、現在ブロックの参照サンプルラインのインデックスが0より大きく、MPMフラグが真の場合、現在ブロックのイントラ予測モードは、5個の候補イントラ予測モードのいずれか一つとして判定される場合がある。
または、現在ブロックの参照サンプルラインのインデックスとは無関係に固定された個数(例えば、6個または5個)のMPM候補を使用することもできる。
複数のMPMを含むMPMリストを生成し、現在ブロックのイントラ予測モードと同一のMPMがMPMリストに含まれているか否かを示す情報をビットストリームを介してシグナリングする場合がある。情報は、1ビットのフラグであり、MPMフラグと称する場合がある。MPMフラグが現在ブロックと同一のMPMがMPMリストに含まれていることを示す場合、MPMのうち一つを識別するインデックス情報がビットストリームを介してシグナリングされる場合がある。一例として、複数のMPMのいずれか一つを特定するインデックス情報mpm_idxがビットストリームを介してシグナリングされる場合がある。インデックス情報によって特定されたMPMが現在ブロックのイントラ予測モードに設定される場合がある。MPMフラグが現在ブロックと同一のMPMがMPMリストに含まれていないことを示す場合、MPM以外の残りのイントラ予測モードのいずれか一つを指示する残りのモード情報がビットストリームを介してシグナリングされる場合がある。残りのモード情報は、MPM以外の残りのイントラ予測モードにインデックスを再度割り当てた時に、現在ブロックのイントラ予測モードに対応するインデックス値を示す。復号器では、MPMを昇順に整列し、残りのモード情報をMPMと比較して現在ブロックのイントラ予測モードを判定する場合がある。一例として、残りのモード情報がMPMと同一であるか小さい場合、残りのモード情報に1を加算して、現在ブロックのイントラ予測モードを導出する場合がある。
現在ブロックのイントラ予測モードの導出時に、MPMのうち一部と残りのモード情報との比較は省略される場合がある。一例として、MPMのうち非方向性イントラ予測モードであるMPMは、比較対象から除外される場合がある。非方向性イントラ予測モードがMPMに設定された場合、残りのモード情報は、方向性イントラ予測モードを示すことが明確であるため、非方向性イントラ予測モード以外の残りのMPMと残りのモード情報との比較により、現在ブロックのイントラ予測モードを導出する場合がある。非方向性イントラ予測モードを比較対象から除外する代わりに、残りのモード情報に非方向性イントラ予測モードの個数を加算した後、その結果値を残りのMPMと比較する場合がある。
デフォルトモードをMPMに設定する代わりに、現在ブロックのイントラ予測モードがデフォルトモードであるか否かを示す情報をビットストリームを介してシグナリングする場合がある。情報は、1ビットのフラグであり、フラグをデフォルトモードフラグと称する場合がある。デフォルトモードフラグは、MPMフラグが現在ブロックと同一のMPMがMPMリストに含まれていることを示す場合に限ってシグナリングされる場合がある。上述のように、デフォルトモードは、プランナー、DC、垂直方向モードまたは水平方向モードの少なくとも一つを含む場合がある。一例として、プランナーがデフォルトモードに設定された場合、デフォルトモードフラグは、現在ブロックのイントラ予測モードがプランナーであるか否かを指示する場合がある。デフォルトモードフラグが現在ブロックのイントラ予測モードがデフォルトモードではないことを示す場合、インデックス情報によって指示されるMPMのうち一つを現在ブロックのイントラ予測モードに設定する場合がある。
デフォルトモードフラグが用いられる場合、デフォルトモードと同一のイントラ予測モードは、MPMに設定されないように設定される場合がある。一例として、デフォルトモードフラグが現在ブロックのイントラ予測モードがプランナーであるか否かを指示する場合、プランナーに該当するMPM以外の5個のMPMを用いて、現在ブロックのイントラ予測モードを導出する場合がある。
複数個のイントラ予測モードがデフォルトモードに設定された場合、デフォルトモードのいずれか一つを指示するインデックス情報がさらにシグナリングされる場合がある。現在ブロックのイントラ予測モードは、インデックス情報が示すデフォルトモードに設定される場合がある。
現在ブロックの参照サンプルラインのインデックスが0ではない場合には、デフォルトモードを用いることができないように設定する場合がある。一例として、非隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定された場合、DCモードまたはプランナーモードなどの非方向性イントラ予測モードを使用しないように設定する場合がある。これにより、参照サンプルラインのインデックスが0ではない場合には、デフォルトモードフラグをシグナリングせず、デフォルトモードフラグの値を予め定義された値(すなわち、偽)に設定する場合がある。
現在ブロックのイントラ予測モードが判定されると、判定されたイントラ予測モードに基づいて、現在ブロックに対する予測サンプルを得る場合がある(S2203)。
DCモードが選択された場合、参照サンプルの平均値に基づいて、現在ブロックに対する予測サンプルが生成される。具体的には、予測ブロック内の全体サンプルの値は、参照サンプルの平均値に基づいて生成される場合がある。平均値は、現在ブロックの上端に位置する上端参照サンプルおよび現在ブロックの左側に位置する左側参照サンプルの少なくとも一つを用いて導出される場合がある。
現在ブロックの形状に応じて、平均値を導出するために用いられる参照サンプルの個数または範囲が変わり得る。一例として、現在ブロックが、幅が高さより大きい非正方形ブロックである場合、上端参照サンプルのみを用いて平均値を計算する場合がある。一方、現在ブロックが、幅が高さより小さい非正方形ブロックである場合、左側参照サンプルのみを用いて平均値を計算する場合がある。すなわち、現在ブロックの幅および高さが相違する場合、長さがより長い方に隣接する参照サンプルのみを用いて平均値を計算する場合がある。または、現在ブロックの幅と高さの比率に基づいて、上端参照サンプルのみを用いて平均値を計算するか否かまたは左側参照サンプルのみを用いて平均値を計算するか否かを判定する場合がある。
プランナーモードが選択された場合、水平方向予測サンプルと垂直方向予測サンプルを用いて、予測サンプルを得る場合がある。ここで、水平方向予測サンプルは、予測サンプルと同一の水平線上に位置する左側参照サンプルおよび右側参照サンプルに基づいて得られ、垂直方向予測サンプルは、予測サンプルと同一の垂直線上に位置する上端参照サンプルおよび下端参照サンプルに基づいて得られる。ここで、右側参照サンプルは、現在ブロックの右上端コーナに隣接する参照サンプルをコピーして生成され、下端参照サンプルは、現在ブロックの左下端コーナに隣接する参照サンプルをコピーして生成される場合がある。水平方向予測サンプルは、左側参照サンプルおよび右側参照サンプルの加重和演算に基づいて得られ、垂直方向予測サンプルは、上端参照サンプルおよび下端参照サンプルの加重和演算に基づいて得られる場合がある。この場合、各参照サンプルに付与される加重値は、予測サンプルの位置によって判定される場合がある。予測サンプルは、水平方向予測サンプルおよび垂直方向予測サンプルの平均演算または加重和演算に基づいて得られる場合がある。加重和演算が行われる場合、予測サンプルの位置に基づいて、水平方向予測サンプルおよび垂直方向予測サンプルに付与される加重値を判定する場合がある。
方向性予測モードが選択される場合、選択された方向性予測モードの予測方向(または予測角度)を示すパラメータを判定する場合がある。下記表2は、イントラ予測モード別のイントラ方向パラメータintraPredAngを示すものである。
表2は、35個のイントラ予測モードが定義されている時に、インデックスが2~34のいずれか一つであるイントラ予測モードそれぞれのイントラ方向パラメータを示す。33個よりもさらに多い方向性イントラ予測モードが定義されている場合、表2をより細分化し、方向性イントラ予測モードそれぞれのイントラ方向パラメータを設定する場合がある。
現在ブロックの上端参照サンプルおよび左側参照サンプルを一列に配列した後、イントラ方向パラメータの値に基づいて、予測サンプルを得る場合がある。この場合、イントラ方向パラメータの値が負の数である場合、左側参照サンプルと上端参照サンプルを一列に配列する場合がある。
図24および図25は、参照サンプルを一列に配列する一次元配列の例示を示す図である。
図24は、参照サンプルを垂直方向に配列する垂直方向一次元配列の例示を示すものであり、図25は、参照サンプルを水平方向に配列する水平方向一次元配列の例示を示すものである。35個のイントラ予測モードが定義された場合を仮定して、図24および図25の実施形態を説明する。
イントラ予測モードインデックスが11~18のいずれか一つである場合、上端参照サンプルを反時計回りに回転した水平方向一次元配列を適用し、イントラ予測モードインデックスが19~25のいずれか一つである場合、左側参照サンプルを時計回りに回転した垂直方向一次元配列を適用する場合がある。参照サンプルを一列に配列するのに際し、イントラ予測モードの角度を考慮する場合がある。
イントラ方向パラメータに基づいて、参照サンプル判定パラメータを判定する場合がある。参照サンプル判定パラメータは、参照サンプルを特定するための参照サンプルインデックスおよび参照サンプルに適用される加重値を判定するための加重値パラメータを含む場合がある。
参照サンプルインデックスiIdxおよび加重値パラメータifactは、それぞれ、以下の数式4および数式5により得られる場合がある。
数式4および数式5において、Pangは、イントラ方向パラメータを示す。参照サンプルインデックスiIdxによって特定される参照サンプルは、整数ペル(Integer pel)に該当する。
予測サンプルを導出するために、少なくとも一つ以上の参照サンプルを特定する場合がある。具体的には、予測モードの勾配を考慮して、予測サンプルを導出するために用いられる参照サンプルの位置を特定する場合がある。一例として、参照サンプルインデックスiIdxを用いて、予測サンプルを導出するために用いられる参照サンプルを特定する場合がある。
この場合、イントラ予測モードの勾配が一つの参照サンプルでは表現されない場合、複数の参照サンプルを補間して予測サンプルを生成する場合がある。一例として、イントラ予測モードの勾配が予測サンプルと第1参照サンプルとの間の勾配と、予測サンプルと第2参照サンプルとの間の勾配との間の値である場合、第1参照サンプルおよび第2参照サンプルを補間して予測サンプルを得る場合がある。すなわち、イントラ予測角度に沿うアンギュラライン(Angular Line)が整数ペルに位置した参照サンプルを通過しない場合、アンギュララインが通過する位置の左右または上下に隣接して位置する参照サンプルを補間して予測サンプルを得る場合がある。
下記数式6は、参照サンプルに基づいて、予測サンプルを得る例を示すものである。
数式6において、Pは、予測サンプルを示し、Ref_1Dは、一次元配列された参照サンプルのいずれか一つを示す。この場合、参照サンプルの位置は、予測サンプルの位置(x,y)および参照サンプルインデックスiIdxによって判定される場合がある。
イントラ予測モードの勾配が一つの参照サンプルで表現可能な場合、加重値パラメータifactは0に設定される。これにより、数式6は、以下の数式7のように簡素化される場合がある。
複数のイントラ予測モードに基づいて現在ブロックに対するイントラ予測を行うこともできる。一例として、予測サンプル別にイントラ予測モードを導出し、それぞれの予測サンプルに割り当てられたイントラ予測モードに基づいて予測サンプルを導出する場合がある。
または、領域別にイントラ予測モードを導出し、それぞれの領域に割り当てられたイントラ予測モードに基づいて、各領域に対するイントラ予測を行う場合がある。ここで、領域は、少なくとも一つのサンプルを含む場合がある。領域のサイズまたは形状の少なくとも一つは、現在ブロックのサイズ、形状またはイントラ予測モードの少なくとも一つに基づいて適応的に判定される場合がある。または、符号化器および復号器で、現在ブロックのサイズまたは形状とは独立的に、領域のサイズまたは形状の少なくとも一つが予め画定されていてもよい。
図26は、方向性イントラ予測モードがx軸と平行な直線と形成する角度を例示した図である。
図26に示れている例のように、方向性予測モードは、左下端対角方向から右上端対角方向の間に存在する場合がある。x軸と方向性予測モードが形成する角度から説明すると、方向性予測モードは、45度(左下端対角方向)から-135度(右上端対角方向)の間に存在する場合がある。
現在ブロックが非正方形状である場合、現在ブロックのイントラ予測モードによって、イントラ予測角度に沿うアンギュラライン上に位置する参照サンプルのうち予測サンプルにより近い参照サンプルの代わりに、予測サンプルからより離れた参照サンプルを用いて予測サンプルを導出する場合があり得る。
図27は、現在ブロックが非正方形状である場合、予測サンプルが得られる態様を示す図である。
一例として、図27(a)に図示されている例のように、現在ブロックが幅が高さより大きい非正方形であり、現在ブロックのイントラ予測モードが0度から45度の間の角度を有する方向性イントラ予測モードであるものと仮定する。上記の場合、現在ブロックの右側列付近の予測サンプルAを導出する時に、角度に沿うアンギュラモード上に位置する参照サンプルのうち予測サンプルと近い上端参照サンプルTの代わりに予測サンプルから離れた左側参照サンプルLを用いる場合があり得る。
他の例として、図27(b)に図示されている例のように、現在ブロックが高さが幅より大きい非正方形であり、現在ブロックのイントラ予測モードが-90度から-135度の間である方向性イントラ予測モードであるものと仮定する。上記の場合、現在ブロックの下端行付近の予測サンプルAを導出する時に、角度に沿うアンギュラモード上に位置する参照サンプルのうち予測サンプルと近い左側参照サンプルLの代わりに予測サンプルから離れた上端参照サンプルTを用いる場合があり得る。
上記のような問題を解消するために、現在ブロックが非正方形である場合、現在ブロックのイントラ予測モードを逆方向のイントラ予測モードに置換する場合がある。これにより、非正方形ブロックに対しては、図23に図示されている方向性予測モードよりもさらに大きいあるいはさらに小さい角度を有する方向性予測モードを使用する場合がある。このような方向性イントラ予測モードをワイドアングルイントラ予測モードと定義する場合がある。ワイドアングルイントラ予測モードは、45度~-135度の範囲に属しない方向性イントラ予測モードを示す。
図28は、ワイドアングルイントラ予測モードを示す図である。
図28に図示されている例において、インデックスが-1から-14であるイントラ予測モードおよびインデックスが67から80の間であるイントラ予測モードがワイドアングルイントラ予測モードを示す。
図28では、角度が45度より大きい14個のワイドアングルイントラ予測モード(-1から-14)および角度が-135度より小さい14個のワイドアングルイントラ予測モード(67から80)を例示しているが、これよりもさらに多い数またはさらに少ない数のワイドアングルイントラ予測モードが定義される場合がある。
ワイドアングルイントラ予測モードが使用される場合、上端参照サンプルの長さは2W+1に設定され、左側参照サンプルの長さは2H+1に設定される場合がある。
ワイドアングルイントラ予測モードを使用するに伴い、図28(a)に図示されているサンプルAは、参照サンプルTを用いて予測され、図28(b)に図示されているサンプルAは、参照サンプルLを用いて予測される場合がある。
既存のイントラ予測モードとN個のワイドアングルイントラ予測モードを加算して、総67+N個のイントラ予測モードを使用する場合がある。一例として、表3は、20個のワイドアングルイントラ予測モードが定義された場合、イントラ予測モードのイントラ方向のパラメータを示すものである。
現在ブロックが非正方形であり、ステップS2502で得られた現在ブロックのイントラ予測モードが変換範囲に属する場合、現在ブロックのイントラ予測モードをワイドアングルイントラ予測モードに変換する場合がある。変換範囲は、現在ブロックのサイズ、形状または比率の少なくとも一つに基づいて判定される場合がある。ここで、比率は、現在ブロックの幅と高さとの比率を示す場合がある。
現在ブロックが幅が高さより大きい非正方形である場合、変換範囲は、右上端対角方向のイントラ予測モードインデックス(例えば、66)から(右上端対角方向であるイントラ予測モードのインデックス-N)に設定される場合がある。ここで、Nは、現在ブロックの比率に基づいて判定される場合がある。現在ブロックのイントラ予測モードが変換範囲に属する場合、イントラ予測モードをワイドアングルイントラ予測モードに変換する場合がある。変換は、イントラ予測モードから予め定義された値を減算するものである場合があり、予め定義された値は、ワイドアングルイントラ予測モード以外のイントラ予測モードの総個数(例えば、67)である場合がある。
実施形態によって、番号66から番号53の間のイントラ予測モードは、それぞれ、番号-1から番号-14の間のワイドアングルイントラ予測モードに変換される場合がある。
現在ブロックが高さが幅より大きい非正方形である場合、変換範囲は、左下端対角方向のイントラ予測モードインデックス(例えば、2)から(左下端対角方向のイントラ予測モードのインデックス+M)に設定される場合がある。ここで、Mは、現在ブロックの比率に基づいて判定される場合がある。現在ブロックのイントラ予測モードが変換範囲に属する場合、イントラ予測モードをワイドアングルイントラ予測モードに変換する場合がある。変換は、イントラ予測モードに予め定義された値を加算するものである場合があり、予め定義された値は、ワイドアングルイントラ予測モード以外の方向性イントラ予測モードの総個数(例えば、65)である場合がある。
実施形態によって、番号2から番号15の間のイントラ予測モードのそれぞれは、番号67から番号80の間のワイドアングルイントラ予測モードに変換される場合がある。
以下、変換範囲に属するイントラ予測モードをワイドアングルイントラ代替予測モードと称する。
変換範囲は、現在ブロックの比率に基づいて判定される場合がある。一例として、表4および表5は、それぞれ、ワイドアングルイントラ予測モード以外の35個のイントラ予測モードが定義された場合と、67個のイントラ予測モードが定義された場合の変換範囲を示す。
表4および表5に示れている例のように、現在ブロックの比率に応じて、変換範囲に含まれるワイドアングルイントラ代替予測モードの個数が相違する場合がある。
現在ブロックの比率をより細分化して、以下の表6のように変換範囲を設定することもできる。
非隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定された場合、または、複数の参照サンプルラインのいずれか一つを選択するマルチラインイントラ予測符号化方法が使用された場合において、ワイドアングルイントラ予測モードが使用されないように設定される場合がある。すなわち、現在ブロックが非正方形であり、現在ブロックのイントラ予測モードが変換範囲に属する場合であっても、現在ブロックのイントラ予測モードをワイドアングルイントラ予測モードに変換しない場合がある。
または、現在ブロックのイントラ予測モードがワイドアングルイントラ予測モードとして判定された場合、非隣接参照サンプルラインを現在ブロックの参照サンプルラインとして利用可能ではないものに設定するか、複数の参照サンプルラインのいずれか一つを選択するマルチラインイントラ予測符号化方法が使用されないように設定する場合がある。マルチラインイントラ予測符号化方法が使用されない場合、隣接参照サンプルラインが現在ブロックの参照サンプルラインに判定される場合がある。
ワイドアングルイントラ予測モードが使用されない場合、refWおよびrefHをnTbWとnTbHの和に設定する場合がある。これにより、左上端参照サンプル以外、現在ブロックとの距離がiである非隣接レファレンスサンプルは、(nTbW+nTbH+offsetX[i])個の上端参照サンプルと(nTbW+nTbH+offsetY[i])個の左側参照サンプルを含む場合がある。すなわち、現在ブロックとの距離がiである非隣接レファレンスサンプルは、(2nTbW+2nTbH+offsetX[i]+offsetY[i]+1)個の参照サンプルを含む場合がある。例えば、whRatioの値が1より大きい場合には、offsetXの値をoffsetYの値より大きく設定する場合がある。一例として、offsetXの値は1に設定され、offsetYの値は0に設定される場合がある。一方、whRatioの値が1より小さい場合には、offsetXの値よりoffsetYの値をより大きく設定する場合がある。一例として、offsetXの値は0に設定され、offsetYの値は1に設定される場合がある。
既存のイントラ予測モードにさらにワイドアングルイントラ予測モードが使用されることによって、ワイドアングルイントラ予測モードを符号化するために必要なリソースが増加し、符号化効率が低下し得る。そのため、ワイドアングルイントラ予測モードをそのまま符号化する代わりに、ワイドアングルイントラ予測モードに対する代替イントラ予測モードを符号化し、符号化効率を向上させる場合がある。
一例として、現在ブロックが番号67のワイドアングルイントラ予測モードを用いて符号化された場合、番号67のワイドアングル代替イントラ予測モードである番号2を現在ブロックのイントラ予測モードで符号化する場合がある。また、現在ブロックが番号-1のワイドアングルイントラ予測モードで符号化された場合、番号-1のワイドアングル代替イントラ予測モードである番号66を現在ブロックのイントラ予測モードで符号化する場合がある。
復号器では、現在ブロックのイントラ予測モードを復号し、復号されたイントラ予測モードが変換範囲に含まれるか否かを判断する場合がある。復号されたイントラ予測モードがワイドアングル代替イントラ予測モードである場合、イントラ予測モードをワイドアングルイントラ予測モードに変換する場合がある。
または、現在ブロックがワイドアングルイントラ予測モードで符号化された場合、ワイドアングルイントラ予測モードをそのまま符号化することもできる。
イントラ予測モードの符号化は、上述のMPMリストに基づいて行われる場合がある。具体的には、近隣ブロックがワイドアングルイントラ予測モードで符号化された場合、ワイドアングルイントラ予測モードに対応するワイドアングル代替イントラ予測モードに基づいて、MPMを設定する場合がある。
原本映像から予測映像を差分して残差映像を導出する場合がある。この場合、残差映像を周波数ドメインに変更した時に、周波数成分のうち高周波成分を除去しても、映像の主観的画質は大きく劣らない。これにより、高周波成分の値を小さく変換するか、高周波成分の値を0に設定すると、視覚的歪みが大きく発生しないとともに、圧縮効率を増加させる場合がある効果がある。上記の特性を反映して、残差映像を二次元周波数成分に分解するために現在ブロックを変換する場合がある。変換は、DCT(Discrete Cosine Transform)またはDST(Discrete Sine Tranform)などの変換技法を用いて行われる場合がある。
DCTは、コサイン変換を用いて、残差映像を二次元周波数成分に分解(または変換)するものであり、DSTは、サイン変換を用いて、残差映像を二次元周波数成分に分解(または変換)するものである。残差映像の変換の結果、周波数成分は、基底映像で表現される場合がある。一例として、N×Nサイズのブロックに対してDCT変換を行う場合、N2個の基本パターン成分が得られる場合がある。変換によりN×Nサイズのブロックに含まれた基本パターン成分それぞれのサイズが得られる場合がある。用いられた変換技法によって、基本パターン成分のサイズをDCT係数またはDST係数と称する場合がある。
変換技法DCTは、0ではない低周波成分が多く分布する映像を変換するために主に用いられる。変換技法DSTは、高周波成分が多く分布する映像に主に用いられる。
DCTまたはDST以外の変換技法を使用して残差映像を変換することもできる。
以下、残差映像を二次元周波数成分に変換することを二次元映像変換と称する。なお、変換の結果、得られた基本パターン成分のサイズを変換係数と称する。一例として、変換係数は、DCT係数またはDST係数を意味し得る。後述する第1変換および第2変換がいずれも適用された場合、変換係数は、第2変換の結果として生成された基本パターン成分のサイズを意味し得る。また、変換スキップが適用された残差サンプルも変換係数と称する。
変換技法は、ブロック単位で判定される場合がある。変換技法は、現在ブロックの予測符号化モード、現在ブロックのサイズまたは現在ブロックの形状の少なくとも一つに基づいて判定される場合がある。一例として、現在ブロックがイントラ予測モードで符号化され、現在ブロックのサイズがN×Nより小さい場合には、変換技法DSTを使用して変換が行われる場合がある。一方、条件を満たしていない場合、変換技法DCTを使用して変換が行われる場合がある。
残差映像の一部ブロックに対しては、二次元映像変換が行われない場合がある。二次元映像変換を行わないことを変換スキップ(Transform Skip)と称する場合がある。変換スキップは、現在ブロックに第1変換および第2変換が適用されないことを示す。変換スキップが適用された場合、変換が行われない残差値を対象に量子化が適用される場合がある。
現在ブロックに変換スキップを許容するか否かは、現在ブロックのサイズまたは形状の少なくとも一つに基づいて判定される場合がある。一例として、現在ブロックのサイズが閾値より小さい場合にだけ、変換スキップが適用される場合がある。閾値は、現在ブロックの幅、高さまたはサンプル個数の少なくとも一つに関するものであり、32×32などと定義される場合がある。または、正方形ブロックに対してのみ変換スキップを許容する場合がある。一例として、32×32、16×16、8×8または4×4サイズの正方形ブロックに対して変換スキップが許容される場合がある。または、サブパーティションイントラ符号化方法が使用されない場合にのみ、変換スキップを許容する場合がある。
または、現在ブロックにサブパーティションイントラ符号化方法が適用された場合、サブパーティション別に変換スキップが適用されるか否かを判定する場合がある。
図29は、サブブロック別に変換スキップ可否が判定される例を示す図である。
複数のサブブロックのうち一部に対してのみ変換スキップを適用する場合がある。一例として、図29に図示されている例のように、現在ブロックの上端に位置するサブブロックには変換スキップを適用し、下端に位置するサブブロックには変換スキップが許容されないように設定される場合がある。
変換スキップが許容されないサブブロックの変換タイプは、ビットストリームからシグナリングされる情報に基づいて判定される場合がある。一例として、後述するtu_mts_idxに基づいて、変換タイプが判定される場合がある。
または、サブブロックのサイズに基づいて、サブブロックの変換タイプを判定する場合がある。一例として、サブブロックの幅が閾値以上であるかおよび/または閾値以下であるかに基づいて、水平方向変換タイプを判定し、サブブロックの高さが閾値以上であるかおよび/または閾値以下であるかに基づいて、垂直方向変換タイプを判定する場合がある。
DCTまたはDSTを用いて現在ブロックを変換した後、変換された現在ブロックをまた変換する場合がある。この場合、DCTまたはDSTに基づく変換を第1変換と定義し、第1変換が適用されたブロックをまた変換することを第2変換と定義する場合がある。
第1変換は、複数個の変換コア候補のいずれか一つを用いて行われる場合がある。一例として、DCT2、DCT8またはDST7のいずれか一つを用いて第1変換が行われる場合がある。
水平方向および垂直方向に対して相違する変換コアが使用されることもできる。水平方向の変換コアおよび垂直方向の変換コアの組み合わせを示す情報がビットストリームを介してシグナリングされることもできる。
第1変換および第2変換の実行単位が相違する場合がある。一例として、8×8ブロックに対して第1変換を行い、変換された8×8ブロックのうち4×4サイズのサブブロックに対して第2変換を行う場合がある。または、4×4サイズのサブブロック3個に属する変換係数に対して第2変換を行う場合がある。3個のサブブロックは、現在ブロックの左上端に位置するサブブロックと、サブブロックの右側に隣り合うサブブロックと、サブブロックの下端に隣り合うサブブロックとを含む場合がある。または、8×8サイズのブロックに対して第2変換を行うこともできる。
第2変換が行われない残りの領域の変換係数は、0に設定されることもできる。
または、4×4ブロックに対して第1変換を行い、変換された4×4ブロックを含む8×8サイズの領域に対して第2変換を行うこともできる。
第2変換を行うか否かを示す情報がビットストリームを介してシグナリングされる場合がある。一例として、第2変換を行うか否かを示すフラグまたは第2変換を行うか否かおよび第2変換に用いられる変換カーネルを特定するインデックス情報がシグナリングされる場合がある。一例として、インデックス情報が0であることは、現在ブロックに第2変換が行われないことを示す。一方、インデックス情報が0より大きい場合、インデックス情報によって、第2変換を行うための変換カーネルが判定される場合がある。
または、水平方向変換コアと垂直方向変換コアが同一であるか否かに基づいて、第2変換を行うか否かが判定される場合がある。一例として、水平方向変換コアと垂直方向変換コアが同一である場合にのみ、第2変換が行われる場合がある。または、水平方向変換コアと垂直方向変換コアが相違する場合にのみ、第2変換が行われる場合がある。
または、水平方向の変換および垂直方向の変換が予め定義された変換コアを用いた場合にだけ、第2変換が許容される場合がある。一例として、水平方向の変換および垂直方向の変換にDCT2変換コアが使用された場合に、第2変換が許容される場合がある。または、現在ブロックにサブパーティションイントラ符号化方法が適用された場合には、水平方向の変換および垂直方向の変換にDCT2変換コアが使用された場合に限って第2変換が許容される場合がある。
または、現在ブロックのノンゼロ変換係数の個数に基づいて第2変換を行うか否かを判定する場合がある。一例として、現在ブロックのノンゼロ変換係数が閾値より小さいか同一である場合、第2変換を使用しないように設定し、現在ブロックのノンゼロ変換係数が閾値より大きい場合、第2変換を使用するように設定される場合がある。現在ブロックがイントラ予測で符号化された場合にだけ、第2変換を使用するように設定されることもできる。
または、現在ブロックの最後のノンゼロ変換係数の位置に基づいて第2変換を行うか否かを判定する場合がある。一例として、現在ブロックの最後のノンゼロ変換係数のx軸座標またはy軸座標の少なくとも一つが閾値より大きい場合、または現在ブロックの最後のノンゼロ変換係数が属するサブブロックのx軸座標またはy軸座標の少なくとも一つが閾値より大きい場合、第2変換を行わない場合がある。ここで、閾値は、符号化器および復号器で予め定義されている場合がある。または、現在ブロックのサイズまたは形状に基づいて閾値が判定される場合がある。
または、現在ブロックにDC成分の変換係数のみが存在する場合、第2変換を行わないように設定する場合がある。ここで、DC成分は、現在ブロック内の左上端位置の変換係数を示す。
または、現在ブロックにマトリックスベースのイントラ予測が適用された場合、第2変換が行われないように設定される場合がある。
現在ブロックの変換タイプを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、水平方向に対する変換タイプおよび垂直方向に対する変換タイプの組み合わせのうち一つを示すインデックス情報tu_mts_idxである場合がある。
インデックス情報tu_mts_idxによって特定される変換タイプ候補に基づいて、垂直方向に対する変換コアおよび水平方向に対する変換コアが判定される場合がある。表7は、tu_mts_idxによる変換タイプの組み合わせを示すものである。
変換タイプは、DCT2、DST7またはDCT8のいずれか一つとして判定される場合がある。または、変換スキップを変換タイプ候補に挿入することもできる。
表7が用いられる場合、tu_mts_idxが0であると、水平方向と垂直方向にDCT2が適用される場合がある。tu_mts_idxが2であると、水平方向にDCT8を適用し、垂直方向にDCT7を適用する場合がある。
サブパーティションイントラ符号化方法が適用された場合、サブブロックの変換コアが独立的に判定される場合がある。一例として、サブブロック毎に変換タイプ組み合わせ候補を特定するための情報が符号化されてシグナリングされる場合がある。これにより、サブブロック間の変換コアが相違する場合がある。
または、サブブロックが同一の変換タイプを使用することもできる。この場合、変換タイプ組み合わせ候補を特定するtu_mts_idxは、最初のサブブロックに対してのみシグナリングされる場合がある。または、コーディングブロックレベルでtu_mts_idxをシグナリングし、サブブロックの変換タイプは、コーディングブロックレベルでシグナリングされるtu_mts_idxを参照して判定される場合がある。または、サブブロックのうち一つのサイズ、形状またはイントラ予測モードの少なくとも一つに基づいて、変換タイプを判定し、判定された変換タイプがすべてのサブブロックのために使用されるように設定することもできる。
図30は、サブブロックが同一の変換タイプを使用する例を示す図である。
コーディングブロックが水平方向に分割された場合、コーディングブロックの上端に位置するサブブロック(Sub-CU0)および下端に位置するサブブロック(Sub-CU1)の変換タイプを同様に設定する場合がある。一例として、図30(a)に図示されている例のように、上端サブブロックに対してシグナリングされるtu_mts_idxに基づいて、水平方向タイプおよび垂直変換タイプが判定されると、判定された変換タイプを下端サブブロックにも適用する場合がある。
コーディングブロックが垂直方向に分割された場合、コーディングブロックの左側に位置するサブブロック(Sub-CU0)および右側に位置するサブブロック(Sub-CU1)の変換タイプを同様に設定する場合がある。一例として、図30(b)に図示されている例のように、左側サブブロックに対してシグナリングされるtu_mts_idxに基づいて、水平方向タイプおよび垂直変換タイプが判定されると、判定された変換タイプを右側サブブロックにも適用する場合がある。
現在ブロックのサイズ、形状、ノンゼロ係数の個数、二次変換を行うか否かまたはサブパーティションイントラ符号化方法を適用するか否かの少なくとも一つに基づいてインデックス情報の符号化可否を判定する場合がある。一例として、現在ブロックにサブパーティションイントラ符号化方法が適用された場合、またはノンゼロ係数の数が閾値と同一であるか小さい場合、インデックス情報のシグナリングが省略される場合がある。インデックス情報のシグナリングが省略された場合、現在ブロックには、デフォルト変換タイプが適用される場合がある。
デフォルト変換タイプは、DCT2またはDST7の少なくとも一つを含む場合がある。デフォルト変換タイプが複数である場合、現在ブロックのサイズ、形状、イントラ予測モード、二次変換を行うか否かまたはサブパーティションイントラ符号化方法を適用するか否かの少なくとも一つを考慮して、複数のデフォルト変換タイプのうち一つを選択する場合がある。一例として、現在ブロックの幅が予め設定された範囲に属するか否かに基づいて、複数の変換タイプのうち一つを水平方向変換タイプに判定し、現在ブロックの高さが予め設定された範囲に属するか否かに基づいて、複数の変換タイプのうち一つを垂直方向変換タイプに判定する場合がある。または、現在ブロックのサイズ、形状、イントラ予測モードまたは二次変換が行われたか否かに応じてデフォルトモードが相違するように判定される場合がある。
または、現在ブロックにDC成分の変換係数のみが存在する場合、水平方向変換タイプおよび垂直方向変換タイプをデフォルト変換タイプに設定する場合がある。一例として、現在ブロックにDC成分の変換係数のみが存在する場合、水平方向変換タイプおよび垂直方向変換タイプは、DCT2に設定される場合がある。
閾値は、現在ブロックのサイズまたは形状に基づいて判定される場合がある。一例として、現在ブロックのサイズが32×32より小さいか同一である場合には閾値を2に設定し、現在ブロックが32×32より大きい場合には(例えば、現在ブロックが、32×64または64×32サイズのコーディングブロックである場合)、閾値を4に設定する場合がある。
複数個のルックアップテーブルが符号化器/復号器に予め格納される場合がある。複数個のルックアップテーブルは、変換タイプ組み合わせ候補に割り当てられるインデックス値、変換タイプ組み合わせ候補の種類または変換タイプ組み合わせ候補の個数の少なくとも一つが相違する場合がある。
現在ブロックのサイズ、形状、予測符号化モード、イントラ予測モード、二次変換を適用するか否かまたは近隣ブロックに変換スキップが適用されたか否かの少なくとも一つに基づいて、現在ブロックに対するルックアップテーブルを選択する場合がある。
一例として、現在ブロックのサイズが4×4以下である場合または現在ブロックがインタ予測で符号化された場合には、第1ルックアップテーブルを用い、現在ブロックのサイズが4×4より大きい場合または現在ブロックがイントラ予測で符号化された場合には、第2ルックアップテーブルを用いる場合がある。
または、複数のルックアップテーブルのいずれか一つを示す情報がビットストリームを介してシグナリングされる場合がある。復号器は、情報に基づいて現在ブロックに対するルックアップテーブルを選択する場合がある。
他の例として、現在ブロックのサイズ、形状、予測符号化モード、イントラ予測モード、二次変換を適用するか否かまたは近隣ブロックに変換スキップが適用されたか否かの少なくとも一つに基づいて、変換タイプ組み合わせ候補に割り当てられるインデックスが適応的に判定される場合がある。一例として、現在ブロックのサイズが4×4である場合、変換スキップに割り当てられるインデックスが現在ブロックのサイズが4×4より大きい場合、変換スキップに割り当てられるインデックスよりもさらに小さい値を有する場合がある。具体的には、現在ブロックのサイズが4×4である場合、変換スキップにインデックス0を割り当て、現在ブロックが4×4より大きく、16×16以下である場合、変換スキップに0より大きいインデックス(例えば、インデックス1)を割り当てる場合がある。現在ブロックが16×16より大きい場合、変換スキップのインデックスに最大値(例えば、5)を割り当てる場合がある。
または、現在ブロックがインタ予測で符号化された場合、変換スキップにインデックス0を割り当てる場合がある。現在ブロックがイントラ予測で符号化された場合、変換スキップに0より大きいインデックス(例えば、インデックス1)を割り当てる場合がある。
または、現在ブロックがインタ予測で符号化された4×4サイズのブロックである場合、変換スキップにインデックス0を割り当てる場合がある。一方、現在ブロックがインタ予測で符号化されていないか、現在ブロックが4×4より大きい場合、変換スキップに0より大きい値のインデックス(例えば、インデックス1)を割り当てる場合がある。
表7に挙げられた変換タイプ組み合わせ候補と相違する変換タイプ組み合わせ候補が定義されて使用されることもできる。一例として、水平方向変換または垂直方向変換のいずれか一つに変換スキップを適用し、他の一つにはDCT2、DCT8またはDST7などの変換コアが適用される変換タイプ組み合わせ候補が用いられる場合がある。この場合、現在ブロックのサイズ(例えば、幅および/または高さ)、形状、予測符号化モードまたはイントラ予測モードの少なくとも一つに基づいて、水平方向または垂直方向に対する変換タイプ候補として変換スキップを使用するか否かが判定される場合がある。
現在ブロックの変換タイプを判定するためのインデックス情報が明示的にシグナリングされるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。一例として、シーケンスレベルで、イントラ予測で符号化されたブロックに対して明示的な変換タイプ判定が許容されるか否かを示す情報sps_explicit_intra_mts_flagおよび/またはインタ予測で符号化されたブロックに対して明示的な変換タイプ判定が許容されるか否かを示す情報sps_explicit_inter_mts_flagがシグナリングされる場合がある。
明示的な変換タイプ判定が許容される場合、ビットストリームからシグナリングされるインデックス情報tu_mts_idxに基づいて現在ブロックの変換タイプを判定する場合がある。一方、明示的な変換タイプ判定が許容されない場合、現在ブロックのサイズ、形状、サブブロック単位の変換が許容されるか否か、0ではない変換係数を含むサブブロックの位置、第2変換が行われるか否かまたはサブパーティションイントラ符号化方法を適用するか否かの少なくとも一つに基づいて変換タイプが判定される場合がある。一例として、現在ブロックの水平方向変換タイプは、現在ブロックの幅に基づいて判定され、現在ブロックの垂直方向変換タイプは、現在ブロックの高さに基づいて判定される場合がある。例えば、現在ブロックの幅が4より小さいか16より大きい場合、水平方向の変換タイプは、DCT2に判定される場合がある。そうではない場合、水平方向の変換タイプは、DST7に判定される場合がある。現在ブロックの高さが4より小さいか16より大きい場合、垂直方向の変換タイプは、DCT2に判定される場合がある。そうではない場合、垂直方向の変換タイプは、DST7に判定される場合がある。ここで、水平方向の変換タイプおよび垂直方向の変換タイプを判定するために、幅および高さと比較される閾値は、現在ブロックのサイズ、形状またはイントラ予測モードの少なくとも一つに基づいて判定される場合がある。
または、現在ブロックが高さと幅が同一である正方形である場合、水平方向変換タイプおよび垂直方向変換タイプを同様に設定する一方、現在ブロックが高さと幅が相違する非正方形の場合、水平方向変換タイプおよび垂直方向変換タイプを相違するように設定する場合がある。一例として、現在ブロックの幅が高さより大きい場合には、水平方向の変換タイプをDST7に判定し、垂直方向の変換タイプをDCT2に判定する場合がある。現在ブロックの高さが幅より大きい場合には、垂直方向の変換タイプをDST7に判定し、水平方向の変換タイプをDCT2に判定する場合がある。
変換タイプ候補の個数および/または種類または変換タイプ組み合わせ候補の個数および/または種類は、明示的な変換タイプ判定が許容されるか否かによって相違する場合がある。一例として、明示的な変換タイプ判定が許容される場合、DCT2、DST7およびDCT8が変換タイプ候補として用いられる場合がある。これにより、水平方向変換タイプおよび垂直方向変換タイプのそれぞれは、DCT2、DST8またはDCT8に設定される場合がある。明示的な変換タイプ判定が許容されない場合、DCT2およびDST7のみ変換タイプ候補として用いられる場合がある。これにより、水平方向変換タイプおよび垂直方向変換タイプのそれぞれは、DCT2またはDST7に判定される場合がある。
復号器では、第2変換の逆変換(第2逆変換)を行い、その実行結果に対して第1変換の逆変換(第1逆変換)を行う場合がある。第2逆変換および第1逆変換を行った結果、現在ブロックに対する残差信号が得られる場合がある。
符号化器で変換および量子化を行うと、復号器は、逆量子化および逆変換により残差ブロックを得る場合がある。復号器では、予測ブロックと残差ブロックを加算して、現在ブロックに対する復元ブロックを得る場合がある。
現在ブロックの復元ブロックが得られると、インループフィルタリング(In-loop filtering)により量子化および符号化過程で発生する情報の損失を減少させる場合がある。インループフィルタは、デブロッキングフィルタ(Deblocking filter)、サンプル適応的オフセットフィルタ(Sample Adaptive Offset filter、SAO)または適応的ループフィルタ(Adaptive Loop Filter、ALF)の少なくとも一つを含む場合がある。以下、インループフィルタが適用される前の復元ブロックを第1復元ブロックと称し、インループフィルタが適用された後の復元ブロックを第2復元ブロックと称する。
第1復元ブロックにデブロッキングフィルタ、SAOまたはALFの少なくとも一つを適用して、第2復元ブロックを得る場合がある。この場合、SAOまたはALFは、デブロッキングフィルタが適用された後に適用される場合がある。
デブロッキングフィルタは、ブロック単位で量子化を行うことによって発生するブロックの境界での画質劣化(Blocking Artifact)を緩和するためのものである。デブロッキングフィルタを適用するために、第1復元ブロックと近隣復元ブロックとの間のブロック強度(Blocking Strength、BS)を判定する場合がある。
図31は、ブロック強度を判定する過程を示すフローチャートである。
図31に図示されている例において、Pは、第1復元ブロックを示し、Qは、近隣復元ブロックを示す。ここで、近隣復元ブロックは、現在ブロックの左側または上端に隣り合うものである場合がある。
図31に図示されている例では、PおよびQの予測符号化モード、0ではない変換係数が含まれているか否か、同一の参照ピクチャを用いてインタ予測されたか否かまたは動きベクトルの差分値が閾値以上であるか否かを考慮してブロック強度が判定されるものと図示されている。
ブロック強度に基づいて、デブロッキングフィルタを適用するか否かが判定される場合がある。一例として、ブロック強度が0である場合には、フィルタリングが行われない場合がある。
SAOは、周波数領域で量子化を行うことによって発生するリンギング現象(Ringing Artifact)を緩和するためのものである。SAOは、第1復元映像のパターンを考慮して判定されるオフセットを加算または減算することで行われる場合がある。オフセットの判定方法は、エッジオフセット(Edge Offset、EO)またはバンドオフセット(Band Offset)を含む。EOは、周辺画素のパターンによって、現在サンプルのオフセットを判定する方法を示す。BOは、領域内の類似する明るさ値を有する画素の集合に対して共通のオフセットを適用する方法を示す。具体的には、画素の明るさを32個の均等な区間に分け、類似する明るさ値を有する画素を一つの集合に設定する場合がある。一例として、32個のバンドのうち隣接した4個のバンドを一つのグループに設定し、4個のバンドに属するサンプルには同一のオフセット値を適用する場合がある。
ALFは、第1復元映像またはデブロッキングフィルタが適用された復元映像に予め定義されたサイズ/形状のフィルタを適用して第2復元映像を生成する方法である。下記数式8は、ALFの適用例を示す。
ピクチャ、コーディングツリーユニット、コーディングブロック、予測ブロックまたは変換ブロック単位で、予め定義されたフィルタ候補のいずれか一つを選択する場合がある。それぞれのフィルタ候補は、サイズまたは形状のいずれか一つが相違する場合がある。
図32は、予め定義されたフィルタ候補を示す。
図32に図示されている例のように、5×5、7×7または9×9サイズのダイヤモンド形状の少なくとも一つを選択する場合がある。
クロマ成分に対しては、5×5サイズのダイヤモンド形状のみが使用される場合がある。
パノラミックビデオ、360度ビデオまたは4K/8K UHD(Ultra High Definition)映像などの高解像度映像のリアルタイムまたは低遅延符号化のために、一つのピクチャを複数個の領域に分け、複数個の領域を並列に符号化/復号する方案を考慮する場合がある。具体的には、処理目的に応じて、ピクチャをタイルまたはスライス(またはタイルグループ)に分割する場合がある。
タイルは、並列符号化/復号の基本単位を示す。各タイルは、並列処理される場合がある。タイルは、長方形の形状を有する場合がある。または、非長方形状のタイルを許容することもできる。
非長方形状のタイルを許容するか否かまたは非長方形状のタイルが存在するか否かを示す情報がビットストリームを介してシグナリングされる場合がある。
タイルの符号化/復号の時に、他のタイルのデータは用いないように設定される場合がある。タイル間の符号化/復号従属性を除去し、タイルの並列処理を支援する場合がある。具体的には、タイル単位で、CABAC(Context adaptive Binary Arithmetic Coding)コンテキストの確率テーブルを初期化する場合があり、タイルの境界では、インループフィルタが適用されないように設定する場合がある。また、他のタイルにあるデータを動きベクトル導出のための候補として使用しない場合がある。例えば、他のタイルにあるデータは、マージ候補、動きベクトル予測候補(AMVP候補)またはモーション情報候補として用いられないように設定される場合がある。また、他のタイルにあるデータをシンボルのコンテキスト計算に用いないように設定する場合がある。
スライスヘッダーを介して映像符号化/復号情報がシグナリングされる場合がある。スライスヘッダーを介してシグナリングされる情報は、スライスに含まれたコーディングツリーユニットまたはタイルに共通に適用される場合がある。スライスをタイルグループと称することもできる。
図33は、本開示の一実施形態によるピクチャ分割方法を示す図である。
先ず、現ピクチャを複数の処理単位に分割するか否かを判定する場合がある(S3310)。ここで、処理単位は、タイルまたはスライスの少なくとも一つを含む場合がある。一例として、現ピクチャが複数のタイルまたはスライスに分割されるか否かを示すシンタックスno_pic_partition_flagがビットストリームを介してシグナリングされる場合がある。シンタックスno_pic_partition_flagの値が0であることは、現ピクチャが少なくとも一つのタイルまたは少なくとも一つのスライスに分割されることを示す。一方、シンタックスno_pic_partition_flagの値が1であることは、現ピクチャが複数のタイルまたは複数のスライスに分割されないことを示す。
現ピクチャが複数の処理単位に分割されないものと判定される場合、現ピクチャの分割過程を終了する場合がある。この場合、現ピクチャは、一つのタイルおよび一つのスライス(またはタイルグループ)で構成されたものと理解し得る。
または、ピクチャに複数のタイルが存在するか否かを示す情報がビットストリームを介してシグナリングされる場合がある。情報は、ピクチャに複数のタイルが存在するか否かを示す1ビットのフラグまたはピクチャ内のタイルの個数を特定する情報の少なくとも一つを含む場合がある。
現ピクチャが複数の処理単位に分割されるものと判定される場合、ビットストリームを介してタイル分割情報をシグナリングする場合がある。シグナリングされたタイル分割情報に基づいて、ピクチャを少なくとも一つのタイルに分割する場合がある(S3320)。
現ピクチャが複数のタイルに分割された場合、複数のタイルを併合するか、一つのタイルを分割して、スライスを判定する場合がある(S3330)。
以下、本開示によるタイル分割方法およびスライス判定方法について詳細に説明する。
図34は、ピクチャが複数のタイルに分割された例を示す。
タイルは、少なくとも一つのコーディングツリーユニットを含む場合がある。タイルの境界は、コーディングツリーユニットの境界と一致するように設定される場合がある。すなわち、一つのコーディングツリーユニットが複数個に分割される分割形状は許容されない場合がある。
ピクチャを複数個のタイルに分割する時に、隣接するタイルの高さまたは隣接するタイルの幅が同一の値を有するように設定する場合がある。
一例として、図34に図示されている例のように、同一のタイル行に属するタイルの高さおよび/または同一のタイル列に属するタイルの幅は、同様に設定される場合がある。同一のタイル行に属するタイルを水平方向タイルセットと称し、同一のタイル列に属するタイルを垂直方向タイルセットと称することもできる。
または、符号化/復号しようとするタイルの幅および/または高さが、前のタイルの幅および/または高さと同様に設定されるか否かを示す情報がシグナリングされる場合がある。
ピクチャの分割形状を示す情報がビットストリームを介してシグナリングされる場合がある。情報は、ピクチャパラメータセット、シーケンスパラメータセットまたはスライスヘッダーを介して符号化されてシグナリングされる場合がある。
ピクチャの分割形状を示す情報は、タイルが均等なサイズに分割されるか否かを示す情報、タイル列の個数を示す情報またはタイル行の個数を示す情報の少なくとも一つを含む場合がある。ここで、タイル列の個数は、垂直方向タイルセットの個数を示し、タイル行の個数は、水平方向タイルセットの個数を示す。
タイルが均等なサイズに分割されるか否かを示す情報は、1ビットのフラグuniform_tile_spacing_flagである場合がある。ピクチャが均等なサイズのタイルに分割されるものと判定された場合、ピクチャの右側および/または下端境界に隣接するタイル以外の残りのタイルは、同等なサイズを有する場合がある。
タイルが均等なサイズに分割されるものと判定される場合、タイルの幅を示すシンタックスtile_cols_width_minus1およびタイルの高さを示すシンタックスtile_rows_height_minus1がシグナルリングされる場合がある。
シンタックスtile_cols_width_minus1は、均等なサイズのタイルが含むコーディングツリーユニット列の個数から1を差分した値を示す。シンタックスtile_rows_height_minus1は、均等なサイズのタイルが含むコーディングツリーユニット行の個数から1を差分した値を示す。
最後のタイル列は、シンタックスtile_cols_width_minus1によって特定される幅の値またはこれより小さい値を有する場合がある。また、最後のタイル行は、シンタックスtile_rows_height_minus1によって特定される高さの値またはこれより小さい値を有する場合がある。一例として、最後のタイル列のインデックスがmである時に、現ピクチャの幅から0~m-1番目のタイル列の幅の和を差分した値が、最後のタイル列の幅に設定される場合がある。一例として、最後のタイル行のインデックスがnである時に、現ピクチャの高さから0~n-1番目のタイル行の高さの和を差分した値が、最後のタイル行の高さに設定される場合がある。すなわち、現ピクチャの右側境界に位置するタイルの幅および/または現ピクチャの下端境界に位置するタイルの高さは、それぞれ他のタイルの幅および/または高さより小さいか同一である場合がある。
ピクチャを横切る垂直線または水平線の少なくとも一つを用いてピクチャを分割することにより、タイルのそれぞれは、相違する列(Column)および/または行(Row)に属する。ピクチャの分割形状を判定するために、タイル列の個数および/またはタイル行の個数を示す情報がシグナリングされる場合がある。一例として、ピクチャを分割することによって生成されるタイル行の個数を示す情報num_tile_row_minus1およびタイル列の個数を示す情報num_tile_column_minus1がビットストリームを介してシグナリングされる場合がある。シンタックスnum_tile_row_minus1は、タイル行の個数から1を差分した値を示し、シンタックスnum_tile_column_minus1は、タイル列の個数から1を差分した値を示す。
図34に図示されている例において、タイル列の個数は4個であり、タイル行の個数は3個である。これにより、num_tile_columns_minus1は3を示し、num_tile_rows_minus1は2を示す場合がある。
タイル列の個数を示すシンタックスnum_tile_column_minus1および/またはタイル行の個数を示すシンタックスnum_tile_rows_minus1は、シンタックスuniform_tile_spacing_flagの値が0である場合、シグナルリングされる場合がある。すなわち、現ピクチャが、高さおよび幅が均等なタイルに分割されないものと判定された場合に、タイル列の個数を示すシンタックスnum_tile_column_minus1および/またはタイル行の個数を示すシンタックスnum_tile_rows_minus1がシグナルリングされる場合がある。
各タイル列の幅を示すシンタックスおよび各タイル行の高さを示すシンタックスがビットストリームを介してシグナリングされる場合がある。一例として、tile_cols_width_minus1[i]は、i番目のタイル列の幅を示し、tile_rows_height_minus[j]は、j番目のタイル行の高さを示す場合がある。
シンタックスtile_cols_width_minus1[i]は、i番目のタイル列を構成するコーディングツリーユニット列の個数から1を差分した値を示す。最後のタイル列に対しては、シンタックスtile_cols_width_minus1[i]のシグナリングが省略される場合がある。最後のタイル列の幅は、現ピクチャの幅から前のタイル列の幅を差分して導出される場合がある。
シンタックスtile_rows_height_minus1[j]は、j番目のタイル行を構成するコーディングツリーユニット行の個数から1を差分した値を示す。最後のタイル行に対しては、シンタックスtile_rows_height_minus1[j]のシグナリングが省略される場合がある。最後のタイル行の高さは、現ピクチャの高さから前のタイル行の高さを差分して導出される場合がある。
一方、コーディングツリーユニットのサイズを示す情報は、シーケンスパラメータセットまたはピクチャパラメータセットを介してシグナリングされる場合がある。
一つのタイルは、少なくとも一つのコーディングツリーユニットで構成される場合がある。ピクチャの右側または下端境界に隣接するタイル以外の残りのタイルは、コーディングツリーユニットより小さい領域を含んで構成されないように設定する場合がある。すなわち、タイルの境界は、コーディングツリーユニットの境界と一致する。
ピクチャの分割形状によって、ピクチャバウンダリ以外のすべての領域において、タイルが同一のサイズを有する場合がある。または、水平方向に隣接するタイルの高さが同様に設定されるか、垂直方向に隣接するタイルの幅が同様に設定される場合がある。
現ピクチャが複数のタイルに分割されるか否かを示す情報がビットストリームを介してシグナリングされる場合がある。一例として、ビットストリームを介してシンタックスsingle_tile_in_pic_flagがシグナリングされる場合がある。シンタックスsingle_tile_in_pic_flagが1であることは、現ピクチャが複数のタイルに分割されないことを示す。一方、single_tile_in_pic_flagが0であることは、現ピクチャが複数のタイルに分割されることを示す。
現ピクチャが、複数のタイルに分割される場合があるものと判定される場合、タイル列およびタイル行の個数を判定するための情報、タイルの均等分割可否を示す情報およびタイル列およびタイル行のサイズを判定するための情報の少なくとも一つが符号化される場合がある。
または、ピクチャが、複数個のタイルまたはスライスに分割可能であるか否かを示すフラグが符号化されシグナリングされる場合がある。一例として、シンタックスno_pic_partition_flagが符号化されシグナリングされる場合がある。シンタックスno_pic_partition_flagの値が1であることは、ピクチャが複数個のタイルまたはスライスに分割されないことを示す。一方、no_pic_partition_flagの値が0であることは、ピクチャが複数個のタイルまたはスライスに分割される場合もあることを示す。シンタックスno_pic_partition_flagの値が0である場合、タイル分割情報またはスライス分割情報の少なくとも一つがシグナリングされる場合がある。
タイルのサイズを判定するための情報が符号化されシグナリングされる場合がある。一例として、i番目のタイル列の幅を示すシンタックス要素tile_width_minus1[i]およびi番目のタイル行の高さを示すシンタックス要素tile_height_minus1[i]がビットストリームに符号化される場合がある。
各タイル列または各タイル行のサイズの情報をシグナリングする代わりに、前のタイル列または前のタイル行のサイズの情報に基づいて、現在タイル列または現在タイル行のサイズを導出することもできる。
このために、現ピクチャ内のタイル列の幅が明示的にシグナリングされるタイル列の個数を特定するための情報が、ビットストリームを介してシグナリングされる場合がある。一例として、タイル列の幅がシグナリングされるタイル列の個数を判定するためのシンタックスnum_exp_tile_columns_minus1が、ビットストリームを介してシグナリングされる場合がある。シンタックスnum_exp_tile_columns_minus1は、タイル列の幅がシグナリングされるタイル列の個数から1を差分した値である場合がある。
シンタックスnum_exp_tile_columns_minus1に基づいて判定された個数だけ、タイル列の幅を特定するためのシンタックスが符号化されてシグナリングされる場合がある。一例として、i番目のタイル列の幅を示すシンタックスtile_width_minus1[i]がビットストリームを介してシグナリングされる場合がある。シンタックスtile_width_minus1[i]は、タイル列が含むコーディングツリーユニット列の個数から1を差分したものである場合がある。
タイル列のインデックスiが幅が明示的にシグナリングされるタイル列の個数より小さい場合、当該タイル列の幅は、ビットストリームを介してシグナリングされるシンタックスtile_width_minus1[i]に基づいて判定される場合がある。
一方、タイル列のインデックスjが幅が明示的にシグナリングされるタイル列の個数以上である場合、当該タイル列の幅は、最後にシグナリングされたシンタックスtile_width_minus1[l]に基づいて判定される場合がある。ここで、lは、最後に幅がシグナリングされたタイル列のインデックスを示し、jより小さい整数である場合がある。一例として、現ピクチャの幅から前のタイル列の幅を差分した値が、シンタックスtile_width_minus1[l]に1を加算した値以上である場合、タイル列jの幅は、シンタックスtile_width_minus1[l]に1を加算した値に設定される場合がある。一方、現ピクチャの幅から前のタイル列の幅を差分した値が、シンタックスtile_width_minus1[l]に1を加算した値より小さい場合、現ピクチャの幅から前のタイル列の幅を差分した差分値をタイル列jの幅に設定する場合がある。
表9は、タイル列の幅を判定する過程を示すものである。
表9において、変数PicWidthInCtbsYは、現ピクチャが含むコーディングツリーユニット列の個数を示す。一例として、変数PicWidthInCtbsYは、以下の数式9のように導出される場合がある。
変数reminingWidthInCtbsYは、変数PicWidthInCtbsYから累積したタイル列の幅を差分した値を示す。一例として、インデックスがiであるタイル列に対して、remainingWidthInCtbsYは、PicWidthInCtbsYから、0番からi-1番までタイル列の幅を合算した値を差分して導出される場合がある。
表9に示れている例のように、変数uniformTileColWidthは、最後に明示的にシグナリングされたタイル列の幅tile_column_width_minus1[num_exp_tile_columns_minus1]に1を加算して導出される場合がある。この場合、現ピクチャ内の残りのコーディングツリーユニット列の個数を示す変数remainingWidthInCtbYが変数uniformTileColWidth以上であると、残りの領域は、変数uniformTileColWidthのサイズに分割される場合がある。
一方、現ピクチャ内の残りのコーディングツリーユニット列の個数を示す変数remainingWidthInCtbYが変数uniformTileColWidthより小さいと、残りの領域がそのまま最後のタイル列に設定される場合がある。
一方、タイル列のインデックスjが幅が明示的にシグナリングされるタイル列の個数以上である場合、当該タイル列の幅は、変数uniformTileColWidthおよびremainingWidthInCtbYのうち小さい値に設定される場合がある。
すなわち、幅が明示的にシグナリングされるタイル列以外の残りのタイル列の幅は、幅が明示的にシグナリングされるタイル列のうち最後のタイル列の幅より小さいか同一の値を有する場合がある。
または、現ピクチャ内のタイル行の高さがシグナリングされるタイル行の個数を特定するための情報がビットストリームを介してシグナリングされる場合がある。一例として、タイル行の高さがシグナリングされるタイル行の個数を判定するためのシンタックスnum_exp_tile_rows_minus1がビットストリームを介してシグナリングされる場合がある。シンタックスnum_exp_tile_rows_minus1は、タイル行の高さがシグナリングされるタイル行の個数から1を差分した値である場合がある。
シンタックスnum_exp_tile_rows_minus1に基づいて判定された個数だけ、タイル行の高さを特定するためのシンタックスが符号化されてシグナリングされる場合がある。一例として、i番目のタイル行の高さを示すシンタックスtile_height_minus1[i]がビットストリームを介してシグナリングされる場合がある。シンタックスtile_height_minus1[i]は、タイル行が含むコーディングツリーユニット行の個数から1を差分したものである場合がある。
タイル行のインデックスiが高さが明示的にシグナリングされるタイル行の個数より小さい場合、当該タイル行の高さは、ビットストリームを介してシグナリングされるシンタックスtile_height_minus1[i]に基づいて判定される場合がある。
一方、タイル行のインデックスjが高さが明示的にシグナリングされるタイル行の個数以上である場合、当該タイル行の高さは、最後にシグナリングされたシンタックスtile_height_minus1[l]に基づいて判定される場合がある。ここで、lは、最後に高さがシグナリングされたタイル行のインデックスを示し、jより小さい整数である場合がある。
一例として、現ピクチャの高さから前のタイル行の高さを差分した値がシンタックスtile_height_minus1[l]に1を加算した値以上である場合、タイル行jの高さは、シンタックスtile_height_minus1[l]に1を加算した値に設定される場合がある。一方、現ピクチャの高さから前のタイル行の高さを差分した値がシンタックスtile_height_minus1[l]に1を加算した値より小さい場合、現ピクチャの高さから前のタイル行の高さを差分した差分値をタイル行jの高さに設定する場合がある。
表10は、タイル行の高さを判定する過程を示すものである。
表10において、変数PicHeightInCtbsYは、現ピクチャが含むコーディングツリーユニット行の個数を示す。一例として、変数PicWidthInCtbsYは、以下の数式10のように導出される場合がある。
変数reminingHeightInCtbsYは、変数PicHeightInCtbsYから累積したタイル行の高さを差分した値を示す。一例として、インデックスがiであるタイル行に対して、remainingHeightInCtbsYは、PicHeightInCtbsYから、0番からi-1番までタイル行の高さを合算した値を差分して導出される場合がある。
表10に示れている例のように、変数uniformTileRowHeightは、最後に明示的にシグナリングされたタイル行の高さtile_rows_height_minus1[num_exp_tile_rows_minus1]に1を加算して導出される場合がある。この場合、現ピクチャ内の残りのコーディングツリーユニット行の個数を示す変数remainingHeightInCtbYが変数uniformTileRowHeight以上であると、残りの領域は、変数uniformTileRowHeightのサイズに分割される場合がある。
一方、現ピクチャ内の残りのコーディングツリーユニット行の個数を示す変数remainingHeightInCtbYが変数uniformTileRowHeightより小さいと、残りの領域がそのまま最後のタイル行に設定される場合がある。
一方、タイル行のインデックスjが高さが明示的にシグナリングされるタイル行の個数以上である場合、当該タイル行の高さは、変数uniformTileRowHeightおよびremainingHeightInCtbYのうち小さい値に設定される場合がある。
すなわち、高さが明示的にシグナリングされるタイル行以外の残りのタイル行の高さは、高さが明示的にシグナリングされるタイル行のうち最後のタイル行の幅より小さいか同一の値を有する場合がある。
表11は、幅が明示的にシグナリングされるタイル列の個数を示すシンタックスおよび高さが明示的にシグナリングされるタイル行の個数を示すシンタックスを含むシンタックステーブルを例示するものである。
シンタックスnum_exp_tile_columns_minus1およびシンタックスnum_exp_tile_row_minus1の値がいずれも0である場合、シンタックスtile_column_width_minus1およびシンタックスtile_row_height_minus1がそれぞれ1個ずつシグナリングされる。この場合、シンタックスtile_column_width_minus1[0]が示す幅が現ピクチャの幅と同一である場合(例えば、tile_column_width_minus1[0]の値が(PicWidthInCtbsY-1)である場合)、シンタックスtile_row_height_minus1[0]が示す高さは、現ピクチャの高さと相違する値を有するように設定する場合がある。すなわち、シンタックスtile_row_height_minus1[0]の値は、(PicHeightInCtbsY-1)より小さい値に設定される場合がある。シンタックスtile_row_height_minus1[0]の値を(PicHeightInCtbsY-1)より小さい値に設定することにより、ピクチャは、少なくとも二つ以上のタイルに分割される。
一方、シンタックスloop_filter_across_tiles_enabled_flagは、ピクチャパラメータセットを参照するピクチャ内のタイルの境界でインループフィルタを適用することが許容されるか否かを示す。ここで、インループフィルタは、デブロッキングフィルタ、ALFまたはSAOの少なくとも一つを含む場合がある。フラグloop_filter_across_tiles_enabled_flagの値が1であることは、ピクチャパラメータセットを参照するピクチャ内のタイルの境界を横切るインループフィルタが適用可能であることを示す。一方、フラグloop_filter_across_tiles_enabled_flagの値が0であることは、ピクチャパラメータセットを参照するピクチャ内のタイルの境界でインループフィルタを適用することが許容されないことを示す。
シンタックスloop_filter_across_slices_enabled_flagは、ピクチャパラメータセットを参照するピクチャ内のスライスの境界でインループフィルタを適用することが許容されるか否かを示す。ここで、インループフィルタは、デブロッキングフィルタ、ALFまたはSAOの少なくとも一つを含む場合がある。フラグloop_filter_across_slices_enabled_flagの値が1であることは、ピクチャパラメータセットを参照するピクチャ内のスライスの境界を横切るインループフィルタが適用可能であることを示す。一方、フラグloop_filter_across_slices_enabled_flagの値が0であることは、ピクチャパラメータセットを参照するピクチャ内のスライスの境界でインループフィルタを適用することが許容されないことを示す。
少なくとも一つ以上のタイルまたはタイルの一部を一つの処理単位と画定する場合がある。一例として、複数個のタイルを一つのスライスと画定する場合がある。
または、一つのタイルを複数個のスライスに分割する場合もある。
一つのスライスは、少なくとも一つのコーディングツリーユニット列を含む場合がある。一つのタイルが複数のスライスに分割される場合、各スライスの高さを示す情報がビットストリームを介してシグナリングされる場合がある。
スライスヘッダーを介して映像符号化/復号情報がシグナリングされる場合がある。スライスヘッダーを介してシグナリングされる情報は、スライスに属するタイルおよび/またはブロックに共通して適用される場合がある。
スライスタイプを示す情報を、ビットストリームを介してシグナリングする場合がある。情報は、現ピクチャ内のスライスの画定方法を示す。一例として、ビットストリームを介してスライスタイプを示すシンタックスrect_slice_flagがシグナリングされる場合がある。
シンタックスrect_slice_flagは、タイルのラスタースキャン順序に基づいてスライスが画定されるか否かまたは四角形状にスライスが画定されるか否かを示す。一例として、rect_slice_flagが0であることは、タイルのラスタースキャン順序に基づいてスライスが画定されることを示す。一方、rect_slice_flagが1であることは、四角形状にスライスが画定されることを示す。
以下、スライスを判定するための上記の二つの方法について詳細に説明する。
ラスタースキャンに基づく画定方法は、ラスタースキャン順序にしたがって、少なくとも一つ以上のタイルを特定した後、特定された少なくとも一つ以上のタイルをスライスと画定するためのものである。ラスタースキャンに基づく画定方法による場合、一つ以上の連続したタイルがスライスと画定される場合がある。この場合、連続したタイルは、ラスタースキャン順序にしたがって判定される場合がある。ラスタースキャンスライスが適用される場合、非四角形状のスライスが生成されることもできる。
図35および図36は、ラスター順序に基づいてスライスを画定した例を示す図である。
一例として、図35に図示されている例において、最初のスライスslice0が3個のタイルを含むと仮定した時に、最初のスライスslice0は、ラスタースキャン順序にしたがって、Tile0~Tile2を含むものと画定される場合がある。二番目のスライスslice1が6個のタイルを含むと仮定した時に、二番目のスライスslice1は、ラスタースキャン順序にしたがって、Tile3~Tile8を含むものと画定される場合がある。最後のスライスslice2は、ラスタースキャン順序にしたがって、残りのタイルTile9~Tile11を含む場合がある。
ラスタースキャン順序に基づいて、スライスを画定する場合、各スライスが含むタイルの個数を示す情報がシグナリングされる場合がある。最後のスライスに対しては、スライスが含むタイルの個数を示す情報のシグナリングが省略される場合がある。
スライスが複数のタイルを含む場合、スライスに含まれたタイルの幅または高さは相違する場合がある。一例として、二番目のスライスslice1が含むタイルのうち、Tile3の高さは、残りのタイルと相違するものと図示されている。
四角形状のスライスの画定方法は、長方形状のスライスのみを許容する分割方法である。四角形状のスライスの画定方法が適用される場合、スライスの4つの角に位置するタイルが同じ行または同じ列に属する。
図37は、四角形状のスライスのみが許容される例を示す図である。
図37に図示されている例のように、四番目のスライスslice3は、Tile5、Tile6、Tile9およびTile10を含む。図示されている例のように、スライスが複数のタイルを含む場合、スライスを構成する左上端タイルおよび右下端タイルを二つの頂点とする長方形を一つのスライスと画定する場合がある。
スライスの境界は、ピクチャの境界および/またはタイルの境界と一致する場合がある。一例として、スライスの左側境界または上端境界がピクチャの境界に設定されるか、スライスの左側境界または上端境界がタイルの境界に設定される場合がある。
または、四角形状のスライスの画定方法が適用される場合、一つのタイルを複数個の四角形状のスライスに分割することもできる。
四角形状のスライスの画定方法が適用される場合、ピクチャ内のスライスの個数を示すシンタックスが符号化されシグナリングされる場合がある。一例として、ビットストリームを介して、ピクチャ内のスライスの個数を示すシンタックスnum_slices_in_pic_minus1がシグナリングされる場合がある。シンタックスnum_slices_in_pic_minus1は、ピクチャ内のスライスの個数から1を差分した値を示す場合がある。これにより、復号器は、シンタックスnum_slices_in_pic_minus1が示す値に1を加算して、スライスの総個数を判定する場合がある。
シンタックスnum_slices_in_pic_minus1の代わりに、ピクチャ内のスライスの個数から2を差分した値を示すシンタックスnum_slices_in_pic_minus2を符号化する場合もある。
四角形状のスライスの画定方法が適用される場合、各スライスが含むタイルを判定するために、各スライスが含むタイルを識別するための情報がシグナリングされる場合がある。情報は、スライスの最初のタイルまたは最後のタイルの少なくとも一つを特定することに用いられる場合がある。タイル間の順番は、所定のスキャン順序にしたがって判定される場合がある。一例として、ラスタースキャン順序にしたがう場合、最初のタイルは、スライスの左上端に位置するタイルを示し、最後のタイルは、スライスの右下端に位置するタイルを示す。
スライス内の左上端に位置するタイルのインデックスまたはスライスの右下端に位置するタイルのインデックスの少なくとも一つを識別するための情報が、ビットストリームを介してシグナリングされる場合がある。
第1スライスが含むタイルのインデックスと第2スライスが含むタイルのインデックスとの差分情報を符号化し、シグナリングする場合もある。ここで、第1スライスおよび第2スライスは、スキャン順序に基づいて判定され、各スライスが占めるタイルは相違する場合がある。
一例として、第1スライスを構成するタイルと第2スライスを構成するタイルが相違する場合、第2スライスのインデックスは、第1スライスのインデックスiに1を加算したものである場合がある。
または、第1タイルが複数のスライスを含むように分割された場合、第1タイルに含まれた第1スライスと、スキャン順序上、第1タイルの次のタイルである第2タイルを含む第2スライスまたは第2タイルに含まれた第2スライスとの差分情報が符号化される場合がある。この場合、第1タイルに含まれた複数のスライスのうち最初のスライスまたは最後のスライスに対してのみ差分情報が符号化される場合がある。
第1スライスと第2スライスとの差分情報を導出するために用いられるタイルは、スライスの左上端、右上端、右下端、左下端または中央に位置するものである場合がある。
一例として、i番目のスライスの左上端タイルと、次のスライス(すなわち、i+1番目のスライス)の左上端タイルとのインデックス差分を示すシンタックスtile_idx_delta[i]が、ビットストリームを介してシグナリングされる場合がある。シンタックスtile_idx_delta[i]は、i番目のスライスの左上端タイルのインデックスと、i+1番目のスライスの左上端タイルのインデックスとの差分の絶対値を示す場合がある。
または、i番目のスライスの左上端タイルと、次のスライスの左上端タイルとのインデックス差分の絶対値から1を差分して導出されるシンタックスtile_idx_delta_minus1[i]を符号化/復号する場合もある。表12は、上記のシンタックスを含むシンタックス構造を示すものである。
スライスの間のタイルインデックス差分値の符号を示すシンタックスもtile_idx_delta_sign[i]も符号化/復号される場合がある。一例として、シンタックスtile_idx_delta_sign[i]の値が1であることは、tile_idx_delta[i]が示す差分値の符号が正の数であることを示し、シンタックスtile_idx_delta_sign[i]の値が0であることは、tile_idx_delta[i]が示す差分値の符号が負の数であることを示す。
iが0であるスライスに対しては、シンタックスtile_idx_delta_signの符号化/復号が省略される場合がある。
差分情報に基づいて、i+1番目のスライス内の左上端タイルの位置が判定される場合がある。具体的には、i+1番目のスライスの左上端タイルのインデックスは、i番目のスライスの左上端タイルインデックスとシンタックスtile_idx_delta[i]を加算して導出する場合がある。
ピクチャ内の最初のスライス(すなわち、iが0であるスライス)と二番目のスライス(すなわち、iが1であるスライス)とのタイルインデックス差分値は、常に正の数に設定される。これにより、ピクチャ内の最初のスライスに対しては、tile_idx_delta_sign[i]の符号化/復号を省略し、その値を1に推定する場合がある。
また、ピクチャ内の最後のスライスの前のスライス(例えば、iがnum_slices_in_pic_minus1から1を差分した値を有するスライス)とピクチャ内の最後のスライス(例えば、iが、num_slices_in_pic_minus1が指示する値を有するスライス)とのタイルインデックス差分値も常に正の数に設定される。これにより、最後のスライスの前のスライスに対しても、tile_idx_delta_sign[i]の符号化/復号を省略し、その値を1に推定する場合がある。
最後のスライスに対しては、次のスライスとの差分を示すシンタックスtile_idx_delta[i]の符号化/復号を省略する場合がある。
スライスの幅または高さの少なくとも一つを特定する情報を符号化/復号する場合がある。一例として、i番目のスライスの幅を示すシンタックスslice_width_in_tiles_minus1[i]またはi番目のスライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]の少なくとも一つが、ビットストリームを介してシグナリングされる場合がある。
シンタックスslice_width_in_tiles_minus1[i]は、i番目のスライスに含まれたタイル列の個数から1を差分した値を示す。シンタックスslice_height_in_tiles_minus[i]は、i番目のスライスに含まれたタイル行の個数から1を差分した値を示す。
i番目のスライスは、シンタックスslice_width_in_tiles_minus1[i]に基づいて判定される個数だけのタイル列およびシンタックスslice_height_in_tiles_minus1[i]に基づいて判定される個数だけのタイル行で構成される場合がある。この場合、i番目のタイル列の左上端タイルは、tile_idx_delta[i]またはtile_idx_delta_minus1[i]に基づいて判定されるインデックス値を有する場合がある。
または、ピクチャの左側境界に隣接するスライスに対してのみ、スライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]をシグナリングし、それ以外のスライスに対しては、シンタックスslice_height_in_tiles_minus1[i]の符号化を省略する場合がある。シンタックスslice_height_in_tiles_minus[i]の符号化が省略されるスライスの高さは、同一の行に含まれたスライスのうち現ピクチャの左側境界に接するスライスの高さと同様に設定される場合がある。
スライスタイプを示すフラグrect_slice_flagを符号化し、フラグrect_slice_flagが1である場合、ピクチャ内のスライスの個数を示すシンタックスnum_slices_in_pic_minus1を符号化する場合がある。
ピクチャが複数個のスライスを含むものと判定された場合、各スライスの幅を示すシンタックスslice_width_in_tiles_minus1[i]および各スライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]を符号化してシグナリングする場合がある。
また、i番目のスライスに含まれたタイルのインデックスとi+1番目のスライスに含まれたタイルのインデックスとの差分を示すシンタックスtile_idx_delta[i]をシグナリングする場合もある。最後のタイルに対しては、シンタックスtile_idx_delta[i]の符号化が省略される場合がある。
符号化器は、タイルインデックスの差分を示すシンタックスtile_idx_delta[i]の符号化可否を判定し、判定にしたがって、シンタックスtile_idx_delta[i]が符号化されているか否かを示すフラグtile_idx_delta_present_flagを符号化する場合がある。シンタックスtile_idx_delta[i]は、フラグtile_idx_delta_present_flagの値が1である場合に限って符号化される場合がある。
一つのタイルを複数個のスライスに分割する場合もある。一例として、タイルを水平方向に分割し、複数個のスライスを生成する場合がある。
スライスが複数個のタイルを含まないものと判定された場合、タイルを複数個のスライスに分割するか否かが判定される場合がある。一例として、シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]がいずれも0であることは、スライスが一つのタイルのみで構成されるか、一つのタイルが複数のスライスに分割されることを示す。
シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]がいずれも0である場合、タイルが複数のスライスに分割されるか否かを示す情報がシグナリングされる場合がある。
一例として、タイルが含むスライスの個数を示すシンタックスnum_slices_in_tile_minus1[i]がシグナリングされる場合がある。シンタックスnum_slices_in_tile_minus1[i]は、i番目のタイルが含むスライスの個数から1を差分した値を示す。
または、明示的にシグナリングされる必要があるスライスの高さの個数を示す情報を示すシンタックスnum_exp_slices_in_tile[i]が、ビットストリームを介してシグナリングされる場合がある。シンタックスnum_exp_slices_in_tile[i]は、タイルが含むスライスの個数と同一または小さな値を有する場合がある。
シンタックスnum_exp_slices_in_tile[i]が0であることは、タイルが複数個のスライスに分割されないことを示す。シンタックスnum_exp_slices_in_tile[i]が0より大きいことは、タイルが複数個のスライスに分割される場合があることを示す。
シンタックスnum_exp_slices_in_tile[i]の個数だけスライスの高さを示す情報がシグナリングされる場合がある。一例として、シンタックスnum_exp_slices_in_tileが1より大きい場合、タイル内のj番目のスライスの高さを示すシンタックスexp_slice_height_in_ctu_minus1[j]がシグナリングする場合がある。
スライスのインデックスjが、高さが明示的にシグナリングされるスライスの個数より小さい場合、スライスjの幅は、ビットストリームを介してシグナリングされるシンタックスexp_slice_height_in_ctu_minus1[j]に基づいて判定される場合がある。一方、スライスのインデックスkが、高さが明示的にシグナリングされるスライスの個数以上である場合、スライスkの高さは、最後にシグナリングされたシンタックスexp_slice_height_in_ctu_minus1[l]に基づいて判定される場合がある。ここで、lは、最後に高さがシグナリングされたスライスのインデックスを示し、kより小さな整数である場合がある。
一例として、タイルの高さから前のスライスの高さを差分した値が、シンタックスexp_slice_height_in_ctu_minus1[l]に1を加算した値以上である場合、スライスkの高さは、シンタックスexp_slice_height_in_ctu_minus1[l]に1を加算した値に設定される場合がある。一方、タイルの高さから前のスライスの高さを差分した値が、シンタックスexp_slice_height_in_ctu_minus1[l]に1を加算した値より小さい場合、タイルの高さから前のスライスの高さを差分した差分値をスライスkの高さに設定する場合がある。
すなわち、高さが明示的にシグナリングされるスライス以外の残りのスライスの高さは、高さが明示的にシグナリングされるスライスのうち最後のスライスの高さより小さいか同一の値を有する場合がある。
現ピクチャ内のタイル列の個数が1個である場合、シンタックスslice_width_in_tiles_minus1の符号化が省略される場合がある。また、現ピクチャ内のタイル行の個数が1個である場合、シンタックスslice_height_in_tiles_minus1の符号化が省略される場合がある。
または、スライスの幅を示す情報またはスライスの高さを示す情報の少なくとも一つの符号化を省略する場合がある。
一例として、スライスの幅を示すシンタックスslice_width_in_tiles_minus1の符号化を省略し、近隣スライス内の所定の位置のタイルとの距離をスライスの幅に設定する場合がある。具体的には、シンタックスtop_left_brick_idx_delta[i]によって、i番目のスライスの右側に隣接するi+1番目のスライスの左上端タイルが特定される場合がある。i番目のスライスの幅は、i番目のスライス内の左上端タイルのx座標(例えば、左上端サンプルのx座標)と、i+1番目のスライス内の左上端タイルのx座標(例えば、左上端サンプルのx座標)との差分から導出される場合がある。
または、スライスの高さを示すシンタックスslice_height_in_tiles_minus1の符号化を省略し、近隣スライス内の所定の位置のタイルとの距離をスライスの幅に設定する場合がある。具体的には、シンタックスtop_left_brick_idx_delta[j-1]によって、i番目のスライスの下端に位置するj番目のスライスの左上端タイルが特定される場合がある。i番目のスライスの高さは、i番目のスライス内の左上端タイルのy座標(例えば、左上端サンプルのy座標)と、j番目のスライス内の左上端タイルのy座標(例えば、左上端サンプルのy座標)との差分から導出される場合がある。
または、四角形状のスライスを画定するのに際し、差分値の情報が用いられるか否かを示す情報が、ビットストリームを介してシグナリングされる場合がある。一例として、差分値の情報の利用可否を示すtile_idx_delta_present_flagが、ビットストリームを介してシグナリングされる場合がある。シンタックスtile_idx_delta_present_flagの値が1であることは、タイルインデックスの差分値を示すシンタックスが符号化されシグナリングされることを示す。一例として、シンタックスtile_idx_delta_present_flagの値が1である場合、i番目のスライスは、スライスのサイズを示すシンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]とスライス内の左上端タイルの位置または右上端タイルの位置を判定するための差分値の情報(例えば、tile_idx_delta[i])によって画定される場合がある。
シンタックスtile_idx_delta_present_flagの値が0である場合、i番目のスライスの位置/サイズは、スライスのサイズを示すシンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]によって画定される場合がある。シンタックスtile_idx_delta_prsent_flagの値が0である場合、現ピクチャの左側境界に接するスライスの右側に隣接するスライスは、左側境界に接するスライスと同一の高さを有するように設定される場合がある。これにより、現ピクチャの左側境界に接するスライスに対してのみスライスの高さを示す情報をシグナリングし、現ピクチャの左側境界に接していないスライスに対しては、スライスの高さを示す情報のシグナリングを省略する場合がある。
スライス内のタイルのインデックスに基づいて、スライスのサイズを示す情報のシグナリング可否を判定する場合がある。一例として、表13は、スライス内のタイルインデックスに基づいて、スライスのサイズを判定する情報のシグナリング可否が判定されるシンタックス構造を示すものである。
表13において、変数SliceTopLeftTileIdx[i]は、i番目のスライスが含むタイルのインデックスを示す。具体的には、i番目のスライス内の予め画定された位置のタイルのインデックスを変数SliceTopLeftTileIdx[i]に設定する場合がある。予め画定された位置のタイルは、左上端タイルを示す場合がある。
変数NumTileColumnsは、ピクチャが含むタイル列の個数を示す。一例として、i番目のスライス内の左上端タイルのインデックスと変数NumTileColumsから1を差分した値とのモジュロ演算(%)に基づいて、左上端タイルが属するタイル列の位置が判定される場合がある。一例として、モジュロ演算による結果値nは、左上端タイルが、インデックスがnであるタイル列に属することを示す。すなわち、i番目のスライスの左上端タイルインデックスSliceTopLeftTileIdx[i]を変数NumTileColumnで除した時に、残りの値が(NumTileColumns-1)である場合、i番目のスライスが最後のタイル列に含まれたものと判断する場合がある。
スライスの左上端タイルの位置に基づいて、スライスのサイズを示す情報のシグナリング可否を判定する場合がある。具体的には、スライスの左上端タイルが属するタイル列が、ピクチャ内の右端タイル列に該当するか否かに基づいて、スライスのサイズを示す情報のシグナリング可否を判定する場合がある。
一例として、スライス内の左上端タイルがピクチャ内の右端タイル列に属する場合、スライスの幅を示すシンタックスslice_width_in_tiles_minus1[i]のシグナリングが省略される場合がある。一例として、表13のように、i番目のスライスの左上端タイルインデックスSliceTopLeftTileIdx[i]を変数NumTileColumnでモジュロ演算を行った結果が、ピクチャ内のタイル列の個数NumTileColumnsから1を差分した値と同一である場合、シンタックスslice_width_in_tiles_minus1[i]の符号化/復号が省略される場合がある。この場合、シンタックスslice_width_in_tiles_minus1[i]の値は、0と見なす場合がある。
i番目のスライス内の左上端タイルのインデックスと変数NumTileColumnsとの除算に基づいて、左上端タイルが属するタイル行の位置が判定される場合がある。一例として、除算の商がmであることは、左上端タイルがインデックスmであるタイル行に含まれることを示す。すなわち、表13のように、i番目のスライスの左上端タイルインデックスSliceTopLeftTileIdx[i]を変数NumTileColumnで除した時に、商が(NumTileRows-1)である場合、i番目のスライスが最後のタイル行に含まれたものと判断する場合がある。
スライス内の左上端タイルがピクチャ内の下端タイル行に属する場合、スライスの高さを示すシンタックスslice_height_in_tiles_minus[i]のシグナリングが省略される場合がある。一例として、除算の結果が、ピクチャ内のタイル行の個数NumTileRowsから1を差分した値と同一である場合、シンタックスslice_height_in_tiles_minus1[i]の符号化/復号が省略される場合がある。この場合、シンタックスslice_height_in_tiles_minus1[i]の値は、0と見なす場合がある。
スライス内の左上端タイルが、ピクチャ内の右端列に属するとともに、下端行に属する場合、シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]の符号化/復号がいずれも省略される場合がある。この場合、二つのシンタックスの値は、いずれも0と見なす場合がある。
スライス内の左上端タイルが、ピクチャ内の下端行に含まれていない場合、スライス内の左上端タイルがピクチャ内の最左側列に属するか否かおよび/またはタイルインデックス間の差分情報が符号化されているか否かの少なくとも一つを考慮して、スライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]の符号化/復号可否が判定される場合がある。
一例として、スライス内の左上端タイルが、ピクチャ内の下端の行に含まれていなくても、タイルインデックス差分が符号化された場合(例えば、tile_idx_delta_present_flagが1である場合)、スライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]の符号化/復号が省略される場合がある。
または、スライス内の左上端タイルがピクチャ内の下端の行に属していなくても、左上端タイルがスライス内の最左側列に属しない場合、シンタックスslice_height_in_tiles_minus1[i]の符号化/復号が省略される場合がある。
スライス内の左上端タイルがピクチャ内の下端の行に属していないが、シンタックスslice_height_in_tiles_minus1[i]の符号化/復号が省略された場合、シンタックスは、前のスライスの高さslice_height_in_tiles_minus[i-1]と同様に設定される場合がある。
表14は、シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]に対するセマンティクス(semantics)を示す。
表14の例において、タイルインデックスの差分を示す情報が符号化されているか否かを示すシンタックスtile_idx_delta_present_flagは、現ピクチャに含まれたスライスの個数が1個以上である場合に符号化/復号されるものと例示されている。
i番目のスライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]およびi番目のスライスの幅を示すシンタックスslice_width_in_tiles_minus1[i]の値がいずれも0である場合、i番目のスライスを含むタイルの分割形状を判定するためのシンタックスnum_exp_slices_in_tile[i]がさらに符号化/復号される場合がある。ただし、i番目のスライスを含むタイルの高さが1である場合、タイルは、複数個のスライスに分割されることがない。これにより、i番目のスライスを含むタイルの高さが1である場合、シンタックスnum_exp_slices_in_tile[i]の符号化/復号を省略し、その値を0に推定する場合がある。
ピクチャ内のスライスの個数が2個である場合、ピクチャを水平方向または垂直方向に分割することで、長方形状のスライス2個を生成する場合がある。
図38は、ピクチャが2個のスライスで構成された場合の例を示す図である。
図38(a)は、ピクチャが水平方向に分割された例を示し、図38(b)は、ピクチャが垂直方向に分割された例を示す。
図示されている例のように、ピクチャが2個のスライスのみを含む場合、スライスの幅を示すシンタックスまたはスライスの高さを示すシンタックスだけで2個のスライスそれぞれを区分する場合がある。
一例として、図38(a)に図示されている例のように、ピクチャを水平方向に分割する場合、インデックスが0であるスライスの幅を示すシンタックスslice_width_in_tiles_minus1[0]およびインデックスが0であるスライスの高さを示すシンタックスslice_height_in_tiles_minus1[0]に基づいて、スライス0を特定する場合がある。スライス1に対しては、スライスのサイズを判定するためのシンタックスの符号化/復号を省略し、ピクチャ内のスライス0以外の残りの領域をスライス1に設定する場合がある。また、スライス1の左上端タイルのインデックスは、スライス0に含まれたタイル行の個数とタイル列の個数との積から1を差分して導出する場合がある。
図38(b)に図示されている例のように、ピクチャを垂直方向に分割する場合、インデックス0であるスライスの幅を示すシンタックスslice_width_in_tiles_minus1[0]およびインデックス0であるスライスの高さを示すシンタックスslice_height_in_tiles_minus1[0]に基づいて、スライス0を特定する場合がある。スライス1に対しては、スライスのサイズを判定するためのシンタックスの符号化/復号を省略し、ピクチャ内のスライス0以外の残りの領域をスライス1に設定する場合がある。また、スライス1の左上端タイルのインデックスは、スライス1に含まれたタイル行の個数と同様に導出する場合がある。
上記のように、ピクチャに2個のスライスのみが含まれた場合、タイルインデックスの差分を示す情報の符号化を省略しても、すべてのスライス内の左上端タイルのインデックスが導出される場合がある。これにより、ピクチャに含まれるスライスの個数が2個以下である場合、タイルインデックス差分情報の符号化/復号可否を示すシンタックスtile_idx_delta_present_flagの符号化/復号を省略し、その値を0に導出する場合がある。これにより、スライス別に、tile_idx_delta[i]の符号化/復号も省略される場合がある。
表15は、現ピクチャが含むスライスの個数が2個以下である場合、シンタックスtile_idx_delta_present_flagの符号化/復号が省略されるシンタックス構造を示す。
表15の例のように、シンタックスtile_idx_delta_present_flagは、シンタックスnum_slices_in_pic_minus1が1より大きい場合に限って符号化/復号される場合がある。
ピクチャ内のタイル列の個数が1個である場合またはタイル行の個数が1個である場合にも、タイルインデックス差分情報を用いることなく、各スライス内の左上端タイルの位置を識別する場合がある。
図39は、ピクチャ内のタイル列またはタイル行の個数が1個である場合を例示した図である。
図39(a)は、ピクチャが1個のタイル列を含む場合を例示するものであり、図39(b)は、ピクチャが1個のタイル行を含む場合を例示するものである。
ピクチャが1個のタイル列を含む場合、スライスの左上端タイルのインデックスは、前のスライスの高さに基づいて導出される場合がある。一例として、図39(a)に図示されている例のように、最初のタイルが2個のスライスに分割される場合、2個のスライスのうち最初のスライスslice0に対する幅を示すシンタックスslice_width_in_tiles_minus1[0]および高さを示すシンタックスslice_width_in_tiles_minus1[0]は、いずれも0に設定される。二番目のスライスslice1は、最初のスライスslice0と同一のタイルに属するため、二番目のスライスslice1に対しては、シンタックスslice_width_in_tiles_minus1[i]および高さを示すシンタックスslice_width_in_tiles_minus1[i]の符号化/復号が省略される場合がある。
三番目のスライスの左側タイルインデックスは、前のスライスに対してシグナリングされたタイル行の個数に設定される場合がある。一例として、スライス0に対してシグナリングされるシンタックスslice_height_in_tiles_minus1[0]から、1個のタイル行がスライスからなることを認知することができるため、スライス2の左上端タイル行のインデックスは1に設定される場合がある。
スライス3の左上端タイル行のインデックスは、前のスライスのタイル行の高さに基づいて導出される場合がある。一例として、スライス0に対してシグナリングされるシンタックスslice_height_in_tiles_minus1[0]およびスライス2に対してシグナリングされるシンタックスslice_height_width_in_tiles_minus1[2]から、総3個のタイル行がスライスからなることを認知することができるため、スライス3の左上端タイル行のインデックスは3に設定される場合がある。
すなわち、ピクチャが1個のタイル列を含む場合、前のスライスが占めるタイル行の個数が、次のスライスの左上端タイルインデックスに判定される場合がある。
ピクチャが1個のタイル行を含む場合、スライスの左上端タイルのインデックスは、前のスライスの幅に基づいて導出される場合がある。一例として、図39(b)に図示されている例のように、最初のタイルが1個のスライスに設定された場合、最初のスライスslice0に対する幅を示すシンタックスslice_width_in_tiles_minus1[0]および高さを示すシンタックスslice_width_in_tiles_minus1[0]はいずれも0に設定される。
二番目のスライスの左側タイルインデックスは、前のスライスに対してシグナリングされたタイル列の個数に設定される場合がある。一例として、スライス0に対してシグナリングされるシンタックスslice_width_in_tiles_minus1[0]から、1個のタイル列がスライスからなることを認知することができるため、スライス1の左上端タイル行のインデックスは1に設定される場合がある。
スライス2の左上端タイル行のインデックスは、前のスライスのタイル列の高さに基づいて導出される場合がある。一例として、スライス0に対してシグナリングされるシンタックスslice_width_in_tiles_minus1[0]およびスライス1に対してシグナリングされるシンタックスslice_width_width_in_tiles_minus1[1]から、総3個のタイル列がスライスからなることを認知することができるため、スライス2の左上端タイル行のインデックスは3に設定される場合がある。
すなわち、ピクチャが1個のタイル行を含む場合、前のスライスが占めるタイル列の個数が、次のスライスの左上端タイルインデックスに判定される場合がある。
上記のように、ピクチャが1個のタイル列または1個のタイル行のみで構成された場合、タイルインデックス差分情報がなくても、各スライスの左上端タイルのインデックスを特定する場合がある。これにより、ピクチャに含まれるタイル列またはタイル行の個数が1個である場合、タイルインデックス差分情報の符号化/復号可否を示すシンタックスtile_idx_delta_present_flagの符号化/復号を省略し、その値を0に導出する場合がある。これにより、スライス別のtile_idx_delta[i]の符号化/復号も省略される場合がある。
表16は、現ピクチャが含むタイル列またはタイル行の個数が1個である場合、シンタックスtile_idx_delta_present_flagの符号化/復号が省略されるシンタックス構造を示す。
上述のように、スライスの幅を示すシンタックスslice_width_in_tiles_minus1[i]およびスライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]が0であることは、スライスが一つのタイルに構成されていることを示すか、一つのタイルが複数のスライスで構成されることを示す場合がある。
一つのタイルが複数個のスライスで構成された場合、複数個のスライスの高さは、同一の値を有するか、複数個のスライスのうち最後のスライス以外のスライスが同一の高さを有するように設定する場合がある。この場合、タイル内の最初のスライスに対してのみ高さの情報をシグナリングする場合がある。
ピクチャ内のスライスの個数が2個である場合、二つのスライスの間のタイルインデックス差分だけでも、各スライスのサイズおよび位置が判定される場合がある。これにより、タイルインデックス差分が符号化されたことを示すシンタックスtile_idx_delta_present_flagの値が1であり、ピクチャ内のスライスの個数を示すシンタックスnum_slice_in_pic_minus1の値が1である場合、スライスの幅を示すシンタックスslice_width_in_tiles_minus1およびスライスの高さを示すシンタックスslice_height_in_tiles_minus1の符号化/復号が省略される場合がある。表17は、これに関する例示を示す。
表17に例示されているように、シンタックスtile_idx_delta_present_flagの値が1であり、num_slices_in_pic_minus1が1である場合、シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]の符号化/復号が省略される場合がある。
すなわち、シンタックスtile_idx_delta_present_flagの値が0である場合、またはnum_slices_in_pic_minus1の値が1ではない場合、シンタックスslice_width_in_tiles_minus1[i]および/またはシンタックスslice_height_in_tiles_minus1[i]が符号化/復号される場合がある。
シンタックスslice_width_in_tiles_minus1[i]およびシンタックスslice_height_in_tiles_minus1[i]の符号化/復号が省略された場合、復号器は、二つのスライスの間のタイルインデックス差分、タイル列の個数またはタイル行の個数の少なくとも一つを考慮して、各スライスの高さまたは幅を導出する場合がある。
一例として、二つのスライスの間のタイルインデックス差分を示すシンタックスtile_idx_delta[i]の値が、ピクチャ内のタイル列の個数を示す変数NumTileColumnsより小さい場合、シンタックスslice_width_in_tiles_minus1[i]の値を、シンタックスtile_idx_delta[i]が示す差分値から1を差分した値に推定する場合がある。また、シンタックスslice_height_in_tiles_minus1[i]の値を、タイル行の個数を示す変数NumTileRowsから1を差分した値に推定する場合がある。すなわち、ピクチャ内の最初のスライスの幅は、シンタックスtile_idx_delta[0]と同一の値に設定され、最初のスライスの高さは、タイル列の個数と同様に設定される場合がある。
一例として、二つのスライスの間のタイルインデックス差分を示すシンタックスtile_idx_delta[i]の値が、ピクチャ内のタイル列の個数を示す変数NumTileColumns以上である場合、シンタックスslice_width_in_tiles_minus1[i]の値を、タイル列の個数を示す変数NumTileColumnsから1を差分した値に推定する場合がある。また、シンタックスslice_height_in_tiles_minus1[i]の値をシンタックスtile_idx_delta[i]をタイル列の個数NumTileColumnsで除した値(例えば、tile_idx_delta[i]/NumTileColumn)に推定する場合がある。すなわち、ピクチャ内の最初のスライスの幅は、タイル列の個数と同一の値に設定され、最初のスライスの高さは、シンタックスtile_idx_delta[0]を変数NumTileColumnで除して得られる商と同一の値に設定される場合がある。
i番目のスライスのサイズを示すシンタックスslice_width_in_tiles_minus1[i]およびスライスの高さを示すシンタックスslice_height_in_tiles_minus1[i]の値がいずれも0である場合、i番目のスライスを含むタイルの分割形状を判定するための情報、例えば、シンタックスnum_exp_slice_in_tile[i]および/またはexp_slice_height_in_ctus_minus1[j]を符号化/復号する場合がある。
この場合、タイル行の高さに基づいて、タイルの分割形状を判定するための情報の符号化/復号可否を判定する場合がある。
ピクチャ内のタイルの個数に基づいて、シンタックスtile_idx_delta[i]の符号化/復号可否を判定する場合がある。表18は、上記の説明に関する例示を示す。
表18において、変数NumTileInPicは、ピクチャ内のスライスの個数を示す。ピクチャ内のタイルの個数が閾値以下である場合、タイルインデックス差分値を示すシンタックスtile_idx_delta[i]の符号化/復号を省略する場合がある。閾値は、1、2または3のような自然数である場合がある。表18では、閾値が1であるものと例示されている。すなわち、ピクチャ内のタイルが1個である場合には、一つのタイルを複数個のスライスに分割することのみが可能である。これにより、すべてのスライスに対するシンタックス差分値が0であるため、シンタックスtile_idx_delta[i]の符号化/復号を省略する場合がある。
他の例として、ピクチャ内のタイルの個数に基づいて、タイルインデックス差分値の復号可否を示すシンタックスtile_idx_delta_present_flagの符号化/復号可否を判定する場合もある。一例として、ピクチャ内のタイルの個数が閾値以下である場合、シンタックスtile_idx_delta_present_flagの符号化/復号が省略される場合がある。閾値は、1、2、または3のような自然数である場合がある。シンタックスtile_idx_delta_present_flagの符号化/復号が省略された場合、シンタックスの値が0であるものと推定する場合がある。これにより、タイルインデックス差分値を示すシンタックスtile_idx_delta[i]も符号化/復号されない場合もある。
上述の実施形態において、タイルのインデックスの代わりに、コーディングツリーユニットのインデックスに基づいてスライスを画定することも可能である。
上述の例では、ラスタースキャン順序にしたがってタイルに順番を付与して、スライスが画定されるものと仮定した。他の例として、垂直スキャン、水平スキャンまたは対角スキャンによってタイルに順番を付与して、スライスを画定することもできる。
復号過程または符号化過程を中心に説明されている実施形態を、符号化過程または復号過程に適用することは、本開示の範囲に含まれる。所定の順序で説明されている実施形態を、説明されているものと相違する順序に変更することも、本開示の範囲に含まれる。
上述の実施形態は、一連のステップまたはフローチャートに基づいて説明されているが、これは、発明の時系列的順序を限定したものではなく、必要に応じて、同時に行われるか異なる順序で行われる場合がある。また、上述の実施形態において、ブロック図を構成する構成要素(例えば、ユニット、モジュールなど)のそれぞれは、ハードウェア装置またはソフトウェアで実現されることもでき、複数の構成要素が結合して一つのハードウェア装置またはソフトウェアで実現されることもできる。上述の実施形態は、様々なコンピュータ構成要素により実行される場合があるプログラム命令語の形態で実現され、コンピュータ可読記録媒体に記録される場合がある。コンピュータ可読記録媒体は、プログラム命令語、データファイル、データ構造などを単独でまたは組み合わせて含む場合がある。コンピュータ可読記録媒体の例としては、ハードディスク、フロッピーディスクおよび磁気テープなどの磁気媒体、CD-ROM、DVDなどの光記録媒体、フロプティカルディスク(floptical disk)などの磁気-光媒体(magneto-optical media)、およびROM、RAM、フラッシュメモリなどのプログラム命令語を格納し実行するように特別に構成されたハードウェア装置が含まれる。ハードウェア装置は、本開示による処理を行うために、一つ以上のソフトウェアモジュールとして作動するように構成される場合があり、その逆の場合も同様である。