図1は、一実施形態に係る情報処理装置の機能ブロック図である。図示するように、情報処理装置10は、撮像部1、バッファ部2、スイッチ部3、検出部4、記憶部5、探索部6、推定部7及び出力部8を備える。ここで、情報処理装置10を実現するハードウェア構成としては撮像部1を備える任意の情報端末を利用することができ、携帯端末の他、タブレット型端末、デスクトップ型又はラップトップ型のコンピュータその他を利用することができる。また、撮像部1以外の機能部の一部又は全てをサーバーに設置し、図1にて示される機能部間での情報授受を、ネットワーク等を経由した通信で実現するようにしてもよい。逆に、撮像部1がネットワーク上に存在して、これから取得した撮像画像を情報処理装置10において処理するようにしてもよい。図1の各機能部の処理内容の概要は以下の通りである。
撮像部1は、ユーザによるカメラ撮像の操作を受けて対象の撮像を行い、得られた撮像画像をバッファ部2へと出力する。撮像部1による撮像は第一フレームレートにおいて行われ、映像すなわち時系列上の各時刻のフレームとしての撮像画像がバッファ部2へと出力される。なお、図1中では「フレームレート」を「レート」と略記している。撮像部1を実現するハードウェアとしては、近年では携帯端末には標準装備されることの多いデジタルカメラを利用することができる。
以下の説明における変数名の表記として、整数iでその順番を指定される時刻を「時刻ti」、当該時刻tiにおいて撮像部1による撮像により得られた撮像画像を「フレームFi」と表記することとする。すなわち、「フレームFi」は「撮像画像Fi」と同一であるが、以下の説明において時間軸上での処理に関して言及する際には、「フレームFi」等の表現を主に用いることとする。
バッファ部2は、撮像部1より得られる各時刻tiのフレームFiを一時的に保存することにより、(スイッチ部3を経由した)検出部4及び探索部6によるフレームFiの参照と、出力部8によるフレームFiの参照と、を可能とさせるものである。一実施形態においては、(スイッチ部3を経由した)検出部4及び探索部6からのフレームFiの当該参照は、撮像部1における撮像レートと同じ第一フレームレートにおいてなされ、出力部8からのフレームFiの当該参照は第一フレームレートより低い第二フレームレートにおいてなされる。
なお、バッファ部2において各時刻tiのフレームFiを一時的に保存する期間は、少なくとも、以下に説明する検出部4及び探索部6並びに出力部8の処理が可能となるような期間であればよい。バッファ部2では、当該期間が経過することにより参照対象としては不要となったフレームFiを破棄してよい。
スイッチ部3は、フレームFi内における所定の検出対象が検出部4によって未検出の間はバッファ部2の各フレームFiを検出部4へと供給し、検出部4により当該対象の検出がなされた後の時刻の各フレームFiは、当該対象をフレーム内において継続して追跡させるべく探索部6へと供給するようスイッチング処理を行う。なお、当該対象の探索部6による継続追跡が不可能となった際は、スイッチ部3は再度、各フレームFiを検出部4へと供給する状態へと戻る。
検出部4では、上記の通り所定対象が未検出の際にスイッチ部3から供給される各時刻tiのフレームFiから画像特徴量を抽出し、記憶部5に記憶された所定対象の画像特徴量と照合することにより、当該所定対象の検出を試みる。ここで、ある時刻t0において検出に成功したものとすると、検出部4は検出結果としての当該時刻t0におけるフレームF0内において所定対象が占める領域R0の情報を、探索部6へと出力する。
検出部4において当該検出するための画像特徴量としては、任意種類の既存のものを用いてよく、任意種類の特徴点(対象におけるコーナーなどの特徴的な点としてのキーポイント)検出及び当該特徴点から抽出される任意種類の局所特徴量に基づく画像特徴量を利用してよい。特徴点検出と局所特徴量抽出の手法に関してはそれぞれ、前掲の非特許文献1等に開示のSIFT (Scale-Invariant Feature Transform)やSURF (Speeded Up Robust Features)などの既存手法が利用できる。ここで、特徴点の座標情報(特に複数の特徴点の相対的配置の座標情報)を含めて画像特徴量を定義しておいてもよいし、座標情報は除外して局所特徴量のみで画像特徴量を定義しておいてもよい。例えば、対象の個別の局所特徴量(実数ベクトルとして構成されるもの)をさらに量子化(この量子化結果はビジュアルワードと呼ばれることもある)したうえで、対象全体での量子化結果(ビジュアルワード)をヒストグラム化したもの(バグ・オブ・ビジュアルワードと呼ばれることもある)として画像特徴量を定義しておいてもよい。
記憶部5では検出部4が抽出するのと同種類の画像特徴量を、1つ以上の所定の検出対象ごとにその画像から抽出されたものとして予め記憶しておき、検出部4では当該フレームFiより抽出された画像特徴量と記憶部5に予め記憶された画像特徴量とが閾値判定で類似すると判定された場合に、記憶された画像特徴量に対応する所定対象がフレームFiより検出されたと判定することができる。類似判定の際には、画像特徴量間の距離を計算して当該距離が小さいと判定されるものを類似していると判定すればよい。画像特徴量が特徴点の座標情報を含めて定義されている場合は、平面射影変換行列(ホモグラフィ行列と呼ばれることもある)等の算出で評価される特徴点座標間の幾何整合の対応関係も考慮して特徴点間のマッチングを行い、当該幾何整合の度合いも反映されたものとして画像特徴量間の距離を計算するようにしてもよい。
検出部4ではまた、上記のように画像特徴量の抽出処理に基づいた検出ではなく、より一般に画像特徴を評価することによる検出を行うようにしてもよい。例えば、テンプレートマッチングでフレームFiから対象検出を行うようにしてもよい。この場合、記憶部5に予め1つ以上の検出対象ごとにテンプレート画像を記憶しておき、検出部4で当該テンプレート画像を用いたフレームFi内のサーチを行うようにすればよい。
探索部6では、検出部4が上記時刻t0において所定対象の検出に成功した後の時刻t1,t2,…のフレームF1,F2,…に関して、フレーム内で当該所定対象の占める領域の動きを別時刻のフレーム間において探索することにより、当該所定対象を追跡する。当該追跡結果としての動きの探索結果は推定部7へと出力される。
探索部6では、ある時刻tiにおいてフレームFi内に領域Riとして所定対象が既に検出済み又は探索済みとなっている場合に、当該領域Riの情報を利用して、別の時刻ti+k(kは正でも負でもよい。)のフレームFi+kにおいて当該所定対象の領域Ri+kを探索することで、フレームFiの領域RiからフレームFiの領域Ri+kへの動きM(i,i+k)の情報を得る。ここで、当該探索の際の探索元フレームFi及び探索先フレームFi+kをどのように設定し、どのような順番で当該探索を実施するかに関しては種々の実施形態が可能であり、後述する図3や図4において当該種々の実施形態を説明する。
一実施形態において探索部6における当該探索処理には、領域追跡法として既存手法であるテンプレートマッチングを用いてよい。当該用いるテンプレート画像としては、検出部4で検出に成功した際に、当該検出対象に関してあらかじめ記憶部5に記憶しておく所定のテンプレート画像を記憶部5から読み込んで用いてもよいし、探索元のフレームFiの領域Riそれ自体を、随時更新されるテンプレート画像として利用するようにしてもよい。この際、時刻t0での検出部4による検出領域R0のみを固定的にテンプレート画像として利用してもよい。また、別の一実施形態において探索部6における当該探索処理には、領域追跡法として既存手法であるパーティクルフィルタを用いることにより、領域Riから領域Ri+kを推定するようにしてもよい。
推定部7は、上記の探索部6から第一フレームレートにおいて得られる動きの探索結果を時間軸上において合成することにより、第二フレームレートにおける動きの推定結果を得て、当該第二フレームレートにおける動き推定結果を出力部8へと出力する。
ここで、動きM(i,i+k)の情報が領域Ri,Ri+k間の座標変換の行列M(i,i+k)として与えられている場合、第二フレームレートの動きDを以下の式(1)のように当該行列M(i,i+k)の積として合成することができる。
なお、動きM(i,i+k)の情報が領域Ri,Ri+k間の座標の並進ベクトルM(i,i+k)として与えられている場合には、以下の式(2)のように積ではなく当該ベクトルの和として簡略化された形で動きDを合成して得ることができる。
なお、以上の2つの式(1),(2)において積や和を取る対象は、第二フレームレートの動きDの期間内にあって、第一フレームレートを前提として探索部6により探索された全ての動きM(i,i+k)であり、以上の2つの式ではインデクスiで当該対象を表現している。当該インデクスiで表現される積や和を取る対象の種々の実施形態は、探索部6の具体的な探索に応じて定まるものであるので、同じく後述の図3や図4において当該種々の実施形態を説明する。なお、積を取る場合は、取得された動きの時刻の順番で積を取ればよい。
出力部8は、推定部7から得られる第二フレームレートでの対象の動き推定結果(当該推定結果はすなわち、検出部4で検出されて以降の時刻における対象のフレーム内位置の推定結果にも対応する内容である。)に基づく所定の表示出力を得るための所定の加工処理を、バッファ部2から得られる第二フレームレートでの各フレームFiに対して施すことにより、第二フレームレートにおける出力情報を得て表示する。すなわち、出力部8により表示される出力情報の更新間隔は、第二フレームレートの逆数となる。
出力部8ではさらに、検出部4において所定対象が検出された際に特定される当該所定対象が何であるかの認識結果に応じた所定の情報(検出対象に応じた付随情報、すなわち、検出対象に予め紐づけられた拡張現実表示などの表示用コンテンツ)を、当該情報を予め記憶している記憶部5から読み込んで、当該加工処理を行うことができる。一実施形態において出力部8では、当該加工処理を施した第二フレームレートでの出力情報として、撮像部1において第一フレームレートで得られる撮像画像Fiに対して第二フレームレートにおいて拡張現実表示を施した出力情報を得て、表示するようにすることができる。
出力部8においては、拡張現実表示の既存技術を用いることで、撮像画像Fiに対して、撮像されている実空間の3次元構造に整合させて、検出及び追跡された所定対象に対して拡張現実表示を行った出力情報を得るようにすることもできる。この場合、撮像部1を構成するハードウェアとしてのカメラと、撮像画像Fiにおいて検出及び追跡された所定対象と、の空間的な相対的位置関係の情報を用いるようにすればよい。
ここで、出力部8では、個々の出力動き情報(すなわち、第二フレームレートで得られている時系列上の個々の動きD)から求まる対応点群にDLTや8点アルゴリズム等の既存手法を適用することにより、カメラ-所定対象間やカメラ-カメラ間の相対的位置関係を推定することができる。すなわち、まず、検出部4において時刻t0に所定対象を検出する際に、画像特徴量として個別の特徴点の座標情報が含まれるものを利用することで、検出時刻t0におけるカメラ-所定対象間の相対的位置関係をホモグラフィ行列H0の形で求めることができる。検出後において第二フレームレートで動きD1,D2,D3,…が求まるものとすると、当該動きに対応する相対的位置関係を上記既存手法によりホモグラフィ行列H1,H2,H3…として求めることができる。したがって、出力部8ではこれらの積として、検出後の第二フレームレートでの相対的位置関係をH1・H0, H2・H1・H0, H3・H2・H1・H0,…として求めることができる。
なお、出力部8はハードウェアとしてはディスプレイで実現することができる。当該ディスプレイは通常の液晶モニタ等による非シースルー型のものとして構成されていてもよいし、液晶や有機ELモニタ等によるシースルー型のものとして構成されていてもよい。なお、シースルー型のものとして構成される場合に出力部8で拡張現実表示を実現する場合には、出力部8ではバッファ部2から撮像画像Fiを受け取って表示することを省略してもよい。また、シースルー型のものとして例えばヘッドマウントディスプレイ(HMD)の形態で構成される場合には、カメラとしての撮像部1による撮像画像Fiにおける対象の検出位置に対して、シースルー型HMDにおいて当該検出位置の対応位置において拡張現実の重畳表示を行った際に、ユーザ視界での実世界に実物としての検出対象が見えている位置と、撮像画像Fiにおける検出位置の対応位置としての重畳表示位置とが整合するように、カメラとシースルー型HMDとの間でキャリブレーションを行っておくことが望ましい。
なお、以上では情報処理装置10を適用するのに好適な一例として、出力部8で拡張現実表示等の視覚に関連した出力情報を得る例を説明したが、これに代えて又はこれに加えて、その他の任意の知覚に関連した出力情報を、動きDに基づいて加工されたものとして得るようにしてもよい。例えば、動きDに応じた音声出力を得るようにしてもよい。また、動きDをそのままテキスト情報等の形で出力するようにしてもよい。(この場合は、情報処理装置10において出力部8は省略され、推定部7からの出力を情報処理装置10からの出力とする構成に相当する。)また、動きDに応じてその他のアクチュエータや機器等を制御するための制御出力を得るようにしてもよい。この場合には、音声、テキスト情報、制御等の出力情報の出力間隔が第二フレームレートに相当する。
記憶部5では、上記の検出部4における検出を可能とするために、画像特徴量等として構成される検出対象の特徴情報を記憶しておくと共に、上記の出力部8における加工処理による出力情報の生成を可能とするために、当該検出対象の種類ごとにその付随情報を記憶しておき、検出部4及び出力部8に対して当該各情報を参照に供する。記憶部5における当該記憶しておく情報は管理者等が予め用意しておけばよい。
図2は、検出部4において時刻t0でフレームF0より対象が検出されてから後の各フレームFiに対する探索部6、推定部7及び出力部8による、一実施形態に係る処理内容の相互関係を模式的に示す図である。図2にて[1]は探索部6の探索処理を、[2]は当該探索処理に連携した推定部7及び出力部8における推定処理及び出力処理を模式的に示している。
すなわち、図2にて[1]に示すように、探索部6は撮像部1の撮像のフレームレートと同じ第一フレームレートにおいて、隣接時刻ti及びti+1(i=0,1,2,…6)にある隣接フレームFi及びFi+1(i=0,1,2,…6)の間での検出対象(図中、模式的にフレーム内に白丸(〇)で表現されている。)の動きM(i,i+1)(i=0,1,2,…6)(図中、模式的に湾曲した矢印で表現されている。)を探索する。そして、図2にて[2]に示すように、推定部7では探索部6により当該探索された7個の動きM(i,i+1)(i=0,1,2,…6)を前述の式(1)又は(2)により合成したものとして、フレームF0及びF7の間で定義された第二フレームレートの動きM(0,7)を得ると共に、当該得られた動きM(0,7)を用いて出力部8が第二フレームレートにおいて拡張現実表示等の出力(図中、模式的に星印(☆)で表現されている。)を行う。
なお、以上の図2の模式例は第一フレームレートが第二フレームレートの7倍である例となっている。例えば、第一フレームレートは210fps(フレーム毎秒)であり、第二フレームレートは30fpsであってよい。
図3は、一実施形態に係る情報処理装置10の動作のフローチャートである。図3の実施形態は、撮像部1において第一フレームレートで得られる撮像画像に対して逐次処理で探索部6が動き探索を行う実施形態に相当し、図2の模式例の動作を実現する一例に相当する。
なお、図3にてステップS1,S2,S20で構成されるループ内にある状態が図1の機能ブロック表現におけるスイッチ部3から検出部4へと撮像画像Fiが送られる状態に相当し、当該ループ外にある状態が図1の機能ブロック表現におけるスイッチ部3から探索部6へと撮像画像Fiが送られる状態に相当する。すなわち、当該図3にその一例が示されるような動作フロー構造を図1の機能ブロック構成において表現するものがスイッチ部3であるため、図3の各ステップの説明においてはこのようなスイッチ部3の動作について重複する説明は省略する。従って、当該ループ内にある際は検出部4が直接にバッファ部2を参照して撮像画像Fiを取得し、当該ループ外にある際は探索部6が直接にバッファ部2を参照して撮像画像Fiを取得するものとして、スイッチ部3には特に言及することなく図3の動作の説明を行う。(後述の図4でも同様とする。)以下、図3の各ステップを説明する。
図3のフローの開始時点は、撮像部1による撮像の開始直後等で対象が未検出の状態(例えば、撮像部1のカメラを起動した直後等の状態)であるものとし、当該開始するとステップS1へと進む。ステップS1では現時刻tiに対して撮像部1の取得した撮像画像Fiに対して検出部4が対象の検出を試みてから、ステップS2へと進む。ステップS2では、直近のステップS1における検出部4による検出が成功したか否かを判定し、成功していればステップS3へと進み、失敗していればステップS20へと進む。
ステップS20では、時刻tiを次の時刻ti+1へと更新し、当該更新された現時刻ti+1において撮像部1が撮像画像Fi+1を取得してからステップS1へと戻る。なお、ステップS20における時刻更新はこのように第一フレームレートの更新として時刻tiから時刻ti+1へと更新するものであってもよいし、第二フレームレート(Nを2以上の整数として第一フレームレートの1/Nの値であるものとする。)の更新として時刻tiから時刻ti+Nに更新するものであってもよい。すなわち、ステップS1での検出部4による検出は第一又は第二フレームレートのいずれでなされてもよい。
ステップS3では、検出部4が直近のステップS1で成功した検出結果に基づき、フレームFiから検出された対象の領域Riの情報を探索部6へと出力するとともに、記憶部5から当該検出された対象に応じた付随情報(前述した拡張現実表示等を可能とするための付随情報)を出力部8へと出力してから、ステップS4へと進む。
ステップS4では時刻tiを第一フレームレートでの次の時刻ti+1へと更新し、当該更新された現時刻ti+1において撮像部1が撮像画像Fi+1を取得してからステップS5へと進む。なお、時刻tiとはこのように、ステップS4やS20において次の時刻ti+1へと更新されることで常に最新時刻(現時刻)となることを前提として、図3の各ステップにおいては現時刻を時刻tiとして説明する。(後述する図4の各ステップの説明も同様の前提で、現時刻を時刻tiとして説明する。)
ステップS5では、探索部6がバッファ部2を参照することにより、直近の過去時刻ti-k(k≧1)のフレームFi-kであって検出部4により検出に成功した又は探索部6により探索により探索に成功した対象の領域Ri-kを用いて、現時刻tiのフレームFi内から対象の領域Riを探索することで、領域の追跡を試みてからステップS6へと進む。ステップS6では、直近のステップS5の追跡に成功したか否かを判定し、成功していればステップS7へ進み、失敗していればステップS70へと進む。
ステップS7では、探索部6が当該成功した現時刻tiのフレームFi内の領域Riの情報を次の時刻ti+1におけるステップS5での追跡に用いる情報として取得してから、ステップS8へと進む。ステップS70では、当該時刻tiに関しては追跡に失敗した旨を探索部6が記憶してからステップS9へと進む。なお、ステップS70において当該記憶することにより、ステップS5における直近の過去時刻ti-k(k≧1)を得ることが可能となる。また、ある時刻tiに関して追跡に失敗した場合はこのようにステップS7がスキップされることから、当該失敗した時刻tiに関してはステップS5での追跡・探索元としての領域Riは取得されないこととなる。
ステップS8では、探索部6が直近のステップS5において成功した追跡の結果としての動きM(i,i-k)を取得してから、ステップS9へと進む。ステップS9では、現時刻ti(ステップS4により第一フレームレートにて1ずつ増分され更新されている現時刻ti)が第二フレームレートの更新タイミングに到達したか否かを判定し、到達していればステップS10へと進み、到達していなければステップS4へと戻る。
ステップS10では、第二フレームレートの更新タイミングに該当する現時刻tiと、直近過去の第二フレームレートの更新タイミングに該当する時刻ti-N(すなわち、Nを2以上の整数として前述の通り、第一フレームレート間隔の更新のN回分が第二フレームレート間隔の更新の1回に相当するものとする。)と、の間の期間における一連のステップS8において取得された動きM(i-k)を合成して、第二フレームレートの動きDを得ること(及び動きDに基づく出力部8による出力情報の出力)を試みてからステップS11へと進む。
ステップS11では、ステップS10で試みた動きDを得ること(及びこれに基づく出力情報の出力)が可能であったか否かを判定し、可能であったならばステップS4に戻ることで、更新された最新時刻tiに対して探索部6による以上のような探索が継続される。ステップS11にて不可能と判定された場合にはステップS1へと戻ることで、更新された最新時刻tiに対して検出部4による検出が再開されることとなる。
なお、動きDを得るのが可能であったか否かの判定は、以下の条件の全て又は任意の一部分が成立する場合に、動きDを得るための個別の動きM(i,i-k)の取得が不十分であるものとして、動きDを得るのが不可能である旨を判定することにより実施すればよい。
(条件1)第二フレームレートの更新タイミングにおいて、すなわち、ステップS9で肯定判断を得た際に、直近のステップS6(すなわち、当該ステップS9における現時刻tiと同じ時刻tiでのステップS6)で否定判断が得られている。
(条件2)当該第二フレームレートを構成するN回分の第一フレームレートに関して、ステップS6で否定判断が得られた回数が所定閾値を超えている。
以上の図3のフローによる動きの取得及び合成の例を挙げる。ここで、N=4とし、第一フレームレートは第二フレームレートの4倍であるものとして、4+1=5枚の第一フレームレートのフレームF0,F1,F2,F3,F4において求まる動きで第二フレームレートの動きM(0,4)を合成する例を挙げる。
(例1)すべての動きM(0,1),M(1,2),M(2,3),M(3,4)の探索に成功した場合、これら4個の動きを合成して動きM(0,4)が得られる。
(例2)上記のうち動きM(1,2)の探索に失敗した後に動きM(1,3)の探索に成功し、結果として動きM(0,1),M(1,3),M(3,4)の探索に成功した場合、これら3個の動きを合成して動きM(0,4)が得られる。
(例3)上記のうちM(1,2)の探索に失敗した後にさらに動きM(1,3)の探索にも失敗し、その後に動きM(1,4)の探索に成功することで結果として動きM(0,1),M(1,4)の探索に成功した場合、これら2個の動きを合成して動きM(0,4)が得られる。
なお、第一フレームレートは第二フレームレートのN倍であるものとして説明しているが、いわゆる植木算の関係(直線上にN+1個の点が並ぶ場合に、これらの点の間の間隔箇所がN個形成される関係)から、第一フレームレートの連続するN枚のフレームにさらにもう1枚を追加してN+1枚とすることで第二フレームレートの一周期分に相当し、且つ、その両端フレームをも含んだものが得られることとなる。
以上の図3のフローは撮像部1での第一フレームレートの撮像画像Fiに対して探索部6が逐次処理で動き探索を行う場合の一実施形態であった。図4は別の一実施形態に係る情報処理装置10の動作のフローチャートであり、探索部6は図3の場合と同じく第一フレームレートで与えらえた撮像画像Fiを前提とした探索を行うものの、逐次処理として探索するのではなく、当該第一フレームレートの撮像画像Fiが第二フレームレートの一周期(及び両端)分に相当するN+1枚だけバッファ部2に蓄積されてから、当該N+1枚又はその一部分を対象としてバッチ処理で探索を行う実施形態のフローである。以下、図4の各ステップを説明する。
図4のフローが開始されてからのステップS21,S22,S23及びS220はそれぞれ、図3のステップS1,S2,S3及びS20と同一であるので、その説明は省略する。こうして、図3のステップS2,S3と同様に図4のステップS22で検出部4による検出の成功判定を得てステップS23で当該検出結果に対応する出力等を得た後は、ステップS31へと進む。
ステップS31では第一フレームレートにおいて現時刻tiを次の時刻ti+1に更新し、当該最新時刻ti+1において撮像部1がフレームFi+1を取得してからステップS32へと進む。ステップS32では、現時刻tiが第二フレームレートの更新タイミングに到達したか否かを判断し、到達していればステップS33へ進み、到達していなければステップS31に戻る。
ステップS33では、上記のステップS31,S32のループを経て現時刻tiにおいて得られている第二フレームレートの一周期(及び両端)分のN+1枚のフレームFi-N,Fi-N+1,…,Fi-1,Fiのうち、両端フレームFi及びFi-Nの間で探索部6が動き探索を試みることにより対象の追跡を試みてから、ステップS34へと進む。ステップS33での動き探索に関しては、探索元のフレームFi-N(すなわち、直近のステップS21及びS22で検出成功したフレーム、または、直近のステップ「S33及びS34」又は「S35及びS36」で探索成功したフレーム)で検出又は探索済みとなっている領域Ri-Nを用いるようにすればよい。
ステップS34では、ステップS33での両端フレーム探索が成功したか否かを判定し、成功していればステップS37へと進み、失敗していればステップS35へと進む。ステップS35では、探索部6が、当該両端フレームFi及びFi-Nでの探索失敗を受け、当該N+1枚存在しているフレームのうち両端以外の内部のフレームも利用して所定規則に従って再帰的に複数の動き探索を行うことにより、当該両端の動き探索結果に該当するものを得ることを試みてから、ステップS36へと進む。ステップS35は各種の実施形態が可能であり、後述する。
ステップS36では、ステップS35の探索が成功したか否かを判定し、成功していればステップS37へと進み、失敗していればステップS21へと戻ることで、検出部4の処理が再開されることとなる。ステップS37では、推定部7が当該両端フレームFi及びFi-Nでの動き推定結果を得て出力部8に渡すことにより出力情報を得ると共に、以降も継続される動き推定のために探索部6が現時刻tiの領域Riの情報を取得・保持してからステップS31へと戻る。当該ステップS37にて推定部7は、ステップS33及びS34の両端フレームFi及びFi-Nの動き推定が成功している場合には、当該1つの動きをそのまま動き推定結果M(i,i-N)として採用し、ステップS35及びS36からステップS37へと至った場合には、ステップS35で再帰的に追跡された複数の動きを合成して動き推定結果M(i,i-N)を得る。
以下、ステップS35の各実施形態を説明する。一実施形態では、図3で説明した逐次処理(S4,S5,S6,S7,S70,S8,S9のループ処理)をそのままステップS35を実現する手順として採用することができる。この場合、ステップS4の時刻更新手順は、単に次の追跡対象の隣接フレームFiを設定する手順と読み替えればよく、ステップS9の判断はN+1枚のフレームの全てについて処理が終わったかの判断に読み替えればよい。
上記の図3の逐次処理をそのまま利用する実施形態では、(探索失敗がない限り)N+1枚のフレームの全てが動きの探索対象として利用されることとなるが、別の一実施形態として、所定手順に従うことで一部分のフレームのみを動きの探索対象とするようにしてもよい。第二フレームレートに相当するN+1枚のフレームF0,F1,…FNで動きM(0,N)を探索する場合に関して、当該別の一実施形態を実現する手順の一例は以下の通りである。
(手順1)変数iに初期値i=1を設定し、手順2へ進む。
(手順2)動きM(0,i)を探索し、成功すれば手順3へ、失敗すれば手順4へ進む。
(手順3)動きM(i,N)を探索し、成功すれば終了し、失敗すれば手順4へ進む。
(手順4)変数iの値を1だけ増分し、手順2に戻る。
なお、手順2では、既に探索成功している動きM(0,i-j)(j≧1)が1つ以上あれば、M(i-j,i)を探索するようにしてもよく、jの最小のものから探索を試みて成功するものがあった場合は、手順2が成功したものと判断してもよい。また、手順4でiの値がNに到達した場合、以上の手順による探索は失敗したものと判断する。
また、具体的な手順は上記に限らず、その他のものでもよく、結果的に(成功した場合には)複数の動きM(0,i1),M(i1,i2),M(i2,i3),…,M(im,N)(0<i1<i2<i3<…<im<N)が探索されうるような任意の手順を利用してよい。推定部7においてはこれらを合成することで動きM(0,N)を得ることが可能となる。
例えば、手順1の初期値をN-1とし、手順4では変数iの値を1だけ減算するようにしてもよい。そして、手順1の初期値や手順4の増分/減算の値をそれぞれ、1以外の所定値(Nに応じた所定値など)としてもよい。また、また、N+1枚のフレームを再帰的に半分に分割しながらその両端で動き探索の可能性を探るような手順を用いてもよいし、同様に、N+1枚のフレームを再帰的に比率「a:(1-a)」(ここで、0<a<1)の位置で分割しながらその両端で動き探索の可能性を探るような手順を用いてもよい。当該再帰的な探索を行う際は、探索に成功した区間は以降の探索から除外するようにすればよい。
以上、本発明によれば、撮像画像Fi間から算出した動きを複数組み合わせることで、出力部8の更新間隔において当該動きを高精度に推定することが可能となる。当該高精度に推定された動きを用いて例えば拡張現実表示等を実現する場合であれば、撮像部1のカメラと撮像されている対象との相対的な位置関係等も高精度に推定可能となり、高精度な拡張現実表示等を実現することが可能となる。なお、以下のような観点によって、本発明においては高精度な動き推定が可能となる。
(観点1)撮像間隔の短縮に伴う撮像画像Fi間の動き量減少による高速化。例えば、撮像間隔が1/240秒であれば1/30秒の撮像間隔と比較して撮像画像Fi間の動き量は1/8に低減するため、撮像間隔に応じて動き探索の範囲を制御することで高速化を実現する。一般に、撮像間隔が1/N倍になると、撮像情報の増加により撮像情報間の数がN倍に増加するが、動き量自体は1/Nになるので、動きの探索範囲を(1/N)*(1/N)に減少させる。よって、処理全体としては探索回数が最大1/Nになるため、撮像間隔の短縮は高速化につながる。
(観点2)撮像間隔の短縮に伴う撮像画像Fi間の動きの線形近似による高精度化。並進以外の動きや立体形状の見え方の変化が生じる場合、並進を前提としたテンプレートマッチング等は撮像間隔が短いほど並進で近似できる可能性が高まり動き探索の精度向上につながる。
(観点3)撮像間隔の短縮に伴う撮像画像Fi間の動き量減少による高精度化。大きな動きが存在する場合において、撮像間隔が短いほど動き量が小さいため探索を継続できる可能性が高まり動き探索の精度向上につながる。逆に、小さな動きが存在する場合においては、撮像画像Fi間の動きが抑制されるため、撮像間隔の短縮は安定化につながる。例えば、動き量が1/30秒に1画素の場合、1/240秒間隔での動き量は平均1/8画素となるが、各撮像情報間の動き量はそれぞれ0として推定されうる。結果、出力動き情報も0として推定されるが、拡張現実の用途において動き量が1画素程度の状況は静止状態時における手振れ等の外乱であることが多いため、撮像間隔の短縮は出力情報の安定化につながる。
(観点4)蛍光灯のちらつきやフラッシュ等の外乱に対し頑健。動き探索の結果は、推定部7において出力動き情報の推定に利用されるだけであるため、撮像動き情報の一部で探索に失敗したとしても出力動き情報が推定できるだけの動き情報が探索できれば良いことから、システム全体としての安定性向上に貢献する。
以下、本発明における変形例などの補足事項を説明する。
(1)上記の観点1に関連して、探索部6では動きM(i,i+k)を求める際に、当該動きを求める間隔k≧1が大きいほど、テンプレートマッチング等による探索範囲を広く設定するようにしてよい。図5に当該設定の模式例を示す。時刻t10のフレームF10の領域R10が探索元の領域であるとする場合、k=1となる時刻t11のフレームF11で動きM(10,11)を求める場合、領域R10(フレームF11内での同じ位置が領域T11)を例えば110%に拡張した領域SR11を探索範囲として設定し、k=2となるt12のフレームF12で動きM(10,12)を求める場合、領域R10(フレームF12内での同じ位置が領域T12)を例えば120%に拡張した領域SR12を探索範囲と設定してよい。
なお、図5の例では探索範囲となる領域T11やT12は探索元R10と同じ位置に中心を有しているが、当該中心位置をそれまでに推定されている動きから予測される移動された位置として設定するようにしてもよい。
(2)第二フレームレートでの表示等の出力を行うためには、本発明による動き推定等の処理を完了する必要があるが、第二フレームレートでの時刻t0,tN,t2N,…にフレームF0,FN,F2N,…が得られるものとし、所定時間Δ以内に当該動き推定等を完了することを前提として、実際に第二フレームレートに即した時刻「t0」+Δ,「tN」+Δ,「t2N」+Δ,…に表示等の出力が可能となる。以上の図3や図4の説明では時刻ti等で各フレームFi等が得られると瞬時に計算等も完了するものとして、特に計算等の所要時間について言及することなく説明したが、このように、当該一連の計算等が所定時間Δ以内に完了することを前提に、第二フレームレートを保った表示等の出力が実際に可能である。
(3)上記の観点4に関連して、本発明において必ずしも(最も)隣接するフレームFi,Fi+1間での動きM(i,i+1)に限定されず、敢えてさらに離れたフレームFi,Fi+k(k≧2)間での動きM(i,i+k)であっても探索対象とする利点を、図6を用いて説明する。ここでは、隣接する3つの時刻t20,t21,t22において画像座標(u,v)のu,v=0,1の微小範囲(2×2画素範囲)で、斜線付与で示すような当該1画素とほぼ同じ大きさの模様が(u,v)=(+1,+1)方向に移動している例が示されている。この場合、時刻t20では位置(0,0)のみを当該模様が占拠し、時刻t21では位置(1,1)のみを当該模様が占拠しているが、その中間時刻t21では当該2×2画素範囲に当該模様が分散して配置されてしまっている。このような状況下(画素境界でのエッジ境界等の分布の現れ方が変化する状況下)では、当該模様に関する動きM(20,21)や動きM(21,22)は原理的に検出精度が落ちざるを得ないため探索対象として必ずしも好ましくないが、動きM(20,22)は高精度に検出可能となる。当該高精度な検出の可能性が離れたフレームFi,Fi+k(k≧2)間での動きM(i,i+k)探索によって確保されることとなる。
(4)検出部4では2つ以上の対象を検出してもよい。例えば2つの対象A,Bが検出された場合であれば、以上説明した本発明による動き推定は対象A,Bそれぞれについて独立に(同時並行で)実施することが可能であり、この場合、どのようなフレーム間の動きM(i,i+k)がどのような順番で探索されるかに関しても対象A,Bで独立となる。ここで、探索の前処理としての対象A,Bが検出される時刻が異なっていてもよい。また、検出部4では個別の対象の全体を矩形領域等として検出したうえで、探索部6では当該検出された対象の部分ごとに探索を行うようにしてもよく、当該部分ごとに動きM(i,i+k)の探索の順番等は独立なものとなる。当該対象の部分は、検出部4で画像特徴に基づいて検出した際の1つ又は複数の特徴点の所定近傍範囲(例えば所定サイズの矩形範囲など)として構成されていてもよい。
(5)第二フレームレートはユーザからのマニュアル指定等を受け付けて、あるいは第一フレームレートでの撮像画像Fiの性質(明暗や全体的な動き量等)などの解析結果に応じて、手動又は自動で変更可能な可変のものとして設定されていてもよい。
(6)情報処理装置10は一般的な構成のコンピュータとして実現可能である。すなわち、CPU(中央演算装置)、当該CPUにワークエリアを提供する主記憶装置、ハードディスクやSSDその他で構成可能な補助記憶装置、キーボード、マウス、タッチパネルその他といったユーザからの入力を受け取る入力インタフェース、ネットワークに接続して通信を行うための通信インタフェース、表示を行うディスプレイ、カメラ及びこれらを接続するバスを備えるような、一般的なコンピュータによって情報処理装置10を構成することができる。さらに、図1に示す情報処理装置10の各部の処理はそれぞれ、当該処理を実行させるプログラムを読み込んで実行するCPUによって実現することができるが、任意の一部の処理を別途の専用回路等において実現するようにしてもよい。撮像部1は、当該ハードウェアとしてのカメラによって実現できる。