図1は、一実施形態に係る情報端末装置の機能構成図である。図示するように、情報端末装置10は、撮像部1、センサ部2、第一推定部3、第二推定部4、合成部5及び提示部6を備える。情報端末装置10のハードウェア構成は、スマートフォン、タブレット端末、デスクトップ型又はラップトップ型のコンピュータ、HMD等として実装される一般的なコンピュータ装置によって実現することができる。
図2は、情報端末装置10を実現することが可能な一般的なコンピュータ装置20のハードウェア構成の例を示す図である。図2に示すように、コンピュータ装置20は、所定命令を実行するCPU(中央演算装置)101、CPU101の実行命令の一部又は全部をCPU101に代わって又はCPU101と連携して実行する専用プロセッサ102(GPU(グラフィック演算装置)や深層学習専用プロセッサ等)、CPU101や専用プロセッサ102にワークエリアを提供する主記憶装置としてのRAM103、補助記憶装置としてのROM104、カメラ201、シースルー型ではない通常のディスプレイ202、光学シースルー型HMDを実現する場合のためのシースルー型ディスプレイ203、センサ204及び通信インタフェース205と、これらの間でデータを授受するためのバスBと、を備える。なお、ディスプレイ202及びシースルー型ディスプレイ203は、実施形態に応じてそのいずれか一方のみが備わるようにしてもよい。
詳細を後述する情報端末装置10の各部は、各部の機能に対応する所定のプログラムをROM104から読み込んで実行するCPU101及び/又は専用プロセッサ102によって実現することができる。ここで、撮像関連の処理が行われる場合にはさらに、カメラ201が連動して動作し、表示関連の処理が行われる場合にはさらに、ディスプレイ202又はシースルー型ディスプレイ203が連動して動作し、各種のセンサ値の取得が行われる際にはさらにセンサ204(1種類以上)が連動して動作し、ネットワークを経由したデータ送受信に関する通信関連の処理が行われる場合にはさらに通信インタフェース205が連動して動作する。
なお、情報端末装置10は、スマートフォン端末等の1台のコンピュータ装置20によって実現されてもよいし、2台以上のコンピュータ装置20によって実現されてもよい。例えば、少なくともカメラ201及びシースルー型ディスプレイ203を備えるHMD端末である第一のコンピュータ装置20と、このHMD端末において表示するためのAR重畳コンテンツを提供するスマートフォン端末である第二のコンピュータ装置20とを、両端末の通信インタフェース205を介した近距離無線などによって相互に通信可能としたシステムを、情報端末装置10としてもよい。これに加えて、またはこれに代えて、ネットワーク上のサーバ端末である第三のコンピュータ装置20において、情報端末装置10の一部(用途としてユーザが存在する現場でAR表示を実現する場合は、撮像部1、センサ部2及び提示部6を除く)の機能が実現されてもよい。
以下、情報端末装置10の各部を説明する。図3は、情報端末装置10の各部が連携して動作することによる、情報端末装置10全体としての動作の時間推移の模式例を示す図である。図3では、その時間軸が横軸方向で共通のものとして線L1上に例えば時刻t1,t2,…,t8として示されており、この時間軸上において各部の処理の模式例が示されている。以下の説明においては適宜、この図3の例を参照する。
撮像部1は、撮像を行い、得られた画像を時刻情報(撮像時刻のタイムスタンプ)とともに撮像情報として第一推定部3および提示部6へ出力する。撮像部1は、ハードウェアとしてはデジタルカメラ等によるカメラ201を用いて実現することができる。
図4は、一実施形態に係る撮像部1の動作のフローチャートである。ステップS11では、現時刻が撮像タイミングに到達したか否かを判定し、到達していればステップS12へと進み、到達していなければステップS11に戻り、この判定を繰り返す。ステップS12ではこの撮像タイミングにおいて撮像を行い、得られた画像にタイムスタンプを紐づけた撮像情報を、第一推定部3及び提示部6へと転送してから、(すなわち、第一推定部3及び提示部6が処理のために参照する画像バッファとしてのRAM103へと転送してから、)ステップS11へと戻る。以上の図4のフローにより、ステップS11で判定される撮像タイミングごとに、撮像部1による撮像が繰り返されることとなる。
ステップS11の撮像タイミングは、予め指定しておく所定の時間間隔ごととしてよいが、実際の撮像時刻(撮像情報における時刻情報として反映される撮像時刻)は、例えば画像の焦点を合わせる等の処理完了を待つことにより、所定の撮像タイミングからズレがあるものであってもよい。図3の例では、線L1上に示されるこのような撮像時刻t1,t2,…,t8において線L2上に示すような撮像情報I1,I2,…,I8が得られたうえで転送を開始され、この転送が完了した状態が線L3上に示されている。この転送には一般に、不均一な遅延が発生しうるものである。この不均一な遅延の原因には、汎用的なコンピュータ装置20である情報端末装置10においてその他の処理(本発明に関係する処理以外の、オペレーティングシステムによって管理されるバックグラウンド処理など)が同時並行で実施されることによって発生する不均一な負荷等が含まれる。図3の例ではこの不均一な遅延により例えば、撮像時刻t2の撮像情報I2の転送所要時間よりも、撮像時刻t3の撮像情報I3の転送所要時間の方が長くなっている。
なお、図4のフローによる撮像部1の処理に対する追加的な処理として、遅延(転送所要時間)が大きく次の撮像タイミング(ステップS11の肯定判定タイミング)に達しても転送が完了していない場合、この転送完了していない撮像情報を破棄するようにしてもよい。このような破棄処理が部分的に発生した場合であっても、情報端末装置10は姿勢推定処理を継続的に実施することが可能である。
なお、提示部6で撮像情報を利用する必要がない実施形態の場合(例えば、シースルー型HMDによってAR表示を行う実施形態の場合)には、撮像部1から提示部6へと撮像情報を出力することは省略し、第一推定部3のみへと撮像情報を出力するようにすればよい。
第一推定部3は、撮像部1から入力される撮像情報における撮像画像In(n=1,2,…)から所定の対象物(撮像対象)を検出したうえで、撮像部1を構成するカメラ201を基準とした、撮像対象の相対的な姿勢情報Pn(n=1,2,…)を推定して、この姿勢情報Pnを合成部5へと出力する。この姿勢情報は、カメラ201のカメラパラメータを既知のものとして与えておいたうえで、並進成分行列と回転成分行列との積の平面射影変換の行列の形で得ることができる。この姿勢推定処理それ自体には任意の既存の手法を用いてよく、例えば、撮像対象を白黒の正方マーカ(ARマーカ)として前掲の非特許文献2の手法を用いてもよいし、任意模様の撮像対象に対して、自然特徴情報(特徴点及びその周辺から得られる特徴量)の一例であるSIFT特徴情報の抽出によって撮像対象を検出する前掲の非特許文献3の手法を用いてもよい。あるいは、図1ではそのデータ授受の流れは省略しているが、第一推定部3では入力として撮像部1で得た撮像画像Inのみでなくセンサ部2によるセンサ値smも利用することにより、前掲の非特許文献1の深層学習の手法を用いて姿勢推定してもよい。また、これら姿勢推定処理を継続的に行うに際しては、ある初期時刻において対象検出を行い、その後の時刻では検出よりも高速に実施可能な対象追跡を行うようにしてもよい。
図5は、一実施形態に係る第一推定部3の動作のフローチャートである。ステップS31では、姿勢推定に関して未処理であり、且つ、撮像部1から転送済みである撮像情報が存在するか否かを判定し、存在していればステップS32へと進み、存在していなければステップS31に戻り、条件を満たす撮像情報が現れるまでこの判定を繰り返す。ステップS32では、その直前のステップS31で肯定判定を得た撮像情報における撮像画像In(n=1,2,…)を対象として姿勢推定処理を行い、得られた姿勢情報Pn(n=1,2,…)を合成部5へと出力してから、ステップS31へと戻る。
第一推定部3による処理は、マルチコアで構成されたCPU101及び/又はGPU等の専用プロセッサ102においてマルチスレッドにより姿勢推定処理プログラムを複数同時並行で実行することにより、複数の姿勢推定を同時並行で実施してもよい。すなわち、図5のフローがスレッドごとに実施されることで、複数同時並行で実施されてもよい。この場合、ステップS31における未処理の判断は、マルチスレッドにおける自スレッド以外の他スレッドにおいて未処理であるか否かも含めて判断すればよい。この場合、他スレッドにおいて既に姿勢推定処理が開始されているが現時点で未完了であるものは、自スレッドにおいて処理すべき対象から除外するよう判断することで、スレッド間で同じ処理が重複することを避けるようにすればよい。
図3の例では、第一推定部3による処理が3個同時並行で実施される場合が線L4,L5,L6上において、個別の姿勢推定処理が実施されている時間範囲をハッチ付与の枠として示すことによって、示されている。
すなわち、線L4上では第一スレッドにより時刻t1,t2間で転送完了し未処理となっている撮像画像I1を対象として姿勢推定処理が開始され、時刻t3,t4間で姿勢推定処理が完了してその姿勢情報P1が得られている。また、線L4上では第一スレッドにより撮像画像I4に対して時刻t4,t5間で姿勢推定処理を開始して時刻t6,t7間でその姿勢情報P4が得られている。同様に、線L5上では第二スレッドにより撮像画像I2に対して時刻t2,t3間で姿勢推定処理を開始して時刻t5,t6間でその姿勢情報P2が得られ、撮像画像I5に対して時刻t5,t6間で姿勢推定処理を開始して時刻t8後でその姿勢情報P5が得られている。同様に、線L6上では第三スレッドにより撮像画像I3に対して時刻t3,t4間で姿勢推定処理を開始して時刻t5,t6間でその姿勢情報P3が得られ、撮像画像I6に対して時刻t6,t7間で姿勢推定処理を開始して時刻t8後にその姿勢情報P6が得られている。
このように、姿勢推定処理の対象となる撮像画像が得られてから姿勢情報を推定するには、ある程度の時間を要する。図3の例では、第一推定部3の動作は、撮像情報が入力される度に処理待ち状態のスレッド(ステップS31において肯定判断待ちにあるスレッド)が姿勢推定処理を開始し、撮像部1による撮像間隔2~3個分の時間がかかっている様子を図示している。撮像情報の内容や前述したその他のバックグラウンド処理の存在等によって処理負荷が変化するため、実行時には処理がいつ完了するかは未知である。
姿勢推定処理が完了して撮像画像In(n=1,2,…)のものとして得られた姿勢情報Pn(n=1,2,…)は、そのデータ量が撮像画像のデータ量と比べて非常に小さいため、少なくとも一定時間の転送完了時間を要した撮像画像の場合とは異なり、当該得られた時刻とほぼ同時に合成部5へと出力され(すなわち、合成部5が参照するRAM103へと出力されて書き込まれ)、合成部5において参照可能となる。
なお、図3の例では全フレーム(時間軸上での撮像画像In(n=1,2,…)の全て)を対象として姿勢推定処理を行っているが、時間軸上でフレームを間引いたうえで姿勢推定処理を行うようにしてもよい。例えば、概ね1/3に間引くことで、3スレッド分の線L4,L5,L6の全てではなく、そのうちの1スレッドのみの線L4に示される姿勢推定処理のみを行うようにしてもよい。
間引く際は、ステップS31において姿勢推定処理の判断対象とするものを予め時間軸上において一定割合で間引いて残ったもののみとする第一手法を用いてもよいし、ステップS31において未処理(前述の通りマルチスレッドの場合、他スレッドで処理開始されているものは処理済とする)且つ転送済のものが複数ある場合に、現在時刻に最も近いもののみを選び、選ばれなかったものは以降の時点における姿勢推定対象から除外する(マルチスレッドの場合、全スレッドにおいて除外する)第二手法を用いてもよいし、第一手法及び第二手法を組み合わせてもよい。第一手法に関して、CPU101及び/又は専用プロセッサ102の負荷状況を一定時間ごとに監視し、負荷が大きいほど間引き割合を増やすようにすることで、CPU101及び/又は専用プロセッサ102の負荷が動的に最適化されるようにしてもよい。
センサ部2は、計測した値を時刻情報(計測時刻のタイムスタンプ)とともにセンサ情報として第二推定部4へ出力する。センサ部2を実現するハードウェアとしては、携帯端末に標準装備されていることの多い、加速度や並進運動を計測する加速度センサ及び/又は慣性センサ(回転角速度や回転運動を計測するジャイロセンサ)等の、1つ以上のセンサデバイスで構成されたセンサ204用いることができる。
センサ部2では具体的に、カメラ201の姿勢を表現するものとして、センサ情報を取得する。このために例えば、センサ部2を実現するハードウェアとしてのセンサ204はカメラ201と共通の筐体に固定して設置しておく等により、センサ204とカメラ201との相対的位置関係がこの共通の筐体への固定によって剛体的に変化しない位置関係となるようにしておけばよい。
図6は、一実施形態に係るセンサ部2の動作のフローチャートである。ステップS21では、現時刻が計測タイミングに到達したか否かを判定し、到達していればステップS22へと進み、到達していなければステップS21に戻り、この判定を繰り返す。ステップS22ではこの計測タイミングにおいてセンサ部2が計測を行い、得られたセンサ値にタイムスタンプを紐づけたセンサ情報を第二推定部4へと出力してからステップS21へと戻る。以上の図6のフローにより、ステップS21で判定される計測タイミングごとに、センサ部2によるセンサ計測が繰り返されることとなる。
この繰り返しにより、センサ情報が時系列上のものとして得られることとなる。センサ情報の任意の2時刻ta,tb間での変化は、撮像部1を実現するハードウェアとしてのカメラ201の姿勢の2時刻ta,tb間での変化を計測したものとなり、第一推定部3で得た相対的な姿勢情報と同種類の情報を与えるものとなる。すなわち、相対的な姿勢情報(基準姿勢からの変化としての姿勢情報)の表現の一例として並進成分行列と回転成分行列との積の平面射影変換の行列の形で第一推定部3で得たのと同種の情報として、時系列上のセンサ情報をセンサ部2において得ることができる。
ステップS21における計測タイミングは、予め指定しておく所定の時間間隔ごととしてよい。この計測タイミングは、ステップS11における撮像部1による撮像タイミングよりもその間隔を細かい(短い)ものとして設定することが好ましい。図3では、撮像タイミングにおける1回分の間隔をなす時刻t1,t2間に、線L7上に示すようにセンサ計測が7回行われてセンサ値s1,s2,…s7が得られており、計測タイミングの間隔が撮像タイミングの間隔よりも概ね6倍の細かさ(1/6倍の短さ)で設定される場合が例として示されている。
なお、図3の例では、m回目(m=1,2,…)の計測で得られたセンサ値をsmとして表記している。センサ値以外のデータ、例えば線L2,L3上に示される撮像画像In(n=1,2,…)は撮像時刻tnに対応するものであり、下付き文字がn回目の撮像時刻tnに対応するものとなっているが、センサ値smに関しては、その下付き文字はセンサ部2による計測回数mに対応し、撮像時刻tnに直接対応しているわけではない。(ただし、図3の例では撮像時刻tnに関して概ね、「m=6n-5」の対応関係が存在することで、撮像時刻tnと概ね同時にm=6n-5回目のセンサ値s6n-5が取得されている。)また、図3では、センサ値smに関して表示が煩雑化するのを避けるために、その全てに対してではなく主要な説明で参照するもののみに対して、文字表記を付与してある。
計測処理が完了して得られたセンサ情報sm(m=1,2,…)は、そのデータ量が撮像画像のデータ量と比べて非常に小さいため、少なくとも一定時間の転送完了時間を要した撮像画像の場合とは異なり、当該得られた時刻とほぼ同時に第二推定部4へと出力され(すなわち、第二推定部4が参照するRAM103へと出力されて書き込まれ)、第二推定部4において参照可能となる。
第二推定部4は、センサ部2から時系列上で継続的に入力されているセンサ情報を用いて、現時刻から見て未来における提示部6の提示処理間隔において変化することとなる姿勢変化情報を提示処理間隔ごとに推定して、合成部5へと出力する。なお、後述するように、提示部6は所定の提示処理間隔(フレームレート)において、提示処理を継続的に実施することで、AR表示等を実現することができるものである。
図3では、線L4,L5,L6上に示される第一推定部3の場合と同様に、線L8上に第二推定部4による個別の推定処理が、実施されている時間範囲をハッチ付与の枠として示すことにより、示されている。図3では、提示部6の提示処理間隔が撮像部1による撮像時刻t1,t2,…,t8に一致して定まる場合を例として、線L8上に第二推定部4による処理の例が示されている。
すなわち、現時刻t現在が撮像時刻t2,t3間(t2<t現在<t3)にあって11個目のセンサ情報s11までが参照可能となっている場合に、未来における提示部6の提示処理間隔である時刻t3,t4間での姿勢変化情報ΔP3,4を、11個目のセンサ情報s11までを用いて現時刻t現在において推定開始し、その後の現時刻がこの間隔の終端側にある未来時刻t4に到達する前に推定処理を完了する。同様に、現時刻t現在が撮像時刻t3,t4間(t3<t現在<t4)にあって17個目のセンサ情報s17までが参照可能となっている場合に、未来における提示部6の提示処理間隔である時刻t4,t5間での姿勢変化情報ΔP4,5を、17個目のセンサ情報s17までを用いて現時刻t現在において推定開始し、その後の現時刻がこの間隔の終端側にある未来時刻t5に到達する前に推定処理を完了する。
同様に、現時刻t現在が撮像時刻t4,t5間(t4<t現在<t5)にあって24個目のセンサ情報s24までが参照可能となっている場合に、未来における提示部6の提示処理間隔である時刻t5,t6間での姿勢変化情報ΔP5,6を、24個目のセンサ情報s24までを用いて現時刻t現在において推定開始し、その後の現時刻がこの間隔の終端側にある未来時刻t6に到達する前に推定処理を完了する。同様に、現時刻t現在が撮像時刻t6,t7間(t6<t現在<t7)のうち時刻t6の直後付近にあって時刻t6で得られた31個目のセンサ情報s31までが参照可能となっている場合に、未来における提示部6の提示処理間隔である時刻t6,t7間(時刻t6は過去だが時刻t7は未来となる)での姿勢変化情報ΔP6,7を、31個目のセンサ情報s31までを用いて現時刻t現在において推定開始し、その後の現時刻がこの間隔の終端側にある未来時刻t7に到達する前に推定処理を完了する。同様に、現時刻t現在が撮像時刻t6,t7間(t6<t現在<t7)にあって36個目のセンサ情報s36までが参照可能となっている場合に、未来における提示部6の提示処理間隔である時刻t7,t8間での姿勢変化情報ΔP7,8を、36個目のセンサ情報s36までを用いて現時刻t現在において推定開始し、その後の現時刻がこの間隔の終端側にある未来時刻t8に到達する前に推定処理を完了する。
第二推定部4において、現時刻t現在までに参照可能となっているセンサ情報を入力として用いて姿勢変化情報を推定開始し、この処理を完了するにはある程度の時間を要する。(すなわち、この完了時刻をt完了とすると、t現在<t完了である。)以上のような図3の例においては、線L8上に示される第二推定部4の動作は、処理開始時までのセンサ情報を用いて姿勢推定処理を実行し、撮像間隔0.5~0.8個分程度の時間がかかっている様子を図示している。第一推定部3における画像処理を含む処理の場合のように画像内容等で処理負荷が大きく変化しうる場合とは異なり、センサ情報の内容によって第二推定部4の処理負荷はそれほど変化することはないため、処理開始時には処理がいつ完了するかは凡そ既知である。
この考察に基づき、第二推定部4で処理完了の所要時間T第二推定と、合成部5での合成処理完了の所要時間T合成と、提示部6において提示処理を行うのに要する時間T提示(1フレーム分の提示処理を行うために必要な、AR表示情報等を準備するための時間)と、を加算(T第二推定+T合成+T提示)して、提示部6における次の提示間隔t始端,t終端における終端側時刻t終端からこの加算分だけ遡った時刻以前に、第二推定部4における処理を開始することが望ましい。すなわち、以上の図3の例でも説明してきた推定処理を開始するタイミングとしての現時刻t現在は、以下の式(1)の条件を満たすものとして設定しておくことが望ましい。(なお、以下の式(1)及び以上説明してきた例においては、時刻の値に関して通常そのように扱われているのと同様に、未来側の時刻ほどその値が大きくなるものとして、時刻の大小を定めている。以降の説明でも同様である。)
t現在≦t終端-(T第二推定+T合成+T提示) …(1)
なお、式(1)における3つの所要時間T第二推定、T合成及びT提示に関しては、情報端末装置10が利用される実環境等でその実績値を実験的に収集しておき、その実績値における何らかの代表値等を用いるようにすればよい。例えば、平均値や最頻値を用いてもよいし、平均値や最頻値に所定のマージンを加えた値などを用いてもよい。
第二推定部4による姿勢変化の推定処理それ自体には、適用可能対象が姿勢データに限定されない任意種類の時系列データの未来の挙動を予測する任意の既存手法を用いてよく、例えば、カルマンフィルタ(Kalman filter)や深層学習を利用してよい。
図7は、一実施形態に係る第二推定部4の動作のフローチャートである。ステップS41では、現時刻が推定タイミングに到達したか否かを判定し、到達していればステップS42へと進み、到達していなければステップS41に戻り、肯定判定が得られるまでステップS41を繰り返す。ステップS42では、ステップS41で肯定判定を得た現在時点t現在までにおいて参照可能となっている時系列上の履歴としてのセンサ情報を用いて、提示部6における次の提示間隔t始端,t終端での姿勢変化情報を推定して合成部5へと出力し、ステップS41へと戻る。
ステップS41の判定は、少なくとも前述の式(1)を満たすものとして判定すればよい。詳細には、以下の考察に基づいてステップS41の肯定判定を得る現時刻と、その次のステップS42において推定対象となる姿勢変化情報と、を設定することができる。
ここで、第二推定部4では現時刻t現在に対する未来としての、提示部6における次の提示間隔t始端,t終端(始端側時刻t始端及び終端側時刻t終端のうち少なくとも終端側時刻t終端が現時刻t現在に対する未来であり、t現在<t終端となる)での変化予測として、姿勢変化情報を推定する。未来予測は一般に、より先の未来に対するより長期の予測となるほどその予測精度が落ちる傾向があることが想定される。従って、未来に対する姿勢変化情報の推定精度を確保するためには、可能な限り近い未来を予測対象として設定することが好ましい。
従って、提示部6におけるk番目(k=1,2,…)の処理間隔を間隔t始端[k],t終端[k](k番目の始端側時刻t始端[k]及びk番目の終端側時刻t終端[k]で定まる間隔。従って、t始端[k]=t終端[k-1]の関係がある。)とすると、現時刻t現在がk番目の提示処理間隔t始端[k],t終端[k]内にある場合(t始端[k]<t現在<t終端[k])に、最も近い未来であるその次のk+1番目の処理間隔t始端[k+1],t終端[k+1]での姿勢変化情報を推定するように、ステップS41におけるk番目の姿勢変化情報の推定開始タイミングとする現時刻現時刻t現在[k]を、k番目の提示処理間隔t始端[k],t終端[k]と同期(タイミングの間隔を一致させることによる同期)させて設定しておくことが望ましい。すなわち、k番目の提示処理間隔の長さt終端[k]-t始端[k]よりも短い所定値c(0<c<t終端[k]-t始端[k]…(2))を設定しておき、ステップS41におけるk番目の姿勢変化情報の推定開始タイミング(その次のk+1番目の提示処理間隔t始端[k+1],t終端[k+1]での姿勢変化情報の推定開始タイミング)とする現時刻t現在[k]を以下の式(3)のように設定してよい。
t現在[k]=t終端[k]-c …(3)
なお、式(2)の範囲内の定数cによって式(3)でk+1番目の提示処理間隔t始端[k+1],t終端[k+1]の姿勢変化情報を推定開始するように設定すると、式(1)(「t終端=t終端[k+1]」且つ「t現在=t現在[k]」とした式(1))が成立しない場合、すなわち、現時刻がk番目の提示処理間隔t始端[k],t終端[k]内にある時点でその次のk+1番目の提示処理間隔t始端[k+1],t終端[k+1]での姿勢変化情報を推定開始すると、その終端時刻t終端[k+1]までに推定処理が完了しない場合、姿勢変化情報を推定する対象をさらに次のk+2番目の提示処理間隔t始端[k+2],t終端[k+2]とすればよい。このように設定しても依然として式(1)(「t終端=t終端[k+2]」且つ「t現在=t現在[k]」とした式(1))が成立しない場合、予測対象をさらにその先のk+3,k+4,…番目の提示処理間隔における姿勢変化情報とし、式(1)が成立するような最も近い未来の提示処理間隔を姿勢変化情報の推定対象とすればよい。
逆に、現時刻がk番目の提示処理間隔t始端[k],t終端[k]内にある時点で式(2)を満たす何らかの定数cによって姿勢変化情報の推定開始タイミングt現在[k]を設定し、姿勢変化情報の推定対象をk番目の提示処理間隔t始端[k],t終端[k]としてその終端時刻t終端[k]までに推定処理が完了する場合(式(1)が「t終端=t終端[k]」且つ「t現在=t現在[k]」の場合でも成立する場合)、その通りに設定してもよい。すなわち、現時刻がk番目の提示処理間隔t始端[k],t終端[k]内にある時点で姿勢変化情報の推定開始タイミングt現在[k]を設定し、姿勢変化情報の推定対象をその現時刻t現在[k]が属するk番目の提示処理間隔t始端[k],t終端[k]における姿勢変化情報としてもよい。
合成部5は、第一推定部3から得られる姿勢情報と第二推定部4から得られる姿勢変化情報とを合成し、現時刻から見た未来における姿勢情報を合成し、合成姿勢情報として提示部6へと出力する。後述するように、この未来の合成姿勢情報は、合成部5で合成された後の未来において提示部6で利用される際には、提示部6の提示タイミングである現時刻に対応するものとして利用されることとなる。
一実施形態では、提示部6の提示タイミングは撮像部1での撮像時刻と一致して設定され、合成部5の合成処理開始時点(=現時刻t合成開始)で参照可能となっている最新の姿勢情報Paと、当該姿勢情報に紐づけられている時刻taから次の提示タイミングtiまでの1つ以上の姿勢変化情報ΔPk,k+1(k=a,a+1,…,i-2,i-1)と、を用いて、以下の式(4)で合成姿勢情報Peiを合成する。ここで前述のように、姿勢情報Paは現時刻t合成開始から見て過去である時刻taの撮像画像Iaから第一推定部3により推定され、現時刻t合成開始において合成部5において参照可能となっているものである。また、次の提示タイミングtiは現時刻t合成開始から見て未来となるものである。
既に説明したように、姿勢情報Paと姿勢変化情報ΔPk,k+1とは共に平面射影変換行列の形で得ることができるものである。式(4)ではこの行列の積を求めることで、同じく平面射影変換行列の形で合成姿勢情報Peiを得ている。
なお、合成部5では、参照可能な最新の姿勢情報Paであっても、対応する姿勢変化情報ΔPk,k+1(k=a,a+1,…,i-2,i-1)が存在しないものは採用しない。すなわち、合成部5では、参照可能な姿勢情報Paであって、且つ、対応する姿勢変化情報ΔPk,k+1(k=a,a+1,…,i-2,i-1)が存在するものの中から最新のものとして、姿勢情報Paを選択して、式(4)により合成処理を行う。
図3の例では、線L9上に式(4)による合成部5の合成処理が示されている。式(4)の通り、合成処理は平面射影変換行列(サイズ3×3)の積算であり高速に(ほぼ瞬時に)計算可能であるため、線L9上では線L4,L5,L6上の第一推定部3や線L8上の第二推定部4の処理例の場合とは異なり、処理時間範囲をハッチ付与枠で示すことはせず、ほぼ瞬時に得られた合成姿勢情報Pei(i=4,5,6,7,8)のみを示している。
具体的に、線L9上では以下のように各合成姿勢情報Pei(i=7,8)が得られている。未来の提示時刻t7に対して現時刻t合成開始(t6<t合成開始<t7)にて、参照可能であり且つ対応する姿勢変化情報が存在する時刻t3の姿勢情報P3と、この時刻t3から未来の提示時刻t7までの間の姿勢変化情報ΔP3,4,ΔP4,5,ΔP5,6,ΔP6,7と、を式(4)により合成することで以下の式(4-7)のように未来の提示時刻t7における合成姿勢情報Pe7が得られる。
Pe7=ΔP6,7ΔP5,6ΔP4,5ΔP3,4P3 …(4-7)
同様に、未来の提示時刻t8に対して現時刻t合成開始(t7<t合成開始<t8)にて、参照可能であり且つ対応する姿勢変化情報が存在する時刻t4の姿勢情報P4と、この時刻t4から未来の提示時刻t8までの間の姿勢変化情報ΔP4,5,ΔP5,6,ΔP6,7,ΔP7,8と、を式(4)により合成することで以下の式(4-8)のように未来の提示時刻t8における合成姿勢情報Pe8が得られる。
Pe8=ΔP7,8ΔP6,7ΔP5,6ΔP4,5P4 …(4-8)
なお、線L9上のその他の合成姿勢情報Pei(i=4,5,6)に関しても、線L8上では不図示となっている姿勢変化情報ΔP1,2,ΔP2,3等と、姿勢情報P1,P2,P3のいずれかと、を上記の(4-7),(4-8)の例の場合と同様に適切な合成処理開始タイミングt合成開始において適切に選択することで、式(4)により合成することが可能である。
提示部6では、撮像部1から得られる撮像情報と合成部5から得られる合成姿勢情報とを用いて、合成姿勢情報に応じた提示情報を生成したうえでこの提示情報を撮像情報に対して重畳することで提示する。ここで、合成姿勢情報に応じた提示情報の生成に関しては、既存のAR技術を用いて、情報端末装置10がその用途として実現するアプリケーション内容に応じた任意内容のものを生成してよい。例えば、撮像情報に撮影されている対象物に対して、この対象物の空間的位置及び撮像しているカメラ201の姿勢(すなわち、合成姿勢情報において表現されている姿勢)に応じた空間位置を占める、対象物に対する解説コメントが記載された看板を、CG(コンピュータグラフィック)等によって生成したものを提示情報としてもよい。
なお、上記の実施形態は、提示部6がシースルー型ディスプレイ203ではなく、通常のディスプレイ202を用いて実現される場合のものである。提示部6がシースルー型ディスプレイ203を用いて実現される実施形態においては、提示部6では、撮像情報(シースルー型ディスプレイ203を通じてユーザに見えている景色に相当する)を用いることなく、合成姿勢情報や現実空間に存在する対象物(カメラ201に撮像されている対象物)に応じて生成された提示情報のみを、シースルー型ディスプレイ203上に表示するようにしてよい。
図8は、一実施形態に係る合成部5及び提示部6の動作のフローチャートである。図8において、ステップS51,S52,S53が合成部5の動作に関する部分であり、ステップS54,S55が提示部6の動作に関する部分である。
ステップS51では、現在時刻が合成部5における合成処理のタイミングに到達したか否かが判定され、到達していればステップS52へと進み、到達していなければステップS51に戻ってステップS51の判定を繰り返す。なお、ステップS51で肯定判定を得るタイミングは、既に説明した合成部5における合成開始時刻t合成開始である。ステップS52では、当該肯定判定を得た現在時刻t合成開始において利用可能である姿勢情報と、対応する姿勢変化情報とを取得してステップS53へと進む。ステップS53では、ステップS52において取得した情報を用いて、合成部5が前述の式(4)により、合成姿勢情報を得て提示部6へと出力してから、ステップS54へと進む。
ステップS54では、現在時刻(ステップS52で肯定判定を得た時刻t合成開始のすぐ後に相当する)が、提示部6における提示タイミングに到達したか否かを判定し、到達していればステップS55へと進み、到達していなければステップS54に戻ってステップS54の判定を繰り返す。ステップS55では、当該到達した現在時刻に対応する合成姿勢情報を用いて提示情報を生成したうえで、シースルー型ディスプレイ203の場合はこの提示情報のみを、又は、通常のディスプレイ202の場合はこの提示情報を撮像情報に重畳したものを、提示部6が提示してから、ステップS51へと戻る。
なお、提示部6による提示情報の生成や、さらに撮像情報に重畳する処理は、ステップS53内において合成部5が合成姿勢情報を得た後にただちに実施するようにして、ステップS55では既に生成・重畳されている提示情報等をそのまま提示するようにしてもよい。
ステップS54で肯定判定を得るタイミングとしての提示部6による提示タイミングは、既に言及した通り、所定レートのものとすることができ、例えば、撮像部1による撮像時刻(あるいは撮像タイミング)に一致させてよい。なお、第二推定部4の説明の際に既に言及したk回目の提示処理間隔t始端[k],t終端[k]は、この提示タイミングによって定義されるものである。すなわち、始端側時刻t始端[k]と終端側時刻t始端[k]とは共に提示タイミングであり、且つ、互いに隣接する提示タイミングである。
ステップS51における肯定判定を得る時刻としての合成タイミングt合成開始は、ステップS54の提示タイミングと同期(タイミングの間隔を一致させることによる同期)させて、この提示タイミングの直前にある所定時刻として設定してよい。すなわち、k回目の合成タイミングをt合成開始[k]とすると、以下の式(5A)~(5C)のように提示タイミングと同期させてこれを設定してよい。
t始端[k]< t合成開始[k]<t終端[k] …(5A)
t合成開始[k]= t終端[k]-b (bは以下の式(5C)の範囲にある定数) …(5B)
0<b<t終端[k]- t始端[k] …(5C)
なお、図3の例では、線L9上に示される合成姿勢情報Pei(i=4,5,…,8)は、上記の合成タイミングt合成開始[k]ではなく、この合成処理が完了した時刻位置に示されるものである。(合成処理は画像転送と比べると瞬時であるが、式(1)でも説明したように、変動しうる幾分かの時間を要するものである。)
図3の例では、線L10上に提示部6による処理例が示されている。すなわち、撮像時刻ti(i=4,5,…,8)と一致して提示部6による提示タイミングが設定され、この提示タイミングti(i=4,5,…,8)の直前で対応する合成姿勢情報Pei(i=4,5,…,8)を用いて提示情報Ai(i=4,5,…,8)を生成しておき、提示タイミングti(i=4,5,…,8)において提示情報A i(i=4,5,…,8)を提示部6が提示している。
以上のように、その一実施形態として例示された本発明によれば、可能な限り現在時刻に近い過去の撮像画像から高精度に、カメラ201の姿勢を姿勢情報として求めておき、且つ、この過去の姿勢情報の現在時刻までの微小時間における変化分も、センサ204の出力に未来予測を適用して姿勢変化情報として求めておき、現在時刻におけるカメラ201の姿勢を合成姿勢情報として得るので、現在時刻におけるカメラ201の姿勢を遅延なく高精度に求めることができる。この合成姿勢情報を用いて提示部6においてAR表示を実現すれば、特にシースルー型ディスプレイ203を用いる場合(ユーザに見えている景色が常に現在となる場合)であっても、遅延なく高精度なAR表示が実現されることとなる。
なお、シースルー型ではない通常のディスプレイ202で提示部6を実現する場合も、提示情報を重畳する対象の撮像画像として、撮像された直後の現在時刻とみなせるもの(カメラ201で映像撮影している際のプレビュー表示等で得られるもの)を採用することで、すなわち、姿勢情報を得るのは過去の撮像画像を用いるが、提示情報を重畳する対象としては現在の撮像画像を用いることで、シースルー型ディスプレイ203の場合とほぼ同様に、現在時刻において遅延なく高精度なAR表示を実現することができる。
すなわち、図3の例であれば、線L10上の提示タイミングti(i=4,5,…,8)における提示情報A i(i=4,5,…,8)を、これと同時刻である撮像時刻ti(i=4,5,…,8)において撮像された撮像画像Ii(i=4,5,…,8)に対して重畳したものを、提示部6において映像として提示するようにすればよい。
以下、本発明のその他の実施形態などに関する追加説明を行う。
(1)一定条件が満たされる場合に、合成部5が合成姿勢情報を合成する処理の負荷を軽減することが可能な実施形態として、次がある。既に説明したように、合成部5では繰り返し合成姿勢情報を合成しているが、k回目の合成処理と、その次のk+1回目の合成処理において、式(4)で利用する姿勢情報Paが変化しない場合、既に求まっているk回目の合成姿勢情報Pekを用いて、式(4)の全ての積を計算することなく、k+1回目の合成姿勢情報Pek+1への変化分に対応する1つの姿勢変化情報ΔPk,k+1のみを積算することで、以下の式(6)のようにk+1回目の合成姿勢情報Pek+1を簡素に計算してもよい。
Pek+1=ΔPk,k+1Pek …(6)
なお、k+2回目以降においても依然としてk回目において式(4)で利用する姿勢情報Paが変化しない場合は、同様に式(6)を繰り返し利用してよい。
ここで、k回目の合成処理と、その次のk+1回目(及びこれ以降)の合成処理において、式(4)で利用する姿勢情報Paが変化しないと判断される場合としては、次の第一及び第二の場合が挙げられる。ここで説明のため、k回目及びk+1回目の合成処理で利用する姿勢情報をそれぞれ、a[k]番目及びa[k+1]番目の撮像時刻ta[k]及びta[k+1](これらが同時刻の場合を含む)の撮像画像Ia[k]及びIa[k+1]から得たものとして、Pa[k]及びPa[k+1]と表記する。第一の場合として、a[k]=a[k+1]である場合、すなわち、利用する姿勢情報がk回目とk+1回目とで、同じ撮像時刻ta[k]=ta[k+1]の撮像画像から得られたものである場合がある。第一の場合はこの定義の通り、自動で判断することが可能である。第一の場合に該当するのは、この同じ撮像時刻ta[k]=ta[k+1]よりも後の撮像画像が破棄されてしまっている場合、又は、この撮像時刻ta[k]=ta[k+1]よりも後の撮像画像は得られているが、k+1回目の合成処理の開始時点においてはその姿勢情報の推定処理が完了していない場合、となる。
第二の場合として、a[k]≠a[k+1]であり、別の撮像時刻ta[k]≠ta[k+1]の撮像画像Ia[k]及びIa[k+1]から姿勢情報Pa[k]及びPa[k+1]が得られているが、これら姿勢情報がほぼ等しく変化がないと判定される場合がある。すなわち、「Pa[k]≒Pa[k+1]」と判定される場合である。この判定は例えば、両行列の差のノルム|Pa[k]-Pa[k+1]|(行列の各成分の絶対値和によるノルム等、以下同様)が閾値以下であることによって判定すればよい。
式(6)を適用する具体例として、前述の式(4-7)及び(4-8)の例に関して、k回目(k=7回目)は式(4-7)で算出し、k+1回目(k+1=8回目)において、図3の例とは異なり仮に姿勢情報P4が利用できなかったとする場合、あるいは、姿勢情報P4は利用可能だが「P3≒P4」と判定された場合には、式(4-8)の多数の積算に代えて以下の式(7)で直前の合成姿勢情報Pe7に姿勢変化情報ΔP7,8を乗ずるのみで、合成姿勢情報Pe8を簡素に計算することが可能である。
Pe8=ΔP7,8Pe7 …(7)
(2)既に説明したように、撮像部1は所定の撮像レートにおいて繰り返し撮像を行い、時間軸上での撮像画像In(n=1,2,…)を得る。そして、第一推定部3においては、この全て撮像画像In(n=1,2,…)を姿勢情報の推定対象としてもよいし、既に説明した第一手法により一定割合で間引いたもののみを姿勢情報の推定対象としてもよい。
ここで、第一手法における間引き割合を動的に決定する実施形態として、次も可能である。この実施形態では、合成部5がタイミングを同期させて合成姿勢情報を合成する対象としての提示部6における提示タイミングは、撮像部1における撮像時刻(あるいは撮像タイミング)に合致させることを前提とする。第一推定部3では追加処理として、この提示タイミングにおいて、あるいは、ステップS31の推定処理が完了したタイミングにおいて、あるいは、その他の任意の所定タイミングにおいて、過去の同一の提示タイミングt過去に対するものとして合成部5で得た合成姿勢情報Pe過去と、この過去時刻t過去にて撮像部1で撮像画像I過去を撮像して第一推定部3で既に推定済みとなっているその姿勢情報P過去と、のうち、参照可能であり且つ現在時刻に近い側のものを比較する処理を行う。すなわち、両行列の差のノルム|Pe過去-P過去|を評価する処理を行う。
この比較処理により差のノルムが所定閾値以下となることで、両者が概ね等しい、すなわち、「Pe過去≒P過去」と判定されることはすなわち、合成部5で用いた姿勢変化情報の精度が高いことを意味している。そして、センサ204の出力に基づいて得られた姿勢変化情報の精度が高いということはすなわち、実際のカメラ201の姿勢変化が小さく、その動きが小さいことが原因であると想定される。従って、高精度であるが計算負荷も高い第一推定部3による撮像画像を用いた姿勢情報の推定処理レートを下げても、合成部5で得られる合成姿勢情報の精度は維持されることが期待される。
上記の考察に基づき、「Pe過去≒P過去」と判定された場合には、第一推定部3においては推定処理の間引き割合を動的に大きくするように変更してよい。より一般には、Pe過去ととP過去と相違を差ノルム|Pe過去-P過去|として評価し、差ノルムが小さいほど推定処理の間引き割合を大きく設定してよい。評価対象としての過去時刻t過去は、直近の利用可能な1つのみとしてもよいし、2つ以上のものとして、差ノルムの線形和で評価してもよい。
図3の例であれば、時刻t4において、合成姿勢情報Pe4が式(4)による積「Pe4=ΔP3,4ΔP2,3ΔP1,2P1」(既に述べた通り、ΔP2,3及びΔP1,2は線L8上において不図示であるが、適切な時間範囲で推定可能なものである)として合成完了した後に、時刻t6と時刻t7との間で第一推定部が時刻t4の姿勢情報P4の推定を完了するので、例えばその直後の時刻t7において合成姿勢情報Pe4と姿勢情報P4とを比較し、一致度合が低ければ間引き割合を小さくし、一致度合が高ければ間引き割合を維持あるいは大きくする、といった動的な間引き割合の設定が可能である。
なお、この実施形態は、第一推定部3においてカメラ201の姿勢を推定するために用いる正方マーカ等の対象物は、静止していることを前提とする。
(3)合成部5が式(4)により合成姿勢情報を得る処理を開始する時刻t合成開始において、次の提示タイミングtiまでの1つ以上の姿勢変化情報ΔPk,k+1(k=a,a+1,…,i-2,i-1)のうち、第二推定部4の推定処理による未来予測値としてではなく、センサ部2による実測の値が既に得られているものがあれば、未来予測値を実測の値に置き換えて、式(4)を適用するようにしてもよい。
すなわち、a<r<i-1として、k=a,a+1,…,r-1,rまでは、予測値ΔPk,k+1に対応するセンサ実測値がΔPk,k+1[実測]として得られており、k=r+1,r+2,…,i-2,i-1までは予測値ΔPk,k+1のみが得られている場合に、式(4)に代えて、以下の式(8)で合成姿勢情報を求めるようにしてよい。
なお、この実施形態においては、第二推定部4によるステップS42における推定処理に対する追加処理として、過去に既に求めた予測値ΔPk,k+1のうち、センサ部2からの出力(時刻tk,tk+1間での出力)に基づく実測値ΔPk,k+1[実測]が参照可能なものがある場合に、この参照可能となった実測値ΔPk,k+1[実測]を合成部5に対して出力する処理を行うものとする。
例えば、前述の式(4-7)の例で、この合成処理開始時点での4つの推定された姿勢変化情報ΔP3,4,ΔP4,5,ΔP5,6,ΔP6,7のうち過去側の3つに関して、実測の姿勢変化情報ΔP3,4[実測],ΔP4,5[実測],ΔP5,6[実測]が得られて出力されている場合、式(4-7)に代えて以下の式(9)で合成姿勢情報を得るようにしてよい。
Pe7=ΔP6,7ΔP5,6[実測]ΔP4,5[実測]ΔP3,4[実測]P3 …(9)
(4)第一推定部3で得る姿勢情報(基準姿勢からの変化としての姿勢情報)と、第二推定部4で得る姿勢変化情報と、は3次元空間内での姿勢変化に対応する変換を2次元画像座標(斉次座標)において行う平面射影変換行列(サイズ3×3)の形で得る場合を例として説明してきたが、その他の形を用いてもよい。例えば、姿勢情報及び姿勢変化情報は、3次元空間内での姿勢変化をそのまま表現するものとして、以下の式(10)で与えられる回転成分rij(1≦i,j≦3)と並進成分tX,tY,tZで構成されるカメラ201の外部パラメータM(サイズ4×4)の形を用いるようにしてもよい。この外部パラメータMを用いる場合も、合成部5による合成は以上の式(4)やその他の式の例と同様に積の形で、ほぼ瞬時に行うことが可能である。提示部6において提示情報を生成する際は、外部パラメータMに加えてカメラ201の所定の内部パラメータを用いてCG分野で既知の数学的関係により透視投影行列(カメラ行列)を求め、モデル空間で定義されている3次元CGモデルを撮像部1の画像座標へと、この透視投影行列を用いて投影したものにより、提示情報を生成してよい。あるいは、外部パラメータM及び内部パラメータから既知のエピポーラ幾何の関係を用いて、空間内の同一平面上にある点を2つの異なるカメラ位置で撮像した際の、この点の2つの画像座標間での変換関係として平面射影変換行列を求め、この平面射影変換行列を用いて既に説明した手法で提示情報を生成してもよい。