(実施形態1)
本発明にかかる実施形態を、以下図面を参照して説明する。本実施形態では、動画像データの符号化を行う符号化装置に本発明を適用した場合を例に以下説明する。本実施形態にかかる符号化装置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は、整数画素単位で動きベクトルを探索した後に分数画素単位で探索をおこなう、いわゆる「多段探索」により、分数単位までの動きベクトルを検出する。ここで、整数画素単位での探索を「整数探索」、分数画素単位での探索を「分数探索」とする。
動き補償部180は、動き検出部170が検出した動きベクトルに基づいて、前のフレームに対して動き補償する。すなわち、検出した動きベクトルに基づいて予測ブロックを作成する。そして、入力フレームのマクロブロックと予測ブロックの差分が符号化対象となる。
本発明の実施形態にかかる動き検出部170は、複数の探索精度で分数探索可能であり、本実施形態では、1/2画素単位(1/2pel)および1/4画素単位(1/4pel)で探索して分数単位の動きベクトルを検出する。そして、本実施形態にかかる動き検出部170は、分数探索を実行する際、動き補償が改善される探索精度がいずれであるかを判定し、判定された探索精度でのみ探索することで、処理速度の高速化とフレームレートの向上を図るものである。このような動作を行う動き検出部170の構成を図2を参照して説明する。
図2は、動き検出部170の構成を示すブロック図である。図示するように、動き検出部170は、整数探索部171、最良整数位置判定部172、周囲整数位置評価部173、分数探索設定部174、画素補間部175、補間画素バッファ176、分数探索部177、ベクトル算出部178、を備える。
整数探索部171は、入力された現フレーム上にマクロブロックを設定し、この中から符号化対象ブロック(以下、「現ブロック」とする)を指定する。また、入力された参照フレーム上にも、現フレーム上のマクロブロックに対応するブロックを設定する。整数探索部171は、参照フレーム上で整数画素単位の探索(整数探索)をおこない、現ブロックの画素値に最も近似する(差分が最小となる)整数画素単位の位置を参照フレーム上で探索する。本実施形態では、所定の探索範囲を参照フレーム上に設定し、この探索フレーム内で探索ブロックを整数画素分ずつずらしながら、各探索ブロックの画素値と現ブロックの画素値との差分を、例えば、差分絶対値和演算(Sum of Absolute Difference: SAD)で求め、各演算結果を各探索ブロック毎の評価値として出力する。
最良整数位置判定部172は、整数探索部171が出力した評価値に基づいて、現ブロックとの差分が最小となったブロック(以下、「最良整数ブロック」とする)がいずれであるかを判定する。
周囲整数位置評価部173は、整数探索部171が出力した評価値のうち、最良整数位置判定部172が判定した最良整数ブロックの周囲8方向に隣接する整数ブロックの評価値を取得し、所定の条件に合致した評価値となった整数位置(ブロック)を特定する。
分数探索設定部174は、最良整数位置判定部172が特定した最良整数位置、周囲整数位置評価部173が特定した整数位置、および、分数探索部177による分数探索結果などに基づいて、次段でおこなう分数探索の探索精度や探索範囲などを設定する。本実施形態では、整数探索の次におこなう分数探索の探索精度を1/2pelとするか1/4pelとするかの判定、および、1/2pel分数探索の次に1/4pel分数探索をおこなうか否かを判定や、分数探索に伴う画素補間の対象となる領域を判定して設定する。
画素補間部175は、分数探索設定部174が設定した探索精度と対象領域に基づいて画素補間をおこなう。すなわち、1/2pelで分数探索する場合は1/2画素補間をおこない、1/4pelで分数探索する場合には1/4画素補間をおこなう。ここで、1/2画素補間の場合は、例えば、「6tap FIR」などの補間手法を用い、1/4画素補間の場合は、例えば、「線形補間」などの補間手法を用いる。なお、対象となる領域がすでに画素補間されており、その画素値が補間画素バッファ176に格納されている場合は、補間画素バッファ176から画素値を取得して用いる。
補間画素バッファ176は、例えば、半導体記憶素子などから構成され、画素補間部175による補間後の画素値を一時的に格納する。補間画素バッファ176には、例えば、図3に示すような「補間画素テーブル」が構成される。「補間画素テーブル」には、1フレーム中の各マクロブロックに一意に付与される「ブロックアドレス」をキーとしたレコードが作成され、各レコードには、「シリアル」、「レベル」、「画素値」、などの項目が用意される。
項目「シリアル」には、当該レコードに記録されている画素値が利用された順に付与されるシリアル番号が記録される。ここでのシリアル番号は、テーブル全体で1つのグローバル変数として保持されるものであり、フレーム毎の処理開始毎に「0」にリセットされるものである。そして、あるレコードに記録されている画素値が利用されると、グローバル変数が+1され、その値が当該レコードの「シリアル」に記録される。
項目「レベル」には、補間レベルを示すコード(例えば、0:空き、1:未補間、2:1/2補間済、3:1/4補間済、など)が記録される。ここで、「空き」は、当該レコードが空きレコードであることを示し、「未補間」は、当該ブロックは分数画素補間されていないことを示す。そして、「1/2補間済」は、当該ブロックが1/2画素補間されていることを示し、「1/4補間済」は、当該ブロックが1/4画素補間されていることを示す。
項目「画素値」には、当該ブロックの補間レベルに応じた画素値が座標毎に記録される。
分数探索部177は、分数探索設定部174が設定した探索精度で分数探索をおこなう。すなわち、所定の探索範囲で探索ブロックを指定された分数画素分ずつずらしながら現ブロックとの差分を、例えば、差分絶対値和演算により求める。
ベクトル算出部178は、整数探索部171による整数探索、および、分数探索部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は、いわゆるブロックマッチング法により現フレームと参照フレームとの差分ベクトルを求めるものである。すなわち、現フレーム上のマクロブロックと近似するブロックを参照フレーム上で探索し、探索されたブロック(参照ブロック)とマクロブロックとの差分ベクトルを動きベクトルとして検出する。
ここで、本実施形態にかかる動きベクトルの検出動作は、整数探索をおこなった後に分数探索をおこなうことで動きベクトルを検出するものである。本実施形態では、図4(a)に示すように、現フレームCF上に所定数のマクロブロックMBを設定するとともに、現フレームCF上のマクロブロックMBと同様のブロックを参照フレームRF上にも設定してブロック単位に探索をおこなうものとする。すなわち、現フレームCF上のマクロブロックとサイズや位置が同一となるブロックが参照フレームRF上にも設定される。この場合、現フレームCF上で符号化対象として指定されたマクロブロック(現ブロックCB)に対応する参照フレームRF上のブロックを探索中心として、現ブロックCBの画素値との差分が最小である画素値を示すブロックを参照フレーム上で探索する。
また、本実施形態では、1ブロックのサイズ(ブロックサイズ)を、例えば、16×16整数画素(分数画素補間後は「16×16整数画素相当」)とする。ここで、1フレームの解像度が、例えば、QVGA(Quarter Video Graphics Array)、すなわち、320×240であるとすると、16×16整数画素のブロックが1フレーム上に300(20×15)個設定されることになる。
このように設定される各ブロックには、それぞれを識別するための「ブロックアドレス」が付与される。本実施形態では、フレーム左上のブロックアドレスを「0」とし、以下、走査方向順に「1、2、…、299」とブロックアドレスを付与する。ここでの「走査方向」とは、図4(b)において矢印で示すように、左→右を上→下に進めていく方向をいう。ここで、現フレーム上のマクロブロックと参照フレーム上のブロックとは対応しているので、双方に共通のブロックアドレスを付与するものとする。
また、本実施形態では、各ブロック上の所定位置を基準点として定め、この基準点の位置に基づいて、ブロックの位置や範囲等を規定することとする。本実施形態では、各ブロックの左上頂部位置を基準点(基準点OP)とする。
本明細書においては、上記のブロックサイズ、解像度、ブロック個数である場合を例に以下説明するが、これらは一例であり、任意の条件であってもよい。
このような条件での動き検出部170の動作(「動きベクトル検出処理1」)を図5に示すフローチャートを参照して説明する。この「動きベクトル検出処理1」は、動き検出部170に現フレームが入力されたことを契機に開始される。
動き検出部170に現フレームが入力されて「動きベクトル検出処理1」が開始されると、整数探索部171が現フレーム上に上記のようなマクロブロックを設定するとともに、符号化対象とするマクロブロック(現ブロックCB)を指定する(ステップS101)。本実施形態では、現ブロックの指定をブロックアドレス順におこなうものとする。
次に整数探索部171は、指定した現ブロックCBについての整数探索を実行する(ステップS200)。この場合の「整数探索処理」を図6に示すフローチャートを参照して説明する。本実施形態では、復元画像メモリ160から参照フレームを取得し、ステップS101で指定した現ブロックのブロックアドレスと同じブロックアドレスが付与された参照フレーム上のブロックを、整数探索の探索中心として指定する。そして、整数探索部171は、探索中心として指定したブロック(以下、「探索ブロックSB10」とする)を起点として、所定の整数探索範囲内でブロック(探索ブロックSB11〜SB1n(探索ブロックSB1x))を1整数画素分ずつずらしながら、現ブロックCBとの差分を演算する。ここで、整数探索範囲のサイズは任意であるが、本実施形態では、ブロックサイズ(16×16整数画素)未満のサイズで整数探索範囲を規定することとする。
整数探索部171は、探索ブロックSB10を起点に1整数画素分ずつずらした各探索ブロックSB1xの画素値と、現ブロックCBの画素値との差分を、例えば、差分絶対値和演算により求め、演算結果を各探索ブロックSB1xの評価値として最良整数位置判定部172と周囲整数位置評価部173に出力する(ステップS201)。このとき、整数探索部171は、現ブロックとして指定されたブロックを示すブロックアドレスを画素補間部175に出力する。
最良整数位置判定部172は、整数探索部171から取得した各評価値を参照し、最も良好な評価、すなわち、現ブロックCBとの差分が最小であることを示す評価値(以下、「SADmin1」とする)と特定し、SADmin1を示すブロックを「最良整数ブロックSB1min」とする(ステップS202)。すなわち、最良整数ブロックSB1minは、整数画素単位で探索した結果、現ブロックCBとの差分が最小であるとされるブロックである。
最良整数ブロックSB1minを特定すると、最良整数位置判定部172は、特定した最良整数ブロックSB1minの位置を示す情報を周囲整数位置評価部173に出力する。この場合、最良整数ブロックSB1minの基準点OP1minの座標を示す情報を位置情報として出力する。最良整数位置判定部172はまた、SADmin1を分数探索設定部174に出力する。
周囲整数位置評価部173は、整数探索で得られた最良整数ブロックSB1minの周囲8方向に隣接するブロック(以下、「周囲整数ブロックSB1’」とする)を特定し(ステップS203)、整数探索部171から取得した評価値のうち、周囲整数ブロックSB1’の評価値を抽出する。そして、抽出した評価値のうち、現ブロックCBとの差分が最大である評価値(以下、「SADmax1」とする)を特定して、分数探索設定部174に出力し(ステップS204)、図5に示す「動きベクトル検出処理1」に戻る。
SADmin1とSADmax1が特定され分数探索設定部174に出力されると、整数探索の次に1/2pel探索をおこなうことで動き補償が改善されるか否かを判定するための「1/2pel処理」が実行される(ステップS400)。この「1/2pel処理」を図7に示すフローチャートを参照して説明する。
分数探索設定部174は、整数探索で得られた評価値であるSADmin1とSADmax1とに基づいて、分数探索の探索精度を1/2pelとするか否か判定するために用いる偏差(以下、「整数偏差」とする)を演算する(ステップS401)。すなわち、最良整数位置判定部172から取得したSADmin1と、周囲整数位置評価部173から取得したSADmax1とを用いて、最良整数ブロックSB1minとその周囲ブロックについての偏差を演算する。ここでは、SADmin1とSADmax1との差分の絶対値(|SADmin1−SADmax1|)を演算し、演算結果を「整数偏差Δ1」とする。
次に分数探索設定部174は、整数探索の次に1/2pel分数探索をおこなうことで動き補償が改善されるか否かを判定する。ここでは、ステップS401で演算した整数偏差Δ1が、予め設定された正の整数値定数ε1よりも大きい(Δ1>ε1)か否かを判別することで、1/2pel探索によって動き補償が改善されるか否かを判定する(ステップS402)。
整数偏差Δ1が定数ε1よりも大きい場合(ステップS402:Yes)、分数探索設定部174は、1/2pel探索をおこなうことで動き補償が改善されると判定する。
ここで、最小差分を示すSAD1min1と、その周囲位置の差分値のうちの最大値であるSADmax1との偏差である整数偏差Δ1は、整数画素単位での残差の変化を示し、偏差が小さいほど残差の変化が小さく、偏差が大きいほど残差の変化が大きいことを示す。したがって、整数偏差Δ1が小さい場合、整数画素単位で残差の変化が小さいことになるので、整数画素を補間した分数画素においても、残差に大きな変化がないことを予測することができる。
逆に、整数偏差Δ1が大きい場合は、整数画素単位で残差の変化が大きいため、分数補間後も残差に大きな変化があることが予測できる。この場合、最良整数ブロックSB1minの周囲の分数位置(1/2位置)において、最良整数ブロックSB1minよりも現ブロックと画素値が近似するブロックが存在する可能性が高い。
したがって、分数探索設定部174は、整数偏差Δ1が所定の定数ε1より大きい場合、1/2pel探索をおこなうことで動き補償が改善されると判定する。この場合、分数探索設定部174は、整数探索の次におこなう分数探索の探索精度を「1/2pel」とし、その旨を示す情報(以下、「探索精度情報」とする)を画素補間部175に出力する。
一方、整数偏差Δ1が定数ε1以下(Δ1≦ε1)である場合(ステップS402:No)、分数探索設定部174は、1/2pel探索をおこなっても動き補償は改善されないと判定する。したがって、分数探索設定部174は、整数探索の次に1/2pel探索をおこなわないものとする。この場合、1/4pel探索により動き補償が改善されるか否かを判定するための「1/4pel処理」(図5参照)に進む。「1/4pel処理」の詳細は後述する。
分数探索設定部174により、探索精度が1/2pelとされた場合、画素補間部175は、1/2画素補間をおこなう。ここではまず、画素補間部175が、整数探索部171から取得した現ブロックを示すブロックアドレスに基づいて、現ブロックCBに対応する探索ブロックSB10の周囲8方向に隣接するマクロブロック(以下、「周囲マクロブロック」とする)のブロックアドレスを特定する(ステップS403)。本実施形態のように、20×15のマクロブロックが配列されている場合、現ブロックCBおよび探索ブロックSB10のブロックアドレスをBAとすると、BA−21、BA−20、BA−19、BA−1、BA+1、BA+19、BA+20、BA+21が、周囲マクロブロックのブロックアドレスとなる。
周囲マクロブロックのブロックアドレスを特定すると、画素補間部175は補間画素バッファ176の「補間画素テーブル」(図3)にアクセスし(ステップS404)、探索ブロックSB10と、その周囲ブロックのブロックアドレス(以下、「対象ブロックアドレス」とする)がキーとなっているレコードがあるか否かを判別する(ステップS405)。
対象ブロックアドレスがキーとなっているレコードがある場合(ステップS405:Yes)、画素補間部175は、当該レコードを補間画素バッファ176から取得する(ステップS406)。補間画素バッファ176に記録された対象ブロックアドレスは、少なくとも現ブロックCBについての動きベクトル検出処理が終了するまで保持されるものとする。
画素補間部175は、取得したレコードの「レベル」を参照し、分数探索設定部174が現在指定している探索精度(1/2pel)に必要な補間レベルであるか否かを判別する(ステップS407)。
すなわち、探索精度が「1/2pel」である場合、補間レベルが「1/2補間済」もしくは「1/4補間済」であれば、1/2pel探索に必要な画素補間がなされていることになる。
十分な補間レベルである場合(ステップS407:Yes)、画素補間部175は、当該レコードの「画素値」に記録されている画素値を取得する(ステップS408)。画素補間部175が補間画素テーブルのレコードから画素値を取得すると、シリアル番号として画素補間部175に保持されているグローバル変数が+1され、この値が当該レコードの「シリアル」に記録される。
一方、十分な補間レベルでない場合(ステップS407:No)、画素補間部175は、当該レコードに対応する参照フレーム上のブロックを、例えば、「6tap FIR」などの補間手法により1/2画素補間し(ステップS410)、補間画素テーブルを更新する(ステップS411)。ここでは、1/2画素補間後の画素値を「画素値」に記録するとともに、「レベル」を「1/2補間済」に更新する。「1/2画素補間」は、図11(a)に示すように、対象となる領域内の各整数画素間の中間位置(1/2位置)での画素値が得られるよう補間するものである。
また、対象ブロックアドレスをキーとするレコードがない場合(ステップS405:No)、該当するブロックアドレスが示す参照フレーム上のブロックを1/2画素補間し(ステップS410)、補間画素テーブルを更新する(ステップS411)。ここでは、空きレコードがある場合には当該レコードを更新し、空きレコードがない場合には、シリアル番号が最小であるレコード、すなわち、最も以前に利用されたレコードを更新する。この場合の「更新」とは、該当するレコードの「ブロックアドレス」に、補間したブロックのブロックアドレスを記録するとともに、「レベル」を「1/2補間済」に更新して、「画素値」に1/2画素補間後の画素値を記録する。
ここで、「補間画素テーブル」のレコード数は、補間画素バッファ176の記憶容量に応じて任意に設定可能であるが、本実施形態では、補間処理にかかる補間画素バッファ176のメモリ量を削減するため、必要最小限のレコード数に設定することとする。すなわち、本実施形態では1フレーム中のブロック数が300であるが、補間画素テーブルのレコード数を、例えば、50に設定する。
画素値をレコードに記録すると、シリアル番号として画素補間部175に保持されているグローバル変数が+1され、その値が当該レコードの「シリアル」に記録される。
画素補間部175は、ステップS406で補間画素バッファ176から取得した画素値、および、ステップS411で補間画素テーブルに記録した画素値を分数探索部177に出力し(ステップS409)、図5に示す「動きベクトル検出処理1」に戻る。
以上のように、「1/2pel処理」では、次におこなう分数探索の探索精度を1/2pelに決定すると、探索ブロックSB10と、その周囲8方向に隣接する周囲マクロブロックについて1/2画素補間をおこなう。本実施形態では、ブロックサイズ未満のサイズの整数探索範囲としているので、探索ブロックSB10を起点に整数探索範囲内で探索して得られた最良整数ブロックSB1minは、探索ブロックSB10に周囲マクロブロックを加えた9つのマクロブロックの範囲内に含まれることとなる。したがって、このような9つのマクロブロックを1/2画素補間しておくことで、最良整数ブロックSB1minに基づく1/2pel探索で必要となる1/2画素を取得することができる。
ここで、該当するマクロブロックが既に1/2画素補間されており、その画素値が補間画素バッファ176に保持されている場合は、当該ブロックについては補間処理をおこなわずに補間画素バッファ176から画素値を取得することができる。
1/2pel探索のために1/2画素補間されると、分数探索部177は、画素補間部175から取得した補間後の画素値を用いて、1/2pel分数探索をおこなう(図5、ステップS500)。この場合の「1/2pel探索処理」を図8に示すフローチャートを参照して説明する。
ここでは、整数探索で求められた最良整数ブロックSB1minを探索中心として、1/2pel分数探索がおこなわれる。ここではまず、分数探索部177が1/2pel探索の探索範囲を設定する(ステップS501)。この場合、図12(a)に示すように、最良整数ブロックSB1minの基準点OP1minを中心とした3×3分数画素(1/2pel)の範囲を1/2pel探索範囲SAhとする。
分数探索部177は、このように規定した1/2pel探索範囲SAh内の各分数位置(1/2位置)が基準点となる16×16整数画素相当の探索ブロックSB2を順次指定し、各探索ブロックSB2の1/2pel画素値と現ブロックCBの画素値との差分を、例えば、差分絶対値和演算により求め、演算結果を各探索ブロックSB2の評価値とする(ステップS502)。すなわち、最良整数ブロックSB1minを起点に1/2画素分ずつ探索ブロックをずらしながら、現ブロックCBとの差分が求められる。換言すれば、最良整数ブロックSB1minの周囲8方向に隣接する8つの1/2位置についての評価値が得られることになる。
分数探索部177は、探索ブロックSB2の評価値を分数探索設定部174に出力し(ステップS503)、図5に示す「動きベクトル検出処理1」に戻る。
「1/2pel探索処理」が終了すると「1/4pel処理」が実行される。この「1/4pel処理」は、1/4pel探索をおこなうことで動き補償が改善されるか否かを判定するための処理である。「1/4pel処理」の詳細を図9に示すフローチャートを参照して説明する。
分数探索設定部174はまず、「1/2pel処理」のステップS402で「整数偏差Δ1≦ε1」とされた場合であるか、「1/2pel探索処理」のステップS503で1/2pelの評価値が出力された場合であるかを判別する。すなわち、整数探索の次に1/2pel探索を実行しなかった場合の処理であるか、1/2pel探索が実行された場合の処理であるかを判別する。(ステップS601)。
1/2pel探索が実行されていない場合、すなわち、「1/2pel処理」において「整数偏差Δ1≦ε1」とされた場合(ステップS601:Yes)、整数探索の次に1/4pel探索をおこなうことで動き補償が改善されるか否かを判定するための「高周波検出処理」を実行する(ステップS800)。この「高周波検出処理」の詳細は後述する。
一方、1/2pel探索がおこなわれた場合、すなわち、「1/2pel探索処理」によって1/2pelの評価値が取得された場合(ステップS601:No)、分数探索設定部174は、1/2pel探索のあとに1/4pel探索をおこなうことで動き補償が改善されるか否かを判定する。ここでは、取得した1/2pelの評価値のうちの、最小値(以下、SADmin2」とする)と、最大値(以下、「SADmax2」とする)とを特定し(ステップS602)、1/2pel探索についての偏差(以下、「1/2pel偏差Δ2」)を演算する(ステップS603)。ここでは、SADmin2とSADmax2との差分の絶対値(|SADmin2−SADmax2|)を1/2pel偏差Δ2とする。
分数探索設定部174は、求めた1/2pel偏差Δ2に基づいて、1/2pel探索後に1/4pel探索をおこなうことで動き補償が改善されるか否かを判定する。ここでは、1/2pel偏差Δ2が、予め設定された正の整数値定数ε2より大きい(Δ2>ε2)か否かを判別することで(ステップS604)、1/4pel探索により動き補償が改善されるか否かを判定する。
1/2pel偏差Δ2が定数ε2以下である場合(ステップS604:No)、分数探索設定部174は、1/2pel探索の後に1/4pel探索をおこなっても動き補償は改善されないと判定し、分数探索を1/2pel探索で打ち切る。ここで、1/2pel偏差Δ2は、整数偏差Δ1と同様、1/2pelでの残差の変化を示す。したがって、1/2pel偏差Δ2が小さいほど1/2pelでの残差の変化が小さく、大きいほど1/2pelでの残差の変化が大きいことを示す。
よって、1/2pel偏差Δ2が所定の定数ε2以下となる場合は、1/4pelに補間した後も残差の変化が小さいことが予測されるので、分数探索設定部174は、1/4pel探索をおこなっても動き補償は改善されないと判定する。この場合、分数探索設定部174は、1/2pel探索で得られたSADmin2となった探索ブロックSB2の位置を1/2pelにおける最良分数ブロックSB2minとし、この最良分数ブロックSB2minの位置を示す位置情報を分数探索部177に出力し(ステップS608)、図5に示す「動きベクトル検出処理1」に戻る。
一方、1/2pel偏差Δ2が定数ε2より大きい場合(ステップS604:Yes)、1/4pelにおいて残差の変化が大きいことが予測され、最良分数ブロックSB2minの周囲の1/4位置において、最良分数ブロックSB2minよりも画素値が現ブロックと近似するブロックが存在する可能性が高い。したがって、分数探索設定部174は、1/2pel探索の次に1/4pel探索をおこなうことで動き補償が改善されると判定する。この場合、分数探索設定部174は、探索精度が1/4pelであることを示す探索精度情報を画素補間部175に出力する。
分数探索設定部174から1/4pelの探索精度情報が出力されると、画素補間部175は1/4pel探索に必要な1/4画素補間処理をおこなう(ステップS605)。ここではまず、補間画素バッファ176にアクセスし、補間画素バッファ176が保持している対象ブロックアドレスを参照する。画素補間部175はさらに、補間画素バッファ176の補間画素テーブルにアクセスし、参照した対象ブロックアドレスがキーとなっているレコードを取得する。
画素補間部175は、取得したレコードの「レベル」を参照し、補間レベルが「1/4補間済」となっているレコードについては、「画素値」に記録されている1/4画素補間後の画素値を取得する。この場合、画素補間部175がレコードから画素値を取得する毎に、シリアル番号として画素補間部175に保持されているグローバル変数が+1され、その値が当該レコードの「シリアル」に記録される。
一方、補間レベルが「1/4補間済」以外である場合は、当該レコードに対応するマクロブロックを1/4画素補間する。ここでは、すでに1/2pel探索がなされているので、該当するマクロブロックは少なくとも1/2画素補間されている。したがって、画素補間部175は、図11(b)に示すように、1/2画素補間後の各1/2位置の中間位置(1/4位置)での画素値が得られるよう補間し、補間後の画素値を各レコードの「画素値」に記録する。
画素値をレコードに記録すると、シリアル番号として画素補間部175に保持されているグローバル変数が+1され、その値が当該レコードの「シリアル」に記録される。
画素補間部175は、補間画素テーブルから取得した画素値および画素補間部175が1/4画素補間した画素値を分数探索部177に出力する。
分数探索部177は、画素補間部175から取得した1/4画素補間された画素値を用いて1/4pel探索を実行する(ステップS606)。ここでは、1/2pel探索で得られた最良分数ブロックSB2minを探索中心として1/4pel探索をおこなう。この場合、例えば、図12(b)に示すように、最良分数ブロックSB2minの基準点OP2minを中心とした3×3分数画素(1/4pel)の範囲を1/4pelの探索範囲SAqとし、この探索範囲SAq内の各1/4位置を基準点とする16×16整数画素相当の探索ブロックSB3(SB31〜SB38)を順次指定する。
すなわち、分数探索部177は、最良分数ブロックSB2minを起点として、1/4画素分ずつずらした探索ブロックSB3を順次指定する。そして、各探索ブロックSB3の1/4pelの画素値と、現ブロックCBの画素値との差分を、例えば、差分絶対値和演算により求め、演算結果を各探索ブロックSB3の評価値とする。
分数探索部177は、求めた評価値が最小値となる探索ブロックSB3を特定し、このブロックを、1/4pelで現ブロックとの差分が最小である最良分数ブロックSB3minとする(ステップS607)。そして、この最良分数ブロックSB3minの位置を示す位置情報をベクトル算出部178に出力し(ステップS608)、図5に示す「動きベクトル検出処理1」に戻る。
ここで、「1/4pel処理」のステップS402で「整数偏差Δ1≦ε1」とされた場合(ステップS601:Yes)に実行される「高周波検出処理」(ステップS800)を、図10に示すフローチャートを参照して説明する。
この「高周波検出処理」は、整数探索の次に1/2pel探索をおこなっても動き補償が改善されないと判定された場合(すなわち、整数偏差Δ1≦ε1)に、1/2画素補間よりもローパス特性の強い1/4画素補間による1/4pel探索をおこなうことで、動き補償が改善されるか否かを判定するための処理である。
本実施形態では、符号化対象となっている現ブロックと、最良整数ブロックSB1minについての高周波成分、すなわち、精細成分に基づいて判定する。ここで、「整数偏差Δ1≦ε1」となる場合というのは、整数画素単位での残差の変化が小さいこと示し、符号化対象画像と参照画像のいずれか一方の高周波成分が少ないことを示唆する。このため、「高周波検出処理」により、高周波成分の少ない画像がいずれであるか、すなわち、符号化対象画像と参照画像のいずれが平坦な傾向であるのかを判別することで、1/4pel探索により動き補償が改善されるか否かを判定する。
「高周波検出処理」が開始されると、分数探索設定部174は、現ブロックCBと最良整数ブロックSB1minのそれぞれについての高周波の評価値(以下、「高周波評価値」とする)を演算する(ステップS801)。
ここでは、例えば、アダマール変換を用いて高周波評価値を演算する。この場合、現フレーム上の現ブロックCBの画素値を16次の正方行列Aとおき、参照フレーム上の最良整数ブロックSB1minの画素値を16次の正方行列Rとおく。そして、正方行列A、Rのそれぞれに対して、図13に示すようなアダマール変換行列Hを左右から乗算する。ここでは、正方行列Aにアダマール変換行列Hを乗算したものをB=HAH’とおき、正方行列Rにアダマール変換行列Hを乗算したものをS=HRH’とおく。なお、本実施形態で用いるアダマール変換行列Hは、低周波を小さいインデックスに割り当て、高周波を大きいインデックスに割り当てるために、低周波基底から高周波基底の順に行ベクトルを並べたものである。
ここで、「B=HAH’」を成分で表すとB=(bi,j)となり、「S=HRH’」を成分で表すとS=(si,j)となる。なお、i,jは0以上16未満である。
本実施形態では、アダマール変換後の右下三角成分の絶対値和を高周波評価値とする。現ブロックCBの高周波評価値をαとおき、最良整数ブロックSB1minの高周波評価値をρとおくと、分数探索設定部174は、数1を演算することで、現ブロックCBと最良整数ブロックSB1minそれぞれの高周波評価値を得る。
分数探索設定部174は、このようにして求めた現ブロックCBの高周波評価値αと、最良整数ブロックSB1minの高周波評価値ρを比較することで(ステップS802)、整数探索の次に1/4pel探索をおこなうことで、動き補償が改善されるか否かを判定する(ステップS803)。ここでは、現ブロックCBの高周波評価値αが最良整数ブロックSB1minの高周波評価値ρよりも明確に少ないか否か、より詳細には、最良整数ブロックSB1minの高周波評価値ρから予め設定した正の整数値定数δを減じた値よりも、現ブロックCBの高周波評価値αの方が大きい(α<ρ−δ)か否かを判別することにより判定する。
この場合、現ブロックCBの高周波評価値が最良整数ブロックSB1minの高周波評価値よりも明確に少ない場合、すなわち、α<ρ−δとなった場合、分数探索設定部174は、整数探索の次に1/4pel探索をおこなうことで、動き補償が改善されると判定する(ステップS803:Yes)。
ここで、「現ブロックCBの高周波評価値が最良整数ブロックSB1minの高周波評価値よりも明確に少ない」という条件は、現画像が参照画像よりもボケていることを示す。この場合、参照画像をボケさせることでより現画像に近づくことになる。通常、1/4pel補間はローパスフィルタ特性が強く、1/4pel補間により画像にボケが生じる。すなわち、現画像が参照画像よりもボケている場合、1/4pel探索をおこなうことで、動き補償が改善される可能性が高くなる。
したがって、現ブロックCBの高周波評価値が最良整数ブロックSB1minの高周波評価値よりも明確に少ない(α<ρ−δ)場合、分数探索設定部174は、整数探索の次に1/4pel探索をおこなうことで、動き補償が改善されると判定する。この場合、分数探索設定部174は、探索精度が「1/4pel」であることを示す探索精度情報を画素補間部175に出力する。
そして、分数探索設定部174が出力した探索精度情報に基づいて、画素補間部175が1/4pel探索に必要な1/4画素補間処理を実行する(ステップS804)。ここでの画素補間処理は、上記「1/4pel処理」におけるステップS605と同様の処理であるので説明は省略する。ただし、1/2pel探索を実行していないので、該当するブロックが1/2画素補間されていない場合もある。この場合、画素補間部175は、当該ブロックを1/2画素補間した後、1/4画素補間する。
画素補間部175は、取得した1/4pelの画素値を分数探索部177に出力する。分数探索部177は画素補間部175から取得した画素値を用いて1/4pel探索を実行する(ステップS805)。ここでの1/4pel探索の動作は、上記「1/4pel処理」におけるステップS606と同様であるので説明は省略する。
すなわち、分数探索部177は、1/4pelの最良分数ブロックSB3minを特定し(ステップS806)、この位置を示す位置情報をベクトル算出部178に出力し(ステップS807)、図5に示す「動きベクトル検出処理1」に戻る。
すなわち、「整数偏差Δ1≦ε1」であり、かつ、「高周波評価値α<高周波評価値ρ−δ」である場合には、整数探索後に1/2pel探索をおこなわずに1/4pel探索が実行される。
一方、現ブロックCBの高周波評価値が最良整数ブロックSB1minの高周波評価値よりも明確に少なくない場合、すなわち、α≧ρ−δとなった場合(ステップS803:No)、分数探索設定部174は、整数探索の次に1/4pel探索をおこなっても動き補償は改善されないと判定する。したがって、整数探索までで探索を打ち切り、分数探索をおこなわないこととする。この場合、分数探索設定部174は、整数探索で得られた最良整数ブロックSB1minの位置を示す位置情報をベクトル算出部178に出力し(ステップS807)、図5に示す「動きベクトル検出処理1」に戻る。
ベクトル算出部178は、分数探索設定部174あるいは分数探索部177から取得した、最良整数ブロックSB1min、最良分数ブロックSB2min、最良分数ブロックSB3minの位置情報を用いて、現ブロックCBについての動きベクトルを算出する(図5、ステップS102)。本実施形態では、対象となるブロックの基準点の座標を示す情報を位置情報とする。
したがって、整数探索までで探索が打ち切られた場合は、探索ブロックSB10の基準点OP10を原点とした、最良整数ブロックSB1minの基準点OP1minを示すベクトルが、現ブロックCBの動きベクトル(整数動きベクトル)となる。
また、1/2pel探索まで探索した場合は、探索ブロックSB10の基準点OP10を原点とした、最良分数ブロックSB2minの基準点OP2minを示すベクトルが、現ブロックCBの動きベクトル(1/2pel動きベクトル)となる。
さらに、1/4pel探索がおこなわれた場合には、探索ブロックSB10の基準点OP10を原点とした、最良分数ブロックSB3minの基準点OP3minを示すベクトルが、現ブロックCBの動きベクトル(1/4pel動きベクトル)となる。
なお、1/4pel探索をおこなわなかった場合に、整数動きベクトルあるいは1/2pel動きベクトルを1/4pel単位に変換して、1/4pel動きベクトルとしてもよい。
ベクトル算出部178は算出した動きベクトルを、例えば、動き補償部180に出力する(ステップS103)。動き補償部180では、動き検出部170から出力された動きベクトルに基づいて動き補償し、予測ブロックが作成される。そして、予測ブロックと現マクロブロックとの差分のみが符号化部130で符号化されて、符号化ビットストリームとして出力される。
ここで、現在指定されている現ブロックCB以降のブロックが現フレーム上に存在する場合、すなわち、現フレームにおける全マクロブロックについての動きベクトル検出処理が終了していない場合(ステップS104:No)、整数探索部171により次の符号化対象ブロックが指定される(ステップS101)。
一方、現フレーム上の全てのマクロブロックの動きベクトルが検出されると(ステップS104:Yes)、「動きベクトル検出処理」を終了する。
以上説明したように、上記実施形態1にかかる動き検出部170によれば、整数探索の次に1/2pel探索をおこなうことで動き補償が改善されるか否かを判定し、改善される場合には1/2pel探索を実行する。さらに、1/2pel探索の次に1/4pel探索をおこなうことで動き補償が改善されるか否かを判定し、改善される場合には1/4pel探索を実行する。また、整数探索の次に1/2pel探索をおこなっても動き補償が改善されないと判定した場合には、整数探索の次に1/4pel探索をおこなうことで動き補償が改善されるか否かを判定し、改善される場合には、整数探索の次に1/2pel探索をおこなわず、1/4pel探索を実行する。
これにより、動き補償が改善される場合にのみ、1/2pel探索、及び/又は、1/4pel探索を実行するので、一律に「整数探索→1/2pel探索→1/4pel探索」とすべての探索精度で探索する場合に比べ、全体としての演算量を減少させることができる。また、動き補償が改善される探索精度でのみ探索するので、画質を低下させることなく演算量を削減することができる。その結果、動画像の符号化処理に要する処理時間や消費電力量を削減することができる。
上記実施形態1では、符号化対象として指定されたブロック(現ブロック)を探索中心として整数探索をおこない、この結果得られた最良整数位置を分数探索の探索中心としたが、例えば、H.264で用いられるようなメディアン予測ベクトル等によりオフセットした点を探索中心としてもよい。その場合は画素補間を行う周囲マクロブロックもオフセットされる。
(実施形態2)
上記実施形態1における動きベクトル検出よりも高速な動作を容易に実現するための実施例を以下説明する。本実施形態にかかる動き検出部170は、例えば、H.264で用いられるようなメディアン予測ベクトルに基づいて、いずれの探索精度で探索するかを判定するものとする。
本実施形態にかかる動き検出部170の構成を図14を参照して説明する。本実施形態にかかる動き検出部170は、図示するように、実施形態1にかかる動き検出部170の構成に、予測ベクトル処理部179を加えたものである。
予測ベクトル処理部179は、予測ベクトルの算出可否を判別し、算出可能な場合、すでに算出済の動きベクトルを用いて、予測される現ブロックについての動きベクトル(予測ベクトル)を算出する。予測ベクトル処理部179はまた、算出した予測ベクトルを記憶する記憶領域を備えているものとする。
本実施形態にかかる動き検出部170による動きベクトル検出動作を「動きベクトル検出処理2」とし、図15に示すフローチャートを参照して説明する。この「動きベクトル検出処理2」は、動き検出部170に現フレームが入力されたことを契機に開始される。
処理が開始されると、整数探索部171が符号化対象となるブロック(現ブロック)を指定する(ステップS901)。現ブロックを指定すると、整数探索部171は、指定した現ブロックのブロックアドレスを予測ベクトル処理部179に出力する。
予測ベクトル処理部179は、整数探索部171から取得した現ブロックのブロックアドレスに基づき、当該ブロックについての予測ベクトルを算出可能であるか否かを判定する(ステップS902)。現マクロブロックが偶数行に属す場合は、予測ベクトルを算出不可とする。奇数行に属す場合は算出可能とする。以下で述べる処理により、動きベクトルの精度が伝播するので、定期的に精度をリセットする目的である。なお、定期的に精度をリセットする方法は上述のものに限るものではなく、例えば、偶数行目の偶数番目ブロックと奇数行目の奇数番目ブロックについては予測ベクトルを算出不可とし、残りのブロックは予測ベクトルを算出可とする、などの方法でも良い。
予測ベクトルが算出可能である場合(ステップS902:Yes)、予測ベクトル処理部179は、現ブロックについての予測ベクトルを算出する(ステップS903)。ここでは、H.264におけるメディアン予測ベクトルの算出方法などに基づいて予測ベクトルを算出する。すなわち、現ブロックの周囲に隣接するブロックのうち、既に動きベクトルが算出されている3つのブロックの動きベクトルのメディアンを予測ベクトルとする。本実施形態では、1/4画素単位で予測ベクトルを算出するものとする。すなわち、分母を4とした分数で予測ベクトルを表す。例えば、1整数画素分のベクトルは「4/4」と表し、1/2画素分のベクトルは「2/4」と表し、1/4画素分のベクトルは「1/4」と表す。
次に予測ベクトル処理部179は、算出した予測ベクトルの分子部分を4で除算し、割り切れるか否かを判別する(ステップS904)。ここで、予測ベクトルの分子が4で割り切れる場合(ステップS904:Yes)、予測ベクトル処理部179は、当該予測ベクトルは整数画素単位であると判定する。これは、整数単位のベクトルを1/4画素単位で表した場合、分子は4の倍数になるためである。
この場合、現ブロックの周囲で現ブロックとの相関が高いブロックで算出された動きベクトルは「整数動きベクトル」ということになる。これは、当該ブロックにおいては、整数探索によって動きベクトルが検出されたことを示す。
本実施形態では、現ブロックとの相関が高い周囲ブロックで行われた探索の探索精度と同じ探索精度で探索をおこなうことで、処理数を削減して処理時間の短縮を図る。したがって、予測ベクトルが整数画素単位であると判定された場合、予測ベクトル処理部179は、現ブロックについての探索を「整数探索のみ」とし、その旨を示す探索精度情報と、算出した予測ベクトルを整数探索部171に出力する。
整数探索部171は、予測ベクトル処理部179から取得した予測ベクトルに基づいた整数探索を実行する(ステップS905)。ここでは、予測ベクトルが示す位置を探索中心として整数探索をおこない、現ブロックCBとの差分が最小となる最良整数ブロックSB1minを特定する。整数探索部171は、この最良整数ブロックSB1minの位置情報をベクトル算出部178に出力する。
ベクトル算出部178は、最良整数ブロックSB1minの位置情報に基づいて「整数動きベクトル」を算出し、現ブロックについての動きベクトルとして動き補償部180に出力して(ステップS906)、処理を終了する。
一方、予測ベクトルの分子が4で割り切れない場合(ステップS904:No)、予測ベクトル処理部179は、予測ベクトルの分子を2で除算し、割り切れるか否かを判別する(ステップS907)。
予測ベクトルの分子が2で割り切れる場合(ステップS907:Yes)、予測ベクトル処理部179は、当該予測ベクトルは1/2pel単位であると判定する。これは、1/2pel単位のベクトルを1/4画素単位で表した場合、分子は2の倍数(4の倍数を除く)になるためである。
この場合、現ブロックの周囲で現ブロックとの相関が高いブロックで算出された動きベクトルは「1/2pel動きベクトル」ということになるので、当該ブロックにおいては、1/2pel探索によって動きベクトルが検出されたことになる。
したがって、予測ベクトル処理部179は、現ブロックでおこなう探索を「整数探索+1/2pel探索」とし、その旨を示す探索精度情報と算出した予測ベクトルを整数探索部171に出力する。
この場合、整数探索部171が、予測ベクトル処理部179から取得した予測ベクトルに基づいて整数探索をおこなって(ステップS908)、最良整数ブロックSB1minを特定する。整数探索部171は特定した最良整数ブロックSB1minの位置情報と探索精度情報を分数探索設定部174に出力する。
分数探索設定部174は、最良整数ブロックSB1minを探索中心とした1/2pel探索を設定し、画素補間部175および分数探索部177の協働により1/2pel探索が実行される(ステップS909)。すなわち、画素補間部175が1/2画素補間をおこない、分数探索部177が1/2画素単位で探索することで、1/2pel単位の最良分数ブロックSB2minを特定する。分数探索部177は、最良分数ブロックSB2minの位置情報をベクトル算出部178に出力する
ベクトル算出部178は、分数探索部177から取得した位置情報に基づいて「1/2pel動きベクトル」を算出し、現ブロックについての動きベクトルとして動き補償部180に出力して(ステップS910)、処理を終了する。
さらに、予測ベクトルの分子が4でも2でも割り切れない場合(ステップS904:No、S907:No)、予測ベクトル処理部179は、当該予測ベクトルは1/4pel単位であると判定する。これは、1/4pel単位のベクトルを1/4画素単位で表した場合、分子は奇数になるためである。
この場合、現ブロックの周囲で現ブロックとの相関が高いブロックで算出された動きベクトルは「1/4pel動きベクトル」ということになるので、当該ブロックにおいては、1/4pel探索によって動きベクトルが検出されたことになる。
したがって、予測ベクトル処理部179は、現ブロックでおこなう探索を「整数探索+1/2pel探索+1/4pel探索」とし、その旨を示す探索精度情報と算出した予測ベクトルを整数探索部171に出力する。
この場合、整数探索部171が整数探索をおこなって(ステップS911)、最良整数ブロックSB1minを特定する。そして、分数探索部177が最良整数ブロックSB1minを探索中心とした1/2pel探索をおこなって(ステップS912)、1/2pel単位の最良分数ブロックSB2minを特定する。さらに、分数探索部177は、特定した最良分数ブロックSB2minを探索中心とした1/4pel探索をおこない(ステップS913)、1/4pel単位の最良分数ブロックSB3minを特定する。
分数探索部177は、特定した最良分数ブロックSB3minの位置情報をベクトル算出部178に出力する。ベクトル算出部178は、最良分数ブロックSB3minの位置情報に基づいて「1/4pel動きベクトル」を算出し、現ブロックCBの動きベクトルとして動き補償部180に出力して(ステップS914)、処理を終了する。
なお、予測ベクトルが算出できない場合(ステップS902:No)は、すべての探索精度で探索して「1/4pel動きベクトル」を算出する(ステップS911、S912、S913)。この場合は、現ブロックに対応する参照フレーム上のブロック(探索ブロックSB10)を探索中心として整数探索がおこなわれる。
以上説明したように、本実施形態にかかる動き検出部170によれば、算出した予測ベクトルを用いた単純な演算により、実行する探索精度を決定するので、簡易な動作で高速に動きベクトルを検出することができる。
なお、実行する探索精度は、予測ベクトルと同じ探索精度までではなく、例えば、予測ベクトル精度の1段階上の精度まで段階的に探索を行うようにしてもよい。例えば、整数精度であれば1/2精度まで、1/2精度以上であれば1/4精度まで行うとする。この場合、精度をリセットする処理はおこなわなくてもよい。
以上説明したように、上記各実施形態にかかる動き検出部170によれば、例えば、「整数探索→1/2pel探索→1/4pel探索」の順で探索する「多段探索」で動きベクトルを検出する場合に、動き補償を改善する探索精度で選択的に分数探索をおこなうので、動き補償の改善に効果のない探索精度での探索動作を省略することができる。この結果、全体としての処理量を削減でき、処理時間の短縮や消費電力の削減等を図ることができる。また、動き補償の改善に効果のある探索精度でのみ探索をおこなうので、画質を損なうことなく処理量を削減させることができる。
なお、上記各実施形態にかかる動き検出部170の機能をソフトウェア処理によって実現してもよい。この場合、例えば、パーソナルコンピュータや動画像記録再生装置などの汎用装置で、これらの機能を実現するためのプログラムを実行することで、動き検出部170の機能を実現することができる。
すなわち、汎用装置の記憶部に当該プログラムをインストールし、CPUなどの制御部がプログラムを実行する。この場合、以下のような機能を実現させるプログラムを実行することで、汎用装置を本発明の実施形態にかかる動き検出部170として機能させることができる。
(1)「予測ベクトル算出機能」:既に算出済の動きベクトルに基づいて、現ブロックについての動きベクトルを予測ベクトルとして算出する機能
(2)「整数探索機能」:予測ベクトルが示す位置もしくは現ブロックを探索中心として整数画素単位で探索し、現ブロックとの差分が最小となる整数位置(最良整数位置)を検出する機能
(3)「整数偏差算出機能」:最良整数位置の評価値と、最良整数位置の近傍周囲における評価値の最大値と、を用いて最良整数位置付近での評価値の偏差(整数偏差)を算出する機能
(4)「1/2pel探索判定機能」:整数偏差に基づいて、1/2pel探索の実行要否を判定する機能
(5)「1/2pel探索機能」:判定に応じて1/2pel探索を実行し、1/2pel単位で現ブロックとの差分が最小となる分数位置(最良分数位置(1/2pel))を検出する機能
(6)「分数偏差算出機能」:最良分数位置(1/2pel)の評価値と、最良分数位置(1/2pel)の近傍周囲における評価値の最大値と、を用いて最良分数位置(1/2pel)付近での評価値の偏差(分数偏差)を算出する機能
(7)「高周波評価機能」:現ブロックの高周波成分と、最良整数位置の高周波成分とを比較して評価する機能
(8)「1/4pel探索判定処理」:分数偏差あるいは高周波成分の評価に応じて、1/4pel探索の実行要否を判定する機能
(9):「1/4pel探索機能」:判定に応じて1/4pel探索を実行し、1/4pel単位で現ブロックとの差分が最小となる分数位置(最良分数位置(1/4pel))を検出する機能
(10)「動きベクトル算出機能」:最良整数位置、最良分数位置(1/2pel)、最良分数位置(1/4pel)に基づいて、現ブロックでの動きベクトルを算出する機能
(11)「探索精度判定機能」:予測ベクトルに基づいて、現ブロックとの相関が高いブロックで採用された探索精度を判定し、現ブロックにおける探索精度とする機能
上記機能を実現するプログラムを汎用装置で実行した場合、CPUなどの制御装置が、整数探索部171、最良整数位置判定部172、周囲整数位置評価部173、分数探索設定部174、画素補間部175、分数探索部177、ベクトル算出部178、予測ベクトル処理部179などとして機能し、例えば、主記憶装置や外部記憶装置などの記憶装置が、補間画素バッファ176やその他の記憶領域として機能することとなる。
これらのプログラムは、汎用装置等に予め組み込んで提供することができる他、プログラム自体を独立して提供してもよい。この場合のプログラムの配布方法は任意であり、例えば、CD-ROMやメモリカードなどの記録媒体に格納して配布可能であることはもとより、例えば、インターネットなどの通信媒体を介して配布してもよい。そして、配布されたプログラムを汎用コンピュータ装置等にインストールし、OS(Operation System:基本ソフトウェア)との協働などによって実行することで、上記動き検出部170の機能を実現することができる。
また、本発明にかかる機能を実現するためのプログラムは、動画像の符号化をおこなうための既存のプログラムとの協働により動作するようにしてもよい。すなわち、既存の動画像符号化プログラムに対する、いわゆるアップデートプログラムとして提供することで、既存の動画像符号化処理に上記のような動き検出動作を追加し、処理の高速化を図ることができる。
上記各実施形態の記載は、本発明を適用するための一例であり、本発明の範囲は上記各実施形態によって限定されるものではない。すなわち、上記実施形態以外の種々の形態で本発明が適用されてもよく、それらは本発明の範囲に含まれるものである。
例えば、上記実施形態では、整数偏差および分数偏差を、最小値と最大値の差分絶対値としたが、偏差の大きさと相関が高くなるのであれば、偏差の算出方法はこれに限られない。例えば、平均値と最小値の差分絶対値や中央値と最小値の差分絶対値などであってもよい。あるいは、標準偏差や分散などであってもよい。
上記実施形態における「高周波検出処理」では、アダマール変換を用いたが、高周波成分を取り出すことができるのであれば、演算方法はこれに限られず任意である。例えば、DCT(Discrete Cosine Transform:離散コサイン変換)や自己相関関数などを用いてもよい。また、上記実施形態では、アダマール変換結果の右下三角成分を高周波評価値としたが、高周波成分の比較ができるのであれば、任意の方法で高周波評価値を算出してもよい。例えば、右下三角成分の範囲を増減させてもよい。また、右下三角成分の絶対値和を評価値としたが、例えば、非0の個数をとることで評価値としてもよい。
また、上記実施形態の「高周波検出処理」では、現画像と参照画像の高周波成分の差をみることにより評価したが、現画像(現ブロック)についてのみ高周波成分を評価してもよい。この場合、例えば、絶対評価により現画像(現ブロック)の高周波成分を評価し、現ブロックで高周波成分が検出されない場合に1/4pel探索を実行する。
なお、上記実施形態では、「高周波検出処理」を整数探索の次に1/4pel探索をおこなうか否かの判定に用いたが、例えば、整数探索の次に1/2pel探索をおこなうか否かの判定に用いてもよい。あるいは、1/2pel探索の次に1/4pel探索をおこなうか否かの判定に「高周波検出処理」を用いてもよい。この場合、分数探索設定部174は、1/2pel探索での最良分数ブロックSB2minの高周波評価値を演算して、高周波成分に基づく判定をおこなう。
また、上記各実施形態では、動き補償が改善するか否かの判別に、偏差および高周波成分を用いたが、動き補償の改善が判別できるのであれば、判別方法や判別要素は任意である。
また、「整数探索(第1段階)→1/2pel探索(第2段階)→1/4pel探索(第3段階)」の多段探索の場合を例示したが、異なる探索精度で段階的に探索をおこなうのであれば、探索精度や段階数は任意のものであってもよい。
また、上記実施形態では、最良整数ブロックの周囲8方向に隣接する周囲整数ブロックを特定したが、例えば、周囲4方向などに間引きしてもよい。これは1/2pel探索についても同様である。
100…符号化装置、110…変換部、120…量子化部、130…符号化部、140…逆量子化部、150…逆変換部、160…復元画像メモリ、170…動き検出部、171…整数探索部、172…最良整数位置判定部、173…周囲整数位置評価部、174…分数探索設定部、175…画素補間部、176…補間画素バッファ、178…ベクトル算出部、179…予測ベクトル処理部、180…動き補償部