本実施の形態では、動画像の符号化に関し、特にピクチャを任意のサイズ、形状の矩形ブロックに分割し、ピクチャ間でブロック単位に動き補償を行う動画像符号化における符号化効率を向上させる為に、符号化済みの周囲のブロックの動きベクトルから複数の予測動きベクトルを算出し、符号化対象のブロックの動きベクトルと選択された予測動きベクトルとの差分ベクトルを算出して符号化することによって符号量を削減する。あるいは、符号化済みの周囲のブロックの符号化情報を利用することにより、符号化対象ブロックの符号化情報を推定することによって符号量を削減する。また、動画像の復号の場合は、復号済みの周囲のブロックの動きベクトルから複数の予測動きベクトルを算出し、符号化ストリームから復号された差分ベクトルと選択された予測動きベクトルとから復号対象のブロックの動きベクトルを算出して復号する。あるいは、復号済みの周囲のブロックの符号化情報を利用することにより、復号対象ブロックの符号化情報を推定する。
まず、本実施の形態において使用する技術、及び技術用語を定義する。
(ツリーブロック、符号化ブロックについて)
実施の形態では、図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画素である。この様にすることで、色差信号の各ブロックの位置が特定できるのはもちろんのこと、座標の値を比較するだけで、輝度信号のブロックと色差信号のブロックの位置の関係も明確となる。
(インター予測モード、参照リスト、参照インデックスについて)
本発明の実施の形態においては、符号化または復号済みのピクチャの画像信号から予測を行うインター予測では、複数の復号済みのピクチャを参照ピクチャとして用いることができる。複数の参照ピクチャからインター予測に用いる参照ピクチャを特定するため、予測ブロック毎に参照インデックスで指定する。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つずつの参照ピクチャを参照して得られるL0予測画像信号とL1予測画像信号を平均または重み付け加算して予測画像信号を生成するインター予測である。Pスライスのインター予測ではL0予測(Pred_L0)のみが使用でき、Bスライスのインター予測ではL0予測(Pred_L0)、L1予測(Pred_L1)、および双予測(Pred_BI)が使用できる。L0予測、L1予測は1つの参照インデックスと1つの動きベクトルをインター予測情報として持ち、双予測は2つの参照インデックスと2つの動きベクトルをインター予測情報として持つ。以降の処理において出力に添え字LX(Xは0または1)が付いている定数、変数に関しては、L0、L1ごとに処理が行われることを前提とする。
(予測動きベクトル、差分動きベクトル、予測動きベクトルインデックスについて)
本発明の実施の形態においては、各予測ブロックで生成される動きベクトルの符号量を削減する為に、動きベクトルに対して予測処理が行われる。複数の予測動きベクトルの候補を導出し、それら予測動きベクトルの候補の中から1つの予測動きベクトルを選択し、符号化または復号対象の動きベクトルと選択された予測動きベクトルとの差分である差分動きベクトルを算出する。複数の予測動きベクトルからインター予測に用いる予測動きベクトルを特定するため、予測ブロック毎に予測動きベクトルインデックスで指定する。
(マージモード、マージ候補)
マージモードとは、符号化または復号対象の予測ブロックの予測モード、参照インデックス、動きベクトル等のインター予測情報を符号化または復号するのではなく、符号化または復号対象の予測ブロックと同一ピクチャ内でその符号化または復号対象の予測ブロックに近接する予測ブロック、あるいは符号化または復号対象の予測ブロックと時間的に異なる符号化または復号済みのピクチャの符号化または復号対象の予測ブロックと同一位置あるいはその付近(近傍の位置)に存在する予測ブロックのインター予測情報から符号化または復号対象の予測ブロックのインター予測情報を導出することによりインター予測を行うモードである。符号化または復号対象の予測ブロックと同一ピクチャ内でその符号化または復号対象の予測ブロックに近接する予測ブロック及びその予測ブロックのインター予測情報を空間マージ候補、符号化または復号対象の予測ブロックと時間的に異なる符号化または復号済みのピクチャの符号化または復号対象の予測ブロックと同一位置あるいはその付近(近傍の位置)に存在する予測ブロック及びその予測ブロックのインター予測情報から導出されるインター予測情報を時間マージ候補とする。それぞれのマージ候補はマージ候補リストに登録され、マージインデックスによりインター予測で用いるマージ候補を特定する。導出されるインター予測情報はインター予測モード、各参照リストの参照インデックス及び動きベクトルである。
(近接する予測ブロックについて)
図5、図6、図7及び図8は符号化または復号対象の予測ブロックと同一ピクチャ内でその符号化または復号対象の予測ブロックに近接する予測ブロックを説明する図である。図9は符号化または復号対象の予測ブロックと時間的に異なる符号化または復号済みのピクチャにおいて、符号化または復号対象の予測ブロックと同一位置あるいはその付近に存在する既に符号化または復号済みの予測ブロックを説明する図である。図5、図6、図7、図8及び図9を用いて符号化または復号対象の予測ブロックの空間方向に近接する予測ブロック、及び異なる時間の同一位置の予測ブロックについて説明する。
図5に示すように、符号化または復号対象の予測ブロックと同一ピクチャ内でその符号化または復号対象の予測ブロックの左側の辺に近接する予測ブロックA1、上側の辺に近接する予測ブロックB1、右上の頂点に近接する予測ブロックB0、左下の頂点に近接する予測ブロックA0、および左上の頂点に近接する予測ブロックB2を空間方向に近接する予測ブロックと定義する。
なお、図6に示すように、符号化または復号対象の予測ブロックの左側の辺に近接する予測ブロックのサイズが符号化または復号対象の予測ブロックより小さく、複数存在する場合には、本実施の形態においては左側の辺に近接する予測ブロックの中で最も下の予測ブロックA10だけを左側の辺に近接する予測ブロックA1とする。
同様に、符号化または復号対象の予測ブロックの上側の辺に近接する予測ブロックのサイズが符号化または復号対象の予測ブロックより小さく、複数存在する場合には、本実施の形態においては左側の辺に近接する予測ブロックの中で最も右の予測ブロックB10だけを上側の辺に近接する予測ブロックB1とする。
なお、図7に示すように、符号化または復号対象の予測ブロックの左側に近接する予測ブロックAのサイズが符号化または復号対象の予測ブロックより大きい場合にも、前記条件に従い、左側に近接する予測ブロックAがその符号化または復号対象の予測ブロックの左側の辺に近接していれば予測ブロックA1とし、符号化または復号対象の予測ブロックの左下の頂点に近接していれば予測ブロックA0とし、符号化または復号対象の予測ブロックの左上の頂点に近接していれば予測ブロックB2とする。図6の例では、予測ブロックA0、予測ブロックA1及び予測ブロックB2は同一の予測ブロックとなる。
なお、図8に示すように、符号化または復号対象の予測ブロックの上側に近接する予測ブロックBのサイズが符号化または復号対象の予測ブロックより大きい場合にも、前記条件に従い、上側に近接する予測ブロックBがその符号化または復号対象の予測ブロックの上側の辺に近接していれば予測ブロックB1とし、符号化または復号対象の予測ブロックの右上の頂点に近接していれば予測ブロックB0とし、符号化または復号対象の予測ブロックの左上の頂点に近接していれば予測ブロックB2とする。図8の例では、予測ブロックB0、予測ブロックB1及び予測ブロックB2は同一の予測ブロックとなる。
図9に示すように、符号化または復号対象の予測ブロックと時間的に異なる符号化または復号済みのピクチャにおいて、符号化または復号対象の予測ブロックと同一位置あるいはその付近に存在する既に符号化または復号済みの予測ブロックT0およびT1を異なる時間の同一位置の予測ブロックと定義する。
(予測ブロックグループについて)
複数の予測ブロックで構成されるグループを予測ブロックグループと定義する。図5に示す符号化または復号対象の予測ブロックと同一ピクチャ内でその符号化または復号対象の予測ブロックの左側の辺に近接する予測ブロックA1、および符号化または復号対象の予測ブロックの左下の頂点に近接する予測ブロックA0で構成される第1の予測ブロックグループを左側に近接する予測ブロックグループと定義する。
図5に示す符号化または復号対象の予測ブロックと同一ピクチャ内でその符号化または復号対象の予測ブロックの上側の辺に近接する予測ブロックB1、符号化または復号対象の予測ブロックの右上の頂点に近接する予測ブロックB0、および符号化または復号対象の予測ブロックの左上の頂点に近接する予測ブロックB2で構成される第2の予測ブロックグループを上側に近接する予測ブロックグループと定義する。
図9に示す符号化または復号対象の予測ブロックと時間的に異なる符号化または復号済みのピクチャにおいて、符号化または復号対象の予測ブロックと同一位置あるいはその近傍の位置に存在する既に符号化または復号済みの予測ブロックグループT0およびT1で構成される第3の予測ブロックグループを異なる時間の予測ブロックグループと定義する。
(POCについて)
POCは符号化されるピクチャに関連付けられる変数とし、ピクチャの出力/表示順序で1ずつ増加する値が設定される。POCの値によって、同じピクチャであるかを判別したり、出力/表示順序でのピクチャ間の前後関係を判別したり、ピクチャ間の距離を導出したりすることができる。例えば、2つのピクチャのPOCが同じ値を持つ場合、同一のピクチャであると判断できる。2つのピクチャのPOCが違う値を持つ場合、POCの値が小さいピクチャのほうが、時間的に先に出力/表示されるピクチャであると判断でき、2つのピクチャのPOCの差が時間軸方向でのピクチャ間距離を示す。
本発明の実施の形態における動画像符号化装置、動画像符号化方法、動画像符号化プログラム、動画像復号装置、動画像復号方法、動画像復号プログラムにおいては、スライス単位、または予測ブロックのサイズに応じて、インター予測モードが双予測(Pred_BI)の場合に、L0またはL1のいずれか一方のインター予測情報の符号化または復号を行うかどうかを切り替える。切り替える対象となるインター予測情報は差分動きベクトル、参照インデックス、予測動きベクトルインデックスの一部、またはすべてである。
インター予測モードが双予測(Pred_BI)の場合、L0およびL1の2つの動きベクトルを利用してインター予測するので、1つの動きベクトルのみを利用するL0予測やL1予測に比べて、動きベクトルを符号化するのに多くの符号量を必要とする。動きベクトルを符号化する際には符号量を削減するために差分動きベクトルを導出し、その導出された差分動きベクトルが符号化される。双予測の場合において、L0またはL1の動きベクトルに対応する差分動きベクトルの一方の符号化を行わず、差分動きベクトルの値を(0,0)とすることで、インター予測情報の符号量を削減する。ただし、双予測においてL0またはL1のいずれか一方の差分動きベクトルの値を(0,0)とすることで、予測動きベクトルの値がそのまま動きベクトルとなり、任意の動きベクトルを利用することができないので残差信号の符号量が増加することがある。したがって、本実施の形態においては、双予測においてL0またはL1の動きベクトルに対応する動きベクトルの一方を予測動きベクトルと同じ値に設定しても残差信号の符号量が増加しにくく、全体としての符号量が減少しやすい状況ではL0またはL1の動きベクトルに対応する差分動きベクトルの一方の符号化を行わないこととし、双予測においてL0またはL1の動きベクトルに対応する動きベクトルの一方を予測動きベクトルと同じ値に設定すると残差信号の符号量が増加しやすく、全体としての符号量が増加しやすい状況ではL0およびL1の動きベクトルに対応する差分動きベクトルをそれぞれ符号化する。
本実施の形態においては、第1の方法として、予測ブロックのサイズに応じて、インター予測モードが双予測(Pred_BI)の場合に、L0またはL1のいずれか一方の差分動きベクトルの符号化または復号を行うかどうかを切り替える。予測ブロックのサイズが小さい場合はL0またはL1のいずれか一方の差分動きベクトルの符号化または復号を行わず、予測ブロックのサイズが大きい場合はL0およびL1の双方の差分動きベクトルの符号化または復号を行う。予測ブロックのサイズが小さい場合は、画素数が少ないため、予測ブロックあたりの残差信号の符号量も小さい。したがって、双予測において差分動きベクトルの一方の符号化を行わなくても残差信号の符号量が増加しにくく、全体としての符号量が減少する。一方、予測ブロックのサイズが大きい場合は、画素数が多いため、予測ブロックあたりの残差信号の符号量も大きい。したがって、双予測において差分動きベクトルの一方の符号化を行わないと残差信号の符号量が増加しやすく、全体としての符号量が増加する。
また、本実施の形態においては、第2の方法として、スライス毎に、インター予測モードが双予測(Pred_BI)の場合に、L0またはL1のいずれか一方の差分動きベクトルの符号化または復号を行うかどうかを切り替える。
例えば、L0とL1で同一の参照画像を含むスライスや、L0とL1を共に時間方向で符号化または復号対象ピクチャよりも前の参照ピクチャを参照する前方向予測として利用し、時間方向で符号化または復号対象ピクチャよりも後ろの参照ピクチャを参照する後方向予測を含まないスライスでは、L0またはL1のいずれか一方を動きベクトルにより検出される動きベクトルの代わりに予測動きベクトルを用いても予測精度が低下しにくく残差成分の符号量の増加量が小さいため、差分動きベクトルの符号量を削減するために、L0またはL1のいずれか一方の差分動きベクトルの符号化または復号を行わない。
L0とL1で同一の参照画像を含まないスライスや、L0を前方向予測、L1を後方向予測として用いるスライスでは、L0またはL1のいずれか一方を動きベクトルにより検出される動きベクトルの代わりに予測動きベクトルを用いると予測精度が低下して残差成分の符号量の増加量が大きいため、予測精度を高めて残差成分の符号量を削減するために、L0およびL1の双方の差分動きベクトルの符号化または復号を行う。
また、差分動きベクトルと同様の理由により、スライス単位、または予測ブロックのサイズに応じて、双予測においてL0またはL1のいずれか一方の参照インデックスも符号化または復号を行うかどうかを切り替えることができる。インター予測情報の符号量が大きくなる双予測の場合において、L0およびL1の動きベクトルに対応する参照インデックスの一方の符号化を行わず、参照インデックスの値を導出するかどうかをデフォルト値に設定することで、インター予測情報の符号量を削減する。ただし、双予測においてL0またはL1のいずれか一方の参照インデックスの値を導出するかどうかをデフォルト値に設定することで、任意の参照ピクチャを利用することができないので残差信号の符号量が増加することがある。したがって、本実施の形態においては、双予測においてL0またはL1のいずれか一方の参照インデックスの値を導出するかデフォルト値に設定しても残差信号の符号量が増加しにくく、全体としての符号量が減少しやすい状況ではL0またはL1の参照インデックスの一方の符号化を行わないこととし、双予測においてL0またはL1のいずれか一方の参照インデックスの値を導出するかデフォルト値に設定すると残差信号の符号量が増加しやすく、全体としての符号量が増加しやすい状況ではL0およびL1の参照インデックスを共に符号化する。
また、差分動きベクトル、参照インデックスと同様の理由により、スライス単位、または予測ブロックのサイズに応じて、双予測においてL0またはL1のいずれか一方の差分予測ベクトルインデックスも符号化または復号を行うかどうかを切り替えることができる。インター予測情報の符号量が大きくなる双予測の場合において、L0またはL1の動きベクトルに対応する予測ベクトルインデックスの一方の符号化を行わず、予測ベクトルインデックスの値を他方の予測ベクトルインデックスと同じ値に設定することで、インター予測情報の符号量を削減する。ただし、双予測においてL0またはL1のいずれか一方の予測ベクトルインデックスの値を他方の予測ベクトルインデックスと同じ値とすることで、任意の予測ベクトルインデックスを利用することができないので残差信号の符号量が増加することがある。したがって、本実施の形態においては、双予測においてL0またはL1のいずれか一方の予測ベクトルインデックスの値を他方の予測ベクトルインデックスと同じ値に設定しても残差信号の符号量が増加しにくく、全体としての符号量が減少しやすい状況ではL0またはL1の予測ベクトルインデックスの一方の符号化を行わないこととし、双予測においてL0またはL1のいずれか一方の予測ベクトルインデックスの値を他方の予測ベクトルインデックスと同じ値に設定すると残差信号の符号量が増加しやすく、全体としての符号量が増加しやすい状況ではL0およびL1の予測ベクトルインデックスを共に符号化する。
以下の説明においては、スライス単位、または予測ブロックのサイズに応じて、インター予測モードが双予測(Pred_BI)の場合における、L0またはL1のいずれか一方のインター予測の符号化または復号を行うかどうかの切り替えに際しては、インター予測情報である差分動きベクトル、参照インデックス、予測動きベクトルインデックスのすべてを切り替えるものとして説明するが、すべてを切り替える場合に限定されず、差分動きベクトル、参照インデックス、予測動きベクトルインデックスの一部、すなわちいずれか1つまたは2つだけを切り替えることもできる。例えば、L0またはL1のいずれか一方の予測動きベクトルだけを符号化または復号を行うかどうかを切り替えて、L0およびL1の両方の参照インデックス、予測動きベクトルインデックスを符号化または復号してもよいし、L0またはL1のいずれか一方の予測動きベクトルおよび参照インデックスを符号化または復号を行うかどうかを切り替えて、L0およびL1の両方の予測動きベクトルインデックスを符号化または復号してもよい。
また、以下の説明においては、スライス単位、または予測ブロックのサイズに応じて、インター予測モードが双予測(Pred_BI)の場合における、L1のインター予測の符号化または復号を行うかどうかを切り替えるものとして説明するが、L1に限定されず、L0のインター予測の符号化または復号を行うかどうかを切り替えることもできる。
以下、図面と共に本発明の実施の形態を説明する。図1は本発明の実施の形態に係る動画像符号化装置100の構成を示すブロック図である。実施の形態の動画像符号化装置は、画像メモリ101、参照インデックス導出部116、動きベクトル検出部102、差分動きベクトル導出部103、インター予測情報推定部104、動き補償予測部105、予測方法決定部106、残差信号生成部107、直交変換・量子化部108、第1の符号化ビット列生成部109、第2の符号化ビット列生成部110、多重化部111、逆量子化・逆直交変換部112、復号画像信号重畳部113、符号化情報格納メモリ114、および復号画像メモリ115を備える。
本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報は参照インデックス、予測動きベクトルインデックス、差分動きベクトルの一部、またはすべてである。そこで、実施の形態の動画像符号化装置100では、双予測においてL1のインター予測情報が符号化されるかどうかを示すフラグinterInfoCodingL1Flagが0または1に設定される。フラグinterInfoCodingL1Flagが1は双予測においてL1のインター予測情報が符号化されることを示し、フラグinterInfoCodingL1Flagが0は双予測においてL1のインター予測情報が符号化されないことを示す。双予測においてL1のインター予測情報が符号化されるかどうかを示すフラグinterInfoCodingL1Flagは参照インデックス導出部116、動きベクトル検出部102、差分動きベクトル導出部103、動き補償予測部105、予測方法決定部106、第1の符号化ビット列生成部109で参照される。
画像メモリ101は、撮影/表示時間順に供給された符号化対象のピクチャの画像信号を一時格納する。画像メモリ101は、格納された符号化対象のピクチャの画像信号を、所定の画素ブロック単位で、動きベクトル検出部102、予測方法決定部106、および残差信号生成部107に供給する。その際、撮影/表示時間順に格納されたピクチャの画像信号は、符号化順序に並べ替えられて、画素ブロック単位で、画像メモリ101から出力される。
本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の参照インデックスが含まれる場合で、双予測でのL1の参照インデックスを符号化しない場合、参照インデックス導出部116は、双予測でのL1の参照インデックスを導出し、動きベクトル検出部102、予測方法決定部106に供給する。符号化情報格納メモリに格納されている近接する予測ブロックのL1の参照インデックスを含む符号化情報を利用して、符号化対象の予測ブロックのL1の参照インデックスを導出してもよいし、L0の参照インデックスに対応するL0の参照ピクチャがL1にも含まれている場合にL1でも同じ参照ピクチャを用いることとし、その参照ピクチャに対応するL1の参照インデックスを導出してもよい。
動きベクトル検出部102は、画像メモリ101から供給される画像信号と復号画像メモリ115から供給される参照ピクチャ間でブロックマッチング等により各予測ブロックサイズ、および各インター予測モードでの、L0及びL1の各参照インデックス毎のそれぞれの動きベクトルを各予測ブロック単位で検出し、検出された動きベクトルを動き補償予測部105、差分動きベクトル導出部103、および予測方法決定部106に供給する。
インター予測が双予測においては、L0予測及びL1予測のために検出したそれぞれの動きベクトルを組み合わせて双予測の動きベクトルとしてもよいし、双予測のために別途動きベクトルを検出してもよい。
なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルが含まれる場合で、L1の差分動きベクトルを符号化しない場合、後述する方法によりL1の予測動きベクトルを導出し、その予測動きベクトルを双予測でのL1の動きベクトルとする。
さらに、切り替える対象となるインター予測情報として双予測でのL1の参照インデックスが含まれる場合で、L1の参照インデックスを符号化しない場合、L1の参照インデックスの値を導出するかデフォルト値とする。
差分動きベクトル導出部103は、符号化情報格納メモリ114に記憶されている既に符号化された画像信号の符号化情報を用いて、複数の予測動きベクトルの候補を算出して後述する予測動きベクトルリストに登録し、予測動きベクトルリストに登録された複数の予測動きベクトルの候補の中から最適な予測動きベクトルを選択し、動きベクトル検出部102が検出した動きベクトルと予測動きベクトルから差分動きベクトルを算出し、算出された差分動きベクトルを予測方法決定部106に供給する。なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルが含まれる場合で、双予測でのL1の差分動きベクトルを符号化しない場合、差分動きベクトルを(0,0)とする。さらに、予測動きベクトルリストに登録された予測動きベクトルの候補から選択された予測動きベクトルを特定する予測動きベクトルインデックスを予測方法決定部106に供給する。差分動きベクトル導出部103の詳細な構成と動作は後述する。
インター予測情報推定部104は、マージモードのインター予測情報を推定する。マージモードとは、当該予測ブロックの予測モード、参照インデックス(参照リストに登録されている複数の参照ピクチャから動き補償予測に利用する参照ピクチャを特定するための情報)、動きベクトル等のインター予測情報を符号化するのではなく、符号化済みの近接するインター予測された予測ブロック、あるいは異なるピクチャのインター予測された予測ブロックのインター予測情報を利用するモードである。符号化情報格納メモリ114に記憶されている既に符号化された予測ブロックの符号化情報を用いて、複数のマージの候補(インター予測情報の候補)を算出してマージ候補リストに登録し、マージ候補リストに登録された複数のマージ候補の中から最適なマージ候補を選択し、選択されたマージ候補の予測モード、参照インデックス、動きベクトル等のインター予測情報を動き補償予測部105に供給するとともに、選択されたマージ候補を特定するマージインデックスを予測方法決定部106に供給する。
動き補償予測部105は、動きベクトル検出部102およびインター予測情報推定部104により検出された動きベクトルを用いて参照ピクチャから動き補償予測により予測画像信号を生成し、予測画像信号を予測方法決定部106に供給する。なお、L0予測、及びL1予測では、片方向の予測を行う。双予測(Pred_BI)の場合は、双方向の予測を行い、L0予測、L1予測のそれぞれのインター予測された信号に適応的に重み係数を掛け算し、オフセット値を加算して重畳し、最終的な予測画像信号を生成する。
予測方法決定部106は予測方法を決定する。それぞれの予測モードごとに符号量と符号化歪を算出し、最も少ない発生符号量と符号化歪となる予測ブロックサイズと予測モードが決定される。インター予測情報やイントラ予測情報等の符号化情報の符号量を算出する。さらに、動き補償予測部105から供給される予測画像信号と、画像メモリ101から供給される符号化対象の画像信号との予測残差信号を符号化した予測残差信号の符号量を算出する。動き情報の符号量と予測残差信号の符号量とが加算された総発生符号量を算出し、第1の評価値とする。尚、ここで算出される発生符号量は、符号化過程をシミュレートしたものであることが望ましいが、簡便に近似したり、概算することも可能である。
また、こうした予測残差信号を符号化後に、歪量評価の為に復号し、符号化により生じる元の画像信号との誤差を表す比率として符号化歪が算出される。これら総発生符号量と符号化歪とを予測方法毎に比較することで、最も少ない発生符号量と符号化歪となる予測方法が決定される。
複数の予測方法の中から、最適な符号化ブロック単位でインター予測(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がインター予測(PRED_INTER)の場合、マージモードかどうかを判別するフラグ、マージモードの場合はマージインデックス、マージモードでない場合はインター予測モード、参照インデックス、予測動きベクトルインデックス、差分動きベクトル等のインター予測情報を規定のシンタックス規則に従って符号化して第1の符号化ビット列を生成し、多重化部111に供給する。なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報は双予測でのL1の参照インデックス、予測動きベクトルインデックス、差分動きベクトルの一部またはすべてである。
第2の符号化ビット列生成部110は、直交変換及び量子化された残差信号を規定のシンタックス規則に従ってエントロピー符号化して第2の符号化ビット列を生成し、多重化部111に供給する。多重化部111で、第1の符号化ビット列と第2の符号化ビット列を規定のシンタックス規則に従って多重化し、ビットストリームを出力する。
逆量子化・逆直交変換部112は、直交変換・量子化部108から供給された直交変換・量子化された残差信号を逆量子化及び逆直交変換して残差信号を算出し、復号画像信号重畳部113に供給する。復号画像信号重畳部113は、予測方法決定部106による決定に応じた予測画像信号と逆量子化・逆直交変換部112で逆量子化及び逆直交変換された残差信号を重畳して復号画像を生成し、復号画像メモリ115に格納する。なお、復号画像に対して符号化によるブロック歪等の歪を減少させるフィルタリング処理を施して、復号画像メモリ115に格納されることもある。
図2は図1の動画像符号化装置に対応した本発明の実施の形態に係る動画像復号装置200の構成を示すブロックである。実施の形態の動画像復号装置は、分離部201、第1符号化ビット列復号部202、第2符号化ビット列復号部203、参照インデックス導出部211、動きベクトル導出部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)の場合、予測ブロック単位でマージモードかどうかを判別するマージフラグ、マージフラグがマージモードの場合はマージインデックス、マージフラグがマージモードでない場合はインター予測モード、予測動きベクトルインデックス、差分動きベクトル等に関する符号化情報を規定のシンタックス規則に従って復号し、参照インデックス導出部211、符号化情報を動きベクトル導出部204およびインター予測情報推定部205に供給する。
なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または復号対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を復号するかどうかを切り替える。切り替える対象となるインター予測情報は参照インデックス、予測動きベクトルインデックス、差分動きベクトルの一部、またはすべてである。そこで、第1符号化ビット列復号部202では、双予測においてL1のインター予測情報が符号化されるかどうかを示すフラグinterInfoCodingL1Flagが0または1に設定される。フラグinterInfoCodingL1Flagが1は双予測においてL1のインター予測情報が符号化されることを示し、フラグinterInfoCodingL1Flagが0は双予測においてL1のインター予測情報が符号化されないことを示す。設定された双予測においてL1のインター予測情報が符号化されるかどうかを示すフラグinterInfoCodingL1Flagの情報は参照インデックス導出部211、および動きベクトル導出部212に供給される。
双予測でL1のインター予測情報が符号化されるかどうかを示すフラグinterInfoCodingL1Flagが1の場合、切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルが含まれる場合で、双予測でのL1の差分動きベクトルを復号しない場合、に双予測でのL1の差分動きベクトルが(0,0)に設定され、切り替える対象となるインター予測情報として双予測でのL1の予測動きベクトルインデックスが含まれる場合で、双予測でのL1の予測動きベクトルインデックスを復号しない場合、双予測でのL1の予測動きベクトルインデックスがL0の予測動きベクトルインデックスの値に設定され、符号化情報を参照インデックス導出部211および動きベクトル導出部204に供給する。なお、本実施の形態においては動きベクトル導出部204において切り替える対象となるインター予測情報として双予測でのL1の参照インデックスが含まれる場合で、双予測でのL1の参照インデックスを復号しない場合、双予測でのL1の参照インデックスを導出した値に設定するが、双予測でのL1の参照インデックスをデフォルト値に設定することもできる。その場合、第1符号化ビット列復号部202で、双予測でのL1の参照インデックスをデフォルト値に設定し、符号化情報を参照インデックス導出部211に供給する。
第2符号化ビット列復号部203は、供給された符号化ビット列を復号して直交変換・量子化された残差信号を算出し、直交変換・量子化された残差信号を逆量子化・逆直交変換部207に供給する。
参照インデックス導出部211は、供給された符号化情報から予測モードPredModeがインター予測(MODE_INTER)であり、マージフラグがマージモードでなく、インター予測モードが双予測(Pred_BI)であり、双予測においてL1のインター予測情報が符号化されるかどうかを示すフラグinterInfoCodingL1Flagが0の場合に、L1の参照インデックスを導出し、動き補償予測部206に供給する。符号化情報格納メモリに格納されている近接する予測ブロックのL1の参照インデックスを含む符号化情報を利用して、復号対象の予測ブロックのL1の参照インデックスを導出してもよいし、L0の参照インデックスに対応するL0の参照ピクチャがL1にも含まれている場合にL1でも同じ参照ピクチャを用いることとし、その参照ピクチャに対応するL1の参照インデックスを導出してもよい。
動きベクトル導出部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に格納されることもある。
本実施の形態の動画像符号化装置100および動画像復号装置200においては、インター予測モードが双予測において、スライス単位、または符号化または復号対象の予測ブロックのサイズに応じて、双予測でL1のインター予測情報を符号化または復号するかどうかを切り替える。
スライス単位でL1のインター予測情報を符号化または復号するかどうかを切り替える場合、図10のスライスヘッダーのシンタックス構造の例に示すように、スライスヘッダーに双予測でL1のインター予測情報を符号化または復号するかどうかを示すフラグinterInfoCodingL1Flagを符号化または復号するためのシンタックス要素inter_info_coding_l1_flagを用意し、このシンタックス要素をスライスタイプがBスライスの場合に動画像符号化装置100の第1の符号化ビット列生成部109で符号化し、動画像復号装置200の第1符号化ビット列復号部202で復号することで、双予測においてL1のインター予測情報を符号化または復号するかどうかを判別する。また、スライス単位でL0のインター予測情報を符号化または復号するかどうかを切り替えてもよい。L0のインター予測情報を切り替える場合は、L0のインター予測情報を符号化または復号するかどうかを示すフラグinterInfoCodingL0Flagを符号化または復号するためのシンタックス要素inter_info_coding_l0_flagを用意して符号化または復号することで判別する。本実施の形態においては、差分動きベクトル、参照インデックス、予測動きベクトルインデックスの少なくとも1つを、符号化または復号するかどうかを切り替えることで符号量の削減を行う。例えば、双予測ではL1の差分動きベクトルだけを切り替え対象のインター予測情報とし、スライス単位で双予測のL1の差分予測動きベクトルだけを符号化または復号するかどうかを切り替える。符号化側で、双予測でのL1の動きベクトル検出処理を削減することで、演算量を削減する場合、または、L1の差分予測動きベクトルを省略することで符号化効率が向上すると判断した場合、双予測でL1のインター予測情報を符号化または復号するかどうかを示すフラグinterInfoCodingL1Flagの値を0としてシンタックス要素inter_info_coding_l1_flag を符号化または復号し、その値に応じて双予測のL1の差分動きベクトルの符号化および復号を省略することで、インター予測情報の符号量を削減する。双予測でL1の差分動きベクトルの符号化および復号を省略する際には符号化側、復号側共に、L1の差分動きベクトルの値を(0,0)とする。すなわち、双予測でL1の差分動きベクトルの符号化および復号を省略する際には符号化側、復号側共に、L1の予測動きベクトルをそのままL1の動きベクトルとする。
なお、参照インデックスだけを切り替え対象のインター予測情報としてもよいし、予測動きベクトルインデックスだけを切り替え対象のインター予測情報としてもよいし、すべてを切り替え対象のインター予測情報としてもよい。また、スライス単位で双予測のL1のインター予測情報だけを符号化または復号するかどうかを切り替えてもよいし、スライス単位で双予測のL0のインター予測情報だけを符号化または復号するかどうかを切り替えてもよい。ここでは、スライス単位で、双予測のL0およびL1のいずれか一方のインター予測情報において、差分動きベクトル、参照インデックス、および前記予測動きベクトルインデックスの少なくとも一つの符号化または復号を行わないモードに切り替えるようにする。
また、双予測でL1のインター予測情報を符号化または復号するかどうかを示すフラグinterInfoCodingL1Flagの代わりに、双予測でL1の参照インデックスを符号化または復号するかどうかを示すフラグrefIdxCodingL1Flag、双予測でL1の予測動きベクトルインデックスを符号化または復号するかどうかを示すフラグmvpIdxCodingL1Flag、または双予測でL1の差分予測動きベクトルを符号化または復号するかどうかを示すフラグmvdCodingL1Flagを用意してそれぞれ個別に切り替えることもできる。 また、双予測でL0の参照インデックスを符号化または復号するかどうかを示すフラグrefIdxCodingL0Flag、双予測でL0の予測動きベクトルインデックスを符号化または復号するかどうかを示すフラグmvpIdxCodingL0Flag、双予測でL0の差分予測動きベクトルを符号化または復号するかどうかを示すフラグmvdCodingL0Flagを用意してそれぞれ個別に切り替えることもできる。図11のスライスヘッダー のシンタックス構造の例に示すように、スライスヘッダーに双予測でL1の参照インデックスを符号化または復号するかどうかを示すフラグrefIdxCodingL1Flagを符号化または復号するためのシンタックス要素ref_idx_coding_l1_flag、双予測でL1の予測動きベクトルインデックスを符号化または復号するかどうかを示すフラグmvpIdxCodingL1Flagを符号化または復号するためのシンタックス要素mvp_idx_coding_l1_flag、双予測でL1の差分予測動きベクトルを符号化または復号するかどうかを示すフラグmvdCodingL1Flagを符号化または復号するためのシンタックス要素mvd_coding_l1_flag を用意し、これらのシンタックス要素をスライスタイプがBスライスの場合に動画像符号化装置100の第1の符号化ビット列生成部109で符号化し、動画像復号装置200の第1符号化ビット列復号部202で復号することで、双予測においてL1のそれぞれのインター予測情報を符号化または復号するかどうかを判別することもできる。また、L0のそれぞれのインター予測情報を切り替える場合は、双予測でL0の参照インデックスを符号化または復号するかどうかを示すフラグrefIdxCodingL0Flagを符号化または復号するためのシンタックス要素ref_idx_coding_l0_flag、双予測でL0の予測動きベクトルインデックスを符号化または復号するかどうかを示すフラグmvpIdxCodingL0Flagを符号化または復号するためのシンタックス要素mvp_idx_coding_l0_flag、双予測でL0の差分予測動きベクトルを符号化または復号するかどうかを示すフラグmvdCodingL0Flagを符号化または復号するためのシンタックス要素mvd_coding_l0_flagを用意して符号化または復号することで判別する。本実施の形態においては、これらのインター予測情報の少なくとも1つを、符号化または復号するかどうかを切り替えることで符号量の削減を行う。例えば、双予測ではL1の差分動きベクトルだけを切り替え対象のインター予測情報とし、スライス単位で双予測のL1の差分予測動きベクトルだけを符号化または復号するかどうかを切り替える。符号化側で、双予測でのL1の動きベクトル検出処理を削減することで、演算量を削減する場合、または、L1の差分予測動きベクトルを省略することで符号化効率が向上すると判断した場合、双予測でL1の差分予測動きベクトルを符号化または復号するかどうかを示すフラグmvdCodingL1Flagの値を0としてシンタックス要素mvp_idx_coding_l1_flag を符号化または復号し、その値に応じて双予測のL1の差分動きベクトルの符号化および復号を省略することで、インター予測情報の符号量を削減する。双予測でL1の差分動きベクトルの符号化および復号を省略する際には符号化側、復号側共に、L1の差分動きベクトルを(0,0)とする。すなわち、双予測でL1の差分動きベクトルの符号化および復号を省略する際には符号化側、復号側共に、L1の予測動きベクトルをそのままL1の動きベクトルとする。
なお、スライス単位で双予測のL0の差分予測動きベクトルだけを符号化または復号するかどうかを切り替えてもよい。また、スライス単位で双予測のL1の参照インデックスだけを符号化または復号するかどうかを切り替えてもよいし、スライス単位で双予測のL0の参照インデックスだけを符号化または復号するかどうかを切り替えてもよい。また、スライス単位で双予測のL1の参照インデックスだけを符号化または復号するかどうかを切り替えてもよいし、スライス単位で双予測のL0の参照インデックスだけを符号化または復号するかどうかを切り替えてもよい。また、スライス単位で双予測のL1の予測動きベクトルインデックスだけを符号化または復号するかどうかを切り替えてもよいし、スライス単位で双予測のL0の予測動きベクトルインデックスだけを符号化または復号するかどうかを切り替えてもよい。スライス単位で、双予測のL0およびL1の差分予測動きベクトルをそれぞれ符号化または復号するかどうかを切り替えてもよいし、双予測のL0およびL1の参照インデックスをそれぞれ符号化または復号するかどうかを切り替えてもよいし、双予測のL0およびL1の予測動きベクトルインデックスをそれぞれ符号化または復号するかどうかを切り替えてもよい。また、スライス単位で双予測のL1の差分動きベクトル、参照インデックス、予測動きベクトルインデックスをそれぞれ符号化または復号するかどうかを切り替えてもよいし、スライス単位で双予測のL0の差分動きベクトル、参照インデックス、予測動きベクトルインデックスをそれぞれ符号化または復号するかどうかを切り替えてもよい。ここでは、スライス単位で、双予測のL0およびL1のいずれか一方のインター予測情報において、差分動きベクトル、参照インデックス、および前記予測動きベクトルインデックスの少なくとも一つの符号化または復号を行わないモードに切り替えるようにする。
次に、符号化または復号対象の予測ブロックのサイズに応じてL1のインター予測情報を符号化または復号するかどうかを切り替える場合について、図12を用いて説明する。これらの処理は、本実施の形態の動画像符号化装置100および動画像復号装置200の各ブロックにおいて、必要に応じて行われる。
図12は符号化または復号対象の予測ブロックのサイズに応じて切り替える場合の双予測でL1のインター予測情報を符号化または復号するかどうかを示すフラグinterInfoCodingL1Flagの設定処理手順を示すフローチャートである。
まず、符号化または復号対象の予測ブロックのサイズを得る(ステップS401)。符号化または復号対象の予測ブロックのサイズが規定したサイズsizePUInterPredInfoCodingL1以下の場合(ステップS402のYES)、フラグinterInfoCodingL1Flagを0に設定する(ステップS403)。一方、符号化または復号対象の予測ブロックのサイズが規定したサイズsizePUInterPredInfoCodingL1より大きい場合(ステップS402のNO)、interInfoCodingL1Flagを1に設定する(ステップS404)。本実施の形態においては、規定するサイズsizePUInterPredInfoCodingL1を8x8とする。なお、規定するサイズsizePUInterPredInfoCodingL1は固定された値であってもよいし、シーケンス、ピクチャまたはスライス単位でシンタックス要素を用意して任意の値に設定してもよい。また、8x4と4x8等、幅と高さを乗じた値が等しいサイズの場合は同じサイズとみなす。即ち、規定するサイズsizePUInterPredInfoCodingL1が8x4と設定された場合、4x8も設定されたものとみなす。また、ステップS402で、符号化または復号対象の予測ブロックのサイズが規定したサイズsizePUInterPredInfoCodingL1未満の場合、interInfoCodingL1Flagを0に設定し、そうでない場合、interInfoCodingL1Flagを1に設定するとしてもよい。
図1の動画像符号化装置の第1の符号化ビット列生成部109で実施される予測ブロック単位のインター予測情報のエントロピー符号化処理手順について、図13のフローチャートを用いて説明する。まず予測ブロック単位でマージモードかどうかを判別するマージフラグmergeFlagを符号化する(ステップS501)。マージフラグが1の場合(ステップS502のYES)、インター予測情報推定部104で選択されたマージ候補を特定するマージインデックスmergeIdxを符号化し(ステップS503)、本符号化処理手順を終了する。
一方、マージフラグが0の場合(ステップS502のNO)、ステップS504、およびS505の条件判断を実施する。インター予測モードがL0予測の場合(ステップS504のYES)、L0の参照インデックスrefIdxL0を符号化し(ステップS506)、L0の予測動きベクトルインデックスmvpIdxL0を符号化し(ステップS507)、L0の差分動きベクトルを符号化し(ステップS508)、本符号化処理手順を終了する。
一方、インター予測モードがL1予測の場合(ステップS504のNO、ステップS505のYES)、L1の参照インデックスrefIdxL1を符号化し(ステップS509)、L1の予測動きベクトルインデックスmvpIdxL1を符号化し(ステップS510)、L1の差分動きベクトルを符号化し(ステップS511)、本符号化処理手順を終了する。
一方、インター予測モードが双予測の場合(ステップS504のNO、ステップS505のNO)、L0の参照インデックスrefIdxL0を符号化し(ステップS512)、L0の予測動きベクトルインデックスmvpIdxL0を符号化し(ステップS513)、L0の差分動きベクトルを符号化する(ステップS514)。
続いて、フラグinterPredInfoCodingL1Flagが1、即ち、L1のインター予測情報を符号化する場合(ステップS516のYES)、L1の参照インデックスrefIdxL1を符号化し(ステップS517)、L1の予測動きベクトルインデックスmvpIdxL1を符号化し(ステップS518)、L1の差分動きベクトルを符号化し(ステップS519)、本符号化処理手順を終了する。
一方、フラグinterPredInfoCodingL1Flagが0、即ち、L1のインター予測情報を符号化しない場合(ステップS516のNO)、本符号化処理手順を終了する。
次に、図2の動画像復号装置の第1符号化ビット列復号部202で実施される予測ブロック単位のインター予測情報のエントロピー復号処理手順について、図14のフローチャートを用いて説明する。まず予測ブロック単位でマージモードかどうかを判別するマージフラグmergeFlagを復号する(ステップS601)。マージフラグが1の場合(ステップS602のYES)、インター予測情報推定部104で選択されたマージ候補を特定するマージインデックスmergeIdxを復号し(ステップS603)、本復号処理手順を終了する。
一方、マージフラグが0の場合(ステップS602のNO)、ステップS604、およびS605の条件判断を実施する。インター予測モードがL0予測の場合(ステップS604のYES)、L0の参照インデックスrefIdxL0を復号し(ステップS606)、L0の予測動きベクトルインデックスmvpIdxL0を復号し(ステップS607)、L0の差分動きベクトルを復号し(ステップS608)、本復号処理手順を終了する。
一方、インター予測モードがL1予測の場合(ステップS604のNO、ステップS605のYES)、L1の参照インデックスrefIdxL1を復号し(ステップS609)、L1の予測動きベクトルインデックスmvpIdxL1を復号し(ステップS610)、L1の差分動きベクトルを復号し(ステップS611)、本復号処理手順を終了する。
一方、インター予測モードが双予測の場合(ステップS604のNO、ステップS605のNO)、L0の参照インデックスrefIdxL0を復号し(ステップS612)、L0の予測動きベクトルインデックスmvpIdxL0を復号し(ステップS613)、L0の差分動きベクトルを復号する(ステップS614)。
続いて、フラグinterPredInfoCodingL1Flagを設定する(ステップS615)。復号対象の予測ブロックのサイズに応じて切り替える場合は、図17を用いて説明した方法により、フラグinterPredInfoCodingL1Flagを設定する。なお、スライス単位でL1のインター予測情報を復号するかどうかを切り替える場合はフラグinterPredInfoCodingL1Flagはスライスヘッダ復号時に設定される。
続いて、フラグinterPredInfoCodingL1Flagが1、即ち、L1のインター予測情報を復号する場合(ステップS616のYES)、L1の参照インデックスrefIdxL1を復号し(ステップS617)、L1の予測動きベクトルインデックスmvpIdxL1を復号し(ステップS618)、L1の差分動きベクトルを復号し(ステップS619)、本復号処理手順を終了する。
一方、フラグinterPredInfoCodingL1Flagが0、即ち、L1のインター予測情報を復号しない場合(ステップS616のNO)、参照インデックス導出部211でL1の参照インデックスrefIdxL1を導出する(ステップS620)。続いて、L1の予測動きベクトルインデックスmvpIdxL1をL0の予測動きベクトルインデックスmvpIdxL0の値に設定する(ステップS621)。続いて、L1の差分動きベクトルを(0,0)に設定し(ステップS622)、本復号処理手順を終了する。
次に、図1の参照インデックス導出部116、及び図2の参照インデックス導出部211で実施される双予測でのL1の参照インデックスを導出する方法について詳細に説明する。
本実施の形態においては、周辺の予測ブロックで利用された参照インデックスを利用して符号化または復号対象の予測ブロックの双予測でのL1の参照インデックスrefIdxLXを導出する。これは、符号化または復号対象の予測ブロックの参照インデックスは周辺の予測ブロックの参照インデックスと高い相関を持つと考えられるからである。特に、符号化または復号対象の予測ブロックの左の辺に近接する予測ブロックA1、及び上の辺に近接する予測ブロックB1の参照インデックスだけを利用する。なぜなら、図5に示す近接する予測ブロックA0,A1,B0,B1,B2の中でも符号化または復号対象の予測ブロックの辺に接している予測ブロックA1,B1は、符号化または復号対象の予測ブロックの頂点に接している予測ブロックA0,B0,B2よりも相関が高いと考えられるからである。あえて予測ブロックA0,B0,B2を利用せずに、利用する予測ブロックを予測ブロックA1,B1に限定することで、参照インデックスの導出による符号化効率の改善効果を得るとともに、参照インデックス導出処理に関する演算量及びメモリアクセス量を削減する。
(実施例1)
以下、本実施の形態をいくつかの実施例に分けて説明する。まず、本実施の形態の実施例1について説明する。本実施の形態の実施例1では、予測ブロックA1、予測ブロックB1が共にLX予測(参照インデックスの導出対象のリストをLXとし、LXを用いた予測をLX予測とする。つまり、L0の参照インデックスを導出する際にはLXはL0に設定され、L1の参照インデックスを導出する際にはLXはL1に設定される。以下、断りのない限り、この意味で用いる。)を行う場合は予測ブロックA1、予測ブロックB1のLXの参照インデックスの値の小さい方を符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値として採用する。ここで、双予測はL0予測とL1予測を共に行うものとする。ただし、予測ブロックA1、予測ブロックB1のいずれか一方しかLX予測を行わない場合はLX予測を行う方の予測ブロックのLXの参照インデックスの値を符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値として採用し、予測ブロックA1、予測ブロックB1が共にLX予測を行わない場合は符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値をデフォルト値の0とする。
予測ブロックA1、予測ブロックB1が共にLX予測を行わない場合に符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスのデフォルト値を0とする理由は、インター予測において参照インデックスの値が0に対応する参照ピクチャが最も選択される確率が高いからである。ただし、これに限定されず、参照インデックスのデフォルト値を0以外の値(1、2など)としても良いし、シーケンスレベル、ピクチャレベル、またはスライスレベルで符号化ストリーム内に参照インデックスのデフォルト値を示すシンタックス要素を設置し伝送できるようにして、符号化側で選択できるようにしても良い。
図15は本実施の形態の実施例1の方法による符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスrefIdxLXの導出処理手順を説明するフローチャートである。まず、符号化情報格納メモリ114または209から左に近接する予測ブロックA1の符号化情報、及び予測ブロックB1の符号化情報を取得する(ステップS6101、ステップS6102)。
予測ブロックAのLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]と予測ブロックB1のLX予測を行うかどうかを示すフラグpredFlagLX[xB][yB]が共に0でない場合(ステップS6103のYES)、LXの参照インデックスrefIdxLXを予測ブロックA1のLXの参照インデックスrefIdxLX[xA][yA]と予測ブロックB1のLXの参照インデックスrefIdxLX[xB][yB]の値の小さい方と同じ値に設定し(ステップS6104)、本参照インデックス導出処理を終了する。ここで、xA、yAはピクチャ内での予測ブロックA1の左上の画素の位置を示すインデックスである。ここで、xB、yBはピクチャ内での予測ブロックB1の左上の画素の位置を示すインデックスである。
なお、本実施の形態においては、予測ブロックN(N=A,B)において、予測ブロックNが符号化または復号対象のスライス外で利用できない場合や予測ブロックNが符号化または復号順序で符号化または復号対象の予測ブロックよりも後のために符号化または復号されておらず利用できない場合や予測ブロックNの予測モードPredModeがイントラ予測(MODE_INTRA)の場合、L0予測を利用するかどうかを示すフラグpredFlagL0[xN][yN]、予測ブロックNのL1予測を利用するかどうかを示すフラグpredFlagL1[xN][yN]は共に0である。ここで、xN、yNはピクチャ内での予測ブロックNの左上の画素の位置を示すインデックスである。予測ブロックNの予測モードPredModeがインター予測(MODE_INTER)で、インター予測モードがL0予測(Pred_L0)の場合、予測ブロックNのL0予測を利用するかどうかを示すフラグpredFlagL0[xN][yN]は1, L1予測を利用するかどうかを示すフラグpredFlagL1[xN][yN]は0である。予測ブロックNのインター予測モードがL1予測(Pred_L1)の場合、予測ブロックNのL0予測を利用するかどうかを示すフラグpredFlagL0[xN][yN]は0, L1予測を利用するかどうかを示すフラグpredFlagL1[xN][yN]は1である。予測ブロックNのインター予測モードが双予測(Pred_BI)の場合、予測ブロックNのL0予測を利用するかどうかを示すフラグpredFlagL0[xN][yN]、L1予測を利用するかどうかを示すフラグpredFlagL1[xN][yN]は共に1である。
予測ブロックA1のLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]が0でなく、予測ブロックB1のLX予測を行うかどうかを示すフラグpredFlagLX[xB][yB]が0である場合(ステップS6103のNOで、ステップS6105のYES)、LXの参照インデックスrefIdxLXを予測ブロックA1のLXの参照インデックスrefIdxLX[xA][yA]と同じ値に設定し(ステップS6106)、本参照インデックス導出処理を終了する。ここで、xA、yAはピクチャ内での予測ブロックA1の左上の画素の位置を示すインデックスであり、xB、yBはピクチャ内での予測ブロックB1の左上の画素の位置を示すインデックスである。
予測ブロックA1のLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]が0であり、予測ブロックB1のLX予測を行うかどうかを示すフラグpredFlagLX[xB][yB]が0でない場合(ステップS6103のNOで、ステップS6105のNOで、ステップS2107のYES)、LXの参照インデックスrefIdxLXを予測ブロックB1のLXの参照インデックス refIdxLX[xB][yB]と同じ値に設定し(ステップS6108)、本参照インデックス導出処理を終了する。
予測ブロックA1のLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]と予測ブロックB1のLX予測を行うかどうかを示すフラグpredFlagLX[xB][yB]が共に0である場合(ステップS6103のNOで、ステップS6105のNOで、ステップS6107のNO)、のLXの参照インデックスrefIdxLXをデフォルト値の0に設定し(ステップS6109)、本参照インデックス導出処理を終了する。
(実施例2)
次に、本実施の形態の実施例2について説明する。本実施の形態の実施例2においても、実施例1と同様に左の辺に近接する予測ブロックA1、及び上の辺に近接する予測ブロックB1の参照インデックスを利用して符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスを導出する。実施例1に対して、図15のステップS6103、ステップS6104の処理を省略し、予測ブロックA1、予測ブロックB1の順序で、LX予測を行うかどうかを判定して、最初に見つかったLX予測を行う予測ブロックの参照インデックスを採用することでさらに処理量を削減する点が異なる。予測ブロックA1がLX予測を行う場合は予測ブロックA1のLXの参照インデックスを符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値として採用し、予測ブロックA1がLX予測を行わず、予測ブロックB1がLX予測を行う場合は予測ブロックB1のLXの参照インデックスを符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値として採用する。予測ブロックA1、予測ブロックB1が共にLX予測を行わない場合はLXの参照インデックスの値をデフォルト値の0とする。
図16は本実施の形態の実施例2の方法による符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスrefIdxLXの導出処理手順を説明するフローチャートである。まず、符号化情報格納メモリ114または209から左に近接する予測ブロックA1の符号化情報、及び予測ブロックB1の符号化情報を取得する(ステップS6201、ステップS6202)。なお、L0の参照インデックスを導出する際にはLXはL0に設定され、L1の参照インデックスを導出する際にはLXはL1に設定される。
予測ブロックA1のLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]が0でない場合(ステップS6203のYES)、LXの参照インデックスrefIdxLXを予測ブロックA1のLXの参照インデックスrefIdxLX[xA][yA]と同じ値に設定し(ステップS6204)、本参照インデックス導出処理を終了する。
予測ブロックA1のLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]が0であり、予測ブロックB1のLX予測を行うかどうかを示すフラグpredFlagLX[xB][yB]が0でない場合(ステップS6203のNOで、ステップS6205のYES)、LXの参照インデックスrefIdxLXを予測ブロックB1のLXの参照インデックスrefIdxLX[xB][yB]と同じ値に設定し(ステップS6206)、本参照インデックス導出処理を終了する。
予測ブロックA1のLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]と予測ブロックB1のLX予測を行うかどうかを示すフラグpredFlagLX[xB][yB]がともに0である場合(ステップS6203のNOで、ステップS6205のNO)、LXの参照インデックスrefIdxLXをデフォルト値の0に設定し(ステップS6207)、本参照インデックス導出処理を終了する。
なお、本実施の形態の実施例2においては、左の辺に近接する予測ブロックA1、上の辺に近接する予測ブロックB1の順序でLX予測を行うかどうかを判定して、最初に見つかったLX予測を行う予測ブロックの参照インデックスを採用するものとして説明したが、予測ブロックB1、予測ブロックA1の順序でLX予測を行うかどうかを判定して、最初に見つかった予測インデックスを採用することもできる。
(実施例3)
次に、本実施の形態の実施例3について説明する。本実施の形態の実施例3においても、実施例1、実施例2と同様に左の辺に近接する予測ブロックA1、及び上の辺に近接する予測ブロックB1の参照インデックスを利用して符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスを導出する。実施例2に対して、予測ブロックA1、予測ブロックB1の順序で、インター予測を行うかどうかを判定して、最初に見つかったインター予測を行う予測ブロックの予測インデックスを採用することでさらに処理量を削減する点が異なる。予測ブロックA1の予測モード(PredMode)がインター予測(MODE_INTER)の場合は予測ブロックA1のLXの参照インデックスを符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値として採用する。その際、予測ブロックA1がLX予測を行わない場合は符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスを0とする。予測ブロックA1の予測モード(PredMode)がインター予測(MODE_INTER)でなく、予測ブロックB1の予測モード(PredMode)がインター予測(MODE_INTER)の場合は予測ブロックB1のLXの参照インデックスを符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値として採用する。その際、予測ブロックB1がLX予測を行わない場合は符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスを0とする。予測ブロックA1、予測ブロックB1の予測モード(PredMode)が共にインター予測(MODE_INTER)でない場合は符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値を0とする。
図17は本実施の形態の実施例3の方法による符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスrefIdxLXの導出処理手順を説明するフローチャートである。まず、符号化情報格納メモリ114または209から左に近接する予測ブロックA1の符号化情報、及び予測ブロックB1の符号化情報を取得する(ステップS6301、ステップS6302)。
続いて、予測ブロックA1が利用でき、予測ブロックA1の予測モード(PredMode)がイントラ予測(MODE_INTRA)の場合(ステップS6303のYES)、即ち、予測ブロックA1の予測モード(PredMode)がインター予測(MODE_INTER)の場合、ステップS6305に進み、予測ブロックA1の予測モード(PredMode)がインター予測(MODE_INTER)でない場合、ステップS6307に進む。
予測ブロックA1のLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]が0でない場合(ステップS6304のYES)、LXの参照インデックスrefIdxLXを予測ブロックA1のLXの参照インデックスrefIdxLX[xA][yA]と同じ値に設定し(ステップS6305)、フラグpredFlagLX[xA][yA]が0である場合(ステップS6304のNO)、LXの参照インデックスrefIdxLXを0に設定し(ステップS6306)、本参照インデックス導出処理を終了する。
一方、ステップS6307では、予測ブロックB1が利用でき、予測ブロックB1の予測モード(PredMode)がイントラ予測(MODE_INTRA)の場合(ステップS6307のYES)、即ち、予測ブロックB1の予測モード(PredMode)がインター予測(MODE_INTER)の場合、ステップS6308に進み、予測ブロックA1の予測モード(PredMode)がインター予測(MODE_INTER)でない場合、ステップS6311に進む。
予測ブロックB1のLX予測を行うかどうかを示すフラグpredFlagLX[xB][yB]が0でない場合(ステップS6309のYES)、LXの参照インデックスrefIdxLXを予測ブロックB1のLXの参照インデックスrefIdxLX[xB][yB]と同じ値に設定し(ステップS6309)、フラグpredFlagLX[xB][yB]が0である場合(ステップS6308のNO)、LXの参照インデックスrefIdxLXを0に設定し(ステップS6310)、本参照インデックス導出処理を終了する。
一方、ステップS6307のNOの場合、LXの参照インデックスrefIdxLXを0に設定し(ステップS6311)、本参照インデックス導出処理を終了する。
なお、本実施の形態の実施例3においては、左の辺に近接する予測ブロックA1、上の辺に近接する予測ブロックB1の順序でインター予測を行うかどうかを判定して、最初に見つかったインター予測を行う予測ブロックの参照インデックスを採用するものとして説明したが、予測ブロックB1、予測ブロックA1の順序でインター予測を行うかどうかを判定して、最初に見つかったインター予測を行う予測ブロックの予測インデックスを採用することもできる。
(実施例4)
次に、本実施の形態の実施例4について説明する。本実施の形態の実施例4においては、左の辺に近接する予測ブロックA1の参照インデックスを利用して符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスを導出する。実施例2に対して、図26のステップS6202、S6205、S6206の処理を省略することでさらに処理量を削減する点が異なる。予測ブロックA1がLX予測(LXは参照インデックスを導出対象のリスト)を行う場合は予測ブロックA1のLXの参照インデックスを符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値として採用し、予測ブロックA1がLX予測を行わない場合は符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスの値をデフォルト値の0とする。
図18は本実施の形態の実施例4の方法による符号化または復号対象の予測ブロックの双予測でのLXの参照インデックスrefIdxLXの導出処理手順を説明するフローチャートである。まず、符号化情報格納メモリ114または209から左に近接する予測ブロックA1の符号化情報を取得する(ステップS6401)。
予測ブロックA1のLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]が0でない場合(ステップS6402のYES)、LXの参照インデックスrefIdxLXを予測ブロックA1のLXの参照インデックスrefIdxLX[xA][yA]と同じ値に設定する(ステップS6403)。
予測ブロックA1のLX予測を行うかどうかを示すフラグpredFlagLX[xA][yA]が0である場合(ステップS6402のNO)、LXの参照インデックスrefIdxLXを0に設定する(ステップS6404)。
なお、本実施の形態の実施例4においては、左の辺に近接する予測ブロックA1の参照インデックスrefIdxLX[xA][yA]を利用してLXの参照インデックスrefIdxLXを導出するものとして説明したが、左の辺に近接する予測ブロックA1の代わりに、上の辺に近接する予測ブロックB1の参照インデックスrefIdxLX[xB][yB]を利用してLXの参照インデックスを導出することもできる。
(実施例5)
次に、本実施の形態の実施例5について説明する。本実施の形態の実施例5においては、L0の参照ピクチャがL1にも含まれる場合、L0の参照ピクチャをL1の参照ピクチャとしても用いるために、L1の参照インデックスをL0の参照インデックスに対応する参照ピクチャを指し示す値に設定し、L0の参照ピクチャがL1には含まれない場合、L1の参照ピクチャはデフォルト値の0に設定する。L0の参照ピクチャをL1の参照ピクチャとしても用いることにより、同一参照によるインター予測を行う。
図19は本実施の形態の実施例5の方法による符号化または復号対象の予測ブロックの双予測でのLX(LXは導出対象の参照リスト)の参照インデックスrefIdxLXの導出処理手順を説明するフローチャートである。
続いて、LY(LYは導出対象とは反対の参照リスト)の参照インデックスrefIdxLYに対応するLYの参照リストRefPicListYに登録されている参照ピクチャRefPicListY[refIdxLY]のPOCを取得する(ステップS6501)。
続いて、LXの参照インデックスiを0に設定する(ステップS6502)。続いて、参照インデックスiがLXの参照インデックスの数に達するまで、ステップS6504の条件判断とステップS6506参照インデックスiの更新を繰り返す(ステップS6503〜S6507)。参照インデックスiに対応するLXの参照リストRefPicListXに登録されているLXの参照ピクチャRefPicListX[i]のPOCがLY(LYは導出対象とは反対の参照リスト)の参照インデックスrefIdxLYに対応するLYの参照リストRefPicListYに登録されている参照ピクチャRefPicListY[refIdxLY]のPOCと同じ値かどうかを判断し、同じ値の場合(ステップS6504のYES)、LXの参照インデックスrefIdxLXを参照インデックスiと同じ値に設定し(ステップS6505)、本導出処理を終了する。異なる値の場合(ステップS6504のNO)、LXの参照インデックスrefIdxLXを参照インデックスiに1を加算して更新する(ステップS6506)。
ステップS6503からS6507までの繰り返し処理を終了し、LXの参照インデックスが設定されていない場合、refIdxLXをデフォルト値の0に設定し、本導出処理を終了する。
(実施例6)
次に、本実施の形態の実施例6について説明する。本実施の形態の実施例6においては、L0の参照ピクチャをL1の参照ピクチャとしても用いる同一参照による双予測を行うかどうかを切り替える。この切り替えにおいてはL0とL1が共に前方向予測を行うスライス場合は、同一参照ピクチャによる双予測を行うために、実施例5と同様の参照ピクチャ導出処理を行い、L0では前方向予測、L1では後方向予測を行うスライスの場合は、前後の参照ピクチャによる双予測を行うために、参照インデックスを0とする。
図20は本実施の形態の実施例6の方法による符号化または復号対象の予測ブロックの双予測でのLX(LXは導出対象の参照リスト)の参照インデックスrefIdxLXの導出処理手順を説明するフローチャートである。図20の参照インデックス導出処理は図19の参照ピクチャ導出処理とは、ステップS6500の条件判断が追加されている点が異なり、それ以外のステップの処理は同じである。そこで、図19の参照ピクチャ導出処理と異なるステップS6500についてのみ説明する。
同一参照ピクチャによる双予測を行わない場合(ステップS6500のNO)、参照インデックスを0に設定して(ステップ6508)、本導出処理を終了する。同一参照ピクチャによる双予測を行う場合(ステップS6500のYES)、ステップS6501以降の図19と同様の処理を行う。
同一参照ピクチャによる双予測を行うかどうかは、同一参照ピクチャによる双予測を行うかどうかを示すフラグsameRefPicFlagを用意し、例えば、L0とL1が共に前方向予測を行うスライス場合は、同一参照ピクチャによる双予測を行うために、フラグsameRefPicFlagを1に設定し、L0では前方向予測、L1では後方向予測を行うスライスの場合は、前後の参照ピクチャによる双予測を行うために、フラグsameRefPicFlagを0に設定する。さらに、同一参照ピクチャによる双予測を行うかどうかを示すフラグsameRefPicFlagを符号化または復号するためのシンタックス要素same_ref_pic_flagをスライスヘッダーに用意して符号化または復号することで符号化側および復号側共に判別することができる。
次に、図1の動画像符号化装置の差分動きベクトル導出部103及び図2の動画像復号装置の動きベクトル導出部204において実施される動きベクトルの予測方法を図面を用いて説明する。動きベクトルの予測方法は、符号化ブロックを構成する予測ブロック単位に、符号化及び復号の処理の何れでも実施される。予測ブロックの予測モードがインター予測(MODE_INTER)で、マージモードでない場合に、符号化の場合、符号化対象の動きベクトルから符号化する差分動きベクトルを算出する時に用いる符号化済みの動きベクトルを利用して予測動きベクトルを導出する際、復号の場合、復号対象の動きベクトルを算出する時に用いる復号済みの動きベクトルを利用して予測動きベクトルを導出する際に実施される。
(符号化における動きベクトルの予測)
動画像符号化装置において、実施の形態に係る差分動きベクトルの導出方法の動作を説明する。動きベクトルの予測方法は、スライス単位で動き補償予測を行う場合、即ちスライスタイプがPスライス(片方向予測スライス)或いはBスライス(両方向予測スライス)の場合で、更に、スライスの中の予測ブロックの予測モードがインター予測(MODE_INTER)で、マージモードでない差分動きベクトルを符号化する予測ブロックに適用される。
図21は、図1の動画像符号化装置の差分動きベクトル導出部103の詳細な構成を示す図である。図21の太枠線で囲まれる部分は差分動きベクトル導出部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の予測動きベクトルインデックスmvpIdxL0を決定し、L0の動きベクトルmvL0の差分動きベクトルmvdL0を算出するとともに、L1の予測動きベクトルリストmvpListL1を構築して、L1の予測動きベクトルmvpL1を選択してL1の予測動きベクトルインデックスmvpIdxL1を決定し、L1の動きベクトルmvL1の差分動きベクトルmvdL1をそれぞれ算出する。なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルmvdL1が含まれる場合で、双予測でのL1の差分動きベクトルmvdL1を符号化しない場合、双予測でのL1の差分動きベクトルmvdL1は(0,0)に設定される。切り替える対象となるインター予測情報として双予測でのL1の予測動きベクトルインデックスmvpIdxL1が含まれる場合で、双予測でのL1の予測動きベクトルインデックスmvpIdxL1を符号化しない場合、双予測でのL1の予測動きベクトルインデックスmvpIdxL1はL0の予測動きベクトルインデックスmvpIdxL0と同じ値に設定される。
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については、図26〜図30のフローチャートを用いて詳しく後述するが、他のスキャン方法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)の値を持つ動きベクトルを予測動きベクトルリスト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に供給する。
なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルmvdL1が含まれる場合で、双予測でのL1の差分動きベクトルmvdL1を符号化しない場合、双予測でのL1の差分動きベクトルmvdL1の符号量を0とする。切り替える対象となるインター予測情報として双予測でのL1の予測動きベクトルインデックスmvpIdxL1が含まれる場合で、双予測でのL1の予測動きベクトルインデックスmvpIdxL1を符号化しない場合、双予測でのL1の予測動きベクトルインデックスmvpIdxL1の符号量を0とする。
予測動きベクトル選択部126は、LXの予測動きベクトルリストmvpListLXに登録された各要素の中で、予測動きベクトルの候補毎の符号量が最小となる予測動きベクトルの候補mvpListLX[i]をLXの予測動きベクトルmvpLXとして選択する。予測動きベクトルリストmvpListLXの中で最小の発生符号量となる予測動きベクトルの候補が複数存在する場合には、予測動きベクトルリストmvpListLXの中のインデックスiが小さい番号で表される予測動きベクトルの候補mvpListLX[i]をLXの最適な予測動きベクトルmvpLXとして選択する。選択された予測動きベクトルmvpLXを動きベクトル減算部127に供給する。さらに、その選択された予測動きベクトルmvpLXに対応する予測動きベクトルリストmvpListLX中のインデックスiをLXの予測動きベクトルインデックスmvpIdxLXとして出力する。
なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の予測動きベクトルインデックスmvpIdxL1が含まれる場合で、双予測でのL1の予測動きベクトルインデックスmvpIdxL1を符号化しない場合、双予測でのL1の予測動きベクトルインデックスmvpIdxL1はL0の予測動きベクトルインデックスmvpIdxL0と同じ値に設定され、出力される。
最後に動きベクトル減算部127は、LXの動きベクトルmvLXから選択されたLXの予測動きベクトルmvpLXを減算することによりLXの差分動きベクトルmvdLXを算出し、差分動きベクトルmvdLXを出力する。
mvdLX = mvLX - mvpLX
なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルmvdL1が含まれる場合で、双予測でのL1の差分動きベクトルmvdL1を符号化しない場合、双予測でのL1の差分動きベクトルmvdL1は(0,0)に設定され、出力される。
(復号における動きベクトルの予測)
上述のシンタックスに基づき、符号化された動画像のビットストリームを復号する動画像復号装置において、本発明に係る動きベクトルの導出方法の動作を説明する。
実施の形態に係る動きベクトルの導出方法が実施される場合、図2の動画像復号装置の動きベクトル導出部204にて処理が行われる。図22は、実施の形態の動画像符号化装置に対応する図2の動画像復号装置の動きベクトル導出部204の詳細な構成を示す図である。図22の太枠線で囲まれる部分は動きベクトル導出部204を示している。更に、その内部の太点線で囲まれる部分は後述する動きベクトルの予測方法の動作部を示しており、対応する動画像符号化装置にも同様に設置され、符号化と復号で矛盾しない同一の判定結果を得られるようにしている。以下、この図を用いて、復号における動きベクトルの予測方法を説明する。
本実施の形態においては、符号化側で説明した理由により、符号化側と同様に復号側でも、復号対象の予測ブロックのサイズに応じて、予測動きベクトルの最終候補数finalNumMVPCandを設定する。動きベクトル導出部204では、復号対象の輝度信号の予測ブロックのサイズが規定したサイズsizePUInterPredInfoCodingL1以下の場合、finalNumMVPCandを後者よりも小さい数に設定し、そうでない場合、finalNumMVPCandを前者よりも大きい数に設定する。本実施の形態においては、規定するサイズsizePUInterPredInfoCodingL1を8x8とし、復号対象の輝度信号の予測ブロックのサイズが規定したサイズsizePUInterPredInfoCodingL1以下の場合は、finalNumMVPCandを1に設定し、それ以外の場合は、finalNumMVPCandを2に設定する。
動きベクトル導出部204は、予測動きベクトル候補生成部221、予測動きベクトル候補登録部222、予測動きベクトル冗長候補削除部223、予測動きベクトル候補数制限部224、予測動きベクトル選択部225及び動きベクトル加算部226を含む。
この動きベクトル導出部204での動きベクトル導出処理は、インター予測で用いる動きベクトルをL0,L1毎にそれぞれ算出する。具体的には符号化対象ブロックの予測モードPredModeがインター予測(MODE_INTER)で、符号化対象ブロックのインター予測モードがL0予測(Pred_L0)の場合、L0の予測動きベクトルリストmvpListL0を構築して、L0の予測動きベクトルインデックスmvpIdxL0が示す予測動きベクトルmvpL0を選択し、L0の差分動きベクトルmvdL0を加算して、L0の動きベクトルmvL0を算出する。符号化対象ブロックのインター予測モードがL1予測(Pred_L1)の場合、L1の予測動きベクトルリストmvpListL1を構築して、L1の予測動きベクトルインデックスmvpIdxL1が示す予測動きベクトルmvpL1を選択し、L1の差分動きベクトルmvdL1を加算して、L1の動きベクトルmvL1を算出する。符号化対象ブロックのインター予測モードが双予測(Pred_BI)の場合、L0予測とL1予測が共に行われ、L0の予測動きベクトルリストmvpListL0を構築して、L0の予測動きベクトルインデックスmvpIdxL0が示すL0の予測動きベクトルmvpL0を選択し、L0の差分動きベクトルmvdL0を加算して、L0の動きベクトルmvL0を算出するとともに、L1の予測動きベクトルリストmvpListL1を構築して、L1の予測動きベクトルインデックスmvpIdxL1が示すL1の予測動きベクトルmvpL1を算出し、L1の差分動きベクトルmvdL1を加算して、L1の動きベクトルmvL1をそれぞれ算出する。なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を復号するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルmvdL1が含まれる場合で、双予測でのL1の差分動きベクトルmvdL1を復号しない場合、第1符号化ビット列復号部202で双予測でのL1の差分動きベクトルmvdL1は(0,0)に設定され、動きベクトル導出部204に供給される。切り替える対象となるインター予測情報として双予測でのL1の予測動きベクトルインデックスmvpIdxL1が含まれる場合で、双予測でのL1の予測動きベクトルインデックスmvpIdxL1を復号しない場合、第1符号化ビット列復号部202で双予測でのL1の予測動きベクトルインデックスmvpIdxL1はL0の予測動きベクトルインデックスmvpIdxL0と同じ値に設定され、動きベクトル導出部204に供給される。
符号化側と同様に、復号側でも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は、図21の符号化側の予測動きベクトル候補生成部121と同一の処理を行う。復号して符号化情報格納メモリ209に記録されていた、復号対象ブロックと同一ピクチャ内の復号対象ブロックと近接する復号済みの予測ブロック及び異なるピクチャ内の復号対象ブロックと同一位置あるいはその近傍の位置に存在する復号済みの予測ブロック等の動きベクトルを符号化情報格納メモリ209から読み出す。符号化情報格納メモリ209から読み出された復号済みの他のブロックの動きベクトルから予測ブロックグループごとに予測動きベクトルの候補mvLXA、mvLXB、mvLXColを生成し、予測動きベクトル候補登録部222に供給する。
これらの予測動きベクトルの候補mvLXA、mvLXB、mvLXColは参照インデックスに応じてスケーリングすることにより算出されることもある。なお、予測動きベクトル候補生成部221は、図21の符号化側の予測動きベクトル候補生成部121と同一の処理を行うので、図21の符号化側の予測動きベクトル候補生成部121で説明した予測動きベクトルを算出するためのスキャン方法1、2、3、4、5の条件判定は予測動きベクトル候補生成部221でも適用できるものとし、ここでは詳細な説明は省略する。
次に、予測動きベクトル候補登録部222は図21の符号化側の予測動きベクトル候補登録部122と同一の処理を行う。算出された予測動きベクトルの候補mvLXA、mvLXB、mvLXColをLXの予測動きベクトルリストmvpListLXに格納する。
次に、予測動きベクトル冗長候補削除部223は、図21の符号化側の予測動きベクトル冗長候補削除部123と同一の処理を行う。LXの予測動きベクトルリストmvpListLXに格納された予測動きベクトルの候補の中から同一の動きベクトルの値をもつものを判定し、同一の動きベクトル値をもつと判定された予測動きベクトルの候補について一つを残してそれ以外を予測動きベクトルリストmvpListLXから削除して、予測動きベクトルの候補が重複しないようにし、予測動きベクトルリストmvpListLXを更新する。
次に、予測動きベクトル候補数制限部224は、図21の符号化側の予測動きベクトル候補数制限部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に供給される。
予測動きベクトル選択部225は、第1符号化ビット列復号部202にて復号されたLXの予測動きベクトルインデックスmvpIdxLXが供給され、供給されたインデックスmvpIdxLXに対応する予測動きベクトルの候補mvpListLX[mvpIdxLX]をLXの予測動きベクトルmvpLXとして予測動きベクトルリストmvpListLXから取り出す。供給された予測動きベクトルの候補を予測動きベクトルmvpLXとして動きベクトル加算部226に供給する。
最後に動きベクトル加算部226は、第1符号化ビット列復号部202にて復号されて供給されるLXの差分動きベクトルmvdLXとLXの予測動きベクトルmvpLXを加算することによりLXの動きベクトルmvLXを算出し、動きベクトルmvLXを出力する。
mvLX = mvpLX + mvdLX
なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を復号するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルmvdL1が含まれる場合で、双予測でのL1の差分動きベクトルmvdL1を復号しない場合、第1符号化ビット列復号部202で双予測でのL1の差分動きベクトルmvdL1は(0,0)に設定され、動きベクトル導出部204に供給されるので、L1の動きベクトルmvL1はL1の予測動きベクトルmvpL1の値と同じになる。
以上のようにして、予測ブロック毎にLXの動きベクトルmvLXが算出される。この動きベクトルを使用して動き補償により予測画像信号が生成され、復号された予測残差信号と加算されることで復号画像信号が生成される。
次に、動画像符号化装置の差分動きベクトル導出部103、動画像復号装置の動きベクトル導出部204の処理手順について、それぞれ図23、図24のフローチャートを用いて説明する。図23は動画像符号化装置による差分動きベクトル算出処理手順を示すフローチャートであり、図24は動画像復号装置による動きベクトル算出処理手順を示すフローチャートである。
図23を参照して符号化側の差分動きベクトル算出処理手順を説明する。符号化側では、まず、差分動きベクトル導出部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の詳細な処理手順については図25のフローチャートを用いて後述する。
続いて、予測動きベクトル候補符号量算出部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
なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を符号化するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルmvdL1が含まれる場合で、双予測でのL1の差分動きベクトルmvdL1を符号化しない場合、双予測でのL1の差分動きベクトルmvdL1は(0,0)に設定される。
次に、図24を参照して復号側の動きベクトル算出処理手順を説明する。復号側では、動きベクトル導出部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の動きベクトルmvdLXを算出する場合(S202のYES)、LXの予測動きベクトルの候補を算出してLXの予測動きベクトルリストmvpListLXを構築する(S203)。動きベクトル導出部204の中の予測動きベクトル候補生成部221で複数の予測動きベクトルの候補を算出し、予測動きベクトル候補登録部222で予測動きベクトルリストmvpListLXに算出した予測動きベクトルの候補を追加し、予測動きベクトル冗長候補削除部223で不要な予測動きベクトルの候補を削除し、予測動きベクトル候補数制限部224で予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXが設定され、予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを規定された最終候補数finalNumMVPCandに制限することにより、予測動きベクトルリストmvpListLXを構築する。ステップS203の詳細な処理手順については図25のフローチャートを用いて後述する。
続いて、予測動きベクトル選択部225で予測動きベクトルリストmvpListLXから第1符号化ビット列復号部202にて復号された予測動きベクトルのインデックスmvpIdxLXに対応する予測動きベクトルの候補mvpListLX[mvpIdxLX]を選択された予測動きベクトルmvpLXとして取り出す(S204)。ただし、最大候補数finalNumCandLXが1の場合、予測動きベクトルリストmvpListLXに登録されている唯一の予測動きベクトルの候補mvpListLX[0]を選択された予測動きベクトルmvpLXとして取り出す。
続いて、動きベクトル加算部226で第1符号化ビット列復号部202にて復号されて供給されるLXの差分動きベクトルmvdLXとLXの予測動きベクトルmvpLXを加算することによりLXの動きベクトルmvLXを算出する(図24のS205)。
mvLX = mvpLX + mvdLX
なお、本実施の形態においては、インター予測モードが双予測において、スライス毎、または符号化対象の予測ブロックのサイズに応じて、L1予測のインター予測情報を復号するかどうかを切り替える。切り替える対象となるインター予測情報として双予測でのL1の差分動きベクトルmvdL1が含まれる場合で、双予測でのL1の差分動きベクトルmvdL1を復号しない場合、第1符号化ビット列復号部202で双予測でのL1の差分動きベクトルmvdL1は(0,0)に設定され、動きベクトル導出部204に供給されるので、L1の動きベクトルmvL1はL1の予測動きベクトルmvpL1の値と同じになる。
次に、図23のS103、及び図24のS203で共通の予測動きベクトルの候補の導出及び予測動きベクトルリスト構築処理手順を図25のフローチャートを用いて詳細に説明する。
(動きベクトルの予測方法)
図25は動画像符号化装置の差分動きベクトル導出部103及び動画像復号装置の動きベクトル導出部204とで共通する機能を有する予測動きベクトル候補生成部121及び221、予測動きベクトル候補登録部122及び222、ならびに予測動きベクトル冗長候補削除部123及び223、予測動きベクトル候補数制限部124及び224の処理手順を表すフローチャートである。
予測動きベクトル候補生成部121及び221は左側に近接する予測ブロックからの予測動きベクトルの候補を導出し、左側に近接する予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXA、及び動きベクトルmvLXA、参照インデックスrefIdxA、リストListAを導出する(図25のS301)。なお、L0のときXは0、L1のときXは1とする(以下同様)。続いて、予測動きベクトル候補生成部121及び221は上側に近接する予測ブロックからの予測動きベクトルの候補を導出し、上側に近接する予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXB、及び動きベクトルmvLXB、参照インデックスrefIdxB、リストListBを導出する(図25のS302)。図25のステップS301とS302の処理は参照する近接ブロックの位置と数が異なる点以外は共通であり、予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXN、及び動きベクトルmvLXN、参照インデックスrefIdxN、ListN(NはAまたはB、以下同様)を導出する共通の導出処理手順を図26〜図30のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル候補生成部121及び221は異なる時間のピクチャの予測ブロックからの予測動きベクトルの候補を導出し、異なる時間のピクチャの予測ブロックの予測動きベクトル候補が利用できるかどうかを示すフラグavailableFlagLXCol、及び動きベクトルmvLXCol、参照インデックスrefIdxCol、リストListColを導出する(図25のS303)。このステップS303の導出処理手順を図31〜図37のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル候補登録部122及び222は予測動きベクトルリストmvpListLXを作成し、LXのそれぞれの予測ベクトルの候補mvLXA, mvLXB, mvLXColを追加する(図25のS304)。このステップS304の登録処理手順を図38のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル冗長候補削除部123及び223は予測動きベクトルリストmvpListLX内で、複数の動きベクトルの候補が同じ値または近い値を持っている場合に、冗長な動きベクトルの候補と判断し、最も小さい順序、即ち最も小さいインデックスiの動きベクトルの候補を除いて冗長な動きベクトルの候補を取り除く(図25のS305)。このステップS305の削除処理手順を図39のフローチャートを用いて後ほど詳細に説明する。
続いて、予測動きベクトル候補数制限部124及び224は予測動きベクトルリストmvpListLX内に追加された要素の数をカウントし、その数がLXの予測動きベクトル候補数numMVPCandLXに設定され、予測動きベクトルリストmvpListLXに登録されているLXの予測動きベクトル候補数numMVPCandLXを規定された最終候補数finalNumMVPCandに制限する。(図25のS306)。このステップS306の制限処理手順を図40のフローチャートを用いて後ほど詳細に説明する。
図25の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からそれぞれ予測動きベクトルの候補を選出する。
次に、図25のS301およびS302の処理手順である左側および上側に近接する予測ブロックグループNからの予測動きベクトルの候補の導出方法について説明する。図26は前述のスキャン方法1による図25のS301およびS302の予測動きベクトル候補導出処理手順を示すフローチャートである。添え字Xには参照リストを表す0若しくは1、Nには近接する予測ブロックグループの領域を表すA(左側)またはB(上側)が入る。
左側の予測ブロックから予測動きベクトルの候補を導出するには(図25のS301)、図26でNがAとして符号化または復号対象の予測ブロックの左側に近接するA0、A1の予測ブロックから予測動きベクトルの候補を、上側の予測ブロックから予測動きベクトルの候補を導出するには(図25のS302)、図26で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)で同じ参照ピクチャの動きベクトルを持つ予測ブロックを探してその動きベクトルを予測動きベクトル候補とする。
図27は図26のステップ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の処理が終わるまで繰り返す。
続いて、図26のフローチャートに戻り、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)で異なる参照ピクチャの動きベクトルを持つ予測ブロックを探してその動きベクトルを予測動きベクトル候補とする。
図28は図26のステップ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の空間予測動きベクトル候補のスケーリング演算処理手順を図29及び図30を用いて説明する。
図29は図28のステップ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のスケーリング演算を整数精度の演算で行う場合の例を図30に示す。図30のステップS1604〜S1606の処理が、図29のステップS1603の処理に相当する。
まず、図29のフローチャートと同様に、ピクチャ間距離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 ) )
次に、図25のS303の異なる時間のピクチャの予測ブロックから予測動きベクトルの候補の導出方法について詳細に説明する。図31は図25のステップS303の予測動きベクトル候補導出処理手順を説明するフローチャートである。
まず、slice_typeとcollocated_from_l0_flagにより、異なる時間のピクチャcolPicを算出する(図31のS2101)。
図32は図31のステップS2101の異なる時間のピクチャcolPicの導出処理手順を説明するフローチャートである。slice_typeがBで、前述のフラグcollocated_from_l0_flagが0の場合(図32のS2201のYES、S2202のYES)、RefPicList1[0]、すなわち参照リストL1の参照インデックスが0のピクチャが異なる時間のピクチャcolPicとなる(図32のS2203)。そうでない場合、すなわち前述のフラグcollocated_from_l0_flagが1の場合(図32のS2201のNO、S2202のNO、S2204のNO)、RefPicList0[0]、すなわち参照リストL0の参照インデックスが0のピクチャが異なる時間のピクチャcolPicとなる(図32のS2205)。
次に、図31のフローチャートに戻り、異なる時間の予測ブロックcolPUを算出し、符号化情報を取得する(図31のS2102)。
図33は図31のステップS2102の異なる時間のピクチャcolPicの予測ブロックcolPUの導出処理手順を説明するフローチャートである。
まず、異なる時間のピクチャcolPic内で処理対象の予測ブロックと同一位置の右下(外側)に位置する予測ブロックを異なる時間の予測ブロックcolPUに設定する(図33のS2301)。この予測ブロックは図9の予測ブロックT0に相当する。
次に、異なる時間の予測ブロックcolPUの符号化情報を取得する(図33のS2302)。異なる時間の予測ブロックcolPUのPredModeがMODE_INTRAか、利用できない場合(図33のS2303、S2304)、異なる時間のピクチャcolPic内で処理対象の予測ブロックと同一位置の中央左上に位置する予測ブロックを異なる時間の予測ブロックcolPUに再設定する(図33のS2305)。この予測ブロックは図9の予測ブロックT1に相当する。
次に、図31のフローチャートに戻り、符号化または復号対象の予測ブロックと同位置の他ピクチャの予測ブロックから算出されるLXの予測動きベクトルmvLXColと予測ブロックグループColの参照リストLXの符号化情報が有効か否かを示すフラグavailableFlagLXColを算出する(図31のS2103)。
図34は図31のステップS2103のインター予測情報の導出処理を説明するフローチャートである。
異なる時間の予測ブロックcolPUのPredModeがMODE_INTRAか、利用できない場合(図34のS2401のNO、S2402のNO)、availableFlagLXColを0、mvLXColを(0,0)とし(図34のS2403、S2404)、処理を終了する。
予測ブロックcolPUが利用できてPredModeがMODE_INTRAでない場合(図34のS2401のYES、S2402のYES)、以下の手順でmvColとrefIdxColを算出する。
予測ブロックcolPUのL0予測が利用されているかどうかを示すフラグPredFlagL0[xPCol][yPCol]が0の場合(図34のS2405のYES)、予測ブロックcolPUの予測モードはPred_L1であるので、動きベクトルmvColが予測ブロックcolPUのL1の動きベクトルであるMvL1[xPCol][yPCol]と同じ値に設定され(図34のS2406)、参照インデックスrefIdxColがL1の参照インデックスRefIdxL1[xPCol][yPCol]と同じ値に設定され(図34のS2407)、リストListColがL1に設定される(図34のS2408)。
一方、予測ブロックcolPUのL0予測フラグPredFlagL0[xPCol][yPCol]が0でない場合(図34のS2405のNO)、予測ブロックcolPUのL1予測フラグPredFlagL1[xPCol][yPCol]が0かどうかを判定する。予測ブロックcolPUのL1予測フラグPredFlagL1[xPCol][yPCol]が0の場合(図34のS2409のYES)、動きベクトルmvColが予測ブロックcolPUのL0の動きベクトルであるMvL0[xPCol][yPCol]と同じ値に設定され(図34のS2410)、参照インデックスrefIdxColがL0の参照インデックスRefIdxL0[xPCol][yPCol] と同じ値に設定され(図34のS2411)、リストListColがL0に設定される(図34のS2412)。
予測ブロックcolPUのL0予測フラグPredFlagL0[xPCol][yPCol]と予測ブロックcolPUのL1予測フラグPredFlagL1[xPCol][yPCol]が共に0でない場合(図34のS2405のNO,S2409のNO)、予測ブロックcolPUのインター予測モードは双予測(Pred_BI)であるので、L0、L1の2つの動きベクトルから、一方を選択する(図34のS2413)。
図35は予測ブロック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)。
図34に戻り、予測ブロックcolPUからインター予測情報が取得できたらavailableFlagLXColを1とする(図34のS2414)。
次に、図31のフローチャートに戻り、availableFlagLXColが1の場合(図31のS2104のYES)、必要に応じてmvLXColをスケーリングする(図31のS2105)。この動きベクトルmvLXColのスケーリング演算処理手順を図36及び図37を用いて説明する。
図36は図31のステップ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のスケーリング演算を整数精度の演算で行う場合の例を図37に示す。図37のステップS2605〜S2607の処理が、図36のステップS2604の処理に相当する。
まず、図36のフローチャートと同様に、ピクチャ間距離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 ) )
図25のS304の予測動きベクトルの候補を予測動きベクトルリストに追加する手順について詳細に説明する。
図25のS301、S302、及びS303にて算出されたLXのそれぞれの予測動きベクトルの候補mvLXA, mvLXB, mvLXColをLXの予測動きベクトルリストmvpListLXに追加する(S304)。本発明の実施の形態では、優先順位をつけて、優先順位の高いものからLXの予測動きベクトルリストmvpListLXに予測動きベクトルの候補mvLXA, mvLXB, mvLXColを登録することで、優先順位の高い要素を予測動きベクトルリストの前方に配置する。図25のS306で予測動きベクトルリストの中の要素数を制限する際に、予測動きベクトルリストの後方に配置された要素を予測動きベクトルリストから外すことで、優先順位の高い要素を残す。
予測動きベクトルリストmvpListLXはリスト構造を成し、予測動きベクトルリスト内部の所在を示すインデックスiで管理され、インデックスiに対応する予測動きベクトルの候補を要素として格納する記憶領域が設けられている。インデックスiの数字は0から開始され、予測動きベクトルリストmvpListLXの記憶領域に、予測動きベクトルの候補が格納される。以降の処理では、予測動きベクトルリストmvpListLXに登録されたインデックスiの要素である予測動きベクトルの候補は、mvpListLX[i]で表す。
次に、図25のS304のLXの予測動きベクトルリストmvpListLXへのLXの予測動きベクトルの候補mvLXA, mvLXB, mvLXColの登録処理方法について詳細に説明する。図38は図25のステップ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)、予測動きベクトルリストへの登録処理を終了する。
次に、図25のS305の予測動きベクトルリスト中の冗長な予測動きベクトルの候補の削除方法について詳細に説明する。図39は図25の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つに制限されるからである。
予測ブロックのサイズが小さい場合、単位面積当たりの予測ブロックの数が多くなるので、冗長な予測動きベクトルの候補を削除する処理の回数も多くなってしまう。
次に、図25のS306の予測動きベクトルリスト中の動きベクトルの候補数の制限方法について詳細に説明する。図40は図25の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と同じ値を設定して(S5105)、本制限処理を終了する。
LXの予測動きベクトル候補数numMVPCandLXが最終候補数finalNumMVPCandと等しい場合(S5103のNO、S5107のNO)、制限処理を施さずに本制限処理を終了する。
本実施の形態においては、最終候補数finalNumMVPCandを規定している。なぜなら、予測動きベクトルリストに登録される予測動きベクトルの候補数が予測動きベクトルリストの構築状態に応じて変動すると、復号側では予測動きベクトルリストを構築してからでないと、予測動きベクトルインデックスをエントロピー復号することができないからである。さらに、エントロピー復号が異なる時間のピクチャの予測ブロックから導出された予測動きベクトル候補mvLXColを含む予測動きベクトルリストの構築状態に依存すると、別のピクチャの符号化ビット列の復号時にエラーが発生した際に現在のピクチャの符号化ビット列もその影響を受けて正常にエントロピー復号を続けることができない問題がある。最終候補数finalNumMVPCandを固定した数に規定すると、予測動きベクトルリストの構築と独立して、予測動きベクトルインデックスをエントロピー復号することができるとともに、別のピクチャの符号化ビット列の復号時にエラーが発生してもその影響を受けずに現在のピクチャの符号化ビット列のエントロピー復号を続けることができる。
以上述べた実施の形態の動画像符号化装置が出力する動画像の符号化ストリームは、実施の形態で用いられた符号化方法に応じて復号することができるように特定のデータフォーマットを有しており、動画像符号化装置に対応する動画像復号装置がこの特定のデータフォーマットの符号化ストリームを復号することができる。
動画像符号化装置と動画像復号装置の間で符号化ストリームをやりとりするために、有線または無線のネットワークが用いられる場合、符号化ストリームを通信路の伝送形態に適したデータ形式に変換して伝送してもよい。その場合、動画像符号化装置が出力する符号化ストリームを通信路の伝送形態に適したデータ形式の符号化データに変換してネットワークに送信する動画像送信装置と、ネットワークから符号化データを受信して符号化ストリームに復元して動画像復号装置に供給する動画像受信装置とが設けられる。
動画像送信装置は、動画像符号化装置が出力する符号化ストリームをバッファするメモリと、符号化ストリームをパケット化するパケット処理部と、パケット化された符号化データをネットワークを介して送信する送信部とを含む。動画像受信装置は、パケット化された符号化データをネットワークを介して受信する受信部と、受信された符号化データをバッファするメモリと、符号化データをパケット処理して符号化ストリームを生成し、動画像復号装置に提供するパケット処理部とを含む。
以上の符号化及び復号に関する処理は、ハードウェアを用いた伝送、蓄積、受信装置として実現することができるのは勿論のこと、ROM(リード・オンリ・メモリ)やフラッシュメモリ等に記憶されているファームウェアや、コンピュータ等のソフトウェアによっても実現することができる。そのファームウェアプログラム、ソフトウェアプログラムをコンピュータ等で読み取り可能な記録媒体に記録して提供することも、有線あるいは無線のネットワークを通してサーバから提供することも、地上波あるいは衛星ディジタル放送のデータ放送として提供することも可能である。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。