エンタテインメントシステムおよびゲームコントローラ
【課題】 コントローラ20のLEDを利用したゲームシステムを提供する。
【解決手段】 本発明のゲームシステム1において、撮像装置2がコントローラ20を撮像する。コントローラ20は、ゲームを進行させる操作入力を行うための複数の入力部と、実行されるゲームアプリケーションにおいてコントローラ20に設定されるコントローラ番号を表現するためのLEDを複数有する。ゲーム装置10は、コントローラ20における操作入力を受け付けて、ゲームアプリケーションの処理に反映するとともに、撮像装置2から撮像画像を取得して、撮像画像におけるLEDの位置からコントローラ20の撮像画像中の位置を取得して、取得した位置情報をゲームアプリケーションの処理に反映し、操作入力と、取得した位置情報とに基づいたアプリケーションの処理結果を示す画像信号を生成する。
【解決手段】 本発明のゲームシステム1において、撮像装置2がコントローラ20を撮像する。コントローラ20は、ゲームを進行させる操作入力を行うための複数の入力部と、実行されるゲームアプリケーションにおいてコントローラ20に設定されるコントローラ番号を表現するためのLEDを複数有する。ゲーム装置10は、コントローラ20における操作入力を受け付けて、ゲームアプリケーションの処理に反映するとともに、撮像装置2から撮像画像を取得して、撮像画像におけるLEDの位置からコントローラ20の撮像画像中の位置を取得して、取得した位置情報をゲームアプリケーションの処理に反映し、操作入力と、取得した位置情報とに基づいたアプリケーションの処理結果を示す画像信号を生成する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、実空間上に存在するオブジェクトを認識する技術に関する。
【背景技術】
【0002】
近年、2次元コードをカメラで撮像してコードデータを認識し、そのコードデータに対応付けられた所定の処理を実行させる技術が提案されている。1次元バーコードと比較すると2次元コードの方がコード化できる情報量が多く、現在では様々な種類の2次元コードが実用化されている。このような状況のもと、従来、2次元コードの画像認識に関する技術を提案するものがある(例えば、特許文献1参照)。
【0003】
実空間上のオブジェクトの3次元的な位置や姿勢などを取得するために、磁気方式、超音波方式または光学方式を利用した様々な計測システムが存在する。磁気方式による計測システムは、環境に存在する電子機器や地磁気などの影響を受けやすく、また超音波方式による計測システムは、環境の気圧や温度などの影響を受けやすい。一方で、光学方式による計測システムは、カメラで撮像した撮影画像を利用するため、周辺の磁界や気圧、温度などの影響を受けることがない。光学方式を利用した計測システムとして、オブジェクトに設けた複数のLEDをそれぞれ一意に定められる点滅パターンで点滅させて、2次元イメージセンサによる撮影画像を利用して3次元位置や姿勢などを認識する技術が提案されている(例えば、特許文献2参照)。特許文献2では、マーカとして機能するLEDが、LEDごとに一意に識別可能な識別情報を有している。
【特許文献1】特開2000−82108号公報
【特許文献2】特開2003−254716号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
近年の技術進歩にともない、ゲームシステムのハードウェアスペックが飛躍的に向上している。これによりゲームアプリケーションも多様化し、最近では、カメラとゲーム装置を接続してユーザがカメラの前で体を動かすと、ゲーム装置が光学的にユーザの動きを認識してゲームへの入力として利用するゲームシステムも実現されている。このようなゲーム環境のもと、本発明者は、ゲーム装置と接続したカメラを効果的に利用することで、従来にないゲームシステムおよびコントローラを想到するに至った。また、実空間におけるオブジェクトをカメラで撮像して、撮像画像からオブジェクトに関して加工処理を施した情報を画像表示装置に表示できれば、ゲームシステムだけでなく、他の環境、たとえば教育現場やビジネスの現場などのエンタテインメントシステムにおいても有効なアプリケーションを生み出すことができると考えられる。
【0005】
そこで本発明は、新規なアプリケーション処理機能をもつエンタテインメントシステムおよび当該エンタテインメントシステムにおいて利用される操作入力装置を提供することを目的とする。
【課題を解決するための手段】
【0006】
上記課題を解決するために、本発明のある態様のエンタテインメントシステムは、ユーザが操作入力を行うための操作入力装置と、前記操作入力装置における操作入力をもとにアプリケーションを処理してアプリケーションの処理結果を示す画像信号を生成する処理装置と、前記操作入力装置を撮像する撮像装置と、前記処理装置において生成された画像信号を出力する画像表示装置とを備える。
【0007】
この態様のエンタテインメントシステムにおいて、前記操作入力装置は、ユーザがアプリケーションを進行させる操作入力を行うための複数の入力部と、実行されるアプリケーションにおいて当該操作入力装置に設定される番号を表現するための発光素子を複数有し、前記処理装置は、前記操作入力装置における操作入力を受け付けて、アプリケーションの処理に反映するとともに、前記撮像装置から撮像画像を取得して、撮像画像における前記発光素子の位置から前記操作入力装置の撮像画像中の位置を取得して、取得した位置情報をアプリケーションの処理に反映し、操作入力と、取得した位置情報とに基づいたアプリケーションの処理結果を示す画像信号を生成する機能をもつ。
【0008】
本発明の別の態様は、ユーザによる操作入力をゲーム装置に伝送するゲームコントローラに関する。この態様のゲームコントローラは、ユーザにより把持される把持部と、ユーザにより前記把持部を把持された状態でユーザに操作入力を行わせるために筐体上面に設けられた複数の入力部と、前記入力部を介して入力された操作入力をゲーム装置に伝送する伝送部と、筐体背面に設けられた複数の発光素子とを備える。
【0009】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0010】
本発明によると、新規なアプリケーション処理機能をもつエンタテインメントシステムおよび当該エンタテインメントシステムにおいて利用される操作入力装置を提供することができる。
【発明を実施するための最良の形態】
【0011】
図1は、本発明の実施例にかかるゲームシステムの使用環境を示す。ゲームシステム1は、撮像装置2、画像表示装置3、音声出力装置4、ゲーム装置10およびコントローラ20を備える。撮像装置2、画像表示装置3、音声出力装置4およびコントローラ20は、ゲーム装置10に接続される。
【0012】
コントローラ20は、ユーザが操作入力を行うための操作入力装置であり、またゲーム装置10は、コントローラ20における操作入力をもとにゲームアプリケーションを処理して、ゲームアプリケーションの処理結果を示す画像信号を生成する処理装置である。なお、本実施例に示す技術は、ゲームアプリケーションに限らず、他の種類のアプリケーションを実行する処理装置を備えたエンタテインメントシステムにおいても実現できる。以下では、エンタテインメントシステムを代表して、ゲームアプリケーションを実行するゲームシステム1について説明する。
【0013】
撮像装置2は、CCD撮像素子またはCMOS撮像素子などから構成されるビデオカメラであり、実空間を所定の周期で撮像して、周期ごとのフレーム画像を生成する。たとえば、撮像装置2の撮像周期は30枚/秒として、画像表示装置3のフレームレートと一致させてもよい。撮像装置2は、USB(Universal Serial Bus)あるいはその他のインタフェースを介してゲーム装置10と接続する。
【0014】
画像表示装置3は画像信号を出力するディスプレイであって、ゲーム装置10において生成された画像信号を受けて、ゲーム画面を表示する。音声出力装置4は音声を出力するスピーカであって、ゲーム装置10において生成された音声信号を受けて、ゲーム音声を出力する。画像表示装置3および音声出力装置4は、ゲームシステム1における出力装置を構成する。
【0015】
ゲーム装置10と画像表示装置3は、有線により接続されてもよく、また無線により接続されてもよい。ゲーム装置10と画像表示装置3とはAVケーブルによって接続されてもよい。またゲーム装置10と画像表示装置3との間には、ネットワーク(LAN)ケーブルやワイヤレスLANなどで構築したホームネットワークが構築されてもよい。
【0016】
コントローラ20は、ユーザによる操作入力をゲーム装置10に伝送する機能をもち、本実施例ではゲーム装置10との間で無線通信可能な無線コントローラとして構成される。コントローラ20とゲーム装置10は、Bluetooth(ブルートゥース)(登録商標)プロトコルを用いて無線接続を確立してもよい。ゲーム装置10は、複数のコントローラ20との無線接続を可能とし、すなわちゲームシステム1においては、ゲーム装置10とコントローラ20の1対N接続を実現できる。ゲーム装置10は親機すなわちマスタとして機能し、コントローラ20は子機すなわちスレーブとして機能する。なおコントローラ20は、無線コントローラに限らず、ゲーム装置10とケーブルを介して接続される有線コントローラであってもよい。
【0017】
コントローラ20は、図示しないバッテリにより駆動され、ゲームを進行させる操作入力を行うための複数のボタンやキーを有して構成される。ユーザがコントローラ20のボタンやキーを操作すると、その操作入力が無線によりゲーム装置10に送信される。ゲーム装置10は、コントローラ20からゲームアプリケーションに関する操作入力を受信し、操作入力に応じてゲーム進行を制御して、ゲーム画像信号およびゲーム音声信号を生成する。生成されたゲーム画像信号およびゲーム音声信号は、それぞれ画像表示装置3および音声出力装置4により出力される。またゲーム装置10は、ゲームアプリケーションの進行状況に応じて、コントローラ20を振動させる振動制御信号をコントローラ20に送信する機能ももつ。コントローラ20は振動子を有し、振動制御信号を受信すると振動子を振動させる。
【0018】
本実施例のゲームシステム1において、コントローラ20は、複数の発光素子を有して構成される。複数の発光素子はそれぞれ同色のLEDであって、ゲームアプリケーションで設定されるコントローラ番号を表現するインジケータとしての役割をもつ。ゲームアプリケーションにおけるコントローラ番号は、たとえばゲーム開始時にゲームキャラクタを選択する際などにユーザに利用されるため、ユーザに何らかの手段でコントローラ番号を通知する必要がある。そのためコントローラ20では、複数のLEDのうち、たとえば1番目のLEDが点灯していればコントローラ番号が1であり、また2番目のLEDが点灯していればコントローラ番号が2であるとしてユーザにコントローラ番号を知らしめる。なお、複数のLEDの組合わせによりコントローラ番号を表現することも可能である。
【0019】
コントローラ20が有線コントローラである場合には、コントローラ20から延びるケーブルコネクタをゲーム装置10のポートに差し込んだ位置でコントローラ番号を決定することも可能である。しかしながら、複数のポートを備えたマルチポート装置をゲーム装置10に外付けして使用するような場合には、ユーザはすぐにコントローラ番号を知ることはできないため、複数のLEDを用いてユーザにコントローラ番号を通知することが好ましい。
【0020】
ゲームシステム1においては、コントローラ20のLEDを、コントローラ番号のインジケータとしてだけではなく、ゲームアプリケーションの進行に影響を与えるゲーム入力としても利用する。この場合、LEDの制御は、インジケータとして点灯するのではなく、ゲームアプリケーションへの入力としての点灯に切り替えられる。撮像装置2はコントローラ20のLEDを撮像し、フレーム画像を生成してゲーム装置10に供給する。ゲーム装置10は、フレーム画像を取得して、フレーム画像におけるLED画像の位置からコントローラ20のフレーム画像中の位置や姿勢を推定して取得し、取得した位置情報および/または姿勢情報をゲームアプリケーションの処理に反映する。すなわち、本実施例のゲーム装置10は、コントローラ20において入力された操作入力だけでなく、取得したコントローラ20の位置情報や姿勢情報も用いてゲームアプリケーションを処理して、その処理結果を示す画像信号を生成する機能をもつ。
【0021】
図2は、コントローラの外観構成を示す。コントローラ20には、方向キー21、アナログスティック27と、4種の操作ボタン26が設けられている。方向キー21、アナログスティック27、操作ボタン26は、筐体上面30に設けられた入力部である。4種のボタン22〜25には、それぞれを区別するために、異なる色で異なる図形が記されている。すなわち、○ボタン22には赤色の丸、×ボタン23には青色のバツ、□ボタン24には紫色の四角形、△ボタン25には緑色の三角形が記されている。コントローラ20の筐体背面29には、複数のLEDが設けられている。
【0022】
ユーザは左手で左側把持部28aを把持し、右手で右側把持部28bを把持して、コントローラ20を操作する。方向キー21、アナログスティック27、操作ボタン26は、ユーザが左側把持部28a、右側把持部28bを把持した状態で操作可能なように、筐体上面30上に設けられる。
【0023】
筐体上面30には、LED付きボタン31も設けられる。LED付きボタン31は、たとえば画像表示装置3にメニュー画面を表示させるためのボタンとして利用される。また、LEDの発光状態によりユーザへのメールの着信の知らせや、コントローラ20のバッテリの充電状態などを示す機能ももつ。たとえば充電中は赤色、充電が終了すると緑色に点灯し、充電残存量が残り少ないときには赤色を点滅させるようにLEDを点灯させる。
【0024】
ユーザは画像表示装置3に表示されるゲーム画面を見ながらゲームを行うため、画像表示装置3は、矢印Aで示すコントローラ20の前方に存在している。そのため、通常は、画像表示装置3に対して、LEDを配置された筐体背面29が向き合うことになる。本実施例において撮像装置2は、ゲームアプリケーションの実行中にLEDを撮像する必要があるため、その撮像範囲が画像表示装置3と同じ方向を向くように配置されて、コントローラ20の筐体背面29と向き合うことが好ましい。一般にユーザは画像表示装置3の正面でゲームをプレイすることが多いため、撮像装置2は、その光軸の方向が画像表示装置3の正面方向と一致するように配置される。具体的に、撮像装置2は、画像表示装置3の近傍において、画像表示装置3の表示画面をユーザが視認可能な位置を撮像範囲に含むように配置されることが好ましい。これにより、撮像装置2は、ユーザの身体およびコントローラ20を撮像できる。
【0025】
図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を有線コントローラとして利用することも可能である。
【0026】
筐体背面29側には、操作ボタン48a、48b、48c、48dがLED配設領域42を挟んで左右に設けられる。操作ボタン48a、48b、48c、48dは、ユーザが左側把持部28a、右側把持部28bを把持した状態でも人差指の先端で操作可能な位置に設けられる。これにより、操作ボタン48a、48b、48c、48dの操作時に、LED40は人差指によって隠れない。
【0027】
LED40は、コントローラ番号を表現するインジケータとして利用されるが、コントローラ20を使用しているユーザからすると、一度確認できれば十分であって、常に見える筐体上面30に配置することは好ましくない。一方、他のユーザが存在する場合には、LED40を筐体背面29に配置することで、他のユーザから見えやすくなるという利点がある。また筐体上面30にはLED付きボタン31が存在するため、LED40を配置するとユーザが区別しづらくなる。そのため、コントローラ20は、LED40を筐体背面29に配置して構成される。
【0028】
撮像装置2は、各画素におけるRGBの輝度値を取得する。発光したLED40を正確に検出するためには、LED40とLED40周辺の領域とのコントラストが大きいことが好ましい。そのためLED配設領域42は、その隣接する筐体色よりも明度の低い色をもち、たとえば黒色の配色を施される。LED配設領域42は、黒色の半透明板として構成され、LED40は、その背後すなわち筐体内部側に設けられる。これにより、LED40は点灯していなければ撮像装置2からは見えず、点灯したときのみ撮像される。黒色半透明板は、光を拡散してLED40の狭指向性を広指向性に変える役割ももつ。LED40をLED配設領域42に設けることで、発光したLED40とのコントラストを高めることができ、後の画像処理において、フレーム画像からLED画像を効果的に抽出することが可能となる。
【0029】
第1LED40a、第2LED40b、第3LED40cおよび第4LED40dは、所定の2次元パターンで配設される。たとえば第1LED40a、第2LED40b、第3LED40cおよび第4LED40dは、矩形の頂点を構成する位置に配設される。ゲーム装置10は、この位置関係を予め把握しており、LED画像の抽出処理に利用する。なお各LED40の近傍には、数字が刻印または印刷されており、ユーザは点灯したLED40の近傍の数字をみて、コントローラ番号を知ることができる。
【0030】
図4は、コントローラの内部構成を示す。コントローラ20は、無線通信モジュール58、処理部60、LED40および振動子44を備える。無線通信モジュール58は、ゲーム装置10の無線通信モジュールとの間でデータを送受信する機能をもつ。処理部60は、コントローラ20における所期の処理を実行する。
【0031】
処理部60は、メイン制御部50、入力受付部52、PWM制御部54および駆動部56を有する。メイン制御部50は、無線通信モジュール58との間で必要なデータの送受を行う。
【0032】
入力受付部52は、方向キー21、操作ボタン26、アナログスティック27などの入力部からの入力情報を受け付け、メイン制御部50に送る。メイン制御部50は、受け取った入力情報を無線通信モジュール58に供給し、無線通信モジュール58は、所定のタイミングでゲーム装置10に送信する。また、無線通信モジュール58はゲーム装置10から振動制御信号を受け取ると、メイン制御部50に供給し、メイン制御部50は、振動制御信号をもとに振動子44を振動させる駆動部56を動作させる。駆動部56は、振動子44を駆動するためのスイッチとして構成されてもよく、また供給電圧のデューティ比を可変とするPWM制御部として構成されてもよい。
【0033】
本実施例において、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の点灯のオンオフを認識させることができる。
【0034】
本実施例のゲームシステム1において、まず、ゲームシステム1に参加を希望するユーザのコントローラ20が、ゲーム装置10との間で通信を確立する。このとき、コントローラ20の識別情報、たとえばブルートゥースアドレスがゲーム装置10に受け渡され、以後の通信は、このブルートゥースアドレスをもとに行われる。なお、通信プロトコルとしてブルートゥースを利用しない場合には、MACアドレスなどの機器アドレスが利用されてもよい。接続確立後、ユーザはゲームアプリケーションに参加できる。
【0035】
このときコントローラ20には、ゲーム装置10からコントローラ番号を指示する情報が送信される。メイン制御部50は、この番号指示情報をもとに、設定されたコントローラ番号に対応するLED40のみを点灯させる。これによりユーザは、自身のコントローラ20のコントローラ番号を知ることができる。なお、番号指示情報の代わりに、コントローラ番号に対応するLED40の点灯を指示する制御信号がゲーム装置10から送信されてもよい。このようにメイン制御部50は、任意のLED40を点灯させることができる。
【0036】
本実施例のゲームシステム1において、ゲーム装置10は、全てのLED40a〜40dを点灯した状態で撮像されたフレーム画像をもとに、コントローラ20の位置および姿勢を推定する。推定した位置および姿勢は、実行するゲームアプリケーションの入力として利用される。またゲーム装置10は、コントローラ20の方向キー21や操作ボタン26などの操作入力も受け付ける。これらの入力情報をもとに、ゲーム装置10は、ゲームアプリケーションのゲームパラメータを生成し、ゲームを進行制御して、ゲーム画像およびゲーム音声のAVデータを生成する。AVデータは、画像表示装置3および音声出力装置4において出力される。ユーザは、ゲーム画面を見ながら、コントローラ20を実空間上で動かし、さらには方向キー21や操作ボタン26を操作入力してゲームを行う。以下に、ゲーム装置10における処理を説明する。
【0037】
図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として機能してもよい。
【0038】
無線通信モジュール108は、コントローラ20の無線通信モジュール58との間で無線通信を確立する。同期確立フェーズにおいては、無線通信モジュール108が、周辺のコントローラ20を含む端末機器に対して接続照会すなわち「問い合わせ」処理を行う。具体的には、無線通信モジュール108が、近くにいる端末機器に対してIQ(問い合わせ)パケットをブロードキャストする。IQパケットを受信したコントローラ20の無線通信モジュール58は、BluetoothアドレスとBluetoothクロック情報を含むFHS(Frequency Hop Synchronization)パケットをゲーム装置10に返信する。この時点における送受信では、周波数ホッピングパターンに関する同意がゲーム装置10とコントローラ20との間で確立していないので、問い合わせ専用に定義された固定ホッピングパターンが用いられる。
【0039】
無線通信モジュール108は、コントローラ20からFHSパケットを受け取り、どのようなコントローラ20が存在するかを把握した後、特定のコントローラ20に対してIDパケットを送信する。これは無線通信モジュール108による「呼び出し」処理である。特定のコントローラ20からIDパケットに対する応答が返ると、無線通信モジュール108はFHSパケットをコントローラ20に送信し、自分のアドレスとクロックをコントローラ20に知らせる。これにより、ゲーム装置10とコントローラ20は、同一のホッピングパターンを共有できるようになる。
【0040】
「呼び出し」を行うと、コントローラ20とゲーム装置10との間にピコネットが形成され、「接続」状態に入る。ピコネットとは、Bluetooth端末同士を近づけたときに、端末の間で一時的に形成されるネットワークを意味し、最大で8台のBluetooth端末が1つのピコネットに参加することができる。接続したコントローラ20は、無線通信モジュール108からスレーブ識別子、つまり接続中のコントローラ20に与えられる3ビットのアドレス(1〜7)を割り振られる。このスレーブ識別子は、AM_ADDR(アクティブメンバーアドレス)と呼ばれる。「接続」状態になると、通信リンク設定のための制御パケットが送受信され、これにより「データ転送」が可能となる。
【0041】
接続状態になり、コントローラ20がゲームアプリケーションに参加すると、アプリケーション処理部110は、コントローラ20のコントローラ番号を割り当て、コントローラ番号を指示する番号指示情報を生成する。無線通信モジュール108は、番号指示情報をコントローラ20に送信する。コントローラ20は、番号指示情報を受信すると、対応するLED40を点灯させる。なお、無線通信モジュール108は、番号指示情報の代わりに、コントローラ番号に対応するLED40の点灯を指示する制御信号をコントローラ20に送信してもよい。
【0042】
ゲームアプリケーションが開始されると、点滅指示部106は、コントローラ20に対して所定の周期で点滅するように点滅パターンを指示する制御信号を生成する。この点滅制御信号は、無線通信モジュール108からコントローラ20に送信される。
【0043】
入力部100はUSBインタフェースとして構成され、撮像装置2から所定の撮像周期(たとえば30フレーム/秒)でフレーム画像を取得する。画像処理部102は、後述するLED抽出アルゴリズムにしたがって、フレーム画像からLED画像を抽出する。位置推定部104は、抽出されたLED画像からLED画像の位置情報を取得し、コントローラ20の位置や姿勢を推定する。位置推定部104は、LED画像の位置情報を取得することから、位置取得部として機能してもよい。なおコントローラ20の位置は、4つのLED画像の重心位置に定められてよい。
【0044】
点灯する4つのLED40の位置や姿勢から推定されるコントローラ20の位置情報および/または姿勢情報は、ゲームアプリケーションの入力として利用される。そのため位置推定部104で推定されたコントローラ20の位置情報および姿勢情報は、アプリケーション処理部110に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部110には、ユーザがコントローラ20の方向キー21などを操作した入力も無線通信モジュール108を介して送信される。アプリケーション処理部110は、コントローラ20の位置・姿勢情報と、コントローラ20における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。画像信号および音声信号は出力部112からそれぞれ画像表示装置3および音声出力装置4に送られ、出力される。
【0045】
図6は、画像処理部の構成を示す。画像処理部102は、フレーム画像取得部130、現フレームバッファ132、前フレームバッファ134、差分画像生成部136、2値化画像生成部138、論理演算部140およびLED画像抽出部142を備える。
【0046】
フレーム画像取得部130は、入力部100からフレーム画像データを取得し、現フレームバッファ132に一時記憶させる。前フレームバッファ134には、一つ前のフレーム画像データが記憶されている。差分画像生成部136は、現フレームバッファ132に記憶されている現フレームデータと、前フレームバッファ134に記憶されている前フレームデータとの差分画像を生成する。フレーム画像中の座標(x,y)における前フレームデータのR画素値をPr、G画素値をPg、B画素値をPbとし、現フレームデータのR画素値をCr、G画素値をCg、B画素値をCbとしたとき、差分画像関数F(x,y)は、以下の数式で表現される。
【0047】
【数1】
【0048】
ここでThは、所定の閾値である。F(x,y)が0より大きければ、座標(x,y)の画素値が“1”に符号化され、表示上、その画素は白色とされる。一方、F(x,y)が0以下であれば、画素値が“0”に符号化され、表示上、その画素は黒色とされる。このように差分画像生成部136で生成される差分画像は、2値化処理された画像となる。差分画像を生成することで、前フレーム画像と現フレーム画像との間で動きのないオブジェクトの影響を取り除くことができる。
【0049】
2値化画像生成部138は、現フレームデータを所定の閾値を用いて2値化処理して、2値化された画像を生成する。2値化画像生成部138は、所定の閾値より大きい輝度を保持する画素の画素値を“1”に符号化し、所定の閾値以下の輝度を保持する画素の画素値を“0”に符号化する。現フレーム画像の2値化画像を生成することで、現フレーム画像において明るいオブジェクトのみを抽出することができる。
【0050】
論理演算部140は、差分画像生成部136で生成された差分画像と、2値化画像生成部138で生成された2値化画像とを論理演算した論理演算画像を生成する。詳細には、論理演算部140は、画素ごとに、差分画像の画素値と2値化画像の画素値との論理積演算を行うことで、論理積画像を生成する。これは、差分画像と2値化画像の対応する画素同士の画素値を数学的に論理積演算することで生成される。
【0051】
図7(a)は、現フレーム画像を示す。現フレーム画像では、ユーザがコントローラ20を把持してゲームをプレイし、右側には照明が点灯している状態が撮像されている。このときコントローラ20の全LED40が点灯している。なお、全てのLED40は、同一の点灯パターンにより、同一輝度で発光している。
図7(b)は、現フレーム画像と前フレーム画像の差分画像を示す。前フレーム画像の位置からコントローラ20を動かすと、数式(1)により差分画像が生成される。この例では、コントローラ20や、コントローラ20と一緒に動く体の少なくとも一部の領域が、白色画像(画素値が“1”になる)として取得される。なお、常にこのような白色画像が取得されるわけではなく、図7(b)は、あくまでも数式(1)を満足したときに生成される差分画像の一例である。このとき、照明は動かないため、差分画像には含まれない。なお、ユーザがコントローラ20を動かさなければ、コントローラ20の白色画像は取得されない。
【0052】
図8(a)は、現フレーム画像の2値化画像を示す。2値化画像では、図7(a)における高輝度領域、すなわち発光しているLEDと、照明のランプとが2値化されて白色画像に変換される。他のノイズを防ぐために、2値化処理する際に設定する閾値は、LEDの発光輝度から所定のマージン値を減じた輝度値に設定されていることが好ましい。
図8(b)は、論理積画像を示す。論理積画像は、図7(b)に示す差分画像と、図8(a)に示す2値化画像との論理積演算を行う。差分画像および2値化画像において、白色画素の画素値は“1”であり、黒色画素の画素値は“0”である。したがって、両方の画像において白色画素として存在している画素のみが、論理積画像において白色画素として生成されることになる。
【0053】
このように差分画像と2値化画像の論理積をとることで、LED画像を抽出しやすい論理積画像を生成できる。論理積画像は、LED画像抽出部142に送られる。
【0054】
論理積画像が生成されると、前フレームバッファ134に保持されている前フレームデータは、現フレームバッファ132に保持されている現フレームデータにより上書きされる。この上書き処理は、前フレームバッファ134が差分画像生成部136に読み出された直後に行われてもよい。その後、現フレームバッファ132に保持されている現フレームデータは、次のフレームデータにより上書きされて、次のフレームにおける論理積画像の生成処理を実行する。
【0055】
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が正方形の頂点を構成するように配置されている場合を例にとる。
【0056】
なおLED画像抽出部142は、論理積画像を用いずに、2値化画像からLED画像を抽出することも可能である。2値化画像には、LED画像以外のノイズも含まれることになるが、たとえば差分画像においてLED画像を取得できない場合には、2値化画像を利用することで、LED画像の位置および姿勢を検出できる。以下に示す処理手順は、論理積画像および2値化画像のいずれを用いても実行できるが、論理積画像にはLED画像以外のノイズ成分が少ないため、論理積画像を利用する方が処理速度は速い。
【0057】
図9は、LED画像候補の検出処理の処理手順を示すフローチャートである。LED画像抽出部142は、論理積画像において、白色画素(画素値が“1”になっている画素)が連続して存在する領域を1つの連結領域として取得する(S100)。次に、LED画像抽出部142は、白色画素連結領域の縁部分を抽出して、短辺および長辺を決定する(S102)。
【0058】
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画像候補の座標は、連結領域の重心に設定する。
【0059】
図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の処理を再実行する。
【0060】
LED抽出処理においては、処理負荷を軽減するために、コントローラ20の姿勢が所定角度以上傾いていないことを処理条件として設定してもよい。LED40は比較的指向性が強いため、コントローラ20を傾けすぎると、撮像装置2において受光が難しくなる。このLED40の指向性を利用して、LED画像候補を探索する際に、第1LED40aから所定角度(たとえば45°)よりも傾いていないことを条件としてLED画像の抽出処理を行うことで、処理負荷を大幅に軽減することが可能となる。
【0061】
本実施例では、前フレーム画像と現フレーム画像の差分画像を利用するため、コントローラ20に動きがない場合は、LED40の画像は差分画像から除かれる。そのため、差分画像を用いる場合には、図10に示すLED抽出処理により、必ずLED画像が見つかるわけではない。位置推定部104は、図10に示すLED抽出処理によりLED画像が見つからなかった場合は、コントローラ20が前フレームの位置から動いていないものと推定し、前フレームにおけるコントローラ20の位置情報および姿勢情報を取得する。このとき位置推定部104は、2値化画像を用いてLED画像を抽出してもよい。
【0062】
図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でないと判断される。
【0063】
図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)。
【0064】
図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)。
【0065】
以上により、LED画像抽出部142は、論理積画像から第1LED40a〜第4LED40dの画像を抽出することができる。抽出された第1LED40a〜第4LED40dの画像の位置情報は、位置推定部104に送られる。
【0066】
位置推定部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に送る。
【0067】
LED40の誤認識を回避するために、位置推定部104は、前回取得したLED画像の位置と、今回取得したLED画像の位置の変化量が所定値を超える場合、今回取得したLED画像の位置をエラーとして処理する。すなわち、1フレームの間に、位置や姿勢が所定値以上変化する場合は、外乱的な要素により他のオブジェクトをLED40として誤認識した可能性があるため、抽出したLED40の位置情報を破棄する。
【0068】
しかしながら、そのような場合であっても、実際に大きな変化量でコントローラ20が移動することもあり得るため、位置推定部104は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得したLED画像の位置を正常なものとして処理してもよい。
【0069】
位置推定部104は、たとえば現フレーム画像や、論理積画像をもとに、LED40の移動方向や速度を推定することも可能である。たとえば撮像装置2のシャッタースピードを落とすと、LED40の画像が楕円や直方体として撮像されることになる。そこで、LED画像の形状から、移動方向のみならず、移動速度も推定することが可能である。たとえば移動方向および速度が推定できれば、撮像装置2において突然見えなくなった場合でも、コントローラ20の位置や姿勢を予測できる。全てのLED40の形状が同じ方向に偏っているような場合に、コントローラ20の移動方向と速度を推定してもよい。
【0070】
アプリケーション処理部110は、推定されたコントローラ20の位置や姿勢を、ゲーム入力としてゲームアプリケーションの処理に反映する。この反映の手法は様々考えられるが、最も直観的には、推定したコントローラ20の位置に対応したゲーム画像中の位置に、仮想オブジェクトを追従させて表示する。ユーザが撮像装置2に対してコントローラ20を動かすと、その動きに追従してゲーム画像内の仮想オブジェクトを動かすことができる。
【0071】
なお、理想的な状態であればフレーム画像ごとにLED40の位置や姿勢を求めてゲーム画像に反映していけばよいが、一方で、コントローラ20の向きや周辺光の環境などにより、フレーム画像においてLED40の位置や姿勢を求められない状況も発生しうる。そのような状況が続いた後に、突然、LED40の位置や姿勢が求められると、停止していた仮想オブジェクトが新たな位置にいきなり移動することになり、ユーザに違和感を与える。そのため、論理積画像からLED40の位置や姿勢を検出できたとしても、ゲーム画像としては、仮想オブジェクトを取得した位置まで移動させるのではなく、仮に情報落ちがあった場合であっても、スムーズな動きを実現できるように追従処理を行わせることとする。
【0072】
図14(a)、図14(b)は、コントローラに対応する仮想オブジェクトがゲーム画面内で円滑な追従動作を実現するためのアルゴリズムを説明するための図である。説明の便宜上、仮想オブジェクトの位置変化について説明するが、姿勢変化についても同様のアルゴリズムを適用することができる。
【0073】
位置推定部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に分割する点であってもよい。
【0074】
図12(b)は、位置パラメータとしてPi+1が取得できなかった場合の例である。このような場合は、本アルゴリズムの効果を発揮できる。この場合は、最新の位置パラメータがPi+1の代わりに利用される。ここで最新の位置パラメータはPiであり、
Qi+1=(Qi+Pi)/2
として求められる。
本アルゴリズムによりゲーム画像における位置パラメータQを取得すると、空間内のコントローラ20が大きく変位したり、また論理積画像から抽出できない場合であっても、仮想オブジェクトは常に少しずつ移動できる。そのため、ゲーム画像中で仮想オブジェクトが急に動かなくなったり、また急に動いたりする状況の発生を回避でき、コントローラ20に対して円滑な追従処理を実現できる。
【0075】
以上、本発明を実施例をもとに説明した。この実施例は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0076】
本実施例では、コントローラ20を撮像装置2で撮像して、フレーム画像からコントローラ20の位置や姿勢を推定し、その位置情報や姿勢情報をゲームアプリケーションの処理に反映させることとした。コントローラ20のLED40は、たとえばゲームアプリケーションの進行状況に応じて点灯パターンを変更してもよい。
【0077】
ユーザがゲームアプリケーションに参加した直後に、ゲーム装置10は、コントローラ20に対して所定の低周波で4つのLED40を点灯させる制御信号を送信してもよい。点滅指示部106は、コントローラ20に対して所定の低周波での点滅パターンを指示する制御信号を生成する。この低周波点滅制御信号は、無線通信モジュール108からコントローラ20に送信される。なお、複数のコントローラ20が存在する場合には、コントローラ20ごとに点滅周波数が設定される。
【0078】
コントローラ20は、指定された低周波でLED40を点灯し、撮像装置2は、30枚/秒の撮像周期でフレーム画像を撮像する。ゲーム装置10は、複数のフレーム画像から、所定の周期で点灯をオンオフしているLED画像を抽出する。ゲームシステム1内に複数のコントローラ20が存在する場合は、コントローラ20ごとに点灯の周期を設定する。これにより、コントローラ20の位置を確認できるとともに、それぞれのコントローラ20を区別して認識することもできる。この処理は、理想的にはゲームアプリケーションに参加後、1回行われればよいが、実空間内ではコントローラ20が撮像装置2から突然見えなくなることもある。そのため、数秒ごとなどの所定の周期で、各コントローラ20は、コントローラごとに設定された低周波でLED40を点滅させてもよい。
【0079】
たとえば4つのLED40が低周波で点灯と消灯を行う場合には、LED40を撮像できるフレームと、撮像できないフレームとが所定の周期で切り替わることになる。撮像周期(30フレーム/秒)に対して、LED40を45Hzで点灯制御すると、連続した2枚のフレームで撮像され、次は撮像されない、という状況が繰り返される。フレーム画像に撮像される場合と撮像されない場合とがあるため、LED40が静止した状態であっても、位置情報を取得できる。
【0080】
ここで低周波点灯とは、撮像周期に対して、LED発光が撮像されるフレームと撮像されないフレームとが存在しうるような周波数での点灯を意味する。一方、高周波点灯とは、撮像装置2の撮像周期(30フレーム/秒)に対して常にフレーム画像に撮像されるような周波数での点灯を意味する。たとえば、1kHzでLED40を点灯した場合であっても、たとえば撮像装置2の撮像周期が非常に高ければ、LED発光が撮像されるフレームと撮像されないフレームとが出現するため、LED40が静止した状態であっても、位置情報を取得できる。
【0081】
高周波点灯するLED40の位置や姿勢は、ゲームアプリケーションの入力として利用される。そのため、位置推定部104で推定されたコントローラ20の位置情報は、アプリケーション処理部110に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部110には、ユーザがコントローラ20の方向キー21などを操作した入力も無線通信モジュール108を介して送信される。アプリケーション処理部110は、コントローラ20の位置・姿勢情報と、コントローラ20における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。
【0082】
また、変形例として、4つのLED40のうちの1つを他のLED40とは異なる点滅パターンで点灯させることで、特定のLED40を認識することも可能となる。たとえば3つのLEDは高周波点灯を行い、1つのLEDに低周波点灯を行わせることで、たとえばフレーム画像中の第1LED40aがどれであるのかを確認することも可能となる。
【0083】
実空間におけるコントローラ20の位置や姿勢を検出してゲームアプリケーションの処理に反映することで、新たなゲームアプリケーションを実現できる。テニスゲームを例にとると、フレーム画像におけるコントローラ20の高さをテニスボールの打点高さとし、コントローラ20の向きをボールの打球方向、コントローラ20を動かす速度を、ボールを打ち込む強さとして、コントローラ20を動かすことでゲームを進行させることができる。これらの動きは、実際のラケットを振る動きに近似しているため、テニスを実際にプレイするのに近い感覚をユーザに与えることができる。このとき、コントローラ20のボタンやキーをゲーム入力としてそのまま利用できるようにすることで、従来のゲーム操作入力を維持しながら、感覚的に斬新なゲーム入力を行わせることができる。このように、コントローラ20にインジケータとして設けたLEDを有効に活用することで、ゲームアプリケーションの幅を一層広げることができる。
【0084】
たとえば、ボールを打ち込む強さをコントローラ20のボタン操作により定めてもよい。従来型のボタン操作と、斬新なゲーム入力とを組み合わせることで、新しい遊技性を実現できる。たとえば、相手のコートにボールを落とす位置をコントローラ20の向きで指定しながら、ボタン入力を行うことでボールを上げ、さらにコントローラ20を動かすことで、強いサーブを打てるようなテニスゲームを作ることも可能である。
【0085】
ゲームアプリケーションとしては、たとえばオートバイのドライブゲームで、コントローラ20の姿勢を操作することで、オートバイをコントロールするゲーム入力として利用してもよい。このとき、スピードはコントローラ20を動かす速度で決定してもよく、またボタン入力で決定してもよい。このように、従来型のボタン入力と、コントローラ20の位置や姿勢による静的な入力と、またコントローラ20の移動速度などの状態変化をもとにした動的な入力とを組み合わせて利用することで、ゲームアプリケーションの操作性を向上できる。
【0086】
たとえば、コントローラ20が画像表示装置3の画面からフレームアウトしそうな場合、アプリケーション処理部110は、コントローラ20の位置情報をもとに、ユーザに対してフレームアウトしそうな旨を通知する処理を行ってもよい。たとえば、コントローラ20がフレームアウトしそうな場合に、コントローラ20に対して振動子を振動させるための振動制御信号を生成して、無線通信モジュール108より送信させてもよい。また、コントローラ20の動きに追従する仮想オブジェクトをゲーム画像として表示させている場合には、ユーザに目立つように仮想オブジェクトを動かすことで、フレームアウトしそうなことをユーザに伝えてもよい。フレームアウトしそうであるか否かは、たとえばフレーム画像の位置で決定してもよく、フレーム画像の縁部に近い位置にコントローラ20の位置が推定される場合に、この通知処理を行ってもよい。
【0087】
実施例において開示された発明の特徴は、次の項目によって規定されてもよい。
(項目1)
入力されるフレーム画像から発光体画像の位置を取得する画像処理装置であって、
前フレーム画像と現フレーム画像の差分画像を生成する差分画像生成部と、
現フレーム画像を所定の閾値を用いて2値化処理して2値化画像を生成する2値化画像生成部と、
前記差分画像と前記2値化画像とを論理演算した論理演算画像を生成する論理演算部と、
前記論理演算画像から発光体画像を抽出する抽出部と、
発光体画像のフレーム画像における位置を取得する位置取得部と、
を備えることを特徴とする画像処理装置。
(項目2)
前記論理演算部は、画素ごとに、前記差分画像の画素値と前記2値化画像の画素値との論理積演算を行うことで、論理演算画像を生成することを特徴とする項目1に記載の画像処理装置。
(項目3)
前記抽出部は、複数の発光体により形成される2次元パターンを予め認識しており、当該2次元パターンを利用して、発光体画像の抽出処理を行うことを特徴とする項目1または2に記載の画像処理装置。
(項目4)
前記位置取得部は、前回取得した発光体画像の位置と今回取得した発光体画像の位置の変化量が所定値を超える場合、今回取得した発光体画像の位置を、エラーとして処理することを特徴とする項目1から3のいずれかに記載の画像処理装置。
(項目5)
前記位置取得部は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得した発光体画像の位置を正常なものとして処理することを特徴とする項目4に記載の画像処理装置。
【図面の簡単な説明】
【0088】
【図1】本発明の実施例にかかるゲームシステムの使用環境を示す図である。
【図2】コントローラの外観構成を示す図である。
【図3】コントローラの背面側の外観構成を示す図である。
【図4】コントローラの内部構成を示す図である。
【図5】ゲーム装置の構成を示す図である。
【図6】画像処理部の構成を示す図である。
【図7】(a)は現フレーム画像を示す図であり、(b)は現フレーム画像と前フレーム画像の差分画像を示す図である。
【図8】(a)は現フレーム画像の2値化画像を示す図であり、(b)は論理積画像を示す図である。
【図9】LED画像候補の検出処理の処理手順を示すフローチャートである。
【図10】LED抽出処理の処理手順を示すフローチャートである。
【図11】図10のS122に示す第2LED検出処理の処理手順を示すフローチャートである。
【図12】図10のS124に示す第3LED検出処理の処理手順を示すフローチャートである。
【図13】図10のS126に示す第4LED検出処理の処理手順を示すフローチャートである。
【図14】コントローラに対応する仮想オブジェクトがゲーム画面内で円滑な追従動作を実現するためのアルゴリズムを説明するための図である。
【符号の説明】
【0089】
1・・・ゲームシステム、2・・・撮像装置、3・・・画像表示装置、4・・・音声出力装置、10・・・ゲーム装置、20・・・コントローラ、29・・・筐体背面、30・・・筐体上面、31・・・LED付きボタン、40・・・LED、40a・・・第1LED、40b・・・第2LED、40c・・・第3LED、40d・・・第4LED、42・・・LED配設領域、50・・・メイン制御部、52・・・入力受付部、54・・・PWM制御部、54a・・・第1PWM制御部、54b・・・第2PWM制御部、54c・・・第3PWM制御部、54d・・・第4PWM制御部、56・・・駆動部、58・・・無線通信モジュール、60・・・処理部、100・・・入力部、102・・・画像処理部、104・・・位置推定部、106・・・点滅指示部、108・・・無線通信モジュール、110・・・アプリケーション処理部、112・・・出力部、130・・・フレーム画像取得部、132・・・現フレームバッファ、134・・・前フレームバッファ、136・・・差分画像生成部、138・・・2値化画像生成部、140・・・論理演算部、142・・・LED画像抽出部。
【技術分野】
【0001】
本発明は、実空間上に存在するオブジェクトを認識する技術に関する。
【背景技術】
【0002】
近年、2次元コードをカメラで撮像してコードデータを認識し、そのコードデータに対応付けられた所定の処理を実行させる技術が提案されている。1次元バーコードと比較すると2次元コードの方がコード化できる情報量が多く、現在では様々な種類の2次元コードが実用化されている。このような状況のもと、従来、2次元コードの画像認識に関する技術を提案するものがある(例えば、特許文献1参照)。
【0003】
実空間上のオブジェクトの3次元的な位置や姿勢などを取得するために、磁気方式、超音波方式または光学方式を利用した様々な計測システムが存在する。磁気方式による計測システムは、環境に存在する電子機器や地磁気などの影響を受けやすく、また超音波方式による計測システムは、環境の気圧や温度などの影響を受けやすい。一方で、光学方式による計測システムは、カメラで撮像した撮影画像を利用するため、周辺の磁界や気圧、温度などの影響を受けることがない。光学方式を利用した計測システムとして、オブジェクトに設けた複数のLEDをそれぞれ一意に定められる点滅パターンで点滅させて、2次元イメージセンサによる撮影画像を利用して3次元位置や姿勢などを認識する技術が提案されている(例えば、特許文献2参照)。特許文献2では、マーカとして機能するLEDが、LEDごとに一意に識別可能な識別情報を有している。
【特許文献1】特開2000−82108号公報
【特許文献2】特開2003−254716号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
近年の技術進歩にともない、ゲームシステムのハードウェアスペックが飛躍的に向上している。これによりゲームアプリケーションも多様化し、最近では、カメラとゲーム装置を接続してユーザがカメラの前で体を動かすと、ゲーム装置が光学的にユーザの動きを認識してゲームへの入力として利用するゲームシステムも実現されている。このようなゲーム環境のもと、本発明者は、ゲーム装置と接続したカメラを効果的に利用することで、従来にないゲームシステムおよびコントローラを想到するに至った。また、実空間におけるオブジェクトをカメラで撮像して、撮像画像からオブジェクトに関して加工処理を施した情報を画像表示装置に表示できれば、ゲームシステムだけでなく、他の環境、たとえば教育現場やビジネスの現場などのエンタテインメントシステムにおいても有効なアプリケーションを生み出すことができると考えられる。
【0005】
そこで本発明は、新規なアプリケーション処理機能をもつエンタテインメントシステムおよび当該エンタテインメントシステムにおいて利用される操作入力装置を提供することを目的とする。
【課題を解決するための手段】
【0006】
上記課題を解決するために、本発明のある態様のエンタテインメントシステムは、ユーザが操作入力を行うための操作入力装置と、前記操作入力装置における操作入力をもとにアプリケーションを処理してアプリケーションの処理結果を示す画像信号を生成する処理装置と、前記操作入力装置を撮像する撮像装置と、前記処理装置において生成された画像信号を出力する画像表示装置とを備える。
【0007】
この態様のエンタテインメントシステムにおいて、前記操作入力装置は、ユーザがアプリケーションを進行させる操作入力を行うための複数の入力部と、実行されるアプリケーションにおいて当該操作入力装置に設定される番号を表現するための発光素子を複数有し、前記処理装置は、前記操作入力装置における操作入力を受け付けて、アプリケーションの処理に反映するとともに、前記撮像装置から撮像画像を取得して、撮像画像における前記発光素子の位置から前記操作入力装置の撮像画像中の位置を取得して、取得した位置情報をアプリケーションの処理に反映し、操作入力と、取得した位置情報とに基づいたアプリケーションの処理結果を示す画像信号を生成する機能をもつ。
【0008】
本発明の別の態様は、ユーザによる操作入力をゲーム装置に伝送するゲームコントローラに関する。この態様のゲームコントローラは、ユーザにより把持される把持部と、ユーザにより前記把持部を把持された状態でユーザに操作入力を行わせるために筐体上面に設けられた複数の入力部と、前記入力部を介して入力された操作入力をゲーム装置に伝送する伝送部と、筐体背面に設けられた複数の発光素子とを備える。
【0009】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0010】
本発明によると、新規なアプリケーション処理機能をもつエンタテインメントシステムおよび当該エンタテインメントシステムにおいて利用される操作入力装置を提供することができる。
【発明を実施するための最良の形態】
【0011】
図1は、本発明の実施例にかかるゲームシステムの使用環境を示す。ゲームシステム1は、撮像装置2、画像表示装置3、音声出力装置4、ゲーム装置10およびコントローラ20を備える。撮像装置2、画像表示装置3、音声出力装置4およびコントローラ20は、ゲーム装置10に接続される。
【0012】
コントローラ20は、ユーザが操作入力を行うための操作入力装置であり、またゲーム装置10は、コントローラ20における操作入力をもとにゲームアプリケーションを処理して、ゲームアプリケーションの処理結果を示す画像信号を生成する処理装置である。なお、本実施例に示す技術は、ゲームアプリケーションに限らず、他の種類のアプリケーションを実行する処理装置を備えたエンタテインメントシステムにおいても実現できる。以下では、エンタテインメントシステムを代表して、ゲームアプリケーションを実行するゲームシステム1について説明する。
【0013】
撮像装置2は、CCD撮像素子またはCMOS撮像素子などから構成されるビデオカメラであり、実空間を所定の周期で撮像して、周期ごとのフレーム画像を生成する。たとえば、撮像装置2の撮像周期は30枚/秒として、画像表示装置3のフレームレートと一致させてもよい。撮像装置2は、USB(Universal Serial Bus)あるいはその他のインタフェースを介してゲーム装置10と接続する。
【0014】
画像表示装置3は画像信号を出力するディスプレイであって、ゲーム装置10において生成された画像信号を受けて、ゲーム画面を表示する。音声出力装置4は音声を出力するスピーカであって、ゲーム装置10において生成された音声信号を受けて、ゲーム音声を出力する。画像表示装置3および音声出力装置4は、ゲームシステム1における出力装置を構成する。
【0015】
ゲーム装置10と画像表示装置3は、有線により接続されてもよく、また無線により接続されてもよい。ゲーム装置10と画像表示装置3とはAVケーブルによって接続されてもよい。またゲーム装置10と画像表示装置3との間には、ネットワーク(LAN)ケーブルやワイヤレスLANなどで構築したホームネットワークが構築されてもよい。
【0016】
コントローラ20は、ユーザによる操作入力をゲーム装置10に伝送する機能をもち、本実施例ではゲーム装置10との間で無線通信可能な無線コントローラとして構成される。コントローラ20とゲーム装置10は、Bluetooth(ブルートゥース)(登録商標)プロトコルを用いて無線接続を確立してもよい。ゲーム装置10は、複数のコントローラ20との無線接続を可能とし、すなわちゲームシステム1においては、ゲーム装置10とコントローラ20の1対N接続を実現できる。ゲーム装置10は親機すなわちマスタとして機能し、コントローラ20は子機すなわちスレーブとして機能する。なおコントローラ20は、無線コントローラに限らず、ゲーム装置10とケーブルを介して接続される有線コントローラであってもよい。
【0017】
コントローラ20は、図示しないバッテリにより駆動され、ゲームを進行させる操作入力を行うための複数のボタンやキーを有して構成される。ユーザがコントローラ20のボタンやキーを操作すると、その操作入力が無線によりゲーム装置10に送信される。ゲーム装置10は、コントローラ20からゲームアプリケーションに関する操作入力を受信し、操作入力に応じてゲーム進行を制御して、ゲーム画像信号およびゲーム音声信号を生成する。生成されたゲーム画像信号およびゲーム音声信号は、それぞれ画像表示装置3および音声出力装置4により出力される。またゲーム装置10は、ゲームアプリケーションの進行状況に応じて、コントローラ20を振動させる振動制御信号をコントローラ20に送信する機能ももつ。コントローラ20は振動子を有し、振動制御信号を受信すると振動子を振動させる。
【0018】
本実施例のゲームシステム1において、コントローラ20は、複数の発光素子を有して構成される。複数の発光素子はそれぞれ同色のLEDであって、ゲームアプリケーションで設定されるコントローラ番号を表現するインジケータとしての役割をもつ。ゲームアプリケーションにおけるコントローラ番号は、たとえばゲーム開始時にゲームキャラクタを選択する際などにユーザに利用されるため、ユーザに何らかの手段でコントローラ番号を通知する必要がある。そのためコントローラ20では、複数のLEDのうち、たとえば1番目のLEDが点灯していればコントローラ番号が1であり、また2番目のLEDが点灯していればコントローラ番号が2であるとしてユーザにコントローラ番号を知らしめる。なお、複数のLEDの組合わせによりコントローラ番号を表現することも可能である。
【0019】
コントローラ20が有線コントローラである場合には、コントローラ20から延びるケーブルコネクタをゲーム装置10のポートに差し込んだ位置でコントローラ番号を決定することも可能である。しかしながら、複数のポートを備えたマルチポート装置をゲーム装置10に外付けして使用するような場合には、ユーザはすぐにコントローラ番号を知ることはできないため、複数のLEDを用いてユーザにコントローラ番号を通知することが好ましい。
【0020】
ゲームシステム1においては、コントローラ20のLEDを、コントローラ番号のインジケータとしてだけではなく、ゲームアプリケーションの進行に影響を与えるゲーム入力としても利用する。この場合、LEDの制御は、インジケータとして点灯するのではなく、ゲームアプリケーションへの入力としての点灯に切り替えられる。撮像装置2はコントローラ20のLEDを撮像し、フレーム画像を生成してゲーム装置10に供給する。ゲーム装置10は、フレーム画像を取得して、フレーム画像におけるLED画像の位置からコントローラ20のフレーム画像中の位置や姿勢を推定して取得し、取得した位置情報および/または姿勢情報をゲームアプリケーションの処理に反映する。すなわち、本実施例のゲーム装置10は、コントローラ20において入力された操作入力だけでなく、取得したコントローラ20の位置情報や姿勢情報も用いてゲームアプリケーションを処理して、その処理結果を示す画像信号を生成する機能をもつ。
【0021】
図2は、コントローラの外観構成を示す。コントローラ20には、方向キー21、アナログスティック27と、4種の操作ボタン26が設けられている。方向キー21、アナログスティック27、操作ボタン26は、筐体上面30に設けられた入力部である。4種のボタン22〜25には、それぞれを区別するために、異なる色で異なる図形が記されている。すなわち、○ボタン22には赤色の丸、×ボタン23には青色のバツ、□ボタン24には紫色の四角形、△ボタン25には緑色の三角形が記されている。コントローラ20の筐体背面29には、複数のLEDが設けられている。
【0022】
ユーザは左手で左側把持部28aを把持し、右手で右側把持部28bを把持して、コントローラ20を操作する。方向キー21、アナログスティック27、操作ボタン26は、ユーザが左側把持部28a、右側把持部28bを把持した状態で操作可能なように、筐体上面30上に設けられる。
【0023】
筐体上面30には、LED付きボタン31も設けられる。LED付きボタン31は、たとえば画像表示装置3にメニュー画面を表示させるためのボタンとして利用される。また、LEDの発光状態によりユーザへのメールの着信の知らせや、コントローラ20のバッテリの充電状態などを示す機能ももつ。たとえば充電中は赤色、充電が終了すると緑色に点灯し、充電残存量が残り少ないときには赤色を点滅させるようにLEDを点灯させる。
【0024】
ユーザは画像表示装置3に表示されるゲーム画面を見ながらゲームを行うため、画像表示装置3は、矢印Aで示すコントローラ20の前方に存在している。そのため、通常は、画像表示装置3に対して、LEDを配置された筐体背面29が向き合うことになる。本実施例において撮像装置2は、ゲームアプリケーションの実行中にLEDを撮像する必要があるため、その撮像範囲が画像表示装置3と同じ方向を向くように配置されて、コントローラ20の筐体背面29と向き合うことが好ましい。一般にユーザは画像表示装置3の正面でゲームをプレイすることが多いため、撮像装置2は、その光軸の方向が画像表示装置3の正面方向と一致するように配置される。具体的に、撮像装置2は、画像表示装置3の近傍において、画像表示装置3の表示画面をユーザが視認可能な位置を撮像範囲に含むように配置されることが好ましい。これにより、撮像装置2は、ユーザの身体およびコントローラ20を撮像できる。
【0025】
図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を有線コントローラとして利用することも可能である。
【0026】
筐体背面29側には、操作ボタン48a、48b、48c、48dがLED配設領域42を挟んで左右に設けられる。操作ボタン48a、48b、48c、48dは、ユーザが左側把持部28a、右側把持部28bを把持した状態でも人差指の先端で操作可能な位置に設けられる。これにより、操作ボタン48a、48b、48c、48dの操作時に、LED40は人差指によって隠れない。
【0027】
LED40は、コントローラ番号を表現するインジケータとして利用されるが、コントローラ20を使用しているユーザからすると、一度確認できれば十分であって、常に見える筐体上面30に配置することは好ましくない。一方、他のユーザが存在する場合には、LED40を筐体背面29に配置することで、他のユーザから見えやすくなるという利点がある。また筐体上面30にはLED付きボタン31が存在するため、LED40を配置するとユーザが区別しづらくなる。そのため、コントローラ20は、LED40を筐体背面29に配置して構成される。
【0028】
撮像装置2は、各画素におけるRGBの輝度値を取得する。発光したLED40を正確に検出するためには、LED40とLED40周辺の領域とのコントラストが大きいことが好ましい。そのためLED配設領域42は、その隣接する筐体色よりも明度の低い色をもち、たとえば黒色の配色を施される。LED配設領域42は、黒色の半透明板として構成され、LED40は、その背後すなわち筐体内部側に設けられる。これにより、LED40は点灯していなければ撮像装置2からは見えず、点灯したときのみ撮像される。黒色半透明板は、光を拡散してLED40の狭指向性を広指向性に変える役割ももつ。LED40をLED配設領域42に設けることで、発光したLED40とのコントラストを高めることができ、後の画像処理において、フレーム画像からLED画像を効果的に抽出することが可能となる。
【0029】
第1LED40a、第2LED40b、第3LED40cおよび第4LED40dは、所定の2次元パターンで配設される。たとえば第1LED40a、第2LED40b、第3LED40cおよび第4LED40dは、矩形の頂点を構成する位置に配設される。ゲーム装置10は、この位置関係を予め把握しており、LED画像の抽出処理に利用する。なお各LED40の近傍には、数字が刻印または印刷されており、ユーザは点灯したLED40の近傍の数字をみて、コントローラ番号を知ることができる。
【0030】
図4は、コントローラの内部構成を示す。コントローラ20は、無線通信モジュール58、処理部60、LED40および振動子44を備える。無線通信モジュール58は、ゲーム装置10の無線通信モジュールとの間でデータを送受信する機能をもつ。処理部60は、コントローラ20における所期の処理を実行する。
【0031】
処理部60は、メイン制御部50、入力受付部52、PWM制御部54および駆動部56を有する。メイン制御部50は、無線通信モジュール58との間で必要なデータの送受を行う。
【0032】
入力受付部52は、方向キー21、操作ボタン26、アナログスティック27などの入力部からの入力情報を受け付け、メイン制御部50に送る。メイン制御部50は、受け取った入力情報を無線通信モジュール58に供給し、無線通信モジュール58は、所定のタイミングでゲーム装置10に送信する。また、無線通信モジュール58はゲーム装置10から振動制御信号を受け取ると、メイン制御部50に供給し、メイン制御部50は、振動制御信号をもとに振動子44を振動させる駆動部56を動作させる。駆動部56は、振動子44を駆動するためのスイッチとして構成されてもよく、また供給電圧のデューティ比を可変とするPWM制御部として構成されてもよい。
【0033】
本実施例において、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の点灯のオンオフを認識させることができる。
【0034】
本実施例のゲームシステム1において、まず、ゲームシステム1に参加を希望するユーザのコントローラ20が、ゲーム装置10との間で通信を確立する。このとき、コントローラ20の識別情報、たとえばブルートゥースアドレスがゲーム装置10に受け渡され、以後の通信は、このブルートゥースアドレスをもとに行われる。なお、通信プロトコルとしてブルートゥースを利用しない場合には、MACアドレスなどの機器アドレスが利用されてもよい。接続確立後、ユーザはゲームアプリケーションに参加できる。
【0035】
このときコントローラ20には、ゲーム装置10からコントローラ番号を指示する情報が送信される。メイン制御部50は、この番号指示情報をもとに、設定されたコントローラ番号に対応するLED40のみを点灯させる。これによりユーザは、自身のコントローラ20のコントローラ番号を知ることができる。なお、番号指示情報の代わりに、コントローラ番号に対応するLED40の点灯を指示する制御信号がゲーム装置10から送信されてもよい。このようにメイン制御部50は、任意のLED40を点灯させることができる。
【0036】
本実施例のゲームシステム1において、ゲーム装置10は、全てのLED40a〜40dを点灯した状態で撮像されたフレーム画像をもとに、コントローラ20の位置および姿勢を推定する。推定した位置および姿勢は、実行するゲームアプリケーションの入力として利用される。またゲーム装置10は、コントローラ20の方向キー21や操作ボタン26などの操作入力も受け付ける。これらの入力情報をもとに、ゲーム装置10は、ゲームアプリケーションのゲームパラメータを生成し、ゲームを進行制御して、ゲーム画像およびゲーム音声のAVデータを生成する。AVデータは、画像表示装置3および音声出力装置4において出力される。ユーザは、ゲーム画面を見ながら、コントローラ20を実空間上で動かし、さらには方向キー21や操作ボタン26を操作入力してゲームを行う。以下に、ゲーム装置10における処理を説明する。
【0037】
図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として機能してもよい。
【0038】
無線通信モジュール108は、コントローラ20の無線通信モジュール58との間で無線通信を確立する。同期確立フェーズにおいては、無線通信モジュール108が、周辺のコントローラ20を含む端末機器に対して接続照会すなわち「問い合わせ」処理を行う。具体的には、無線通信モジュール108が、近くにいる端末機器に対してIQ(問い合わせ)パケットをブロードキャストする。IQパケットを受信したコントローラ20の無線通信モジュール58は、BluetoothアドレスとBluetoothクロック情報を含むFHS(Frequency Hop Synchronization)パケットをゲーム装置10に返信する。この時点における送受信では、周波数ホッピングパターンに関する同意がゲーム装置10とコントローラ20との間で確立していないので、問い合わせ専用に定義された固定ホッピングパターンが用いられる。
【0039】
無線通信モジュール108は、コントローラ20からFHSパケットを受け取り、どのようなコントローラ20が存在するかを把握した後、特定のコントローラ20に対してIDパケットを送信する。これは無線通信モジュール108による「呼び出し」処理である。特定のコントローラ20からIDパケットに対する応答が返ると、無線通信モジュール108はFHSパケットをコントローラ20に送信し、自分のアドレスとクロックをコントローラ20に知らせる。これにより、ゲーム装置10とコントローラ20は、同一のホッピングパターンを共有できるようになる。
【0040】
「呼び出し」を行うと、コントローラ20とゲーム装置10との間にピコネットが形成され、「接続」状態に入る。ピコネットとは、Bluetooth端末同士を近づけたときに、端末の間で一時的に形成されるネットワークを意味し、最大で8台のBluetooth端末が1つのピコネットに参加することができる。接続したコントローラ20は、無線通信モジュール108からスレーブ識別子、つまり接続中のコントローラ20に与えられる3ビットのアドレス(1〜7)を割り振られる。このスレーブ識別子は、AM_ADDR(アクティブメンバーアドレス)と呼ばれる。「接続」状態になると、通信リンク設定のための制御パケットが送受信され、これにより「データ転送」が可能となる。
【0041】
接続状態になり、コントローラ20がゲームアプリケーションに参加すると、アプリケーション処理部110は、コントローラ20のコントローラ番号を割り当て、コントローラ番号を指示する番号指示情報を生成する。無線通信モジュール108は、番号指示情報をコントローラ20に送信する。コントローラ20は、番号指示情報を受信すると、対応するLED40を点灯させる。なお、無線通信モジュール108は、番号指示情報の代わりに、コントローラ番号に対応するLED40の点灯を指示する制御信号をコントローラ20に送信してもよい。
【0042】
ゲームアプリケーションが開始されると、点滅指示部106は、コントローラ20に対して所定の周期で点滅するように点滅パターンを指示する制御信号を生成する。この点滅制御信号は、無線通信モジュール108からコントローラ20に送信される。
【0043】
入力部100はUSBインタフェースとして構成され、撮像装置2から所定の撮像周期(たとえば30フレーム/秒)でフレーム画像を取得する。画像処理部102は、後述するLED抽出アルゴリズムにしたがって、フレーム画像からLED画像を抽出する。位置推定部104は、抽出されたLED画像からLED画像の位置情報を取得し、コントローラ20の位置や姿勢を推定する。位置推定部104は、LED画像の位置情報を取得することから、位置取得部として機能してもよい。なおコントローラ20の位置は、4つのLED画像の重心位置に定められてよい。
【0044】
点灯する4つのLED40の位置や姿勢から推定されるコントローラ20の位置情報および/または姿勢情報は、ゲームアプリケーションの入力として利用される。そのため位置推定部104で推定されたコントローラ20の位置情報および姿勢情報は、アプリケーション処理部110に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部110には、ユーザがコントローラ20の方向キー21などを操作した入力も無線通信モジュール108を介して送信される。アプリケーション処理部110は、コントローラ20の位置・姿勢情報と、コントローラ20における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。画像信号および音声信号は出力部112からそれぞれ画像表示装置3および音声出力装置4に送られ、出力される。
【0045】
図6は、画像処理部の構成を示す。画像処理部102は、フレーム画像取得部130、現フレームバッファ132、前フレームバッファ134、差分画像生成部136、2値化画像生成部138、論理演算部140およびLED画像抽出部142を備える。
【0046】
フレーム画像取得部130は、入力部100からフレーム画像データを取得し、現フレームバッファ132に一時記憶させる。前フレームバッファ134には、一つ前のフレーム画像データが記憶されている。差分画像生成部136は、現フレームバッファ132に記憶されている現フレームデータと、前フレームバッファ134に記憶されている前フレームデータとの差分画像を生成する。フレーム画像中の座標(x,y)における前フレームデータのR画素値をPr、G画素値をPg、B画素値をPbとし、現フレームデータのR画素値をCr、G画素値をCg、B画素値をCbとしたとき、差分画像関数F(x,y)は、以下の数式で表現される。
【0047】
【数1】
【0048】
ここでThは、所定の閾値である。F(x,y)が0より大きければ、座標(x,y)の画素値が“1”に符号化され、表示上、その画素は白色とされる。一方、F(x,y)が0以下であれば、画素値が“0”に符号化され、表示上、その画素は黒色とされる。このように差分画像生成部136で生成される差分画像は、2値化処理された画像となる。差分画像を生成することで、前フレーム画像と現フレーム画像との間で動きのないオブジェクトの影響を取り除くことができる。
【0049】
2値化画像生成部138は、現フレームデータを所定の閾値を用いて2値化処理して、2値化された画像を生成する。2値化画像生成部138は、所定の閾値より大きい輝度を保持する画素の画素値を“1”に符号化し、所定の閾値以下の輝度を保持する画素の画素値を“0”に符号化する。現フレーム画像の2値化画像を生成することで、現フレーム画像において明るいオブジェクトのみを抽出することができる。
【0050】
論理演算部140は、差分画像生成部136で生成された差分画像と、2値化画像生成部138で生成された2値化画像とを論理演算した論理演算画像を生成する。詳細には、論理演算部140は、画素ごとに、差分画像の画素値と2値化画像の画素値との論理積演算を行うことで、論理積画像を生成する。これは、差分画像と2値化画像の対応する画素同士の画素値を数学的に論理積演算することで生成される。
【0051】
図7(a)は、現フレーム画像を示す。現フレーム画像では、ユーザがコントローラ20を把持してゲームをプレイし、右側には照明が点灯している状態が撮像されている。このときコントローラ20の全LED40が点灯している。なお、全てのLED40は、同一の点灯パターンにより、同一輝度で発光している。
図7(b)は、現フレーム画像と前フレーム画像の差分画像を示す。前フレーム画像の位置からコントローラ20を動かすと、数式(1)により差分画像が生成される。この例では、コントローラ20や、コントローラ20と一緒に動く体の少なくとも一部の領域が、白色画像(画素値が“1”になる)として取得される。なお、常にこのような白色画像が取得されるわけではなく、図7(b)は、あくまでも数式(1)を満足したときに生成される差分画像の一例である。このとき、照明は動かないため、差分画像には含まれない。なお、ユーザがコントローラ20を動かさなければ、コントローラ20の白色画像は取得されない。
【0052】
図8(a)は、現フレーム画像の2値化画像を示す。2値化画像では、図7(a)における高輝度領域、すなわち発光しているLEDと、照明のランプとが2値化されて白色画像に変換される。他のノイズを防ぐために、2値化処理する際に設定する閾値は、LEDの発光輝度から所定のマージン値を減じた輝度値に設定されていることが好ましい。
図8(b)は、論理積画像を示す。論理積画像は、図7(b)に示す差分画像と、図8(a)に示す2値化画像との論理積演算を行う。差分画像および2値化画像において、白色画素の画素値は“1”であり、黒色画素の画素値は“0”である。したがって、両方の画像において白色画素として存在している画素のみが、論理積画像において白色画素として生成されることになる。
【0053】
このように差分画像と2値化画像の論理積をとることで、LED画像を抽出しやすい論理積画像を生成できる。論理積画像は、LED画像抽出部142に送られる。
【0054】
論理積画像が生成されると、前フレームバッファ134に保持されている前フレームデータは、現フレームバッファ132に保持されている現フレームデータにより上書きされる。この上書き処理は、前フレームバッファ134が差分画像生成部136に読み出された直後に行われてもよい。その後、現フレームバッファ132に保持されている現フレームデータは、次のフレームデータにより上書きされて、次のフレームにおける論理積画像の生成処理を実行する。
【0055】
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が正方形の頂点を構成するように配置されている場合を例にとる。
【0056】
なおLED画像抽出部142は、論理積画像を用いずに、2値化画像からLED画像を抽出することも可能である。2値化画像には、LED画像以外のノイズも含まれることになるが、たとえば差分画像においてLED画像を取得できない場合には、2値化画像を利用することで、LED画像の位置および姿勢を検出できる。以下に示す処理手順は、論理積画像および2値化画像のいずれを用いても実行できるが、論理積画像にはLED画像以外のノイズ成分が少ないため、論理積画像を利用する方が処理速度は速い。
【0057】
図9は、LED画像候補の検出処理の処理手順を示すフローチャートである。LED画像抽出部142は、論理積画像において、白色画素(画素値が“1”になっている画素)が連続して存在する領域を1つの連結領域として取得する(S100)。次に、LED画像抽出部142は、白色画素連結領域の縁部分を抽出して、短辺および長辺を決定する(S102)。
【0058】
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画像候補の座標は、連結領域の重心に設定する。
【0059】
図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の処理を再実行する。
【0060】
LED抽出処理においては、処理負荷を軽減するために、コントローラ20の姿勢が所定角度以上傾いていないことを処理条件として設定してもよい。LED40は比較的指向性が強いため、コントローラ20を傾けすぎると、撮像装置2において受光が難しくなる。このLED40の指向性を利用して、LED画像候補を探索する際に、第1LED40aから所定角度(たとえば45°)よりも傾いていないことを条件としてLED画像の抽出処理を行うことで、処理負荷を大幅に軽減することが可能となる。
【0061】
本実施例では、前フレーム画像と現フレーム画像の差分画像を利用するため、コントローラ20に動きがない場合は、LED40の画像は差分画像から除かれる。そのため、差分画像を用いる場合には、図10に示すLED抽出処理により、必ずLED画像が見つかるわけではない。位置推定部104は、図10に示すLED抽出処理によりLED画像が見つからなかった場合は、コントローラ20が前フレームの位置から動いていないものと推定し、前フレームにおけるコントローラ20の位置情報および姿勢情報を取得する。このとき位置推定部104は、2値化画像を用いてLED画像を抽出してもよい。
【0062】
図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でないと判断される。
【0063】
図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)。
【0064】
図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)。
【0065】
以上により、LED画像抽出部142は、論理積画像から第1LED40a〜第4LED40dの画像を抽出することができる。抽出された第1LED40a〜第4LED40dの画像の位置情報は、位置推定部104に送られる。
【0066】
位置推定部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に送る。
【0067】
LED40の誤認識を回避するために、位置推定部104は、前回取得したLED画像の位置と、今回取得したLED画像の位置の変化量が所定値を超える場合、今回取得したLED画像の位置をエラーとして処理する。すなわち、1フレームの間に、位置や姿勢が所定値以上変化する場合は、外乱的な要素により他のオブジェクトをLED40として誤認識した可能性があるため、抽出したLED40の位置情報を破棄する。
【0068】
しかしながら、そのような場合であっても、実際に大きな変化量でコントローラ20が移動することもあり得るため、位置推定部104は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得したLED画像の位置を正常なものとして処理してもよい。
【0069】
位置推定部104は、たとえば現フレーム画像や、論理積画像をもとに、LED40の移動方向や速度を推定することも可能である。たとえば撮像装置2のシャッタースピードを落とすと、LED40の画像が楕円や直方体として撮像されることになる。そこで、LED画像の形状から、移動方向のみならず、移動速度も推定することが可能である。たとえば移動方向および速度が推定できれば、撮像装置2において突然見えなくなった場合でも、コントローラ20の位置や姿勢を予測できる。全てのLED40の形状が同じ方向に偏っているような場合に、コントローラ20の移動方向と速度を推定してもよい。
【0070】
アプリケーション処理部110は、推定されたコントローラ20の位置や姿勢を、ゲーム入力としてゲームアプリケーションの処理に反映する。この反映の手法は様々考えられるが、最も直観的には、推定したコントローラ20の位置に対応したゲーム画像中の位置に、仮想オブジェクトを追従させて表示する。ユーザが撮像装置2に対してコントローラ20を動かすと、その動きに追従してゲーム画像内の仮想オブジェクトを動かすことができる。
【0071】
なお、理想的な状態であればフレーム画像ごとにLED40の位置や姿勢を求めてゲーム画像に反映していけばよいが、一方で、コントローラ20の向きや周辺光の環境などにより、フレーム画像においてLED40の位置や姿勢を求められない状況も発生しうる。そのような状況が続いた後に、突然、LED40の位置や姿勢が求められると、停止していた仮想オブジェクトが新たな位置にいきなり移動することになり、ユーザに違和感を与える。そのため、論理積画像からLED40の位置や姿勢を検出できたとしても、ゲーム画像としては、仮想オブジェクトを取得した位置まで移動させるのではなく、仮に情報落ちがあった場合であっても、スムーズな動きを実現できるように追従処理を行わせることとする。
【0072】
図14(a)、図14(b)は、コントローラに対応する仮想オブジェクトがゲーム画面内で円滑な追従動作を実現するためのアルゴリズムを説明するための図である。説明の便宜上、仮想オブジェクトの位置変化について説明するが、姿勢変化についても同様のアルゴリズムを適用することができる。
【0073】
位置推定部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に分割する点であってもよい。
【0074】
図12(b)は、位置パラメータとしてPi+1が取得できなかった場合の例である。このような場合は、本アルゴリズムの効果を発揮できる。この場合は、最新の位置パラメータがPi+1の代わりに利用される。ここで最新の位置パラメータはPiであり、
Qi+1=(Qi+Pi)/2
として求められる。
本アルゴリズムによりゲーム画像における位置パラメータQを取得すると、空間内のコントローラ20が大きく変位したり、また論理積画像から抽出できない場合であっても、仮想オブジェクトは常に少しずつ移動できる。そのため、ゲーム画像中で仮想オブジェクトが急に動かなくなったり、また急に動いたりする状況の発生を回避でき、コントローラ20に対して円滑な追従処理を実現できる。
【0075】
以上、本発明を実施例をもとに説明した。この実施例は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0076】
本実施例では、コントローラ20を撮像装置2で撮像して、フレーム画像からコントローラ20の位置や姿勢を推定し、その位置情報や姿勢情報をゲームアプリケーションの処理に反映させることとした。コントローラ20のLED40は、たとえばゲームアプリケーションの進行状況に応じて点灯パターンを変更してもよい。
【0077】
ユーザがゲームアプリケーションに参加した直後に、ゲーム装置10は、コントローラ20に対して所定の低周波で4つのLED40を点灯させる制御信号を送信してもよい。点滅指示部106は、コントローラ20に対して所定の低周波での点滅パターンを指示する制御信号を生成する。この低周波点滅制御信号は、無線通信モジュール108からコントローラ20に送信される。なお、複数のコントローラ20が存在する場合には、コントローラ20ごとに点滅周波数が設定される。
【0078】
コントローラ20は、指定された低周波でLED40を点灯し、撮像装置2は、30枚/秒の撮像周期でフレーム画像を撮像する。ゲーム装置10は、複数のフレーム画像から、所定の周期で点灯をオンオフしているLED画像を抽出する。ゲームシステム1内に複数のコントローラ20が存在する場合は、コントローラ20ごとに点灯の周期を設定する。これにより、コントローラ20の位置を確認できるとともに、それぞれのコントローラ20を区別して認識することもできる。この処理は、理想的にはゲームアプリケーションに参加後、1回行われればよいが、実空間内ではコントローラ20が撮像装置2から突然見えなくなることもある。そのため、数秒ごとなどの所定の周期で、各コントローラ20は、コントローラごとに設定された低周波でLED40を点滅させてもよい。
【0079】
たとえば4つのLED40が低周波で点灯と消灯を行う場合には、LED40を撮像できるフレームと、撮像できないフレームとが所定の周期で切り替わることになる。撮像周期(30フレーム/秒)に対して、LED40を45Hzで点灯制御すると、連続した2枚のフレームで撮像され、次は撮像されない、という状況が繰り返される。フレーム画像に撮像される場合と撮像されない場合とがあるため、LED40が静止した状態であっても、位置情報を取得できる。
【0080】
ここで低周波点灯とは、撮像周期に対して、LED発光が撮像されるフレームと撮像されないフレームとが存在しうるような周波数での点灯を意味する。一方、高周波点灯とは、撮像装置2の撮像周期(30フレーム/秒)に対して常にフレーム画像に撮像されるような周波数での点灯を意味する。たとえば、1kHzでLED40を点灯した場合であっても、たとえば撮像装置2の撮像周期が非常に高ければ、LED発光が撮像されるフレームと撮像されないフレームとが出現するため、LED40が静止した状態であっても、位置情報を取得できる。
【0081】
高周波点灯するLED40の位置や姿勢は、ゲームアプリケーションの入力として利用される。そのため、位置推定部104で推定されたコントローラ20の位置情報は、アプリケーション処理部110に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部110には、ユーザがコントローラ20の方向キー21などを操作した入力も無線通信モジュール108を介して送信される。アプリケーション処理部110は、コントローラ20の位置・姿勢情報と、コントローラ20における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。
【0082】
また、変形例として、4つのLED40のうちの1つを他のLED40とは異なる点滅パターンで点灯させることで、特定のLED40を認識することも可能となる。たとえば3つのLEDは高周波点灯を行い、1つのLEDに低周波点灯を行わせることで、たとえばフレーム画像中の第1LED40aがどれであるのかを確認することも可能となる。
【0083】
実空間におけるコントローラ20の位置や姿勢を検出してゲームアプリケーションの処理に反映することで、新たなゲームアプリケーションを実現できる。テニスゲームを例にとると、フレーム画像におけるコントローラ20の高さをテニスボールの打点高さとし、コントローラ20の向きをボールの打球方向、コントローラ20を動かす速度を、ボールを打ち込む強さとして、コントローラ20を動かすことでゲームを進行させることができる。これらの動きは、実際のラケットを振る動きに近似しているため、テニスを実際にプレイするのに近い感覚をユーザに与えることができる。このとき、コントローラ20のボタンやキーをゲーム入力としてそのまま利用できるようにすることで、従来のゲーム操作入力を維持しながら、感覚的に斬新なゲーム入力を行わせることができる。このように、コントローラ20にインジケータとして設けたLEDを有効に活用することで、ゲームアプリケーションの幅を一層広げることができる。
【0084】
たとえば、ボールを打ち込む強さをコントローラ20のボタン操作により定めてもよい。従来型のボタン操作と、斬新なゲーム入力とを組み合わせることで、新しい遊技性を実現できる。たとえば、相手のコートにボールを落とす位置をコントローラ20の向きで指定しながら、ボタン入力を行うことでボールを上げ、さらにコントローラ20を動かすことで、強いサーブを打てるようなテニスゲームを作ることも可能である。
【0085】
ゲームアプリケーションとしては、たとえばオートバイのドライブゲームで、コントローラ20の姿勢を操作することで、オートバイをコントロールするゲーム入力として利用してもよい。このとき、スピードはコントローラ20を動かす速度で決定してもよく、またボタン入力で決定してもよい。このように、従来型のボタン入力と、コントローラ20の位置や姿勢による静的な入力と、またコントローラ20の移動速度などの状態変化をもとにした動的な入力とを組み合わせて利用することで、ゲームアプリケーションの操作性を向上できる。
【0086】
たとえば、コントローラ20が画像表示装置3の画面からフレームアウトしそうな場合、アプリケーション処理部110は、コントローラ20の位置情報をもとに、ユーザに対してフレームアウトしそうな旨を通知する処理を行ってもよい。たとえば、コントローラ20がフレームアウトしそうな場合に、コントローラ20に対して振動子を振動させるための振動制御信号を生成して、無線通信モジュール108より送信させてもよい。また、コントローラ20の動きに追従する仮想オブジェクトをゲーム画像として表示させている場合には、ユーザに目立つように仮想オブジェクトを動かすことで、フレームアウトしそうなことをユーザに伝えてもよい。フレームアウトしそうであるか否かは、たとえばフレーム画像の位置で決定してもよく、フレーム画像の縁部に近い位置にコントローラ20の位置が推定される場合に、この通知処理を行ってもよい。
【0087】
実施例において開示された発明の特徴は、次の項目によって規定されてもよい。
(項目1)
入力されるフレーム画像から発光体画像の位置を取得する画像処理装置であって、
前フレーム画像と現フレーム画像の差分画像を生成する差分画像生成部と、
現フレーム画像を所定の閾値を用いて2値化処理して2値化画像を生成する2値化画像生成部と、
前記差分画像と前記2値化画像とを論理演算した論理演算画像を生成する論理演算部と、
前記論理演算画像から発光体画像を抽出する抽出部と、
発光体画像のフレーム画像における位置を取得する位置取得部と、
を備えることを特徴とする画像処理装置。
(項目2)
前記論理演算部は、画素ごとに、前記差分画像の画素値と前記2値化画像の画素値との論理積演算を行うことで、論理演算画像を生成することを特徴とする項目1に記載の画像処理装置。
(項目3)
前記抽出部は、複数の発光体により形成される2次元パターンを予め認識しており、当該2次元パターンを利用して、発光体画像の抽出処理を行うことを特徴とする項目1または2に記載の画像処理装置。
(項目4)
前記位置取得部は、前回取得した発光体画像の位置と今回取得した発光体画像の位置の変化量が所定値を超える場合、今回取得した発光体画像の位置を、エラーとして処理することを特徴とする項目1から3のいずれかに記載の画像処理装置。
(項目5)
前記位置取得部は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得した発光体画像の位置を正常なものとして処理することを特徴とする項目4に記載の画像処理装置。
【図面の簡単な説明】
【0088】
【図1】本発明の実施例にかかるゲームシステムの使用環境を示す図である。
【図2】コントローラの外観構成を示す図である。
【図3】コントローラの背面側の外観構成を示す図である。
【図4】コントローラの内部構成を示す図である。
【図5】ゲーム装置の構成を示す図である。
【図6】画像処理部の構成を示す図である。
【図7】(a)は現フレーム画像を示す図であり、(b)は現フレーム画像と前フレーム画像の差分画像を示す図である。
【図8】(a)は現フレーム画像の2値化画像を示す図であり、(b)は論理積画像を示す図である。
【図9】LED画像候補の検出処理の処理手順を示すフローチャートである。
【図10】LED抽出処理の処理手順を示すフローチャートである。
【図11】図10のS122に示す第2LED検出処理の処理手順を示すフローチャートである。
【図12】図10のS124に示す第3LED検出処理の処理手順を示すフローチャートである。
【図13】図10のS126に示す第4LED検出処理の処理手順を示すフローチャートである。
【図14】コントローラに対応する仮想オブジェクトがゲーム画面内で円滑な追従動作を実現するためのアルゴリズムを説明するための図である。
【符号の説明】
【0089】
1・・・ゲームシステム、2・・・撮像装置、3・・・画像表示装置、4・・・音声出力装置、10・・・ゲーム装置、20・・・コントローラ、29・・・筐体背面、30・・・筐体上面、31・・・LED付きボタン、40・・・LED、40a・・・第1LED、40b・・・第2LED、40c・・・第3LED、40d・・・第4LED、42・・・LED配設領域、50・・・メイン制御部、52・・・入力受付部、54・・・PWM制御部、54a・・・第1PWM制御部、54b・・・第2PWM制御部、54c・・・第3PWM制御部、54d・・・第4PWM制御部、56・・・駆動部、58・・・無線通信モジュール、60・・・処理部、100・・・入力部、102・・・画像処理部、104・・・位置推定部、106・・・点滅指示部、108・・・無線通信モジュール、110・・・アプリケーション処理部、112・・・出力部、130・・・フレーム画像取得部、132・・・現フレームバッファ、134・・・前フレームバッファ、136・・・差分画像生成部、138・・・2値化画像生成部、140・・・論理演算部、142・・・LED画像抽出部。
【特許請求の範囲】
【請求項1】
ユーザが操作入力を行うための操作入力装置と、前記操作入力装置における操作入力をもとにアプリケーションを処理してアプリケーションの処理結果を示す画像信号を生成する処理装置と、前記操作入力装置を撮像する撮像装置と、前記処理装置において生成された画像信号を出力する画像表示装置とを備えたエンタテインメントシステムであって、
前記操作入力装置は、ユーザがアプリケーションを進行させる操作入力を行うための複数の入力部と、実行されるアプリケーションにおいて当該操作入力装置に設定される番号を表現するための発光素子を複数有し、
前記処理装置は、前記操作入力装置における操作入力を受け付けて、アプリケーションの処理に反映するとともに、前記撮像装置から撮像画像を取得して、撮像画像における前記発光素子の位置から前記操作入力装置の撮像画像中の位置を取得して、取得した位置情報をアプリケーションの処理に反映し、操作入力と、取得した位置情報とに基づいたアプリケーションの処理結果を示す画像信号を生成する、ことを特徴とするエンタテインメントシステム。
【請求項2】
前記操作入力装置は、複数の発光素子のうち当該操作入力装置に設定される番号に対応する発光素子のみを点灯させることで、発光素子を、当該番号を表現するインジケータとして機能させることを特徴とする請求項1に記載のエンタテインメントシステム。
【請求項3】
前記処理装置は、前記発光素子の点灯を制御する制御信号を前記操作入力装置に送り、
前記操作入力装置は、前記制御信号にしたがって前記発光素子を点灯することを特徴とする請求項1に記載のエンタテインメントシステム。
【請求項4】
前記処理装置は、前記操作入力装置の位置情報をアプリケーションの処理に反映させる際に、前記発光素子を低周波で点灯させる第1制御信号と、高周波で点灯させる第2制御信号のいずれかを前記操作入力装置に送ることを特徴とする請求項3に記載のエンタテインメントシステム。
【請求項5】
前記撮像装置は、前記画像表示装置の表示画面をユーザが視認可能な位置を撮像範囲に含むように、前記画像表示装置の近傍に配置されることを特徴とする請求項1から4のいずれかに記載のエンタテインメントシステム。
【請求項6】
ユーザによる操作入力をゲーム装置に伝送するゲームコントローラであって、
ユーザにより把持される把持部と、
ユーザにより前記把持部を把持された状態でユーザに操作入力を行わせるために筐体上面に設けられた複数の入力部と、
前記入力部を介して入力された操作入力をゲーム装置に伝送する伝送部と、
筐体背面に設けられた複数の発光素子と、
を備えたゲームコントローラ。
【請求項7】
前記複数の発光素子は、筐体背面において所定の配設領域に配置され、
当該配設領域は、その隣接する筐体色よりも明度の低い色をもつことを特徴とする請求項6に記載のゲームコントローラ。
【請求項8】
前記複数の発光素子は、筐体背面において2次元的に配設されていることを特徴とする請求項6または7に記載のゲームコントローラ。
【請求項9】
筐体上面には、発光素子付き入力部が設けられていることを特徴とする請求項6から8のいずれかに記載のゲームコントローラ。
【請求項10】
複数の発光素子のそれぞれの点灯を制御する複数のPWM制御部が筐体内部に設けられることを特徴とする請求項6から9のいずれかに記載のゲームコントローラ。
【請求項11】
前記PWM制御部は、ゲーム装置からの制御信号をもとに、発光素子の点灯を制御することを特徴とする請求項10に記載のゲームコントローラ。
【請求項1】
ユーザが操作入力を行うための操作入力装置と、前記操作入力装置における操作入力をもとにアプリケーションを処理してアプリケーションの処理結果を示す画像信号を生成する処理装置と、前記操作入力装置を撮像する撮像装置と、前記処理装置において生成された画像信号を出力する画像表示装置とを備えたエンタテインメントシステムであって、
前記操作入力装置は、ユーザがアプリケーションを進行させる操作入力を行うための複数の入力部と、実行されるアプリケーションにおいて当該操作入力装置に設定される番号を表現するための発光素子を複数有し、
前記処理装置は、前記操作入力装置における操作入力を受け付けて、アプリケーションの処理に反映するとともに、前記撮像装置から撮像画像を取得して、撮像画像における前記発光素子の位置から前記操作入力装置の撮像画像中の位置を取得して、取得した位置情報をアプリケーションの処理に反映し、操作入力と、取得した位置情報とに基づいたアプリケーションの処理結果を示す画像信号を生成する、ことを特徴とするエンタテインメントシステム。
【請求項2】
前記操作入力装置は、複数の発光素子のうち当該操作入力装置に設定される番号に対応する発光素子のみを点灯させることで、発光素子を、当該番号を表現するインジケータとして機能させることを特徴とする請求項1に記載のエンタテインメントシステム。
【請求項3】
前記処理装置は、前記発光素子の点灯を制御する制御信号を前記操作入力装置に送り、
前記操作入力装置は、前記制御信号にしたがって前記発光素子を点灯することを特徴とする請求項1に記載のエンタテインメントシステム。
【請求項4】
前記処理装置は、前記操作入力装置の位置情報をアプリケーションの処理に反映させる際に、前記発光素子を低周波で点灯させる第1制御信号と、高周波で点灯させる第2制御信号のいずれかを前記操作入力装置に送ることを特徴とする請求項3に記載のエンタテインメントシステム。
【請求項5】
前記撮像装置は、前記画像表示装置の表示画面をユーザが視認可能な位置を撮像範囲に含むように、前記画像表示装置の近傍に配置されることを特徴とする請求項1から4のいずれかに記載のエンタテインメントシステム。
【請求項6】
ユーザによる操作入力をゲーム装置に伝送するゲームコントローラであって、
ユーザにより把持される把持部と、
ユーザにより前記把持部を把持された状態でユーザに操作入力を行わせるために筐体上面に設けられた複数の入力部と、
前記入力部を介して入力された操作入力をゲーム装置に伝送する伝送部と、
筐体背面に設けられた複数の発光素子と、
を備えたゲームコントローラ。
【請求項7】
前記複数の発光素子は、筐体背面において所定の配設領域に配置され、
当該配設領域は、その隣接する筐体色よりも明度の低い色をもつことを特徴とする請求項6に記載のゲームコントローラ。
【請求項8】
前記複数の発光素子は、筐体背面において2次元的に配設されていることを特徴とする請求項6または7に記載のゲームコントローラ。
【請求項9】
筐体上面には、発光素子付き入力部が設けられていることを特徴とする請求項6から8のいずれかに記載のゲームコントローラ。
【請求項10】
複数の発光素子のそれぞれの点灯を制御する複数のPWM制御部が筐体内部に設けられることを特徴とする請求項6から9のいずれかに記載のゲームコントローラ。
【請求項11】
前記PWM制御部は、ゲーム装置からの制御信号をもとに、発光素子の点灯を制御することを特徴とする請求項10に記載のゲームコントローラ。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2007−244534(P2007−244534A)
【公開日】平成19年9月27日(2007.9.27)
【国際特許分類】
【出願番号】特願2006−70059(P2006−70059)
【出願日】平成18年3月14日(2006.3.14)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】
【公開日】平成19年9月27日(2007.9.27)
【国際特許分類】
【出願日】平成18年3月14日(2006.3.14)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】
[ Back to top ]