画像表示プログラム、画像表示装置、画像表示システム、および画像表示方法
【課題】拡張現実感技術において合成画像をより現実味を増して表示する。
【解決手段】ゲーム装置は、カメラから撮像画像を取得し、取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する。また、ゲーム装置は、認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成して表示する。ここで、認識処理が失敗した場合には、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とが合成される。
【解決手段】ゲーム装置は、カメラから撮像画像を取得し、取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する。また、ゲーム装置は、認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成して表示する。ここで、認識処理が失敗した場合には、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とが合成される。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、拡張現実感技術を用いて画像を表示する画像表示プログラム、画像表示装置、画像表示システム、および画像表示方法に関する。
【背景技術】
【0002】
従来、現実空間の画像(カメラによる撮像画像)に仮想空間の画像(CG画像)を合成して表示する拡張現実感技術がある。非特許文献1には、拡張現実感技術の基本的な画像生成方法が記載されている。拡張現実感技術においては、現実空間にマーカを配置しておき、マーカ周辺をカメラで撮像する。撮像された画像内のマーカは画像認識処理によって検出され、マーカの3次元位置が計算される。計算された3次元位置を用いて仮想空間内の物体の画像(CG画像)を生成して、その画像をカメラ画像中のマーカの位置に合成して表示することで、現実空間の撮像画像に仮想の物体が合成された画像を表示することができる。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】加藤博一、Mark Billinghurst,「拡張現実感システムにおけるマーカー追跡とHMDキャリブレーション(Marker Tracking andHMD Calibration for a video-based Augmented Reality Conferencing System)」,IWAR99(拡張現実感に関する第2回国際ワークショップ(the 2nd InternationalWorkshop on Augmented Reality))における会報,米国,1999年10月
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来の拡張現実感技術では、現実の撮像画像と仮想のCG画像との間に位置ずれが生じて表示されたり、CG画像がちらついて表示されたりするという問題があった。
【0005】
拡張現実感技術では、撮像画像に含まれるマーカを認識してマーカの3次元位置を計算する必要があり、これら認識および計算の処理には時間を要する。そのため、認識および計算の処理結果に基づいて生成されるCG画像は、撮像画像に対して時間的に遅れてしまう。したがって、カメラが動かされて撮像画像が変化する場合、その撮像画像に合成されるべきCG画像は時間的に遅れるために変化前の位置に合成されてしまうので、撮像画像内のマーカの位置とCG画像が合成される位置とがずれてしまう。
【0006】
また、実際にはマーカが撮像されていても、撮像画像からマーカをうまく認識することができず、認識処理が失敗する場合もある。認識処理が失敗した場合には、その認識処理の対象となった撮像画像からCG画像を生成することはできないので、撮像画像のみが表示されることとなる。そのため、認識処理の失敗が断続的に起こると、CG画像がちらついて表示されてしまう。
【0007】
このように、従来においては、CG画像は位置がずれて表示されたり、ちらついて表示されたりするおそれがあったため、撮像画像とCG画像とを合成した合成画像は現実味(リアルさ)に欠けるおそれがあった。そのため、拡張現実感技術の特徴である「CG画像が実際に存在するかのような感覚を与える」効果を十分に発揮することができなかった。
【0008】
それ故、本発明の目的は、拡張現実感技術において合成画像をより現実味を増して表示することができる画像表示プログラム、画像表示装置、画像表示システム、および画像表示方法を提供することである。
【課題を解決するための手段】
【0009】
本発明は、上記の課題を解決するために、以下の(1)〜(15)の構成を採用した。
【0010】
(1)
本発明は、撮像手段から撮像画像を取得可能な情報処理装置のコンピュータを、認識手段と、合成手段と、表示制御手段として機能させる画像表示プログラムである。認識手段は、取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する。合成手段は、認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する。表示制御手段は、合成画像を表示手段に表示させる。また、合成手段は、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する。
【0011】
上記「情報処理装置」とは、後述する実施形態に記載のゲーム装置の他、コンピュータプログラムを実行することによって情報処理を行う任意のコンピュータを含む概念である。また、上記「情報処理装置」は、携帯型か否かを問わない。
上記「画像表示プログラム」とは、一例としては、後述する実施形態に記載のゲームプログラムであるが、パーソナルコンピュータや携帯端末において実行されるアプリケーションプログラムを含む概念である。
上記「所定の対象」とは、後述する実施形態におけるマーカ52の他、認識処理によって認識することが可能な物であれば、どのような物であってもよい。例えば、ユーザ(プレイヤ)の顔等を所定の対象として認識するようにしてもよい。
上記「仮想オブジェクト」は、撮像画像と合成されるために生成される画像であればよく、仮想オブジェクトの画像の生成方法や内容はどのようなものであってもよい。
上記「認識手段」および上記「合成手段」は、繰り返し処理を実行するものであるが、両者の処理が繰り返される頻度(周期)は、同じである必要はない。例えば、下記(7)の構成や後述する実施形態のように、認識手段による認識処理の頻度は、合成手段による合成処理の頻度よりも少なくてもよい。
【0012】
上記(1)の構成によれば、合成手段は、認識処理の処理結果を用いて生成される仮想オブジェクトの画像と撮像画像との合成画像を生成する。ここで、認識処理が失敗した場合、合成手段は、前回に成功した認識処理の対象となった撮像画像を用いて合成画像を生成する。したがって、認識に失敗した場合でも仮想オブジェクトの画像を含む合成画像が表示されるので、認識が失敗する度に仮想オブジェクトが消えてしまう(表示されない)ことによって仮想オブジェクトがちらついて表示されることを防止することができる。また、認識処理が失敗した場合に合成される仮想オブジェクトの画像は、撮像画像に合わせて、前回に成功した認識処理の処理結果を用いて生成される。したがって、仮想オブジェクトの画像は、その画像が生成される元となった撮像画像と合成されるので、撮像画像と仮想オブジェクトとの間で位置ずれが生じることがない。以上のように、上記(1)の構成によれば、画像のちらつきや位置ずれが生じないので、仮想オブジェクトが実世界にいるような実在感が増す。すなわち、上記(1)の構成によれば、拡張現実感技術において合成画像をより現実味を増して表示することができる。
【0013】
(2)
合成手段は、認識処理の処理結果にかかわらず、仮想オブジェクトの画像を更新して合成画像を生成してもよい。
【0014】
上記「認識処理の処理結果にかかわらず」とは、認識処理が成功した場合であっても失敗した場合であっても合成手段は仮想オブジェクトの画像を更新して合成画像を生成する意味である。また、合成画像の生成間隔が認識処理の処理時間よりも短い場合には、認識処理の処理結果が得られていない状況であっても、(合成画像を生成すべきタイミングが到来すると)合成手段は仮想オブジェクトの画像を更新して合成画像を生成する。
【0015】
上記(2)の構成によれば、合成画像のうち、仮想オブジェクトの画像に関しては、一定の頻度で画像が更新される。そのため、仮想オブジェクトに関しては、認識処理の成功/失敗にかかわらず、滑らかな動画で表示することができる。ここで、上記(1)の構成によれば、認識処理が失敗した場合には撮像画像は更新されないので、撮像画像のみに関して言えば、動画が滑らかに表示されないためにユーザが違和感を抱くおそれがある。しかし、上記(2)の構成によれば、撮像画像に合成する仮想オブジェクトの動画が滑らかに表示されることによって、合成画像全体としては滑らかな印象をユーザに与えることができ、撮像画像に対してユーザが抱く違和感を軽減・抑止することができる。
【0016】
(3)
画像表示プログラムは、認識処理が成功した場合、成功した認識処理の対象となった撮像画像と当該認識処理の処理結果とを、コンピュータがアクセス可能な記憶手段に記憶させる記憶制御手段としてコンピュータをさらに機能させてもよい。このとき、合成手段は、記憶手段に記憶される撮像画像と、当該記憶手段に記憶される処理結果に基づいて生成される合成画像とを合成する。
【0017】
上記(3)の構成によれば、認識処理が成功した場合、処理対象の撮像画像と処理結果とを記憶手段に記憶しておくので、その撮像画像を用いた合成画像を容易に生成することができる。
【0018】
(4)
記憶制御手段は、認識処理が成功した場合、成功した認識処理の対象となった撮像画像と当該認識処理の処理結果とが記憶されるように、記憶手段の記憶内容を更新してもよい。
【0019】
上記(4)の構成によれば、認識処理が成功した最新の撮像画像とその処理結果とを記憶することができるので、その撮像画像を用いた合成画像を確実に生成することができる。
【0020】
(5)
認識手段は、認識処理が成功する場合、当該認識処理によって認識された所定の対象と撮像手段もしくは情報処理装置との位置関係を処理結果として算出してもよい。このとき、合成手段は、認識処理が成功した場合、成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて仮想オブジェクトの画像を生成する。また、認識処理が失敗した場合、合成手段は、以前に成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて仮想オブジェクトの画像を生成する。
【0021】
上記(5)の構成によれば、仮想オブジェクトの画像は、認識処理の処理結果として、所定の対象と撮像手段との位置関係に基づいて生成される。したがって、所定の対象と撮像手段との位置関係を反映した向きから見たときの仮想オブジェクトの画像を生成することができるので、仮想オブジェクトの画像をよりリアルに生成・表示することができる。また、上記(5)の構成によれば、仮想オブジェクトの画像は、認識処理が失敗した場合、前回に成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて生成されるので、撮像画像と仮想オブジェクトとの間の位置ずれは生じない。特に、上記(2)の構成と上記(5)の構成とを組み合わせる場合には、仮想オブジェクトの画像は、仮想オブジェクトの動作や姿勢は毎回更新されつつ、仮想オブジェクトが表示される位置はずれが生じないので、合成画像をより現実味を増して表示することができる。
【0022】
(6)
画像表示プログラムは、認識処理の処理結果をゲーム入力として用いて、仮想空間に登場するオブジェクトの動作を制御する所定のゲーム制御処理を実行するゲーム制御処理手段としてコンピュータをさらに機能させてもよい。
【0023】
上記(6)の構成によれば、拡張現実感技術による画像をゲームに用いることができる。また、上記(6)の構成によれば、認識処理の処理結果がゲーム入力として用いられるので、ユーザ(プレイヤ)は、カメラ自体を動かすことによってゲーム操作を行うことができる。これによれば、あたかも仮想オブジェクトが存在するかのような現実空間においてプレイヤ自身が実際に動いて遊ぶという、拡張現実感技術を用いた新規なゲームを提供することができる。
【0024】
(7)
ゲーム制御処理手段は、認識処理が失敗した場合、以前に成功した認識処理の処理結果を用いてゲーム制御処理を実行してもよい。
【0025】
上記(7)の構成によれば、ゲーム制御処理手段は認識処理が失敗した場合でもゲーム制御処理を実行することができる。そのため、認識処理が断続的に失敗した場合でもゲーム制御処理を継続して実行することができ、ゲーム制御処理の制御対象であるオブジェクトをスムーズに動作させることができる。
【0026】
(8)
画像表示プログラムは、認識処理の処理結果にかかわらず所定のゲーム処理を実行するゲーム処理手段としてコンピュータをさらに機能させてもよい。
【0027】
上記「ゲーム処理」は、ゲームを進行するための処理であればよく、例えば後述する実施形態におけるステップS24の処理のように、認識処理の処理結果をゲーム入力として用いない処理を含む概念である。
【0028】
上記(8)の構成によれば、認識処理が仮に失敗した場合であってもゲームの進行は継続されるので、認識処理が断続的に失敗することによってゲームが頻繁に中断されることがない。そのため、プレイヤに不快感を与えることなく、拡張現実感技術を用いたゲームをスムーズに進行させることができる。
【0029】
(9)
ゲーム処理手段は、上記仮想オブジェクトの動作を制御する処理をゲーム処理として実行してもよい。
【0030】
なお、上記「仮想オブジェクトの動作を制御する処理」は、ユーザによる入力に従って仮想オブジェクトの動作を制御する処理であってもよいし、ゲームプログラムにおいて予め定められたアルゴリズムに従って仮想オブジェクトの動作を制御する処理であってもよい。
【0031】
上記(9)の構成によれば、ゲーム処理の結果として仮想オブジェクトが動作する画像(動画)を拡張現実感技術によって表示することができる。さらに、ゲーム処理は認識処理の処理結果にかかわらず実行されるので、上記(2)の構成と同様、仮想オブジェクトは一定の頻度で画像が更新される。そのため、仮想オブジェクトの動画が滑らかに表示されることによって、合成画像(ゲーム画像)全体としては滑らかな印象をユーザに与えることができる。
【0032】
(10)
表示制御手段は、認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、撮像画像とは異なる警告画像を表示手段に表示させてもよい。
【0033】
上記(10)の構成によれば、(所定の条件を満たす程度に)認識処理が連続して失敗した場合には、合成画像から警告画像へと表示が変化することになる。したがって、所定の条件を適切に設定することによって、認識処理が成功する見込みが少ないことをユーザに通知することができる。ここで、認識処理が連続して失敗した場合には、仮想オブジェクトの画像のみを消去し、撮像画像のみを表示する方法も考えられる。しかし、この方法では、仮想オブジェクト自体が変化したことが原因で、仮想オブジェクトの画像が消えた(例えば、ゲームを例とすれば、敵オブジェクトが倒されて消える場合もある)のか、認識処理が失敗したことが原因で仮想オブジェクトの画像が消えたのか、判断がつきにくいこともある。これに対して、上記(10)の構成によれば、撮像画像とは異なる警告画像を表示することで、認識処理が連続して失敗していることをユーザに明確に通知することができる。
【0034】
(11)
表示制御手段は、認識処理が所定時間の間連続して失敗したことを所定の条件として、警告画像を表示手段に表示させてもよい。
【0035】
上記(11)の構成によれば、認識処理が所定時間連続して失敗した場合、警告画像が表示される。このような場合には認識処理が再度成功する見込みが少ないと推測されるので、上記(11)の構成によれば、適切なタイミングでユーザに対して警告を行うことができる。
【0036】
(12)
画像表示プログラムは、撮像手段または情報処理装置の動きを検知する動き検知手段としてコンピュータをさらに機能させてもよい。このとき、表示制御手段は、動き検知手段によって撮像手段が所定の基準以上動いていることが検知されたことを所定の条件として、警告画像を表示手段に表示させてもよい。
【0037】
上記(12)の構成によれば、撮像手段が所定の基準以上動かされた場合、警告画像が表示される。このような場合には認識処理が再度成功する見込みが少ないと推測されるので、上記(12)の構成によれば、適切なタイミングでユーザに対して警告を行うことができる。
【0038】
(13)
画像表示プログラムは、認識処理の処理結果をゲーム入力として用いて、仮想オブジェクトの動作を制御する所定のゲーム制御処理を実行するゲーム制御処理手段としてコンピュータをさらに機能させてもよい。このとき、ゲーム制御処理手段は、警告画像が表示されることに応じて、ゲームの進行を中断する。
【0039】
上記(13)の構成によれば、警告画像が表示された場合、ゲームが中断される。したがって、ゲーム画像(合成画像)ではない警告画像が表示されている間にゲームが進行する不都合を防止することができる。
【0040】
(14)
表示制御手段は、警告画像が表示された後において認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、撮像画像を表示手段に表示させてもよい。
【0041】
上記(14)の構成によれば、警告画像が表示された後、所定の条件が満たされると、撮像画像が表示される。ここで、警告画像を表示し続けると、ユーザは撮像手段が撮像している画像を把握できないため、所定の対象を正しく撮像することができなくなってしまい、認識が成功する状態に戻すことが困難になる。これに対して、上記(14)の構成によれば、警告画像の後に撮像画像を表示することによって、ユーザは、所定の対象を正しく撮像できるように撮像手段の向きを修正しやすくなるので、認識が成功する状態に容易に戻すことができる。
【0042】
(15)
表示制御手段は、認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、現時点で取得された撮像画像を表示手段に表示させてもよい。
【0043】
上記(15)の構成によれば、(所定の条件を満たす程度に)認識処理が連続して失敗した場合には、合成画像から警告画像へと表示が変化することになる。したがって、所定の条件を適切に設定することによって、認識処理が成功する見込みが少ないことをユーザに通知することができる。
【0044】
また、本発明は、上記各手段と同等の手段を備える画像表示装置の形態で実施されてもよい。この画像表示装置においては、画像表示プログラムを実行するコンピュータによって上記各手段が実現されてもよいし、専用回路によって上記各手段の一部または全部が実現されてもよい。また、本発明は、上記各手段を備える1以上の情報処理装置からなる画像表示システムの形態で実施されてもよい。このとき、1以上の情報処理装置は、有線または無線通信によって直接通信を行ってもよいし、ネットワークを介して通信を行ってもよい。さらに、本発明は、上記各手段によって行われる画像表示方法の形態で実施されてもよい。
【発明の効果】
【0045】
本発明は、撮像画像に対する認識処理が失敗した場合に、前回に成功した認識処理の対象となった撮像画像と、その認識処理の処理結果を用いて生成される仮想オブジェクトの画像との合成画像を表示することによって、画像のちらつきや位置ずれを防止することができ、合成画像をより現実味を増して表示することができる。
【図面の簡単な説明】
【0046】
【図1】本実施形態に係るゲーム装置の外観図
【図2】ゲーム装置の内部構成の一例を示すブロック図
【図3】ゲーム装置を使用する例を示す図
【図4】ゲーム装置に表示されるゲーム画像の一例を示す図
【図5】合成画像の生成処理を説明するための図
【図6】認識が失敗した場合における合成画像の生成処理を説明するための図
【図7】撮像画像の取得間隔および認識処理に要する時間を、CG画像の生成間隔と同じとした場合における合成処理を示す図
【図8】ゲームプログラムによる処理において用いられる各種データを示す図
【図9】ゲーム装置において実行されるゲーム処理の流れを示すメインフローチャート
【図10】図9に示す認識管理処理(ステップS3)の流れを示すフローチャート
【図11】図9に示すゲーム制御処理(ステップS4)の流れを示すフローチャート
【図12】図9に示す表示処理(ステップS5)の流れを示すフローチャート
【図13】本実施形態における表示処理(ステップS5)の変形例を示すフローチャート
【発明を実施するための形態】
【0047】
[ゲーム装置のハードウェア構成]
以下、図面を参照して、本発明の一実施形態に係る画像表示プログラムおよび画像表示装置について説明する。本発明は、表示装置に画像を表示させる任意の情報処理装置(コンピュータ)において画像表示プログラムが実行されることによって実現することができるが、本実施形態では、情報処理装置の一例として図1に示すゲーム装置1を用いる場合について説明する。
【0048】
図1は、本実施形態に係るゲーム装置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から図6を参照して、上記ゲームプログラムによって実行されるゲーム処理中において行われる画像合成処理について説明する。ゲームプログラムは、カメラによって撮像された現実空間の画像(撮像画像)に仮想空間の画像(CG画像)を合成して表示する拡張現実感技術を用いてゲーム画像を表示し、プレイヤにゲームをプレイさせるものである。
【0079】
図3は、ゲーム装置を使用する例を示す図である。本実施形態においては、図3に示すように、プレイヤ(ユーザ)は、マーカ52を任意の場所(図3では机51の上)に設置しておき、ゲーム装置1を用いてマーカ52およびその周辺を撮像する。撮像に用いられるカメラは、内側カメラ23および外側カメラ25のいずれであっても良いが、ここでは、外側カメラ25を用いる場合を例として説明する。マーカ52は、本実施形態では所定の模様が描かれた薄板状のものが用いられる。ただし、マーカは、後述する認識処理によって認識可能な物であれば良く、マーカ52のような専用品に限らず、例えばプレイヤの体の一部(顔等)がマーカとして用いられても良い。
【0080】
図4は、ゲーム装置に表示されるゲーム画像の一例を示す図である。図4は、図3に示すように机51の上に置かれたマーカ52をゲーム装置1が撮像する場合に、ゲーム装置1の上側LCD22に表示されるゲーム画像を示す。なお、本実施形態ではゲーム画像が上側LCD22に表示されるものとするが、ゲーム画像は下側LCD12に表示されてもよい。図4に示すように、上側LCD22には、仮想空間における仮想オブジェクトの画像(CG画像)として大砲53の画像が撮像画像に合成されて表示される。これによって、実際の机51の上に大砲53が存在するかのような画像を表示することができる。なお、詳細は後述するが、大砲53の動作はゲームプログラムによって制御され、大砲53は向きを変えたり、弾を発射したりする。つまり、本実施形態では、仮想オブジェクトの画像は動画として表示される。なお、図4では、仮想オブジェクトの一例として大砲53の画像が表示されるが、仮想オブジェクトはどのようなものであってもよい。
【0081】
撮像画像に対してCG画像を合成した画像(合成画像)は、例えば次の処理によって生成することができる。まず、ゲーム装置1は、カメラによる撮像画像から、その中に含まれるマーカ52を認識する認識処理を実行する。マーカ52が認識された場合、ゲーム装置1は、認識されたマーカ52の形状および向き等から、ゲーム装置1(カメラ)とマーカ52との位置関係を算出する。位置関係とは、例えば、ゲーム装置1およびマーカ52の一方を基準としたときの他方の3次元の位置および姿勢として表される。なお、3次元位置を算出する場合には、例えば認識されたマーカ52の(撮像画像上での)大きさ等に基づいて両者の距離を決定してもよい。ゲーム装置1は、上記認識処理の処理結果として上記位置関係を算出する。さらに、ゲーム装置1は、位置関係に基づいて仮想空間における仮想カメラの位置および姿勢を算出する。仮想カメラの位置および姿勢は、仮想空間における仮想カメラと仮想オブジェクトとの位置関係が、現実空間におけるゲーム装置1とマーカ52との位置関係に一致するように算出される。仮想カメラの位置が決まると、ゲーム装置1は、仮想カメラの位置から仮想オブジェクトを見たCG画像を生成し、撮像画像に対して仮想オブジェクトのCG画像を合成する。以上の処理によって、ゲーム装置1は合成画像を生成して表示することができる。なお、上記認識処理(位置関係を算出する処理)、および、上記位置関係から仮想カメラの位置を算出する処理は、従来の拡張現実感技術における処理と同様であってもよい。
【0082】
ここで、撮像画像にCG画像を合成して表示する拡張現実感技術においては、本発明の課題として上述したように、撮像画像とCG画像との位置ずれが生じたり、CG画像がちらついたりして表示されるおそれがあり、合成画像が現実味に欠けるおそれがある。そこで、本発明では、次に説明する処理によって、合成画像の現実味を増すようにしている。以下、図5および図6を参照して、合成画像の生成処理について説明する。
【0083】
図5は、合成画像の生成処理を説明するための図である。図5において(後述する図6も同様)、横軸は時間を表しており、“撮像画像”、“CG画像”、“合成画像”の各欄は、それぞれの画像が取得(生成)されるタイミングを表す。また、“認識処理”の欄は、撮像画像に対する認識処理が完了するタイミングを表す。なお、図5では、CG画像は所定時間(1フレーム時間)間隔で生成されるのに対して、撮像画像はCG画像の生成間隔よりも長い間隔で取得され、また、認識処理に要する時間はCG画像の生成間隔よりも長い場合を想定している。
【0084】
本実施形態において、撮像画像に対して認識処理を実行し、その処理結果に基づいてCG画像を生成し、撮像画像とCG画像とを合成して表示する点については、上述した通りである。なお、CG画像は認識処理の処理結果に基づいて生成され、認識処理には時間を要する。そのため、CG画像が生成される時点では、そのCG画像を生成する元になった撮像画像は最新のものではなく、最新の撮像画像はCG画像の元になった撮像画像とは別の画像となっている(例えば、図5に示す時刻T1,T4,T7参照)。
【0085】
本実施形態では、ゲーム装置1は、合成画像を生成する際、取得された最新の撮像画像ではなく、認識処理が完了した撮像画像とCG画像とを合成する。例えば図5において、時刻T1では、時刻T1より前に取得された撮像画像R0に対する認識処理が完了しており、現時点T1で取得された撮像画像R1に対する認識処理は完了していない。そのため、時刻T1では、撮像画像R1ではなく、撮像画像R0とCG画像V1とが合成される。ここで、CG画像V1は撮像画像R0に対する認識処理の処理結果に基づいて生成された画像である。したがって、時刻T1においては、CG画像V1が生成される元となった撮像画像R0と、当該CG画像V1とを合成するので、上述した位置ずれは生じない。
【0086】
また、時刻T2およびT3では、撮像画像R1の認識処理は途中であり、次の認識処理が完了していないので、時刻T1と同様、撮像画像R0の認識処理結果に基づいてCG画像V2およびV3が生成される。したがって、時刻T2およびT3においても時刻T1と同様、撮像画像R0を用いて合成画像が生成される。つまり、CG画像V2およびV3は、これらのCG画像V2およびV3が生成される元となった撮像画像R0に対して合成されるので、時刻T2およびT3においても時刻T1と同様、上述した位置ずれを防止することができる。このように、ゲーム装置1は、次の認識処理が完了するまでは、認識処理が完了済みの撮像画像を用いて合成画像を生成する。
【0087】
なお、図5においては、時刻T4以降も時刻T1〜T3と同様、CG画像と、そのCG画像が生成される元となった撮像画像とが合成される。すなわち、時刻T4においては撮像画像R1の認識処理が完了するので、時刻T4〜T6においては、撮像画像R1に対して、撮像画像R1に基づいて生成されるCG画像V4〜V6がそれぞれ合成される。また、時刻T7においては撮像画像R2の認識処理が完了するので、時刻T7においては、撮像画像R2に対して、撮像画像R2に基づいて生成されるCG画像V7が合成される。
【0088】
以上のように、ゲーム装置1は、CG画像が生成される元となった撮像画像と、合成画像の生成に用いられる撮像画像とを一致させるので、上述した位置ずれを防止することができる。
【0089】
次に、認識処理が失敗する場合を考える。カメラでマーカ52を撮像していても、マーカ52に反射光が入ったり、光の加減で撮像画像内におけるマーカ52の色が変わったりする等の原因で、認識処理においてマーカ52を正しく認識できずに認識に失敗する場合もある。本実施形態においては、ゲーム装置1は、認識に失敗した場合をも考慮して、撮像画像とCG画像とを適切に合成する。
【0090】
図6は、認識が失敗した場合における合成画像の生成処理を説明するための図である。図6においては、時刻T4において撮像画像R1の認識処理が失敗した場合を想定する。この場合、ゲーム装置1は、撮像画像R1に基づいてCG画像を生成することができない。ここで、仮に(認識が失敗してCG画像を生成できないため)CG画像を表示しないようにすれば、認識が断続的に失敗した場合、CG画像がちらついて表示されてしまう。そのため、本実施形態においては、ゲーム装置1は、認識が成功した最新の撮像画像R0の認識処理結果に基づいてCG画像V4を生成する。つまり、ゲーム装置1は、認識が失敗したことに応じて即時にCG画像の生成を中止することがないので、CG画像がちらついて表示されてしまうことを防止することができる。
【0091】
さらに、本実施形態においては、時刻T4におけるCG画像V4は、この時刻T4において認識処理が完了した最新の撮像画像R1ではなく、最後に認識が成功した撮像画像R0に対して合成される(図6参照)。ここで、合成画像を生成する際に、認識が成功する場合(図5における時刻T4の場合)と同様、認識処理が完了した最新の撮像画像R1を用いるとすれば、CG画像V4を生成する元となった撮像画像と、合成に用いられる撮像画像とが異なることになり、上述した位置ずれが生じるおそれがある。そこで、本実施形態では、認識が失敗した場合には、ゲーム装置1は、認識が成功した最新の撮像画像を用いて合成画像を生成する。これによれば、認識が失敗した場合においても、CG画像と、そのCG画像が生成される元になった撮像画像とを合成することができるので、位置ずれを防止することができる。
【0092】
以上のように、本実施形態においては、認識処理が失敗した場合、ゲーム装置1は、前回に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成されるCG画像とを合成する。これによって、CG画像がちらついて表示されたり、撮像画像に対してCG画像の位置がずれて表示されたりすることを防止することができるので、合成画像の現実味をより向上することができる。つまり、「CG画像が実際に存在するかのような感覚を与える」という拡張現実感技術の効果を十分に発揮することができる。
【0093】
なお、認識処理が失敗した場合、本実施形態では「前回に成功した認識処理の対象となった撮像画像」が合成画像の生成に用いられた。ここで、他の実施形態においては、認識処理が失敗した場合に合成画像の生成に用いられる撮像画像は、以前に成功した認識処理の対象となった撮像画像であればよく、前回に成功した(すなわち、最後に成功した)認識処理の対象となった撮像画像に限らない。
【0094】
なお、本実施形態においては、最後に認識処理が成功した撮像画像が合成画像に用いられるので、認識が失敗した場合には、1つの撮像画像が長期間表示されることになり、一見すると、表示される合成画像の動画が滑らかでなくなるようにも思われる。しかしながら、本実施形態においては、合成画像のうちのCG画像は認識処理の成功/失敗にかかわらず毎回更新されるので、CG画像の動画は滑らかに表示される。そのため、ユーザは合成画像全体の動画についても不自然に感じることはなく、違和感を抱くことはないと考えられる。
【0095】
なお、本実施形態においては、認識処理に要する時間がCG画像の生成間隔よりも長い場合を想定したが、本発明は、認識処理に要する時間がCG画像の生成間隔と同じ(もしくは短い)場合においても、有効である。以下、この場合についても本発明が有効であることを図7を参照して説明する。
【0096】
図7は、撮像画像の取得間隔および認識処理に要する時間を、CG画像の生成間隔と同じとした場合における合成処理を示す図である。図7においては、1フレーム時間(CG画像が生成される単位時間)毎に、撮像画像が取得され、撮像画像に対する認識処理が完了する場合を想定している。
【0097】
図7においては、時刻T2において撮像画像R2の認識に失敗したものとする。ここで、もし仮に時刻T2において(認識処理に失敗したために)CG画像を表示しないとすれば、CG画像がちらついて表示されてしまう。また、もし仮に時刻T2において撮像画像R1に基づくCG画像V1と、撮像画像R2とを合成するとすれば、撮像画像R2とCG画像V1との間で位置ずれが生じるおそれがある。これに対して、本発明によれば、ゲーム装置1は、図6に示す時刻T4の場合と同様、前回に成功した認識処理の対象となった撮像画像R1と、当該認識処理の処理結果を用いて生成されるCG画像V2とを合成する。これによって、上記実施形態と同様、ゲーム装置1は、CG画像のちらつき、および、撮像画像とCG画像との位置ずれを防止することができる。
【0098】
[ゲーム処理の詳細]
次に、図8〜図12を参照して、ゲームプログラムによって実行されるゲーム処理の詳細を説明する。以下では、ゲーム処理によって行われるゲームの例として、プレイヤが操作するプレイヤキャラクタが、図4に示したような大砲53に弾を命中させるゲームを説明する。具体的には、本ゲームでは、ゲームプログラムによって動作が制御され、向きを変えたり、弾を発射したりする大砲53がゲーム画像として表示される。また、本ゲームはいわゆる一人称視点のゲームであり、仮想空間における仮想カメラの位置はプレイヤキャラクタの位置としても用いられる。つまり、プレイヤは、ゲーム装置1を動かしてゲーム装置1とマーカ52との位置関係を変化させることによって、仮想空間内におけるプレイヤキャラクタを移動させることができる。また、プレイヤは、所定の操作を行うことによってプレイヤキャラクタに弾を発射させることができる。本ゲームにおいては、プレイヤは、プレイヤキャラクタを大砲53の弾に当たらないように移動させながら、大砲53に弾を命中させて遊ぶ。
【0099】
まず、ゲーム処理において用いられる各種データについて説明する。図8は、ゲームプログラムによる処理において用いられる各種データを示す図である。図8において、ゲーム装置1のメインメモリ32には、ゲームプログラム領域60、撮像画像バッファ領域62、認識済画像バッファ領域65、およびゲーム処理データ領域67が設定される。
【0100】
ゲームプログラム領域60は、後述するゲーム処理(図9)をゲーム装置1のCPU31に実行させるためのゲームプログラム61を記憶する領域である。ゲームプログラム61は、メモリカード29からその一部または全部が適宜のタイミングで読み込まれることによってメインメモリ32に記憶される。ゲームプログラム61には、上述の画像合成処理を実行するためのプログラムや、認識処理を実行するためのプログラムが含まれる。
【0101】
撮像画像バッファ領域62には、カメラによって撮像された撮像画像の画像データ(撮像画像データ)が記憶される。撮像画像バッファ領域62には、所定個数(例えば3個)の撮像画像データを記憶することが可能である。また、撮像画像バッファ領域62に記憶される撮像画像データは、認識処理中の撮像画像データを除いて、最も古い撮像画像データが削除されて新たな撮像画像データに更新されるように管理される。具体的には、撮像画像バッファ領域62には、状態データ63と撮像画像データ64とが関連付けられて記憶される。状態データ63は、それに関連付けられる撮像画像データ64の状態を示すデータであり、具体的には、「書き込み対象」、「認識処理中」、および「処理可能」のいずれかの状態を示す。
【0102】
認識済画像バッファ領域65には、撮像画像データのうちで、認識処理が成功して完了した撮像画像データ(認識済画像データと呼ぶ)66が記憶される。すなわち、撮像画像バッファ領域62に記憶される撮像画像データ64に対して認識処理が行われ、認識処理が成功した場合、当該撮像画像データ64は認識済画像バッファ領域65に記憶される。なお、認識済画像バッファ領域65には、最新の認識済画像データ66のみが記憶されればよい。詳細は後述するが、認識済画像バッファ領域65に記憶される撮像画像データが、CG画像と合成する合成処理の対象となる。
【0103】
ゲーム処理データ領域67は、ゲーム処理において用いられる各種のデータを記憶するための領域である。ゲーム処理データ領域67には、認識結果データ68、プレイヤ位置データ69、敵オブジェクトデータ70、表示画像データ71、および、失敗カウンタデータ72が記憶される。なお、ゲーム処理データ領域67には、上記の他、ゲームに登場する各種オブジェクト(上記大砲53等)に関するデータや、BGM等の音声データ等、ゲームに必要な各種データが記憶される。
【0104】
認識結果データ68は、上述の認識処理の処理結果を示すデータであり、具体的には、上述の位置関係を示すデータである。位置関係は、ゲーム装置1およびマーカ52の一方を基準としたときの他方の3次元位置、あるいは、一方から他方への3次元の方向として表されるので、3次元の座標や3次元のベクトル等によって表される。
【0105】
プレイヤ位置データ69は、仮想空間(ゲーム空間)におけるプレイヤキャラクタの位置を示すデータである。上述のように、本実施形態においては仮想空間における仮想カメラの位置はプレイヤキャラクタの位置としても用いられる。つまり、プレイヤ位置データ69は、仮想空間における仮想カメラの位置を示すとも言える。プレイヤ位置データ69は、上記認識結果データ68に基づいて算出される。
【0106】
敵オブジェクトデータ70は、敵オブジェクト(すなわち、大砲53)に関する各種パラメータを示すデータである。各種パラメータには、大砲53の向き、および、プレイヤが弾を命中させた数等を示すパラメータが含まれる。
【0107】
表示画像データ71は、表示装置(上側LCD22)に表示されるゲーム画像のデータである。詳細は後述するが、本ゲーム処理においては、上述した合成画像の他、後述する警告画像、あるいは、撮像画像のデータが表示されることもある。
【0108】
失敗カウンタデータ72は、失敗カウンタを示すデータである。失敗カウンタは、認識処理が連続して失敗する場合において、最初に失敗してからの経過時間を表す。すなわち、認識処理が失敗した場合、CPU31は失敗カウンタのカウントを開始し、その後、認識処理の失敗が連続する間、失敗カウンタのカウントを続ける。
【0109】
次に、ゲーム装置1において行われるゲーム処理の詳細を、図9〜図12を用いて説明する。図9は、ゲーム装置1において実行されるゲーム処理の流れを示すメインフローチャートである。電源ボタン14Fが押下されることによってゲーム装置1の電源が投入されると、ゲーム装置1のCPU31は、各種アプリケーションの起動を指示するためのメニュー画面(例えば、各アプリケーションを表す画像(アイコン)を含む画像)を表示する。ユーザは、メニュー画面においてゲームプログラム61を起動する指示、例えば、ゲームプログラム61のアイコンを選択する指示を行う。メニュー画面において、ゲームプログラム61の起動が指示されると、CPU31は、メインメモリ32等の初期化を行った後、図4に示す処理を行うためのゲームプログラム61の実行を開始する。本実施形態においては、ゲームプログラム61の実行によって、CPU31が請求項に記載の各手段として機能することとなる。つまり、ゲームプログラム61は、請求項に記載の各手段としてCPU31を機能させる。
【0110】
まずステップS1において、CPU31は、撮像画像が取得されたか否かを判定する。すなわち、カメラ(本実施形態では外側カメラ26)から撮像画像のデータが送られてきたか否かを判定する。なお、本実施形態においては、ステップS1〜S6の処理ループは、1フレーム時間(1/60秒)に1回の割合で実行されるのに対して、カメラはそれよりも少ない頻度(数フレーム時間に1回程度)で撮像画像を送るものとする。ステップS1の判定結果が肯定である場合、ステップS2の処理が実行される。一方、ステップS1の判定結果が否定である場合、ステップS2の処理がスキップされてステップS3の処理が実行される。
【0111】
ステップS2において、CPU31は、ステップS1で取得された撮像画像データをメインメモリ32の撮像画像バッファ領域62に記憶する。なお、撮像画像バッファ領域62に記憶可能な数の撮像画像データ64がすでに記憶されている場合、CPU31は、そのうちの1つを削除し、取得された撮像画像データを新たに記憶(更新)する。ここで、削除される撮像画像データ64は、それに関連付けられた状態データ63が「書き込み対象」を示す撮像画像データ64である。新たな撮像画像データ64の書き込みが完了すると、CPU31は、当該撮像画像データ64に関連付けられる状態データ63を「処理可能」を示すように変更する。また、状態データ63が「処理可能」を示す撮像画像データ64のうち、最も古い撮像画像データ64に関連付けられる状態データ63を、「書き込み対象」を示すように変更する。以上によって、撮像画像データ64は、認識処理中の撮像画像データ64を除いて、最も古い撮像画像データ64が新たな撮像画像データに更新される。ステップS2の次にステップS3の処理が実行される。
【0112】
ステップS3において、CPU31は認識管理処理を実行する。認識管理処理においては、撮像画像に対する認識処理が実行されるとともに、認識処理の結果に応じてデータの更新処理等が実行される。以下、図10を参照して、認識管理処理の詳細を説明する。
【0113】
図10は、図9に示す認識管理処理(ステップS3)の流れを示すフローチャートである。認識管理処理においては、まずステップS11において、CPU31は、認識処理中の撮像画像が存在するか否かを判定する。すなわち、CPU31は、撮像画像バッファ領域62に記憶されている撮像画像のうちに、認識処理の対象となっている画像が存在するか否かを判定する。この判定は、状態データ63が「認識処理中」を示す撮像画像データ64が存在するか否かによって行うことができる。ステップS11の判定結果が肯定である場合、ステップS12の処理が実行される。一方、ステップS11の判定結果が否定である場合、後述するステップS19の処理が実行される。
【0114】
ステップS12において、CPU31は、撮像画像に対する認識処理を実行する。ここで、本実施形態において、1つの撮像画像に関して認識結果を算出するまでの一連の認識処理(1回の認識処理)は、1フレーム時間を周期として実行される表示処理とは必ずしも同じ周期で実行されるわけではない。一般的には、1回の認識処理が1フレーム時間で完了することが困難な場合があり、そのような場合、1回のステップS12の処理では、認識処理全体のうちの一部の処理だけが実行される。この場合、1回のステップS12で実行される処理は、ステップS1〜S6の一連の処理が1フレーム時間内に完了することができるような処理量に調整される。
【0115】
また、ステップS12の処理において認識処理が完了した場合(すなわち、認識結果が算出された場合)、CPU31は、認識結果のデータをメインメモリ32に記憶する。具体的には、認識処理が成功した場合、上述の位置関係のデータが認識結果としてメインメモリ32に記憶される。一方、認識処理が失敗した場合(撮像画像からマーカ52を認識できなかった場合)、認識失敗を示すデータが認識結果としてメインメモリ32に記憶される。
【0116】
一方、ステップS12の処理において認識処理が完了しなかった場合、CPU31は、残りの認識処理の実行に必要なデータをメインメモリ32に記憶し、ステップS12の処理を終了する。次にステップS12の処理が実行される際には、メインメモリ32に記憶されたデータを用いて上記残りの処理が実行される。以上のステップS12の次にステップS13の処理が実行される。
【0117】
ステップS13において、CPU31は、1つの撮像画像に対する認識処理が完了したか否かを判定する。すなわち、上記ステップS12において認識処理の処理結果が得られた場合には、ステップS13の判定結果は肯定となり、上記ステップS12において認識処理の処理結果が得られなかった場合には、ステップS13の判定結果は否定となる。ステップS13の判定結果が肯定である場合、ステップS14の処理が実行される。一方、ステップS13の判定結果が否定である場合、CPU31は認識管理処理を終了する。
【0118】
ステップS14において、CPU31は、ステップS12で実行した認識処理の処理結果が成功であるか否かを判定する。ステップS14の判定は、ステップS12の終了時にメインメモリ32に記憶される認識結果のデータを参照して行うことができる。ステップS14の判定結果が否定である場合、ステップS15の処理が実行される。一方、ステップS14の判定結果が肯定である場合、後述するステップS16の処理が実行される。
【0119】
ステップS15において、CPU31は、失敗カウンタをカウントする。すなわち、失敗カウンタデータ72が示す失敗カウンタの値を1だけ加算し、加算した値を示すデータを新たな失敗カウンタデータ72としてメインメモリ32に記憶する。これによって、認識処理が失敗してからの経過時間を測定することができる。ステップS15の次に、後述するステップS19の処理が実行される。
【0120】
ステップS16〜S18においては、認識処理が成功した場合に必要となるデータの更新処理等が実行される。ステップS16において、CPU31は、上記ステップS12で認識処理が完了した撮像画像を合成処理の対象に設定する。具体的には、CPU31は、認識処理が完了した撮像画像データ64を、認識済画像バッファ領域65に認識済画像データ66として新たに記憶する。これによって、認識済画像データ66が更新される。なお、認識処理が完了した撮像画像データ64は、撮像画像バッファ領域62に記憶されている撮像画像データ64のうち、状態データ63が「認識処理中」である撮像画像データ64である。詳細は後述するが、認識済画像バッファ領域65に記憶される認識済画像データ66が、CG画像と合成する対象となる。ステップS16の次にステップS17の処理が実行される。
【0121】
ステップS17において、CPU31は、メインメモリ32に記憶されている認識結果データ68を更新する。すなわち、上記ステップS12で記憶された認識結果を示すデータが、新たな認識結果データ68としてメインメモリ32に記憶される。ステップS17の次にステップS18の処理が実行される。
【0122】
ステップS18において、CPU31は失敗カウンタをリセットする。すなわち、メインメモリ32に記憶される失敗カウンタデータ72の値が0に設定される。ステップS18の次にステップS19の処理が実行される。
【0123】
ステップS19において、CPU31は、次に認識処理を実行する対象となる撮像画像を決定する。ここで、認識処理の新たな対象となる撮像画像データは、撮像画像バッファ領域62に格納されている撮像画像データ64のうち、状態データ63が「処理可能」を示す、最も新しい撮像画像データ64である。CPU31は、認識処理の対象となる撮像画像データ64に関連付けられる状態データ63を「認識処理中」を示すように変更する。これによって、次回に実行されるステップS12では、状態データ63が「認識処理中」へと変更された撮像画像データ64に対して認識処理が実行される。また、CPU31は、「認識処理中」を示す状態データ63が複数存在することを避けるため、ステップS19の前から「認識処理中」を示していた状態データ63を「書き込み対象」を示すように変更する。ステップS19の後、CPU31は認識管理処理を終了する。
【0124】
なお、上記ステップS19によれば、1回の認識処理が終了すると、取得された撮像画像のうちで最新の撮像画像に対して次の認識処理が実行される。そのため、最新でない撮像画像は、認識処理が行われずに破棄されることもある。ここで、取得された撮像画像の全てについて認識処理を順次実行するとすれば、1回の認識処理に要する時間が撮像画像の取得間隔よりも長い場合には、認識処理が完了して表示対象となった撮像画像が次第に蓄積されていってしまう。つまり、表示される撮像画像は、実時間に対して次第に遅れていってしまうおそれがある。これに対して、本実施形態によれば、最新でない撮像画像については認識処理を行わないようにすることによって、表示される撮像画像の遅延が蓄積していくことを防止することができる。
【0125】
上記の認識管理処理によれば、撮像画像に対する認識処理が終了し、認識が成功した場合(ステップS13およびS14でYES)、その撮像画像は合成処理(後述するステップS35)の対象に設定される(ステップS16)。つまり、認識処理が成功した撮像画像を用いて合成画像が生成される。一方、認識が失敗した場合(ステップS14でYES)にはステップS16の処理は実行されないので、その撮像画像は合成処理の対象とされない。したがって、認識が失敗した場合には、合成処理の対象となる撮像画像は変更されず、合成処理においては前回と同じ撮像画像が用いられる。つまり、認識が失敗した場合には、前回に成功した認識処理の対象となった撮像画像が引き続き合成処理に用いられる。また、認識管理処理において、認識処理が終了しなかった場合もステップS16の処理が実行されないので、合成処理の対象となる撮像画像は変更されず、合成処理においては前回と同じ撮像画像が用いられる。したがって、合成処理においては、認識処理が終了するまでは前回と同じ撮像画像(すなわち、前回に成功した認識処理の対象となった撮像画像)が用いられる。
【0126】
図9の説明に戻り、認識管理処理(ステップS3)の次のステップS4において、CPU31はゲーム制御処理を実行する。ゲーム処理においては、プレイヤによるゲーム入力等に基づいて仮想空間内のオブジェクトの動作が制御される。以下、図11を参照して、ゲーム制御処理の詳細を説明する。
【0127】
図11は、図9に示すゲーム制御処理(ステップS4)の流れを示すフローチャートである。ゲーム制御処理においては、まずステップS21において、CPU31は、失敗カウンタの値が所定の第1閾値N1よりも大きいか否かを判定する。すなわち、CPU31は、メインメモリ32に記憶されている失敗カウンタデータ72を読み出し、失敗カウンタデータ72の値と第1閾値N1とを比較する。なお、第1閾値N1は予め定められており、ゲームの内容等に応じて適切な値に設定される。ここで、失敗カウンタの値は、認識処理が連続して失敗する場合において、最初に失敗してからの経過時間を表す。つまり、ステップS21の判定処理は、認識処理が所定時間の間連続して失敗したか否かを判定するための処理である。ステップS21の判定結果が否定である場合、ステップS22の処理が実行される。一方、ステップS21の判定結果が肯定である場合、後述するステップS25の処理が実行される。
【0128】
ステップS22において、CPU31は、プレイヤによるゲーム操作の入力を受け付ける。具体的には、CPU31は、タッチパネル13の入力面に対して入力が行われた位置を示すタッチ位置データを取得するとともに、各操作ボタン14A〜14Kに対する入力状況(押下されたか否か)を示す操作データを取得する。ステップS22の次にステップS23の処理が実行される。
【0129】
ステップS23において、CPU31は、入力に基づくゲーム制御を行う。ここで、本実施形態においては、上記ステップS22で受け付けられた、入力装置(タッチパネル13および各操作ボタン14A〜14K)に対する入力だけでなく、認識結果データ68もゲーム入力として用いられる。具体的には、CPU31は、認識結果データ68に基づいてプレイヤキャラクタの位置(および姿勢)を算出する。本実施形態においては、プレイヤキャラクタの位置および姿勢は、仮想カメラの位置および姿勢と同じである。つまり、プレイヤキャラクタの位置は、大砲53に対するプレイヤキャラクタの位置が、認識結果データ68が示す位置関係(ゲーム装置1とマーカ52との現実空間の位置関係)に応じた位置となるように算出される。また、プレイヤキャラクタの姿勢(仮想カメラの姿勢)は、表示画面上におけるマーカ52の位置に大砲53が表示されるように算出される。より具体的な処理としては、CPU31は、認識結果データ68をメインメモリ32から読み出し、認識結果データ68に基づいてプレイヤキャラクタの位置を算出し、算出した位置を示すデータをプレイヤ位置データ69としてメインメモリ32に記憶する。また、入力装置に対する入力に応じた動作としては、CPU31は、例えば、所定のボタンが押下されたことに応じてプレイヤキャラクタから弾を発射する処理を行う。ステップS23の次にステップS24の処理が実行される。
【0130】
ステップS24において、CPU31は、ステップS23で実行される処理以外の他のゲーム制御を行う。ステップS24で実行される処理としては、例えば、大砲53の動作(大砲53の向きを変えたり弾を発射したりする動作)の制御、各オブジェクトが弾に当たったか否かの判定、および、得点の計算等の処理が考えられる。なお、大砲53に関するパラメータ(大砲53の向き等を示すパラメータ)を示すデータは、敵オブジェクトデータ70としてメインメモリ32に記憶される。ステップS24の後、CPU31は図11に示すゲーム制御処理を終了する。
【0131】
一方、ステップS25において、CPU31はゲームを中断する。ここで、ステップS25が実行される場合とは、認識処理が所定時間の間連続して失敗した場合である。詳細は後述するが、認識処理が所定時間の間連続して失敗した場合(失敗カウンタの値が第1閾値N1以上となった場合)、認識が成功していないことを表す警告画像が合成画像に代えて表示される(後述するステップS34)。警告画像が表示される場合にはゲームを進行することができないので、CPU31は、ステップS25においてゲーム進行を中断する。ステップS25の後、CPU31は図11に示すゲーム制御処理を終了する。
【0132】
上記ゲーム制御処理によれば、認識処理の処理結果がゲーム入力として用いられる。すなわち、仮想空間に登場するオブジェクト(プレイヤキャラクタ)の動作が認識結果データ68に基づいて制御される(ステップS23)。これによれば、プレイヤは、ゲーム装置1を動かす(あるいはプレイヤ自身が移動する)ことによって、プレイヤキャラクタを移動させることができる。したがって、本実施形態においては、現実空間を表す撮像画像に仮想空間のオブジェクト(大砲53)が合成されたゲーム画像が表示され(図4)、さらに、現実空間におけるゲーム装置1の位置が仮想空間のオブジェクト(プレイヤキャラクタ)の位置に反映される。これによって、あたかも仮想オブジェクトが存在するかのような現実空間においてプレイヤ自身が実際に動いて遊ぶという、拡張現実感技術を用いた新規なゲームを提供することができる。
【0133】
図9の説明に戻り、ゲーム制御処理(ステップS4)の次のステップS5において、CPU31は、上述の合成画像や警告画像等を生成して表示する表示処理を実行する。以下、図12を参照して、表示処理の詳細を説明する。
【0134】
図12は、図9に示す表示処理(ステップS5)の流れを示すフローチャートである。表示処理においては、まずステップS31において、CPU31は、失敗カウンタの値が所定の第2閾値N2よりも大きいか否かを判定する。すなわち、CPU31は、メインメモリ32に記憶されている失敗カウンタデータ72を読み出し、失敗カウンタデータ72の値と第2閾値N2とを比較する。なお、第2閾値N2は第1閾値N1よりも大きく、ゲームの内容等に応じて適切な値に予め設定される。ステップS31の判定処理は、第2閾値N2に相当する所定時間の間、認識処理が連続して失敗したか否かを判定するための処理である。ステップS31の判定結果が肯定である場合、ステップS32の処理が実行される。一方、ステップS31の判定結果が否定である場合、後述するステップS33の処理が実行される。
【0135】
ステップS32において、CPU31は、撮像画像を表示装置(上側LCD22)に表示させる。具体的には、CPU31は、カメラから送られてくる撮像画像データを上側LCD22に表示させる。このように、失敗カウンタが第2閾値N2以上である場合には、撮像画像のみが表示され、CG画像は合成されない。ステップS32の後、CPU31は表示処理を終了する。
【0136】
一方、ステップS33において、CPU31は、失敗カウンタの値が所定の第1閾値N1よりも大きいか否かを判定する。ステップS33の処理は上述のステップS21の処理と同じである。ステップS33の判定結果が肯定である場合、ステップS34の処理が実行される。一方、ステップS33の判定結果が否定である場合、後述するステップS35の処理が実行される。
【0137】
ステップS34において、CPU31は、警告画像を表示装置(上側LCD22)に表示させる。警告画像は、マーカ52の認識が所定期間連続して失敗していることをプレイヤに警告するための画像である。警告画像はどのような画像であってもよいが、撮像画像とは異なる、あるいは、撮像画像を含まない画像であることが好ましい。本実施形態においては、警告画像として、いわゆる砂嵐の画像(「マーカが認識されていません」等の文字を含んでもよい)が表示される。CPU31は、ゲームプログラム61において予め用意される動画あるいは静止画を警告画像として用いてもよい。ステップS34の後、CPU31は表示処理を終了する。
【0138】
一方、ステップS35において、CPU31は、撮像画像とCG画像とを合成した合成画像を生成する。ここで、合成に用いられる撮像画像データは、認識済画像バッファ領域65に記憶されている撮像画像データ(認識済画像データ66)である。つまり、本実施形態においては、認識処理が成功した最新の撮像画像(前回に認識処理が成功した撮像画像)が合成画像の生成に用いられる。生成された合成画像のデータは、表示画像データ71としてメインメモリ32に記憶される。
【0139】
なお、本実施形態においては、合成画像は、仮想空間の画像の背景として撮像画像を用いる方法によって生成される。すなわち、CPU31は、仮想空間における(仮想カメラから見て)大砲53の後方に背景のオブジェクトを配置しておき、仮想カメラの位置から仮想カメラの方向に大砲53を見た場合の仮想空間の画像を生成する際、背景オブジェクトのテクスチャとして撮像画像を用いる。これによって、撮像画像の上に大砲53のCG画像が合成された合成画像を生成することができる。なお、仮想カメラの位置および姿勢は、上述のステップS23でプレイヤキャラクタの位置および姿勢として算出されている。また、大砲53の動作(大砲53の向き等)は、上述のステップS24で算出されている。なお、他の実施形態においては、CPU31は、まずCG画像を生成し、その後、撮像画像に対してCG画像を合成することによって合成画像を生成してもよい。ステップS35の次にステップS36の処理が実行される。
【0140】
ステップS36において、CPU31は、失敗カウンタの値が所定の第3閾値N3よりも大きいか否かを判定する。すなわち、CPU31は、メインメモリ32に記憶されている失敗カウンタデータ72を読み出し、失敗カウンタデータ72の値と第3閾値N3とを比較する。第3閾値N3は第1閾値N1よりも小さく、ゲームの内容等に応じて適切な値に予め設定される。ステップS36の判定処理は、第3閾値N3に相当する所定時間の間、認識処理が連続して失敗したか否かを判定するための処理である。ステップS36の判定結果が肯定である場合、ステップS37の処理が実行される。一方、ステップS36の判定結果が否定である場合、ステップS37の処理がスキップされてステップS38の処理が実行される。
【0141】
ステップS37において、CPU31は、合成画像に対して、失敗カウンタの値に応じた割合で警告画像をさらに合成する。合成画像と警告画像との合成方法はどのような方法であってもよいが、一般的なアルファブレンド処理による方法を用いることができる。このとき、CPU31は、警告画像の透明度を表すアルファ値を、失敗カウンタの値が“N3”の場合に100%となり、失敗カウンタの値が“N1”の場合に0%となり、失敗カウンタの値が“N3”から“N1”へ増加するに従って透明度が小さくなるように決定する。そして、決定されたアルファ値に従って合成画像と警告画像とを合成する。以上のステップS37の処理によって、時間の経過に従って(失敗カウンタの値の増加に従って)警告画像が次第に濃くなり、合成画像が薄くなる画像を生成することができる。ステップS37で生成された画像データは、表示画像データ71としてメインメモリ32に記憶される。ステップS37の次にステップS38の処理が実行される。
【0142】
ステップS38において、CPU31は、合成画像を表示装置(上側LCD22)に表示させる。具体的には、CPU31は、表示画像データ71をメインメモリ32から読み出して上側LCD22に表示させる。これによって、撮像画像に対してゲームオブジェクト(大砲53)のCG画像が合成されたゲーム画像(図4)が表示される。
【0143】
なお、ステップS38において、認識処理が成功している場合、および、失敗カウンタの値が上記第3閾値N3より小さい場合には、ステップS35で生成された合成画像がそのまま表示される。一方、失敗カウンタの値が上記第3閾値N3以上である場合には、合成画像と警告画像とが合成された画像が表示される。また、警告画像の透明度は失敗カウンタの値に応じて変化するので、失敗カウンタの値が上記第3閾値N3以上である場合には、時間の経過に従って警告画像が次第に濃く(合成画像が薄く)なるゲーム画像が表示される。上記ステップS38の後、CPU31は表示処理を終了する。
【0144】
上記表示処理によれば、認識処理が成功している場合(ステップS31,S33,S36でNo)には、合成画像が表示される。また、認識処理が失敗した場合でも、第3閾値N3に相当する時間だけ連続して失敗するまでは、ステップS31,S33,およびS36の判定結果は否定となるので、合成画像が表示される。その後、認識処理の失敗の時間が第3閾値N3に相当する時間を超えると、ステップS36の判定結果が肯定となるので、合成画像に警告画像(砂嵐の画像)が合成された画像が表示される。そして、時間が経過するに従って警告画像が濃く表示されていく(ステップS37)。さらに、認識処理の失敗の時間が第1閾値N1に相当する時間を超えると、ステップS33の判定結果が肯定となるので、警告画像のみが表示される。また、警告画像が表示されるタイミングでゲームが中断される(ステップS25)。したがって、上記表示処理によれば、認識処理が失敗した場合でも即座にCG画像が表示されなくなるわけではないので、CG画像がちらついて表示されることがない。また、認識処理の失敗が所定時間以上連続する場合には、警告画像が表示されるので、認識処理が失敗していることをプレイヤに通知することができる。
【0145】
なお、警告画像として(CG画像を含まない)撮像画像を表示することも考えられる。警告画像として撮像画像を表示すると、プレイヤには仮想オブジェクトが消えたように見える。しかし、ゲームの進行によって仮想オブジェクトが表示されなくなる場合(例えば、仮想オブジェクトを破壊した場合)も考えられ、この場合、プレイヤにとっては、認識に失敗したのかどうかの判断がつきにくくなる。これに対して、本実施形態によれば、警告画像として撮像画像とは異なる画像を表示するので、認識処理が失敗していることをより確実にプレイヤに通知することができる。さらに、本実施形態では、警告画像は時間の経過に従って次第に濃くなるように表示されるので、警告画像が急に表示される場合に比べてプレイヤに与える違和感を軽減して通知を行うことができる。なお、他の実施形態においては、CPU31は、認識処理が連続して失敗した場合、警告画像を表示せずに撮像画像を表示するようにしてもよい。すなわち、図12に示す表示処理において、CPU31は、上記ステップS33およびS34の処理を省略するようにしてもよい。これによっても、上記実施形態と同様、認識処理が失敗していることをプレイヤに通知することができる。
【0146】
さらに、上記表示処理によれば、警告画像が表示された後、認識処理の失敗の時間が第2閾値N2に相当する時間を超えると、ステップS31の判定結果が肯定となるので、撮像画像のみが表示される。これは、警告画像を表示し続けると、プレイヤはゲーム装置1が撮像している画像を把握できないため、マーカ52を正しく撮像することができなくなるからである。すなわち、本実施形態では、警告画像が表示されてゲームが中断された後は、プレイヤがマーカ52を正しく撮像できるようにゲーム装置1の向きを修正しやすくする目的で、撮像画像を表示するようにしている。
【0147】
図9の説明に戻り、表示処理(ステップS5)の次のステップS6において、CPU31は、ゲームを終了するか否かを判定する。ステップS6の判定は、例えば、ゲームがクリアされたか否か、ゲームオーバーとなったか否か、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS6の判定結果が否定である場合、ステップS1の処理が再度実行される。以降、ステップS6でゲームを終了すると判定されるまで、ステップS1〜S6の処理ループが繰り返し実行される。一方、ステップS6の判定結果が肯定である場合、CPU31は、図9に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【0148】
以上のように、上記ゲーム処理によれば、撮像画像に対する認識処理が成功した場合には、その撮像画像は認識済画像バッファ領域65に記憶されて(ステップS16)合成画像に用いられる(ステップS35)。このとき、合成されるCG画像は、成功した認識結果に基づいて生成される。一方、認識処理が失敗した場合には、その撮像画像は合成画像に用いられず、認識済画像バッファ領域65には前の撮像画像が維持される。したがって、認識処理が失敗した場合には、前回に認識処理が成功した撮像画像を用いて合成画像が生成されて表示される。また、合成されるCG画像も、前回に認識処理が成功したときの認識結果に基づいて生成される。これによれば、認識失敗が断続的に起こったとしてもCG画像がちらついて表示されることがなく、また、撮像画像とCG画像との位置ずれが生じることもない。したがって、本実施形態によれば、より現実感の高い合成画像を生成して表示することができる。
【0149】
また、上記ゲーム処理においては、表示される仮想オブジェクト(大砲53)の動作を制御する処理(ステップS24)は毎フレーム実行される。認識が成功した場合だけでなく、失敗した場合であっても一定期間(ステップS33でNoとなる間)は仮想オブジェクトの画像が撮像画像に合成されて表示される。これによって、仮想オブジェクトの動作は毎フレーム更新されて動画として表示されることになる。そのため、撮像画像が毎フレーム更新されない場合でも、動画のコマ数が少ない印象をプレイヤに与えることなく、合成画像として滑らかな動画を表示することができる。
【0150】
なお、上記ゲーム処理においては、仮想オブジェクトの動作は毎フレーム更新される(ステップS24)のに対して、仮想オブジェクトの表示位置(仮想カメラの位置および姿勢)を決定する処理(ステップS23)は、認識が成功した場合に更新される(ステップS17)認識結果データを用いて行われる。したがって、本実施形態によれば、仮想オブジェクトの動作を毎フレーム更新される滑らかな動画として表示しつつ、撮像画像と仮想オブジェクトの画像との位置ずれを防止することができる。
【0151】
また、上記ゲーム処理によれば、第1閾値N1に相当する所定時間の間、認識処理が連続して失敗した場合、警告画像が表示される他、ゲームが中断される(ステップS25)。つまり、本実施形態では、警告画像が表示されることに応じて、ゲームの進行が中断される。ここで、本実施形態においては、認識が失敗してもCG画像が表示されるので、認識が失敗しても即座にゲームを中断する必要はない。また、認識が失敗したことに応じてゲームを中断するようにすると、ゲームが頻繁に中断されてしまうおそれがある。そのため、本実施形態では、認識が失敗してもゲームを継続するようにしている。ただし、認識が失敗している間は、認識結果をゲーム入力として用いることができないので、認識が失敗した後でもずっとゲームが継続されると、プレイヤはゲーム操作を行えないためにゲームに支障が出る。そこで、本実施形態では、認識が失敗してから一定時間が経過した場合、ゲームを中断するようにしている。また、警告画像が表示されることに応じてゲームを中断するので、合成画像が表示されなくなるタイミングでゲームを中断することができ、プレイヤに違和感を与えることなくゲームを中断させることができる。
【0152】
なお、他の実施形態においては、CPU31は、認識が失敗したタイミングでゲームを中断するようにしてもよい。例えば、認識結果をゲーム入力として用いるゲームであって、シビアなゲーム操作が要求されるゲームにおいては、認識が失敗したことに応じてゲームを中断することが考えられる。また、上記ゲーム処理のように、警告画像を次第に濃く表示していく場合には、CPU31は、警告画像が合成画像に対して所定の割合で合成されたことに応じてゲームを中断するようにしてもよい。すなわち、上記ゲーム処理においては、CPU31は、失敗カウンタの値が第1閾値N1と第3閾値N3との間の所定値となった場合にゲームを中断してもよい。
【0153】
[変形例]
上記実施形態は本発明を実施する一例であり、他の実施形態においては例えば以下に説明する構成で本発明を実施することも可能である。
【0154】
(画像処理プログラムに関する変形例)
上記実施形態においては、画像表示プログラムの例としてゲームプログラムを挙げて説明したが、本発明は、ゲームプログラム以外にも、拡張現実感技術を用いる任意の画像表示プログラムに利用することが可能である。
【0155】
(ゲームに関する変形例)
また、上記実施形態においては、ゲームプログラムによって実行されるゲームの例として、敵オブジェクト(大砲53)が表示される一人称視点のゲームについて説明したが、本発明は、拡張現実感技術を用いてゲーム画像を表示する任意のゲームのためのゲームプログラムに利用することが可能である。例えば、上記実施形態では、画面に表示されない仮想オブジェクト(プレイヤキャラクタ)の動作が認識結果に基づいて制御された。ここで、他の実施形態では、ゲーム装置1は、認識結果に基づいて、画面上に表示される仮想オブジェクトの動作を制御するようにしてもよい。例えば、ゲームプログラムによって実行されるゲームとしては、次の例が考えられる。
・画面上の仮想オブジェクトの位置が上記認識結果に基づいて決定されるゲーム
ゲーム装置1とマーカ52との位置関係(認識結果)に応じて仮想空間内における位置が決定されるクレーンのオブジェクトが登場し、プレイヤは、クレームのオブジェクトを操作して仮想空間内に配置される他のオブジェクトを釣り上げて遊ぶ。
・画面上の仮想オブジェクトの移動方向が上記処理結果に基づいて決定されるゲーム
ビリヤードのゲームであって、仮想オブジェクトとしてビリヤードの玉が配置され、プレイヤは、上記認識結果に基づいて決定される仮想カメラの視線方向に玉を突くことができる(つまり、玉の移動方向がゲーム装置1とマーカ52との位置関係によって制御される)。
【0156】
(警告画像を表示する条件に関する変形例)
上記実施形態では、ゲーム装置1は、認識処理が所定時間連続して失敗したことを条件として、警告画像を表示するようにした。ここで、他の実施形態では、ゲーム装置1は、カメラ(ゲーム装置1)の動きを検知して、カメラが所定の基準以上動いていることが検知されたことを条件として、警告画像を表示するようにしてもよい。以下、カメラの動きを検知して警告画像を表示する変形例の詳細について説明する。
【0157】
図13は、本実施形態における表示処理(ステップS5)の変形例を示すフローチャートである。なお、図13においては、図12と同じ処理については図12と同じステップ番号を付し、詳細な説明を省略する。
【0158】
図13においては、ステップS33の判定結果が肯定である場合、ステップS41の処理が実行される。ステップS41において、CPU31は、カメラ(ゲーム装置1)の動きを検知する。ここで、動きを検知する方法はどのような方法でもよいが、例えば、ゲーム装置1が加速度センサあるいはジャイロセンサを備える場合には、CPU31はこれらのセンサによる検知結果を取得する。また、CPU31は、撮像画像から所定の対象(マーカとは別の物であってもよい)を認識し、撮像画像内における当該所定の対象の動きからカメラの動きを算出するようにしてもよい。ステップS41の次にステップS42の処理が実行される。
【0159】
ステップS42において、CPU31は、カメラ(ゲーム装置1)の動きが所定の基準以上であるか否かを判定する。所定の基準としては、カメラの加速度(各速度)が所定値以上であることや、カメラの(単位時間当たりの)移動量が所定値以上であること等が考えられる。ステップS42判定結果が肯定である場合、ステップS34の処理が実行される。一方、ステップS42の判定結果が否定である場合、ステップS35の処理が実行される。
【0160】
以上より、図13に示す変形例においては、カメラの動きが所定の基準よりも激しい場合、警告画像が表示され(ステップS34)、カメラの動きが所定の基準よりも緩やかである場合、合成画像が引き続き表示される。ここで、カメラが激しく動いた場合には、マーカ52が撮像範囲から外れて認識ができなくなっている可能性が高いと推測することができ、逆に、カメラがあまり動いていない場合には、マーカ52が撮像範囲内にあり、認識が再度成功する可能性があると推測することができる。したがって、本変形例によれば、認識が失敗した場合において、その後認識が再度成功する(認識の失敗が一時的なものである)と推測される場合には合成画像が引き続き表示され、認識が再度成功する見込みが少ない場合には警告画像が表示される。これによって、警告画像をより適切な状況で表示させることができる。
【0161】
なお、上記変形例においては、図示しないが、ゲーム制御処理(ステップS4)におけるゲーム中断処理(ステップS25)は、警告画像が表示されることに応じて行われることが好ましい。すなわち、ゲーム制御処理において、CPU31は、ステップS21の判定結果が肯定である場合には図13と同様のステップS41およびS42を実行し、ステップS42の判定結果が肯定の場合にステップS25を実行するようにしてもよい。
【0162】
また、上記変形例においては、認識が失敗となった場合にすぐにステップS41およびS42の処理が実行されるようにしてもよい。すなわち、第1閾値N1は“1”あるいは非常に小さい値に設定されてもよい。また、上記変形例においては、撮像画像を表示するステップS32の処理は、警告画像が表示された後、警告画像が表示されてから所定時間が経過したことを条件として実行されてもよい。
【0163】
以上のように、上記変形例によれば、カメラ(ゲーム装置1)の動きを検知することによって、認識の失敗が一時的なものであるか否かを判断することができ、警告画像を表示するタイミングを適切に決定することができる。
【0164】
(ゲームシステムに関する変形例)
上記実施形態においては、合成画像を生成・表示するための一連の処理が単一の装置(ゲーム装置1)において実行される場合を説明したが、他の実施形態においては、一連の処理が複数の情報処理装置からなる情報処理システムにおいて実行されてもよい。例えば、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、端末側の装置がカメラによって撮像画像を取得し、取得された撮像画像のデータをサーバ側装置へ送信する。撮像画像のデータを受信したサーバ側装置は、認識処理(上記実施形態で言えば、ステップS3の認識管理処理)およびゲーム処理(上記実施形態で言えば、ステップS4のゲーム制御処理)を実行し、ゲーム処理の結果のデータを端末側装置へ送信する。ゲーム処理の結果のデータは、例えば、ゲーム画像のデータ、あるいは、ゲーム画像の生成に必要なデータである。端末側装置は、ゲーム処理の結果のデータを受信し、当該データに基づいて合成画像等のゲーム画像を表示装置に表示する。このように、本発明は、複数の情報処理装置からなる情報処理システムによって実現されてもよい。
【産業上の利用可能性】
【0165】
以上のように、本発明は、拡張現実感技術において仮想画像をより現実味を増して表示すること等を目的として、例えばゲームプログラムやゲーム装置として利用することが可能である。
【符号の説明】
【0166】
1 ゲーム装置
13 タッチパネル
22 上側LCD
25 外側カメラ
31 CPU
32 メインメモリ
52 マーカ
53 大砲(仮想オブジェクト)
61 ゲームプログラム
64 撮像画像データ
66 認識済画像データ
68 認識結果データ
69 プレイヤ位置データ
【技術分野】
【0001】
本発明は、拡張現実感技術を用いて画像を表示する画像表示プログラム、画像表示装置、画像表示システム、および画像表示方法に関する。
【背景技術】
【0002】
従来、現実空間の画像(カメラによる撮像画像)に仮想空間の画像(CG画像)を合成して表示する拡張現実感技術がある。非特許文献1には、拡張現実感技術の基本的な画像生成方法が記載されている。拡張現実感技術においては、現実空間にマーカを配置しておき、マーカ周辺をカメラで撮像する。撮像された画像内のマーカは画像認識処理によって検出され、マーカの3次元位置が計算される。計算された3次元位置を用いて仮想空間内の物体の画像(CG画像)を生成して、その画像をカメラ画像中のマーカの位置に合成して表示することで、現実空間の撮像画像に仮想の物体が合成された画像を表示することができる。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】加藤博一、Mark Billinghurst,「拡張現実感システムにおけるマーカー追跡とHMDキャリブレーション(Marker Tracking andHMD Calibration for a video-based Augmented Reality Conferencing System)」,IWAR99(拡張現実感に関する第2回国際ワークショップ(the 2nd InternationalWorkshop on Augmented Reality))における会報,米国,1999年10月
【発明の概要】
【発明が解決しようとする課題】
【0004】
従来の拡張現実感技術では、現実の撮像画像と仮想のCG画像との間に位置ずれが生じて表示されたり、CG画像がちらついて表示されたりするという問題があった。
【0005】
拡張現実感技術では、撮像画像に含まれるマーカを認識してマーカの3次元位置を計算する必要があり、これら認識および計算の処理には時間を要する。そのため、認識および計算の処理結果に基づいて生成されるCG画像は、撮像画像に対して時間的に遅れてしまう。したがって、カメラが動かされて撮像画像が変化する場合、その撮像画像に合成されるべきCG画像は時間的に遅れるために変化前の位置に合成されてしまうので、撮像画像内のマーカの位置とCG画像が合成される位置とがずれてしまう。
【0006】
また、実際にはマーカが撮像されていても、撮像画像からマーカをうまく認識することができず、認識処理が失敗する場合もある。認識処理が失敗した場合には、その認識処理の対象となった撮像画像からCG画像を生成することはできないので、撮像画像のみが表示されることとなる。そのため、認識処理の失敗が断続的に起こると、CG画像がちらついて表示されてしまう。
【0007】
このように、従来においては、CG画像は位置がずれて表示されたり、ちらついて表示されたりするおそれがあったため、撮像画像とCG画像とを合成した合成画像は現実味(リアルさ)に欠けるおそれがあった。そのため、拡張現実感技術の特徴である「CG画像が実際に存在するかのような感覚を与える」効果を十分に発揮することができなかった。
【0008】
それ故、本発明の目的は、拡張現実感技術において合成画像をより現実味を増して表示することができる画像表示プログラム、画像表示装置、画像表示システム、および画像表示方法を提供することである。
【課題を解決するための手段】
【0009】
本発明は、上記の課題を解決するために、以下の(1)〜(15)の構成を採用した。
【0010】
(1)
本発明は、撮像手段から撮像画像を取得可能な情報処理装置のコンピュータを、認識手段と、合成手段と、表示制御手段として機能させる画像表示プログラムである。認識手段は、取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する。合成手段は、認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する。表示制御手段は、合成画像を表示手段に表示させる。また、合成手段は、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する。
【0011】
上記「情報処理装置」とは、後述する実施形態に記載のゲーム装置の他、コンピュータプログラムを実行することによって情報処理を行う任意のコンピュータを含む概念である。また、上記「情報処理装置」は、携帯型か否かを問わない。
上記「画像表示プログラム」とは、一例としては、後述する実施形態に記載のゲームプログラムであるが、パーソナルコンピュータや携帯端末において実行されるアプリケーションプログラムを含む概念である。
上記「所定の対象」とは、後述する実施形態におけるマーカ52の他、認識処理によって認識することが可能な物であれば、どのような物であってもよい。例えば、ユーザ(プレイヤ)の顔等を所定の対象として認識するようにしてもよい。
上記「仮想オブジェクト」は、撮像画像と合成されるために生成される画像であればよく、仮想オブジェクトの画像の生成方法や内容はどのようなものであってもよい。
上記「認識手段」および上記「合成手段」は、繰り返し処理を実行するものであるが、両者の処理が繰り返される頻度(周期)は、同じである必要はない。例えば、下記(7)の構成や後述する実施形態のように、認識手段による認識処理の頻度は、合成手段による合成処理の頻度よりも少なくてもよい。
【0012】
上記(1)の構成によれば、合成手段は、認識処理の処理結果を用いて生成される仮想オブジェクトの画像と撮像画像との合成画像を生成する。ここで、認識処理が失敗した場合、合成手段は、前回に成功した認識処理の対象となった撮像画像を用いて合成画像を生成する。したがって、認識に失敗した場合でも仮想オブジェクトの画像を含む合成画像が表示されるので、認識が失敗する度に仮想オブジェクトが消えてしまう(表示されない)ことによって仮想オブジェクトがちらついて表示されることを防止することができる。また、認識処理が失敗した場合に合成される仮想オブジェクトの画像は、撮像画像に合わせて、前回に成功した認識処理の処理結果を用いて生成される。したがって、仮想オブジェクトの画像は、その画像が生成される元となった撮像画像と合成されるので、撮像画像と仮想オブジェクトとの間で位置ずれが生じることがない。以上のように、上記(1)の構成によれば、画像のちらつきや位置ずれが生じないので、仮想オブジェクトが実世界にいるような実在感が増す。すなわち、上記(1)の構成によれば、拡張現実感技術において合成画像をより現実味を増して表示することができる。
【0013】
(2)
合成手段は、認識処理の処理結果にかかわらず、仮想オブジェクトの画像を更新して合成画像を生成してもよい。
【0014】
上記「認識処理の処理結果にかかわらず」とは、認識処理が成功した場合であっても失敗した場合であっても合成手段は仮想オブジェクトの画像を更新して合成画像を生成する意味である。また、合成画像の生成間隔が認識処理の処理時間よりも短い場合には、認識処理の処理結果が得られていない状況であっても、(合成画像を生成すべきタイミングが到来すると)合成手段は仮想オブジェクトの画像を更新して合成画像を生成する。
【0015】
上記(2)の構成によれば、合成画像のうち、仮想オブジェクトの画像に関しては、一定の頻度で画像が更新される。そのため、仮想オブジェクトに関しては、認識処理の成功/失敗にかかわらず、滑らかな動画で表示することができる。ここで、上記(1)の構成によれば、認識処理が失敗した場合には撮像画像は更新されないので、撮像画像のみに関して言えば、動画が滑らかに表示されないためにユーザが違和感を抱くおそれがある。しかし、上記(2)の構成によれば、撮像画像に合成する仮想オブジェクトの動画が滑らかに表示されることによって、合成画像全体としては滑らかな印象をユーザに与えることができ、撮像画像に対してユーザが抱く違和感を軽減・抑止することができる。
【0016】
(3)
画像表示プログラムは、認識処理が成功した場合、成功した認識処理の対象となった撮像画像と当該認識処理の処理結果とを、コンピュータがアクセス可能な記憶手段に記憶させる記憶制御手段としてコンピュータをさらに機能させてもよい。このとき、合成手段は、記憶手段に記憶される撮像画像と、当該記憶手段に記憶される処理結果に基づいて生成される合成画像とを合成する。
【0017】
上記(3)の構成によれば、認識処理が成功した場合、処理対象の撮像画像と処理結果とを記憶手段に記憶しておくので、その撮像画像を用いた合成画像を容易に生成することができる。
【0018】
(4)
記憶制御手段は、認識処理が成功した場合、成功した認識処理の対象となった撮像画像と当該認識処理の処理結果とが記憶されるように、記憶手段の記憶内容を更新してもよい。
【0019】
上記(4)の構成によれば、認識処理が成功した最新の撮像画像とその処理結果とを記憶することができるので、その撮像画像を用いた合成画像を確実に生成することができる。
【0020】
(5)
認識手段は、認識処理が成功する場合、当該認識処理によって認識された所定の対象と撮像手段もしくは情報処理装置との位置関係を処理結果として算出してもよい。このとき、合成手段は、認識処理が成功した場合、成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて仮想オブジェクトの画像を生成する。また、認識処理が失敗した場合、合成手段は、以前に成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて仮想オブジェクトの画像を生成する。
【0021】
上記(5)の構成によれば、仮想オブジェクトの画像は、認識処理の処理結果として、所定の対象と撮像手段との位置関係に基づいて生成される。したがって、所定の対象と撮像手段との位置関係を反映した向きから見たときの仮想オブジェクトの画像を生成することができるので、仮想オブジェクトの画像をよりリアルに生成・表示することができる。また、上記(5)の構成によれば、仮想オブジェクトの画像は、認識処理が失敗した場合、前回に成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて生成されるので、撮像画像と仮想オブジェクトとの間の位置ずれは生じない。特に、上記(2)の構成と上記(5)の構成とを組み合わせる場合には、仮想オブジェクトの画像は、仮想オブジェクトの動作や姿勢は毎回更新されつつ、仮想オブジェクトが表示される位置はずれが生じないので、合成画像をより現実味を増して表示することができる。
【0022】
(6)
画像表示プログラムは、認識処理の処理結果をゲーム入力として用いて、仮想空間に登場するオブジェクトの動作を制御する所定のゲーム制御処理を実行するゲーム制御処理手段としてコンピュータをさらに機能させてもよい。
【0023】
上記(6)の構成によれば、拡張現実感技術による画像をゲームに用いることができる。また、上記(6)の構成によれば、認識処理の処理結果がゲーム入力として用いられるので、ユーザ(プレイヤ)は、カメラ自体を動かすことによってゲーム操作を行うことができる。これによれば、あたかも仮想オブジェクトが存在するかのような現実空間においてプレイヤ自身が実際に動いて遊ぶという、拡張現実感技術を用いた新規なゲームを提供することができる。
【0024】
(7)
ゲーム制御処理手段は、認識処理が失敗した場合、以前に成功した認識処理の処理結果を用いてゲーム制御処理を実行してもよい。
【0025】
上記(7)の構成によれば、ゲーム制御処理手段は認識処理が失敗した場合でもゲーム制御処理を実行することができる。そのため、認識処理が断続的に失敗した場合でもゲーム制御処理を継続して実行することができ、ゲーム制御処理の制御対象であるオブジェクトをスムーズに動作させることができる。
【0026】
(8)
画像表示プログラムは、認識処理の処理結果にかかわらず所定のゲーム処理を実行するゲーム処理手段としてコンピュータをさらに機能させてもよい。
【0027】
上記「ゲーム処理」は、ゲームを進行するための処理であればよく、例えば後述する実施形態におけるステップS24の処理のように、認識処理の処理結果をゲーム入力として用いない処理を含む概念である。
【0028】
上記(8)の構成によれば、認識処理が仮に失敗した場合であってもゲームの進行は継続されるので、認識処理が断続的に失敗することによってゲームが頻繁に中断されることがない。そのため、プレイヤに不快感を与えることなく、拡張現実感技術を用いたゲームをスムーズに進行させることができる。
【0029】
(9)
ゲーム処理手段は、上記仮想オブジェクトの動作を制御する処理をゲーム処理として実行してもよい。
【0030】
なお、上記「仮想オブジェクトの動作を制御する処理」は、ユーザによる入力に従って仮想オブジェクトの動作を制御する処理であってもよいし、ゲームプログラムにおいて予め定められたアルゴリズムに従って仮想オブジェクトの動作を制御する処理であってもよい。
【0031】
上記(9)の構成によれば、ゲーム処理の結果として仮想オブジェクトが動作する画像(動画)を拡張現実感技術によって表示することができる。さらに、ゲーム処理は認識処理の処理結果にかかわらず実行されるので、上記(2)の構成と同様、仮想オブジェクトは一定の頻度で画像が更新される。そのため、仮想オブジェクトの動画が滑らかに表示されることによって、合成画像(ゲーム画像)全体としては滑らかな印象をユーザに与えることができる。
【0032】
(10)
表示制御手段は、認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、撮像画像とは異なる警告画像を表示手段に表示させてもよい。
【0033】
上記(10)の構成によれば、(所定の条件を満たす程度に)認識処理が連続して失敗した場合には、合成画像から警告画像へと表示が変化することになる。したがって、所定の条件を適切に設定することによって、認識処理が成功する見込みが少ないことをユーザに通知することができる。ここで、認識処理が連続して失敗した場合には、仮想オブジェクトの画像のみを消去し、撮像画像のみを表示する方法も考えられる。しかし、この方法では、仮想オブジェクト自体が変化したことが原因で、仮想オブジェクトの画像が消えた(例えば、ゲームを例とすれば、敵オブジェクトが倒されて消える場合もある)のか、認識処理が失敗したことが原因で仮想オブジェクトの画像が消えたのか、判断がつきにくいこともある。これに対して、上記(10)の構成によれば、撮像画像とは異なる警告画像を表示することで、認識処理が連続して失敗していることをユーザに明確に通知することができる。
【0034】
(11)
表示制御手段は、認識処理が所定時間の間連続して失敗したことを所定の条件として、警告画像を表示手段に表示させてもよい。
【0035】
上記(11)の構成によれば、認識処理が所定時間連続して失敗した場合、警告画像が表示される。このような場合には認識処理が再度成功する見込みが少ないと推測されるので、上記(11)の構成によれば、適切なタイミングでユーザに対して警告を行うことができる。
【0036】
(12)
画像表示プログラムは、撮像手段または情報処理装置の動きを検知する動き検知手段としてコンピュータをさらに機能させてもよい。このとき、表示制御手段は、動き検知手段によって撮像手段が所定の基準以上動いていることが検知されたことを所定の条件として、警告画像を表示手段に表示させてもよい。
【0037】
上記(12)の構成によれば、撮像手段が所定の基準以上動かされた場合、警告画像が表示される。このような場合には認識処理が再度成功する見込みが少ないと推測されるので、上記(12)の構成によれば、適切なタイミングでユーザに対して警告を行うことができる。
【0038】
(13)
画像表示プログラムは、認識処理の処理結果をゲーム入力として用いて、仮想オブジェクトの動作を制御する所定のゲーム制御処理を実行するゲーム制御処理手段としてコンピュータをさらに機能させてもよい。このとき、ゲーム制御処理手段は、警告画像が表示されることに応じて、ゲームの進行を中断する。
【0039】
上記(13)の構成によれば、警告画像が表示された場合、ゲームが中断される。したがって、ゲーム画像(合成画像)ではない警告画像が表示されている間にゲームが進行する不都合を防止することができる。
【0040】
(14)
表示制御手段は、警告画像が表示された後において認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、撮像画像を表示手段に表示させてもよい。
【0041】
上記(14)の構成によれば、警告画像が表示された後、所定の条件が満たされると、撮像画像が表示される。ここで、警告画像を表示し続けると、ユーザは撮像手段が撮像している画像を把握できないため、所定の対象を正しく撮像することができなくなってしまい、認識が成功する状態に戻すことが困難になる。これに対して、上記(14)の構成によれば、警告画像の後に撮像画像を表示することによって、ユーザは、所定の対象を正しく撮像できるように撮像手段の向きを修正しやすくなるので、認識が成功する状態に容易に戻すことができる。
【0042】
(15)
表示制御手段は、認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、現時点で取得された撮像画像を表示手段に表示させてもよい。
【0043】
上記(15)の構成によれば、(所定の条件を満たす程度に)認識処理が連続して失敗した場合には、合成画像から警告画像へと表示が変化することになる。したがって、所定の条件を適切に設定することによって、認識処理が成功する見込みが少ないことをユーザに通知することができる。
【0044】
また、本発明は、上記各手段と同等の手段を備える画像表示装置の形態で実施されてもよい。この画像表示装置においては、画像表示プログラムを実行するコンピュータによって上記各手段が実現されてもよいし、専用回路によって上記各手段の一部または全部が実現されてもよい。また、本発明は、上記各手段を備える1以上の情報処理装置からなる画像表示システムの形態で実施されてもよい。このとき、1以上の情報処理装置は、有線または無線通信によって直接通信を行ってもよいし、ネットワークを介して通信を行ってもよい。さらに、本発明は、上記各手段によって行われる画像表示方法の形態で実施されてもよい。
【発明の効果】
【0045】
本発明は、撮像画像に対する認識処理が失敗した場合に、前回に成功した認識処理の対象となった撮像画像と、その認識処理の処理結果を用いて生成される仮想オブジェクトの画像との合成画像を表示することによって、画像のちらつきや位置ずれを防止することができ、合成画像をより現実味を増して表示することができる。
【図面の簡単な説明】
【0046】
【図1】本実施形態に係るゲーム装置の外観図
【図2】ゲーム装置の内部構成の一例を示すブロック図
【図3】ゲーム装置を使用する例を示す図
【図4】ゲーム装置に表示されるゲーム画像の一例を示す図
【図5】合成画像の生成処理を説明するための図
【図6】認識が失敗した場合における合成画像の生成処理を説明するための図
【図7】撮像画像の取得間隔および認識処理に要する時間を、CG画像の生成間隔と同じとした場合における合成処理を示す図
【図8】ゲームプログラムによる処理において用いられる各種データを示す図
【図9】ゲーム装置において実行されるゲーム処理の流れを示すメインフローチャート
【図10】図9に示す認識管理処理(ステップS3)の流れを示すフローチャート
【図11】図9に示すゲーム制御処理(ステップS4)の流れを示すフローチャート
【図12】図9に示す表示処理(ステップS5)の流れを示すフローチャート
【図13】本実施形態における表示処理(ステップS5)の変形例を示すフローチャート
【発明を実施するための形態】
【0047】
[ゲーム装置のハードウェア構成]
以下、図面を参照して、本発明の一実施形態に係る画像表示プログラムおよび画像表示装置について説明する。本発明は、表示装置に画像を表示させる任意の情報処理装置(コンピュータ)において画像表示プログラムが実行されることによって実現することができるが、本実施形態では、情報処理装置の一例として図1に示すゲーム装置1を用いる場合について説明する。
【0048】
図1は、本実施形態に係るゲーム装置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から図6を参照して、上記ゲームプログラムによって実行されるゲーム処理中において行われる画像合成処理について説明する。ゲームプログラムは、カメラによって撮像された現実空間の画像(撮像画像)に仮想空間の画像(CG画像)を合成して表示する拡張現実感技術を用いてゲーム画像を表示し、プレイヤにゲームをプレイさせるものである。
【0079】
図3は、ゲーム装置を使用する例を示す図である。本実施形態においては、図3に示すように、プレイヤ(ユーザ)は、マーカ52を任意の場所(図3では机51の上)に設置しておき、ゲーム装置1を用いてマーカ52およびその周辺を撮像する。撮像に用いられるカメラは、内側カメラ23および外側カメラ25のいずれであっても良いが、ここでは、外側カメラ25を用いる場合を例として説明する。マーカ52は、本実施形態では所定の模様が描かれた薄板状のものが用いられる。ただし、マーカは、後述する認識処理によって認識可能な物であれば良く、マーカ52のような専用品に限らず、例えばプレイヤの体の一部(顔等)がマーカとして用いられても良い。
【0080】
図4は、ゲーム装置に表示されるゲーム画像の一例を示す図である。図4は、図3に示すように机51の上に置かれたマーカ52をゲーム装置1が撮像する場合に、ゲーム装置1の上側LCD22に表示されるゲーム画像を示す。なお、本実施形態ではゲーム画像が上側LCD22に表示されるものとするが、ゲーム画像は下側LCD12に表示されてもよい。図4に示すように、上側LCD22には、仮想空間における仮想オブジェクトの画像(CG画像)として大砲53の画像が撮像画像に合成されて表示される。これによって、実際の机51の上に大砲53が存在するかのような画像を表示することができる。なお、詳細は後述するが、大砲53の動作はゲームプログラムによって制御され、大砲53は向きを変えたり、弾を発射したりする。つまり、本実施形態では、仮想オブジェクトの画像は動画として表示される。なお、図4では、仮想オブジェクトの一例として大砲53の画像が表示されるが、仮想オブジェクトはどのようなものであってもよい。
【0081】
撮像画像に対してCG画像を合成した画像(合成画像)は、例えば次の処理によって生成することができる。まず、ゲーム装置1は、カメラによる撮像画像から、その中に含まれるマーカ52を認識する認識処理を実行する。マーカ52が認識された場合、ゲーム装置1は、認識されたマーカ52の形状および向き等から、ゲーム装置1(カメラ)とマーカ52との位置関係を算出する。位置関係とは、例えば、ゲーム装置1およびマーカ52の一方を基準としたときの他方の3次元の位置および姿勢として表される。なお、3次元位置を算出する場合には、例えば認識されたマーカ52の(撮像画像上での)大きさ等に基づいて両者の距離を決定してもよい。ゲーム装置1は、上記認識処理の処理結果として上記位置関係を算出する。さらに、ゲーム装置1は、位置関係に基づいて仮想空間における仮想カメラの位置および姿勢を算出する。仮想カメラの位置および姿勢は、仮想空間における仮想カメラと仮想オブジェクトとの位置関係が、現実空間におけるゲーム装置1とマーカ52との位置関係に一致するように算出される。仮想カメラの位置が決まると、ゲーム装置1は、仮想カメラの位置から仮想オブジェクトを見たCG画像を生成し、撮像画像に対して仮想オブジェクトのCG画像を合成する。以上の処理によって、ゲーム装置1は合成画像を生成して表示することができる。なお、上記認識処理(位置関係を算出する処理)、および、上記位置関係から仮想カメラの位置を算出する処理は、従来の拡張現実感技術における処理と同様であってもよい。
【0082】
ここで、撮像画像にCG画像を合成して表示する拡張現実感技術においては、本発明の課題として上述したように、撮像画像とCG画像との位置ずれが生じたり、CG画像がちらついたりして表示されるおそれがあり、合成画像が現実味に欠けるおそれがある。そこで、本発明では、次に説明する処理によって、合成画像の現実味を増すようにしている。以下、図5および図6を参照して、合成画像の生成処理について説明する。
【0083】
図5は、合成画像の生成処理を説明するための図である。図5において(後述する図6も同様)、横軸は時間を表しており、“撮像画像”、“CG画像”、“合成画像”の各欄は、それぞれの画像が取得(生成)されるタイミングを表す。また、“認識処理”の欄は、撮像画像に対する認識処理が完了するタイミングを表す。なお、図5では、CG画像は所定時間(1フレーム時間)間隔で生成されるのに対して、撮像画像はCG画像の生成間隔よりも長い間隔で取得され、また、認識処理に要する時間はCG画像の生成間隔よりも長い場合を想定している。
【0084】
本実施形態において、撮像画像に対して認識処理を実行し、その処理結果に基づいてCG画像を生成し、撮像画像とCG画像とを合成して表示する点については、上述した通りである。なお、CG画像は認識処理の処理結果に基づいて生成され、認識処理には時間を要する。そのため、CG画像が生成される時点では、そのCG画像を生成する元になった撮像画像は最新のものではなく、最新の撮像画像はCG画像の元になった撮像画像とは別の画像となっている(例えば、図5に示す時刻T1,T4,T7参照)。
【0085】
本実施形態では、ゲーム装置1は、合成画像を生成する際、取得された最新の撮像画像ではなく、認識処理が完了した撮像画像とCG画像とを合成する。例えば図5において、時刻T1では、時刻T1より前に取得された撮像画像R0に対する認識処理が完了しており、現時点T1で取得された撮像画像R1に対する認識処理は完了していない。そのため、時刻T1では、撮像画像R1ではなく、撮像画像R0とCG画像V1とが合成される。ここで、CG画像V1は撮像画像R0に対する認識処理の処理結果に基づいて生成された画像である。したがって、時刻T1においては、CG画像V1が生成される元となった撮像画像R0と、当該CG画像V1とを合成するので、上述した位置ずれは生じない。
【0086】
また、時刻T2およびT3では、撮像画像R1の認識処理は途中であり、次の認識処理が完了していないので、時刻T1と同様、撮像画像R0の認識処理結果に基づいてCG画像V2およびV3が生成される。したがって、時刻T2およびT3においても時刻T1と同様、撮像画像R0を用いて合成画像が生成される。つまり、CG画像V2およびV3は、これらのCG画像V2およびV3が生成される元となった撮像画像R0に対して合成されるので、時刻T2およびT3においても時刻T1と同様、上述した位置ずれを防止することができる。このように、ゲーム装置1は、次の認識処理が完了するまでは、認識処理が完了済みの撮像画像を用いて合成画像を生成する。
【0087】
なお、図5においては、時刻T4以降も時刻T1〜T3と同様、CG画像と、そのCG画像が生成される元となった撮像画像とが合成される。すなわち、時刻T4においては撮像画像R1の認識処理が完了するので、時刻T4〜T6においては、撮像画像R1に対して、撮像画像R1に基づいて生成されるCG画像V4〜V6がそれぞれ合成される。また、時刻T7においては撮像画像R2の認識処理が完了するので、時刻T7においては、撮像画像R2に対して、撮像画像R2に基づいて生成されるCG画像V7が合成される。
【0088】
以上のように、ゲーム装置1は、CG画像が生成される元となった撮像画像と、合成画像の生成に用いられる撮像画像とを一致させるので、上述した位置ずれを防止することができる。
【0089】
次に、認識処理が失敗する場合を考える。カメラでマーカ52を撮像していても、マーカ52に反射光が入ったり、光の加減で撮像画像内におけるマーカ52の色が変わったりする等の原因で、認識処理においてマーカ52を正しく認識できずに認識に失敗する場合もある。本実施形態においては、ゲーム装置1は、認識に失敗した場合をも考慮して、撮像画像とCG画像とを適切に合成する。
【0090】
図6は、認識が失敗した場合における合成画像の生成処理を説明するための図である。図6においては、時刻T4において撮像画像R1の認識処理が失敗した場合を想定する。この場合、ゲーム装置1は、撮像画像R1に基づいてCG画像を生成することができない。ここで、仮に(認識が失敗してCG画像を生成できないため)CG画像を表示しないようにすれば、認識が断続的に失敗した場合、CG画像がちらついて表示されてしまう。そのため、本実施形態においては、ゲーム装置1は、認識が成功した最新の撮像画像R0の認識処理結果に基づいてCG画像V4を生成する。つまり、ゲーム装置1は、認識が失敗したことに応じて即時にCG画像の生成を中止することがないので、CG画像がちらついて表示されてしまうことを防止することができる。
【0091】
さらに、本実施形態においては、時刻T4におけるCG画像V4は、この時刻T4において認識処理が完了した最新の撮像画像R1ではなく、最後に認識が成功した撮像画像R0に対して合成される(図6参照)。ここで、合成画像を生成する際に、認識が成功する場合(図5における時刻T4の場合)と同様、認識処理が完了した最新の撮像画像R1を用いるとすれば、CG画像V4を生成する元となった撮像画像と、合成に用いられる撮像画像とが異なることになり、上述した位置ずれが生じるおそれがある。そこで、本実施形態では、認識が失敗した場合には、ゲーム装置1は、認識が成功した最新の撮像画像を用いて合成画像を生成する。これによれば、認識が失敗した場合においても、CG画像と、そのCG画像が生成される元になった撮像画像とを合成することができるので、位置ずれを防止することができる。
【0092】
以上のように、本実施形態においては、認識処理が失敗した場合、ゲーム装置1は、前回に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成されるCG画像とを合成する。これによって、CG画像がちらついて表示されたり、撮像画像に対してCG画像の位置がずれて表示されたりすることを防止することができるので、合成画像の現実味をより向上することができる。つまり、「CG画像が実際に存在するかのような感覚を与える」という拡張現実感技術の効果を十分に発揮することができる。
【0093】
なお、認識処理が失敗した場合、本実施形態では「前回に成功した認識処理の対象となった撮像画像」が合成画像の生成に用いられた。ここで、他の実施形態においては、認識処理が失敗した場合に合成画像の生成に用いられる撮像画像は、以前に成功した認識処理の対象となった撮像画像であればよく、前回に成功した(すなわち、最後に成功した)認識処理の対象となった撮像画像に限らない。
【0094】
なお、本実施形態においては、最後に認識処理が成功した撮像画像が合成画像に用いられるので、認識が失敗した場合には、1つの撮像画像が長期間表示されることになり、一見すると、表示される合成画像の動画が滑らかでなくなるようにも思われる。しかしながら、本実施形態においては、合成画像のうちのCG画像は認識処理の成功/失敗にかかわらず毎回更新されるので、CG画像の動画は滑らかに表示される。そのため、ユーザは合成画像全体の動画についても不自然に感じることはなく、違和感を抱くことはないと考えられる。
【0095】
なお、本実施形態においては、認識処理に要する時間がCG画像の生成間隔よりも長い場合を想定したが、本発明は、認識処理に要する時間がCG画像の生成間隔と同じ(もしくは短い)場合においても、有効である。以下、この場合についても本発明が有効であることを図7を参照して説明する。
【0096】
図7は、撮像画像の取得間隔および認識処理に要する時間を、CG画像の生成間隔と同じとした場合における合成処理を示す図である。図7においては、1フレーム時間(CG画像が生成される単位時間)毎に、撮像画像が取得され、撮像画像に対する認識処理が完了する場合を想定している。
【0097】
図7においては、時刻T2において撮像画像R2の認識に失敗したものとする。ここで、もし仮に時刻T2において(認識処理に失敗したために)CG画像を表示しないとすれば、CG画像がちらついて表示されてしまう。また、もし仮に時刻T2において撮像画像R1に基づくCG画像V1と、撮像画像R2とを合成するとすれば、撮像画像R2とCG画像V1との間で位置ずれが生じるおそれがある。これに対して、本発明によれば、ゲーム装置1は、図6に示す時刻T4の場合と同様、前回に成功した認識処理の対象となった撮像画像R1と、当該認識処理の処理結果を用いて生成されるCG画像V2とを合成する。これによって、上記実施形態と同様、ゲーム装置1は、CG画像のちらつき、および、撮像画像とCG画像との位置ずれを防止することができる。
【0098】
[ゲーム処理の詳細]
次に、図8〜図12を参照して、ゲームプログラムによって実行されるゲーム処理の詳細を説明する。以下では、ゲーム処理によって行われるゲームの例として、プレイヤが操作するプレイヤキャラクタが、図4に示したような大砲53に弾を命中させるゲームを説明する。具体的には、本ゲームでは、ゲームプログラムによって動作が制御され、向きを変えたり、弾を発射したりする大砲53がゲーム画像として表示される。また、本ゲームはいわゆる一人称視点のゲームであり、仮想空間における仮想カメラの位置はプレイヤキャラクタの位置としても用いられる。つまり、プレイヤは、ゲーム装置1を動かしてゲーム装置1とマーカ52との位置関係を変化させることによって、仮想空間内におけるプレイヤキャラクタを移動させることができる。また、プレイヤは、所定の操作を行うことによってプレイヤキャラクタに弾を発射させることができる。本ゲームにおいては、プレイヤは、プレイヤキャラクタを大砲53の弾に当たらないように移動させながら、大砲53に弾を命中させて遊ぶ。
【0099】
まず、ゲーム処理において用いられる各種データについて説明する。図8は、ゲームプログラムによる処理において用いられる各種データを示す図である。図8において、ゲーム装置1のメインメモリ32には、ゲームプログラム領域60、撮像画像バッファ領域62、認識済画像バッファ領域65、およびゲーム処理データ領域67が設定される。
【0100】
ゲームプログラム領域60は、後述するゲーム処理(図9)をゲーム装置1のCPU31に実行させるためのゲームプログラム61を記憶する領域である。ゲームプログラム61は、メモリカード29からその一部または全部が適宜のタイミングで読み込まれることによってメインメモリ32に記憶される。ゲームプログラム61には、上述の画像合成処理を実行するためのプログラムや、認識処理を実行するためのプログラムが含まれる。
【0101】
撮像画像バッファ領域62には、カメラによって撮像された撮像画像の画像データ(撮像画像データ)が記憶される。撮像画像バッファ領域62には、所定個数(例えば3個)の撮像画像データを記憶することが可能である。また、撮像画像バッファ領域62に記憶される撮像画像データは、認識処理中の撮像画像データを除いて、最も古い撮像画像データが削除されて新たな撮像画像データに更新されるように管理される。具体的には、撮像画像バッファ領域62には、状態データ63と撮像画像データ64とが関連付けられて記憶される。状態データ63は、それに関連付けられる撮像画像データ64の状態を示すデータであり、具体的には、「書き込み対象」、「認識処理中」、および「処理可能」のいずれかの状態を示す。
【0102】
認識済画像バッファ領域65には、撮像画像データのうちで、認識処理が成功して完了した撮像画像データ(認識済画像データと呼ぶ)66が記憶される。すなわち、撮像画像バッファ領域62に記憶される撮像画像データ64に対して認識処理が行われ、認識処理が成功した場合、当該撮像画像データ64は認識済画像バッファ領域65に記憶される。なお、認識済画像バッファ領域65には、最新の認識済画像データ66のみが記憶されればよい。詳細は後述するが、認識済画像バッファ領域65に記憶される撮像画像データが、CG画像と合成する合成処理の対象となる。
【0103】
ゲーム処理データ領域67は、ゲーム処理において用いられる各種のデータを記憶するための領域である。ゲーム処理データ領域67には、認識結果データ68、プレイヤ位置データ69、敵オブジェクトデータ70、表示画像データ71、および、失敗カウンタデータ72が記憶される。なお、ゲーム処理データ領域67には、上記の他、ゲームに登場する各種オブジェクト(上記大砲53等)に関するデータや、BGM等の音声データ等、ゲームに必要な各種データが記憶される。
【0104】
認識結果データ68は、上述の認識処理の処理結果を示すデータであり、具体的には、上述の位置関係を示すデータである。位置関係は、ゲーム装置1およびマーカ52の一方を基準としたときの他方の3次元位置、あるいは、一方から他方への3次元の方向として表されるので、3次元の座標や3次元のベクトル等によって表される。
【0105】
プレイヤ位置データ69は、仮想空間(ゲーム空間)におけるプレイヤキャラクタの位置を示すデータである。上述のように、本実施形態においては仮想空間における仮想カメラの位置はプレイヤキャラクタの位置としても用いられる。つまり、プレイヤ位置データ69は、仮想空間における仮想カメラの位置を示すとも言える。プレイヤ位置データ69は、上記認識結果データ68に基づいて算出される。
【0106】
敵オブジェクトデータ70は、敵オブジェクト(すなわち、大砲53)に関する各種パラメータを示すデータである。各種パラメータには、大砲53の向き、および、プレイヤが弾を命中させた数等を示すパラメータが含まれる。
【0107】
表示画像データ71は、表示装置(上側LCD22)に表示されるゲーム画像のデータである。詳細は後述するが、本ゲーム処理においては、上述した合成画像の他、後述する警告画像、あるいは、撮像画像のデータが表示されることもある。
【0108】
失敗カウンタデータ72は、失敗カウンタを示すデータである。失敗カウンタは、認識処理が連続して失敗する場合において、最初に失敗してからの経過時間を表す。すなわち、認識処理が失敗した場合、CPU31は失敗カウンタのカウントを開始し、その後、認識処理の失敗が連続する間、失敗カウンタのカウントを続ける。
【0109】
次に、ゲーム装置1において行われるゲーム処理の詳細を、図9〜図12を用いて説明する。図9は、ゲーム装置1において実行されるゲーム処理の流れを示すメインフローチャートである。電源ボタン14Fが押下されることによってゲーム装置1の電源が投入されると、ゲーム装置1のCPU31は、各種アプリケーションの起動を指示するためのメニュー画面(例えば、各アプリケーションを表す画像(アイコン)を含む画像)を表示する。ユーザは、メニュー画面においてゲームプログラム61を起動する指示、例えば、ゲームプログラム61のアイコンを選択する指示を行う。メニュー画面において、ゲームプログラム61の起動が指示されると、CPU31は、メインメモリ32等の初期化を行った後、図4に示す処理を行うためのゲームプログラム61の実行を開始する。本実施形態においては、ゲームプログラム61の実行によって、CPU31が請求項に記載の各手段として機能することとなる。つまり、ゲームプログラム61は、請求項に記載の各手段としてCPU31を機能させる。
【0110】
まずステップS1において、CPU31は、撮像画像が取得されたか否かを判定する。すなわち、カメラ(本実施形態では外側カメラ26)から撮像画像のデータが送られてきたか否かを判定する。なお、本実施形態においては、ステップS1〜S6の処理ループは、1フレーム時間(1/60秒)に1回の割合で実行されるのに対して、カメラはそれよりも少ない頻度(数フレーム時間に1回程度)で撮像画像を送るものとする。ステップS1の判定結果が肯定である場合、ステップS2の処理が実行される。一方、ステップS1の判定結果が否定である場合、ステップS2の処理がスキップされてステップS3の処理が実行される。
【0111】
ステップS2において、CPU31は、ステップS1で取得された撮像画像データをメインメモリ32の撮像画像バッファ領域62に記憶する。なお、撮像画像バッファ領域62に記憶可能な数の撮像画像データ64がすでに記憶されている場合、CPU31は、そのうちの1つを削除し、取得された撮像画像データを新たに記憶(更新)する。ここで、削除される撮像画像データ64は、それに関連付けられた状態データ63が「書き込み対象」を示す撮像画像データ64である。新たな撮像画像データ64の書き込みが完了すると、CPU31は、当該撮像画像データ64に関連付けられる状態データ63を「処理可能」を示すように変更する。また、状態データ63が「処理可能」を示す撮像画像データ64のうち、最も古い撮像画像データ64に関連付けられる状態データ63を、「書き込み対象」を示すように変更する。以上によって、撮像画像データ64は、認識処理中の撮像画像データ64を除いて、最も古い撮像画像データ64が新たな撮像画像データに更新される。ステップS2の次にステップS3の処理が実行される。
【0112】
ステップS3において、CPU31は認識管理処理を実行する。認識管理処理においては、撮像画像に対する認識処理が実行されるとともに、認識処理の結果に応じてデータの更新処理等が実行される。以下、図10を参照して、認識管理処理の詳細を説明する。
【0113】
図10は、図9に示す認識管理処理(ステップS3)の流れを示すフローチャートである。認識管理処理においては、まずステップS11において、CPU31は、認識処理中の撮像画像が存在するか否かを判定する。すなわち、CPU31は、撮像画像バッファ領域62に記憶されている撮像画像のうちに、認識処理の対象となっている画像が存在するか否かを判定する。この判定は、状態データ63が「認識処理中」を示す撮像画像データ64が存在するか否かによって行うことができる。ステップS11の判定結果が肯定である場合、ステップS12の処理が実行される。一方、ステップS11の判定結果が否定である場合、後述するステップS19の処理が実行される。
【0114】
ステップS12において、CPU31は、撮像画像に対する認識処理を実行する。ここで、本実施形態において、1つの撮像画像に関して認識結果を算出するまでの一連の認識処理(1回の認識処理)は、1フレーム時間を周期として実行される表示処理とは必ずしも同じ周期で実行されるわけではない。一般的には、1回の認識処理が1フレーム時間で完了することが困難な場合があり、そのような場合、1回のステップS12の処理では、認識処理全体のうちの一部の処理だけが実行される。この場合、1回のステップS12で実行される処理は、ステップS1〜S6の一連の処理が1フレーム時間内に完了することができるような処理量に調整される。
【0115】
また、ステップS12の処理において認識処理が完了した場合(すなわち、認識結果が算出された場合)、CPU31は、認識結果のデータをメインメモリ32に記憶する。具体的には、認識処理が成功した場合、上述の位置関係のデータが認識結果としてメインメモリ32に記憶される。一方、認識処理が失敗した場合(撮像画像からマーカ52を認識できなかった場合)、認識失敗を示すデータが認識結果としてメインメモリ32に記憶される。
【0116】
一方、ステップS12の処理において認識処理が完了しなかった場合、CPU31は、残りの認識処理の実行に必要なデータをメインメモリ32に記憶し、ステップS12の処理を終了する。次にステップS12の処理が実行される際には、メインメモリ32に記憶されたデータを用いて上記残りの処理が実行される。以上のステップS12の次にステップS13の処理が実行される。
【0117】
ステップS13において、CPU31は、1つの撮像画像に対する認識処理が完了したか否かを判定する。すなわち、上記ステップS12において認識処理の処理結果が得られた場合には、ステップS13の判定結果は肯定となり、上記ステップS12において認識処理の処理結果が得られなかった場合には、ステップS13の判定結果は否定となる。ステップS13の判定結果が肯定である場合、ステップS14の処理が実行される。一方、ステップS13の判定結果が否定である場合、CPU31は認識管理処理を終了する。
【0118】
ステップS14において、CPU31は、ステップS12で実行した認識処理の処理結果が成功であるか否かを判定する。ステップS14の判定は、ステップS12の終了時にメインメモリ32に記憶される認識結果のデータを参照して行うことができる。ステップS14の判定結果が否定である場合、ステップS15の処理が実行される。一方、ステップS14の判定結果が肯定である場合、後述するステップS16の処理が実行される。
【0119】
ステップS15において、CPU31は、失敗カウンタをカウントする。すなわち、失敗カウンタデータ72が示す失敗カウンタの値を1だけ加算し、加算した値を示すデータを新たな失敗カウンタデータ72としてメインメモリ32に記憶する。これによって、認識処理が失敗してからの経過時間を測定することができる。ステップS15の次に、後述するステップS19の処理が実行される。
【0120】
ステップS16〜S18においては、認識処理が成功した場合に必要となるデータの更新処理等が実行される。ステップS16において、CPU31は、上記ステップS12で認識処理が完了した撮像画像を合成処理の対象に設定する。具体的には、CPU31は、認識処理が完了した撮像画像データ64を、認識済画像バッファ領域65に認識済画像データ66として新たに記憶する。これによって、認識済画像データ66が更新される。なお、認識処理が完了した撮像画像データ64は、撮像画像バッファ領域62に記憶されている撮像画像データ64のうち、状態データ63が「認識処理中」である撮像画像データ64である。詳細は後述するが、認識済画像バッファ領域65に記憶される認識済画像データ66が、CG画像と合成する対象となる。ステップS16の次にステップS17の処理が実行される。
【0121】
ステップS17において、CPU31は、メインメモリ32に記憶されている認識結果データ68を更新する。すなわち、上記ステップS12で記憶された認識結果を示すデータが、新たな認識結果データ68としてメインメモリ32に記憶される。ステップS17の次にステップS18の処理が実行される。
【0122】
ステップS18において、CPU31は失敗カウンタをリセットする。すなわち、メインメモリ32に記憶される失敗カウンタデータ72の値が0に設定される。ステップS18の次にステップS19の処理が実行される。
【0123】
ステップS19において、CPU31は、次に認識処理を実行する対象となる撮像画像を決定する。ここで、認識処理の新たな対象となる撮像画像データは、撮像画像バッファ領域62に格納されている撮像画像データ64のうち、状態データ63が「処理可能」を示す、最も新しい撮像画像データ64である。CPU31は、認識処理の対象となる撮像画像データ64に関連付けられる状態データ63を「認識処理中」を示すように変更する。これによって、次回に実行されるステップS12では、状態データ63が「認識処理中」へと変更された撮像画像データ64に対して認識処理が実行される。また、CPU31は、「認識処理中」を示す状態データ63が複数存在することを避けるため、ステップS19の前から「認識処理中」を示していた状態データ63を「書き込み対象」を示すように変更する。ステップS19の後、CPU31は認識管理処理を終了する。
【0124】
なお、上記ステップS19によれば、1回の認識処理が終了すると、取得された撮像画像のうちで最新の撮像画像に対して次の認識処理が実行される。そのため、最新でない撮像画像は、認識処理が行われずに破棄されることもある。ここで、取得された撮像画像の全てについて認識処理を順次実行するとすれば、1回の認識処理に要する時間が撮像画像の取得間隔よりも長い場合には、認識処理が完了して表示対象となった撮像画像が次第に蓄積されていってしまう。つまり、表示される撮像画像は、実時間に対して次第に遅れていってしまうおそれがある。これに対して、本実施形態によれば、最新でない撮像画像については認識処理を行わないようにすることによって、表示される撮像画像の遅延が蓄積していくことを防止することができる。
【0125】
上記の認識管理処理によれば、撮像画像に対する認識処理が終了し、認識が成功した場合(ステップS13およびS14でYES)、その撮像画像は合成処理(後述するステップS35)の対象に設定される(ステップS16)。つまり、認識処理が成功した撮像画像を用いて合成画像が生成される。一方、認識が失敗した場合(ステップS14でYES)にはステップS16の処理は実行されないので、その撮像画像は合成処理の対象とされない。したがって、認識が失敗した場合には、合成処理の対象となる撮像画像は変更されず、合成処理においては前回と同じ撮像画像が用いられる。つまり、認識が失敗した場合には、前回に成功した認識処理の対象となった撮像画像が引き続き合成処理に用いられる。また、認識管理処理において、認識処理が終了しなかった場合もステップS16の処理が実行されないので、合成処理の対象となる撮像画像は変更されず、合成処理においては前回と同じ撮像画像が用いられる。したがって、合成処理においては、認識処理が終了するまでは前回と同じ撮像画像(すなわち、前回に成功した認識処理の対象となった撮像画像)が用いられる。
【0126】
図9の説明に戻り、認識管理処理(ステップS3)の次のステップS4において、CPU31はゲーム制御処理を実行する。ゲーム処理においては、プレイヤによるゲーム入力等に基づいて仮想空間内のオブジェクトの動作が制御される。以下、図11を参照して、ゲーム制御処理の詳細を説明する。
【0127】
図11は、図9に示すゲーム制御処理(ステップS4)の流れを示すフローチャートである。ゲーム制御処理においては、まずステップS21において、CPU31は、失敗カウンタの値が所定の第1閾値N1よりも大きいか否かを判定する。すなわち、CPU31は、メインメモリ32に記憶されている失敗カウンタデータ72を読み出し、失敗カウンタデータ72の値と第1閾値N1とを比較する。なお、第1閾値N1は予め定められており、ゲームの内容等に応じて適切な値に設定される。ここで、失敗カウンタの値は、認識処理が連続して失敗する場合において、最初に失敗してからの経過時間を表す。つまり、ステップS21の判定処理は、認識処理が所定時間の間連続して失敗したか否かを判定するための処理である。ステップS21の判定結果が否定である場合、ステップS22の処理が実行される。一方、ステップS21の判定結果が肯定である場合、後述するステップS25の処理が実行される。
【0128】
ステップS22において、CPU31は、プレイヤによるゲーム操作の入力を受け付ける。具体的には、CPU31は、タッチパネル13の入力面に対して入力が行われた位置を示すタッチ位置データを取得するとともに、各操作ボタン14A〜14Kに対する入力状況(押下されたか否か)を示す操作データを取得する。ステップS22の次にステップS23の処理が実行される。
【0129】
ステップS23において、CPU31は、入力に基づくゲーム制御を行う。ここで、本実施形態においては、上記ステップS22で受け付けられた、入力装置(タッチパネル13および各操作ボタン14A〜14K)に対する入力だけでなく、認識結果データ68もゲーム入力として用いられる。具体的には、CPU31は、認識結果データ68に基づいてプレイヤキャラクタの位置(および姿勢)を算出する。本実施形態においては、プレイヤキャラクタの位置および姿勢は、仮想カメラの位置および姿勢と同じである。つまり、プレイヤキャラクタの位置は、大砲53に対するプレイヤキャラクタの位置が、認識結果データ68が示す位置関係(ゲーム装置1とマーカ52との現実空間の位置関係)に応じた位置となるように算出される。また、プレイヤキャラクタの姿勢(仮想カメラの姿勢)は、表示画面上におけるマーカ52の位置に大砲53が表示されるように算出される。より具体的な処理としては、CPU31は、認識結果データ68をメインメモリ32から読み出し、認識結果データ68に基づいてプレイヤキャラクタの位置を算出し、算出した位置を示すデータをプレイヤ位置データ69としてメインメモリ32に記憶する。また、入力装置に対する入力に応じた動作としては、CPU31は、例えば、所定のボタンが押下されたことに応じてプレイヤキャラクタから弾を発射する処理を行う。ステップS23の次にステップS24の処理が実行される。
【0130】
ステップS24において、CPU31は、ステップS23で実行される処理以外の他のゲーム制御を行う。ステップS24で実行される処理としては、例えば、大砲53の動作(大砲53の向きを変えたり弾を発射したりする動作)の制御、各オブジェクトが弾に当たったか否かの判定、および、得点の計算等の処理が考えられる。なお、大砲53に関するパラメータ(大砲53の向き等を示すパラメータ)を示すデータは、敵オブジェクトデータ70としてメインメモリ32に記憶される。ステップS24の後、CPU31は図11に示すゲーム制御処理を終了する。
【0131】
一方、ステップS25において、CPU31はゲームを中断する。ここで、ステップS25が実行される場合とは、認識処理が所定時間の間連続して失敗した場合である。詳細は後述するが、認識処理が所定時間の間連続して失敗した場合(失敗カウンタの値が第1閾値N1以上となった場合)、認識が成功していないことを表す警告画像が合成画像に代えて表示される(後述するステップS34)。警告画像が表示される場合にはゲームを進行することができないので、CPU31は、ステップS25においてゲーム進行を中断する。ステップS25の後、CPU31は図11に示すゲーム制御処理を終了する。
【0132】
上記ゲーム制御処理によれば、認識処理の処理結果がゲーム入力として用いられる。すなわち、仮想空間に登場するオブジェクト(プレイヤキャラクタ)の動作が認識結果データ68に基づいて制御される(ステップS23)。これによれば、プレイヤは、ゲーム装置1を動かす(あるいはプレイヤ自身が移動する)ことによって、プレイヤキャラクタを移動させることができる。したがって、本実施形態においては、現実空間を表す撮像画像に仮想空間のオブジェクト(大砲53)が合成されたゲーム画像が表示され(図4)、さらに、現実空間におけるゲーム装置1の位置が仮想空間のオブジェクト(プレイヤキャラクタ)の位置に反映される。これによって、あたかも仮想オブジェクトが存在するかのような現実空間においてプレイヤ自身が実際に動いて遊ぶという、拡張現実感技術を用いた新規なゲームを提供することができる。
【0133】
図9の説明に戻り、ゲーム制御処理(ステップS4)の次のステップS5において、CPU31は、上述の合成画像や警告画像等を生成して表示する表示処理を実行する。以下、図12を参照して、表示処理の詳細を説明する。
【0134】
図12は、図9に示す表示処理(ステップS5)の流れを示すフローチャートである。表示処理においては、まずステップS31において、CPU31は、失敗カウンタの値が所定の第2閾値N2よりも大きいか否かを判定する。すなわち、CPU31は、メインメモリ32に記憶されている失敗カウンタデータ72を読み出し、失敗カウンタデータ72の値と第2閾値N2とを比較する。なお、第2閾値N2は第1閾値N1よりも大きく、ゲームの内容等に応じて適切な値に予め設定される。ステップS31の判定処理は、第2閾値N2に相当する所定時間の間、認識処理が連続して失敗したか否かを判定するための処理である。ステップS31の判定結果が肯定である場合、ステップS32の処理が実行される。一方、ステップS31の判定結果が否定である場合、後述するステップS33の処理が実行される。
【0135】
ステップS32において、CPU31は、撮像画像を表示装置(上側LCD22)に表示させる。具体的には、CPU31は、カメラから送られてくる撮像画像データを上側LCD22に表示させる。このように、失敗カウンタが第2閾値N2以上である場合には、撮像画像のみが表示され、CG画像は合成されない。ステップS32の後、CPU31は表示処理を終了する。
【0136】
一方、ステップS33において、CPU31は、失敗カウンタの値が所定の第1閾値N1よりも大きいか否かを判定する。ステップS33の処理は上述のステップS21の処理と同じである。ステップS33の判定結果が肯定である場合、ステップS34の処理が実行される。一方、ステップS33の判定結果が否定である場合、後述するステップS35の処理が実行される。
【0137】
ステップS34において、CPU31は、警告画像を表示装置(上側LCD22)に表示させる。警告画像は、マーカ52の認識が所定期間連続して失敗していることをプレイヤに警告するための画像である。警告画像はどのような画像であってもよいが、撮像画像とは異なる、あるいは、撮像画像を含まない画像であることが好ましい。本実施形態においては、警告画像として、いわゆる砂嵐の画像(「マーカが認識されていません」等の文字を含んでもよい)が表示される。CPU31は、ゲームプログラム61において予め用意される動画あるいは静止画を警告画像として用いてもよい。ステップS34の後、CPU31は表示処理を終了する。
【0138】
一方、ステップS35において、CPU31は、撮像画像とCG画像とを合成した合成画像を生成する。ここで、合成に用いられる撮像画像データは、認識済画像バッファ領域65に記憶されている撮像画像データ(認識済画像データ66)である。つまり、本実施形態においては、認識処理が成功した最新の撮像画像(前回に認識処理が成功した撮像画像)が合成画像の生成に用いられる。生成された合成画像のデータは、表示画像データ71としてメインメモリ32に記憶される。
【0139】
なお、本実施形態においては、合成画像は、仮想空間の画像の背景として撮像画像を用いる方法によって生成される。すなわち、CPU31は、仮想空間における(仮想カメラから見て)大砲53の後方に背景のオブジェクトを配置しておき、仮想カメラの位置から仮想カメラの方向に大砲53を見た場合の仮想空間の画像を生成する際、背景オブジェクトのテクスチャとして撮像画像を用いる。これによって、撮像画像の上に大砲53のCG画像が合成された合成画像を生成することができる。なお、仮想カメラの位置および姿勢は、上述のステップS23でプレイヤキャラクタの位置および姿勢として算出されている。また、大砲53の動作(大砲53の向き等)は、上述のステップS24で算出されている。なお、他の実施形態においては、CPU31は、まずCG画像を生成し、その後、撮像画像に対してCG画像を合成することによって合成画像を生成してもよい。ステップS35の次にステップS36の処理が実行される。
【0140】
ステップS36において、CPU31は、失敗カウンタの値が所定の第3閾値N3よりも大きいか否かを判定する。すなわち、CPU31は、メインメモリ32に記憶されている失敗カウンタデータ72を読み出し、失敗カウンタデータ72の値と第3閾値N3とを比較する。第3閾値N3は第1閾値N1よりも小さく、ゲームの内容等に応じて適切な値に予め設定される。ステップS36の判定処理は、第3閾値N3に相当する所定時間の間、認識処理が連続して失敗したか否かを判定するための処理である。ステップS36の判定結果が肯定である場合、ステップS37の処理が実行される。一方、ステップS36の判定結果が否定である場合、ステップS37の処理がスキップされてステップS38の処理が実行される。
【0141】
ステップS37において、CPU31は、合成画像に対して、失敗カウンタの値に応じた割合で警告画像をさらに合成する。合成画像と警告画像との合成方法はどのような方法であってもよいが、一般的なアルファブレンド処理による方法を用いることができる。このとき、CPU31は、警告画像の透明度を表すアルファ値を、失敗カウンタの値が“N3”の場合に100%となり、失敗カウンタの値が“N1”の場合に0%となり、失敗カウンタの値が“N3”から“N1”へ増加するに従って透明度が小さくなるように決定する。そして、決定されたアルファ値に従って合成画像と警告画像とを合成する。以上のステップS37の処理によって、時間の経過に従って(失敗カウンタの値の増加に従って)警告画像が次第に濃くなり、合成画像が薄くなる画像を生成することができる。ステップS37で生成された画像データは、表示画像データ71としてメインメモリ32に記憶される。ステップS37の次にステップS38の処理が実行される。
【0142】
ステップS38において、CPU31は、合成画像を表示装置(上側LCD22)に表示させる。具体的には、CPU31は、表示画像データ71をメインメモリ32から読み出して上側LCD22に表示させる。これによって、撮像画像に対してゲームオブジェクト(大砲53)のCG画像が合成されたゲーム画像(図4)が表示される。
【0143】
なお、ステップS38において、認識処理が成功している場合、および、失敗カウンタの値が上記第3閾値N3より小さい場合には、ステップS35で生成された合成画像がそのまま表示される。一方、失敗カウンタの値が上記第3閾値N3以上である場合には、合成画像と警告画像とが合成された画像が表示される。また、警告画像の透明度は失敗カウンタの値に応じて変化するので、失敗カウンタの値が上記第3閾値N3以上である場合には、時間の経過に従って警告画像が次第に濃く(合成画像が薄く)なるゲーム画像が表示される。上記ステップS38の後、CPU31は表示処理を終了する。
【0144】
上記表示処理によれば、認識処理が成功している場合(ステップS31,S33,S36でNo)には、合成画像が表示される。また、認識処理が失敗した場合でも、第3閾値N3に相当する時間だけ連続して失敗するまでは、ステップS31,S33,およびS36の判定結果は否定となるので、合成画像が表示される。その後、認識処理の失敗の時間が第3閾値N3に相当する時間を超えると、ステップS36の判定結果が肯定となるので、合成画像に警告画像(砂嵐の画像)が合成された画像が表示される。そして、時間が経過するに従って警告画像が濃く表示されていく(ステップS37)。さらに、認識処理の失敗の時間が第1閾値N1に相当する時間を超えると、ステップS33の判定結果が肯定となるので、警告画像のみが表示される。また、警告画像が表示されるタイミングでゲームが中断される(ステップS25)。したがって、上記表示処理によれば、認識処理が失敗した場合でも即座にCG画像が表示されなくなるわけではないので、CG画像がちらついて表示されることがない。また、認識処理の失敗が所定時間以上連続する場合には、警告画像が表示されるので、認識処理が失敗していることをプレイヤに通知することができる。
【0145】
なお、警告画像として(CG画像を含まない)撮像画像を表示することも考えられる。警告画像として撮像画像を表示すると、プレイヤには仮想オブジェクトが消えたように見える。しかし、ゲームの進行によって仮想オブジェクトが表示されなくなる場合(例えば、仮想オブジェクトを破壊した場合)も考えられ、この場合、プレイヤにとっては、認識に失敗したのかどうかの判断がつきにくくなる。これに対して、本実施形態によれば、警告画像として撮像画像とは異なる画像を表示するので、認識処理が失敗していることをより確実にプレイヤに通知することができる。さらに、本実施形態では、警告画像は時間の経過に従って次第に濃くなるように表示されるので、警告画像が急に表示される場合に比べてプレイヤに与える違和感を軽減して通知を行うことができる。なお、他の実施形態においては、CPU31は、認識処理が連続して失敗した場合、警告画像を表示せずに撮像画像を表示するようにしてもよい。すなわち、図12に示す表示処理において、CPU31は、上記ステップS33およびS34の処理を省略するようにしてもよい。これによっても、上記実施形態と同様、認識処理が失敗していることをプレイヤに通知することができる。
【0146】
さらに、上記表示処理によれば、警告画像が表示された後、認識処理の失敗の時間が第2閾値N2に相当する時間を超えると、ステップS31の判定結果が肯定となるので、撮像画像のみが表示される。これは、警告画像を表示し続けると、プレイヤはゲーム装置1が撮像している画像を把握できないため、マーカ52を正しく撮像することができなくなるからである。すなわち、本実施形態では、警告画像が表示されてゲームが中断された後は、プレイヤがマーカ52を正しく撮像できるようにゲーム装置1の向きを修正しやすくする目的で、撮像画像を表示するようにしている。
【0147】
図9の説明に戻り、表示処理(ステップS5)の次のステップS6において、CPU31は、ゲームを終了するか否かを判定する。ステップS6の判定は、例えば、ゲームがクリアされたか否か、ゲームオーバーとなったか否か、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS6の判定結果が否定である場合、ステップS1の処理が再度実行される。以降、ステップS6でゲームを終了すると判定されるまで、ステップS1〜S6の処理ループが繰り返し実行される。一方、ステップS6の判定結果が肯定である場合、CPU31は、図9に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【0148】
以上のように、上記ゲーム処理によれば、撮像画像に対する認識処理が成功した場合には、その撮像画像は認識済画像バッファ領域65に記憶されて(ステップS16)合成画像に用いられる(ステップS35)。このとき、合成されるCG画像は、成功した認識結果に基づいて生成される。一方、認識処理が失敗した場合には、その撮像画像は合成画像に用いられず、認識済画像バッファ領域65には前の撮像画像が維持される。したがって、認識処理が失敗した場合には、前回に認識処理が成功した撮像画像を用いて合成画像が生成されて表示される。また、合成されるCG画像も、前回に認識処理が成功したときの認識結果に基づいて生成される。これによれば、認識失敗が断続的に起こったとしてもCG画像がちらついて表示されることがなく、また、撮像画像とCG画像との位置ずれが生じることもない。したがって、本実施形態によれば、より現実感の高い合成画像を生成して表示することができる。
【0149】
また、上記ゲーム処理においては、表示される仮想オブジェクト(大砲53)の動作を制御する処理(ステップS24)は毎フレーム実行される。認識が成功した場合だけでなく、失敗した場合であっても一定期間(ステップS33でNoとなる間)は仮想オブジェクトの画像が撮像画像に合成されて表示される。これによって、仮想オブジェクトの動作は毎フレーム更新されて動画として表示されることになる。そのため、撮像画像が毎フレーム更新されない場合でも、動画のコマ数が少ない印象をプレイヤに与えることなく、合成画像として滑らかな動画を表示することができる。
【0150】
なお、上記ゲーム処理においては、仮想オブジェクトの動作は毎フレーム更新される(ステップS24)のに対して、仮想オブジェクトの表示位置(仮想カメラの位置および姿勢)を決定する処理(ステップS23)は、認識が成功した場合に更新される(ステップS17)認識結果データを用いて行われる。したがって、本実施形態によれば、仮想オブジェクトの動作を毎フレーム更新される滑らかな動画として表示しつつ、撮像画像と仮想オブジェクトの画像との位置ずれを防止することができる。
【0151】
また、上記ゲーム処理によれば、第1閾値N1に相当する所定時間の間、認識処理が連続して失敗した場合、警告画像が表示される他、ゲームが中断される(ステップS25)。つまり、本実施形態では、警告画像が表示されることに応じて、ゲームの進行が中断される。ここで、本実施形態においては、認識が失敗してもCG画像が表示されるので、認識が失敗しても即座にゲームを中断する必要はない。また、認識が失敗したことに応じてゲームを中断するようにすると、ゲームが頻繁に中断されてしまうおそれがある。そのため、本実施形態では、認識が失敗してもゲームを継続するようにしている。ただし、認識が失敗している間は、認識結果をゲーム入力として用いることができないので、認識が失敗した後でもずっとゲームが継続されると、プレイヤはゲーム操作を行えないためにゲームに支障が出る。そこで、本実施形態では、認識が失敗してから一定時間が経過した場合、ゲームを中断するようにしている。また、警告画像が表示されることに応じてゲームを中断するので、合成画像が表示されなくなるタイミングでゲームを中断することができ、プレイヤに違和感を与えることなくゲームを中断させることができる。
【0152】
なお、他の実施形態においては、CPU31は、認識が失敗したタイミングでゲームを中断するようにしてもよい。例えば、認識結果をゲーム入力として用いるゲームであって、シビアなゲーム操作が要求されるゲームにおいては、認識が失敗したことに応じてゲームを中断することが考えられる。また、上記ゲーム処理のように、警告画像を次第に濃く表示していく場合には、CPU31は、警告画像が合成画像に対して所定の割合で合成されたことに応じてゲームを中断するようにしてもよい。すなわち、上記ゲーム処理においては、CPU31は、失敗カウンタの値が第1閾値N1と第3閾値N3との間の所定値となった場合にゲームを中断してもよい。
【0153】
[変形例]
上記実施形態は本発明を実施する一例であり、他の実施形態においては例えば以下に説明する構成で本発明を実施することも可能である。
【0154】
(画像処理プログラムに関する変形例)
上記実施形態においては、画像表示プログラムの例としてゲームプログラムを挙げて説明したが、本発明は、ゲームプログラム以外にも、拡張現実感技術を用いる任意の画像表示プログラムに利用することが可能である。
【0155】
(ゲームに関する変形例)
また、上記実施形態においては、ゲームプログラムによって実行されるゲームの例として、敵オブジェクト(大砲53)が表示される一人称視点のゲームについて説明したが、本発明は、拡張現実感技術を用いてゲーム画像を表示する任意のゲームのためのゲームプログラムに利用することが可能である。例えば、上記実施形態では、画面に表示されない仮想オブジェクト(プレイヤキャラクタ)の動作が認識結果に基づいて制御された。ここで、他の実施形態では、ゲーム装置1は、認識結果に基づいて、画面上に表示される仮想オブジェクトの動作を制御するようにしてもよい。例えば、ゲームプログラムによって実行されるゲームとしては、次の例が考えられる。
・画面上の仮想オブジェクトの位置が上記認識結果に基づいて決定されるゲーム
ゲーム装置1とマーカ52との位置関係(認識結果)に応じて仮想空間内における位置が決定されるクレーンのオブジェクトが登場し、プレイヤは、クレームのオブジェクトを操作して仮想空間内に配置される他のオブジェクトを釣り上げて遊ぶ。
・画面上の仮想オブジェクトの移動方向が上記処理結果に基づいて決定されるゲーム
ビリヤードのゲームであって、仮想オブジェクトとしてビリヤードの玉が配置され、プレイヤは、上記認識結果に基づいて決定される仮想カメラの視線方向に玉を突くことができる(つまり、玉の移動方向がゲーム装置1とマーカ52との位置関係によって制御される)。
【0156】
(警告画像を表示する条件に関する変形例)
上記実施形態では、ゲーム装置1は、認識処理が所定時間連続して失敗したことを条件として、警告画像を表示するようにした。ここで、他の実施形態では、ゲーム装置1は、カメラ(ゲーム装置1)の動きを検知して、カメラが所定の基準以上動いていることが検知されたことを条件として、警告画像を表示するようにしてもよい。以下、カメラの動きを検知して警告画像を表示する変形例の詳細について説明する。
【0157】
図13は、本実施形態における表示処理(ステップS5)の変形例を示すフローチャートである。なお、図13においては、図12と同じ処理については図12と同じステップ番号を付し、詳細な説明を省略する。
【0158】
図13においては、ステップS33の判定結果が肯定である場合、ステップS41の処理が実行される。ステップS41において、CPU31は、カメラ(ゲーム装置1)の動きを検知する。ここで、動きを検知する方法はどのような方法でもよいが、例えば、ゲーム装置1が加速度センサあるいはジャイロセンサを備える場合には、CPU31はこれらのセンサによる検知結果を取得する。また、CPU31は、撮像画像から所定の対象(マーカとは別の物であってもよい)を認識し、撮像画像内における当該所定の対象の動きからカメラの動きを算出するようにしてもよい。ステップS41の次にステップS42の処理が実行される。
【0159】
ステップS42において、CPU31は、カメラ(ゲーム装置1)の動きが所定の基準以上であるか否かを判定する。所定の基準としては、カメラの加速度(各速度)が所定値以上であることや、カメラの(単位時間当たりの)移動量が所定値以上であること等が考えられる。ステップS42判定結果が肯定である場合、ステップS34の処理が実行される。一方、ステップS42の判定結果が否定である場合、ステップS35の処理が実行される。
【0160】
以上より、図13に示す変形例においては、カメラの動きが所定の基準よりも激しい場合、警告画像が表示され(ステップS34)、カメラの動きが所定の基準よりも緩やかである場合、合成画像が引き続き表示される。ここで、カメラが激しく動いた場合には、マーカ52が撮像範囲から外れて認識ができなくなっている可能性が高いと推測することができ、逆に、カメラがあまり動いていない場合には、マーカ52が撮像範囲内にあり、認識が再度成功する可能性があると推測することができる。したがって、本変形例によれば、認識が失敗した場合において、その後認識が再度成功する(認識の失敗が一時的なものである)と推測される場合には合成画像が引き続き表示され、認識が再度成功する見込みが少ない場合には警告画像が表示される。これによって、警告画像をより適切な状況で表示させることができる。
【0161】
なお、上記変形例においては、図示しないが、ゲーム制御処理(ステップS4)におけるゲーム中断処理(ステップS25)は、警告画像が表示されることに応じて行われることが好ましい。すなわち、ゲーム制御処理において、CPU31は、ステップS21の判定結果が肯定である場合には図13と同様のステップS41およびS42を実行し、ステップS42の判定結果が肯定の場合にステップS25を実行するようにしてもよい。
【0162】
また、上記変形例においては、認識が失敗となった場合にすぐにステップS41およびS42の処理が実行されるようにしてもよい。すなわち、第1閾値N1は“1”あるいは非常に小さい値に設定されてもよい。また、上記変形例においては、撮像画像を表示するステップS32の処理は、警告画像が表示された後、警告画像が表示されてから所定時間が経過したことを条件として実行されてもよい。
【0163】
以上のように、上記変形例によれば、カメラ(ゲーム装置1)の動きを検知することによって、認識の失敗が一時的なものであるか否かを判断することができ、警告画像を表示するタイミングを適切に決定することができる。
【0164】
(ゲームシステムに関する変形例)
上記実施形態においては、合成画像を生成・表示するための一連の処理が単一の装置(ゲーム装置1)において実行される場合を説明したが、他の実施形態においては、一連の処理が複数の情報処理装置からなる情報処理システムにおいて実行されてもよい。例えば、端末側装置と、当該端末側装置とネットワークを介して通信可能なサーバ側装置とを含む情報処理システムにおいて、端末側の装置がカメラによって撮像画像を取得し、取得された撮像画像のデータをサーバ側装置へ送信する。撮像画像のデータを受信したサーバ側装置は、認識処理(上記実施形態で言えば、ステップS3の認識管理処理)およびゲーム処理(上記実施形態で言えば、ステップS4のゲーム制御処理)を実行し、ゲーム処理の結果のデータを端末側装置へ送信する。ゲーム処理の結果のデータは、例えば、ゲーム画像のデータ、あるいは、ゲーム画像の生成に必要なデータである。端末側装置は、ゲーム処理の結果のデータを受信し、当該データに基づいて合成画像等のゲーム画像を表示装置に表示する。このように、本発明は、複数の情報処理装置からなる情報処理システムによって実現されてもよい。
【産業上の利用可能性】
【0165】
以上のように、本発明は、拡張現実感技術において仮想画像をより現実味を増して表示すること等を目的として、例えばゲームプログラムやゲーム装置として利用することが可能である。
【符号の説明】
【0166】
1 ゲーム装置
13 タッチパネル
22 上側LCD
25 外側カメラ
31 CPU
32 メインメモリ
52 マーカ
53 大砲(仮想オブジェクト)
61 ゲームプログラム
64 撮像画像データ
66 認識済画像データ
68 認識結果データ
69 プレイヤ位置データ
【特許請求の範囲】
【請求項1】
撮像手段から撮像画像を取得可能な情報処理装置のコンピュータを、
取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する認識手段と、
前記認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する合成手段と、
前記合成画像を表示手段に表示させる表示制御手段として機能させる画像表示プログラムであって、
前記合成手段は、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する、画像表示プログラム。
【請求項2】
前記合成手段は、認識処理の処理結果にかかわらず、前記仮想オブジェクトの画像を更新して合成画像を生成する、請求項1に記載の画像表示プログラム。
【請求項3】
前記認識処理が成功した場合、成功した認識処理の対象となった撮像画像と当該認識処理の処理結果とを、前記コンピュータがアクセス可能な記憶手段に記憶させる記憶制御手段として前記コンピュータをさらに機能させ、
前記合成手段は、前記記憶手段に記憶される撮像画像と、当該記憶手段に記憶される処理結果に基づいて生成される合成画像とを合成する、請求項1または請求項2に記載の画像表示プログラム。
【請求項4】
前記記憶制御手段は、前記認識処理が成功した場合、成功した認識処理の対象となった撮像画像と当該認識処理の処理結果とが記憶されるように、前記記憶手段の記憶内容を更新する、請求項3に記載の画像表示プログラム。
【請求項5】
前記認識手段は、前記認識処理が成功する場合、当該認識処理によって認識された前記所定の対象と前記撮像手段もしくは前記情報処理装置との位置関係を前記処理結果として算出し、
前記合成手段は、前記認識処理が成功した場合、成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて前記仮想オブジェクトの画像を生成し、前記認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて前記仮想オブジェクトの画像を生成する、請求項1から請求項4のいずれか1項に記載の画像表示プログラム。
【請求項6】
前記認識処理の処理結果をゲーム入力として用いて、仮想空間に登場するオブジェクトの動作を制御する所定のゲーム制御処理を実行するゲーム制御処理手段として前記コンピュータをさらに機能させる、請求項1から請求項5のいずれか1項に記載の画像表示プログラム。
【請求項7】
前記ゲーム制御処理手段は、認識処理が失敗した場合、以前に成功した認識処理の処理結果を用いて前記ゲーム制御処理を実行する、請求項6に記載の画像表示プログラム。
【請求項8】
前記認識処理の処理結果にかかわらず所定のゲーム処理を実行するゲーム処理手段として前記コンピュータをさらに機能させる、請求項1から請求項7のいずれか1項に記載の画像表示プログラム。
【請求項9】
前記ゲーム処理手段は、前記仮想オブジェクトの動作を制御する処理を前記ゲーム処理として実行する、請求項8に記載の画像表示プログラム。
【請求項10】
前記表示制御手段は、前記認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、前記撮像画像とは異なる警告画像を前記表示手段に表示させる、請求項1から請求項9のいずれか1項に記載の画像表示プログラム。
【請求項11】
前記表示制御手段は、前記認識処理が所定時間の間連続して失敗したことを前記所定の条件として、前記警告画像を前記表示手段に表示させる、請求項10に記載の画像表示プログラム。
【請求項12】
前記撮像手段または前記情報処理装置の動きを検知する動き検知手段として前記コンピュータをさらに機能させ、
前記表示制御手段は、前記動き検知手段によって前記撮像手段が所定の基準以上動いていることが検知されたことを前記所定の条件として、前記警告画像を前記表示手段に表示させる、請求項10に記載の画像表示プログラム。
【請求項13】
前記認識処理の処理結果をゲーム入力として用いて、前記仮想オブジェクトの動作を制御する所定のゲーム制御処理を実行するゲーム制御処理手段として前記コンピュータをさらに機能させ、
前記ゲーム制御処理手段は、前記警告画像が表示されることに応じて、ゲームの進行を中断する、請求項10に記載の画像表示プログラム。
【請求項14】
前記表示制御手段は、前記警告画像が表示された後において前記認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、現時点で取得された撮像画像を前記表示手段に表示させる、請求項10に記載の画像表示プログラム。
【請求項15】
前記表示制御手段は、前記認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、現時点で取得された撮像画像を前記表示手段に表示させる、請求項1から請求項9のいずれか1項に記載の画像表示プログラム。
【請求項16】
撮像手段から撮像画像を取得可能であり、表示手段に画像を表示させる画像表示装置であって、
取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する認識手段と、
前記認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する合成手段と、
前記合成画像を表示手段に表示させる表示制御手段とを備え、
前記合成手段は、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する、画像表示装置。
【請求項17】
撮像手段から撮像画像を取得可能であり、表示手段に画像を表示させる画像表示システムであって、
取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する認識手段と、
前記認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する合成手段と、
前記合成画像を表示手段に表示させる表示制御手段とを備え、
前記合成手段は、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する、画像表示システム。
【請求項18】
撮像手段から撮像画像を取得し、表示手段に画像を表示させるための画像表示方法であって、
取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する認識ステップと、
前記認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する合成ステップと、
前記合成画像を表示手段に表示させる表示制御ステップとを備え、
前記合成ステップにおいては、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する、画像表示方法。
【請求項1】
撮像手段から撮像画像を取得可能な情報処理装置のコンピュータを、
取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する認識手段と、
前記認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する合成手段と、
前記合成画像を表示手段に表示させる表示制御手段として機能させる画像表示プログラムであって、
前記合成手段は、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する、画像表示プログラム。
【請求項2】
前記合成手段は、認識処理の処理結果にかかわらず、前記仮想オブジェクトの画像を更新して合成画像を生成する、請求項1に記載の画像表示プログラム。
【請求項3】
前記認識処理が成功した場合、成功した認識処理の対象となった撮像画像と当該認識処理の処理結果とを、前記コンピュータがアクセス可能な記憶手段に記憶させる記憶制御手段として前記コンピュータをさらに機能させ、
前記合成手段は、前記記憶手段に記憶される撮像画像と、当該記憶手段に記憶される処理結果に基づいて生成される合成画像とを合成する、請求項1または請求項2に記載の画像表示プログラム。
【請求項4】
前記記憶制御手段は、前記認識処理が成功した場合、成功した認識処理の対象となった撮像画像と当該認識処理の処理結果とが記憶されるように、前記記憶手段の記憶内容を更新する、請求項3に記載の画像表示プログラム。
【請求項5】
前記認識手段は、前記認識処理が成功する場合、当該認識処理によって認識された前記所定の対象と前記撮像手段もしくは前記情報処理装置との位置関係を前記処理結果として算出し、
前記合成手段は、前記認識処理が成功した場合、成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて前記仮想オブジェクトの画像を生成し、前記認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像から算出される位置関係に基づいて前記仮想オブジェクトの画像を生成する、請求項1から請求項4のいずれか1項に記載の画像表示プログラム。
【請求項6】
前記認識処理の処理結果をゲーム入力として用いて、仮想空間に登場するオブジェクトの動作を制御する所定のゲーム制御処理を実行するゲーム制御処理手段として前記コンピュータをさらに機能させる、請求項1から請求項5のいずれか1項に記載の画像表示プログラム。
【請求項7】
前記ゲーム制御処理手段は、認識処理が失敗した場合、以前に成功した認識処理の処理結果を用いて前記ゲーム制御処理を実行する、請求項6に記載の画像表示プログラム。
【請求項8】
前記認識処理の処理結果にかかわらず所定のゲーム処理を実行するゲーム処理手段として前記コンピュータをさらに機能させる、請求項1から請求項7のいずれか1項に記載の画像表示プログラム。
【請求項9】
前記ゲーム処理手段は、前記仮想オブジェクトの動作を制御する処理を前記ゲーム処理として実行する、請求項8に記載の画像表示プログラム。
【請求項10】
前記表示制御手段は、前記認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、前記撮像画像とは異なる警告画像を前記表示手段に表示させる、請求項1から請求項9のいずれか1項に記載の画像表示プログラム。
【請求項11】
前記表示制御手段は、前記認識処理が所定時間の間連続して失敗したことを前記所定の条件として、前記警告画像を前記表示手段に表示させる、請求項10に記載の画像表示プログラム。
【請求項12】
前記撮像手段または前記情報処理装置の動きを検知する動き検知手段として前記コンピュータをさらに機能させ、
前記表示制御手段は、前記動き検知手段によって前記撮像手段が所定の基準以上動いていることが検知されたことを前記所定の条件として、前記警告画像を前記表示手段に表示させる、請求項10に記載の画像表示プログラム。
【請求項13】
前記認識処理の処理結果をゲーム入力として用いて、前記仮想オブジェクトの動作を制御する所定のゲーム制御処理を実行するゲーム制御処理手段として前記コンピュータをさらに機能させ、
前記ゲーム制御処理手段は、前記警告画像が表示されることに応じて、ゲームの進行を中断する、請求項10に記載の画像表示プログラム。
【請求項14】
前記表示制御手段は、前記警告画像が表示された後において前記認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、現時点で取得された撮像画像を前記表示手段に表示させる、請求項10に記載の画像表示プログラム。
【請求項15】
前記表示制御手段は、前記認識処理が連続して失敗した結果、所定の条件が満たされたことに応じて、現時点で取得された撮像画像を前記表示手段に表示させる、請求項1から請求項9のいずれか1項に記載の画像表示プログラム。
【請求項16】
撮像手段から撮像画像を取得可能であり、表示手段に画像を表示させる画像表示装置であって、
取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する認識手段と、
前記認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する合成手段と、
前記合成画像を表示手段に表示させる表示制御手段とを備え、
前記合成手段は、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する、画像表示装置。
【請求項17】
撮像手段から撮像画像を取得可能であり、表示手段に画像を表示させる画像表示システムであって、
取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する認識手段と、
前記認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する合成手段と、
前記合成画像を表示手段に表示させる表示制御手段とを備え、
前記合成手段は、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する、画像表示システム。
【請求項18】
撮像手段から撮像画像を取得し、表示手段に画像を表示させるための画像表示方法であって、
取得された撮像画像に対して、当該撮像画像に含まれる所定の対象を認識する認識処理を繰り返し実行する認識ステップと、
前記認識処理の処理結果を用いて生成される仮想オブジェクトの画像と、当該認識処理の対象となった撮像画像とを合成した合成画像を繰り返し生成する合成ステップと、
前記合成画像を表示手段に表示させる表示制御ステップとを備え、
前記合成ステップにおいては、認識処理が失敗した場合、以前に成功した認識処理の対象となった撮像画像と、当該認識処理の処理結果を用いて生成される仮想オブジェクトの画像とを合成する、画像表示方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2012−59292(P2012−59292A)
【公開日】平成24年3月22日(2012.3.22)
【国際特許分類】
【出願番号】特願2011−269711(P2011−269711)
【出願日】平成23年12月9日(2011.12.9)
【分割の表示】特願2010−112386(P2010−112386)の分割
【原出願日】平成22年5月14日(2010.5.14)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
【公開日】平成24年3月22日(2012.3.22)
【国際特許分類】
【出願日】平成23年12月9日(2011.12.9)
【分割の表示】特願2010−112386(P2010−112386)の分割
【原出願日】平成22年5月14日(2010.5.14)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
[ Back to top ]