以下、図面と共に本発明の実施の形態を説明する。以下の実施の形態では、AVC/H.264符号化方式をベースとして符号化/復号する例を説明する。
図1は、本発明の実施の形態1に係る画像符号化装置100の構成を示すブロック図である。画像符号化装置100は、画像バッファ101、平行移動動き補償予測部102、幾何学変換動き補償予測部103、予測方法決定部104、予測誤差信号生成部105、予測誤差信号符号化部106、第1符号化ビット列生成部107、第2符号化ビット列生成部108、第3符号化ビット列生成部109、予測誤差信号復号部110、復号画像信号生成部111、復号画像バッファ112および出力スイッチ113を含む。
これらの構成は、ハードウェア的には、任意のプロセッサ、メモリ、その他のLSIで実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。
画像バッファ101は、撮影/表示時間順に供給された符号化対象の画像信号を一時格納する。画像バッファ101は、格納された符号化対象の画像信号を、所定の画素ブロック単位(ここでは、マクロブロック単位)で、平行移動動き補償予測部102、幾何学変換動き補償予測部103および予測誤差信号生成部105に並列に供給する。その際、撮影/表示時間順に供給された画像は、符号化順序に並び替えられて画像バッファ101から出力される。
MPEGシリーズでは、マクロブロックとは16×16画素の輝度信号と、それに対応する2つの色差信号のブロックを指す。色差フォーマットのYUVが4:2:0の場合、色差信号は8×8画素のサイズである。
本実施の形態では、参照画像を用いずに画面内で符号化するイントラ符号化方式、参照画像を用いた平行移動による動き補償予測方式、および参照画像を用いた幾何学変換による動き補償予測方式を用いる。ここで、参照画像は局部復号された復号画像である。なお、本実施の形態ではイントラ符号化方式には注目しないため、図1ではその構成を省略して描いている。これらの符号化方式のモードを、マクロブロック単位で単独あるいは組み合わせて適応的に切り替える。なお、すべてのマクロブロックを、参照画像を用いた幾何学変換による動き補償予測方式を用いて符号化する方式も可能である。
平行移動動き補償予測部102は、画像バッファ101から供給される符号化対象のマクロブロック信号と、復号画像バッファ112から供給される参照画像信号との間で、平行移動による動き補償予測を行う。平行移動動き補償予測部102は、それぞれのモードによる対象画像内の対象ブロックと、その対象ブロックと平行移動した関係にある参照画像内の参照ブロックとの間の、動きベクトルおよび予測信号を生成し、予測方法決定部104に供給する。本実施の形態では、平行移動動き補償予測部102は、AVC/H.264方式などに規定されている既存の動き補償予測と同様の、平行移動による動き補償予測を行う。
動き補償予測は、後述する復号画像バッファ112から供給される表示順序で、前方または後方の復号画像を参照画像とする。平行移動動き補償予測部102は、参照画像内の所定の検出範囲内で、画像バッファ101から供給されるマクロブロック信号と、復号画像バッファ112から供給される参照画像信号との間でブロックマッチングを行う。平行移動動き補償予測部102は、ブロックマッチングにより、当該マクロブロック信号と最も誤差が小さい、参照画像信号内の参照ブロック信号を特定し、当該マクロブロック信号と当該参照ブロック信号との間の動きベクトルを検出する。
このブロックマッチングを、規定された複数のモードで行う。複数のモードはそれぞれ、参照インデックス、動き補償ブロックのサイズ、L0/L1/双予測などが異なる。参照インデックスとは参照ピクチャを示すインデックスである。なお、L0/L1/双予測はBスライスでのみ選択可能である。ここで、L0予測とL1予測は片方向から予測される片方向予測で、L0予測はL0の動きベクトル等の情報を用いる予測、L1予測はL1の動きベクトル等の情報を用いる予測である。また、双予測はL0の動きベクトル等の情報、及びL1の動きベクトル等の情報を用いて、2つの参照画像から予測される双方向予測である。ブロックサイズの具体例は後述する。
また、動き補償予測を行う際、1画素未満の画素精度で動き補償することができる。たとえば、AVC/H.264方式などでは、輝度信号は1画素の1/4の精度まで、色差信号は1画素の1/8の精度までの動き補償を行うことができる。1画素未満の画素精度で動き補償する場合、1画素未満の画素精度の信号を参照画像内の周囲の整数画素の信号から補間により生成する。
平行移動動き補償予測部102は、それぞれのモードにて動き補償予測を行い、それぞれのモードにおける予測信号(より具体的には、動き補償予測ブロック信号)および動きベクトルを、予測方法決定部104に供給する。
つぎに、AVC/H.264方式における動き補償ブロックサイズについて説明する。
図2(a)〜(h)は、マクロブロック・パーティションおよびサブマクロブロック・パーティションを説明するための図である。ここでは説明を簡略化するため、輝度信号の画素ブロックのみ描いている。MPEGシリーズでは、マクロブロックは正方形領域で規定される。一般的にAVC/H.264方式を含むMPEGシリーズでは、16×16画素(水平16画素、垂直16画素)で規定されるブロックをマクロブロックという。さらに、AVC/H.264方式では、8×8画素で規定されるブロックをサブマクロブロックという。マクロブロック・パーティションとは、マクロブロックを動き補償予測のために、さらに分割したそれぞれの小ブロックをいう。サブマクロブロック・パーティションとは、サブマクロブロックを動き補償予測のために、さらに分割したそれぞれの小ブロックをいう。
図2(a)は、マクロブロックが16×16画素の輝度信号とそれに対応する2つの色差信号から構成される1つのマクロブロック・パーティションで構成されていることを示す図である。ここでは、この構成を16×16モードのマクロブロック・タイプと呼ぶ。
図2(b)は、マクロブロックが16×8画素(水平16画素、垂直8画素)の輝度信号とそれに対応する2つの色差信号から構成される2つのマクロブロック・パーティションで構成されていることを示す図である。この2つのマクロブロック・パーティションは縦に並べられている。ここでは、この構成を16×8モードのマクロブロック・タイプと呼ぶ。
図2(c)は、マクロブロックが8×16画素(水平8画素、垂直16画素)の輝度信号とそれに対応する2つの色差信号から構成される2つのマクロブロック・パーティションで構成されていることを示す図である。この2つのマクロブロック・パーティションは横に並べられている。ここでは、この構成を8×16モードのマクロブロック・タイプと呼ぶ。
図2(d)は、マクロブロックが8×8画素の輝度信号とそれに対応する2つの色差信号から構成される4つのマクロブロック・パーティションで構成されていることを示す図である。この4つのマクロブロック・パーティションは縦横2つずつ並べられている。この構成を8×8モードのマクロブロック・タイプと呼ぶ。
図2(e)は、サブマクロブロックが8×8画素の輝度信号とそれに対応する2つの色差信号から構成される1つのサブマクロブロック・パーティションで構成されていることを示す図である。ここでは、この構成を8×8モードのサブマクロブロック・タイプと呼ぶ。
図2(f)は、サブマクロブロックが8×4画素(水平8画素、垂直4画素)の輝度信号とそれに対応する2つの色差信号から構成される2つのサブマクロブロック・パーティションで構成されていることを示す図である。この2つのサブマクロブロック・パーティションは縦に並べられている。この構成を8×4モードのサブマクロブロック・タイプと呼ぶ。
図2(g)は、サブマクロブロックが4×8画素(水平4画素、垂直8画素)の輝度信号とそれに対応する2つの色差信号から構成される2つのマクロブロック・パーティションで構成されていることを示す図である。この2つのマクロブロック・パーティションは横に並べられている。ここでは、この構成を4×8モードのサブマクロブロック・タイプと呼ぶ。
図2(h)は、サブマクロブロックが4×4画素の輝度信号とそれに対応する2つの色差信号から構成される4つのサブマクロブロック・パーティションで構成されていることを示す図である。この4つのサブマクロブロック・パーティションは縦横2つずつ並べられている。ここでは、この構成を4×4モードのサブマクロブロック・タイプと呼ぶ。
AVC/H.264符号化方式では、以上の動き補償ブロックサイズの中から、最適なものを切り替えて用いる仕組みが取り入れられている。まず、マクロブロック単位の動き補償ブロックサイズとして、16×16、16×8、8×16および8×8モードのマクロブロック・タイプの中からいずれかが選択される。8×8モードのマクロブロック・タイプが選択された場合、サブマクロブロック単位の動き補償ブロックサイズとして、8×8、8×4、4×8、4×4モードのサブマクロブロック・タイプの中からいずれかが選択される。
輝度信号は、選択されたサイズの画素数で動き補償される。色差信号は、色差フォーマットが4:2:0の場合、水平、垂直ともにその半分の画素数で動き補償される。このように、動き補償ブロックサイズの情報は、マクロブロック・タイプおよびサブマクロブロック・タイプと呼ばれるシンタックス要素で符号化される。シンタックスとは符号化ビット列の表現規則であり、シンタックス要素とは、シンタックスで伝送することが規定されている情報である。
16×16、16×8、8×16および8×8モードのいずれのマクロブロック・タイプでも、マクロブロック・パーティションごとに1つの動きベクトルが検出される。すなわち、16×16モードのマクロブロック・タイプでは1つの動きベクトルが、16×8および8×16モードのマクロブロック・タイプでは2つの動きベクトルが、および8×8モードのマクロブロック・タイプでは4つの動きベクトルが、それぞれ検出される。
各マクロブロック・パーティションの輝度信号および色差信号の各画素は、そのマクロブロック・パーティションの1つの動きベクトルに応じて、動き補償される。すなわち、当該各画素は、同じ動きベクトルを用いて動き補償される。
図1に戻り、幾何学変換動き補償予測部103は、画像バッファ101から供給される符号化対象のマクロブロック信号と、復号画像バッファ112から供給される参照画像信号との間で、平行移動に加えて、拡大・縮小/回転などを含む変形を伴う幾何学変換による動き補償予測を行う。幾何学変換動き補償予測部103は、それぞれのモードによる対象画像内の対象ブロックと、その対象ブロックと幾何学変換した関係にある参照画像内の参照ブロックとの間の、動きベクトルおよび予測信号を生成し、予測方法決定部104に供給する。より具体的には、幾何学変換動き補償予測部103は、対象ブロックを構成する頂点に位置する画素、頂点近傍に位置する画素または頂点近傍に位置する補間画素を代表画素として選定し、それら代表画素の動きベクトルを算出する。ここで、当該対象ブロックは四角形(たとえば、正方形、長方形)の領域であるため、その領域の頂点は4つである。したがって、4つの代表画素が存在する。そして、幾何学変換動き補償予測部103は、当該代表画素以外の画素の動きベクトルを、当該代表画素の動きベクトルを用いて補間により算出する。それらの画素毎の動きベクトルに応じて、画素毎に予測信号を予測する。
幾何学変換動き補償予測部103は、対象ブロックの4つの代表画素の動きベクトルを符号化・復号する第1モードと、対象ブロックの縦方向における2つの代表画素の動きベクトルを符号化・復号する第2モードと、対象ブロックの横方向における2つの代表画素の動きベクトルを符号化・復号する第3モードと、対象ブロックの3つの代表画素の動きベクトルを符号化・復号する第4モードと、を実行することができる。なお、幾何学変換動き補償予測部103は、必ずしも複数のモードを実行する必要はなく、処理能力や各モードの発生頻度に応じて、一つのモードを固定的に使用してもよいし、一つのモードのみを備えるものでもよい。また、4つのモードの内の少なくとも2つのモードを実行してもよい(少なくとも2つのモードを備えるものでもよい)。これらの場合、演算量や各モードを識別する情報の符号量を低減することができる。
本実施の形態の説明においては、上記対象ブロックを16×16画素のマクロブロックとして説明するが、当該対象ブロックのサイズは16×16画素に限定されるものではなく、8×8画素のサブマクロブロックであってもよいし、32×32画素、48×48画素、64×64画素、128×128画素等のブロックであってもよい。また、本実施の形態の説明においては、上記対象ブロックが正方形のマクロブロックとして説明するが、当該対象ブロックの形状は正方形に限定されるものではなく、16×8画素、8×16画素のマクロブロック・パーティション、8×4画素、4×8画素のサブマクロブロック・パーティション、32×16画素、16×32画素等のブロックであってもよい。
予測方法決定部104は、幾何学変換動き補償予測部103による予測方法として、上述した第1モード、第2モード、第3モードおよび第4モードのいずれかを採用することができる。予測方法決定部104の詳細な処理については後述する。
以下、幾何学変換動き補償予測部103について、より具体的に説明する。幾何学変換動き補償予測部103は、AVC/H.264方式などに規定された既存の平行移動による動き補償予測と異なり、平行移動に加えて、拡大・縮小/回転などを含む変形を伴う幾何学変換による動き補償予測を行う。
本実施の形態に係る幾何学変換による動き補償予測では、マクロブロック、マクロブロック・パーティション、サブマクロブロックの輝度信号、色差信号の各画素をそれぞれ同じ動きベクトルで動き補償するのではなく、画素ごとに異なる動きベクトルを作成して動き補償を行う。幾何学変換動き補償予測部103は、各マクロブロックの頂点、頂点近傍の画素またはその頂点近傍に位置する補間画素を代表画素に選定し、その動きベクトルを求める。
図3は、対象ブロックの4つの頂点に対応する代表画素を説明するための図(その1)である。ここで、対象ブロックの左上の頂点または頂点近傍を頂点a、右上の頂点または頂点近傍を頂点b、左下の頂点または頂点近傍を頂点cおよび右下の頂点または頂点近傍を頂点dとする。図3に示す例では、左上、右上、左下および右下の頂点にそれぞれ位置する画素a、b、c、dをそれぞれ代表画素a、b、c、dに設定している。図3では、代表画素を黒丸、非代表画素を白丸で表し、代表画素を対象ブロック(図3では、16×16画素のマクロブロック)の頂点に存在する画素a(0,0)、画素b(W,0)、画素c(0,H)および画素d(W,H)に設定している。ここで、Wは水平方向の代表画素間(画素aと画素bの間、及び画素cと画素dの間)の距離(単位:画素)、Hは垂直方向の代表画素間(画素aと画素cの間、及び画素bと画素dの間)の距離(単位:画素)であり、図3に示す代表画素の設定では、W=15(画素)、H=15(画素)である。以下、本明細書では各画素の座標を(i,j)で表し、水平方向の座標を1画素単位でiで表し、垂直方向の座標を1画素単位でjで表す。また、対象ブロックの左上の画素の座標を原点(0,0)とする。
4つの代表画素(第1代表画素a、第2代表画素b、第3代表画素cおよび第4代表画素d)の動きベクトルを符号化・復号する第1モードの場合、当該4つの代表画素のそれぞれの動きベクトルを検出する。また、縦方向の2つの代表画素(第1代表画素aおよび第3代表画素c)の動きベクトルを符号化・復号する第2モードの場合、当該2つの代表画素のそれぞれの動きベクトルを検出する。また、横方向の2つの代表画素(第1代表画素aおよび第2代表画素b)の動きベクトルを符号化・復号する第3モードの場合、当該2つの代表画素のそれぞれの動きベクトルを検出する。また、3つの代表画素(第1代表画素a、第2代表画素bおよび第3代表画素c)の動きベクトルを符号化・復号する第4モードの場合、当該3つの代表画素のそれぞれの動きベクトルを検出する。
幾何学変換動き補償予測部103は、各マクロブロックの代表画素の動きベクトルとして、オプティカルフロー法等により画素単位で算出した動きベクトルを用いてもよいし、画像のエッジやコーナー等の信頼性の高いと判断される特徴点の動きベクトルから内挿・外挿演算により補正した動きベクトルを用いてもよい。また、平行移動動き補償予測部102により生成された、マクロブロック・パーティションの動きベクトルを補正して用いてもよい。なお、マクロブロックやマクロブロック・パーティションの動きベクトルを補正して用いる場合、その動きベクトルの値を当該代表画素にあてはめて、その動きベクトルの値を増加方向および減少方向に調整しながら検証することにより、動きベクトルの値を補正する。
つぎに、幾何学変換動き補償予測部103は、代表画素の動きベクトルからマクロブロック内の全画素の動きベクトルを、線形補間等を用いて補間することにより算出する。
縦方向の2つの代表画素(第1代表画素aおよび第3代表画素c)の動きベクトルを符号化・復号する第2モードの場合、幾何学変換動き補償予測部103は、垂直方向の当該2つの代表画素a、cの動きベクトルから、これら2点を結ぶ直線上の画素の動きベクトルを補間することにより算出する。そして、その他の画素の動きベクトルを、線形補間された各画素の動きベクトルを水平方向にそのまま当てはめる。
横方向の2つの代表画素(第1代表画素aおよび第2代表画素b)の動きベクトルを符号化・復号する第3モードの場合、幾何学変換動き補償予測部103は、水平方向の当該2つの代表画素a、bの動きベクトルから、これら2点を結ぶ直線上の画素の動きベクトルを補間することにより算出する。そして、その他の画素の動きベクトルを、線形補間された各画素の動きベクトルを垂直方向にそのまま当てはめる。
4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dの動きベクトルを符号化・復号する第1モード、または3つの頂点a、b、cに対応する3つの代表画素a、b、cの動きベクトルを符号化・復号する第4モードの場合、幾何学変換動き補償予測部103は、水平方向および垂直方向の双方に補間することにより非代表画素の動きベクトルを算出する。後述する方法により水平方向および垂直方向の双方に一度に補間してもよいし、水平方向の当該2つの代表画素の動きベクトルから、これら2点を結ぶ直線上の画素の動きベクトルを補間することにより非代表画素の動きベクトルを算出し、その他の画素の動きベクトルを、すでに算出された各画素の動きベクトルを用いて、さらに垂直方向に補間することにより算出してもよい。
なお、3つの頂点a、b、cに対応する3つの代表画素a、b、cの動きベクトルを符号化・復号する第4モードにおいては、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルから、第4代表画素dの動きベクトルを算出することができる。そして、4つの頂点a、b、c、dに対応する4つの代表画素の動きベクトルを符号化・復号する第1モードと同様に非代表画素の動きベクトルを算出することができる。
なお、縦方向の2つの頂点a、cに対応する2つの代表画素a、cの動きベクトルを符号化・復号する第2モードにおいては、第1代表画素aの動きベクトルの値を第2代表画素bの動きベクトルの値に設定し、第3代表画素cの動きベクトルの値を第4代表画素dの動きベクトルの値に設定する。そして、4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dの動きベクトルを符号化・復号する第1モードと同様に、非代表画素の動きベクトルを算出することができる。
同様に、横方向の2つの頂点a、bに対応する2つの代表画素a、bの動きベクトルを符号化・復号する第3モードにおいては、第1代表画素aの動きベクトルの値を第3代表画素cの動きベクトルの値に設定し、第2代表画素bの動きベクトルの値を第4代表画素dの動きベクトルの値に設定する。そして、4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dの動きベクトルを符号化・復号する第1モードと同様に、非代表画素の動きベクトルを算出することができる。
幾何学変換動き補償予測部103は、算出された画素ごとの動きベクトルを用いて、画素ごとに動き補償を行う。以上の説明では、マクロブロックに含まれる各画素の動きベクトルを算出する例を説明したが、サブマクロブロックに含まれる各画素の動きベクトルも同様に算出することができる。
この画素単位の動きベクトルの算出処理および各画素の動き補償処理を、規定された複数のモードで行う。複数のモードはそれぞれ、参照インデックス、動き補償ブロックのサイズ、L0/L1/双予測などが異なる。なお、L0/L1/双予測はBスライスでのみ選択可能である。
幾何学変換動き補償予測部103は、それぞれのモードにて動き補償予測を行い、それぞれのモードにおける予測モード情報、動きベクトル、および予測信号(より具体的には、動き補償予測ブロック信号)を予測方法決定部104に供給する。
以下、幾何学変換動き補償予測における、代表画素以外の各画素の動きベクトルの算出方法について具体例を挙げながら説明する。
4つの代表画素a、b、c、dの動きベクトルの値を各成分毎に水平方向および垂直方向の双方に線形補間等の補間を用いることにより非代表画素の動きベクトルを算出する。上記図3の例では、代表画素を、マクロブロックの頂点に位置する画素a(0,0)、画素b(W,0)、画素c(0,H)および画素d(W,H)に設定している。ここでは、各画素の座標を(i,j)で表し、水平方向の座標を1画素単位でiで表し、垂直方向の座標を1画素単位でjで表している。マクロブロック内の最も左上の画素を原点(0,0)とし、右方向および下方向を正の増加方向とする。
まず、これら画素a、画素b、画素cおよび画素dの動きベクトルが割り当てられ、つぎに、それ以外の画素の動きベクトルが、線形補間により算出される。
4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dの動きベクトルを符号化・復号する第1モードでは、これら画素a、画素b、画素cおよび画素dの動きベクトルが割り当てられる。2つの頂点a、cに対応する2つの代表画素a、cの動きベクトルを符号化・復号する第2モードでは、これら画素aおよび画素cの動きベクトルが割り当てられ、画素aの動きベクトルは画素bの動きベクトルでもあり、画素cの動きベクトルは画素dの動きベクトルでもある。2つの頂点a、bに対応する2つの代表画素a、bの動きベクトルを符号化・復号する第3モードでは、これら画素aおよび画素bの動きベクトルが割り当てられ、画素aの動きベクトルは画素cの動きベクトルでもあり、画素bの動きベクトルは画素dの動きベクトルでもある。
3つの頂点a、b、cに対応する3つの代表画素a、b、cの動きベクトルを符号化・復号する第4モードでは、これら画素a、画素bおよび画素cの動きベクトルが割り当てられ、これら3点の動きベクトルから、頂点dに対応する第4代表画素dの動きベクトルが算出される。画素aの動きベクトルVa=V(0,0)と、画素bの動きベクトルVb=V(W,0)と、画素cの動きベクトルVc=V(0,H)と、画素dの動きベクトルVd=V(W,H)との関係から、頂点dに対応する代表画素dの動きベクトルVdは、下記式(1)により算出される。
Vd=Vc+(Vb−Va) ・・・式(1)
あるいは、下記式(2)により算出される。
Vd=Vb+(Vc−Va) ・・・式(2)
つぎに、4つの代表画素a、b、c、dの4つの動きベクトルVa、Vb、Vc、Vdからそれ以外の画素P(i,j)の動きベクトルV(i,j)を線形補間により生成する。水平方向の代表画素間(画素aと画素bの間、及び画素cと画素dの間)の距離(画素数)をW、垂直方向の代表画素間(画素aと画素cの間、及び画素bと画素dの間)の距離(画素数)をHとしたとき、これら代表画素a、b、c、d以外の画素P(i,j)の動きベクトルV(i,j)は下記式(3)により算出される。
V(i,j)={(W−i)(H−j)Va+i(H−j)Vb+(W−i)j・Vc+i・j・Vd}/(W・H) ・・・式(3)
なお、上記図3に示す代表画素の設定では、W=15(画素)、H=15(画素)である。
以上により、第1モード、第2モード、第3モードおよび第4モードにおける各画素の動きベクトルを算出することができる。水平方向および垂直方向の双方に一度に(すなわち、2次元で)補間する方法について説明したが、水平方向の2つの代表画素の動きベクトルから、これら2点を結ぶ直線上の画素の動きベクトルを補間することにより非代表画素の動きベクトルを算出し、その他の画素の動きベクトルを、すでに算出された各画素の動きベクトルを用いて、さらに垂直方向に補間することにより算出してもよい。
この場合の算出方法について説明する。画素aの動きベクトルVa=V(0,0)、画素bの動きベクトルVb=V(W,0)、画素cの動きベクトルVc=V(0,H)、および画素dの動きベクトルVd=V(W,H)とすると、画素aと画素bを通るライン上の各画素P(i,0)の動きベクトルV(i,0)は、下記式(4)により算出される。
V(i,0)=Va+(Vb−Va)*(i−0)/W ・・・式(4)
同様に、画素cと画素dを通るライン上の各画素P(i,H)の動きベクトルV(i,H)は、下記式(5)により算出される。
V(i,H)=Vc+(Vd−Vc)*(i−0)/W ・・・式(5)
さらに、残りの画素P(i,j)の動きベクトルV(i,j)は、下記式(6)により算出される。
V(i,j)=V(i,0)+{V(i,H)−V(i,0)}*(j−0)/H ・・・式(6)
以上により、第1モード、第2モード、第3モードおよび第4モードにおける各画素の動きベクトルを算出することができる。なお、第2モードおよび第3モードでは下記の方法により算出することもできる。
第2モードでは、画素aおよび画素cの動きベクトルが割り当てられ、画素aと画素cを通る垂直ライン上の各画素の動きベクトルが、線形補間により算出され、水平方向それぞれの画素に同じ動きベクトルの値が代入される。
画素aの動きベクトルVa=V(0,0)および画素cの動きベクトルをVc=V(0,H)とすると、画素aと画素cを通るライン上の各画素の動きベクトルV(0,j)は、下記式(7)により算出される。
V(0,j)=Va+(Vc−Va)*(j−0)/H ・・・式(7)
つぎに、下記式(8)に示すように、上記式(7)により算出された動きベクトルV(0,j)の値を水平方向に拡張して、動きベクトルV(0,j)の値を残りの画素の動きベクトルV(i,j)に代入する。
V(i,j)=V(0,j) ・・・式(8)
残りの画素の動きベクトルV(i,j)は、下記式(9)により算出されてもよい。
V(i,j)=Va+(Vc−Va)*(j−0)/H ・・・式(9)
第3モードでは、画素aおよび画素bの動きベクトルが割り当てられ、画素aと画素bを通る垂直ライン上の各画素の動きベクトルが、線形補間により算出され、水平方向それぞれの画素に同じ動きベクトルの値が代入される。
画素aの動きベクトルVa=V(0,0)および画素bの動きベクトルVb=V(W,0)とすると、画素aと画素bを通るライン上の各画素の動きベクトルV(i,0)は、下記式(10)により算出される。
V(i,0)=Va+(Vb−Va)*(i−0)/W ・・・式(10)
つぎに、下記式(11)に示すように、上記式(10)により算出された動きベクトルV(i,0)の値を垂直方向に拡張して、動きベクトルV(i,0)の値を残りの画素の動きベクトルV(i,j)に代入する。
V(i,j)=V(i,0) ・・・式(11)
残りの画素の動きベクトルV(i,j)は、下記式(12)により算出されてもよい。
V(i,j)=Va+(Vb−Va)*(i−0)/W ・・・式(12)
幾何学変換動き補償予測部103は、算出された各画素の動きベクトルに応じて各画素を動き補償予測する。より具体的には、各画素の動きベクトルが指し示す参照画像の画素から補間信号を生成することにより動き補償予測する。なお、各画素の動きベクトルの精度、演算過程で必要となる数値のまるめ方などは、どの復号装置で復号しても同じ値になるように規定する必要がある。また、動きベクトルにより指定される予測画素の座標が小数点以下で表される場合、動き補償の際に周囲の画素から当該画素を補間する。その補間方法には4〜6タップのフィルタリングや線形補間などを用いることができる。
第1モードでは、4つの動きベクトルで拡大・縮小、回転、平行移動など、第2モード、第3モードおよび第4モードでは表現できない複雑な変形を表すことができる。第4モードでは、3つの動きベクトルでアフィン変換による変形を表すことができる。変形の表現力は第1モードに比べて限定されるが、符号化すべき動きベクトル(より具体的には、差分ベクトル)の数を減らすことができる。
第2モードでは、2つの動きベクトルで平行移動に加えて垂直方向に異なる変形を表すことができる。変形の表現力は第1モードおよび第4モードに比べて限定されるが、符号化すべき動きベクトルの数を減らすことができる。第3モードでは、2つの動きベクトルで平行移動に加えて水平方向に異なる変形を表すことができる。変形の表現力は第1モードおよび第4モードに比べて限定されるが、符号化すべき動きベクトルの数を減らすことができる。
図1に戻り、予測方法決定部104は、対象画像内の対象ブロックごとに、平行移動動き補償予測部102による予測方法と、幾何学変換動き補償予測部103による予測方法とのいずれを採用するか決定する。より具体的には、いずれの予測方法の、いずれのモードを採用するかを決定する。以下、モードの選択を含めて予測方法の選択という。
すなわち、予測方法決定部104は、平行移動による動き補償予測または幾何学変換による動き補償予測のどちらを、どの参照画像を用いて、どの画素ブロック単位で符号化するかを選択することにより、予測方法を決定する。幾何学変換による動き補償予測を選択する場合は、第1モード、第2モード、第3モードおよび第4モードのいずれかを選択する。その際、それらの項目の、どの組み合わせが、最も効率的な符号化を実現できる予測方法であるかを判定することにより、予測方法を決定する。予測方法を決定する基準として、たとえば、符号量と歪の関係を考慮したレート歪理論を用いることができる。より具体的には、マクロブロックの符号量(すなわち、予測方法情報、動きベクトルおよび予測信号の合計符号量)を算出するとともに、符号化対象画像と復号画像の差から歪量を算出し、当該符号量および当該歪量を入力変数とするレート歪関数を最小化する予測方法を選択する。
予測方法決定部104は、採用した予測方法情報を第1符号化ビット列生成部107および差分ベクトル算出部114に、採用した予測方法に応じた動きベクトルを差分ベクトル算出部114に供給する。それとともに、予測方法決定部104は、採用した予測方法により生成された予測信号を予測誤差信号生成部105に供給する。
第1符号化ビット列生成部107は、予測方法決定部104から供給される予測方法情報を、算術符号化などのエントロピー符号化により符号化し、符号化ビット列を生成する。予測方法情報に含めるべき、予測ブロックサイズ、L0/L1/双予測の区別などは組み合わせてマクロブロック・タイプとして符号化する。また、予測方法情報に含めるべき、平行移動による動き補償予測と幾何学変換による動き補償予測のいずれを用いるか、幾何学変換の場合、第1モード、第2モード、第3モードおよび第4モードのいずれを用いるかを識別するための情報に関しては、以下の記述方法を用いることができる。たとえば、シンタックス要素を別途に用意して記述してもよいし、他のマクロブロック・タイプとして符号化する情報と組み合わせることで、マクロブロック・タイプを拡張して記述してもよい。
たとえば、幾何学変換による動き補償予測を行うか否かを切り替えるブロック単位毎に、“geom_type”というシンタックス要素を用意し、“geom_type”の値が“0”を平行移動による動き補償予測、“geom_type”の値が“1”を幾何学変換による動き補償予測の第1モード、“geom_type”の値が“2”を幾何学変換による動き補償予測の第2モード、“geom_type”の値が“3”を幾何学変換による動き補償予測の第3モード、および“geom_type”の値が“4”を幾何学変換による動き補償予測の第4モードを表すものとして符号化する。
図4は、シンタックス構造の一例を示す図である。なお、図4では“geom_type”をマクロブロックごとに1つ用意し、L0予測、L1予測、双予測共に共通のモードで動き補償予測を行う例を示しているが、L0、L1双方から予測する双予測モードの場合、2つ用意することにより、L0予測、L1予測それぞれ別の動き補償予測を行うこともできる。
対象ブロックの動きベクトルを符号化する際、すでに符号化または復号済みの周囲の隣接ブロックまたはその隣接ブロックの画素の動きベクトルとの相関を利用して、当該隣接ブロックまたは当該隣接ブロックの画素の動きベクトルから動きベクトルを予測することにより予測ベクトルを算出する。そして、この予測ベクトルと対象ブロックまたは対象画素の動きベクトルとの差分である差分ベクトルを算出することにより、対象ブロックまたは対象画素の動きベクトルの符号量を削減する。ここで、幾何学変換による動き補償予測が採用された対象ブロックでは、その代表画素の動きベクトルが符号化の対象となる。
そこで、差分ベクトル算出部114は、予測方法決定部104から供給される予測方法情報に応じて、すでに符号化されている周囲の隣接ブロックまたはその隣接ブロックの画素の動きベクトルから、対象ブロックまたは対象画素の動きベクトルを予測することにより予測ベクトルを算出する。そして、その予測ベクトルと、予測方法決定部104から供給される動きベクトルとの差分を算出して差分ベクトルを生成し、第2符号化ビット列生成部108に供給する。
第1モードでは、差分ベクトル算出部114は、4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dの動きベクトルを符号化・復号するために、それぞれの予測ベクトルおよび差分ベクトルを算出する。第2モードでは、2つの頂点a、cに対応する2つの代表画素a、cの動きベクトルを符号化・復号するために、それぞれ予測ベクトルおよび差分ベクトルを算出する。第3モードでは、2つの頂点a、bに対応する2つの代表画素a、bの動きベクトルを符号化・復号するために、それぞれの予測ベクトルおよび差分ベクトルを算出する。第4モードでは、3つの頂点a、b、cに対応する3つの代表画素a、b、cの動きベクトルを符号化・復号するために、それぞれの予測ベクトルおよび差分ベクトルを算出する。
なお、差分ベクトル算出部114は、予測方法決定部104から供給される対象ブロックの予測情報および動きベクトルを保持し、後続する対象ブロックの予測ベクトルの算出に利用する。
ここで、符号化対象ブロック、及び隣接ブロック共に平行移動による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法について説明する。図5は、符号化対象ブロック、及び隣接ブロック共に平行移動による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法を説明するための図である。図5(a)は、パーティションが設定されていないマクロブロック間において、動きベクトルを予測する例を示す。図5(b)は、パーティションが設定されているマクロブロック間において、動きベクトルを予測する例を示す。図5(c)は、8×16画素のマクロブロックにおいて、動きベクトルを予測する例を示す。図5(d)は、16×8画素のマクロブロックにおいて、動きベクトルを予測する例を示す。以下、図5(a)〜(d)を参照して、動きベクトルの予測方法について説明する。この動きベクトルの予測方法は、周囲の隣接ブロックの動きベクトルの中央値を用いて、対象ブロックの動きベクトルを予測する。
図5(a)〜(d)にて、グレーで塗られているブロックの動きベクトルが符号化対象である。図5(a)にて、対象ブロックの動きベクトルを、その対象ブロックの左隣のブロックA、上隣のブロックBおよび右斜上隣のブロックCの3つの動きベクトルを候補として用いて予測する。より具体的には、それら3つの動きベクトルから水平成分および垂直成分それぞれについて中央値をとって予測ベクトルとする。なお、Bピクチャーにおいては、L0予測、または双予測に用いるL0の動きベクトルとL1予測、または双予測に用いるL1の動きベクトルをそれぞれ別々に扱う。その対象ブロックの左隣のブロックA、上隣のブロックBおよび右斜上隣のブロックCの3つのL0の動きベクトルを用いて予測することにより、対象ブロックのL0の予測ベクトルを算出する。同様に、その対象ブロックの左隣のブロックA、上隣のブロックBおよび右斜上隣のブロックCの3つのL1の動きベクトルを用いて予測することにより、対象ブロックのL1の予測ベクトルを算出する。ここで、上隣のブロックBおよび右斜上隣のブロックCが共に利用できず、ブロックAだけが利用できる場合、ブロックAの動きベクトルを予測ベクトルとして採用する。また、左隣のブロックA,上隣のブロックB、右斜上隣のブロックCの参照インデックスのうちひとつだけが符号化対象ブロックの参照インデックスと値が等しい(参照ピクチャが等しい)場合、そのブロックの動きベクトルを予測に用いる。
図5(b)に示すように、隣接するマクロブロックにパーティションが設定されている場合、マクロブロックの小ブロックごとに動きベクトルが異なる。その場合、対象ブロックの左隣のブロックでは、対象ブロックと接している小ブロックのうち、最も上の小ブロックAの動きベクトルを候補として採用する。上隣のブロックでは、対象ブロックと接している小ブロックのうち、最も左のブロックBを候補として採用する。右斜上隣のブロックでは、最も左下の小ブロックCを候補として採用する。この規則に従って、以下、図5(a)と同様に、予測ベクトルを算出する。
図5(c)に示すように、符号化するブロックが8×16の場合、3つのブロックの動きベクトルの中央値ではなく、左のブロックは左隣のブロックA、右のブロックは右斜上隣のブロックCの動きベクトルを予測ベクトルとして採用する。また、図5(d)に示すように、符号化するブロックが16×8の場合も、3つのブロックの動きベクトルの中央値ではなく、上のブロックは上隣のブロックB、下のブロックは左隣のブロックAの動きベクトルを予測ベクトルとして採用する。
なお、図5(a)〜(d)に示す動きベクトルの予測方法は一例であり、それに限られるものではない。符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、他の方法を用いることもできる。たとえば、隣接ブロックの位置および数が異なっていてもよい。また、隣接ブロックの複数の動きベクトルの中央値ではなく、平均値を用いてもよい。規定の条件や優先順位を設けて、単独の隣接ブロックの動きベクトルをそのまま用いてもよい。また、隣接ブロックは対象ブロックと必ずしも接していなくてもよい。また、図5(a)〜(d)ではマクロブロック単位の動きベクトルを予測する例を説明したが、サブマクロブロック単位の動きベクトルを予測する場合も、同様に処理することができる。
次に、符号化対象ブロックで平行移動による動き補償予測が選択され、隣接ブロックでは幾何学変換による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法について説明する。図6は、符号化対象ブロックが平行移動による動き補償予測、隣接ブロックが幾何学変換による動き補償予測の場合の予測ベクトルの予測方法を説明するための図である。なお、図6に示すように、隣接ブロックが幾何学変換による動き補償予測の場合、対象ブロックの左隣のブロックでは、対象ブロックと接している小ブロックのうち、最も上の小ブロックの最も右上の画素Aの動きベクトルを予測ベクトルを算出する際の候補として採用する。上隣のブロックでは、対象ブロックと接している小ブロックのうち、最も左のブロックの最も左下の画素Bの動きベクトルを予測ベクトルを算出する際の候補として採用する。右斜上隣のブロックでは、最も左下の小ブロックの最も左下の画素Cの動きベクトルを予測ベクトルを算出する際の候補として採用する。
なお、図6に示す動きベクトルの予測方法は一例であり、それに限られるものではない。符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、他の方法を用いることもできる。たとえば、対象ブロックの左隣のブロックの4つの代表画素の平均値を対象ブロックの左隣の動きベクトルの候補としてもよい。また、対象ブロックの上隣のブロックの4つの代表画素の平均値を対象ブロックの上隣の動きベクトルの候補としてもよい。また、対象ブロックの右上隣のブロックの4つの代表画素の平均値を対象ブロックの右上隣の動きベクトルの候補としてもよい。さらに、隣接ブロックや隣接ブロックの画素の位置および数が異なっていてもよい。また、隣接ブロックの画素の複数の動きベクトルの中央値ではなく、平均値を用いてもよい。単独の隣接ブロックの画素の動きベクトルをそのまま用いてもよい。また、隣接ブロックまたは隣接ブロックの画素は対象ブロックと必ずしも接していなくてもよい。また、図6ではマクロブロック単位の動きベクトルを予測する例を説明したが、サブマクロブロック単位の動きベクトルを予測する場合も、同様に処理することができる。
次に、符号化対象ブロック、及び隣接ブロック共に幾何学変換による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法について説明する。図7は、符号化対象ブロックが幾何学変換による動き補償予測の場合の予測ベクトルの予測方法を説明するための図である。この場合においても、同様に隣接ブロックの動きベクトルから予測ベクトルを算出する。符号化対象ブロックの第1代表画素a、第2代表画素bおよび第3代表画素cの予測ベクトルは、隣接ブロックの画素の動きベクトルから予測する。図7(a)において、符号化対象ブロックの第1代表画素aの予測ベクトルは、左隣のブロックAの代表画素bの動きベクトル、上隣のブロックBの代表画素cの動きベクトルおよび左斜上隣のブロックDの代表画素dの動きベクトルを参照して算出する。ここでの算出方法は候補が複数存在する場合に所定の優先順位を設定して優先順位順に採用したり、これらの動きベクトルの中間値、または平均値を算出したりする。符号化対象ブロックの第2代表画素bの予測ベクトルは、上隣のブロックBの代表画素dの動きベクトル、右斜上隣のブロックCの代表画素cの動きベクトルを参照して算出する。なお、中間値を予測ベクトルとする場合は、符号化対象ブロックの第1代表画素aの動きベクトルも候補に入れて、これら3つの動きベクトルから中間値を算出する。符号化対象ブロックの第3代表画素cの予測ベクトルは、左隣のブロックAの代表画素cの動きベクトルを予測ベクトルとする。
次に、符号化対象ブロックで幾何学変換による動き補償予測が選択され、隣接ブロックでは平行移動による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法について説明する。図7(b)に示すように隣接ブロックが平行移動による動き補償予測の場合、隣接ブロックの動きベクトルが当該隣接ブロック内のすべての画素で共通である。そこで、符号化対象ブロック、及び隣接ブロック共に幾何学変換による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法と同様の方法で算出するが、当該ブロックの動きベクトルを隣接ブロックの代表画素の動きベクトルとして算出する。
なお、図7に示す幾何学変換による動き補償予測が選択された場合の動きベクトルの予測方法は一例であり、それに限られるものではない。符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、他の方法を用いることもできる。たとえば、隣接ブロックの代表画素の位置および数が異なっていてもよい。また、隣接ブロックの代表画素の複数の動きベクトルの中央値ではなく、平均値を用いてもよい。単独の隣接ブロックの代表画素の動きベクトルをそのまま用いてもよい。また、隣接ブロックの代表画素は対象画素と必ずしも接していなくてもよい。
第1モードで符号化・復号する第4代表画素dに関しては、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルの中央値を予測ベクトルとして用いる。なお、符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、他の方法を用いることもできる。たとえば、中央値ではなく、平均値を用いてもよいし、単独の任意の画素の動きベクトルをそのまま用いてもよい。
また、第1モードで符号化・復号する第4代表画素dの予測ベクトルPVdは、第1代表画素a、第2代表画素bおよび第3代表画素cのそれぞれの動きベクトルVa、Vb、Vcから下記式(13)により算出する。
PVd=Vc+(Vb−Va) ・・・式(13)
あるいは、下記式(14)により算出することもできる。
PVd=Vb+(Vc−Va) ・・・式(14)
第1モードで符号化・復号する第4代表画素dの予測ベクトルの算出式である上記式(13)および上記式(14)は、第4モードで算出する第4代表画素dの算出式である上記式(1)および上記式(2)とそれぞれ同じ式である。第1モードは第2モード、第3モードおよび第4モードでは表現できない変形を表すことができるが、第4モードで表現できるアフィン変換に近い変換であることが多い。上記式(13)および上記式(14)で算出できる予測ベクトルは、第1モードで符号化・復号する第4代表画素dの動きベクトルと強い相関があるという考えに基づいている。
なお、符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、他の方法を用いることもできる。たとえば、第4代表画素dに関しては、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルの中央値を予測ベクトルとして用いることもできる。あるいは、中央値の代わりに、平均値を用いてもよいし、単独の任意の画素の動きベクトルをそのまま用いてもよい。または、式(7)で算出される予測ベクトル、第1代表画素aの動きベクトル、第2代表画素bの動きベクトル、第3代表画素cの動きベクトル、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルの中央値、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルの平均値を予測ベクトルの候補とし、少なくとも2つを適応的に切り替えてもよい。この場合、シンタックスに複数の候補から予測ベクトルとして採用する動きベクトルを特定するためのフラグを用意し、第1符号化ビット列生成部107でこのフラグを符号化する。
図1に戻り、第2符号化ビット列生成部108は、差分ベクトル算出部114から供給される差分ベクトルを算術符号化などのエントロピー符号化により符号化し、符号化ビット列を生成する。
なお、幾何学変換による動き補償予測では、第1〜4モードに応じて、2〜4本の差分ベクトルを符号化する。第1モードでは、4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dのそれぞれの差分ベクトルを符号化する。第2モードでは、2つの頂点a、cに対応する代表画素a、cのそれぞれの差分ベクトルを符号化する。第3モードでは、2つの頂点a、bに対応する代表画素a、bのそれぞれの差分ベクトルを符号化する。第4モードでは、3つの頂点a、b、cに対応する3つの代表画素a、b、cのそれぞれの差分ベクトルを符号化する。
予測誤差信号生成部105は、予測方法決定部104により採用された予測方法で生成された予測信号と、対象ブロックの画像信号との差分を算出し、予測誤差信号を生成する。より具体的には、予測誤差信号生成部105は、画像バッファ101から供給される符号化対象の画像信号から、予測方法決定部104から供給される予測信号を減算することにより、予測誤差信号を生成し、予測誤差信号符号化部106に供給する。
予測誤差信号符号化部106は、予測誤差信号生成部105から供給される予測誤差信号に対して、直交変換、量子化などの圧縮符号化処理を行い、符号化された予測誤差信号を生成し、第3符号化ビット列生成部109および予測誤差信号復号部110に供給する。
第3符号化ビット列生成部109は、予測誤差信号符号化部106から供給される符号化された予測誤差信号を、算術符号化などのエントロピー符号化を用いて順次符号化し、符号化ビット列を生成する。
第1符号化ビット列生成部107、第2符号化ビット列生成部108および第3符号化ビット列生成部109により生成された符号化ビット列は、予測方法情報、動きベクトル、予測誤差信号以外の情報が符号化されたその他の符号化ビット列とともに、出力スイッチ113を介して多重化され、符号化ストリームが生成される。
予測誤差信号復号部110は、予測誤差信号符号化部106により符号化された予測誤差信号に対して、逆量子化、逆直交変換などの伸張復号処理を行い、当該予測誤差信号を復号する。予測誤差信号復号部110は、復号した予測誤差信号を復号画像信号生成部111に供給する。復号画像信号生成部111は、予測誤差信号符号化部106から供給される予測誤差信号と、予測方法決定部104から供給される予測信号を重畳して、復号画像信号を生成する。復号画像信号生成部111は、その復号画像信号をブロック単位で復号画像バッファ112に順次格納する。この復号画像バッファ112に格納される復号画像は、必要に応じて、符号化順序で後続する画像を動き補償予測する際の参照画像として利用される。
図8は、本発明の実施の形態1に係る画像符号化装置100における、マクロブロックの符号化処理手順を示すフローチャートである。まず、平行移動動き補償予測部102および幾何学変換動き補償予測部103は、画像バッファ101から符号化対象のマクロブロック信号を取り出す(S101)。
平行移動動き補償予測部102は、画像バッファ101から供給される符号化対象のマクロブロック信号と、復号画像バッファ112から供給される参照画像信号との間で、平行移動による動き補償予測を行う(S102)。この平行移動による動き補償予測をモードごとに行う。幾何学変換動き補償予測部103は、画像バッファ101から供給される符号化対象のマクロブロック信号と、復号画像バッファ112から供給される参照画像信号との間で、幾何学変換による動き補償予測を行う(S103)。この幾何学変換による動き補償予測をモードごとに行う。
予測方法決定部104は、平行移動による動き補償予測方法と、幾何学変換による動き補償予測とのいずれを採用するか決定する(S104)。その際、どのモードを採用するかも決定する。
第1符号化ビット列生成部107は、予測方法決定部104から供給される予測方法情報を符号化し、符号化ビット列を生成する(S105)。差分ベクトル算出部114は、周辺ブロックまたは周辺画素からの予測ベクトルを算出し(S106)、当該予測ベクトルと予測方法決定部104から供給される動きベクトルとの差分ベクトルを算出する(S107)。
第2符号化ビット列生成部108は、差分ベクトル算出部114から供給される差分ベクトルを符号化し、符号化ビット列を生成する(S108)。予測誤差信号生成部105は、画像バッファ101から供給される対象画像信号から、予測方法決定部104から供給される予測信号を減算し、予測誤差信号を生成する(S109)。予測誤差信号符号化部106は、当該予測誤差信号を符号化する(S110)。第3符号化ビット列生成部109は、予測誤差信号符号化部106により符号化された予測誤差信号を、算術符号化等を用いてエントロピー符号化し、符号化ビット列を生成する(S111)。
予測誤差信号復号部110は、予測誤差信号符号化部106により符号化された予測誤差信号を復号する(S112)。復号画像信号生成部111は、予測誤差信号復号部110により復号された予測誤差信号と、予測方法決定部104から供給される予測信号とを重畳して、復号画像信号を生成する(S113)。復号画像信号生成部111は、生成した復号画像信号を復号画像バッファ112に蓄積する(S114)。
以上説明したように実施の形態1によれば、幾何学変換による動き補償予測を使用する画像符号化方式にて、符号量の圧縮効率を向上させることができる。すなわち、幾何学変換による動き補償予測を使用する動きベクトルを予測符号化することにより、符号量を削減することができる。また、平行移動による動き補償予測と幾何学変換による動き補償予測とを併用すれば、符号量の圧縮効率をさらに向上させることができる。その際、平行移動による動き補償予測に係る動きベクトルと、幾何学変換による動き補償予測に係る動きベクトルの符号化方法を共通化することにより、これら2つの予測方法が混在しても、既存の動きベクトルの予測符号化方法をそのまま転用することができる。
また、幾何学変換による動き補償予測方法が採用されたブロックでも、平行移動による動き補償予測と同様に、周囲のブロックまたは周囲の画素の動きベクトルから予測ベクトルを予測し、差分ベクトルを算出することができる。これにより、平行移動による動き補償予測と幾何学変換による動き補償予測を併用しても、動きベクトルの符号量の増大を抑制することができる。とくに、幾何学変換による動き補償予測方法の第1モードにおいて、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルから上記式(13)または上記式(14)により、第4代表画素dの予測ベクトルを算出することにより、差分ベクトルの値を小さくし、動きベクトルの符号量の増大を抑制することができる。また、第4モードにおいて、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルから上記式(1)または上記式(2)により、第4代表画素dの動きベクトルを算出することにより、動きベクトルの符号量の増大をさらに抑制することができる。
図9は、本発明の実施の形態2に係る画像復号装置200の構成を示すブロック図である。当該画像復号装置200は、実施の形態1に係る画像符号化装置100により生成された符号化ストリームを復号する。当該符号化ストリームにおいて、上述したように、平行移動による動き補償予測と幾何学変換による動き補償予測が併用されている場合もあるし、幾何学変換による動き補償予測が単独で使用されている場合もある(イントラ符号化については考慮せず)。
画像復号装置200は、入力スイッチ209、第1符号化ビット列復号部201、第2符号化ビット列復号部202、第3符号化ビット列復号部203、動きベクトル算出部215、平行移動動き補償予測部204、幾何学変換動き補償予測部205、予測誤差信号復号部206、復号画像信号生成部207、復号画像バッファ208、切替制御部214、第1予測部スイッチ210、第2予測部スイッチ211、第3予測部スイッチ212および第4予測部スイッチ213を備える。
これらの構成は、ハードウェア的には、任意のプロセッサ、メモリ、その他のLSIで実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。
第1符号化ビット列復号部201、第2符号化ビット列復号部202、第3符号化ビット列復号部203は、符号化ストリームに含まれる、予測方法情報、差分ベクトルおよび予測誤差信号を復号する。上述したように、符号化ストリームには差分ベクトルが符号化されている。差分ベクトルは、対象ブロックの動きベクトルと、その隣接ブロックまたはその隣接ブロックの画素の動きベクトルから予測された予測ベクトルとの差分である。動きベクトル算出部215は、動きベクトルを復号する際、当該隣接ブロックまたは当該隣接ブロックの画素の動きベクトルから予測ベクトルを算出し、当該予測ベクトルに、復号された差分ベクトルを加算することにより、予測符号化された対象ブロックまたはその代表画素の動きベクトルを復号する。
平行移動動き補償予測部204は、対象画像内の対象ブロックと、その対象ブロックと平行移動した関係にある参照画像内の参照ブロックとの間の動きベクトル、および参照ブロックの画像信号から予測信号を生成する。幾何学変換動き補償予測部205は、対象画像内の対象ブロックと、その対象ブロックと幾何学変換した関係にある参照画像内の参照ブロックとの間の動きベクトル、および参照ブロックの画像信号から予測信号を生成する。
上述したように、対象ブロックの頂点が代表画素に選定されており、上記符号化ストリームには、それぞれの代表画素の動きベクトルが含まれる。幾何学変換動き補償予測部205は、対象ブロックの複数の代表画素以外の画素の動きベクトルを、それら複数の代表画素の動きベクトルを用いた補間により算出する。たとえば、代表画素以外の画素の動きベクトルを、上記式(3)〜(12)に示した演算式により算出する。
切替制御部214は、第1符号化ビット列復号部201により復号された予測方法情報に応じて、対象画像内の対象ブロックごとに、平行移動動き補償予測部204による予測方法と、幾何学変換動き補償予測部205による予測方法とのいずれを用いるか指定する。
以下、より具体的に説明する。第1符号化ビット列復号部201、第2符号化ビット列復号部202、および第3符号化ビット列復号部203には、実施の形態1に係る画像符号化装置100により生成された符号化ストリームに含まれる符号化ビット列が、入力スイッチ209を介して選択的に入力される。
第1符号化ビット列復号部201は、入力スイッチ209を介して供給される符号化ビット列を、算術復号化などのエントロピー復号化により復号し、予測方法情報を取得する。上述したように、この予測方法情報には平行移動/幾何学変換のどちらで符号化されているかが含まれているとともに、平行移動動き補償の場合、16×16/16×8/8×16/8×8モードのいずれを用いるかという情報が含まれ、幾何学変換の場合、4つの代表画素a、b、c、dの動きベクトルを符号化・復号する第1モード、対象ブロックの縦方向における2つの代表画素a、cの動きベクトルを符号化・復号する第2モード、対象ブロックの横方向における2つの代表画素a、bの動きベクトルを符号化・復号する第3モード、3つの代表画素a、b、cの動きベクトルを符号化・復号する第4モードのどのモードで符号化されているかの情報等が含まれている。第2符号化ビット列復号部202は、入力スイッチ209を介して供給される符号化ビット列を、算術復号化などのエントロピー復号化により復号し、差分ベクトルを取得する。前述の通り、差分ベクトルは、隣接ブロックの動きベクトルから算出される予測ベクトルと復号対象ブロックの動きベクトルとの差分である。なお、平行移動による動き補償予測で用いる動きベクトルと、幾何学変換による動き補償予測で用いる動きベクトルとが混在されて符号化されている場合、符号化側と同様に復号側でも混在された差分ベクトルから予測方法情報に応じて動きベクトルを復号する。
第1符号化ビット列復号部201により復号された予測方法情報により、復号対象ブロックがイントラ符号化、平行移動による動き補償予測および幾何学変換による動き補償予測のどの手法を、どの参照画像を用いて、どのようなブロック単位で選択、組み合わせられているかが分かる。
切替制御部214は、第1符号化ビット列復号部201から供給される予測方法情報に応じて、第1予測部スイッチ210、第2予測部スイッチ211、第3予測部スイッチ212および第4予測部スイッチ213を切り替える。対象ブロックの予測方法として、平行移動による動き補償予測方法が選択されている場合、平行移動動き補償予測部204の経路が選択されるよう切り替え、幾何学変換による動き補償予測方法が選択されている場合、幾何学変換動き補償予測部205の経路が選択されるよう切り替える。
動きベクトル算出部215は、第1符号化ビット列復号部201から供給される予測方法情報に応じて、すでに符号化・復号されている周囲の隣接ブロック、または隣接ブロックの画素の動きベクトルから対象ブロックの動きベクトルを予測することにより予測ベクトルを算出する。そして、当該予測ベクトルに、第2符号化ビット列復号部202から供給される差分ベクトルを加算することにより動きベクトルを算出する。動きベクトル算出部215は、当該動きベクトルを第2予測部スイッチ211を介して、平行移動動き補償予測部204または幾何学変換動き補償予測部205に供給する。動きベクトル算出部215での予測ベクトルの算出は、画像符号化装置100の差分ベクトル算出部114での予測ベクトルの算出と同一の方法で行う。平行移動動き補償予測の場合、当該ブロックの動きベクトルが取得でき、幾何学変換動き補償の場合、当該ブロックの代表画素の動きベクトルが算出される。
平行移動動き補償予測部204は、復号画像バッファ208から第4予測部スイッチ213を介して供給される参照画像とすべき復号画像、および第2符号化ビット列復号部202から第2予測部スイッチ211を介して供給される復号された動きベクトルを用いて、平行移動による動き補償予測を行う。
幾何学変換動き補償予測部205は、復号画像バッファ208から第4予測部スイッチ213を介して供給される参照画像とすべき復号画像、および動きベクトル算出部215から第2予測部スイッチ211を介して供給される、復号された複数の代表画素の動きベクトルを用いて全画素の動きベクトルを補間により算出する。その際、上記式(1)〜(14)参照して説明した、画像符号化装置100の幾何学変換動き補償予測部103と同一の処理方法を用いることができる。幾何学変換動き補償予測部205は、それら画素ごとの動きベクトルに応じて画素ごとに動き補償を行うことにより、幾何学変換による動き補償予測を行う。
第3符号化ビット列復号部203は、入力スイッチ209を介して供給される符号化ビット列を順次復号し、符号化された予測誤差信号を取得する。予測誤差信号復号部206は、第3符号化ビット列復号部203から供給された符号化された予測誤差信号に対して、逆量子化、逆直交変換などの伸張復号処理を行い、復号された予測誤差信号を取得する。
復号画像信号生成部207は、予測信号、および予測誤差信号から画像信号を生成する。より具体的には、復号画像信号生成部207は、切替制御部214により指定された予測方法に応じて、平行移動動き補償予測部204または幾何学変換動き補償予測部205から第3予測部スイッチ212を介して供給される予測信号に、予測誤差信号復号部206から供給される予測誤差信号を重畳して、復号画像信号を生成する。復号画像信号生成部207は、その復号画像信号をブロック単位で、復号画像バッファ208に順次格納する。
図10は、本発明の実施の形態2に係る画像復号装置200における、マクロブロックの復号処理手順を示すフローチャートである。第1符号化ビット列復号部201は、入力スイッチ209を介して供給される符号化ビット列を復号して、予測方法情報を取得する(S201)。第2符号化ビット列復号部202は、入力スイッチ209を介して供給される符号化ビット列を復号して、差分ベクトルを取得する(S202)。なお、予測方法情報が幾何学変換による動き補償予測を示す場合、その予測方法情報に応じて2〜4本の差分ベクトルを復号する。第1モードでは、4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dのそれぞれの差分ベクトルを復号する。第2モードでは、2つの頂点a、cに対応する代表画素a、cのそれぞれの差分ベクトルを復号する。第3モードでは、2つの頂点a、bに対応する代表画素a、bのそれぞれの差分ベクトルを復号する。第4モードでは、3つの頂点a、b、cに対応する3つの代表画素a、b、cのそれぞれの差分ベクトルを復号する。動きベクトル算出部215は、周辺ブロックまたは周辺画素から予測ベクトルを算出する(S203)。画像符号化装置100の差分ベクトル算出部114での予測ベクトルの算出と同一の方法で行う。さらに、動きベクトル算出部215は、第1符号化ビット列復号部201から供給される予測方法情報に応じて、その予測ベクトルに第2符号化ビット列復号部202から供給される差分ベクトルを加算して、対象ブロックまたは対象画素の動きベクトルを算出する(S204)。ただし、第2符号化ビット列復号部202で差分ベクトルが復号されなかった代表点については、予測ベクトルを動きベクトルとする。
切替制御部214は、復号された予測方法情報に応じて、対象ブロックの動き補償予測方法を特定する(S205)。その予測方法が、平行移動による動き補償予測方法の場合(S205の平行)、平行移動動き補償予測部204は、復号画像バッファ208から供給される参照画像信号とすべき復号画像信号を、第2符号化ビット列復号部202から供給される動きベクトルを用いて、平行移動による動き補償をし、予測信号を生成する(S206)。
切替制御部214により特定された予測方法が、幾何学変換による動き補償予測方法の場合(S205の幾何)、幾何学変換動き補償予測部205は、復号画像バッファ208から供給される参照画像信号とすべき復号画像信号を、第2符号化ビット列復号部202から供給される動きベクトルを用いて、幾何学変換による動き補償をし、予測信号を生成する(S207)。
第3符号化ビット列復号部203は、入力スイッチ209を介して供給される符号化ビット列を復号して、符号化された予測誤差信号を取得する(S208)。復号画像信号生成部207は、取得された予測誤差信号を復号する(S209)。復号画像信号生成部207は、予測誤差信号復号部206により復号された予測誤差信号と、平行移動動き補償予測部204または幾何学変換動き補償予測部205により生成された予測信号とを重畳して、復号画像信号を生成する(S210)。復号画像信号生成部207は、生成した復号画像信号を、復号画像バッファ208に蓄積する(S211)。この復号画像バッファ208に蓄積された復号画像信号は、平行移動動き補償予測部204および幾何学変換動き補償予測部205における参照画像信号として利用される。
以上説明したように実施の形態2によれば、実施の形態1に係る画像符号化装置100により生成された符号化ストリームを、効率的に復号することができる。これにより、上述した実施の形態1に係る画像符号化装置100により実現される効果を、復号側からサポートし、その効果を担保することができる。すなわち、幾何学変換による動き補償予測を使用する画像符号化方式にて、符号量の圧縮効率を向上させる効果を、復号側からサポートし、その効果を担保することができる。また、平行移動による動き補償予測と幾何学変換による動き補償予測を併用する画像符号化方式においても、符号量の圧縮効率を向上させる効果を、復号側からサポートし、その効果を担保することができる。また、既存の画像復号装置との調和性および互換性が高く、導入コストを抑制することができる。
以上、本発明をいくつかの実施の形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
上述した実施の形態では、対象ブロック(すなわち、マクロブロック・パーティションまたはサブマクロブロック・パーティション)の頂点、頂点近傍の画素を代表画素とし、代表画素が対象ブロックに含まれる例を説明した(図3参照)。この点、それに限るものではなく、代表画素が対象ブロックから外れていてもよい。
図11は、対象ブロックの4つの頂点に対応する代表画素を説明するための図(その2)である。図11に示す例では、左上の頂点に位置する画素a、右上、左下、右下の頂点近傍にそれぞれ位置する画素b、c、dをそれぞれ代表画素a、b、c、dに設定している。図11では、代表画素を黒丸、非代表画素を白丸で表し、代表画素を対象ブロック(図11では、16×16画素のマクロブロック)の頂点に存在する画素a(0,0)、頂点近傍に存在する画素b(W,0)、画素c(0,H)および画素d(W,H)に設定している。ここで、Wは水平方向の代表画素間(画素aと画素bの間、及び画素cと画素dの間)の距離(単位:画素)、Hは垂直方向の代表画素間(画素aと画素cの間、及び画素bと画素dの間)の距離(単位:画素)であり、図11に示す代表画素の設定では、W=16(画素)、H=16(画素)である。ここでは、各画素の座標を(i,j)で表し、水平方向の座標を1画素単位でiで表し、垂直方向の座標を1画素単位でjで表している。マクロブロック内の最も左上の画素を原点(0,0)とし、右方向および下方向を正の増加方向とする。左上の第1代表画素aは対象ブロックに含まれるが、右上の第2代表画素b、左下の第3代表画素cおよび右下の第4代表画素dは対象ブロックに含まれない。
その際、4つの代表画素a、b、c、dの動きベクトルVa、Vb、Vc、Vdからそれ以外の画素P(i,j)の動きベクトルV(i,j)は、上記式(3)により算出される。
上記式(3)において、図3に示す代表画素の設定ではW・H=225(15×15)で割るが、図11に示す代表画素の設定ではW・H=256(=16×16)で割る。2のべき乗である256で割る場合、8ビット右シフトするビットシフト演算で実現することが可能であるため、処理量を軽減することができ、ハードウェアへの実装が容易となる。代表画素の間隔を2のべき乗の数に設定することにより、除算をビットシフト演算で実現することが可能となる。なお、対象ブロックに含まれない代表画素は、画面から外れていて、実在しない仮想的な画素であってもよい。
同様に、図11に示す代表画素の設定の場合、図3に示す代表画素の設定と同様に上記式(1)、(2)、(4)〜(12)を用いて算出することができる。
上記式(4)、(5)、(10)、(12)において、図3に示す代表画素の設定ではW=15で割るが、図11に示す代表画素の設定ではW=16で割る。さらに、上記式(6)、(7)、(9)において、図3に示す代表画素の設定ではH=15で割るが、図11に示す代表画素の設定ではH=16で割る。上述と同様に、2のべき乗である16で割る場合、4ビット右シフトするビットシフト演算で実現することが可能であるため、処理量を軽減することができ、ハードウェアへの実装が容易となる。代表画素の間隔を2のべき乗にすることにより、この場合も除算をビットシフト演算で置き換えることが可能となる。
図11に示す代表画素の設定においても予測ベクトルの算出方法は図7を用いて説明した方法と同様の方法を採用することができる。図11に示す代表画素の設定を前提に、図12を用いてより具体的に符号化対象ブロック、及び隣接ブロック共に幾何学変換による動き補償予測が選択された場合の動きベクトルの予測について説明する。図11、図12に示すように代表画素間の間隔を16に設定する場合、代表画素b、代表画素cおよび代表画素dは、それぞれ対象ブロックから1画素分、外側にはみ出ることになる。したがって、対象ブロックの代表画素aは左隣のブロックAの代表画素bでもあり、上隣のブロックBの代表画素cでもあり、左斜上隣のブロックDの代表画素dでもある。対象ブロックの代表画素bは上隣のブロックBの代表画素dでもあり、右斜上隣のブロックCの代表画素cでもある。対象ブロックの代表画素cは左隣のブロックAの代表画素dでもある。第1代表画素a、第2代表画素bおよび第3代表画素cの予測ベクトルは、隣接ブロックの動きベクトルから予測する。
図12において、符号化対象ブロックの第1代表画素aの予測ベクトルは、符号化済みの隣接ブロックのうち対象ブロックの参照画像と同じ画像を参照している周辺ブロック中で、左隣のブロックAの右上頂点画素の動きベクトル、上隣のブロックBの左下頂点画素の動きベクトルおよび左斜上隣のブロックDの右下頂点画素の動きベクトルを参照して、算出する。第2代表画素bの予測ベクトルは、上隣のブロックBの右下頂点画素の動きベクトル、右斜上隣のブロックCの左下頂点画素の動きベクトルおよび当該対象ブロックの第1代表画素aの動きベクトルから所定のルールにより選択する。第3代表画素cの予測ベクトルは、左隣のブロックAの右下頂点画素の動きベクトルを予測ベクトルとする。第4代表画素dの予測ベクトルは、上述したように、第1代表画素a、第2代表画素bおよび第3代表画素cのそれぞれの動きベクトルVa、Vb、Vcから上記式(13)または上記式(14)により算出することができる。
図13は、対象ブロックの4つの頂点に対応する代表画素を説明するための図(その3)である。図13に示す例では、左上、右上、左下の頂点近傍に位置する画素a、b、c、右下の頂点に位置する画素dを代表画素a、b、c、dに設定している。図13の例では、代表画素を黒丸、非代表画素を白丸で表し、代表画素を対象ブロック(図13では、16×16画素のマクロブロック)の頂点近傍に存在する画素a(−1,−1)、画素b(W−1,−1)、画素c(−1,H−1)および頂点に存在する画素d(W−1,H−1)に設定している。ここで、Wは水平方向の代表画素間(画素aと画素bの間、及び画素cと画素dの間)の距離(単位:画素)、Hは垂直方向の代表画素間(画素aと画素cの間、及び画素bと画素dの間)の距離(単位:画素)であり、図11に示す代表画素の設定では、W=16(画素)、H=16(画素)である。ここでは、各画素の座標を(i,j)で表し、水平方向の座標を1画素単位でiで表し、垂直方向の座標を1画素単位でjで表している。マクロブロック内の最も左上の画素を原点(0,0)とし、右方向および下方向を正の増加方向とする。右下の第4代表画素dは対象ブロックに含まれるが、左上、右上、左下の3つの代表画素a、b、cは対象ブロックに含まれない。
その際、4つの代表画素a、b、c、dの動きベクトルVa、Vb、Vc、Vdからそれ以外の画素P(i,j)の動きベクトルV(i,j)は、上記式(3)の代わりに下記式(15)により算出される。
V(i,j)={(W−i−1)(H−j−1)Va+(i+1)(H−j−1)Vb+(W−i−1)(j+1)・Vc+(i+1)・(j+1)・Vd}/(W・H) ・・・式(15)
上記式(15)でもW・H=256(=16×16)で割っており、2のべき乗である256で割る場合、8ビット右シフトするビットシフト演算で実現することが可能であるため、処理量を軽減することができ、ハードウェアへの実装が容易となる。代表画素の間隔を2のべき乗の数にすることにより、除算をシフト演算で実現することが可能となる。なお、対象ブロックに含まれない代表画素は、画面から外れていて、実在しない仮想的な画素であってもよい。
上述した実施の形態では、対象ブロック(すなわち、マクロブロック・パーティションまたはサブマクロブロック・パーティション)の頂点、頂点近傍の画素を代表画素としたが、それに限るものではなく、頂点、または頂点に相当する座標に位置する補間画素を代表画素としてもよい。
図14は、対象ブロックの4つの頂点に対応する代表画素を説明するための図(その4)である。図14に示す例では、左上、右上、左下および右下の頂点の位置に相当する補間画素a、b、c、dを代表画素に設定している。これまでの例(図3、図11、図13)のように実際に存在する画素を代表画素とするだけではなく、この例(図14)の様に、補間された位置に存在する画素を代表画素とし、この代表画素の動きベクトルから、実際に存在する画素の動きベクトルを補間により算出してもよい。
また、上記図5、図6、図7、図12において説明した動きベクトルの予測方法において、隣接ブロックまたは隣接ブロックの画素の動きベクトルVabcdをそのまま予測ベクトルの候補とするのではなく、Vabcdを符号化対象画像と参照画像との間の距離(時間)に応じて、スケーリングすることにより算出した動きベクトル値Vabcd'を予測ベクトルの候補として用いてもよい。スケーリングした動きベクトル値Vabcd'は、符号化対象画像と当該符号化対象ブロックの動きベクトルが指し示す参照画像との間の距離(時間)T1、及び符号化対象画像と隣接ブロックまたは隣接ブロックの画素の動きベクトルVabcdが指し示す参照画像との距離(時間)T2に応じてスケーリングした動きベクトル値である。スケーリングした動きベクトル値Vabcd'は下記式(16)により算出される。
Vabcd'=Vabcd*(T1/T2) ・・・式(16)
符号化対象ブロックの動き補償予測で参照する参照画像と、隣接ブロックの動き補償予測で参照する参照画像が異なる場合、たとえ同じ動きでも互いの動きベクトルの値に差が生じるため、そのミスマッチを解消するために動きベクトルをスケーリングする。例えば、物体が変形せず、等速運動をしていれば、動きベクトルの大きさはフレーム間隔が長くなるほど大きくなる。符号化対象画像−参照画像間のフレーム間隔T1、T2の比率に応じて隣接ブロック(隣接ブロックの画素)の動きベクトルVabcdをスケーリングしてVabcd'を算出する。
符号化対象ブロックの動き補償予測で参照する参照画像と、隣接ブロックの動き補償予測で参照する参照画像が異なり、それら2つの参照画像が符号化対象画像から見て表示順序で共に過去または共に未来に相当する場合、即ち、それら2つの参照画像が符号化対象画像から見て同じ側に位置する場合、同じ方向にスケーリングする。同じ方向にスケーリングするために正の値でスケーリングする。このスケーリング処理により、向きが同じで、大きさが異なる動きベクトルが予測ベクトルの候補となる。図15は、動きベクトル値のスケーリング処理の一例を説明するための図である。図15において、符号化対象画像の符号化対象ブロックの参照画像が画像Ref2であり、隣接ブロック(隣接ブロックの画素)の動き補償予測の参照画像が画像Ref3の場合、T1:T2=2:3であるから、画像Ref3を参照している隣接ブロック(隣接ブロックの画素)の動きベクトルVabcdを2/3にスケーリングする。これにより、仮に隣接ブロック(隣接ブロックの画素)が画像Ref2を参照して動き補償予測をした場合の動きベクトルの値に近くなり、結果的に画像Ref2を参照する符号化対象ブロックの動きベクトルの値に近くなる。図15の例では、隣接ブロックの動き補償予測の際の参照画像が画像Ref3でその動きベクトルの値が(24,−9)の場合、それを2/3にスケーリングした(16,−6)を予測ベクトルの候補とする。
なお、符号化対象ブロックの動き補償予測で参照する参照画像と、隣接ブロックの動き補償予測で参照する参照画像が異なり、それら2つの参照画像が符号化対象画像から見て表示順序で過去と未来に相当する場合、即ち、それら2つの参照画像が符号化対象画像を挟んで両側に位置する場合、反対方向にスケーリングする。反対方向にスケーリングするために負の値でスケーリングする。このスケーリング処理により、向きが反対で、大きさが異なる動きベクトルが予測ベクトルの候補となる。図15において、符号化対象画像の符号化対象ブロックの参照画像が画像Ref2であり、隣接ブロック(隣接ブロックの画素)の動き補償予測の参照画像が画像Ref5の場合、T1:T2=2:−1であるから、画像Ref3を参照している隣接ブロック(隣接ブロックの画素)の動きベクトルVabcdを2/(−1)=−2倍にスケーリングする。これにより、仮に隣接ブロック(隣接ブロックの画素)が画像Ref2を参照して動き補償予測をした場合の動きベクトルの値に近くなり、結果的に画像Ref2を参照する符号化対象ブロックの動きベクトルの値に近くなる。図15の例では、隣接ブロックの動き補償予測の際の参照画像が画像Ref5でその動きベクトルの値が(−8,3)の場合、それを−2倍にスケーリングした(16,−6)を予測ベクトルの候補とする。
なお、上記図5、図6、図7、図12において説明した動きベクトルの予測方法において、Bピクチャーにおいては、L0予測、または双予測に用いるL0の動きベクトルとL1予測、または双予測に用いるL1の動きベクトルをそれぞれ別々に扱う。つまり、L0の動きベクトルの予測ベクトルの候補は隣接ブロックまたは隣接ブロックの画素のL0の動きベクトルから算出し、L1の動きベクトルの予測ベクトルの候補は隣接ブロックまたは隣接ブロックの画素のL1の動きベクトルから算出する。なお、隣接ブロックがL0予測またはL1予測の片方向予測の場合、L0またはL1の動きベクトルのいずれか一方しか存在しない。L0の動きベクトルの予測ベクトルの候補を算出する際に隣接ブロックがL1予測で、隣接ブロックまたは隣接ブロックの画素のL0の動きベクトルが得られない場合、L1の動きベクトルを前述のスケーリング処理によりスケーリングすることにより、L0の動きベクトルの予測ベクトルの候補とすることができる。同様に、L1の動きベクトルの予測ベクトルの候補を算出する際に隣接ブロックがL0予測で、隣接ブロックまたは隣接ブロックの画素のL1の動きベクトルが得られない場合、L0の動きベクトルを前述のスケーリング処理によりスケーリングすることにより、L1の動きベクトルの予測ベクトルの候補とすることができる。
上述した実施の形態では、対象ブロックの形状が正方形である例を説明した。この点、対象ブロックの形状は、三角形、平行四辺形、台形など、他の形状でもよい。この場合、上記代表画素は、当該形状の頂点または頂点近傍に設定されることが好ましい。