以下、添付図面を参照し、本発明の実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の1つである。
[第1の実施形態]
本実施形態に係るシステムは、現実空間と仮想空間との合成空間である複合現実空間を、HMD等の頭部装着型表示装置や、頭部装着型表示装置は別個に設けられた表示装置に対して提示する複合現実感提示システムである。先ず、本実施形態に係るシステムの概要について、図1を用いて説明する。
ユーザの頭部にはHMD101が装着されており、HMD101の表示画面には、画像処理装置としてのPC100から出力される複合現実空間の画像が表示される。ユーザはHMD101の表示画面に表示される複合現実空間の画像を観察することで複合現実空間を体験する。
HMD101には、光学式センサ104で検知可能(計測可能)な光学式マーカ103が取り付けられており、光学式センサ104による光学式マーカ103の計測結果はPC100に送出される。図1では図示を簡略化するために、光学式センサ104の数を1としているが、実際には複数の光学式センサ104を配置する。PC100は光学式センサ104による光学式マーカ103の計測結果に基づいて光学式マーカ103の位置姿勢を求める。光学式センサ104による光学式マーカ103の計測結果に基づいて該光学式マーカ103の位置姿勢を求めるための技術については周知であるため、該技術に係る詳細な説明は省略する。そしてPC100は、例えばHMD101に備わっているカメラをユーザの視点(ユーザ視点)とする場合には、予め求めた「ユーザ視点と光学式マーカ103との間の相対的な位置姿勢関係」を用いて、光学式マーカ103の位置姿勢をユーザ視点の位置姿勢に変換する。
なお、ユーザ視点の位置姿勢を取得する方法は特定の方法に限らない。例えば、ユーザ視点の位置姿勢を得るために用いる位置姿勢計測用センサは光学式センサ104に限らず、磁気センサ、超音波センサなど他の種類の位置姿勢計測用センサを用いてユーザ視点の位置姿勢を取得するようにしても良い。また、現実空間中に配されている二次元マーカ102をHMD101に備わっているカメラにより撮像し、該撮像により得られる撮像画像を用いてユーザ視点の位置姿勢を求めても良い。また、位置姿勢計測用センサと2次元マーカとを併用してユーザ視点の位置姿勢を取得するようにしても良い。
そしてPC100は、CGモデル130等の仮想物体を生成して仮想空間中に配置し、ユーザ視点から見た仮想物体の画像を生成する。そしてPC100は、この生成した仮想物体の画像と、HMD101が有するカメラにより撮像された現実空間の画像と、を合成した合成画像を複合現実空間の画像として生成し、該生成した複合現実空間の画像をHMD101に対して送出する。これによりユーザは、自身の視点の位置姿勢に応じた複合現実空間の画像を眼前に観察することができる。
また、現実空間には、ユーザが複合現実空間を体験している様子を撮像する客観カメラ106が配置されており、客観カメラ106による撮像画像はPC100に送出される。図1では図示を簡略化するために、客観カメラ106の数を1としているが、複数台の客観カメラ106を配置しても良い。PC100は、客観カメラ106の位置姿勢(既知)を用いて、該位置姿勢を有する視点から見えるCGモデル130等の仮想物体の画像を生成し、該生成した画像を、客観カメラ106により撮像された現実空間の画像と合成して、客観画像ディスプレイ160に対して送出する。つまり客観画像ディスプレイ160には、複合現実空間を体験するユーザの視点(主観視点)とは異なる視点(客観視点)から見た複合現実空間の画像が表示されることになる。
また、ユーザの人体には、モーションキャプチャー技術で用いる複数個のモーションマーカ105が取り付けられている。これらのモーションマーカ105は光学式センサ104によって計測され、その計測結果はPC100に送出される。なお、モーションマーカ105は、モーションマーカを計測可能な専用のモーションセンサで計測することも可能であり、モーションマーカ105を計測するためのモーションキャプチャシステムに適用可能なシステムは特定のシステムに限らない。PC100は、光学式センサ104によるモーションマーカ105の計測結果に基づいて、それぞれのモーションマーカ105の3次元位置を求める。光学式センサ104によるモーションマーカ105の計測結果に基づいて該モーションマーカ105の3次元位置を求めるための技術については周知であるため、該技術に係る詳細な説明は省略する。そしてPC100は、後述する条件が満たされた場合に、ユーザの現在の人体の姿勢を表す人体モデルをモーションマーカ105の3次元位置に基づいて生成し、客観カメラ106の位置姿勢を有する視点から見える人体モデルの画像を生成し、該生成した画像を、客観カメラ106による撮像画像に合成して客観画像ディスプレイ160に出力する。つまり、後述する条件が満たされた場合には、客観画像ディスプレイ160には、客観カメラ106の位置姿勢に応じて生成された仮想物体及び人体モデルの画像と、客観カメラ106による撮像画像と、が合成された合成画像が複合現実空間の画像として表示されることになり、後述する条件が満たされていない場合には、客観画像ディスプレイ160には、客観カメラ106の位置姿勢に応じて生成された仮想物体の画像と、客観カメラ106による撮像画像と、が合成された合成画像が複合現実空間の画像として表示されることになる。人体モデルは、例えば、モーションマーカ105の3次元位置を線分モデルで結んだ3次元モデルでも良いし、モーションマーカ105の3次元位置を関節の位置とする3次元モデルでも良いし、モーションマーカ105の3次元位置を輪郭とする3次元モデルでも良い。
次に、HMD101及びPC100のそれぞれのハードウェア構成例について、図2のブロック図を用いて説明する。なお、図2に示した構成は、HMD101、PC100に適用可能なハードウェア構成の一例であり、図2の構成に限るものではない。
先ず、HMD101について説明する。右目・左目ビデオカメラ221は、ユーザの右目に提供する現実空間の画像を撮像するための右目用ビデオカメラと、ユーザの左目に提供する現実空間の画像を撮像するための左目用ビデオカメラと、を有し、それぞれのビデオカメラによる撮像画像(現実空間の画像)はPC100に送出される。
右目・左目ディスプレイ222は、ユーザの右目に映像(画像及び文字を含む)を提供するための右目用ディスプレイと、ユーザの左目に映像(画像及び文字を含む)を提供するための左目用ディスプレイと、を有する。PC100から送出された右目用の映像は右目用ディスプレイに表示され、左目用の映像は左目用ディスプレイに表示される。
次に、PC100について説明する。汎用バス212は、右目・左目ビデオカメラ221から送出される現実空間の画像を受信するためのインターフェースとして機能するものであり、例えば、外部入力端子(例えば、IEEE1394端子)によって構成される。
CPU201はROM202やRAM203に格納されているコンピュータプログラムやデータを用いて各種の処理を実行する。これによりCPU201は、PC100全体の動作制御を行うと共に、PC100が行うものとして後述する各処理を実行若しくは制御する。
ROM202には、書換不要のコンピュータプログラムやデータ、例えば、CPU201の制御プログラムであるBIOS(Basic Input / OutputSystem)が格納されている。
RAM203は、ROM202や外部メモリ211からロードされたコンピュータプログラムやデータを格納するためのエリアを有する。またRAM203は、汎用バス212を介して右目・左目ビデオカメラ221から受信した現実空間の画像を格納するためのエリアを有する。またRAM203は、通信I/Fコントローラ208を介して光学式センサ104から受信した計測結果を格納するためのエリアを有する。またRAM203は、通信I/Fコントローラ208を介して客観カメラ106から受信した現実空間の画像を格納するためのエリアを有する。またRAM203は、CPU201が各種の処理を実行する際に用いるワークエリアを有する。このようにRAM203は、各種のエリアを適宜提供することができる。
ビデオコントローラ206は、右目・左目ディスプレイ222、ディスプレイ210、客観画像ディスプレイ160の表示制御を行うためのものである。右目・左目ディスプレイ222に対しては、例えば外部出力端子(例えば、Digital Visual Interface)を用いて映像信号(画像や文字の表示用信号)の出力を行う。ディスプレイ210は、CRTや液晶画面などにより構成されており、CPU201による処理結果を画像や文字などでもって表示することができる。
入力コントローラ205は、入力デバイス209の動作制御を行うためのものである。入力デバイス209は、マウスやキーボードなどのユーザインターフェースとして機能するものであり、ユーザが操作することで各種の指示をCPU201に対して入力することができる。例えば、入力デバイス209がタッチパネルの場合、ユーザがタッチパネルに表示されたアイコンやカーソルやボタンを押下(指等でタッチ)することにより、各種の指示の入力を行うことができる。なお、タッチパネルは、マルチタッチスクリーンなどの、複数の指でタッチされた位置を検出することが可能なタッチパネルであってもよい。
メモリコントローラ207は、外部メモリ211への情報の読み書きを制御するためのものである。外部メモリ211は、ハードディスクドライブ装置、フレキシブルディスク、PCMCIAカードスロットにアダプタを介して接続されるカード型メモリ等のメモリ装置である。外部メモリ211には、OS(オペレーティングシステム)や、PC100が行うものとして後述する各処理をCPU201に実行若しくは制御させるためのコンピュータプログラムやデータが保存されている。
外部メモリ211に保存されているコンピュータプログラムには、以下に説明する各フローチャートに従った処理をCPU201に実行させるためのコンピュータプログラムが含まれている。また、外部メモリ211に保存されているデータには、本実施形態を含む以下の各実施形態において既知の情報として取り扱う情報や、CGモデル130を含む様々な仮想物体の描画に要するデータ(描画データ)が含まれている。外部メモリ211に保存されているコンピュータプログラムやデータは、CPU201による制御に従って適宜RAM203にロードされ、CPU201による処理対象となる。なお、外部メモリ211は、USBメモリ、SDカードなどのメモリ装置であっても良い。
通信I/Fコントローラ208は、光学式センサ104及び客観カメラ106のそれぞれから計測結果や現実空間の画像を受信するためのインターフェースとして機能するものである。また通信I/Fコントローラ208は、LANやインターネットなどのネットワークを介して外部の機器との間のデータ通信を行うためのインターフェースとして機能するものである。例えば、通信I/Fコントローラ208は、TCP/IPを用いたインターネット通信等が可能である。また通信I/Fコントローラ208は、ギガビットイーサネット(登録商標)等を通じて光学式センサ104との通信も制御する。なお、図1では、光学式センサ104、客観カメラ106、及び客観画像ディスプレイ160と、PC100と、の間のデータ通信は有線であるが、無線であっても良い。例えば、PC100は、LANケーブルやUSBケーブル、無線通信など様々な通信形態によって光学式センサ104、客観画像ディスプレイ160、客観カメラ106との間のデータ通信を行うことができる。
上記の汎用バス212、CPU201、ROM202、RAM203、ビデオコントローラ206、入力コントローラ205、メモリコントローラ207、通信I/Fコントローラ208は何れも、システムバス204に接続されている。
なお、本実施形態では、HMD101とPC100とを別個の機器とするが、HMD101とPC100とを一体化させても良い。また、PC100をサーバ装置として取り扱っても良い。
次に、PC100のモジュール構成例について、図4のブロック図を用いて説明する。オペレーティングシステム401は、HMD101との間の入出力を制御し、右目・左目ビデオカメラ221から汎用バス212を介して得られた現実空間の画像を複合現実感プラットフォーム403へと受け渡す。またオペレーティングシステム401は、グラフィックエンジン402で描画された複合現実空間の画像を、ビデオコントローラ206を介して、右目・左目ディスプレイ222へ出力する。
グラフィックエンジン402は、外部メモリ211に記憶されている仮想物体の描画データを用いて仮想物体の画像を生成し、該生成した仮想物体の画像を右目・左目ビデオカメラ221による撮像画像上に重畳することで複合現実空間の画像を生成する。仮想物体の画像の生成(描画)に利用するエンジンは、例えば、OpenGLやDirectXなどの広く利用されているグラフィックエンジンでも、独自に開発したグラフィックエンジンでもよい。なお、本実施形態ではグラフィックライブラリとしてOpenGLを利用するものとする。
複合現実感プラットフォーム(MRプラットフォームともいう)403は、上記のようにしてユーザの視点の位置姿勢を求め、現実空間と仮想空間との位置合わせを行う。これらの技術は、例えば、特開2002-32784号公報、特開2006-072903公報、特開2007-166427公報等に開示されている既存の技術を用いて実現することが可能である。
複合現実感アプリケーション(MRアプリケーションやビューアアプリケーションともいう)404は、複合現実感プラットフォーム403から視点の位置姿勢や、仮想物体の色や形状の情報、仮想物体の位置姿勢等の仮想物体の描画に要する情報を受け付け、グラフィックエンジン402に対して、仮想物体の画像の描画命令を発行する。この時、OpenGLのAPIを用いて、描画する仮想物体の識別情報、位置姿勢の情報を設定した命令を発行する。
また、複合現実感プラットフォーム403は、客観カメラ106から撮像画像を受信すると、該撮像画像を複合現実感アプリケーション404へ受け渡す。モーションキャプチャシステム405は、光学式センサ104によるモーションマーカ105の計測結果に基づいてモーションマーカ105の3次元位置を求める。複合現実感アプリケーション404は、モーションキャプチャシステム405から取得したモーションマーカ105の3次元位置と人体モデルとに応じた人体モデルの描画情報(後述する条件が満たされた場合)と、撮像画像と、仮想物体の描画命令と、をグラフィックエンジン402に出力する。グラフィックエンジン402は、人体モデル及び仮想物体が撮像画像に重畳された複合現実空間の画像を生成して客観画像ディスプレイ160に出力する。
次に、1枚(1フレーム分)の複合現実空間の画像を生成してHMD101や客観画像ディスプレイ160に表示するためにHMD101及びPC100が行う処理について、図5のフローチャートに従って説明する。
ステップS503では、右目・左目ビデオカメラ221は、撮像した現実空間の画像(右目用カメラによる撮像画像、左目用カメラによる撮像画像)をPC100に対して出力する。
ステップS504では、CPU201は、右目・左目ビデオカメラ221から出力された現実空間の画像を汎用バス212を介して受信し、ステップS505ではCPU201は、該受信した現実空間の画像をRAM203や外部メモリ211に格納する。
ステップS506では、CPU201は、光学式センサ104による光学式マーカ103の計測結果を通信I/Fコントローラ208を介して取得し、該取得した計測結果に基づいて上記のようにしてユーザ視点の位置姿勢(HMD101の位置姿勢)を求める。ステップS506で求めるユーザ視点の位置姿勢は、右の視点(右目用ビデオカメラ)の位置姿勢、左の視点(左目用ビデオカメラ)の位置姿勢、である。右の視点については上記と同様、予め求めた「右の視点と光学式マーカ103との間の相対的な位置姿勢関係」を用いて、光学式マーカ103の位置姿勢を変換することで求めることができる。同様に、左の視点については上記と同様、予め求めた「左の視点と光学式マーカ103との間の相対的な位置姿勢関係」を用いて、光学式マーカ103の位置姿勢を変換することで求めることができる。
ステップS507では、CPU201は、ステップS506で求めた視点の位置姿勢を、HMD101の識別情報(ID)と関連づけて外部メモリ211に格納する。例えば、図7(a)に示す如く、HMDごとにID、位置、姿勢を対応付けて管理しているHMD情報1110の欄1111にHMD101のIDを登録し、欄1112にHMD101の位置を登録し、欄1113にHMD101の姿勢を登録する。HMD情報1110は外部メモリ211に保存されている。
ステップS508では、CPU201は、外部メモリ211に格納されている仮想物体の描画データをRAM203に読み出し、該読み出した描画データに基づいて仮想物体を生成し、該生成した仮想物体を仮想空間中に配置する。そしてCPU201は、ステップS506で求めた視点の位置姿勢に基づいて、該視点から見た仮想物体の画像を生成する。そしてCPU201は、ステップS504で受信した現実空間の画像上に、仮想物体の画像を重畳させることで複合現実空間の画像(MR画像)を生成する。厳密にはCPU201は、右目用カメラによる撮像画像(現実空間の画像)上に、右の視点の位置姿勢に基づいて生成した仮想物体の画像を重畳させることで、右目用の複合現実空間の画像を生成すると共に、左目用カメラによる撮像画像(現実空間の画像)上に、左の視点の位置姿勢に基づいて生成した仮想物体の画像を重畳させることで、左目用の複合現実空間の画像を生成する。
ステップS509では、CPU201は、ステップS508において生成した複合現実空間の画像(右目用の複合現実空間の画像、左目用の複合現実空間の画像)を、ビデオコントローラ206を介してHMD101及びディスプレイ210に対して出力する。
ステップS510では、右目・左目ディスプレイ222は、ステップS509においてPC100から送信された右目用の複合現実空間の画像及び左目用の複合現実空間の画像を受信する。そしてステップS511では、右目・左目ディスプレイ222は、右目用の複合現実空間の画像を右目用ディスプレイに表示すると共に、左目用の複合現実空間の画像を左目用ディスプレイに表示する。
右目・左目ディスプレイ222に表示される複合現実空間の画像の一例を図13に示す。図13(a)は、CGモデル130を観察するユーザ視点に基づく複合現実空間の画像の一例を示している。図13(b)は、CGモデル130の下側に位置するユーザ視点に基づく複合現実空間の画像の一例を示しており、CGモデル130に加えてユーザの腕1301が写っている。
また、PC100は、ステップS504~S509の処理と並行して、ステップS520~S524の処理も実行する。
ステップS520では、CPU201は、光学式センサ104によるモーションマーカ105の計測結果を通信I/Fコントローラ208を介して取得し、該取得した計測結果に基づいてモーションマーカ105の3次元位置を人体情報として求める。
ステップS521ではCPU201は、ステップS520において求めた人体情報を外部メモリ211に格納する。
ステップS522では、CPU201は、図6のフローチャートに従った処理を実行する。
ステップS601では、CPU201は、人体情報に基づく上記の人体モデルを生成するのか否か(人体モデルを生成して客観カメラ106による撮像画像上に重畳させるのか(反映させるのか)否か)を決定するための複数の条件(モード)のうち、現在PC100に設定されているモードを判定する。
この判定の結果、現在PC100に設定されているモードが「近接・指定位置モード」の場合には、処理はステップS602に進む。また、現在PC100に設定されているモードが「干渉モード」の場合には、処理はステップS603に進む。また、現在PC100に設定されているモードが「視線モード」の場合には、処理はステップS604に進む。
ステップS602における処理の詳細について、同処理のフローチャートを示す図8を用いて説明する。
ステップS801では、CPU201は、ステップS506において求めた視点の位置(右の視点、左の視点の何れでも良い)を取得する。
ここで、上記の「近接・指定位置モード」には、「指定位置近接モード」と「CGモデル近接モード」とが含まれている。ステップS802ではCPU201は、現在PC100に設定されているモードが「近接・指定位置モード」のうち「指定位置近接モード」でるのか、それとも「CGモデル近接モード」であるのかを判断する。この判断の結果、現在PC100に設定されているモードが「近接・指定位置モード」のうち「指定位置近接モード」であれば、処理はステップS804に進み、現在PC100に設定されているモードが「近接・指定位置モード」のうち「CGモデル近接モード」であれば、処理はステップS803に進む。
ステップS803では、CPU201は、ステップS506において求めた視点の位置と、仮想空間中に配置した仮想物体のうち特定の仮想物体の配置位置と、の間の距離を求める。
ここで、外部メモリ211には、図7(c)に示す如く、仮想空間に配置するそれぞれの仮想物体を管理するCGモデル情報1120が保存されている。CGモデル情報1120における欄1121には、仮想物体に固有のID(モデルID)が登録されており、欄1122には、仮想物体の描画データのファイル名(モデル名)が登録されており、欄1123には、仮想物体の描画データが格納されているファイルのパス(ファイルパス)が登録されており、欄1124には、仮想物体の配置位置が登録されており、欄1125には、仮想物体の配置姿勢が登録されている。然るに上記のステップS508では、CPU201は、外部メモリ211に格納されているCGモデル情報1120を参照することで、描画対象となる仮想物体のIDに対応する欄1122及び欄1123のそれぞれに登録されているモデル名及びファイルパスに基づいて該仮想物体の描画データを読み出し、該読み出した描画データに基づいて該仮想物体を生成し、該生成した仮想物体を、該IDに対応する欄1124及び欄1125のそれぞれに登録されている位置及び姿勢でもって仮想空間中に配置する。
更に、CGモデル情報1120の欄1126には、仮想物体に対する人体制御フラグの値(ON若しくはOFF)が登録されている。ステップS803では、CPU201は、ステップS506において求めた視点の位置と、CGモデル情報1120に登録されている仮想物体のうち、人体制御フラグの値が「ON」の仮想物体の配置位置(欄1124)と、の間の距離を求める。図7(c)の場合、モデルID=M111に対応する仮想物体及びモデルID=M333に対応する仮想物体のそれぞれの位置と視点の位置との間の距離を求めることになる。
一方、ステップS804では、CPU201は、ステップS506において求めた視点の位置と、現実空間(若しくは仮想空間)における規定位置(予め指定された指定位置)と、の間の距離を求める。
ステップS805では、CPU201は、現モードについて予め設定されている設定値としての規定距離を取得する。例えば外部メモリ211には図7(b)に示す如く、現在PC100に設定されているモードを示すモード設定1130が登録されており、モード設定1130における欄1131には、現在PC100に設定されているモードが登録されており、欄1132には、現在PC100に設定されているモードに対応する設定値が登録されている。図7(b)に示したモード設定1130では、PC100に設定されているモードとして「指定位置近接モード」が設定されており、「指定位置近接モード」に対応する設定値として「50cm」が設定されている。然るにこの場合、ステップS805では、モード設定1130から設定値として「50cm」を規定距離として取得することになる。
ステップS806では、CPU201は、ステップS803もしくはステップS804で求めた距離dと、ステップS805において取得した規定距離θと、の大小比較を行う。ステップS803において複数の距離dを求めた場合には、そのうちの1つ(例えば最小の距離)と、ステップS805において取得した規定距離θと、の大小比較を行う。この大小比較の結果、d<θの場合には、処理はステップS807に進み、d≧θの場合には、処理はステップS809に進む。
ステップS807では、CPU201は、上記のステップS521において外部メモリ211に格納した人体情報を読み出す。そしてステップS808では、CPU201は、人体情報に基づいて上記の人体モデルを生成する。例えば、ユーザの人体の基本姿勢を表す人体モデルとして図7(e)に示す人体モデルを使用する場合、黒丸で示している箇所の位置を、該箇所に対応するモーションマーカ105の3次元位置に応じて移動させることで、現在のユーザの姿勢を表す人体モデルに変形させる。
一方、ステップS809では、CPU201は、終了判定フラグの値(初期値はOFF)をONに設定する。
ステップS808からステップS810に処理が進んだ場合、ステップS810では、CPU201は、客観カメラ106の位置姿勢を有する視点から見える仮想物体及び人体モデルの画像を生成し、該生成した画像を、客観カメラ106により撮像された現実空間の画像と合成することで客観視点に基づく複合現実空間の画像を生成し、該生成した客観視点に基づく複合現実空間の画像を客観画像ディスプレイ160に対して送出する。
一方、ステップS809からステップS810に処理が進んだ場合、ステップS810では、CPU201は、客観カメラ106の位置姿勢を有する視点から見える仮想物体の画像を生成し、該生成した画像を、客観カメラ106により撮像された現実空間の画像と合成することで客観視点に基づく複合現実空間の画像を生成し、該生成した客観視点に基づく複合現実空間の画像を客観画像ディスプレイ160に対して送出する。
ステップS811では、CPU201は、複合現実空間の画像や人体情報を外部メモリ211に保存する処理を行う。ステップS811における処理の詳細について、同処理のフローチャートを示す図11を用いて説明する。
ステップS1101では、CPU201は、終了判定フラグ=ONであるか否かを判断する。この判断の結果、終了判定フラグ=ONであれば、処理はステップS1102に進み、終了判定フラグ=OFFであれば、処理はステップS1103に進む。
終了判定フラグ=ONは、人体情報を対応付けて保存しない条件であり、例えば、ユーザと対象モデルとの距離が規定距離外であった場合には、人体情報と複合現実空間の画像を対応付けて保存しない。これは後からユーザの姿勢を検証する際に、検証に不要な姿勢(人体情報)を記録する処理を軽減するためである。
ステップS1103では、CPU201は、複合現実空間の画像を動画像として保存するのか、静止画像として保存するのかを判断する。「複合現実空間の画像を動画像として保存する」とは、連続的に生成される各フレームの複合現実空間の画像を1つのファイルに格納することを意味する。「複合現実空間の画像を静止画像として保存する」とは、1つのファイルに1フレーム分の複合現実空間の画像を格納することを意味する。複合現実空間の画像を動画像として保存するのか静止画像として保存するのかは予め設定されているものとする。複合現実空間の画像を動画像として保存する場合には、処理はステップS1104に進み、複合現実空間の画像を静止画像として保存する場合には、処理はステップS1106に進む。
ステップS1104では、CPU201は、複合現実空間の画像を動画像として外部メモリ211に保存する。
ステップS1105では、CPU201は、人体情報を外部メモリ211に保存する。なお、ステップS1104において保存する複合現実空間の画像とステップS1105において保存する人体情報とは対応付けて保存するものとする。なお、人体情報の代わりに、該人体情報に基づいて変形させた人体モデルを保存するようにしても良いし、客観カメラ106による撮像画像に仮想物体及び人体モデルを重畳させた複合現実空間の画像を保存するようにしても良い。
ステップS1106では、CPU201は、上記のステップS806においてd<θの状態が連続して所定時間(例えば3秒)以上経過した、以下のステップS902において判定対象との干渉状態が連続して所定時間以上経過した、以下のステップS1003において視線ベクトルと交点を有する状態が連続して所定時間以上経過した、の何れか条件が満たされているか否かを判断する。この判断の結果、何れかの条件が満たされている場合には、処理はステップS1007に進み、何れの条件も満たされていない場合には、図11のフローチャートに従った処理は完了する。
ステップS1107では、CPU201は、複合現実空間の画像を静止画像として外部メモリ211に保存する。
ステップS1108では、CPU201は、人体情報を外部メモリ211に保存する。なお、ステップS1107において保存する複合現実空間の画像とステップS1108において保存する人体情報とは対応付けて保存するものとする。なお、人体情報の代わりに、該人体情報に基づいて変形させた人体モデルを保存するようにしても良いし、客観カメラ106による撮像画像に仮想物体及び人体モデルを重畳させた複合現実空間の画像を保存するようにしても良い。
一方、ステップS1102では、CPU201は、複合現実空間の画像を動画像として保存している場合には、ステップS1104において複合現実空間の画像の格納処理を行っているファイルを外部メモリ211に保存する。
図8に戻って、ステップS812では、CPU201は、終了判定フラグ=ONであるか否かを判断する。この判断の結果、終了判定フラグ=ONであれば、処理はステップS523に進む。一方、終了判定フラグ=OFFであれば、処理はステップS801に進む。
次に、上記のステップS603における処理の詳細について、同処理のフローチャートを示す図9を用いて説明する。
ステップS901では、CPU201は、仮想空間に配置されている仮想物体のうち特定の仮想物体を、干渉判定の対象(判定対象モデル)として特定する。例えば、CPU201は、上記のCGモデル情報1120において人体制御フラグの値が「ON」の仮想物体を判定対象モデルとして特定する。
次にステップS902では、CPU201は、ユーザと判定対象モデルとの間で干渉があったか否かを判断する。この判断には様々な方法を適用することができる。例えば、ユーザの手にも光学式マーカ103を取り付けておき、光学式センサ104によってユーザの手に取り付けられている光学式マーカ103の3次元位置を求める。そして、ユーザの手に取り付けられている光学式マーカ103の3次元位置と、判定対象モデルの3次元位置と、の間の距離が規定距離以内であれば、ユーザの手と判定対象モデルとの間で干渉があったと判定することができる。また、HMD101が有する右目・左目ビデオカメラ221により撮像された撮像画像から手の3次元位置を算出し、該算出した3次元位置と、判定対象モデルの3次元位置と、の間の距離が規定距離以内であれば、ユーザの手と判定対象モデルとの間で干渉があったと判定することができる。なお、ユーザの手の代わりに他の物体と判定対象モデルとの間の干渉を判定しても良い。例えば、ユーザが手で把持する指示具と判定対象モデルとの間の干渉を判定するようにしても良い。この場合、指示具に光学式マーカ103を取り付けおき、光学式センサ104によって指示具に取り付けられている光学式マーカ103の3次元位置を求める。そして、指示具に取り付けられている光学式マーカ103の3次元位置と判定対象モデルの3次元位置と、の間の距離が規定距離以内であれば、指示具と判定対象モデルとの間で干渉があったと判定することができる。また、ユーザの手の位置姿勢に応じてその位置姿勢を変化させる仮想物体としての指示具と判定対象モデルとの間で干渉があったか否かを判定しても良い。
このような判断の結果、干渉があったと判断した場合には、処理はステップS903に進み、干渉はなかったと判断した場合には、処理はステップS905に進む。
ステップS903では、CPU201は、上記のステップS521において外部メモリ211に格納した人体情報を読み出す。そしてステップS904では、CPU201は、上記のステップS808と同様にして、人体情報に基づいて上記の人体モデルを生成する。
一方、ステップS905では、CPU201は、終了判定フラグの値(初期値はOFF)をONに設定する。
ステップS904からステップS906に処理が進んだ場合、ステップS906では、CPU201は、客観カメラ106の位置姿勢を有する視点から見える仮想物体及び人体モデルの画像を生成し、該生成した画像を、客観カメラ106により撮像された現実空間の画像と合成することで客観視点に基づく複合現実空間の画像を生成し、該生成した客観視点に基づく複合現実空間の画像を客観画像ディスプレイ160に対して送出する。
一方、ステップS905からステップS906に処理が進んだ場合、ステップS906では、CPU201は、客観カメラ106の位置姿勢を有する視点から見える仮想物体の画像を生成し、該生成した画像を、客観カメラ106により撮像された現実空間の画像と合成することで客観視点に基づく複合現実空間の画像を生成し、該生成した客観視点に基づく複合現実空間の画像を客観画像ディスプレイ160に対して送出する。
ユーザの手とCGモデル130との間に干渉がない場合、客観画像ディスプレイ160の表示画面には、図12(a)に示す如く、HMD101を頭部に装着したユーザ1200と、CGモデル130と、が表示されている。ユーザの手とCGモデル130との間に干渉が発生している間は、客観画像ディスプレイ160には、図12(b)に示す如く、HMD101を頭部に装着したユーザ1200、CGモデル130、に加え、ユーザ1200の基本姿勢を表す人体モデルを人体情報に応じて変形させることで現在のユーザ1200の姿勢に合わせた人体モデル1201が表示される。
ステップS907では、CPU201は、上記の図11のフローチャートに従った処理を行う。
ステップS908では、CPU201は、終了判定フラグ=ONであるか否かを判断する。この判断の結果、終了判定フラグ=ONであれば、処理はステップS523に進む。一方、終了判定フラグ=OFFであれば、処理はステップS902に進む。
次に、上記のステップS604における処理の詳細について、同処理のフローチャートを示す図10を用いて説明する。
ステップS1001では、CPU201は、仮想空間に配置されている仮想物体のうち特定の仮想物体を、判定対象(判定対象モデル)として特定する。例えば、CPU201は、上記のCGモデル情報1120において人体制御フラグの値が「ON」の仮想物体を判定対象モデルとして特定する。
ステップS1002では、CPU201は、視点(右の視点、左の視点の何れでも良い)の姿勢を表すベクトルを視線方向ベクトルとして求める。なお、HMD101が視線センサを有する場合には、視線センサによる視線検出(アイトラッキング)により特定される視線方向を表すベクトルを視線方向ベクトルとして取得するようにしても良い。
ステップS1003では、CPU201は、視線方向ベクトルを方向ベクトルとする直線と判定対象モデルとに交点が存在するか否かを判断する。この判断の結果、交点が存在する場合には、処理はステップS1004に進み、交点が存在しない場合には、処理はステップS1006に進む。
ステップS1004では、CPU201は、上記のステップS521において外部メモリ211に格納した人体情報を読み出す。そしてステップS1005では、CPU201は、上記のステップS808と同様にして、人体情報に基づいて上記の人体モデルを生成する。
一方、ステップS1006では、CPU201は、終了判定フラグの値(初期値はOFF)をONに設定する。
ステップS1005からステップS1007に処理が進んだ場合、ステップS1007では、CPU201は、客観カメラ106の位置姿勢を有する視点から見える仮想物体及び人体モデルの画像を生成し、該生成した画像を、客観カメラ106により撮像された現実空間の画像と合成することで客観視点に基づく複合現実空間の画像を生成し、該生成した客観視点に基づく複合現実空間の画像を客観画像ディスプレイ160に対して送出する。
一方、ステップS1006からステップS1007に処理が進んだ場合、ステップS1007では、CPU201は、客観カメラ106の位置姿勢を有する視点から見える仮想物体の画像を生成し、該生成した画像を、客観カメラ106により撮像された現実空間の画像と合成することで客観視点に基づく複合現実空間の画像を生成し、該生成した客観視点に基づく複合現実空間の画像を客観画像ディスプレイ160に対して送出する。
ステップS1008では、CPU201は、上記の図11のフローチャートに従った処理を行う。
ステップS1009では、CPU201は、終了判定フラグ=ONであるか否かを判断する。この判断の結果、終了判定フラグ=ONであれば、処理はステップS523に進む。一方、終了判定フラグ=OFFであれば、処理はステップS1002に進む。
図5に戻って、次にステップS523では、CPU201は、ステップS508において生成したユーザ視点に基づく複合現実空間の画像(右目用の複合現実空間の画像、左目用の複合現実空間の画像)と、ステップS810、ステップS906、ステップS1007の何れかにおいて生成した客観視点に基づく複合現実空間の画像と、を対応付けて保存情報として外部メモリ211に保存する。また、客観視点に基づく複合現実空間の画像に人体モデルを重畳させている場合には、この人体モデルの生成時に使用した人体情報(ステップS807,ステップS903,ステップS1004の何れかにおいて取得した人体情報)も、対応付けて保存情報として外部メモリ211に保存する。保存情報の構成例を図7(d)に示す。
図7(d)に示す保存情報1140における欄1141には、1フレーム分のユーザ視点に基づく複合現実空間の画像に対する固有のID(登録ID)が登録されており、欄1142には、1フレーム分のユーザ視点に基づく複合現実空間の画像を格納した日時が登録されており、欄1143には、人体情報が登録されており、欄1144には、ユーザ視点に基づく複合現実空間の画像のファイル名(ファイルのパスを含む)と、客観視点に基づく複合現実空間の画像のファイル名(ファイルのパスを含む)と、が登録されている。なお、人体情報の代わりに、該人体情報に基づいて変形させた人体モデルを欄1143に登録するようにしても良い。
また、保存情報1140の各レコードには、現在のモード設定1130や保存対象となった仮想物体のモデルID(欄1121)を合わせて保存することが望ましい。これは後から検証する際に、どのモデルに対してどのようなタイミングで保存がされたのかを特定することができるためである。
なお、ステップS523における保存は、図11における保存処理により保存された保存情報を確定させるものであり、外部メモリ211に各種情報を保存させる。本実施形態では、ステップS523にて図11で保存した情報を確定するような処理となっているが、ステップS523の処理を図11内で行ってもよい。すなわち、ステップS523を省略することも可能であるとともに、図11とステップS523は不整合のない処理である。
ステップS524では、CPU201は、外部メモリ211に保存した上記の保存情報をディスプレイ210等の表示装置に表示する。PC100の操作者は、表示された保存情報に含まれる何れかの行を入力デバイス209などを操作して指定することができ、CPU201は、操作者によって指定した行に対応する人体情報、ユーザ視点に基づく複合現実空間の画像、客観視点に基づく複合現実空間の画像、を外部メモリ211から読み出してディスプレイ210に表示する。なお、これらの情報の表示形態は特定の表示形態に限るものではないし、これらの情報の全てを表示することに限るものではない。また、これらの情報に加えて/代えて他の情報を表示しても良い。
保存情報の表示例を図14に示す。図14(a)の表示例は、CGモデル130の下側に位置するユーザ視点に基づく複合現実空間の画像の右上に人体情報に基づいて生成した人体モデル1402を重畳させて表示した例を示している。なお、複合現実空間の画像と人体モデルとを重畳させて表示することに限るものではなく、それぞれ別個の表示領域に表示しても良い。図14(b)の表示例は、CGモデル130の下側に位置するユーザ視点に基づく複合現実空間の画像の右上に客観視点に基づく複合現実空間の画像1450を重畳させて表示した例を示している。なお、ユーザ視点に基づく複合現実空間の画像に客観視点に基づく複合現実空間の画像を重畳させて表示することに限るものではなく、それぞれ別個の表示領域に表示しても良い。
ユーザの体勢を検証する際には、ユーザの体勢が客観的に見える画像(客観視点に基づく複合現実空間の画像)と、その時のユーザの見ている画像(ユーザ視点に基づく複合現実空間の画像)と、表示されることが望ましい。
人体情報に基づく人体モデルを生成して、視点から見た人体モデルの画像を生成する処理をフレームごとに行うことは、PC100に大きな処理負担を与えることになる。本実施形態によれば、上記の条件が満たされた場合に人体情報に基づく人体モデルの生成及び視点から見た人体モデルの画像の生成、を行うので、PC100の処理負担を軽減させることができる。
また、本実施形態によれば、ユーザによる複合現実空間の体験に係る様々な情報を容易に記録することができる。このような記録によれば、例えば、人体情報を用いてユーザの姿勢(無理な体勢でないか)を検証する際には有効となる。
最後に、上記のPC100の機能構成例について、図3のブロック図を用いて説明する。なお、図3の各機能部はハードウェアで実装しても良いし、ソフトウェア(コンピュータプログラム)で実装しても良い。前者の場合、例えばこのようなハードウェアをHMD101に搭載することで、HMD101は、PC100が行うものとして上述した各処理をも実行することができる。後者の場合、このようなコンピュータプログラムを外部メモリ211に保存しておき、CPU201がこのコンピュータプログラムを適宜RAM203に読み出して実行することで、対応する機能部の機能を実現することができる。
取得部301は、PC100に入力される各種のデータを取得する。ユーザ視点画像生成部302は、取得部301が取得したデータに基づいてユーザ視点に基づく複合現実空間の画像を生成してHMD101に送出する。判断部303は、人体情報に基づく上記の人体モデルを生成するのか否かを判断する。客観視点画像生成部304は、客観視点に基づく複合現実空間の画像を生成して客観画像ディスプレイ160に送出する。保存部305は、外部メモリ211への各種の情報の格納処理を行う。
つまり、本実施形態に係る画像処理装置は、ユーザの人体の姿勢を計測することで得られる人体情報から該ユーザの人体の姿勢を表す人体モデルを生成するか否かを、該ユーザの位置若しくは視線方向に基づいて判断し、人体情報から人体モデルを生成すると判断した場合に、人体情報から人体モデルを生成し、該人体モデルを含む画像を生成して表示装置に出力する。
[第2の実施形態]
第1の実施形態では、HMD101とPC100とを別個の装置としているが、HMD101とPC100とを一体化させ、HMD101は自機が行うものとして上述した各処理だけでなく、PC100が行うものとして説明した上記の各処理も行うようにしても良い。
第1の実施形態では、HMD101はビデオシースルー方式の頭部装着型表示装置であるものとして説明した。しかし、HMD101として光学シースルー方式の頭部装着型表示装置を使用しても良い。
また、ユーザの頭部に装着されているHMD101に加えて若しくは代えて他の表示装置、例えばタブレット端末装置やスマートフォン等の携帯端末装置に対してユーザ視点に基づく複合現実空間の画像を出力するようにしても良い。この場合、携帯端末装置は、該携帯端末装置に備わっているセンサやアプリケーションを使用することで該携帯端末装置の位置姿勢をユーザ視点として取得することができる。ユーザ視点に基づく複合現実空間の画像はPC100が生成しても良いし、携帯端末装置側で生成しても良い。
また、第1の実施形態では、現実空間と仮想空間とを合成した複合現実空間をユーザに提示する複合現実感提示システム(MRシステム)を例にとり説明したが、仮想空間のみをユーザに提示する、所謂VRシステムに適用しても構わない。その場合、現実空間の撮像や現実空間の画像との合成に係る処理は不要となる。
また、客観カメラ106の代わりに、他のユーザの頭部に装着されているHMD101に備わっている右目・左目ビデオカメラ221を使用しても構わない。
また、第1の実施形態では説明を簡単にするために、1台のPC100に1台のHMD101が接続されているものとしたが、1台のPC100に2台以上のHMD101を接続するようにしても良い。
[第3の実施形態]
第1の実施形態では、ステップS806においてd<θの状態が連続して所定時間(例えば3秒)以上経過した、ステップS902において判定対象との干渉状態が連続して所定時間以上経過した、ステップS1003において視線ベクトルと交点を有する状態が連続して所定時間以上経過した、の何れか条件が満たされている場合に、複合現実空間の画像を静止画像として保存すると共に人体情報を保存していた。しかし、複合現実空間の画像を静止画像として保存すると共に人体情報を保存するための条件はこれらの条件に限らない。例えば、上記のステップS806においてd<θとなった、ステップS902において判定対象との干渉があった、ステップS1003において視線ベクトルと交点があった、の何れか条件が満たされている場合に、複合現実空間の画像を静止画像として保存すると共に人体情報を保存するようにしても良い。また、第1の実施形態と同様に、人体情報に加えて若しくは代えて、人体モデルや客観視点に基づく複合現実空間の画像など、他の情報を保存するようにしても良い。
また、第1の実施形態では、複合現実空間の画像を動画像として保存する場合、保存のための条件は特に設けていなかったが、静止画像として保存する場合と同様に、様々な条件を設け、設けた条件が満たされた場合に、複合現実空間の画像を動画像として保存すると共に人体情報を保存するようにしても良い。また、2以上の条件が満たされた場合に複合現実空間の画像(動画像でも静止画像でも良い)及び人体情報の保存を行うようにしても良い。また、第1の実施形態では、様々な情報の保存ステップを設けたが、状況に応じて幾つかの保存ステップは省略しても良い。
[その他の実施形態]
以上、本発明の実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
また、本発明におけるプログラムは、フローチャートの処理方法をコンピュータが実行可能なプログラムであり、本発明の記憶媒体は処理方法をコンピュータが実行可能なプログラムが記憶されている。
以上のように、前述した実施形態の機能を実現するプログラムを記録した記録媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記録媒体に格納されたプログラムを読み出し実行することによっても、本発明の目的が達成されることは言うまでもない。
この場合、記録媒体から読み出されたプログラム自体が本発明の新規な機能を実現することになり、そのプログラムを記憶した記録媒体は本発明を構成することになる。
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD-ROM、CD-R、DVD-ROM、磁気テープ、不揮発性のメモリカード、ROM、EEPROM、シリコンディスク、ソリッドステートドライブ等を用いることができる。
また、コンピュータが読み出したプログラムを実行することにより、前述した実施形態の機能が実現されるだけでなく、そのプログラムの指示に基づき、コンピュータ上で稼働しているOS(オペレーティングシステム)等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPU等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれることは言うまでもない。
また、本発明は、複数の機器から構成されるシステムに適用しても、1つの機器からなる装置に適用してもよい。また、本発明は、システムあるいは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのプログラムを格納した記録媒体を該システムあるいは装置に読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
さらに、本発明を達成するためのプログラムを通信線上のサーバ、データベース等から通信プログラムによりダウンロードして読み出すことによって、そのシステムあるいは装置が、本発明の効果を享受することが可能となる。
なお、以上説明した各実施形態の一部若しくは全部を適宜組み合わせて使用しても構わないし、以上説明した各実施形態の一部若しくは全部を選択的に使用しても構わない。