本実施の形態では、動画像の符号化に関し、特にピクチャを任意のサイズ、形状の矩形ブロックに分割し、ピクチャ間でブロック単位に動き補償を行う動画像符号化における符号化効率を向上させる為に、符号化済みの周囲のブロックの動きベクトルから複数の予測動きベクトルを算出し、符号化対象のブロックの動きベクトルと選択された予測動きベクトルとの差分ベクトルを算出して符号化することによって符号量を削減する。あるいは、符号化済みの周囲のブロックの符号化情報を利用することにより、符号化対象ブロックの符号化情報を推定することによって符号量を削減する。また、動画像の復号の場合は、復号済みの周囲のブロックの動きベクトルから複数の予測動きベクトルを算出し、符号化ストリームから復号された差分ベクトルと選択された予測動きベクトルとから復号対象のブロックの動きベクトルを算出して復号する。あるいは、復号済みの周囲のブロックの符号化情報を利用することにより、復号対象ブロックの符号化情報を推定する。
まず、本実施の形態において使用する技術、及び技術用語を定義する。
(ツリーブロック、符号化ブロックについて)
実施の形態では、図3に示されるように、ピクチャ内を任意の同一サイズの正方の矩形の単位にて均等分割する。この単位をツリーブロックと定義し、ピクチャ内での符号化/復号対象ブロック(符号化処理においては符号化対象ブロック、復号処理においては復号対象ブロックのことである。以下、断りのない限り、この意味で用いる。)を特定するためのアドレス管理の基本単位とする。モノクロを除きツリーブロックは1つの輝度信号と2つの色差信号で構成される。ツリーブロックのサイズはピクチャサイズやピクチャ内のテクスチャに応じて、2のべき乗のサイズで自由に設定することができる。ツリーブロックはピクチャ内のテクスチャに応じて、符号化処理を最適にすべく、必要に応じてツリーブロック内の輝度信号、及び色差信号を階層的に4分割(縦横に2分割ずつ)して、ブロックサイズの小さいブロックにすることができる。このブロックをそれぞれ符号化ブロックと定義し、符号化及び復号を行う際の処理の基本単位とする。モノクロを除き符号化ブロックも1つの輝度信号と2つの色差信号で構成される。符号化ブロックの最大サイズはツリーブロックのサイズと同一である。符号化ブロックの最小のサイズとなる符号化ブロックを最小符号化ブロックと呼び、2のべき乗のサイズで自由に設定することができる。
図3においては、符号化ブロックAは、ツリーブロックを分割せず、1つの符号化ブロックとしたものである。符号化ブロックBは、ツリーブロックを4分割してできた符号化ブロックである。符号化ブロックCは、ツリーブロックを4分割してできたブロックをさらに4分割してできた符号化ブロックである。符号化ブロックDは、ツリーブロックを4分割してできたブロックをさらに階層的に2度4分割してできた符号化ブロックであり、最小サイズの符号化ブロックである。
(予測モードについて)
符号化ブロック単位で、符号化対象ブロックと同一ピクチャ内の符号化/復号済み周囲の画像信号から予測を行うイントラ予測(MODE_INTRA)、及び符号化対象ブロックと異なるピクチャの符号化/復号済み画像信号から予測を行うインター予測(MODE_INTER)を切り替える。このイントラ予測(MODE_INTRA)とインター予測(MODE_INTER)を識別するモードを予測モード(PredMode)と定義する。予測モード(PredMode)はイントラ予測(MODE_INTRA)、またはインター予測(MODE_INTER)を値として持ち、選択して符号化できる。
(分割モード、予測ブロック、予測ユニットについて)
ピクチャ内をブロックに分割してイントラ予測(MODE_INTRA)及びインター予測(MODE_INTER)を行う場合、イントラ予測及びインター予測の方法を切り替える単位をより小さくするために、必要に応じて符号化ブロックを分割して予測を行う。この符号化ブロックの輝度信号と色差信号の分割方法を識別するモードを分割モード(PartMode)と定義する。さらに、この分割されたブロックを予測ブロックと定義する。図4に示すように、符号化ブロックの輝度信号の分割方法に応じて4種類の分割モード(PartMode)を定義する。符号化ブロックの輝度信号を分割せず1つの予測ブロックとみなしたもの(図4(a))の分割モード(PartMode)を2N×2N分割(PART_2Nx2N)、符号化ブロックの輝度信号を水平方向に2分割し、2つの予測ブロックとしたもの(図4(b))の分割モード(PartMode)を2N×N分割(PART_2NxN)、符号化ブロックの輝度信号を垂直方向に分割し、符号化ブロックを2つの予測ブロックとしたもの(図4(c))の分割モード(PartMode)をN×2N分割(PART_Nx2N)、符号化ブロックの輝度信号を水平と垂直の均等分割により4つの予測ブロックとしたもの(図4(d))の分割モード(PartMode)をN×N分割(PART_NxN)とそれぞれ定義する。なお、各分割モード(PartMode)毎に輝度信号の縦横の分割比率と同様に色差信号も分割する。
符号化ブロック内部において、各予測ブロックを特定する為に、0から開始する番号を、符号化順序で、符号化ブロック内部に存在する予測ブロックに対して割り当てる。この番号を分割インデックスPartIdxと定義する。図4の符号化ブロックの各予測ブロックの中に記述された数字は、その予測ブロックの分割インデックスPartIdxを表す。図4(b)に示す2N×N分割(PART_2NxN)では上の予測ブロックの分割インデックスPartIdxを0とし、下の予測ブロックの分割インデックスPartIdxを1とする。図4(c)に示すN×2N分割(PART_Nx2N)では左の予測ブロックの分割インデックスPartIdxを0とし、右の予測ブロックの分割インデックスPartIdxを1とする。図4(d)に示すN×N分割(PART_NxN)では、左上の予測ブロックの分割インデックスPartIdxを0とし、右上の予測ブロックの分割インデックスPartIdxを1とし、左下の予測ブロックの分割インデックスPartIdxを2とし、右下の予測ブロックの分割インデックスPartIdxを3とする。
予測モード(PredMode)がインター予測(MODE_INTER)では、最小の符号化ブロックである符号化ブロックD以外では、分割モード(PartMode)は2N×2N分割(PART_2Nx2N)、2N×N分割(PART_2NxN)、及びN×2N分割(PART_Nx2N)を定義し、最小の符号化ブロックである符号化ブロックDのみ、分割モード(PartMode)は2N×2N分割(PART_2Nx2N)、2N×N分割(PART_2NxN)、及びN×2N分割(PART_Nx2N)に加えてN×N分割(PART_NxN)を定義する。なお、最小の符号化ブロック以外にN×N分割(PART_NxN)を定義しない理由は最小の符号化ブロック以外では、符号化ブロックを4分割して小さな符号化ブロックを表現できるからである。
(ツリーブロック、符号化ブロック、予測ブロック、変換ブロックの位置)
本実施の形態のツリーブロック、符号化ブロック、予測ブロック、変換ブロックを始めとする各ブロックの位置は、輝度信号の画面の一番左上の輝度信号の画素の位置を原点(0,0)とし、それぞれのブロックの領域に含まれる一番左上の輝度信号の画素の位置を(x,y)の二次元座標で表す。座標軸の向きは水平方向に右の方向、垂直方向に下の方向をそれぞれ正の向きとし、単位は輝度信号の1画素単位である。輝度信号と色差信号で画像サイズ(画素数)が同じである色差フォーマットが4:4:4の場合ではもちろんのこと、輝度信号と色差信号で画像サイズ(画素数)が異なる色差フォーマットが4:2:0、4:2:2の場合でも色差信号の各ブロックの位置をそのブロックの領域に含まれる輝度信号の画素の座標で表し、単位は輝度信号の1画素である。この様にすることで、色差信号の各ブロックの位置が特定できるのはもちろんのこと、座標の値を比較するだけで、輝度信号のブロックと色差信号のブロックの位置の関係も明確となる。
(予測ブロックグループについて)
複数の予測ブロックで構成されるグループを予測ブロックグループと定義する。図5、図6、図7及び図8は符号化/復号対象の予測ブロックと同一ピクチャ内でその符号化/復号対象の予測ブロックに隣接する予測ブロックグループを説明する図である。図9は符号化/復号対象の予測ブロックと時間的に異なる符号化/復号済みのピクチャにおいて、符号化/復号対象の予測ブロックと同一位置あるいはその近傍の位置に存在する既に符号化/復号済みの予測ブロックグループを説明する図である。図5、図6、図7、図8及び図9を用いて予測ブロックグループについて説明する。
図5に示すように、符号化/復号対象の予測ブロックと同一ピクチャ内でその符号化/復号対象の予測ブロックの左側の辺に隣接する予測ブロックA1、および符号化/復号対象の予測ブロックの左下の頂点に隣接する予測ブロックA0、で構成される第1の予測ブロックグループを左側に隣接する予測ブロックグループと定義する。
なお、図6に示すように、符号化/復号対象の予測ブロックの左側に隣接する予測ブロックのサイズが符号化/復号対象の予測ブロックより大きい場合にも、前記条件に従い、左側に隣接する予測ブロックAがその符号化/復号対象の予測ブロックの左側の辺に隣接していれば予測ブロックA1とし、符号化/復号対象の予測ブロックの左下の頂点に隣接していれば予測ブロックA0とする。図6の例では、予測ブロックA0と予測ブロックA1は同一の予測ブロックとなる。
なお、図7に示すように、符号化/復号対象の予測ブロックの左側の辺に隣接する予測ブロックのサイズが符号化/復号対象の予測ブロックより小さく、複数存在する場合には、本実施の形態においては左側に隣接する予測ブロックの中で最も下の予測ブロックA10だけを左側に隣接する予測ブロックA1とする。
左側に隣接する予測ブロックグループを定義したのとほぼ同様に、符号化/復号対象の予測ブロックと同一ピクチャ内でその符号化/復号対象の予測ブロックの上側の辺に隣接する予測ブロックB1、符号化/復号対象の予測ブロックの右上の頂点に隣接する予測ブロックB0、および符号化/復号対象の予測ブロックの左上の頂点に隣接する予測ブロックB2で構成される第2の予測ブロックグループを上側に隣接する予測ブロックグループと定義する。
なお、図8に示すように、符号化/復号対象の予測ブロックの上側に隣接する予測ブロックのサイズが符号化/復号対象の予測ブロックより大きい場合にも、前記条件に従い、上側に隣接する予測ブロックBがその符号化/復号対象の予測ブロックの上側の辺に隣接していれば予測ブロックB1とし、符号化/復号対象の予測ブロックの右上の頂点に隣接していれば予測ブロックB0とし、符号化/復号対象の予測ブロックの左上の頂点に隣接していれば予測ブロックB2とする。図8の例では、予測ブロックB0と予測ブロックB1と予測ブロックB2は同一の予測ブロックとなる。
なお、図7に示すように、符号化/復号対象の予測ブロックの上側の辺に隣接する予測ブロックのサイズが符号化/復号対象の予測ブロックより小さく、複数存在する場合には、実施の形態においては上側に隣接する予測ブロックの中で最も右の予測ブロックB10だけを上側に隣接する予測ブロックB1とする。
左側に隣接する予測ブロックグループとの相違は、符号化/復号対象の予測ブロックの左上の頂点に隣接する予測ブロックB2を上側に隣接する予測ブロックグループに含めていることである。左上予測ブロックB2はどちらの予測ブロックグループに含めても構わないが、ここでは上側に隣接する予測ブロックグループに含める。そのため、上側に隣接する予測ブロックグループの方が左側に隣接する予測ブロックグループよりも構成する予測ブロック数が多くなる。
図9に示すように、符号化/復号対象の予測ブロックと時間的に異なる符号化/復号済みのピクチャにおいて、符号化/復号対象の予測ブロックと同一位置あるいはその近傍の位置に存在する既に符号化/復号済みの予測ブロックグループT0およびT1で構成される第3の予測ブロックグループを異なる時間の予測ブロックグループと定義する。
(インター予測モード、参照リストについて)
本発明の実施の形態においては、符号化/復号済みのピクチャの画像信号から予測を行うインター予測では、複数の復号済みのピクチャを参照ピクチャとして用いることができる。複数の参照ピクチャから選択された参照ピクチャを特定するため、予測ブロック毎に参照インデックスを付ける。Bスライスでは予測ブロック毎に任意の2枚の参照ピクチャを選択してインター予測を行うことができ、インター予測のモードとしてL0予測(Pred_L0)、L1予測(Pred_L1)、双予測(Pred_BI)がある。参照ピクチャはリスト構造のL0(参照リスト0)とL1(参照リスト1)で管理され、L0またはかつL1の参照インデックスを指定することにより参照ピクチャを特定することができる。L0予測(Pred_L0)はL0で管理されている参照ピクチャを参照するインター予測であり、L1予測(Pred_L1)はL1で管理されている参照ピクチャを参照するインター予測であり、双予測(Pred_BI)はL0予測とL1予測が共に行われ、L0とL1のそれぞれで管理されている1つずつの参照ピクチャを参照するインター予測である。Pスライスのインター予測ではL0予測のみが使用でき、Bスライスのインター予測ではL0予測、L1予測、L0予測とL1予測を平均または重み付け加算する双予測(Pred_BI)が使用できる。以降の処理において出力に添え字LX(Xは0または1)が付いている定数、変数に関しては、L0、L1ごとに処理が行われることを前提とする。
(POCについて)
POCは符号化されるピクチャに関連付けられる変数とし、ピクチャの出力/表示順序で1ずつ増加する値が設定される。POCの値によって、同一ピクチャであるかを判別したり、出力/表示順序でのピクチャ間の前後関係を判別したり、ピクチャ間の距離を導出したりすることができる。例えば、2つのピクチャのPOCが同じ値を持つ場合、同一のピクチャであると判断できる。2つのピクチャのPOCが違う値を持つ場合、POCの値が小さいピクチャのほうが、時間的に先に出力/表示されるピクチャであると判断でき、2つのピクチャのPOCの差が時間軸方向でのピクチャ間距離を示す。
(実施の形態1)
本発明の実施の形態1について図面と共に説明する。図1は本発明の実施の形態に係る動画像符号化装置の構成を示すブロック図である。実施の形態の動画像符号化装置は、画像メモリ101、動きベクトル検出部102、差分動きベクトル算出部103、インター予測情報推定部104、動き補償予測部105、予測方法決定部106、残差信号生成部107、直交変換・量子化部108、第1の符号化ビット列生成部109、第2の符号化ビット列生成部110、多重化部111、逆量子化・逆直交変換部112、復号画像信号重畳部113、符号化情報格納メモリ114、および復号画像メモリ115を備える。
画像メモリ101は、表示時間順に供給された符号化対象のピクチャの画像信号を一時格納する。画像メモリ101は、格納された符号化対象のピクチャの画像信号を、所定の画素ブロック単位で、動きベクトル検出部102、予測方法決定部106、および残差信号生成部107に供給する。その際、表示時間順に格納されたピクチャの画像信号は、符号化順序に並べ替えられて、画素ブロック単位で、画像メモリ101から出力される。
動きベクトル検出部102は、画像メモリ101から供給される画像信号と復号画像メモリ115から供給される参照ピクチャ間でブロックマッチング等により各予測ブロックサイズ、各予測モードのそれぞれの動きベクトルを予測ブロック単位で検出し、検出された動きベクトルを動き補償予測部105、差分動きベクトル算出部103、および予測方法決定部106に供給する。
差分動きベクトル算出部103は、符号化情報格納メモリ114に記憶されている既に符号化された画像信号の符号化情報を用いて、複数の予測動きベクトルの候補を算出して後述する予測動きベクトルリストを生成し、生成された予測動きベクトルリストに登録された複数の予測動きベクトルの候補の中から最適な予測動きベクトルを選択し、動きベクトル検出部102が検出した動きベクトルと予測動きベクトルから差分動きベクトルを算出し、算出された差分動きベクトルを予測方法決定部106に供給する。さらに、生成された予測動きベクトルリストに登録された予測動きベクトルの候補から選択された予測動きベクトルを特定する予測動きベクトルインデックスを予測方法決定部106に供給する。差分動きベクトル算出部103の詳細な構成と動作は後述する。
インター予測情報推定部104は、マージモードのインター予測情報を推定する。マージモードとは、当該予測ブロックの予測モード、参照インデックス(参照リストに登録されている複数の参照ピクチャから動き補償予測に利用する参照ピクチャを特定するための情報)、動きベクトル等のインター予測情報を符号化するのではなく、符号化済みの隣接するインター予測された予測ブロック、あるいは異なるピクチャのインター予測された予測ブロックのインター予測情報を利用するモードである。符号化情報格納メモリ114に記憶されている既に符号化された予測ブロックの符号化情報を用いて、複数のマージの候補(インター予測情報の候補)を算出してマージ候補リストを生成し、生成されたマージ候補リストに登録された複数のマージ候補の中から最適なマージ候補を選択し、選択されたマージ候補の予測モード、参照インデックス、動きベクトル等のインター予測情報を動き補償予測部105に供給するとともに、選択されたマージ候補を特定するマージインデックスを予測方法決定部106に供給する。
動き補償予測部105は、動きベクトル検出部102およびインター予測情報推定部104により検出された動きベクトルを用いて参照ピクチャから動き補償予測により予測画像信号を生成し、予測画像信号を予測方法決定部106に供給する。なお、L0予測、及びL1予測では、片方向の予測を行う。双予測(Pred_BI)の場合は、双方向の予測を行い、L0予測、L1予測のそれぞれのインター予測された信号に適応的に重み係数を掛け算し、オフセット値を加算して重畳し、最終的な予測画像信号を生成する。
予測方法決定部106は複数の予測方法の差分動きベクトルの符号量、予測画像信号と画像信号との間の歪量等を評価することにより、符号化ブロック単位でインター予測(PRED_INTER)かイントラ予測(PRED_INTRA)かを判別する予測モードPredMode、分割モードPartModeを決定し、インター予測(PRED_INTER)では予測ブロック単位でマージモードか否か等の予測方法を決定し、マージモードの場合はマージインデックス、マージモードでない場合はインター予測フラグ、予測動きベクトルインデックス、L0、L1の参照インデックス、差分動きベクトル等を決定して、決定に応じた符号化情報を第1の符号化ビット列生成部109に供給する。
さらに、予測方法決定部106は、決定された予測方法を示す情報、及び決定された予測方法に応じた動きベクトル等を含む符号化情報を符号化情報格納メモリ114に格納する。ここで格納する符号化情報は、予測モードPredMode、分割モードPartMode、L0予測、及びL1予測を利用するかどうかを示すフラグpredFlagL0, predFlagL1、L0、L1の参照インデックスrefIdxL0, refIdxL1、L0、L1の動きベクトルmvL0, mvL1等である。ここで、予測モードPredModeがイントラ予測(MODE_INTRA)の場合、L0予測を利用するかどうかを示すフラグpredFlagL0、L1予測を利用するかどうかを示すフラグpredFlagL1は共に0である。一方、予測モードPredModeがインター予測(MODE_INTER)で、インター予測モードがL0予測(Pred_L0)の場合、L0予測を利用するかどうかを示すフラグpredFlagL0は1, L1予測を利用するかどうかを示すフラグpredFlagL1は0である。インター予測モードがL1予測(Pred_L1)の場合、L0予測を利用するかどうかを示すフラグpredFlagL0は0, L1予測を利用するかどうかを示すフラグpredFlagL1は1である。インター予測モードが双予測(Pred_BI)の場合、L0予測を利用するかどうかを示すフラグpredFlagL0、L1予測を利用するかどうかを示すフラグpredFlagL1は共に1である。予測方法決定部106は、決定された予測モードに応じた予測画像信号を残差信号生成部107と復号画像信号重畳部113に供給する。
残差信号生成部107は、符号化する画像信号と予測画像信号との減算を行うことにより残差信号を生成し、直交変換・量子化部108に供給する。
直交変換・量子化部108は、残差信号に対して量子化パラメータに応じて直交変換及び量子化を行い直交変換・量子化された残差信号を生成し、第2の符号化ビット列生成部110と逆量子化・逆直交変換部112に供給する。さらに、直交変換・量子化部108は、量子化パラメータを符号化情報格納メモリ114に格納する。
第1の符号化ビット列生成部109は、シーケンス、ピクチャ、スライス、符号化ブロック単位の情報に加えて、符号化ブロック及び予測ブロック毎に予測方法決定部106によって決定された予測方法に応じた符号化情報を符号化する。具体的には、符号化ブロック毎の予測モードPredMode、分割モードPartMode、インター予測(PRED_INTER)の場合、マージモードかどうかを判別するフラグ、マージモードの場合はマージインデックス、マージモードでない場合はインター予測モード、予測動きベクトルインデックス、差分動きベクトルに関する情報等の符号化情報を後述する規定のシンタックス規則に従ってエントロピー符号化して第1の符号化ビット列を生成し、多重化部111に供給する。
第2の符号化ビット列生成部110は、直交変換及び量子化された残差信号を規定のシンタックス規則に従ってエントロピー符号化して第2の符号化ビット列を生成し、多重化部111に供給する。多重化部111で、第1の符号化ビット列と第2の符号化ビット列を規定のシンタックス規則に従って多重化し、ビットストリームを出力する。
逆量子化・逆直交変換部112は、直交変換・量子化部108から供給された直交変換・量子化された残差信号を逆量子化及び逆直交変換して残差信号を算出し、復号画像信号重畳部113に供給する。
復号画像信号重畳部113は、予測方法決定部106による決定に応じた予測画像信号と逆量子化・逆直交変換部112で逆量子化及び逆直交変換された残差信号を重畳して復号画像を生成し、復号画像メモリ115に格納する。なお、復号画像に対して符号化によるブロック歪等の歪を減少させるフィルタリング処理を施して、復号画像メモリ115に格納されることもある。
図2は図1の動画像符号化装置に対応した本発明の実施の形態に係る動画像復号装置の構成を示すブロックである。実施の形態の動画像復号装置は、分離部201、第1符号化ビット列復号部202、第2符号化ビット列復号部203、動きベクトル算出部204、インター予測情報推定部205、動き補償予測部206、逆量子化・逆直交変換部207、復号画像信号重畳部208、符号化情報格納メモリ209、および復号画像メモリ210を備える。
図2の動画像復号装置の復号処理は、図1の動画像符号化装置の内部に設けられている復号処理に対応するものであるから、図2の動き補償予測部206、逆量子化・逆直交変換部207、復号画像信号重畳部208、符号化情報格納メモリ209、および復号画像メモリ210の各構成は、図1の動画像符号化装置の動き補償予測部105、逆量子化・逆直交変換部112、復号画像信号重畳部113、符号化情報格納メモリ114、および復号画像メモリ115の各構成とそれぞれ対応する機能を有する。
分離部201に供給されるビットストリームは規定のシンタックスの規則に従って分離し、分離された符号化ビット列が第1符号化ビット列復号部202、第2符号化ビット列復号部203に供給される。
第1符号化ビット列復号部202は、供給された符号化ビット列を復号して、シーケンス、ピクチャ、スライス、符号化ブロック単位の情報、及び、予測ブロック単位の符号化情報を得る。具体的には、符号化ブロック単位でインター予測(PRED_INTER)かイントラ予測(PRED_INTRA)かを判別する予測モードPredMode、分割モードPartMode、インター予測(PRED_INTER)の場合、マージモードかどうかを判別するフラグ、マージモードの場合はマージインデックス、マージモードでない場合はインター予測モード、予測動きベクトルインデックス、差分動きベクトル等に関する符号化情報を後述する規定のシンタックス規則に従って復号し、符号化情報を動きベクトル算出部204またはインター予測情報推定部205に供給する。
第2符号化ビット列復号部203は、供給された符号化ビット列を復号して直交変換・量子化された残差信号を算出し、直交変換・量子化された残差信号を逆量子化・逆直交変換部207に供給する。
動きベクトル算出部204は、復号対象の予測ブロックがマージモードでない時に、符号化情報格納メモリ209に記憶されている既に復号された画像信号の符号化情報を用いて、複数の予測動きベクトルの候補を算出して後述する予測動きベクトルリストを生成し、生成された予測動きベクトルリストに登録された複数の予測動きベクトルの候補の中から、第1符号化ビット列復号部202で復号され供給される予測動きベクトルインデックスに応じた予測動きベクトルを選択し、第1符号化ビット列復号部202で復号された差分ベクトルと選択された予測動きベクトルから動きベクトルを算出し、他の符号化情報とともに動き補償予測部206に供給するとともに、符号化情報格納メモリ209に格納する。ここで供給・格納する予測ブロックの符号化情報は、予測モードPredMode、分割モードPartMode、L0予測、及びL1予測を利用するかどうかを示すフラグpredFlagL0, predFlagL1、L0、L1の参照インデックスrefIdxL0, refIdxL1、L0、L1の動きベクトルmvL0, mvL1等である。ここで、予測モードPredModeがイントラ予測(MODE_INTRA)の場合、L0予測を利用するかどうかを示すフラグpredFlagL0、L1予測を利用するかどうかを示すフラグpredFlagL1は共に0である。一方、予測モードPredModeがインター予測(MODE_INTER)で、インター予測モードがL0予測(Pred_L0)の場合、L0予測を利用するかどうかを示すフラグpredFlagL0は1, L1予測を利用するかどうかを示すフラグpredFlagL1は0である。インター予測モードがL1予測(Pred_L1)の場合、L0予測を利用するかどうかを示すフラグpredFlagL0は0, L1予測を利用するかどうかを示すフラグpredFlagL1は1である。インター予測モードが双予測(Pred_BI)の場合、L0予測を利用するかどうかを示すフラグpredFlagL0、L1予測を利用するかどうかを示すフラグpredFlagL1は共に1である。動きベクトル算出部204の詳細な構成と動作は後述する。
インター予測情報推定部205は、復号対象の予測ブロックがマージモードの時に、マージモードのインター予測情報を推定する。符号化情報格納メモリ114に記憶されている既に復号された予測ブロックの符号化情報を用いて、複数のマージの候補を算出してマージ候補リストを生成し、生成されたマージ候補リストに登録された複数のマージ候補の中から第1符号化ビット列復号部202で復号され供給されるマージインデックスに対応したマージ候補を選択し、選択されたマージ候補の予測モードPredMode、分割モードPartMode、L0予測、及びL1予測を利用するかどうかを示すフラグ、L0、L1の参照インデックス、L0、L1の動きベクトル等のインター予測情報を動き補償予測部206に供給するとともに、符号化情報格納メモリ209に格納する。
動き補償予測部206は、動きベクトル算出部204で算出された動きベクトルを用いて参照ピクチャから動き補償予測により予測画像信号を生成し、予測画像信号を復号画像信号重畳部208に供給する。なお、双予測(Pred_BI)の場合は、L0予測、L1予測の2つの動き補償予測画像信号に適応的に重み係数を掛け算して重畳し、最終的な予測画像信号を生成する。
逆量子化・逆直交変換部207は、第1符号化ビット列復号部202で復号された直交変換・量子化された残差信号に対して逆直交変換及び逆量子化を行い、逆直交変換・逆量子化された残差信号を得る。
復号画像信号重畳部208は、動き補償予測部206で動き補償予測された予測画像信号と、逆量子化・逆直交変換部207により逆直交変換・逆量子化された残差信号とを重畳することにより、復号画像信号を復号し、復号画像メモリ210に格納する。復号画像メモリ210に格納する際には、復号画像に対して符号化によるブロック歪等を減少させるフィルタリング処理を施して、復号画像メモリ210に格納されることもある。
(シンタックスについて)
次に、本実施の形態に係る動きベクトルの予測方法を備える動画像符号化装置により符号化され、復号装置により復号される動画像のビットストリームの符号化および復号の共通規則であるシンタックスについて説明する。
図10は本実施の形態により生成されるビットストリームのスライス単位でスライスヘッダーに記述される第1のシンタックス構造を示す。ただし、本実施の形態に関係のあるシンタックス要素のみを示している。スライスタイプがBの場合は、時間方向の予測動きベクトルの候補、またはマージ候補を算出する際に用いる異なる時間のピクチャcolPicをL0の参照リスト或いはL1の参照リストのどちらに定義するかを示すフラグcollocated_from_l0_flagが設置される。フラグcollocated_from_l0_flagの詳細については後述する。
なお、以上のシンタックス要素はピクチャ単位で設定されるシンタックス要素を記述するピクチャ・パラメータ・セットに設置してもよい。
図11は予測ブロック単位に記述されるシンタックスパターンを示す。予測ブロックの予測モードPredModeの値がインター予測(MODE_INTER)の場合、マージモードかどうかを示すmerge_flag[x0][y0]が設置される。ここで、x0、y0は輝度信号のピクチャ内での予測ブロックの左上の画素の位置を示すインデックスであり、merge_flag[x0][y0]はピクチャ内の(x0, y0)に位置する予測ブロックのマージモードかどうかを示すフラグである。
次に、merge_flag[x0][y0]が1の場合、マージモードであることを示し、参照するマージ候補のリストであるマージリストのインデックスのシンタックス要素merge_idx[x0][y0]が設置される。ここで、x0、y0はピクチャ内での予測ブロックの左上の画素の位置を示すインデックスであり、merge_idx[x0][y0]はピクチャ内の(x0, y0)に位置する予測ブロックのマージインデックスである。
一方、merge_flag[x0][y0]が0の場合、マージモードでないことを示し、スライスタイプがBの場合、インター予測モードを識別するシンタックス要素inter_pred_flag[x0][y0]が設置され、このシンタックス要素でL0予測(Pred_L0)、L1予測(Pred_L1)、双予測(Pred_BI)を識別する。インター予測モードに応じて、L0、L1ごとに、参照ピクチャを特定するための参照インデックスのシンタックス要素ref_idx_l0[x0][y0]、ref_idx_l1[x0][y0]、動きベクトル検出にて求められた予測ブロックの動きベクトルと予測動きベクトルとの差分である差分動きベクトルのシンタックス要素mvd_l0[x0][y0][j]、mvd_l1[x0][y0][j]が設置される。ここで、x0、y0はピクチャ内での予測ブロックの左上の画素の位置を示すインデックスであり、ref_idx_l0[x0][y0]、mvd_l0[x0][y0][j]はそれぞれピクチャ内の(x0, y0)に位置する予測ブロックのL0の参照インデックス、及び差分動きベクトルであり、ref_idx_l1[x0][y0]、mvd_l1[x0][y0][j]はそれぞれピクチャ内の(x0, y0)に位置する予測ブロックのL1の参照インデックス、及び差分動きベクトルである。また、jは差分動きベクトルの成分を表し、jが0はx成分を、jが1はy成分を表す。次に、参照する予測動きベクトルの候補のリストである予測動きベクトルリストのインデックスのシンタックス要素mvp_idx_l0[x0][y0]、mvp_idx_l1[x0][y0]が設置される。ここで、x0、y0はピクチャ内での予測ブロックの左上の画素の位置を示すインデックスであり、mvp_idx_l0[x0][y0]、mvp_idx_l1[x0][y0]はピクチャ内の(x0, y0)に位置する予測ブロックのL0、L1の予測動きベクトルインデックスである。
実施の形態に係る動きベクトルの予測方法は、図1の動画像符号化装置の差分動きベクトル算出部103及び図2の動画像復号装置の動きベクトル算出部204において実施される。
実施の形態による動きベクトルの予測方法を図面を用いて説明する。動きベクトルの予測方法は、符号化ブロックを構成する予測ブロック単位に、符号化及び復号の処理の何れでも実施される。予測ブロックの予測モードがインター予測(MODE_INTER)で、マージモードでない場合に、符号化の場合、符号化対象の動きベクトルから符号化する差分動きベクトルを算出する時に用いる符号化済みの動きベクトルを利用して予測動きベクトルを導出する際、復号の場合、復号対象の動きベクトルを算出する時に用いる復号済みの動きベクトルを利用して予測動きベクトルを導出する際に実施される。
(符号化における動きベクトルの予測)
上述のシンタックスに基づき、動画像のビットストリームを符号化する動画像符号化装置において、実施の形態に係る動きベクトルの予測方法の動作を説明する。動きベクトルの予測方法は、スライス単位で動き補償予測を行う場合、即ちスライスタイプがPスライス(片方向予測スライス)或いはBスライス(両方向予測スライス)の場合で、更に、スライスの中の予測ブロックの予測モードがインター予測(MODE_INTER)で、マージモードでない差分動きベクトルを符号化または復号する予測ブロックに適用される。
図12は、図1の動画像符号化装置の差分動きベクトル算出部103の詳細な構成を示す図である。図12の太枠線で囲まれる部分は差分動きベクトル算出部103を示している。
更に、その内部の太点線で囲まれる部分は後述する動きベクトルの予測方法の動作部を示しており、実施の形態の動画像符号化装置と対応する動画像復号装置にも同様に設置され、符号化と復号で矛盾しない同一の判定結果を得られるようにしている。以下、この図を用いて、符号化における動きベクトルの予測方法を説明する。
差分動きベクトル算出部103は、予測動きベクトル候補生成部121、予測動きベクトル候補登録部122、予測動きベクトル冗長候補削除部123、予測動きベクトル候補数制限部124、予測動きベクトル候補符号量算出部125、予測動きベクトル選択部126、および動きベクトル減算部127を含む。
この差分動きベクトル算出部103での差分動きベクトル算出処理は、符号化対象ブロックで選択されたインター予測方法で用いる動きベクトルの差分動きベクトルをL0、L1毎にそれぞれ算出する。具体的には符号化対象ブロックの予測モードPredModeがインター予測(MODE_INTER)で、符号化対象ブロックのインター予測モードがL0予測(Pred_L0)の場合、L0の予測動きベクトルリストmvpListL0を算出して、予測動きベクトルmvpL0を選択し、L0の動きベクトルの差分動きベクトルmvdL0を算出する。符号化対象ブロックのインター予測モード(Pred_L1)がL1予測の場合、L1の予測動きベクトルリストmvpListL1を算出して、予測動きベクトルmvpL1を選択し、L1の動きベクトルの差分動きベクトルmvdL1を算出する。符号化対象ブロックのインター予測モードが双予測(Pred_BI)の場合、L0予測とL1予測が共に行われ、L0の予測動きベクトルリストmvpListL0を算出して、L0の予測動きベクトルmvpL0を選択し、L0の動きベクトルmvL0の差分動きベクトルmvdL0を算出するとともに、L1の予測動きベクトルリストmvpListL1を算出して、L1の予測動きベクトルmvpL1を算出し、L1の動きベクトルmvL1の差分動きベクトルmvdL1をそれぞれ算出する。
L0、L1それぞれについて、差分動きベクトル算出処理を行うが、L0、L1ともに共通の処理となる。したがって、以下の説明においてはL0、L1を共通のLXとして表す。L0の差分動きベクトルを算出する処理ではXが0であり、L1の差分動きベクトルを算出する処理ではXが1である。また、LXの差分動きベクトルを算出する処理中に、LXではなく、他方のリストの情報を参照する場合、他方のリストをLYとして表す。
予測動きベクトル候補生成部121は、L0、L1毎に、左側に隣接する予測ブロックグループ(符号化対象の予測ブロックと同一ピクチャ内でその予測ブロックの左側に隣接する予測ブロックグループ:図5のA0,A1)、上側に隣接する予測ブロックグループ(符号化対象の予測ブロックと同一ピクチャ内でその予測ブロックの上側に隣接する予測ブロックグループ:図5のB0,B1,B2)、異なる時間の予測ブロックグループ(符号化対象の予測ブロックと時間的に異なるピクチャでその予測ブロックと同一位置あるいはその近傍の位置に存在する既に符号化済みの予測ブロックグループ:図9のT0,T1)の3つの予測ブロックグループから、予測ブロックグループごとに1つの動きベクトルmvLXCol、mvLXA、mvLXBをそれぞれ導出して予測動きベクトル候補とし、予測動きベクトル候補登録部122に供給する。以下、mvLXColを時間予測動きベクトル候補、mvLXA及びmvLXBを空間予測動きベクトル候補と呼ぶ。この予測動きベクトル候補の算出に際しては、符号化対象の予測ブロックの参照インデックス及びPOCと、符号化情報格納メモリ114に格納されている符号化済みの予測ブロックの予測モード、参照リスト毎の参照インデックス、参照ピクチャのPOC、動きベクトル等の符号化情報を用いる。
これらの予測動きベクトルの候補mvLXCol、mvLXA、mvLXBは符号化対象ピクチャのPOCと参照ピクチャのPOCとの関係に応じてスケーリングすることにより導出されることもある。
予測動きベクトル候補生成部121は、予測ブロックグループ毎に、所定の順序で、それぞれの予測ブロックグループ内の予測ブロックに対して、後述の条件判定を行い、最初に条件に合致した予測ブロックの動きベクトルを選択し、予測動きベクトルの候補mvLXCol、mvLXA、mvLXBとする。
左側に隣接する予測ブロックグループから予測動きベクトルを算出する際には、左側に隣接する予測ブロックグループの下から上の順序(図5のA0からA0,A1の順序)で、上側に隣接する予測ブロックグループから予測動きベクトルを算出する際には、上側に隣接する予測ブロックグループの右から左の順序(図5のB0からB0,B1,B2の順序)で、異なる時間の予測ブロックグループから予測動きベクトルを算出する際には、図9のT0からT0,T1の順序で、各予測ブロックに対して、後述の条件判定を行い、最初に条件に合致した予測ブロックの動きベクトルを選択し、予測動きベクトルの候補をそれぞれmvLXCol、mvLXA、mvLXBとする。
即ち、左側の隣接予測ブロックグループでは、一番下の予測ブロックが最も優先順位が高く、下から上に向かって優先順位が付けられており、上側の隣接予測ブロックグループでは、一番右の予測ブロックが最も優先順位が高く、右から左に向かって優先順位が付けられている。異なる時間の予測ブロックグループでは、T0の予測ブロックが最も優先順位が高く、T0,T1の順に優先順位が付けられている。
(空間予測ブロックの条件判定のループの説明)
左側の隣接予測ブロックグループに対しては、下記の条件判定1、2、3、4の優先順序でそれぞれの条件判定が適用される。一方、上側の隣接予測ブロックグループに対しては、下記の条件判定1、2の優先順序でそれぞれの条件判定が適用される。
<条件判定>
条件判定1:符号化/復号対象の予測ブロックの差分動きベクトル算出対象のLXの動きベクトルと同じ参照リストLXで、同じ参照インデックス、すなわち同じ参照ピクチャを用いた予測が隣接予測ブロックでも行われている。
条件判定2:符号化/復号対象の予測ブロックの差分動きベクトル算出対象のLXの動きベクトルとは異なる参照リストLYであるが、同じ参照ピクチャを用いた予測が隣接予測ブロックで行われている。
条件判定3:符号化/復号対象の予測ブロックの差分動きベクトル算出対象のLXの動きベクトルと同じ参照リストLXで、異なる参照ピクチャを用いた予測が隣接予測ブロックで行われている。
条件判定4:符号化/復号対象の予測ブロックの差分動きベクトル算出対象のLXの動きベクトルとは異なる参照リストLYで、異なる参照ピクチャを用いた予測が隣接予測ブロックで行われている。
これらの条件のいずれかに一致した場合、当該予測ブロックには条件に合致する動きベクトルを予測ベクトル候補として採用し、後に続く条件判定は行わない。なお、条件判定1または条件判定2の条件に合致した場合、該当する隣接予測ブロックの動きベクトルは符号化対象予測ブロックの参照ピクチャと同一であるので、そのまま予測動きベクトルの候補とするが、条件判定3または条件判定4の条件に合致した場合、該当する隣接予測ブロックの動きベクトルは符号化対象予測ブロックの参照ピクチャと異なるので、その動きベクトルを基にスケーリングにより算出して予測動きベクトルの候補とする。
上記の4つの条件判定を以下の順に予測ブロックグループ内の予測ブロックをスキャンして予測ベクトルを決定する。
<予測ベクトルのスキャン手順>
同じ参照ピクチャを用いたスケーリング演算が不要な予測動きベクトルの判定を優先し、4つの条件判定のうち予測ブロック毎に2つの条件判定を行い、条件を満たさなければ、次の予測ブロックの条件判定に移る。最初に条件判定1と条件判定2の条件判定を隣接予測ブロックグループ内の各予測ブロックに対して行い、次に条件判定3と条件判定4の条件判定を隣接予測ブロックグループ内の各予測ブロックに対して行う。
具体的には以下の優先順序で条件判定を行う。(ただし、NはAまたはB)
1.予測ブロックN0の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
2.予測ブロックN0の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
3.予測ブロックN1の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
4.予測ブロックN1の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
5.予測ブロックN2の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
6.予測ブロックN2の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
7.予測ブロックN0の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
8.予測ブロックN0の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
9.予測ブロックN1の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
10.予測ブロックN2の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
11.予測ブロックN1の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
12.予測ブロックN2の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
上記のようにスキャンすることで、同じ参照ピクチャを用いたスケーリング演算が不要な予測精度の高い予測動きベクトルが選択されやすいので、差分動きベクトルの符号量が小さくなり符号化効率が向上する効果がある。
ここで、左側の隣接予測ブロックグループでは、2つの予測ブロックでグループが構成されているため、上記スキャンの5.6.及び11.12.の手順は行わない。
また、上側の隣接予測ブロックグループでは、3つの予測ブロックでグループが構成されているため、上記スキャンの1〜12を行うことが可能であるが、本発明では、上記スキャンの1〜6の手順のみ行い、7〜12の手順を行なわない(条件判定3および4を行わない)。すなわち、上側の隣接予測ブロックグループでは、スケーリング演算が必要な条件でのスキャンを省略する。
これにより、上側の隣接予測ブロックグループの除算が必要となるスケーリング演算を省略することができ、左側の隣接予測ブロックグループの予測ベクトル候補のみにスケーリング演算を限定できる。左側の隣接予測ブロックグループと上側の隣接予測ブロックグループとの並列処理を行う場合、空間予測ベクトル候補としてスケーリング演算回路を1つのみ持てば良くなることで回路規模を削減することができる。さらに、左側の隣接予測ブロックグループと上側の隣接予測ブロックグループとの並列処理を行う場合、隣接予測ブロックグループ内の構成予測ブロック数の違いに起因する処理量の差を小さくすることが可能である。つまり、予測ブロックの数の多い上側の隣接予測ブロックグループのスケーリング演算の処理を省略することで、ボトルネックとなる最大演算量を小さくできる。その結果、左側の隣接予測ブロックグループの演算量と上側の隣接予測ブロックグループの演算量の差が小さくとなり、効率的に並列処理を行える。
上記処理のフローについては、図17〜図21のフローチャートを用いて詳しく後述する。
隣接ブロックからの動き情報取得について説明する。本実施の形態では、動き情報を格納するラインバッファおよびブロックバッファを設置する。左側に隣接する予測ブロックから動き情報を取得する場合ブロックバッファから動き情報を取得し、上側に隣接する予測ブロックについては、上側に隣接する予測ブロックがツリーブロック内である場合には左側に隣接する予測ブロックと同様にブロックバッファから動き情報を取得し、上側に隣接する予測ブロックがツリーブロック外である場合には、ラインバッファから動き情報を取得する。
ここで、動き情報のラインバッファのサイズを削減して内部メモリ使用量を減らすために、動き情報を格納するラインバッファのサイズを水平方向に1/2に圧縮する。具体的には、ブロックバッファは隣接する未符号化ブロックの動きベクトル予測のために、動き情報を動き補償予測の最小単位(例えば4x4ブロック)で保存して隣接ブロックからのアクセスに備えるが、ラインバッファは動き補償予測の最小単位よりも水平方向に2倍大きい単位(例えば4x8ブロック)に動き情報を間引いてラインバッファに格納する。これにより、垂直方向に隣接するブロックがツリーブロック外である場合には、実際の当該ブロックの動き情報と異なる動き情報を取得する可能性がある。つまり、動き情報のラインバッファのサイズを水平方向に1/2に圧縮することより、結果として、上側に隣接する予測ブロックグループから導出される予測動きベクトルは左側に隣接する予測ブロックグループから導出される予測動きベクトルと比較して予測動きベクトルとしての信頼性が低下する。上側に隣接する予測ブロックグループにおいてスケーリング演算が必要な条件でのスキャンを省略している理由の1つは、ラインバッファのサイズの削減により、上側に隣接する予測ブロックグループからの予測動きベクトルのスケーリング演算を省略しても符号化効率に与える影響が小さいためである。
ここで、ランバッファの圧縮率を1/2として説明したが、当然圧縮率が大きくなればなるほど、上側に隣接する予測ブロックグループから導出される予測動きベクトルの信頼性が低下するため、上側に隣接する予測ブロックグループにおいてスケーリング演算が必要な条件でのスキャンを省略する効果が高まる。
異なる時間の予測ブロックグループからの予測ベクトル候補mvLXColの算出については、図24〜図30のフローチャートを用いて詳しく後述する。
図12の説明に戻る。次に、予測動きベクトル候補登録部122は算出された予測動きベクトルの候補mvLXCol、mvLXA、mvLXBを予測動きベクトルリストmvpListLXに格納する。
次に、予測動きベクトル冗長候補削除部123は、LXの予測動きベクトルリストmvpListLXに格納されたそれぞれの予測動きベクトルの候補の動きベクトルの値を比較し、予測動きベクトルの候補の中から同一の動きベクトルの値をもつものを判定し、同一の動きベクトル値をもつと判定された予測動きベクトルの候補について最初の一つを残してそれ以外を予測動きベクトルリストmvpListLXから削除して、予測動きベクトルの候補が重複しないようにし、予測動きベクトルリストmvpListLXを更新する。
予測動きベクトル候補数制限部124では、LXの予測動きベクトルリストmvpListLXに登録されている予測動きベクトルの候補数をカウントし、LXの予測動きベクトル候補数numMVPCandLXがカウントされた候補数の値に設定される。
さらに、予測動きベクトル候補数制限部124では、LXの予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを規定された最終候補数finalNumMVPCandに固定する。
本実施の形態においては、最終候補数finalNumMVPCandを2と規定している。予測ベクトルの候補数を固定する理由は、予測動きベクトルリストに登録される予測動きベクトルの候補数が予測動きベクトルリストの構築状態に応じて変動すると、復号側では予測動きベクトルリストを構築してからでないと、予測動きベクトルインデックスをエントロピー復号することができないため、予測動きベクトルリストの構築とエントロピー復号に依存関係が発生し、エントロピー復号に待機時間が発生してしまう可能性があるためである。さらに、エントロピー復号が異なる時間のピクチャの予測ブロックから導出された予測動きベクトル候補mvLXColを含む予測動きベクトルリストの構築状態に依存すると、別のピクチャの符号化ビット列の復号時にエラーが発生した際に現在のピクチャの符号化ビット列もそのエラーの影響を受けて正常にエントロピー復号を続けることができない問題がある。最終候補数finalNumMVPCandを固定した数に規定すると、予測動きベクトルリストの構築と独立して、予測動きベクトルインデックスをエントロピー復号することができるとともに、別のピクチャの符号化ビット列の復号時にエラーが発生してもその影響を受けずに現在のピクチャの符号化ビット列のエントロピー復号を続けることができる。
予測動きベクトル候補数制限部124では、LXの予測動きベクトル候補数numMVPCandLXが規定された最終候補数finalNumMVPCandより小さい場合、予測動きベクトル候補数numMVPCandLXが最終候補数finalNumMVPCandと同じ値になるまで、(0,0)の値を持つ動きベクトルを予測動きベクトルリストmvpListLXに追加することで予測動きベクトルの候補数を規定値に制限する。この場合、重複して(0,0)の値を持つ動きベクトルが追加されることがあるが、復号側では予測動きベクトルインデックスが0から(規定の候補数−1)の範囲内でどのような値をとっても、予測動きベクトルを確定することができる。一方、LXの予測動きベクトル候補数numMVPCandLXが規定された最終候補数finalNumMVPCandより大きい場合、予測動きベクトルリストmvpListLXからfinalNumMVPCand-1より大きいインデックスに登録されている要素をすべて削除し、LXの予測動きベクトル候補数numMVPCandLXを最終候補数finalNumMVPCandと同じ値にすることで予測動きベクトルの候補数を規定値に制限する。更新された予測動きベクトルリストmvpListLXは予測動きベクトル候補符号量算出部125と予測動きベクトル選択部126に供給される。
一方、図1の動きベクトル検出部102にて予測ブロック毎にLX(X=0または1)の動きベクトルmvLXが検出される。それらの動きベクトルmvLXは更新された予測動きベクトルリストmvpListLXの予測動きベクトルの候補とともに予測動きベクトル候補符号量算出部125に供給される。
予測動きベクトル候補符号量算出部125は、LX(X=0または1)の予測動きベクトルリストmvpListLXの中に格納されたそれぞれの予測動きベクトルの候補mvpListLX[i]ごとに動きベクトルmvLXとの差分動きベクトルを算出し、それら差分動きベクトルを符号化したときの符号量をそれぞれ算出し、予測動きベクトル選択部126に供給する。
予測動きベクトル選択部126は、LXの予測動きベクトルリストmvpListLXに登録された各要素の中で、予測動きベクトルの候補毎の符号量が最小となる予測動きベクトルの候補mvpListLX[i]をLXの予測動きベクトルmvpLXとして選択する。予測動きベクトルリストmvpListLXの中で最小の発生符号量となる予測動きベクトルの候補が複数存在する場合には、予測動きベクトルリストmvpListLXの中のインデックスiが小さい番号で表される予測動きベクトルの候補mvpListLX[i]をLXの最適な予測動きベクトルmvpLXとして選択する。選択された予測動きベクトルmvpLXを動きベクトル減算部127に供給する。さらに、その選択された予測動きベクトルmvpLXに対応する予測動きベクトルリスト中のインデックスiをLXの予測動きベクトルインデックスmvpIdxLXとして出力する。
最後に動きベクトル減算部127は、LXの動きベクトルmvLXから選択されたLXの予測動きベクトルmvpLXを減算することによりLXの差分動きベクトルmvdLXを算出し、差分動きベクトルmvdLXを出力する。
mvdLX = mvLX - mvpLX
図1に戻り、動き補償予測部105は、復号画像メモリ115に格納されている復号ピクチャの画像信号を参照して動きベクトル検出部102から供給されるLX(X=0または1)の動きベクトルmvLXに応じて動き補償を行い、予測画像信号を得て、予測方法決定部106に供給する。
予測方法決定部106は、予測方法を決定する。それぞれの予測モードごとに符号量と符号化歪を算出し、最も少ない発生符号量と符号化歪となる予測ブロックサイズと予測モードが決定される。差分動きベクトル算出部103の動きベクトル減算部127から供給されたLXの差分動きベクトルmvdLXと予測動きベクトル選択部126から供給された予測動きベクトルを表すLXの予測動きベクトルインデックスmvpIdxLXの符号化が行われ、動き情報の符号量を算出する。さらに、動き補償予測部105から供給される予測画像信号と、画像メモリ101から供給される符号化対象の画像信号との予測残差信号を符号化した予測残差信号の符号量を算出する。動き情報の符号量と予測残差信号の符号量とが加算された総発生符号量を算出し、第1の評価値とする。
また、こうした予測残差信号を符号化後に、歪量評価の為に復号し、符号化により生じる元の画像信号との誤差を表す比率として符号化歪が算出される。これら総発生符号量と符号化歪とを動き補償毎に比較することで、最も少ない発生符号量と符号化歪となる予測ブロックサイズと予測モードが決定される。決定された予測ブロックサイズの予測モードに応じた動きベクトルmvLXに対して、上述した動きベクトルの予測方法が行われ、予測動きベクトルを表すインデックスmvpIdxLXが、予測ブロック単位の第2のシンタックスパターンで表されるシンタックス要素mvp_idx_lX[i]として符号化される。尚、ここで算出される発生符号量は、符号化過程をシミュレートしたものであることが望ましいが、簡便に近似したり、概算することも可能である。
(復号における動きベクトルの予測)
上述のシンタックスに基づき、符号化された動画像のビットストリームを復号する動画像復号装置において、本発明に係る動きベクトルの予測方法の動作を説明する。
実施の形態に係る動きベクトルの予測方法が実施される場合、図2の動画像復号装置の動きベクトル算出部204にて処理が行われる。図13は、実施の形態の動画像符号化装置に対応する図2の動画像復号装置の動きベクトル算出部204の詳細な構成を示す図である。図13の太枠線で囲まれる部分は動きベクトル算出部204を示している。更に、その内部の太点線で囲まれる部分は後述する動きベクトルの予測方法の動作部を示しており、対応する動画像符号化装置にも同様に設置され、符号化と復号で矛盾しない同一の判定結果を得られるようにしている。以下、この図を用いて、復号における動きベクトルの予測方法を説明する。
動きベクトル算出部204は、予測動きベクトル候補生成部221、予測動きベクトル候補登録部222、予測動きベクトル冗長候補削除部223、予測動きベクトル候補数制限部224、予測動きベクトル選択部225及び動きベクトル加算部226を含む。
この動きベクトル算出部204での動きベクトル算出処理は、インター予測で用いる動きベクトルをL0,L1毎にそれぞれ算出する。具体的には符号化対象ブロックの予測モードPredModeがインター予測(MODE_INTER)で、符号化対象ブロックのインター予測モードがL0予測(Pred_L0)の場合、L0の予測動きベクトルリストmvpListL0を算出して、予測動きベクトルmvpL0を選択し、L0の動きベクトルmvL0を算出する。符号化対象ブロックのインター予測モードがL1予測(Pred_L1)の場合、L1の予測動きベクトルリストmvpListL1を算出して、予測動きベクトルmvpL1を選択し、L1の動きベクトルmvL1を算出する。符号化対象ブロックのインター予測モードが双予測(Pred_BI)の場合、L0予測とL1予測が共に行われ、L0の予測動きベクトルリストmvpListL0を算出して、L0の予測動きベクトルmvpL0を選択し、L0の動きベクトルmvL0を算出するとともに、L1の予測動きベクトルリストmvpListL1を算出して、L1の予測動きベクトルmvpL1を算出し、L1の動きベクトルmvL1をそれぞれ算出する。
符号化側と同様に、復号側でもL0、L1それぞれについて、動きベクトル算出処理を行うが、L0、L1ともに共通の処理となる。したがって、以下の説明においてはL0、L1を共通のLXとして表す。L0の動きベクトルを算出する処理ではXが0であり、L1の動きベクトルを算出する処理ではXが1である。また、LXの動きベクトルを算出する処理中に、LXではなく、他方のリストの情報を参照する場合、他方のリストをLYとして表す。
動きベクトル算出部204の中の予測動きベクトル候補生成部221、予測動きベクトル候補登録部222、予測動きベクトル冗長候補削除部223及び予測動きベクトル候補数制限部224は、符号化側の差分動きベクトル算出部103の中の予測動きベクトル候補生成部121、予測動きベクトル候補登録部122及び予測動きベクトル冗長候補削除部123、予測動きベクトル候補数制限部124とそれぞれ同じ動作をするように規定することにより、符号化と復号で矛盾しない同一の予測動きベクトルの候補を符号化側及び復号側で得ることができる。
予測動きベクトル候補生成部221は、図12の符号化側の予測動きベクトル候補生成部121と同一の処理を行う。復号して符号化情報格納メモリ209に記録されていた、復号対象ブロックと同一ピクチャ内の復号対象ブロックと隣接する復号済みの予測ブロック及び異なるピクチャ内の復号対象ブロックと同一位置あるいはその近傍の位置に存在する復号済みの予測ブロック等の動きベクトルを符号化情報格納メモリ209から読み出す。符号化情報格納メモリ209から読み出された復号済みの他のブロックの動きベクトルから予測ブロックグループごとに予測動きベクトルの候補mvLXCol、mvLXA、mvLXBを生成し、予測動きベクトル候補登録部222に供給する。
これらの予測動きベクトルの候補mvLXCol、mvLXA、mvLXBは参照インデックスに応じてスケーリングすることにより算出されることもある。なお、予測動きベクトル候補生成部221は、図12の符号化側の予測動きベクトル候補生成部121と同一の処理を行うので、ここでは詳細な説明は省略する。
次に、予測動きベクトル候補登録部222は図12の符号化側の予測動きベクトル候補登録部122と同一の処理を行う。算出された予測動きベクトルの候補mvLXCol、mvLXA、mvLXBをLXの予測動きベクトルリストmvpListLXに格納する。
次に、予測動きベクトル冗長候補削除部223は、図12の符号化側の予測動きベクトル冗長候補削除部123と同一の処理を行う。LXの予測動きベクトルリストmvpListLXに格納された予測動きベクトルの候補の中から同一の動きベクトルの値をもつものを判定し、同一の動きベクトル値をもつと判定された予測動きベクトルの候補について最初の一つを残してそれ以外を予測動きベクトルリストmvpListLXから削除して、予測動きベクトルの候補が重複しないようにし、予測動きベクトルリストmvpListLXを更新する。
次に、予測動きベクトル候補数制限部224は、図12の符号化側の予測動きベクトル候補数制限部124と同一の処理を行う。予測動きベクトル候補数制限部224では、予測動きベクトルリストmvpListLXに登録されている要素数をカウントし、LXの予測動きベクトル候補数numMVPCandLXがカウントされた候補数の値に設定される。
さらに、予測動きベクトル候補数制限部224では、符号化側で説明した理由により、予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを最終候補数finalNumMVPCandに固定する。
本実施の形態においては、最終候補数finalNumMVPCandを2と規定している。LXの予測動きベクトル候補数numMVPCandLXが規定された最終候補数finalNumMVPCandより小さい場合、予測動きベクトル候補数numMVPCandLXが最終候補数finalNumMVPCandと同じ値になるまで、(0,0)の値を持つ動きベクトルを予測動きベクトルリストmvpListLXに追加することで予測動きベクトルの候補数を規定値に制限する。この場合、重複して(0,0)の値を持つ動きベクトルが追加されることがあるが、復号側では予測動きベクトルインデックスが0から規定値−1の範囲内でどのような値をとっても、予測動きベクトルを確定することができる。一方、LXの予測動きベクトル候補数numMVPCandLXが規定された最終候補数finalNumMVPCandより大きい場合、予測動きベクトルリストmvpListLXからfinalNumMVPCand-1より大きいインデックスに登録されている要素をすべて削除し、LXの予測動きベクトル候補数numMVPCandLXを最終候補数finalNumMVPCandと同じ値にすることで予測動きベクトルの候補数を規定値に制限する。更新された予測動きベクトルリストmvpListLXは予測動きベクトル選択部225に供給される。
一方、第1符号化ビット列復号部202にて復号された予測ブロック毎のLX(X=0または1)の差分動きベクトルmvdLXが動きベクトル加算部226に供給される。第1符号化ビット列復号部202にて復号されたLXの予測動きベクトルの予測動きベクトルインデックスmvpIdxLXが予測動きベクトル選択部225に供給される。
予測動きベクトル選択部225は、第1符号化ビット列復号部202にて復号されたLXの予測動きベクトルインデックスmvpIdxLXが供給され、供給されたインデックスmvpIdxLXに対応する予測動きベクトルの候補mvpListLX[mvpIdxLX]をLXの予測動きベクトルmvpLXとして予測動きベクトルリストmvpListLXから取り出す。供給された予測動きベクトルの候補を予測動きベクトルmvpLXとして動きベクトル加算部226に供給する。
最後に動きベクトル加算部226は、第1符号化ビット列復号部202にて復号されて供給されるLXの差分動きベクトルmvdLXとLXの予測動きベクトルmvpLXを加算することによりLXの動きベクトルmvを算出し、動きベクトルmvLXを出力する。
mvLX = mvpLX + mvdLX
以上のようにして、予測ブロック毎にLXの動きベクトルmvLXが算出される。この動きベクトルを使用して動き補償により予測画像信号が生成され、復号された予測残差信号と加算されることで復号画像信号が生成される。
動画像符号化装置の差分動きベクトル算出部103、動画像復号装置の動きベクトル算出部204の処理手順について、それぞれ図14、図15のフローチャートを用いて説明する。図14は動画像符号化装置による差分動きベクトル算出処理手順を示すフローチャートであり、図15は動画像復号装置による動きベクトル算出処理手順を示すフローチャートである。
図14を参照して符号化側の差分動きベクトル算出処理手順を説明する。符号化側では、まず、差分動きベクトル算出部103で、予測動きベクトルの候補の最終候補数finalNumMVCandを設定する(S100)。本実施の形態においては、最終候補数finalNumMVPCandを2と規定している。
続いて、差分動きベクトル算出部103で、符号化対象ブロックで選択されたインター予測で用いる動きベクトルの差分動きベクトルをL0、L1毎にそれぞれ算出する(S101〜S106)。
LXの差分動きベクトルmvdLXを算出する場合(S102のYES)、LXの予測動きベクトルの候補を算出してLXの予測動きベクトルリストmvpListLXを構築する(S103)。差分動きベクトル算出部103の中の予測動きベクトル候補生成部121で複数の予測動きベクトルの候補を算出し、予測動きベクトル候補登録部122で予測動きベクトルリストmvpListLXに算出した予測動きベクトルの候補を追加し、予測動きベクトル冗長候補削除部123で不要な予測動きベクトルの候補を削除し、予測動きベクトル候補数制限部124で予測ベクトル候補数を予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXに固定することにより、予測動きベクトルリストmvpListLXを構築する。ステップS103の詳細な処理手順については図16のフローチャートを用いて後述する。
続いて、予測動きベクトル候補符号量算出部125、及び予測動きベクトル選択部126により、LXの予測動きベクトルリストmvpListLXからLXの予測動きベクトルmvpLXを選択する(S104)。まず、予測動きベクトル候補符号量算出部125で、動きベクトルmvLXと予測動きベクトルリストmvpListLXの中に格納された各予測動きベクトルの候補mvpListLX[i]との差分であるそれぞれの差分動きベクトルを算出し、それら差分動きベクトルを符号化したときの符号量を予測動きベクトルリストmvpListLXの要素ごとに算出し、予測動きベクトル選択部126で、予測動きベクトルリストmvpListLXに登録された各要素の中で、予測動きベクトルの候補毎の符号量が最小となる予測動きベクトルの候補mvpListLX[i]を予測動きベクトルmvpLXとして選択する。予測動きベクトルリストmvpListLXの中で最小の発生符号量となる予測動きベクトルの候補が複数存在する場合には、予測動きベクトルリストmvpListLXの中のインデックスiが小さい番号で表される予測動きベクトルの候補mvpListLX[i]を最適予測動きベクトルmvpLXとして選択する。
続いて、動きベクトル減算部127で、LXの動きベクトルmvLXから選択されたLXの予測動きベクトルmvpLXを減算することによりLXの差分動きベクトルmvdLXを算出する(S105)。
mvdLX = mvLX - mvpLX
次に、図15を参照して復号側の動きベクトル算出処理手順を説明する。復号側でも、動きベクトル算出部204で、インター予測で用いる動きベクトルをL0,L1毎にそれぞれ算出する(S201〜S206)。
LXの動きベクトルmvdLXを算出する場合(S202のYES)、LXの予測動きベクトルの候補を算出してLXの予測動きベクトルリストmvpListLXを構築する(S203)。動きベクトル算出部204の中の予測動きベクトル候補生成部221で複数の予測動きベクトルの候補を算出し、予測動きベクトル候補登録部222で予測動きベクトルリストmvpListLXに算出した予測動きベクトルの候補を追加し、予測動きベクトル冗長候補削除部223で不要な予測動きベクトルの候補を削除し、予測動きベクトル候補数制限部224で予測ベクトル候補数を予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXに固定することにより、予測動きベクトルリストmvpListLXを構築する。ステップS203の詳細な処理手順については図16のフローチャートを用いて後述する。
続いて、予測動きベクトル選択部225で予測動きベクトルリストmvpListLXから第1符号化ビット列復号部202にて復号された予測動きベクトルのインデックスmvpIdxLXに対応する予測動きベクトルの候補mvpListLX[mvpIdxLX]を選択された予測動きベクトルmvpLXとして取り出す(S204)。
続いて、動きベクトル加算部226で第1符号化ビット列復号部202にて復号されて供給されるLXの差分動きベクトルmvdLXとLXの予測動きベクトルmvpLXを加算することによりLXの動きベクトルmvLXを算出する(S205)。
mvLX = mvpLX + mvdLX
次に、図14のS103、及び図15のS203で共通の予測動きベクトルの候補の導出及び予測動きベクトルリスト構築処理手順を図16のフローチャートを用いて詳細に説明する。
(動きベクトルの予測方法)
図16は動画像符号化装置の差分動きベクトル算出部103及び動画像復号装置の動きベクトル算出部204とで共通する機能を有する予測動きベクトル候補生成部121及び221、予測動きベクトル候補登録部122及び222、ならびに予測動きベクトル冗長候補削除部123及び223、予測動きベクトル候補数制限部124及び224の処理手順を表すフローチャートである。
はじめに、予測動きベクトル候補生成部121及び221は異なる時間のピクチャの予測ブロックからの予測動きベクトルの候補を導出し、異なる時間のピクチャの予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXCol、及び動きベクトルmvLXCol、参照インデックスrefIdxCol、リストListColを導出する(図16のS301)。このステップS301の導出処理手順を図24〜図30のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル候補生成部121及び221は左側に隣接する予測ブロックからの予測動きベクトルの候補を導出し、左側に隣接する予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXA、及び動きベクトルmvLXA、参照インデックスrefIdxA、リストListAを導出する(図16のS302)。なお、L0のときXは0、L1のときXは1とする(以下同様)。続いて、予測動きベクトル候補生成部121及び221は上側に隣接する予測ブロックからの予測動きベクトルの候補を導出し、上側に隣接する予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXB、及び動きベクトルmvLXB、参照インデックスrefIdxB、リストListBを導出する(図16のS303)。図16のステップS302とS303の処理は参照する隣接ブロックの位置と数が異なること、及び隣接ブロックのスキャン手順が異なること以外は共通であり、予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXN、及び動きベクトルmvLXN、参照インデックスrefIdxN、ListN(NはAまたはB、以下同様)を導出する。S302及びS303の処理手順を図17〜図21のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル候補登録部122及び222は予測動きベクトルリストmvpListLXを作成し、LXのそれぞれの予測ベクトルの候補mvLXCol, mvLXA, mvLXBを追加する(図16のS304)。このステップS304の登録処理手順を図31のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル冗長候補削除部123及び223は予測動きベクトルリストmvpListLX内の左側に隣接する予測ブロックグループから導出された空間予測動きベクトル候補mvLXAおよび上側に隣接する予測ブロックグループから導出された空間予測動きベクトル候補mvLXBが同じ値を持っている場合に、一方を冗長な動きベクトルの候補と判断し、最も小さい順序、即ち最も小さいインデックスiの動きベクトルの候補mvLXAを残して、冗長な動きベクトルの候補mvLXBを取り除く(図16のS305)。冗長候補削除比較部では、時間予測動きベクトル候補mvLXColと空間予測動きベクトル候補mvLXAまたはmvLXB間の動きベクトル冗長性比較を行わない。これは、時間予測動きベクトル候補と空間予測動きベクトル候補の生成はアクセスする動き情報メモリが異なることや各処理量が異なることから並列処理することが多いため、時間予測動きベクトル候補と空間予測動きベクトル候補間の動きベクトル比較を行ってしまうと、並列処理を行う場合の同期を早める必要があり、どちらかの処理の待ち時間が増加するためである。そのため、時間予測動きベクトル候補と空間予測動きベクトル候補の導出処理をできるだけ分離しておくことが望ましいため、本発明では時間予測動きベクトル候補と空間予測動きベクトル候補間の動きベクトル冗長性比較は行わない。時間予測動きベクトルと空間予測動きベクトルは、動きベクトルの導出プロセスが違うため異なる性質の予測動きベクトルが導出される。そのため、時間予測動きベクトルと空間予測動きベクトルが同一となる確率は低く、時間予測動きベクトル候補と空間予測動きベクトル候補間の動きベクトル比較を行わなくても符号化効率の低下はない。このステップS305の削除処理手順を図32のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル候補数制限部124及び224は予測動きベクトルリストmvpListLX内に追加された要素の数をカウントし、その数がLXの予測動きベクトル候補数numMVPCandLXに設定され、予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを規定された最終候補数finalNumMVPCandに制限する。(図16のS306)。このステップS306の削除処理手順を図33のフローチャートを用いて後ほど詳細に説明する。
図16のS301、S302の左側または上側に隣接する予測ブロックから予測動きベクトルの候補をそれぞれ導出する手順について詳細に説明する。
図5、図6、図7、図8に示されるように、同一ピクチャ内の符号化ブロック内部を動き補償する為に定義される予測ブロック(図5、図6、図7、図8中の処理対象の予測ブロック)に隣接する周囲の予測ブロックから予測動きベクトルの候補を導出する。
予測動きベクトルの候補は、処理対象の予測ブロックの左側に隣接する予測ブロックAk(k=0,1)、すなわちA0、A1から構成される予測ブロックグループA、上に隣接する予測ブロックBk(k=0,1,2)、すなわちB0、B1、B2から構成される予測ブロックグループBからそれぞれ予測動きベクトルの候補を選出する。
次に、図16のS301およびS302の処理手順である左側および上側に隣接する予測ブロックグループNからの予測動きベクトルの候補の導出方法について説明する。図17は前述のスキャン方法による図16のS301およびS302の予測動きベクトル候補導出処理手順を示すフローチャートである。添え字Xには参照リストを表す0若しくは1、Nには隣接する予測ブロックグループの領域を表すA(左側)またはB(上側)が入る。
左側の予測ブロックから予測動きベクトルの候補を導出するには(図16のS301)、図17でNがAとして符号化/復号対象の予測ブロックの左側に隣接するA0、A1の予測ブロックから予測動きベクトルの候補を、上側の予測ブロックから予測動きベクトルの候補を導出するには(図16のS302)、図17でNがBとして上側に隣接するB0、B1、B2予測ブロックから予測動きベクトルの候補を、それぞれ以下の手順で算出する。
まず、符号化/復号対象の予測ブロックに隣接する予測ブロックを特定し、それぞれの予測ブロックNk(k=0,1,2、ただし2は上側の予測ブロックグループのみ)が利用できる場合は符号化情報格納メモリ114または符号化情報格納メモリ209に格納されている符号化情報を取得する。ここで取得する隣接する予測ブロックNkの符号化情報は、予測モードPredMode、LXを利用するかどうかを示すフラグpredFlagLX [xNk][yNk]、LXの参照インデックスrefIdxLX [xNk][yNk]、LXの動きベクトルmvLX [xNk][yNk]である。符号化/復号対象の予測ブロックの左側に隣接する予測ブロックグループ(N=A)の場合(S1101のYES)、左下に隣接する予測ブロックA0、左に隣接する予測ブロックA1を特定して符号化情報を取得し(S1102、S1103)、符号化/復号対象の予測ブロックの上側に隣接する予測ブロックグループ(N=B)の場合(S1101のNO)、右上に隣接する予測ブロックB0、上に隣接する予測ブロックB1、左上に隣接する予測ブロックB2を特定して符号化情報を取得する(S1104、S1105、S1106)。なお、隣接する予測ブロックNkが符号化/復号対象予測ブロックを含むスライスの内側に位置する場合は利用でき、外側に位置する場合は利用できない。
次に、予測ブロックグループNから予測動きベクトルが選出されるか否かを示すフラグavailableFlagLXNを0、予測ブロックグループNを代表する動きベクトルmvLXNを(0,0)に設定する(S1107)。
続いて、前述の条件判定1または条件判定2に合致する予測動きベクトル候補を導出する(S1108)。予測ブロックグループN(NはAまたはB)の隣接予測ブロックN0、N1、N2(N2は上側の隣接予測ブロックグループBのみ)の中で、符号化/復号対象予測ブロックで現在対象としている参照リストLXと同じ参照リストLX、または符号化/復号対象予測ブロックで現在対象としている参照リストLXと反対の参照リストLY(Y=!X:現在対象としている参照リストがL0のとき、反対の参照リストはL1、現在対象としている参照リストがL1のとき、反対の参照リストはL0)で同じ参照ピクチャの動きベクトルを持つ予測ブロックを探してその動きベクトルを予測動きベクトル候補とする。
図18は図17のステップS1108の導出処理手順を示すフローチャートである。隣接する予測ブロックNk(k=0,1,2、ただし、2は上側の隣接予測ブロックグループのみ)に対して、kが0,1,2の順番にそれぞれ以下の処理を行う(S1201〜S1207)。NがAの場合下から上にA0,A1の順序で、NがBの場合、右から左にB0,B1,B2の順序で、それぞれ以下の処理を行う。
隣接する予測ブロックNkが利用でき、予測ブロックNkの予測モードPredModeがイントラ(MODE_INTRA)でない場合(S1202のYES)、前述の条件判定1の条件判定を行う(S1203)。隣接する予測ブロックNkのLXを利用するどうかを示すフラグpredFlagLX [xNk][yNk]が1、即ち隣接する予測ブロックNkが算出対象と同じLXの動きベクトルを用いてインター予測されており、隣接する予測ブロックNkのLXの参照インデックスrefIdxLX[xNk][yNk]と処理対象の予測ブロックのインデックスrefIdxLXが同じ、即ち隣接する予測ブロックNkがLX予測で同じ参照ピクチャを用いてインター予測されている場合(S1203のYES)、ステップS1204に進み、そうでない場合(S1203のNO)、ステップS1205の条件判定を行う。
ステップS1203がYESの場合、フラグavailableFlagLXNが1に設定され、予測ブロックグループNの予測動きベクトルmvLXNが隣接する予測ブロックNkのLXの動きベクトルmvLX[xNk][yNk]と同じ値に設定され、予測ブロックグループNの参照インデックスrefIdxNが隣接する予測ブロックNkのLXの参照インデックスrefIdxLX[xNk][yNk]と同じ値に設定され、予測ブロックグループNの参照リストListNがLXに設定され(S1204)、本予測動きベクトル候補算出処理を終了する。
一方、ステップS1203がNOの場合、前述の条件判定2の条件判定を行う(S1205)。隣接する予測ブロックNkのLYを利用するどうかを示すフラグpredFlagLYが1、即ち隣接する予測ブロックNkが算出対象と異なるLYの動きベクトルを用いてインター予測されており、隣接する予測ブロックNkの現在対象としている参照リストLXと反対の参照リストLYの参照ピクチャのPOCと処理対象の予測ブロックのLXの参照ピクチャのPOCが同じ、即ち隣接する予測ブロックNkがLY予測で同じ参照ピクチャを用いてインター予測されている場合(S1205のYES)、ステップS1206に進み、フラグavailableFlagLXNが1に設定され、予測ブロックグループNの予測動きベクトルmvLXNが隣接する予測ブロックNkのLYの動きベクトルmvLY[xNk][yNk]と同じ値に設定され、予測ブロックグループNの参照インデックスrefIdxNが隣接する予測ブロックNkのLYの参照インデックスrefIdxLY[xNk][yNk]と同じ値に設定され、予測ブロックグループNの参照リストListNがLYに設定され(S1206)、本予測動きベクトル候補算出処理を終了する。
これらの条件に合致しない場合、即ちS1203のNOでかつS1205のNOの場合、kを1増加し、次の隣接予測ブロックの処理(S1201〜S1207)を行い、availableFlagLXNが1になるか、隣接ブロックA1またはB2の処理が終わるまで繰り返す。
続いて、図17のフローチャートに戻り、左側に隣接する予測ブロックグループ(N=A)であり、且つ、availableFlagLXNが0のとき(S1109のYES)、即ち左側に隣接する予測ブロックグループにおいてステップS1108で予測動きベクトルの候補が算出できなかった場合、前述の条件判定3または条件判定4に合致する予測動きベクトル候補を算出する(S1110)。
図19は図17のステップS1110の導出処理手順を示すフローチャートである。隣接する予測ブロックNk(k=0,1)に対して、kが0,1の順番にそれぞれ以下の処理を行う(S1301〜S1307)。
隣接する予測ブロックNkが利用でき、予測ブロックNkの予測モードPredModeがイントラ(MODE_INTRA)でない場合(S1302のYES)、前述の条件判定3の条件判定を行う(S1303)。隣接する予測ブロックNkのLXを利用するどうかを示すフラグpredFlagLX [xNk][yNk]が1、即ち隣接する予測ブロックNkが算出対象と同じLXの動きベクトルを用いてインター予測されている場合、ステップS1304に進み、そうでない場合(S1303のNO)、ステップS1305の条件判定を行う。
ステップS1303がYESの場合、フラグavailableFlagLXNが1に設定され、予測ブロックグループNのmvLXNが隣接する予測ブロックNkのLXの動きベクトルmvLX[xNk][yNk]と同じ値に設定され、予測ブロックグループNの参照インデックスrefIdxNが隣接する予測ブロックNkのLXの参照インデックスrefIdxLX[xNk][yNk]と同じ値に設定され、予測ブロックグループNの参照リストListNがLXに設定され(S1304)、ステップS1308に進む。
ステップS1303がNOの場合、前述の条件判定4の条件判定を行う(S1305)。隣接する予測ブロックNkのLYを利用するどうかを示すフラグpredFlagLYが1、即ち隣接する予測ブロックNkが算出対象と異なるLYの動きベクトルを用いてインター予測されている場合(S1305のYES)、フラグavailableFlagLXNが1に設定され、予測ブロックグループNの予測動きベクトルmvLXNが隣接する予測ブロックNkのLYの動きベクトルmvLY[xNk][yNk]と同じ値に設定され、予測ブロックグループNの予測動きベクトルmvLXNが隣接する予測ブロックNkのLYの動きベクトルmvLY[xNk][yNk]と同じ値に設定され、予測ブロックグループNの参照インデックスrefIdxNが隣接する予測ブロックNkのLYの参照インデックスrefIdxLY[xNk][yNk]と同じ値に設定され、予測ブロックグループNの参照リストListNがLYに設定され(S1306)、ステップS1308に進む。
一方、これらの条件に合致しない場合(S1303のNOでかつS1305のNOの場合)、kを1増加し、次の隣接予測ブロックの処理(S1301〜S1307)を行い、availableFlagLXNが1になるか、隣接ブロックA1の処理が終わるまで繰り返し、ステップS1308に進む。
続いて、availableFlagLXNが1のとき(S1308のYES)、mvLXNをスケーリングする(S1309)。このステップS1309の空間予測動きベクトル候補のスケーリング演算処理手順を図20及び図21を用いて説明する。
図20は図19のステップS1309の動きベクトルのスケーリング演算処理手順を示すフローチャートである。
現在の符号化/復号対象ピクチャのPOCから、隣接予測ブロックのリストListNが参照する参照ピクチャのPOCを減算してピクチャ間距離tdを算出する(S1601)。なお、現在の符号化/復号対象ピクチャよりも隣接予測ブロックのリストListNで参照する参照ピクチャの方が表示順序で前の場合、ピクチャ間距離tdは正の値となり、現在の符号化/復号対象ピクチャよりも隣接予測ブロックの参照リストListNで参照する参照ピクチャの方が表示順序で後の場合、ピクチャ間距離tdは負の値となる。
td=現在の符号化/復号対象ピクチャのPOC−隣接予測ブロックの参照リストListNで参照する参照ピクチャのPOC
次に、現在の符号化/復号対象ピクチャのPOCから現在の符号化/復号対象ピクチャのリストLXが参照する参照ピクチャのPOCを減算してピクチャ間距離tbを算出する(S1602)。なお、現在の符号化/復号対象ピクチャよりも現在の符号化/復号対象ピクチャのリストLXで参照する参照ピクチャの方が表示順序で前の場合、ピクチャ間距離tbは正の値となり、現在の符号化/復号対象ピクチャのリストLXで参照する参照ピクチャの方が表示順序で後の場合、ピクチャ間距離tbは負の値となる。
tb=現在の符号化/復号対象ピクチャのPOC−現在の符号化/復号対象ピクチャの参照リストLXで参照する参照ピクチャのPOC
続いて、次式によりmvLXNにスケーリング係数tb/tdを乗じることでスケーリング演算処理を行い(S1603)、スケーリングされた動きベクトルmvLXNを得る。
mvLXN=tb/td*mvLXN
また、ステップS1603のスケーリング演算を整数精度の演算で行う場合の例を図21に示す。図21のステップS1604〜S1606の処理が、図20のステップS1603の処理に相当する。
まず、図20のフローチャートと同様に、ピクチャ間距離tdとピクチャ間距離tbを算出する(S1601、S1602)。
続いて、次式により変数txを算出する(S1603)。
tx = ( 16384 + Abs( td / 2 ) ) / td
続いて、次式によりスケーリング係数DistScaleFactorを算出する(S1605)。
DistScaleFactor = ( tb * tx + 32 ) >> 6
続いて、次式により、スケーリングされた動きベクトルmvLXNを得る(S1606)。
mvLXN = ClipMv( Sign( DistScaleFactor * mvLXN ) * ( (Abs( DistScaleFactor * mvLXN ) + 127 ) >> 8 ) )
次に、図16のS303の異なる時間のピクチャの予測ブロックから予測動きベクトルの候補の導出方法について詳細に説明する。図24は図16のステップS303の予測動きベクトル候補導出処理手順を説明するフローチャートである。
まず、slice_typeとcollocated_from_l0_flagにより、異なる時間のピクチャcolPicをL0の参照リスト或いはL1の参照リストのどちらに定義するかを決定する(図24のS2101)。
図25は図24のステップS2101の異なる時間のピクチャcolPicの導出処理手順を説明するフローチャートである。slice_typeがBで、前述のフラグcollocated_from_l0_flagが0の場合(図25のS2201のYES、S2202のYES)、RefPicList1[0]、すなわち参照リストL1の参照インデックスが0のピクチャが異なる時間のピクチャcolPicとなる(図25のS2203)。そうでない場合、すなわち前述のフラグcollocated_from_l0_flagが1の場合(図25のS2201のNO、S2202のNO、S2204のNO)、RefPicList0[0]、すなわち参照リストL0の参照インデックスが0のピクチャが異なる時間のピクチャcolPicとなる(図25のS2205)。
次に、図24のフローチャートに戻り、異なる時間の予測ブロックcolPUを算出し、符号化情報を取得する(図24のS2102)。
図26は図24のステップS2102の異なる時間のピクチャcolPicの予測ブロックcolPUの導出処理手順を説明するフローチャートである。
まず、異なる時間のピクチャcolPic内で処理対象の予測ブロックと同一位置の右下(外側)に位置する予測ブロックを異なる時間の予測ブロックcolPUに設定する(図26のS2301)。この予測ブロックは図9の予測ブロックT0に相当する。
次に、異なる時間の予測ブロック符号化ブロックのツリーブロックの外であるか、colPUのPredModeがMODE_INTRAの場合(図26のS2302、S2303)、異なる時間のピクチャcolPic内で処理対象の予測ブロックと同一位置の中央右下に位置する予測ブロックを異なる時間の予測ブロックcolPUに再設定する(図26のS2304)。この予測ブロックは図9の予測ブロックT1に相当する。colPuがツリーブロックの外である場合にcolPuを処理対象の予測ブロックと同一の中央右下に変更する理由は、ツリーブロック外からのcolPU情報取得はハードウェアのメモリアクセスのコストが大きいためである。
次に、図24のフローチャートに戻り、符号化/復号対象の予測ブロックと同位置の他ピクチャの予測ブロックから算出されるLXの予測動きベクトルmvLXColと予測ブロックグループColの参照リストLXの符号化情報が有効か否かを示すフラグavailableFlagLXColを算出する(図24のS2103)。
図27は図24のステップS2103のインター予測情報の導出処理を説明するフローチャートである。
異なる時間の予測ブロックcolPUのPredModeがMODE_INTRAか、利用できない場合(図27のS2401のNO、S2402のNO)、availableFlagLXColを0、mvLXColを(0,0)とし(図27のS2403、S2404)、処理を終了する。
予測ブロックcolPUが利用できてPredModeがMODE_INTRAでない場合(図27のS2401のYES、S2402のYES)、以下の手順でmvColとrefIdxColを算出する。
予測ブロックcolPUのL0予測が利用されているかどうかを示すフラグPredFlagL0[xPCol][yPCol]が0の場合(図27のS2405のYES)、予測ブロックcolPUの予測モードはPred_L1であるので、動きベクトルmvColが予測ブロックcolPUのL1の動きベクトルであるMvL1[xPCol][yPCol]と同じ値に設定され(図27のS2406)、参照インデックスrefIdxColがL1の参照インデックスRefIdxL1[xPCol][yPCol]と同じ値に設定され(図27のS2407)、リストListColがL1に設定される(図27のS2408)。
一方、予測ブロックcolPUのL0予測フラグPredFlagL0[xPCol][yPCol]が0でない場合(図27のS2405のNO)、予測ブロックcolPUのL1予測フラグPredFlagL1[xPCol][yPCol]が0かどうかを判定する。予測ブロックcolPUのL1予測フラグPredFlagL1[xPCol][yPCol]が0の場合(図27のS2409のYES)、動きベクトルmvColが予測ブロックcolPUのL0の動きベクトルであるMvL0[xPCol][yPCol]と同じ値に設定され(図27のS2410)、参照インデックスrefIdxColがL0の参照インデックスRefIdxL0[xPCol][yPCol] と同じ値に設定され(図27のS2411)、リストListColがL0に設定される(図27のS2412)。
予測ブロックcolPUのL0予測フラグPredFlagL0[xPCol][yPCol]と予測ブロックcolPUのL1予測フラグPredFlagL1[xPCol][yPCol]が共に0でない場合(図27のS2405のNO,S2409のNO)、予測ブロックcolPUのインター予測モードは双予測(Pred_BI)であるので、L0、L1の2つの動きベクトルから、一方を選択する(図27のS2413)。
図28は予測ブロックcolPUのインター予測モードが双予測(Pred_BI)のときの予測ブロックのインター予測情報の導出処理手順を示すフローチャートである。
まず、すべての参照リストに登録されているすべてのピクチャのPOCが現在の符号化/復号対象ピクチャのPOCより小さいかどうかを判定し(S2501)、予測ブロックcolPUのすべての参照リストであるL0及びL1に登録されているすべてのピクチャのPOCが現在の符号化/復号対象ピクチャのPOCより小さい場合で(S2501のYES)、Xが0、即ち符号化/復号対象の予測ブロックのL0の動きベクトルの予測ベクトル候補を算出している場合(S2502のYES)、予測ブロックcolPUのL0の方のインター予測情報を選択し、Xが1、即ち符号化/復号対象の予測ブロックのL1の動きベクトルの予測ベクトル候補を算出している場合(S2502のNO)、予測ブロックcolPUのL1の方のインター予測情報を選択する。一方、予測ブロックcolPUのすべての参照リストL0及びL1に登録されているピクチャのPOCの少なくとも1つが現在の符号化/復号対象ピクチャのPOCより大きい場合で(S2501のNO)、フラグcollocated_from_l0_flagが0場合(S2503のYES)、予測ブロックcolPUのL0の方のインター予測情報を選択し、フラグcollocated_from_l0_flagが1の場合(S2503のNO)、予測ブロックcolPUのL1の方のインター予測情報を選択する。つまり、colPUがL1を用いて定義されている場合はmvColとしてL0を選択し、colPUがL0を用いて定義されている場合はmvColとしてL1を選択する。colPUの選択とmvColの選択リストを反対にすることで、colPicから符号化対象ピクチャの方向に向いた参照画像に対する動きベクトルを用いた内挿予測を行える可能性が精度の高い予測ベクトルを算出できる。
予測ブロックcolPUのL0の方のインター予測情報を選択する場合(S2502のYES、S2503のYES)、動きベクトルmvColがMvL0[xPCol][yPCol]と同じ値に設定され(S2504)、参照インデックスrefIdxColがRefIdxL0[xPCol][yPCol]と同じ値に設定され(S2505)、リストListColがL0に設定される(S2506)。
予測ブロックcolPUのL1の方のインター予測情報を選択する場合(S2502のNO、S2503のNO)、動きベクトルmvColがMvL1[xPCol][yPCol]と同じ値に設定され(S2507)、参照インデックスrefIdxColがRefIdxL1[xPCol][yPCol]と同じ値に設定され(S2508)、リストListColがL1に設定される(S2509)。
図27に戻り、予測ブロックcolPUからインター予測情報が取得できたらavailableFlagLXColを1とする(図27のS2414)。
次に、図24のフローチャートに戻り、availableFlagLXColが1の場合(図24のS2104のYES)、必要に応じてmvLXColをスケーリングする(図24のS2105)。この動きベクトルmvLXColのスケーリング演算処理手順を図29及び図30を用いて説明する。
図29は図24のステップS2105の動きベクトルのスケーリング演算処理手順を示すフローチャートである。
異なる時間のピクチャcolPicのPOCから、予測ブロックcolPUのリストListColで参照する参照ピクチャのPOCを減算してピクチャ間距離tdを算出する(S2601)。なお、異なる時間のピクチャcolPicよりも予測ブロックcolPUのリストListColで参照する参照ピクチャのPOCの方が表示順序で前の場合、ピクチャ間距離tdは正の値となり、異なる時間のピクチャcolPicよりも予測ブロックcolPUのリストListColで参照する参照ピクチャのPOCの方が表示順序で後の場合、ピクチャ間距離tdは負の値となる。
td=異なる時間のピクチャcolPicのPOC−予測ブロックcolPUのリストListColで参照する参照ピクチャのPOC
現在の符号化/復号対象ピクチャのPOCから現在の符号化/復号対象ピクチャのリストLXが参照する参照ピクチャのPOCを減算してピクチャ間距離tbを算出する(S2602)。なお、現在の符号化/復号対象ピクチャよりも現在の符号化/復号対象ピクチャのリストLXで参照する参照ピクチャの方が表示順序で前の場合、ピクチャ間距離tbは正の値となり、現在の符号化/復号対象ピクチャのリストLXで参照する参照ピクチャの方が表示順序で後の場合、ピクチャ間距離tbは負の値となる。
tb=現在の符号化/復号対象ピクチャのPOC−現在の符号化/復号対象ピクチャの参照リストLXで参照する参照ピクチャのPOC
続いて、ピクチャ間距離tdとtbを比較し(S2603)、ピクチャ間距離tdとtbが等しい場合(S2603のYES)、本スケーリング演算処理を終了する。ピクチャ間距離tdとtbが等しくない場合(S2603のNO)、次式によりmvLXColにスケーリング係数tb/tdを乗じることでスケーリング演算処理を行い(S2604)スケーリングされた動きベクトルmvLXColを得る。
mvLXCol=tb/td*mvLXCol
また、ステップS2604のスケーリング演算を整数精度の演算で行う場合の例を図30に示す。図30のステップS2605〜S2607の処理が、図29のステップS2604の処理に相当する。
まず、図29のフローチャートと同様に、ピクチャ間距離tdとピクチャ間距離tbを算出する(S2601、S2602)。
続いて、ピクチャ間距離tdとtbを比較し(S2603)、ピクチャ間距離tdとtbが等しい場合(S2603のYES)、本スケーリング演算処理を終了する。ピクチャ間距離tdとtbが等しくない場合(S2603のNO)、次式により変数txを算出する(S2605)。
tx = ( 16384 + Abs( td / 2 ) ) / td
続いて、次式によりスケーリング係数DistScaleFactorを算出する(S2606)。
DistScaleFactor = ( tb * tx + 32 ) >> 6
続いて、次式により、スケーリングされた動きベクトルmvLXNを得る(S2607)。
mvLXN = ClipMv( Sign( DistScaleFactor * mvLXN ) * ( (Abs( DistScaleFactor * mvLXN ) + 127 ) >> 8 ) )
図16のS304の予測動きベクトルの候補を予測動きベクトルリストに追加する手順について詳細に説明する。
図16のS301、S302、及びS303にて算出されたLXのそれぞれの予測動きベクトルの候補mvLXCol, mvLXA, mvLXBをLXの予測動きベクトルリストmvpListLXに追加する(S304)。本発明の実施の形態では、優先順位をつけて、優先順位の高いものからLXの予測動きベクトルリストmvpListLXに予測動きベクトルの候補mvLXCol, mvLXA, mvLXBを登録することで、優先順位の高い要素を予測動きベクトルリストの前方に配置する。図16のS306で予測動きベクトルリストの中の要素数を制限する際に、予測動きベクトルリストの後方に配置された要素を予測動きベクトルリストから外すことで、優先順位の高い要素を残す。
予測動きベクトルリストmvpListLXはリスト構造を成し、予測動きベクトルリスト内部の所在を示すインデックスiで管理され、インデックスiに対応する予測動きベクトルの候補を要素として格納する記憶領域が設けられている。インデックスiの数字は0から開始され、予測動きベクトルリストmvpListLXの記憶領域に、予測動きベクトルの候補が格納される。以降の処理では、予測動きベクトルリストmvpListLXに登録されたインデックスiの要素である予測動きベクトルの候補は、mvpListLX[i]で表す。
次に、図16のS304のLXの予測動きベクトルリストmvpListLXへのLXの予測動きベクトルの候補mvLXCol, mvLXA, mvLXBの登録処理方法について詳細に説明する。図31は図16のステップS304の予測動きベクトル候補登録処理手順を示すフローチャートである。
まず、予測動きベクトルリストmvpListLXのインデックスiを0に設定する(S3101)。availableFlagLXColが1の場合(S3102のYES)、予測動きベクトルリストmvpListLXのインデックスiに対応する位置にLXの予測動きベクトル候補mvLXColを登録し(S3103)、インデックスiに1を加算することで更新する(S3104)。
続いて、availableFlagLXAが1の場合(S3105のYES)、予測動きベクトルリストmvpListLXmvpListLXのインデックスiに対応する位置にLXの予測動きベクトル候補mvLXAを登録し(S3106)、インデックスiに1を加算することで更新する(S3107)。
続いて、availableFlagLXBが1の場合(S3108のYES)、予測動きベクトルリストmvpListLXのインデックスiに対応する位置にLXの予測動きベクトル候補mvLXBを登録し(S3109)、予測動きベクトルリストへの登録処理を終了する。
予測動きベクトルリストの登録順は、1つの時間予測動きベクトル候補を登録した後に、2つの空間予測動きベクトル候補を登録する。つまり、時間予測動きベクトル候補の優先順位を空間予測動きベクトル候補より高く設定する。
次に、図16のS305の予測動きベクトルリスト中の冗長な予測動きベクトルの候補の削除方法について詳細に説明する。図32は図16のS305の予測動きベクトル冗長候補削除処理手順を示すフローチャートである。
予測動きベクトル冗長候補削除部123及び223は予測動きベクトルリストmvpListLXに登録されている空間予測された動きベクトルの候補同士を比較し(S4101)、複数の動きベクトルの候補が同じ値を持っている場合に(S4102のYES)、冗長な動きベクトルの候補と判断し、最も小さい順序、即ち最も小さいインデックスiの動きベクトルの候補を除いて冗長な動きベクトルの候補を取り除く(S4103)。ここで、時間予測動きベクトル候補と空間予測動きベクトル候補間については動きベクトルの候補同士の同一性比較を行わない。時間予測動きベクトル候補と空間予測動きベクトル候補の生成はアクセスする動き情報メモリが異なることや各処理量が異なることから並列処理により実装されることがある。時間予測動きベクトル候補と空間予測動きベクトル候補間の動きベクトル比較を行ってしまうと、並列処理を行う際に待ち時間が発生する。そのため、時間予測動きベクトル候補と空間予測動きベクトル候補の依存性が無いことが望ましいため、本発明では時間予測動きベクトル候補と空間予測動きベクトル候補間の動きベクトル冗長性比較は行わない。ここで、更なる処理量の削減のために、空間予測動きベクトル候補間の予測ベクトルが同一であるかどうかの判断も行わないことも可能である。なお、冗長な動きベクトルの候補を取り除いた後、予測動きベクトルリストmvpListLXの中は、削除された予測動きベクトルの候補の格納領域が空いている為、インデックスiが0を基準にして、インデックスiが小さい予測動きベクトルの候補の順で詰めていく(S4104)。例えば、インデックスiが1の予測動きベクトルの候補mvListLX[1]が削除され、インデックスiが0及び2の予測動きベクトルの候補mvListLX[0], mvListLX[2]が残った場合、インデックスiが2の予測動きベクトルの候補mvListLX[2]を新たにインデックスiが1の予測動きベクトルの候補mvListLX[1]に変更する。さらに、インデックスiが2の予測動きベクトルの候補mvListLX[2]は存在しないものと設定する。
次に、図16のS306の予測動きベクトルリスト中の動きベクトルの候補数の制限方法について詳細に説明する。図33は図16のS306の予測動きベクトル候補数制限処理手順を説明するフローチャートである。
予測動きベクトル候補数制限部124及び予測動きベクトル候補数制限部224はLXの予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを規定された最終候補数finalNumMVPCandに制限する。
まず、LXの予測動きベクトルリストmvpListLXに登録されている要素数をカウントし、LXの予測動きベクトル候補数numMVPCandLXに設定する(S5101)。
続いて、LXの予測動きベクトル候補数numMVPCandLXが最終候補数finalNumMVPCandよりも小さい場合(S5103のYES)、LXの予測動きベクトルリストmvpListLXのインデックスiが numMVPCandLXに対応する位置に(0, 0)の値を持つ動きベクトルを登録し(S5104)、numMVPCandLXに1を加算する(S5105)。numMVPCandLXとfinalNumMVPCandが同じ値の場合(S5105のYES)、本制限処理を終了し、numMVPCandLXとfinalNumMVPCandが同じ値でない場合(S5105のNO)、同じ値になるまで、ステップS5104とS5105の処理を繰り返す。すなわち、LXの予測動きベクトル候補数numMVPCandLXが最終候補数finalNumMVPCandに達するまで、(0, 0)の値を持つMVを登録する。このように重複して(0, 0)の値を持つMVを登録することにより、予測動きベクトルインデックスが0以上最終候補数finalNumMVPCand未満の範囲内でどのような値をとっても予測動きベクトルを確定することができる。
一方、LXの予測動きベクトル候補数numMVPCandLXが最終候補数finalNumMVPCandよりも大きい場合(S5103のNO、S5107のYES)、LXの予測動きベクトルリストmvpListLXのインデックスiがfinalNumMVPCand-1より大きいすべての予測動きベクトル候補を削除し(S5108)、numMVPCandLXにfinalNumMVPCandと同じ値を設定して(S5109)、本制限処理を終了する。
LXの予測動きベクトル候補数numMVPCandLXが最終候補数finalNumMVPCandと等しい場合(S5103のNO、S5107のNO)、制限処理を施さずに本制限処理を終了する。
(実施の形態2)
第二の実施の形態では、復号側では予測動きベクトルリストを生成せずに、予測動きベクトルを特定する。予測動きベクトルリストを生成する場合、空間候補と時間候補のそれぞれでスケーリング演算を必要とするが、第二の実施の形態では予測動きベクトルリストを生成せずに予測動きベクトルを特定することで、スケーリング演算回数を抑制することが可能である。符号化装置の実施の形態及び復号装置のその他の実施の形態は実施の形態1と同一である。なお、予測動きベクトルは第一の実施の形態と同一の復号結果が得られる。
図22は実施の形態2における復号側の予測動きベクトル導出を示すフローチャートである。
まず、予測動きベクトル候補のインデックスであるmvp_idx_LX及び時間候補が利用可能であるかどうかを示すavailableFlagLXColを取得する(S2201、S2202)。mvp_idx_LXとavailableFlagLXColの取得順序はとどちらでも良いので、S2201とS2202の順序を変更しても良い。次に、取得したmvp_idx_LXとavailableFlagLXColの値がmvp_idx_LX==0であり且つavailableFlagLXCol==1であるかどうかを判断する(S2203)。予測動きベクトルはmvLXCol, mvLXA, mvLXBの優先順序で登録(生成)されているため、mvp_idx_LX==0であり且つavailableFlagLXCol==1である場合には(S2203のYES)、予測動きベクトル候補は時間予測動きベクトル候補であると特定できるため、異なる時間からの予測ブロックから動きベクトルを導出し、導出された動きベクトルを予測動きベクトルとする(S2204)。mvp_idx_LX==0であり且つavailableFlagLXCol==1でない場合には(S2203のNO)、つまり、mvp_idx_LX=!0であるか、availableFlagLXCol==0の場合には、予測動きベクトル候補は空間予測動きベクトル候補であると特定できるため、空間の予測ブロックから動きベクトルを導出する。これは、本発明では予測ベクトル候補をmvLXCol, mvLXA, mvLXBの順序に登録し、時間予測動きベクトル候補の優先順位を一番高く設定しているため、時間予測動きベクトル候補が存在する場合には必ずmvp_idx_LX==0となり、mvp_idx_LX!=0の場合には、必ず空間予測動きベクトル候補と特定できること、及び、availableFlagLXCol==0の場合には、時間予測動きベクトル候補が存在しないことを示すことから、予測動きベクトルは空間予測動きベクトル候補と特定できることから、mvp_idx_LX及びavailableFlagLXColの値に応じて、予測動きベクトルが時間予測動きベクトル候補であるか、空間予測動きベクトル候補であるかを判断可能である。
予測動きベクトルが空間予測動きベクトル候補であると判断した場合(S2203のNO)、第一の実施の形態の図16のS303同様に、左側の予測ブロックから予測ベクトル候補を導出し(S2205)、上側の予測ブロックから予測ベクトル候補を導出する(S2206)。続いて、左側の予測ブロックからの予測ベクトル候補と上側の予測ブロックからの予測ベクトルが同一動きベクトルでないかどうかを判断し、動きベクトルが同一である場合には、一方を削除する(S2207)。最後にmvp_idx_LXの値に基づいて予測動きベクトルを選択する(S2208)。ここで、更なる処理量の削減のために、空間予測動きベクトル候補間の予測ベクトルが同一であるかどうかの判断も行わずに、availableFlagLXAだけで空間予測動きベクトル候補を特定することも可能である。
図23に予測動きベクトルが空間予測動きベクトル候補であると判断した場合(図22のS2203のNO)の予測動きベクトル選択(図22のS2208)のパターンを示す。mvp_idx_LX==0であり且つavailableFlagLXCol==0の場合には空間候補の1番目を選択し、mvp_idx_LX==1であり且つavailableFlagLXCol==1の場合には空間候補の1番目を選択し、mvp_idx_LX==1であり且つavailableFlagLXCol==0の場合には空間候補の2番目を選択する。また、各条件でそれぞれ空間予測動きベクトル候補が存在しない場合には予測動きベクトルを(0, 0)とする。
第二の実施の形態のように、予測動きベクトルリストを生成せずに予測動きベクトルを特定することで、よって、第一の実施の形態で復号する場合と同一の予測ベクトルを得られる上、以下の効果がある。
mvp_idx_LX及びavailableFlagLXColの値から予測動きベクトルが時間予測動きベクトル候補であるか空間予測動きベクトル候補であるか判断可能なため、時間予測動きベクトル候補の予測ベクトル導出処理と空間予測動きベクトル候補の予測ベクトル導出処理のどちらか一方のみ実行すればよいため、時間予測動きベクトル候補と空間予測動きベクトル候補の両方を導出する場合と比較して、復号処理量が約半分になる。そのためソフトウェアにおいては実行速度が速くなり、ハードウェアにおいては消費電力が削減できる。
また、予測動きベクトルリストを生成する場合、時間予測動きベクトル候補及び空間予測動きベクトル候補のそれぞれで予測動きベクトルのスケーリング演算が必要な場合において、第一の実施の形態では、時間予測動きベクトル候補導出に1回、空間予測動きベクトル候補導出に1回、スケーリング演算が必要であったが、第二の実施の形態では、時間予測動きベクトル候補の予測ベクトル導出処理と空間予測動きベクトル候補の予測ベクトル導出処理のどちらかを選択して実行するため、復号側ではスケーリング演算を1回のみ行うことで予測動きベクトルを導出可能である。そのため、特にハードウェアで除算が必要となるスケーリング回路を、時間予測動きベクトル候補導出用と空間予測動きベクトル候補導出用で共用可能になるため、回路規模を削減できる。
さらに、本発明の第一の実施の形態と第二の実施の形態の復号結果は同一であるため、復号側でアーキテクチャの選択が可能となる。つまり、カムコーダなど符号化装置と復号装置が一体となっているシステムなど、復号側と符号化側で同一の構成にしたい場合は、第一の実施の形態のように予測動きベクトルのリストを生成して予測動きベクトルを特定すれば良い。一方、復号側の処理量を削減することのみに注力する場合は、第二の実施の形態のように、予測動きベクトルのリストを生成せずに時間候補であるか空間候補であるかを特定した後、空間候補導出又は時間候補導出の一方のみを動作させ予測動きベクトルを特定すればよい。
このような本発明の効果をもたらす実施の形態のポイントは以下の2点である。
1.時間予測動きベクトル候補(候補が1つ)を空間予測動きベクトル候補(候補が2つ)より優先順位を高く設定すること。
2.予測動きベクトルが同一である場合の冗長候補削除処理を時間予測動きベクトル候補と空間予測動きベクトル候補間では行わないこと。(空間予測動きベクトル候補間のみ冗長候補削除処理を許可する。)
つまり、単一の予測動きベクトル候補を持ち時間予測動きベクトル候補利用可能フラグavailableFlagLXColによって予測動きベクトル候補が存在するかどうかを一意に決定できる時間予測動きベクトル候補の優先順位を高く設定し、複数の予測動きベクトル候補を持ち予測動きベクトル候補の数が変化する空間予測動きベクトルの優先順位を低く設定して予測動きベクトルを予測動きベクトルのリストに登録することが特徴である。空間予測動きベクトル候補間では同一性判定により、冗長な候補が削除されて候補数が削減されるため、予測動きベクトル候補リスト上では優先順位を低くして下位に登録する。一方、時間予測動きベクトル候補は、空間予測動きベクトル候補との間では同一性判定がされないため、時間予測動きベクトル候補については、予測動きベクトル候補リスト上では優先順位を高くして上位に登録する。これにより、空間予測動きベクトルと時間予測動きベクトルをリスト上で分離することが可能になり、動きベクトル予測において空間方向と時間方向の分離性を高め、処理の効率化や回路規模の削減を図ることができる。
以上述べた実施の形態の動画像符号化装置が出力する動画像の符号化ストリームは、実施の形態で用いられた符号化方法に応じて復号することができるように特定のデータフォーマットを有しており、動画像符号化装置に対応する動画像復号装置がこの特定のデータフォーマットの符号化ストリームを復号することができる。
動画像符号化装置と動画像復号装置の間で符号化ストリームをやりとりするために、有線または無線のネットワークが用いられる場合、符号化ストリームを通信路の伝送形態に適したデータ形式に変換して伝送してもよい。その場合、動画像符号化装置が出力する符号化ストリームを通信路の伝送形態に適したデータ形式の符号化データに変換してネットワークに送信する動画像送信装置と、ネットワークから符号化データを受信して符号化ストリームに復元して動画像復号装置に供給する動画像受信装置とが設けられる。
動画像送信装置は、動画像符号化装置が出力する符号化ストリームをバッファするメモリと、符号化ストリームをパケット化するパケット処理部と、パケット化された符号化データをネットワークを介して送信する送信部とを含む。動画像受信装置は、パケット化された符号化データをネットワークを介して受信する受信部と、受信された符号化データをバッファするメモリと、符号化データをパケット処理して符号化ストリームを生成し、動画像復号装置に提供するパケット処理部とを含む。
以上の符号化及び復号に関する処理は、ハードウェアを用いた伝送、蓄積、受信装置として実現することができるのは勿論のこと、ROM(リード・オンリ・メモリ)やフラッシュメモリ等に記憶されているファームウェアや、コンピュータ等のソフトウェアによっても実現することができる。そのファームウェアプログラム、ソフトウェアプログラムをコンピュータ等で読み取り可能な記録媒体に記録して提供することも、有線あるいは無線のネットワークを通してサーバから提供することも、地上波あるいは衛星ディジタル放送のデータ放送として提供することも可能である。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。