以下に本発明の実施の形態を説明するが、本発明の構成要件と、発明の詳細な説明に記載の実施の形態との対応関係を例示すると、次のようになる。この記載は、本発明をサポートする実施の形態が、発明の詳細な説明に記載されていることを確認するためのものである。従って、発明の詳細な説明中には記載されているが、本発明の構成要件に対応する実施の形態として、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その構成要件に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その構成要件以外には対応しないものであることを意味するものでもない。
本発明の一側面の画像処理装置は、ラスタ順、または逆ラスタ順に第1のフレーム(例えば、時刻tのフレーム)に含まれるそれぞれの領域(ブロック、画素)に着目し、勾配法により動きベクトルを検出する検出手段(例えば、図1のベクトル検出部12)と、生成対象となる第2のフレーム(例えば、内挿フレーム)に含まれるそれぞれの領域に、前記検出手段が領域に着目する順序と逆の順序で着目し、着目した領域に、周辺の領域に割り付けられている動きベクトルのうちの1つの動きベクトルを割り付ける割付手段(例えば、図1の割付補償部17)とを備える。
前記第1のフレームの第1の演算対象範囲と、前記第2のフレームにおいて着目した前記領域の周辺の領域に割り付けられている動きベクトルによって前記第1の演算対象範囲と対応付けられる前記第1のフレームから時間的に後の第3のフレームの第2の演算対象範囲との相関(例えば、式(1)で表される差分絶対値和)を求める演算手段(例えば、図36の評価値演算部142)をさらに設けることができる。この場合、前記割付手段には、前記演算手段により求められた相関に基づいて、周辺の領域に割り付けられている動きベクトルのうちの1つの動きベクトルを選択させることができる。
前記第1のフレームの所定の位置を基準として設定された第1の演算対象範囲内の各画素の画素値から前記第1の演算対象範囲内の画素の画素値の平均値を引いて得られる前記第1の演算対象範囲内の各画素の画素値と、前記第1のフレームから時間的に後の第3のフレームの、前記所定の位置に対応する位置から前記第2のフレームにおいて着目した前記領域の周辺の領域に割り付けられている動きベクトルに従って求められる第2の演算対象範囲内の各画素の画素値から前記第2の演算対象範囲内の画素の画素値の平均値を引いて得られる前記第2の演算対象範囲内の各画素の画素値とから、前記第1と第2の演算対象範囲の相関(例えば、式(13)で表される偏差DFD)を求める演算手段(例えば、図36の評価値演算部142)をさらに設けることができる。この場合、前記割付手段には、前記演算手段により求められた相関に基づいて、周辺の領域に割り付けられている動きベクトルのうちの1つの動きベクトルを選択させることができる。
本発明の一側面の情報処理装置またはプログラムは、ラスタ順、または逆ラスタ順に第1のフレーム(例えば、時刻tのフレーム)に含まれるそれぞれの領域(ブロック、画素)に着目し、勾配法により動きベクトルを検出するステップ(例えば、図5のステップS2)と、生成対象となる第2のフレーム(例えば、内挿フレーム)に含まれるそれぞれの領域に、動きベクトルの検出のときに領域に着目する順序と逆の順序で着目し、着目した領域に、周辺の領域に割り付けられている動きベクトルのうちの1つの動きベクトルを割り付けるステップ(例えば、図5のステップS4)とを含む。
以下、本発明の実施の形態について図を参照して説明する。
図1は、本発明の一実施形態に係る信号処理装置1の構成例を示すブロック図である。図1に示される各構成は、ハードウエア的に実現されるようにしてもよいし、ソフトウエア的に実現されるようにしてもよい。
信号処理装置1においては、例えば、フレーム周波数24Hzのプログレッシブ画像信号(24P信号)が入力され、入力された信号が、フレーム周波数60Hzのプログレッシブ画像信号(60P信号)に変換されて出力される。信号処理装置1に入力された24P信号の入力画像は、フレームメモリ11、ベクトル検出部12、ベクトル割付部14、割付補償部17、および画像補間部18に供給される。
フレームメモリ11は、時刻t+1のフレーム(画像)の1つ前の時刻のフレームである時刻tのフレームを記憶する。フレームメモリ11に記憶された時刻tのフレームは、ベクトル検出部12、ベクトル割付部14、割付補償部17、および画像補間部18に出力される。以下、時刻tのフレームをフレームtといい、時刻t+1のフレームをフレームt+1という。
ベクトル検出部12は、フレームメモリ11に記憶されているフレームtの着目ブロックと、フレームt+1の対象ブロックの間で動きベクトルを検出し、検出した動きベクトルを検出ベクトルメモリ13に記憶させる。この2フレーム間の動きベクトルの検出には勾配法やブロックマッチング法などが用いられる。ベクトル検出部12の構成の詳細については後述する。
検出ベクトルメモリ13は、フレームtを対象としてベクトル検出部12により検出された動きベクトルを記憶する。
ベクトル割付部14は、24P信号のフレームt上において求められた動きベクトルを、割付ベクトルメモリ15に記憶されている、補間する60P信号のフレーム上の画素に割り付ける。以下、適宜、60P信号のフレームを内挿フレームともいう。
また、ベクトル割付部14は、動きベクトルを内挿フレームに割り付けたとき、割付フラグメモリ16に記憶されている、動きベクトルを割り付けた画素の割付フラグを1(True)に書き換える。割付フラグは、それぞれの画素の動きベクトルの割り付けの有無を示すものである。例えば、True(1)の割付フラグは、対応する画素に動きベクトルが割り付けられていることを示し、False(0)の割付フラグは、対応する画素に動きベクトルが割り付けられていないことを示す。ベクトル割付部14の構成の詳細については後述する。
割付ベクトルメモリ15は、ベクトル割付部14により内挿フレームの画素に割り付けられた動きベクトル(以下、適宜、割付ベクトルという)を記憶する。
割付フラグメモリ16は、内挿フレームの画素毎に割付フラグを記憶する。
割付補償部17は、割付フラグメモリ16に記憶されている割付フラグを参照し、ベクトル割付部14により動きベクトルが割り付けられなかった画素が内挿フレームにある場合、その画素に、周辺画素の動きベクトルを割り付ける(補う)。動きベクトルを新たに割り付けたとき、割付補償部17は、割付フラグメモリ16に記憶されている、そ動きベクトルを割り付けた画素の割付フラグを1(True)に書き換える。割付補償部17の構成の詳細については後述する。
画像補間部18は、割付ベクトルメモリ15に記憶されている、内挿フレームのそれぞれの画素に割り付けられた動きベクトルと、フレームt,t+1の画素値(例えば、輝度値)を用いて、内挿フレームの画素値を補間生成する。画像補間部18は、生成した内挿フレームを出力し、その次に、必要に応じてフレームt+1を出力することにより、60P信号を後段に出力する。
図2は、フレームの内挿の例を示す図である。
図2においては、点線が、信号処理装置1に入力される、時刻t,t+1,t+2の24P信号のフレームを表し、実線が、信号処理装置1において生成されて出力される、時刻t,t+0.4,t+0.8,t+1.2,t+1.6,t+2の60P信号のフレームを表す。
一般に、24P信号を60P信号に変換するためには、60/24(5/2)倍のフレーム、すなわち、入力された2つのフレームから5つのフレームを生成する必要がある。このとき、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つの内挿フレームが生成され、時刻t,t+0.4,t+0.8,t+1.2,およびt+1.6の5つのフレームからなる60P信号が出力される。
これにより、24P信号から60P信号へのフレーム周波数変換が実現される。
なお、原理的には、24P信号の時刻tと時刻t+1の2つのフレームから、時刻t,t+0.4,t+0.8,t+1.2、およびt+1.6の5つの60P信号のフレームが新しく生成されるが、実際には、図2の例の場合、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信号のフレームが生成される。
図3は、信号処理装置1において行われる一連の処理を説明する図である。
図3において、太線矢印は状態の遷移を表し、矢印Tはそれぞれの状態における時間の経過方向を表す。また、状態S1乃至S5は、信号処理装置1を構成する各部への入力時、各部からの出力時における、24P信号のフレームt、フレームt+1、または、フレームtとフレームt+1の間に生成される60P信号の内挿フレームFの状態を表している。すなわち、実際には、例えば、状態S2に示されるような動きベクトルが検出されたフレームは入力されず、フレームと、検出された動きベクトルは別々に入力される。
状態S1は、ベクトル検出部12に入力される、24P信号のフレームt,t+1の状態を表す。フレームt上の黒点は画素を表している。
ベクトル検出部12は、フレームt上の画素が、次の時刻のフレームt+1において、どの位置に移動するかを検出し、検出した動きを、各画素に対応する動きベクトルとして出力する。1つの画素に対応するものとして複数の動きベクトルが検出された場合、ベクトル検出部12は、それぞれの動きベクトルについて評価値を求め、求めた評価値に基づいて1つの動きベクトルを選択する。
状態S2は、ベクトル割付部14に入力される、フレームt,t+1の状態を表す。状態S2において、フレームtの各画素から延びている矢印は、ベクトル検出部12により検出された動きベクトルを表している。
ベクトル割付部14は、フレームtの各画素において検出された動きベクトルを、次のフレームt+1まで延長させ、予め設定されている時間位相(例えば、図2のt+0.4)にある内挿フレームF上のどの位置を通過するかを求める。これは、フレームtとフレームt+1の間において、ある画素が一定の動きをとるものとすると、動きベクトルが内挿フレームFを通過した点が、その、ある画素に対応する、内挿フレームFの画素位置となるためである。
例えば、ベクトル割付部14は、この通過する動きベクトルを、内挿フレームF上の通過点の近傍4画素に割り付ける。このとき、内挿フレームの画素によっては、動きベクトルが存在しない場合、あるいは、複数の動きベクトルが割付候補となる場合があり、後者のような場合には、ベクトル割付部14は、それぞれの動きベクトルについての評価値を求め、求めた評価値に基づいて、割り付ける1つの動きベクトルを選択する。
状態S3は、割付補償部17に入力される、フレームt,t+1、および、内挿フレームFの状態を表す。状態S3の内挿フレームFにおいては、動きベクトルが割り付けられている画素と、割り付けられていない画素が存在する。
割付補償部17は、動きベクトルが割り付けられていない画素に対して、その画素の周辺画素に割り付けられている動きベクトルを用いて補う。これは、ある着目画素の近傍領域が、その着目画素と同じ動きをとるという仮定が成り立つならば、着目画素の動きベクトルは、周辺画素の動きベクトルと似たものになると考えられるからである。
このように、周辺画素の動きベクトルを割り付けることにより、動きベクトルが割り付けられなかった画素にもある程度正確な動きベクトルが与えられ、内挿フレームFのすべての画素に動きベクトルが割り付けられる。複数の動きベクトルが着目画素の動きベクトルの候補として存在する場合、割付補償部17は、それぞれの動きベクトルについての評価値を求め、求めた評価値に基づいて、割り付ける1つの動きベクトルを選択する。
状態S4は、画像補間部18に入力される、フレームt,t+1、および、内挿フレームFの状態を表す。状態S4の内挿フレームFにおいては、すべての画素に動きベクトルが割り付けられている。
このように、すべての画素に動きベクトルが割り付けられていることにより、画像補間部18は、内挿フレームF上の画素と、フレームtおよびフレームt+1の画素の位置関係を決定することができる。
画像補間部18は、内挿フレームF上に割り付けられた動きベクトルと、フレームt,t+1の画素値を用いて、内挿フレームFのそれぞれの画素の画素値を補間生成し、フレームt、生成した内挿フレームF、およびフレームt+1をそれぞれ所定のタイミングで出力する。これにより、60P信号が信号処理装置1から出力される。
ここで、図4を参照して、動きベクトルの選択の際に用いられる評価値について説明する。
上述したように、信号処理装置1の各部(ベクトル検出部12、ベクトル割付部14、および割付補償部17)においては、後段の処理で用いられる動きベクトルを選択するとき、その指標となる動きベクトルの評価値として、例えば、2つのフレームの着目するベクトル量分ずらしたブロック間の相関値を表す差分絶対値和(DFD(Displaced Frame Difference))が用いられる。
図4の例においては、フレームt上の画素位置pを中心としたm×nのブロックと、フレームt+1上の画素位置pから、着目する動きベクトルv(候補となっている動きベクトル)のベクトル量分ずらした画素位置p+vを中心としたm×nのブロックが示されており、これらのブロック間において求められる差分絶対値和DFDt(p)は次式(1)で表される。
ここで、Ft(p)は、時刻tにおける画素位置pの輝度値を表し、m×nは、差分絶対値和を求めるためのDFD演算範囲(ブロック)を表す。差分絶対値和は2つのフレームにおけるブロック間の相関値を表しているため、通常、この差分絶対値和が小さいほどフレーム間のブロックの波形が一致し、動きベクトルvの信頼度が高いといえる。したがって、信号処理装置1の各部においては、このように信頼度が高い動きベクトルvが、後段の処理に最適な動きベクトルとして選択される。
次に、図5のフローチャートを参照して、信号処理装置1のフレーム周波数変換処理について説明する。
ステップS1において、ベクトル検出部12は、フレームt+1と、フレームメモリ11に記憶されているフレームtの画素値を取得する。フレームt+1と、フレームメモリ11に記憶されているフレームtの画素値は、ベクトル割付部14、割付補償部17、および画像補間部18にも供給される。
ステップS2において、ベクトル検出部12は動きベクトル検出処理を行う。この処理により、フレームtの着目ブロックと、フレームt+1の対象ブロックの間で動きベクトルが検出され、検出された動きベクトルが検出ベクトルメモリ13に記憶される。
ステップS3において、ベクトル割付部14はベクトル割付処理を行う。この処理により、フレームt上において求められた動きベクトルが内挿フレームの画素に割り付けられる。割り付けられた動きベクトルは、画素と対応付けて割付ベクトルメモリ15に記憶される。
ステップS4において、割付補償部17は割付補償処理を行う。この処理により、ベクトル割付部14により動きベクトルが割り付けられなかった画素に対して、その画素の周辺画素の動きベクトルが割り付けられる。
ステップS5において、画像補間部18は画像補間処理を行う。この処理により、内挿フレームに割り付けられた動きベクトルと、フレームt,t+1の画素値を用いて、内挿フレームの画素値が補間生成される。
ステップS2乃至S5において行われる動きベクトル検出処理、ベクトル割付処理、割付補償処理、画像補間処理については後に詳述する。
ステップS6において、画像補間部18は、生成された内挿フレームを出力し、その次に、必要に応じてフレームt+1を出力することにより、60P信号の画像を後段に出力する。
ステップS7において、ベクトル検出部12は、すべてのフレームの処理が終了したか否かを判定し、すべてのフレームの処理が終了していないと判定した場合、ステップS1に戻り、それ以降の処理を繰り返す。ベクトル検出部12は、ステップS7において、すべてのフレームの処理が終了したと判定した場合、処理を終了させる。
以上のように、信号処理装置1においては、基本的に、動きベクトルを検出する処理、検出した動きベクトルを内挿フレーム上の画素に割り付ける処理、動きベクトルが割り付けられていない内挿フレームの画素に動きベクトルを補償する処理、および、割り付けられた動きベクトルと2つのフレームの画素値から内挿フレームを補間生成する処理の4つの処理が行われる。以下、それぞれの処理、および、それを実現する構成の詳細について順に説明する。
はじめに、動きベクトルの検出について説明する。
図6は、図1のベクトル検出部12の構成例を示すブロック図である。
上述したように、ベクトル検出部12においては、入力されるフレームtとフレームt+1を用いてフレームt上の各画素の動きベクトルが検出される。この動きベクトルを検出する処理は、例えば、複数の画素からなるブロック毎に実行される。
初期ベクトル選択部31は、検出ベクトルメモリ13に記憶されている、過去に求められた周辺のブロック(周辺領域)の動きベクトルや、シフト初期ベクトルメモリ37に記憶されているシフト初期ベクトルを初期ベクトルの候補(以下、適宜、初期候補ベクトルともいう)として選択する。
また、初期ベクトル選択部31は、それぞれの初期候補ベクトルの評価値DFDを求め、評価値DFDに基づいて選択した、最も信頼度が高い初期候補ベクトルを初期ベクトルV0として反復勾配法演算部33に出力する。
プリフィルタ32−1および32−2はローパスフィルタやガウシアンフィルタにより構成され、それぞれ、入力されるフレームt,t+1のノイズ成分を除去し、ノイズ成分を除去して得られたフレームt,t+1を反復勾配法演算部33に出力する。
反復勾配法演算部33は、初期ベクトル選択部31から供給されてきた初期ベクトルV0と、プリフィルタ32−1,32−2から供給されてきたフレームt,t+1を用いて、所定のブロック毎に、動きベクトルVnを勾配法により算出し、初期ベクトルV0と、算出した動きベクトルVnをベクトル評価部34に出力する。
ベクトル評価部34は、反復勾配法演算部33により求められた動きベクトルVn-1(または初期ベクトルV0)と動きベクトルVnの評価値DFDを求め、求めた評価値DFDから、信頼度が高いと考えられる動きベクトルVnが求められるまで、勾配法の演算を反復勾配法演算部33に繰り返し実行させる。
また、ベクトル評価部34は、信頼度が高いと考えられるベクトルが反復勾配法演算部33により求められたとき、それを動きベクトルVとして検出ベクトルメモリ13に記憶させるとともに、その動きベクトルVと、動きベクトルVの評価値DFDをシフト初期ベクトル割付部35に出力する。
シフト初期ベクトル割付部35は、動きベクトルVと評価値DFDがベクトル評価部34から供給されてきたとき、次のフレーム上の着目ブロックを通過する動きベクトルを、その着目ブロックにシフトさせたシフト初期ベクトルとして設定し、シフト初期ベクトルメモリ37に記憶させる。例えば、シフト初期ベクトル割付部35は、動きベクトルVの終点のブロックと同じ位置の次のフレーム上の着目ブロックを始点とした、動きベクトルVと同じ大きさで同じ向きの動きベクトルをシフト初期ベクトルとして設定する。
評価値メモリ36は、シフト初期ベクトルの候補の評価値DFDをブロック毎に記憶する。
シフト初期ベクトルメモリ37は、最も評価値DFDが小さい動きベクトルを、シフト初期ベクトルとしてそれぞれのブロックに対応させて記憶する。
ここで、ベクトル検出部12を構成する初期ベクトル選択部31、反復勾配法演算部33、およびシフト初期ベクトル割付部35の詳細について説明する。
図7は、初期ベクトル選択部31の構成例を示すブロック図である。
候補ベクトル位置演算部51は、フレームt上の処理の対象となる着目ブロックを選択し、着目ブロックの周辺領域から、着目ブロックの初期候補ベクトルを取得する候補ブロックの位置、初期候補ベクトルとなる動きベクトルの種類、および優先順位を求め、求めた優先順位の順に、候補ブロックの位置情報と初期候補ベクトルの種類情報を検出ベクトル取得部52とシフト初期ベクトル取得部53に出力する。初期候補ベクトルの数、候補ブロックの位置、初期候補ベクトルの種類、および優先順位はあらかじめ設定されている。
また、候補ベクトル位置演算部51は、候補ブロックの位置情報をオフセット位置演算部54にも供給する。
例えば、候補ベクトル位置演算部51は、あらかじめ設定された初期候補ベクトルの種類が過去ベクトルまたは現在ベクトル(ベクトルの種類については後述する)である場合、候補ブロックの位置情報と初期候補ベクトルの種類情報を検出ベクトル取得部52に出力し、初期候補ベクトルの種類がシフト初期ベクトルである場合、候補ブロックの位置情報と初期候補ベクトルの種類情報をシフト初期ベクトル取得部53に出力する。また、そのどちらでもなかった場合(例えば、初期候補ベクトルの種類が0ベクトルである場合)、候補ベクトル位置演算部51は、0ベクトルとともに、候補ブロックの位置情報をオフセット位置演算部54に出力する。
図8は、初期ベクトルの候補ブロックとなる周辺領域の例を示す図である。
図8において、矢印Tは、図中、左手前の時刻t-1の過去フレームt-1から、右奥の時刻tの現在フレームtへの時間の経過方向を示している。図8の例においては、初期ベクトルの候補となり得る周辺領域は、着目するブロックBtを中心とした7×7ブロックにより構成される。各ブロックは例えば4×4画素により構成される。
動きベクトル検出処理は、例えば、フレームの左上のブロックを開始位置として、処理対象のブロックをラスタ順に切り替えて行われる。したがって、初期ベクトル選択部31においては、現在フレームtの着目ブロックBtの動きベクトル検出処理の際には、その直前のブロックまでの動きベクトル検出の結果を、初期ベクトルの候補とすることが可能となる。
すなわち、着目ブロックBtの周辺領域は、着目ブロックBtよりも前に処理されるブロックCVB、および着目ブロックBtよりも後に処理されるブロックPVBにより構成される。したがって、着目ブロックBtの初期ベクトルを求める場合、初期候補ベクトルは、ブロックCVBの現在フレームt上で検出された動きベクトル(現在ベクトルCV)、および、ブロックPVBの過去フレームt-1上で検出された動きベクトル(過去ベクトルPV)の中から選択することができる。なお、このとき、同じ周辺領域のブロックに割り付けられるシフト初期ベクトルSVも初期候補ベクトルの候補となりうる。
図9は、候補ベクトル位置演算部51により設定される初期ベクトルの候補ブロックの例を示す図である。
図9の例においては、着目ブロックBtの周辺領域のうち、「英字/数字」のシンボルがそれぞれ示されている8個のブロックが、初期候補ベクトルが取得される候補ブロックとしてあらかじめ設定されている。これらのブロックに示されている斜線の前後のシンボルは、「初期候補ベクトルの種類」と「優先順位」をそれぞれ表す。なお、初期候補ベクトルの種類のうち、Pは過去フレームt-1で検出された過去ベクトルPVを表し、Cは現在フレームtで検出された現在ベクトルを表す。また、Sはシフト初期ベクトルSVを表す。
着目ブロックBtの「S/1」は、着目ブロックBtに割り付けられたシフト初期ベクトルSVが、初期候補ベクトルとして1番目に用いられることを表す。また、着目ブロックBtの左隣のブロックの「C/2」は、現在フレームtにおいて検出されたそのブロックの現在ベクトルCVが、初期候補ベクトルとして2番目に用いられることを表す。他のシンボルについても同様に、その英字が動きベクトルの種類を表し、数字が優先順位を表す。
このように、信号処理装置1においては、候補ブロックの数、候補ブロックの位置、初期候補ベクトルの種類、および優先順位があらかじめ設定されており、その設定に基づいて初期候補ベクトルが取得され、初期候補ベクトルの情報が各部に出力される。
図7の説明に戻り、検出ベクトル取得部52は、候補ベクトル位置演算部51から供給されてきた候補ブロックの位置情報と初期候補ベクトルの種類情報に応じた動きベクトルを検出ベクトルメモリ13より取得し、取得した動きベクトルを、初期候補ベクトルとしてオフセット位置演算部54に出力する。
シフト初期ベクトル取得部53は、候補ベクトル位置演算部51から供給されてきた候補ブロックの位置情報と初期候補ベクトルの種類情報に応じて、候補ブロックの位置に対応したシフト初期ベクトルをシフト初期ベクトルメモリ37から取得し、取得したシフト初期ベクトルを初期候補ベクトルとしてオフセット位置演算部54に出力する。
また、シフト初期ベクトル取得部53は、候補ベクトル位置演算部51により指示されたブロックにシフト初期ベクトルが割り付けられていない場合、0ベクトルをオフセット位置演算部54に出力する。
オフセット位置演算部54は、検出ベクトル取得部52またはシフト初期ベクトル取得部53から初期候補ベクトル(あるいは候補ベクトル位置演算部51からの0ベクトル)が供給されてきたとき、候補ベクトル位置演算部51から供給されてきた候補ブロックの位置情報に基づいて、それぞれの初期候補ベクトルに対して、フレームtの着目ブロックをフレームt+1にオフセット(動き補償)させたオフセット先のブロック位置を求める。
また、オフセット位置演算部54は、初期候補ベクトルとともに、候補ブロックの位置とオフセット先のブロック位置の情報を評価値演算部55に出力する。
評価値演算部55は、初期候補ベクトルとともに、候補ブロックの位置とオフセット先のブロック位置の情報がオフセット位置演算部54から供給されてきたとき、供給されてきた初期候補ベクトルの評価値DFDを求め、求めた評価値DFDを、初期候補ベクトルとともに評価値比較部56に出力する。
評価値比較部56は、評価値演算部55から供給されてきた評価値DFDと、最適候補格納用レジスタ57に格納されている最適候補ベクトルの評価値DFDを比較し、評価値演算部55から供給されてきた初期候補ベクトルの評価値DFDが、最適候補ベクトルの評価値DFDよりも小さい、すなわち、初期候補ベクトルの方が最適候補ベクトルよりも信頼度が高いと判定した場合、最適候補格納用レジスタ57に記憶されている最適候補ベクトルとその評価値DFDを、信頼度が高いと判定した初期候補ベクトルとその評価値DFDに置き換える。また、評価値比較部56は、すべての候補ベクトルの中から信頼度が最も高いと判定した最適候補ベクトルを、初期ベクトルV0として、最適候補格納用レジスタ57から反復勾配法演算部33に出力させる。
次に、図6の反復勾配法演算部33について説明する。
図10は、反復勾配法演算部33の構成例を示すブロック図である。
モード選択部71は、有効画素判断部73による制御に従って、勾配法演算のモードを例えばブロック毎に選択し、初期ベクトル選択部31から供給されてきた初期ベクトルV0をセレクタ72とベクトル評価部34に出力する。勾配法演算のモードには、動きベクトルの検出対象がブロックであるブロック単位処理モードと、動きベクトルの検出対象が画素である画素単位処理モードがある。例えば、初期値としてブロック単位処理モードが選択される。
セレクタ72は、ベクトル評価部34による制御に従って、モード選択部71から供給されてきた初期ベクトルV0と、勾配法演算部74から供給されてきた動きベクトルVnのうちのいずれかを、勾配法演算の初期値として用いる動きベクトル(以下、オフセットベクトルという)として有効画素判断部73と勾配法演算部74に出力する。
有効画素判断部73は、プリフィルタ32−1,32−2から供給されてきたフレームt,t+1のブロックを用いて、セレクタ72から供給されてきたオフセットベクトルをオフセットとして計算した位置の演算ブロックに含まれる勾配法の演算に有効な画素の数がしきい値より多いか否かを判定し、その結果に応じて、勾配方演算のモードをモード選択部71に選択させる。
例えば、有効画素判断部73は、処理対象としている演算ブロックに含まれる、勾配法の演算に有効な画素の数がしきい値より多いと判定した場合、勾配法演算部74に勾配法演算処理を実行させる。また、有効画素が少ないと判定した場合、有効画素判断部73は、いま着目しているブロックの処理モードをブロック単位処理モードから画素単位処理モードに変更させたり、勾配法演算部74による処理を中止させたりする。
勾配法演算部74は、セレクタ72から供給されてきたオフセットベクトルをオフセットとして計算した位置のブロックを処理対象として、選択されている処理モードに応じた勾配法演算を行い、求めた動きベクトルVnをベクトル評価部34と遅延部75に出力する。
ここで、勾配法演算部74により行われる勾配法演算について説明する。
水平軸、垂直軸、時間軸を用いた座標(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展開近似を用いて次式(2)で表される。
動画像中のある着目画素が1フレーム後に水平vx,垂直vyだけ移動した場合(以降、(vx,vy)と表す)、その画素の輝度値は次式(3)で表される。
式(2)を式(3)に代入すると次式(4)が得られる。
式(4)はvx,vyの2変数の式であるので、1つの着目画素に対する単独の式では、その解を求めることができない。そこで、着目画素の周辺領域であるブロックを1つの処理単位として考え、ブロック(周辺領域)内の全画素が同じ動き(vx,vy)をすると仮定し、各画素について同様の式を立てる。これにより、周辺画素の個数の式が得られ、それらの式を連立させることによって、ブロック内の全ての画素の動き補償フレーム差分の自乗和が最小になるような(vx,vy)を求める。
画素(x,y,t)が1フレーム間に(vx,vy)だけ移動したとき、その動き補償フレーム間差分dは次式(5)で表される。
式(5)において、Δx=gx(x,y,t)であり、これは水平方向の勾配を表す。また、Δy=gy(x,y,t)であり、これは垂直方向の勾配を表し、Δt=gt(x,y,t)であり、これは時間方向の勾配を表す。これらを用いて、動き補償フレーム間差分の自乗和Eは式(6)で表される。
ここで、自乗和Eが最小となる(vx,vy)は、各変数における偏微分値が0になるとき、すなわち、δE/δvx=δE/δvy=0の条件が成立するときのものなので、式(6)から式(7)、(8)が得られる。
これらの式(7)、(8)から、求めたい動きである(vx,vy)は次式(9)により求めることができる。
図11を参照して具体的に説明する。
図11において、矢印Xは水平方向を示し、矢印Yは垂直方向を示す。また、矢印Tは、図中、右奥のフレームtから、左手前のフレームt+1への時間の経過方向を示す。なお、図11においては、各フレームとして、勾配法演算に用いられる、着目画素pの周辺領域である8×8画素の領域のみが示されている。
図11のフレーム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画素)のすべての画素について求め、それらの差分差を式(9)を用いて演算することにより求めることができる。
すなわち、勾配法とは、2フレーム間において、勾配Δx,Δy,およびΔtを求め、求められたΔx,Δy,およびΔtから差分自乗和を用いて、統計的に、動きベクトルV(vx,vy)を算出するものである。
このような勾配法を用いた動きベクトル検出方法においては、微小動きに対して精度の高い結果が得られるが、実際の動画像の中で動きを求める場合、この勾配法の演算は動き量が大きすぎるため実用的とはいえず、大きな動き量に対応するため、勾配法の演算を反復することが考えられる。これにより、各演算で求められる動き量が収束し、徐々に、正しい動きを求めることができる。
しかしながら、勾配法をただ反復するだけでは演算時間の面から実用的ではない。そこで、ベクトル検出部12においては、過去フレームと現在フレームの周辺画素の動きに基づいて求められる初期ベクトルを初期値として用いることで、勾配法の繰り返し回数を軽減している。すなわち、動きの起点となる着目画素から、初期ベクトルが指す先へオフセットを予め加えることで大まかな動きを算出し、オフセットが加えられたその位置から勾配法を用いた演算を行うようにすれば、演算時間を増大させることなく、精度のよい動きベクトルを検出することができる。
図12は、初期ベクトルを用いて行われる反復勾配法について示す図である。
図12においては、矢印Tは、図中、左手前のフレームtから、右奥のフレームt+1への時間の経過を示している。なお、画素p,q0,q1,q2,q3を中心としたブロックは、それぞれの画素の勾配法演算に用いられる周辺領域(ブロック)を表す。
図12の例の場合、フレームtにおける着目画素pに対して、フレームt+1においては、着目画素pの同位相に位置する画素q0ではなく、初期ベクトルv0をオフセットとして計算した位置(画素)q1を開始点として1回目の勾配法演算が行われ、その結果、動きベクトルv1が得られる。
次に、画素q0からv0+v1をオフセットとして計算した位置(画素)q2を開始点として2回目の勾配法演算が行われ、その結果、動きベクトルv2が得られる。これにより、動きベクトルVは最終的に下式(10)として求められる。
以上のように、初期ベクトルを用いて勾配法の演算を行うことにより、演算時間を短縮させつつ、精度の高い動きベクトルを求めることが可能となる。
図10の説明に戻り、遅延部75は、勾配法演算部74から供給されてきた動きベクトルVnを有効画素判断部73と勾配法演算部74の次の処理のサイクルまで保持し、セレクタ72の制御に応じて、保持する動きベクトルVnを有効画素判断部73に出力する。
ここで、図10の有効画素判断部73と勾配法演算部74の詳細について順に説明する。
図13は、有効画素判断部73の構成例を示すブロック図である。
時間画素差分算出部81は、ブロック単位の演算ブロックにおいて画素を選択し、セレクタ72から供給されてきたオフセットベクトルと、プリフィルタ32−1,32−2から供給されてきたフレームt,t+1を用いて、選択した画素の時間方向の画素差分Δtを算出し、算出された時間方向の画素差分Δtを画素差分値判断部82に出力する。画素差分Δtは、例えば、フレームtとフレームt+1間の対応する画素の輝度値の差として表される。
画素差分値判断部82は、時間画素差分算出部81により算出された時間方向の画素差分Δtが所定のしきい値(以下、画素差分値という)よりも小さいか否かを判定し、画素差分値より小さいと判定した場合、有効画素数カウンタ83においてカウントされる有効画素の数を1つインクリメントさせる。
有効画素数カウンタ83は、画素差分値判断部82により有効であると判定された画素の数を演算ブロック毎にカウントする。
勾配法継続判断部84は、演算ブロックに含まれる勾配法の演算に有効な画素の数がしきい値より多いか否かを判定し、しきい値より多いと判定した場合、勾配法演算を実行することを表すフラグ(flg=1)を勾配法演算部74に出力する。
また、勾配法継続判断部84は、演算ブロックに含まれる勾配法の演算に有効な画素の数がしきい値より少ないと判定した場合、モード選択部71に他の処理モードを選択させたり、勾配法演算を打ち切ることを表すフラグ(flg=0)を勾配法演算部74に出力する。
ここで、勾配法の演算に有効な画素について説明する。
1つのブロックに含まれる画素が同じオブジェクトを表示するものである場合、それぞれの画素の動きはだいたい同じ動きをしていることが多いと考えられることから、動きベクトルの検出は、例えば、図14に示されるようなブロック単位で行われる。
図14において、矢印Xは水平方向を示し、矢印Yは垂直方向を示す。また、矢印Tは、図中、右奥のフレームtから、左手前のフレームt+1への時間の経過方向を示す。
図14の例においては、各フレームの検出対象ブロックK(演算ブロック)として、8×8画素のブロックが示されている。この検出対象ブロックKを用いた勾配法演算により求められる動きベクトルは、検出対象ブロックKを構成するすべての画素に対応する動きベクトルとされる。
ところで、勾配法の演算に用いられる画素を演算ブロック単位に扱う処理においては、図15に示されるように、検出対象ブロックの中に異なる動きを持つオブジェクトの画素が混在する場合に問題となる。
図15の検出対象ブロックKにおいては、左上方の画素(太線丸)は矢印Aに示されるような斜め左上への動きを有しており、右下方の画素(細線丸)は矢印Bに示されるような右横への動きを有している。
したがって、図15の検出対象ブロックKにおいては、1つのブロック内の画素が同じ動きをとるという仮定が崩れてしまい、動きの異なる画素を含んだままの演算ブロックを用いて勾配法の演算を行った場合、動きベクトルの検出精度が著しく低下してしまう。すなわち、これは、異なる動きを持つオブジェクト同士の境界に発生する、オブジェクトの消滅領域(カバードバックグラウンド領域)および発生領域(アンカバードバックグラウンド領域)に関する検出精度低下問題である。
消滅領域は、前景領域に対して、前景のオブジェクトの進行方向の前端部に対応する位置の混合領域であり、時間の経過に対応して背景成分が前景に覆い隠される領域をいう。また、発生領域は、前景領域に対して、前景のオブジェクトの進行方向の後端部に対応する位置の混合領域であり、時間の経過に対応して背景成分が現れる領域をいう。
このように、例えば、オブジェクトの消滅、発生、または変形などにより、異なる動きを有するオブジェクトの画素が1つの検出ブロック内に混在する場合、フレームtとフレームt+1の対応する画素間で輝度値が大きく変化することが多いことなどから動きの乱れが生じてしまう。そこで、輝度変化が小さい画素だけが有効な画素とされることにより、動きベクトル検出の精度を高めることができる。
また、勾配法演算は統計的な解法である最小自乗法に基づいた演算であるから、少ない数の画素(有効な画素)を対象として演算を行った場合、演算結果の信頼度が低下し、検出される動きベクトルの精度が悪くなるおそれがある。
そこで、有効画素判断部73においては、勾配法演算に有効な画素の数が少ない場合、ブロック単位での演算は不安定であるとし、画素単位で演算を行う処理モードに切り替えられる。
図16は、画素単位での処理モードにおける演算ブロックの例を示す図である。
図16に示されるように、画素pに着目しており、その動きベクトルを求める場合に処理モードがブロック単位のモードから画素単位のモードに切り替えられたとき、点線で囲んで示される検出対象ブロックKではなく、演算ブロックとして、例えば、画素pを中心とした9×9画素の演算ブロックEが用いられる。
さらに、勾配法演算に有効な画素の数が極端に少なく、画素単位の処理によってもある程度信頼のできる動きベクトルを検出することができない場合には、動きベクトルの演算は打ち切られ、検出結果の動きベクトルとして、例えば、0ベクトル(静止状態)が出力されるように勾配法演算部74が制御される。
図17は、図10の勾配法演算部74の構成例を示すブロック図である。
時間画素差分算出部91は、有効画素判断部73から供給されてきたフラグが1を示す場合、プリフィルタ32−1,32−2から供給されてきたフレームt,t+1を用いて、セレクタ72からのオフセットベクトルをオフセットとして計算した画素を中心とした演算ブロック内の画素を選択し、選択した画素の時間方向の画素差分Δtを算出する。時間画素差分算出部91は、算出した画素差分Δtをオフセットベクトルとともに画素差分値判断部92に出力する。
また、時間画素差分算出部91は、演算ブロック内の画素の処理が終了した場合、オフセットベクトルをベクトル算出部95に出力する。
一方、フラグが0を示す場合、時間画素差分算出部91は勾配法演算の処理を打ち切る。このとき、時間画素差分算出部91は、ベクトル算出部95から出力される動きベクトルVを0ベクトルに設定させる。
画素差分値判断部92は、時間画素差分算出部91により算出された時間方向の画素差分Δtが所定のしきい値(以下、画素差分値という)よりも小さいか否かを判定し、画素差分値より小さいと判定した場合、その画素を勾配法の演算対象とし、画素差分Δtとオフセットベクトルを水平垂直画素差分算出部93に出力する。
また、画素差分値判断部92は、画素差分Δtが画素差分値以上であると判定した場合、水平垂直画素差分算出部93および勾配積算部94に、その画素の処理を禁止させる。
水平垂直画素差分算出部93は、プリフィルタ32−1,32−2から供給されてきたフレームt,t+1を用いて、画素差分値判断部92から供給されてきたオフセットベクトルをオフセットとして計算した画素を中心とした演算ブロック内において、画素差分値判断部92により演算対象とされた画素の水平方向の画素差分Δxと垂直方向の画素差分Δyを算出する。水平垂直画素差分算出部93は、算出した画素差分Δx,Δyを、画素差分Δtとともに勾配積算部94に出力する。
勾配積算部94は、水平垂直画素差分算出部93から供給されてきた勾配(画素差分Δx,Δy,Δt)を積算し、積算した勾配の値をベクトル算出部95に出力する。
ベクトル算出部95は、時間画素差分算出部91からオフセットベクトルが供給されてきたとき、勾配積算部94により積算された勾配の値と、上式(9)の最小自乗和から動きベクトルvnを算出する。
また、ベクトル算出部95は、算出した動きベクトルvnに時間画素差分算出部91からのオフセットベクトルを加算して動きベクトルVnを求め、求めた動きベクトルVnをベクトル評価部34と遅延部75に出力する。
次に、図6のシフト初期ベクトル割付部35について説明する。
図18は、シフト初期ベクトル割付部35の構成例を示すブロック図である。
割付対象位置演算部101は、ベクトル評価部34から供給されてきた動きベクトルVが、次の時刻のフレーム上において通過するブロックの位置(現在のフレーム上において検出された動きベクトルVの終点のブロックと同じ位置にある次のフレーム上のブロックの位置)を求め、求めたブロックの位置を評価値メモリ36とシフト初期ベクトル置換部103に出力する。
評価値比較部102は、動きベクトルVと、動きベクトルVの評価値DFDがベクトル評価部34から供給されてきたとき、割付対象位置演算部101により求められたブロックの位置の評価値DFDを評価値メモリ36から読み出し、読み出した評価値DFDと、ベクトル評価部34から供給されてきた動きベクトルVの評価値DFDとを比較する。評価値比較部102は、ベクトル評価部34から供給されてきた動きベクトルVの評価値DFDの方が小さい(信頼度が高い)と判定した場合、シフト初期ベクトル置換部103を制御し、シフト初期ベクトルメモリ37に記憶されているシフト初期ベクトルを、信頼度が高いと判定した動きベクトルVで書き換えさせる。
また、評価値比較部102は、評価値置換部104を制御し、評価値メモリ36に記憶されている、割付対象位置演算部101により選択されたブロックの位置の評価値DFDを動きベクトルVの評価値DFDで書き換えさせる。
シフト初期ベクトル置換部103は、シフト初期ベクトルメモリ37に記憶されているシフト初期ベクトルを評価値比較部102による制御に従って書き換える。
評価値置換部104は、評価値メモリ36に記憶されている評価値DFDを評価値比較部102による制御に従って書き換える。
図19は、シフト初期ベクトルを1次元的に示す図である。
図19の例においては、上から順に、フレームt-1,t,t+1が示されている。それぞれのフレーム上の仕切りはブロックの境界を表す。
図19の例の場合、フレームt-1上のブロックBにおいて検出される動きベクトルが実線矢印で示される動きベクトルVとされ、この動きベクトルVによるフレームt上の動き補償先(オフセット先)がブロックBtとされている。また、フレームt-1上の動きベクトルVをフレームt上のブロックBtにシフトした動きベクトルが点線矢印で示されるシフト初期ベクトルSVとされている。
なお、シフトとは、フレームt-1上において検出された動きベクトルVと同じ大きさで同じ向きの動きベクトルの始点を、フレームt-1上の動きベクトルVの終点のブロックと同じ位置にあるフレームt上のブロックBtとすることをいう。
一般的に、連続するフレーム間では、動物体の動き量にある程度の連続性があり、その動き量の変化が小さいので、図19の例においては、ブロックB上の物体が等速か、それに近い動きをする場合、ブロックBtにおける動きベクトルも、動きベクトルVか、それに近い動きのベクトルになることが多い。
したがって、シフト初期ベクトルSVがフレームt上の着目ブロックBtの動きベクトルを検出する場合に勾配法演算に与える初期ベクトルの候補として用いられることにより、周辺ブロックの動きベクトルだけを初期ベクトルの候補として用いる場合よりもより適切な初期ベクトルを得ることができる。
ところで、このようにして初期ベクトルをそれぞれのブロックに割り付ける場合、フレームt-1上で検出される動きベクトルの分布によっては、フレームt上において、複数のシフト初期ベクトルが割り付けの対象のベクトルとして競合するブロックや、逆に、割り付けが起こらないブロックが発生する。
図20は、シフト初期ベクトルの割り付けの例を示す図である。
図20においては、フレームt-1上には、左からブロックB1乃至B5が示されており、フレームt上には、左から、ブロックB1乃至B5に対応する領域としてのブロックBt1乃至Bt5が示されている。
また、図20のブロックB1においては動きベクトルV1が検出され、ブロックB1のオフセット先A1は、フレームt上のブロックBt1,Bt2と重なりを持つ。また、ブロックB2においては動きベクトルV2が検出され、ブロックB2のオフセット先A2は、フレームt上のブロックBt1,Bt2と重なりを持つ。
同様に、ブロックB3おいては、動きベクトルV3が検出され、ブロックB3のオフセット先A3は、フレームt上のブロックBt4,Bt5と重なりを持つ。ブロックB4においては、動きベクトルV4が検出され、ブロックB4のオフセット先A4は、フレームt上のブロックBt4,Bt5と重なりを持つ。ブロックB5においては、動きベクトルV5が検出され、ブロックB5のオフセット先A5は、フレームt上のブロックBt5、および、図示せぬ隣接ブロックと重なりを持つ。
すなわち、図20の例においては、フレームt上のブロックBt1,Bt2には、動きベクトルV1とV2のどちらか一方がシフト初期ベクトルとして割り付けられる。また、フレームt上のブロックBt4には、動きベクトルV3とV4のどちらか一方がシフト初期ベクトルとして割り付けられ、フレームt上のブロックBt5には、動きベクトルV3,V4、およびV5のうちのいずれかがシフト初期ベクトルとして割り付けられる。
しかしながら、フレームt上のブロックBt3には、シフト初期ベクトルの候補となる動きベクトルが存在せず、シフト初期ベクトルは割り付けられない。
そこで、シフト初期ベクトル割付部35は、ブロックBt3のように、シフト初期ベクトルの割り付けが起こらないブロックに対して、0ベクトルをシフト初期ベクトルとして割り付ける。
一方、シフト初期ベクトル割付部35は、ブロックBt1,Bt2,Bt4,およびBt5のように、複数の動きクトルが競合するブロックについては、上述した評価値DFDに基づいて信頼度が高い動きベクトルを選択し、選択した動きベクトルをシフト初期ベクトルとしてそれぞれのブロックに割り付ける。
次に、以上のような構成を有するベクトル検出部12の各部の処理について説明する。
はじめに、図21のフローチャートを参照して、ベクトル検出部12により行われる動きベクトル検出処理の全体について説明する。この処理は、図5のステップS2において行われる処理である。
ステップS21において、初期ベクトル選択部31は、フレームt上のブロックの中から処理の対象となるブロックを着目ブロックとして選択する。例えば、左上のブロックからラスタ順に着目ブロックが選択される。
ステップS22において、初期ベクトル選択部31は初期ベクトル選択処理を実行する。初期ベクトル選択処理により選択された初期ベクトルは反復勾配法演算部33に出力される。初期ベクトル選択処理の詳細については、図22のフローチャートを参照して後述する。
ステップS23において、反復勾配法演算部33とベクトル評価部34は反復勾配法演算評価処理を実行する。すなわち、ここでは、反復勾配法演算部33により動きベクトルが求められ、その求められた動きベクトルが、ベクトル評価部34により評価される。得られた動きベクトルVは、検出ベクトルメモリ13に出力され、記憶される。反復勾配法演算評価処理の詳細については、図23のフローチャートを参照して後述する。
ステップS24において、シフト初期ベクトル割付部35はシフト初期ベクトル割付処理を実行する。シフト初期ベクトル割付処理により設定されたシフト初期ベクトルは、着目ブロックに対応させた形でシフト初期ベクトルメモリ37に割り付けられる。シフト初期ベクトル割付処理の詳細については、図27のフローチャートを参照して後述する。
ステップS25において、初期ベクトル選択部31は、フレームtのすべてのブロックの処理が終了したか否かを判定し、すべてのブロックの処理が終了していないと判定した場合、ステップS21に戻り、それ以降の処理を繰り返す。
初期ベクトル選択部31は、ステップS25において、すべてのブロックの処理が終了したと判定した場合、すなわち、フレームt上のすべてのブロックにおいて動きベクトルVが検出されたと判定した場合、動きベクトル検出処理を終了させる。その後、処理は図5のステップS2に戻り、それ以降の処理が行われる。
次に、図22のフローチャートを参照して、図21のステップS22において行われる初期ベクトル選択処理について説明する。
ステップS31において、候補ベクトル位置演算部51(図7)は、選択された着目ブロックの周辺領域から、予め設定されている着目ブロックの初期候補ベクトルを取得する候補ブロックの位置と、初期候補ベクトルの種類、優先順位を求める。
ステップS32において、候補ベクトル位置演算部51は、ステップS31で求めた優先順位の順に、候補ブロックの初期候補ベクトルの種類が過去ベクトルまたは現在ベクトルであるか否かを判定する。
ステップS32において、候補ベクトル位置演算部51は、候補ブロックの初期候補ベクトルの種類が過去ベクトルまたは現在ベクトルであると判定した場合、候補ブロックの位置情報と初期候補ベクトルの種類情報を検出ベクトル取得部52に出力し、ステップS33に進む。
ステップS33において、検出ベクトル取得部52は、候補ブロックの位置と初期候補ベクトルの種類に応じた動きベクトル(過去ベクトルPVまたは現在ベクトルCV)を検出ベクトルメモリ13から取得し、取得した動きベクトルをオフセット位置演算部54に出力する。
一方、ステップS32において、候補ベクトル位置演算部51は、候補ブロックの初期候補ベクトルの種類が過去ベクトルまたは現在ベクトルでないと判定した場合、ステップS34に進み、次に、候補ブロックの初期候補ベクトルの種類がシフト初期ベクトルであるか否かを判定する。
候補ベクトル位置演算部51は、ステップS34において、候補ブロックの初期候補ベクトルの種類がシフト初期ベクトルであると判定した場合、候補ブロックの位置情報と初期候補ベクトルの種類情報をシフト初期ベクトル取得部53に出力し、ステップS35に進む。
ステップS35において、シフト初期ベクトル取得部53は、候補ブロックの位置に対応したシフト初期ベクトルをシフト初期ベクトルメモリ37から取得し、取得したシフト初期ベクトルをオフセット位置演算部54に出力する。
一方、ステップS34において、候補ベクトル位置演算部51は、候補ブロックの初期候補ベクトルの種類がシフト初期ベクトルではないと判定した場合、すなわち、候補ブロックの初期候補ベクトルの種類が0ベクトルであると判定した場合、ステップS36に進む。
ステップS36において、候補ベクトル位置演算部51は、初期候補ベクトルに0ベクトルを設定し、0ベクトルとともに、候補ブロックの位置情報をオフセット位置演算部54に出力する。なお、ステップS33,S35においても、候補ブロックの位置情報がオフセット位置演算部54に出力されている。
ステップS37において、オフセット位置演算部54は、候補ベクトル位置演算部51から供給されてきた候補ブロックの位置情報に基づいて、それぞれの初期候補ベクトルに対して、フレームtの着目ブロックをフレームt+1にオフセットさせたオフセット先のブロック位置を求め、求めたオフセット先ブロック位置の情報を、初期候補ベクトル、候補ブロックの位置情報とともに評価値演算部55に出力する。
ステップS38において、評価値演算部55は、オフセット位置演算部54から供給されてきた情報と、フレームt,t+1から初期候補ベクトルの評価値DFDを求め、求めた評価値DFDを、初期候補ベクトルとともに評価値比較部56に出力する。
ステップS39において、評価値比較部56は、評価値演算部55により求められた評価値DFDが、最適候補格納用レジスタ57に格納されている最適候補ベクトルの評価値DFDより小さいか否かを判定する。
評価値比較部56は、ステップS39において、評価値演算部55により求められた評価値DFDの方が、最適候補格納用レジスタ57に格納されている最適候補ベクトルの評価値DFDより小さいと判定した場合、ステップS40に進み、最適候補格納用レジスタ57に記憶されている最適候補ベクトルとその評価値DFDを、信頼度が高いとされた初期候補ベクトルとその評価値DFDで書き換える。
ステップS39において、評価値演算部55により求められた評価値DFDが、最適候補格納用レジスタ57に格納されている最適候補ベクトルの評価値DFDより小さくないと判定された場合、ステップS40の処理はスキップされる。
ステップS41において、候補ベクトル位置演算部51は、すべての初期候補ベクトルの処理が終了したか否かを判定し、すべての初期候補ベクトルの処理が終了していないと判定した場合、ステップS32に戻り、それ以降の処理を繰り返す。
一方、ステップS41において、すべての初期候補ベクトルの処理が終了したと判定された場合、ステップS42に進み、評価値比較部56は、最適候補格納用レジスタ57に記憶されている、信頼度が最も高いとされた最適候補ベクトルを初期ベクトルV0として反復勾配法演算部33に出力させる。その後、図21のステップS22に戻り、それ以降の処理が行われる。
以上のように、複数の初期候補ベクトルの評価値DFDを求め、評価値DFDが最も小さい、すなわち、信頼度が最も高い初期候補ベクトルを初期ベクトルとして選択するようにしたので、後段の動きベクトル検出に最適な初期ベクトルを与えることができる。また、予め定められたブロックの動きベクトルを初期候補ベクトルとして用いるようにしたので、初期候補ベクトルの数が多くなってしまい、演算量が膨大になってしまうことが抑制される。
次に、図23のフローチャートを参照して、図21のステップS23において行われる反復勾配法演算評価処理について説明する。
ステップS51において、モード選択部71(図10)は、ブロック単位処理モードを選択する。これにより、フレームt上のブロックが検出対象ブロック(演算ブロック)とされ、検出対象ブロックの初期ベクトルV0がベクトル評価部34とセレクタ72に出力される。
ステップS52において、セレクタ72は、モード選択部71から供給されてきた初期ベクトルV0をオフセットベクトルとして有効画素判断部73(図13の時間画素差分算出部81)と勾配法演算部74(図17の時間画素差分算出部91)に出力する。
ステップS53において、有効画素判断部73はブロック単位の有効画素判定処理を実行する。この有効画素判定処理により、ブロック単位の演算ブロックに含まれる有効画素の数がカウントされる。有効画素判定処理の詳細については、図24のフローチャートを参照して後述する。
ステップS54において、有効画素判断部73(図13の勾配法継続判断部84)は、有効画素数がしきい値αより多いか否かを判定し、有効画素数がしきい値αより多いと判定した場合、勾配法演算をブロック単位で実行させるフラグ(flg=1)を勾配法演算部74に出力する。
ステップS55において、勾配法演算部74はブロック単位の勾配法演算処理を実行する。この勾配法演算処理により動きベクトルVnが求められ、求められた動きベクトルVnがベクトル評価部34と遅延部75に出力される。ブロック単位の勾配法演算処理の詳細については、図25のフローチャートを参照して後述する。
ステップS56において、ベクトル評価部34は、反復勾配法演算部33により求められた動きベクトルVnの評価値DFD(n)と、オフセットベクトルとして用いられた動きベクトルVn-1の評価値DFD(n-1)を求め、評価値DFD(n-1)よりも評価値DFD(n)の方が小さいか否かを判定する。例えば、1回目の処理においては、求められた動きベクトルV1の評価値DFD(1)と、オフセットベクトルとして用いられた初期ベクトルV0の評価値DFD(0)が比較され、2回目の処理においては、求められた動きベクトルV2の評価値DFD(2)と、オフセットベクトルとして用いられた動きベクトルV1の評価値DFD(1)が比較される。
ベクトル評価部34は、ステップS56において、評価値DFD(n-1)よりも評価値DFD(n)の方が小さいと判定した場合、すなわち、動きベクトルVn-1よりも動きベクトルVnの信頼度が高いと判定した場合、ステップS57に進み、算出された動きベクトルVnを、検出対象ブロックの動きベクトルVとして設定する。
ステップS58において、ベクトル評価部34は反復回数nを1つカウントし、ステップS59に進み、反復回数nが、設定された最大反復回数(例えば、2回)に達したか否かを判定する。
ベクトル評価部34は、ステップS59において、反復回数nが最大反復回数に達していないと判定した場合、ステップS52に戻り、それ以降の処理を繰り返させる。すなわち、遅延部75に保持されていた動きベクトルV1がオフセットベクトルとして選択され、それ以降の処理が行われる。
また、ステップS56において、ベクトル評価部34は、評価値DFD(n-1)よりも評価値DFD(n)の方が小さくないと判定した場合、すなわち、動きベクトルVn-1の方が、動きベクトルVnよりも信頼度が高いと判定した場合、ステップS60に進み、勾配法演算のオフセットとしたベクトルVn-1を、検出対象ブロックの動きベクトルVに設定する。
ステップS59において、反復回数nが最大反復回数に達したと判定された場合、または、ステップS60において、ベクトルVn-1が検出対象ブロックの動きベクトルVとして設定された場合、ステップS61に進み、ベクトル評価部34は、動きベクトルVが、動きベクトルを検出する範囲として予め設定されたサーチエリア内であるか否かを判定する。
ベクトル評価部34は、ステップS61において、動きベクトルVがサーチエリア内であると判定した場合、ステップS62に進み、動きベクトルVを、検出対象ブロックに対応させて検出ベクトルメモリ13に記憶させる。
また、ベクトル評価部34は、ステップS61において、動きベクトルVがサーチエリア内ではないと判定した場合、ステップS63に進み、0ベクトルを動きベクトルVとして設定し、それを、ステップS62において検出対象ブロックに対応させて検出ベクトルメモリ13に記憶させる。
一方、有効画素判断部73は、ステップS54において、有効画素数がしきい値α以下であると判定した場合、ステップS64に進み、モード選択部71を制御し、画素単位処理モードを選択させる。
ステップS65において、反復勾配法演算部33は画素単位の勾配法演算処理を実行する。この反復勾配法演算処理により、検出対象ブロック内の全画素の動きベクトルVが求められる。求められた動きベクトルVはステップS62において検出ベクトルメモリ13に記憶される。画素単位の勾配法演算処理の詳細については、図26のフローチャートを参照して後述する。
ステップS62において動きベクトルVが検出ベクトルメモリ13内に記憶された後、図21のステップS23に戻り、それ以降の処理が行われる。
次に、図24のフローチャートを参照して、図23のステップS53において行われる有効画素判定処理について説明する。
ステップS71において、有効画素判断部73の時間画素差分算出部81(図13)は、画素差分値判断部82を制御して有効画素数カウンタ83をリセットさせ、ステップS72に進み、演算ブロックを構成する画素のうちの1つの画素を選択する。ここでは、例えば、演算ブロックの左上の画素からラスタ順に選択される。
時間画素差分算出部81は、ステップS73において、セレクタ72から供給されてきたオフセットベクトルと、プリフィルタ32−1,32−2から供給されてきたフレームt,t+1を用いて、ステップS72で選択した画素の時間方向の画素差分Δtを算出し、算出した画素差分Δtを画素差分値判断部82に出力する。
ステップS74において、画素差分値判断部82は、時間方向の画素差分Δtが所定の画素差分値よりも小さいか否か、すなわち、いま選択されている画素が、後段の勾配法演算に有効な画素であるか否かを判定する。
画素差分値判断部82は、ステップS74において、画素差分Δtが所定の画素差分値よりも小さいと判定した場合、ステップS75に進み、有効画素数カウンタ83においてカウントされる有効画素の数を1つインクリメントさせる。
また、画素差分値判断部82は、ステップS74において、画素差分Δtが所定の画素差分値以上であると判定した場合、すなわち、いま選択されている画素が勾配法演算に有効な画素ではないと判定した場合、ステップS75の処理をスキップし、ステップS76に進む。
ステップS76において、時間画素差分算出部81は、演算ブロック内のすべての画素の処理が終了したか否かを判定し、演算ブロック内のすべての画素の処理が終了していないと判定した場合、ステップS72に戻り、次の画素を選択し、それ以降の処理を繰り返す。
時間画素差分算出部81は、ステップS76において、演算ブロック内のすべての画素の処理が終了したと判定した場合、図23のステップS53に戻り、それ以降の処理を行わせる。
次に、図25のフローチャートを参照して、図23のステップS55において行われるブロック単位の勾配法演算処理について説明する。
ステップS91において、勾配法演算部74の時間画素差分算出部91(図17)は、演算ブロックを構成する画素のうちの1つの画素を選択する。例えば、演算ブロックの左上の画素からラスタ順に選択される。
ステップS92において、時間画素差分算出部91は、セレクタ72から供給されてきたオフセットベクトルと、プリフィルタ32−1,32−2から供給されてきたフレームt,t+1を用いて、ステップS91で選択した画素の時間方向の画素差分Δtを算出し、算出した画素差分Δtとオフセットベクトルを画素差分値判断部92に出力する。
ステップS93において、画素差分値判断部92は、算出された画素差分Δtが所定の画素差分値よりも小さいか否か、すなわち、いま選択されている画素が勾配法演算に有効な画素であるか否かを判定する。
画素差分値判断部92は、ステップS93において、画素差分Δtが所定の画素差分値よりも小さいと判定した場合、時間方向の画素差分Δtとオフセットベクトルを垂直水平画素差分算出部93に出力する。
ステップS94において、垂直水平画素差分算出部93は、画素差分値判断部92から供給されてきたオフセットベクトルと、プリフィルタ32−1,32−2から供給されてきたフレームt,t+1を用いて、有効であると判定された画素の水平方向の画素差分Δxを算出する。
また、垂直水平画素差分算出部93は、ステップS95において、有効であると判定された画素の垂直方向の画素差分Δyを算出し、算出した水平方向の画素差分Δxと垂直方向の画素差分Δyを、時間方向の画素差分Δtとともに勾配積算部94に出力する。
ステップS96において、勾配積算部94は、垂直水平画素差分算出部93から供給されてきた画素差分Δt,Δx,Δyを積算し、積算した結果をベクトル算出部95に出力する。
一方、ステップS93において、画素差分値判断部92は、時間方向の画素差分Δtが、所定の画素差分値以上であると判定した場合、ステップS94乃至S96の処理をスキップし、ステップS97に進む。すなわち、この場合、いま選択されている画素は、勾配法演算に有効な画素ではないので、その画素差分値は演算に用いられない。
ステップS97において、時間画素差分算出部91は、演算ブロック内のすべての画素の処理が終了したか否かを判定し、演算ブロック内のすべての画素の処理が終了していないと判定した場合、ステップS91に戻り、次の画素を選択し、それ以降の処理を繰り返す。
一方、時間画素差分算出部91は、ステップS97において、演算ブロック内のすべての画素の処理が終了したと判定した場合、ベクトル算出部95にオフセットベクトルを出力する。
ステップS98において、ベクトル算出部95は、勾配積算部94から供給されてきた勾配の積算結果と、上式(9)の最小自乗和を用いて動きベクトルvnを算出する。
ステップS99において、ベクトル算出部95は、ステップS98で算出した動きベクトルvnを、時間画素差分算出部91からのオフセットベクトルに加算することによって動きベクトルVnを求め、求めた動きベクトルVnをベクトル評価部34に出力する。その後、図23のステップS55に戻り、それ以降の処理が行われる。
以上のように、時間方向の画素差分Δtが所定の画素差分値以上の値である場合、そのとき選択している画素は、動きの乱れを発生させる恐れがあるものとして、動きベクトルを検出する際の勾配法の演算から除外するようにしたので、より安定した勾配法演算を行うことが可能となる。
次に、図26のフローチャートを参照して、図23のステップS65において行われる画素単位の反復勾配法演算処理について説明する。この処理は、検出対象ブロック内の各画素を対象として行われる。
ステップS111において、モード選択部71は、検出対象ブロックを構成する画素のうちの1つの画素を検出対象画素として選択し、その画素の演算ブロック(例えば、9×9画素のブロック)の初期ベクトルV0を、ベクトル評価部34とセレクタ72に出力する。例えば、検出対象ブロックの左上の画素からラスタ順に画素が選択される。
ステップS112において、セレクタ72は、モード選択部71から供給されてきた初期ベクトルV0をオフセットベクトルとして有効画素判断部73(図13の時間画素差分算出部81)と勾配法演算部74(図17の時間画素差分算出部91)に出力する。
ステップS113において、有効画素判断部73は、選択されたオフセットベクトルを用いて画素単位の有効画素判定処理を実行する。ここでは、対象となる演算ブロックが異なる点を除いて、図24を参照して説明したブロック単位の有効画素判定処理と基本的に同様の処理が行われる。
ステップS114において、有効画素判断部73(図13の勾配法継続判断部84)は、有効画素数がしきい値βより多いか否かを判定し、有効画素数がしきい値βより多いと判定した場合、勾配法演算を実行させるフラグ(flg=1)を勾配法演算部74に出力する。
ステップS115において、勾配法演算部74は画素単位の勾配法演算処理を実行する。ここでは、対象となる演算ブロックが異なる点を除いて、図25のブロック単位の勾配法演算処理と同様の処理が行われる。すなわち、検出対象の画素の動きベクトルVnが求められ、求められた動きベクトルVnがベクトル評価部34と遅延部75(図10)に出力される。
ステップS116において、ベクトル評価部34は、反復勾配法演算部33により求められた動きベクトルVnの評価値DFD(n)と、オフセットベクトルとして用いられた動きベクトルVn-1の評価値DFD(n-1)を求め、評価値DFD(n-1)よりも評価値DFD(n)の方が小さいか否かを判定する。
ベクトル評価部34は、ステップS116において、評価値DFD(n-1)よりも評価値DFD(n)の方が小さいと判定した場合、すなわち、動きベクトルVn-1よりも動きベクトルVnの信頼度が高いと判定した場合、ステップS117に進み、算出された動きベクトルVnを検出対象画素の動きベクトルVとして設定する。
ステップS118において、ベクトル評価部34は、反復回数nを1つカウントし、ステップS119に進み、反復回数nが、設定された最大反復回数(例えば、2回)に達したか否かを判定する。
ベクトル評価部34は、ステップS119において、反復回数nが最大反復回数に達していないと判定した場合、ステップS112に戻り、それ以降の処理を繰り返させる。すなわち、遅延部75に保持されていた動きベクトルV1がオフセットベクトルとして選択され、それ以降の処理が行われる。
ステップS119において、反復回数nが最大反復回数に達したと判定された場合、処理はステップS121に進む。
また、ステップS116において、ベクトル評価部34は、評価値DFD(n-1)よりも評価値DFD(n)の方が小さくないと判定した場合、すなわち、動きベクトルVn-1の方が、動きベクトルVnよりも信頼度が高いと判定した場合、ステップS120に進み、勾配法演算のオフセットとしたベクトルVn-1を、検出対象ブロックの動きベクトルVに設定する。
ステップS119において、反復回数nが最大反復回数に達したと判定された場合、または、ステップS120において、ベクトルVn-1が検出対象ブロックの動きベクトルVとして設定された場合、ステップS121に進み、ベクトル評価部34は、動きベクトルVが、動きベクトルを検出する範囲として予め設定されたサーチエリア内であるか否かを判定する。
ステップS121において、ベクトル評価部34は、動きベクトルVがサーチエリア内ではないと判定した場合、ステップS122に進む。
また、ステップS114において、有効画素判断部73は、有効画素数がしきい値βより少ないと判定した場合、勾配法演算を打ち切るフラグ(flg=0)を勾配法演算部74に出力し、ステップS122に進む。ステップS122において、ベクトル評価部34は、動きベクトルVを0ベクトルに設定する。
ステップS121において、動きベクトルVがサーチエリア内であると判定された場合、または、ステップS122において、動きベクトルVが0ベクトルに設定された場合、処理はステップS123に進む。
ステップS123において、モード選択部71は、検出対象ブロック内のすべての画素の処理が終了したか否かを判定し、検出対象ブロック内のすべての画素の処理が終了していないと判定した場合、ステップS111に戻り、検出対象ブロックの次の画素を検出対象の画素として選択し、それ以降の処理を繰り返す。
モード選択部71は、ステップS123において、検出対象ブロック内のすべての画素の処理が終了したと判定した場合、図23のステップS65に戻り、それ以降の処理を行わせる。
すなわち、画素単位の反復勾配法演算処理により、検出対象ブロック内すべての画素について動きベクトルVが求められ、求められた動きベクトルVが、検出対象ブロックの各画素に対応させた形で検出ベクトルメモリ13に記憶される。
次に、図27のフローチャートを参照して、図21のステップS24において行われるシフト初期ベクトル割り付け処理について説明する。
ステップS131において、シフト初期ベクトル割付部35の評価値比較部102(図18)は、動きベクトルVとともに、動きベクトルVの評価値DFDをベクトル評価部34から取得する。このとき、割付対象位置演算部101においても、動きベクトルVが取得される。
ステップS132において、割付対象位置演算部101は、動きベクトルVのフレームtにおけるオフセット(動き補償)先の割付対象ブロックの位置を求める。
割付対象位置演算部101は、ステップS133において、ステップS132で求めた割付対象ブロックのうちの1つの割付対象ブロックを選択し、選択した割り付け対象ブロックの位置の情報を評価値メモリ36とシフト初期ベクトル置換部103に出力する。例えば、割付対象ブロックのうち、フレームt上において左上のブロックから順に割付対象ブロックが選択される。
ステップS134において、評価値比較部102は、割付対象位置演算部101により選択された割付対象ブロックの評価値DFDを評価値メモリ36から取得し、ステップS135に進み、ステップS131で取得された動きベクトルVの評価値DFDが、評価値メモリ36に記憶されている評価値DFDよりも小さいか否かを判定する。
評価値比較部102は、ステップS135において、動きベクトルVの評価値DFDの方が、評価値メモリ36の評価値DFDよりも小さいと判定した場合、ステップS136に進み、シフト初期ベクトル置換部103を制御して、割付対象位置演算部101により選択された割付対象ブロックのシフト初期ベクトルメモリ37に記憶されているシフト初期ベクトルを、動きベクトルVに書き換えさせる。
また、評価値比較部102は、ステップS137において、評価値置換部104を制御して、割付対象位置演算部101により選択された割付対象ブロックの評価値DFDを、動きベクトルVの評価値DFDで書き換えさせる。
ステップS137において評価値が書き換えられたとき、処理はステップS138に進む。また、ステップS135において、ステップS131において取得された動きベクトルVの評価値DFDが、評価値メモリ36に記憶されている評価値DFDよりも小さくないと判定された場合、ステップS136およびS137の処理はスキップされ、処理はステップS138に進む。
ステップS138において、割付対象位置演算部101は、動きベクトルVの割り付け対象ブロックのすべての処理が終了したか否かを判定し、すべての処理が終了していないと判定した場合、ステップS133に戻り、それ以降の処理を繰り返す。
割付対象位置演算部101は、ステップS138において、動きベクトルVの割り付け対象ブロックのすべての処理が終了したと判定した場合、図21のステップS24に戻り、それ以降の処理を行わせる。
以上のように、連続するフレーム間において動物体の動き量にはある程度の連続性があること基づいて、前の時刻のフレームから、次の時刻のフレームの着目ブロックを通過する動きベクトルであるシフト初期ベクトルを、初期ベクトルの候補ベクトルとすることにより、周辺ブロックにおいて過去に求められた動きベクトルのみを初期ベクトルの候補とするときよりも、勾配法演算の初期値として適切な動きベクトルを与えることができる。
次に、動きベクトルの割り付けについて説明する。
図28は、図1のベクトル割付部14の構成例を示すブロック図である。
上述したように、ベクトル割付部14においては、24P信号のフレームtの画素において検出された動きベクトルを、内挿フレームの画素に割り付ける処理が行われる。
画素情報演算部111は、検出ベクトルメモリ13に記憶されている、フレームtの画素において検出された動きベクトルを左上の画素のものからラスタ順に取得し、取得した動きベクトルを、次の時刻のフレームt+1方向に延ばして、その動きベクトルと内挿フレームとの交点を算出する。画素情報演算部111は、算出した交点から、動きベクトルの割付対象となる内挿フレーム上の画素(以下、割付対象画素という)を設定し、動きベクトルと割付対象画素の位置の情報をベクトル選択部115に出力する。
また、画像情報演算部111は、割付対象画素と、動きベクトルで対応付けられるフレームtの位置Pと、フレームt+1の位置Qを算出し、算出した位置の情報を評価値演算部112と着目画素差分演算部113に出力する。
評価値演算部112は、割付対象画素と位置情報が画素情報演算部111から供給されてきたとき、位置Pと位置Qを中心としたDFD演算範囲(m×n)をそれぞれのフレーム上に設定し、それらのDFD演算範囲が画枠内にある場合、設定したDFD演算範囲を用いて、動きベクトルに対する割付対象画素の評価値DFDを求める。求められた評価値DFDはベクトル評価部114に出力される。
着目画素差分演算部113は、割付対象画素と位置情報が画素情報演算部111から供給されてきたとき、フレームtの位置Pとフレームt+1の位置Qから、割付対象画素に対する輝度差分絶対値を求め、求めた輝度差分絶対値をベクトル評価部114に出力する。
ベクトル評価部114は画素差分判断部121と評価値判断部122から構成される。そのうちの画素差分判断部121は、着目画素差分演算部113から供給されてきた割付対象画素に対する輝度差分絶対値が所定のしきい値よりも小さいか否かを判定する。
評価値判断部122は、割付対象画素に対する輝度差分絶対値が所定のしきい値よりも小さいと画素差分判断部121により判定された場合、評価値演算部112から供給されてきた割付対象画素の評価値DFDが、ベクトル選択部115が有するDFDテーブルの最小評価値より小さいか否かを判定する。評価値判断部122は、割付対象画素の評価値DFDの方が、DFDテーブルの最小評価値より小さいと判定した場合、割付対象画素に対応する動きベクトルの信頼度が高いと判定し、割付対象画素の評価値DFDをベクトル選択部115に出力する。
ベクトル選択部115はDFDテーブルを有している。このDFDテーブルには、内挿フレーム上の各画素に対して0ベクトルを割り付けた場合の評価値DFD0が、内挿フレーム上の各画素における最小評価値として保持されている。
また、ベクトル選択部115は、割付対象画素の評価値DFDがベクトル評価部114から供給されてきたとき、画素情報演算部111により算出された割付対象画素の位置の情報に基づいて割付フラグメモリ16のフラグを1(true)に書き換え、割付対象画素のDFDテーブルの最小評価値を、その割付対象画素の評価値DFDに書き換える。さらに、ベクトル選択部115は、割付ベクトルメモリ15の割付対象画素に、画素情報演算部111からの動きベクトルを割り付ける。
ここで、ベクトル割付処理の概念について説明する。
例えば、24P信号上でオブジェクトが速度vで動いており、任意の2フレーム間でオブジェクトの動きについて等速仮定が成り立つ場合において、24P信号のフレーム間にフレームを新しく内挿することを考える。この場合、24P信号のオブジェクトから動きベクトルvを延ばすと、動きベクトルvと内挿フレームとの交点は、同じオブジェクトの位置であり、同じ速度vを有する。
したがって、ベクトル検出部12で検出された24P信号のフレーム(以下、元フレームともいう)の動きベクトルを、その動きベクトルと、内挿する60P信号の内挿フレーム上との交点に割り付けることで、内挿フレーム上の各画素の動きを求めることができる。
図29は、24P信号の元フレームで検出された動きベクトルと、60P信号の内挿フレームの画素の例を1次元で示す図である。各フレーム上の丸は画素を表す。
図29の例においては、2つの24P信号のフレームtとフレームt+1の間に、時刻t+0.4の内挿フレームF1と時刻t+0.8の内挿フレームF2が挿入されている。
また、図29の例においては、ベクトル検出部12によりフレームtにおいて検出された動きベクトルv1,v2、およびv3がフレームt+1方向に延ばされている。これらの動きベクトルを内挿フレームF1とF2の各画素に割り付ける場合、内挿フレーム上の各画素の近傍を通る動きベクトルが、その画素に割り付けられる候補ベクトル(以下、割付候補ベクトルともいう)とされる。
例えば、フレームtの左側の画素から、フレームt+1の左から4,5番目の画素近傍に向かう動きベクトルv1は、内挿フレームF1の左から2番目と3番目の画素の間、内挿フレームF2の左から3番目と4番目の画素の間を通ることから、この動きベクトルv1は、動きベクトルv1が内挿フレームF1,F2と交差する点の近傍の領域N1に含まれる画素に割り付けられる割付候補ベクトルとなる。
また、フレームtの左から3番目の画素から、フレームt+1の左から2,3番目の画素近傍に向かう動きベクトルv2は、内挿フレームF1の左から2番目と3番目の画素の間、内挿フレームF2の左から2番目と3番目の画素の間を通ることから、この動きベクトルv2は、動きベクトルv2が内挿フレームF1,F2と交差する点の近傍の領域N2に含まれる画素に割り付けられる割付候補ベクトルとなる。
同様に、フレームtの左から5番目の画素から、フレームt+1の左から4,5番目の画素近傍への動きベクトルv3は、内挿フレームF1の左から4番目と5番目の画素の間、内挿フレームF2の左から4番目と5番目の画素の間を通ることから、この動きベクトルv3は、動きベクトルv3が内挿フレームF1,F2と交差する点の近傍の領域N3に含まれる画素に割り付けられる割付候補ベクトルとなる。
以上のように、元フレームにおいて検出された動きベクトルの中から内挿フレームの各画素に割り付けられる割付候補ベクトルが求められ、それぞれの割付候補ベクトルについて求められる評価値DFD等に基づいて、内挿フレームのそれぞれの画素に1つの動きベクトルが割り付けられる。
なお、図29の例においては、内挿フレームの左端の画素と右端の画素(図中黒丸)には割付候補ベクトルが存在しないことから、その近傍を通る動きベクトルは示されていない。このような割付候補の動きベクトルが存在しない画素については、後述する割付補償処理により動きベクトルが割り付けられる。
次に、動きベクトルの評価について説明する。
図30は動きベクトルの評価について説明する図である。
図30の例においては、下から、フレームt,内挿フレームF1,フレームt+1が1次元的に示されている。
動きベクトルsvaは、フレームt上の画素(xa,ya)において検出された動きベクトルvaが、近傍の画素G4の割付候補ベクトルとして画素G4上にシフト(平行移動)されたものである。画素G4上にシフトされた動きベクトルsvaと、フレームtおよびフレームt+1との交点を、それぞれ点P、点Qとする。
ベクトル割付部14は、動きベクトルsvaの第1の評価として、点Pおよび点Qを中心としたDFD演算範囲をそれぞれ設定し、求めたDFD演算範囲が画枠をはみ出してしまうか否かを判定する。ベクトル割付部14は、点Pおよび点Qを中心としたDFD演算範囲が画枠をはみ出すと判定した場合、動きベクトルsvaを候補から除外する。
また、点Pおよび点Qが、例えば、異なるオブジェクトに属する場合、点Pの輝度値Ft(P)と点Qの輝度値Ft+1(Q)の差は大きくなる。したがって、ベクトル割付部14は、動きベクトルsvaの第2の評価として、点Pと点Qを用いて、画素G4における輝度差分絶対値dpを求め、輝度差分絶対値dpが所定の値より大きいか否かを判定する。輝度差分絶対値dpが所定の値より大きいと判定した場合、ベクトル割付部14は、動きベクトルsvaを候補から除外する。輝度差分絶対値dpは次式(11)で表される。
さらに、ベクトル割付部14は、動きベクトルsvaの第3の評価として、点Pおよび点Qを中心としたDFD演算範囲の相関値を表す差分絶対値による評価判定を行う。すなわち、ベクトル割付部14は、点Pと点Qを中心としたDFD演算範囲を用いて、画素G4における動きベクトルsvaの評価値DFDを求め、求められた評価値DFDがDFDテーブルの最小評価値よりも小さいか否かを判定する。ベクトル割付部14は、求められた評価値DFDの中で最小の評価値DFDを有する動きベクトルを画素G4に割り付ける。
以上のように、内挿フレームの画素における割付候補の動きベクトルを、割付対象画素の評価値DFDだけでなく、割付対象画素における輝度差分絶対値などを用いて評価することにより、評価値DFDだけを用いる場合よりも確からしい動きベクトルを割り付けることができる。
次に、動きベクトルの画素以下精度について説明する。
フレームtの画素位置pをベクトルv量分ずらした先のフレームt+1上の位相p+vが、24p信号のフレームt+1上の画素位置と一致しない場合があり、その場合の位相p+vにおける輝度値は定義されていない。したがって、画素以下精度を有する動きベクトルvに対する輝度差分絶対値dpや評価値DFDの演算を行うためには、画素以下の位相における輝度値を生成しなければならず、その輝度値を得るために、例えば、周辺4画素の輝度値による補間処理が用いられる。
図31は、4点補間処理の概念を示す図である。
図31においては、矢印Xはフレームt+1における水平方向を示し、矢印Yはフレームt+1における垂直方向を示す。このフレームt+1において、白丸はフレームt+1上の画素位置を表し、黒点は画素以下の(粒度の)位置を表す。
また、ウインドウEに示される画素は、フレームt+1上における最左上の黒点p+vとその周辺4画素を拡大したものである。ウインドウ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)は次式(12)で表され、その輝度値Ft+1(p+v)が、輝度差分絶対値dpや評価値DFDの演算に用いられる。
なお、上述した初期ベクトル選択処理やベクトル検出処理、または、後述する割付補償処理時の評価値DFDの演算においても、この4点補間が適用される。
次に、以上のような構成を有するベクトル割付部14の各部の処理について説明する。
はじめに、図32のフローチャートを参照して、ベクトル割付部14により行われるベクトル割付処理の全体について説明する。この処理は、図5のステップS3において行われる処理である。
ステップS201において、画素情報演算部111は、新しい元フレームが入力されると、ベクトル選択部115を制御して割付フラグメモリ16の割付フラグを0(False)で初期化させる。
また、画素情報演算部111は、ステップS202において、割付ベクトルメモリ15を0ベクトルで初期化させる。
画素情報演算部111は、ステップS203において、評価値演算部112を制御し、内挿フレームのすべての画素に対して0ベクトルを用いて評価値DFD0を算出させる。画素情報演算部111は、評価値演算部112により算出された0ベクトルの評価値DFD0を、内挿フレームの各画素に対する最小評価値としてベクトル選択部115に保持させる。
ステップS204において、画素情報演算部111は、検出ベクトルメモリ13上の元フレームから画素を選択する。例えば、フレームの左上の画素からラスタ順に画素が選択される。
ステップS205において、画素情報演算部111は画素位置演算処理を実行する。この処理により、ステップS204で選択された画素において検出された動きベクトルが割り付けられる内挿フレーム上の割付対象画素が算出され、算出された割付対象画素を基準に、その動きベクトルで対応付けられる元フレーム上の位置が算出される。画素位置演算処理の詳細については、図33のフローチャートを参照して後述する。
ステップS206において、画素情報演算部111は割付対象画素を選択し、選択した割付対象画素の位置情報と、その動きベクトルをベクトル選択部115に出力する。また、画素情報演算部111は、選択した割付対象画素を基準に、その動きベクトルで対応付けられる元フレーム上の位置の情報を評価値演算部112と着目画素演算部113に出力する。
ステップS207において、割付対象画素に関して割付ベクトル評価処理が実行される。この割付ベクトル評価処理により、割付対象画素における動きベクトルの信頼度が判定され、信頼度が高いと判定された動きベクトルによって、割付ベクトルメモリ15に記憶されている動きベクトルが書き換えられる。割付ベクトル評価処理の詳細については、図34のフローチャートを参照して後述する。
ステップS208において、画素情報演算部111は、すべての割付対象画素の処理が終了したか否かを判定し、すべての割付対象画素の処理がまだ終了していないと判定した場合、ステップS206に戻り、次の割付対象画素を選択して、それ以降の処理を繰り返す。
一方、ステップS208において、すべての割付対象画素の処理が終了したと判定した場合、ステップS209に進み、画素情報演算部111は、検出ベクトルメモリ13上の元フレームのすべての画素の処理を終了したか否かを判定する。
画素情報演算部111は、ステップS209において、すべての画素の処理を終了していないと判定した場合、ステップS204に戻り、検出ベクトルメモリ13上の元フレームの次の画素を選択してそれ以降の処理を繰り返し、すべての画素についての処理を終了したと判定した場合、処理を終了させる。その後、処理は図5のステップS3に戻り、それ以降の処理が行われる。
次に、図33のフローチャートを参照して、図32のステップS205において行われる画素位置演算処理について説明する。
ステップS221において、画素情報演算部111は、図32のステップS204で選択した画素で検出された動きベクトルを検出ベクトルメモリ13から取得する。なお、選択された画素の動きベクトルが0ベクトルである場合、割付ベクトルメモリ15には初期値として0ベクトルが予め記憶されているので、以降のステップS222乃至S224、および、図32のステップS206乃至S208の処理はスキップされる。
ステップS222において、画素情報演算部111は、ステップS221で取得した動きベクトルと内挿フレームの交点を算出する。
ステップS223において、画素情報演算部111は、動きベクトルと内挿フレームの交点から割付対象画素を設定する。例えば、交点が内挿フレーム上の画素位置に一致する場合、その交点にある画素が割付対象画素に設定される。また、交点が内挿フレーム上の画素位置に一致しない場合、上述したように、内挿フレーム上の交点の近傍4画素が割付対象画素に設定される。
ステップS224において、画素情報演算部111は、それぞれの割付対象画素を基準に、取得した動きベクトルで対応付けた元フレーム上の位置を算出する。例えば、割付対象画素にシフトされた動きベクトルと、元フレーム上の交点の位置が算出される。算出された元フレーム上の位置は、評価値演算部112が評価値DFDを求めるために、また、着目画素差分演算部113が輝度差分絶対値を求めるために用いられる。その後、図32のステップS205に戻り、それ以降の処理が行われる。
次に、図34のフローチャートを参照して、図32のステップS207において行われる割付ベクトル評価処理について説明する。
ステップS241において、評価値演算部112は、元フレーム上の位置の情報が画素情報演算部111から供給されてきたとき、フレームt,t+1上の位置を中心としたDFD演算範囲をそれぞれ求め、ステップS242に進み、その求めたDFD演算範囲が画枠内にあるか否かを判定する。
評価値演算部112は、ステップS242において、DFD演算範囲が画枠からはみ出していると判定した場合、その動きベクトルは割付対象画素に割り付ける割付候補ベクトルにはならないと判定し、処理を終了させる。
一方、ステップS242において、評価値演算部112は、DFD演算範囲が画枠内にあると判定した場合、ステップS243に進み、DFD演算範囲を用いて割付対象画素の評価値DFDを求め、求めた評価値DFDをベクトル評価部114の評価値判断部122に出力する。
ステップS244において、着目画素差分演算部113は、元フレーム上の位置の情報が画素情報演算部111から供給されてきたとき、割付対象画素における輝度差分絶対値dpを求め、求めた輝度差分絶対値dpをベクトル評価部114の画素差分判断部121に出力する。
ステップS245において、画素差分判断部121は、着目画素差分演算部113により求められた輝度差分絶対値dpが、所定のしきい値以下であるか否かを判定し、輝度差分絶対値dpが所定のしきい値より大きいと判定した場合、フレームt,t+1の交点がそれぞれ異なるオブジェクトに属する可能性が高いことから、その動きベクトルの信頼度が低く、割付対象画素に割り付ける割付候補ベクトルにはならないと判定し、処理を終了させる。
一方、画素差分判断部121は、ステップS245において、割付対象画素の輝度差分絶対値dpが所定のしきい値以下であると判定した場合、ステップS246に進む。
ステップS246において、評価値判断部122は、ベクトル選択部115により保持されているDFDテーブルを参照し、評価値演算部112により求められた割付対象画素の評価値DFDが、DFDテーブルに記憶されている割付対象画素の最小評価値(いまの場合、0ベクトルの評価値DFD0)よりも小さいか否かを判定する。
評価値判断部122は、ステップS246において、割付対象画素の評価値DFDが最小評価値以上であると判定した場合、その動きベクトルは信頼度が高くないと判定し、処理を終了させる。
一方、ステップS246において、割付対象画素の評価値DFDが最小評価値よりも小さいと判定した場合、評価値判断部122は、その動きベクトルは、いままで比較した動きベクトルの中で最も信頼度が高いと判定し、信頼度が高いと判定した割付対象画素の評価値DFDをベクトル選択部115に出力する。
ステップS247において、ベクトル選択部115は、割付フラグメモリ16に記憶されている、評価値判断部122から評価値DFDが供給されてきた割付対象画素の割付フラグを1(True)に書き換える。
また、ベクトル選択部115は、ステップS248において、DFDテーブルに保持されている、割付対象画素に対応する最小評価値を、評価値判断部122により信頼度が高いと判定された評価値DFDで書き換える。
ステップS249において、ベクトル選択部115は、割付ベクトルメモリ15に記憶されている、割付対象画素に割り付けられている動きベクトルを、信頼度が高いと判定された評価値DFDに対応する動きベクトルで書き換える。ベクトル選択部115には、図32のステップS206において、割付対象画素とその動きベクトルが画素情報演算部111から供給されている。その後、図33のステップS207に戻り、それ以降の処理が行われる。
次に、動きベクトルの補償について説明する。
図35は、図1の割付補償部17の構成例を示すブロック図である。
上述したように、割付補償部17においては、ベクトル割付部14により動きベクトルが割り付けられなかった内挿フレームの画素に、その周辺画素の動きベクトルを補って割り付ける処理が行われる。
割付ベクトル判定部131は、割付フラグメモリ16に記憶されている割付フラグに基づいて、内挿フレームのそれぞれの画素に動きベクトルが割り付けられているか否かを判定する。また、割付ベクトル判定部131は、ベクトル補償部132を制御し、動きベクトルが割り付けられていない画素に動きベクトルを割り付けさせる。
例えば、内挿フレームの右下の画素を基準として逆ラスタ順にそれぞれの画素が着目され、動きベクトルが割り付けられていない画素に動きベクトルが割り付けられる。
ベクトル補償部132は、着目画素の周辺画素に割り付けられた動きベクトルのうち、信頼度が最も高い1つの動きベクトルを評価値DFDに基づいて選択し、選択した動きベクトルを着目画素に割り付ける。ベクトル補償部132により画素に割り付けられた動きベクトルは、その画素と対応付けて割付ベクトルメモリ15に記憶される。
図36は、ベクトル補償部132の詳細な構成例を示すブロック図である。
補償処理部141は、最小評価値DFDと、最小評価値DFDの動きベクトルを候補ベクトル(以下、補償候補ベクトルともいう)として記憶するメモリ151を有している。補償処理部141は、処理の開始時、このメモリ151に、0ベクトルの評価値DFDを最小評価値として記憶させるとともに、0ベクトルを補償候補ベクトルとして記憶させる。
また、補償処理部141は、割付フラグメモリ16を参照して、着目画素の周辺画素に割り付けられている動きベクトルを割付ベクトルメモリ15から取得し、評価値演算部142を制御して、その動きベクトルの評価値DFDを演算させる。
補償処理部141は、評価値演算部142により求められた評価値DFDが、メモリ151に記憶されている最小評価値よりも小さいか否かを判定し、演算された評価値DFDが最小評価値よりも小さいと判定した場合、メモリ151の補償候補ベクトルと最小評価値を、演算された評価値DFDとその動きベクトルに書き換え、最終的に、評価値DFDが最も小さい周辺画素の動きベクトル(補償候補ベクトル)を、着目画素の動きベクトルとして着目画素に割り付ける。このとき、補償処理部141は、動きベクトルが割り付けられた着目画素の割付フラグメモリ16の割付フラグを1(True)に書き換える。
評価値演算部142は、入力されたフレームt,t+1を用いて、割付ベクトルメモリ15から取得された、周辺画素のそれぞれの動きベクトルの評価値DFDを演算し、演算した評価値DFDを補償処理部141に出力する。
ここで、補償処理の概念について説明する。
図37は、動きベクトルの割付補償について説明する図である。
図37において、丸は内挿フレーム上の1つの画素を表し、画素から延びている矢印は、それぞれの画素に割り付けられている動きベクトルを表す。矢印がない画素は、その画素に動きベクトルが割り付けられていないことを表す。
図37の例においては、ベクトル割付部14により動きベクトルが割り付けられなかった中央の画素Pが着目画素とされている。また、画素Pの周辺画素である、左上、上、右上、左下、右下のそれぞれの画素に割り付けられている動きベクトルV1乃至V5が補償候補ベクトルとして選択され、その中から、評価値DFDに基づいて信頼度が高いと判定された、画素Pの上に位置する画素の動きベクトルV2が割り付けられている。
このように、周辺の画素に割り付けられている動きベクトルを用いて補償が行われるのは、ある画素に着目した場合、その画素の動きは、空間方向、時間方向において、周辺の画素の動きと相関が高いと考えられることに基づくものである。
次に、動きベクトルの割付補償の順序について説明する。
図38は、割り付けられた動きベクトルの例を示す図である。
図38の例においては、内挿フレーム上の5×5画素が示されており、そのうちの黒丸はベクトル割付部14により動きベクトルが割り付けられた画素を示している。すなわち、白抜きの丸が、割付補償処理において、その対象となる画素である。
例えば、動きベクトルの割付補償は、図39に示すように、内挿フレームの最も右下にある画素を基準として、逆ラスタ順に、画素が着目されて処理が進められる。
従って、図38に示されるようにそれぞれの画素に動きベクトルが割り付けられている場合、割付補償の対象として、はじめに、下から2行目、右から2列目の位置にある画素P1着目され、その周辺の画素の動きベクトルのうち、最も信頼度の高い動きベクトルが、画素P1に割り付けられる。図38の例においては、画素P1の右下、下、左下、右、上、左上の5つの画素に割り付けられている動きベクトルが補償候補ベクトルとして選択され、そのうちの1つの動きベクトルが画素P1に割り付けられる。
図40は、画素P1に動きベクトルが割り付けられた状態を示す図である。
図40の例においては、画素P1には、その右隣の画素の動きベクトルが選択され、割り付けられている。このように、着目している画素に動きベクトルが割り付けられたとき、割付補償の対象となる着目画素が切り替えられる。
すなわち、着目画素は逆ラスタ順に選択されるから、画素P1の次には、図41に示されるように、動きベクトルが割り付けられていない画素として画素P1の左となりに位置する画素P2が着目画素とされ、その周辺の画素の動きベクトルのうち、最も信頼度の高い動きベクトルが画素P2に割り付けられる。図41の例においては、画素P2の右下、下、左下、右、左、右上、上の7つの画素に割り付けられている動きベクトルが補償候補ベクトルとして選択され、そのうちの1つの動きベクトルが画素P2に割り付けられる。
このように、割付補償処理においては、着目画素が切り替わったときには、直前に着目されていた画素に割り付けられた動きベクトルも、いま着目している画素に割り付ける候補の動きベクトルとして選択されることになる。図41の例においては、画素P2に割り付ける候補の動きベクトルとして、直前に着目されていた画素P1に新たに割り付けられた動きベクトルも選択されている。
以上のように、割付補償部17においては、着目画素が逆ラスタ順に選択され、動きベクトルの割付補償が行われる。この、着目画素を逆ラスタ順に選択することは次の理由に基づく。
図42は、ベクトル検出部12において行われる動きベクトルの検出と、それにより検出された動きベクトルの例を示す図である。
上述したように、ベクトル検出部12においては、ラスタ順に画素が着目され、勾配法が用いられて動きベクトルの検出が行われる。この勾配法による演算は、図12等を参照して説明したように、着目画素の周辺画素において先に検出された動きベクトルが、他の画素の動きベクトルを求めるときにオフセットを与えるための候補とされて開始されるものであるから、ラスタ順に着目画素が切り替えられて処理が進むほど、すなわち、フレームの右下の方にある画素ほど、検出される動きベクトルは、実際のオブジェクトの動きを表し、いわば収束していくことになる。
図42の例においては、オブジェクトOが示されており、オブジェクトOから延びる矢印は、オブジェクトOに属する画素で検出された動きベクトルを表す。図42に示されるように、オブジェクトOに属する画素で検出された動きベクトルは、処理が進んだ右下の方で検出されるものほど、太線矢印Aで示される、オブジェクトOの理想的な動き(実際の動き)に近いものとなっている。
そこで、割付補償においては、そのように、実際の動きを最も正確に表すと考えられる1度収束した動きベクトルも割り付け候補の動きベクトルとして選択され、他の周辺画素に割り付けられている動きベクトルとの評価結果によっては、着目画素に割り付けられるように、逆ラスタ順に、着目画素が選択されて処理が進められる。仮に、割付補償もラスタ順に処理が進められるとした場合、オブジェクトの実際の動きを最も正確に表すと考えられる、右下方の画素に割り付けられている動きベクトルは、他の画素に割り付ける補償候補のベクトルとして選択されることはない。すなわち、最も正確な動きベクトルによって補償されることはない。
図43は、補償された動きベクトルの例を示す図である。図43において、オブジェクトOに属する画素から延びている点線矢印は、補償された動きベクトルを表す。
動きベクトルの割り付け補償においては、図41を参照して説明したように、直前に割り付けられた動きベクトルも次の着目画素の割付候補の動きベクトルとされ、評価結果によっては割り付けられるから、逆ラスタ順に処理が進められることにより、収束した右下方にある動きベクトルが、図43に示されるように左上方の画素に次々と割り付けられ、いわば伝搬してくことになる。
図43の例においては、オブジェクトOに属する画素に新たに補償された動きベクトルは、右下方のものから順に割り付けられたものであり、それらは、収束した動きベクトル(右下方の画素で検出時に検出された動きベクトル)に近い、もしくは同じものとなっている。
以上のように、動きベクトルの検出がラスタ順で進められることにより、処理対象がフレームの右下方に移行するほど、動きベクトルは収束し、反対に、割付補償が逆ラスタ順で進められることにより、収束した動きベクトルが左上方に空間的に伝搬していくことになる。図44は、このことを示す。
このように、割付候補が逆ラスタ順で進められることにより、実際の動きを最も正確に表すと考えられる動きベクトルを、まだ動きベクトルが割り付けられていない画素に割り付けることが可能となり、ずれた動きを表す動きベクトルが同一オブジェクト内で異なる画素に割り付けられることにより、画質が劣化してしまうことを防止することができる。
なお、以上においては、割付補償処理が逆ラスタ順に進められるものとしたが、動きベクトルの検出処理が逆ラスタ順で進められる場合、割付補償処理は、検出処理と逆の、ラスタ順で進められる。すなわち、動きベクトルの検出処理と割付補償処理は、互いに逆の処理順で進められる。
次に、動きベクトルの評価について説明する。
補償候補の動きベクトルの中から実際に割り付ける動きベクトルを選択する基準となる評価値DFDは、例えば、図45乃至図47に示されるようにして求められる。
図45は、左側に示される着目画素Pの補償候補ベクトルの中から選択された0ベクトルS0の評価値DFDを求める例を示す図である。
0ベクトルS0に対する評価値DFDは、内挿フレーム上の着目画素Pを基準として、0ベクトルS0によって対応付けられるフレームtとフレームt+1上のそれぞれの交点を中心としたDFD演算範囲D1-1,D1-2を用いて、上式(1)を演算することにより求められる。
図46は、左側に示される着目画素Pの補償候補ベクトルの中から選択された動きベクトルVK1の評価値DFDを求める例を示す図である。
動きベクトルVK1に対する評価値DFDは、内挿フレーム上の着目画素Pを基準として、動きベクトルVK1によって対応付けられるフレームtとフレームt+1上のそれぞれの交点を中心としたDFD演算範囲D2-1,D2-2を用いて、上式(1)を演算することにより求められる。
図47は、左側に示される着目画素Pの補償候補ベクトルの中から選択された動きベクトルVK2の評価値DFDを求める例を示す図である。
動きベクトルVK2に対する評価値DFDは、内挿フレーム上の着目画素Pを基準として、動きベクトルVK2によって対応付けられるフレームtとフレームt+1上のそれぞれの交点を中心としたDFD演算範囲D3-1,D3-2を用いて、上式(1)を演算することにより求められる。
着目画素Pの周辺画素に割り付けられている他の補償候補ベクトルについても同様の処理により評価値DFDが求められ、その中で、評価値DFDが最小となる補償候補ベクトルが、着目画素Pに割り付けられる動きベクトルとして選択される。
次に、以上のような構成を有する割付補償部17の各部の処理について説明する。
はじめに、図48のフローチャートを参照して、割付補償部17により行われる割付補償処理の全体について説明する。この処理は、図5のステップS4において行われる処理である。
ステップS301において、割付ベクトル判定部131は、内挿フレームの画素のうち、最も右下方にある画素を基準として逆ラスタ順に選択した1つの画素を着目画素とする。
ステップS302において、割付ベクトル判定部131は、割付フラグメモリ16に記憶されている着目画素の割付フラグが0(False)であるか否かを判定し、0(False)であると判定した場合、いま選択している着目画素には動きベクトルが割り付けられていないと認識してステップS303に進む。
ステップS303において、ベクトル補償部132はベクトル補償処理を実行する。このベクトル補償処理により、周辺画素に割り付けられた動きベクトルの中から、評価値DFDが最小となる動きベクトルが補償候補ベクトルとしてメモリ151に記憶される。ベクトル補償処理の詳細については、図49のフローチャートを参照して後述する。
ステップS304において、ベクトル補償部132の補償処理部141(図36)は、メモリ151に記憶されている補償候補ベクトルを、着目画素の動きベクトルとして割付ベクトルメモリ15に割り付ける。
また、補償処理部141は、ステップS305において、割付フラグメモリ16に記憶されている着目画素の割り付けフラグを1(True)に書き換え、ステップS306に進む。
一方、ステップS302において、割付ベクトル判定部131は、着目画素の割付フラグが0(False)ではないと判定した場合、その着目画素にはすでに動きベクトルが割り付けられていると認識し、ステップS303乃至S305の処理をスキップする。
ステップS306において、割付ベクトル判定部131は、内挿フレームのすべての画素の処理を終了したか否かを判定し、すべての画素の処理を終了していないと判定した場合、ステップS301に戻り、それ以降の処理を繰り返し実行する。すなわち、1つの画素が逆ラスタ順に選択され、選択された画素を着目画素とした処理が繰り返される。
割付ベクトル判定部131は、ステップS306において、内挿フレームのすべての画素の処理を終了したと判定した場合、割付補償処理を終了させる。その後、図5のステップS4に戻り、それ以降の処理が行われる。
次に、図49のフローチャートを参照して、図48のステップS303において行われるベクトル補償処理について説明する。
ステップS321において、ベクトル補償部132の評価値演算部142は、着目画素について、0ベクトルを用いて評価値DFD0を算出する。0ベクトルを用いた評価値DFD0の演算は、例えば、図45を参照して説明したようにして行われる。求められた評価値DFD0は補償処理部141に出力される。
ステップS322において、補償処理部141は、ステップS321で求められた評価値DFD0を最小評価値としてメモリ151に記憶させる。また、補償処理部141は、ステップS323において、0ベクトルを補償候補ベクトルとしてメモリ151に記憶させる。
ステップS324において、補償処理部141は、着目画素の周辺8画素のうちの1つの画素を選択する。例えば、周辺8画素のうち、右下の画素から逆ラスタ順に周辺画素が選択される。
補償処理部141は、ステップS325において、割付フラグメモリ16を参照して、ステップS324で選択した周辺画素に動きベクトルが存在するか否か、すなわち、その周辺画素の割付フラグが1(True)であるか否かを判定する。
ステップS325において、補償処理部141は、周辺画素に動きベクトルが存在すると判定した場合、ステップS326に進み、その周辺画素の動きベクトルを割付ベクトルメモリ15から取得する。このとき、評価値演算部142に対しても、周辺画素の動きベクトルが割付ベクトルメモリ15から供給される。
ステップS327において、評価値演算部142は、ステップS326で取得された周辺画素の動きベクトルの評価値DFDを算出し、求めた評価値DFDを補償処理部141に出力する。
ステップS328において、補償処理部141は、評価値演算部142から供給されてきた評価値DFDが、メモリ151に記憶されている着目画素の最小評価値よりも小さいか否かを判定する。
補償処理部141は、ステップS328において、新たに供給されてきた評価値DFDの方が、着目画素の最小評価値よりも小さいと判定した場合、ステップS329に進み、メモリ151に記憶されている最小評価値を、新たに供給されてきた評価値DFDに書き換える。
また、補償処理部141は、ステップS330において、メモリ151に記憶されている補償候補ベクトルを、ステップS326で取得された周辺画素の動きベクトルに書き換え、ステップS331に進む。
一方、ステップS325において、割付フラグメモリ16に記憶されている、周辺画素の割付フラグが0(False)であることから、周辺画素に割り付けられている動きベクトルがないと判定した場合、補償処理部141は、ステップS326乃至S330の処理をスキップし、ステップS331に進む。
また、ステップS328において、補償処理部141は、新たに求められた評価値DFDが、メモリ151に記憶されている着目画素の最小評価値以上であると判定した場合、ステップS329およびS330の処理をスキップし、ステップS331に進む。
ステップS331において、補償処理部141は、着目画素の周辺画素のすべての処理が終了したか否かを判定し、すべての処理が終了していないと判定した場合、ステップS324に戻り、次の周辺画素を選択して、それ以降の処理を繰り返す。
補償処理部141は、ステップS331において、着目画素の周辺画素のすべての処理が終了したと判定した場合、ベクトル補償処理を終了する。その後、図48のステップS303に戻り、それ以降の処理が行われる。
以上においては、それぞれの画素が着目画素として選択され、選択された着目画素に動きベクトルが割り付けられていない場合には、その周辺画素の動きベクトルの評価結果から選択された1つの動きベクトルが着目画素に割り付けられるように、画素毎に割付補償処理が行われる場合について説明したが、この処理は、画素単位ではなく、ブロック単位で行われるようにすることもできる。ブロック単位で割付補償処理が行われる場合、1つのブロックに含まれる全ての画素には、そのブロックに対して割り付けられた同じ動きベクトルが割り付けられる。
ここで、図50のフローチャートを参照して、ブロック単位で行われる割付補償処理の全体について説明する。すなわち、この処理は、画素単位で行われる図48の処理に対応する処理である。
割付ベクトル判定部131は、ステップS341において、内挿フレームをm×n画素毎に分けたブロックのうち、最も右下方にあるブロックを基準として逆ラスタ順に選択した1つのブロックを着目ブロックとする。
ステップS342において、割付ベクトル判定部131は、着目ブロックを構成する画素の中に、割付フラグメモリ16に記憶されている割付フラグが0(False)である画素があるか否かを判定し、そのような画素があると判定した場合、着目ブロックを構成する画素の中に動きベクトルが存在しない画素があると認識する。
ステップS343において、ベクトル補償部132はベクトル補償処理を実行する。このベクトル補償処理により、着目ブロックの周辺のブロック(周辺のブロックの画素)に割り付けられた動きベクトルの中から、評価値DFDが最小となる動きベクトルが補償候補ベクトルとしてメモリ151に記憶される。すなわち、ここでは、着目する対象が画素ではなくブロックとなる点を除いて、図49を参照して説明した処理と同様の処理が行われる。
ステップS344において、ベクトル補償部132の補償処理部141は、着目ブロックを構成する画素の中から1つの画素を着目画素として選択し、割付フラグメモリ16に記憶されている、その着目画素の割付フラグが0(False)であるか否かを判定する。
補償処理部141は、ステップS344において、着目画素の割付フラグが0(False)であると判定した場合、ステップS345に進み、メモリ151に記憶されている補償候補ベクトルを、着目画素の動きベクトルとして割付ベクトルメモリ15に割り付ける。
また、補償処理部141は、ステップS346において、割付フラグメモリ16に記憶されている着目画素の割り付けフラグを1(True)に書き換え、ステップS347に進む。
一方、ステップS344において、割付ベクトル判定部131は、着目画素の割付フラグが0(False)ではないと判定した場合、その着目画素にはすでに動きベクトルが割り付けられていると認識し、ステップS345,S346の処理をスキップする。
補償処理部141は、ステップS347において、着目ブロック内のすべての画素の処理を終了したか否かを判定し、すべての画素の処理を終了していないと判定した場合、ステップS348に進む。
ステップS348において、補償処理部141は、着目ブロックを構成する画素のうちの、まだ着目していない画素を着目画素として選択し、ステップS344以降の処理を繰り返す。
一方、ステップS342において、着目ブロックを構成する画素の中に、割付フラグメモリ16に記憶されている割付フラグが0(False)である画素がないと判定された場合、または、ステップS347において、着目ブロックのすべての画素の処理を終了したと判定された場合、ステップS349に進み、補償処理部141は、内挿フレームのすべてのブロックの処理を終了したか否かを判定する。
補償処理部141は、ステップS349において、すべてのブロックの処理を終了していないと判定した場合、ステップS341に戻り、逆ラスタ順に、次のブロックを着目ブロックとして選択して、それ以降の処理を実行する。
ステップS349において、補償処理部141は、内挿フレームのすべてのブロックの処理を終了したと判定した場合、処理を終了させる。
このように、ブロック単位で割付補償処理を行うことも可能である。
次に、内挿フレームの補間について説明する。
図51は、図1の画像補間部18の構成例を示すブロック図である。
上述したように、画像補間部18においては、内挿フレームに割り付けられた動きベクトルと、フレームt,t+1の画素値を用いて内挿フレームの画素値を補間生成する処理が行われる。
補間制御部161は、内挿フレームの画素から選択した1つの画素に割り付けられている動きベクトルを割付ベクトルメモリ15から取得し、内挿フレームの画素を基準として、取得した動きベクトルで対応付けられるフレームt上の位置を求める。また、補間制御部161は、求めたフレームt上の位置と内挿フレームの画素の位置から、それらの空間シフト量を求め、空間シフト量を空間フィルタ162−1に出力する。
同様に、補間制御部161は、内挿フレームの画素を基準として、取得した動きベクトルで対応付けられるフレームt+1上の位置を求める。また、補間制御部161は、求めたフレームt+1上の画素の位置と内挿フレームの画素の位置から、それらの空間シフト量を求め、空間シフト量を空間フィルタ162−2に出力する。
さらに、補間制御部161は、内挿フレームの時間位相(時刻)に基づいてフレームtとフレームt+1の間における補間重みを求め、求めた補間重みを乗算器163−1と163−2に設定する。
例えば、内挿フレームの時刻が、時刻t+1から「k」だけ離れた時刻であり、かつ、時刻tから「1-k」だけ離れた時刻である場合(内挿フレームが時刻tと時刻t+1を1-k:kに内分する時刻に生成される場合)、補間制御部161は、乗算器163−1に「1-k」の補間重みを設定し、乗算器163−2に「k」の補間重みを設定する。
空間フィルタ162−1および162−2は、例えば、キュービックフィルタなどにより構成される。空間フィルタ162−1は、フレームt上の画素の画素値と、補間制御部161から供給されてきた空間シフト量に基づいて、内挿フレームの画素に対応するフレームt上の画素の画素値を求め、求めた画素値を乗算器163−1に出力する。
空間フィルタ162−2は、フレームt+1上の画素の画素値と、補間制御部161から供給されてきた空間シフト量に基づいて、内挿フレームの画素に対応するフレームt+1上の画素の画素値を求め、求めた画素値を乗算器163−2に出力する。
なお、内挿フレームの画素の位置が、フレームtまたはフレームt+1において画素以下の位置である場合、その画素以下位置の画素値は、例えば、周辺の4画素との距離に基づく上述した線形補間により求められる。
乗算器163−1は、空間フィルタ162−1から供給されてきたフレームt上の画素の画素値に、補間制御部161により設定された補間重み「1-k」を乗算し、重み付けされた画素値を加算器164に出力する。
乗算器163−2は、空間フィルタ162−2から供給されてきたフレームt+1上の画素の画素値に、補間制御部161により設定された補間重み「k」を乗算し、重み付けされた画素値を加算器164に出力する。
加算器164は、乗算器163−1から供給されてきた画素値と、乗算器163−2から供給されてきた画素値を加算することによって内挿フレームの画素の画素値を生成し、生成した内挿フレームの画素の画素値をバッファ165に出力する。
バッファ165は、加算器164から供給されてきた画素値に基づいて内挿フレームを生成し、生成した内挿フレームと、記憶しているフレームt+1を、予め設定されている60P信号の時間位相に応じたタイミングで出力する。バッファ165には、フレームt+1が外部から供給されており、それが記憶されている。
次に、図52のフローチャートを参照して、以上のような構成を有する画像補間部18の補間処理について説明する。この処理は、図5のステップS5において行われる処理である。
ステップS401において、補間制御部161は、内挿フレームの時間位相に基づいて、フレームtとフレームt+1の間における内挿フレームの補間重みを求め、求められた補間重みを乗算器163−1と163−2にそれぞれ設定する。
補間制御部161は、ステップS402において、内挿フレームの画素を選択する。例えば、内挿フレームの左上の画素を基準としてラスタ順に画素が選択される。
ステップS403において、補間制御部161は、選択した画素に割り付けられている動きベクトルを割付ベクトルメモリ15から取得し、内挿フレームの画素を基準として、取得した動きベクトルで対応付けられるフレームt上の位置を求める。また、補間制御部161は、求めたフレームt上の位置と内挿フレームの画素の位置から、それらの空間シフト量を求め、空間シフト量を空間フィルタ162−1に出力する。
同様に、補間制御部161は、内挿フレームの画素を基準として、取得した動きベクトルで対応付けられるフレームt+1上の位置を求める。また、補間制御部161は、求めたフレームt+1上の画素の位置と内挿フレームの画素の位置から、それらの空間シフト量を求め、空間シフト量を空間フィルタ162−2に出力する。
ステップS404において、空間フィルタ162−1と162−2は、フレームt,t+1上の画素の画素値と、補間制御部161から供給されてきた空間シフト量に基づいて、内挿フレームの画素に対応する各フレームの画素の画素値を求め、求めた画素値を乗算器163−1と163−2にそれぞれ出力する。
ステップS405において、乗算器163−1は、空間フィルタ162−1から供給されてきたフレームt上の画素の画素値に、補間制御部161により設定された補間重み「1-k」を乗算し、重み付けされた画素値を加算器164に出力する。また、乗算器163−2は、空間フィルタ162−2から供給されてきたフレームt+1上の画素の画素値に、補間制御部161により設定された補間重み「k」を乗算し、重み付けされた画素値を加算器164に出力する。
加算器164は、ステップS406において、乗算器163−1から供給されてきた画素値と、乗算器163−2から供給されてきた画素値を加算することによって内挿フレームの画素の画素値を生成し、生成した画素値をバッファ165に出力する。
補間制御部161は、ステップS407において、内挿フレームのすべての画素の処理が終了したか否かを判定し、すべての画素の処理が終了していないと判定した場合、ステップS402に戻り、それ以降の処理を繰り返す。
また、補間制御部161は、ステップS407において、内挿フレームのすべての画素の処理が終了したと判定した場合、画像補間処理を終了させる。その後、図5のステップS5に戻り、それ以降の処理が行われる。
以上のような、動きベクトルの検出処理、割付処理、割付補償処理、および補間処理からなる一連の処理により、24P−60Pのフレーム周波数変換が信号処理装置1において実現される。
以上においては、検出結果としての動きベクトルを選択する場合、内挿フレームの画素に割り付ける動きベクトルを選択する場合、および、補償する動きベクトルを選択する場合等のそれぞれの場合において、式(1)で求められる評価値DFDが用いられて動きベクトルの評価が行われるものとしたが、この評価値DFDは、式(1)から分かるように異なるフレームのある範囲における輝度値の差分の絶対値和であることから、評価値DFDを算出する対象となる範囲が、例えば、輝度値の変化の少ない平坦部に設定されたとき、その差分の絶対値和を正確に求めることができず、そのように正確さを欠く評価値DFDからは、より適した動きベクトルを選択することができないおそれがある。この、適した動きベクトルを選択することができないということは、結果として、生成される画像(フレーム)に破綻を生じさせることにつながることになる。
従って、平坦部などの輝度値の変化の少ない範囲を対象とした場合であっても差分を正確に表すことのできる評価値である偏差DFD(vDFD)が、動きベクトルの評価の際に用いられるようにしてもよい。この偏差DFDは、例えば2×2画素からなる着目ブロックの平均輝度値をオフセットとして対象範囲内の各画素の輝度値から差し引き、DC成分をカットしたものの差分の絶対値和であり、下式(13)により求められる。
ここで、m×nは偏差DFDを求める対象範囲である。また、Pavet+1,Pavetは対象範囲の画素の平均輝度値、Pt+1(x,y),Pt(x,y)は対象領域内の各画素の輝度値、Pmint+1,Pmintは対象領域内の最小輝度値である。
DC成分をカットした場合、輝度値の差を高い精度で検出することができるから、式(13)で求められるような偏差DFDが用いられることにより、平坦部などに演算範囲が設定されたときであっても動きベクトルの正しい評価を行うことが可能となる。
また、偏差DFDを用いた動きベクトルの評価が、式(1)で求められる評価値DFDを用いた評価に加えて行われることにより、双方の評価で正しいと判定されてはじめて動きベクトルが選択されることになり、より正確な動きベクトルを選択することができる。
なお、偏差DFDに替えて、下式(14)で求められるオフセット付きDFD(oDFD)が用いられ、それにより動きベクトルの評価が行われるようにしてもよい。
ここで、図53のフローチャートを参照して、以上のような偏差DFDを用いて動きベクトルの評価を行い、動きベクトルを補償する処理について説明する。この処理は、図49の処理に対応するものである。
ステップS501において、ベクトル補償部132の評価値演算部142は、着目画素について、0ベクトルを用いて式(1)から評価値DFD_zrを算出する。求められた評価値DFD_zrは補償処理部141に出力される。
ステップS502において、補償処理部141は、ステップS501で求められた評価値DFD_zrを最小評価値minDFDとしてメモリ151に記憶させる。
ステップS503において、ベクトル補償部132の評価値演算部142は、着目画素について、0ベクトルを用いて式(13)から偏差DFD(vDFD_zr)を算出する。求められた偏差DFD(vDFD_zr)も補償処理部141に出力される。
ステップS504において、補償処理部141は、0ベクトルを補償候補ベクトルとしてメモリ151に記憶させる。
ステップS505において、補償処理部141は、着目画素の周辺8画素のうちの1つの画素を選択する。例えば、周辺8画素のうち、右下の画素から逆ラスタ順に周辺画素が選択される。
補償処理部141は、ステップS506において、割付フラグメモリ16を参照して、ステップS505で選択した周辺画素に動きベクトルが存在するか否か、すなわち、その周辺画素の割付フラグが1(True)であるか否かを判定する。
ステップS506において、補償処理部141は、周辺画素に動きベクトルが存在すると判定した場合、ステップS507に進み、割付ベクトルメモリ15から、その周辺画素の動きベクトルを取得する。このとき、評価値演算部142に対しても、周辺画素の動きベクトルが割付ベクトルメモリ15から供給される。
ステップS508において、評価値演算部142は、ステップS507で取得された動きベクトルを用いて式(13)から偏差DFD(vDFD_tmp)を算出する。求められた偏差DFD(vDFD_tmp)は補償処理部141に出力される。
補償処理部141は、ステップS509において、評価値演算部142から供給されてきた偏差DFD(vDFD_tmp)が、メモリ151に記憶されている、ステップS503で求められた偏差DFD(vDFD_zr)に所定のパラメータである値TH_cmpを加算したものより小さいか否かを判定する。
ステップS509において、補償処理部141は、偏差DFD(vDFD_tmp)が、偏差DFD(vDFD_zr)に値TH_cmpを加算したものより小さいと判定した場合、ステップS510に進み、ステップS507で取得された動きベクトルを用いて式(1)から評価値DFD_tmpを算出する。求められた評価値DFD_tmpは補償処理部141に出力される。
ステップS511において、補償処理部141は、ステップS510で算出された評価値DFD_tmpが、メモリ151に記憶されている着目画素の最小評価値minDFDより小さいか否かを判定する。
補償処理部141は、ステップS511において、評価値DFD_tmpが最小評価値minDFDより小さいと判定した場合、ステップS512に進み、メモリ151に記憶されている最小評価値minDFDを、動きベクトルを用いて求められた評価値DFD_tmpに書き換える。
また、補償処理部141は、ステップS513において、メモリ151に記憶されている補償候補ベクトルを、ステップS507で取得された動きベクトルに書き換え、ステップS514に進む。
一方、ステップS506において、周辺画素の割付フラグが0(False)であることから、周辺画素に割り付けられている動きベクトルがないと判定した場合、補償処理部141は、ステップS507乃至S513の処理をスキップし、ステップS514に進む。
また、ステップS511において、補償処理部141は、評価値DFD_tmpが、メモリ151に記憶されている最小評価値minDFD以上であると判定した場合、ステップS512,S513の処理をスキップし、ステップS514に進む。
ステップS514において、補償処理部141は、着目画素の周辺画素のすべての処理が終了したか否かを判定し、すべての処理が終了していないと判定した場合、ステップS505に戻り、次の周辺画素を選択して、それ以降の処理を繰り返す。
また、ステップS509において、補償処理部141は、偏差DFD(vDFD_tmp)が、偏差DFD(vDFD_zr)に値TH_cmpを加算したもの以上であると判定した場合も同様に、ステップS505に戻り、それ以降の処理を繰り返す。
補償処理部141は、ステップS514において、着目画素の周辺画素のすべての処理が終了したと判定した場合、ベクトル補償処理を終了する。その後、図48のステップS303に戻り、それ以降の処理が行われる。
以上のように、動きベクトルの評価が、偏差DFDと、式(1)より求められる評価値DFDとの2つの基準によって行われることにより、2つの基準を満たす、より正確な動きベクトルで補償することが可能となる。
なお、上述したように、偏差DFDを用いた動きベクトルの評価は、動きベクトルの補償のとき以外のときにも用いることができる。
次に、図54のフローチャートを参照して、偏差DFDを用いて動きベクトルの評価を行い、初期ベクトルを選択する処理について説明する。この処理は、図22の処理に対応するものである。なお、ここでは、処理の開始時、初期候補ベクトルとして0ベクトルが設定されるものとする(図22のステップS36以降の処理に対応する)。
ステップS521において、初期ベクトル選択部31の評価値演算部55(図7)は、着目ブロックについて、0ベクトルを用いて式(1)から評価値DFD_zrを算出する。求められた評価値DFD_zrは評価値比較部56に出力される。
ステップS522において、評価値比較部56は、ステップS521で求められた評価値DFD_zrを最小評価値minDFDとして最適候補格納用レジスタ57に記憶させる。
ステップS523において、評価値演算部55は、着目ブロックについて、0ベクトルを用いて式(13)から偏差DFD(vDFD_zr)を算出する。求められた偏差DFD(vDFD_zr)も評価値比較部56に出力される。
ステップS524において、評価値比較部56は、0ベクトルを初期候補ベクトルとして最適候補格納用レジスタ57に記憶させる。
ステップS525において、評価値演算部55は、周辺画素のうちの1つの画素を選択する。
評価値演算部55は、ステップS526において、ステップS525で選択した周辺画素に動きベクトルが存在するか否かを判定する。
ステップS526において、評価値演算部55は、周辺画素に動きベクトルが存在すると判定した場合、ステップS527に進み、その周辺画素の動きベクトルを取得する。例えば、検出ベクトル取得部52により検出ベクトルメモリ13から読み出された周辺画素の動きベクトルは、オフセット位置演算部54を介して評価値演算部55に出力される。
ステップS528において、評価値演算部55は、ステップS527で取得した動きベクトルを用いて式(13)から偏差DFD(vDFD_tmp)を算出する。求められた偏差DFD(vDFD_tmp)は評価値比較部56に出力される。
評価値比較部56は、ステップS529において、評価値演算部55から供給されてきた偏差DFD(vDFD_tmp)が、最適候補格納用レジスタ57に記憶されている、ステップS523において求められた偏差DFD(vDFD_zr)に所定のパラメータである値TH_cmpを加算したものより小さいか否かを判定する。
ステップS529において、評価値演算部55は、偏差DFD(vDFD_tmp)が、着目画素の最小評価値minDFDに値TH_cmpを加算したものより小さいと判定した場合、ステップS530に進み、ステップS527で取得された動きベクトルを用いて式(1)から評価値DFD_tmpを算出する。求められた評価値DFD_tmpは評価値比較部56に出力される。
ステップS531において、評価値比較部56は、ステップS530で算出された評価値DFD_tmpが、最適候補格納用レジスタ57に記憶されている最小評価値minDFDより小さいか否かを判定する。
評価値比較部56は、ステップS531において、評価値DFD_tmpが最小評価値minDFDより小さいと判定した場合、ステップS532に進み、最適候補格納用レジスタ57に記憶されている最小評価値minDFDを、動きベクトルを用いて求められた評価値DFD_tmpに書き換える。
また、評価値比較部56は、ステップS533において、最適候補格納用レジスタ57に記憶されている初期候補ベクトルを、ステップS527で取得された動きベクトルに書き換え、ステップS534に進む。
一方、ステップS526において、周辺画素に動きベクトルがないと判定した場合、評価値演算部55は、ステップS527乃至S533の処理をスキップし、ステップS534に進む。
また、ステップS531において、評価値比較部56は、評価値DFD_tmpが、最適候補格納用レジスタ57に記憶されている最小評価値minDFD以上であると判定した場合、ステップS532,S533の処理をスキップし、ステップS534に進む。
ステップS534において、評価値演算部55は、全ての候補ベクトルの処理を終了したか否かを判定し、すべての処理が終了していないと判定した場合、ステップS525に戻り、それ以降の処理を繰り返し実行する。
また、ステップS529において、評価値演算部55は、偏差DFD(vDFD_tmp)が、偏差DFD(vDFD_zr)に値TH_cmpを加算したもの以上であると判定した場合も同様に、ステップS525に戻り、それ以降の処理を繰り返す。
評価値演算部55は、ステップS534において、すべての候補ベクトルの処理が終了したと判定した場合、ステップS535に進み、最適候補格納用レジスタ57に記憶されている初期候補ベクトルを初期ベクトルV0として確定し、出力させる。その後、図21のステップS22に戻り、それ以降の処理が行われる。
以上のように、偏差DFDを用いた動きベクトルの評価は、動きベクトルの割付補償のとき以外にも採用することができる。
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラム記録媒体からインストールされる。
図55は、上述した一連の処理をプログラムにより実行するパーソナルコンピュータの構成の例を示すブロック図である。
CPU(Central Processing Unit)201は、ROM(Read Only Memory)202、または記憶部208に記憶されているプログラムに従って各種の処理を実行する。RAM(Random Access Memory)203には、CPU201が実行するプログラムやデータなどが適宜記憶される。CPU201、ROM202、およびRAM203は、バス204により相互に接続されている。
CPU201にはまた、バス204を介して入出力インタフェース205が接続されている。入出力インタフェース205には、キーボード、マウス、マイクロホンなどよりなる入力部206、ディスプレイ、スピーカなどよりなる出力部207が接続されている。CPU201は、入力部206から入力される指令に対応して各種の処理を実行する。そして、CPU201は、処理の結果を出力部207に出力する。
入出力インタフェース205に接続されている記憶部208は、例えばハードディスクからなり、CPU201が実行するプログラムや各種のデータを記憶する。通信部209は、インターネットやローカルエリアネットワークなどのネットワークを介して外部の装置と通信する。
また、通信部209を介してプログラムを取得し、記憶部208に記憶してもよい。
入出力インタフェース205に接続されているドライブ210は、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア211が装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて記憶部208に転送され、記憶される。
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを格納するプログラム記録媒体は、図55に示すように、磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク、もしくは半導体メモリなどよりなるパッケージメディアであるリムーバブルメディア211、または、プログラムが一時的もしくは永続的に格納されるROM202や、記憶部208を構成するハードディスクなどにより構成される。プログラム記録媒体へのプログラムの格納は、必要に応じてルータ、モデムなどのインタフェースである通信部209を介して、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の通信媒体を利用して行われる。
なお、本明細書において、プログラム記録媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
1 信号処理装置, 11 フレームメモリ, 12 ベクトル検出部, 13 検出ベクトルメモリ, 14 ベクトル割付部, 15 割付ベクトルメモリ, 16 割付フラグメモリ, 17 割付補償部, 18 画像補間部