(57)【特許請求の範囲】
【請求項１】
動き検出対象の画像を分割して得られる第１の画像ブロックに対して、参照画像を参照して動きベクトルを検出する動き検出装置であって、
複数の候補ベクトルから１つの候補ベクトルを選択する候補ベクトル選択手段と、
前記第１の画像ブロックおよび前記候補ベクトル選択手段により選択された候補ベクトルに基づいて、前記参照画像上において第２の画像ブロックを抽出する参照ブロック抽出手段と、
前記第１の画像ブロックの画素値の総和と、前記第２の画像ブロックの画素値の総和との差を検出する総和差検出手段と、
前記総和差検出手段により検出された総和の差が、設定された最小評価値よりも小さい場合に、前記第１の画像ブロックと前記第２の画像ブロックの対応する画素同士の画素値の差分の絶対値の総和を、前記候補ベクトル選択手段により選択された候補ベクトルに対する評価値として検出する評価値検出手段と、
前記評価値検出手段により検出された評価値が、既に検出された評価値のなかで最小であった場合に、前記候補ベクトル選択手段により選択された候補ベクトルを記憶し、当該評価値を前記最小評価値として設定する記憶手段と、
前記記憶手段に記憶されている前記候補ベクトルを、当該第１の画像ブロックに対する動きベクトルとして出力する出力手段と
を有する動き検出装置。
【請求項２】
前記動き検出対象の画像を分割して得られる複数の画像ブロックの各々に対して、前記複数の候補ベクトルを適用して前記第２の画像ブロックを決定した場合に、該第２の画像ブロックとなり得る前記参照画像上の全ての画像ブロックについて、画素値の総和を算出する参照ブロック総和算出手段と、
前記参照ブロック抽出手段により抽出された前記第２の画像ブロックに対して、前記参照ブロック総和算出手段により算出された画素値の総和を参照することにより、当該第２の画像ブロックの画素値の総和を検出する総和検出手段と
をさらに有する請求項１記載の動き検出装置。
【請求項３】
前記参照ブロック総和算出手段は、前記第１の画像ブロックと同一の画素構成であり、前記参照画像上から得られる全ての画像ブロックについて、前記画素値の総和を予め求める
請求項２記載の動き検出装置。
【請求項４】
前記動き検出対象の画像を分割して得られる複数の画像ブロックの各々について、画素値の総和を算出する動き検出対象ブロック総和算出手段と、
前記動き検出対象ブロック総和算出手段により算出された当該第１の画像ブロックの画素値の総和を参照することにより、当該第１の画像ブロックの画素値の総和を検出する第１の総和検出手段と
をさらに有する請求項３記載の動き検出装置。
【請求項５】
前記評価値検出手段は、式１に示される値ＭＥを前記評価値として求める請求項４記載の動き検出装置。
【数１】
0003747534.tif 000004
【請求項６】
動き検出対象の画像を分割して得られる第１の画像ブロックに対して、参照画像を参照して動きベクトルを検出する動き検出方法であって、
複数の候補ベクトルから１つの候補ベクトルを選択する第１の工程と、
前記第１の画像ブロックおよび前記第１の工程で選択された候補ベクトルに基づいて、前記参照画像上において第２の画像ブロックを抽出する第２の工程と、
前記第１の画像ブロックの画素値の総和と、前記第２の画像ブロックの画素値の総和との差を検出する第３の工程と、
当該第３の工程で検出された総和の差が設定された最小評価値よりも小さい場合に、前記第１の画像ブロックと前記第２の画像ブロックの対応する画素同士の画素値の差分の絶対値の総和を、前記第１の工程で選択された候補ベクトルに対する評価値として検出する第４の工程と、
当該第４の工程で検出された評価値が、前記候補ベクトル選択手段において既に選択された候補ベクトルに対して既に検出された評価値のなかで最小であった場合に、前記第１の工程で選択された候補ベクトルを記憶手段に記憶し、当該評価値を前記最小評価値として設定する第５の工程と、
前記複数の候補ベクトル全てが前記第１の工程で選択された後に、前記記憶手段に記憶されている前記候補ベクトルを、当該第１の画像ブロックに対する動きベクトルとして出力する第６の工程と
を有する動き検出方法。
【請求項７】
前記動き検出対象の画像を分割して得られる複数の画像ブロックの各々に対して、前記複数の候補ベクトルに基づいて前記第２の画像ブロックを決定した場合に、該第２の画像ブロックとなり得る前記参照画像中の全ての画像ブロックについて、画素値の総和を算出する第７の工程と、
前記第１の画像ブロックおよび前記候補ベクトルが与えられたことに伴って前記第２の画像ブロックが決定された場合には、前記第２の画像ブロックの画素値の総和を参照することにより、前記第１の画像ブロックの画素値の総和との差を求める第８の工程と
をさらに有する請求項６記載の動き検出方法。
【請求項８】
前記第８の工程は、
前記動き検出対象の画像を分割して得られる複数の画像ブロックの各々について、画素値の総和を求め、
前記第１の画像ブロックについて、前記第１の工程で選択された候補ベクトルにより前記第２の画像ブロックが決定された場合には、既に求めた前記第１の画像ブロックの画素値の総和を参照することにより、前記第２の画像ブロックの画素値の総和との差を求める
請求項７記載の動き検出方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、動画像圧縮装置などに用いられる動き検出装置および動き検出方法に関する。
【０００２】
【従来の技術】
動画像圧縮を効率よく行うための主要技術の１つとして、画像の動きを示す動きベクトルを求める動き検出がある。この動きベクトルを求める手法はいくつか提案されているが、主な手法の１つとしてブロックマッチングアルゴリズムと呼ばれる手法がある。
このブロックマッチングアルゴリズムについて図５を参照して説明する。
このブロックマッチングアルゴリズムにおいては、動き検出の対象となる画像（以後、カレントフレームと言う）を、たとえば１６画素×１６ラインと言うようなブロック（以後、カレントブロックと言う）に分割してそのカレントブロックごとに処理を行って動きベクトルを求める。
【０００３】
すなわち、各カレントブロックに対して、与えられた候補ベクトルに基づいて参照フレーム内に対応するブロック（以後、リファレンスブロックと言う）を決定し、そのカレントブロックとリファレンスブロックの対応する画素同士の差分を求め、その差分をブロックで積算する。この時、差分は絶対値にして積算する。
そして、リファレンスフレームの探索範囲に応じて与えられる全ての候補ベクトルについてこの積算値を求め、積算値が最小になる候補ベクトルを動きベクトルとして抽出する。
【０００４】
このブロックマッチングアルゴリズムを式に示すと式２のようになる。
【数２】
0003747534.tif 000002
式２において、curr(x,y) はカレントブロックの画素であり、 ref（ｘ＋ｖx ，ｙ＋ｖy ) はカレントブロックの画素curr(x,y) に対応するリファレンスブロックの画素であり、元のリファレンスブロックの画素ref(x,y)および動きベクトル（ｖx ，ｖy ）に基づいて決定されるものである。
すなわちこのような評価関数を用いて、様々なベクトルに対して式２の評価値ＭＥを算出し、それが最小になるものを動きベクトルにするのである。
【０００５】
このブロックマッチングアルゴリズムに基づく実際の処理方法について図６および図７を参照して説明する。
図６は、このブロックマッチングアルゴリズムを、通常の計算機装置などで行う場合のフローチャートである。
図６に示すように、まず、カレントフレームを分割して得られる複数のブロックの中から最初のブロックをカレントブロックとして設定し（ステップＳ５１）、以下、そのカレントブロックに対する動きベクトル検出の処理に入る。
【０００６】
まず、最小の評価値を記憶するための変数ｍｉｎに、たとえばその変数が取り得る最大値などの予め定めた十分大きな値を初期値としてセットしておき（ステップＳ５２）、図５に示すように予め定められているカレントブロックの探索範囲に基づいて決定されるｍ個の候補ベクトル（ｖxi，ｖyi）（ｉ＝１〜ｍ）の中の、最初の候補ベクトル（ｖx1，ｖy1）を、評価値を求める対象の候補ベクトルとして設定する（ステップＳ５３）。
そのように設定されたカレントブロックおよび候補ベクトルに対する評価値算出の処理においては、まず、累積値を記憶する変数ｓｕｍの内容をリセットした後（ステップＳ５４）、カレントブロックの最初の画素（図５の例いおいては左上の画素）を、処理対象の画素curr(x,y) としてセットする（ステップＳ５５）。
【０００７】
そして、そのカレントブロックの画素curr(x,y) と、そのcurr(x,y) に対して候補ベクトル（ｖx1，ｖy1）分だけ動いた位置のリファレンスブロック上の画素 ref（ｘ＋ｖxi，ｙ＋ｖyi) との差を求め、その差を変数ｓｕｍに既に記憶されている値に対して加算し、再び変数ｓｕｍに格納する（ステップＳ５６）。
以降、処理対象の画素がカレントブロックの最後の画素（図５の例においては右下の画素）か否かを調べながら（ステップＳ５８）、最後の画素でなければ処理対象の画素として次の画素をセットし（ステップＳ５９）、ステップＳ５６の処理を繰り返し行う。
【０００８】
ステップＳ５８において、処理対象の画素がカレントブロックの最後の画素だった場合には、次に変数ｓｕｍと変数ｍｉｎの値を比較し（ステップＳ６０）、変数ｓｕｍに記憶されている今回処理対象だった候補ベクトルに対する評価値が、変数ｍｉｎに記憶されているそれまでに処理した各候補ベクトルにおける最小評価値以下か否か、すなわちｓｕｍ≦ｍｉｎか否かをチェックする。
そして、ｓｕｍ≦ｍｉｎだった場合には、今回処理した候補ベクトルが求める動きベクトルである可能性があるので、これを記憶する。すなわち、その評価値ｓｕｍを新たな最小評価値として変数ｍｉｎにセットし、その候補ベクトルのｘ成分およびｙ成分を各々変数ｍｉｎｖｘおよび変数ｍｉｎｖｙに格納する。
なお、ステップＳ６０において、ｓｕｍ＞ｍｉｎだった場合には、今回処理した候補ベクトルは求める動きベクトルである可能性は無いので、その評価値を求めた結果等は無視して次のステップＳ６２に移る。
【０００９】
このような得られた評価値に基づく処理が終了したら、その処理を行うために用いた候補ベクトルが、前述したｍ個の候補ベクトルの中の最後の候補ベクトルか否かを調べ（ステップＳ６２）、最後の候補ベクトルでなければ評価対象の候補ベクトルとして次のベクトルを設定し（ステップＳ６３）、再びステップＳ５４〜ステップＳ６１の処理を繰り返す。
ステップＳ６２において、その候補ベクトルが最後の候補ベクトルだった場合には、その時点で変数ｍｉｎｖｘおよび変数ｍｉｎｖｙに記憶されている候補ベクトルが、そのカレントブロックに対して検出された動きベクトルということになり、そのカレントブロックに対する処理は終了する。
【００１０】
そして、そのカレントブロックが、カレントフレーム内の最後のブロックか否かを調べ（ステップＳ６４）、最後のブロックでなければ動き検出対象のカレントブロックとして次のブロックを設定し（ステップＳ６５）、再びステップＳ５２〜ステップＳ６３の処理を繰り返す。
ステップＳ６４において、カレントブロックがカレントフレーム内の最後のブロックだった場合には、そのカレントフレームに対する一連の処理を終了する（ステップＳ６６）。
【００１１】
前述したブロックマッチングアルゴリズムは、このような基本的な処理により実行することができるが、このアルゴリズムはネストしたループ（入れ子状態になったループ）が多数あるため、計算処理量が多く、時間がかるという問題があり、より高速に動き検出を行うことができるアルゴリズムが求められている。
そこで、図６に示した方法を改善したより高速な処理方法について図７を参照して説明する。
図７は、図６に示した動き検出の処理をより高速に行うことのできるアルゴリズムを示すフローチャートである。なお、図７に示す処理において、図６の処理と全く同じ処理を行う工程に対しては同じステップ番号を付しておりその説明を原則として省略する。
【００１２】
図６においては、ステップＳ５６，Ｓ５８，Ｓ５９において差分の累算値を求めているが、必要なのは、累算値の中で最小になるもののみである。したがって、図７の処理手順においては、最小値になる見込みがなければ累算のループから抜けることによって、処理を実質的に中断し、高速化を図るようにした。
したがって、図７の処理において、ステップＳ５１〜ステップＳ５６までの処理は前述した図６の処理と同じであり、ステップＳ５６の直後のステップＳ５７において、変数ｓｕｍと変数ｍｉｎの値を比較している。すなわち、ステップＳ５６において各画素ごとに順に累算値を求めているその途中において、変数ｓｕｍに記憶されている今回処理対象の候補ベクトルに対する現時点での評価値が、変数ｍｉｎに記憶されているそれまでに処理した各候補ベクトルにおける最小評価値以下か否か、すなわちｓｕｍ≦ｍｉｎか否かをチェックする。
【００１３】
そして、ｓｕｍ≦ｍｉｎだった場合には、今回処理している候補ベクトルが求める動きベクトルである可能性があるので、ステップＳ５８に移り、以後の画素について引き続き累算を求める処理を継続する。また、ｓｕｍ＞ｍｉｎだった場合には、現在処理している候補ベクトルについては、既に求める動きベクトルである可能性は無いので、評価値を求める処理を中断して、ステップＳ６２以降の次の候補ベクトルに係わる処理に移る。
【００１４】
このようなチェックをしながら評価値の算出を行っていきステップＳ５８においてブロックの最後の画素まで累算が行えたと判断された場合、既にステップＳ５７で判定されているようにその処理対象の候補ベクトルが求める動きベクトルである可能性があるので、直ちにステップ６１においてこれらの値を記憶する。すなわち、その評価値ｓｕｍを新たな最小評価値として変数ｍｉｎにセットし、その候補ベクトルのｘ成分およびｙ成分を各々変数ｍｉｎｖｘおよび変数ｍｉｎｖｙに格納する。
以下、図６に示した処理と同じようにステップＳ６２〜ステップＳ６６の処理を行う。
【００１５】
【発明が解決しようとする課題】
このような図７に示したような処理方法を用いることによりブロックマッチングアルゴリズムはある程度高速に処理できるようになったものの、より高速に処理したいという要望がある。
【００１６】
したがって、本発明の目的は、より高速に動き検出を行うことができる動き検出装置を提供することにある。
また本発明の他の目的は、より高速に動き検出を行うことができる動き検出方法を提供することにある。
【００１７】
【課題を解決するための手段】
前記課題を解決するために、本発明の動き検出装置は、動き検出対象の画像を分割して得られる第１の画像ブロックに対して、参照画像を参照して動きベクトルを検出する動き検出装置であって、複数の候補ベクトルから１つの候補ベクトルを選択する候補ベクトル選択手段と、前記第１の画像ブロックおよび前記候補ベクトル選択手段により選択された候補ベクトルに基づいて、前記参照画像上において第２の画像ブロックを抽出する参照ブロック抽出手段と、前記第１の画像ブロックの画素値の総和と、前記第２の画像ブロックの画素値の総和との差を検出する総和差検出手段と、前記総和差検出手段により検出された総和の差が、設定された最小評価値よりも小さい場合に、前記第１の画像ブロックと前記第２の画像ブロックの対応する画素同士の画素値の差分の絶対値の総和を、前記候補ベクトル選択手段により選択された候補ベクトルに対する評価値として検出する評価値検出手段と、前記評価値検出手段により検出された評価値が、既に検出された評価値のなかで最小であった場合に、前記候補ベクトル選択手段により選択された候補ベクトルを記憶し、当該評価値を前記最小評価値として設定する記憶手段と、前記記憶手段に記憶されている前記候補ベクトルを、当該第１の画像ブロックに対する動きベクトルとして出力する出力手段とを有する。
【００１８】
また、本発明の動き検出方法は、動き検出対象の画像を分割して得られる第１の画像ブロックに対して、参照画像を参照して動きベクトルを検出する動き検出方法であって、複数の候補ベクトルから１つの候補ベクトルを選択する第１の工程と、前記第１の画像ブロックおよび前記第１の工程で選択された候補ベクトルに基づいて、前記参照画像上において第２の画像ブロックを抽出する第２の工程と、前記第１の画像ブロックの画素値の総和と、前記第２の画像ブロックの画素値の総和との差を検出する第３の工程と、当該第３の工程で検出された総和の差が設定された最小評価値よりも小さい場合に、前記第１の画像ブロックと前記第２の画像ブロックの対応する画素同士の画素値の差分の絶対値の総和を、前記第１の工程で選択された候補ベクトルに対する評価値として検出する第４の工程と、当該第４の工程で検出された評価値が、前記候補ベクトル選択手段において既に選択された候補ベクトルに対して既に検出された評価値のなかで最小であった場合に、前記第１の工程で選択された候補ベクトルを記憶手段に記憶し、当該評価値を前記最小評価値として設定する第５の工程と、前記複数の候補ベクトル全てが前記第１の工程で選択された後に、前記記憶手段に記憶されている前記候補ベクトルを、当該第１の画像ブロックに対する動きベクトルとして出力する第６の工程とを有する。
【００２０】
【発明の実施の形態】
本発明の実施の形態を図１〜図４を参照して説明する。
本実施の形態の動き検出装置および動き検出方法は、カレントブロックおよびリファレンスブロックの総和を用いることにより、その候補ベクトルの評価値の範囲を検出し、処理の高速化に用いるようにしたものである。
すなわち、前述した式２に示したような評価関数は式３に示すように順に変形していくと、最終的に式４に示すような形式にすることができる。
【数３】
0003747534.tif 000003
【００２１】
そしてこの式４から、各候補ベクトルごとに求める式２に示したような評価値ＭＥは、カレントブロックおよびリファレンスブロックのそれぞれの総和の差の絶対値（以下、ブロック総和差分と言う。）より大きい、ということが分かる。換言すれば、ブロック総和差分が既に他の候補ベクトルに対する評価値よりも大きい候補ベクトルは、その候補ベクトルに対する評価値は当然その評価値よりも大きくなり、全ての候補ベクトルの中で評価値が最小となるベクトル、すなわち求める動きベクトルにはなり得ないということになる。
したがって、本実施の形態の動き検出装置においては、そのような候補ベクトルに対する処理は直ちに終了するようにして、高速に所望のベクトルを検出できるようにした。
【００２２】
そのような動き検出処理を行う動き検出装置の構成を図１に示す。
図１に示すように、この動き検出装置は通常の計算機装置などにより構成される。
すなわち、動き検出装置１は、中央処理装置（ＣＰＵ）２，ＲＯＭ３，ＲＡＭ４を有する。
ＲＯＭ３は、処理プログラムなどを記憶している。
ＲＡＭ４は、カレントフレーム、リファレンスフレームなどの画像データや、候補ベクトル、評価値など、この動き検出方法に係わる種々のデータを記憶する。
そしてＣＰＵ１は、ＲＯＭ３に格納されている処理プログラムにしたがって、ＲＡＭ２に記憶されているデータを処理し、実際に動き検出の処理を行う。
【００２３】
このような動き検出装置により実際に行われる動き検出処理について、図２〜図４のフローチャートを参照して説明する。
図２は、その動き検出処理を説明するためのフローチャートである。
この動き検出処理においては、処理を開始したら（ステップＳ１０）、まず冒頭において、処理対象のカレントフレームおよびリファレンスフレームの各フレームについて、得られる画像ブロック各々に対して、その画素値の総和を求める処理を行う（ステップＳ１１，Ｓ１２）。
【００２４】
このステップＳ１１におけるカレントフレームの各ブロック総和を求める処理について、図３を参照して詳細に説明する。
まず、入力された処理対象のカレントフレームを所定の画素構成の領域に分割したら（本実施の形態においては１６画素×１６ラインのブロックに分割する）、その最初のブロックをカレントブロックと設定し（ステップＳ３１）、総和を記憶する変数ｓｕｍの内容を０にリセットしておく（ステップＳ３２）。そして、そのカレントブロックの最初の画素（本実施の形態では左上の画素）を加算対象の画素としてセットし（ステップＳ３３）、その画素値を変数ｓｕｍに既に格納されている値と加算した後、その結果を再び変数ｓｕｍに格納する（ステップＳ３４）。
【００２５】
次に、カレントブロック内の全ての画素を加算したか否かをチェックし（ステップＳ３５）、まだ全ての画素の加算を行ってなければ次の画素を加算対象の画素として設定し（ステップＳ３６）、再びステップＳ３４において、その画素値の累算を行う。
このような処理を繰り返し、ステップＳ３５においてそのカレントブロックの全ての画素の累算が終了したことが検出されたら、その時に変数ｓｕｍに記憶されている値が、そのカレントブロックの画素値の総和なので、そのカレントブロックに対応付けて記憶する（ステップＳ３７）。
【００２６】
そして、カレントフレームを分割して形成された全てのブロックに対して総和を求める処理が終了したか否かを検出し（ステップＳ３８）、未だ全てのブロックに対して処理が終了していなければ、次のブロックをカレントブロックとして設定し（ステップＳ３９）、再びステップＳ３２〜ステップＳ３７の処理を繰り返す。
ステップＳ３８において、全てのブロックに対して総和を求める処理が終了したと判定された場合には、このカレントフレームの各ブロック総和を求める処理を終了し（ステップＳ４０）、メインルーチンに戻る。
【００２７】
次に、ステップＳ１２におけるリファレンスフレームの各ブロック総和を求める処理について、図４を参照して詳細に説明する。
ここで、カレントフレームの各カレントブロック各々に対してたとえば図５に示したような動きベクトル探索範囲を設定した場合には、リファレンスフレームから得られるカレントブロックと同じ画素構成（本実施の形態においては１６画素×１６ライン）の全ての画像ブロックが、カレントブロックおよび候補ベクトルの組み合わせに基づいて決定されるリファレンスブロックとなる。
したがって、リファレンスフレームについては、これらリファレンスブロックとなる可能性のある全てのブロックに対して、ブロック総和を求めておく。
【００２８】
具体的には、リファレンスフレームから抽出される１６画素×１６ラインの画像ブロック全て、すなわち相互にＸ方向およびＹ方向に１画素ずつしかずれていないような画像ブロックの各々全てについて、ブロック総和を求める。
このことは、リファレンスフレームの各ブロックに対してブロック総和を求める処理は、カレントフレームの各カレントブロックに対してブロック総和を求める処理に比べて処理量が非常に多くなることを意味している。しかし、リファレンフレーム内の画像ブロックは、通常は種々のカレントブロックと候補ベクトルの組み合わせにおいて各々多数回参照されるので、予め全てのブロックに対してブロック総和を求めておくことがやはり有効なのである。
【００２９】
したがって、まず入力されたリファレンスフレームから最初に得られる１６画素×１６ラインのブロックをリファレンスブロックと設定し（ステップＳ４１）、総和を記憶する変数ｓｕｍの内容を０にリセットしておく（ステップＳ４２）。そして、そのリファレンスブロックの最初の画素（本実施の形態では左上の画素）を加算対象の画素としてセットし（ステップＳ４３）、その画素値を変数ｓｕｍに既に格納されている値と加算した後、その結果を再び変数ｓｕｍに格納する（ステップＳ４４）。
【００３０】
次に、リファレンスブロック内の全ての画素を加算したか否かをチェックし（ステップＳ４５）、まだ全ての画素の加算を行ってなければ次の画素を加算対象の画素として設定し（ステップＳ４６）、再びステップＳ４４において、その画素値の累算を行う。
このような処理を繰り返し、ステップＳ４５においてそのリファレンスブロックの全ての画素の累算が終了したことが検出されたら、その時に変数ｓｕｍに記憶されている値が、そのリファレンスブロックの画素値の総和なので、そのリファレンスブロックに対応付けて記憶する（ステップＳ４７）。
【００３１】
そして、リファレンスフレームを分割して形成された全てのブロックに対して総和を求める処理が終了したか否かを検出し（ステップＳ４８）、未だ全てのブロックに対して処理が終了していなければ、次のブロックをリファレンスブロックとして設定し（ステップＳ４９）、再びステップＳ４２〜ステップＳ４７の処理を繰り返す。
ステップＳ４８において、全てのブロックに対して総和を求める処理が終了したと判定された場合には、このリファレンスフレームの各ブロック総和を求める処理を終了し（ステップＳ５０）、メインルーチンに戻る。
【００３２】
以下、再び図２のメインルーチンの処理について説明する。
カレントフレームおよびリファレンスフレームの全画像ブロックのブロック総和の算出が終了したら、カレントフレームを分割して得られる複数のブロックの中から最初のブロックをカレントブロックとして設定し（ステップＳ１３）、以下、そのカレントブロックに対する動きベクトル検出の処理に入る。
まず初期設定として、最小の評価値を記憶するための変数ｍｉｎに、たとえばその変数が取り得る最大値などの予め定めた十分大きな値を初期値としてセットする（ステップＳ１４）。
次に、予め設定された複数の候補ベクトル（ｖxi，ｖyi）（ｉ＝１〜ｍ）の中の、最初の候補ベクトル（ｖx1，ｖy1）を、評価値を求める対象の候補ベクトルとして設定する（ステップＳ１５）。
【００３３】
そして、その動き検出対象のカレントブロック、および、ステップＳ１５で設定された候補ベクトルに基づいてリファレンスブロックを決定し、ステップＳ１１およびステップＳ１２で既に求められているそのカレントブロックおよびリファレンスブロックに対するブロック総和の値を読み出し、その差分を求め変数ｄｉｆｆに格納する（ステップＳ１６）。次に、この差分ｄｉｆｆがそれまでにそのカレントブロックに対して既に検出されている候補ベクトルの評価値の最小値ｍｉｎよりも大きいか否かをチェックする（ステップＳ１７）。ブロック総和の差分ｄｉｆｆの方が、既に検出されている最小評価値ｍｉｎよりも大きい場合には、仮にこの候補ベクトルに対して評価値を求めたとしても式４に示したように現在の最小評価値ｍｉｎよりも大きくなることは明らかなので、この候補ベクトルに対する処理は中止し、ステップＳ２５以降の処理に移る。
ステップＳ１７において、ブロック総和の差分ｄｉｆｆが、既に検出されている最小評価値ｍｉｎ以下の場合には、この候補ベクトルに対して評価値を求める意義があるものとしてステップＳ１８以降のその評価値を求める処理に移る。
【００３４】
評価値を求める処理においては、まず、まず、累積値を記憶する変数ｓｕｍの内容をリセットした後（ステップＳ１８）、カレントブロックの最初の画素（本実施の形態においては左上の画素）を処理対象の画素curr(x,y) としてセットする（ステップＳ１９）。
そして、そのカレントブロックの画素curr(x,y) と、そのcurr(x,y) に対して候補ベクトル（ｖx ，ｖy ）分だけ動いた位置のリファレンスブロック上の画素 ref（ｘ＋ｖx ，ｙ＋ｖy ) との差を求め、その差を変数ｓｕｍに既に記憶されている値に対して加算し、再び変数ｓｕｍに格納する（ステップＳ２０）。
そしてその変数ｓｕｍと変数ｍｉｎの値を比較し、変数ｓｕｍに記憶されている今回処理対象の候補ベクトルに対する現時点での評価値が、変数ｍｉｎに記憶されているそれまでに処理した各候補ベクトルにおける最小評価値以下か否か、すなわちｓｕｍ≧ｍｉｎか否かをチェックする（ステップＳ２１）。
【００３５】
ステップＳ２１においてｓｕｍ≧ｍｉｎだった場合には、今回処理している候補ベクトルが求める動きベクトルである可能性があるので、ステップＳ２２に移り、以後の画素について引き続き累算を求める処理を継続する。すなわち、処理対象の画素がカレントブロックの最後の画素（本実施の形態においては右下の画素）か否かを調べながら（ステップＳ２２）、最後の画素でなければ処理対象の画素として次の画素をセットし（ステップＳ２３）、ステップＳ２０およびステップＳ２１の処理を繰り返し行う。
また、ステップＳ２１においてｓｕｍ＜ｍｉｎだった場合には、現在処理している候補ベクトルについては、既に求める動きベクトルである可能性は無いので、評価値を求める処理を中断して、ステップＳ２５以降の次の候補ベクトルに係わる処理に移る。
【００３６】
ステップＳ２１に示したようなチェックを行いながら評価値の算出を行っていきステップＳ２２においてブロックの最後の画素まで累算が行えたと判断された場合には、既にステップＳ２１で判定されているようにその候補ベクトルに対する評価値はそれまでに求められている評価値以下であることになり、求める動きベクトルである可能性があるので、ステップ２４においてこれらの値を記憶する。すなわち、その評価値ｓｕｍを新たな最小評価値として変数ｍｉｎにセットし、その候補ベクトルのｘ成分およびｙ成分を各々変数ｍｉｎｖｘおよび変数ｍｉｎｖｙに格納する。
【００３７】
ステップＳ２４におけるこのような得られた評価値に基づく処理が終了した場合、および、ステップＳ１７およびステップＳ２１においてその候補ベクトルに対する処理が途中で中断された場合のいずれの場合においても、ステップＳ２５においてその候補ベクトルが前述した複数の候補ベクトルの中の最後の候補ベクトルか否かを調べ（ステップＳ２５）、最後の候補ベクトルでなければ評価対象の候補ベクトルとして次のベクトルを設定し（ステップＳ２６）、再びステップＳ１６〜ステップＳ２４の処理を繰り返す。
ステップＳ２５において、その候補ベクトルが最後の候補ベクトルだった場合には、その時点で変数ｍｉｎｖｘおよび変数ｍｉｎｖｙに記憶されている候補ベクトルが、そのカレントブロックに対して検出された動きベクトルということになり、そのカレントブロックに対する処理は終了する。
【００３８】
そして、そのカレントブロックが、カレントフレーム内の最後のブロックか否かを調べ（ステップＳ２７）、最後のブロックでなければ動き検出対象のカレントブロックとして次のブロックを設定し（ステップＳ２８）、再びステップＳ１４〜ステップＳ２６の処理を繰り返す。
ステップＳ２７において、カレントブロックがカレントフレーム内の最後のブロックだった場合には、そのカレントフレームに対する一連の処理を終了する（ステップＳ２９）。
【００３９】
このように、本実施の形態の動き検出装置および方法においては、カレントブロックとリファレンスブロックの間の対応する画素同士の演算により候補ベクトルに対する評価値を求める前に、まずそのカレントブロックおよびリファレンスブロックの単純なブロック内画素値総和に基づいて、求める評価値が既に検出されている評価値より小さくなるか否かを調べており、最小評価値となる可能性のある場合のみ実際に評価値を求めるようにしている。
したがって、入れ子状態になって処理量の多い画素同士の演算に入る前にある程度の判断をして無意味な処理を排除しているので、従来の方法に比べて処理量が大幅に削減でき、１つのカレントブロックに対する動きベクトルの検出処理を非常に高速に行うことができる。
【００４０】
さらに、本実施の形態においては、与えられたカレントフレームおよびリファレンスフレームに対して、まず最初に抽出され得る画像ブロックのブロック内画素値総和を一括して求めている。したがって、後の各カレントブロックごとの処理の時にはそのブロック内画素値総和を参照するのみでよく、ほとんど処理時間が必要なくなり、効率的に動き検出処理が行える。また、リファレンスブロックにおいては、複数のカレントブロックおよび複数の候補ベクトルに対して何度も同じリファレンスブロックが参照されることがあるが、そのような場合にもそのリファレンスブロックに対しては１度だけブロック内画素値総和を求めておけばよいので、フレーム単位の動き検出処理は、より一層高速に行える。
【００４１】
なお、本発明は、本実施の形態に限られるものではなく、任意好適な改変が可能である。
たとえば、本実施の形態においては、カレントフレームおよびリファレンスフレームを各々独立したものとして説明し、各々ブロック総和を毎回求めるようにしているが、たとえば入力される画像信号がＭＥＰＧ方式(Moving Picture coding Experts Groupによる高品質動画符号化方式) の信号であり、前方予測や後方予測がある場合等には、ある処理におけるカレントフレームが他のカレントフレームのリファレンスフレームとして参照される場合がある。このような場合には、一度算出したブロック総和のデータを保持しておくことにより、ブロック総和を求める回数を減らすことができ、より高速に処理することができる。このような構成にしても、本発明の範囲内であることは明らかである。
【００４２】
また、本実施の形態においては、評価値を求める際にカレントブロックとリファレンスブロックの対応する画素同士の１度の演算が終了するごとに、その累算値を最小の評価値と比較するようにしていた。しかし、たとえば１０画素ごとに比較を行うとか、１ライン分ごとに比較を行うとかのように、任意の間隔で行ってもよい。比較を適切なタイミングで行うことにより、より高速化を図ることができる。
また、本実施の形態においては、リファレンスフレームにおいては、１画素あるいは１ラインずつずれた全ての画像ブロックに対してブロック総和を求めるようにした。しかし、動きベクトルの探索範囲が狭く限られている場合や、予測できる場合など、全ての画像ブロックがリファレンスブロックとして参照される可能性の無い場合には、必要な画像ブロックのみブロック総和を求めればよい。
【００４３】
【発明の効果】
本発明の動き検出装置およびその方法によれば、高速に動き検出を行うことができる。
【図面の簡単な説明】
【図１】本発明の一実施の形態の動き検出装置の構成を示すブロック図である。
【図２】図１に示した動き検出装置で行われる動き検出処理を説明するためのフローチャートである。
【図３】図２に示したフローチャート中の、カレントフレームの各ブロックの総和を求める処理をより詳細に説明するためのフローチャートである。
【図４】図２に示したフローチャート中の、リファレンスフレームの各ブロックの総和を求める処理をより詳細に説明するためのフローチャートである。
【図５】ブロックマッチングアルゴリズムを説明するための図である。
【図６】従来の動き検出処理を説明するためのフローチャートである。
【図７】図６に示した処理を改善した動き検出処理を説明するためのフローチャートである。
【符号の説明】
１…動き検出装置、２…ＣＰＵ、３…ＲＯＭ、４…ＲＡＭ
【図１】
0003747534.tif 000005
【図２】
0003747534.tif 000006
【図３】
0003747534.tif 000007
【図４】
0003747534.tif 000008
【図５】
0003747534.tif 000009
【図６】
0003747534.tif 000010
【図７】
0003747534.tif 000011