本発明にかかる実施形態を、以下図面を参照して説明する。本実施形態では、動画像データの符号化を行う符号化装置に本発明を適用した場合を例に以下説明する。本実施形態にかかる符号化装置100は、入力される動画像データを構成する所定単位(例えば、フレームやフィールド)の画像間での動き補償により次の画像を予測する予測差分符号化方式で動画像データを符号化するものとする。本実施形態では、入力される単位画像を「フレーム」とする。すなわち、本実施形態にかかる符号化装置100は、インターフレーム予測による符号化をおこなう。なお、画像単位はフレームに限られず任意であり、例えば「フィールド」などであってもよい。
本実施形態にかかる符号化装置100の構成を図1を参照して説明する。図1は、本実施形態にかかる符号化装置100の機能構成を示す機能ブロック図である。
図示するように、本実施形態にかかる符号化装置100は、変換部110と、量子化部120と、符号化部130と、逆量子化部140と、逆変換部150と、復元画像メモリ160と、動き検出部170と、動き補償部180と、から構成される。
変換部110は、入力されたフレームおよび差分データについて変換符号化をおこなうことでデータ圧縮をおこなう。本実施形態では、例えば、4×4ブロックの整数変換(Integer Transform)をおこなうことで、動画像データを空間周波数領域に変換する。すなわち、隣接画素との相関を利用して低域周波数領域に変換係数を偏らせることでデータ圧縮を行う。
量子化部120は、変換部110による変換係数の値を、例えば、量子化ステップ幅の倍数で表して量子化し、データ圧縮を行う。すなわち、変換部110での変換に用いられた変換係数が離散的なレベルにマッピングされる。このような量子化によって高い周波数の情報が取り除かれる。
符号化部130は、量子化部120で量子化されたデータを、例えば、エントロピー符号化して出力するものであり、VLC(Variable Length Coding:可変長符号化)方式などの符号を用いて符号化する。より詳細には、例えば、指数ゴロム符号(Exponential Golomb Coding)や、CAVLC(Context-based Adaptive Variable Length Coding)などを用いる。さらに、生成する符号量を削減するために、CABAC(Context-based Adaptive Binary Arithmetic Coding)などの算術符号を用いて符号化してもよい。符号化部130で符号化されたデータ(以下、「符号化ビットストリーム」とする)は、所定の伝送媒体や記録媒体などに出力される。出力された符号化ビットストリームは、所定の復号化装置によって復号されて動画像データが再生される。
逆量子化部140は、量子化部120で量子化されたデータを逆量子化し、逆変換部150は、逆量子化部140で逆量子化されたデータを逆変換することで、量子化された入力データ(量子化フレーム)を復元する。
復元画像メモリ160は、例えば、半導体記憶素子などから構成される記憶装置であり、逆変換部150で復元されたフレーム(以下、「復元フレーム」とする)を格納する、いわゆるフレームメモリである。すなわち、出力された符号化フレームについての符号化前のデータを格納する。復元画像メモリ160に格納された復元フレームは、インター予測で参照される「参照フレーム」として用いられる。
動き検出部170は、現在の入力フレーム(現フレーム)と、現フレームの前のフレーム(参照フレーム)との差分を検出することで画像中の動体の動きを検出し、その動きのベクトル(動きベクトル)を求める。本実施形態では、現フレーム上に所定数の画素から構成されるマクロブロック(Macro Block: MB)を設定し、参照フレーム上でマクロブロックとの差分が最小となるブロック(参照ブロック)を探索し、これらの位置間のずれ量を示すベクトルを「動きベクトル」として検出する、いわゆる「ブロック・マッチング法」による動き検出をおこなう。
ここで、本実施形態の動き検出部170は、整数画素単位で動きベクトルを探索した後に分数画素単位で探索をおこなう、いわゆる「多段探索」により、分数単位までの動きベクトルを検出する。ここで、整数画素単位での探索を「整数探索」、分数画素単位での探索を「分数探索」とし、分数探索においては1/4画素単位の探索精度で探索をおこなうものとする。
また、本実施形態にかかる動き検出部170は、各マクロブロック毎に既に検出した動きベクトルに基づく「予測ベクトル」を算出し、動きベクトル検出対象となっているマクロブロック(以下、「現ブロック」とする)における動きベクトル検出に利用する。
動き補償部180は、動き検出部170が検出した動きベクトルに基づいて、前のフレームに対して動き補償する。すなわち、検出した動きベクトルに基づいて予測フレームを作成する。そして、入力フレームと予測フレームの差分が符号化対象となる。
本実施形態にかかる動き検出部170は、上述のように予測ベクトルを算出し、算出した予測ベクトルを用いることで、処理速度の高速化とフレームレートの向上を図るものである。このような動作を行う動き検出部170の構成を図2を参照して説明する。
図2は、動き検出部170の構成を示すブロック図である。図示するように、動き検出部170は、MB(マクロブロック)設定部171、予測ベクトル算出部172、ベクトルメモリ173、ベクトル選択部174、判別部175、探索範囲指定部176、ベクトル算出部177、差分検出部178、を備える。
MB設定部171は、入力された現フレーム上に、マッチング対象となるマクロブロックを設定する。ここで、マクロブロックとは、所定数の画素群から構成されたブロックであり、図3に示すように、一の現フレームCF上に複数設定する。MB設定部171は、このように設定されたマクロブロックMBを、動きベクトルの検出対象として順次指定するものとする。本実施形態では、図3において矢印で示すように、左から右への指定を上から下に向かって順次おこなう。動きベクトル検出の対象として指定されたマクロブロックを以下「現ブロック」とする。
予測ベクトル算出部172は、ベクトルメモリ173に格納されている、既に検出された動きベクトルに基づいて、動きベクトル検出時に参照する予測ベクトルを算出する。ここで「予測ベクトル」とは、既に検出した動きベクトルを用いて、次のマクロブロックでの動きベクトルを予想したものである。本実施形態では、現ブロックの周辺の複数のマクロブロック(以下、「予測対象ブロック」とする)の動きベクトルのメジアン(中央値)を算出して予測ベクトルとする。したがって、本実施形態では、現ブロック周辺の3つのブロックの動きベクトルを用いることとする。例えば、図4(a)に示すような位置に現ブロックが指定されている場合、図4(b)に示すように、ブロックB、C、Dを3つを予測対象ブロックとする。
ここでは、現ブロックとの相関が強いブロックを予測対象ブロックとして選択する。この場合、現ブロックの直上、直下、直左、直右に隣接しているブロックとの相関が高いと考えられる。したがって、図4(b)の場合、ブロックB、D、E、Gが現ブロックと相関が強いと考えられるが、ブロックE、Gについてはまだ動きベクトルが検出されていないため、予測対象ブロックとすることはできない。この場合、ブロックA、Cのいずれかを選択することになる。ここで、ブロックCはブロックEとの相関が強いと考えられ、ブロックAは既に予測対象ブロックとされているブロックB、Dと相関が強いと考えられる。このような場合は、ブロックEとの相関が強いブロックCを選択する。
予測対象ブロックとしてブロックB,C,Dが選択された場合、各ブロックで検出された動きベクトルをそれぞれ、B(x、y)、C(x、y)、D(x、y)とすると、予測ベクトル算出部172は、「median (B(x), C(x), D(x))」をx方向の予測ベクトル(予測ベクトル(x))とし、「median (B(y), C(y), D(y))」をy方向の予測ベクトル(予測ベクトル(y))とする。
このように、本実施形態における予測ベクトルの算出には、予測対象ブロックが3つ必要となるため、少なくとも4番目以降のマクロブロックでの動きベクトル検出において予測ベクトルが算出されることとなる。しかし、現ブロックの位置によっては、3つの予測対象ブロックが得られない場合もある(例えば、現ブロックがブロック行列の1行目にある場合や1列目にある場合など)。このような場合は、現ブロックが4番目以降のものであっても、予測ベクトルの算出をスキップしてもよい。上記のような3つの予測対象ブロックが得られる条件を、以下「予測ベクトル算出条件」とする。
本実施形態では、動きベクトルを整数画素単位と分数画素単位で求める。したがって、予測ベクトル算出部172は、整数動きベクトルと分数動きベクトルのそれぞれを用いて予測ベクトルを算出するものとする。すなわち、予測対象ブロックの整数動きベクトルのメジアンと、予測対象ブロックの分数動きベクトルのメジアンとをそれぞれ求める。以下、整数動きベクトルを用いて算出した予測ベクトルを「整数予測ベクトル」とし、分数動きベクトルを用いて算出した予測ベクトルを「分数予測ベクトル」とする。なお、予測ベクトルの算出は「メジアン」に限られず、例えば、複数の動きベクトルの平均などであってもよい。また、予測ベクトル算出部172は算出した整数予測ベクトルと分数予測ベクトルとを一時的に記憶する記憶領域を備えているものとする。
ベクトルメモリ173は、各マクロブロック毎に検出された動きベクトルの値(ベクトルデータ)を記憶する。ここで、ベクトルメモリ173に格納される動きベクトルは、図5に示すように、整数探索で検出されたベクトル(「整数動きベクトル」)、分数探索で検出されたベクトル(「分数動きベクトル」)、および、整数動きベクトルと分数動きベクトルとを合成した動きベクトル(「最終値」)である。ここで、「整数動きベクトル」は、現ブロックについての整数探索が終了した時点でベクトルメモリ173に格納され、「分数動きベクトル」は、現ブロックについての分数探索が終了した時点でベクトルメモリ173に格納される。また、整数動きベクトルと分数動きベクトルとを合成した最終値が、当該マクロブロックにおける動きベクトルとなる。ベクトルメモリ173は、少なくとも、1フレーム分のマクロブロックそれぞれで検出されたベクトルの値が記憶されるものとする。なお、ベクトルメモリ173の機能は、他の記憶装置や記憶領域(例えば、復元画像メモリ160など)によってなされてもよい。
ベクトル選択部174は、判別部175が出力する判別信号に基づき、予測ベクトル算出部172が算出した予測ベクトルか、ベクトルメモリ173に格納されている動きベクトルのいずれかを選択して取得して出力する。
判別部175は、現在の探索処理の種別が整数探索であるか分数探索であるかの判別、整数探索段階において検出される整数動きベクトルと整数予測ベクトルとが一致するか否かの判別、探索範囲の基準となる位置の判別、などの判別動作をおこない、判別結果を示す信号(以下、「判別信号」とする)を出力する。
探索範囲指定部176は、判別部175が出力した判別信号に基づいて、探索範囲のサイズを指定し、指定した探索範囲のサイズを示す信号(以下、「範囲情報」とする)を出力する。
ベクトル算出部177は、判別部175が出力した判別信号、および、探索範囲指定部176が出力した範囲情報に基づいて、指定された探索範囲における探索位置(ブロック)を示す探索ベクトルを算出して出力する。すなわち、指定された探索範囲内の探索ブロックを示すベクトルを出力することで、差分演算対象となる探索ブロックを順次指定する。ここで、ベクトル算出部177は、整数探索時には整数単位のベクトルを算出して出力し、分数探索時には、分数単位のベクトルを算出して出力する。なお、整数探索においては整数予測ベクトルを加算し、分数探索においては必要に応じて分数予測ベクトルを加算して出力することで、探索範囲と探索ブロックを予測ベクトル分オフセットさせる。
また、ベクトル算出部177は、整数探索で得られた整数動きベクトルと、分数探索で得られた分数動きベクトルとを加算し、現ブロックにおける動きベクトルの最終値として出力する。
なお、ベクトル算出部177は、算出したベクトルを示すベクトルデータを一時的に記憶する記憶領域を有しているものとする。この記憶領域は、少なくとも、各マクロブロックについての処理で算出したベクトルデータを、当該マクロブロックについての処理が終了するまで保持するものとする。
差分検出部178は、ベクトル算出部177が出力したベクトルが示す位置(ブロック)について、参照フレームと現フレームとの間で差分絶対値和演算をおこない、演算結果を出力する。
このような動き検出部170の各構成は、所定の制御信号によって制御されるものとする。このような制御信号は、例えば、CPU(Central Processing Unit:中央演算処理装置)などから構成される符号化装置100の制御部(不図示)より各部に供給されるものとすることができる他、外部装置などから供給されてもよい。
上記のように構成された符号化装置100は、次のような手順で動画像データを符号化する。
符号化装置100に入力された動画像データは、フレーム単位で変換部110および動き検出部170へ送られる。動き検出部170では入力フレームと参照フレームとの差分を検出することで動きベクトルを検出する。動き補償部180は、その動きベクトルに基づいて参照フレームを動き補償して予測フレームを生成する。そして、入力フレームと予測フレームとの差分が取られ、その差分データは、変換部110による変換と、量子化部120による量子化が行われた後に、符号化部130で符号化される。動き検出部170が検出した動きベクトルデータも符号化部130で符号化され、両データは多重化されて出力される。
一方、量子化部120で量子化された差分データは、逆量子化部140で逆量子化され、逆変換部150で逆変換されることにより復元される。復元された差分データと、動き補償部180が生成した予測フレームとが加算され、復元画像メモリ160に「復元フレーム」(復元画像)として格納される。復元画像メモリ160に格納された復元フレームは、「参照フレーム」(参照画像)として動き検出部170に入力される。動き検出部170では、入力された参照フレームと現フレームとの間の動き補償に用いる「動きベクトル」を検出する。
本実施形態にかかる動き検出部170は、いわゆるブロックマッチング法により現フレームと参照フレームとの差分ベクトルを求めるものである。すなわち、現フレーム上のマクロブロックと画素値が近似するブロックを参照フレーム上で探索し、探索されたブロック(参照ブロック)の位置とマクロブロックの位置とのずれを示すベクトルを「動きベクトル」として検出する。
ここで、本実施形態では、対象となるマクロブロックにおいて、上述した予測ベクトル算出条件が充足する場合、予測ベクトルを利用して動きベクトルを検出する。この場合の動き検出部170の動作(「動きベクトル検出処理」)を図6に示すフローチャートを参照して説明する。この「動きベクトル検出処理」は、動き検出部170に現フレームが入力されたことを契機に開始される。
処理が開始されると、まず、MB設定部171が現フレームにマクロブロックを設定し、設定したマクロブロックのいずれかを符号化対象ブロック(現ブロック)として指定する(ステップS101)。ここでは、上述したように、左上からの走査方向順に指定する(図3参照)。
本実施形態にかかる動き検出部170は、整数探索後に分数探索をおこなう多段探索により動きベクトルを検出するので、MB設定部171により符号化対象ブロックが指定されると、まず、整数画素単位で探索する「整数探索処理」を実行する(ステップS200)。この「整数探索処理」を図7、8に示すフローチャートを参照して説明する。
処理が開始されると、予測ベクトル算出部172が、現ブロックについて予測ベクトルを算出可能か否かを判別する(ステップS201)。ここでは、上述した予測ベクトル算出条件が充足しているか否かを判別する。予測ベクトル算出条件が充足している場合は「予測ベクトル算出可能」であり、予測ベクトル算出条件が充足していない場合は「予測ベクトル算出不可」ということになる。予測ベクトル算出部172は、ベクトルメモリ173に格納されているブロック毎の動きベクトルデータを参照することで、現ブロックについて予測ベクトル算出条件が充足しているか否かを判別する。すなわち、動きベクトルの「最終値」が記録されていれば、そのブロックについての動きベクトルは既に検出されていることになるので、そのようなブロックが現ブロックの周囲に3つあるか否かをみることで、予測ベクトル算出条件を充足しているか否かを判別することができる。
予測ベクトルが算出可能である場合(ステップS201:Yes)、予測ベクトル算出部172は、該当する予測対象ブロックについての動きベクトルをベクトルメモリ173から取得する。この場合、3つの予測対象ブロックの動きベクトルを取得し、これらのメジアンをとることで予測ベクトルを算出する(ステップS202)。より詳細には、予測対象ブロックの整数動きベクトルを取得してメジアンをとることで「整数予測ベクトル」を算出し、予測対象ブロックの分数動きベクトルを取得してメジアンをとることで「分数予測ベクトル」を算出する。予測ベクトル算出部172は、算出した整数予測ベクトルと分数予測ベクトルを、現ブロックについての処理が終了するまで保持する。
判別部175は、現在の処理が整数探索であることを示す判別信号と、現ブロックCBを示す判別信号を、ベクトル選択部174と、探索範囲指定部176と、ベクトル算出部177に出力する。
判別部175から出力された判別信号が「整数探索」を示す場合、ベクトル選択部174は、予測ベクトル算出部172から整数予測ベクトルを選択して、ベクトル算出部177に出力する。すなわち、予測ベクトルは、現ブロックの周辺ベクトルで求められた動きベクトルに基づいて、参照ブロックの位置を予測したものなので、本実施形態では、整数探索時に、現ブロックに対応する探索ブロックを整数予測ベクトル分ずらしておき(オフセット)、その周辺で探索をおこなうことで、探索範囲を絞り込み、演算量の減少を図る。したがって、ベクトル算出部177において探索範囲と探索ブロックを整数予測ベクトル分オフセットさせるため、整数探索時には、ベクトル選択部174は整数予測ベクトルを選択する。
探索範囲指定部176は、判別部175が出力した判別信号に基づいて、整数探索時の探索範囲サイズと探索中心を指定する(ステップS203)。
本実施形態では、探索ブロック(=マクロブロック)のサイズを、例えば、図9(a)に示すような、16×16整数画素とする。以下、整数探索における探索ブロックを「探索ブロックSB1」とする。本実施形態では、探索ブロックSB1を構成する各整数位置のいずれかを基準点(以下、「基準点OP1」とする)とし、その基準点の位置を指定することにより、探索ブロックSB1の位置や探索中心を決定するものとする。ここでは、図9(a)に示すように、探索ブロックSB1の左上頂部の整数位置を基準点OP1とする。
また、本実施形態では、整数探索の探索範囲(以下、「整数探索範囲SA1」とする)を、例えば、5×5整数画素とする。この場合、図9(b)に示すように、探索ブロックSB1の基準点OP1を中心とした5×5整数画素の範囲が整数探索範囲SA1となる。整数探索においては、探索ブロックSB1の基準点OP1が、整数探索範囲SA1内の各整数位置となるよう、1整数画素分ずつずらしながら、現ブロックとの差分を演算していく。
上述したように、本実施形態の「整数探索」では、探索ブロックと探索範囲を整数予測ベクトル分オフセットする。したがって、「整数探索」が指定されると、まず、図10(a)に示すように、現フレームCF上で指定された現ブロックCBと同一の位置およびサイズのブロックが、探索ブロックSB1_INTとして参照フレームRF上に規定される。そして、予測ベクトルが算出可能である場合、探索ブロックSB1_INTを整数予測ベクトル分オフセットしたところを起点として、同サイズのブロック(探索ブロックSB1)を整数画素ずつずらしながら、現ブロックCBとのマッチングをとることになる。ここでは、探索ブロックSB1_INTの基準点OP1を整数探索の原点(基準点OP1_INT)とする。
すなわち、図10(b)に示すように、探索ブロックSB1_INTの基準点OP1_INTを整数予測ベクトル分オフセットした位置を中心とした整数探索範囲SA1が規定される。このような場合、探索範囲指定部176は、例えば、探索の原点が基準点OP1_INTであること、探索範囲が5×5整数画素であること、ブロックサイズが16×16整数画素であること、および、予測ベクトルが算出可能であること、などを示す情報を範囲情報としてベクトル算出部177に出力する。
ベクトル算出部177は、探索範囲指定部176が出力した範囲情報に基づき、探索ブロックSB1を示すベクトルを算出して順次出力する。ここでは、まず、基準点OP1_INTの位置を特定すると、基準点OP1_INTを示すベクトルに、ベクトル選択部174が選択した整数予測ベクトルを加算する。すなわち、加算後のベクトルは、図10(b)に示すような、基準点OP1_INTを整数予測ベクトル分オフセットした位置を示すベクトルである。
ベクトル算出部177は、図11(a)に示すように、基準点OP10が基準位置(すなわち、ブロックの左上頂部の整数位置)となる16×16整数画素の探索ブロックSB1を設定する。このブロックは、探索の起点となるブロック(以下、「探索ブロックSB10」とする)である。ベクトル算出部177は、基準点OP1_INTを原点とした、探索ブロックSB10を示すベクトルを算出し、探索ブロックSB10を示す探索ベクトルとして差分検出部178に出力する。
ここで、ベクトル算出部177は、探索範囲指定部176の範囲情報に基づいて、図11(a)に示すように、基準点OP10を中心とした5×5整数画素の整数探索範囲SA1を設定する。そして、ベクトル算出部177は、図11(b)に示すような、探索ブロックSB10を1整数画素分ずらした探索ブロックSB11を示す探索ベクトルを算出して出力する。この場合、図11(b)に示すように、探索ブロックSB10の基準点OP10を1整数画素分ずらした位置を次の基準点である基準点OP11とし、この基準点OP11を基準とした16×16の探索ブロックSB11を示すベクトルを探索ベクトルとして出力する。ここでは、探索ブロックSB10を示す探索ベクトルに、整数単位のずらし量とずらし方向を示すベクトル(図11(b)の矢印)を加算することで、探索ブロックSB11の探索ベクトルとすることができる。
このようにして、ベクトル算出部177は、探索ブロックSB10を起点として、基準点OP1が整数探索範囲SA1の各整数位置となる探索ブロックSB11〜SB124のそれぞれを示す探索ベクトルを順次出力する。この場合、例えば、図11(c)の矢印で示す順序で探索ブロックSB1を1整数画素分ずつずらしていく。ベクトル算出部177は、このように整数予測ベクトル分オフセットした各探索ブロックSB1を示す探索ベクトルを算出し(ステップS204)、順次ベクトル算出部177に出力する。ここで、整数予測ベクトル分オフセットした位置を中心に整数探索範囲SA1が設定されるので、探索範囲も整数予測ベクトル分オフセットされたこととなる。
差分検出部178は、このように整数予測ベクトルが加算された探索ベクトルに基づいてブロックマッチングをおこなう(ステップS205)。すなわち、整数予測ベクトル分オフセットされた探索ブロックSB10〜SB124のそれぞれと、現ブロックCBとの差分を、例えば、絶対値和演算により求める。差分検出部178は、各探索ブロックSB1毎の演算結果を評価値として判別部175に出力する。
判別部175は、差分検出部178から取得した評価値に基づき、各探索ブロックSB1のうち、現ブロックとの差分が最小となる評価値が得られた探索ブロックSB1を、探索ブロックSB1_minとして特定する(ステップS206)。
判別部175は、特定した探索ブロックSB1_minが、探索ブロックSB10であるか否かを判別する。すなわち、現ブロックとの差分が最小となったブロックが、探索中心のブロックであるか否かを判別する(ステップS207)。探索ブロックSB1_minが探索中心(SB10)である場合(ステップS207:Yes)、判別部175は、予測ベクトル算出部172が算出した「整数予測ベクトル」が、現ブロックでの「整数動きベクトル」である、すなわち、「整数予測ベクトルと整数動きベクトルが一致する」と判別し(ステップS208)、その旨を示す判別信号をベクトル選択部174に出力する。
ベクトル選択部174は、判別部175からの判別信号に応じて、予測ベクトル算出部172から整数予測ベクトルを取得し、ベクトルメモリ173に出力する。ベクトルメモリ173は、ベクトル選択部174が出力した整数予測ベクトルを現ブロックの「整数動きベクトル」として格納する(ステップS209)。
すなわち、探索ブロックSB1_INTを整数予測ベクトル分オフセットさせた探索ブロックSB10と現ブロックCBとの差分が最小であるため、現ブロックに対する参照ブロックの整数画素単位での位置は、探索ブロックSB1_INTを整数予測ベクトル分加えたものとほぼ同一とすることができる。したがって、整数探索をおこなう前に算出した整数予測ベクトルを、整数探索によって得られる整数動きベクトルと同一視することができる。
整数動きベクトルをベクトルメモリ173に格納すると、「整数探索処理」を終了し、図6に示す「動きベクトル検出処理」のフローに戻る。
一方、探索ブロックSB1_minが探索ブロックSB10ではない場合、探索ブロックSB1_INTに対する、探索ブロックSB1_minの位置が実際の「整数動きベクトル」ということになる。この場合の探索ブロックSB1_minは、整数予測ベクトルで示される探索ブロックSB10をさらに整数画素分ずらしたブロックであるので、探索ブロックSB1_minを示すベクトル、すなわち、実際の整数動きベクトルと整数予測ベクトルとは一致しない。したがって、探索ブロックSB1_minが探索中心ではない場合(ステップS207:No)、判別部175は、現ブロックにおける整数探索で得られる整数動きベクトルと、予測ベクトル算出部172が算出した整数予測ベクトルとは一致しないと判別し(ステップS220:図8)、探索ブロックSB1_minとなった探索ブロックSB1を指定する判別信号をベクトル算出部177に出力する。
ベクトル算出部177は、判別部175の判別信号に基づき、探索ブロックSB1_minとなった探索ブロックSB1を示す探索ベクトルをベクトルメモリ173に出力する(ステップS221)。ベクトルメモリ173は、ベクトル算出部177が出力したベクトルを、現ブロックにおける「整数動きベクトル」として格納する(ステップS222)。
整数動きベクトルをベクトルメモリ173に格納すると、「整数探索処理」を終了し、図6に示す「動きベクトル検出処理」のフローに戻る。
なお、現ブロックについて予測ベクトルの算出が不可である場合(ステップS201:No)は、探索範囲指定部176が予測ベクトルを用いずに探索範囲を指定し(すなわち、整数予測ベクトル分オフセットさせない)、通常のブロックマッチング法によって整数動きベクトルを検出して(ステップS210)、処理を終了する。
本実施形態では、整数探索の後に分数探索をおこなう多段探索により動きベクトルを検出するので、「整数探索処理」が終了すると、「分数探索処理」が実行される(ステップS300)。「分数探索処理」の詳細を図12に示すフローチャートを参照して説明する。
ここで、対象となる参照フレームには、予め所定の補間処理により、分数画素単位に補間されているものとする。本実施形態では、1/4画素単位での分数探索をおこなうため、1/4画素単位に補間する。この場合、まず、例えば、「6tap FIR」などの補間手法により、図13(a)に示すような1/2画素補間(半画素補間)をおこなう。これにより、各整数位置の中間位置(1/2位置)の画素値を得ることができる。半画素補間の後、さらに、例えば、「線形補間」などの補間手法により、図13(b)に示すような1/4画素補間をおこなう。これにより、各1/2位置の中間位置(1/4位置)の画素値を得ることができる。
以下、分数探索における探索ブロックを「探索ブロックSB2」とし、探索ブロックSB2の基準点を「基準点OP2」とする。なお、1/4画素補間されたフレームでの分数探索においては、探索ブロックSB2のブロックサイズを16×16整数画素相当とする。その他、整数画素単位で指定されるサイズについても、相当するサイズが規定されるものとする。また、基準点OP2は、探索ブロックSB2の左上頂部となる整数位置もしくは分数位置が該当する。
分数探索が開始されると、判別部175が、「整数探索処理」のステップS209での判別に基づいて、整数動きベクトルと整数予測ベクトルとが一致していたか否かを判別する(ステップS301)。
本実施形態では、整数予測ベクトルが実際の整数動きベクトルと一致していたか否かに応じて、分数探索における探索範囲の広さ(サイズ)と、分数予測ベクトルに基づく探索範囲の絞り込み要否などを決定する。
ここで、分数探索範囲のサイズとして、より小さいサイズの「狭範囲」と、より大きいサイズの「広範囲」の2種類を用意するものとし、整数予測ベクトルが実際の整数動きベクトルと一致していたか否かに応じて選択する。より詳細には、整数予測ベクトルが実際の整数動きベクトルと一致していた場合には「狭範囲」が選択され、一致していなかった場合には「広範囲」が選択される。
また、整数予測ベクトルが実際の整数動きベクトルと一致していた場合には、探索範囲を分数予測ベクトル分オフセットして探索範囲を絞り込む。
したがって、判別部175は、ステップS301での判別結果を示す判別信号、および、現在の探索処理が分数探索であることを示す判別信号などを、探索範囲指定部176、ベクトル算出部177、および、ベクトル選択部174に出力する。
探索範囲指定部176は、判別部175が出力した判別信号に基づき、まず分数探索の探索中心を指定する。ここで、整数予測ベクトルが実際の整数動きベクトルと一致していた場合、整数単位で現ブロックとの差分が最小であるブロックが探索ブロックSB10であるので、分数単位の探索中心を探索ブロックSB10とする。ここで、整数予測ベクトルが実際の動きベクトルと一致していたことから、ステップS202で算出した予測ベクトルは十分高い精度を持っていることとなる。したがって、分数単位での分数予測ベクトルについても十分高い精度があるといえるので、探索中心を分数予測ベクトル分オフセットさせることで、予め探索範囲を絞り込むことができる。
したがって、整数予測ベクトルが実際の整数動きベクトルと一致していた場合(ステップS301:Yes)、探索範囲指定部176は、まず探索ブロックSB10を指定し(ステップS302)、この探索ブロックSB10を分数予測ベクトル分オフセットさせる(ステップS303)。探索範囲指定部176は、分数予測ベクトル分オフセットしたブロック(以下、「探索ブロックSB20」とする)を分数探索の探索中心に指定するとともに、探索範囲のサイズを「狭範囲」に指定する(ステップS304)。この場合、探索範囲指定部176は、探索ブロックSB10の基準点OP10を指定する情報、および、探索範囲のサイズが「狭範囲」であることを示す情報などを範囲情報としてベクトル算出部177に出力する。
このように、整数予測ベクトルと実際の整数動きベクトルとが一致していた場合には、分数探索の探索範囲および探索ブロックを分数予測ベクトル分オフセットするので、判別部175の判別信号に基づいて、ベクトル選択部174は予測ベクトル算出部172から「分数予測ベクトル」を取得して、ベクトル算出部177に出力する。
ベクトル算出部177は、探索範囲指定部176が出力した範囲信号に基づいて、まず、探索ブロックSB10の基準点OP10を特定し、ここを分数探索の原点(OP2_INT)とする。そして、OP2_INTの位置ベクトルに、ベクトル選択部174が選択した分数予測ベクトルを加算したベクトルが示す位置を、分数探索の探索中心となる探索ブロックSB20の基準点(基準点OP20)とする。
ここで、ベクトル算出部177は、図14(a)に示すような、分数探索範囲を決定するための基準となる範囲(以下、「基準範囲RA」とする)を設定する。図示するように、この基準範囲RAは、基準点OP20を中心とした3×3整数画素相当の範囲である。すなわち、整数単位で差分が最小とされた探索ブロックSB10の基準点OP10を分数予測ベクトル分オフセットさせた基準点OP20(分数位置)を中心とした3×3整数画素相当の範囲を基準範囲RAとして設定する。
ここで、分数探索の探索範囲を基準範囲RAに基づいて設定する。図14(b)は、1/4画素補間された基準範囲RAを示す拡大図である。分数探索範囲のサイズが「狭範囲」の場合、探索範囲指定部176は、図14(c)に示すように、基準範囲RAの中心である基準点OP20の周囲8方向に隣接する3×3分数画素(1/4画素単位)の範囲を分数探索の範囲(以下、「分数探索範囲SA2S」とする)のサイズとする。このサイズは、探索中心の周囲8方向を1/4画素単位で探索するための最小限のサイズである。
整数予測ベクトルが実際の整数動きベクトルと一致した場合の分数探索では、このように規定した分数探索範囲SA2S内の各分数位置が基準位置(すなわち、ブロック左上頂部位置)となる16×16整数画素相当のブロックを分数探索の探索ブロックSB2としてブロックマッチングをおこなう。この場合、ベクトル算出部177は、各探索ブロックSB2を示すベクトルを算出して順次出力する。
すなわち、ベクトル算出部177は、図15(a)に示すように、分数探索範囲SA2Sの各位置が基準位置(すなわち、ブロックの左上頂部位置)となる16×16整数画素相当の探索ブロックSB2を設定する。このブロックは、探索の起点となるブロック(以下、「探索ブロックSB20」とする)である。ベクトル算出部177は、基準点OP2_INTを原点とした、探索ブロックSB20を示すベクトルを算出し、探索ブロックSB20を示す探索ベクトルとして差分検出部178に出力する。
続いて、ベクトル算出部177は、図15(b)に示すような、探索ブロックSB20を1分数画素分ずらした探索ブロックSB21を示す探索ベクトルを算出して出力する。この場合、図15(b)に示すように、探索ブロックSB20の基準点OP20を1分数画素分ずらした位置を次の基準点(基準点OP21)とし、この基準点OP21が基準位置となる16×16整数画素相当の探索ブロックSB21を示すベクトルを探索ベクトルとして出力する。ここでは、探索ブロックSB20を示す探索ベクトルに、分数単位のずらし量とずらし方向を示すベクトル(図15(b)の矢印)を加算することで、探索ブロックSB21の探索ベクトルとすることができる。
このようにして、ベクトル算出部177は、探索ブロックSB20を起点として、基準点OP2が探索範囲SA2Sの各分数位置となる探索ブロックSB21〜SB28のそれぞれを示す探索ベクトルを順次出力する。この場合、例えば、図15(c)の矢印で示す順序で探索ブロックSB2を1分数画素分ずつずらしていく。ベクトル算出部177は、このように分数予測ベクトル分オフセットした各探索ブロックSB2を示す探索ベクトルを算出し、差分検出部178に順次出力する。ここで、分数予測ベクトル分オフセットした位置を基準に探索範囲SA2Sが設定されるので、探索範囲も分数予測ベクトル分オフセットされたこととなる。
差分検出部178は、ベクトル算出部177が出力する探索ベクトルに基づいて、現ブロックCBとのマッチングをおこなう。すなわち、分数探索範囲SA2Sの各分数位置毎にブロックマッチングをおこなう(ステップS305)。ここでは、探索ブロックSB10から分数予測ベクトル分オフセットした探索ブロックSB20、および、この探索ブロックSB20を起点に1/4画素ずつずらした各探索ブロックSB21〜SB28の画素値と、現ブロックCBの画素値との差分を、例えば、差分絶対値和演算により求める。差分検出部178は、分数位置毎の演算結果を評価値として判別部175に出力する。
判別部175は、差分検出部178から取得した評価値に基づき、差分が最小となる探索ブロックSB2(以下、「探索ブロックSB2_min」とする)を判別する。すなわち、差分が最小となる分数位置を特定する(ステップS306)。そして、探索ブロックSB2_minとされた探索ブロックSB2を指定する判別信号をベクトル算出部177に出力する。
ベクトル算出部177は、判別部175が出力した判別信号に基づき、探索ブロックSB2_minとなった探索ブロックSB2の探索ベクトルをベクトルメモリ173に出力する。
ベクトルメモリ173は、ベクトル算出部177が出力したベクトルを、現ブロックについての「分数動きベクトル」として格納する(ステップS307)。
つまり、整数予測ベクトルが整数動きベクトルと一致していた場合、整数単位で現ブロックと最も近似するブロックが探索ブロックSB10となるので、この探索ブロックSB10を中心に分数探索をおこなう。このとき、整数予測ベクトルが実際の整数動きベクトルと一致していたため、分数予測ベクトルの精度も高いといえる。したがって、探索ブロックと探索範囲を分数予測ベクトル分オフセットさせて探索範囲を絞り込み、分数探索にかかる演算量の減少を図る。さらに、分数予測ベクトルの精度が十分に高い場合、分数予測ベクトル分オフセットした探索ブロックと、実際の分数動きベクトルで示されるブロックとの誤差は極めて小さいことが予想される。このため、探索範囲を最小限の範囲(狭範囲)に設定し、その範囲内で探索ブロックSB2を1/4画素ずつずらして現ブロックCBとの差分を求めることで、ブロックマッチングの演算量を最小限にする。
そして、差分が最小となったブロック(探索ブロックSB2_min)の位置を、分数予測ベクトル分オフセットする前の探索ブロックSB10を原点としたベクトルで求め、このベクトルを現ブロックについての「分数動きベクトル」とする。すなわち、現ブロックについての「分数動きベクトル」は、全体の動きベクトルから整数部分を除いたものであるので、探索中心である探索ブロックSB10からみた、探索ブロックSB2_minを示す分数ベクトルを、現ブロックについての「分数動きベクトル」とする。
分数ベクトルがベクトルメモリ173に格納されると、「分数探索処理」を終了し、図6に示す「動きベクトル検出処理」のフローに戻る。
一方、整数予測ベクトルが整数動きベクトルと一致しなかった場合(ステップS301:No)、判別部175は、その判別結果を示す判別信号、および、現在の探索処理が分数探索であることを示す判別信号などを、探索範囲指定部176、ベクトル算出部177、および、ベクトル選択部174に出力する。
探索範囲指定部176は、判別部175が出力した判別信号に基づき、分数探索の探索中心を指定する。ここで、整数予測ベクトルが実際の整数動きベクトルと一致していなかった場合、整数単位で現ブロックとの差分が最小であるブロックは探索ブロックSB1_minであるので、この探索ブロックSB1_minを分数探索の探索中心とする。ここで、整数予測ベクトルが実際の動きベクトルと一致していないことから、ステップS202で算出した予測ベクトルの精度は高くないと考えられる。このため、探索中心を分数予測ベクトル分オフセットさせても効果的な絞り込みとならない可能性が高い。したがって、整数予測ベクトルと実際の整数動きベクトルとが一致していなかった場合には、分数予測ベクトルを用いたオフセットはおこなわない。
すなわち、整数予測ベクトルが実際の整数動きベクトルと一致していなかった場合、探索範囲指定部176は、探索ブロックSB_minを分数探索の探索中心(以下、「探索ブロックSB20」とする)に指定するとともに(ステップS308)、探索範囲のサイズを「広範囲」に指定する(ステップS309)。この場合、探索範囲指定部176は、探索ブロックSB_minの基準点(「基準点OP1_min」とする)を指定する情報、および、探索範囲のサイズが「広範囲」であることを示す情報などを範囲情報としてベクトル算出部177に出力する。
ここで、探索ブロックSB_minは、整数探索で得られた「整数動きベクトル」によって表されるものである。したがって、ベクトル選択部174は、判別部175の判別信号に基づき、ベクトルメモリ173に記録された「整数動きベクトル」を取得してベクトル算出部177に出力する。
ベクトル算出部177は、ベクトル選択部174が出力した「整数動きベクトル」に基づいて、まず、探索ブロックSB1_minの基準点OP1_minを特定する。ここでは、探索ブロックSB1_INTの基準点である基準点OP1_INTを示すベクトルに、整数動きベクトルを加算することで、探索ブロックSB1_minの基準点OP1_minを特定することができる。ベクトル算出部177は、このような基準点OP1_minを、分数探索の探索中心となる探索ブロックSB20の基準点(基準点OP20)とする(図16(a))。この基準点OP20は、分数探索の原点(OP2_INT)でもある。
ここで、ベクトル算出部177は、図16(b)に示すような、分数探索範囲を決定するための基準となる基準範囲RAを設定する。図示するように、この基準範囲RAは、基準点OP20(整数位置)の周囲8方向に隣接する3×3整数画素の範囲である。すなわち、整数単位で差分が最小とされた探索ブロックSB_minの基準点OP1_min(基準点OP20)の周囲8方向に隣接する3×3整数画素の範囲を基準範囲RAとして設定する。
ここで、分数探索の探索範囲を基準範囲RAに基づいて設定する。図17(a)は、1/4画素補間された基準範囲RAを示す拡大図である。分数探索範囲のサイズが「広範囲」の場合、探索範囲指定部176は、図17(b)に示すように、基準範囲RAの中心となる基準点OP20(整数位置)の周囲8方向に隣接する整数位置を含まない範囲を、分数探索の範囲(以下、「分数探索範囲SA2L」とする)のサイズとする。ここで、隣接する整数位置を含まないのは、これらの整数位置については、前段の整数探索においてすでに演算対象とされているため、分数探索においては対象とする必要がないためである。したがって、このサイズは、1/4画素単位で探索する最大限のサイズである。すなわち、1/4画素精度の場合、「広範囲」として指定された分数探索範囲SA2Lのサイズは、図17(b)に示すように、7×7分数画素(1/4画素単位)となる。
整数予測ベクトルが実際の整数動きベクトルと一致しなかった場合の分数探索では、このように規定した分数探索範囲SA2Lの各分数位置が基準点となる16×16整数画素相当のブロックを分数探索の探索ブロックSB2としてブロックマッチングをおこなう。この場合、ベクトル算出部177は、各探索ブロックSB2を示すベクトルを算出して順次出力する。
すなわち、ベクトル算出部177は、分数探索範囲SA2Lの各分数位置が基準位置(すなわち、ブロックの左上頂部位置)となる16×16整数画素相当の探索ブロックSB2を設定する。この場合、ベクトル算出部177はまず、図18(a)に示すような、基準点OP20が基準位置となる探索ブロックSB2を設定する。このブロックは、探索の起点となるブロック(以下、「探索ブロックSB20」とする)である。ここで、探索ブロックSB20は、探索ブロックSB1_minと同一であるので、ベクトル算出部177は、整数探索において算出した、探索ブロックSB1_minを示す探索ベクトルを利用する。
ベクトル算出部177は、図18(b)に示すような、探索ブロックSB20を1分数画素分ずらした探索ブロックSB21を示す探索ベクトルを算出して出力する。この場合、図18(b)に示すように、探索ブロックSB20の基準点OP20を1分数画素分ずらした位置を次の基準点である基準点OP21とし、この基準点OP21を基準位置とする16×16整数画素相当の探索ブロックSB21を示すベクトルを探索ベクトルとして出力する。ここでは、探索ブロックSB20を示す探索ベクトルに、分数単位のずらし量とずらし方向を示すベクトル(図18(b)の矢印)を加算することで、探索ブロックSB21の探索ベクトルとすることができる。
このようにして、ベクトル算出部177は、探索ブロックSB20を起点として、基準点OP2が分数探索範囲SA2L内の各分数位置となる探索ブロックSB21〜SB248のそれぞれを示す探索ベクトルを順次出力する。この場合、例えば、図18(c)の矢印で示す順序で探索ブロックSB2を1分数画素分ずつずらしていく。ベクトル算出部177は、このような各探索ブロックSB2を示す探索ベクトルを算出し、順次差分検出部178に出力する。
差分検出部178は、ベクトル算出部177が出力する探索ベクトルに基づいて、現ブロックCBとのマッチングをおこなう。すなわち、分数探索範囲SA2Lの各分数位置毎にブロックマッチングをおこなう(ステップS305)。ここでは、探索ブロックSB20は探索ブロックSB1_minと同一であるので、差分演算の対象から除外する。したがって、探索ブロックSB20を起点に1/4画素ずつずらした各探索ブロックSB21〜SB248の画素値と、現ブロックCBの画素値との差分を、例えば、差分絶対値和演算により求める。差分検出部178は、分数位置毎の演算結果を評価値として判別部175に出力する。
判別部175は、差分検出部178から取得した評価値に基づき、差分が最小となる探索ブロックSB2(以下、「探索ブロックSB2_min」とする)を判別する(ステップS306)。そして、探索ブロックSB2_minとされた探索ブロックSB2を指定する判別信号をベクトル算出部177に出力する。
ベクトル算出部177は、判別部175が出力した判別信号に基づき、探索ブロックSB2_minとなった探索ブロックSB2の探索ベクトルをベクトルメモリ173に出力する。
ベクトルメモリ173は、ベクトル算出部177が出力したベクトルを、現ブロックについての「分数動きベクトル」として格納する(ステップS307)。
つまり、整数予測ベクトルが整数動きベクトルと一致していなかった場合、予測ベクトルの信頼度は高くないと考えられるので、分数予測ベクトルを用いて探索範囲を絞り込まずに分数探索をおこなう。この場合、整数探索で現ブロックとの差分が最小となった位置、すなわち、探索ブロックSB_minを分数画素分ずつずらしながら現ブロックとの間のブロックマッチングをとることで、現ブロックについての正確な分数動きベクトルを求めることができる。ここで、現ブロックについての「分数動きベクトル」は、全体の動きベクトルから整数部分を除いたものであるので、探索中心である探索ブロックSB20(=探索ブロックSB1_min)からみた、探索ブロックSB2_minを示す分数ベクトルを、現ブロックについての「分数動きベクトル」とすることができる。
現ブロックにおける分数動きベクトルが検出されてベクトルメモリ173に格納されると、「分数探索処理」を終了し、図6に示す「動きベクトル検出処理」のフローに戻る。
ここでは、判別部175が分数探索が終了したと判別し、その旨を示す判別信号をベクトル選択部174に出力する。ベクトル選択部174は、判別部175が出力した判別信号に基づき、、現ブロックで探索された「整数動きベクトル」と「分数動きベクトル」とをベクトルメモリ173から取得して、ベクトル算出部177に出力する。ベクトル算出部177は、ベクトル選択部174から出力された「整数動きベクトル」と「分数動きベクトル」とを加算し、現ブロックにおける動きベクトル(最終値)として、ベクトルメモリ173と動き補償部180に出力する(ステップS103)。
すなわち、整数予測ベクトルと整数動きベクトルが一致していた場合は、「整数予測ベクトル」に分数探索で求めた「分数動きベクトル」を加えたものが最終値となる。一方、一致していなかった場合は、整数探索で求めた「整数動きベクトル」に分数探索で求めた「分数動きベクトル」を加えたものが最終値となる。
ベクトルメモリ173は、ベクトル算出部177が出力したベクトルを、現ブロックにおける動きベクトル(最終値)として格納する。
そして、現フレームのすべてのマクロブロックについて動きベクトルが検出されるまで、各マクロブロックについて上記処理をおこなう(ステップS104:No、S105)。すべてのマクロブロックについて動きベクトルが検出されると(ステップS104:Yes)、処理を終了する。
このように各マクロブロック毎に動きベクトルが検出されると、動き補償部180によって動き補償されて予測フレームが作成される。そして、予測フレームと現フレームとの差分のみが符号化部130で符号化されて、符号化ビットストリームとして出力される。
以上説明したように、本実施形態にかかる動き検出部170は、整数探索の後に分数探索をおこなう多段探索において、整数探索時に整数予測ベクトル分オフセットさせて探索をおこない、その結果得られた、差分が最小となる整数位置のベクトルを「整数動きベクトル」として検出する。そして、整数動きベクトルと整数予測ベクトルとが一致するか否かを判別し、一致する場合には、分数探索の探索範囲を狭くとるとともに、分数予測ベクトル分オフセットさせて分数探索する。一方、一致しない場合には、整数探索で最小差分となった整数位置を中心に、分数探索の探索範囲を広くとって分数探索をおこなう。
上記の分数探索において、「狭範囲」である分数探索範囲SA2Sは、図14(c)に示すように、3×3分数画素分の範囲である。したがって、この場合のブロックマッチングは、探索ブロックSB10を分数予測ベクトル分オフセットした探索ブロックSB20〜SB28のそれぞれと、現ブロックCBとの間でマッチングをとる。すなわち、「狭範囲」が指定された場合の演算回数は9回である。
一方、「広範囲」である分数探索範囲SA2Lは、図17(b)に示すように、7×7分数画素分の範囲である。ここで、探索ブロックSB20(=探索ブロックSB1_min)については整数探索で演算されているので、「広範囲」が指定された場合のブロックマッチングは、探索ブロックSB21〜SB248のそれぞれと、現ブロックCBとの間でマッチングをとる。すなわち、「広範囲」が指定された場合の演算回数は48回となる。
「動き補償」による差分符号化は、平行移動している動体を示す動画像などを符号化(圧縮)する場合に効果的であることが知られている。このような動画像では、動体部分におけるブロック間の相関は高く、その関係は複数のフレーム間に渡って維持されると考えられる。したがって、本発明にかかる上記動作を適用することで、相関の高いブロックから算出された整数予測ベクトルを用いて探索範囲を絞り込んで整数探索をおこなって、整数予測ベクトルと実際の整数動きベクトルとが一致するかをみる。そして、整数予測ベクトルと実際の整数動きベクトルとが一致した場合には、予測ベクトルの信頼度が保証されるので、分数予測ベクトル分オフセットして探索範囲を絞り込み、さらにの分数探索範囲を「狭範囲」にする。この結果、動画像を分数画素レベルで符号化する際の演算量を大幅に削減することができ、特に、上記のような平行移動する動体を示す動画像などの場合に効果的となる。
ここで、整数予測ベクトルが実際の整数動きベクトルと一致している場合は、分数予測ベクトルの信頼度も高いと考えられる。この場合、分数予測ベクトル分オフセットさせたブロックと、実際の分数動きベクトルで示されるブロックとの誤差は極めて小さいと考えられるので、分数探索のずらし量が最小限となる「狭範囲」の探索であっても、現ブロックとの差分が最小となる分数位置を探索することができる。
一方、整数予測ベクトルが整数動きベクトルと一致しない場合は、分数予測ベクトルの信頼度も高くないと考えられる。この場合、整数探索で得られた「整数動きベクトル」で示されるブロックを用いて、隣接する整数位置を含まない範囲(「広範囲」)内で分数探索することで、現ブロックとの差分が最小となる分数位置を確実に検出する。
すなわち、本実施形態にかかる動き検出部170によれば、フレームレートの向上につながる分数探索を含めた動き検出をおこないつつ、全体としての演算量の減少を図ることができる。この結果、分数探索によるフレームレートの向上と処理の高速化を両立させることができる。
上記実施形態では、整数予測ベクトルと実際の整数動きベクトルとが一致した場合、より演算量の少ない「狭範囲」を指定して分数画素単位探索をおこなったが、一致した場合には分数探索を省略し、分数予測ベクトルを現ブロックの分数動きベクトルとしてもよい。すなわち、例えば、整数動きベクトルと整数予測ベクトルが一致することをもって、予測ベクトルの信頼性を保証できる場合には、その予測ベクトルの分数部分を現ブロックの分数差分ベクトルとして用いることができる。この場合、分数探索が省略されるので、現ブロックについての処理時間を短縮させることができる。
上記実施形態では、ブロックサイズを16×16整数画素としたが、ブロックサイズは任意である。また、整数探索における整数探索範囲SA1を5×5整数画素としたが、整数探索における探索範囲のサイズも任意である。また、探索順序も任意である。
なお、上記実施形態では、分数単位で探索可能な最小限の範囲を「狭範囲」とし、最大限の範囲を「広範囲」としたが、2つの異なるサイズであって、演算量の差がでるのであれば、分数探索範囲のサイズは任意である。また、上記実施形態では、探索範囲内のすべての位置で差分演算をおこなったが、探索範囲の画素数を間引きして差分演算をおこなってもよい。また、上記実施形態では、参照フレームのみを分数画素補間したが、現フレームも分数画素補間するようにしてもよい。
なお、このような符号化装置100から出力された符号化ビットストリームを復号する復号装置で動き検出をおこなう部分も、上記符号化装置100の動き検出部170と同様の構成・動作とすることができる。すなわち、動画像データの符号化あるいは復号において、ブロックマッチングによる動き検出をおこなう部分を上記動き検出部170と同様の構成とすることにより、動画像の符号化および復号において、フレームレートの向上と処理高速化の両立を図ることができる。
なお、上記実施形態にかかる動き検出部170の機能をソフトウェア処理によって実現してもよい。この場合、例えば、パーソナルコンピュータや動画像記録再生装置などの汎用装置で、これらの機能を実現するためのプログラムを実行することで、動き検出部170の機能を実現することができる。
すなわち、汎用装置の記憶部に当該プログラムをインストールし、CPUなどの制御部がプログラムを実行する。この場合、以下のようなプログラムが実行されることで、汎用装置で本発明の実施形態にかかる動き検出部170の機能を実現することができる。
(1−1)「予測ベクトル算出プログラム」:既に動きベクトルが検出されているマクロブロックの動きベクトルに基づいて、現ブロックの動きベクトル検出時に用いる予測ベクトル(整数予測ベクトルと分数予測ベクトル)を算出するためのプログラム。
(1−2)「整数探索プログラム」:現ブロックに対応する参照フレーム上の探索ブロックを整数予測ベクトル分オフセットして整数探索し、現ブロックの画素値との差分が最小となる探索ブロックを示す整数位置を検出するためのプログラム。
(1−3)「判別プログラム」:整数探索で得られた実際の整数動きベクトルと整数予測ベクトルとが一致するか否かを判別するためのプログラム。
(1−4)「分数探索範囲指定プログラム」:整数予測ベクトルと実際の整数動きベクトルが「一致する」と判別された場合には、整数予測ベクトルが示す位置を分数予測ベクトル分オフセットした位置に基づいて分数探索の探索中心を指定するとともに、異なるサイズの探索範囲のうちのより小さいサイズの範囲(狭範囲)を分数探索範囲に指定し、「一致しない」と判別された場合には、整数動きベクトルが示す位置に基づいて分数探索の探索中心を指定するとともに、異なるサイズの探索範囲のうちのより大きいサイズの範囲(広範囲)を分数探索範囲に指定するためのプログラム。
(1−5)「分数探索プログラム」:参照フレーム上で指定された探索範囲内を分数画素単位で探索し、現ブロックの画素値との差分が最小となる探索ブロックを示す分数位置を検出するためのプログラム。
(1−6)「ベクトル算出プログラム」:検出された整数位置および分数位置に基づいて、現ブロックにおける整数動きベクトル、分数動きベクトル、および、動きベクトル(最終値)、などを算出するためのプログラム。
(1−7)「ベクトル記憶プログラム」:算出したベクトルの値を記憶装置に記憶するためのプログラム。
上記プログラムを汎用装置で実行した場合、CPUなどの制御装置が、MB設定部171、予測ベクトル算出部172、ベクトル選択部174、判別部175、探索範囲指定部176、ベクトル算出部177、差分検出部178、などとして機能し、例えば、主記憶装置や外部記憶装置などの記憶装置がベクトルメモリ173などとして機能することとなる。
これらのプログラムは、汎用装置等に予め組み込んで提供することができる他、プログラム自体を独立して提供してもよい。この場合のプログラムの配布方法は任意であり、例えば、CD-ROMやメモリカードなどの記録媒体に格納して配布可能であることはもとより、例えば、インターネットなどの通信媒体を介して配布してもよい。そして、配布されたプログラムを汎用コンピュータ装置等にインストールし、OS(Operation System:基本ソフトウェア)との協働などによって実行することで、上記動き検出部170の機能を実現することができる。
また、本発明にかかる機能を実現するためのプログラムは、動画像の符号化・復号をおこなうための既存のプログラムとの協働により動作するようにしてもよい。すなわち、既存の動画像符号化・復号化プログラムに対する、いわゆるアップデートプログラムとして提供することで、既存の動画像符号化・復号化処理に上記のような動き検出動作を追加し、フレームレートの向上と処理の高速化を図ることができる。
上記各実施形態の記載は、本発明を適用するための一例であり、本発明の範囲は上記各実施形態によって限定されるものではない。すなわち、上記実施形態以外の種々の形態で本発明が適用されてもよく、それらは本発明の範囲に含まれるものである。
100…符号化装置、110…変換部、120…量子化部、130…符号化部、140…逆量子化部、150…逆変換部、160…復元画像メモリ、170…動き検出部、171…MB設定部、172…予測ベクトル算出部、173…ベクトルメモリ、174…ベクトル選択部、175…判別部、176…探索範囲指定部、177…ベクトル算出部、178…差分検出部、180…動き補償部