画像認識プログラム、画像認識装置、画像認識システム、および画像認識方法
【課題】撮像画像にぶれが生じている場合であっても、撮像対象の位置を正確に検出する。
【解決手段】ゲーム装置は、撮像手段によって撮像された撮像画像から、複数の内部図形が描かれた第1図形を含む所定の撮像対象を検出する。ゲーム装置はまず、撮像手段によって撮像された撮像画像を取得し、撮像画像から第1図形の領域を検出する。次に、ゲーム装置は、検出された領域内から複数の内部図形をそれぞれ検出し、各内部図形の中心位置を算出することによって所定の撮像対象の位置を検出する。
【解決手段】ゲーム装置は、撮像手段によって撮像された撮像画像から、複数の内部図形が描かれた第1図形を含む所定の撮像対象を検出する。ゲーム装置はまず、撮像手段によって撮像された撮像画像を取得し、撮像画像から第1図形の領域を検出する。次に、ゲーム装置は、検出された領域内から複数の内部図形をそれぞれ検出し、各内部図形の中心位置を算出することによって所定の撮像対象の位置を検出する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、撮像手段によって撮像された画像から所定の撮像対象を認識するための画像認識プログラム、画像認識装置、画像認識システム、および画像認識方法に関する。
【背景技術】
【0002】
従来、カメラ等の撮像手段によって撮像された画像(撮像画像)から所定の撮像対象を検出する技術がある。例えば、非特許文献1には、拡張現実感技術において、カメラによる撮像画像に含まれる四角形のマーカに対して画像認識処理を行うことが記載されている。非特許文献1では、撮像画像に対して固定の閾値を用いて2値化を行うことで連結領域を抽出し、抽出された連結領域から所定の撮像対象でないもの(例えば、大きすぎたり小さすぎたりするもの)を除外した上で、連結領域の輪郭線を抽出する。そして、輪郭線から4本の線分を求めて四角形のマーカの頂点を算出することでマーカの位置を検出している。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】加藤博一,Mark Billinghurst,浅野浩一,橘啓八郎、「マーカー追跡に基づく拡張現実感システムとそのキャリブレーション」、日本バーチャルリアリティ学会論文誌 Vol.4 No.4、1999年
【発明の概要】
【発明が解決しようとする課題】
【0004】
非特許文献1に記載の認識方法では、撮像対象(マーカ)の輪郭から撮像対象の位置(4頂点)を検出しているので、例えば手ぶれ等によって撮像画像にぶれが生じている場合には、撮像対象の位置を正確に検出することができないおそれがある。すなわち、撮像画像にぶれが生じている場合には、撮像対象の輪郭が正確に得られていない可能性があるため、輪郭から撮像対象の位置を算出しても正確な位置を得ることができないのである(図7参照)。
【0005】
それ故、本発明は、撮像画像にぶれが生じている場合であっても、撮像対象の位置を正確に検出することができる画像認識プログラム、画像認識装置、画像認識システム、および画像認識方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明は、上記の課題を解決するために、以下の(1)〜(16)の構成を採用した。
【0007】
(1)
本発明は、撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出する情報処理装置のコンピュータにおいて実行される画像認識プログラムである。画像認識プログラムは、画像取得手段と、図形検出手段と、対象検出手段としてコンピュータを機能させる。画像取得手段は、撮像手段によって撮像された撮像画像を取得する。図形検出手段は、複数の図形をそれぞれ検出する。対象検出手段は、図形検出手段によって検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する。
【0008】
上記「撮像手段」は、情報処理装置が予め備えているものであってもよいし、情報処理装置とは別体で構成されるものであってもよい。また、情報処理手段が撮像手段を予め備えている場合、撮像手段は、情報処理装置に固定的に取り付けられていてもよいし、情報処理装置に対して着脱可能であってもよい。また、撮像手段は、情報処理装置の動作に連動して動作してもよいし、情報処理装置の動作とは独立して動作するものであってもよい。
上記「所定の撮像対象」は、典型的にはマーカであるが、複数の図形を含む物であればどのような物でもよい。また、上記「図形」は、後述する実施形態においては複数個の円形図形(図6)であるが、その形状、数、大きさ、色はどのようなものであってもよい。例えば、上記「図形」は、円形でもよいし、楕円形でもよいし、多角形であってもよい。
また、上記「図形」は、後述する実施形態では第1図形の内部に描かれた内部図形であるが、ある図形の内部に描かれている必要はない。すなわち、上記「図形検出手段」は、後述する実施形態や下記(2)のように、(第1図形の領域を検出してから)第1図形の領域内から複数の図形を検出してもよいし、(第1図形の領域を検出せずに)撮像画像の全領域から複数の図形を検出してもよい。
上記「情報処理装置」とは、後述する実施形態に記載のゲーム装置の他、コンピュータプログラムを実行することによって情報処理を行う任意のコンピュータを含む概念である。また、上記「情報処理装置」は、携帯型か否かを問わない。
上記「画像認識プログラム」とは、一例としては、後述する実施形態に記載のゲームプログラムであるが、パーソナルコンピュータや携帯端末において実行されるアプリケーションプログラムを含む概念である。
上記「画像取得手段」は、情報処理装置内に備えられた撮像手段から内部バス等を介して撮像画像を取得してもよいし、情報処理装置の外部の撮像手段から通信によって撮像画像を取得してもよいし、撮像手段によって撮像された撮像画像を記憶した記憶媒体が情報処理装置に装着されることによって当該記憶媒体から撮像画像を取得してもよい。
上記「図形検出手段」は、上記複数の図形を検出するものであればよく、複数の図形を検出する具体的な方法はどのような方法であってもよい。上記「図形検出手段」は、例えば、後述する実施形態や下記(3)のように図形の領域を検出してもよいし、下記(4)のように図形の輪郭を抽出してもよいし、パターンマッチングの手法を用いて図形を検出してもよい。
上記「図形の(それぞれの)中心位置」とは、図形の厳密な意味での中心の位置である必要はなく、各種の演算によって算出することが可能な、図形の中央付近の位置であればよい。例えば、「図形の中心位置」は、図形の輪郭を表す画素の平均値として算出されてもよいし、撮像画像の各画素に何らかの重み(輝度値等)が付される場合には、図形の領域内の各画素の重心位置として算出されてもよい。
上記「中心位置を算出することによって所定の撮像対象の位置を検出する」とは、中心位置に基づいて所定の撮像対象の位置を特定することができればよい。したがって、上記「対象検出手段」は、例えば、後述する実施形態や下記(6)や下記(16)のように、中心位置から直線(近似直線)を算出し、近似直線から所定の撮像対象の位置を特定してもよいし、後述する(マーカ位置の算出に関する変形例)に記載のように、中心位置をそのまま所定の撮像対象の位置として用いてもよい。また、複数の図形の各中心位置から、撮像画像内における所定の撮像対象の位置または向きを特定することができるので、対象検出手段は、当該位置および向きの少なくとも一方を検出するものであればよい。
【0009】
上記(1)の構成によれば、第1図形の輪郭ではなく、図形の中心位置によって所定の撮像対象の位置が検出される。ここで、撮像画像にぶれが生じている場合には所定の撮像対象の輪郭を正確に検出することが困難であるので、輪郭からでは所定の撮像対象の位置を正確に検出することができない。これに対して、上記中心位置は、撮像画像にぶれが生じていても正確に算出されるので、上記(1)の構成によれば、撮像画像にぶれが生じている場合でも、所定の撮像対象の位置または向きを正確に算出することができる。
【0010】
(2)
所定の撮像対象は、複数の図形が内部に描かれた第1図形を含んでいてもよい。このとき、画像認識プログラムは、撮像画像から第1図形の領域を検出する領域検出手段としてコンピュータをさらに実行させる。図形検出手段は、領域検出手段が検出した領域内から複数の図形をそれぞれ検出する。
【0011】
上記「領域検出手段」は、所定の撮像対象の第1図形を検出するものであればよく、第1図形を検出する具体的な方法はどのような方法であってもよい。上記「領域検出手段」は、例えば、第1図形の輪郭を抽出することで第1図形を検出してもよいし、パターンマッチングの手法を用いて第1図形を検出してもよい。
【0012】
上記(2)の構成によれば、まず第1図形の領域が検出され、検出された領域内から、第1図形の内部に描かれる図形(内部図形)が検出される。これによれば、所定の撮像対象ではない物を内部図形として検出してしまう誤検出を防止することができ、内部図形を確実に検出することができる。
【0013】
(3)
図形検出手段は、複数の図形の領域をそれぞれ検出してもよい。このとき、対象検出手段は、図形検出手段によって検出された各領域の中心位置をそれぞれ算出する位置算出手段を有する。
【0014】
上記(3)の構成によれば、複数の図形の領域をそれぞれ検出した後で、検出された領域の中心位置を算出することで、中心位置を容易に算出することができる。
【0015】
(4)
図形検出手段は、複数の図形の領域を示す輪郭をそれぞれ検出してもよい。このとき、位置算出手段は、図形検出手段によって検出された各輪郭で示される各領域の中心位置をそれぞれ算出する。
【0016】
上記(4)の構成によれば、複数の図形の領域の輪郭を検出した後で、検出された輪郭の中心位置を算出することで、中心位置を容易に算出することができる。
【0017】
(5)
位置算出手段は、図形検出手段によって検出された各輪郭を表す各画素の位置を求め、求められた位置の平均値を算出することにより、各領域の中心位置をそれぞれ算出してもよい。
【0018】
上記(5)の構成によれば、輪郭を表す画素の位置の平均値を算出することで、中心位置を容易かつ正確に算出することができる。
【0019】
(6)
対象検出手段は、複数の図形のそれぞれの中心位置に基づいて、所定の直線を算出する直線算出手段を有していてもよい。このとき、直線算出手段により算出された所定の直線に基づいて、所定の撮像対象と撮像手段との位置関係を算出する位置関係手段としてコンピュータをさらに機能させる。
【0020】
上記(6)の構成によれば、中心位置に基づいて算出される直線によって、撮像画像内における所定の撮像対象の位置および向きを特定することができる。したがって、上記直線に基づくことによって上記位置関係を正確に算出することができる。
また、上記(6)の構成によれば、上記位置関係を用いて、後述する実施形態における仮想画像を撮像画像に合成することも可能である。つまり、上記(6)の構成によれば、撮像画像と仮想画像とを合成した合成画像を表示する拡張現実感技術において、撮像画像のぶれに強い(撮像画像にぶれが生じた場合でも所定の撮像対象を正確に検出できる)認識処理を用いることができる。なお、拡張現実感技術においては、ユーザが撮像手段を動かして使用する状況が多いと想定され、後述する実施形態のようにゲームに拡張現実感技術が用いられる場合には、そのような状況が特に多いと考えられる。したがって、上記(6)の構成を拡張現実感技術に用いる場合においては、上記(1)の構成による画像のぶれに強い認識処理が特に有効である。
【0021】
(7)
複数の図形はそれぞれ円形状であってもよい。
【0022】
上記(7)の構成によれば、所定の撮像対象がどのような向きであっても、撮像画像内における図形の形状が同じになる。したがって、所定の撮像対象の向きによって中心位置が変化することがないので、より正確に所定の撮像対象を検出することができる。
【0023】
(8)
領域検出手段は、撮像画像において第1の間隔で得られる画素値に基づいて第1図形の領域を検出してもよい。このとき、対象検出手段は、領域検出手段によって検出された領域内の撮像画像において第1の間隔よりも小さい第2の間隔で得られる画素値に基づいて各図形の中心位置を算出する。
【0024】
上記「第2の間隔」は、上記「第1の間隔」よりも小さければどのような長さであってもよい。また、後述する実施形態のように、撮像対象を検出する処理において複数種類の処理が実行される場合、対象検出手段は、中心位置を算出する処理を第2の間隔で得られる画素値に基づいて行えばよく、その他の処理についてはどのような精度で行ってもよい。
【0025】
上記(8)の構成によれば、領域検出手段によってまず低い精度で第1図形が検出された後、第1図形内の複数の図形の中心位置を算出する処理が高い精度で行われる。これによれば、第1図形の検出処理が低い精度で行われるとともに、複数の図形を検出する処理の処理範囲が第1図形の領域内に限られるので、認識処理を短時間で行うことができる。また、検出された図形の中心位置を算出する処理は高い精度で行われるので、所定の撮像対象の位置を精度良く検出することができる。したがって、上記(8)の構成によれば、対象の検出精度を維持しつつ、検出に要する時間を短縮することができる認識処理を提供することができる。
【0026】
(9)
画像認識プログラムは、領域検出手段によって検出された第1図形の領域において、当該第1図形の輪郭を抽出する輪郭抽出手段としてコンピュータをさらに機能させてもよい。このとき、対象検出手段は、輪郭抽出手段によって抽出された輪郭内の領域から複数の図形をそれぞれ検出する。
【0027】
上記(9)の構成によれば、輪郭抽出手段によって抽出された輪郭内の領域から図形が検出されるので、図形を検出する範囲を適切に決定することができる。これによれば、図形の検出処理を無駄な領域に対して行わずに済むので、認識処理をより効率良く行うことができる。
【0028】
(10)
輪郭抽出手段は、撮像画像において所定間隔で得られる画素値に基づいて当該第1図形の輪郭を抽出してもよい。このとき、対象検出手段は、撮像画像において所定間隔よりも小さい間隔で得られる画素値に基づいて、当該輪郭内の領域から複数の図形をそれぞれ検出する。
【0029】
上記(10)の構成によれば、輪郭の抽出処理は図形の検出処理よりも低い精度で行われるので、輪郭の抽出処理をより短時間で行うことができる。その結果、認識処理をより短時間で行うことができる。
【0030】
(11)
画像認識プログラムは、輪郭抽出手段によって抽出された輪郭が第1図形の形状を表すか否かを判定する形状判定手段としてコンピュータを機能させてもよい。このとき、対象検出手段は、形状判定手段によって所定の撮像対象の形状を表すと判定される輪郭に対応する領域内から複数の図形をそれぞれ検出する。
【0031】
上記(11)の構成によれば、抽出された輪郭に基づいて、領域検出手段によって検出された領域内に第1図形が含まれるか否かを判定することができる。そして、領域内に第1図形が含まれない場合には、その領域については図形の検出処理が行われない。したがって、上記(11)の構成によれば、第1図形を含まない領域を、図形の検出処理の対象から除くことができるので、図形の検出処理が無駄に行われることを防止することができる。これによれば、認識処理を効率良く行うことができ、認識処理をより短時間で行うことができる。特に、上記(10)と(11)との構成を組み合わせる場合には、(低精度で行われるため)相対的に高速に行われる輪郭の抽出処理によって、(高精度で行われるため)相対的に時間の要する図形の検出処理を省略することができるので、認識処理をより効率良く行うことができる。
【0032】
(12)
所定の撮像対象は、第1図形と異なる位置に第2図形を含んでいてもよい。このとき、画像認識プログラムは、撮像画像から第2図形を検出し、第1図形に対して第2図形が配置される方向に基づいて所定の撮像対象の向きを特定する向き特定手段としてコンピュータをさらに機能させる。
【0033】
上記(12)の構成によれば、第1図形に対する第2図形の方向によって、所定の撮像対象の向きを特定することができる。また、上記(12)の構成によれば、所定の撮像対象において第2図形は第1図形とは異なる位置に形成されるので、第1図形の内部には内側図形のみを描くことができる。そのため、内側図形を検出する際に、第2図形またはその一部を誤検出することがなく、内側図形を正確に検出することができる。したがって、認識処理の精度をより向上することができる。
【0034】
(13)
図形検出手段は、撮像画像において所定間隔で得られる画素値に基づいて複数の図形の領域をそれぞれ検出してもよい。このとき、位置算出手段は、撮像画像において所定間隔よりも小さい間隔で得られる画素値に基づいて、図形検出手段によって検出された各領域の中心位置をそれぞれ算出する。
【0035】
上記(13)の構成によれば、複数の図形の領域の検出処理は、中心位置の算出処理よりも低い精度で行われるので、複数の図形の領域の検出処理をより短時間で行うことができる。その結果、認識処理をより短時間で行うことができる。
【0036】
(14)
対象検出手段は、図形検出手段によって検出された領域の個数が、所定範囲内の個数であるか否かを判定する個数判定手段をさらに有していてもよい。このとき、位置算出手段は、所定範囲内の個数の領域が検出された第1図形の領域について、図形検出手段によって検出された各領域の中心位置を算出する。
【0037】
上記(14)の構成によれば、図形検出手段によって検出された領域の個数が適切な数であるか否かを判定することができる。そして、領域の個数が適切でない場合には、領域検出手段によって検出された領域内に第1図形が含まれないと判断され、中心位置の算出処理が行われない。したがって、上記(14)の構成によれば、第1図形を含まない領域を、中心位置の算出処理の対象から除くことができるので、当該算出処理が無駄に行われることを防止することができる。これによれば、認識処理を効率良く行うことができ、認識処理をより短時間で行うことができる。特に、上記(13)と(14)との構成を組み合わせる場合には、(低精度で行われるため)相対的に高速に行われる第1図形の領域の検出処理によって、(高精度で行われるため)相対的に時間の要する中心位置の算出処理を省略することができるので、認識処理をより効率良く行うことができる。
【0038】
(15)
所定の撮像対象には、3つ以上の図形が含まれていてもよい。このとき、対象検出手段は、3つ以上の図形の中心位置に基づいて所定の撮像対象の位置および向きを検出する。
【0039】
上記「(所定の撮像対象の)向きを検出する」とは、所定の撮像対象の向きを一意に特定することに限らない。例えば、後述する実施形態におけるステップS26の処理では、中心位置から4つの頂点の位置を算出するが、これら4つの頂点の位置では、マーカ51が90°、180°または270°回転した状態と回転しない状態とを区別することができない。上記(15)の構成における対象検出手段は、上記ステップS26の処理のように、所定の撮像対象の向きを一意に特定しない処理を行うものであってもよい。
【0040】
上記(15)の構成によれば、3つ以上の図形の中心位置を算出することによって、所定の撮像対象における3点の(撮像画像内の)位置を特定することができるので、所定の撮像対象の位置および向きを検出することができる。
【0041】
(16)
所定の撮像対象には、所定の直線上に3以上の所定数の図形が配置されていてもよい。このとき、対象検出手段は、算出された中心位置のうちから、2以上であって所定数よりも少ない数の中心位置に少なくとも基づいて所定の直線を算出し、算出された所定の直線に基づいて所定の撮像対象の位置および向きを検出する。
【0042】
上記(16)の構成によれば、撮像画像における所定の直線の位置および向きによって所定の撮像対象の位置および向きを検出することができる。ここで、所定の直線は、所定数よりも少ない図形の中心位置から算出されるので、所定数全ての図形が検出されない場合であっても算出可能である。したがって、上記(16)の構成によれば、図形の数に冗長性を持たせることにより、図形のいくつかが検出されない場合でも所定の撮像対象の位置および向きを検出することができる。これによって、より確実に所定の撮像対象を検出することができ、認識処理の成功率を上げることができる。
【0043】
また、本発明は、上記各手段と同等の手段を備える画像認識装置の形態で実施されてもよい。この画像認識装置においては、画像認識プログラムを実行するコンピュータによって上記各手段が実現されてもよいし、専用回路によって上記各手段の一部または全部が実現されてもよい。また、本発明は、上記各手段を備える1以上の情報処理装置からなる画像認識システムの形態で実施されてもよい。このとき、1以上の情報処理装置は、有線または無線通信によって直接通信を行ってもよいし、ネットワークを介して通信を行ってもよい。さらに、本発明は、上記各手段によって行われる画像認識方法の形態で実施されてもよい。
【0044】
また、本発明は、拡張現実感技術において用いられるマーカの形態で実施されてもよい。すなわち、マーカは、撮像手段によって撮像された撮像画像に対して所定の認識処理を行うことによって撮像画像内におけるマーカの位置および向きを算出し、当該マーカの位置および向きに基づいて仮想オブジェクトの画像を生成し、当該撮像画像に対して当該仮想オブジェクトの画像を合成して表示する画像表示システムにおいて用いられる。マーカは、複数の内部図形を備える。複数の内部図形は、それぞれの中心位置が(画像表示システムによって)算出される。また、中心位置は、マーカの位置および向きを表す情報を(画像表示システムが)算出するために用いられる。また、マーカは、後述する実施形態のように、薄板状の部材に図形が描かれることによって実現されてもよいし、表示装置の画面に図形が表示されることによって実現されてもよい。
【発明の効果】
【0045】
本発明によれば、所定の撮像対象に含まれる複数の図形の中心位置をそれぞれ算出し、各中心位置によって所定の撮像対象の位置を検出することによって、撮像画像にぶれが生じている場合でも、所定の撮像対象の位置を正確に算出することができる。
【図面の簡単な説明】
【0046】
【図1】本実施形態に係るゲーム装置の外観図
【図2】ゲーム装置の内部構成の一例を示すブロック図
【図3】ゲーム装置を使用する例を示す図
【図4】ゲーム装置に表示されるゲーム画像の一例を示す図
【図5】本実施形態における画像認識処理で用いられる対象領域を示す図
【図6】本実施形態において用いられるマーカを示す図
【図7】左右の輪郭がぼけた第1図形の画像を示す図
【図8】第1図形の一部における内部図形の中心位置を示す図
【図9】第1図形内の各内部図形の中心点を示す図
【図10】ゲームプログラムによる処理において用いられる各種データを示す図
【図11】ゲーム装置において実行されるゲーム処理の流れを示すメインフローチャート
【図12】図11に示す認識処理(ステップS2)の流れを示すフローチャート
【図13】撮像画像においてステップS11の処理において画素値が参照される画素を示す図
【図14】図12に示すマーカ検出処理(ステップS15)の流れを示すフローチャート
【図15】ステップS21の処理対象となる領域の一例を示す図
【図16】撮像画像においてステップS21の処理において画素値が参照される画素を示す図
【図17】第1図形を表す撮像画像の一例を示す図
【図18】図17に示す各直線L1〜L4によって算出される4つの頂点P11〜P14を示す図
【図19】ステップS27で設定される所定領域の一例を示す図
【図20】本実施形態の変形例におけるマーカを示す図
【図21】本実施形態の他の変形例におけるマーカを示す図
【発明を実施するための形態】
【0047】
[ゲーム装置のハードウェア構成]
以下、図面を参照して、本発明の一実施形態に係る画像認識プログラムおよび画像認識装置について説明する。本発明は、表示装置に画像を表示させる任意の情報処理装置(コンピュータ)において画像認識プログラムが実行されることによって実現することができるが、本実施形態では、情報処理装置の一例として図1に示すゲーム装置1を用いる場合について説明する。
【0048】
図1は、本実施形態に係るゲーム装置1の外観図である。ここでは、ゲーム装置の一例として、携帯ゲーム装置を示す。なお、ゲーム装置1は、カメラを内蔵しており、当該カメラによって画像を撮像し、撮像した画像を画面に表示したり、撮像した画像のデータを保存したりする撮像装置としても機能する。
【0049】
図1において、ゲーム装置1は折り畳み型の携帯ゲーム装置であり、開いた状態(開状態)のゲーム装置1を示している。ゲーム装置1は、開いた状態においてもユーザが両手または片手で把持することができるようなサイズで構成される。
【0050】
ゲーム装置1は、下側ハウジング11および上側ハウジング21を有する。下側ハウジング11と上側ハウジング21とは、開閉可能(折り畳み可能)に連結されている。図1の例では、下側ハウジング11および上側ハウジング21は、それぞれ横長の長方形の板状に形成され、互いの長辺部分で回転可能に連結されている。通常、ユーザは、開状態でゲーム装置1を使用する。また、ユーザは、ゲーム装置1を使用しない場合には閉状態としてゲーム装置1を保管する。また、図1に示した例では、ゲーム装置1は、上記閉状態および開状態のみでなく、下側ハウジング11と上側ハウジング21とのなす角度が閉状態と開状態との間の任意の角度において、連結部分に発生する摩擦力などによってその開閉角度を維持することができる。つまり、上側ハウジング21を下側ハウジング11に対して任意の角度で静止させることができる。
【0051】
下側ハウジング11には、下側LCD(Liquid Crystal Display:液晶表示装置)12が設けられる。下側LCD12は横長形状であり、長辺方向が下側ハウジング11の長辺方向に一致するように配置される。なお、本実施形態では、ゲーム装置1に内蔵されている表示装置としてLCDを用いているが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置等、他の任意の表示装置を利用しても良い。また、ゲーム装置1は、任意の解像度の表示装置を利用することができる。なお、下側LCD12には、内側カメラ23または外側カメラ25で撮像されている画像がリアルタイムに表示される。
【0052】
下側ハウジング11には、入力装置として、各操作ボタン14A〜14Kおよびタッチパネル13が設けられる。図1に示されるように、各操作ボタン14A〜14Kのうち、方向入力ボタン14A、操作ボタン14B、操作ボタン14C、操作ボタン14D、操作ボタン14E、電源ボタン14F、スタートボタン14G、およびセレクトボタン14Hは、下側ハウジング11の内側主面上に設けられる。内側主面とは、上側ハウジング21と下側ハウジング11とを折り畳んだときに内側となる面である。図1に示す例では、方向入力ボタン14Aおよび電源ボタン14Fは、下側ハウジング11の内側主面の中央付近に設けられる下側LCD12に対して、左右一方側(図1では左側)の当該主面上に設けられる。また、操作ボタン14B〜14E、スタートボタン14G、およびセレクトボタン14Hは、下側LCD12に対して左右他方側(図1では右側)となる下側ハウジング11の内側主面上に設けられる。方向入力ボタン14A、操作ボタン14B〜14E、スタートボタン14G、およびセレクトボタン14Hは、ゲーム装置1に対する各種操作を行うために用いられる。方向入力ボタン14Aは、例えば選択操作等に用いられる。各操作ボタン14B〜14Eは、例えば決定操作やキャンセル操作等に用いられる。電源ボタン14Fは、ゲーム装置1の電源をオン/オフするために用いられる。
【0053】
なお、図1においては、操作ボタン14I〜14Kの図示を省略している。例えば、Lボタン14Iは、下側ハウジング11の上側面の左端部に設けられ、Rボタン14Jは、下側ハウジング11の上側面の右端部に設けられる。Lボタン14IおよびRボタン14Jは、撮影機能を有するゲーム装置1に対して、例えば撮影指示操作(シャッター操作)を行うために用いられる。さらに、音量ボタン14Kは、下側ハウジング11の左側面に設けられる。音量ボタン14Kは、ゲーム装置1が備えるスピーカの音量を調整するために用いられる。
【0054】
また、ゲーム装置1は、各操作ボタン14A〜14Kとは別の入力装置としてさらに、画面上における任意の位置を指定可能な入力装置であるポインティングデバイスの一例として、タッチパネル13を備えている。タッチパネル13は、下側LCD12の画面上を覆うように装着されている。なお、本実施形態では、タッチパネル13は、例えば抵抗膜方式のタッチパネルが用いられる。ただし、タッチパネル13は、抵抗膜方式に限らず、任意の方式のタッチパネルを用いることができる。また、本実施形態では、タッチパネル13として、例えば下側LCD12の解像度と同じ解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル13の解像度と下側LCD12の解像度とが一致している必要はない。また、下側ハウジング11の右側面には、挿入口(図1では破線で示している)が設けられている。挿入口は、タッチパネル13に対する操作を行うために用いられるタッチペン27を収納することができる。なお、タッチパネル13に対する入力(タッチ入力)は、通常タッチペン27を用いて行われるが、タッチペン27に限らずユーザの指でタッチパネル13を操作することも可能である。
【0055】
また、下側ハウジング11の右側面には、メモリカード28を収納するための挿入口(図1では二点鎖線で示している)が設けられている。この挿入口の内側には、ゲーム装置1とメモリカード28とを電気的に接続するためのコネクタ(図示せず)が設けられる。メモリカード28は、例えばSD(Secure Digital)メモリカードであり、コネクタに着脱自在に装着される。メモリカード28は、例えば、ゲーム装置1によって撮像された画像を記憶(保存)したり、他の装置で生成された画像をゲーム装置1に読み込んだりするために用いられる。
【0056】
さらに、下側ハウジング11の上側面には、メモリカード29を収納するための挿入口(図1では、一点鎖線で示している)が設けられている。この挿入口の内側にも、ゲーム装置1とメモリカード29とを電気的に接続するためのコネクタ(図示せず)が設けられる。メモリカード29は、ゲームプログラム等の情報処理プログラムを記録した記録媒体であり、下側ハウジング11に設けられた挿入口に着脱自在に装着される。
【0057】
下側ハウジング11と上側ハウジング21との連結部の左側部分には、3つのLED15A〜15Cが取り付けられる。ここで、ゲーム装置1は、他の機器との間で無線通信を行うことが可能であり、第1LED15Aは、ゲーム装置1の電源がオンである場合に点灯する。第2LED15Bは、ゲーム装置1の充電中に点灯する。第3LED15Cは、無線通信が確立している場合に点灯する。したがって、3つのLED15A〜15Cによって、ゲーム装置1の電源のオン/オフ状況、充電状況、および、通信確立状況をユーザに通知することができる。
【0058】
一方、上側ハウジング21には、上側LCD22が設けられる。上側LCD22は横長形状であり、長辺方向が上側ハウジング21の長辺方向に一致するように配置される。なお、下側LCD12と同様、上側LCD22に代えて、他の任意の方式および任意の解像度の表示装置を利用しても良い。なお、上側LCD22上を覆うように、タッチパネルを設けてもかまわない。上側LCD22には、例えば、各操作ボタン14A〜14Kやタッチパネル13の役割をユーザに教えるための操作説明画面が表示される。
【0059】
また、上側ハウジング21には、2つのカメラ(内側カメラ23および外側カメラ25)が設けられる。図1に示されるように、内側カメラ23は、上側ハウジング21の連結部付近の内側主面に取り付けられる。一方、外側カメラ25は、内側カメラ23が取り付けられる内側主面の反対側の面、すなわち、上側ハウジング21の外側主面(ゲーム装置1が閉状態となった場合に外側となる面であり、図1に示す上側ハウジング21の背面)に取り付けられる。なお、図1においては、外側カメラ25を破線で示している。これによって、内側カメラ23は、上側ハウジング21の内側主面が向く方向を撮像することが可能であり、外側カメラ25は、内側カメラ23の撮像方向の逆方向、すなわち、上側ハウジング21の外側主面が向く方向を撮像することが可能である。このように、本実施形態では、2つの内側カメラ23および外側カメラ25の撮像方向が互いに逆方向となるように設けられる。例えば、ユーザは、ゲーム装置1からユーザの方を見た景色を内側カメラ23で撮像することができるとともに、ゲーム装置1からユーザの反対側の方向を見た景色を外側カメラ25で撮像することができる。
【0060】
なお、上記連結部付近の内側主面には、音声入力装置としてマイク(図2に示すマイク43)が収納されている。そして、上記連結部付近の内側主面には、マイク43がゲーム装置1外部の音を検知できるように、マイクロフォン用孔16が形成される。マイク43を収納する位置およびマイクロフォン用孔16の位置は必ずしも上記連結部である必要はなく、例えば下側ハウジング11にマイク43を収納し、マイク43を収納位置に対応させて下側ハウジング11にマイクロフォン用孔16を設けるようにしても良い。
【0061】
また、上側ハウジング21の外側主面には、第4LED26(図1では、破線で示す)が取り付けられる。第4LED26は、内側カメラ23または外側カメラ25によって撮影が行われた(シャッターボタンが押下された)時点で点灯する。また、内側カメラ23または外側カメラ25によって動画が撮影される間点灯する。第4LED26によって、ゲーム装置1による撮影が行われた(行われている)ことを撮影対象者や周囲に通知することができる。
【0062】
また、上側ハウジング21の内側主面の中央付近に設けられる上側LCD22に対して、左右両側の当該主面に音抜き孔24がそれぞれ形成される。音抜き孔24の奥の上側ハウジング21内にはスピーカが収納されている。音抜き孔24は、スピーカからの音をゲーム装置1の外部に放出するための孔である。
【0063】
以上に説明したように、上側ハウジング21には、画像を撮像するための撮像手段である内側カメラ23および外側カメラ25と、主に操作説明画面を表示するための表示手段である上側LCD22とが設けられる。一方、下側ハウジング11には、ゲーム装置1に対する操作入力を行うための入力装置(タッチパネル13および各操作ボタン14A〜14K)と、撮像された画像を表示するための表示手段である下側LCD12とが設けられる。したがって、ゲーム装置1を使用する際には、ユーザは、下側LCD12に表示される撮像画像(カメラによって撮像された画像)を見ながら、下側ハウジング11を把持して入力装置に対する入力を行うことができる。
【0064】
次に、図2を参照して、ゲーム装置1の内部構成を説明する。図2は、ゲーム装置1の内部構成の一例を示すブロック図である。
【0065】
図2において、ゲーム装置1は、CPU31、メインメモリ32、メモリ制御回路33、保存用データメモリ34、プリセットデータ用メモリ35、メモリカードインターフェース(メモリカードI/F)36、メモリカードI/F37、無線通信モジュール38、ローカル通信モジュール39、リアルタイムクロック(RTC)40、電源回路41、インターフェース回路(I/F回路)42、第1GPU(Graphics Processing Unit)45、第2GPU46、第1VRAM(Video RAM)47、第2VRAM48、およびLCDコントローラ49等の電子部品を備えている。これらの電子部品は、電子回路基板上に実装されて、下側ハウジング11(または上側ハウジング21でも良い)内に収納される。
【0066】
CPU31は、所定のプログラム(ここでは、本実施形態に係る画像表示プログラム)を実行するための情報処理手段である。本実施形態では、画像表示プログラムの一例としてゲームプログラムがゲーム装置1内のメモリ(例えば保存用データメモリ34)やメモリカード28および/または29に記憶されており、CPU31は、当該ゲームプログラムを実行することによって、後述するゲーム処理を実行する。なお、CPU31によって実行されるプログラムは、ゲーム装置1内のメモリに予め記憶されていても良いし、メモリカード28および/または29から取得されても良いし、他の機器との通信によって他の機器から取得されても良い。
【0067】
CPU31には、メインメモリ32、メモリ制御回路33、およびプリセットデータ用メモリ35が接続される。メモリ制御回路33には、保存用データメモリ34が接続される。メインメモリ32は、CPU31のワーク領域やバッファ領域として用いられる記憶手段である。すなわち、メインメモリ32は、上記ゲーム処理に用いられる各種データを記憶したり、外部(メモリカード28および29や他の機器等)から取得されるプログラムを記憶したりする。本実施形態では、メインメモリ32として、例えばPSRAM(Pseudo−SRAM)を用いる。保存用データメモリ34は、CPU31によって実行されるプログラムや内側カメラ23および外側カメラ25によって撮像された画像のデータ等を記憶するための記憶手段である。保存用データメモリ34は、不揮発性の記憶媒体によって構成されており、本実施形態では例えばNAND型フラッシュメモリで構成される。メモリ制御回路33は、CPU31の指示に従って、保存用データメモリ34に対するデータの読み出しおよび書き込みを制御する回路である。プリセットデータ用メモリ35は、ゲーム装置1において予め設定される各種パラメータ等のデータ(プリセットデータ)を記憶するための記憶手段である。プリセットデータ用メモリ35としては、SPI(Serial Peripheral Interface)バスによってCPU31と接続されるフラッシュメモリを用いることができる。
【0068】
メモリカードI/F36および37は、それぞれCPU31に接続される。メモリカードI/F36は、コネクタに装着されたメモリカード28に対するデータの読み出しおよび書き込みを、CPU31の指示に応じて行う。また、メモリカードI/F37は、コネクタに装着されたメモリカード29に対するデータの読み出しおよび書き込みを、CPU31の指示に応じて行う。本実施形態では、内側カメラ23および外側カメラ25によって撮像された画像データや他の装置から受信された画像データがメモリカード28に書き込まれたり、メモリカード28に記憶された画像データがメモリカード28から読み出されて保存用データメモリ34に記憶されたり、読み出された画像データがメモリカード28から読み出されて他の装置へ送信されたりする。また、メモリカード29に記憶された各種プログラムが、CPU31によって読み出されて実行されたりする。
【0069】
なお、ゲームプログラムは、メモリカード29等の外部記憶媒体を通じてコンピュータシステムに供給されるだけでなく、有線または無線の通信回線を通じてコンピュータシステムに供給されても良い。また、ゲームプログラムは、コンピュータシステム内部の不揮発性記憶装置に予め記録されていても良い。なお、ゲームプログラムを記憶する情報記憶媒体としては、上記不揮発性記憶装置に限らず、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体でも良い。
【0070】
無線通信モジュール38は、例えばIEEE802.11.b/gの規格に準拠した方式により、無線LANに接続する機能を有する。また、ローカル通信モジュール39は、所定の通信方式により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール38およびローカル通信モジュール39は、CPU31に接続される。CPU31は、無線通信モジュール38を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール39を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
【0071】
また、CPU31には、RTC40および電源回路41が接続される。RTC40は、時間をカウントしてCPU31に出力する。例えば、CPU31は、RTC40によって計時された時間に基づいて、現在時刻(日付)等を計算することもできる。電源回路41は、ゲーム装置1が有する電源(典型的には電池であり、下側ハウジング11に収納される)から供給される電力を制御し、ゲーム装置1の各部品に電力を供給する。
【0072】
また、ゲーム装置1は、マイク43およびアンプ44を備えている。マイク43およびアンプ44は、それぞれI/F回路42に接続される。マイク43は、ゲーム装置1に向かって発声されたユーザの音声を検知して、当該音声を示す音声信号をI/F回路42に出力する。アンプ44は、I/F回路42から音声信号を増幅してスピーカ(図示せず)から出力させる。I/F回路42は、CPU31に接続される。
【0073】
また、タッチパネル13は、I/F回路42に接続される。I/F回路42は、マイク43およびアンプ44(スピーカ)の制御を行う音声制御回路と、タッチパネル13の制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するA/D変換およびD/A変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル13からの信号に基づいて所定の形式のタッチ位置データ(後述する検出座標データ)を生成してCPU31に出力する。タッチ位置データは、タッチパネル13の入力面に対して入力が行われた位置としてタッチパネル13が検出した位置の座標を示すデータである。なお、タッチパネル制御回路は、タッチパネル13からの信号の読み込み、および、検出座標データの生成を所定時間に1回の割合で繰り返し行う。
【0074】
操作ボタン14は、上記各操作ボタン14A〜14Kから構成され、CPU31に接続される。操作ボタン14からCPU31へは、各操作ボタン14A〜14Kに対する入力状況(押下されたか否か)を示す操作データが出力される。CPU31は、操作ボタン14から操作データを取得することによって、操作ボタン14に対する入力に応じた処理を実行する。
【0075】
内側カメラ23および外側カメラ25は、それぞれCPU31に接続される。内側カメラ23および外側カメラ25は、CPU31の指示に応じて画像を撮像し、撮像した画像データをCPU31に出力する。本実施形態では、CPU31は、内側カメラ23および外側カメラ25のいずれか一方に対して撮像指示を行い、撮像指示を受けたカメラが画像を撮像して画像データをCPU31に送る。なお、内側カメラ23および外側カメラ25は動画の撮影も可能である。すなわち、内側カメラ23および外側カメラ25は、繰り返し撮像を行って撮像データをCPU31へ繰り返し送ることも可能である。
【0076】
第1GPU45には第1VRAM47が接続され、第2GPU46には第2VRAM48が接続される。第1GPU45は、CPU31からの指示に応じて、メインメモリ32に記憶されている表示画像を生成するためのデータに基づいて第1の表示画像を生成し、第1VRAM47に描画する。第2GPU46は、第1GPU45と同様に、CPU31からの指示に応じて第2の表示画像を生成し、第2VRAM48に描画する。第1VRAM47および第2VRAM48は、LCDコントローラ49に接続されている。
【0077】
LCDコントローラ49は、レジスタ491を含む。レジスタ491は、CPU31からの指示に応じて0または1の値を記憶する。LCDコントローラ49は、レジスタ491の値が0の場合は、第1VRAM47に描画された第1の表示画像を下側LCD12に出力し、第2VRAM48に描画された第2の表示画像を上側LCD22に出力する。また、レジスタ491の値が1の場合は、第1VRAM47に描画された第1の表示画像を上側LCD22に出力し、第2VRAM48に描画された第2の表示画像を下側LCD12に出力する。例えば、CPU31は、内側カメラ23および外側カメラ25のいずれかから取得した画像を下側LCD12に表示させ、所定の処理によって生成した操作説明画面を上側LCD22に表示させることも可能である。
【0078】
[ゲーム処理の概要]
次に、図3から図9を参照して、上記ゲームプログラムによって実行されるゲーム処理中において行われるゲーム処理について説明する。ゲームプログラムは、カメラによって撮像された現実空間の画像(撮像画像)に対して画像認識処理を行い、画像認識処理の結果に基づいて仮想空間の画像(仮想画像)を撮像画像に対して合成したゲーム画像を表示し、プレイヤにゲームをプレイさせるものである。
【0079】
図3は、ゲーム装置を使用する例を示す図である。本実施形態においては、図3に示すように、プレイヤ(ユーザ)は、所定の撮像対象としてのマーカ51を任意の場所(図3では机50の上)に設置しておき、ゲーム装置1を用いてマーカ51およびその周辺を撮像する。撮像に用いられるカメラは、内側カメラ23および外側カメラ25のいずれであっても良いが、ここでは、外側カメラ25を用いる場合を例として説明する。マーカ51は、本実施形態では所定の模様(図6参照)が描かれた薄板状のものが用いられる。
【0080】
図4は、ゲーム装置に表示されるゲーム画像の一例を示す図である。図4は、図3に示すように机50の上に置かれたマーカ51をゲーム装置1が撮像する場合に、ゲーム装置1の上側LCD22に表示されるゲーム画像を示す。なお、本実施形態ではゲーム画像が上側LCD22に表示されるものとするが、ゲーム画像は下側LCD12に表示されてもよい。図4に示すように、上側LCD22には、仮想空間における仮想オブジェクトの画像(仮想画像)として大砲52の画像が撮像画像に合成されて表示される。これによって、実際の机50の上に大砲52が存在するかのような画像を表示することができる。なお、図4では、仮想オブジェクトの一例として大砲52の画像が表示されるが、仮想オブジェクトはどのようなものであってもよい。このように、本実施形態においては、拡張現実感技術を用いて、仮想オブジェクトがあたかも現実空間に存在するかのようなゲーム画像が表示される。
【0081】
なお、撮像画像に対して仮想画像を合成した画像(合成画像)は、例えば次の処理によって生成することができる。すなわち、ゲーム装置1はまず、カメラによる撮像画像から、その中に含まれるマーカ51を認識する(画像)認識処理を実行する。ここでは、認識処理の処理結果として、撮像画像内におけるマーカ51の位置および向きを示す情報が算出される。マーカ51が認識された場合、ゲーム装置1は、認識処理の処理結果であるマーカ51の位置および向きから、ゲーム装置1(カメラ)とマーカ51との位置関係を算出する。さらに、ゲーム装置1は、位置関係に基づいて仮想空間における仮想カメラの位置および姿勢を算出する。仮想カメラの位置および姿勢は、仮想空間における仮想カメラと仮想オブジェクトとの位置関係が、現実空間におけるゲーム装置1とマーカ51との位置関係に一致するように算出される。仮想カメラの位置が決まると、ゲーム装置1は、仮想カメラの位置から仮想オブジェクトを見た仮想画像を生成し、撮像画像に対して仮想画像を合成する。以上の処理によって、ゲーム装置1は合成画像を生成して表示することができる。なお、上記位置関係から仮想カメラの位置を算出する処理は、従来の拡張現実感技術における処理と同様であってもよい。
【0082】
[画像認識処理の概要]
以上のように、本実施形態では、ゲーム装置1は撮像画像から認識処理によってマーカ51を検出する。認識処理においてマーカ51を正確に検出することができなければ、仮想画像を正確に生成することができず、撮像画像上の正しい位置に仮想画像を合成することができなくなってしまい、合成画像の現実味(リアルさ)が薄れてしまう。そこで、本実施形態では、マーカ51を正確にかつ効率良く検出するべく、ゲーム装置1は以下の認識処理を実行する。
【0083】
(複数種類の精度を用いた認識処理)
図5は、本実施形態における画像認識処理で用いられる対象領域を示す図である。本実施形態では、認識処理を行うべき撮像画像が取得されると、ゲーム装置1はまず、撮像画像のうちでマーカ51を含む領域(「対象領域」と呼ぶ)54を検出する処理(領域検出処理)を行う(図5に示す表の上欄参照)。この領域検出処理は、撮像画像全体の領域53に対して行われ、後述するマーカ検出処理よりも低い精度で行われる。ここで、「低い精度」とは、処理において画素値を参照する画素の間隔を相対的に大きくすることを意味する。例えば本実施形態では、ゲーム装置1は、撮像画像の画素3つ分の間隔で画素値を参照して(すなわち、画素を2つとばしで画素値を参照して)領域検出処理を行う。このように、対象領域54の検出処理は低い精度で行われるので、当該検出処理は比較的高速に行われる。
【0084】
上記対象領域54が検出されると、ゲーム装置1は、対象領域54の画像からマーカ51を検出する処理(マーカ検出処理)を行う。マーカ検出処理は、(撮像画像全体の領域53ではなく)対象領域54のみを対象として行われ、かつ、上記領域検出処理よりも高い精度で行われる(図5に示す下欄参照)。つまり、マーカ検出処理においては、参照される画素が領域検出処理よりも細かく、換言すれば、画素値を参照する画素の間隔が領域検出処理よりも小さい。具体的には、本実施形態では、ゲーム装置1は、撮像画像の画素1つ分の間隔で画素値を参照して(すなわち、全ての画素の画素値を参照して)領域検出処理を行う。このように、マーカ検出処理は高い精度で行われるので、検出結果として得られるマーカ51の位置および向きは精度良く算出される。また、マーカ検出処理は対象領域54のみに対して行われるので、ゲーム装置1は、撮像画像全体の領域53に対して処理が行われる場合に比べて高速に処理を行うことができる。
【0085】
以上のように、本実施形態では、ゲーム装置1は、まず対象領域54を検出する処理を行い、対象領域54に対してマーカ51の検出処理を行う。そのため、必要な領域(すなわち、対象領域)のみに対してマーカ51の検出処理を行うことができ、マーカ51の検出処理を短時間で行うことができる。また、対象領域54の検出処理は低い精度で行われるので、この検出処理も短時間で行うことができ、認識処理全体としても短時間で処理を行うことができる。さらに、マーカ51の検出処理は高精度で行われるので、認識結果として得られるマーカ51の位置および向きは高精度で算出することができる。つまり、本実施形態によれば、撮像画像からマーカ51を検出する認識処理を高速かつ精度良く行うことができる。
【0086】
なお、本実施形態においては、上記マーカ検出処理内においても、異なる精度で処理が行われる。すなわち、マーカ検出処理には複数の処理が含まれており、各処理は異なる精度で実行される。これら各処理の詳細について後述する。
【0087】
(内部図形の中心位置によってマーカを検出する認識処理)
また、本実施形態における認識処理では、複数の内部図形が描かれた図形を含むマーカ51を用いて、内部図形の中心位置を算出することでマーカ51の検出を行う。図6は、本実施形態において用いられるマーカを示す図である。図6に示すように、マーカ51は、第1図形55と第2図形57とを含む。第1図形55は、複数個(図6では8個)の白い円形の図形56が内部に描かれている。本実施形態では、この白い円形の図形56が内部図形である。また、本実施形態では、8つの内部図形56は、四角形(正方形)の4頂点と4辺の中点との位置に配置されている。なお、第1図形は内部に複数の図形(内部図形)が描かれたものであればどのようなものであってもよく、内部図形の位置、形状、大きさ、および色はどのようなものでもよい。また、第2図形57は図6では矢印を表す図形であるが、第2図形57はどのような図形であってもよい。
【0088】
なお、本実施形態では図6に示すマーカ51を用いるので、上述の領域検出処理においては、ゲーム装置1はマーカ51の第1図形55の領域を対象領域として検出する。そして、上述のマーカ検出処理においては第1図形55の検出を高精度で行うことでマーカ51の位置および向きを検出する。
【0089】
ここで、上記マーカ51の位置を検出するために、マーカ51の第1図形55の輪郭を検出する方法を考える。図7は、左右の輪郭がぼけた第1図形55の画像を示す図である。カメラによって撮像される撮像画像は、いわゆる手ブレ等の原因で画像にぶれが生じて、輪郭が不明確になることがある。例えば、画像の撮像時に左右にカメラ(ゲーム装置1)が動いてしまうと、図7に示すように、輪郭が左右にぼけて不明確になる。このように撮像画像にぶれが生じて輪郭が不明確になる場合には、上述の輪郭を検出する方法では、輪郭を正確に検出することが難しいため、図形の位置を正確に算出することができない。輪郭は、例えば画素間における画素値(輝度値あるいは色値等)の差に基づいて検出することができるが、撮像画像にぶれが生じる場合、検出される輪郭の位置は画像の内容や閾値等に応じて大きく変化してしまう。例えば図7に示す画像の例で言えば、図7に示す点線58が輪郭として検出される場合や、点線59が輪郭として検出されたりする場合がある。これらの場合、第1図形55の横方向に関する長さは正しく算出されず、第1図形55の位置を正確に算出することができない。このように、輪郭を検出して輪郭からマーカの位置を算出する方法では、撮像画像にぶれが生じている場合にマーカの位置を正確に算出することができないおそれがある。
【0090】
そこで、本実施形態における認識処理では、ゲーム装置1は、第1図形55の内部図形56を検出し、各内部図形56の中心位置を算出することによってマーカ51を検出する。図8は、第1図形55の一部における内部図形56の中心位置を示す図である。上述のマーカ検出処理において、ゲーム装置1は、内部図形56の領域(輪郭)を検出し、検出した領域の中心点Pを算出する(図8参照)。ここで、図8において、撮像画像にぶれが生じているために図8に示す白の点線が輪郭として検出された場合でも、図8に示す黒の点線が輪郭として検出された場合でも、中心点Pは同じ位置となる。
【0091】
図9は、第1図形55内の各内部図形56の中心点を示す図である。本実施形態においては、各内部図形56の中心点P1〜P8がそれぞれ算出される。ここで、第1図形55の左右方向の長さは、点P1から点P3までの長さ等によって表される。この長さは、図8に示す白の点線が輪郭として検出される場合でも、黒の点線が輪郭として検出される場合でも、同じになる。つまり、この長さは、撮像画像にぶれが生じている場合でも正確に算出することができる。
【0092】
詳細は後述するが、本実施形態では、ゲーム装置1は、各内部図形56の中心点P1〜P8からマーカ51の4点の位置を特定する。この4点の位置は、8個の内部図形56によって表される四角形(正方形)の4つの頂点の位置である。この4点の位置によって、マーカ51の位置および向きが特定される。ただし、上記4点の位置は正方形の各頂点であるため、マーカ51が90°、180°または270°回転した状態と回転しない状態とで同じ値となるので、上記4点の位置では、上下左右の4方向に関するマーカ51の向きを特定することができず、マーカ51の向きを一意に特定することができない。そのため、ゲーム装置1は、第2図形57を検出することによって、マーカ51の向きを一意に特定する。なお、第2図形57を用いてマーカ51の向きを特定する方法については後述する。
【0093】
以上のように、本実施形態では、マーカ検出処理において、ゲーム装置1は、各内部図形56の中心点P1〜P8を算出する。そして、中心点P1〜P8からマーカ51の4点の位置を特定することで、マーカ51の位置を算出する。ここで、上記中心点P1〜P8は、撮像画像にぶれが生じている場合でも正確に算出されるので、ゲーム装置1は、撮像画像にぶれが生じている場合でも、中心点P1〜P8を用いることによってマーカ51の位置を正確に算出することができる。
【0094】
[ゲーム処理の詳細]
次に、図10〜図15を参照して、ゲームプログラムによって実行されるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図10は、ゲームプログラムによる処理において用いられる各種データを示す図である。図10において、ゲーム装置1のメインメモリ32には、ゲームプログラム61、撮像画像データ62、およびゲーム処理データ63が記憶される。
【0095】
ゲームプログラム61は、後述するゲーム処理(図11)をゲーム装置1のCPU31に実行させるためのプログラムである。ゲームプログラム61は、メモリカード29からその一部または全部が適宜のタイミングで読み込まれることによってメインメモリ32に記憶される。ゲームプログラム61には、ゲームを進行させるためのプログラムの他、上述の画像認識処理を実行するためのプログラムが含まれる。
【0096】
撮像画像データ62は、カメラ(内側カメラ23または外側カメラ25)によって撮像された画像(撮像画像)を示すデータである。撮像画像データ62としては、カメラから取得された最新の画像データのみが記憶されてもよいし、新しいものから順にそれぞれ所定個数の画像データが記憶されてもよい。
【0097】
ゲーム処理データ63は、ゲーム処理において用いられる各種のデータである。ゲーム処理データ63には、対象領域データ64、輪郭データ65、内部領域データ66、中心位置データ67、頂点データ68、および認識結果データ69が含まれる。なお、ゲーム処理データ63には、上記の他、ゲームに登場する各種オブジェクト(上記大砲52等)に関するデータや、BGM等の音声データ等、ゲームに必要な各種データが記憶される。
【0098】
対象領域データ64は、上述した対象領域、すなわち、撮像画像内における上記第1図形55の領域を示すデータである。対象領域データ64は上述の領域検出処理によって得られる。なお、本実施形態では、領域検出処理においては、低い精度で検出処理が行われるので、実際には第1図形55でない領域も第1図形55の領域として検出される場合がある。そのため、領域検出処理においては複数の領域が対象領域として検出される場合がある。この場合、検出された領域毎の対象領域データ64がメインメモリ32に記憶される(つまり、複数の対象領域データが記憶される)。なお、対象領域データ64は、領域を示すものであればよく、領域の輪郭のみを示すものであってもよいし、領域に対応する各画素を示すものであってもよい。
【0099】
輪郭データ65は、撮像画像内における上記第1図形55の輪郭を示すデータである。輪郭データ65は、上記対象領域データ64と同様、第1図形55の領域を示すデータであるが、対象領域データ64よりも高精度で検出される点で異なる。
【0100】
内部領域データ66は、上記第1図形55内の内部図形56の領域を示すデータである。上述のように、第1図形55には複数個(8個)の内部図形56が含まれている。そのため、マーカ検出処理において8個の内部図形56が正しく検出されれば、8個の内部領域データ66がメインメモリ32に記憶される。ただし、実際には8個全ての内部図形56が検出されない場合もある。この場合、検出された内部図形56の個数と同数の内部領域データ66がメインメモリ32に記憶される。なお、内部領域データ66は、領域を示すものであればよく、領域の輪郭のみを示すものであってもよいし、領域に対応する各画素を示すものであってもよい。
【0101】
中心位置データ67は、各内部図形56の中心位置をそれぞれ示すデータである。中心位置データ67は、マーカ検出処理において検出された内部図形56の数と同数の中心位置を示す。
【0102】
頂点データ68は、8個の内部図形56によって表される四角形(正方形)の4つの頂点の位置を示すデータである。詳細は後述するが、4つの頂点は、8つの内部図形56の各中心位置に基づいて算出される。
【0103】
認識結果データ69は、認識処理の結果として出力される、マーカ51の位置および向きを示すデータである。詳細は後述するが、マーカ51の位置および向きは、上記頂点データ68が示す4つの頂点と、撮像画像における第1図形55に対する第2図形57の向きとに基づいて算出される。
【0104】
次に、ゲーム装置1において行われるゲーム処理の詳細を、図11〜図16を用いて説明する。図11は、ゲーム装置1において実行されるゲーム処理の流れを示すメインフローチャートである。電源ボタン14Fが押下されることによってゲーム装置1の電源が投入されると、ゲーム装置1のCPU31は、各種アプリケーションの起動を指示するためのメニュー画面(例えば、各アプリケーションを表す画像(アイコン)を含む画像)を表示する。ユーザは、メニュー画面においてゲームプログラム61を起動する指示、例えば、ゲームプログラム61のアイコンを選択する指示を行う。メニュー画面において、ゲームプログラム61の起動が指示されると、CPU31は、メインメモリ32等の初期化を行った後、図11に示す処理を行うためのゲームプログラム61の実行を開始する。本実施形態においては、ゲームプログラム61の実行によって、CPU31が請求項に記載の各手段として機能することとなる。つまり、ゲームプログラム61は、請求項に記載の各手段としてCPU31を機能させる。
【0105】
まずステップS1において、CPU31は、撮像画像が取得されたか否かを判定する。すなわち、カメラ(本実施形態では外側カメラ25)から撮像画像のデータが送られてきたか否かを判定する。また、撮像画像のデータがカメラから送られてきた場合、CPU31は、当該データを撮像画像データ62としてメインメモリ32に記憶する。なお、本実施形態においては、ステップS1〜S7の処理ループは、1フレーム時間(1/60秒)に1回の割合で実行されるのに対して、カメラはそれよりも少ない頻度(数フレーム時間に1回程度)で撮像画像を送るものとする。ただし、他の実施形態においては、1フレーム時間(または1フレーム時間より短い時間)に1回の割合で撮像画像が取得されてもよい。ステップS1の判定結果が肯定である場合、ステップS2の処理が実行される。一方、ステップS1の判定結果が否定である場合、ステップS2からS4の処理がスキップされて後述するステップS5の処理が実行される。
【0106】
ステップS2において、CPU31は、ステップS1で取得された撮像画像に対する認識処理を実行する。認識処理においては、撮像画像内にマーカ51の画像が含まれるか否かが判定され、マーカ51の画像が含まれる場合には撮像画像内におけるマーカ51の向きおよび位置が算出される。以下、図12を参照して、認識処理の詳細を説明する。
【0107】
図12は、図11に示す認識処理(ステップS2)の流れを示すフローチャートである。認識処理においては、まずステップS11において、CPU31は、上述の領域検出処理を実行する、すなわち、第1図形55を含む領域(対象領域)を検出する。上述のように、ステップS11の領域検出処理は低い精度で行われる。具体的には、CPU31は、撮像画像において画素3つ分の間隔で得られる画素値に基づいて、当該撮像画像から対象領域を検出する。より具体的には、CPU31は、撮像画像データ62をメインメモリ32から読み出し、画像データが示す各画素の各画素値から、画素3つ分の間隔で画素値を抽出する。そして、抽出した画素値に基づいて対象領域を検出する。図13は、撮像画像においてステップS11の処理において画素値が参照される画素を示す図である。図13においては、斜線で示される画素が、画素値が参照される画素である。
【0108】
また、本実施形態では、隣接する画素の画素値(本実施形態では輝度値。ただし、色値でもよい)の差を用いて対象領域が検出される。すなわち、本実施形態では、黒色の第1図形55の周囲には白い枠が形成される(図6参照)ので、隣接する画素よりも輝度値が所定値以上低い画素を検出することで、第1図形55の輪郭部分の画素を検出することができる。なお、上記「隣接する画素」とは、画素値が参照される各画素の間で隣接する画素である。図13の例で言えば、斜線で示されるある画素と、画素3つ分離れた位置の(斜線で示される)画素とが、上記「隣接する画素」である。輪郭部分の画素を検出した後、CPU31は、検出された画素のうちで隣接する画素同士を1つの集合とすることで、1つの対象領域を特定する。特定された対象領域を形成する各画素を示すデータは、対象領域毎に1つの対象領域データ64としてメインメモリ32に記憶される。なお、特定された対象領域が大きすぎたり小さすぎたりする場合には、CPU31は当該対象領域を除外し、当該対象領域を示す対象領域データ64を記憶しないようにしてもよい。上記ステップS11の次にステップS12の処理が実行される。
【0109】
なお、上記ステップS11における対象領域の検出方法はどのような方法であってもよい。例えば他の実施形態においては、CPU31は、画素値を所定の閾値で2値化することによって第1図形55の輪郭を検出し、検出された輪郭内の領域を対象領域としてもよい。また、他の実施形態においては、CPU31は、パターンマッチングの手法によって対象領域を検出してもよい。すなわち、第1図形55のパターン画像を予めメインメモリ32に記憶しておき、撮像画像の領域内から当該パターン画像と一致(類似)する領域を検出することによって、対象領域を検出してもよい。この場合、パターンマッチングの処理は、従来の拡張現実感技術における処理と同様であってもよい。
【0110】
また、本実施形態では、上記ステップS11ではCPU31は第1図形55の領域を対象領域として検出したが、他の実施形態においては、第1図形55および第2図形57を含むマーカ51の領域を対象領域として検出するようにしてもよい。
【0111】
また、本実施形態では、上述のように低い精度で対象領域の検出が行われ、対象領域の検出処理では、マーカ51の第1図形55とその周囲の白枠との輝度差を用いている。そのため、マーカ51の白枠が細すぎると低い精度では撮像画像において白枠が現れず、対象領域を正確に検出することができなくなるおそれがある。したがって、マーカ51の白枠は、低い精度でも撮像画像上に現れるように、ある程度の太さに設定されることが好ましい。なお、白枠の太さは、ゲーム装置1の使用時におけるカメラからマーカ51までの距離として想定される距離の範囲や、撮像画像の解像度や、マーカ51の大きさ等に応じて適宜決められる。
【0112】
ステップS12において、CPU31は、ステップS11で対象領域が検出されたか否かを判定する。ステップS11において対象領域が検出されなかった場合、ステップS13の処理が実行される。一方、ステップS11において対象領域が1つ以上検出された場合、ステップS14の処理が実行される。
【0113】
ステップS13において、CPU31は、マーカ51の認識が失敗したと判断する。すなわち、CPU31は、認識失敗を示すデータを認識結果データ69としてメインメモリ32に記憶する。ステップS13の後、CPU31は認識処理を終了する。
【0114】
ステップS14において、CPU31は、ステップS11で検出された対象領域のうち1つを選択する。なお、ステップS11で複数の対象領域が検出される場合、ステップS14〜S16の処理ステップが繰り返し実行される。この場合、ステップS14においては、当該処理ステップにおいてまだ選択されていない対象領域が選択される。ステップS14の次にステップS15の処理が実行される。
【0115】
ステップS15において、CPU31は、ステップS14で選択された対象領域に対してマーカ検出処理を実行する。マーカ検出処理は、対象領域からマーカ51を検出し、マーカ51の位置および向きを算出する処理である。以下、図14を参照して、マーカ検出処理の詳細を説明する。
【0116】
図14は、図12に示すマーカ検出処理(ステップS15)の流れを示すフローチャートである。マーカ検出処理においては、まずステップS21において、CPU31は、中程度の精度で第1図形55の輪郭を抽出する。ここで、「中程度の精度」とは、上記ステップS11の処理における精度よりは高く、後述するステップS23およびS25の処理における精度よりは低いという意味である。つまり、本実施形態では、マーカ検出処理において、2段階の精度で処理が行われ、ステップS21の処理は低い方の精度で行われる。以下、ステップS21の処理の詳細を説明する。
【0117】
上記ステップS21の処理は、ステップS11で検出された対象領域内を処理対象とするが、上記ステップS11の処理とステップS21の処理とでは処理を行う精度が異なる。そこで、ステップS21においては、CPU31はまず、ステップS11で検出された対象領域に対応する、ステップS21の処理対象となる領域を決定する。すなわち、ステップS11で得られる対象領域データ64により示される各画素から、ステップS21の処理対象となる領域を決定する。より具体的には、CPU31は、低精度の処理(ステップS11)で参照される画素(図13に示す斜線の画素)と、その周囲8つの画素(図13に示す一点鎖線で囲まれる画素)とを関連付けておく。そして、ステップS11で検出された対象領域内の画素と、当該画素に対応する周囲8つの画素とからなる領域を、ステップS21の処理対象の領域とする。図15は、ステップS21の処理対象となる領域の一例を示す図である。図15においては、ステップS11で画素Q1〜Q3が検出され、画素Q1〜Q3よりも右側の領域が対象領域として検出された場合を想定する。この場合、図15に示す一点鎖線よりも右の領域A1がステップS21の処理対象の領域となる。
【0118】
処理対象となる領域が決定されると、CPU31は、中程度の精度で第1図形55の輪郭を抽出する。本実施形態では、この輪郭の抽出処理は、撮像画像における各画素の画素値のうち、画素2つ分の間隔で得られる画素値に基づいて行われる。図16は、撮像画像においてステップS21の処理において画素値が参照される画素を示す図である。例えば図15に示す領域A1がステップS21の処理対象の領域となる場合、図16に示す斜線で示される画素が、輪郭の抽出処理において画素値が参照される画素である。
【0119】
なお、ステップS21における輪郭の抽出処理は、上記ステップS11における対象領域の検出方法と同様、輝度値の差を用いた方法で行われてもよいし、それ以外の方法で行われてもよい。ステップS21で抽出された輪郭を形成する各画素のデータは、輪郭データ65としてメインメモリ32に記憶される。ステップS21の次にステップS22の処理が実行される。
【0120】
ステップS22において、CPU31は、ステップS21で抽出された輪郭が第1図形55を表すか否かを判定する。本実施形態では、ステップS22の判定は、CPU31は上記輪郭が四角形を表すか否かによって行われる。すなわち、CPU31は、輪郭データ65をメインメモリ32から読み出し、上記輪郭を形成する各画素を直線で近似することによって、当該各画素で形成される多角形を算出する。そして、算出された多角形が四角形となるか否かによって、上記輪郭が第1図形55を表すか否かを判定する。ステップS22の判定結果が肯定となる場合、ステップS23の処理が実行される。一方、ステップS22の判定結果が否定となる場合、後述するステップS30の処理が実行される。
【0121】
なお、上記ステップS22では、抽出された輪郭が第1図形55を表すか否かの判定は、当該輪郭が四角形となるか否かによって行われたが、他の方法によって行われてもよい。例えば、他の実施形態において、マーカ51の大きさが既知である場合には、上記の判定は、抽出された輪郭の大きさ(面積や周の長さ)が所定値以上であるか否か等によって行われてもよい。
【0122】
ステップS23において、CPU31は、高精度で内部図形56の領域を検出する。ここで、「高精度」とは、上記ステップS11の処理およびステップS21の処理における精度より高いという意味である。本実施形態では、CPU31は、画素1つ分の間隔で画素値を参照して、つまり、ステップS23の処理対象となる領域内の全画素の画素値を参照して、内部図形56の領域を検出する。
【0123】
ステップS23の処理対象となる領域は、ステップS21で抽出された輪郭が表す領域内を対象として行われるが、上記ステップS21の処理とステップS23の処理とでは処理を行う精度が異なる。そこで、ステップS23においては、ステップS21と同様、処理対象となる領域を決定する必要がある。この処理対象となる領域の決定は、ステップS21と同様の方法で行うことができる。すなわち、CPU31は、中精度の処理(ステップS21)で参照され得る基準画素と、それに対応する3つの画素(例えば、基準画素の右、下、および右下の画素)とを関連付けておく。そして、ステップS21で抽出された輪郭内に含まれる基準画素と、当該基準画素に対応する3つの画素とをステップS23の処理対象とする。
【0124】
処理対象となる領域が決定されると、CPU31は、高精度で内部図形56の領域を検出する。ここで、内部図形56の領域の検出は、上記ステップS11における対象領域の検出方法と同様、輝度値の差を用いた方法で行われてもよいし、それ以外の方法で行われてもよい。なお、ステップS23で検出すべき内部図形56は白色でその周囲が黒色であるので、輝度値の差を用いる方法を採用する場合には、CPU31は、隣接する画素よりも輝度値が所定値以上高い画素を検出することが好ましい。また、本実施形態では、CPU31は、内部図形56の領域を表す情報として、内部図形56の輪郭を表す(複数の)画素を検出するものとする。ステップS23で検出された内部図形56の領域を示す各画素のデータは、内部領域データ66としてメインメモリ32に記憶される。また、ステップS23において複数の内部図形56が検出される場合は、1つの内部図形につき1つの内部領域データ66がメインメモリ32に記憶される。以上のステップS23の次にステップS24の処理が実行される。
【0125】
なお、他の実施形態においては、上記ステップS23において、CPU31は、検出された領域の形状および/または大きさに関して条件を設定しておき、条件を満たさない領域を除外するようにしてもよい。すなわち、CPU31は、輝度差を用いて検出された領域のうち、形状が円形でない領域、および、大きさが所定の範囲以内でない領域については、内部領域データ66を記憶しないようにしてもよい。
【0126】
ステップS24において、CPU31は、ステップS23で所定個数の領域が検出されたか否かを判定する。ここで、所定個数とは、第1図形55内に描かれた内部図形56の数、すなわち8個である。具体的には、CPU31は、メインメモリ32に記憶された内部領域データ66の数が8個であるか否かを判定する。ステップS24の判定結果が肯定となる場合、ステップS25の処理が実行される。一方、ステップS24の判定結果が否定となる場合、後述するステップS30の処理が実行される。
【0127】
ステップS25において、CPU31は、内部図形56の中心位置を高精度で算出する。内部図形56の中心位置は、ステップS23で検出された領域、すなわち、内部図形56の輪郭を表す各画素に基づいて算出される。中心位置の具体的な算出方法はどのような方法であってもよく、例えば、内部図形56の輪郭を表す各画素の位置座標の平均値を算出することで中心位置を得ることができる。本実施形態においては、CPU31は、内部領域データ66をメインメモリ32から読み出し、内部領域データ66が示す各画素の平均値を算出する。なお、内部領域データ66は8個記憶されているので、各データ毎に平均値を算出する処理が行われる。算出された8種類の平均値を示すデータは、中心位置データ67としてメインメモリ32に記憶される。ステップS25の次にステップS26の処理が実行される。
【0128】
ステップS26において、CPU31は、ステップS25で算出された中心位置から、マーカ51の位置を表す4つの頂点の位置を算出する。ここで、4つの頂点とは、8つの内部図形56が頂点および辺の中点となる四角形の頂点である。以下、図17および図18を参照して、4つの頂点の算出方法を説明する。
【0129】
図17は、第1図形を表す撮像画像の一例を示す図である。図17において、点P1〜P8は、8つの内部図形56の中心位置として上記ステップS26で算出された位置を表す点である。ステップS26においては、CPU31は、まず、8つの中心位置のうち3つを通る4本の直線L1〜L4を算出する。具体的には、CPU31は、点P1〜P3を通る直線L1と、点P1,P4,およびP6を通る直線L2と、点P6〜P8を通る直線L3と、点P3,P5,およびP8を通る直線L4とを算出する。各直線L1〜L4は、最小二乗法等を用いて3点を通る近似直線としてそれぞれ算出することができる。
【0130】
図18は、図17に示す各直線L1〜L4によって算出される4つの頂点P11〜P14を示す図である。各直線L1〜L4が算出されると、CPU31は、各直線L1〜L4によって形成される四角形の頂点P11〜P14を算出する。すなわち、CPU31は、直線L1と直線L2との交点P11、直線L1と直線L4との交点P12、直線L2と直線L3との交点P13、および、直線L3と直線L4との交点P14をそれぞれ算出する。以上によって、4つの頂点P11〜P14を算出することができる。算出された4つの頂点の位置を示すデータは、頂点データ68としてメインメモリ32に記憶される。ステップS26の次にステップS27の処理が実行される。
【0131】
上記ステップS26で4つの頂点を算出することによって、マーカ51内の4点の位置を算出できたことになる。ここで、マーカ51内の4点の位置によって、マーカ51の位置および向きを算出することができる。ただし、上記4点の位置は正方形の各頂点であり、マーカ51が90°、180°または270°回転した状態と回転しない状態とで同じ値となる。そのため、上記4点の位置では、上下左右の4方向に関するマーカ51の向きを特定することができず、マーカ51の向きを一意に特定することができない。そこで、CPU31は、下記ステップS27〜S29の処理によって、上下左右の4方向に関するマーカ51の向きを特定し、マーカ51の向きを一意に特定する。なお、マーカ51の上下左右の4方向のうちどの方向から撮像するかが予め決まっている(既知である)場合や、上下左右の4方向に関するマーカ51の向きを意識しない場合(マーカ51が90°、180°または270°回転した状態と回転しない状態とを同じ状態とみなす場合)には、CPU31は、下記ステップS27〜S29の処理を省略し、上記4点の位置を認識結果として用いてもよい。
【0132】
ステップS27において、CPU31は、第1図形55の周囲の領域から第2図形57を検出する。本実施形態においては、CPU31は、ステップS26で算出された4つの頂点で形成される四角形を基準として、当該四角形の上下左右の4方向に位置する4つの所定領域内から第2図形57を検出する。第2図形57は第1図形55の隣に位置しており(図6参照)、4つの頂点によって第1図形55の位置が特定されているので、上記4つの所定領域について検出処理を行えば、第2図形57を検出することができるからである。
【0133】
図19は、ステップS27で設定される所定領域の一例を示す図である。図19においては、直線L5〜L8で囲まれる領域αが上記所定領域である。所定領域αは、4つの頂点P11〜P14で形成される四角形の4辺のうち、辺P11−P12の側に設定される所定領域である。また、直線L5〜L8は、それぞれ、4つの頂点P11〜P14で形成される四角形に対して所定領域αが位置する側を上方向とした場合における所定領域αの下辺、上辺、右辺、および左辺である。所定領域αの4辺である直線L5〜L8は、例えば次のように設定することができる。下辺である直線L5は、直線L1に平行で、直線L1に垂直な方向に直線L1から所定の第1距離だけ離れた位置に設定される。また、上辺である直線L6は、直線L1に平行で、直線L1に垂直な方向に直線L1から所定の第2距離(第1距離よりも大きい)だけ離れた位置に設定される。また、右辺である直線L7は、頂点P11〜P14で形成される四角形の右辺である直線L4に平行で、直線L1の方向に関して直線L4から所定の第3距離だけ離れた位置に設定される。左辺である直線L8は、頂点P11〜P14で形成される四角形の左辺である直線L2に平行で、直線L1の方向に関して直線L2から所定の第4距離だけ離れた位置に設定される。以上のようにして、所定領域αを算出することができる。また、他の3つの所定領域についても所定領域αと同様に算出することができる。
【0134】
上記4つの所定領域内から第2図形57を検出する方法はどのような方法であってもよいが、本実施形態においては、パターンマッチングの手法によって第2図形57を検出する。すなわち、第2図形57のパターン画像を予めメインメモリ32に記憶しておき、CPU31は、各所定領域内から当該パターン画像と一致(類似)する領域を検出することによって第2図形57を検出する。また、第2図形57を検出する処理の精度は、どのような精度で行われてもよい。なお、この処理は、処理対象となる範囲を上記所定領域に絞って行うことができるので、必ずしも高い精度で行う必要はない。
【0135】
上記ステップS27の具体的な処理としては、CPU31はまず、頂点データ68をメインメモリ32から読み出して、上記4つの頂点に基づいて上記4つの所定領域を特定する。次に、第2図形57のパターン画像をメインメモリ32から読み出して、特定した4つの所定領域内から、当該パターン画像と一致する部分を検出する。ステップS27の処理の次にステップS28の処理が実行される。
【0136】
ステップS28において、CPU31は、上記ステップS27において第2図形57が検出されたか否かを判定する。すなわち、上記4つの所定領域のうちに、第2図形57が検出された領域があったか否かを判定する。ステップS28の判定結果が肯定となる場合、ステップS29の処理が実行される。一方、ステップS28の判定結果が否定となる場合、後述するステップS30の処理が実行される。
【0137】
ステップS29において、CPU31は、(上下左右の4方向に関する)マーカ51の向きを特定する。ここで、上記4つの頂点で形成される四角形から見て、第2図形57が検出された所定領域がある方向(当該四角形から見て所定領域がどちらの方向にあるか)がわかれば、撮像画像内において第1図形55に対して第2図形57が配置される方向がわかったことになるので、マーカ51の向きを特定することができる。つまり、ステップS29においては、撮像画像内において第1図形55に対して第2図形57が配置される方向に応じてマーカ51の向きが特定される。
【0138】
なお、本実施形態においては、上記4つの頂点を結ぶ2つのベクトルV1およびV2によってマーカ51の位置および向きを表すものとする。具体的には、ベクトルV1は、第1図形55に対して第2図形57が配置される方向を上方向とした場合において、左上の頂点を始点とし、右上の頂点を終点とするベクトルとする。また、ベクトルV2は、上記の場合において、左下の頂点を始点とし、右下の頂点を終点とするベクトルとする。上記のようにベクトルV1およびV2を想定した場合において、第2図形57が検出された所定領域が、例えば図19に示す直線L1の側に位置する場合、図19に示す直線L1が上記4つの頂点で形成される四角形の上辺となる。したがって、この場合、ベクトルV1は、点P11を始点とし点P12を終点とするベクトルとして算出され、ベクトルV2は、点P13を始点とし点P14を終点とするベクトルV2として算出される。これらベクトルV1およびV2によって、マーカ51の位置および向きを表すことができる。
【0139】
上記ステップS29においては、CPU31は、上記4つの頂点で形成される四角形に対する第2図形57が検出された所定領域の方向に応じた向きとなるように、当該4つの頂点を用いてベクトルV1およびV2を算出する。算出された各ベクトルV1およびV2を示すデータはメインメモリ32に記憶される。以上のステップS29の後、CPU31はマーカ検出処理を終了する。
【0140】
一方、ステップS30において、CPU31は、今回のマーカ検出処理の処理対象である対象領域には第1図形55が無いと判断する。この場合、今回のマーカ検出処理におけるステップS21〜S28で算出された各種データ65〜68はメインメモリ32から削除される。ステップS30の後、CPU31はマーカ検出処理を終了する。
【0141】
上記マーカ検出処理によれば、CPU31は、対象領域の画像から複数の内部図形をそれぞれ検出し(ステップS23)、各内部図形の中心位置をそれぞれ算出することによってマーカ51を検出する(ステップS25およびS26)。このように、内部図形の中心位置を用いることによって、撮像画像にぶれが生じている場合でもマーカ51の位置を正確に算出することができる。
【0142】
また、上記ステップS21〜S23の一連の処理によれば、対象領域内から第1図形55の輪郭が抽出され(ステップS21)、抽出された輪郭が第1図形55を表すか否かが判定される(ステップS22)。そして、抽出された輪郭が第1図形55を表す場合に、当該輪郭に対応する領域内から複数の内部図形56が検出される(ステップS23)。つまり、第1図形55を表すと判定される輪郭に対応する領域内から内部図形56が検出される。これによれば、内部図形56を検出する処理の前に、第1図形55を含まない対象領域を除くことができるので、内部図形56を検出する処理を無駄に行うことを防止することができ、認識処理を効率良く行うことができる。さらに、本実施形態によれば、輪郭の抽出処理は、内部図形56を検出する処理よりも高速に行うことができるので、ゲーム装置1は、認識処理をより短時間で行うことができる。
【0143】
また、上記ステップS23〜S25の一連の処理によれば、対象領域において複数の内部図形56の領域がそれぞれ検出され(ステップS23)、検出された領域の個数が所定個数であるか否かが判定される(ステップS24)。そして、検出された領域の個数が所定個数である場合、当該領域の中心位置が算出される(ステップS25)。つまり、所定個数の領域が検出された対象領域について、内部図形56の中心位置が算出される。これによれば、内部図形56の中心位置を算出する処理の前に、第1図形55を含まない対象領域を除くことができるので、中心位置を算出する処理を無駄に行うことを防止することができ、認識処理を効率良く行うことができる。
【0144】
また、上記マーカ検出処理においては、内部図形56の検出処理(ステップS23)を行う精度と、内部図形56の中心位置の算出処理(ステップS25)を行う精度とは同じであった。ここで、他の実施形態においては、CPU31は、内部図形56の中心位置の算出処理を行う精度よりも低い精度で内部図形56の検出処理を行うようにしてもよい。つまり、内部図形56の検出処理に用いられる画素値の間隔を、中心位置の算出処理において用いられる画素値の間隔よりも大きくしてもよい。これによれば、内部図形56の検出処理をより高速に行うことができ、認識処理をより高速に行うことができる。なお、このとき、内部図形56の検出処理は、第1図形55の輪郭の抽出処理(ステップS21)と同じ精度で行われてもよいし、当該抽出処理よりも高い精度で行われてもよい。
【0145】
図12の説明に戻り、ステップS15のマーカ検出処理の次にステップS16の処理が実行される。ステップS16において、CPU31は、ステップS11で検出された全ての対象領域についてマーカ検出処理を行ったか否かを判定する。ステップS16の判定結果が肯定となる場合、ステップS17の処理が実行される。一方、ステップS16の判定結果が否定となる場合、上記ステップS14の処理が再度実行される。以降、ステップS16において全ての対象領域についてマーカ検出処理を行ったと判定されるまで、ステップS14〜S16の処理が繰り返し行われる。これによって、ステップS11で検出された各対象領域についてマーカ検出処理を行われる。
【0146】
ステップS17において、CPU31は、上記ステップS15のマーカ検出処理においてマーカ51が検出されたか否かを判定する。具体的には、CPU31は、メインメモリ32に認識結果データ69が記憶されているか否かによってマーカ51が検出されたか否かを判定する。ステップS17の判定結果が肯定となる場合、ステップS18の処理が実行される。一方、ステップS17の判定結果が否定となる場合、上記ステップS13の処理が再度実行される。つまり、ステップS17の判定結果が否定となる場合、マーカ51の認識が失敗したと判断され、認識処理が終了する。
【0147】
ステップS18において、CPU31は、ステップS15のマーカ検出処理で得られたマーカ51の位置および向きを示す情報を認識結果として記憶する。すなわち、マーカ検出処理のステップS29で算出されたベクトルV1およびV2を示すデータを、認識結果データ69としてメインメモリ32に記憶する。ステップS18の後、CPU31は認識処理を終了する。
【0148】
なお、1つの撮像画像からステップS11で検出される複数の対象領域に対して、マーカ検出処理によってベクトルV1およびV2が算出される可能性がある。つまり、1回の認識処理において、ベクトルV1およびV2の組がメインメモリ32に複数組記憶される場合がある。この場合、いずれか1組が正しいマーカ51を表し、他の組は誤検出によって算出されたものである。したがって、上記の場合、CPU31は、マーカ検出処理において得られた各図形(第1図形55、内部図形56、第2図形57)の形状および配置等に基づいて、正しいマーカ51を表すベクトルV1およびV2を選出するようにしてもよい。例えば、ステップS21で抽出される第1図形55の輪郭や、ステップS23で検出される各内部図形56の配置や、ステップS27で検出される第2図形57の、パターン画像に対する類似度等に基づいて、正しいベクトルV1およびV2を選出することができる。CPU31は、選出されたベクトルV1およびV2を示すデータを認識結果データ69としてメインメモリに記憶する。これによって、認識処理において(誤検知によって)複数組のベクトルV1およびV2が得られた場合でも、正しい認識結果を得ることができる。なお、他の実施形態においては、1回の認識処理において複数組のベクトルV1およびV2が得られた場合には、CPU31は、認識が失敗したと判断するようにしてもよい。
【0149】
上記認識処理によれば、撮像画像において第1の間隔(画素3つ分の間隔)で得られる画素値に基づいて、対象領域を検出する処理が行われる(ステップS11)。そして、対象領域内の撮像画像において第1の間隔よりも小さい第2の間隔(画素1つまたは2つ分の間隔)で得られる画素値に基づいて、当該対象領域の画像から第1図形55を検出する処理が行われる。これによれば、対象領域を検出する処理を短時間で行うことによって、認識処理を高速に行うことができる。また、第1図形55の検出処理は高精度で行われるので、第1図形55を高精度で正確に検出することができる。つまり、上記認識処理によれば、撮像画像から第1図形55を検出する処理を高速かつ精度良く行うことができる。
【0150】
なお、本実施形態では、ステップS2の認識処理が1フレーム時間内に実行され、ステップS1〜S7の処理ループ内で認識処理が完了されるものとした。ここで、撮像画像の解像度やCPU31等の処理能力によっては、1回の認識処理が1フレーム時間で完了することが困難な場合もある。そのため、他の実施形態においては、認識処理は、1フレーム時間を周期として実行される表示処理(ステップS5)等の処理とは必ずしも同じ周期で実行されなくてもよい。つまり、1回のステップS2の処理では、認識処理全体のうちの一部の処理だけが実行されてもよい。この場合、1回のステップS2で実行される処理は、ステップS1〜S7の一連の処理が1フレーム時間内に完了することができるような処理量に調整される。換言すれば、認識処理は、ステップS1〜S7(S2を除く)の処理ループとは別に並列的に実行され、CPU31がアイドル状態のときに実行されてもよい。
【0151】
図11の説明に戻り、ステップS2の認識処理の次にステップS3の処理が実行される。ステップS3において、CPU31は、ステップS2の認識処理が成功したか否かを判定する。ステップS3の判定は、メインメモリ32に記憶されている認識結果データ69がマーカ51の位置および向きを示すか否かによって行うことができる。ステップS3の判定結果が肯定となる場合、ステップS4の処理が実行される。一方、ステップS3の判定結果が否定となる場合、ステップS4の処理がスキップされて後述するステップS5の処理が実行される。
【0152】
ステップS4において、CPU31は、ステップS2の認識結果に基づいて、仮想カメラの位置および姿勢を算出する。仮想カメラは、仮想空間の画像を生成する場合における視点、視線方向、および視野角を定めるために仮想空間に設定されるものである。ステップS4においては、CPU31は、まず、ステップS2の認識結果であるマーカ51の位置および向きから、ゲーム装置1(カメラ)とマーカ51との位置関係を算出する。この位置関係は、例えば、ゲーム装置1およびマーカ51の一方を基準としたときの他方の3次元の位置および姿勢として表される。次に、CPU31は、上記位置関係に基づいて仮想空間における仮想カメラの位置および姿勢を算出する。仮想カメラの位置および姿勢は、仮想空間における仮想カメラと、仮想空間におけるマーカ51に対応する位置との位置関係が、現実空間におけるゲーム装置1とマーカ51との位置関係に一致するように算出される。なお、ステップS4における処理は、例えば上述の非特許文献1に記載されているような従来の拡張現実感技術で用いられる処理と同様の方法であってもよい。また、上記ステップS2における認識処理が失敗であった場合、CPU31は、仮想カメラの位置および姿勢の算出を行わず、認識処理が最後に成功した時に算出された仮想カメラの位置および姿勢を用いる。ステップS4の次にステップS5の処理が実行される。
【0153】
ステップS5において、CPU31はゲーム制御処理を実行する。ゲーム制御処理は、ユーザ(プレイヤ)の入力等に応じて仮想空間内のオブジェクトを動作させること等によってゲームを進行させる処理である。具体的には、ゲーム制御処理には、ユーザの入力に従ってプレイヤキャラクタの動作を制御したり、ゲームプログラム61において定められた制御ルールに従ってオブジェクト(図4に示す大砲52等)の動作を制御したりする処理が含まれる。また、CPU31は、ゲーム装置1に設けられた各種入力装置(タッチパネル13、各操作ボタン14A〜14L)に対する操作結果の他、上記認識結果データ69をゲーム入力として用いてもよい。例えば、認識結果データ69から算出される仮想カメラの位置がプレイヤキャラクタの位置として用いられてもよい。ステップS5の次にステップS6の処理が実行される。
【0154】
ステップS6において、CPU31は、撮像画像と仮想空間における仮想オブジェクトの画像(仮想画像)とを合成した合成画像を生成して表示装置(上側LCD22)に表示する。すなわち、CPU31は、まず、ステップS4で設定された仮想カメラの位置および姿勢に基づいて仮想画像を生成する。これによって、仮想カメラの位置から見た仮想オブジェクトの画像が生成される。次に、CPU31は、生成された仮想オブジェクトの画像を撮像画像に対して合成し、合成画像を生成・表示する。なお、合成画像の生成に用いられる撮像画像は、取得された最新の撮像画像でもよいし、認識処理が成功であった最新の撮像画像でもよい。なお、合成画像の生成処理は、従来における拡張現実感技術と同様の処理であってもよい。ステップS6の次にステップS7の処理が実行される。
【0155】
ステップS7において、CPU31は、ゲームを終了するか否かを判定する。ステップS7の判定は、例えば、ゲームがクリアされたか否か、ゲームオーバーとなったか否か、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS7の判定結果が否定である場合、ステップS1の処理が再度実行される。以降、ステップS7でゲームを終了すると判定されるまで、ステップS1〜S7の処理ループが繰り返し実行される。一方、ステップS7の判定結果が肯定である場合、CPU31は、図11に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【0156】
上記ゲーム処理によれば、撮像画像から第1図形55の領域を検出する対象検出処理(ステップS11)と、検出した領域から第1図形55を含むマーカ51を検出するマーカ検出処理(ステップS15)とで、処理の精度を変えることによって、認識処理を高速かつ精度良く行うことができる。また、第1図形55内の内部図形56の中心位置を算出し、中心位置に基づいてマーカ51上の位置(4つの頂点)を算出することによって、撮像画像にぶれが生じている場合でも、マーカ51の位置を正確に算出することができる。
【0157】
なお、上記ステップS3〜S6の一連の処理によれば、マーカ51が検出された場合(ステップS3でYesの場合)、マーカ51と外側カメラ25との位置関係が、認識処理における処理結果(マーカ51の検出結果)に基づいて算出される(ステップS4)。そして、仮想空間に配置される仮想オブジェクトを表す仮想画像が上記位置関係に基づいて生成され、撮像画像に対して仮想画像を合成した画像が表示装置に表示される(ステップS5)。このように、本実施形態では、いわゆる拡張現実感技術において、上述の認識処理を用いることができる。ここで、本実施形態のように拡張現実感技術を用いる場合には、認識処理においてマーカ51の位置および向きを正確に算出することが好ましい。また、本実施形態のようなゲーム処理においては、処理が遅れることによってゲーム操作に対する応答性が悪くなったり、ゲーム進行が遅れたりすることは好ましくなく、認識処理は高速に行われることが好ましい。したがって、拡張現実感技術を用いたゲーム処理には、高速でかつ精度良く行うことができる本実施形態における認識処理が特に有効である。
【0158】
[変形例]
上記実施形態は本発明を実施する一例であり、他の実施形態においては例えば以下に説明する構成で本発明を実施することも可能である。
【0159】
(中心位置から4つの頂点を算出する方法に関する変形例)
また、上記ステップS24においては、CPU31は、ステップS23で検出された内部図形56の領域の個数が所定個数であるか否かを判定した。ここで、本実施形態では、8個の内部図形56の中心位置から4本の直線を算出することで4つの頂点を特定しているので、8個全ての内部図形56が検出されなくても4つの頂点を算出することは可能である。例えば、図17における中心点P1〜P8のいずれか1つがなくても、4本の直線L1〜L4を算出することは可能である。したがって、他の実施形態においては、ステップS24において、CPU31は、ステップS23で検出された内部図形56の領域の個数が所定範囲の個数であるか否かを判定するようにしてもよい。ここで、所定範囲は、内部図形の個数(8個)を含む範囲であり、例えば、7個から8個の範囲である。
【0160】
なお、上記実施形態において、7個の中心位置から4本の直線を算出する場合には、2個の中心位置から1本の直線を特定する必要がある。この場合、誤った組み合わせの2個の中心位置から誤った直線が算出される(例えば、中心点P3と中心点P4を通る直線が算出される)ことを防止する必要がある。そのため、例えば、CPU31は、以下の条件を満たすように、7個の中心位置から4本の直線を算出するようにしてもよい。
(条件1)7個の中心位置のうち2つまたは3つの中心位置を通る。
(条件2)第1図形55の輪郭を表す4本の直線のいずれかと略平行である。
(条件3)第1図形55の輪郭を表す4本の直線のいずれかから所定距離内にある(第1図形55の中心付近を通らない)。
なお、上記(条件2)および(条件3)において、第1図形55の輪郭を表す4本の直線は、上記ステップS22で算出されるものを用いてもよい。上記条件1〜3を満たす直線を算出することで、7個の中心位置から4本の直線を算出することができる。
【0161】
以上のように、一直線上に配置される3つ以上の内部図形が描かれた第1図形55を撮像対象とする一方、2つ以上の内部図形の中心位置から近似直線を算出し、この近似直線によってマーカ51の位置(4つの頂点の位置)を算出するようにしてもよい。これによれば、内部図形の数に冗長性を持たせることによって、全ての内部図形を検出できない場合でも4つの頂点の位置を算出することができる。
【0162】
(マーカに関する変形例)
上記実施形態においては、8個の内部図形56が描かれた第1図形55を含むマーカ51を用いる場合を例として説明したが、本発明において用いることができるマーカはこれに限らない。例えば、他の実施形態においては、内部図形56の数は8個に限らない。図20は、本実施形態の変形例におけるマーカを示す図である。図20に示すマーカ73は、12個の内部図形56を有する第1図形74と、図6と同様の第2図形57とを含む。また、第1図形74内の12個の内部図形56は、(正方形)の4頂点と4辺の位置に配置されている。他の実施形態においては、図6に示すマーカ51に代えて、図20に示すマーカ73を用いるようにしてもよい。マーカ73を用いる場合、上述のステップS26では、CPU31は、3つまたは4つの中心位置から上記直線L1〜L4を算出するようにしてもよい。これによれば、内部図形の数に冗長性を持たせることができるので、CPU31は、全ての内部図形を検出できない場合でも4つの頂点の位置を算出することができる。
【0163】
また、上記実施形態においては、内部図形56は全て同じ色(白色)としたが、他の実施形態においては、第1図形55内における位置に応じて内部図形56の色を異ならせるようにしてもよい。図21は、本実施形態の他の変形例におけるマーカを示す図である。図21に示すマーカ75は、図20に示す第1図形74と同様、12個の内部図形56が描かれた第1図形76を含む。ここで、第1図形76においては、四角形(正方形)の4辺の位置に配置される各内部図形56の色は、辺毎に異なっている(図21では、色の違いを斜線の方向および間隔で表す)。他の実施形態においては、図6に示すマーカ51に代えて、図21に示すマーカ75を用いるようにしてもよい。この場合、CPU31は、第2図形を用いずにマーカ75の向き(上下左右の4方向に関する向き)を算出することができる。すなわち、CPU31は、内部図形56の色を検知することによって、マーカ75の上下左右の4方向に関する向きを特定することができる。
【0164】
また、上記実施形態においては、第1図形55を検出しやすくする目的で、マーカ51には黒色の第1図形55の周囲に白色の枠が設けられた。そのため、認識処理による検出対象はマーカ51内の第1図形55であった。ここで、他の実施形態においては、白色の枠はなくてもよく、マーカ51全体が認識処理による検出対象とされてもよい。
【0165】
また、上記実施形態では、マーカ51は、第1図形55と異なる位置に第2図形57を含んでいた。CPU31は、第1図形55に対して第2図形57が配置される方向に基づいて第1図形55の向き(上下左右の4方向に関する向き)を特定した(S29)。ここで、他の実施形態においては、第1図形の内部に第2図形が描かれたマーカを用いてもよい。例えば、図6に示すマーカ51において、第1図形55の内部の8個の内部図形56によって表される四角形の内側に、第2図形57が形成されてもよい。なお、第2図形は、上記実施形態の矢印の図形のように、向きを特定することができる形状であればどのような図形であってもよい。このとき、CPU31は、ステップS26で4つの頂点を算出した後、4つの頂点によって形成される四角形の内側の領域から第2図形を検出する。そして、検出された第2図形の向きから、上下左右の4方向に関する第1図形の向きを特定する。以上によっても上記実施形態と同様、上下左右の4方向に関する第1図形の向きを特定することができる。ただし、第1図形の内部に第2図形が描かれたマーカを用いる場合には、第1図形の内部に内側図形と第2図形との両方が含まれることになる。そのため、内側図形を検出する際に誤検出が生じる可能性が高くなり、(上記実施形態と比べて)認識処理の精度が落ちる可能性がある。換言すれば、上記実施形態では、第1図形内に内側図形のみが形成されたマーカを用いるので、内側図形をより正確に検出することができ、認識処理の精度を向上することができる。
【0166】
また、上記実施形態では、マーカ51は、所定の図形が描かれた薄板状の部材であったが、他の実施形態においては、マーカ51は、表示装置によって所定の図形を表示することによって実現されてもよい。例えば、他の実施形態においては、画面にマーカ51を表示された他の携帯ゲーム装置がマーカ51として用いられてもよい。
【0167】
(認識処理に用いる撮像画像に関する変形例)
上記実施形態においては、低精度で行う領域検出処理(ステップS11)と、高精度で行うマーカ検出処理(ステップS15)とにおいて、同じ撮像画像が用いられた。ここで、他の実施形態においては、上記2つの処理で解像度が異なる画像を用いてもよい。具体的には、領域検出処理においては、マーカ検出処理において用いられる撮像画像よりも解像度が低い画像が用いられてもよい。例えば、認識処理以外の他の処理において必要となる等の理由で、ゲーム装置1がカメラによる撮像画像から解像度の低い画像を生成する場合には、当該解像度の低い画像を領域検出処理において用いるようにしてもよい。
【0168】
(認識処理の精度に関する変形例)
上記実施形態においては、認識処理における領域検出処理(ステップS11)とマーカ検出処理(ステップS15)との間で処理の精度を変えるようにした。また、マーカ検出処理内における各処理の間(ステップS21とステップS23およびS25との間)でも処理の精度を変えるようにした。ここで、他の実施形態においては、認識処理における各処理を行う精度は、どのように設定されてよく、各処理は同じ精度で行われてもよい。
【0169】
(マーカ位置の算出に関する変形例)
上記実施形態においては、CPU31は、内部図形56の中心位置を算出し、中心位置に基づいて、撮像画像内におけるマーカ51の位置(4つの頂点P11〜P14の位置)を算出した。ここで、他の実施形態においては、CPU31は、内部図形56の中心位置をそのままマーカ51の位置として用いてもよい。例えば、CPU31は、図9および図17に示す点P1,P3,P6および点P8をマーカ51の位置として用いてもよい。また、上記実施形態においては、マーカ51の位置および向きを表す情報として、4つの点の位置(4つの頂点P11〜P14の位置)を用いたが、マーカ51の3つ以上の点の位置がわかればマーカ51の位置および向きを特定することができる。したがって、他の実施形態においては、マーカ51の位置および向きを表す情報として3つまたは5つ以上の点の位置を用いてもよい。したがって、CPU31は、3つ以上の内部図形の中心位置に基づいてマーカ51の位置および向きを検出することができる。
【0170】
(その他の変形例)
上記実施形態では、ゲーム装置1は、ゲーム装置1が備える外側カメラ25によってリアルタイムに取得される撮像画像に対して認識処理を実行した。ここで、他の実施形態においては、認識処理の対象となる撮像画像は、過去に撮像されたものであってもよいし、ゲーム装置1が外部の機器から取得した撮像画像であってもよい。また、上記実施形態では、外側カメラ25がゲーム装置1に予め搭載されているが、他の実施形態では、ゲーム装置1に着脱可能な外付け型のカメラが外側カメラ25に代えて利用されてもよい。
【0171】
また、上記実施形態では、拡張現実感技術において認識処理が用いられる場合を例として説明した。また、認識処理の認識対象となる物体は、拡張現実感技術において用いられるマーカであった。ここで、本発明は、撮像画像から任意の撮像対象を認識する任意の画像認識処理に適用することが可能である。例えば、他の実施形態においては、認識処理は、撮像画像からユーザの顔を認識し、認識した顔に対して所定の処理(例えば、落書き等の画像を追加する処理)を行う技術に用いられてもよい。
【0172】
また、上記実施形態では、一台の情報処理装置(ゲーム装置1)のみによって認識処理を実行しているが、他の実施形態では、互いに通信可能な複数の情報処理装置を有する画像認識システムにおいて、当該複数の情報処理装置が認識処理を分担して実行するようにしてもよい。
【産業上の利用可能性】
【0173】
以上のように、本発明は、撮像画像にぶれが生じている場合であっても、撮像対象の位置を正確に検出すること等を目的として、例えばゲームプログラムやゲーム装置に利用することが可能である。
【符号の説明】
【0174】
1 ゲーム装置
13 タッチパネル
22 上側LCD
25 外側カメラ
31 CPU
32 メインメモリ
51 マーカ
54 対象領域
55 第1図形
56 内部図形
57 第2図形
【技術分野】
【0001】
本発明は、撮像手段によって撮像された画像から所定の撮像対象を認識するための画像認識プログラム、画像認識装置、画像認識システム、および画像認識方法に関する。
【背景技術】
【0002】
従来、カメラ等の撮像手段によって撮像された画像(撮像画像)から所定の撮像対象を検出する技術がある。例えば、非特許文献1には、拡張現実感技術において、カメラによる撮像画像に含まれる四角形のマーカに対して画像認識処理を行うことが記載されている。非特許文献1では、撮像画像に対して固定の閾値を用いて2値化を行うことで連結領域を抽出し、抽出された連結領域から所定の撮像対象でないもの(例えば、大きすぎたり小さすぎたりするもの)を除外した上で、連結領域の輪郭線を抽出する。そして、輪郭線から4本の線分を求めて四角形のマーカの頂点を算出することでマーカの位置を検出している。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】加藤博一,Mark Billinghurst,浅野浩一,橘啓八郎、「マーカー追跡に基づく拡張現実感システムとそのキャリブレーション」、日本バーチャルリアリティ学会論文誌 Vol.4 No.4、1999年
【発明の概要】
【発明が解決しようとする課題】
【0004】
非特許文献1に記載の認識方法では、撮像対象(マーカ)の輪郭から撮像対象の位置(4頂点)を検出しているので、例えば手ぶれ等によって撮像画像にぶれが生じている場合には、撮像対象の位置を正確に検出することができないおそれがある。すなわち、撮像画像にぶれが生じている場合には、撮像対象の輪郭が正確に得られていない可能性があるため、輪郭から撮像対象の位置を算出しても正確な位置を得ることができないのである(図7参照)。
【0005】
それ故、本発明は、撮像画像にぶれが生じている場合であっても、撮像対象の位置を正確に検出することができる画像認識プログラム、画像認識装置、画像認識システム、および画像認識方法を提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明は、上記の課題を解決するために、以下の(1)〜(16)の構成を採用した。
【0007】
(1)
本発明は、撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出する情報処理装置のコンピュータにおいて実行される画像認識プログラムである。画像認識プログラムは、画像取得手段と、図形検出手段と、対象検出手段としてコンピュータを機能させる。画像取得手段は、撮像手段によって撮像された撮像画像を取得する。図形検出手段は、複数の図形をそれぞれ検出する。対象検出手段は、図形検出手段によって検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する。
【0008】
上記「撮像手段」は、情報処理装置が予め備えているものであってもよいし、情報処理装置とは別体で構成されるものであってもよい。また、情報処理手段が撮像手段を予め備えている場合、撮像手段は、情報処理装置に固定的に取り付けられていてもよいし、情報処理装置に対して着脱可能であってもよい。また、撮像手段は、情報処理装置の動作に連動して動作してもよいし、情報処理装置の動作とは独立して動作するものであってもよい。
上記「所定の撮像対象」は、典型的にはマーカであるが、複数の図形を含む物であればどのような物でもよい。また、上記「図形」は、後述する実施形態においては複数個の円形図形(図6)であるが、その形状、数、大きさ、色はどのようなものであってもよい。例えば、上記「図形」は、円形でもよいし、楕円形でもよいし、多角形であってもよい。
また、上記「図形」は、後述する実施形態では第1図形の内部に描かれた内部図形であるが、ある図形の内部に描かれている必要はない。すなわち、上記「図形検出手段」は、後述する実施形態や下記(2)のように、(第1図形の領域を検出してから)第1図形の領域内から複数の図形を検出してもよいし、(第1図形の領域を検出せずに)撮像画像の全領域から複数の図形を検出してもよい。
上記「情報処理装置」とは、後述する実施形態に記載のゲーム装置の他、コンピュータプログラムを実行することによって情報処理を行う任意のコンピュータを含む概念である。また、上記「情報処理装置」は、携帯型か否かを問わない。
上記「画像認識プログラム」とは、一例としては、後述する実施形態に記載のゲームプログラムであるが、パーソナルコンピュータや携帯端末において実行されるアプリケーションプログラムを含む概念である。
上記「画像取得手段」は、情報処理装置内に備えられた撮像手段から内部バス等を介して撮像画像を取得してもよいし、情報処理装置の外部の撮像手段から通信によって撮像画像を取得してもよいし、撮像手段によって撮像された撮像画像を記憶した記憶媒体が情報処理装置に装着されることによって当該記憶媒体から撮像画像を取得してもよい。
上記「図形検出手段」は、上記複数の図形を検出するものであればよく、複数の図形を検出する具体的な方法はどのような方法であってもよい。上記「図形検出手段」は、例えば、後述する実施形態や下記(3)のように図形の領域を検出してもよいし、下記(4)のように図形の輪郭を抽出してもよいし、パターンマッチングの手法を用いて図形を検出してもよい。
上記「図形の(それぞれの)中心位置」とは、図形の厳密な意味での中心の位置である必要はなく、各種の演算によって算出することが可能な、図形の中央付近の位置であればよい。例えば、「図形の中心位置」は、図形の輪郭を表す画素の平均値として算出されてもよいし、撮像画像の各画素に何らかの重み(輝度値等)が付される場合には、図形の領域内の各画素の重心位置として算出されてもよい。
上記「中心位置を算出することによって所定の撮像対象の位置を検出する」とは、中心位置に基づいて所定の撮像対象の位置を特定することができればよい。したがって、上記「対象検出手段」は、例えば、後述する実施形態や下記(6)や下記(16)のように、中心位置から直線(近似直線)を算出し、近似直線から所定の撮像対象の位置を特定してもよいし、後述する(マーカ位置の算出に関する変形例)に記載のように、中心位置をそのまま所定の撮像対象の位置として用いてもよい。また、複数の図形の各中心位置から、撮像画像内における所定の撮像対象の位置または向きを特定することができるので、対象検出手段は、当該位置および向きの少なくとも一方を検出するものであればよい。
【0009】
上記(1)の構成によれば、第1図形の輪郭ではなく、図形の中心位置によって所定の撮像対象の位置が検出される。ここで、撮像画像にぶれが生じている場合には所定の撮像対象の輪郭を正確に検出することが困難であるので、輪郭からでは所定の撮像対象の位置を正確に検出することができない。これに対して、上記中心位置は、撮像画像にぶれが生じていても正確に算出されるので、上記(1)の構成によれば、撮像画像にぶれが生じている場合でも、所定の撮像対象の位置または向きを正確に算出することができる。
【0010】
(2)
所定の撮像対象は、複数の図形が内部に描かれた第1図形を含んでいてもよい。このとき、画像認識プログラムは、撮像画像から第1図形の領域を検出する領域検出手段としてコンピュータをさらに実行させる。図形検出手段は、領域検出手段が検出した領域内から複数の図形をそれぞれ検出する。
【0011】
上記「領域検出手段」は、所定の撮像対象の第1図形を検出するものであればよく、第1図形を検出する具体的な方法はどのような方法であってもよい。上記「領域検出手段」は、例えば、第1図形の輪郭を抽出することで第1図形を検出してもよいし、パターンマッチングの手法を用いて第1図形を検出してもよい。
【0012】
上記(2)の構成によれば、まず第1図形の領域が検出され、検出された領域内から、第1図形の内部に描かれる図形(内部図形)が検出される。これによれば、所定の撮像対象ではない物を内部図形として検出してしまう誤検出を防止することができ、内部図形を確実に検出することができる。
【0013】
(3)
図形検出手段は、複数の図形の領域をそれぞれ検出してもよい。このとき、対象検出手段は、図形検出手段によって検出された各領域の中心位置をそれぞれ算出する位置算出手段を有する。
【0014】
上記(3)の構成によれば、複数の図形の領域をそれぞれ検出した後で、検出された領域の中心位置を算出することで、中心位置を容易に算出することができる。
【0015】
(4)
図形検出手段は、複数の図形の領域を示す輪郭をそれぞれ検出してもよい。このとき、位置算出手段は、図形検出手段によって検出された各輪郭で示される各領域の中心位置をそれぞれ算出する。
【0016】
上記(4)の構成によれば、複数の図形の領域の輪郭を検出した後で、検出された輪郭の中心位置を算出することで、中心位置を容易に算出することができる。
【0017】
(5)
位置算出手段は、図形検出手段によって検出された各輪郭を表す各画素の位置を求め、求められた位置の平均値を算出することにより、各領域の中心位置をそれぞれ算出してもよい。
【0018】
上記(5)の構成によれば、輪郭を表す画素の位置の平均値を算出することで、中心位置を容易かつ正確に算出することができる。
【0019】
(6)
対象検出手段は、複数の図形のそれぞれの中心位置に基づいて、所定の直線を算出する直線算出手段を有していてもよい。このとき、直線算出手段により算出された所定の直線に基づいて、所定の撮像対象と撮像手段との位置関係を算出する位置関係手段としてコンピュータをさらに機能させる。
【0020】
上記(6)の構成によれば、中心位置に基づいて算出される直線によって、撮像画像内における所定の撮像対象の位置および向きを特定することができる。したがって、上記直線に基づくことによって上記位置関係を正確に算出することができる。
また、上記(6)の構成によれば、上記位置関係を用いて、後述する実施形態における仮想画像を撮像画像に合成することも可能である。つまり、上記(6)の構成によれば、撮像画像と仮想画像とを合成した合成画像を表示する拡張現実感技術において、撮像画像のぶれに強い(撮像画像にぶれが生じた場合でも所定の撮像対象を正確に検出できる)認識処理を用いることができる。なお、拡張現実感技術においては、ユーザが撮像手段を動かして使用する状況が多いと想定され、後述する実施形態のようにゲームに拡張現実感技術が用いられる場合には、そのような状況が特に多いと考えられる。したがって、上記(6)の構成を拡張現実感技術に用いる場合においては、上記(1)の構成による画像のぶれに強い認識処理が特に有効である。
【0021】
(7)
複数の図形はそれぞれ円形状であってもよい。
【0022】
上記(7)の構成によれば、所定の撮像対象がどのような向きであっても、撮像画像内における図形の形状が同じになる。したがって、所定の撮像対象の向きによって中心位置が変化することがないので、より正確に所定の撮像対象を検出することができる。
【0023】
(8)
領域検出手段は、撮像画像において第1の間隔で得られる画素値に基づいて第1図形の領域を検出してもよい。このとき、対象検出手段は、領域検出手段によって検出された領域内の撮像画像において第1の間隔よりも小さい第2の間隔で得られる画素値に基づいて各図形の中心位置を算出する。
【0024】
上記「第2の間隔」は、上記「第1の間隔」よりも小さければどのような長さであってもよい。また、後述する実施形態のように、撮像対象を検出する処理において複数種類の処理が実行される場合、対象検出手段は、中心位置を算出する処理を第2の間隔で得られる画素値に基づいて行えばよく、その他の処理についてはどのような精度で行ってもよい。
【0025】
上記(8)の構成によれば、領域検出手段によってまず低い精度で第1図形が検出された後、第1図形内の複数の図形の中心位置を算出する処理が高い精度で行われる。これによれば、第1図形の検出処理が低い精度で行われるとともに、複数の図形を検出する処理の処理範囲が第1図形の領域内に限られるので、認識処理を短時間で行うことができる。また、検出された図形の中心位置を算出する処理は高い精度で行われるので、所定の撮像対象の位置を精度良く検出することができる。したがって、上記(8)の構成によれば、対象の検出精度を維持しつつ、検出に要する時間を短縮することができる認識処理を提供することができる。
【0026】
(9)
画像認識プログラムは、領域検出手段によって検出された第1図形の領域において、当該第1図形の輪郭を抽出する輪郭抽出手段としてコンピュータをさらに機能させてもよい。このとき、対象検出手段は、輪郭抽出手段によって抽出された輪郭内の領域から複数の図形をそれぞれ検出する。
【0027】
上記(9)の構成によれば、輪郭抽出手段によって抽出された輪郭内の領域から図形が検出されるので、図形を検出する範囲を適切に決定することができる。これによれば、図形の検出処理を無駄な領域に対して行わずに済むので、認識処理をより効率良く行うことができる。
【0028】
(10)
輪郭抽出手段は、撮像画像において所定間隔で得られる画素値に基づいて当該第1図形の輪郭を抽出してもよい。このとき、対象検出手段は、撮像画像において所定間隔よりも小さい間隔で得られる画素値に基づいて、当該輪郭内の領域から複数の図形をそれぞれ検出する。
【0029】
上記(10)の構成によれば、輪郭の抽出処理は図形の検出処理よりも低い精度で行われるので、輪郭の抽出処理をより短時間で行うことができる。その結果、認識処理をより短時間で行うことができる。
【0030】
(11)
画像認識プログラムは、輪郭抽出手段によって抽出された輪郭が第1図形の形状を表すか否かを判定する形状判定手段としてコンピュータを機能させてもよい。このとき、対象検出手段は、形状判定手段によって所定の撮像対象の形状を表すと判定される輪郭に対応する領域内から複数の図形をそれぞれ検出する。
【0031】
上記(11)の構成によれば、抽出された輪郭に基づいて、領域検出手段によって検出された領域内に第1図形が含まれるか否かを判定することができる。そして、領域内に第1図形が含まれない場合には、その領域については図形の検出処理が行われない。したがって、上記(11)の構成によれば、第1図形を含まない領域を、図形の検出処理の対象から除くことができるので、図形の検出処理が無駄に行われることを防止することができる。これによれば、認識処理を効率良く行うことができ、認識処理をより短時間で行うことができる。特に、上記(10)と(11)との構成を組み合わせる場合には、(低精度で行われるため)相対的に高速に行われる輪郭の抽出処理によって、(高精度で行われるため)相対的に時間の要する図形の検出処理を省略することができるので、認識処理をより効率良く行うことができる。
【0032】
(12)
所定の撮像対象は、第1図形と異なる位置に第2図形を含んでいてもよい。このとき、画像認識プログラムは、撮像画像から第2図形を検出し、第1図形に対して第2図形が配置される方向に基づいて所定の撮像対象の向きを特定する向き特定手段としてコンピュータをさらに機能させる。
【0033】
上記(12)の構成によれば、第1図形に対する第2図形の方向によって、所定の撮像対象の向きを特定することができる。また、上記(12)の構成によれば、所定の撮像対象において第2図形は第1図形とは異なる位置に形成されるので、第1図形の内部には内側図形のみを描くことができる。そのため、内側図形を検出する際に、第2図形またはその一部を誤検出することがなく、内側図形を正確に検出することができる。したがって、認識処理の精度をより向上することができる。
【0034】
(13)
図形検出手段は、撮像画像において所定間隔で得られる画素値に基づいて複数の図形の領域をそれぞれ検出してもよい。このとき、位置算出手段は、撮像画像において所定間隔よりも小さい間隔で得られる画素値に基づいて、図形検出手段によって検出された各領域の中心位置をそれぞれ算出する。
【0035】
上記(13)の構成によれば、複数の図形の領域の検出処理は、中心位置の算出処理よりも低い精度で行われるので、複数の図形の領域の検出処理をより短時間で行うことができる。その結果、認識処理をより短時間で行うことができる。
【0036】
(14)
対象検出手段は、図形検出手段によって検出された領域の個数が、所定範囲内の個数であるか否かを判定する個数判定手段をさらに有していてもよい。このとき、位置算出手段は、所定範囲内の個数の領域が検出された第1図形の領域について、図形検出手段によって検出された各領域の中心位置を算出する。
【0037】
上記(14)の構成によれば、図形検出手段によって検出された領域の個数が適切な数であるか否かを判定することができる。そして、領域の個数が適切でない場合には、領域検出手段によって検出された領域内に第1図形が含まれないと判断され、中心位置の算出処理が行われない。したがって、上記(14)の構成によれば、第1図形を含まない領域を、中心位置の算出処理の対象から除くことができるので、当該算出処理が無駄に行われることを防止することができる。これによれば、認識処理を効率良く行うことができ、認識処理をより短時間で行うことができる。特に、上記(13)と(14)との構成を組み合わせる場合には、(低精度で行われるため)相対的に高速に行われる第1図形の領域の検出処理によって、(高精度で行われるため)相対的に時間の要する中心位置の算出処理を省略することができるので、認識処理をより効率良く行うことができる。
【0038】
(15)
所定の撮像対象には、3つ以上の図形が含まれていてもよい。このとき、対象検出手段は、3つ以上の図形の中心位置に基づいて所定の撮像対象の位置および向きを検出する。
【0039】
上記「(所定の撮像対象の)向きを検出する」とは、所定の撮像対象の向きを一意に特定することに限らない。例えば、後述する実施形態におけるステップS26の処理では、中心位置から4つの頂点の位置を算出するが、これら4つの頂点の位置では、マーカ51が90°、180°または270°回転した状態と回転しない状態とを区別することができない。上記(15)の構成における対象検出手段は、上記ステップS26の処理のように、所定の撮像対象の向きを一意に特定しない処理を行うものであってもよい。
【0040】
上記(15)の構成によれば、3つ以上の図形の中心位置を算出することによって、所定の撮像対象における3点の(撮像画像内の)位置を特定することができるので、所定の撮像対象の位置および向きを検出することができる。
【0041】
(16)
所定の撮像対象には、所定の直線上に3以上の所定数の図形が配置されていてもよい。このとき、対象検出手段は、算出された中心位置のうちから、2以上であって所定数よりも少ない数の中心位置に少なくとも基づいて所定の直線を算出し、算出された所定の直線に基づいて所定の撮像対象の位置および向きを検出する。
【0042】
上記(16)の構成によれば、撮像画像における所定の直線の位置および向きによって所定の撮像対象の位置および向きを検出することができる。ここで、所定の直線は、所定数よりも少ない図形の中心位置から算出されるので、所定数全ての図形が検出されない場合であっても算出可能である。したがって、上記(16)の構成によれば、図形の数に冗長性を持たせることにより、図形のいくつかが検出されない場合でも所定の撮像対象の位置および向きを検出することができる。これによって、より確実に所定の撮像対象を検出することができ、認識処理の成功率を上げることができる。
【0043】
また、本発明は、上記各手段と同等の手段を備える画像認識装置の形態で実施されてもよい。この画像認識装置においては、画像認識プログラムを実行するコンピュータによって上記各手段が実現されてもよいし、専用回路によって上記各手段の一部または全部が実現されてもよい。また、本発明は、上記各手段を備える1以上の情報処理装置からなる画像認識システムの形態で実施されてもよい。このとき、1以上の情報処理装置は、有線または無線通信によって直接通信を行ってもよいし、ネットワークを介して通信を行ってもよい。さらに、本発明は、上記各手段によって行われる画像認識方法の形態で実施されてもよい。
【0044】
また、本発明は、拡張現実感技術において用いられるマーカの形態で実施されてもよい。すなわち、マーカは、撮像手段によって撮像された撮像画像に対して所定の認識処理を行うことによって撮像画像内におけるマーカの位置および向きを算出し、当該マーカの位置および向きに基づいて仮想オブジェクトの画像を生成し、当該撮像画像に対して当該仮想オブジェクトの画像を合成して表示する画像表示システムにおいて用いられる。マーカは、複数の内部図形を備える。複数の内部図形は、それぞれの中心位置が(画像表示システムによって)算出される。また、中心位置は、マーカの位置および向きを表す情報を(画像表示システムが)算出するために用いられる。また、マーカは、後述する実施形態のように、薄板状の部材に図形が描かれることによって実現されてもよいし、表示装置の画面に図形が表示されることによって実現されてもよい。
【発明の効果】
【0045】
本発明によれば、所定の撮像対象に含まれる複数の図形の中心位置をそれぞれ算出し、各中心位置によって所定の撮像対象の位置を検出することによって、撮像画像にぶれが生じている場合でも、所定の撮像対象の位置を正確に算出することができる。
【図面の簡単な説明】
【0046】
【図1】本実施形態に係るゲーム装置の外観図
【図2】ゲーム装置の内部構成の一例を示すブロック図
【図3】ゲーム装置を使用する例を示す図
【図4】ゲーム装置に表示されるゲーム画像の一例を示す図
【図5】本実施形態における画像認識処理で用いられる対象領域を示す図
【図6】本実施形態において用いられるマーカを示す図
【図7】左右の輪郭がぼけた第1図形の画像を示す図
【図8】第1図形の一部における内部図形の中心位置を示す図
【図9】第1図形内の各内部図形の中心点を示す図
【図10】ゲームプログラムによる処理において用いられる各種データを示す図
【図11】ゲーム装置において実行されるゲーム処理の流れを示すメインフローチャート
【図12】図11に示す認識処理(ステップS2)の流れを示すフローチャート
【図13】撮像画像においてステップS11の処理において画素値が参照される画素を示す図
【図14】図12に示すマーカ検出処理(ステップS15)の流れを示すフローチャート
【図15】ステップS21の処理対象となる領域の一例を示す図
【図16】撮像画像においてステップS21の処理において画素値が参照される画素を示す図
【図17】第1図形を表す撮像画像の一例を示す図
【図18】図17に示す各直線L1〜L4によって算出される4つの頂点P11〜P14を示す図
【図19】ステップS27で設定される所定領域の一例を示す図
【図20】本実施形態の変形例におけるマーカを示す図
【図21】本実施形態の他の変形例におけるマーカを示す図
【発明を実施するための形態】
【0047】
[ゲーム装置のハードウェア構成]
以下、図面を参照して、本発明の一実施形態に係る画像認識プログラムおよび画像認識装置について説明する。本発明は、表示装置に画像を表示させる任意の情報処理装置(コンピュータ)において画像認識プログラムが実行されることによって実現することができるが、本実施形態では、情報処理装置の一例として図1に示すゲーム装置1を用いる場合について説明する。
【0048】
図1は、本実施形態に係るゲーム装置1の外観図である。ここでは、ゲーム装置の一例として、携帯ゲーム装置を示す。なお、ゲーム装置1は、カメラを内蔵しており、当該カメラによって画像を撮像し、撮像した画像を画面に表示したり、撮像した画像のデータを保存したりする撮像装置としても機能する。
【0049】
図1において、ゲーム装置1は折り畳み型の携帯ゲーム装置であり、開いた状態(開状態)のゲーム装置1を示している。ゲーム装置1は、開いた状態においてもユーザが両手または片手で把持することができるようなサイズで構成される。
【0050】
ゲーム装置1は、下側ハウジング11および上側ハウジング21を有する。下側ハウジング11と上側ハウジング21とは、開閉可能(折り畳み可能)に連結されている。図1の例では、下側ハウジング11および上側ハウジング21は、それぞれ横長の長方形の板状に形成され、互いの長辺部分で回転可能に連結されている。通常、ユーザは、開状態でゲーム装置1を使用する。また、ユーザは、ゲーム装置1を使用しない場合には閉状態としてゲーム装置1を保管する。また、図1に示した例では、ゲーム装置1は、上記閉状態および開状態のみでなく、下側ハウジング11と上側ハウジング21とのなす角度が閉状態と開状態との間の任意の角度において、連結部分に発生する摩擦力などによってその開閉角度を維持することができる。つまり、上側ハウジング21を下側ハウジング11に対して任意の角度で静止させることができる。
【0051】
下側ハウジング11には、下側LCD(Liquid Crystal Display:液晶表示装置)12が設けられる。下側LCD12は横長形状であり、長辺方向が下側ハウジング11の長辺方向に一致するように配置される。なお、本実施形態では、ゲーム装置1に内蔵されている表示装置としてLCDを用いているが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置等、他の任意の表示装置を利用しても良い。また、ゲーム装置1は、任意の解像度の表示装置を利用することができる。なお、下側LCD12には、内側カメラ23または外側カメラ25で撮像されている画像がリアルタイムに表示される。
【0052】
下側ハウジング11には、入力装置として、各操作ボタン14A〜14Kおよびタッチパネル13が設けられる。図1に示されるように、各操作ボタン14A〜14Kのうち、方向入力ボタン14A、操作ボタン14B、操作ボタン14C、操作ボタン14D、操作ボタン14E、電源ボタン14F、スタートボタン14G、およびセレクトボタン14Hは、下側ハウジング11の内側主面上に設けられる。内側主面とは、上側ハウジング21と下側ハウジング11とを折り畳んだときに内側となる面である。図1に示す例では、方向入力ボタン14Aおよび電源ボタン14Fは、下側ハウジング11の内側主面の中央付近に設けられる下側LCD12に対して、左右一方側(図1では左側)の当該主面上に設けられる。また、操作ボタン14B〜14E、スタートボタン14G、およびセレクトボタン14Hは、下側LCD12に対して左右他方側(図1では右側)となる下側ハウジング11の内側主面上に設けられる。方向入力ボタン14A、操作ボタン14B〜14E、スタートボタン14G、およびセレクトボタン14Hは、ゲーム装置1に対する各種操作を行うために用いられる。方向入力ボタン14Aは、例えば選択操作等に用いられる。各操作ボタン14B〜14Eは、例えば決定操作やキャンセル操作等に用いられる。電源ボタン14Fは、ゲーム装置1の電源をオン/オフするために用いられる。
【0053】
なお、図1においては、操作ボタン14I〜14Kの図示を省略している。例えば、Lボタン14Iは、下側ハウジング11の上側面の左端部に設けられ、Rボタン14Jは、下側ハウジング11の上側面の右端部に設けられる。Lボタン14IおよびRボタン14Jは、撮影機能を有するゲーム装置1に対して、例えば撮影指示操作(シャッター操作)を行うために用いられる。さらに、音量ボタン14Kは、下側ハウジング11の左側面に設けられる。音量ボタン14Kは、ゲーム装置1が備えるスピーカの音量を調整するために用いられる。
【0054】
また、ゲーム装置1は、各操作ボタン14A〜14Kとは別の入力装置としてさらに、画面上における任意の位置を指定可能な入力装置であるポインティングデバイスの一例として、タッチパネル13を備えている。タッチパネル13は、下側LCD12の画面上を覆うように装着されている。なお、本実施形態では、タッチパネル13は、例えば抵抗膜方式のタッチパネルが用いられる。ただし、タッチパネル13は、抵抗膜方式に限らず、任意の方式のタッチパネルを用いることができる。また、本実施形態では、タッチパネル13として、例えば下側LCD12の解像度と同じ解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル13の解像度と下側LCD12の解像度とが一致している必要はない。また、下側ハウジング11の右側面には、挿入口(図1では破線で示している)が設けられている。挿入口は、タッチパネル13に対する操作を行うために用いられるタッチペン27を収納することができる。なお、タッチパネル13に対する入力(タッチ入力)は、通常タッチペン27を用いて行われるが、タッチペン27に限らずユーザの指でタッチパネル13を操作することも可能である。
【0055】
また、下側ハウジング11の右側面には、メモリカード28を収納するための挿入口(図1では二点鎖線で示している)が設けられている。この挿入口の内側には、ゲーム装置1とメモリカード28とを電気的に接続するためのコネクタ(図示せず)が設けられる。メモリカード28は、例えばSD(Secure Digital)メモリカードであり、コネクタに着脱自在に装着される。メモリカード28は、例えば、ゲーム装置1によって撮像された画像を記憶(保存)したり、他の装置で生成された画像をゲーム装置1に読み込んだりするために用いられる。
【0056】
さらに、下側ハウジング11の上側面には、メモリカード29を収納するための挿入口(図1では、一点鎖線で示している)が設けられている。この挿入口の内側にも、ゲーム装置1とメモリカード29とを電気的に接続するためのコネクタ(図示せず)が設けられる。メモリカード29は、ゲームプログラム等の情報処理プログラムを記録した記録媒体であり、下側ハウジング11に設けられた挿入口に着脱自在に装着される。
【0057】
下側ハウジング11と上側ハウジング21との連結部の左側部分には、3つのLED15A〜15Cが取り付けられる。ここで、ゲーム装置1は、他の機器との間で無線通信を行うことが可能であり、第1LED15Aは、ゲーム装置1の電源がオンである場合に点灯する。第2LED15Bは、ゲーム装置1の充電中に点灯する。第3LED15Cは、無線通信が確立している場合に点灯する。したがって、3つのLED15A〜15Cによって、ゲーム装置1の電源のオン/オフ状況、充電状況、および、通信確立状況をユーザに通知することができる。
【0058】
一方、上側ハウジング21には、上側LCD22が設けられる。上側LCD22は横長形状であり、長辺方向が上側ハウジング21の長辺方向に一致するように配置される。なお、下側LCD12と同様、上側LCD22に代えて、他の任意の方式および任意の解像度の表示装置を利用しても良い。なお、上側LCD22上を覆うように、タッチパネルを設けてもかまわない。上側LCD22には、例えば、各操作ボタン14A〜14Kやタッチパネル13の役割をユーザに教えるための操作説明画面が表示される。
【0059】
また、上側ハウジング21には、2つのカメラ(内側カメラ23および外側カメラ25)が設けられる。図1に示されるように、内側カメラ23は、上側ハウジング21の連結部付近の内側主面に取り付けられる。一方、外側カメラ25は、内側カメラ23が取り付けられる内側主面の反対側の面、すなわち、上側ハウジング21の外側主面(ゲーム装置1が閉状態となった場合に外側となる面であり、図1に示す上側ハウジング21の背面)に取り付けられる。なお、図1においては、外側カメラ25を破線で示している。これによって、内側カメラ23は、上側ハウジング21の内側主面が向く方向を撮像することが可能であり、外側カメラ25は、内側カメラ23の撮像方向の逆方向、すなわち、上側ハウジング21の外側主面が向く方向を撮像することが可能である。このように、本実施形態では、2つの内側カメラ23および外側カメラ25の撮像方向が互いに逆方向となるように設けられる。例えば、ユーザは、ゲーム装置1からユーザの方を見た景色を内側カメラ23で撮像することができるとともに、ゲーム装置1からユーザの反対側の方向を見た景色を外側カメラ25で撮像することができる。
【0060】
なお、上記連結部付近の内側主面には、音声入力装置としてマイク(図2に示すマイク43)が収納されている。そして、上記連結部付近の内側主面には、マイク43がゲーム装置1外部の音を検知できるように、マイクロフォン用孔16が形成される。マイク43を収納する位置およびマイクロフォン用孔16の位置は必ずしも上記連結部である必要はなく、例えば下側ハウジング11にマイク43を収納し、マイク43を収納位置に対応させて下側ハウジング11にマイクロフォン用孔16を設けるようにしても良い。
【0061】
また、上側ハウジング21の外側主面には、第4LED26(図1では、破線で示す)が取り付けられる。第4LED26は、内側カメラ23または外側カメラ25によって撮影が行われた(シャッターボタンが押下された)時点で点灯する。また、内側カメラ23または外側カメラ25によって動画が撮影される間点灯する。第4LED26によって、ゲーム装置1による撮影が行われた(行われている)ことを撮影対象者や周囲に通知することができる。
【0062】
また、上側ハウジング21の内側主面の中央付近に設けられる上側LCD22に対して、左右両側の当該主面に音抜き孔24がそれぞれ形成される。音抜き孔24の奥の上側ハウジング21内にはスピーカが収納されている。音抜き孔24は、スピーカからの音をゲーム装置1の外部に放出するための孔である。
【0063】
以上に説明したように、上側ハウジング21には、画像を撮像するための撮像手段である内側カメラ23および外側カメラ25と、主に操作説明画面を表示するための表示手段である上側LCD22とが設けられる。一方、下側ハウジング11には、ゲーム装置1に対する操作入力を行うための入力装置(タッチパネル13および各操作ボタン14A〜14K)と、撮像された画像を表示するための表示手段である下側LCD12とが設けられる。したがって、ゲーム装置1を使用する際には、ユーザは、下側LCD12に表示される撮像画像(カメラによって撮像された画像)を見ながら、下側ハウジング11を把持して入力装置に対する入力を行うことができる。
【0064】
次に、図2を参照して、ゲーム装置1の内部構成を説明する。図2は、ゲーム装置1の内部構成の一例を示すブロック図である。
【0065】
図2において、ゲーム装置1は、CPU31、メインメモリ32、メモリ制御回路33、保存用データメモリ34、プリセットデータ用メモリ35、メモリカードインターフェース(メモリカードI/F)36、メモリカードI/F37、無線通信モジュール38、ローカル通信モジュール39、リアルタイムクロック(RTC)40、電源回路41、インターフェース回路(I/F回路)42、第1GPU(Graphics Processing Unit)45、第2GPU46、第1VRAM(Video RAM)47、第2VRAM48、およびLCDコントローラ49等の電子部品を備えている。これらの電子部品は、電子回路基板上に実装されて、下側ハウジング11(または上側ハウジング21でも良い)内に収納される。
【0066】
CPU31は、所定のプログラム(ここでは、本実施形態に係る画像表示プログラム)を実行するための情報処理手段である。本実施形態では、画像表示プログラムの一例としてゲームプログラムがゲーム装置1内のメモリ(例えば保存用データメモリ34)やメモリカード28および/または29に記憶されており、CPU31は、当該ゲームプログラムを実行することによって、後述するゲーム処理を実行する。なお、CPU31によって実行されるプログラムは、ゲーム装置1内のメモリに予め記憶されていても良いし、メモリカード28および/または29から取得されても良いし、他の機器との通信によって他の機器から取得されても良い。
【0067】
CPU31には、メインメモリ32、メモリ制御回路33、およびプリセットデータ用メモリ35が接続される。メモリ制御回路33には、保存用データメモリ34が接続される。メインメモリ32は、CPU31のワーク領域やバッファ領域として用いられる記憶手段である。すなわち、メインメモリ32は、上記ゲーム処理に用いられる各種データを記憶したり、外部(メモリカード28および29や他の機器等)から取得されるプログラムを記憶したりする。本実施形態では、メインメモリ32として、例えばPSRAM(Pseudo−SRAM)を用いる。保存用データメモリ34は、CPU31によって実行されるプログラムや内側カメラ23および外側カメラ25によって撮像された画像のデータ等を記憶するための記憶手段である。保存用データメモリ34は、不揮発性の記憶媒体によって構成されており、本実施形態では例えばNAND型フラッシュメモリで構成される。メモリ制御回路33は、CPU31の指示に従って、保存用データメモリ34に対するデータの読み出しおよび書き込みを制御する回路である。プリセットデータ用メモリ35は、ゲーム装置1において予め設定される各種パラメータ等のデータ(プリセットデータ)を記憶するための記憶手段である。プリセットデータ用メモリ35としては、SPI(Serial Peripheral Interface)バスによってCPU31と接続されるフラッシュメモリを用いることができる。
【0068】
メモリカードI/F36および37は、それぞれCPU31に接続される。メモリカードI/F36は、コネクタに装着されたメモリカード28に対するデータの読み出しおよび書き込みを、CPU31の指示に応じて行う。また、メモリカードI/F37は、コネクタに装着されたメモリカード29に対するデータの読み出しおよび書き込みを、CPU31の指示に応じて行う。本実施形態では、内側カメラ23および外側カメラ25によって撮像された画像データや他の装置から受信された画像データがメモリカード28に書き込まれたり、メモリカード28に記憶された画像データがメモリカード28から読み出されて保存用データメモリ34に記憶されたり、読み出された画像データがメモリカード28から読み出されて他の装置へ送信されたりする。また、メモリカード29に記憶された各種プログラムが、CPU31によって読み出されて実行されたりする。
【0069】
なお、ゲームプログラムは、メモリカード29等の外部記憶媒体を通じてコンピュータシステムに供給されるだけでなく、有線または無線の通信回線を通じてコンピュータシステムに供給されても良い。また、ゲームプログラムは、コンピュータシステム内部の不揮発性記憶装置に予め記録されていても良い。なお、ゲームプログラムを記憶する情報記憶媒体としては、上記不揮発性記憶装置に限らず、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体でも良い。
【0070】
無線通信モジュール38は、例えばIEEE802.11.b/gの規格に準拠した方式により、無線LANに接続する機能を有する。また、ローカル通信モジュール39は、所定の通信方式により同種のゲーム装置との間で無線通信を行う機能を有する。無線通信モジュール38およびローカル通信モジュール39は、CPU31に接続される。CPU31は、無線通信モジュール38を用いてインターネットを介して他の機器との間でデータを送受信したり、ローカル通信モジュール39を用いて同種の他のゲーム装置との間でデータを送受信したりすることができる。
【0071】
また、CPU31には、RTC40および電源回路41が接続される。RTC40は、時間をカウントしてCPU31に出力する。例えば、CPU31は、RTC40によって計時された時間に基づいて、現在時刻(日付)等を計算することもできる。電源回路41は、ゲーム装置1が有する電源(典型的には電池であり、下側ハウジング11に収納される)から供給される電力を制御し、ゲーム装置1の各部品に電力を供給する。
【0072】
また、ゲーム装置1は、マイク43およびアンプ44を備えている。マイク43およびアンプ44は、それぞれI/F回路42に接続される。マイク43は、ゲーム装置1に向かって発声されたユーザの音声を検知して、当該音声を示す音声信号をI/F回路42に出力する。アンプ44は、I/F回路42から音声信号を増幅してスピーカ(図示せず)から出力させる。I/F回路42は、CPU31に接続される。
【0073】
また、タッチパネル13は、I/F回路42に接続される。I/F回路42は、マイク43およびアンプ44(スピーカ)の制御を行う音声制御回路と、タッチパネル13の制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するA/D変換およびD/A変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル13からの信号に基づいて所定の形式のタッチ位置データ(後述する検出座標データ)を生成してCPU31に出力する。タッチ位置データは、タッチパネル13の入力面に対して入力が行われた位置としてタッチパネル13が検出した位置の座標を示すデータである。なお、タッチパネル制御回路は、タッチパネル13からの信号の読み込み、および、検出座標データの生成を所定時間に1回の割合で繰り返し行う。
【0074】
操作ボタン14は、上記各操作ボタン14A〜14Kから構成され、CPU31に接続される。操作ボタン14からCPU31へは、各操作ボタン14A〜14Kに対する入力状況(押下されたか否か)を示す操作データが出力される。CPU31は、操作ボタン14から操作データを取得することによって、操作ボタン14に対する入力に応じた処理を実行する。
【0075】
内側カメラ23および外側カメラ25は、それぞれCPU31に接続される。内側カメラ23および外側カメラ25は、CPU31の指示に応じて画像を撮像し、撮像した画像データをCPU31に出力する。本実施形態では、CPU31は、内側カメラ23および外側カメラ25のいずれか一方に対して撮像指示を行い、撮像指示を受けたカメラが画像を撮像して画像データをCPU31に送る。なお、内側カメラ23および外側カメラ25は動画の撮影も可能である。すなわち、内側カメラ23および外側カメラ25は、繰り返し撮像を行って撮像データをCPU31へ繰り返し送ることも可能である。
【0076】
第1GPU45には第1VRAM47が接続され、第2GPU46には第2VRAM48が接続される。第1GPU45は、CPU31からの指示に応じて、メインメモリ32に記憶されている表示画像を生成するためのデータに基づいて第1の表示画像を生成し、第1VRAM47に描画する。第2GPU46は、第1GPU45と同様に、CPU31からの指示に応じて第2の表示画像を生成し、第2VRAM48に描画する。第1VRAM47および第2VRAM48は、LCDコントローラ49に接続されている。
【0077】
LCDコントローラ49は、レジスタ491を含む。レジスタ491は、CPU31からの指示に応じて0または1の値を記憶する。LCDコントローラ49は、レジスタ491の値が0の場合は、第1VRAM47に描画された第1の表示画像を下側LCD12に出力し、第2VRAM48に描画された第2の表示画像を上側LCD22に出力する。また、レジスタ491の値が1の場合は、第1VRAM47に描画された第1の表示画像を上側LCD22に出力し、第2VRAM48に描画された第2の表示画像を下側LCD12に出力する。例えば、CPU31は、内側カメラ23および外側カメラ25のいずれかから取得した画像を下側LCD12に表示させ、所定の処理によって生成した操作説明画面を上側LCD22に表示させることも可能である。
【0078】
[ゲーム処理の概要]
次に、図3から図9を参照して、上記ゲームプログラムによって実行されるゲーム処理中において行われるゲーム処理について説明する。ゲームプログラムは、カメラによって撮像された現実空間の画像(撮像画像)に対して画像認識処理を行い、画像認識処理の結果に基づいて仮想空間の画像(仮想画像)を撮像画像に対して合成したゲーム画像を表示し、プレイヤにゲームをプレイさせるものである。
【0079】
図3は、ゲーム装置を使用する例を示す図である。本実施形態においては、図3に示すように、プレイヤ(ユーザ)は、所定の撮像対象としてのマーカ51を任意の場所(図3では机50の上)に設置しておき、ゲーム装置1を用いてマーカ51およびその周辺を撮像する。撮像に用いられるカメラは、内側カメラ23および外側カメラ25のいずれであっても良いが、ここでは、外側カメラ25を用いる場合を例として説明する。マーカ51は、本実施形態では所定の模様(図6参照)が描かれた薄板状のものが用いられる。
【0080】
図4は、ゲーム装置に表示されるゲーム画像の一例を示す図である。図4は、図3に示すように机50の上に置かれたマーカ51をゲーム装置1が撮像する場合に、ゲーム装置1の上側LCD22に表示されるゲーム画像を示す。なお、本実施形態ではゲーム画像が上側LCD22に表示されるものとするが、ゲーム画像は下側LCD12に表示されてもよい。図4に示すように、上側LCD22には、仮想空間における仮想オブジェクトの画像(仮想画像)として大砲52の画像が撮像画像に合成されて表示される。これによって、実際の机50の上に大砲52が存在するかのような画像を表示することができる。なお、図4では、仮想オブジェクトの一例として大砲52の画像が表示されるが、仮想オブジェクトはどのようなものであってもよい。このように、本実施形態においては、拡張現実感技術を用いて、仮想オブジェクトがあたかも現実空間に存在するかのようなゲーム画像が表示される。
【0081】
なお、撮像画像に対して仮想画像を合成した画像(合成画像)は、例えば次の処理によって生成することができる。すなわち、ゲーム装置1はまず、カメラによる撮像画像から、その中に含まれるマーカ51を認識する(画像)認識処理を実行する。ここでは、認識処理の処理結果として、撮像画像内におけるマーカ51の位置および向きを示す情報が算出される。マーカ51が認識された場合、ゲーム装置1は、認識処理の処理結果であるマーカ51の位置および向きから、ゲーム装置1(カメラ)とマーカ51との位置関係を算出する。さらに、ゲーム装置1は、位置関係に基づいて仮想空間における仮想カメラの位置および姿勢を算出する。仮想カメラの位置および姿勢は、仮想空間における仮想カメラと仮想オブジェクトとの位置関係が、現実空間におけるゲーム装置1とマーカ51との位置関係に一致するように算出される。仮想カメラの位置が決まると、ゲーム装置1は、仮想カメラの位置から仮想オブジェクトを見た仮想画像を生成し、撮像画像に対して仮想画像を合成する。以上の処理によって、ゲーム装置1は合成画像を生成して表示することができる。なお、上記位置関係から仮想カメラの位置を算出する処理は、従来の拡張現実感技術における処理と同様であってもよい。
【0082】
[画像認識処理の概要]
以上のように、本実施形態では、ゲーム装置1は撮像画像から認識処理によってマーカ51を検出する。認識処理においてマーカ51を正確に検出することができなければ、仮想画像を正確に生成することができず、撮像画像上の正しい位置に仮想画像を合成することができなくなってしまい、合成画像の現実味(リアルさ)が薄れてしまう。そこで、本実施形態では、マーカ51を正確にかつ効率良く検出するべく、ゲーム装置1は以下の認識処理を実行する。
【0083】
(複数種類の精度を用いた認識処理)
図5は、本実施形態における画像認識処理で用いられる対象領域を示す図である。本実施形態では、認識処理を行うべき撮像画像が取得されると、ゲーム装置1はまず、撮像画像のうちでマーカ51を含む領域(「対象領域」と呼ぶ)54を検出する処理(領域検出処理)を行う(図5に示す表の上欄参照)。この領域検出処理は、撮像画像全体の領域53に対して行われ、後述するマーカ検出処理よりも低い精度で行われる。ここで、「低い精度」とは、処理において画素値を参照する画素の間隔を相対的に大きくすることを意味する。例えば本実施形態では、ゲーム装置1は、撮像画像の画素3つ分の間隔で画素値を参照して(すなわち、画素を2つとばしで画素値を参照して)領域検出処理を行う。このように、対象領域54の検出処理は低い精度で行われるので、当該検出処理は比較的高速に行われる。
【0084】
上記対象領域54が検出されると、ゲーム装置1は、対象領域54の画像からマーカ51を検出する処理(マーカ検出処理)を行う。マーカ検出処理は、(撮像画像全体の領域53ではなく)対象領域54のみを対象として行われ、かつ、上記領域検出処理よりも高い精度で行われる(図5に示す下欄参照)。つまり、マーカ検出処理においては、参照される画素が領域検出処理よりも細かく、換言すれば、画素値を参照する画素の間隔が領域検出処理よりも小さい。具体的には、本実施形態では、ゲーム装置1は、撮像画像の画素1つ分の間隔で画素値を参照して(すなわち、全ての画素の画素値を参照して)領域検出処理を行う。このように、マーカ検出処理は高い精度で行われるので、検出結果として得られるマーカ51の位置および向きは精度良く算出される。また、マーカ検出処理は対象領域54のみに対して行われるので、ゲーム装置1は、撮像画像全体の領域53に対して処理が行われる場合に比べて高速に処理を行うことができる。
【0085】
以上のように、本実施形態では、ゲーム装置1は、まず対象領域54を検出する処理を行い、対象領域54に対してマーカ51の検出処理を行う。そのため、必要な領域(すなわち、対象領域)のみに対してマーカ51の検出処理を行うことができ、マーカ51の検出処理を短時間で行うことができる。また、対象領域54の検出処理は低い精度で行われるので、この検出処理も短時間で行うことができ、認識処理全体としても短時間で処理を行うことができる。さらに、マーカ51の検出処理は高精度で行われるので、認識結果として得られるマーカ51の位置および向きは高精度で算出することができる。つまり、本実施形態によれば、撮像画像からマーカ51を検出する認識処理を高速かつ精度良く行うことができる。
【0086】
なお、本実施形態においては、上記マーカ検出処理内においても、異なる精度で処理が行われる。すなわち、マーカ検出処理には複数の処理が含まれており、各処理は異なる精度で実行される。これら各処理の詳細について後述する。
【0087】
(内部図形の中心位置によってマーカを検出する認識処理)
また、本実施形態における認識処理では、複数の内部図形が描かれた図形を含むマーカ51を用いて、内部図形の中心位置を算出することでマーカ51の検出を行う。図6は、本実施形態において用いられるマーカを示す図である。図6に示すように、マーカ51は、第1図形55と第2図形57とを含む。第1図形55は、複数個(図6では8個)の白い円形の図形56が内部に描かれている。本実施形態では、この白い円形の図形56が内部図形である。また、本実施形態では、8つの内部図形56は、四角形(正方形)の4頂点と4辺の中点との位置に配置されている。なお、第1図形は内部に複数の図形(内部図形)が描かれたものであればどのようなものであってもよく、内部図形の位置、形状、大きさ、および色はどのようなものでもよい。また、第2図形57は図6では矢印を表す図形であるが、第2図形57はどのような図形であってもよい。
【0088】
なお、本実施形態では図6に示すマーカ51を用いるので、上述の領域検出処理においては、ゲーム装置1はマーカ51の第1図形55の領域を対象領域として検出する。そして、上述のマーカ検出処理においては第1図形55の検出を高精度で行うことでマーカ51の位置および向きを検出する。
【0089】
ここで、上記マーカ51の位置を検出するために、マーカ51の第1図形55の輪郭を検出する方法を考える。図7は、左右の輪郭がぼけた第1図形55の画像を示す図である。カメラによって撮像される撮像画像は、いわゆる手ブレ等の原因で画像にぶれが生じて、輪郭が不明確になることがある。例えば、画像の撮像時に左右にカメラ(ゲーム装置1)が動いてしまうと、図7に示すように、輪郭が左右にぼけて不明確になる。このように撮像画像にぶれが生じて輪郭が不明確になる場合には、上述の輪郭を検出する方法では、輪郭を正確に検出することが難しいため、図形の位置を正確に算出することができない。輪郭は、例えば画素間における画素値(輝度値あるいは色値等)の差に基づいて検出することができるが、撮像画像にぶれが生じる場合、検出される輪郭の位置は画像の内容や閾値等に応じて大きく変化してしまう。例えば図7に示す画像の例で言えば、図7に示す点線58が輪郭として検出される場合や、点線59が輪郭として検出されたりする場合がある。これらの場合、第1図形55の横方向に関する長さは正しく算出されず、第1図形55の位置を正確に算出することができない。このように、輪郭を検出して輪郭からマーカの位置を算出する方法では、撮像画像にぶれが生じている場合にマーカの位置を正確に算出することができないおそれがある。
【0090】
そこで、本実施形態における認識処理では、ゲーム装置1は、第1図形55の内部図形56を検出し、各内部図形56の中心位置を算出することによってマーカ51を検出する。図8は、第1図形55の一部における内部図形56の中心位置を示す図である。上述のマーカ検出処理において、ゲーム装置1は、内部図形56の領域(輪郭)を検出し、検出した領域の中心点Pを算出する(図8参照)。ここで、図8において、撮像画像にぶれが生じているために図8に示す白の点線が輪郭として検出された場合でも、図8に示す黒の点線が輪郭として検出された場合でも、中心点Pは同じ位置となる。
【0091】
図9は、第1図形55内の各内部図形56の中心点を示す図である。本実施形態においては、各内部図形56の中心点P1〜P8がそれぞれ算出される。ここで、第1図形55の左右方向の長さは、点P1から点P3までの長さ等によって表される。この長さは、図8に示す白の点線が輪郭として検出される場合でも、黒の点線が輪郭として検出される場合でも、同じになる。つまり、この長さは、撮像画像にぶれが生じている場合でも正確に算出することができる。
【0092】
詳細は後述するが、本実施形態では、ゲーム装置1は、各内部図形56の中心点P1〜P8からマーカ51の4点の位置を特定する。この4点の位置は、8個の内部図形56によって表される四角形(正方形)の4つの頂点の位置である。この4点の位置によって、マーカ51の位置および向きが特定される。ただし、上記4点の位置は正方形の各頂点であるため、マーカ51が90°、180°または270°回転した状態と回転しない状態とで同じ値となるので、上記4点の位置では、上下左右の4方向に関するマーカ51の向きを特定することができず、マーカ51の向きを一意に特定することができない。そのため、ゲーム装置1は、第2図形57を検出することによって、マーカ51の向きを一意に特定する。なお、第2図形57を用いてマーカ51の向きを特定する方法については後述する。
【0093】
以上のように、本実施形態では、マーカ検出処理において、ゲーム装置1は、各内部図形56の中心点P1〜P8を算出する。そして、中心点P1〜P8からマーカ51の4点の位置を特定することで、マーカ51の位置を算出する。ここで、上記中心点P1〜P8は、撮像画像にぶれが生じている場合でも正確に算出されるので、ゲーム装置1は、撮像画像にぶれが生じている場合でも、中心点P1〜P8を用いることによってマーカ51の位置を正確に算出することができる。
【0094】
[ゲーム処理の詳細]
次に、図10〜図15を参照して、ゲームプログラムによって実行されるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図10は、ゲームプログラムによる処理において用いられる各種データを示す図である。図10において、ゲーム装置1のメインメモリ32には、ゲームプログラム61、撮像画像データ62、およびゲーム処理データ63が記憶される。
【0095】
ゲームプログラム61は、後述するゲーム処理(図11)をゲーム装置1のCPU31に実行させるためのプログラムである。ゲームプログラム61は、メモリカード29からその一部または全部が適宜のタイミングで読み込まれることによってメインメモリ32に記憶される。ゲームプログラム61には、ゲームを進行させるためのプログラムの他、上述の画像認識処理を実行するためのプログラムが含まれる。
【0096】
撮像画像データ62は、カメラ(内側カメラ23または外側カメラ25)によって撮像された画像(撮像画像)を示すデータである。撮像画像データ62としては、カメラから取得された最新の画像データのみが記憶されてもよいし、新しいものから順にそれぞれ所定個数の画像データが記憶されてもよい。
【0097】
ゲーム処理データ63は、ゲーム処理において用いられる各種のデータである。ゲーム処理データ63には、対象領域データ64、輪郭データ65、内部領域データ66、中心位置データ67、頂点データ68、および認識結果データ69が含まれる。なお、ゲーム処理データ63には、上記の他、ゲームに登場する各種オブジェクト(上記大砲52等)に関するデータや、BGM等の音声データ等、ゲームに必要な各種データが記憶される。
【0098】
対象領域データ64は、上述した対象領域、すなわち、撮像画像内における上記第1図形55の領域を示すデータである。対象領域データ64は上述の領域検出処理によって得られる。なお、本実施形態では、領域検出処理においては、低い精度で検出処理が行われるので、実際には第1図形55でない領域も第1図形55の領域として検出される場合がある。そのため、領域検出処理においては複数の領域が対象領域として検出される場合がある。この場合、検出された領域毎の対象領域データ64がメインメモリ32に記憶される(つまり、複数の対象領域データが記憶される)。なお、対象領域データ64は、領域を示すものであればよく、領域の輪郭のみを示すものであってもよいし、領域に対応する各画素を示すものであってもよい。
【0099】
輪郭データ65は、撮像画像内における上記第1図形55の輪郭を示すデータである。輪郭データ65は、上記対象領域データ64と同様、第1図形55の領域を示すデータであるが、対象領域データ64よりも高精度で検出される点で異なる。
【0100】
内部領域データ66は、上記第1図形55内の内部図形56の領域を示すデータである。上述のように、第1図形55には複数個(8個)の内部図形56が含まれている。そのため、マーカ検出処理において8個の内部図形56が正しく検出されれば、8個の内部領域データ66がメインメモリ32に記憶される。ただし、実際には8個全ての内部図形56が検出されない場合もある。この場合、検出された内部図形56の個数と同数の内部領域データ66がメインメモリ32に記憶される。なお、内部領域データ66は、領域を示すものであればよく、領域の輪郭のみを示すものであってもよいし、領域に対応する各画素を示すものであってもよい。
【0101】
中心位置データ67は、各内部図形56の中心位置をそれぞれ示すデータである。中心位置データ67は、マーカ検出処理において検出された内部図形56の数と同数の中心位置を示す。
【0102】
頂点データ68は、8個の内部図形56によって表される四角形(正方形)の4つの頂点の位置を示すデータである。詳細は後述するが、4つの頂点は、8つの内部図形56の各中心位置に基づいて算出される。
【0103】
認識結果データ69は、認識処理の結果として出力される、マーカ51の位置および向きを示すデータである。詳細は後述するが、マーカ51の位置および向きは、上記頂点データ68が示す4つの頂点と、撮像画像における第1図形55に対する第2図形57の向きとに基づいて算出される。
【0104】
次に、ゲーム装置1において行われるゲーム処理の詳細を、図11〜図16を用いて説明する。図11は、ゲーム装置1において実行されるゲーム処理の流れを示すメインフローチャートである。電源ボタン14Fが押下されることによってゲーム装置1の電源が投入されると、ゲーム装置1のCPU31は、各種アプリケーションの起動を指示するためのメニュー画面(例えば、各アプリケーションを表す画像(アイコン)を含む画像)を表示する。ユーザは、メニュー画面においてゲームプログラム61を起動する指示、例えば、ゲームプログラム61のアイコンを選択する指示を行う。メニュー画面において、ゲームプログラム61の起動が指示されると、CPU31は、メインメモリ32等の初期化を行った後、図11に示す処理を行うためのゲームプログラム61の実行を開始する。本実施形態においては、ゲームプログラム61の実行によって、CPU31が請求項に記載の各手段として機能することとなる。つまり、ゲームプログラム61は、請求項に記載の各手段としてCPU31を機能させる。
【0105】
まずステップS1において、CPU31は、撮像画像が取得されたか否かを判定する。すなわち、カメラ(本実施形態では外側カメラ25)から撮像画像のデータが送られてきたか否かを判定する。また、撮像画像のデータがカメラから送られてきた場合、CPU31は、当該データを撮像画像データ62としてメインメモリ32に記憶する。なお、本実施形態においては、ステップS1〜S7の処理ループは、1フレーム時間(1/60秒)に1回の割合で実行されるのに対して、カメラはそれよりも少ない頻度(数フレーム時間に1回程度)で撮像画像を送るものとする。ただし、他の実施形態においては、1フレーム時間(または1フレーム時間より短い時間)に1回の割合で撮像画像が取得されてもよい。ステップS1の判定結果が肯定である場合、ステップS2の処理が実行される。一方、ステップS1の判定結果が否定である場合、ステップS2からS4の処理がスキップされて後述するステップS5の処理が実行される。
【0106】
ステップS2において、CPU31は、ステップS1で取得された撮像画像に対する認識処理を実行する。認識処理においては、撮像画像内にマーカ51の画像が含まれるか否かが判定され、マーカ51の画像が含まれる場合には撮像画像内におけるマーカ51の向きおよび位置が算出される。以下、図12を参照して、認識処理の詳細を説明する。
【0107】
図12は、図11に示す認識処理(ステップS2)の流れを示すフローチャートである。認識処理においては、まずステップS11において、CPU31は、上述の領域検出処理を実行する、すなわち、第1図形55を含む領域(対象領域)を検出する。上述のように、ステップS11の領域検出処理は低い精度で行われる。具体的には、CPU31は、撮像画像において画素3つ分の間隔で得られる画素値に基づいて、当該撮像画像から対象領域を検出する。より具体的には、CPU31は、撮像画像データ62をメインメモリ32から読み出し、画像データが示す各画素の各画素値から、画素3つ分の間隔で画素値を抽出する。そして、抽出した画素値に基づいて対象領域を検出する。図13は、撮像画像においてステップS11の処理において画素値が参照される画素を示す図である。図13においては、斜線で示される画素が、画素値が参照される画素である。
【0108】
また、本実施形態では、隣接する画素の画素値(本実施形態では輝度値。ただし、色値でもよい)の差を用いて対象領域が検出される。すなわち、本実施形態では、黒色の第1図形55の周囲には白い枠が形成される(図6参照)ので、隣接する画素よりも輝度値が所定値以上低い画素を検出することで、第1図形55の輪郭部分の画素を検出することができる。なお、上記「隣接する画素」とは、画素値が参照される各画素の間で隣接する画素である。図13の例で言えば、斜線で示されるある画素と、画素3つ分離れた位置の(斜線で示される)画素とが、上記「隣接する画素」である。輪郭部分の画素を検出した後、CPU31は、検出された画素のうちで隣接する画素同士を1つの集合とすることで、1つの対象領域を特定する。特定された対象領域を形成する各画素を示すデータは、対象領域毎に1つの対象領域データ64としてメインメモリ32に記憶される。なお、特定された対象領域が大きすぎたり小さすぎたりする場合には、CPU31は当該対象領域を除外し、当該対象領域を示す対象領域データ64を記憶しないようにしてもよい。上記ステップS11の次にステップS12の処理が実行される。
【0109】
なお、上記ステップS11における対象領域の検出方法はどのような方法であってもよい。例えば他の実施形態においては、CPU31は、画素値を所定の閾値で2値化することによって第1図形55の輪郭を検出し、検出された輪郭内の領域を対象領域としてもよい。また、他の実施形態においては、CPU31は、パターンマッチングの手法によって対象領域を検出してもよい。すなわち、第1図形55のパターン画像を予めメインメモリ32に記憶しておき、撮像画像の領域内から当該パターン画像と一致(類似)する領域を検出することによって、対象領域を検出してもよい。この場合、パターンマッチングの処理は、従来の拡張現実感技術における処理と同様であってもよい。
【0110】
また、本実施形態では、上記ステップS11ではCPU31は第1図形55の領域を対象領域として検出したが、他の実施形態においては、第1図形55および第2図形57を含むマーカ51の領域を対象領域として検出するようにしてもよい。
【0111】
また、本実施形態では、上述のように低い精度で対象領域の検出が行われ、対象領域の検出処理では、マーカ51の第1図形55とその周囲の白枠との輝度差を用いている。そのため、マーカ51の白枠が細すぎると低い精度では撮像画像において白枠が現れず、対象領域を正確に検出することができなくなるおそれがある。したがって、マーカ51の白枠は、低い精度でも撮像画像上に現れるように、ある程度の太さに設定されることが好ましい。なお、白枠の太さは、ゲーム装置1の使用時におけるカメラからマーカ51までの距離として想定される距離の範囲や、撮像画像の解像度や、マーカ51の大きさ等に応じて適宜決められる。
【0112】
ステップS12において、CPU31は、ステップS11で対象領域が検出されたか否かを判定する。ステップS11において対象領域が検出されなかった場合、ステップS13の処理が実行される。一方、ステップS11において対象領域が1つ以上検出された場合、ステップS14の処理が実行される。
【0113】
ステップS13において、CPU31は、マーカ51の認識が失敗したと判断する。すなわち、CPU31は、認識失敗を示すデータを認識結果データ69としてメインメモリ32に記憶する。ステップS13の後、CPU31は認識処理を終了する。
【0114】
ステップS14において、CPU31は、ステップS11で検出された対象領域のうち1つを選択する。なお、ステップS11で複数の対象領域が検出される場合、ステップS14〜S16の処理ステップが繰り返し実行される。この場合、ステップS14においては、当該処理ステップにおいてまだ選択されていない対象領域が選択される。ステップS14の次にステップS15の処理が実行される。
【0115】
ステップS15において、CPU31は、ステップS14で選択された対象領域に対してマーカ検出処理を実行する。マーカ検出処理は、対象領域からマーカ51を検出し、マーカ51の位置および向きを算出する処理である。以下、図14を参照して、マーカ検出処理の詳細を説明する。
【0116】
図14は、図12に示すマーカ検出処理(ステップS15)の流れを示すフローチャートである。マーカ検出処理においては、まずステップS21において、CPU31は、中程度の精度で第1図形55の輪郭を抽出する。ここで、「中程度の精度」とは、上記ステップS11の処理における精度よりは高く、後述するステップS23およびS25の処理における精度よりは低いという意味である。つまり、本実施形態では、マーカ検出処理において、2段階の精度で処理が行われ、ステップS21の処理は低い方の精度で行われる。以下、ステップS21の処理の詳細を説明する。
【0117】
上記ステップS21の処理は、ステップS11で検出された対象領域内を処理対象とするが、上記ステップS11の処理とステップS21の処理とでは処理を行う精度が異なる。そこで、ステップS21においては、CPU31はまず、ステップS11で検出された対象領域に対応する、ステップS21の処理対象となる領域を決定する。すなわち、ステップS11で得られる対象領域データ64により示される各画素から、ステップS21の処理対象となる領域を決定する。より具体的には、CPU31は、低精度の処理(ステップS11)で参照される画素(図13に示す斜線の画素)と、その周囲8つの画素(図13に示す一点鎖線で囲まれる画素)とを関連付けておく。そして、ステップS11で検出された対象領域内の画素と、当該画素に対応する周囲8つの画素とからなる領域を、ステップS21の処理対象の領域とする。図15は、ステップS21の処理対象となる領域の一例を示す図である。図15においては、ステップS11で画素Q1〜Q3が検出され、画素Q1〜Q3よりも右側の領域が対象領域として検出された場合を想定する。この場合、図15に示す一点鎖線よりも右の領域A1がステップS21の処理対象の領域となる。
【0118】
処理対象となる領域が決定されると、CPU31は、中程度の精度で第1図形55の輪郭を抽出する。本実施形態では、この輪郭の抽出処理は、撮像画像における各画素の画素値のうち、画素2つ分の間隔で得られる画素値に基づいて行われる。図16は、撮像画像においてステップS21の処理において画素値が参照される画素を示す図である。例えば図15に示す領域A1がステップS21の処理対象の領域となる場合、図16に示す斜線で示される画素が、輪郭の抽出処理において画素値が参照される画素である。
【0119】
なお、ステップS21における輪郭の抽出処理は、上記ステップS11における対象領域の検出方法と同様、輝度値の差を用いた方法で行われてもよいし、それ以外の方法で行われてもよい。ステップS21で抽出された輪郭を形成する各画素のデータは、輪郭データ65としてメインメモリ32に記憶される。ステップS21の次にステップS22の処理が実行される。
【0120】
ステップS22において、CPU31は、ステップS21で抽出された輪郭が第1図形55を表すか否かを判定する。本実施形態では、ステップS22の判定は、CPU31は上記輪郭が四角形を表すか否かによって行われる。すなわち、CPU31は、輪郭データ65をメインメモリ32から読み出し、上記輪郭を形成する各画素を直線で近似することによって、当該各画素で形成される多角形を算出する。そして、算出された多角形が四角形となるか否かによって、上記輪郭が第1図形55を表すか否かを判定する。ステップS22の判定結果が肯定となる場合、ステップS23の処理が実行される。一方、ステップS22の判定結果が否定となる場合、後述するステップS30の処理が実行される。
【0121】
なお、上記ステップS22では、抽出された輪郭が第1図形55を表すか否かの判定は、当該輪郭が四角形となるか否かによって行われたが、他の方法によって行われてもよい。例えば、他の実施形態において、マーカ51の大きさが既知である場合には、上記の判定は、抽出された輪郭の大きさ(面積や周の長さ)が所定値以上であるか否か等によって行われてもよい。
【0122】
ステップS23において、CPU31は、高精度で内部図形56の領域を検出する。ここで、「高精度」とは、上記ステップS11の処理およびステップS21の処理における精度より高いという意味である。本実施形態では、CPU31は、画素1つ分の間隔で画素値を参照して、つまり、ステップS23の処理対象となる領域内の全画素の画素値を参照して、内部図形56の領域を検出する。
【0123】
ステップS23の処理対象となる領域は、ステップS21で抽出された輪郭が表す領域内を対象として行われるが、上記ステップS21の処理とステップS23の処理とでは処理を行う精度が異なる。そこで、ステップS23においては、ステップS21と同様、処理対象となる領域を決定する必要がある。この処理対象となる領域の決定は、ステップS21と同様の方法で行うことができる。すなわち、CPU31は、中精度の処理(ステップS21)で参照され得る基準画素と、それに対応する3つの画素(例えば、基準画素の右、下、および右下の画素)とを関連付けておく。そして、ステップS21で抽出された輪郭内に含まれる基準画素と、当該基準画素に対応する3つの画素とをステップS23の処理対象とする。
【0124】
処理対象となる領域が決定されると、CPU31は、高精度で内部図形56の領域を検出する。ここで、内部図形56の領域の検出は、上記ステップS11における対象領域の検出方法と同様、輝度値の差を用いた方法で行われてもよいし、それ以外の方法で行われてもよい。なお、ステップS23で検出すべき内部図形56は白色でその周囲が黒色であるので、輝度値の差を用いる方法を採用する場合には、CPU31は、隣接する画素よりも輝度値が所定値以上高い画素を検出することが好ましい。また、本実施形態では、CPU31は、内部図形56の領域を表す情報として、内部図形56の輪郭を表す(複数の)画素を検出するものとする。ステップS23で検出された内部図形56の領域を示す各画素のデータは、内部領域データ66としてメインメモリ32に記憶される。また、ステップS23において複数の内部図形56が検出される場合は、1つの内部図形につき1つの内部領域データ66がメインメモリ32に記憶される。以上のステップS23の次にステップS24の処理が実行される。
【0125】
なお、他の実施形態においては、上記ステップS23において、CPU31は、検出された領域の形状および/または大きさに関して条件を設定しておき、条件を満たさない領域を除外するようにしてもよい。すなわち、CPU31は、輝度差を用いて検出された領域のうち、形状が円形でない領域、および、大きさが所定の範囲以内でない領域については、内部領域データ66を記憶しないようにしてもよい。
【0126】
ステップS24において、CPU31は、ステップS23で所定個数の領域が検出されたか否かを判定する。ここで、所定個数とは、第1図形55内に描かれた内部図形56の数、すなわち8個である。具体的には、CPU31は、メインメモリ32に記憶された内部領域データ66の数が8個であるか否かを判定する。ステップS24の判定結果が肯定となる場合、ステップS25の処理が実行される。一方、ステップS24の判定結果が否定となる場合、後述するステップS30の処理が実行される。
【0127】
ステップS25において、CPU31は、内部図形56の中心位置を高精度で算出する。内部図形56の中心位置は、ステップS23で検出された領域、すなわち、内部図形56の輪郭を表す各画素に基づいて算出される。中心位置の具体的な算出方法はどのような方法であってもよく、例えば、内部図形56の輪郭を表す各画素の位置座標の平均値を算出することで中心位置を得ることができる。本実施形態においては、CPU31は、内部領域データ66をメインメモリ32から読み出し、内部領域データ66が示す各画素の平均値を算出する。なお、内部領域データ66は8個記憶されているので、各データ毎に平均値を算出する処理が行われる。算出された8種類の平均値を示すデータは、中心位置データ67としてメインメモリ32に記憶される。ステップS25の次にステップS26の処理が実行される。
【0128】
ステップS26において、CPU31は、ステップS25で算出された中心位置から、マーカ51の位置を表す4つの頂点の位置を算出する。ここで、4つの頂点とは、8つの内部図形56が頂点および辺の中点となる四角形の頂点である。以下、図17および図18を参照して、4つの頂点の算出方法を説明する。
【0129】
図17は、第1図形を表す撮像画像の一例を示す図である。図17において、点P1〜P8は、8つの内部図形56の中心位置として上記ステップS26で算出された位置を表す点である。ステップS26においては、CPU31は、まず、8つの中心位置のうち3つを通る4本の直線L1〜L4を算出する。具体的には、CPU31は、点P1〜P3を通る直線L1と、点P1,P4,およびP6を通る直線L2と、点P6〜P8を通る直線L3と、点P3,P5,およびP8を通る直線L4とを算出する。各直線L1〜L4は、最小二乗法等を用いて3点を通る近似直線としてそれぞれ算出することができる。
【0130】
図18は、図17に示す各直線L1〜L4によって算出される4つの頂点P11〜P14を示す図である。各直線L1〜L4が算出されると、CPU31は、各直線L1〜L4によって形成される四角形の頂点P11〜P14を算出する。すなわち、CPU31は、直線L1と直線L2との交点P11、直線L1と直線L4との交点P12、直線L2と直線L3との交点P13、および、直線L3と直線L4との交点P14をそれぞれ算出する。以上によって、4つの頂点P11〜P14を算出することができる。算出された4つの頂点の位置を示すデータは、頂点データ68としてメインメモリ32に記憶される。ステップS26の次にステップS27の処理が実行される。
【0131】
上記ステップS26で4つの頂点を算出することによって、マーカ51内の4点の位置を算出できたことになる。ここで、マーカ51内の4点の位置によって、マーカ51の位置および向きを算出することができる。ただし、上記4点の位置は正方形の各頂点であり、マーカ51が90°、180°または270°回転した状態と回転しない状態とで同じ値となる。そのため、上記4点の位置では、上下左右の4方向に関するマーカ51の向きを特定することができず、マーカ51の向きを一意に特定することができない。そこで、CPU31は、下記ステップS27〜S29の処理によって、上下左右の4方向に関するマーカ51の向きを特定し、マーカ51の向きを一意に特定する。なお、マーカ51の上下左右の4方向のうちどの方向から撮像するかが予め決まっている(既知である)場合や、上下左右の4方向に関するマーカ51の向きを意識しない場合(マーカ51が90°、180°または270°回転した状態と回転しない状態とを同じ状態とみなす場合)には、CPU31は、下記ステップS27〜S29の処理を省略し、上記4点の位置を認識結果として用いてもよい。
【0132】
ステップS27において、CPU31は、第1図形55の周囲の領域から第2図形57を検出する。本実施形態においては、CPU31は、ステップS26で算出された4つの頂点で形成される四角形を基準として、当該四角形の上下左右の4方向に位置する4つの所定領域内から第2図形57を検出する。第2図形57は第1図形55の隣に位置しており(図6参照)、4つの頂点によって第1図形55の位置が特定されているので、上記4つの所定領域について検出処理を行えば、第2図形57を検出することができるからである。
【0133】
図19は、ステップS27で設定される所定領域の一例を示す図である。図19においては、直線L5〜L8で囲まれる領域αが上記所定領域である。所定領域αは、4つの頂点P11〜P14で形成される四角形の4辺のうち、辺P11−P12の側に設定される所定領域である。また、直線L5〜L8は、それぞれ、4つの頂点P11〜P14で形成される四角形に対して所定領域αが位置する側を上方向とした場合における所定領域αの下辺、上辺、右辺、および左辺である。所定領域αの4辺である直線L5〜L8は、例えば次のように設定することができる。下辺である直線L5は、直線L1に平行で、直線L1に垂直な方向に直線L1から所定の第1距離だけ離れた位置に設定される。また、上辺である直線L6は、直線L1に平行で、直線L1に垂直な方向に直線L1から所定の第2距離(第1距離よりも大きい)だけ離れた位置に設定される。また、右辺である直線L7は、頂点P11〜P14で形成される四角形の右辺である直線L4に平行で、直線L1の方向に関して直線L4から所定の第3距離だけ離れた位置に設定される。左辺である直線L8は、頂点P11〜P14で形成される四角形の左辺である直線L2に平行で、直線L1の方向に関して直線L2から所定の第4距離だけ離れた位置に設定される。以上のようにして、所定領域αを算出することができる。また、他の3つの所定領域についても所定領域αと同様に算出することができる。
【0134】
上記4つの所定領域内から第2図形57を検出する方法はどのような方法であってもよいが、本実施形態においては、パターンマッチングの手法によって第2図形57を検出する。すなわち、第2図形57のパターン画像を予めメインメモリ32に記憶しておき、CPU31は、各所定領域内から当該パターン画像と一致(類似)する領域を検出することによって第2図形57を検出する。また、第2図形57を検出する処理の精度は、どのような精度で行われてもよい。なお、この処理は、処理対象となる範囲を上記所定領域に絞って行うことができるので、必ずしも高い精度で行う必要はない。
【0135】
上記ステップS27の具体的な処理としては、CPU31はまず、頂点データ68をメインメモリ32から読み出して、上記4つの頂点に基づいて上記4つの所定領域を特定する。次に、第2図形57のパターン画像をメインメモリ32から読み出して、特定した4つの所定領域内から、当該パターン画像と一致する部分を検出する。ステップS27の処理の次にステップS28の処理が実行される。
【0136】
ステップS28において、CPU31は、上記ステップS27において第2図形57が検出されたか否かを判定する。すなわち、上記4つの所定領域のうちに、第2図形57が検出された領域があったか否かを判定する。ステップS28の判定結果が肯定となる場合、ステップS29の処理が実行される。一方、ステップS28の判定結果が否定となる場合、後述するステップS30の処理が実行される。
【0137】
ステップS29において、CPU31は、(上下左右の4方向に関する)マーカ51の向きを特定する。ここで、上記4つの頂点で形成される四角形から見て、第2図形57が検出された所定領域がある方向(当該四角形から見て所定領域がどちらの方向にあるか)がわかれば、撮像画像内において第1図形55に対して第2図形57が配置される方向がわかったことになるので、マーカ51の向きを特定することができる。つまり、ステップS29においては、撮像画像内において第1図形55に対して第2図形57が配置される方向に応じてマーカ51の向きが特定される。
【0138】
なお、本実施形態においては、上記4つの頂点を結ぶ2つのベクトルV1およびV2によってマーカ51の位置および向きを表すものとする。具体的には、ベクトルV1は、第1図形55に対して第2図形57が配置される方向を上方向とした場合において、左上の頂点を始点とし、右上の頂点を終点とするベクトルとする。また、ベクトルV2は、上記の場合において、左下の頂点を始点とし、右下の頂点を終点とするベクトルとする。上記のようにベクトルV1およびV2を想定した場合において、第2図形57が検出された所定領域が、例えば図19に示す直線L1の側に位置する場合、図19に示す直線L1が上記4つの頂点で形成される四角形の上辺となる。したがって、この場合、ベクトルV1は、点P11を始点とし点P12を終点とするベクトルとして算出され、ベクトルV2は、点P13を始点とし点P14を終点とするベクトルV2として算出される。これらベクトルV1およびV2によって、マーカ51の位置および向きを表すことができる。
【0139】
上記ステップS29においては、CPU31は、上記4つの頂点で形成される四角形に対する第2図形57が検出された所定領域の方向に応じた向きとなるように、当該4つの頂点を用いてベクトルV1およびV2を算出する。算出された各ベクトルV1およびV2を示すデータはメインメモリ32に記憶される。以上のステップS29の後、CPU31はマーカ検出処理を終了する。
【0140】
一方、ステップS30において、CPU31は、今回のマーカ検出処理の処理対象である対象領域には第1図形55が無いと判断する。この場合、今回のマーカ検出処理におけるステップS21〜S28で算出された各種データ65〜68はメインメモリ32から削除される。ステップS30の後、CPU31はマーカ検出処理を終了する。
【0141】
上記マーカ検出処理によれば、CPU31は、対象領域の画像から複数の内部図形をそれぞれ検出し(ステップS23)、各内部図形の中心位置をそれぞれ算出することによってマーカ51を検出する(ステップS25およびS26)。このように、内部図形の中心位置を用いることによって、撮像画像にぶれが生じている場合でもマーカ51の位置を正確に算出することができる。
【0142】
また、上記ステップS21〜S23の一連の処理によれば、対象領域内から第1図形55の輪郭が抽出され(ステップS21)、抽出された輪郭が第1図形55を表すか否かが判定される(ステップS22)。そして、抽出された輪郭が第1図形55を表す場合に、当該輪郭に対応する領域内から複数の内部図形56が検出される(ステップS23)。つまり、第1図形55を表すと判定される輪郭に対応する領域内から内部図形56が検出される。これによれば、内部図形56を検出する処理の前に、第1図形55を含まない対象領域を除くことができるので、内部図形56を検出する処理を無駄に行うことを防止することができ、認識処理を効率良く行うことができる。さらに、本実施形態によれば、輪郭の抽出処理は、内部図形56を検出する処理よりも高速に行うことができるので、ゲーム装置1は、認識処理をより短時間で行うことができる。
【0143】
また、上記ステップS23〜S25の一連の処理によれば、対象領域において複数の内部図形56の領域がそれぞれ検出され(ステップS23)、検出された領域の個数が所定個数であるか否かが判定される(ステップS24)。そして、検出された領域の個数が所定個数である場合、当該領域の中心位置が算出される(ステップS25)。つまり、所定個数の領域が検出された対象領域について、内部図形56の中心位置が算出される。これによれば、内部図形56の中心位置を算出する処理の前に、第1図形55を含まない対象領域を除くことができるので、中心位置を算出する処理を無駄に行うことを防止することができ、認識処理を効率良く行うことができる。
【0144】
また、上記マーカ検出処理においては、内部図形56の検出処理(ステップS23)を行う精度と、内部図形56の中心位置の算出処理(ステップS25)を行う精度とは同じであった。ここで、他の実施形態においては、CPU31は、内部図形56の中心位置の算出処理を行う精度よりも低い精度で内部図形56の検出処理を行うようにしてもよい。つまり、内部図形56の検出処理に用いられる画素値の間隔を、中心位置の算出処理において用いられる画素値の間隔よりも大きくしてもよい。これによれば、内部図形56の検出処理をより高速に行うことができ、認識処理をより高速に行うことができる。なお、このとき、内部図形56の検出処理は、第1図形55の輪郭の抽出処理(ステップS21)と同じ精度で行われてもよいし、当該抽出処理よりも高い精度で行われてもよい。
【0145】
図12の説明に戻り、ステップS15のマーカ検出処理の次にステップS16の処理が実行される。ステップS16において、CPU31は、ステップS11で検出された全ての対象領域についてマーカ検出処理を行ったか否かを判定する。ステップS16の判定結果が肯定となる場合、ステップS17の処理が実行される。一方、ステップS16の判定結果が否定となる場合、上記ステップS14の処理が再度実行される。以降、ステップS16において全ての対象領域についてマーカ検出処理を行ったと判定されるまで、ステップS14〜S16の処理が繰り返し行われる。これによって、ステップS11で検出された各対象領域についてマーカ検出処理を行われる。
【0146】
ステップS17において、CPU31は、上記ステップS15のマーカ検出処理においてマーカ51が検出されたか否かを判定する。具体的には、CPU31は、メインメモリ32に認識結果データ69が記憶されているか否かによってマーカ51が検出されたか否かを判定する。ステップS17の判定結果が肯定となる場合、ステップS18の処理が実行される。一方、ステップS17の判定結果が否定となる場合、上記ステップS13の処理が再度実行される。つまり、ステップS17の判定結果が否定となる場合、マーカ51の認識が失敗したと判断され、認識処理が終了する。
【0147】
ステップS18において、CPU31は、ステップS15のマーカ検出処理で得られたマーカ51の位置および向きを示す情報を認識結果として記憶する。すなわち、マーカ検出処理のステップS29で算出されたベクトルV1およびV2を示すデータを、認識結果データ69としてメインメモリ32に記憶する。ステップS18の後、CPU31は認識処理を終了する。
【0148】
なお、1つの撮像画像からステップS11で検出される複数の対象領域に対して、マーカ検出処理によってベクトルV1およびV2が算出される可能性がある。つまり、1回の認識処理において、ベクトルV1およびV2の組がメインメモリ32に複数組記憶される場合がある。この場合、いずれか1組が正しいマーカ51を表し、他の組は誤検出によって算出されたものである。したがって、上記の場合、CPU31は、マーカ検出処理において得られた各図形(第1図形55、内部図形56、第2図形57)の形状および配置等に基づいて、正しいマーカ51を表すベクトルV1およびV2を選出するようにしてもよい。例えば、ステップS21で抽出される第1図形55の輪郭や、ステップS23で検出される各内部図形56の配置や、ステップS27で検出される第2図形57の、パターン画像に対する類似度等に基づいて、正しいベクトルV1およびV2を選出することができる。CPU31は、選出されたベクトルV1およびV2を示すデータを認識結果データ69としてメインメモリに記憶する。これによって、認識処理において(誤検知によって)複数組のベクトルV1およびV2が得られた場合でも、正しい認識結果を得ることができる。なお、他の実施形態においては、1回の認識処理において複数組のベクトルV1およびV2が得られた場合には、CPU31は、認識が失敗したと判断するようにしてもよい。
【0149】
上記認識処理によれば、撮像画像において第1の間隔(画素3つ分の間隔)で得られる画素値に基づいて、対象領域を検出する処理が行われる(ステップS11)。そして、対象領域内の撮像画像において第1の間隔よりも小さい第2の間隔(画素1つまたは2つ分の間隔)で得られる画素値に基づいて、当該対象領域の画像から第1図形55を検出する処理が行われる。これによれば、対象領域を検出する処理を短時間で行うことによって、認識処理を高速に行うことができる。また、第1図形55の検出処理は高精度で行われるので、第1図形55を高精度で正確に検出することができる。つまり、上記認識処理によれば、撮像画像から第1図形55を検出する処理を高速かつ精度良く行うことができる。
【0150】
なお、本実施形態では、ステップS2の認識処理が1フレーム時間内に実行され、ステップS1〜S7の処理ループ内で認識処理が完了されるものとした。ここで、撮像画像の解像度やCPU31等の処理能力によっては、1回の認識処理が1フレーム時間で完了することが困難な場合もある。そのため、他の実施形態においては、認識処理は、1フレーム時間を周期として実行される表示処理(ステップS5)等の処理とは必ずしも同じ周期で実行されなくてもよい。つまり、1回のステップS2の処理では、認識処理全体のうちの一部の処理だけが実行されてもよい。この場合、1回のステップS2で実行される処理は、ステップS1〜S7の一連の処理が1フレーム時間内に完了することができるような処理量に調整される。換言すれば、認識処理は、ステップS1〜S7(S2を除く)の処理ループとは別に並列的に実行され、CPU31がアイドル状態のときに実行されてもよい。
【0151】
図11の説明に戻り、ステップS2の認識処理の次にステップS3の処理が実行される。ステップS3において、CPU31は、ステップS2の認識処理が成功したか否かを判定する。ステップS3の判定は、メインメモリ32に記憶されている認識結果データ69がマーカ51の位置および向きを示すか否かによって行うことができる。ステップS3の判定結果が肯定となる場合、ステップS4の処理が実行される。一方、ステップS3の判定結果が否定となる場合、ステップS4の処理がスキップされて後述するステップS5の処理が実行される。
【0152】
ステップS4において、CPU31は、ステップS2の認識結果に基づいて、仮想カメラの位置および姿勢を算出する。仮想カメラは、仮想空間の画像を生成する場合における視点、視線方向、および視野角を定めるために仮想空間に設定されるものである。ステップS4においては、CPU31は、まず、ステップS2の認識結果であるマーカ51の位置および向きから、ゲーム装置1(カメラ)とマーカ51との位置関係を算出する。この位置関係は、例えば、ゲーム装置1およびマーカ51の一方を基準としたときの他方の3次元の位置および姿勢として表される。次に、CPU31は、上記位置関係に基づいて仮想空間における仮想カメラの位置および姿勢を算出する。仮想カメラの位置および姿勢は、仮想空間における仮想カメラと、仮想空間におけるマーカ51に対応する位置との位置関係が、現実空間におけるゲーム装置1とマーカ51との位置関係に一致するように算出される。なお、ステップS4における処理は、例えば上述の非特許文献1に記載されているような従来の拡張現実感技術で用いられる処理と同様の方法であってもよい。また、上記ステップS2における認識処理が失敗であった場合、CPU31は、仮想カメラの位置および姿勢の算出を行わず、認識処理が最後に成功した時に算出された仮想カメラの位置および姿勢を用いる。ステップS4の次にステップS5の処理が実行される。
【0153】
ステップS5において、CPU31はゲーム制御処理を実行する。ゲーム制御処理は、ユーザ(プレイヤ)の入力等に応じて仮想空間内のオブジェクトを動作させること等によってゲームを進行させる処理である。具体的には、ゲーム制御処理には、ユーザの入力に従ってプレイヤキャラクタの動作を制御したり、ゲームプログラム61において定められた制御ルールに従ってオブジェクト(図4に示す大砲52等)の動作を制御したりする処理が含まれる。また、CPU31は、ゲーム装置1に設けられた各種入力装置(タッチパネル13、各操作ボタン14A〜14L)に対する操作結果の他、上記認識結果データ69をゲーム入力として用いてもよい。例えば、認識結果データ69から算出される仮想カメラの位置がプレイヤキャラクタの位置として用いられてもよい。ステップS5の次にステップS6の処理が実行される。
【0154】
ステップS6において、CPU31は、撮像画像と仮想空間における仮想オブジェクトの画像(仮想画像)とを合成した合成画像を生成して表示装置(上側LCD22)に表示する。すなわち、CPU31は、まず、ステップS4で設定された仮想カメラの位置および姿勢に基づいて仮想画像を生成する。これによって、仮想カメラの位置から見た仮想オブジェクトの画像が生成される。次に、CPU31は、生成された仮想オブジェクトの画像を撮像画像に対して合成し、合成画像を生成・表示する。なお、合成画像の生成に用いられる撮像画像は、取得された最新の撮像画像でもよいし、認識処理が成功であった最新の撮像画像でもよい。なお、合成画像の生成処理は、従来における拡張現実感技術と同様の処理であってもよい。ステップS6の次にステップS7の処理が実行される。
【0155】
ステップS7において、CPU31は、ゲームを終了するか否かを判定する。ステップS7の判定は、例えば、ゲームがクリアされたか否か、ゲームオーバーとなったか否か、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS7の判定結果が否定である場合、ステップS1の処理が再度実行される。以降、ステップS7でゲームを終了すると判定されるまで、ステップS1〜S7の処理ループが繰り返し実行される。一方、ステップS7の判定結果が肯定である場合、CPU31は、図11に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【0156】
上記ゲーム処理によれば、撮像画像から第1図形55の領域を検出する対象検出処理(ステップS11)と、検出した領域から第1図形55を含むマーカ51を検出するマーカ検出処理(ステップS15)とで、処理の精度を変えることによって、認識処理を高速かつ精度良く行うことができる。また、第1図形55内の内部図形56の中心位置を算出し、中心位置に基づいてマーカ51上の位置(4つの頂点)を算出することによって、撮像画像にぶれが生じている場合でも、マーカ51の位置を正確に算出することができる。
【0157】
なお、上記ステップS3〜S6の一連の処理によれば、マーカ51が検出された場合(ステップS3でYesの場合)、マーカ51と外側カメラ25との位置関係が、認識処理における処理結果(マーカ51の検出結果)に基づいて算出される(ステップS4)。そして、仮想空間に配置される仮想オブジェクトを表す仮想画像が上記位置関係に基づいて生成され、撮像画像に対して仮想画像を合成した画像が表示装置に表示される(ステップS5)。このように、本実施形態では、いわゆる拡張現実感技術において、上述の認識処理を用いることができる。ここで、本実施形態のように拡張現実感技術を用いる場合には、認識処理においてマーカ51の位置および向きを正確に算出することが好ましい。また、本実施形態のようなゲーム処理においては、処理が遅れることによってゲーム操作に対する応答性が悪くなったり、ゲーム進行が遅れたりすることは好ましくなく、認識処理は高速に行われることが好ましい。したがって、拡張現実感技術を用いたゲーム処理には、高速でかつ精度良く行うことができる本実施形態における認識処理が特に有効である。
【0158】
[変形例]
上記実施形態は本発明を実施する一例であり、他の実施形態においては例えば以下に説明する構成で本発明を実施することも可能である。
【0159】
(中心位置から4つの頂点を算出する方法に関する変形例)
また、上記ステップS24においては、CPU31は、ステップS23で検出された内部図形56の領域の個数が所定個数であるか否かを判定した。ここで、本実施形態では、8個の内部図形56の中心位置から4本の直線を算出することで4つの頂点を特定しているので、8個全ての内部図形56が検出されなくても4つの頂点を算出することは可能である。例えば、図17における中心点P1〜P8のいずれか1つがなくても、4本の直線L1〜L4を算出することは可能である。したがって、他の実施形態においては、ステップS24において、CPU31は、ステップS23で検出された内部図形56の領域の個数が所定範囲の個数であるか否かを判定するようにしてもよい。ここで、所定範囲は、内部図形の個数(8個)を含む範囲であり、例えば、7個から8個の範囲である。
【0160】
なお、上記実施形態において、7個の中心位置から4本の直線を算出する場合には、2個の中心位置から1本の直線を特定する必要がある。この場合、誤った組み合わせの2個の中心位置から誤った直線が算出される(例えば、中心点P3と中心点P4を通る直線が算出される)ことを防止する必要がある。そのため、例えば、CPU31は、以下の条件を満たすように、7個の中心位置から4本の直線を算出するようにしてもよい。
(条件1)7個の中心位置のうち2つまたは3つの中心位置を通る。
(条件2)第1図形55の輪郭を表す4本の直線のいずれかと略平行である。
(条件3)第1図形55の輪郭を表す4本の直線のいずれかから所定距離内にある(第1図形55の中心付近を通らない)。
なお、上記(条件2)および(条件3)において、第1図形55の輪郭を表す4本の直線は、上記ステップS22で算出されるものを用いてもよい。上記条件1〜3を満たす直線を算出することで、7個の中心位置から4本の直線を算出することができる。
【0161】
以上のように、一直線上に配置される3つ以上の内部図形が描かれた第1図形55を撮像対象とする一方、2つ以上の内部図形の中心位置から近似直線を算出し、この近似直線によってマーカ51の位置(4つの頂点の位置)を算出するようにしてもよい。これによれば、内部図形の数に冗長性を持たせることによって、全ての内部図形を検出できない場合でも4つの頂点の位置を算出することができる。
【0162】
(マーカに関する変形例)
上記実施形態においては、8個の内部図形56が描かれた第1図形55を含むマーカ51を用いる場合を例として説明したが、本発明において用いることができるマーカはこれに限らない。例えば、他の実施形態においては、内部図形56の数は8個に限らない。図20は、本実施形態の変形例におけるマーカを示す図である。図20に示すマーカ73は、12個の内部図形56を有する第1図形74と、図6と同様の第2図形57とを含む。また、第1図形74内の12個の内部図形56は、(正方形)の4頂点と4辺の位置に配置されている。他の実施形態においては、図6に示すマーカ51に代えて、図20に示すマーカ73を用いるようにしてもよい。マーカ73を用いる場合、上述のステップS26では、CPU31は、3つまたは4つの中心位置から上記直線L1〜L4を算出するようにしてもよい。これによれば、内部図形の数に冗長性を持たせることができるので、CPU31は、全ての内部図形を検出できない場合でも4つの頂点の位置を算出することができる。
【0163】
また、上記実施形態においては、内部図形56は全て同じ色(白色)としたが、他の実施形態においては、第1図形55内における位置に応じて内部図形56の色を異ならせるようにしてもよい。図21は、本実施形態の他の変形例におけるマーカを示す図である。図21に示すマーカ75は、図20に示す第1図形74と同様、12個の内部図形56が描かれた第1図形76を含む。ここで、第1図形76においては、四角形(正方形)の4辺の位置に配置される各内部図形56の色は、辺毎に異なっている(図21では、色の違いを斜線の方向および間隔で表す)。他の実施形態においては、図6に示すマーカ51に代えて、図21に示すマーカ75を用いるようにしてもよい。この場合、CPU31は、第2図形を用いずにマーカ75の向き(上下左右の4方向に関する向き)を算出することができる。すなわち、CPU31は、内部図形56の色を検知することによって、マーカ75の上下左右の4方向に関する向きを特定することができる。
【0164】
また、上記実施形態においては、第1図形55を検出しやすくする目的で、マーカ51には黒色の第1図形55の周囲に白色の枠が設けられた。そのため、認識処理による検出対象はマーカ51内の第1図形55であった。ここで、他の実施形態においては、白色の枠はなくてもよく、マーカ51全体が認識処理による検出対象とされてもよい。
【0165】
また、上記実施形態では、マーカ51は、第1図形55と異なる位置に第2図形57を含んでいた。CPU31は、第1図形55に対して第2図形57が配置される方向に基づいて第1図形55の向き(上下左右の4方向に関する向き)を特定した(S29)。ここで、他の実施形態においては、第1図形の内部に第2図形が描かれたマーカを用いてもよい。例えば、図6に示すマーカ51において、第1図形55の内部の8個の内部図形56によって表される四角形の内側に、第2図形57が形成されてもよい。なお、第2図形は、上記実施形態の矢印の図形のように、向きを特定することができる形状であればどのような図形であってもよい。このとき、CPU31は、ステップS26で4つの頂点を算出した後、4つの頂点によって形成される四角形の内側の領域から第2図形を検出する。そして、検出された第2図形の向きから、上下左右の4方向に関する第1図形の向きを特定する。以上によっても上記実施形態と同様、上下左右の4方向に関する第1図形の向きを特定することができる。ただし、第1図形の内部に第2図形が描かれたマーカを用いる場合には、第1図形の内部に内側図形と第2図形との両方が含まれることになる。そのため、内側図形を検出する際に誤検出が生じる可能性が高くなり、(上記実施形態と比べて)認識処理の精度が落ちる可能性がある。換言すれば、上記実施形態では、第1図形内に内側図形のみが形成されたマーカを用いるので、内側図形をより正確に検出することができ、認識処理の精度を向上することができる。
【0166】
また、上記実施形態では、マーカ51は、所定の図形が描かれた薄板状の部材であったが、他の実施形態においては、マーカ51は、表示装置によって所定の図形を表示することによって実現されてもよい。例えば、他の実施形態においては、画面にマーカ51を表示された他の携帯ゲーム装置がマーカ51として用いられてもよい。
【0167】
(認識処理に用いる撮像画像に関する変形例)
上記実施形態においては、低精度で行う領域検出処理(ステップS11)と、高精度で行うマーカ検出処理(ステップS15)とにおいて、同じ撮像画像が用いられた。ここで、他の実施形態においては、上記2つの処理で解像度が異なる画像を用いてもよい。具体的には、領域検出処理においては、マーカ検出処理において用いられる撮像画像よりも解像度が低い画像が用いられてもよい。例えば、認識処理以外の他の処理において必要となる等の理由で、ゲーム装置1がカメラによる撮像画像から解像度の低い画像を生成する場合には、当該解像度の低い画像を領域検出処理において用いるようにしてもよい。
【0168】
(認識処理の精度に関する変形例)
上記実施形態においては、認識処理における領域検出処理(ステップS11)とマーカ検出処理(ステップS15)との間で処理の精度を変えるようにした。また、マーカ検出処理内における各処理の間(ステップS21とステップS23およびS25との間)でも処理の精度を変えるようにした。ここで、他の実施形態においては、認識処理における各処理を行う精度は、どのように設定されてよく、各処理は同じ精度で行われてもよい。
【0169】
(マーカ位置の算出に関する変形例)
上記実施形態においては、CPU31は、内部図形56の中心位置を算出し、中心位置に基づいて、撮像画像内におけるマーカ51の位置(4つの頂点P11〜P14の位置)を算出した。ここで、他の実施形態においては、CPU31は、内部図形56の中心位置をそのままマーカ51の位置として用いてもよい。例えば、CPU31は、図9および図17に示す点P1,P3,P6および点P8をマーカ51の位置として用いてもよい。また、上記実施形態においては、マーカ51の位置および向きを表す情報として、4つの点の位置(4つの頂点P11〜P14の位置)を用いたが、マーカ51の3つ以上の点の位置がわかればマーカ51の位置および向きを特定することができる。したがって、他の実施形態においては、マーカ51の位置および向きを表す情報として3つまたは5つ以上の点の位置を用いてもよい。したがって、CPU31は、3つ以上の内部図形の中心位置に基づいてマーカ51の位置および向きを検出することができる。
【0170】
(その他の変形例)
上記実施形態では、ゲーム装置1は、ゲーム装置1が備える外側カメラ25によってリアルタイムに取得される撮像画像に対して認識処理を実行した。ここで、他の実施形態においては、認識処理の対象となる撮像画像は、過去に撮像されたものであってもよいし、ゲーム装置1が外部の機器から取得した撮像画像であってもよい。また、上記実施形態では、外側カメラ25がゲーム装置1に予め搭載されているが、他の実施形態では、ゲーム装置1に着脱可能な外付け型のカメラが外側カメラ25に代えて利用されてもよい。
【0171】
また、上記実施形態では、拡張現実感技術において認識処理が用いられる場合を例として説明した。また、認識処理の認識対象となる物体は、拡張現実感技術において用いられるマーカであった。ここで、本発明は、撮像画像から任意の撮像対象を認識する任意の画像認識処理に適用することが可能である。例えば、他の実施形態においては、認識処理は、撮像画像からユーザの顔を認識し、認識した顔に対して所定の処理(例えば、落書き等の画像を追加する処理)を行う技術に用いられてもよい。
【0172】
また、上記実施形態では、一台の情報処理装置(ゲーム装置1)のみによって認識処理を実行しているが、他の実施形態では、互いに通信可能な複数の情報処理装置を有する画像認識システムにおいて、当該複数の情報処理装置が認識処理を分担して実行するようにしてもよい。
【産業上の利用可能性】
【0173】
以上のように、本発明は、撮像画像にぶれが生じている場合であっても、撮像対象の位置を正確に検出すること等を目的として、例えばゲームプログラムやゲーム装置に利用することが可能である。
【符号の説明】
【0174】
1 ゲーム装置
13 タッチパネル
22 上側LCD
25 外側カメラ
31 CPU
32 メインメモリ
51 マーカ
54 対象領域
55 第1図形
56 内部図形
57 第2図形
【特許請求の範囲】
【請求項1】
撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出する情報処理装置のコンピュータにおいて実行される画像認識プログラムであって、
前記撮像手段によって撮像された撮像画像を取得する画像取得手段と、
前記撮像画像から前記複数の図形をそれぞれ検出する図形検出手段と、
前記図形検出手段によって検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する対象検出手段として前記コンピュータを機能させる、画像認識プログラム。
【請求項2】
前記所定の撮像対象は、前記複数の図形が内部に描かれた第1図形を含み、
前記撮像画像から前記第1図形の領域を検出する領域検出手段として前記コンピュータをさらに実行させ、
前記図形検出手段は、前記領域検出手段が検出した領域内から前記複数の図形をそれぞれ検出する、請求項1に記載の画像認識プログラム。
【請求項3】
前記図形検出手段は、前記複数の図形の領域をそれぞれ検出し、
前記対象検出手段は、前記図形検出手段によって検出された各領域の中心位置をそれぞれ算出する位置算出手段を有する、請求項2に記載の画像認識プログラム。
【請求項4】
前記図形検出手段は、前記複数の図形の領域を示す輪郭をそれぞれ検出し、
前記位置算出手段は、前記図形検出手段によって検出された各輪郭で示される各領域の中心位置をそれぞれ算出する、請求項3に記載の画像認識プログラム。
【請求項5】
前記位置算出手段は、前記図形検出手段によって検出された各輪郭を表す各画素の位置を求め、求められた位置の平均値を算出することにより、前記各領域の中心位置をそれぞれ算出する、請求項4に記載の画像認識プログラム。
【請求項6】
前記対象検出手段は、前記複数の図形のそれぞれの中心位置に基づいて、所定の直線を算出する直線算出手段を有し、
前記直線算出手段により算出された所定の直線に基づいて、前記所定の撮像対象と前記撮像手段との位置関係を算出する位置関係手段として前記コンピュータをさらに機能させる、請求項1から請求項5のいずれか1項に記載の画像認識プログラム。
【請求項7】
前記複数の図形はそれぞれ円形状である、請求項1から請求項6のいずれか1項に記載の画像認識プログラム。
【請求項8】
前記領域検出手段は、前記撮像画像において第1の間隔で得られる画素値に基づいて前記第1図形の領域を検出し、
前記対象検出手段は、前記領域検出手段によって検出された領域内の撮像画像において前記第1の間隔よりも小さい第2の間隔で得られる画素値に基づいて各図形の中心位置を算出する、請求項2に記載の画像認識プログラム。
【請求項9】
前記画像認識プログラムは、前記領域検出手段によって検出された前記第1図形の領域において、当該第1図形の輪郭を抽出する輪郭抽出手段として前記コンピュータをさらに機能させ、
前記対象検出手段は、前記輪郭抽出手段によって抽出された輪郭内の領域から前記複数の図形をそれぞれ検出する、請求項2または請求項8に記載の画像認識プログラム。
【請求項10】
前記輪郭抽出手段は、前記撮像画像において所定間隔で得られる画素値に基づいて当該第1図形の輪郭を抽出し、
前記対象検出手段は、前記撮像画像において前記所定間隔よりも小さい間隔で得られる画素値に基づいて、当該輪郭内の領域から前記複数の図形をそれぞれ検出する、請求項9に記載の画像認識プログラム。
【請求項11】
前記画像認識プログラムは、前記輪郭抽出手段によって抽出された輪郭が前記第1図形の形状を表すか否かを判定する形状判定手段として前記コンピュータを機能させ、
前記対象検出手段は、前記形状判定手段によって前記所定の撮像対象の形状を表すと判定される輪郭に対応する領域内から前記複数の図形をそれぞれ検出する、請求項9または請求項10に記載の画像認識プログラム。
【請求項12】
前記所定の撮像対象は、前記第1図形と異なる位置に第2図形を含み、
前記撮像画像から前記第2図形を検出し、第1図形に対して第2図形が配置される方向に基づいて前記所定の撮像対象の向きを特定する向き特定手段として前記コンピュータをさらに機能させる、請求項2に記載の画像認識プログラム。
【請求項13】
前記図形検出手段は、前記撮像画像において所定間隔で得られる画素値に基づいて前記複数の図形の領域をそれぞれ検出し、
前記位置算出手段は、前記撮像画像において前記所定間隔よりも小さい間隔で得られる画素値に基づいて、前記図形検出手段によって検出された各領域の中心位置をそれぞれ算出する、請求項3に記載の画像認識プログラム。
【請求項14】
前記対象検出手段は、前記図形検出手段によって検出された領域の個数が、所定範囲内の個数であるか否かを判定する個数判定手段をさらに有し、
前記位置算出手段は、前記所定範囲内の個数の領域が検出された前記第1図形の領域について、前記図形検出手段によって検出された各領域の中心位置を算出する、請求項3または請求項13に記載の画像認識プログラム。
【請求項15】
前記所定の撮像対象には、3つ以上の図形が含まれており、
前記対象検出手段は、前記3つ以上の図形の中心位置に基づいて前記所定の撮像対象の位置および向きを検出する、請求項1から請求項14のいずれか1項に記載の画像認識プログラム。
【請求項16】
前記所定の撮像対象には、所定の直線上に3以上の所定数の図形が配置されており、
前記対象検出手段は、算出された中心位置のうちから、2以上であって前記所定数よりも少ない数の中心位置に少なくとも基づいて前記所定の直線を算出し、算出された所定の直線に基づいて前記所定の撮像対象の位置および向きを検出する、請求項1から請求項15のいずれか1項に記載の画像認識プログラム。
【請求項17】
撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出する画像認識装置であって、
前記撮像手段によって撮像された撮像画像を取得する画像取得手段と、
前記撮像画像から前記複数の図形をそれぞれ検出する図形検出手段と、
前記図形検出手段によって検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する対象検出手段とを備える、画像認識装置。
【請求項18】
撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出する画像認識システムであって、
前記撮像手段によって撮像された撮像画像を取得する画像取得手段と、
前記撮像画像から前記複数の図形をそれぞれ検出する図形検出手段と、
前記図形検出手段によって検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する対象検出手段とを備える、画像認識システム。
【請求項19】
撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出するための画像認識方法であって、
前記撮像手段によって撮像された撮像画像を取得する画像取得ステップと、
前記撮像画像から前記複数の図形をそれぞれ検出する図形検出ステップと、
前記図形検出ステップにおいて検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する対象検出ステップとを含む、画像認識方法。
【請求項20】
撮像手段によって撮像された撮像画像に対して所定の認識処理を行うことによって撮像画像内におけるマーカの位置および向きを算出し、当該マーカの位置および向きに基づいて仮想オブジェクトの画像を生成し、当該撮像画像に対して当該仮想オブジェクトの画像を合成して表示する画像表示システムにおいて用いられるマーカであって、
それぞれの中心位置が算出される複数の図形を備え、
前記中心位置は、前記マーカの位置および向きを表す情報を算出するために用いられる、マーカ。
【請求項21】
撮像手段によって撮像された撮像画像に対して所定の認識処理を行うことによって撮像画像内におけるマーカの位置および向きを算出し、当該マーカの位置および向きに基づいて仮想オブジェクトの画像を生成し、当該撮像画像に対して当該仮想オブジェクトの画像を合成して表示する画像表示システムにおいて用いられるマーカを表示するマーカ表示装置であって、
それぞれの中心位置が算出される複数の図形を画面に表示し、
前記中心位置は、前記マーカの位置および向きを表す情報を算出するために用いられる、マーカ表示装置。
【請求項1】
撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出する情報処理装置のコンピュータにおいて実行される画像認識プログラムであって、
前記撮像手段によって撮像された撮像画像を取得する画像取得手段と、
前記撮像画像から前記複数の図形をそれぞれ検出する図形検出手段と、
前記図形検出手段によって検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する対象検出手段として前記コンピュータを機能させる、画像認識プログラム。
【請求項2】
前記所定の撮像対象は、前記複数の図形が内部に描かれた第1図形を含み、
前記撮像画像から前記第1図形の領域を検出する領域検出手段として前記コンピュータをさらに実行させ、
前記図形検出手段は、前記領域検出手段が検出した領域内から前記複数の図形をそれぞれ検出する、請求項1に記載の画像認識プログラム。
【請求項3】
前記図形検出手段は、前記複数の図形の領域をそれぞれ検出し、
前記対象検出手段は、前記図形検出手段によって検出された各領域の中心位置をそれぞれ算出する位置算出手段を有する、請求項2に記載の画像認識プログラム。
【請求項4】
前記図形検出手段は、前記複数の図形の領域を示す輪郭をそれぞれ検出し、
前記位置算出手段は、前記図形検出手段によって検出された各輪郭で示される各領域の中心位置をそれぞれ算出する、請求項3に記載の画像認識プログラム。
【請求項5】
前記位置算出手段は、前記図形検出手段によって検出された各輪郭を表す各画素の位置を求め、求められた位置の平均値を算出することにより、前記各領域の中心位置をそれぞれ算出する、請求項4に記載の画像認識プログラム。
【請求項6】
前記対象検出手段は、前記複数の図形のそれぞれの中心位置に基づいて、所定の直線を算出する直線算出手段を有し、
前記直線算出手段により算出された所定の直線に基づいて、前記所定の撮像対象と前記撮像手段との位置関係を算出する位置関係手段として前記コンピュータをさらに機能させる、請求項1から請求項5のいずれか1項に記載の画像認識プログラム。
【請求項7】
前記複数の図形はそれぞれ円形状である、請求項1から請求項6のいずれか1項に記載の画像認識プログラム。
【請求項8】
前記領域検出手段は、前記撮像画像において第1の間隔で得られる画素値に基づいて前記第1図形の領域を検出し、
前記対象検出手段は、前記領域検出手段によって検出された領域内の撮像画像において前記第1の間隔よりも小さい第2の間隔で得られる画素値に基づいて各図形の中心位置を算出する、請求項2に記載の画像認識プログラム。
【請求項9】
前記画像認識プログラムは、前記領域検出手段によって検出された前記第1図形の領域において、当該第1図形の輪郭を抽出する輪郭抽出手段として前記コンピュータをさらに機能させ、
前記対象検出手段は、前記輪郭抽出手段によって抽出された輪郭内の領域から前記複数の図形をそれぞれ検出する、請求項2または請求項8に記載の画像認識プログラム。
【請求項10】
前記輪郭抽出手段は、前記撮像画像において所定間隔で得られる画素値に基づいて当該第1図形の輪郭を抽出し、
前記対象検出手段は、前記撮像画像において前記所定間隔よりも小さい間隔で得られる画素値に基づいて、当該輪郭内の領域から前記複数の図形をそれぞれ検出する、請求項9に記載の画像認識プログラム。
【請求項11】
前記画像認識プログラムは、前記輪郭抽出手段によって抽出された輪郭が前記第1図形の形状を表すか否かを判定する形状判定手段として前記コンピュータを機能させ、
前記対象検出手段は、前記形状判定手段によって前記所定の撮像対象の形状を表すと判定される輪郭に対応する領域内から前記複数の図形をそれぞれ検出する、請求項9または請求項10に記載の画像認識プログラム。
【請求項12】
前記所定の撮像対象は、前記第1図形と異なる位置に第2図形を含み、
前記撮像画像から前記第2図形を検出し、第1図形に対して第2図形が配置される方向に基づいて前記所定の撮像対象の向きを特定する向き特定手段として前記コンピュータをさらに機能させる、請求項2に記載の画像認識プログラム。
【請求項13】
前記図形検出手段は、前記撮像画像において所定間隔で得られる画素値に基づいて前記複数の図形の領域をそれぞれ検出し、
前記位置算出手段は、前記撮像画像において前記所定間隔よりも小さい間隔で得られる画素値に基づいて、前記図形検出手段によって検出された各領域の中心位置をそれぞれ算出する、請求項3に記載の画像認識プログラム。
【請求項14】
前記対象検出手段は、前記図形検出手段によって検出された領域の個数が、所定範囲内の個数であるか否かを判定する個数判定手段をさらに有し、
前記位置算出手段は、前記所定範囲内の個数の領域が検出された前記第1図形の領域について、前記図形検出手段によって検出された各領域の中心位置を算出する、請求項3または請求項13に記載の画像認識プログラム。
【請求項15】
前記所定の撮像対象には、3つ以上の図形が含まれており、
前記対象検出手段は、前記3つ以上の図形の中心位置に基づいて前記所定の撮像対象の位置および向きを検出する、請求項1から請求項14のいずれか1項に記載の画像認識プログラム。
【請求項16】
前記所定の撮像対象には、所定の直線上に3以上の所定数の図形が配置されており、
前記対象検出手段は、算出された中心位置のうちから、2以上であって前記所定数よりも少ない数の中心位置に少なくとも基づいて前記所定の直線を算出し、算出された所定の直線に基づいて前記所定の撮像対象の位置および向きを検出する、請求項1から請求項15のいずれか1項に記載の画像認識プログラム。
【請求項17】
撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出する画像認識装置であって、
前記撮像手段によって撮像された撮像画像を取得する画像取得手段と、
前記撮像画像から前記複数の図形をそれぞれ検出する図形検出手段と、
前記図形検出手段によって検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する対象検出手段とを備える、画像認識装置。
【請求項18】
撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出する画像認識システムであって、
前記撮像手段によって撮像された撮像画像を取得する画像取得手段と、
前記撮像画像から前記複数の図形をそれぞれ検出する図形検出手段と、
前記図形検出手段によって検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する対象検出手段とを備える、画像認識システム。
【請求項19】
撮像手段によって撮像された撮像画像から、複数の図形を含む所定の撮像対象を検出するための画像認識方法であって、
前記撮像手段によって撮像された撮像画像を取得する画像取得ステップと、
前記撮像画像から前記複数の図形をそれぞれ検出する図形検出ステップと、
前記図形検出ステップにおいて検出された複数の図形のそれぞれの中心位置を算出することによって所定の撮像対象の位置または向きを検出する対象検出ステップとを含む、画像認識方法。
【請求項20】
撮像手段によって撮像された撮像画像に対して所定の認識処理を行うことによって撮像画像内におけるマーカの位置および向きを算出し、当該マーカの位置および向きに基づいて仮想オブジェクトの画像を生成し、当該撮像画像に対して当該仮想オブジェクトの画像を合成して表示する画像表示システムにおいて用いられるマーカであって、
それぞれの中心位置が算出される複数の図形を備え、
前記中心位置は、前記マーカの位置および向きを表す情報を算出するために用いられる、マーカ。
【請求項21】
撮像手段によって撮像された撮像画像に対して所定の認識処理を行うことによって撮像画像内におけるマーカの位置および向きを算出し、当該マーカの位置および向きに基づいて仮想オブジェクトの画像を生成し、当該撮像画像に対して当該仮想オブジェクトの画像を合成して表示する画像表示システムにおいて用いられるマーカを表示するマーカ表示装置であって、
それぞれの中心位置が算出される複数の図形を画面に表示し、
前記中心位置は、前記マーカの位置および向きを表す情報を算出するために用いられる、マーカ表示装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図7】
【図8】
【図9】
【図2】
【図3】
【図4】
【図5】
【図6】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図7】
【図8】
【図9】
【公開番号】特開2012−3669(P2012−3669A)
【公開日】平成24年1月5日(2012.1.5)
【国際特許分類】
【出願番号】特願2010−140354(P2010−140354)
【出願日】平成22年6月21日(2010.6.21)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
【公開日】平成24年1月5日(2012.1.5)
【国際特許分類】
【出願日】平成22年6月21日(2010.6.21)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
[ Back to top ]