(57)【特許請求の範囲】
【請求項１】
ゲームコントローラの実空間における位置情報または姿勢情報を取得する取得部と、
前記位置情報または前記姿勢情報を利用して、仮想空間におけるオブジェクトの動作を制御するオブジェクト制御部と、を備えたゲーム装置であって、
前記オブジェクト制御部は、前記ゲームコントローラの動きに追従するオブジェクトを画面中に表示させており、オブジェクトが画面からフレームアウトしそうな場合に、ユーザに対して報知処理を実行することを特徴とするゲーム装置。
【請求項２】
前記オブジェクト制御部は、前記ゲームコントローラの振動子を振動させるための振動制御信号を生成して、前記ゲームコントローラに送信することを特徴とする請求項１に記載のゲーム装置。
【請求項３】
前記オブジェクト制御部は、オブジェクトが画面からフレームアウトしそうな場合に、オブジェクトに特殊な動きをさせることで、ユーザに報知を行うことを特徴とする請求項１または２に記載のゲーム装置。
【請求項４】
前記オブジェクト制御部は、前記位置情報または前記姿勢情報を利用して、仮想空間におけるオブジェクトの姿勢を決定することを特徴とする請求項１から３のいずれかに記載のゲーム装置。
【請求項５】
前記取得部は、実空間における前記ゲームコントローラの３次元の位置情報または姿勢情報を取得し、
前記オブジェクト制御部は、３次元の位置情報または姿勢情報を利用して、仮想３次元空間における前記オブジェクトの動作を制御することを特徴とする請求項１から４のいずれかに記載のゲーム装置。
【請求項６】
取得手段により、ゲームコントローラの実空間における位置情報または姿勢情報を取得するステップと、
制御手段により、前記位置情報または前記姿勢情報を利用して、仮想空間におけるオブジェクトの動作を制御するステップと、を備え、
オブジェクト動作制御ステップは、前記ゲームコントローラの動きに追従するオブジェクトを画面中に表示させており、オブジェクトが画面からフレームアウトしそうな場合に、ユーザに対して報知処理を実行する、ことを特徴とする仮想オブジェクト制御方法。
【請求項７】
コンピュータに、
ゲームコントローラの実空間における位置情報または姿勢情報を取得する機能と、
前記位置情報または前記姿勢情報を利用して、仮想空間におけるオブジェクトの動作を制御する機能と、を実現させるためのプログラムであって、
オブジェクト動作制御機能は、前記ゲームコントローラの動きに追従するオブジェクトを画面中に表示させており、オブジェクトが画面からフレームアウトしそうな場合に、ユーザに対して報知処理を実行する機能を含む、ことを特徴とするプログラム。
【請求項８】
請求項７に記載のプログラムを記録したコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ゲームアプリケーションを実行するゲーム装置に関する。
【背景技術】
【０００２】
近年、２次元コードをカメラで撮像してコードデータを認識し、そのコードデータに対応付けられた所定の処理を実行させる技術が提案されている。１次元バーコードと比較すると２次元コードの方がコード化できる情報量が多く、現在では様々な種類の２次元コードが実用化されている。このような状況のもと、従来、２次元コードの画像認識に関する技術を提案するものがある（例えば、特許文献１参照）。
【０００３】
実空間上のオブジェクトの３次元的な位置や姿勢などを取得するために、磁気方式、超音波方式または光学方式を利用した様々な計測システムが存在する。磁気方式による計測システムは、環境に存在する電子機器や地磁気などの影響を受けやすく、また超音波方式による計測システムは、環境の気圧や温度などの影響を受けやすい。一方で、光学方式による計測システムは、カメラで撮像した撮影画像を利用するため、周辺の磁界や気圧、温度などの影響を受けることがない。光学方式を利用した計測システムとして、オブジェクトに設けた複数のＬＥＤをそれぞれ一意に定められる点滅パターンで点滅させて、２次元イメージセンサによる撮影画像を利用して３次元位置や姿勢などを認識する技術が提案されている（例えば、特許文献２参照）。特許文献２では、マーカとして機能するＬＥＤが、ＬＥＤごとに一意に識別可能な識別情報を有している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−７２６６７号公報
【特許文献２】特開２００３−２５４７１６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年の技術進歩にともない、ゲームシステムのハードウェアスペックが飛躍的に向上している。最近では、カメラとゲーム装置を接続してユーザがカメラの前で体を動かすと、ゲーム装置が光学的にユーザの動きを認識してゲームへの入力として利用するゲームシステムも実現されている。このようなゲーム環境のもと、ユーザのゲームアプリケーションに対する要求も多様化する傾向にある。
【０００６】
本発明者は、ユーザの多様化した要求を満足させるべく、ゲーム装置と接続したカメラを利用して、ゲームコントローラを撮影した撮像画像の情報をゲーム装置の入力情報として抽出することで、従来にないゲームアプリケーションを実現できる可能性を見いだした。また、ゲームコントローラに加速度センサなどを搭載して、その計測情報をゲーム装置の入力情報として利用することによっても、従来にないゲームアプリケーションを実現できる可能性を見いだした。また、ゲームシステムだけでなく、他の環境、たとえば教育現場やビジネスの現場などのエンタテインメントシステムにおいても有効なアプリケーションを実現できると考えられる。
【０００７】
そこで本発明は、新たな入力情報を利用した新規なアプリケーションを実行するゲーム装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明のある態様のゲーム装置は、ゲームコントローラの実空間における位置情報または姿勢情報を取得する取得部と、位置情報または姿勢情報を利用して、仮想空間におけるオブジェクトの動作を制御するオブジェクト制御部と、を備えたゲーム装置であって、オブジェクト制御部は、ゲームコントローラの動きに追従するオブジェクトを画面中に表示させており、オブジェクトが画面からフレームアウトしそうな場合に、ユーザに対して報知処理を実行する。
【発明の効果】
【０００９】
本発明によると、新たな入力情報を利用した新規なアプリケーションを実行するゲーム装置を提供することが可能となる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施例にかかるゲームシステムの使用環境を示す図である。
【図２】コントローラの外観構成を示す図である。
【図３】コントローラの背面側の外観構成を示す図である。
【図４】コントローラの内部構成を示す図である。
【図５】ゲーム装置の構成を示す図である。
【図６】画像処理部の構成を示す図である。
【図７】（ａ）は現フレーム画像を示す図であり、（ｂ）は現フレーム画像と前フレーム画像の差分画像を示す図である。
【図８】（ａ）は現フレーム画像の２値化画像を示す図であり、（ｂ）は論理積画像を示す図である。
【図９】ＬＥＤ画像候補の検出処理の処理手順を示すフローチャートである。
【図１０】ＬＥＤ抽出処理の処理手順を示すフローチャートである。
【図１１】図１０のＳ１２２に示す第２ＬＥＤ検出処理の処理手順を示すフローチャートである。
【図１２】図１０のＳ１２４に示す第３ＬＥＤ検出処理の処理手順を示すフローチャートである。
【図１３】図１０のＳ１２６に示す第４ＬＥＤ検出処理の処理手順を示すフローチャートである。
【図１４】コントローラに対応する仮想オブジェクトがゲーム画面内で円滑な追従動作を実現するためのアルゴリズムを説明するための図である。
【図１５】２次元コードを有するコントローラを示す図である。
【図１６】２次元コードを構成する２次元パターンの一例を示す図である。
【図１７】画像処理部の構成を示す図である。
【図１８】実施例にかかるコントローラの内部構成を示す図である。
【図１９】実施例にかかるゲーム装置の構成を示す図である。
【図２０】アプリケーション処理部の構成を示す図である。
【図２１】キャラクタの動作例を示す。
【発明を実施するための形態】
【００１１】
本発明の実施例は、ゲームコントローラの実空間における位置情報および／または姿勢情報を取得し、その情報をもとに実行可能なゲームアプリケーションを実行可能なゲーム装置を提供する。そのために、本明細書では、まずゲームコントローラの位置情報および／または姿勢情報を取得するための手法を示す。以下では、（１）ＬＥＤを利用した方法、（２）２次元コードを利用した方法、（３）加速度センサなどの計測値を利用した方法を示し、続いて、ゲームコントローラの位置情報および／または姿勢情報をもとに実行可能なゲームアプリケーションを示す。
【００１２】
（１）ＬＥＤを利用した位置情報および／または姿勢情報の取得方法
図１は、本発明の実施例にかかるゲームシステムの使用環境を示す。ゲームシステム１は、撮像装置２、画像表示装置３、音声出力装置４、ゲーム装置１０およびコントローラ２０を備える。撮像装置２、画像表示装置３、音声出力装置４およびコントローラ２０は、ゲーム装置１０に接続される。
【００１３】
コントローラ２０は、ユーザが操作入力を行うための操作入力装置であり、またゲーム装置１０は、コントローラ２０における操作入力をもとにゲームアプリケーションを処理して、ゲームアプリケーションの処理結果を示す画像信号を生成する処理装置である。なお、本実施例に示す技術は、ゲームアプリケーションに限らず、他の種類のアプリケーションを実行する処理装置を備えたエンタテインメントシステムにおいても実現できる。以下では、エンタテインメントシステムを代表して、ゲームアプリケーションを実行するゲームシステム１について説明する。
【００１４】
撮像装置２は、ＣＣＤ撮像素子またはＣＭＯＳ撮像素子などから構成されるビデオカメラであり、実空間を所定の周期で撮像して、周期ごとのフレーム画像を生成する。たとえば、撮像装置２の撮像速度は３０枚／秒として、画像表示装置３のフレームレートと一致させてもよい。撮像装置２は、ＵＳＢ（Universal Serial Bus）あるいはその他のインタフェースを介してゲーム装置１０と接続する。
【００１５】
画像表示装置３は画像信号を出力するディスプレイであって、ゲーム装置１０において生成された画像信号を受けて、ゲーム画面を表示する。音声出力装置４は音声を出力するスピーカであって、ゲーム装置１０において生成された音声信号を受けて、ゲーム音声を出力する。画像表示装置３および音声出力装置４は、ゲームシステム１における出力装置を構成する。
【００１６】
ゲーム装置１０と画像表示装置３は、有線により接続されてもよく、また無線により接続されてもよい。ゲーム装置１０と画像表示装置３とはＡＶケーブルによって接続されてもよい。またゲーム装置１０と画像表示装置３との間には、ネットワーク（ＬＡＮ）ケーブルやワイヤレスＬＡＮなどで構築したホームネットワークが構築されてもよい。
【００１７】
コントローラ２０は、ユーザによる操作入力をゲーム装置１０に伝送する機能をもち、本実施例ではゲーム装置１０との間で無線通信可能な無線コントローラとして構成される。コントローラ２０とゲーム装置１０は、Bluetooth（ブルートゥース）（登録商標）プロトコルを用いて無線接続を確立してもよい。ゲーム装置１０は、複数のコントローラ２０との無線接続を可能とし、すなわちゲームシステム１においては、ゲーム装置１０とコントローラ２０の１対Ｎ接続を実現できる。ゲーム装置１０は親機すなわちマスタとして機能し、コントローラ２０は子機すなわちスレーブとして機能する。なおコントローラ２０は、無線コントローラに限らず、ゲーム装置１０とケーブルを介して接続される有線コントローラであってもよい。
【００１８】
コントローラ２０は、図示しないバッテリにより駆動され、ゲームを進行させる操作入力を行うための複数のボタンやキーを有して構成される。ユーザがコントローラ２０のボタンやキーを操作すると、その操作入力が無線によりゲーム装置１０に送信される。ゲーム装置１０は、コントローラ２０からゲームアプリケーションに関する操作入力を受信し、操作入力に応じてゲーム進行を制御して、ゲーム画像信号およびゲーム音声信号を生成する。生成されたゲーム画像信号およびゲーム音声信号は、それぞれ画像表示装置３および音声出力装置４により出力される。またゲーム装置１０は、ゲームアプリケーションの進行状況に応じて、コントローラ２０を振動させる振動制御信号をコントローラ２０に送信する機能ももつ。コントローラ２０は振動子を有し、振動制御信号を受信すると振動子を振動させる。
【００１９】
本実施例のゲームシステム１において、コントローラ２０は、複数の発光素子を有して構成される。複数の発光素子はそれぞれ同色のＬＥＤであって、ゲームアプリケーションで設定されるコントローラ番号を表現するインジケータとしての役割をもつ。ゲームアプリケーションにおけるコントローラ番号は、たとえばゲーム開始時にゲームキャラクタを選択する際などにユーザに利用されるため、ユーザに何らかの手段でコントローラ番号を通知する必要がある。そのためコントローラ２０では、複数のＬＥＤのうち、たとえば１番目のＬＥＤが点灯していればコントローラ番号が１であり、また２番目のＬＥＤが点灯していればコントローラ番号が２であるとしてユーザにコントローラ番号を知らしめる。なお、複数のＬＥＤの組合わせによりコントローラ番号を表現することも可能である。
【００２０】
コントローラ２０が有線コントローラである場合には、コントローラ２０から延びるケーブルコネクタをゲーム装置１０のポートに差し込んだ位置でコントローラ番号を決定することも可能である。しかしながら、複数のポートを備えたマルチポート装置をゲーム装置１０に外付けして使用するような場合には、ユーザはすぐにコントローラ番号を知ることはできないため、複数のＬＥＤを用いてユーザにコントローラ番号を通知することが好ましい。
【００２１】
ゲームシステム１においては、コントローラ２０のＬＥＤを、コントローラ番号のインジケータとしてだけではなく、ゲームアプリケーションの進行に影響を与えるゲーム入力としても利用する。この場合、ＬＥＤの制御は、インジケータとして点灯するのではなく、ゲームアプリケーションへの入力としての点灯に切り替えられる。撮像装置２はコントローラ２０のＬＥＤを撮像し、フレーム画像を生成してゲーム装置１０に供給する。ゲーム装置１０は、フレーム画像を取得して、フレーム画像におけるＬＥＤ画像の位置などからコントローラ２０のフレーム画像中の位置や姿勢を推定して、実空間における位置情報および姿勢情報を取得し、取得した位置情報および／または姿勢情報をゲームアプリケーションの処理に反映する。すなわち、本実施例のゲーム装置１０は、コントローラ２０において入力された操作入力だけでなく、取得したコントローラ２０の位置情報や姿勢情報も用いてゲームアプリケーションを処理して、その処理結果を示す画像信号を生成する機能をもつ。
【００２２】
図２は、コントローラの外観構成を示す。コントローラ２０には、方向キー２１、アナログスティック２７と、４種の操作ボタン２６が設けられている。方向キー２１、アナログスティック２７、操作ボタン２６は、筐体上面３０に設けられた入力部である。４種のボタン２２〜２５には、それぞれを区別するために、異なる色で異なる図形が記されている。すなわち、○ボタン２２には赤色の丸、×ボタン２３には青色のバツ、□ボタン２４には紫色の四角形、△ボタン２５には緑色の三角形が記されている。コントローラ２０の筐体背面２９には、複数のＬＥＤが設けられている。
【００２３】
ユーザは左手で左側把持部２８ａを把持し、右手で右側把持部２８ｂを把持して、コントローラ２０を操作する。方向キー２１、アナログスティック２７、操作ボタン２６は、ユーザが左側把持部２８ａ、右側把持部２８ｂを把持した状態で操作可能なように、筐体上面３０上に設けられる。
【００２４】
筐体上面３０には、ＬＥＤ付きボタン３１も設けられる。ＬＥＤ付きボタン３１は、たとえば画像表示装置３にメニュー画面を表示させるためのボタンとして利用される。また、ＬＥＤの発光状態によりユーザへのメールの着信の知らせや、コントローラ２０のバッテリの充電状態などを示す機能ももつ。たとえば充電中は赤色、充電が終了すると緑色に点灯し、充電残存量が残り少ないときには赤色を点滅させるようにＬＥＤを点灯させる。
【００２５】
ユーザは画像表示装置３に表示されるゲーム画面を見ながらゲームを行うため、画像表示装置３は、矢印Ａで示すコントローラ２０の前方に存在している。そのため、通常は、画像表示装置３に対して、ＬＥＤを配置された筐体背面２９が向き合うことになる。本実施例において撮像装置２は、ゲームアプリケーションの実行中にＬＥＤを撮像する必要があるため、その撮像範囲が画像表示装置３と同じ方向を向くように配置されて、コントローラ２０の筐体背面２９と向き合うことが好ましい。一般にユーザは画像表示装置３の正面でゲームをプレイすることが多いため、撮像装置２は、その光軸の方向が画像表示装置３の正面方向と一致するように配置される。具体的に、撮像装置２は、画像表示装置３の近傍において、画像表示装置３の表示画面をユーザが視認可能な位置を撮像範囲に含むように配置されることが好ましい。これにより、撮像装置２は、ユーザの身体およびコントローラ２０を撮像できる。
【００２６】
図３は、コントローラの背面側の外観構成を示す。図３では、コントローラ２０の筐体上面３０における方向キー２１や操作ボタン２６などの図示を省略している。筐体背面２９にはＬＥＤ配設領域４２が設けられ、ＬＥＤ配設領域４２内に第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄが配置される。以下、第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄを総称する場合には、「ＬＥＤ４０」と表記する。ＬＥＤ配設領域４２は、筐体背面２９における中央領域に形成される。ＬＥＤ配設領域４２の中央部には、ＵＳＢコネクタ４６が設けられる。ＵＳＢコネクタ４６には、ゲーム装置１０から延びるＵＳＢケーブルが接続されて、コントローラ２０の充電処理を行うことができる。なおＵＳＢケーブルが接続されると、コントローラ２０を有線コントローラとして利用することも可能である。
【００２７】
筐体背面２９側には、操作ボタン４８ａ、４８ｂ、４８ｃ、４８ｄがＬＥＤ配設領域４２を挟んで左右に設けられる。操作ボタン４８ａ、４８ｂ、４８ｃ、４８ｄは、ユーザが左側把持部２８ａ、右側把持部２８ｂを把持した状態でも人差指の先端で操作可能な位置に設けられる。これにより、操作ボタン４８ａ、４８ｂ、４８ｃ、４８ｄの操作時に、ＬＥＤ４０は人差指によって隠れない。
【００２８】
撮像装置２は、各画素におけるＲＧＢの輝度値を取得する。発光したＬＥＤ４０を正確に検出するためには、ＬＥＤ４０とＬＥＤ４０周辺の領域とのコントラストが大きいことが好ましい。そのためＬＥＤ配設領域４２は、その隣接する筐体色よりも明度の低い色をもち、たとえば黒色の配色を施される。ＬＥＤ配設領域４２は、黒色の半透明板として構成され、ＬＥＤ４０は、その背後すなわち筐体内部側に設けられる。これにより、ＬＥＤ４０は点灯していなければ撮像装置２からは見えず、点灯したときのみ撮像される。黒色半透明板は、光を拡散してＬＥＤ４０の狭指向性を広指向性に変える役割ももつ。ＬＥＤ４０をＬＥＤ配設領域４２に設けることで、発光したＬＥＤ４０とのコントラストを高めることができ、後の画像処理において、フレーム画像からＬＥＤ画像を効果的に抽出することが可能となる。
【００２９】
第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄは、所定の２次元パターンで配設される。たとえば第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄは、矩形の頂点を構成する位置に配設される。ゲーム装置１０は、この位置関係を予め把握しており、ＬＥＤ画像の抽出処理に利用する。なお各ＬＥＤ４０の近傍には、数字が刻印または印刷されており、ユーザは点灯したＬＥＤ４０の近傍の数字をみて、コントローラ番号を知ることができる。
【００３０】
図４は、コントローラの内部構成を示す。コントローラ２０は、無線通信モジュール５８、処理部６０、ＬＥＤ４０および振動子４４を備える。無線通信モジュール５８は、ゲーム装置１０の無線通信モジュールとの間でデータを送受信する機能をもつ。処理部６０は、コントローラ２０における所期の処理を実行する。
【００３１】
処理部６０は、メイン制御部５０、入力受付部５２、ＰＷＭ制御部５４および駆動部５６を有する。メイン制御部５０は、無線通信モジュール５８との間で必要なデータの送受を行う。
【００３２】
入力受付部５２は、方向キー２１、操作ボタン２６、アナログスティック２７などの入力部からの入力情報を受け付け、メイン制御部５０に送る。メイン制御部５０は、受け取った入力情報を無線通信モジュール５８に供給し、無線通信モジュール５８は、所定のタイミングでゲーム装置１０に送信する。また、無線通信モジュール５８はゲーム装置１０から振動制御信号を受け取ると、メイン制御部５０に供給し、メイン制御部５０は、振動制御信号をもとに振動子４４を振動させる駆動部５６を動作させる。駆動部５６は、振動子４４を駆動するためのスイッチとして構成されてもよく、また供給電圧のデューティ比を可変とするＰＷＭ制御部として構成されてもよい。
【００３３】
本実施例において、ＰＷＭ制御部５４は、第１ＰＷＭ制御部５４ａ、第２ＰＷＭ制御部５４ｂ、第３ＰＷＭ制御部５４ｃおよび第４ＰＷＭ制御部５４ｄから構成される。第１ＰＷＭ制御部５４ａ、第２ＰＷＭ制御部５４ｂ、第３ＰＷＭ制御部５４ｃおよび第４ＰＷＭ制御部５４ｄは、それぞれ第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄの点灯を制御するために設けられる。ＰＷＭ制御部５４は、ＬＥＤ４０に印加する電圧をＰＷＭ（パルス幅変調）により制御する。たとえば、ＰＷＭ制御部５４は、数ｋＨｚの高周波で印加電圧をＰＷＭ制御することで、ＬＥＤ４０の輝度を調整することができる。またＰＷＭ制御部５４は、数Ｈｚ〜１００Ｈｚ程度の低周波で印加電圧をＰＷＭ制御することで、撮像装置２においてＬＥＤ４０の点灯のオンオフを認識させることができる。
【００３４】
本実施例のゲームシステム１において、まず、ゲームシステム１に参加を希望するユーザのコントローラ２０が、ゲーム装置１０との間で通信を確立する。このとき、コントローラ２０の識別情報、たとえばブルートゥースアドレスがゲーム装置１０に受け渡され、以後の通信は、このブルートゥースアドレスをもとに行われる。なお、通信プロトコルとしてブルートゥースを利用しない場合には、ＭＡＣアドレスなどの機器アドレスが利用されてもよい。接続確立後、ユーザはゲームアプリケーションに参加できる。
【００３５】
このときコントローラ２０には、ゲーム装置１０からコントローラ番号を指示する情報が送信される。メイン制御部５０は、この番号指示情報をもとに、設定されたコントローラ番号に対応するＬＥＤ４０のみを点灯させる。これによりユーザは、自身のコントローラ２０のコントローラ番号を知ることができる。なお、番号指示情報の代わりに、コントローラ番号に対応するＬＥＤ４０の点灯を指示する制御信号がゲーム装置１０から送信されてもよい。このようにメイン制御部５０は、任意のＬＥＤ４０を点灯させることができる。
【００３６】
本実施例のゲームシステム１において、ゲーム装置１０は、全てのＬＥＤ４０ａ〜４０ｄを点灯した状態で撮像されたフレーム画像をもとに、実空間におけるコントローラ２０の位置および姿勢を推定する。推定した位置および姿勢は、実行するゲームアプリケーションの入力として利用される。またゲーム装置１０は、コントローラ２０の方向キー２１や操作ボタン２６などの操作入力も受け付ける。これらの入力情報をもとに、ゲーム装置１０は、ゲームアプリケーションのゲームパラメータを生成し、ゲームを進行制御して、ゲーム画像およびゲーム音声のＡＶデータを生成する。ＡＶデータは、画像表示装置３および音声出力装置４において出力される。ユーザは、ゲーム画面を見ながら、コントローラ２０を実空間上で動かし、さらには方向キー２１や操作ボタン２６を操作入力してゲームを行う。以下に、ゲーム装置１０における処理を説明する。
【００３７】
図５は、ゲーム装置の構成を示す。ゲーム装置１０は、入力部１００、画像処理部１０２、位置推定部１０４、点滅指示部１０６、無線通信モジュール１０８、アプリケーション処理部１１０および出力部１１２を備える。本実施例におけるゲーム装置１０の処理機能は、ＣＰＵ、メモリ、メモリにロードされたプログラムなどによって実現され、ここではそれらの連携によって実現される構成を描いている。プログラムは、ゲーム装置１０に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。図示の例では、ゲーム装置１０のＣＰＵが、画像処理部１０２、位置推定部１０４、点滅指示部１０６、アプリケーション処理部１１０としての機能をもつ。なお、ハードウェアの構成上、ゲーム装置１０は複数のＣＰＵを有してもよい。このような場合、１つのＣＰＵがゲームアプリケーションを実行するアプリケーション処理部１１０として機能し、他のＣＰＵが、撮像装置２による撮影画像を処理する画像処理部１０２、位置推定部１０４、点滅指示部１０６として機能してもよい。
【００３８】
無線通信モジュール１０８は、コントローラ２０の無線通信モジュール５８との間で無線通信を確立する。同期確立フェーズにおいては、無線通信モジュール１０８が、周辺のコントローラ２０を含む端末機器に対して接続照会すなわち「問い合わせ」処理を行う。具体的には、無線通信モジュール１０８が、近くにいる端末機器に対してＩＱ（問い合わせ）パケットをブロードキャストする。ＩＱパケットを受信したコントローラ２０の無線通信モジュール５８は、BluetoothアドレスとBluetoothクロック情報を含むＦＨＳ（Frequency Hop Synchronization）パケットをゲーム装置１０に返信する。この時点における送受信では、周波数ホッピングパターンに関する同意がゲーム装置１０とコントローラ２０との間で確立していないので、問い合わせ専用に定義された固定ホッピングパターンが用いられる。
【００３９】
無線通信モジュール１０８は、コントローラ２０からＦＨＳパケットを受け取り、どのようなコントローラ２０が存在するかを把握した後、特定のコントローラ２０に対してＩＤパケットを送信する。これは無線通信モジュール１０８による「呼び出し」処理である。特定のコントローラ２０からＩＤパケットに対する応答が返ると、無線通信モジュール１０８はＦＨＳパケットをコントローラ２０に送信し、自分のアドレスとクロックをコントローラ２０に知らせる。これにより、ゲーム装置１０とコントローラ２０は、同一のホッピングパターンを共有できるようになる。
【００４０】
「呼び出し」を行うと、コントローラ２０とゲーム装置１０との間にピコネットが形成され、「接続」状態に入る。ピコネットとは、Bluetooth端末同士を近づけたときに、端末の間で一時的に形成されるネットワークを意味し、最大で８台のBluetooth端末が１つのピコネットに参加することができる。接続したコントローラ２０は、無線通信モジュール１０８からスレーブ識別子、つまり接続中のコントローラ２０に与えられる３ビットのアドレス（１〜７）を割り振られる。このスレーブ識別子は、AM_ADDR（アクティブメンバーアドレス）と呼ばれる。「接続」状態になると、通信リンク設定のための制御パケットが送受信され、これにより「データ転送」が可能となる。
【００４１】
なお、以上はゲーム装置１０からコントローラ２０を呼び出す例について説明したが、コントローラ２０からゲーム装置１０を呼び出してもよい。この場合、ゲーム装置１０がページスキャンを実行している間に、コントローラ２０が呼び出し処理を実行する。これによりコントローラ２０はゲーム装置１０を呼び出して、接続状態に入ることができる。その後、マスタとスレーブの役割をスイッチし、ゲーム装置１０がマスタとなり、コントローラ２０がスレーブとなる。このようなマスタとスレーブの関係を実現することで、コントローラ２０がゲームアプリケーションに参加可能となる。
【００４２】
接続状態になり、コントローラ２０がゲームアプリケーションに参加すると、アプリケーション処理部１１０は、コントローラ２０のコントローラ番号を割り当て、コントローラ番号を指示する番号指示情報を生成する。無線通信モジュール１０８は、番号指示情報をコントローラ２０に送信する。コントローラ２０は、番号指示情報を受信すると、対応するＬＥＤ４０を点灯させる。なお、無線通信モジュール１０８は、番号指示情報の代わりに、コントローラ番号に対応するＬＥＤ４０の点灯を指示する制御信号をコントローラ２０に送信してもよい。
【００４３】
ゲームアプリケーションが開始されると、点滅指示部１０６は、コントローラ２０に対して所定の周期で点滅するように点滅パターンを指示する制御信号を生成する。この点滅制御信号は、無線通信モジュール１０８からコントローラ２０に送信される。
【００４４】
入力部１００はＵＳＢインタフェースとして構成され、撮像装置２から所定の撮像速度（たとえば３０フレーム／秒）でフレーム画像を取得する。画像処理部１０２は、後述するＬＥＤ抽出アルゴリズムにしたがって、フレーム画像からＬＥＤ画像を抽出する。位置推定部１０４は、抽出されたＬＥＤ画像からＬＥＤ画像の位置情報を取得し、コントローラ２０の位置や姿勢を推定する。位置推定部１０４は、ＬＥＤ画像の位置情報を取得することから、位置取得部として機能してもよい。なおコントローラ２０の位置は、４つのＬＥＤ画像の重心位置に定められてよい。
【００４５】
点灯する４つのＬＥＤ４０の位置や姿勢から推定されるコントローラ２０の位置情報および／または姿勢情報は、ゲームアプリケーションの入力として利用される。そのため位置推定部１０４で推定されたコントローラ２０の位置情報および姿勢情報は、アプリケーション処理部１１０に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部１１０には、ユーザがコントローラ２０の方向キー２１などを操作した入力も無線通信モジュール１０８を介して送信される。アプリケーション処理部１１０は、コントローラ２０の位置・姿勢情報と、コントローラ２０における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。画像信号および音声信号は出力部１１２からそれぞれ画像表示装置３および音声出力装置４に送られ、出力される。
【００４６】
図６は、画像処理部の構成を示す。画像処理部１０２は、フレーム画像取得部１３０、現フレームバッファ１３２、前フレームバッファ１３４、差分画像生成部１３６、２値化画像生成部１３８、論理演算部１４０およびＬＥＤ画像抽出部１４２を備える。
【００４７】
フレーム画像取得部１３０は、入力部１００からフレーム画像データを取得し、現フレームバッファ１３２に一時記憶させる。前フレームバッファ１３４には、一つ前のフレーム画像データが記憶されている。差分画像生成部１３６は、現フレームバッファ１３２に記憶されている現フレームデータと、前フレームバッファ１３４に記憶されている前フレームデータとの差分画像を生成する。フレーム画像中の座標（ｘ，ｙ）における前フレームデータのＲ画素値をＰｒ、Ｇ画素値をＰｇ、Ｂ画素値をＰｂとし、現フレームデータのＲ画素値をＣｒ、Ｇ画素値をＣｇ、Ｂ画素値をＣｂとしたとき、差分画像関数Ｆ（ｘ，ｙ）は、以下の数式で表現される。
【００４８】
【数１】
0005551675.tif 000002
【００４９】
ここでＴｈは、所定の閾値である。Ｆ（ｘ，ｙ）が０より大きければ、座標（ｘ，ｙ）の画素値が“１”に符号化され、表示上、その画素は白色とされる。一方、Ｆ（ｘ，ｙ）が０以下であれば、画素値が“０”に符号化され、表示上、その画素は黒色とされる。このように差分画像生成部１３６で生成される差分画像は、２値化処理された画像となる。差分画像を生成することで、前フレーム画像と現フレーム画像との間で動きのないオブジェクトの影響を取り除くことができる。
【００５０】
２値化画像生成部１３８は、現フレームデータを所定の閾値を用いて２値化処理して、２値化された画像を生成する。２値化画像生成部１３８は、所定の閾値より大きい輝度を保持する画素の画素値を“１”に符号化し、所定の閾値以下の輝度を保持する画素の画素値を“０”に符号化する。現フレーム画像の２値化画像を生成することで、現フレーム画像において明るいオブジェクトのみを抽出することができる。
【００５１】
論理演算部１４０は、差分画像生成部１３６で生成された差分画像と、２値化画像生成部１３８で生成された２値化画像とを論理演算した論理演算画像を生成する。詳細には、論理演算部１４０は、画素ごとに、差分画像の画素値と２値化画像の画素値との論理積演算を行うことで、論理積画像を生成する。これは、差分画像と２値化画像の対応する画素同士の画素値を数学的に論理積演算することで生成される。
【００５２】
図７（ａ）は、現フレーム画像を示す。現フレーム画像では、ユーザがコントローラ２０を把持してゲームをプレイし、右側には照明が点灯している状態が撮像されている。このときコントローラ２０の全ＬＥＤ４０が点灯している。なお、全てのＬＥＤ４０は、同一の点灯パターンにより、同一輝度で発光している。
図７（ｂ）は、現フレーム画像と前フレーム画像の差分画像を示す。前フレーム画像の位置からコントローラ２０を動かすと、数式（１）により差分画像が生成される。この例では、コントローラ２０や、コントローラ２０と一緒に動く体の少なくとも一部の領域が、白色画像（画素値が“１”になる）として取得される。なお、常にこのような白色画像が取得されるわけではなく、図７（ｂ）は、あくまでも数式（１）を満足したときに生成される差分画像の一例である。このとき、照明は動かないため、差分画像には含まれない。なお、ユーザがコントローラ２０を動かさなければ、コントローラ２０の白色画像は取得されない。
【００５３】
図８（ａ）は、現フレーム画像の２値化画像を示す。２値化画像では、図７（ａ）における高輝度領域、すなわち発光しているＬＥＤと、照明のランプとが２値化されて白色画像に変換される。他のノイズを防ぐために、２値化処理する際に設定する閾値は、ＬＥＤの発光輝度から所定のマージン値を減じた輝度値に設定されていることが好ましい。
図８（ｂ）は、論理積画像を示す。論理積画像は、図７（ｂ）に示す差分画像と、図８（ａ）に示す２値化画像との論理積演算を行う。差分画像および２値化画像において、白色画素の画素値は“１”であり、黒色画素の画素値は“０”である。したがって、両方の画像において白色画素として存在している画素のみが、論理積画像において白色画素として生成されることになる。
【００５４】
このように差分画像と２値化画像の論理積をとることで、ＬＥＤ画像を抽出しやすい論理積画像を生成できる。論理積画像は、ＬＥＤ画像抽出部１４２に送られる。
【００５５】
論理積画像が生成されると、前フレームバッファ１３４に保持されている前フレームデータは、現フレームバッファ１３２に保持されている現フレームデータにより上書きされる。この上書き処理は、前フレームバッファ１３４が差分画像生成部１３６に読み出された直後に行われてもよい。その後、現フレームバッファ１３２に保持されている現フレームデータは、次のフレームデータにより上書きされて、次のフレームにおける論理積画像の生成処理を実行する。
【００５６】
ＬＥＤ画像抽出部１４２は、論理積画像からＬＥＤ画像を抽出する。ＬＥＤ画像を抽出するためには、まず、ＬＥＤ画像の候補を検出する。続いて、任意の候補を第１ＬＥＤ４０ａと仮定し、その周辺領域を探索して、第２ＬＥＤ４０ｂとなりうるＬＥＤ画像候補があるか調査する。第２ＬＥＤ４０ｂが見つかれば、また第１ＬＥＤ４０ａの周辺領域を探索して、第３ＬＥＤ４０ｃとなりうるＬＥＤ画像候補があるか調査する。第３ＬＥＤ４０ｃが見つかれば、その周辺領域を探索して、第４ＬＥＤ４０ｄとなりうるＬＥＤ画像候補があるか調査する。この際、ＬＥＤ画像抽出部１４２は、複数のＬＥＤ４０により形成される２次元パターンを予め認識しており、この２次元パターンを利用して、ＬＥＤ画像の抽出処理を行う。以下では、説明の便宜上、コントローラ２０の筐体背面２９において、第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃ、第４ＬＥＤ４０ｄが正方形の頂点を構成するように配置されている場合を例にとる。
【００５７】
なおＬＥＤ画像抽出部１４２は、論理積画像を用いずに、２値化画像からＬＥＤ画像を抽出することも可能である。２値化画像には、ＬＥＤ画像以外のノイズも含まれることになるが、たとえば差分画像においてＬＥＤ画像を取得できない場合には、２値化画像を利用することで、ＬＥＤ画像の位置および姿勢を検出できる。以下に示す処理手順は、論理積画像および２値化画像のいずれを用いても実行できるが、論理積画像にはＬＥＤ画像以外のノイズ成分が少ないため、論理積画像を利用する方が処理速度は速い。
【００５８】
図９は、ＬＥＤ画像候補の検出処理の処理手順を示すフローチャートである。ＬＥＤ画像抽出部１４２は、論理積画像において、白色画素（画素値が“１”になっている画素）が連続して存在する領域を１つの連結領域として取得する（Ｓ１００）。次に、ＬＥＤ画像抽出部１４２は、白色画素連結領域の縁部分を抽出して、短辺および長辺を決定する（Ｓ１０２）。
【００５９】
ＬＥＤ画像抽出部１４２は、短辺が所定画素数Ｍａ以上の画素で構成されているか否かを判定する（Ｓ１０４）。短辺が画素数Ｍａより少ない画素で構成されている場合（Ｓ１０４のＮ）、ＬＥＤ画像抽出部１４２は、ＬＥＤ画像ではないとして、この白色画素連結領域の処理を終了する。短辺が画素数Ｍａ以上の画素で構成されている場合（Ｓ１０４のＹ）、ＬＥＤ画像抽出部１４２は、長辺が所定画素数Ｍｂ以下の画素で構成されているか否かを判定する（Ｓ１０６）。長辺が画素数Ｍｂより多い画素で構成されている場合（Ｓ１０６のＮ）、ＬＥＤ画像抽出部１４２は、ＬＥＤ画像ではないとして、この白色画素連結領域の処理を終了する。長辺が画素数Ｍｂ以下の画素で構成されている場合（Ｓ１０６のＹ）、ＬＥＤ画像抽出部１４２は、ＬＥＤ画像の候補であるとして、白色画素連結領域を構成する画素数を取得する（Ｓ１０８）。このＬＥＤ画像候補検出処理は、全ての白色画素連結領域に対して繰り返される。これにより、論理積画像に含まれるＬＥＤ画像候補を検出できる。なお、ＬＥＤ画像候補の座標は、連結領域の重心に設定する。
【００６０】
図１０は、ＬＥＤ抽出処理の処理手順を示すフローチャートである。ＬＥＤ画像抽出部１４２は、検出されたＬＥＤ画像候補のうち、任意のＬＥＤ画像候補を第１ＬＥＤ４０ａであると仮定する（Ｓ１２０）。次に、第１ＬＥＤ４０ａに対して、第２ＬＥＤ４０ｂとなりうる条件を満足するＬＥＤ画像候補が存在するか否かを判定する（Ｓ１２２）。第２ＬＥＤ４０ｂとなるＬＥＤ画像候補が存在すれば（Ｓ１２２のＹ）、第１ＬＥＤ４０ａおよび第２ＬＥＤ４０ｂに対して、第３ＬＥＤ４０ｃとなりうる条件を満足するＬＥＤ画像候補が存在するか否かを判定する（Ｓ１２４）。第３ＬＥＤ４０ｃとなるＬＥＤ画像候補が存在すれば（Ｓ１２４のＹ）、第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂおよび第３ＬＥＤ４０ｃに対して、第４ＬＥＤ４０ｄとなりうる条件を満足するＬＥＤ画像候補が存在するか否かを判定する（Ｓ１２６）。第４ＬＥＤ４０ｄとなるＬＥＤ画像候補が存在すれば（Ｓ１２６のＹ）、コントローラ２０の第１ＬＥＤ４０ａ〜第４ＬＥＤ４０ｄを抽出したことになる。なお、第２ＬＥＤ画像候補が存在しない場合（Ｓ１２２のＮ）、第３ＬＥＤ画像候補が存在しない場合（Ｓ１２４のＮ）、第４ＬＥＤ画像候補が存在しない場合（Ｓ１２６のＮ）は、別のＬＥＤ画像候補を第１ＬＥＤ４０ａと仮定して、図８の処理を再実行する。
【００６１】
ＬＥＤ抽出処理においては、処理負荷を軽減するために、コントローラ２０の姿勢が所定角度以上傾いていないことを処理条件として設定してもよい。ＬＥＤ４０は比較的指向性が強いため、コントローラ２０を傾けすぎると、撮像装置２において受光が難しくなる。このＬＥＤ４０の指向性を利用して、ＬＥＤ画像候補を探索する際に、第１ＬＥＤ４０ａから所定角度（たとえば４５°）よりも傾いていないことを条件としてＬＥＤ画像の抽出処理を行うことで、処理負荷を大幅に軽減することが可能となる。
【００６２】
本実施例では、前フレーム画像と現フレーム画像の差分画像を利用するため、コントローラ２０に動きがない場合は、ＬＥＤ４０の画像は差分画像から除かれる。そのため、差分画像を用いる場合には、図１０に示すＬＥＤ抽出処理により、必ずＬＥＤ画像が見つかるわけではない。位置推定部１０４は、図１０に示すＬＥＤ抽出処理によりＬＥＤ画像が見つからなかった場合は、コントローラ２０が前フレームの位置から動いていないものと推定し、前フレームにおけるコントローラ２０の位置情報および姿勢情報を取得する。このとき位置推定部１０４は、２値化画像を用いてＬＥＤ画像を抽出してもよい。
【００６３】
図１１は、図１０のＳ１２２に示す第２ＬＥＤ検出処理の処理手順を示すフローチャートである。第１ＬＥＤ４０ａと仮定したＬＥＤ画像候補の構成画素数をＮとする。まずＬＥＤ画像抽出部１４２は、ＬＥＤ画像候補の画素数が１／２×Ｎ以上であって、且つ２Ｎ以下であるか否かを判定する（Ｓ１４０）。これは、ＬＥＤ画像であれば、大きさや形は第１ＬＥＤ４０ａと大きく変わらないという事実に基づいている。ＬＥＤ画像候補の構成画素数が、構成画素数Ｎに対して所定の範囲内にあれば（Ｓ１４０のＹ）、そのＬＥＤ画像候補が第１ＬＥＤ４０ａの右方に存在するか否かを判定する（Ｓ１４２）。右方であるか否かの判断は、第１ＬＥＤ４０ａの右上４５°から右下４５°の範囲内に存在するか否かにより決定される。第１ＬＥＤ４０ａの右方にある場合（Ｓ１４２のＹ）、第１ＬＥＤ４０ａとＬＥＤ画像候補との距離Ｄ１２が、Ｄａ以上であって且つＤｂ以下であるか否かを判定する（Ｓ１４４）。ここでは、互いの距離が近すぎたり、また離れすぎている場合には、第２ＬＥＤ４０ｂとして相応しくないことを判定している。距離Ｄ１２がＤａ以上であって且つＤｂ以下である場合（Ｓ１４４のＹ）、そのＬＥＤ画像候補が第２ＬＥＤ４０ｂとなりうることが判断され、第２ＬＥＤ４０ｂの存在が確認される（Ｓ１４６）。一方、ＬＥＤ画像候補の構成画素数が所定の範囲内にない場合（Ｓ１４０のＮ）、ＬＥＤ４０ａの右方に存在しない場合（Ｓ１４２のＮ）、距離Ｄ１２が所定の範囲内にない場合（Ｓ１４４のＮ）には、そのＬＥＤ画像候補が第２ＬＥＤ４０ｂでないと判断される。
【００６４】
図１２は、図１０のＳ１２４に示す第３ＬＥＤ検出処理の処理手順を示すフローチャートである。第１ＬＥＤ４０ａと仮定したＬＥＤ画像候補の構成画素数をＮとする。まずＬＥＤ画像抽出部１４２は、ＬＥＤ画像候補の画素数が１／２×Ｎ以上であって、且つ２Ｎ以下であるか否かを判定する（Ｓ１６０）。ＬＥＤ画像候補の構成画素数が、構成画素数Ｎに対して所定の範囲内にあれば（Ｓ１６０のＹ）、そのＬＥＤ画像候補が第１ＬＥＤ４０ａの下方に存在するか否かを判定する（Ｓ１６２）。下方であるか否かの判断は、第１ＬＥＤ４０ａの左下４５°から右下４５°の範囲内に存在するか否かにより決定される。第１ＬＥＤ４０ａの下方にある場合（Ｓ１６２のＹ）、第１ＬＥＤ４０ａとＬＥＤ画像候補との距離が、１／√２×Ｄ１２以上であって且つ√２Ｄ１２以下であるか否かを判定する（Ｓ１６４）。ここでは、互いの距離が近すぎたり、また離れすぎている場合には、第３ＬＥＤ４０ｃとして相応しくないことを判定している。距離が１／√２×Ｄ１２以上であって且つ√２Ｄ１２以下である場合（Ｓ１６４のＹ）、第１ＬＥＤ４０ａから第２ＬＥＤ４０ｂまでの線分と、第１ＬＥＤ４０ａからＬＥＤ画像候補までの線分の角度が所定の範囲内であるか否かが判定される（Ｓ１６６）。このとき、所定の範囲内にあれば（Ｓ１６６のＹ）、そのＬＥＤ画像候補が第３ＬＥＤ４０ｃとなりうることが判断され、第３ＬＥＤ４０ｃの存在が確認される（Ｓ１６８）。一方、ＬＥＤ画像候補の構成画素数が所定の範囲内にない場合（Ｓ１６０のＮ）、ＬＥＤ４０ａの下方に存在しない場合（Ｓ１６２のＮ）、第１ＬＥＤ４０ａとの距離が所定の範囲内にない場合（Ｓ１６４のＮ）、角度が所定の範囲内にない場合（Ｓ１６６のＮ）には、そのＬＥＤ画像候補が第３ＬＥＤ４０ｃでないと判断される（Ｓ１７０）。
【００６５】
図１３は、図１０のＳ１２６に示す第４ＬＥＤ検出処理の処理手順を示すフローチャートである。第１ＬＥＤ４０ａと仮定したＬＥＤ画像候補の構成画素数をＮとする。まずＬＥＤ画像抽出部１４２は、ＬＥＤ画像候補の画素数が１／２×Ｎ以上であって、且つ２Ｎ以下であるか否かを判定する（Ｓ１８０）。ＬＥＤ画像候補の構成画素数が、構成画素数Ｎに対して所定の範囲内にあれば（Ｓ１８０のＹ）、第１ＬＥＤ４０ａから第２ＬＥＤ４０ｂのベクトルと、第３ＬＥＤ４０ｃとＬＥＤ画像候補のベクトルのなす角度が所定値以下であるか否かを判定する（Ｓ１８２）。第１ＬＥＤ４０ａから第２ＬＥＤ４０ｂのベクトルと、第３ＬＥＤ４０ｃとＬＥＤ画像候補のベクトルのなす角度が所定値以下であれば（Ｓ１８２のＹ）、第１ＬＥＤ４０ａから第３ＬＥＤ４０ｃのベクトルと、第２ＬＥＤ４０ｂとＬＥＤ画像候補のベクトルのなす角度が所定値以下あるか否かを判定する（Ｓ１８４）。第１ＬＥＤ４０ａから第３ＬＥＤ４０ｃのベクトルと、第２ＬＥＤ４０ｂとＬＥＤ画像候補のベクトルのなす角度が所定値以下であれば（Ｓ１８４のＹ）、そのＬＥＤ画像候補が第４ＬＥＤ４０ｄとなりうることが判断され、第４ＬＥＤ４０ｄの存在が確認される（Ｓ１８６）。一方、ＬＥＤ画像候補の構成画素数が所定の範囲内にない場合（Ｓ１８０のＮ）、第１ＬＥＤ４０ａから第２ＬＥＤ４０ｂのベクトルと、第３ＬＥＤ４０ｃとＬＥＤ画像候補のベクトルのなす角度が所定値を超える場合（Ｓ１８２のＮ）、第１ＬＥＤ４０ａから第３ＬＥＤ４０ｃのベクトルと、第２ＬＥＤ４０ｂとＬＥＤ画像候補のベクトルのなす角度が所定値を超える場合は（Ｓ１８４のＮ）、そのＬＥＤ画像候補が第４ＬＥＤ４０ｄでないと判断される（Ｓ１８８）。
【００６６】
以上により、ＬＥＤ画像抽出部１４２は、論理積画像から第１ＬＥＤ４０ａ〜第４ＬＥＤ４０ｄの画像を抽出することができる。抽出された第１ＬＥＤ４０ａ〜第４ＬＥＤ４０ｄの画像の位置情報は、位置推定部１０４に送られる。
【００６７】
位置推定部１０４は、コントローラ２０におけるＬＥＤ４０の２次元配置に基づき、第１ＬＥＤ４０ａ〜第４ＬＥＤ４０ｄの画像のフレーム画像における位置情報を取得する。位置推定部１０４は、抽出した第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃおよび第４ＬＥＤ４０ｄのアフィン変換を求めて、実空間における位置および姿勢を算出する。実空間における位置は、直交座標系における座標（Ｘ，Ｙ，Ｚ）であり、実空間における姿勢は、Ｘ軸、Ｙ軸、Ｚ軸における回転角である。３軸における座標および回転角を求めることで、位置推定部１０４は、撮像装置２からの距離も含めた空間内での位置を推定できる。位置推定部１０４は、アフィン変換を求めることで、コントローラ２０のフレーム画像中の位置を推定してもよい。たとえば、ＸＹＺ空間のうちのＸＹ座標をとることでフレーム画像中の位置を取得することができる。位置推定部１０４は、推定したコントローラ２０の位置や姿勢をアプリケーション処理部１１０に送る。
【００６８】
なお、上記したようにアフィン変換によりコントローラ２０の位置および姿勢を算出してもよいが、たとえばゲーム装置１０は、特定のコントローラ２０に対して、４つのＬＥＤ４０のうちの３つを点灯するように指示して、点灯した３つのＬＥＤ画像から、コントローラ２０の位置および姿勢を取得することも可能である。ゲーム装置１０は、上記したアルゴリズムと同様の手法を用いて、３つのＬＥＤ４０、たとえば第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃの点灯画像を抽出して、位置推定部１０４が、そのコントローラ２０の位置および姿勢を推定してもよい。このとき、位置推定部１０４は、第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃ、第４ＬＥＤ４０ｄの位置関係を予め把握しており、そのうち第１ＬＥＤ４０ａ、第２ＬＥＤ４０ｂ、第３ＬＥＤ４０ｃの位置関係を満足するＬＥＤ画像候補を抽出することで、コントローラ２０の位置および姿勢を推定することができる。
【００６９】
ＬＥＤ４０の誤認識を回避するために、位置推定部１０４は、前回取得したＬＥＤ画像の位置と、今回取得したＬＥＤ画像の位置の変化量が所定値を超える場合、今回取得したＬＥＤ画像の位置をエラーとして処理する。すなわち、１フレームの間に、位置や姿勢が所定値以上変化する場合は、外乱的な要素により他のオブジェクトをＬＥＤ４０として誤認識した可能性があるため、抽出したＬＥＤ４０の位置情報を破棄する。
【００７０】
しかしながら、そのような場合であっても、実際に大きな変化量でコントローラ２０が移動することもあり得るため、位置推定部１０４は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得したＬＥＤ画像の位置を正常なものとして処理してもよい。
【００７１】
位置推定部１０４は、たとえば現フレーム画像や、論理積画像をもとに、ＬＥＤ４０の移動方向や速度を推定することも可能である。たとえば撮像装置２のシャッタースピードを落とすと、ＬＥＤ４０の画像が楕円や直方体として撮像されることになる。そこで、ＬＥＤ画像の形状から、移動方向のみならず、移動速度も推定することが可能である。たとえば移動方向および速度が推定できれば、撮像装置２において突然見えなくなった場合でも、コントローラ２０の位置や姿勢を予測できる。全てのＬＥＤ４０の形状が同じ方向に偏っているような場合に、コントローラ２０の移動方向と速度を推定してもよい。
【００７２】
アプリケーション処理部１１０は、推定されたコントローラ２０の位置や姿勢を、ゲーム入力としてゲームアプリケーションの処理に反映する。この反映の手法は様々考えられるが、最も直観的には、推定したコントローラ２０の位置に対応したゲーム画像中の位置に、仮想オブジェクトを追従させて表示する。ユーザが撮像装置２に対してコントローラ２０を動かすと、その動きに追従してゲーム画像内の仮想オブジェクトを動かすことができる。
【００７３】
なお、理想的な状態であればフレーム画像ごとにＬＥＤ４０の位置や姿勢を求めてゲーム画像に反映していけばよいが、一方で、コントローラ２０の向きや周辺光の環境などにより、フレーム画像においてＬＥＤ４０の位置や姿勢を求められない状況も発生しうる。そのような状況が続いた後に、突然、ＬＥＤ４０の位置や姿勢が求められると、停止していた仮想オブジェクトが新たな位置にいきなり移動することになり、ユーザに違和感を与える。そのため、論理積画像からＬＥＤ４０の位置や姿勢を検出できたとしても、ゲーム画像としては、仮想オブジェクトを取得した位置まで移動させるのではなく、仮に情報落ちがあった場合であっても、スムーズな動きを実現できるように追従処理を行わせることとする。
【００７４】
図１４（ａ）、図１４（ｂ）は、コントローラに対応する仮想オブジェクトがゲーム画面内で円滑な追従動作を実現するためのアルゴリズムを説明するための図である。説明の便宜上、仮想オブジェクトの位置変化について説明するが、姿勢変化についても同様のアルゴリズムを適用することができる。
【００７５】
位置推定部１０４において、アフィン変換を求めることで導出された位置パラメータが、Ｐｉ−１、Ｐｉ、Ｐｉ＋１（Ｐの添字は、ゲーム画面フレームの番号を示す）とする。まず、フレーム画像が切り替り、ＰｉからＰｉ＋１に位置パラメータが変化する場合を考える。
新たな位置パラメータ（Ｐｉ＋１）が得られたとき、ゲーム画面に反映する位置パラメータは、以下の式で求められる。
Ｑｉ＋１＝（Ｑｉ＋Ｐｉ＋１）／２
すなわち、新たな位置パラメータＰｉ＋１に直接移動するのではなく、前フレームのゲーム画面における位置パラメータと、現フレームの新たな位置パラメータＰｉ＋１との中点を、ゲーム画面における新たな位置パラメータとして設定する。なお、位置パラメータＱｉ＋１は、位置パラメータＱｉと位置パラメータＰｉ＋１の中点である必要はなく、位置パラメータＱｉと位置パラメータＰｉ＋１の間の線分をＡ：Ｂに分割する点であってもよい。
【００７６】
図１４（ｂ）は、位置パラメータとしてＰｉ＋１が取得できなかった場合の例である。このような場合は、本アルゴリズムの効果を発揮できる。この場合は、最新の位置パラメータがＰｉ＋１の代わりに利用される。ここで最新の位置パラメータはＰｉであり、
Ｑｉ＋１＝（Ｑｉ＋Ｐｉ）／２
として求められる。
本アルゴリズムによりゲーム画像における位置パラメータＱを取得すると、空間内のコントローラ２０が大きく変位したり、また論理積画像から抽出できない場合であっても、仮想オブジェクトは常に少しずつ移動できる。そのため、ゲーム画像中で仮想オブジェクトが急に動かなくなったり、また急に動いたりする状況の発生を回避でき、コントローラ２０に対して円滑な追従処理を実現できる。
【００７７】
本実施例では、コントローラ２０を撮像装置２で撮像して、フレーム画像からコントローラ２０の位置や姿勢を推定し、その位置情報や姿勢情報をゲームアプリケーションの処理に反映させることとした。コントローラ２０のＬＥＤ４０は、たとえばゲームアプリケーションの進行状況に応じて点灯パターンを変更してもよい。
【００７８】
ユーザがゲームアプリケーションに参加した直後に、ゲーム装置１０は、コントローラ２０に対して所定の低周波で４つのＬＥＤ４０を点灯させる制御信号を送信してもよい。点滅指示部１０６は、コントローラ２０に対して所定の低周波での点滅パターンを指示する制御信号を生成する。この低周波点滅制御信号は、無線通信モジュール１０８からコントローラ２０に送信される。なお、複数のコントローラ２０が存在する場合には、コントローラ２０ごとに点滅周波数が設定される。
【００７９】
コントローラ２０は、指定された低周波でＬＥＤ４０を点灯し、撮像装置２は、３０枚／秒の撮像速度でフレーム画像を撮像する。ゲーム装置１０は、複数のフレーム画像から、所定の周期で点灯をオンオフしているＬＥＤ画像を抽出する。ゲームシステム１内に複数のコントローラ２０が存在する場合は、コントローラ２０ごとに点灯の周期を設定する。これにより、コントローラ２０の位置を確認できるとともに、それぞれのコントローラ２０を区別して認識することもできる。この処理は、理想的にはゲームアプリケーションに参加後、１回行われればよいが、実空間内ではコントローラ２０が撮像装置２から突然見えなくなることもある。そのため、数秒ごとなどの所定の周期で、各コントローラ２０は、コントローラごとに設定された低周波でＬＥＤ４０を点滅させてもよい。
【００８０】
たとえば４つのＬＥＤ４０が低周波で点灯と消灯を行う場合には、ＬＥＤ４０を撮像できるフレームと、撮像できないフレームとが所定の周期で切り替わることになる。撮像周期（３０フレーム／秒）に対して、ＬＥＤ４０を４５Ｈｚで点灯制御すると、連続した２枚のフレームで撮像され、次は撮像されない、という状況が繰り返される。フレーム画像に撮像される場合と撮像されない場合とがあるため、ＬＥＤ４０が静止した状態であっても、位置情報を取得できる。
【００８１】
ここで低周波点灯とは、撮像周期に対して、ＬＥＤ発光が撮像されるフレームと撮像されないフレームとが存在しうるような周波数での点灯を意味する。一方、高周波点灯とは、撮像装置２の撮像周期（３０フレーム／秒）に対して常にフレーム画像に撮像されるような周波数での点灯を意味する。たとえば、１ｋＨｚでＬＥＤ４０を点灯した場合であっても、たとえば撮像装置２の撮像速度が非常に高ければ、ＬＥＤ発光が撮像されるフレームと撮像されないフレームとが出現するため、ＬＥＤ４０が静止した状態であっても、位置情報を取得できる。
【００８２】
高周波点灯するＬＥＤ４０の位置や姿勢は、ゲームアプリケーションの入力として利用される。そのため、位置推定部１０４で推定されたコントローラ２０の位置情報は、アプリケーション処理部１１０に逐次送られて、アプリケーションの処理に反映される。アプリケーション処理部１１０には、ユーザがコントローラ２０の方向キー２１などを操作した入力も無線通信モジュール１０８を介して送信される。アプリケーション処理部１１０は、コントローラ２０の位置・姿勢情報と、コントローラ２０における操作入力からゲームを進行させて、ゲームアプリケーションの処理結果を示す画像信号および音声信号を生成する。
【００８３】
また、変形例として、４つのＬＥＤ４０のうちの１つを他のＬＥＤ４０とは異なる点滅パターンで点灯させることで、特定のＬＥＤ４０を認識することも可能となる。たとえば３つのＬＥＤは高周波点灯を行い、１つのＬＥＤに低周波点灯を行わせることで、たとえばフレーム画像中の第１ＬＥＤ４０ａがどれであるのかを確認することも可能となる。またこのとき、ＬＥＤ４０を一意に認識できるだけでなく、その姿勢も取得することができる。
【００８４】
実施例において開示された発明の特徴は、次の項目によって規定されてもよい。
（項目１）
入力されるフレーム画像から発光体画像の位置を取得する画像処理装置であって、
前フレーム画像と現フレーム画像の差分画像を生成する差分画像生成部と、
現フレーム画像を所定の閾値を用いて２値化処理して２値化画像を生成する２値化画像生成部と、
前記差分画像と前記２値化画像とを論理演算した論理演算画像を生成する論理演算部と、
前記論理演算画像から発光体画像を抽出する抽出部と、
発光体画像のフレーム画像における位置を取得する位置取得部と、
を備えることを特徴とする画像処理装置。
（項目２）
前記論理演算部は、画素ごとに、前記差分画像の画素値と前記２値化画像の画素値との論理積演算を行うことで、論理演算画像を生成することを特徴とする項目１に記載の画像処理装置。
（項目３）
前記抽出部は、複数の発光体により形成される２次元パターンを予め認識しており、当該２次元パターンを利用して、発光体画像の抽出処理を行うことを特徴とする項目１または２に記載の画像処理装置。
（項目４）
前記位置取得部は、前回取得した発光体画像の位置と今回取得した発光体画像の位置の変化量が所定値を超える場合、今回取得した発光体画像の位置を、エラーとして処理することを特徴とする項目１から３のいずれかに記載の画像処理装置。
（項目５）
前記位置取得部は、連続して発生するエラーの回数をカウントし、カウント値が所定値に到達した場合に、そのときに取得した発光体画像の位置を正常なものとして処理することを特徴とする項目４に記載の画像処理装置。
【００８５】
（２）２次元コードを利用した位置情報および／または姿勢情報の取得方法
以下に説明するコントローラ２０の位置情報および／または姿勢情報の取得方法では、図１に示すゲームシステム１において、コントローラ２０が、ＬＥＤ４０の代わりに、２次元コードを有して構成される。この２次元コードは、撮像装置２により撮像されて、ゲーム装置１０においてコントローラ２０の実空間における位置情報および姿勢情報を取得するために利用される。
【００８６】
図１５は、２次元コードを有するコントローラ２０を示す。コントローラ２０は、筐体背面２９において、自身を一意に識別するための２次元コード７０を有して構成される。２次元コード７０およびその識別方法は、たとえば本出願人により出願された特開２００６−７２６６７号公報に開示された２次元コードおよびその識別方法と同様のものであってよい。
【００８７】
図１６は、２次元コード７０を構成する２次元パターンの一例を示す。２次元コード７０は、コントローラ２０の筐体背面２９に刻印されてもよく、また印刷物として貼り付けられてもよい。２次元コード７０には、方向指示部１１と識別部１２とが形成されている。方向指示部１１は、２次元コード７０の上方を示すために設けられ、識別部１２は、２次元コード７０を一意に識別するための特徴部分を表現するために設けられる。識別部１２は、所定の区画内に複数のブロックを有して作成されたコード情報である。複数のブロックのうち、４角のブロックは複数の２次元コード７０に共通して付与され、実質的には４角以外のブロックにより、特徴部分が形成される。４角のブロックは、撮像装置２からの距離を測定するために利用される。
【００８８】
図５に戻って、画像処理部１０２は、フレーム画像中の２次元コード７０を認識すると、２次元コード７０の画像における４角のブロック間の長さをもとに、撮像装置２と２次元コード７０との距離を計算して求める。また、画像処理部１０２は、２次元コード７０の方向指示部１１を検出して、フレーム画像において２次元コード７０が向いている方向を求める。この場合、識別部１２に対して方向指示部１１が存在する方向が上方となる。さらに、画像処理部１０２は、識別部１２の４角以外のブロックから、２次元コード７０の識別情報を取得する。
【００８９】
画像処理部１０２は、実空間中で２次元コード７０が傾斜された状態についても、画像解析により認識する機能をもつ。画像処理部１０２において画像解析された結果は、位置推定部１０４に送られる。位置推定部１０４は、画像処理部１０２における画像解析結果をもとに、２次元コード７０の位置および姿勢を推定する。
【００９０】
図１７は、画像処理部１０２の構成を示す。画像処理部１０２は、フレーム画像取得部１３０、実オブジェクト抽出部１５０、状態決定部１５２、識別情報取得部１５４、識別情報格納部１５６および送出部１６０を備える。識別情報格納部１５６は、実オブジェクトを識別するための特徴部分の情報と、実オブジェクトを識別するための識別情報とを対応付けて記憶する。具体的には、図１６における２次元コード７０の識別部１２のパターン情報と、識別情報とを１対１に対応付けて記憶している。たとえば識別情報は、ゲーム装置１０においてキャラクタの割当てに利用されてもよい。特に、複数の２次元コード７０の存在を許可するゲームアプリケーションにおいては、２次元コード７０のそれぞれを識別情報と紐付けすることで、２次元コード７０を認識可能となる。状態決定部１５２は、設定した座標系における実オブジェクトの状態を決定し、具体的には、姿勢を決定する姿勢決定部１６２、および位置を決定する位置決定部１６４を有する。
【００９１】
フレーム画像取得部１３０が、撮像装置２にて撮像された実空間のフレーム画像を取得する。撮像装置２は、周期的にフレーム画像を取得し、好適には１／３０秒間隔でフレーム画像を取得する。
【００９２】
実オブジェクト抽出部１５０は、フレーム画像から実オブジェクト画像、すなわち２次元コード７０の画像を抽出する。この処理は、画像情報を２進数のビット表現に変換し、このビット表現から２次元コード７０の画像を抽出することで行われる。いわゆるドット処理であり、ビットのオンとオフを検出することで、画像抽出処理が行われてもよい。また、この処理は、既知の画像マッチング技術によって行ってもよい。その場合、実オブジェクト抽出部１５０は、マッチング処理のために、使用する実オブジェクトの画像情報を、メモリ（図示せず）に予め登録しておく。予め登録した画像情報と撮像した画像情報とのマッチングをとることで、２次元コード７０の画像をフレーム画像から切り出すことができる。
【００９３】
位置決定部１６４は、実オブジェクト画像のフレーム画像中の２次元位置を決定する。具体的には、フレーム画像における実オブジェクト画像の中心点の座標をもとに、フレーム画像中の位置を決定する。また、位置決定部１６４は、２次元コード７０の画像における識別部１２の４角間の長さをもとに、撮像装置２と２次元コード７０との距離を決定する。これにより、フレーム画像中の２次元位置とあわせて、３次元の実空間におけるコントローラ２０の位置を取得できる。
【００９４】
姿勢決定部１６２は、実オブジェクト画像の姿勢を決定する。たとえば、実オブジェクト画像の姿勢は、方向指示部１１の識別部１２に対する位置により定められる。また、コントローラ２０を傾ける場合には、識別部１２の４角同士の距離が等しくなくなるため、その変化量をもとに、傾斜した姿勢を判断することもできる。
【００９５】
識別情報取得部１５４は、実オブジェクト画像から特徴部分を抽出して、識別情報格納部１５６から対応する識別情報を取得する。本実施例のゲームシステム１は、複数の異なる２次元コード７０にも対応することが可能であり、例えば、複数のコントローラ２０にそれぞれ異なる２次元コード７０を設ける場合、それぞれの２次元コード７０に対して、異なる識別情報がそれぞれ対応付けられる。
【００９６】
状態決定部１５２において決定された位置情報、姿勢情報、および識別情報取得部１５４において取得された識別情報は、それぞれ関連付けされて送出部１６０から位置推定部１０４に送られる。なお、複数の２次元コード７０がフレーム画像に含まれる場合には、それぞれの２次元コード７０ごとに、位置情報、姿勢情報、識別情報が関連付けされて送出部１６０から位置推定部１０４に送られる。以上により、位置推定部１０４は、コントローラ２０の位置情報、姿勢情報、識別情報を取得し、コントローラ２０の位置および姿勢を推定することができる。
【００９７】
なお、上記のように識別情報を、位置情報および姿勢情報と関連づける処理は、ＬＥＤ４０を利用してコントローラ２０の位置情報および姿勢情報を取得した場合においても実行することができる。
【００９８】
（３）加速度センサなどを利用した位置情報および／または姿勢情報の取得方法
図４に示すコントローラの内部構成に加えて、コントローラ２００は、さらに３軸方向の加速度センサおよびジャイロセンサを有してもよい。
図１８は、実施例にかかるコントローラ２００の内部構成を示す。図１８では、図４に示す入力受付部５２、ＰＷＭ制御部５４、駆動部５６などの構成の図示は省略している。コントローラ２００は、ＸＹＺの３軸方向の加速度成分を検出する３軸加速度センサ３００と、筐体水平面（ＸＺ平面）における角速度を検出するジャイロセンサ３０２を備える。なお、ここでは、筐体の長手方向をＸ軸、高さ方向をＹ軸、短手方向（奥行き方向）をＺ軸と設定している。ジャイロセンサ３０２は、筐体内中央領域に配置され、たとえば図２に示す筐体上面図におけるＬＥＤ付きボタン３１の下方近傍に配置される。また３軸加速度センサ３００も同様に筐体中央付近に配置されるのが好ましい。３軸加速度センサ３００およびジャイロセンサ３０２による検出値は所定の周期でメイン制御部５０から無線通信モジュール５８に供給される。無線通信モジュール５８は、３軸加速度センサ３００およびジャイロセンサ３０２による検出値を、方向キー２１や操作ボタン２６などの操作入力とともに、所定の周期でゲーム装置１０の無線通信モジュール１０８に送信する。
【００９９】
図１９は、実施例にかかるゲーム装置１０の構成を示す。ゲーム装置１０は、無線通信モジュール１０８にて、コントローラ２００において３軸加速度センサ３００およびジャイロセンサ３０２により計測された３軸方向の加速度成分および筐体水平面（ＸＺ平面）に垂直な方向（Ｙ軸方向）回りの角速度成分を取得する。３軸加速度成分および角速度成分は、無線通信モジュール１０８から位置推定部２５０に供給される。位置推定部２５０は、取得した３軸加速度成分および角速度成分をもとに、コントローラ２００の位置や姿勢を推定できる。具体的に位置推定部２５０は、３軸加速度成分をもとに、コントローラ２００の姿勢を取得できる。また、３軸加速度成分を１回積分することで移動速度を取得することができ、また２回積分することで位置を取得することができる。
【０１００】
なお実施例のコントローラ２００では、Ｙ軸方向回りの角速度成分をジャイロセンサ３０２により検出している。したがって位置推定部２５０は、ジャイロセンサ３０２による検出値をもとに、コントローラ２００の水平面における回転状態すなわち回転姿勢を推定してもよい。なお、３軸加速度センサ３００が高精度に３軸加速度成分を取得できる場合には、コントローラ２００の水平面における回転状態を３軸加速度成分から推定できるようにしてもよい。
【０１０１】
以上のように、コントローラ２００が３軸加速度センサ３００およびジャイロセンサ３０２を備えることによって、撮像装置２によるフレーム画像の解析を行わなくても、コントローラ２００の位置および姿勢を取得することが可能となる。なお、撮像装置２によるフレーム画像の解析結果を更に利用して、コントローラ２００の位置および姿勢の推定精度を高めるようにしてもよい。３軸加速度センサ３００などの計測値を利用することでコントローラ２００の位置および姿勢を推定できるため、コントローラ２００の位置および姿勢情報をゲームアプリケーションの処理に反映することが可能となる。
【０１０２】
以下では、コントローラ２０ないしコントローラ２００の位置および姿勢を取得できることを前提として、実施例にかかるゲームシステムにおいて実施することのできるアプリケーション例を示す。以下、コントローラを代表して、コントローラ２００に関する説明を行う。ゲーム装置１０は、３軸加速度成分および角速度成分をもとにコントローラ２００の姿勢および位置を推定することになるが、コントローラ２０に関しても撮像画像から姿勢および位置を推定できるため、以下の内容は、コントローラ２０についても実現可能である。
【０１０３】
図２０は、アプリケーション処理部１１０の構成を示す。アプリケーション処理部１１０は、入力受付部４００、取得部４０２、変化検出部４０４、オブジェクト制御部４０６および画像信号生成部４０８を備える。図２０は、オブジェクトに関する画像を生成する構成のみを示している。実際には、オブジェクトの背景画像などは、他の構成により生成され、また音声信号についても他の構成により生成される。
【０１０４】
入力受付部４００は、無線通信モジュール１０８から、ゲームコントローラ２００で入力される操作入力を受け付ける。取得部４０２は、位置推定部２５０から、ゲームコントローラ２００の実空間における位置情報または姿勢情報を取得する。変化検出部４０４は、取得部４０２において時間的に連続して取得された位置情報または姿勢情報から、ゲームコントローラ２００の位置または姿勢の変化を検出する。変化検出部４０４は、位置の変化を検出することで、コントローラ２００の移動速度および移動方向を取得でき、また姿勢の変化を検出することで、コントローラ２００の回転速度および回転方向を取得できる。
【０１０５】
オブジェクト制御部４０６は、基本機能として、入力受付部４００において受け付けた操作入力をもとに、仮想空間におけるオブジェクトの動作を制御する。本実施例のオブジェクト制御部４０６は、さらに取得部４０２において取得された位置情報または姿勢情報を利用して、オブジェクトの動作を制御する機能ももつ。さらにオブジェクト制御部４０６は、変化検出部４０４において取得された位置または姿勢の変化を利用して、オブジェクトの動作を制御する機能ももつ。
【０１０６】
たとえば、オブジェクト制御部４０６は、位置情報または姿勢情報を利用して、仮想空間におけるオブジェクトの姿勢を決定してもよい。また、オブジェクト制御部４０６は、変化検出部４０４において、位置または姿勢の所定の変化が検出された場合に、位置情報または姿勢情報を利用したオブジェクトの動作制御を開始または終了してもよい。
【０１０７】
取得部４０２が、実空間におけるゲームコントローラ２００の３次元の位置情報または姿勢情報を取得する場合、オブジェクト制御部４０６は、３次元の位置情報または姿勢情報を利用して、仮想３次元空間におけるオブジェクトの動作を制御してもよい。なお、コントローラ２００の動きが大きく、画像表示装置３に表示するオブジェクトが画面からフレームアウトしそうな場合には、オブジェクト制御部４０６は、ユーザに対して報知処理を実行してもよい。オブジェクト制御部４０６において動作制御されるオブジェクトは、他の背景画像などとともに画像信号生成部４０８において画像信号に変換される。
【０１０８】
以下、アプリケーション例を示す。
＜テニスゲーム＞
テニスゲームでは、フレーム画像におけるコントローラ２００の高さをテニスボールの打点高さとし、コントローラ２００の向きをボールの打球方向、コントローラ２００を動かす速度を、ボールを打ち込む強さとして、コントローラ２００を動かすことでゲームを進行させることができる。これらの動きは、実際のラケットを振る動きに近似しているため、テニスを実際にプレイするのに近い感覚をユーザに与えることができる。たとえば、コントローラ２００にラケットと同じ動作をさせてもよく、このときのスイングの角度と方向を利用してもよい。
【０１０９】
オブジェクト制御部４０６は、取得部４０２で取得したコントローラ２００の位置情報からコントローラ２００の高さを取得し、姿勢情報からコントローラ２００の向きを取得する。また、オブジェクト制御部４０６は、変化検出部４０４から、コントローラ２００の移動速度を取得する。これらの情報により、オブジェクト制御部４０６は、ラケットやキャラクタなどのオブジェクトの姿勢を決定し、動作させる。
【０１１０】
オブジェクト制御部４０６は、取得部４０２において取得されるコントローラ２００の位置情報および姿勢情報をもとに、各仮想オブジェクトの動作を制御してもよいが、たとえば、基準位置および基準姿勢からの差分をとって、その差分値に基づいて各仮想オブジェクトの動作を制御してもよい。たとえば、ユーザがコントローラ２００のボタンなどを操作した時点のコントローラ２００の位置および姿勢を、オブジェクト動作制御処理に利用する基準位置および基準姿勢としてオブジェクト制御部４０６が取得してもよい。オブジェクト制御部４０６は、取得部４０２で取得される位置情報および姿勢情報から、基準位置および基準姿勢との間の変化量（差分）を検出して、その変化量をもとに仮想オブジェクトの動作制御を実行する。なお、オブジェクト制御部４０６は、基準位置および基準姿勢を変化検出部４０４に通知して、変化検出部４０４が、基準位置および基準姿勢からの変化量を検出してもよい。以下、基準位置および基準姿勢からの変化量でオブジェクトの動作制御を行う例を示すが、実空間座標における位置や姿勢に基づいたオブジェクトの動作制御も同様に実行できる。
【０１１１】
コントローラ２００のボタンやキー操作をゲーム入力としてそのまま利用できるようにすることで、従来のゲーム操作入力を維持しながら、感覚的に斬新なゲーム入力を行わせることができる。
たとえば、ボールを打ち込む強さをコントローラ２００のボタン操作により定めてもよい。従来型のボタン操作と、斬新なゲーム入力とを組み合わせることで、新しい遊技性を実現できる。たとえば、相手のコートにボールを落とす位置をコントローラ２００の向きで指定しながら、ボタン入力を行うことでボールを上げ、さらにコントローラ２００を動かすことで、強いサーブを打てるようなテニスゲームを作ることも可能である。
【０１１２】
コントローラ２００の位置情報および／または姿勢情報を利用して、ボレー、スマッシュ、ロブ、ドロップショットなどのショットを打ち分けることも可能である。たとえば、オブジェクト制御部４０６は、コントローラ２００の基準位置からの高さ方向の変化量が小さいときには、キャラクタにボレーの動作をさせ、変化量が正方向（上方向）に大きいときにはスマッシュの動作をさせ、負方向（下方向）に大きいときにはロブの動作をさせてもよい。
【０１１３】
図２１（ａ）は、キャラクタがボレーを行う状態、図２１（ｂ）は、キャラクタがスマッシュを行う状態を示す。図２１の例では、ゲームキャラクタとラケットの２つの仮想オブジェクトを表現しているが、キャラクタの姿勢だけでなく、ラケットの傾きにもコントローラ２００の位置情報を反映させることで、実際にテニスをプレイする感覚をユーザに与えることができる。
【０１１４】
＜オートバイゲーム＞
オートバイのドライブゲームでは、コントローラ２００の姿勢を操作することで、オートバイをコントロールするゲーム入力として利用してもよい。このとき、スピードはコントローラ２００を動かす速度で決定してもよく、またボタン入力で決定してもよい。このように、従来型のボタン入力と、コントローラ２００の位置や姿勢による静的な入力と、またコントローラ２００の移動速度などの状態変化をもとにした動的な入力とを組み合わせて利用することで、ゲームアプリケーションの操作性を向上できる。
【０１１５】
＜文字入力ゲーム＞
画面に文字入力を行わせるゲームでは、コントローラ２００の位置を動かすことで、画面に文字を入力することができる。オブジェクト制御部４０６は、取得部４０２から供給される筐体Ｘ軸、Ｙ軸方向の２次元的な位置情報に追従するように、画像表示装置３の画面に出力する線図オブジェクトを生成する。なお、コントローラ２００において、筐体の長手方向をＸ軸、高さ方向をＹ軸、短手方向（奥行き方向）をＺ軸と設定し、以下、この方向を、それぞれ筐体Ｘ軸、筐体Ｙ軸、筐体Ｚ軸と呼ぶ。またゲームアプリケーションにおいては、画像表示装置３の画面中、横方向をＸ軸、縦方向をＹ軸、奥行き方向をＺ軸と設定しており、以下、これらの方向を、それぞれ画面Ｘ軸、画面Ｙ軸、画面Ｚ軸と呼ぶ。
【０１１６】
これにより画面ＸＹ平面に、筐体ＸＹ平面における動きをトレースすることができる。コントローラ２００の動きだけで、この処理を行わせる場合、コントローラ２００の動きにより、トレース処理の開始および終了が決定されてもよい。このとき変化検出部４０４は、位置情報または姿勢情報の所定の変化を検出してオブジェクト制御部４０６に通知し、オブジェクト制御部４０６は、その通知を受けて、トレース処理の開始および終了を決定する。開始および終了のトリガとなる動き変化は、同一であってもよく、また開始処理、終了処理ごとに設定されていてもよい。同一の場合は、トレース処理の実行中でなければ開始処理のトリガ、トレース処理を実行中であれば終了処理のトリガとして、その動き変化を処理する。
【０１１７】
オブジェクト制御部４０６が、筐体ＸＹ平面における２次元的な動作をゲーム入力として利用する場合、それ以外の方向、すなわち筐体Ｚ軸方向の動きを、トレース処理の開始または終了のトリガとして利用してもよい。筐体Ｚ軸方向の動きは、線図オブジェクトの動作制御には利用されないため、開始または終了のトリガとして好適に使用できる。すなわち、ゲーム中のオブジェクトの動きに必要な成分以外の情報を、ゲームに対する指示情報として利用することで、キー操作を利用しなくとも、ゲームアプリケーションを進行させることができる。たとえば、文字入力ゲームでは、コントローラ２００の回転操作をゲーム入力として使用しないため、コントローラ２００を回転させることで、すなわち姿勢変化させることで、トレース処理の開始または終了の指示入力としてもよい。
【０１１８】
＜電極棒ゲーム＞
電極棒ゲームとは、金属製コースフレームに電極棒をいれて、その電極棒をコースフレームや障害物に当たらないように制限時間内にゴールまで持ち運ぶゲームであるが、この電極棒ゲームを、ゲームアプリケーションとして実行できる。現状、２次元の電極棒ゲームについては存在しているが、３次元の電極棒ゲームについては存在しない。
【０１１９】
オブジェクト制御部４０６は、コントローラ２００の３次元の位置情報および姿勢情報を利用して、仮想３次元空間において、仮想オブジェクトである電極棒の動作を制御してもよい。すなわち、ゲーム画面中でコースフレームを画面奥行き方向（画面Ｚ軸方向）にも設けることで、ユーザは、コントローラ２００を筐体ＸＹ平面上だけでなく、筐体Ｚ軸方向にも動かすことになり、現実の電極棒ゲームと同様の体感を与えることができる。
【０１２０】
以上、様々なアプリケーション例を示したが、オブジェクト制御部４０６がコントローラ２００の動きを画面中でトレースさせるような場合、コントローラ２００の動作量が大きくなると、コントローラ２００が画像表示装置３の画面から外れるような場合も発生する。たとえば、上記した文字入力ゲームでは、そのような事態が発生しうる。
【０１２１】
コントローラ２００に対応する仮想オブジェクトが画像表示装置３の画面からフレームアウトしそうな場合、オブジェクト制御部４０６は、コントローラ２００の位置情報をもとに、ユーザに対してフレームアウトしそうな旨を通知する報知処理を行ってもよい。たとえば、コントローラ２００がフレームアウトしそうな場合に、コントローラ２００に対して振動子を振動させるための振動制御信号を生成して、無線通信モジュール１０８より送信させてもよい。また、コントローラ２００の動きに追従する仮想オブジェクトをゲーム画像として表示させている場合には、ユーザに目立つように仮想オブジェクトを動かすことで、フレームアウトしそうなことをユーザに伝えてもよい。たとえば、画面のフレーム枠から内方向にはじかれるような特殊な動きをさせることで、ユーザに報知を行ってもよい。
【０１２２】
フレームアウトしそうであるか否かは、コントローラ２００の位置情報を画面座標に変換したときに、フレーム近傍の位置になっているか否かをもとに判断してもよい。このとき、変化検出部４０４がコントローラ２００の移動方向および速度を検出して、それらの情報から、所定時間以内にフレームアウトするか否かを予測してもよい。この予測処理は、フレーム近傍にあることを前提に実行されてもよい。
【０１２３】
なお、撮像装置２を用いる場合は、たとえばフレーム画像中のコントローラ２００の位置で決定してもよく、フレーム画像の縁部に近い位置にコントローラ２０が存在することが検出される場合に、この報知処理を行ってもよい。
【０１２４】
また、本実施例で説明したように、コントローラ２００またはコントローラ２０の位置情報および姿勢情報をもとに様々なアプリケーションが実行できる。
たとえば入力ボタンを併用してコントローラを回転させるなどすることで、ゲームオブジェクトに、大きいシャボン玉を作らせることができる。また、コントローラを回転させたり、姿勢の往復運動を行わせることで、料理ゲームでゲームオブジェクトにパンをこねさせることができる。またコントローラの位置情報を用いて、ゲームオブジェクトにタンバリンやマラカスを操作させたり、指揮をさせたりできる。またコントローラの３次元位置情報を利用することで、３次元的に配置されたブロックに球をあてることでブロックを崩していくゲームも実行できる。またコントローラ２００をプレイヤ間でキャッチボールするように受け渡すことで、プレイヤを切り替えることも可能である。ゲーム中に疑似カメラが存在する場合には、コントローラの位置情報をもとに疑似カメラの視点移動を行うことができる。またコントローラの回転情報をもとに、仮想的なドアノブを回す動作も実行できる。また実際にコントローラを動かすことで、仮想オブジェクトをその動きに追従させて動かすことができる。また、コントローラの３次元的な動きを捕捉することで、その動きを仮想ノミの動きとしてとらえて彫刻を作成したり、また２次元的な動きを捕捉することで、その動きを仮想筆の動きとしてとらえて絵画を作成したりできる。さらに、コントローラに瞬時的な衝撃を与えることで、衝撃のレベルが所定値を超えたときに、コントローラを振動させたり、またゲームオブジェクトに衝撃を反映させるなど、ゲームの進行を制御してもよい。加速度センサ等を有する場合は、その加速度で衝撃を検出でき、またＬＥＤ画像を利用する場合には、ＬＥＤ画像が楕円形になったり、また瞬間的に撮像されなかったりした場合に、コントローラが衝撃を受けたことを判定してもよい。
【符号の説明】
【０１２５】
１・・・ゲームシステム、２・・・撮像装置、３・・・画像表示装置、４・・・音声出力装置、１０・・・ゲーム装置、２０・・・コントローラ、３００・・・３軸加速度センサ、３０２・・・ジャイロセンサ、１１０・・・アプリケーション処理部、４００・・・入力受付部、４０２・・・取得部、４０４・・・変化検出部、４０６・・・オブジェクト制御部、４０８・・・画像信号生成部。
【図１】
0005551675.tif 000003
【図２】
0005551675.tif 000004
【図３】
0005551675.tif 000005
【図４】
0005551675.tif 000006
【図５】
0005551675.tif 000007
【図６】
0005551675.tif 000008
【図７】
0005551675.tif 000009
【図８】
0005551675.tif 000010
【図９】
0005551675.tif 000011
【図１０】
0005551675.tif 000012
【図１１】
0005551675.tif 000013
【図１２】
0005551675.tif 000014
【図１３】
0005551675.tif 000015
【図１４】
0005551675.tif 000016
【図１５】
0005551675.tif 000017
【図１６】
0005551675.tif 000018
【図１７】
0005551675.tif 000019
【図１８】
0005551675.tif 000020
【図１９】
0005551675.tif 000021
【図２０】
0005551675.tif 000022
【図２１】
0005551675.tif 000023