<実施の形態1>
<動きベクトル検出装置の構成>
図1は、本発明の実施の形態1に係る動きベクトル検出装置1の要部構成を示すブロック図である。
動きベクトル検出装置1は、例えば動画像において画面内の被写体の動きを表す画像動きベクトルを検出するものであり、時系列的に前後の関係となる前フレームと後フレームとに関するフレーム画像間の動きベクトルが検出される。この動きベクトル検出装置1で検出された動きベクトルはビデオカメラの手振れ補正などに利用される。なお、動きベクトル検出装置1に入力されるフレーム画像は、図2に示すように水平方向の画素走査および垂直方向のライン走査を行うことによって読み出されるものとする。
動きベクトル検出装置1は、入力端子11と、水平方向動きベクトル検出部2および垂直方向動きベクトル検出部4と、2つの出力端子12、13とを備えている。この水平方向動きベクトル検出部2および垂直方向動きベクトル検出部4については、その機能が例えばマイクロプロセッサによってソフトウェア的に実現されても良く、また大半をハードウェア(一部をソフトウェア)で実現するようにしても良い。もちろん、全機能をハードウェアで実現しても良いことは言うまでもない。
入力端子11には、例えばビデオカメラ内の撮像素子で取得された画像(動画像)データやビデオ信号などの画像データが入力される。入力端子11に入力された画像データは、水平方向動きベクトル検出部2において水平方向の動きベクトルが検出され、その検出された水平方向動きベクトルが出力端子12から出力される。
一方、垂直方向動きベクトル検出部4では、入力端子11に入力された画像データについて垂直方向の動きベクトルが検出される。この垂直方向動きベクトル検出部4で検出された垂直方向動きベクトルは、出力端子13から出力される。
以下では、水平方向動きベクトル検出部2と垂直方向動きベクトル検出部4との構成を順に説明する。
図3は、水平方向動きベクトル検出部2の要部構成を示すブロック図である。
水平方向動きベクトル検出部2は、入力端子20と、垂直方向画像分割部21と、垂直方向エッジ抽出フィルタリング部22と、垂直方向ブロック射影部23と、第1の垂直方向ブロック射影データ最大値保存部24と、ビット数削減部25と、第1の垂直方向ブロック射影ラインメモリ26とを備えている。また、水平方向動きベクトル検出部2は、第2の垂直方向ブロック射影ラインメモリ27と、第2の垂直方向ブロック射影データ最大値保存部28と、第1の閾値交差点探索部29と、垂直方向ブロック射影データ読み出し部30と、垂直方向ブロック水平方向動きベクトル算出部31と、水平方向動きベクトル決定部32と、出力端子33とを備えている。以上の水平方向動きベクトル検出部2の各部位について、その機能を簡単に説明する(具体的な動作は後で詳述する)。
垂直方向画像分割部21は、入力端子20に入力されたフレーム画像を垂直方向に分割し、垂直方向に分割したブロック(以下では「垂直方向ブロック」とも称する)を出力する。
垂直方向エッジ抽出フィルタリング部22は、垂直方向画像分割部21で分割されたブロックごとにエッジ抽出を行うためのフィルタリング処理を行う。
垂直方向ブロック射影部23は、垂直方向エッジ抽出フィルタリング部22から出力されるエッジ強調済みの垂直方向ブロックについて垂直方向に射影をとり、垂直方向ブロックごとに射影データを出力する。
第1の垂直方向ブロック射影データ最大値保存部24は、垂直方向ブロック射影部23から出力された現フレームの垂直方向ブロックの射影データにおける最大値(以下では「現フレームの垂直方向ブロック射影データ最大値」または「第1の垂直方向ブロック射影データ最大値」とも言う)を保存する。また、第1の垂直方向ブロック射影データ最大値保存部24は、第1の垂直方向ブロック射影データ最大値に基づき、後述する第2の閾値を算出する。
ビット数削減部25は、第1の垂直方向ブロック射影データ最大値保存部24に保存された第1の垂直方向ブロック射影データ最大値に基づき、垂直方向ブロック射影部23から出力された垂直方向ブロックの射影データのビット数を削減する。ビット数を削減された垂直方向ブロックの射影データを「第1の垂直方向ブロック射影データ」と称する。
第1の垂直方向ブロック射影ラインメモリ26は、ビット数削減部25でビット数が削減された第1の垂直方向ブロック射影データを保存する。
第2の垂直方向ブロック射影ラインメモリ27は、第1の垂直方向ブロック射影ラインメモリ26から送られた垂直方向ブロック射影データを、前フレームの垂直方向ブロックの射影データ(以下では「第2の垂直方向ブロック射影データ」とも言う)として保存する。
第2の垂直方向ブロック射影データ最大値保存部28は、第1の垂直方向ブロック射影データ最大値保存部24から出力された第1の垂直方向ブロック射影データ最大値を、前フレームに関する「第2の垂直方向ブロック射影データ最大値」(「前フレームの垂直方向ブロック射影データ最大値」とも言う)として保存する。また、第2の垂直方向ブロック射影データ最大値保存部28は、第2の垂直方向ブロック射影データ最大値に基づき、後述する第1の閾値を算出する。
第1の閾値交差点探索部29は、第2の垂直方向ブロック射影ラインメモリ27に保存される前フレームに係る第2の垂直方向ブロック射影データの波形と、第2の垂直方向ブロック射影データ最大値保存部28で算出された第1の閾値とが交差する点を求め、この交差点(以下では「第1の閾値交差点」とも言う)の情報を出力する。
垂直方向ブロック射影データ読み出し部30は、第1の閾値交差点探索部29で求められた第1の閾値交差点を中心に、その前後の所定範囲(動きベクトル検出範囲)内にある第1の垂直方向ブロック射影データを、第1の垂直方向ブロック射影ラインメモリ26から読み出す。
垂直方向ブロック水平方向動きベクトル算出部31は、第1の垂直方向ブロック射影データ最大値保存部24から出力される第2の閾値を用い、垂直方向ブロック射影データ読み出し部30で読み出された第1の垂直方向ブロック射影データそれぞれをn値化(nは2以上の整数)してビット数の削減を行うとともに、n値化された射影データを第1の閾値交差点からの距離ごとに加算する。
水平方向動きベクトル決定部32は、垂直方向ブロック水平方向動きベクトル算出部31からの出力に基づき画像の水平方向動きベクトルを決定する。ここで決定された画像の水平方向動きベクトルは出力端子33から出力される。
図4は、垂直方向ブロック射影部23の要部構成を示すブロック図である。
垂直方向ブロック射影部23は、入力端子231と、1水平ラインずつデータ加算を行う加算器232と、加算器232で加算されたデータを逐次保存するバッファメモリとしての垂直方向射影一時記憶メモリ233と、出力端子234とを備えている。
入力端子231には、垂直方向エッジ抽出フィルタリング部22で垂直方向のエッジが強調された画像が垂直方向ブロックごとに入力される。入力端子231に入力された画像は、垂直方向ブロックごとに加算器232および垂直方向射影一時記憶メモリ233によって垂直方向に射影がとられる。具体的には、加算器232において垂直方向ブロックの1水平ライン分のデータと、垂直方向射影一時メモリ233から読み出された1水平ライン分のデータとが加算され、加算結果が垂直方向射影一時記憶メモリ233に再び戻されて記憶される。このような加算動作が繰り返されることにより垂直方向ブロックにおける全ての水平ラインの加算が終了すると、全水平ラインの加算データ、つまり垂直方向の射影データが出力端子234から出力されることとなる。
図5は、垂直方向ブロック水平方向動きベクトル算出部31の要部構成を示すブロック図である。
垂直方向ブロック水平方向動きベクトル算出部31は、3つの入力端子311〜313と、n値化器314と、n値化器314でn値化された第1の垂直方向ブロック射影データの加算を行う加算器315と、加算器315で加算されたデータを逐次保存するバッファメモリとしての水平方向動きベクトル加算メモリ316と、ピーク検出器317と、出力端子318とを備えている。
入力端子311には、垂直方向ブロック射影データ読み出し部30から出力された第1の垂直方向ブロック射影データが入力され、入力端子312には、第1の垂直方向ブロック射影データ最大値保存部24から出力された第2の閾値が入力される。また、入力端子313には、第1の閾値交差点探索部29から出力された第1の閾値交差点の情報が入力される。
n値化器314は、入力端子311から入力された第1の垂直方向ブロック射影データを、入力端子312から入力される第2の閾値に基づいてn値化(例えば3値化)する。
加算器315は、n値化器314でn値化された第1の垂直方向ブロック射影データと、水平方向動きベクトル加算メモリ316から読み出されたデータとを第1の閾値交差点を中心として加算し、加算結果を水平方向動きベクトル加算メモリ316に再び記憶させる。このような加算動作が繰り返されることにより垂直方向ブロックに関する全ての第1の閾値交差点についての加算が終了すると、垂直方向ブロックに関する加算データがピーク検出器317に出力される。
ピーク検出器317は、加算器315から出力された加算データにおけるピーク位置(後述する水平方向動きベクトル)とピーク値とを検出する。このピーク検出器317で検出されたピーク位置は、出力端子318を介して水平方向動きベクトル決定部32に入力される。
次に、垂直方向動きベクトル検出部4の構成を説明する。
図6は、垂直方向動きベクトル検出部4の要部構成を示すブロック図である。
垂直方向動きベクトル検出部4は、入力端子40と、水平方向画像分割部41と、水平方向エッジ抽出フィルタリング部42と、水平方向ブロック射影部43と、第1の水平方向ブロック射影ラインメモリ44と、第1の水平方向ブロック射影データ最大値保存部45とを備えている。また、垂直方向動きベクトル検出部4は、第2の水平方向ブロック射影ラインメモリ46と、第2の水平方向ブロック射影データ最大値保存部47と、第3の閾値交差点探索部48と、水平方向ブロック射影データ読み出し部49と、水平方向ブロック垂直方向動きベクトル算出部50と、垂直方向動きベクトル決定部51と、出力端子52とを備えている。以上の垂直方向動きベクトル検出部4の各部位について、その機能を簡単に説明する(具体的な動作は後で詳述する)。
水平方向画像分割部41は、入力端子40に入力されたフレーム画像を水平方向に分割し、水平方向に分割したブロック(以下では「水平方向ブロック」とも称する)を出力する。
水平方向エッジ抽出フィルタリング部42は、水平方向画像分割部41で分割されたブロックごとにエッジ抽出を行うためのフィルタリング処理を行う。
水平方向ブロック射影部43は、水平方向エッジ抽出フィルタリング部42から出力されるエッジ強調済みの水平方向ブロックについて水平方向に射影をとり、水平方向ブロックごとに射影データを出力する。
第1の水平方向ブロック射影ラインメモリ44は、水平方向ブロック射影部43から出力された水平方向ブロックの射影データを、現フレームの水平方向ブロック射影データ(以下では「第1の水平方向ブロック射影データ」とも言う)として保存する。
第1の水平方向ブロック射影データ最大値保存部45は、水平方向ブロック射影部43から出力された現フレームの水平方向ブロックの射影データの最大値(以下では「現フレームの水平方向ブロック射影データ最大値」または「第1の水平方向ブロック射影データ最大値」とも言う)を保存する。
第2の水平方向ブロック射影ラインメモリ46は、第1の水平方向ブロック射影ラインメモリ44から送られた水平方向ブロック射影データを、前フレームの水平方向ブロックの射影データ(以下では「第2の水平方向ブロック射影データ」とも言う)として保存する。
第2の水平方向ブロック射影データ最大値保存部47は、第1の水平方向ブロック射影データ最大値保存部45から出力された第1の水平方向ブロック射影データ最大値を、前フレームに関する「第2の水平方向ブロック射影データ最大値」(「前フレームの水平方向ブロック射影データ最大値」とも言う)として保存する。また、第2の水平方向ブロック射影データ最大値保存部47は、第2の水平方向ブロック射影データ最大値に基づき、後述する第3の閾値および第4の閾値を算出する。
第3の閾値交差点探索部48は、第2の水平方向ブロック射影ラインメモリ46に保存される前フレームに係る第2の水平方向ブロック射影データと、第2の水平方向ブロック射影データ最大値保存部47で算出された第3の閾値とが交差する点を求め、この交差点(以下では「第3の閾値交差点」とも言う)の情報を出力する。
水平方向ブロック射影データ読み出し部49は、第3の閾値交差点探索部48で求められた第3の閾値交差点を中心に、その前後の所定範囲(動きベクトル検出範囲)内にある第1の水平方向ブロック射影データを、第1の水平方向ブロック射影ラインメモリ44から読み出す。
水平方向ブロック垂直方向動きベクトル算出部50は、第2の水平方向ブロック射影データ最大値保存部47から出力される第4の閾値を用い、水平方向ブロック射影データ読み出し部49で読み出された第1の水平方向ブロック射影データそれぞれをn値化(nは2以上の整数)してビット数の削減を行うとともに、n値化された射影データを第3の閾値交差点からの距離ごとに加算する。
垂直方向動きベクトル決定部51は、水平方向ブロック垂直方向動きベクトル算出部50からの出力に基づき画像の垂直方向動きベクトルを決定する。ここで決定された画像の垂直方向動きベクトルは出力端子52から出力される。
図7は、水平方向ブロック射影部43の要部構成を示すブロック図である。
水平方向ブロック射影部43は、入力端子431と、水平方向ブロックの1水平ラインデータの加算を行う加算器432と、加算器432で加算されたデータを逐次保存するバッファメモリとしての水平方向射影一時記憶メモリ433と、出力端子434とを備えている。
入力端子431には、水平方向エッジ抽出フィルタリング部42で水平方向のエッジが強調された画像が入力される。入力端子431に入力された画像は、水平方向ブロックごとに加算器432および水平方向射影一時記憶メモリ433によって水平方向に射影がとられる。具体的には、水平方向ブロック内の1水平ラインの画素について、入力端子431から入力された画素と、前画素までに加算器432で加算され水平方向射影一時記憶メモリ433に記憶された加算結果を、加算器432で加算し、その加算結果を再び水平方向射影一時記憶メモリ433に戻し記憶する。このような加算動作が繰り返されることにより水平方向ブロックにおける1水平ラインの加算が終了すると、その水平方向ブロックの1水平ラインの全画素の加算データ、つまり水平方向の射影データが出力端子434から出力されることとなる。以下、同様にして、次の水平方向ブロックの水平方向の射影データが処理され、1水平ラインについて全ての水平方向ブロックの処理が終了すると、次の1水平ラインの処理がなされる。
図8は、水平方向ブロック垂直方向動きベクトル算出部50の要部構成を示すブロック図である。
水平方向ブロック垂直方向動きベクトル算出部50は、3つの入力端子501〜503と、n値化器504と、n値化器504でn値化された第1の水平方向ブロック射影データの加算を行う加算器505と、加算器505で加算されたデータを逐次保存するバッファメモリとしての垂直方向動きベクトル加算メモリ506と、ピーク検出器507と、出力端子508とを備えている。
入力端子501には、水平方向ブロック射影データ読み出し部49から出力された第1の水平方向ブロック射影データが入力され、入力端子502には、第2の水平方向ブロック射影データ最大値保存部47から出力された第4の閾値が入力される。また、入力端子503には、第3の閾値交差点探索部48から出力された第3の閾値交差点の情報が入力される。
n値化器504は、入力端子501から入力された第1の水平方向ブロック射影データを、入力端子502から入力される第4の閾値に基づいてn値化(例えば3値化)する。
加算器505は、n値化器504でn値化された第1の水平方向ブロック射影データと、垂直方向動きベクトル加算メモリ506から読み出されたデータとを第3の閾値交差点を中心として加算し、加算結果を垂直方向動きベクトル加算メモリ506に再び記憶させる。このような加算動作が繰り返されることにより水平方向ブロックに関する全ての第3の閾値交差点についての加算が終了すると、水平方向ブロックに関する加算データがピーク検出器507に出力される。
ピーク検出器507は、加算器505から出力された加算データにおけるピーク位置(後述する垂直方向動きベクトル)とピーク値とを検出する。このピーク検出器507で検出されたピーク位置は、出力端子508を介して垂直方向動きベクトル決定部51に入力される。
以上のような構成を有する動きベクトル検出装置1の動作について、以下で説明する。
<動きベクトル検出装置1の動作>
<水平方向動きベクトル検出部2の動作>
まず、動きベクトル検出装置1において画像の水平方向の動きベクトルを検出する水平方向動きベクトル検出部2の動作を説明する。
図2のように水平ラインの画素走査を垂直方向に順に繰り返すことによって読み出されるフレーム画像が、図3に示す水平方向動きベクトル検出部2の入力端子20に入力されると、垂直方向画像分割部21で垂直方向にブロック分割される。すなわち、垂直方向画像分割部21においては、フレーム画像において垂直方向に分割して得られる複数の画像領域(垂直方向ブロック)が設定される。これにより、以降の処理では、垂直方向ブロックごとに処理および管理が行われることとなる。
垂直方向画像分割部21では、例えば図9(a)に示すように640画素×480画素の画像データが、垂直方向に64画素の幅(分割幅)を有した7個の垂直方向ブロックvb0〜vb6に分割される。なお、垂直方向の最下段の画像データvb7は水平方向動きベクトルの検出において利用されないこととなるが、フレーム画像の大部分を占める7つの垂直方向ブロックvb0〜vb6が水平方向動きベクトルの検出に使用されるため、検出精度の面で特に問題はないと考えられる。ここで、図9(a)に示す分割幅および分割数とするのは必須でない。
垂直方向画像分割部21で図9(a)のように7個の垂直方向ブロックvb0〜vb6に分割された画像は、垂直方向エッジ抽出フィルタリング部22において垂直方向に延びるエッジ成分の抽出、換言すれば水平方向に急峻に変化する画像部分を強調するようなフィルタリング処理が施される。
このフィルタリング処理で用いられるフィルタとしては、単純に水平方向に隣接する画素との差分を取る(1,−1)の2タップフィルタや、2次微分に相当する(−1,2,−1)の3タップフィルタなどの使用が可能である。なお、このようなフィルタを使用するのは必須でなく、水平方向に輝度変化が大きくなる画像部分において出力値が上昇するフィルタであれば良い。
垂直方向エッジ抽出フィルタリング部22で各垂直方向ブロック(画像領域)vb0〜vb6ごとに垂直方向のエッジが強調された画像データは、垂直方向ブロック射影部23に入力され、垂直方向ブロック射影部23で垂直方向に射影される。この射影により、垂直方向の(ライン間で)ノイズ成分を低減でき、また垂直方向のエッジ成分をより強調できるため、特徴点に対応する垂直方向エッジを際立たせて動きベクトル検出精度の向上を図れることとなる。垂直方向ブロック射影部23の動作について、図9(b)の概念図を参照しつつ説明する。
垂直方向ブロック射影部23では、図9(a)に示す各垂直方向ブロックvb0〜vb6の入力が完了した時点、つまりエッジ強調された各垂直方向ブロックvb0〜vb6における最終ラインの最終画素が入力された時点で、1水平ライン分のデータ配列Mvを有する垂直方向ブロック射影データvn0〜vn6(図9(b))それぞれの全配列要素が生成される。なお、データ配列Mvは、水平ラインの全画素数(例えば640)の配列要素を有しているが、(1,−1)のような2タップフィルタでは有効要素が水平ラインの全画素数−1(例えば639)、(−1,2,−1)のような3タップフィルタでは有効要素が水平ラインの全画素数−2(例えば638)となる。
具体的には、図4に示すように入力端子231を介して入力された各垂直方向ブロックvb0〜vb6の画像データ(垂直方向のエッジ強調が施された画像データ)が、順次に加算器232に入力される。
加算器232では、まず入力された垂直方向ブロックの先頭の水平ラインが、垂直方向射影一時記憶メモリ233内のデータを読み出すことなく、垂直方向射影一時記憶メモリ233に書き込まれる。次に、加算器232では、垂直方向射影一時記憶メモリ233に記憶されている前ラインまでの加算結果を読み出し、入力端子231から入力される垂直方向ブロックの水平1ラインとの加算を行って、その加算結果を垂直方向射影一時記憶メモリ233に書き戻す。
そして、垂直方向ブロックにおける最終の水平ラインが加算器232に入力されると、垂直方向射影一時記憶メモリ233に保存された前ラインまでの加算結果を読み出し、入力端子231から入力される垂直方向ブロックの最終ラインとの加算を行って、その加算結果、つまり垂直方向ブロックの全ての水平ラインが加算されたデータを垂直方向ブロックの射影データとして、出力端子234から第1の垂直方向ブロック射影データ最大値保存部24とビット数削減部25とに出力する。
なお、加算器232において垂直方向ブロックの全水平ラインが加算された射影データを垂直方向射影一時記憶メモリ233に一旦記憶させ、次の垂直方向ブロックの先頭ラインが入力される際に、垂直方向射影一時記憶メモリ233内の射影データを読み出して出力端子234から出力するようにしても良い。
第1の垂直方向ブロック射影データ最大値保存部24では、垂直方向ブロック射影部23から出力された垂直方向ブロックの射影データに関する最大値を算出し、第1の垂直方向ブロック射影データ最大値(現フレームの垂直方向ブロック射影データ最大値)として保存する。すなわち、第1の垂直方向ブロック射影データ最大値保存部24は、現フレーム(後フレーム)の射影データに関するデータ配列Mv(図9(b))の配列要素において最大値を求め、この最大値を記憶する。
また、第1の垂直方向ブロック射影データ最大値保存部24では、算出された現フレームの垂直方向ブロック射影データ最大値に基づき、第2の閾値を算出する。例えば、現フレームの垂直方向ブロック射影データ最大値をP1maxとすると、第2の閾値α2は次の式(1)で算出される。
α2=P1max×k1・・・・・・・・(1)
ここで、k1は予め定められた係数で、0<k1<1である。
なお、第2の閾値α2の演算は、上式(1)に限るものではなく、現フレームの垂直方向ブロック射影データ最大値P1maxが大きくなれば第2の閾値α2が大きくなるものであれば良く、また変換テーブルを使用しても良い。
ビット数削減部25では、第1の垂直方向ブロック射影データ最大値保存部24から入力された現フレームの垂直方向ブロック射影データ最大値(第1の垂直方向ブロック射影データ最大値)に基づき射影データの有効ビットレンジを決定する。そして、この有効ビットレンジに基づき設定される上位無効ビットおよび下位無効ビットを垂直方向ブロック射影部23から入力された垂直方向ブロック射影データから削減し、有効ビットのみで構成される現フレームの垂直方向ブロック射影データを第1の垂直方向ブロック射影ラインメモリ26に出力する。
第1の垂直方向ブロック射影ラインメモリ26は、ビット数削減部25によってビット数が低減された現フレームの垂直方向ブロック射影データを、第1の垂直方向ブロック射影データとして垂直方向ブロックごとに保存する。すなわち、第1の垂直方向ブロック射影ラインメモリ26には、第1の垂直方向ブロック射影データ最大値保存部24で求められた第1の垂直方向ブロック射影データ最大値に基づきビット数削減部25においてビット数(各配列要素のデータ長)が削減された現フレーム(後フレーム)の射影データが記憶される。
第1の垂直方向ブロック射影ラインメモリ26は、現フレームに関する新たな第1の垂直方向ブロック射影データが入力されるタイミングで、前フレームの垂直方向ブロック射影データを読み出し、第2の垂直方向ブロック射影ラインメモリ27に与える。第2の垂直方向ブロック射影ラインメモリ27は、第1の垂直方向ブロック射影ラインメモリ26から読み出された前フレームの垂直方向ブロック射影データを、第2の垂直方向ブロック射影データとして保存する。
同様に、第1の垂直方向ブロック射影データ最大値保存部24は、現フレームに関する新たな第1の垂直方向ブロック射影データ最大値が更新されるタイミングで、既に保存されている第1の垂直方向ブロック射影データ最大値を読み出し、第2の垂直方向ブロック射影データ最大値保存部28に与える。第2の垂直方向ブロック射影データ最大値保存部28では、第1の垂直方向ブロック射影データ最大値保存部24から読み出された第1の垂直方向ブロック射影データ最大値が、前フレームに関する第2の垂直方向ブロック射影データ最大値(前フレームの垂直方向ブロック射影データ最大値)として保存される。
換言すれば、第1の垂直方向ブロック射影データ最大値保存部24に保存された現フレームの垂直方向ブロック射影データ最大値は、次のフレームでは、第2の垂直方向ブロック射影データ最大値保存部28に前フレームの垂直方向ブロック射影データ最大値として保存されることとなる。
第2の垂直方向ブロック射影データ最大値保存部28は、前フレームに関する第2の垂直方向ブロック射影データ最大値に基づき、第1の閾値(所定の一定値)が設定される。例えば、前フレームの垂直方向ブロック射影データ最大値をP2maxとすると、第1の閾値α1は次の式(2)で算出される。
α1=P2max×k2・・・・・・・・(2)
ここで、k2は予め定められた係数で、0<k2<1である。
なお、第1の閾値α1の演算は、上式(2)に限るものではなく、前フレームの垂直方向ブロック射影データ最大値P2maxが大きくなれば第1の閾値α1が大きくなるものであれば良く、また変換テーブルを使用しても良い。
第1の閾値交差点探索部29では、第2の垂直方向ブロック射影ラインメモリ27から読み出された第2の垂直方向ブロック射影データと、第2の垂直方向ブロック射影データ最大値保存部28から出力された第1の閾値との交差点(第1の閾値交差点)を水平方向に探索する。この第1の閾値交差点探索部29で得られた第1の閾値交差点の情報は、垂直方向ブロック射影データ読み出し部30と垂直方向ブロック水平方向動きベクトル算出部31とに出力される。
垂直方向ブロック射影データ読み出し部30は、第1の閾値交差点探索部29から出力された第1の閾値交差点を中心とした動きベクトル検出範囲に対応した現フレームの(第1の)垂直方向ブロック射影データを第1の垂直方向ブロック射影ラインメモリ26から読み出す。すなわち、第1の閾値交差点をA(i)(ただしi=1,2,・・・pで、pは検出された第1の閾値交差点の総数)とし、動きベクトル検出範囲を第1の閾値交差点を中心とした(−V)から(+V)(ただしVは正の整数)の範囲とすると、第1の垂直方向ブロック射影ラインメモリ26から読み出される射影データは、水平方向において(A(i)−V)から(A(i)+V)までの範囲にある第1の垂直方向ブロック射影データの部分データとなる。
この垂直方向ブロック射影データ読み出し部30によって第1の垂直方向ブロック射影ラインメモリ26から読み出された第1の垂直方向ブロック射影データは、垂直方向ブロック水平方向動きベクトル算出部31に出力される。
垂直方向ブロック射影データ読み出し部30から出力された第1の垂直方向ブロック射影データは、図5に示す垂直方向ブロック水平方向動きベクトル算出部31の入力端子311を介してn値化器314に入力される。このn値化器314では、第1の垂直方向ブロック射影データ最大値保存部24から出力され、入力端子312を介して入力された第2の閾値に基づき、第1の垂直方向ブロック射影データをn値化する。すなわち、n値化器314は、垂直方向ブロック射影データ読み出し部30で抽出された現フレームの射影データに関するデータ配列Mv(図9(b))各配列要素のデータ長を、例えば3値化処理して圧縮する。このn値化器314の処理について、図10を参照しつつ説明する。
図10は、n値化器314におけるn値化処理を説明するための図である。なお、図10では、n=3となる3値化処理の一例を示している。
n値化器314に入力される第1の垂直方向ブロック射影データをD、入力端子312を介して入力される第2の閾値をα2(α2は正の整数)とすると、n値化器314では、D<(−α2)のとき(−1)を出力し、(−α2)≦D≦α2のとき0を出力するとともに、D>α2のとき1を出力することで3値化処理が行われる。すなわち、n値化器314における3値化処理では、現フレーム(後フレーム)の射影データにおけるデータ配列Mvの配列要素の最大値に基づき設定される第2の閾値α2(α2>0)に関して、垂直方向ブロック射影データ読み出し部30で抽出された現フレームの射影データに関する配列要素の値が、(−α2)より小さい場合、(−α2)以上でα2以下の場合、およびα2より大きい場合の3段階による3値化が行われる。
このn値化器314でのn値化処理については、垂直方向ブロック射影データ読み出し部30から出力される現フレームの第1の垂直方向ブロック射影データの部分波形が、第1の閾値交差点に対してどのような位置関係、つまりどのような傾向の波形となっているのかが重要であるため、第1の垂直方向ブロック射影データの波形において山や谷が判別できるだけのビット精度を確保すれば十分である。
一方、n値化器314においてビット数の削減を行わずに、垂直方向ブロック射影データ読み出し部30から出力された第1の垂直方向ブロック射影データの値そのものを採用する場合には、第1の垂直方向ブロック射影データD>α2に対応する大きな振幅の山や、D<(−α2)に対応する大きな振幅の谷に、画像の特徴が表れる小さな振幅の山や谷が埋没してしまう恐れがあり不適切である。さらに、(−α2)≦D≦α2に対応する小さな山や谷は、ノイズの影響を受けやすく数も多いため、これに画像の特徴が表れる適度な振幅の山や谷が埋もれることとなる。
よって、n値化器314では、第1の垂直方向ブロック射影データに対して適切なn値化処理を施すことにより、動きベクトルの検出精度の向上を図っている。
以上で説明した第1の閾値交差点探索部29、垂直方向ブロック射影データ読み出し部30および垂直方向ブロック水平方向動きベクトル算出部31の動作について、図11(a)、図11(b)および図11(c)を参照しつつ具体的に説明する。なお、図11(a)および図11(b)の横軸は、射影データのデータ配列Mv(図9(b))の配列要素の位置を示している。また、図11(a)では、第1の閾値交差点A(1)〜A(8)それぞれを丸印で表している。
第1の閾値交差点探索部29では、図11(a)に示すように前フレームに関する第2の垂直方向ブロック射影データW2の波形において、第2の垂直方向ブロック射影データ最大値保存部28から出力された第1の閾値α1と交差する第1の閾値交差点A(1)〜A(8)が求められる。すなわち、第1の閾値交差点探索部29は、前フレームに対して垂直方向ブロック射影部23で得られた射影データに関して射影データのデータ配列Mv(図9(b))の要素順に配列要素の値をグラフ化した波形W2と、配列要素の値が第1の閾値(所定の一定値)α1となる直線とが交差する各第1の閾値交差点の配列要素の位置を特定する。
次に、垂直方向ブロック射影データ読み出し部30では、図11(a)に示す各第1の閾値交差点A(1)〜A(8)を中心とした所定の動きベクトル検出範囲について第1の垂直方向ブロック射影ラインメモリ26から現フレームの垂直方向ブロック射影データが読み出される。すなわち、垂直方向ブロック射影データ読み出し部30は、各第1の閾値交差点における射影データ(データ配列)の配列要素の位置を中心とした所定範囲のデータ配列を、垂直方向ブロック射影部23から出力されビット数削減部25によりビット数が削減された現フレーム(後フレーム)の射影データから抽出する。例えば第1の閾値交差点A(7)に関しては、図11(b)に示すように第1の閾値交差点A(7)を中心に(A(7)−V)から(A(7)+V)までの範囲(矩形の破線内の波形部分)に対応する第1の垂直方向ブロック射影データW1が読み出される。
そして、垂直方向ブロック射影データ読み出し部30によって読み出された第1の垂直方向ブロック射影データは、第1の垂直方向ブロック射影データ最大値保存部24から出力された第2の閾値α2を用いて、垂直方向ブロック水平方向動きベクトル算出部31のn値器314でn値化処理される。例えば第1の閾値交差点A(7)に関しては、図11(b)に示す第2の閾値α2および(−α2)に対する第1の垂直方向ブロック射影データW1の大小関係に基づき、第1の閾値交差点A(7)を中心に(A(7)−V)から(A(7)+V)までの範囲(矩形の破線内の波形部分)について、図11(c)のように第1の垂直方向ブロック射影データが3値化処理される。これにより、現フレームの垂直方向ブロック射影データが「−1」、「0」または「1」で表されることとなる。
n値化器314では、第1の閾値交差点探索部29から出力される全ての第1の閾値交差点について、図11(c)に示すようなn値化処理が行われる。
次に、加算器315(図5)では、入力端子313を介して第1の閾値交差点探索部29から出力された第1の閾値交差点を中心に、n値化器314でn値化された第1の垂直方向ブロック射影データと、水平方向動きベクトル加算メモリ316から読み出された1つ前までのn値化された第1の垂直方向ブロック射影データの加算値とを加算し、その加算結果を水平方向動きベクトル加算メモリ316に再び記憶させる。そして、第1の閾値交差点探索部29で検出された全ての第1の閾値交差点のうち最後のものに関するn値化された第1の垂直方向ブロック射影データを加算器315で加算して1つの垂直方向ブロックについての加算処理を終了する際には、その加算結果をピーク検出器317に出力するようにする。なお、加算器315での加算処理終了後に、全ての第1の閾値交差点に関する加算結果を記憶している水平方向動きベクトル加算メモリ316から、その加算結果をピーク検出器317が読み出すようにしても良い。
ピーク検出器317には、第1の閾値交差点探索部29で検出された全ての第1の閾値交差点について各第1の閾値交差点を中心とした動きベクトル検出範囲(上述した±Vの範囲)に対応するn値化済みの第1の垂直方向ブロック射影データを加算したデータ(以下では「垂直方向ブロックn値化データ」とも言う)が入力されるが、この垂直方向ブロックn値化データに関するピーク値がピーク検出器317で検出される。このピーク検出器317において検出される垂直方向ブロックn値化データのピーク位置が、その垂直方向ブロックから得られる水平方向動きベクトルとなり、出力端子318を介して水平方向動き決定部32に出力される。
以上で説明した加算器315およびピーク検出器317の動作について、図12(a)および図12(b)を参照しつつ具体的に説明する。なお、図12(a)では、図11(a)に示す第1の閾値交差点A(1)〜A(8)を中心とした動きベクトル検出範囲(±Vの範囲)において第1の垂直方向ブロック射影データを3値化したものを概念的に示している。
加算器315において、図12(a)に示す第1の閾値交差点A(1)〜A(8)周辺の3値化データが順次に入力されると、これらのデータが加算され、図12(b)に示すような垂直方向ブロックn値化データが生成される。具体的には、加算器315において垂直方向ブロック射影データ読み出し部30により垂直方向ブロック射影データ(データ配列Mv(図9(b)))から抽出されn値器314でデータ長が圧縮された現フレームに係る動きベクトル検出範囲(所定範囲)のデータ配列それぞれについて、各第1の閾値交差点の配列要素の位置に対して相対位置が同じ配列要素同士の値が加算されることとなる。
加算器315で生成された垂直方向ブロックn値化データがピーク検出器317に入力されると、その垂直方向ブロックの水平方向動きベクトルとして図12(b)に示す水平方向のピーク位置hvが検出される。すなわち、ピーク検出器317では、加算器315で加算された加算結果に基づき、フレーム画像の水平方向に関する動きベクトルが検出される。
ピーク検出器317では、原則的に動きベクトル検出範囲(±Vの範囲)において、垂直方向ブロックn値化データが最大値となるピーク位置が探索されるが、周期性のある画像や、被写体に動きがある画像、不明瞭な画像に対しては、優位性のあるピークが立たない場合がある。このとき、その垂直方向ブロックから算出された水平方向動きベクトルは信頼性が低いため、無効ブロックと判断し、水平方向動きベクトル決定部32における画像全体の水平方向動きベクトル算出に使用すべきでない。
そこで、以下に、ピーク検出器317に要求される水平方向動きベクトルの信頼性評価について説明する。
ここで、説明を簡単にするため、「山」という言葉を定義する。
図16は、図12(b)に相当する図であり、横軸に動きベクトルを、縦軸に垂直方向ブロックn値化データを示しており、便宜的に1つの「山」だけを示している。
図16において、各相対位置(水平方向動きベクトル)での垂直方向ブロックn値化データに、マイナス側から順にv1〜v10の符号を付しており、データv1は前の「山の終わり」であり、これから探索する「山の始まり」でもある。なお、図示していないが、最初の山の「山の始まり」は、最もマイナス側(−V〜Vの範囲内)に存在する水平方向動きベクトルの垂直方向ブロックn値化データとなる。
ピーク検出器317では、基準値となる相対位置(水平方向動きベクトル)に対して比較対象となる相対位置を、マイナス側からプラス側に向けて順に移動して、その都度、両相対位置での垂直方向ブロックn値化データの大小を比較する。この場合、比較により大きいと判断された方の垂直方向ブロックn値化データを基準値に変更(または基準値として維持)し、次に比較対象となる相対位置との比較を行う。ここで、基準値のことを暫定的ピーク値Vpと呼称する。
具体的には、「山の始まり」であるデータv1については、基準値、すなわち暫定的ピーク値Vp=v1とし、まずデータv2との比較を行う。図16より、v1>v2なので、Vp>v2となりVp=v1を維持する。次に、暫定的ピーク値Vpとデータv3との比較を行うが、これも、Vp>v3となりVp=v1を維持する。
次に、暫定的ピーク値Vpとデータv4との比較を行うが、この場合はVp<v4となり、Vp=v4となって暫定的ピーク値Vpが変わる。同様に、暫定的ピーク値Vpとデータv5との比較では、Vp<v5となり、Vp=v5となって暫定的ピーク値Vpが変わる。さらに、暫定的ピーク値Vpとデータv6との比較では、Vp<v6となり、Vp=v6となって暫定的ピーク値Vpが変わる。
暫定的ピーク値Vpとデータv7との比較では、Vp>v7となりVp=v6を維持する。また、暫定的ピーク値Vpとデータv8との比較では、Vp>v8となりVp=v6を維持し、暫定的ピーク値Vpとデータv9との比較では、Vp>v9となりVp=v6を維持し、暫定的ピーク値Vpとデータv10との比較では、Vp>v10となりVp=v6を維持する。
なお、水平方向動きベクトルはデータv10以後にも存在するが、区切りを付けるため、ひとつの「山」における垂直方向ブロックn値化データの最大値を最大値Pnとして規定し、当該最大値Pnに対して所定の係数を掛けた値よりも小さな垂直方向ブロックn値化データを有する水平方向動きベクトルを「山の終わり」を示すベクトルとする。
ここでは、最大値Pnに掛ける所定の係数をβ(第2の係数、0<β<1)とし、データv10がVp×βよりも小さくなるので、データv10を「山の終わり」(次の「山の始まり」)を示すベクトルとする。なお、所定の係数βは、経験的に1/2以下に設定され、望ましくは1/4〜1/8の範囲に設定される。
このように、基準値となる相対位置(水平方向動きベクトル)に対して比較対象となる相対位置を順次移動させ、基準値よりも大きな垂直方向ブロックn値化データが発見された場合は、当該垂直方向ブロックn値化データを「山」の暫定的ピーク値Vpとして更新することを繰り返すことで、最大値Pn(ピーク値)を求めることができる。
そして、垂直方向ブロックn値化データが最大値Pnに対して所定の係数を掛けた値よりも小さな垂直方向ブロックn値化データを有する水平方向動きベクトルを「山の終わり」(次の「山の始まり」)を示すベクトルとすることで、1つの「山」を特定することができる。
なお、以上の説明では、比較対象となる相対位置を、マイナス側からプラス側に向けて順に移動させる例を示したが、逆に、比較対象となる相対位置を、プラス側からマイナス側に向けて順に移動させて最大値Pnを取得するようにしても良い。
また、単純に、垂直方向ブロックn値化データが増加から減少に転じた部分を最大値Pnとし、「山」が存在するものとして扱っても良いが、波形を全体として捉える上では、垂直方向ブロックn値化データの最大値Pnに所定の係数を掛けた値よりも小さな垂直方向ブロックn値化データを有する水平方向動きベクトルをもって「山の終わり」を定義する方が好ましい。
1つの「山」に対して得られた垂直方向ブロックn値化データの最大値Pnは保存され、次の「山」に対して同様の処理を行う。この動作を繰り返すことで、動きベクトル検出範囲の全体に渡って、「山」を特定するとともに、垂直方向ブロックn値化データの最大値Pn(ピーク値)を取得する。
図17には、動きベクトル検出範囲の全体に渡って、各動きベクトルに対する垂直方向ブロックn値化データを示しており、M1、M2、M3、M4およびM5の5つの「山」が存在する波形が示されている。
山M1〜M5の、それぞれのピーク値はP1〜P5となっており、これらのうち、最大のものを第1のピーク値(P1st)、その次に大きいものを第2のピーク値(P2nd)と呼称すると、第1のピーク値は山M3の垂直方向ブロックn値化データの最大値となり、P1st=P3となる。また、第2のピーク値は山M2の垂直方向ブロックn値化データの最大値となり、P2nd=P2となる。
第1のピーク値(P1st)がその他の「山」のピーク値に比べて大きければ大きいほど、そのピーク位置に対応する動きベクトルが、求める垂直方向ブロックの動きを示していることになり、算出された動きベクトルの信頼性が高いことを意味する。そこで、第1のピーク値(P1st)と第2のピーク値(P2nd)とを比較することにより信頼性を評価する。具体的には、以下の式で評価する。
P2nd>P1st×γ・・・(3)
ここで、γは予め定められた係数(第1の係数)で、0<γ<1である。
そして、上式(3)が成立したときには、求められた動きベクトルには信頼性がないものとして、算出結果を無効として扱う。もちろん、式(3)において、=を含んだものとしても良いことは言うまでもない。
式(3)では、γが1に近ければ近いほど、第1のピーク値(P1st)と第2のピーク値(P2nd)とで差が小さく、大きいバラツキをも許容することを意味する。この条件下では、画像に周期性がなく、画像が明瞭で、被写体も静止しているような理想的なケース以外でも、可能な限り広い範囲で算出結果を有効と判断することになり、ある程度の誤検出(誤判定)を許容の上で、算出結果を有効として扱うことになる。
逆に、γが0に近ければ近いほど、第1のピーク値(P1st)が第2のピーク値(P2nd)に対して十分大きくなければならず、バラツキを許容しないことを意味する。この条件下では、画像に周期性がなく、明瞭で、被写体も静止しているような理想的なケースにおいてのみ、極めて正確に動きベクトルを算出することが可能となる。一方で、理想的なケースを外した場合には、算出結果を無効として扱う確率が増えることになる。
なお、係数γは、本発明を適用した動画像撮像装置のユーザーが決めるように構成しても良いし、本発明を適用した動画像撮像装置の製造者が決定しても良い。
さらに、ピーク検出器317では、「山」のピーク値Pnの最大値が、予め定めた所定値以下の場合、具体的には、水平ラインの全画素数に対して、ピーク値Pnが著しく小さい場合は、算出結果を無効として扱う。ピーク値Pnが小さいということは、有効な第1の閾値交差点が少ないということを意味する。
水平ラインの全画素数に対して、有効な第1の閾値交差点が著しく少ない場合、例えば、水平ラインの全画素数が640画素に対して、ピーク値Pn=3というような場合は、画像として水平方向に特徴が乏しいことを意味しており、この乏しい情報に基づいて算出した結果を採用しないということは、信頼性の高い水平方向動きベクトルを得るという点で極めて有効な措置と言える。
なお、この処理における予め定めた所定値は、例えば、水平ラインの全画素数の1/50以下の範囲に設定され、より現実的には、1/100程度となる。
ピーク検出器317で垂直方向ブロックごとに算出された水平方向動きベクトル(ピーク位置のベクトル)は、出力端子318を介して水平方向動きベクトル決定部32に入力される。
水平方向動きベクトル決定部32では、垂直方向ブロック水平方向動きベクトル算出部31から順次に出力される各垂直方向ブロックの水平方向動きベクトルに基づき、画像全体の水平方向動きベクトルが決定される。具体的には、ヒストグラムを作成し、垂直方向ブロックn値化データの最も多いものを採用する。
以上説明したように、ピーク検出器317において、第1のピーク値P1stと第2のピーク値P2ndの大小関係により、第1のピーク値P1stとなるピーク位置(動きベクトル)の信頼性を評価することができ、その結果、信頼性の低い垂直方向ブロックを除外することができるため、信頼性の高い垂直方向ブロックに基づいて画像全体の水平方向動きベクトルを決定することができる。
<垂直方向動きベクトル検出部4の動作>
次に、動きベクトル検出装置1において画像の垂直方向の動きベクトルを検出する垂直方向動きベクトル検出部4の動作を説明する。
図2のように水平ラインの画素走査を垂直方向に順に繰り返すことによって読み出されるフレーム画像が、図6に示す垂直方向動きベクトル検出部4の入力端子40に入力されると、水平方向画像分割部41で水平方向にブロック分割される。すなわち、水平方向画像分割部41においては、フレーム画像において水平方向に分割して得られる複数の画像領域(水平方向ブロック)が設定される。これにより、以降の処理では、水平方向ブロックごとに処理や管理が行われることとなる。
水平方向画像分割部41では、例えば図13(a)に示すように640画素×480画素の画像データが、水平方向に64画素の幅(分割幅)を有した10個の垂直方向ブロックhb0〜hb9に分割される。なお、図13(a)に示す分割幅および分割数とするのは必須ではない。
水平方向画像分割部41で図13(a)のように10個の水平方向ブロックhb0〜hb9に分割された画像は、水平方向エッジ抽出フィルタリング部42において水平方向に延びるエッジ成分の抽出、換言すれば垂直方向に急峻に変化する画像部分を強調するようなフィルタリング処理が施される。
このフィルタリング処理で用いられるフィルタとしては、単純に垂直方向に隣接する画素との差分を取る(1,−1)の2タップフィルタや、2次微分に相当する(−1,2,−1)の3タップフィルタなどの使用が可能である。なお、このようなフィルタを使用するのは必須でなく、垂直方向に輝度変化が大きくなる画像部分において出力値が上昇するフィルタであれば良い。
水平方向エッジ抽出フィルタリング部42で各水平方向ブロック(画像領域)hb0〜hb9ごとに水平方向のエッジが強調された画像データは、水平方向ブロック射影部43に入力され、水平方向ブロック射影部43で水平方向に射影される。この射影により、水平方向の(ライン間で)ノイズ成分を低減でき、また水平方向のエッジ成分をより強調できるため、特徴点に対応する水平方向エッジを際立たせて動きベクトル検出精度の向上を図れることとなる。水平方向ブロック射影部43の動作について、図13(b)の概念図を参照しつつ説明する。
水平方向ブロック射影部43では、図13(a)に示す各水平方向ブロックhb0〜hb9の1水平ラインの入力が完了した時点で、1垂直ライン分のデータ配列Mhを有する水平方向ブロック射影データhn0〜hn9(図13(b))の1配列要素が生成される。従って、全配列要素が揃うのは、各水平方向ブロックhb0〜hb9の最終の水平ラインの入力が完了した時点である。なお、データ配列Mhは、垂直ラインの全画素数(例えば480)の配列要素を有しているが、(1,−1)のような2タップフィルタでは有効要素が垂直ラインの全画素数−1(例えば479)、(−1,2,−1)のような3タップフィルタでは有効要素が垂直ラインの全画素数−2(例えば478)となる。
具体的には、図7に示すように入力端子431を介して入力された各水平方向ブロックhb0〜hb9の画像データ(水平方向のエッジ強調が施された画像データ)が、加算器432に入力される。
加算器432では、まず入力された水平方向ブロックの1水平ラインの先頭では、水平方向射影一時記憶メモリ433内のデータを読み出すことなく、水平方向射影一時記憶メモリ433に書き込まれる。
次に、加算器432では、水平方向射影一時記憶メモリ433に記憶されている1水平ラインの前画素までの加算結果を読み出し、入力端子431から入力される水平方向ブロックの1水平ラインの現画素との加算を行って、その加算結果を水平方向射影一時記憶メモリ433に書き戻す。そして、水平方向ブロックにおける1水平ラインの最終画素が加算器432に入力されると、水平方向射影一時記憶メモリ433に保存された前画素までの加算結果を読み出し、入力端子431から入力される水平方向ブロックの1水平ラインの最終画素との加算を行って、その加算結果、つまり水平方向ブロックの1水平ラインの全画素が加算されたデータを水平方向ブロックの1水平ラインに関する射影データとして、出力端子434から第1の水平方向ブロック射影ラインメモリ44と第1の水平方向ブロック射影データ最大値保存部45とに出力する。
なお、加算器432において水平方向ブロックの1水平ラインの全画素が加算された射影データを水平方向射影一時記憶メモリ433に一旦記憶させ、次の水平方向ブロックの1水平ラインの先頭画素が入力される際に、水平方向射影一時記憶メモリ433内の射影データを読み出して出力端子434から出力するようにしても良い。
第1の水平方向ブロック射影ラインメモリ44では、水平方向ブロック射影部43から入力された現フレームの水平方向ブロック射影データを、第1の水平方向ブロック射影データとして水平方向ブロックごとに保存する。
第1の水平方向ブロック射影データ最大値保存部45では、水平方向ブロック射影部43から入力された水平方向ブロックの射影データに関する最大値を算出し、第1の水平方向ブロック射影データ最大値(現フレームの水平方向ブロック射影データ最大値)として保存する。
第2の水平方向ブロック射影ラインメモリ46は、第1の水平方向ブロック射影ラインメモリ44から読み出された水平方向ブロック射影データを、前フレームに関する第2の水平方向ブロック射影データとして保存する。
同様に、第2の水平方向ブロック射影データ最大値保存部47では、第1の水平方向ブロック射影データ最大値保存部45から出力された第1の水平方向ブロック射影データ最大値が、前フレームに関する第2の水平方向ブロック射影データ最大値(前フレームの水平方向ブロック射影データ最大値)として保存される。
換言すれば、第1の水平方向ブロック射影データ最大値保存部45に保存された現フレームの水平方向ブロック射影データ最大値は、次のフレームでは、第2の水平方向ブロック射影データ最大値保存部47に前フレームの水平方向ブロック射影データ最大値として保存されることとなる。
また、第2の水平方向ブロック射影データ最大値保存部47では、算出された前フレームの水平方向ブロック射影データ最大値に基づき、第4の閾値を算出する。例えば、前フレームの水平方向ブロック射影データ最大値をP4maxとすると、第4の閾値α4は次の式(4)で算出される。
α4=P4max×k4・・・・・・・・(4)
ここで、k4は予め定められた係数で、0<k4<1である。
なお、第4の閾値α4の演算は、上式(4)に限るものではなく、前フレームの水平方向ブロック射影データ最大値P4maxが大きくなれば第4の閾値α4が大きくなるものであれば良く、また変換テーブルを使用しても良い。また、第4の閾値α4については、水平方向ブロック毎の第2の水平方向ブロック射影データ最大値を使用するのは必須でなく、例えば前フレームの画像全体についての水平方向ブロック射影データの最大値を用いて第4の閾値を算出し、画像全体で同じ第4の閾値を採用しても良い。
第2の水平方向ブロック射影データ最大値保存部47は、前フレームに関する第2の水平方向ブロック射影データ最大値に基づき、第3の閾値(所定の一定値)が設定される。例えば、前フレームの水平方向ブロック射影データ最大値をP3maxとすると、第3の閾値α3は次の式(5)で算出される。
α3=P3max×k3・・・・・・・・(5)
ここで、k3は予め定められた係数で、0<k3<1である。
なお、第3の閾値α3の演算は、上式(5)に限るものではなく、前フレームの水平方向ブロック射影データ最大値P3maxが大きくなれば第3の閾値α3が大きくなるものであれば良く、また変換テーブルを使用しても良い。また、第3の閾値α3については、水平方向ブロック毎の第2の水平方向ブロック射影データ最大値を使用するのは必須でなく、例えば前フレームの画像全体についての水平方向ブロック射影データの最大値を用いて第3の閾値を算出し、画像全体で同じ第3の閾値を採用しても良い。
第3の閾値交差点探索部48では、第2の水平方向ブロック射影ラインメモリ46から読み出された第2の水平方向ブロック射影データと、第2の水平方向ブロック射影データ最大値保存部47から出力された第3の閾値との交差点(第3の閾値交差点)を垂直方向に探索する。この第3の閾値交差点探索部48で得られた第3の閾値交差点の情報は、水平方向ブロック射影データ読み出し部49と水平方向ブロック垂直方向動きベクトル算出部50とに入力される。
水平方向ブロック射影データ読み出し部49は、第3の閾値交差点探索部48から出力された第3の閾値交差点を中心とした動きベクトル検出範囲に対応した現フレームの(第1の)水平方向ブロック射影データを第1の水平方向ブロック射影ラインメモリ44から読み出す。すなわち、第3の閾値交差点をB(i)(ただしi=1,2,・・・qで、qは検出された第3の閾値交差点の総数)とし、動きベクトル検出範囲を第3の閾値交差点を中心とした(−U)から(+U)(ただしUは正の整数)の範囲とすると、第1の水平方向ブロック射影ラインメモリ44から読み出される射影データは、垂直方向において(B(i)−U)から(B(i)+U)までの範囲にある第1の水平方向ブロック射影データの部分データとなる。
この水平方向ブロック射影データ読み出し部49によって第1の水平方向ブロック射影ラインメモリ44から読み出された第1の水平方向ブロック射影データは、水平方向ブロック垂直方向動きベクトル算出部50に出力される。
水平方向ブロック射影データ読み出し部49から出力された第1の水平方向ブロック射影データは、図8に示す水平方向ブロック垂直方向動きベクトル算出部50の入力端子501を介してn値化器504に入力される。
このn値化器504では、第2の水平方向ブロック射影データ最大値保存部47から出力され、入力端子502を介して入力された第4の閾値に基づき、第1の水平方向ブロック射影データをn値化する。すなわち、n値化器504は、水平方向ブロック射影データ読み出し部49で抽出された現フレームの射影データに関するデータ配列Mh(図13(b))の各配列要素のデータ長を圧縮する。
このn値化器504の処理については、上述したn値化器314と同様の処理を行い、例えば3値化処理が実行される。すなわち、n値化器504における3値化処理では、前フレームの射影データにおけるデータ配列Mhの配列要素の最大値に基づき設定される第4の閾値α4(α4>0)に関して、水平方向ブロック射影データ読み出し部49で抽出された現フレームの射影データに関する配列要素の値が、(−α4)より小さい場合、(−α4)以上でα4以下の場合、およびα4より大きい場合の3段階による3値化が行われる。なお、n値化器504においては、n値化器314と同じ特性を有するのは必須でなく、n値化器314と異なる特性を有しても良い。
以上で説明した第3の閾値交差点探索部48、水平方向ブロック射影データ読み出し部49および水平方向ブロック垂直方向動きベクトル算出部50の動作について、図14(a)、図14(b)および図14(c)を参照しつつ具体的に説明する。なお、図14(a)および図14(b)の横軸は、射影データのデータ配列Mh(図13(b))の配列要素の位置を示している。また、図14(a)では、第3の閾値交差点B(1)〜B(6)それぞれを丸印で表している。
第3の閾値交差点探索部48では、図14(a)に示すように前フレームに関する第2の垂直方向ブロック射影データW4の波形において、第2の水平方向ブロック射影データ最大値保存部47から出力された第3の閾値α3と交差する第3の閾値交差点B(1)〜B(6)が求められる。すなわち、第3の閾値交差点探索部48は、前フレームに対して水平方向ブロック射影部43で得られた射影データに関して射影データのデータ配列Mh(図13(b))の要素順に配列要素の値をグラフ化した波形W4と、配列要素の値が第3の閾値(所定の一定値)α3となる直線とが交差する各第3の閾値交差点の配列要素の位置を特定する。
次に、水平方向ブロック射影データ読み出し部49では、図14(a)に示す各第3の閾値交差点B(1)〜B(6)を中心とした所定の動きベクトル検出範囲について第1の水平方向ブロック射影ラインメモリ44から現フレームの水平方向ブロック射影データが読み出される。すなわち、水平方向ブロック射影データ読み出し部49は、各第3の閾値交差点における射影データ(データ配列)の配列要素の位置を中心とした所定範囲のデータ配列を、水平方向ブロック射影部43で得られた現フレーム(後フレーム)の射影データから抽出する。例えば第3の閾値交差点B(4)に関しては、図14(b)に示すように第3の閾値交差点B(4)を中心に(B(4)−U)から(B(4)+U)までの範囲(矩形の破線内の波形部分)に対応する第1の水平方向ブロック射影データW3が読み出される。
そして、水平方向ブロック射影データ読み出し部49によって読み出された第1の水平方向ブロック射影データは、第2の水平方向ブロック射影データ最大値保存部47から出力された第4の閾値α4を用いて、水平方向ブロック垂直方向動きベクトル算出部50のn値器504でn値化処理される。例えば第3の閾値交差点B(4)に関しては、図14(b)に示す第4の閾値α4および(−α4)に対する第1の水平方向ブロック射影データW3の大小関係に基づき、第3の閾値交差点B(4)を中心に(B(4)−U)から(B(4)+U)までの範囲(矩形の破線内の波形部分)について、図14(c)のように第1の水平方向ブロック射影データが3値化処理される。これにより、現フレームの水平方向ブロック射影データが「−1」、「0」または「1」で表されることとなる。
n値化器504では、第3の閾値交差点探索部48から出力される全ての第3の閾値交差点について、図14(c)に示すようなn値化処理が行われる。
次に、加算器505(図8)では、入力端子503を介して第3の閾値交差点探索部48から出力された第3の閾値交差点を中心に、n値化器504でn値化された第1の水平方向ブロック射影データと、垂直方向動きベクトル加算メモリ506から読み出された1つ前までのn値化された第1の水平方向ブロック射影データの加算値とを加算し、その加算結果を垂直方向動きベクトル加算メモリ506に再び記憶させる。そして、第3の閾値交差点探索部48で検出された全ての第3の閾値交差点のうち最後のものに関するn値化された第1の水平方向ブロック射影データを加算器505で加算して1つの水平方向ブロックについての加算処理を終了する際には、その加算結果をピーク検出器507に出力するようにする。なお、加算器505での加算処理終了後に、全ての第3の閾値交差点に関する加算結果を記憶している垂直方向動きベクトル加算メモリ506から、その加算結果をピーク検出器507が読み出すようにしても良い。
ピーク検出器507には、第3の閾値交差点探索部48で検出された全ての第3の閾値交差点について各第3の閾値交差点を中心とした動きベクトル検出範囲(上述した±Uの範囲)に対応するn値化済みの第1の水平方向ブロック射影データを加算したデータ(以下では「水平方向ブロックn値化データ」とも言う)が入力されるが、この水平方向ブロックn値化データに関するピーク値がピーク検出器507で検出される。このピーク検出器507において検出される水平方向ブロックn値化データのピーク位置が、その水平方向ブロックから得られる垂直方向動きベクトルとなり、出力端子508を介して垂直方向動き決定部51に出力される。
以上で説明した加算器505およびピーク検出器507の動作について、図15(a)および図15(b)を参照しつつ具体的に説明する。なお、図15(a)では、図14(a)に示す第3の閾値交差点B(1)〜B(6)を中心とした動きベクトル検出範囲(±Uの範囲)において第1の水平方向ブロック射影データを3値化したものを概念的に示している。
加算器505において、図15(a)に示す第3の閾値交差点B(1)〜B(6)周辺の3値化データが順次に入力されると、これらのデータが加算され、図15(b)に示すような水平方向ブロックn値化データが生成される。具体的には、加算器505において水平方向ブロック射影データ読み出し部49により水平方向ブロック射影データ(データ配列Mh(図13(b)))から抽出されn値器504でデータ長が圧縮された現フレームに係る動きベクトル検出範囲(所定範囲)のデータ配列それぞれについて、各第3の閾値交差点の配列要素の位置に対して相対位置が同じ配列要素同士の値が加算されることとなる。
加算器505で生成された水平方向ブロックn値化データがピーク検出器507に入力されると、その水平方向ブロックの垂直方向動きベクトルとして図15(b)に示す垂直方向のピーク位置vvが検出される。すなわち、ピーク検出器507では、加算器505で加算された加算結果に基づき、フレーム画像の垂直方向に関する動きベクトルが検出される。
ピーク検出器507では、原則的に動きベクトル検出範囲(±Uの範囲)において、水平方向ブロックn値化データが最大値となるピーク位置が探索されるが、周期性のある画像や、被写体に動きがある画像、不明瞭な画像に対しては、優位性のあるピークが立たない場合がある。このとき、その水平方向ブロックから算出された垂直方向動きベクトルは信頼性が低いため、無効ブロックと判断し、垂直方向動きベクトル決定部51における画像全体の垂直方向動きベクトル算出に使用すべきでない。
そこで、以下に、ピーク検出器507に要求される垂直方向動きベクトルの信頼性評価について説明する。なお、ピーク検出器507における信頼性評価の動作は、図16および図17を用いて説明したピーク検出器317と基本的に同じであるので、図16および図17を援用して説明する。
図16は、図15(b)に相当する図であり、横軸に動きベクトルを、縦軸に水平方向ブロックn値化データを示しており、便宜的に1つの「山」だけを示している。
図16において、各相対位置(垂直方向動きベクトル)での水平方向ブロックn値化データに、マイナス側から順にv1〜v10の符号を付しており、データv1は前の「山の終わり」であり、これから探索する「山の始まり」でもある。なお、図示していないが、最初の山の「山の始まり」は、最もマイナス側(−U〜Uの範囲内)に存在する垂直方向動きベクトルの水平方向ブロックn値化データとなる。
ピーク検出器507では、基準値となる相対位置(垂直方向動きベクトル)に対して比較対象となる相対位置を、マイナス側からプラス側に向けて順に移動して、その都度、両相対位置での水平方向ブロックn値化データの大小を比較する。この場合、比較により大きいと判断された方の水平方向ブロックn値化データを基準値に変更(または基準値として維持)し、次に比較対象となる相対位置との比較を行う。ここで、基準値のことを暫定的ピーク値Vpと呼称する。
具体的には、「山の始まり」であるデータv1については、基準値、すなわち暫定的ピーク値Vp=v1とし、まずデータv2との比較を行う。図16より、v1>v2なので、Vp>v2となりVp=v1を維持する。次に、暫定的ピーク値Vpとデータv3との比較を行うが、これも、Vp>v3となりVp=v1を維持する。
次に、暫定的ピーク値Vpとデータv4との比較を行うが、この場合はVp<v4となり、Vp=v4となって暫定的ピーク値Vpが変わる。同様に、暫定的ピーク値Vpとデータv5との比較では、Vp<v5となり、Vp=v5となって暫定的ピーク値Vpが変わる。さらに、暫定的ピーク値Vpとデータv6との比較では、Vp<v6となり、Vp=v6となって暫定的ピーク値Vpが変わる。
暫定的ピーク値Vpとデータv7との比較では、Vp>v7となりVp=v6を維持する。また、暫定的ピーク値Vpとデータv8との比較では、Vp>v8となりVp=v6を維持し、暫定的ピーク値Vpとデータv9との比較では、Vp>v9となりVp=v6を維持し、暫定的ピーク値Vpとデータv10との比較では、Vp>v10となりVp=v6を維持する。
なお、垂直方向動きベクトルはデータv10以後にも存在するが、区切りを付けるため、1つの「山」における水平方向ブロックn値化データの最大値を最大値Pnとして規定し、当該最大値Pnに対して所定の係数を掛けた値よりも小さな水平方向ブロックn値化データを有する垂直方向動きベクトルを「山の終わり」を示すベクトルとする。
ここでは、最大値Pnに掛ける所定の係数をβ(0<β<1)とし、データv10がVp×βよりも小さくなるので、データv10を「山の終わり」(次の「山の始まり」)を示すベクトルとする。なお、所定の係数βは、経験的に1/2以下に設定され、望ましくは1/4〜1/8の範囲に設定される。
このように、基準値となる相対位置(垂直方向動きベクトル)に対して比較対象となる相対位置を順次移動させ、基準値よりも大きな水平方向ブロックn値化データが発見された場合は、当該水平方向ブロックn値化データを「山」の暫定的ピーク値Vpとして更新することを繰り返すことで、最大値Pn(ピーク値)を求めることができる。
そして、水平方向ブロックn値化データが最大値Pnに対して所定の係数を掛けた値よりも小さな水平方向ブロックn値化データを有する垂直方向動きベクトルを「山の終わり」(次の「山の始まり」)を示すベクトルとすることで、1つの「山」を特定することができる。
なお、以上の説明では、比較対象となる相対位置を、マイナス側からプラス側に向けて順に移動させる例を示したが、逆に、比較対象となる相対位置を、プラス側からマイナス側に向けて順に移動させて最大値Pnを取得するようにしても良い。
また、単純に、水平方向ブロックn値化データが増加から減少に転じた部分を最大値Pnとし、「山」が存在するものとして扱っても良いが、波形を全体として捉える上では、水平方向ブロックn値化データの最大値Pnに所定の係数を掛けた値よりも小さな水平方向ブロックn値化データを有する垂直方向動きベクトルをもって「山の終わり」を定義する方が好ましい。
1つの「山」に対して得られた水平方向ブロックn値化データの最大値Pnは保存され、次の「山」に対して同様の処理を行う。この動作を繰り返すことで、動きベクトル検出範囲の全体に渡って、「山」を特定するとともに、水平方向ブロックn値化データの最大値Pn(ピーク値)を取得する。
図17には、動きベクトル検出範囲の全体に渡って、各動きベクトルに対する水平方向ブロックn値化データを示しており、M1、M2、M3、M4およびM5の5つの「山」が存在する波形が示されている。
山M1〜M5の、それぞれのピーク値はP1〜P5となっており、これらのうち、最大のものを第1のピーク値(P1st)、その次に大きいものを第2のピーク値(P2nd)と呼称すると、第1のピーク値は山M3の水平方向ブロックn値化データの最大値となり、P1st=P3となる。また、第2のピーク値は山M2の水平方向ブロックn値化データの最大値となり、P2nd=P2となる。
第1のピーク値(P1st)がその他の「山」のピーク値に比べて大きければ大きいほど、そのピーク位置に対応する動きベクトルが、求める水平方向ブロックの動きを示していることになり、算出された動きベクトルの信頼性が高いことを意味する。そこで、第1のピーク値(P1st)と第2のピーク値(P2nd)とを比較することにより信頼性を評価する。具体的には、先に説明した式(3)を用いて評価する。
そして、式(3)が成立したときには、求められた動きベクトルには信頼性がないものとして、算出結果を無効として扱う。もちろん、式(3)において、=を含んだものとしても良いことは言うまでもない。
式(3)では、γが1に近ければ近いほど、第1のピーク値(P1st)と第2のピーク値(P2nd)とで差が小さく、大きいバラツキをも許容することを意味する。この条件下では、画像に周期性がなく、画像が明瞭で、被写体も静止しているような理想的なケース以外でも、可能な限り広い範囲で算出結果を有効と判断することになり、ある程度の誤検出(誤判定)を許容の上で、算出結果を有効として扱うことになる。
逆に、γが0に近ければ近いほど、第1のピーク値(P1st)が第2のピーク値(P2nd)に対して十分大きくなければならず、バラツキを許容しないことを意味する。この条件下では、画像に周期性がなく、明瞭で、被写体も静止しているような理想的なケースにおいてのみ、極めて正確に動きベクトルを算出することが可能となる。一方で、理想的なケースを外した場合には、算出結果を無効として扱う確率が増えることになる。
さらに、ピーク検出器507では、「山」のピーク値Pnの最大値が、予め定めた所定値以下の場合、具体的には、垂直ラインの全画素数に対して、ピーク値Pnが著しく小さい場合は、算出結果を無効として扱う。ピーク値Pnが小さいということは、有効な第3の閾値交差点が少ないということを意味する。
垂直ラインの全画素数に対して、有効な第3の閾値交差点が著しく少ない場合、例えば、垂直ラインの全画素数が480画素に対して、ピーク値Pn=2というような場合は、画像として垂直方向に特徴が乏しいことを意味しており、この乏しい情報に基づいて算出した結果を採用しないということは、信頼性の高い垂直方向動きベクトルを得るという点で極めて有効な措置と言える。
なお、この処理における予め定めた所定値は、例えば、垂直ラインの全画素数の1/50以下の範囲に設定され、より現実的には、1/100程度となる。
ピーク検出器507で水平方向ブロックごとに算出された垂直方向動きベクトル(ピーク位置のベクトル)は、出力端子508を介して垂直方向動きベクトル決定部51に入力される。
垂直方向動きベクトル決定部51(図6)では、水平方向ブロック垂直方向動きベクトル算出部50から順次に出力される各水平方向ブロックの垂直方向動きベクトルに基づき、画像全体の垂直方向動きベクトルが決定される。具体的には、ヒストグラムを作成し、水平方向ブロックn値化データの最も多いものを採用する。
以上説明したように、ピーク検出器507において、第1のピーク値P1stと第2のピーク値P2ndの大小関係により、第1のピーク値P1stとなるピーク位置(動きベクトル)の信頼性を評価することができ、その結果、信頼性の低い水平方向ブロックを除外することができるため、信頼性の高い水平方向ブロックに基づいて画像全体の垂直方向動きベクトルを決定することができる。
<効果>
以上に説明したように、実施の形態1に係る動きベクトル検出装置1の水平方向動きベクトル検出部2においては、垂直方向ブロック水平方向動きベクトル算出部31におけるピーク検出器317で、垂直方向ブロックn値化データの最大値を求め、当該最大値を第1のピーク値(P1st)とし、第2のピーク値(P2nd)との大小関係により、該垂直方向ブロックで求められる水平方向動きベクトルの信頼性を評価し、有効/無効の判断を行うことができる。このため、水平方向動きベクトル決定部32において、画像が不明瞭であったり、周期性があったり、被写体が静止していなかったりするような信頼性の低い垂直方向ブロックの結果を除外することができ、信頼性の高い垂直方向ブロックの結果に基づいて画像全体の水平方向動きベクトルを決定することができる。
また、第1のピーク値(P1st)と第2のピーク値(P2nd)は、各相対位置における垂直方向ブロックn値化データを順次に読み出して比較することにより簡単に算出可能であり、短いブランキング期間でも処理可能であるため、リアルタイム処理に有効である。
また、実施の形態1に係る動きベクトル検出装置1の垂直方向動きベクトル検出部4においては、水平方向ブロック垂直方向動きベクトル算出部50におけるピーク検出器507で、水平方向ブロックn値化データの最大値を求め、当該最大値を第1のピーク値(P1st)とし、第2のピーク値(P2nd)との大小関係により、該水平方向ブロックで求められる垂直方向動きベクトルの信頼性を評価し、有効/無効の判断を行うことができる。このため、垂直方向動きベクトル決定部51において、画像が不明瞭であったり、周期性があったり、被写体が静止していなかったりするような信頼性の低い水平方向ブロックの結果を除外することができ、信頼性の高い水平方向ブロックの結果に基づいて画像全体の垂直方向動きベクトルを決定することができる。
また、第1のピーク値P1stと第2のピーク値P2ndは、各相対位置における水平方向ブロックn値化データを順次に読み出して比較することにより簡単に算出可能であり、短いブランキング期間でも処理可能であるため、リアルタイム処理に有効である。
また、動きベクトル検出装置1では、垂直方向画像分割部21でフレーム画像を垂直方向に分割した後に、各分割画像(垂直方向ブロック)について垂直方向のエッジを強調するため、垂直方向のエッジが強調された分割画像を簡易に生成できる。
同様に、水平方向画像分割部41でフレーム画像を水平方向に分割した後に、各分割画像(水平方向ブロック)について水平方向のエッジを強調するため、水平方向のエッジが強調された分割画像を簡易に生成できる。
<実施の形態2>
<動きベクトル検出装置の構成>
本発明の実施の形態2に係る動きベクトル検出装置1Aについては、図1に示す実施の形態1の動きベクトル検出装置1と類似の構成を有しているが、水平方向動きベクトル検出部と垂直方向動きベクトル検出部との構成が異なっている。この動きベクトル検出装置1Aにおける水平方向動きベクトル検出部2Aおよび垂直方向動きベクトル検出部4Aの構成について図18および図19を参照して説明する。
図18は、水平方向動きベクトル検出部2Aの要部構成を示すブロック図である。なお、図18では、実施の形態1と同様の機能を有する部位には同一の符号を付している。
水平方向動きベクトル検出部2Aでは、実施の形態1の水平方向動きベクトル検出部2に対して垂直方向画像分割部21と垂直方向エッジ抽出フィルタリング部22との配置が逆転している。以下では、この水平方向動きベクトル検出部2Aの動作について説明する。
図2に示すように水平ラインの画素走査を垂直方向に順に繰り返すことによって読み出されるフレーム画像が、水平方向動きベクトル検出部2Aの入力端子20に入力されると、垂直方向エッジ抽出フィルタリング部22において垂直方向に延びるエッジ成分の抽出、換言すれば水平方向に急峻に変化する画像部分を強調するようなフィルタリング処理が施される。
垂直方向エッジ抽出フィルタリング部22で垂直方向のエッジが強調されたフレーム画像が垂直方向画像分割部21に入力されると、垂直方向にブロック分割される。すなわち、垂直方向画像分割部21では、エッジ強調が施されたフレーム画像を垂直方向に分割して得られる複数の画像領域(垂直方向ブロック)が設定される。これにより、以降の処理では、垂直方向ブロックごとに処理および管理が行われることとなる。
垂直方向画像分割部21で分割された画像データは、垂直方向ブロック射影部23に入力されるが、この垂直方向ブロック射影部23以降の処理は、実施の形態1の水平方向動きベクトル検出部2と同様の処理が行われる。
図19は、垂直方向動きベクトル検出部4Aの要部構成を示すブロック図である。なお、図19では、実施の形態1と同様の機能を有する部位には同一の符号を付している。
垂直方向動きベクトル検出部4Aでは、実施の形態1の垂直方向動きベクトル検出部4に対して水平方向画像分割部41と水平方向エッジ抽出フィルタリング部42との配置が逆転している。以下では、この垂直方向動きベクトル検出部4Aの動作について説明する。
図2に示すように水平ラインの画素走査を垂直方向に順に繰り返すことによって読み出されるフレーム画像が、垂直方向動きベクトル検出部4Aの入力端子40に入力されると、水平方向エッジ抽出フィルタリング部42において水平方向に延びるエッジ成分の抽出、換言すれば垂直方向に急峻に変化する画像部分を強調するようなフィルタリング処理が施される。
水平方向エッジ抽出フィルタリング部42で水平方向のエッジが強調されたフレーム画像が水平方向画像分割部41に入力されると、水平方向にブロック分割される。すなわち、水平方向画像分割部41では、エッジ強調が施されたフレーム画像を水平方向に分割して得られる複数の画像領域(水平方向ブロック)が設定される。これにより、以降の処理では、水平方向ブロックごとに処理および管理が行われることとなる。
水平方向画像分割部41で分割された画像データは、水平方向ブロック射影部43に入力されるが、この水平方向ブロック射影部43以降の処理は、実施の形態1の垂直方向動きベクトル検出部4と同様の処理が行われる。以上の動きベクトル検出装置1Aの動作により、実施の形態1と同様の効果を奏する。
そして、動きベクトル検出装置1Aでは、垂直方向エッジ抽出フィルタリング部22でフレーム画像に対する垂直方向のエッジを強調した後に、エッジ強調されたフレーム画像を垂直方向画像分割部21において垂直方向に分割するため、垂直方向のエッジが強調された分割画像を簡易に生成できる。
同様に、水平方向エッジ抽出フィルタリング部42でフレーム画像に対する水平方向のエッジを強調した後に、エッジ強調されたフレーム画像を水平方向画像分割部41において水平方向に分割するため、水平方向のエッジが強調された分割画像を簡易に生成できる。
なお、動きベクトル検出装置1Aにおいては、垂直方向エッジ抽出フィルタリング部22と水平方向エッジ抽出フィルタリング部42とを別々に水平方向動きベクトル検出部2Aおよび垂直方向動きベクトル検出部4Aに配置するのは必須でなく、垂直方向エッジ抽出フィルタリング部22および水平方向エッジ抽出フィルタリング部42の双方の機能を一体化した水平/垂直方向エッジ抽出フィルタリング部を設けて、その出力を垂直方向画像分割部21および水平方向画像分割部41それぞれに入力させるようにしても良い。
<変形例>
上記の各実施の形態における垂直方向エッジ抽出フィルタリング部および水平方向エッジ抽出フィルタリング部については、エッジ抽出を行うフィルタリング処理後に、所定の閾値との大小関係を判別する閾値処理により例えば「エッジあり」「エッジなし」の2値化や、「正のエッジあり」「エッジなし」「負のエッジあり」の3値化を行うようにしても良い。このような閾値処理を行うことにより、所定の閾値以上の輝度変化(輝度勾配)を有するエッジを同一に扱うことが可能となる。
上記の各実施の形態においては、ビット数削減部25から出力されるデータを、例えばフレームごとのスイッチ切り替えによって第1の垂直方向ブロック射影ラインメモリ26と第2の垂直方向ブロック射影ラインメモリ27とに交互に入力させるようにしても良い。 また、水平方向ブロック射影部43から出力されるデータを、例えばフレームごとのスイッチ切り替えによって第1の水平方向ブロック射影ラインメモリ44と第2の水平方向ブロック射影ラインメモリ46とに交互に入力させるようにしても良い。
同様に、垂直(水平)方向ブロック射影部から出力されるデータを、例えばフレームごとのスイッチ切り替えによって第1の垂直(水平)方向ブロック射影データ最大値保存部と第2の垂直(水平)方向ブロック射影データ最大値保存部とに交互に入力させるようにしても良い。
本発明における「前フレーム」には、後フレーム(例えば現在のフレーム)に対して1つだけ前のフレームに限らず、2つ以上前のフレームも含まれる。例えば、フレーム間引き処理により途中のフレームがスキップされている場合には、スキップされたフレームの前のフレームが含まれる。
1,1A 動きベクトル検出装置、hb0〜hb9 水平方向ブロック、hn0〜hn9 水平方向ブロック射影データ、vb0〜vb7 垂直方向ブロック、vn0〜vn6 垂直方向ブロック射影データ、A(1)〜A(8) 第1の閾値交差点、Mh,Mv データ配列、α1 第1の閾値、α2 第2の閾値、B(1)〜B(6) 第3の閾値交差点、α3 第3の閾値、α4 第4の閾値。