(57)【特許請求の範囲】
【請求項１】
撮像装置によって撮像される撮像画像から、撮像画像に対応する平面上における所定の２つの撮像対象の位置を示す２つの対象位置座標を算出する座標算出装置であって、
前記撮像画像内において所定条件に合致する領域の位置座標を当該領域毎に検出する座標検出手段と、
前記撮像画像内における２つの位置座標の相対的な位置関係を示すベクトルを設定するベクトル設定手段と、
前記座標検出手段によって検出された位置座標のうちの１つの位置座標を一方の前記対象位置座標に決定し、当該１つの位置座標と前記ベクトルとを用いて他方の前記対象位置座標を決定する座標決定手段とを備える、座標算出装置。
【請求項２】
前記ベクトル設定手段は、
前記撮像装置の傾きを算出する傾き算出手段によって算出された傾きに基づいて前記ベクトルの方向を設定する方向設定手段と、
所定の長さとなるように前記ベクトルの長さを設定する長さ設定手段とを含む、請求項１に記載の座標算出装置。
【請求項３】
前記座標決定手段によって決定された前記２つの対象位置座標、および、当該２つの対象位置座標を結ぶベクトルの少なくともいずれか一方を示す対象位置座標データを、前記座標決定手段による決定が行われる度に記憶する対象位置記憶手段をさらに備え、
前記長さ設定手段は、最後に記憶された対象位置座標データにより示される前記２つの対象位置座標を結ぶ長さとなるように前記ベクトルの長さを設定する、請求項２に記載の座標算出装置。
【請求項４】
前記方向設定手段は、前記撮像装置が所定の傾きとなった状態において前記傾き算出手段によって算出される傾きと、当該状態において前記撮像装置によって撮像される撮像画像から検出される前記２つの撮像対象の位置座標を結ぶ方向との対応関係に基づいて前記ベクトルの方向を設定する、請求項２に記載の座標算出装置。
【請求項５】
前記傾き算出手段は、前記撮像装置と共通の筐体に固定的に配置され、前記撮像装置の撮像方向に垂直な２軸方向の加速度を検出する加速度センサを含み、
前記ベクトル設定手段は、前記加速度センサによって検出された各軸方向の加速度に基づいて前記ベクトルを算出する、請求項２に記載の座標算出装置。
【請求項６】
前記座標決定手段によって決定された前記２つの対象位置座標、および、当該２つの対象位置座標を結ぶベクトルの少なくともいずれか一方を示す対象位置座標データを、前記座標決定手段による決定が行われる度に記憶する対象位置記憶手段をさらに備え、
前記ベクトル設定手段は、最後に記憶された対象位置座標データから前記２つの対象位置座標を結ぶベクトルを算出または取得する、請求項１に記載の座標算出装置。
【請求項７】
前記座標決定手段は、
前記座標検出手段によって検出された位置座標のうちの１つの位置座標が、前記２つの対象位置座標のうちの第１の対象位置座標および第２の対象位置座標のいずれであるかを決定する第１決定手段と、
前記第１決定手段によって第１の対象位置座標が決定されたとき、当該第１の対象位置座標に前記ベクトルを加算することによって第２の対象位置座標を決定し、前記第１決定手段によって第２の対象位置座標が決定されたとき、当該第２の対象位置座標から前記ベクトルを減算することによって第１の対象位置座標を決定する第２決定手段とを含む、請求項１に記載の座標算出装置。
【請求項８】
前記座標決定手段によって決定された前記２つの対象位置座標を含む対象位置座標データを、前記座標決定手段による決定が行われる度に記憶する対象位置記憶手段をさらに備え、
前記第１決定手段は、前記座標検出手段によって検出されたそれぞれの位置座標と、最後に記憶された対象位置座標データにより示される第１の対象位置座標および第２の対象位置座標それぞれとの距離を算出し、前記座標検出手段によって検出された位置座標のうちのある位置座標と、前回記憶された対象位置座標データにより示される第１の対象位置座標との距離が最短となるとき、当該ある位置座標を第１の対象位置座標に決定し、前記座標検出手段によって検出された位置座標のうちのある位置座標と、前回記憶された対象位置座標データにより示される第２の対象位置座標との距離が最短となるとき、当該ある位置座標を第２の対象位置座標に決定する、請求項７に記載の座標算出装置。
【請求項９】
前記座標決定手段は、
前記座標検出手段によって検出された位置座標のうちの１つの位置座標を確定座標として当該確定座標に前記ベクトルを加算した位置座標を第１仮座標とし、当該位置座標から前記ベクトルを減算した位置座標を第２仮座標として算出する仮座標算出手段と、
前記第１仮座標および前記第２仮座標のうち、前記第１仮座標のみが撮像画像の領域外となったとき、当該第１仮座標と前記確定座標とを前記２つの対象位置座標に決定し、前記第１仮座標および前記第２仮座標のうちで前記第２仮座標のみが撮像画像の領域外となったとき、当該第２仮座標と前記確定座標とを前記２つの対象位置座標に決定する決定実行手段とを含む、請求項１に記載の座標算出装置。
【請求項１０】
前記座標検出手段によって検出された位置座標が２つ以上であるとき、当該各位置座標を用いて前記２つの対象位置座標を算出する対象位置座標算出手段をさらに備え、
前記座標決定手段は、前記対象位置座標算出手段によって前記２つの対象位置座標を算出することが不可能であったとき、前記２つの対象位置座標を決定する、請求項１に記載の座標算出装置。
【請求項１１】
撮像装置によって撮像される撮像画像から、撮像画像に対応する平面上における所定の２つの撮像対象の位置を示す２つの対象位置座標を算出する座標算出装置であって、
前記撮像画像内において所定条件に合致する領域の位置座標を当該領域毎に検出する座標検出手段と、
前記座標検出手段によって複数の位置座標が検出されたとき、前記撮像画像内における２つの位置座標を結ぶ方向と当該２つの位置座標間の長さとの少なくともいずれかに対する基準を設定する基準設定手段と、
前記複数の位置座標のうちの２つの位置座標の組み合わせの中から、前記基準設定手段によって設定された基準に最も近い２つの位置座標の組み合わせを選択する選択手段と、
前記選択手段によって選択された２つの位置座標が選択できたか否か判定する判定手段と、
前記判定手段による判定結果が肯定であるとき、前記選択手段によって選択された２つの位置座標を前記２つの対象位置座標として出力する出力手段と、
前記判定手段による判定結果が否定であるとき、前記撮像画像内における２つの位置座標の相対的な位置関係を示すベクトルを設定するベクトル設定手段と、
前記判定手段による判定結果が否定であるとき、前記座標検出手段によって検出された位置座標のうちの１つの位置座標を一方の前記対象位置座標に決定し、当該１つの位置座標と前記ベクトルとを用いて他方の前記対象位置座標を決定する座標決定手段とを備える、座標算出装置。
【請求項１２】
撮像装置によって撮像される撮像画像から、撮像画像に対応する平面上における所定の２つの撮像対象の位置を示す２つの対象位置座標を算出する座標算出装置のコンピュータで実行されるプログラムであって、
前記撮像画像内における２つの位置座標の相対的な位置関係を示すベクトルを設定するベクトル設定ステップと、
前記撮像画像内において所定条件に合致する各領域の位置座標のうちの１つの位置座標を一方の前記対象位置座標に決定し、当該１つの位置座標と前記ベクトルとを用いて他方の前記対象位置座標を決定する座標決定ステップとを前記コンピュータに実行させる座標算出プログラム。
【請求項１３】
前記ベクトル設定ステップは、
前記撮像装置の傾きを算出する傾き算出手段によって算出された傾きに基づいて前記ベクトルの方向を設定する方向設定ステップと、
所定の長さとなるように前記ベクトルの長さを設定する長さ設定ステップとを含む、請求項１２に記載の座標算出プログラム。
【請求項１４】
前記座標決定ステップにおいて決定された前記２つの対象位置座標、および、当該２つの対象位置座標を結ぶベクトルの少なくともいずれか一方を示す対象位置座標データを、前記座標決定ステップにおける決定が行われる度に前記座標算出装置のメモリに記憶させる対象位置記憶ステップを前記コンピュータにさらに実行させ、
前記長さ設定ステップにおいては、前記コンピュータは、最後に記憶された対象位置座標データにより示される前記２つの対象位置座標を結ぶ長さとなるように前記ベクトルの長さを設定する、請求項１３に記載の座標算出プログラム。
【請求項１５】
前記方向設定ステップにおいては、前記コンピュータは、前記撮像装置が所定の傾きとなった状態において前記傾き算出手段によって算出される傾きと、当該状態において前記撮像装置によって撮像される撮像画像から検出される前記２つの撮像対象の位置座標を結ぶ方向との対応関係に基づいて前記ベクトルの方向を設定する、請求項１３に記載の座標算出プログラム。
【請求項１６】
前記傾き算出手段は、前記撮像装置と共通の筐体に固定的に配置され、前記撮像装置の撮像方向に垂直な２軸方向の加速度を検出する加速度センサを含み、
前記ベクトル設定においては、前記コンピュータは、前記加速度センサによって検出された各軸方向の加速度に基づいて前記ベクトルを算出する、請求項１３に記載の座標算出プログラム。
【請求項１７】
前記座標決定ステップにおいて決定された前記２つの対象位置座標、および、当該２つの対象位置座標を結ぶベクトルの少なくともいずれか一方を示す対象位置座標データを、前記座標決定ステップにおける決定が行われる度に前記座標算出装置のメモリに記憶させる対象位置記憶ステップを前記コンピュータにさらに実行させ、
前記ベクトル設定ステップにおいては、前記コンピュータは、最後に記憶された対象位置座標データから前記２つの対象位置座標を結ぶベクトルを算出または取得する、請求項１２に記載の座標算出プログラム。
【請求項１８】
前記座標決定ステップは、
前記検出された位置座標のうちの１つの位置座標が、前記２つの対象位置座標のうちの第１の対象位置座標および第２の対象位置座標のいずれかであるかを決定する第１決定ステップと、
前記第１決定ステップにおいて第１の対象位置座標が決定されたとき、当該第１の対象位置座標に前記ベクトルを加算することによって第２の対象位置座標を決定し、前記第１決定ステップにおいて第２の対象位置座標が決定されたとき、当該第２の対象位置座標から前記ベクトルを減算することによって第１の対象位置座標を決定する第２決定ステップとを含む、請求項１２に記載の座標算出プログラム。
【請求項１９】
前記座標決定ステップにおいて決定された前記２つの対象位置座標を含む対象位置座標データを、前記座標決定ステップにおける決定が行われる度に前記座標算出装置のメモリに記憶させる対象位置記憶ステップを前記コンピュータにさらに実行させ、
前記第１決定ステップは、前記座標検出手段によって検出されたそれぞれの位置座標と、最後に記憶された対象位置座標データにより示される第１の対象位置座標および第２の対象位置座標それぞれとの距離を算出し、前記検出された位置座標のうちのある位置座標と、前回記憶された対象位置座標データにより示される第１の対象位置座標との距離が最短となるとき、当該ある位置座標を第１の対象位置座標に決定し、前記検出された位置座標のうちのある位置座標と、前回記憶された対象位置座標データにより示される第２の対象位置座標との距離が最短となるとき、当該ある位置座標を第２の対象位置座標に決定する、請求項１８に記載の座標算出プログラム。
【請求項２０】
前記座標決定ステップは、
前記検出された位置座標のうちの１つの位置座標を確定座標とし当該確定座標に前記ベクトルを加算した位置座標を第１仮座標とし、当該位置座標から前記ベクトルを減算した位置座標を第２仮座標として算出する仮座標算出ステップと、
前記第１仮座標および前記第２仮座標のうちで前記第１仮座標のみが撮像画像の領域外となったとき、当該第１仮座標と前記確定座標とを前記２つの対象位置座標に決定し、前記第１仮座標および前記第２仮座標のうちで前記第２仮座標のみが撮像画像の領域外となったとき、当該第２仮座標と前記確定座標とを前記２つの対象位置座標に決定する決定実行ステップとを含む、請求項１２に記載の座標算出プログラム。
【請求項２１】
前記検出された位置座標が２つ以上であるとき、当該各位置座標を用いて前記２つの対象位置座標を算出する対象位置座標算出ステップを前記コンピュータにさらに実行させ、
前記座標決定ステップは、前記対象位置座標算出ステップにおいて前記２つの対象位置座標を算出することが不可能であったときに実行される、請求項１２に記載の座標算出プログラム。
【請求項２２】
撮像装置によって撮像される撮像画像から、撮像画像に対応する平面上における所定の２つの撮像対象の位置を示す２つの対象位置座標を算出する座標算出装置のコンピュータで実行されるプログラムであって、
前記撮像画像内における２つの位置座標を結ぶ方向と当該２つの位置座標間の長さとの少なくともいずれかに対する基準を設定する基準設定ステップと、
前記撮像画像内において所定条件に合致する領域の位置座標のうちの２つの位置座標の組み合わせの中から、前記基準設定ステップにおいて設定された基準に最も近い２つの位置座標の組み合わせを選択する選択ステップと、
前記選択ステップにおいて選択された２つの位置座標が選択できたか否かを判定する判定ステップと、
前記判定ステップにおける判定結果が肯定であるとき、前記選択ステップにおいて選択された２つの位置座標を前記２つの対象位置座標として出力する出力ステップと、
前記判定ステップにおける判定結果が否定であるとき、前記撮像画像内における２つの位置座標の相対的な位置関係を示すベクトルを設定するベクトル設定ステップと、
前記判定ステップにおける判定結果が否定であるとき、前記撮像画像内において所定条件に合致する領域の位置座標のうちの１つの位置座標を一方の前記対象位置座標に決定し、当該１つの位置座標と前記ベクトルとを用いて他方の前記対象位置座標を決定する座標決定ステップとを前記コンピュータに実行させる座標算出プログラム。
【請求項２３】
撮像装置によって撮像される撮像画像から、撮像画像に対応する平面上における所定の２つの撮像対象の位置を示す２つの対象位置座標を算出する座標算出システムであって、
前記撮像画像内において所定条件に合致する領域の位置座標を当該領域毎に検出する座標検出手段と、
前記撮像画像内における２つの位置座標の相対的な位置関係を示すベクトルを設定するベクトル設定手段と、
前記座標検出手段によって検出された位置座標のうちの１つの位置座標を一方の前記対象位置座標に決定し、当該１つの位置座標と前記ベクトルとを用いて他方の前記対象位置座標を決定する座標決定手段とを備える、座標算出システム。
【請求項２４】
撮像装置によって撮像される撮像画像から、撮像画像に対応する平面上における所定の２つの撮像対象の位置を示す２つの対象位置座標を算出する座標算出システムであって、
前記撮像画像内において所定条件に合致する領域の位置座標を当該領域毎に検出する座標検出手段と、
前記座標検出手段によって複数の位置座標が検出されたとき、前記撮像画像内における２つの位置座標を結ぶ方向と当該２つの位置座標間の長さとの少なくともいずれかに対する基準を設定する基準設定手段と、
前記複数の位置座標のうちの２つの位置座標の組み合わせの中から、前記基準設定手段によって設定された基準に最も近い２つの位置座標の組み合わせを選択する選択手段と、
前記選択手段によって選択された２つの位置座標が選択できたか否か判定する判定手段と、
前記判定手段による判定結果が肯定であるとき、前記選択手段によって選択された２つの位置座標を前記２つの対象位置座標として出力する出力手段と、
前記判定手段による判定結果が否定であるとき、前記撮像画像内における２つの位置座標の相対的な位置関係を示すベクトルを設定するベクトル設定手段と、
前記判定手段による判定結果が否定であるとき、前記座標検出手段によって検出された位置座標のうちの１つの位置座標を一方の前記対象位置座標に決定し、当該１つの位置座標と前記ベクトルとを用いて他方の前記対象位置座標を決定する座標決定手段とを備える、座標算出システム。
【請求項２５】
撮像装置によって撮像される撮像画像から、撮像画像に対応する平面上における所定の２つの撮像対象の位置を示す２つの対象位置座標を算出する座標算出装置で実行される座標算出方法であって、
前記撮像画像内における２つの位置座標の相対的な位置関係を示すベクトルを設定するベクトル設定ステップと、
前記撮像画像内において所定条件に合致する各領域の位置座標のうちの１つの位置座標を一方の前記対象位置座標に決定し、当該１つの位置座標と前記ベクトルとを用いて他方の前記対象位置座標を決定する座標決定ステップとを含む座標算出方法。
【請求項２６】
撮像装置によって撮像される撮像画像から、撮像画像に対応する平面上における所定の２つの撮像対象の位置を示す２つの対象位置座標を算出する座標算出装置で実行される座標算出方法であって、
前記撮像画像内における２つの位置座標を結ぶ方向と当該２つの位置座標間の長さとの少なくともいずれかに対する基準を設定する基準設定ステップと、
前記撮像画像内において所定条件に合致する領域の位置座標のうちの２つの位置座標の組み合わせの中から、前記基準設定ステップにおいて設定された基準に最も近い２つの位置座標の組み合わせを選択する選択ステップと、
前記選択ステップにおいて選択された２つの位置座標が選択できたか否かを判定する判定ステップと、
前記判定ステップにおける判定結果が肯定であるとき、前記選択ステップにおいて選択された２つの位置座標を前記２つの対象位置座標として出力する出力ステップと、
前記判定ステップにおける判定結果が否定であるとき、前記撮像画像内における２つの位置座標の相対的な位置関係を示すベクトルを設定するベクトル設定ステップと、
前記判定ステップにおける判定結果が否定であるとき、前記撮像画像内において所定条件に合致する領域の位置座標のうちの１つの位置座標を一方の前記対象位置座標に決定し、当該１つの位置座標と前記ベクトルとを用いて他方の前記対象位置座標を決定する座標決定ステップとを含む座標算出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、座標算出装置および座標算出プログラムに関し、より特定的には、撮像手段を用いて所定のマーカを撮像することによって座標を算出するための座標算出装置および座標算出プログラムに関する。
【背景技術】
【０００２】
特許文献１には、撮像手段を備えたポインティングデバイスが開示されている。このポインティングデバイスは、表示画面上における任意の位置を指定するためのものである。ポインティングデバイスは、撮像手段によって撮像された画像中の２つのマーカを検出し、画像内におけるマーカの位置を算出する。そして、ポインティングデバイスが指定する表示画面上の位置（指定位置）をマーカの位置から算出する。また、特許文献１には、赤色および緑色の２色のマーカを用いる場合、表示画面にはマーカの色を表示しないこと（段落００２９）や、撮像画像の中に２つのマーカが検出されない場合にはエラー処理を行うこと（段落００４２）が記載されている。
【特許文献１】特開平８−３３５１３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
特許文献１に記載されたポインティングデバイスでは、２つのマーカが検出されない場合、すなわち、マーカが１つでも撮像できなくなった場合にはエラー処理が行われる。つまり、撮像された画像に２つのマーカが含まれている場合に限りポインティングデバイスの操作が可能となる。したがって、１つのマーカが検出できなかった場合には、たとえもう１つのマーカが検出されていてもポインティングデバイスの操作が不可能となるので、ポインティングデバイスの操作が不可能になる可能性が高かった。
【０００４】
また、ユーザがポインティングデバイスを動かすことができる範囲は、２つのマーカが撮像される範囲に限られるので、狭い範囲でしかポインティングデバイスを動かすことができず、ユーザにとって使いにくいものになるおそれがあった。特に、２つのマーカ間の距離が大きい場合や、ポインティングデバイスとマーカとの距離が近い場合には、少なくとも一方のマーカの画像が撮像画像の端に近い部分に位置することになる。この場合、ポインティングデバイスを少し動かしただけでも撮像画像から一方のマーカが消失してエラー処理がなされてしまう。
【０００５】
それ故、本発明の目的は、操作可能な範囲を広くし、操作不可能になるおそれが少ない座標算出装置および座標算出プログラムを提供することである。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００７】
第１の発明は、撮像装置（撮像素子４０）によって撮像される撮像画像から、撮像画像に対応する平面（図９に示す座標平面）上における所定の２つの撮像対象（マーカ８ａおよび８ｂ）の位置を示す２つの対象位置座標（マーカ座標）を算出する座標算出装置（ゲーム装置３およびコントローラ７）である。座標算出装置は、座標検出手段（画像処理回路４１）と、ベクトル設定手段（ステップＳ６３およびＳ６４、または、ステップＳ９２およびＳ９３を実行するＣＰＵ１０等。以下、単にステップ番号のみを示す。）と、座標決定手段（Ｓ６２，Ｓ６６およびＳ６７、または、Ｓ９６およびＳ９８）とを備える。座標検出手段は、撮像画像内において所定条件に合致する領域の位置座標（検出座標）を当該領域毎に検出する。ベクトル設定手段は、撮像画像内における２つの位置座標の相対的な位置関係を示すベクトル（想定ベクトル）を設定する。座標決定手段は、座標検出手段によって検出された位置座標のうちの１つの位置座標を一方の対象位置座標に決定し、当該１つの位置座標とベクトルとを用いて他方の対象位置座標を決定する。
【０００８】
第２の発明においては、ベクトル設定手段は、撮像装置の傾きを算出する傾き算出手段によって算出された傾きに基づいてベクトルの方向を設定する方向設定手段（Ｓ６３）と、所定の長さとなるようにベクトルの長さを設定する長さ設定手段（Ｓ６４）とを含んでいてもよい。
【０００９】
第３の発明においては、座標算出装置は、座標決定手段によって決定された２つの対象位置座標、および、当該２つの対象位置座標を結ぶベクトルの少なくともいずれか一方を示す対象位置座標データ（マーカ座標データ５３４ａおよび５３４ｂ）を、座標決定手段による決定が行われる度に記憶する対象位置記憶手段（メインメモリ１３）をさらに備えていてもよい。このとき、長さ設定手段は、最後に記憶された対象位置座標データにより示される２つの対象位置座標を結ぶ長さとなるようにベクトルの長さを設定する。
【００１０】
第４の発明においては、方向設定手段は、撮像装置が所定の傾きとなった状態において傾き算出手段によって算出される傾きと、当該状態において撮像装置によって撮像される撮像画像から検出される２つの撮像対象の位置座標を結ぶ方向との対応関係に基づいてベクトルの方向を設定してもよい。
【００１１】
第５の発明においては、傾き算出手段は、撮像装置と共通の筐体に固定的に配置され、撮像装置の撮像方向に垂直な２軸方向の加速度を検出する加速度センサ（３７）を含んでいてもよい。このとき、ベクトル設定手段は、加速度センサによって検出された各軸方向の加速度に基づいてベクトルを算出する。
【００１２】
第６の発明においては、座標算出装置は、座標決定手段によって決定された２つの対象位置座標、および、当該２つの対象位置座標を結ぶベクトルの少なくともいずれか一方を示す対象位置座標データ（マーカ座標データ５３４ａおよび５３４ｂ）を、座標決定手段による決定が行われる度に記憶する対象位置記憶手段（メインメモリ１３）をさらに備えていてもよい。このとき、ベクトル設定手段は、最後に記憶された対象位置座標データから２つの対象位置座標を結ぶベクトル（前回ベクトル）を算出または取得する。
【００１３】
第７の発明においては、座標決定手段は、座標検出手段によって検出された位置座標のうちの１つの位置座標が、２つの対象位置座標のうちの第１の対象位置座標および第２の対象位置座標のいずれであるかを決定する第１決定手段（Ｓ６２）と、第１決定手段によって第１の対象位置座標が決定されたとき、当該第１の対象位置座標にベクトルを加算することによって第２の対象位置座標を決定し、第１決定手段によって第２の対象位置座標が決定されたとき、当該第２の対象位置座標からベクトルを減算することによって第１の対象位置座標を決定する第２決定手段（Ｓ６６およびＳ６７）とを含んでいてもよい。
【００１４】
第８の発明においては、座標算出装置は、座標決定手段によって決定された２つの対象位置座標を含む対象位置座標データ（マーカ座標データ５３４ａおよび５３４ｂ）を、座標決定手段による決定が行われる度に記憶する対象位置記憶手段（メインメモリ１３）をさらに備えていてもよい。このとき、第１決定手段は、前記座標検出手段によって検出されたそれぞれの位置座標と、最後に記憶された対象位置座標データにより示される第１の対象位置座標および第２の対象位置座標それぞれとの距離を算出し、座標検出手段によって検出された位置座標のうちのある位置座標と、最後に記憶された対象位置座標データにより示される第１の対象位置座標との距離が最短となるとき、当該ある位置座標を第１の対象位置座標に決定し、座標検出手段によって検出された位置座標のうちのある位置座標と、最後に記憶された対象位置座標データにより示される第２の対象位置座標との距離が最短となるとき、当該ある位置座標を第２の対象位置座標に決定する。
【００１５】
第９の発明においては、座標決定手段は、仮座標算出手段（Ｓ９４）と、決定実行手段（Ｓ９６およびＳ９７）とを含んでいてもよい。仮座標算出手段は、座標検出手段によって検出された位置座標のうちの１つを確定座標として当該確定座標の位置座標にベクトルを加算した位置座標を第１仮座標とし、当該位置座標からベクトルを減算した位置座標を第２仮座標として算出する。決定実行手段は、第１仮座標および第２仮座標のうちで第１仮座標のみが撮像画像の領域外となったとき、当該第１仮座標と確定座標とを２つの対象位置座標に決定し、第１仮座標および第２仮座標のうちで第２仮座標のみが撮像画像の領域外となったとき、当該第２仮座標と確定座標とを２つの対象位置座標に決定する。
【００１６】
第１０の発明においては、座標算出装置は、座標検出手段によって検出された位置座標が２つ以上であるとき、当該各位置座標を用いて２つの対象位置座標を算出する対象位置座標算出手段（Ｓ１２またはＳ１７）をさらに備えていてもよい。このとき、座標決定手段は、対象位置座標算出手段によって２つの対象位置座標を算出することが不可能であったとき、２つの対象位置座標を決定する。
【００１７】
第１１の発明は、撮像装置によって撮像される撮像画像から、撮像画像に対応する平面上における所定の２つの撮像対象の位置を示す２つの対象位置座標を算出する座標算出装置である。座標算出装置は、座標検出手段（画像処理回路４１）と、基準設定手段（Ｓ３５またはＳ７５）と、選択手段（Ｓ４１またはＳ８１）と、判定手段（Ｓ１３、Ｓ１８、またはＳ２２）と、出力手段（Ｓ４１またはＳ８１）と、ベクトル設定手段（Ｓ６３およびＳ６４、または、Ｓ９２およびＳ９３）と、座標決定手段（Ｓ６２，Ｓ６６およびＳ６７、または、Ｓ９６およびＳ９８）とを備える。座標検出手段は、撮像画像内において所定条件に合致する領域の位置座標を当該領域毎に検出する。基準設定手段は、座標検出手段によって複数の位置座標が検出されたとき、撮像画像内における２つの位置座標を結ぶ方向と当該２つの位置座標間の長さとの少なくともいずれかに対する基準を設定する。選択手段は、複数の位置座標のうちの２つの位置座標の組み合わせの中から、基準設定手段によって設定された基準に最も近い２つの位置座標の組み合わせを選択する。判定手段は、選択手段によって選択された２つの位置座標が選択できたか否かを判定する。出力手段は、判定手段による判定結果が肯定であるとき、選択手段によって選択された２つの位置座標を２つの対象位置座標として出力する。ベクトル設定手段は、判定手段による判定結果が否定であるとき、撮像画像内における２つの位置座標の相対的な位置関係を示すベクトルを設定する。座標決定手段は、判定手段による判定結果が否定であるとき、座標検出手段によって検出された位置座標のうちの１つの位置座標を一方の対象位置座標に決定し、当該１つの位置座標とベクトルとを用いて他方の対象位置座標を決定する。
【００１８】
なお、本発明は、上記発明を座標算出装置のコンピュータに実行させるための座標算出プログラムの形態で提供されてもよい。
【発明の効果】
【００１９】
第１の発明によれば、ベクトル設定手段によって設定されたベクトルを用いて、検出された位置座標からもう一方の対象位置座標を算出することができる。したがって、位置座標が１つしか検出されなかった場合でも、もう一方の座標をベクトルによって推定することによって２つの対象位置座標を決定することができる。
【００２０】
第２の発明によれば、傾き算出手段によって撮像装置の傾きを算出し、当該傾きに対応する方向を示すベクトルを設定することによって、撮像装置の傾きを考慮して２つの対象位置座標を決定することができる。２つ対象位置座標を結ぶ方向は撮像装置の傾きに対応するので、撮像装置の傾きを考慮して２つの対象位置座標を決定することによって、２つの対象座標位置を正確に決定することができる。
【００２１】
第３の発明によれば、以前の対象位置座標のデータを用いて、当該対象位置座標間の長さとなるようにベクトルの長さが設定される。ここで、選択処理が１秒間に数十〜数百回の頻度で実行される場合等には、以前の対象位置座標から今回の対象位置座標への変化量が大きくないと想定することができる。したがって、ベクトルの長さを、以前の対象位置座標間の長さとすることによって、２つの対象位置座標を正確に選択することができる。
【００２２】
第４の発明によれば、以前の対象位置座標のデータを用いて、当該対象位置座標間の長さとなるようにベクトルの方向および長さが設定される。上述したように、選択処理が１秒間に数十〜数百回の頻度で実行される場合等には、以前の対象位置座標から今回の対象位置座標への変化量が大きくないと想定することができる。したがって、以前の対象位置座標のデータを用いてベクトルを設定することによって、２つの対象座標位置をより正確に選択することができる。
【００２３】
第５の発明によれば、撮像装置の傾きと、対象位置座標を結ぶ方向との対応関係に基づいて第１ベクトルが算出されるので、撮像装置の傾きに対応した第１ベクトルを正確に算出することができる。
【００２４】
第６の発明によれば、加速度センサを用いることによって、重力加速度（すなわち、９．８ｍ／ｓ2 ）に応じた加速度センサの出力信号から撮像装置の傾きを容易に検出することができる。
【００２５】
第７の発明によれば、検出された位置座標に対してベクトルを加算または減算することによって、もう一方の対象位置座標を正確に算出することができる。
【００２６】
第８の発明によれば、検出された位置座標のうちで、以前の対象位置座標に最も近い位置座標が一方の対象位置座標に決定される。さらに、決定された対象位置座標が、以前の対象位置座標（第１および第２の対象位置座標）のいずれに近かったかによって、決定された対象位置座標が第１の対象位置座標であるか第２の対象位置座標であるかが決定される。これによって、第８の発明によれば、検出された位置座標が第１の対象位置座標であるか第２の対象位置座標であるかを正確に決定することができる。また、他方の対象位置座標を算出するためにベクトルを加算するか減算するかを正確に判断することができる。
【００２７】
第９の発明によれば、対象位置座標のうち検出されなかった方の位置座標は、撮像画像の外側にあると推定することによって、以前の対象位置座標のデータを用いたり、撮像装置の傾きを算出したりすることなく、簡易にもう一方の対象位置座標を決定することができる。
【００２８】
第１０の発明によれば、２つ以上の検出された位置座標を用いて対象位置座標を算出する方法によって対象位置座標が算出することができなかった場合に、１つの検出された位置座標を用いて対象位置座標を算出する方法が行われる。これによって、対象位置座標を算出する確実性を高めることができるとともに、対象位置座標が算出不可能となる可能性を低くすることができる。
【００２９】
第１１の発明によれば、基準設定手段によって設定された基準を用いることによって、複数の位置座標の中から２つの対象位置座標を選択することができる。したがって、ノイズの影響によって３つ以上の位置座標が座標検出手段によって検出された場合でも、その中から２つの位置座標を特定することができ、ノイズの影響を排除することができる。これによって、ノイズの影響があった場合でも撮像対象の位置座標を算出することができる。さらに、第１１の発明によれば、基準を用いて対象位置座標を選択する方法によって得られた対象位置座標が正しいものでない可能性を、対象位置座標と基準との類似度を用いて判定する。そして、類似度が所定値を上回っている場合、すなわち、上記可能性が高い場合、１つの位置座標と、ベクトル設定手段によって設定されたベクトルとを用いて、当該位置座標からもう一方の対象位置座標を算出する。これによって、検出される位置座標の数がいくつであっても対象位置座標を算出することができる。また、基準を用いて対象位置座標を選択する方法を先に行うことによって、正しい対象位置座標が算出される確率を高めることができるとともに、ベクトルを用いた方法を後に行うことによって、対象位置座標が算出不可能となる可能性を低くすることができる。
【発明を実施するための最良の形態】
【００３０】
図１を参照して、本発明の一実施形態に係る座標算出装置の一例であるゲーム装置を含むゲームシステム１について説明する。なお、図１は、当該ゲームシステム１を説明するための外観図である。以下、据置型のゲーム装置を一例にして、本発明の座標算出装置について説明する。
【００３１】
図１において、ゲームシステム１は、家庭用テレビジョン受像機等のスピーカを備えたディスプレイ（以下、モニタと記載する）２に、接続コードを介して接続される据置型ゲーム装置（以下、単にゲーム装置と記載する）３および当該ゲーム装置３に操作データを与えるコントローラ７によって構成される。また、モニタ２の周辺（図では画面の上側）には、２つのマーカ８ａおよび８ｂが設置される。マーカ８ａおよび８ｂは、具体的には赤外ＬＥＤであり、それぞれモニタ２の前方に向かって赤外光を出力する。ゲーム装置３は、接続端子を介して受信ユニット６が接続される。受信ユニット６は、コントローラ７から無線送信される操作データを受信し、コントローラ７とゲーム装置３とは無線通信によって接続される。また、ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着される。ゲーム装置３の上部主面には、当該ゲーム装置３の電源ＯＮ／ＯＦＦスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置３上部の蓋を開くＯＰＥＮスイッチが設けられている。ここで、プレイヤがＯＰＥＮスイッチを押下することによって上記蓋が開き、光ディスク４の脱着が可能となる。
【００３２】
また、ゲーム装置３には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ２に表示する。さらに、ゲーム装置３は、外部メモリカード５に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００３３】
コントローラ７は、その内部に備える通信部３６（後述）から受信ユニット６が接続されたゲーム装置３へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて操作データを無線送信する。コントローラ７は、操作対象（モニタ２に表示されるオブジェクト）を操作するための操作手段である。コントローラ７は、複数の操作ボタンからなる操作部が設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７から見た画像を撮像するための撮像情報演算部３５（後述）を備えている。すなわち、撮像情報演算部３５は、モニタ２の周辺に配置された各マーカ８ａおよび８ｂを撮像対象として、各マーカ８ａおよび８ｂの画像を撮像する。ゲーム装置３は、この画像を用いてコントローラ７の位置および姿勢に対応した操作信号を得る。
【００３４】
次に、図２を参照して、ゲーム装置３の構成について説明する。なお、図２は、ゲーム装置３の機能ブロック図である。
【００３５】
図２において、ゲーム装置３は、各種プログラムを実行する例えばリスク（ＲＩＳＣ）ＣＰＵ（セントラルプロセッシングユニット）１０を備える。ＣＰＵ１０は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、メインメモリ１３等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。ＣＰＵ１０には、メモリコントローラ１１を介して、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１２、メインメモリ１３、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３４、およびＡＲＡＭ（Ａｕｄｉｏ  ＲＡＭ）３５が接続される。また、メモリコントローラ１１には、所定のバスを介して、コントローラＩ／Ｆ（インターフェース）１６、ビデオＩ／Ｆ１７、外部メモリＩ／Ｆ１８、オーディオＩ／Ｆ１９、およびディスクＩ／Ｆ２１が接続され、それぞれ受信ユニット６、モニタ２、外部メモリカード５、スピーカ２２、およびディスクドライブ２０が接続されている。
【００３６】
ＧＰＵ１２は、ＣＰＵ１０の命令に基づいて画像処理を行うものあり、例えば、３Ｄグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。ＧＰＵ１２は、図示しない画像処理専用のメモリやメインメモリ１３の一部の記憶領域を用いて画像処理を行う。ＧＰＵ１２は、これらを用いてモニタ２に表示すべきゲーム画像データやムービー映像を生成し、適宜メモリコントローラ１１およびビデオＩ／Ｆ１７を介してモニタ２に出力する。
【００３７】
メインメモリ１３は、ＣＰＵ１０で使用される記憶領域であって、ＣＰＵ１０の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ１３は、ＣＰＵ１０によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ１３に記憶されたゲームプログラムや各種データ等がＣＰＵ１０によって実行される。
【００３８】
ＤＳＰ１４は、ゲームプログラム実行時にＣＰＵ１０において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのＡＲＡＭ１５が接続される。ＡＲＡＭ１５は、ＤＳＰ１４が所定の処理（例えば、先読みしておいたゲームプログラムやサウンドデータの記憶）を行う際に用いられる。ＤＳＰ１４は、ＡＲＡＭ１５に記憶されたサウンドデータを読み出し、メモリコントローラ１１およびオーディオＩ／Ｆ１９を介してモニタ２に備えるスピーカ２２に出力させる。
【００３９】
メモリコントローラ１１は、データ転送を統括的に制御するものであり、上述した各種Ｉ／Ｆが接続される。コントローラＩ／Ｆ１６は、例えば４つのコントローラＩ／Ｆで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置３とを通信可能に接続する。例えば、受信ユニット６は、上記コネクタと嵌合し、コントローラＩ／Ｆ１６を介してゲーム装置３と接続される。上述したように受信ユニット６は、コントローラ７からの操作データを受信し、コントローラＩ／Ｆ１６を介して当該操作データをＣＰＵ１０へ出力する。なお、他の実施形態においては、ゲーム装置３は、受信ユニット６に代えて、コントローラ７から送信されてくる操作データを受信する受信モジュールをその内部に設ける構成としてもよい。この場合、受信モジュールが受信した送信データは、所定のバスを介してＣＰＵ１０に出力される。ビデオＩ／Ｆ１７には、モニタ２が接続される。外部メモリＩ／Ｆ１８には、外部メモリカード５が接続され、その外部メモリカード５に設けられたバックアップメモリ等とアクセス可能となる。オーディオＩ／Ｆ１９にはモニタ２に内蔵されるスピーカ２２が接続され、ＤＳＰ１４がＡＲＡＭ１５から読み出したサウンドデータやディスクドライブ２０から直接出力されるサウンドデータをスピーカ２２から出力可能に接続される。ディスクＩ／Ｆ２１には、ディスクドライブ２０が接続される。ディスクドライブ２０は、所定の読み出し位置に配置された光ディスク４に記憶されたデータを読み出し、ゲーム装置３のバスやオーディオＩ／Ｆ１９に出力する。
【００４０】
次に、図３〜図７を参照して、コントローラ７について説明する。図３〜図５は、コントローラ７の外観構成を示す斜視図である。図３Ａは、コントローラ７の上面後方から見た斜視図であり、図３Ｂは、コントローラ７を下面後方から見た斜視図である。図４は、コントローラ７を前方から見た図である。
【００４１】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング３１を有している。ハウジング３１は、その前後方向（図３に示すＺ軸方向）を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ７を用いることによって、それに設けられたボタンを押下することと、コントローラ７自体の位置や向きを変えることとによってゲーム操作を行うことができる。例えば、プレイヤは、長手方向を軸としてコントローラ７を回転させることによって、操作対象に移動動作を行わせることができる。また、プレイヤは、コントローラ７によって指し示される画面上の位置を変える操作によって、ゲーム空間に登場するオブジェクトを移動させることができる。ここで、「コントローラ７によって指し示される画面上の位置」とは、理想的には、コントローラ７の前端部から上記長手方向に延ばした直線とモニタ２の画面とが交わる位置であるが、厳密に当該位置である必要はなく、その周辺の位置をゲーム装置３によって算出することができればよい。以下では、コントローラ７によって指し示される画面上の位置を「指示位置」と呼ぶ。また、コントローラ７（ハウジング３１）の長手方向を、「コントローラ７の指示方向」と呼ぶことがある。
【００４２】
ハウジング３１には、複数の操作ボタンが設けられる。ハウジング３１の上面には、十字キー３２ａ、Ｘボタン３２ｂ、Ｙボタン３２ｃ、Ｂボタン３２ｄ、セレクトスイッチ３２ｅ、メニュースイッチ３２ｆ、およびスタートスイッチ３２ｇが設けられる。一方、ハウジング３１の下面には凹部が形成されており、当該凹部の後面側傾斜面にはＡボタン３２ｉが設けられる。これらの各ボタン（スイッチ）は、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。また、ハウジング３１の上面には、遠隔からゲーム装置３本体の電源をオン／オフするための電源スイッチ３２ｈが設けられる。
【００４３】
また、コントローラ７は撮像情報演算部３５（図５Ｂ）を有しており、図４に示すように、ハウジング３１前面には撮像情報演算部３５の光入射口３５ａが設けられる。一方、ハウジング３１の後面にはコネクタ３３が設けられている。コネクタ３３は、例えば３２ピンのエッジコネクタであり、コントローラ７に他の機器を接続するために利用される。また、ハウジング３１上面の後面側には複数のＬＥＤ３４が設けられる。ここで、コントローラ７には、他のコントローラ７と区別するためにコントローラ種別（番号）が付与される。ＬＥＤ３４は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７からゲーム装置３へ操作データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ３４のいずれか１つが点灯する。
【００４４】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。図５Ａおよび図５Ｂは、コントローラ７の内部構造を示す図である。なお、図５Ａは、コントローラ７の上筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５Ｂは、コントローラ７の下筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５Ｂに示す基板３００は、図５Ａに示す基板３００の裏面から見た斜視図となっている。
【００４５】
図５Ａにおいて、ハウジング３１の内部には基板３００が固設されており、当該基板３００の上主面上に操作ボタン３２ａ〜３２ｈ、加速度センサ３７、ＬＥＤ３４、水晶振動子４６、無線モジュール４４、およびアンテナ４５等が設けられる。そして、これらは、基板３００等に形成された配線（図示せず）によってマイコン４２（図６参照）に接続される。また、無線モジュール４４およびアンテナ４５によって、コントローラ７がワイヤレスコントローラとして機能する。なお、水晶振動子４６は、後述するマイコン４２の基本クロックを生成する。
【００４６】
一方、図５Ｂにおいて、基板３００の下主面上の前端縁に撮像情報演算部３５が設けられる。撮像情報演算部３５は、コントローラ７の前方から順に赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１によって構成されおり、それぞれ基板３００の下主面に取り付けられる。また、基板３００の下主面上の後端縁にコネクタ３３が取り付けられる。そして、撮像情報演算部３５の後方であって基板３００の下主面上に操作ボタン３２ｉが取り付けられていて、それよりさらに後方に、電池４７が収容される。電池４７とコネクタ３３との間の基板３００の下主面上には、バイブレータ４８が取り付けられる。このバイブレータ４８は、例えば振動モータやソレノイドであってよい。バイブレータ４８が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームを実現することができる。
【００４７】
図６は、コントローラ７の構成を示すブロック図である。コントローラ７は、上述した操作部３２（各操作ボタン）および撮像情報演算部３５の他に、その内部に通信部３６および加速度センサ３７を備えている。
【００４８】
撮像情報演算部３５は、撮像手段が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムである。撮像情報演算部３５は、例えば最大２００フレーム／秒程度のサンプリング周期を有するので、比較的高速なコントローラ７の動きでも追跡して解析することができる。
【００４９】
具体的には、撮像情報演算部３５は、赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を含んでいる。赤外線フィルタ３８は、コントローラ７の前方から入射する光から赤外線のみを通過させる。ここで、モニタ２の表示画面近傍に配置されるマーカ８ａおよび８ｂは、モニタ２の前方に向かって赤外光を出力する赤外ＬＥＤである。したがって、赤外線フィルタ３８を設けることによってマーカ８ａおよび８ｂの画像をより正確に撮像することができる。レンズ３９は、赤外線フィルタ３８を透過した赤外線を集光して撮像素子４０へ入射させる。撮像素子４０は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ３９が集光した赤外線を撮像する。したがって、撮像素子４０は、赤外線フィルタ３８を通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子４０によって撮像された画像を撮像画像と呼ぶ。撮像素子４０によって生成された画像データは、画像処理回路４１で処理される。画像処理回路４１は、撮像画像内における撮像対象（マーカ８ａおよび８ｂ）の位置を算出する。画像処理回路４１は、各マーカ８ａおよび８ｂの撮像画像内における位置を示す各座標値を撮像データとして通信部３６へ出力する。なお、画像処理回路４１における処理の詳細については後述する。
【００５０】
図６に示すように、コントローラ７は３軸の加速度センサ３７を備えていることが好ましい。この３軸の加速度センサ３７は、３方向、すなわち、上下方向（図３Ａおよび図３Ｂに示すＹ軸）、左右方向（図３Ａおよび図３Ｂに示すＸ軸）、および前後方向（図３Ａおよび図３Ｂに示すＺ軸）で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、Ｘ軸とＹ軸（または他の対になった軸）のそれぞれに沿った直線加速度のみを検知する２軸の加速度検出手段を使用してもよい。例えば、この３軸または２軸の加速度センサ３７は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはＳＴマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ３７は、シリコン微細加工されたＭＥＭＳ（Micro Electro Mechanical Systems：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であることが好ましい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて３軸または２軸の加速度センサ３７が提供されてもよい。
【００５１】
当業者には公知であるように、加速度センサ３７に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ３７からの直接の出力は、その２軸または３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ３７は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００５２】
しかしながら、加速度センサ３７から出力される加速度の信号に対して追加の処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、静的な加速度（重力加速度）が検知されると、加速度センサ３７からの出力を用いて、傾斜角度と検知された加速度とを用いた演算によって重力ベクトルに対する対象（コントローラ７）の傾きを推測することができる。このように、加速度センサ３７をマイコン４２（または他のプロセッサ）と組み合わせて用いることによって、コントローラ７の傾き、姿勢または位置を決定することができる。同様に、加速度センサ３７を備えるコントローラ７が例えばユーザの手で動的に加速されて動かされる場合に、加速度センサ３７によって生成される加速度信号を処理することによって、コントローラ７のさまざまな動きおよび／または位置を算出または推測することができる。他の実施例では、加速度センサ３７は、信号をマイコン４２に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角に変換するものであってもよい。
【００５３】
この３軸の加速度センサの加速度出力を用いて、Ｘ軸方向、Ｙ軸方向およびＺ軸方向に対するコントローラ７の傾きを算出することができる。このように、ゲーム装置３は、撮像した画像からだけではなく加速度センサ３７からの加速度信号を用いることによってもＺ軸を中心としたコントローラ７の回転角を判定することができる。加速度センサ３７で検知された加速度を示すデータは通信部３６に出力される。
【００５４】
他の実施形態では、加速度センサ３７の代わりに、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるＭＥＭＳジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ３７と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転（または角速度）を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途に応じていずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、前記初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、２つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロセンサとの基本的な差異と同様にジャイロセンサの特性も当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。  
【００５５】
通信部３６は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）４２、メモリ４３、無線モジュール４４、およびアンテナ４５を含んでいる。マイコン４２は、処理の際にメモリ４３を記憶領域として用いながら、マイコン４２が取得したデータを無線送信する無線モジュール４４を制御する。
【００５６】
操作部３２、加速度センサ３７、および撮像情報演算部３５からマイコン４２へ出力されたデータは、一時的にメモリ４３に格納される。ここで、通信部３６から受信ユニット６への無線送信は所定の周期毎に行われるが、ゲームの処理は１／６０を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。マイコン４２は、受信ユニット６への送信タイミングが到来すると、メモリ４３に格納されているデータを操作データとして無線モジュール４４へ出力する。無線モジュール４４は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ４５から放射する。つまり、操作データは、無線モジュール４４で微弱電波信号に変調されてコントローラ７から送信される。微弱電波信号はゲーム装置３側の受信ユニット６で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置３は操作データを取得することができる。そして、ゲーム装置３のＣＰＵ１０は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。
【００５７】
なお、図３〜図５に示したコントローラ７の形状や、各操作スイッチの形状、数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができることは言うまでもない。また、コントローラ７における撮像情報演算部３５の位置（撮像情報演算部３５の光入射口３５ａ）は、ハウジング３１の前面でなくてもよく、ハウジング３１の外部から光を取り入れることができれば他の面に設けられてもかまわない。このとき、上記「コントローラ７の指示方向」は、光入射口に垂直な方向、すなわち、撮像素子４０の撮像方向となる。
【００５８】
上記コントローラ７を用いることによって、プレイヤは、各操作スイッチを押下する従来の一般的なゲーム操作に加えて、コントローラ７自身の位置を動かしたり、コントローラ７を回転させたりするというゲーム操作を行うことができる。以下、上記コントローラ７を用いたゲーム操作について説明する。
【００５９】
図７は、コントローラ７を用いてゲーム操作するときの状態を概説する図解図である。図７に示すように、ゲームシステム１でコントローラ７を用いてゲームをプレイする際、プレイヤは、一方の手でコントローラ７を把持する。ここで、マーカ８ａおよび８ｂは、モニタ２の画面の横方向と平行に配置されている。プレイヤは、コントローラ７の前面（撮像情報演算部３５が撮像する光の入射口側）がマーカ８ａおよび８ｂの方向を向く状態でコントローラ７を把持する。この状態で、プレイヤは、コントローラ７が指し示す画面上の位置（指示位置）を変更したり、コントローラ７と各マーカ８ａおよび８ｂとの距離を変更したりすることによってゲーム操作を行う。
【００６０】
図８は、マーカ８ａおよび８ｂとコントローラ７との視野角を説明するための図である。図８に示すように、各マーカ８ａおよび８ｂは、それぞれ視野角θ１の範囲で赤外光を放射する。また、撮像情報演算部３５の撮像素子４０は、上記コントローラ７の視線方向を中心とした視野角θ２の範囲で入射する光を受光することができる。例えば、各マーカ８ａおよび８ｂの視野角θ１は共に３４°（半値角）であり、撮像素子４０の視野角θ２は４１°である。プレイヤは、撮像素子４０が２つのマーカ８ａおよび８ｂからの赤外光を受光することが可能な位置および向きとなるように、コントローラ７を把持する。具体的には、撮像素子４０の視野角θ２の中に少なくとも一方のマーカ８ａおよび８ｂが存在し、かつ、マーカ８ａまたは８ｂの少なくとも一方の視野角θ１の中にコントローラ７が存在する状態となるように、プレイヤはコントローラ７を把持する。この状態にあるとき、コントローラ７は、マーカ８ａおよび／または８ｂを検知することができる。プレイヤは、この状態を満たす範囲でコントローラ７の位置および向きを変化させることによってゲーム操作を行うことができる。なお、コントローラ７の位置および向きがこの範囲外となった場合、コントローラ７の位置および向きに基づいたゲーム操作を行うことができなくなる。以下では、上記範囲を「操作可能範囲」と呼ぶ。
【００６１】
操作可能範囲内でコントローラ７が把持される場合、撮像情報演算部３５によって各マーカ８ａおよび８ｂの画像が撮像される。すなわち、撮像素子４０によって得られる撮像画像には、撮像対象である各マーカ８ａおよび８ｂの画像（対象画像）が含まれる。図９は、対象画像を含む撮像画像の一例を示す図である。なお、図９において、点線で囲まれる領域Ａ１は撮像画像内の領域を示す。対象画像を含む撮像画像の画像データを用いて、画像処理回路４１は、各マーカ８ａおよび８ｂの撮像画像における位置を表す座標を検出する。
【００６２】
具体的には、画像処理回路４１は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に検出する。ここで、所定条件とは、対象画像を検出するための条件であり、所定条件の具体的な内容は、輝度が所定値以上の領域（高輝度領域）であり、かつ、領域の大きさが所定範囲内の大きさであることである。なお、所定条件は撮像対象を検出するための条件であればよく、他の実施形態においては、画像の色に関する条件を含んでいてもよい。撮像画像の画像データにおいて対象画像は高輝度領域として現れるので、画像処理回路４１は、まず、この高輝度領域を対象画像の候補として検出する。次に、検出された高輝度領域の大きさに基づいて、その高輝度領域が対象画像であるか否かを判定する。撮像画像には、対象画像である２つのマーカ８ａおよび８ｂの画像８ａ’および８ｂ’の他、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれていることがある。上記の判定処理は、対象画像であるマーカ８ａおよび８ｂの画像８ａ’および８ｂ’とそれ以外の画像とを区別し、対象画像を正確に検出するための処理である。具体的には、当該判定処理においては、検出された高輝度領域が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度領域が所定範囲内の大きさである場合、当該高輝度領域は対象画像を表すと判定され、高輝度領域が所定範囲内の大きさでない場合、当該高輝度領域は対象画像以外の画像を表すと判定される。
【００６３】
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度領域について、画像処理回路４１は当該高輝度領域の位置を算出する。具体的には、当該高輝度領域の重心位置を算出する。なお、重心位置は撮像素子４０の解像度よりも詳細なスケールで算出することが可能である。ここでは、撮像素子４０によって撮像された撮像画像の解像度が１２６×９６であるとし、重心位置は１０２４×７６８のスケールで算出されるものとする。つまり、重心位置の座標は、（０，０）から（１０２４，７６８）までの整数値で表現される。なお、撮像画像における位置は、図９に示すように、撮像画像の左上を原点とし、下向きをｙ軸正方向とし、右向きをｘ軸正方向とする座標系（ｘｙ座標系）で表現されるものとする。画像処理回路４１は、上記算出処理によって算出された座標を示すデータを出力する。出力された座標のデータは、上述したように、マイコン４２によって操作データとしてゲーム装置３に送信される。なお、本実施例では、撮像画像から対象画像の位置を示す座標を算出する処理までをコントローラ７の画像処理回路４１および／またはマイコン４２で行ったが、例えば撮像画像をゲーム装置３に送り、以降の処理と同等の処理をゲーム装置３のＣＰＵ１０等で行わせることもできる。
【００６４】
以上のようにして、画像処理回路４１は、撮像画像内において所定条件に合致する領域の位置を示す座標を当該領域毎に検出する。なお、以下では、画像処理回路４１によって検出される座標を、後述するマーカ座標と区別する目的で「検出座標」と呼ぶことがある。
【００６５】
ここで、画像処理回路４１によってマーカ８ａおよび８ｂが正しく検出される場合、検出座標の数は２個になるが、マーカが正しく検出されない場合には、上記所定範囲内の大きさとなる高輝度領域の数が２個になるとは限らないので、検出座標の数が０個になったり、１個になったり、３個以上になったりすることもある。例えば、撮像画像にノイズが含まれる場合には、３つ以上の座標が検出されることがあり得る。撮像画像にノイズが含まれる場合とは、例えば、モニタ２の画面にマーカと同じような画像が表示されたり、モニタ２の周辺にマーカと同様の赤外光を放射する物体が存在したりする場合である。また、例えば、コントローラ７とマーカ８ａおよび８ｂとが離れすぎていたり、コントローラとマーカ８ａおよび８ｂとの間に何らかの障害物が存在したりする場合には、２つの座標が検出されず、０個または１個の座標のみが検出されることがあり得る。さらに、マーカ８ａおよび８ｂのいずれか一方のみがコントローラ７の撮像素子４０の視野角に含まれる場合には、当該一方のマーカに対応する１個の座標のみが検出される。
【００６６】
なお、検出座標が２個である場合、例えば後述するような方法（図１６参照）によってコントローラ７の移動状態や回転状態を検出座標から検知することができる。しかし、検出される座標が２個でない場合には、検出座標をそのまま用いてもコントローラの移動や回転を正確に検知することができない。
【００６７】
そこで、本実施形態では、検出座標を用いて、マーカ８ａおよび８ｂに対応する正しい２つの座標を算出する処理（算出処理）を行う。以下では、算出処理の結果算出される、マーカ８ａおよび８ｂに対応する正しい２つの座標を「マーカ座標」と呼ぶ。さらに、本実施形態では、２つのマーカ座標を区別する目的で、マーカ座標の一方を第１マーカ座標と呼び、他方を第２マーカ座標と呼ぶ。なお、詳細は後述するが、本実施形態に係るゲーム装置３では、第１算出処理から第４算出処理という４種類の算出処理が用いられる。詳細は後述するが、本実施形態に係るゲーム装置３は、第１〜第４算出処理を状況に応じて使い分けることによって、第１〜第４算出処理を効果的に用いる。以下、図１０〜図１５を用いて第１〜第４算出処理の概要について説明する。
【００６８】
まず、第１算出処理について説明する。第１算出処理は、２つ以上の座標の中からマーカ座標を選択する処理である。第１算出処理は、検出座標が２つ以上の場合に用いることが可能である。図１０は、第１算出処理を説明するための図である。図１０において、点ｐ１、点ｐ２、および点ｐ３は、今回検出された座標の位置を示す。つまり、図１０においては、画像処理回路４１によって３つの座標が検出され、当該３つの座標を示すデータを含む操作データがコントローラ７からゲーム装置３へ送信されたものとする。また、図１０において、点Ｐ’１および点Ｐ’２は、前回のマーカ座標の位置を示し、具体的には、点Ｐ’１が第１マーカ座標に対応し、点Ｐ’２が第２マーカ座標に対応する。前回のマーカ座標とは、前回に決定されたマーカ座標、すなわち、画像処理回路４１によって前回に検出された座標を用いた前回の算出処理の結果算出されたマーカ座標である。なお、図１０において、点線で囲まれる領域Ａ１は撮像画像の領域を示す。
【００６９】
第１算出処理において、まず、ゲーム装置３は、３つの検出座標の組み合わせの中から、正しいマーカ８ａおよび８ｂの位置を示す２つの検出座標の組み合わせを選択する。具体的には、まず、ゲーム装置３は、検出座標のうちの１つを始点とし、他の１つを終点とするベクトルを全ての検出座標の組み合わせについて算出する。図１０の例では、検出座標は３つであるので、ゲーム装置３は、次の６つのベクトルを算出する。
（１）点ｐ１を始点とし点ｐ２を終点とするベクトルｖ１２
（２）点ｐ２を始点とし点ｐ１を終点とするベクトルｖ２１
（３）点ｐ１を始点とし点ｐ３を終点とするベクトルｖ１３
（４）点ｐ３を始点とし点ｐ１を終点とするベクトルｖ３１
（５）点ｐ２を始点とし点ｐ３を終点とするベクトルｖ２３
（６）点ｐ３を始点とし点ｐ２を終点とするベクトルｖ３２
第１算出処理においては、これらのベクトルの中から基準となるベクトル（後述する前回ベクトル）に最も類似するベクトルが選択される。
【００７０】
次に、ゲーム装置３は、前回のマーカ座標によって決められる前回ベクトルを算出する。前回ベクトルは、検出座標から算出される各ベクトルから１つのベクトルを選択する基準となるベクトルである。本実施形態では、前回ベクトルは、第１マーカ座標を始点とし、第２マーカ座標を終点とするベクトルである。図１０の例では、ゲーム装置３は、第１マーカ座標に対応する点Ｐ’１を始点とし、第２マーカ座標に対応する点Ｐ’２を終点とするベクトルＶを前回ベクトルとして算出する。
【００７１】
次に、ゲーム装置３は、検出座標から算出された各ベクトルのうちで、前回ベクトルに最も類似するベクトルを選択する。本実施形態では、当該各ベクトルについて、ベクトルの長さおよび方向に関する類似度を算出し、類似度が最も高いベクトルを選択する。図１０の例では、例えばベクトルｖ１２が前回ベクトルＶに最も類似するベクトルとして選択される。なお、類似度の算出方法については後述する。そして、選択したベクトルの始点となる座標を第１マーカ座標に決定し、終点となる座標を第２マーカ座標に決定する。
【００７２】
上記第１算出処理では、前回ベクトルに最も近いベクトルとなる２つの座標の組み合わせが選択される。ここで、２つのマーカ座標を算出する処理は、上述したように１秒間に数十〜数百回の頻度で実行される一方、当該処理が１回行われる間にプレイヤがコントローラをＺ軸方向に平行移動させる距離はわずかであると考えられる。また、当該処理が１回行われる間にプレイヤがコントローラをＺ軸周りに回転させる角度はわずかであると考えられる。したがって、マーカ座標を結ぶベクトルの長さおよび方向が上記処理が１回行われる間に変化する量は、わずかであると考えられる。それ故、検出された各座標の中から、前回ベクトルに最も近いベクトルとなる２つの座標を選択することによって、３つ以上の座標が検出される場合であっても２つのマーカ座標を正確に算出することができる。
【００７３】
次に、第２算出処理について説明する。第２算出処理は、第１算出処理と同様、２つ以上の座標の中からマーカ座標を選択する処理である。第２算出処理は、検出座標が２つ以上の場合に用いることが可能である。図１１は、第２算出処理を説明するための図である。図１１において、点ｐ４、点ｐ５、および点ｐ６は、今回検出された座標の位置を示す。また、図１１においてｘｙ座標系の座標領域外に示されたベクトルＶ’は、想定ベクトルである。想定ベクトルとは、現在のマーカ座標を結ぶベクトルとして想定されるベクトルである。より具体的には、想定ベクトルは、現在の第１マーカ座標として想定される座標を始点とし、現在の第２マーカ座標として想定される座標を終点とするベクトルである。想定ベクトルは、加速度センサ３７の出力に基づいて算出される。
【００７４】
第２算出処理において、まず、ゲーム装置３は、第１算出処理の場合と同様、３つの検出座標の組み合わせの中から、正しいマーカ８ａおよび８ｂの位置を示す２つの検出座標の組み合わせを選択する。図１１の例では、検出座標は３つであるので、ゲーム装置３は、点ｐ４を始点とし点ｐ５を終点とするベクトルｖ４５、点ｐ５を始点とし点ｐ４を終点とするベクトルｖ５４、点ｐ４を始点とし点ｐ６を終点とするベクトルｖ４６、点ｐ６を始点とし点ｐ４を終点とするベクトルｖ６４、点ｐ５を始点とし点ｐ６を終点とするベクトルｖ５６、および、点ｐ６を始点とし点ｐ５を終点とするベクトルｖ６５という６つのベクトルを算出する。第２算出処理においては、これらのベクトルの中から基準となるベクトル（想定ベクトル）に最も類似するベクトルが選択される。
【００７５】
次に、ゲーム装置３は、上記想定ベクトルを算出する。想定ベクトルは、第１算出処理で用いられる前回ベクトルと同様、検出座標から算出される各ベクトルから１つのベクトルを選択する基準となるベクトルである。本実施形態では、想定ベクトルは、加速度センサ３７によって検知された加速度を示すベクトルに基づいて算出される。なお、想定ベクトルの具体的な算出方法については後述する。図１１の例では、図１１に示す想定ベクトルＶ’が算出されたものとする。なお、本実施形態における第２算出処理では、想定ベクトルＶ’は、例えばその長さが１の単位ベクトルである。
【００７６】
次に、ゲーム装置３は、検出座標から算出された各ベクトルのうちで、想定ベクトルにより示される方向に最も近い方向を示すベクトルを選択する。図１１の例では、ベクトルｖ４５により示される方向が想定ベクトルにより示される方向に最も近いので、ベクトルｖ４５が選択される。ゲーム装置３は、選択したベクトルの始点となる座標を第１マーカ座標に決定し、終点となる座標を第２マーカ座標に決定する。
【００７７】
上記第２算出処理では、想定ベクトルの方向に最も近い方向を示すベクトルとなる２つの座標の組み合わせが選択される。第２算出処理では、加速度センサの加速度出力からコントローラ７の傾きを算出し、撮像画像においてマーカ８ａおよび８ｂの画像がどのような位置関係となるかをコントローラ７の傾きから想定している。このように、第２算出処理では、コントローラ７の実際の傾きを考慮して選択を行うので、第２算出処理によれば、３つ以上の座標が検出される場合であっても２つのマーカ座標を正確に算出することができる。
【００７８】
以上のように、上記第１算出処理および第２算出処理によれば、複数の検出座標から２つのマーカ座標を選択するための基準が設定される。すなわち、第１算出処理では前回ベクトルが基準として設定され、第２算出処理では想定ベクトルが基準として設定される。このように、基準を用いることによって、検出座標が３つ以上である場合でも２つのマーカ座標を選択することができる。上記基準は、２つの座標間の長さを示すものであって、当該基準となる長さと２つの座標間の長さとをそれぞれ比較するものであってもよいし、上記第２算出処理で用いられる想定ベクトルのように、２つの座標を結ぶ方向を示すものであってもよいし、上記第１算出処理で用いられる前回ベクトルのように、２つの座標間の長さおよび２つの座標を結ぶ方向を示すものであってもよい。また、本実施形態では、上記基準は、前回のマーカ座標およびコントローラ７の傾きといった状況に応じて変化するものであったが、他の実施形態では、上記基準は予め定められていてもよい。例えば、撮像方向を軸とした傾きが一定の状態でコントローラ７を使用することが前提とされる場合には、ｘ軸に平行な方向を示すベクトルを上記基準として用いてもよい。また、例えば、コントローラ７からマーカ８ａおよび８ｂまでの距離がほぼ一定の状態でコントローラ７を使用することが前提とされる場合には、予め定められた所定長さのベクトルを上記基準として用いてもよい。
【００７９】
上記第１算出処理および第２算出処理は、検出座標が３つ以上の場合に正しい２つのマーカ座標を選択する目的で行われる処理である。ここで、第１算出処理では、前回のマーカ座標を用いて今回のマーカ座標を算出するのに対して、第２算出処理では、加速度センサ３７の出力を用いて今回のマーカ座標を算出する点で両者は異なる。なお、加速度センサ３７の検出精度等にもよるが、前回のマーカ座標の算出処理においてマーカ座標が正しく算出されている場合には、第１算出処理を用いることで正確にマーカ座標を算出することができる。一方、第２算出処理は、前回のマーカ座標を用いずに今回のマーカ座標を算出することができるので、前回のマーカ座標が算出されなかった場合、および、前回のマーカ座標が正確であるかどうか疑わしい場合には、第２算出処理を用いることが有効である。
【００８０】
次に、第３算出処理について説明する。第３算出処理は、検出座標のうちの１つをマーカ座標とし、マーカ座標とした検出座標からもう一方のマーカ座標を算出する処理である。なお、第３算出処理は、検出座標が１つ以上の場合に用いることが可能である。図１２は、第３算出処理を説明するための図である。図１２において、点ｐ７および点ｐ８は、今回検出された座標の位置を示す。図１２において、点Ｐ’３および点Ｐ’４は、前回のマーカ座標の位置を示し、具体的には、点Ｐ’３が第１マーカ座標に対応し、点Ｐ’４が第２マーカ座標に対応する。また、図１２においてｘｙ座標系の座標領域外に示されたベクトルＶ’は、想定ベクトルである。第３算出処理では、想定ベクトルは、前回のマーカ座標および加速度センサ３７の出力に基づいて算出される。
【００８１】
第３算出処理においては、まず、ゲーム装置３は、検出座標のうちで正しいマーカ８ａおよび８ｂのいずれかに対応する検出座標を選択する。具体的には、前回のマーカ座標それぞれと検出座標それぞれとのの間の距離を算出し、距離が最短の組み合わせに含まれる検出座標を選択する。図１２の例では、点Ｐ’３と点ｐ７との距離をｄ１とし、点Ｐ’４と点ｐ７との距離をｄ２とし、点Ｐ’３と点ｐ８との距離をｄ３とし、点Ｐ’４と点ｐ８との距離をｄ１とすると、点Ｐ’３と点ｐ７との距離ｄ１が最短となる。したがって、距離が最短となる組み合わせは、点Ｐ’３に対応する第１マーカ座標と点ｐ７に対応する検出座標との組み合わせとなるので、当該組み合わせに含まれる検出座標が選択される。また、ゲーム装置３は、当該組み合わせに含まれる前回のマーカ座標が第１マーカ座標であるか第２マーカ座標であるかに従って、選択した検出座標が第１マーカ座標であるか第２マーカ座標であるかを決定する。図１２の例では、点Ｐ’３に対応するマーカ座標は前回の第１マーカ座標であるので、点ｐ７に対応する検出座標が第１マーカ座標に決定される。
【００８２】
次に、ゲーム装置３は、第２算出処理と同様に想定ベクトルを算出する。ここで、第２算出処理においては想定ベクトルは例えば長さが１の単位ベクトルであったのに対して、第３算出処理では、さらに想定ベクトルの長さが決定される。具体的には、ゲーム装置３は、想定ベクトルの長さを、前回の２つのマーカ座標間の長さとする。
【００８３】
次に、ゲーム装置３は、決定していないもう一方のマーカ座標を、想定ベクトルを用いて算出する。具体的には、第１マーカ座標がすでに決定している場合、もう一方のマーカ座標である第２マーカ座標は、第１マーカ座標の位置を基点とし、想定ベクトルの方向へ想定ベクトルの長さだけ移動した位置を示す座標となる。また、第２マーカ座標がすでに決定している場合、もう一方のマーカ座標である第１マーカ座標は、第２マーカ座標の位置を基点とし、想定ベクトルの逆方向へ想定ベクトルの長さだけ移動した位置を示す座標となる。図１３は、第３算出処理におけるもう一方のマーカ座標を算出する処理を説明するための図である。図１３の例においては、点ｐ７の位置の座標が第１マーカ座標として決定されているものとする。このとき、もう一方のマーカ座標である第２マーカ座標は、点ｐ９の位置を示す座標として算出される。なお、点ｐ９は、補正された想定ベクトルの始点の位置を点ｐ７とした場合における当該想定ベクトルの終点の位置である。なお、図１３の例において点ｐ７が第２マーカ座標であるとされる場合には、第１マーカ座標の位置は、補正された想定ベクトルの終点の位置を点ｐ７とした場合における当該想定ベクトルの始点の位置となる。
【００８４】
上記第３算出処理では、検出座標の中から１つ目のマーカ座標を選択した後、２つ目のマーカ座標を想定ベクトルを用いて算出する。第２算出処理の説明おいて述べたように、想定ベクトルを用いることによってコントローラ７の実際の傾きを考慮して２つ目のマーカ座標を算出することができる。したがって、第３算出処理によれば、検出座標が１つの場合であっても２つのマーカ座標を結ぶ方向を正確に算出することができる。さらに、第３算出処理では、想定ベクトルの長さを、最後に算出されたマーカ座標間の長さとすることによって、２つのマーカ座標間の長さは前回のマーカ座標間の長さと同じになる。第１算出処理の説明において述べたように、２つのマーカ座標を算出する処理が１回行われる間にマーカ座標を結ぶベクトルの長さが変化する量は、わずかであると考えられる。したがって、第３算出処理によれば、検出座標が１つの場合であっても２つのマーカ座標を結ぶ長さを少ない誤差の範囲で決定することができる。つまり、第３算出処理によれば、検出座標が１つの場合であっても２つのマーカ座標を算出することができる。また、検出座標が２つ以上であっても、算出の結果の信頼性が低い場合には、第３算出処理によってより妥当なマーカ座標の算出を行うことができる。
【００８５】
次に、第４算出処理について説明する。第４算出処理は、検出座標が１つのみの場合に用いることが可能であり、検出座標を一方のマーカ座標とし、当該検出座標からもう一方のマーカ座標を算出する処理である。図１４は、第４算出処理を説明するための図である。図１４において、点ｐ１０は、今回検出された座標の位置を示す。図１４において、点Ｐ’５および点Ｐ’６は、最後のマーカ座標の位置を示し、具体的には、点Ｐ’５が第１マーカ座標に対応し、点Ｐ’６が第２マーカ座標に対応する。ここで、最後のマーカ座標とは、最後に算出されたマーカ座標である。例えば、前回のマーカ座標の算出処理においてマーカ座標の算出に失敗したときには、前々回のマーカ座標が最後のマーカ座標となる。また、図１４においてｘｙ座標系の座標領域外に示されたベクトルＶ’は、想定ベクトルである。第４算出処理では、想定ベクトルは、第３算出処理と同様、前回のマーカ座標および加速度センサ３７の出力に基づいて算出される。
【００８６】
第４算出処理においては、まず、ゲーム装置３は、検出座標を一方のマーカ座標とした場合における、もう一方のマーカ座標となり得る座標を算出する。ここでは、この座標を仮座標と呼ぶ。この仮座標は、上記想定ベクトルと検出座標とに基づいて算出することができる。ここで用いられる想定ベクトルは、その長さが最後のマーカ座標間の長さとされるベクトルである。具体的には、ゲーム装置３は、２つの仮座標を算出する。第１仮座標は、検出座標の位置を基点とし、想定ベクトルの方向へ想定ベクトルの長さだけ移動した位置を示す座標である。第２仮座標は、検出座標の位置を基点とし、想定ベクトルの逆方向へ想定ベクトルの長さだけ移動した位置を示す座標となる。図１４の例においては、点ｐ１０の位置を示す座標が検出座標であるとき、２つの仮座標は、点ｐ１１の位置を示す座標および点ｐ１２の位置を示す座標となる。なお、点ｐ１２は、想定ベクトルの始点の位置を点ｐ１０とした場合における当該想定ベクトルの終点の位置であり、点ｐ１１は、想定ベクトルの終点の位置を点ｐ１０とした場合における当該想定ベクトルの始点の位置である。なお、図１４に示すように、仮座標は撮像画像の領域Ａ１の外側になることもあるが、領域Ａ１の外側の位置は、（０，０）から（１０２４，７６８）の範囲外の座標値となるだけであり、領域Ａ１の外側の位置であってもｘｙ座標系によって表すことは可能である。
【００８７】
２つの仮座標が算出された後、ゲーム装置３は、２つの仮座標が妥当なマーカ座標であるか否かを判定する。具体的には、２つの仮座標のうちの一方のみが領域Ａ１の外側となるとき、領域Ａ１の外側の位置を示す仮座標がマーカ座標であると判定される。これは、検出座標が１つである理由として、片方のマーカが領域外であることが妥当な理由として考えられるからである。ここでは、領域内であればマーカが検出されているとみなし、領域内の仮座標はマーカ座標ではないものとみなす。なお、図１５Ａに示すように、２つの仮座標が共に領域Ａ１の内側の位置となるとき、２つの仮座標は共にマーカ座標ではないと判定される。これは、どちらのマーカが妥当なマーカであるかの判別ができないからであり、また、上記のように、領域内であればマーカが検出されていると考えられるからである。また、図１５Ｂに示すように、２つの仮座標が共に領域Ａ１の外側の位置となるときは、どちらのマーカが妥当なマーカであるかの判別ができないため、２つの仮座標は共にマーカ座標ではないと判定される。なお、２つの仮座標は共にマーカ座標ではないと判定される場合、マーカ座標の認識は失敗となる。
【００８８】
上記第４算出処理では、検出座標を１つ目のマーカ座標として仮定し、２つ目のマーカ座標を、想定ベクトルを用いて算出する。したがって、第４算出処理によれば、検出座標が１つの場合であっても２つのマーカ座標を結ぶ長さを少ない誤差の範囲で決定することができる。つまり、第４算出処理によれば、検出座標が１つの場合であっても２つのマーカ座標を算出することができる。
【００８９】
上記第３算出処理および第４算出処理は、検出座標が１つの場合に２つのマーカ座標を算出する目的で行われる処理である。ここで、第３算出処理では、前回のマーカ座標を用いて今回のマーカ座標を算出するのに対して、第４算出処理では、最後のマーカ座標を用いて今回のマーカ座標を算出する点で両者は異なる。したがって、前回のマーカ座標が算出されている場合には、より確実にマーカ座標を算出することができる第３算出処理を用い、前回のマーカ座標が算出されていない場合に、前回のマーカ座標を用いずに今回のマーカ座標を算出することができる第４算出処理を用いる。
【００９０】
以上のようにして、２つのマーカ座標が算出されると、ゲーム装置３は、２つのマーカ座標を用いてコントローラ７の操作状態（上記指示位置、コントローラ７の傾き、およびコントローラ７から各マーカ８ａおよび８ｂまでの距離）をゲーム操作として算出し、ゲーム操作に応じたゲーム処理を行う。すなわち、ゲーム装置３は、２つのマーカ座標を用いて、上記指示位置と、コントローラ７の指示方向を軸とした回転角度（姿勢）と、コントローラ７から各マーカ８ａおよび８ｂまでの距離を算出することができる。
【００９１】
図１６は、コントローラ７の位置および／または向きを変化させた場合における撮像画像の変化を示す図である。図１６は、コントローラの状態と、その状態にあるときに得られる撮像画像との対応を示している。図１６において、コントローラ７が状態Ａにあるとき、第１マーカ座標の位置は点ｐ’１の位置となり、第２マーカ座標の位置は点ｐ’２の位置となっている。このとき、２つのマーカ座標の位置は、ｘ軸方向にほぼ平行な配置となる。
【００９２】
図１６に示す状態Ｂは、状態Ａから指示方向を軸として（Ｚ軸周りに）右回りに９０°コントローラ７を回転させた状態である。なお、以下、本明細書では、コントローラ７に関する「右回り」および「左回り」とは、コントローラ７の後方（図３に示すＺ軸負方向側）から見たときの回転方向を言うものとする。この状態Ｂにおいては、各マーカ座標の位置は、状態Ａから左回りに９０°回転している。したがって、２つのマーカ座標を結ぶ方向（例えば、第１マーカ座標から第２マーカ座標への向き）を算出することによって、コントローラ７の指示方向を軸とした傾き（姿勢）を知ることができる。
【００９３】
図１６に示す状態Ｃは、状態Ａを基準としてコントローラ７を右方向（Ｘ軸正方向）に平行移動させた状態である。この状態Ｃにおいては、各マーカ座標の位置は、状態Ａを基準として左方向（ｘ軸負方向）に平行移動している。なお、状態Ｃは、コントローラ７の指示方向を状態Ａから右方向に向けた状態である。ここで、コントローラ７を右方向に平行移動させる場合だけでなく、コントローラ７をＹ軸周りに回転させることによっても、コントローラ７の指示方向を右方向に向けることができる。コントローラ７をＹ軸周りに回転させる場合にも状態Ｃとほぼ同様のマーカ座標が得られる。以上より、コントローラ７の指示方向を右方向に向けるようにコントローラ７を移動または回転させた場合、状態Ｃとほぼ同様のマーカ座標が得られる。したがって、２つのマーカ座標の位置を検出することによって、コントローラ７の指示位置を知ることができる。
【００９４】
図１６に示す状態Ｄは、状態Ａを基準としてコントローラ７を各マーカ８ａおよび８ｂから遠ざけた（すなわち、後方向に平行移動させた）状態である。この状態Ｄにおいては、第１マーカ座標から第２マーカ座標までの距離が、状態Ａの場合よりも短くなっている。したがって、第１マーカ座標から第２マーカ座標までの距離を検出することによって、コントローラ７の指示方向に関する移動状態（コントローラ７と各マーカ８ａおよび８ｂとの距離）を知ることができる。
【００９５】
以上のようにして、２つのマーカ座標を算出することによって、ゲーム装置３は、コントローラ７の移動状態や回転状態を知ることができ、コントローラ７の移動状態や回転状態をゲーム操作として用いることができる。なお、本実施形態では、マーカ座標をゲーム操作として用いるゲーム処理であればどのようなゲーム処理が行われてもよい。ゲーム処理としては例えば、ゲーム空間に登場するプレイヤキャラクタを、２つのマーカ座標の位置に応じて移動させるゲーム処理等が考えられる。
【００９６】
以上のように、本実施形態によれば、検出座標が１つであったり３つ以上である場合であっても２つのマーカ座標を正確に算出することができる。また、検出座標が３つ以上であってもマーカ座標を算出することができ、モニタの画面にマーカと同じような色の画像が表示されても問題ないので、従来のように画面の表示内容が制限されることがない。また、検出座標が１つであってもマーカ座標を算出することができるので、プレイヤは、コントローラ７をより広い範囲で動かすことができ、コントローラ７自体を動かす操作の自由度を向上することができる。
【００９７】
次に、ゲーム装置３において行われるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる主なデータについて図１７を用いて説明する。図１７は、ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図である。図１７に示すように、メインメモリ１３には、ゲームプログラム５１、操作データ５２、および算出処理用データ５３等が記憶される。なお、メインメモリ１３には、図１７に示すデータの他、ゲームに登場するキャラクタの画像データや、キャラクタの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
【００９８】
ゲームプログラム５１は、ゲーム装置３に電源が投入された後の適宜のタイミングで光ディスク４からその一部または全部が読み込まれてメインメモリ１３に記憶される。ゲームプログラム５１には、座標算出プログラム５１１が含まれる。座標算出プログラム５１１は、検出座標を用いてマーカ座標を算出する処理（第１〜第４算出処理）を行うためのプログラムである。ゲームプログラム５１には、座標算出プログラム５１１の他、ゲーム処理の実行に必要なプログラムが含まれている。
【００９９】
操作データ５２は、コントローラ７からゲーム装置３へ送信されてきて、メインメモリ１３に記憶される。操作データ５２には、検出座標データ５２１および加速度データ５２２が含まれる。検出座標データ５２１は、画像処理回路４１によって検出される座標を示すデータである。上述したように検出座標の数は決まっていないので、検出座標データ５２１は、複数個の検出座標を示すこともあるし、１個のみの検出座標を示すこともあるし、検出座標がないことを示すこともある。また、加速度データ５２２は、加速度センサ３７によって検知された加速度を示すデータである。ここでは、加速度データ５２２は、図３に示すＸＹＺの３軸の方向に関する加速度を示すデータである。換言すれば、加速度データ５２２は、コントローラ７の姿勢を算出するために用いられるデータである。検出座標データおよび加速度データは、コントローラ７からゲーム装置３へ送信されてくる操作データに含まれている。
【０１００】
算出処理用データ５３は、マーカ座標を算出する処理（第１〜第４算出処理）において用いられるデータである。算出処理用データ５３には、第１および第２選出座標データ５３１ａおよび５３１ｂ、第１および第２候補座標データ５３２ａおよび５３２ｂ、第１および第２仮座標データ５３３ａおよび５３３ｂ、第１および第２マーカ座標データ５３４ａおよび５３４ｂ、選出ベクトルデータ５３５、前回ベクトルデータ５３６、想定ベクトルデータ５３７、相違度データ５３８、一致度データ５３９、座標間距離データ５４０、および処理結果データ５４１が含まれる。
【０１０１】
第１および第２選出座標データ５３１は、第１〜第４算出処理において、検出座標の中から処理対象として選出されている座標（選出座標）を示す。算出処理においては検出座標の中から２つの座標が一度に選出されるので、一方を第１選出座標データ５３１ａとし、他方を第２選出座標データ５３１ｂとする。第１および第２候補座標データ５３２ａおよび５３２ｂは、検出座標のうちでマーカ座標の候補となっている座標を示す。以下では、この座標を候補座標と呼ぶ。ここでは、第１候補座標データ５３２ａは、第１マーカ座標の候補となっている座標を示し、この座標を第１候補座標と呼ぶ。また、第２候補座標データ５３２ｂは、第２マーカ座標の候補となっている座標を示し、この座標を第２候補座標と呼ぶ。仮座標データ５３３ａおよび５３３ｂは、第４算出処理で用いられる上記仮座標を示す。第４算出処理においては２つの仮座標が一度に算出されるので、一方を第１仮座標データ５３３ａとし、他方を第２仮座標データ５３３ｂとする。また、第１マーカ座標データ５３４ａは、上記第１マーカ座標を示し、第２マーカ座標データ５３４ｂは、上記第２マーカ座標を示す。本実施形態においては、第１〜第４算出処理の結果各マーカ座標データがメインメモリ１３に記憶され、当該各マーカ座標データがゲーム処理に用いられる。なお、他の実施形態においては、第１マーカ座標データ５３４ａおよび第２マーカ座標データ５３４ｂに代えて、第１マーカ座標と第２マーカ座標とを結ぶベクトルを示すデータを記憶してもよい。例えば、ベクトルの始点の座標（第１マーカ座標に相当）と、ベクトルの方向および長さとを示すデータをメインメモリ１３に記憶してもよい。
【０１０２】
選出ベクトルデータ５３５は、上記第１選出座標を始点とし第２選出座標を終点とする選出ベクトルを示す。前回ベクトルデータ５３６は上記前回ベクトルを示す。想定ベクトルデータ５３７は上記想定ベクトルを示す。相違度データ５３８は、第１算出処理で用いられ、各選出ベクトルと前回ベクトルとの相違度のうちの最小値を示す。一致度データ５３９は、第２算出処理で用いられ、各選出ベクトルと想定ベクトルとの一致度の最大値を示す。座標間距離データ５４０は、第３算出処理で用いられ、各選出座標と前回の各マーカ座標との距離のうちの最小値を示す。なお、相違度データ５３８および一致度データ５３９は、用いられる処理が異なるため異なるデータとなっているが、そのデータ内容が相違度であるか一致度であるかの違いについては便宜上のものであり、最も近いものを選び出す処理に用いられるのであれば、相違度の最小値と一致度の最大値のいずれを用いることに変えてもよい。処理結果データ５４１は、前回のマーカ座標の算出処理が、第１〜第４算出処理のうちのいずれの算出処理であったかを示す。
【０１０３】
次に、ゲーム装置３において行われるゲーム処理の詳細を、図１８〜図２６を用いて説明する。図１８は、ゲーム装置３において実行されるゲーム処理の流れを示すフローチャートである。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ１０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ１３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリ１３に読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１８に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図１８に示すフローチャートにおいては、ゲーム処理のうち、コントローラ７によって検出された座標からマーカ座標を算出する処理について詳細に示し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。
【０１０４】
まず、ステップＳ１において、ゲーム空間が構築されてモニタ２に表示される。ＣＰＵ１０は、例えば３次元のゲーム空間（２次元でもよい）を構築し、さらに、ゲーム空間に登場するオブジェクトを所定の初期位置に配置する。以上のように構築されたゲーム空間を表すゲーム画像が生成され、生成されたゲーム画像がモニタ２に表示される。以降、ステップＳ２〜Ｓ６の処理ループが１フレーム毎に繰り返されることによって、ゲームが進行していく。
【０１０５】
ステップＳ２において、ＣＰＵ１０は、コントローラ７から操作データを取得する。すなわち、コントローラ７は所定時間間隔（例えば、１フレーム時間間隔）で操作データをゲーム装置３へ送信してくるので、ＣＰＵ１０は、送信されてきた操作データをメインメモリ１３に記憶する。操作データに検出座標データが含まれている場合、ＣＰＵ１０は、当該検出座標データをメインメモリ１３に記憶する。また、操作データに加速度データが含まれている場合、ＣＰＵ１０は、当該加速度データをメインメモリ１３に記憶する。なお、操作データには、上記検出座標データおよび加速度データの他、操作部３２に対して行われた操作を示すデータが含まれていてもよい。
【０１０６】
続くステップＳ３において、ＣＰＵ１０が座標算出プログラム５１１を実行することによって座標算出処理が実行される。座標算出処理においては、ステップＳ２で取得された操作データに基づいてマーカ座標が算出される。以下、図１９〜図２６を用いて座標算出処理の詳細を説明する。
【０１０７】
図１９は、図１８に示すステップＳ３の座標算出処理の詳細を示すフローチャートである。座標算出処理においては、まず、ステップＳ１１において、前回の座標算出処理において２個の検出座標からマーカ座標を算出したか否かが判定される。すなわち、前回の座標算出処理において第１算出処理または第２算出処理によってマーカ座標が算出されたか否かが判定される。なお、ＣＰＵ１０は、前回の座標算出処理において第１〜第４算出処理のうちのいずれの算出処理によってマーカ座標が算出されたかを、メインメモリ１３に記憶されている処理結果データ５４１を参照することによって知ることができる。なお、前回の座標算出処理においてマーカ座標が算出不可能であった場合、ステップＳ１１の判定結果は否定となる。ステップＳ１１の判定結果が肯定である場合、ステップＳ１２の処理が実行される。一方、ステップＳ１１の判定結果が否定である場合、ステップＳ１６の処理が実行される。
【０１０８】
ステップＳ１２においては、第１算出処理が実行される。図２０は、図１９に示すステップＳ１２の第１算出処理の詳細を示すフローチャートである。第１算出処理においては、まずステップＳ３１において、コントローラ７によって２個以上の座標が検出されたか否かが判定される。ステップＳ３１の判定は、検出座標が２つ以上であるか否か、すなわち、メインメモリ１３に記憶されている操作データに含まれる検出座標データ５２１が２つ以上の検出座標を示すか否かによって行われる。ステップＳ３１の判定結果が肯定である場合、ステップＳ３２の処理が実行される。一方、ステップＳ３１の判定結果が否定である場合、ステップＳ４２の処理が実行される。この場合、第１算出処理によってはマーカ座標が算出されない。第１算出処理は、２つ以上の検出座標を用いてマーカ座標を算出する処理だからである。
【０１０９】
ステップＳ３２においては、後述する選出ベクトルと前回ベクトルとの相違度の最小値Ｍ１が初期化される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている相違度データ５３８の内容を、予め定められた所定値を示すデータに更新する。なお、この所定値は、十分に大きい値であり、具体的には、後述するステップＳ４０で用いられるしきい値よりも大きな値である。ステップＳ３２の次にステップＳ３３の処理が実行される。
【０１１０】
ステップＳ３３において、ＣＰＵ１０は、検出座標から２つの座標を選出する。具体的には、２つ以上の検出座標のうちの１つを第１選出座標に選出し、第１選出座標に選出された座標以外の検出座標のうちの１つを第１選出座標に選出する。このとき、ＣＰＵ１０は、第１選出座標に選出された座標を示すデータを第１選出座標データ５３１ａとしてメインメモリ１３に記憶し、第２選出座標に選出された座標を示すデータを第２選出座標データ５３１ｂとしてメインメモリ１３に記憶する。
【０１１１】
なお、他の実施形態においては、コントローラ７の画像処理回路４１は、検出座標に加え、検出座標に対応する領域の大きさを検出するものであってもよく、操作データには当該大きさを示すデータが含まれるようにしてもよい。このとき、ステップＳ３３においては、検出座標に対応する領域の大きさを用いて、当該大きさが同程度となる検出座標の組み合わせのみを選出するようにしてもよい。これによって、不要な組み合わせを選出する処理を省略することができる。
【０１１２】
続くステップＳ３４において、第１選出座標を始点とし第２選出座標を終点とする選出ベクトルが算出される。ＣＰＵ１０は、メインメモリ１３に記憶されている第１選出座標データ５３１ａおよび第２選出座標データ５３１ｂに基づいて、選出ベクトルを算出する。算出された選出ベクトルを示すデータは、選出ベクトルデータ５３５としてメインメモリ１３に記憶される。
【０１１３】
続くステップＳ３５において、前回ベクトルが算出される。前回ベクトルとは、上述したように、前回の第１マーカ座標を始点とし、前回の第２マーカ座標を終点とするベクトルである。ここで、前回の第１および第２マーカ座標は、メインメモリ１３に記憶されている各マーカ座標データ５３４ａおよび５３４ｂを参照することによって知ることができる。ＣＰＵ１０は、これらのマーカ座標データ５３４ａおよび５３４ｂに基づいて前回ベクトルを算出する。算出された前回ベクトルを示すデータは、前回ベクトルデータ５３６としてメインメモリ１３に記憶される。
【０１１４】
続くステップＳ３６において、選出ベクトルと前回ベクトルとの相違度ｅが算出される。具体的には、ＣＰＵ１０は、まず、選出ベクトルの方向と前回ベクトルの方向との第１相違度ｖを算出する。本実施形態では、第１相違度ｖは、選出ベクトルと前回ベクトルとをそれぞれ正規化して長さが１の単位ベクトルとし、正規化した選出ベクトルと前回ベクトルとの内積値を算出することによって得られる。当該内積値は、それぞれのベクトルの向きが相違しているほど小さな値をとるため、向きが相違するほど（すなわち、内積値が小さな値ほど）大きな値をとるように第１相違度ｖを設定する。次に、ＣＰＵ１０は、選出ベクトルの長さと前回ベクトルの長さとの第２相違度ｗを算出する。本実施形態では、第２相違度ｗは、選出ベクトルと前回ベクトルとの差分のベクトルを算出し、差分のベクトルの長さを算出することによって得られる。当該差分が大きいほど、第２相違度ｗは大きくなる。第２相違度は、ベクトルの長さの相違する度合いを表すものであるから、差分以外にも、例えばベクトルの長さの比から算出するようにしてもよい。次に、ＣＰＵ１０は、上記第１相違度ｖと上記第２相違度ｗとを加算して相違度ｅを得る。なお、相違度ｅは、選出ベクトルと前回ベクトルとが相違するほど大きい値をとるものであれば、上記の方法以外であっても、どのような方法で算出されてもよい。
【０１１５】
続くステップＳ３７において、現在の相違度の最小値Ｍ１が、ステップＳ３６で算出された相違度ｅよりも大きいか否かが判定される。なお、ＣＰＵ１０は、メインメモリ１３に記憶されている相違度データ５３８を参照することによって現在の相違度の最小値Ｍ１を知ることができる。ステップＳ３７の判定結果が肯定である場合、ステップＳ３８の処理が実行される。一方、ステップＳ３７の判定結果が否定である場合、ステップＳ３８の処理がスキップされてステップＳ３９の処理が実行される。
【０１１６】
ステップＳ３８においては、現在の選出座標が候補座標に設定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている第１候補座標データ５３２ａの内容を、メインメモリ１３に記憶されている第１選出座標データ５３１ａの内容に更新し、メインメモリ１３に記憶されている第２候補座標データ５３２ｂの内容を、メインメモリ１３に記憶されている第２選出座標データ５３１ｂの内容に更新する。また、メインメモリ１３に記憶されている相違度データ５３８の内容が、ステップＳ３６で算出された相違度ｅを示す内容に更新される。ステップＳ３８の処理によって、ステップＳ３３〜Ｓ３９の処理ループにおいてそれまでに選出された選出ベクトルの中で前回ベクトルに最も類似する選出ベクトルを構成する第１選出座標および第２選出座標が、第１候補座標および第２候補座標として設定されることとなる。ステップＳ３８の次にステップＳ３９の処理が実行される。
【０１１７】
ステップＳ３９においては、２つ以上の検出座標から第１選出座標および第２選出座標を選出する組み合わせについて、ステップＳ３３で全ての組み合わせが選出されたか否かが判定される。なお、ここでは、ある座標Ａを第１選出座標とし、ある座標Ｂを第２選出座標とする組み合わせと、座標Ｂを第１選出座標とし、座標Ａを第２選出座標とする組み合わせとは異なる組み合わせとして考える。ステップＳ３９の判定結果が肯定である場合、ステップＳ４０の処理が実行される。一方、ステップＳ３９の判定結果が否定である場合、他の組み合わせについてステップＳ３３以降の処理が再度実行され、以降、全ての組み合わせが選出されるまでステップＳ３３〜Ｓ３９の処理が繰り返される。
【０１１８】
ステップＳ４０においては、現在の相違度の最小値Ｍ１が、予め定められたしきい値よりも小さいか否かが判定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている相違度データ５３８により示される最小値Ｍ１が、しきい値よりも小さいか否かを判定する。ステップＳ４０の判定結果が肯定である場合、ステップＳ４１の処理が実行される。一方、ステップＳ４０の判定結果が否定である場合、ステップＳ４２の処理が実行される。
【０１１９】
ステップＳ４１においては、現在設定されている各候補座標が各マーカ座標に決定される。すなわち、現在第１候補座標として設定されている座標が第１マーカ座標に決定され、現在第２候補座標として設定されている座標が第２マーカ座標に決定される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている第１マーカ座標データ５３４ａの内容を、メインメモリ１３に記憶されている第１候補座標データ５３２ａの内容に更新し、メインメモリ１３に記憶されている第２マーカ座標データ５３４ｂの内容を、メインメモリ１３に記憶されている第２候補座標データ５３２ｂの内容に更新する。これによって、第１算出処理において各マーカ座標が算出されたこととなる。なお、ステップＳ４１において、ＣＰＵ１０は、メインメモリ１３に記憶されている処理結果データ５４１の内容を、第１算出処理を示す内容に更新する。ステップＳ４１の終了後、ＣＰＵ１０は第１算出処理を終了する。
【０１２０】
一方、ステップＳ４２においては、第１算出処理によるマーカ座標の算出が不可能であると判断される。本実施形態では、現在の相違度の最小値Ｍ１が上記しきい値以上である場合、マーカ座標の算出は不可能と判断される。このように判断する理由は、現在の相違度の最小値Ｍ１が上記しきい値以上である場合には、いずれの選出ベクトルも前回ベクトルと類似していないと考えられ、このような場合にまでマーカ座標を決定すると正確なマーカ座標を得ることができない可能性があるからである。例えば、撮像画像にノイズが含まれる状況で、さらにマーカの少なくとも一方が領域から外れている場合等には、検出座標からの算出処理が行われたとしても、算出結果は妥当なものにはならない。つまり、本実施形態では、ステップＳ４０の判定を行うことによって、不正確なマーカ座標が算出されることを防止している。ステップＳ４２の終了後、ＣＰＵ１０は第１算出処理を終了する。
【０１２１】
図１９の説明に戻り、ステップＳ１２の次のステップＳ１３において、第１算出処理においてマーカ座標が算出されたか否かが判定される。すなわち、第１算出処理のステップＳ４１が実行された場合、ステップＳ１３の判定結果は肯定となる。一方、ステップＳ４２が実行された場合、ステップＳ１３の判定結果は否定となる。ステップＳ１３の判定結果が肯定である場合、ＣＰＵ１０は図１９に示す座標算出処理を終了する。一方、ステップＳ１３の判定結果が否定である場合、ステップＳ１４の処理が実行される。
【０１２２】
ステップＳ１４においては、第３算出処理が実行される。図２１および図２２は、図１９に示すステップＳ１４の第３算出処理の詳細を示すフローチャートである。第３算出処理においては、まずステップＳ５１において、コントローラ７によって１個以上の座標が検出されたか否かが判定される。ステップＳ５１の判定は、検出座標が１つ以上であるか否か、すなわち、メインメモリ１３に記憶されている操作データに含まれる検出座標データ５２１が１つ以上の検出座標を示すか否かによって行われる。ステップＳ５１の判定結果が肯定である場合、ステップＳ５２の処理が実行される。一方、ステップＳ５１の判定結果が否定である場合、ステップＳ６８の処理が実行される。この場合、第３算出処理によってはマーカ座標が算出されない。第３算出処理は、１つ以上の検出座標を用いてマーカ座標を算出する処理だからである。
【０１２３】
ステップＳ５２においては、選出座標と前回のマーカ座標との間の距離の最小値Ｍ３が初期化される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている座標間距離データ５４０の内容を、予め定められた所定値を示すデータに更新する。なお、この所定値は、十分に大きい値であり、具体的には、後述するステップＳ６１で用いられるしきい値よりも大きな値である。また、第３算出処理で用いられる上記所定値およびしきい値は、第１算出処理で用いられる所定値およびしきい値とは関連しないものである。ステップＳ５２の次にステップＳ５３の処理が実行される。
【０１２４】
ステップＳ５３において、ＣＰＵ１０は、検出座標から１つの座標を選出する。このとき、ＣＰＵ１０は、選出座標を示すデータを第１選出座標データ５３１ａとしてメインメモリ１３に記憶する。なお、第３算出処理においては選出座標は１つのみであるので、第１選出座標と第２選出座標との区別はない。
【０１２５】
続くステップＳ５４において、選出座標と前回の第１マーカ座標との距離Ｄ１が算出される。なお、前回の第１マーカ座標は、メインメモリ１３に記憶されている第１マーカ座標データ５３４ａを参照することによって知ることができる。ＣＰＵ１０は、メインメモリ１３に記憶されている第１選出座標データ５３１ａおよび第１マーカ座標データ５３４ａに基づいて、上記距離Ｄ１を算出する。
【０１２６】
続くステップＳ５５において、現在の座標間距離の最小値Ｍ３が、ステップＳ５４で算出された距離Ｄ１よりも大きいか否かが判定される。なお、ＣＰＵ１０は、メインメモリ１３に記憶されている座標間距離データ５４０を参照することによって現在の座標間距離の最小値Ｍ３を知ることができる。ステップＳ５５の判定結果が肯定である場合、ステップＳ５６の処理が実行される。一方、ステップＳ５５の判定結果が否定である場合、ステップＳ５６の処理がスキップされてステップＳ５７の処理が実行される。
【０１２７】
ステップＳ５６においては、現在の選出座標が第１候補座標に設定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている第１候補座標データ５３２ａの内容を、メインメモリ１３に記憶されている第１選出座標データ５３１ａの内容に更新する。このとき、メインメモリ１３に記憶されている第２候補座標データ５３２ｂは削除される。また、メインメモリ１３に記憶されている座標間距離データ５４０の内容が、ステップＳ５４で算出された距離Ｄ１を示す内容に更新される。ステップＳ５６の処理によって、ステップＳ５３〜Ｓ６０の処理ループにおいてそれまでに選出された選出座標の中で前回のマーカ座標に最も近い選出座標が第１候補座標として設定されることとなる。ステップＳ５６の次にステップＳ５７の処理が実行される。
【０１２８】
ステップＳ５７においては、選出座標と前回の第２マーカ座標との距離Ｄ２が算出される。なお、前回の第２マーカ座標は、メインメモリ１３に記憶されている第２マーカ座標データ５３４ｂを参照することによって知ることができる。ＣＰＵ１０は、メインメモリ１３に記憶されている第１選出座標データ５３１ａおよび第２マーカ座標データ５３４ｂに基づいて、上記距離Ｄ２を算出する。
【０１２９】
続くステップＳ５８において、現在の座標間距離の最小値Ｍ３が、ステップＳ５７で算出された距離Ｄ２よりも大きいか否かが判定される。なお、ＣＰＵ１０は、メインメモリ１３に記憶されている座標間距離データ５４０を参照することによって現在の座標間距離の最小値Ｍ３を知ることができる。ステップＳ５８の判定結果が肯定である場合、ステップＳ５９の処理が実行される。一方、ステップＳ５８の判定結果が否定である場合、ステップＳ５９の処理がスキップされてステップＳ６０の処理が実行される。
【０１３０】
ステップＳ５９においては、現在の選出座標が第２候補座標に設定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている第２候補座標データ５３２ｂの内容を、メインメモリ１３に記憶されている第１選出座標データ５３１ａの内容に更新する。このとき、メインメモリ１３に記憶されている第１候補座標データ５３２ａは削除される。また、メインメモリ１３に記憶されている座標間距離データ５４０の内容が、ステップＳ５７で算出された距離Ｄ２を示す内容に更新される。ステップＳ５９の処理によって、ステップＳ５３〜Ｓ６０の処理ループにおいてそれまでに選出された選出座標の中で前回のマーカ座標に最も近い選出座標が第２候補座標として設定されることとなる。ステップＳ５９の次にステップＳ６０の処理が実行される。
【０１３１】
ステップＳ６０においては、１つ以上の検出座標の全ての座標が選出されたか否かが判定される。ステップＳ６０の判定結果が肯定である場合、ステップＳ６１の処理が実行される。一方、ステップＳ６０の判定結果が否定である場合、他の検出座標についてステップＳ５３以降の処理が再度実行され、以降、全ての検出座標が選出されるまでステップＳ５３〜Ｓ６０の処理が繰り返される。
【０１３２】
図２２に示すステップＳ６１においては、現在の座標間距離の最小値Ｍ３が、予め定められたしきい値よりも小さいか否かが判定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている座標間距離データ５４０により示される最小値Ｍ３が、しきい値よりも小さいか否かを判定する。ステップＳ６１の判定結果が肯定である場合、ステップＳ６２の処理が実行される。一方、ステップＳ６１の判定結果が否定である場合、ステップＳ６８の処理が実行される。
【０１３３】
ステップＳ６２においては、一方のマーカ座標が特定される。すなわち、現在第１候補座標が設定されている場合には、第１候補座標として設定されている座標が第１マーカ座標として決定され、現在第２候補座標が設定されている場合には、第２候補座標として設定されている座標がマーカ座標として決定される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている第１マーカ座標データ５３４ａの内容を、メインメモリ１３に記憶されている第１候補座標データ５３２ａの内容に更新するか、または、メインメモリ１３に記憶されている第２マーカ座標データ５３４ｂの内容を、メインメモリ１３に記憶されている第２候補座標データ５３２ｂの内容に更新する。
【０１３４】
続くステップＳ６３において、加速度データに基づいて想定ベクトルが算出される。以下、図２３および図２４を用いて、想定ベクトルの算出方法について説明する。
【０１３５】
図２３は、ある状態におけるコントローラ７とマーカ８ａおよび８ｂとの位置関係を示す図であり、図２４は、当該状態において想定されるマーカ座標の位置を示す図である。図２３においては、コントローラ７は、コントローラ７の指示方向を軸とした回転方向に関して傾いた状態である。このとき、加速度センサ３７は、重力加速度の向きを示すベクトルＶａを検知して出力する。ここでは、ベクトルＶａは、コントローラ７の後面から見て右方向を正方向とするＸ’軸と、コントローラ７の上方向を正方向とするＹ’軸とからなる座標系によって表される。加速度センサ３７は、コントローラ７が水平な状態にあるときにＹ’軸負方向を向くベクトルを出力するものとする。なお、加速度センサ３７は、Ｘ’軸およびＹ’軸に垂直なＺ’軸成分の加速度についても検知するものであってもよいが、本実施形態ではＺ’軸成分の加速度は不要であるので省略する。ベクトルＶａは、Ｘ’Ｙ’座標系において（ｖａ１，ｖａ２）と表すことができる。一方、図２３に示す状態では、第１マーカ座標を始点とし第２マーカ座標を終点とするベクトルと同一方向のベクトルであるベクトルＶｃの方向は、図２４に示すような方向になると考えられる。
【０１３６】
ここで、本実施形態では、２つのマーカ８ａおよび８ｂは水平に配置されることを前提とする。また、上述のように、加速度センサ３７は、コントローラ７が水平な状態にあるときにＹ’軸負方向を向くベクトルを出力するものとする。したがって、加速度センサ３７から出力されるベクトルＶａがＹ’軸負方向を向くとき、マーカ座標を結ぶベクトルＶｃはｘ軸正方向を向くことになる。つまり、Ｙ’軸負方向を向くベクトルＶａとｘ軸正方向を向くベクトルＶｃとが対応する。この対応関係に基づいて、加速度センサ３７から出力されるベクトルＶａから、マーカ座標を結ぶベクトルＶｃの方向を算出することができる。具体的には、ベクトルＶｃ＝（ｖｃ１，ｖｃ２）は、上記加速度を示すベクトルＶａから以下の式を用いて算出することができる。
ｖｃ１＝−ｖａ２
ｖｃ２＝−ｖａ１
上式によって得られたベクトルＶｃを正規化して単位ベクトルとすることによって、想定ベクトルの方向を得ることができる。
【０１３７】
なお、本実施形態では、上記対応関係があるために上式によってベクトルＶｃを算出したが、対応関係が変わればベクトルＶｃを算出する式を変更する必要がある。なお、他の実施形態では、対応関係をプレイヤが変更するようにしてもよい。具体的には、任意の傾きにしてコントローラ７を把持した状態でプレイヤが所定の操作（操作ボタンを押下する操作等）を行う。ゲーム装置３は、当該操作が行われた時点で撮像された撮像画像からマーカ座標を算出し、マーカ座標を結ぶベクトルに沿った方向のベクトルＶｃ’を算出する。さらに、ゲーム装置３は、当該操作が行われた時点において加速度センサ３７から出力されるベクトルＶａ’の方向と、ベクトルＶｃ’の方向とを対応付けて記憶する。対応関係を記憶した後は、ゲーム装置３は、加速度センサ３７から出力されたベクトルＶａの方向と、対応関係に含まれるベクトルＶａ’との差分を算出し、当該差分だけＶｃ’を回転させることによってベクトルＶａに対応するベクトルＶｃを算出することができる。
【０１３８】
なお、図２３および図２４に示した想定ベクトルの算出方法は一例であり、想定ベクトルの算出方法は、コントローラ７が任意の姿勢となったときにおける２つのマーカ座標を結ぶ方向を示す想定ベクトルを、コントローラ７（撮像素子４０）の姿勢から算出する方法であればどのような方法であってもよい。
【０１３９】
図２２の説明に戻り、ステップ６３においては、以上に示したような方法で想定ベクトルが算出される。ＣＰＵ１０は、算出された想定ベクトルを示すデータを、想定ベクトルデータ５３７としてメインメモリ１３に記憶する。
【０１４０】
続くステップＳ６４において、想定ベクトルの長さが決定される。具体的には、ＣＰＵ１０は、最後に算出されたマーカ座標間の長さとなるように想定ベクトルの長さを決定する。想定ベクトルの長さは、メインメモリ１３に記憶されているマーカ座標データ５３４ａおよび５３４ｂに基づいて算出することができる。ＣＰＵ１０は、想定ベクトルの長さを決定すると、当該想定ベクトルを示すデータを想定ベクトルデータ５３７としてメインメモリ１３に記憶する。
【０１４１】
なお、他の実施形態においては、コントローラ７の画像処理回路４１は、検出座標に加え、検出座標に対応する領域の大きさを検出するものであってもよく、操作データには当該大きさを示すデータが含まれるようにしてもよい。このとき、ステップＳ６４においては、検出座標（具体的には、ステップＳ６２でマーカ座標として特定された検出座標）に対応する領域の大きさに基づいて、マーカ座標間の長さを推定し、想定ベクトルの長さを推定した長さに補正するようにしてもよい。つまり、検出座標に対応する領域が大きければ、マーカ座標間の距離も大きいと想定されるものであるから、当該領域の大きさに応じてマーカ座標間の距離を推定することが可能である。
【０１４２】
また、上記ステップＳ６４においては、ＣＰＵ１０は、予め定められた所定長さとなるように想定ベクトルを補正してもよい。例えば、コントローラ７からマーカ８ａおよび８ｂまでの距離がほぼ一定で使用される状況下では、予め定められた所定長さとなるように想定ベクトルを補正ことによって、簡易かつ正確に想定ベクトルを補正することができる。
【０１４３】
続くステップＳ６５において、ステップＳ６２ですでに特定されているマーカ座標は第１マーカ座標であるか否かが判定される。ステップＳ６５の判定結果が肯定である場合、ステップＳ６６の処理が実行される。一方、ステップＳ６５の判定結果が否定である場合、すなわち、ステップＳ６２ですでに特定されているマーカ座標は第２マーカ座標である場合、ステップＳ６７の処理が実行される。
【０１４４】
ステップＳ６６においては、想定ベクトルを用いて第２マーカ座標が算出される。第２マーカ座標は、第１マーカ座標の位置を基点とし、想定ベクトルの方向へ想定ベクトルの長さだけ移動した位置を示す座標として算出される。具体的には、想定ベクトルを（ｖｘ，ｖｙ）とし、第１マーカ座標を（ｍ１ｘ，ｍ１ｙ）とすると、第２マーカ座標（ｍ２ｘ，ｍ２ｙ）は次の式を用いて算出される。
ｍ２ｘ＝ｍ１ｘ＋ｖｘ
ｍ２ｙ＝ｍ１ｙ＋ｖｙ
上式によって算出された第２マーカ座標を示すデータは、第２マーカ座標データ５３４ｂとしてメインメモリ１３に記憶される。なお、ステップＳ６６において、ＣＰＵ１０は、メインメモリ１３に記憶されている処理結果データ５４１の内容を、第３算出処理を示す内容に更新する。ステップＳ６６の終了後、ＣＰＵ１０は第３算出処理を終了する。
【０１４５】
ステップＳ６７においては、想定ベクトルを用いて第１マーカ座標が算出される。第１マーカ座標は、第２マーカ座標の位置を基点とし、想定ベクトルの逆方向へ想定ベクトルの長さだけ移動した位置を示す座標として算出される。具体的には、想定ベクトルを（ｖｘ，ｖｙ）とし、第２マーカ座標を（ｍ２ｘ，ｍ２ｙ）とすると、第１マーカ座標（ｍ１ｘ，ｍ１ｙ）は次の式を用いて算出される。
ｍ１ｘ＝ｍ２ｘ−ｖｘ
ｍ１ｙ＝ｍ２ｙ−ｖｙ
上式によって算出された第１マーカ座標を示すデータは、第１マーカ座標データ５３４ａとしてメインメモリ１３に記憶される。なお、ステップＳ６７において、ＣＰＵ１０は、メインメモリ１３に記憶されている処理結果データ５４１の内容を、第３算出処理を示す内容に更新する。ステップＳ６７の終了後、ＣＰＵ１０は第３算出処理を終了する。
【０１４６】
なお、他の実施形態においては、ステップＳ６６またはＳ６７の後に、ステップＳ６６またはＳ６７で算出されたマーカ座標が、撮像画像の外側の領域にあるか否かを判定するようにしてもよい。そして、マーカ座標が撮像画像の外側の領域にあるときのみ、当該マーカ座標を正しいマーカ座標と判断し、マーカ座標が撮像画像の内側の領域にあるとき、当該マーカ座標は正しくないと判断し、ステップＳ６８の処理を行うようにしてもよい。「コントローラ７が撮像可能範囲にある場合にはマーカ８ａおよび８ｂが必ず撮像される」という前提では、上記のようにすることによって、誤ったマーカ座標が算出されることを防止することができる。
【０１４７】
一方、ステップＳ６８においては、第３算出処理によるマーカ座標の算出が不可能であると判断される。本実施形態では、現在の座標間距離の最小値Ｍ３が上記しきい値以上である場合、マーカ座標の算出は不可能と判断される。このように判断する理由は、現在の座標間距離の最小値Ｍ３が上記しきい値以上である場合には、いずれの検出座標も前回のマーカ座標から離れていることを意味するので、このような場合にまでマーカ座標を決定すると正確なマーカ座標を得ることができない可能性があるからである。つまり、本実施形態では、ステップＳ６１の判定を行うことによって、不正確なマーカ座標が算出されることを防止している。ステップＳ６８の終了後、ＣＰＵ１０は第３算出処理を終了する。
【０１４８】
図１９の説明に戻り、ステップＳ１４の次のステップＳ１５において、第３算出処理においてマーカ座標が算出されたか否かが判定される。すなわち、第３算出処理のステップＳ６２，Ｓ６６，およびＳ６７においてマーカ座標が算出された場合、ステップＳ１５の判定結果は肯定となる。一方、ステップＳ６８においてマーカ座標の算出が不可能であると判断された場合、ステップＳ１５の判定結果は否定となる。ステップＳ１５の判定結果が肯定である場合、ＣＰＵ１０は図１９に示す座標算出処理を終了する。一方、ステップＳ１５の判定結果が否定である場合、後述するステップＳ２５の処理が実行される。
【０１４９】
次に、ステップＳ１１の判定結果が否定である場合の処理を説明する。この場合、ステップＳ１６において、前回の座標算出処理において１個の検出座標からマーカ座標を算出したか否かが判定される。すなわち、前回の座標算出処理において第３算出処理または第４算出処理によってマーカ座標が算出されたか否かが判定される。なお、ＣＰＵ１０は、前回の座標算出処理において第１〜第４算出処理のうちのいずれの算出処理によってマーカ座標が算出されたかを、メインメモリ１３に記憶されている処理結果データ５４１を参照することによって知ることができる。なお、前回の座標算出処理においてマーカ座標が算出不可能であった場合、ステップＳ１６の判定結果は否定となる。ステップＳ１６の判定結果が肯定である場合、ステップＳ１７の処理が実行される。一方、ステップＳ１６の判定結果が否定である場合、ステップＳ２１の処理が実行される。
【０１５０】
ステップＳ１７においては、第２算出処理が実行される。図２５は、図１９に示すステップＳ１７の第２算出処理の詳細を示すフローチャートである。第２算出処理においては、まずステップＳ７１において、コントローラ７によって２個以上の座標が検出されたか否かが判定される。ステップＳ７１の処理は、第１算出処理におけるステップＳ３１の処理と同様の処理である。ステップＳ７１の判定結果が肯定である場合、ステップＳ７２の処理が実行される。一方、ステップＳ７１の判定結果が否定である場合、ステップＳ８２の処理が実行される。この場合、第２算出処理によってはマーカ座標が算出されない。第２算出処理は、２つ以上の検出座標を用いてマーカ座標を算出する処理だからである。
【０１５１】
ステップＳ７２においては、選出ベクトルと想定ベクトルとの一致度の最大値Ｍ２が初期化される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている一致度データ５３９の内容を、予め定められた所定値を示すデータに更新する。なお、この所定値は、十分に小さい値であり、具体的には、後述するステップＳ８０で用いられるしきい値よりも小さな値である。また、第２算出処理で用いられる上記所定値およびしきい値は、第１および第３算出処理で用いられる所定値およびしきい値とは関連しないものである。ステップＳ７２の次にステップＳ７３の処理が実行される。
【０１５２】
ステップＳ７３において、ＣＰＵ１０は、検出座標から２つの座標を選出する。ステップＳ７３の処理は、第１算出処理におけるステップＳ３３と同様の処理である。続くステップＳ７４において、第１算出処理におけるステップＳ３４と同様の方法で、第１選出座標を始点とし第２選出座標を終点とする選出ベクトルが算出される。さらに、続くステップＳ７５において、第３算出処理におけるステップＳ６３と同様の方法で想定ベクトルが算出される。
【０１５３】
続くステップＳ７６において、選出ベクトルの方向と想定ベクトルの方向との一致度ｋが算出される。本実施形態では、一致度ｋは、選出ベクトルと想定ベクトルとをそれぞれ正規化して長さが１の単位ベクトルとし、正規化した選出ベクトルと想定ベクトルとの内積値を算出することによって得られる。当該内積値は、それぞれのベクトルの向きが一致しているほど大きくなるため、一致度ｋは、内積値が大きいほど大きく設定される。なお、一致度ｋは、選出ベクトルの方向と想定ベクトルの方向との類似度を示すものであればよく、他の実施形態では、例えば、選出ベクトルと想定ベクトルとのなす角度であってもよい。なお、当該角度を類似度として用いる場合、角度が小さいほど類似していると判断される。また、第１算出処理においては、上記ステップＳ３６において用いられる第１相違度ｖに代えて上記角度を用いるようにしてもよい。
【０１５４】
続くステップＳ７７において、現在の一致度の最大値Ｍ２が、ステップＳ７６で算出された一致度ｋよりも小さいか否かが判定される。なお、ＣＰＵ１０は、メインメモリ１３に記憶されている一致度データ５３９を参照することによって現在の一致度の最小値Ｍ２を知ることができる。ステップＳ７７の判定結果が肯定である場合、ステップＳ７８の処理が実行される。一方、ステップＳ７７の判定結果が否定である場合、ステップＳ７８の処理がスキップされてステップＳ７９の処理が実行される。
【０１５５】
ステップＳ７８においては、現在の選出座標が候補座標に設定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている第１候補座標データ５３２ａの内容を、メインメモリ１３に記憶されている第１選出座標データ５３１ａの内容に更新し、メインメモリ１３に記憶されている第２候補座標データ５３２ｂの内容を、メインメモリ１３に記憶されている第２選出座標データ５３１ｂの内容に更新する。また、メインメモリ１３に記憶されている一致度データ５３９の内容が、ステップＳ７６で算出された一致度ｋを示す内容に更新される。ステップＳ７８の処理によって、ステップＳ７３〜Ｓ７９の処理ループにおいてそれまでに選出された選出ベクトルの中で想定ベクトルに方向が最も類似する選出ベクトルを構成する第１選出座標および第２選出座標が、第１候補座標および第２候補座標として設定されることとなる。ステップＳ７８の次にステップＳ７９の処理が実行される。
【０１５６】
ステップＳ７９においては、２つ以上の検出座標から第１選出座標および第２選出座標を選出する組み合わせについて、ステップＳ７３で全ての組み合わせが選出されたか否かが判定される。ステップＳ７９の処理は、第１算出処理におけるステップＳ３９の処理と同様の処理である。ステップＳ７９の判定結果が肯定である場合、ステップＳ８０の処理が実行される。一方、ステップＳ７９の判定結果が否定である場合、他の組み合わせについてステップＳ７３以降の処理が再度実行され、以降、全ての組み合わせが選出されるまでステップＳ７３〜Ｓ７９の処理が繰り返される。
【０１５７】
ステップＳ８０においては、現在の一致度の最大値Ｍ２が、予め定められたしきい値よりも大きいか否かが判定される。すなわち、ＣＰＵ１０は、メインメモリ１３に記憶されている一致度データ５３９により示される最大値Ｍ２が、しきい値よりも大きいか否かを判定する。ステップＳ８０の判定結果が肯定である場合、ステップＳ８１の処理が実行される。一方、ステップＳ８０の判定結果が否定である場合、ステップＳ８２の処理が実行される。
【０１５８】
ステップＳ８１においては、現在設定されている各候補座標が各マーカ座標に決定される。ステップＳ８１の処理は、第１算出処理におけるステップＳ４１の処理と同様の処理である。ステップＳ８１によって、第２算出処理において各マーカ座標が算出されたこととなる。なお、ステップＳ８１において、ＣＰＵ１０は、メインメモリ１３に記憶されている処理結果データ５４１の内容を、第２算出処理を示す内容に更新する。ステップＳ８０の終了後、ＣＰＵ１０は第２算出処理を終了する。
【０１５９】
一方、ステップＳ８２においては、第２算出処理によるマーカ座標の算出が不可能であると判断される。本実施形態では、一致度の最大値Ｍ２が上記しきい値以下である場合、マーカ座標の算出は不可能と判断される。このように判断する理由は、一致度の最大値Ｍ２が上記しきい値以下である場合には、いずれの選出ベクトルも想定ベクトルと類似していないと考えられ、このような場合にまでマーカ座標を決定すると正確なマーカ座標を得ることができない可能性があるからである。つまり、本実施形態では、ステップＳ８０の判定を行うことによって、不正確なマーカ座標が算出されることを防止している。ステップＳ８２の終了後、ＣＰＵ１０は第２算出処理を終了する。
【０１６０】
なお、本実施形態における第２算出処理において用いられる想定ベクトルは単位ベクトルであったが、上記第３算出処理や後述する第４算出処理と同様、想定ベクトルの長さを用いるようにしてもよい。
【０１６１】
図１９の説明に戻り、ステップＳ１７の次のステップＳ１８において、第２算出処理においてマーカ座標が算出されたか否かが判定される。すなわち、第２算出処理のステップＳ８０においてマーカ座標が算出された場合、ステップＳ１８の判定結果は肯定となる。一方、ステップＳ８１においてマーカ座標の算出が不可能であると判断された場合、ステップＳ１８の判定結果は否定となる。ステップＳ１８の判定結果が肯定である場合、ＣＰＵ１０は図１９に示す座標算出処理を終了する。一方、ステップＳ１８の判定結果が否定である場合、ステップＳ１９の処理が実行される。
【０１６２】
ステップＳ１９においては、第３算出処理が実行される。第３算出処理の詳細な内容はステップＳ１４の場合と同様である。すなわち、２個以上の検出座標から２つのマーカ座標を算出することに失敗したため、１個以上の検出座標から２つのマーカ座標を算出することができる第３算出処理が実行される。続くステップＳ２０において、第３算出処理においてマーカ座標が算出されたか否かが判定される。ステップＳ２０の判定処理は、ステップＳ１５の判定処理と同様の処理である。ステップＳ２０の判定結果が肯定である場合、ＣＰＵ１０は図１９に示す座標算出処理を終了する。一方、ステップＳ２０の判定結果が否定である場合、後述するステップＳ２５の処理が実行される。
【０１６３】
次に、ステップＳ１６の判定結果が否定である場合の処理を説明する。この場合、ステップＳ２１において、第２算出処理が実行される。第２算出処理の詳細な内容はステップＳ１７の場合と同様である。続くステップＳ２２において、第２算出処理においてマーカ座標が算出されたか否かが判定される。ステップＳ２２の判定処理は、ステップＳ１５の判定処理と同様の処理である。ステップＳ２２の判定結果が肯定である場合、ＣＰＵ１０は図１９に示す座標算出処理を終了する。一方、ステップＳ２２の判定結果が否定である場合、ステップＳ２３の処理が実行される。
【０１６４】
ステップＳ２３においては、第４算出処理が実行される。図２６は、図１９に示すステップＳ２３の第４算出処理の詳細を示すフローチャートである。第４算出処理においては、まずステップＳ９１において、コントローラ７によって１個の座標が検出されたか否かが判定される。ステップＳ９１の判定は、検出座標が１つであるか否か、すなわち、メインメモリ１３に記憶されている操作データ５２に含まれる検出座標データ５２１が１つの検出座標を示すか否かによって行われる。ステップＳ９１の判定結果が肯定である場合、ステップＳ９２の処理が実行される。一方、ステップＳ９１の判定結果が否定である場合、ステップＳ９８の処理が実行される。この場合、第４算出処理によってはマーカ座標が算出されない。第４算出処理は、検出座標が１つのみである場合にマーカ座標を算出することが可能な処理だからである。これは、図１９のステップＳ１６およびＳ２２における判定において、前回は座標の算出が行われず、しかも２つ以上の検出座標からの２つのマーカ座標の算出ができなかったと判定された場合にも、１個の検出座標からマーカ座標を算出する処理を可能とするためのものである。
【０１６５】
ステップＳ９２においては、加速度データに基づいて想定ベクトルが算出される。ステップＳ９２の処理は、第３算出処理におけるステップＳ６３と同様の処理である。続くステップＳ９３において、想定ベクトルの長さが決定される。第４算出処理においては、第３算出処理におけるステップＳ６４とは異なり、最後に算出されたマーカ座標間の長さに基づいて想定ベクトルの長さが決定される。なお、本実施形態では、マーカ座標が算出されなかった場合、メインメモリ１３のマーカ座標データ５３４ａおよび５３４ｂの内容が更新されずに維持されるので、最後に算出されたマーカ座標はマーカ座標データ５３４ａおよび５３４ｂを参照することによって知ることができる。ＣＰＵ１０は、最後に算出されたマーカ座標間の長さをマーカ座標データ５３４ａおよび５３４ｂに基づいて算出し、算出した長さとなるように想定ベクトルの長さを決定する。想定ベクトルの長さが決定されると、補正後の想定ベクトルを示すデータは想定ベクトルデータ５３７としてメインメモリ１３に記憶される。
【０１６６】
なお、ステップＳ９３においても上記ステップＳ６４と同様、検出座標に対応する領域の大きさに基づいて、マーカ座標間の長さを推定し、想定ベクトルの長さを推定した長さに補正するようにしてもよい。また、ＣＰＵ１０は、予め定められた所定長さとなるように想定ベクトルを決定してもよい。
【０１６７】
続くステップＳ９４において、想定ベクトルを用いて２つの仮座標が算出される。各仮座標は、検出座標および想定ベクトルに基づいて算出される。具体的には、想定ベクトルを（ｖｘ，ｖｙ）とし、検出座標を（ｍｘ，ｍｙ）とすると、第１仮座標（ｐ１ｘ，ｐ１ｙ）および第２仮座標（ｐ２ｘ，ｐ２ｙ）は、次の式を用いて算出される。
ｐ１ｘ＝ｍｘ＋ｖｘ
ｐ１ｙ＝ｍｙ＋ｖｙ
ｐ２ｘ＝ｍｘ−ｖｘ
ｐ２ｙ＝ｍｙ−ｖｙ
上式によって算出された第１仮座標を示すデータは、第１仮座標データ５３３ａとしてメインメモリ１３に記憶され、上式によって算出された第２仮座標を示すデータは、第２仮座標データ５３３ｂとしてメインメモリ１３に記憶される。
【０１６８】
続くステップＳ９５において、ステップＳ９４で算出された各仮座標のうちで第１仮座標のみが撮像領域の範囲外に位置するか否かが判定される。本実施形態では撮像領域は０≦ｘ≦１０２４，０≦ｙ≦７６８の範囲であるので、第１仮座標が当該範囲外の値をとり、第２仮座標が当該範囲内の値をとる場合、ステップＳ９５の判定結果は肯定となる。ステップＳ９５の判定結果が肯定である場合、ステップＳ９６の処理が実行される。一方、ステップＳ９５の判定結果が否定である場合、ステップＳ９７の処理が実行される。
【０１６９】
ステップＳ９６においては、検出座標が第１マーカ座標として決定され、第１仮座標が第２マーカ座標として決定される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている第１マーカ座標データ５３４ａの内容を、メインメモリ１３に記憶されている検出座標データ５２１の内容に更新し、メインメモリ１３に記憶されている第２マーカ座標データ５３４ｂの内容を、メインメモリ１３に記憶されている第１仮座標データ５３３ａの内容に更新する。これによって、第４算出処理において各マーカ座標が算出されたこととなる。なお、ステップＳ９６において、ＣＰＵ１０は、メインメモリ１３に記憶されている処理結果データ５４１の内容を、第４算出処理を示す内容に更新する。ステップＳ９６の終了後、ＣＰＵ１０は第４算出処理を終了する。
【０１７０】
一方、ステップＳ９７においては、ステップＳ９４で算出された各仮座標のうちで第２仮座標のみが撮像領域の範囲外に位置するか否かが判定される。すなわち、撮像領域は０≦ｘ≦１０２４，０≦ｙ≦７６８の範囲であるので、第１仮座標が当該範囲内の値をとり、第２仮座標が当該範囲外の値をとる場合、ステップＳ９７の判定結果は肯定となる。ステップＳ９７の判定結果が肯定である場合、ステップＳ９８の処理が実行される。一方、ステップＳ９７の判定結果が否定である場合、ステップＳ９９の処理が実行される。
【０１７１】
ステップＳ９８においては、第２仮座標が第１マーカ座標として決定され、検出座標が第２マーカ座標として決定される。具体的には、ＣＰＵ１０は、メインメモリ１３に記憶されている第１マーカ座標データ５３４ａの内容を、メインメモリ１３に記憶されている第２仮座標データ５３３ｂの内容に更新し、メインメモリ１３に記憶されている第２マーカ座標データ５３４ｂの内容を、メインメモリ１３に記憶されている検出座標データ５２１の内容に更新する。これによって、第４算出処理において各マーカ座標が算出されたこととなる。なお、ステップＳ９８において、ＣＰＵ１０は、メインメモリ１３に記憶されている処理結果データ５４１の内容を、第４算出処理を示す内容に更新する。ステップＳ９８の終了後、ＣＰＵ１０は第４算出処理を終了する。
【０１７２】
一方、ステップＳ９９においては、第４算出処理によるマーカ座標の算出が不可能であると判断される。つまり、本実施形態では、第１および第２仮座標が共に撮像領域の範囲外にある場合、マーカ座標の算出が不可能であると判断されることになる。この場合、いずれが正しいマーカ座標であるかを判断できないからである。また、第１および第２仮座標が共に撮像領域の範囲内にある場合にも、マーカ座標の算出が不可能であると判断される。これは、第４算出処理は、検出が行われなかったのは範囲から外れたことによるものと考えて算出を行うものであるからである。ステップＳ９９の終了後、ＣＰＵ１０は第４算出処理を終了する。
【０１７３】
図１９の説明に戻り、ステップＳ２３の次のステップＳ２４において、第４算出処理においてマーカ座標が算出されたか否かが判定される。すなわち、第４算出処理のステップＳ９６およびＳ９８においてマーカ座標が算出された場合、ステップＳ２４の判定結果は肯定となる。一方、ステップＳ９９においてマーカ座標の算出が不可能であると判断された場合、ステップＳ２４の判定結果は否定となる。ステップＳ２４の判定結果が肯定である場合、ＣＰＵ１０は図１９に示す座標算出処理を終了する。一方、ステップＳ２４の判定結果が否定である場合、ステップＳ２５の処理が実行される。
【０１７４】
ステップＳ２５においては、マーカ座標の算出に失敗したと判断される。なお、マーカ座標の算出に失敗したと判断されるのは、第１算出処理および第３算出処理においてマーカ座標の算出が不可能であった場合、第２算出処理および第３算出処理においてマーカ座標の算出が不可能であった場合、第２算出処理および第４算出処理においてマーカ座標の算出が不可能であった場合、および、検出座標が０個であった場合の４通りである。ステップＳ２５の後、ＣＰＵ１０は図１９に示す座標算出処理を終了する。
【０１７５】
図１８の説明に戻り、ステップＳ４の座標算出処理の次に、ステップＳ５の処理が実行される。すなわち、ステップＳ５において、ステップＳ４で算出された各マーカ座標に基づくゲーム処理が実行される。例えば、ゲーム空間に登場するプレイヤキャラクタを、２つのマーカ座標の位置に応じて移動させる処理等が実行される。なお、図１９に示すステップＳ２５でマーカ座標の算出に失敗したと判断された場合には、プレイヤによる入力が行われなかったものとしてゲーム処理が行われてもよいし、前回に算出されたマーカ座標を用いてゲーム処理が行われてもよい。
【０１７６】
続くステップＳ６において、ステップＳ５で実行されたゲーム処理の結果を反映したゲーム画像が生成されて、ゲーム画像がモニタ２に表示される。続くステップＳ７において、ＣＰＵ１０はゲームを終了するか否かを判定する。ステップＳ７の判定は、例えば、プレイヤがゲームをクリアしたか否かや、ゲームに制限時間が設けられている場合には当該制限時間が経過したか否かによって行われる。ステップＳ７の判定結果が否定である場合、ステップＳ２の処理が再度実行され、以降、ゲームを終了すると判定されるまでステップＳ２〜Ｓ７の処理ループが実行される。一方、ステップＳ７の判定結果が肯定である場合、ＣＰＵ１０は図１８に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【０１７７】
以上のように、本実施形態によれば、第１または第２算出処理によって、検出座標が３つ以上である場合であっても、その中から２つのマーカ座標を算出することができる。また、第３または第４算出処理によって、検出座標が１つである場合であっても、２つのマーカ座標を算出することができる。
【０１７８】
なお、本実施形態では、最初に第１または第２算出処理が行われ、第１または第２算出処理によってマーカ座標が算出不可能であった場合、次に第３または第４算出処理が行われる。第１および第２算出処理は、検出座標の中からマーカ座標を選択する方法であるので、正しいマーカ座標を算出することができる可能性は第３および第４算出処理よりも高いと言える。したがって、第１または第２算出処理を第３または第４算出処理よりも先に行うことによって、正しいマーカ座標を算出する確率を高くすることができる。一方、第３および第４算出処理は、正しいマーカ座標が検出座標として検出されない場合でも、正しいマーカ座標を算出することができる。したがって、第１または第２算出処理で算出不可能であった場合に第３または第４算出処理を行うことによって、できるだけマーカ座標を算出するようにし、マーカ座標が算出不可能となる確率を減らすことができる。
【０１７９】
また、上記実施形態では、検出座標はコントローラ７側で検出され、ゲーム装置３は検出座標をコントローラ７から受け取ってマーカ座標を算出するものとした。ここで、他の実施形態では、ゲーム装置３は、撮像手段（撮像素子）によって撮像された撮像画像をコントローラ７から受け取って、撮像画像から検出座標を算出し、検出座標からマーカ座標を算出するようにしてもよい。さらに、コントローラ７側で検出座標からマーカ座標を算出するようにしてもよい。
【０１８０】
また、上記実施形態では、コントローラ７は撮像手段を備え、撮像対象であるマーカ８ａおよび８ｂがコントローラとは別に配置される態様であった。ここで、他の実施形態では、コントローラ７はマーカ８ａおよび８ｂを備え、撮像手段がコントローラ７とは別に配置される（例えばモニタ２の上に配置される）態様であってもよい。このような態様であっても撮像手段によって撮像対象を撮像することができ、撮像手段とゲーム装置３とを接続することによってゲーム装置３は撮像画像を取得することができる。
【０１８１】
また、他の実施形態では、第１算出処理において、前回のマーカ座標を結ぶ前回ベクトルに代えて、メインメモリ１３に最後に記憶されたマーカ座標を結ぶベクトルを用いてもよい。また、最後に記憶されたマーカ座標が古すぎる場合、すなわち、最後に記憶されたマーカ座標が、所定のフレーム数よりも前に記憶されたものである場合には、上記ベクトルを用いないようにしてもよい。なお、この場合、第１算出処理においてはマーカ座標の算出が不可能であると判断する。
【０１８２】
また、他の実施形態においては、第３および第４算出処理において用いられた想定ベクトルに代えて、上記前回ベクトルを用いるようにしてもよい。これによって、加速度センサ等の傾き算出手段が不要となるので、装置の構成を簡易化することができる。
【０１８３】
また、上記実施形態では、２つのマーカ座標を第１マーカ座標および第２マーカ座標として区別したが、２つのマーカ座標を区別しなくてもよい。この場合、ステップＳ３９およびＳ７９の処理では、２つの検出座標の組み合わせを順不同で考えればよい。すなわち、ある座標Ａと一方の選出座標とし、ある座標Ｂを他方の選出座標とする組み合わせと、座標Ｂを一方の選出座標とし、座標Ａを他方の選出座標とする組み合わせとを同じ組み合わせとして考えればよい。なお、コントローラ７の上面が上側となる状態とコントローラ７の上面が下側となる状態との区別がつかなくなるが、コントローラ７の上面が下側となるようなコントローラ７の使用が想定されない場合には、２つのマーカ座標を区別しなくても問題はない。
【産業上の利用可能性】
【０１８４】
以上のように、本発明は、操作可能な範囲を広くし、操作不可能になるおそれが少なくすること等を目的として、例えばゲームシステム等に利用することが可能である。
【図面の簡単な説明】
【０１８５】
【図１】本発明の一実施形態に係る座標算出装置一例であるゲーム装置を含むゲームシステムの外観図
【図２】ゲーム装置３の機能ブロック図
【図３Ａ】コントローラ７の斜視図
【図３Ｂ】コントローラ７の斜視図
【図４】コントローラ７を前方から見た図
【図５Ａ】コントローラ７の内部構造を示す図
【図５Ｂ】コントローラ７の内部構造を示す図
【図６】コントローラ７の構成を示すブロック図
【図７】コントローラ７を用いてゲーム操作するときの状態を概説する図解図
【図８】マーカ８ａおよび８ｂとコントローラ７との視野角を説明するための図
【図９】対象画像を含む撮像画像の一例を示す図
【図１０】第１算出処理を説明するための図
【図１１】第２算出処理を説明するための図
【図１２】第３算出処理を説明するための図
【図１３】第３算出処理におけるもう一方のマーカ座標を算出する処理を説明するための図
【図１４】第４算出処理を説明するための図
【図１５Ａ】第４算出処理を説明するための図
【図１５Ｂ】第４算出処理を説明するための図
【図１６】コントローラ７の位置および／または向きを変化させた場合における撮像画像の変化を示す図
【図１７】ゲーム装置３のメインメモリ１３に記憶される主なデータを示す図
【図１８】ゲーム装置３において実行されるゲーム処理の流れを示すフローチャート
【図１９】図１８に示すステップＳ３の座標算出処理の詳細を示すフローチャート
【図２０】図１９に示すステップＳ１２の第１算出処理の詳細を示すフローチャート
【図２１】図１９に示すステップＳ１４の第３算出処理の詳細を示すフローチャート
【図２２】図１９に示すステップＳ１４の第３算出処理の詳細を示すフローチャート
【図２３】ある状態におけるコントローラ７とマーカ８ａおよび８ｂとの位置関係を示す図
【図２４】図２３の状態において想定されるマーカ座標の位置を示す図
【図２５】図１９に示すステップＳ１７の第２算出処理の詳細を示すフローチャート
【図２６】図１９に示すステップＳ２３の第４算出処理の詳細を示すフローチャート
【符号の説明】
【０１８６】
１  ゲームシステム
２  モニタ
３  ゲーム装置
４  光ディスク
５  外部メモリカード
７  コントローラ
８ａ，８ｂ  マーカ
１０  ＣＰＵ
１３  メインメモリ
３２  操作部
３５  撮像情報演算部
３６  通信部
３７  加速度センサ
４０  撮像素子
５１  ゲームプログラム
５１１  座標算出プログラム
【図１】
0004837405.tif 000002
【図２】
0004837405.tif 000003
【図３Ａ】
0004837405.tif 000004
【図３Ｂ】
0004837405.tif 000005
【図４】
0004837405.tif 000006
【図５Ａ】
0004837405.tif 000007
【図５Ｂ】
0004837405.tif 000008
【図６】
0004837405.tif 000009
【図７】
0004837405.tif 000010
【図８】
0004837405.tif 000011
【図９】
0004837405.tif 000012
【図１０】
0004837405.tif 000013
【図１１】
0004837405.tif 000014
【図１２】
0004837405.tif 000015
【図１３】
0004837405.tif 000016
【図１４】
0004837405.tif 000017
【図１５Ａ】
0004837405.tif 000018
【図１５Ｂ】
0004837405.tif 000019
【図１６】
0004837405.tif 000020
【図１７】
0004837405.tif 000021
【図１８】
0004837405.tif 000022
【図１９】
0004837405.tif 000023
【図２０】
0004837405.tif 000024
【図２１】
0004837405.tif 000025
【図２２】
0004837405.tif 000026
【図２３】
0004837405.tif 000027
【図２４】
0004837405.tif 000028
【図２５】
0004837405.tif 000029
【図２６】
0004837405.tif 000030