図1は、実施の形態に係る符号化装置100の構成図である。これらの構成は、ハードウェア的には、任意のコンピュータのCPU、メモリ、その他のLSIで実現でき、ソフトウェア的にはメモリにロードされた画像符号化機能のあるプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。
本実施の形態の符号化装置100は、国際標準化機関であるISO(International Organization for Standardization)/IEC(International Electrotechnical Commission)によって標準化されたMPEG(Moving Picture Experts Group)シリーズの規格(MPEG−1、MPEG−2およびMPEG−4)、電気通信に関する国際標準機関であるITU−T(International Telecommunication Union-Telecommunication Standardization Sector)によって標準化されたH.26xシリーズの規格(H.261、H.262およびH.263)、もしくは両方の標準化機関によって合同で標準化された最新の動画像圧縮符号化標準規格であるH.264/AVC(両機関における正式勧告名はそれぞれMPEG-4 Part 10: Advanced Video CodingとH.264)に準拠して動画像の符号化を行う。
MPEGシリーズの規格では、フレーム内符号化を行う画像フレームをI(Intra)フレーム、過去のフレームを参照画像として順方向のフレーム間予測符号化を行う画像フレームをP(Predictive)フレーム、過去と未来のフレームを参照画像として双方向のフレーム間予測符号化を行う画像フレームをBフレームという。
一方、H.264/AVCでは、参照画像として利用できるフレームは、時間の先後を問わず、過去の2枚のフレームを参照画像としてもよく、未来の2枚のフレームを参照画像としてもよい。また、参照画像として利用できるフレームの枚数も問わず、3枚以上のフレームを参照画像として用いることもできる。したがって、MPEG−1/2/4では、Bフレームは双方向予測(Bi-directional prediction)フレームのことを指していたが、H.264/AVCでは、Bフレームは、参照画像の時間の先後は問わないため、双予測(Bi-predictive prediction)フレームのことを指すことに留意する。
なお、本願明細書では、フレームとピクチャを同じ意味で用いており、Iフレーム、Pフレーム、Bフレームは、それぞれIピクチャ、Pピクチャ、Bピクチャとも呼ばれている。
また、本願明細書では、符号化の単位としてフレームを例に挙げて説明するが、符号化の単位はフィールドであってもよい。また、符号化の単位はMPEG−4におけるVOPであってもよい。
符号化装置100は、フレーム単位で動画像の入力を受け取り、動画像を符号化し、符号化ストリームを出力する。
ブロック生成部10は、入力された画像フレームをマクロブロックに分割する。画像フレームの左上から右下方向の順にマクロブロックが形成される。ブロック生成部10は生成したマクロブロックを差分器12と動き補償部60に供給する。
差分器12は、ブロック生成部10から供給される画像フレームがIフレームであれば、そのままDCT部20に出力するが、PフレームまたはBフレームであれば、動き補償部60から供給される予測画像との差分を計算してDCT部20に供給する。
動き補償部60は、フレームメモリ80に格納されている過去または未来の画像フレームを参照画像として利用し、ブロック生成部10から入力されたPフレームまたはBフレームの各マクロブロックについて、誤差の最も小さい予測領域を参照画像から探索し、マクロブロックから予測領域へのずれを示す動きベクトルを求める。動き補償部60は、動きベクトルを用いてマクロブロック毎に動き補償を行い、予測画像を生成する。動き補償部60は、生成した動きベクトルを可変長符号化部90に供給し、予測画像を差分器12と加算器14に供給する。
動き補償部60では、双方向予測と片方向予測のいずれも適用可能である。動き補償部60は、片方向予測では、前方参照フレームに対する動きを示す順方向動きベクトルを生成する。双方向予測では、順方向動きベクトルに加えて、後方参照フレームに対する動きを示す逆方向動きベクトルの2つの動きベクトルを生成する。
差分器12は、ブロック生成部10から出力される現在の画像(つまり、符号化対象の画像)と、動き補償部60から出力される予測画像との差分を求め、DCT部20に出力する。DCT部20は、差分器12から与えられた差分画像を離散コサイン変換(DCT)し、DCT係数を量子化部30に与える。
量子化部30は、DCT係数を量子化し、可変長符号化部90に与える。可変長符号化部90は、動き補償部60から与えられた動きベクトルとともに差分画像の量子化されたDCT係数を可変長符号化し、符号化ストリームを生成する。可変長符号化部90は、符号化ストリームを生成する際、符号化されたフレームを時間順序に並べ替える処理を行う。
量子化部30は、画像フレームの量子化されたDCT係数を逆量子化部40に供給する。逆量子化部40は、与えられた量子化データを逆量子化し、逆DCT部50に与え、逆DCT部50は、与えられた逆量子化データを逆離散コサイン変換する。これにより、符号化された画像フレームが復元される。復元された画像フレームは加算器14に入力される。
加算器14は、逆DCT部50から供給される画像フレームがIフレームであれば、そのままフレームメモリ80に格納する。加算器14は、逆DCT部50から供給される画像フレームがPフレームまたはBフレームであれば、それは差分画像であるため、逆DCT部50から供給された差分画像と動き補償部60から供給される予測画像とを加算することにより、元の画像フレームを再構成し、フレームメモリ80に格納する。
PフレームもしくはBフレームの符号化処理の場合は、上述のように動き補償部60が動作するが、Iフレームの符号化処理の場合は、動き補償部60は動作せず、ここでは図示しないが、Iフレームはフレーム内予測が行われた後、DCT部20に供給される。
次に、従来の動きベクトルの計算について説明し、その後、本発明の一実施形態による動きベクトルの計算について説明する。
図2は、従来の動きベクトルの計算を説明する図である。同図は、左から右を時間の流れとして5枚のフレームを表示時間順に示しており、Iフレーム201、B1フレーム202、B2フレーム203、B3フレーム204、Pフレーム205の順に表示がなされる。符号化の順序はこの表示順序とは異なり、まず同図のIフレーム201が符号化され、次に5番目のPフレーム205がIフレーム201を参照画像として動き補償が行われて符号化される。その後、B2フレーム203が符号化され、B1フレーム202、B3フレーム204の順に動き補償が行われて符号化される。
Pフレームを符号化する際の参照フレームは、時間的に前のIフレームまたはPフレームを用いる。また、Bフレームを符号化する際の参照フレームは、前のIフレーム、または時間的に前後のPフレームを用いる。Pフレームの動き補償予測の場合、予測単位は例えば16×16のマクロブロックでありひとつの動きベクトルを利用する。また、Bフレームは、順方向、逆方向、双方向の予測のうち最適なものを選択して動き補償が行われる。なお、Iフレーム201はPフレームであってもよい。また、Pフレーム205はIフレームであってもよい。
現時点で、Iフレーム201、Pフレーム205の符号化が完了し、B1〜B3フレーム202〜204を符号化する段階であるとする。このB1〜B3フレーム202〜204を「符号化対象フレーム」と呼び、符号化対象フレームより前に表示されるIフレーム201を「前方参照フレーム」と、符号化対象フレームより後に表示されるPフレーム205を「後方参照フレーム」と呼ぶことにする。また、Pフレーム205の動きベクトルを「MVP」、B1〜B3フレームの動きベクトルを「MVB1〜MVB3」と表記する。
なお、図2では、二次元画像を一次元的に示しているが、実際の動きベクトルは画像の水平方向と垂直方向の二次元成分を持つ。
図2に示すように、Pフレーム205内のマクロブロック215について、前方参照フレーム201のマクロブロック211を指し示す動きベクトルMVP225を求める。次に、符号化対象フレーム203内のマクロブロック213について、前方参照フレーム201または後方参照フレーム205のいずれかのマクロブロックを指し示す動きベクトルMVB2222を求める。図2では、前方参照フレーム201を指した場合を示す。続いて、符号化対象フレーム202内のマクロブロック212について、前方参照フレーム201または後方参照フレーム205のいずれかのマクロブロックを指し示す動きベクトルMVB1221を求める。
これに対し、本実施の形態では、Bフレーム内の各マクロブロックに対して、異なる方法で定義された複数の動きベクトルを算出する。この算出には、既に動きベクトルが検出されている後方参照フレームの動きベクトルを利用する。これによって、Bフレームの動きベクトルデータの符号量を削減することができる。
さらに、本実施の形態では、複数の動きベクトルを利用してBフレームの動き補償を実行し予測画像を求め、予測画像と原画像との差分である差分画像の符号量が最小となる動きベクトルを選択する。これによって、動画像の符号化データの符号量を削減し、符号化効率を向上させることができる。
図3は、本実施の形態に係る動き補償部60の構成を説明する図である。
動き補償部60は、後方参照フレーム205の動き補償を行ったときに、後方参照フレーム205の各マクロブロックの動きベクトルを検出しており、既に検出した後方参照フレーム205の動きベクトル情報を動きベクトル保持部61に保持する。
動きベクトル計算部63は、後方参照フレーム205の動きベクトルの情報を動きベクトル保持部61から参照して、符号化対象フレーム202〜204内の各マクロブロックについて、異なる方法で定義された複数の動きベクトルを計算する。本実施の形態では、動きベクトルの定義を「算出モード」と表現する。この算出モードは、算出モード指定部62から動きベクトル計算部63に供給される。
動き補償予測部64は、算出モード毎に求められた動きベクトルを使用して動き補償を行い、予測画像を生成し、符号量推定部65、差分器12、加算器14に出力する。
符号量推定部65は、算出モード毎に、予測画像と原画像との差分である差分画像を符号化したときの符号量を推定する。推定した符号量は、算出モードに対応づけて符号量保持部66に保持される。
動きベクトル選択部67は、符号量保持部66に保持された差分画像の符号量を比較し、符号量が最小となる動きベクトルを選択する。選択された動きベクトルの情報は、可変長符号化部90に出力される。動きベクトルの情報は、画像とともに可変長符号化されて符号化ストリームに含められる。
図4は、算出モード指定部62により指定される動きベクトルの算出モードの一例を示す。この実施の形態では、算出モード1〜6の6種類が定義されている。算出モード1では、符号化対象フレーム202〜204の動きベクトルMVBをそのまま使用する。算出モード2では、既に計算されている後方参照フレーム205の動きベクトルMVPに比例係数α0を乗じた動きベクトルを使用する。算出モード3では、算出モード2の動きベクトルに調整ベクトルβ0を加算した動きベクトルを使用する。算出モード4では、算出モード3の動きベクトル全体に対して比例係数α1を乗じた動きベクトルを使用する。算出モード5では、算出モード4の動きベクトルに調整ベクトルβ1を加算したベクトルを使用する。最後に、算出モード6では、後方参照フレーム205の動きベクトルMVPをそのまま使用する。
図5ないし図7を参照して、上述の算出モード1〜6にしたがって、B2フレーム203またはB1フレーム202を符号化対象フレームとしたときの動きベクトルの算出について説明する。なお、図5ないし図7は、従来の動きベクトルについて説明した図2と同じ符号を用いており、図2と共通する説明は省略する。
算出モード1は、従来の方法で検出される動きベクトルMVBである。図2を例とすれば、符号化対象フレーム203内のマクロブロック213について、誤差の最も小さい予測領域を前方参照フレーム201内からマッチングにより探索し、マクロブロック213から予測領域へのずれを示す動きベクトルMVB2を求める。
算出モード2は、既に動きベクトルが検出されている後方参照フレーム205内のマクロブロック(以下、「参照マクロブロック」ともいう)の動きベクトル(以下、「参照動きベクトル」ともいう)MVPを、フレーム間の時間的距離に比例して配分する方法である。このときの比例係数を「α0」で表す。
図5を参照すると、後方参照フレーム205内のマクロブロック215と、その参照動きベクトルMVP225とにしたがって、符号化対象フレーム203内で動き補償予測の対象となるマクロブロック214を特定する。そして、特定したマクロブロック214の動きベクトルを、α0・MVPとして算出する。
なお、後方参照フレームのマクロブロックと、その動きベクトルとにしたがって、符号化対象フレーム内で動き補償予測の対象となるマクロブロックを特定するには、以下の手順で行う。まず、通常のブロックマッチングなどの手法により、符号化対象フレームのマクロブロックの動きベクトル(以下、この項において「通常動きベクトル」という)を求める。続いて、符号化対象フレーム上でこの通常動きベクトルが指している位置を含む一定の範囲を定める。そして、定めた範囲内を通過する、後方参照フレームの動きベクトルを抽出する。複数の動きベクトルが抽出された場合には、先に求めた通常動きベクトルが指している位置に最も近い位置を通過する動きベクトルを選択する。このようにして抽出または選択された動きベクトルが、符号化対象フレームのマクロブロックが参照すべき参照動きベクトルMVPと考えることができる。この参照動きベクトルMVPを基に、符号化対象フレームのマクロブロックの動きベクトルを算出する。
図8は、線形動きモデルにおいて、α0の値を具体的に説明する図である。後方参照フレーム205の参照マクロブロック215(図5参照)の動きベクトルMVPは、後方参照フレーム205と前方参照フレーム201との時間差tの間に、参照マクロブロック215が動く量と方向を示すものであるから、マクロブロックが等速度運動していると仮定する場合、すなわち線形動きモデルにしたがえば、符号化対象フレーム203の対象マクロブロック214は、符号化対象フレーム203と前方参照フレーム201の時間差trの間に、MVP×(tr/t)の動きを示すことが予測される。したがって、B1フレーム202ではα0=0.25、B2フレーム203ではα0=0.5、B3フレーム204ではα0=0.75となる。
線形動きモデル以外、例えば、マクロブロックが等加速度運動していると仮定してもよい。図9は、等加速度運動の場合のα0の値を示す。図9においては、α0は、フレーム間の時間間隔の二乗に比例した係数となる。つまり、B1フレーム202ではα0=0.0625、B2フレーム203ではα0=0.25、B3フレーム204ではα0=0.5625となる。
算出モード3は、算出モード2で求めた動きベクトルα0・MVPに調整ベクトルβ0を加算した合成ベクトルを用いる。すなわち、α0・MVP+β0となる。
この調整ベクトルβ0は、算出モード1のMVBと算出モード2のα0・MVPとの誤差に相当する。すなわち、実際にはマクロブロックの動きの速度が複数フレーム間で一定であるとは限らないため、動きベクトル計算部63は、対象マクロブロック214の線形予測された移動位置と実際の移動位置との差分を表す調整ベクトルβ0を求める。
β0の算出方法としては、所定値を使用するか、または、近隣マクロブロックについて求めた誤差の平均値を使用してもよい。または、後述するように、α0とβ0を所与の範囲内で網羅的に探索して、最もマッチングのよいもの、すなわち、差分画像の符号量が最も少ないものを選択するようにしてもよい。
算出モード4は、算出モード3で求めた動きベクトルに、さらに比例係数「α1」を乗じて動きベクトルを算出する。これについて図6を参照して説明する。
現時点で、B2フレーム203のマクロブロック213について、算出モード3の動きベクトルα0・MVP+β0が算出済みであるとし、続いて、B1フレーム(符号化対象フレーム)202のマクロブロック216について動きベクトルを算出することを考える。
B2フレーム203のマクロブロックと動きベクトルにしたがって、符号化対象フレーム202の対応するマクロブロック216を特定する。このマクロブロック216の動きベクトルは、後方参照フレーム205の動きベクトルMVP225を基準としても考えられるし、B2フレーム203を後方参照フレームとして、動きベクトル(α0・MVP+β0)222を基準としても考えられる。このうち、前者については、算出モード1にしたがってα0・MVPで表すことができる。後者については、比例係数α1を用いて、
α1・(α0・MVP+β0)
と表すことができる。
別の実施例として、算出モード1のMVB2を使用して、算出モード4の動きベクトルを、α1・MVB2と定義してもよい。こうすると、動きベクトル情報としてα0とβ0を符号化する必要がなくなるので、動きベクトル情報の符号量をさらに低下させることができる。
このように、ある符号化対象フレームについて符号量が最小になるとして選択された動きベクトルを、別の符号化対象フレームの動きベクトルの算出に利用することも可能である。
算出モード5は、算出モード3と同様に、算出モード4で求めた動きベクトルα1・(α0・MVP+β0)に調整ベクトルβ1を加算した合成ベクトルを用いる。この調整ベクトルβ1は、算出モード1の動きベクトルMVB1と算出モード4の動きベクトルα1・(α0・MVP+β0)との誤差に相当する。調整ベクトルβ1は、β0と同様にして求められる。
つまり、算出モード5の動きベクトルは、以下のように表せる。
α1・(α0・MVP+β0)+β1
別の実施例として、算出モード1のMVB2を使用して、算出モード5の動きベクトルを、α1・MVB2+β1と定義してもよい。こうすると、動きベクトル情報としてα0とβ0を符号化する必要がなくなるので、動きベクトル情報の符号量をさらに低下させることができる。
算出モード6では、後方参照フレーム205の動きベクトルMVP225をそのまま使用する。
可変長符号化部90は、算出モード1〜6にしたがった複数の動きベクトルのうちいずれを使用したかを示すモード情報を、符号化データに含める。
なお、動きベクトル選択部67は、算出モード指定部62により指定された全ての算出モードについて、それぞれの算出モードの動きベクトルを利用して求めた差分画像の符号量を比較する代わりに、通常の手順で求められる動きベクトルMVBよりも差分画像の符号量が減少する場合にのみ、異なる算出モードにしたがった動きベクトルを選択するようにしてもよい。
具体的には、まず、動き補償予測部64は、算出モード1にしたがって動きベクトルMVBを計算し、符号量推定部65は、動きベクトルMVBを利用して予測画像を生成したときの差分画像の符号量を算出する。続いて、動き補償予測部64は、算出モード2にしたがって動きベクトルα0・MVPを計算し、符号量推定部65は、動きベクトルα0・MVPを利用して予測画像を生成したときの差分画像の符号量を算出する。そして、2つの差分画像の符号量を比較して、算出モード2の動きベクトルα0・MVPの方が符号量が小さいときに、動きベクトル選択部67は算出モード2の動きベクトルを選択する。
算出モード1の動きベクトルMVBの方が小さいときは、さらに動き補償予測部64は算出モード3にしたがって動きベクトルα0・MVP+β0を計算し、符号量推定部は、動きベクトルα0・MVP+β0を利用して予測画像を生成したときの差分画像の符号量を算出する。そして、算出モード1の場合と算出モード3の場合の差分画像の符号量を比較して、算出モード3の動きベクトルα0・MVP+β0の方が符号量が小さいときに、動きベクトル選択部67は算出モード3の動きベクトルを選択する。
以下、同様の計算および比較を、算出モード4、算出モード5についても実行する。比較演算は、算出モード1以外の動きベクトルが選択された時点で終了する。
これによって、符号化に要する演算量を抑制しつつ、動画像の符号化効率の高い動きベクトルを選択することができる。
図10は、最適動きベクトルの選択方法を示すフローチャートである。まず、動き補償部60は、後方参照フレーム205内の各マクロブロックについて、前方参照フレーム201を基準とする動きベクトルを計算し、得られた動きベクトルを動きベクトル保持部61に格納する(S10)。動きベクトル計算部63は、動きベクトル保持部61内の後方参照フレーム205内のマクロブロックの動きベクトルを利用して、符号化対象フレーム203の各マクロブロックについて、算出モード指定部62により指定された算出モードの動きベクトルを求める(S12)。動き補償予測部64は、算出モード毎に、S12で求めた動きベクトルを使用した場合の予測画像を計算する(S14)。符号量推定部65は、動き補償予測部64で計算された予測画像と原画像との差分である差分画像の符号量を推定する(S16)。この推定は、予め準備されている解析プログラムによって符号量を推定してもよいし、または、その差分画像を、DCT部20、量子化部30、可変長符号化部90を経由して実際に符号化した後に、その符号量についての情報を可変長符号化部90から受け取るようにしてもよい。推定された符号量は、算出モード毎に符号量保持部66に格納される。
そして、動きベクトル選択部67は、符号量保持部66内の符号量を比較して、符号量が最小である算出モードを決定し、当該算出モードにおいて計算された動きベクトルを選択する(S18)。動きベクトル選択部67は、選択した動きベクトルの算出モードに加えて、存在する場合は、比例係数α0、α1、調整ベクトルβ0、β1を可変長符号化部90に出力する(S20)。出力された算出モード、比例係数、調整ベクトルのデータは、符号化ストリームに含められる。
図11は、算出モード3において、比例係数α、調整ベクトルβを可変とした場合に最適の組み合わせを求める方法の一例を示す。α、βについては、予め取りうる値の範囲が定められており、図11では、それぞれ、α0≦α≦αT、β0≦β≦βTであるとする。
まず動きベクトル計算部63は、αに初期値αSを代入し(S30)、続いてβに初期値βSを代入する(S32)。これらのα、βを使用して動きベクトルαMVP+βが作られ、符号量推定部65は、この動きベクトルを用いたときの差分画像の符号量を推定する(S34)。動きベクトル計算部63は、αが上限値αTを越えたか否かをチェックし(S36)、上限値以下であれば、続いて、βが上限値βTを越えたか否かをチェックする(S38)。βが上限値βTに達していなければ(S38のN)、予め定められている増分Bを現在値に加えた値を新たにβとする(S40)。βが上限値βTに達していれば(S38のY)、予め定められている増分Aを現在値に加えた値を新たにαとし(S42)、βを初期値β0に戻した動きベクトルについての計算を継続する。αが上限値αTに達すると(S36のY)、このルーチンを終了する。
これによって、α、βの組み合わせを変化させた動きベクトルを使用したときの、参照画像との差分誤差が最小となる動きベクトルを選択することができるため、動画像の符号量が削減され、符号化効率が向上する。
図12は、実施の形態に係る復号装置300の構成図である。これらの機能ブロックもハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現することができる。
復号装置300は、符号化ストリームの入力を受け取り、符号化ストリームを復号して出力画像を生成する。
可変長復号部310は、入力された符号化ストリームを可変長復号し、復号された画像データを逆量子化部320に供給し、動きベクトル情報を動き補償部360に供給する。
逆量子化部320は、可変長復号部310により復号された画像データを逆量子化し、逆DCT部330に供給する。逆量子化部320により逆量子化された画像データはDCT係数である。逆DCT部330は、逆量子化部320により逆量子化されたDCT係数を逆離散コサイン変換(IDCT)することにより、元の画像データを復元する。逆DCT部330により復元された画像データは、加算器312に供給される。
加算器312は、逆DCT部330から供給された画像データがIフレームである場合、そのIフレームの画像データをそのまま出力するとともに、PフレームやBフレームの予測画像を生成するための参照画像として、フレームメモリ380に格納する。
加算器312は、逆DCT部330から供給された画像データがPフレームである場合、その画像データは差分画像であるから、逆DCT部330から供給された差分画像と動き補償部360から供給される予測画像を加算することにより、元の画像データを復元し出力する。
動き補償部360は、可変長復号部310から供給される動きベクトル情報と、フレームメモリ380に格納された参照画像を用いて、PフレームまたはBフレームの予測画像を生成し、加算器312に供給する。
図13は、動き補償部360の構成図である。以下、本実施の形態で符号化されたBフレームを復号するための動き補償部360の動作を説明する。動き補償部360は、後方参照フレームの動き補償を行ったときに、後方参照フレームの各マクロブロックの動きベクトルを検出しており、既に検出した後方参照フレームの動きベクトル情報やマクロブロックの情報を動きベクトル保持部364に保持しておく。
動きベクトル取得部361は、可変長復号部310から動きベクトル情報を取得する。この動きベクトル情報には、上述した算出モード、比例係数αおよび調整ベクトルβが含まれる。動きベクトル取得部361は、動きベクトル情報を動きベクトル計算部362に与える。算出モードを符号化ストリームに含めることによって、ひとつの符号化対象フレーム内に複数の算出モードが含まれていても、動き補償部360において、比例係数αおよび調整ベクトルβから元の動きベクトルを復元することができる。
動きベクトル計算部362は、動きベクトル保持部364から後方参照Pフレームのマクロブロックの動きベクトルを取得し、符号化対象フレームの動きベクトルを計算する。計算された動きベクトルは、動き補償予測部366に与えられるとともに、他のフレームの動きベクトルの計算に使用するために、動きベクトル保持部364に保持される。
動き補償予測部366は、受け取った動きベクトルを用いて符号化対象フレームの予測画像を生成して加算器312に出力する。
以上説明したように、本実施の形態によれば、符号化に際して使用する動きベクトルを予め複数用意しておき、参照画像との差分誤差が最小となる動きベクトルを選択するようにしたので、動画像の符号量が削減され、符号化効率が向上する。
また、先に動きベクトルが計算されている参照フレームの動きベクトルを利用して、符号化対象フレームの動きベクトルを表現するので、動きベクトルデータ自体の符号量を削減することができる。
最近の高画質の圧縮符号化では、1/4画素精度での動きベクトルの探索が行われることが多く、動きベクトル情報の符号量が一掃増大する。本実施形態では、後方参照フレーム(Pフレーム)の動きベクトルを利用して、符号化対象フレーム(Bフレーム)の動きベクトルを予測するため、Bフレームについては、動きベクトルそのものを符号化する必要がなく、比例係数αと調整ベクトルβ、および動きベクトルの算出モードだけを符号化すればよい。しかも、αを等速度または等加速度で指定した場合には、αの値はフレーム間隔の比率で求められることから、αについても符号化する必要がなく、動きベクトル算出モードのみ符号化すれば十分である。
この方法によって、符号化に要する計算処理量は増加するが、効率の良い動きベクトルが求められるので、符号化ストリームのデータ量が削減され、動画像の符号化効率が向上する。
なお、以上の説明では、Bフレームの順方向予測の場合について述べたが、逆方向予測についても、同様の手順で本実施形態を適用することができる。また、片方向の動き予測のみならず、双方向予測の場合にも、前方参照フレーム、後方参照フレームのそれぞれに対する動きを示す2つの独立した動きベクトルの符号化について、本実施形態を適用することができる。すなわち、順方向予測、逆方向予測のそれぞれについて、実施の形態と同様にして複数の動きベクトルを用意してやればよい。
また、ひとつの動きベクトルから順方向、逆方向の動きベクトルが線形予測されるダイレクトモードにおいても、生成される動きベクトルの符号化について、本実施形態を適用することができる。すなわち、ダイレクトモードの線形動きモデルにしたがって線形的に求められるベクトルに調整ベクトルβを加えた合成ベクトルを求めてやることで、複数の動きベクトルを用意することができる。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
上記の説明では、符号化装置100および復号装置300は、MPEGシリーズの規格(MPEG−1、MPEG−2およびMPEG−4)、H.26xシリーズの規格(H.261、H.262およびH.263)、もしくはH.264/AVCに準拠して動画像の符号化および復号を行ったが、本発明は、時間的スケーラビリティをもつ階層的な動画像の符号化および復号を行う場合にも適用することができる。特にMCTF技術を用いた場合の動きベクトルの符号化において、動きベクトルの符号量を削減するために本発明は有効である。
上述した動きベクトルの算出モードは一例であって、他の方法によって定義された動きベクトルについても、最適の動きベクトルを選択する対象としてもよい。一例として、他のフレームについての動きベクトルをそのまま使用したり、または適当な係数をかけて使用してもよい。また、準備されている算出モードの全てを必ず使用する必要はない。算出モード指定部62は、計算処理量の大小やプロセッサの使用状況などに応じて、一部の算出モードの使用を許可したり制限したりして、動きベクトルの検出に要する計算量を調整するようにしてもよい。
上記の説明では、符号化対象フレーム内の各マクロブロックについて、複数の動きベクトルの算出モードの中から差分画像の符号量を最小とする算出モードを決定することを述べた。しかしながら、マクロブロック単位でなくそれ以外のフレーム内の領域、例えば、符号化単位としてのスライスや、図示しないROI領域設定部が動画像上に設定する注目領域(Region of Interest:ROI)について、複数の動きベクトルの算出モードの中から差分画像の符号量を最小とする算出モードを決定するようにしてもよい。この場合の算出モードは、図4で示したのと同じものを使用できる。
具体的には、動き補償部60は、後方参照フレーム205内のスライスまたは注目領域について、前方参照フレーム201を基準とする動きベクトルを計算し、得られた動きベクトルを動きベクトル保持部61に格納する。動きベクトル計算部63は、動きベクトル保持部61内の後方参照フレーム205内のスライスまたは注目領域の動きベクトルを利用して、符号化対象フレーム203の各スライスまたは注目領域について、算出モード指定部62により指定された算出モードの動きベクトルを求める。動き補償予測部64は、算出モード毎に、動きベクトル計算部63で求めた動きベクトルを使用した場合の予測画像を計算する。符号量推定部65は、動き補償予測部64で計算された予測画像と原画像との差分である差分画像の符号量を推定する。推定された符号量は、算出モード毎に符号量保持部66に格納される。
そして、動きベクトル選択部67は、符号量保持部66内の符号量を比較して符号量が最小である算出モードを決定し、当該算出モードにおいて計算された動きベクトルを選択する。動きベクトル選択部67は、選択した動きベクトルの算出モードに加えて、存在する場合は、比例係数α0、α1、調整ベクトルβ0、β1を可変長符号化部90に出力する。出力された算出モード、比例係数、調整ベクトルのデータは、スライスまたは注目領域毎に符号化ストリームに含められる。
さらに、符号化対象フレーム内のマクロブロック毎に動きベクトルの算出モードを決定する代わりに、フレーム単位またはGOP単位で動きベクトルの算出モードを決定してもよい。この場合、以下の2つの手順がある。
手順1.動き補償部60は、候補となる動きベクトルの算出モード毎に、フレーム単位またはGOP単位で符号化を実行する。つまり、ひとつの算出モードの動きベクトルを全てのマクロブロックまたはフレーム内領域について適用して符号化を実行する。この段階では符号化データを出力せず、符号化データの符号量のみを符号量保持部66に保持しておく。全ての動きベクトルの算出モードについて符号化データの符号量を計算した後、動きベクトル選択部67は、符号量が最小となる算出モードを選択する。そして、動き補償予測部64は、選択された動きベクトル算出モードにしたがって改めて符号化を実行し、この段階で符号化データが出力される。
手順2.動き補償部60は、候補となる動きベクトルの算出モード毎に、フレーム単位またはGOP単位で符号化を実行する。つまり、ひとつの算出モードの動きベクトルを全てのマクロブロックまたはフレーム内領域について適用して符号化を実行する。この段階では符号化データを出力しないが、符号化データそのものと符号化データの符号量とを符号量保持部66に保持しておく。全ての動きベクトルの算出モードについて符号化データの符号量を計算した後、動きベクトル選択部67は、符号量が最小となる算出モードを選択する。そして、選択された動きベクトル算出モードに対応する符号化データが符号量保持部66から出力される。
手順1、2のうち、動きベクトル算出モードの選択後に改めて符号化をし直す分だけ、手順1の方が手順2よりも符号化に要する計算量が多くなる。しかし、手順2の方は、動きベクトル算出モード毎に符号化データ自体と符号量とを保持しておく必要があるため、手順1より多くの記憶領域が必要となる。このように、手順1と手順2とはトレードオフの関係にあるので、状況に応じて適切な方を選択すればよい。
さらに、上述のMCTF技術にしたがった符号化において、MCTFにより生成される符号化階層に含まれる複数のフレーム間の動きベクトルについて本発明の方法を適用することができる。
これについて、図14を参照して説明する。図14は、4つのフレーム101〜104をMCTF技術にしたがって符号化する様子を表しており、各階層で出力される画像と動きベクトルとを示している。
図示しないMCTF処理部は、連続する二枚のフレーム101、102を順次取得して、高域フレーム111と低域フレーム112とを生成する。また、二枚のフレーム103、104を順次取得して高域フレーム113と低域フレーム114とを生成する。これらを階層1と称する。また、MCTF処理部は、二枚のフレーム101、102から動きベクトルMV1aを検出し、フレーム103、104から動きベクトルMV1bを検出する。
また、MCTF処理部は、階層1の低域フレーム112、114からさらに高域フレーム121と低域フレーム122とを生成する。これらを階層2と称する。MCTF処理部は、二枚の低域フレーム112、114から動きベクトルMV0を検出する。
なお、図14では、説明を簡単にするためにフレーム単位で動きベクトルを検出しているが、マクロブロック単位で動きベクトルを検出してもよいし、ブロック(8×8画素または4×4画素)単位で動きベクトルを検出してもよい。
図14に示すようなMCTFの階層があるとき、階層1の動きベクトルMV1aとMV1bの符号化に上記方法を適用する。階層1の動きベクトルMV1aとMV1bとは、時間上の距離が階層0の動きベクトルMV0の半分であるので、動きも半分と推定される。そこで、動きベクトルMV1aとMV1bとを以下の計算式で算出する。
MV1a=(1/2)・MV0+βa
MV1b=(1/2)・MV0+βb
ここで、βa、βbは予測値とのずれを表す調整ベクトルである。したがって、階層1の動きベクトルMV1aとMV1bを符号化する代わりに、階層0の動きベクトルMV0と調整ベクトルβa、βbを符号化すればよい。
なお、上記計算式から分かるように、階層0の動きベクトルMV0が求められるまで階層1を符号化することはできない。そこで、階層0の動きベクトルMV0を求めるまでの間、階層1の動きベクトル情報と差分情報とを保持しておく必要がある。
MCTFの階層が3段以上ある場合でも、階層0以外の階層における動きベクトルに対して本発明の方法を適用できる。
10 ブロック生成部、 12 差分器、 14 加算器、 20 DCT部、 30 量子化部、 40 逆量子化部、 50 逆DCT部、 60 動き補償部、 61 動きベクトル保持部、 62 算出モード指定部、 63 動きベクトル計算部、 64 動き補償予測部、 65 符号量推定部、 66 符号量保持部、 67 動きベクトル選択部、 80 フレームメモリ、 90 可変長符号化部、 100 符号化装置、 201 Iフレーム(前方参照フレーム)、 203 Bフレーム(符号化対象フレーム)、 205 Pフレーム(後方参照フレーム)、 300 復号装置、 310 可変長復号部、 312 加算器、 320 逆量子化部、 330 逆DCT部、 360 動き補償部、 361 動きベクトル取得部、 362 動きベクトル計算部、 364 動きベクトル保持部、 366 動き補償予測部、 380 フレームメモリ。