本発明の実施形態に係る動画像符号化装置及び動画像復号装置について図面を参照して説明する。なお、各図において、同一要素には同一符号を付して重複する説明を省略する。
[第1実施形態]
図1を用いて、本発明に係る動画像符号化装置10について説明する。動画像符号化装置10は、機能的な構成要素として、図1に示すように、ブロック分割器101と、フレームメモリ102と、動き検出器103と、予測信号生成器104と、動きベクトルメモリ105と、減算器106と、変換器107と、量子化器108と、逆量子化器109と、逆変換器110と、加算器111と、動き予測器112と、減算器113と、エントロピー符号化器114とを備えて構成される。
動画像符号化装置10に入力される入力映像信号(動画像信号)は、フレーム単位の画像信号(以下「フレーム画像信号」という)の時間系列で構成されている。
ブロック分割器101は、ラインL101を経由して入力された入力映像信号の符号化対象となるフレーム画像信号を複数の領域(ブロック)に分割し、ラインL102を経由して符号化対象のブロック(以下「対象ブロック」という)の画像信号を出力する。本実施形態では8×8の画素からなるブロックに分割するが、それ以外の大きさまたは形に分割してもよい。このブロック単位で以下の符号化処理が行われる。
フレームメモリ102は、ラインL103を経由して入力される過去に符号化済みのフレーム画像信号(以下「参照フレーム画像信号」という)を格納し、必要に応じてラインL104を経由して出力する。
動き検出器103は、ラインL102を経由して入力される対象ブロックの画像信号のパターンに類似した画像信号パターンを、ラインL104を経由して入力される参照フレーム画像信号から所定範囲内で探索し、両画像信号パターン間の空間的な変位量である動きベクトルを検出し、ラインL105を経由して出力する。また、その動きベクトルが参照するフレームの番号(以下「参照フレーム番号」という)を検出し、ラインL115を経由して出力する。
予測信号生成器104は、ラインL105を経由して入力される対象ブロックの動きベクトル信号値とラインL115を経由して入力される参照フレーム番号と、ラインL104を経由して入力される参照フレーム画像信号から、対象ブロックに対する予測画像信号を生成し、ラインL106を経由して出力する。
動きベクトルメモリ105は、過去に符号化済みの動きベクトルや参照フレーム番号と併せて、ラインL105を経由して入力される動きベクトルとラインL115を経由して入力される参照フレーム番号を格納し、必要に応じてラインL112を経由して出力する。
減算器106は、ラインL102を経由して入力された対象ブロックの画像信号から、ラインL106を経由して入力された対象ブロックに対する予測画像信号を減算し、残差信号を生成し、ラインL107を経由して出力する。
変換器107は、ラインL107を経由して入力された残差信号を直交変換し、ラインL108を経由して変換係数を出力する。
量子化器108は、ラインL108を経由して入力された変換係数を量子化し、ラインL109を経由して量子化された変換係数を出力する。
逆量子化器109は、ラインL109を経由して入力された量子化された変換係数を逆量子化し、ラインL110を経由して復元された変換係数を出力する。
逆変換器110は、ラインL110を経由して入力された変換係数を逆直交変換し、ラインL111を経由して復元された残差信号を出力する。
加算器111は、ラインL111を経由して入力された残差信号と、ラインL106を経由して入力された対象ブロックに対する予測画像信号を加算し、対象ブロックの画像信号を復元し、ラインL103を経由して出力する。
動き予測器112は、ラインL112を経由して入力される過去に符号化済みのブロックの動きベクトルと、それに対応した参照フレーム番号とラインL115を経由して入力される対象ブロックの参照フレーム番号から、後述するフローに従って対象ブロックの動きベクトル予測値を算出し、ラインL113を経由して出力する。
減算器113は、ラインL105を経由して入力された対象ブロックの動きベクトル値から、ラインL113を経由して入力された対象ブロックの動きベクトル予測値を減算し、動きベクトル差分値を生成する。そしてラインL114を経由して動きベクトル差分値を出力する。
エントロピー符号化器114は、ラインL109を経由して入力された量子化された変換係数とラインL114を経由して入力された動きベクトル差分値とラインL115を経由して入力された対象ブロックの参照フレーム番号を符号化し、多重化したうえで、圧縮ストリームをラインL116に出力する。
次に、図2を参照して動き予測器112について詳細に説明する。図2は、動き予測器112における動きベクトル予測値を決定する手順を説明するための模式図である。
図2で、対象ブロックをHとし、フレームF001はブロックHを含むフレームである。フレームF002は既に符号化済みのフレームで、フレームF001とは時間方向で隣り合うフレームである。
フレームF001において、ブロックDをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックEをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF002において、ブロックAはブロックHの最も左上の画素と同じ空間位置の画素を含むブロックとする。ブロックBをブロックAの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックAの最も左上の画素の真左の画素を含むブロックとする。
図3は、動き予測器112における動きベクトル予測値を決定する手順を説明するためのフローチャートである。
まず動き予測器112は、ラインL112を経由して入力される符号化済みのブロックA、B、C、E、Fの動きベクトルと対応する参照フレーム番号とを取得する(ステップS001)。
なおステップS001で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、下記式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS001において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分、ブロックCの動きベクトルとブロックFの動きベクトルの差分が算出される(ステップS002)。
次に、ステップS002で算出された2通りの差分のうち、少なくとも1つが閾値以下かどうかが判定される(ステップS003)。
ステップS003での判定の結果、2通りの差分のうち、少なくとも1つが閾値以下ならば(ステップS003:YES)、処理をステップS004に進める。2通りの差分がともに閾値より大きいならば(ステップS003:NO)、処理をステップS005に進める。
ステップS004では、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。
ステップS005では、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定される。
最後に、決定された値PMVi(i=x,y)を出力し(ステップS006)、処理を終了する。
なお、ステップS003における判定は2通りの差分の両方が閾値以下かどうかを判定しても良い。
また、ステップS005でブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値としたが、動きベクトルをゼロベクトル(すなわち、動きベクトルの予測をしない)としてもよい。あらかじめ決められた任意の動きベクトルを予測値としてもよい。
また、動き予測器112における動きベクトル予測値の決定は、図4のフローチャートに従ってもよい。
図4では、動きベクトルのx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器112は、ラインL112を経由して入力される符号化済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号を取得する(ステップS101)。
なおステップS101で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS101において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分、ブロックCの動きベクトルとブロックFの動きベクトルの差分、ブロックDの動きベクトルとブロックEの動きベクトルの差分、ブロックDの動きベクトルとブロックFの動きベクトルの差分の4通りが算出される(ステップS102)。
次に、ステップS102で算出された4通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS103)。
ステップS103での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックEである場合にはブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。ブロックCとブロックFである場合には、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。ブロックDとブロックEである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定される。ブロックDとブロックFである場合には、ブロックHの動きベクトル予測値はブロックEの動きベクトルと同じ値に決定される(ステップS104)。
最後に、ステップS104で決定された値PMVi(i=x,y)を出力し(ステップS105)、処理を終了する。
なお、図4のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、動き予測器112における動きベクトル予測値を決定する手順は図5で説明されるフローチャートに従ってもよい。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器112は、ラインL112を経由して入力される符号化済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号を取得する(ステップS201)。
なおステップS201で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS201において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックDの動きベクトルとブロックEの動きベクトルの差分、およびブロックDの動きベクトルとブロックFの動きベクトルの差分が算出され、前者のほうが大きい場合(ステップS202:YES)は処理をステップS203に進める。それに該当しない場合(ステップS202:NO)は処理をステップS204に進める(ステップS202)。
ステップS203では、ブロックEの動きベクトルとブロックBの動きベクトルの差分、およびブロックDの動きベクトルとブロックFの動きベクトルの差分が算出され、前者のほうが大きい場合(ステップS203:YES)は処理をステップS205に進める。それに該当しない場合(ステップS203:NO)は処理をステップS206に進める。
ステップS204では、ブロックCの動きベクトルとブロックFの動きベクトルの差分、およびブロックCの動きベクトルとブロックAの動きベクトルの差分が算出され、前者のほうが大きい場合(ステップS204:YES)は処理をステップS207に進める。それに該当しない場合(ステップS204:NO)は処理をステップS208に進める。
ステップS205では、ブロックHの動きベクトル予測値はブロックEの動きベクトルと同じ値に決定される。
ステップS206では、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。
ステップS207では、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定される。
ステップS208では、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。
最後に、決定された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS209)、処理を終了する。
なお、図5のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図2に示されるブロックの位置関係は以下のように定めてもよい。その際の動きベクトル予測値を決定する手順は図3あるいは図4あるいは図5で説明されるフローチャートのどれに従ってもよい。
対象ブロックをHとし、フレームF001はブロックHを含むフレームである。フレームF002は既に符号化済みのフレームである。
フレームF001において、ブロックDをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックEをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF002において、ブロックAはブロックDの動きベクトルが参照しているブロック、またはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロックとする。その際もブロックBをブロックAの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックAの最も左上の画素の真左の画素を含むブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックDが参照するブロック、あるいはブロックEが参照するブロック、あるいはブロックFが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(DあるいはEあるいはF)が参照するブロックの動きベクトルとして用いるものとする。
また、動き予測器112における動きベクトルの予測値の決定は、以下に示すように行われても良い。
図6は、動き予測器112における動きベクトルの予測値の決定手順の説明に用いる模式図である。
図6で、対象ブロックをHとし、フレームF101はブロックHを含むフレームである。フレームF102は既に符号化済みのフレームで、フレームF101とは時間方向で隣り合うフレームである。フレームF103は既に符号化済みのフレームで、フレームF102とは時間方向で隣り合うフレームである。
フレームF101において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF102において、ブロックDはブロックHの最も左上の画素と同じ空間位置の画素を含むブロック、ブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF103において、ブロックAはブロックDの最も左上の画素と同じ空間位置の画素を含むブロックとする。
図7は、動き予測器112における動きベクトル予測値を決定する手順を説明するためのフローチャートである。
図7では、動きベクトルのx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器112は、ラインL112を経由して入力される符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルと対応する参照フレーム番号を取得する(ステップS301)。
なおステップS301で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS301において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分、ブロックEの動きベクトルとブロックFの動きベクトルの差分、ブロックEの動きベクトルとブロックGの動きベクトルの差分の5通りが算出される(ステップS302)。
次に、ステップS302で算出された5通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS303)。
ステップS303での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定される。ブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定される。ブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定される。ブロックEとブロックFである場合には、ブロックHの動きベクトル予測値はブロックGの動きベクトルと同じ値に決定される。ブロックEとブロックGである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定される。(ステップS304)。
最後に、ステップS304で決定された値PMVi(i=x,y)を出力し(ステップS305)、処理を終了する。
なお、図7のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、ステップS302において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分の3通りでもよい。その際もステップS303で最小となる組み合わせが判定され、ステップS304では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定される。ブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定される。ブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定される。
また、ステップS302において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分の2通りでもよい。その際もステップS303で最小となる組み合わせが判定され、ステップS304では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定される。ブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定される。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図6に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをHとし、フレームF101はブロックHを含むフレームである。フレームF102は既に符号化済みのフレームである。フレームF103は既に符号化済みのフレームである。
フレームF101において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF102において、ブロックDはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロック、またはブロックGの動きベクトルが参照しているブロックとする。その際もブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF103において、ブロックAはブロックDの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックEが参照するブロック、あるいはブロックFが参照するブロック、あるいはブロックGが参照するブロック、あるいはブロックDが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(EあるいはFあるいはGあるいはD)が参照するブロックの動きベクトルとして用いるものとする。
また、動き予測器112における動きベクトルの予測値の決定は、以下に示すように空間的に1画素以上隔てられたブロックの動きベクトルや、時間方向で1フレーム以上隔てられたフレームにあるブロックの動きベクトルに基づいて行われてもよい。
このような動きベクトルの予測値の決定方法は、動きベクトルの大勢を反映した予測をすることで、高精度の動きベクトル予測値を得る効果がある。また、ノイズや局所的な変化による影響を打ち消す効果もある。
また、動き予測器112における動きベクトルの予測値は、過去に符号化済みのブロックの動きベクトルをそのまま引用して動きベクトル予測値とする代わりに、以下に示すように複数ある動きベクトルの決定方法の中からひとつを選択して、その決定方法にしたがって決定してもよい。
図8は、動き予測器112における動きベクトルの予測値の決定手順の説明に用いる模式図である。
図8で、対象ブロックをJとし、フレームF201はブロックJを含むフレームである。フレームF202は既に符号化済みのフレームで、フレームF201とは時間方向で隣り合うフレームである。フレームF203は既に符号化済みのフレームで、フレームF202とは時間方向で隣り合うフレームである。フレームF204は既に符号化済みのフレームで、フレームF203とは時間方向で隣り合うフレームである。
フレームF201において、ブロックIをブロックJの最も左上の画素の真上の画素を含むブロック、ブロックHをブロックIの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックJの最も左上の画素の真左の画素を含むブロック、ブロックEをブロックFの最も左上の画素の真左の画素を含むブロック、ブロックDをブロックEの最も左上の画素の真左の画素を含むブロックとする。
フレームF202において、ブロックCはブロックJの最も左上の画素と同じ空間位置の画素を含むブロックとする。
フレームF203において、ブロックBはブロックCの最も左上の画素と同じ空間位置の画素を含むブロックとする。
フレームF204において、ブロックAはブロックBの最も左上の画素と同じ空間位置の画素を含むブロックとする。
図9は、動き予測器112における動きベクトル予測値を決定する手順を説明するためのフローチャートである。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器112は、ラインL112を経由して入力される符号化済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルと対応する参照フレーム番号とラインL115を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS401)。
なおステップS401で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS401において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの分散、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの分散、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの分散、の3組の分散をそれぞれ算出する。(ステップS402)
次に、ステップS402で算出された3通りの分散のうち、どの組み合わせの分散が最小のものであるかが判定される。(ステップS403)。
ステップS403での判定の結果、もっとも小さい差分を与える組み合わせがブロックAとブロックBとブロックCである場合には、ブロックJの動きベクトル予測値はブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの平均値に決定される。ブロックDとブロックEとブロックFである場合には、ブロックJの動きベクトル予測値はブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの平均値に決定される。ブロックGとブロックHとブロックIである場合には、ブロックJの動きベクトル予測値はブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの平均値に決定される(ステップS404)。
最後に、ステップS404で決定された値PMVi(i=x,y)を出力し(ステップS405)、処理を終了する。
なお、図9のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、ステップS402において動きベクトルの類似性をあらわす値として分散を用いたが、標準偏差や、各ブロック間の動きベクトルの差分値や、それら複数の差分値の平均を用いてもよい。
ステップS404において、3つの動きベクトルの平均値を動きベクトルの予測値としたが、3つの動きベクトルの中間値、あるいはいずれかひとつの値を予測値としてもよい。
図9では時間方向、空間方向にそれぞれ連続する3ブロックの動きベクトルを参照して動きベクトル予測値の決定を行ったが、これは時間方向のみでもよい。またそれぞれの方向に2ブロックのみ、あるいは4ブロック以上のブロックを用いてもよい。また時間方向で隣り合うフレームのブロックと空間方向で1ブロック以上隔てたブロックを組み合わせて用いてもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図8に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをJとし、フレームF201はブロックJを含むフレームであり、フレームF202、F203、F204は既に符号化済みのフレームである。
フレームF201において、ブロックIをブロックJの最も左上の画素の真上の画素を含むブロック、ブロックHをブロックIの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックJの最も左上の画素の真左の画素を含むブロック、ブロックEをブロックFの最も左上の画素の真左の画素を含むブロック、ブロックDをブロックEの最も左上の画素の真左の画素を含むブロックとする。
フレームF202において、ブロックCはブロックIの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロック、またはブロックJの最も左上の画素の真左上の画素を含むブロック(ブロックKとする)の動きベクトルが参照しているブロックとする。
フレームF203において、ブロックBはブロックCの動きベクトルが参照しているブロックとする。
フレームF204において、ブロックAはブロックBの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックI、ブロックF、ブロックK、ブロックC、ブロックBが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(IあるいはFあるいはKあるいはCあるいはB)が参照するブロックの動きベクトルとして用いるものとする。
さらに、動き予測器112における動きベクトルの予測値の決定は、以下に示すように空間的に1画素以上隔てられたブロックの動きベクトル、または時間方向で1フレーム以上隔てられたフレームにあるブロックの動きベクトルに基づいて行われてもよい。
このような動きベクトルの予測値の決定方法は、動きベクトルの大勢を反映した予測をすることで、高精度の動きベクトル予測値を得る効果がある。また、ノイズや局所的な変化による影響を打ち消す効果もある。
また、動き予測器112における動きベクトルの予測値は、過去に符号化済みのブロックの動きベクトルをそのまま引用して動きベクトル予測値とする代わりに、以下に示すように複数ある動きベクトルの決定方法の中からひとつを選択して、その決定方法にしたがって決定してもよい。
図10は、動き予測器112における動きベクトルの予測値の決定手順の説明に用いる模式図である。
図10で、対象ブロックをMとし、フレームF301はブロックMを含むフレームである。フレームF302は既に符号化済みのフレームで、フレームF301とは時間方向で隣り合うフレームである。フレームF303は既に符号化済みのフレームで、フレームF302とは時間方向で隣り合うフレームである。フレームF304は既に符号化済みのフレームで、フレームF303とは時間方向で隣り合うフレームである。
フレームF301において、ブロックIをブロックMの最も左上の画素の真上の画素を含むブロック、ブロックHをブロックIの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックMの最も左上の画素の真左の画素を含むブロック、ブロックEをブロックFの最も左上の画素の真左の画素を含むブロック、ブロックDをブロックEの最も左上の画素の真左の画素を含むブロックとする。また、ブロックKをブロックMの最も左上の画素の真左上の画素を含むブロック、ブロックLをブロックKの最も左上の画素の真上の画素を含むブロック、ブロックJをブロックMの最も右上の画素の真右上の画素を含むブロックとする。
フレームF302において、ブロックCはブロックMの最も左上の画素と同じ空間位置の画素を含むブロックとする。
フレームF303において、ブロックBはブロックCの最も左上の画素と同じ空間位置の画素を含むブロックとする。
フレームF304において、ブロックAはブロックBの最も左上の画素と同じ空間位置の画素を含むブロックとする。
図11は、動き予測器112における動きベクトル予測値を決定する手順を説明するためのフローチャートである。
まず動き予測器112は、ラインL112を経由して入力される符号化済みのブロックA、B、C、D、E、F、G、H、I、J、K、Lの動きベクトルと対応する参照フレーム番号を取得する(ステップS501)。
なおステップS501で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、G、H、I、J、K、Lの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS501において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルのx成分の分散、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルのx成分の分散、ブロックJの動きベクトルとブロックKの動きベクトルとブロックIの動きベクトルのx成分の分散、の3組のx成分の分散をそれぞれ算出する。(ステップS502)
次に、ステップS502で算出された3通りの分散のうち、どの組み合わせの分散が最小のものであるかが判定される。(ステップS503)。
ステップS503での判定の結果、もっとも小さい差分を与える組み合わせがブロックAとブロックBとブロックCである場合には、ブロックMの動きベクトル予測値のx成分はブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルのx成分の平均値に決定される。ブロックDとブロックEとブロックFである場合には、ブロックMの動きベクトル予測値のx成分はブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルのx成分の平均値に決定される。ブロックJとブロックKとブロックIである場合には、ブロックMの動きベクトル予測値のx成分はブロックJの動きベクトルとブロックKの動きベクトルとブロックIの動きベクトルのx成分の平均値に決定される(ステップS504)。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルのy成分の分散、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルのy成分の分散、ブロックLの動きベクトルとブロックKの動きベクトルとブロックFの動きベクトルのy成分の分散、の3組のy成分の分散をそれぞれ算出する。(ステップS505)
次に、ステップS505で算出された3通りの分散のうち、どの組み合わせの分散が最小のものであるかが判定される。(ステップS506)。
ステップS506での判定の結果、もっとも小さい差分を与える組み合わせがブロックAとブロックBとブロックCである場合には、ブロックMの動きベクトル予測値のy成分はブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルのy成分の平均値に決定される。ブロックGとブロックHとブロックIである場合には、ブロックMの動きベクトル予測値のy成分はブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルのy成分の平均値に決定される。ブロックLとブロックKとブロックFである場合には、ブロックMの動きベクトル予測値のy成分はブロックLの動きベクトルとブロックKの動きベクトルとブロックFの動きベクトルのy成分の平均値に決定される(ステップS507)。
最後に、ステップS507で決定された値PMVi(i=x,y)を出力し(ステップS508)、処理を終了する。
また、ステップS502、ステップS505において動きベクトルの類似性をあらわす値として分散を用いたが、標準偏差や、各ブロック間の動きベクトルの差分値や、それら複数の差分値の平均を用いてもよい。
ステップS504、ステップS507において、3つの動きベクトルの平均値を動きベクトルの予測値としたが、3つの動きベクトルの中間値、あるいはいずれかひとつの値を予測値としてもよい。
図11では時間方向、空間方向にそれぞれ連続する3ブロックの動きベクトルを参照して動きベクトル予測値の決定を行ったが、空間方向のみでもよい。またそれぞれの方向に2ブロックのみ、あるいは4ブロック以上のブロックを用いてもよい。また時間方向で隣り合うフレームのブロックと空間方向で1ブロック以上隔てたブロックを組み合わせて用いてもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図10に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをMとし、フレームF301はブロックMを含むフレームであり、フレームF302、F303、F304は既に符号化済みのフレームである。
フレームF301において、ブロックIをブロックMの最も左上の画素の真上の画素を含むブロック、ブロックHをブロックIの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックMの最も左上の画素の真左の画素を含むブロック、ブロックEをブロックFの最も左上の画素の真左の画素を含むブロック、ブロックDをブロックEの最も左上の画素の真左の画素を含むブロックとする。また、ブロックKをブロックMの最も左上の画素の真左上の画素を含むブロック、ブロックLをブロックKの最も左上の画素の真上の画素を含むブロック、ブロックJをブロックMの最も右上の画素の真右上の画素を含むブロックとする。
フレームF302において、ブロックCはブロックIの動きベクトルが参照しているブロック、またはブロックKの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロックとする。
フレームF303において、ブロックBはブロックCの動きベクトルが参照しているブロックとする。
フレームF304において、ブロックAはブロックBの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックI、ブロックK、ブロックF、ブロックC、ブロックBが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(IあるいはKあるいはFあるいはCあるいはB)が参照するブロックの動きベクトルとして用いるものとする。
ところで、動きベクトル予測値を算出する際に、周辺にある過去に符号化済みの動きベクトルから一部の動きベクトルを選択するのではなく、以下のように重み付けによって周辺の動きベクトルを有効利用する方法を採用してもよい。この場合、重み付けによって周辺の動きベクトルを有効利用することで、局所的な動きベクトルの変化の影響を少なくし、動きベクトルの変化の大勢を反映した予測値を得ることができ、予測精度を高めることができる。
以下では、重み付けによる周辺の動きベクトル利用方法を、(a)図2のブロックに適用した例、(b)図6のブロックに適用した例、(c)図8のブロックに適用した例を、順に説明する。
まず、(a)図2のブロックに適用した例としては、例えば、図57のフローチャートが挙げられる。即ち、動き予測器112における動きベクトル予測値を決定する手順は、図57のフローチャートに従って実行すればよい。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器112は、ラインL112を経由して入力される符号化済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号を取得する(ステップS3001)。
なおステップS3001で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS3001において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分MViD_0(i=x,y)、ブロックCの動きベクトルとブロックFの動きベクトルの差分MViD_1(i=x,y)、ブロックDの動きベクトルとブロックEの動きベクトルの差分MViD_2(i=x,y)、ブロックDの動きベクトルとブロックFの動きベクトルの差分MViD_3(i=x,y)、が算出される(ステップS3002)。
次に、ステップS3002で算出された各差分を変数とする関数Fを用いた以下の式(2)に基づいて、ブロックA、F、Eの動きベクトル全てを有効利用して、動きベクトル予測値PMVi(i=x,y)を算出する(ステップS3003)。
最後に、算出された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS3004)、処理を終了する。
なお、図57のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、式(2)で用いられる関数Fとしては、例えば、変数(差分)の逆数を算出する関数を採用してもよい。この場合、例えばブロックBの動きベクトルとブロックEの動きベクトルの差分MViD_0(i=x,y)が小さいとき、当該差分の逆数、即ち、大きな値がブロックAの動きベクトルの重み付け係数となるので、ブロックAの動きベクトルの重みを大きくすることができる。
次に、(b)図6のブロックに適用した例としては、例えば、図58のフローチャートが挙げられる。即ち、動き予測器112における動きベクトル予測値を決定する手順は、図58のフローチャートに従って実行すればよい。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器112は、ラインL112を経由して入力される符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルと対応する参照フレーム番号を取得する(ステップS3101)。
なおステップS3101で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS3101において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックFの動きベクトルの差分MViD_0(i=x,y)、ブロックCの動きベクトルとブロックGの動きベクトルの差分MViD_1(i=x,y)、ブロックAの動きベクトルとブロックDの動きベクトルの差分MViD_2(i=x,y)、ブロックEの動きベクトルとブロックFの動きベクトルの差分MViD_3(i=x,y)、ブロックEの動きベクトルとブロックGの動きベクトルの差分MViD_4(i=x,y)の5通りが算出される(ステップS3102)。
次に、ステップS3102で算出された各差分を変数とする関数Fを用いた以下の式(3)に基づいて、ブロックB、C、D、G、Fの動きベクトル全てを有効利用して、動きベクトル予測値PMVi(i=x,y)を算出する(ステップS3103)。
最後に、算出された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS3104)、処理を終了する。
なお、図58のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。また、式(3)で用いられる関数Fとしては、例えば、変数(差分)の逆数を算出する関数を採用してもよい。この場合、例えばブロックBの動きベクトルとブロックFの動きベクトルの差分MViD_0(i=x,y)が小さいとき、当該差分の逆数、即ち、大きな値がブロックBの動きベクトルの重み付け係数となるので、ブロックBの動きベクトルの重みを大きくすることができる。
また、ステップS3102において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分MViD_0(i=x,y)、ブロックCの動きベクトルとブロックGの動きベクトルの差分MViD_1(i=x,y)の2通りでもよい。その際、ステップS3103では、算出されない差分を変数とする関数F(MViD_2(i=x,y))、関数F(MViD_3(i=x,y))及び関数F(MViD_4(i=x,y))は0として動きベクトル予測値PMVi(i=x,y)を算出すればよい。この場合、空間方向の動きベクトルの差分を含まず、時間方向の動きベクトルの差分のみに基づいて動きベクトル予測値PMVi(i=x,y)を算出することができる。
更に、ステップS3102において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分MViD_0(i=x,y)、ブロックCの動きベクトルとブロックGの動きベクトルの差分MViD_1(i=x,y)、ブロックAの動きベクトルとブロックDの動きベクトルの差分MViD_2(i=x,y)の3通りでもよい。その際、ステップS3103では、算出されない差分を変数とする関数F(MViD_3(i=x,y))及び関数F(MViD_4(i=x,y))は0として動きベクトル予測値PMVi(i=x,y)を算出すればよい。この場合、対象ブロックから1フレーム以上隔てたブロック間での動きベクトルの差分を含んだ時間方向の動きベクトルの差分のみに基づいて動きベクトル予測値PMVi(i=x,y)を算出することができる。
次に、(c)図8のブロックに適用した例としては、例えば、図59のフローチャートが挙げられる。即ち、動き予測器112における動きベクトル予測値を決定する手順は、図59のフローチャートに従って実行すればよい。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器112は、ラインL112を経由して入力される符号化済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルと対応する参照フレーム番号とラインL115を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS3201)。
なおステップS3201で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS3201において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの分散MViV_0(i=x,y)、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの分散MViV_1(i=x,y)、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの分散MViV_2(i=x,y)、の3組の分散をそれぞれ算出する(ステップS3202)。次に、ステップS3202で算出された各分散を変数とする関数Fを用いた以下の式(4)に基づいて、ブロックA〜Iの9つの動きベクトル全てを有効利用して、動きベクトル予測値PMVi(i=x,y)を算出する(ステップS3203)。
最後に、算出された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS3204)、処理を終了する。
なお、図59のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。また、式(4)で用いられる関数Fとしては、例えば、変数(分散)の逆数を算出する関数を採用してもよい。この場合、例えばブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの分散MViV_0(i=x,y)が小さいとき、当該分散の逆数、即ち、大きな値がブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの平均値の重み付け係数となるので、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの平均値の重みを大きくすることができる。
また、ステップS3202において動きベクトルの類似性をあらわす値として分散を用いたが、標準偏差や、各ブロック間の動きベクトルの差分値や、それら複数の差分値の平均を用いてもよい。
また、ステップS3203において、3つの動きベクトルの平均値を動きベクトルの予測値としたが、3つの動きベクトルの中間値、あるいはいずれかひとつの値を予測値としてもよい。
図59では時間方向、空間方向にそれぞれ連続する3ブロックの動きベクトルを参照して動きベクトル予測値の決定を行ったが、これは時間方向のみでもよい。またそれぞれの方向に2ブロックのみ、あるいは4ブロック以上のブロックを用いてもよい。また時間方向で隣り合うフレームのブロックと空間方向で1ブロック以上隔てたブロックを組み合わせて用いてもよい。
また、ステップS3202において算出する分散は、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの分散MViV_1(i=x,y)、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの分散MViV_2(i=x,y)、の2組のみでもよい。その際、ステップS3203では、算出されない分散を変数とする関数F(MViV_0(i=x,y))は0として動きベクトル予測値PMVi(i=x,y)を算出すればよい。この場合、対象ブロックから1ブロック以上隔てた複数ブロックを含む空間方向のみからの動きベクトル予測値PMVi(i=x,y)の算出を行うことができる。
最後に、コンピュータを動画像符号化装置10として動作させる動画像符号化プログラムについて説明する。図51は、本実施形態に係る動画像符号化プログラムP10の構成を示し、この動画像符号化プログラムP10は、記録媒体に格納されて提供される。記録媒体としては、フレキシブルディスク、CD−ROM、DVD、ROM等の記録媒体あるいは半導体メモリ等が例示される。図63は、記録媒体に記憶されたプログラムを実行するためのコンピュータのハードウェア構成を示す図であり、図64は、記録媒体に記憶されたプログラムを実行するためのコンピュータの斜視図である。
図63に示すように、コンピュータ80は、フレキシブルディスクドライブ装置、CD−ROMドライブ装置、DVDドライブ装置等の読取装置62と、作業用メモリ(RAM)64と、記録媒体60に記憶されたプログラム等を記憶するメモリ66と、ディスプレイ68と、マウス70と、キーボード72と、データ等の送受信を行う通信装置74と、プログラムの実行を制御するCPU76とを備えている。コンピュータ80は、記録媒体60が読取装置62に挿入されると、読取装置62から記録媒体60に格納された動画像符号化プログラムP10にアクセス可能になり、当該動画像符号化プログラムP10によって、動画像符号化装置10として動作することが可能になる。
図64に示すように、動画像符号化プログラムP10は、搬送波に重畳されたコンピュータデータ信号90としてネットワークを介して提供されるものであってもよい。この場合、コンピュータ80は、通信装置74によって受信した動画像符号化プログラムP10をメモリ66に格納し、当該動画像符号化プログラムP10を実行することができる。
図51に示すように、動画像符号化プログラムP10は、処理を統括するメインモジュールP101と、ブロック分割モジュールP102と、変換モジュールP103と、量子化モジュールP104と、逆量子化モジュールP105と、逆変換モジュールP106と、記憶モジュールP107と、予測信号生成モジュールP108と、動き予測モジュールP109と、動き検出モジュールP110と、加算モジュールP111と、減算モジュールP112と、エントロピー符号化モジュールP113とを備えている。
ブロック分割モジュールP102、変換モジュールP103、量子化モジュールP104、逆量子化モジュールP105、逆変換モジュールP106、予測信号生成モジュールP108、動き予測モジュールP109、動き検出モジュールP110、加算モジュールP111、エントロピー符号化モジュールP113がコンピュータ80に実現させる機能は、それぞれ図1のブロック分割器101、変換器107、量子化器108、逆量子化器109、逆変換器110、予測信号生成器104、動き予測器112、動き検出器103、加算器111、エントロピー符号化器114の機能と同様である。記憶モジュールP107がコンピュータ80に実現させる機能は、フレームメモリ102及び動きベクトルメモリ105の機能と同様である。減算モジュールP112がコンピュータ80に実現させる機能は、減算器106、113の機能と同様である。
[第2実施形態]
図12を用いて、本発明に係る動画像符号化装置20について説明する。動画像符号化装置20は、機能的な構成要素として、図12に示すように、ブロック分割器201と、フレームメモリ202と、動き検出器203と、予測信号生成器204と、動きベクトルメモリ205と、減算器206と、変換器207と、量子化器208と、逆量子化器209と、逆変換器210と、加算器211と、動き予測器212と、確率切替信号生成器213と、エントロピー符号化器114とを備えて構成される。
動画像符号化装置20に入力される入力映像信号(動画像信号)は、フレーム単位の画像信号(以下、フレーム画像信号)の時間系列で構成されている。
ブロック分割器201は、ラインL201を経由して入力された入力映像信号の符号化対象となるフレーム画像信号を複数の領域(ブロック)に分割し、ラインL202を経由して符号化対象のブロック(以下、対象ブロック)の画像信号を出力する。本実施形態では8×8の画素からなるブロックに分割するが、それ以外の大きさまたは形に分割してもよい。このブロック単位で以下の符号化処理が行われる。
フレームメモリ202は、ラインL203を経由して入力される過去に符号化済みのフレーム画像信号(以下、参照フレーム画像信号)を格納し、必要に応じてラインL204を経由して出力する。
動き検出器203は、ラインL202を経由して入力される対象ブロックの画像信号のパターンに類似した画像信号パターンを、ラインL204を経由して入力される参照フレーム画像信号から所定範囲内で探索し、両画像信号パターン間の空間的な変位量である動きベクトルを検出し、ラインL205を経由して出力する。また、その動きベクトルが参照するフレームの番号(以下、参照フレーム番号)を検出し、ラインL216を経由して出力する。
予測信号生成器204は、ラインL205を経由して入力される対象ブロックの動きベクトル信号値とラインL216を経由して入力される参照フレーム番号と、ラインL204を経由して入力される参照フレーム画像信号から、対象ブロックに対する予測画像信号を生成し、ラインL206を経由して出力する。
動きベクトルメモリ205は、過去に符号化済みの動きベクトルや参照フレーム番号と併せて、ラインL205を経由して入力される動きベクトルとラインL215を経由して入力される参照フレーム番号を格納し、必要に応じてラインL212を経由して出力する。
減算器206は、ラインL202を経由して入力された対象ブロックの画像信号から、ラインL206を経由して入力された対象ブロックに対する予測画像信号を減算し、残差信号を生成し、ラインL207を経由して出力する。
変換器207は、ラインL207を経由して入力された残差信号を直交変換し、ラインL208を経由して変換係数を出力する。
量子化器208は、ラインL208を経由して入力された変換係数を量子化し、ラインL209を経由して量子化された変換係数を出力する。
逆量子化器209は、ラインL209を経由して入力された量子化された変換係数を逆量子化し、ラインL210を経由して復元された変換係数を出力する。
逆変換器210は、ラインL210を経由して入力された変換係数を逆直交変換し、ラインL211を経由して復元された残差信号を出力する。
加算器211は、ラインL211を経由して入力された残差信号と、ラインL206を経由して入力された対象ブロックに対する予測画像信号を加算し、対象ブロックの画像信号を復元し、ラインL203を経由して出力する。
動き予測器212は、ラインL212を経由して入力される過去に符号化済みのブロックの動きベクトルと、それに対応した参照フレーム番号とラインL216を経由して入力される対象ブロックの参照フレーム番号から、後述するフローに従って対象ブロックの動きベクトル予測値を示すインデックスの決定および動きベクトル予測値と実際の動きベクトルの差分である動きベクトル差分値の算出を行い、ラインL213を経由して動きベクトル予測値を示すインデックスを出力する。また、ラインL214を経由して動きベクトル差分値を出力する。
確率切替信号生成器213はラインL212を経由して入力される過去に符号化済みのブロックの動きベクトルと、それに対応する参照フレーム番号と、ラインL216を経由して入力される対象ブロックの参照フレーム番号から、後述するフローに従って切り替える確率テーブルを示す確率切替信号を生成し、ラインL215を経由して出力する。
エントロピー符号化器214は、ラインL209を経由して入力された量子化された変換係数と、ラインL214を経由して入力された動きベクトル差分値と、ラインL216を経由して入力された対象ブロックの参照フレーム番号を符号化する。また、ラインL215を経由して入力された確率切替信号に基づいて、エントロピー符号化を行う際に用いる確率テーブルを後述の方法で切り替えたのち、ラインL213を経由して入力された動きベクトル予測値を示すインデックスを符号化する。そして符号化された変換係数および動きベクトル差分値および動きベクトル予測値を示すインデックスを多重化したうえで、圧縮ストリームをラインL216に出力する。
上記のようにエントロピー符号化を行う際に用いる確率テーブルを切り替えることは、動きベクトル予測値を示す各インデックスをその出現頻度に基づいた適切な符号量で符号化することによって、インデックスの符号化効率を高める効果がある。
次に、図13を参照して動き予測器212について詳細に説明する。図13は、動き予測器112における動きベクトル予測値を示すインデックスを決定する手順を説明するための模式図である。
図13で、対象ブロックをHとし、フレームF401はブロックHを含むフレームである。フレームF402は既に符号化済みのフレームで、フレームF401とは時間方向で隣り合うフレームである。
フレームF401において、ブロックDをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックEをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF402において、ブロックAはブロックHの最も左上の画素と同じ空間位置の画素を含むブロックとする。ブロックBをブロックAの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックAの最も左上の画素の真左の画素を含むブロックとする。
図14は、動き予測器212における動きベクトル予測値を示すインデックスを決定する手順を説明するためのフローチャートである。動きベクトルのx成分、y成分はそれぞれ独立にインデックスが決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を示すインデックスを決定・出力し、次にy成分の予測値を示すインデックスを決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器212は、ラインL212を経由して入力される符号化済みのブロックA、E、Fの動きベクトルと、それに対応する参照フレーム番号と、ラインL205を経由して入力される対象ブロックHの動きベクトルと、ラインL216を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS601)。
なおステップS601で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS601において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAの動きベクトルとブロックHの動きベクトルの差分、ブロックEの動きベクトルとブロックHの動きベクトルの差分、ブロックFの動きベクトルとブロックHの動きベクトルの差分の3通りの差分値が算出される(ステップS602)。
次に、ステップS602で算出された3通りの差分値のうち、どの組み合わせの差分値が最小のものであるかが判定される。(ステップS603)。
ステップS603での判定の結果、もっとも小さい差分を与える組み合わせがブロックAとブロックHである場合には、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値であることを示すインデックスIndex_i=0(i=x,y)を生成する、またブロックAとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックEとブロックHである場合には、ブロックHの動きベクトル予測値はブロックEの動きベクトルと同じ値であることを示すインデックスIndex_i=1(i=x,y)を生成する、またブロックEとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックFとブロックHである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値であることを示すインデックスIndex_i=2(i=x,y)を生成する、またブロックAとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする(ステップS604)。
続いて、ステップS604で決定されたインデックスIndex_i(i=x,y)を出力する(ステップS605)。
最後に、ステップS604で決定された動きベクトル差分値MViD(i=x,y)を出力し(ステップS606)、処理を終了する。
なお、ステップS602において、動きベクトル予測値と実際の動きベクトルの差分を用いて動きベクトル予測値の決定を行ったが、その代わりに実際に符号化を行い、符号量と歪みの最適化(R-D最適化)によって動きベクトル予測値の決定を行ってもよい。
なお、図14のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を示すインデックスや動きベクトル差分値を同時に決定してもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図13に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをHとし、フレームF401はブロックHを含むフレームである。フレームF402は既に符号化済みのフレームである。
フレームF401において、ブロックDをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックEをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF402において、ブロックAはブロックDの動きベクトルが参照しているブロック、またはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロックとする。その際もブロックBをブロックAの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックAの最も左上の画素の真左の画素を含むブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックDが参照するブロック、あるいはブロックEが参照するブロック、あるいはブロックFが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(DあるいはEあるいはF)が参照するブロックの動きベクトルとして用いるものとする。
上述した実施形態は、同じフレームのブロック間で求めた動きベクトル差分値と、互いに異なるフレームのブロック間で求めた動きベクトル差分値を組み合わせて動きベクトルの予測を行っているが、互いに異なるフレームのブロック間で求めた動きベクトル差分値のみで動きベクトルの予測を行ってもよい。その際は、ブロックAとHの動きベクトルの差分、ブロックBとHの動きベクトルの差分、ブロックCとHの動きベクトルの差分の組み合わせのうち、差分値が最小となるものを用いてもよいし、さらにブロックA、B、Cの動きベクトル平均値とブロックHの動きベクトルの差分を候補に加えてもよい。
このとき、確率切替信号生成器213の詳細は図15のフローチャートに従うことが好ましい。確率切替信号は動きベクトル予測値を示すインデックスの発生確率の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えてエントロピー符号化を行うことで、データの発生確率に応じた適切な符号量でインデックスの符号化を行うことができる。
確率切替信号生成器213では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器213は、ラインL212を経由して入力される符号化済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号と、ラインL216を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS701)。
なおステップS701で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS701において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分、ブロックCの動きベクトルとブロックFの動きベクトルの差分、ブロックDの動きベクトルとブロックEの動きベクトルの差分、ブロックDの動きベクトルとブロックFの動きベクトルの差分の4通りが算出される(ステップS702)。
次に、ステップS702で算出された4通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS703)。
ステップS703での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックEである場合にはブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i(i=x,y)=0を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックEの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックFである場合には、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i(i=x,y)=0を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックDとブロックEである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i(i=x,y)=1を生成するとともに、その際の差分MViD(i=x,y)をブロックDとブロックEの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックDとブロックFである場合には、ブロックHの動きベクトル予測値はブロックEの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i(i=x,y)=2を生成するとともに、その際の動きベクトル差分値MViD(i=x,y)をブロックDとブロックFの動きベクトルの差分値とする。(ステップS704)。
最後に、ステップS704で決定された信号値Signal_i(i=x,y)およびMViD(i=x,y)を出力し(ステップS705)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。
なお、図15のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
このとき、エントロピー符号化器214では、あらかじめ複数所持してある動きベクトル予測値を示す各インデックスの発生確率分布のテーブルを、ラインL215を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって最も発生確率が高いインデックス、MViD(i=x,y)によってその発生確率を予測し、それに応じた確率テーブルへの切り替えを行う。
また、動き予測器212は以下に説明するようにしてもよい。図16を参照して動き予測器212について詳細に説明する。図16は、動き予測器112における動きベクトル予測値を示すインデックスを決定する手順を説明するための模式図である。
図16で、対象ブロックをHとし、フレームF501はブロックHを含むフレームである。フレームF502は既に符号化済みのフレームで、フレームF501とは時間方向で隣り合うフレームである。フレームF503は既に符号化済みのフレームで、フレームF502とは時間方向で隣り合うフレームである。
フレームF501において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF502において、ブロックDはブロックHの最も左上の画素と同じ空間位置の画素を含むブロック、ブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF503において、ブロックAはブロックDの最も左上の画素と同じ空間位置の画素を含むブロックとする。
図17は、動き予測器212における動きベクトル予測値を示すインデックスを決定する手順を説明するためのフローチャートである。動きベクトルのx成分、y成分はそれぞれ独立にインデックスが決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を示すインデックスを決定・出力し、次にy成分の予測値を示すインデックスを決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器212は、ラインL212を経由して入力される符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルと、それに対応する参照フレーム番号と、ラインL205を経由して入力される対象ブロックHの動きベクトルと、ラインL216を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS801)。
なおステップS801で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS801において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックHの動きベクトルの差分、ブロックCの動きベクトルとブロックHの動きベクトルの差分、ブロックDの動きベクトルとブロックHの動きベクトルの差分、ブロックGの動きベクトルとブロックHの動きベクトルの差分、ブロックFの動きベクトルとブロックHの動きベクトルの差分の5通りの差分値が算出される(ステップS802)。
次に、ステップS802で算出された5通りの差分値のうち、どの組み合わせの差分値が最小のものであるかが判定される。(ステップS803)。
ステップS803での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックHである場合には、ブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値であることを示すインデックスIndex_i=0(i=x,y)を生成する、またブロックBとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックCとブロックHである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値であることを示すインデックスIndex_i=1(i=x,y)を生成する、またブロックCとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックDとブロックHである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値であることを示すインデックスIndex_i=2(i=x,y)を生成する、またブロックDとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックGとブロックHである場合には、ブロックHの動きベクトル予測値はブロックGの動きベクトルと同じ値であることを示すインデックスIndex_i=3(i=x,y)を生成する、またブロックGとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックFとブロックHである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値であることを示すインデックスIndex_i=4(i=x,y)を生成する、またブロックFとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする(ステップS804)。
続いて、ステップS804で決定されたインデックスIndex_i(i=x,y)を出力する(ステップS805)。
最後に、ステップS804で決定された動きベクトル差分値MViD(i=x,y)を出力し(ステップS806)、処理を終了する。
なお、ステップS802において、動きベクトル予測値と実際の動きベクトルの差分を用いて動きベクトル予測値の決定を行ったが、その代わりに実際に符号化を行い、符号量と歪みの最適化(R-D最適化)によって動きベクトル予測値の決定を行ってもよい。
なお、図17のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を示すインデックスや動きベクトル差分値を同時に決定してもよい。
また、ステップS802において算出する差分は、ブロックBの動きベクトルとブロックHの動きベクトルの差分、ブロックCの動きベクトルとブロックHの動きベクトルの差分、ブロックDの動きベクトルとブロックHの動きベクトルの差分の3通りでもよい。その際もステップS803で最小となる組み合わせが判定され、ステップS804では、もっとも小さい差分を与える組み合わせがブロックBとブロックHである場合には、ブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値であることを示すインデックスIndex_i=0(i=x,y)を生成する、またブロックBとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックCとブロックHである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値であることを示すインデックスIndex_i=1(i=x,y)を生成する、またブロックCとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックDとブロックHである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値であることを示すインデックスIndex_i=2(i=x,y)を生成する、またブロックDとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。
また、ステップS302において算出する差分は、ブロックBの動きベクトルとブロックHの動きベクトルの差分、ブロックCの動きベクトルとブロックHの動きベクトルの差分の2通りでもよい。その際もステップS803で最小となる組み合わせが判定され、ステップS804では、もっとも小さい差分を与える組み合わせがブロックBとブロックHである場合には、ブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値であることを示すインデックスIndex_i=0(i=x,y)を生成する、またブロックBとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックCとブロックHである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値であることを示すインデックスIndex_i=1(i=x,y)を生成する、またブロックCとブロックHの動きベクトルの差分を、動きベクトル差分値MViD(i=x,y)とする。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図16に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをHとし、フレームF501はブロックHを含むフレームである。フレームF502は既に符号化済みのフレームである。フレームF503は既に符号化済みのフレームである。
フレームF501において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF502において、ブロックDはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロック、またはブロックGの動きベクトルが参照しているブロックとする。その際もブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF503において、ブロックAはブロックDの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックEが参照するブロック、あるいはブロックFが参照するブロック、あるいはブロックGが参照するブロック、あるいはブロックDが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(EあるいはFあるいはGあるいはD)が参照するブロックの動きベクトルとして用いるものとする。
このとき、確率切替信号生成器213の詳細は図18のフローチャートに従うことが好ましい。確率切替信号は動きベクトル予測値を示すインデックスの発生確率の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えてエントロピー符号化を行うことで、データの発生確率に応じた適切な符号量でインデックスの符号化を行うことができる。
確率切替信号生成器213では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器213は、ラインL212を経由して入力される符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルと対応する参照フレーム番号と、ラインL216を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS901)。
なおステップS901で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS901において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分、ブロックEの動きベクトルとブロックFの動きベクトルの差分、ブロックEの動きベクトルとブロックGの動きベクトルの差分の5通りが算出される(ステップS902)。
次に、ステップS902で算出された5通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS903)。
ステップS903での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックAとブロックDの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックEとブロックFである場合には、ブロックHの動きベクトル予測値はブロックGの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=3(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックEとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックEとブロックGである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=4(i=x,y)を生成するとともに、その際の動きベクトル差分値MViD(i=x,y)をブロックEとブロックGの動きベクトルの差分値とする。(ステップS904)。
最後に、ステップS904で決定された信号値Signal_i(i=x,y)およびMViD(i=x,y)を出力し(ステップS705)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。
なお、図18のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
また、ステップS902において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分の3通りでもよい。その際もステップS903で最小となる組み合わせが判定され、ステップS904では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックAとブロックDの動きベクトルの差分値とする。
また、ステップS902において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分の2通りでもよい。その際もステップS903で最小となる組み合わせが判定され、ステップS904では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図16に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをHとし、フレームF501はブロックHを含むフレームである。フレームF502は既に符号化済みのフレームである。フレームF503は既に符号化済みのフレームである。
フレームF501において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF502において、ブロックDはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロック、またはブロックGの動きベクトルが参照しているブロックとする。その際もブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF503において、ブロックAはブロックDの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックEが参照するブロック、あるいはブロックFが参照するブロック、あるいはブロックGが参照するブロック、あるいはブロックDが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(EあるいはFあるいはGあるいはD)が参照するブロックの動きベクトルとして用いるものとする。
このとき、エントロピー符号化器214では、あらかじめ複数所持してある動きベクトル予測値を示す各インデックスの発生確率分布のテーブルを、ラインL215を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって最も発生確率が高いインデックス、MViD(i=x,y)によってその発生確率を予測し、それに応じた確率テーブルへの切り替えを行う。
また、動き予測器212において動きベクトル予測値を示すインデックスを生成する代わりに、複数ある動きベクトル予測値決定方法の中からひとつを選択し、選択した決定方法示すインデックスを生成してもよい。この方法の詳細を図19、図20を参照して説明する。
図19は動き予測器212において複数ある動きベクトル予測値決定方法の中からひとつを選択し、選択した決定方法示すインデックスを生成する手順を説明するための模式図である。
図19で、対象ブロックをNとし、フレームF601はブロックNを含むフレームである。フレームF602は既に符号化済みのフレームで、フレームF601とは時間方向で隣り合うフレームである。
フレームF601において、ブロックJをブロックNの最も左上の画素の真左上の画素を含むブロック、ブロックKをブロックNの最も左上の画素の真上の画素を含むブロック、ブロックLをブロックNの最も右上の画素の真右上の画素を含むブロック、ブロックMをブロックNの最も左上の画素の真左の画素を含むブロックとする。
フレームF602において、ブロックEはブロックNの最も左上の画素と同じ空間位置の画素を含むブロックとする。ブロックAをブロックEの最も左上の画素の真左上の画素を含むブロック、ブロックBをブロックEの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックEの最も右上の画素の真右上の画素を含むブロック、ブロックDをブロックEの最も左下の画素の真左の画素を含むブロック、ブロックFをブロックEの最も右上の画素の真右の画素を含むブロック、ブロックGをブロックEの最も左下の画素の真左下の画素を含むブロック、ブロックHをブロックEの最も右下の画素の真下の画素を含むブロック、ブロックIをブロックEの最も右下の画素の真右下の画素を含むブロックとする。
図20は動き予測器212において複数ある動きベクトル予測値決定方法の中からひとつを選択し、選択した決定方法示すインデックスを生成する手順を説明するためのフローチャートである。
動きベクトルx成分、y成分はそれぞれ独立に予測値決定方法が選ばれるものとする。具体的にはまず動きベクトルのx成分の予測値決定方法を選択・出力し、次にy成分の予測値決定方法を選択・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器212は、ラインL212を経由して入力される符号化済みのブロックA、B、C、D、E、F、G、H、I、J、K、L、Mの動きベクトルと、対応する参照フレーム番号と、ラインL205を経由して取得される対象ブロックNの動きベクトルと、ラインL216を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS1001)。
なおステップS1001で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、G、H、I、J、K、Lの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1001において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いてブロックA、B、C、D、E、F、G、H、Iの動きベクトルの平均値と対象ブロックNの動きベクトルの差分、ブロックB、D、E、F、Hの動きベクトルの平均値と対象ブロックNの動きベクトルの差分、ブロックE、J、K、L、Mの動きベクトルの平均値と対象ブロックNの動きベクトルの差分の3通りの差分が計算される(ステップS1002)。
続いて、ステップS1002で算出した3通りの差分のうち、もっとも値が小さくなる組み合わせが判定される。(ステップS1003)。
ステップS1003での判定の結果、もっとも小さい差分を与える組み合わせがブロックA、B、C、D、E、F、G、H、Iと対象ブロックNである場合にはブロックNの動きベクトル予測値はブロックA、B、C、D、E、F、G、H、Iの動きベクトルの平均値に決定するという方法を示すインデックスIndex_i=0(i=x,y)を生成するとともに、その方法を用いたときの動きベクトル予測値と対象ブロックの動きベクトルとの差分を動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分を与える組み合わせがブロックB、D、E、F、Hと対象ブロックNである場合にはブロックNの動きベクトル予測値はブロックB、D、E、F、Hの動きベクトルの平均値に決定するという方法を示すインデックスIndex_i=1(i=x,y)を生成するとともに、その方法を用いたときの動きベクトル予測値と対象ブロックの動きベクトルとの差分を動きベクトル差分値MViD(i=x,y)とする。もっとも小さい差分平均値を与える組み合わせがブロックE、J、K、L、Mと対象ブロックNである場合にはブロックNの動きベクトル予測値はブロックE、J、K、L、Mの動きベクトルの平均値に決定するという方法を示すインデックスIndex_i=2(i=x,y)を生成するとともに、その方法を用いたときの動きベクトル予測値と対象ブロック動きベクトルとの差分を動きベクトル差分値MViD(i=x,y)とする(ステップS1004)。
次に、ステップS1004で決定されたインデックスIndex_i(i=x,y)を出力する(ステップS1005)。
最後にステップS1004で決定された動きベクトル差分値MViD(i=x,y)を出力し(ステップS1006)、処理を終了する。
なお、ステップS1002において各ブロック群の動きベクトルの平均値の変わりに、各ブロック群の動きベクトルの中間値を用いてもよい。その際は、ステップS1004で生成されるインデックスは、各ブロック群の平均値を動きベクトル予測値とすることを示す代わりに各ブロック群の中間値を動きベクトル予測値とすることを示すインデックスとなる。
なお、ステップS1002において、動きベクトル予測値と実際の動きベクトルの差分を用いて動きベクトル予測値の決定方法を選択したが、その代わりに実際に符号化を行い、符号量と歪みの最適化(R-D最適化)によって動きベクトル予測値の決定方法を選択してもよい。
図20のフローチャートに示される実施形態では3通りの動きベクトル予測値決定方法の中から1つを選択したが、3通りのうちいずれか2つの中からどちらかを選択するようにしてもよい。
また、図20のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分それぞれの決定方法を示すインデックスを同時に選択してもよい。
さらに、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図19に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをNとし、フレームF601はブロックNを含むフレームである。フレームF602は既に符号化済みのフレームである。
フレームF601において、ブロックJをブロックNの最も左上の画素の真左上の画素を含むブロック、ブロックKをブロックNの最も左上の画素の真上の画素を含むブロック、ブロックLをブロックNの最も右上の画素の真右上の画素を含むブロック、ブロックMをブロックNの最も左上の画素の真左の画素を含むブロックとする。
フレームF602において、ブロックEはブロックJの動きベクトルが参照しているブロック、またはブロックKの動きベクトルが参照しているブロック、またはブロックLの動きベクトルが参照しているブロック、またはブロックMの動きベクトルが参照しているブロックとする。その際もブロックAをブロックEの最も左上の画素の真左上の画素を含むブロック、ブロックBをブロックEの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックEの最も右上の画素の真右上の画素を含むブロック、ブロックDをブロックEの最も左下の画素の真左の画素を含むブロック、ブロックFをブロックEの最も右上の画素の真右の画素を含むブロック、ブロックGをブロックEの最も左下の画素の真左下の画素を含むブロック、ブロックHをブロックEの最も右下の画素の真下の画素を含むブロック、ブロックIをブロックEの最も右下の画素の真右下の画素を含むブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックJが参照するブロック、あるいはブロックKが参照するブロック、あるいはブロックLが参照するブロック、あるいはブロックMが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(JあるいはKあるいはLあるいはM)が参照するブロックの動きベクトルとして用いるものとする。
このとき、確率切替信号生成器213の詳細は図21のフローチャートで説明される。確率切替信号は動きベクトル予測値決定方法を示すインデックスの尤度を示すものであって、この信号に基づいて確率テーブルを切り替えてエントロピー符号化を行うことで、データの発生確率に応じた適切な符号量でインデックスの符号化を行うことができる。
確率切替信号生成器213では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器213は、ラインL212を経由して入力される符号化済みのブロックA、B、C、D、E、F、G、H、I、J、K、L、Mの動きベクトルと対応する参照フレーム番号と、ラインL216を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS1101)。
なおステップS1101で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、G、H、I、J、K、Lの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1101において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAとブロックEの動きベクトルの差分、ブロックCとブロックEの動きベクトルの差分、ブロックGとブロックEの動きベクトルの差分、ブロックIとブロックEの動きベクトルの差分の計4通りの差分の平均値を算出する。また、ブロックBとブロックEの動きベクトルの差分、ブロックDとブロックEの動きベクトルの差分、ブロックFとブロックEの動きベクトルの差分、ブロックHとブロックEの動きベクトルの差分の計4通りの差分の平均値を算出する。また、ブロックJとブロックKの動きベクトルの差分、ブロックJとブロックMの動きベクトルの差分、ブロックEとブロックKの動きベクトルの差分、ブロックEとブロックMの動きベクトルの差分の計4通りの差分の平均値を算出する(ステップS1102)。
続いて、ステップS1102で算出した3通りの差分平均値のうち、もっとも値が小さくなる組み合わせが判定される。(ステップS1103)。
ステップS1103での判定の結果、もっとも小さい差分平均値を与える組み合わせがブロックAとE、ブロックCとE、ブロックGとE、ブロックIとEである場合にはブロックNの動きベクトル予測値はブロックA、B、C、D、E、F、G、H、Iの動きベクトルの平均値に決定することが尤もらしいことを示す信号Signal_i=(i=x,y)0を生成するとともに、その際の平均差分値MViD_mean(i=x,y)をブロックAとブロックEの動きベクトルの差分、ブロックCとブロックEの動きベクトルの差分、ブロックGとブロックEの動きベクトルの差分、ブロックIとブロックEの動きベクトルの差分の計4通りの差分の平均値とする。もっとも小さい差分平均値を与える組み合わせがブロックBとE、ブロックDとE、ブロックFとE、ブロックHとEである場合にはブロックNの動きベクトル予測値はブロックB、D、E、F、Hの動きベクトルの平均値に決定することが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の平均差分値MViD_mean(i=x,y)をブロックBとブロックEの動きベクトルの差分、ブロックDとブロックEの動きベクトルの差分、ブロックFとブロックEの動きベクトルの差分、ブロックHとブロックEの動きベクトルの差分の計4通りの差分の平均値とする。もっとも小さい差分平均値を与える組み合わせがブロックJとK、ブロックJとM、ブロックEとK、ブロックEとMである場合にはブロックNの動きベクトル予測値はブロックJ、K、L、M、Eの動きベクトルの平均値に決定することが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の平均差分値MViD_mean(i=x,y)をブロックJとブロックKの動きベクトルの差分、ブロックJとブロックMの動きベクトルの差分、ブロックEとブロックKの動きベクトルの差分、ブロックEとブロックMの動きベクトルの差分の計4通りの差分の平均値とする(ステップS1104)。
最後に、ステップS1104で決定されたインデックスIndex_i(i=x,y)および動きベクトル平均差分値MViD_mean(i=x,y)を出力し(ステップS1105)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。
なお、図21のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
なお、ステップS1102において、各ブロック群の動きベクトルの類似性を表す情報として平均差分値を用いたが、そのかわりに各ブロック群の分散値や標準偏差を用いてもよい。その際にはステップS1104で生成される平均差分値は分散値あるいは標準偏差となる。
図21のフローチャートに示される実施形態では3通りの確率切替信号の中から1つを選択したが、3通りのうちいずれか2つの中からどちらかを選択するようにしてもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図13に示されるブロックの位置関係は以下のように定めてもよい。ただし、その定め方は動き予測器212と対応させる必要がある。
対象ブロックをNとし、フレームF601はブロックNを含むフレームである。フレームF602は既に符号化済みのフレームである。
フレームF601において、ブロックJをブロックNの最も左上の画素の真左上の画素を含むブロック、ブロックKをブロックNの最も左上の画素の真上の画素を含むブロック、ブロックLをブロックNの最も右上の画素の真右上の画素を含むブロック、ブロックMをブロックNの最も左上の画素の真左の画素を含むブロックとする。
フレームF602において、ブロックEはブロックJの動きベクトルが参照しているブロック、またはブロックKの動きベクトルが参照しているブロック、またはブロックLの動きベクトルが参照しているブロック、またはブロックMの動きベクトルが参照しているブロックとする。その際もブロックAをブロックEの最も左上の画素の真左上の画素を含むブロック、ブロックBをブロックEの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックEの最も右上の画素の真右上の画素を含むブロック、ブロックDをブロックEの最も左下の画素の真左の画素を含むブロック、ブロックFをブロックEの最も右上の画素の真右の画素を含むブロック、ブロックGをブロックEの最も左下の画素の真左下の画素を含むブロック、ブロックHをブロックEの最も右下の画素の真下の画素を含むブロック、ブロックIをブロックEの最も右下の画素の真右下の画素を含むブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックJが参照するブロック、あるいはブロックKが参照するブロック、あるいはブロックLが参照するブロック、あるいはブロックMが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(JあるいはKあるいはLあるいはM)が参照するブロックの動きベクトルとして用いるものとする。
このとき、エントロピー符号化器214では、あらかじめ複数所持してある動きベクトル予測値決定方法を示す各インデックスの発生確率分布のテーブルを、ラインL215を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって最も発生確率が高いインデックス、MViD_mean(i=x,y)によってその発生確率を予測し、それに応じた確率テーブルへの切り替えを行う。
最後に、コンピュータを動画像符号化装置20として動作させる動画像符号化プログラムについて説明する。図52は、本実施形態に係る動画像符号化プログラムP20の構成を示し、この動画像符号化プログラムP20は、記録媒体に格納されて提供される。記録媒体としては、フレキシブルディスク、CD−ROM、DVD、ROM等の記録媒体あるいは半導体メモリ等が例示される。なお、記録媒体に記憶されたプログラムを実行するためのコンピュータの構成は、既に説明した図63、図64の構成と同様であるため、重複した説明は省略する。
図52に示すように、動画像符号化プログラムP20は、処理を統括するメインモジュールP201と、ブロック分割モジュールP202と、変換モジュールP203と、量子化モジュールP204と、逆量子化モジュールP205と、逆変換モジュールP206と、記憶モジュールP207と、予測信号生成モジュールP208と、動き予測モジュールP209と、動き検出モジュールP210と、加算モジュールP211と、減算モジュールP212と、確率切替信号生成モジュールP213と、エントロピー符号化モジュールP214とを備えている。
ブロック分割モジュールP202、変換モジュールP203、量子化モジュールP204、逆量子化モジュールP205、逆変換モジュールP206、予測信号生成モジュールP208、動き予測モジュールP209、動き検出モジュールP210、加算モジュールP211、減算モジュールP212、確率切替信号生成モジュールP213、エントロピー符号化モジュールP214がコンピュータに実現させる機能は、それぞれ図12のブロック分割器201、変換器207、量子化器208、逆量子化器209、逆変換器210、予測信号生成器204、動き予測器212、動き検出器203、加算器211、減算器206、確率切替信号生成器213、エントロピー符号化器214の機能と同様である。記憶モジュールP207がコンピュータに実現させる機能は、フレームメモリ202及び動きベクトルメモリ205の機能と同様である。
[第3実施形態]
図22を用いて、本発明に係る動画像符号化装置30について説明する。
動画像符号化装置30は、機能的な構成要素として、図22に示すように、ブロック分割器301と、フレームメモリ302と、動き検出器303と、予測信号生成器304と、動きベクトルメモリ305と、減算器306と、変換器307と、量子化器308と、逆量子化器309と、逆変換器310と、加算器311と、動き予測器312と、減算器313と、確率切替信号生成器314と、エントロピー符号化器315とを備えて構成される。
動画像符号化装置30に入力される入力映像信号(動画像信号)は、フレーム単位の画像信号(以下、フレーム画像信号)の時間系列で構成されている。
ブロック分割器301は、ラインL301を経由して入力された入力映像信号の符号化対象となるフレーム画像信号を複数の領域(ブロック)に分割し、ラインL302を経由して符号化対象のブロック(以下、対象ブロック)の画像信号を出力する。本実施形態では8×8の画素からなるブロックに分割するが、それ以外の大きさまたは形に分割してもよい。このブロック単位で以下の符号化処理が行われる。
フレームメモリ302は、ラインL303を経由して入力される過去に符号化済みのフレーム画像信号(以下、参照フレーム画像信号)を格納し、必要に応じてラインL304を経由して出力する。
動き検出器303は、ラインL302を経由して入力される対象ブロックの画像信号のパターンに類似した画像信号パターンを、ラインL304を経由して入力される参照フレーム画像信号から所定範囲内で探索し、両画像信号パターン間の空間的な変位量である動きベクトルを検出し、ラインL305を経由して出力する。また、その動きベクトルが参照するフレームの番号(以下、参照フレーム番号)を検出し、ラインL316を経由して出力する。
予測信号生成器304は、ラインL305を経由して入力される対象ブロックの動きベクトル信号値とラインL316を経由して入力される参照フレーム番号と、ラインL304を経由して入力される参照フレーム画像信号から、対象ブロックに対する予測画像信号を生成し、ラインL306を経由して出力する。
動きベクトルメモリ305は、過去に符号化済みの動きベクトルや参照フレーム番号と併せて、ラインL305を経由して入力される動きベクトルとラインL316を経由して入力される参照フレーム番号を格納し、必要に応じてラインL312を経由して出力する。
減算器306は、ラインL302を経由して入力された対象ブロックの画像信号から、ラインL306を経由して入力された対象ブロックに対する予測画像信号を減算し、残差信号を生成し、ラインL307を経由して出力する。
変換器307は、ラインL307を経由して入力された残差信号を直交変換し、ラインL308を経由して変換係数を出力する。
量子化器308は、ラインL308を経由して入力された変換係数を量子化し、ラインL309を経由して量子化された変換係数を出力する。
逆量子化器309は、ラインL309を経由して入力された量子化された変換係数を逆量子化し、ラインL310を経由して復元された変換係数を出力する。
逆変換器310は、ラインL310を経由して入力された変換係数を逆直交変換し、ラインL311を経由して復元された残差信号を出力する。
加算器311は、ラインL311を経由して入力された残差信号と、ラインL306を経由して入力された対象ブロックに対する予測画像信号を加算し、対象ブロックの画像信号を復元し、ラインL303を経由して出力する。
動き予測器312は、ラインL312を経由して入力される過去に符号化済みのブロックの動きベクトルと、それに対応した参照フレーム番号と、ラインL316を経由して入力される対象ブロックの参照フレーム番号から、対象ブロックの動きベクトル予測値を算出し、ラインL313を経由して出力する。動き予測器312の詳細な動作は、動き予測器112と同じであるとし、記載を省略する。
減算器313は、ラインL305を経由して入力された対象ブロックの動きベクトル信号値から、ラインL313を経由して入力された対象ブロックの動きベクトル予測値を減算し、動きベクトル差分値を生成する。そしてラインL314を経由して動きベクトル差分値を出力する。
確率切替信号生成器314はラインL312を経由して入力される過去に符号化済みのブロックの動きベクトルと、それに対応する参照フレーム番号と、ラインL316を経由して入力される対象ブロックの参照フレーム番号から、後述するフローに従って切り替える確率テーブルを示す確率切替信号を生成し、ラインL315を経由して出力する。
エントロピー符号化器315は、ラインL309を経由して入力された量子化された変換係数を符号化する。また、ラインL315を経由して入力された確率切替信号に基づいて、エントロピー符号化を行う際に用いる確率テーブルを後述の方法で切り替えたのち、ラインL314を経由して入力された動きベクトル差分値を符号化する。そして符号化された変換係数および動きベクトル差分値を多重化したうえで、圧縮ストリームをラインL316に出力する。
上記のようにエントロピー符号化を行う際に用いる確率テーブルを切り替えることは、動きベクトル差分値をその出現頻度に基づいた適切な符号量で符号化することによって、符号化効率を高める効果がある。
確率切替信号生成器の314の詳細な動作は、動き予測器312の動作と対応させることが好ましい。以下では、動きベクトル予測値は符号化済みのブロックの動きベクトルから決定され、動きベクトル予測値を示すためのインデックスを符号化しない形態において説明を行うが、動きベクトル予測値を示すためのインデックスを符号化する形態においても適応できる。
動き予測器312の動作が、前述の動き予測器112の図2と図4を用いて説明される動作をする場合、確率切替信号生成器の314の詳細な動作は図2の模式図と、図23のフローチャートに従うことが好ましい。図2の説明は前述の動き予測器112における説明と同じである。
このとき、確率切替信号は動きベクトル差分値の発生確率分布の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えてエントロピー符号化を行うことで、データの発生確率に応じた適切な符号量で動きベクトル差分値の符号化を行うことができる。
確率切替信号生成器314では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器314は、ラインL312を経由して入力される符号化済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号と、ラインL316を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS1201)。
なおステップS1201で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1201において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分、ブロックCの動きベクトルとブロックFの動きベクトルの差分、ブロックDの動きベクトルとブロックEの動きベクトルの差分、ブロックDの動きベクトルとブロックFの動きベクトルの差分の4通りが算出される(ステップS1202)。
次に、ステップS1202で算出された4通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS1203)。
ステップS1203での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックEである場合にはブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i(i=x,y)=0を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックEの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックFである場合には、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックDとブロックEである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックDとブロックEの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックDとブロックFである場合には、ブロックHの動きベクトル予測値はブロックEの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の動きベクトル差分値MViD(i=x,y)をブロックDとブロックFの動きベクトルの差分値とする。(ステップS1204)。
最後に、ステップS1204で決定された信号値Signal_i(i=x,y)およびMViD(i=x,y)を出力し(ステップS1205)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。あるいはMViD(i=x,y)のみでもよい。
なお、図23のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
このとき、エントロピー符号化器315では、あらかじめ複数所持してある動きベクトル差分値の発生確率分布のテーブルを、ラインL315を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって動きベクトル予測値を引用する方向(x軸方向あるいはy軸方向あるいは時間方向)を予測し、MViD(i=x,y)によって動きベクトル差分値の発生確率を予測し、それらに応じた確率テーブルへの切り替えを行う。
動き予測器312の動作が、前述の動き予測器112の図6と図7を用いて説明される動作をする場合、確率切替信号生成器の314の詳細な動作は図6の模式図と、図24のフローチャートに従うことが好ましい。図6の説明は前述の動き予測器112における説明と同じである。
このとき、確率切替信号は動きベクトル差分値の発生確率分布の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えてエントロピー符号化を行うことで、データの発生確率に応じた適切な符号量で動きベクトル差分値の符号化を行うことができる。
確率切替信号生成器314では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器314は、ラインL312を経由して入力される符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルと対応する参照フレーム番号と、ラインL316を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS1301)。
なおステップS1301で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1301において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分、ブロックEの動きベクトルとブロックFの動きベクトルの差分、ブロックEの動きベクトルとブロックGの動きベクトルの差分の5通りが算出される(ステップS1302)。
次に、ステップS1302で算出された5通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS1303)。
ステップS1303での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックAとブロックDの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックEとブロックFである場合には、ブロックHの動きベクトル予測値はブロックGの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=3(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックEとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックEとブロックGである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=4(i=x,y)を生成するとともに、その際の動きベクトル差分値MViD(i=x,y)をブロックEとブロックGの動きベクトルの差分値とする。(ステップS1304)。
最後に、ステップS1304で決定された信号値Signal_i(i=x,y)およびMViD(i=x,y)を出力し(ステップS705)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。また、MViD(i=x,y)のみでもよい。
なお、図24のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
また、ステップS1302において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分の3通りでもよい。その際もステップS1303で最小となる組み合わせが判定され、ステップS1304では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックAとブロックDの動きベクトルの差分値とする。
また、ステップS1302において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分の2通りでもよい。その際もステップS1303で最小となる組み合わせが判定され、ステップS1304では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。
なお、図24のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
このとき、エントロピー符号化器315では、あらかじめ複数所持してある動きベクトル差分値の発生確率分布のテーブルを、ラインL315を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって動きベクトル予測値を引用する方向(x軸方向あるいはy軸方向あるいは時間方向)を予測し、MViD(i=x,y)によって動きベクトル差分値の発生確率を予測し、それらに応じた確率テーブルへの切り替えを行う。
動き予測器312の動作が、前述の動き予測器112の図8と図9を用いて説明される動作と同じ場合、確率切替信号生成器の314の詳細な動作は図8の模式図と、図25のフローチャートに従うことが好ましい。図8の説明は前述の動き予測器112における説明と同じである。
このとき、確率切替信号は動きベクトル差分値の発生確率分布の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えてエントロピー符号化を行うことで、データの発生確率に応じた適切な符号量で動きベクトル差分値の符号化を行うことができる。
確率切替信号生成器314では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器314は、ラインL312を経由して入力される符号化済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルと対応する参照フレーム番号と、ラインL316を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS1401)。
なおステップS201で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1401において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの分散、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの分散、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの分散、の3組の分散をそれぞれ算出する。(ステップS1402)
次に、ステップS1402で算出された3通りの分散のうち、どの組み合わせの分散が最小のものであるかが判定される。(ステップS1403)。
ステップS1403での判定の結果、もっとも小さい差分を与える組み合わせがブロックAとブロックBとブロックCである場合には、ブロックJの動きベクトル予測値はブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの平均値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の分散MVi_var(i=x,y)をブロックAとブロックBとブロックCの動きベクトルの分散とする。もっとも小さい差分を与える組み合わせがブロックDとブロックEとブロックFである場合には、ブロックJの動きベクトル予測値はブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの平均値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の分散MVi_var(i=x,y)をブロックDとブロックEとブロックFの動きベクトルの分散とする。もっとも小さい差分を与える組み合わせがブロックGとブロックHとブロックIである場合には、ブロックJの動きベクトル予測値はブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの平均値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の分散MVi_var(i=x,y)をブロックGとブロックHとブロックIの動きベクトルの分散とする。(ステップS1404)。
最後に、ステップS1404で決定された信号値Signal_i(i=x,y)およびMVi_var(i=x,y)を出力し(ステップS1405)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。また、MVi_var(i=x,y)のみでもよい。
なお、図25のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
また、ステップS1402において動きベクトルの類似性をあらわす値として分散を用いたが、各ブロック間の動きベクトルの差分値や、それら複数の差分値の平均を用いてもよい。
ステップS1404において、3つの動きベクトルの平均値を動きベクトルの予測値とすることが尤もらしいことを示す信号を生成したが、3つの動きベクトルの中間値、あるいはいずれかひとつの値を予測値とすることが尤もらしいことを示していてもよい。
図25では時間方向、空間方向にそれぞれ連続する3ブロックの動きベクトルを参照して確率切替信号の決定を行ったが、これは空間方向のみでもよい。またそれぞれの方向に2ブロックのみ、あるいは4ブロック以上のブロックを用いてもよい。
このとき、エントロピー符号化器315では、あらかじめ複数所持してある動きベクトル差分値の発生確率分布のテーブルを、ラインL315を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって動きベクトル予測値を引用する方向(x軸方向あるいはy軸方向あるいは時間方向)を予測し、MViD_var(i=x,y)によって動きベクトル差分値の発生確率を予測し、それらに応じた確率テーブルへの切り替えを行う。
最後に、コンピュータを動画像符号化装置30として動作させる動画像符号化プログラムについて説明する。図53は、本実施形態に係る動画像符号化プログラムP30の構成を示し、この動画像符号化プログラムP30は、記録媒体に格納されて提供される。記録媒体としては、フレキシブルディスク、CD−ROM、DVD、ROM等の記録媒体あるいは半導体メモリ等が例示される。なお、記録媒体に記憶されたプログラムを実行するためのコンピュータの構成は、既に説明した図63、図64の構成と同様であるため、重複した説明は省略する。
図53に示すように、動画像符号化プログラムP30は、処理を統括するメインモジュールP301と、ブロック分割モジュールP302と、変換モジュールP303と、量子化モジュールP304と、逆量子化モジュールP305と、逆変換モジュールP306と、記憶モジュールP307と、予測信号生成モジュールP308と、動き予測モジュールP309と、動き検出モジュールP310と、加算モジュールP311と、減算モジュールP312と、確率切替信号生成モジュールP313と、エントロピー符号化モジュールP314とを備えている。
ブロック分割モジュールP302、変換モジュールP303、量子化モジュールP304、逆量子化モジュールP305、逆変換モジュールP306、予測信号生成モジュールP308、動き予測モジュールP309、動き検出モジュールP310、加算モジュールP311、確率切替信号生成モジュールP313、エントロピー符号化モジュールP314がコンピュータに実現させる機能は、それぞれ図22のブロック分割器301、変換器307、量子化器308、逆量子化器309、逆変換器310、予測信号生成器304、動き予測器312、動き検出器303、加算器311、確率切替信号生成器314、エントロピー符号化器315の機能と同様である。記憶モジュールP307がコンピュータに実現させる機能は、フレームメモリ302及び動きベクトルメモリ305の機能と同様である。また、減算モジュールP312がコンピュータに実現させる機能は、減算器306、313の機能と同様である。
[第4実施形態]
図26を用いて、本発明に係る動画像復号装置40について説明する。
動画像復号装置40は、機能的な構成要素として、図19に示すように、データ解析器401と、逆量子化器402と、逆変換器403と、フレームメモリ404と、動きベクトルメモリ405と、動き予測器406と、加算器407と、予測信号生成器408と、加算器409とを備えて構成される。
動画像復号装置40には、上述した動画像符号化装置によって符号化された圧縮ストリームを入力する。この圧縮ストリームには、復号対象となるブロックの原信号と予測信号の差分を表す残差信号と、復号対象となるブロックの予測信号の生成に関する情報が含まれている。
データ解析器401は、ラインL401を経由して入力された圧縮ストリームを解析することにより、直行変換および量子化された復号の対象となるブロック(以下、対象ブロック)の残差信号を抽出しラインL402を経由して出力する。また、対象ブロックの動きベクトルとその予測値の差分である動きベクトル差分値を抽出し、ラインL403を経由して出力する、また対象ブロックの参照フレーム番号を抽出し、ラインL404を経由して出力する。
逆量子化器402は、ラインL402を経由して入力された量子化された変換係数を逆量子化し、ラインL405を経由して復元された変換係数を出力する。
逆変換器403は、ラインL405を経由して入力された変換係数を逆直交変換し、ラインL406を経由して復元された残差信号を出力する。
フレームメモリ404は、ラインL407を経由して入力される過去に復号済みのフレーム画像信号(以下、参照フレーム画像信号)を格納し、必要に応じてラインL408を経由して出力する。
動きベクトルメモリ405は、過去に復号済みの動きベクトルとそれに対応した参照フレーム番号と併せて、ラインL409を経由して入力される対象ブロックの動きベクトルとラインL404を経由して入力される対象ブロックの参照フレーム番号を格納し、必要に応じてラインL410を経由して出力する。
動き予測器406は、ラインL410を経由して入力される過去に復号済みのブロックの動きベクトルから、後述のフローに従って対象ブロックの動きベクトル予測値を算出し、ラインL411を経由して出力する。
加算器407は、ラインL411を経由して入力された動きベクトル予測値と、ラインL403を経由して入力された動きベクトル差分値を加算し、対象ブロックの動きベクトルを復元し、ラインL409を経由して出力する。
予測信号生成器408は、ラインL409を経由して入力される対象ブロックの動きベクトル信号値と、ラインL404を経由して入力される対象ブロックの参照フレーム番号と、ラインL408を経由して入力される参照フレーム画像信号から、対象ブロックに対する予測画像信号を生成し、ラインL412を経由して出力する。
加算器409は、ラインL406を経由して入力された残差信号と、ラインL412を経由して入力された対象ブロックに対する予測画像信号を加算し、対象ブロックの画像信号を復元し、ラインL407を経由して出力する。
次に、図27を参照して動き予測器406について詳細に説明する。図27は、動き予測器406における動きベクトル予測値を決定する手順を説明するための模式図である。
図27で、対象ブロックをHとし、フレームF701はブロックHを含むフレームである。フレームF702は既に復号済みのフレームで、フレームF701とは時間方向で隣り合うフレームである。
フレームF701において、ブロックDをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックEをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF702において、ブロックAはブロックHの最も左上の画素と同じ空間位置の画素を含むブロックとする。ブロックBをブロックAの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックAの最も左上の画素の真左の画素を含むブロックとする。
図28は、動き予測器406における動きベクトル予測値を決定する手順を説明するためのフローチャートである。
まず動き予測器406は、ラインL410を経由して入力される復号済みのブロックA、B、C、E、Fの動きベクトルと対応する参照フレーム番号を取得する(ステップS1501)。
なおステップS1501で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1501において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分、ブロックCの動きベクトルとブロックFの動きベクトルの差分が算出される(ステップS1502)。
次に、ステップS1502で算出された2通りの差分のうち、少なくとも1つが閾値以下かどうかが判定される(ステップS1503)。
ステップS1503での判定の結果、2通りの差分のうち、少なくとも1つが閾値以下ならば(ステップS1503:YES)処理をステップS1504に進める。2通りの差分がともに閾値より大きいならば(ステップS1503:NO)処理をステップS1505に進める。
ステップS1504では、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。
ステップS1505では、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定される。
最後に、決定された値PMVi(i=x,y)を出力し(ステップS1506)、処理を終了する。
なお、ステップS1503における判定は2通りの差分の両方が閾値以下かどうかを判定しても良い。
また、ステップS1505でブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値としたが、動きベクトルをゼロベクトル(すなわち、動きベクトルの予測をしない)としてもよい。あらかじめ決められた任意の動きベクトルを予測値としてもよい。
また、動き予測器406における動きベクトル予測値の決定は、図29のフローチャートに従ってもよい。
図29では、動きベクトルのx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器406は、ラインL410を経由して入力される復号済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号を取得する(ステップS1601)。
なおステップS1601で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1601において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分、ブロックCの動きベクトルとブロックFの動きベクトルの差分、ブロックDの動きベクトルとブロックEの動きベクトルの差分、ブロックDの動きベクトルとブロックFの動きベクトルの差分の4通りが算出される(ステップS1602)。
次に、ステップS1602で算出された4通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS1603)。
ステップS1603での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックEである場合にはブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。ブロックCとブロックFである場合には、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。ブロックDとブロックEである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定される。ブロックDとブロックFである場合には、ブロックHの動きベクトル予測値はブロックEの動きベクトルと同じ値に決定される(ステップS1604)。
最後に、ステップS1604で決定された値PMVi(i=x,y)を出力し(ステップS1605)、処理を終了する。
なお、図29のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、動き予測器406における動きベクトル予測値を決定する手順は図30で説明されるフローチャートに従ってもよい。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器406は、ラインL410を経由して入力される復号済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号を取得する(ステップS1701)。
なおステップS1701で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1701において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックDの動きベクトルとブロックEの動きベクトルの差分、およびブロックDの動きベクトルとブロックFの動きベクトルの差分が算出され、前者のほうが大きい場合(ステップS1702:YES)は処理をステップS1703に進める。それに該当しない場合(ステップS1702:NO)は処理をステップS1704に進める(ステップS1702)。
ステップS1703では、ブロックEの動きベクトルとブロックBの動きベクトルの差分、およびブロックDの動きベクトルとブロックFの動きベクトルの差分が算出され、前者のほうが大きい場合(ステップS1703:YES)は処理をステップS1705に進める。それに該当しない場合(ステップS1703:NO)は処理をステップS1706に進める。
ステップS1704では、ブロックCの動きベクトルとブロックFの動きベクトルの差分、およびブロックCの動きベクトルとブロックAの動きベクトルの差分が算出され、前者のほうが大きい場合(ステップS1704:YES)は処理をステップS1707に進める。それに該当しない場合(ステップS1704:NO)は処理をステップS1708に進める。
ステップS1705では、ブロックHの動きベクトル予測値はブロックEの動きベクトルと同じ値に決定される。
ステップS1706では、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。
ステップS1707では、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定される。
ステップS1708では、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定される。
最後に、決定された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS1709)、処理を終了する。
なお、図30のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図27に示されるブロックの位置関係は以下のように定めてもよい。その際の動きベクトル予測値を決定する手順は図28あるいは図29あるいは図30で説明されるフローチャートのどれに従ってもよい。
対象ブロックをHとし、フレームF701はブロックHを含むフレームである。フレームF702は既に復号済みのフレームである。
フレームF701において、ブロックDをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックEをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF702において、ブロックAはブロックDの動きベクトルが参照しているブロック、またはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロックとする。その際もブロックBをブロックAの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックAの最も左上の画素の真左の画素を含むブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックDが参照するブロック、あるいはブロックEが参照するブロック、あるいはブロックFが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(DあるいはEあるいはF)が参照するブロックの動きベクトルとして用いるものとする。
また、動き予測器406における動きベクトルの予測値の決定は、以下に示すように行われても良い。
図31は、動き予測器406における動きベクトルの予測値の決定手順の説明に用いる模式図である。
図31で、対象ブロックをHとし、フレームF801はブロックHを含むフレームである。フレームF802は既に復号済みのフレームで、フレームF801とは時間方向で隣り合うフレームである。フレームF803は既に復号済みのフレームで、フレームF802とは時間方向で隣り合うフレームである。
フレームF801において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF802において、ブロックDはブロックHの最も左上の画素と同じ空間位置の画素を含むブロック、ブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF803において、ブロックAはブロックDの最も左上の画素と同じ空間位置の画素を含むブロックとする。
図32は、動き予測器406における動きベクトル予測値を決定する手順を説明するためのフローチャートである。
図32では、動きベクトルのx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器406は、ラインL410を経由して入力される復号済みのブロックA、B、C、D、E、F、Gの動きベクトルと対応する参照フレーム番号を取得する(ステップS1801)。
なおステップS1801で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、F、Gの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1801において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分、ブロックEの動きベクトルとブロックFの動きベクトルの差分、ブロックEの動きベクトルとブロックGの動きベクトルの差分の5通りが算出される(ステップS1802)。
次に、ステップS1802で算出された5通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS1803)。
ステップS1803での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定される。ブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定される。ブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定される。ブロックEとブロックFである場合には、ブロックHの動きベクトル予測値はブロックGの動きベクトルと同じ値に決定される。ブロックEとブロックGである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定される。(ステップS1804)。
最後に、ステップS1804で決定された値PMVi(i=x,y)を出力し(ステップS1805)、処理を終了する。
なお、図32のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、ステップS1802において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分の3通りでもよい。その際もステップS1803で最小となる組み合わせが判定され、ステップS1804では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定される。ブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定される。ブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定される。
また、ステップS1802において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分の2通りでもよい。その際もステップS1803で最小となる組み合わせが判定され、ステップS1804では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定される。ブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定される。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図31に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをHとし、フレームF801はブロックHを含むフレームである。フレームF802は既に復号済みのフレームである。フレームF803は既に復号済みのフレームである。
フレームF801において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF802において、ブロックDはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロック、またはブロックGの動きベクトルが参照しているブロックとする。その際もブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF803において、ブロックAはブロックDの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックEが参照するブロック、あるいはブロックFが参照するブロック、あるいはブロックGが参照するブロック、あるいはブロックDが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(EあるいはFあるいはGあるいはD)が参照するブロックの動きベクトルとして用いるものとする。
また、動き予測器406における動きベクトルの予測値の決定は、以下に示すように空間的に1画素以上隔てられたブロックの動きベクトルや、時間方向で1フレーム以上隔てられたフレームにあるブロックの動きベクトルに基づいて行われてもよい。
このような動きベクトルの予測値の決定方法は、動きベクトルの大勢を反映した予測をすることで、高精度の動きベクトル予測値を得る効果がある。また、ノイズや局所的な変化による影響を打ち消す効果もある。
また、動き予測器406における動きベクトルの予測値は、過去に復号済みのブロックの動きベクトルをそのまま引用して動きベクトル予測値とする代わりに、以下に示すように複数ある動きベクトルの決定方法の中からひとつを選択して、その決定方法にしたがって決定してもよい。
図33は、動き予測器406における動きベクトルの予測値の決定手順の説明に用いる模式図である。
図33で、対象ブロックをJとし、フレームF901はブロックJを含むフレームである。フレームF902は既に復号済みのフレームで、フレームF901とは時間方向で隣り合うフレームである。フレームF903は既に復号済みのフレームで、フレームF902とは時間方向で隣り合うフレームである。フレームF904は既に復号済みのフレームで、フレームF903とは時間方向で隣り合うフレームである。
フレームF901において、ブロックIをブロックJの最も左上の画素の真上の画素を含むブロック、ブロックHをブロックIの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックJの最も左上の画素の真左の画素を含むブロック、ブロックEをブロックFの最も左上の画素の真左の画素を含むブロック、ブロックDをブロックEの最も左上の画素の真左の画素を含むブロックとする。
フレームF902において、ブロックCはブロックJの最も左上の画素と同じ空間位置の画素を含むブロックとする。
フレームF903において、ブロックBはブロックCの最も左上の画素と同じ空間位置の画素を含むブロックとする。
フレームF904において、ブロックAはブロックBの最も左上の画素と同じ空間位置の画素を含むブロックとする。
図34は、動き予測器406における動きベクトル予測値を決定する手順を説明するためのフローチャートである。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器406は、ラインL410を経由して入力される復号済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルと対応する参照フレーム番号とラインL115を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS1901)。
なおステップS1901で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS1901において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの分散、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの分散、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの分散、の3組の分散をそれぞれ算出する。(ステップS1902)
次に、ステップS1902で算出された3通りの分散のうち、どの組み合わせの分散が最小のものであるかが判定される。(ステップS1903)。
ステップS1903での判定の結果、もっとも小さい差分を与える組み合わせがブロックAとブロックBとブロックCである場合には、ブロックJの動きベクトル予測値はブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの平均値に決定される。ブロックDとブロックEとブロックFである場合には、ブロックJの動きベクトル予測値はブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの平均値に決定される。ブロックGとブロックHとブロックIである場合には、ブロックJの動きベクトル予測値はブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの平均値に決定される(ステップS1904)。
最後に、ステップS1904で決定された値PMVi(i=x,y)を出力し(ステップS1905)、処理を終了する。
なお、図34のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、ステップS1902において動きベクトルの類似性をあらわす値として分散を用いたが、標準偏差や、各ブロック間の動きベクトルの差分値や、それら複数の差分値の平均を用いてもよい。
ステップS1904において、3つの動きベクトルの平均値を動きベクトルの予測値としたが、3つの動きベクトルの中間値、あるいはいずれかひとつの値を予測値としてもよい。
図34では時間方向、空間方向にそれぞれ連続する3ブロックの動きベクトルを参照して動きベクトル予測値の決定を行ったが、これは時間方向のみでもよい。またそれぞれの方向に2ブロックのみ、あるいは4ブロック以上のブロックを用いてもよい。また時間方向で隣り合うフレームのブロックと空間方向で1ブロック以上隔てたブロックを組み合わせて用いてもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図33に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをJとし、フレームF901はブロックJを含むフレームであり、フレームF902、F903、F904は既に復号済みのフレームである。
フレームF901において、ブロックIをブロックJの最も左上の画素の真上の画素を含むブロック、ブロックHをブロックIの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックJの最も左上の画素の真左の画素を含むブロック、ブロックEをブロックFの最も左上の画素の真左の画素を含むブロック、ブロックDをブロックEの最も左上の画素の真左の画素を含むブロックとする。
フレームF902において、ブロックCはブロックIの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロック、またはブロックJの最も左上の画素の真左上の画素を含むブロック(ブロックKとする)の動きベクトルが参照しているブロックとする。
フレームF903において、ブロックBはブロックCの動きベクトルが参照しているブロックとする。
フレームF904において、ブロックAはブロックBの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックI、ブロックF、ブロックK、ブロックC、ブロックBが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(IあるいはFあるいはKあるいはCあるいはB)が参照するブロックの動きベクトルとして用いるものとする。
さらに、動き予測器406における動きベクトルの予測値の決定は、以下に示すように空間的に1画素以上隔てられたブロックの動きベクトル、または時間方向で1フレーム以上隔てられたフレームにあるブロックの動きベクトルに基づいて行われてもよい。
このような動きベクトルの予測値の決定方法は、動きベクトルの大勢を反映した予測をすることで、高精度の動きベクトル予測値を得る効果がある。また、ノイズや局所的な変化による影響を打ち消す効果もある。
また、動き予測器406における動きベクトルの予測値は、過去に復号済みのブロックの動きベクトルをそのまま引用して動きベクトル予測値とする代わりに、以下に示すように複数ある動きベクトルの決定方法の中からひとつを選択して、その決定方法にしたがって決定してもよい。
図35は、動き予測器406における動きベクトルの予測値の決定手順の説明に用いる模式図である。
図35で、対象ブロックをMとし、フレームF1001はブロックMを含むフレームである。フレームF1002は既に復号済みのフレームで、フレームF1001とは時間方向で隣り合うフレームである。フレームF1003は既に復号済みのフレームで、フレームF1002とは時間方向で隣り合うフレームである。フレームF1004は既に復号済みのフレームで、フレームF1003とは時間方向で隣り合うフレームである。
フレームF1001において、ブロックIをブロックMの最も左上の画素の真上の画素を含むブロック、ブロックHをブロックIの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックMの最も左上の画素の真左の画素を含むブロック、ブロックEをブロックFの最も左上の画素の真左の画素を含むブロック、ブロックDをブロックEの最も左上の画素の真左の画素を含むブロックとする。また、ブロックKをブロックMの最も左上の画素の真左上の画素を含むブロック、ブロックLをブロックKの最も左上の画素の真上の画素を含むブロック、ブロックJをブロックMの最も右上の画素の真右上の画素を含むブロックとする。
フレームF1002において、ブロックCはブロックMの最も左上の画素と同じ空間位置の画素を含むブロックとする。
フレームF1003において、ブロックBはブロックCの最も左上の画素と同じ空間位置の画素を含むブロックとする。
フレームF1004において、ブロックAはブロックBの最も左上の画素と同じ空間位置の画素を含むブロックとする。
図36は、動き予測器406における動きベクトル予測値を決定する手順を説明するためのフローチャートである。
まず動き予測器406は、ラインL410を経由して入力される復号済みのブロックA、B、C、D、E、F、G、H、I、J、K、Lの動きベクトルと対応する参照フレーム番号を取得する(ステップS2001)。
なおステップS2001で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、F、G、H、I、J、K、Lの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS2001において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルのx成分の分散、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルのx成分の分散、ブロックJの動きベクトルとブロックKの動きベクトルとブロックIの動きベクトルのx成分の分散、の3組のx成分の分散をそれぞれ算出する。(ステップS2002)
次に、ステップS2002で算出された3通りの分散のうち、どの組み合わせの分散が最小のものであるかが判定される。(ステップS2003)。
ステップS2003での判定の結果、もっとも小さい差分を与える組み合わせがブロックAとブロックBとブロックCである場合には、ブロックMの動きベクトル予測値のx成分はブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルのx成分の平均値に決定される。ブロックDとブロックEとブロックFである場合には、ブロックMの動きベクトル予測値のx成分はブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルのx成分の平均値に決定される。ブロックJとブロックKとブロックIである場合には、ブロックMの動きベクトル予測値のx成分はブロックJの動きベクトルとブロックKの動きベクトルとブロックIの動きベクトルのx成分の平均値に決定される(ステップS2004)。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルのy成分の分散、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルのy成分の分散、ブロックLの動きベクトルとブロックKの動きベクトルとブロックFの動きベクトルのy成分の分散、の3組のy成分の分散をそれぞれ算出する。(ステップS2005)
次に、ステップS2005で算出された3通りの分散のうち、どの組み合わせの分散が最小のものであるかが判定される。(ステップS2006)。
ステップS2006での判定の結果、もっとも小さい差分を与える組み合わせがブロックAとブロックBとブロックCである場合には、ブロックMの動きベクトル予測値のy成分はブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルのy成分の平均値に決定される。ブロックGとブロックHとブロックIである場合には、ブロックMの動きベクトル予測値のy成分はブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルのy成分の平均値に決定される。ブロックLとブロックKとブロックFである場合には、ブロックMの動きベクトル予測値のy成分はブロックLの動きベクトルとブロックKの動きベクトルとブロックFの動きベクトルのy成分の平均値に決定される(ステップS2007)。
最後に、ステップS2007で決定された値PMVi(i=x,y)を出力し(ステップS2008)、処理を終了する。
また、ステップS2002、ステップS2005において動きベクトルの類似性をあらわす値として分散を用いたが、標準偏差や、各ブロック間の動きベクトルの差分値や、それら複数の差分値の平均を用いてもよい。
ステップS2004、ステップS2007において、3つの動きベクトルの平均値を動きベクトルの予測値としたが、3つの動きベクトルの中間値、あるいはいずれかひとつの値を予測値としてもよい。
図36では時間方向、空間方向にそれぞれ連続する3ブロックの動きベクトルを参照して動きベクトル予測値の決定を行ったが、空間方向のみでもよい。またそれぞれの方向に2ブロックのみ、あるいは4ブロック以上のブロックを用いてもよい。また時間方向で隣り合うフレームのブロックと空間方向で1ブロック以上隔てたブロックを組み合わせて用いてもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図35に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをMとし、フレームF1001はブロックMを含むフレームであり、フレームF1002、F1003、F1004は既に復号済みのフレームである。
フレームF1001において、ブロックIをブロックMの最も左上の画素の真上の画素を含むブロック、ブロックHをブロックIの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックMの最も左上の画素の真左の画素を含むブロック、ブロックEをブロックFの最も左上の画素の真左の画素を含むブロック、ブロックDをブロックEの最も左上の画素の真左の画素を含むブロックとする。また、ブロックKをブロックMの最も左上の画素の真左上の画素を含むブロック、ブロックLをブロックKの最も左上の画素の真上の画素を含むブロック、ブロックJをブロックMの最も右上の画素の真右上の画素を含むブロックとする。
フレームF1002において、ブロックCはブロックIの動きベクトルが参照しているブロック、またはブロックKの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロックとする。
フレームF1003において、ブロックBはブロックCの動きベクトルが参照しているブロックとする。
フレームF1004において、ブロックAはブロックBの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックI、ブロックK、ブロックF、ブロックC、ブロックBが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(IあるいはKあるいはFあるいはCあるいはB)が参照するブロックの動きベクトルとして用いるものとする。
ところで、動きベクトル予測値を算出する際に、周辺にある過去に復号済みの動きベクトルから一部の動きベクトルを選択するのではなく、以下のように重み付けによって周辺の動きベクトルを有効利用する方法を採用してもよい。この場合、重み付けによって周辺の動きベクトルを有効利用することで、局所的な動きベクトルの変化の影響を少なくし、動きベクトルの変化の大勢を反映した予測値を得ることができ、予測精度を高めることができる。
以下では、重み付けによる周辺の動きベクトル利用方法を、(a)図27のブロックに適用した例、(b)図31のブロックに適用した例、(c)図33のブロックに適用した例を、順に説明する。
まず、(a)図27のブロックに適用した例としては、例えば、図60のフローチャートが挙げられる。即ち、動き予測器406における動きベクトル予測値を決定する手順は、図60のフローチャートに従って実行すればよい。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器406は、ラインL410を経由して入力される復号済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号を取得する(ステップS3301)。
なおステップS3301で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS3301において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分MViD_0(i=x,y)、ブロックCの動きベクトルとブロックFの動きベクトルの差分MViD_1(i=x,y)、ブロックDの動きベクトルとブロックEの動きベクトルの差分MViD_2(i=x,y)、ブロックDの動きベクトルとブロックFの動きベクトルの差分MViD_3(i=x,y)、が算出される(ステップS3302)。
次に、ステップS3302で算出された各差分を変数とする関数Fを用いた前述の式(2)に基づいて、ブロックA、F、Eの動きベクトル全てを有効利用して、動きベクトル予測値PMVi(i=x,y)を算出する(ステップS3303)。
最後に、算出された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS3304)、処理を終了する。
なお、図60のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。
また、式(2)で用いられる関数Fとしては、例えば、変数(差分)の逆数を算出する関数を採用してもよい。この場合、例えばブロックBの動きベクトルとブロックEの動きベクトルの差分MViD_0(i=x,y)が小さいとき、当該差分の逆数、即ち、大きな値がブロックAの動きベクトルの重み付け係数となるので、ブロックAの動きベクトルの重みを大きくすることができる。
次に、(b)図31のブロックに適用した例としては、例えば、図61のフローチャートが挙げられる。即ち、動き予測器406における動きベクトル予測値を決定する手順は、図61のフローチャートに従って実行すればよい。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器406は、ラインL410を経由して入力される復号済みのブロックA、B、C、D、E、F、Gの動きベクトルと対応する参照フレーム番号を取得する(ステップS3401)。
なおステップS3401で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、F、Gの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS3401において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックFの動きベクトルの差分MViD_0(i=x,y)、ブロックCの動きベクトルとブロックGの動きベクトルの差分MViD_1(i=x,y)、ブロックAの動きベクトルとブロックDの動きベクトルの差分MViD_2(i=x,y)、ブロックEの動きベクトルとブロックFの動きベクトルの差分MViD_3(i=x,y)、ブロックEの動きベクトルとブロックGの動きベクトルの差分MViD_4(i=x,y)の5通りが算出される(ステップS3402)。
次に、ステップS3402で算出された各差分を変数とする関数Fを用いた前述の式(3)に基づいて、ブロックB、C、D、G、Fの動きベクトル全てを有効利用して、動きベクトル予測値PMVi(i=x,y)を算出する(ステップS3403)。
最後に、算出された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS3404)、処理を終了する。
なお、図61のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。また、式(3)で用いられる関数Fとしては、例えば、変数(差分)の逆数を算出する関数を採用してもよい。この場合、例えばブロックBの動きベクトルとブロックFの動きベクトルの差分MViD_0(i=x,y)が小さいとき、当該差分の逆数、即ち、大きな値がブロックBの動きベクトルの重み付け係数となるので、ブロックBの動きベクトルの重みを大きくすることができる。
また、ステップS3402において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分MViD_0(i=x,y)、ブロックCの動きベクトルとブロックGの動きベクトルの差分MViD_1(i=x,y)の2通りでもよい。その際、ステップS3403では、算出されない差分を変数とする関数F(MViD_2(i=x,y))、関数F(MViD_3(i=x,y))及び関数F(MViD_4(i=x,y))は0として動きベクトル予測値PMVi(i=x,y)を算出すればよい。この場合、空間方向の動きベクトルの差分を含まず、時間方向の動きベクトルの差分のみに基づいて動きベクトル予測値PMVi(i=x,y)を算出することができる。
更に、ステップS3402において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分MViD_0(i=x,y)、ブロックCの動きベクトルとブロックGの動きベクトルの差分MViD_1(i=x,y)、ブロックAの動きベクトルとブロックDの動きベクトルの差分MViD_2(i=x,y)の3通りでもよい。その際、ステップS3403では、算出されない差分を変数とする関数F(MViD_3(i=x,y))及び関数F(MViD_4(i=x,y))は0として動きベクトル予測値PMVi(i=x,y)を算出すればよい。この場合、対象ブロックから1フレーム以上隔てたブロック間での動きベクトルの差分を含んだ時間方向の動きベクトルの差分のみに基づいて動きベクトル予測値PMVi(i=x,y)を算出することができる。
次に、(c)図33のブロックに適用した例としては、例えば、図62のフローチャートが挙げられる。即ち、動き予測器406における動きベクトル予測値を決定する手順は、図62のフローチャートに従って実行すればよい。動きベクトルx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器406は、ラインL410を経由して入力される復号済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルと対応する参照フレーム番号とラインL404を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS3501)。
なおステップS3501で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS3501において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの分散MViV_0(i=x,y)、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの分散MViV_1(i=x,y)、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの分散MViV_2(i=x,y)、の3組の分散をそれぞれ算出する。(ステップS3502)
次に、ステップS3502で算出された各分散を変数とする関数Fを用いた前述の式(4)に基づいて、ブロックA〜Iの9つの動きベクトル全てを有効利用して、動きベクトル予測値PMVi(i=x,y)を算出する(ステップS3503)。
最後に、算出された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS3504)、処理を終了する。
なお、図62のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、動きベクトルのx成分、y成分を同時に決定してもよい。また、式(4)で用いられる関数Fとしては、例えば、変数(分散)の逆数を算出する関数を採用してもよい。この場合、例えばブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの分散MViV_0(i=x,y)が小さいとき、当該分散の逆数、即ち、大きな値がブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの平均値の重み付け係数となるので、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの平均値の重みを大きくすることができる。
また、ステップS3502において動きベクトルの類似性をあらわす値として分散を用いたが、標準偏差や、各ブロック間の動きベクトルの差分値や、それら複数の差分値の平均を用いてもよい。
また、ステップS3503において、3つの動きベクトルの平均値を動きベクトルの予測値としたが、3つの動きベクトルの中間値、あるいはいずれかひとつの値を予測値としてもよい。
図62では時間方向、空間方向にそれぞれ連続する3ブロックの動きベクトルを参照して動きベクトル予測値の決定を行ったが、これは時間方向のみでもよい。またそれぞれの方向に2ブロックのみ、あるいは4ブロック以上のブロックを用いてもよい。また時間方向で隣り合うフレームのブロックと空間方向で1ブロック以上隔てたブロックを組み合わせて用いてもよい。
また、ステップS3502において算出する分散は、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの分散MViV_1(i=x,y)、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの分散MViV_2(i=x,y)、の2組のみでもよい。その際、ステップS3503では、算出されない分散を変数とする関数F(MViV_0(i=x,y))は0として動きベクトル予測値PMVi(i=x,y)を算出すればよい。この場合、対象ブロックから1ブロック以上隔てた複数ブロックを含む空間方向のみからの動きベクトル予測値PMVi(i=x,y)の算出を行うことができる。
最後に、コンピュータを動画像復号装置40として動作させる動画像復号プログラムについて説明する。図54は、本実施形態に係る動画像復号プログラムP40の構成を示し、この動画像復号プログラムP40は、記録媒体に格納されて提供される。記録媒体としては、フレキシブルディスク、CD−ROM、DVD、ROM等の記録媒体あるいは半導体メモリ等が例示される。なお、記録媒体に記憶されたプログラムを実行するためのコンピュータの構成は、既に説明した図63、図64の構成と同様であるため、重複した説明は省略する。
図54に示すように、動画像復号プログラムP40は、処理を統括するメインモジュールP401と、データ解析モジュールP402と、逆量子化モジュールP403と、逆変換モジュールP404と、記憶モジュールP405と、予測信号生成モジュールP406と、動き予測モジュールP407と、加算モジュールP408とを備えている。
データ解析モジュールP402、逆量子化モジュールP403、逆変換モジュールP404、予測信号生成モジュールP406、動き予測モジュールP407がコンピュータに実現させる機能は、それぞれ図26のデータ解析器401、逆量子化器402、逆変換器403、予測信号生成器408、動き予測器406の機能と同様である。記憶モジュールP405がコンピュータに実現させる機能は、フレームメモリ404及び動きベクトルメモリ405の機能と同様である。また、加算モジュールP408がコンピュータに実現させる機能は、加算器407、409の機能と同様である。
[第5実施形態]
図37を用いて、本発明に係る動画像復号装置50について説明する。
動画像復号装置50は、機能的な構成要素として、図37に示すように、データ解析器501と、逆量子化器502と、逆変換器503と、フレームメモリ504と、動きベクトルメモリ505と、動き予測器506と、加算器507と、予測信号生成器508と、加算器509と、確率切替信号生成器510を備えて構成される。
動画像復号装置50には、上述した動画像符号化装置によって符号化された圧縮ストリームを入力する。この圧縮ストリームには、復号対象となるブロックの原信号と予測信号の差分を表す残差信号と、復号対象となるブロックの予測信号の生成に関する情報が含まれている。
データ解析器501は、ラインL501を経由して入力された圧縮ストリームを解析することにより、直行変換および量子化された復号の対象となるブロック(以下、対象ブロック)の残差信号を抽出しラインL502を経由して出力する。また、対象ブロックの動きベクトルとその予測値の差分である動きベクトル差分値を抽出し、ラインL503を経由して出力する、また対象ブロックの参照フレーム番号を抽出し、ラインL504を経由して出力する。また、ラインL512を経由して入力された確率切替信号に基づいて、データの抽出に用いる確率テーブルを後述の方法で切り替えたのち、対象ブロックの動きベクトル予測値を示すインデックスを抽出し、ラインL514を経由して出力する。
逆量子化器502は、ラインL502を経由して入力された量子化された変換係数を逆量子化し、ラインL505を経由して復元された変換係数を出力する。
逆変換器503は、ラインL505を経由して入力された変換係数を逆直交変換し、ラインL506を経由して復元された残差信号を出力する。
フレームメモリ504は、ラインL507を経由して入力される過去に復号済みのフレーム画像信号(以下、参照フレーム画像信号)を格納し、必要に応じてラインL508を経由して出力する。
動きベクトルメモリ505は、過去に復号済みの動きベクトルとそれに対応した参照フレーム番号と併せて、ラインL509を経由して入力される対象ブロックの動きベクトルとラインL504を経由して入力される対象ブロックの参照フレーム番号を格納し、必要に応じてラインL510を経由して出力する。
動き予測器506は、ラインL514を経由して入力される動きベクトル予測値を示すインデックスと、ラインL510を経由して入力される過去に復号済みのブロックの動きベクトルから、後述のフローに従って対象ブロックの動きベクトル予測値を算出し、ラインL511を経由して出力する。
加算器507は、ラインL511を経由して入力された動きベクトル予測値と、ラインL503を経由して入力された動きベクトル差分値を加算し、対象ブロックの動きベクトルを復元し、ラインL509を経由して出力する。
予測信号生成器508は、ラインL509を経由して入力される対象ブロックの動きベクトル信号値と、ラインL504を経由して入力される対象ブロックの参照フレーム番号と、ラインL508を経由して入力される参照フレーム画像信号から、対象ブロックに対する予測画像信号を生成し、ラインL513を経由して出力する。
加算器509は、ラインL506を経由して入力された残差信号と、ラインL513を経由して入力された対象ブロックに対する予測画像信号を加算し、対象ブロックの画像信号を復元し、ラインL507を経由して出力する。
確率切替信号生成器510はラインL510を経由して入力される過去に符号化済みのブロックの動きベクトルと、それに対応する参照フレーム番号と、ラインL504を経由して入力される対象ブロックの参照フレーム番号から、後述するフローに従って切り替える確率テーブルを示す確率切替信号を生成し、ラインL512を経由して出力する。
次に、図38を参照して動き予測器506について詳細に説明する。図38は、動き予測器506における動きベクトル予測値を示すインデックスから動きベクトル予測値を復元する手順を説明するための模式図である。
図38で、対象ブロックをHとし、フレームF1101はブロックHを含むフレームである。フレームF1102は既に復号済みのフレームで、フレームF1101とは時間方向で隣り合うフレームである。
フレームF1101において、ブロックDをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックEをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF1102において、ブロックAはブロックHの最も左上の画素と同じ空間位置の画素を含むブロックとする。ブロックBをブロックAの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックAの最も左上の画素の真左の画素を含むブロックとする。
図39は、動き予測器506における動きベクトル予測値を示すインデックスから動きベクトル予測値を復元する手順を説明するためのフローチャートである。動きベクトルのx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器506は、ラインL514を経由して、対象ブロックの動きベクトル予測値を示すインデックスを取得する。(ステップS2101)。
次に、ステップS2101で取得されたインデックスが判定される(ステップS2102)。
ステップS2102の判定の結果、インデックスが0であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックAの動きベクトルを動きベクトル予測値とし、インデックスが1であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックEの動きベクトルを動きベクトル予測値とし、インデックスが2であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックFの動きベクトルを動きベクトル予測値とする(ステップS2103)。
なおステップS2103で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、ラインL510を経由して入力される過去に符号化済みのブロックに対応した参照フレーム番号と、ラインL504を経由して入力される対象ブロックの参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をta、ブロックAを含むフレームの時刻をt1とすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
最後に、ステップS2103で決定された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS2105)、処理を終了する。
なお、図29のフローチャートに示される一連の処理はx成分、y成分に分けずに、x成分、y成分共通のインデックスを用いて同時に動きベクトル予測値を決定してもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図38に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをHとし、フレームF1101はブロックHを含むフレームである。フレームF1102は既に符号化済みのフレームである。
フレームF1101において、ブロックDをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックEをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF1102において、ブロックAはブロックDの動きベクトルが参照しているブロック、またはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロックとする。その際もブロックBをブロックAの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックAの最も左上の画素の真左の画素を含むブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックDが参照するブロック、あるいはブロックEが参照するブロック、あるいはブロックFが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(DあるいはEあるいはF)が参照するブロックの動きベクトルとして用いるものとする。
このとき、確率切替信号生成器510の詳細は図40のフローチャートで説明される。確率切替信号は動きベクトル予測値を示すインデックスの発生確率の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えて、そのデータを符号化した際に用いた確率テーブルと同じ確率テーブルを用いてデータ解析を行うことで、データを抽出することができる。
したがって、符号化装置と復号装置はあらかじめ共通の確率テーブルを持ち、共通の仕組みによって確率テーブルを切り替える必要がある。
確率切替信号生成器510では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器510は、ラインL510を経由して入力される復号済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号と、ラインL504を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS2201)。
なおステップS2201で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をtaとすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS2201において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分、ブロックCの動きベクトルとブロックFの動きベクトルの差分、ブロックDの動きベクトルとブロックEの動きベクトルの差分、ブロックDの動きベクトルとブロックFの動きベクトルの差分の4通りが算出される(ステップS2202)。
次に、ステップS2202で算出された4通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS2203)。
ステップS2203での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックEである場合にはブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i(i=x,y)=0を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックEの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックFである場合には、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックDとブロックEである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックDとブロックEの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックDとブロックFである場合には、ブロックHの動きベクトル予測値はブロックEの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の動きベクトル差分値MViD(i=x,y)をブロックDとブロックFの動きベクトルの差分値とする。(ステップS2204)。
最後に、ステップS2204で決定された信号値Signal_i(i=x,y)およびMViD(i=x,y)を出力し(ステップS2205)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。
なお、図40のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
このとき、データ解析器501では、あらかじめ複数所持してある動きベクトル予測値を示す各インデックスの発生確率分布のテーブルを、ラインL512を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって最も発生確率が高いインデックス、MViD(i=x,y)によってその発生確率を予測し、それに応じた確率テーブルへの切り替えを行う。
また、動き予測器506は以下のように動作してもよい。図41を参照して動き予測器506について詳細に説明する。図41は、動き予測器506における動きベクトル予測値を示すインデックスから動きベクトル予測値を復元する手順を説明するための模式図である。
図41で、対象ブロックをHとし、フレームF1201はブロックHを含むフレームである。フレームF1202は既に符号化済みのフレームで、フレームF1201とは時間方向で隣り合うフレームである。フレームF1203は既に符号化済みのフレームで、フレームF1202とは時間方向で隣り合うフレームである。
フレームF1201において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF1202において、ブロックDはブロックHの最も左上の画素と同じ空間位置の画素を含むブロック、ブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF1203において、ブロックAはブロックDの最も左上の画素と同じ空間位置の画素を含むブロックとする。
図42は、動き予測器506における動きベクトル予測値を示すインデックスから動きベクトル予測値を復元する手順を説明するためのフローチャートである。動きベクトルのx成分、y成分はそれぞれ独立に予測値が決定されるものとする。具体的にはまず動きベクトルのx成分の予測値を決定・出力し、次にy成分の予測値を決定・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器506は、ラインL514を経由して、対象ブロックの動きベクトル予測値を示すインデックスを取得する。(ステップS2301)。
次に、ステップS2301で取得されたインデックスが判定される(ステップS2302)。
ステップS2302の判定の結果、インデックスが0であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックBの動きベクトルを動きベクトル予測値とし、インデックスが1であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックCの動きベクトルを動きベクトル予測値とし、インデックスが2であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックDの動きベクトルを動きベクトル予測値とし、インデックスが3であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックGの動きベクトルを動きベクトル予測値とし、インデックスが4であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックEの動きベクトルを動きベクトル予測値とする(ステップS2303)。
なおステップS2303で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、ラインL510を経由して入力される過去に符号化済みのブロックに対応した参照フレーム番号と、ラインL504を経由して入力される対象ブロックの参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をtaとすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
最後に、ステップS2303で決定された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS2304)、処理を終了する。
なお、図42のフローチャートに示される一連の処理はx成分、y成分に分けずに、x成分、y成分共通のインデックスを用いて同時に動きベクトル予測値を決定してもよい。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図41に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをHとし、フレームF1201はブロックHを含むフレームである。フレームF1202は既に符号化済みのフレームである。フレームF1203は既に符号化済みのフレームである。
フレームF1201において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF1202において、ブロックDはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロック、またはブロックGの動きベクトルが参照しているブロックとする。その際もブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF1203において、ブロックAはブロックDの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックEが参照するブロック、あるいはブロックFが参照するブロック、あるいはブロックGが参照するブロック、あるいはブロックDが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(EあるいはFあるいはGあるいはD)が参照するブロックの動きベクトルとして用いるものとする。
このとき、確率切替信号生成器510の詳細は図43のフローチャートで説明される。
確率切替信号は動きベクトル予測値を示すインデックスの発生確率の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えて、そのデータを符号化した際に用いた確率テーブルと同じ確率テーブルを用いてデータ解析を行うことで、データを抽出することができる。
したがって、符号化装置と復号装置はあらかじめ共通の確率テーブルを持ち、共通の仕組みによって確率テーブルを切り替える必要がある。
確率切替信号生成器510では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器510は、ラインL510を経由して入力される符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルと対応する参照フレーム番号と、ラインL504を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS2401)。
なおステップS2401で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をtaとすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS2401において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分、ブロックEの動きベクトルとブロックFの動きベクトルの差分、ブロックEの動きベクトルとブロックGの動きベクトルの差分の5通りが算出される(ステップS2402)。
次に、ステップS2402で算出された5通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS2403)。
ステップS2403での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックAとブロックDの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックEとブロックFである場合には、ブロックHの動きベクトル予測値はブロックGの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=3(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックEとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックEとブロックGである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=4(i=x,y)を生成するとともに、その際の動きベクトル差分値MViD(i=x,y)をブロックEとブロックGの動きベクトルの差分値とする。(ステップS2404)。
最後に、ステップS2404で決定された信号値Signal_i(i=x,y)およびMViD(i=x,y)を出力し(ステップS2405)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。
なお、図43のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
また、ステップS2402において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分の3通りでもよい。その際もステップS2403で最小となる組み合わせが判定され、ステップS2404では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックAとブロックDの動きベクトルの差分値とする。
また、ステップS2402において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分の2通りでもよい。その際もステップS2403で最小となる組み合わせが判定され、ステップS2404では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図41に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをHとし、フレームF1201はブロックHを含むフレームである。フレームF1202は既に符号化済みのフレームである。フレームF1203は既に符号化済みのフレームである。
フレームF1201において、ブロックEをブロックHの最も左上の画素の真左上の画素を含むブロック、ブロックFをブロックHの最も左上の画素の真上の画素を含むブロック、ブロックGをブロックHの最も左上の画素の真左の画素を含むブロックとする。
フレームF1202において、ブロックDはブロックEの動きベクトルが参照しているブロック、またはブロックFの動きベクトルが参照しているブロック、またはブロックGの動きベクトルが参照しているブロックとする。その際もブロックBをブロックDの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックDの最も左上の画素の真左の画素を含むブロックとする。
フレームF1203において、ブロックAはブロックDの動きベクトルが参照しているブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックEが参照するブロック、あるいはブロックFが参照するブロック、あるいはブロックGが参照するブロック、あるいはブロックDが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(EあるいはFあるいはGあるいはD)が参照するブロックの動きベクトルとして用いるものとする。
このとき、データ解析器501では、あらかじめ複数所持してある動きベクトル予測値を示す各インデックスの発生確率分布のテーブルを、ラインL512を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって最も発生確率が高いインデックス、MViD(i=x,y)によってその発生確率を予測し、それに応じた確率テーブルへの切り替えを行う。
また、動き予測器506において動きベクトル予測値を生成する代わりに、複数ある動きベクトル予測値決定方法の中から取得したインデックスに基づいてひとつを選択してもよい。この方法の詳細を図44、図45を参照して説明する。
図44は動き予測器506において複数ある動きベクトル予測値決定方法の中から取得したインデックスに基づいてひとつを選択する手順を説明するための模式図である。
図44で、対象ブロックをNとし、フレームF1301はブロックNを含むフレームである。フレームF1302は既に復号済みのフレームで、フレームF1301とは時間方向で隣り合うフレームである。
フレームF1301において、ブロックJをブロックNの最も左上の画素の真左上の画素を含むブロック、ブロックKをブロックNの最も左上の画素の真上の画素を含むブロック、ブロックLをブロックNの最も右上の画素の真右上の画素を含むブロック、ブロックMをブロックNの最も左上の画素の真左の画素を含むブロックとする。
フレームF1302において、ブロックEはブロックNの最も左上の画素と同じ空間位置の画素を含むブロックとする。ブロックAをブロックEの最も左上の画素の真左上の画素を含むブロック、ブロックBをブロックEの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックEの最も右上の画素の真右上の画素を含むブロック、ブロックDをブロックEの最も左下の画素の真左の画素を含むブロック、ブロックFをブロックEの最も右上の画素の真右の画素を含むブロック、ブロックGをブロックEの最も左下の画素の真左下の画素を含むブロック、ブロックHをブロックEの最も右下の画素の真下の画素を含むブロック、ブロックIをブロックEの最も右下の画素の真右下の画素を含むブロックとする。
図45は動き予測器506において複数ある動きベクトル予測値決定方法の中から取得したインデックスに基づいてひとつを選択しする手順を説明するためのフローチャートである。
動きベクトルx成分、y成分はそれぞれ独立に予測値決定方法が選ばれるものとする。具体的にはまず動きベクトルのx成分の予測値決定方法を選択・出力し、次にy成分の予測値決定方法を選択・出力する。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず動き予測器506は、ラインL514を経由して、対象ブロックの動きベクトル予測値決定方法を示すインデックスを取得する。(ステップS2501)。
次に、ステップS2501で取得されたインデックスが判定される(ステップS2502)。
ステップS2502の判定の結果、インデックスが0であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルの平均値を動きベクトル予測値とし、インデックスが1であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックB、D、E、F、Hの動きベクトルの平均値を動きベクトル予測値とし、インデックスが2であった場合は、ラインL510を経由して入力される過去に符号化済みのブロックJ、K、L、M、Eの動きベクトルの平均値を動きベクトル予測値とする(ステップS2503)。
なおステップS2503で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、ラインL510を経由して入力される過去に符号化済みのブロックに対応した参照フレーム番号と、ラインL504を経由して入力される対象ブロックの参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、F、G、H、I、J、K、Lの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をtaとすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
最後に、ステップS2503で決定された動きベクトル予測値PMVi(i=x,y)を出力し(ステップS2504)、処理を終了する。
なお、図45のフローチャートに示される一連の処理はx成分、y成分に分けずに、x成分、y成分共通のインデックスを用いて同時に動きベクトル予測値を決定してもよい。
さらに、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図44に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをNとし、フレームF1301はブロックNを含むフレームである。フレームF1302は既に復号済みのフレームである。
フレームF1301において、ブロックJをブロックNの最も左上の画素の真左上の画素を含むブロック、ブロックKをブロックNの最も左上の画素の真上の画素を含むブロック、ブロックLをブロックNの最も右上の画素の真右上の画素を含むブロック、ブロックMをブロックNの最も左上の画素の真左の画素を含むブロックとする。
フレームF1302において、ブロックEはブロックJの動きベクトルが参照しているブロック、またはブロックKの動きベクトルが参照しているブロック、またはブロックLの動きベクトルが参照しているブロック、またはブロックMの動きベクトルが参照しているブロックとする。その際もブロックAをブロックEの最も左上の画素の真左上の画素を含むブロック、ブロックBをブロックEの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックEの最も右上の画素の真右上の画素を含むブロック、ブロックDをブロックEの最も左下の画素の真左の画素を含むブロック、ブロックFをブロックEの最も右上の画素の真右の画素を含むブロック、ブロックGをブロックEの最も左下の画素の真左下の画素を含むブロック、ブロックHをブロックEの最も右下の画素の真下の画素を含むブロック、ブロックIをブロックEの最も右下の画素の真右下の画素を含むブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックJが参照するブロック、あるいはブロックKが参照するブロック、あるいはブロックLが参照するブロック、あるいはブロックMが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(JあるいはKあるいはLあるいはM)が参照するブロックの動きベクトルとして用いるものとする。
このとき、確率切替信号生成器510の詳細は図46のフローチャートで説明される。確率切替信号は動きベクトル予測値決定方法を示すインデックスの発生確率の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えて、そのデータを符号化した際に用いた確率テーブルと同じ確率テーブルを用いてデータ解析を行うことで、データを抽出することができる。
したがって、符号化装置と復号装置はあらかじめ共通の確率テーブルを持ち、共通の仕組みによって確率テーブルを切り替える必要がある。
確率切替信号生成器510では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器510は、ラインL510を経由して入力される復号済みのブロックA、B、C、D、E、F、G、H、I、J、K、L、Mの動きベクトルと対応する参照フレーム番号と、ラインL504を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS2601)。
なおステップS2601で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、F、G、H、I、J、K、Lの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をtaとすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS2601において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAとブロックEの動きベクトルの差分、ブロックCとブロックEの動きベクトルの差分、ブロックGとブロックEの動きベクトルの差分、ブロックIとブロックEの動きベクトルの差分の計4通りの差分の平均値を算出する。また、ブロックBとブロックEの動きベクトルの差分、ブロックDとブロックEの動きベクトルの差分、ブロックFとブロックEの動きベクトルの差分、ブロックHとブロックEの動きベクトルの差分の計4通りの差分の平均値を算出する。また、ブロックJとブロックKの動きベクトルの差分、ブロックJとブロックMの動きベクトルの差分、ブロックEとブロックKの動きベクトルの差分、ブロックEとブロックMの動きベクトルの差分の計4通りの差分の平均値を算出する(ステップS2602)。
続いて、ステップS2602で算出した3通りの差分平均値のうち、もっとも値が小さくなる組み合わせが判定される。(ステップS2603)。
ステップS2603での判定の結果、もっとも小さい差分平均値を与える組み合わせがブロックAとE、ブロックCとE、ブロックGとE、ブロックIとEである場合にはブロックNの動きベクトル予測値はブロックA、B、C、D、E、F、G、H、Iの動きベクトルの平均値に決定することが尤もらしいことを示す信号Signal_i=(i=x,y)0を生成するとともに、その際の平均差分値MViD_mean(i=x,y)をブロックAとブロックEの動きベクトルの差分、ブロックCとブロックEの動きベクトルの差分、ブロックGとブロックEの動きベクトルの差分、ブロックIとブロックEの動きベクトルの差分の計4通りの差分の平均値とする。もっとも小さい差分平均値を与える組み合わせがブロックBとE、ブロックDとE、ブロックFとE、ブロックHとEである場合にはブロックNの動きベクトル予測値はブロックB、D、E、F、Hの動きベクトルの平均値に決定することが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の平均差分値MViD_mean(i=x,y)をブロックBとブロックEの動きベクトルの差分、ブロックDとブロックEの動きベクトルの差分、ブロックFとブロックEの動きベクトルの差分、ブロックHとブロックEの動きベクトルの差分の計4通りの差分の平均値とする。もっとも小さい差分平均値を与える組み合わせがブロックJとK、ブロックJとM、ブロックEとK、ブロックEとMである場合にはブロックNの動きベクトル予測値はブロックJ、K、L、M、Eの動きベクトルの平均値に決定することが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の平均差分値MViD_mean(i=x,y)をブロックJとブロックKの動きベクトルの差分、ブロックJとブロックMの動きベクトルの差分、ブロックEとブロックKの動きベクトルの差分、ブロックEとブロックMの動きベクトルの差分の計4通りの差分の平均値とする(ステップS2604)。
最後に、ステップS2604で決定されたインデックスIndex_i(i=x,y)および動きベクトル平均差分値MViD_mean(i=x,y)を出力し(ステップS2605)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。
なお、図33のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
なお、ステップS2602において、各ブロック群の動きベクトルの類似性を表す情報として平均差分値を用いたが、そのかわりに各ブロック群の分散値や標準偏差を用いてもよい。その際にはステップS2604で生成される平均差分値は分散値あるいは標準偏差となる。
また、対象ブロックを含む領域が大きく移動しているような場合の予測精度をあげるために、図44に示されるブロックの位置関係は以下のように定めてもよい。
対象ブロックをNとし、フレームF1301はブロックNを含むフレームである。フレームF1302は既に復号済みのフレームである。
フレームF1301において、ブロックJをブロックNの最も左上の画素の真左上の画素を含むブロック、ブロックKをブロックNの最も左上の画素の真上の画素を含むブロック、ブロックLをブロックNの最も右上の画素の真右上の画素を含むブロック、ブロックMをブロックNの最も左上の画素の真左の画素を含むブロックとする。
フレームF1302において、ブロックEはブロックJの動きベクトルが参照しているブロック、またはブロックKの動きベクトルが参照しているブロック、またはブロックLの動きベクトルが参照しているブロック、またはブロックMの動きベクトルが参照しているブロックとする。その際もブロックAをブロックEの最も左上の画素の真左上の画素を含むブロック、ブロックBをブロックEの最も左上の画素の真上の画素を含むブロック、ブロックCをブロックEの最も右上の画素の真右上の画素を含むブロック、ブロックDをブロックEの最も左下の画素の真左の画素を含むブロック、ブロックFをブロックEの最も右上の画素の真右の画素を含むブロック、ブロックGをブロックEの最も左下の画素の真左下の画素を含むブロック、ブロックHをブロックEの最も右下の画素の真下の画素を含むブロック、ブロックIをブロックEの最も右下の画素の真右下の画素を含むブロックとする。
なお上記の定め方をする場合、各ブロックの大きさ以下の精度で類似する画像信号パターンの位置を探し出して動きベクトルの検出を行う際に、ブロックJが参照するブロック、あるいはブロックKが参照するブロック、あるいはブロックLが参照するブロック、あるいはブロックMが参照するブロックが動きベクトルをもつ複数のブロックにまたがることが考えられるが、その際はそれら複数のブロックの動きベクトルの平均値、あるいはまたがる領域でもっとも占める割合の高いブロックの動きベクトルを該当するブロック(JあるいはKあるいはLあるいはM)が参照するブロックの動きベクトルとして用いるものとする。
このとき、データ解析器501では、あらかじめ複数所持してある動きベクトル予測値を示す各インデックスの発生確率分布のテーブルを、ラインL512を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって最も発生確率が高いインデックス、MViD(i=x,y)によってその発生確率を予測し、それに応じた確率テーブルへの切り替えを行う。
最後に、コンピュータを動画像復号装置50として動作させる動画像復号プログラムについて説明する。図55は、本実施形態に係る動画像復号プログラムP50の構成を示し、この動画像復号プログラムP50は、記録媒体に格納されて提供される。記録媒体としては、フレキシブルディスク、CD−ROM、DVD、ROM等の記録媒体あるいは半導体メモリ等が例示される。なお、記録媒体に記憶されたプログラムを実行するためのコンピュータの構成は、既に説明した図63、図64の構成と同様であるため、重複した説明は省略する。
図55に示すように、動画像復号プログラムP50は、処理を統括するメインモジュールP501と、データ解析モジュールP502と、逆量子化モジュールP503と、逆変換モジュールP504と、記憶モジュールP505と、予測信号生成モジュールP506と、動き予測モジュールP507と、加算モジュールP508と、確率切替信号生成モジュールP509とを備えている。
データ解析モジュールP502、逆量子化モジュールP503、逆変換モジュールP504、予測信号生成モジュールP506、動き予測モジュールP507、確率切替信号生成モジュールP509がコンピュータに実現させる機能は、それぞれ図37のデータ解析器501、逆量子化器502、逆変換器503、予測信号生成器508、動き予測器506、確率切替信号生成器510の機能と同様である。記憶モジュールP505がコンピュータに実現させる機能は、フレームメモリ504及び動きベクトルメモリ505の機能と同様である。また、加算モジュールP508がコンピュータに実現させる機能は、加算器507、509の機能と同様である。
[第6実施形態]
図47を用いて、本発明に係る動画像復号装置60について説明する。
動画像復号装置60は、機能的な構成要素として、図47に示すように、データ解析器601と、逆量子化器602と、逆変換器603と、フレームメモリ604と、動きベクトルメモリ605と、動き予測器606と、加算器607と、予測信号生成器608と、加算器609と、確率切替信号生成器610を備えて構成される。
動画像復号装置60には、上述した動画像符号化装置によって符号化された圧縮ストリームを入力する。この圧縮ストリームには、復号対象となるブロックの原信号と予測信号の差分を表す残差信号と、復号対象となるブロックの予測信号の生成に関する情報が含まれている。
データ解析器601は、ラインL601を経由して入力された圧縮ストリームを解析することにより、直行変換および量子化された復号の対象となるブロック(以下、対象ブロック)の残差信号を抽出しラインL602を経由して出力する。また、対象ブロックの参照フレーム番号を抽出し、ラインL604を経由して出力する。また、ラインL612を経由して入力された確率切替信号に基づいて、データの抽出に用いる確率テーブルを後述の方法で切り替えたのち、対象ブロックの動きベクトルとその予測値の差分である動きベクトル差分値を抽出し、ラインL603を経由して出力する。
逆量子化器602は、ラインL602を経由して入力された量子化された変換係数を逆量子化し、ラインL605を経由して復元された変換係数を出力する。
逆変換器603は、ラインL605を経由して入力された変換係数を逆直交変換し、ラインL606を経由して復元された残差信号を出力する。
フレームメモリ604は、過去に復号済みのフレーム画像信号(以下、参照フレーム画像信号)と併せて、ラインL607を経由して入力される復元された対象ブロックの画像信号を格納し、必要に応じてラインL608を経由して出力する。
動きベクトルメモリ605は、過去に復号済みの動きベクトルとそれに対応した参照フレーム番号と併せて、ラインL609を経由して入力される対象ブロックの動きベクトルとラインL604を経由して入力される対象ブロックの参照フレーム番号を格納し、必要に応じてラインL610を経由して出力する。
動き予測器606は、ラインL610を経由して入力される過去に符号化済みのブロックの動きベクトルと、それに対応した参照フレーム番号と、ラインL604を経由して入力される対象ブロックの参照フレーム番号から、対象ブロックの動きベクトル予測値を算出し、ラインL611を経由して出力する。動き予測器606の詳細な動作は、動き予測器406と同じであるとし、記載を省略する。
加算器607は、ラインL611を経由して入力された動きベクトル予測値と、ラインL603を経由して入力された動きベクトル差分値を加算し、対象ブロックの動きベクトルを復元し、ラインL609を経由して出力する。
予測信号生成器608は、ラインL609を経由して入力される対象ブロックの動きベクトル信号値と、ラインL604を経由して入力される対象ブロックの参照フレーム番号と、ラインL608を経由して入力される参照フレーム画像信号から、対象ブロックに対する予測画像信号を生成し、ラインL613を経由して出力する。
加算器609は、ラインL606を経由して入力された残差信号と、ラインL613を経由して入力された対象ブロックに対する予測画像信号を加算し、対象ブロックの画像信号を復元し、ラインL607を経由して出力する。
確率切替信号生成器610はラインL610を経由して入力される過去に符号化済みのブロックの動きベクトルと、それに対応する参照フレーム番号と、ラインL604を経由して入力される対象ブロックの参照フレーム番号から、後述するフローに従って切り替える確率テーブルを示す確率切替信号を生成し、ラインL612を経由して出力する。
確率切替信号生成器610の詳細な動作は、動き予測器606の動作と対応させることが好ましい。以下では、動きベクトル予測値は符号化済みのブロックの動きベクトルから決定され、動きベクトル予測値を示すためのインデックスからの復元をしない形態において説明を行うが、動きベクトル予測値を示すためのインデックスからの復元する形態においても適応できる。
動き予測器606の動作が、前述の動き予測器406の図27と図28を用いて説明される動作と同じ場合、確率切替信号生成器の610の詳細な動作は図27の模式図と、図48のフローチャートを用いて説明される。図27の説明は前述の動き予測器406における説明と同じである。
このとき、確率切替信号は動きベクトル差分値の発生確率分布の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えて、そのデータを符号化した際に用いた確率テーブルと同じ確率テーブルを用いてデータ解析を行うことで、動きベクトル差分値のデータを抽出することができる。
したがって、符号化装置と復号装置はあらかじめ共通の確率テーブルを持ち、共通の仕組みによって確率テーブルを切り替える必要がある。
確率切替信号生成器610では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器610は、ラインL610を経由して入力される復号済みのブロックA、B、C、D、E、Fの動きベクトルと対応する参照フレーム番号と、ラインL604を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS2701)。
なおステップS2701で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、Fの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をtaとすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS2701において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックEの動きベクトルの差分、ブロックCの動きベクトルとブロックFの動きベクトルの差分、ブロックDの動きベクトルとブロックEの動きベクトルの差分、ブロックDの動きベクトルとブロックFの動きベクトルの差分の4通りが算出される(ステップS2702)。
次に、ステップS2702で算出された4通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS2703)。
ステップS2703での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックEである場合にはブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i(i=x,y)=0を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックEの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックFである場合には、ブロックHの動きベクトル予測値はブロックAの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックDとブロックEである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックDとブロックEの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックDとブロックFである場合には、ブロックHの動きベクトル予測値はブロックEの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の動きベクトル差分値MViD(i=x,y)をブロックDとブロックFの動きベクトルの差分値とする。(ステップS2704)。
最後に、ステップS2704で決定された信号値Signal_i(i=x,y)およびMViD(i=x,y)を出力し(ステップS2705)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。またMViD(i=x,y)のみでもよい。
なお、図48のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
このとき、データ解析器601では、あらかじめ複数所持してある動きベクトル差分値の発生確率分布のテーブルを、ラインL612を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって動きベクトル予測値を引用する方向(x軸方向あるいはy軸方向あるいは時間方向)を予測し、MViD(i=x,y)によって動きベクトル差分値の発生確率を予測し、それらに応じた確率テーブルへの切り替えを行う。
動き予測器606の動作が、前述の動き予測器406の図31と図32を用いて説明される動作と同じ場合、確率切替信号生成器の610の詳細な動作は図31の模式図と、図49のフローチャートを用いて説明される。図31の説明は前述の動き予測器406における説明と同じである。
このとき、確率切替信号は動きベクトル差分値の発生確率分布の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えて、そのデータを符号化した際に用いた確率テーブルと同じ確率テーブルを用いてデータ解析を行うことで、動きベクトル差分値のデータを抽出することができる。
したがって、符号化装置と復号装置はあらかじめ共通の確率テーブルを持ち、共通の仕組みによって確率テーブルを切り替える必要がある。
確率切替信号生成器610では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器610は、ラインL610を経由して入力される符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルと対応する参照フレーム番号と、ラインL604を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS2801)。
なおステップS2801で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した符号化済みのブロックA、B、C、D、E、F、Gの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をtaとすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS2801において符号化済みのブロックそのもの、あるいは符号化済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分、ブロックEの動きベクトルとブロックFの動きベクトルの差分、ブロックEの動きベクトルとブロックGの動きベクトルの差分の5通りが算出される(ステップS2802)。
次に、ステップS2802で算出された5通りの差分のうち、どの組み合わせの差分が最小のものであるかが判定される。(ステップS2803)。
ステップS2803での判定の結果、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックAとブロックDの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックEとブロックFである場合には、ブロックHの動きベクトル予測値はブロックGの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=3(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックEとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックEとブロックGである場合には、ブロックHの動きベクトル予測値はブロックFの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=4(i=x,y)を生成するとともに、その際の動きベクトル差分値MViD(i=x,y)をブロックEとブロックGの動きベクトルの差分値とする。(ステップS2804)。
最後に、ステップS2804で決定された信号値Signal_i(i=x,y)およびMViD(i=x,y)を出力し(ステップS705)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。また、MViD(i=x,y)のみでもよい。
なお、図49のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
また、ステップS2802において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分、ブロックAの動きベクトルとブロックDの動きベクトルの差分の3通りでもよい。その際もステップS2803で最小となる組み合わせが判定され、ステップS2804では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックAとブロックDである場合には、ブロックHの動きベクトル予測値はブロックDの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックAとブロックDの動きベクトルの差分値とする。
また、ステップS2802において算出する差分は、ブロックBの動きベクトルとブロックFの動きベクトルの差分、ブロックCの動きベクトルとブロックGの動きベクトルの差分の2通りでもよい。その際もステップS2803で最小となる組み合わせが判定され、ステップS2804では、もっとも小さい差分を与える組み合わせがブロックBとブロックFである場合にはブロックHの動きベクトル予測値はブロックBの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックBとブロックFの動きベクトルの差分値とする。もっとも小さい差分を与える組み合わせがブロックCとブロックGである場合には、ブロックHの動きベクトル予測値はブロックCの動きベクトルと同じ値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の差分MViD(i=x,y)をブロックCとブロックGの動きベクトルの差分値とする。
なお、図49のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
このとき、データ解析器601では、あらかじめ複数所持してある動きベクトル差分値の発生確率分布のテーブルを、ラインL612を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって動きベクトル予測値を引用する方向(x軸方向あるいはy軸方向あるいは時間方向)を予測し、MViD(i=x,y)によって動きベクトル差分値の発生確率を予測し、それらに応じた確率テーブルへの切り替えを行う。
動き予測器606の動作が、前述の動き予測器406の図33と図34を用いて説明される動作と同じ場合、確率切替信号生成器610の詳細な動作は図33の模式図と、図50のフローチャートを用いて説明される。図33の説明は前述の動き予測器406における説明と同じである。
このとき、確率切替信号は動きベクトル差分値の発生確率分布の尤もらしさを示すものであって、この信号に基づいて確率テーブルを切り替えて、そのデータを符号化した際に用いた確率テーブルと同じ確率テーブルを用いてデータ解析を行うことで、動きベクトル差分値のデータを抽出することができる。
確率切替信号生成器610では、動きベクトルのx成分、y成分はそれぞれ独立に計算されるものとする。具体的にはまず動きベクトルのx成分の計算を行い、x成分に相当する確率切替信号を出力し、次にy成分の計算を行い、y成分に相当する確率切替信号の出力を行う。以下では必要に応じて、成分を示す添え字をiと記す(iはx又はyである)。
まず確率切替信号生成器610は、ラインL610を経由して入力される復号済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルと対応する参照フレーム番号と、ラインL604を経由して入力される対象ブロックの参照フレーム番号を取得する(ステップS2901)。
なおステップS2901で取得される動きベクトルは、対象ブロックを含むフレームと、対象ブロックの動きベクトルが参照するフレームとの時間的距離に基づいてスケーリングされることが好ましい。スケーリングの際には各ブロックの動きベクトルが参照するフレームの時刻を用いるため、各ブロックに対応する参照フレーム番号からその時刻を求める必要がある。
スケーリングによって、対象ブロックを含むフレームの時刻t0から、対象ブロックの動きベクトルが参照するフレームの時刻teまでの時間的距離(t0-te)を基準にして、取得した復号済みのブロックA、B、C、D、E、F、G、H、Iの動きベクトルの大きさを補正することができる。具体的に一例を挙げると、ブロックAの動きベクトルMViA(i=x,y)が参照するフレームの時刻をtaとすると、スケーリングされた動きベクトルMViA’(i=x,y)は、式(1)によって与えられるベクトルである。
なお、このスケーリング処理は必須ではなく、スケーリング処理を行わない場合は各ブロックに対応する参照フレーム番号は必要ない。
また、ステップS2901において復号済みのブロックそのもの、あるいは復号済みのブロックの動きベクトルが存在しない場合、そのブロックは極めて大きい動きベクトルを持つとみなし、十分大きな値とした上で処理を進める。あるいは、処理対象から除く。
続いて、ブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの分散、ブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの分散、ブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの分散、の3組の分散をそれぞれ算出する。(ステップS2902)
次に、ステップS2902で算出された3通りの分散のうち、どの組み合わせの分散が最小のものであるかが判定される。(ステップS2903)。
ステップS2903での判定の結果、もっとも小さい差分を与える組み合わせがブロックAとブロックBとブロックCである場合には、ブロックJの動きベクトル予測値はブロックAの動きベクトルとブロックBの動きベクトルとブロックCの動きベクトルの平均値に決定されることが尤もらしいことを示す信号Signal_i=0(i=x,y)を生成するとともに、その際の分散MVi_var(i=x,y)をブロックAとブロックBとブロックCの動きベクトルの分散とする。もっとも小さい差分を与える組み合わせがブロックDとブロックEとブロックFである場合には、ブロックJの動きベクトル予測値はブロックDの動きベクトルとブロックEの動きベクトルとブロックFの動きベクトルの平均値に決定されることが尤もらしいことを示す信号Signal_i=1(i=x,y)を生成するとともに、その際の分散MVi_var(i=x,y)をブロックDとブロックEとブロックFの動きベクトルの分散とする。もっとも小さい差分を与える組み合わせがブロックGとブロックHとブロックIである場合には、ブロックJの動きベクトル予測値はブロックGの動きベクトルとブロックHの動きベクトルとブロックIの動きベクトルの平均値に決定されることが尤もらしいことを示す信号Signal_i=2(i=x,y)を生成するとともに、その際の分散MVi_var(i=x,y)をブロックGとブロックHとブロックIの動きベクトルの分散とする。(ステップS2904)。
最後に、ステップS2904で決定された信号値Signal_i(i=x,y)およびMVi_var(i=x,y)を出力し(ステップS2905)、処理を終了する。
なお、発生確率信号はSignal_i(i=x,y)のみでもよい。また、MVi_var(i=x,y)のみでもよい。
なお、図50のフローチャートに示される一連の処理はx成分、y成分に分けずにベクトルの差分(具体的にはベクトルノルムなど)を算出し、x成分、y成分に相当する確率切替信号を同時に決定してもよい。
また、ステップS2902において動きベクトルの類似性をあらわす値として分散を用いたが、標準偏差でもよい。また、各ブロック間の動きベクトルの差分値や、それら複数の差分値の平均を用いてもよい。
ステップS2904において、3つの動きベクトルの平均値を動きベクトルの予測値とすることが尤もらしいことを示す信号を生成したが、3つの動きベクトルの中間値、あるいはいずれかひとつの値を予測値とすることが尤もらしいことを示していてもよい。
図50では時間方向、空間方向にそれぞれ連続する3ブロックの動きベクトルを参照して確率切替信号の決定を行ったが、空間方向のみでもよい。またそれぞれの方向に2ブロックのみ、あるいは4ブロック以上のブロックを用いてもよい。
このとき、データ解析器601では、あらかじめ複数所持してある動きベクトル差分値の発生確率分布のテーブルを、ラインL612を経由して入力される確率切替信号に基づいて切り替える。具体的にはSignal_i(i=x,y)によって動きベクトル予測値を引用する方向(x軸方向あるいはy軸方向あるいは時間方向)を予測し、MViD_var(i=x,y)によって動きベクトル差分値の発生確率を予測し、それらに応じた確率テーブルへの切り替えを行う。
最後に、コンピュータを動画像復号装置60として動作させる動画像復号プログラムについて説明する。図56は、本実施形態に係る動画像復号プログラムP60の構成を示し、この動画像復号プログラムP60は、記録媒体に格納されて提供される。記録媒体としては、フレキシブルディスク、CD−ROM、DVD、ROM等の記録媒体あるいは半導体メモリ等が例示される。なお、記録媒体に記憶されたプログラムを実行するためのコンピュータの構成は、既に説明した図63、図64の構成と同様であるため、重複した説明は省略する。
図56に示すように、動画像復号プログラムP60は、処理を統括するメインモジュールP601と、データ解析モジュールP602と、逆量子化モジュールP603と、逆変換モジュールP604と、記憶モジュールP605と、予測信号生成モジュールP606と、動き予測モジュールP607と、加算モジュールP608と、確率切替信号生成モジュールP609とを備えている。
データ解析モジュールP602、逆量子化モジュールP603、逆変換モジュールP604、予測信号生成モジュールP606、動き予測モジュールP607、確率切替信号生成モジュールP609がコンピュータに実現させる機能は、それぞれ図47のデータ解析器601、逆量子化器602、逆変換器603、予測信号生成器608、動き予測器606、確率切替信号生成器610の機能と同様である。記憶モジュールP605がコンピュータに実現させる機能は、フレームメモリ604及び動きベクトルメモリ605の機能と同様である。また、加算モジュールP608がコンピュータに実現させる機能は、加算器607、609の機能と同様である。