以下、図面を参照して本発明の実施例を詳細に説明する。
映像の符号化及復号化は、ブロック単位で実行される。一例として、符号化ブロック、変換ブロック又は予測ブロックについては、変換、量子化、予測、インループフィルタリング又は再構成などの符号化/復号化処理が実行されることができる。
以下、符号化/復号化対象となるブロックを「現在のブロック」と称する。一例として、現在のブロックは、現在の符号化/復号化処理ステップに従って、符号化ブロック、変換ブロック又は予測ブロックを示すことができる。
更に、本明細書で使用される「ユニット」という用語は、特定の符号化/復号化プロセスを実行するための基本単位を示し、「ブロック」は、所定のサイズのサンプルアレイを示すものと理解することができる。特に明記しない限り、「ブロック」と「ユニット」は、同等の意味で使用することができる。一例として、後述される実施例では、符号化ブロックと符号化ユニットは、相互同等の意味を持つものと理解することができる。
図1は、本発明の実施例に係る映像符号化器(encoder)のブロック図である。
図1を参照すると、映像符号化装置100は、画像分割部110、予測部120、125、変換部130、量子化部135、再配列部160、エントロピ符号化部165、逆量子化部140、逆変換部145、フィルタ部150及びメモリ155を含み得る。
図1に示された各構成部は、映像符号化機器において、異なる特徴的な機能を示すために、独立して示したものであり、各構成部が、分離されたハードウェアや1つのソフトウェア構成単位で構成されることを意味しない。即ち、各構成部は、説明の便宜上、各構成部を配列することにより、各構成部のうちの少なくとも2つの構成部を合併して1つの構成部に行われるか、1つの構成部が複数の構成部に分けられて機能を実行することができ、本発明の本質から逸脱しない限り、これらの各構成部が統合された実施例及び各構成部が分離された実施例も本発明の保護範囲に含まれる。
また、一部の構成要素は、本発明の本質的な機能を実行するために必要な構成要素ではなく、単に性能を向上させるための選択的な構成要素である。本発明は、性能を向上させるために使用される構成要素を除いて本発明の本質を具現するのに必要な構成部のみを含むことにより具現されることができ、性能を向上させるための選択的な構成要素を除いて必要な構成要素のみを含む構造も本発明の保護範囲に含まれる。
画像分割部110は、入力された画像を少なくとも1つの処理単位に分割することができる。この場合、処理単位は、予測単位(PU:Prediction Unit)であってもよく、変換単位(TU:Transform Unit)であってもよく、符号化単位(CU:Coding Unit)であってもよい。画像分割部110は、1つの画像に対して複数の符号化単位、予測単位と変換単位の組み合わせに分割して、所定の基準(例えば、コスト関数)に基づいて1つの符号化単位、予測単位及び変換単位の組み合わせを選択して画像を符号化することができる。
例えば、1つの画像を複数の符号化単位に分割することができる。画像で符号化単位を分割するためには、クワッドツリー構造(Quad Tree Structure)などの再帰的なツリー構造を使用することができるが、1つの映像又は最大サイズの符号化単位(largest coding unit)をルートして他の符号化単位に分割される符号化ユニットは、分割された符号化単位の数だけの子ノードをもって分割されることができる。特定の限制に応じて、これ以上分割されない符号化単位は、リーフノードとなる。即ち、1つの符号化ユニットに対して正方形分割のみが可能であると仮定する場合、1つの符号化単位は、最大4つの異なる符号化単位に分割されることができる。
以下、本発明の実施例において、符号化単位は、符号化を実行する単位の意味で使用されてもよく、復号化を実行する単位の意味で使用されてもよい。
予測単位は、1つの符号化単位内で、同じサイズの少なくとも1つの正方形又は長方形などの形に分割されたものであってもよく、1つの符号化単位内で分割された予測単位のいずれか1つの予測単位が他の1つの予測単位と異なる形態及び/又はサイズを有するように分割されたものであってもよい。
符号化単位に基づいて、イントラ予測を行う予測単位を生成するとき、最小符号化単位ではない場合、複数の予測単位NxNに分割せずにイントラ予測を行うことができる。
予測部120、125は、インター予測を行うインター予測部120及びイントラ予測を行うイントラ予測部125を含み得る。予測単位に対して、インター予測を使用するか、イントラ予測を行うかを決定し、各予測方法に係る具体的な情報(例えば、イントラ予測モード、モーションベクトル、参照画像など)を決定することができる。この場合、予測を行う処理単位と、予測方法、及び具体的な内容が決定される処理単位は異なる可能性がある。例えば、予測方法と予測モードなどは、予測単位で決定され、予測の実行は、変換単位で実行されることもできる。生成された予測ブロックと元のブロックとの間の残差値(残差ブロック)は、変換部130に入力されることができる。また、予測のために使用される予測モード情報、モーションベクトル情報などは、残差値と共にエントロピ符号化部165内で符号化されて復号化器に伝送されることができる。特定の符号化モードを使用する場合、予測部120、125を介して予測ブロックを生成せずに、元のブロックをそのまま符号化して復号化部に伝送することも可能である。
インター予測部120は、現在の画像の前の画像又は現在の画像その後の画像のうちの少なくとも1つの画像の情報をもとに、予測単位を予測してもよく、場合によっては、現在の画像内の符号化が完了した、一部の領域の情報に基づいて、予測単位を予測してもよい。インター予測部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)、3段階検索(TSS:Three Step Search)、新しい3段階検索アルゴリズム(NTS:New Three-Step Search Algorithm)など様々な方法を使用することができる。モーションベクトルは、補間された画素に基づいて、1/2又は1/4画素単位のモーションベクトル値を有することができる。モーション予測部は、モーション予測方法を異なるようにして、現在の予測単位を予測することができる。モーション予測方法は、スキップ(Skip)方法、マージ(Merge)方法、高度なモーションベクトル予測(AMVP:Advanced Motion Vector Prediction)方法、イントラブロックコピー(Intra Block Copy)方法など様々な方法を使用することができる。
イントラ予測部125は、現在の画像内の画素情報である現在のブロックの周辺の参照画素情報に基づいて、予測単位を生成することができる。現在の予測単位の周辺のブロックがインター予測を行ったブロックであり、参照画素がインター予測を行った画素である場合、インター予測を行ったブロックに含まれる参照画素を、イントラ予測を行った周辺のブロックの参照画素情報に置き換えて使用することができる。即ち、参照画素が利用不可能である場合、利用不可能な参照画素情報を利用可能な参照画素のうちの少なくとも1つの参照画素に置き換えて使用することができる。
イントラ予測において、予測モードは、参照画素情報を予測方向に従って使用する方向性予測モードと、予測するとき方向性情報を使用しない非方向性モードを有することができる。輝度情報を予測するためのモードと色差情報を予測するためのモードが異なる可能性があり、色差情報を予測するために、輝度情報を予測するために使用されたイントラ予測モード情報又は予測された輝度信号情報を適用することができる。
イントラ予測を行う際に、予測単位のサイズと変換単位のサイズが同じである場合、予測単位の左側にある画素、左上にある画素、上部にある画素に基づいて、予測単位に対するイントラ予測を行うことができる。しかしながら、イントラ予測を行うとき、予測単位のサイズと変換単位のサイズが異なる場合、変換単位に基づいて、1つの参照画素を使用してイントラ予測を行うことができる。また、最小符号化単位に対してのみNxN分割を使用するイントラ予測を使用することができる。
イントラ予測方法は、予測モードに従って、参照画素に適応イントラスムージング(AIS:Adaptive Intra Smoothing)フィルタを適用した後、予測ブロックを生成することができる。参照画素に適用されるAISフィルタの種類は異なる場合がある。イントラ予測方法を実行するために、現在の予測単位のイントラ予測モードは、現在の予測単位の周りにある予測単位のイントラ予測モードから予測することができる。周辺の予測単位から予測されたモード情報を使用して現在の予測単位の予測モードを予測する場合、現在の予測単位と周辺の予測単位のイントラ予測モードが同じであると、所定のフラグ情報を使用して現在の予測単位と周辺の予測単位の予測モードが同じである情報を伝送することができ、現在の予測単位と周辺の予測単位の予測モードが異なると、エントロピ符号化を行うことにより現在のブロックの予測モード情報を符号化することができる。
また、予測部120、125から生成された予測単位に基づいて、予測を行った予測単位と予測単位の元のブロックの間の差値である残差値(Residual)情報を含む残差ブロックを生成することができる。生成された残差ブロックは、変換部130に入力することができる。
変換部130は、離散コサイン変換(DCT:Discrete Cosine Transform)、離散サイン変換(DST:Discrete Sine Transform)、K-L変換(KLT)などの変換方法を使用して、元のブロック及び予測部120、125によって生成された予測単位の残差値(residual)情報を含む残差ブロックを変換することができる。残差ブロックを変換するために、DCTを適用するか、DSTを適用するか、KLTを適用するかについては、残差ブロックを生成するために使用された予測単位のイントラ予測モード情報に基づいて決定することができる。
量子化部135は、変換部130において周波数領域に変換された値を量子化することができる。ブロックに応じて、又は映像の重要性に応じて、量子化係数は変化することができる。量子化部135から算出された値を逆量子化部140及び再配列部160に提供することができる。
再配列部160は、量子化された残差値に対して、係数値の再配列を実行することができる。
再配列部160は、係数スキャン(Coefficient Scanning)方法を通じて、2次元のブロック形状係数を1次元のベクトル形式に変更することができる。例えば、再配列部160は、ジグザグスキャン(Zig-Zag Scan)方法を使用して、DC係数から高周波数領域の係数までスキャンして1次元ベクトル形式に変更することができる。変換単位のサイズ及びイントラ予測モードに従って、ジグザグスキャンの代わりに2次元のブロック形状係数を列方向に沿ってスキャンする垂直スキャン、2次元のブロック形状係数を行方向に沿ってスキャンする水平スキャンを使用することもできる。即ち、変換単位のサイズ及びイントラ予測モードに従って、ジグザグスキャン、垂直方法スキャン及び水平方向スキャンのうち、どのスキャン方法を使用するかについて決定することができる。
エントロピ符号化部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)のうちの少なくとも1つを含み得る。
デブロッキングフィルタは、再構成された画像でブロック間の境界によって生成されたブロック歪みを除去することができる。デブロッキングするかどうかを判定するために、ブロックに含まれたいくつかの列又は行に含まれた画素に基づいて、現在のブロックにデブロッキングフィルタを適用するかどうかを判定することができる。ブロックにデブロッキングフィルタを適用した場合、必要なデブロッキングフィルタリング の強度に応じて、強いフィルタ(Strong Filter)又は弱いフィルタ(Weak Filter)を適用することができる。また、デブロッキングフィルタを適用することにより、垂直フィルタリング及び水平フィルタリングを実行するとき、水平方向のフィルタリング及び垂直方向のフィルタリングが並列処理されるようにすることができる。
オフセット補正部は、デブロッキングを行った映像と元の映像のオフセットを画素単位で補正することができる。特定の画像に対するオフセット補正を実行するために、映像に含まれた画素を特定の数の領域に区分した後、オフセットを行う領域を決定し、対応する領域にオフセットを適用する方法又は各画素のエッジ情報を考慮してオフセットを適用する方法を使用することができる。
適応ループフィルタ(ALF:Adaptive Loop Filtering)は、フィルタリングされた再構成映像と元の映像を比較した値に基づいて実行されることができる。映像に含まれた画素を所定のグループに分け、対応するグループに適用される1つのフィルタを決定してグループごとに差別的にフィルタリングを行うことができる。ALFを適用するかどうかに関連する情報及び輝度信号は、ALF符号化単位(CU:Coding Unit)ごとに伝送されることができ、適用されるALFフィルタの形状及びフィルタ係数は各ブロックに応じて異なる。また、適用するブロックの特性とは関係なく、同じタイプ(固定タイプ)のALFフィルタを適用することもできる。
メモリ155は、フィルタ部150によって算出された再構成ブロック又は画像を記憶することができ、記憶された再構成ブロック又は画像は、インター予測を行う際、予測部120、125に提供されることができる。
図2は、本発明の実施例に係る映像復号化器(decoder)のブロック図である。
図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によってエントロピ復号化されたビットストリームを再配列する方法に基づいて再配列することができる。1次元ベクトルの形で表れた係数を2次元のブロックの形の係数に再構成して再配列することができる。再配列部215は、符号化部によって実行された係数スキャンに関連する情報を受信し、対応する符号化部によって実行されたスキャン順序に基づいて、逆にスキャンする方法を通じて再配列することができる。
逆量子化部220は、符号化器から提供された量子化パラメータ、及び再配列されたブロックの係数値に基づいて逆量子化することができる。
逆変換部225は、映像符号化器によって実行された量子化結果に対して、変換部によって実行された変換、即ち、DCT、DST及びKLTに対して、逆変換、即ち、逆DCT、逆DST及び逆KLTを実行することができる。逆変換は、映像符号化器によって決定された伝送単位に基づいて、実行することができる。映像復号化器の逆変換部225は、予測方法、現在のブロックのサイズ及び予測方向などの複数の情報に従って変換方法(例えば、DCT、DST、KLT)を選択的に実行することができる。
予測部230、235は、エントロピ復号化部210によって提供された、予測ブロックの生成に関連する関連情報と、メモリ245によって提供された、以前に復号化されたブロック又は画像情報とに基づいて、予測ブロックを生成することができる。
上記のように、映像符号化器での動作と同じくイントラ予測を行うとき、予測単位のサイズと変換単位のサイズが同じである場合、予測単位の左側にある画素、左上にある画素、上部にある画素に基づいて、予測単位に対するイントラ予測を行うが、イントラ予測を行うとき、予測単位のサイズと変換単位のサイズが異なる場合、変換単位に基づき、1つの参照画素を使用してイントラ予測を行うことができる。また、最小符号化単位に対してのみNxN分割を使用するイントラ予測を使用することもできる。
予測部230、235は、予測単位判定部、インター予測部及びイントラ予測部を含み得る。予測単位判定部は、エントロピ復号化部210から入力される予測単位情報、イントラ予測方法の予測モード情報、インター予測方法のモーション予測関連情報など様々な情報を受信し、現在の符号化単位で予測単位を区分し、予測単位がインター予測を行うか、それともイントラ予測を行うかを判定することができる。インター予測部230は、映像符号化器から提供された現在の予測単位のインター予測に必要な情報を使用して、現在の予測単位が含まれている現在の画像の前の画像又はそれその後の画像のうちの少なくとも1つの画像に含まれた情報に基づいて、現在の予測単位に対するインター予測を行うことができる。あるいは、現在の予測単位が含まれている現在の画像で再構成された部分領域の情報に基づいて、インター予測を行うことができる。
インター予測を行うために、符号化単位に基づいて、対応する符号化単位に含まれた予測単位のモーション予測方法が、スキップモード(Skip Mode)、マージモード(Mergeモード)、モーションベクトル予測モード(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は、本発明の実施例に係る基本的な符号化ツリーユニットを示す図面である。
最大サイズの符号化ブロックを符号化ツリーブロックとして定義することができる。1つの画像は、複数の符号化ツリーユニット(CTU:Coding Tree Unit)に分割される。符号化ツリーユニットは、最大サイズの符号化ユニットであり、最大符号化ユニット(LCU:Largest Coding Unit)とも呼ばれる。図3は、1つの画像が複数の符号化ツリーユニットに分割された例を示す。
符号化ツリーユニットのサイズは、画像レベル又はシーケンスレベルによって定義されることができる。したがって、画像パラメータセット又はシーケンスパラメータセットを介して符号化ツリーユニットのサイズを表す情報をシグナリングすることができる。
一例として、シーケンス内の画像に対する符号化ツリーユニットのサイズを128x128に設定することができる。又は、画像レベルの128x128又は256x256のいずれか1つを符号化ツリーユニットのサイズとして決定することができる。一例として、第1画像の符号化ツリーユニットのサイズを128x128に設定し、第2画像の符号化ツリーユニットのサイズを256x256に設定することができる。
符号化ツリーユニットを分割することにより、符号化ブロックを生成することができる。符号化ブロックは、符号化/復号化処理するための基本単位を表す。一例として、符号化ブロックごとに予測又は変換を行うことができ、又は符号化ブロックごとに予測符号化モードを決定することができる。ここで、予測符号化モードは、予測映像を生成する方法を表す。一例として、予測符号化モードは、画面内予測(イントラ予測(Intra Prediction))、画面間予測(インター予測(Inter Prediction))、現在画像参照(CPR:Current Picture Referencing、又はイントラブロックコピー(IBC:Intra Block Copy))又は複合予測(Combined Prediction)を含み得る。符号化ブロックについては、イントラ予測、インター予測、現在画像参照又は複合予測のうちの少なくとも1つの予測符号化モードを使用して、符号化ブロックに関連する予測ブロックを生成することができる。
ビットストリーム用信号を介して、現在のブロックの予測符号化モードを表す情報を送信することができる。一例として、前記情報は、予測符号化モードがイントラモードであるか、インターモードの1ビットのフラグであるかを指示することができる。現在のブロックの予測符号化モードがインターモードとして決定される場合のみ、現在画像参照又は複合予測を使用することができる。
現在画像参照は、現在画像を参照画像として設定し、現在画像内の符号化/復号化された領域から現在のブロックの予測ブロックを取得するために使用される。ここで、現在画像とは、現在のブロックを含む画像を意味する。ビットストリーム用信号を介して、現在のブロックが現在画像参照を適用するかどうかを表す情報を送信することができる。一例として、前記情報は、1ビットのフラグであってもよい。前記フラグが真の場合、現在のブロックの予測符号化モードを現在画像参照として決定することができ、前記フラグが偽の場合、現在のブロックの予測モードをインター予測として決定することができる。
あるいは、参照画像インデックスに基づいて現在のブロックの予測符号化モードを決定することができる。一例として、参照画像インデックスが現在画像を指す場合、現在のブロックの予測符号化モードを現在画像参照として決定することができる。参照画像インデックスが現在画像ではなく他の画像を指す場合、現在のブロックの予測符号化モードをインター予測として決定することができる。即ち、現在画像参照は、現在画像内の符号化/復号化された領域の情報を使用した予測方法であり、インター予測は、符号化/復号化された他の画像の情報を使用した予測方法である。
複合予測は、イントラ予測、インター予測及び現在画像参照のうちの2つ以上を組み合わせた符号化モードである。一例として、複合予測を適用する場合、イントラ予測、インター予測又は現在画像参照のうちの1つに基づいて、第1予測ブロックを生成し、別の1つに基づいて第2予測ブロックを生成することができる。第1予測ブロック及び第2予測ブロックを生成すると、第1予測ブロックと第2予測ブロックの平均演算又は加重和演算により、最終的な予測ブロックを生成することができる。ビットストリーム用信号を介して、複合予測を適用するかどうかを表す情報を送信することができる。前記情報は、1ビットのフラグであってもよい。
図4は、符号化ブロックの様々な分割形態を示す図面である。
クアッドツリー分割、バイナリツリー分割、またはトリプルツリー分割に基づいて、符号化ブロック分割を複数の符号化ブロックに分割することができる。クアッドツリー分割、バイナリツリー分割、またはトリプルツリー分割に基づいて、分割された符号化ブロックを再び複数の符号化ブロックに分割することもできる。
クアッドツリー分割は、現在のブロック分割を4つのブロックに分割する分割技術を指す。クアッドツリー分割の結果として、現在のブロック分割を4つの正方形のパーティション(図4の(a)「SPLIT_QT」)に分割することができる。
バイナリツリー分割は、現在のブロック分割を2つのブロックに分割する分割技術を指す。垂直方向に沿って(即ち、現在のブロックを横切る垂直線を利用)現在のブロックを2つのブロックに分割することを垂直方向バイナリツリー分割と称することができ、水平方向に沿って(即ち、現在のブロックを横切る水平線を利用)現在のブロックを2つのブロックに分割することを水平方向バイナリツリー分割と称することができる。バイナリツリーが分割された結果、現在のブロックは、2つの非正方形のパーティションに分割されることができる。図4の(b)「SPLIT_BT_VER」は、垂直方向バイナリツリー分割結果を表し、図4の(c)「SPLIT_BT_HOR」は、水平方向バイナリツリー分割結果を表す。
トリプルツリー分割は、現在のブロックを3つのブロックに分割する分割技術を指す。垂直方向に沿って(即ち、現在のブロックを横切る2つの垂直線を利用)現在のブロックを3つのブロックに分割することを垂直方向トリプルツリー分割と称することができ、水平方向に沿って(即ち、現在のブロックを横切る2つの水平線を利用)現在のブロックを3つのブロックに分割することを水平方向トリプルツリー分割と称することができる。トリプルツリーが分割された結果、現在のブロックは、3つの非正方形のパーティションに分割されることができる。この場合、現在のブロックの中央に位置するパーティションの幅/高さは、異なるパーティションの幅/高さの2倍であってもよい。図4の(d)「SPLIT_TT_VER」は、垂直方向トリプルツリー分割結果を表し、図4の(e)「SPLIT_TT_HOR」は、水平方向トリプルツリー分割結果を表す。
符号化ツリーユニットの分割の回数を分割深さ(Partitioning Depth)と定義することができる。シーケンス又は画像レベルによって、符号化ツリーユニットの最大分割深さが決定されることができる。これにより、シーケンス又は画像ごとに、符号化ツリーユニットの最大分割深さが異なる可能性がある。
あるいは、分割技術のそれぞれの最大分割深さを個別に決定することができる。一例として、クアッドツリー分割が許可される最大分割深さは、バイナリツリー分割及び/又はトリプルツリー分割が許可される最大分割深さと異なる可能性がある。
符号化器は、ビットストリームを介して、現在のブロックの分割形態又は分割深さのうちの少なくとも1つを表す情報をシグナリングすることができる。復号化器は、ビットストリームから解析された前記情報に基づいて、符号化ツリーユニットの分割形態及び分割深さを決定することができる。
図5は、符号化ツリーユニットの分割モードを示す図面である。
クアッドツリー分割、バイナリツリー分割及び/又はトリプルツリー分割などの分割技術を使用して、符号化ブロックを分割することをマルチツリー分割(Multi Tree Partitioning)と称することができる。
符号化ブロックにマルチツリー分割を適用することにより生成された符号化ブロックを下位符号化ブロックと称することができる。符号化ブロックの分割深さがkである場合、下位符号化ブロックの分割深さをk+1に設定される。
逆に、分割深さがk+1である符号化ブロックにとって、分割深さがkである符号化ブロックを上位符号化ブロックと称することができる。
上位符号化ブロックの分割形態又は隣接する符号化ブロックの分割タイプのうちの少なくとも1つに基づいて、現在の符号化ブロックの分割タイプを決定することができる。ここで、隣接する符号化ブロックは、現在の符号化ブロックに隣接し、当該隣接する符号化ブロックは、現在の符号化ブロックの上部隣接ブロック、左側隣接ブロック、又は左上隅に隣接する隣接ブロックのうちの少なくとも1つを含み得る。ここで、分割タイプは、クアッドツリー分割するかどうか、バイナリツリー分割するかどうか、バイナリツリー分割方向、トリプルツリー分割するかどうか、又はトリプルツリー分割方向のうちの少なくとも1つを含み得る。
符号化ブロックの分割形態を決定するために、ビットストリームを介して、符号化ブロックが分割されるかどうかを表す情報をシグナリングすることができる。前記情報は、1ビットのフラグ「split_cu_flag」であり、前記フラグが真である場合、マルチツリー分割技術を通じて符号化ブロックを分割することを表す。
split_cu_flagが真である場合、ビットストリームを介して、符号化ブロックがクアッドツリー分割されるかどうかを表す情報をシグナリングすることができる。前記情報は、1ビットのフラグ「split_qt_flag」であり、前記フラグが真である場合、符号化ブロックは、4つのブロックに分割されることができる。
一例として、図5に示された例では、符号化ツリーユニットがクアッドツリー分割されることに伴い、分割深さが1である4つの符号化ブロックが生成されることが示されている。また、クアッドツリー分割結果として生成された4つの符号化ブロックのうちの最初の符号化ブロック及び4番目の符号化ブロックに再びクアッドツリー分割が適用されることが示されている。その結果、分割深さが2である4つの符号化ブロックを生成することができる。
また、分割深さが2である符号化ブロックに再びクアッドツリー分割を適用することにより、分割深さが3である符号化ブロックを生成することができる。
符号化ブロックにクアッドツリー分割が適用されない場合、符号化ブロックのサイズ、符号化ブロックが画像の境界に位置するかどうか、最大分割深さ又は隣接ブロックの分割形状のうちの少なくとも1つを考慮して、前記符号化ブロックにバイナリツリー分割又はトリプルツリー分割を実行するかどうかを決定することができる。前記符号化ブロックにバイナリツリー分割又はトリプルツリー分割が適用されると決定された場合、ビットストリームを介して、分割方向を示す情報をシグナリングすることができる。前記情報は、1ビットのフラグ「mtt_split_cu_vertical_flag」であってもよい。前記フラグに基づいて、分割方向が垂直方向であるか、水平方向であるかを決定することができる。加えて、ビットストリームを介して、バイナリツリー分割又はトリプルツリー分割のいずれかが前記符号化ブロックに適用されるかを表す情報をシグナリングことができる。前記情報は、1ビットのフラグ「mtt_split_cu_binary_flag」であってもよい。前記フラグに基づいて、前記符号化ブロックにバイナリツリー分割が適用されるか、トリプルツリー分割が適用されるかを決定することができる。
一例として、図5に示された例では、分割深さが1である符号化ブロックに垂直方向バイナリツリー分割が適用され、前記分割結果として生成された符号化ブロックのうちの左側の符号化ブロックには垂直方向トリプルツリー分割が適用され、右側の符号化ブロックには垂直方向バイナリツリー分割が適用されていることが示されている。
インター予測は、以前の画像の情報を使用して、現在のブロックを予測する予測符号化モードである。一例として、以前の画像において現在のブロックと同じ位置にあるブロック(以下、同位置ブロック(Collocated block)と称する)を現在のブロックの予測ブロックに設定することができる。以下、現在のブロックと同じ位置にあるブロックに基づいて生成された予測ブロックを同位置予測ブロック(Collocated Prediction Block)と称することにする。
もう一方では、以前の画像に存在したオブジェクトが現在の画像では他の場所に移動すると、オブジェクトの動きを利用して、現在のブロックを効果的に予測することができる。例えば、以前の画像と現在の画像を比較することにより、ブジェクトの移動方向及びサイズを知ると、オブジェクトの動き情報を考慮して現在のブロックの予測ブロック(又は、予測映像)を生成することができる。以下、動き情報で生成された予測ブロックを動き予測ブロックと称することができる。
現在のブロックで予測ブロックを差分して、残差ブロック(residual block)を生成することができる。この場合、オブジェクトの動きが存在する場合、同位置予測ブロックの代わりに動き予測ブロックを使用することにより、残差ブロックのエナジーを減らし、これにより、残差ブロックの圧縮性能を向上させることができる。
上記のように、動き情報を利用して予測ブロックを生成することを動き補償予測と称することができる。ほとんどのインター予測では、動き補償予測に基づいて予測ブロックを生成することができる。
動き情報は、モーションベクトル、参照画像インデックス、予測方向又は両方向の重み値インデックスのうちの少なくとも1つを含み得る。モーションベクトルは、オブジェクトの移動方向及びサイズを表す。参照画像インデックスは、参照画像リストに含まれた参照画像のうちの現在のブロックの参照画像を特定する。予測方向は、一方向のL0予測、一方向のL1予測又は両方向予測(L0予測及びL1予測)のうちのいずれかを指す。現在のブロックの予測方向に従って、L0方向の動き情報又はL1方向の動き情報のうちの少なくとも1つを使用することができる。両方向の重み値インデックスは、L0予測ブロックに適用される重み値及びL1予測ブロックに適用される重み値を特定する。
図6は、本発明の実施例に係るインター予測方法のフローチャートである。
図6を参照すると、インター予測方法は、現在のブロックのインター予測モードを決定することと(ステップS601)、決定されたインター予測モードに従って、現在のブロックの動き情報を取得することと(ステップS602)、取得された動き情報に基づいて、現在のブロックに対する動き補償予測を実行することと(ステップS603)、を含む。
ここで、インター予測モードは、現在のブロックの動き情報を決定するための様々な技術を表し、当該インター予測モードは、並進(Translation)動き情報を使用するインター予測モードと、アフィン(Affine)動き情報を使用するインター予測モードを含み得る。一例として、並進動き情報を使用するインター予測モードは、マージモード及びモーションベクトル予測モードを含み、アフィン動き情報を使用するインター予測モードは、アフィンマージモード及びアフィンモーションベクトル予測モードを含み得る。インター予測モードに従って、現在のブロックに隣接する隣接ブロック又はビットストリームから解析された情報に基づき、現在のブロックの動き情報を決定することができる。
以下、アフィン動き情報を使用するインター予測方法について詳しく説明する。
図7は、オブジェクトの非線形の動きを示す図面である。
映像内の物体の動きは非線形の動きである可能性がある。一例として、図7に示された例のように、ズームイン(Zoom-in)、ズームアウト(Zoom-out)、回転(Rotation)又はアフィン変換などオブジェクトの非線形の動きが発生することができる。オブジェクトの非線形の動きが発生した場合、並進動きベクトルでオブジェクトの動きを効果的に表すことができない。これにより、オブジェクトの非線形の動きが発生した部分では、並進動きの代わりにアフィン動きを使用することにより、符号化効率を向上させることができる。
図8は、本発明の実施例に係る、アフィンモーションに基づくインター予測方法のフローチャートである。
ビットストリームから解析された情報に基づいて、アフィンモーションに基づくインター予測技術を現在のブロックに適用するかどうかを決定することができる。具体的に、現在のブロックにアフィンマージモードが適用されるかどうかを表すフラグ、又は現在のブロックにアフィンモーションベクトル予測モードが適用されるかどうかを表すフラグのうちの少なくとも1つに基づいて、アフィンモーションに基づくインター予測技術が現在のブロックに適用されるかどうかを決定することができる。
アフィンモーションに基づくインター予測技術が現在のブロックに適用される場合、現在のブロックのアフィンモーションモデルを決定することができる(ステップS801)。アフィンモーションモデルは、6パラメータアフィンモーションモデル又は4パラメータアフィンモーションモデルのうちの少なくとも1つによって決定されることができる。6パラメータアフィンモーションモデルは、6つのパラメータを使用してアフィンモーションを表し、4パラメータアフィンモーションモデルは、4つのパラメータを使用してアフィンモーションを表す。
式1は、6パラメータを使用してアフィンモーションを表したものである。アフィンモーションは、アフィンシードベクトルによって決定される所定の領域に対する並進動きを表す。
6つのパラメータを使用してアフィンモーションを表す場合、複雑な動きを表すことができるが、各パラメータを符号化するのに必要なビット数が多くなって符号化効率が低下する可能性がある。これにより、4つのパラメータを使用してアフィンモーションを表すこともできる。式2は、4パラメータを使用してアフィンモーションを表したものである。
現在のブロックのアフィンモーションモデルを決定するための情報を符号化することができ、ビットストリームを介してシグナリングされることができる。一例として、前記情報は、1ビットのフラグ「affine_type_flag」であってもよい。前記フラグの値が0であることは、4パラメータアフィンモーションモデルが適用されることを表し、前記フラグの値が1であることは、6パラメータアフィンモーションモデルが適用されることを表すことができる。前記フラグは、スライス(slice)、タイル(tile)又はブロック(例えば、符号化ブロック又は符号化ツリーユニットなど)を単位として符号化されることができる。スライスレベルでフラグがシグナリングされる場合、前記スライスレベルによって決定されたアフィンモーションモデルは、前記スライスに属するブロックの全てに適用することができる。
又は、現在のブロックのアフィンインター予測モードに基づいて、現在のブロックのアフィンモーションモデルを決定することができる。一例として、アフィンマージモードが適用される場合、現在のブロックのアフィンモーションモデルを4パラメータモーションモデルとして決定することができる。もう一方では、アフィンモーションベクトル予測モードが適用される場合、現在のブロックのアフィンモーションモデルを決定するための情報を符号化し、ビットストリームを介してシグナリングされることができる。一例として、現在のブロックにアフィンモーションベクトル予測モードが適用される場合、1ビットのフラグ「affine_type_flag」に基づいて、現在のブロックのアフィンモーションモデルを決定することができる。
次に、現在のブロックのアフィンシードベクトルを導出することができる(ステップS802)。4パラメータアフィンモーションモデルが選択された場合、現在のブロックの2つのコントロールポイントでのモーションベクトルを導出することができる。もう一方では、6パラメータアフィンモーションモデルが選択された場合、現在のブロックの3つのコントロールポイントでのモーションベクトルを導出することができる。コントロールポイントでのモーションベクトルをアフィンシードベクトルと称することができる。コントロールポイントは、現在のブロックの左上コーナー、右上コーナー又は左下コーナーのうちの少なくとも1つを含み得る。
図9は、アフィンモーションモデル別のアフィンシードベクトルを示す図面である。
4パラメータアフィンモーションモデルでは、左上コーナー、右上コーナー又は左下コーナーのうちの2つに対するアフィンシードベクトルを導出することができる。一例として、図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アフィンシードベクトルのうちの少なくとも1つを左下コントロールポイントのアフィンシードベクトル(第3アフィンシードベクトル)又は右下コントロールポイントのアフィンシードベクトル(第4アフィンシードベクトル)に置き換えることができる。
また、6パラメータアフィンモーションモデルの下で、左上コントロールポイント、右上コントロールポイント及び左下コントロールポイントのアフィンシードベクトルをそれぞれ第1アフィンシードベクトル、第2アフィンシードベクトル及び第3アフィンシードベクトルと称するようにする。後述される第1アフィンシードベクトル、第2アフィンシードベクトル及び第3アフィンシードベクトルを使用する実施例において、第1アフィンシードベクトル、第2アフィンシードベクトル及び第3アフィンシードベクトルのうちの少なくとも1つを右下コントロールポイントのアフィンシードベクトル(第4アフィンシードベクトル)に置き換えることができる。
アフィンシードベクトルを使用して、サブブロックごとに、アフィンベクトルを導出することができる(ステップS803)。ここで、アフィンベクトルは、アフィンシードベクトルに基づいて導出される並進モーションベクトルを表す。サブブロックのアフィンベクトルをアフィンサブブロックモーションベクトル又はサブブロックモーションベクトルと称することができる。
図10は、4パラメータモーションモデルの下でのサブブロックのアフィンベクトルを示す図面である。
コントロールポイントの位置、サブブロックの位置及びアフィンシードベクトルに基づいて、サブブロックのアフィンベクトルを導出することができる。一例として、式3は、アフィンサブブロックベクトルを導出する例を表す。
上記の式3では、(x,y)はサブブロックの位置を表す。ここで、サブブロックの位置は、サブブロックに含まれた基準サンプルの位置を表す。基準サンプルは、サブブロックの左上コーナーに位置するサンプル、又はx軸又はy軸座標のうちの少なくとも1つが中央位置にあるサンプルであってもよい。(x0,y0)は、第1コントロールポイントの位置を表し、(sv0x,sv0y)は、第1アフィンシードベクトルを表す。また、(x1,y1)は、第2コントロールポイントの位置を表し、(sv1x,sv1y)は、第2アフィンシードベクトルを表す。
第1コントロールポイント及び第2コントロールポイントがそれぞれ、現在のブロックの左上コーナー及び右上コーナーに対応する場合に対応する場合、x1-x0は、現在のブロックの幅と同じ値に設定することができる。
そして、各サブブロックのアフィンベクトルを使用して、各サブブロックに対する動き補償予測を実行することができる(ステップS804)。動き補償予測が実行された結果、各サブブロックに対する予測ブロックを生成することができる。サブブロックの予測ブロックを現在のブロックの予測ブロックに設定することができる。
以下、並進動き情報を使用するインター予測方法について詳しく説明する。
現在のブロックの他のブロックの動き情報から現在のブロックの動き情報を導出することができる。ここで、他のブロックは、現在のブロックよりも先にインター予測で符号化/復号化されたブロックであってもよい。現在のブロックの動き情報を他のブロックの動き情報と同じように設定することをマージモードと定義することができる。また、他のブロックの動きベクトルを現在のブロックの動きベクトルの予測値に設定することをモーションベクトル予測モードと定義することができる。
図11は、マージモードの下で、現在のブロックの動き情報を導出するプロセスのフローチャートである。
現在のブロックのマージ候補を導出することができる(ステップS1101)。現在のブロックのマージ候補は、現在のブロックよりも先にインター予測で符号化/復号化されたブロックから導出されることができる。
図12は、マージ候補を導出するための候補ブロックを示す図面である。
候補ブロックは、現在のブロックに隣接するサンプルを含む隣接ブロック又は現在のブロックに隣接しないサンプルを含む非隣接ブロックのうちの少なくとも1つを含み得る。以下、候補ブロックを決定するサンプルを基準サンプルと定義する。また、現在のブロックに隣接する基準サンプルを隣接基準サンプルと呼称し、現在のブロックに隣接しない基準サンプルを非隣接基準サンプルと称することにする。
隣接基準サンプルは、現在のブロックの最左側の列に隣接する列又は現在のブロックの最上行に隣接する行を含み得る。一例として、現在のブロックの左上のサンプルの座標が(0,0)である場合、(-1,H-1)位置の基準サンプルを含むブロック、(W-1、-1)位置の基準サンプルを含むブロック、(W,-1)の位置の基準サンプルを含むブロック、(-1,H)位置の基準サンプルを含むブロック又は(-1,-1)位置の基準サンプルを含むブロックのうちの少なくとも1つが候補ブロックとして使用することができる。図面を参照すると、インデックス0ないしインデックス4の隣接ブロックは、候補ブロックとして使用されることができる。
非隣接基準サンプルは、現在のブロックに隣接する基準サンプルとのx軸距離又はy軸距離のうちの少なくとも1つが事前に定義された値を有するサンプルを表す。一例として、左側基準サンプルとのx軸距離が事前に定義された値である基準サンプルを含むブロック、上部基準サンプルとのy軸距離が事前に定義された値である非隣接サンプルを含むブロック、又は左上基準サンプルとのx軸距離及びy軸距離が事前に定義された値である非隣接サンプルを含むブロックのうちの少なくとも1つを候補ブロックとして使用することができる。事前に定義された値は、4、8、12、16などの自然数であってもよい。図面を参照すると、インデックス5ないし26のブロックのうちの少なくとも1つは、候補ブロックとして使用されることができる。
隣接基準サンプルと同じ垂直線、水平線又は対角線に位置していないサンプルを非隣接基準サンプルとして設定することができる。
図13は、基準サンプルの位置の図面である。
図13に示された例のように、上部非隣接基準サンプルのx座標は、上部隣接基準サンプルのx座標とは異なるように設定することができる。一例として、上部隣接基準サンプルの位置が(W-1,-1)である場合、上部隣接基準サンプルからy軸にNだけ離れた上部非隣接基準サンプルの位置は((W/2)-1,-1-N)に設定され、上部隣接基準サンプルからy軸に2Nだけ離れた上部非隣接基準サンプルの位置は(0,-1-2N)に設定されることができる。即ち、隣接基準サンプルの位置と隣接基準サンプルとの距離に基づいて、非隣接基準サンプルの位置を決定することができる。
以下、候補ブロックのうち、隣接基準サンプルを含む候補ブロックを隣接ブロックと呼称し、非隣接基準サンプルを含むブロックを非隣接ブロックと称することにする。
現在のブロックと候補ブロックの間の距離が閾値より大きいか等しい場合、前記候補ブロックは、マージ候補として利用不可能であると設定することができる。前記閾値は、符号化ツリーユニットのサイズに基づいて、決定されることができる。一例として、閾値は、符号化ツリーユニットの高さ(ctu_height)又は符号化ツリーユニットの高さからオフセットを加算又は減算した値(例えば、ctu_height±N)に設定されることができる。オフセットNは、符号化器及び復号化器によって事前に定義された値であり、4、8、16、32又はctu_heightに設定されることができる。
現在のブロックのy軸座標と候補ブロックに含まれたサンプルのy軸座標との間の差分が閾値よりも大きい場合、候補ブロックはマージ候補として利用不可能であると決定することができる。
又は、現在のブロックと同じ符号化ツリーユニットに属しない候補ブロックはマージ候補として利用不可能であると設定することができる。一例として、基準サンプルが、現在のブロックが属する符号化ツリーユニットの上部境界を超えている場合、前記基準サンプルを含む候補ブロックはマージ候補として利用不可能であると設定することができる。
現在のブロックの上部境界が符号化ツリーユニットの上部境界に隣接する場合、多数の候補ブロックはマージ候補として利用不可能であると決定され、現在のブロックの符号化/復号化効率が低下する可能性がある。上記の問題を解決するために、現在のブロックの上部に位置する候補ブロックの数よりも、現在のブロックの左側に位置する候補ブロックの数がより多くなるように候補ブロックを設定することができる。
図14は、マージ候補を導出するための候補ブロックを示す図面である。
図14に示された例のように、現在のブロックの上部N個のブロック列に属する上部ブロック及び現在のブロックの左側M個のブロック列に属する左側ブロックを候補ブロックに設定することができる。この場合、NよりもMを大きく設定して、上部候補ブロックの数よりも左側候補ブロックの数を大きく設定することができる。
一例として、現在のブロック内の基準サンプルのy軸座標と候補ブロックとして使用することができる上部ブロックのy軸座標の差分が、現在のブロックの高さのN倍を超えないように設定することができる。また、現在のブロック内の基準サンプルのx軸座標と候補ブロックとして使用することができる左側ブロックのx軸座標の差分が、現在のブロックの幅のM倍を超えないように設定することができる。
一例として、図14に示された例では、現在のブロックの上部の2つのブロック列に属するブロック及び現在のブロックの左側の5つのブロック列に属するブロックが候補ブロックに設定されていることが示されている。
別の例として、候補ブロックが現在のブロックと同じ符号化ツリーユニットに属しない場合、前記候補ブロックの代わりに、現在のブロックと同じ符号化ツリーユニットに属するブロック又は前記符号化ツリーユニットの境界に隣接する基準サンプルを含むブロックを使用してマージ候補を導出することができる。
図14は、マージ候補を導出するための候補ブロックを示す図面である。
基準サンプルは、現在のブロックとは異なる符号化ツリーユニットに含まれ、前記基準サンプルが前記符号化ツリーユニットの境界に隣接しない場合、前記基準サンプルの代わりに前記符号化ツリーユニットの境界に隣接する基準サンプルを使用して候補ブロックを決定することができる。
一例として、図15の(a)及び(b)に示された例では、現在のブロックの上部境界と符号化ツリーユニットの上部境界が接する場合、現在のブロックの上部の基準サンプルは、現在のブロックとは異なる符号化ツリーユニットに属する。現在のブロックと異なる符号化ツリーユニットに属する基準サンプルのうち、符号化ツリーユニットの上部境界に隣接しない基準サンプルを符号化ツリーユニットの上部境界に隣接するサンプルに置き換えることができる。
一例として、図15の(a)に示された例のように、位置6にある基準サンプルを符号化ツリーユニットの上部境界に位置する位置6′にあるサンプルに置き換え、図15の(b)に示された例のように、位置15にある基準サンプルを符号化ツリーユニットの上部境界に位置する位置15′にあるサンプルに置き換えることができる。この場合、代替サンプルのy座標は、符号化ツリーユニットの隣接位置に偏向され、代替サンプルのx座標は、基準サンプルと同じように設定することができる。一例として、位置6′にあるサンプルは、位置6にあるサンプルと同じx座標を有し、位置15′にあるサンプルは、位置15にあるサンプルと同じx座標を有することができる。
又は、基準サンプルのx座標からオフセットを加算又は減算したものを代替サンプルのx座標に設定することができる。一例として、現在のブロックの上部に位置する隣接基準サンプルと非隣接基準サンプルのx座標が同じである場合、基準サンプルのx座標からオフセットを加算又は減算したものを代替サンプルのx座標に設定することができる。これは、非隣接基準サンプルを置き換える代替サンプルが、他の非隣接基準サンプル又は隣接基準サンプルと同じ位置になることを回避するためである。
図16は、基準サンプルの位置が変更される例を示す図面である。
現在のブロックとは異なる符号化ツリーユニットに含まれ、符号化ツリーユニットの境界に隣接しない基準サンプルを符号化ツリーユニットの境界に位置するサンプルに置き換える場合、基準サンプルのx座標からオフセットを加算又は減算した値を代替サンプルのx座座標に設定することができる。
一例として、図16に示された例では、位置6にある基準サンプル及び位置15にある基準サンプルはそれぞれ、符号化ツリーユニットの上部境界に隣接する行と同じy座標を有する、位置6′にあるサンプル及び位置15′にあるサンプルに置き換えられることができる。この場合、位置6′にあるサンプルのx座標は、位置6にある基準サンプルのx座標からW/2を差分した値に設定され、位置15′にあるサンプルのx座標は、位置15にある基準サンプルのx座標からW-1を差分した値に設定されることができる。
図15及び図16に示された例とは異なり、現在のブロックの最上部の行の上部に位置する行のy座標、又は符号化ツリーユニットの上部境界のy座標を代替サンプルのy座標に設定することもできる。
図示されていないが、符号化ツリーユニットの左側の境界に基づいて、基準サンプルを置き換えるサンプルを決定することもできる。一例として、基準サンプルが現在のブロックと同じ符号化ツリーユニットに含まれず、符号化ツリーユニットの左側の境界に隣接もしない場合、前記基準サンプルを符号化ツリーユニットの左側の境界に隣接するサンプルに置き換えることができる。この場合、代替サンプルは、基準サンプルと同じy座標を有するか、基準サンプルのy座標からオフセットを加算又は差分して得られたy座標を有することができる。
その後、代替サンプルを含むブロックを候補ブロックに設定し、前記候補ブロックに基づいて現在のブロックのマージ候補を導出することができる。
現在のブロックとは異なる画像に含まれた時間的隣接ブロックからマージ候補を導出することもできる。一例として、同位置画像に含まれた同位置ブロックからマージ候補を導出することができる。
マージ候補の動き情報は、候補ブロックの動き情報と同じように設定することができる。一例として、候補ブロックのモーションベクトル、参照画像インデックス、予測方向又は両方向の重み値インデックスのうちの少なくとも1つをマージ候補の動き情報に設定することができる。
マージ候補を含むマージ候補リストを生成することができる(ステップS1102)。前記マージ候補は、現在のブロックに隣接する隣接ブロックから導出された隣接マージ候補及び非隣接ブロックから導出される非隣接マージ候補に区分されることができる。
所定の順序に従って、マージ候補リスト内の複数のマージ候補のインデックスを割り当てることができる。一例として、隣接マージ候補に割り当てられるインデックスは、非隣接マージ候補に割り当てられるインデックスよりも小さい値を有する。又は、図12又は図14に示された各ブロックのインデックスに基づいて、マージ候補のそれぞれにインデックスを割り当てることができる。
マージ候補に複数のマージ候補が含まれている場合、複数のマージ候補のうちの少なくとも1つを選択することができる(ステップS1103)。この場合、ビットストリームを介して、現在のブロックの動き情報が隣接マージ候補から導出されるかどうかを表す情報をシグナリングすることができる。前記情報は、1ビットのフラグであってもよい。一例として、ビットストリームを介して、現在のブロックの動き情報が隣接マージ候補から導出されるかどうかを表すシンタックス要素isAdjancentMergeFlagをシグナリングすることができる。シンタックス要素isAdjancentMergeFlagの値が1である場合、隣接マージ候補に基づいて、現在のブロックの動き情報を導出することができる。もう一方では、シンタックス要素isAdjancentMergeFlagの値が0である場合、非隣接マージ候補に基づいて、現在のブロックの動き情報を導出することができる。
表1は、シンタックス要素isAdjancentMergeFlagを含むシンタックステーブルを示す。
ビットストリームを介して、複数のマージ候補のいずれか1つを特定するための情報をシグナリングすることができる。一例として、ビットストリームを介して、マージ候補リストに含まれたマージ候補のいずれか1つのインデックスを表す情報をシグナリングすることができる。
isAdjacentMergeflagが1である場合、隣接マージ候補のいずれかを特定するためのシンタックス要素merge_idxをシグナリングすることができる。シンタックス要素merge_idxの最大値は、隣接マージ候補の数から1を差分した値に設定されることができる。
isAdjacentMergeflagが0である場合、非隣接マージ候補のいずれかを特定するためのシンタックス要素NA_merge_idxをシグナリングすることができる。シンタックス要素NA_merge_idxは、非隣接マージ候補のインデックスから隣接マージ候補の数を差分した値を表す。復号化器は、NA_merge_idxによって特定されたインデックスに隣接マージ候補の数を加えることにより、非隣接マージ候補を選択することができる。
マージ候補リストに含まれたマージ候補の数が閾値よりも小さい場合、インター領域モーション情報テーブルに含まれたマージ候補をマージ候補リストに追加することができる。ここで、閾値は、マージ候補リストが含むことができる最大マージ候補の数又は最大マージ候補の数からオフセットを差し引いた値であってもよい。オフセットは、1又は2などの自然数であってもよい。インター領域モーション情報テーブルは、現在のブロックの前に符号化/復号化されたブロックに基づいて導出されたマージ候補を含み得る。
インター領域モーション情報テーブルは、現在の画像でのインター予測に基づいて符号化/復号化されたブロックから導出されるマージ候補を含む。一例として、インター領域モーション情報テーブルに含まれたマージ候補の動き情報は、インター予測に基づいて符号化/復号化されたブロックの動き情報と同じように設定することができる。ここで、動き情報は、モーションベクトル、参照画像インデックス、予測方向又は両方向の重み値インデックスのうちの少なくとも1つを含み得る。
説明の便宜上、インター領域モーション情報テーブルに含まれたマージ候補をインター領域マージ候補と称することにする。
インター領域モーション情報テーブルが含むことができる最大マージ候補の数は、符号化器及び復号化器によって事前に定義されてもよい。一例として、インター領域モーション情報テーブルが含むことができる最大マージ候補の数は、1、2、3、4、5、6、7、8又はそれ以上(例えば、16)であってもよい。
あるいは、ビットストリームを介して、インター領域モーション情報テーブルの最大マージ候補の数を表す情報をシグナリングすることができる。前記情報は、シーケンス、画像、又はスライスレベルでシグナリングされることができる。
又は、画像のサイズ、スライスのサイズ又は符号化ツリーユニットのサイズに従って、インター領域モーション情報テーブルの最大マージ候補の数を決定することができる。
インター領域モーション情報テーブルは、画像、スライス、タイル、ブリック、符号化ツリーユニット、又は符号化ツリーユニットライン(行又は列)単位で初期化されることができる。一例として、スライスが初期化される場合、インター領域モーション情報テーブルも初期化され、インター領域モーション情報テーブルには、マージ候補が含まれない場合がある。
又は、ビットストリームを介して、インター領域モーション情報テーブルを初期化するかどうかを表す情報をシグナリングすることもできる。前記情報は、スライス、タイル、ブリック又はブロックレベルでシグナリングされることができる。前記情報がインター領域モーション情報テーブルを初期化することを指示する前に、事前に構成されたインター領域モーション情報テーブルを使用することができる。
又は、画像パラメータセット又はスライスヘッダを介して初期インター領域マージ候補に対する情報がシグナリングされることができる。スライスが初期化されても、インター領域モーション情報テーブルは、初期インター領域マージ候補を含み得る。これにより、スライス内の最初の符号化/復号化態様であるブロックにも、インター領域マージ候補を使用することができる。
符号化/復号化順序に従って、ブロックを符号化/復号化するが、インター予測に基づいて符号化/復号化されたブロックを符号化/復号化順序に従って順次にインター領域マージ候補として設定することができる。
図17は、インター領域モーション情報テーブルの更新状態を説明するためのフローチャートである。
現在のブロックに対してインター予測を行った場合(ステップS1701)、現在のブロックに基づいてインター領域マージ候補を導出することができる(ステップS1702)。インター領域マージ候補の動き情報は、現在のブロックの動き情報と同じように設定することができる。
インター領域モーション情報テーブルが空の場合(ステップS1703)、現在のブロックに基づいて導出されたインター領域マージ候補をインター領域モーション情報テーブルに追加することができる(ステップS1704)。
インター領域モーション情報テーブルが既にインター領域マージ候補を含めている場合(ステップS1703)、現在のブロックの動き情報(又は、これに基づいて導出されたインター領域マージ候補)に対する冗長性検出を実行することができる(ステップS1705)。冗長性検出は、インター領域モーション情報テーブルに記憶されたインター領域マージ候補の動き情報と現在のブロックの動き情報が同じであるか否かを決定するために使用される。冗長性検出は、インター領域モーション情報テーブルに記憶された全てのインター領域マージ候補を対象として実行することができる。又は、インター領域モーション情報テーブルに記憶されたインター領域マージ候補のうち、インデックスが閾値以上であり又は閾値以下であるインター領域マージ候補を対象として冗長性検出を実行することができる。
現在のブロックの動き情報と同じ動き情報を有するインター予測マージ候補が含まれていない場合、現在のブロックに基づいて導出されたインター領域マージ候補をインター領域モーション情報テーブルに追加することができる(ステップS1708)。インター予測マージ候補の動き情報(例えば、モーションベクトル及び/又は参照画像インデックスなど)が同じであるか否かに基づいて、インター予測マージ候補が同じであるか否かを決定することができる。
この場合、インター領域モーション情報テーブルに最大数のインター領域マージ候補が記憶されている場合(ステップS1706)、最も古いインター領域マージ候補を削除し(ステップS1707)、現在のブロックに基づいて導出されたインター領域マージ候補をインター領域モーション情報テーブルに追加することができる(ステップS1708)。
インター領域マージ候補は、それぞれのインデックスによって識別されることができる。現在のブロックから導出されたインター領域マージ候補がインター領域モーション情報テーブルに追加される場合、前記インター領域マージ候補に最も低いインデックス(例えば、0)を割り当て、記憶されたインター領域マージ候補のインデックスを1ずつ増加させることができる。この場合、インター領域モーション情報テーブルに最大数のインター予測マージ候補が既に記憶されている場合、最も大きいインデックスを有するインター領域マージ候補が除去される。
又は、現在のブロックから導出されたインター領域マージ候補がインター領域モーション情報テーブルに追加される場合、前記インター領域マージ候補に最も大きいインデックスを割り当てることができる。一例として、インター領域モーション情報テーブルに記憶されたインター予測マージ候補の数が最大値より小さい場合、前記インター領域マージ候補には、記憶されたインター予測マージ候補の数と同じ値のインデックスが割り当てられることができる。又は、インター領域モーション情報テーブルに記憶されたインター予測マージ候補の数が最大値と同じ場合、前記インター領域マージ候補には、最大値から1を差し引いたインデックスが割り当てられることができる。また、最も小さいインデックスを有するインター領域マージ候補が除去され、残りの記憶されたインター領域マージ候補のインデックスが1ずつ減少することになる。
図18は、インター領域マージ候補リストを更新する実施例を示す図面である。
現在のブロックから導出されたインター領域マージ候補をインター領域マージ候補テーブルに追加し、前記インター領域マージ候補に最も大きいインデックスを割り当てると仮定する。また、インター領域マージ候補テーブルには、最大数のインター領域マージ候補が既に記憶されていると仮定する。
現在のブロックから導出されたインター領域マージ候補HmvpCand[n+1]をインター領域マージ候補テーブルHmvpCandListに追加する場合、記憶されたインター領域マージ候補のうち、最も小さいインデックスを有するインター領域マージ候補HmvpCand[0]を削除し、残りのインター領域マージ候補のインデックスを1ずつ減少させることができる。また、現在のブロックから導出されたインター領域マージ候補HmvpCand[n+1]のインデックスを最大値(図18に示された例では、n)に設定することができる。
現在のブロックに基づいて導出されたインター領域マージ候補と同じインター領域マージ候補が記憶されている場合(ステップS1705)、現在のブロックに基づいて導出されたインター領域マージ候補をインター領域モーション情報テーブルに追加しないことができる(ステップS1709)。
又は、現在のブロックに基づいて導出されたインター領域マージ候補をインター領域モーション情報テーブルに追加しつつ、前記インター領域マージ候補と同じである、記憶されたインター領域マージ候補を除去することもできる。この場合、記憶されたインター領域マージ候補のインデックスが新たに更新されるのと同じ効果が生じている。
図19は、記憶されたインター領域マージ候補のインデックスが更新される例を示す図面である。
現在のブロックに基づいて導出されたインター領域マージ候補mvCandと同じである、記憶されたインター予測マージ候補のインデックスがhIdxである場合、前記記憶されたインター予測マージ候補を削除し、インデックスがhIdxよりも大きいインター予測マージ候補のインデックスを1ずつ減少させることができる。一例として、図19に示された例ではmvCandと同じHmvpCand[2]がインター領域モーション情報テーブルHvmpCandListから削除され、HmvpCand[3]からHmvpCand[n]までのインデックスが1ずつ減少することが示されている。
そして、現在のブロックに基づいて導出されたインター領域マージ候補mvCandをインター領域モーション情報テーブルの最後に追加することができる。
又は、現在のブロックに基づいて導出されたインター領域マージ候補と同じである、記憶されたインター領域マージ候補に割り当てされたインデックスを更新することができる。例えば、記憶されたインター領域マージ候補のインデックスを最小値又は最大値に変更することができる。
所定の領域に含まれたブロックの動き情報は、インター領域モーション情報テーブルに追加されないように設定されることができる。一例として、マージ処理領域に含まれたブロックの動き情報に基づいて導出されるインター領域マージ候補は、インター領域モーション情報テーブルに追加されないことができる。マージ処理領域に含まれたブロックについては、符号化/復号化順序が定義されていないため、これらのブロックのいずれかの動き情報を他のブロックのインター予測に使用することは不適切である。これにより、マージ処理領域に含まれたブロックに基づいて導出されたインター領域マージ候補をインター領域モーション情報テーブルに追加しないことができる。
サブブロック単位で動き補償予測が実行された場合、現在のブロックに含まれた複数のサブブロックの中の代表サブブロックの動き情報に基づいて、インター領域マージ候補を導出することができる。一例として、現在のブロックに対してサブブロックマージ候補が使用された場合、サブブロックのうちの代表サブブロックの動き情報に基づいて、インター領域マージ候補を導出することができる。
サブブロックの動きベクトルは、以下の順序に応じて導出されることができる。先ず、現在のブロックのマージ候補リストに含まれたマージ候補のうちのいずれか1つを選択し、選択されたマージ候補のモーションベクトルに基づいて、初期シフトベクトル(shVector)を導出することができる。そして、符号化ブロックの各サブブロックの基準サンプル(例えば、左上のサンプル又は中央位置にあるサンプル)の位置(xSb,ySb)に初期シフトベクトルを加算して、基準サンプルの位置が(xColSb,yColSb)であるシフトサブブロックを導出することができる。以下の式4は、シフトサブブロックを導出するための式を表す。
そして、(xColSb,yColSb)を含むサブブロックの中心位置に対応する同位置ブロックのモーションベクトルを、(xSb,ySb)を含むサブブロックのモーションベクトルに設定することができる。
代表サブブロックは、現在のブロックの左上のサンプル又は中央サンプルを含むサブブロックを意味することができる。
図20は、代表サブブロックの位置を示す図面である。
図20の(a)は、現在のブロックの左上に位置するサブブロックが代表サブブロックに設定された例を示し、図20の(b)は、現在のブロックの中央に位置するサブブロックが代表サブブロックに設定された例を示す。サブブロック単位で動き補償予測が実行された場合、現在のブロックの左上のサンプルを含むサブブロック又は現在のブロックの中央サンプルを含むサブブロックの動きベクトルに基づいて、現在のブロックのインター領域マージ候補を導出することができる。
現在のブロックのインター予測モードに基づいて、現在のブロックをインター領域マージ候補として使用するかどうかを決定することもできる。一例として、アフィンモーションモデルに基づいて符号化/復号化されたブロックは、インター領域マージ候補として利用不可能であると設定することができる。これにより、現在のブロックがインター予測で符号化/復号化されたとしても、現在のブロックのインター予測モードがアフィン予測モードである場合には、現在のブロックに基づいてインター予測モーション情報テーブルを更新しないことができる。
又は、アフィンモーションモデルに基づいて符号化/復号化されたブロックに含まれたサブブロックのうちの少なくとも1つのサブブロックベクトルに基づいて、インター領域マージ候補を導出することもできる。一例として、現在のブロックの左上に位置するサブブロック、中央に位置するサブブロック又は右上に位置するサブブロックを使用してインター領域マージ候補を導出することができる。又は、複数のサブブロックのサブブロックベクトルの平均値をインター領域マージ候補の動きベクトルに設定することもできる。
又は、アフィンモーションモデルに基づいて符号化/復号化されたブロックのアフィンシードベクトルの平均値に基づいてインター領域マージ候補を導出することもできる。一例として、現在のブロックの第1アフィンシードベクトル、第2アフィンシードベクトル又は第3アフィンシードベクトルのうちの少なくとも1つの平均値をインター領域マージ候補の動きベクトルに設定することができる。
又は、インター予測モードごとにインター領域モーション情報テーブルを構成することができる。一例として、イントラブロックコピーにより符号化/復号化されたブロックのためのインター領域モーション情報テーブル、並進モーションモデルに基づいて符号化/復号化されたブロックのためのインター領域モーション情報テーブル又はアフィンモーションモデルに基づいて符号化/復号化されたブロックのためのインター領域モーション情報テーブルのうちの少なくとも1つを定義することができる。現在のブロックのインター予測モードに従って、複数のインター領域モーション情報テーブルのいずれか1つを選択することができる。
図21は、インター予測モード別にインター領域モーション情報テーブルが生成される例を示す図面である。
ブロックがノンアファインモーションモデルに基づいて符号化/復号化された場合、前記ブロックに基づいて導出されたインター領域マージ候補mvCandは、インター領域ノンアファインモーション情報テーブルHmvpCandListに追加することができる。もう一方では、ブロックがアフィンモーションモデルに基づいて符号化/復号化された場合、前記ブロックに基づいて導出されたインター領域マージ候補mvAfCandをインター領域アフィンモーション情報テーブルHmvpAfCandListに追加することができる。
アフィンモーションモデルに基づいて符号化/復号化されたブロックから導出されるインター領域マージ候補には、前記ブロックのアフィンシードベクトルが記憶されることができる。これにより、前記インター領域マージ候補を、現在のブロックのアフィンシードベクトルを導出するためのマージ候補として使用することができる。
説明したインター領域モーション情報テーブルに加えて、さらに別のインター領域モーション情報テーブルを定義することもできる。上記の説明したインター領域モーション情報テーブル(以下、第1インター領域モーション情報テーブルと呼ぶ)に加えて、ロングタームモーション情報テーブル(以下、第2インター領域モーション情報テーブルと呼ぶ)を定義することができる。ここで、ロングタームモーション情報テーブルは、ロングタームマージ候補を含む。
第1インター領域モーション情報テーブル及び第2インター領域モーション情報テーブルが空の場合、先ず、第2インター領域モーション情報テーブルにインター領域マージ候補を追加することができる。第2インター領域モーション情報テーブルに利用可能なインター領域マージ候補の数が最大数に達した後のみ、第1インター領域モーション情報テーブルにインター領域マージ候補を追加することができる。
又は、1つのインター予測マージ候補を第2インター領域モーション情報テーブル及び第1インター領域モーション情報テーブルの両方に追加することもできる。
この場合、構成が完了された第2インター領域モーション情報テーブルは、それ以上更新しないことができる。又は、復号化された領域がスライスの所定の比率以上である場合、第2インター領域モーション情報テーブルを更新することができる。又は、N個の符号化ツリーユニットラインごとに第2インター領域モーション情報テーブルを更新することができる。
もう一方では、第1インター領域モーション情報テーブルは、インター予測で符号化/復号化されたブロックが発生するたびに更新されることができる。ただし、第2インター領域モーション情報テーブルに追加されるインター領域マージ候補は、第1インター領域モーション情報テーブルを更新するために使用されないように設定することもできる。
ビットストリームを介して、第1インター領域モーション情報テーブル又は第2インター領域モーション情報テーブルのうちのいずれか1つを選択するための情報をシグナリングすることができる。マージ候補リストに含まれたマージ候補の数が閾値より小さい場合、前記情報が指示するインター領域モーション情報テーブルに含まれたマージ候補をマージ候補リストに追加することができる。
又は、現在のブロックのサイズ、形態、インター予測モード、両方向予測 するかどうか、動きベクトルリファインするかどうか、又は三角分割するかどうか基づいて、インター領域モーション情報テーブルを選択することもできる。
又は、第1インター領域モーション情報テーブルに含まれたインター領域マージ候補を追加にもかかわらず、マージ候補リストに含まれたマージ候補の数が最大マージ数より小さい場合、第2インター領域モーション情報テーブルに含まれたインター領域マージ候補をマージ候補リストに追加することができる。
図22は、ロングタームモーション情報リストに含まれたインター領域マージ候補がマージ候補リストに追加される例を示す図面である。
マージ候補リストに含まれたマージ候補の数が最大数より小さい場合、第1インター領域モーション情報テーブルHmvpCandListに含まれたインター領域マージ候補をマージ候補リストに追加することができる。第1インター領域モーション情報テーブルに含まれたインター領域マージ候補をマージ候補リストに追加したにもかかわらず、マージ候補リストに含まれたマージ候補の数が最大数より小さい場合、ロングタームモーション情報テーブルHmvpLTCandListに含まれたインター領域マージ候補をマージ候補リストに追加することができる。
表2は、ロングタームモーション情報テーブルに含まれたインター領域マージ候補をマージ候補リストに追加するプロセスを示す。
インター領域マージ候補が動き情報に加えて、追加情報を含めるように設定することができる。一例として、インター領域マージ候補のブロックのサイズ、形態又はブロックのパーティション情報を追加して記憶することができる。現在のブロックのマージ候補リストを構成する場合、インター予測マージ候補のうち、現在のブロックとサイズ、形態又はパーティション情報が同一又は類似のインター予測マージ候補のみを使用したり、現在のブロックとサイズ、形態又はパーティション情報が同一又は類似のインター予測マージ候補を先ずマージ候補リストに追加することができる。
又は、ブロックのサイズ、形態又はパーティション情報ごとにインター領域モーション情報テーブルを生成することができる。複数のインター領域モーション情報テーブルのうち、現在のブロックの形態、サイズ又はパーティション情報に合致するインター領域モーション情報テーブルを使用して、現在のブロックのマージ候補リストを生成することができる。
現在のブロックのマージ候補リストに含まれたマージ候補の数が閾値より小さい場合、インター領域モーション情報テーブルに含まれたインター領域マージ候補をマージ候補リストに追加することができる。前記追加プロセスは、インデックス基準の昇順又は降順で実行される。一例として、最も大きいインデックスを有するインター領域マージ候補からマージ候補リストに追加することができる。
インター領域モーション情報テーブルに含まれたインター領域マージ候補をマージ候補リストに追加しようとする場合、インター領域マージ候補とマージ候補リストに記憶されたマージ候補との冗長性検出が実行されることができる。
一例として、表3は、インター領域マージ候補がマージ候補リストに追加されるプロセスを示すものである。
冗長性検出は、インター領域モーション情報テーブルに含まれたインター領域マージ候補の一部に対してのみ実行されることもできる。一例として、インデックスが閾値以上又は閾値以下であるインター領域マージ候補に対してのみ冗長性検出が実行されることができる。又は最も大きいインデックスを有するN個のマージ候補又は最も小さいインデックスを有するN個のマージ候補に対してのみ冗長性検出が実行されることができる。
又は、マージ候補リストに記憶されたマージ候補の一部に対してのみ冗長性検出を実行することができる。一例として、インデックスが閾値以上又は閾値以下であるマージ候補又は特定の位置のブロックから導出されたマージ候補に対してのみ冗長性検出が実行されることができる。ここで、特定の位置は、現在のブロックの左側隣接ブロック、上部隣接ブロック、右上隣接ブロック又は左下隣接ブロックのうちの少なくとも1つを含み得る。
図23は、マージ候補のうちの一部に対してのみ冗長検出を実行する例を示す図面である。
インター領域マージ候補HmvpCand[j]をマージ候補リストに追加しようとする場合、インター領域マージ候補に対して、最も大きいインデックスを有する2つのマージ候補mergeCandList[NumMerge-2]とmergeCandList[NumMerge-1]との冗長性検出を実行することができる。ここで、NumMergeは、利用可能な空間マージ候補及び時間マージ候補の数を表す。
図示された例とは異なり、インター領域マージ候補HmvpCand[j]をマージ候補リストに追加しようとする場合、インター領域マージ候補に対して、最も小さいインデックスを有する最大2つのマージ候補との冗長性検出を実行することもできる。例えば、mergeCandList[0]及びmergeCandList[1]についてHmvpCand[j]と同じかどうかを確認することができる。又は特定の位置から導出されたマージ候補に対してのみ冗長性検出を実行することができる。一例として、現在のブロックの左側に位置する周辺ブロックから導出されたマージ候補又は現在のブロックの上部に位置する周辺ブロックから導出されたマージ候補のうちの少なくとも1つに対して冗長性検出を実行することができる。マージ候補リストに特定の位置から導出されたマージ候補が存在しない場合、冗長性検出なしで、インター領域マージ候補をマージ候補リストに追加することができる。
第1インター領域マージ候補と同じマージ候補が発見された場合、第2インター領域マージ候補に対する冗長性検出を実行するとき、前記第1インター領域マージ候補と同じマージ候補との冗長性検出を省略することができる。
図24は、特定のマージ候補との冗長検出を省略する例を示す図面である。
インデックスがiであるインター領域マージ候補HmvpCand[i]をマージ候補リストに追加しようとする場合、前記インター領域マージ候補とマージ候補リストに記憶されたマージ候補との冗長性検出が実行される。この場合、インター領域マージ候補HmvpCand[i]と同じマージ候補mergeCandList[j]が発見された場合、インター領域マージ候補HmvpCand[i]をマージ候補リストに追加せずに、インデックスがi-1であるインター領域マージ候補HmvpCand[i-1]とマージ候補との冗長性検出を実行することができる。この場合、インター領域マージ候補HmvpCand[i-1]とマージ候補mergeCandList[j]との冗長性検出を省略することができる。
一例として、図24に示された例では、HmvpCand[i]とmergeCandList[2]が同じであると決定されている。これにより、HmvpCand[i]はマージ候補リストに追加されず、HmvpCand[i-1]に対する冗長性検出が実行されることができる。この場合、HvmpCand[i-1]とmergeCandList[2]との冗長性検出を省略することができる。
現在のブロックのマージ候補リストに含まれたマージ候補の数が閾値より小さい場合、インター領域マージ候補に加えて、ペアワイズマージ候補又はゼロマージ候補のうちの少なくとも1つをさらに含み得る。ペアワイズマージ候補は、2つ以上のマージ候補の動きベクトルの平均値を動きベクトルとして使用するマージ候補を意味し、ゼロマージ候補は、モーションベクトルが0であるマージ候補を意味する。
現在のブロックのマージ候補リストは、以下の順序に応じて、マージ候補を追加する。
空間マージ候補-時間マージ候補-インター領域マージ候補-(インター領域アフィンマージ候補)-ペアワイズマージ候補-ゼロマージ候補
空間マージ候補は、隣接ブロック又は非隣接ブロックのうちの少なくとも1つから導出されるマージ候補を意味し、時間マージ候補は、以前の参照画像から導出されるマージ候補を意味する。インター領域アフィンマージ候補は、アフィンモーションモデルで符号化/復号化されたブロックから導出されたインター領域マージ候補を表す。
動きベクトル予測モードでも、図インター領域モーション情報テーブルを使用することができる。一例として、現在のブロックの動きベクトル予測候補リストに含まれた動きベクトル予測候補の数が閾値より小さい場合、インター領域モーション情報テーブルに含まれたインター領域マージ候補を現在のブロックに対する動きベクトル予測候補として設定することができる。具体的に、インター領域マージ候補のモーションベクトルを動きベクトル予測候補として設定することができる。
現在のブロックの動きベクトル予測候補リストに含まれた動きベクトル予測候補のいずれか1つを選択すると、選択された候補を現在のブロックの動きベクトル予測値に設定することができる。その後、現在のブロックの動きベクトル残差値を復号化した後、動きベクトル予測値と動きベクトル残差値を加算して現在のブロックの動きベクトルを取得することができる。
現在のブロックの動きベクトル予測候補リストは、以下の順序に応じて、構成されることができる。
空間モーションベクトル予測候補-時間モーションベクトル予測候補-インター復号化領域マージ候補-(インター復号化領域アフィンマージ候補)-ゼロモーションベクトル予測候補
空間モーションベクトル予測候補は、隣接ブロック又は非隣接ブロックのうちの少なくとも1つから導出されるモーションベクトル予測候補を意味し、時間モーションベクトル予測候補は、以前の参照画像から導出されるモーションベクトル予測候補を意味する。インター領域アフィンマージ候補は、アフィンモーションモデルで符号化/復号化されたブロックから導出されたインター領域モーションベクトル予測候補を表す。ゼロモーションベクトル予測候補は、動きベクトルの値が0である候補を表す。
符号化ブロックよりも大きいサイズのマージ処理領域を定義することができる。マージ処理領域に含まれた符号化ブロックは、順次に符号化/復号化されず、並列処理されることができる。ここで、順次に符号化/復号化されないこととは、符号化/復号化順序が定義されていないことを意味する。これにより、マージ処理領域に含まれたブロックの符号化/復号化プロセスを独立して処理することができる。又は、マージ処理領域に含まれたブロックはマージ候補を共有することができる。ここで、マージ候補は、マージ処理領域に基づいて導出されることができる。
上記の特徴に従って、マージ処理領域を、並列処理領域、マージ共有領域(SMR:Shared Merge Region)又はマージ推定領域(MER:Merge Estimation Region)と称することもできる。
現在のブロックのマージ候補は、符号化ブロックに基づいて導出されることができる。ただし、現在のブロックが、現在のブロックよりも大きいサイズのマージ処理領域に含まれた場合、現在のブロックと同じマージ処理領域に含まれた候補ブロックはマージ候補として利用不可能であると設定することができる。
図25は、現在のブロックと同じマージ処理領域に含まれた候補ブロックがマージ候補として利用不可能なものに設定されている例を示す図面である。
図25の(a)に示された例では、CU5を符号化/復号化するとき、CU5に隣接する基準サンプルを含むブロックを候補ブロックに設定することができる。この場合、CU5と同じマージ処理領域に含まれた候補ブロックX3及びX4はCU5のマージ候補として利用不可能であると設定することができる。もう一方では、CU5と同じマージ処理領域に含まれていない候補ブロックX0、X1及びX2はマージ候補として利用可能であると設定することができる。
図25の(b)に示された例では、CU8を符号化/復号化するとき、CU8に隣接する基準サンプルを含むブロックを候補ブロックに設定することができる。この場合、CU8と同じマージ処理領域に含まれた候補ブロックX6、X7及びX8は、マージ候補として利用不可能なものであると設定されることができる。もう一方では、CU8と同じマージ領域に含まれていない候補ブロックX5及びX9は、マージ候補として利用可能であると設定することができる。
マージ処理領域は、正方形又は非正方形であってもよい。ビットストリームを介して、マージ処理領域を決定するための情報をシグナリングすることができる。前記情報は、マージ処理領域の形態を表す情報又はマージ処理領域のサイズを表す情報のうちの少なくとも1つを含み得る。マージ処理領域が非正方形である場合、ビットストリームを介して、マージ処理領域のサイズを表す情報、マージ処理領域の幅及び/又は高さを表す情報又はマージ処理領域の幅と高さとの間の比率を表す情報のうちの少なくとも1つをシグナリングすることができる。
マージ処理領域のサイズは、ビットストリームによってシグナリングされる情報、画像解像度、スライス(slice)のサイズ又はタイル(tile)のサイズのうちの少なくとも1つに基づいて決定されることができる。
マージ処理領域に含まれたブロックに対して動き補償予測を実行すると、動き補償予測が実行されたブロックの動き情報に基づいて導出されたインター領域マージ候補をインター領域モーション情報テーブルに追加することができる。
ただし、マージ処理領域に含まれたブロックから導出されたインター領域マージ候補をインター領域モーション情報テーブルに追加する場合、前記ブロックより実在の符号化/復号化が遅いマージ処理領域内の他のブロックを符号化/復号化するとき、前記ブロックから導出されたインター領域マージ候補を使用する場合がある。即ち、マージ処理領域に含まれたブロックを符号化/復号化するとき、ブロック間の依存性を排除しなければならにもかかわらず、マージ処理領域に含まれた他のブロックの動き情報を使用して動き予測補償を実行する場合がある。上記の問題を解決するために、マージ処理領域に含まれたブロックの符号化/復号化が完了しても、符号化/復号化が完了したブロックの動き情報をインター領域モーション情報テーブルに追加しないことができる。
又は、マージ処理領域に含まれたブロックに対して動き補償予測を実行すると、前記ブロックから導出されたインター領域マージ候補を事前に定義された順序でインター領域モーション情報テーブルに追加することができる。ここで、事前に定義された順序は、マージ処理領域又は符号化ツリーユニット内の符号化ブロックのスキャン順序に従って決定されることができる。前記スキャン順序は、ラスタースキャン、水平スキャン、垂直スキャン又はジグザグスキャンのうちの少なくとも1つであってもよい。又は、事前に定義された順序は、各ブロックの動き情報又は同じ動き情報を有するブロックの数に基づいて決定されることができる。
又は、一方向のモーション情報を含むインター領域マージ候補を、両方向のモーション情報を含むインター領域マージ候補よりも先に、インター領域マージリストに追加することができる。逆に、両方向のモーション情報を含むインター領域マージ候補を、一方向モーション情報を含むインター領域マージ候補よりも先に、インター領域マージ候補リストに追加することができる。
又は、マージ処理領域又は符号化ツリーユニット内での使用頻度が高い順又は使用頻度が低い順に従ってインター領域マージ候補をインター領域モーション情報テーブルに追加することができる。
現在のブロックがマージ処理領域に追加され、現在のブロックのマージ候補リストに含まれたマージ候補の数が最大数より小さい場合、インター領域モーション情報テーブルに含まれたインター領域マージ候補をマージ候補リストに追加することができる。この場合、現在のブロックと同じマージ処理領域に含まれたブロックから導出されたインター領域マージ候補は、現在のブロックのマージ候補リストに追加されないように設定されることができる。
又は、現在のブロックがマージ処理領域に含まれた場合、インター領域モーション情報テーブルに含まれたインター領域マージ候補を使用しないように設定することができる。即ち、現在のブロックのマージ候補リストに含まれたマージ候補の数が最大数より小さい場合であっても、インター領域モーション情報テーブルに含まれたインター領域マージ候補をマージ候補リストに追加しないことができる。
マージ処理領域又は符号化ツリーユニットに対するインター領域モーション情報テーブルを構成することができる。前記インター領域モーション情報テーブルは、マージ処理領域に含まれたブロックのモーション情報を一時的に記憶する役割をする。一般的なインター領域モーション情報テーブルと、マージ処理領域又は符号化ツリーユニットのためのインター領域モーション情報テーブルを区別するために、マージ処理領域又は符号化ツリーユニットのためのインター領域モーション情報テーブルを一時的なモーション情報テーブルと称することにする。さらに、一時的なモーション情報テーブルに記憶されたインター領域マージ候補を一時的なマージ候補と称することにする。
図26は、一時的なモーション情報テーブルを示す図面である。
符号化ツリーユニット又はマージ処理領域のための一時的なモーション情報テーブルを構成することができる。符号化ツリーユニット又はマージ処理領域に含まれた現在のブロックに対して動き補償予測が実行された場合、前記ブロックのモーション情報をインター予測モーション情報テーブルHmvpCandListに追加しないことができる。その代わりに、前記ブロックから導出された一時的なマージ候補を一時的なモーション情報テーブルHmvpMERCandListに追加することができる。即ち、一時的なモーション情報テーブルに追加された一時的なマージ候補は、インター領域モーション情報テーブルに追加されないことができる。これにより、インター領域モーション情報テーブルは、現在のブロックを含む符号化ツリーユニット又はマージ処理領域に含まれたブロックのモーション情報に基づいて導出されたインター領域マージ候補を含まなくてもよい。
一時的なモーション情報テーブルが含むことができるマージ候補の最大数は、インター領域モーション情報テーブルと同じように設定することができる。又は、一時的なモーション情報テーブルが含むことができるマージ候補の最大数は、符号化ツリーユニット又はマージ処理領域のサイズに従って決定されることができる。
符号化ツリーユニット又はマージ処理領域に含まれた現在のブロックは、対応する符号化ツリーユニット又は対応するマージ処理領域に対する一時的なモーション情報テーブルを使用しないように設定することができる。即ち、現在のブロックのマージ候補リストに含まれたマージ候補の数が閾値より小さい場合、インター領域モーション情報テーブルに含まれたインター領域マージ候補をマージ候補リストに追加し、一時的なモーション情報テーブルに含まれた一時的なマージ候補をマージ候補リストに追加しないことができる。これにより、現在のブロックと同じ符号化ツリーユニット又は同じマージ処理領域に含まれた他のブロックの動き情報を現在のブロックの動き補償予測に使用しないことができる。
符号化ツリーユニット又はマージ処理領域に含まれた全てのブロックの符号化/復号化が完了すると、インター領域モーション情報テーブルと一時的なモーション情報テーブルを合併することができる。
図27は、インター領域モーション情報テーブルと一時的なモーション情報テーブルを合併する例を示す図面である。
符号化ツリーユニット又はマージ処理領域に含まれた全てのブロックの符号化/復号化が完了すると、図27に示された例のように、一時的なモーション情報テーブルに含まれた一時的なマージ候補でインター領域モーション情報テーブルを更新することができる。
この場合、一時的なモーション情報テーブルに挿入された順序(即ち、インデックス値の昇順又は降順)に従って、一時的なモーション情報テーブルに含まれた一時的なマージ候補をインター領域モーション情報テーブルに追加することができる。
別の例として、事前に定義された順序に従って、一時的なモーション情報テーブルに含まれた一時的なマージ候補をインター領域モーション情報テーブルに追加することができる。
ここで、事前に定義された順序は、マージ処理領域又は符号化ツリーユニット内の符号化ブロックのスキャン順序に従って決定されることができる。前記スキャン順序は、ラスタースキャン、水平スキャン、垂直スキャン又はジグザグスキャンのうちの少なくとも1つであってもよい。又は、事前に定義された順序は、各ブロックの動き情報又は同じ動き情報を有するブロックの数に基づいて決定されることができる。
又は、一方向のモーション情報を含む一時的なマージ候補を、両方向のモーション情報を含む一時的なマージ候補よりも先に、インター領域マージリストに追加することができる。逆に、両方向のモーション情報を含む一時的なマージ候補を、一方向モーション情報を含む一時的なマージ候補よりも先に、インター領域マージ候補リストに追加することができる。
又は、マージ処理領域又は符号化ツリーユニット内での使用頻度が高い順又は使用頻度が低い順に従って一時的なマージ候補をインター領域モーション情報テーブルに追加することができる。
一時的なモーション情報テーブルに含まれた一時的なマージ候補をインター領域モーション情報テーブルに追加する場合、一時的なマージ候補に対する冗長性検出を実行することができる。一例として、一時的なモーション情報テーブルに含まれた一時的なマージ候補と同じインター領域マージ候補がインター領域モーション情報テーブルに記憶されている場合、前記一時的なマージ候補をインター領域モーション情報テーブルに追加しないことができる。この場合、冗長性検出は、インター領域モーション情報テーブルに含まれたインター領域マージ候補の一部を対象として実行することができる。一例として、インデックスが閾値より大きいか等しいであるインター予測マージ候補を対象として冗長性検出を実行することができる。一例として、一時的なマージ候補が事前に定義された値より大きいか等しいインデックスを有するインター領域マージ候補と同じである場合、前記一時的なマージ候補をインター領域モーション情報テーブルに追加しないことができる。
イントラ予測は、現在のブロックの周辺の符号化/復号化が完了された再構成サンプルを使用して、現在のブロックを予測することである。この場合、現在のブロックのイントラ予測では、インループフィルタが適用される前の再構成サンプルを使用することができる。
イントラ予測技術は、マトリックス(Matrix)に基づくイントラ予測及び周辺の再構成サンプルとの方向性を考慮した一般的なイントラ予測を含む。ビットストリームを介して、現在のブロックのイントラ予測技術を指示する情報をシグナリングすることができる。前記情報は、1ビットのフラグであってもよい。又は、現在のブロックの位置、サイズ、形状又は隣接ブロックのイントラ予測技術のうちの少なくとも1つに基づいて、現在のブロックのイントラ予測技術を決定することができる。一例として、現在のブロックが画像をまたがって存在している場合、現在のブロックには、マトリックスに基づくイントラ予測が適用されないように設定することができる。
マトリックスに基づくイントラ予測は、符号化器及び復号化器に記憶されたマトリックスと、現在のブロックの周辺の再構成サンプルとの間の行列積に基づいて、現在のブロックの予測ブロックを取得する方法である。ビットストリームを介して、記憶された複数のマトリックスのうちのいずれか1つを特定するための情報をシグナリングすることができる。復号化器は、前記情報及び現在のブロックのサイズに基づいて、現在のブロックのイントラ予測のためのマトリックスを決定することができる。
一般的なイントラ予測は、非方向性イントラ予測モード又は方向性イントラ予測モードに基づいて、現在のブロックに対する予測ブロックを取得する方法である。以下、図面を参照して、一般的なイントラ予測に基づくイントラ予測の実行プロセスについてより詳細に説明する。
図28は、本発明の実施例に係るイントラ予測方法のフローチャートである。
現在のブロックの参照サンプルラインを決定することができる(ステップS2801)。参照サンプルラインは、現在のブロックの上部及び/又は左側からk番目離れたラインに含まれた参照サンプルの集合を意味する。現在のブロックの周辺の符号化/復号化が完了された再構成サンプルから参照サンプルを導出することができる。
ビットストリームを介して、複数の参照サンプルラインのうち、現在のブロックの参照サンプルラインを識別するインデックス情報をシグナリングすることができる。複数の参照サンプルラインは、現在のブロックの上部及び/又は左側からの最初の行/列、2番目の行/列、3番目の行/列又は4番目の行/列のうちの少なくとも1つを含み得る。表4は、参照サンプルラインのそれぞれに割り当てられるインデックスを示す。表4では、最初の行/列、2番目の行/列及び4番目の行/列が参照サンプルライン候補を使用すると仮定する。
現在のブロックの位置、サイズ、形態又は隣接ブロックの予測符号化モードのうちの少なくとも1つに基づいて、現在のブロックの参照サンプルラインを決定することもできる。一例として、現在のブロックが画像、タイル、スライス又は符号化ツリーユニットの境界である場合、最初の参照サンプルラインを現在のブロックの参照サンプルラインに決定することができる。
参照サンプルラインは、現在のブロックの上部に位置する上部の参照サンプル及び現在のブロックの左側に位置する左側の参照サンプルを含み得る。現在のブロックの周辺の再構成サンプルから上部の参照サンプル及び左側の参照サンプルを導出することができる。前記再構成サンプルは、インループフィルタが適用される前の状態であってもよい。
図29は、各参照サンプルラインに含まれた参照サンプルの図面である。
現在のブロックのイントラ予測モードに従って、参照サンプルラインに属する参照サンプルのうちの少なくとも1つを使用して、予測サンプルを取得することができる。
次に、現在のブロックのイントラ予測モードを決定することができる(ステップS2802)。現在のブロックのイントラ予測モードは、非方向性イントラ予測モード又は方向性イントラ予測モードのうちの少なくとも1つが現在のブロックのイントラ予測モードで決定することができる。非方向性イントラ予測モードは、プランナー(Planer)及びDCを含み、方向性イントラ予測モードは、左下対角方向から右上対角方向まで33つ又は65つのモードを含む。
図30は、イントラ予測モードを示す図面である。
図30の(a)は、35個のイントラ予測モードを示し、図30の(b)は、67つのイントラ予測モードを示す。
図30に示されたものよりも多いか、より少ない数のイントラ予測モードを定義することもできる。
現在のブロックに隣接する隣接ブロックのイントラ予測モードに基づいて、最も可能性の高いモード(MPM:Most Probable Mode)を設定することができる。ここで、隣接ブロックは、現在のブロックの左側に隣接する左側隣接ブロック及び現在のブロックの上部に隣接する上部隣接ブロックを含み得る。現在のブロックの左上のサンプルの座標を(0,0)とすると、左側の隣接ブロックは、(-1,0)、(-1,H-1)又は(-1,(H-1)/2)位置のサンプルを含み得る。ここで、Hは、現在のブロックの高さを表す。上部隣接ブロックは、(0,-1)、(W-1,-1)又は((W-1)/2,-1)位置のサンプルを含み得る。ここで、Wは、現在のブロックの幅を表す。
隣接ブロックが一般的なイントラ予測で符号化された場合、隣接ブロックのイントラ予測モードに基づいてMPMを導出することができる。具体的に、左側の隣接ブロックのイントラ予測モードを変数candIntraPredModeAに設定し、上部隣接ブロックのイントラ予測モードを変数candIntraPredModeBに設定することができる。
この場合、隣接ブロックが利用不可能である場合(例えば、隣接ブロックがまだ符号化/復号化されていない場合又は隣接ブロックの位置が画像境界を超えた場合)、隣接ブロックがマトリックスに基づくイントラ予測で符号化された場合、隣接ブロックがインター予測で符号化された場合又は隣接ブロックが現在のブロックと異なる符号化ツリーユニットに含まれた場合にとって、隣接ブロックのイントラ予測モードに基づいて、導出される変数candIntraPredModeX(ここで、Xは、A又はB)をデフォルトモードに設定することができる。ここで、デフォルトモードは、プランナー、DC、垂直方向モード又は水平方向モードのうちの少なくとも1つを含み得る。
又は、隣接ブロックがマトリックスに基づくイントラ予測で符号化された場合、マトリックスのうちのいずれか1つを特定するためのインデックス値に対応するイントラ予測モードをcandIntraPredModeXに設定することができる。したがって、マトリックスを特定するためのインデックス値とイントラ予測モードのマッピング関係を表すルックアップテーブルは、符号化器及び復号化器に記憶されることができる。
変数candIntraPredModeA及び変数candIntraPredModeBに基づいて、MPMを導出することができる。MPMリストに含まれるMPMの数は、符号化器及び復号化器によって設定されることができる。一例として、MPMの数は、3つ、4つ、5つ又は6つであってもよい。又は、ビットストリームを介して、MPMの数を表す情報をシグナリングすることができる。又は、隣接ブロックの予測符号化モード、現在のブロックのサイズ又は形態のうちの少なくとも1つに基づいてMPMの数を決定することができる。
後述される実施例では、MPMの数が3つであると仮定し、3つのMPMをMPM[0]、MPM[1]及びMPM[2]と称することにする。MPMの数が3つより多い場合、MPMは、後述される実施例で説明される3つのMPMを含むように構成される。
candIntraPredAとcandIntraPredBが同じであり、candIntraPredAがプランナー又はDCモードである場合、MPM[0]及びMPM[1]をそれぞれ、プランナー及びDCモードに設定することができる。MPM[2]を垂直方向のイントラ予測モード、水平方向のイントラ予測モード又は対角方向のイントラ予測モードに設定することができる。対角方向のイントラ予測モードは、左下対角方向のイントラ予測モード、左上方向のイントラ予測モード又は右上方向のイントラ予測モードであってもよい。
candIntraPredAとcandIntraPredBが同じであり、candIntraPredAが方向性イントラ予測モードである場合、MPM[0]をcandIntraPredAと同じように設定することができる。MPM[1]及びMPM[2]は、candIntraPredAを類似のイントラ予測モードに設定することができる。candIntraPredAと類似するイントラ予測モードは、candIntraPredAとのインデックスの差分値が±1又は±2であるイントラ予測モードであってもよい。candIntraPredAと類似するイントラ予測モードを導出するために、モジュール演算(%)及びオフセットを使用することができる。
candIntraPredAとcandIntraPredBが異なる場合、MPM[0]をcandIntraPredAと同じように設定し、MPM[1]をcandIntraPredBと同じように設定することができる。この場合、candIntraPredAとcandIntraPredBが両方とも非方向性イントラ予測モードである場合、MPM[2]を垂直方向のイントラ予測モード、水平方向のイントラ予測モード又は対角方向のイントラ予測モードに設定することができる。又は、candIntraPredA及びcandIntraPredBのうちの少なくとも1つが方向性イントラ予測モードである場合、MPM[2]を、プランナー、DC、又はcandIntraPredA又はcandIntraPredBのうちの最大値にオフセットを加算又は減算することにより導出されるイントラ予測モードに設定することができる。ここで、オフセットは、1又は2であってもよい。
複数のMPMを含むMPMリストを生成し、ビットストリームを介して、現在のブロックのイントラ予測モードと同じMPMがMPMリストに含まれているかどうかを表す情報をシグナリングすることができる。前記情報は、1ビットのフラグでMPMフラグと称することができる。前記MPMフラグが、現在のブロックと同じMPMがMPMリストに含まれていることを表す場合、ビットストリームを介して、MPMのいずれか1つを識別するインデックス情報をシグナリングすることができる。前記インデックス情報によって特定されたMPMを現在のブロックのイントラ予測モードとして設定することができる。前記MPMフラグが、現在のブロックと同じMPMがMPMリストに含まれていないことを表す場合、MPMを除く残りのイントラ予測モードのうちのいずれか1つを指示する残りのモード情報をビットストリームを介してシグナリングすることができる。残りのモード情報は、MPMを除く残りのイントラ予測モードにインデックスを再割り当てしたとき、現在のブロックのイントラ予測モードに対応するインデックス値を指す。復号化器は、昇順でMPMを配列し、残りのモード情報をMPMと比較することにより、現在のブロックのイントラ予測モードを決定することができる。一例として、残りのモード情報がMPMより小さいか等しい場合、残りのモード情報に1を加算して、現在のブロックのイントラ予測モードを導出することができる。
デフォルトモードをMPMに設定する代わりに、現在のブロックのイントラ予測モードがデフォルトモードであるかどうかを表す情報をビットストリームを介してシグナリングすることができる。前記情報は、1ビットのフラグであり、前記フラグをデフォルトモードフラグと称することができる。前記デフォルトモードフラグは、MPMフラグが現在のブロックと同じMPMがMPMリストに含まれていることを示す場合に限ってシグナリングすることができる。上記のように、デフォルトモードは、プランナー、DC、垂直方向モード又は水平方向モードのうちの少なくとも1つを含み得る。一例として、プランナーがデフォルトモードに設定された場合、デフォルトモードフラグは、現在のブロックのイントラ予測モードがプランナーであるかどうかを指示することができる。デフォルトモードフラグが、現在のブロックのイントラ予測モードがデフォルトモードではないことを示す場合、インデックス情報によって指示されるMPMのいずれか1つを現在のブロックのイントラ予測モードとして設定することができる。
複数のイントラ予測モードがデフォルトモードに設定された場合、デフォルトモードのうちのいずれか1つを指示するインデックス情報をさらにシグナリングすることができる。現在のブロックのイントラ予測モードは、前記インデックス情報が指すデフォルトモードに設定されることができる。
現在のブロックの参照サンプルラインのインデックスが0ではない場合、デフォルトモードを使用しないように設定することができる。これにより、参照サンプルラインのインデックスが0ではない場合は、デフォルトモードフラグをシグナリングせずに、前記デフォルトモードフラグの値を事前に定義された値(即ち、偽)に設定することができる。
現在のブロックのイントラ予測モードが決定されると、決定されたイントラ予測モードに基づいて、現在のブロックに対する予測サンプルを取得することができる(ステップS2803)。
DCモードが選択された場合、参照サンプルの平均値に基づいて、現在のブロックに対する予測サンプルを生成する。具体的に、参照サンプルの平均値に基づいて、予測ブロック内の全てのサンプルの値を生成することができる。現在のブロックの上部に位置する上部の参照サンプル及び現在のブロックの左側に位置する左側の参照サンプルのうちの少なくとも1つを使用して平均値を導出することができる。
現在のブロックの形状に従って、平均値を導出するために使用される参照サンプルの数又は範囲は異なる可能性がある。一例として、現在のブロックが、幅が高さより大きい非正方形ブロックである場合、上部の参照サンプルのみを使用して平均値を計算することができる。もう一方では、現在のブロックが、幅が高さより小さい非正方形ブロックである場合、左側の参照サンプルのみを使用して平均値を計算することができる。即ち、現在のブロックの幅と高さが異なる場合、より長い方に隣接する参照サンプルのみを使用して平均値を計算することができる。又は、現在のブロックの幅と高さの比率に基づいて、上部の参照サンプルのみを使用して平均値を計算するかどうか又は左側の参照サンプルのみを使用して平均値を計算するかどうかを決定することができる。
プランナーモードが選択された場合、水平方向予測サンプルと垂直方向予測サンプルを使用して、予測サンプルを取得することができる。ここで、予測サンプルと同じ水平線に位置する左側の参照サンプル及び右側の参照サンプルに基づいて水平方向予測サンプルを取得し、予測サンプルと同じ垂直線に位置する上部の参照サンプル及び下部の参照サンプルに基づいて垂直方向予測サンプルを取得する。ここで、現在のブロックの右上コーナーに隣接する参照サンプルを複製することにより右側の参照サンプルを生成し、現在のブロックの左下コーナーに隣接する参照サンプルを複製することにより下部の参照サンプルを生成することができる。左側の参照サンプル及び右側の参照サンプルの加重和演算に基づいて水平方向予測サンプルを取得し、上部の参照サンプル及び下部の参照サンプルの加重和演算に基づいて垂直方向予測サンプルを取得することができる。この場合、予測サンプルの位置に従って、各参照サンプルに付与される重み値を決定することができる。水平方向予測サンプル及び垂直方向予測サンプルの平均演算又は加重和演算に基づいて予測サンプルを取得することができる。加重和演算が実行される場合、予測サンプルの位置に基づいて水平方向予測サンプル及び垂直方向予測サンプルに付与される重み値を決定することができる。
方向性予測モードが選択される場合、選択された方向性予測モードの予測方向(又は予測角度)を示すパラメータを決定することができる。以下、表5は、各イントラ予測モードのイントラ方向パラメータintraPredAngを示す。
表5は、35個のイントラ予測モードが定義されている場合、インデックスが2ないし34のいずれか1つであるイントラ予測モードのそれぞれのイントラ方向パラメータを表す。33つより多い方向性イントラ予測モードが定義されている場合、表5をより細分化して、各方向性イントラ予測モードのイントラ方向パラメータを設定することができる。
現在のブロックの上部の参照サンプル及び左側の参照サンプルを一列に配列した後、イントラ方向パラメータの値に基づいて、予測サンプルを取得することができる。この場合、イントラ方向パラメータの値が負の値である場合、左側の参照サンプルと上部の参照サンプルを一列に配列することができる。
図31及び図32は、基準サンプルを一列に配列する1次元配列の例を示す図面である。
図31は、参照サンプルを垂直方向に配列する垂直方向の1次元配列の例を示し、図32は、参照サンプルを水平方向に配列する水平方向の1次元配列の例を示す。35個のイントラ予測モードが定義されていると仮定して、図31及び図32の実施例を説明する。
イントラ予測モードインデックスが11ないし18のいずれか1つである場合、上部の参照サンプルを反時計回りに回転した水平方向の1次元配列を適用し、イントラ予測モードインデックスが19ないし25のいずれか1つである場合、左側の参照サンプルを時計回りに回転した垂直方向の1次元配列を適用することができる。参照サンプルを一列に配列したとき、イントラ予測モード角度を考慮することができる。
イントラ方向パラメータに基づいて、参照サンプル決定パラメータを決定することができる。参照サンプル決定パラメータは、参照サンプルを特定するための参照サンプルインデックス及び参照サンプルに適用される重み値を決定するための重み値パラメータを含み得る。
参照サンプルインデックスiIdx及び重み値パラメータifactは、それぞれ以下の式5及び6によって取得されることができる。
式5及び6では、Pangは、イントラ方向パラメータを表す。参照サンプルインデックスiIdxによって特定される参照サンプルは、整数ペル(Integer pel)に該当する。
予測サンプルを導出するために、少なくとも1つ以上の参照サンプルを特定することができる。具体的に、予測モードの傾きを考慮して、予測サンプルを導出するために使用される参照サンプルの位置を特定することができる。一例として、参照サンプルインデックスiIdxを使用して、予測サンプルを導出するために使用される参照サンプルを特定することができる。
この場合、イントラ予測モードの傾きが1つの参照サンプルで表されていない場合、複数の参照サンプルを補間することにより予測サンプルを生成することができる。一例として、イントラ予測モードの傾きが予測サンプルと第1参照サンプルとの間の傾きと、予測サンプルと第2参照サンプルとの間の傾きとの間の値である場合、第1参照サンプル及び第2参照サンプルを補間することにより予測サンプルを取得することができる。即ち、イントラ予測角度に沿ったアンギュラライン(Angular Line)が整数ペルに位置する参照サンプルを通過しない場合、前記アンギュララインが通過する位置の左右又は上下に隣接位置する参照サンプルを補間することにより予測サンプルを取得することができる。
以下、式7は、参照サンプルに基づいて、予測サンプルを取得する例を示す。
式7では、Pは予測サンプルを表し、Ref_1Dは、1次元配列された参照サンプルのいずれか1つを表す。この場合、予測サンプルの位置(x,y)及び参照サンプルインデックスiIdxに従って参照サンプルの位置を決定することができる。
イントラ予測モードの傾きが1つの参照サンプルで表すことができる場合、重み値パラメータifactを0に設定する。これにより、式7は、以下の式8のように簡素化することができる。
複数のイントラ予測モードに基づいて、現在のブロックに対するイントラ予測を実行することもできる。一例として、予測サンプルごとにイントラ予測モードを導出し、各予測サンプルに割り当てされたイントラ予測モードに基づいて予測サンプルを導出することができる。
又は、領域ごとにイントラ予測モードを導出し、それぞれの領域に割り当てされたイントラ予測モードに基づいて各領域に対するイントラ予測を実行することができる。ここで、前記領域は、少なくとも1つのサンプルを含み得る。前記領域のサイズ又は形状のうちの少なくとも1つは、現在のブロックのサイズ、形状又はイントラ予測モードのうちの少なくとも1つに基づいて適応的に決定することができる。又は、符号化器及び復号化器において、現在のブロックのサイズ又は形状とは関係なく、領域のサイズ又は形状のうちの少なくとも1つを事前に定義することができる。
又は、複数のイントラ予測のそれぞれに基づいてイントラ予測を実行し、複数回のイントラ予測により取得された複数の予測サンプルの平均演算又は加重和演算に基づいて、最終的な予測サンプルを導出することができる。一例として、第1イントラ予測モードに基づき、イントラ予測を実行して第1予測サンプルを取得し、第2イントラ予測モードに基づき、イントラ予測を実行して第2予測サンプルを取得することができる。その後、第1予測サンプルと第2予測サンプルの間の平均演算又は加重和演算に基づいて、最終的な予測サンプルを取得することができる。この場合、第1イントラ予測モードが非方向性/方向性予測モードであるかどうか、第2イントラ予測モードが非方向性/方向性予測モードであるかどうか又は隣接ブロックのイントラ予測モードのうちの少なくとも1つを考慮して、第1予測サンプル及び第2予測サンプルのそれぞれに割り当てられる重み値を決定することができる。
複数のイントラ予測モードは、非方向性イントラ予測モードと方向性予測モードの組み合わせ、方向性予測モードの組み合わせ又は非方向性予測モードの組み合わせであってもよい。
図33は、方向性イントラ予測モードが、x軸と平行な直線と形成する角度を示す図面である。
図33に示された例のように、方向性予測モードは、左下対角方向から右上対角方向の間に存在することができる。x軸と方向性予測モードが形成する角度を説明すれば、方向性予測モードは、45度(左下対角方向)から、-135度(右上対角方向)の間に存在することができる。
現在のブロックが非正方形である場合、現在のブロックのイントラ予測モードに従って、イントラ予測角度に従うアンギュララインに位置する参照サンプルのうち、予測サンプルにより近い参照サンプルの代わりに、予測サンプルにより遠い参照サンプルを使用して予測サンプルを導出する場合が発生することがある。
図34は、現在のブロックが非正方形である場合、予測サンプルが取得される様式を示す図面である。
一例として、図34の(a)に示された例のように、現在のブロックが幅が高さより大きい非正方形であり、現在のブロックのイントラ予測モードが0度から45度の間の角度を有する方向性イントラ予測モードであると仮定する。上記の場合、現在のブロックの右側の列付近の予測サンプルAを導出するとき、前記角度に従うアンギュラモードに位置する参照サンプルのうち、前記予測サンプルに近い上部の参照サンプルTの代わりに前記予測サンプルに遠い左側の参照サンプルLを使用する場合が発生することがある。
別の例として、図34の(b)に示された例のように、現在のブロックが高さが幅より大きい非正方形であり、現在のブロックのイントラ予測モードが-90度から-135度の間の方向性イントラ予測モードであると仮定する。上記の場合、現在のブロックの下部の行付近の予測サンプルAを導出するとき、前記角度に従うアンギュラモードに位置する参照サンプルのうち、前記予測サンプルに近い左側の参照サンプルLの代わりに前記予測サンプルに遠い上部の参照サンプルTを使用する場合が発生することがある。
上記の問題を解決するために、現在のブロックが非正方形である場合、現在のブロックのイントラ予測モードを反対方向のイントラ予測モードに置換することができる。これにより、非正方形ブロックについては、図24に示された方向性予測モードよりも大きいか、あるいはより小さい角度を有する方向性予測モードを使用することができる。このように、方向性イントラ予測モードを広角イントラ予測モードと定義することができる。広角イントラ予測モードは、45度から-135度の範囲に属さない方向性イントラ予測モードを表す。
図35は、広角イントラ予測モードを示す図面である。
図35に示された例では、インデックスが-1から-14までであるイントラ予測モード及びインデックスが67から80までであるイントラ予測モードは広角イントラ予測モードを表す。
図35は、角度が45度より大きい14つの広角イントラ予測モード(-1から-14まで)及び角度が-135度より小さい14つの広角イントラ予測モード(67から80まで)を表したが、これより多くの数又はより少ない数の広角イントラ予測モードを定義することができる。
広角イントラ予測モードが使用される場合、上部の参照サンプルの長さを2W+1に設定し、左側の参照サンプルの長さを2H+1に設定することができる。
広角イントラ予測モードを使用することにより、参照サンプルTを使用して図34の(a)に示されたサンプルAを予測し、参照サンプルLを使用して図34の(b)に示されたサンプルAを予測することができる。
既存のイントラ予測モードとN個の広角イントラ予測モードを加え、合計67+N個のイントラ予測モードを使用することができる。一例として、表6は、20つの広角イントラ予測モードが定義された場合、イントラ予測モードのイントラ方向パラメータを示す。
現在のブロックが非正方形であり、ステップS2802において取得された現在のブロックのイントラ予測モードが変換範囲に属する場合、現在のブロックのイントラ予測モードを広角イントラ予測モードに変換することができる。現在のブロックのサイズ、形状又は比率のうちの少なくとも1つに基づいて、前記変換範囲を決定することができる。ここで、前記比率は、現在のブロックの幅と高さの間の比率を表すことができる。
現在のブロックが幅が高さより大きい非正方形である場合、変換範囲を右上対角方向のイントラ予測モードインデックス(例えば、66)から(右上対角方向のイントラ予測モードのインデックス-N)に設定することができる。ここで、Nは、現在のブロックの比率に基づいて決定されることができる。現在のブロックのイントラ予測モードが変換範囲に属する場合、前記イントラ予測モードを広角イントラ予測モードに変換することができる。前記変換は、前記イントラ予測モードから事前に定義された値を差し引くことであり、事前に定義された値は、広角イントラ予測モードを除くイントラ予測モードの総数(例えば、67)であってもよい。
前記実施例により、66番目から53番目の間のイントラ予測モードをそれぞれ、-1番目から-14番目の間の広角イントラ予測モードに変換することができる。
現在のブロックが高さが幅より大きい非正方形である場合、変換範囲を左下対角方向のイントラ予測モードインデックス(例えば、2)から(左下対角方向のイントラ予測モードのインデックス+M)に設定することができる。ここで、Mは、現在のブロックの比率に基づいて決定されることができる。現在のブロックのイントラ予測モードが変換範囲に属する場合、前記イントラ予測モードを広角イントラ予測モードに変換することができる。前記変換は、前記イントラ予測モードから事前に定義された値を加算することであり、事前に定義された値は、広角イントラ予測モードを除く方向性イントラ予測モードの総数(例えば、65)であってもよい。
前記実施例により、2番目から15番目の間のイントラ予測モードのそれぞれを67番目から80番目の間の広角イントラ予測モードに変換することができる。
以下、変換範囲に属するイントラ予測モードを広角イントラ代替予測モードと称することにする。
変換範囲は、現在のブロックの比率に基づいて決定することができる。一例として、表7及び表8はそれぞれ、広角イントラ予測モードを除く35個のイントラ予測モードが定義された場合と67つのイントラ予測モードが定義された場合の変換範囲を示す。
表7及び表8に示された例のように、現在のブロックの比率に従って、変換範囲に含まれる広角イントラ代替予測モードの数が異なることができる。
既存のイントラ予測モードに加えて、広角イントラ予測モードが使用されることに従って、広角イントラ予測モードを符号化するのに必要なリソースが増加し、符号化効率が低下する可能性がある。したがって、広角イントラ予測モードをそのまま符号化する代わりに、広角イントラ予測モードに対する代替イントラ予測モードを符号化することにより、符号化効率を向上させることができる。
一例として、現在のブロックが67番目の広角イントラ予測モードを使用して符号化された場合、67番目の広角代替イントラ予測モードである2番を現在のブロックのイントラ予測モードで符号化することができる。また、現在のブロックが-1番目の広角イントラ予測モードで符号化された場合、-1番目の広角代替イントラ予測モードである66番を現在のブロックのイントラ予測モードで符号化することができる。
復号化器は、現在のブロックのイントラ予測モードを復号化し、復号化されたイントラ予測モードが変換範囲に含まれるかどうかを判定することができる。復号化されたイントラ予測モードが広角代替イントラ予測モードである場合、イントラ予測モードを広角イントラ予測モードに変換することができる。
又は、現在のブロックが広角イントラ予測モードで符号化された場合、広角イントラ予測モードをそのまま符号化することもできる。
イントラ予測モードの符号化は、上記のMPMリストに基づいて具現されることができる。具体的に、隣接ブロックが広角イントラ予測モードで符号化された場合、前記広角イントラ予測モードに対応する広角代替イントラ予測モードに基づいて、MPMを設定することができる。一例として、隣接ブロックが広角イントラ予測モードで符号化された場合、変数candIntraPredX(Xは、A又はB)を広角代替イントラ予測モードに設定することができる。
イントラ予測の実行結果を介して予測ブロックを生成すると、予測ブロックに含まれた予測サンプルのそれぞれの位置に基づいて、予測サンプルを更新することができる。このように、更新方法をサンプル位置に基づくイントラ加重予測方法(PDPC:Position Dependent Prediction Combination)と称することができる。
現在のブロックのイントラ予測モード、現在のブロックの参照サンプルライン、現在のブロックのサイズ、又は色成分を考慮して、PDPCを使用するかどうかを決定することができる。一例として、現在のブロックのイントラ予測モードがプランナー、DC、垂直方向、水平方向、垂直方向よりインデックス値が小さいモード又は水平方向よりインデックス値が大きいモードのうちの少なくとも1つである場合、PDPCを使用することができる。又は、現在のブロックの幅又は高さのうちの少なくとも1つが4より大きい場合のみ、PDPCを使用することができる。又は、現在のブロックの参照画像ラインのインデックスが0である場合のみ、PDPCを使用することができる。又は現在のブロックの参照画像ラインのインデックスが事前に定義された値より大きいか等しい場合のみ、PDPCを使用することができる。又は、輝度成分のみPDPCを使用することができる。又は前記列挙された条件のうちの2つ以上を満たしているかどうかに従って、PDPCを使用するかどうかを決定することができる。
別の例として、ビットストリームを介して、PDPCが適用されるかどうかを表す情報をシグナリングすることができる。
イントラ予測サンプルを介して予測サンプルを取得すると、取得された予測サンプルの位置に基づいて、前記予測サンプルを補正するために使用される参照サンプルを決定することができる。説明の便宜上、後述された実施例では、予測サンプルを補正するために使用される参照サンプルをPDPC参照サンプルと称することにする。また、イントラ予測を介して取得された予測サンプルを第1予測サンプルと呼称し、第1予測サンプルを補正することにより取得される予測サンプルを第2予測サンプルと称することにする。
図36は、PDPCを適用した様式を示す図面である。
少なくとも1つのPDPC参照サンプルを使用して、第1予測サンプルを補正することができる。PDPC参照サンプルは、現在のブロックの左上コーナーに隣接する参照サンプル、現在のブロックの上部に位置する上部の参照サンプル又は現在のブロックの左側に位置する左側の参照サンプルのうちの少なくとも1つを含み得る。
現在のブロックの参照サンプルラインに属する参照サンプルのうちの少なくとも1つをPDPC参照サンプルに設定することができる。又は、現在のブロックの参照サンプルラインとは関係なく、インデックス0である参照サンプルラインに属する参照サンプルのうちの少なくとも1つをPDPC参照サンプルに設定することができる。一例として、インデックス1又はインデックス2である参照サンプルラインに含まれた参照サンプルを使用して第1予測サンプルを取得しても、インデックス0である参照サンプルラインに含まれた参照サンプルを使用して第2予測サンプルを取得することができる。
現在のブロックのイントラ予測モード、現在のブロックのサイズ、現在のブロックの形状又は第1予測サンプルの位置のうちの少なくとも1つを考慮して、第1予測サンプルを補正するために使用されるPDPC参照サンプルの数又は位置を決定することができる。
一例として、現在のブロックのイントラ予測モードがプランナー又はDCモードである場合、上部の参照サンプル及び左側の参照サンプルを使用して第2予測サンプルを取得することができる。この場合、上部の参照サンプルは、第1予測サンプルに垂直な参照サンプル(例えば、x座標が同じである参照サンプル)であり、左側の参照サンプルは、第1予測サンプルに水平な参照サンプル(例えば、y座標が同じである参照サンプル)であってもよい。
現在のブロックのイントラ予測モードが水平方向のイントラ予測モードである場合、上部の参照サンプルを使用して第2予測サンプルを取得することができる。この場合、上部の参照サンプルは、第1予測サンプルに垂直な参照サンプルであってもよい。
現在のブロックのイントラ予測モードが垂直方向のイントラ予測モードである場合、左側の参照サンプルを使用して第2予測サンプルを取得することができる。この場合、左側の参照サンプルは、第1予測サンプルに水平な参照サンプルであってもよい。
現在のブロックのイントラ予測モードが左下対角方向又は右上対角方向のイントラ予測モードである場合、左上参照サンプル、上部の参照サンプル及び左側の参照サンプルに基づいて第2予測サンプルを取得することができる。左上参照サンプルは、現在のブロックの左上コーナーに隣接する参照サンプル(例えば、位置(-1,-1)にある参照サンプル)であってもよい。上部の参照サンプルは、第1予測サンプルの右上対角方向に位置する参照サンプルであり、左側の参照サンプルは、第1予測サンプルの左下対角方向に位置する参照サンプルであってもよい。
要約すると、第1予測サンプルの位置が(x,y)である場合、R(-1,-1)を左上の参照サンプルに設定し、R(x+y+1,-1)又はR(x,-1)を上部の参照サンプルに設定することができる。また、R(-1,x+y+1)又はR(-1,y)を左側の参照サンプルに設定することができる。
別の例として、現在のブロックの形状又は広角イントラモードが適用されているかどうかのうちの少なくとも1つを考慮して、左側の参照サンプル又は上部の参照サンプルの位置を決定することができる。
具体的に、現在のブロックのイントラ予測モードが広角イントラ予測モードである場合、第1予測サンプルの対角方向に位置する参照サンプルからオフセットだけ離間された参照サンプルをPDPC参照サンプルに設定することができる。一例として、上部の参照サンプルR(x+y+k+1,-1)及び左側の参照サンプルR(-1,x+y-k+1)をPDPC参照サンプルに設定することができる。
この場合、広角イントラ予測モードに基づいてオフセットkを決定することができる。式9及び式10は、広角イントラ予測モードに基づくオフセットを導出する例を示す。
第1予測サンプルとPDPC参照サンプルとの間の加重和演算に基づいて第2予測サンプルを決定することができる。一例として、以下の式11に基づいて第2予測サンプルを取得することができる。
式11では、RLは、左側の参照サンプルを表し、RTは、上部の参照サンプルを表し、RTLは、左上参照サンプルを表す。Pred(x,y)は、(x,y)位置の予測サンプルを表す。wLは、左側の参照サンプルに付与される重み値を表し、wTは、上部の参照サンプルに付与される重み値を表し、wTLは、左上参照サンプルに付与される重み値を表す。第1予測サンプルに付与される重み値は、最大値から参照サンプルに付与される重み値を差し引いくことにより導出されることができる。説明の便宜上、PDPC参照サンプルに割り当てられる重み値をPDPC重み値と称することにする。
現在のブロックのイントラ予測モード又は第1予測サンプルの位置のうちの少なくとも1つに基づいて、各参照サンプルに割り当てられる重み値を決定することができる。
一例として、wL、wT又はwTLのうちの少なくとも1つは、予測サンプルのx軸座標値又はy軸座標値のうちの少なくとも1つと比例または反比例の関係にあることができる。又は、wL、wT又はwTLのうちの少なくとも1つは、現在のブロックの幅又は高さのうちの少なくとも1つと比例または反比例の関係にあることができる。
現在のブロックのイントラ予測モードがDCである場合、PDPC重み値を以下の式12で決定することができる。
式12では、x及びyは、第1予測サンプルの位置を表す。
式12では、現在のブロックの幅又は高さに基づいて、ビットシフト演算に使用される変数shiftを導出することができる。一例として、以下の式13又は式14に基づいて、変数shiftを導出することができる。
又は、現在のブロックのイントラ方向パラメータを考慮して、変数shiftを導出することもできる。
現在のブロックのイントラ予測モードに従って、変数shiftを導出するために使用されるパラメータの数又は種類を異なるように決定することができる。一例として、現在のブロックのイントラ予測モードがプランナー、DC、垂直方向又は水平方向である場合、式13又は式14に示された例のように、現在のブロックの幅及び高さを使用して変数shiftを導出することができる。現在のブロックのイントラ予測モードが垂直方向のイントラ予測モードより大きいインデックスを有するイントラ予測モードである場合、現在のブロックの高さ及びイントラ方向パラメータを使用して変数shiftを導出することができる。現在のブロックのイントラ予測モードが水平方向のイントラ予測モードより小さいインデックスを有するイントラ予測モードである場合、現在のブロックの幅及びイントラ方向パラメータを使用して変数shiftを導出することができる。
現在のブロックのイントラ予測モードがプランナーである場合、wTLの値を0に設定することができる。以下の式15に基づいて、wL及びwTを導出することができる。
現在のブロックのイントラ予測モードが水平方向のイントラ予測モードである場合、wTを0に設定し、wTLとwLを同一に設定することができる。もう一方では、現在のブロックのイントラ予測モードが垂直方向のイントラ予測モードである場合、wLを0に設定し、wTLとwTを同一に設定することができる。
現在のブロックのイントラ予測モードが、右上方向に向く、垂直方向のイントラ予測モードより大きいインデックス値を有するイントラ予測モードである場合、以下の式16のようにPDPC重み値を導出することができる。
もう一方では、現在のブロックのイントラ予測モードが、左下方向に向く、水平方向のイントラ予測モードより小さいインデックス値を有するイントラ予測モードである場合、以下の式17のようにPDPC重み値を導出することができる。
上記の実施例のように、予測サンプルの位置x及びyに基づいて、PDPC重み値を決定することができる。
別の例として、サブブロック単位でPDPC参照サンプルのそれぞれに割り当てられる重み値を決定することもできる。サブブロックに含まれた予測サンプルは、同じPDPC重み値を共有することができる。
重み値を決定するための基本単位であるサブブロックのサイズは、符号化器及び復号化器によって事前に定義されたものである可能性がある。一例として、2x2サイズ又は4x4サイズのサブブロックのそれぞれについて重み値を決定することができる。
又は、現在のブロックのサイズ又は形状に従って、サブブロックのサイズ、形状又は数を決定することができる。一例として、符号化ブロックのサイズとは関係なく、符号化ブロックを4つのサブブロックに分割することができる。又は、符号化ブロックのサイズに従って、符号化ブロックを4つ又は16つのサブブロックに分割することができる。
又は、現在のブロックのイントラ予測モードに基づいて、サブブロックのサイズ、形状又は数を決定することもできる。一例として、現在のブロックのイントラ予測モードが水平方向である場合には、N個の列(又はN個の行)を1つのサブブロックに設定する一方で、現在のブロックのイントラ予測モードが垂直方向である場合には、N個の行(又はN個の列)を1つのサブブロックに設定することができる。
式18ないし20は、2x2サイズのサブブロックに対するPDPC重み値を決定する例を示す。式18は、現在のブロックのイントラ予測モードがDCモードである場合を示す。
式18では、Kは、サブブロックのサイズに基づいて決定されることができる。
式19は、現在のブロックのイントラ予測モードが、右上方向に向く、垂直方向のイントラ予測モードより大きいインデックス値を有する、イントラ予測モードである場合を示す。
式20は、現在のブロックのイントラ予測モードが、左下方向に向く、水平方向のイントラ予測モードより小さいインデックス値を有する、イントラ予測モードである場合を示す。
式18ないし20では、x及びyは、サブブロック内の基準サンプルの位置を表す。基準サンプルは、サブブロックの左上に位置するサンプル、サブブロックの中央に位置するサンプル、又はサブブロックの右下に位置するサンプルのいずれか1つであってもよい。
式21ないし23は、4x4サイズのサブブロックに対するPDPC重み値を決定する例を示す。式21は、現在のブロックのイントラ予測モードがDCモードである場合を示す。
式22は、現在のブロックのイントラ予測モードが、右上方向に向く、垂直方向のイントラ予測モードより大きいインデックス値を有する、イントラ予測モードである場合を示す。
式23は、現在のブロックのイントラ予測モードが、左下方向に向く、水平方向のイントラ予測モードより小さいインデックス値を有する、イントラ予測モードである場合を示す。
上記の実施例では、第1予測サンプル又はサブブロックに含まれた予測サンプルの位置を考慮して、PDPC重み値を決定することを説明した。現在のブロックの形状をより考慮して、PDPC重み値を決定することもできる。
一例として、DCモードの場合、現在のブロックが、幅が高さよりも大きい非正方形であるか、高さが幅よりも大きい非正方形であるかに従って、PDPC重み値の導出方法が異なる可能性がある。
式24は、現在のブロックが幅が高さよりも大きい非正方形である場合、PDPC重み値を導出する例を示し、式25は、現在のブロックが、高さが幅よりも大きい非正方形である場合、PDPC重み値を導出する例を示す。
現在のブロックが非正方形である場合、広角イントラ予測モードを使用して現在のブロックを予測することができる。このように、広角イントラ予測モードが適用された場合にも、PDPCを適用して第1予測サンプルを更新することができる。
現在のブロックが広角イントラ予測を適用した場合、符号化ブロックの形状を考慮して、PDPC重み値を決定することができる。
一例として、現在のブロックが幅が高さよりも大きい非正方形である場合、第1予測サンプルの位置に従って、第1予測サンプルの左下に位置する左側の参照サンプルよりも、第1予測サンプルの右上に位置する上部の参照サンプルが第1予測サンプルにより近い場合が発生する可能性がある。これにより、第1予測サンプルを補正するとき、上部の参照サンプルに適用される重み値が左側の参照サンプルに適用される重み値より大きい値を有するように設定することができる。
もう一方では、現在のブロックが高さが幅より大きい非正方形である場合、第1予測サンプルの位置に従って、第1予測サンプルの右上に位置する上部の参照サンプルよりも、第1予測サンプルの左下に位置する左側の参照サンプルが第1予測サンプルにより近い場合が発生する可能性がある。これにより、第1予測サンプルを補正するとき、左側の参照サンプルに適用される重み値が上部の参照サンプルに適用される重み値より大きい値を有するように設定することができる。
式26は、現在のブロックのイントラ予測モードがインデックスが66より大きい広角イントラ予測モードである場合、PDPC重み値を導出する例を示す。
式27は、現在のブロックのイントラ予測モードがインデックスが0より小さい広角イントラ予測モードである場合、PDPC重み値を導出する例を示す。
現在のブロックの比率に基づいて、PDPC重み値を決定することもできる。現在のブロックの比率は、現在のブロックの幅と高さの比率を示し、以下の式28のように定義されることができる。
現在のブロックのイントラ予測モードに従って、PDPC重み値を導出する方法を可変的に決定することができる。
一例として、式29及び式30は、現在のブロックのイントラ予測モードがDCである場合、PDPC重み値を導出する例を示す。具体的に、式29は、現在のブロックが幅が高さよりも大きい非正方形である場合の例であり、式30は、現在のブロックが高さが幅よりも大きい非正方形である場合の例である。
式31は、現在のブロックのイントラ予測モードがインデックスが66より大きい広角イントラ予測モードである場合、PDPC重み値を導出する例を示す。
式32は、現在のブロックのイントラ予測モードがインデックスが0より小さい広角イントラ予測モードである場合、PDPC重み値を導出する例を示す。
現在のブロックに1つの予測モードを複数回適用するか、複数の予測モードを重複して適用することができる。このように、同じ種類又は異なる種類の予測モードを使用した予測方法を組み合わせ予測モード(又は、マルチ仮説予測モデル(Multi-hypothesis Prediction Mode))と称することができる。
ビットストリームを介して、現在のブロックが組み合わせ予測モードを適用するかどうかを表す情報をシグナリングすることができる。一例として、前記情報は、1ビットのフラグであってもよい。
組み合わせ予測モードは、第1予測モードに基づいて第1予測ブロックを生成し、第2予測モードに基づいて第2予測ブロックを生成することができる。そして、第1予測ブロックと第2予測ブロックの加重和演算に基づいて第3予測ブロックを生成することができる。第3予測ブロックを現在のブロックの最終的な予測ブロックに設定することができる。
組み合わせ予測モードは、マージモードとマージモードを組み合わせたモード、インター予測とイントラ予測を組み合わせたモード、マージモードとモーションベクトル予測モードを組み合わせたモード又はマージモードとイントラ予測を組み合わせたモードのうちの少なくとも1つを含み得る。
マージモードとマージモードを組み合わせたモードは、複数のマージ候補を使用して動き補償予測を実行することができる。具体的に、第1マージ候補を使用して第1予測ブロックを生成し、第2マージ候補を使用して第2予測ブロックを生成することができる。第1予測ブロックと第2予測ブロックの加重和演算に基づいて、第3予測ブロックを生成することができる。
ビットストリームを介して、第1マージ候補及び第2マージ候補を特定するための情報をそれぞれシグナリングすることができる。一例として、ビットストリームを介して、第1マージ候補を特定するためのインデックス情報merge_idx及び第2マージ候補を特定するためのインデックス情報merge_2nd_idxをシグナリングすることができる。インデックス情報merge_2nd_idx及びインデックス情報merge_idxに基づいて、第2マージ候補を決定することができる。
インデックス情報merge_idxは、マージ候補リストに含まれたマージ候補のうちのいずれか1つを特定する。
インデックス情報merge_2nd_idxは、merge_idxによって特定されたマージ候補を除く残りのマージ候補のうちのいずれか1つを特定することができる。これにより、merge_2nd_idxの値がmerge_idxより小さい場合、インデックスがmerge_2nd_idxの値であるマージ候補を第2マージ候補として設定することができる。merge_2nd_idxの値がmerge_idxの値より大きいか等しい場合、merge_2nd_idxの値に1を加えた値をインデックスとして持つマージ候補を第2マージ候補として設定することができる。
又は、候補ブロックの捜索順序を考慮して、第2マージ候補を特定することができる。
図37は、候補ブロックの探索順序を考慮して、第2マージ候補を特定する例を示す。
図37に示された例では、隣接サンプル及び非隣接サンプルに表記されているインデックスは、候補ブロックの捜索順序を示す。一例として、A0位置からA14位置まで順次に候補ブロックを捜索することができる。
A4ブロックが第1マージ候補として選択された場合、捜索順序がA4の次である候補ブロックから導出されたマージ候補を第2マージ候補として特定することができる。一例として、A5から導出されたマージ候補を第2マージ候補として選択することができる。A5位置の候補ブロックがマージ候補として利用不可能である場合、次順位の候補ブロックから導出されたマージ候補を第2マージ候補として選択することができる。
非隣接ブロックから導出されたマージ候補の中から第1マージ候補及び第2マージ候補を選択することもできる。
図38は、非隣接ブロックから導出されたマージ候補のうちから第1マージ候補及び第2マージ候補が選択された例を示す図面である。
図38に示された例のように、現在のブロックに隣接しない第1候補ブロック及び第2候補ブロックから導出されたマージ候補をそれぞれ第1マージ候補及び第2マージ候補として選択することができる。この場合、第1候補ブロックが属するブロックラインと第2候補ブロックが属するブロックラインは、異なる可能性がある。一例として、第1マージ候補は、A5ないしA10のいずれか1つの候補ブロックから導出され、第2マージ候補は、A11ないしA15のいずれか1つの候補ブロックから導出されることができる。
又は、第1候補ブロックと第2候補ブロックが同じライン(例えば、行又は列)に含まれないように設定することができる。
別の例として、第1マージ候補に基づいて第2マージ候補を特定することができる。この場合、第1マージ候補は、ビットストリームからシグナリングされるインデックス情報merge_idxによって特定されることができる。一例として、第1マージ候補に隣接するマージ候補を第2マージ候補として特定することができる。ここで、第1マージ候補に隣接するマージ候補は、第1マージ候補とのインデックス差分値が1であるマージ候補を意味することができる。一例として、インデックス値がmerge_idx+1であるマージ候補を第2マージ候補として設定することができる。この場合、merge_idx+1の値が最大インデックス値より大きい場合(又は、第1マージ候補のインデックス値が最大インデックスである場合)、インデックス値がmerge_idx-1であるマージ候補又はインデックス値が事前に定義された値(例えば、0)であるマージ候補を第2マージ候補として設定することができる。
又は、第1マージ候補に隣接するマージ候補は、第1マージ候補を導出するために使用される候補ブロックに空間的に隣接する候補ブロックから導出されたマージ候補を意味することができる。ここで、候補ブロックの隣接候補ブロックは、候補ブロックの左側、右側、上部、下部又は対角方向に隣接するブロックを意味することができる。
別の例として、第1マージ候補の動き情報に基づいて、第2マージ候補を特定することができる。一例として、第1マージ候補及び参照画像が同じであるマージ候補を第2マージ候補として選択することができる。第1マージ候補及び、参照画像が同じであるマージ候補が複数存在する場合、複数のマージ候補のうち、最も小さいインデックスを有するマージ候補又は第1マージ候補及びインデックス差分が最も小さいマージ候補を第2マージ候補として選択することができる。又は、複数のマージ候補のうちのいずれか1つを特定するインデックス情報に基づいて第2マージ候補を選択することができる。
又は、第1マージ候補が第1方向の一方向予測である場合、第2方向に対する動き情報を含むマージ候補を第2マージ候補として設定することができる。一例として、第1マージ候補がL0方向の動き情報を有する場合、L1方向の動き情報を有するマージ候補を第2マージ候補として選択することができる。L1方向の動き情報を有するマージ候補が複数存在する場合、複数のマージ候補のうち最も小さいインデックスを有するマージ候補又は第1マージ候補のインデックス差分が最も小さいマージ候補を第2マージ候補として設定することができる。又は、複数のマージ候補のうちのいずれか1つを特定するインデックス情報に基づいて第2マージ候補を選択することができる。
別の例として、現在のブロックに隣接する隣接ブロックから導出されたマージ候補のうちの1つを第1マージ候補として設定し、現在のブロックに隣接しない非隣接ブロックから導出されたマージ候補のうちの1つを第2マージ候補として設定することができる。
別の例として、現在のブロックの上部に位置する候補ブロックから導出されたマージ候補のうちの1つを第1マージ候補として設定し、左側に位置する候補ブロックから導出されたマージ候補のうちの1つを第2マージ候補として設定することができる。
第1マージ候補から導出された第1予測ブロックと、第2マージ候補に基づいて導出された第2予測ブロックの加重和演算により組み合わせ予測ブロックを取得することができる。この場合、第1予測ブロックに適用される重み値を第2予測ブロックに適用される重み値より大きい値に設定することができる。
又は、第1マージ候補の動き情報及び第2マージ候補の動き情報に基づいて、重み値を決定することができる。一例として、参照画像と現在の画像の間の出力順の差に基づいて、第1予測ブロック及び第2予測ブロックに適用される重み値を決定することができる。具体的に、参照画像と現在の画像の間の出力順の差が大きいほど、予測ブロックに適用される重み値をより小さい値に設定することができる。
又は、第1マージ候補を導出するために使用された候補ブロック(以下、第1候補ブロックと呼ぶ)と第2マージ候補を導出するために使用された候補ブロック(以下、第2候補ブロックと呼ぶ)のサイズ又は形状を考慮して、第1予測ブロック及び第2予測ブロックに適用される重み値を決定することができる。一例として、第1候補ブロック及び第2候補ブロックのうち、現在のブロックと類似した形状を有することから導出された予測ブロックに適用される重み値を大きな値に設定することができる。もう一方では、現在のブロックと類似しない形状を有することから導出された予測ブロックに適用される重み値を小さい値に設定することができる。
図39は、候補ブロックの形態に基づいて予測ブロックに適用される重み値が決定される例を示す図面である。
現在のブロックが幅が高さより大きい非正方形であると仮定する。
第1マージ候補及び第2マージ候補に基づいて、第1予測ブロック及び第2予測ブロックを導出し、第1予測ブロック及び第2予測ブロックの加重和演算に基づいて、組み合わせ予測ブロックを生成することができる。この場合、第1候補ブロック及び第2候補ブロックの形状に基づいて、第1予測ブロック及び第2予測ブロックに適用される重み値を決定することができる。
一例として、図39に示された例では、第1候補ブロックは正方形であり、第2候補ブロックは、幅が高さより大きい非正方形である。第2候補ブロックの形状が現在のブロックと同じであるため、第2予測ブロックに適用される重み値が、第1予測ブロックに適用される重み値より大きい値を有するように設定することができる。一例として、第2予測ブロックには5/8の重み値を適用し、第1予測ブロックには3/8の重み値を適用することができる。式33は、第1予測ブロック及び第2予測ブロックの加重和演算に基づいて組み合わせ予測ブロックを導出する例を示す。
P(x,y)は、組み合わせ予測ブロックを表し、P1(x,y)は、第1予測ブロックを表し、P2(x,y)は、第2予測ブロックを表す。
別の例として、現在のブロックの形状に基づいて、第1予測ブロック及び第2予測ブロックに適用される重み値を決定することができる。一例として、現在のブロックが幅が高さより大きい非正方形である場合、第1マージ候補及び第2マージ候補のうち、現在のブロックの上部に位置する候補ブロックに基づいて導出されたものに基づいて生成された予測ブロックにより大きい重み値を適用させることができる。第1マージ候補及び第2マージ候補が両方とも上部に位置する候補ブロックから導出された場合、第1予測ブロック及び第2予測ブロックに適用される重み値を同じように設定することができる。もう一方では、現在のブロックが高さが幅より大きい非正方形である場合、第1マージ候補及び第2マージ候補のうち、現在のブロックの左側に位置する候補ブロックに基づいて導出されたものに基づいて生成された予測ブロックにより大きい重み値を適用させることができる。第1マージ候補及び第2マージ候補が両方とも左側に位置する候補ブロックから導出された場合、第1予測ブロック及び第2予測ブロックに適用される重み値を同じように設定することができる。現在のブロックが正方形である場合、第1予測ブロック及び第2予測ブロックに適用される重み値を同じように設定することができる。
別の例として、現在のブロックと候補ブロックの距離に基づいて、各予測ブロックに適用される重み値を決定することができる。ここで、距離は、現在のブロックとのx軸座標差分、y軸座標差分又はこれらのうちの最小値に基づいて導出されることができる。現在のブロックとの距離が小さいマージ候補から導出された予測ブロックに適用される重み値が、現在のブロックとの距離が大きいマージ候補から導出された予測ブロックに適用される重み値より大きい値を有するように設定することができる。一例として、図37に示された例では、第1マージ候補は、現在のブロックに隣接する隣接ブロックから導出され、第2マージ候補が現在のブロックに隣接しない非隣接ブロックから導出される。この場合、第1候補ブロックと現在のブロックとの間のx軸距離が第2候補ブロックと現在のブロックとの間のx軸距離より小さいため、第1予測ブロックに適用される重み値が第2予測ブロックに適用される重み値よりも大きい値を有するよいに設定することができる。
又は、第1マージ候補及び第2マージ候補が両方とも非隣接ブロックから導出された場合、非隣接ブロックのうち、現在のブロックとの距離がより近い方から導出された予測ブロックにより大きい重み値を割り当てることができる。一例として、図38に示された例では、第1候補ブロックと現在のブロックとの間のy軸距離が第2候補ブロックと現在のブロックとの間のy軸距離より小さいため、第1予測ブロックに適用される重み値が、第2予測ブロックに適用される重み値よりも大きい値を有するように設定することができる。
上記のマージモードとマージモードを組み合わせた組み合わせ予測モードにおいて、マージモードは、並進モーションモデルに基づくマージモード(以下、並進マージモードと呼ぶ)又はアフィンモーションモデルに基づくマージモード(以下、アフィンマージモードと呼ぶ)を意味することができる。即ち、並進マージモードと並進マージモードを組み合わせるか、アフィンマージモードとアフィンマージモードを組み合わせて動き補償予測を実行することができる。
一例として、第1マージ候補がアフィンマージ候補である場合、第2マージ候補もアフィンマージ候補として設定することができる。ここで、アフィンマージ候補は、基準候補を含むブロックの動きベクトルがアフィンモーションベクトルである場合を示す。第2マージ候補は、上記の様々な実施例におって特定されることができる。一例として、第2マージ候補は、第1マージ候補の隣接マージ候補として設定されることができる。この場合、第1マージ候補に隣接するマージ候補がアフィンモーションモデルとして符号化されない場合、前記マージ候補の代わりにアフィンモーションモデルで符号化されたマージ候補を第2マージ候補として設定することができる。
逆に、第1マージ候補がノンアファインマージ候補である場合、第2マージ候補もノンアファインマージ候補として設定することができる。この場合、第1マージ候補に隣接するマージ候補がアフィンモーションモデルで符号化された場合、前記マージ候補の代わりに並進モーションモデルで符号化されたマージ候補を第2マージ候補として設定することができる。
図40は、アフィンマージ候補の代わりにノンアファインマージ候補を第2マージ候補として設定する例を示す図面である。
merge_idxを介して位置A1にあるマージ候補が第1マージ候補として特定されると、インデックス値が第1マージ候補より1大きいマージ候補A2を第2マージ候補として選択することができる。この場合、第1マージ候補はノンアファインマージ候補であるが、第2マージ候補はアフィンマージ候補である場合、第2マージ候補を再設定することができる。一例として、merge_idx+1より大きいインデックスを有するマージ候補のうち、merge_idx+1との差分値がより小さいノンアファインマージ候補を第2マージ候補として再設定することができる。一例として、図18に示された例では、インデックスがmerge_idx+2であるマージ候補A3を第2マージ候補として設定することを示す。
別の例として、並進マージモードとアフィンマージモードを組み合わせて動き補償予測を実行することができる。即ち、第1マージ候補又は第2マージ候補のうちの1つは、アフィンマージ候補であり、もう1つは、ノンアファインマージ候補であり得る。
第1マージ候補及び第2マージ候補に基づいて統合された動き情報を導出し、統合された動き情報に基づいて、現在のブロックに対する動き補償予測を実行することもできる。一例として、第1マージ候補のモーションベクトル間の第2マージ候補のモーションベクトルの平均演算又は加重和演算に基づいて現在のブロックの動きベクトルを導出することができる。この場合、第1マージ候補のモーションベクトルに適用される重み値及び第2マージ候補のモーションベクトルに適用される重み値は、上記の実施例によって決定されることができる。
第1マージ候補がノンアファインマージ候補であり、第2アフィンマージ候補がアフィンマージ候補である場合、第2マージ候補のモーションベクトルをスケーリングすることにより現在のブロックの動きベクトルを導出することができる。式34は、現在のブロックの動きベクトルを導出する例を示す。
式34では、(mvX,mvY)は、現在のブロックの動きベクトルを表し、(mv0x,mv0y)は、第1マージ候補の動きベクトルを表し、(mv1x,mv1y)は、第2マージ候補の動きベクトルを表す。Mは、スケーリングパラメータを表す。Mは、符号化器及び復号化器で事前に定義されることができる。又は、現在のブロック又は候補ブロックのサイズに従って、スケーリングパラメータMの値を決定することができる。一例として、第2候補ブロックの幅又は高さが32より大きい場合には、Mを3に設定し、そう以外のない場合には、Mを2に設定することができる。
マージモードとモーションベクトル予測モードを組み合わせされた予測モードでは、マージ候補から導出された動き情報を使用して第1予測ブロックを生成し、モーションベクトル予測候補から導出されたモーションベクトルを使用して第2予測ブロックを生成することができる。
モーションベクトル予測モードでは、現在のブロックに隣接する隣接ブロック又は同位置画像内の同位置ブロックから動きベクトル予測候補を導出することができる。その後、複数の動きベクトル予測候補のうちのいずれか1つを特定し、特定された動きベクトル予測候補を現在のブロックの動きベクトル予測値に設定することができる。その後、現在のブロックの動きベクトル予測値と動きベクトル差分値を加算して現在のブロックの動きベクトルを導出することができる。
マージモードとモーションベクトル予測モードを組み合わせされた予測モードでは、同じ候補ブロックからマージ候補及び動きベクトル予測候補を導出することができる。一例として、merge_idxを介してマージ候補を特定すると、特定されたマージ候補を導出するために使用された候補ブロックの動きベクトルを動きベクトル予測値に設定することができる。又は、mvp_flagを介して動きベクトル予測候補を特定すると、特定されたマージ候補を導出するために使用された候補ブロックから導出されたマージ候補を選択することができる。
又は、マージ候補を導出するために使用された候補ブロックとモーションベクトル予測候補を導出するために使用された候補ブロックが異なる可能性がある。一例として、現在のブロックの上部に位置する候補ブロックから導出されたマージ候補を選択すると、現在のブロックの左側に位置する候補ブロックから導出されたモーションベクトル予測候補を選択するように設定することができる。
又は、インデックス情報によって選択されたマージ候補及びインデックス情報によって選択されたモーションベクトル予測候補が同じ候補ブロックから導出されたものである場合、前記モーションベクトル予測候補を前記候補ブロックに隣接する候補ブロックから導出されたモーションベクトル予測候補に置き換えるか、前記マージ候補を前記候補ブロックに隣接する候補ブロックから導出されたマージ候補に置き換えることができる。
図41は、マージ候補が置換される例を示す図面である。
図41の(a)に示された例では、位置A2にある候補ブロックから導出されたマージ候補及びモーションベクトル予測候補が選択されていることが示されている。示されたように、マージ候補及びモーションベクトル予測候補が同じ候補ブロックから導出された場合、前記マージ候補又は前記モーションベクトル予測候補の代わりに、前記候補ブロックに隣接する候補ブロックから導出されたマージ候補又はモーションベクトル予測候補を使用することができる。一例として、図41の(b)に示された例のように、位置A2にあるマージ候補の代わりに位置A1にあるマージ候補を使用することができる。
現在のブロックのマージ候補に基づいて、第1予測ブロックを導出し、動きベクトル予測候補に基づいて、第2予測ブロックを導出することができる。その後、第1予測ブロックと第2予測ブロックの加重和演算により、組み合わせ予測ブロックを導出することができる。この場合、マージモードで生成された第1予測ブロックに適用される重み値より大きい値を有するようにモーションベクトル予測モードで生成された第2予測ブロックに適用される重み値を設定することができる。
元の映像から予測映像を差分して導出された残差映像を導出することができる。この場合、残差映像を周波数ドメインに変更したとき、周波数成分のうち、高周波成分を除去しても、映像の主観的画質は大きく落ちない。これにより、高周波成分の値を小さく変換したり、高周波成分の値を0に設定すると、視覚的歪みが大きく発生していないながらも、圧縮効率を向上させることができる効果がある。上記の特性を反映して、残差映像を2次元周波数成分に分解するために、現在のブロックを変換することができる。前記変換は、離散コサイン変換(DCT:Discrete Cosine Transform)又は離散サイン変換(DST:Discrete Sine Tranform)などの変換技術を使用して実行することができる。
DCTは、コサイン変換を使用して、残差映像を2次元周波数成分に分解(又は変換)し、DSTは、サイン変換を使用して、残差映像を2次元周波数成分に分解(又は変換)する。残差映像の変換結果、周波数成分を基本映像として表現することができる。一例として、NxNサイズのブロックに対してDCT変換を実行する場合、N2個の基本的なパータンの成分を取得することができる。変換を介してNxNサイズのブロックに含まれた基本的なパータンの成分のそれぞれのサイズを取得することができる。使用された変換技術に従って、基本的なパータンの成分のサイズをDCT係数又はDST係数と称することができる。
変換技術DCTは主に、0ではない低周波成分が多く分布する映像を変換するために使用される。変換技術DSTは主に、高周波成分が多く分布する映像に使用される。
DCT又はDST以外の変換技術を使用して残差映像を変換することもできる。
以下、残差映像を2次元周波数成分に変換することを2次元映像変換と称することができる。さらに、変換結果によって取得された基本的なパータンの成分のサイズを変換係数と称することにする。一例として、変換係数は、DCT係数又はDST係数を意味することができる。後述される第1変換及び第2変換が全て適用された場合、変換係数は、第2変換の結果で生成された基本的なパータンの成分のサイズを意味することができる。
変換技術はブロック単位で決定されることができる。現在のブロックの予測符号化モード、現在のブロックのサイズ又は現在のブロックのサイズのうちの少なくとも1つに基づいて、変換技術を決定することができる。一例として、イントラ予測モードで現在のブロックを符号化し、現在のブロックのサイズがNxNより小さい場合、変換技術DSTを使用して変換を行うことができる。もう一方では、前記条件を満たさない場合、変換技術DCTを使用して変換を行うことができる。
残差映像の一部のブロックについては、2次元映像変換が実行されないこともある。2次元映像変換を実行しないことを変換スキップ(Transform Skip)と称することができる。変換スキップが適用された場合、変換が行われなかった残差値を対象として量子化を適用することができる。
DCT又はDSTを使用して現在のブロックを変換した後、変換された現在のブロックを再変換することができる。この場合、DCT又はDSTに基づく変換を第1変換と定義し、第1変換が適用されたブロックを再変換することを第2変換と定義することができる。
第1変換は、複数の変換コア候補のいずれか1つを使用して実行することができる。一例として、DCT2、DCT8又はDCT7のいずれか1つを使用して第1変換を実行することができる。
水平方向及び垂直方向に対して異なる変換コアを使用することもできる。ビットストリームを介して、水平方向の変換コアと垂直方向の変換コアの組み合わせを示す情報をシグナリングすることもできる。
第1変換と第2変換の実行単位が異なる可能性がある。一例として、8x8ブロックに対して第1変換を実行し、変換された8x8ブロックのうち、4x4サイズのサブブロックに対して第2変換を実行することができる。この場合、第2変換が実行されていない残りの領域の変換係数を0に設定することもできる。
又は、4x4ブロックに対して第1変換を実行し、変換された4x4ブロックを含む8x8サイズの領域に対して第2変換を実行することもできる。
ビットストリームを介して、第2変換を実行しかどうかを表す情報をシグナリングすることができる。
復号化器は、第2変換の逆変換(第2逆変換)を実行し、その実行結果に、第1変換の逆変換(第1逆変換)を実行することができる。前記第2逆変換及び第1逆変換の実行結果として、現在のブロックに対する残差信号を取得することができる。
量子化は、ブロックのエナジーを減らすためであり、量子化プロセスは、変換係数を特定の定数で除算するプロセスを含む。前記定数は、量子化パラメータによって導出されてもよく、量子化パラメータは、1から63の間の値として定義されることができる。
符号化器で変換及び量子化を行うと、復号化器は、逆量子化及び逆変換を介して残差ブロックを取得することができる。復号化器では、予測ブロックと残差ブロックを加算して、現在のブロックに対する再構成ブロックを取得することができる。
現在のブロックの再構成ブロックを取得すると、インループフィルタリング(In-loop filtering)を介して量子化及び符号化中に発生する情報の損失を減らすことができる。インループフィルタは、デブロッキングフィルタ(Deblocking filter)、サンプル適応オフセットフィルタ(SAO:Sample Adaptive Offset filter)又は適応ループフィルタ(ALF:Adaptive Loop Filter)のうちの少なくとも1つを含み得る。以下、インループフィルタが適用される前の再構成ブロックを第1再構成ブロックと呼称し、インループフィルタが適用された後の再構成ブロックを第2再構成ブロックと称することにする。
デブロッキングフィルタ、SAO又はALFのうちの少なくとも1つを第1再構成ブロックに適用して第2再構成ブロックを取得することができる。この場合、SAO又はALFは、デブロッキングフィルタが適用された後に適用されることができる。
デブロッキングフィルタは、ブロック単位で量子化を行うことにより発生される、境界におけるブロックの画質劣化(Blocking Artifact)を緩和させるためのものである。デブロッキングフィルタを適用するために、第1再構成ブロックと、隣接する再構成ブロックとの間のブロック強度(BS:Blocking Strength)を決定することができる。
図42は、ブロックの強度を決定するプロセスを示すフローチャートである。
図42に示された例では、Pは、第1再構成ブロックを表し、Qは、隣接する再構成ブロックを表す。ここで、隣接する再構成ブロックは、現在のブロックの左側又は上部に隣接することができる。
図42に示された例では、P及びQの予測符号化モード、0ではない変換係数が含まれているかどうか、同じ参照画像を使用してインター予測されたかどうか又は動きベクトルの差分値が閾値より大きいか等しいかを考慮してブロック強度を決定することを示す。
ブロック強度に基づいて、デブロッキングフィルタが適用されているかどうかを決定することができる。一例として、ブロック強度が0である場合、フィルタリングが行わないことができる。
SAOは、周波数領域で量子化を行うことにより生成されるリンギング現象(Ringing Artifact)を緩和させるためのものである。第1再構成映像のパータンを考量して決定されるオフセットを加算又は減算することによりSAOを実行することができる。オフセットの決定方法は、エッジオフセット(EO:Edge Offset)又はバンドオフセット(Band Offset)を含む。EOは、周辺画素のパータンに従って、現在のサンプルのオフセットを決定する方法を示す。BOは、領域内で類似した輝度値を有する画素の集合に対して共通のオフセットを適用する方法を示す。具体的に、画素の明るさを32個の均等な区間に分けて、類似した輝度を有する画素を1つの集合として設定することができる。一例として、32個のバンドのうち、隣接する4つのバンドを1つのグループとして設定し、4つのバンドに属するサンプルに同じオフセット値を適用することができる。
ALFは、事前に定義されたサイズ/形状のフィルタを第1再構成映像又はデブロッキングフィルタが適用された再構成映像に適用して第2再構成映像を生成する方法である。式35は、ALFの適用例を示す。
画像、符号化ツリーユニット、符号化ブロック、予測ブロック又は変換ブロック単位で、事前に定義されたフィルタ候補のうちのいずれか1つを選択することができる。各フィルタ候補は、サイズ又は形状のいずれか1つが異なる可能性がある。
図43は、事前に定義されたフィルタ候補を示す。
図43に示された例のように、5x5、7x7又は9x9サイズのダイアモンド形状のうちの少なくとも1つを選択することができる。
クロマ成分については、5x5サイズのダイアモンド形状のみを使用することができる。
復号化プロセス又は符号化プロセスを中心に説明した実施例を、符号化プロセス又は復号化プロセスに適用することは、本発明の範囲に含まれるものである。所定の順序で説明された実施例を、説明されたものと異なる順序に変更することも、本発明の範囲に含まれるものである。
上記の実施例は、一連のステップ又はフローチャートに基づいて説明したが、これは、発明の時系列シーケンスを限定するものではなく、必要に応じて同時に実行するか、別の順序で実行することができる。また、上記の実施例では、ブロック図を構成する構成要素(例えば、ユニット、モジュールなど)のそれぞれは、ハードウェア装置又はソフトウェアで具現することもでき、複数の構成要素を組み合わせて1つのハードウェア装置又はソフトウェアで具現することがこともできる。上記の実施例は、様々なコンピュータ構成要素によって実行されることができるプログラム命令の形態で具現され、コンピュータ可読記憶媒体に記憶されることができる。前記コンピュータ可読記憶媒体は、プログラム命令、データファイル、データ構造などを独立又は組み合わせて含むことができる。コンピュータ可読記憶媒体の例は、ハードディスク、フロッピーディスク及び磁気テープなどの磁気媒体、CD-ROM、DVDなどの光記憶媒体、プティカルディスク(floptical disk)などの磁気‐光媒体(magneto-optical media)、及びROM、RAM、フラッシュメモリなどのプログラム命令を記憶して実行するように特別に構成されたハードウェア装置を含む。前記ハードウェア装置は、本発明に係る処理を行うために、1つ又は複数のソフトウェアモジュールとして実行するように構成され、その逆も同様である。