本実施の形態では、動画像の符号化に関し、特にピクチャを任意のサイズ、形状の矩形ブロックに分割し、ピクチャ間でブロック単位に動き補償を行う動画像符号化における符号化効率を向上させる為に、符号化済みの周囲のブロックの動きベクトルから複数の予測動きベクトルを算出し、符号化対象のブロックの動きベクトルと選択された予測動きベクトルとの差分ベクトルを算出して符号化することによって符号量を削減する。あるいは、符号化済みの周囲のブロックの符号化情報を利用することにより、符号化対象ブロックの符号化情報を推定することによって符号量を削減する。また、動画像の復号の場合は、復号済みの周囲のブロックの動きベクトルから複数の予測動きベクトルを算出し、符号化ストリームから復号された差分ベクトルと選択された予測動きベクトルとから復号対象のブロックの動きベクトルを算出して復号する。あるいは、復号済みの周囲のブロックの符号化情報を利用することにより、復号対象ブロックの符号化情報を推定する。
まず、本実施の形態において使用する技術、及び技術用語を定義する。
(ツリーブロック、符号化ブロックについて)
実施の形態では、図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)とそれぞれ定義する。なお、イントラ予測(MODE_INTRA)の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とする。
図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は本発明の実施の形態に係る動画像符号化装置の構成を示すブロック図である。実施の形態の動画像符号化装置は、画像メモリ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がイントラ予測(PRED_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がインター予測(PRED_INTER)の場合、マージモードかどうかを判別するフラグ、マージモードの場合はマージインデックス、マージモードでない場合はインター予測モード、参照インデックス、予測動きベクトルインデックス、差分動きベクトルに関する情報等の符号化情報を後述する規定のシンタックス規則に従って符号化して第1の符号化ビット列を生成し、多重化部111に供給する。なお、予測動きベクトルリストに登録される予測動きベクトルの候補数が1の場合、予測動きベクトルインデックスmvp_idxは0と特定できるので、符号化しない。本実施の形態においては、後述するように符号化対象の予測ブロックのサイズに応じて、予測動きベクトルの候補数が設定される。そこで、第1の符号化ビット列生成部109では、符号化対象の予測ブロックのサイズに応じて、予測動きベクトルの候補数を設定し、設定された候補数が1より大きい場合に予測動きベクトルインデックスを符号化する。
第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に供給する。なお、マージモードでない場合、後述する予測動きベクトルリストに登録される予測動きベクトルの候補が1つの場合、予測動きベクトルインデックスは0と特定できるので、予測動きベクトルインデックスは符号化されておらず、予測動きベクトルインデックスを0とする。本実施の形態においては、後述するように復号対象の予測ブロックのサイズに応じて、予測動きベクトルの候補数が設定される。そこで、第1符号化ビット列復号部202では、復号対象の予測ブロックのサイズに応じて、予測動きベクトルの候補数を設定し、設定された候補数が1より大きい場合に予測動きベクトルインデックスを復号する。
第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等である。ここで、予測モードがイントラ予測(PRED_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予測を利用するかどうかを示すフラグpredFlagL0, predFlagL1、L0、L1の参照インデックスrefIdxL0, refIdxL1、L0、L1の動きベクトルmvL0, mvL1等のインター予測情報を動き補償予測部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成分を表す。次に、符号化または復号対象の予測ブロックのサイズに応じて設定される差分動きベクトルの候補数が1より大きい場合に、参照する予測動きベクトルの候補のリストである予測動きベクトルリストのインデックスのシンタックス要素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の予測動きベクトルインデックスである。関数NumMVPCand(LX)は、予測方向LX(Xは0或いは1)で予測ブロックの予測動きベクトルの候補の総数を算出する関数を表し、後述の符号化または復号対象の予測ブロックのサイズに応じて規定された最終候補数finalNumMVPCandと同じ値が設定される。図12は規定された予測動きベクトルの候補数毎の予測動きベクトルインデックスのシンタックス要素mvp_idx_l0[x0][y0]、mvp_idx_l1[x0][y0]のエントロピー符号の一例である。予測動きベクトルインデックスmvp_idx_lx[x0][y0]は動きベクトルの予測方法により予測動きベクトルの候補数NumMVPCand(LX)が1より大きい場合に符号化される。予測動きベクトルの候補の総数が1つであれば、その1つが予測動きベクトルとなるので、mvp_idx_lx[x0][y0]を伝送せずとも参照する予測動きベクトルの候補が確定する為である。予測動きベクトルの候補数NumMVPCand(LX)が2の場合、予測動きベクトルインデックスが0の時、予測動きベクトルインデックスのシンタックス要素mvp_idx_l0[x0][y0]、mvp_idx_l1[x0][y0]の符号は'0'となり、予測動きベクトルインデックスが1の時、予測動きベクトルインデックスのシンタックス要素mvp_idx_l0[x0][y0]、mvp_idx_l1[x0][y0]の符号は'1'となる。予測動きベクトルの候補数NumMVPCand(LX)が3の場合、予測動きベクトルインデックスが0の時、予測動きベクトルインデックスのシンタックス要素mvp_idx_l0[x0][y0]、mvp_idx_l1[x0][y0]の符号は'0'となり、予測動きベクトルインデックスが1の時、予測動きベクトルインデックスのシンタックス要素mvp_idx_l0[x0][y0]、mvp_idx_l1[x0][y0]の符号は'10'となり、予測動きベクトルインデックスが2の時、予測動きベクトルインデックスのシンタックス要素mvp_idx_l0[x0][y0]、mvp_idx_l1[x0][y0]の符号は'11'となる。本発明の実施の形態においては、符号化または復号対象の予測ブロックのサイズに応じて、予測動きベクトルの候補数が設定され、詳細については後述する。
実施の形態に係る動きベクトルの予測方法は、図1の動画像符号化装置の差分動きベクトル算出部103及び図2の動画像復号装置の動きベクトル算出部204において実施される。
実施の形態による動きベクトルの予測方法を図面を用いて説明する。動きベクトルの予測方法は、符号化ブロックを構成する予測ブロック単位に、符号化及び復号の処理の何れでも実施される。予測ブロックの予測モードがインター予測(MODE_INTER)で、マージモードでない場合に、符号化の場合、符号化対象の動きベクトルから符号化する差分動きベクトルを算出する時に用いる符号化済みの動きベクトルを利用して予測動きベクトルを導出する際、復号の場合、復号対象の動きベクトルを算出する時に用いる復号済みの動きベクトルを利用して予測動きベクトルを導出する際に実施される。
(符号化における動きベクトルの予測)
上述のシンタックスに基づき、動画像のビットストリームを符号化する動画像符号化装置において、実施の形態に係る動きベクトルの予測方法の動作を説明する。動きベクトルの予測方法は、スライス単位で動き補償予測を行う場合、即ちスライスタイプがPスライス(片方向予測スライス)或いはBスライス(両方向予測スライス)の場合で、更に、スライスの中の予測ブロックの予測モードがインター予測(MODE_INTER)で、マージモードでない差分動きベクトルを符号化または復号する予測ブロックに適用される。
図13は、図1の動画像符号化装置の差分動きベクトル算出部103の詳細な構成を示す図である。図13の太枠線で囲まれる部分は差分動きベクトル算出部103を示している。
更に、その内部の太点線で囲まれる部分は後述する動きベクトルの予測方法の動作部を示しており、実施の形態の動画像符号化装置と対応する動画像復号装置にも同様に設置され、符号化と復号で矛盾しない同一の導出結果を得られるようにしている。以下、この図を用いて、符号化における動きベクトルの予測方法を説明する。
本実施の形態においては、符号化または復号対象の予測ブロックのサイズに応じて、予測動きベクトルの最終候補数finalNumMVPCandを設定する。差分動きベクトル算出部103では、符号化対象の輝度信号の予測ブロックのサイズが規定したサイズsizePUNumMVPCand以下の場合、finalNumMVPCandを後者よりも小さい数に設定し、そうでない場合、finalNumMVPCandを前者よりも大きい数に設定する。本実施の形態においては、規定するサイズsizePUNumMVPCandを8x8とし、符号化または復号対象の輝度信号の予測ブロックのサイズが規定したサイズsizePUNumMVPCand以下の場合は、finalNumMVPCandを1に設定し、それ以外の場合は、finalNumMVPCandを2に設定する。
予測ブロックのサイズが小さい場合、単位面積当たりの予測ブロックの数が多くなるので、後述する冗長な予測動きベクトルの候補を削除する処理、及び前述の予測動きベクトルインデックスを符号化する処理の回数が多くなってしまう。
そこで、本実施の形態においては、符号化および復号対象の予測ブロックが規定したサイズ以下の場合、最終候補数finalNumMVPCandを1とし、冗長な予測動きベクトルの候補を削除する処理及び予測動きベクトルインデックスを符号化および復号する処理をスキップすることで、処理量を削減する。さらに、最終候補数finalNumMVPCandを1では、予測動きベクトルインデックスを符号化する必要がないので、エントロピー符号化の処理量を削減することができる。
差分動きベクトル算出部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つの動きベクトルmvLXA、mvLXB、mvLXColをそれぞれ導出して予測動きベクトル候補とし、予測動きベクトル候補登録部122に供給する。以下、mvLXA及びmvLXBを空間的な予測動きベクトル、mvLXColを時間的な予測動きベクトルと呼ぶ。この予測動きベクトル候補の算出に際しては、符号化情報格納メモリ114に格納されている符号化済みの予測ブロックの予測モード、参照リスト毎の参照インデックス、参照ピクチャのPOC、動きベクトル等の符号化情報を用いる。
これらの予測動きベクトルの候補mvLXA、mvLXB、mvLXColは符号化または復号対象ピクチャ(符号化処理においては符号化対象ピクチャ、復号処理においては復号対象ピクチャのことである。以下、断りのない限り、この意味で用いる。)のPOCと参照ピクチャのPOCとの関係に応じてスケーリングすることにより導出されることもある。
予測動きベクトル候補生成部121は、各予測ブロックグループ毎に、所定の順序で、それぞれの予測ブロックグループ内の予測ブロックに対して、後述の条件判定を行い、最初に条件に合致した予測ブロックの動きベクトルを選択し、予測動きベクトルの候補mvLXA、mvLXB、mvLXColとする。
左側に隣接する予測ブロックグループから予測動きベクトルを算出する際には、左側に隣接する予測ブロックグループの下から上の順序(図5のA0からA0,A1の順序)で、上側に隣接する予測ブロックグループから予測動きベクトルを算出する際には、上側に隣接する予測ブロックグループの右から左の順序(図5のB0からB0,B1,B2の順序)で、異なる時間の予測ブロックグループから予測動きベクトルを算出する際には、図9のT0からT0,T1の順序で、各予測ブロックに対して、後述の条件判定を行い、最初に条件に合致した予測ブロックの動きベクトルを選択し、予測動きベクトルの候補をそれぞれmvLXA、mvLXB、mvLXColとする。
即ち、左側の隣接予測ブロックグループでは、一番下の予測ブロックが最も優先順位が高く、下から上に向かって優先順位が付けられており、上側の隣接予測ブロックグループでは、一番右の予測ブロックが最も優先順位が高く、右から左に向かって優先順位が付けられている。異なる時間の予測ブロックグループでは、T0の予測ブロックが最も優先順位が高く、T0,T1の順に優先順位が付けられている。
(空間予測ブロックの条件判定のループの説明)
左側の隣接予測ブロックグループ、及び上側の隣接予測ブロックグループの各隣接予測ブロックに対しては、後述するスキャン方法1、2、3、4では、下記の条件判定1、2、3、4の優先順序でそれぞれの条件判定が適用される。ただし、後述するスキャン方法5のみ例外として、条件判定1、3、2、4の優先順序でそれぞれの条件判定が適用される。
条件判定1:符号化または復号対象の予測ブロックの差分動きベクトル算出対象のLXの動きベクトルと同じ参照リストLXで、同じ参照インデックス、すなわち同じ参照ピクチャを用いた予測が隣接予測ブロックでも行われている。
条件判定2:符号化または復号対象の予測ブロックの差分動きベクトル算出対象のLXの動きベクトルとは異なる参照リストLYであるが、同じ参照ピクチャを用いた予測が隣接予測ブロックで行われている。
条件判定3:符号化または復号対象の予測ブロックの差分動きベクトル算出対象のLXの動きベクトルと同じ参照リストLXで、異なる参照ピクチャを用いた予測が隣接予測ブロックで行われている。
条件判定4:符号化または復号対象の予測ブロックの差分動きベクトル算出対象のLXの動きベクトルとは異なる参照リストLYで、異なる参照ピクチャを用いた予測が隣接予測ブロックで行われている。
これらの条件のいずれかに一致した場合、当該予測ブロックには条件に合致する動きベクトルは存在すると判断し、後に続く条件判定は行わない。なお、条件判定1または条件判定2の条件に合致した場合、該当する隣接予測ブロックの動きベクトルは同じ参照ピクチャに対応するものであるので、そのまま予測動きベクトルの候補とするが、条件判定3または条件判定4の条件に合致した場合、該当する隣接予測ブロックの動きベクトルは異なる参照ピクチャに対応するものであるので、その動きベクトルを基にスケーリングにより算出して予測動きベクトルの候補とする。
空間予測ブロックのスキャンのループの仕方として、上記の4つの条件判定の進め方によって、下記の5通りの方法を設定することができる。それぞれの方法によって予測ベクトルの相応しさと最大処理量が異なり、それらを考慮してこれらの方法から選択し設定する。スキャン方法1については、図19〜図23のフローチャートを用いて詳しく後述するが、他のスキャン方法2〜5についても、当業者であればスキャン方法2〜5を実施する手順についてはスキャン方法1を実施する手順に準じて適宜設計できる事項であるから、詳しい説明を省略する。なお、ここでは動画像符号化装置における空間予測ブロックのスキャンのループ処理を説明するが、同様の処理は動画像復号装置においても可能である。
スキャン方法1:
同じ参照ピクチャを用いたスケーリング演算が不要な予測動きベクトルの判定を優先し、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.予測ブロックN1の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
11.予測ブロックN2の条件判定3(同じ参照リストLX、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
12.予測ブロックN2の条件判定4(異なる参照リストLY、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
スキャン方法1によれば、同じ参照ピクチャを用いたスケーリング演算が不要な予測動きベクトルが選ばれやすいので、差分動きベクトルの符号量が小さくなる可能性が高くなる効果がある。また、条件判定の周回数が最大2回となるので、ハードウェアへの実装を考慮した際に予測ブロックの符号化情報へのメモリアクセス回数が後述するスキャン方法2に比べて少なくなり、複雑性が低減される。
スキャン方法2:
4つの条件判定のうち予測ブロック毎に1つの条件判定を行い、条件を満たさなければ、隣の予測ブロックの条件判定に移る。予測ブロック毎に条件判定を4周したら終了する。
具体的には以下の優先順序で条件判定を行う。(ただし、NはAまたはB)
1.予測ブロックN0の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
2.予測ブロックN1の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
3.予測ブロックN2の条件判定1(同じ参照リストLX、同じ参照ピクチャ)、上側に隣接する予測ブロックグループのみ
4.予測ブロックN0の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
5.予測ブロックN1の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
6.予測ブロックN2の条件判定2(異なる参照リストLY、同じ参照ピクチャ)、上側に隣接する予測ブロックグループのみ
7.予測ブロックN0の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
8.予測ブロックN1の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
9.予測ブロックN2の条件判定3(同じ参照リストLX、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
10.予測ブロックN0の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
11.予測ブロックN1の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
12.予測ブロックN2の条件判定4(異なる参照リストLY、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
スキャン方法2によれば、同じ参照ピクチャを用いたスケーリング演算が不要な予測動きベクトルが選ばれやすいので、差分動きベクトルの符号量が小さくなる可能性が高くなる効果がある。また、条件判定の周回数が最大4回となり、ハードウェアへの実装を考慮した際に予測ブロックの符号化情報へのメモリアクセス回数がスキャン方法1に比べて多くなるが、同じ参照リストの予測動きベクトルが選ばれやすくなる。
スキャン方法3:
最初の周回では予測ブロック毎に条件判定1の条件判定を行い条件を満たさなければ、隣の予測ブロックの条件判定に移る。次の周回では予測ブロック毎に条件判定2、条件判定3条件判定4順序で条件判定を行ってから隣に移る。
具体的には以下の優先順序で条件判定を行う。(ただし、NはAまたはB)
1.予測ブロックN0の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
2.予測ブロックN1の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
3.予測ブロックN2の条件判定1(同じ参照リストLX、同じ参照ピクチャ)、上側に隣接する予測ブロックグループのみ
4.予測ブロックN0の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
5.予測ブロックN0の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
6.予測ブロックN0の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
7.予測ブロックN1の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
8.予測ブロックN1の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
9.予測ブロックN1の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
10.予測ブロックN2の条件判定2(異なる参照リストLY、同じ参照ピクチャ)、上側に隣接する予測ブロックグループのみ
11.予測ブロックN2の条件判定3(同じ参照リストLX、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
12.予測ブロックN2の条件判定4(異なる参照リストLY、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
スキャン方法3によれば、同じ参照リストで同じ参照ピクチャを用いたスケーリング演算が不要な予測動きベクトルが選ばれやすいので、差分動きベクトルの符号量が小さくなる可能性が高くなる効果がある。また、条件判定の周回数が最大2回となるので、ハードウェアへの実装を考慮した際に予測ブロックの符号化情報へのメモリアクセス回数がスキャン方法2に比べて少なくなり、複雑性が低減される。
スキャン方法4:
同じ予測ブロックの条件判定を優先し、1つの予測ブロック内で4つの条件判定を行い、すべての条件に合致しない場合、当該予測ブロックには条件に合致する動きベクトルは存在しないものと判断し、次の予測ブロックの条件判定を行う。
具体的には以下の優先順序で条件判定を行う。(ただし、NはAまたはB)
1.予測ブロックN0の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
2.予測ブロックN0の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
3.予測ブロックN0の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
4.予測ブロックN0の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
5.予測ブロックN1の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
6.予測ブロックN1の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
7.予測ブロックN1の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
8.予測ブロックN1の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
9.予測ブロックN2の条件判定1(同じ参照リストLX、同じ参照ピクチャ)、上側に隣接する予測ブロックグループのみ
10.予測ブロックN2の条件判定2(異なる参照リストLY、同じ参照ピクチャ)、上側に隣接する予測ブロックグループのみ
11.予測ブロックN2の条件判定3(同じ参照リストLX、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
12.予測ブロックN2の条件判定4(異なる参照リストLY、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
スキャン方法4によれば、条件判定の周回数が最大でも1回となるので、ハードウェアへの実装を考慮した際に予測ブロックの符号化情報へのメモリアクセス回数がスキャン方法1、スキャン方法2、スキャン方法3に比べて少なくなり、複雑性が低減される。
スキャン方法5:
スキャン方法4と同様に、同じ予測ブロックの条件判定を優先し、1つの予測ブロック内で4つの条件判定を行い、すべての条件に合致しない場合、当該予測ブロックには条件に合致する動きベクトルは存在しないものと判断し、次の予測ブロックの条件判定を行う。ただし、予測ブロック内の条件判定においては、スキャン方法4は同じ参照ピクチャであることをより優先しているが、スキャン方法5は同じ参照リストであることを優先する。
具体的には以下の優先順序で条件判定を行う。(ただし、NはAまたはB)
1.予測ブロックN0の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
2.予測ブロックN0の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
3.予測ブロックN0の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
4.予測ブロックN0の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
5.予測ブロックN1の条件判定1(同じ参照リストLX、同じ参照ピクチャ)
6.予測ブロックN1の条件判定3(同じ参照リストLX、異なる参照ピクチャ)
7.予測ブロックN1の条件判定2(異なる参照リストLY、同じ参照ピクチャ)
8.予測ブロックN1の条件判定4(異なる参照リストLY、異なる参照ピクチャ)
9.予測ブロックN2の条件判定1(同じ参照リストLX、同じ参照ピクチャ)、上側に隣接する予測ブロックグループのみ
10.予測ブロックN2の条件判定3(同じ参照リストLX、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
11.予測ブロックN2の条件判定2(異なる参照リストLY、同じ参照ピクチャ)、上側に隣接する予測ブロックグループのみ
12.予測ブロックN2の条件判定4(異なる参照リストLY、異なる参照ピクチャ)、上側に隣接する予測ブロックグループのみ
スキャン方法5によれば、さらに、スキャン方法4に比べて予測ブロックの参照リストの参照回数を減らすことができ、メモリへのアクセス回数、条件判定等の処理量を削減することにより複雑性を低減することができる。また、スキャン方法4と同様に、条件判定の周回数が最大でも1回となるので、ハードウェアへの実装を考慮した際に予測ブロックの符号化情報へのメモリアクセス回数がスキャン方法1、スキャン方法2、スキャン方法3に比べて少なくなり、複雑性が低減される。
次に、予測動きベクトル候補登録部122は算出された予測動きベクトルの候補mvLXA、mvLXB、mvLXColを予測動きベクトルリストmvpListLXに格納する。
次に、予測動きベクトル冗長候補削除部123は、LXの予測動きベクトルリストmvpListLXに格納されたそれぞれの予測動きベクトルの候補の動きベクトルの値を比較し、予測動きベクトルの候補の中から同一の動きベクトルの値をもつものを判定し、同一の動きベクトル値をもつと判定された予測動きベクトルの候補について一つを残してそれ以外を予測動きベクトルリストmvpListLXから削除して、予測動きベクトルの候補が重複しないようにし、予測動きベクトルリストmvpListLXを更新する。ただし、規定された最終候補数finalNumMVPCandが1の場合、本冗長判定処理を省略することができる。
予測動きベクトル候補数制限部124では、LXの予測動きベクトルリストmvpListLXに登録されている予測動きベクトルの候補数をカウントし、LXの予測動きベクトル候補数numMVPCandLXがカウントされた候補数の値に設定される。
さらに、予測動きベクトル候補数制限部124では、LXの予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを予測ブロックのサイズに応じて規定された最終候補数finalNumMVPCandに制限する。
本実施の形態においては、予測ブロックのサイズに応じて最終候補数finalNumMVPCandを規定している。なぜなら、予測動きベクトルリストに登録される予測動きベクトルの候補数が予測動きベクトルリストの構築状態に応じて変動すると、復号側では予測動きベクトルリストを構築してからでないと、予測動きベクトルインデックスをエントロピー復号することができないからである。さらに、エントロピー復号が異なる時間のピクチャの予測ブロックから導出された予測動きベクトル候補mvLXColを含む予測動きベクトルリストの構築状態に依存すると、別のピクチャの符号化ビット列の復号時にエラーが発生した際に現在のピクチャの符号化ビット列もそのエラーの影響を受けて正常にエントロピー復号を続けることができない問題がある。予測ブロックのサイズに応じて最終候補数finalNumMVPCandを固定した数に規定すると、予測動きベクトルリストの構築と独立して、予測動きベクトルインデックスをエントロピー復号することができるとともに、別のピクチャの符号化ビット列の復号時にエラーが発生してもその影響を受けずに現在のピクチャの符号化ビット列のエントロピー復号を続けることができる。
予測動きベクトル候補数制限部124では、LXの予測動きベクトル候補数numMVPCandLXが規定された最終候補数finalNumMVPCandより小さい場合、予測動きベクトル候補数numMVPCandLXが最終候補数finalNumMVPCandと同じ値になるまで、(0,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にて処理が行われる。図14は、実施の形態の動画像符号化装置に対応する図2の動画像復号装置の動きベクトル算出部204の詳細な構成を示す図である。図14の太枠線で囲まれる部分は動きベクトル算出部204を示している。更に、その内部の太点線で囲まれる部分は後述する動きベクトルの予測方法の動作部を示しており、対応する動画像符号化装置にも同様に設置され、符号化と復号で矛盾しない同一の判定結果を得られるようにしている。以下、この図を用いて、復号における動きベクトルの予測方法を説明する。
本実施の形態においては、符号化側で説明した理由により、符号化側と同様に復号側でも、復号対象の予測ブロックのサイズに応じて、予測動きベクトルの最終候補数finalNumMVPCandを設定する。動きベクトル算出部204では、復号対象の輝度信号の予測ブロックのサイズが規定したサイズsizePUNumMVPCand以下の場合、finalNumMVPCandを後者よりも小さい数に設定し、そうでない場合、finalNumMVPCandを前者よりも大きい数に設定する。本実施の形態においては、規定するサイズsizePUNumMVPCandを8x8とし、復号対象の輝度信号の予測ブロックのサイズが規定したサイズsizePUNumMVPCand以下の場合は、finalNumMVPCandを1に設定し、それ以外の場合は、finalNumMVPCandを2に設定する。
動きベクトル算出部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は、図13の符号化側の予測動きベクトル候補生成部121と同一の処理を行う。復号して符号化情報格納メモリ209に記録されていた、復号対象ブロックと同一ピクチャ内の復号対象ブロックと隣接する復号済みの予測ブロック及び異なるピクチャ内の復号対象ブロックと同一位置あるいはその近傍の位置に存在する復号済みの予測ブロック等の動きベクトルを符号化情報格納メモリ209から読み出す。符号化情報格納メモリ209から読み出された復号済みの他のブロックの動きベクトルから予測ブロックグループごとに予測動きベクトルの候補mvLXA、mvLXB、mvLXColを生成し、予測動きベクトル候補登録部222に供給する。
これらの予測動きベクトルの候補mvLXA、mvLXB、mvLXColは参照インデックスに応じてスケーリングすることにより算出されることもある。なお、予測動きベクトル候補生成部221は、図13の符号化側の予測動きベクトル候補生成部121と同一の処理を行うので、図13の符号化側の予測動きベクトル候補生成部121で説明した予測動きベクトルを算出するためのスキャン方法1、2、3、4、5の条件判定は予測動きベクトル候補生成部221でも適用できるものとし、ここでは詳細な説明は省略する。
次に、予測動きベクトル候補登録部222は図13の符号化側の予測動きベクトル候補登録部122と同一の処理を行う。算出された予測動きベクトルの候補mvLXA、mvLXB、mvLXColをLXの予測動きベクトルリストmvpListLXに格納する。
次に、予測動きベクトル冗長候補削除部223は、図13の符号化側の予測動きベクトル冗長候補削除部123と同一の処理を行う。LXの予測動きベクトルリストmvpListLXに格納された予測動きベクトルの候補の中から同一の動きベクトルの値をもつものを判定し、同一の動きベクトル値をもつと判定された予測動きベクトルの候補について一つを残してそれ以外を予測動きベクトルリストmvpListLXから削除して、予測動きベクトルの候補が重複しないようにし、予測動きベクトルリストmvpListLXを更新する。ただし、規定された最終候補数finalNumMVPCandが1の場合、本冗長判定処理を省略することができる。
次に、予測動きベクトル候補数制限部224は、図13の符号化側の予測動きベクトル候補数制限部124と同一の処理を行う。予測動きベクトル候補数制限部224では、予測動きベクトルリストmvpListLXに登録されている要素数をカウントし、LXの予測動きベクトル候補数numMVPCandLXがカウントされた候補数の値に設定される。
さらに、予測動きベクトル候補数制限部224では、符号化側で説明した理由により予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを予測ブロックのサイズに応じて規定された最終候補数finalNumMVPCandに制限する。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に供給される。ただし、規定された最終候補数finalNumMVPCandが1の場合、LXの予測動きベクトルの予測動きベクトルインデックスmvpIdxLXが符号化されておらず、予測動きベクトル選択部225に供給されない。
予測動きベクトル選択部225は、第1符号化ビット列復号部202にて復号されたLXの予測動きベクトルインデックスmvpIdxLXが供給され、供給されたインデックスmvpIdxLXに対応する予測動きベクトルの候補mvpListLX[mvpIdxLX]をLXの予測動きベクトルmvpLXとして予測動きベクトルリストmvpListLXから取り出す。ただし、規定された最終候補数finalNumMVPCandが1の場合、予測動きベクトルリストmvpListLXのインデックスiが0に登録されている唯一の予測動きベクトルの候補mvpListLX[0]を取り出す。供給された予測動きベクトルの候補を予測動きベクトルmvpLXとして動きベクトル加算部226に供給する。
最後に動きベクトル加算部226は、第1符号化ビット列復号部202にて復号されて供給されるLXの差分動きベクトルmvdLXとLXの予測動きベクトルmvpLXを加算することによりLXの動きベクトルmvを算出し、動きベクトルmvLXを出力する。
mvLX = mvpLX + mvdLX
以上のようにして、予測ブロック毎にLXの動きベクトルmvLXが算出される。この動きベクトルを使用して動き補償により予測画像信号が生成され、復号された予測残差信号と加算されることで復号画像信号が生成される。
動画像符号化装置の差分動きベクトル算出部103、動画像復号装置の動きベクトル算出部204の処理手順について、それぞれ図15、図16のフローチャートを用いて説明する。図15は動画像符号化装置による差分動きベクトル算出処理手順を示すフローチャートであり、図16は動画像復号装置による動きベクトル算出処理手順を示すフローチャートである。
図15を参照して符号化側の差分動きベクトル算出処理手順を説明する。符号化側では、まず、差分動きベクトル算出部103で、予測動きベクトルの候補の最終候補数finalNumMVCandを設定する(S100)。ステップS100の詳細な処理手順については図17のフローチャートを用いて後述する。
続いて、差分動きベクトル算出部103で、符号化対象ブロックで選択されたインター予測で用いる動きベクトルの差分動きベクトルをL0、L1毎にそれぞれ算出する(S101〜S106)。具体的には符号化対象ブロックの予測モードPredModeがインター予測(MODE_INTER)で、インター予測モードがL0予測(Pred_L0)の場合、L0の予測動きベクトルリストmvpListL0を算出して、予測動きベクトルmvpL0を選択し、L0の動きベクトルmvL0の差分動きベクトルmvdL0を算出する。符号化対象ブロックのインター予測モードがL1予測(Pred_L1)の場合、L1の予測動きベクトルリストmvpListL1を算出して、予測動きベクトルmvpL1を選択し、L1の動きベクトルmvL1の差分動きベクトル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として表す。
LXの差分動きベクトルmvdLXを算出する場合(S102のYES)、LXの予測動きベクトルの候補を算出してLXの予測動きベクトルリストmvpListLXを構築する(S103)。差分動きベクトル算出部103の中の予測動きベクトル候補生成部121で複数の予測動きベクトルの候補を算出し、予測動きベクトル候補登録部122で予測動きベクトルリストmvpListLXに算出した予測動きベクトルの候補を追加し、予測動きベクトル冗長候補削除部123で不要な予測動きベクトルの候補を削除し、予測動きベクトル候補数制限部124で予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXが設定され、予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを規定された最終候補数finalNumMVPCandに制限することにより、予測動きベクトルリストmvpListLXを構築する。ステップS103の詳細な処理手順については図18のフローチャートを用いて後述する。
続いて、予測動きベクトル候補符号量算出部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
次に、図16を参照して復号側の動きベクトル算出処理手順を説明する。復号側では、動きベクトル算出部204で、インター予測で用いる動きベクトルをL0,L1毎にそれぞれ算出する(S201〜S206)。具体的には復号対象ブロックの予測モード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として表す。
LXの動きベクトルmvLXを算出する場合(S202のYES)、LXの予測動きベクトルの候補を算出してLXの予測動きベクトルリストmvpListLXを構築する(S203)。動きベクトル算出部204の中の予測動きベクトル候補生成部221で複数の予測動きベクトルの候補を算出し、予測動きベクトル候補登録部222で予測動きベクトルリストmvpListLXに算出した予測動きベクトルの候補を追加し、予測動きベクトル冗長候補削除部223で不要な予測動きベクトルの候補を削除し、予測動きベクトル候補数制限部224で予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXが設定され、予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを規定された最終候補数finalNumMVPCandに制限することにより、予測動きベクトルリストmvpListLXを構築する。ステップS203の詳細な処理手順については図18のフローチャートを用いて後述する。
続いて、予測動きベクトル選択部225で予測動きベクトルリストmvpListLXから第1符号化ビット列復号部202にて復号された予測動きベクトルのインデックスmvpIdxLXに対応する予測動きベクトルの候補mvpListLX[mvpIdxLX]を選択された予測動きベクトルmvpLXとして取り出す(S204)。ただし、最大候補数finalNumCandLXが1の場合、予測動きベクトルリストmvpListLXに登録されている唯一の予測動きベクトルの候補mvpListLX[0]を選択された予測動きベクトルmvpLXとして取り出す。
続いて、動きベクトル加算部226で第1符号化ビット列復号部202にて復号されて供給されるLXの差分動きベクトルmvdLXとLXの予測動きベクトルmvpLXを加算することによりLXの動きベクトルmvLXを算出する(図16のS205)。
mvLX = mvpLX + mvdLX
次に、図15のS100、及び図16のS200で共通の予測動きベクトルの最終候補数を設定する手順について詳細に説明する。
予測動きベクトル候補数制限部124及び予測動きベクトル候補数制限部224は符号化または復号対象の予測ブロックのサイズに応じて、予測動きベクトルの最終候補数finalNumMVPCandを設定する。
図17は予測動きベクトルの最終候補数設定処理手順を示すフローチャートである。
まず、符号化または復号対象の予測ブロックのサイズを得る(S401)。符号化または復号対象の予測ブロックのサイズが規定したサイズsizePUNumMVPCand以下の場合(S402のYES)、finalNumMVPCandを後者よりも小さい数に設定し(S403)、そうでない場合、finalNumMVPCandを前者よりも大きい数に設定する(S404)。本実施の形態においては、規定するサイズsizePUNumMVPCandを8x8とし、符号化または復号対象の輝度信号の予測ブロックのサイズが規定したサイズsizePUNumMVPCand以下の場合は、finalNumMVPCandを1に設定し、それ以外の場合は、finalNumMVPCandを2に設定する。なお、規定するサイズsizePUNumMVPCandは固定された値であってもよいし、シーケンス、ピクチャまたはスライス単位でシンタックス要素を用意して設定してもよい。また、8x4と4x8等、幅と高さを乗じた値が等しいサイズの場合は同じサイズとみなす。即ち、規定するサイズsizePUNumMVPCandが8x4と設定された場合、4x8も設定されたものとみなす。また、ステップS402で、符号化または復号対象の予測ブロックのサイズが規定したサイズsizePUNumMVPCand未満の場合、finalNumMVPCandを後者よりも小さい数に設定し、そうでない場合、finalNumMVPCandを前者よりも大きい数に設定するとしてもよい。
次に、図15のS103、及び図16のS203で共通の予測動きベクトルの候補の導出及び予測動きベクトルリスト構築処理手順を図18のフローチャートを用いて詳細に説明する。
(動きベクトルの予測方法)
図18は動画像符号化装置の差分動きベクトル算出部103及び動画像復号装置の動きベクトル算出部204とで共通する機能を有する予測動きベクトル候補生成部121及び221、予測動きベクトル候補登録部122及び222、ならびに予測動きベクトル冗長候補削除部123及び223、予測動きベクトル候補数制限部124及び224の処理手順を表すフローチャートである。
予測動きベクトル候補生成部121及び221は左側に隣接する予測ブロックからの予測動きベクトルの候補を導出し、左側に隣接する予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXA、及び動きベクトルmvLXA、参照インデックスrefIdxA、リストListAを導出する(図18のS301)。なお、L0のときXは0、L1のときXは1とする(以下同様)。続いて、予測動きベクトル候補生成部121及び221は上側に隣接する予測ブロックからの予測動きベクトルの候補を導出し、上側に隣接する予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXB、及び動きベクトルmvLXB、参照インデックスrefIdxB、リストListBを導出する(図18のS302)。図18のステップS301とS302の処理は参照する隣接ブロックの位置と数が異なる点以外は共通であり、予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXN、及び動きベクトルmvLXN、参照インデックスrefIdxN、ListN(NはAまたはB、以下同様)を導出する共通の導出処理手順を図19〜図23のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル候補生成部121及び221は異なる時間のピクチャの予測ブロックからの予測動きベクトルの候補を導出し、異なる時間のピクチャの予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXCol、及び動きベクトルmvLXCol、参照インデックスrefIdxCol、リストListColを導出する(図18のS303)。このステップS303の導出処理手順を図24〜図30のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル候補登録部122及び222は予測動きベクトルリストmvpListLXを作成し、LXのそれぞれの予測ベクトルの候補mvLXA, mvLXB, mvLXColを追加する(図18のS304)。このステップS304の登録処理手順を図31のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル冗長候補削除部123及び223は予測動きベクトルリストmvpListLX内で、複数の動きベクトルの候補が同じ値または近い値を持っている場合に、冗長な動きベクトルの候補と判断し、最も小さい順序、即ち最も小さいインデックスiの動きベクトルの候補を除いて冗長な動きベクトルの候補を取り除く(図18のS305)。このステップS305の削除処理手順を図32のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル候補数制限部124及び224は予測動きベクトルリストmvpListLX内に追加された要素の数をカウントし、その数がLXの予測動きベクトル候補数numMVPCandLXに設定され、予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを規定された最終候補数finalNumMVPCandに制限する。(図18のS306)。このステップS306の制限処理手順を図33のフローチャートを用いて後ほど詳細に説明する。
図18の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からそれぞれ予測動きベクトルの候補を選出する。
次に、図18のS301およびS302の処理手順である左側および上側に隣接する予測ブロックグループNからの予測動きベクトルの候補の導出方法について説明する。図19は前述のスキャン方法1による図18のS301およびS302の予測動きベクトル候補導出処理手順を示すフローチャートである。添え字Xには参照リストを表す0若しくは1、Nには隣接する予測ブロックグループの領域を表すA(左側)またはB(上側)が入る。
左側の予測ブロックから予測動きベクトルの候補を導出するには(図18のS301)、図19でNがAとして符号化または復号対象の予測ブロックの左側に隣接するA0、A1の予測ブロックから予測動きベクトルの候補を、上側の予測ブロックから予測動きベクトルの候補を導出するには(図18のS302)、図19で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)で同じ参照ピクチャの動きベクトルを持つ予測ブロックを探してその動きベクトルを予測動きベクトル候補とする。
図20は図19のステップ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の処理が終わるまで繰り返す。
続いて、図19のフローチャートに戻り、availableFlagLXNが0のとき(S1109のYES)、即ちステップS1108で予測動きベクトルの候補が算出できなかった場合、前述の条件判定3または条件判定4に合致する予測動きベクトル候補を算出する(S1110)。予測ブロックグループN(NはAまたはB)の隣接ブロックN0、N1、N2(N2は上側の隣接予測ブロックグループBのみ)の中で、符号化または復号対象予測ブロックで現在対象としている参照リストLXと同じ参照リストLX、または符号化または復号対象予測ブロックで現在対象としている参照リストLXと反対の参照リストLY(Y=!X:現在対象としている参照リストがL0のとき、反対の参照リストはL1、現在対象としている参照リストがL1のとき、反対の参照リストはL0)で異なる参照ピクチャの動きベクトルを持つ予測ブロックを探してその動きベクトルを予測動きベクトル候補とする。
図21は図19のステップS1110の導出処理手順を示すフローチャートである。隣接する予測ブロックNk(k=0,1,2、ただし、2は上側の隣接予測ブロックグループのみ)に対して、kが0,1,2の順番にそれぞれ以下の処理を行う(S1301〜S1307)。NがAの場合下から上にA0,A1の順序で、NがBの場合、右から左にB0,B1,B2の順序で、それぞれ以下の処理を行う。
隣接する予測ブロック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またはB2の処理が終わるまで繰り返し、ステップS1308に進む。
続いて、availableFlagLXNが1のとき(S1308のYES)、mvLXNをスケーリングする(S1309)。このステップS1309の空間予測動きベクトル候補のスケーリング演算処理手順を図22及び図23を用いて説明する。
図22は図21のステップ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のスケーリング演算を整数精度の演算で行う場合の例を図23に示す。図23のステップS1604〜S1606の処理が、図22のステップS1603の処理に相当する。
まず、図22のフローチャートと同様に、ピクチャ間距離tdとピクチャ間距離tbを算出する(S1601、S1602)。
続いて、次式により変数txを算出する(S1604)。
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 ) )
次に、図18のS303の異なる時間のピクチャの予測ブロックから予測動きベクトルの候補の導出方法について詳細に説明する。図24は図18のステップS303の予測動きベクトル候補導出処理手順を説明するフローチャートである。
まず、slice_typeとcollocated_from_l0_flagにより、異なる時間のピクチャcolPicを算出する(図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の符号化情報を取得する(図26のS2302)。異なる時間の予測ブロックcolPUのPredModeがMODE_INTRAか、利用できない場合(図26のS2303、S2304)、異なる時間のピクチャcolPic内で処理対象の予測ブロックと同一位置の中央左上に位置する予測ブロックを異なる時間の予測ブロックcolPUに再設定する(図26のS2305)。この予測ブロックは図9の予測ブロックT1に相当する。
次に、図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の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 ) )
図18のS304の予測動きベクトルの候補を予測動きベクトルリストに追加する手順について詳細に説明する。
図18のS301、S302、及びS303にて算出されたLXのそれぞれの予測動きベクトルの候補mvLXA, mvLXB, mvLXColをLXの予測動きベクトルリストmvpListLXに追加する(S304)。本発明の実施の形態では、優先順位をつけて、優先順位の高いものからLXの予測動きベクトルリストmvpListLXに予測動きベクトルの候補mvLXA, mvLXB, mvLXColを登録することで、優先順位の高い要素を予測動きベクトルリストの前方に配置する。図18のS306で予測動きベクトルリストの中の要素数を制限する際に、予測動きベクトルリストの後方に配置された要素を予測動きベクトルリストから外すことで、優先順位の高い要素を残す。
予測動きベクトルリストmvpListLXはリスト構造を成し、予測動きベクトルリスト内部の所在を示すインデックスiで管理され、インデックスiに対応する予測動きベクトルの候補を要素として格納する記憶領域が設けられている。インデックスiの数字は0から開始され、予測動きベクトルリストmvpListLXの記憶領域に、予測動きベクトルの候補が格納される。以降の処理では、予測動きベクトルリストmvpListLXに登録されたインデックスiの要素である予測動きベクトルの候補は、mvpListLX[i]で表す。
次に、図18のS304のLXの予測動きベクトルリストmvpListLXへのLXの予測動きベクトルの候補mvLXA, mvLXB, mvLXColの登録処理方法について詳細に説明する。図31は図18のステップS304の予測動きベクトル候補登録処理手順を示すフローチャートである。
まず、予測動きベクトルリストmvpListLXのインデックスiを0に設定する(S3101)。availableFlagLXAが1の場合(S3102のYES)、予測動きベクトルリストmvpListLXのインデックスiに対応する位置にLXの予測動きベクトル候補mvLXAを登録し(S3103)、インデックスiに1を加算することで更新する(S3104)。
続いて、availableFlagLXBが1の場合(S3105のYES)、予測動きベクトルリストmvpListLXmvpListLXのインデックスiに対応する位置にLXの予測動きベクトル候補mvLXBを登録し(S3106)、インデックスiに1を加算することで更新する(S3107)。
続いて、availableFlagLXColが1の場合(S3108のYES)、予測動きベクトルリストmvpListLXのインデックスiに対応する位置にLXの予測動きベクトル候補mvLXColを登録し(S3109)、予測動きベクトルリストへの登録処理を終了する。
以上の処理においては、LXのそれぞれの予測動きベクトルの候補をmvLXA, mvLXB, mvLXColの順序でLXの予測動きベクトルリストmvpListLXに追加したが、予測ブロックが規定のサイズ以下で候補数が1となる場合で、分割モード(PartMode)が2N×N分割(PART_2NxN)で分割インデックスPartIdxが0となる場合、または分割モード(PartMode)がN×2N分割(PART_Nx2N)で分割インデックスPartIdxが1となる場合に、LXのそれぞれの予測動きベクトルの候補をmvLXB, mvLXA, mvLXColの順序で予測動きベクトルリストmvpListLXに追加することにより、符号化または復号対象の予測ブロックの動きベクトルに近い値を持つ可能性の高い予測動きベクトルmvLXBが選択され易くするために予測動きベクトルリストの先頭に登録することで、差分動きベクトルの符号量を削減することができる。このように、予測動きベクトル候補数制限部124は、符号化または復号対象ブロックを予測ブロックに分割する分割モードに応じて、予測動きベクトル候補リストに残される予測動きベクトルの候補の優先順位を設定する。
図4(b)に示す、分割モード(PartMode)が2N×N分割(PART_2NxN)において、分割インデックスPartIdxが0となる上側の予測ブロックの動きベクトルは長い辺に接している上側の予測ブロックグループからの予測動きベクトルに近い動きベクトルの値を持つ可能性が高いので、上側の予測ブロックグループからの候補mvLXBを優先的に選択され易くするために予測動きベクトルリストの前方に登録し、分割インデックスPartIdxが1となる下側の予測ブロックの動きベクトルは上側の予測ブロックと異なる動きベクトルの値を持つ可能性が高いので、左側の予測ブロックグループからの予測動きベクトルの候補mvLXAを優先的に選択されやすくするために予測動きベクトルリストの前方に登録する。
図4(c)に示す、分割モード(PartMode)がN×2N分割(PART_Nx2N)において、分割インデックスPartIdxが0となる左側の予測ブロックの動きベクトルは長い辺に接している左側の予測ブロックグループからの予測動きベクトルに近い動きベクトルの値を持つ可能性が高いので、左側の予測ブロックグループからの候補mvLXAを優先的に選択されやすくするために予測動きベクトルリストの前方に登録し、分割インデックスPartIdxが1となる右側の予測ブロックの動きベクトルは左側の予測ブロックと異なる動きベクトルの値を持つ可能性が高いので、上側の予測ブロックグループからの予測動きベクトルの候補mvLXBを優先的に選択されやすくするために予測動きベクトルリストの前方に登録する。
図34は予測ブロックのサイズ、分割モード(PartMode)及び分割インデックスPartIdxに応じて、LXの予測動きベクトルリストmvpListLXへのLXの予測動きベクトルの候補mvLXA, mvLXB, mvLXColの順序を適応的に切り替える登録処理手順を示すフローチャートである。
まず、予測ブロックが規定のサイズ以下で(S3201のYES)、分割モード(PartMode)が2N×N分割(PART_2NxN)で分割インデックスPartIdxが0であるかまたは分割モード(PartMode)がN×2N分割(PART_Nx2N)で分割インデックスPartIdxが1である場合に(S3202のYES)、図35の処理手順で、LXの予測動きベクトルの候補mvLXB, mvLXA, mvLXColの順序でLXの予測動きベクトルリストmvpListLXに登録する(S3203)。以上の条件に合致しない場合(S3201のNO、S3202のNO)、前述の図31の処理手順で、LXの予測動きベクトルの候補mvLXA, mvLXB, mvLXColの順序でLXの予測動きベクトルリストmvpListLXに登録する(S3204)。
図35は予測ブロックのサイズ、分割モード(PartMode)及び分割インデックスPartIdxに応じて、LXの予測動きベクトルリストmvpListLXへのLXの予測動きベクトルの候補mvLXB, mvLXA, mvLXColの順序での登録処理手順を示すフローチャートである。
まず、予測動きベクトルリストmvpListLXのインデックスiを0に設定する(S3301)。availableFlagLXBが1の場合(S3302のYES)、予測動きベクトルリストmvpListLXのインデックスiに対応する位置にmvLXBを登録し(S3303)、インデックスiに1を加算することで更新する(S3304)。
続いて、availableFlagLXAが1の場合(S3305のYES)、予測動きベクトルリストmvpListLXmvpListLXのインデックスiに対応する位置にmvLXAを登録し(S3306)、インデックスiに1を加算することで更新する(S3307)。
続いて、availableFlagLXColが1の場合(S3308のYES)、予測動きベクトルリストmvpListLXのインデックスiに対応する位置にmvLXColを登録し(S3309)、予測動きベクトルリストへの登録処理を終了する。
次に、図18のS305の予測動きベクトルリスト中の冗長な予測動きベクトルの候補の削除方法について詳細に説明する。図32は図18のS305の予測動きベクトル冗長候補削除処理手順を示すフローチャートである。
最終候補数finalNumMVPCandが1より大きい場合(S4101のYES)、予測動きベクトル冗長候補削除部123及び223は予測動きベクトルリストmvpListLXに登録されている動きベクトルの候補同士を比較し(S4102)、複数の動きベクトルの候補が同じ値または近い値を持っている場合に(S4103のYES)、冗長な動きベクトルの候補と判断し、最も小さい順序、即ち最も小さいインデックスiの動きベクトルの候補を除いて冗長な動きベクトルの候補を取り除く(S4104)。なお、冗長な動きベクトルの候補を取り除いた後、予測動きベクトルリストmvpListLXの中は、削除された予測動きベクトルの候補の格納領域が空いている為、インデックスiが0を基準にして、インデックスiが小さい予測動きベクトルの候補の順で詰めていく(S4105)。例えば、インデックスiが0の予測動きベクトルの候補mvListLX[0]が削除され、インデックスiが1及び2の予測動きベクトルの候補mvListLX[1], mvListLX[2]が残った場合、インデックスiが1の予測動きベクトルの候補mvListLX[1]を新たにインデックスiが0の予測動きベクトルの候補mvListLX[0]に変更する。さらに、インデックスiが2の予測動きベクトルの候補mvListLX[2]を新たにインデックスiが1の予測動きベクトルの候補mvListLX[1]に変更する。さらに、インデックスiが2の予測動きベクトルの候補mvListLX[2]は存在しないものと設定する。
最終候補数finalNumMVPCandが1の場合(S4101のNO)、S305の冗長な予測動きベクトルの候補を削除する処理は行う必要がないので、本冗長候補削除処理を終了する。なぜなら、ステップS306の要素数を制限する処理で、候補数が1つに制限されるからである。
予測ブロックのサイズが小さい場合、単位面積当たりの予測ブロックの数が多くなるので、冗長な予測動きベクトルの候補を削除する処理の回数も多くなってしまう。
そこで、本実施の形態においては、符号化または復号対象の予測ブロックが規定したサイズ以下の場合、最終候補数finalNumMVPCandを1とすることで、冗長な予測動きベクトルの候補を削除する処理をスキップし、処理量を削減している。
最終候補数finalNumMVPCandが2で、予測動きベクトルリストmvpListLXに予測動きベクトルの候補mvpLXA、mvpLXB、mvpLXColがすべて登録されて候補数が3の場合、予測動きベクトルリストmvpListLXの予測動きベクトルインデックスが0の要素であるmvpListLX[0]がmvpLXAとなり、予測動きベクトルインデックスが1の要素であるmvpListLX[1]がmvpLXBとなり、予測動きベクトルインデックスが2の要素であるmvpListLX[2]がmvpLXColとなる。この場合、総当たりで比較するにはステップS4102で予測動きベクトルリストmvpListLXの予測動きベクトルインデックスが0の要素であるmvpListLX[0]と予測動きベクトルインデックスが1の要素であるmvpListLX[1]を比較すると共に、予測動きベクトルリストmvpListLXの予測動きベクトルインデックスが0の要素であるmvpListLX[0]と予測動きベクトルインデックスが2の要素であるmvpListLX[2]を比較する必要がありる。この場合、2回の比較処理が必要となる。しかし、処理量を削減するために、最終候補数finalNumMVPCandが2の場合、ステップS4102で予測動きベクトルリストmvpListLXの予測動きベクトルインデックスが0の要素であるmvpListLX[0]と予測動きベクトルインデックスが1の要素であるmvpListLX[1]だけを比較し、冗長な動きベクトルの候補と判断した場合に予測動きベクトルインデックスが1の要素であるmvpListLX[1]を削除して、予測動きベクトルインデックスが2の要素mvpListLX[2]が存在する場合にその予測動きベクトルインデックスを1に設定して、予測動きベクトルインデックスが1の要素mvpListLX[1]とし、本処理を終了することもできる。この場合、新しい予測動きベクトルインデックスが0の要素であるmvpListLX[0]と予測動きベクトルインデックスが1の要素mvpListLX[1]を比較すると冗長である可能性があるが、仮にこの2つの要素を比較して冗長だと判断した場合に一方を削除して候補数が1となっても、後述のステップS306で、予測動きベクトルインデックスが1の要素mvpListLX[1] として(0, 0)の値を持つ動きベクトルが登録されて候補数が2となる。一方を削除して(0, 0)の値を持つ動きベクトルを登録することによるメリットは小さいと考えられるので予測動きベクトルインデックスが0の要素であるmvpListLX[0]と予測動きベクトルインデックスが1の要素であるmvpListLX[1]だけを比較して処理量を削減することができる。また、空間予測動きベクトル候補mvpLXAとmvpLXBは同じピクチャの予測ブロックから予測動きベクトル候補を導出するので、互いに動き情報が同じになる可能性が高いが、時間予測動きベクトル候補mvpLXColは異なるピクチャの予測ブロックから予測動きベクトル候補を導出するので、空間予測動きベクトル候補mvpLXA, mvpLXBと異なる動き情報となる可能性が高い。したがって、時間予測動きベクトル候補mvpLXColの比較を省略しても影響は小さいと考えられる。このように、最終候補数が2の場合、予測動きベクトルインデックスが0の予測動きベクトル候補と、予測動きベクトルインデックスが1の予測動きベクトル候補とを比較し、予測動きベクトルインデックスが2の予測動きベクトル候補との比較を省略することにより、冗長候補を削除するための条件判定処理の回数を削減することができる。
次に、図18のS306の予測動きベクトルリスト中の動きベクトルの候補数の制限方法について詳細に説明する。図33は図18の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が同じ値の場合(S5106のYES)、本制限処理を終了し、numMVPCandLXとfinalNumMVPCandが同じ値でない場合(S5106の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)、制限処理を施さずに本制限処理を終了する。
本実施の形態においては、予測ブロックのサイズに応じて最終候補数finalNumMVPCandを規定している。なぜなら、予測動きベクトルリストに登録される予測動きベクトルの候補数が予測動きベクトルリストの構築状態に応じて変動すると、復号側では予測動きベクトルリストを構築してからでないと、予測動きベクトルインデックスをエントロピー復号することができないからである。さらに、エントロピー復号が異なる時間のピクチャの予測ブロックから導出された予測動きベクトル候補mvLXColを含む予測動きベクトルリストの構築状態に依存すると、別のピクチャの符号化ビット列の復号時にエラーが発生した際に現在のピクチャの符号化ビット列もその影響を受けて正常にエントロピー復号を続けることができない問題がある。予測ブロックのサイズに応じて最終候補数finalNumMVPCandを固定した数に規定すると、予測動きベクトルリストの構築と独立して、予測動きベクトルインデックスをエントロピー復号することができるとともに、別のピクチャの符号化ビット列の復号時にエラーが発生してもその影響を受けずに現在のピクチャの符号化ビット列のエントロピー復号を続けることができる。
以上述べた実施の形態の動画像符号化装置が出力する動画像の符号化ストリームは、実施の形態で用いられた符号化方法に応じて復号することができるように特定のデータフォーマットを有しており、動画像符号化装置に対応する動画像復号装置がこの特定のデータフォーマットの符号化ストリームを復号することができる。
動画像符号化装置と動画像復号装置の間で符号化ストリームをやりとりするために、有線または無線のネットワークが用いられる場合、符号化ストリームを通信路の伝送形態に適したデータ形式に変換して伝送してもよい。その場合、動画像符号化装置が出力する符号化ストリームを通信路の伝送形態に適したデータ形式の符号化データに変換してネットワークに送信する動画像送信装置と、ネットワークから符号化データを受信して符号化ストリームに復元して動画像復号装置に供給する動画像受信装置とが設けられる。
動画像送信装置は、動画像符号化装置が出力する符号化ストリームをバッファするメモリと、符号化ストリームをパケット化するパケット処理部と、パケット化された符号化データをネットワークを介して送信する送信部とを含む。動画像受信装置は、パケット化された符号化データをネットワークを介して受信する受信部と、受信された符号化データをバッファするメモリと、符号化データをパケット処理して符号化ストリームを生成し、動画像復号装置に提供するパケット処理部とを含む。
以上の符号化及び復号に関する処理は、ハードウェアを用いた伝送、蓄積、受信装置として実現することができるのは勿論のこと、ROM(リード・オンリ・メモリ)やフラッシュメモリ等に記憶されているファームウェアや、コンピュータ等のソフトウェアによっても実現することができる。そのファームウェアプログラム、ソフトウェアプログラムをコンピュータ等で読み取り可能な記録媒体に記録して提供することも、有線あるいは無線のネットワークを通してサーバから提供することも、地上波あるいは衛星ディジタル放送のデータ放送として提供することも可能である。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。