以下、図面と共に本発明の実施の形態を説明する。以下の実施の形態では、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スライスでのみ選択可能である。ブロックサイズの具体例は後述する。
また、動き補償予測を行う際、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は、当該代表画素以外の画素の動きベクトルを、当該代表画素の動きベクトルを用いた補間により算出する。それらの画素毎の動きベクトルに応じて、画素毎に予測信号を生成する。
図3は、対象ブロックの4つの頂点に対応する代表画素を説明するための図である。ここで、対象ブロックの左上の頂点または頂点近傍を頂点a、右上の頂点または頂点近傍を頂点b、左下の頂点または頂点近傍を頂点cおよび右下の頂点または頂点近傍を頂点dとする。また、ブロックの幅(水平方向の画素数)W、ブロックの高さ(垂直方向の画素数)Hの値は共に16とする。図3に示す例では、左上の頂点aに位置する画素a、ならびに右上、左下および右下の頂点近傍にそれぞれ位置する画素b、c、dをそれぞれ代表画素a、b、c、dに設定している。図3では、代表画素を黒丸、非代表画素を白丸で表し、代表画素を対象ブロック(図3では、16×16画素のマクロブロック)の頂点に存在する画素a(0,0)、画素b(W,0)、画素c(0,H)および画素d(W,H)に設定している。以下、本明細書では各画素の座標を(i,j)で表し、水平方向の座標を1画素単位でiで表し、垂直方向の座標を1画素単位でjで表す。また、対象ブロックの左上の画素の座標を原点(0,0)とする。なお、図3に示す例では、左上の第1代表画素aは対象ブロックに含まれるが、右上の第2代表画素b、左下の第3代表画素cおよび右下の第4代表画素dは対象ブロック内に含まれない。
幾何学変換動き補償予測部103は、対象ブロックの4つの代表画素の差分ベクトルを符号化・復号するDMV4モードと、対象ブロックの3つの代表画素の差分ベクトルを符号化・復号するDMV3モードと、対象ブロックの縦方向における2つの代表画素の差分ベクトルを符号化・復号するDMV2Vモードと、対象ブロックの横方向における2つの代表画素の差分ベクトルを符号化・復号するDMV2Hモードと、対象ブロックの対角方向における2つの代表画素の差分ベクトルを符号化・復号するDMV2AモードおよびDMV2Bモードと、対象ブロックの左上の代表画素の差分ベクトルだけを符号化・復号するDMV1Aモードと、対象ブロックの右上の代表画素の差分ベクトルだけを符号化・復号するDMV1Bモードと、対象ブロックの左下の代表画素の差分ベクトルだけを符号化・復号するDMV1Cモードと、対象ブロックの右下の代表画素の差分ベクトルだけを符号化・復号するDMV1Dモードと、対象ブロックの代表画素の差分ベクトルを符号化・復号しないDMV0モードと、を実行することができる。
なお、幾何学変換動き補償予測部103は、必ずしも全てのモードを実行する必要はなく、処理能力や各モードの発生頻度に応じて、1つのモードを固定的に使用してもよい。また、1つのモードのみを備える設計であってもよい。また、11モードのうち、少なくとも2つのモードを実行してもよい。その少なくとも2つのモードには、DMV2Aモード、DMV2Bモード、DMV1Aモード、DMV1Bモード、DMV1Cモード、DMV1DモードおよびDMV0モードの少なくとも2つのモードが含まれていてもよい。また、幾何学変換動き補償予測部103が備えるモード数と実行するモード数は異なっていてもよい。たとえば、少なくとも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画素等のブロックであってもよい。
図4(a)〜(k)は、幾何学変換動き補償予測の11モードを説明するための図である。黒丸および白丸は代表点を示す。図4(a)〜(k)では代表点と代表画素が一致する例を描いている。黒丸で描かれた代表点は差分ベクトルを符号化・復号し、この代表点の動きベクトルは予測ベクトルと差分ベクトルの和であることを示す。白丸で描かれた代表点は差分ベクトルを符号化・復号せず、予測ベクトルをそのまま動きベクトルとする。
図4(a)に示すDMV4モードは代表画素a、b、c、dの差分ベクトルを符号化するモードである(特許請求の範囲の第1モードに対応)。図4(b)に示すDMV3モードは代表画素dの差分ベクトルを符号化せず、代表画素a、b、cの差分ベクトルを符号化するモードである(特許請求の範囲の第2モードに対応)。図4(c)に示すDMV2Vモードは代表画素b、dの差分ベクトルを符号化せず、代表画素a、cの差分ベクトルを符号化するモードである(特許請求の範囲の第3モードに対応)。代表画素aと代表画素bの動きベクトルの値が等しく、代表画素cと代表画素dの動きベクトルの値も等しい。図4(d)に示すDMV2Hモードは代表画素c、dの差分ベクトルを符号化せず、代表画素a、bの差分ベクトルを符号化するモードである(特許請求の範囲の第4モードに対応)。代表画素aと代表画素cの動きベクトルの値が等しく、代表画素bと代表画素dの動きベクトルの値も等しい。
図4(e)に示すDMV2Aモードは代表画素b、cの差分ベクトルを符号化せず、代表画素a、dの差分ベクトルを符号化するモードである(特許請求の範囲の第5モードに対応)。代表画素aと代表画素dの動きベクトルの各成分ごとの平均値を代表画素b、cの動きベクトルの値とする。図4(f)に示すDMV2Bモードは代表画素a、dの差分ベクトルを符号化せず、代表画素b、cの差分ベクトルを符号化するモードである(特許請求の範囲の第6モードに対応)。代表画素bと代表画素cの動きベクトルの各成分ごとの平均値を代表画素a、dの動きベクトルの値とする。
図4(g)に示すDMV1Aモードは代表画素b、c、dの差分ベクトルを符号化せず、代表画素aの差分ベクトルを符号化するモードである(特許請求の範囲の第7モードに対応)。図4(h)に示すDMV1Bモードは代表画素a、c、dの差分ベクトルを符号化せず、代表画素bの差分ベクトルを符号化するモードである(特許請求の範囲の第8モードに対応)。図4(i)に示すDMV1Cモードは代表画素a、b、dの差分ベクトルを符号化せず、代表画素cの差分ベクトルを符号化するモードである(特許請求の範囲の第9モードに対応)。図4(j)に示すDMV1Dモードは代表画素a、b、cの差分ベクトルを符号化せず、代表画素dの差分ベクトルを符号化するモードである(特許請求の範囲の第10モードに対応)。図4(k)に示すDMV0モードは代表画素a、b、c、dの差分ベクトルを符号化しないモードである(特許請求の範囲の第11モードに対応)。
下記表1は上記各モードについてまとめたものである。
上記表1において、「DMV符号化」とは差分ベクトルを符号化することを表す。この場合、動きベクトルMVは予測ベクトルPMVと差分ベクトルDMVの和で定義される。「PMV」とは差分ベクトルDMVを符号化せず、予測ベクトルPMVをそのまま動きベクトルMVとすることを表す。近隣ブロックの動きベクトルMVまたは対象ブロックの別の動きベクトルMVから算出した動きベクトルMVを予測ベクトルPMVとする。その他(「DMV符号化」、「PMV」以外)については差分ベクトルDMVを符号化せず、表1の式に応じて他の頂点の動きベクトルMVから算出する。動きベクトルを符号化する際、4本の差分ベクトルをすべて符号化すると動きベクトルの符号量が大きくなる。したがって、4本の動きベクトルをすべて符号化する必要がないと判断できる場合、符号化する差分ベクトルの本数を減らす。すなわち、DMV4モード以外のモードを採用する。
ここで、動きベクトルの符号化においては、周囲ブロックまたは対象ブロックからの予測を行うことにより予測ベクトルを取得し、動きベクトルと予測ベクトルとの差分である差分ベクトルを符号化することによって符号量を削減する。動きベクトルを符号化・復号するということは具体的には差分ベクトルを符号化・復号するということであり、動きベクトルMVは予測ベクトルPMVと差分ベクトルDMVを各成分ごとに加算したものとなる。動きベクトルを符号化・復号しないということは具体的には差分ベクトルを符号化・復号せず、周囲のブロックまたは対象ブロックから算出した予測ベクトルをそのまま動きベクトルとして用いるということである。
図1に戻り、予測方法決定部104は、幾何学変換動き補償予測部103による予測方法として、上述したDMV4モード、DMV3モード、DMV2Vモード、DMV2Hモード、DMV2Aモード、DMV2Bモード、DMV1Aモード、DMV1Bモード、DMV1Cモード、DMV1DモードおよびDMV0モードのいずれかを採用することができる。予測方法決定部104の詳細な処理については後述する。
以下、幾何学変換動き補償予測部103について、より具体的に説明する。図5は、本発明の実施の形態1に係る幾何学変換動き補償予測部103の構成を示すブロック図である。幾何学変換動き補償予測部103は、幾何学変換動きベクトル検出部121、第1の非代表点動きベクトル算出部122および第1の予測部123を含む。
本実施の形態に係る幾何学変換による動き補償予測では、マクロブロック、マクロブロック・パーティション、サブマクロブロックの輝度信号、色差信号の各画素をそれぞれ同じ動きベクトルで動き補償するのではなく、画素ごとに異なる動きベクトルを作成して動き補償を行う。幾何学変換動きベクトル検出部121は、各マクロブロックの頂点、頂点近傍の画素またはその頂点近傍に位置する補間画素を代表画素に選定し、その動きベクトルを求める。
幾何学変換動きベクトル検出部121は、上記図4(a)〜(k)に示した幾何学変換動き補償予測のそれぞれのモードについて、代表画素の動きベクトルを検出、または算出する。幾何学変換動きベクトル検出部121での代表画素の動きベクトルの検出処理は、具体的には、それぞれのモードにおける差分ベクトルを符号化・復号する代表点の動きベクトルを検出し、差分ベクトルを符号化・復号する代表点の動きベクトルの値は、予測ベクトルを算出して、その予測ベクトルをそのまま動きベクトルとする。たとえば、第1代表画素a、第2代表画素b、第3代表画素cおよび第4代表画素dの4つの代表画素の差分ベクトルを符号化・復号するDMV4モードの場合、当該4つの代表画素のそれぞれの動きベクトルを検出する。また、第1代表画素a、第2代表画素bおよび第3代表画素cの3つの代表画素の差分ベクトルを符号化・復号するDMV3モードの場合、当該3つの代表画素のそれぞれの動きベクトルを検出し、第4代表画素dの動きベクトルは予測ベクトルを算出して、その予測ベクトルを動きベクトルとする。ここで、予測ベクトルの算出方法について、上記図3に示した対象ブロックの4つの頂点に対応する代表画素の場合を例に説明する。
3つの頂点a、b、cに対応する3つの代表画素a、b、cの動きベクトルを符号化・復号するDMV3モードでは、これら画素a、画素bおよび画素cの動きベクトルが割り当てられ、これら3点の動きベクトルから、頂点dに対応する代表画素dの予測ベクトルを算出し、算出された予測ベクトルを代表画素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)
また、第1代表画素aおよび第3代表画素cの縦方向の2つの代表画素の差分ベクトルを符号化・復号するDMV2Vモードの場合、当該2つの代表画素のそれぞれの動きベクトルを検出し、第2代表画素bおよび第4代表画素dの動きベクトルは予測ベクトルを算出して動きベクトルとする。ここで、第1代表画素aの動きベクトルを第2代表画素bの予測ベクトルとして動きベクトルとし(Vb=Va)、第3代表画素cの動きベクトルを第4代表画素dの予測ベクトル、すなわち動きベクトルとする(Vd=Vc)。
また、第1代表画素aおよび第2代表画素bの横方向の2つの代表画素の差分ベクトルを符号化・復号するDMV2Hモードの場合、当該2つの代表画素のそれぞれの動きベクトルを検出し、第3代表画素cおよび第4代表画素dの動きベクトルは予測ベクトルを算出して動きベクトルとする。ここで、第1代表画素aの動きベクトルを第3代表画素cの予測ベクトルとして動きベクトルとし(Vc=Va)、第2代表画素bの動きベクトルを第4代表画素dの予測ベクトル、すなわち動きベクトルとする(Vd=Vb)。
また、第1代表画素aおよび第4代表画素dの斜め方向の2つの代表画素の差分ベクトルを符号化・復号するDMV2Aモードの場合、当該2つの代表画素のそれぞれの動きベクトルを検出し、第2代表画素bおよび第3代表画素cの動きベクトルは予測ベクトルを算出して動きベクトルとする。ここで、第1代表画素aの動きベクトルと第4代表画素dの動きベクトルの成分ごとの平均値を第2代表画素bおよび第3代表画素cの予測ベクトル、すなわち動きベクトルとする。
Vb=Vc=(Va+Vd)/2 ・・・式(3)
また、第2代表画素bおよび第3代表画素cの斜め方向の2つの代表画素の差分ベクトルを符号化・復号するDMV2Bモードの場合、当該2つの代表画素のそれぞれの動きベクトルを検出し、第1代表画素aおよび第4代表画素dの動きベクトルは予測ベクトルを算出して動きベクトルとする。ここで、第2代表画素bの動きベクトルと第3代表画素cの動きベクトルの成分ごとの平均値を第1代表画素aおよび第4代表画素dの差分ベクトル、すなわち動きベクトルとする。
Va=Vd=(Vb+Vc)/2 ・・・式(4)
また、第1代表画素aの差分ベクトルだけを符号化・復号するDMV1Aモードの場合、当該代表画素の動きベクトルを検出し、第2代表画素b、第3代表画素cおよび第4代表画素dの動きベクトルの動きベクトルは予測ベクトルを算出して動きベクトルとする。また、第2代表画素bの差分ベクトルだけを符号化・復号するDMV1Bモードの場合、当該代表画素の動きベクトルを検出し、第1代表画素a、第3代表画素cおよび第4代表画素dの動きベクトルの動きベクトルは予測ベクトルを算出して動きベクトルとする。また、第3代表画素cの差分ベクトルだけを符号化・復号するDMV1Cモードの場合、当該代表画素の動きベクトルを検出し、第1代表画素a、第2代表画素bおよび第4代表画素dの動きベクトルの動きベクトルは予測ベクトルを算出して動きベクトルとする。また、第4代表画素dの差分ベクトルだけを符号化・復号するDMV1Dモードの場合、当該代表画素の動きベクトルを検出し、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルの動きベクトルは予測ベクトルを算出して動きベクトルとする。なお、どの代表画素の差分ベクトルも符号化・復号しないDMV0モードの場合、すべての代表画素の動きベクトルは予測ベクトルを算出して動きベクトルとする。なお、これらの予測ベクトルの算出方法については後述する。
幾何学変換動きベクトル検出部121は、各マクロブロックの代表画素の動きベクトルとして、オプティカルフロー法等により画素単位で算出した動きベクトルを用いてもよいし、画像のエッジやコーナー等の信頼性の高いと判断される特徴点の動きベクトルを内挿/外挿演算により補正した動きベクトルを用いてもよい。また、平行移動動き補償予測部102により生成された、マクロブロックやマクロブロック・パーティションの動きベクトルを補正して用いてもよい。なお、マクロブロックやマクロブロック・パーティションの動きベクトルを補正して用いる場合、その動きベクトルの値を当該代表画素にあてはめて、その動きベクトルの値を増加方向および減少方向に調整しながら検証することにより、動きベクトルの値を補正する。
つぎに、第1の非代表点動きベクトル算出部122は、幾何学変換動きベクトル検出部121から供給される代表画素の動きベクトルからマクロブロック内の全画素の動きベクトルを、線形補間等の補間を用いることにより算出する。
以下、第1の非代表点動きベクトル算出部122による、幾何学変換動き補償予測における代表画素以外の各画素の動きベクトルの算出方法について具体例を挙げながら説明する。
幾何学変換動きベクトル検出部121で検出あるいは算出し、供給される4つの代表画素a、b、c、dの4つの動きベクトルVa、Vb、Vc、Vdからそれ以外の画素P(i,j)の動きベクトルV(i,j)を線形補間により生成する。ブロックのブロックの幅(水平方向の画素数)をW、ブロックの高さ(垂直方向の画素数)をHとしたとき(上記図3の例ではW=H=16)、代表画素a、b、c、d以外の画素P(i,j)の動きベクトルV(i,j)を下記式(5)により算出する。
V(i,j)={(W−i)(H−j)Va+i(H−j)Vb+(W−i)j・Vc+i・j・Vd}/(W・H) ・・・式(5)
以上、水平方向および垂直方向の双方に一度に(すなわち、2次元で)補間する方法について説明したが、水平方向の2つの代表画素の動きベクトルから、これら2点を結ぶ直線上の画素の動きベクトルを補間することにより非代表画素の動きベクトルを算出し、その他の画素の動きベクトルを、すでに算出された各画素の動きベクトルを用いて、さらに垂直方向に補間することにより算出してもよい。
この場合の算出方法について説明する。画素aと画素bを通るライン上の各画素P(i,0)の動きベクトルV(i,0)は、下記式(6)により算出される。
V(i,0)=Va+(Vb−Va)*(i−0)/W ・・・式(6)
同様に、画素cと画素dを通るライン上の各画素P(i,H)の動きベクトルV(i,H)は、下記式(7)により算出される。
V(i,H)=Vc+(Vd−Vc)*(i−0)/W ・・・式(7)
さらに、残りの画素P(i,j)の動きベクトルV(i,j)は、下記式(8)により算出される。
V(i,j)=V(i,0)+{V(i,H)−V(i,0)}*(j−0)/H ・・・式(8)
第1の予測部123は、算出された画素ごとの動きベクトルを用いて、画素ごとに動き補償予測を行う。以上の説明では、マクロブロックに含まれる各画素の動きベクトルを算出する例を説明したが、サブマクロブロックに含まれる各画素の動きベクトルも同様に算出することができる。
この画素単位の動きベクトルの算出処理および各画素の動き補償処理を、規定された複数のモードで行う。複数のモードはそれぞれ、参照インデックス、動き補償ブロックのサイズ、L0/L1予測などが異なる。なお、L0/L1予測はBスライスでのみ選択可能である。
第1の予測部123は、それぞれのモードにて動き補償予測を行い、それぞれのモードにおける予測モード情報、動きベクトル、および予測信号(より具体的には、動き補償予測ブロック信号)を予測方法決定部104に供給する。
第1の予測部123は、第1の非代表点動きベクトル算出部122で算出された各画素の動きベクトルに応じて各画素を動き補償予測する。より具体的には、各画素の動きベクトルが指し示す参照画像の画素から補間信号を生成することにより動き補償予測する。なお、各画素の動きベクトルの精度、演算過程で必要となる数値のまるめ方などは、どの復号装置で復号しても同じ値になるように規定する必要がある。また、動きベクトルにより指定される予測画素の座標が小数点以下で表される場合、動き補償の際に周囲の画素から当該画素を補間する。その補間方法には4〜6タップのフィルタリングや線形補間などを用いることができる。
DMV4モードでは、4つの動きベクトルで拡大・縮小、回転、平行移動など、DMV4モード以外のモードでは表現できない複雑な変形を表すことができる。DMV3モードでは、3つの動きベクトルでアフィン変換による変形を表すことができる。変形の表現力はDMV4モードに比べて限定されるが、符号化すべき動きベクトル(より具体的には、差分ベクトル)の数を減らすことができる。
DMV2Vモードでは、2つの動きベクトルで平行移動に加えて垂直方向に異なる変形を表すことができる。変形の表現力はDMV4モードおよびDMV3モードに比べて限定されるが、符号化すべき動きベクトルの数を減らすことができる。DMV2Hモードでは、2つの動きベクトルで平行移動に加えて水平方向に異なる変形を表すことができる。変形の表現力はDMV4モードおよびDMV3モードに比べて限定されるが、符号化すべき動きベクトルの数を減らすことができる。DMV2Aモードや、DMV2Bモードでは、2つの動きベクトルで平行移動に加えて斜め方向に異なる変形を表すことができる。変形の表現力はDMV4モードおよびDMV3モードに比べて限定されるが、符号化すべき動きベクトルの数を減らすことができる。DMV1Aモード、DMV1Bモード、DMV1Cモード、DMV1DモードおよびDMV0モードでは近隣のブロックから類推した変形にフィットしたとき、符号化すべき動きベクトルの数を大きく減らすことができる。
図1に戻り、予測方法決定部104は、対象画像内の対象ブロックごとに、平行移動動き補償予測部102による予測方法と、幾何学変換動き補償予測部103による予測方法とのいずれを採用するか決定する。より具体的には、いずれの予測方法の、いずれのモードを採用するかを決定する。以下、モードの選択を含めて予測方法の選択という。
すなわち、予測方法決定部104は、平行移動による動き補償予測または幾何学変換による動き補償予測のどちらを、どの参照画像を用いて、どの画素ブロック単位で符号化するかを選択することにより、予測方法を決定する。幾何学変換による動き補償予測を選択する場合、DMV4モード、DMV3モード、DMV2Vモード、DMV2Hモード、DMV2Aモード、DMV2Bモード、DMV1Aモード、DMV1Bモード、DMV1Cモード、DMV1DモードおよびDMV0モードのいずれかを選択する。その際、それらの項目の、どの組み合わせが、最も効率的な符号化を実現できる予測方法であるかを判定することにより、予測方法を決定する。予測方法を決定する基準として、たとえば、符号量と歪の関係を考慮したレート歪理論を用いることができる。より具体的には、マクロブロックの符号量(すなわち、予測方法情報、動きベクトルおよび予測信号の合計符号量)を算出するとともに、符号化対象画像と復号画像の差から歪量を算出し、当該符号量および当該歪量を入力変数とするレート歪関数を最小化する予測方法を選択する。
予測方法決定部104は、採用した予測方法情報を第1符号化ビット列生成部107および差分ベクトル算出部114に、採用した予測方法に応じた動きベクトルを差分ベクトル算出部114に供給する。それとともに、予測方法決定部104は、採用した予測方法により生成された予測信号を予測誤差信号生成部105に供給する。
第1符号化ビット列生成部107は、予測方法決定部104から供給される予測方法情報を、算術符号化などのエントロピー符号化により符号化し、符号化ビット列を生成する。予測方法情報に含めるべき、予測ブロックサイズ、L0/L1予測の区別などは組み合わせてマクロブロック・タイプとして符号化する。また、予測方法情報に含めるべき、平行移動による動き補償予測と幾何学変換による動き補償予測のいずれを用いるか、幾何学変換の場合、DMV4モード、DMV3モード、DMV2Vモード、DMV2Hモード、DMV2Aモード、DMV2Bモード、DMV1Aモード、DMV1Bモード、DMV1Cモード、DMV1DモードおよびDMV0モードのいずれを用いるかを識別するための情報に関しては、以下の記述方法を用いることができる。たとえば、シンタックス要素を別途に用意して記述してもよいし、他のマクロブロック・タイプとして符号化する情報と組み合わせることで、マクロブロック・タイプを拡張して記述してもよい。
たとえば、幾何学変換による動き補償予測を行うか否かを切り替えるブロック単位毎に、“geom_type”というシンタックス要素を用意する。“geom_type”の値が“0”を平行移動による動き補償予測、“geom_type”の値が“1”を幾何学変換による動き補償予測のDMV0モード、“geom_type”の値が“2”を幾何学変換による動き補償予測のDMV1Aモード、“geom_type”の値が“3”を幾何学変換による動き補償予測のDMV1Bモード、“geom_type”の値が“4”を幾何学変換による動き補償予測のDMV1Cモード、“geom_type”の値が“5”を幾何学変換による動き補償予測のDMV1Dモード、“geom_type”の値が“6”を幾何学変換による動き補償予測のDMV2Vモード、“geom_type”の値が“7”を幾何学変換による動き補償予測のDMV2Hモード、“geom_type”の値が“8”を幾何学変換による動き補償予測のDMV2Aモード、“geom_type”の値が“9”を幾何学変換による動き補償予測のDMV2Bモード、“geom_type”の値が“10”を幾何学変換による動き補償予測のDMV3モード、および“geom_type”の値が“11”を幾何学変換による動き補償予測のDMV4モードを表すものとして符号化する。
図6は、シンタックス構造の一例を示す図である。なお、図6では“geom_type”をマクロブロックごとに1つ用意し、L0予測、L1予測共に共通のモードで動き補償予測を行う例を示しているが、L0、L1双方から予測するモードの場合、2つ用意することにより、L0予測、L1予測それぞれ別の動き補償予測を行うこともできる。
対象ブロックの動きベクトルを符号化する際、すでに符号化または復号済みの周囲の隣接ブロックまたはその隣接ブロックの画素の動きベクトルとの相関を利用して、当該隣接ブロックまたは当該隣接ブロックの画素の動きベクトルから動きベクトルを予測することにより予測ベクトルを算出することができる。そして、この予測ベクトルと、対象ブロックまたは対象画素の動きベクトルとの差分である差分ベクトルを算出することにより、対象ブロックまたは対象画素の動きベクトルの符号量を削減することができる。ここで、幾何学変換による動き補償予測が採用された対象ブロックでは、その代表画素の動きベクトルが符号化の対象となる。
図1に戻り、差分ベクトル算出部114は、予測方法決定部104から供給される予測方法情報に応じて、対象ブロックの他の代表画素、すでに符号化されている周囲の隣接ブロックまたはその隣接ブロックの画素の動きベクトルから、対象ブロックまたは対象画素の動きベクトルを予測することにより予測ベクトルを算出する。なお、予測ベクトルを平行移動動き補償予測部102、幾何学変換動き補償予測部103、予測方法決定部104で算出した場合、これらの値を差分ベクトル算出部114で用いてもよい。そして、差分ベクトル算出部114は、その予測ベクトルと、予測方法決定部104から供給される動きベクトルとの差分を算出して差分ベクトルを生成し、第2符号化ビット列生成部108に供給する。
DMV4モードでは、差分ベクトル算出部114は、4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dの動きベクトルを符号化・復号するために、それぞれの予測ベクトルおよび差分ベクトルを算出する。DMV3モードでは、3つの頂点a、b、cに対応する3つの代表画素a、b、cの動きベクトルを符号化・復号するために、それぞれの予測ベクトルおよび差分ベクトルを算出する。DMV2Vモードでは、2つの頂点a、cに対応する2つの代表画素a、cの動きベクトルを符号化・復号するために、それぞれ予測ベクトルおよび差分ベクトルを算出する。DMV2Hモードでは、2つの頂点a、bに対応する2つの代表画素a、bの動きベクトルを符号化・復号するために、それぞれの予測ベクトルおよび差分ベクトルを算出する。DMV2Aモードでは、2つの頂点a、dに対応する2つの代表画素a、dの動きベクトルを符号化・復号するために、それぞれ予測ベクトルおよび差分ベクトルを算出する。DMV2Bモードでは、2つの頂点b、cに対応する2つの代表画素b、cの動きベクトルを符号化・復号するために、それぞれ予測ベクトルおよび差分ベクトルを算出する。
DMV1Aモードでは、頂点aに対応する代表画素aの動きベクトルを符号化・復号するために、代表画素aの予測ベクトルおよび差分ベクトルだけを算出する。DMV1Bモードでは、頂点bに対応する代表画素bの動きベクトルを符号化・復号するために、代表画素bの予測ベクトルおよび差分ベクトルだけを算出する。DMV1Cモードでは、頂点cに対応する代表画素cの動きベクトルを符号化・復号するために、代表画素cの予測ベクトルおよび差分ベクトルだけを算出する。DMV1Dモードでは、頂点dに対応する代表画素dの動きベクトルを符号化・復号するために、代表画素dの予測ベクトルおよび差分ベクトルだけを算出する。DMV0モードでは、どの動きベクトルも符号化・復号しないのため、差分ベクトルを算出しない。
なお、差分ベクトル算出部114は、予測方法決定部104から供給される対象ブロックの予測方法情報および動きベクトルを保持し、後続する対象ブロックの予測ベクトルの算出に利用する。
図7(a)〜(d)は、符号化対象ブロックおよび隣接ブロック共に平行移動による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法を説明するための図である。図7(a)は、パーティションが設定されていないマクロブロック間において、動きベクトルを予測する例を示す。図7(b)は、パーティションが設定されているマクロブロック間において、動きベクトルを予測する例を示す。図7(c)は、8×16画素のマクロブロックにおいて、動きベクトルを予測する例を示す。図7(d)は、16×8画素のマクロブロックにおいて、動きベクトルを予測する例を示す。以下、図7(a)〜(d)を参照して、動きベクトルの予測方法について説明する。この動きベクトルの予測方法は、周囲の隣接ブロックの動きベクトルの中央値を用いて、対象ブロックの動きベクトルを予測する。
図7(a)〜(d)にて、グレーで塗られているブロックの動きベクトルが符号化対象である。図7(a)にて、対象ブロックの動きベクトルを、その対象ブロックの左隣のブロックA、上隣のブロックBおよび右斜上隣のブロックCの3つの動きベクトルを候補として用いることにより予測する。より具体的には、それら3つの動きベクトルから水平成分および垂直成分それぞれについて中央値をとって予測ベクトルとする。
なお、Bピクチャにおいては、L0予測のための動きベクトルとL1予測のための動きベクトルをそれぞれ別々に扱う。その対象ブロックの左隣のブロックA、上隣のブロックBおよび右斜上隣のブロックCの3つのL0予測のための動きベクトルを用いて予測することにより、対象ブロックのL0予測のための予測ベクトルを算出する。同様に、その対象ブロックの左隣のブロックA、上隣のブロックBおよび右斜上隣のブロックCの3つのL1予測のための動きベクトルを用いて予測することにより、対象ブロックのL1予測のための予測ベクトルを算出する。ここで、上隣のブロックBおよび右斜上隣のブロックCが共に利用できず、ブロックAだけが利用できる場合、ブロックAの動きベクトルを予測ベクトルとして採用する。また、左隣のブロックA、上隣のブロックBおよび右斜上隣のブロックCの参照インデックスのうち、1つだけが符号化対象ブロックの参照インデックスと値が等しい(すなわち、参照ピクチャが等しい)場合、そのブロックの動きベクトルを予測に用いる。
図7(b)に示すように、隣接するマクロブロックにパーティションが設定されている場合、マクロブロックの小ブロックごとに動きベクトルが異なる。その場合、対象ブロックの左隣のブロックでは、対象ブロックと接している小ブロックのうち、最も上の小ブロックAの動きベクトルを候補として採用する。上隣のブロックでは、対象ブロックと接している小ブロックのうち、最も左のブロックBを候補として採用する。右斜上隣のブロックでは、最も左下の小ブロックCを候補として採用する。この規則に従って、以下、図7(a)と同様に、予測ベクトルを算出する。
図7(c)に示すように、符号化するブロックが8×16の場合、3つのブロックの動きベクトルの中央値ではなく、左のブロックは左隣のブロックA、右のブロックは右斜上隣のブロックCの動きベクトルを予測ベクトルとして採用する。また、図7(d)に示すように、符号化するブロックが16×8の場合も、3つのブロックの動きベクトルの中央値ではなく、上のブロックは上隣のブロックB、下のブロックは左隣のブロックAの動きベクトルを予測ベクトルとして採用する。
なお、図7(a)〜(d)に示す動きベクトルの予測方法は一例であり、それに限られるものではない。符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、他の方法を用いることもできる。たとえば、隣接ブロックの位置および数が異なっていてもよい。また、隣接ブロックの複数の動きベクトルの中央値ではなく、平均値を用いてもよい。規定の条件や優先順位を設けて、単独の隣接ブロックの動きベクトルをそのまま用いてもよい。また、隣接ブロックは対象ブロックと必ずしも接していなくてもよい。また、図7(a)〜(d)ではマクロブロック単位の動きベクトルを予測する例を説明したが、サブマクロブロック単位の動きベクトルを予測する場合も、同様に処理することができる。
つぎに、符号化対象ブロックで平行移動による動き補償予測が選択され、隣接ブロックで幾何学変換による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法について説明する。隣接ブロックが幾何学変換による動き補償予測の場合、対象ブロックの左隣のブロックでは、対象ブロックと接している小ブロックのうち、最も上の小ブロックの右上の第2代表画素bの動きベクトルを、予測ベクトルを算出する際の候補として採用する。上隣のブロックでは、対象ブロックと接している小ブロックのうち、最も左のブロックの左下の第3代表画素cの動きベクトルを、予測ベクトルを算出する際の候補として採用する。右斜上隣のブロックでは、最も左下の小ブロックの左下の第3代表画素cの動きベクトルを、予測ベクトルを算出する際の候補として採用する。この規則に従って、以下、上述した図7(a)と同様に、予測ベクトルを算出する。
なお、この動きベクトルの予測方法は一例であり、それに限られるものではない。符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、他の方法を用いることもできる。たとえば、対象ブロックの左隣のブロックの4つの代表画素の平均値を対象ブロックの左隣の動きベクトルの候補としてもよい。また、対象ブロックの上隣のブロックの4つの代表画素の平均値を対象ブロックの上隣の動きベクトルの候補としてもよい。また、対象ブロックの右上隣のブロックの4つの代表画素の平均値を対象ブロックの右上隣の動きベクトルの候補としてもよい。さらに、隣接ブロックや隣接ブロックの画素の位置および数が異なっていてもよい。また、隣接ブロックの画素の複数の動きベクトルの中央値ではなく、平均値を用いてもよい。単独の隣接ブロックの画素の動きベクトルをそのまま用いてもよい。また、隣接ブロックまたは隣接ブロックの画素は対象ブロックと必ずしも接していなくてもよい。また、ここではマクロブロック単位の動きベクトルを予測する例を説明したが、サブマクロブロック単位の動きベクトルを予測する場合も、同様に処理することができる。
つぎに、符号化対象ブロックおよび隣接ブロック共に幾何学変換による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法について説明する。この場合においても同様に、隣接ブロックの動きベクトルから予測ベクトルを算出する。ただし、前述のDMV2Vモードの第2代表画素bおよび第4代表画素dの差分ベクトル、DMV2Hモードの第3代表画素cおよび第4代表画素dの差分ベクトル、DMV2Aモードの第2代表画素bおよび第3代表画素cの差分ベクトル、DMV2Bモードの第1代表画素aおよび第4代表画素dの差分ベクトルに関しては、前述した方法により対象ブロックの動きベクトルの値から算出する。
これらのモードを除く符号化対象ブロックの第1代表画素a、第2代表画素bおよび第3代表画素cの予測ベクトルは、隣接ブロックの代表画素の動きベクトルから予測する。符号化対象ブロックの第1代表画素aの予測ベクトルは、左隣のブロックAの第2代表画素bの動きベクトル、上隣のブロックBの第3代表画素cの動きベクトルおよび左斜上隣のブロックDの第4代表画素dの動きベクトルを予測ベクトルの候補として参照して算出する。予測ベクトルの算出の際には、あらかじめ規則を設定して、その規則に応じて選択する。例えば、左隣のブロックAの第2代表画素bの動きベクトル、上隣のブロックBの第3代表画素cの動きベクトル、左斜上隣のブロックDの第4代表画素dの動きベクトルの順に優先順位を設定し、参照画像が同じ動きベクトルを予測ベクトルとして選択する。参照画像が同じ動きベクトルが複数ある場合は優先順位が先の動きベクトルを予測ベクトルとして選択する。参照画像が同じ動きベクトルが存在しない場合は、後述のスケーリングを行う。
符号化対象ブロックの第2代表画素bの予測ベクトルは、上隣のブロックBの第4代表画素dの動きベクトル、右斜上隣のブロックCの第3代表画素cの動きベクトル、当該対象ブロックの第1代表画素aの動きベクトルを予測ベクトルの候補として参照して算出する。この場合も予測ベクトルの算出の際には、あらかじめ規則を設定して、その規則に応じて選択する。例えば、上隣のブロックBの第4代表画素dの動きベクトル、右斜上隣のブロックCの第3代表画素cの動きベクトル、当該対象ブロックの第1代表画素aの動きベクトルの動きベクトルの順に優先順位を設定し、参照画像が同じ動きベクトルを予測ベクトルとして選択する。参照画像が同じ動きベクトルが複数ある場合は優先順位が先の動きベクトルを予測ベクトルとして選択する。
符号化対象ブロックの第3代表画素cの予測ベクトルは、左隣のブロックAの第4代表画素dの動きベクトル、当該対象ブロックの第1代表画素aの動きベクトルを予測ベクトルの候補として参照して算出する。この場合も予測ベクトルの算出の際には、あらかじめ規則を設定して、その規則に応じて選択する。例えば、上隣のブロックBの第4代表画素dの動きベクトル、右斜上隣のブロックCの第3代表画素cの動きベクトル、当該対象ブロックの第1代表画素aの動きベクトルの順に優先順位を設定し、参照画像が同じ動きベクトルを予測ベクトルとして選択する。参照画像が同じ動きベクトルが複数ある場合は優先順位が先の動きベクトルを予測ベクトルとして選択する。なお、シンタックスに複数の候補から予測ベクトルとして採用する動きベクトルを特定するためのフラグを用意してもよい。この場合、差分ベクトルを符号化する代表点に関しては差分ベクトルの符号量が最も小さくなる候補を選択し、差分ベクトルを符号化しない代表点に関しては最も良好な幾何学変換動き補償画像を得られる候補を選択して、第1符号化ビット列生成部107で代表点ごとに選択した候補を特定するフラグを符号化する。
つぎに、符号化対象ブロックで幾何学変換による動き補償予測が選択され、隣接ブロックで平行移動による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法について説明する。隣接ブロックが平行移動による動き補償予測の場合、隣接ブロックの動きベクトルが当該隣接ブロック内のすべての画素で共通である。そこで、隣接ブロックの動きベクトルを、その隣接ブロックの代表画素の動きベクトルとし、符号化対象ブロックおよび隣接ブロック共に幾何学変換による動き補償予測が選択された場合の符号化対象ブロックの動きベクトルの予測方法と同様の方法で算出する。
なお、幾何学変換による動き補償予測が選択された場合の動きベクトルの予測方法は一例であり、それに限られるものではない。符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、他の方法を用いることもできる。たとえば、隣接ブロックの代表画素の位置および数が異なっていてもよい。また、隣接ブロックの代表画素の複数の動きベクトルの中央値ではなく、平均値を用いてもよい。単独の隣接ブロックの代表画素の動きベクトルをそのまま用いてもよい。
また、前述したDMV2Vモード、DMV2Hモード、DMV2Aモード、DMV2Bモードを除く第4代表画素dの予測ベクトルPVdは、第1代表画素a、第2代表画素bおよび第3代表画素cのそれぞれの動きベクトルVa、Vb、Vcから下記式(9)により算出する。
PVd=Vc+(Vb−Va) ・・・式(9)
あるいは、下記式(10)により算出する。
PVd=Vb+(Vc−Va) ・・・式(10)
この第4代表画素dの予測ベクトルの算出式である上記式(9)および上記式(10)は、DMV3モードで算出する第4代表画素dの算出式である上記式(1)および上記式(2)とそれぞれ同じ式である。DMV2Vモード、DMV2HモードおよびDMV3モードでは表現できない変形を表すことができるが、DMV3モードで表現できるアフィン変換に近い変換であることが多い。上記式(9)および上記式(10)で算出できる予測ベクトルは、DMV4モードで符号化・復号する第4代表画素dの動きベクトルと強い相関があるという考えに基づいている。
なお、符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、他の方法を用いることもできる。たとえば、第4代表画素dに関しては、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルの中央値を予測ベクトルとして用いることもできる。あるいは、中央値の代わりに、平均値を用いてもよいし、単独の任意の画素の動きベクトルをそのまま用いてもよい。または、式(9)で算出される予測ベクトル、第1代表画素aの動きベクトル、第2代表画素bの動きベクトル、第3代表画素cの動きベクトル、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルの中央値、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルの平均値を予測ベクトルの候補とし、少なくとも2つを適応的に切り替えてもよい。この場合、シンタックスに複数の候補から予測ベクトルとして採用する動きベクトルを特定するためのフラグを用意し、第1符号化ビット列生成部107でこのフラグを符号化する。
また、DMV2Aモードでは、当該対象ブロックの第1代表画素aの動きベクトルVaを第4代表画素dの予測ベクトルPVdとする。DMV2Aモードでは、第2代表画素bおよび第3代表画素cの動きベクトルVb、Vcを算出する際に、第4代表画素dの動きベクトルVdを利用するので、第4代表画素dの予測ベクトルPVdを算出する際に、第2代表画素bおよび第3代表画素cの動きベクトルVb、Vcを利用することができないからである。
また、上記において説明した動きベクトルの予測方法において、隣接ブロックや隣接ブロックの画素の動きベクトルをそのまま候補とするのではなく、スケーリングした動きベクトル値Vabcd’を予測ベクトルの算出に用いてもよい。スケーリングした動きベクトル値Vabcd’は、符号化対象画像と符号化対象ブロックの動きベクトルが指し示す参照画像との間の距離(時間)T1と、符号化対象画像と隣接ブロックまたは隣接画素の動きベクトルVabcdが指し示す参照画像との距離(時間)T2との違いに応じてスケーリングした動きベクトル値である。スケーリングした動きベクトル値Vabcd’は下記式(11)により算出される。
Vabcd’=Vabcd*(T1/T2) ・・・式(11)
符号化対象ブロックの動き補償予測で参照する参照画像と、隣接ブロックの動き補償予測で参照する参照画像が異なる場合、互いの動きベクトルの大きさに差が生じるため、そのミスマッチを解消するために動きベクトルをスケーリングする。たとえば、物体が変形せず、等速運動をしていれば、動きベクトルの大きさはフレーム間隔が長くなるほど大きくなる。そこで、符号化対象画像−参照画像間のフレーム間隔T1、T2の比率に応じて隣接ブロック(隣接画素)の動きベクトルVabcdをスケーリングしてVabcd’を算出する。
図8は、動きベクトル値のスケーリング処理の一例を説明するための図である。図8では、符号化対象画像の符号化対象ブロックの参照画像が画像Ref2であり、隣接ブロック(隣接画素)の動き補償予測の参照画像が画像Ref3である例を示している。図8ではT1:T2=2:3であるため、画像Ref3を参照している隣接ブロック(隣接画素)の動きベクトルを2/3にスケーリングする。これにより、隣接ブロック(隣接画素)が画像Ref2を参照して動き補償予測をした場合の動きベクトル値に近くなり、結果的に画像Ref2を参照する符号化対象ブロックの動きベクトル値に近くなる。図8の例では、隣接ブロックの動き補償予測の際の参加画像が画像Ref3でその動きベクトルの値が(24,−9)の場合、それを2/3にスケーリングした(16,6)を、符号化対象ブロックが参照する画像Ref2の動きベクトル値とするとよい。
なお、符号化側と復号側で動きベクトルの予測方法を同一に規定する限りにおいては、対象ブロックの第2代表画素bの予測ベクトルを算出する際に、第1代表画素aの動きベクトルを対象ブロックの第2代表画素bの予測ベクトルとしてもよい。また、上隣のブロックBの第4代表画素dの動きベクトルを対象ブロックの第2代表画素bの予測ベクトルとするか、第1代表画素aの動きベクトルを対象ブロックの第2代表画素bの予測ベクトルとするかを適応的に切り替えてもよい。
対象ブロックの第1代表画素aの差分ベクトルを符号化するモードにおいては、対象ブロックと上隣のブロックBの幅が同じ場合、対象ブロックの第1代表画素aの動きベクトルの値に応じて切り替えることもできる。対象ブロックの第1代表画素aの動きベクトルの値が、参照画像との間の距離の違いを補正するためにスケーリングされた上隣のブロックBの第4代表画素dの動きベクトルの値と同じか両者の値が所定の第1設定値(極めて小さな値に設定される)未満の場合、上隣のブロックBの第4代表画素dのスケーリングされた動きベクトルを予測ベクトルとして採用し、両者の値が当該第1設定値以上離れている場合、対象ブロックの第1代表画素aの動きベクトルを予測ベクトルとして採用する。対象ブロックの第1代表画素aの動きベクトルの値が、上隣のブロックBの第4代表画素dのスケーリングされた動きベクトルの値と同じか非常に近い場合、第2代表画素bの差分ベクトルを符号化・復号するモードでは、対象ブロックの第2代表画素bの動きベクトルの値が、スケーリングされた上隣のブロックBの第4代表画素dの動きベクトルの値と同じか非常に近い値になる確率が高く、差分ベクトルの符号量を削減できる。第2代表画素bの差分ベクトルを符号化・復号しないモードでは、対象ブロックの第1代表画素aの動きベクトルよりもスケーリングされた上隣のブロックBの第4代表画素dの動きベクトルの値にしたほうが良好な幾何学変換動き補償画像を得られる確率が高いためである。
一方、対象ブロックの第1代表画素aの動きベクトルの値が、スケーリングされた上隣のブロックBの第4代表画素dの動きベクトルの値と比較的離れている場合、第2代表画素bの差分ベクトルを符号化・復号するモードでは、対象ブロックの第2代表画素bの動きベクトルの値が、スケーリングされた上隣のブロックBの第4代表画素dの動きベクトルの値と比較的離れる確率が高く、この場合、スケーリングされた上隣のブロックBの第4代表画素dの動きベクトルからではなく、対象ブロックの第1代表画素aの動きベクトルの値を予測ベクトルとしたほうが差分ベクトルの符号量を削減できる可能性が高い。第2代表画素bの差分ベクトルを符号化・復号しないモードでは、スケーリングされた上隣のブロックBの第4代表画素dの動きベクトルよりも対象ブロックの第1代表画素aの動きベクトルの値を予測ベクトルとしたほうが良好な幾何学変換動き補償画像を得られる確率が高い。なお、上記第1設定値は、設計者による実験やシミュレーションにもとづき決定される。
また、対象ブロックの第3代表画素cの予測ベクトルを算出する際に、第1代表画素aの動きベクトルを対象ブロックの第3代表画素cの予測ベクトルとしてもよい。また、前述のように左隣のブロックAの第4代表画素dの動きベクトルを対象ブロックの第3代表画素cの予測ベクトルとするか、対象ブロックの第1代表画素aの動きベクトルを対象ブロックの第3代表画素cの予測ベクトルとするかを適応的に切り替える際には、
対象ブロックの第1代表画素aの差分ベクトルを符号化するモードにおいては、対象ブロックと左隣のブロックAの高さが同じ場合、対象ブロックの第1代表画素aの動きベクトルの値に応じて切り替えることもできる。対象ブロックの第1代表画素aの動きベクトルの値が、参照画像との間の距離の違いを補正するためにスケーリングされた左隣のブロックAの第4代表画素dの動きベクトルの値と同じか両者の値が所定の第2設定値(極めて小さな値に設定される)未満の場合、スケーリングされた左隣のブロックAの第4代表画素dの動きベクトルを予測ベクトルとして採用し、両者の値が当該第2設定値以上離れている場合、対象ブロックの第1代表画素aの動きベクトルを予測ベクトルとして採用する。対象ブロックの第1代表画素aの動きベクトルの値が、スケーリングされた左隣のブロックAの第4代表画素dの動きベクトルの値と同じか非常に近い場合、第3代表画素cの差分ベクトルを符号化・復号するモードでは、対象ブロックの第3代表画素cの動きベクトルの値が、スケーリングされた左隣のブロックAの第4代表画素dの動きベクトルの値と同じか非常に近い値になる確率が高く、差分ベクトルの符号量を削減できる。第3代表画素cの差分ベクトルを符号化・復号しないモードでは、対象ブロックの第1代表画素aの動きベクトルよりもスケーリングされた左隣のブロックAの第4代表画素dの動きベクトルの値にしたほうが良好な幾何学変換動き補償画像を得られる確率が高いためである。
一方、対象ブロックの第1代表画素aの動きベクトルの値が、スケーリングされた左隣のブロックAの第4代表画素dの動きベクトルの値と比較的離れている場合、第3代表画素cの差分ベクトルを符号化・復号するモードでは、対象ブロックの第3代表画素cの動きベクトルの値が、スケーリングされた左隣のブロックAの第4代表画素dの動きベクトルの値と比較的離れる確率が高く、この場合、スケーリングされた左隣のブロックAの第4代表画素dの動きベクトルからではなく、対象ブロックの第1代表画素aの動きベクトルの値を予測ベクトルとしたほうが差分ベクトルの符号量を削減できる可能性が高い。第3代表画素cの差分ベクトルを符号化・復号しないモードでは、スケーリングされた左隣のブロックAの第4代表画素dの動きベクトルよりも対象ブロックの第1代表画素aの動きベクトルの値を予測ベクトルとしたほうが良好な幾何学変換動き補償画像を得られる確率が高い。
以上、隣接ブロックが幾何学変換による動き補償予測が選択された場合について説明したが、隣接ブロックが平行移動による動き補償予測が選択された場合、隣接ブロックの代表画素の動きベクトルの代わりに、隣接ブロックの動きベクトルを予測ベクトルとしたり、評価に用いたりする。具体的には、対象ブロックの第1代表画素aの動きベクトルと比較する上隣のブロックBの第4代表画素dの動きベクトルの代わりに、上隣のブロックBの動きベクトルを用い、左隣のブロックAの第4代表画素dの動きベクトルの代わりに、左隣のブロックAの動きベクトルを用いる。また、対象ブロックの第2代表画素bの予測ベクトルまたは動きベクトルを算出する際に参照する上隣のブロックBの第4代表画素dの動きベクトルの代わりに、上隣のブロックBの動きベクトルを用いる。また、対象ブロックの第3代表画素cの予測ベクトルまたは動きベクトルを算出する際に参照する左隣のブロックAの第4代表画素dの動きベクトルの代わりに、左隣のブロックAの動きベクトルを用いる。
以上、幾何学変換による動き補償予測の予測ベクトルについて説明したが、DMV2Vの第2代表画素bと第4代表画素d、DMV2Hの第3代表画素cと第4代表画素d、DMV2Aの第2代表画素bと第3代表画素c、およびDMV2Bの第1代表画素aと第4代表画素dを除き、DMV4モードと共通の算出方法で行う。なお、復号側と共通のルールを規定する限りにおいては、DMV2Vの第2代表画素bと第4代表画素d、DMV2Hの第3代表画素cと第4代表画素d、DMV2Aの第2代表画素bと第3代表画素c、およびDMV2Bの第1代表画素aと第4代表画素dにおいても、DMV4モードと共通の算出方法で行うことが可能である。
図1に戻り、第2符号化ビット列生成部108は、差分ベクトル算出部114から供給される差分ベクトルを算術符号化などのエントロピー符号化により符号化し、符号化ビット列を生成する。
なお、幾何学変換による動き補償予測では、予測モードに応じて、0〜4本の差分ベクトルを符号化する。DMV4モードでは、4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dのそれぞれの差分ベクトルを符号化する。DMV3モードでは、3つの頂点a、b、cに対応する3つの代表画素a、b、cのそれぞれの差分ベクトルを符号化する。DMV2Vモードでは、2つの頂点a、cに対応する代表画素a、cのそれぞれの差分ベクトルを符号化する。DMV2Hモードでは、2つの頂点a、bに対応する代表画素a、bのそれぞれの差分ベクトルを符号化する。DMV2Aモードでは、2つの頂点a、dに対応する代表画素a、dのそれぞれの差分ベクトルを符号化する。DMV2Bモードでは、2つの頂点b、cに対応する代表画素b、cのそれぞれの差分ベクトルを符号化する。DMV1Aモードでは、頂点aに対応する代表画素aの差分ベクトルだけを符号化する。DMV1Bモードでは、頂点bに対応する代表画素bの差分ベクトルだけを符号化する。DMV1Cモードでは、頂点cに対応する代表画素cの差分ベクトルだけを符号化する。DMV1Dモードでは、頂点dに対応する代表画素dの差分ベクトルだけを符号化する。DMV0モードでは、どの代表画素の差分ベクトルも符号化しない。
予測誤差信号生成部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に格納される復号画像は、必要に応じて、符号化順序で後続する画像を動き補償予測する際の参照画像として利用される。
以下、上記図5に示した幾何学変換動きベクトル検出部121の検出方法の一例として、平行移動動き補償予測部102により生成されたマクロブロックやマクロブロック・パーティションの動きベクトルなどの平行移動の動きベクトルを補正して、幾何学変換の代表画素の動きベクトルを検出する方法について説明する。図9は、本発明の実施の形態1に係る幾何学変換動きベクトル検出部121の構成を示すブロック図である。幾何学変換動きベクトル検出部121は、代表点動きベクトル設定部131、第2の非代表点動きベクトル算出部132、第2の予測部133、ブロックマッチング部134および評価部135を含む。
マクロブロックの平行移動の動きベクトルを補正して幾何学変換の代表画素の動きベクトルとして用いる場合、幾何学変換動きベクトル検出部121は、平行移動動き補償予測部102により生成されたマクロブロックの動きベクトルの値を各代表画素の動きベクトルの初期値に設定する。そして、それらの代表画素の動きベクトルの値を増加方向および減少方向に変更させて、上述した幾何学変換動き補償予測と同様の処理により参照画像を変形させながら動き補償してブロックマッチングを行う。これにより、幾何学変換の代表画素の動きベクトルを算出する。
図10(a)〜(h)は、平行移動動き補償予測部102により生成された平行移動の動きベクトルを補正して幾何学変換の代表画素の動きベクトルを検出する方法の具体例を示す図である。まず、DMV4モードの場合について考える。代表点動きベクトル設定部131は、代表点b、c、dの動きベクトルを固定して、所定の動きベクトル検出範囲内で代表点aの動きベクトルを水平・垂直方向に変更する。当該動きベクトル検出範囲は、たとえば、代表点aを中心とする7×7画素の正方形領域であってもよい。第2の非代表点動きベクトル算出部132は、代表点aの動きベクトルが変更される度に、第1の非代表点動きベクトル算出部122と同様の方法により、代表点以外の各画素の動きベクトルを算出する。第2の予測部133は、第1の予測部123と同様の方法により、各画素の動きベクトルに応じて参照画像の画素を補間することにより、参照画像を変形しながら予測する。ブロックマッチング部134は、符号化画像信号(より具体的には、対象ブロック信号)と予測信号との間でブロックマッチングを行い、差分絶対値和、差分二乗和などのマッチング評価値を算出する。評価部135は、今回算出されたマッチング評価値と、代表点aの動きベクトルの候補のマッチング評価値(それまで算出されたマッチング評価値の最小値)とを比較し、マッチング評価値が小さいほうの動きベクトルを新しい代表点aの候補とする。この一連の処理を繰り返し、代表点aの動きベクトルの候補を算出する(図10(a)参照)。
代表点動きベクトル設定部131は、代表点aの動きベクトルを更新し、つぎに代表点a、c、dの動きベクトルを固定して、所定の動きベクトル検出範囲内で代表点bの動きベクトルを変更する。第2の非代表点動きベクトル算出部132は、代表点bの動きベクトルが変更される度に、代表点以外の各画素の動きベクトルを算出する。第2の予測部133は、各画素の動きベクトルに応じて参照画像を変形しながら予測する。ブロックマッチング部134は、符号化画像信号と予測信号との間でブロックマッチングを行う(図10(b)参照)。代表点c、dについても、同様の手法により代表点c、dの動きベクトルを検出する(図10(c)、(d)参照)。さらに、必要に応じて再度、同様の手法により代表点a、b、c、dの動きベクトルを検出する(図10(e)〜(h)参照)。代表点a、b、c、dの動きベクトルの検出を1サイクルとして、そのサイクルを所定の回数実行したら検出処理を終了する。図10(a)〜(h)では2サイクル実行する。または、代表点a、b、c、dの動きベクトルのそれぞれが収束(すなわち、動きベクトルが変更されない状態)したら検出処理を終了する。
上述した例では、動きベクトル検出の初期値として、マクロブロックの動きベクトルを用いたが、マクロブロック・パーティションや、サブマクロブロックの動きベクトルを用いてもよい。また、新たに算出した動きベクトルを用いてもよい。また、マクロブロック・パーティションの平行移動の動きベクトルを補正して幾何学変換の代表画素の動きベクトルを検出する場合、マクロブロック・パーティションの動きベクトルの値をそれぞれ対応する代表画素の動きベクトルの初期値とし、上述した方法で、代表画素a、b、c、dの動きベクトルの値を算出する。
つぎに、DMV4モード以外のモードについて考える。DMV4モード以外のモードでは、差分ベクトルを符号化・復号する代表画素の動きベクトルを検出する際に、差分ベクトルを符号化・復号しない代表画素の動きベクトルを各予測モードの予測ベクトル算出規則に応じて算出することで、差分ベクトルを符号化・復号する代表画素の動きベクトルに連動して動かしていく。
DMV3モードは差分ベクトルを符号化・復号する代表画素a、b、cの動きベクトルを順次変更していくが、その際、代表画素dの動きベクトルも上記式(1)または上記式(2)に従って算出しながら変更する。たとえば、代表画素aの動きベクトルを動かしながら検出しているときには、代表画素b、cの動きベクトルは固定するが、差分ベクトルを符号化・復号しない代表画素dの動きベクトルは上記式(1)または上記(2)に従って算出されるため、代表画素aの動きベクトルに応じて随時変更する。
DMV2Vモードは差分ベクトルを符号化・復号する代表画素a、cの動きベクトルを順次変更していくが、代表画素aの動きベクトルを動かしながら検出しているときには、代表画素c、dの動きベクトルは固定するが、差分ベクトルを符号化・復号しない代表画素bの動きベクトルは代表画素aの動きベクトルと同じ値に随時変更する。代表画素cの動きベクトルを動かしながら検出しているときには、代表画素a、bの動きベクトルは固定するが、差分ベクトルを符号化・復号しない代表画素dの動きベクトルは代表画素bの動きベクトルと同じ値に随時変更する。
DMV2Hモードは差分ベクトルを符号化・復号する代表画素a、bの動きベクトルを順次変更していくが、代表画素aの動きベクトルを動かしながら検出しているときには、代表画素b、dの動きベクトルは固定するが、差分ベクトルを符号化・復号しない代表画素cの動きベクトルは代表画素aの動きベクトルと同じ値に随時変更する。代表画素cの動きベクトルを動かしながら検出しているときには、代表画素a、bの動きベクトルは固定するが、差分ベクトルを符号化・復号しない代表画素dの動きベクトルは代表画素bの動きベクトルと同じ値に随時変更する。
DMV2Aモード、DMV2Bモード、DMV1Aモード、DMV1Bモード、DMV1CモードおよびDMV1Dモードについても、上述した原理またはその延長線上の原理にしたがい、代表画素の動きベクトルを検出することができる。なお、それらの検出方法は、当業者であれば、上述した説明から容易に理解できるため、その詳細な説明を省略する。動きベクトルを符号化しないDMV0モードでは、周辺ブロックまたは対象ブロックから予測した予測ベクトルを動きベクトルとして用いる。
以上により、周囲のブロックの復号された動きベクトルから予測ベクトルを算出することができる。なお、周辺のブロックの動きベクトルが存在しない場合は候補に入れない。また、周辺のブロックが平行移動動き補償モードである場合、周辺のブロックの代表画素aでは当該ブロックの動きベクトルの値を、その代表画素aの動きベクトルの値とする。また、当該周辺のブロックの代表画素bでは左隣のブロックの動きベクトルの値を、その代表画素bの動きベクトルの値とする。また、当該周辺のブロックの代表画素cでは上隣のブロックの動きベクトルの値を、その代表画素bの動きベクトルの値とする。また、当該周辺のブロックの代表画素dでは左斜上隣のブロックの動きベクトルの値を、その代表画素bの動きベクトルの値とする。
図11は、本発明の実施の形態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)。
図12は、図11のフローチャートのステップS102の平行移動動き補償処理の手順を示すフローチャートである。平行移動動き補償予測部102は、以下に示すステップS1022およびステップS1023の処理を、平行移動動き補償のすべての候補対象(モード、参照画像など)が終了するまで繰り返し実行する(S1021、S1024)。平行移動動き補償予測部102は、平行移動の動きベクトルを検出し(S1022)、検出された動きベクトルに応じて、対象ブロックの平行移動による動き補償を行う(S1023)。
図13は、図11のフローチャートのステップS103の幾何学変換動き補償処理の手順を示すフローチャートである。幾何学変換動き補償予測部103は、以下に示すステップS1032およびステップS1033の処理を、幾何学変換動き補償のすべての候補対象(モード、参照画像など)が終了するまで繰り返し実行する(S1031、S1034)。幾何学変換動き補償予測部103は、幾何学変換の動きベクトルを検出し(S1032)、検出された動きベクトルに応じて、対象ブロックの幾何学変換による動き補償を行う(S1033)。
図14は、平行移動の動きベクトルを検出する手順を示すフローチャートである。平行移動動き補償予測部102は、以下に示すステップS122およびステップS127の処理を、所定の検出範囲内における全探索が終了するまで繰り返し実行する(S121、S128)。平行移動動き補償予測部102は、仮の動きベクトルの値を発生させ(S122)、発生させた仮の動きベクトルの値に応じて、平行移動による動き補償を行う(S123)。この仮の動きベクトルの値は、上記検出範囲内を全探索するために順次、更新される。
平行移動動き補償予測部102は、その動き補償後の対象ブロックと参照ブロックとの間でブロックマッチングを行い、その評価値を算出する(S124)。現在算出した評価値と、これまで算出された最小の評価値とを比較し(S125)、前者が後者以上の場合(S125のN)、以下に示すステップS126およびステップS127をスキップする。前者が後者未満の場合(S125のY)、現在の仮の動きベクトルを現時点での候補とし(S126)、現在の評価値を上記最小の評価値とする(S127)。
図15は、幾何学変換の動きベクトルを検出する手順を示すフローチャートである。図15に示すフローチャートは、1〜4本の差分ベクトルを符号化する幾何学変換モードにおいて動きベクトルを検出する手順を示すフローチャートである。
幾何学変換動き補償予測部103は、平行移動動き補償予測部102により生成された、対象ブロックの平行移動の動きベクトルを取得し(S131)、各代表点の動きベクトルの初期値に設定する(S132)。以下に示すステップS134からステップS141のまでの処理を所定の回数繰り返す(S133、S142)。さらに、以下に示すステップS135からステップS140までの処理を所定の検出範囲内における全探索が終了するまで繰り返し実行する(S134、S141)。
幾何学変換動き補償予測部103は、差分ベクトルを符号化する代表点のうち1点ずつ仮の動きベクトルの値を移動させる(S135)。なお、必要に応じて、差分ベクトルを符号化しない代表点の動きベクトルも連動させて移動させる。各モードの所定の規則に従い、差分ベクトルを符号化しない代表点の予測ベクトルを算出し、仮の動きベクトルとする。それらの仮の動きベクトルの値に応じて、対象ブロックの幾何学変換による動き補償を行う(S136)。幾何学変換動き補償予測部103は、その動き補償後の対象ブロックと参照ブロックとの間でブロックマッチングを行い、その評価値を算出する(S137)。現在算出した評価値と、これまで算出された最小の評価値とを比較し(S138)、前者が後者以上の場合(S138のN)、以下に示すステップS139およびステップS140をスキップする。前者が後者未満の場合(S138のY)、現在の仮の動きベクトルを現時点での候補とし(S139)、現在の評価値を上記最小の評価値とする(S140)。
図16は、図15のフローチャートのステップS136の幾何学変換動き補償処理の手順を示すフローチャートである。代表点動きベクトル設定部131は、対象ブロックの各代表点の動きベクトルを設定する(S1361)。第2の非代表点動きベクトル算出部132は、当該対象ブロックの各画素の動きベクトルを算出する(S1362)。第2の予測部133は、各画素毎の動きベクトルに応じた補間信号を取得する(S1363)。
以上説明したように実施の形態1によれば、幾何学変換による動き補償予測を使用する画像符号化方式にて、符号量の圧縮効率を向上させることができる。すなわち、幾何学変換による動き補償予測を使用する動きベクトルを予測符号化することにより、符号量を削減することができる。また、平行移動による動き補償予測と幾何学変換による動き補償予測とを併用すれば、符号量の圧縮効率をさらに向上させることができる。その際、平行移動による動き補償予測に係る動きベクトルと、幾何学変換による動き補償予測に係る動きベクトルの符号化方法を共通化することにより、これら2つの予測方法が混在しても、既存の動きベクトルの予測符号化方法をそのまま転用することができる。
また、幾何学変換による動き補償予測方法が採用されたブロックでも、平行移動による動き補償予測と同様に、対象ブロックの代表画素、周囲のブロックまたは周囲の画素の動きベクトルから予測ベクトルを予測し、差分ベクトルを算出することができる。これにより、平行移動による動き補償予測と幾何学変換による動き補償予測を併用しても、動きベクトルの符号量の増大を抑制することができる。DMV4モードにおいては、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルから上記式(9)または上記式(10)により、第4代表画素dの予測ベクトルを算出することにより、差分ベクトルの値を小さくし、動きベクトルの符号量の増大を抑制することができる。また、DMV3モードにおいては、第1代表画素a、第2代表画素bおよび第3代表画素cの動きベクトルから上記式(1)または上記式(2)により、第4代表画素dの動きベクトルを算出することにより、動きベクトルの符号量の増大を抑制することができる。
図17は、本発明の実施の形態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は、対象ブロックの複数の代表画素以外の画素の動きベクトルを、それら複数の代表画素の動きベクトルを用いた補間により算出する。たとえば、代表画素以外の画素の動きベクトルを、上記式(5)〜(8)に示した演算式により算出する。
切替制御部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モードのいずれを用いるかという情報が含まれている。幾何学変換動き補償で符号化されている場合、DMV4モード、DMV3モード、DMV2Vモード、DMV2Hモード、DMV2Aモード、DMV2Bモード、DMV1Aモード、DMV1Bモード、DMV1Cモード、DMV1DモードおよびDMV0モードのどのモードで符号化されているかの情報も含まれる。
第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)〜(11)を参照して説明した、画像符号化装置100の幾何学変換動き補償予測部103と同一の処理方法を用いることができる。幾何学変換動き補償予測部205は、それら画素ごとの動きベクトルに応じて画素ごとに動き補償を行うことにより、幾何学変換による動き補償予測を行う。
第3符号化ビット列復号部203は、入力スイッチ209を介して供給される符号化ビット列を順次復号し、符号化された予測誤差信号を取得する。予測誤差信号復号部206は、第3符号化ビット列復号部203から供給された符号化された予測誤差信号に対して、逆量子化、逆直交変換などの伸張復号処理を行い、復号された予測誤差信号を取得する。
復号画像信号生成部207は、予測信号、および予測誤差信号から画像信号を生成する。より具体的には、復号画像信号生成部207は、切替制御部214により指定された予測方法に応じて、平行移動動き補償予測部204または幾何学変換動き補償予測部205から第3予測部スイッチ212を介して供給される予測信号に、予測誤差信号復号部206から供給される予測誤差信号を重畳して、復号画像信号を生成する。復号画像信号生成部207は、その復号画像信号をブロック単位で、復号画像バッファ208に順次格納する。
図18は、本発明の実施の形態2に係る画像復号装置200における、マクロブロックの復号処理手順を示すフローチャートである。第1符号化ビット列復号部201は、入力スイッチ209を介して供給される符号化ビット列を復号して、予測方法情報、予測ベクトルの算出方法を示す情報などを取得する(S201)。なお、第1代表画素aの予測ベクトルの算出方法、第2代表画素bの予測ベクトルの算出方法、第3代表画素cの予測ベクトルの算出方法、第4代表画素dの予測ベクトルの算出方法をフラグにより切り替える場合、この第1符号化ビット列復号部201で復号する。
第2符号化ビット列復号部202は、入力スイッチ209を介して供給される符号化ビット列を復号して、差分ベクトルを取得する(S202)。なお、予測方法情報が幾何学変換による動き補償予測を示す場合、その予測方法情報に応じて0〜4本の差分ベクトルを復号する。DMV4モードでは、4つの頂点a、b、c、dに対応する4つの代表画素a、b、c、dのそれぞれの差分ベクトルを復号する。DMV3モードでは、3つの頂点a、b、cに対応する3つの代表画素a、b、cのそれぞれの差分ベクトルを復号する。DMV2Vモードでは、2つの頂点a、cに対応する代表画素a、cのそれぞれの差分ベクトルを復号する。DMV2Hモードでは、2つの頂点a、bに対応する代表画素a、bのそれぞれの差分ベクトルを復号する。DMV2Aモードでは、2つの頂点a、dに対応する代表画素a、dのそれぞれの差分ベクトルを復号する。DMV2Bモードでは、2つの頂点b、cに対応する代表画素b、cのそれぞれの差分ベクトルを復号する。DMV1Aモードでは、頂点aに対応する代表画素aの差分ベクトルだけを復号する。DMV1Bモードでは、頂点bに対応する代表画素bの差分ベクトルだけを復号する。DMV1Cモードでは、頂点cに対応する代表画素cの差分ベクトルだけを復号する。DMV1Dモードでは、頂点dに対応する代表画素dの差分ベクトルだけを符号化する。DMV0モードでは、どの代表画素の差分ベクトルも復号しない。
動きベクトル算出部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における参照画像信号として利用される。
図19は、図18のフローチャートのS203において、対象ブロックの第1代表画素aの動きベクトルの値に応じて、第2代表画素bの予測ベクトルの算出方法を切り替える処理が発生する場合の手順を示すフローチャートである。動きベクトル算出部215は、対象ブロックの第1代表画素aの動きベクトルと、上隣のブロックの第4代表画素dの動きベクトルまたは上隣のブロックBの動きベクトルとを比較する(S2031)、その差が上記第1設定値以下の場合(S2032のY)、上隣のブロックBの第4代表画素dの動きベクトルまたは上隣のブロックBの動きベクトルを、対象ブロックの第2代表画素bの予測ベクトルとして採用する(S2033)。上記第1設定値より大きい場合(S2032のN)、対象ブロックの第1代表画素aの動きベクトルを、対象ブロックの第2代表画素bの予測ベクトルとして採用する(S2034)。
図20は、図18のフローチャートのS203において、対象ブロックの第1代表画素aの動きベクトルの値に応じて、第3代表画素cの予測ベクトルの算出方法を切り替える処理が発生する場合の手順を示すフローチャートである。動きベクトル算出部215は、対象ブロックの第1代表画素aの動きベクトルと、左隣のブロックAの代表画素dの動きベクトルまたは上隣のブロックの動きベクトルとを比較する(S2035)。その差が上記第2設定値以下の場合(S2036のY)、左隣のブロックAの第4代表画素dの動きベクトルまたは上隣のブロックの動きベクトルを、対象ブロックの第3代表画素cの予測ベクトルとして採用する(S2037)。上記第2設定値より大きい場合(S2036のN)、対象ブロックの第1代表画素aの動きベクトルを、対象ブロックの第3代表画素cの予測ベクトルとして採用する(S2038)。
なお、第2代表画素bの予測ベクトルの算出方法や第3代表画素cの予測ベクトルの算出方法をフラグにより切り替える場合、第1符号化ビット列復号部201で復号したフラグに応じて切り替える。
以上説明したように実施の形態2によれば、実施の形態1に係る画像符号化装置100により生成された符号化ストリームを、効率的に復号することができる。これにより、上述した実施の形態1に係る画像符号化装置100により実現される効果を、復号側からサポートし、その効果を担保することができる。すなわち、幾何学変換による動き補償予測を使用する画像符号化方式にて、符号量の圧縮効率を向上させる効果を、復号側からサポートし、その効果を担保することができる。また、平行移動による動き補償予測と幾何学変換による動き補償予測を併用する画像符号化方式においても、符号量の圧縮効率を向上させる効果を、復号側からサポートし、その効果を担保することができる。また、既存の画像復号装置との調和性および互換性が高く、導入コストを抑制することができる。
上述した実施の形態では、対象ブロックの形状が正方形である例を説明した。この点、対象ブロックの形状は、三角形、平行四辺形、台形など、他の形状でもよい。この場合、上記代表画素は、当該形状の頂点または頂点近傍に設定されることが好ましい。