以下、図面を参照しながら、本発明の実施例を詳しく説明する。
ビデオの符号化及び復号は、ブロックを単位として実行される。例えば、符号化ブロック、変換ブロック又は予測ブロックに対して、変換、量子化、予測、ループフィルタリング又は再構成などの符号化/復号処理を行うことができる。
以下、符号化/復号されるべきブロックを「現在ブロック」と呼ぶ。例えば、現在符号化/復号処理ステップによれば、現在ブロックは、符号化ブロック、変換ブロック又は予測ブロックを表すことができる。
なお、本明細書で用いられる用語「ユニット」は、特定の符号化/復号プロセスを実行するための基本ユニットを表し、また、「ブロック」は、所定の大きさのサンプルアレイを表すと理解されてもよい。特に明記しない限り、「ブロック」と「ユニット」は、相互交換可能に用いられる。例えば、後述される実施例において、符号化ブロック及び符号化ユニットは、同様な意味を有すると理解されてもよい。
図1は、本発明の実施例によるビデオエンコーダ(encoder)を示すブロック図である。
図1を参照すると、ビデオ符号化機器100は、画像分割部110、予測部120、125、変換部130、量子化部135、再配列部160、エントロピー符号化部165、逆量子化部140、逆変換部145、フィルタ部150及びメモリ155を備えてもよい。
図1に示す各部材は、単独で示されてビデオ符号化機器における互いに異なる特徴的機能を表すが、各部材が分離したハードウェア又は単一のソフトウェアアセンブリで構成されることを表しない。つまり、各部材について、説明しやすくするために、各部材を配列することで、各部材のうちの少なくとも2つの部材を組み合わせて1つの部材を構成するか又は1つの部材を複数の部材に分けて、これにより機能を実行する。本発明の本質を逸脱しない限り、このような各部材を整合する実施例及び各部材を分離させる実施例も本発明の権利範囲に属する。
なお、一部の構成要素は、本発明における本質機能を実行するための必須な構成要素ではなく、性能を向上させるための選択可能な構成要素だけである。本発明は、性能を向上させるだけに用いられる構成要素以外の、本発明の本質の実現に必要な部材のみを含むことで実行されてもよく、また、性能を向上させるだけに用いられる選択的な構成要素以外の必須な構成要素のみを含む構造も本発明の権利範囲に属する。
画像分割部110は、入力された画像を少なくとも1つの処理ユニットに分割することができる。この場合、処理ユニットは、予測ユニット(Prediction Unit:PU)であってもよく、変換ユニット(Transform Unit:TU)であってもよく、更に符号化ユニット(Coding Unit:CU)であってもよい。画像分割部110は、1つの画像を複数の符号化ユニット、予測ユニット及び変換ユニットの組み合わせに分割する。所定の基準(例えば、コスト関数)に基づいて符号化ユニット、予測ユニット及び変換ユニットの組み合わせを選択して画像を符号化することができる。
例えば、1つの画像を複数の符号化ユニットに分割することができる。画像を符号化ユニットに分割するために、四分木構造(Quad Tree Structure)のような再帰的ツリー構造を用いて、1つのビデオ又は最大符号化ユニット(largest coding unit)をルートとして符号化ユニットを他の符号化ユニットに分割することができる。前記他の符号化ユニットは、分割された符号化ユニットの数と同じである数の子ノードを有してもよい。幾つかの制限によって分割されない符号化ユニットは、リーフノードとなる。つまり、1つの符号化ユニットが正方形分割だけを実現できると仮定する場合、1つの符号化ユニットを最大限4つの他の符号化ユニットに分割することができる。
以下、本発明の実施例において、符号化ユニットは、符号化を実行するユニットを指してもよく、復号を実行するユニットを指してもよい。
1つの符号化ユニットにおける予測ユニットを大きさが同じである正方形又は矩形のうちの少なくとも1つなどの形状に分割することができ、1つの符号化ユニットにおける1つの予測ユニットを形状及び/又は大きさがもう1つの予測ユニットと異なるものに分割することもできる。
符号化ユニットに基づいてイントラ予測を実行する予測ユニットが最小符号化ユニットではない場合、複数の予測ユニットN×Nに分割する必要がなく、イントラ予測を実行することができる。
予測部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つの参照画素を用いることができる。
イントラ予測において、予測モードは、予測方向に基づいて参照画素情報を用いる角度予測モード及び予測を実行する場合に方向情報を使用しない非角度モードを有してもよい。輝度情報を予測するためのモードは、色度情報を予測するためのモードと異なってもよい。色度情報を予測するために、輝度情報を予測するためのイントラ予測モード情報又は予測された輝度信号情報を用いることができる。
イントラ予測を実行する場合、予測ユニットの大きさが変換ユニットの大きさと同じであると、予測ユニットの左側に位置する画素、左上に位置する画素、上方に位置する画素に基づいて、予測ユニットに対してイントラ予測を実行することができる。しかしながら、イントラ予測を実行する場合、予測ユニットの大きさが変換ユニットの大きさと異なると、変換ユニットの参照画素に基づいてイントラ予測を実行することができる。なお、最小符号化ユニットのみに対して、N×N分割を用いたイントラ予測を適用することができる。
予測モードに基づいて参照画素に対して適応的イントラ平滑化(AIS:Adaptive Intra Smoothing)フィルタを適用した後、イントラ予測方法で、予測ブロックを生成することができる。参照画素に適用される適応的イントラ平滑化フィルタのタイプは異なる可能性がある。イントラ予測方法を実行するために、現在予測ユニットの周辺に位置する予測ユニットのイントラ予測モードに基づいて、現在予測ユニットのイントラ予測モードを予測することができる。周辺予測ユニットから予測されたモード情報を用いて現在予測ユニットの予測モードを予測する場合、現在予測ユニットのイントラ予測モードが周辺予測ユニットのイントラ予測モードと同じであると、所定のフラグ情報を用いて、現在予測ユニットの予測モードが周辺予測ユニットと同じであることを表す情報を伝送することができる。現在予測ユニットの予測モードが周辺予測ユニットの予測モードと異なると、エントロピー符号化を実行することで、現在ブロックの予測モード情報を符号化することができる。
なお、予測部120、125で生成された予測ユニットに基づいて予測を実行する予測ユニットと予測ユニットのオリジナルブロックとの差分値である残差値情報を含む残差ブロックを生成することができる。生成された残差ブロックを変換部130に入力することができる。
変換部130において、離散コサイン変換(DCT:Discrete Cosine Transform)、離散サイン変換(DST:Discrete Sine Transform)などの変換方法で、オリジナルブロックと、予測部120及び125により生成された予測ユニット間の残差値(residual)情報を含む残差ブロックと、に対して変換を行うことができる。ここで、DCT変換カーネルは、DCT2又はDCT8のうちの少なくとも1つを含み、DSTcは、DST7を含む。残差ブロックを変換するためにDCTを適用するかそれともDSTを適用するかについて、残差ブロックを生成するための予測ユニットのイントラ予測モード情報に基づいて決定することができる。残差ブロックに対する変換をスキップすることもできる。残差ブロックに対する変換をスキップするかどうかを表すフラグを符号化することができる。大きさが閾値以下である残差ブロック、輝度成分又は色度成分(4:4:4フォーマット以下)について、変換をスキップすることを許容できる。
量子化部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で生成された残差値と、予測部120、125に含まれる動き予測部、動き補償部及びイントラ予測部により予測された予測ユニットと、をマージすることで、再構成ブロック(Reconstructed Block)を生成することができる。
フィルタ部150は、デブロッキングフィルタ、オフセット補正部(offset correction unit)、適応型ループフィルタ(ALF:Adaptive Loop Filter)のうちの少なくとも1つを含み得る。
デブロッキングフィルタは、ブロック間の境界により、再構成された画像で生成されたブロック歪みを除去することができる。デブロッキングを実行するかどうかを判定するために、ブロックに含まれる幾つかの列又は行に含まれる画素に基づいて、現在ブロックに対してデブロッキングフィルタを適用するかどうかを判定することができる。ブロックに対してデブロッキングフィルタを適用する場合、必要なデブロッキングフィルタリング強度に基づいて強フィルタ(Strong Filter)又は弱フィルタ(Weak Filter)を適用することができる。なお、デブロッキングフィルタを用いる過程において、垂直フィルタリング又は水平フィルタリングを実行する場合、水平方向フィルタリング及び垂直方向フィルタリングを同期して実行することができる。
オフセット補正部は、画素単位で、デブロッキングされるビデオにおける、オリジナルビデオとのオフセットを補正することができる。下記方式で、指定した画像に対してオフセット補正を行うことができる。つまり、ビデオに含まれる画素を所定の数の領域に分割した後、オフセット実行を必要とする領域を決定し、対応する領域に対してオフセットを適用するか又は各画素の縁情報を考慮してオフセットを適用する。
フィルタリングされた再構成画像とオリジナルビデオを比較した値に基づいて、適応的ループフィルタリング(ALF:Adaptive Loop Filtering)を実行することができる。ビデオに含まれる画素を所定のグループに分割した後、該当するグループに用いられる1つのフィルタを決定することで、各グループに対してフィルタリングを差別的に実行することができる。適応的ループフィルタリングを適用するかどうかに関わる情報及び輝度情報を符号化ユニット(Coding Unit:CU)に応じて伝送することができる。適用される適応的ループフィルタの形状及びフィルタ係数は、各ブロックによって異なる。なお、適用されるブロックの特性に関わらず、同一タイプ(一定のタイプ)の適応的ループフィルタを適用することもできる。
メモリ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変換カーネルは、DCT2又はDCT8のうちの少なくとも1つを含んでもよく、DST変換カーネルは、DST7を含み得る。代替的には、ビデオエンコーダにおいて変換をスキップすると、逆変換部225は、逆変換を実行しなくてもよい。逆変換は、ビデオエンコーダで決定された伝送ユニットにより実行されてもよい。ビデオデコーダの逆変換部225において、予測方法、現在ブロックの大きさ及び予測方向などの複数の情報に基づいて、変換方法(例えば、DCT又はDST)を選択的に実行することができる。
予測部230、235は、エントロピー復号部210により提供された、予測ブロックの生成に関わる情報及びメモリ245により提供された先に復号されたブロック又は画像情報に基づいて、予測ブロックを生成することができる。
上述したように、ビデオエンコーダにおける操作方式と同じである方式でイントラ予測を実行する場合、予測ユニットの大きさが変換ユニットの大きさと同じであると、予測ユニットの左側に位置する画素、左上に位置する画素、上方に位置する画素に基づいて、予測ユニットに対してイントラ予測を実行する。イントラ予測を実行する場合、予測ユニットの大きさが変換ユニットの大きさと異なると、変換ユニットの参照画素に基づいてイントラ予測を実行することができる。なお、最小符号化ユニットのみに対して、N×N分割を用いたイントラ予測を適用することができる。
予測部230、235は、予測ユニット判定部、インター予測部及びイントラ予測部を含み得る。予測ユニット判定部は、エントロピー復号部210から入力された予測ユニット情報、イントラ予測方法の予測モード情報、インター予測方法の動き予測関連情報などの複数の情報を受信し、現在符号化ユニットに基づいて、予測ユニットを分類し、予測ユニットがインター予測を実行しているかそれともイントラ予測を実行しているかを決定する。インター予測部230は、ビデオエンコーダにより提供された、現在予測ユニットのインター予測の実行に必要な情報を用いて、現在予測ユニットが属する現在画像の直前の画像又は直後の画像のうちの少なくとも1つの画像に含まれる情報に基づいて、現在予測ユニットに対してインター予測を実行することができる。代替的には、現在予測ユニットが属する現在画像における再構成された一部の領域の情報に基づいて、インター予測を実行することもできる。
インター予測を実行するために、符号化ユニットに基づいて、対応する符号化ユニットに含まれる予測ユニットの動き予測方法がスキップモード(Skip Mode)、マージモード(Merge Mode)、アドバンスド動きベクトル予測モード(AMVP Mode)、イントラブロック複製モードのうちのどちらであるかを判定することができる。
イントラ予測部235は、現在画像における画素情報に基づいて予測ブロックを生成することができる。予測ユニットが、イントラ予測を実行した予測ユニットである場合、ビデオエンコーダから提供された予測ユニットのイントラ予測モード情報に基づいて、イントラ予測を実行することができる。イントラ予測部235は、適応的イントラ平滑化(AIS:Adaptive Intra Smoothing)フィルタ、参照画素補間部、DCフィルタを含み得る。適応的イントラ平滑化フィルタは、現在ブロックの参照画素に対してフィルタリングを実行する部分であり、また、現在予測ユニットの予測モードに基づいて、フィルタを適用するかどうかを決定することができる。ビデオエンコーダから提供された予測ユニットの予測モード及び適応的イントラ平滑化フィルタ情報を用いて、現在ブロックの参照画素に対して適応的イントラ平滑化フィルタリングを実行することができる。現在ブロックの予測モードが、適応的イントラ平滑化フィルタリングを実行しないモードであると、適応的イントラ平滑化フィルタを適用しなくてもよい。
参照画素補間部について言えば、予測ユニットの予測モードが、参照画素に対して補間を行う画素値に基づいてイントラ予測を実行する予測ユニットであると、参照画素に対して補間を行うことで、整数値又はその以下の画素単位の参照画素を生成することができる。現在予測ユニットの予測モードが、参照画素に対して補間を行わない方式で予測ブロックを生成する予測モードであると、参照画素に対して補間を行わなくてもよい。現在ブロックの予測モードがDCモードであると、DCフィルタは、フィルタリングにより予測ブロックを生成することができる。
再構成されたブロック又は画像をフィルタ部240に提供することができる。フィルタ部240は、デブロッキングフィルタ、オフセット補正部、ALFを含み得る。
ビデオエンコーダから、該当するブロック又は画像に対してデブロッキングフィルタを適用するかどうかに関わる情報及びデブロッキングフィルタを適用する場合に強フィルタを用いるかそれとも弱フィルタを用いるかに関わる情報を受信することができる。ビデオデコーダのデブロッキングフィルタは、ビデオエンコーダから提供された、デブロッキングフィルタに関わる情報を受信することができ、また、ビデオデコーダは、該当するブロックに対してデブロッキングフィルタリングを実行することができる。
オフセット補正部は、符号化を行う場合にビデオに適用されるオフセット補正のタイプ及びオフセット情報に基づいて、再構成された画像に対してオフセット補正を実行することができる。
エンコーダから提供された、ALFを適用するかどうかに関わる情報、ALF係数情報等に基づいて、ALFを符号化ユニットに適用することができる。このようなALF情報は、特定のパラメータ集合に含まれることで提供されてもよい。
メモリ245は、再構成された画像又はブロックを記憶し、前記画像又はブロックを参照画像又は参照ブロックとして利用できるようになり、また、再構成された画像を出力部に提供することができる。
図3は、本発明の実施例による基本符号化ツリーユニットを示す図である。
大きさが最も大きい符号化ブロックを符号化ツリーブロックと定義することができる。1つの画像は、複数の符号化ツリーユニット(符号化ツリーユニットは、大きさがCoding Tree Unit:CTU)に分割されてもよい。最も大きい符号化ユニットであり、最大符号化ユニット(LCU:Largest Coding Unit)と呼ばれてもよい。図3は、1つの画像を複数の符号化ツリーユニットに分割する例を示す。
符号化ツリーユニットの大きさは、画像レベル又はシーケンスレベルで定義されてもよい。このため、画像パラメータ集合又はシーケンスパラメータ集合により、信号を用いて、符号化ツリーユニットの大きさを示す情報を送信することができる。
例えば、シーケンスにおける画像全体の符号化ツリーユニットの大きさを128×128とすることができる。代替的には、画像レベルの128×128又は256×256のうちのいずれか1つを符号化ツリーユニットの大きさと決定することができる。例えば、第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つに基づいて、第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つの符号化ブロックのうちの1番目の符号化ブロック及び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予測)のうちのいずれか1つを指す。現在ブロックの予測方向に基づいて、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パラメータアフィン動きモデルを適用することを表す。前記フラグは、スライス、画像ブロック又はブロック(例えば、符号化ブロック又は符号化ツリーユニット)を単位として符号化を行うことができる。スライスレベルで、信号を用いてフラグを送信する場合、前記スライスに属する全てのブロックに対して、前記スライスレベルで決定されたアフィン動きモデルを適用することができる。
代替的には、現在ブロックのアフィンインター予測モードに基づいて、現在ブロックのアフィン動きモデルを決定することができる。例えば、アフィンマージモードを適用する場合、現在ブロックのアフィン動きモデルを4パラメータ動きモデルと決定することができる。一方で、アフィン動きベクトル予測モードを適用する場合、現在ブロックのアフィン動きモデルを決定するための情報に対して符号化を行い、ビットストリームを介して信号で送信することができる。例えば、現在ブロックに対してアフィン動きベクトル予測モードを適用する場合、1ビットフラグ「affine_type_flag」に基づいて、現在ブロックのアフィン動きモデルを決定することができる。
次に、現在ブロックのアフィンシードベクトルを導出することができる(S802)。4パラメータアフィン動きモデルを選択した場合、現在ブロックの2つの制御点での動きベクトルを導出することができる。なお、6パラメータアフィン動きモデルを選択した場合、現在ブロックの3つの制御点での動きベクトルを導出することができる。制御点での動きベクトルをアフィンシードベクトルと呼ぶことができる。制御点は、現在ブロックの左上隅、右上隅又は左下隅のうちの少なくとも1つを含み得る。
図9は、各アフィン動きモデルのアフィンシードベクトルの例を示す図である。
4パラメータアフィン動きモデルにおいて、左上隅、右上隅又は左下隅のうちの2つに関わるアフィンシードベクトルを導出することができる。例えば、図9の(a)に示す例のように、4パラメータアフィン動きモデルを選択した場合、現在ブロックの左上隅(例えば、左上サンプル(x0,y0))に関わるアフィンシードベクトルsv0及び現在ブロックの右上隅(例えば、右上サンプル(x1,y1))に関わるアフィンシードベクトルsv1を用いてアフィンベクトルを導出することができる。また、左上隅に関わるアフィンシードベクトルの代わりに、左下隅に関わるアフィンシードベクトルを用いることもできる。又は、右上隅に関わるアフィンシードベクトルの代わりに、左下隅に関わるアフィンシードベクトルを用いることもできる。
6パラメータアフィン動きモデルにおいて、左上隅、右上隅及び左下隅に関わるアフィンシードベクトルを導出することができる。例えば、図9の(b)に示す例のように、6パラメータアフィン動きモデルを選択し場合、現在ブロックの左上隅(例えば、左上サンプル(x0,y0))に関わるアフィンシードベクトル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個のブロック列に属する左側ブロックを候補ブロックとすることができる。この場合、MをNより大きいものとすることで、左側候補ブロックの数を上候補ブロックの数より大きいものとすることができる。
例えば、例えば、現在ブロック内の参照サンプルのy軸座標と候補ブロックとして利用可能である上ブロックのy軸座標との差分値を現在ブロックの高さのN倍以下にすることができる。なお、現在ブロック内の参照サンプルのx軸座標と候補ブロックとして利用可能である左側ブロックのx軸座標との差分値を現在ブロックの幅のM倍以下にすることができる。
例えば、図14に示す例において、現在ブロックの上方の2つのブロック列に属するブロック及び現在ブロックの左側の5つのブロック列に属するブロックを候補ブロックとすることを図示する。
もう1つの例として、候補ブロックは、現在ブロックと同一の符号化ツリーユニットに属しない場合、前記候補ブロックの代わりに、現在ブロックと同一の符号化ツリーユニットに属するブロック、又は前記符号化ツリーユニットの境界に隣接する参照サンプルを含むブロックを用いて、マージ候補を導出することができる。
図15は、参照サンプルの位置の変動例を示す図である。
参照サンプルが現在ブロックと異なる符号化ツリーユニットに含まれ、且つ前記参照サンプルが前記符号化ツリーユニットの境界に隣接しない場合、前記参照サンプルの代わりに、前記符号化ツリーユニットの境界に隣接する参照サンプルを用いて候補ブロック参照サンプルを決定することができる。
例えば、図15(a)及び図15(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つのインデックスを示す情報を送信することができる。
isAdjacentMergeflagが1である場合、信号を用いて、隣接マージ候補のうちのいずれか1つを決定するためのシンタックス要素merge_idxを送信することができる。シンタックス要素merge_idxの最大値を隣接マージ候補の数との差分値が1である値とすることができる。
isAdjacentMergeflagが0である場合、信号を用いて、非隣接マージ候補のうちのいずれか1つを決定するためのシンタックス要素NA_merge_idxを送信することができる。シンタックス要素NA_merge_idxは、非隣接マージ候補のインデックスと隣接マージ候補の数との差を求めることで得られた値を示す。デコーダは、NA_merge_idxに基づいてインデックスに隣接マージ候補の数を加算することで、非隣接マージ候補を選択することができる。
マージ候補リストに含まれるマージ候補の数が閾値未満である場合、予測領域動き情報リストに含まれるマージ候補をマージ候補リストに追加することができる。ここで、閾値は、マージ候補リストに含まれる最大マージ候補数又は最大マージ候補数からオフセット値を減算した値であってもよい。オフセット値は、1又は2等の整数であってもよい。インター動き情報リストは、現在ブロックの前に符号化/復号されたブロックに基づいて導出されたマージ候補を含み得る。
予測領域動き情報リストは、現在画像におけるインター予測に基づいて符号化/復号されたブロックから導出されたマージ候補を含む。例えば、予測領域動き情報リストに含まれるマージ候補の動き情報を、インター予測に基づいて符号化/復号されたブロックの動き情報に等しいように設定することができる。ここで、動き情報は、動きベクトル、参照画像インデックス、予測方向又は双方向加重値インデックスのうちの少なくとも1つを含み得る。
解釈の便宜上、予測領域動き情報リストに含まれるマージ候補を予測領域マージ候補と呼ぶ。
エンコーダ及びデコーダにより、予測領域動き情報リストに含まれることが可能であるマージ候補の最大数を事前定義することができる。例えば、予測領域動き情報リストに含まれることが可能であるマージ候補の最大数は、1、2、3、4、5、6、7、8又はそれ以上(例えば、16)であってもよい。
代替的には、ビットストリームを介して、信号で、予測領域動き情報リストに含まれることが可能であるマージ候補の最大数を示す情報を送信することができる。前記情報は、シーケンスレベル、画像レベル又はスライスレベルで、信号により送信される。前記情報は、予測領域動き情報リストに含まれることが可能であるマージ候補の最大数を示すことができる。代替的には、前記情報は、予測領域動き情報リストに含まれることが可能であるマージ候補の最大数とマージ候補リストに含まれることが可能であるマージ候補の最大数との差分値を示すことができる。
代替的には、画像の大きさ、スライスの大きさ又は符号化ツリーユニットの大きさによって予測領域動き情報リストに含まれるマージ候補の最大数を決定することができる。
画像、スライス(slice)、タイル(tile)、ブリック(brick)、符号化ツリーユニット、又は符号化ツリーユニットライン(行又は列)を単位として予測領域動き情報リストを初期化することができる。例えば、スライスが初期化されると、予測領域動き情報リストも初期化され、且つ、予測領域動き情報リストに如何なるマージ候補も含まれない可能性がある。
代替的には、ビットストリームを介して、信号で、予測領域動き情報リストを初期化するかどうかを示す情報を送信することができる。前記情報は、スライスレベル、タイルレベル、ブリックレベル又はブロックレベルで、信号により送信されてもよい。情報が予測領域動き情報リストの初期化を示す前に、配置された予測領域動き情報リストを用いることができる。
代替的には、画像パラメータ集合又はスライスヘッダ(slice header)を介して、信号で、初期予測領域マージ候補に関わる情報を送信することができる。スライスが初期化されても、予測領域動き情報リストに初期予測領域マージ候補が含まれてもよい。従って、予測領域マージ候補は、スライスにおける一番先に符号化/復号されるターゲットであるブロックに用いられる。
代替的には、直前の符号化ツリーユニットの予測領域動き情報リストに含まれる予測領域マージ候補を初期予測領域マージ候補とすることができる。例えば、直前の符号化ツリーユニットの予測領域動き情報リストに含まれる予測領域マージ候補において、インデックスが最も小さい予測領域マージ候補又はインデックスが最も大きい予測領域マージ候補を初期予測領域マージ候補とすることができる。
ブロックは、符号化/復号順番に応じて符号化/復号される。また、インター予測に基づいて符号化/復号されたブロックは、符号化/復号の順番に応じて予測領域マージ候補と設定されてもよい。
図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]を予測領域動き情報リストHvmpCandリストから削除し、且つ、HmvpCand[3]からHmvpCand[n]のインデックスをそれぞれ1だけ減少させることが図示されている。
なお、現在ブロックから導出された予測領域マージ候補mvCandを予測領域動き情報リストの末尾に追加することができる。
代替的には、記憶された、現在ブロックに基づいて導出された予測領域マージ候補と同じである予測領域マージ候補に割り当てられたインデックスを更新することができる。例えば、記憶された予測領域マージ候補のインデックスを最小値又は最大値に変更することができる。
所定の領域に含まれるブロックの動き情報を予測領域動き情報リストに追加しないように設定されてもよい。例えば、マージ処理領域に含まれるブロックの動き情報に基づいて導出された予測領域マージ候補を予測領域動き情報リストに追加しなくてもよい。マージ処理領域に含まれるブロックの符号化/復号順番が定義されていないため、これらのブロックのうちのいずれか1つの動き情報を他のブロックのインター予測に用いることは、不適切である。従って、マージ処理領域に含まれるブロックに基づいて導出された予測領域マージ候補を予測領域動き情報リストに追加しなくてもよい。
代替的には、所定の大きさ未満であるブロックの動き情報を予測領域動き情報リストに追加しないように設定されてもよい。例えば、幅又は高さが4又は8未満である符号化ブロックの動き情報又は大きさが4×4である符号化ブロックの動き情報に基づいて導出された予測領域マージ候補を予測領域動き情報リストに追加しなくてもよい。
サブブロックを単位として動き補償予測を実行する場合、現在ブロックに含まれる複数のサブブロックのうちの代表的なサブブロックの動き情報に基づいて予測領域マージ候補を導出することができる。例えば、サブブロックマージ候補を現在ブロックに用いる場合、サブブロックのうちの代表的なサブブロックの動き情報に基づいて予測領域マージ候補を導出することができる。
サブブロックの動きベクトルは、下記順番に応じて導出されてもよい。まず、現在ブロックのマージ候補リストに含まれるマージ候補のうちのいずれか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予測領域動き情報リストに含まれる予測領域マージ候補をマージ候補リストに追加しても、マージ候補リストに含まれるマージ候補の数も最大数未満であると、長期動き情報リストHmvpLTCandリストに含まれる予測領域マージ候補をマージ候補リストに追加することができる。
表2は、長期動き情報リストに含まれる予測領域マージ候補をマージ候補リストに追加するプロセスを示す。
予測領域マージ候補は、動き情報に加えて他の情報を更に含むように設定されてもよい。例えば、予測領域マージ候補に対して、ブロックの大きさ、形状又は分割情報を別途記憶することができる。現在ブロックのマージ候補リストを構築する場合、インターマージ候補のうち、大きさ、形状、又はパーティション情報が現在ブロックと同様又は類似したインターマージ候補のみを用いる。又は、大きさ、形状又はパーティション情報が現在ブロックと同様又は類似したインターマージ候補を優先的にマージ候補リストに追加することができる。
代替的には、ブロックの大きさ、形状又は分割情報のそれぞれに対して、予測領域動き情報リストを生成することができる。複数の予測領域動き情報リストのうち、現在ブロックの形状、大きさ又は分割情報に対応する予測領域動き情報リストを用いることで、現在ブロックのマージ候補リストを生成することができる。
現在ブロックのマージ候補リストに含まれるマージ候補の数が閾値未満である場合、予測領域動き情報リストに含まれる予測領域マージ候補をマージ候補リストに追加することができる。前記追加プロセスは、インデックスの昇順又は降順に応じて実行される。例えば、まず、インデックスが最も大きい予測領域マージ候補をマージ候補リストに追加することができる。
予測領域動き情報リストに含まれる予測領域マージ候補をマージ候補リストに追加することが望まれる時、予測領域マージ候補とマージ候補リストに記憶されたマージ候補との間で冗長検出を実行することができる。
例えば、表3は、予測領域マージ候補をマージ候補リストに追加するプロセスを示す。
予測領域動き情報リストに含まれる一部の予測領域マージ候補のみに対して冗長検出を実行することができる。例えば、インデックスが閾値以上である予測領域マージ候補のみに対して冗長検出を実行することができる。代替的には、インデックスが最も大きいN個のマージ候補又はインデックスが最も小さいN個のマージ候補のみに対して冗長検出を実行することができる。
代替的には、マージ候補リストに記憶されたマージ候補のうちの一部のみに対して冗長検出を実行することができる。例えば、インデックスが閾値以上又は閾値以下であるマージ候補又は特定の位置のブロックから導出されたマージ候補のみに対して冗長検出を実行することができる。ここで、特定の位置は、現在ブロックの左側隣接ブロック、上隣接ブロック、右上隣接ブロック又は左下隣接ブロックのうちの少なくとも1つを含み得る。
図23は、一部のマージ候補のみに対して冗長検出を実行する例を示す図である。
予測領域マージ候補HmvpCand[j]をマージ候補リストに追加することが望まれる時、前記予測領域マージ候補と最大インデックスを有する2つのマージ候補mergeMandCandList[NumMerge-2]及びmergeCandList[NumMerge-1]とに対して、冗長検出を実行することができる。ここで、NumMergeは、利用可能な空間的マージ候補及び時間的マージ候補の数を表すことができる。
図示される例と異なっており、予測領域マージ候補HmvpCand[j]をマージ候補リストに追加することが望まれる時、前記予測領域マージ候補と最小インデックスを有する多くとも2つのマージ候補に対して冗長検出を実行することができる。例えば、mergeCandList[0]及びmergeCandList[1]がHmvpCand[j]と同じであるかどうかを確認することができる。
代替的には、特定の位置から導出されたマージ候補のみに対して冗長検出を実行することができる。例えば、現在ブロックの左側に位置する隣接ブロックから導出されたマージ候補又は現在ブロックの上方に位置する隣接ブロックから導出されたマージ候補のうちの少なくとも1つのみに対して冗長検出を実行することができる。マージ候補リストに、特定の位置から導出されたマージ候補が存在しない場合、冗長検出を実行することなく、予測領域マージ候補をマージ候補リストに追加することができる。
予測領域マージ候補HmvpCand[j]をマージ候補リストに追加することが望まれる時、前記予測領域マージ候補と最大インデックスを有する2つのマージ候補mergeMandCandList[NumMerge-2]及びmergeCandList[NumMerge-1]とに対して、冗長検出を実行することができる。ここで、NumMergeは、利用可能な空間的マージ候補及び時間的マージ候補の数を表すことができる。
一部の予測領域マージ候補のみに対してマージ候補との冗長検出を実行することができる。例えば、予測領域動き情報リストに含まれる予測領域マージ候補のうちの大きいインデックスを有するN個の予測領域マージ候補又は小さいインデックスを有するN個の予測領域マージ候補のみに対して冗長検出を実行することができる。例えば、予測領域動き情報リストに含まれる予測領域マージ候補の数とインデックスとの差分値が閾値以下である予測領域マージ候補のみに対して冗長検出を実行することができる。閾値が2である場合、予測領域動き情報リストに含まれる予測領域マージ候補のうちの最大インデックス値を有する3つの予測領域マージ候補のみに対して冗長検出を実行することができる。該3つの予測領域マージ候補以外の予測領域マージ候補に対して、冗長検出を省略することができる。冗長検出を省略する場合、前記予測領域マージ候補がマージ候補と同様な動き情報を有するかどうかに関わらず、予測領域マージ候補をマージ候補リストに追加することができる。
一方で、予測領域動き情報リストに含まれる予測領域マージ候補の数とインデックスとの差分値が閾値以上である予測領域マージ候補のみに対して冗長検出を実行するように設定されてもよい。
エンコーダ及びデコーダにおいて、冗長検出が実行される予測領域マージ候補の数を事前定義することができる。例えば、閾値は、0、1又は2等のような整数であってもよい。
代替的には、マージ候補リストに含まれるマージ候補の数及び予測領域動き情報リストに含まれる予測領域マージ候補の数のうちの少なくとも1つに基づいて、閾値を決定することができる。
第1予測領域マージ候補と同じであるマージ候補を見付けて、且つ第2予測領域マージ候補に対して冗長検出を実行する場合、第1予測領域マージ候補と同じであるマージ候補の冗長性検出を省略することができる。
図24は、特定のマージ候補に対する冗長検出を省略する例を示す図である。
インデックスiを有する予測領域マージ候補HmvpCand[i]をマージ候補リストに追加することが望まれる時、予測領域マージ候補とマージ候補リストに記憶されたマージ候補との間で冗長検出を実行する。この場合、予測領域マージ候補HmvpCand[i]と同じであるマージ候補mergeCandリスト[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である候補を表す。
大きさが符号化ブロックより大きいマージ処理領域を指定することができる。マージ処理領域に含まれる符号化ブロックは、順に符号化/復号されず、並行処理されてもよい。ここで、符号化/復号を順に行わないことは、符号化/復号の順番が指定されていないことを意味する。これにより、マージ処理領域に含まれるブロックの符号化/復号プロセスを独立して実行することができる。代替的には、マージ処理領域に含まれるブロックは、マージ候補を共有することができる。ここで、マージ候補は、マージ処理領域に基づいて導出されてもよい。
前記特徴によれば、マージ処理領域を並行処理領域、マージ共有領域(Shared Merge Region:SMR)又はマージ推定領域(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つのブロック(これは、実際に、前記ブロックが符号化/復号された後に符号化/復号される)に対して符号化/復号を行う場合、前記ブロックから導出された予測領域マージ候補を用いることがある。つまり、マージ処理領域に含まれるブロックに対して符号化/復号を行う場合に、ブロック間の依存性を排除すべきであるが、マージ処理領域に含まれるもう1つのブロックの動き情報を用いて動き予測補償を実行することがある。前記問題を解決するために、マージ処理領域に含まれるブロックに対する符号化/復号を既に完了しても、符号化/復号されたブロックの動き情報を予測領域動き情報リストに追加しなくてもよい。
代替的には、マージ処理領域に含まれるブロックに対して動き補償予測を実行する場合、事前定義された順番に応じて、前記ブロックから導出された予測領域マージ候補を予測領域動き情報リストに追加することができる。ここで、事前定義された順番は、マージ処理領域又は符号化ツリーユニットにおける符号化ブロックの走査順によって決まってもよい。前記走査順は、ラスタ走査、水平走査、垂直走査又はジグザグ走査のうちの少なくとも1つであってもよい。代替的には、事前定義された順番は、各ブロックの動き情報又は同一の動き情報を有するブロックの数によって決まってもよい。
代替的には、双方向動き情報を含む予測領域マージ候補の前に、一方向動き情報を含む予測領域マージ候補を予測領域マージリストに追加することができる。一方で、一方向動き情報を含む予測領域マージ候補の前に、双方向動き情報を含む予測領域マージ候補を予測領域マージ候補リストに追加することができる。
代替的には、マージ処理領域又は符号化ツリーユニットにおける高使用頻度又は低使用頻度の順番に応じて、予測領域マージ候補を予測領域動き情報リストに追加することができる。
マージ処理領域に現在ブロックが含まれ、且つ現在ブロックのマージ候補リストに含まれるマージ候補の数が最大数未満である場合、予測領域動き情報リストに含まれる予測領域マージ候補をマージ候補リストに追加することができる。この場合、現在ブロックと同一のマージ処理領域に含まれるブロックから導出された予測領域マージ候補を現在ブロックのマージ候補リストに追加しないように設定されてもよい。
代替的には、マージ処理領域に現在ブロックが含まれる場合、予測領域動き情報リストに含まれる予測領域マージ候補を使用しないように設定されてもよい。つまり、現在ブロックのマージ候補リストに含まれるマージ候補の数が最大数未満であっても、予測領域動き情報リストに含まれる予測領域マージ候補をマージ候補リストに追加しなくてもよい。
マージ処理領域又は符号化ツリーユニットの予測領域動き情報リストを配置することができる。該予測領域動き情報リストは、マージ処理領域に含まれるブロックの動き情報を一時的に記憶するという役割を果たす。一般的な予測領域動き情報リストとマージ処理領域又は符号化ツリーユニットの予測領域動き情報リストを区別するために、マージ処理領域又は符号化ツリーユニットの予測領域動き情報リストを一時的動き情報リストと呼ぶ。なお、一時的動き情報リストに記憶された予測領域マージ候補を一時的マージ候補と呼ぶ。
図26は、一時的動き情報リストを示す図である。
符号化ツリーユニット又はマージ処理領域の一時的動き情報リストを配置することができる。符号化ツリーユニット又はマージ処理領域に含まれる現在ブロックに対して動き補償予測を既に実行した場合、前記ブックの動き情報をインター予測動き情報リストHmvpCandListに追加しなくてもよい。逆に、前記ブロックから導出された一時的マージ候補を一時的動き情報リストHmvpMERCandListに追加することができる。つまり、一時的動き情報リストに追加された一時的マージ候補を予測領域動き情報リストに追加しなくてもよい。これにより、予測領域動き情報リストは、符号化ツリーユニット又はマージ処理領域に含まれるブロックの動き情報に基づいて導出された予測領域マージ候補を含まないことがある。
一時的動き情報リストに含まれることが可能であるマージ候補の最大数を、予測領域動き情報リストに含まれることが可能であるマージ候補の最大数と同じく設定することができる。代替的には、一時的動き情報リストに含まれることが可能であるマージ候補の最大数は、符号化ツリーユニット又はマージ処理領域の大きさによって決まってもよい。
符号化ツリーユニット又はマージ処理領域に含まれる現在ブロックを、該当する符号化ツリーユニット又は該当するマージ処理領域の一時的動き情報リストを使用しないように設定することができる。つまり、現在ブロックのマージ候補リストに含まれるマージ候補の数が閾値未満である場合、予測領域動き情報リストに含まれる予測領域マージ候補をマージ候補リストに追加し、また、一時的動き情報リストに含まれる一時的マージ候補をマージ候補リストに追加しなくてもよい。従って、現在ブロックと同一の符号化ツリーユニット又はマージ処理領域に含まれる他のブロックの動き情報を、現在ブロックに対する動き補償予測に用いなくてもよい。
符号化ツリーユニット又はマージ処理領域に含まれる全てのブロックの符号化/復号を完了した場合、予測領域動き情報リストと一時的動き情報リストをマージすることができる。
図27は、予測領域動き情報リストと一時的動き情報リストをマージする例を示す図である。
符号化ツリーユニット又はマージ処理領域に含まれる全てのブロックの符号化/復号を完了した場合、図27の例に示すように、一時的動き情報リストに含まれる一時的マージ候補を用いて、予測領域動き情報リストを更新することができる。
この場合、一時的動き情報リストに挿入される順番(即ち、インデックス値の昇順又は降順)に応じて、一時的動き情報リストに含まれる一時的マージ候補を予測領域動き情報リストに追加することができる。
もう1つの例として、事前定義された順番に応じて、一時的動き情報リストに含まれる一時的マージ候補を予測領域動き情報リストに追加することができる。
ここで、事前定義された順番は、マージ処理領域又は符号化ツリーユニットにおける符号化ブロックの走査順によって決まってもよい。前記走査順は、ラスタ走査、水平走査、垂直走査又はジグザグ走査のうちの少なくとも1つであってもよい。代替的には、事前定義された順番は、各ブロックの動き情報又は同一の動き情報を有するブロックの数によって決まってもよい。
代替的には、双方向動き情報を含む一時的マージ候補の前に、一方向動き情報を含む一時的マージ候補を予測領域マージリストに追加することができる。一方で、一方向動き情報を含む一時的マージ候補の前に、双方向動き情報を含む一時的マージ候補を予測領域マージ候補リストに追加することができる。
代替的には、マージ処理領域又は符号化ツリーユニットにおける高使用頻度又は低使用頻度の順番に応じて、一時的マージ候補を予測領域動き情報リストに追加することができる。
一時的動き情報リストに含まれる一時的マージ候補を予測領域動き情報リストに追加する場合、一時的マージ候補に対する冗長検出を実行することができる。例えば、予測領域動き情報リストに、一時的動き情報リストに含まれる一時的マージ候補と同じである予測領域マージ候補が記憶された場合、一時的マージ候補を予測領域動き情報リストに追加しなくてもよい。この場合、予測領域動き情報リストに含まれる一部の予測領域マージ候補に対して冗長検出を実行することができる。例えば、インデックスが閾値以上であるインター予測マージ候補に対して冗長検出を実行することができる。例えば、一時的マージ候補は、インデックスが事前定義された値以上である予測領域マージ候補と同じである場合、一時的マージ候補を予測領域動き情報リストに追加しなくてもよい。
現在ブロックの符号化ツリーユニット又はマージ処理領域と同一の符号化ツリーユニット又はマージ処理領域に含まれるブロックから導出された予測領域マージ候補を、現在ブロックのマージ候補として用いることを制限してもよい。このため、予測領域マージ候補に対して、ブロックのアドレス情報を別途記憶することができる。ブロックのアドレス情報は、ブロックの位置、ブロックのアドレス、ブロックのインデックス、ブロックを含むマージ処理領域の位置、ブロックを含むマージ処理領域のアドレス、ブロックを含むマージ処理領域のインデックス、ブロックを含む符号化ツリー領域の位置、ブロックを含む符号化ツリー領域のアドレス、及びブロックを含む符号化ツリー領域のインデックスのうちの少なくとも1つを含む。
図28及び図29は、符号化領域マージ候補に含まれるブロックのアドレス情報の例を示す図である。
インター予測により符号化されたブロックの動き情報は、符号化領域マージ候補の動き情報として記憶されてもよい。例えば、ブロックの動きベクトルmvは、符号化領域マージ候補の動きベクトルmvCandとして記憶されてもよく、また、ブロックの参照画像インデックスRefIdxは、符号化領域マージ候補の参照画像インデックスRefIdxCandとして記憶されてもよい。
なお、符号化領域マージ候補に対して、ブロックのアドレス情報を更に記憶することができる。例えば、ブロックのアドレスBLK_ADR、ブロックを含むマージ処理領域のアドレスMER_ADDR、又はブロックを含む符号化ツリーユニットのアドレスCTU_ADDRを別途記憶することができる。
図28に示す例において、符号化領域マージ候補に対して、動きベクトルmvCand、参照画像インデックスRefIdxCand及びマージ処理領域のアドレスMER_ADDRを記憶することが図示される。
前記符号化領域マージ候補に対して、複数のアドレス情報を記憶することができる。図29に示す例において、符号化領域マージ候補に対して、動きベクトルmvCand、参照画像インデックスRefIdxCand、マージ処理領域のアドレスMER_ADDR及び符号化ツリーユニットのアドレスCTU_ADDRを記憶することが図示される。
現在ブロックのアドレスと符号化領域マージ候補のアドレスを比較することで、符号化領域マージ候補を現在ブロックのマージ候補として用いることができるかどうかを決定することができる。例えば、現在ブロックを含むマージ処理領域のインデックスは符号化領域マージ候補により指示されるマージ処理領域のインデックスと同じである場合、符号化領域マージ候補を、現在ブロックのマージ候補として利用不可能であるものと設定することができる。代替的には、現在ブロックを含む符号化ツリー領域のインデックスは、符号化領域マージ候補により指示される符号化ツリー領域のインデックスと同じである場合、符号化領域マージ候補を、現在ブロックのマージ候補として利用不可能であるものと設定することができる。つまり、現在ブロックのマージ処理領域又は符号化ツリーユニットと同じであるマージ処理領域又は符号化ツリーユニットに含まれるブロックから導出された符号化領域マージ候補、又は現在ブロックに隣接するブロックから導出された符号化領域マージ候補を現在ブロックのマージ候補リストに追加しなくてもよい。
図30及び図31は、現在ブロックのアドレス情報と同じであるアドレス情報を有する符号化領域マージ候補を、現在ブロックのマージ候補として利用不可能であるものと設定する例を示す図である。
現在ブロックが属するマージ処理領域のインデックスが2である場合、インデックスが2であるマージ処理領域に属するブロックから導出された符号化領域マージ候補を、現在ブロックのマージ候補として利用不可能であるものと設定することができる。図30に示す例において、インデックスが5である符号化領域マージ候補HvmpCand[5]のアドレス情報は、インデックス2を指示するため、符号化領域マージ候補を、現在ブロックのマージ候補として利用不可能であるものと設定することができる。
現在ブロックが属する符号化ツリーユニットのインデックスが2であり、且つ現在ブロックが属するマージ処理領域のインデックスが1である場合、現在ブロックの符号化ツリーユニット及びマージ処理領域と同じである符号化ツリーユニット及びマージ処理領域に含まれるブロックから導出された符号化領域マージ候補を、現在ブロックのマージ候補として利用不可能であるものと設定することができる。図31に示す例において、インデックスが5である符号化領域マージ候補HvmpCand[5]の場合、符号化ツリーユニットのインデックスが2であり、且つマージ処理領域のインデックスが1である場合、前記符号化領域マージ候補を、現在ブロックのマージ候補として利用不可能であるものと設定することができる。
もう1つの例として、符号化領域マージ候補により指示されるアドレス情報と現在ブロックのアドレス情報との差分値が閾値以上である場合、符号化領域マージ候補を利用不可能であるものと設定することができる。例えば、符号化領域マージ候補により指示される符号化ツリーユニットのアドレス又はインデックスと現在ブロックが属する符号化ツリーユニットのアドレス又はインデックスとの差分値が閾値以上である場合、符号化領域マージ候補を利用不可能であるものと設定することができる。
代替的には、もう1つの例として、符号化領域マージ候補により指示されるアドレス情報と現在ブロックのアドレス情報との差分値が閾値以下である場合、符号化領域マージ候補を利用不可能であるものと設定することができる。例えば、符号化領域マージ候補により指示されるアドレス情報又はインデックスと現在ブロックのアドレス又はインデックスとの差分値が閾値以下である場合、符号化領域マージ候補を利用不可能であるものと設定することができる。つまり、現在ブロックに隣接するブロックから導出された符号化領域マージ候補を、現在ブロックのマージ候補として利用不可能であるものと設定することができる。
現在ブロックから導出された符号化領域マージ候補を符号化領域動き情報リストに追加しようとする場合、冗長検出を実行することができる。この場合、冗長検出は、現在ブロックから導出された符号化領域マージ候補の動き情報及びアドレス情報が符号化領域動き情報リストに記憶された符号化領域マージ候補の動き情報及びアドレス情報と同じであるかどうかを決定することであってもよい。この場合、現在ブロックから導出された符号化領域マージ候補と同一の動きベクトル、参照画像インデックス及びアドレス情報を有する符号化領域マージ候補が記憶された場合、現在ブロックから導出された符号化領域マージ候補を符号化領域動き情報リストに追加しなくてもよい。代替的には、現在ブロックから導出された符号化領域マージ候補と同一の動きベクトル、参照画像インデックス及びアドレス情報を有する符号化領域マージ候補が記憶された場合、記憶された符号化領域マージ候補を削除し、且つ、現在ブロックから導出された符号化領域マージ候補を符号化領域動き情報リストに追加することができる。この場合、最大インデックス又は最小インデックスを、現在ブロックから導出された符号化領域マージ候補に割り当てることができる。
代替的には、冗長検出を行う場合にアドレス情報が同じであるかどうかを考慮しないように設定されてもよい。例えば、現在ブロックから導出された符号化領域マージ候補のアドレス情報が符号化領域動き情報リストに記憶された符号化領域マージ候補のアドレス情報と異なっても、該2つの符号化領域マージ候補の動き情報が同じであると、現在ブロックから導出された符号化領域マージ候補を符号化領域動き情報リストに追加しなくてもよい。代替的には、現在ブロックから導出された符号化領域マージ候補のアドレス情報が符号化領域動き情報リストに記憶された符号化領域マージ候補の動き情報(アドレス情報)と同じであるが、アドレス情報(動き情報)が異なると、記憶された符号化領域マージ候補を削除し、また、現在ブロックから導出された符号化領域マージ候補を符号化領域動き情報リストに追加することができる。この場合、最大インデックス又は最小インデックスを、現在ブロックから導出された符号化領域マージ候補に割り当てることができる。
イントラ予測は、現在ブロックの周辺の符号化/復号された再構成サンプルを用いて現在ブロックを予測することである。この場合、現在ブロックのイントラ予測は、インループフィルタを適用する前の再構成サンプルを用いることができる。
イントラ予測技術は、マトリックス(Matrix)に基づくイントラ予測及び周辺の再構成サンプルとの方向性を考慮した一般的なイントラ予測を含む。ビットストリームを介して、信号で、現在ブロックのイントラ予測技術を示す情報を送信することができる。前記情報は、1ビットフラグであってもよい。代替的には、現在ブロックの位置、大きさ、形状又は隣接ブロックのイントラ予測技術のうちの少なくとも1つに基づいて、現在ブロックのイントラ予測技術を決定することができる。例えば、現在ブロックが画像の境界に跨って存在する場合、現在ブロックを、マトリックスに基づくイントラ予測を適用しないように設定する。
マトリックスに基づくイントラ予測は、エンコーダ及びデコーダに記憶されたマトリックスと現在ブロックの周辺の再構成サンプルとのマトリックス乗算に基づいて現在ブロックの予測ブロックを得る方法である。ビットストリームを介して、信号で、記憶された複数のマトリックスのうちのいずれか1つを示すための情報を送信することができる。デコーダは、前記情報及び現在ブロックの大きさに基づいて、現在ブロックのイントラ予測に用いられるマトリックスを決定することができる。
一般的なイントラ予測は、非角度イントラ予測モード又は角度イントラ予測モードに基づいて現在ブロックに関わる予測ブロックを得る方法である。
オリジナル画像と予測画像を減算することで、導出される残差画像を導出することができる。この場合、残差画像を周波数領域に変更する場合、周波数成分のうちの高周波数成分を除去しても、ビデオの主観画質を大幅に低下させることがない。従って、高周波数成分の値を小さくするか又は高周波数成分の値を0とすると、明らかな視覚的歪みを引き起こすことなく、圧縮効率を向上させるという効果を有する。上記特性を反映するために、現在ブロックを変換することで残差画像を2次元周波数成分に分解することができる。離散コサイン変換(DCT:Discrete Cosine Transform)又は離散サイン変換(DST:Discrete Sine Transform)等の変換技術を用いて前記変換を実行することができる。
DCT又はDSTを用いて現在ブロックを変換した後、変換された現在ブロックに対して再び変換を行うことができる。この場合、DCT又はDSTに基づく変換を第1変換と定義し、第1変換を適用したブロックに対して再び変換を行うプロセスを第2変換と呼ぶ。
第1変換は、複数の変換カーネル候補のうちのいずれか1つを用いて実行することができる。例えば、DCT2、DCT8又はDCT7のうちのいずれか1つを用いて第1変換を実行することができる。
水平方向及び垂直方向に対して、異なる変換カーネルを用いることもできる。ビットストリームを介して、信号で、水平方向の変換カーネルと垂直方向の変換カーネルの組み合わせを表す情報を送信することもできる。
第1変換及び第2変換の実行ユニットは、異なる。例えば、8×8ブロックに対して第1変換を実行し、また、変換された8×8ブロックにおける大きさが4×4であるサブブロックに対して第2変換を実行することができる。この場合、第2変換を実行しない余剰領域の変換係数を0とすることもできる。
代替的には、4×4ブロックに対して第1変換を実行し、また、変換された4×4ブロックを含む大きさが8×8である領域に対して第2変換を実行することができる。
ビットストリームを介して、信号で、第2変換を実行するかどうかを表す情報を送信することができる。
デコーダにおいて、第2変換の逆変換(第2逆変換)を実行し、また、その結果に対して第1変換の逆変換(第1逆変換)を実行することができる。第2逆変換及び第1逆変換の実行結果として、現在ブロックの残差信号を得ることができる。
量子化は、ブロックのエネルギーの減少に用いられ、また、量子化プロセスは、変換係数を特定の定数で除算するプロセスを含む。前記定数は、量子化パラメータにより導出されてもよく、また、量子化パラメータは、1から63の値と定義されてもよい。
エンコーダにおいて変換及び量子化を実行すると、デコーダは、逆量子化及び逆変換により、残差ブロックを得ることができる。デコーダにおいて、予測ブロックと残差ブロックを加算することで、現在ブロックの再構成ブロックを得ることができる。
現在ブロックの再構成ブロックを得ると、インループフィルタリング(In-loop filtering)により、量子化及び符号化プロセスにおいて発生した情報紛失を減少させることができる。インループフィルタは、デブロッキングフィルタ(Deblocking filter)、サンプル適応型オフセットフィルタ(Sample Adaptive Offset filter:SAO)又は適応型ループフィルタ(Adaptive Loop Filter:ALF)のうちの少なくとも1つを含み得る。
復号プロセス又は符号化プロセスに重点を置いて説明する実施例を符号化プロセス又は復号プロセスに用いるものも本発明の範囲内に含まれる。説明された順番と異なる順番で、所定の順番で説明された複数の実施例を変更したものも本発明の範囲内に含まれる。
一連のステップ又はフローチャートに基づいて実施例を説明したが、これは、発明の時間的順番を限定しない。また、必要に応じて、同時に実行してもよいか又は他の順番に応じて実行してもよい。なお、上記実施例において、ブロック図を構成する構成要素(例えば、ユニット、モジュール等)は、それぞれ、ハードウェア機器又はソフトウェアとして実現されてもよい。また、複数の構成要素を組み合わせて単一のハードウェア機器又はソフトウェアとして実行されてもよい。前記実施例は、プログラム命令の形態で実行してもよい。前記プログラム命令は、種々のコンピュータ部材により実行されてコンピュータ可読記憶媒体に記録されてもよい。前記コンピュータ可読記憶媒体は、プログラム命令、データファイル、データ構造などを単独で含み得るか又はその組み合わせを含み得る。コンピュータ可読記憶媒体の例として、ハードディスク、フレキシブルディスク及び磁気テープなどの磁気媒体、CD-ROM、DVD等の光学記録媒体、フロップティーカールディスク(floptical disk)のような磁気-光学媒体(magneto-optical media)及びROM、RAM、フラッシュメモリ等のような、プログラム命令を記憶して該命令を実行する方式で特に配置されたハードウェア機器を含み得る。前記ハードウェア機器は、1つ又は複数のソフトウェアモジュールとして操作を行い、本発明による処理を実行するように構成されてもよく、その逆も同様である。