(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、従来の勾配法により動き推定を行う場合には、動き量と同程度の大きさの点拡がり関数によって画像をぼかしてから勾配演算を行わなければならないため、大きな動き量を推定できるようにするためには、画像を大きくぼかす必要がある。しかし、画像を大きくぼかすと、動きの異なる領域のテクスチャが混合する可能性が高くなり、推定精度を低下させる要因となる。このように、画像のぼかし量を一定とした場合には、動きの大きい場合の動き推定の頑健性を維持しつつ、動きの小さい場合の動き推定の精度を向上させることは困難であった。
【0009】
かかる事情に鑑みてなされた本発明の目的は、映像信号の動きベクトルを推定する際に、動きの大きい場合の動き推定の頑健性を維持しつつ、動きの小さい場合の動き推定の精度を向上させることが可能な動き推定装置及びプログラムを提供することにある。
【課題を解決するための手段】
【0010】
上記課題を解決するため、本発明に係る動き推定装置は、入力映像信号から動きベクトルを推定する動き推定装置であって、
入力映像信号に対してフィルタ係数を用いて畳み込み演算を行い、畳み込み演算後の入力映像信号から
勾配法により動きベクトルを推定するn個(n≧2)の動き推定部と、前記動きベクトルに基づいて
前記フィルタ係数を決定
し、前記動きベクトルの大きさが大きいほど、前記フィルタ係数の畳み込みカーネルのサイズを大きくする(n−1)個の係数制御部とを備え、前記動き推定部及び前記係数制御部は交互に直列に接続され、各係数制御部は、前段に接続された動き推定部から入力される動きベクトルに基づいて、後段に接続される動き推定部のフィルタ係数を決定し、前記n個の動き推定部のうちの最後段の動き推定部によって推定された動きベクトルを当該動き推定装置の出力とすることを特徴とする。
【0012】
さらに、本発明に係る動き推定装置において、前記動き推定部は、入力信号を1クロック遅延させた1クロック遅延信号を出力する第1のシフトレジスタと、前記入力信号を1ライン遅延させた1ライン遅延信号を出力する第2のシフトレジスタと、前記入力信号を1フレーム遅延させた1フレーム遅延信号を出力する第3のシフトレジスタと、前記入力信号及び前記1クロック遅延信号の差分値B
X、前記入力信号及び前記1ライン遅延信号の差分値B
Y、並びに前記入力信号及び前記1フレーム遅延信号の差分値B
tを算出する第1の減算回路と、を有する差分演算部と、前記B
y、B
t、及びB
xを入力し、B
y・B
t、B
x・B
y、B
x・B
t、B
y2、及びB
x2をそれぞれ算出する第1の乗算回路と、前記第1の乗算回路から入力される信号を1クロックずつ遅延させる複数の第4のシフトレジスタと、前記第1の乗算回路から入力される信号及び前記複数の第4のシフトレジスタの出力値を加算する第1の加算回路と、前記第1の加算回路から入力される信号を1ラインずつ遅延させる複数の第5のシフトレジスタと、前記第1の加算回路から入力される信号及び前記複数の第5のシフトレジスタの出力値を加算する第2の加算回路と、を有し、前記B
y・B
tの所定ブロック内の総和値U、前記B
x・B
yの前記所定ブロック内の総和値R、前記B
x・B
tの前記所定ブロック内の総和値T、前記B
y2の前記所定ブロック内の総和値Q、及び前記B
x2の前記所定ブロック内の総和値Pを算出する総和演算部と、前記総和演算部の演算結果を入力し、R・U、R・T、Q・T、P・Q、P・U、及びR
2をそれぞれ算出する第2の乗算回路と、前記第2の乗算回路の演算結果を入力し、Q・T−R・U、R
2−P・Q、及びP・U−R・Tをそれぞれ算出する第2の減算回路と、前記第2の減算回路の演算結果を入力し、(Q・T−R・U)/(R
2−P・Q)、及び(P・U−R・T)/(R
2−P・Q)をそれぞれ算出する除算回路と、を備えることを特徴とする。
【0013】
さらに、本発明に係る動き推定装置において、前記
動き推定部は、前記差分演算部の前段に前記畳み込み演算を行う畳込部を備え、前記畳込部は、シフトレジスタ、加算回路、及び乗算回路を用いて、所定のブロック内で前記入力映像信号及び前記フィルタ係数の積和演算を行うことを特徴とする。
【0014】
さらに、本発明に係る動き推定装置において、前記
係数制御部は、前記動き推定部から入力される動きベクトルの水平成分及び垂直成分の各大きさに応じて、前記フィルタ係数の畳み込みカーネルの水平方向及び垂直方向のサイズを制御すること特徴とする。
【0016】
さらに、本発明に係る動き推定装置において、前記係数制御部は、前記動き推定部から入力される動きベクトルの水平成分及び垂直成分の各大きさに応じて、前記フィルタ係数の
畳み込みカーネルの水平方向及び垂直方向の
サイズを制御することを特徴とする。
【0017】
さらに、本発明に係る動き推定装置において、前記係数制御部により決定されるフィルタ係数の
畳み込みカーネルのサイズは、該係数制御部よりも前段に配置された係数制御部により決定されるフィルタ係数の
畳み込みカーネルのサイズを超えないことを特徴とする。
【0018】
さらに、本発明に係る動き推定装置において、前記係数制御部は、フィルタ係数列を複数組み記憶したフィルタ係数テーブルを備え、前記動き推定部から入力される動きベクトルに応じて、前記フィルタ係数テーブルからフィルタ係数を選択することを特徴とする。
【0019】
また、上記課題を解決するため、本発明に係るプログラムは、コンピュータを、上記動き推定装置として機能させることを特徴とする。
【発明の効果】
【0020】
本発明によれば、映像信号の動きベクトルを推定する際に、階層化を行うことなく、動きの大きい場合の動き推定の頑健性を維持しつつ、動きの小さい場合の動き推定の精度を向上させることができるようになる。
【発明を実施するための形態】
【0022】
以下、本発明の一実施形態について、図面を参照して詳細に説明する。
【0023】
図1は、本発明の一実施形態に係る動き推定装置の構成を示すブロック図である。
図1に示す例では、動き推定装置1は、n個(n≧2)の動き推定部10と、(n−1)個の係数制御部20と、(n−1)個の遅延部30とを備える。動き推定部10及び係数制御部20は交互に直列に接続される。
図1は、n=2の場合を示しており、動き推定装置1は、2個の動き推定部10(10−1及び10−2)と、1個の係数制御部20と、1個の遅延部30とを備える。
【0024】
動き推定部10−1は、入力映像信号I、及び畳み込み演算に用いられるフィルタ係数H
(1)に基づいて動きベクトルV
(1)を推定し、係数制御部20に出力する。動き推定部10の詳細については後述する。
【0025】
遅延部30は、動き推定部10−1における動き推定の遅延を補償するために、入力映像信号Iを遅延させて動き推定部10−2に出力する。遅延部30は例えばシフトレジスタによって実現される。動き推定部10−1がクロックのカウント値c(cは整数)の時点で出力する動きベクトルが、入力映像信号Iのクロックのカウント値c
0時点の画素位置に対応する場合には、入力映像信号Iをc−c
0クロックだけ遅延させる。
【0026】
係数制御部20は、前段(入力側)の動き推定部10−1により生成される動きベクトルV
(1)=(u
(1),v
(1))に基づいて、後段(出力側)の動き推定部10−2の畳み込み演算に用いられるフィルタ係数H
(2)を決定し、動き推定部10−2に出力する。係数制御部20の詳細については後述する。
【0027】
動き推定部10−2は、遅延部30によって遅延された入力映像信号I、及び係数制御部20によって決定されたフィルタ係数H
(2)に基づいて動きベクトルV
(2)を推定する。
【0028】
次に、動き推定部10の詳細について説明する。本実施形態では、勾配法を用いて動き推定を行うが、ブロックマッチング法により動き推定をおこなってもよい。
【0029】
図2は、勾配法を用いて動き推定を行う動き推定部10の構成を示すブロック図である。
図2に示す例では、動き推定部10は、畳込部11と、差分演算部12と、乗算回路13(13−1乃至13−5)と、総和演算部14(14−1乃至14−5)と、乗算回路15(15−1乃至15−6)と、減算回路16(16−1乃至16−3)と、除算回路17(17−1及び17−2)とを備える。
【0030】
畳込部11は、動きベクトル推定の前処理として、ラスタスキャンによって画素値がクロックごとに順次入力される入力映像信号Iに対して、フィルタ係数Hを用いて畳込演算を行う。映像信号を構成するフレームの画像サイズを水平L画素、垂直M画素とおき、時刻t、画像座標(i,j)(i∈{0,1,…,L−1}、j∈{0,1,…,M−1})における画素値をI(t;i,j)とおく。ラスタスキャンにより、第cクロックにおいて、式(1)に示す画素値I(c)が入力される。ここに、c%LはcをLで除したときの剰余を表す。
はzより大きくない最大の整数を表す。また、Fは1フレーム内の画素数(すなわち、F=L・M)を表すものとする。
【0032】
図3は、畳込部11の構成例を示すブロック図である。畳込部11は、所定のブロック内で入力信号とフィルタ係数との積和演算を行うためのシフトレジスタ、加算回路、及び乗算回路を有する。
図3に示す例では、畳込部11は、シフトレジスタ111(111−1乃至111−4)と、乗算回路112(112−1乃至112−5)と、加算回路113と、シフトレジスタ114(114−1乃至114−4)と、乗算回路115(115−1乃至115−5)と、加算回路116とを備える。
【0033】
ここで、所望の畳込係数列(畳込カーネル)のサイズを水平K
x画素、垂直K
y画素とし、座標(i,j)(i∈(0,1,…,K
x−1)、j∈(0,1,…,K
y−1))における畳込係数をC(i,j)とおく。
図3では畳込カーネルのサイズを5×5とする場合の構成を示しているが、実際には、シフトレジスタ111はK
x−1個の遅延要素によって構成され、乗算回路112はK
x個の乗算回路により構成され、シフトレジスタ114はK
y−1個の遅延要素により構成され、乗算回路115はK
y個の乗算回路により構成されるものとする。
【0034】
シフトレジスタ111は、入力信号Iを1クロックずつ遅延させて出力する。
【0035】
乗算回路112は、入力信号、及びシフトレジスタ111の遅延要素の各出力に対してそれぞれスカラーg
0,g
1,…,g
4を乗じ、乗算値を加算回路113に出力する。
【0036】
加算回路113は、乗算回路112から入力される乗算値の総和値A(c)を求め、シフトレジスタ114−1及び乗算回路115−1に出力する。A(c)は、式(2)で表される。
【0038】
シフトレジスタ114は、入力信号を1ライン(すなわちLクロック)ずつ遅延させて出力する。
【0039】
乗算回路115は、加算回路113の出力、及びシフトレジスタ114の遅延要素の各出力に対してそれぞれスカラーh
0,h
1,…,h
4を乗じ、乗算値を加算回路116に出力する。
【0040】
加算回路116は、乗算回路115の出力値の総和値B(c)を求め、差分演算部12に出力する。B(c)は、式(3)で表される。
【0042】
この演算結果は、座標(i,j)における値がg
j・h
jとなる2次元関数を、入力系列値I(c)を画像内の矩形の右下とし、水平K
x画素、垂直K
Y画素の矩形内において入力系列値I(c)を2次元的に畳み込んだ結果に一致する。
【0043】
以上、畳込部11の処理について説明したが、動き推定装置1の入力側に設けられる動き推定部10−1においては、畳込部11を備えないで、入力映像信号Iを差分演算部12に直接入力するようにしてもよい。その場合には、フィルタ係数H
(1)を入力する必要はない。また、動き推定部10−1及び動き推定部10−2は、各々に内在する畳込部11のタップ長が異なっても同一であってもよい。
【0044】
再び
図2の説明に戻る。差分演算部12は、シフトレジスタ121(121−1乃至121−3)と、減算回路122(122−1乃至122−3)とを備える。差分演算部12の入力信号をBとし、その第cクロックにおける画素値をB(c)とする。
【0045】
シフトレジスタ121−1は、入力信号Bを1クロック遅延させて1クロック遅延画素値B(c−1)を出力する。シフトレジスタ121−2は、入力信号Bを1ライン(すなわちLクロック)遅延させて1ライン遅延画素値B(c−L)を出力する。シフトレジスタ121−3は、入力信号Bを1フレーム(すなわちF=L・Mクロック)遅延させて1フレーム遅延画素値B(c−F)を出力する。
【0046】
減算回路122−1は、入力画素値B(c)と、シフトレジスタ121−1から出力される1クロック遅延画素値B(c−1)との差分を演算し、水平差分値B
X(c)を出力する。すなわち、B
X(c)=B(c)−B(c−1)である。
【0047】
減算回路122−2は、入力画素値B(c)と、シフトレジスタ121−2から出力される1ライン遅延画素値B(c−L)との差分を演算し、垂直差分値B
Y(c)を出力する。すなわち、B
Y(c)=B(c)−B(c−L)である。
【0048】
減算回路122−3は、入力画素値B(c)と、シフトレジスタ121−3から出力される1フレーム遅延画素値B(c−F)との差分を演算し、時間差分値B
t(c)を出力する。すなわち、B
t(c)=B(c)−B(c−F)である。
【0049】
乗算回路13は、B
y(c)・B
t(c)、B
x(c)・B
y(c)、B
x(c)・B
t(c)、B
y(c)・B
y(c)、及びB
x(c)・B
x(c)をそれぞれ求め、その結果を総和演算部14に出力する。
【0050】
総和演算部14は、画像内における水平サイズT
x画素、垂直サイズT
yの矩形ブロック内において乗算回路13から入力される乗算値の総和をそれぞれ求め、その結果を乗算回路15に出力する。総和演算部14−1乃至14−5はすべて同じ構成で実現できる。
【0051】
図4は、総和演算部14の構成を示すブロック図である。
図4に示す例では、総和演算部14は、シフトレジスタ141(14−1乃至14−4)と、加算回路142と、シフトレジスタ143(143−1乃至143−4)と、加算回路144とを備える。総和演算部14の入力信号Dの第cクロックにおける画素値をD(c)とする。
【0052】
シフトレジスタ141は、入力信号Dを1クロック遅延させて出力する。
図4では4個の遅延要素により構成されているが、実際にはT
x−1個の遅延要素によって構成されるものとする。
【0053】
加算回路142は、画素値D(c)及びシフトレジスタ141の各出力の総和値E(c)を算出する。総和値E(c)は式(4)で表される。
【0055】
シフトレジスタ143は、入力信号を1ライン(すなわちLクロック)遅延させて出力する。
図4では4個の遅延要素により構成されているが、実際にはT
y−1個の遅延要素によって構成されるものとする。
【0056】
加算回路144は、加算回路142の出力値及びシフトレジスタ143の各出力の総和値F(c)を算出する。総和値F(c)は式(5)で表される。これは、入力系列値D(c)を画像内の矩形の右下とし、水平T
x画素、垂直T
y画秦の矩形内において2次元的に入力系列値D(c)を総和した結果に一致する。
【0058】
再び
図2の説明に戻る。総和演算部14は、乗算回路13の結果をそれぞれ画像内の水平T
x画素、垂直T
y画素の矩形内において総和演算を実行する。総和演算部14−1乃至14−5の演算結果U(c)、R(c)、T(c)、Q(c)、及びP(c)は、それぞれ式(6)乃至式(10)で表される。
【0060】
乗算回路15は、R(c)・U(c)、R(c)・T(c)、Q(c)・T(c)、P(c)・Q(c)、P(c)・U(c)、及びR(c)
2をそれぞれ求め、その結果を減算回路16に出力する。
【0061】
減算回路16−1は、乗算回路15−3の出力値Q(c)・T(c)から乗算回路15−1の出力値R(c)・U(c)を減じた減算値(Q(c)・T(c)−R(c)・U(c))を除算回路17−1に出力する。減算回路16−2は、乗算回路15−6の出力値R(c)
2から乗算回路15−4の出力値P(c)・Q(c)を減じた減算値(R(c)
2−P(c)・Q(c))を除算回路17−1及び17−2に出力する。減算回路16−3は、乗算回路15−5の出力値P(c)・U(c)から乗算回路15−2の出力値R(c)・T(c)を減じた減算値(P(c)・U(c)−R(c)・T(c))を除算回路17−2出力する。
【0062】
除算回路17−1は、減算回路16−1の出力値を減算回路16−2の出力値により除した除算値u(c)を出力する。除算回路17−2は、減算回路16−3の出力値を減算回路16−2の出力値により除した除算値v(c)を出力する。除算値u(c)及びv(c)はそれぞれ式(11)及び(12)で表される。このようにして得られるベクトル(u(c),v(c))は、勾配法による動きベクトルに相当する。動きベクトルはクロックごとにラスタスキャン順序にて画素単位で更新される。
【0064】
図5は、動き推定装置1が出力する動きベクトルの対象画素を説明する図である。クロックcの時点で入力映像として入力された画素位置が
図5中のI
P(c)の位置である場合、当該時点で得られる動きベクトル(u(c),v(c))は、
図5の領域100内の画素値列に対して演算した結果となっている。典型的にはクロックcの時点で出力される動きベクトル(u(c),v(c))は領域100の中心画素における動きを表している。なお、動き推定部10−1が畳込部11を備えない場合には、領域100は水平方向にT
x−1画素、垂直方向にT
y−1画素の領域となる。
【0065】
図6は、動き推定装置1が出力する動きベクトルの有効領域及び無効領域を説明する図である。
図6(a)に示すように、クロックcの時点の入力画素の位置I
P(c)が入力画像の端寄りに存在する場合には、演算に用いられた画素値列が、
図6の領域200及び領域201のように別々に割れてしまうことや、フレームを跨いでしまうことがある。このような場合に得られる動きベクトル(u(c),v(c))は信頼できない。そのため、入力画像の位置I
P(c)が
図6(b)に示す領域300内に位置する場合には、動きベクトルを動き推定部10から出力しないなどして利用しないようにし、入力画像の位置I
P(c)が領域301内に位置する場合のみ、その動きベクトルを利用することが好ましい。
【0066】
あるいは、動き推定部10の前段にて、入力フレームの大きさを左及び上方向にそれぞれK
x+T
x−2画素及びK
y+T
y−2画素分だけ拡張することで、元の入力映像Iの画面全体をカバーする動きベクトルを得ることもできる。このときの拡張には、0次外挿(最近傍補間)を用いることが好ましい。
【0067】
再び
図1の説明に戻る。動き推定部10−1には、入力映像I及びフィルタ係数H
(1)が入力される。フィルタ係数H
(1)は例えば固定係数とし、その点拡がりは想定される動きベクトルの最大値を半径とする円内程度に設定する。例えば、動きベクトルの大きさとして、最大2画素を想定する場合には、半径2画素程度の拡がりを有する平滑化フィルタの係数をフィルタ係数H
(1)として与える。例えば、フィルタ係数H
(1)として、水平フィルタ係数g。乃至g
4及び垂直フィルタ係数h
0乃至h
4にそれぞれガウシアンや移動平均フィルタの係数を設定する。具体的には、例えば、g
0=g
1=g
2=g
3=g
4=h
0=h
1=h
2=h
3=h
4=1/5とする。
【0068】
次に、係数制御部20の詳細について説明する。係数制御部20は、動き推定部10−1の出力する動きベクトルV
(1)=(u
(1),v
(1))に基づき、出力するフィルタ係数H
(2)を決定する。係数制御部20は、例えば、動きベクトルV
(1)の大きさが大きいほど、点拡がり(畳込カーネルのサイズ)の大きいフィルタ係数H
(2)を出力する。あるいは、係数制御部20は、動きベクトルV
(1)の水平成分u
(1)及び垂直成分v
(1)のそれぞれの大きさに応じて、水平方向の点拡がりと垂直方向の点拡がりを独立に制御してもよい。
【0069】
図7は、係数制御部20の構成を示すブロック図である。
図7に示す例では、係数制御部20は、フィルタ選択部21と、フィルタ係数テーブル22とを備える。
【0070】
フィルタ選択部21は、入力された動きベクトルV
(1)の大きさ、又は入力された動きベクトルの水平成分u
(1)及び垂直成分v
(1)の大きさに応じて、出力すべきフィルタ係数H
(2)の点拡がりを制御する。フィルタ選択部21は、動きベクトルV
(1)の水平成分u
(1)及び垂直成分v
(1)の大きさに応じて、出力すべきフィルタ係数の拡がりを制御する場合、例えば式(13)に示すような闘値処理によって、選択出力すべきフィルタを識別するインデックスwの値を決定する。
【0072】
式(13)において、θ
x及びθ
yは、動きベクトルV
(1)の水平成分u
(1)及び垂直成分v
(1)に対してその絶対値の大小を判定するための閥値であり、いずれも正の実数とする。例えば、θ
x=2、θ
y=2とすると、水平成分u
(1)の大きさが2画素より大きいか否か、垂直成分v
(1)の大きさが2画素より大きいか否かの組み合わせによって、wの値が0乃至3に決定される。
【0073】
フィルタ係数H
(2)の点拡がりの大きさは、フィルタ係数H
(1)の点拡がりの大きさを超えないようにするのが好適である。なお、動き推定部10−1が畳込部11を備えない場合については、フィルタ係数H
(1)は入力されないが、点拡がりの大きさが無限大のフィルタ係数H
(1)が入力されているとみなすと、フィルタ係数H
(2)の点拡がりの大きさはフィルタ係数H
(1)よりも小さいといえる。
【0074】
フィルタ係数テーブル22は、インデックスwごとに出力すべきフィルタ係数H
(2)が記憶されているルックアップテーブルを備える。フィルタ係数テーブル22は、入力されたインデックスwの値に応じてルックアップテーブルを参照し、インデックスwに対応付けられたフィルタ係数をフィルタ係数H
(2)として出力する。
【0075】
図7のフィルタ係数テーブル22の吹き出しにルックアップテーブルの一例を示す。このルックアップテーブルによれば、フィルタ係数テーブル22からはフィルタ係数H
(2)として、インデックスw=0のときには3×3画素の移動平均フィルタが、インデックスw=1のときには5×3画素の移動平均フィルタが、インデックスw=2のときには3×5画素の移動平均フィルタが、インデックスw=3のときには5×5画素の移動平均フィルタが、それぞれ出力される。
【0076】
図1に示す実施形態では、動き推定装置1が動き推定部10を2個備える場合について説明したが、動き推定部10を3個以上備えてもよい。
図8は、動き推定部10を3個備える場合の動き推定装置1の構成を示すブロック図である。
【0077】
後段に配置される係数制御部20により決定されるフィルタ係数の点拡がりの大きさ(畳込カーネルのサイズ)は、前段に配置される係数制御部20により決定されるフィルタ係数の点拡がりの大きさを超えないようにするのが好適である。以下に具体例を述べる。例えば、動き推定部10−1に入力されるフィルタ係数H
(1)の畳込カーネルのサイズを65×65画素とする。係数制御部20−1は動きベクトルV
(1)の大きさを判定し、20画素よりも大きい場合にはフィルタ係数H
(2)の畳込カーネルのサイズを51×51画素とし、20画素以下である場合にはフィルタ係数H
(2)の畳込カーネルのサイズを41×41画素とする。係数制御部20−2は動きベクトルV
(2)の大きさを判定し、20画素よりも大きい場合にはフィルタ係数H
(2)の畳込カーネルのサイズを51×51画素とし、10画素よりも大きく20画素以下である場合にはフィルタ係数H
(2)の畳込カーネルのサイズを41×41画素とし、10画素以下である場合にはフィルタ係数H
(2)の畳込カーネルのサイズを21×21画素とる。
【0078】
上述したように、動き推定装置1は、入力映像信号から動きベクトルを推定するn個(n≧2)の動き推定部10−1乃至10−nと、動きベクトルに基づいて畳み込み演算に用いられるフィルタ係数を決定する、(n−1)個の係数制御部20−1乃至20−(n−1)とを備え、動き推定部10及び係数制御部20は交互に直列に接続され、各係数制御部20−k(1≦k≦n−1)は、前段に接続された動き推定部10−kから出力される動きベクトルに基づいて、後段に接続される動き推定部10−(k+1)のフィルタ係数を決定し、最後段の動き推定部10−nによって推定された動きベクトルV
(n)を出力する。
【0079】
かかる構成により、動き推定装置1は、まず前段の動き推定部10によっておおまかな動きベクトルを求め、この動きベクトルの大きさや方向に応じてその後段の動き推定部10においてフィルタ係数の点拡がりを制御することができる。かくして、階層化を行うことなく、大きな動きベクトルから小さな動きベクトルまで頑健に算出することができ、小さな動きベクトルはより高精度に算出することが可能となる。
【0080】
ここで、最前段の動き推定部10−1も、外部から入力されるフィルタ係数H
(1)を用いて畳み込み演算を行うのが好適である。このような構成にすることにより、映像信号に含まれる雑音が動きベクトルに与える悪影響を抑えることができるほか、動きベクトルが大きい場合(総和演算部14が総和演算を行うブロックの大きさ程度よりも大きい場合)においても動き推定が可能となる。
【0081】
動き推定部10は、ブロックマッチング法により動きベクトルを推定してもよい。ただし、ブロックマッチング法においては、探索先の画像内においてブロック領域をずらしながら相関演算あるいは誤差演算(以下、相関演算等)を行う必要がある。そのため、ソフトウェア処理では繰り返しループが必要であり、演算処理時間がかかる。また、ハードウェア処理では、例えば、シフトレジスタによって構成されるラインメモリを複数ライン分確保し、該メモリに探索先の画像を構成する画素値をクロックに従って順次入力し、相関演算等をとるべき画素群の対を、相関演算等を行う演算器へ配線して、相関演算等を実行する。このとき、探索元の画像内のある1ブロックにつき、探索先の画像内における複数の位置のブロック群に対して、それぞれ相関等の演算を行う必要がある。このため、探索元の1ブロック内の画素列と、探索先の1ブロック内の画素列とを相関演算器に全て配線したとしても、探索元のブロック位置の総数と、探索先の探索領域内のブロック位置の総数の積の回数だけシフトレジスタをシフトさせなければフレーム内の動きベクトルを求めることができない。シフトレジスタのシフト回数を減らすためには、異なる複数のブロック対に対して並列的に配線を行う必要がある。いずれにしても、例えばFPGA(Field-Programmable Gate Array)等による論理部・順序部においてブロックマッチングを実装することは、ハードウェア規模及び演算処理時間の観点で高コストである。
【0082】
そこで、動き推定部10は、勾配法により動きベクトルを推定するのが好適である。勾配法においては、さまざまな大きさの動きに対応させるためには、多くの階層を有する階層化手法を用いることも考えられるが、ソフトウェア、ハードウェアいずれの実装に置いても演算コストや所要リソースの観点で不利である。そこで動き推定部10を、
図2乃至
図4を参照して説明した回路構成とし、階層化を行わないで動き推定をするのがより好適である。上述したように、動き推定部10は、シフトレジスタと、乗算回路、加算回路、減算回路、及び除算回路17によって動きベクトルVを順次オンラインで演算することができる。ハードウェア規模が大きくなる要因である除算回路17はわずか2個であり、他はフリップフロップとDSP(Digital Signal Processor)で容易に実現できるため、演算回路を小規模化でき、演算処理時間も短縮することが可能となる。
【0083】
また、上述したように、係数制御部20は、動き推定部10から入力される動きベクトルの大きさに応じて、フィルタ係数の点拡がりを制御するか、あるいは、動きベクトルの水平成分及び垂直成分の各大きさに応じて、フィルタ係数の水平方向及び垂直方向の点拡がりを制御する。そして、後段に配置された係数制御部20により決定されるフィルタ係数の点拡がりの大きさが前段に配置された係数制御部20により決定されるフィルタ係数の点拡がりの大きさを超えないようにする。かかる構成により、動きベクトルに応じて適応的にフィルタ係数を決定することができ、動きの大きい場合の動き推定の頑健性と動きの小さい場合の動き推定の精度とを両立して向上させることができる。
【0084】
また、係数制御部20は、フィルタ係数列を複数組み記憶したフィルタ係数テーブル22を備え、動き推定部10から入力される動きベクトルに応じてフィルタ係数テーブル22からフィルタ係数を選択するようにしてもよい。このように構成することにより、フィルタ係数の決定を高速化することができる。
【0085】
なお、上述した動き推定装置1として機能させるためにコンピュータを好適に用いることができ、そのようなコンピュータは、動き推定装置1の各機能を実現する処理内容を記述したプログラムを当該コンピュータの記憶部に格納しておき、当該コンピュータのCPUによってこのプログラムを読み出して実行させることで実現することができる。なお、このプログラムは、コンピュータ読取り可能な記録媒体に記録することができる。
【0086】
上述の実施形態は代表的な例として説明したが、本発明の趣旨及び範囲内で、多くの変更及び置換ができることは当業者に明らかである。したがって、本発明は、上述の実施形態によって制限するものと解するべきではなく、特許請求の範囲から逸脱することなく、種々の変形や変更が可能である。例えば、実施形態に記載の複数の構成ブロックを1つに組み合わせたり、あるいは1つの構成部ブロックを分割したりすることが可能である。