本発明の実施例は、ゲームコントローラの実空間における位置情報および/または姿勢情報を取得し、その情報をもとに実行可能なゲームアプリケーションを実行可能なゲーム装置を提供する。そのために、本明細書では、まずゲームコントローラの位置情報および/または姿勢情報を取得するための手法を示す。以下では、(1)LEDを利用した方法、(2)2次元コードを利用した方法、(3)加速度センサなどの計測値を利用した方法を示し、続いて、ゲームコントローラの位置情報および/または姿勢情報をもとに実行可能なゲームアプリケーションを示す。
(1)LEDを利用した位置情報および/または姿勢情報の取得方法
図1は、本発明の実施例にかかるゲームシステムの使用環境を示す。ゲームシステム1は、撮像装置2、画像表示装置3、音声出力装置4、ゲーム装置10およびコントローラ20を備える。撮像装置2、画像表示装置3、音声出力装置4およびコントローラ20は、ゲーム装置10に接続される。
コントローラ20は、ユーザが操作入力を行うための操作入力装置であり、またゲーム装置10は、コントローラ20における操作入力をもとにゲームアプリケーションを処理して、ゲームアプリケーションの処理結果を示す画像信号を生成する処理装置である。なお、本実施例に示す技術は、ゲームアプリケーションに限らず、他の種類のアプリケーションを実行する処理装置を備えたエンタテインメントシステムにおいても実現できる。以下では、エンタテインメントシステムを代表して、ゲームアプリケーションを実行するゲームシステム1について説明する。
撮像装置2は、CCD撮像素子またはCMOS撮像素子などから構成されるビデオカメラであり、実空間を所定の周期で撮像して、周期ごとのフレーム画像を生成する。たとえば、撮像装置2の撮像速度は30枚/秒として、画像表示装置3のフレームレートと一致させてもよい。撮像装置2は、USB(Universal Serial Bus)あるいはその他のインタフェースを介してゲーム装置10と接続する。
画像表示装置3は画像信号を出力するディスプレイであって、ゲーム装置10において生成された画像信号を受けて、ゲーム画面を表示する。音声出力装置4は音声を出力するスピーカであって、ゲーム装置10において生成された音声信号を受けて、ゲーム音声を出力する。画像表示装置3および音声出力装置4は、ゲームシステム1における出力装置を構成する。
ゲーム装置10と画像表示装置3は、有線により接続されてもよく、また無線により接続されてもよい。ゲーム装置10と画像表示装置3とはAVケーブルによって接続されてもよい。またゲーム装置10と画像表示装置3との間には、ネットワーク(LAN)ケーブルやワイヤレスLANなどで構築したホームネットワークが構築されてもよい。
コントローラ20は、ユーザによる操作入力をゲーム装置10に伝送する機能をもち、本実施例ではゲーム装置10との間で無線通信可能な無線コントローラとして構成される。コントローラ20とゲーム装置10は、Bluetooth(ブルートゥース)(登録商標)プロトコルを用いて無線接続を確立してもよい。ゲーム装置10は、複数のコントローラ20との無線接続を可能とし、すなわちゲームシステム1においては、ゲーム装置10とコントローラ20の1対N接続を実現できる。ゲーム装置10は親機すなわちマスタとして機能し、コントローラ20は子機すなわちスレーブとして機能する。なおコントローラ20は、無線コントローラに限らず、ゲーム装置10とケーブルを介して接続される有線コントローラであってもよい。
コントローラ20は、図示しないバッテリにより駆動され、ゲームを進行させる操作入力を行うための複数のボタンやキーを有して構成される。ユーザがコントローラ20のボタンやキーを操作すると、その操作入力が無線によりゲーム装置10に送信される。ゲーム装置10は、コントローラ20からゲームアプリケーションに関する操作入力を受信し、操作入力に応じてゲーム進行を制御して、ゲーム画像信号およびゲーム音声信号を生成する。生成されたゲーム画像信号およびゲーム音声信号は、それぞれ画像表示装置3および音声出力装置4により出力される。またゲーム装置10は、ゲームアプリケーションの進行状況に応じて、コントローラ20を振動させる振動制御信号をコントローラ20に送信する機能ももつ。コントローラ20は振動子を有し、振動制御信号を受信すると振動子を振動させる。
本実施例のゲームシステム1において、コントローラ20は、複数の発光素子を有して構成される。複数の発光素子はそれぞれ同色のLEDであって、ゲームアプリケーションで設定されるコントローラ番号を表現するインジケータとしての役割をもつ。ゲームアプリケーションにおけるコントローラ番号は、たとえばゲーム開始時にゲームキャラクタを選択する際などにユーザに利用されるため、ユーザに何らかの手段でコントローラ番号を通知する必要がある。そのためコントローラ20では、複数のLEDのうち、たとえば1番目のLEDが点灯していればコントローラ番号が1であり、また2番目のLEDが点灯していればコントローラ番号が2であるとしてユーザにコントローラ番号を知らしめる。なお、複数のLEDの組合わせによりコントローラ番号を表現することも可能である。
コントローラ20が有線コントローラである場合には、コントローラ20から延びるケーブルコネクタをゲーム装置10のポートに差し込んだ位置でコントローラ番号を決定することも可能である。しかしながら、複数のポートを備えたマルチポート装置をゲーム装置10に外付けして使用するような場合には、ユーザはすぐにコントローラ番号を知ることはできないため、複数のLEDを用いてユーザにコントローラ番号を通知することが好ましい。
ゲームシステム1においては、コントローラ20のLEDを、コントローラ番号のインジケータとしてだけではなく、ゲームアプリケーションの進行に影響を与えるゲーム入力としても利用する。この場合、LEDの制御は、インジケータとして点灯するのではなく、ゲームアプリケーションへの入力としての点灯に切り替えられる。撮像装置2はコントローラ20のLEDを撮像し、フレーム画像を生成してゲーム装置10に供給する。ゲーム装置10は、フレーム画像を取得して、フレーム画像におけるLED画像の位置などからコントローラ20のフレーム画像中の位置や姿勢を推定して、実空間における位置情報および姿勢情報を取得し、取得した位置情報および/または姿勢情報をゲームアプリケーションの処理に反映する。すなわち、本実施例のゲーム装置10は、コントローラ20において入力された操作入力だけでなく、取得したコントローラ20の位置情報や姿勢情報も用いてゲームアプリケーションを処理して、その処理結果を示す画像信号を生成する機能をもつ。
図2は、コントローラの外観構成を示す。コントローラ20には、方向キー21、アナログスティック27と、4種の操作ボタン26が設けられている。方向キー21、アナログスティック27、操作ボタン26は、筐体上面30に設けられた入力部である。4種のボタン22〜25には、それぞれを区別するために、異なる色で異なる図形が記されている。すなわち、○ボタン22には赤色の丸、×ボタン23には青色のバツ、□ボタン24には紫色の四角形、△ボタン25には緑色の三角形が記されている。コントローラ20の筐体背面29には、複数のLEDが設けられている。
ユーザは左手で左側把持部28aを把持し、右手で右側把持部28bを把持して、コントローラ20を操作する。方向キー21、アナログスティック27、操作ボタン26は、ユーザが左側把持部28a、右側把持部28bを把持した状態で操作可能なように、筐体上面30上に設けられる。
筐体上面30には、LED付きボタン31も設けられる。LED付きボタン31は、たとえば画像表示装置3にメニュー画面を表示させるためのボタンとして利用される。また、LEDの発光状態によりユーザへのメールの着信の知らせや、コントローラ20のバッテリの充電状態などを示す機能ももつ。たとえば充電中は赤色、充電が終了すると緑色に点灯し、充電残存量が残り少ないときには赤色を点滅させるようにLEDを点灯させる。
ユーザは画像表示装置3に表示されるゲーム画面を見ながらゲームを行うため、画像表示装置3は、矢印Aで示すコントローラ20の前方に存在している。そのため、通常は、画像表示装置3に対して、LEDを配置された筐体背面29が向き合うことになる。本実施例において撮像装置2は、ゲームアプリケーションの実行中にLEDを撮像する必要があるため、その撮像範囲が画像表示装置3と同じ方向を向くように配置されて、コントローラ20の筐体背面29と向き合うことが好ましい。一般にユーザは画像表示装置3の正面でゲームをプレイすることが多いため、撮像装置2は、その光軸の方向が画像表示装置3の正面方向と一致するように配置される。具体的に、撮像装置2は、画像表示装置3の近傍において、画像表示装置3の表示画面をユーザが視認可能な位置を撮像範囲に含むように配置されることが好ましい。これにより、撮像装置2は、ユーザの身体およびコントローラ20を撮像できる。
図3は、コントローラの背面側の外観構成を示す。図3では、コントローラ20の筐体上面30における方向キー21や操作ボタン26などの図示を省略している。筐体背面29にはLED配設領域42が設けられ、LED配設領域42内に第1LED40a、第2LED40b、第3LED40cおよび第4LED40dが配置される。以下、第1LED40a、第2LED40b、第3LED40cおよび第4LED40dを総称する場合には、「LED40」と表記する。LED配設領域42は、筐体背面29における中央領域に形成される。LED配設領域42の中央部には、USBコネクタ46が設けられる。USBコネクタ46には、ゲーム装置10から延びるUSBケーブルが接続されて、コントローラ20の充電処理を行うことができる。なおUSBケーブルが接続されると、コントローラ20を有線コントローラとして利用することも可能である。
筐体背面29側には、操作ボタン48a、48b、48c、48dがLED配設領域42を挟んで左右に設けられる。操作ボタン48a、48b、48c、48dは、ユーザが左側把持部28a、右側把持部28bを把持した状態でも人差指の先端で操作可能な位置に設けられる。これにより、操作ボタン48a、48b、48c、48dの操作時に、LED40は人差指によって隠れない。
撮像装置2は、各画素におけるRGBの輝度値を取得する。発光したLED40を正確に検出するためには、LED40とLED40周辺の領域とのコントラストが大きいことが好ましい。そのためLED配設領域42は、その隣接する筐体色よりも明度の低い色をもち、たとえば黒色の配色を施される。LED配設領域42は、黒色の半透明板として構成され、LED40は、その背後すなわち筐体内部側に設けられる。これにより、LED40は点灯していなければ撮像装置2からは見えず、点灯したときのみ撮像される。黒色半透明板は、光を拡散してLED40の狭指向性を広指向性に変える役割ももつ。LED40をLED配設領域42に設けることで、発光したLED40とのコントラストを高めることができ、後の画像処理において、フレーム画像からLED画像を効果的に抽出することが可能となる。
第1LED40a、第2LED40b、第3LED40cおよび第4LED40dは、所定の2次元パターンで配設される。たとえば第1LED40a、第2LED40b、第3LED40cおよび第4LED40dは、矩形の頂点を構成する位置に配設される。ゲーム装置10は、この位置関係を予め把握しており、LED画像の抽出処理に利用する。なお各LED40の近傍には、数字が刻印または印刷されており、ユーザは点灯したLED40の近傍の数字をみて、コントローラ番号を知ることができる。
図4は、コントローラの内部構成を示す。コントローラ20は、無線通信モジュール58、処理部60、LED40および振動子44を備える。無線通信モジュール58は、ゲーム装置10の無線通信モジュールとの間でデータを送受信する機能をもつ。処理部60は、コントローラ20における所期の処理を実行する。
処理部60は、メイン制御部50、入力受付部52、PWM制御部54および駆動部56を有する。メイン制御部50は、無線通信モジュール58との間で必要なデータの送受を行う。
入力受付部52は、方向キー21、操作ボタン26、アナログスティック27などの入力部からの入力情報を受け付け、メイン制御部50に送る。メイン制御部50は、受け取った入力情報を無線通信モジュール58に供給し、無線通信モジュール58は、所定のタイミングでゲーム装置10に送信する。また、無線通信モジュール58はゲーム装置10から振動制御信号を受け取ると、メイン制御部50に供給し、メイン制御部50は、振動制御信号をもとに振動子44を振動させる駆動部56を動作させる。駆動部56は、振動子44を駆動するためのスイッチとして構成されてもよく、また供給電圧のデューティ比を可変とするPWM制御部として構成されてもよい。
本実施例において、PWM制御部54は、第1PWM制御部54a、第2PWM制御部54b、第3PWM制御部54cおよび第4PWM制御部54dから構成される。第1PWM制御部54a、第2PWM制御部54b、第3PWM制御部54cおよび第4PWM制御部54dは、それぞれ第1LED40a、第2LED40b、第3LED40cおよび第4LED40dの点灯を制御するために設けられる。PWM制御部54は、LED40に印加する電圧をPWM(パルス幅変調)により制御する。たとえば、PWM制御部54は、数kHzの高周波で印加電圧をPWM制御することで、LED40の輝度を調整することができる。またPWM制御部54は、数Hz〜100Hz程度の低周波で印加電圧をPWM制御することで、撮像装置2においてLED40の点灯のオンオフを認識させることができる。
本実施例のゲームシステム1において、まず、ゲームシステム1に参加を希望するユーザのコントローラ20が、ゲーム装置10との間で通信を確立する。このとき、コントローラ20の識別情報、たとえばブルートゥースアドレスがゲーム装置10に受け渡され、以後の通信は、このブルートゥースアドレスをもとに行われる。なお、通信プロトコルとしてブルートゥースを利用しない場合には、MACアドレスなどの機器アドレスが利用されてもよい。接続確立後、ユーザはゲームアプリケーションに参加できる。
このときコントローラ20には、ゲーム装置10からコントローラ番号を指示する情報が送信される。メイン制御部50は、この番号指示情報をもとに、設定されたコントローラ番号に対応するLED40のみを点灯させる。これによりユーザは、自身のコントローラ20のコントローラ番号を知ることができる。なお、番号指示情報の代わりに、コントローラ番号に対応するLED40の点灯を指示する制御信号がゲーム装置10から送信されてもよい。このようにメイン制御部50は、任意のLED40を点灯させることができる。
本実施例のゲームシステム1において、ゲーム装置10は、全てのLED40a〜40dを点灯した状態で撮像されたフレーム画像をもとに、実空間におけるコントローラ20の位置および姿勢を推定する。推定した位置および姿勢は、実行するゲームアプリケーションの入力として利用される。またゲーム装置10は、コントローラ20の方向キー21や操作ボタン26などの操作入力も受け付ける。これらの入力情報をもとに、ゲーム装置10は、ゲームアプリケーションのゲームパラメータを生成し、ゲームを進行制御して、ゲーム画像およびゲーム音声のAVデータを生成する。AVデータは、画像表示装置3および音声出力装置4において出力される。ユーザは、ゲーム画面を見ながら、コントローラ20を実空間上で動かし、さらには方向キー21や操作ボタン26を操作入力してゲームを行う。以下に、ゲーム装置10における処理を説明する。
図5は、ゲーム装置の構成を示す。ゲーム装置10は、入力部100、画像処理部102、位置推定部104、点滅指示部106、無線通信モジュール108、アプリケーション処理部110および出力部112を備える。本実施例におけるゲーム装置10の処理機能は、CPU、メモリ、メモリにロードされたプログラムなどによって実現され、ここではそれらの連携によって実現される構成を描いている。プログラムは、ゲーム装置10に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。図示の例では、ゲーム装置10のCPUが、画像処理部102、位置推定部104、点滅指示部106、アプリケーション処理部110としての機能をもつ。なお、ハードウェアの構成上、ゲーム装置10は複数のCPUを有してもよい。このような場合、1つのCPUがゲームアプリケーションを実行するアプリケーション処理部110として機能し、他のCPUが、撮像装置2による撮影画像を処理する画像処理部102、位置推定部104、点滅指示部106として機能してもよい。
無線通信モジュール108は、コントローラ20の無線通信モジュール58との間で無線通信を確立する。同期確立フェーズにおいては、無線通信モジュール108が、周辺のコントローラ20を含む端末機器に対して接続照会すなわち「問い合わせ」処理を行う。具体的には、無線通信モジュール108が、近くにいる端末機器に対してIQ(問い合わせ)パケットをブロードキャストする。IQパケットを受信したコントローラ20の無線通信モジュール58は、BluetoothアドレスとBluetoothクロック情報を含むFHS(Frequency Hop Synchronization)パケットをゲーム装置10に返信する。この時点における送受信では、周波数ホッピングパターンに関する同意がゲーム装置10とコントローラ20との間で確立していないので、問い合わせ専用に定義された固定ホッピングパターンが用いられる。
無線通信モジュール108は、コントローラ20からFHSパケットを受け取り、どのようなコントローラ20が存在するかを把握した後、特定のコントローラ20に対してIDパケットを送信する。これは無線通信モジュール108による「呼び出し」処理である。特定のコントローラ20からIDパケットに対する応答が返ると、無線通信モジュール108はFHSパケットをコントローラ20に送信し、自分のアドレスとクロックをコントローラ20に知らせる。これにより、ゲーム装置10とコントローラ20は、同一のホッピングパターンを共有できるようになる。
「呼び出し」を行うと、コントローラ20とゲーム装置10との間にピコネットが形成され、「接続」状態に入る。ピコネットとは、Bluetooth端末同士を近づけたときに、端末の間で一時的に形成されるネットワークを意味し、最大で8台のBluetooth端末が1つのピコネットに参加することができる。接続したコントローラ20は、無線通信モジュール108からスレーブ識別子、つまり接続中のコントローラ20に与えられる3ビットのアドレス(1〜7)を割り振られる。このスレーブ識別子は、AM_ADDR(アクティブメンバーアドレス)と呼ばれる。「接続」状態になると、通信リンク設定のための制御パケットが送受信され、これにより「データ転送」が可能となる。
なお、以上はゲーム装置10からコントローラ20を呼び出す例について説明したが、コントローラ20からゲーム装置10を呼び出してもよい。この場合、ゲーム装置10がページスキャンを実行している間に、コントローラ20が呼び出し処理を実行する。これによりコントローラ20はゲーム装置10を呼び出して、接続状態に入ることができる。その後、マスタとスレーブの役割をスイッチし、ゲーム装置10がマスタとなり、コントローラ20がスレーブとなる。このようなマスタとスレーブの関係を実現することで、コントローラ20がゲームアプリケーションに参加可能となる。
接続状態になり、コントローラ20がゲームアプリケーションに参加すると、アプリケーション処理部110は、コントローラ20のコントローラ番号を割り当て、コントローラ番号を指示する番号指示情報を生成する。無線通信モジュール108は、番号指示情報をコントローラ20に送信する。コントローラ20は、番号指示情報を受信すると、対応するLED40を点灯させる。なお、無線通信モジュール108は、番号指示情報の代わりに、コントローラ番号に対応するLED40の点灯を指示する制御信号をコントローラ20に送信してもよい。
ゲームアプリケーションが開始されると、点滅指示部106は、コントローラ20に対して所定の周期で点滅するように点滅パターンを指示する制御信号を生成する。この点滅制御信号は、無線通信モジュール108からコントローラ20に送信される。
入力部100はUSBインタフェースとして構成され、撮像装置2から所定の撮像速度(たとえば30フレーム/秒)でフレーム画像を取得する。画像処理部102は、後述するLED抽出アルゴリズムにしたがって、フレーム画像からLED画像を抽出する。位置推定部104は、抽出されたLED画像からLED画像の位置情報を取得し、コントローラ20の位置や姿勢を推定する。位置推定部104は、LED画像の位置情報を取得することから、位置取得部として機能してもよい。なおコントローラ20の位置は、4つのLED画像の重心位置に定められてよい。
点灯する4つのLED40の位置や姿勢から推定されるコントローラ20の位置情報および/または姿勢情報は、ゲームアプリケーションの入力として利用される。そのため位置推定部104で推定されたコントローラ20の位置情報および姿勢情報は、アプリケーション処理部110に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部110には、ユーザがコントローラ20の方向キー21などを操作した入力も無線通信モジュール108を介して送信される。アプリケーション処理部110は、コントローラ20の位置・姿勢情報と、コントローラ20における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。画像信号および音声信号は出力部112からそれぞれ画像表示装置3および音声出力装置4に送られ、出力される。
図6は、画像処理部の構成を示す。画像処理部102は、フレーム画像取得部130、現フレームバッファ132、前フレームバッファ134、差分画像生成部136、2値化画像生成部138、論理演算部140およびLED画像抽出部142を備える。
フレーム画像取得部130は、入力部100からフレーム画像データを取得し、現フレームバッファ132に一時記憶させる。前フレームバッファ134には、一つ前のフレーム画像データが記憶されている。差分画像生成部136は、現フレームバッファ132に記憶されている現フレームデータと、前フレームバッファ134に記憶されている前フレームデータとの差分画像を生成する。フレーム画像中の座標(x,y)における前フレームデータのR画素値をPr、G画素値をPg、B画素値をPbとし、現フレームデータのR画素値をCr、G画素値をCg、B画素値をCbとしたとき、差分画像関数F(x,y)は、以下の数式で表現される。
ここでThは、所定の閾値である。F(x,y)が0より大きければ、座標(x,y)の画素値が“1”に符号化され、表示上、その画素は白色とされる。一方、F(x,y)が0以下であれば、画素値が“0”に符号化され、表示上、その画素は黒色とされる。このように差分画像生成部136で生成される差分画像は、2値化処理された画像となる。差分画像を生成することで、前フレーム画像と現フレーム画像との間で動きのないオブジェクトの影響を取り除くことができる。
2値化画像生成部138は、現フレームデータを所定の閾値を用いて2値化処理して、2値化された画像を生成する。2値化画像生成部138は、所定の閾値より大きい輝度を保持する画素の画素値を“1”に符号化し、所定の閾値以下の輝度を保持する画素の画素値を“0”に符号化する。現フレーム画像の2値化画像を生成することで、現フレーム画像において明るいオブジェクトのみを抽出することができる。
論理演算部140は、差分画像生成部136で生成された差分画像と、2値化画像生成部138で生成された2値化画像とを論理演算した論理演算画像を生成する。詳細には、論理演算部140は、画素ごとに、差分画像の画素値と2値化画像の画素値との論理積演算を行うことで、論理積画像を生成する。これは、差分画像と2値化画像の対応する画素同士の画素値を数学的に論理積演算することで生成される。
図7(a)は、現フレーム画像を示す。現フレーム画像では、ユーザがコントローラ20を把持してゲームをプレイし、右側には照明が点灯している状態が撮像されている。このときコントローラ20の全LED40が点灯している。なお、全てのLED40は、同一の点灯パターンにより、同一輝度で発光している。
図7(b)は、現フレーム画像と前フレーム画像の差分画像を示す。前フレーム画像の位置からコントローラ20を動かすと、数式(1)により差分画像が生成される。この例では、コントローラ20や、コントローラ20と一緒に動く体の少なくとも一部の領域が、白色画像(画素値が“1”になる)として取得される。なお、常にこのような白色画像が取得されるわけではなく、図7(b)は、あくまでも数式(1)を満足したときに生成される差分画像の一例である。このとき、照明は動かないため、差分画像には含まれない。なお、ユーザがコントローラ20を動かさなければ、コントローラ20の白色画像は取得されない。
図8(a)は、現フレーム画像の2値化画像を示す。2値化画像では、図7(a)における高輝度領域、すなわち発光しているLEDと、照明のランプとが2値化されて白色画像に変換される。他のノイズを防ぐために、2値化処理する際に設定する閾値は、LEDの発光輝度から所定のマージン値を減じた輝度値に設定されていることが好ましい。
図8(b)は、論理積画像を示す。論理積画像は、図7(b)に示す差分画像と、図8(a)に示す2値化画像との論理積演算を行う。差分画像および2値化画像において、白色画素の画素値は“1”であり、黒色画素の画素値は“0”である。したがって、両方の画像において白色画素として存在している画素のみが、論理積画像において白色画素として生成されることになる。
このように差分画像と2値化画像の論理積をとることで、LED画像を抽出しやすい論理積画像を生成できる。論理積画像は、LED画像抽出部142に送られる。
論理積画像が生成されると、前フレームバッファ134に保持されている前フレームデータは、現フレームバッファ132に保持されている現フレームデータにより上書きされる。この上書き処理は、前フレームバッファ134が差分画像生成部136に読み出された直後に行われてもよい。その後、現フレームバッファ132に保持されている現フレームデータは、次のフレームデータにより上書きされて、次のフレームにおける論理積画像の生成処理を実行する。
LED画像抽出部142は、論理積画像からLED画像を抽出する。LED画像を抽出するためには、まず、LED画像の候補を検出する。続いて、任意の候補を第1LED40aと仮定し、その周辺領域を探索して、第2LED40bとなりうるLED画像候補があるか調査する。第2LED40bが見つかれば、また第1LED40aの周辺領域を探索して、第3LED40cとなりうるLED画像候補があるか調査する。第3LED40cが見つかれば、その周辺領域を探索して、第4LED40dとなりうるLED画像候補があるか調査する。この際、LED画像抽出部142は、複数のLED40により形成される2次元パターンを予め認識しており、この2次元パターンを利用して、LED画像の抽出処理を行う。以下では、説明の便宜上、コントローラ20の筐体背面29において、第1LED40a、第2LED40b、第3LED40c、第4LED40dが正方形の頂点を構成するように配置されている場合を例にとる。
なおLED画像抽出部142は、論理積画像を用いずに、2値化画像からLED画像を抽出することも可能である。2値化画像には、LED画像以外のノイズも含まれることになるが、たとえば差分画像においてLED画像を取得できない場合には、2値化画像を利用することで、LED画像の位置および姿勢を検出できる。以下に示す処理手順は、論理積画像および2値化画像のいずれを用いても実行できるが、論理積画像にはLED画像以外のノイズ成分が少ないため、論理積画像を利用する方が処理速度は速い。
図9は、LED画像候補の検出処理の処理手順を示すフローチャートである。LED画像抽出部142は、論理積画像において、白色画素(画素値が“1”になっている画素)が連続して存在する領域を1つの連結領域として取得する(S100)。次に、LED画像抽出部142は、白色画素連結領域の縁部分を抽出して、短辺および長辺を決定する(S102)。
LED画像抽出部142は、短辺が所定画素数Ma以上の画素で構成されているか否かを判定する(S104)。短辺が画素数Maより少ない画素で構成されている場合(S104のN)、LED画像抽出部142は、LED画像ではないとして、この白色画素連結領域の処理を終了する。短辺が画素数Ma以上の画素で構成されている場合(S104のY)、LED画像抽出部142は、長辺が所定画素数Mb以下の画素で構成されているか否かを判定する(S106)。長辺が画素数Mbより多い画素で構成されている場合(S106のN)、LED画像抽出部142は、LED画像ではないとして、この白色画素連結領域の処理を終了する。長辺が画素数Mb以下の画素で構成されている場合(S106のY)、LED画像抽出部142は、LED画像の候補であるとして、白色画素連結領域を構成する画素数を取得する(S108)。このLED画像候補検出処理は、全ての白色画素連結領域に対して繰り返される。これにより、論理積画像に含まれるLED画像候補を検出できる。なお、LED画像候補の座標は、連結領域の重心に設定する。
図10は、LED抽出処理の処理手順を示すフローチャートである。LED画像抽出部142は、検出されたLED画像候補のうち、任意のLED画像候補を第1LED40aであると仮定する(S120)。次に、第1LED40aに対して、第2LED40bとなりうる条件を満足するLED画像候補が存在するか否かを判定する(S122)。第2LED40bとなるLED画像候補が存在すれば(S122のY)、第1LED40aおよび第2LED40bに対して、第3LED40cとなりうる条件を満足するLED画像候補が存在するか否かを判定する(S124)。第3LED40cとなるLED画像候補が存在すれば(S124のY)、第1LED40a、第2LED40bおよび第3LED40cに対して、第4LED40dとなりうる条件を満足するLED画像候補が存在するか否かを判定する(S126)。第4LED40dとなるLED画像候補が存在すれば(S126のY)、コントローラ20の第1LED40a〜第4LED40dを抽出したことになる。なお、第2LED画像候補が存在しない場合(S122のN)、第3LED画像候補が存在しない場合(S124のN)、第4LED画像候補が存在しない場合(S126のN)は、別のLED画像候補を第1LED40aと仮定して、図8の処理を再実行する。
LED抽出処理においては、処理負荷を軽減するために、コントローラ20の姿勢が所定角度以上傾いていないことを処理条件として設定してもよい。LED40は比較的指向性が強いため、コントローラ20を傾けすぎると、撮像装置2において受光が難しくなる。このLED40の指向性を利用して、LED画像候補を探索する際に、第1LED40aから所定角度(たとえば45°)よりも傾いていないことを条件としてLED画像の抽出処理を行うことで、処理負荷を大幅に軽減することが可能となる。
本実施例では、前フレーム画像と現フレーム画像の差分画像を利用するため、コントローラ20に動きがない場合は、LED40の画像は差分画像から除かれる。そのため、差分画像を用いる場合には、図10に示すLED抽出処理により、必ずLED画像が見つかるわけではない。位置推定部104は、図10に示すLED抽出処理によりLED画像が見つからなかった場合は、コントローラ20が前フレームの位置から動いていないものと推定し、前フレームにおけるコントローラ20の位置情報および姿勢情報を取得する。このとき位置推定部104は、2値化画像を用いてLED画像を抽出してもよい。
図11は、図10のS122に示す第2LED検出処理の処理手順を示すフローチャートである。第1LED40aと仮定したLED画像候補の構成画素数をNとする。まずLED画像抽出部142は、LED画像候補の画素数が1/2×N以上であって、且つ2N以下であるか否かを判定する(S140)。これは、LED画像であれば、大きさや形は第1LED40aと大きく変わらないという事実に基づいている。LED画像候補の構成画素数が、構成画素数Nに対して所定の範囲内にあれば(S140のY)、そのLED画像候補が第1LED40aの右方に存在するか否かを判定する(S142)。右方であるか否かの判断は、第1LED40aの右上45°から右下45°の範囲内に存在するか否かにより決定される。第1LED40aの右方にある場合(S142のY)、第1LED40aとLED画像候補との距離D12が、Da以上であって且つDb以下であるか否かを判定する(S144)。ここでは、互いの距離が近すぎたり、また離れすぎている場合には、第2LED40bとして相応しくないことを判定している。距離D12がDa以上であって且つDb以下である場合(S144のY)、そのLED画像候補が第2LED40bとなりうることが判断され、第2LED40bの存在が確認される(S146)。一方、LED画像候補の構成画素数が所定の範囲内にない場合(S140のN)、LED40aの右方に存在しない場合(S142のN)、距離D12が所定の範囲内にない場合(S144のN)には、そのLED画像候補が第2LED40bでないと判断される。
図12は、図10のS124に示す第3LED検出処理の処理手順を示すフローチャートである。第1LED40aと仮定したLED画像候補の構成画素数をNとする。まずLED画像抽出部142は、LED画像候補の画素数が1/2×N以上であって、且つ2N以下であるか否かを判定する(S160)。LED画像候補の構成画素数が、構成画素数Nに対して所定の範囲内にあれば(S160のY)、そのLED画像候補が第1LED40aの下方に存在するか否かを判定する(S162)。下方であるか否かの判断は、第1LED40aの左下45°から右下45°の範囲内に存在するか否かにより決定される。第1LED40aの下方にある場合(S162のY)、第1LED40aとLED画像候補との距離が、1/√2×D12以上であって且つ√2D12以下であるか否かを判定する(S164)。ここでは、互いの距離が近すぎたり、また離れすぎている場合には、第3LED40cとして相応しくないことを判定している。距離が1/√2×D12以上であって且つ√2D12以下である場合(S164のY)、第1LED40aから第2LED40bまでの線分と、第1LED40aからLED画像候補までの線分の角度が所定の範囲内であるか否かが判定される(S166)。このとき、所定の範囲内にあれば(S166のY)、そのLED画像候補が第3LED40cとなりうることが判断され、第3LED40cの存在が確認される(S168)。一方、LED画像候補の構成画素数が所定の範囲内にない場合(S160のN)、LED40aの下方に存在しない場合(S162のN)、第1LED40aとの距離が所定の範囲内にない場合(S164のN)、角度が所定の範囲内にない場合(S166のN)には、そのLED画像候補が第3LED40cでないと判断される(S170)。
図13は、図10のS126に示す第4LED検出処理の処理手順を示すフローチャートである。第1LED40aと仮定したLED画像候補の構成画素数をNとする。まずLED画像抽出部142は、LED画像候補の画素数が1/2×N以上であって、且つ2N以下であるか否かを判定する(S180)。LED画像候補の構成画素数が、構成画素数Nに対して所定の範囲内にあれば(S180のY)、第1LED40aから第2LED40bのベクトルと、第3LED40cとLED画像候補のベクトルのなす角度が所定値以下であるか否かを判定する(S182)。第1LED40aから第2LED40bのベクトルと、第3LED40cとLED画像候補のベクトルのなす角度が所定値以下であれば(S182のY)、第1LED40aから第3LED40cのベクトルと、第2LED40bとLED画像候補のベクトルのなす角度が所定値以下あるか否かを判定する(S184)。第1LED40aから第3LED40cのベクトルと、第2LED40bとLED画像候補のベクトルのなす角度が所定値以下であれば(S184のY)、そのLED画像候補が第4LED40dとなりうることが判断され、第4LED40dの存在が確認される(S186)。一方、LED画像候補の構成画素数が所定の範囲内にない場合(S180のN)、第1LED40aから第2LED40bのベクトルと、第3LED40cとLED画像候補のベクトルのなす角度が所定値を超える場合(S182のN)、第1LED40aから第3LED40cのベクトルと、第2LED40bとLED画像候補のベクトルのなす角度が所定値を超える場合は(S184のN)、そのLED画像候補が第4LED40dでないと判断される(S188)。
以上により、LED画像抽出部142は、論理積画像から第1LED40a〜第4LED40dの画像を抽出することができる。抽出された第1LED40a〜第4LED40dの画像の位置情報は、位置推定部104に送られる。
位置推定部104は、コントローラ20におけるLED40の2次元配置に基づき、第1LED40a〜第4LED40dの画像のフレーム画像における位置情報を取得する。位置推定部104は、抽出した第1LED40a、第2LED40b、第3LED40cおよび第4LED40dのアフィン変換を求めて、実空間における位置および姿勢を算出する。実空間における位置は、直交座標系における座標(X,Y,Z)であり、実空間における姿勢は、X軸、Y軸、Z軸における回転角である。3軸における座標および回転角を求めることで、位置推定部104は、撮像装置2からの距離も含めた空間内での位置を推定できる。位置推定部104は、アフィン変換を求めることで、コントローラ20のフレーム画像中の位置を推定してもよい。たとえば、XYZ空間のうちのXY座標をとることでフレーム画像中の位置を取得することができる。位置推定部104は、推定したコントローラ20の位置や姿勢をアプリケーション処理部110に送る。
なお、上記したようにアフィン変換によりコントローラ20の位置および姿勢を算出してもよいが、たとえばゲーム装置10は、特定のコントローラ20に対して、4つのLED40のうちの3つを点灯するように指示して、点灯した3つのLED画像から、コントローラ20の位置および姿勢を取得することも可能である。ゲーム装置10は、上記したアルゴリズムと同様の手法を用いて、3つのLED40、たとえば第1LED40a、第2LED40b、第3LED40cの点灯画像を抽出して、位置推定部104が、そのコントローラ20の位置および姿勢を推定してもよい。このとき、位置推定部104は、第1LED40a、第2LED40b、第3LED40c、第4LED40dの位置関係を予め把握しており、そのうち第1LED40a、第2LED40b、第3LED40cの位置関係を満足するLED画像候補を抽出することで、コントローラ20の位置および姿勢を推定することができる。
LED40の誤認識を回避するために、位置推定部104は、前回取得したLED画像の位置と、今回取得したLED画像の位置の変化量が所定値を超える場合、今回取得したLED画像の位置をエラーとして処理する。すなわち、1フレームの間に、位置や姿勢が所定値以上変化する場合は、外乱的な要素により他のオブジェクトをLED40として誤認識した可能性があるため、抽出したLED40の位置情報を破棄する。
しかしながら、そのような場合であっても、実際に大きな変化量でコントローラ20が移動することもあり得るため、位置推定部104は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得したLED画像の位置を正常なものとして処理してもよい。
位置推定部104は、たとえば現フレーム画像や、論理積画像をもとに、LED40の移動方向や速度を推定することも可能である。たとえば撮像装置2のシャッタースピードを落とすと、LED40の画像が楕円や直方体として撮像されることになる。そこで、LED画像の形状から、移動方向のみならず、移動速度も推定することが可能である。たとえば移動方向および速度が推定できれば、撮像装置2において突然見えなくなった場合でも、コントローラ20の位置や姿勢を予測できる。全てのLED40の形状が同じ方向に偏っているような場合に、コントローラ20の移動方向と速度を推定してもよい。
アプリケーション処理部110は、推定されたコントローラ20の位置や姿勢を、ゲーム入力としてゲームアプリケーションの処理に反映する。この反映の手法は様々考えられるが、最も直観的には、推定したコントローラ20の位置に対応したゲーム画像中の位置に、仮想オブジェクトを追従させて表示する。ユーザが撮像装置2に対してコントローラ20を動かすと、その動きに追従してゲーム画像内の仮想オブジェクトを動かすことができる。
なお、理想的な状態であればフレーム画像ごとにLED40の位置や姿勢を求めてゲーム画像に反映していけばよいが、一方で、コントローラ20の向きや周辺光の環境などにより、フレーム画像においてLED40の位置や姿勢を求められない状況も発生しうる。そのような状況が続いた後に、突然、LED40の位置や姿勢が求められると、停止していた仮想オブジェクトが新たな位置にいきなり移動することになり、ユーザに違和感を与える。そのため、論理積画像からLED40の位置や姿勢を検出できたとしても、ゲーム画像としては、仮想オブジェクトを取得した位置まで移動させるのではなく、仮に情報落ちがあった場合であっても、スムーズな動きを実現できるように追従処理を行わせることとする。
図14(a)、図14(b)は、コントローラに対応する仮想オブジェクトがゲーム画面内で円滑な追従動作を実現するためのアルゴリズムを説明するための図である。説明の便宜上、仮想オブジェクトの位置変化について説明するが、姿勢変化についても同様のアルゴリズムを適用することができる。
位置推定部104において、アフィン変換を求めることで導出された位置パラメータが、Pi−1、Pi、Pi+1(Pの添字は、ゲーム画面フレームの番号を示す)とする。まず、フレーム画像が切り替り、PiからPi+1に位置パラメータが変化する場合を考える。
新たな位置パラメータ(Pi+1)が得られたとき、ゲーム画面に反映する位置パラメータは、以下の式で求められる。
Qi+1=(Qi+Pi+1)/2
すなわち、新たな位置パラメータPi+1に直接移動するのではなく、前フレームのゲーム画面における位置パラメータと、現フレームの新たな位置パラメータPi+1との中点を、ゲーム画面における新たな位置パラメータとして設定する。なお、位置パラメータQi+1は、位置パラメータQiと位置パラメータPi+1の中点である必要はなく、位置パラメータQiと位置パラメータPi+1の間の線分をA:Bに分割する点であってもよい。
図14(b)は、位置パラメータとしてPi+1が取得できなかった場合の例である。このような場合は、本アルゴリズムの効果を発揮できる。この場合は、最新の位置パラメータがPi+1の代わりに利用される。ここで最新の位置パラメータはPiであり、
Qi+1=(Qi+Pi)/2
として求められる。
本アルゴリズムによりゲーム画像における位置パラメータQを取得すると、空間内のコントローラ20が大きく変位したり、また論理積画像から抽出できない場合であっても、仮想オブジェクトは常に少しずつ移動できる。そのため、ゲーム画像中で仮想オブジェクトが急に動かなくなったり、また急に動いたりする状況の発生を回避でき、コントローラ20に対して円滑な追従処理を実現できる。
本実施例では、コントローラ20を撮像装置2で撮像して、フレーム画像からコントローラ20の位置や姿勢を推定し、その位置情報や姿勢情報をゲームアプリケーションの処理に反映させることとした。コントローラ20のLED40は、たとえばゲームアプリケーションの進行状況に応じて点灯パターンを変更してもよい。
ユーザがゲームアプリケーションに参加した直後に、ゲーム装置10は、コントローラ20に対して所定の低周波で4つのLED40を点灯させる制御信号を送信してもよい。点滅指示部106は、コントローラ20に対して所定の低周波での点滅パターンを指示する制御信号を生成する。この低周波点滅制御信号は、無線通信モジュール108からコントローラ20に送信される。なお、複数のコントローラ20が存在する場合には、コントローラ20ごとに点滅周波数が設定される。
コントローラ20は、指定された低周波でLED40を点灯し、撮像装置2は、30枚/秒の撮像速度でフレーム画像を撮像する。ゲーム装置10は、複数のフレーム画像から、所定の周期で点灯をオンオフしているLED画像を抽出する。ゲームシステム1内に複数のコントローラ20が存在する場合は、コントローラ20ごとに点灯の周期を設定する。これにより、コントローラ20の位置を確認できるとともに、それぞれのコントローラ20を区別して認識することもできる。この処理は、理想的にはゲームアプリケーションに参加後、1回行われればよいが、実空間内ではコントローラ20が撮像装置2から突然見えなくなることもある。そのため、数秒ごとなどの所定の周期で、各コントローラ20は、コントローラごとに設定された低周波でLED40を点滅させてもよい。
たとえば4つのLED40が低周波で点灯と消灯を行う場合には、LED40を撮像できるフレームと、撮像できないフレームとが所定の周期で切り替わることになる。撮像周期(30フレーム/秒)に対して、LED40を45Hzで点灯制御すると、連続した2枚のフレームで撮像され、次は撮像されない、という状況が繰り返される。フレーム画像に撮像される場合と撮像されない場合とがあるため、LED40が静止した状態であっても、位置情報を取得できる。
ここで低周波点灯とは、撮像周期に対して、LED発光が撮像されるフレームと撮像されないフレームとが存在しうるような周波数での点灯を意味する。一方、高周波点灯とは、撮像装置2の撮像周期(30フレーム/秒)に対して常にフレーム画像に撮像されるような周波数での点灯を意味する。たとえば、1kHzでLED40を点灯した場合であっても、たとえば撮像装置2の撮像速度が非常に高ければ、LED発光が撮像されるフレームと撮像されないフレームとが出現するため、LED40が静止した状態であっても、位置情報を取得できる。
高周波点灯するLED40の位置や姿勢は、ゲームアプリケーションの入力として利用される。そのため、位置推定部104で推定されたコントローラ20の位置情報は、アプリケーション処理部110に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部110には、ユーザがコントローラ20の方向キー21などを操作した入力も無線通信モジュール108を介して送信される。アプリケーション処理部110は、コントローラ20の位置・姿勢情報と、コントローラ20における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。
また、変形例として、4つのLED40のうちの1つを他のLED40とは異なる点滅パターンで点灯させることで、特定のLED40を認識することも可能となる。たとえば3つのLEDは高周波点灯を行い、1つのLEDに低周波点灯を行わせることで、たとえばフレーム画像中の第1LED40aがどれであるのかを確認することも可能となる。またこのとき、LED40を一意に認識できるだけでなく、その姿勢も取得することができる。
実施例において開示された発明の特徴は、次の項目によって規定されてもよい。
(項目1)
入力されるフレーム画像から発光体画像の位置を取得する画像処理装置であって、
前フレーム画像と現フレーム画像の差分画像を生成する差分画像生成部と、
現フレーム画像を所定の閾値を用いて2値化処理して2値化画像を生成する2値化画像生成部と、
前記差分画像と前記2値化画像とを論理演算した論理演算画像を生成する論理演算部と、
前記論理演算画像から発光体画像を抽出する抽出部と、
発光体画像のフレーム画像における位置を取得する位置取得部と、
を備えることを特徴とする画像処理装置。
(項目2)
前記論理演算部は、画素ごとに、前記差分画像の画素値と前記2値化画像の画素値との論理積演算を行うことで、論理演算画像を生成することを特徴とする項目1に記載の画像処理装置。
(項目3)
前記抽出部は、複数の発光体により形成される2次元パターンを予め認識しており、当該2次元パターンを利用して、発光体画像の抽出処理を行うことを特徴とする項目1または2に記載の画像処理装置。
(項目4)
前記位置取得部は、前回取得した発光体画像の位置と今回取得した発光体画像の位置の変化量が所定値を超える場合、今回取得した発光体画像の位置を、エラーとして処理することを特徴とする項目1から3のいずれかに記載の画像処理装置。
(項目5)
前記位置取得部は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得した発光体画像の位置を正常なものとして処理することを特徴とする項目4に記載の画像処理装置。
(2)2次元コードを利用した位置情報および/または姿勢情報の取得方法
以下に説明するコントローラ20の位置情報および/または姿勢情報の取得方法では、図1に示すゲームシステム1において、コントローラ20が、LED40の代わりに、2次元コードを有して構成される。この2次元コードは、撮像装置2により撮像されて、ゲーム装置10においてコントローラ20の実空間における位置情報および姿勢情報を取得するために利用される。
図15は、2次元コードを有するコントローラ20を示す。コントローラ20は、筐体背面29において、自身を一意に識別するための2次元コード70を有して構成される。2次元コード70およびその識別方法は、たとえば本出願人により出願された特開2006−72667号公報に開示された2次元コードおよびその識別方法と同様のものであってよい。
図16は、2次元コード70を構成する2次元パターンの一例を示す。2次元コード70は、コントローラ20の筐体背面29に刻印されてもよく、また印刷物として貼り付けられてもよい。2次元コード70には、方向指示部11と識別部12とが形成されている。方向指示部11は、2次元コード70の上方を示すために設けられ、識別部12は、2次元コード70を一意に識別するための特徴部分を表現するために設けられる。識別部12は、所定の区画内に複数のブロックを有して作成されたコード情報である。複数のブロックのうち、4角のブロックは複数の2次元コード70に共通して付与され、実質的には4角以外のブロックにより、特徴部分が形成される。4角のブロックは、撮像装置2からの距離を測定するために利用される。
図5に戻って、画像処理部102は、フレーム画像中の2次元コード70を認識すると、2次元コード70の画像における4角のブロック間の長さをもとに、撮像装置2と2次元コード70との距離を計算して求める。また、画像処理部102は、2次元コード70の方向指示部11を検出して、フレーム画像において2次元コード70が向いている方向を求める。この場合、識別部12に対して方向指示部11が存在する方向が上方となる。さらに、画像処理部102は、識別部12の4角以外のブロックから、2次元コード70の識別情報を取得する。
画像処理部102は、実空間中で2次元コード70が傾斜された状態についても、画像解析により認識する機能をもつ。画像処理部102において画像解析された結果は、位置推定部104に送られる。位置推定部104は、画像処理部102における画像解析結果をもとに、2次元コード70の位置および姿勢を推定する。
図17は、画像処理部102の構成を示す。画像処理部102は、フレーム画像取得部130、実オブジェクト抽出部150、状態決定部152、識別情報取得部154、識別情報格納部156および送出部160を備える。識別情報格納部156は、実オブジェクトを識別するための特徴部分の情報と、実オブジェクトを識別するための識別情報とを対応付けて記憶する。具体的には、図16における2次元コード70の識別部12のパターン情報と、識別情報とを1対1に対応付けて記憶している。たとえば識別情報は、ゲーム装置10においてキャラクタの割当てに利用されてもよい。特に、複数の2次元コード70の存在を許可するゲームアプリケーションにおいては、2次元コード70のそれぞれを識別情報と紐付けすることで、2次元コード70を認識可能となる。状態決定部152は、設定した座標系における実オブジェクトの状態を決定し、具体的には、姿勢を決定する姿勢決定部162、および位置を決定する位置決定部164を有する。
フレーム画像取得部130が、撮像装置2にて撮像された実空間のフレーム画像を取得する。撮像装置2は、周期的にフレーム画像を取得し、好適には1/30秒間隔でフレーム画像を取得する。
実オブジェクト抽出部150は、フレーム画像から実オブジェクト画像、すなわち2次元コード70の画像を抽出する。この処理は、画像情報を2進数のビット表現に変換し、このビット表現から2次元コード70の画像を抽出することで行われる。いわゆるドット処理であり、ビットのオンとオフを検出することで、画像抽出処理が行われてもよい。また、この処理は、既知の画像マッチング技術によって行ってもよい。その場合、実オブジェクト抽出部150は、マッチング処理のために、使用する実オブジェクトの画像情報を、メモリ(図示せず)に予め登録しておく。予め登録した画像情報と撮像した画像情報とのマッチングをとることで、2次元コード70の画像をフレーム画像から切り出すことができる。
位置決定部164は、実オブジェクト画像のフレーム画像中の2次元位置を決定する。具体的には、フレーム画像における実オブジェクト画像の中心点の座標をもとに、フレーム画像中の位置を決定する。また、位置決定部164は、2次元コード70の画像における識別部12の4角間の長さをもとに、撮像装置2と2次元コード70との距離を決定する。これにより、フレーム画像中の2次元位置とあわせて、3次元の実空間におけるコントローラ20の位置を取得できる。
姿勢決定部162は、実オブジェクト画像の姿勢を決定する。たとえば、実オブジェクト画像の姿勢は、方向指示部11の識別部12に対する位置により定められる。また、コントローラ20を傾ける場合には、識別部12の4角同士の距離が等しくなくなるため、その変化量をもとに、傾斜した姿勢を判断することもできる。
識別情報取得部154は、実オブジェクト画像から特徴部分を抽出して、識別情報格納部156から対応する識別情報を取得する。本実施例のゲームシステム1は、複数の異なる2次元コード70にも対応することが可能であり、例えば、複数のコントローラ20にそれぞれ異なる2次元コード70を設ける場合、それぞれの2次元コード70に対して、異なる識別情報がそれぞれ対応付けられる。
状態決定部152において決定された位置情報、姿勢情報、および識別情報取得部154において取得された識別情報は、それぞれ関連付けされて送出部160から位置推定部104に送られる。なお、複数の2次元コード70がフレーム画像に含まれる場合には、それぞれの2次元コード70ごとに、位置情報、姿勢情報、識別情報が関連付けされて送出部160から位置推定部104に送られる。以上により、位置推定部104は、コントローラ20の位置情報、姿勢情報、識別情報を取得し、コントローラ20の位置および姿勢を推定することができる。
なお、上記のように識別情報を、位置情報および姿勢情報と関連づける処理は、LED40を利用してコントローラ20の位置情報および姿勢情報を取得した場合においても実行することができる。
(3)加速度センサなどを利用した位置情報および/または姿勢情報の取得方法
図4に示すコントローラの内部構成に加えて、コントローラ200は、さらに3軸方向の加速度センサおよびジャイロセンサを有してもよい。
図18は、実施例にかかるコントローラ200の内部構成を示す。図18では、図4に示す入力受付部52、PWM制御部54、駆動部56などの構成の図示は省略している。コントローラ200は、XYZの3軸方向の加速度成分を検出する3軸加速度センサ300と、筐体水平面(XZ平面)における角速度を検出するジャイロセンサ302を備える。なお、ここでは、筐体の長手方向をX軸、高さ方向をY軸、短手方向(奥行き方向)をZ軸と設定している。ジャイロセンサ302は、筐体内中央領域に配置され、たとえば図2に示す筐体上面図におけるLED付きボタン31の下方近傍に配置される。また3軸加速度センサ300も同様に筐体中央付近に配置されるのが好ましい。3軸加速度センサ300およびジャイロセンサ302による検出値は所定の周期でメイン制御部50から無線通信モジュール58に供給される。無線通信モジュール58は、3軸加速度センサ300およびジャイロセンサ302による検出値を、方向キー21や操作ボタン26などの操作入力とともに、所定の周期でゲーム装置10の無線通信モジュール108に送信する。
図19は、実施例にかかるゲーム装置10の構成を示す。ゲーム装置10は、無線通信モジュール108にて、コントローラ200において3軸加速度センサ300およびジャイロセンサ302により計測された3軸方向の加速度成分および筐体水平面(XZ平面)に垂直な方向(Y軸方向)回りの角速度成分を取得する。3軸加速度成分および角速度成分は、無線通信モジュール108から位置推定部250に供給される。位置推定部250は、取得した3軸加速度成分および角速度成分をもとに、コントローラ200の位置や姿勢を推定できる。具体的に位置推定部250は、3軸加速度成分をもとに、コントローラ200の姿勢を取得できる。また、3軸加速度成分を1回積分することで移動速度を取得することができ、また2回積分することで位置を取得することができる。
なお実施例のコントローラ200では、Y軸方向回りの角速度成分をジャイロセンサ302により検出している。したがって位置推定部250は、ジャイロセンサ302による検出値をもとに、コントローラ200の水平面における回転状態すなわち回転姿勢を推定してもよい。なお、3軸加速度センサ300が高精度に3軸加速度成分を取得できる場合には、コントローラ200の水平面における回転状態を3軸加速度成分から推定できるようにしてもよい。
以上のように、コントローラ200が3軸加速度センサ300およびジャイロセンサ302を備えることによって、撮像装置2によるフレーム画像の解析を行わなくても、コントローラ200の位置および姿勢を取得することが可能となる。なお、撮像装置2によるフレーム画像の解析結果を更に利用して、コントローラ200の位置および姿勢の推定精度を高めるようにしてもよい。3軸加速度センサ300などの計測値を利用することでコントローラ200の位置および姿勢を推定できるため、コントローラ200の位置および姿勢情報をゲームアプリケーションの処理に反映することが可能となる。
以下では、コントローラ20ないしコントローラ200の位置および姿勢を取得できることを前提として、実施例にかかるゲームシステムにおいて実施することのできるアプリケーション例を示す。以下、コントローラを代表して、コントローラ200に関する説明を行う。ゲーム装置10は、3軸加速度成分および角速度成分をもとにコントローラ200の姿勢および位置を推定することになるが、コントローラ20に関しても撮像画像から姿勢および位置を推定できるため、以下の内容は、コントローラ20についても実現可能である。
図20は、アプリケーション処理部110の構成を示す。アプリケーション処理部110は、入力受付部400、取得部402、変化検出部404、オブジェクト制御部406および画像信号生成部408を備える。図20は、オブジェクトに関する画像を生成する構成のみを示している。実際には、オブジェクトの背景画像などは、他の構成により生成され、また音声信号についても他の構成により生成される。
入力受付部400は、無線通信モジュール108から、ゲームコントローラ200で入力される操作入力を受け付ける。取得部402は、位置推定部250から、ゲームコントローラ200の実空間における位置情報または姿勢情報を取得する。変化検出部404は、取得部402において時間的に連続して取得された位置情報または姿勢情報から、ゲームコントローラ200の位置または姿勢の変化を検出する。変化検出部404は、位置の変化を検出することで、コントローラ200の移動速度および移動方向を取得でき、また姿勢の変化を検出することで、コントローラ200の回転速度および回転方向を取得できる。
オブジェクト制御部406は、基本機能として、入力受付部400において受け付けた操作入力をもとに、仮想空間におけるオブジェクトの動作を制御する。本実施例のオブジェクト制御部406は、さらに取得部402において取得された位置情報または姿勢情報を利用して、オブジェクトの動作を制御する機能ももつ。さらにオブジェクト制御部406は、変化検出部404において取得された位置または姿勢の変化を利用して、オブジェクトの動作を制御する機能ももつ。
たとえば、オブジェクト制御部406は、位置情報または姿勢情報を利用して、仮想空間におけるオブジェクトの姿勢を決定してもよい。また、オブジェクト制御部406は、変化検出部404において、位置または姿勢の所定の変化が検出された場合に、位置情報または姿勢情報を利用したオブジェクトの動作制御を開始または終了してもよい。
取得部402が、実空間におけるゲームコントローラ200の3次元の位置情報または姿勢情報を取得する場合、オブジェクト制御部406は、3次元の位置情報または姿勢情報を利用して、仮想3次元空間におけるオブジェクトの動作を制御してもよい。なお、コントローラ200の動きが大きく、画像表示装置3に表示するオブジェクトが画面からフレームアウトしそうな場合には、オブジェクト制御部406は、ユーザに対して報知処理を実行してもよい。オブジェクト制御部406において動作制御されるオブジェクトは、他の背景画像などとともに画像信号生成部408において画像信号に変換される。
以下、アプリケーション例を示す。
<テニスゲーム>
テニスゲームでは、フレーム画像におけるコントローラ200の高さをテニスボールの打点高さとし、コントローラ200の向きをボールの打球方向、コントローラ200を動かす速度を、ボールを打ち込む強さとして、コントローラ200を動かすことでゲームを進行させることができる。これらの動きは、実際のラケットを振る動きに近似しているため、テニスを実際にプレイするのに近い感覚をユーザに与えることができる。たとえば、コントローラ200にラケットと同じ動作をさせてもよく、このときのスイングの角度と方向を利用してもよい。
オブジェクト制御部406は、取得部402で取得したコントローラ200の位置情報からコントローラ200の高さを取得し、姿勢情報からコントローラ200の向きを取得する。また、オブジェクト制御部406は、変化検出部404から、コントローラ200の移動速度を取得する。これらの情報により、オブジェクト制御部406は、ラケットやキャラクタなどのオブジェクトの姿勢を決定し、動作させる。
オブジェクト制御部406は、取得部402において取得されるコントローラ200の位置情報および姿勢情報をもとに、各仮想オブジェクトの動作を制御してもよいが、たとえば、基準位置および基準姿勢からの差分をとって、その差分値に基づいて各仮想オブジェクトの動作を制御してもよい。たとえば、ユーザがコントローラ200のボタンなどを操作した時点のコントローラ200の位置および姿勢を、オブジェクト動作制御処理に利用する基準位置および基準姿勢としてオブジェクト制御部406が取得してもよい。オブジェクト制御部406は、取得部402で取得される位置情報および姿勢情報から、基準位置および基準姿勢との間の変化量(差分)を検出して、その変化量をもとに仮想オブジェクトの動作制御を実行する。なお、オブジェクト制御部406は、基準位置および基準姿勢を変化検出部404に通知して、変化検出部404が、基準位置および基準姿勢からの変化量を検出してもよい。以下、基準位置および基準姿勢からの変化量でオブジェクトの動作制御を行う例を示すが、実空間座標における位置や姿勢に基づいたオブジェクトの動作制御も同様に実行できる。
コントローラ200のボタンやキー操作をゲーム入力としてそのまま利用できるようにすることで、従来のゲーム操作入力を維持しながら、感覚的に斬新なゲーム入力を行わせることができる。
たとえば、ボールを打ち込む強さをコントローラ200のボタン操作により定めてもよい。従来型のボタン操作と、斬新なゲーム入力とを組み合わせることで、新しい遊技性を実現できる。たとえば、相手のコートにボールを落とす位置をコントローラ200の向きで指定しながら、ボタン入力を行うことでボールを上げ、さらにコントローラ200を動かすことで、強いサーブを打てるようなテニスゲームを作ることも可能である。
コントローラ200の位置情報および/または姿勢情報を利用して、ボレー、スマッシュ、ロブ、ドロップショットなどのショットを打ち分けることも可能である。たとえば、オブジェクト制御部406は、コントローラ200の基準位置からの高さ方向の変化量が小さいときには、キャラクタにボレーの動作をさせ、変化量が正方向(上方向)に大きいときにはスマッシュの動作をさせ、負方向(下方向)に大きいときにはロブの動作をさせてもよい。
図21(a)は、キャラクタがボレーを行う状態、図21(b)は、キャラクタがスマッシュを行う状態を示す。図21の例では、ゲームキャラクタとラケットの2つの仮想オブジェクトを表現しているが、キャラクタの姿勢だけでなく、ラケットの傾きにもコントローラ200の位置情報を反映させることで、実際にテニスをプレイする感覚をユーザに与えることができる。
<オートバイゲーム>
オートバイのドライブゲームでは、コントローラ200の姿勢を操作することで、オートバイをコントロールするゲーム入力として利用してもよい。このとき、スピードはコントローラ200を動かす速度で決定してもよく、またボタン入力で決定してもよい。このように、従来型のボタン入力と、コントローラ200の位置や姿勢による静的な入力と、またコントローラ200の移動速度などの状態変化をもとにした動的な入力とを組み合わせて利用することで、ゲームアプリケーションの操作性を向上できる。
<文字入力ゲーム>
画面に文字入力を行わせるゲームでは、コントローラ200の位置を動かすことで、画面に文字を入力することができる。オブジェクト制御部406は、取得部402から供給される筐体X軸、Y軸方向の2次元的な位置情報に追従するように、画像表示装置3の画面に出力する線図オブジェクトを生成する。なお、コントローラ200において、筐体の長手方向をX軸、高さ方向をY軸、短手方向(奥行き方向)をZ軸と設定し、以下、この方向を、それぞれ筐体X軸、筐体Y軸、筐体Z軸と呼ぶ。またゲームアプリケーションにおいては、画像表示装置3の画面中、横方向をX軸、縦方向をY軸、奥行き方向をZ軸と設定しており、以下、これらの方向を、それぞれ画面X軸、画面Y軸、画面Z軸と呼ぶ。
これにより画面XY平面に、筐体XY平面における動きをトレースすることができる。コントローラ200の動きだけで、この処理を行わせる場合、コントローラ200の動きにより、トレース処理の開始および終了が決定されてもよい。このとき変化検出部404は、位置情報または姿勢情報の所定の変化を検出してオブジェクト制御部406に通知し、オブジェクト制御部406は、その通知を受けて、トレース処理の開始および終了を決定する。開始および終了のトリガとなる動き変化は、同一であってもよく、また開始処理、終了処理ごとに設定されていてもよい。同一の場合は、トレース処理の実行中でなければ開始処理のトリガ、トレース処理を実行中であれば終了処理のトリガとして、その動き変化を処理する。
オブジェクト制御部406が、筐体XY平面における2次元的な動作をゲーム入力として利用する場合、それ以外の方向、すなわち筐体Z軸方向の動きを、トレース処理の開始または終了のトリガとして利用してもよい。筐体Z軸方向の動きは、線図オブジェクトの動作制御には利用されないため、開始または終了のトリガとして好適に使用できる。すなわち、ゲーム中のオブジェクトの動きに必要な成分以外の情報を、ゲームに対する指示情報として利用することで、キー操作を利用しなくとも、ゲームアプリケーションを進行させることができる。たとえば、文字入力ゲームでは、コントローラ200の回転操作をゲーム入力として使用しないため、コントローラ200を回転させることで、すなわち姿勢変化させることで、トレース処理の開始または終了の指示入力としてもよい。
<電極棒ゲーム>
電極棒ゲームとは、金属製コースフレームに電極棒をいれて、その電極棒をコースフレームや障害物に当たらないように制限時間内にゴールまで持ち運ぶゲームであるが、この電極棒ゲームを、ゲームアプリケーションとして実行できる。現状、2次元の電極棒ゲームについては存在しているが、3次元の電極棒ゲームについては存在しない。
オブジェクト制御部406は、コントローラ200の3次元の位置情報および姿勢情報を利用して、仮想3次元空間において、仮想オブジェクトである電極棒の動作を制御してもよい。すなわち、ゲーム画面中でコースフレームを画面奥行き方向(画面Z軸方向)にも設けることで、ユーザは、コントローラ200を筐体XY平面上だけでなく、筐体Z軸方向にも動かすことになり、現実の電極棒ゲームと同様の体感を与えることができる。
以上、様々なアプリケーション例を示したが、オブジェクト制御部406がコントローラ200の動きを画面中でトレースさせるような場合、コントローラ200の動作量が大きくなると、コントローラ200が画像表示装置3の画面から外れるような場合も発生する。たとえば、上記した文字入力ゲームでは、そのような事態が発生しうる。
コントローラ200に対応する仮想オブジェクトが画像表示装置3の画面からフレームアウトしそうな場合、オブジェクト制御部406は、コントローラ200の位置情報をもとに、ユーザに対してフレームアウトしそうな旨を通知する報知処理を行ってもよい。たとえば、コントローラ200がフレームアウトしそうな場合に、コントローラ200に対して振動子を振動させるための振動制御信号を生成して、無線通信モジュール108より送信させてもよい。また、コントローラ200の動きに追従する仮想オブジェクトをゲーム画像として表示させている場合には、ユーザに目立つように仮想オブジェクトを動かすことで、フレームアウトしそうなことをユーザに伝えてもよい。たとえば、画面のフレーム枠から内方向にはじかれるような特殊な動きをさせることで、ユーザに報知を行ってもよい。
フレームアウトしそうであるか否かは、コントローラ200の位置情報を画面座標に変換したときに、フレーム近傍の位置になっているか否かをもとに判断してもよい。このとき、変化検出部404がコントローラ200の移動方向および速度を検出して、それらの情報から、所定時間以内にフレームアウトするか否かを予測してもよい。この予測処理は、フレーム近傍にあることを前提に実行されてもよい。
なお、撮像装置2を用いる場合は、たとえばフレーム画像中のコントローラ200の位置で決定してもよく、フレーム画像の縁部に近い位置にコントローラ20が存在することが検出される場合に、この報知処理を行ってもよい。
また、本実施例で説明したように、コントローラ200またはコントローラ20の位置情報および姿勢情報をもとに様々なアプリケーションが実行できる。
たとえば入力ボタンを併用してコントローラを回転させるなどすることで、ゲームオブジェクトに、大きいシャボン玉を作らせることができる。また、コントローラを回転させたり、姿勢の往復運動を行わせることで、料理ゲームでゲームオブジェクトにパンをこねさせることができる。またコントローラの位置情報を用いて、ゲームオブジェクトにタンバリンやマラカスを操作させたり、指揮をさせたりできる。またコントローラの3次元位置情報を利用することで、3次元的に配置されたブロックに球をあてることでブロックを崩していくゲームも実行できる。またコントローラ200をプレイヤ間でキャッチボールするように受け渡すことで、プレイヤを切り替えることも可能である。ゲーム中に疑似カメラが存在する場合には、コントローラの位置情報をもとに疑似カメラの視点移動を行うことができる。またコントローラの回転情報をもとに、仮想的なドアノブを回す動作も実行できる。また実際にコントローラを動かすことで、仮想オブジェクトをその動きに追従させて動かすことができる。また、コントローラの3次元的な動きを捕捉することで、その動きを仮想ノミの動きとしてとらえて彫刻を作成したり、また2次元的な動きを捕捉することで、その動きを仮想筆の動きとしてとらえて絵画を作成したりできる。さらに、コントローラに瞬時的な衝撃を与えることで、衝撃のレベルが所定値を超えたときに、コントローラを振動させたり、またゲームオブジェクトに衝撃を反映させるなど、ゲームの進行を制御してもよい。加速度センサ等を有する場合は、その加速度で衝撃を検出でき、またLED画像を利用する場合には、LED画像が楕円形になったり、また瞬間的に撮像されなかったりした場合に、コントローラが衝撃を受けたことを判定してもよい。