以下、本発明の実施の形態について図面を参照して説明する。
(実施の形態1)
図1は、実施の形態1の動画像符号化装置の構成を示すブロック図である。実施の形態1の動画像符号化装置は、仮領域分割部101、第1動きベクトル検出部102、本領域分割・動き補償部103、直交変換・量子化部104、可変長符号化部105、逆量子化・逆直交変換部106、メモリ107、減算部108、加算部109、および第2動きベクトル検出部110を備える。
仮領域分割部101は、例えば16×16マクロブロックなどの符号化対象となっている画素群について、任意の境界で領域を分割する。この領域分割は動きベクトル検出のための符号化側の独自手法であり、どのような境界で領域分割しても構わないが、動き補償予測の効率が向上する境界で領域分割するのが望ましい。ここでは、最も単純な仮領域分割として、水平方向又は垂直方向にのみマクロブロックを2分割する場合を例として挙げて説明する。
図3(a)〜(c)は、マクロブロックを水平方向に2分割するパターンを説明する図である。図3(a)は、上から4画素目の水平境界でマクロブロックを16×4の上側領域と16×12の下側領域に2分割したパターンであり、図3(b)は、上から8画素目の水平境界でマクロブロックを16×8の上側領域と16×8の下側領域に2分割したパターンであり、図3(c)は、上から12画素目の水平境界でマクロブロックを16×12の上側領域と16×4の下側領域に2分割したパターンである。
図4(a)〜(c)は、マクロブロックを垂直方向に2分割するパターンを説明する図である。図4(a)は、左から4画素目の垂直境界でマクロブロックを4×16の左側領域と12×16の右側領域に2分割したパターンであり、図4(b)は、左から8画素目の垂直境界でマクロブロックを8×16の左側領域と8×16の右側領域に2分割したパターンであり、図4(c)は、左から12画素目の垂直境界でマクロブロックを12×16の左側領域と4×16の右側領域に2分割したパターンである。
仮領域分割部101により決められるマクロブロックの境界を「仮境界」(provisional boundary)と呼び、仮境界により分割されたマクロブロック内の各領域を「仮領域」(provisional region)と呼ぶ。
ここでは、水平方向または垂直方向に2分割するパターンを3つ示したが、水平境界または垂直境界の候補位置を増やして4以上の分割パターンを設けてもよい。また、斜め方向の境界で分割したり、折れ曲がった境界で分割してもよい。
仮領域分割部101は、符号化対象となる原画像信号について、各水平境界に関する水平アクティビティ、または各垂直境界に関する垂直アクティビティを計算する。後述のように、折れ曲がった境界でマクロブロックを分割した場合は、折れ曲がった境界に沿ってアクティビティを計算する。
画像信号のアクティビティとは、画素に対して何らかの演算を施した値のことである。マクロブロックを領域分割する境界に関するアクティビティとして、たとえば、境界をまたぐ2画素間の絶対差分和(SAD)を用いることができる。例えば、マクロブロック内のX座標をi、Y座標をjとして、点(i,j)における画素値をAi,jとすると、上からj画素目の水平境界jの水平アクティビティは以下のように定義される。
水平アクティビティ=Σi=0 15|Ai,j−Ai,jー1|
ここで、Σi=0 15は、添え字iを0から15まで動かした場合の総和である。
ただし、アクティビティは絶対差分和(SAD)でなくてもよい。以下に示すような絶対二乗和(SSD)であってもよい。
水平アクティビティ=Σi=0 15(Ai,j−Ai,jー1)2
同様に、マクロブロックの左からi画素目の垂直境界iの垂直アクティビティは以下のように定義される。
垂直アクティビティ=Σj=0 15|Ai,j−Aiー1,j|
アクティビティは物体のエッジなどで大きい値になる。仮領域分割部101は、アクティビティ値が最も大きい境界でマクロブロックの領域を仮分割する。
仮領域分割部101により分割された各仮領域について動きベクトルを検出する。仮領域の動きベクトルの検出は、第1動きベクトル検出部102または第2動きベクトル検出部110によって行われる。
図5は、マクロブロックの仮領域毎に検出される動きベクトルを示す図である。仮領域分割部101が、マクロブロックを図3(a)のように上から4画素目の水平境界で仮分割した場合を例に取ると、図5に示すように、16×4の上側領域と16×12の下側領域のそれぞれについて動きベクトルを検出する。
図6(a)、(b)は、符号化対象ブロックの仮領域の分割方向と、第2動きベクトル検出部110が行う動き検出に用いられる隣接ブロックの関係を説明する図である。図6(a)、(b)はそれぞれ、水平方向、垂直方向に分割された符号化対象のマクロブロックとその周囲に隣接する3つの符号化済みのマクロブロックMBA、MBB、MBCを示す。
図6(a)に示すように符号化対象のマクロブロックが水平方向に分割される場合、水平境界より上側の仮領域は、2つの周囲マクロブロックMBA、MBBに隣接するが、水平境界より下側の仮領域は、1つの周囲マクロブロックMBAにしか隣接しない。図6(b)に示すように符号化対象のマクロブロックが垂直方向に分割される場合、垂直境界より左側の仮領域は、2つの周囲マクロブロックMBA、MBBに隣接するが、垂直境界より右側の仮領域は、1つの周囲マクロブロックMBBにしか隣接しない。
符号化対象ブロックの分割された仮領域のうち、符号化済みの周囲マクロブロックに隣接している部分が最も少ない仮領域(「第1仮領域」と呼ぶ)については第1動きベクトル検出部102が従来の動き検出を行い、それ以外の仮領域(2分割の場合は、「第2仮領域」と呼ぶ)については第2動きベクトル検出部110が周囲マクロブロックの動き情報を利用して動きベクトルを検出する。
図6(a)の水平分割の場合であれば、上側の仮領域、図6(b)の垂直分割の場合であれば、左側の仮領域については、第2動きベクトル検出部110が周囲マクロブロックの動き情報から動きベクトルを求める。もう一方の仮領域、すなわち、図6(a)の水平分割の場合であれば、下側の仮領域、図6(b)の垂直分割の場合であれば、右側の仮領域については、第1動きベクトル検出部102が通常の方法で動きベクトルを検出する。
第1動きベクトル検出部102は、ブロックマッチング法を用いて動きベクトルを検出する。動きベクトル検出のアルゴリズムは指定した探索領域内の候補ベクトルをすべて評価するフルサーチの他、さまざまな動き特性から探索する候補ベクトルを絞り込んで探索する高速サーチなどいろいろな方法が存在する。仮領域分割部101で分割したブロック毎に動きベクトルを検出することができるものであれば、どのような動きベクトル検出アルゴリズムを用いることも可能である。
第2動きベクトル検出部110の動作をより詳しく説明する。第2動きベクトル検出部110は、符号化済みの周囲マクロブロックの動き情報を利用することで第2動きベクトルを検出する。第2動きベクトル検出部110の動作を説明する前に、図7(a)〜(c)を参照して、従来のマクロブロック単位の動き検出の方法を説明し、その後、図8(a)、(b)を参照して、本実施の形態の第2動きベクトル検出部110の動作を説明する。
図7(a)〜(c)は、従来のMPEG−4 AVC/H.264におけるマクロブロック単位の動き検出の方法を説明する図である。
図7(b)は符号化対象ピクチャであり、符号化対象となる16×16画素で構成されるマクロブロックを太い点線で示し、符号化対象ブロックの周囲にある4つの符号化済みブロックを細い点線で示す。図7(b)に示すピクチャは時刻t1において表示されるものであり、時刻t1よりも表示時刻が前である時刻t0(<t1)におけるピクチャを図7(a)または図7(c)に示す。これら2つのピクチャは、図7(b)の符号化対象ピクチャの動き予測の参照先ピクチャとして使用される。図7(a)〜(c)に示すように、時刻t0から時刻t1にかけて、ピクチャ内の点描の円は、左から右に平行移動し、背景の縞模様は下から上に移動している。
図7(a)は、16×16画素のマクロブロックで動き検出を行った場合を示す。図7(b)に示す符号化対象ブロック内で点描の円の占める割合が大きいため、図7(a)の太い点線枠で示される符号化対象ブロックから太い実線枠で示される位置への移動を示す白抜き矢印が動きベクトルとして検出される。この動きベクトルを用いて動き補償を行うと、図7(a)において斜線で示す部分が画像間の予測誤差となる。
図7(c)は、マクロブロック内を16×8画素の領域に分割し、それぞれについて動き検出を行った場合の一例である。下側の領域は点描の円の占める割合が大きいため、図7(a)の場合と同様の動き検出が行われ、左向きの白抜き矢印が動きベクトルとして検出される。一方、上側の領域は縞模様の背景の動きを捉えることになり、符号化対象ブロックの真上の位置への移動を示す上向きの白抜き矢印が動きベクトルとして検出される。これら二つの動きベクトルを用いて動き補償を行うと、図7(c)において斜線で示す部分が画像間の予測誤差となる。
従来のMPEG−4 AVC/H.264で規定されるマクロブロックのタイプに応じて動き検出を行うと、16×16画素単位の場合では予測誤差の発生箇所が多くなるため、符号化効率が低下する。一方、16×8画素に上下に分割した場合は、予測画素の発生箇所が16×16画素単位に比べて少なく、符号化効率が向上するが、上下の領域毎に動きベクトル等の動き情報を符号化して伝送する必要がある。
本実施の形態では、このように符号化対象のマクロブロック内を分割する場合は、分割領域の動きは、分割の境界よりも上側または左側に隣接する符号化済みの周囲マクロブロックの動きに類似すると仮定して、周囲マクロブロックの動き情報を参照する。
図8(a)、(b)は、本実施の形態の第2動きベクトル検出部110による動き検出の方法を説明する図である。
図8(b)は時刻t1の符号化対象ピクチャであり、符号化対象となる16×16画素で構成されるマクロブロックを太い点線で示し、符号化対象ブロックの周囲にある4つの符号化済みブロックを細い点線で示す。図8(a)は時刻t0におけるピクチャであり、図8(b)の符号化対象ピクチャの動き予測の参照先ピクチャとして使用される。図7(a)および図7(b)で示したのと同様に、時刻t0から時刻t1にかけて、ピクチャ内の点描の円は、左から右に平行移動し、背景の縞模様は下から上に移動している。
図8(a)は、符号化対象ブロック内を領域分割し、分割された各領域の動き検出を行う様子を示す。符号化対象となるマクロブロックが水平に分割される場合、水平分割の境界の上側にある領域は境界の下側にある領域よりも、符号化対象ブロックの上または左に隣接している符号化済みのマクロブロックと同じ動きを示すことが多い。そのため、上側領域が真上の周囲マクロブロックの動きと同じになると仮定し、図8(a)で黒塗り矢印で示される真上のマクロブロックの動きベクトルを使用して動き補償を行う。この動きベクトルは周囲マクロブロックにより得られるものであり、符号化・伝送を行う必要がないから、符号量を抑制することができる。
第2動きベクトル検出部110は、このように符号化対象のマクロブロックに隣接する符号化済みの周囲マクロブロックの動き情報を利用して、符号化対象のマクロブロックの分割領域の動きベクトルを求める。隣接する周囲マクロブロックのいずれの動きベクトルを利用するかは、符号化対象のマクロブロックの分割する方向にもとづいて決定する。
図9(a)、(b)は、マクロブロックを分割する方向にもとづいて、動きベクトルを参照する周囲マクロブロックを選択する方法を説明する図である。
図9(a)に示すように、符号化対象のマクロブロックが水平方向に分割され、上側領域について第2動きベクトル検出部110が第2動きベクトルMV2を求め、下側領域について第1動きベクトル検出部102が第1動きベクトルMV1を求める。このとき、上側領域は真上に隣接するマクロブロックMBBと類似する動きを示すことが推測されるので、第2動きベクトル検出部110は、動き情報として真上のマクロブロックMBBの動きベクトルを参照する。
符号化済みのマクロブロックの各種情報は、メモリ107に蓄積されており、第2動きベクトル検出部110は、符号化対象のマクロブロックの位置に対応するアドレスに基づいて、メモリ107から参照すべき周囲マクロブロックMBBの情報を読み出すことができる。第2動きベクトル検出部110は、読み出された周囲マクロブロックMBBの動きベクトルMVBを符号化対象のマクロブロックの上側領域に対する第2動きベクトルMV2とする。
ここで、周囲マクロブロックMBBのマクロブロックタイプが画面内符号化(イントラ)タイプである場合には動きベクトルが存在しないため、参照する周囲マクロブロックとして左側のマクロブロックMBAまたは右斜め上のマクロブロックMBCを代わりに用いて、マクロブロックMBA、MBCの動きベクトルを符号化対象のマクロブロックの上側領域に対する第2動きベクトルMV2としてもよい。
図9(b)に示すように、符号化対象のマクロブロックが垂直方向に分割され、左側領域について第2動きベクトル検出部110が動きベクトルを求める場合、左側領域は左に隣接するマクロブロックMBAと類似する動きを示すことが推測されるので、第2動きベクトル検出部110は、動き情報として左のマクロブロックMBAの動きベクトルをメモリ107から読み出して参照する。第2動きベクトル検出部110は、読み出された周囲マクロブロックMBAの動きベクトルMVAを符号化対象のマクロブロックの左側領域に対する第2動きベクトルMV2とする。
図10は、動きベクトルを参照する周囲マクロブロックを選択する別の方法を説明する図である。図9(a)では、符号化対象のマクロブロックの上側領域に隣接する部分が多い真上のマクロブロックMBBを選択して、そのマクロブロックMBBの動きベクトルMVBを当該上側領域に対する第2動きベクトルMV2とした。図10では、符号化済みの周囲マクロブロックの選択範囲を広げ、隣接する4つの周囲マクロブロックMBA、MBB、MBC、MBDの動きベクトルMVA、MVB、MVC、MVDを当該上側領域に対する第2動きベクトルMV2の候補とする。第2動きベクトル検出部110は、これらの4つの動きベクトルの中のいずれか一つを当該上側領域に対する第2動きベクトルMV2とする。
図1に戻り、本領域分割・動き補償部103は、第1動きベクトル検出部102および第2動きベクトル検出部110で検出された各仮領域の動きベクトルを用いて、メモリ107に蓄積されている参照画像から動き補償予測を行う。本領域分割・動き補償部103は、後述の手順で、各仮領域の動きベクトルから生成される複数の動き補償予測画像を合成して合成動き補償予測画像を生成する。
図11(a)、(b)は、仮領域毎に検出された動きベクトルから生成される動き補償予測画像を示す。図12(a)〜(c)は、各仮領域の動きベクトルから生成される動き補償予測画像を合成して得られる合成動き補償予測画像を示す。
仮領域分割部101が、マクロブロックを図3(a)に示すように上から4画素目の水平境界で仮分割した場合を例に説明する。動きベクトル検出部102は、図5に示すように、16×4の上側領域と16×12の下側領域のそれぞれについて動きベクトルを検出した結果、符号化対象マクロブロックには2つの動きベクトル(第1、第2動きベクトル)が存在する。本領域分割・動き補償部103は、図11(a)、(b)に示すように、動きベクトル検出部102により検出された動きベクトル毎に、参照画像を用いて、仮に当該マクロブロックの大きさ(ここでは16×16)で動き補償予測した場合の画像を生成する。図11(a)は、16×4の上側領域の第1動きベクトルを用いて生成された第1動き補償予測画像であり、図11(b)は、16×12の下側領域の第2動きベクトルを用いて生成された第2動き補償予測画像である。
本領域分割・動き補償部103は、図11(a)、(b)に示す第1、第2動き補償予測画像を、図12に示す(a)〜(c)のいずれかのパターンに合成して合成動き補償予測画像を生成する。第1、第2動き補償予測画像は符号化対象マクロブロックと同一の大きさであり、合成動き補償予測画像を生成するために、ある境界で分割される。本領域分割・動き補償部103により決められるマクロブロックの境界を「本境界」(actual boundary)と呼び、本境界により分割されたマクロブロックの領域を「本領域」(actual region)と呼び、仮領域分割部101により決められる「仮境界」、「仮領域」と区別する。
図12(a)〜(c)は、本領域分割・動き補償部103が決定する本境界の候補を示したものである。図12(a)は上から4画素目の水平境界を本境界とし、図12(b)は上から8画素目の水平境界を本境界とし、図12(c)は上から12画素目の水平境界を本境界として、それぞれ、本境界より上側の本領域は第1動き補償予測画像の対応する領域、本境界より下側の本領域は第2動き補償予測画像の対応する領域で表したものである。
本領域分割・動き補償部103は、エッジ強度などを表す評価値にもとづいて、本境界を決定し、決定された本境界で第1、第2動き補償予測画像を分割して合成する。
図13(a)〜(c)は、各仮領域の動きベクトルから生成される動き補償予測画像を合成して合成動き補償予測画像を生成する方法を説明する図である。本領域分割・動き補償部103は、本境界決定後、図13(a)の第1動きベクトルに対応する第1動き補償予測画像と図13(b)の第2動きベクトルに対応する第2動き補償予測画像を用いて、本境界より上の領域を第1動き補償予測画像として動き補償予測し、本境界より下の領域を第2動き補償予測画像として動き補償予測する。この例では、本境界より上の16×4の領域には、第1動き補償予測画像の対応する領域が複製され、本境界より下の16×12の領域には、第2動き補償予測画像の対応する領域が複製される。
ここまでは2分割の例として水平方向の領域分割について説明をしたが、マクロブロック内部では必ずしも水平方向にのみ領域分割が存在するとは限らず、垂直方向に対する領域分割も考えられる。また、従来の16×16画素単位で予測を行う場合と同様にマクロブロック16×16画素内で領域分割が存在しない場合も考えられる。そのため、仮領域分割部101、第1動きベクトル検出部102、第2動きベクトル検出部110、および本領域分割・動き補償部103は、水平方向の領域分割だけでなく、垂直方向の領域分割、領域分割無しのそれぞれについて動き検出を行い、その中から最適な動きベクトルと領域分割の境界を判定する必要がある。
図14は、動き検出の3つのモードと、各モードで算出された動きベクトルの中から最適値を求める処理を示すフローチャートである。水平方向への領域分割、垂直方向への領域分割および領域分割無しの各分割モードにおいて動きベクトルを検出し、各分割モードで算出された動きベクトルの中から最適値を判定する。
太い実線で示すように、ステップS201とS202の処理は仮領域分割部101が行い、ステップS203aと203cの処理は第1動きベクトル検出部102が行い、ステップS203bの処理は第2動きベクトル検出部110が行い、ステップS204〜S209の処理は本領域分割・動き補償部103が行う。
水平分割モードにおいて、仮領域分割部101は、水平分割の仮領域検出を行う(S201)。第1動きベクトル検出部102は、分割された仮領域の内、符号化対象のマクロブロックに隣接する符号化済みの周囲マクロブロックと隣接している辺が最も少ない第1仮領域に対して、第1動きベクトルを検出する(S203a)。第2動きベクトル検出部110は、第2仮領域に対して、周囲マクロブロックの動き情報を用いて第2動きベクトルを検出する(S203b)。具体的には、水平分割の場合、真上の周囲マクロブロックの動きベクトルを第2仮領域の第2動きベクトルとする。
同様に、垂直分割モードにおいて、仮領域分割部101は、垂直分割の仮領域検出を行う(S202)。第1動きベクトル検出部102は、分割された仮領域の内、符号化対象のマクロブロックに隣接する符号化済みの周囲マクロブロックと隣接している辺が最も少ない第1仮領域に対して、第1動きベクトルを検出する(S203a)。第2動きベクトル検出部110は、第2仮領域に対して、周囲マクロブロックの動き情報を用いて第2動きベクトルを検出する(S203b)。具体的には、垂直分割の場合、左の周囲マクロブロックの動きベクトルを第2仮領域の第2動きベクトルとする。
分割無しの場合、マクロブロック内に分割境界が存在しないので、従来の16×16画素で動き検出を実施する。この処理は、水平または垂直方向の分割位置が0画素目である場合と等価であることから、第1動きベクトル検出部102が第1動きベクトルを検出する(S203c)。この場合、第2動きベクトルを持つ領域は存在しないので、第2動きベクトルは検出されない。
本領域分割・動き補償部103は、各分割モードで検出された各仮領域の第1動きベクトルおよび第2動きベクトルを用いて、メモリ107に蓄積されている参照画像から動き補償予測を行う。
水平分割モードの場合、本領域分割・動き補償部103は、本領域分割・動き補償部103は水平分割の本境界検出を行い(S204)、水平方向の本境界において、第1動きベクトルによる第1動き補償予測画像と、第2動きベクトルによる第2動き補償予測画像とを合成して合成動き補償予測画像を生成する(S206)。実施の形態1では分割方向に基づいて第2動きベクトルを決定しているので、水平分割モードの場合、第2動き補償予測画像は水平分割で得られた第2動きベクトルを用いて生成される。一方、第1動き補償予測画像は各分割モードで検出された第1動きベクトルを用いて生成されるため、3つの分割モードに対応して3種類の第1動き補償予測画像が生成される。したがって、水平分割モードの場合、3種類の第1動き補償予測画像のそれぞれに第2動き補償予測画像を合成した3種類の合成動き補償予測画像が生成される。
垂直分割モードの場合、本領域分割・動き補償部103は、本領域分割・動き補償部103は垂直分割の本境界検出を行い(S205)、垂直方向の本境界において、第1動きベクトルによる第1動き補償予測画像と、第2動きベクトルによる第2動き補償予測画像とを合成して合成動き補償予測画像を生成する(S207)。水平分割モードの場合と同様、垂直分割で得られた第2動きベクトルを用いて第2動き補償予測画像が生成され、各分割モードで検出された第1動きベクトルを用いて3種類の第1動き補償予測画像が生成され、3種類の第1動き補償予測画像のそれぞれに第2動き補償予測画像を合成した3種類の合成動き補償予測画像が生成される。
分割無しモードの場合、本領域分割・動き補償部103は、各分割モードの第1動きベクトルのみによる3種類の動き補償予測画像が生成する(S208)。
水平分割モード、垂直分割モード、分割無しモードの各モードで3種類ずつ合成動き補償予測画像が生成されるため、合計9種類の合成動き補償予測画像が生成されることになる。
こうして生成された合成動き補償予測画像に対して、本領域分割・動き補償部103は、後述するエッジ強度などを表す評価値に基づいて、領域分割の有無、領域分割が存在するならその方向(水平または垂直方向)および領域分割位置を示す本境界を決定する(S209)。本領域分割・動き補償部103は、決定された本境界において、選択された第1および第2動きベクトルから第1および第2動き補償予測画像を生成し、それらを合成して最終的な合成動き補償予測画像を生成する。本領域分割・動き補償部103により決定された第2動きベクトル等の動き情報は、次のマクロブロックの符号化処理で利用するためにメモリ107に蓄積される。
ここでは、本境界候補を図12(a)〜(c)の3通りとする場合を説明したが、本境界の候補をさらに増やしてもよい。ただし、後述するように、直交変換・量子化部104の直交変換サイズとの関係を十分に考慮しておく必要がある。
図1に戻り、減算部108は、符号化対象原画像と本領域分割・動き補償部103で算出した動き補償予測画像との差分により、予測残差成分を算出し、直交変換・量子化部104に与える。直交変換・量子化部104は、予測残差成分の直交変換・量子化を行う。
ここで、直交変換・量子化部104は、動き補償予測のサイズに対応した直交変換サイズを使用して直交変換を行う。つまり、動き補償予測のサイズとして16×4/16×8/16×12(垂直方向に4の倍数)が許容されている場合、少なくとも16×4又は8×4又は4×4(垂直方向に4の倍数)の直交変換サイズを使用できるようにする。他の例として、動き補償予測のサイズとして16×2/16×4/16×6/16×8/16×10/16×12(垂直方向に2の倍数)が許容されている場合、少なくとも16×2又は8×2又は4×2(垂直方向に2の倍数)の直交変換サイズを使用できるようにする。これにより、動き補償予測の予測誤差を直交変換する際に、直交変換する予測誤差集合の中に動き補償予測の境界が含まれることがなくなる。これにより、動き補償予測の境界をまたいだ画素を予測誤差として一緒に直交変換することによる直交変換効率の低下を防止することができ、符号化効率を一層向上させる効果を奏する。
可変長符号化部105は、直交変換・量子化部104で直交変換・量子化された予測残差成分を可変長符号化するとともに、本領域分割・動き補償部103で選択された第1動きベクトルを可変長符号化する。第2動きベクトル検出部110で検出された第2動きベクトルは、隣接する符号化済みマクロブロックを参照して算出されたものなので、復号側で同様の処理を施すことが可能である。したがって、第2動きベクトルは符号化する必要はない。
逆量子化・逆直交変換部106は、直交変換・量子化部104によって直交変換・量子化された予測残差成分に対して、逆直交変換及び逆量子化を行う。直交変換・量子化部104と同様に、動き補償予測のサイズに対応したサイズで逆直交変換できるようにしておく。
加算部109は、逆量子化・逆直交変換部106により復号された予測残差成分と、本領域分割・動き補償部103により算出された動き補償予測画像とを加算することで参照画像を生成し、メモリ107に格納する。
図2は、実施の形態1の動画像復号装置の構成を示すブロック図である。実施の形態1の動画像復号装置は、可変長復号部201、本領域分割・動き補償部203、逆量子化・逆直交変換部206、加算部209、メモリ207、および動きベクトル検出部210を備える。
可変長復号部201は、直交変換・量子化されている予測残差成分信号及び動きベクトルを可変長復号する。図1の動画像符号化装置により符号化されたビットストリームでは、マクロブロックに対して1つの動きベクトルが符号化されており、後述する動きベクトル検出部210により検出される動きベクトル(「第2動きベクトル」)との混同を避ける為、ここでは符号化ストリームから復号される動きベクトルを「第1動きベクトル」と呼ぶことにする。
本領域分割・動き補償部203は、図1の動画像符号化装置の本領域分割・動き補償部103と同一の機能を持ち、可変長復号部201で復号された第1動きベクトルと動きベクトル検出部210により検出された第2動きベクトルとを用いてメモリ207に蓄積されている参照画像から動き補償予測を行う。本領域分割・動き補償部203は、図1の動画像符号化装置の本領域分割・動き補償部103と同様の手順で、各分割領域の動きベクトルから生成される複数の動き補償予測画像を合成して合成動き補償予測画像を生成する。
逆量子化・逆直交変換部206は、図1の動画像符号化装置の逆量子化・逆直交変換部106と同一の機能を持ち、可変長復号部201で復号された予測残差成分に対して逆直交変換及び逆量子化を行う。
加算部209は、逆量子化・逆直交変換部206により復号された予測残差成分と、本領域分割・動き補償部203により算出された動き補償予測画像とを加算することにより、画像信号を復号する。メモリ207は、図1の動画像符号化装置のメモリ107と同一であり、復号された参照画像および復号済みの動きベクトル等の各種情報を蓄積する。
動きベクトル検出部210は、図1の動画像符号化装置の第2動きベクトル検出部110と同一の機能を持ち、メモリ207に蓄積された復号対象のマクロブロックに隣接するマクロブロックの動き情報を利用して第2動きベクトルを検出する。
以上の構成による動画像符号化装置及び動画像復号装置で共通する動作、特に、本領域分割・動き補償部103及び本領域分割・動き補償部203の動作を説明する。
動画像符号化装置の本領域分割・動き補償部103と動画像復号装置の本領域分割・動き補償部203の基本的な動作は同じであるが、符号化装置では最適な本分割領域を検出するための候補となる各分割モードの第1動きベクトルがあり、復号装置では第1動きベクトルがビットストリームから復号されたものしかない点が異なる。そのため、符号化側の本領域分割・動き補償部103では、復号側の本領域分割・動き補償部203に対して、各分割モードで得られた第1動きベクトルを指定する処理部、その第1動きベクトルを用いて生成された動き補償予測画像から得られる評価値と以前に処理した評価値最小の分割モードの第1動きベクトルやその他の情報を記録しておく記憶部、以上の処理を分割モード毎に実施するためのループ処理部を備える点が異なる。
また、動画像復号装置では、図14のステップS201とS202の処理を行う仮領域分割部101がないため、動画像復号装置の動きベクトル検出部210は、本領域分割・動き補償部203において求めようとする境界候補の方向を決定し、その方向に応じて復号対象ブロックに隣接する復号済みブロックの中からブロックを選択し、選択されたブロックの動き情報を用いて動きベクトルを検出すると共に、決定した境界候補の方向に関する情報を本領域分割・動き補償部203に供給し、本領域分割・動き補償部203が最終的に最適な境界の方向と位置を決定することになる。
以下では、本領域分割・動き補償部103及び本領域分割・動き補償部203との共通部分となる本領域の決定手順について説明する。
図15は、本領域分割・動き補償部103による本領域の決定手順を説明するフローチャートである。
まず、仮領域分割部101により分割されたN個(N≧2)の仮領域毎に動きベクトルを検出する。ここではN=2とする。第1動きベクトル検出部102で検出した第1動きベクトルを用いて、マクロブロックと同一の大きさで動き補償予測し、第1動き補償予測画像を生成する(S01)。第2動きベクトル検出部110で検出した第2動きベクトルを用いて、マクロブロックと同一の大きさで動き補償予測し、第2動き補償予測画像を生成する(S02)。
次に、本境界の候補すなわちマクロブロック内を分割する位置の候補を設定する。水平方向の分割の場合、マクロブロックの左隅の画素から下に0〜15番目の画素、垂直方向の分割の場合、左隅の画素から右に0〜15番目の画素を、分割位置の候補として設定する。
水平または垂直方向の領域分割により境界判定した結果、本境界が隣接する周囲マクロブロックとの境界と一致する場合は分割無しと判定されるが、この場合の分割位置は0番目の画素に相当する。分割位置が0番目の画素の場合は、隣接する周囲マクロブロックとの境界判定を行うため、以下のアクティビティ算出のステップ(S004〜S007)において、境界を跨ぐ画素間の差分を算出する際、隣接する周囲マクロブロックの画素値を取得する処理が必要となる。
設定された本境界の各候補について、図16(a)〜(d)に示す第1〜第4アクティビティを算出する(S03〜S06)。ただし、ステップS03〜S06は順不同で行うことが可能である。また、ステップS03〜S06のすべてを行わずに、境界評価に使用したいアクティビティだけを算出することももちろん可能である。
まず、図16(a)のように、第1動き補償予測画像について、本境界候補に関する境界アクティビティ(第1アクティビティ)を算出する(S03)。ここで、アクティビティには本境界候補をまたぐ2画素間の絶対差分和(SAD)を用いる。第1アクティビティは物体のエッジなどで値が大きくなるため、値が大きいほど該当境界で領域を分割した方が動き補償予測の予測効率が向上する。同様に、図16(b)のように、第2動き補償予測画像について、本境界候補に関する境界アクティビティ(第2アクティビティ)を算出する(S04)。第2アクティビティは第1アクティビティと同様に、値が大きいほど該当境界で領域を分割した方が動き補償予測の予測効率が向上する。
続いて、図16(c)のように、マクロブロック内の本境界候補より上の領域を第1動き補償予測画像として動き補償予測し、本境界候補より下の領域を第2動き補償予測画像として合成した合成動き補償予測画像について、本境界候補に関する境界アクティビティ(第3アクティビティ)を算出する(S05)。第3アクティビティは本境界候補をまたぐ2画素間の絶対差分和であるから、本境界候補の上下に位置する第1動き補償予測画像の画素と第2動き補償予測画像の画素の値の絶対差分の和になる。したがって、第3アクティビティは値が小さいほど、合成動き補償予測画像の境界が滑らかになり、予測誤差信号に高周波成分が発生しにくいため、動き補償予測の予測効率が向上する。
最後に、図16(d)のように、第1動き補償予測画像と第2動き補償予測画像の差分画像について、本境界候補に関する境界アクティビティ(第4アクティビティ)を算出する(S06)。第4アクティビティは、物体の境界などで値が大きくなるため、値が大きいほど該当境界で領域を分割した方が動き補償予測の予測効率が向上する。
境界評価に使用するアクティビティをすべて算出した後に、予め定義した評価値を用いて本境界候補を評価する(S07)。例えば、評価値は以下のように定義する。
評価値=−A*ACT1−B*ACT2+C*ACT3−D*ACT4
ここで、ACT1は第1アクティビティ値を表し、ACT2は第2アクティビティ値を表し、ACT3は第3アクティビティ値を表し、ACT4は第4アクティビティ値を表す。また、A,B,C,Dはそれぞれ0以上の定数である。
上記評価値をすべての本境界候補について算出し、最小値を持つ本境界候補を最終的な本境界に決定する(S08)。
ここで、本境界と仮境界は同一になることが望ましいが、決定された本境界は必ずしも仮境界とは同一にならない。動きベクトル検出用の仮境界は、符号化側で最適な動きベクトルを求めるための境界であり、符号化側のみ利用可能な符号化対象原画像も使用して算出することができる。一方、本境界は符号化側・復号側共に一意的に算出可能でなければならず、算出した(復号側では伝送されてきた)動きベクトルと、その動き補償予測画像(すなわち予測残差成分が加算される前の画像)で判断している。そのため、本境界と仮境界は同一でなくても符号化側と復号側のミスマッチなどは発生しない。
(実施の形態2)
実施の形態2の動画像符号化装置は、図1に示される実施の形態1の動画像符号化装置と同一の構成であるが、第2動きベクトル検出部110における第2動きベクトルの検出方法が異なる。
図17(a)、(b)は、実施の形態2の動画像符号化装置の第2動きベクトル検出部110による第2動きベクトルの検出方法を説明する図である。
図17(a)で示すように、符号化対象のマクロブロックに隣接する周囲マクロブロックとして、左隣のマクロブロックMBA、真上のマクロブロックMBB、および右斜め上のマクロブロックMBCの3個があり、それぞれの動きベクトルをMVA、MVBおよびMVCとする。
符号化対象のマクロブロックの動きベクトルを符号化する際、これらの3個の周囲マクロブロックMBA、MBBおよびMBCの動きベクトルMVA、MVBおよびMVCから中間値ベクトルPMVを決定し、符号化対象のマクロブロックの動きベクトルからPMVを減算した差分値を算出する。
図17(b)は、3個の周囲マクロブロックの動きベクトルMVA、MVBおよびMVCから中間値ベクトルPMVを求める方法を説明する図である。各周囲マクロブロックの動きベクトルのx成分およびy成分を以下のように表す。
MVA=(MVAx,MVAy)
MVB=(MVBx,MVBy)
MVC=(MVCx,MVCy)
3個の動きベクトルのX成分およびY成分のそれぞれの中間値をとることによって、図17(b)に示す事例の場合、3個の周囲マクロブロックの中間値ベクトルPMVは次のように表される。
PMV=med(MVA,MVB,MVC)=(MVAx,MVBy)
ここで、関数med()は、括弧内の動きベクトルから中間値を算出する関数である。
判定された中間値ベクトルPMVは、符号化対象のマクロブロックの動きベクトルを符号化する際に中間値ベクトルPMVとの差分を取って符号化効率を上げるにために使用される値であり、動き検出を行うための参照先のピクチャ番号を持たない。そのため、中間値ベクトルPMVは、通常の動きベクトルのように動き補償予測により予測画像を生成するために用いることはできない。
そこで、実施の形態2では、3個の周囲のマクロブロックの内、中間値ベクトルPMVに最も近い動きベクトルを持つマクロブロックを判定し、そのマクロブロックを参照先のピクチャとする。判定のために、次式のように、中間値ベクトルPMVと3個の周囲マクロブロックの動きベクトルの絶対差分和(SAD)を求める。
SADi=|MVix−PMVx|+|MViy−PMVy|
ここで、添え字iは周囲マクロブロックMBA、MBB、MBCの識別子A、B、Cのいずれかであり、PMVxおよびPMVyは中間値ベクトルPMVのx成分およびy成分を表す。
上式により絶対差分和SADiが最小となる周囲マクロブロックの動きベクトルを選択する。例えば、図17(b)に示す事例であれば、中間値ベクトルPMVとの絶対差分和SADiが最小となるのは、マクロブロックMBBの動きベクトルMBVであり、第2動きベクトル検出部110は、この動きベクトルMBVを符号化対象のマクロブロックの上側領域に対する第2動きベクトルとして検出する。
ここでは、判定のための評価値として、中間値ベクトルPMVと周囲マクロブロックの動きベクトルの絶対差分和(SAD)を用いたが、中間値ベクトルPMVと周囲マクロブロックの動きベクトルの絶対自乗和(SSD)を用いてもよく、中間値ベクトルPMVと周囲マクロブロックの動きベクトルの類似度を測る尺度であれば、特に限定されない。
次に、実施の形態1および2の動画像符号化装置により符号化される動画像のビットストリームのシンタックスについて説明する。
図18は、MPEG−4 AVCのシンタックスをベースとした第一のシンタックスパターンを示す。図18(a)のように、まず、スライス単位で予測画像の特徴量を用いて動き補償予測の形状を復号側で自動的に決定するかどうかを示す第1フラグ(use_auto_mc_size)を伝送する。第1フラグuse_auto_mc_sizeがOFFの場合は、従来通り図18(b)に示すマクロブロックタイプmb_typeに基づきマクロブロックを固定的に分割して動き補償予測を行う。第1フラグuse_auto_mc_sizeがONの場合、予測画像の特徴量を用いて動き補償予測の形状を復号側で自動的に決定して動き補償予測を行う。マクロブロック単位では、MPEG−4 AVCと同様に、mb_typeを伝送して動き補償予測の形状を判断する。
図19は、スライスレベルだけでなく、マクロブロック単位でも動き補償予測の形状を復号側で自動的に決定するかどうかを示す第2フラグ(auto_mc_size_enable)を伝送する第二のシンタックスパターンを示す。第2フラグauto_mc_size_enableがOFFの場合、スライスレベルで第1フラグuse_auto_mc_sizeがOFFになった場合と同様に、従来通りマクロブロックタイプmb_typeに基づきマクロブロックを固定的に分割して動き補償予測を行う。第2フラグauto_mc_size_enableがONの場合、予測画像の特徴量を用いて動き補償予測の形状を復号側で自動的に決定して動き補償予測を行う。第二のシンタックスを用いると、マクロブロックの本境界を自動的に決定してしまうことで予測効率が低下するのを防ぐことができる。
図20は、スライスレベルで動き補償予測の形状を復号側で自動的に決定するアルゴリズムを切り替える第三のシンタックスパターンを示す。スライス単位で第1フラグuse_auto_mc_sizeがONの場合、動き補償予測の形状を復号側で自動的に決定するアルゴリズムタイプを示す第3フラグauto_mc_algorithmを伝送する。例えば、第3フラグauto_mc_algorithm=0の場合、第1〜第4アクティビティACT1〜ACT4のすべてを用いた評価値に基づき動き補償予測の形状を決定する。アルゴリズムタイプauto_mc_algorithm=1の場合、第4アクティビティACT4を除いた第1〜第3アクティビティACT1〜ACT3だけを用いて評価値に基づき動き補償予測の形状を決定する等である。このように、第3フラグauto_mc_algorithmの値に使用するアクティビティの種類を対応づけることで、動き補償予測の形状を決定するアルゴリズムを切り替えることができる。第三のシンタックスを用いると、符号化側で最適なアルゴリズムタイプを判断して復号側で領域の自動分割を行わせることが可能になるため、符号化効率が更に向上する。
図21は、マクロブロック単位で領域分割の有無と方向を復号側で自動的に決定するかどうかを示す第4フラグboundary_direc_modeを伝送する第四のシンタックスパターンを示す。第4フラグboundary_direc_modeのシンタックスとして、2通りの手法があり、第1の手法は第4フラグboundary_direc_modeの符号量を固定とし、第4フラグboundary_direc_modeの値に対して領域分割の有無や方向を予め設定してテーブル化しておく場合であり、第2の手法は復号側において復号対象のマクロブロックに隣接する復号済みの周囲マクロブロックの状態に応じて第4フラグboundary_direc_modeの意味付けや符号量を変えて符号化することである。
第1の手法では、領域分割の有無を表す第1のビットと分割方向を表す第2のビットの計2ビットの組み合わせで第4フラグboundary_direc_modeを表す。図22は、第4フラグboundary_direc_modeの値の意味の一例を示したテーブルである。第4フラグboundary_direc_modeの値を10進数で表し、括弧内は2進数で表している。第4フラグboundary_direc_modeの2ビット信号のうち上位ビットが領域分割の有無を表す第1のビット、下位ビットが分割方向を表す第2のビットとして構成される。
第4フラグboundary_direc_modeが「0」の場合、スライスレベルで第1フラグuse_auto_mc_sizeがOFFになった場合と同様であり、領域分割せず動き補償予測を行う。第2フラグauto_mc_size_enableがONの場合、第4フラグboundary_direc_modeの値に応じて、水平または垂直方向の領域分割に限定し、動き補償予測を行い、予測画像の特徴量を用いて動き補償予測の形状を復号側で自動的に決定する。
第2の手法では、復号対象のマクロブロックに隣接する復号済みの周囲マクロブロックが持つ復号情報に応じて、第4フラグboundary_direc_modeの意味付けを変える。ここでは、実施の形態1において動きベクトルの参照先として判定した周囲マクロブロックの状態を一例として説明する。復号対象のマクロブロックに隣接する真上のマクロブロックと左隣のマクロブロックの状態に応じて第4フラグboundary_direc_modeの取り得る符号長と符号の意味を変える。真上のマクロブロックと左隣のマクロブロックが共に有効、すなわち動き情報を備えている場合、領域分割としては分割無し、水平方向分割、垂直方向分割の3つの可能性が考えられ、これら3つの状態をそれぞれ2ビットで表現する。例えば、分割無しは「0」、水平方向分割は「1」、垂直方向分割は「2」として表される。
真上のマクロブロック或いは左隣のマクロブロックのどちらか一方が有効、すなわち動き情報を備えている場合、参照先として有効なマクロブロックを把握することができ、分割方向は一意に決定され、領域分割としては分割無し或いは分割有りの2つの状態に限定される。この場合、2つの状態を1ビットで表現され、例えば、分割無しを「0」、分割有りを「1」として表す。
真上のマクロブロックと左隣のマクロブロックが共に無効、例えば共にマクロブロックのタイプが画面内符号化モード(イントラモード)であり、動き情報が存在しないから場合、領域分割処理を実施しないことが一意に決定される。この場合、第4フラグboundary_direc_modeは伝送しないこととなり、スライスレベルで第1フラグuse_auto_mc_sizeがOFFになった場合と同様であり、領域分割せず動き補償予測を行う。
第四のシンタックスを用いると、本境界の決定を復号側で自動決定する処理の効率を向上させる共に、復号側で本境界を誤って判定することを防止することができる。
以上述べたように、本発明の実施の形態によれば、符号化対象のマクロブロックに対して領域分割を行い、符号化済みの周囲のマクロブロックの動き情報を利用して動き補償予測をすることで、動き情報の伝送に必要な符号量を抑えるとともに、分割された各領域において適切な動き補償が行われ、予測誤差を削減することができ、符号化効率及び画質の向上が実現される。
実施の形態では、MPEGのPピクチャ等で用いられる片方向予測について説明してきたが、Bピクチャ等で用いられる双方向予測(通常は前方向予測と後方向予測)に対しても本発明は適用可能である。
また、実施の形態では、符号化装置の第2動きベクトル検出部110および復号装置の動きベクトル検出部210において、符号化対象のマクロブロックが参照する周囲マクロブロックを同一ピクチャ内で隣接するマクロブロックから選択したが、時間的に近いピクチャから選択してもよい。例えば、符号化対象のマクロブロックと同位置にある時間的に近いピクチャのマクロブロックの動き情報を用いて、第2動きベクトルを検出する等の方法が考えられる。
以上の符号化及び復号に関する処理は、ハードウェアを用いた伝送、蓄積、受信装置として実現することができるのは勿論のこと、ROM(リード・オンリ・メモリ)やフラッシュメモリ等に記憶されているファームウェアや、コンピュータ等のソフトウェアによっても実現することができる。そのファームウェアプログラム、ソフトウェアプログラムをコンピュータ等で読み取り可能な記録媒体に記録して提供することも、有線あるいは無線のネットワークを通してサーバから提供することも、地上波あるいは衛星ディジタル放送のデータ放送として提供することも可能である。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。