(57)【特許請求の範囲】
【請求項１】
表示装置に対して静置された複数の撮像対象を撮像するための撮像手段と、押下可能な少なくとも１つの操作キーとを備え、当該操作キーに対する押下状態に応じた操作情報を少なくとも出力する入力装置を用いた入力操作に応じて所定の画像処理を行い前記表示装置に画像を表示させるための画像処理装置であって、
前記操作情報を取得する操作情報取得手段と、
前記撮像手段の撮像画像において前記撮像対象を示す対象画像から得られる複数の対象画像間の間隔または対象画像の大きさを表す対象画像データを逐次取得する対象画像データ取得手段と、
前記撮像画像における前記対象画像の位置に基づいて、前記表示装置の表示領域に対応する指示座標を算出する指示座標算出手段と、
前記撮像画像における前記対象画像の位置に基づいて、前記入力装置の傾きを算出する傾き算出手段と、
前記対象画像データの変化に応じて、表示画像の拡大または縮小を行う画像処理手段と、
前記画像処理手段が処理した表示画像を前記表示装置に表示させる表示制御手段とを備え、
前記画像処理手段は、前記対象画像データに基づいて、前記撮像手段と前記撮像対象との間の距離を逐次算出する距離算出手段と、
前記操作キーが押下開始されたことを前記操作情報が示すとき、前記距離算出手段が算出した距離を記憶する記憶手段とを含み、
前記画像処理手段は、前記記憶手段に記憶された距離と前記操作キーが押下されていることを前記操作情報が示している間に前記距離算出手段が算出する距離との距離差を逐次算出することによって、前記操作キーが押下されている期間における距離の変化を求める差分算出手段を含み、前記距離差に基づく前記距離の変化に応じて前記表示画像の拡大または縮小を行い、前記指示座標の変化に基づいて前記表示画像の移動を行い、前記傾きの変化に基づいて前記表示画像の回転を行う、画像処理装置。
【請求項２】
前記画像処理手段は、前記距離の増加に応じて表示画像の拡大を行い、前記距離の減少に応じて表示画像の縮小を行う、請求項１に記載の画像処理装置。
【請求項３】
前記画像処理手段は、前記距離の増加に応じて表示画像の縮小を行い、前記距離の減少に応じて表示画像の拡大を行う、請求項１に記載の画像処理装置。
【請求項４】
前記画像処理手段は、前記距離の変化に応じて仮想空間内に配置された仮想カメラの位置を逐次変更することによって、前記表示画像の拡大または縮小を行う、請求項１乃至３のいずれか１つに記載の画像処理装置。
【請求項５】
前記画像処理手段は、前記距離の変化に応じて、前記表示画像を示す２次元画像の表示サイズを逐次変更し、
前記表示制御手段は、前記画像処理手段が変更した表示サイズに応じた大きさで前記２次元画像を前記表示装置に表示させる、請求項１乃至３のいずれか１つに記載の画像処理装置。
【請求項６】
表示装置に対して静置された複数の撮像対象を撮像するための撮像手段と、押下可能な少なくとも１つの操作キーとを備え、当該操作キーに対する押下状態に応じた操作情報を少なくとも出力する入力装置を用いた入力操作に応じて画像処理を行い前記表示装置に画像を表示させるための、コンピュータで実行される画像処理プログラムであって、
前記操作情報を取得する操作情報取得ステップと、
前記撮像手段の撮像画像において前記撮像対象を示す対象画像から得られる複数の対象画像間の間隔または対象画像の大きさを表す対象画像データを逐次取得する対象画像データ取得ステップと、
前記撮像画像における前記対象画像の位置に基づいて、前記表示装置の表示領域に対応する指示座標を算出する指示座標算出ステップと、
前記撮像画像における前記対象画像の位置に基づいて、前記入力装置の傾きを算出する傾き算出ステップと、
前記対象画像データの変化に応じて、表示画像の拡大または縮小を行う画像処理ステップと、
前記画像処理ステップにおいて処理された表示画像を前記表示装置に表示させる表示制御ステップとを、前記コンピュータに実行させ、
前記画像処理ステップは、前記対象画像データに基づいて、前記撮像手段と前記撮像対象との間の距離を逐次算出する距離算出ステップと、
前記操作キーが押下開始されたことを前記操作情報が示すとき、前記距離算出ステップで算出した距離をメモリに記憶する記憶制御ステップとを含み、
前記画像処理ステップでは、前記メモリに記憶された距離と前記操作キーが押下されていることを前記操作情報が示している間に前記距離算出ステップで算出する距離との距離差を逐次算出することによって、前記操作キーが押下されている期間における距離の変化を求める差分算出ステップが実行され、前記距離差に基づく前記距離の変化に応じて前記表示画像の拡大または縮小が行われ、前記指示座標の変化に基づいて前記表示画像の移動が行われ、前記傾きの変化に基づいて前記表示画像の回転が行われる、画像処理プログラム。
【請求項７】
前記画像処理ステップでは、前記距離の増加に応じて表示画像の拡大が行われ、前記距離の減少に応じて表示画像の縮小が行われる、請求項６に記載の画像処理プログラム。
【請求項８】
前記画像処理ステップでは、前記距離の増加に応じて表示画像の縮小が行われ、前記距離の減少に応じて表示画像の拡大が行われる、請求項６に記載の画像処理プログラム。
【請求項９】
前記画像処理ステップでは、前記距離の変化に応じて仮想空間内に配置された仮想カメラの位置を逐次変更することによって、前記表示画像の拡大または縮小が行われる、請求項６乃至８のいずれか１つに記載の画像処理プログラム。
【請求項１０】
前記画像処理ステップでは、前記距離の変化に応じて、前記表示画像を示す２次元画像の表示サイズを逐次変更し、
前記表示制御ステップでは、前記画像処理ステップで変更した表示サイズに応じた大きさで前記２次元画像を前記表示装置に表示させる、請求項６乃至８のいずれか１つに記載の画像処理プログラム。
【請求項１１】
表示装置に対して静置された複数の撮像対象を撮像するための撮像手段と、押下可能な少なくとも１つの操作キーとを備え、当該操作キーに対する押下状態に応じた操作情報を少なくとも出力する入力装置を用いた入力操作に応じて所定の画像処理を行い前記表示装置に画像を表示させるための画像処理システムであって、
前記操作情報を取得する操作情報取得手段と、
前記撮像手段の撮像画像において前記撮像対象を示す対象画像から得られる複数の対象画像間の間隔または対象画像の大きさを表す対象画像データを逐次取得する対象画像データ取得手段と、
前記撮像画像における前記対象画像の位置に基づいて、前記表示装置の表示領域に対応する指示座標を算出する指示座標算出手段と、
前記撮像画像における前記対象画像の位置に基づいて、前記入力装置の傾きを算出する傾き算出手段と、
前記対象画像データの変化に応じて、表示画像の拡大または縮小を行う画像処理手段と、
前記画像処理手段が処理した表示画像を前記表示装置に表示させる表示制御手段とを備え、
前記画像処理手段は、前記対象画像データに基づいて、前記撮像手段と前記撮像対象との間の距離を逐次算出する距離算出手段と、
前記操作キーが押下開始されたことを前記操作情報が示すとき、前記距離算出手段が算出した距離を記憶する記憶手段とを含み、
前記画像処理手段は、前記記憶手段に記憶された距離と前記操作キーが押下されていることを前記操作情報が示している間に前記距離算出手段が算出する距離との距離差を逐次算出することによって、前記操作キーが押下されている期間における距離の変化を求める差分算出手段を含み、前記距離差に基づく前記距離の変化に応じて前記表示画像の拡大または縮小を行い、前記指示座標の変化に基づいて前記表示画像の移動を行い、前記傾きの変化に基づいて前記表示画像の回転を行う、画像処理システム。
【請求項１２】
表示装置に対して静置された複数の撮像対象を撮像するための撮像手段と、押下可能な少なくとも１つの操作キーとを備え、当該操作キーに対する押下状態に応じた操作情報を少なくとも出力する入力装置を用いた入力操作に応じて画像処理を行い前記表示装置に画像を表示させるための、コンピュータが実行する画像処理方法であって、
前記操作情報を取得する操作情報取得ステップと、
前記撮像手段の撮像画像において前記撮像対象を示す対象画像から得られる複数の対象画像間の間隔または対象画像の大きさを表す対象画像データを前記コンピュータが逐次取得する対象画像データ取得ステップと、
前記撮像画像における前記対象画像の位置に基づいて、前記表示装置の表示領域に対応する指示座標を前記コンピュータが算出する指示座標算出ステップと、
前記撮像画像における前記対象画像の位置に基づいて、前記入力装置の傾きを前記コンピュータが算出する傾き算出ステップと、
前記対象画像データの変化に応じて、表示画像の拡大または縮小を前記コンピュータが行う画像処理ステップと、
前記画像処理ステップにおいて処理された表示画像を前記コンピュータが前記表示装置
に表示させる表示制御ステップとを含み、
前記画像処理ステップは、前記対象画像データに基づいて、前記撮像手段と前記撮像対象との間の距離を逐次算出する距離算出ステップと、
前記操作キーが押下開始されたことを前記操作情報が示すとき、前記距離算出ステップで算出した距離を前記コンピュータがメモリに記憶させる記憶制御ステップとを含み、
前記画像処理ステップでは、前記メモリに記憶された距離と前記操作キーが押下されていることを前記操作情報が示している間に前記距離算出ステップで算出する距離との距離差を逐次算出することによって、前記操作キーが押下されている期間における距離の変化を求める差分算出ステップが実行され、前記距離差に基づく前記距離の変化に応じて前記表示画像の拡大または縮小が行われ、前記指示座標の変化に基づいて前記表示画像の移動が行われ、前記傾きの変化に基づいて前記表示画像の回転が行われる、画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像処理装置、画像処理プログラム、画像処理システム、および画像処理方法に関し、より特定的には、撮像手段を備えた入力装置を用いて操作する画像処理装置、画像処理プログラム、画像処理システム、および画像処理方法に関する。
【背景技術】
【０００２】
従来、赤外線光源を標識として撮像し、その撮像結果を解析して照準位置を求める位置検出システムが開示されている（例えば、特許文献１参照）。
【０００３】
特許文献１では、位置検出システムの実施例として撮像装置が取り付けられた銃をゲームコントローラとして狙い撃ちするゲームを開示している。撮像装置は、ブラウン管の４隅に配設された赤外線光源を撮像対象として、当該撮像対象が撮像された撮像画像上の位置に応じて銃がブラウン管に対して指し示している位置を検出する。そして、銃が指し示している位置を照準位置として仮想的な射撃ゲームが実行される。なお、特許文献１の第２１段落に記載されているように、撮像装置と標的（標識）との距離を自由に変える場合、撮像装置に制御可能なズーム機能が備えられ、常に標識が最適な大きさで撮像されるようにズーム機能が制御されることによって、正確な照準位置が検出される。
【特許文献１】特開平１１−３０５９３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来、入力装置（ゲームコントローラ）と撮像対象との距離自体を操作入力に用いるという発想はない。例えば、上記特許文献１で開示された位置検出システムにおいても、撮像装置と標識との距離は補正のために用いられており、当該距離の変動は操作入力にとってはむしろ正確な操作を阻害する要因となっている。
【０００５】
それ故に、本発明の目的は、撮像手段を備えた入力装置を用いて自由度の高い新たな操作を実現する画像処理装置および画像処理プログラムを提供することである。
【課題を解決するための手段】
【０００６】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号、ステップ番号（ステップをＳと略称しステップ番号のみを記載する）、図面番号等は、本発明の理解を助けるために後述する最良の形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【０００７】
第１の発明は、撮像対象（８）を撮像するための撮像手段（７４）を備えた入力装置（７）を用いた入力操作に応じて所定の画像処理を行う画像処理装置（３）である。画像処理装置は、対象画像データ取得手段（Ｓ７２）、画像処理手段（Ｓ６０、Ｓ６２）、および表示制御手段（Ｓ６３）を備える。対象画像データ取得手段は、撮像手段の撮像画像において撮像対象を示す対象画像から得られる複数の対象画像間の間隔または対象画像の大きさを表す対象画像データ（ｍｉ、ｄｉａｍＬ、ｄｉａｍＲ）を逐次取得する。画像処理手段は、対象画像データの変化に応じて、表示画像の拡大または縮小を行う。表示制御手段は、画像処理手段が処理した表示画像を表示装置（２）に表示させる。なお、対象画像データは、複数の撮像対象を撮像した撮像画像における複数の対象画像間の距離や、単一の撮像対象を撮像した撮像画像における単一の対象画像の大きさ（例えば、直径や幅）等を示すデータが含まれる。
【０００８】
第２の発明は、上記第１の発明において、画像処理手段は、距離算出手段（Ｓ５３、Ｓ８３）および拡大縮小手段を含む。距離算出手段は、対象画像データに基づいて、撮像手段と撮像対象との間の距離（ｒｅａｌＤ）を逐次算出する。拡大縮小手段は、距離の変化に応じて表示画像の拡大または縮小を行う。
【０００９】
第３の発明は、上記第２の発明において、画像処理手段は、所定の期間における距離の変化に応じて表示画像の拡大または縮小を行う。
【００１０】
第４の発明は、上記第３の発明において、入力装置は、押下可能な少なくとも１つの操作キー（７２）を備え、その操作キーに対する押下状態に応じた操作情報（Ｄａ３）を少なくとも出力するものである。画像処理装置は、操作情報取得手段（Ｓ５１、Ｓ８１）および記憶手段（Ｓ５６）を、さらに備える。操作情報取得手段は、操作情報を取得する。記憶手段は、操作キーが押下開始されたことを操作情報が示すとき、距離算出手段が算出した距離を記憶する（３３）。画像処理手段は、差分算出手段（Ｓ５８）を含む。差分算出手段は、記憶手段に記憶された距離（ｉｎｉｔＤ）と操作キーが押下されていることを操作情報が示している間に距離算出手段が算出する距離（ｒｅａｌＤ）との距離差（ｍｏｖｅＤ）を逐次算出することによって、操作キーが押下されている期間を所定の期間とした距離の変化を求める。画像処理手段は、距離差に基づいて表示画像の拡大または縮小を行う。
【００１１】
第５の発明は、上記第２〜第４の発明の何れかにおいて、画像処理手段は、距離の増加に応じて表示画像の拡大を行い、距離の減少に応じて表示画像の縮小を行う（Ｓ＞０）。
【００１２】
第６の発明は、上記第２〜第４の発明の何れかにおいて、画像処理手段は、距離の増加に応じて表示画像の縮小を行い、距離の減少に応じて表示画像の拡大を行う（Ｓ＜０）。
【００１３】
第７の発明は、上記第２の発明において、指示座標算出手段を、さらに備える。指示座標算出手段は、撮像画像における対象画像の位置に基づいて、表示装置の表示領域に対応する指示座標を算出する。画像処理手段は、指示座標の変化に基づいて、表示画像の移動をさらに行う（図１３（ａ））。
【００１４】
第８の発明は、上記第２の発明において、傾き算出手段を、さらに備える。傾き算出手段は、撮像画像における対象画像の位置に基づいて、入力装置の傾きを算出する。画像処理手段は、傾きの変化に基づいて、表示画像の回転をさらに行う（図１３（ｂ））。
【００１５】
第９の発明は、上記第２の発明において、画像処理手段は、距離の変化に応じて仮想空間内に配置された仮想カメラの位置を逐次変更することによって、表示画像の拡大または縮小を行う。
【００１６】
第１０の発明は、上記第２の発明において、画像処理手段は、距離の変化に応じて２次元画像の表示サイズを逐次変更することによって、表示画像の拡大または縮小を行う。
【００１７】
第１１の発明は、上記第１の発明において、速度算出手段（Ｓ８４）を、さらに備える。速度算出手段は、対象画像データに応じて、撮像対象に対して入力装置が移動する速度（ｖｅｌＤ）を逐次算出する。画像処理手段は、速度に応じて表示画像の拡大または縮小を行う。
【００１８】
第１２の発明は、撮像対象を撮像するための撮像手段を備えた入力装置を用いた入力操作に応じて画像処理を行うコンピュータ（３０）で実行される画像処理プログラムである。画像処理プログラムは、対象画像データ取得ステップ、画像処理ステップ、および表示制御ステップを、コンピュータに実行させる。対象画像データ取得ステップは、撮像手段の撮像画像において撮像対象を示す対象画像から得られる複数の対象画像間の間隔または対象画像の大きさを表す対象画像データを逐次取得する。画像処理ステップは、対象画像データの変化に応じて、表示画像の拡大または縮小を行う。表示制御ステップは、画像処理手段が処理した表示画像を表示装置に表示させる。
【００１９】
第１３の発明は、上記第１２の発明において、画像処理ステップは、距離算出ステップおよび拡大縮小ステップを含む。距離算出ステップは、対象画像データに基づいて、前記撮像手段と前記撮像対象との間の距離を逐次算出する。拡大縮小ステップは、距離の変化に応じて表示画像の拡大または縮小を行う。
【００２０】
第１４の発明は、上記第１３の発明において、画像処理ステップでは、所定の期間における距離の変化に応じて表示画像の拡大または縮小が行われる。
【００２１】
第１５の発明は、上記第１４の発明において、入力装置は、押下可能な少なくとも１つの操作キーを備え、その操作キーに対する押下状態に応じた操作情報を少なくとも出力するものである。画像処理プログラムは、操作情報取得ステップおよび記憶制御ステップを、さらにコンピュータに実行させる。操作情報取得ステップは、操作情報を取得する。記憶制御ステップは、操作キーが押下開始されたことを操作情報が示すとき、距離算出ステップで算出した距離をメモリに記憶する。画像処理ステップは、差分算出ステップを含む。差分算出ステップは、メモリに記憶された距離と操作キーが押下されていることを操作情報が示している間に距離算出ステップで算出する距離との距離差を逐次算出することによって、操作キーが押下されている期間を所定の期間とした距離の変化を求める。画像処理ステップでは、距離差に基づいて表示画像の拡大または縮小が行われる。
【００２２】
第１６の発明は、上記第１３〜第１５の発明の何れかにおいて、画像処理ステップでは、距離の増加に応じて表示画像の拡大が行われ、距離の減少に応じて表示画像の縮小が行われる。
【００２３】
第１７の発明は、上記第１３〜第１５の発明の何れかにおいて、画像処理ステップでは、距離の増加に応じて表示画像の縮小が行われ、距離の減少に応じて表示画像の拡大が行われる。
【００２４】
第１８の発明は、上記第１３の発明において指示座標算出ステップを、さらにコンピュータに実行させる。指示座標算出ステップは、撮像画像における対象画像の位置に基づいて、表示装置の表示領域に対応する指示座標を算出する。画像処理ステップでは、指示座標の変化に基づいて、表示画像の移動がさらに行われる。
【００２５】
第１９の発明は、上記第１３の発明において、傾き算出ステップを、さらにコンピュータに実行させる。傾き算出ステップは、撮像画像における対象画像の位置に基づいて、入力装置の傾きを算出する。画像処理ステップでは、傾きの変化に基づいて、表示画像の回転がさらに行われる。
【００２６】
第２０の発明は、上記第１３の発明において、画像処理ステップでは、距離の変化に応じて仮想空間内に配置された仮想カメラの位置を逐次変更することによって、表示画像の拡大または縮小が行われる。
【００２７】
第２１の発明は、上記第１３の発明において、画像処理ステップでは、距離の変化に応じて２次元画像の表示サイズを逐次変更することによって、表示画像の拡大または縮小が行われる。
【００２８】
第２２の発明は、上記第１２の発明において、速度算出ステップを、さらにコンピュータに実行させる。速度算出ステップは、対象画像データに応じて、撮像対象に対して入力装置が移動する速度を逐次算出する。画像処理ステップでは、速度に応じて表示画像の拡大または縮小が行われる。
【発明の効果】
【００２９】
上記第１の発明によれば、対象画像から得られる複数の対象画像間の間隔または対象画像の大きさを表す対象画像データ（複数の撮像対象を撮像した撮像画像における複数の対象画像間の距離や、単一の撮像対象を撮像した撮像画像における単一の対象画像の直径や幅などのサイズや面積等）に応じて、表示画像の拡大／縮小処理が可能となり、直感的で新規な画像処理操作が実現できる。
【００３０】
上記第２の発明によれば、対象画像から得られる対象画像データから、入力装置と撮像対象との間の距離を得ることができるため、当該距離を利用した直感的で新規な操作が実現できる。
【００３１】
上記第３の発明によれば、表示画像の拡大／縮小を行う期間を限定することにより拡大／縮小の制御がしやすい。
【００３２】
上記第４の発明によれば、操作キーが押下されているときのみに表示画像の拡大／縮小を行う期間が限定されるため、ユーザによる拡大／縮小の制御がしやすい。
【００３３】
上記第５の発明によれば、表示装置に表示されている画像を掴んでいるような感覚で直感的な操作が可能となる。
【００３４】
上記第６の発明によれば、表示装置に表示されている画像を撮像するカメラを操作しているような感覚で直感的な操作が可能となる。
【００３５】
上記第７の発明によれば、表示装置に表示されている画像を掴んで上下左右に移動させるような操作も可能となり、距離に加えて入力装置の位置も利用することで、より複雑かつ直感的な操作が可能となる。
【００３６】
上記第８の発明によれば、表示装置に表示されている画像を掴んで回転させるような操作も可能となり、距離に加えて入力装置の傾きも利用することで、より複雑かつ直感的な操作が可能となる。
【００３７】
上記第９の発明によれば、仮想空間内を表示装置で表示する際、表示する画像の拡大／縮小を容易に行うことができる。
【００３８】
上記第１０の発明によれば、２次元画像を表示装置で表示する際、表示する画像の拡大／縮小を容易に行うことができる。
【００３９】
上記第１１の発明によれば、対象画像から得られる対象画像データから、撮像対象に対して入力装置が移動する速度を得ることができるため、当該速度を利用した直感的で新規な操作が実現できる。
【００４０】
本発明の画像処理プログラムによれば、コンピュータで実行することによって上述した画像処理装置と同様の効果を得ることができる。
【発明を実施するための最良の形態】
【００４１】
図１を参照して、本発明の一実施形態に係る画像処理装置について説明する。以下、説明を具体的にするために、当該画像処理装置を用いたゲームシステム１を一例として説明する。なお、図１は、当該ゲームシステム１を説明するための外観図である。以下、本発明の画像処理装置の一例として据置型ゲーム装置を用いて、当該ゲームシステム１について説明する。
【００４２】
図１において、当該ゲームシステム１は、家庭用テレビジョン受像機等のスピーカ２ａを備えたディスプレイ（以下、モニタと記載する）２に、接続コードを介して接続される据置型ゲーム装置（以下、単にゲーム装置と記載する）３および当該ゲーム装置３に操作情報を与えるコントローラ７によって構成される。ゲーム装置３は、接続端子を介して受信ユニット６が接続される。受信ユニット６は、コントローラ７から無線送信される送信データを受信し、コントローラ７とゲーム装置３とは無線通信によって接続される。また、ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例の光ディスク４が脱着される。ゲーム装置３の上部主面には、当該ゲーム装置３の電源ＯＮ／ＯＦＦスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置３上部の蓋を開くＯＰＥＮスイッチが設けられている。ここで、プレイヤがＯＰＥＮスイッチを押下することによって上記蓋が開き、光ディスク４の脱着が可能となる。
【００４３】
また、ゲーム装置３には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ２に表示する。なお、本発明の画像処理プログラムは、光ディスク４に記憶されたゲームプログラムの一部に含まれているものとする。さらに、ゲーム装置３は、外部メモリカード５に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００４４】
コントローラ７は、その内部に備える通信部７５（後述）から受信ユニット６が接続されたゲーム装置３へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて送信データを無線送信する。コントローラ７は、主にモニタ２に表示されるゲーム空間に登場するプレイヤオブジェクトを操作するための操作手段である。コントローラ７は、複数の操作ボタン、キー、およびスティック等の操作部が設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７から見た画像を撮像する撮像情報演算部７４を備えている。また、撮像情報演算部７４の撮像対象の一例として、モニタ２の表示画面近傍に２つのＬＥＤモジュール（以下、マーカと記載する）８Ｌおよび８Ｒが設置される。これらマーカ８Ｌおよび８Ｒは、それぞれモニタ２の前方に向かって赤外光を出力する。
【００４５】
次に、図２を参照して、ゲーム装置３の構成について説明する。なお、図２は、ゲーム装置３の機能ブロック図である。
【００４６】
図２において、ゲーム装置３は、各種プログラムを実行する例えばリスク（ＲＩＳＣ）ＣＰＵ（セントラルプロセッシングユニット）３０を備える。ＣＰＵ３０は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、メインメモリ３３等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムの実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。ＣＰＵ３０には、メモリコントローラ３１を介して、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３２、メインメモリ３３、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３４、およびＡＲＡＭ（Ａｕｄｉｏ  ＲＡＭ）３５が接続される。また、メモリコントローラ３１には、所定のバスを介して、コントローラＩ／Ｆ（インターフェース）３６、ビデオＩ／Ｆ３７、外部メモリＩ／Ｆ３８、オーディオＩ／Ｆ３９、およびディスクＩ／Ｆ４１が接続され、それぞれ受信ユニット６、モニタ２、外部メモリカード５、スピーカ２ａ、およびディスクドライブ４０が接続されている。
【００４７】
ＧＰＵ３２は、ＣＰＵ３０の命令に基づいて画像処理を行うものあり、例えば、３Ｄグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。ＧＰＵ３２は、図示しない画像処理専用のメモリやメインメモリ３３の一部の記憶領域を用いて画像処理を行う。ＧＰＵ３２は、これらを用いてモニタ２に表示すべきゲーム画像データやムービ映像を生成し、適宜メモリコントローラ３１およびビデオＩ／Ｆ３７を介してモニタ２に出力する。
【００４８】
メインメモリ３３は、ＣＰＵ３０で使用される記憶領域であって、ＣＰＵ３０の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ３３は、ＣＰＵ３０によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ３３に記憶されたゲームプログラムや各種データ等がＣＰＵ３０によって実行される。
【００４９】
ＤＳＰ３４は、ゲームプログラム実行時にＣＰＵ３０において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのＡＲＡＭ３５が接続される。ＡＲＡＭ３５は、ＤＳＰ３４が所定の処理（例えば、先読みしておいたゲームプログラムやサウンドデータの記憶）を行う際に用いられる。ＤＳＰ３４は、ＡＲＡＭ３５に記憶されたサウンドデータを読み出し、メモリコントローラ３１およびオーディオＩ／Ｆ３９を介してモニタ２に備えるスピーカ２ａに出力させる。
【００５０】
メモリコントローラ３１は、データ転送を統括的に制御するものであり、上述した各種Ｉ／Ｆが接続される。コントローラＩ／Ｆ３６は、例えば４つのコントローラＩ／Ｆ３６ａ〜３６ｄで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置３とを通信可能に接続する。例えば、受信ユニット６は、上記コネクタと嵌合し、コントローラＩ／Ｆ３６を介してゲーム装置３と接続される。上述したように受信ユニット６は、コントローラ７からの送信データを受信し、コントローラＩ／Ｆ３６を介して当該送信データをＣＰＵ３０へ出力する。ビデオＩ／Ｆ３７には、モニタ２が接続される。外部メモリＩ／Ｆ３８には、外部メモリカード５が接続され、その外部メモリカード５に設けられたバックアップメモリ等とアクセス可能となる。オーディオＩ／Ｆ３９にはモニタ２に内蔵されるスピーカ２ａが接続され、ＤＳＰ３４がＡＲＡＭ３５から読み出したサウンドデータやディスクドライブ４０から直接出力されるサウンドデータをスピーカ２ａから出力可能に接続される。ディスクＩ／Ｆ４１には、ディスクドライブ４０が接続される。ディスクドライブ４０は、所定の読み出し位置に配置された光ディスク４に記憶されたデータを読み出し、ゲーム装置３のバスやオーディオＩ／Ｆ３９に出力する。
【００５１】
図３および図４を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面後方から見た斜視図である。
【００５２】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００５３】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、矢印で示す４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
【００５４】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、リング状に４方向の操作部分を備えたプッシュスイッチとその中央に設けられたセンタスイッチとを複合した複合スイッチを上記十字キー７２ａの代わりに設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。また、少なくとも４つの方向（前後左右）をそれぞれ示すスイッチに対して、プレイヤによって押下されたスイッチに応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。
【００５５】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、Ｘボタン、Ｙボタン、およびＢボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、セレクトスイッチ、メニュースイッチ、およびスタートスイッチ等としての機能が割り当てられる。これら操作ボタン７２ｂ〜７２ｇは、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５６】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置３本体の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５７】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７から受信ユニット６へ送信データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ７０２のうち、種別に対応するＬＥＤが点灯する。
【００５８】
一方、ハウジング７１下面には、凹部が形成されている。後述で明らかとなるが、ハウジング７１下面の凹部は、プレイヤがコントローラ７を把持したときに当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の後面側傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＡボタンとして機能する操作部であり、シューティングゲームにおけるトリガスイッチや、プレイヤオブジェクトを所定オブジェクトに対して注目させる操作等に用いられる。なお、本発明では、操作ボタン７２ｉがモニタ２に表示された表示物を掴むような操作をするためのドラッグボタンとして機能し、操作ボタン７２ｉを押下することによってモニタ２に表示された表示物を掴むことができる。
【００５９】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えば３２ピンのエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００６０】
次に、図５を参照して、コントローラ７の内部構造について説明する。なお、図５（ａ）は、コントローラ７の上筐体（ハウジング７１の一部）を外した状態を示す斜視図である。図５（ｂ）は、コントローラ７の下筐体（ハウジング７１の一部）を外した状態を示す斜視図である。ここで、図５（ｂ）に示す基板７００は、図５（ａ）に示す基板７００の裏面から見た斜視図となっている。
【００６１】
図５（ａ）において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、水晶振動子７０３、無線モジュール７５３、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１（図６参照）に接続される。また、無線モジュール７５３およびアンテナ７５４によって、コントローラ７がワイヤレスコントローラとして機能する。なお、水晶振動子７０３は、後述するマイコン７５１の基本クロックを生成する。
【００６２】
一方、図５（ｂ）において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。そして、操作ボタン７２ｉが撮像情報演算部７４の後方の基板７００の下主面上に取り付けられていて、それよりさらに後方に、電池７０５が収容される。電池７０５とコネクタ７３との間の基板７００の下主面上には、バイブレータ７０４が取り付けられる。このバイブレータ７０４は、例えば振動モータやソレノイドであってよい。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。
【００６３】
次に、図６を参照して、コントローラ７の内部構成について説明する。なお、図６は、コントローラ７の構成を示すブロック図である。
【００６４】
図６において、コントローラ７は、上述した操作部７２および撮像情報演算部７４の他に、その内部に通信部７５および加速度センサ７０１を備えている。
【００６５】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標やそれらの面積、直径、幅等を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。後述により明らかとなるが、この撮像情報演算部７４から出力される処理結果データに基づいて、コントローラ７の位置や動きに応じた信号を得ることができる。
【００６６】
加速度センサ７０１は、コントローラ７の上下方向、左右方向、および前後方向の３軸でそれぞれ加速度を検知する加速度センサである。なお、加速度センサ７０１は、必要な操作信号の種類によっては、上下方向および左右方向の２軸でそれぞれ加速度を検出する加速度センサが用いられてもかまわない。加速度センサ７０１が検知した加速度を示すデータは、通信部７５へ出力される。なお、加速度センサ７０１は、典型的には静電容量式の加速度センサが用いられるが、他の方式の加速度センサを用いてもかまわない。この加速度センサ７０１から出力される加速度データに基づいて、マイコン７５１やＣＰＵ３０などのコンピュータを利用したソフトウェア処理によってコントローラ７の動きを算出することができる。
【００６７】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。
【００６８】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの加速度信号（加速度データ）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、加速度データ、処理結果データ）を受信ユニット６へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から受信ユニット６への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、受信ユニット６への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて、所定周波数の搬送波を用いて操作情報をその電波信号としてアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からの加速度データ、および撮像情報演算部７４からの処理結果データがコントローラ７から送信される。そして、ゲーム装置３の受信ユニット６でその電波信号を受信し、ゲーム装置３で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、加速度データ、および処理結果データ）を取得する。そして、ゲーム装置３のＣＰＵ３０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Ｂｌｕｅｔｏｏｔｈ（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００６９】
図７に示すように、ゲームシステム１でコントローラ７を用いてゲームをプレイするためには、プレイヤは、一方の手（例えば右手）でコントローラ７を把持する（図８および図９参照）。そして、プレイヤは、コントローラ７の前面（撮像情報演算部７４が撮像する光の入射口側）がモニタ２に向くようにコントローラ７を把持する。一方、モニタ２の表示画面近傍には、２つのマーカ８Ｌおよび８Ｒが設置される。これらマーカ８Ｌおよび８Ｒは、それぞれモニタ２の前方に向かって赤外光を出力し、撮像情報演算部７４の撮像対象となる。
【００７０】
プレイヤがその前面がモニタ２に向くようにコントローラ７を把持することによって、撮像情報演算部７４には２つのマーカ８Ｌおよび８Ｒが出力した赤外光が入射する。そして、赤外線フィルタ７４１およびレンズ７４２を介して、入射した赤外光を撮像素子７４３が撮像し、当該撮像画像を画像処理回路７４４が処理する。ここで、撮像情報演算部７４では、マーカ８Ｌおよび８Ｒから出力される赤外線成分を検出することで、上記撮像画像における当該マーカ８Ｌおよび８Ｒの位置情報（対象画像の位置）や面積、直径、幅等のサイズ情報を取得する。具体的には、画像処理回路７４４は、撮像素子７４３が撮像した画像データを解析して、まず面積情報からマーカ８Ｌおよび８Ｒからの赤外光ではあり得ない画像を除外し、さらに輝度が高い点をマーカ８Ｌおよび８Ｒそれぞれの位置として判別する。そして、撮像情報演算部７４は、判別されたそれらの輝点の重心位置等の位置情報を取得し、上記処理結果データとして出力する。ここで、上記処理結果データである位置情報は、撮像画像における所定の基準点（例えば、撮像画像の中央や左上隅）を原点とした座標値として出力するものでもよく、所定のタイミングにおける輝点位置を基準点として、当該基準位置からの現在の輝点位置の差をベクトルとして出力するものでもよい。つまり、上記対象画像の位置情報は、撮像素子７４３が撮像した撮像画像に対して所定の基準点を設定した場合に、当該基準点に対する差として用いられるパラメータである。このような位置情報をゲーム装置３へ送信することによって、ゲーム装置３では、基準からの上記位置情報の差に基づいて、マーカ８Ｌおよび８Ｒに対する撮像情報演算部７４、すなわちコントローラ７の動き、姿勢、位置等に応じた信号の変化量を得ることができる。具体的には、コントローラ７が動かされることによって、通信部７５から送信される画像内の高輝度点の位置が変化するため、高輝度点の位置の変化に対応させた方向入力や座標入力を行うことで、３次元空間に対してコントローラ７の移動方向に沿った方向入力や座標入力を行うことができる。なお、後述するゲーム処理動作例では、撮像情報演算部７４が撮像画像におけるマーカ８Ｌおよび８Ｒの対象画像それぞれの重心位置の座標を少なくとも取得し、上記処理結果データとして出力する例を用いる。
【００７１】
また、撮像情報演算部７４が撮像画像におけるマーカ８Ｌおよび８Ｒの対象画像それぞれの面積、直径、および幅等の何れかを示すサイズ情報を利用することによって、さらに詳細な３次元空間に対するコントローラ７の位置を解析できる。具体的には、ゲーム装置３では、マーカ８Ｌおよび８Ｒに対して斜めの位置から撮像情報演算部７４によって撮像された、すなわちモニタ２に対して斜めの位置からコントローラ７を操作した場合でも、そのマーカ８Ｌおよび８Ｒからの距離を求めることが可能となる。後述するゲーム処理動作例では、ゲーム装置３が上記重心位置の座標に加えて上記サイズ情報も処理結果データとして取得する態様も説明する。
【００７２】
このように、コントローラ７の撮像情報演算部７４によって、固定的に設置されたマーカ（実施例では、２つのマーカ８Ｌおよび８Ｒからの赤外光）を撮像することによって、ゲーム装置３におけるゲーム処理において、コントローラ７から出力されるデータを処理してコントローラ７の動き、姿勢、位置等に対応した操作が可能となり、ボタンを押下するような操作ボタンや操作キーとは異なった直感的な操作入力となる。また、上述したように上記マーカは、モニタ２の表示画面近傍に設置されているため、マーカに対する位置をモニタ２の表示画面に対するコントローラ７の動き、姿勢、位置等に換算することも容易に行うことができる。つまり、コントローラ７の動き、姿勢、位置等による処理結果データは、モニタ２の表示画面に直接作用する操作入力として用いることができる。なお、ゲームシステム１では、マーカ８Ｌおよび８Ｒを撮像した撮像画像を用いて、マーカ８Ｌおよび８Ｒからコントローラ７までの距離もモニタ２の表示画面に直接作用する操作入力として用いることができるが、詳細な動作については後述する。
【００７３】
図８および図９を参照して、プレイヤがコントローラ７を一方の手で把持した状態について説明する。なお、図８は、プレイヤがコントローラ７を右手で把持した状態をコントローラ７の前面側から見た一例である。図９は、プレイヤがコントローラ７を右手で把持した状態をコントローラ７の左側面側から見た一例である。
【００７４】
図８および図９に示すように、コントローラ７は、全体として大人や子供の片手で把持可能な大きさである。そして、プレイヤの親指をコントローラ７の上面（例えば、十字キー７２ａ付近）に添え、プレイヤの人差し指をコントローラ７下面の凹部（例えば、操作ボタン７２ｉ付近）に添えたとき、コントローラ７の前面に設けられている撮像情報演算部７４の光入射口がプレイヤの前方方向に露出する。なお、このようなコントローラ７に対する把持状態は、プレイヤの左手であっても同様に行えることは言うまでもない。
【００７５】
このように、コントローラ７は、プレイヤが片手で把持した状態で十字キー７２ａや操作ボタン７２ｉ等の操作部７２を容易に操作することができる。さらに、プレイヤがコントローラ７を片手で把持したとき、当該コントローラ７の前面に設けられている撮像情報演算部７４の光入射口が露出するため、上述した２つのマーカ８Ｌおよび８Ｒからの赤外光を容易に当該光入射口から取り入れることができる。つまり、プレイヤは、コントローラ７が有する撮像情報演算部７４の機能を阻害することなくコントローラ７を片手で把持することができる。したがって、プレイヤがコントローラ７を把持した手を表示画面に対して動かすことによって、コントローラ７は、プレイヤの手の運動が表示画面に直接作用する操作入力機能をさらに備えることができる。
【００７６】
ここで、図１０に示すように、マーカ８Ｌおよび８Ｒは、それぞれ視野角θ１を有している。また、撮像素子７４３は、視野角θ２を有している。例えば、マーカ８Ｌおよび８Ｒの視野角θ１は共に３４°（半値角）であり、撮像素子７４３の視野角θ２は４１°である。そして、撮像素子７４３の視野角θ２の中にマーカ８Ｌおよび８Ｒが共に存在し、マーカ８Ｌの視野角θ１の中でかつマーカ８Ｒの視野角θ１の中に撮像素子７４３が存在するとき、ゲーム装置３は、２つのマーカ８Ｌおよび８Ｒによる高輝度点に関する位置データを用いてコントローラ７の位置（マーカ８Ｌおよび８Ｒからの距離を含む）を算出する。
【００７７】
次に、図１１および図１２を参照して、プレイヤの操作に応じてモニタ２に表示される画面例について説明する。なお、図１１は、プレイヤＵがマーカ８Ｌおよび８Ｒに対して前後方向へ操作する一例を示す上面図である。図１２は、図１１に示した操作に応じて、モニタ２に表示される画面例を示す図である。
【００７８】
図１１において、プレイヤＵは、コントローラ７の前面をマーカ８Ｌおよび８Ｒ（モニタ２）に向けて、当該コントローラ７を把持している。そして、マーカ８Ｌおよび８Ｒの中点からコントローラ７の前面までの距離を距離ｒｅａｌＤとする。ここで、図１１に示す状態Ａでは、プレイヤＵが距離ｒｅａｌＤ０となる位置でコントローラ７を把持している。そして、プレイヤＵは、コントローラ７をモニタ２に向かって前後に動かすことによって、マーカ８Ｌおよび８Ｒの中点からコントローラ７の前面までの距離ｒｅａｌＤを変化させることができる。例えば、プレイヤＵが操作ボタン７２ｉ（ドラッグボタン）を押下した状態でコントローラ７をモニタ２に向かって前に動かすことによって、距離ｒｅａｌＤ０から距離ｒｅａｌＤｎの位置へコントローラ７を動かしている（状態Ｂ）。また、プレイヤＵが操作ボタン７２ｉ（ドラッグボタン）を押下した状態でコントローラ７をモニタ２に向かって後ろに動かすことによって、距離ｒｅａｌＤ０から距離ｒｅａｌＤｆの位置へコントローラ７を動かしている（状態Ｃ）。
【００７９】
図１２（ａ）は、上記状態Ａにおいてモニタ２に表示される画面例である。図１２（ｂ）は、上記状態Ｂにおいてモニタ２に表示される画面例である。図１２（ｃ）は、上記状態Ｃにおいてモニタ２に表示される画面例である。図１２（ａ）において、モニタ２には、状態Ａにおいてパズルが記述された領域（オブジェクトＯＢＪ）の一部が表示されている。図１２（ｂ）において、モニタ２には、状態Ａにおいて表示されていたオブジェクトＯＢＪが縮小され、当該オブジェクトＯＢＪ全体が表示されている。つまり、プレイヤＵは、操作ボタン７２ｉを押下した状態でコントローラ７をモニタ２に近づけることによって、モニタ２に表示された表示物を縮小して表示することができる。一方、図１２（ｃ）において、モニタ２には、状態Ａにおいて表示されていたオブジェクトＯＢＪが拡大されて表示されている。つまり、プレイヤＵは、操作ボタン７２ｉを押下した状態でコントローラ７をモニタ２から遠ざけることによって、モニタ２に表示された表示物を拡大して表示することができる。
【００８０】
さらに、プレイヤＵは、操作ボタン７２ｉを押下した状態でコントローラ７をモニタ２に対して上下左右に動かしたり、コントローラ７を左右にひねったりすることよって、モニタ２に表示された表示物を移動させて表示することができる。図１３（ａ）に示すように、プレイヤＵが操作ボタン７２ｉを押下した状態でコントローラ７をモニタ２に対して上下左右に動かすことによって、オブジェクトＯＢＪが上下左右に移動して表示される。また、図１３（ｂ）に示すように、プレイヤＵが操作ボタン７２ｉを押下した状態でコントローラ７をひねることによって、オブジェクトＯＢＪが左右に回転移動して表示される。
【００８１】
次に、ゲームシステム１において行われるゲーム処理の詳細を説明する。まず、図１４を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図１４は、ゲーム装置３のメインメモリ３３に記憶される主なデータを示す図である。
【００８２】
図１４に示すように、メインメモリ３３には、操作情報Ｄａ、操作状態情報Ｄｂ、および表示情報Ｄｃ等が記憶される。なお、メインメモリ３３には、図１４に示す情報に含まれるデータの他、ゲーム処理に必要なデータが適宜記憶される。
【００８３】
操作情報Ｄａは、コントローラ７から送信データとして送信されてくる一連の操作情報であり、最新の操作情報に更新される。操作情報Ｄａには、上述の処理結果データの位置情報に相当する第１座標データＤａ１および第２座標データＤａ２が含まれる。第１座標データＤａ１は、撮像素子７４３が撮像した撮像画像に対して、２つのマーカ８Ｌおよび８Ｒのうちの一方の画像の位置（撮像画像内における位置）を表す座標のデータである。第２座標データＤａ２は、他方のマーカの画像の位置（撮像画像内における位置）を表す座標のデータである。例えば、マーカの画像の位置は、撮像画像におけるＸＹ座標系によって表される。
【００８４】
また、操作情報Ｄａには、撮像画像から得られる処理結果データの一例の座標データ（第１座標データＤａ１および第２座標データＤａ２）の他、操作部７２から得られるキーデータＤａ３等が含まれる。なお、ゲーム装置３に備える受信ユニット６は、コントローラ７から所定間隔例えば５ｍｓごとに送信される操作情報Ｄａを受信し、受信ユニット６に備える図示しないバッファに蓄えられる。その後、ゲーム処理間隔である例えば１フレーム毎（１／６０秒）に読み出され、その最新の情報がメインメモリ３３に記憶される。
【００８５】
操作状態情報Ｄｂは、コントローラ７の操作状態を撮像画像に基づいて判断した情報である。操作状態情報Ｄｂは、撮像画像に含まれる対象画像（マーカ）の位置や向きから得られるデータであり、具体的には、方向データＤｂ１、中点データＤｂ２、現在距離データＤｂ３、初期処理データＤｂ４、およびドラッグフラグＤｂ５等を含む。方向データＤｂ１は、第１座標データＤａ１から第２座標データＤａ２への方向を示すデータである。ここでは、方向データＤｂ１は、第１座標データＤａ１の位置を始点とし第２座標データＤａ２の位置を終点とするベクトルのデータとする。中点データＤｂ２は、第１座標データＤａ１と第２座標データＤａ２との中点の座標を示す。ここで、２つのマーカ（マーカ８Ｌおよび８Ｒ）の画像を１つの対象画像としてみた場合、中点データＤｂ２は、対象画像の位置を示すことになる。現在距離データＤｂ３は、第１座標データＤａ１および第２座標データＤａ２に基づいて算出された、マーカ８Ｌおよび８Ｒからコントローラ７までの現在距離ｒｅａｌＤを示すデータである。初期距離データＤｂ４は、所定タイミング（例えば、ドラッグボタンを押下開始したタイミング）におけるマーカ８Ｌおよび８Ｒからコントローラ７までの距離ｉｎｉｔＤを示すデータである。ドラッグフラグＤｂ５は、プレイヤがドラッグボタンを押下しているか否かを区別するためのドラッグフラグｉｓＤｒａｇを示すデータである。
【００８６】
表示情報Ｄｃは、仮想現在距離データＤｃ１、仮想初期距離データＤｃ２、スケールデータＤｃ３、カメラ行列データＤｃ４、および画像データＤｃ５を含んでいる。仮想現在距離データＤｃ１は、現在距離ｒｅａｌＤをモニタ２に表現される仮想空間における距離に置換した仮想現在距離ｖｉｒｔｕａｌＤを示すデータである。仮想初期距離データＤｃ２は、所定タイミング（例えば、ドラッグボタンを押下開始したタイミング）における仮想現在距離ｖｉｒｔｕａｌＤを仮想初期距離ｉｎｉｔ＿ｖｉｒｔｕａｌＤとして示すデータである。スケールデータＤｃ３は、モニタ２に仮想空間を表現するための仮想カメラの視野の大きさを示すスケール値ｓｃａｌｅを示すデータである。カメラ行列データＤｃ４は、仮想カメラにおけるカメラの移動、ズーム、向きの回転、位置の回転等が適用されるカメラ行列を示すデータである。画像データＤｃ５は、オブジェクトＯＢＪ等を配置してモニタ２に表示する画像を生成するためのデータである。
【００８７】
次に、図１５〜図１７を参照して、ゲーム装置３において行われるゲーム処理の詳細を説明する。なお、図１５は、ゲーム装置３において実行されるゲーム処理の流れを示すフローチャートである。図１６は、図１５におけるステップ５３の距離算出処理の詳細な動作を示すサブルーチンである。図１７は、現在距離ｒｅａｌＤを算出する動作を説明するための図である。なお、図１５および図１６に示すに示すフローチャートにおいては、処理のうち、ゲームプログラムに含まれる画像処理プログラムを実行してコントローラ７に関する操作に基づいて行われる画像拡大／縮小処理について説明し、本願発明と直接関連しない他の処理については詳細な説明を省略する。また、図１５および図１６では、ＣＰＵ３０が実行する各ステップを「Ｓ」と略称する。
【００８８】
ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ３０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ３３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリ３３に読み込まれ、ＣＰＵ３０によって当該ゲームプログラムの実行が開始される。図１５および図１６に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【００８９】
図１５において、ＣＰＵ３０は、コントローラ７から受信した操作情報を取得し（ステップ５１）、処理を次のステップに進める。そして、ＣＰＵ３０は、操作情報を操作情報Ｄａとしてメインメモリ３３に記憶する。ここで、ステップ５１で取得される操作情報には、マーカ８Ｌおよび８Ｒの撮像画像内における位置を示す座標データ（第１座標データＤａ１および第２座標データＤａ２）の他、コントローラ７の操作部７２がどのように操作されたか示すデータ（キーデータＤａ３）が含まれている。ここでは、通信部７５は、所定の時間間隔（例えば５ｍｓ間隔）で操作情報をゲーム装置３へ送信する。そして、ＣＰＵ３０は、１フレーム毎に操作情報を利用するものとする。したがって、図１５に示すステップ５１〜ステップ６４の処理ループは、１フレーム毎に繰り返し実行される。
【００９０】
次に、ＣＰＵ３０は、キーデータＤａ３を参照し、ドラッグボタンが押下されているか否かを判断する（ステップ５２）。そして、ＣＰＵ３０は、ドラッグボタンが押下されている場合、処理を次のステップ５３に進める。一方、ＣＰＵ３０は、ドラッグボタンが押下されていない場合、ドラッグフラグＤｂ５に記述されたドラッグフラグｉｓＤｒａｇを０に設定して（ステップ６５）、処理を次のステップ６２に進める。
【００９１】
ステップ５３において、ＣＰＵ３０は、距離算出処理を行い、処理を次のステップに進める。距離算出処理においては、コントローラ７から送信され記憶された第１座標データＤａ１および第２座標データＤａ２に基づいて、コントローラ７とマーカ８Ｌおよび８Ｒとの現在距離ｒｅａｌＤが算出される。以下、図１６および図１７を参照して、ステップ５３における詳細な動作について説明する。
【００９２】
図１６において、ＣＰＵ３０は、第１座標データＤａ１および第２座標データＤａ２を取得し（ステップ７１）、距離ｍｉを算出する（ステップ７２）。図１７に示すように、距離ｍｉは、撮像画像内での２点間の距離である。この２点は、マーカ８Ｌおよび８Ｒを撮像した画像に相当し、それぞれの座標を第１座標データＤａ１および第２座標データＤａ２として得ている。したがって、ＣＰＵ３０は、第１座標データＤａ１および第２座標データＤａ２を用いれば、距離ｍｉを算出することができる。具体的には、第１座標データＤａ１が位置座標（Ｌｘ，Ｌｙ）、第２座標データＤａ２が位置座標（Ｒｘ，Ｒｙ）であるとすると、
【数１】
0005424373.tif 000002
で算出される。
【００９３】
次に、ＣＰＵ３０は、マーカ８Ｌおよび８Ｒの設置位置に対する撮像素子７４３の撮像可能範囲の幅ｗ（図１７参照）を算出する（ステップ７３）。ここで、幅ｗは、
ｗ＝ｗｉ×ｍ／ｍｉ
で算出される。ここで、ｍは、マーカ８Ｌおよび８Ｒの設置間隔（実際の設置間隔；例えば、２０ｃｍ）であり、固定値である。また、ｗｉは、幅ｗに対応する撮像素子７４３の撮像画像の幅ｗｉであり、固定値である。これら設置間隔ｍおよび幅ｗｉは、いずれも固定値であるため、予めゲーム装置３内の記憶手段（図示せず）に格納される。なお、設置間隔ｍについては、プレイヤの設置環境に応じて任意の間隔でマーカ８Ｌおよび８Ｒを設置してもかまわない。この場合、マーカ８Ｌおよび８Ｒを設置した間隔を設置間隔ｍとしてプレイヤが入力するようにすれば、上記数式を同様に扱うことができる。
【００９４】
次に、ＣＰＵ３０は、幅ｗおよび撮像素子７４３の視野角θを用いて、マーカ８Ｌおよび８Ｒと撮像素子７４３（コントローラ７）との現在距離ｒｅａｌＤ（図１７参照）を算出し、現在距離データＤｂ３を更新して（ステップ７４）、当該サブルーチンによる処理を終了する。ここで、現在距離ｒｅａｌＤは、
ｒｅａｌＤ＝（ｗ／２）／｛ｔａｎ（θ／２）｝
の関係式から算出することができる。ここで、視野角θは固定値であるため、予めゲーム装置３内の記憶手段（図示せず）に格納される。
【００９５】
図１５に戻り、ステップ５３における現在距離ｒｅａｌＤの算出処理の後、ＣＰＵ３０は、ドラッグフラグＤｂ５を参照し（ステップ５４）、ドラッグフラグｉｓＤｒａｇ＝０か否かを判断する（ステップ５５）。そして、ＣＰＵ３０は、ドラッグフラグｉｓＤｒａｇ＝０の場合（すなわち、ドラッグボタンを押し始めの状態）、処理を次のステップ５６に進める。一方、ＣＰＵ３０は、ドラッグフラグｉｓＤｒａｇ＝１の場合（すなわち、ドラッグボタンの押下を継続中）、処理を次のステップ５８に進める。
【００９６】
ステップ５６において、ＣＰＵ３０は、上記ステップ５３で算出した現在距離ｒｅａｌＤを初期距離ｉｎｉｔＤに設定し、初期距離データＤｂ４を更新する。次に、ＣＰＵ３０は、現在設定されている仮想現在距離ｖｉｒｔｕａｌＤを仮想初期距離ｉｎｉｔ＿ｖｉｒｔｕａｌＤに設定し、仮想初期距離データＤｃ２を更新する（ステップ５７）。なお、仮想現在距離ｖｉｒｔｕａｌＤが未設定の場合、ＣＰＵ３０は、仮想初期距離ｉｎｉｔ＿ｖｉｒｔｕａｌＤをデフォルト値に設定して、仮想初期距離データＤｃ２を更新する。そして、ＣＰＵ３０は、処理を次のステップ６１に進める。
【００９７】
一方、ステップ５８において、ＣＰＵ３０は、移動距離ｍｏｖｅＤを算出する。具体的には、ＣＰＵ３０は、上記ステップ５３で算出された現在距離ｒｅａｌＤと、初期距離データＤｂ４として格納されている初期距離ｉｎｉｔＤとを用いて、移動距離ｍｏｖｅＤを、
ｍｏｖｅＤ＝ｒｅａｌＤ−ｉｎｉｔＤ
によって算出する。次に、ＣＰＵ３０は、仮想現在距離ｖｉｒｔｕａｌＤを算出し、仮想現在距離データＤｃ１を更新する（ステップ５９）。具体的には、ＣＰＵ３０は、ステップ５８で算出された移動距離ｍｏｖｅＤと、仮想初期距離データＤｃ２して格納されている仮想初期距離ｉｎｉｔ＿ｖｉｒｔｕａｌＤとを用いて、仮想現在距離ｖｉｒｔｕａｌＤを、
ｖｉｒｔｕａｌＤ＝ｉｎｉｔ＿ｖｉｒｔｕａｌＤ＋ｍｏｖｅＤ
によって算出する。そして、ＣＰＵ３０は、スケール値ｓｃａｌｅを算出し、スケールデータＤｃ３を更新する（ステップ６０）。具体的には、ＣＰＵ３０は、仮想現在距離データＤｃ１して格納されている仮想現在距離ｖｉｒｔｕａｌＤを用いて、スケール値ｓｃａｌｅを、
ｓｃａｌｅ＝Ｓ×ｖｉｒｔｕａｌＤ＋Ｔ
によって算出する。ここで、Ｓ、Ｔは、任意の定数である。そして、ＣＰＵ３０は、処理を次のステップ６１に進める。
【００９８】
なお、後述する画像の描画処理において、定数Ｓ＞０に設定することによって、マーカ８Ｌおよび８Ｒからコントローラ７を遠ざけるとモニタ２の表示を拡大することができる。これによって、モニタ２に表示されている画像を掴んでいるような感覚で直感的な操作が可能となる。また、定数Ｓ＜０に設定することによって、マーカ８Ｌおよび８Ｒからコントローラ７を遠ざけるとモニタ２の表示を縮小することができる。これによって、モニタ２に表示されている画像を撮像するカメラを操作しているような感覚で直感的な操作が可能となる。
【００９９】
ステップ６１において、ＣＰＵ３０は、ドラッグフラグＤｂ５に記述されたドラッグフラグｉｓＤｒａｇを１に設定して、処理を次のステップ６２に進める。
【０１００】
ステップ６２において、ＣＰＵ３０は、スケール値ｓｃａｌｅに基づいて、カメラ行列を算出し、カメラ行列データＤｃ４を更新する。そして、ＣＰＵ３０は、処理を次のステップに進める。例えば、ＣＰＵ３０は、射影行列が透視射影行列であるとき、スケールデータＤｃ３として格納されているスケール値ｓｃａｌｅに基づいて、仮想カメラの位置と当該仮想カメラの注視点との距離を計算してカメラ行列を算出する。また、ＣＰＵ３０は、射影行列が正射影行列であるとき、スケールデータＤｃ３として格納されているスケール値ｓｃａｌｅに基づいて、正射影行列の視野の大きさを計算してカメラ行列を算出する。
【０１０１】
次に、ＣＰＵ３０は、上記ステップ６２で算出されたカメラ行列を用いて、画像を描画し、モニタ２に表示する（ステップ６３）。そして、ＣＰＵ３０は、表示を終了するか否かを判断する（ステップ６４）。ＣＰＵ３０は、表示を継続する場合、上記ステップ５１に戻って処理を繰り返す。一方、ＣＰＵ３０は、表示を終了する場合、当該フローチャートによる処理を終了する。
【０１０２】
なお、上記ステップ６２およびステップ６３においては、設定されているスケール値ｓｃａｌｅに基づいた２次元の画像処理を行い、２次元画像の表示サイズを逐次変更することによって当該画像の拡大／縮小を行ってモニタ２に表示してもかまわない。このような画像の拡大／縮小方式を用いても、コントローラ７とマーカ８Ｌおよび８Ｒとの距離に応じて、画像の拡大／縮小を行うことができる。
【０１０３】
また、さらにコントローラ７がドラッグボタンを押下した状態で、モニタ２に対して上下左右に動かされたり、左右にひねられたりすることに応じて、モニタ２に表示された表示物を移動させて表示してもかまわない。例えば、上述した第１座標データＤａ１および第２座標データＤａ２への方向データＤｂ１を算出する。具体的には、ＣＰＵ３０は、第１座標データＤａ１の位置座標（Ｌｘ，Ｌｙ）および第２座標データＤａ２の位置座標（Ｒｘ，Ｒｙ）を参照して、第１座標データＤａ１の位置を始点とし第２座標データＤａ２の位置を終点とするベクトルを算出し、方向データＤｂ１を更新する。方向データＤｂ１と所定の基準方向との差によって、コントローラ７の撮像面に垂直な方向を軸とする回転を算出することができる。そして、ドラッグボタンが押下されているときの方向データＤｂ１の方向変化を計算し、当該方向変化に基づいて、回転処理を含んだカメラ行列を算出し描画に反映させれば、表示物を回転させてモニタ２に表示することができる（図１３（ｂ））。
【０１０４】
また、ＣＰＵ３０は、第１座標データＤａ１の位置座標（Ｌｘ，Ｌｙ）と第２座標データＤａ２の位置座標（Ｒｘ，Ｒｙ）との中点を示す中点データＤｂ２を算出する。具体的には、ＣＰＵ３０は、第１座標データＤａ１および第２座標データＤａ２を参照して、当該中点の座標を算出し、中点データＤｂ２を更新する。ここで、中点データＤｂ２は、撮像画像内における対象画像（マーカ８Ｌおよび８Ｒ）を１つの画像とした場合、その画像の位置を示すデータとなる。そして、中点データＤｂ２と所定の基準位置との差によって、モニタ２に対するコントローラ７の位置の変化を算出することができる。そして、ドラッグボタンが押下されているときの中点データＤｂ２の位置変化を計算し、当該位置変化に基づいて、移動処理を含んだカメラ行列を算出し描画に反映させれば、表示物を上下左右に移動させてモニタ２に表示することができる（図１３（ａ））。なお、上述した中点データＤｂ２を画面座標系の値（指示座標）に変換し、当該指示座標の変化に基づいて表示物を移動させてもかまわない。この場合、指示座標がコントローラ７で指し示す位置になるように座標変換し、当該指示座標と一致する表示物を移動対象にすることによって、コントローラ７で指し示した表示物を任意に移動させることができる。また、上述した回転処理についても、指示座標と一致する表示物を回転対象にすることによって、コントローラ７で指し示した表示物を任意に回転させることができる。
【０１０５】
上述した処理では、ドラッグボタンを押下しているときにコントローラ７の移動距離を算出し、当該移動距離に応じて画像の拡大／縮小処理を行う例を説明した。以下、図１８および図１９を参照して、コントローラ７の移動速度を算出し、当該移動速度に応じて画像の拡大／縮小処理を行う例を説明する。なお、図１８は、ゲーム装置３のメインメモリ３３に記憶される他の例の主なデータを示す図である。図１９は、ゲーム装置３において実行されるゲーム処理の流れの他の例を示すフローチャートである。なお、図１９に示すに示すフローチャートにおいても、処理のうち、ゲームプログラムに含まれる画像処理プログラムを実行してコントローラ７に関する操作に基づいて行われる画像拡大／縮小処理について説明し、本願発明と直接関連しない他の処理については詳細な説明を省略する。また、図１９では、ＣＰＵ３０が実行する各ステップを「Ｓ」と略称する。さらに、図１９に示すフローチャートは、ゲームプログラムの実行が開始された後に行われる処理を示すフローチャートである。
【０１０６】
図１８において、メインメモリ３３には、操作情報Ｄａ、操作状態情報Ｄｂ、および表示情報Ｄｃ等が記憶される。図１４を用いて説明した態様と比較すると、図１８に示すデータは、過去距離データＤｂ６および移動速度データＤｂ７が操作状態情報Ｄｂに追加され、初期距離データＤｂ４、ドラッグフラグＤｂ５、および仮想初期距離データＤｃ２が除かれている。図１８に示す他のデータは図１４と同様であるため、同じデータには同じ参照符号を付して詳細な説明を省略する。
【０１０７】
過去距離データＤｂ６は、前フレームにおけるマーカ８Ｌおよび８Ｒからコントローラ７までの距離ｐａｓｔＤを示すデータである。移動速度データＤｂ７は、マーカ８Ｌおよび８Ｒに対してコントローラ７が移動する速度ｖｅｌＤを示すデータである。
【０１０８】
図１９において、ＣＰＵ３０は、コントローラ７から受信した操作情報を取得し（ステップ８１）、処理を次のステップに進める。なお、ステップ８１の動作は、上記ステップ５１と同様であるため、詳細な説明を省略する。
【０１０９】
次に、ＣＰＵ３０は、現在設定されている現在距離ｒｅａｌＤを過去距離ｐａｓｔＤに設定し、過去距離データＤｂ６を更新する（ステップ８２）。そして、ＣＰＵ３０は、距離算出処理を行い（ステップ８３）、処理を次のステップに進める。なお、距離算出処理については、上記ステップ５３と同様であるため、詳細な説明を省略する。
【０１１０】
次に、ＣＰＵ３０は、移動速度ｖｅｌＤを算出し、移動速度データＤｂ７を更新する（ステップ８４）。具体的には、ＣＰＵ３０は、上記ステップ８３で算出された現在距離ｒｅａｌＤと、上記ステップ８２で設定された過去距離ｐａｓｔＤとを用いて、移動速度ｖｅｌＤを
ｖｅｌＤ＝ｒｅａｌＤ−ｐａｓｔＤ
によって算出する。そして、ＣＰＵ３０は、キーデータＤａ３を参照し、ドラッグボタンが押下されているか否かを判断する（ステップ８５）。そして、ＣＰＵ３０は、ドラッグボタンが押下されている場合、処理を次のステップ８６に進める。一方、ＣＰＵ３０は、ドラッグボタンが押下されていない場合、処理を次のステップ８８に進める。
【０１１１】
ステップ８６において、仮想現在距離ｖｉｒｔｕａｌＤを算出し、仮想現在距離データＤｃ１を更新する。具体的には、ＣＰＵ３０は、ステップ８４で算出された移動速度ｖｅｌＤと、仮想現在距離データＤｃ１して格納されている仮想現在距離ｖｉｒｔｕａｌＤとを用いて、新たな仮想現在距離ｖｉｒｔｕａｌＤを、
ｖｉｒｔｕａｌＤ＝ｖｉｒｔｕａｌＤ＋ｖｅｌＤ
によって算出する。そして、ＣＰＵ３０は、スケール値ｓｃａｌｅを算出し、スケールデータＤｃ３を更新する（ステップ８７）。具体的には、ＣＰＵ３０は、仮想現在距離データＤｃ１して格納されている仮想現在距離ｖｉｒｔｕａｌＤを用いて、スケール値ｓｃａｌｅを、
ｓｃａｌｅ＝Ｓ×ｖｉｒｔｕａｌＤ＋Ｔ
によって算出する。ここで、Ｓ、Ｔは、任意の定数である。そして、ＣＰＵ３０は、処理を次のステップ８８に進める。
【０１１２】
ステップ８８において、ＣＰＵ３０は、スケール値ｓｃａｌｅに基づいて、カメラ行列を算出し、カメラ行列データＤｃ４を更新する。次に、ＣＰＵ３０は、上記ステップ６２で算出されたカメラ行列を用いて、画像を描画し、モニタ２に表示する（ステップ８９）。そして、ＣＰＵ３０は、表示を終了するか否かを判断する（ステップ９０）。ＣＰＵ３０は、表示を継続する場合、上記ステップ８１に戻って処理を繰り返す。一方、ＣＰＵ３０は、表示を終了する場合、当該フローチャートによる処理を終了する。なお、ステップ８８のカメラ行列算出処理およびステップ８９の描画処理については、上述したステップ６２およびステップ６３の処理と同様であるため、詳細な説明を省略する。
【０１１３】
なお、上述したステップ５３およびステップ８２で行った距離算出処理においては、コントローラ７がマーカ８Ｌおよび８Ｒを結ぶ方向に対して斜めに配置された場合、現在距離ｒｅａｌＤに誤差が生じる。以下、図２０〜図２３を参照して、距離算出処理の他の例について説明する。なお、図２０は、距離算出処理の詳細な動作の他の例を示すサブルーチンである。図２１〜図２３は、現在距離ｒｅａｌＤを算出する他の例の動作を説明するための図である。
【０１１４】
以下に述べる距離算出処理では、上述した第１座標データＤａ１および第２座標データＤａ２に加えてサイズ情報も処理結果データとして取得する。サイズ情報とは、撮像情報演算部７４が撮像画像におけるマーカ８Ｌおよび８Ｒの対象画像それぞれの面積、直径、および幅等の何れかを示す情報であり、ここではマーカ８Ｌおよび８Ｒを示す撮像画像の直径を示すサイズ情報をそれぞれ第１サイズデータおよび第２サイズデータとして取得する一例を用いて説明する。
【０１１５】
図２０において、ＣＰＵ３０は、第１サイズデータおよび第２サイズデータを取得し（ステップ１０１）、処理を次のステップに進める。図２１に示すように、第１サイズデータおよび第２サイズデータは、それぞれマーカ８Ｌおよび８Ｒを示す撮像画像の直径を示すデータであり、第１サイズデータがマーカ８Ｌを撮像した画像の直径ｄｉａｍＬを示し、第２サイズデータがマーカ８Ｒを撮像した画像の直径ｄｉａｍＲを示している。例えば、図２１に示すように、コントローラ７がマーカ８Ｌおよび８Ｒを結ぶ方向に対して斜めに配置された場合、直径ｄｉａｍＬと直径ｄｉａｍＲとに差が生じる。
【０１１６】
次に、ＣＰＵ３０は、第１サイズデータ（直径ｄｉａｍＬ）に基づいて、マーカ８Ｌの設置位置に対する撮像素子７４３の撮像可能範囲の幅ｗ（図２２参照）を算出する（ステップ１０２）。ここで、幅ｗは、
ｗ＝ｗｉ×ｄｉａｍＭ／ｄｉａｍＬ
で算出される。ここで、ｄｉａｍＭは、設置されたマーカ８Ｌおよび８Ｒの直径（実際の直径）であり、固定値として予めゲーム装置３内の記憶手段（図示せず）に格納される。
【０１１７】
次に、ＣＰＵ３０は、上記ステップ１０２で算出した幅ｗおよび撮像素子７４３の視野角θを用いて、マーカ８Ｌと撮像素子７４３（コントローラ７）との現在距離ｒｅａｌＤＬ（図２２参照）を算出する（ステップ１０３）。ここで、現在距離ｒｅａｌＤＬは、
ｒｅａｌＤＬ＝（ｗ／２）／｛ｔａｎ（θ／２）｝
の関係式から算出することができる。ここで、視野角θは固定値であるため、予めゲーム装置３内の記憶手段（図示せず）に格納される。
【０１１８】
次に、ＣＰＵ３０は、第２サイズデータ（直径ｄｉａｍＲ）に基づいて、マーカ８Ｒの設置位置に対する撮像素子７４３の撮像可能範囲の幅ｗを算出する（ステップ１０４）。ここで、幅ｗは、
ｗ＝ｗｉ×ｄｉａｍＭ／ｄｉａｍＲ
で算出される。
【０１１９】
次に、ＣＰＵ３０は、上記ステップ１０４で算出した幅ｗおよび撮像素子７４３の視野角θを用いて、マーカ８Ｒと撮像素子７４３（コントローラ７）との現在距離ｒｅａｌＤＲを算出する（ステップ１０５）。ここで、現在距離ｒｅａｌＤＲは、
ｒｅａｌＤＲ＝（ｗ／２）／｛ｔａｎ（θ／２）｝
の関係式から算出することができる。
【０１２０】
次に、ＣＰＵ３０は、現在距離ｒｅａｌＤＬおよびｒｅａｌＤＲとマーカ８Ｌおよび８Ｒの設置間隔ｍとを用いて、角度δ１を算出する（ステップ１０６）。図２３に示すように、角度δ１は、マーカ８Ｌおよびコントローラ７を結ぶ直線と、マーカ８Ｌおよび８Ｒを結ぶ直線とによって成される角度である。角度δ１は、余弦定理を用いて、
ｃｏｓδ１＝（ｒｅａｌＤＬ2×ｍ2−ｒｅａｌＤＲ2）／（２×ｒｅａｌＤＬ×ｍ）
で算出される。
【０１２１】
次に、ＣＰＵ３０は、マーカ８Ｌおよび８Ｒ間の中点とコントローラ７との現在距離ｒｅａｌＤ（図２３参照）を算出し（ステップ１０７）、当該サブルーチンによる処理を終了する。現在距離ｒｅａｌＤは、余弦定理を用いて、
【数２】
0005424373.tif 000003
で算出される。
【０１２２】
なお、上記中点およびコントローラ７を結ぶ直線と、マーカ８Ｌおよび８Ｒを結ぶ直線とによって成される角度δ２を求めることも可能である。角度δ２は、現在距離ｒｅａｌＤ、現在距離ｒｅａｌＤＬ、および設置間隔ｍを用いて、余弦定理から、
ｃｏｓδ２＝｛ｒｅａｌＤ2×（ｍ／２）2−ｒｅａｌＤＬ2｝
／｛２×ｒｅａｌＤ×（ｍ／２）｝
で算出される。この角度δ２を得ることによって、コントローラ７がマーカ８Ｌおよび８Ｒに対してどのような角度位置に配置されているか算出することができ、コントローラ７の角度位置に応じた処理が可能となる。
【０１２３】
このように、コントローラ７を固定的に設置された撮像対象を撮像し、当該撮像画像における対象画像から複数の対象画像間の間隔または対象画像の大きさを示す対象画像データに応じて画像の拡大／縮小が行われる。なお、複数の対象画像間の間隔を示す対象画像データは、複数の撮像対象を撮像した撮像画像における複数の対象画像間の距離等であり、対象画像の大きさを示す対象画像データは、単一の撮像対象を撮像した撮像画像における単一の対象画像の大きさ（例えば、直径や幅）等が含まれる。例えば、２つのマーカ８Ｌおよび８Ｒからの赤外光が複数の撮像対象となり、対象画像データとしては、撮像画像に撮像された２つのマーカの間隔（距離ｍｉ）が用いられる。また、１つのマーカ（例えばマーカ８Ｌ）からの赤外光が単一の撮像対象であっても、当該マーカの大きさが対象画像データとして利用でき、１つマーカに含まれる複数箇所（例えば、両端）間の距離を対象画像データとしてもかまわない。この場合、対象画像データとしては、撮像画像に撮像された１つのマーカの直径等（直径ｄｉａｍＬ等）が用いられる。これらの対象画像データから、コントローラ７と撮像対象との間の距離を得ることができるため、当該距離や移動速度の増減に応じた画像の拡大／縮小処理が可能となり、操作距離を利用した直感的で新規な操作が実現できる。なお、上述した距離の演算手順は単なる一例に過ぎず、対象画像データそのものを距離として直接扱って処理を簡略化してもかまわない。
【０１２４】
また、上述した説明では、ドラッグボタン（操作ボタン７２ｉ）を押下している間のみ画像の拡大／縮小処理が行われる例を用いたが、現在距離ｒｅａｌＤに応じて常に画像の拡大／縮小処理が行われてもかまわない。これによって、マーカ８Ｌおよび８Ｒからコントローラ７までの距離が逐次画像処理に反映される画像がモニタ２に表示される。例えば、モニタ２からコントローラ７を所持するユーザまでの視聴距離に応じて視聴に最適なサイズの画像を表示することもできる。
【０１２５】
また、上述した説明では、撮像素子７４３で撮像した画像データを解析することによって現在距離ｒｅａｌＤを算出したが、それ以外の手段によっても、実空間内に配置された所定の測定対象との現在距離ｒｅａｌＤを測ることができれば、上記の発明を実施することが可能である。例えば、現在距離ｒｅａｌＤを算出するための手段として、超音波センサによるものや、磁気センサを用いたものなどを用いてもよい。また、撮像素子７４３と、撮像対象との距離に関連した値を得ることができれば、実際の現在距離ｒｅａｌＤを算出しなくとも操作入力は可能であるので、現在距離ｒｅａｌＤを算出せずに、撮像画像内のマーカ８Ｌと８Ｒとの間の長さに対応させたデータを予め用意し、当該対応データを用いて処理を行うようにしてもよい。
【０１２６】
また、上述した説明では、コントローラ７とゲーム装置３とが無線通信によって接続された態様を用いたが、コントローラ７とゲーム装置３とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ７に接続されたケーブルをゲーム装置３の接続端子に接続する。
【０１２７】
また、コントローラ７から無線送信される送信データを受信する受信手段として、ゲーム装置３の接続端子に接続された受信ユニット６を用いて説明したが、ゲーム装置３の本体内部に設けられた受信モジュールによって当該受信手段を構成してもかまわない。この場合、受信モジュールが受信した送信データは、所定のバスを介してＣＰＵ３０に出力される。
【０１２８】
また、撮像素子７４３で撮像した画像データを解析してマーカ８Ｌおよび８Ｒからの赤外光の位置座標やそれらの重心座標等を取得し、それらを処理結果データとしてコントローラ７内で生成してゲーム装置３へ送信する態様を説明したが、他の処理段階のデータをコントローラ７からゲーム装置３へ送信してもかまわない。例えば、撮像素子７４３が撮像した画像データをコントローラ７からゲーム装置３へ送信し、ＣＰＵ３０において上記解析処理を行って処理結果データを取得してもかまわない。この場合、コントローラ７に設けられた画像処理回路７４４が不要となる。また、上記画像データの解析途中のデータをコントローラ７からゲーム装置３へ送信してもかまわない。例えば、画像データから得られる輝度、位置、および面積等を示すデータをコントローラ７からゲーム装置３へ送信し、ＣＰＵ３０において残りの解析処理を行って処理結果データを取得してもかまわない。
【０１２９】
また、上述した説明では、２つのマーカ８Ｌおよび８Ｒからの赤外光を、コントローラ７の撮像情報演算部７４の撮像対象としたが、他のものを撮像対象にしてもかまわない。例えば、１つまたは３つ以上のマーカをモニタ２の近傍に設置し、それらのマーカからの赤外光を撮像情報演算部７４の撮像対象としてもかまわない。例えば、所定の長さを有する１つのマーカをモニタ２の近傍に設置し、当該長さの両端を設置間隔ｍ（図１６参照）とすれば、本発明を同様に実現することができる。また、モニタ２の表示画面自体や他の発光体（室内灯等）を撮像情報演算部７４の撮像対象としてもかまわない。撮像対象とモニタ２の表示画面との配置関係に基づいて、当該表示画面に対するコントローラ７の位置を演算すれば、様々な発光体を撮像情報演算部７４の撮像対象として用いることができる。
【０１３０】
また、上述したコントローラ７の形状や、それらに設けられている操作部７２の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、コントローラ７における撮像情報演算部７４の位置（撮像情報演算部７４の光入射口）は、ハウジング７１の前面でなくてもよく、ハウジング７１の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【０１３１】
また、上記実施例では、ゲーム装置３をコントローラ７で操作しているが、撮像手段を備えた入力装置で操作される一般的なパーソナルコンピュータなどの情報処理装置でもかまわない。この場合、この情報処理装置のコンピュータが実行するプログラムは、典型的にゲームに用いられるゲームプログラムに限らず、上記情報処理装置に対する画像処理に用いられる汎用的な画像処理プログラムである。
【産業上の利用可能性】
【０１３２】
本発明に係る画像処理装置および画像処理プログラムは、自由度の高い操作を実現することができ、物理的に分離したユニットを用いて操作するゲーム等の画像処理として有用である。
【図面の簡単な説明】
【０１３３】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置３の機能ブロック図
【図３】図３のコントローラ７の上面後方から見た斜視図
【図４】図３のコントローラ７を下面後方から見た斜視図
【図５】図３のコントローラ７の上筐体を外した状態を示す斜視図
【図６】図３のコントローラ７の構成を示すブロック図
【図７】図３のコントローラ７を用いてゲーム操作するときの状態を概説する図解図
【図８】プレイヤがコントローラ７を右手で把持した状態をコントローラ７の前面側から見た一例
【図９】プレイヤがコントローラ７を右手で把持した状態をコントローラ７の左側面側から見た一例
【図１０】マーカ８Ｌおよび８Ｒと撮像情報演算部７４との視野角を説明するための図
【図１１】プレイヤＵがマーカ８Ｌおよび８Ｒに対して前後方向へ操作する一例を示す上面図
【図１２】図１１に示した操作に応じて、モニタ２に表示される画面例を示す図
【図１３】コントローラ７をモニタ２に対して上下左右に移動させる、またはコントローラ７をひねることによって、モニタ２に表示されるオブジェクトＯＢＪの表示例
【図１４】ゲーム装置３のメインメモリ３３に記憶される主なデータを示す図
【図１５】ゲーム装置３において実行されるゲーム処理の流れを示すフローチャート
【図１６】図１５におけるステップ５３の距離算出処理の詳細な動作を示すサブルーチン
【図１７】現在距離ｒｅａｌＤを算出する動作を説明するための図
【図１８】ゲーム装置３のメインメモリ３３に記憶される他の例の主なデータを示す図
【図１９】ゲーム装置３において実行されるゲーム処理の流れの他の例を示すフローチャート
【図２０】距離算出処理の詳細な動作の他の例を示すサブルーチン
【図２１】現在距離ｒｅａｌＤを算出する他の例の動作を説明するための図
【図２２】現在距離ｒｅａｌＤを算出する他の例の動作を説明するための図
【図２３】現在距離ｒｅａｌＤを算出する他の例の動作を説明するための図
【符号の説明】
【０１３４】
１…ゲームシステム
２…モニタ
２ａ…スピーカ
３…ゲーム装置
３０…ＣＰＵ
３１…メモリコントローラ
３２…ＧＰＵ
３３…メインメモリ
３４…ＤＳＰ
３５…ＡＲＡＭ
３６…コントローラＩ／Ｆ
３７…ビデオＩ／Ｆ
３８…外部メモリＩ／Ｆ
３９…オーディオＩ／Ｆ
４０…ディスクドライブ
４１…ディスクＩ／Ｆ
４…光ディスク
５…外部メモリカード
６…受信ユニット
７…コントローラ
７１…ハウジング
７２…操作部
７３…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１…加速度センサ
７０２…ＬＥＤ
７０３…水晶振動子
７０４…バイブレータ
７０５…電池
８…マーカ
【図１】
0005424373.tif 000004
【図２】
0005424373.tif 000005
【図３】
0005424373.tif 000006
【図４】
0005424373.tif 000007
【図５】
0005424373.tif 000008
【図６】
0005424373.tif 000009
【図７】
0005424373.tif 000010
【図８】
0005424373.tif 000011
【図９】
0005424373.tif 000012
【図１０】
0005424373.tif 000013
【図１１】
0005424373.tif 000014
【図１２】
0005424373.tif 000015
【図１３】
0005424373.tif 000016
【図１４】
0005424373.tif 000017
【図１５】
0005424373.tif 000018
【図１６】
0005424373.tif 000019
【図１７】
0005424373.tif 000020
【図１８】
0005424373.tif 000021
【図１９】
0005424373.tif 000022
【図２０】
0005424373.tif 000023
【図２１】
0005424373.tif 000024
【図２２】
0005424373.tif 000025
【図２３】
0005424373.tif 000026