(57)【特許請求の範囲】
【請求項１】
入力される動画像について、次の式
【数１】
0004409526.tif 000015
（ここに、ｕ，ｖは、ｘ方向とｙ方向のオプティカルフローであり、ｎ＋１は繰返し回数であり、ave_uとave_vはｘ方向とｙ方向の平均オプティカルフローであり、E_x、E_y、E_tはｘ、ｙ、ｔ方向での輝度勾配であり、αは重み係数である）で表される演算を反復して画素ごとに動きベクトルを求めるオプティカルフロープロセッサであって、
演算に必要なデータを入力し、解像度の異なる複数階層レベルでの階層画像作成、輝度勾配算出、オプティカルフロー導出と内挿、補間画像作成のための反復演算を行う共通演算器を備え、
前記共通演算器は、入力データについて加算を行う加算器と、入力データおよび／または加算器からのデータを演算する第１，第２，第３および第４の処理演算器と、第１から第４の処理演算器の演算結果を加算する累算器からなり、
第１から第４の処理演算器の各々は、
入力データを平均する平均化ブロックと、
入力データの積和演算をする第１積和ブロックと、
入力データの積和演算をする第２積和ブロックと、
第１積和ブロックおよび／または第２積和ブロックからの入力データの除算、加算および減算を行う除算・加減算ブロックと、
除算・加減算ブロックからの入力データおよび内部メモリからの入力データに対して積和演算をする第３積和ブロックと、
第３積和ブロックからの入力データおよび内部メモリからの入力データに対して積和演算をする第４積和ブロックとからなり、
逐次的に実行される演算の種類に応じて、入力データを変更し、平均化ブロックと、第１積和ブロックと、第２積和ブロックと、除算・加減算ブロックと、第３積和ブロックと、第４積和ブロックを選択的に用い、データパスを変更して、複数階層レベルで階層画像を作成し、輝度勾配を算出して輝度勾配メモリに記憶し、最上位階層レベルについてオプティカルフローを導出してオプティカルフローメモリに記憶し、より解像度の大きい階層化画像について、上位階層レベルのオプティカルフローから下位階層レベルのオプティカルフローに変換して前記オプティカルフローメモリに記憶する内挿処理と、得られたオプティカルフローを用いて動き補償をする補間画像作成とを順次実行して、最終的なオプティカルフローを出力する、
オプティカルフロープロセッサ。
【請求項２】
さらに、外部および出力用バッファからデータを受け取る入力用バッファ、演算結果の少なくとも一部を記憶する内部メモリ、および、共通演算器の演算結果を記憶し出力する出力用バッファを備え、
前記共通演算器は、入力バッファおよび内部メモリから演算に必要なデータを入力することを特徴とする、請求項１に記載されたオプティカルフロープロセッサ。
【請求項３】
前記内部メモリは、輝度勾配を記憶する前記輝度勾配メモリと、前記オプティカルフローを記憶するオプティカルフローメモリを含むことを特徴とする、請求項２に記載されたオプティカルフロープロセッサ。
【請求項４】
請求項１に記載されたオプティカルフロープロセッサにおいて、前記第１，第２，第３および第４の処理演算器の各々は、オプティカルフロー導出時に、並列の４画素の各々について、輝度勾配E_x，E_y，E_tと前フレームのオプティカルフローbefor_u，befor_vを入力し、
前記平均化ブロックは、平均オプティカルフローave_u、ave_vを演算し、
前記第１積和ブロックは、out_bel=E_x2+E_y2+α2を演算し、
前記第２積和ブロックは、out_ber=E_x*ave_u＋E_y*ave_v＋E_tを演算し、
前記除算・加減算ブロックは、div_add=out_ber/out_belを演算し、
前記第３積和ブロックは、u=ave_u-E_x*div_addとv=ave_u-E_y*div_addを演算し、
前記第４積和ブロックは、tmp=(befor_u-u)2+(befor_v-v)2を演算する
ことを特徴とするオプティカルフロープロセッサ。
【請求項５】
請求項１に記載されたオプティカルフロープロセッサにおいて、前記第１，第２，第３および第４の処理演算器は、輝度勾配算出時に、前フレーム、現フレームおよび次フレームの輝度値E_mx、LPFフィルタ係数lpf_xおよびdiffフィルタ係数diff_x(ここにx=l, m, n)を入力し、
前記第１の処理演算器において、
前記第１積和ブロックは、out_bel=E_ml*lpf0+E_mm*lpf1+E_mn*lpf0を演算し、
前記第２積和ブロックは、out_ber=E_ml*diff0+E_mm*diff1＋E_mn*diff0を演算し、
前記第３積和ブロックは、ｙ方向にTmp_lpf=(E_l+E_n)*lpf0+E_m*lpf1を演算し、
前記第２の処理演算器において、
前記第１積和ブロックは、out_bel=E_ml*lpf0+E_mm*lpf1+E_mn*lpf0を演算し、
前記第２積和ブロックは、out_ber=E_ml*diff0+E_mm*diff1＋E_mn*diff0を演算し、
前記除算・加減算ブロックは、out_belとout_berを出力し、
前記第３積和ブロックは、第１，第２および第３の処理演算器からout_belとout_berをを入力し、ｘ方向にTmp_lpf=(E_l+E_n)*lpf0+E_m*lpf1を演算し、
前記第４積和ブロックは、diff_0=diff0*(E_i-E_k)とdiff_1=diff0*(E_j-E_g)を演算し、
前記第３の処理演算器において、
前記第１積和ブロックは、out_bel=E_ml*lpf0+E_mm*lpf1+E_mn*lpf0を演算し、
前記第２積和ブロックは、out_ber=E_ml*diff0+E_mm*diff1＋E_mn*diff0を演算し、
前記除算・加減算ブロックは、out_belとout_berを出力し、
前記第３積和ブロックは、第１，第２および第３の処理演算器からout_belとout_berをを入力し、ｘ方向にTmp_lpf=(E_l+E_n)*lpf0+E_m*lpf1を演算し、
前記第４積和ブロックは、LPF係数を入力してtmp=(E_i+E_k)*lpf0+(E_j+E_g)*Lpf1を演算し、
前記第４の処理演算器において、
前記第３積和ブロックは、ｙ方向にTmp_lpf=(E_l+E_n)*lpf0+E_m*lpf1を演算する
ことを特徴とするオプティカルフロープロセッサ。
【請求項６】
請求項１〜５のいずれかに記載されたオプティカルフロープロセッサであって、
複数の前記共通演算器を並列に配置し、
隣接する共通演算器の間の隣接する２つの前記処理演算器において入力データを共有するように配線し、
前記複数の共通演算器の中の１端側の共通演算器に、その他の共通演算器から、前のオプティカルフローデータを転送する
ことを特徴とするオプティカルフロープロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、動画の画像認識処理において画素毎の動きベクトルを求めるオプティカルフロー処理に関する。
【背景技術】
【０００２】
車両安全システム、知能ロボットシステム、知的監視システム等の、社会貢献度の高いアプリケーションへの応用が期待できる画像認識処理技術は非常に重要な研究課題であり、これらのビジョンシステムの実用化に向けて高精度かつ高解像度な実時間画像認識処理が要求されている。画素毎の高精細な動きベクトルを求めるオプティカルフロー処理は、様々な動画像認識処理分野に幅広く応用できる要素技術である。
【０００３】
オプティカルフローとは、画像中の１つ１つの画素がどれだけ動いたかを表す動きベクトルのことである。オプティカルフローを用いることによって細やかな認識が可能となり、高精細な動画像認識システムが実現できると考えられる。しかし、それぞれの画素の動きベクトルを計算するオプティカルフロー導出処理には、リアルタイムでかつ全画素でオプティカルフローを求めようとすると数十GOPSもの演算量を必要とするため、高解像度画像に対する実時間処理システムは実用化されていない。ソフトウェアにおける処理では特徴点のみのフロー導出処理や、精度を犠牲にした高速なフロー導出処理が現状では行われている。また、実時間処理ハードウェアは、ＦＰＧＡ、ＡＳＩＣなどを用いた低解像度または低精度のものに限られていた（非特許文献１，２参照）。
【非特許文献１】M.V. Correia and A.C. Campilho、 ICPR, vol. 4, pp. 247-250, 2002
【非特許文献２】J. Diaz, E. Ros, S. Mota, F. Pelay and E.M. Ortigosa, Early Cognitive Vision Workshop, Talk 21, 2004
【非特許文献３】B.K.P. Horn and B.G. Schunck, "Determining optical Flow", AI vol.17, pp.185-204, 1981
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明の目的は、高い演算負荷を実時間で処理するオプティカルフロープロセッサを提供することである。
【課題を解決するための手段】
【０００５】
本発明に係るオプティカルフロープロセッサは、入力される動画像について、次の式
【数１】
0004409526.tif 000002
（ここに、ｕ，ｖは、ｘ方向とｙ方向のオプティカルフローであり、ｎ＋１は繰返し回数であり、ave_uとave_vはｘ方向とｙ方向の平均オプティカルフローであり、E_x、E_y、E_tはｘ、ｙ、ｔ方向での輝度勾配であり、αは重み係数である）で表される演算を反復して画素ごとに動きベクトルを求める。このオプティカルフロープロセッサは、演算に必要なデータを入力し、解像度の異なる複数階層レベルでの階層画像作成、輝度勾配算出、オプティカルフロー導出と内挿、補間画像作成のための反復演算を行う共通演算器を備え、この共通演算器は、入力データについて加算を行う加算器と、入力データおよび／または加算器からのデータを演算する第１，第２，第３および第４の処理演算器と、第１から第４の処理演算器の演算結果を加算する累算器からなる。第１から第４の処理演算器の各々は、入力データを平均する平均化ブロックと、入力データの積和演算をする第１積和ブロックと、入力データの積和演算をする第２積和ブロックと、第１積和ブロックおよび／または第２積和ブロックからの入力データの除算、加算および減算を行う除算・加減算ブロックと、除算・加減算ブロックからの入力データおよび内部メモリからの入力データに対して積和演算をする第３積和ブロックと、第３積和ブロックからの入力データおよび内部メモリからの入力データに対して積和演算をする第４積和ブロックとからなる。このオプティカルフロープロセッサは、逐次的に実行される演算の種類に応じて、入力データを変更し、平均化ブロックと、第１積和ブロックと、第２積和ブロックと、除算・加減算ブロックと、第３積和ブロックと、第４積和ブロックを選択的に用い、データパスを変更して、複数階層レベルで階層画像を作成して、輝度勾配を算出して輝度勾配メモリに記憶し、最上位階層レベルについてオプティカルフローを導出してオプティカルフローメモリに記憶し、より解像度の大きい階層化画像について、上位階層レベルのオプティカルフローから下位階層レベルのオプティカルフローに変換して前記オプティカルフローメモリに記憶する内挿処理と、得られたオプティカルフローを用いて動き補償をする補間画像作成とを順次実行して、最終的なオプティカルフローを出力する。
【０００６】
前記オプティカルフロープロセッサは、好ましくは、さらに、外部および出力用バッファからデータを受け取る入力用バッファ、演算結果の少なくとも一部を記憶する内部メモリ、および、共通演算器の演算結果を記憶し出力する出力用バッファを備え、前記共通演算器は、入力バッファおよび内部メモリから演算に必要なデータを入力する。前記内部メモリは、たとえば、輝度勾配を記憶する輝度勾配メモリと、オプティカルフローを記憶するオプティカルフローメモリを含む。
【０００７】
前記オプティカルフロープロセッサにおいて、好ましくは、前記第１，第２，第３および第４の処理演算器の各々は、オプティカルフロー導出時に、並列の４画素の各々について、輝度勾配E_x，E_y，E_tと前フレームのオプティカルフローbefor_u，befor_vを入力し、前記平均化ブロックは、平均オプティカルフローave_u、ave_vを演算し、前記第１積和ブロックは、out_bel=E_x2+E_y2+α2を演算し、前記第２積和ブロックは、out_ber=E_x*ave_u＋E_y*ave_v＋E_tを演算し、前記除算・加減算ブロックは、div_add=out_ber/out_belを演算し、前記第３積和ブロックは、u=ave_u-E_x*div_addとv=ave_u-E_y*div_addを演算し、前記第４積和ブロックは、tmp=(befor_u-u)2+(befor_v-v)2を演算する。
【０００８】
前記オプティカルフロープロセッサにおいて、好ましくは、前記第１，第２，第３および第４の処理演算器は、輝度勾配算出時に、前フレーム、現フレームおよび次フレームの輝度値E_mx、LPFフィルタ係数lpf_xおよびdiffフィルタ係数diff_x(ここにx=l, m, n)を入力する。ここで、前記第１の処理演算器において、前記第１積和ブロックは、out_bel=E_ml*lpf0+E_mm*lpf1+E_mn*lpf0を演算し、前記第２積和ブロックは、out_ber=E_ml*diff0+E_mm*diff1＋E_mn*diff0を演算し、前記第３積和ブロックは、ｙ方向にTmp_lpf=(E_l+E_n)*lpf0+E_m*lpf1を演算する。また、前記第２の処理演算器において、前記第１積和ブロックは、out_bel=E_ml*lpf0+E_mm*lpf1+E_mn*lpf0を演算し、前記第２積和ブロックは、out_ber=E_ml*diff0+E_mm*diff1＋E_mn*diff0を演算し、前記除算・加減算ブロックは、out_belとout_berを出力し、前記第３積和ブロックは、第１，第２および第３の処理演算器からout_belとout_berをを入力し、ｘ方向にTmp_lpf=(E_l+E_n)*lpf0+E_m*lpf1を演算し、前記第４積和ブロックは、diff_0=diff0*(E_i-E_k)とdiff_1=diff0*(E_j-E_g)を演算する。また、前記第３の処理演算器において、前記第１積和ブロックは、out_bel=E_ml*lpf0+E_mm*lpf1+E_mn*lpf0を演算し、前記第２積和ブロックは、out_ber=E_ml*diff0+E_mm*diff1＋E_mn*diff0を演算し、前記除算・加減算ブロックは、out_belとout_berを出力し、前記第３積和ブロックは、第１，第２および第３の処理演算器からout_belとout_berをを入力し、ｘ方向にTmp_lpf=(E_l+E_n)*lpf0+E_m*lpf1を演算し、前記第４積和ブロックは、LPF係数を入力してtmp=(E_i+E_k)*lpf0+(E_j+E_g)*Lpf1を演算する。また、前記第４の処理演算器において、前記第３積和ブロックは、ｙ方向にTmp_lpf=(E_l+E_n)*lpf0+E_m*lpf1を演算する。
【０００９】
また、前記オプティカルフロープロセッサにおいて、たとえば、複数の前記共通演算器を並列に配置する。そして、隣接する共通演算器の間の隣接する２つの前記処理演算器において入力データを共有するように配線し、前記複数の共通演算器の中の１端側の共通演算器に、その他の共通演算器から、前のオプティカルフローデータを転送する。
【発明の効果】
【００１０】
オプティカルフロー演算の最適化と、輝度勾配算出とオプティカルフロー導出を含む逐次的な演算における演算器の共通化によって小規模回路での高速・高精度な演算を実現する。
【発明を実施するための最良の形態】
【００１１】
以下、添付の図面を参照して発明の実施の形態を説明する。
図１は、オプティカルフロープロセッサの性能を、単位時間当たりの処理画素数と平均角度誤差（ＭＡＥ）で表すグラフである。ＭＡＥは精度の逆数に対応する。非特許文献１，２に記載されている従来のオプティカルフロープロセッサは、それぞれ、Ｄｉａｚ、Ｍｉｇｕｅｌと表示されている性能をもっている。本発明では、より高精度でより高速処理の実時間オプティカルフロープロセッサを実現する。図において、単位時間あたりの処理画素数３M、９M[pels/sec]は、それぞれ、30fr/sのCIF画像と30fr/sのVGA画像に対応する。本発明のオプティカルフロープロセッサは、後で説明するアーキテクチャを用いることにより、図示された高精度、高速処理が実現でき、高い演算負荷を実時間で処理できる。このＶＬＳＩアーキテクチャは、精度・解像度スケーラブルである。このスケーラビリティを利用して４つの共通演算器を並べることにより、30fr/sのVGA画像の実時間処理が可能である。また、従来のプロセッサの平均角度誤差(MAE)が10度以上であるのに対し、本発明のプロセッサではMAE10度未満を達成できる。
【００１２】
オプティカルフローを演算するアルゴリズムについて、これまで様々なアルゴリズムが提案されている。オプティカルフローとは、画像中の各画素がどれだけ動いたかを表す動きベクトルである。ここで、高精度なHorn & Schunckアルゴリズム（非特許文献３）を用いる。このアルゴリズムは、近接するオプティカルフローが滑らかに変化するという大局的な仮定に基づく勾配法であり、下記の更新式を繰返し解くことによってオプティカルフローを得る。
【数２】
0004409526.tif 000003
（ここに、ｕ，ｖは、ｘ方向とｙ方向のオプティカルフローであり、ｎ＋１は繰返し回数であり、          ave_uとave_vはｘ方向とｙ方向の平均オプティカルフローであり、E_x、E_y、E_tはｘ、ｙ、ｔ方向での輝度勾配であり、αは重み係数である。）
【００１３】
ＶＬＳＩ実装向けに、高精度なHorn & Schunckアルゴリズムを用いたＨＯＥ(Hierarchical Optical-Flow Estimation)アルゴリズムを採用する。このアルゴリズムの特徴は、輝度勾配算出に、多次元勾配フィルタを採用している点や、階層化処理を行う点である。Horn & Schunckアルゴリズムでは、ＬＰＦ処理に前後７画素を必要とするが、ここでは３フレームを利用する多次元勾配フィルタを用いることによって、フレーム遅延をあまり大きくすることなく精度の高いフローを検出できる。また、階層化処理によって大きな動きの検出に対応できる。階層化処理とは、大きなフローの高精度な導出に有効な手法であり、ガウシアンフィルタと２:１サブサンプリングによって階層化画像を作成し、解像度の小さな画像から順番にフローを導出する手法である。ここでは、３階層の階層化処理を用いる。階層化処理は、ほとんどの画像において、更新式が収束するまでに必要なitr回数が小さくなるため、演算量の削減効果も得ることができる。
【００１４】
図２は、ＨＯＥアルゴリズムのフローチャートを示す。オプティカルフロー処理の流れでは、まず、フィルタリングとサブサンプリングによって階層画像を作成し、階層化データバッファに記憶する（Ｓ１）。次に、画像データ（原画像または階層化画像）を入力して輝度勾配を算出し、輝度勾配メモリに記憶する（Ｓ２）。ここで、輝度は、多次元勾配フィルタを用いて、次の式
E0*lpf0+E1*lpf1+E2*lpf0
で求められる。ここに、E0, E1, E2は輝度値であり、lpf0, lpf1は多次元勾配フィルタに用いるLPFフィルタ係数である。ｘ，ｙ，ｚ方向の輝度勾配は、３フレームの輝度値を入力として、多次元勾配の式から導出される。次に、最上位の３フレーム（前フレーム、現フレームおよび次フレーム）からおおまかなオプティカルフローν２の導出を行い（Ｓ３）、それを用いてオプティカルフローの内挿を行い、下位階層レベルのオプティカルフローν１に変換する（Ｓ５）。この内挿処理は、重みが均一な双一次内挿処理であり、ここでは、周囲の４画素のオプティカルフローを入力し、４画素の平均を算出し、出力する。次に、得られたオプティカルフローν１を用いて前フレームおよび次フレームからフレーム補間つまり動き補償を行う（Ｓ６）。補間画像は、次の式で求められる。
Emage[x+y*Xsize] = (1.0-s)*(1.0-t)*SrcImage[X+Y*Xsize]
+ (1.0-s)*t*SrcImage[X+(Y+inc_y)*Xsize]
+ s*(1.0-t)*SrcImage[X+inc_X+Y*Xsize]
+ s*t*SrcImage[X+inc_x+(Y+inc_y)*Xsize]
ここに、s, tはオプティカルフローの小数部、SrcImageは次フレームまたは前フレームの輝度値、incはオプティカルフローの整数部である。オプティカルフローとフレーム輝度値を入力して、次フレームまたは前フレームの補間画像輝度値を算出し、出力する。次に、さらに下の階層の処理に移り(Ｓ７)、上述の処理を繰り返して、オプティカルフローを導出する。最低階層でのオプティカルフローが得られると、次に、得られた結果を加算することにより最終的なオプティカルフローを得る（Ｓ８）。そして、最初のステップＳ１に戻り、次のフレームを処理する。
【００１５】
ハードウェア実装において高精度、高処理速度での処理を実現するため、シミュレーションによりＨＯＥアルゴリズムのパラメータ最適化を行った。演算量に大きく影響する繰り返し回数itrについては、計算毎の画像全体のフローの平均更新量がたとえば10-4以下となるまで更新式の演算が繰り返されるが、ハードウェア制御を容易にするために一定回数itrで繰返し処理を打切る。繰り返し回数itrは１５０が最適であった。また、重みパラメータαは、α＝１０が最適であった。
【００１６】
また、ＨＯＥアルゴリズムは、小数点精度を必要とする計算を多数行っているためにハードウェアコストが非常に高くなってしまう。そこで、フロー検出精度を損なわない最大のビット長まで演算語長を削減することによって、低負荷な処理を実現する。ここで、種々の削減パターンを定義し、ビット長最適化のシミュレーションを行った。ここで採用した削減パターンは、16bitと24bitの固定小数点を用い、整数部と小数部のビット割当ては適応的とする方式であり、浮動小数点の場合と同程度の平均角度誤差（MAE）およびitr回数を維持できる。こうして、HOEアルゴリズムのitr回数および演算語長をVLSI向けに最適化した。
【００１７】
図２に示されるＨＯＥアルゴリズムでは、階層画像作成、輝度勾配作成、オプティカルフロー導出、補間画像作成および双一次内挿の５つの処理をリアルタイムで順次行う(図３参照）。これら５つの処理の処理量が均一であればパイプライン並列処理により動作周波数を下げて低消費電力化できるが、繰り返し処理を含むオプティカルフロー導出部が全体の演算の大部分を占めているため、効率的なパイプラインを組むことができない。オプティカルフロー導出、輝度勾配算出、階層画像作成などの処理は基本的に積和演算を行う。そこで、ＨＯＥアルゴリズムのハードウェア実装において、回路規模削減のため、全ての演算を行う共通演算器CEを開発した。ここで、積和演算を行う複数のブロックを設け、各処理ごとにデータパスを変えることにより演算器の共通化を図っている。この共通演算器CEは、実時間演算処理を実現するために４画素同時処理可能な専用4-way SIMDデータパス回路を用いている。
【００１８】
図４は、共通演算器CEを用いたオプティカルフロープロセッサの全体アーキテクチャを示す。オプティカルフロープロセッサは、外部メモリ（ＳＤＲＡＭ）とＣＰＵに接続される。外部メモリには、原画像データ用メモリ、最終オプティカルフローデータ用メモリおよび階層化データ用メモリがある。ＣＰＵからの制御信号により各処理に必要なデータを外部メモリから、入力バッファである定数格納用バッファと輝度値格納用バッファへ転送する。共通演算器は、セレクタを介して入力されるいずれかの入力バッファのデータまたは内部メモリのデータを使って演算処理を行う。そして、得られた処理結果を、出力用バッファまたは内部メモリ（オプティカルフロー格納用メモリまたは輝度勾配格納メモリ）へ転送する。なお、共通演算器CEは、図示しないシーケンスコントローラを含む。なお、メモリバス帯域と内蔵メモリ容量のトレードオフにより輝度勾配データとオプティカルフローデータのみを内蔵メモリに格納することにした。なお、内部メモリを用いるか否か、また、内部メモリを用いる場合、どのようなデータを記憶するかは、適当に選択すればよい。
【００１９】
図５は、共通演算器CEの内部ブロックを含む全体アーキテクチャを示す。共通演算器CEは、積和処理を行う複数の演算ブロック（処理演算器PE)、演算ブロックへの入力データの加算処理を行う複数の加算ブロック(ADD)、複数の演算ブロック(PE)の演算結果の加算処理を行う累算ブロック(ACC)からなる。ここで、最も演算量が多いオプティカルフロー導出時に並列処理をするため４つの処理演算器PEを並列に配置して、１つの処理演算器PEで１画素を処理する４画素並列処理のＳＩＭＤ構成とする。また、その他の処理時でも、１画素ごとの処理をスループット１で実現できる構成とする。
【００２０】
図６は、共通演算器CEの中の処理演算器PEの内部ブロック図である。オプティカルフロー導出、輝度勾配算出、階層画像作成などほぼ全ての処理は基本的に積和処理を行う。そこで、積和演算を行う複数のブロックを設け、各処理ごとにデータパスを変えることにより演算器の共通化を行った。共通演算器CEでは、CPUからの制御信号により各演算に必要なデータが外部メモリからバッファに転送され、CPUの制御信号でデータパスを変えられる。これにより１つの共通演算器CEでオプティカルフロー導出に必要な全ての処理を行う。
【００２１】
処理演算器PEは、６つの演算エレメント、すなわち、平均化、加算およびシフト処理のための平均化ブロック(AVE)、第１と第２の積和フィルタである積和ブロック(BELとBER)、除算や加減算を行う除算・加減算ブロック(Div/ADD)、第３の積和フィルタであるCalc/LPFブロック、および、第４の積和フィルタである差分ブロック(Diff)で構成されている。たとえばオプティカルフロー導出では、外部からのデータは、一方では、第１の積和フィルタ（BELブロック）に入力され、他方では、平均化ブロック(AVE)を経て第２の積和フィルタ（BERブロック）に入力される。除算・加減算ブロック(Div/ADD)は、両積和フィルタBEL、BERの処理結果を入力して除算をする。その結果は直接出力されるか、または、第３の積和フィルタであるCalc/LPFブロックで処理されたのち、第４の積和フィルタである差分ブロックDiffで入力データとの差分がとられ、その結果が出力される。
【００２２】
図７はオプティカルフロー導出時のデータパスを示す。オプティカルフロー導出時には全ての処理演算器PE内の演算ブロックを用いて演算を行う。ここで、４つの処理演算器PEを用いて４画素並列処理とする。まず、オプティカルフロー格納メモリから平均化ブロックAVEにオプティカルフローデータが転送され、局所平均ave_u, ave_vが求められる。次に、BEL、BERブロックでは、オプティカルフロー更新式の分母Ex２＋Ey２＋α２と、分子ave_u＊Ex＋ave_v＊Ey＋Etの計算を行い、除算・加減算ブロック(Div/ADD)は、これらを除算してdiv=分子／分母を求める。次に、Calc/LPFブロックは、un+1＝ave_u−Ex*div、vn+1＝ave_v−Ey*divを計算して、オプティカルフローをun+1、vn+1に更新する。更新されたオプティカルフローは、内部メモリであるオプティカルフロー格納メモリに書き込まれる。差分ブロック(Diff)では、オプティカルフロー更新量(ave_u−un+1)2＋(ave_v−vn+1)2を計算する。累算ブロック(ACC)は、４画素のオプティカルフロー更新量を加算する。この値がしきい値と比較される。下記の表１は、オプティカルフロー導出時の処理演算器PEの各ブロックが行う処理を示す。
【表１】
0004409526.tif 000004
【００２３】
また図８は輝度勾配算出時のデータパスを示す。ここで輝度勾配算出に必要な演算ブロックが選択され、それらを用いて、演算処理を行う。図に示されるように、４つの処理演算器PE0、PE1、PE2、PE3は、異なる処理を行う。処理演算器PE0、PE1、PE2は、それぞれ、ｘ、ｙ、ｔ方向の輝度勾配を計算する。処理演算器PE0では、Diffブロックは動作しない。また、処理演算器PE3では、Calc_LPFブロックのみ動作する。まず、外部メモリから前フレーム、現フレームおよび次フレームの輝度値が入力用バッファに転送される。BEL,BERブロックでは、ｔ方向にそれぞれLPFフィルタリング(out_bel=E_ml＊lpf0＋E_mm*lpf1＋E_mn*lpf0)とDiffフィルタリング(out_ber＝E_ml＊diff0＋E_mm*diff1＋E_mn*diff0)を行う。次に、Calc_LPFブロックで、ｘ方向またはｙ方向にLPFフィルタリング(Tmp_lpf＝(E_l+E_n)*(lpf0+E_m*lpf1))を行う。ここで、E_mxは輝度値を表し、lpfxは多次元勾配フィルタに用いるLPFフィルタ係数を表し、diffxは多次元勾配フィルタに用いるdiffフィルタ係数を表し、diff_0、diff_1はｘ方向とｙ方向の輝度勾配を表す。最後に、Diffブロックで、ｘ、ｙ方向にDiffフィルタリングとｙ方向にＬＰＦフィルタリングを行う。これにより、４つの処理演算器PEを用いて、１画素のx、y、t方向の輝度勾配が求められる。このように、ｘ方向輝度勾配は、処理演算器PE0において、ｔ方向にLPFフィルタ→ｙ方向にLPFフィルタ→ｘ方向にDiffフィルタの処理をして求められ、ｙ方向輝度勾配は、処理演算器PE1において、ｔ方向にLPFフィルタ→ｘ方向にLPFフィルタ→ｙ方向にDiffフィルタの処理をして求められる。また、ｔ方向輝度勾配は、処理演算器PE2において、ｔ方向にDiffフィルタ→ｘ方向にLPFフィルタ→ｙ方向にLPFフィルタの処理をして求められる。
【００２４】
下記の表２は輝度勾配計算時の処理演算器PE内の各ブロックの処理を示す。ここで、ブロック名の後の0,1,2,3は、処理演算器PE0,PE1,PE2,PE3の中のブロックであることを表す。
【表２】
0004409526.tif 000005
【００２５】
図９は、階層画像作成時のデータパスを示す。階層画像は、２５画素の輝度値データを３つの処理演算器で積和処理し、１画素の階層画像が作成できる。まず、輝度値データが外部メモリから入力用バッファに転送される。そして、加算ブロックADD1、ADD2で原画像の輝度値の加算値img_xを求め、第０、第１、第２の処理演算器内の５つの積和ブロックBER, BELで、それぞれ１行分のガウシアンフィルタ処理の乗算処理out_bel=img_a1*A+img_a2*B+img_a3*C、out_bel=img_a1*C+img_a2*D+img_a3*F、・・・、out_bel=img_e1*B+img_e2*D+img_e3*Fなどを演算する。ここに、A,B,C,D,E,Fはガウシアンフィルタの係数である。さらに、その乗算結果を除算・加減算ブロックDiv＿Addと累算ブロックACCとで５行分加算して、上位階層画像の１画素の輝度値img（＝img_a1*A+img_a2*B+img_a3*C+ img_b1*B+img_b2*C+img_b3*D+img_c1*C+img_c2*D+img_c3*E+img_d1*B+img_d2*D+img_d3*E+img_e1*B+img_e2*D+img_e3*F）を出力する。
【００２６】
図１０は、双一次内挿時のデータパスを示す。オプティカルフローデータが平均化ブロックAVEに転送され、加算、シフト処理が行われる。そして、処理結果が再びオプティカルフロー格納メモリに転送される。
【００２７】
図１１は、ベクトル加算時のデータパスを示す。まず、外部メモリから上位階層で内挿されたオプティカルフローデータが入力用バッファに転送される。そして、内部メモリのオプティカルフローデータと入力用バッファのオプティカルフローデータを平均化ブロックAVEで加算する。処理結果は、オプティカルフローメモリに格納される。
【００２８】
図１２は、補間画像作成時のデータパスを示す。補間画像作成時には、輝度勾配メモリに画像の輝度値データが格納されている。まず、オプティカルフロー格納メモリからオプティカルフロー整数部データが輝度勾配メモリへ転送され、原画像の輝度値データがCalc_LPFブロックとDiffブロックに転送される。それと同時にオプティカルフローの小数部データが積和ブロックBERに転送されて乗算が行われ、係数stが決定され、最終的に除算・加減算ブロックDiv_Addで４つの係数st、s(1-t)、t(1-t)、(1-s)(1-t)が決定される。Calc_LPFブロックとDiffブロックで、除算・加減算ブロックDiv_Addで求めた係数と輝度勾配メモリから転送された輝度値が乗算され、Tmplpf=E_c*t(1-s)+E_d*(1-s)(1-t)とtmp＝E_a*st+E_b*s(1-t)が求められ、最後に累算ブロックACCで両者の累算処理をして、出力用バッファに転送する。
【００２９】
図１３、図１４、図１５、図１６、図１７、図１８、図１９、図２０、図２１は、それぞれ、共通演算器CE内のAVE演算ブロック、BER演算ブロック、BEL演算ブロック、Calc_LPF演算ブロック、Div_add演算ブロック、Diff演算ブロック、ADD1演算ブロック、ADD2演算ブロックおよびACC演算ブロックの演算回路を示す。また、表３〜表１１は、これらの演算ブロックで扱う信号を示す。
【００３０】
表３は、AVE演算ブロックで扱う信号を示す。
【表３】
0004409526.tif 000006
【００３１】
表４は、BER演算ブロックで扱う信号を示す。
【表４】
0004409526.tif 000007
【００３２】
表５は、BEL演算ブロックで扱う信号を示す。
【表５】
0004409526.tif 000008
【００３３】
表６は、Calc_LPF演算ブロックで扱う信号を示す。
【表６】
0004409526.tif 000009
【００３４】
表７は、Div_add演算ブロックで扱う信号を示す。
【表７】
0004409526.tif 000010
【００３５】
表８は、diff演算ブロックで扱う信号を示す。
【表８】
0004409526.tif 000011
【００３６】
表９は、ADD1演算ブロックで扱う信号を示す。
【表９】
0004409526.tif 000012
【００３７】
表１０は、ADD２演算ブロックで扱う信号を示す。
【表１０】
0004409526.tif 000013
【００３８】
表１１は、ACC演算ブロックで扱う信号を示す。
【表１１】
0004409526.tif 000014
【００３９】
また、図２２と図２３は、それぞれ、処理演算器PEの内部エレメントの１つであるBER演算ブロックのオプティカルフロー導出時のデータパスと輝度勾配算出時のデータパスを示す。矢印はマルチプレクサにおけるデータパスの方向を示す。他の演算エレメントでも、図示しないが、同様に処理内容に応じて入力データとデータパスを切り換える。このようにCPUの制御信号によりマルチプレクサでデータパスを変えることで、内部エレメントを選択的に用いることにより、共通演算器はあらゆる演算に対応できる。
【００４０】
上述のオプティカルフロープロセッサは、専用データバス回路(並列化とパイプライン化)による効率的な実時間処理を可能にしたので、図１に示したように、１階層あたり150回のitr回数でCIF30fpsを高精度(全テスト画像の平均MAE＝5.2度)で処理できる。すなわち、CIF30以上のシーケンスに対して、MAE（精度の指標）＜１０以下の高精度のオプティカルフローを実時間で抽出できる。
【００４１】
上述のオプティカルフロープロセッサは、高精度、高解像度に対応したスケーラブルアーキテクチャを実現した。ここで、高精度、高解像度を要求するアプリケーションでは、上述の共通演算器を単純に複数並べることで、高精度、高解像度に対応できる。ここで、並列に配置される共通演算器CEがデータの共有を行うため結線を変更している。たとえば、隣接する共通演算器の間の隣接する２つの処理演算器PEにおいて入力データを共有するように配線し、また、複数の共通演算器の中の１端側の共通演算器に、その他の共通演算器から、前のオプティカルフローデータを転送する。これにより多くのアプリケーションに対応できる。精度スケーラブル、解像度スケーラブルであるので、動き特徴量抽出手段として多くの動画像認識処理システムに応用できる。
【００４２】
例えば２つのオプティカルフロープロセッサを２つ並べた場合、オプティカルフロー導出部において繰り返し回数を２倍にして高精度の対応が可能である。図２４にオプティカルフロープロセッサを２つ並べた場合の各プロセッサが処理するフレームの画素を示す。この場合８画素並列処理となり、繰り返し回数を２倍にして高精度のオプティカルフローが求められる。図２５にオプティカルフロープロセッサを２つ並べた場合のアーキテクチャを示す。１つの共通演算器CEで４画素のオプティカルフローを求めるには、４画素とその左右の１画素の計６画素が必要となるため、隣接する共通演算器、すなわち、第１の共通演算器CE1と第０の共通演算器CE0とでデータの共有が必要である。データの共用のため、データ配線が変更できる。具体的には２つの共通演算器CEOとCE1の間の、隣接する画素を扱う各々の１列を互いに転送し、それと同時に次列処理のため、第１の共通演算器CE1から第０の共通演算器CEOのための内部メモリに２列分のオプティカルフローデータを転送する必要がある。
【００４３】
また、オプティカルフロープロセッサを並列に配置することでより大きな画素サイズ-の対応も可能である。図２６にNTSCサイズを４並列処理する場合の処理フレーム画素イメージを示す。処理すべきフレームを水平方向に分割することで、垂直方向の画素サイズが変わっても共通演算器CEのもつオプティカルフローメモリと輝度勾配メモリのサイズは変わらない。このため、オプティカルフロープロセッサを単純に接続することでより大きな画像サイズへの対応が可能である。共通演算器の接続は、図２４と同様で４つを並べ、第３の共通演算器CE3に当たる右端２列のオプティカルフローデータを第０の共通演算器CEOの前フローデータを格納するメモリに転送するよう接続する。たとえば、共通演算器CEを４つ並べた場合は１階層あたり150回のitr回数でVGA30の画像を処理することが可能となる。
【図面の簡単な説明】
【００４４】
【図１】オプティカルフロープロセッサの性能を単位時間当たりの処理画素数と平均角度誤差（ＭＡＥ）で表すグラフ
【図２】ＨＯＥアルゴリズムのフローチャート
【図３】ＨＯＥアルゴリズムにおける５つの処理を示す図
【図４】オプティカルフロープロセッサの全体アーキテクチャを示す図
【図５】共通演算器の内部ブロックを含む全体アーキテクチャを示す図
【図６】共通演算器の中の処理演算器の内部ブロック図
【図７】オプティカルフロー導出時のデータパスを示す図
【図８】輝度勾配算出時のデータパスを示す図
【図９】階層画像作成時のデータパスを示す図
【図１０】双一次内挿時のデータパスを示す図
【図１１】ベクトル加算時のデータパスを示す図
【図１２】補間画像作成時のデータパスを示す図
【図１３】AVE演算ブロックの演算回路図
【図１４】BER演算ブロックの演算回路図
【図１５】BEL演算ブロックの演算回路図
【図１６】Calc_LPF演算ブロックの演算回路図
【図１７】Div_add演算ブロックの演算回路図
【図１８】Diff演算ブロックの演算回路図
【図１９】ADD1演算ブロックの演算回路図
【図２０】ADD2演算ブロックの演算回路図
【図２１】ACC演算ブロックの演算回路図
【図２２】BER演算ブロックのオプティカルフロー導出時のデータパスを示す図
【図２３】BER演算ブロックの輝度勾配算出時のデータパスを示す図
【図２４】各共通演算器が処理するフレームの画素の図
【図２５】スケーラブルアーキテクチャを説明するための図
【図２６】NTSCサイズを４並列で処理する場合の処理フレーム画素イメージの図
【符号の説明】
【００４５】
PE  処理演算器、    ADD1、ADD２  加算ブロック、    ACC  累算ブロック、    AVE  平均化ブロック、    BEL  第１積和ブロック、    BER  第２積和ブロック、    Div/ADD  除算・加減算ブロック、    Calc/LPF  第３積和ブロック、    Diff  第４の積和ブロック。
【図１】
0004409526.tif 000016
【図２】
0004409526.tif 000017
【図３】
0004409526.tif 000018
【図４】
0004409526.tif 000019
【図５】
0004409526.tif 000020
【図６】
0004409526.tif 000021
【図７】
0004409526.tif 000022
【図８】
0004409526.tif 000023
【図９】
0004409526.tif 000024
【図１０】
0004409526.tif 000025
【図１１】
0004409526.tif 000026
【図１２】
0004409526.tif 000027
【図１３】
0004409526.tif 000028
【図１４】
0004409526.tif 000029
【図１５】
0004409526.tif 000030
【図１６】
0004409526.tif 000031
【図１７】
0004409526.tif 000032
【図１８】
0004409526.tif 000033
【図１９】
0004409526.tif 000034
【図２０】
0004409526.tif 000035
【図２１】
0004409526.tif 000036
【図２２】
0004409526.tif 000037
【図２３】
0004409526.tif 000038
【図２４】
0004409526.tif 000039
【図２５】
0004409526.tif 000040
【図２６】
0004409526.tif 000041