<実施の形態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の垂直方向ブロック射影データ最大値保存部24は、現フレームの垂直方向ブロックの射影データ(以下では「第1の垂直方向ブロック射影データ」とも言う)の最大値に基づき、後述する第2の閾値を算出する。
ビット数削減部25は、第1の垂直方向ブロック射影データ最大値保存部24に保存された第1の垂直方向ブロック射影データの最大値に基づき、垂直方向ブロック射影部23から出力された垂直方向ブロックの射影データのビット数を削減する。
第1の垂直方向ブロック射影ラインメモリ26は、ビット数削減部25でビット数が削減された第1の垂直方向ブロック射影データを保存する。
第2の垂直方向ブロック射影ラインメモリ27は、第1の垂直方向ブロック射影ラインメモリ26から送られた垂直方向ブロック射影データを、前フレームの垂直方向ブロックの射影データ(以下では「第2の垂直方向ブロック射影データ」とも言う)として保存する。
第2の垂直方向ブロック射影データ最大値保存部28は、第1の垂直方向ブロック射影データ最大値保存部24から出力された垂直方向ブロックの射影データの最大値を、前フレームに関する第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から出力される。なお、水平方向動きベクトル決定部32は、第1の垂直方向ブロック射影データ最大値保存部24に保存された、第1の垂直方向ブロック射影データの最大値および第1の閾値交差点探索部29から出力される第1の閾値交差点の情報を受けて、水平方向動きベクトルの信頼性を高める処理に使用する構成となっている。
図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および319とを備えている。
入力端子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に入力され、ピーク値は出力端子319を介して水平方向動きベクトル決定部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から出力された現フレームの水平方向ブロックの射影データの最大値を保存する。
第2の水平方向ブロック射影ラインメモリ46は、第1の水平方向ブロック射影ラインメモリ44から送られた水平方向ブロック射影データを、前フレームの水平方向ブロックの射影データ(以下では「第2の水平方向ブロック射影データ」とも言う)として保存する。
第2の水平方向ブロック射影データ最大値保存部47は、第1の水平方向ブロック射影データ最大値保存部45から出力された水平方向ブロックの射影データの最大値を、前フレームに関する第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から出力される。なお、垂直方向動きベクトル決定部51は、第1の水平方向ブロック射影データ最大値保存部45に保存された、第1の水平方向ブロック射影データの最大値および第3の閾値交差点探索部48から出力される第3の閾値交差点の情報を受けて、垂直方向動きベクトルの信頼性を高める処理に使用する構成となっている。
図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および509とを備えている。
入力端子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に入力され、ピーク値は出力端子509を介して水平方向動きベクトル決定部32に入力されることとなる。
以上のような構成を有する動きベクトル検出装置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の垂直方向ブロック射影データ最大値保存部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から入力された現フレームの垂直方向ブロック射影データの最大値に基づき射影データの有効ビットレンジを決定する。そして、この有効ビットレンジに基づき設定される上位無効ビットおよび下位無効ビットを垂直方向ブロック射影部23から入力された垂直方向ブロック射影データから削減し、有効ビットのみで構成される現フレームの垂直方向ブロック射影データを第1の垂直方向ブロック射影ラインメモリ26に出力する。
第1の垂直方向ブロック射影ラインメモリ26は、ビット数削減部25によってビット数が低減された現フレームの垂直方向ブロック射影データを、第1の垂直方向ブロック射影データとして垂直方向ブロックごとに保存する。すなわち、第1の垂直方向ブロック射影ラインメモリ26には、第1の垂直方向ブロック射影データ最大値保存部24で求められた射影データの最大値に基づきビット数削減部25においてビット数(各配列要素のデータ長)が削減された現フレーム(後フレーム)の射影データが記憶される。
第1の垂直方向ブロック射影ラインメモリ26は、現フレームに関する新たな第1の垂直方向ブロック射影データが入力されるタイミングで、前フレームの垂直方向ブロック射影データを読み出し、第2の垂直方向ブロック射影ラインメモリ27に与える。第2の垂直方向ブロック射影ラインメモリ27は、第1の垂直方向ブロック射影ラインメモリ26から読み出された前フレームの垂直方向ブロック射影データを、第2の垂直方向ブロック射影データとして保存する。
同様に、第1の垂直方向ブロック射影データ最大値保存部24は、現フレームに関する新たな第1の垂直方向ブロック射影データの最大値が入力されるタイミングで、前フレームの垂直方向ブロック射影データの最大値を読み出し、第2の垂直方向ブロック射影データ最大値保存部28に与える。第2の垂直方向ブロック射影データ最大値保存部28では、第1の垂直方向ブロック射影データ最大値保存部24から読み出された前フレームの垂直方向ブロック射影データの最大値が、前フレームに関する第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に出力される。同様に、そのときのピーク値は出力端子319から出力される。
以上で説明した加算器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の範囲)において最大値となるピーク位置が探索されるが、同一の最大値が複数ある場合には、原点0に近いもの(原点0までの距離が等しい場合には負の位置のもの)を優先する。なお、このようなピーク位置の検出ルールに限らず、正の位置にある最大値を優先しても良く、また前フレームにおける動きベクトルの傾向を現フレームのピーク位置の検出に利用するようにしても良い。
ピーク検出器317で垂直方向ブロックごとに算出された水平方向動きベクトル(ピーク位置)と、垂直方向ブロックのn値化され加算された加算データのピーク値(以下、「垂直方向ブロックn値化加算データピーク値」とも言う)は、それぞれ出力端子318および319を介して水平方向動きベクトル決定部32に入力され、垂直方向ブロックn値化加算データピーク値は、垂直方向ブロックの有効/無効判定に使用される。
水平方向動きベクトル決定部32では、垂直方向ブロック水平方向動きベクトル算出部31から順次に出力される各垂直方向ブロックの水平方向動きベクトルに基づき、画像全体の水平方向動きベクトルが決定される。
このとき、第1の垂直方向ブロック射影データ最大値保存部24から出力される第1の垂直方向ブロック射影データの最大値、垂直方向ブロック水平方向動きベクトル算出部31から出力される垂直方向ブロックn値化加算データピーク値および第1の閾値交差点探索手段29から出力される第1の閾値交差点の情報に基づいて各垂直方向ブロックの有効/無効を判定する。そして、無効ブロックと判定された垂直方向ブロックから算出された水平方向動きベクトルは画像全体の水平方向動きベクトルを決定する際には使用しないものとする。
<垂直方向ブロックの有効/無効の判定動作>
<第1の垂直方向ブロック射影データの最大値を用いる場合>
以下、各垂直方向ブロックの有効/無効を判定する方法について説明する。
図13は、第1の垂直方向ブロック射影データの最大値を用いて各垂直方向ブロックの有効/無効を判定する方法を説明する図である。
図13においては、図9(a)に示した640画素×480画素の画像データを例に採り、垂直方向に64画素の幅(分割幅)を有した7個の垂直方向ブロックvb0〜vb6に分割した場合を示している。
また、図13においては、第1の垂直方向ブロック射影データ最大値保存部24(図3)から出力される各垂直方向ブロックの第1の垂直方向ブロック射影データの最大値を、各ブロックごとに16進数表記で示している。
水平方向動きベクトル決定部32では、各垂直方向ブロックvb0〜vb6における第1の垂直方向ブロック射影データの最大値の中から全ブロック中の最大値を求める。図13の例では、垂直方向ブロックvb2が全ブロック中の最大値を有しており、この値を全垂直方向ブロック射影データ最大値と呼称する。
また、水平方向動きベクトル決定部32では、全垂直方向ブロック射影データ最大値に対して、例えば1/4以下の最大値しか有さない垂直方向ブロックを無効ブロックとして判断する。図13の例では、垂直方向ブロックvb0、vb1およびvb6が無効ブロックと判断される。
図14は、垂直方向ブロックの有効/無効の判定を模式的に示す図である。
図14においては、横軸を全垂直方向ブロック射影データ最大値とし、縦軸を第1の垂直方向ブロック射影データ最大値としたグラフを表しており、原点を起点とした傾き1/4(S=1/4)の直線を境にして、有効ブロックと無効ブロックとに分かれることが表されている。
無効ブロックと判断される垂直方向ブロックは、絵柄として特徴の少ない(くっきりとした箇所が少ない)、あるいは、非常に細かい絵柄であると言うことができ、結果として、他の有効ブロックに対して信頼性が低いと判断できるものである。従って、無効ブロックと判断される垂直方向ブロックについては、画像全体の水平方向動きベクトルの決定には使用しないことで、水平方向動きベクトルの信頼性を高めることができる。
なお、上記においては、有効/無効の判定条件を、全垂直方向ブロック射影データ最大値の1/4以下として説明したが、これに限るものではなく、場合によっては1/2以下、あるいは1/8以下としても良い。このように、判定条件1/2nで設定することにより、有効、無効の判定を簡単に行うことが可能である。
<垂直方向ブロックn値化加算データピーク値を用いる場合>
図15は、垂直方向ブロックn値化加算データピーク値を用いて各垂直方向ブロックの有効/無効を判定する方法を説明する図である。
図15においては、図9(a)に示した640画素×480画素の画像データを例に採り、垂直方向に64画素の幅(分割幅)を有した7個の垂直方向ブロックvb0〜vb6に分割した場合を示している。
また、図15においては、垂直方向ブロック水平方向動きベクトル算出部31(図3)から出力される各垂直方向ブロックの垂直方向ブロックn値化加算データピーク値を、各ブロックごとに16進数表記で示している。
水平方向動きベクトル決定部32では、各垂直方向ブロックvb0〜vb6における垂直方向ブロックn値化加算データピーク値の中から最大値を求める。図15の例では、垂直方向ブロックvb4が最大値を有しており、この値を垂直方向ブロックn値化加算データピーク値の最大値と呼称する。
また、水平方向動きベクトル決定部32では、垂直方向ブロックn値化加算データピーク値の最大値が所定値A(例えば、10進数表記で12)以上のとき、垂直方向ブロックn値化加算データが所定値B(例えば、10進数表記で7)以下の垂直方向ブロックを無効ブロックとして判断する。図15の例では、垂直方向ブロックvb0、vb1、vb5およびvb6が無効ブロックと判断される。
垂直方向ブロック水平方向動きベクトル算出部31(図3)の加算器315(図5)の出力は、第1の閾値交差点を中心に、第2の閾値でn値化された第1の垂直方向ブロック射影データを加算したものであり、第1の閾値交差点が多く、かつ、プラス側の第2の閾値(α2)を超える振幅(山)が多いほど大きな値となる。逆に、マイナス側の第2の閾値(−α2)を超える振幅があれば打ち消されることになる。
言い換えれば、加算器315の出力の最大値、つまり、ある垂直方向ブロックの垂直方向ブロックn値化加算データピーク値が所定値A以上であり、その一方で、他の垂直方向ブロックの垂直方向ブロックn値化加算データピーク値が所定値B以下であるとき、当該他の垂直方向ブロックにおいては加算結果が打ち消される絵柄、あるいは、特徴が少なく、振幅が少ない絵柄であると言える。
従って、垂直方向ブロックn値化加算データピーク値が、所定値B以下のブロックは、所定値A以上のブロックに比べて、信頼性が低いと判断でき、結果として、他の有効ブロックに対して信頼性が低いと判断できるものである。従って、無効ブロックと判断される垂直方向ブロックについては、画像全体の水平方向動きベクトルの決定には使用しないことで、水平方向動きベクトルの信頼性を高めることができる。
図16は、垂直方向ブロックの有効/無効の判定を模式的に示す図である。
図16においては、横軸を垂直方向ブロックn値化加算データピーク値の最大値とし、縦軸を垂直方向ブロックn値化加算データピーク値としたグラフを表しており、垂直方向ブロックn値化加算データピーク値の最大値が所定値A以上のときは、垂直方向ブロックn値化加算データが所定値B以下の垂直方向ブロックを無効ブロックとして判断する動作が表されている。
また、図16においては、垂直方向ブロックn値化加算データピーク値の最大値が所定値Aよりも小さい場合には、垂直方向ブロックn値化加算データピーク値が所定値B以下のブロックが存在しても、当該ブロックについては無効ブロックと判断しないという動作も表されている。
例えば、図15を例に採れば、垂直方向ブロックn値化加算データピーク値の最大値が7である場合は、垂直方向ブロックvb0、vb1、vb5およびvb6は無効ブロックとは判断されない。これは、垂直方向ブロックn値化加算データピーク値が最大値であるブロックに対して、相対的には信頼性が低いとは言えないからである。
なお、上記においては、有効/無効の判定条件を、所定値Aを12とし、所定値Bを7とする例を示したが、これに限定されるものではなく、画像の水平方向画素数に依存し、例えば水平方向画素数が640画素である場合には、所定値Aは10程度の値に設定し、所定値Bはその半分前後の値に設定すれば良い。
<第1の閾値交差点の個数を用いる場合>
図17は、第1の閾値交差点の個数を用いて各垂直方向ブロックの有効/無効を判定する方法を説明する図である。
図17においては、図9(a)に示した640画素×480画素の画像データを例に採り、垂直方向に64画素の幅(分割幅)を有した7個の垂直方向ブロックvb0〜vb6に分割した場合を示している。
また、図17においては、第1の閾値交差点探索部29(図3)から出力される第1の閾値交差点の個数を、各ブロックごとに16進数表記で示している。
第1の閾値交差点探索部29では、第2の垂直方向ブロック射影ラインメモリ27に保存される前フレームに係る第2の垂直方向ブロック射影データの波形と、第2の垂直方向ブロック射影データ最大値保存部28で算出された第1の閾値とが交差する第1の閾値交差点の情報を出力するが、当該情報には第1の閾値交差点の個数についての情報も含まれており、図17に示すように、各垂直方向ブロックvb0〜vb6ごとに第1の閾値交差点の個数が得られる。
図18は、垂直方向ブロックの有効/無効の判定を模式的に示す図である。
図18においては、横軸を各垂直方向ブロックvb0〜vb6における第1の閾値交差点の個数の最大値とし、縦軸を第1の閾値交差点の個数としたグラフを表しており、水平方向動きベクトル決定部32では、各垂直方向ブロックvb0〜vb6における第1の閾値交差点の個数が、所定値D(例えば、10進数表記で3)以下のブロックについては、第1の閾値交差点の個数の最大値に関わりなく無効ブロックと判断する。図17の例では、垂直方向ブロックvb0およびvb6が無効ブロックと判断される。
無効ブロックと判断される垂直方向ブロックについては、画像全体の水平方向動きベクトルの決定には使用しないことで、水平方向動きベクトルの信頼性を高めることができる。
一方で、第1の閾値交差点の個数は少なくとも水平方向の画素数以下であり、水平方向の画素数と比較して余りにも個数が多い場合は非常に周期的な絵柄を捉えていると言えるので、例えば、所定値E以上(例えば、水平方向画素数の半分以上)となっているような場合には、そのブロックを無効ブロックと判断するように構成しても良い。
また、図19に示すように、第1の閾値交差点の個数の最大値が所定値C(>D)以上である場合にのみ、所定値D以下のブロックについては無効ブロックと判断するように構成しても良い。この場合、第1の閾値交差点の個数の最大値が所定値Cよりも小さい場合には、所定値D以下のブロックが存在しても、当該ブロックについては無効ブロックとは判断されず、無効ブロックの判定基準をより細かく設定できる。
なお、上記においては、有効/無効の判定条件を、所定値Dを3とし、所定値Eを水平方向画素数の半分とする例を示したが、これに限定されるものではない。
以上説明した第1の垂直方向ブロック射影データの最大値を用いて各垂直方向ブロックの有効/無効を判定する方法、垂直方向ブロックn値化加算データピーク値を用いて各垂直方向ブロックの有効/無効を判定する方法および第1の閾値交差点の情報を用いて各垂直方向ブロックの有効/無効を判定する方法を用いることで、無効ブロックを判定し、無効ブロックとされた垂直方向ブロックから算出された水平方向動きベクトルは、画像全体の水平方向動きベクトルを決定する際には使用しないようにすることで、動きベクトルの信頼性を高めることができる。
また、以上説明した3つの判定方法は、単独で用いても良いが組み合わせて用いても良い。
例えば、第1の垂直方向ブロック射影データの最大値を用いて有効/無効を判定するとともに、垂直方向ブロックn値化加算データピーク値を用いて各垂直方向ブロックの有効/無効を判定しても良いし、第1の垂直方向ブロック射影データの最大値を用いて有効/無効を判定するとともに、第1の閾値交差点の情報を用いて各垂直方向ブロックの有効/無効を判定しても良い。
このような組み合わせにより、無効ブロックを確実に選択することができ、動きベクトルの信頼性をさらに高めることができる。
<水平方向動きベクトルの決定方法>
水平方向動きベクトル決定部32では、上記のように垂直方向ブロックの有効/無効を判定し、有効ブロックと判定された垂直方向ブロックについて、その水平方向動きベクトルから画像全体の水平方向動きベクトルを決定する。
このとき、同じ水平方向動きベクトルを有する垂直方向ブロックを集め、ヒストグラムを作成する。
以下、図20および図21を用いて、画像全体の水平方向動きベクトルの決定方法の一例について説明する。
図20および図21においては、水平方向動きベクトルの検出範囲を−VないしVとする場合を示しており、ここでは、一例としてVが31の場合を示しており、−31から31まで1ベクトル間隔で表示されている。なお、各ベクトルに対応して設けたボックス内に表示された数字は、同じベクトルを有する垂直方向ブロックの個数を表している。
図20に示すように、各垂直方向ブロックについて算出された水平方向動きベクトルのうち、水平方向動きベクトル6については2つの垂直方向ブロックで算出されているが、他の垂直方向ブロックでは全てバラバラの水平方向動きベクトルとなっており、その分布範囲の最小値は−14、最大値は27となっており、その差41となって動きベクトル検出範囲に対して非常にバラツキがあると言える。なお、図20においては、現フレームの各垂直方向ブロックから得られた水平方向動きベクトルに対応するブロックに砂地のハッチングを付している。
水平方向動きベクトル決定部32では、各垂直方向ブロックから得られた水平方向動きベクトルの分布範囲の最大値と最小値の差が予め定めた閾値B(例えば、上述したV)以上のとき、各垂直方向ブロックから得られる水平方向動きベクトルは信頼性が低いとして、水平方向動きベクトルを0とする。
このような処理を行うことで、画像全体の水平方向動きベクトルの信頼性を高めることができる。
一方、水平方向動きベクトル6を有する垂直方向ブロックの個数が予め定めた数値A(例えば3)以上である場合には、各垂直方向ブロックから得られる水平方向動きベクトルは十分信頼できると判断する。
同様に、各垂直方向ブロックから得られた水平方向動きベクトルの最大値と最小値の差が閾値Bより小さい場合にも、各垂直方向ブロックから得られた水平方向動きベクトルは十分信頼できると判断する。
なお、数値A、閾値Bは上述した値に限るものではない。また、バラツキの判断も上述した水平方向動きベクトルの最大値と最小値の差で判断することに限定されず、標準偏差を用いて、例えば、標準偏差が閾値B以上のとき、バラツキが大きいと判断しても良い。
上述した処理の結果、各垂直方向ブロックから得られた水平方向動きベクトルが十分信頼できると判断できた場合、次の手順で現フレームの水平方向動きベクトルを算出する。
その概要は、現フレームの各垂直方向ブロックから出力された水平方向動きベクトルのうち、前フレームの水平方向動きベクトルに最も近い水平方向動きベクトルを現フレームの水平方向動きベクトルとするものである。
図21においては、各垂直方向ブロックから得られた水平方向動きベクトルの分布範囲の最大値と最小値の差が11である場合を示しており、閾値B(例えばV=31)よりも小さいため、水平方向動きベクトル決定部32では、各垂直方向ブロックから算出された水平方向動きベクトルは信頼性があるものと判断する。
ここで、図21においては水平方向動きベクトル5が前フレームの水平方向動きベクトルであり、これに最も近い現フレームの各垂直方向ブロックから得られた水平方向動きベクトルは、水平方向動きベクトル6である。従って、水平方向動きベクトル6が現フレームの水平方向動きベクトルと決定される。なお、図21においては、現フレームの各垂直方向ブロックから得られた水平方向動きベクトルに対応するブロックに砂地のハッチングを付し、前フレームの水平方向動きベクトルに対応するブロックに斜線のハッチングを付している。
ここで、複数の垂直方向ブロックの出力結果が同じ水平方向動きベクトルとなった場合、すなわち、ある水平方向動きベクトルの個数が2以上となった場合、個数1の水平方向動きベクトルは信頼性が低いものとして除外し、その上で前フレームの水平方向動きベクトルに最も近い水平方向動きベクトルを求め、その水平方向動きベクトルを現フレームの水平方向動きベクトルとしても良い。
この方法を採る場合、図21の例では、水平方向動きベクトル8が現フレームの水平方向動きベクトルとなる。
なお、前フレームの水平方向動きベクトルに最も近い水平方向動きベクトルが2つ存在する場合には、その平均、つまり、前フレームの水平方向動きベクトルそのものを現フレームの水平方向動きベクトルとすれば良い。
ここで、前フレームの水平方向動きベクトルの情報は、水平方向動きベクトル決定部32内に設けられた所定の記憶部(前フレーム水平方向動きベクトル保存手段)に保存しておき、必要に応じて読み出すように構成されている。
以上説明したように、垂直方向ブロックの有効/無効の判定動作により信頼性の低い垂直方向ブロックを除外した上で、信頼性の高い垂直方向ブロックに基づいて算出される水平方向動きベクトルについてバラツキを考慮して画像全体の水平方向動きベクトルの信頼性を評価し、信頼できると判断した場合にも、前フレームの水平方向動きベクトルを考慮することで、前フレームからの動きを加味した違和感の少ない水平方向動きベクトルを決定することができる。
<垂直方向動きベクトル検出部4の動作>
次に、動きベクトル検出装置1において画像の垂直方向の動きベクトルを検出する垂直方向動きベクトル検出部4の動作を説明する。
図2のように水平ラインの画素走査を垂直方向に順に繰り返すことによって読み出されるフレーム画像が、図6に示す垂直方向動きベクトル検出部4の入力端子40に入力されると、水平方向画像分割部41で水平方向にブロック分割される。すなわち、水平方向画像分割部41においては、フレーム画像において水平方向に分割して得られる複数の画像領域(水平方向ブロック)が設定される。これにより、以降の処理では、水平方向ブロックごとに処理や管理が行われることとなる。
水平方向画像分割部41では、例えば図22(a)に示すように640画素×480画素の画像データが、水平方向に64画素の幅(分割幅)を有した10個の垂直方向ブロックhb0〜hb9に分割される。なお、図22(a)に示す分割幅および分割数とするのは必須ではない。
水平方向画像分割部41で図22(a)のように10個の水平方向ブロックhb0〜hb9に分割された画像は、水平方向エッジ抽出フィルタリング部42において水平方向に延びるエッジ成分の抽出、換言すれば垂直方向に急峻に変化する画像部分を強調するようなフィルタリング処理が施される。
このフィルタリング処理で用いられるフィルタとしては、単純に水平方向に隣接する画素との差分を取る(1,−1)の2タップフィルタや、2次微分に相当する(−1,2,−1)の3タップフィルタなどの使用が可能である。なお、このようなフィルタを使用するのは必須でなく、垂直方向に輝度変化が大きくなる画像部分において出力値が上昇するフィルタであれば良い。
水平方向エッジ抽出フィルタリング部42で各水平方向ブロック(画像領域)hb0〜hb9ごとに水平方向のエッジが強調された画像データは、水平方向ブロック射影部43に入力され、水平方向ブロック射影部43で水平方向に射影される。この射影により、水平方向の(ライン間で)ノイズ成分を低減でき、また水平方向のエッジ成分をより強調できるため、特徴点に対応する水平方向エッジを際立たせて動きベクトル検出精度の向上を図れることとなる。水平方向ブロック射影部43の動作について、図22(b)の概念図を参照しつつ説明する。
水平方向ブロック射影部43では、図22(a)に示す各水平方向ブロックhb0〜hb9の1水平ラインの入力が完了した時点で、1垂直ライン分のデータ配列Mhを有する水平方向ブロック射影データhn0〜hn9(図22(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から入力された水平方向ブロックの射影データに関する最大値を算出し、現フレームの水平方向ブロック射影データ最大値として保存する。
第2の水平方向ブロック射影ラインメモリ46は、第1の水平方向ブロック射影ラインメモリ44から読み出された水平方向ブロック射影データを、前フレームに関する第2の水平方向ブロック射影データとして保存する。同様に、第2の水平方向ブロック射影データ最大値保存部47では、第1の水平方向ブロック射影データ最大値保存部45から出力された水平方向ブロック射影データの最大値が、前フレームに関する第2の水平方向ブロック射影データの最大値として保存される。換言すれば、第1の水平方向ブロック射影データ最大値保存部45に保存された現フレームの水平方向ブロック射影データの最大値は、次のフレームでは、第2の水平方向ブロック射影データ最大値保存部47に前フレームの水平方向ブロック射影データの最大値として保存されることとなる。
また、第2の水平方向ブロック射影データ最大値保存部47では、算出された前フレームの水平方向ブロック射影データ最大値に基づき、第4の閾値を算出する。例えば、前フレームの水平方向ブロックの射影データに関する最大値をP4maxとすると、第4の閾値α4は次の式(3)で算出される。
α4=P4max×k4・・・・・・・・(3)
ここで、k4は予め定められた係数で、0<k4<1である。
なお、第4の閾値α4の演算は、上式(3)に限るものではなく、前フレームの水平方向ブロック射影データ最大値P4maxが大きくなれば第4の閾値α4が大きくなるものであれば良く、また変換テーブルを使用しても良い。また、第4の閾値α4については、各水平方向ブロックごとの第2の水平方向ブロック射影データの最大値を使用するのは必須でなく、例えば前フレームの画像全体についての水平方向ブロック射影データ最大値を用いて第4の閾値を算出し、画像全体で同じ第4の閾値を採用しても良い。
第2の水平方向ブロック射影データ最大値保存部47は、前フレームに関する第2の水平方向ブロック射影データの最大値に基づき、第3の閾値(所定の一定値)が設定される。例えば、前フレームの水平方向ブロック射影データの最大値をP3maxとすると、第3の閾値α3は次の式(4)で算出される。
α3=P3max×k3・・・・・・・・(4)
ここで、k3は予め定められた係数で、0<k3<1である。
なお、第3の閾値α3の演算は、上式(4)に限るものではなく、前フレームの水平方向ブロック射影データ最大値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(図22(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の動作について、図23(a)、図23(b)および図23(c)を参照しつつ具体的に説明する。なお、図23(a)および図23(b)の横軸は、射影データのデータ配列Mh(図22(b))の配列要素の位置を示している。また、図23(a)では、第3の閾値交差点B(1)〜B(6)それぞれを丸印で表している。
第3の閾値交差点探索部48では、図23(a)に示すように前フレームに関する第2の垂直方向ブロック射影データW4の波形において、第2の水平方向ブロック射影データ最大値保存部47から出力された第3の閾値α3と交差する第3の閾値交差点B(1)〜B(6)が求められる。すなわち、第3の閾値交差点探索部48は、前フレームに対して水平方向ブロック射影部43で得られた射影データに関して射影データのデータ配列Mh(図22(b))の要素順に配列要素の値をグラフ化した波形W4と、配列要素の値が第3の閾値(所定の一定値)α3となる直線とが交差する各第3の閾値交差点の配列要素の位置を特定する。
次に、水平方向ブロック射影データ読み出し部49では、図23(a)に示す各第3の閾値交差点B(1)〜B(6)を中心とした所定の動きベクトル検出範囲について第1の水平方向ブロック射影ラインメモリ44から現フレームの水平方向ブロック射影データが読み出される。すなわち、水平方向ブロック射影データ読み出し部49は、各第3の閾値交差点における射影データ(データ配列)の配列要素の位置を中心とした所定範囲のデータ配列を、水平方向ブロック射影部43で得られた現フレーム(後フレーム)の射影データから抽出する。例えば第3の閾値交差点B(4)に関しては、図23(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)に関しては、図23(b)に示す第4の閾値α4および(−α4)に対する第1の水平方向ブロック射影データW3の大小関係に基づき、第3の閾値交差点B(4)を中心に(B(4)−U)から(B(4)+U)までの範囲(矩形の破線内の波形部分)について、図23(c)のように第1の水平方向ブロック射影データが3値化処理される。これにより、現フレームの水平方向ブロック射影データが「−1」、「0」または「1」で表されることとなる。
n値化器504では、第3の閾値交差点探索部48から出力される全ての第3の閾値交差点について、図23(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に出力される。同様に、そのときのピーク値は出力端子509から出力される。
以上で説明した加算器505およびピーク検出部507の動作について、図24(a)および図24(b)を参照しつつ具体的に説明する。なお、図24(a)では、図23(a)に示す第3の閾値交差点B(1)〜B(6)を中心とした動きベクトル検出範囲(±Uの範囲)において第1の水平方向ブロック射影データを3値化したものを概念的に示している。
加算器505において、図24(a)に示す第3の閾値交差点B(1)〜B(6)周辺の3値化データが順次に入力されると、これらのデータが加算され、図24(b)に示すような水平方向ブロックn値化データが生成される。具体的には、加算器505において水平方向ブロック射影データ読み出し部49により水平方向ブロック射影データ(データ配列Mh(図22(b)))から抽出されn値器504でデータ長が圧縮された現フレームに係る動きベクトル検出範囲(所定範囲)のデータ配列それぞれについて、各第3の閾値交差点の配列要素の位置に対して相対位置が同じ配列要素同士の値が加算されることとなる。
加算器505で生成された水平方向ブロックn値化データがピーク検出器507に入力されると、その水平方向ブロックの垂直方向動きベクトルとして図24(b)に示す垂直方向のピーク位置vvが検出される。すなわち、ピーク検出器507では、加算器505で加算された加算結果に基づき、フレーム画像の垂直方向に関する動きベクトルが検出される。
このピーク検出器507では、原則的に動きベクトル検出範囲(±Uの範囲)において最大値となるピーク位置が探索されるが、同一の最大値が複数ある場合には、原点0に近いもの(原点0までの距離が等しい場合には負の位置のもの)を優先する。なお、このようなピーク位置の検出ルールに限らず、正の位置にある最大値を優先しても良く、また前フレームにおける動きベクトルの傾向を現フレームのピーク位置の検出に利用するようにしても良い。
ピーク検出器507で水平方向ブロックごとに算出された垂直方向動きベクトル(ピーク位置)と、水平方向ブロックのn値化され加算された加算データのピーク値(以下、「水平方向ブロックn値化加算データピーク値」とも言う)は、それぞれ出力端子508および509を介して垂直方向動きベクトル決定部51に入力され、水平方向ブロックn値化加算データピーク値は、水平方向ブロックの有効/無効判定に使用される。
垂直方向動きベクトル決定部51(図6)では、水平方向ブロック垂直方向動きベクトル算出部50から順次に出力される各水平方向ブロックの垂直方向動きベクトルに基づき、画像全体の垂直方向動きベクトルが決定される。
このとき、垂直方向動きベクトル決定部51では、第1の水平方向ブロック射影データ最大値保存部45から出力される第1の水平方向ブロック射影データの最大値、水平方向ブロック垂直方向動きベクトル算出部50から出力される水平方向ブロックn値化加算データピーク値および第3の閾値交差点探索部48から出力される第3の閾値交差点の情報に基づいて各水平方向ブロックの有効/無効を判定する。そして、無効ブロックと判定された水平方向ブロックから算出された垂直方向動きベクトルは画像全体の垂直方向動きベクトルを決定する際には使用しないものとする。
<水平方向ブロックの有効/無効の判定動作>
<第1の水平方向ブロック射影データの最大値を用いる場合>
以下、各水平方向ブロックの有効/無効を判定する方法について説明する。
図25は、第1の水平方向ブロック射影データの最大値を用いて各水平方向ブロックの有効/無効を判定する方法を説明する図である。
図25においては、図22(a)に示した640画素×480画素の画像データを例に採り、水平方向に64画素の幅(分割幅)を有した10個の水平方向ブロックhb0〜hb9に分割した場合を示している。
また、図25においては、第1の水平方向ブロック射影データ最大値保存部45(図6)から出力される各水平方向ブロックの第1の水平方向ブロック射影データの最大値を、各ブロックごとに16進数表記で示している。
垂直方向動きベクトル決定部51では、各水平方向ブロックhb0〜hb9における第1の水平方向ブロック射影データの最大値の中から全ブロック中の最大値を求める。図25の例では、水平方向ブロックhb4が全ブロック中の最大値を有しており、この値を全水平方向ブロック射影データ最大値と呼称する。
また、垂直方向動きベクトル決定部51では、全水平方向ブロック射影データ最大値に対して、例えば1/4以下の最大値しか有さない水平方向ブロックを無効ブロックとして判断する。図25の例では、水平方向ブロックhb0、hb1、hb8およひhb9が無効ブロックと判断される。
図26は、水平方向ブロックの有効/無効の判定を模式的に示す図である。
図26においては、横軸を全水平方向ブロック射影データ最大値とし、縦軸を第1の水平方向ブロック射影データ最大値としたグラフを表しており、原点を起点とした傾き1/4(S=1/4)の直線を境にして、有効ブロックと無効ブロックとに分かれることが表されている。
無効ブロックと判断される水平方向ブロックは、絵柄として特徴の少ない(くっきりとした箇所が少ない)、あるいは、非常に細かい絵柄であると言うことができ、結果として、他の有効ブロックに対して信頼性が低いと判断できるものである。従って、無効ブロックと判断される水平方向ブロックについては、画像全体の垂直方向動きベクトルの決定には使用しないことで、垂直方向動きベクトルの信頼性を高めることができる。
なお、上記においては、有効/無効の判定条件を、全水平方向ブロック射影データ最大値の1/4以下として説明したが、これに限るものではなく、場合によっては1/2以下、あるいは1/8以下としても良い。このように、判定条件1/2nで設定することにより、有効、無効の判定を簡単に行うことが可能である。
<水平方向ブロックn値化加算データピーク値を用いる場合>
図27は、水平方向ブロックn値化加算データピーク値を用いて各水平方向ブロックの有効/無効を判定する方法を説明する図である。
図27においては、図22(a)に示した640画素×480画素の画像データを例に採り、垂直方向に64画素の幅(分割幅)を有した10個の水平方向ブロックhb0〜hb9に分割した場合を示している。
また、図27においては、水平方向ブロック垂直方向動きベクトル算出部50(図6)から出力される各水平方向ブロックの水平方向ブロックn値化加算データピーク値を、各ブロックごとに16進数表記で示している。
垂直方向動きベクトル決定部51では、各水平方向ブロックhb0〜hb9における水平方向ブロックn値化加算データピーク値の中から最大値を求める。図27の例では、水平方向ブロックhb4が最大値を有しており、この値を水平方向ブロックn値化加算データピーク値の最大値と呼称する。
また、垂直方向動きベクトル決定部51では、水平方向ブロックn値化加算データピーク値の最大値が所定値A(例えば、10進数表記で12)以上のとき、水平方向ブロックn値化加算データが所定値B(例えば、10進数表記で7)以下の水平方向ブロックを無効ブロックとして判断する。図27の例では、垂直方向ブロックhb0、hb1、hb7、hb8およびhb9が無効ブロックと判断される。
水平方向ブロック垂直方向動きベクトル算出部50(図6)の加算器505(図8)の出力は、第3の閾値交差点を中心に、第4の閾値でn値化された第1の水平方向ブロック射影データを加算したものであり、第3の閾値交差点が多く、かつ、プラス側の第4の閾値(α4)を超える振幅(山)が多いほど大きな値となる。逆に、マイナス側の第4の閾値(−α4)を超える振幅があれば打ち消されることになる。
言い換えれば、加算器505の出力の最大値、つまり、ある水平方向ブロックの水平方向ブロックn値化加算データピーク値が所定値A以上であり、その一方で、他の水平方向ブロックの水平方向ブロックn値化加算データピーク値が所定値B以下であるとき、当該他の水平方向ブロックにおいては加算結果が打ち消される絵柄、あるいは、特徴が少なく、振幅が少ない絵柄であると言える。
従って、水平方向ブロックn値化加算データピーク値が、所定値B以下のブロックは、所定値A以上のブロックに比べて、信頼性が低いと判断できる。従って、無効ブロックと判断される水平方向ブロックについては、画像全体の垂直方向動きベクトルの決定には使用しないことで、垂直方向動きベクトルの信頼性を高めることができる。
図28は、水平方向ブロックの有効/無効の判定を模式的に示す図である。
図28においては、横軸を水平方向ブロックn値化加算データピーク値の最大値とし、縦軸を水平方向ブロックn値化加算データピーク値としたグラフを表しており、水平方向ブロックn値化加算データピーク値の最大値が所定値A以上のときは、水平方向ブロックn値化加算データが所定値B以下の水平方向ブロックを無効ブロックとして判断する動作が表されている。
また、図28においては、水平方向ブロックn値化加算データピーク値の最大値が所定値Aよりも小さい場合には、水平方向ブロックn値化加算データピーク値が所定値B以下のブロックが存在しても、当該ブロックについては無効ブロックと判断しないという動作も表されている。
例えば、図27を例に採れば、水平方向ブロックn値化加算データピーク値の最大値が7である場合は、垂直方向ブロックhb0、hb1、hb7、hb8およびhb9は無効ブロックとは判断されない。これは、水平方向ブロックn値化加算データピーク値が最大値であるブロックに対して、相対的には信頼性が低いとは言えないからである。
なお、上記においては、有効/無効の判定条件を、所定値Aを12とし、所定値Bを7とする例を示したが、これに限定されるものではなく、画像の垂直方向画素数に依存し、例えば垂直方向画素数が480画素である場合には、所定値Aは10程度の値に設定し、所定値Bはその半分前後の値に設定すれば良い。
<第3の閾値交差点の個数を用いる場合>
図29は、第3の閾値交差点の個数を用いて各垂直方向ブロックの有効/無効を判定する方法を説明する図である。
図29においては、図22(a)に示した640画素×480画素の画像データを例に採り、垂直方向に64画素の幅(分割幅)を有した10個の水平方向ブロックhb0〜hb9に分割した場合を示している。
また、図29においては、第3の閾値交差点探索部48(図6)から出力される第3の閾値交差点の個数を、各ブロックごとに16進数表記で示している。
第3の閾値交差点探索部48では、第2の水平方向ブロック射影ラインメモリ46に保存される前フレームに係る第2の水平方向ブロック射影データの波形と、第2の水平方向ブロック射影データ最大値保存部45で算出された第3の閾値とが交差する第3の閾値交差点の情報を出力するが、当該情報には第3の閾値交差点の個数についての情報も含まれており、図29に示すように、各水平方向ブロックhb0〜hb9ごとに第3の閾値交差点の個数が得られる。
図30は、水平方向ブロックの有効/無効の判定を模式的に示す図である。
図30においては、横軸を各水平方向ブロックhb0〜hb9における第3の閾値交差点の個数の最大値とし、縦軸を第3の閾値交差点の個数としたグラフを表しており、垂直方向動きベクトル決定部51(図6)では、各水平方向ブロックhb0〜hb9における第3の閾値交差点の個数が、所定値D(例えば、10進数表記で3)以下のブロックについては、第3の閾値交差点の個数の最大値に関わりなく無効ブロックと判断する。図29の例では、水平方向ブロックhb0およびhb9が無効ブロックと判断される。
無効ブロックと判断される水平方向ブロックについては、画像全体の垂直方向動きベクトルの決定には使用しないことで、垂直方向動きベクトルの信頼性を高めることができる。
一方で、第3の閾値交差点の個数は少なくとも垂直方向の画素数以下であり、垂直方向の画素数と比較して余りにも個数が多い場合は非常に周期的な絵柄を捉えていると言えるので、例えば、所定値E以上(例えば、垂直方向画素数の半分以上)となっているような場合には、そのブロックを無効ブロックと判断するように構成しても良い。例えば、図29の水平方向ブロックhb4では、第3の閾値交差点の個数が241であり、垂直方向画素数の半分以上あるので、無効ブロックと判断される。
また、図31に示すように、第3の閾値交差点の個数の最大値が所定値C(>D)以上である場合にのみ、所定値D以下のブロックについては無効ブロックと判断するように構成しても良い。この場合、第3の閾値交差点の個数の最大値が所定値Cよりも小さい場合には、所定値D以下のブロックが存在しても、当該ブロックについては無効ブロックとは判断されず、無効ブロックの判定基準をより細かく設定できる。
なお、上記においては、有効/無効の判定条件を、所定値Dを3とし、所定値Eを垂直方向画素数の半分とする例を示したが、これに限定されるものではない。
以上説明した第1の水平方向ブロック射影データの最大値を用いて各水平方向ブロックの有効/無効を判定する方法、水平方向ブロックn値化加算データピーク値を用いて各水平方向ブロックの有効/無効を判定する方法および第3の閾値交差点の情報を用いて各水平方向ブロックの有効/無効を判定する方法を用いることで無効ブロックを判定し、無効ブロックとされた水平方向ブロックから算出された垂直方向動きベクトルは、画像全体の垂直方向動きベクトルを決定する際には使用しないようにすることで、動きベクトルの信頼性を高めることができる。
また、以上説明した3つの判定方法は、単独で用いても良いが組み合わせて用いても良い。
例えば、第1の水平方向ブロック射影データの最大値を用いて有効/無効を判定するとともに、水平方向ブロックn値化加算データピーク値を用いて各水平方向ブロックの有効/無効を判定しても良いし、第1の水平方向ブロック射影データの最大値を用いて有効/無効を判定するとともに、第3の閾値交差点の情報を用いて各水平方向ブロックの有効/無効を判定しても良い。
このような組み合わせにより、無効ブロックを確実に選択することができ、動きベクトルの信頼性をさらに高めることができる。
<垂直方向動きベクトルの決定方法>
垂直方向動きベクトル決定部51では、上記のように水平方向ブロックの有効/無効を判定し、有効ブロックと判定された水平方向ブロックについて、その垂直方向動きベクトルから画像全体の垂直方向動きベクトルを決定する。
このとき、同じ垂直方向動きベクトルを有する水平方向ブロックを集め、ヒストグラムを作成する。
以下、図32および図33を用いて、画像全体の垂直方向動きベクトルの決定方法の一例について説明する。
図32および図33においては、水平方向動きベクトルの検出範囲を−VないしVとする場合を示しており、ここでは、一例としてVが31の場合を示しており、−31から31まで1ベクトル間隔で表示されている。なお、各ベクトルに対応して設けたボックス内に表示された数字は、同じベクトルを有する水平方向ブロックの個数を表している。
図32に示すように、各水平方向ブロックについて算出された垂直方向動きベクトルのうち、垂直方向動きベクトル−3および垂直方向動きベクトル2については2つの水平方向ブロックで算出されているが、他の水平方向ブロックでは全てバラバラの垂直方向動きベクトルとなっており、その分布範囲の最小値は−26、最大値は8となっており、その差34となって動きベクトル検出範囲に対して非常にバラツキがあると言える。なお、図32においては、現フレームの各水平方向ブロックから得られた垂直方向動きベクトルに対応するブロックに砂地のハッチングを付している。
垂直方向動きベクトル決定部51では、各水平方向ブロックから得られた垂直方向動きベクトルの最大値と最小値の差が予め定めた閾値B(例えば、上述したV)以上のとき、各水平方向ブロックから得られる垂直方向動きベクトルは信頼性が低いとして、垂直方向動きベクトルを0とする。
このような処理を行うことで、画像全体の水平方向動きベクトルの信頼性を高めることができる。
一方、垂直方向動きベクトル−3および垂直方向動きベクトル2を有する水平方向ブロックの個数が予め定めた数値A(例えば3)以上である場合には、各水平方向ブロックから得られる垂直方向動きベクトルは十分信頼できると判断する。
同様に、各水平方向ブロックから得られた垂直方向動きベクトルの最大値と最小値の差が閾値Bより小さい場合にも、各水平方向ブロックから得られた垂直方向動きベクトルは十分信頼できると判断する。
なお、数値A、閾値Bは上述した値に限るものではない。また、バラツキの判断も上述した垂直方向動きベクトルの最大値と最小値の差で判断することに限定されず、標準偏差を用いて、例えば、標準偏差が閾値B以上のとき、バラツキが大きいと判断しても良い。
上述した処理の結果、各水平方向ブロックから得られた垂直方向動きベクトルが十分信頼できると判断できた場合、次の手順で現フレームの垂直方向動きベクトルを算出する。
その概要は、現フレームの各水平方向ブロックから出力された垂直方向動きベクトルのうち、前フレームの垂直方向動きベクトルに最も近い垂直方向動きベクトルを現フレームの垂直方向動きベクトルとするものである。
図33においては、各水平方向ブロックから得られた垂直方向動きベクトルの分布範囲の最大値と最小値の差が9である場合を示しており、閾値B(例えばV=31)よりも小さいため、垂直方向動きベクトル決定部51では、各水平方向ブロックから算出された垂直方向動きベクトルは信頼性があるものと判断する。
ここで、図33においては垂直方向動きベクトル8が前フレームの垂直方向動きベクトルであり、これに最も近い現フレームの各水平方向ブロックから得られた垂直方向動きベクトルは、垂直方向動きベクトル6である。従って、垂直方向動きベクトル6が現フレームの垂直方向動きベクトルと決定される。なお、図33においては、現フレームの各水平方向ブロックから得られた垂直方向動きベクトルに対応するブロックに砂地のハッチングを付し、前フレームの垂直方向動きベクトルに対応するブロックに斜線のハッチングを付している。
ここで、複数の水平方向ブロックの出力結果が同じ垂直方向動きベクトルとなった場合、すなわち、ある垂直方向動きベクトルの個数が2以上となった場合、個数1の垂直方向動きベクトルは信頼性が低いものとして除外し、その上で前フレームの垂直方向動きベクトルに最も近い垂直方向動きベクトルを求め、その垂直方向動きベクトルを現フレームの垂直方向動きベクトルとしても良い。
この方法を採る場合、図33の例では、垂直方向動きベクトル5が現フレームの水平方向動きベクトルとなる。
なお、前フレームの垂直方向動きベクトルに最も近い垂直方向動きベクトルが2つ存在する場合には、その平均、つまり、前フレームの垂直方向動きベクトルそのものを現フレームの垂直方向動きベクトルとすれば良い。
ここで、前フレームの垂直方向動きベクトルの情報は、垂直方向動きベクトル決定部51内に設けられた所定の記憶部(前フレーム垂直方向動きベクトル保存手段)に保存しておき、必要に応じて読み出すように構成されている。
以上説明したように、水平方向ブロックの有効/無効の判定動作により信頼性の低い水平方向ブロックを除外した上で、信頼性の高い水平方向ブロックに基づいて算出される垂直方向動きベクトルについてバラツキを考慮して画像全体の垂直方向動きベクトルの信頼性を評価し、信頼できると判断した場合にも、前フレームの垂直方向動きベクトルを考慮することで、前フレームからの動きを加味した違和感の少ない垂直方向動きベクトルを決定することができる。
<効果>
以上に説明したように、実施の形態1に係る動きベクトル検出装置1の水平方向動きベクトル検出部2においては、水平方向動きベクトル決定部32において、第1の垂直方向ブロック射影データ最大値保存部24から出力される第1の垂直方向ブロック射影データの最大値、垂直方向ブロック水平方向動きベクトル算出部31から出力される垂直方向ブロックn値化加算データピーク値、第1の閾値交差点探索部29から出力される第1の閾値交差点の情報に基づいて、垂直方向ブロックの有効/無効の判断を行うため、信頼性の低い垂直方向ブロックから得られた水平方向動きベクトルを除外することができ、結果的に、信頼性の高い水平方向動きベクトルを算出することができる。
また、信頼性の高い垂直方向ブロックに基づいて算出される水平方向動きベクトルについてバラツキを考慮して画像全体の水平方向動きベクトルの信頼性を評価し、信頼できると判断した場合にも、前フレームの水平方向動きベクトルを考慮することで、前フレームからの動きを加味した違和感の少ない水平方向動きベクトルを決定することができる。
また、垂直方向動きベクトル検出部4においては、垂直方向動きベクトル決定部51において、第1の水平方向ブロック射影データ最大値保存部45から出力される第1の水平方向ブロック射影データの最大値、水平方向ブロック垂直方向動きベクトル算出部50から出力される水平方向ブロックn値化加算データピーク値、第3の閾値交差点探索部48から出力される第3の閾値交差点の情報に基づいて、水平方向ブロックの有効/無効の判断を行うため、信頼性の低い水平方向ブロックから得られた垂直方向動きベクトルを除外することができ、結果的に、信頼性の高い垂直方向動きベクトルを算出することができる。
また、信頼性の高い水平方向ブロックに基づいて算出される垂直方向動きベクトルについてバラツキを考慮して画像全体の垂直方向動きベクトルの信頼性を評価し、信頼できると判断した場合にも、前フレームの垂直方向動きベクトルを考慮することで、前フレームからの動きを加味した違和感の少ない垂直方向動きベクトルを決定することができる。
<実施の形態2>
<動きベクトル検出装置の構成>
本発明の実施の形態2に係る動きベクトル検出装置1Aについては、図1に示す実施の形態1の動きベクトル検出装置1と類似の構成を有しているが、水平方向動きベクトル検出部と垂直方向動きベクトル検出部との構成が異なっている。この動きベクトル検出装置1Aにおける水平方向動きベクトル検出部2Aおよび垂直方向動きベクトル検出部4Aの構成について図34および図35を参照して説明する。
図34は、水平方向動きベクトル検出部2Aの要部構成を示すブロック図である。なお、図34では、実施の形態1と同様の機能を有する部位には同一の符号を付している。
水平方向動きベクトル検出部2Aでは、実施の形態1の水平方向動きベクトル検出部2に対して垂直方向画像分割部21と垂直方向エッジ抽出フィルタリング部22との配置が逆転している。以下では、この水平方向動きベクトル検出部2Aの動作について説明する。
図2に示すように水平ラインの画素走査を垂直方向に順に繰り返すことによって読み出されるフレーム画像が、水平方向動きベクトル検出部2Aの入力端子20に入力されると、垂直方向エッジ抽出フィルタリング部22において垂直方向に延びるエッジ成分の抽出、換言すれば水平方向に急峻に変化する画像部分を強調するようなフィルタリング処理が施される。
垂直方向エッジ抽出フィルタリング部22で垂直方向のエッジが強調されたフレーム画像が垂直方向画像分割部21に入力されると、垂直方向にブロック分割される。すなわち、垂直方向画像分割部21では、エッジ強調が施されたフレーム画像を垂直方向に分割して得られる複数の画像領域(垂直方向ブロック)が設定される。これにより、以降の処理では、垂直方向ブロックごとに処理および管理が行われることとなる。
垂直方向画像分割部21で分割された画像データは、垂直方向ブロック射影部23に入力されるが、この垂直方向ブロック射影部23以降の処理は、実施の形態1の水平方向動きベクトル検出部2と同様の処理が行われる。
図35は、垂直方向動きベクトル検出部4Aの要部構成を示すブロック図である。なお、図35では、実施の形態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の閾値交差点、α1 第1の閾値、α2 第2の閾値、B(1)〜B(6) 第3の閾値交差点、α3 第3の閾値、α4 第4の閾値。