以下に本発明の実施の形態を説明するが、本発明の構成要件と、明細書または図面に記載の実施の形態との対応関係を例示すると、次のようになる。この記載は、本発明をサポートする実施の形態が、明細書または図面に記載されていることを確認するためのものである。従って、明細書または図面中には記載されているが、本発明の構成要件に対応する実施の形態として、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その構成要件に対応するものではないことを意味するものではない。逆に、実施の形態が構成要件に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その構成要件以外の構成要件には対応しないものであることを意味するものでもない。
本発明の一側面の画像処理装置は、第1のフレーム上の動きベクトルを検出し、検出した動きベクトルを内挿フレームに割り付けて、前記内挿フレーム上の画素値を生成する画像処理装置において、前記第1のフレーム上の動きベクトルを検出するための勾配法演算の対象となる演算ブロック内の画素が、前記動きベクトルの検出に有効であるか否かを判定する有効画素判定手段(例えば、図47の画素判定部422)と、前記演算ブロック内の画素のうち、前記有効画素判定手段により前記動きベクトルの検出に有効であると判定された画素の数の、第1のしきい値、および前記第1のしきい値よりも小さい値である第2のしきい値を用いた比較判定を行う画素数判定手段(例えば、図47の勾配法継続判定部551)と、前記画素数判定手段により前記動きベクトルの検出に有効であると判定された画素の数が前記第1のしきい値よりも多いと判定された場合、前記動きベクトルの検出に有効であると判定された画素のみを用いて勾配法演算により得られた動きベクトルを、前記動きベクトルを検出するための勾配法の初期値として用いられる初期ベクトルの候補ベクトルおよび前記内挿フレームに割り付けられる検出ベクトルとして決定し、前記画素数判定手段により前記動きベクトルの検出に有効であると判定された画素の数が前記第2のしきい値よりも少ないと判定された場合、前記0ベクトルを、前記初期ベクトルの候補ベクトルおよび前記検出ベクトルとして決定し、前記画素数判定手段により前記動きベクトルの検出に有効であると判定された画素の数が前記第1のしきい値よりも少なく、前記第2のしきい値よりも多いと判定された場合、前記勾配法演算により得られた動きベクトルを、前記初期ベクトルの候補ベクトルとして決定し、前記0ベクトルを前記検出ベクトルとして決定するベクトル決定手段(例えば、図45の評価判定部541)とを備える。
前記有効画素判定手段は、前記動きベクトルを検出する対象の前記第1のフレーム上の前記演算ブロック内の画素の第1の空間の画素差分を算出する第1の空間差分算出手段(例えば、図47の第1空間勾配画素差分算出部421−1)と、前記第1のフレームの次の第2のフレーム上の前記演算ブロック内の画素の第2の空間の画素差分を算出する第2の空間差分算出手段(例えば、図47の第2空間勾配画素差分算出部421−2)と、前記第1のフレームおよび前記第2のフレーム上の前記演算ブロック内の画素の時間方向の画素差分を算出する時間差分算出手段(例えば、図47の時間方向画素差分算出部421−3)とを備え、前記第1および第2の空間差分算出手段、並びに、前記時間差分算出手段により算出された前記第1および第2空間、並びに、前記時間方向の画素差分に基づき、前記演算ブロック内の画素が、前記動きベクトルの検出に有効であると判定することができる。
前記画素数判定手段による前記第1および第2のしきい値を用いた比較判定の結果に応じて、前記勾配法演算を反復するか否かを判定する反復判定手段(例えば、図45のベクトル評価部523)をさらに備えることができる。
前記有効画素判定手段は、前記動きベクトルを検出する対象の第1のフレーム上の前記演算ブロック内の画素の第1の空間の画素差分を算出する第1の空間差分算出手段(例えば、図47の第1空間勾配画素差分算出部421−1)と、前記第1のフレームの次の第2のフレーム上の前記演算ブロック内の画素の第2の空間の画素差分を算出する第2の空間差分算出手段(例えば、図47の第2空間勾配画素差分算出部421−2)と、前記第1のフレームおよび前記第2のフレーム上の前記演算ブロック内の画素の時間方向の画素差分を算出する時間差分算出手段(例えば、図47の時間方向画素差分算出部421−3)と、前記第1および第2の空間差分算出手段、並びに、前記時間差分算出手段により算出された前記第1および第2空間、並びに、前記時間方向の画素差分に基づく、前記画素の勾配の類似性が所定のしきい値よりも小さいか否かを判定する勾配類似性判定手段(例えば、図47の有効画素判定部431)を備え、前記勾配類似性判定手段により前記画素の勾配の類似性が所定のしきい値よりも小さいと判定された場合、前記演算ブロック内の画素が、前記動きベクトルの検出に有効であると判定することができる。
本発明の一側面の画像処理方法またはプログラムは、第1のフレーム上の動きベクトルを検出し、検出した動きベクトルを内挿フレームに割り付けて、前記内挿フレーム上の画素値を生成する画像処理装置の画像処理方法において、または、第1のフレーム上の動きベクトルを検出し、検出した動きベクトルを第2のフレームに割り付けて、前記第2のフレーム上の画素値を生成する処理をコンピュータに実行させるプログラムであって、前記第1のフレーム上の動きベクトルを検出するための勾配法演算の対象となる演算ブロック内の画素が、前記動きベクトルの検出に有効であるか否かを判定する有効画素判定ステップ(例えば、図63のステップS553)と、前記演算ブロック内の画素のうち、前記有効画素判定ステップの処理により前記動きベクトルの検出に有効であると判定された画素の数の、第1のしきい値、および前記第1のしきい値よりも小さい値である第2のしきい値を用いた比較判定を行う画素数判定ステップ(例えば、図63のステップS554およびS559)と、前記画素数判定ステップの処理により前記動きベクトルの検出に有効であると判定された画素の数が前記第1のしきい値よりも多いと判定された場合、前記動きベクトルの検出に有効であると判定された画素のみを用いて勾配法演算により得られた動きベクトルを、前記動きベクトルを検出するための勾配法の初期値として用いられる初期ベクトルの候補ベクトルおよび前記内挿フレームに割り付けられる検出ベクトルとして決定し、前記画素数判定ステップの処理により前記動きベクトルの検出に有効であると判定された画素の数が前記第2のしきい値よりも少ないと判定された場合、前記0ベクトルを、前記初期ベクトルの候補ベクトルおよび前記検出ベクトルとして決定し、前記画素数判定ステップの処理により前記動きベクトルの検出に有効であると判定された画素の数が前記第1のしきい値よりも少なく、前記第2のしきい値よりも多いと判定された場合、前記勾配法演算により得られた動きベクトルを、前記初期ベクトルの候補ベクトルとして決定し、前記0ベクトルを前記検出ベクトルとして決定するベクトル決定ステップ(例えば、図63のステップS565)とを含む。
以下、図を参照して本発明の実施の形態について説明する。
図1は、本発明を適用した信号処理装置1の構成例を表している。信号処理装置1は、例えば、パーソナルコンピュータなどで構成される。図1において、CPU(Central Processing Unit)11は、ROM(Read Only Memory)12、または記憶部18に記憶されているプログラムに従って各種の処理を実行する。RAM(Random Access Memory)13には、CPU11が実行するプログラムやデータなどが適宜記憶される。これらのCPU11、ROM12、およびRAM13は、バス14により相互に接続されている。
CPU11にはまた、バス14を介して入出力インタフェース15が接続されている。入出力インタフェース15には、キーボード、マウス、マイクロフォンなどよりなる入力部16、ディスプレイ、スピーカなどよりなる出力部17が接続されている。CPU11は、入力部16から入力される指令に対応して各種の処理を実行する。そして、CPU11は、処理の結果、得られた画像や音声等を出力部17に出力する。
入出力インタフェース15に接続されている記憶部18は、例えばハードディスクなどで構成され、CPU11が実行するプログラムや各種のデータを記憶する。通信部19は、インターネット、その他のネットワークを介して外部の装置と通信する。また、通信部19を介してプログラムを取得し、記憶部18に記憶してもよい。
入出力インタフェース15に接続されているドライブ20は、磁気ディスク31、光ディスク32、光磁気ディスク33、或いは半導体メモリ34などが装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて記憶部18に転送され、記憶される。
なお、信号処理装置1は、例えば、テレビジョン受像機、光ディスクプレーヤなど、または、それらの信号処理部とすることもできる。
図2は、信号処理装置1を示すブロック図である。
なお、信号処理装置1の各機能をハードウェアで実現するか、ソフトウェアで実現するかは問わない。つまり、本明細書の各ブロック図は、ハードウェアのブロック図と考えても、ソフトウェアによる機能ブロック図と考えてもよい。
図2に構成を示す信号処理装置1においては、例えば、フレーム周波数24Hzのプログレッシブ画像信号(以下、24P信号と称する)の画像が入力され、入力された画像(入力画像)が、フレーム周波数60Hzのプログレッシブ画像信号(以下、60P信号と称する)の画像に変換されて、出力される。すなわち、図2は、画像処理装置である信号処理装置の構成を示す図である。
信号処理装置1に入力された24P信号の入力画像は、フレームメモリ51、ベクトル検出部52、ベクトル割付部54、割付補償部57、および画像補間部58に供給される。フレームメモリ51は、入力画像をフレーム単位で記憶する。フレームメモリ51は、時刻t+1の入力画像の1つ前の時刻tのフレームを記憶する。フレームメモリ51に記憶される時刻tのフレームは、ベクトル検出部52、ベクトル割付部54、割付補償部57、および画像補間部58に供給される。なお、以下、フレームメモリ51上の時刻tのフレームをフレームtと称し、時刻t+1の入力画像のフレームを、フレームt+1と称する。
ベクトル検出部52は、フレームメモリ51上のフレームtの着目ブロックと、入力画像のフレームt+1の対象ブロックの間で動きベクトルを検出し、検出した動きベクトルを、検出ベクトルメモリ53に記憶する。この2フレーム間の動きベクトルの検出方法には、勾配法またはブロックマッチング法などが用いられる。ベクトル検出部52の構成の詳細は、図17を参照して後述する。検出ベクトルメモリ53は、フレームtにおいて、ベクトル検出部52により検出された動きベクトルを記憶する。
ベクトル割付部54は、24P信号のフレームt上において求められた動きベクトルを、割付ベクトルメモリ55上の、補間する60P信号のフレーム(以下、60P信号のフレームは、24P信号のフレームと区別するため、内挿フレームとも称する)上の画素に割り付け、動きベクトルが割り付けられた画素の割付フラグメモリ56の割付フラグを1(True)に書き換える。ベクトル割付部54の構成の詳細は、図71を参照して後述する。
割付ベクトルメモリ55は、ベクトル割付部54により割り付けられた動きベクトルを、内挿フレームの各画素に対応させて記憶する。割付フラグメモリ56は、内挿フレームの画素毎に、割り付けられる動きベクトルの有無を示す割付フラグを記憶している。例えば、True(1)である割付フラグは、対応する画素に動きベクトルが割り付けられていることを示し、False(0)である割付フラグは、対応する画素に動きベクトルが割り付けられていないことを示す。
割付補償部57は、割付フラグメモリ56の割付フラグを参照し、ベクトル割付部54により動きベクトルが割り付けられなかった着目画素に対して、その着目画素の周辺画素の動きベクトルを補い、割付ベクトルメモリ55の内挿フレーム上に割り付ける。このとき、割付補償部57は、動きベクトルを割り付けた着目画素の割付フラグを1(True)に書き換える。割付補償部57の構成の詳細は、図75を参照して後述する。
画像補間部58は、割付ベクトルメモリ55の内挿フレームに割り付けられた動きベクトルと、フレームtおよび次のフレームt+1の画素値を用いて、内挿フレームの画素値を補間生成する。そして、画像補間部58は、生成された内挿フレームを出力し、その次に、必要に応じて、フレームt+1を出力することにより、60P信号の画像を、図示せぬ後段に出力する。画像補間部58の構成の詳細は、図78を参照して後述する。
なお、以下においては、画素値を、適宜、輝度値とも称する。
図3は、本発明に係る信号処理装置1における処理の原理を説明する図である。図3の例においては、点線が、信号処理装置1に入力される、時刻t,t+1,およびt+2における24P信号のフレームを表しており、実線が、入力された24P信号から信号処理装置1により、生成される時刻t,t+0.4,t+0.8,t+1.2,t+1.6,およびt+2における60P信号の内挿フレームを表している。
一般に、24P信号を、60P信号に変換するためには、5/2倍のフレームが必要になる。すなわち、2枚の24P信号の画像から5枚の60P信号の画像が生成されなければならない。このとき、生成される60P信号の内挿フレームは、そのフレーム間隔を等しくするために、24P信号上での時間位相が0.0,0.4,0.8,1.2,および1.6となる位置に配置される。この中で、時間位相が0.0である時刻tの1フレームを除く4フレーム(t+0.4,t+0.8,t+1.2,およびt+1.6のフレーム)は、24P信号上には存在しない画像である。したがって、信号処理装置1は、24P信号の画像が入力されると、24P信号の時刻tおよび時刻t+1の2枚のフレームから、4つの内挿フレームを生成する。したがって、信号処理装置1からは、時刻t,t+0.4,t+0.8,t+1.2,およびt+1.6の5枚のフレームからなる60P信号の画像が出力される。
以上のようにして、信号処理装置1は、24P信号の画像から60P信号の画像に、フレーム周波数を変換する処理を実行する。
なお、原理的には、上述したように、24P信号の時刻tおよび時刻t+1の2枚のフレームから、時刻t,t+0.4,t+0.8,t+1.2,およびt+1.6の5枚の60P信号のフレームが新しく生成されるが、実際には、図3の例の場合、24P信号の時刻tおよび時刻t+1の2枚のフレームに基づいて、t,t+0.4,t+0.8の60P信号のフレームが生成され、24P信号の時刻t+1およびt+2の2枚のフレームに基づいて、t+1.2,t+1.6,およびt+2の60P信号のフレームが生成される。
図4は、本発明の処理をより具体的に説明する図である。図4の例においては、太線矢印は、各状態への遷移を表しており、矢印Tは、状態J1乃至J5における時間の経過方向を表している。また、状態J1乃至J5は、信号処理装置1を構成する各部への入出力時の、24P信号の時刻tのフレームt、時刻tの次の時刻t+1のフレームt+1、または、フレームtおよびフレームt+1の間に生成される60P信号の内挿フレームFの状態を概念的に表している。すなわち、実際には、例えば、状態J2に示されるような動きベクトルが検出されたフレームがベクトル割付部54に入力されるわけではなく、フレームと動きベクトルは、別々にベクトル割付部54に入力される。
また、図4の例においては、ベクトル検出部52、ベクトル割付部54、および割付補償部57は、動きベクトルの精度の信頼度を評価するための評価値を演算する評価値演算部61をそれぞれ有している。
状態J1は、ベクトル検出部52に入力される、24P信号のフレームtおよびフレームt+1の状態を表している。状態J1のフレームt上の黒点は、フレームt上の画素を表している。
ベクトル検出部52は、状態J1のフレームt上の画素が、次の時刻のフレームt+1において、どの位置に移動するかを検出し、その動きを、状態82のフレームt上に示されるように、各画素に対応する動きベクトルとして出力する。この2フレーム間の動きベクトルの検出方法には、ブロックマッチング法または勾配法などが用いられる。なお、このとき、画素に複数の動きベクトルが検出された場合、ベクトル検出部52は、各動きベクトルについて、内蔵する評価値演算部61に評価値を演算させ、演算された評価値に基づいて動きベクトルを選択する。
状態J2は、ベクトル割付部54に入力される、フレームtおよびフレームt+1の状態を表している。状態J2において、フレームtの各画素の矢印は、ベクトル検出部52により検出された動きベクトルを表している。
ベクトル割付部54は、状態J2のフレームtの各画素に対して検出された動きベクトルを、次のフレームt+1まで延長させ、予め設定されている時間位相(例えば、図3のt+0.4)にある内挿フレームF上のどの位置を通過するかを求める。これは、フレームtおよびフレームt+1の間が一定動きであると仮定すると、動きベクトルが内挿フレームFを通過した点が、そのフレームでの画素位置となるためである。したがって、ベクトル割付部54は、この通過する動きベクトルを、状態J3の内挿フレームF上の近傍4画素に割り付ける。
また、このとき、内挿フレームの画素によっては、動きベクトルが存在しない場合、あるいは、複数の動きベクトルが、割付候補となりうる場合がある。後者のような場合には、ベクトル割付部54は、ベクトル検出部52と同様に、内蔵する評価値演算部61に各動きベクトルについての評価値を演算させ、演算された評価値に基づいて割り付ける動きベクトルを選択する。
状態J3は、割付補償部57に入力される、フレームtおよびフレームt+1、並びに動きベクトルが割り付けられた内挿フレームFの状態を表している。状態J3の内挿フレームFにおいては、ベクトル割付部54により動きベクトルが割り付けられている画素と、動きベクトルが割り付けられなかった画素が示されている。
割付補償部57は、状態J3の動きベクトルが割り付けられていない画素に対して、その画素の周辺画素に割り付けられている動きベクトルを用いて補う。これは、ある着目画素の近傍領域が同じ動きであるという仮定が成り立つならば、着目画素の周辺画素の動きベクトルと、その着目画素の動きベクトルは似たものであるからである。これにより、動きベクトルが割り付けられなかった画素にも、ある程度正確な動きベクトルが与えられ、状態84の内挿フレームF上のすべての画素に動きベクトルが割り付けられる。
なお、この場合にも、複数の周辺画素の動きベクトルが候補として存在するため、割付補償部57は、ベクトル割付部54と同様に、内蔵する評価値演算部61に各動きベクトルについての評価値を演算させ、演算された評価値に基づいて割り付ける動きベクトルを選択する。
状態J4は、画像補間部58に入力される、フレームtおよびフレームt+1、並びに、すべての画素に動きベクトルが割り付けられた内挿フレームFの状態を表している。これらのすべての画素に割り付けられた動きベクトルにより、画像補間部58は、内挿フレームF上の画素と、2枚のフレームtおよびフレームt+1の画素の位置関係を決定することができる。
したがって、画像補間部58は、内挿フレームF上に割り付けられた動きベクトルと、フレームtおよびフレームt+1の画素値を用いて、状態J5の内挿フレームFの黒点に示されるように、内挿フレームF上の画素値を補間生成する。そして、画像補間部58は、生成された内挿フレームを出力し、その次に、必要に応じて、フレームt+1を出力することにより、60P信号の画像を、図示せぬ後段に出力する。
次に、図5を参照して、本発明に係る信号処理装置1において用いられる動きベクトルの評価値を説明する。図4を参照して上述したように、信号処理装置1の各部(ベクトル検出部52、ベクトル割付部54、および割付補償部57)において、後段の処理に最適な動きベクトルが選択される。
このとき、信号処理装置1の各部においては、動きベクトルに対する評価値として、2つのフレームの注目するベクトル量分ずらしたブロック間の相関値を表す差分絶対値和(DFD(Displaced Frame Difference))が各部の評価値演算部61により演算されて、用いられる。
図5の例においては、時刻tのフレームt上の画素位置pを中心としたm×nのブロック、および、時刻t+1のフレームt+1上の画素位置pから注目する動きベクトルvのベクトル量分ずらした画素位置p+vを中心としたm×nのブロックの2つのブロックが示されている。これら2つのブロック間において求められる差分絶対値和DFDt(p)は、次の式(1)で表される。
ここで、Ft(p)は、時刻tにおける画素位置pの輝度値を表しており、m×nは、差分絶対値和を求めるためのDFD演算範囲(ブロック)を表している。この差分絶対値和は、2つのフレームにおけるDFD演算範囲(ブロック)間の相関値を表しているため、一般的には、この差分絶対値和が小さいほどフレーム間のブロックの波形が一致しており、差分絶対値和が小さいほど、動きベクトルvの信頼度が高いと判定される。
これにより、この差分絶対値和(以下、評価値DFDと称する)は、複数の候補の中から、最も確からしい動きベクトルを選ぶ場合などに用いられる。
さらに、評価値DFDについて詳しく説明する。
図6は、評価値DFDを演算する評価値演算部61の構成例を示すブロック図である。図6の例において、時刻tの画像のフレームtは、および、フレームメモリ51からの時刻t+1の画像のフレームt+1は、輝度値取得部72に入力されている。
評価値演算部61は、ブロック位置演算部71、輝度値取得部72、差分絶対値演算部73、および積和演算部74により構成されている。
評価値演算部61には、前段から、フレームtのブロック(DFD演算範囲)位置と評価対象となる動きベクトルとが入力される。フレームtのブロック位置は、ブロック位置演算部71および輝度値取得部72に入力され、動きベクトルは、ブロック位置演算部71に入力される。
ブロック位置演算部71は、入力されたフレームtのブロック位置と動きベクトルを用いて、フレームt+1のブロック位置を算出し、輝度値取得部72に出力する。輝度値取得部72は、図示せぬフレームtのフレームメモリから、入力されたフレームtのブロック位置に対応する輝度値を取得し、フレームt+1のフレームメモリ51から、入力されたフレームt+1のブロック位置に対応する輝度値を取得し、取得した各輝度値を、差分絶対値演算部73に出力する。
差分絶対値演算部73は、輝度取得部72からのフレームtおよびt+1の各ブロック内の輝度値を用いて、輝度差分絶対値を演算し、演算した輝度差分絶対値を、積和演算部74に出力する。積和演算部74は、差分絶対値演算部73により演算された輝度差分絶対値を積算することで、評価値DFDを取得し、取得した評価値DFDを後段に出力する。
次に、図7のフローチャートを参照して、図6の評価値演算部61の評価値演算処理を説明する。
評価値演算部61には、前段から、フレームtのブロック(DFD演算範囲)位置と評価対象となる動きベクトルとが入力される。ブロック位置演算部71は、フレームtのブロック位置と評価対象となる動きベクトルが入力されると、ステップS11において、入力されたフレームtのブロック位置と動きベクトルを用いて、フレームt+1のブロック位置を算出し、輝度値取得部72に出力する。
輝度値取得部72は、ステップS12において、入力されたフレームtおよびフレームt+1のブロック位置に基づいて、各フレームのブロック(DFD演算範囲)の画素の輝度値を取得し、取得した各輝度値を差分絶対値演算部73に出力する。なお、輝度値取得部72は、ブロックの左上の画素の輝度値から取得する。
差分絶対値演算部73は、ステップS13において、輝度値取得部72からのフレームtおよびフレームt+1の画素の輝度値を用いて、輝度差分絶対値を演算し、演算した輝度差分絶対値を積和演算部74に出力する。
積和演算部74は、ステップS14において、差分絶対値演算部73からの輝度差分絶対値を積算し、ステップS15において、ブロック内の全画素に対して処理が終了したか否かを判定する。ステップS15において、ブロック内の全画素に対して処理が終了していないと判定された場合、処理は、ステップS12に戻り、それ以降の処理が繰り返される。すなわち、ブロックの次の画素に対しての処理が行われる。
一方、ステップS15において、ブロック内の全画素に対して処理が終了したと判定された場合、積和演算部74は、ステップS16において、輝度差分絶対値を積算した結果であるDFDを取得し、評価値DFDとして後段に出力する。これにより、評価値演算処理は終了される。
以上のように、評価値DFDは、ブロック(DFD演算範囲)内の輝度値の差分絶対値を積算することで求められるため、一般的には、評価値DFDが小さいほど、フレーム間のブロックの波形が一致し、動きベクトルvの信頼度が高いと判定される。
しかしながら、光源の移動や影の通過などで、評価値を求めるフレーム間で平均輝度値レベルが大きく変化する場合、評価値DFDでは、動きベクトルを正しく評価することが難しい。
次に、図8および図9を参照して、平均輝度レベル変化時の評価値DFDについて説明する。図8の例においては、矢印Tは、図中、左手前の時刻tのフレームtから、右奥の時刻t+1のフレームt+1への時間の経過を示している。
フレームt上には、画素p0を中心としたm×nのブロックB0が示されている。
フレームt+1上には、フレームtおよびt+1間における画素p0の正しい動きベクトルである動きベクトルv1が示されており、フレームt上の画素p0が対応する画素p1から動きベクトルv1のベクトル量ずらした(シフトさせた)位置の画素p1+v1を中心としたm×nのブロックB1が示されている。フレームt+1上には、また、フレームtおよびt+1間における画素p0の誤った動きベクトルである動きベクトルv2が示されており、フレームt上の画素p0が対応する画素p1から動きベクトルv2のベクトル量ずらした位置の画素p1+v2を中心としたm×nのブロックB2が示されている。
図9の左側のグラフには、一般的な場合(すなわち、フレーム間において、光源の移動や影の通過などが無い場合)における図8のブロックB0、ブロックB1、およびブロックB2のそれぞれの(画素)位置における輝度値の波形Y0、Y1、およびY2が示されており、右側のグラフには、フレームt+1上のブロックB1に光源の移動や影の通過などがあり、ブロックB1がそれらの影響を受けた場合における図8のブロックB0、ブロックB1、およびブロックB2のそれぞれの(画素)位置における輝度値の波形Y0、Y11、およびY2が示されている。
すなわち、ブロックB0およびB2は、光源の移動や影の通過の影響を受けていないため、左右のグラフにおける輝度値の波形Y0およびY2は変わらず、同じである。
図9の左側のグラフに示されるように、一般的な場合には、ブロックB1の輝度値の波形Y1は、波形Y0と波形Y1の間の斜線の部分に示されるように、ブロックB2の輝度値の波形Y2よりも、ブロックB0の輝度値の波形Y0に類似しているため、ブロックB0とブロックB1間の評価値DFD(Y1)は、ブロックB0とブロックB2間の評価値DFD(Y2)よりも小さくなる。したがって、正しい動きベクトルである動きベクトルv1の信頼度は、誤った動きベクトルv2の信頼度より高いと判定される。
しかしながら、図9の右側のグラフに示されるように、フレームt+1上のブロックB1に光源の移動や影の通過などがあり、ブロックB1のみがそれらの影響を受けた場合、波形Y1であったブロックB1の輝度値は、波形Y11に示されるように、輝度レベルが全体的に(平均的に)大きく変化してしまう。すなわち、ブロックB1の輝度値の波形Y11は、左側のグラフの波形Y1から平均輝度値レベルの変化量だけ離れてしまい、結果的に、波形Y0と波形Y11の間の斜線の部分に示されるように、ブロックB2の輝度値の波形Y2よりも、ブロックB0の輝度値の波形Y0から離れてしまう。
したがって、平均輝度値レベルの変化量がオフセットとして重畳されてしまい、この場合のブロックB0とブロックB1間の評価値DFD(Y11)は、ブロックB0とブロックB2間の評価値DFD(Y2)よりも大きくなってしまい、正しい動きベクトルである動きベクトルv1の信頼度は、誤った動きベクトルv2の信頼度より低いと判定されてしまう。
以上のように、光源の移動や影の通過などにより、動きvを持つ物体の平均輝度レベルが大きく変化する場合には、平均輝度レベルの変化量がオフセットとして評価値DFDに重畳されるため、評価値DFDが大きくなってしまい、真の動き量vに対する信頼度が低くなってしまう。
そこで、評価値DFDの代わりに、信号処理装置1のベクトル検出部52においては、動きベクトルに対する評価値の他の例として、評価値DFDと同様に評価対象となるベクトルの始点と終点を含むブロック間で演算される差分分散(dfv:difference variance)が用いられて、後段の処理に最適な動きベクトルが選択される。評価対象となる動きベクトルをvとすると、差分分散は、次の式(2)で表される。
ここで、
は、m×n画素の差分分散の演算範囲における輝度値の平均を表している。
なお、差分分散は、実際には、式(2)からもわかるように、時刻t+1における画素位置p+vの輝度値および時刻t+1における画素位置p+vの演算範囲における輝度値の平均の差分から、時刻tにおける画素位置pの輝度値および時刻tにおける画素位置pの演算範囲における輝度値の平均の差分を引いたものの自乗和であるが、式(2)を展開していくことにより、演算ブロック内の輝度値差分の分散の式(後述する式(5))になることから、差分分散と称される。
差分分散も、評価値DFDと同様に、フレーム間のブロックの波形の一致度をベクトルの信頼度とする評価値であり、値が小さいほどベクトルvの信頼度が高いと判定することができる。
図10は、平均輝度レベル変化時の差分分散について説明する図である。なお、図10は、図9を参照して説明した評価値DFDの例に対応する差分分散dfvの例が示されており、図10の例においては、図9の例の場合と同様に、図8のブロックB0、ブロックB1、およびブロックB2を用いて説明する。
図10の左側のグラフには、図9の場合と同様に、一般的な場合(すなわち、フレーム間において、光源の移動や影の通過などが無い場合)における図8のブロックB0、ブロックB1、およびブロックB2のそれぞれの(画素)位置における輝度値の波形Y0、Y1、およびY2が示されており、右側のグラフには、フレームt+1上のブロックB1に光源の移動や影の通過などがあり、ブロックB1がそれらの影響を受けた場合における図8のブロックB0、ブロックB1、およびブロックB2のそれぞれの(画素)位置における輝度値の波形Y0、Y11、およびY2が示されている。
図10の左側のグラフに示されるように、一般的な場合には、ブロックB1の輝度値の波形Y1は、波形Y0と波形Y1の間の斜線の部分に示されるように、ブロックB2の輝度値の波形Y2よりも、ブロックB0の輝度値の波形Y0に類似しているため、図9の評価値DFDの場合と同様に、ブロックB0とブロックB1間の差分分散であるdfv(Y1)は、ブロックB0とブロックB2間の差分分散であるdfv(Y2)よりも小さくなる。したがって、正しい動きベクトルである動きベクトルv1の信頼度は、誤った動きベクトルv2の信頼度より高いと判定される。
一方、図10の右側のグラフに示されるように、フレームt+1上のブロックB1に光源の移動や影の通過などがあり、ブロックB1のみがそれらの影響を受けた場合、波形Y1であったブロックB1の輝度値は、波形Y11に示されるように、輝度レベルが全体的に(平均的に)大きく変化してしまう。すなわち、ブロックB1の輝度値の波形Y11は、波形Y1から平均輝度値レベルの変化量だけ離れてしまい、結果的に、ブロックB2の輝度値の波形Y2よりも、ブロックB0の輝度値の波形Y0から離れてしまう。
ここで、図10の右のグラフには、さらに、点線で示される波形Z1と、波形Z2が示されている。波形Z1は、波形Y11から、波形Y11および波形Y0の差分の平均を差し引いた輝度値の波形を表しており、波形Z2は、波形Y2から、波形Y2および波形Y0の差分の平均を差し引いた輝度値の波形を表している。
式(2)で示されるように、差分分散は、各フレーム毎に演算ブロック内の輝度値平均をオフセットとして差し引いた輝度値の自乗和、すなわち、各フレーム毎に演算ブロック内の輝度値平均をオフセットとして差し引いた統計量である。
したがって、図10の右のグラフにおける斜線部分である波形Y0と波形Z1の差分は、波形Y0から、波形Y11と、波形Y11および波形Y0の差分の平均との差分を引いたもの、すなわち、ブロックB0とブロックB1間の差分分散であるdfv(Y11)を求める式(2)の自乗和の括弧内の部分を表しており、波形Y0から、波形Y2と、波形Y2および波形Y0の差分の平均との差分を引いたもの、すなわち、ブロックB0とブロックB2間の差分分散であるdfv(Y2)を求める式(2)の自乗和の括弧内の部分を表す、波形Y0と波形Z2の差分よりも値が小さい。
このように、光源の移動や影の通過などにより、動きvを持つ物体の平均輝度レベルが大きく変化する場合であっても、ブロックB0とブロックB1間の差分分散であるdfv(Y11)は、ブロックB0とブロックB2間の差分分散であるdfv(Y2)よりも小さい。したがって、正しい動きベクトルである動きベクトルv1の信頼度は、誤った動きベクトルv2の信頼度より高いと判定される。
以上により、DFDを評価値として用いたときに対応することが困難であった、フレーム間の平均輝度レベルが変化する場合であっても、差分分散(以下、評価値dfvとも称する)を評価値として用いることにより、ベクトルの信頼度の評価を正しく行うことが可能になる。
なお、評価値dfvは、式(2)に示されるように、二乗和の式であるため、乗算器を用いる必要があり、評価値DFDを演算する場合よりもハードウェア上の回路規模が大きくなってしまう。
そこで、二乗を用いない評価値、かつ、差分分散(評価値dfv)の特徴である、平均輝度レベル変化に対応した動きベクトルの評価値として、輝度平均オフセットを考慮したDFD(以下、mDFD(mean DFD)と称する)も挙げられる。mDFDは、式(3)で表される。
mDFDも、差分分散と同様に、平均輝度レベルを考慮した波形の一致度を表しており、フレーム間で平均輝度レベルが大きく変化する場合に対応した動きベクトルの評価値となる。したがって、以下、mDFDを評価値mDFDとも称する。
さらに、評価値mDFDについて詳しく説明する。
図11は、評価値mDFDを演算する評価値演算部61Aの構成例を示すブロック図である。
なお、図11の例は、ブロック位置演算部71、輝度値取得部72、差分絶対値演算部73および積和演算部74が設けられている点で図6の評価値演算部61と共通しているが、積和演算部81−1および81−2、平均値算出部82−1および82−2、並びに、差分演算部83−1および83−2が追加されている点で図6の評価値演算部61と異なっている。
図11の例において、輝度値取得部72は、図示せぬフレームtのフレームメモリから、入力されたフレームtのブロック位置に対応する輝度値を取得し、取得したフレームtの輝度値を積和演算部81−1および差分演算部83−1に出力する。また、輝度値取得部72は、フレームt+1のフレームメモリ51から、入力されたフレームt+1のブロック位置に対応する輝度値を取得し、取得したフレームt+1の輝度値を、積和演算部81−2および差分演算部83−2に出力する。
積和演算部81−1は、フレームtのブロック内の全画素の輝度値を積算し、積算した輝度値を平均値算出部82−1に出力する。平均値算出部82−1は、積和演算部81−1からの積算された輝度値を用いて、ブロック内の輝度平均値を算出し、算出したブロック内の輝度平均値を差分演算部83−1に出力する。
差分演算部83−1は、輝度値取得部72からの輝度値と平均値算出部82−1からのブロック内の輝度平均値を用いて、フレームtのブロック内の各画素とブロック内の輝度平均値の差分を算出し、算出したフレームtの差分を差分絶対値演算部73に出力する。
積和演算部81−2、平均値算出部82−2、および差分演算部83−2は、フレームt+1に対して、積和演算部81−1、平均値算出部82−1、および差分演算部83−1と同様の処理を行う。
すなわち、積和演算部81−2は、フレームt+1のブロック内の全画素の輝度値を積算し、積算した輝度値を平均値算出部82−2に出力する。平均値算出部82−2は、積和演算部81−2からの積算された輝度値を用いて、ブロック内の輝度平均値を算出し、算出したブロック内の輝度平均値を差分演算部83−2に出力する。
差分演算部83−2は、輝度値取得部72からの輝度値と平均値算出部82−2からのブロック内の輝度平均値を用いて、フレームt+1のブロック内の各画素とブロック内の輝度平均値の差分を算出し、算出したフレームt+1の差分を差分絶対値演算部73に出力する。
図11の例において、差分絶対値演算部73は、差分演算部83−1からのフレームtのブロック内の輝度値、および差分演算部83−2からのt+1のブロック内の輝度値を用いて、輝度差分絶対値を演算し、演算した輝度差分絶対値を、積和演算部74に出力する。積和演算部74は、差分絶対値演算部73により演算された輝度差分絶対値を積算することで、評価値mDFDを取得し、取得した評価値mDFDを後段に出力する。
次に、図12および図13のフローチャートを参照して、図11の評価値演算部61Aの評価値演算処理を説明する。
評価値演算部61Aには、前段から、フレームtのブロック(DFD演算範囲)位置と評価対象となる動きベクトルとが入力される。ブロック位置演算部71は、フレームtのブロック位置と評価対象となる動きベクトルが入力されると、ステップS31において、入力されたフレームtのブロック位置と動きベクトルを用いて、フレームt+1のブロック位置を算出し、輝度値取得部72に出力する。
輝度値取得部72は、ステップS32において、入力されたフレームtおよびフレームt+1のブロック位置に基づいて、各ブロック(DFD演算範囲)の画素の輝度値を取得し、取得したフレームtの画素の輝度値を積和演算部81−1に出力し、取得したフレームt+1の画素の輝度値を積和演算部81−2に出力する。なお、このとき、輝度値取得部72は、取得したフレームtの画素の輝度値を差分演算部83−1にも出力し、フレームt+1の画素の輝度値を差分演算部83−2にも出力する。
積和演算部81−1は、ステップS33において、輝度値取得部72からのフレームtの画素の輝度値を積算し、ステップS34において、ブロック内の全画素に対して処理が終了したか否かを判定する。ステップS34において、ブロック内の全画素に対して処理が終了していないと判定された場合、処理は、ステップS32に戻り、それ以降の処理が繰り返される。すなわち、ブロックの次の画素に対しての処理が行われる。
ステップS34において、ブロック内の全画素に対して処理が終了したと判定された場合、積和演算部81−1は、フレームtのブロック内の全画素の輝度値を積算した値を、平均値算出部82−1に出力する。
平均値算出部82−1は、ステップS35において、積和演算部81−1からの積算された輝度値を用いて、フレームtのブロック内の輝度平均値を算出し、算出したブロック内の輝度平均値を差分演算部83−1に出力する。
差分演算部83−1は、図13のステップS36において、輝度値取得部72からの輝度値と平均値算出部82−1からのブロック内の輝度平均値を用いて、フレームtのブロック内の各画素とブロック内の輝度平均値の差分を算出し、算出したフレームtの差分を差分絶対値演算部73に出力する。
なお、説明は繰り返しになるので便宜上、省略するが、上述したステップS32乃至S36の処理は、積和演算部81−2、平均値算出部82−2、および差分演算部83−2においても、フレームt+1に対して同様に実行される。したがって、ステップS37において、差分演算部83−1によりフレームtのブロック内の各画素とブロック内の輝度平均値の差分が算出され、差分絶対値演算部73に出力される。
差分絶対値演算部73は、ステップS38において、差分演算部83−1および差分演算部83−2からの輝度差分絶対値を積算し、ステップS39において、ブロック内の全画素に対して処理が終了したか否かを判定する。ステップS38において、ブロック内の全画素に対して処理が終了していないと判定された場合、処理は、ステップS36に戻り、それ以降の処理が繰り返される。すなわち、ブロックの次の画素に対しての処理が行われる。
一方、ステップS39において、ブロック内の全画素に対して処理が終了したと判定された場合、積和演算部74は、ステップS40において、輝度差分絶対値を積算した結果である輝度平均オフセットを考慮したDFD(すなわち、mDFD)を取得し、評価値mDFDとして後段に出力する。
以上により、評価値演算処理は終了され、フレーム間で平均輝度レベルが大きく変化する場合に対応した動きベクトルの評価値としての、評価値mDFDが求められる。
このように、評価値mDFDを演算する図11の評価値演算部61Aは、乗算器を必要としないため、ハードウェア上、回路規模を大きくする必要がない。
しかしながら、評価値mDFDの演算処理においては、式(3)および図12からも明らかなように、一旦、各ブロック内の平均輝度値を演算し、各ブロック内の平均輝度値が確定した後で、ブロック内の各画素の輝度値から、対応する平均輝度値を減じて、その差分を積算するという順序を取らなければならない。すなわち、評価値mDFDの演算処理においては、各ブロック内の平均輝度値が確定するまで、次の処理を行うことができない。
ここで、再度、式(2)で表される差分分散について説明する。次の式(4)は、画素位置Px,yにおけるvによるフレーム間差分を表している。
上述した差分分散dfvの式(2)を、上述した式(4)を用いて変形すると、差分分散は、次の式(5)で表される。
式(5)は、差分分散が評価値演算ブロック内の輝度値Dtの分散であることを示している。したがって、式(5)は、分散の式の展開から、式(6)のように変形できる。
この式(6)に示されるように、差分分散は、差分自乗和(差分二乗和)の項と差分和の二乗の項に分離することが可能である。すなわち、差分分散を演算する際には、各項を並列に演算させるように、差分分散の演算部を構成することができる。
図14は、差分分散(すなわち、評価値dfv)を演算する評価値演算部61Bの構成例を示すブロック図である。
なお、図14の例は、ブロック位置演算部71、および輝度値取得部72が設けられている点で図6の評価値演算部61と共通しているが、差分絶対値演算部73および積和演算部74の代わりに、差分演算部91、差分和二乗演算部92、差分二乗和演算部93、乗算器94、および差分演算部95が追加されている点で図6の評価値演算部61と異なっている。
図14の例において、輝度値取得部72は、図示せぬフレームtのフレームメモリから、入力されたフレームtのブロック位置に対応する輝度値を取得し、フレームt+1のフレームメモリ51から、入力されたフレームt+1のブロック位置に対応する輝度値を取得し、取得した各輝度値を、差分演算部91に出力する。
差分演算部91は、対象となる画素の輝度値差分を演算し、演算した輝度値差分を、差分和二乗演算部92、および差分二乗和演算部93に出力する。
差分和二乗演算部92は、積和演算部92aおよび乗算器92bにより構成される。積和演算部92aは、差分演算部91からの輝度値差分をブロック分積算し、積算した輝度値差分(輝度値差分和)を乗算器92bに出力する。乗算器92bは、積和演算部92aからの輝度値差分和を二乗し、輝度値差分和二乗を差分演算部95に出力する。
差分二乗和演算部93は、乗算器93aおよび積和演算部93bにより構成される。乗算器93aは、差分演算部91からの輝度値差分の二乗を演算し、演算した輝度差分二乗を積和演算部93bに出力する。積和演算部93bは、輝度差分二乗をブロック分積算し、積算した輝度値差分二乗(輝度値差分二乗和)を、乗算器94に出力する。
乗算器94には、図示せぬ制御部などから予めブロック内画素数が入力されている。乗算器94は、ブロック内画素数と輝度差分値二乗和を乗算し、差分演算部95に出力する。
差分演算部95は、乗算器92bからの輝度値差分和二乗から、乗算器94からの、ブロック内画素数を乗算した輝度差分値二乗和を減算することで、差分分散を取得し、評価値dfvとして後段に出力する。
次に、図15のフローチャートを参照して、図14の評価値演算部61Bの評価値演算処理を説明する。
評価値演算部61Bには、前段から、フレームtのブロック(DFD演算範囲)位置と評価対象となる動きベクトルとが入力される。ブロック位置演算部71は、フレームtのブロック位置と評価対象となる動きベクトルが入力されると、ステップS51において、入力されたフレームtのブロック位置と動きベクトルを用いて、フレームt+1のブロック位置を算出し、輝度値取得部72に出力する。
輝度値取得部72は、ステップS52において、入力されたフレームtおよびフレームt+1のブロック位置に基づいて、各フレームのブロック(DFD演算範囲)の画素の輝度値を取得し、取得した各輝度値を差分演算部91に出力する。
差分演算部91は、ステップS53において、対象となる画素の輝度値差分を演算し、演算した輝度値差分を、差分和二乗演算部92および差分二乗和演算部93に出力する。
ステップS54においては、輝度値差分が演算され、輝度値差分二乗が積算される。すなわち、差分和二乗演算部92の積和演算部92aは、ステップS54において、差分演算部91からの輝度値差分を積算する。このとき、並行して、差分二乗和演算部93の積和演算部93bは、差分演算部91からの輝度差分が乗算器93aにより演算された輝度値差分二乗を積算する。
積和演算部92aおよび積和演算部93bは、ステップS55において、ブロック内の全画素に対して処理が終了したか否かを判定する。ステップS55において、ブロック内の全画素に対して処理が終了していないと判定された場合、処理は、ステップS52に戻り、それ以降の処理が繰り返される。すなわち、ブロックの次の画素に対しての処理が行われる。
一方、ステップS55において、ブロック内の全画素に対して処理が終了したと判定された場合、積和演算部92aは、積算した輝度値差分(輝度値差分和)を乗算器92bに出力し、積和演算部93bは、積算した輝度値差分二乗(輝度値差分二乗和)を、乗算器94に出力する。
ステップS56においては、輝度値差分和二乗が演算され、ブロック内画素数と、輝度値差分二乗和が演算される。すなわち、差分和二乗演算部92の乗算器92bは、ステップS56において、積和演算部92aからの輝度値差分和を二乗し、輝度値差分和二乗を差分演算部95に出力する。このとき、並行して、乗算器94は、ブロック内画素数と輝度差分値二乗和を乗算し、差分演算部95に出力する。
差分演算部95は、ステップS57において、乗算器92bからの輝度値差分和二乗から、ブロック内画素数を乗算した輝度差分値二乗和を減算し、ステップS58において、減算した結果である差分分散を取得し、評価値dfvとして後段に出力する。
以上により、評価値演算処理は終了され、フレーム間で平均輝度レベルが大きく変化する場合に対応した動きベクトルの評価値としての、評価値dfvが求められる。
したがって、差分分散を評価値として用いることにより、フレーム間の平均輝度レベルが大きく変化する場合にも、信頼度の高いベクトルの評価を行うことが可能になる。
また、この差分分散を演算する評価値演算処理においては、ステップS54およびステップS56において、差分和二乗演算部92と差分二乗和演算部93が並列で演算処理を行うことができる。したがって、図14の評価値演算部61Bに示されるように、差分分散は、乗算器を必要とするため、ハードウェア実装が大きくなってしまうが、その反面、回路を並列化することができるので、mDFDと比較して演算処理時間を短縮することが可能になる。
以上より、以降、信号処理装置1のベクトル検出部52においては、動きベクトルが選択される場合の評価値として、評価値DFDの代わりに評価値dfvが用いられ、その他のベクトル割付部54、および割付補償部57においては、動きベクトルが選択される場合の評価値として、特に言及しない場合には、差分絶対値和(以下、評価値DFDと称する)が用いられることとする。
したがって、ベクトル検出部52は、内部に評価値演算部61Bを有することとして説明し、ベクトル割付部54、および割付補償部57は、内部に評価値演算部61を有することとして説明していく。
なお、もちろん、ベクトル検出部52に限らず、ベクトル割付部54、または割付補償部57においても評価値DFDの代わりに評価値dfvが用いられるように構成してもよい。
次に、図16のフローチャートを参照して、信号処理装置1のフレーム周波数を変換する処理を説明する。
ステップS81において、ベクトル検出部52は、時刻t+1の入力画像のフレームt+1と、フレームメモリ51の入力画像の1つ前の時刻tのフレームtの画素値を入力する。なお、このとき、ベクトル割付部54、割付補償部57および画像補間部58も、時刻t+1の入力画像のフレームt+1と、フレームメモリ51の入力画像の1つ前の時刻tのフレームtの画素値を入力する。
ステップS82において、ベクトル検出部52は、動きベクトル検出処理を実行する。すなわち、ベクトル検出部52は、フレームメモリ51上のフレームtの着目ブロックと、入力画像である次のフレームt+1の対象ブロックの間で動きベクトルを検出し、検出した動きベクトルを、検出ベクトルメモリ53に記憶する。この2フレーム間の動きベクトルの検出方法には、勾配法またはブロックマッチング法などが用いられる。
また、動きベクトルの候補が複数ある場合には、ベクトル検出部52においては、評価値演算部61Bにより、各動きベクトルに対して、評価値dfv(差分分散)が求められ、求められた評価値dfvに基づいた信頼度の高い動きベクトルが検出される。すなわち、この場合、動きベクトルを検出する着目ブロックにおいて、最も確からしい動きベクトルが選択され、検出される。ステップS82における、動きベクトル検出処理の詳細は、図20を参照して後述する。
ステップS83において、ベクトル割付部54は、ベクトル割付処理を実行する。すなわち、ベクトル割付部54は、ステップS83において、フレームt上において求められた動きベクトルを、割付ベクトルメモリ55上の、補間する内挿フレーム上の着目画素に割り付け、動きベクトルが割り付けられた画素の割付フラグメモリ56の割付フラグを1(True)に書き換える。例えば、Trueである割付フラグは、対応する画素に動きベクトルが割り付けられていることを示し、Falseである割付フラグは、対応する画素に動きベクトルが割り付けられていないことを示す。
なお、各画素において、動きベクトルの候補が複数ある場合には、ベクトル割付部54においては、評価値演算部61により、各動きベクトルに対して、評価値DFDが求められ、求められた評価値DFDに基づいた信頼度の高い動きベクトルが割り付けられる。すなわち、この場合、動きベクトルを割り付ける着目画素において、最も確からしい動きベクトルが選択され、割り付けられる。ステップS83における、ベクトル割付処理の詳細は、図73を参照して後述する。
ステップS84において、割付補償部57は、割付補償処理を実行する。すなわち、割付補償部57は、ステップS84において、割付フラグメモリ56の割付フラグを参照し、ベクトル割付部54により動きベクトルが割り付けられなかった着目画素に対して、その着目画素の周辺画素の動きベクトルを補い、割付ベクトルメモリ55の内挿フレーム上に割り付ける。このとき、割付補償部57は、動きベクトルを補い、割付けた着目画素の割付フラグを1(True)に書き換える。
なお、周辺画素の動きベクトルが複数ある場合には、割付補償部57においては、各動きベクトルに対して、評価値演算部61により、評価値DFDが求められ、求められた評価値DFDに基づいた、信頼度の高い動きベクトルが割り付けられる。すなわち、この場合、動きベクトルを割り付ける着目画素において、最も確からしい動きベクトルが選択され、割り付けられる。ステップS84における、割付補償処理の詳細は、図76を参照して後述する。
ステップS85において、画像補間部58は、画像補間処理を実行する。すなわち、画像補間部58は、ステップS85において、割付ベクトルメモリ55の内挿フレームに割り付けられた動きベクトルと、フレームtおよびフレームt+1の画素値を用いて、内挿フレームの画素値を補間生成する。ステップS85における、画像補間処理の詳細は、図79を参照して後述する。画像補間部58は、ステップS86において、生成された内挿フレームを出力し、その次に、必要に応じて、フレームt+1を出力することにより、60P信号の画像を、図示せぬ後段に出力する。
ステップS87において、ベクトル検出部52は、すべてのフレームの処理が終了したか否かを判定し、すべてのフレームの処理がまだ終了していないと判定した場合、ステップS81に戻り、それ以降の処理を繰り返す。一方、ベクトル検出部52は、ステップS87において、すべてのフレームの処理が終了したと判定した場合、フレーム周波数を変換する処理を終了する。
以上のように、本発明に係る信号処理装置1は、24P信号の入力画像のフレームから動きベクトルを検出し、検出した動きベクトルを、60P信号のフレーム上の画素に割付け、割付けられた動きベクトルに基づいて、60P信号のフレーム上の画素値を生成する。
このとき、信号処理装置1は、ベクトル検出処理において、評価値dfv(差分分散)に基づく、より信頼度の高い動きベクトルを選択し、後段に出力する。したがって、信号処理装置1においては、動きベクトルを求めるフレーム間で平均輝度レベルが大きく変化してしまっても、動きベクトルの信頼度の評価を正しく行うことが可能になる。これにより、動きが破綻することなどが抑制され、より精度のよい画像を生成することができる。
次に、ベクトル検出部52の構成の詳細について説明する。
図17は、ベクトル検出部52の構成を示すブロック図である。図17に構成を示すベクトル検出部52は、入力される時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1を用いて、フレームt上の動きベクトルを検出し、検出した動きベクトルを、検出ベクトルメモリ53に記憶する。この動きベクトルを検出する処理は、複数の画素からなる所定のブロック毎に実行される。
初期ベクトル選択部101は、所定のブロック毎に、過去の動きベクトルの検出結果から求められる信頼度が高い動きベクトルを、勾配法に用いられる初期値となる初期ベクトルV0として、反復勾配法演算部103に出力する。具体的には、初期ベクトル選択部101は、検出ベクトルメモリ53に記憶される過去に求められた周辺のブロックの動きベクトルや、シフト初期ベクトルメモリ107に記憶されるシフト初期ベクトルを、初期ベクトルの候補ベクトルとして選択する。そして、初期ベクトル選択部101は、図14を参照して上述した評価値演算部61Bを有しており、評価値演算部61Bに、フレームtとフレームt+1を用いて、候補ベクトルの評価値dfvを求めさせ、候補ベクトルの中から、評価値演算部61Bにより求められた評価値dfvに基づく、最も信頼度が高いものを選択し、初期ベクトルV0として出力する。なお、初期ベクトル選択部101の構成の詳細は、図23を参照して後述する。
プリフィルタ102−1および102−2は、ローパスフィルタやガウシアンフィルタにより構成され、それぞれ、入力される画像のフレームtおよびフレームt+1のノイズ成分を除去し、反復勾配法演算部103に出力する。
反復勾配法演算部103は、初期ベクトル選択部101から入力された初期ベクトルV0と、プリフィルタ102−1および102−2を介して入力されるフレームtおよびフレームt+1を用いて、所定のブロック毎に、勾配法により、動きベクトルVnを算出する。反復勾配法演算部103は、初期ベクトルV0と、算出された動きベクトルVnをベクトル評価部104に出力する。また、反復勾配法演算部103は、ベクトル評価部104による動きベクトルの評価結果に基づいて、勾配法の演算を繰り返し行い、動きベクトルVnを算出する。
ベクトル評価部104も、評価値演算部61Bを有しており、評価値演算部61Bに、反復勾配法演算部103からの動きベクトルVn−1(または初期ベクトルV0)と、動きベクトルVnの評価値dfvを求めさせ、評価値演算部61Bにより求められた評価値dfvに基づいて、反復勾配法演算部103を制御し、勾配法の演算を繰り返し実行させ、最終的に、評価値dfvに基づく、信頼性の高いものを選択し、選択した動きベクトルVを、検出ベクトルメモリ53に記憶させる。
このとき、ベクトル評価部104は、動きベクトルVとともに、その動きベクトルVに対して求められた評価値dfvを、シフト初期ベクトル割付部105に供給する。なお、反復勾配法演算部103およびベクトル評価部104の構成の詳細は、図25を参照して後述する。
シフト初期ベクトル割付部105は、ベクトル評価部104より動きベクトルVおよびその評価値dfvが供給されると、次のフレーム上の着目ブロックを通過する動きベクトルを、その着目ブロックにシフトさせた、シフト初期ベクトルとして設定する。換言すると、シフト初期ベクトル割付部105は、動きベクトルVの終点のブロックと同じ位置の次のフレーム上の着目ブロックを始点とした、動きベクトルVと同じ大きさで同じ向きの動きベクトルを、シフト初期ベクトルとして設定する。そして、シフト初期ベクトル割付部105は、設定したシフト初期ベクトルを、着目ブロックに対応させて、シフト初期ベクトルメモリ107に割り付ける。
具体的には、シフト初期ベクトル割付部105は、シフト初期ベクトルとして割り付けられた動きベクトルVの評価値dfvを、着目ブロックに対応させて、評価値メモリ106に記憶させておき、同じ着目ブロックを通過する(すなわち、着目ブロックと同じ位置の過去のフレームのブロックを終点とする)他の動きベクトルVの評価値dfvと比較する。そして、シフト初期ベクトル割付部105は、評価値dfvに基づく、信頼度が高いとされた動きベクトルVを、着目ブロックにシフトさせ、着目ブロックのシフト初期ベクトルとして、シフト初期ベクトルメモリ107に割り付ける。なお、シフト初期ベクトル割付部105の構成の詳細は、図21を参照して後述する。
次に、ベクトル検出部52において用いられる勾配法の原理について説明する。まず、動画像中において、水平、垂直、時間軸を用いた座標(x,y,t)で表される画素の輝度値をg(x,y,t)とする。ここで、着目画素(x0,y0,t0)が、微小時間中に、(dx,dy,dt)だけ変位したとき、水平、垂直、時間軸の勾配(差分差)を、それぞれgx(x0,y0,t0),gy(x0,y0,t0),gt(x0,y0,t0)と表すと、変位後の画素の輝度値は、Taylor展開近似を用いて、次の式(7)で表される。
ここで、動画像中のある着目画素が1フレーム後に水平vx,垂直vyだけ移動した場合(以降、(vx,vy)と表す)、その画素の輝度値は、次の式(8)で表される。
式(7)を式(8)に代入すると、次の式(9)で表される。
式(9)は、vx,vyの2変数の式であるので、着目1画素に対する単独の式では、その解を求めることができない。そこで、次に説明するように、着目画素の周辺領域であるブロックを1つの処理単位として考え、ブロック(周辺領域)内の全画素が同じ動き(vx,vy)をすると仮定し、各画素について同様の式を立てる。仮定が前提となるが、2変数に対して周辺画素の個数の式が得られる。したがって、それらの式を連立させ、ブロック内全画素の動き補償フレーム差分の自乗和が最小になるような(vx,vy)を求める。
画素(x,y,t)が1フレーム間に(vx,vy)だけ移動したとき、その動き補償フレーム間差分dは、次の式(10)で表される。
式(10)において、Δx=gx(x,y,t)であり、水平方向の勾配を表し、Δy=gy(x,y,t)であり、垂直方向の勾配を表し、Δt=gt(x,y,t)であり、時間方向の勾配を表す。これらを用いて、動き補償フレーム間差分の自乗和をEとすると、式(11)で表される。
ここで、Eが最小となる(vx,vy)は、各変数における偏微分値が0になるとき、すなわち、δE/δvx=δE/δvy=0の条件が成立するときなので、式(11)から、次の式(12)および式(13)となる。
これらの式(12)および式(13)から、求めたい動きである(vx,vy)は、次の式(14)を演算することにより求めることができる。
ここで、図18を参照して、具体的に説明する。図18の例において、矢印Xは、水平方向を示しており、矢印Yは、垂直方向を示している。また、矢印Tは、図中、右奥の時刻tのフレームtから、左手前の時刻t+1のフレームt+1への時間の経過方向を示している。なお、図18の例においては、各フレームは、着目画素pの周辺領域(ブロック)として、勾配法演算に用いられる8画素×8画素の領域のみ示されている。
フレームtにおいて、左上の画素から下に5番目、右に5番目の画素である着目画素pの動きベクトルV(vx,vy)を、上述した勾配法を用いて求める場合、動きベクトルV(vx,vy)は、着目画素pのx,y方向のそれぞれについて求められる隣接画素pxおよびpyとの輝度の差分差(すなわち、勾配)ΔxおよびΔy、フレームt+1において求められる着目画素pの同位相に位置する画素qとの時間方向の輝度の差分差(勾配)Δtを、着目画素pの周辺領域(8画素×8画素)のすべての画素について求め、それらの差分差を、式(14)を用いて演算することにより、求めることができる。
すなわち、勾配法とは、2フレーム間において、勾配Δx,Δy,およびΔtを求め、求められたΔx,Δy,およびΔtから、差分自乗和を用いて、統計的に、動きベクトルV(vx,vy)を算出するものである。
一般的に、このような勾配法を用いた動きベクトル検出方法においては、微小動きに対して精度の高い結果が得られる。ただし、実際の動画像の中で動きを求めようとするとする場合、この勾配法は、その動き量が大きすぎるため実用的とはいえない。これに対応して、この勾配法を複数回反復する方法が考えられる。勾配法を反復して実行することにより、各演算で求められる動き量が収束するため、徐々に正しい動きが求められる。
しかしながら、ただ、勾配法を反復するだけでは、リアルタイム処理を行おうとした場合、演算時間の面から実用的ではない。そこで、ベクトル検出部52においては、過去フレームと現在フレームでの周辺画素の動きに基づいて求められる初期ベクトルを、初期値として用いることで、勾配法の繰り返し回数を軽減している。すなわち、動きの起点となる着目画素から、初期ベクトルが指す先へオフセットを予め加えることで大まかな動きを算出し、オフセットが加えられたその位置から勾配法を用いた演算を行うようにすれば、画素以下動きを含めた微調整を行うことができる。これにより、演算時間を増大させることなく、精度のよい動きベクトルを検出することができる。
図19は、初期ベクトルを用いて実行される反復勾配法について具体的に説明する図である。図19の例においては、矢印Tは、図中、左手前の時刻tのフレームtから、右奥の時刻t+1のフレームt+1への時間の経過を示している。なお、各画素p,q0,q1,q2,およびq3を中心としたブロックは、その画素の、勾配法演算に用いられる周辺領域(ブロック)を表している。
図19の例の場合、フレームtにおける着目画素pに対して、フレームt+1においては、着目画素pの同位相に位置する画素q0ではなく、予め求めておいた初期ベクトルv0をオフセット(移動)して計算した位置(画素)q1を開始点として1回目の勾配法演算が行われ、その結果、動きベクトルv1が得られる。
次に、画素q0からv0+v1をオフセットして計算した位置(画素)q2を開始点として、2回目の勾配法演算が行われ、その結果、動きベクトルv2が得られる。これにより、最終的に動きベクトルVは、式(15)として求められる。
V = v0+v1+v2
・・・(15)
以上のようにして、初期ベクトルを用いて、反復勾配法の演算を実行することにより、演算時間を短縮させつつ、精度の高い動きベクトルを求めることができる。
次に、図20のフローチャートを参照して、動きベクトル検出処理の詳細について説明する。ベクトル検出部52には、入力される時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1が入力される。
初期ベクトル選択部101は、ステップS101において、フレームt上の処理の対象となるブロックを、着目ブロックとして選択する。なお、フレーム上においては、左上のブロックからラスタスキャン順に処理が実行される。
ステップS102において、初期ベクトル選択部101は、初期ベクトル選択処理を実行する。初期ベクトル選択部101は、ステップS102において、所定のブロック毎に、過去の動きベクトルの検出結果から、信頼度が高い動きベクトルを選択し、選択した動きベクトルを、勾配法に用いられる初期値となる初期ベクトルV0として、反復勾配法演算部103に出力する。
すなわち、初期ベクトル選択部101は、過去の勾配法演算評価処理(後述するステップS103)において求められ、検出ベクトルメモリ53に記憶された周辺ブロックの動きベクトルや、過去のシフト初期ベクトル割付処理(後述するステップS104)においてシフト初期ベクトルメモリ107に記憶されたシフト初期ベクトルを、初期ベクトルの候補ベクトルとして選択する。そして、初期ベクトル選択部101は、評価値演算部61Bに、フレームtとフレームt+1を用いて、候補ベクトルの評価値dfvを求めさせ、候補ベクトルの中から、評価値演算部61Bにより求められた評価値dfvに基づいた信頼度が高いものを選択し、選択された候補ベクトルを、初期ベクトルV0として出力する。なお、ステップS102における、初期ベクトル選択処理の詳細は、図24を参照して後述する。
ステップS103において、反復勾配法演算部103およびベクトル評価部104は、反復勾配法演算評価処理(なお、反復勾配法演算処理とも称する)を実行する。具体的には、ステップS103において、反復勾配法演算部103は、初期ベクトル選択部101から入力された初期ベクトルV0と、プリフィルタ102−1および102−2を介して入力されるフレームtおよびフレームt+1を用いて、ベクトル評価部104による動きベクトルの評価結果に基づいて、勾配法の演算を繰り返し行い、動きベクトルVnを算出する。また、ベクトル評価部104は、評価値演算部61Bに、反復勾配法演算部103からの動きベクトルVn−1と、動きベクトルVnの評価値dfvを求めさせ、評価値演算部61Bにより求められた評価値dfvに基づく、最も信頼性の高いものを選択し、動きベクトルVとして、検出ベクトルメモリ53に記憶させる。このとき、ベクトル評価部104は、動きベクトルVとともに、その動きベクトルVに対して求められた評価値dfvを、シフト初期ベクトル割付部105に供給する。なお、ステップS103における、反復勾配法演算処理の詳細は、図32を参照して後述する。
ステップS104において、シフト初期ベクトル割付部105は、シフト初期ベクトル割付処理を実行する。シフト初期ベクトル割付部105は、ベクトル評価部104より動きベクトルVおよびその評価値dfvが供給されると、ステップS104において、次のフレーム上の着目ブロックを通過する動きベクトルを、その着目ブロックにシフトさせた、シフト初期ベクトルとして設定する。すなわち、換言すると、動きベクトルVの終点のブロックと同じ位置の次のフレーム上の着目ブロックを始点とした、動きベクトルVと同じ大きさで同じ向きの動きベクトルが、シフト初期ベクトルとして設定される。そして、シフト初期ベクトル割付部105は、設定したシフト初期ベクトルを、着目ブロックに対応させて、シフト初期ベクトルメモリ107に割り付ける。
なお、具体的には、シフト初期ベクトル割付部105は、シフト初期ベクトルとして割り付けられた動きベクトルVの評価値dfvを、着目ブロックに対応させて、評価値メモリ106に記憶させておき、同じ着目ブロックを通過する(すなわち、着目ブロックと同じ位置の過去のフレームのブロックを終点とする)他の動きベクトルVの評価値dfvと比較し、評価値dfvに基づく、信頼度が高いとされた動きベクトルVを、そのブロックにシフトさせてシフト初期ベクトルと設定し、シフトさせたブロックに対応させて、シフト初期ベクトルメモリ107に割り付ける。なお、シフト初期ベクトル割付部105の構成の詳細は、図22を参照して後述する。
ステップS105において、初期ベクトル選択部101は、フレームtにおいて、すべてのブロックの処理が終了したか否かを判定する。ステップS105において、すべてのブロックの処理が終了していないと判定された場合、処理は、ステップS101に戻り、それ以降の処理が繰り返される。また、ステップS105において、フレームtにおいて、すべてのブロックの処理が終了したと判定された場合、すなわち、フレームt上のすべてのブロックにおいて、動きベクトルVが検出されたと判定され、動きベクトル検出処理は、終了される。
以上のように、過去に検出された動きベクトルから初期ベクトルが選択され、選択された初期ベクトルに基づいて、反復勾配法の演算が用いられて、繰り返し動きベクトルが算出され、算出された動きベクトルの中から、評価値dfvに基づく、信頼度が高い(すなわち、最も確からしい)動きベクトルが検出される。この結果、検出ベクトルメモリ53に、フレームt上のすべてのブロックに対応する動きベクトルVが記憶される。
次に、シフト初期ベクトル割付部105の構成の詳細について説明する。
図21は、シフト初期ベクトル割付部105の構成を示すブロック図である。図21に構成を示すシフト初期ベクトル割付部105は、前(過去)フレームにおいて、ベクトル評価部104より検出された動きベクトルVに基づいて、初期ベクトルの候補ベクトルとなるシフト初期ベクトルを設定し、シフト初期ベクトルメモリ107に割り付ける処理を行う。シフト初期ベクトル割付部105には、ベクトル評価部104より検出された動きベクトルV、および、その動きベクトルVの評価値dfvが入力される。
割付対象位置演算部201は、ベクトル評価部104より検出された動きベクトルVが、次の時刻のフレーム上において通過するブロックの位置(すなわち、現在のフレーム上において検出された動きベクトルVの終点のブロックと同じ位置にある次のフレーム上のブロックの位置)を演算し、演算されたブロックの位置を、評価値メモリ106およびシフト初期ベクトル置換部203に供給する。
評価値比較部202は、動きベクトルV、および、その動きベクトルVの評価値dfvが入力されると、割付対象位置演算部201からのブロックの位置の評価値dfvを、評価値メモリ106から読み出す。そして、評価値比較部202は、評価値メモリ106から読み出された評価値dfvと、ベクトル評価部104により検出された動きベクトルVの評価値dfvとを比較判定する。
評価値比較部202は、検出された動きベクトルVの評価値dfvの方が小さい(すなわち、信頼度が高い)と判定した場合、シフト初期ベクトル置換部203を制御し、シフト初期ベクトルメモリ107の、シフト初期ベクトル割付部105により供給されたブロックの位置のシフト初期ベクトルを、評価値dfvに基づく、信頼度が高いと判定した動きベクトルVで書き換えさせる。また、それと同時に、評価値比較部202は、評価値置換部204を制御し、評価値メモリ106において、割付対象位置演算部201により選択されたブロックの位置の評価値dfvを、動きベクトルVの評価値dfvで書き換えさせる。
シフト初期ベクトル置換部203は、シフト初期ベクトルメモリ107の、割付対象位置演算部201により供給されたブロックの位置のシフト初期ベクトルを、評価値比較部202から供給される動きベクトルV(すなわち、動きベクトルVと同じ大きさで同じ向きの動きベクトル)で書き換える。評価値置換部204は、評価値比較部202の制御のもと、評価値メモリ106において、割付対象位置演算部201により選択されたブロックの位置の評価値dfvを、動きベクトルVの評価値dfvで書き換える。
評価値メモリ106は、次のフレーム上における、各ブロックに割り当てられるシフト初期候補ベクトルの評価値dfvをブロック毎に記憶する。シフト初期ベクトルメモリ107は、次のフレームにおける各ブロックにおいて最も評価値dfvが小さい(すなわち、最も信頼度がある)動きベクトルを、シフト初期ベクトルとして、そのブロックに対応させて記憶する。
次に、図22のフローチャートを参照して、シフト初期ベクトル割り付け処理の詳細について説明する。前段において、ベクトル評価部104は、フレームt−1上の着目ブロックの動きベクトルVを検出すると、検出された動きベクトルVとともに、その動きベクトルVに対して求めた評価値dfvを、シフト初期ベクトル割付部105に供給する。
ステップS201において、評価値比較部202は、ベクトル評価部104から、動きベクトルVとともに、その動きベクトルVの評価値dfvを入力する。また、このとき、割付対象位置演算部201も、動きベクトルVを入力する。割付対象位置演算部201は、ステップS202において、動きベクトルVのフレームtにおけるオフセット(動き補償)先の割付対象ブロックの位置を求める。すなわち、割付対象位置演算部201は、フレームt−1上において検出された動きベクトルVの終点のブロックと同じ位置にあるフレームt上のブロックの位置を求める。
割付対象位置演算部201は、ステップS203において、求められた割付対象ブロックのうち、1つの割付対象ブロックを選択し、選択した割り付け対象ブロックの位置を、評価値メモリ106およびシフト初期ベクトル置換部203に供給する。なお、ステップS203においては、割付対象ブロックのうち、フレームt上において左上のブロックから順に選択される。
ステップS204において、評価値比較部202は、評価値メモリ106から、割付対象位置演算部201により選択された割付対象ブロックの評価値dfvを取得し、ステップS205において、ステップS201において入力された動きベクトルVの評価値dfvが、評価値メモリ106の評価値dfvよりも小さいか否か(すなわち、動きベクトルVの評価値dfvが、評価値メモリ106の評価値dfvよりも信頼度が高いか否か)を判定する。ステップS205において、動きベクトルVの評価値dfvが、評価値メモリ106の評価値dfvよりも小さいと判定された場合、処理は、ステップS206に進む。
評価値比較部202は、ステップS206において、シフト初期ベクトル置換部203を制御し、割付対象位置演算部201により選択されたシフト初期ベクトルメモリ107の割付対象ブロックのシフト初期ベクトルを、動きベクトルV(すなわち、動きベクトルVと同じ大きさで同じ向きの動きベクトル)に書き換えさせ、ステップS207において、評価値置換部204を制御し、割付対象位置演算部201により選択された割付対象ブロックの評価値dfvを、動きベクトルVの評価値dfvで書き換えさせる。
また、ステップS205において、ステップS201において入力された動きベクトルVの評価値dfvが、評価値メモリ106に記憶される評価値dfvよりも小さくないと判定された場合、処理は、ステップS206およびS207をスキップし、ステップS208に進む。すなわち、この場合、評価値メモリ106の評価値dfvが、動きベクトルVの評価値dfvよりも信頼度が高いと判定されるので、評価値メモリ106およびシフト初期ベクトルメモリ107の値は、書き換えられることはない。
割付対象位置演算部201は、ステップS208において、動きベクトルVの割り付け対象ブロックすべての処理が終了したか否かを判定する。ステップS208において割り付け対象ブロックすべての処理が終了していないと判定された場合、処理は、ステップS203に戻り、それ以降の処理が繰り返される。また、ステップS208において、動きベクトルVの割り付け対象ブロックすべての処理が終了したと判定された場合、シフト初期ベクトル割付処理は終了される。
なお、初回の処理においては、選択された割付対象ブロックに対応するシフト初期ベクトルが、シフト初期ベクトルメモリ107にまだ記憶されていない。したがって、そのシフト初期ベクトルの評価値dfvが、評価値メモリ106の対応する割付対象ブロックに、まだ記憶されていない場合には、ステップS204において、選択された割付対象ブロックから評価値dfvは、取得されないので、ステップS205においてはYesと判定されることとし、ステップS206およびS207の処理が実行される。
以上のように、シフト初期ベクトルを割り付ける際にも、評価値dfvを用いるようにしたので、光源の移動や影の通過などにより、フレーム間の平均輝度レベルが変化する場合であっても、ベクトルの信頼度の評価を正しく行うことができ、勾配法演算による動きベクトル検出に、より適切な初期ベクトルの候補を得ることができる。
また、シフト初期ベクトルを求める際に、前の時刻のフレームにおいて検出された動きベクトルが次の時刻のフレームにおいて通過するブロック(すなわち、フレームt−1上において検出された動きベクトルVの終点のブロックと同じ位置にあるフレームt上のブロック)を求め、次の時刻のフレーム上の着目ブロックにおけるシフト初期ベクトルとして割り付けるようにし、さらに、その際に、評価値dfvも前の時刻のフレームにおいて検出された動きベクトルを求める際に算出されるものを用いるようにしたので、再度評価値dfvを求める必要がなく、着目ブロックを通過する動きベクトルを、前の時刻のフレームの全ブロックの動きベクトルから探索する場合よりも、処理の演算量が削減されるため、膨大な演算量により実現が困難であったハードウェア化を実現することができる。
次に、初期ベクトル選択部101の構成の詳細について説明する。
図23は、初期ベクトル選択部101の構成を示すブロック図である。図23に構成を示す初期ベクトル選択部101は、前(過去)フレームにおいて検出された動きベクトルや、シフト初期ベクトルなどの候補ベクトル(以下、初期候補ベクトルとも称する)から、信頼度の高い動きベクトルを、初期ベクトルとして選択する処理を行う。初期ベクトル選択部101には、時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1が入力される。
候補ベクトル位置演算部251は、フレームtが入力されると、フレームt上の処理の対象となる着目ブロックを選択し、着目ブロックの周辺領域から、着目ブロックの初期候補ベクトルを取得する候補ブロックの位置、初期候補ベクトルとなる動きベクトルの種類および優先順位を求め、求められた優先順位の順に、候補ブロックの位置情報および初期候補ベクトルの種類情報を、検出ベクトル取得部252およびシフト初期ベクトル取得部253に供給する。また、候補ベクトル位置演算部251は、候補ブロックの位置情報を、オフセット位置演算部254にも供給する。
なお、信号処理装置1においては、初期候補ベクトルの数は、初期ベクトルの精度と、ハードウェア能力の兼ね合いなどに基づいて所定数に設定されており、さらに、候補ブロックの位置、初期候補ベクトルの種類、および優先順位も、予め設定されている。また、初期候補ベクトルの種類としては、過去フレームにおいて、所定のブロックを通過する動きベクトルを、その所定のブロックにシフトさせた動きベクトル(すなわち、過去フレーム上において検出された動きベクトルの終点のブロックと同じ位置にある次のフレーム上のブロックを始点とした、動きベクトルVと同じ大きさで同じ向きの動きベクトル)であるシフト初期ベクトルSV、過去フレームにおいて検出された動きベクトル(以下、過去ベクトルPVとも称する)、現在のフレームにおいて着目ブロックより手前のブロックにおいて検出された動きベクトル(現在ベクトルCVとも称する)、および0ベクトルがある。
したがって、候補ベクトル位置演算部251は、予め設定された初期候補ベクトルの種類が過去ベクトルまたは現在ベクトルであった場合、候補ブロックの位置情報および初期候補ベクトルの種類情報を、検出ベクトル取得部252に供給し、求めた初期候補ベクトルの種類がシフト初期ベクトルであった場合、候補ブロックの位置情報および初期候補ベクトルの種類情報を、シフト初期ベクトル取得部253に供給し、そのどちらでもなかった場合(例えば、初期候補ベクトルの種類が、0ベクトルである場合)、0ベクトルを設定し、0ベクトルと共に、候補ブロックの位置情報を、オフセット位置演算部254に供給する。
検出ベクトル取得部252は、候補ベクトル位置演算部251により供給された候補ブロックの位置情報および初期候補ベクトルの種類情報に応じた動きベクトルを、検出ベクトルメモリ53より取得し、取得した動きベクトルを、初期候補ベクトルとして、オフセット位置演算部254に出力する。
シフト初期ベクトル取得部253は、候補ベクトル位置演算部251により供給された候補ブロックの位置情報および初期候補ベクトルの種類情報に応じて、候補ブロックの位置情報に対応したシフト初期ベクトルを、シフト初期ベクトルメモリ107から取得し、初期候補ベクトルとしてオフセット位置演算部254に出力する。また、シフト初期ベクトル取得部253は、候補ベクトル位置演算部251により指示されたブロックの位置に、シフト初期ベクトルが割り付けられていない場合、0ベクトルを、オフセット位置演算部254に出力する。なお、シフト初期ベクトルが割り付けられていない場合には、0ベクトルが、シフト初期ベクトルメモリ107に予め記憶されているようにしてもよい。
オフセット位置演算部254は、検出ベクトル取得部252またはシフト初期ベクトル取得部253から初期候補ベクトル(あるいは候補ベクトル位置演算部251からの0ベクトル)を入力すると、候補ベクトル位置演算部251により供給された候補ブロックの位置情報に基づいて、各初期候補ベクトルに対して、フレームtの着目ブロックを、フレームt+1にオフセット(動き補償)させたオフセット先のブロック位置を演算する。そして、オフセット位置演算部254は、初期候補ベクトルとともに、候補ブロックの位置情報、およびオフセット先ブロック位置の情報を、図14を参照して上述した評価値演算部61Bに出力する。
評価値演算部61Bは、オフセット位置演算部254より初期候補ベクトルとともに、候補ブロックの位置情報、およびオフセット先ブロック位置の情報を入力すると、フレームtとフレームt+1を用いて、初期候補ベクトルの評価値dfvを求める。そして、評価値演算部61Bは、初期候補ベクトルとともに、求められた評価値dfvを、評価値比較部256に出力する。
評価値比較部256は、評価値演算部61Bにより入力された評価値dfvと、最適候補格納用レジスタ257に格納されている最適候補ベクトルの評価値dfvを比較し、評価値演算部61Bにより入力された初期候補ベクトルの評価値dfvが、最適候補ベクトルの評価値dfvよりも小さい、すなわち、初期候補ベクトルが最適候補ベクトルよりも信頼度が高いと判定された場合、最適候補格納用レジスタ257の最適候補ベクトルおよびその評価値dfvを、信頼度が高いとされた初期候補ベクトルおよびその評価値dfvで置き換える。そして、最終的に、評価値比較部256は、最適候補格納用レジスタ257を制御し、すべての候補ベクトルの中から、評価値dfvに基づく、信頼度が最も高いと判定された最適候補ベクトルを、初期ベクトルV0として、反復勾配法演算部103に出力させる。
最適候補格納用レジスタ257は、評価値比較部256により評価値dfvが小さい(信頼度が高い)とされた初期候補ベクトルが、最適候補ベクトルとして、その評価値dfvとともに記憶されている。そして、最適候補格納用レジスタ257は、評価値比較部256の制御のもと、最終的に記憶されている最適候補ベクトルを、初期ベクトルV0として、反復勾配法演算部103に出力する。
次に、図24のフローチャートを参照して、初期ベクトル選択処理の詳細について説明する。
候補ベクトル位置演算部251は、ステップS251において、選択された着目ブロックの周辺領域から、予め設定されている着目ブロックの初期候補ベクトルを取得する候補ブロックの位置、初期候補ベクトルの種類および優先順位を求め、ステップS252において、求められた優先順位の順に、候補ブロックの初期候補ベクトルの種類が、過去ベクトルまたは現在ベクトルであるか否かを判定する。ステップS252において、候補ブロックの初期候補ベクトルの種類が、過去ベクトルまたは現在ベクトルであると判定された場合、候補ベクトル位置演算部251は、ステップS253において、候補ブロックの位置情報および初期候補ベクトルの種類情報を、検出ベクトル取得部252に供給し、検出ベクトル取得部252に、候補ブロックの位置情報および初期候補ベクトルの種類情報に応じた動きベクトル(過去ベクトルPVまたは現在ベクトルCV)を、検出ベクトルメモリ53から取得させ、取得させた動きベクトルを、オフセット位置演算部254に出力させる。
ステップS252において、候補ブロックの初期候補ベクトルの種類が、過去ベクトルまたは現在ベクトルでないと判定された場合、候補ベクトル位置演算部251は、ステップS254において、候補ブロックの初期候補ベクトルの種類が、シフト初期ベクトルであるか否かを判定する。ステップS254において、候補ブロックの初期候補ベクトルの種類が、シフト初期ベクトルであると判定された場合、候補ベクトル位置演算部251は、ステップS255において、候補ブロックの位置情報および初期候補ベクトルの種類情報を、シフト初期ベクトル取得部253に供給し、シフト初期ベクトル取得部253に、候補ブロックの位置情報に対応したシフト初期ベクトルを、シフト初期ベクトルメモリ107から取得させ、取得させたシフト初期ベクトルを、オフセット位置演算部254に出力させる。
ステップS254において、候補ブロックの初期候補ベクトルの種類が、シフト初期ベクトルではないと判定された場合(すなわち、候補ブロックの初期候補ベクトルの種類が、0ベクトルであると判定された場合)、候補ベクトル位置演算部251は、ステップS256において、初期候補ベクトルに0ベクトルを設定し、0ベクトルと共に、候補ブロックの位置情報を、オフセット位置演算部254に供給する。なお、ステップS253およびS255においても、候補ベクトル位置演算部251は、候補ブロックの位置情報を、オフセット位置演算部254に供給している。
オフセット位置演算部254は、ステップS257において、検出ベクトル取得部252またはシフト初期ベクトル取得部253から初期候補ベクトルを入力すると、候補ベクトル位置演算部251により供給された候補ブロックの位置情報に基づいて、各初期候補ベクトルに対して、フレームtの着目ブロックを、フレームt+1にオフセットさせたオフセット先のブロック位置を演算する。そして、オフセット位置演算部254は、初期候補ベクトルとともに、候補ブロックの位置情報、およびオフセット先ブロック位置の情報を、評価値演算部61Bに出力する。
評価値演算部61Bは、オフセット位置演算部254より初期候補ベクトルとともに、候補ブロックの位置情報、およびオフセット先ブロック位置の情報を入力すると、ステップS258において、フレームtとフレームt+1を用いて、初期候補ベクトルの評価値dfvを求め、初期候補ベクトルとともに、求められた評価値dfvを、評価値比較部256に出力する。
評価値比較部256は、ステップS259において、評価値演算部61Bにより求められた評価値dfvが、最適候補格納用レジスタ257に格納されている最適候補ベクトルの評価値dfvより小さいか否かを判定し、評価値演算部61Bにより求められた評価値dfvが、最適候補格納用レジスタ257に格納されている最適候補ベクトルの評価値dfvより小さい、すなわち、初期候補ベクトルが最適候補ベクトルよりも信頼度が高いと判定された場合、ステップS260において、最適候補格納用レジスタ257の最適候補ベクトルおよびその評価値dfvを、信頼度が高いとされた初期候補ベクトルおよびその評価値dfvで書き換える。
また、評価値演算部61Bにより求められた評価値dfvが、最適候補格納用レジスタ257に格納されている最適候補ベクトルの評価値dfvより小さくないと判定された場合、処理は、ステップS260をスキップし、ステップS261に進む。
ステップS261において、候補ベクトル位置演算部251は、すべての初期候補ベクトル(例えば、8ベクトル)の処理が終了したか否かを判定する。ステップS261において、すべての初期候補ベクトルの処理が終了していないと判定された場合、処理は、ステップS252に戻り、それ以降の処理が繰り返される。
ステップS261において、すべての初期候補ベクトルの処理が終了したと判定された場合、ステップS262において、評価値比較部256は、最適候補格納用レジスタ257を制御し、すべての初期候補ベクトルの中から、評価値dfvに基づく、信頼度が最も高いとされた最適候補ベクトルを、初期ベクトルV0として反復勾配法演算部103に出力させる。以上により、初期ベクトル選択処理は終了される。
以上のように、着目ブロックにおいて、複数の初期候補ベクトルの評価値dfvを求め、評価値dfvが最も小さい、すなわち、信頼度が最も高いとされる初期候補ベクトルを、初期ベクトルとして選択するようにしたので、光源の移動や影の通過などにより、動きを持つ物体の平均輝度レベルが大きく変化する場合であっても、後段の動きベクトル検出に最適な初期ベクトルを与えることができ、その結果、後段の動きベクトル検出の精度を向上させることができる。
さらに、連続するフレーム間において動物体の動き量にはある程度の連続性があり、動き量の変化が小さいことに基づいて、前フレームから着目ブロックを通過する動きベクトルであるシフト初期ベクトルも、評価値dfvを用いて求めて、初期ベクトルの候補とするようにしたので、従来のように、周辺ブロックにおいて過去に求められている動きベクトルのみを初期ベクトルの候補とする場合よりも、精度の高い動き検出を行うことができる。これは、特に、動いている物体の境界において、効果的である。
次に、反復勾配法演算部103およびベクトル評価部104の構成の詳細について説明する。
図25は、反復勾配法演算部103およびベクトル評価部104の構成を示すブロック図である。図25に構成を示す反復勾配法演算部103およびベクトル評価部104は、入力される時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1を用いて、最適な動きベクトルを検出する処理を行う。
この動きベクトルを検出する処理は、複数の画素からなる所定のブロック毎に実行される処理であり、反復勾配法演算部103およびベクトル評価部104は、各ブロック毎に、勾配法を用いた演算を繰り返し実行することにより、評価値dfvに基づく、信頼度が高い、最適な動きベクトルを出力する。すなわち、動きベクトルは、動きベクトルの検出対象となる検出対象ブロック毎に求められるが、その検出対象ブロックの動きベクトルを求める際の勾配法演算は、勾配法演算の対象となる演算ブロックを対象として実行される。
反復勾配法演算部103は、セレクタ401、メモリ制御信号生成部402、メモリ403、有効画素判定部404、勾配法演算部405、および遅延部406により構成される。
セレクタ401には、初期ベクトル選択部101からの初期ベクトルV0が入力される。セレクタ401は、初期ベクトル選択部101からの初期ベクトルV0を、勾配法演算の初期値として用いる動きベクトル(以下、オフセットベクトルと称する)Vn−1として選択し、メモリ制御信号生成部402、勾配法演算部405、およびベクトル評価部104に出力する。
また、セレクタ401は、遅延部406から、勾配法演算部405により勾配法演算が実行された結果の動きベクトルVが入力された場合、勾配法演算部405により演算された動きベクトルVを、オフセットベクトルVn−1として選択し、メモリ制御信号生成部402、勾配法演算部405、およびベクトル評価部104に出力する。
メモリ制御信号生成部402には、信号処理装置1の図示せぬ制御部から、処理の開始タイミングと位置情報を制御する制御信号が入力される。メモリ制御信号生成部402は、制御信号およびセレクタ401からのオフセットベクトルVn−1に応じて、メモリ403に記憶されている時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1から、処理の対象となる演算ブロックを構成する画素の画素値(輝度値)(以下、対象画素値と称する)を読み出させ、読み出した対象画素値を、有効画素判定部404および勾配法演算部405に供給させる。
メモリ403には、プリフィルタ102−1および102−2を介して、時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1が入力され、記憶されている。
有効画素判定部404は、メモリ403から供給される対象画素値を用いて、例えば、フレームtとフレームt+1の演算ブロックの画素差分を演算し、その画素差分に基づいて、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値より多いか否かを判定し、その判定結果に応じたカウンタフラグ(countflg)を、勾配法演算部405およびベクトル評価部104に供給する。
また、有効画素判定部404は、演算ブロックにおいて有効な画素と判定された画素について、水平方向および垂直方向毎の勾配状態(すなわち、勾配があるか否か)を求め、水平方向および垂直方向のどちらか一方にのみ勾配がある画素(以下、片側勾配の画素とも称する)の割合が多いか否かも判定し、その判定結果に応じた勾配フラグ(gladflg)を、勾配法演算部405およびベクトル評価部104に供給する。
勾配法演算部405は、有効画素判定部404から供給されるカウンタフラグおよび勾配フラグの値に基づいて、メモリ403から供給される対象画素値を用いて、勾配法演算を実行し、セレクタ401からのオフセットベクトルVn−1を用いて、動きベクトルVnを算出し、算出された動きベクトルVnを、ベクトル評価部104に出力する。なお、このとき、勾配法演算部405においては、用いられる勾配法演算(式)が、上述した式(14)の最小自乗和を用いた勾配法演算処理(以下、統合型勾配法演算処理とも称する)か、後述する式(23)の簡易的な勾配法演算処理(以下、独立型勾配法演算処理)のどちらに切り替えられて実行される。
遅延部406には、ベクトル評価部104から、勾配法演算部405により算出され、ベクトル評価部104により評価された結果の動きベクトルVが入力される。遅延部406は、ベクトル評価部104から入力される動きベクトルVを、有効画素判定部404および勾配法演算部405の次の処理のサイクルまで保持し、次の処理のサイクルで、動きベクトルVをセレクタ401に出力する。
ベクトル評価部104は、図14を参照して上述した評価値演算部61B、および評価値判定部412により構成されている。
評価値演算部61Bには、プリフィルタ102−1および102−2を介して、時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1が入力され、また、信号処理装置1の図示せぬ制御部から、位置情報を制御する制御信号が入力されている。
評価値演算部61Bは、評価値判定部412の制御のもと、フレームtとフレームt+1、および位置情報を用いて、勾配法演算部405により算出された動きベクトルVn、セレクタ401からのオフセットベクトルVn−1、および、0ベクトルの評価値dfvを求める。そして、評価値演算部61Bは、各ベクトルとともに、求められた評価値dfvを、評価値判定部412に出力する。
評価値判定部412は、有効画素判定部404から供給されるカウンタフラグおよび勾配フラグに基づいて、評価値演算部61Bに演算させた評価値dfvを比較することにより、信頼性の高いものを選択し、動きベクトルVを求める。
また、評価値判定部412は、有効画素判定部404から供給されるカウンタフラグおよび勾配フラグに基づいて、勾配法演算処理を反復させるか否かを判定し、反復させると判定した場合、求めた動きベクトルVを、遅延部406に出力する。評価値判定部412は、勾配法演算処理を反復させない場合、求めた動きベクトルVを、検出ベクトルメモリ53に記憶させる。このとき、評価値判定部412は、動きベクトルVとともに、その動きベクトルVに対して求められた評価値dfvを、シフト初期ベクトル割付部105に供給する。
図26は、有効画素判定部404の詳細な構成を示すブロック図である。図26の例において、有効画素判定部404は、画素差分算出部421、画素判定部422、カウンタ423、勾配法継続判定部424、および演算実行判定部425により構成される。
画素差分算出部421は、第1空間勾配画素差分算出部421−1、第2空間勾配画素差分算出部421−2、および時間方向画素差分算出部421−3により構成される。
第1空間勾配画素差分算出部421−1は、メモリ403から供給される対象画素値のうち、フレームt+1における演算ブロック内の画素の画素値を用いて、フレームt+1における演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを算出し、算出されたフレームt+1における演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを、画素判定部422に出力する。
第2空間勾配画素差分算出部421−2は、メモリ403から供給される対象画素値のうち、フレームtにおける演算ブロック内の画素の画素値を用いて、フレームtにおける演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを算出し、算出されたフレームtにおける演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを、画素判定部422に出力する。
時間方向画素差分算出部421−3は、メモリ403から供給される対象画素値(すなわち、フレームtおよびフレームt+1における演算ブロック内の画素の画素値)を用いて、フレームtにおける演算ブロック内の画素の時間方向の画素差分Δtを算出し、算出されたフレームtにおける演算ブロック内の画素の時間方向の画素差分Δtを、画素判定部422に出力する。
画素判定部422は、有効画素判定部431、水平勾配判定部432、および垂直勾配判定部433により構成される。カウンタ423は、有効画素数カウンタ441、水平勾配無カウンタ442、および垂直勾配無カウンタ443により構成される。
有効画素判定部431は、第1空間勾配画素差分算出部421−1からのフレームt+1における演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、第2空間勾配画素差分算出部421−2からのフレームtにおける演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、並びに、時間方向画素差分算出部421−3からのフレームt+1およびフレームt間の演算ブロック内の画素の時間方向の画素差分Δtを用いて、所定の論理演算を行う。なお、この所定の論理演算の詳細は、図29を参照して後述する。
有効画素判定部431は、その所定の論理演算に基づいて、演算ブロック内の画素が、動きベクトルの検出(すなわち、後段の勾配法演算部405の演算)に有効であるか否かを判定し、動きベクトルの検出に有効であると判定した場合、有効画素数カウンタ441の値(有効画素の数)を1加算するとともに、水平勾配判定部432および垂直勾配判定部433を制御し、動きベクトルの検出に有効であると判定した有効画素について、水平方向および垂直方向それぞれの勾配状態を求めさせる。
水平勾配判定部432は、有効画素判定部431の制御のもと、有効画素の水平方向の勾配の状態を求め、有効画素の水平方向の勾配があるか否かを判定し、有効画素の水平方向の勾配がないと判定した場合、水平勾配無カウンタ442の値(水平勾配がない画素の数)を1加算する。
垂直勾配判定部433は、有効画素判定部431の制御のもと、有効画素の垂直方向の勾配の状態を求め、有効画素の垂直方向の勾配があるか否かを判定し、有効画素の垂直方向の勾配がないと判定した場合、垂直勾配無カウンタ443の値(すなわち、水平勾配がない画素の数)を1加算する。
有効画素数カウンタ441は、演算ブロック毎に、有効画素判定部431により動きベクトルの検出に有効であると判定された有効画素の数を記憶する。水平勾配無カウンタ442は、演算ブロック毎に、水平勾配判定部432により、水平方向の勾配がないと判定された有効画素の数を記憶する。垂直勾配無カウンタ443は、演算ブロック毎に、垂直勾配判定部433により、垂直方向の勾配がないと判定された有効画素の数を記憶する。
勾配法継続判定部424は、有効画素数カウンタ441を参照して、演算ブロックにおける勾配法の演算に有効な画素の数が所定のしきい値αより多いか否かを判定する。勾配法継続判定部424は、演算ブロックにおける勾配法の演算に有効な画素の数が所定のしきい値αより多いと判定した場合、勾配法演算を実行させるカウンタフラグ(countflg=1)を、演算実行判定部425、勾配法演算部405およびベクトル評価部104に出力し、演算ブロックにおける勾配法の演算に有効な画素の数が所定のしきい値αより少ないと判定した場合、勾配法演算を打ち切らせるカウンタフラグ(countflg=0)を、演算実行判定部425、勾配法演算部405およびベクトル評価部104に出力する。
演算実行判定部425は、カウンタ値演算部451、およびフラグ設定部452により構成される。
カウンタ値演算部451は、勾配法継続判定部424からのカウンタフラグの値が1であるとき、カウンタ423(有効画素数カウンタ441、水平勾配無カウンタ442、および垂直勾配無カウンタ443)から、有効画素の数、水平方向に勾配のない画素の数、および垂直方向に勾配のない画素の数を取得して、演算ブロックにおける有効画素と、有効画素のうち片側勾配の画素(すなわち、水平方向または垂直方向のどちらか一方にのみ勾配がある画素)の割合を演算し、演算結果に応じて、フラグ設定部452が設定する勾配フラグ(gladflg)の値を制御する。
フラグ設定部452は、カウンタ値演算部451の制御のもと、勾配フラグの値を設定し、勾配フラグを、勾配法演算部405および評価判定部412に出力する。勾配フラグの値については、図31を参照して後述する。
図27は、勾配法演算部405の詳細な構成を示すブロック図である。図27の例において、勾配法演算部405は、画素差分算出部461、演算判定部462、統合型勾配演算部463−1、独立型勾配演算部463−2、およびベクトル算出部464により構成される。
画素差分算出部461は、第1空間勾配画素差分算出部461−1、第2空間勾配画素差分算出部461−2、および時間方向画素差分算出部461−3により構成され、演算判定部462の制御のもと、対象となる画素差分を算出する。
第1空間勾配画素差分算出部461−1は、第1空間勾配画素差分算出部421−1と同様の構成であり、メモリ403から供給される対象画素値のうち、フレームt+1における演算ブロック内の画素の画素値を用いて、フレームt+1における演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを算出し、算出されたフレームt+1における演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを、演算判定部462に出力する。
第2空間勾配画素差分算出部461−2は、第2空間勾配画素差分算出部421−2と同様に構成され、メモリ403から供給される対象画素値のうち、フレームtにおける演算ブロック内の画素の画素値を用いて、フレームtにおける演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを算出し、算出されたフレームtにおける演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを、演算判定部462に出力する。
時間方向画素差分算出部461−3は、時間方向画素差分算出部421−3と同様に構成され、メモリ403から供給される対象画素値(すなわち、フレームtおよびフレームt+1における演算ブロック内の画素の画素値)を用いて、フレームtにおける演算ブロック内の画素の時間方向の画素差分Δtを算出し、算出されたフレームtにおける演算ブロック内の画素の時間方向の画素差分Δtを、演算判定部462に出力する。
演算判定部462は、有効画素判定部471、水平勾配判定部472、および垂直勾配判定部473により構成される。有効画素判定部471は、勾配法継続判定部424から供給されるカウンタフラグ(countflg)の値に基づいて、勾配法演算部405の実行、禁止を制御する。
また、有効画素判定部471は、演算実行判定部425から供給される勾配フラグ(gladflg)の値に基づいて、第1空間勾配画素差分算出部461−1、第2空間勾配画素差分算出部461−2、および時間方向画素差分算出部461−3の画素差分算出処理の実行、禁止を制御するとともに、統合型勾配演算部463−1および独立型勾配演算部463−2のどちらで、勾配法演算処理を行うかを判定する。
有効画素判定部471は、勾配フラグの値に基づいて、統合型勾配演算部463−1で勾配法演算処理を行うと判定した場合、第1空間勾配画素差分算出部461−1からのフレームt+1における演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、第2空間勾配画素差分算出部461−2からのフレームtにおける演算ブロック内の画素の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、並びに、時間方向画素差分算出部461−3からのフレームt+1およびフレームt間の演算ブロック内の画素の時間方向の画素差分Δtを用いて、有効画素判定部431と同様の所定の論理演算を行い、所定の論理演算に基づいて、演算ブロック内の画素が、動きベクトルの検出に有効であるか否かを判定し、動きベクトルの検出に有効であると判定した有効画素の勾配(画素差分)を、統合型勾配演算部463−1に供給し、統合型勾配法演算処理を実行させる。
有効画素判定部471は、勾配フラグの値に基づいて、独立型勾配演算部463−2で勾配法演算処理を行うと判定した場合、水平勾配判定部472および垂直勾配判定部473の少なくとも一方を制御し、所定の論理演算に基づいて、演算ブロック内の画素が動きベクトルの検出に有効であると判定した有効画素について、水平方向および垂直方向それぞれの勾配状態を求めさせる。
水平勾配判定部472は、有効画素判定部471の制御のもと、有効画素の水平方向の勾配の状態を求め、有効画素の水平方向の勾配があるか否かを判定し、有効画素のうち、水平方向の勾配がある画素の勾配(画素差分)のみを、独立型勾配演算部463−2に供給し、水平方向に対しての独立型勾配法演算処理を実行させる。
垂直勾配判定部473は、有効画素判定部471の制御のもと、有効画素の垂直方向の勾配の状態を求め、有効画素の垂直方向の勾配があるか否かを判定し、有効画素のうち、垂直方向の勾配がある画素の勾配(画素差分)のみを、独立型勾配演算部463−2に供給し、垂直方向に対しての独立型勾配法演算処理を実行させる。
統合型勾配演算部463−1は、有効画素判定部471の制御のもと、統合型勾配法演算処理を実行する。すなわち、統合型勾配演算部463−1は、有効画素判定部471により供給された有効画素の勾配(時間方向の画素差分Δt、水平方向の画素差分Δx、および、垂直方向の画素差分Δy)を積算し、上述した式(14)の最小自乗和を用いて、動きベクトルvnを求め、求めた動きベクトルvnをベクトル算出部464に出力する。
独立型勾配演算部463−2は、水平勾配判定部472の制御のもと、水平方向の独立型勾配法演算処理を実行する。すなわち、独立型勾配演算部463−2は、水平勾配判定部472により供給された有効画素のうち水平方向に勾配がある画素の勾配(時間方向の画素差分Δt、水平方向の画素差分Δx、および、垂直方向の画素差分Δy)を積算し、式(14)の代わりに、後述する簡易的な数式である式(23)を用いて、動きベクトルvnの水平方向成分を求め、求めた動きベクトルvnの水平方向成分をベクトル算出部464に出力する。
また、独立型勾配演算部463−2は、垂直勾配判定部473の制御のもと、垂直方向の独立型勾配法演算処理を実行する。すなわち、独立型勾配演算部463−2は、垂直勾配判定部473により供給された有効画素のうち垂直方向に勾配がある画素の画素値の勾配(時間方向の画素差分Δt、水平方向の画素差分Δx、および、垂直方向の画素差分Δy)を積算し、式(14)の代わりに、後述する簡易的な数式である式(23)を用いて、動きベクトルvnの垂直方向成分を求め、求めた動きベクトルvnの垂直方向成分をベクトル算出部464に出力する。
ベクトル算出部464は、セレクタ401からのオフセットベクトルVn−1を、統合型勾配演算部463−1からの動きベクトルvn、または、独立型勾配演算部463−2からの動きベクトルvnに加算して、動きベクトルVnを算出し、算出した動きベクトルVnをベクトル評価部104に出力する。
図28は、動きベクトルの検出対象となる検出対象ブロックと、その検出対象ブロックに対応する、勾配法演算の対象となる演算ブロックの他の例を示している。なお、図28の例においては、フレームtが示されており、フレームt上の丸は、画素を表している。
図28の例の場合、フレームt上において、4画素×4画素からなる検出対象ブロックK1乃至K3と、検出対象ブロックK1乃至K3をそれぞれ中心とした8画素×8画素の各演算ブロックE1乃至E3が示されている。なお、各演算ブロックE1乃至E3は、それぞれ隣接する演算ブロックと、構成する画素半分がオーバーラップしている。
ベクトル検出部52においては、フレーム上の左上の検出対象ブロックからラスタスキャン順に、動きベクトルの検出が実行される。したがって、フレームt上において、検出対象ブロックK1、検出対象ブロックK2、および、検出対象ブロックK3が順々に、動きベクトルの検出対象ブロックとなる。そして、これに対応して、勾配法の演算ブロックは、演算ブロックE1、演算ブロックE2、および、演算ブロックE3となる。すなわち、図28の例の検出対象ブロックと演算ブロックの場合には、各演算ブロックE1乃至E3は、隣の演算ブロックと、構成される画素半分がオーバーラップすることになる。
なお、以降においては、上述したように構成される検出対象ブロックと演算ブロックを用いて、図25の反復勾配法演算部103およびベクトル評価部104の処理について説明するが、これらの構成の検出対象ブロックおよび演算ブロックには限定されず、検出対象ブロックは、4つの画素に限らず、例えば、1つの画素で構成されてもよいし、その他の複数の画素数であってもよい。また、図28の例においては、検出対象ブロックと演算ブロックの画素数が異なるが、同じ画素数で構成することもできる。すなわち、演算ブロックがそのまま検出対象ブロックとなるようにも構成できる。
次に、図29を参照して、有効画素判定部404の有効画素判定方法を説明する。図29の例においては、矢印Tは、図中、左手前の時刻tのフレームtから、右奥の時刻t+1のフレームt+1への時間の経過方向を示している。
フレームt上においては、動きベクトルの検出の対象となる4画素×4画素からなる検出対象ブロックKt(図中黒丸)と、検出対象ブロックKtを中心とした(検出対象ブロックの周囲の)8画素×8画素からなる演算ブロックEtが示されている。一方、フレームt+1上においては、検出対象ブロックKtに対応する4画素×4画素からなる検出対象ブロックKt+1(図中黒丸)と、演算ブロックEtに対応する8画素×8画素からなる演算ブロックEt+1が示されている。なお、フレームt+1上の点線のブロックは、検出対象ブロックKtと同位相のブロックを表しており、フレームt+1上において、動きベクトルV(Vx,Vy)が初期ベクトルとして与えられた分だけ、点線のブロックからシフト(移動)された位置の演算ブロックEt+1が勾配法の演算の対象として用いられる。
ここで、フレームt上の演算ブロックEtの画素p1とフレームt+1上の演算ブロックEt+1間の同位置の画素p2における時間方向の画素差分(フレーム差分)をΔtとし、このときの画枠をwとすると、演算ブロックEtの画素p1の水平方向の画素差分Δx1、垂直方向の画素差分Δy1、および時間方向の画素差分Δtは、式(16)乃至式(18)で求められる。
なお、Yt+1は、時刻t+1における画素値を表し、Ytは、時刻tにおける画素値を表し、k+1およびkは、アドレス(位置)を表す。また、画素p1に対応する演算ブロックEt+1の画素p2の水平方向の画素差分Δx2、および垂直方向の画素差分Δy2も同様に求められる。
有効画素判定部404は、これらの値を用いて、論理演算を行い、その結果に基づいて、有効画素判定を行う。すなわち、有効画素判定部404の有効画素判定部431は、演算ブロックEtの画素のうち、次の3つの条件式(19)乃至(21)のいずれかを満たす(すなわち、式(22)を満たす)か否かを求めることにより、その画素が動きベクトル検出に有効な画素であるか否かを判定する。
式(19)‖式(20)‖式(21) ・・・(22)
ここで、‖は、論理和、&&は、論理積、・は、乗算、th1およびth2は、それぞれ所定のしきい値を表している。なお、th1は、例えば、1,1.5,または2とされ、th2は、例えば、4とされる。
したがって、式(19)において、Δx1≠0 && Δx2≠0は、画素p1および画素p2の水平勾配が平坦ではない(水平方向に勾配を有する)ことを表す。|Δx1|>th1・|Δy1|は、水平勾配が垂直勾配よりもある程度大きく、より支配的であることを表す。|Δt/Δx1−Δt/Δx2|<th2は、勾配法による(正規化した場合の)水平方向の動きが、所定のしきい値th2より小さい、すなわち、水平方向の動きに、類似性があることを表す。以上により、式(19)は、水平方向に着目した条件を表しており、これら全てを満たした画素は、水平方向の動きに類似性があると判定され、後段の勾配法に用いて有効であると判定される。
また、式(20)において、Δy1≠0 && Δy2≠0は、垂直勾配が平坦ではない(垂直方向に勾配を有する)ことを表す。|Δy1|>th1・|Δx1|は、垂直勾配が水平勾配よりもある程度大きく、より支配的であることを表す。|Δt/Δy1−Δt/Δy2|<th2は、勾配法による(正規化した場合の)垂直方向の動きに類似性があることを表す。以上により、式(20)は、垂直方向に着目した条件を表しており、これら全てを満たした画素は、垂直方向の動きに類似性があると判定され、後段の勾配法に用いて有効であると判定される。
同様に、式(21)において、Δx1≠0 && Δx2≠0 && Δy1≠0 && Δy2≠0は、垂直および水平勾配が平坦ではない(垂直および水平方向に勾配を有する)ことを表す。|Δt/Δx1−Δt/Δx2|<th2 && |Δt/Δy1−Δt/Δy2|<th2は、勾配法による(正規化した場合の)垂直方向および水平方向の動きに類似性があることを表す。以上により、式(21)は、式(19)および(20)を満たしていないものに対しての水平および垂直の両方向(以下、斜め方向、あるいは、垂直水平方向とも称する)に着目した条件(以下、水平垂直着目条件と称する)を表しており、これら全てを満たした画素は、水平および垂直方向の動きに類似性があると判定され、後段の勾配法に用いて有効であると判定される。
なお、有効画素判定の論理演算は、各画素差分が用いられるものであれば、図29の例に限らない。また、有効画素判定は、上述したすべての画素差分に基づいて判定されると限らず、例えば、フレームt上の演算ブロックEtの画素p1とフレームt+1上の演算ブロックEt+1間の同位置の画素p2における時間方向の画素差分(フレーム差分)Δtが所定の値よりも小さいか否かを判定し、小さいと判定された場合に、有効画素であると判定することもできる。
図30は、演算ブロックにおける画素の構成例を示している。図30の例においては、4画素×4画素からなる検出対象ブロックKを中心とする8画素×8画素(64画素)からなる演算ブロックE内において、上述した式(22)を満たし、有効画素として判定された画素(図中白丸)と、式(22)を満たさず、勾配法の演算対象とされない画素(図中黒丸)が示されている。
したがって、有効画素判定部404は、式(22)を用いて、演算ブロックEt内の各画素について、水平方向、垂直方向、または斜め方向のいずれかの動きに対して類似性があるか否かを判定する。そして、有効画素判定部404は、水平方向、垂直方向、または斜め方向のどの動きに対しても類似性があると判定した画素、すなわち、有効画素として判定された画素の数が、50%であるか(全64画素中32画素より多いか)否かを判定し、有効画素として判定された画素が50%以下の場合は、演算ブロックでの演算は不安定であるとし、例えば、演算を打ち切るための処理を行う。なお、有効画素数カウンタのしきい値を50%としたが、この値は、もちろん他の値であってもよい。
これにより、類似性があまりなく、異なる動きの画素の混在を少しでも防ぐことができるので、安定した勾配法演算を行うことができる。この結果、勾配法演算により求められる動きベクトルの確からしさが向上し、動きベクトル検出の精度が向上する。
一方、有効画素として判定された画素が50%より多い場合、勾配法演算部405は、さらに、式(22)を用いて、演算ブロックEt内の各画素について、水平方向、垂直方向、または斜め方向のいずれかの動きに対して類似性があるか否かを判定し、水平方向、垂直方向、または斜め方向のどの動きに対しても類似性がないと判定した画素を、勾配法演算の対象から外し、演算ブロックE内において、有効画素として判定された画素のみ(34画素)を用いて、勾配法演算を行う。
これにより、水平方向、垂直方向、または斜め方向のいずれかの動きに対して類似性がある画素のみで、勾配法演算が実行されるため、異なる動きが混入することが抑制され、より安定した勾配法演算が実行され、その結果、確からしい動きベクトルが検出される。
なお、上述した有効画素判定方法においては、水平方向および垂直方向に勾配が存在する通常の領域(以下、通常勾配領域と称する)と、水平方向および垂直方向のどちらか片側にのみ勾配が存在する領域(以下、片側勾配領域)が区別されることなく、勾配法演算が行われている。したがって、実用上においては、特に、片側勾配領域における動きベクトルの検出精度が著しく低下してしまうことがある。
次に、図31を参照して、片側勾配領域について説明する。図31の例においては、矢印Tは、図中、左手前の時刻tのフレームtから、右奥の時刻t+1のフレームt+1への時間の経過方向を示している。
フレームtおよびフレームt+1上のラインLは、輝度値eの画素からなる領域(白の領域)と、輝度値eとは異なる値の輝度値fの画素からなる領域(ハッチング領域)の境界を示している。
フレームtのラインL上には、動きベクトルの検出の対象となる4画素×4画素からなる演算ブロックEtが示されている。なお、図31の例において、検出対象ブロックは省略する。一方、フレームt+1上においては、演算ブロックEtに対応する4画素×4画素からなる演算ブロックEt+1が示されている。また、フレームt+1上の点線のブロックは、演算ブロックEtと同位相のブロックを表しており、フレームt+1上には、点線のブロックから、勾配法演算が繰り返され、最終的に、演算ブロックEt+1が勾配法の演算の対象として用いられて検出された動きベクトルV(Vx,Vy)が示されている。
このフレームtにおいては、右側に拡大されるように、演算ブロックEtの左2列の画素(画素p00,画素p10,画素p20,および画素p30と、画素p01,画素p11,画素p21,および画素p31)は、すべて同じ輝度値eであり、演算ブロックEtの右2列の画素(画素p02,画素p12,画素p22,および画素p32と、画素p03,画素p13,画素p23,および画素p33)は、すべて同じ輝度値fである。
すなわち、演算ブロックEtにおいては、例えば、画素p01と画素p00との間、および画素p01と画素p11との間や、画素p02と画素p03との間、および画素p02と画素p12との間など、同じ領域内の画素同士の間には勾配がないが、画素p01と画素p02の間、画素p11と画素p12の間、画素p21と画素p22の間、および画素p31と画素p32の間に勾配がある。
したがって、フレームt上の演算ブロックEt内には、水平方向の勾配のみがあり、垂直方向の勾配はないので、勾配法の原理から、フレームt+1上において、動きベクトルVのうち、水平方向の動きは、検出することができるが、垂直方向の動きを検出することはできない。
ここで、このように構成される片側勾配領域の演算ブロックEtにおいて、上述した有効画素判定方法のみを用いた場合、境界部分にある画素(画素p01,画素p11,画素p21,および画素p31、並びに画素p02,画素p12,画素p22,および画素p32)については、上述した水平方向に着目した条件である式(19)を満たすことで、有効画素であると判定される。
しかしながら、実際に、このような水平方向のみに勾配を有する画素を多く含む演算ブロックにおいて、式(14)を用いた勾配法演算が行われてしまうと、その結果、本来検出されないはずの垂直方向の動きベクトル(すなわち、誤った動きベクトル)が検出されてしまう恐れがある。
すなわち、実際には、フレームt+1のラインL上において、演算ブロックEt+1よりも上または下の位置のブロックが演算対象として用いられて検出される動きベクトルが最適な動きベクトルである可能性もあるにも拘わらず、フレームt+1上において、点線のブロックから、勾配法演算が繰り返され、最終的に、演算ブロックEt+1が勾配法の演算の対象として用いられて算出された動きベクトルV(Vx,Vy)が、最適な動きベクトルとして評価されて、検出されてしまう恐れがある。
そこで、有効画素判定部404は、有効画素判定後に、さらに、各画素の水平および垂直方向毎の勾配状態に基づく、勾配法実行判定を行い、その判定結果に応じて、勾配法演算部405に、式(14)を用いての統合型勾配法演算、および式(14)を簡易的にした次の式(23)を用いての独立型勾配法演算のどちらかに切り替えさせ、動きベクトルを算出させる。
この式(23)を用いての独立型勾配法演算は、動きベクトルの水平方向成分を求める場合には、演算対象の画素の垂直勾配を用いず、動きベクトルの垂直方向成分を求める場合には、演算対象の画素の水平勾配を用いていない。すなわち、各方向成分毎にそれぞれの勾配を使用して動きを検出することができるので、水平勾配または垂直勾配しかない片側勾配領域においても、確からしい動きベクトルをすることが可能になり、動きベクトルの検出精度の向上が可能になる。
また、この独立型勾配法演算は、式(14)の統合型勾配法演算に較べて演算負荷が小さく、ハードウェアへの実装が容易である。
次に、有効画素判定後に実行される勾配法実行判定について説明する。
有効画素判定部404は、演算ブロックのうち、上述した有効画素判定処理により有効画素であると判定された画素に対して、さらに、水平方向の勾配の有無と、垂直方向の勾配の有無をそれぞれ判定し、有効画素判定処理により得られる有効画素の数(cnt_t)、水平方向に勾配のない画素の数(ngcnt_x)、および垂直方向に勾配のない画素の数(ngcnt_y)を取得し、これらの値を用いた次の式(24)乃至式(26)を用いて、勾配法実行判定処理を行う。
ここで、pxl_aは、演算ブロック内の全画素数を表しており、・は、乗算、th3は、1未満の所定のしきい値を表している。
まず、式(24)を満たすと判定された場合、有効画素の中に、水平方向および垂直方向の勾配を持つ(通常の勾配がある)ものが適切に存在する状態だと考えられる。そこで、有効画素判定部404は、勾配フラグ(gladflg=4)を設定し、勾配法演算部405に、式(14)を用いての統合型勾配法演算を実行させる。
これに対応して、勾配法演算部405は、勾配フラグ(gladflg=4)の場合、有効画素を勾配法演算の対象として、式(14)を用いての統合型勾配法演算を実行する。
なお、勾配フラグ(gladflg=4)の場合、ベクトル評価部104は、統合型勾配法演算の結果の動きベクトルとオフセットベクトルの評価値dfvを比較し、評価値dfvが小さいと判定された方を、信頼度が高いと評価し、評価結果に応じて、動きベクトルを修正(変更)する。また、ベクトル評価部104は、統合型勾配法演算の結果の動きベクトルの信頼度が高い場合、かつ、反復回数が最大回数を満たしていない場合のみ、反復勾配演算処理を繰り返すと判定する。
式(24)を満たさず、式(25)および式(26)を満たすと判定された場合、有効画素の中に、水平方向および垂直方向のどちらかに勾配がない画素が相当数含まれていることが考えられる。そこで、有効画素判定部404は、勾配フラグ(gladflg=0)を設定し、勾配法演算部405に、水平および垂直方向毎に、式(23)を用いての独立型勾配法演算を実行させ、水平および垂直方向毎の演算結果を合わせて、その演算結果とさせる。このときの方向成分毎の勾配法演算には、対応する方向に勾配が存在する有効画素のみが使用される。
これに対応して、勾配法演算部405は、勾配フラグ(gladflg=0)の場合、有効画素のうち水平勾配を有する画素を勾配法演算の対象として、式(23)を用いての水平方向の独立型勾配法演算を実行するとともに、有効画素のうち垂直勾配を有する画素を勾配法演算の対象として、式(23)を用いての垂直方向の独立型勾配法演算を実行する。
式(24)を満たさず、式(25)のみを満たすと判定された場合、有効画素の中に、垂直方向に勾配がない画素が相当数含まれていることが考えられる。そこで、有効画素判定部404は、勾配フラグ(gladflg=1)を設定し、勾配法演算部405に、垂直方向の動きに関しては演算を行わせず、動き無し(0ベクトル)とさせ、水平方向の動きのみに対して、式(23)を用いての勾配法演算を実行させる。このときの勾配法演算には、水平方向に勾配が存在する有効画素のみが使用される。
これに対応して、勾配法演算部405は、勾配フラグ(gladflg=1)の場合、有効画素のうち水平勾配を有する画素を勾配法演算の対象として、式(23)を用いての水平方向の独立型勾配法演算を実行する。
式(24)を満たさず、式(26)のみを満たすと判定された場合、有効画素の中に、水平方向に勾配がない画素が多く含まれていることが考えられる。そこで、有効画素判定部404は、勾配フラグ(gladflg=2)を設定し、勾配法演算部405に、水平方向の動きに関しては演算を行わせず、動き無し(0ベクトル)とさせ、垂直方向の動きのみに対して、式(23)を用いての勾配法演算を実行させる。このときの勾配法演算には、垂直方向に勾配が存在する有効画素のみが使用される。
これに対応して、勾配法演算部405は、勾配フラグ(gladflg=2)の場合、有効画素のうち垂直勾配を有する画素を勾配法演算の対象として、式(23)を用いての垂直方向の独立型勾配法演算を実行する。
なお、勾配フラグ(gladflg=0,1,2)の場合、ベクトル評価部104においては、独立型勾配法演算の結果の動きベクトルと0ベクトルの評価値dfvが比較され、評価値dfvが小さいと判定された方が、信頼度が高いと評価され、評価結果に応じて、動きベクトルが修正(変更)される。さらに、この場合、ベクトル評価部104においては、反復勾配演算処理は繰り返されない。
式(24)乃至式(26)を満たさないと判定された場合、演算ブロック内に、有効と判定された画素が少なく、勾配法演算を行うことが困難な状態であると考えられる。そこで、有効画素判定部404は、勾配フラグ(gladflg=3)を設定し、勾配法演算部405に、演算を行わせず、動き無し(0ベクトル)とさせる。
これに対応して、勾配法演算部405は、勾配フラグ(gladflg=0)の場合、勾配法演算処理を実行せず、ベクトル評価部104においては、評価値dfvの比較はなされず、反復勾配演算処理は繰り返されない。
以上のように、式(24)乃至式(26)を用いて、勾配法実行判定処理を行い、判定結果に応じて、勾配法演算を切り替えるようにしたので、片側勾配領域においても、確からしい動きベクトルを検出することが可能になり、動きベクトルの検出精度の向上が可能になる。また、独立型勾配法演算において、対象方向に勾配がある有効画素のみを用いて、その方向成分の動きベクトルを求めたり、勾配がない画素が多い方向成分の動きベクトルを0ベクトルにするようにしたので、さらに、確からしい動きベクトルをすることが可能になる。
さらに、勾配法実行判定処理の結果に応じて、勾配法演算の制御だけでなく、ベクトル評価と評価結果に応じた動きベクトルの変更、および、勾配法演算の反復判定も行うようにしたので、演算負荷の低減や、動きベクトルの検出精度のさらなる向上が可能になる。
次に、図32のフローチャートを参照して、反復勾配法演算処理の例を説明する。前段よりセレクタ401に初期ベクトルV0が入力される。
セレクタ401は、ステップS301において、オフセットベクトルVn−1を選択し、選択したオフセットベクトルVn−1を、メモリ制御信号生成部402、勾配法演算部405、および評価値演算部61Bに出力する。
なお、セレクタ401は、初期ベクトル選択部101からの初期ベクトルV0が入力された場合、入力された初期ベクトルV0を、オフセットベクトルVn−1として選択し、遅延部406から、勾配法演算部405により演算され、評価判定部412により評価された結果の動きベクトルVが入力された場合、動きベクトルVを、オフセットベクトルVn−1として選択する。
メモリ制御信号生成部402には、信号処理装置1の図示せぬ制御部から、処理の開始タイミングと位置情報を制御する制御信号と、セレクタ401からのオフセットベクトルを入力される。メモリ制御信号生成部402は、ステップS302において、制御信号およびセレクタ401からのオフセットベクトルVn−1に応じて、メモリ403に記憶されている時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1から、処理の対象となる演算ブロックの対象画素値を読み出させ、読み出した対象画素値を、有効画素判定部404および勾配法演算部405に供給させる。
有効画素判定部404は、メモリ403から供給される対象画素値を入力すると、ステップS303において、有効画素判定処理を実行する。この有効画素判定処理は、図33を参照して詳しく後述する。
ステップS303の有効画素判定処理により、メモリ403から供給される対象画素値を用いて、フレームtとフレームt+1の演算ブロックの画素差分が演算されることで、演算ブロックに、勾配法の演算に有効な有効画素の数が、有効画素数カウンタ441にカウントされる。また、演算ブロックにおいて有効な画素と判定された有効画素について、水平方向および垂直方向それぞれの勾配状態が求められ、水平勾配が無い画素の数と垂直勾配が無い画素の数が、それぞれ、水平勾配無カウンタ442および垂直勾配無カウンタ443にカウントされる。
勾配法継続判定部424は、ステップS304において、有効画素数カウンタ441に記憶されている値(有効画素の数)が所定のしきい値αより多いか否かを判定する。ステップS304において、有効画素の数が所定のしきい値αより多いと判定された場合、勾配法継続判定部424により、演算実行判定部425、勾配法演算部405およびベクトル評価部104に、勾配法演算を実行させるカウンタフラグ(countflg=1)が出力され、処理は、ステップS305に進む。
勾配法継続判定部424からカウンタフラグ(countflg=1)が入力されると、演算実行判定部425は、ステップS305において、勾配法実行判定処理を実行する。この勾配法実行判定処理は、図35を参照して詳しく後述する。
ステップS305の勾配法実行判定処理により、有効画素数カウンタ441の有効画素の数、水平勾配無カウンタ442の水平勾配が無い画素の数、および垂直勾配無カウンタ443の垂直勾配が無い画素の数が参照されて、有効画素における片側勾配の画素の数が多いか否かが判定され、その判定結果に応じて、勾配法演算部405が行う勾配法演算処理を、統合型勾配法演算処理および独立型勾配法演算処理のどちらかに切り替えるための勾配フラグ(gladflg)が設定され、設定された勾配フラグが、勾配法演算部405および評価判定部412に出力され、処理は、ステップS306に進む。
一方、勾配法継続判定部424からカウンタフラグ(countflg=1)が入力され、演算実行判定部425から勾配フラグが入力されると、勾配法演算部405は、ステップS306において、勾配法演算処理を実行する。この勾配法演算処理は、図36を参照して詳しく後述する。
ステップS306の勾配法演算処理により、演算実行判定部425からの勾配フラグに応じて、有効画素を用いての統合型勾配法演算処理、または、有効画素のうち、水平方向に勾配がある画素を用いての水平方向の独立型勾配法演算処理および垂直方向に勾配がある画素を用いての垂直方向の独立型勾配法演算処理のうちの少なくともどちらか一方が実行され、動きベクトルVnが求められ、求められた動きベクトルVnがベクトル評価部104に出力され、処理は、ステップS307に進む。
ベクトル評価部104は、ステップS307において、ベクトル評価処理を実行する。このベクトル評価処理は、図39を参照して詳しく後述する。
ステップS307のベクトル評価処理により、勾配フラグに応じて、勾配法演算部405から動きベクトルVn、オフセットベクトルVn−1、および0ベクトルの評価値dfvが求められ、演算実行判定部425から勾配フラグに基づいて、動きベクトルVnと、オフセットベクトルVn−1または0ベクトルの評価値dfvが比較され、比較結果に応じて動きベクトルVが求められる。例えば、動きベクトルVnとオフセットベクトルVn−1の評価値dfvが比較され、動きベクトルVnの評価値の信頼度が高いとされた場合、動きベクトルVnは、動きベクトルVとされて、勾配法演算の反復回数は1カウントされる。
ベクトル評価部104は、また、ステップS308において、演算実行判定部425から勾配フラグおよび勾配法演算の反復回数に基づいて、勾配法演算を反復するか否かを判定する。
すなわち、ベクトル評価部104は、勾配フラグが、統合型勾配法演算処理を実行させるフラグ(すなわち、勾配フラグ(gladflg=4)であり、かつ、勾配法演算の反復回数が設定された最大反復回数(例えば、2回)になっていない場合、ステップS308において、勾配法演算を反復すると判定し、求められた動きベクトルVを、遅延部406に出力する。
遅延部406は、ベクトル評価部104から入力される動きベクトルVを、有効画素判定部404および勾配法演算部405の次の処理のサイクルまで保持し、次の処理のサイクルで、動きベクトルVをセレクタ401に出力する。これにより、処理は、ステップS301に戻り、それ以降の処理が繰り返される。
また、ベクトル評価部104は、勾配フラグが、統合型勾配法演算処理を実行させるフラグ以外であった場合、または、勾配法演算の反復回数が設定された最大反復回数(例えば、2回)になった場合、ステップS308において、勾配法演算を反復しない、すなわち、勾配法演算を終了すると判定する。ベクトル評価部104は、ステップS310において、求められた動きベクトルVを、検出対象ブロックに対応させて、検出ベクトルメモリ53に記憶させ、反復勾配法処理を終了する。なお、このとき、動きベクトルVおよびその評価値dfvは、シフト初期ベクトル割付部105にも出力される。
一方、ステップS304において、有効画素数が所定のしきい値αより少ないと判定された場合、勾配法継続判定部424により、演算実行判定部425、勾配法演算部405および評価値判定部412に、勾配法演算を打ち切らせるカウンタフラグ(countflg=0)が出力され、処理は、ステップS309に進む。
演算実行判定部425および勾配法演算部405は、勾配法継続判定部424からのカウンタフラグの値が0の場合、勾配法演算を実行せず、評価値判定部412は、ステップS309において、0ベクトルを、動きベクトルVとして、ステップS310において、動きベクトルVを、検出対象ブロックに対応させて、検出ベクトルメモリ53に記憶させる。なお、このときも、0ベクトルである動きベクトルVおよびその評価値dfvは、シフト初期ベクトル割付部105にも出力される。
以上により、反復勾配法演算処理が終了され、シフト初期ベクトル割付部105により、動きベクトルVおよびその評価値dfvが用いられて、シフト初期ベクトル割付処理が実行され、検出ベクトルメモリ53に記憶された動きベクトルVは、後段のベクトル割付部54により用いられる。
以上のように、有効画素判定だけでなく、有効画素内の各方向の勾配の有無も判定し、有効画素内の片側勾配の画素の割合に応じて、勾配法演算方法の切り替え、ベクトル評価の評価(比較)対象、および、勾配法の反復判定などを行うようにしたので、通常勾配領域だけでなく、片側勾配領域であっても、確からしい動きベクトルが検出されるとともに、必要以上の演算負荷が軽減される。
また、ベクトル評価部104において、有効画素内の片側勾配の画素の割合に応じて、動きベクトルVn、オフセットベクトルVn−1、および0ベクトルなどの評価値dfvを求め、評価値dfvが小さい、すなわち、信頼度が高いとされる動きベクトルを選択するようにしたので、光源の移動や影の通過などにより、動きを持つ物体の平均輝度レベルが大きく変化する場合であっても、後段のベクトル割付に最適な動きベクトルを与えることができ、その結果、後段のベクトル割付の精度も向上させることができる。
次に、図33のフローチャートを参照して、図32のステップS303の有効画素判定処理の詳細を説明する。
有効画素判定部404の画素差分算出部421は、メモリ403から供給される演算ブロックの対象画素値を入力すると、ステップS321において、画素判定部422の各部(有効画素判定部431、水平勾配判定部432、および垂直勾配判定部433)を制御し、各カウンタ(有効画素数カウンタ441、水平勾配無カウンタ442、および垂直勾配無カウンタ443)の値をリセットさせる。
画素差分算出部421の各部(第1空間勾配画素差分算出部421−1、第2空間勾配画素差分算出部421−2、および時間方向画素差分算出部421−3)は、ステップS322において、演算ブロック内の画素を1つ選択し、ステップS323において、有効画素演算処理を実行する。この有効画素演算処理は、図34のフローチャートを参照して説明する。
時間方向画素差分算出部421−3は、ステップS351において、演算ブロック内における、選択した画素のフレームt+1およびフレームt間の時間方向の画素差分Δtを算出し、算出された画素のフレームt+1およびフレームt間の時間方向の画素差分Δtを、画素判定部422に出力する。
第1空間勾配画素差分算出部421−1は、ステップS352において、演算ブロック内における、選択した画素のフレームt+1上の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを算出し、算出された画素のフレームt+1上の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを、画素判定部422に出力する。
第2空間勾配画素差分算出部421−2は、ステップS353において、演算ブロック内における、選択した画素のフレームt上の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを算出し、算出された画素のフレームt上の水平方向の画素差分Δxおよび垂直方向の画素差分Δyを、画素判定部422に出力する。
画素判定部422の有効画素判定部431は、ステップS354において、第1空間勾配画素差分算出部421−1からの選択した画素のフレームt+1上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、第2空間勾配画素差分算出部421−2からの選択した画素のフレームt上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、並びに、時間方向画素差分算出部421−3からの選択した画素のフレームt+1およびフレームt間の時間方向の画素差分Δtを用いて、水平方向の着目条件である式(19)、垂直方向の着目条件である式(20)、および、水平垂直方向の着目条件である式(21)の論理演算を行う。その後、処理は、図33のステップS323に戻り、ステップS324に進む。
ステップS324において、有効画素判定部431は、上述した3つの式の論理和(すなわち、式(22)を求め、式(22)が真であるか否か)に基づいて、選択された画素が有効画素であるか否かを判定する。したがって、上述した式(19)乃至式(21)のうち、いずれか1つの式を満たす場合、有効画素判定部431は、ステップS324において、その画素は有効画素であると判定し、ステップS325において、有効画素数カウンタ441の有効画素の数を1加算する。
水平勾配判定部432は、有効画素判定部431の制御のもと、ステップS326において、有効画素判定部431により有効画素であると判定された画素の水平方向の勾配の状態を求め、有効画素の水平方向の勾配があるか否かを判定し、有効画素の水平方向の勾配がないと判定した場合、ステップS327において、水平勾配無カウンタ442の水平勾配がない画素の数を1加算する。ステップS326において、有効画素の水平方向の勾配があると判定された場合、処理は、ステップS327をスキップし、ステップS328に進む。
垂直勾配判定部433は、有効画素判定部431の制御のもと、ステップS328において、有効画素判定部431により有効画素であると判定された画素の垂直方向の勾配の状態を求め、有効画素の垂直方向の勾配があるか否かを判定し、有効画素の垂直方向の勾配がないと判定した場合、ステップS329において、垂直勾配無カウンタ443の垂直勾配がない画素の数を1加算する。ステップS328において、有効画素の垂直方向の勾配があると判定された場合、処理は、ステップS329をスキップし、ステップS330に進む。
ステップS330において、画素差分算出部421は、演算ブロック内のすべての画素の処理が終了したか否かを判定する。ステップS330において、演算ブロック内のすべての画素の処理が終了したと判定された場合、有効画素数判定処理は終了され、処理は、図32のステップS303に戻り、ステップS304に進む。
ステップS324において、上述した式(19)乃至式(21)のいずれの式も満たさず、選択された画素は有効画素ではないと判定された場合、または、ステップS330において、演算ブロック内のすべての画素の処理がまだ終了していないと判定された場合、処理は、ステップS322に戻り、それ以降の処理が繰り返される。
以上のようにして、有効画素数カウンタ441には、演算ブロック内において有効であると判定された有効画素の数、水平勾配無カウンタ442には、有効画素のうち、水平勾配がないと判定された画素の数、および垂直勾配無カウンタ443には、有効画素のうち、垂直勾配がないと判定された画素の数が記憶される。
次に、図35のフローチャートを参照して、図32のステップS305の勾配法実行判定処理を詳しく説明する。図35の勾配法実行判定処理は、図34を参照して上述したように画素の数が記憶された各カウンタに基づいて、演算実行判定部425により実行される処理である。
演算実行判定部425のカウンタ値演算部451は、有効画素数カウンタ441から、有効画素の数(cnt_t)、水平勾配無カウンタ442から、水平方向に勾配のない画素の数(ngcnt_x)、および垂直勾配無カウンタ443から、垂直方向に勾配のない画素の数(ngcnt_y)を取得し、ステップS381において、式(24)を満たすか否かを判定する。
ステップS381において、式(24)を満たすと判定された場合、有効画素の中に、水平方向および垂直方向の勾配を持つ画素が適切に存在すると考えられる。したがって、フラグ設定部452は、ステップS382において、勾配フラグの値を、式(14)を用いての統合型勾配法演算処理を行わせる「4」に設定し、勾配フラグ(gladflg=4)を、勾配法演算部405および評価判定部412に出力し、勾配法実行判定処理を終了する。そして、処理は、図32のステップS305に戻り、ステップS306に進み、勾配フラグ(gladflg=4)に応じた勾配法演算処理が実行される。
ステップS381において、式(24)を満たさないと判定された場合、カウンタ値演算部451は、ステップS383において、式(25)かつ式(26)を満たすか否かを判定する。ステップS383において、式(25)かつ式(26)を満たすと判定された場合、有効画素の中に、水平方向および垂直方向のどちらかに勾配がない画素が相当数含まれていると考えられる。したがって、フラグ設定部452は、ステップS384において、勾配フラグの値を、水平および垂直方向毎に、式(23)を用いての独立型勾配法演算処理を行わせる「0」に設定し、勾配フラグ(gladflg=0)を、勾配法演算部405および評価判定部412に出力し、勾配法実行判定処理を終了する。そして、処理は、図32のステップS305に戻り、ステップS306に進み、勾配フラグ(gladflg=0)に応じた勾配法演算処理が実行される。
ステップS383において、式(25)かつ式(26)を満たさないと判定された場合、カウンタ値演算部451は、ステップS385において、式(25)を満たすか否かを判定する。ステップS385において、式(25)を満たすと判定された場合、有効画素の中に、垂直方向に勾配がない画素が多く含まれていると考えられる。したがって、フラグ設定部452は、ステップS386において、勾配フラグの値を、水平方向に対しての、式(23)を用いての独立型勾配法演算処理を行わせる「1」に設定し、勾配フラグ(gladflg=1)を、勾配法演算部405および評価判定部412に出力し、勾配法実行判定処理を終了する。そして、処理は、図32のステップS305に戻り、ステップS306に進み、勾配フラグ(gladflg=1)に応じた勾配法演算処理が実行される。
ステップS385において、式(25)を満たさないと判定された場合、カウンタ値演算部451は、ステップS387において、式(26)を満たすか否かを判定する。ステップS387において、式(26)を満たすと判定された場合、有効画素の中に、水平方向に勾配がない画素が多く含まれていると考えられる。したがって、フラグ設定部452は、ステップS388において、勾配フラグの値を、垂直方向に対しての、式(23)を用いての独立型勾配法演算処理を行わせる「2」に設定し、勾配フラグ(gladflg=2)を、勾配法演算部405および評価判定部412に出力し、勾配法実行判定処理を終了する。そして、処理は、図32のステップS305に戻り、ステップS306に進み、勾配フラグ(gladflg=2)に応じた勾配法演算処理が実行される。
ステップS387において、式(26)を満たさないと判定された場合、有効と判定された画素が少ないと考えられる。したがって、フラグ設定部452は、ステップS389において、勾配フラグの値を、勾配法演算処理を禁止させる「3」に設定し、勾配フラグ(gladflg=3)を、勾配法演算部405および評価判定部412に出力し、勾配法実行判定処理を終了する。そして、処理は、図32のステップS305に戻り、ステップS306に進み、勾配フラグ(gladflg=3)に応じた勾配法演算処理が実行される。
以上のようにして、演算ブロックの勾配状態(すなわち、有効画素の数、有効画素のうち、水平勾配がない画素の数、および有効画素のうち、垂直勾配がない画素の数)に応じた勾配フラグが、勾配法演算部405および評価判定部412に出力される。
次に、図36のフローチャートを参照して、勾配法演算部405により実行される、図32のステップS306の勾配法演算処理を詳しく説明する。
演算判定部462の有効画素判定部471には、勾配法継続判定部424からのカウンタフラグ(countflg=1)と、フラグ設定部452からの勾配フラグが入力されている。有効画素判定部471は、カウンタフラグが1である場合、図36の勾配法演算処理を開始する。
有効画素判定部471は、ステップS401において、勾配フラグの値が3であるか否かを判定し、勾配フラグの値が3ではないと判定した場合、ステップS402において、勾配フラグの値が4であるか否かを判定する。
有効画素判定部471は、ステップS402において、勾配フラグの値が4であると判定した場合、ステップS403において、勾配法演算部405の各部を制御し、統合型勾配法演算処理を実行させる。この統合型勾配法演算処理は、図37のフローチャートを参照して後述する。
ステップS403の統合型勾配法演算処理により、有効画素が勾配法演算の対象とされ、有効画素の水平方向の画素差分Δx、垂直方向の画素差分Δy、および時間方向の画素差分Δtが積算されて、積算された勾配と式(14)の最小自乗和を用いて、動きベクトルvnが求められて、ベクトル算出部464に出力される。
ベクトル算出部464は、ステップS404において、セレクタ401からのオフセットベクトルVn−1に、統合型勾配演算部463−1により求められた動きベクトルvnを加算し、オフセットベクトルVn−1に動きベクトルvnが加算された動きベクトルVnをベクトル評価部104に出力する。
ステップS404において、ベクトル算出部464により算出された動きベクトルVnは、ベクトル評価部104に出力され、勾配法演算処理は終了され、処理は、図32のステップS306に戻り、ステップS307に進む。
また、ステップS402において、勾配フラグの値が4ではないと判定された場合、有効画素判定部471は、ステップS405において、勾配フラグの値が2であるか否かを判定する。ステップS405において、勾配フラグの値が2であると判定された場合、有効画素の中に、水平方向に勾配がない画素が多く含まれていると考えられるので、処理は、ステップS406をスキップし、ステップS407に進む。
すなわち、この場合、水平方向に勾配がない画素以外の有効画素を用いて、動きベクトルの水平方向成分を求めても確からしくないので、水平方向の独立型勾配法演算処理は実行されない。
有効画素判定部471は、ステップS405において、勾配フラグの値が2ではない(すなわち、勾配フラグの値は、0か1である)と判定した場合、ステップS406において、水平勾配判定部472を制御し、水平方向の独立型勾配法演算処理を実行させる。この水平方向の独立型勾配法演算処理は、図38を参照して後述する。
ステップS406の水平方向の独立型勾配法演算処理により、有効画素のうち、水平方向に勾配がある画素が勾配法演算の対象とされ、有効画素のうち、水平方向に勾配がある画素の水平方向の画素差分Δx、および時間方向の画素差分Δtが積算されて、積算された勾配と式(23)を用いて、動きベクトルvnの水平方向成分が求められて、ベクトル算出部464に出力され、処理は、ステップS407に進む。
ステップS407において、有効画素判定部471は、勾配フラグの値が1であるか否かを判定する。ステップS407において、勾配フラグの値が1であると判定された場合、有効画素の中に、垂直方向に勾配がない画素が多く含まれていると考えられるので、処理は、ステップS408をスキップし、ステップS409に進む。
すなわち、この場合、垂直方向に勾配がない画素以外の有効画素を用いて、動きベクトルの垂直方向成分を求めても確からしくないので、垂直方向の独立型勾配法演算処理は実行されない。
有効画素判定部471は、ステップS407において、勾配フラグの値が1ではない(すなわち、勾配フラグの値は、0か2である)と判定した場合、ステップS408において、垂直勾配判定部473を制御し、垂直方向の独立型勾配法演算処理を実行させる。なお、この垂直方向の独立型勾配法演算処理は、ステップS406の水平方向の独立型勾配法演算処理と、対象とする方向が異なるだけであり、基本的な処理は同じであるので、図38を参照して、独立型勾配法演算処理としてまとめて後述する。
ステップS408の垂直方向の独立型勾配法演算処理により、有効画素のうち、垂直方向に勾配がある画素が勾配法演算の対象とされ、有効画素のうち、垂直方向に勾配がある画素の垂直方向の画素差分Δy、および時間方向の画素差分Δtが積算されて、積算された勾配と式(23)を用いて、動きベクトルvnの垂直方向成分が求められて、ベクトル算出部464に出力され、処理は、ステップS409に進む。
ベクトル算出部464には、独立型勾配演算部463−2より動きベクトルvnの水平方向成分および垂直方向成分の少なくとも一方が入力される。ベクトル算出部464は、ステップS409において、セレクタ401からのオフセットベクトルVn−1の対象方向成分(水平方向成分および垂直方向成分の少なくとも一方)と、独立型勾配演算部463−2により求められた動きベクトルvnの対象方向成分を加算し、その結果である動きベクトルVnをベクトル評価部104に出力する。
なお、このとき、動きベクトルvnの方向成分のうち、独立型勾配演算部463−2より入力されない方向成分は、0ベクトルとして算出される。すなわち、勾配フラグの値が2である場合には、独立型勾配演算部463−2より動きベクトルvnの垂直方向成分が求められないので、ベクトル算出部464は、動きベクトルvnの垂直方向成分を0ベクトルとし、勾配フラグの値が1である場合には、独立型勾配演算部463−2より動きベクトルvnの水平方向成分が求められないので、ベクトル算出部464は、動きベクトルvnの水平方向成分を0ベクトルとする。
ステップS409において、ベクトル算出部464により算出された動きベクトルVnは、ベクトル評価部104に出力され、勾配法演算処理は終了され、処理は、図32のステップS306に戻り、ステップS307に進む。
一方、ステップS401において、勾配フラグの値が3であると判定された場合、ステップS410において、有効画素判定部471は、勾配法演算部405の演算を禁止させ、勾配法演算処理を終了する。
以上のように、有効画素に片側勾配の画素が少ない場合には、有効画素が用いられての統合型勾配法演算により動きベクトルが求められ、有効画素に片側勾配の画素が多い場合には、有効画素のうち、勾配がある方向の画素のみが用いられての独立型勾配法演算により動きベクトルが求められる。
これにより、演算ブロックに片側勾配の画素が多い場合であっても、少なくとも勾配がある方向成分の確からしい動きベクトルを得ることができる。したがって、片側勾配領域であっても、動きベクトルの検出精度が向上される。
また、片側勾配の領域に対しては、簡易的な独立型勾配法演算が行われるので、演算の負荷を抑制することができる。
次に、図37のフローチャートを参照して、図36のステップS403の統合型勾配法演算処理を詳しく説明する。
勾配法演算部405の画素差分算出部461には、メモリ403から供給される演算ブロックの対象画素値を入力されている。画素差分算出部461の各部(第1空間勾配画素差分算出部461−1、第2空間勾配画素差分算出部461−2、および時間方向画素差分算出部461−3)は、有効画素判定部471の制御のもと、ステップS421において、演算ブロック内の画素を1つ選択し、ステップS422に進み、有効画素演算処理を実行する。この有効画素演算処理は、図34を参照して上述した有効画素演算処理と基本的に同様な処理であるので、その説明を省略する。
ステップS422の有効画素演算処理により、選択した画素のフレームt+1上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、フレームt上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、並びに、フレームt+1およびフレームt間の時間方向の画素差分Δtが求められ、それらを用いて、式(19)乃至式(21)の論理演算が行われる。
有効画素判定部471は、ステップS423において、上述した3つの式の論理和(すなわち、式(22)を求め、式(22)が真であるか否か)に基づいて、選択された画素が有効画素であるか否かを判定する。ステップS423において、選択された画素が有効画素ではないと判定された場合、処理は、ステップS421に戻り、それ以降の処理が繰り返される。
有効画素判定部471は、ステップS423において、有効画素であると判定した場合、その画素を勾配法の演算対象とし、その画素の水平方向の画素差分Δx、垂直方向の画素差分Δy、および時間方向の画素差分Δtを、統合型勾配演算部463−1に供給し、ステップS424において、統合型勾配演算部463−1を制御し、供給した勾配(画素差分)を積算させる。
有効画素判定部471は、ステップS425において、演算ブロック内のすべての画素の処理が終了したか否かを判定する。ステップS425において、演算ブロック内のすべての画素の処理がまだ終了していないと判定された場合、処理は、ステップS421に戻り、それ以降の処理が繰り返される。
有効画素判定部471は、ステップS425において、演算ブロック内のすべての画素の処理が終了したと判定した場合、ステップS426において、統合型勾配演算部463−1を制御し、積算された勾配を用いて、動きベクトルvnを算出させる。
すなわち、統合型勾配演算部463−1は、ステップS424において、演算判定部524より供給された有効画素の時間方向の画素差分Δt、水平方向の画素差分Δx、および、垂直方向の画素差分Δyを積算し、ステップS425において演算ブロック内のすべての画素の処理が終了したと判定された場合、ステップS426において、積算された勾配と式(14)の最小自乗和を用いて、動きベクトルvnを求め、求めた動きベクトルvnを、ベクトル算出部464に出力する。この後、処理は、図36のステップS403に戻り、ステップS404に進む。
以上のように、演算ブロックのうち、有効画素の勾配のみが積算されて、統合型勾配法演算処理が実行される。これにより、演算ブロックに対して、誤った動きベクトルが検出されることが抑制される。
次に、図38のフローチャートを参照して、ステップS406およびS408の独立型勾配法演算処理を詳しく説明する。なお、図38においては、水平方向の場合を説明するが、垂直方向の場合も、対象となる方向成分が異なるだけであり、水平方向の場合と基本的に同様の処理となる。
勾配法演算部405の画素差分算出部461には、メモリ403から供給される演算ブロックの対象画素値を入力されている。画素差分算出部461の各部は、有効画素判定部471の制御のもと、ステップS441において、演算ブロック内の画素を1つ選択し、ステップS442に進み、有効画素演算処理を実行する。この有効画素演算処理も、図34を参照して上述した有効画素演算処理と基本的に同様な処理であるので、その説明を省略する。
ステップS442の有効画素演算処理により、選択した画素のフレームt+1上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、フレームt上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、並びに、フレームt+1およびフレームt間の時間方向の画素差分Δtが求められ、それらを用いて、式(19)乃至式(21)の論理演算が行われる。
有効画素判定部471は、ステップS443において、上述した3つの式の論理和(すなわち、式(22)を求め、式(22)が真であるか否か)に基づいて、選択された画素が有効画素であるか否かを判定する。ステップS443において、選択された画素が有効画素ではないと判定された場合、処理は、ステップS441に戻り、それ以降の処理が繰り返される。
有効画素判定部471は、ステップS443において、有効画素であると判定した場合、ステップS444において、水平勾配判定部472を制御し、有効画素の対象方向(いまの場合、水平方向)に勾配があるか否かを判定させる。ステップS444において、有効画素の対象方向(いまの場合、水平方向)に勾配がないと判定された場合、処理は、ステップS441に戻り、それ以降の処理が繰り返される。
すなわち、演算ブロック内の次の画素に対しての有効画素判定および片側勾配判定が繰り返される。
水平勾配判定部472は、有効画素の水平方向に勾配があると判定した場合、その画素を、勾配法の演算対象とし、その画素の水平方向の画素差分Δx、および時間方向の画素差分Δtを、独立型勾配演算部463−2に供給し、ステップS445において、独立型勾配演算部463−2を制御し、供給した勾配(画素差分)を積算させる。
有効画素判定部471は、ステップS446において、演算ブロック内のすべての画素の処理が終了したか否かを判定する。ステップS446において、演算ブロック内のすべての画素の処理がまだ終了していないと判定された場合、処理は、ステップS441に戻り、それ以降の処理が繰り返される。
有効画素判定部471は、ステップS446において、演算ブロック内のすべての画素の処理が終了したと判定した場合、ステップS447において、独立型勾配演算部463−2を制御し、積算された勾配を用いて、対象方向の動きベクトルvnを算出させる。
すなわち、独立型勾配演算部463−2は、ステップS445において、水平勾配判定部472より供給された、水平方向に勾配がある有効画素の時間方向の画素差分Δt、および水平方向の画素差分Δxを積算し、ステップS446において演算ブロック内のすべての画素の処理が終了したと判定された場合、ステップS447において、積算された勾配と式(23)を用いて、動きベクトルvnの対象方向(水平方向)成分を求め、求めた動きベクトルvnの水平方向成分を、ベクトル算出部464に出力する。この後、処理は、図36のステップS406に戻り、ステップS407に進む。
以上のように、演算ブロックの有効画素のうち、対象方向に勾配がある画素の勾配のみが積算されて、対象方向の勾配法演算処理が実行される。これにより、演算ブロックが片側勾配領域に含まれていたとしても、演算ブロックに対して、誤った動きベクトルの対象方向成分が検出されることが抑制される。
次に、図39のフローチャートを参照して、図32のステップS307のベクトル評価処理を説明する。
評価値判定部412は、フラグ設定部452からの勾配フラグが入力されると、図39のベクトル評価処理を開始する。評価値判定部412は、ステップS461において、勾配フラグの値が3であるか否かを判定し、勾配フラグの値が3ではないと判定した場合(すなわち、勾配法演算が実行されていると判定した場合)、ステップS462において、評価値演算部61Bを制御し、オフセットベクトルVn−1、動きベクトルVn、および0ベクトルの評価値演算処理を実行させる。この評価値演算処理は、図15を参照して上述した評価値演算処理と基本的に同様の処理を行うので、その説明を省略する。
ステップS462の評価値演算処理により、セレクタ401からのオフセットベクトルVn−1、統合型勾配演算部463−1または独立型勾配演算部463−2により演算され、ベクトル算出部464により算出された動きベクトルVn、および0ベクトルの評価値dfvが演算される。
評価値判定部412は、ステップS463において、勾配フラグの値が4であるか否かを判定し、勾配フラグの値が4であると判定した場合(すなわち、統合型勾配演算部463−1により演算された動きベクトルVnの場合)、ステップS464において、ベクトル算出部464により算出された動きベクトルVnの評価値dfv(n)が、オフセットベクトルVn−1の評価値dfv(n−1)よりも小さいか否かを判定する。
ステップS464において、評価値dfv(n−1)の方が、評価値dfv(n)よりも小さい(オフセットベクトルVn−1の方が、信頼性が高い)と判定された場合、評価値判定部412は、ステップS465において、オフセットベクトルVn−1を動きベクトルVに決定する。すなわち、動きベクトルVは、ベクトル算出部464により算出された動きベクトルVnではなく、オフセットベクトルVn−1に変更(修正)される。そして、評価値判定部412は、ステップS466において、勾配法演算の反復回数を最大値にし、ベクトル評価処理を終了する。
すなわち、ステップS466においては、オフセットベクトルVn−1であった動きベクトルVが用いられて勾配法演算が繰り返されても、結果は同じであるので、勾配法演算が繰り返されることがないように反復回数が最大値にされる。
また、ステップS464において、評価値dfv(n)の方が、評価値dfv(n−1)よりも小さい(ベクトル算出部464により算出された動きベクトルVnの方が、信頼性が高い)と判定された場合、評価値判定部412は、ステップS467において、ベクトル算出部464により算出された動きベクトルVnを、そのまま、動きベクトルVに決定し、ステップS468において、勾配法演算の反復回数を1加算し、ベクトル評価処理を終了する。
一方、ステップS463において、勾配フラグの値が4ではないと判定された場合(すなわち、独立型勾配演算部463−2により演算された動きベクトルVnの場合)、ステップS469において、ベクトル算出部464により算出された動きベクトルVnの評価値dfv(n)が、0ベクトルの評価値dfv(0)よりも小さいか否かを判定する。
ステップS469において、評価値dfv(n)の方が、評価値dfv(0)よりも小さい(ベクトル算出部464により算出された動きベクトルVnの方が、信頼性が高い)と判定された場合、評価値判定部412は、ステップS470において、ベクトル算出部464により算出された動きベクトルVnを、そのまま、動きベクトルVに決定し、ベクトル評価処理を終了する。
また、ステップS469において、評価値dfv(0)の方が、評価値dfv(n)よりも小さい(0ベクトルの方が、信頼性が高い)と判定された場合、評価値判定部412は、ステップS471において、0ベクトルを、動きベクトルVに決定し、ベクトル評価処理を終了する。すなわち、ステップS471において、動きベクトルVは、ベクトル算出部464により算出された動きベクトルVnではなく、0ベクトルに変更(修正)される。
一方、ステップS461において、勾配フラグの値が3であると判定された場合、演算ブロックにおいて、有効画素が少ないと判定された場合であるので、ステップS472において、0ベクトルを、動きベクトルVに決定し、すなわち、動きベクトルVは、ベクトル算出部464により算出された動きベクトルVnではなく、0ベクトルに変更(修正)され、ベクトル評価処理を終了する。
以上のように、勾配フラグの値に基づいて、ベクトル評価における比較対象を切り替えて、動きベクトルを評価し、評価結果に応じて、動きベクトルを変更(修正)するようにしたので、演算ブロック内の勾配の状態に応じた精度のよい動きベクトルを検出することができる。
なお、上記説明においては、有効画素を判定した後に、水平勾配および垂直勾配を判定して、有効画素内の勾配状態(すなわち、水平勾配、または垂直勾配のみ有する画素の割合)を求め、それに基づいて、勾配法実行判定を行う場合を説明したが、以下に説明するように、有効画素を判定する条件式である式(19)乃至式(21)を用いて水平勾配、または垂直勾配のみ有する画素の割合を求め、それに基づいて、勾配法実行判定を行うこともできる。
図40は、図26の有効画素判定部の画素判定部、カウンタ、および演算実行判定部の他の構成例を示すブロック図である。
図40の例の画素判定部422は、有効画素判定部431を備える点が、図26の画素判定部422と共通するが、水平勾配判定部432と垂直勾配判定部433が除かれた点が、図26の画素判定部422と異なっている。なお、図40の例において、有効画素判定部431は、さらに、水平垂直勾配判定部431−1、水平勾配判定部431−2、および垂直勾配判定部431−3により構成されている。
水平垂直勾配判定部431−1は、式(21)を用いて、演算ブロック内の画素が水平垂直着目条件を満たすか否かどうかを判定し、演算ブロック内の画素が水平垂直着目条件を満たすと判定した場合、すなわち、垂直方向および水平方向に勾配を有し、水平および垂直方向の動きに類似性があることから、水平勾配および垂直勾配(以下、水平垂直勾配とも称する)があると判定し、水平垂直勾配カウンタ481の値(水平勾配および垂直勾配がある画素の数)を1加算するとともに、有効画素数カウンタ441の値を1加算する。
水平勾配判定部431−2は、式(19)を用いて、演算ブロック内の画素が水平着目条件を満たすか否かどうかを判定し、演算ブロック内の画素が水平着目条件を満たすと判定した場合、すなわち、水平勾配が垂直勾配よりもある程度大きく、より支配的であり、かつ、水平方向の動きに類似性があることから、水平勾配があると判定し、水平勾配カウンタ482の値(水平勾配がある画素の数)を1加算するとともに、有効画素数カウンタ441の値を1加算する。
垂直勾配判定部431−3は、式(20)を用いて、演算ブロック内の画素が垂直着目条件を満たすか否かどうかを判定し、演算ブロック内の画素が垂直着目条件を満たすと判定した場合、すなわち、垂直勾配が水平勾配よりもある程度大きく、より支配的であり、かつ、垂直方向の動きに類似性があるとされ、垂直勾配があると判定し、垂直勾配カウンタ483の値(垂直勾配がある画素の数)を1加算するとともに、有効画素数カウンタ441の値を1加算する。
図40の例のカウンタ423は、有効画素カウンタ441を有する点が、図26のカウンタ423と共通するが、水平勾配無カウンタ442および垂直勾配無カウンタ443が除かれた点、水平垂直勾配カウンタ481、水平勾配カウンタ482、および垂直勾配無カウンタ483が追加された点が、図26のカウンタ423と異なっている。
水平垂直勾配カウンタ481は、演算ブロック毎に、水平垂直勾配判定部431−1により、水平勾配および垂直勾配(以下、水平垂直勾配とも称する)があると判定された画素(有効画素)の数を記憶する。水平勾配カウンタ482は、演算ブロック毎に、水平勾配判定部431−2により、水平勾配があると判定された画素(有効画素)の数を記憶する。垂直勾配カウンタ483は、演算ブロック毎に、垂直勾配判定部431−3により、垂直勾配があると判定された画素(有効画素)の数を記憶する。
図40の例の演算実行判定部425は、フラグ設定部452を備える点が、図29の演算実行判定部425と共通するが、カウンタ値演算部451の代わりに、カウンタ値演算部491が追加された点が、図26の演算実行判定部425と異なっている。
カウンタ値演算部491は、勾配法継続判定部424からのカウンタフラグの値が1であるとき、カウンタ423(有効画素数カウンタ441、水平垂直勾配カウンタ481、水平勾配カウンタ482、および垂直勾配無カウンタ483)から、有効画素の数(cnt_t)、水平方向および垂直方向に勾配のある画素の数(cnt_xy)、水平方向に勾配のある画素の数(cnt_x)、および垂直方向に勾配のある画素の数(cnt_y)を取得して、演算ブロックにおける有効画素と、有効画素のうちの片側勾配の画素の割合を演算し、割合の演算結果に応じて、フラグ設定部452が設定する勾配フラグの値を制御する。
すなわち、カウンタ値演算部491は、有効画素の数(cnt_t)、水平垂直方向に勾配のある画素の数(cnt_xy)、水平方向に勾配のある画素の数(cnt_x)、および垂直方向に勾配のある画素の数(cnt_y)を用いた次の式(27)乃至式(30)を用いて、勾配法実行判定処理を行う。
・・・(27)
・・・(28)
・・・(29)
・・・(30)
ここで、pxl_aは、演算ブロック内の全画素数を表しており、・は、乗算、th4乃至th7は、それぞれ異なる1未満の所定のしきい値を表している。なお、th4>th5,th6,th7である。
まず、式(27)を満たさないと判定された場合、または、式(27)を満たすが、式(28)乃至式(30)を満たさないと判定された場合、演算ブロック内に、有効と判定された画素が少なく、勾配法演算を行うことが困難な状態であると考えられる。そこで、カウンタ値演算部491は、勾配フラグ(gladflg=3)を付加し、勾配法演算部405に、演算を行わせず、動き無し(0ベクトル)とさせる。
式(27)を満たし、さらに、式(28)を満たすと判定された場合、有効画素の中に、水平方向および垂直方向の勾配を持つ(通常の勾配がある)ものが適切に存在する状態だと考えられる。そこで、カウンタ値演算部491は、勾配フラグ(gladflg=4)を設定し、勾配法演算部405に、式(14)を用いての統合型勾配法演算を実行させる。
式(27)を満たし、式(28)を満たさないが、式(29)を満たすと判定された場合、有効画素の中に、垂直方向に勾配がない画素が多く含まれていることが考えられる。そこで、カウンタ値演算部491は、勾配フラグ(gladflg=1)を付加し、勾配法演算部405に、垂直方向の動きに関しては演算を行わせず、動き無し(0ベクトル)とさせ、水平方向の動きのみに対して、式(23)を用いての勾配法演算を実行させる。なお、このときの勾配法演算には、水平方向に勾配が存在する有効画素のみが使用される。
式(27)を満たし、式(28)および式(29)を満たさないが、式(30)を満たすと判定された場合、有効画素の中に、水平方向に勾配がない画素が多く含まれていることが考えられる。そこで、カウンタ値演算部491は、勾配フラグ(gladflg=2)を付加し、勾配法演算部405に、水平方向の動きに関しては演算を行わせず、動き無し(0ベクトル)とさせ、垂直方向の動きのみに対して、式(23)を用いての勾配法演算を実行させる。なお、このときの勾配法演算には、垂直方向に勾配が存在する有効画素のみが使用される。
図41は、図40の有効画素判定部に対応する勾配法演算部の演算判定部の構成例を示す図である。
すなわち、図41の例の演算判定部462は、有効画素判定部471を備える点が、図27の演算判定部462と共通するが、水平勾配判定部472と垂直勾配判定部473が除かれた点が、図27の演算判定部462と異なっている。なお、図41の例において、有効画素判定部471は、さらに、水平垂直勾配判定部471−1、水平勾配判定部471−2、および垂直勾配判定部471−3により構成されている。
水平垂直勾配判定部471−1、水平勾配判定部471−2、および垂直勾配判定部471−3は、それぞれ、勾配フラグの値に基づいて、勾配法演算処理の方法を判定する。
すなわち、水平垂直勾配判定部471−1は、勾配フラグの値に基づいて、統合型勾配演算部463−1で勾配法演算処理を行うと判定した場合、式(21)を用いて、演算ブロック内の画素が水平垂直着目条件を満たすか否かどうかを判定し、水平垂直着目条件を満たすと判定した画素の勾配(画素差分)を統合型勾配演算部463−1に供給する。
水平垂直勾配判定部471−1は、勾配フラグの値に基づいて、独立型勾配演算部463−2で勾配法演算処理を行うと判定した場合、式(21)を用いて、演算ブロック内の画素が水平垂直着目条件を満たすか否かどうかを判定し、水平垂直着目条件を満たすと判定した画素の勾配(画素差分)を独立型勾配演算部463−2に供給する。
水平勾配判定部471−2は、勾配フラグの値に基づいて、統合型勾配演算部463−1で勾配法演算処理を行うと判定した場合、式(19)を用いて、演算ブロック内の画素が水平着目条件を満たすか否かどうかを判定し、水平着目条件を満たすと判定した画素の勾配(画素差分)を統合型勾配演算部463−1に供給する。
水平勾配判定部471−2は、勾配フラグの値に基づいて、独立型勾配演算部463−2で、水平方向に対しての勾配法演算処理を行うと判定した場合、式(19)を用いて、演算ブロック内の画素が水平着目条件を満たすか否かどうかを判定し、水平着目条件を満たすと判定した画素の勾配(画素差分)を独立型勾配演算部463−2に供給する。すなわち、垂直方向に対しての勾配法演算処理を行うと判定した場合、水平勾配判定部471−2により水平着目条件を満たすと判定した画素の勾配(画素差分)は、独立型勾配演算部463−2に供給されない。
垂直勾配判定部471−3は、勾配フラグの値に基づいて、統合型勾配演算部463−1で勾配法演算処理を行うと判定した場合、式(20)を用いて、演算ブロック内の画素が垂直着目条件を満たすか否かどうかを判定し、垂直着目条件を満たすと判定した画素の勾配(画素差分)を統合型勾配演算部463−1に供給する。
垂直勾配判定部471−3は、勾配フラグの値に基づいて、独立型勾配演算部463−2で、垂直方向に対しての勾配法演算処理を行うと判定した場合、式(20)を用いて、演算ブロック内の画素が垂直着目条件を満たすか否かどうかを判定し、垂直着目条件を満たすと判定した画素の勾配(画素差分)を独立型勾配演算部463−2に供給する。すなわち、水平方向に対しての勾配法演算処理を行うと判定した場合、垂直勾配判定部471−3により垂直着目条件を満たすと判定した画素の勾配(画素差分)は、独立型勾配演算部463−2に供給されない。
これらに対応して、統合型勾配演算部463−1は、水平垂直勾配判定部471−1、水平勾配判定部471−2、および垂直勾配判定部471−3がそれぞれ条件式を満たすと判定した画素(すなわち、有効画素)の勾配を用いて、統合型勾配法演算を行う。
独立型勾配演算部463−2は、水平垂直勾配判定部471−1、および水平勾配判定部471−2がそれぞれ条件式を満たすと判定した画素(すなわち、有効画素のうちの水平勾配がある画素)の勾配を用いて、水平方向の独立型勾配法演算を行い、水平垂直勾配判定部471−1、および垂直勾配判定部471−3がそれぞれ条件式を満たすと判定した画素(すなわち、有効画素のうちの垂直勾配がある画素)の勾配を用いて、垂直方向の独立型勾配法演算を行う。
次に、図42のフローチャートを参照して、図40の有効画素判定部404が行う有効画素判定処理を説明する。なお、図42は、図32のステップS303において行われる図33を参照して上述した有効画素判定処理の他の例であり、図42のステップS501乃至S503、およびS511の処理は、図33のステップS321乃至S323、およびS330の処理と基本的に同じ処理を行うので、その詳細な説明は適宜省略する。
画素差分算出部421は、メモリ403から供給される演算ブロックの対象画素値を入力すると、ステップS501において、有効画素判定部431を制御し、各カウンタ(有効画素数カウンタ441、水平垂直勾配カウンタ481、水平勾配カウンタ482、および垂直勾配カウンタ483)の値をリセットさせる。
画素差分算出部421の各部(第1空間勾配画素差分算出部421−1、第2空間勾配画素差分算出部421−2、および時間方向画素差分算出部421−3)は、ステップS502において、演算ブロック内の画素を1つ選択し、ステップS503に進み、有効画素演算処理を実行する。この有効画素演算処理は、図34を参照して上述したのでその説明は省略する。
ステップS503の有効画素演算処理により、選択した画素のフレームt+1上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、フレームt上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、並びに、フレームt+1およびフレームt間の時間方向の画素差分Δtが算出され、それらを用いて、水平勾配判定部431−2により、水平方向の着目条件である式(19)、垂直勾配判定部431−3により、垂直方向の着目条件である式(20)、および、水平垂直勾配判定部431−1により、水平垂直方向の着目条件である式(21)の論理演算が行われる。その後、処理は、図42のステップS503に戻り、ステップS504に進む。
ステップS504において、水平垂直勾配判定部431−1は、選択された画素が水平垂直方向の着目条件(式(21))を満たしているか否かを判定し、選択された画素が水平垂直方向の着目条件を満たしていると判定した場合、ステップS505において、水平垂直勾配カウンタ481の水平垂直勾配がある画素の数を1加算し、ステップS510において、有効画素数カウンタ441の有効画素の数を1加算する。
ステップS504において、水平垂直方向の着目条件を満たしていないと判定された場合、水平勾配判定部431−2は、ステップS506において、選択された画素が水平着目条件(式(19))を満たすか否かを判定し、選択された画素が水平方向の着目条件を満たしていると判定した場合、ステップS507において、水平勾配カウンタ482の水平勾配がある画素の数を1加算し、ステップS510において、有効画素数カウンタ441の有効画素の数を1加算する。
ステップS506において、水平方向の着目条件を満たしていないと判定された場合、垂直勾配判定部431−3は、ステップS508において、選択された画素が垂直着目条件(式(20))を満たすか否かを判定し、選択された画素が垂直方向の着目条件を満たしていると判定した場合、ステップS509において、垂直勾配カウンタ483の垂直勾配がある画素の数を1加算し、ステップS510において、有効画素数カウンタ441の有効画素の数を1加算する。
ステップS510において有効画素の数が1加算された後、処理は、ステップS511に進み、画素差分算出部421は、演算ブロック内のすべての画素の処理が終了したか否かを判定する。ステップS510において、演算ブロック内のすべての画素の処理が終了したと判定された場合、有効画素数判定処理は終了され、処理は、図32のステップS303に戻り、ステップS304に進む。
ステップS508において、水平方向の着目条件を満たしていないと判定された場合(すなわち、上述した式(19)乃至式(21)のいずれの式も満たさず、選択された画素は有効画素ではないと判定された場合)、または、ステップS511において、演算ブロック内のすべての画素の処理がまだ終了していないと判定された場合、処理は、ステップS502に戻り、それ以降の処理が繰り返される。
以上のようにして、有効画素数カウンタ441には、演算ブロック内において有効であると判定された有効画素の数、水平垂直勾配カウンタ481には、有効画素のうち、水平垂直勾配がある(より詳細には、垂直方向および水平方向に勾配を有し、水平および垂直方向の動きに類似性がある)と判定された画素の数、水平勾配カウンタ482には、有効画素のうち、水平勾配がある(より詳細には、水平勾配が垂直勾配よりもある程度大きく、より支配的であり、かつ、水平方向の動きに類似性がある)と判定された画素の数、および垂直勾配カウンタ483には、有効画素のうち、垂直勾配がある(より詳細には、垂直勾配が水平勾配よりもある程度大きく、より支配的であり、かつ、垂直方向の動きに類似性がある)と判定された画素の数が記憶される。
次に、図43のフローチャートを参照して、図32のステップS305の勾配法実行判定処理を詳しく説明する。図43の勾配法実行判定処理は、図35を参照して上述した勾配法実行判定処理の他の例であり、上述したように画素の数が記憶された各カウンタに基づいて、図40の演算実行判定部425により実行される処理である。
図40のカウンタ値演算部491は、有効画素数カウンタ441から、有効画素の数(cnt_t)、水平垂直勾配カウンタ481から、有効画素のうち、水平垂直勾配があると判定された画素の数(cnt_xy)、水平勾配カウンタ482から、有効画素のうち、水平勾配があると判定された画素の数(cnt_x)、および垂直勾配カウンタ483から、有効画素のうち、垂直勾配があると判定された画素(ngcnt_y)を取得し、ステップS521において、式(27)を満たすか否かを判定する。
ステップS521において、式(27)を満たすと判定された場合、演算ブロック内に、有効画素が適切に存在すると考えられ、カウンタ値演算部491は、ステップS522において、式(28)を満たすか否かを判定する。
ステップS522において、式(28)を満たすと判定された場合、有効画素の中に、水平方向および垂直方向の勾配を持つ(通常の勾配がある)ものが適切に存在する状態だと考えられる。したがって、フラグ設定部452は、ステップS523において、水平および垂直方向に信用があるとして、勾配フラグの値を、式(14)を用いての統合型勾配法演算処理を行わせる「4」に設定し、勾配フラグ(gladflg=4)を、勾配法演算部405および評価判定部412に出力し、勾配法実行判定処理を終了する。そして、処理は、図32のステップS305に戻り、ステップS306に進み、勾配フラグ(gladflg=4)に応じた勾配法演算処理が実行される。
ステップS522において、式(28)を満たさないと判定された場合、カウンタ値演算部491は、ステップS524において、式(29)を満たすか否かを判定する。ステップS524において、式(29)を満たすと判定された場合、有効画素の中に、垂直方向に勾配がない画素が多く含まれていると考えられる。したがって、フラグ設定部452は、ステップS525において、水平方向に対しての信用があるとして、勾配フラグの値を、水平方向に対しての、式(23)を用いての独立型勾配法演算処理を行わせる「1」に設定し、勾配フラグ(gladflg=1)を、勾配法演算部405および評価判定部412に出力し、勾配法実行判定処理を終了する。そして、処理は、図32のステップS305に戻り、ステップS306に進み、勾配フラグ(gladflg=1)に応じた勾配法演算処理が実行される。
ステップS524において、式(29)を満たさないと判定された場合、カウンタ値演算部451は、ステップS526において、式(30)を満たすか否かを判定する。ステップS524において、式(30)を満たすと判定された場合、有効画素の中に、水平方向に勾配がない画素が多く含まれていると考えられる。したがって、フラグ設定部452は、ステップS527において、垂直方向に対しての信用があるとして、勾配フラグの値を、垂直方向に対しての、式(23)を用いての独立型勾配法演算処理を行わせる「2」に設定し、勾配フラグ(gladflg=2)を、勾配法演算部405および評価判定部412に出力し、勾配法実行判定処理を終了する。そして、処理は、図32のステップS305に戻り、ステップS306に進み、勾配フラグ(gladflg=2)に応じた勾配法演算処理が実行される。
ステップS521において、式(27)を満たさないと判定された場合、あるいは、ステップS526において、式(30)を満たさないと判定された場合、演算ブロック内に、有効と判定された画素が少ないと考えられる。したがって、フラグ設定部452は、ステップS528において、勾配フラグの値を、勾配法演算処理を禁止させる「3」に設定し、勾配フラグ(gladflg=3)を、勾配法演算部405および評価判定部412に出力し、勾配法実行判定処理を終了する。そして、処理は、図32のステップS305に戻り、ステップS306に進み、勾配フラグ(gladflg=3)に応じた勾配法演算処理が実行される。
以上のようにして、演算ブロックの勾配状態(すなわち、有効画素の数、有効画素のうち、水平垂直勾配がある画素の数、水平勾配がある画素の数、および有効画素のうち、垂直勾配がある画素の数)に応じた勾配フラグが、勾配法演算部405および評価判定部412に出力される。
以上のように、図40の有効画素判定部404においては、有効画素を判定する条件式である式(19)乃至式(21)を用いて水平勾配、または垂直勾配のみ有する画素の割合を求め、それに基づいて、勾配法実行判定を行うようにしたので、水平勾配、垂直勾配を改めて求める必要がない。したがって、上述した図26の有効画素判定部404の場合に較べて、演算の負荷を軽減することができる。
次に、図44のフローチャートを参照して、図41の勾配法演算部405が行う処理のうち、独立型勾配法演算処理の詳細を説明する。なお、図41の勾配法演算部405が行う勾配法演算処理は、ステップS406およびS408の独立型勾配法演算処理以外は、図36を参照して上述した図27の勾配法演算部405が行う勾配法演算処理と基本的に同様の処理であるので、その説明を省略する。
すなわち、図44は、図36のステップS406またはS408において行われる図38を参照して上述した独立型勾配法処理の他の例であり、図44のステップS531、S532、S534乃至S536の処理は、図38のステップS441、S442、S445乃至S447の処理と基本的に同じ処理を行うので、その詳細な説明は適宜省略する。また、図44においても、水平方向の場合を説明するが、垂直方向の場合も、対象となる方向成分が異なるだけであり、水平方向の場合と基本的に同様の処理となる。
図41の画素差分算出部461の各部は、有効画素判定部471の制御のもと、ステップS531において、演算ブロック内の画素を1つ選択し、ステップS532に進み、有効画素演算処理を実行する。この有効画素演算処理は、図34を参照して上述した有効画素演算処理と基本的に同様な処理であるので、その説明は省略する。
ステップS532の有効画素演算処理により、選択した画素のフレームt+1上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、フレームt上の水平方向の画素差分Δxおよび垂直方向の画素差分Δy、並びに、フレームt+1およびフレームt間の時間方向の画素差分Δtが求められ、それらを用いて、水平勾配判定部471−2により、水平方向の着目条件である式(19)、垂直勾配判定部471−3により、垂直方向の着目条件である式(20)、および、水平垂直勾配判定部471−1により、水平垂直方向の着目条件である式(21)の論理演算が行われる。その後、処理は、図44のステップS532に戻り、ステップS533に進む。
ステップS533において、水平垂直勾配判定部471−1および水平勾配判定部471−2は、選択された画素が対象方向(いまの場合、水平方向)に勾配があるか否かを判定する。すなわち、水平垂直勾配判定部471−1が、選択された画素が水平垂直方向の着目条件(式(21))を満たしているか否かを判定し、水平勾配判定部471−2が、選択された画素が水平着目条件(式(19))を満たすか否かを判定し、水平垂直勾配判定部471−1により選択された画素が水平垂直方向の着目条件を満たしていると判定された場合、または、水平勾配判定部471−2により、選択された画素が水平着目条件を満たしていると判定された場合、選択された画素が水平方向に勾配があると判定され、処理は、ステップS534に進む。
また、ステップS533において、水平垂直勾配判定部471−1により選択された画素が水平垂直方向の着目条件を満たしていないと判定され、かつ、水平勾配判定部471−2により、選択された画素が水平着目条件を満たしていないと判定された場合、選択された画素が水平方向に勾配がないと判定され、処理は、ステップS531に戻り、それ以降の処理が繰り返される。
なお、垂直方向の場合には、水平垂直勾配判定部431−1により選択された画素が水平垂直方向の着目条件を満たしていると判定された場合、または、垂直勾配判定部431−3により、選択された画素が垂直着目条件を満たしていると判定された場合、選択された画素が垂直方向に勾配があると判定される。
水平垂直勾配判定部471−1または水平勾配判定部471−2は、ステップS533において水平勾配があると判定した画素を、勾配法の演算対象とし、その画素の水平方向の画素差分Δx、および時間方向の画素差分Δtを、独立型勾配演算部463−2に供給し、ステップS534において、独立型勾配演算部463−2を制御し、供給した勾配(画素差分)を積算させる。
水平垂直勾配判定部471−1は、ステップS535において、演算ブロック内のすべての画素の処理が終了したか否かを判定する。ステップS535において、演算ブロック内のすべての画素の処理がまだ終了していないと判定された場合、処理は、ステップS441に戻り、それ以降の処理が繰り返される。
水平垂直勾配判定部471−1は、ステップS535において、演算ブロック内のすべての画素の処理が終了したと判定した場合、ステップS536において、独立型勾配演算部463−2を制御し、積算された勾配を用いて、動きベクトルvnの水平方向成分を算出させる。
独立型勾配演算部463−2は、ステップS536において、積算された勾配と式(23)を用いて、動きベクトルvnの対象方向(水平方向)成分を求め、求めた動きベクトルvnの水平方向成分を、ベクトル算出部464に出力する。この後、処理は、図36のステップS406に戻り、ステップS407に進む。
以上により、図41の勾配法演算部405においても、図37の勾配法演算部405の場合と同様に、演算ブロックの有効画素のうち、対象方向に勾配がある画素の勾配のみが積算されて、対象方向の勾配法演算処理が実行される。これにより、演算ブロックが片側勾配領域であったとしても、演算ブロックに対して、誤った動きベクトルの対象方向成分が検出されることが抑制される。
以上のように、演算ブロックにおいて、有効画素を判定するだけでなく、有効画素の中から、水平勾配または垂直勾配のどちらかのみが存在する片側勾配の画素を判定し、有効画素中の片側勾配の画素の割合に基づいて、勾配法演算を切り替えたり、評価対象のベクトルを切り替えたり、反復判定を行うようにしたので、有効画素を判定するのみの場合よりも、特に、片側勾配領域においての動きベクトルの検出精度が向上する。
次に、図45を参照して、図17のベクトル検出部52の他の構成例について説明する。
上述したように、図17のベクトル検出部52において求められた動きベクトルVは、検出ベクトルメモリ53に、後段の割付処理で用いられる動きベクトル(以下、検出ベクトルとも称する)として記憶されるとともに、初期ベクトル選択部101により、初期候補ベクトル(初期ベクトルの候補ベクトル)としても用いられる。これに対して、図45のベクトル検出部52においては、後段のベクトル割付処理で用いられる検出ベクトルと、初期ベクトル選択処理で用いられる初期候補ベクトルを別々に保存するように構成されている。
図45のベクトル検出部52は、プリフィルタ102−1および102−2、シフト初期ベクトル割付部105、評価値メモリ106、およびシフト初期ベクトルメモリ107を備える点が、図17のベクトル検出部52と共通するが、初期ベクトル選択部101が初期ベクトル選択部521に入れ替わった点、反復勾配法演算部103が反復勾配法演算部522に入れ替わった点、ベクトル評価部104がベクトル評価部523に入れ替わった点、および初期候補ベクトルメモリ524が追加された点が、図17のベクトル検出部52と異なっている。
なお、初期ベクトル選択部521は、過去に求められた周辺のブロックの動きベクトルを、検出ベクトルメモリ53ではなく、初期候補ベクトルメモリ524から取得する点が異なるだけであり、図17のベクトル選択部101と基本的な構成が同様であるので、その詳細な説明は省略する。
図45の例において、反復勾配法演算部522は、図17の反復勾配法演算部103と同様に、構成されており、初期ベクトル選択部101から入力された初期ベクトルV0と、プリフィルタ102−1および102−2を介して入力されるフレームtおよびフレームt+1を用いて、所定のブロック毎に、勾配法により、動きベクトルVnを算出する。このとき、反復勾配法演算部522は、勾配法の対象として用いる有効画素の数を、所定のしきい値αだけでなく、所定のしきい値β(β<α)とも比較して、その比較結果に応じたカウンタフラグ(countflg)を、ベクトル評価部523に供給する。
また、反復勾配法演算部522は、反復勾配法演算部103と同様に、初期ベクトルV0と、算出された動きベクトルVnをベクトル評価部523に出力し、ベクトル評価部104による動きベクトルの評価結果に基づいて、勾配法の演算を繰り返し行い、動きベクトルVnを算出する。なお、反復勾配法演算部522の詳細は、ベクトル評価部523の詳細とともに、図46を参照して後述する。
ベクトル評価部523は、図17のベクトル評価部104と同様に、評価値演算部61Bを有しており、評価値演算部61Bに、反復勾配法演算部103からの動きベクトルVn−1(または初期ベクトルV0)と、動きベクトルVnの評価値dfvを求めさせ、評価値演算部61Bにより求められた評価値dfvに基づいて、反復勾配法演算部522を制御し、勾配法の演算を繰り返し実行させ、最終的に、評価値dfvに基づく、信頼性の高いものを選択する。
このとき、ベクトル評価部523は、反復勾配法演算部522からの動きベクトルVn−1(または初期ベクトルV0)、動きベクトルVn、または0ベクトルの中から、反復勾配法演算部522からのカウンタフラグおよび各ベクトルの評価値dfvに応じて、後段において割付処理に用いられる検出ベクトルVeと、初期ベクトル選択部521において初期ベクトル選択の際に用いられる初期候補ベクトルVicをそれぞれ求める。そして、ベクトル評価部523は、求めた検出ベクトルVeを検出ベクトルメモリ53に記憶させるとともに、求めた初期候補ベクトルVicを、初期候補ベクトルメモリ524に記憶させる。
初期候補ベクトルメモリ524には、ベクトル評価部523により求められた初期候補ベクトルVicが、検出対象ブロックに対応して、記憶される。
図46は、反復勾配法演算部522およびベクトル評価部523の構成を示すブロック図である。
図46の反復勾配法演算部522は、セレクタ401、メモリ制御信号生成部402、メモリ403、勾配法演算部405、および遅延部406を備える点が、図25の反復勾配法演算部103と共通するが、有効画素判定部404が、有効画素判定部531に入れ替わった点が、図25の反復勾配法演算部103と異なっている。
すなわち、有効画素判定部531は、有効画素判定部404と同様に、メモリ403から供給される対象画素値を用いて、例えば、フレームtとフレームt+1の演算ブロックの画素差分を演算することで、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値より多いか否かを判定し、その判定結果に応じたカウンタフラグ(countflg)を、勾配法演算部405およびベクトル評価部523に供給する。
このとき、有効画素判定部531による勾配法の演算に有効な画素の数の判定には、所定のしきい値αと所定のしきい値β(α>β)の2種類のしきい値が用いられる。
有効画素判定部531は、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値αより多いと判定した場合、カウンタフラグ(countflg=1)を勾配法演算部405およびベクトル評価部523に供給し、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値αより少なく、所定のしきい値βよりも多いと判定した場合、カウンタフラグ(countflg=10)を勾配法演算部405およびベクトル評価部523に供給し、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値βより少ないと判定した場合、カウンタフラグ(countflg=0)を勾配法演算部405およびベクトル評価部523に供給する。
また、有効画素判定部531は、有効画素判定部404と同様に、演算ブロックにおいて有効な画素と判定された画素について、水平方向および垂直方向それぞれの勾配状態を求め、水平方向または垂直方向のどちらか一方にのみ勾配がある画素の割合が多いか否かも判定し、その判定結果に応じた勾配フラグ(gladflg)を、勾配法演算部405およびベクトル評価部523に供給する。
図46のベクトル評価部523は、評価値演算部61Bと備える点は、図25のベクトル評価部104と共通するが、評価判定部412が評価判定部541に入れ替わった点が、図25のベクトル評価部104と異なっている。
評価値判定部523は、有効画素判定部531から供給されるカウンタフラグおよび勾配フラグに基づいて、勾配法演算処理を反復させるか否かを判定したり、検出ベクトルVeと初期候補ベクトルVicとをそれぞれ求める。
すなわち、評価値判定部523は、必要に応じて、評価値演算部61Bに演算させた評価値dfvを比較することにより、信頼性の高いものを選択して変更することで、動きベクトルVを求め、有効画素判定部531からカウンタフラグ(countflg=1)が供給された場合(すなわち、有効画素の数が、所定のしきい値αよりも多い場合)、勾配法演算処理を反復させるか否かを判定し、反復させると判定した場合、求めた動きベクトルVを、遅延部406に出力する。
また、評価値判定部523は、勾配法演算処理を反復させない場合、求めた動きベクトルVまたは0ベクトルを、カウンタフラグの値に応じて、検出ベクトルVeとして、検出ベクトルメモリ53に記憶させるとともに、初期候補ベクトルVicとして、初期候補ベクトルメモリ524に記憶させる。
具体的には、評価値判定部523は、有効画素判定部531からカウンタフラグ(countflg=10)が供給された場合(すなわち、有効画素の数が、所定のしきい値αよりも少なく、所定のしきい値βよりも多い場合)、0ベクトルを、検出ベクトルVeとして、検出ベクトルメモリ53に記憶させるとともに、求めた動きベクトルVを、初期候補ベクトルVicとして、初期候補ベクトルメモリ524に記憶させる。
評価値判定部523は、有効画素判定部531からカウンタフラグ(countflg=0)が供給された場合(すなわち、有効画素の数が所定のしきい値βよりも少ない場合)、0ベクトルを、検出ベクトルVeとして、検出ベクトルメモリ53に記憶させるとともに、初期候補ベクトルVicとして、初期候補ベクトルメモリ524に記憶させる。
すなわち、有効画素判定部531においては、有効画素数の割合に対する所定のしきい値αにより、検出ベクトルVeを0ベクトルに落とすか否かの判定がなされる。したがって、所定のしきい値αが、図25の有効画素判定部404におけるしきい値と同程度である場合、後段のベクトル割付部54における検出ベクトルVeの精度は、図25の場合と同程度となる。
さらに、このとき、有効画素判定部531においては、所定のしきい値β(<所定のしきい値α)により、初期候補ベクトルVicを0ベクトルに落とすか否かの判定がなされる。例えば、有効画素の数が所定のしきい値βよりも多い場合には、初期候補ベクトルVicは、検出ベクトルVeと比較して、検出処理結果としての精度は低いが0ベクトルではない、なんらかのベクトル値を持つことができる。
これにより、他の周辺ブロックのベクトル検出処理において、このVicが、初期候補ベクトルとして用いられる場合、図25の有効画素判定部404において有効画素の数が所定のしきい値αよりも少ない場合に0ベクトルに落としてしまう場合よりも、候補ベクトル群における0ベクトルの割合が少なくなり、候補ベクトル群のベクトル値のバリエーションが多くなる。その結果、図46の有効画素判定部531においては、候補ベクトル内に真の動き量に近いベクトルが存在する可能性が、図25の有効画素判定部404の場合よりも高くなり、図25の有効画素判定部404の場合と比較して、初期ベクトルの精度を向上させることができる。
図47は、有効画素判定部531の詳細な構成例を示すブロック図である。
図47の有効画素判定部531は、画素差分算出部421、画素判定部422、カウンタ423、および演算実行判定部425を備える点は、図26の有効画素判定部404と共通であり、勾配法継続判定部424が勾配法継続判定部551に入れ替わった点が、図26の有効画素判定部404と異なる。
すなわち、勾配法継続判定部551は、有効画素数カウンタ441を参照して、演算ブロックにおける勾配法の演算に有効な画素の数が所定のしきい値αより多いか否かを判定し、さらに、演算ブロックにおける勾配法の演算に有効な画素の数が所定のしきい値βより多いか否かを判定する。
勾配法継続判定部551は、演算ブロックにおける勾配法の演算に有効な画素の数が所定のしきい値αより多いと判定した場合、勾配法演算を実行させ、検出ベクトルVeおよび初期候補ベクトルVicを、勾配法演算により求められた動きベクトルVに決定させるカウンタフラグ(countflg=1)を、演算実行判定部425、勾配法演算部405およびベクトル評価部523に供給する。
また、勾配法継続判定部551は、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値αより少なく、所定のしきい値βよりも多いと判定した場合、勾配法演算を実行させるが、検出ベクトルVeを0ベクトルに決定させ、初期候補ベクトルVicを、勾配法演算により求められた動きベクトルVに決定させるカウンタフラグ(countflg=10)を、勾配法演算部405およびベクトル評価部523に供給する。
さらに、勾配法継続判定部551は、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値βより少ないと判定した場合、勾配法演算を打ち切らせ、検出ベクトルVeおよび初期候補ベクトルVicを0ベクトルに決定させるカウンタフラグ(countflg=0)を勾配法演算部405およびベクトル評価部523に供給する。
次に、図48乃至図62を参照して、検出ベクトルを初期候補ベクトルとして用いる図17のベクトル検出部52の場合と、必要に応じて別々の検出ベクトルと初期候補ベクトルを用いる図45のベクトル検出部52の場合とを比較して説明する。
図48乃至図62の例においては、2つの24P信号の時刻tのフレームtおよび時刻t+1のフレームt+1が示されており、矢印Tは、図中、上の時刻tのフレームtから、下の時刻t+1のフレームt+1への時間の経過方向を示している。また、フレームt上に示される仕切りは、各ブロックの境界を表しており、フレームt上には、図中左から、ブロックA0乃至A2が示され、フレームt+1上には、図中左から、フレームt上の図示せぬブロックが対応するブロックB−3乃至B−1、および、ブロックA0乃至A2が対応するブロックB0乃至B2が示されている。すなわち、フレームtおよびt+1上において、番号が同じブロックは対応するブロックを表している。
また、図48乃至図50、図56、図57、図60、および図62においては、フレームtおよびフレームt+1の間には、検出された動きベクトルに基づいて生成される例えば、時刻t+0.4の内挿フレームF1、および時刻t+0.8の内挿フレームF2が示されている。
図48の例においては、図17のベクトル検出部52により動きベクトルが正しく検出された場合に生成される内挿フレームの例が示されている。すなわち、フレームtおよびフレームt+1間において対応するブロック(ブロックA0とブロックB0)間の動きとして、正しく、真の動きベクトルV1が検出されており、これにより、内挿フレームF1および内挿フレームF2上の画像ブロックa1およびa2が正しく生成されている。
しかしながら、動きベクトルV1は、図49の例に示されるように、常に正しく求められるものとは限らない。例えば、図17のベクトル検出部52により実行される有効画素判定の結果、勾配法演算に用いられる有効画素の数が少ない場合、有効画素の数が少ない演算ブロックで演算された結果、求められる動きベクトルV2は、真の動きベクトルV1(すなわち、対応するブロックA0とブロックB0間で検出される確からしい動きベクトルV1)から大きく外れ、動きベクトルV2の両端のブロック(ブロックA0とブロックB−2)はそれぞれ対応するブロックではない。したがって、この動きベクトルV2を用いて生成される内挿フレームF1および内挿フレームF2上の画像ブロックb1およびb2には、破綻が目立つことが多い。
これに対応して、図17のベクトル検出部52においては、図32を参照して上述したように、有効画素の数が所定のしきい値以下の場合に、検出結果が0ベクトルS0とされる。すなわち、有効画素の数が少ないため、動きベクトルV2は、真の動きベクトルV1から大きく外れてしまうので、図50の例に示されるように、検出結果である動きベクトルV2を0ベクトルS0とする。これにより、0ベクトルS0を用いて生成される内挿フレームF1および内挿フレームF2上の画像ブロックc1およびc2の破綻は、動き補償をなしとした場合の補間処理と同程度に抑えられ、比較的安定した画像ブロックc1およびc2が生成される。
一方、反復勾配法において初期オフセットとなる初期ベクトルは、図23を参照して上述したように、周辺ブロック(時空間含む)の検出結果から選択される。
フレームtおよびフレームt+1間において対応するブロック(ブロックA0とブロックB0)間の動きとして、正しく、真の動きベクトルV1が検出されている場合(図48の場合)、図51の例に示されるように、検出対象のブロックA1においては、左隣のブロックであるブロックA0において正しく検出された真の動きベクトルV1が、初期ベクトルV0として選択されることがある。すなわち、周辺ブロックの検出結果を初期ベクトルとして用いるということは、検出対象ブロックと同一オブジェクトに含まれる可能性が高く、動き量の相関性が高いことから、動きベクトルが正しい場合には、ブロック間で動きの伝播効果が得られ、動き検出処理の収束が早くなるという利点がある。
しかしながら、上述した図50の場合のように、周囲のブロックに、検出結果である動きベクトルV2が確からしくなく、0ベクトルS0とされたものが多い場合、検出対象のブロックA1においては、図52の例に示されるように、0ベクトルS0(左隣のブロックであるブロックA0において検出された動きベクトル)が、初期ベクトルV0として選択されやすくなってしまう。
このとき、検出対象のブロックA1において、この初期ベクトルV0(0ベクトルS0)を用いて勾配法演算を行ったとしても、ブロックA1の演算ブロックにおいて、有効画素判定による有効画素の数が所定のしきい値αを下回りやすくなり、図53の例に示されるように、検出結果である動きベクトルV2は、真の動きベクトルV1から大きく外れてしまい、結果的に、図54の例に示されるように、検出対象のブロックA1においても、検出結果が0ベクトルになってしまうことが多い。
このような場合に、さらに、検出対象が次のブロックA2になったとしても、図54の例と同様のこと(すなわち、検出結果が0ベクトルS0になってしまうこと)が起こる可能性が多く、結果として、図55の例に示されるように、あたかも0ベクトルS0が次々と伝播していくようになり、動き検出処理の収束(すなわち、真の動きベクトルV1に近づくこと)が遅くなってしまう。
以上のように、後段で割り付けられる対象となる検出ベクトルと、初期ベクトル選択の候補となる初期候補ベクトルとして同じものを用いる図17のベクトル検出部52においては、検出対象の演算ブロックの有効画素の数が所定のしきい値以下の場合、検出ベクトルを0ベクトルにすることは、図50を参照して上述したように、内挿フレーム上の画像ブロックの破綻を抑える効果はあるが、初期候補ベクトルも0ベクトルになってしまうため、動き検出処理の収束が遅くなってしまう。すなわち、有効画素の数が所定のしきい値以下の場合、図17のベクトル検出部52のように、検出ベクトルも初期候補ベクトルも、0ベクトルにしてしまうと、結果的に、品質の低下が生じてしまう。
そこで、図45のベクトル検出部52においては、それを抑制するために、2つのしきい値を用いた有効画素判定を行い、有効画素判定の結果に応じて、検出された動きベクトルが、用いる用途(後段の割付処理において用いられるものか、ベクトル検出部52内で用いられるものか)に応じて切り替えられる。
すなわち、検出対象のブロックの演算ブロックにおける有効画素の数を所定のしきい値αと比較する際に、所定のしきい値αより若干低めのしきい値β(β<α)を新たに設定し、有効画素の数が所定のしきい値αよりも少ないときに、すぐに、動きベクトルを0ベクトルに設定するのではなく、有効画素の数が、所定のしきい値αよりも少ないときには、有効画素の数が、所定のしきい値β以上であるかも判定する。そして、有効画素の数が、所定のしきい値αよりも少なく、かつ、所定のしきい値β以上である場合には、図56の例に示されるように、後段の割付処理で用いられる検出ベクトルVeを、0ベクトルS0にするが、初期候補ベクトルVicは、勾配法演算で検出された検出結果である動きベクトルV2にする。
具体的に説明すると、0ベクトルS0を後段の割付処理で用いられる検出ベクトルVeとすることにより、例えば、図57の例に示されるように、図50の例の場合と同様に、0ベクトルS0を用いて生成される内挿フレームF1および内挿フレームF2上の画像ブロックc1およびc2の破綻が、動き補償をなしとした場合の補間処理と同程度に抑えられ、その結果、比較的安定した画像ブロックc1およびc2を生成することができる。
一方、勾配法演算で検出された検出結果である動きベクトルV2を、初期候補ベクトルVicとすることにより、図58の例に示されるように、次の検出対象のブロックA1において、初期候補ベクトルVic(V2)が初期ベクトルV0とされた場合、0ベクトルS0が初期ベクトルV0とされた場合(図52の例の場合)よりも、初期ベクトルV0が真の動きベクトルV1に近づく。
また、このとき、図59の例に示されるように、検出対象のブロックA1において、初期ベクトルV0(動きベクトルV2)を用いて勾配法演算を行って求められる動きベクトルV3は、初期ベクトルV0よりもさらに真の動きベクトルV1に近づく可能性が高くなる。
さらに、この検出対象のブロックA1における動き検出処理において、まだ有効画素の数が少なく、真の動きベクトルV1を得ることができなかった場合にも、後段の割付処理で用いられる検出ベクトルVeを0ベクトルS0に変更し、勾配法演算で検出された検出結果である動きベクトルV3を、初期候補ベクトルVicとする。
後段の割付処理で用いられる検出ベクトルVeを0ベクトルS0に変更することにより、図60の例に示されるように、内挿フレームF1および内挿フレームF2上の画像ブロックd1およびd2の破綻が、動き補償をなしとした場合の補間処理と同程度に抑えられ、その結果、比較的安定した画像ブロックd1およびd2が生成される。
一方、勾配法演算で検出された検出結果である動きベクトルV3を、初期候補ベクトルVicとすることにより、図61の例に示されるように、次の検出対象のブロックA2において、初期候補ベクトルVic(V3)が初期ベクトルV0とされた場合、図52の例の場合のように、0ベクトルS0が初期ベクトルV0とされた場合よりも、初期ベクトルV0(V3)がさらに真の動きベクトルV1に近づく。
その結果、図62の例に示されるように、検出対象のブロックA2における有効画素数の判定において、ブロックA2の演算ブロックの有効画素数が所定のしきい値αを上回り、勾配法演算結果の信頼度が向上し、検出対象のブロックA2において、初期ベクトルV0(動きベクトルV3)を用いて勾配法演算を行って真の動きベクトルV1を検出できる可能性が高くなる。
これにより、フレームtおよびフレームt+1間において対応するブロック(ブロックA2とブロックB2)間の動きとして、正しく、真の動きベクトルV1が検出され、内挿フレームF1および内挿フレームF2上の画像ブロックe1およびe2が正しく生成される。
以上のように、検出対象ブロックの演算ブロックにおける有効画素が、所定のしきい値αより少なく、所定のしきい値βよりも多い場合には、検出ベクトルのみ0ベクトルにして、初期候補ベクトルは、演算により求められる動きベクトルにするようにしたので、他の周辺ブロックのベクトル検出処理において、このVicが、初期候補ベクトルとして用いられるとき、候補ベクトル群における0ベクトルの割合が、図25の有効画素判定部404において0ベクトルに落としてしまうときよりも、少なくなり、候補ベクトル群のベクトル値のバリエーションが多くなる。
この結果、図46の有効画素判定部531の場合、候補ベクトル内に真の動き量に近いベクトルが存在する可能性が、図25の有効画素判定部404の場合よりも高くなり、図25の有効画素判定部404の場合と比較して、初期ベクトルの精度を向上させることができる。
これにより、後段の割付処理で用いる検出ベクトルの精度を従来と同程度に維持したまま、勾配法演算によるベクトル検出処理の収束速度を向上させることができる。
次に、図63のフローチャートを参照して、図45のベクトル検出部52の反復勾配法演算処理の例を説明する。なお、図63のステップS551乃至S558は、図32のステップS301乃至S308と同様の処理を行うので、その詳細な説明は適宜省略する。
セレクタ401は、ステップS551において、オフセットベクトルVn−1を選択し、選択したオフセットベクトルVn−1を、メモリ制御信号生成部402、勾配法演算部405、および評価値演算部61Bに出力する。
メモリ制御信号生成部402は、ステップS552において、信号処理装置1の図示せぬ制御部からの制御信号およびセレクタ401からのオフセットベクトルVn−1に応じて、メモリ403に記憶されている時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1から、処理の対象となる演算ブロックの対象画素値を読み出させ、読み出した対象画素値を、有効画素判定部531および勾配法演算部405に供給させる。
有効画素判定部531は、メモリ403から供給される対象画素値を入力すると、ステップS553において、有効画素判定処理を実行する。この有効画素判定処理は、図33を参照して上述した有効画素判定処理と同様の処理であり、その説明は繰り返しになるので省略する。
ステップS553の有効画素判定処理により、メモリ403から供給される対象画素値を用いて、フレームtとフレームt+1の演算ブロックの画素差分が演算されることで、演算ブロックに、勾配法の演算に有効な画素の数が有効画素数カウンタ441にカウントされる。また、演算ブロックにおいて有効な画素と判定された画素について、水平方向および垂直方向それぞれの勾配状態が求められ、水平勾配が無い画素の数と垂直勾配が無い画素の数が、それぞれ、水平勾配無カウンタ442および垂直勾配無カウンタ443にカウントされる。
有効画素判定部531の勾配法継続判定部551は、ステップS554において、有効画素数カウンタ441に記憶されている値(有効画素の数)が所定のしきい値αより多いか否かを判定する。ステップS554において、有効画素の数が所定のしきい値αより多いと判定された場合、勾配法継続判定部551により、演算実行判定部425、勾配法演算部405および評価判定部541に、勾配法演算を実行させ、検出ベクトルVeおよび初期候補ベクトルVicを、勾配法演算により求められた動きベクトルVに決定させるカウンタフラグ(countflg=1)が出力され、処理は、ステップS555に進む。
勾配法継続判定部551からカウンタフラグ(countflg=1)が入力されると、演算実行判定部425は、ステップS555において、勾配法実行判定処理を実行する。この勾配法実行判定処理は、図35を参照して上述した勾配法実行判定処理と同様の処理であり、その説明は繰り返しになるので省略する。
ステップS555の勾配法実行判定処理により、有効画素数カウンタ441の有効画素の数、水平勾配無カウンタ442の水平勾配が無い画素の数、および垂直勾配無カウンタ443の垂直勾配が無い画素の数が参照されて、有効画素における片側勾配の画素の数が多いか否かが判定され、その判定結果に応じて、統合型勾配法演算処理および独立型勾配法演算処理の中から、勾配法演算部405が行う勾配法演算処理を切り替えるための勾配フラグ(gladflg)が設定され、設定された勾配フラグが、勾配法演算部405および評価判定部541に出力され、処理は、ステップS556に進む。
勾配法継続判定部551からカウンタフラグ(countflg=1)が入力され、演算実行判定部425から勾配フラグが入力されると、勾配法演算部405は、ステップS556において、勾配法演算処理を実行する。この勾配法演算処理は、図36を参照して上述した勾配法演算処理と同様の処理であり、その説明は繰り返しになるので省略する。
ステップS556の勾配法演算処理により、演算実行判定部425から勾配フラグに応じて、有効画素を用いての統合型勾配法演算処理、または、有効画素のうち、水平方向に勾配がある画素を用いての水平方向の独立型勾配法演算処理および垂直方向に勾配がある画素を用いての垂直方向の独立型勾配法演算処理のうちの少なくともどちらか一方が実行され、動きベクトルVnが求められ、求められた動きベクトルVnがベクトル評価部523に出力され、処理は、ステップS557に進む。
ベクトル評価部523は、ステップS557において、ベクトル評価処理を実行する。このベクトル評価処理は、図39を参照して上述したベクトル評価処理と同様の処理であり、その説明は繰り返しになるので省略する。
ステップS557のベクトル評価処理により、勾配法演算部405から動きベクトルVn、オフセットベクトルVn−1、および0ベクトルの評価値dfvが求められ、演算実行判定部425から勾配フラグに基づいて、動きベクトルVnと、オフセットベクトルVn−1または0ベクトルの評価値dfvが比較され、比較結果に応じて変更されて、動きベクトルVが求められる。例えば、動きベクトルVnとオフセットベクトルVn−1の評価値dfvが比較され、動きベクトルVnの評価値dfvの信頼度が高いとされた場合、動きベクトルVnは、動きベクトルVとされて、勾配法演算の反復回数は1カウントされる。
評価判定部541は、また、ステップS558において、演算実行判定部425からの勾配フラグおよび勾配法演算の反復回数に基づいて、勾配法演算を反復するか否かを判定する。すなわち、評価判定部541は、勾配フラグが、統合型勾配法演算処理を実行させるフラグ(gladflg=4)であり、かつ、勾配法演算の反復回数が設定された最大反復回数(例えば、2回)になっていない場合、ステップS558において、勾配法演算を反復すると判定し、求められた動きベクトルVを、遅延部406に出力する。
遅延部406は、評価判定部541から入力される動きベクトルVを、有効画素判定部531および勾配法演算部405の次の処理のサイクルまで保持し、次の処理のサイクルで、動きベクトルVをセレクタ401に出力する。これにより、処理は、ステップS551に進み、それ以降の処理が繰り返される。
また、評価判定部541は、勾配フラグが、統合型勾配法演算処理を実行させるフラグ以外であった場合、または、勾配法演算の反復回数が設定された最大反復回数(例えば、2回)になった場合、ステップS558において、勾配法演算を反復しない(すなわち、終了する)と判定し、ステップS565において、求められた動きベクトルVを、検出対象ブロックに対応させて、検出ベクトルVeとして、検出ベクトルメモリ53に記憶させ、初期候補ベクトルVicとして、初期候補ベクトルメモリ524に記憶させる。なお、このとき、検出ベクトルVeおよびその評価値dfvは、シフト初期ベクトル割付部105にも出力される。
一方、ステップS554において、有効画素数が所定のしきい値αより少ないと判定された場合、勾配法継続判定部551は、有効画素数が所定のしきい値βより多いか否かを判定する。ステップS559において、勾配法継続判定部551により、有効画素数が所定のしきい値βより多いと判定された場合、勾配法演算を実行させるが、検出ベクトルVeを0ベクトルに決定させ、初期候補ベクトルVicを、勾配法演算により求められた動きベクトルVに決定させるカウンタフラグ(countflg=10)が、勾配法演算部405および評価判定部541に出力され、処理は、ステップS560に進む。
勾配法継続判定部551からカウンタフラグ(countflg=10)が入力されると、演算実行判定部425は、ステップS560において、勾配法実行判定処理を実行する。この勾配法実行判定処理は、上述したステップS555の勾配法実行判定処理と同様の処理であり、その説明は繰り返しになるので省略する。
ステップS560の勾配法実行判定処理により、有効画素数カウンタ441の有効画素の数、水平勾配無カウンタ442の水平勾配が無い画素の数、および垂直勾配無カウンタ443の垂直勾配が無い画素の数が参照されて、有効画素における片側勾配の画素の数が多いか否かが判定され、その判定結果に応じて、統合型勾配法演算処理および独立型勾配法演算処理の中から、勾配法演算部405が行う勾配法演算処理を切り替えるための勾配フラグ(gladflg)が設定され、設定された勾配フラグが、勾配法演算部405および評価判定部541に出力され、処理は、ステップS561に進む。
勾配法継続判定部551からカウンタフラグ(countflg=10)が入力され、演算実行判定部425から勾配フラグが入力されると、勾配法演算部405は、ステップS561において、勾配法演算処理を実行する。この勾配法演算処理は、上述したステップS556の勾配法演算処理と同様の処理であり、その説明は繰り返しになるので省略する。
ステップS561の勾配法演算処理により、演算実行判定部425から勾配フラグに応じて、有効画素を用いての統合型勾配法演算処理、または、有効画素のうち、水平方向に勾配がある画素を用いての水平方向の独立型勾配法演算処理および垂直方向に勾配がある画素を用いての垂直方向の独立型勾配法演算処理のうちの少なくともどちらか一方が実行され、動きベクトルVnが求められ、求められた動きベクトルVnが評価値演算部61Bに出力され、処理は、ステップS562に進む。
ベクトル評価部523は、ステップS562において、ベクトル評価処理を実行する。このベクトル評価処理は、上述したステップS559のベクトル評価処理と同様の処理であり、その説明は繰り返しになるので省略する。
ステップS562のベクトル評価処理により、勾配法演算部405から動きベクトルVn、オフセットベクトルVn−1、および0ベクトルの評価値dfvが求められ、演算実行判定部425から勾配フラグに基づいて、動きベクトルVnと、オフセットベクトルVn−1または0ベクトルの評価値dfvが比較され、比較結果に応じて変更されて、動きベクトルVが求められる。なお、この場合(所定のしきい値αよりも少ないとされた場合)、動きベクトルVnは、所定のしきい値αよりも少ない有効画素で演算された結果であり、所定のしきい値αよりも多い有効画素で演算された結果ほどの品質は望めないので、反復は実行されない。
評価判定部541は、カウンタフラグ(countflg=10)に基づいて、ステップS563において、検出ベクトルVeのみを0ベクトルに決定し、ステップS565において、検出対象ブロックに対応させて、0ベクトルを、検出ベクトルVeとして、検出ベクトルメモリ53に記憶させ、検出対象ブロックに対応させて、求められた動きベクトルVを、初期候補ベクトルVicとして、初期候補ベクトルメモリ524に記憶させる。なお、このとき、検出ベクトルVeおよびその評価値dfvは、シフト初期ベクトル割付部105にも出力される。
一方、ステップS554において、有効画素数が所定のしきい値βより少ないと判定された場合、勾配法継続判定部551により、勾配法演算を打ち切らせ、検出ベクトルVeおよび初期候補ベクトルVicを0ベクトルに決定させるカウンタフラグ(countflg=0)が勾配法演算部405および評価判定部541に出力され、処理は、ステップS564に進む。
これに対応して、演算実行判定部425および勾配法演算部405は、勾配法継続判定部551からのカウンタフラグの値が0の場合、勾配法演算を実行しない。
評価値判定部541は、ステップS564において、カウンタフラグ(countflg=0)に基づいて、検出ベクトルVeおよび初期候補ベクトルVicを0ベクトルに決定し、ステップS565において、検出対象ブロックに対応させて、0ベクトルを、検出ベクトルVeとして、検出ベクトルメモリ53に記憶させ、初期候補ベクトルVicとして、初期候補ベクトルメモリ524に記憶させる。なお、このとき、検出ベクトルVeおよびその評価値dfvは、シフト初期ベクトル割付部105にも出力される。
以上のように、演算ブロック内の有効画素数の割合を、所定のしきい値αだけでなく、所定のしきい値αよりもさらに少ないしきい値βを用いて判定し、演算ブロック内の有効画素数が所定のしきい値αより少なく、所定のしきい値βよりも多かった場合には、勾配法演算を打ち切ることなく、勾配法演算結果を、初期候補ベクトルとし、0ベクトルを検出ベクトルするようにしたので、後段の割付処理で用いる検出ベクトルの精度を従来と同程度に維持したまま、勾配法演算によるベクトル検出処理の収束速度を向上させることができる。
さらに、演算ブロック内の有効画素数が所定のしきい値αより少なく、所定のしきい値βよりも多かった場合には、勾配法演算を行ったとしても、反復はさせないようにしたので、演算の負荷も抑制される。
なお、上記説明においては、所定のしきい値αを所定のしきい値βよりも先に判定する例を説明したが、所定のしきい値βを先に比較判定することもできる。
次に、図64および図65のフローチャートを参照して、図45のベクトル検出部52の反復勾配法演算処理の他の例を説明する。
図64の例においては、所定のしきい値αよりも値が低めの所定のしきい値βよりも有効画素数が多いと判定された場合には、統合型勾配法演算および独立型勾配法演算の両方が行われ、評価値判定部541において、カウンタフラグおよび勾配フラグの値に基づいて、検出ベクトルVeおよび初期候補ベクトルVicが決定される処理が示されている。
なお、以下、統合型勾配法演算により求められるベクトルを、統合型演算結果ベクトルgvとし、独立型勾配法演算により求められるベクトルを、独立型演算結果ベクトルsgvとし、検出ベクトルVeとして仮設定されるベクトルを、仮設定検出ベクトルtveとし、初期候補ベクトルVicとして仮設定されるベクトルを、仮設定初期候補ベクトルtviとして説明する。
セレクタ401は、ステップS601において、オフセットベクトルVn−1を選択し、選択したオフセットベクトルを、メモリ制御信号生成部402、勾配法演算部405、および評価値演算部61Bに出力する。
メモリ制御信号生成部402は、信号処理装置1の図示せぬ制御部からの制御信号およびセレクタ401からのオフセットベクトルVn−1に応じて、メモリ403に記憶されている時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1から、処理の対象となる演算ブロックの対象画素値を読み出させる。このとき、メモリ制御信号生成部402は、ステップS602において、フレームt+1における演算ブロックの対象画素が枠外であるか否かを判定する。
フレームt+1における演算ブロックの対象画素が枠外であると判定された場合、ステップS603において、勾配法継続判定部551は、カウンタフラグの値を3に設定し、カウンタフラグ(countflg=3)を、演算実行判定部425、勾配法演算部405、および評価判定部541に出力する。
これに対応して、演算実行判定部425および勾配法演算部405は、勾配法継続判定部424からのカウンタフラグの値が3の場合、各処理を行わない。
評価値判定部541は、ステップS604において、カウンタフラグ(countflg=3)に基づいて、オフセットベクトルVn−1を、仮設定検出ベクトルtveとして仮設定し(すなわち、仮設定検出ベクトルの水平方向成分:tve.x=Vn-1.x、仮設定検出ベクトルの垂直方向成分:tve.y=Vn-1.y)、0ベクトルを、仮設定初期候補ベクトルtviとして仮設定する(すなわち、仮設定初期候補ベクトルの水平方向成分:tvi.x=0.0、仮設定初期候補ベクトルの垂直方向成分:tvi.y=0.0)。仮設定検出ベクトルtveおよび仮設定初期候補ベクトルtviの設定後、処理は、図65のステップS615に進む。
フレームt+1における演算ブロックの対象画素が枠外ではないと判定された場合、ステップS606において、メモリ制御信号生成部402は、メモリ403から読み出した演算ブロックの対象画素値を、有効画素判定部531および勾配法演算部405に供給させる。
有効画素判定部531は、メモリ403から供給される対象画素値を入力すると、ステップS606において、有効画素判定処理を実行する。この有効画素判定処理は、図33を参照して上述した有効画素判定処理と同様の処理であり、その説明は繰り返しになるので省略する。
ステップS553の有効画素判定処理により、メモリ403から供給される対象画素値を用いて、フレームtとフレームt+1の演算ブロックの画素差分が演算されることで、演算ブロックに、勾配法の演算に有効な画素の数が有効画素数カウンタ441にカウントされる。また、演算ブロックにおいて有効な画素と判定された画素について、水平方向および垂直方向それぞれの勾配状態が求められ、水平勾配が無い画素の数と垂直勾配が無い画素の数が、それぞれ、水平勾配無カウンタ442および垂直勾配無カウンタ443にカウントされる。
勾配法継続判定部551は、ステップS607において、有効画素数カウンタ441に記憶されている値(有効画素の数)が所定のしきい値βより少ないか否かを判定する。ステップS607において、有効画素の数が所定のしきい値βより少ないと判定された場合、勾配法継続判定部551は、ステップS608において、カウンタフラグの値を0に設定し、勾配法演算を打ち切るカウンタフラグ(countflg=0)を、演算実行判定部425、勾配法演算部405、および評価判定部541に出力する。
これに対応して、演算実行判定部425および勾配法演算部405は、勾配法継続判定部424からのカウンタフラグの値が0の場合、各処理を行わない。
評価値判定部541は、ステップS609において、カウンタフラグ(countflg=0)に基づいて、0ベクトルを、仮設定検出ベクトルtveとして仮設定し(すなわち、仮設定検出ベクトルの水平方向成分:tve.x=0.0、仮設定検出ベクトルの垂直方向成分:tve.y=0.0)、0ベクトルを、仮設定初期候補ベクトルtviとして仮設定する(すなわち、仮設定初期候補ベクトルの水平方向成分:tvi.x=0.0、仮設定初期候補ベクトルの垂直方向成分:tvi.y=0.0)。仮設定検出ベクトルtveおよび仮設定初期候補ベクトルtviの設定後、処理は、図65のステップS615に進む。
ステップS607において、有効画素の数が所定のしきい値βより多いと判定された場合、ステップS610において、勾配法継続判定部551は、統合型勾配法演算に用いられる式(14)の分母が0であるか否かを判定する。有効画素すべてが水平勾配を持っていない場合、または、有効画素すべてが水平勾配を持っていない場合、統合型勾配法演算に用いられる式(14)の分母は0になる。したがって、この場合、勾配法継続判定部551は、有効画素数カウンタ441の他に、水平勾配無カウンタ442および垂直勾配無カウンタ443を参照して、有効画素数カウンタ441の値と水平勾配無カウンタ442の値が同じ数であるか否か、および、有効画素数カウンタ441の値と垂直勾配無カウンタ443の値が同じ数であるか否かを判定することで、統合型勾配法演算に用いられる式(14)の分母が0であるか否かを判定する。
ステップS610において、有効画素数カウンタ441の値と、水平勾配無カウンタ442の値、または垂直勾配無カウンタ443の値が同じ数であると判定された場合、統合型勾配法演算に用いられる式(14)の分母が0であると判定され、勾配法継続判定部551は、ステップS611において、カウンタフラグの値を2に設定し、勾配法演算を打ち切るカウンタフラグ(countflg=2)を、演算実行判定部425、勾配法演算部405、および評価判定部541に出力する。
これに対応して、演算実行判定部425および勾配法演算部405は、勾配法継続判定部424からのカウンタフラグの値が2の場合、各処理を行わない。
評価値判定部541は、ステップS612において、カウンタフラグ(countflg=2)に基づいて、オフセットベクトルVn−1を、仮設定検出ベクトルtveとして仮設定し(すなわち、仮設定検出ベクトルの水平方向成分:tve.x=Vn-1.x、仮設定検出ベクトルの垂直方向成分:tve.y=Vn-1.y)、オフセットベクトルVn−1を、仮設定初期候補ベクトルtviとして仮設定する(すなわち、仮設定初期候補ベクトルの水平方向成分:tvi.x= Vn-1.x、仮設定初期候補ベクトルの垂直方向成分:tvi.y= Vn-1.y)。仮設定検出ベクトルtveおよび仮設定初期候補ベクトルtviの設定後、処理は、図65のステップS615に進む。
ステップS610において、有効画素数カウンタ441の値と、水平勾配無カウンタ442の値、および垂直勾配無カウンタ443の値が同じ数ではないと判定された場合、統合型勾配法演算に用いられる式(14)の分母が0ではないと判定され、勾配法継続判定部551は、ステップS613において、カウンタフラグの値を1に設定し、勾配法演算を実行させるカウンタフラグ(countflg=1)を、勾配法演算部405および評価判定部541に出力する。
これに対応して、勾配法演算部405、および評価判定部541は、ステップS614において、勾配法演算および仮設定処理を実行する。この勾配法演算および仮設定処理を、図66のフローチャートを参照して説明する。
勾配法継続判定部551からカウンタフラグ(countflg=1)が入力されると、有効画素判定部471は、ステップS631において、勾配法演算部405の各部を制御し、統合型勾配法演算処理を実行させる。この統合型勾配法演算処理は、図37のフローチャートを参照して上述したので、その説明は省略する。
ステップS631の統合型勾配法演算処理により、有効画素が勾配法演算の対象とされ、有効画素の水平方向の画素差分Δx、垂直方向の画素差分Δy、および時間方向の画素差分Δtが積算されて、積算された勾配と式(14)の最小自乗和を用いて、統合型演算結果ベクトルgvが求められて、ベクトル算出部464に出力される。
ベクトル算出部464は、ステップS632において、セレクタ401からのオフセットベクトルVn−1に、統合型勾配演算部463−1により求められた統合型演算結果ベクトルgvを加算し、ベクトル評価部104に出力する。
また、有効画素判定部471は、ステップS633において、勾配法演算部405の各部を制御し、水平方向の独立型勾配法演算処理を実行させる。この独立型勾配法演算処理は、図38のフローチャートを参照して上述したので、その説明は省略する。
ステップS633の水平方向の独立型勾配法演算処理により、有効画素のうち、水平方向に勾配がある画素が勾配法演算の対象とされ、有効画素の水平方向の画素差分Δx、および時間方向の画素差分Δtが積算されて、積算された勾配と式(23)を用いて、独立型演算結果ベクトルsgvの水平方向成分(sgv.x)が求められて、ベクトル算出部464に出力される。
有効画素判定部471は、ステップS634において、勾配法演算部405の各部を制御し、垂直方向の独立型勾配法演算処理を実行させる。この独立型勾配法演算処理は、図38のフローチャートを参照して上述したので、その説明は省略する。
ステップS634の垂直方向の独立型勾配法演算処理により、有効画素のうち、垂直方向に勾配がある画素が勾配法演算の対象とされ、有効画素の垂直方向の画素差分Δy、および時間方向の画素差分Δtが積算されて、積算された勾配と式(23)を用いて、独立型演算結果ベクトルsgvの垂直方向成分(sgv.y)が求められて、ベクトル算出部464に出力される。
ベクトル算出部464には、独立型勾配演算部463−2より独立型演算結果ベクトルsgvの水平方向成分および垂直方向成分の少なくとも一方が入力される。ベクトル算出部464は、ステップS635において、セレクタ401からのオフセットベクトルVn−1の対象方向成分(水平方向成分および垂直方向成分の少なくとも一方)と、独立型勾配演算部463−2により求められた独立型演算結果ベクトルsgvの対象方向成分を加算し、ベクトル評価部104に出力する。
なお、このとき、独立型演算結果ベクトルsgvの方向成分のうち、独立型勾配演算部463−2より入力されない方向成分は、0ベクトルとされる。
ステップS636において、勾配法継続判定部551は、有効画素の数が所定のしきい値αより少ないか否かを判定する。ステップS636において、有効画素の数が所定のしきい値αより少ないと判定された場合、ステップS637において、カウンタフラグの値を10に設定し、オフセットベクトルVn−1に統合型演算結果ベクトルgvを加算した値を、初期候補ベクトルとする(すなわち、tvi=Vn−1+gv)カウンタフラグ(countflg=10)を、評価判定部541に出力する。
ステップS638において、評価判定部541は、カウンタフラグ(countflg=10)に基づいて、仮設定検出ベクトルtveを、0ベクトルに仮設定し(すなわち、仮設定検出ベクトルの水平方向成分:tve.x=0.0、仮設定検出ベクトルの垂直方向成分:tve.y=0.0)、仮設定初期候補ベクトルtviを、オフセットベクトルVn−1に統合型演算結果ベクトルgvを加算した値に仮設定する(すなわち、仮設定初期候補ベクトルの水平方向成分:tvi.x= Vn-1.x + gv.x、仮設定初期候補ベクトルの垂直方向成分:tvi.y= Vn-1.y + gv.y)。仮設定検出ベクトルtveおよび仮設定初期候補ベクトルtviの設定後、処理は、図65のステップS615に進む。
ステップS636において、有効画素の数が所定のしきい値αより多いと判定された場合、値が1に設定されたカウンタフラグ(countflg=1)が演算実行判定部425にも出力され、演算実行判定部425は、ステップS639において、勾配法実行判定処理を実行する。この勾配法実行判定処理は、図35を参照して上述した勾配法実行判定処理と同様の処理であり、その説明は繰り返しになるので省略する。
ステップS639の勾配法実行判定処理により、有効画素数カウンタ441の有効画素の数、水平勾配無カウンタ442の水平勾配が無い画素の数、および垂直勾配無カウンタ443の垂直勾配が無い画素の数が参照されて、有効画素における片側勾配の画素の数が多いか否かが判定され、その判定結果に応じて、統合型勾配法演算処理および独立型勾配法演算処理の中から、勾配法演算部405が行う勾配法演算処理を切り替えるための勾配フラグ(gladflg)が設定され、設定された勾配フラグが、勾配法演算部405および評価判定部541に出力され、処理は、ステップS640に進む。
ステップS640において、評価判定部541は、カウンタフラグ(countflg=1)と勾配フラグの値に基づいて、仮設定検出ベクトルtveと仮設定初期候補ベクトルtviを仮設定する。
すなわち、勾配フラグの値が1の場合、水平方向に対しては信用があるとして、仮設定検出ベクトルの水平方向成分:tve.x= Vn-1.x + sgv.x、仮設定検出ベクトルの垂直方向成分:tve.y= 0.0が仮設定され、仮設定初期候補ベクトルの水平方向成分:tvi.x= Vn-1.x + sgv.x、仮設定初期候補ベクトルの垂直方向成分:tvi.y= 0.0が仮設定される。
勾配フラグの値が2の場合、垂直方向に対しては信用があるとして、仮設定検出ベクトルの水平方向成分:tve.x=0.0、仮設定検出ベクトルの垂直方向成分:tve.y=Vn-1.y + sgv.yが仮設定され、仮設定初期候補ベクトルの水平方向成分:tvi.x= 0.0、仮設定初期候補ベクトルの垂直方向成分:tvi.y= Vn-1.y + sgv.yが仮設定される。
勾配フラグの値が3の場合、水平および垂直方向のどちらにも信用がないとして、仮設定検出ベクトルの水平方向成分:tve.x= 0.0、仮設定検出ベクトルの垂直方向成分:tve.y= 0.0が仮設定され、仮設定初期候補ベクトルの水平方向成分:tvi.x= 0.0、仮設定初期候補ベクトルの垂直方向成分:tvi.y= 0.0が仮設定される。
勾配フラグの値が4の場合、片側勾配の画素があまりなく、水平および垂直方向のどちらにも信用があるとして、仮設定検出ベクトルの水平方向成分:tve.x= Vn-1.x + sv.x、仮設定検出ベクトルの垂直方向成分:tve.y= Vn-1.y + sv.yが仮設定され、仮設定初期候補ベクトルの水平方向成分:tvi.x= Vn-1.x + sv.x、仮設定初期候補ベクトルの垂直方向成分:Vn-1.y + sv.yが仮設定される。なお、この場合のみ、反復回数は1加算される。
勾配フラグの値が0の場合、片側勾配の画素が多少あるが、水平および垂直方向のどちらにも少しの信用があるとして、仮設定検出ベクトルの水平方向成分:tve.x= Vn-1.x + sgv.x、仮設定検出ベクトルの垂直方向成分:tve.y= Vn-1.y + sgv.yが仮設定され、仮設定初期候補ベクトルの水平方向成分:tvi.x= Vn-1.x + sgv.x、仮設定初期候補ベクトルの垂直方向成分:Vn-1.y + sgv.yが仮設定される。
ステップS640における、仮設定検出ベクトルtveおよび仮設定初期候補ベクトルtviの設定後、処理は、図65のステップS615に進む。
ステップS615において、評価判定部541は、仮設定した各ベクトル(仮設定検出ベクトルtveおよび仮設定初期候補ベクトルtvi)のリミットを判定する。各ベクトルの値は、所定のベクトル値を超えていないと判定された場合には、仮設定されたベクトルのままとされるが、所定のベクトル値を超えていたと判定された場合には、0ベクトルとされる。
ステップS616において、評価判定部541は、カウンタフラグの値と勾配フラグの値に基づいて、仮設定検出ベクトルtveおよび仮設定初期候補ベクトルtviのベクトル評価処理を行う。
すなわち、評価判定部541は、カウンタフラグの値と勾配フラグの値に応じて、オフセットベクトルVn−1、0ベクトル、仮設定検出ベクトルtveおよび仮設定初期候補ベクトルtviの評価値を演算させ、仮設定検出ベクトルtveの評価値dfvと、オフセットベクトルVn−1の評価値dfvまたは0ベクトルの評価値dfv、および仮設定初期候補ベクトルtviの評価値dfvと、オフセットベクトルVn−1の評価値dfvまたは0ベクトルの評価値dfvをそれぞれ比較し、評価値dfvの値が小さい(すなわち、信頼性が高い)とされたベクトルで、仮設定検出ベクトルtveおよび仮設定初期候補ベクトルtviを更新(変更)する。
ステップS617において、評価判定部541は、カウンタフラグの値と勾配フラグの値、反復回数に基づいて、勾配法演算の反復を終了するか否かを判定する。カウンタフラグの値が1で、勾配フラグの値が4であり、規定の反復回数を超えていない場合、ステップS617において、反復すると判定され、処理は、図64のステップS601に戻り、それ以降の処理を繰り返す。
すなわち、この際、評価判定部541は、ステップS616のベクトル評価結果により更新された仮設定検出ベクトルtveを、遅延部406に供給する。
ステップS617において、反復を終了すると判定された場合、評価判定部541は、ステップS618において、検出ベクトルVeを、仮設定検出ベクトルtveに決定し、決定した検出ベクトルVeを、検出対象ブロックに対応させて、検出ベクトルメモリ53に記憶させ、初期候補ベクトルVicを、仮設定初期候補ベクトルtviに決定し、決定した初期候補ベクトルVicを、検出対象ブロックに対応させて、初期候補ベクトルメモリ524に記憶させる。
上述したステップS616およびS617の処理について、図67を参照して説明する。
図67は、各フラグの値毎のベクトル評価の比較対象と反復判定結果を示している。なお、カウンタフラグの値が「1」の場合のみ、勾配フラグが設定されている。
カウンタフラグの値が「0」のとき、勾配フラグは設定されておらず、ステップS616のベクトル評価における比較は「無」であり、ステップS617における反復判定は、「しない」と判定される。
カウンタフラグの値が「1」で勾配フラグが「1」のとき、ステップS616のベクトル評価における比較対象は「0ベクトル」であり、ステップS617における反復判定は、「しない」と判定される。
カウンタフラグの値が「1」で勾配フラグが「2」のとき、ステップS616のベクトル評価における比較対象は「0ベクトル」であり、ステップS617における反復判定は、「しない」と判定される。
カウンタフラグの値が「1」で勾配フラグが「3」のとき、ステップS616のベクトル評価における比較対象は「0ベクトル」であり、ステップS617における反復判定は、「しない」と判定される。
カウンタフラグの値が「1」で勾配フラグが「4」のとき、ステップS616のベクトル評価における比較対象は「オフセットベクトル(Vn−1)」であり、ステップS617における反復判定は、「比較結果依存」と判定される。すなわち、所定の反復回数が満たされてなければ、比較結果に応じたベクトルがオフセットベクトルとして反復される。
カウンタフラグの値が「2」のとき、勾配フラグは設定されておらず、ステップS616のベクトル評価における比較対象は「オフセットベクトル(Vn−1)」であり、ステップS617における反復判定は、オフセットベクトルが仮設定検出ベクトルtveと同じであるので、「しない」と判定される。
カウンタフラグの値が「3」のとき、勾配フラグは設定されておらず、ステップS616のベクトル評価における比較対象は「オフセットベクトル(Vn−1)」であり、ステップS617における反復判定は、オフセットベクトルが仮設定検出ベクトルtveと同じであるので、「しない」と判定される。
カウンタフラグの値が「10」のとき、勾配フラグは設定されておらず、ステップS616のベクトル評価における比較は「無」であり、ステップS617における反復判定は、「しない」と判定される。
なお、図67の例においては、カウンタフラグの値が「1」で勾配フラグが「0」のときについては図示されないが、勾配フラグが「1,2,3」の場合と同様に、ステップS616のベクトル評価における比較対象は「0ベクトル」であり、ステップS617における反復判定は、「しない」と判定される。
以上のように、必要に応じて、統合型勾配法演算および独立型勾配法演算の両方を行い、カウンタフラグに基づき、検出ベクトル、および初期候補ベクトルをそれぞれ仮設定しておき、カウンタフラグおよび勾配フラグに基づいて、最終的に、検出ベクトル、初期候補ベクトルを決定するようにすることもできる。
なお、上述した図45のベクトル検出部52においては、検出ベクトルと初期候補ベクトルを異なるベクトルとして保持するために、検出ベクトルメモリ53とは別に、初期候補ベクトルメモリ524が追加して構成されている。このため、図17のベクトル検出部52と比較した場合、図45のベクトル検出部52におけるメモリ量が2倍になってしまう。そこで、図68を参照して、初期候補ベクトルメモリ524を追加することなく、検出ベクトルと初期候補ベクトルを異なるベクトルとして保持するようにした構成例を説明する。
図68は、図45のベクトル検出部52の他の構成例を示すブロック図である。
図68のベクトル検出部52は、プリフィルタ102−1および102−2、シフト初期ベクトル割付部105、評価値メモリ106、シフト初期ベクトルメモリ107、および反復勾配法演算部522を備える点が、図17のベクトル検出部52と共通するが、初期ベクトル選択部521が図17の初期ベクトル選択部101に入れ替わった点、ベクトル評価部523がベクトル評価部561に入れ替わった点、および初期候補ベクトルメモリ524が除かれた点が、図45のベクトル検出部52と異なっている。
また、図68の検出ベクトルメモリ53には、ベクトル評価部561により、検出対象ブロック1ブロックにつき1bitの0ベクトルフラグ(zflg)が書き込まれる、0ベクトルフラグ領域571が含まれている。
ベクトル評価部561は、評価値演算部61Bを有しており、評価値演算部61Bに、反復勾配法演算部522からの動きベクトルVn−1(または初期ベクトルV0)と、動きベクトルVnの評価値dfvを求めさせ、評価値演算部61Bにより求められた評価値dfvに基づいて、反復勾配法演算部522を制御し、勾配法の演算を繰り返し実行させ、最終的に、評価値dfvに基づく、信頼性の高いものを選択する。
このとき、ベクトル評価部561は、図45のベクトル評価部523と同様に、反復勾配法演算部522からの動きベクトルVn−1(または初期ベクトルV0)、動きベクトルVn、または0ベクトルの中から、反復勾配法演算部522からのカウンタフラグおよび各ベクトルの評価値dfvに応じて、後段において割付処理に用いられる検出ベクトルVeと、初期ベクトル選択部101において初期ベクトル選択の際に用いられる初期候補ベクトルVicをそれぞれ求める。
ベクトル評価部561は、反復勾配法演算部522からのカウンタフラグに応じて、検出ベクトルVeと初期候補ベクトルVicが同じ場合、0ベクトルフラグを0に設定し、検出ベクトルVeを検出ベクトルメモリ53に記憶させるとともに、0ベクトルフラグ(zflg=0)を0ベクトルフラグ領域571に書き込む。
ベクトル評価部561は、反復勾配法演算部522からのカウンタフラグに応じて、検出ベクトルVeと初期候補ベクトルVicが異なる場合(すなわち、検出ベクトルVeが0ベクトルである場合)、0ベクトルフラグを1に設定し、初期候補ベクトルVicを検出ベクトルメモリ53に記憶させるとともに、0ベクトルフラグ(zflg=1)を0ベクトルフラグ領域571に書き込む。
なお、これに対応して、後段のベクトル割付部54は、0ベクトルフラグに基づいて、検出ベクトルメモリ53から、検出ベクトルを読み出す。すなわち、ベクトル割付部54は、0ベクトルフラグが0の場合、検出ベクトルメモリ53の対応するブロックの位置から、検出ベクトルを読み出すが、0ベクトルフラグが1の場合、検出ベクトルメモリ53の対応するブロックの位置から、検出ベクトルを読み出ださず、0ベクトルを検出ベクトルとする。
一方、初期ベクトル選択部101は、図17の検出ベクトル53の場合と同様に、検出ベクトルメモリ53の対応するブロックの位置から、初期候補ベクトルを読み出す。
すなわち、0ベクトルフラグは、ベクトル割付部54が検出ベクトルを読み出すために必要なフラグともいえる。
図69は、反復勾配法演算部522およびベクトル評価部561の構成を示すブロック図である。
図69の反復勾配法演算部522は、図46の反復勾配法演算部522と同様の構成である。すなわち、反復勾配法演算部522の有効画素判定部531は、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値αより多いと判定した場合、カウンタフラグ(countflg=1)を勾配法演算部405およびベクトル評価部561に供給し、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値αより少なく、所定のしきい値βよりも多いと判定した場合、カウンタフラグ(countflg=10)を勾配法演算部405およびベクトル評価部561に供給し、演算ブロックに、勾配法の演算に有効な画素の数が所定のしきい値βより少ないと判定した場合、カウンタフラグ(countflg=0)を勾配法演算部405およびベクトル評価部561に供給する。
図69のベクトル評価部561は、評価値演算部61Bを備える点は、図46のベクトル評価部523と共通するが、評価判定部541が評価判定部581に入れ替わった点が、図46のベクトル評価部523と異なっている。
評価値判定部581は、有効画素判定部531から供給されるカウンタフラグおよび勾配フラグに基づいて、勾配法演算処理を反復させるか否かを判定したり、検出ベクトルVeと初期候補ベクトルVicとをそれぞれ求める。
すなわち、評価値判定部581は、必要に応じて、評価値演算部61Bに演算させた評価値dfvを比較することにより、信頼性の高いものを選択し、動きベクトルVを求める。
また、評価値判定部581は、有効画素判定部531からカウンタフラグ(countflg=1)が供給された場合、勾配法演算処理を反復させるか否かを判定し、反復させると判定した場合、求めた動きベクトルVを、遅延部406に出力する。評価値判定部581は、勾配法演算処理を反復させない場合、カウンタフラグの値に応じて、求めた動きベクトルVを、検出ベクトルVeまたは初期候補ベクトルVicとして、検出ベクトルメモリ53に記憶させるとともに、0ベクトルフラグを記憶させる。
すなわち、有効画素判定部531からのカウンタフラグの値が1の場合(有効画素の数が所定のしきい値αよりも多い場合)は、検出ベクトルVeと初期候補ベクトルVicは、同じベクトルである。また、有効画素判定部531からのカウンタフラグの値が0の場合(有効画素の数が所定のしきい値βよりも少ない場合)、検出ベクトルVeと初期候補ベクトルVicは、同じベクトル(すなわち、0ベクトル)である。
一方、有効画素判定部531からのカウンタフラグの値が10の場合(有効画素の数が所定のしきい値αよりも少なく、所定のしきい値βよりも多い場合)は、検出ベクトルVeは、0ベクトルであり、初期候補ベクトルVicとは、異なるベクトルである。
したがって、評価値判定部581は、有効画素判定部531からのカウンタフラグの値が1の場合、初期ベクトル選択部101とベクトル割付部54の両方が、検出ベクトルメモリ53に記憶されたベクトルを用いるように、0ベクトルフラグの値を0に設定して、検出ベクトルVeを記憶させるときに、0ベクトルフラグ(zflg=0)も、0ベクトルフラグ領域571に書き込む。
また、評価値判定部581は、有効画素判定部531からのカウンタフラグの値が0の場合も、初期ベクトル選択部101とベクトル割付部54の両方が、検出ベクトルメモリ53に記憶されたベクトルを用いるように、0ベクトルフラグの値を0に設定して、検出ベクトルVe(=0ベクトル)を記憶させるときに、0ベクトルフラグ(zflg=0)も、0ベクトルフラグ領域571に書き込む。
さらに、評価値判定部581は、有効画素判定部531からのカウンタフラグの値が10の場合、初期ベクトル選択部101のみが、検出ベクトルメモリ53に記憶されたベクトルを用い、ベクトル割付部54が0ベクトルを用いるように、0ベクトルフラグの値を1に設定して、初期候補ベクトルVic(=0ベクトル)を記憶させるときに、0ベクトルフラグ(zflg=1)も、0ベクトルフラグ領域571に書き込む。
これにより、初期候補ベクトルVic用のメモリ(図45の初期候補ベクトルメモリ524)を持たなくても、検出ベクトルメモリ53に0ベクトルフラグ用の領域を1ブロックにつき1bit拡張させるだけで、初期候補ベクトルVic用のメモリを持った場合と同様の効果が期待できる。
次に、図70のフローチャートを参照して、図69の評価判定部581のベクトル記憶制御処理を説明する。なお、図70は、図63のステップS565における検出ベクトルおよび初期候補ベクトルを記憶させる処理の他の例である。すなわち、図68のベクトル検出部52の勾配法演算処理は、ステップS565の評価値判定部581による検出ベクトルおよび初期候補ベクトルの記憶制御処理が異なるだけであり、その他の処理は、図63を参照して上述した図45のベクトル検出部52の勾配法演算処理と基本的に同様の処理であるため、その説明は省略する。
評価判定部581は、ステップS660において、有効画素判定部531からのカウンタフラグの値が10であるか否かを判定する。
ステップS660において、カウンタフラグの値が10ではない(すなわち、0か1である)と判定された場合、評価判定部581は、ステップS661において、0ベクトルフラグの値を0に設定し、ステップS662において、図63のステップS557において求められた動きベクトルVを、検出ベクトルVeとして、0ベクトルフラグ(zflg=0)とともに検出ベクトルメモリ63に記憶させる。
すなわち、検出ベクトルVeは、検出対象ブロックに対応させて、記憶され、0ベクトルフラグ(zflg=0)は、検出対象ブロックに対応させて1bit分拡張された0ベクトルフラグ領域571に記憶される。
これに対応して、初期ベクトル選択部101は、検出ベクトルメモリ53の対応するブロックの位置から、初期候補ベクトルを読み出し、後段のベクトル割付部54は、0ベクトルフラグ(zflg=0)に応じて、検出ベクトルメモリ53の対応するブロックの位置から、検出ベクトルを読み出す。
一方、ステップS660において、カウンタフラグの値が10であると判定された場合、評価判定部581は、ステップS663において、0ベクトルフラグの値を1に設定し、ステップS664において、図63のステップS557において求められた動きベクトルVを、初期候補ベクトルVicとして、0ベクトルフラグ(zflg=1)とともに検出ベクトルメモリ63に記憶させる。
すなわち、初期候補ベクトルVicは、検出対象ブロックに対応させて、記憶され、0ベクトルフラグ(zflg=1)は、検出対象ブロックに対応させて1bit分拡張された0ベクトルフラグ領域571に記憶される。
これに対応して、初期ベクトル選択部101は、検出ベクトルメモリ53の対応するブロックの位置から、初期候補ベクトルを読み出し、後段のベクトル割付部54は、0ベクトルフラグ(zflg=1)に応じて、検出ベクトルメモリ53の対応するブロックの位置から、検出ベクトルを読み出ださず、0ベクトルを検出ベクトルとする。
以上のように、初期候補ベクトルVic用のメモリ(図45の初期候補ベクトルメモリ524)を持たなくても、検出ベクトルメモリ53に0ベクトルフラグ用の領域を1ブロックにつき1bit拡張させるだけで、初期候補ベクトルVic用のメモリを持った場合と同様の効果が期待できる。
すなわち、演算ブロック内の有効画素数の割合を、所定のしきい値αだけでなく、所定のしきい値αよりもさらに少ないしきい値βを用いて判定し、演算ブロック内の有効画素数が所定のしきい値αより少なく、所定のしきい値βよりも多かった場合には、勾配法演算を打ち切ることなく、勾配法演算結果を、初期候補ベクトルとし、0ベクトルを検出ベクトルするようにしたので、後段の割付処理で用いる検出ベクトルの精度を従来と同程度に維持したまま、勾配法演算によるベクトル検出処理の収束速度を向上させることができる。
次に、ベクトル割付部54の構成の詳細について説明する。
図71は、ベクトル割付部54の構成を示すブロック図である。図71に構成を示すベクトル割付部54は、24P信号の入力される時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1を用いて、フレームt上において検出された動きベクトルを、割付ベクトルメモリ55上の、補間する60P信号の内挿フレーム上の画素に割り付ける処理を行う。
図71の例において、時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1は、画素情報演算部701、図6を参照して上述した評価値演算部61、および着目画素差分演算部703に入力される。
画素情報演算部701は、検出ベクトルメモリ53のフレームt上の画素に検出された動きベクトルを、左上の画素からラスタスキャン順に取得し、取得した動きベクトルを、次の時刻のフレームt+1方向に延ばし、延ばした動きベクトルと、内挿フレームとの交点を算出する。そして、画素情報演算部701は、算出された動きベクトルと内挿フレームとの交点から、内挿フレーム上において、その動きベクトルの割付対象となる画素(以下、割付対象画素と称する)を設定し、動きベクトルおよび割付対象画素の位置の情報を、ベクトル選択部705に出力する。また、画像情報演算部701は、割付対象画素と、動きベクトルで対応付けられるフレームtの位置Pおよびフレームt+1上の位置Qを算出し、算出されたフレームtおよびフレームt+1上の位置情報を、評価値演算部61、および着目画素差分演算部703に出力する。
評価値演算部61は、画素情報演算部701から、割付対象画素と、動きベクトルで対応付けられるフレームtおよびフレームt+1上の位置情報を入力すると、フレームtの位置Pおよびフレームt+1の位置Qの評価値DFDを演算するため、位置Pおよび位置Qを中心とした一定範囲のDFD演算範囲(m×n)をそれぞれ設定し、それらのDFD演算範囲が画枠内にあるか否かを判定する。評価値演算部61は、DFD演算範囲が画枠内にあると判定した場合、このDFD演算範囲を用いて演算することにより、動きベクトルに対する割付対象画素の評価値DFDを求め、求めた評価値DFDを、ベクトル評価部704に出力する。
着目画素差分演算部703は、画素情報演算部701から、割付対象画素と、動きベクトルで対応付けられるフレームtおよびフレームt+1上の位置情報を入力すると、フレームtの位置Pおよびフレームt+1の位置Qを用いて、割付対象画素に対する輝度差分絶対値を求め、求めた輝度差分絶対値を、ベクトル評価部704に出力する。
ベクトル評価部704は、画素差分判定部711および評価値判定部712により構成される。画素差分判定部711は、着目画素差分演算部703から入力された割付対象画素に対する輝度差分絶対値が所定のしきい値よりも小さいか否かを判定する。評価値判定部712は、画素差分判定部711により着目画素差分演算部703から入力された割付対象画素に対する輝度差分絶対値が所定のしきい値よりも小さいと判定された場合に、評価値演算部61から入力された割付対象画素の評価値DFDが、ベクトル選択部705が有するDFDテーブルの最小評価値より小さいか否かを判定する。そして、評価値判定部712は、割付対象画素の評価値DFDが、DFDテーブルの最小評価値より小さいと判定した場合に、割付対象画素が対応する動きベクトルの信頼度が高いと判定し、ベクトル選択部705に、割付対象画素の評価値DFDを出力する。
ベクトル選択部705は、内挿フレーム上の各画素における最小評価値を保持するDFDテーブルを有しており、内挿フレーム上の各画素に対して、0ベクトルを割り付けた場合の評価値DFD0を、内挿フレーム上の各画素における最小評価値としてDFDテーブルに予め保持している。ベクトル選択部705は、ベクトル評価部704からの割付対象画素の評価値DFDを入力すると、画素情報演算部701からの割付対象画素の位置の情報に基づいて、割付フラグメモリ56のフラグを1(true)に書き換え、割付対象画素のDFDテーブルの最小評価値を、その割付対象画素の評価値DFDに書き換える。また、ベクトル選択部705は、画素情報演算部701からの割付対象画素の位置の情報に基づいて、割付ベクトルメモリ55の割付対象画素に、画素情報演算部701からの動きベクトルを割り付ける。
なお、図71の例においては、図17および図45の検出ベクトルメモリ53の場合が説明されているが、画素情報演算部701は、図68の例の検出ベクトルメモリ53から、動きベクトルを取得する際には、フレームt上の画素に対応して書き込まれている0ベクトルフラグの値に応じて、フレームt上の画素に検出された動きベクトル(検出ベクトル)、あるいは、0ベクトルを取得する。
次に、動きベクトルの画素以下精度を説明する。
上述した式(1)で表されるDFD評価の演算においては、フレームtの画素位置pをベクトルv量分ずらした先のフレームt+1上の位相p+vは、実際には、24p信号のフレームt+1上の画素位置と一致しない場合が多く、その場合の輝度値は定義されていない。したがって、画素以下精度を有する動きベクトルvに対する評価値DFDの演算を行うためには、画素以下の位相における輝度値を何らかの方法で生成しなければならない。
これに対応して、フレームtの画素位置pをベクトルv量分ずらした先のフレームt+1上の位相p+vに最も近い画素の輝度値をそのまま用いる方法がある。しかしながら、この方法では、評価する動きベクトルの画素以下成分を丸めてしまうため、動きベクトルの画素以下成分を捨てていることになり、これにより求められた評価値DFDの信頼度は、低くなってしまう。
そこで、本発明においては、周辺4画素の輝度値による4点補間処理を用いている。図72は、本発明の4点補間処理の概念を示す図である。図72においては、矢印Xが、フレームt+1における水平方向を示しており、矢印Yが、フレームt+1における垂直方向を示している。このフレームt+1において、白丸は、フレームt+1上の画素位置を表しており、黒点は、画素以下の(粒度の)位置を表している。また、フレームt+1上における最左上の黒点p+vとその周辺4画素は、ウインドウEに拡大して示されている。ウインドウEにおいて、白丸内のアルファベットは、周辺4画素の輝度値を示している。
このフレームt+1における最左上の黒点p+vが、フレームtの画素位置pをベクトルv量分ずらした先の位相p+vとすると、位相p+vの輝度値Ft+1(p+v)は、位相p+vの水平方向の画素以下成分αおよび垂直方向の画素以下成分β、並びに、位相p+vの周辺4画素の輝度値L0乃至L4を用いて、周辺4画素の距離の逆比の和で求められる。すなわち、輝度値Ft+1(p+v)は、次の式(31)で表される。
以上のように、4点補間処理により求められる輝度値Ft+1(p+v)を用いて、DFD評価の演算を行うことにより、ハードウェア実装上のコストを引き上げることなく、評価値DFDの信頼度の低下を抑制することができる。なお、以下においては、ベクトル割付の際の評価値DFDや輝度差分絶対値などの演算において、この4点補間を適用した例を説明するが、もちろん、上述した初期ベクトル選択処理やベクトル検出処理などのベクトルを評価する場合の評価値dfv(評価値mDFD)の演算、後述する割付補償処理などのベクトルを評価する場合の評価値DFDの演算、または、後述する画像補間の処理においても、この4点補間は適用される。
次に、図73のフローチャートを参照して、ベクトル割付処理の詳細を説明する。24P信号の元フレームである、時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1は、画素情報演算部701、評価値演算部61、および着目画素差分演算部703に入力される。
画素情報演算部701は、新しい元フレームが入力されると、ベクトル選択部705を制御し、ステップS701において、割付フラグメモリ56の割付フラグを0(False)で初期化させ、ステップS702において、割付ベクトルメモリ55を0ベクトルで初期化させる。これにより、結果的に、動きベクトルが割り付けられない画素に、0ベクトルが割り付けられる。
また、画素情報演算部701は、ステップS703において、評価値演算部61を制御し、内挿フレーム上のすべての画素に対して、0ベクトルを用いて評価値DFD0を算出させ、ベクトル選択部705を制御し、評価値演算部61により算出された0ベクトルの評価値DFD0を、内挿フレームの各画素に対する最小評価値としてDFDテーブルに記憶させる。すなわち、ステップS703において、評価値演算部61は、内挿フレームすべての画素に対して、0ベクトルを用いて評価値DFD0を算出し、算出した評価値DFD0を、ベクトル評価部704を介して、ベクトル選択部705に出力する。そして、ベクトル選択部705は、ベクトル評価部704を介して入力された評価値DFD0を、DFDテーブルの対応する画素の最小評価値として記憶する。
画素情報演算部701は、ステップS704において、検出ベクトルメモリ53上の元フレームから画素を選択する。なお、この場合、フレームの左上からラスタスキャン順に画素が選択される。
画素情報演算部701は、ステップS705において、画素位置演算処理を実行する。具体的には、画素情報演算部701は、取得された動きベクトルと内挿フレームの交点を算出し、動きベクトルと内挿フレームから算出された交点から、割付対象画素を設定する。このとき、画素情報演算部701は、交点が内挿フレーム上の画素位置に一致する場合には、交点を、割付対象画素に設定する。一方、画素情報演算部701は、交点が内挿フレーム上の画素位置に一致しない場合には、上述したように、内挿フレーム上の交点の近傍4画素を、割付対象画素に設定する。
画素情報演算部701は、評価値演算部61および着目画素差分演算部703が評価値DFDおよび輝度差分絶対値を求める上で必要である、各割付対象画素を基準に、取得された動きベクトルで対応付けた元フレーム上の位置を、取得された動きベクトルを、設定された割付対象画素にシフト(平行移動)し、シフトされた動きベクトルと、元フレーム上の交点の位置を求めることで、算出する。
画素情報演算部701は、ステップS706において、算出された割付対象画素を選択し、選択した割付対象画素と、その動きベクトルを、ベクトル選択部705に出力する。このとき、同時に、画素情報演算部701は、選択した割付対象画素を基準に、その動きベクトルで対応付けられる元フレーム上の位置の情報を、評価値演算部61および着目画素演算部703に出力する。なお、ステップS706において、画素情報演算部701は、割付対象画素が複数存在する場合には、左上の画素から選択する。
ステップS707において、画素情報演算部701は、選択された割付対象画素に関して、割付ベクトル評価処理を実行する。この割付ベクトル評価処理の詳細は、図74を参照して後述するが、この割付ベクトル評価処理により、割付対象画素における動きベクトルの評価値DFDおよび輝度差分絶対値が求められ、割付対象画素における動きベクトルの信頼度が判定され、これらの判定の結果、信頼度が高いとされた動きベクトルで、割付ベクトルメモリ55の動きベクトルが書き換えられる。
画素情報演算部701は、ステップS708において、すべての割付対象画素の処理が終了したか否かを判定する。ステップS708において、まだ、すべての割付対象画素の処理が終了していないと判定された場合には、処理は、ステップS706に戻り、次の割付対象画素が選択され、それ以降の処理が繰り返される。
ステップS708において、すべての割付対象画素の処理が終了したと判定された場合、画素情報演算部701は、ステップS709において、検出ベクトルメモリ53上の元フレームのすべての画素の処理を終了したか否かを判定する。ステップS709において、検出ベクトルメモリ53上の元フレームのすべての画素の処理を終了していないと判定された場合、処理は、ステップS704に戻り、検出ベクトルメモリ53上の元フレームの次の画素が選択され、それ以降の処理が繰り返される。また、ステップS709において、検出ベクトルメモリ53のすべての画素についての処理を終了したと判定された場合、ベクトル割付処理は終了される。
次に、図74のフローチャートを参照して、割付ベクトル評価処理の詳細を説明する。なお、図74は、図73のステップS707の割付ベクトル評価処理の例を示している。
図73のステップS706において、画素情報演算部701により、選択した割付対象画素を基準に、その動きベクトルで対応付けられる元フレーム上の位置が求められ、求められた元フレーム上の位置の情報が、評価値演算部61および着目画素差分演算部703に入力される。
評価値演算部61は、画素情報演算部701から、元フレーム上の位置の情報が入力されると、ステップS741において、割付対象画素における動きベクトルの評価値DFDを求めるために、フレームtおよびフレームt+1上の位置を中心としたDFD演算範囲(m×n)をそれぞれ求め、ステップS742において、求められたDFD演算範囲が画枠内にあるか否かを判定する。
ステップS742において、DFD演算範囲が画枠からはみ出していると判定された場合、その動きベクトルは、割付対象画素に割り付ける割付候補ベクトルにはならないと判定され、ステップS743乃至S749の処理は、スキップされ、割付ベクトル評価処理は終了され、処理は、図73のステップS708に戻る。これにより、フレームt上の点P、およびフレームt+1上の点Qを中心としたDFD演算範囲が画枠をはみ出てしまった場合の動きベクトルは、候補から除外される。
ステップS742において、求められたDFD演算範囲が画枠内にあると判定された場合、評価値演算部61は、ステップS743において、画枠内にあると判定されたDFD演算範囲を用いて、割付対象画素の評価値DFDを演算し、求められた評価値DFDを、評価値判定部712に出力する。なお、このとき、元フレーム上の位置が画素以下であった場合には、上述した4点補間を用いて、元フレーム上の交点の輝度値を求めることにより、割付対象画素の評価値DFDが演算される。
一方、着目画素差分演算部703は、画素情報演算部701から、元フレーム上の位置の情報が入力されると、ステップS744において、割付対象画素における輝度差分絶対値dpを求め、求められた輝度差分絶対値dpを、画素差分判定部711に出力する。なお、このときも、元フレーム上の位置が画素以下であった場合には、着目画素差分演算部703は、上述した4点補間を用いて、元フレーム上の交点の輝度値を求めることにより、割付対象画素における輝度差分絶対値dpを演算する。
画素差分判定部711は、ステップS745において、着目画素差分演算部703からの割付対象画素の輝度差分絶対値dpが、所定のしきい値以下であるか否かを判定する。ステップS745において、割付対象画素の輝度差分絶対値dpが、所定のしきい値より大きいと判定された場合、フレームtおよびフレームt+1の交点がそれぞれ異なるオブジェクトに属する可能性が高いと判定され、すなわち、その動きベクトルは、割付対象画素における信頼度が低く、割付対象画素に割り付ける割付候補ベクトルにはならないと判定され、処理は、ステップS746乃至S749をスキップし、割付ベクトル評価処理を終了し、図73のステップS708に戻る。
これにより、フレームtおよびフレームt+1の交点がそれぞれ異なるオブジェクトに属する場合の動きベクトルは候補から外される。
ステップS745において、割付対象画素の輝度差分絶対値dpが、所定のしきい値以下であると判定された場合、処理は、ステップS746に進む。評価値判定部712は、ステップS746において、ベクトル選択部705のDFDテーブルを参照し、評価値演算部61からの割付対象画素の評価値DFDが、DFDテーブルに記憶されている割付対象画素の最小評価値(いまの場合、0ベクトルの評価値DFD0)よりも小さいか否かを判定する。ステップS746において、評価値演算部61からの割付対象画素の評価値DFDが、DFDテーブルに記憶されている割付対象画素の最小評価値以上であると判定された場合、その動きベクトルは、割付対象画素において、信頼度が高くないと判定され、ステップS747乃至S749の処理は、スキップされ、割付ベクトル評価処理は終了され、処理は、図73のステップS708に戻る。
一方、ステップS746において、評価値演算部61からの割付対象画素の評価値DFDが、DFDテーブルに記憶されている割付対象画素の最小評価値よりも小さいと判定された場合、評価値判定部712は、その動きベクトルは、割付対象画素において、いままで比較した動きベクトルの中で最も、評価値DFDに基づく信頼度が高いと判定し、信頼度が高いと判定された割付対象画素の評価値DFDを、ベクトル選択部705に出力する。
ベクトル選択部705は、評価値判定部712からの割付対象画素の評価値DFDを入力すると、ステップS747において、割付フラグメモリ56の割付対象画素の割付フラグを1(True)に書き換え、ステップS748において、DFDテーブルの割付対象画素が対応する最小評価値を、評価値判定部712により信頼度が高いと判定された評価値DFDに書き換える。
ベクトル選択部705には、ステップS706において、画素情報演算部701から選択した割付対象画素とその動きベクトルが入力されている。したがって、ベクトル選択部705は、ステップS749において、割付ベクトルメモリ55の割付対象画素に割り付けられている動きベクトルを、信頼度が高いと判定された評価値DFDに対応する動きベクトルで書き換える。これにより、割付ベクトル評価処理は終了され、処理は、図73のステップS708に戻る。
以上のように、内挿フレームの割付対象画素に割り付けられる動きベクトルを選ぶときに、評価値DFDだけでなく、割付対象画素を基準に動きベクトルで対応付けた元フレーム上の位置に基づいて求められる、割付対象画素の輝度差分絶対値を別扱いにし、評価するようにしたので、従来の評価値DFDを用いるだけの場合よりも、割付候補ベクトルの中から、最も確からしい動きベクトルを選んで、割付対象画素に割り付けることができる。これにより、ベクトル割付の精度が向上し、後段の画像補間処理において生成される画像の不連続性などを抑制することができ、画像の品質を向上させることができる。
さらに、評価値DFDや輝度差分絶対値を求める際などに、画素以下位置の画素値が必要な場合に、その画素以下位置の近傍4画素との距離を基にした線形補間で値を求めるようにしたので、画素以下位置精度の処理が可能になり、さらに、従来の画素以下成分を丸めてしまう方法よりも、輝度差分絶対値dpや評価値DFDを精度よく求めることができ、これにより、割付候補ベクトルの中から、着目画素により確からしい動きベクトルを割り付けることができる。すなわち、ベクトル割付処理の精度が向上する。
次に、割付補償部57の構成の詳細について説明する。
図75は、割付補償部57の構成を示すブロック図である。図75に構成を示す割付補償部57は、割付ベクトル判定部801およびベクトル補償部802により構成され、ベクトル割付部54により動きベクトルが割り付けられなかった60P信号の内挿フレーム上の画素に、その周辺画素の動きベクトルを補って割り付ける処理を行う。
前段のベクトル割付部54により、割付ベクトルメモリ55上の内挿フレームの画素には動きベクトルが割り付けられている。また、ベクトル割付部54により動きベクトルが割り付けられた画素の割付フラグメモリ56の割付フラグには、1(True)が書き込まれており、動きベクトルが割り付けられなかった画素の割付フラグメモリ56の割付フラグには、0(False)が書き込まれている。
割付ベクトル判定部801は、割付フラグメモリ56の割付フラグを参照し、着目画素に、ベクトル割付部54により動きベクトルが割り付けられているか否かを判定する。そして、割付ベクトル判定部801は、ベクトル割付部54により動きベクトルが割り付けられなかった着目画素を選択し、選択した着目画素に対して、ベクトル補償部802を制御し、その着目画素の周辺画素の動きベクトルを選択して、割付ベクトルメモリ55の内挿フレーム上に割り付けさせる。
ベクトル補償部802は、補償処理部811、および図6を参照して上述した評価値演算部61により構成される。
補償処理部811は、最小評価値DFDと、最小評価値DFDの動きベクトルを候補ベクトル(以下、補償候補ベクトルとも称する)として記憶するメモリ821を有しており、割付ベクトル判定部801により選択された着目画素の初期値として、0ベクトルの評価値DFDを最小評価値としてメモリ821に記憶し、0ベクトルを、補償候補ベクトルとしてメモリ821に記憶する。補償処理部811は、割付フラグメモリ56を参照して、着目画素の周辺画素の動きベクトルの有無を判定し、割付ベクトルメモリ55から、周辺画素に割り付けられている動きベクトルを取得し、評価値演算部61を制御し、その動きベクトルの評価値DFDを演算させる。
また、補償処理部811は、評価値演算部61により演算された評価値DFDがメモリ821に記憶されている最小評価値よりも小さいか否かを判定し、演算された評価値DFDが最小評価値よりも小さいと判定した場合、メモリ821の補償候補ベクトルと最小評価値を、演算された評価値DFDとその動きベクトルに書き換え、最終的に、評価値DFDが最も小さいと判定された周辺画素の動きベクトル(補償候補ベクトル)を、着目画素の動きベクトルとして、割付ベクトルメモリ55の着目画素に割り付ける。さらに、補償処理部811は、動きベクトルが割り付けられた着目画素の割付フラグメモリ56の割付フラグを1(True)に書き換える。
評価値演算部61は、割付ベクトルメモリ55から周辺画素の動きベクトルを取得すると、入力される時刻tの24P信号の画像のフレームtと、時刻t+1の画像のフレームt+1を用いて、割付ベクトルメモリ55からの動きベクトルの評価値DFDを演算し、演算した評価値DFDを補償処理部811に出力する。
次に、図76のフローチャートを参照して、割付補償処理の詳細を説明する。前段のベクトル割付部54により、割付ベクトルメモリ55上の内挿フレームの画素には動きベクトルが割り付けられている。また、ベクトル割付部54により動きベクトルが割り付けられた画素の割付フラグメモリ56の割付フラグには、1(True)が書き込まれており、動きベクトルが割り付けられなかった画素の割付フラグメモリ56の割付フラグには、0(False)が書き込まれている。
割付ベクトル判定部801は、ステップS801において、割付フラグメモリ56の内挿フレームの画素を、着目画素として選択する。このとき、割付ベクトル判定部801は、フレームの左上の画素からラスタスキャン順に画素を選択する。
割付ベクトル判定部801は、ステップS802において、割付フラグメモリ56内の着目画素の割付フラグが、0(False)であるか否かを判定し、割付フラグメモリ56内の着目画素の割付フラグが、0(False)であると判定した場合、動きベクトルが割り付けられていないと判定し、ステップS803において、補償処理部811を制御し、ベクトル補償処理を実行させる。このベクトル補償処理の詳細は、図77を参照して後述するが、このベクトル補償処理により、周辺画素に割り付けられた動きベクトルの中から、評価値DFDの最小の動きベクトルが補償候補ベクトルとしてメモリ821に記憶される。
補償処理部811は、ステップS804において、メモリ821の補償候補ベクトルを、着目画素の動きベクトルとして、割付ベクトルメモリ55に割り付け、ステップS805において、割付フラグメモリ56の着目画素の割り付けフラグを、1(True)に書き換える。
一方、ステップS802において、割付フラグメモリ56内の着目画素の割付フラグが、1(True)であると判定され場合、その着目画素にはすでに動きベクトルが割り付けられているとされ、処理は、ステップS803乃至S805のをスキップし、ステップS806に進む。
割付ベクトル判定部801は、ステップS806において、割付フラグメモリ56の内挿フレームのすべての画素の処理を終了したか否かを判定する。ステップS806において、すべての画素の処理を終了していないと判定された場合、処理は、ステップS801に戻り、割付フラグメモリ56の内挿フレームの次の画素が、着目画素として選択され、それ以降の処理が実行される。ステップS806において、割付フラグメモリ56の内挿フレームのすべての画素の処理を終了したと判定された場合、割付補償処理は終了される。
次に、図77のフローチャートを参照して、ベクトル補償処理の詳細を説明する。なお、図77は、図76のステップS803のベクトル補償処理の例を示している。
補償処理部811は、ステップS821において、評価値演算部61を制御し、0ベクトルを用いて評価値DFD0を算出させる。具体的には、評価値演算部61は、ステップS821において、入力される時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1を用いて、例えば、図62を参照して上述したように、着目画素について、0ベクトルでの評価値DFD0を演算し、演算した評価値DFD0を補償処理部811に出力する。
ステップS822において、補償処理部811は、評価値DFD0を最小評価値としてメモリ821に記憶し、ステップS823において、0ベクトルを補償候補ベクトルとして、メモリ821に記憶する。補償処理部811は、ステップS824において、割付ベクトル判定部801により選択された着目画素の周辺8画素のうち、1つの周辺画素を選択する。このとき、補償処理部811は、周辺8画素のうち、左上の画素からラスタスキャン順に周辺画素を選択する。
補償処理部811は、ステップS825において、割付フラグメモリ56を参照し、選択した周辺画素の動きベクトルが存在するか否かを判定する。割付フラグメモリ56の周辺画素の割付フラグが1(True)であれば、ステップS825において、選択した周辺画素に割り付けられている動きベクトルが存在すると判定され、処理は、ステップS826に進み、補償処理部811は、割付ベクトルメモリ55から、周辺画素の動きベクトルを取得する。このとき、割付ベクトルメモリ55から評価値演算部61にも周辺画素の動きベクトルが出力される。
評価値演算部61は、割付ベクトルメモリ55から周辺画素の動きベクトルが入力されると、ステップS827において、入力される時刻tの画像のフレームtと、時刻t+1の画像のフレームt+1を用いて、着目画素について、割付ベクトルメモリ55からの動きベクトルの評価値DFDを演算し、演算した評価値DFDを、補償処理部811に出力する。
補償処理部811は、評価値演算部61から評価値DFDが入力されると、ステップS828において、評価値DFDが、メモリ821に記憶されている着目画素の最小評価値よりも小さいか否かを判定する。ステップS828において、評価値DFDが、メモリ821に記憶されている着目画素の最小評価値よりも小さいと判定された場合、補償処理部811は、ステップS829において、メモリ821の最小評価値を、最小評価値よりも小さいと判定された評価値DFDに書き換え、ステップS830において、メモリ821の補償候補ベクトルを、その最小評価値の動きベクトルに書き換える。
一方、ステップS825において、割付フラグメモリ56の周辺画素の割付フラグが0(False)であると、選択した周辺画素に割り付けられている動きベクトルがないと判定され、ステップS826乃至S830の処理はスキップされ、処理は、ステップS831に進む。また、ステップS828において、評価値DFDが、メモリ821に記憶されている着目画素の最小評価値以上であると判定された場合、ステップS829およびS830の処理はスキップされ、処理は、ステップS831に進む。
補償処理部811は、ステップS831において、着目画素の周辺8画素すべてに対して処理が終了したか否かを判定する。ステップS831において、着目画素の周辺8画素すべてに対して処理が終了していないと判定された場合、処理は、ステップS824に戻り、次の周辺画素が選択され、それ以降の処理が繰り返される。また、ステップS831において、着目画素の周辺8画素すべてに対して処理が終了したと判定された場合、ベクトル補償処理は終了され、処理は、図76のステップS804に戻る。
以上のように、ベクトル割付処理において、割り付けることができなかった画素に関しても、動き相関があることを利用して、その画素の周辺の動きベクトルの中から、評価値DFDに基づく、最も信頼度がある、確からしい動きベクトルを得ることができる。これにより、ベクトルが割り付けられず、0ベクトルなどを割り付けておく場合よりも、ベクトル割付の精度が向上し、後段の画像補間処理において生成される画像の不連続性を抑制することができる。
また、上述した割付補償処理により動きベクトルが割り付けられた画素の割付フラグを1(True)に書き換えるようにし、割付補償処理により割り付けられた動きベクトルも、次の画素の補償候補ベクトルとして用いるようにしたので、オブジェクト内でほぼ同じ動きをする画素には、ほぼ同一の動きベクトルが選択されるようになり、誤りの少ない安定した動きベクトルを得ることができる。その結果、後段において生成される画像のブロックノイズや粉状ノイズなどを抑制し、品質を向上させることができる。
なお、上記説明においては、ベクトル割付部54において割り付けられなかった画素に対してベクトル補償処理を行っているが、ベクトル検出部52において検出されなかった(0ベクトルが検出された)画素など、何らかの処理において動きベクトルが求められなかった画素に対してベクトル補償処理を行うようにしてもよい。また、さらに、検出された動きベクトル、または、割り付けられた動きベクトルが確からしくない(信頼度が低い)とされる画素に対してベクトル補償処理を行うようにしてもよい。
また、上記説明においては、画素単位での割付補償処理を説明したが、所定のブロック単位でその周辺に位置する画素に割り付けられた動きベクトルのうちの確からしいものを、その所定のブロックの画素すべてに割り付けるようにしてもよい。なお、所定のブロックにすでに動きベクトルが割り付けられている画素がある場合は、それ以外の画素にだけ割り付けるようにしてもよい。
次に、画像補間部58の構成の詳細について説明する。
図78は、画像補間部58の構成を示すブロック図である。図78に構成を示す画像補間部58は、割付ベクトルメモリ55の内挿フレームに割り付けられた動きベクトルと、フレームtおよびフレームt+1の画素値を用いて、内挿フレームの画素値を補間生成し、60P信号の画像を出力する処理を行う。
図78の例において、時刻tの画像のフレームtは、空間フィルタ92−1に入力され、時刻t+1の画像のフレームt+1は、空間フィルタ92−2およびバッファ95に入力される。
補間制御部91は、割付ベクトルメモリ55の内挿フレームの画素を選択し、選択した画素に割り付けられている動きベクトルに基づいて、内挿フレーム上の画素と、2枚のフレームtおよびフレームt+1の画素との位置関係(空間シフト量)をそれぞれ求める。すなわち、補間制御部91は、内挿フレームの画素を基準に、その動きベクトルで対応付けられるフレームt上の位置と、内挿フレームの画素に対応するフレームt上の画素の位置から、それらの空間シフト量を求め、求めた空間シフト量を空間フィルタ92−1に供給する。同様に、補間制御部91は、内挿フレームの画素を基準に、その動きベクトルで対応付けられるフレームt+1上の位置と、内挿フレームの画素に対応するフレームt+1上の画素の位置から、それらの空間シフト量を求め、求めた空間シフト量を空間フィルタ92−2に供給する。
また、補間制御部91は、予め設定されている内挿フレームの時間位相(時刻)に基づいて、フレームtとフレームt+1の間における補間重みを求め、求めた補間重みを、乗算器93−1および93−2に設定する。例えば、内挿フレームの時刻が、フレームt+1の時刻t+1から「k」離れた時刻で、かつ、フレームtの時刻tから「1−k」離れた時刻である場合(すなわち、内挿フレームが時刻tと時刻t+1を「1−k」:「k」に内分する時刻に生成される場合)、補間制御部91は、乗算器93−1に「1−k」の補間重みを設定し、乗算器93−2に「k」の補間重みを設定する。
空間フィルタ92−1および92−2は、例えば、キュービックフィルタなどにより構成される。空間フィルタ92−1は、入力されるフレームt上の画素の画素値と、補間制御部91から供給される空間シフト量に基づいて、内挿フレームの画素に対応する、フレームt上の画素値を求め、求めた画素値を乗算器93−1に出力する。空間フィルタ92−2は、入力されるフレームt+1上の画素の画素値と、補間制御部91から供給される空間シフト量に基づいて、内挿フレームの画素に対応する、フレームt+1上の画素値を求め、求めた画素値を乗算器93−2に出力する。
なお、内挿フレームの画素の位置が、フレームtまたはフレームt+1上の画素の位置と一致しない場合(すなわち、内挿フレームの画素の位置が、フレームtまたはフレームt+1において画素以下成分である場合)、空間フィルタ92−1および92−2は、フレームtまたはフレームt+1における内挿フレームの画素の位置の周辺4画素の画素値を用いて、周辺4画素の距離の逆比の和を求めることにより、内挿フレームの画素に対応するフレーム上の画素値を求める。すなわち、画素以下位置の画素値は、図72を参照して上述した周辺4画素との距離を基にした線形補間で値が求められる。
乗算器93−1は、空間フィルタ92−1から入力されるフレームt上の画素値に、補間制御部91により設定された補間重み「1−k」を乗算し、重み付けされた画素値を、加算器94に出力する。乗算器93−2は、空間フィルタ92−2から入力されるフレームt+1上の画素値に、補間制御部91により設定された補間重み「k」を乗算し、重み付けされた画素値を、加算器94に出力する。
加算器94は、乗算器93−1から入力される画素値と、乗算器93−2から入力される画素値を加算することにより、内挿フレームの画素の画素値を生成し、生成された内挿フレームの画素値を、バッファ95に出力する。バッファ95は、入力されたフレームt+1をバッファしている。バッファ95は、生成された内挿フレームを出力し、その次に、予め設定されている60Pフレームの時間位相(時刻)に基づいて、必要に応じて、バッファしているフレームt+1を出力することにより、60P信号の画像を、図示せぬ後段に出力する。
以上のように構成される画像補間部58の画像補間処理の詳細を、図79のフローチャートを参照して説明する。
補間制御部91は、ステップS901において、処理する内挿フレームの時間位相に基づいて、フレームtとフレームt+1の間における内挿フレームの補間重み(例えば、「k」および「1−k」)を求め、求められた補間重みを、乗算器93−1および93−2にそれぞれ設定する。補間制御部91は、ステップS902において、割付ベクトルメモリ55の内挿フレームの画素を選択する。なお、内挿フレーム上の画素は、フレームの左上の画素からラスタスキャン順に選択される。
補間制御部91は、ステップS903において、選択した画素に割り付けられている動きベクトルに基づいて、内挿フレーム上の画素と、2枚のフレームtおよびフレームt+1の画素との位置関係(空間シフト量)をそれぞれ求め、求められた空間シフト量を、それぞれ空間フィルタ92−1および92−2に供給する。具体的には、補間制御部91は、ステップS903において、内挿フレームの画素を基準に、その動きベクトルで対応付けられるフレームt上の位置と、内挿フレームの画素に対応するフレームt上の画素の位置から、それらの空間シフト量を求め、求めた空間シフト量を空間フィルタ92−1に供給する。同様に、補間制御部91は、内挿フレームの画素を基準に、その動きベクトルで対応付けられるフレームt+1上の位置と、内挿フレームの画素に対応するフレームt+1上の画素の位置から、それらの空間シフト量を求め、求めた空間シフト量を空間フィルタ92−2に供給する。
時刻tの画像のフレームtの画素値は、空間フィルタ92−1に入力され、時刻t+1の画像のフレームt+1の画素値は、空間フィルタ92−2に入力されている。ステップS904において、空間フィルタ92−1および92−2は、入力されるフレームtおよびt+1上の画素の画素値と、補間制御部91から供給される空間シフト量に基づいて、内挿フレームの画素に対応する、各フレーム上の画素値を求め、求めた画素値を乗算器93−1および93−2にそれぞれ出力する。
乗算器93−1および93−2は、ステップS905において、空間フィルタ92−1または92−2から入力される各フレーム上の画素値に、補間制御部91により設定された補間重みを重み付けし、重み付けされた画素値を、加算器94に出力する。すなわち、乗算器93−1は、空間フィルタ92−1から入力されるフレームt上の画素値に、補間制御部91により設定された補間重み「1−k」を乗算し、重み付けされた画素値を、加算器94に出力する。乗算器93−2は、空間フィルタ92−2から入力されるフレームt+1上の画素値に、補間制御部91により設定された補間重み「k」を乗算し、重み付けされた画素値を、加算器94に出力する。
加算器94は、ステップS906において、乗算器93−1により重み付けされた画素値と、乗算器93−2により重み付けされた画素値を加算することにより、内挿フレームの画素の画素値を生成し、生成された画素値を、バッファ95に出力する。補間制御部91は、ステップS907において、内挿フレーム上のすべての画素についての処理が終了したか否かを判定する。ステップS907において、内挿フレーム上のすべての画素についての処理が終了していないと判定された場合、処理は、ステップS902に戻り、それ以降の処理が繰り返される。ステップS907において、内挿フレーム上のすべての画素についての処理が終了したと判定された場合、画像補間処理は、終了される。
以上のように、内挿フレームに割り付けられた動きベクトルに基づいて、内挿フレームの画素値が生成されると、処理は、上述した図16のステップS85に戻り、ステップS86において、バッファ95により、内挿フレームが出力され、その次に、必要に応じて、フレームt+1が出力されることにより、60P信号の画像が、後段に出力される。したがって、内挿フレームの画素に、最も確からしい動きベクトルが割り付くので、精度のよい内挿フレームを生成することができる。
本実施の形態においては、動きベクトルを選択する際の評価値として、差分絶対値和である評価値DFD、評価値mDFD、および評価値dfvを用いて説明したが、評価値DFD、評価値mDFD、および評価値dfvに限定されず、動きベクトルの信頼度を評価するものであれば、他のものを用いるようにしてもよい。
また、本実施の形態においては、各処理を行うブロックを、例えば、8画素×8画素や9画素×9画素などにより構成するようにして説明したが、これらは、一例であり、各処理を行うブロックを構成する画素は、上記画素数に限定されない。
さらに、本実施の形態においては、24P信号から60P信号への信号変換を例に、説明を行ったが、本発明は、例えば、動画像のフレーム周波数変換として、インターレース信号や、他のフレームレート変換にも適用することができる。
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム格納媒体からインストールされる。
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを格納するプログラム格納媒体は、図1に示されるように、磁気ディスク31(フレキシブルディスクを含む)、光ディスク32(CD-ROM(Compact Disc-Read Only Memory)、DVD(Digital Versatile Disc)を含む)、光磁気ディスク33(MD(Mini-Disc)(商標)を含む)、もしくは半導体メモリ34などよりなるリムーバブル記録媒体(パッケージメディア)、または、プログラムが一時的もしくは永続的に格納されるROM12などにより構成される。
なお、本明細書において、フローチャートに示されるステップは、記載された順序に従って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
1 信号処理装置,51 フレームメモリ,52 ベクトル検出部,53 検出ベクトルメモリ,54 ベクトル割付部,55 割付ベクトルメモリ,56 割付フラグメモリ,57 割付補償部,58 画像補間部,61,61A,61B 評価値演算部,101 初期ベクトル選択部,103 反復勾配法演算部,104 ベクトル評価部,105 シフト初期ベクトル割付部,106 評価値メモリ,107 シフト初期ベクトルメモリ,404 有効画素判定部,405 勾配法演算部,412 評価判定部,421 画素差分算出部,422 画素判定部,423 カウンタ,424 勾配法継続判定部,425 演算実行判定部,461 画素差分算出部,462 演算判定部,463−1 統合型勾配演算部,463−2 独立型勾配演算部,464 ベクトル算出部,521 初期ベクトル選択部,522 反復勾配法演算部,523 ベクトル評価部,524 初期候補ベクトルメモリ,531 有効画素判定部,541 評価判定部,551 勾配法継続判定部,561 ベクトル評価部,571 0ベクトルフラグ領域,581 評価判定部