実施の形態1
図1は、実施の形態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ピクチャとも呼ばれている。
符号化装置100は、フレーム単位で動画像の入力を受け取り、動画像を符号化し、符号化ストリームを出力する。入力された動画フレームはフレームメモリ80に格納される。
動き補償部60は、フレームメモリ80に格納されている過去または未来の画像フレームを参照画像として利用し、PフレームまたはBフレームのマクロブロック毎に動き補償を行い、動きベクトルと予測画像を生成する。動き補償部60は、符号化対象のPフレームまたはBフレームの画像と予測画像の差分を取り、差分画像をDCT部20に供給する。また、動き補償部60は、符号化された動きベクトル情報を多重化部92に供給する。
DCT部20は、動き補償部60から供給された画像を離散コサイン変換(DCT)し、得られたDCT係数を量子化部30に与える。
量子化部30は、DCT係数を量子化し、可変長符号化部90に与える。可変長符号化部90は、差分画像の量子化されたDCT係数を可変長符号化し、多重化部92に与える。多重化部92は、可変長符号化部90から与えられた符号化後のDCT係数と、動き補償部60から与えられた符号化後の動きベクトル情報とを多重化し、符号化ストリームを生成する。多重化部92は、符号化ストリームを生成する際、符号化されたフレームを時間順序に並べ替える処理を行う。
PフレームもしくはBフレームの符号化処理の場合は、上述のように動き補償部60が動作するが、Iフレームの符号化処理の場合は、動き補償部60は動作せず、ここでは図示しないが、Iフレームはフレーム内予測が行われた後、DCT部20に供給される。
図2は、動き補償部60の構成を説明する図である。動き補償部60は、符号化対象フレームのマクロブロック単位の動きベクトル(以下、「ローカル動きベクトル」という)を検出するとともに、複数の符号化対象フレームをグループとして扱い、グループ毎に、そのグループ内の符号化対象フレームに共通する大域的な動きを示す動きベクトル(以下、「グローバル動きベクトル」という)を求める。グローバル動きベクトルは、画像全体もしくは画像に設けられた所定の領域全体の動きを表すベクトルである。グローバル動きベクトルは、画像内もしくは所定の領域内の個々のマクロブロック単位のローカル動きベクトルを代表するものである。
動き補償部60は、ローカル動きベクトルにもとづいて動き予測を行い、差分画像を出力するとともに、ローカル動きベクトルおよびグローバル動きベクトルの差分値を符号化して動きベクトル情報として出力する。
局所動きベクトル検出部66は、フレームメモリ80に保持された参照画像を参照し、符号化対象画像の対象マクロブロックに対して誤差の最も小さい予測マクロブロックを参照画像から検出し、対象マクロブロックから予測マクロブロックへの動きを示すローカル動きベクトルLMVを求める。動き検出は、対象マクロブロックとマッチングする参照画像における参照マクロブロックを整数画素単位または小数画素単位で探すことにより行われる。探索は通常、画素領域内で複数回にわたって繰り返し行われ、その複数回の探索の中で対象マクロブロックと最も適合する参照マクロブロックが予測マクロブロックとして選択される。
局所動きベクトル検出部66は、求めたローカル動きベクトルLMVを大域動きベクトル算出部68、動き補償予測部70、および局所動きベクトル差分符号化部72に与える。
動き補償予測部70は、ローカル動きベクトルLMVを用いて対象マクロブロックを動き補償して、予測画像を生成し、符号化対象画像と予測画像の差分画像をDCT部20に出力する。
GOP設定部64は、動画像の複数のフレームのシーケンスを1つにまとめた単位であるGOP(Group of Picture)を設定する。GOPは、一般に、動画像の早送りや逆再生などの単位や、動画像データのランダムアクセスの単位として用いられる。
なお、GOPは、MPEG−2の用語であり、MPEG−4ではピクチャのことをVOP(Video Object Plane)と呼ぶ関係で、GOPの代わりにGOV(Group of Video Object Plane)という用語が用いられる。本明細書では、特にいずれかの規格に限定する意味ではなく、一般的に複数のフレームから構成されるグループという意味で「GOP」という用語を用いることにする。
1つのGOPに含まれるフレームの枚数は所定の値に固定させてもよく、動的に変化させてもよい。GOP内のフレーム数を可変にする場合、GOP設定部64は、動画像における大域的な動きの速度に応じてGOP内のフレーム数を調整してもよい。たとえば、大域的な動きが速いほど、GOP内のフレームの枚数を減らし、大域的な動きが遅いほど、GOP内のフレームの枚数を増やす。
これにより、大域的な動きが激しい場合は、少ないフレーム数でGOPを構成して、動画像の大域的な動きを各GOP内で共通の大域動きベクトルによって正確に捉えることができる。逆に、大域的な動きが比較的ゆっくりしている場合は、フレーム数を多くしてGOPを構成しても、動画像の大域的な動きを各GOP内で共通の大域動きベクトルによって十分に捉えることができる。
なお、GOPは、一般にフレーム間予測符号化されないIフレームを含むが、動き補償部60においては、フレーム間予測符号化されるフレームを動き予測の処理の対象とするため、以下では、GOP内に含まれるIフレームについては特に言及せずに、フレーム間予測符号化されるフレームについてのみ言及する。もっとも、動き予測にはGOP内のIフレームが参照画像として用いられることにも留意する。
また、大域的な動きを画像全体でなく、画像内の特定の領域について求める場合は、GOP設定部64は、フレーム画像上にグローバル動きベクトルGMVを求めるための領域(以下、「グローバル領域」という)を設定する。このグローバル領域は、GOP内のすべてのフレームに共通して設定される。すなわち、GOP内のすべてのフレームでグローバル領域は同じ位置にある。
グローバル領域は、画像内に複数設けられてもよい。たとえば、GOP設定部64は、フレーム画像の中央付近を一つのグローバル領域とし、その周辺を別のグローバル領域に設定するなど、あらかじめ定められた領域をグローバル領域に設定してもよい。また、グローバル領域はユーザによって設定されてもよい。
また、GOP設定部64は、画像に人物等のオブジェクトが写っている場合、そのオブジェクトが写っている領域を自動抽出し、グローバル領域に設定してもよい。
GOP設定部64は、局所動きベクトル検出部66により検出された画像内のローカル動きベクトルLMVを参照して、動きがある程度共通するマクロブロックが占める領域を自動抽出し、その領域をグローバル領域に設定してもよい。
GOP設定部64は、設定されたGOPを構成するフレームの枚数の情報や設定されたグローバル領域の情報などを含むGOPに関する情報を大域動きベクトル算出部68および大域動きベクトル差分符号化部74に与える。
大域動きベクトル算出部68は、GOP内のフレーム間予測符号化される複数のフレームに対して共通に適用されるグローバル動きベクトルGMV(以下、単に「共通グローバル動きベクトルGMV」という)を算出する。GOP設定部64により共通グローバル動きベクトルGMVを求めるためのグローバル領域が設定されている場合は、大域動きベクトル算出部68は、そのグローバル領域内の大域的な動きを示す共通グローバル動きベクトルGMVを算出する。グローバル領域が設定されていない場合は、大域動きベクトル算出部68は、画像全体の大域的な動きを示す共通グローバル動きベクトルGMVを算出する。
大域動きベクトル算出部68が共通グローバル動きベクトルGMVを求める方法をいくつか説明する。
大域動きベクトル算出部68は、局所動きベクトル検出部66からGOP内の各フレームのマクロブロック単位のローカル動きベクトルLMVを取得し、GOP内の各フレームにおいて、マクロブロック毎のローカル動きベクトルLMVを画像全体で平均化することにより、各フレームの画像全体の大域的な動きを示すグローバル動きベクトルGMVを求める。次に、大域動きベクトル算出部68は、各フレームのグローバル動きベクトルGMVをGOP内のすべてのフレームについて平均を取ることにより、GOP内で平均化されたグローバル動きベクトルGMVを求め、これをそのGOPの共通グローバル動きベクトルGMVとする。これにより、GOP内の複数のフレームに共通する大域的な動きを正確に捉えたグローバル動きベクトルGMVを求めることができる。
なお、上記の手順で、グローバル動きベクトルGMVを求めるべきグローバル領域が設定されている場合は、グローバル領域内でローカル動きベクトルLMVを平均化すればよい。
共通グローバル動きベクトルGMVを求める別の方法として、大域動きベクトル算出部68は、GOP内の特定のフレームのマクロブロック毎のローカル動きベクトルLMVをそのフレーム画像全体で平均化して、その特定のフレームのグローバル動きベクトルGMVを求め、これをGOP内の全フレームに共通して適用する共通グローバル動きベクトルGMVとしてもよい。この場合、GOP内の特定のフレームで得られるグローバル動きベクトルGMVをGOP内の他のフレームにも適用することになり、GOP内の全フレームについてローカル動きベクトルLMVの平均を取る方法に比べて、処理量が少ない。
また、大域動きベクトル算出部68は、動画像の大域的な動きに関する情報を取得し、その情報をもとにGOP単位の共通グローバル動きベクトルGMVを算出してもよい。たとえば、カメラのズームやパン、画面のスクロールなどが行われた場合に、画面全体の動きに関する情報から、動画像の大域的な動きを判断し、GOP単位の共通グローバル動きベクトルGMVを算出することができる。また、大域動きベクトル算出部68は、画面上の人物等のオブジェクトの動きを自動抽出し、オブジェクトの動きから大域的な動きを判断し、GOP単位の共通グローバル動きベクトルGMVを算出することもできる。
大域動きベクトル算出部68は、求めたGOP内の共通のグローバル動きベクトルGMVを局所動きベクトル差分符号化部72と大域動きベクトル差分符号化部74に与える。
局所動きベクトル差分符号化部72は、局所動きベクトル検出部66から各フレームのローカル動きベクトルLMV、大域動きベクトル算出部68からGOP単位の共通グローバル動きベクトルGMVの入力をそれぞれ受け取り、フレーム毎に、ローカル動きベクトルLMVと共通グローバル動きベクトルGMVの差分ΔLMV=LMV−GMVを算出し、算出されたローカル動きベクトル差分ΔLMVを可変長符号化する。局所動きベクトル差分符号化部72は、符号化後のローカル動きベクトル差分ΔLMVを動きベクトル情報として多重化部92に与える。
大域動きベクトル差分符号化部74は、必要に応じて共通グローバル動きベクトルGMVの差分情報を符号化する。共通グローバル動きベクトルGMVの差分符号化は、共通グローバル動きベクトルGMVの符号量を削減することを目的として、以下のような場合に行われる。
(1)画像内に複数のグローバル領域が設定されており、グローバル領域毎に共通グローバル動きベクトルGMVが求められている場合、異なるグローバル領域の共通グローバル動きベクトルGMV間の差分を符号化する。
(2)GOP内を複数のサブグループに分けて、GOP内でサブグループ単位で共通グローバル動きベクトルGMVが求められている場合、異なるサブグループの共通グローバル動きベクトルGMV間の差分を符号化する。
(3)動画像が複数のGOPのシーケンスから構成される場合、異なるGOPの共通グローバル動きベクトルGMV間の差分を符号化する。
このように複数の共通グローバル動きベクトルGMVが求められている場合に、それらの共通グローバル動きベクトルGMV間で差分を取って符号化する方が、各共通グローバル動きベクトルGMVを個別に符号化するよりも符号量の面で有利であるなら、大域動きベクトル差分符号化部74は、共通グローバル動きベクトルGMVの差分符号化を行う。
共通グローバル動きベクトルGMVの差分符号化を行う場合、大域動きベクトル差分符号化部74は、大域動きベクトル算出部68から複数の共通グローバル動きベクトルGMVの入力を受け取り、少なくとも1つの共通グローバル動きベクトルGMVを基準に選ぶ。基準となる共通グローバル動きベクトルGMVを基準グローバル動きベクトルGMVBと呼ぶ。大域動きベクトル差分符号化部74は、基準グローバル動きベクトルGMVB以外の共通グローバル動きベクトルGMVと基準グローバル動きベクトルGMVBの差分ΔGMV=GMV−GMVBを算出し、基準グローバル動きベクトルGMVBとグローバル動きベクトル差分ΔGMVを可変長符号化する。
大域動きベクトル差分符号化部74は、符号化後の基準グローバル動きベクトルGMVBとグローバル動きベクトル差分ΔGMVを動きベクトル情報として多重化部92に与える。このとき、大域動きベクトル差分符号化部74は、GOP内のフレーム数の情報、グローバル領域についての領域情報、GOP内でサブグループを設けた場合のサブグループの情報などをGOP設定部64から取得し、動きベクトル情報の一部に付加する。
多重化部92には、動きベクトル情報として、基準グローバル動きベクトルGMVB、グローバル動きベクトル差分ΔGMV、ローカル動きベクトル差分ΔLMVが与えられることになる。
図3は、動き補償部60による動きベクトルの差分符号化の手順を説明するフローチャートである。図4〜図6の例を適宜参照しながら符号化の手順を説明する。
符号化装置100のフレームメモリ80に符号化対象画像が入力される(S10)。動き補償部60の局所動きベクトル検出部66は、符号化対象画像においてマクロブロック単位でローカル動きベクトルLMVを検出する(S12)。
次に、GOP設定部64は、GOPを構成するフレーム数や、大域的な動きを求めるべきグローバル領域などのGOPに関する情報を設定し(S14)、大域動きベクトル算出部68は、GOP単位で共通グローバル動きベクトルGMVを算出する(S16)。
局所動きベクトル差分符号化部72は、GOP内の各フレームのローカル動きベクトルLMVとGOP内の共通グローバル動きベクトルGMVの差分を求め、求めたローカル動きベクトル差分ΔLMVを符号化する(S18)。大域動きベクトル差分符号化部74は、共通グローバル動きベクトルGMVが複数求められている場合に、それらの間の差分を求め、求めたグローバル動きベクトル差分ΔGMVを符号化する(S20)。
図4(a)、(b)は、動画像の複数のフレームからなるGOP単位の共通グローバル動きベクトルGMVの例を説明する図である。図4(a)の例では、フレーム1〜フレーム8の8枚のフレームが1つのGOPを構成しており、これら8枚のフレームで共有される1つの共通グローバル動きベクトルGMVが求められる。各フレームのマクロブロックのローカル動きベクトルLMVを符号化する際、この共通グローバル動きベクトルGMVとの差分を符号化する。
たとえば、フレーム2の斜線で示したマクロブロックのローカル動きベクトルLMVを差分符号化する際、符号222で示すように、当該マクロブロックのローカル動きベクトルLMVは、フレーム1の点線で示したマクロブロックを参照しており、これが共通グローバル動きベクトルGMVとほぼ一致しているとする。この場合、ローカル動きベクトルLMVと共通グローバル動きベクトルGMVの差分は0に近い値になり、ローカル動きベクトルLMVの符号量が少なくなる。フレーム3の斜線で示したマクロブロックのローカル動きベクトルLMVも共通グローバル動きベクトルGMVとほぼ一致するため、そのローカル動きベクトルLMVの符号量は少なくなる。
フレーム4の斜線で示したマクロブロックのローカル動きベクトルLMVは、共通グローバル動きベクトルGMVに一致せず、差ベクトルαだけずれているとする。すなわち、LMV=GMV+αである。この場合、ローカル動きベクトルLMVと共通グローバル動きベクトルGMVとの差分を取ると、差ベクトルαだけが残る。ローカル動きベクトルLMVは、差ベクトルαの符号情報で符号化されるため、ローカル動きベクトルLMVをそのまま符号化する場合に比べて、符号量は少ない。
フレーム5の斜線で示したマクロブロックのローカル動きベクトルLMVは、符号225で示すように、2つ前のフレーム3の点線で示したマクロブロックを参照しているため、このローカル動きベクトルLMVの差分符号化の際は、共通グローバル動きベクトルGMVを2倍したものとの差分を取ることになる。このローカル動きベクトルLMVが、2倍した共通グローバル動きベクトルGMVとほぼ一致する場合、差分値は0に近くなり、ローカル動きベクトルLMVの符号量は少なくなる。
フレーム6の斜線で示したマクロブロックのローカル動きベクトルLMVは、符号226で示すように、1つ後のフレーム7のマクロブロックを参照しているため、このローカル動きベクトルLMVの差分符号化の際は、共通グローバル動きベクトルGMVを−1倍したものとの差分を取ることになる。このローカル動きベクトルLMVが、−1倍したグローバル動きベクトルGMVとほぼ一致する場合、差分値は0に近くなり、ローカル動きベクトルLMVの符号量は少なくなる。
フレーム8の斜線で示したマクロブロックのローカル動きベクトルLMVは、符号228で示すように、2つ前のフレーム6のマクロブロックを参照しているため、このローカル動きベクトルLMVの差分符号化の際は、共通グローバル動きベクトルGMVを2倍したものとの差分を取ることになる。このローカル動きベクトルLMVは、2倍したグローバル動きベクトルGMVとは一致せず、差ベクトルαだけずれているとする。すなわち、LMV=2GMV+αである。このローカル動きベクトルLMVと2倍した共通グローバル動きベクトルGMVの差分値は、差ベクトルαとなり、ローカル動きベクトルLMVをそのまま符号化する場合に比べて、符号量は少なくなる。
図4(b)は、図4(a)の例において、1つのGOPを2つのサブグループに分け、各サブグループで共通グローバル動きベクトルGMVを求める場合を示す。フレーム4とフレーム5の間に大域的な動きに変化があったとする。このとき、GOP内の8枚のフレーム1〜8を通じて1つの共通グローバル動きベクトルGMVを求めて、ローカル動きベクトルLMVとの差分を符号化すると、大域的な動きが前半のフレーム1〜4と後半のフレーム5〜8とで異なるため、差分値が小さくならず、符号量の削減効果が減少する。
そこで、大域動きベクトル算出部68は、GOP内で大域的な動きに変化が生じるフレームを検出し、変化が生じる前の前半のフレーム1〜4と、変化が生じた後の後半のフレーム5〜8の2つのサブグループに分けて、各サブグループ内で共通グローバル動きベクトルGMVを求め、ローカル動きベクトルLMVとの差分を符号化する。
大域動きベクトル算出部68は、前半のサブグループ内の4枚のフレーム1〜4で共有される第1の共通グローバル動きベクトルGMV1と、後半のサブグループ内の4枚のフレーム5〜8で共有される第2の共通グローバル動きベクトルGMV2とを求め、局所動きベクトル差分符号化部72に与える。
局所動きベクトル差分符号化部72は、前半のサブグループ内の各フレーム1〜4については、ローカル動きベクトルLMVの差分符号化の際、第1の共通グローバル動きベクトルGMV1との差分を算出して符号化し、後半のサブグループ内の各フレーム5〜8については、ローカル動きベクトルLMVの差分符号化の際、第2の共通グローバル動きベクトルGMV2との差分を算出して符号化する。
図4(b)の場合、第1の共通グローバル動きベクトルGMV1と第2の共通グローバル動きベクトルGMV2をそれぞれ動きベクトル情報として符号化ストリームに多重化してもよいが、第1の共通グローバル動きベクトルGMV1と第2の共通グローバル動きベクトルGMV2とが近い値を取る場合は、第1の共通グローバル動きベクトルGMV1と第2の共通グローバル動きベクトルGMV2の間で差分を取って符号化すると符号量を削減することができる。
その場合、大域動きベクトル差分符号化部74は、第1の共通グローバル動きベクトルGMV1を基準グローバル動きベクトルとして、第2の共通グローバル動きベクトルGMV2の符号化の際、第1の共通グローバル動きベクトルGMV1との差分を算出して符号化する。第2の共通グローバル動きベクトルGMV2が、第1の共通グローバル動きベクトルGMV1から差ベクトルβだけずれている場合、すなわちGMV2=GMV1+βである場合、差分値は差ベクトルβとなり、第1の共通グローバル動きベクトルGMV1と第2の共通グローバル動きベクトルGMV2を独立に符号化する場合に比べて、符号量を減らすことができる。
大域動きベクトル差分符号化部74は、第2の共通グローバル動きベクトルGMV2をそのまま符号化する場合と、第1の共通グローバル動きベクトルGMV1との差分値を符号化する場合とで、符号量を比較し、符号量が少ない方を選択してもよい。GOP内の前半のフレームと後半のフレームで大域的な動きが大きく異なる場合は、第2の共通グローバル動きベクトルGMV2について差分を取らないで符号化した方が符号量の面で有利なこともある。
図4(b)の例では、GOP内を2つのサブグループに分けたが、必要に応じてGOPを3つ以上のサブグループに分けて各サブグループ内で共通グローバル動きベクトルGMVを求めてもよい。この場合も同様に、大域動きベクトル差分符号化部74は、異なるサブグループ間、特に隣り合うサブグループ間で共通グローバル動きベクトルGMVの差分を求めて符号化するか、各サブグループの共通グローバル動きベクトルGMVをそのまま符号化するかを選択することができる。
図5は、動画像を複数の空間領域に分けて、領域毎に共通グローバル動きベクトルGMVを求める例を説明する図である。GOP設定部64は、GOP内のすべてのフレームに共通する複数のグローバル領域を設ける。GOPはフレーム1〜8の8枚のフレームから構成され、各フレームは斜線で示した4つのグローバル領域に区切られている。この4つのグローバル領域は、8枚のフレーム1〜8について共通しており、同じ位置にある。大域動きベクトル算出部68は、各グローバル領域毎に共通グローバル動きベクトルGMV1〜4を求める。
画像の領域によって、大域的な動きが異なる場合には、領域別に共通グローバル動きベクトルGMVを求め、領域毎に共通グローバル動きベクトルGMVを基準としてローカル動きベクトルLMVの差分符号化を行えば、ローカル動きベクトルLMVの符号量を効果的に減らすことができる。
GOP設定部64により設定されるフレーム上の領域は、一部に重複があったり、包含関係があってもかまわない。また、GOP設定部64は、GOP毎に領域の設定を変えてもよく、複数のGOPに対して同一の領域設定を用いてもよい。
図5の場合、大域動きベクトル差分符号化部74は、4つのグローバル領域の共通グローバル動きベクトルGMV間で差分を取って符号化することができる。4つの共通グローバル動きベクトルGMV1〜4が互いに近いものである場合、差分を取って符号化することで4つのグローバル動きベクトルGMV1〜4の符号量を減らすことができる。
図6は、複数のGOPの間で共通グローバル動きベクトルGMVの差分を符号化する例を説明する図である。
第1のGOP1、第2のGOP2は、それぞれ8枚のフレームから構成されるフレームのグループである。大域動きベクトル算出部68は、第1のGOP1に対して第1の共通グローバル動きベクトルGMV1を求め、第2のGOP2に対して第2の共通グローバル動きベクトルGMV2を求める。
ここで、第1の共通グローバル動きベクトルGMV1と第2の共通グローバル動きベクトルGMV2が近いものである場合、両者を個別に符号化するより、両者の差分を取って符号化する方が符号量を削減できる。たとえば、GMV2=GMV1+αである場合、第1の共通グローバル動きベクトルGMV1を基準グローバル動きベクトルとして、第2の共通グローバル動きベクトルGMV2を符号化する際、第1の共通グローバル動きベクトルGMV1との差分を取ると、差ベクトルαだけが残り、符号量を減らすことができる。
大域動きベクトル差分符号化部74は、第1の共通グローバル動きベクトルGMV1と第2の共通グローバル動きベクトルGMV2を個別に符号化した場合と、いずれか一方を基準として差分を取って符号化した場合とで符号量を比較して、有利な方を選択することもできる。
図6の例では、隣り合う2つのGOP間で共通グローバル動きベクトルGMVを差分符号化したが、より一般的には、3つ以上のGOP間で共通グローバル動きベクトルGMVの差分符号化を行ってもよい。たとえば、3つ以上のGOPの内、1つのGOPの共通グローバル動きベクトルGMVを基準として、他のGOPの共通グローバル動きベクトルGMVとの差分を符号化してもよく、3つ以上のGOPのシーケンスにおいて、隣り合う2つのGOP間で共通グローバル動きベクトルGMVの差分を求めて符号化してもよい。
図7は、実施の形態1に係る復号装置300の構成図である。これらの機能ブロックもハードウエアのみ、ソフトウエアのみ、またはそれらの組み合わせによっていろいろな形で実現することができる。
復号装置300は、符号化ストリームの入力を受け取り、符号化ストリームを復号して出力画像を生成する。入力された符号化ストリームはフレームメモリ380に格納される。
可変長復号部310は、フレームメモリ380に格納された符号化ストリームを可変長復号し、復号された画像データを逆量子化部320に供給し、復号された動きベクトル情報を動き補償部360に供給する。
逆量子化部320は、可変長復号部310により復号された画像データを逆量子化し、逆DCT部330に供給する。逆量子化部320により逆量子化された画像データはDCT係数である。逆DCT部330は、逆量子化部320により逆量子化されたDCT係数を逆離散コサイン変換(IDCT)することにより、元の画像データを復元する。逆DCT部330により復元された画像データは、動き補償部360に供給される。
動き補償部360は、過去または未来の画像フレームを参照画像として利用し、可変長復号部310から供給される動きベクトル情報を用いて予測画像を生成し、逆DCT部330から供給される差分画像と加算することにより、元の画像データを復元し、出力する。
図8は、動き補償部360の構成を説明する図である。復号装置300に入力される符号化ストリームは、図1の符号化装置100により符号化されたものであり、動き補償部360に供給される動きベクトル情報として、基準グローバル動きベクトルGMVB、グローバル動きベクトル差分ΔGMV、ローカル動きベクトル差分ΔLMVがある。動き補償部360は、これらの動きベクトル情報を参照して、復号対象フレームのローカル動きベクトルLMVを求め、動き補償を行う。
GOP情報取得部361は、可変長復号部310から符号化ストリームに含まれるGOPに関する情報を取得し、大域動きベクトル算出部362に与える。GOPに関する情報には、GOPを構成するフレームの区切りを示す情報やグローバル動きベクトルGMVを求めるべきグローバル領域の情報などが含まれる。
大域動きベクトル算出部362は、GOP情報取得部361から与えられたGOPに関する情報を参照して、GOP単位の共通グローバル動きベクトルGMVを符号化ストリームから取得する。グローバル動きベクトルGMVが差分符号化されている場合、大域動きベクトル算出部362は、可変長復号部310から基準グローバル動きベクトルGMVBとグローバル動きベクトル差分ΔGMVの入力を受け取り、GOP単位の共通グローバル動きベクトルGMV=ΔGMV+GMVBを求め、局所動きベクトル算出部364に与える。
局所動きベクトル算出部364は、可変長復号部310からローカル動きベクトル差分ΔLMVの入力、大域動きベクトル算出部362からGOP単位の共通グローバル動きベクトルGMVの入力をそれぞれ受け取り、フレーム毎にローカル動きベクトル差分ΔLMVにGOPに共通のグローバル動きベクトルGMVを加算することにより、フレーム単位でローカル動きベクトルLMV=ΔLMV+GMVを求める。局所動きベクトル算出部364は、各フレームのローカル動きベクトルLMVを画像復元部366に与える。
画像復元部366は、参照画像と各グローバル領域内のマクロブロック単位のローカル動きベクトルLMVを用いて予測画像を生成し、逆DCT部330から与えられた差分画像と予測画像を加算して元の画像を復元し、出力する。
以上述べたように、本実施の形態の符号化装置100によれば、動きベクトルを符号化する際に、複数のフレームからなるグループの単位で共通のグローバル動きベクトルを求め、共通のグローバル動きベクトルの情報を符号化する。グループ単位で大域的な動きに時間的な一貫性がある場合、グループ単位で共通のグローバル動きベクトルを設けることにより、グローバル動きベクトルの符号量を削減することができる。
さらに、グループ内の各フレームのマクロブロック単位のローカル動きベクトル情報をグループ内で共通のグローバル動きベクトルとの差分値で表すことにより、ローカル動きベクトル情報のデータ量を削減し、動画像ストリーム全体の符号量を減らして圧縮効率を高めることができる。
また、本実施の形態の復号装置300によれば、符号化装置100により符号化された圧縮効率の高い動画ストリームから、グループ単位で定義された共通のグローバル動きベクトルを取得して、グループ単位で大域的な動きを捉えて動画像の復号を行うことができる。また、各フレームのローカル動きベクトルの差分値と、グループ内で共通のグローバル動きベクトルとを取得し、フレーム毎にローカル動きベクトルの差分値をそのグループ内で共通のグローバル動きベクトルに加算してローカル動きベクトルを求め、動き補償を行うことにより、画質の高い動画像を復元することができる。
実施の形態2
図9は、実施の形態2に係る符号化装置100の動き補償部60の構成図である。本実施の形態の符号化装置100の動き補償部60は、GOP内の共通グローバル動きベクトルGMVをGOP内の各フレームに適用する際、必要に応じて補正する点が実施の形態1の符号化装置100の動き補償部60とは異なる。実施の形態1の符号化装置100の動き補償部60と同じ構成については同符号を付して説明を省略し、実施の形態1とは異なる構成と動作を説明する。
実施の形態1では、GOP内で大域的な動きの速度が一定であると仮定して、GOP内の共通グローバル動きベクトルGMVを補正することなくGOP内の各フレームに適用した。たとえば、GOP内で大域的な動きの速度が一定でない場合、あるフレームで求めた共通グローバル動きベクトルGMVを他のフレームにそのまま適用すると、共通グローバル動きベクトルGMVとマクロブロック単位のローカル動きベクトルLMVとの誤差が大きくなり、ローカル動きベクトルLMVと共通グローバル動きベクトルGMVの差分が小さくならず、符号量の削減効果が十分に得られないこともある。
たとえば、動画像に映っているオブジェクトが落下する場合や自動車が速度を加速する場合、GOP内で大域的な動きの速度が一定ではなく、加速度をもつ。このような場合には、GOP内で共通グローバル動きベクトルGMVに加速度項により補正してGOP内の各フレームに適用される共通グローバル動きベクトルGMVを調整すれば、補正された共通グローバル動きベクトルGMVは、各フレームのローカル動きベクトルLMVに近いものとなるから、各フレームにおいてローカル動きベクトルLMVを差分符号化した際の符号量をより効果的に削減することができる。
大域動きベクトル算出部68は、実施の形態1で述べた方法により求めたGOP単位の共通グローバル動きベクトルGMVを補正部69と大域動きベクトル差分符号化部74に与える。補正部69は、GOP内の各フレームに適用するために共通グローバル動きベクトルGMVを補正する。一例として、大域的な動きが加速度一定の運動である場合、補正部69は、次式により、共通グローバル動きベクトルGMVを補正する。
GMV[n]=GMV[0]+kn
ここで、GMV[0]は、共通グローバル動きベクトルGMVの初期値であり、nはフレーム番号である。kは定数の補正係数である。
補正部69は、補正された共通グローバル動きベクトルGMV+knを局所動きベクトル差分符号化部72に与え、補正係数kを大域動きベクトル差分符号化部74に与える。
大域動きベクトル差分符号化部74は、実施の形態1で述べた通り、共通グローバル動きベクトルGMVが複数設けられている場合に、共通グローバル動きベクトルGMVの差分符号化を行う。本実施の形態では、GOP内の各フレームに適用される共通グローバル動きベクトルGMVは補正係数kにより調整されているため、大域動きベクトル差分符号化部74は、補正係数kの情報も動きベクトル情報の一部に含めて符号化を行い、符号化された補正係数k、基準グローバル動きベクトルGMVB、およびグローバル動きベクトル差分ΔGMVを動きベクトル情報として多重化部92に与える。
図10は、GOP内で共通グローバル動きベクトルGMVがフレーム毎に補正される様子を説明する図である。
GOP内のフレーム1〜5において、大域的な動きが加速されるとする。画像全体の大域的な動きが加速されてもよく、特定のグローバル領域内の大域的な動きが加速されてもよい。ここでは、説明の簡単のため、黒丸で示したオブジェクトが加速度をもって動く場合を説明するが、画像全体がこの黒丸の動きと同様に加速度をもって動くと考えてもよい。
フレーム1〜フレーム5において、オブジェクトは符号231〜235で示す位置に移動する。移動速度は一定ではなく、加速度をもっている。この場合に、大域動きベクトル算出部68が、GOPのフレーム1について大域的な動きを検出することにより、共通グローバル動きベクトルGMVの初期値GMV[0]を求めたとする。補正部69は、フレーム2に対しては、この初期値GMV[0]を補正係数kにより補正したGMV[0]+kを補正された共通グローバル動きベクトルGMVとして局所動きベクトル差分符号化部72に供給する。以降、補正部69は、フレーム3に対してはGMV[0]+2kを、フレーム4に対してはGMV[0]+3kを、フレーム5に対してはGMV[0]+4kをそれぞれ補正された共通グローバル動きベクトルGMVとして局所動きベクトル差分符号化部72に供給する。
局所動きベクトル差分符号化部72は、フレーム1のローカル動きベクトルLMVの差分符号化の際は、グローバル動きベクトルGMVの初期値GMV[0]との差分を算出して符号化する。以降、局所動きベクトル差分符号化部72は、フレーム2〜5のローカル動きベクトルLMVの差分符号化の際は、それぞれグローバル動きベクトルGMVの初期値GMV[0]に補正係数kの整数倍を加えたGMV[0]+k、GMV[0]+2k、GMV[0]+3k、GMV[0]+4kとの差分を算出して符号化する。
ここでは、一例として、大域的な動きが加速度一定の動きと考えた場合の共通グローバル動きベクトルGMVの補正を説明したが、より一般的には、補正部69は、2次関数で補正するなど動きの速度変化に応じていろいろな補正を行うことができる。その場合、補正部69は、補正に用いた関数の種類や関数の係数などの補正に関する情報を大域動きベクトル差分符号化部74に与え、大域動きベクトル差分符号化部74が補正に関する情報を動きベクトル情報の一部に付加して符号化すればよい。
実施の形態2に係る復号装置は、実施の形態1の復号装置300の動き補償部360に図9の補正部69と同様の構成をもたせ、大域動きベクトル算出部362により求められた共通グローバル動きベクトルGMVを補正係数kを用いて補正してから局所動きベクトル算出部364に与えるように処理手順を変更すればよい。
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
上記の説明では、符号化装置100および復号装置300は、MPEGシリーズの規格(MPEG−1、MPEG−2およびMPEG−4)、H.26xシリーズの規格(H.261、H.262およびH.263)、もしくはH.264/AVCに準拠して動画像の符号化および復号を行ったが、本発明は、時間的スケーラビリティをもつ階層的な動画像の符号化および復号を行う場合にも適用することができる。特にMCTF技術を用いた場合の動きベクトルの符号化において、動きベクトルの符号量を削減するために本発明は有効である。
20 DCT部、 30 量子化部、 60 動き補償部、 64 GOP設定部、 66 局所動きベクトル検出部、 68 大域動きベクトル算出部、 69 補正部、 70 動き補償予測部、 72 局所動きベクトル差分符号化部、 74 大域動きベクトル差分符号化部、 80 フレームメモリ、 90 可変長符号化部、 92 多重化部、 100 符号化装置、 300 復号装置、 310 可変長復号部、 320 逆量子化部、 330 逆DCT部、 360 動き補償部、 361 GOP情報取得部、 362 大域動きベクトル算出部、 364 局所動きベクトル算出部、 366 画像復元部、 380 フレームメモリ。