(57)【要約】【課題】画像から所定の物体または図柄の輪郭を高い精度で検出できるようにすること。【解決手段】まず、画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する。そして、当該差分が所定値以上である場合に、第１画素またはその近傍画素の画素値と、第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する。そして、第１画素と第２画素に挟まれた各画素の画素値とエッジ判定閾値とを比較することによって、第１画素と第２画素の間に存在するエッジに対応するエッジ画素を検出する。【選択図】図７５
2011154699.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置のコンピュータを、
画像を取得する画像取得手段、
前記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する差分計算手段、
前記差分が所定値以上である場合の前記第１画素またはその近傍画素の画素値と、当該第１画素に対応する前記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する閾値計算手段、および
前記第１画素と前記第２画素に挟まれた各画素の画素値と前記エッジ判定閾値とを比較することによって、前記第１画素と前記第２画素の間に存在するエッジに対応するエッジ画素を検出するエッジ画素検出手段として機能させる、画像認識プログラム。
【請求項２】
前記閾値計算手段は、
前記第１画素と前記第２画素のうちの画素値が大きい方の画素とその周辺の画素の画素値の中から極大値を検出する第１検出手段、および
前記第１検出手段によって検出された極大値に基づいて前記エッジ判定閾値を計算する第１計算手段を含む、請求項１に記載の画像認識プログラム。
【請求項３】
前記第１検出手段は、前記第１画素と前記第２画素のうちの画素値が大きい方の画素から、画素値が小さい方の画素とは反対方向に向かって、隣接する２画素間の画素値の大小関係を順次判定することによって、前記極大値を検出する、請求項２に記載の画像認識プログラム。
【請求項４】
前記閾値計算手段は、
前記第１画素と前記第２画素のうちの画素値が小さい方の画素から見て、画素値が大きい方の画素とは反対方向に所定画素数だけ離れた位置にある特定近傍画素の画素値が所定条件を満たすかどうかを判定する第２判定手段、および
前記第２判定手段によって前記所定条件を満たすと判定された場合に、前記特定近傍画素の画素値に基づいて前記エッジ判定閾値を計算する第２計算手段を含む、請求項１〜請求項３のいずれか１項に記載の画像認識プログラム。
【請求項５】
前記第２判定手段は、前記第１画素と前記第２画素のうちの画素値が小さい方の画素の画素値が、前記特定近傍画素の画素値よりも小さく、かつ、前記第１画素と前記第２画素のうちの画素値が大きい方の画素またはその近傍画素の画素値と、前記特定近傍画素の画素値との差分が前記所定値以上である場合に、前記所定条件を満たすと判定する、請求項４に記載の画像認識プログラム。
【請求項６】
前記閾値計算手段は、前記第１画素またはその近傍画素の画素値と、前記第２画素またはその近傍画素の画素値との平均値を、前記エッジ判定閾値として計算する、請求項１〜５のいずれか１項に記載の画像認識プログラム。
【請求項７】
前記コンピュータを、
前記エッジ画素検出手段によって検出されたエッジ画素に対応するエッジの一部とは異なる部分のエッジ画素を前記エッジ判定閾値に基づいて検出する他エッジ画素検出手段としてさらに機能させる、請求項１〜請求項６のいずれか１項に記載の画像認識プログラム。
【請求項８】
前記エッジ辿り手段は、すでに検出されているエッジ画素に隣接する複数画素の中から、前記エッジ判定閾値に基づいて、当該エッジ画素に連なる新たなエッジ画素を検出する、請求項７に記載の画像認識プログラム。
【請求項９】
前記画像認識プログラムは、前記コンピュータを、前記エッジ辿り手段によって検出された新たなエッジ画素が、すでに検出されているいずれかのエッジ画素と同一か否かを判定する同一判定手段としてさらに機能させ、
前記エッジ辿り手段は、当該エッジ辿り手段によって順次検出される新たなエッジ画素が、前記同一判定手段によって、所定回数連続して、すでに検出されているいずれかのエッジ画素と同一であると判定されたときに、新たなエッジ画素を順次検出する処理を中止する、請求項７または請求項８に記載の画像認識プログラム。
【請求項１０】
前記閾値計算手段は、前記第１画素と前記第２画素のうちの画素値が大きい方の画素の画素値よりもその周辺の画素の画素値が大きい場合に、当該周辺の画素の画素値に基づいて前記エッジ判定閾値を計算する、請求項１に記載の画像認識プログラム。
【請求項１１】
画像を取得する画像取得手段、
前記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する差分計算手段、
前記差分が所定値以上である場合の前記第１画素またはその近傍画素の画素値と、当該第１画素に対応する前記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する閾値計算手段、および
前記第１画素と前記第２画素に挟まれた各画素の画素値と前記エッジ判定閾値とを比較することによって、前記第１画素と前記第２画素の間に存在するエッジに対応するエッジ画素を検出するエッジ画素検出手段を備える、画像認識装置。
【請求項１２】
画像を取得する画像取得ステップ、
前記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する差分計算ステップ、
前記差分が所定値以上である場合の前記第１画素またはその近傍画素の画素値と、当該第１画素に対応する前記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する閾値計算ステップ、および
前記第１画素と前記第２画素に挟まれた各画素の画素値と前記エッジ判定閾値とを比較することによって、前記第１画素と前記第２画素の間に存在するエッジに対応するエッジ画素を検出するエッジ画素検出ステップを備える、画像認識方法。
【請求項１３】
画像を取得する画像取得手段、
前記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する差分計算手段、
前記差分が所定値以上である場合の前記第１画素またはその近傍画素の画素値と、当該第１画素に対応する前記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する閾値計算手段、および
前記第１画素と前記第２画素に挟まれた各画素の画素値と前記エッジ判定閾値とを比較することによって、前記第１画素と前記第２画素の間に存在するエッジに対応するエッジ画素を検出するエッジ画素検出手段を備える、画像認識システム。
【請求項１４】
画像認識装置とマーカーを備えた画像認識システムであって、
前記画像認識装置は、
前記マーカーを撮像する撮像部、
前記撮像部から画像を取得する画像取得手段、
前記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する差分計算手段、
前記差分が所定値以上である場合の前記第１画素またはその近傍画素の画素値と、当該第１画素に対応する前記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する閾値計算手段、および
前記第１画素と前記第２画素に挟まれた各画素の画素値と前記エッジ判定閾値とを比較することによって、前記第１画素と前記第２画素の間に存在するエッジに対応するエッジ画素を検出するエッジ画素検出手段を備える、画像認識システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、撮像手段によって撮像された画像から所定の撮像対象を検出するための画像認識プログラム、画像認識装置、画像認識システム、および画像認識方法に関する。
【背景技術】
【０００２】
従来、カメラ等の撮像手段によって撮像された画像（撮像画像）から所定の撮像対象を検出する技術がある。例えば、非特許文献１には、拡張現実感技術において、カメラによる撮像画像に含まれるマーカーに対して画像認識処理を行うことが記載されている。非特許文献１では、撮像画像に対して固定の閾値を用いて２値化を行うことで連結領域を抽出し、抽出された連結領域から大きさおよび形状が適切なものを選出してマーカー候補とし、マーカー候補に対してパターンマッチングを行うことによってマーカーを検出することが記載されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】加藤博一，Mark Billinghurst，浅野浩一，橘啓八郎、「マーカー追跡に基づく拡張現実感システムとそのキャリブレーション」、日本バーチャルリアリティ学会論文誌  Ｖｏｌ．４  Ｎｏ．４、１９９９年
【発明の概要】
【発明が解決しようとする課題】
【０００４】
非特許文献１に記載されているマーカーの検出方法は、種々の状況（例えば、明るい状況や、暗い状況や、マーカーの一部がユーザの指等で隠れてしまう状況や、カメラに対してマーカーが真正面を向いていない状況や、強い光がマーカーで反射している状況など）において、マーカーを必ずしも高い精度または小さい処理負荷で検出できるものではなかった。
【０００５】
また、非特許文献１に記載されているマーカーの検出方法は、マーカーの検出位置の微細なブレを防止することができなかった。
【０００６】
それゆえに、この発明は、画像から所定の物体または図柄を高い精度または小さい処理負荷で検出することができる画像認識プログラム、画像認識装置、画像認識システム、および画像認識方法、もしくは、検出された所定の物体または図柄の位置の微細なブレを防止または緩和することのできる画像認識プログラム、画像認識装置、画像認識システム、および画像認識方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、以下のような構成を採用し得る。
【０００８】
第１の構成例は、情報処理装置のコンピュータを、画像取得手段、差分計算手段、閾値計算手段、およびエッジ画素検出手段として機能させる画像認識プログラムである。
【０００９】
上記画像取得手段は、画像を取得する。上記差分計算手段は、上記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する。上記閾値計算手段は、上記差分が所定値以上である場合の上記第１画素またはその近傍画素の画素値と、当該第１画素に対応する上記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する。上記エッジ画素検出手段は、上記第１画素と上記第２画素に挟まれた各画素の画素値と上記エッジ判定閾値とを比較することによって、上記第１画素と上記第２画素の間に存在するエッジに対応するエッジ画素を検出する。
【００１０】
上記構成例によれば、画像の全体的または部分的な明るさに応じた適切なエッジ判定閾値を用いてエッジ画素を検出することができる。
【００１１】
なお、変形例として、上記閾値計算手段は、上記第１画素と上記第２画素のうちの画素値が大きい方の画素とその周辺の画素の画素値の中から極大値を検出する第１検出手段、および上記第１検出手段によって検出された極大値に基づいて上記エッジ判定閾値を計算する第１計算手段を含んでいてもよい。
【００１２】
上記変形例によれば、第１画素（または第２画素）がエッジ近辺の画素であったとしても、適切なエッジ判定閾値を計算することができる。
【００１３】
また、他の変形例として、上記第１検出手段は、上記第１画素と上記第２画素のうちの画素値が大きい方の画素から、画素値が小さい方の画素とは反対方向に向かって、隣接する２画素間の画素値の大小関係を順次判定することによって、上記極大値を検出してもよい。
【００１４】
また、他の変形例として、上記閾値計算手段は、上記第１画素と上記第２画素のうちの画素値が小さい方の画素から見て、画素値が大きい方の画素とは反対方向に所定画素数だけ離れた位置にある特定近傍画素の画素値が所定条件を満たすかどうかを判定する第２判定手段、および上記第２判定手段によって上記所定条件を満たすと判定された場合に、上記特定近傍画素の画素値に基づいて上記エッジ判定閾値を計算する第２計算手段を含んでいてもよい。
【００１５】
上記変形例によれば、上記画像が、エッジ強調処理が施された画像であったとしても、適切なエッジ判定閾値を計算することができる。
【００１６】
また、他の変形例として、上記第２判定手段は、上記第１画素と上記第２画素のうちの画素値が小さい方の画素の画素値が、上記特定近傍画素の画素値よりも小さく、かつ、上記第１画素と上記第２画素のうちの画素値が大きい方の画素またはその近傍画素の画素値と、上記特定近傍画素の画素値との差分が上記所定値以上である場合に、上記所定条件を満たすと判定してもよい。
【００１７】
また、他の変形例として、上記閾値計算手段は、上記第１画素またはその近傍画素の画素値と、上記第２画素またはその近傍画素の画素値との平均値を、上記エッジ判定閾値として計算してもよい。
【００１８】
また、他の変形例として、上記画像認識プログラムは、上記コンピュータを、上記エッジ画素検出手段によって検出されたエッジ画素に対応するエッジの一部とは異なる部分のエッジ画素を上記エッジ判定閾値に基づいて検出する他エッジ画素検出手段としてさらに機能させてもよい。
【００１９】
上記変形例によれば、複数のエッジ画素を効率よく検出することができる。
【００２０】
また、他の変形例として、上記エッジ辿り手段は、すでに検出されているエッジ画素に隣接する複数画素の中から、上記エッジ判定閾値に基づいて、当該エッジ画素に連なる新たなエッジ画素を検出してもよい。
【００２１】
また、他の変形例として、上記画像認識プログラムは、上記コンピュータを、上記エッジ辿り手段によって検出された新たなエッジ画素が、すでに検出されているいずれかのエッジ画素と同一か否かを判定する同一判定手段としてさらに機能させ、上記エッジ辿り手段は、当該エッジ辿り手段によって順次検出される新たなエッジ画素が、上記同一判定手段によって、所定回数連続して、すでに検出されているいずれかのエッジ画素と同一であると判定されたときに、新たなエッジ画素を順次検出する処理を中止してもよい。
【００２２】
上記変形例によれば、異常な輪郭に対する無駄な処理を回避することができる。
【００２３】
また、他の変形例として、上記閾値計算手段は、上記第１画素と上記第２画素のうちの画素値が大きい方の画素の画素値よりもその周辺の画素の画素値が大きい場合に、当該周辺の画素の画素値に基づいて上記エッジ判定閾値を計算してもよい。
【００２４】
上記変形例によれば、第１画素（または第２画素）がエッジ近辺の画素であったとしても、適切なエッジ判定閾値を計算することができる。
【００２５】
なお、上記画像処理プログラムは、任意のコンピュータ読み取り可能な記憶媒体（例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、半導体メモリカード、ＲＯＭ、ＲＡＭなど）に格納され得る。
【００２６】
第２の構成例は、画像を取得する画像取得手段、上記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する差分計算手段、上記差分が所定値以上である場合の上記第１画素またはその近傍画素の画素値と、当該第１画素に対応する上記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する閾値計算手段、および上記第１画素と上記第２画素に挟まれた各画素の画素値と上記エッジ判定閾値とを比較することによって、上記第１画素と上記第２画素の間に存在するエッジに対応するエッジ画素を検出するエッジ画素検出手段を備える、画像認識装置である。
【００２７】
第３の構成例は、画像を取得する画像取得ステップ、上記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する差分計算ステップ、上記差分が所定値以上である場合の上記第１画素またはその近傍画素の画素値と、当該第１画素に対応する上記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する閾値計算ステップ、および上記第１画素と上記第２画素に挟まれた各画素の画素値と上記エッジ判定閾値とを比較することによって、上記第１画素と上記第２画素の間に存在するエッジに対応するエッジ画素を検出するエッジ画素検出ステップを備える、画像認識方法である。
【００２８】
第４の構成例は、画像を取得する画像取得手段、上記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する差分計算手段、上記差分が所定値以上である場合の上記第１画素またはその近傍画素の画素値と、当該第１画素に対応する上記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する閾値計算手段、および上記第１画素と上記第２画素に挟まれた各画素の画素値と上記エッジ判定閾値とを比較することによって、上記第１画素と上記第２画素の間に存在するエッジに対応するエッジ画素を検出するエッジ画素検出手段を備える、画像認識システムである。
【００２９】
第５の構成例は、画像認識装置とマーカーを備えた画像認識システムである。上記画像認識装置は、上記マーカーを撮像する撮像部、上記撮像部から画像を取得する画像取得手段、上記画像における第１画素の画素値と、当該第１画素から所定画素数だけ離れた位置にある第２画素の画素値との差分を計算する差分計算手段、上記差分が所定値以上である場合の上記第１画素またはその近傍画素の画素値と、当該第１画素に対応する上記第２画素またはその近傍画素の画素値とに基づいて、エッジ判定閾値を計算する閾値計算手段、および上記第１画素と上記第２画素に挟まれた各画素の画素値と上記エッジ判定閾値とを比較することによって、上記第１画素と上記第２画素の間に存在するエッジに対応するエッジ画素を検出するエッジ画素検出手段を備える。
【発明の効果】
【００３０】
上記の各構成例によれば、画像から所定の物体または図柄の輪郭を高い精度で検出することができる。
【図面の簡単な説明】
【００３１】
【図１】開状態におけるゲーム装置１０の正面図
【図２Ａ】閉状態におけるゲーム装置１０の左側面図
【図２Ｂ】閉状態におけるゲーム装置１０の正面図
【図２Ｃ】閉状態におけるゲーム装置１０の右側面図
【図２Ｄ】閉状態におけるゲーム装置１０の背面図
【図３】ゲーム装置１０の内部構成を示すブロック図
【図４】上側ＬＣＤ２２に表示される画像を示す図
【図５】マーカー５０を示す図
【図６】外側撮像部（左）２３ａまたは外側撮像部（右）２３ｂによって撮像される実写画像を示す図
【図７】実写画像における注目画素の選択順序を示す図
【図８】エッジ判定閾値の決定方法を説明するための図
【図９】エッジ判定閾値の決定方法を説明するための図
【図１０】エッジ判定閾値の決定方法を説明するための図
【図１１】エッジ判定閾値の決定方法を説明するための図
【図１２】エッジ判定閾値の決定方法を説明するための図
【図１３】エッジ辿り処理を説明するための図
【図１４】エッジ辿り処理を説明するための図
【図１５】エッジ辿り処理を説明するための図
【図１６】エッジ辿り処理を説明するための図
【図１７】エッジ辿り処理を説明するための図
【図１８】エッジ辿り処理を説明するための図
【図１９】エッジ辿り処理を説明するための図
【図２０】エッジ辿り処理を説明するための図
【図２１】エッジ辿り処理を説明するための図
【図２２】直線算出処理を説明するための図
【図２３】直線算出処理を説明するための図
【図２４】直線算出処理を説明するための図
【図２５】直線算出処理を説明するための図
【図２６】直線算出処理を説明するための図
【図２７】直線算出処理を説明するための図
【図２８】直線算出処理を説明するための図
【図２９】直線算出処理を説明するための図
【図３０】直線算出処理を説明するための図
【図３１】直線算出処理を説明するための図
【図３２】直線算出処理を説明するための図
【図３３】直線算出処理を説明するための図
【図３４】直線算出処理を説明するための図
【図３５】直線算出処理を説明するための図
【図３６】直線算出処理を説明するための図
【図３７】直線統合処理を説明するための図
【図３８】直線統合処理を説明するための図
【図３９】直線統合処理を説明するための図
【図４０】直線選出処理を説明するための図
【図４１】直線選出処理を説明するための図
【図４２】頂点算出処理を説明するための図
【図４３】頂点算出処理を説明するための図
【図４４】粗判別処理における第１除外条件を説明するための図
【図４５】粗判別処理における第２除外条件を説明するための図
【図４６】粗判別処理における第３除外条件を説明するための図
【図４７】粗判別処理における第４除外条件を説明するための図
【図４８】図柄判別処理に用いられるパターン定義データを説明するための図
【図４９】図柄判別処理に用いられるパターン定義データを説明するための図
【図５０】マーカー５０を含む実写画像を示す図
【図５１】実写画像におけるサンプル点の位置の決定方法の一例を示す図
【図５２】実写画像におけるサンプル点の位置を決定するための第１の決定方法を説明するための図
【図５３】実写画像におけるサンプル点の位置を決定するための第１の決定方法を説明するための図
【図５４】実写画像におけるサンプル点の位置を決定するための第１の決定方法を説明するための図
【図５５】実写画像におけるサンプル点の位置を決定するための第１の決定方法を説明するための図
【図５６】実写画像におけるサンプル点の位置を決定するための第１の決定方法を説明するための図
【図５７】実写画像におけるサンプル点の位置を決定するための第１の決定方法を説明するための図
【図５８】実写画像におけるサンプル点の位置を決定するための第１の決定方法を説明するための図
【図５９】実写画像におけるサンプル点の位置を決定するための第２の決定方法を説明するための図
【図６０】実写画像におけるサンプル点の位置を決定するための第２の決定方法を説明するための図
【図６１】現在の実写画像からマーカーの輪郭および頂点が検出されなかったときに行われる図柄判別処理を説明するための図
【図６２】現在の実写画像からマーカーの輪郭および頂点が検出されなかったときに行われる図柄判別処理を説明するための図
【図６３】マーカー位置補正処理を説明するための図
【図６４】マーカー位置補正処理を説明するための図
【図６５】マーカー位置補正処理を説明するための図
【図６６】実写画像上でのマーカーの大きさに応じて閾値Ｄ１および閾値Ｄ２の大きさを変える理由を説明するための図
【図６７】実写画像上でのマーカーの大きさに応じて閾値Ｄ１および閾値Ｄ２の大きさを変える理由を説明するための図
【図６８】閾値Ｄ１の決定方法を示す図
【図６９】閾値Ｄ２の決定方法を示す図
【図７０】マーカー位置補正処理の変形例を説明するための図
【図７１】マーカー位置補正処理の他の変形例を説明するための図
【図７２】マーカーの対応関係の判別方法を説明するための図
【図７３】メインメモリ３２のメモリマップ
【図７４】画像認識処理全体の流れを示すフローチャート
【図７５】輪郭検出処理の流れを示すフローチャート
【図７６】頂点検出処理の流れを示すフローチャート
【図７７】粗判別処理の流れを示すフローチャート
【図７８】図柄判別処理の流れを示すフローチャート
【図７９】マーカー位置補正処理の流れを示すフローチャート
【発明を実施するための形態】
【００３２】
（ゲーム装置の構成）
以下、本発明の一実施形態に係るゲーム装置について説明する。ゲーム装置１０は携帯型のゲーム装置である。図１および図２Ａ〜Ｄに示されるように、ゲーム装置１０は、下側ハウジング１１および上側ハウジング２１を有する。下側ハウジング１１と上側ハウジング２１とは、開閉可能（折り畳み可能）に接続されている。
【００３３】
（下側ハウジングの説明）
図１および図２Ａ〜Ｄに示すように、下側ハウジング１１には、下側ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶表示装置）１２、タッチパネル１３、各操作ボタン１４Ａ〜１４Ｌ、アナログスティック１５、ＬＥＤ１６Ａ〜１６Ｂ、挿入口１７、および、マイクロフォン用孔１８が設けられる。
【００３４】
タッチパネル１３は、下側ＬＣＤ１２の画面上に装着されている。下側ハウジング１１の上側面には、タッチペン２８を収納するための挿入口１７（図１および図２Ｄに示す点線）が設けられている。
【００３５】
下側ハウジング１１の内側面（主面）には、十字ボタン１４Ａ（方向入力ボタン１４Ａ）、ボタン１４Ｂ、ボタン１４Ｃ、ボタン１４Ｄ、ボタン１４Ｅ、電源ボタン１４Ｆ、セレクトボタン１４Ｊ、ＨＯＭＥボタン１４Ｋ、およびスタートボタン１４Ｌが、設けられる。
【００３６】
アナログスティック１５は、方向を指示するデバイスである。
【００３７】
下側ハウジング１１の内側面には、マイクロフォン用孔１８が設けられる。マイクロフォン用孔１８の下部には後述する音声入力装置としてのマイク４２（図３参照）が設けられる。
【００３８】
図２ＢおよびＤに示されるように、下側ハウジング１１の上側面には、Ｌボタン１４ＧおよびＲボタン１４Ｈが設けられている。また、図２Ａに示されるように、下側ハウジング１１の左側面には、ゲーム装置１０が備えるスピーカ４３（図３参照）の音量を調整するための音量ボタン１４Ｉが設けられる。
【００３９】
図２Ａに示されるように、下側ハウジング１１の左側面には開閉可能なカバー部１１Ｃが設けられる。このカバー部１１Ｃの内側には、ゲーム装置１０とデータ保存用外部メモリ４５とを電気的に接続するためのコネクタが設けられる。
【００４０】
図２Ｄに示されるように、下側ハウジング１１の上側面には、外部メモリ４４を挿入するための挿入口１１Ｄが設けられる。
【００４１】
図１および図２Ｃに示されるように、下側ハウジング１１の下側面にはゲーム装置１０の電源のＯＮ／ＯＦＦ状況をユーザに通知する第１ＬＥＤ１６Ａ、下側ハウジング１１の右側面にはゲーム装置１０の無線通信の確立状況をユーザに通知する第２ＬＥＤ１６Ｂが設けられる。ゲーム装置１０は他の機器との間で無線通信を行うことが可能であり、下側ハウジング１１の右側面には、この無線通信の機能を有効／無効にする無線スイッチ１９が設けられる（図２Ｃ参照）。
【００４２】
（上側ハウジングの説明）
図１および図２に示すように、上側ハウジング２１には、上側ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶表示装置）２２、外側撮像部２３（外側撮像部（左）２３ａおよび外側撮像部（右）２３ｂ）、内側撮像部２４、３Ｄ調整スイッチ２５、および、３Ｄインジケータ２６が設けられる。
【００４３】
上側ＬＣＤ２２は、立体視可能な画像を表示することが可能な表示装置である。具体的には、パララックスバリア方式の裸眼立体視可能な表示装置である。上側ＬＣＤ２２は、視差バリアを用いてユーザの左目に左目用画像をユーザの右目に右目用画像を視認させることにより、ユーザにとって立体感のある画像（立体視画像）を表示することができる。また、上側ＬＣＤ２２は、上記視差バリアを無効にすることが可能であり、視差バリアを無効にした場合は、画像を平面的に表示することができる。このように、上側ＬＣＤ２２は、立体視画像を表示する立体表示モードと、画像を平面的に表示する（平面視画像を表示する）平面表示モードとを切り替えることが可能な表示装置である。この表示モードの切り替えは、例えば、後述する３Ｄ調整スイッチ２５によって行われる。
【００４４】
外側撮像部２３は、上側ハウジング２１の外側面２１Ｄに設けられた２つの撮像部（２３ａおよび２３ｂ）の総称である。外側撮像部（左）２３ａと外側撮像部（右）２３ｂとは、ゲーム装置１０が実行するプログラムによって、ステレオカメラとして使用することが可能である。
【００４５】
内側撮像部２４は、上側ハウジング２１の内側面２１Ｂに設けられ、当該内側面の内向きの法線方向を撮像方向とする撮像部である。
【００４６】
３Ｄ調整スイッチ２５は、スライドスイッチであり、上述のように上側ＬＣＤ２２の表示モードを切り替えるために用いられるスイッチである。また、３Ｄ調整スイッチ２５は、上側ＬＣＤ２２に表示された立体視可能な画像（立体画像）の立体感を調整するために用いられる。３Ｄ調整スイッチ２５のスライダ２５ａは、所定方向（上下方向）の任意の位置にスライド可能であり、当該スライダ２５ａの位置に応じて上側ＬＣＤ２２の表示モードが設定される。また、スライダ２５ａの位置に応じて、立体画像の見え方が調整される。
【００４７】
３Ｄインジケータ２６は、上側ＬＣＤ２２が立体表示モードか否かを示すＬＥＤである。
【００４８】
また、上側ハウジング２１の内側面には、スピーカ孔２１Ｅが設けられる。後述するスピーカ４３からの音声がこのスピーカ孔２１Ｅから出力される。
【００４９】
（ゲーム装置１０の内部構成）
次に、図３を参照して、ゲーム装置１０の内部の電気的構成について説明する。図３に示すように、ゲーム装置１０は、上述した各部に加えて、情報処理部３１、メインメモリ３２、外部メモリインターフェイス（外部メモリＩ／Ｆ）３３、データ保存用外部メモリＩ／Ｆ３４、データ保存用内部メモリ３５、無線通信モジュール３６、ローカル通信モジュール３７、リアルタイムクロック（ＲＴＣ）３８、加速度センサ３９、電源回路４０、およびインターフェイス回路（Ｉ／Ｆ回路）４１等の電子部品を備えている。
【００５０】
情報処理部３１は、所定のプログラムを実行するためのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３１１、画像処理を行うＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３１２、ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）３１３を含む。ＣＰＵ３１１は、ゲーム装置１０内のメモリ（例えば外部メモリＩ／Ｆ３３に接続された外部メモリ４４やデータ保存用内部メモリ３５）に記憶されているプログラムを実行することによって、当該プログラムに応じた処理を実行する。なお、ＣＰＵ３１１によって実行されるプログラムは、他の機器との通信によって他の機器から取得されてもよい。ＧＰＵ３１２は、ＣＰＵ３１１からの命令に応じて画像を生成し、ＶＲＡＭ３１３に描画する。ＶＲＡＭ３１３に描画された画像は、上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に出力され、上側ＬＣＤ２２及び／又は下側ＬＣＤ１２に当該画像が表示される。
【００５１】
外部メモリＩ／Ｆ３３は、外部メモリ４４を着脱自在に接続するためのインターフェイスである。また、データ保存用外部メモリＩ／Ｆ３４は、データ保存用外部メモリ４５を着脱自在に接続するためのインターフェイスである。
【００５２】
メインメモリ３２は、情報処理部３１（のＣＰＵ３１１）のワーク領域やバッファ領域として用いられる揮発性の記憶装置である。
【００５３】
外部メモリ４４は、情報処理部３１によって実行されるプログラム等を記憶するための不揮発性の記憶装置である。外部メモリ４４は、例えば読み取り専用の半導体メモリで構成される。
【００５４】
データ保存用外部メモリ４５は、不揮発性の読み書き可能なメモリ（例えばＮＡＮＤ型フラッシュメモリ）で構成され、任意のデータを保存するために用いられる。
【００５５】
データ保存用内部メモリ３５は、読み書き可能な不揮発性メモリ（例えばＮＡＮＤ型フラッシュメモリ）で構成され、所定のデータを格納するために用いられる。例えば、データ保存用内部メモリ３５には、無線通信モジュール３６を介した無線通信によってダウンロードされたデータやプログラムが格納される。
【００５６】
無線通信モジュール３６は、例えばＩＥＥＥ８０２．１１ｂ／ｇの規格に準拠した方式により、無線ＬＡＮに接続する機能を有する。また、ローカル通信モジュール３７は、所定の通信方式（例えば独自プロトコルによる通信や、赤外線通信）により同種のゲーム装置との間で無線通信を行う機能を有する。
【００５７】
加速度センサ３９は、３軸（ｘｙｚ軸）方向に沿った直線方向の加速度（直線加速度）の大きさを検出する。情報処理部３１は、加速度センサ３９が検出した加速度を示すデータ（加速度データ）を受信して、ゲーム装置１０の姿勢や動きを検出することができる。
【００５８】
ＲＴＣ３８は、時間をカウントして情報処理部３１に出力する。情報処理部３１は、ＲＴＣ３８によって計時された時間に基づき現在時刻（日付）を計算する。電源回路４０は、ゲーム装置１０が有する電源（充電式電池）からの電力を制御し、ゲーム装置１０の各部品に電力を供給する。
【００５９】
Ｉ／Ｆ回路４１には、タッチパネル１３、マイク４２およびスピーカ４３が接続される。Ｉ／Ｆ回路４１は、マイク４２およびスピーカ４３（アンプ）の制御を行う音声制御回路と、タッチパネルの制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するＡ／Ｄ変換およびＤ／Ａ変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル１３からの信号に基づいて所定の形式のタッチ位置データを生成して情報処理部３１に出力する。情報処理部３１は、タッチ位置データを取得することにより、タッチパネル１３に対して入力が行われた位置を知ることができる。
【００６０】
操作ボタン１４は、上記各操作ボタン１４Ａ〜１４Ｌからなり、操作ボタン１４から情報処理部３１へは、各操作ボタン１４Ａ〜１４Ｉに対する入力状況（押下されたか否か）を示す操作データが出力される。
【００６１】
下側ＬＣＤ１２および上側ＬＣＤ２２は情報処理部３１に接続される。具体的には、情報処理部３１は、上側ＬＣＤ２２のＬＣＤコントローラ（図示せず）と接続され、当該ＬＣＤコントローラに対して視差バリアのＯＮ／ＯＦＦを制御する。上側ＬＣＤ２２の視差バリアがＯＮになっている場合、情報処理部３１のＶＲＡＭ３１３に格納された右目用画像と左目用画像とが、上側ＬＣＤ２２に出力される。より具体的には、ＬＣＤコントローラは、右目用画像について縦方向に１ライン分の画素データを読み出す処理と、左目用画像について縦方向に１ライン分の画素データを読み出す処理とを交互に繰り返すことによって、ＶＲＡＭ３１３から右目用画像と左目用画像とを読み出す。これにより、右目用画像および左目用画像が、画素を縦に１ライン毎に並んだ短冊状画像に分割され、分割された右目用画像の短冊状画像と左目用画像の短冊状画像とが交互に配置された画像が、上側ＬＣＤ２２の画面に表示される。そして、上側ＬＣＤ２２の視差バリアを介して当該画像がユーザに視認されることによって、ユーザの右目に右目用画像が、ユーザの左目に左目用画像が視認される。以上により、上側ＬＣＤ２２の画面には立体視可能な画像が表示される。
【００６２】
外側撮像部２３および内側撮像部２４は、情報処理部３１の指示に従って画像を撮像し、撮像した画像データを情報処理部３１に出力する。
【００６３】
３Ｄ調整スイッチ２５は、スライダ２５ａの位置に応じた電気信号を情報処理部３１に送信する。
【００６４】
情報処理部３１は、３Ｄインジケータ２６の点灯を制御する。例えば、情報処理部３１は、上側ＬＣＤ２２が立体表示モードである場合、３Ｄインジケータ２６を点灯させる。
【００６５】
（画像処理の概要）
次に、図４〜図７２を参照して、ゲーム装置１０において実行される画像処理の概要を説明する。ゲーム装置１０において実行される画像処理には、画像認識処理と画像生成処理が含まれている。
【００６６】
画像認識処理は、カメラ（外側撮像部（左）２３ａまたは外側撮像部（右）２３ｂ）によって撮像された画像（実写画像）に含まれているマーカーの位置を検出するための処理である。画像生成処理は、画像認識処理の結果を利用して、上側ＬＣＤ２２に表示すべき画像を生成するための処理である。
【００６７】
ゲーム装置１０のＣＰＵ３１１は、画像認識処理の結果を利用して、現実世界におけるマーカーの周辺（例えば、マーカーの上）に仮想オブジェクトがあたかも実在しているかのような画像を上側ＬＣＤ２２に表示することができる。例えば、図４の例では、ゲーム装置１０の上側ＬＣＤ２２に、机に置かれたマーカー５０上に犬を模した仮想オブジェクト６０があたかも実在しているかのような画像が表示されている。このような画像は、カメラによって撮像された実写画像に、仮想オブジェクト６０の画像（仮想空間画像）を合成することによって得られる。仮想空間画像は、仮想空間に配置された仮想カメラに基づいて描画され、仮想空間における仮想カメラと仮想オブジェクトの位置関係（相対的な位置および姿勢）は、現実空間におけるカメラ（外側撮像部（左）２３ａまたは外側撮像部（右）２３ｂ）とマーカー５０との位置関係に一致するようにリアルタイムに制御される。これにより、仮想オブジェクト６０があたかも現実空間に実在しているかのような画像が得られる。
【００６８】
図５に示すように、マーカー５０は四角形であって、外周に沿った白領域と、白領域に囲まれた黒領域を有しており、黒領域の内部には所定の内部図形（ここでは一例として矢印）が描かれている。なお、本実施形態では図５のようなマーカー５０を用いているが、これは単なる一例に過ぎず、他の形状、模様、色のマーカーを用いても良い。例えば、外周に沿った黒領域の内部に、白領域が設けられていてもよい。また、白領域や黒領域の代わりに、別の色の領域を設けてもよい。ただし、後述する輪郭検出処理のためには、コントラストが高い色の組み合わせを用いることが好ましい。
【００６９】
図６は、カメラ（外側撮像部（左）２３ａまたは外側撮像部（右）２３ｂ）によって撮像された画像（実写画像）の一例である。実写画像は、例えば、５１２画素（水平方向）×３８４画素（垂直方向）で構成される。
【００７０】
図６に示すような実写画像からマーカー５０の位置を検出するために、本実施形態では、以下のような処理が行われる。
（１）輪郭検出処理
（２）頂点検出処理
（３）粗判別処理
（４）図柄判別処理
（５）マーカー位置補正処理
【００７１】
（輪郭検出処理）
まず、輪郭検出処理について説明する。輪郭検出処理は、実写画像において、マーカー５０に描かれている図柄の輪郭（図５に示した白領域と黒領域の境界線）を検出するための処理である。
【００７２】
本実施形態では、実写画像において、まず（１６，１６）の座標で示される画素を注目画素として、当該注目画素の輝度値と、当該注目画素から数えて左に８個目の画素（８，１６）の輝度値とに基づいて、当該２つの画素の間のどこかにエッジ（左側が白領域で右側が黒領域となるようなエッジ）が存在するかどうかを判定する（判定方法の詳細は後述する）。そして、エッジが存在しないと判定された場合には、図７に示すように、現在の注目画素（１６，１６）から数えて右に８個目の画素（２４，１６）を新たな注目画素として、当該注目画素の輝度値と、当該注目画素から数えて左に８個目の画素（すなわち、直前の注目画素（１６，１６））の輝度値とに基づいて、当該２つの画素の間のどこかにエッジが存在するかどうかを判定する。以降、注目画素を順次更新しつつ同様の処理を行う。なお、Ｙ座標値が１６であるラインについての処理が終わると、そこから数えて下に１６本目のライン（すなわちＹ座標値が３２であるライン）について、同様の処理を行う。なお、このような注目画素の選び方は単なる一例に過ぎず、これに限定されるものではない。
【００７３】
以下の説明では、注目画素を画素Ｐ（ｎ）と表し、注目画素から見て左にｋ個目の画素を画素Ｐ（ｎ−ｋ）と表し、注目画素から見て右にｋ個目の画素を画素Ｐ（ｎ＋ｋ）と表す。また、注目画素の輝度値をＬ（ｎ）と表し、注目画素から見て左にｋ個目の画素の輝度値をＬ（ｎ−ｋ）と表し、注目画素から見て右にｋ個目の画素の輝度値をＬ（ｎ＋ｋ）と表す。
【００７４】
図８に示すように、注目画素（すなわち画素Ｐ（ｎ））と、注目画素から見て左に８個目の画素（すなわち画素Ｐ（ｎ−８））との間のどこかにエッジが存在するかどうかは、Ｌ（ｎ−８）とＬ（ｎ）とに基づいて判定される。具体的には、Ｌ（ｎ−８）−Ｌ（ｎ）が所定値以上かどうかによって判定される。そして、Ｌ（ｎ−８）−Ｌ（ｎ）が所定値以上である場合には、それらの画素の間のどこかにエッジが存在すると判定される。なお、本実施形態では、各画素の輝度値は０〜２５５の値で表されるものとし、上記所定値は６０であるとする。なお、これらの数字は単なる一例に過ぎず、これらに限定されるものではない。
【００７５】
画素Ｐ（ｎ）と画素Ｐ（ｎ−８）の間のどこかにエッジが存在すると判定された場合には、続いて、これらの２つの画素またはこれらの近傍（周辺）の画素の輝度値に基づいて、エッジの位置を検出するために用いられるエッジ判定閾値が計算される。以下、図９〜図１２を参照して、エッジ判定閾値の計算方法を説明する。
【００７６】
まず、図９〜図１２に示すように、画素Ｐ（ｎ−８）またはその近傍の画素の輝度値に基づいて、白領域輝度値Ｌｗが決定される。以下、白領域輝度値Ｌｗの決定方法の一例を説明する。
【００７７】
まず、画素Ｐ（ｎ−９）の輝度値が、画素Ｐ（ｎ−８）の輝度値よりも小さいかどうかを判定し、小さい場合には、画素Ｐ（ｎ−８）の輝度値が白領域輝度値Ｌｗとなる。例えば、図９，図１１および図１２の例では、画素Ｐ（ｎ−９）の輝度値は２１０であり、画素Ｐ（ｎ−８）の輝度値は２２０であるので、画素Ｐ（ｎ−８）の輝度値である２２０が白領域輝度値Ｌｗとなる。
【００７８】
画素Ｐ（ｎ−９）の輝度値が、画素Ｐ（ｎ−８）の輝度値以上である場合には、続いて、画素Ｐ（ｎ−１０）の輝度値が、画素Ｐ（ｎ−９）の輝度値よりも小さいかどうかを判定し、小さい場合には、画素Ｐ（ｎ−９）の輝度値が白領域輝度値Ｌｗとなる。
【００７９】
画素Ｐ（ｎ−９）の輝度値が、画素Ｐ（ｎ−８）の輝度値以上であり、かつ、画素Ｐ（ｎ−１０）の輝度値が、画素Ｐ（ｎ−９）の輝度値以上である場合には、続いて、画素Ｐ（ｎ−１１）の輝度値が、画素Ｐ（ｎ−１０）の輝度値よりも小さいかどうかを判定し、小さい場合には、画素Ｐ（ｎ−９）の輝度値が白領域輝度値Ｌｗとなる。例えば、図１０の例では、画素Ｐ（ｎ−１１）の輝度値は２１０であり、画素Ｐ（ｎ−１０）の輝度値は２２０であるので、画素Ｐ（ｎ−１０）の輝度値である２２０が白領域輝度値Ｌｗとなる。
【００８０】
上記のような処理は、画素Ｐ（ｎ−８）から左方向に向けて、画素の輝度値を順次参照して輝度値の極大値（最初に現れる極大値）を見つける処理だと言い換えることができる。さらには、画素Ｐ（ｎ−８）とその周辺の画素の輝度値の中から極大値を検出する処理だと言い換えることもできる。このような処理を行うことによって、図１０に示すように、画素Ｐ（ｎ−８）が、マーカー５０の白領域と黒領域の境界（実写画像においては灰色で表示される）に位置しているような場合でも、マーカー５０の白領域の輝度値を、白領域輝度値Ｌｗとして正しく設定することができる。
【００８１】
なお、本実施形態では、上記のようにして白領域輝度値Ｌｗを決定しているが、これは単なる一例に過ぎず、白領域輝度値Ｌｗの決定方法はこれに限定されない。例えば、画素Ｐ（ｎ−８）の輝度値と、その周辺の画素のいずれかの輝度値とを比較し、当該周辺の画素の輝度値の方が大きい場合に、当該周辺の画素の輝度値に基づいて白領域輝度値Ｌｗを計算するようにしてもよい。また、例えば、画素Ｐ（ｎ−８）から左方向に向けて、画素の輝度値を順次参照して輝度値の極大値（最初に現れる極大値）を見つける処理の途中で、参照画素の輝度値が所定値（例えば２５０）を超えた場合に、輝度値の極大値を見つける処理を中断して、当該参照画素の輝度値に基づいて白領域輝度値Ｌｗを計算するようにしてもよい。
【００８２】
次に、図９〜図１２に示すように、画素Ｐ（ｎ）またはその近傍の画素の輝度値に基づいて、黒領域輝度値Ｌｂが決定される。以下、黒領域輝度値Ｌｂの決定方法の一例を説明する。
【００８３】
まず、画素Ｐ（ｎ＋２）の輝度値が、画素Ｐ（ｎ）の輝度値以下かどうかを判定し、画素Ｐ（ｎ）の輝度値以下である場合には、画素Ｐ（ｎ）の輝度値が黒領域輝度値Ｌｂとなる。例えば、図９および図１０の例では、画素Ｐ（ｎ＋２）の輝度値は１００であり、画素Ｐ（ｎ）の輝度値は１００であるので、画素Ｐ（ｎ）の輝度値である１００が黒領域輝度値Ｌｂとなる。
【００８４】
画素Ｐ（ｎ＋２）の輝度値が、画素Ｐ（ｎ）の輝度値よりも大きい場合には、続いて、白領域輝度値Ｌｗから画素Ｐ（ｎ＋２）の輝度値を引いた結果の値（すなわち、Ｌｗ−Ｌ（ｎ＋２））が上記所定値（すなわち、６０）以上であるかどうかを判定する。そして、当該結果の値が６０以上である場合には、画素Ｐ（ｎ＋２）の輝度値が黒領域輝度値Ｌｂとなり、当該結果の値が６０未満である場合には、画素Ｐ（ｎ）の輝度値が黒領域輝度値Ｌｂとなる。
【００８５】
例えば、図１１の例では、画素Ｐ（ｎ）の輝度値は２０であり、画素Ｐ（ｎ＋２）の輝度値は１００であり、白領域輝度値Ｌｗは２２０である。そして、Ｌｗ−Ｌ（ｎ＋２）＝１２０であるので、画素Ｐ（ｎ＋２）の輝度値である１００が黒領域輝度値Ｌｂとなる。ところで、エッジ強調処理（輪郭強調処理、シャープネス処理）が施された実写画像では、図１１に示すように、白領域に隣接する黒領域画素の輝度値が、本来の黒領域の輝度値よりも著しく小さい値になっていることがある。そこで、本実施形態では、このような場合でも適切な黒領域輝度値Ｌｂを決定できるように、上記のような条件を満たす場合には、画素Ｐ（ｎ＋２）の輝度値を黒領域輝度値Ｌｂとしている。
【００８６】
一方、図１２の例では、画素Ｐ（ｎ）の輝度値は１００であり、画素Ｐ（ｎ＋２）の輝度値は２１０であり、白領域輝度値Ｌｗは２２０である。そして、Ｌｗ−Ｌ（ｎ＋２）＝１０であるので、画素Ｐ（ｎ）の輝度値である１００が黒領域輝度値Ｌｂとなる。
【００８７】
なお、本実施形態では、上記のようにして黒領域輝度値Ｌｂを決定しているが、これは単なる一例に過ぎず、黒領域輝度値Ｌｂの決定方法はこれに限定されない。
【００８８】
上記のようにして白領域輝度値Ｌｗおよび黒領域輝度値Ｌｂが決定されると、続いて、これらの白領域輝度値Ｌｗおよび黒領域輝度値Ｌｂに基づいて、エッジ判定閾値が計算される。本実施形態では、白領域輝度値Ｌｗと黒領域輝度値Ｌｂの平均値を、エッジ判定閾値として決定する。例えば、図９〜図１２の例では、いずれも、エッジ判定閾値は１６０となる。ただし、これは単なる一例に過ぎず、エッジ判定閾値の計算方法はこれに限定されない。
【００８９】
上記のようにしてエッジ判定閾値が決定されると、当該エッジ判定閾値を用いて、画素Ｐ（ｎ）と画素Ｐ（ｎ−８）の間のどこにエッジが存在するかを検出する。具体的には、エッジ判定閾値よりも大きい輝度値を有する画素は白領域だと判定され、エッジ判定閾値よりも小さい輝度値を有する画素は黒領域だと判定される。そして、白領域と黒領域の境界をエッジだと判定する。なお、本実施形態では、白領域に隣接する黒領域画素を、エッジ上に位置する（またはエッジに隣接する）「エッジ画素」として検出する。例えば、図９の例では、画素Ｐ（ｎ−５）がエッジ画素であると判定され、図１０の例では、画素Ｐ（ｎ−７）がエッジ画素であると判定され、図１１の例では、画素Ｐ（ｎ）がエッジ画素であると判定され、図１２の例では、画素Ｐ（ｎ−６）がエッジ画素であると判定される。なお、他の実施形態では、黒領域に隣接する白領域画素を、エッジ上に位置する「エッジ画素」として検出してもよい。
【００９０】
実写画像の各画素には、当該画素がエッジ画素であるか否かを示すフラグ（エッジフラグ）が対応付けられており、エッジ画素であると判定された画素については、エッジフラグがオンになる。
【００９１】
上記のようにして検出されたエッジ画素のことを、以下の説明では「起点エッジ画素」と称する。起点エッジ画素は、マーカー５０に描かれている図柄の輪郭（図５に示した白領域と黒領域の境界線）の一部であると推測される。もし起点エッジ画素がマーカー５０に描かれている図柄の輪郭の一部であった場合には、この起点エッジ画素を起点として隣接するエッジ画素を順次辿っていくことによって、マーカー５０に描かれている図柄（図５に示した白領域と黒領域の境界線）の輪郭を検出することができる。
【００９２】
以下、起点エッジ画素を起点として隣接するエッジ画素を順次辿っていく処理（エッジ辿り処理）について説明する。
【００９３】
まず、図１３に示すように、起点エッジ画素を基準として、左下隣接画素→下隣接画素→右下隣接画素→右隣接画素→右上隣接画素→上隣接画素→左上隣接画素という順番で（すなわち、起点エッジ画素を中心として左隣接画素から反時計回りに）黒領域画素を探索し、最初に検出された黒領域画素を、起点エッジ画素に続く新たなエッジ画素として検出する。各隣接画素が黒領域画素であるか否かの判定は、起点エッジ画素を検出したときに利用されたエッジ判定閾値に基づいて行われ、より具体的には、隣接画素の輝度値がエッジ判定閾値よりも小さい場合に、当該隣接画素は黒領域画素だと判定される。
【００９４】
例えば、図１４の例では、左下隣接画素が新たなエッジ画素として検出され、図１５の例では、右隣接画素が新たなエッジ画素として検出される。
【００９５】
エッジ辿り処理において起点エッジ画素を起点として順次検出されるエッジ画素は、一連のエッジ画素として、それらの座標値がメインメモリ３２に順次記憶される。なお、以下の説明では、エッジ辿り処理において最後に検出されたエッジ画素のことを「先頭エッジ画素」と称し、先頭エッジ画素の直前に検出されたエッジ画素のことを「２番目エッジ画素」と称す。
【００９６】
先頭エッジ画素に続く新たなエッジ画素は、先頭エッジ画素を中心として、当該先頭エッジ画素から見て２番目エッジ画素の方向から反時計回りに１３５度ずれた方向にある隣接画素を始点として（他の実施形態では、反時計回りに４５度ずれた方向にある隣接画素、または、反時計回りに９０度ずれた方向にある隣接画素を始点としてもよい）、反時計回りに黒領域画素を探索することによって行われる。そして、当該探索において最初に検出された黒領域画素が、新たなエッジ画素（すなわち、新たな先頭エッジ画素）として検出される。
【００９７】
例えば、図１６に示すように、２番目エッジ画素が先頭エッジ画素の右上隣接画素である場合には、先頭エッジ画素を中心として左隣接画素から反時計回りに黒領域画素が探索される。よって、図１７の例では、先頭エッジ画素の下隣接画素が、新たなエッジ画素として検出される。
【００９８】
また例えば、図１８に示すように、２番目エッジ画素が先頭エッジ画素の左隣接画素である場合には、先頭エッジ画素を中心として右下隣接画素から反時計回りに黒領域画素が探索される。よって、図１９の例では、先頭エッジ画素の右隣接画素が、新たなエッジ画素として検出される。
【００９９】
上記のような処理が繰り返されることによって、新たなエッジ画素が順次検出され、最終的に、先頭エッジ画素が起点エッジ画素に到達することによって、黒領域の輪郭の検出が完了する（すなわち、黒領域の輪郭を示す一連のエッジ画素群に関するデータがメインメモリ３２に格納される）ことになる。
【０１００】
なお、本実施形態では、エッジ辿り処理において新たなエッジ画素が検出される度に、当該新たなエッジ画素が、すでに検出されている一連のエッジ画素群に含まれているか否かを前述のエッジフラグに基づいて判断する。そして、新たなエッジ画素が、すでに検出されている一連のエッジ画素群に含まれていると判定されることが３回連続した場合には、エッジ辿り処理を中断するようにしている。
【０１０１】
例えば、図２０に示すように、新たなエッジ画素が、すでに検出されている一連のエッジ画素群に含まれていると判定されることが２回だけ連続する場合には、エッジ辿り処理が中断されることはない。
【０１０２】
しかしながら、図２１に示すように、新たなエッジ画素が、すでに検出されている一連のエッジ画素群に含まれていると判定されることが３回連続した場合には、エッジ辿り処理が中断される。これは、図２１に示すような黒領域は、マーカー５０に描かれている図柄の輪郭ではない（すなわち、マーカー５０以外の物体の輪郭である）可能性が高いからである。また、もし仮にマーカー５０に描かれている図柄の輪郭であったとしても、後述するパターンマッチング処理等が正常に行えない可能性が高いからである。これにより、無駄な処理を回避することができる。なお、３回という回数は単なる一例に過ぎず、他の回数であってもよい。
【０１０３】
なお、上記の説明では、起点エッジ画素を始点として、黒領域の輪郭を反時計回りに辿っていく例を説明したが、他の実施形態では、起点エッジ画素を始点として、黒領域の輪郭を時計回りに辿っていくようにしても構わない。
【０１０４】
上記のように、輪郭抽出処理では、白領域輝度値Ｌｗと黒領域輝度値Ｌｂが決定され、これらの白領域輝度値Ｌｗおよび黒領域輝度値Ｌｂに基づいて、エッジ判定閾値が計算される。よって、実写画像の明るさが全体的または部分的に変化して、それに応じて実写画像におけるマーカー５０の白領域および黒領域の輝度が変化したとしても、適切なエッジ判定閾値を用いて輪郭抽出処理を行うことができる。これにより、マーカー５０の認識精度が向上する。
【０１０５】
なお、上記輪郭抽出処理では、画素の輝度値に基づいて輪郭を抽出しているが、輝度値に限らず、他の任意の画素値（典型的には色値）に基づいて輪郭を検出してもよい。
【０１０６】
また、上記輪郭抽出処理では、まず、水平方向に離れた２つの画素（画素Ｐ（ｎ）と画素Ｐ（ｎ−８））の間にエッジが存在するかどうかを判定しているが、２つの画素の選び方はこれに限らない。例えば、垂直方向に離れた２つの画素の間にエッジが存在するかどうかを判定するようにしてもよいし、斜め方向に離れた２つの画素の間にエッジが存在するかどうかを判定するようにしてもよい。
【０１０７】
また、上記輪郭抽出処理では、Ｌ（ｎ−８）−Ｌ（ｎ）が所定値以上である場合に、画素Ｐ（ｎ）と画素Ｐ（ｎ−８）の間にエッジが存在すると判定している（この場合、左側が白領域であり、右側が黒領域であるようなエッジを見つけることができる）が、他の実施形態では、Ｌ（ｎ−８）−Ｌ（ｎ）の絶対値が所定値以上である場合に、画素Ｐ（ｎ）と画素Ｐ（ｎ−８）の間にエッジが存在すると判定してもよい。この場合、左側が白領域であり、右側が黒領域であるようなエッジだけでなく、左側が黒領域であり、右側が白領域であるようなエッジも見つけることができる。
【０１０８】
また、上記輪郭抽出処理では、起点エッジ画素を検出したときに利用されたエッジ判定閾値を上記エッジ辿り処理において用いているが、他の実施形態では、当該エッジ判定閾値を、実写画像における任意の領域（例えば、実写画像の全体）からエッジ画素を検出するために用いてもよい。例えば、起点エッジ画素を含むラインの１つ下のラインのエッジ画素や、起点エッジ画素を含む輪郭とは別の輪郭のエッジ画素などを、上記エッジ判定閾値に基づいて検出するようにしてもよい。
【０１０９】
（頂点検出処理）
次に、頂点検出処理について説明する。頂点検出処理とは、実写画像におけるマーカー５０の黒領域の４頂点を検出する処理であって、以下の処理から成る。
・直線算出処理
・直線統合処理
・直線選出処理
・頂点算出処理
【０１１０】
直線算出処理では、前述の輪郭検出処理においてメインメモリ３２に格納された、黒領域の輪郭を示す一連のエッジ画素群に関するデータに基づいて、複数の直線が算出される。以下、図２２〜図３６を参照して、直線算出処理について詳細に説明する。
【０１１１】
メインメモリ３２に格納された一連のエッジ画素群に関するデータにおいては、複数のエッジ画素が順序付けられている。以下の説明では、便宜上、黒領域の輪郭を反時計回りに辿っていく方向（すなわち、黒領域から白領域の方向を見たときの左方向）を前方と称し、黒領域の輪郭を時計回りに辿っていく方向（すなわち、黒領域から白領域の方向を見たときの右方向）を後方と称する。
【０１１２】
まず、図２２に示すように、起点エッジ画素Ｐｅ（０）から、当該起点エッジ画素Ｐｅ（０）より４つ前方のエッジ画素Ｐｅ（４）までの５つのエッジ画素Ｐｅ（０）〜Ｐｅ（４）に基づいて最初の直線Ｌｉ（０−４）が生成され、当該直線Ｌｉ（０−４）を示すデータがメインメモリ３２に格納される。なお、複数のエッジ画素に基づいて直線を生成する方法としては種々の方法を採用し得るが、本実施形態では最小自乗法により生成するものとする。
【０１１３】
次に、図２３に示すように、直線Ｌｉ（０−４）のすぐ前方の５つのエッジ画素Ｐｅ（５）〜Ｐｅ（９）に基づいて、例えば最小自乗法により、仮直線が生成され、直線Ｌｉ（０−４）と仮直線とが同一直線上にあるかどうかを判定する。当該判定は、例えば、直線Ｌｉ（０−４）に対する仮直線の角度に基づいて行われる。本実施形態では、図２４に示すように、直線Ｌｉ（０−４）に対する仮直線の角度（反時計回り方向を正とする）が−３０°から＋３０°までの範囲である場合には、直線Ｌｉ（０−４）と仮直線が同一直線上にあると判定される。なお、−３０°および＋３０°という値は単なる一例に過ぎず、これに限定されない。
【０１１４】
直線Ｌｉ（０−４）と仮直線が同一直線上にあると判定されると、直線Ｌｉ（０−４）に対応するエッジ画素Ｐｅ（０）〜Ｐｅ（４）と、仮直線に対応するエッジ画素Ｐｅ（５）〜Ｐｅ（９）の１０個のエッジ画素に基づいて、例えば最小自乗法により、図２５に示す直線Ｌｉ（０−９）が計算され、メインメモリ３２に格納されている直線Ｌｉ（０−４）を示すデータが、直線Ｌｉ（０−９）を示すデータへと更新される。このような処理を繰り返すことによって、直線が順次更新（延長）されていく。なお、本実施形態では、５つのエッジ画素毎に仮直線を生成しているが、これは単なる一例に過ぎず、これに限定されない。
【０１１５】
図２６の例では、直線Ｌｉ（０−１４）に対する仮直線（すなわち、直線Ｌｉ（０−１４）の前方の５つのエッジ画素Ｐｅ（１５）〜Ｐｅ（１９）に基づいて生成された仮直線）の角度が＋３０°を超えているので、直線Ｌｉ（０−１４）と仮直線の交点付近において黒領域が凸角となっている（すなわち、直線Ｌｉ（０−１４）と仮直線の交点付近において黒領域が外側に尖っている）と判定される（図２４参照）。この場合、仮直線は、直線Ｌｉ（０−１４）とは異なる新たな直線であると判定され、当該仮直線に対応する新たな直線Ｌｉ（１５−１９）が生成される（図２７参照）。この場合、直線Ｌｉ（０−１４）を示すデータはメインメモリ３２にそのまま保持され、直線Ｌｉ（１５−１９）を示すデータがメインメモリ３２に新たに格納される。
【０１１６】
続いて、図２８に示すように、直線Ｌｉ（１５−１９）と、その前方の５つのエッジ画素Ｐｅ（２０）〜Ｐｅ（２４）に基づいて生成された仮直線とが同一直線上にあるかどうかを判定する。そして、同一直線上にあると判定されると、図２９に示すように、エッジ画素Ｐｅ（１５）〜Ｐｅ（２４）に基づいて、直線Ｌｉ（１５−１９）が直線Ｌｉ（１５−２４）へと更新される。
【０１１７】
以上のような処理を繰り返すことによって、最終的には、図３０に示すように複数の直線（図３０の例では直線Ａ〜直線Ｆの６本の直線）が算出される。なお、この中には、直線Ｄのように短い直線も含まれ得る。
【０１１８】
このように、直線算出処理では、一連のエッジ画素のうち、同一直線上にある一部のエッジ画素から各直線が算出される。
【０１１９】
なお、上記直線算出処理では、起点エッジ画素Ｐｅ（０）を起点として直線を生成および更新しているが、これに限らず、起点エッジ画素Ｐｅ（０）以外の任意のエッジ画素を起点として直線を生成および更新してもよい。
【０１２０】
また、上記直線算出処理では、反時計回りに直線を生成および更新しているが、これに限らず、時計回りに直線を生成および更新してもよい。
【０１２１】
また、上記直線算出処理では、すでに生成された直線と、それに隣接する仮直線とが同一直線上にあるかどうかを判定し、同一直線上であると判定された場合に、これらの直線および仮直線に対応する複数のエッジ画素に基づいて直線を算出していれるが、他の実施形態では、まず多数の仮直線を生成した後に、これらの多数の仮直線のうち、同一直線上にある複数の仮直線に対応する複数のエッジ画素に基づいて直線を算出してもよい。
【０１２２】
ところで、図３１に示すように、実写画像においてマーカー５０の黒領域の一辺に部分的に重なるように黒い物体が表示されている場合には、直線算出処理において、直線Ａおよび直線Ｂが生成された後、図３２に示すように、直線Ｂと、当該直線Ｂの前方の仮直線とが同一直線上かどうかが判定される。直線Ｂに対する仮直線の角度は−３０°よりも小さいので、直線Ｂと仮直線の交点付近において黒領域が凹角となっている（すなわち、直線Ｂと仮直線の交点付近において黒領域が内側に凹んでいる）と判定される（図２４参照）。マーカー５０の黒領域の輪郭には凹角は存在しない（すなわち凸角のみ存在する）ため、このような凹角が検出された場合には、仮直線は、マーカー以外の物体の輪郭の一部を示していると予想される。
【０１２３】
上記のように、直線算出処理において凹角が検出された場合には、直線を更新（延長）または新たに生成する処理を実行できないと判定される。そして、黒領域に対して反時計回りに直線を更新（延長）および新たに生成する処理を中断し、次に、それまでの方向とは逆方向（すなわち時計回り）に直線を更新（延長）および新たに生成する処理を開始する。例えば、図３１の例では、起点エッジ画素から時計回りに、直線Ａを後方に向かって延長する処理、および新たな直線を生成する処理を実行する。その結果、図３３に示すように、図３１の直線Ａは直線Ａ’へと更新され、さらに、直線Ｃ〜直線Ｅが順次生成される。なお、直線Ｅの後端では凹角が検出されるため、その時点で直線算出処理は終了する。結果として、直線Ａ’，直線Ｂ〜直線Ｅの５本の直線が算出される。
【０１２４】
さらに他の例として、図３４に示すように、実写画像においてマーカー５０の黒領域の一辺に部分的に重なるように白い物体が表示されている場合には、直線算出処理において、直線Ａ〜直線Ｃが生成された後、凹角が検出される。そして、起点エッジ画素から時計回りに、直線Ａを後方に向かって延長する処理、および新たな直線を生成する処理が開始され、直線Ａは直線Ａ’へと更新され、さらに、直線Ｄ〜直線Ｇが順次生成される。結果として、直線Ａ’，直線Ｂ〜直線Ｇの７本の直線が算出される。
【０１２５】
さらに他の例として、図３５に示すように、実写画像においてマーカー５０の黒領域の一頂点に重なるように黒い物体が表示されている場合には、結果的に、直線Ａ’，直線Ｂ〜直線Ｄの４本の直線が算出される。
【０１２６】
さらに他の例として、図３６に示すように、実写画像においてマーカー５０の黒領域の一頂点に重なるように白い物体が表示されている場合には、結果的に、直線Ａ’，直線Ｂ〜直線Ｆの６本の直線が算出される。
【０１２７】
直線算出処理が完了すると、続いて直線統合処理が行われる。直線統合処理とは、直線算出処理において算出された複数の直線のうち、同一直線上にある同一方向の複数の直線を１つの直線に統合する処理である。
【０１２８】
例えば図３０の例では、直線Ａと直線Ｆが、同一直線上にあり、かつ同一方向を向いているので、図３７に示すように、これらの２つの直線が１つの直線Ａ＋Ｆへと統合される。
【０１２９】
また、例えば図３３の例では、直線Ｂと直線Ｅが、同一直線上にあり、かつ同一方向を向いているので、図３８に示すように、これらの２つの直線が１つの直線Ｂ＋Ｅへと統合される。
【０１３０】
また、例えば図３４の例では、直線Ｂと直線Ｆが、同一直線上にあり、かつ同一方向を向いているので、図３９に示すように、これらの２つの直線が１つの直線Ｂ＋Ｆへと統合される。
【０１３１】
直線統合処理が完了すると、続いて直線選出処理が行われる。直線選出処理とは、直線算出処理および直線統合処理を経て最終的に残った複数の直線から、マーカー５０の黒領域の４辺に対応する直線を選択する処理である。
【０１３２】
本実施形態では、最終的に残った複数の直線のうち、長さがより長い４本の直線（すなわち、最も長い直線と２番目に長い直線と３番目に長い直線と４番目に長い直線）を、マーカー５０の黒領域の４辺に対応する直線として選出する。以下の説明では、選出された４つの直線のそれぞれを、これらの中の任意の直線から反時計回りに、第１直線，第２直線，第３直線および第４直線と称す。
【０１３３】
例えば図３７の例では、直線Ａ＋Ｆ，直線Ｂ〜直線Ｅの５本の直線から、直線Ａ＋Ｆ，直線Ｂ，直線Ｃおよび直線Ｅが、直線選出処理において選出される（図４０参照）。
【０１３４】
また、例えば図３９の例では、直線Ａ’，直線Ｂ＋Ｆ，直線Ｃ〜直線Ｅ，直線Ｇの６本の直線から、直線Ａ’，直線Ｂ＋Ｆ，直線Ｅおよび直線Ｄが、直線選出処理において選出される。
【０１３５】
また、例えば図３６の例では、直線Ａ’，直線Ｂ〜直線Ｆの６本の直線から、直線Ａ’，直線Ｂ，直線Ｅおよび直線Ｄが、直線選出処理において選出される（図４１参照）。
【０１３６】
なお、図３５および図３８の例では４本の直線しか存在しないので、直線選出処理ではそれらの４本の直線が選出される。
【０１３７】
なお、上記直線選出処理では４本の直線を選出しているが、これは、マーカー５０の黒領域が四角形だからである。したがって、もしもマーカー５０の黒領域が例えば六角形である場合には、直線選出処理では６本の直線を選出することになる。
【０１３８】
直線選出処理が完了すると、続いて頂点算出処理が行われる。頂点算出処理では、直線選出処理において選出された４つの直線（第１直線〜第４直線）に基づいて、マーカー５０の黒領域の４頂点の位置が算出される。
【０１３９】
具体的には、第１直線と第２直線の交点の位置が、マーカー５０の黒領域の第１頂点の位置として算出され、第２直線と第３直線の交点の位置が、マーカー５０の黒領域の第２頂点の位置として算出され、第３直線と第４直線の交点の位置が、マーカー５０の黒領域の第３頂点の位置として算出され、第４直線と第１直線の交点の位置が、マーカー５０の黒領域の第４頂点の位置として算出される。
【０１４０】
例えば図４０の例では、図４２のように第１頂点〜第４頂点の位置が算出される。また例えば図４１の例では、図４３のように第１頂点〜第４頂点の位置が算出される。
【０１４１】
以上のようにして、直線算出処理，直線統合処理，直線選出処理および頂点算出処理を経て、実写画像におけるマーカー５０の黒領域の４頂点が検出される。
【０１４２】
このようにして検出された頂点の位置は、同一直線上にある複数のエッジ画素に基づいて生成された直線の交点として計算されるので、非常に高精度である。例えば、一連のエッジ画素のうちのいずれかのエッジ画素を頂点として決定する場合には、環境光等の影響によって頂点の位置がぶれてしまうが、上記のようにして検出された頂点の位置は、多数のエッジ画素に基づいて計算されているため、そのようなブレは生じない。
【０１４３】
（粗判別処理）
次に、粗判別処理について説明する。粗判別処理とは、後述する図柄判別処理に先立って、頂点検出処理によって検出された４頂点がマーカー５０の４頂点であるか否かを、それらの４頂点の位置関係に基づいて判別する処理である。
【０１４４】
本実施形態では、以下に示す除外条件Ａ〜Ｄを満たした場合に、頂点検出処理によって検出された４頂点がマーカー５０の４頂点ではないと判定する。
【０１４５】
（除外条件Ａ）いずれかの隣り合う２頂点の距離が近すぎる場合
具体的には、第１頂点と第２頂点の間の距離が所定の閾値（第１の最小許容距離）よりも小さい場合、または、第２頂点と第３頂点の間の距離が第１の最小許容距離よりも小さい場合、または、第３頂点と第４頂点の間の距離が第１の最小許容距離よりも小さい場合、または、第４頂点と第１頂点の間の距離が第１の最小許容距離よりも小さい場合である。例えば、図４４の例では、第１頂点と第２頂点の距離が近すぎるため、第１頂点〜第４頂点はマーカー５０の４頂点ではないと判定される。
【０１４６】
（除外条件Ｂ）いずれかの頂点と当該頂点に隣接しない２辺のいずれかとの距離が近すぎる場合
具体的には、第１頂点と第３直線との距離が所定の閾値（第２の最小許容距離）よりも小さい場合、または、第１頂点と第４直線との距離が第２の最小許容距離よりも小さい場合、または、第２頂点と第４直線との距離が第２の最小許容距離よりも小さい場合、または、第２頂点と第１直線との距離が第２の最小許容距離よりも小さい場合、または、第３頂点と第１直線との距離が第２の最小許容距離よりも小さい場合、または、第３頂点と第２直線との距離が第２の最小許容距離よりも小さい場合、または、第４頂点と第２直線との距離が第２の最小許容距離よりも小さい場合、または、第４頂点と第３直線との距離が第２の最小許容距離よりも小さい場合である。例えば、図４５の例では、第１頂点と第３直線の距離が近すぎるため、第１頂点〜第４頂点はマーカー５０の４頂点ではないと判定される。
【０１４７】
（除外条件Ｃ）いずれかの対向する２辺の直線（ベクトル）が概ね同一方向の場合
具体的には、第１直線（第４頂点から第１頂点を結ぶベクトル）と第３直線（第２頂点から第３頂点を結ぶベクトル）が概ね同一方向である場合、または、第２直線（第１頂点から第２頂点を結ぶベクトル）と第４直線（第４頂点から第１頂点を結ぶベクトル）が概ね同一方向である場合である。例えば、図４４の例では、第１直線（第４頂点から第１頂点を結ぶベクトル）と第３直線（第２頂点から第３頂点を結ぶベクトル）が概ね同一方向であるため、第１頂点〜第４頂点はマーカー５０の４頂点ではないと判定される。なお、２つのベクトルが概ね同一方向であるかどうかは、例えば、図２４に示すように、２つのベクトルのなす角度に基づいて判定することができる。
【０１４８】
（除外条件Ｄ）凹角が含まれている場合
具体的には、第１頂点〜第４頂点のいずれかの頂点が凹角である場合である。例えば、図４７の例では、第２頂点が凹角であるため、第１頂点〜第４頂点はマーカー５０の４頂点ではないと判定される。
【０１４９】
なお、本実施形態では上記除外条件Ａ〜除外条件Ｄに基づいて粗判別処理を行っているが、これは単なる一例に過ぎず、これらの除外条件のうちの１つまたは複数を用いてもよいし、これらの除外条件とは異なる除外条件を用いてもよい。
【０１５０】
上記除外条件Ａ〜除外条件Ｄのいずれかを満たしている場合、頂点検出処理によって検出された４頂点は、マーカー５０の４頂点ではないと判定され、後述する図柄判別処理の処理対象から除外される。これにより、図柄判別処理に要する処理負担が軽減される。
【０１５１】
（図柄判別処理）
次に、図柄判別処理について説明する。図柄判別処理は、頂点検出処理で検出された４頂点で囲まれる領域に表示されている図柄が、マーカー５０に描かれている図柄と同一か否かを判別するための処理である。
【０１５２】
図柄判別処理では、マーカー５０に描かれている図柄に基づいて予め生成されたパターン定義データを用いて、頂点検出処理で検出された４頂点で囲まれる領域に表示されている図柄が、マーカー５０に描かれている図柄と同一か否かを判別する。
【０１５３】
パターン定義データは、マーカー５０に描かれている図柄を表すデータであって、本実施形態では、図４８に示すように、マーカー５０の各辺を１６等分することによって生成される格子の交点をサンプル点（Ｓ（１，１）〜Ｓ（１５，１５））とし、マーカー５０上の各サンプル点の画素値を定義したデータである（図４９参照）。なお、本実施形態では、マーカー５０の各辺を１６分割しているが、これは単なる一例に過ぎず、１６分割に限定されない。また、本実施形態では、マーカー５０の各辺を等分することによって生成される格子の交点をサンプル点としているが、他の実施形態では、格子によって区切られた各四角形の中心をサンプル点としてもよい。
【０１５４】
本実施形態では、マーカー５０の左上頂点に最も近い交点をサンプル点Ｓ（１，１）とし、マーカー５０の左下頂点に最も近い交点をサンプル点Ｓ（１，１５）とし、マーカー５０の右上頂点に最も近い交点をサンプル点Ｓ（１５，１）とし、マーカー５０の右下頂点に最も近い交点をサンプル点Ｓ（１５，１５）としている。
【０１５５】
なお、図４９の例では、画素値の欄に「黒」または「白」と定義されているが、他の実施形態では、色値（ＲＧＢ値）や輝度値などで定義されていてもよい。
【０１５６】
図５０は、マーカー５０を含む実写画像を示している。当該実写画像に対して、前述した輪郭検出処理および頂点検出処理が行われることによって、第１頂点〜第４頂点の位置が算出される。
【０１５７】
図５１は、実写画像において、第１頂点〜第４頂点によって囲まれる四角形の各辺を１６等分することによって、これらの頂点によって囲まれる領域内のサンプル点の位置を決定する例を示している。
【０１５８】
図柄判別処理では、実写画像におけるサンプル点の画素値と、パターン定義データとを照合（例えば、相関係数を計算するなど）することによって、実写画像における第１頂点〜第４頂点によって囲まれる領域に表示されている図柄が、マーカー５０に描かれている図柄と同一か否かを判別する。しかしながら、図５１に示すような方法で実写画像におけるサンプル点を決定した場合には、正確な判別ができないという問題がある。例えば、パターン定義データにおけるサンプル点Ｓ（８，２）の画素値は「黒」であるのに対して、図５１の実写画像におけるサンプル点Ｓ（８，２）の画素値は「白」となっている。また、パターン定義データにおけるサンプル点Ｓ（８，１３）の画素値は「白」であるのに対して、図５１の実写画像におけるサンプル点Ｓ（８，１３）の画素値は「黒」となっている。その結果、図５０の実写画像にはマーカー５０が含まれていない、と誤って判別されてしまう可能性がある。
【０１５９】
上記のような問題を解消するためには、実写画像におけるサンプル点の位置の決定方法を工夫する必要がある。以下では、実写画像におけるサンプル点の位置の決定方法の他の例（第１の決定方法および第２の決定方法）を説明する。
【０１６０】
まず、図５２〜図５８を参照して、実写画像におけるサンプル点の位置を決定するための第１の決定方法を説明する。
【０１６１】
第１の決定方法では、第１頂点〜第４頂点によって囲まれる四角形において、対向する２辺が平行（概ね平行である場合も含む）であれば、それらの２辺については１６等分し、対向する２辺が平行でなければ、それらの２辺については不均等に１６分割することによって、こうして生成される格子の交点をサンプル点とする。
【０１６２】
例えば、図５２の例では、第１頂点と第４頂点を結ぶ辺と、第２頂点と第３頂点を結ぶ辺とは平行であるので、第１頂点と第４頂点を結ぶ辺と、第２頂点と第３頂点を結ぶ辺は、それぞれ１６等分される。一方、第１頂点と第２頂点を結ぶ辺と、第４頂点と第３頂点を結ぶ辺とは平行でないので、第１頂点と第２頂点を結ぶ辺と、第４頂点と第３頂点を結ぶ辺は、１６等分ではなく、不均等に１６分割される。すなわち、図５２に示すように、第１頂点と第２頂点を結ぶ辺を１６分割する各点（以下、分割点と称す）は、当該辺を１６等分した場合と比較して、第１頂点側にシフトしている。また、第４頂点と第３頂点を結ぶ辺を１６分割する各分割点は、当該辺を１６等分した場合と比較して、第４頂点側にシフトしている。
【０１６３】
以下、図５２における第１頂点と第２頂点を結ぶ辺上、および第４頂点と第３頂点を結ぶ辺上の分割点の決定方法の一例を、図５３〜図５５を参照して説明する。
【０１６４】
なお、以下の説明では、第１頂点と第２頂点を結ぶ辺を１６分割する１５個の分割点を、第１頂点に近い方から順番に、第１分割点Ｍ１，第２分割点Ｍ２，第３分割点Ｍ３，・・・，第１５分割点Ｍ１５と称する。同様に、第４頂点と第３頂点を結ぶ辺を１６分割する１５個の分割点を、第４頂点に近い方から順番に、第１分割点Ｎ１，第２分割点Ｎ２，第３分割点Ｎ３，・・・，第１５分割点Ｎ１５と称する。
【０１６５】
まず、図５３に示すように、第８分割点Ｍ８および第８分割点Ｎ８が決定される。具体的には、まず、第１頂点と第４頂点の間の距離と、第２頂点と第３頂点の間の距離が計算される。そして、第１頂点と第４頂点の間の距離をａとし、第２頂点と第３頂点の間の距離をｂとしたときに、第１頂点と第２頂点の間をａ：ｂの比率で分割する点と、第４頂点と第３頂点の間をａ：ｂの比率で分割する点が計算される。そして、計算された前者の点が第８分割点Ｍ８として決定され、計算された後者の点が第８分割点Ｎ８として決定される。この結果、第８分割点Ｍ８は、第１頂点と第２頂点の中点よりも第１頂点に近い位置に決定され、第８分割点Ｎ８は、第４頂点と第３頂点の中点よりも第４頂点に近い位置に決定される。
【０１６６】
次に、図５４に示すように、第４分割点Ｍ４および第４分割点Ｎ４が決定される。具体的には、まず、第８分割点Ｍ８と第８分割点Ｎ８の間の距離が計算される。そして、当該距離をｃとしたときに、第１頂点と第８分割点Ｍ８の間をａ：ｃの比率で分割する点と、第４頂点と第８分割点Ｎ８の間をａ：ｃの比率で分割する点が計算される。そして、計算された前者の点が第４分割点Ｍ４として決定され、計算された後者の点が第４分割点Ｎ４として決定される。この結果、第４分割点Ｍ４は、第１頂点と第８分割点Ｍ８の中点よりも第１頂点に近い位置に決定され、第４分割点Ｎ４は、第４頂点と第８分割点Ｎ８の中点よりも第４頂点に近い位置に決定される。
【０１６７】
次に、図５５に示すように、第２分割点Ｍ２および第２分割点Ｎ２が決定される。具体的には、まず、第４分割点Ｍ４と第４分割点Ｎ４の間の距離が計算される。そして、当該距離をｄとしたときに、第１頂点と第４分割点Ｍ４の間をａ：ｄの比率で分割する点と、第４頂点と第４分割点Ｎ４の間をａ：ｄの比率で分割する点が計算される。そして、計算された前者の点が第２分割点Ｍ２として決定され、計算された後者の点が第２分割点Ｎ２として決定される。この結果、第２分割点Ｍ２は、第１頂点と第４分割点Ｍ４の中点よりも第１頂点に近い位置に決定され、第２分割点Ｎ２は、第４頂点と第４分割点Ｎ４の中点よりも第４頂点に近い位置に決定される。
【０１６８】
以下、同様にして、他の分割点（第１分割点Ｍ１，第３分割点Ｍ３，第５分割点Ｍ５〜第７分割点Ｍ７，第９分割点Ｍ９〜第１５分割点Ｍ１５，第１分割点Ｎ１，第３分割点Ｎ３，第５分割点Ｎ５〜第７分割点Ｎ７，第９分割点Ｎ９〜第１５分割点Ｎ１５）が決定され、最終的に、図５２に示すようなサンプル点が決定される。
【０１６９】
なお、第１の決定方法では、第１頂点〜第４頂点によって囲まれる四角形において、対向する２辺が平行であれば、それらの２辺については１６等分するようにしている。以下、図５６〜図５８を参照して、その理由を説明する。
【０１７０】
実写画像において図５６に示すような第１頂点〜第４頂点が検出された場合、第１頂点と第４頂点を結ぶ辺と、第２頂点と第３頂点を結ぶ辺とは平行になっている。このような場合、もし仮に、図５３〜図５５に示した方法を用いてそれらの辺を１６分割したとすると、図５７に示すように、第１頂点と第４頂点を結ぶ辺を分割する分割点は、全体的に第１頂点寄りに位置し、第２頂点と第３頂点を結ぶ辺を分割する分割点は、全体的に第２頂点寄りに位置することになる。
【０１７１】
しかしながら、実写画像においてマーカー５０が図５６に示すような形状で表示されている場合（すなわち、第１頂点と第４頂点を結ぶ辺と、第２頂点と第３頂点を結ぶ辺とが平行である場合）には、カメラから第１頂点までの距離と、カメラから第４頂点までの距離とは、ほぼ同じである。同様に、カメラから第２頂点までの距離と、カメラから第３頂点までの距離とは、ほぼ同じである。したがって、このような場合には、図５８に示すように、第１頂点と第４頂点を結ぶ辺と、第２頂点と第３頂点を結ぶ辺を１６等分する方が、サンプル点の位置をより適切な位置に決定することができる。
【０１７２】
次に、図５９および図６０を参照して、実写画像におけるサンプル点の位置を決定するための第２の決定方法を説明する。
【０１７３】
第２の決定方法では、図５９に示すように、まず、頂点検出処理で検出された４頂点によって囲まれる四角形の対向する２辺を延長して、それら２辺の交点（第１消失点および第２消失点）が計算される。以下の説明では、頂点検出処理で検出された４頂点のうち、第１消失点と第２消失点を結ぶ直線（第１直線）に最も近い頂点を頂点Ａと称し、当該頂点から反時計回りに頂点Ｂ，頂点Ｃ，頂点Ｄと称する。
【０１７４】
次に、頂点Ｃを通り、かつ第１消失点と第２消失点を結ぶ直線（第１直線）に平行な直線（第２直線）を計算する。そして、頂点Ａおよび頂点Ｂを通る直線と、第２直線との交点（第１点）と、頂点Ａおよび頂点Ｄを通る直線と、第２直線との交点（第２点）とを計算する。
【０１７５】
次に、図６０に示すように、第１点から頂点Ｃまでを１６等分する１５個の分割点を計算し、これらの分割点と第２消失点とを結ぶ。同様に、頂点Ｃから第２点までを１６等分する１５個の分割点を計算し、これらの分割点と第１消失点とを結ぶ。そして、このようにして生成される交点が、実写画像におけるサンプル点として決定される。
【０１７６】
本願の発明者による検証結果によると、第２の決定方法を採用することで、第１の決定方法よりも適切に実写画像におけるサンプル点を決定できることが確認された。しかしながら、第１の決定方法であっても、図５１に示した方法と比べて大きく有利であるので、第１の決定方法を採用するか、第２の決定方法を採用するかは、要求される検出精度や、マーカー５０の図柄の複雑さ等の条件を考慮して、設計者が適宜に決定すればよい。
【０１７７】
上記の第１の決定方法や第２の決定方法のように、少なくとも１組の対向する２辺の各辺を不均等に分割して実写画像におけるサンプル点を決定することによって、図５１に示した方法と比較して、より正確にマーカー５０を判別することができる。
【０１７８】
なお、対向する２辺の各辺を不均等に分割する方法としては、上記の第１の決定方法や第２の決定方法に限らず、他の方法を採用してもよい。
【０１７９】
なお、頂点検出処理で検出された第１頂点〜第４頂点のどの頂点が、マーカー５０の左上頂点，左下頂点，右下頂点，右上頂点のどの頂点に対応しているかは、頂点検出処理の直後には分からない。したがって、第１頂点が左上頂点に対応している場合と、第１頂点が左下頂点に対応している場合と、第１頂点が右下頂点に対応している場合と、第１頂点が右上頂点に対応している場合の４つの場合が考えられるので、図柄判別処理では、これらの４つの場合について、それぞれ、パターン定義データとの照合が行われる。その結果、実写画像における左上頂点の座標と、左下頂点の座標と、右下頂点の座標と、右上頂点の座標が検出され、これらがマーカー位置情報としてメインメモリ３２に記憶される。
【０１８０】
ところで、ゲーム装置１０では、カメラからリアルタイムに順次取得される実写画像に基づいて、上記のような輪郭検出処理、頂点検出処理、粗判別処理および図柄判別処理を、所定の周期（例えば、６０分の１秒の周期）で繰り返し実行する。これにより、実写画像におけるマーカー５０の位置をリアルタイムに検出することができる。
【０１８１】
しかしながら、マーカー５０に対する光の当たり具合などの原因により、実写画像にマーカー５０が表示されているにもかかわらず、実写画像におけるマーカー５０の輪郭および頂点の検出に一時的に失敗することがあり得る。マーカー５０の輪郭および頂点の検出に一時的に失敗すると、例えば図４に示す状態において、ユーザがゲーム装置１０を移動させていないにもかかわらず仮想オブジェクト６０が一時的に消えることになり、仮想オブジェクト６０が頻繁に消えたり出現したりすると、ユーザの興味がそがれてしまうことになる。
【０１８２】
本実施形態では、上記のような好ましくない現象（意図しないマーカー位置の変動）を防止するために、現在の実写画像からマーカー５０の輪郭および頂点の検出に失敗した場合には、直前の実写画像から検出されたマーカー５０の頂点（またはサンプル点）の位置に基づいて、現在の実写画像に対して図柄判別処理を行う。なお、「現在の実写画像」とは、現在処理中の実写画像を意味するものであって、必ずしもカメラで撮像された最新の実写画像を意味するものではない。
【０１８３】
具体的に説明すると、現在の実写画像からマーカー５０の輪郭および頂点の検出に失敗した場合には、図６１に示すように、直前の実写画像から検出されたマーカー５０の４頂点（または、それらの４頂点から決定されたサンプル点）の位置を、メインメモリ３２に記憶されているマーカー位置情報から取得する。そして、図６２に示すように、直前の実写画像から検出されたマーカー５０の４頂点の位置に基づいて、現在の実写画像におけるサンプル点の位置を決定し、こうして決定したサンプル点（または、前回の図柄判別処理において決定されたサンプル点）の画素値を用いて、図柄判別処理が行われる。そして、当該図柄判別処理の結果、現在の実写画像において、直前の実写画像と同じ位置にマーカー５０が存在すると判定された場合には、直前の実写画像におけるマーカー５０の４頂点の座標を、現在の実写画像に対応するマーカー位置情報としてメインメモリ３２に記憶する。
【０１８４】
上記のような処理により、ユーザがゲーム装置１０を移動させていない場合には、実写画像におけるマーカー５０の輪郭および頂点の検出に一時的に失敗したとしても、マーカー５０の位置を検出することが可能となる。したがって、前述のように、ユーザがゲーム装置１０を移動させていないにもかかわらず仮想オブジェクト６０が頻繁に消えたり出現したりするような現象の発生を防止することができる。
【０１８５】
なお、現在の実写画像におけるマーカー５０の位置は、直前の実写画像におけるマーカー５０の位置から少しずれている可能性がある。そこで、他の実施形態では、直前の実写画像におけるマーカー５０の位置だけでなく、直前の実写画像におけるマーカー５０の位置の近傍の範囲を対象として、図柄判別処理を行うようにしてもよい。例えば、直前の実写画像から検出されたマーカー５０の４頂点の位置を少しずつずらしながら図柄判別処理を複数回実行し、それらの結果のうち、パターン定義データとの類似度が最も高い４頂点の位置を、現在の実写画像におけるマーカー５０の４頂点の位置として決定してもよい。
【０１８６】
なお、本実施形態では、現在の実写画像からマーカー５０の輪郭および頂点の検出に失敗した場合に、直前の実写画像から検出されたマーカー５０の頂点（またはサンプル点）の位置に基づいて、現在の実写画像に対して図柄判別処理を行っているが、これに限らず、現在の実写画像以前の他の任意の実写画像から検出されたマーカー５０の頂点（またはサンプル点）の位置に基づいて（すなわち、メインメモリ３２にすでに記憶されている、他の任意の実写画像に対応するマーカー位置情報に基づいて）、現在の実写画像に対して図柄判別処理を行ってもよい。
【０１８７】
なお、本実施形態では、現在の実写画像からマーカー５０の輪郭および頂点の検出に失敗した場合に、直前の実写画像から検出されたマーカー５０の頂点（またはサンプル点）の位置に基づいて、現在の実写画像に対して図柄判別処理を行っているが、このような処理は、図４８〜図６０に示したようなパターンマッチング手法を用いて図柄判別処理を行う場合に限らず、公知の他の任意のパターンマッチング手法を用いて図柄判別処理を行う場合にも効果的である。
【０１８８】
（マーカー位置補正処理）
次に、マーカー位置補正処理について説明する。マーカー位置補正処理とは、図柄判別処理において検出されたマーカー５０の位置（すなわち、マーカー５０の黒領域の４頂点の位置）を適宜に補正する処理である。
【０１８９】
マーカー位置補正処理について具体的に説明する前に、まず、マーカー位置補正処理を行わなければ、どういう不具合が発生し得るかについて説明する。
【０１９０】
前述したように、実写画像におけるマーカー５０の位置は、実写画像に対する輪郭検出処理結果に基づいて検出される。この輪郭検出処理では、エッジ判定閾値と各画素の輝度値とを比較することによってエッジ画素を検出している。ここで、エッジ判定閾値に非常に近い輝度値を有する画素があった場合、例えば、或る実写画像においては、その画素は黒領域だと判定され、次の実写画像においては、その画素が白領域だと判定されることがある。これは、カメラ（すなわちゲーム装置１０）を全く動かしていない場合にも起こり得る。環境光等の影響で、各画素の輝度値は時間的にわずかに変動し得るからである。こうして、輪郭検出処理の結果が変動すると、最終的に検出される、実写画像におけるマーカー５０の位置も変動するため、例えば、図４に示した仮想オブジェクト６０の位置や向きが、ユーザがゲーム装置１０を動かしていないにもかかわらず変動することになってしまう。すなわち、仮想空間画像がぶれているように見えてしまう。このような好ましくない現象を防ぐ（または緩和する）ために、本実施形態では、マーカー位置補正処理が行われる。
【０１９１】
マーカー位置補正処理では、まず、直前の実写画像から検出されたマーカー５０の位置と、現在の実写画像から検出されたマーカー５０の位置とに基づいて、実写画像におけるマーカー５０の移動量を計算する。図６３を参照して、実写画像におけるマーカー５０の移動量の計算方法の一例を説明する。
【０１９２】
図６３に示すように、直前の実写画像から検出されたマーカー５０の左上頂点をＶｐ１、左下頂点をＶｐ２、右下頂点をＶｐ３、右上頂点をＶｐ４とし、現在の実写画像から検出されたマーカー５０の左上頂点をＶｃ１、左下頂点をＶｃ２、右下頂点をＶｃ３、右上頂点をＶｃ４とする。そして、Ｖｐ１とＶｃ１の距離をａとし、Ｖｐ２とＶｃ２の距離をｂとし、Ｖｐ３とＶｃ３の距離をｃとし、Ｖｐ４とＶｃ４の距離をｄとすると、実写画像におけるマーカー５０の移動量は、ａ＾２＋ｂ＾２＋ｃ＾２＋ｄ＾２となる（“＾”は累乗を示す）。
【０１９３】
なお、上記の計算方法は単なる一例に過ぎず、実写画像におけるマーカー５０の移動量の計算方法は、これに限定されない。
【０１９４】
実写画像におけるマーカー５０の移動量が算出されると、次に、当該移動量に基づいて、図柄判別処理において検出されたマーカー５０の位置を補正する。図６４を参照して、マーカー５０の位置の補正方法について説明する。
【０１９５】
マーカー５０の移動量がＤ１未満である場合には、現在の実写画像におけるマーカー５０の各頂点Ｖｃ（図６３のＶｃ１〜Ｖｃ４）の位置が、前回検出された各頂点Ｖｐ（図６３のＶｐ１〜Ｖｐ４）の位置へとそれぞれ補正される。なお、Ｄ１は、所定の閾値であって、後述するように、実写画像上でのマーカー５０の大きさに応じて、その値は変化する。
【０１９６】
マーカー５０の移動量がＤ１以上、Ｄ２未満である場合には、現在の実写画像におけるマーカー５０の各頂点Ｖｃ（図６３のＶｃ１〜Ｖｃ４）の位置が、Ｖｐ×Ａ＋Ｖｃ×（１−Ａ）により計算される位置へと補正される。なお、Ｄ２は、Ｄ１よりも大きい所定の閾値であって、後述するように、実写画像上でのマーカー５０の大きさに応じて、その値は変化する。また、Ａは、０よりも大きく、１よりも小さい所定値であって、後述するように、マーカー５０の動きベクトルに応じて、その値は変化する。
【０１９７】
マーカー５０の移動量がＤ２以上である場合には、現在の実写画像におけるマーカー５０の各頂点Ｖｃ（図６３のＶｃ１〜Ｖｃ４）の位置の補正は行われない。
【０１９８】
上記のように、マーカー５０の移動量がＤ１未満である場合（すなわち、マーカー５０の移動量が非常に小さい場合）には、直前の実写画像におけるマーカー５０の位置から、マーカー５０が全く移動していないものとして扱われる。よって、上記のような、意図しないマーカー位置の変動を防止することができ、その結果として、仮想空間画像のぶれを防止することができる。
【０１９９】
また、マーカー５０の移動量がＤ１以上、Ｄ２未満である場合（すなわち、マーカー５０の移動量が小さい場合）には、図６５に示すように、直前の実写画像におけるマーカー５０の位置と現在の実写画像におけるマーカー５０の位置とを結ぶ線分上の位置（すなわち、ＶｐからＶｃまでの線分を（１−Ａ）：Ａの比率で内分する点）に、マーカー５０の位置が補正される。よって、上記のような、意図しないマーカー位置の変動を緩和することができ、その結果として、仮想空間画像のぶれを緩和することができる。また、マーカー５０の移動量がＤ１未満である場合とは異なり、補正後のマーカー５０の位置は、直前の実写画像におけるマーカー５０の位置よりも、現在の実写画像におけるマーカー５０の位置に近い位置となるため、ユーザがゲーム装置１０を小さく（またはゆっくりと）動かした場合に、意図しないマーカー位置の変動を緩和しつつも、ゲーム装置１０の動きに応じてマーカー５０の位置（すなわち、仮想オブジェクト６０の位置）が更新される。
【０２００】
なお、マーカー５０の移動量がＤ２以上である場合（すなわち、マーカー５０の移動量が大きい場合）には、マーカー５０の位置の補正は行われない。よって、ユーザがゲーム装置１０を急激に大きく動かした場合に、そのようなゲーム装置１０の急激な動きに即座に反応してマーカー５０の位置が更新されるので、例えば図４における仮想オブジェクト６０がマーカー５０から大きくずれて表示されてしまうことはない。
【０２０１】
次に、上記の閾値Ｄ１およびＤ２の決定方法について説明する。
【０２０２】
前述のように、上記の閾値Ｄ１およびＤ２は、実写画像におけるマーカー５０の移動量がどの程度か（すなわち、非常に小さいか、小さいか、大きいか）を判断するための閾値であるが、これらの閾値は、実写画像上でのマーカー５０の大きさに応じて変更するのが好ましい。以下、図６６および図６７を参照して、その理由を説明する。
【０２０３】
図６６は、実写画像上でのマーカー５０の大きさが大きいとき（すなわち、現実世界において、マーカー５０の位置がカメラに近いとき）に、仮想オブジェクト６０を直前のマーカー位置に表示した例である。ここで、直前のマーカー位置と現在のマーカー位置との距離（実写画像上での距離）はＤであるとする。この場合、ユーザにとって、仮想オブジェクト６０は現在のマーカー位置から大きくずれていないように見える。
【０２０４】
図６７は、実写画像上でのマーカー５０の大きさが小さいとき（すなわち、現実世界において、マーカー５０の位置がカメラから遠いとき）に、仮想オブジェクト６０を直前のマーカー位置（すなわち、直前の実写画像におけるマーカー５０の位置）に表示した例である。ここでも、直前のマーカー位置と現在のマーカー位置との距離（実写画像上での距離）は図６６と同じくＤであるとする。この場合、ユーザにとって、仮想オブジェクト６０は現在のマーカー位置から大きくずれているように見える。
【０２０５】
図６６および図６７から明らかなように、直前のマーカー位置と現在のマーカー位置との距離（実写画像上での距離）が同じであっても、実写画像上でのマーカー５０の大きさが小さいほど、ユーザにとって、直前のマーカー位置と現在のマーカー位置とが大きくずれているように見える。
【０２０６】
そこで、図６８に示すように、実写画像上でのマーカー５０の大きさが大きい場合にはＤ１の値を大きくし、実写画像上でのマーカー５０の大きさが小さい場合にはＤ１の値を小さくするのが好ましい。すなわち、実写画像上でのマーカー５０の大きさが小さいほど、Ｄ１の値を小さくするのが好ましい。
【０２０７】
同様に、図６９に示すように、実写画像上でのマーカー５０の大きさが大きい場合にはＤ２の値を大きくし、実写画像上でのマーカー５０の大きさが小さい場合にはＤ２の値を小さくするのが好ましい。すなわち、実写画像上でのマーカー５０の大きさが小さいほど、Ｄ２の値を小さくするのが好ましい。
【０２０８】
なお、実写画像上のマーカー５０の大きさの計算方法としては、種々の方法が考えられる。例えば、実写画像上のマーカー５０の面積を、実写画像上のマーカー５０の大きさとして計算してもよい。他の実施形態では、実写画像上のマーカー５０の２つの対角線の外積の大きさを、実写画像上のマーカー５０の大きさとして計算してもよい。さらに他の実施形態では、実写画像上のマーカー５０の４頂点を内包する円の直径を、実写画像上のマーカー５０の大きさとして計算してもよい。さらに他の実施形態では、実写画像上のマーカー５０のＸ軸方向の幅およびＹ軸方向の幅に基づいて、実写画像上のマーカー５０の大きさを計算してもよい。
【０２０９】
次に、上記の所定値Ａの決定方法について説明する。
【０２１０】
前述のように、マーカー５０の移動量がＤ１以上、Ｄ２未満である場合には、図６５に示すように、直前の実写画像におけるマーカー５０の位置と現在の実写画像におけるマーカー５０の位置とを結ぶ線分を（１−Ａ）：Ａの比率で内分する点に、マーカー５０の位置が補正される。
【０２１１】
ここで、Ａの値を小さい値（例えば、０．１）に固定した場合には、直前の実写画像におけるマーカー５０の位置とほぼ同じ位置に、マーカー５０の位置が補正されることになる。したがって、応答性が低下し、実写画像におけるマーカー５０の位置が変化しても、仮想オブジェクト６０の位置はそれほど変化しないことになる。よって、例えば、ユーザがゲーム装置１０を所望の方向へゆっくりと継続的に動かしたときに、仮想オブジェクト６０がマーカー５０からはっきりとずれて見えてしまうという問題がある。
【０２１２】
逆に、Ａの値を大きい値（例えば、０．９）に固定した場合には、現在の実写画像におけるマーカー５０の位置とほぼ同じ位置に、マーカー５０の位置が補正されることになる。したがって、応答性は向上するものの、前述したような意図しないマーカー位置の変動を緩和する効果が大きく損なわれてしまうという問題がある。
【０２１３】
本実施形態では、上記のような２つの問題点を両方とも解決するために、マーカー５０の動きベクトルに応じてＡの値を変化させている。
【０２１４】
具体的には、或る実写画像におけるマーカー５０の位置（例えば、マーカー５０の各頂点の位置）と、その直前の実写画像におけるマーカー５０の位置とに基づいて、マーカー５０がどの方向へ移動したかを示す動きベクトルを順次計算してメインメモリ３２に順次記憶する。そして、新たに計算された動きベクトルと、メインメモリ３２に記憶されている過去に計算された動きベクトルとに基づいて、実写画像においてマーカー５０が一定方向（概ね一定方向であってもよい）に継続して移動しているかどうかを判定し、一定方向に継続して移動している場合にはＡの値を大きくし、そうでない場合にはＡの値を小さくする。
【０２１５】
上記のようにＡの値を変化させることにより、例えば、ユーザがゲーム装置１０を所望の方向へゆっくりと継続的に動かしている間は応答性が向上するので、仮想オブジェクト６０がマーカー５０から大きくずれて見えてしまうことがない。また、それ以外の状況では応答性が低下するので、前述したような意図しないマーカー位置の変動を緩和する効果が十分に発揮される。
【０２１６】
なお、本実施形態では、図６４のように、マーカー５０の移動量がＤ１未満の場合と、Ｄ１以上、Ｄ２未満の場合と、Ｄ２以上の場合とで、マーカー５０の位置（例えば４頂点の位置）の補正方法を変えているが、これは単なる一例に過ぎず、マーカー５０の位置の補正方法はこれに限定されない。
【０２１７】
例えば、他の実施形態として、図７０に示すように、マーカー５０の移動量がＤ３未満の場合には、現在の実写画像に基づいて検出されたマーカー５０の位置を、直前の実写画像におけるマーカー５０の位置へと補正し、Ｄ３以上の場合には、現在の実写画像に基づいて検出されたマーカー５０の位置を補正せずにそのまま用いるようにしてもよい。これにより、意図しないマーカー位置の変動を防止することができる。なお、Ｄ３は、所定の閾値であって、実写画像上でのマーカー５０の大きさに応じて、その値が変化してもよい。
【０２１８】
また、さらに他の実施形態として、図７１に示すように、マーカー５０の移動量がＤ４未満の場合には、現在の実写画像に基づいて検出されたマーカー５０の位置を、直前の実写画像におけるマーカー５０の位置と現在の実写画像におけるマーカー５０の位置とを結ぶ線分を（１−Ａ）：Ａの比率で内分する点へと補正し、Ｄ４以上の場合には、現在の実写画像に基づいて検出されたマーカー５０の位置を補正せずにそのまま用いるようにしてもよい。これにより、意図しないマーカー位置の変動を緩和することができる。なお、Ｄ４は、所定の閾値であって、実写画像上でのマーカー５０の大きさに応じて、その値が変化してもよい。
【０２１９】
なお、マーカー位置補正処理では、前述のように、マーカー５０の移動量やマーカー５０の動きベクトルを用いて処理を行っているが、実写画像に同一図柄の複数のマーカーが含まれている場合には、それらのどのマーカーがどこに移動したのかをそれぞれ判別する必要がある。例えば、図７２に示すように、直前の実写画像から互いに同一図柄の複数のマーカー（マーカーＡ，マーカーＢ）が検出され、現在の実写画像から、それらと同一図柄の複数のマーカー（第１マーカー，第２マーカー）が検出された場合、それらの対応関係を判別する必要がある。
【０２２０】
本実施形態では、直前の実写画像から検出された各マーカーの代表点から、現在の実写画像から検出された各マーカーの代表点までの距離をそれぞれ計算し、当該距離が所定の閾値よりも小さい場合に、それらの２つのマーカーが互いに対応していると判定する。マーカーの代表点としては、例えば、マーカーの４頂点の座標を平均することによって得られる座標を利用することができる。
【０２２１】
図７２を参照して具体的に説明すると、まず、マーカーＡの代表点から第１マーカーまでの距離を計算し、当該距離が所定の閾値（当該閾値は、実写画像上でのマーカーＡまたは第１マーカーの大きさが大きくなるほど、大きくなるようにするのが好ましい）よりも小さい場合には、マーカーＡと第１マーカーとが対応していると判定する。
【０２２２】
同様に、マーカーＡの代表点から第２マーカーまでの距離を計算し、当該距離が所定の閾値（当該閾値は、実写画像上でのマーカーＡまたは第２マーカーの大きさが大きくなるほど、大きくなるようにするのが好ましい）よりも小さい場合には、マーカーＡと第２マーカーとが対応していると判定する。
【０２２３】
また同様に、マーカーＢの代表点から第１マーカーまでの距離を計算し、当該距離が所定の閾値（当該閾値は、実写画像上でのマーカーＢまたは第１マーカーの大きさが大きくなるほど、大きくなるようにするのが好ましい）よりも小さい場合には、マーカーＢと第１マーカーとが対応していると判定する。
【０２２４】
また同様に、マーカーＢの代表点から第２マーカーまでの距離を計算し、当該距離が所定の閾値（当該閾値は、実写画像上でのマーカーＢまたは第２マーカーの大きさが大きくなるほど、大きくなるようにするのが好ましい）よりも小さい場合には、マーカーＢと第２マーカーとが対応していると判定する。
【０２２５】
上記のようにしてマーカーの対応関係を判別することによって、実写画像に同一図柄の複数のマーカーが含まれている場合でも、各マーカーの移動量や動きベクトルを計算することができる。
【０２２６】
なお、実写画像に異なる図柄の複数のマーカーが含まれている場合には、それらの図柄に基づいてマーカーの対応関係を判別することができる。
【０２２７】
なお、上記マーカー位置補正処理では、直前の実写画像から検出されたマーカー５０の位置と、現在の実写画像から検出されたマーカー５０の位置とに基づいて、実写画像におけるマーカー５０の移動量を計算しているが、これに限らず、例えば、現在の実写画像以前に取得された任意の実写画像（例えば、現在の実写画像の２つ前に取得された実写画像など）から検出されたマーカー５０の位置と、現在の実写画像から検出されたマーカー５０の位置とに基づいて、実写画像におけるマーカー５０の移動量を計算してもよい。
【０２２８】
以上のように、輪郭検出処理、頂点検出処理、粗判別処理、図柄判別処理およびマーカー位置補正処理を経て、実写画像からマーカー５０の位置（例えば、マーカー５０の黒領域の４頂点の位置）が検出される。そして、こうして検出されたマーカー５０の位置に基づいて、現実空間におけるカメラ（外側撮像部（左）２３ａまたは外側撮像部（右）２３ｂ）とマーカー５０との位置関係が計算され、この計算結果に基づいて、仮想空間における仮想カメラと仮想オブジェクト６０の位置関係が設定される。そして、当該仮想カメラに基づいて仮想空間画像が生成されて、カメラによって撮像された実写画像に仮想空間画像が合成されて、当該合成された画像が上側ＬＣＤ２２に表示される。
【０２２９】
次に、画像認識プログラムに基づいてＣＰＵ３１１によって実行される画像認識処理の流れを具体的に説明する。
【０２３０】
図７３は、メインメモリ３２に格納されるプログラムおよびデータを示している。
【０２３１】
メインメモリ３２には、画像認識プログラム７０、画像生成プログラム７１、仮想オブジェクトデータ７２、仮想カメラデータ７３、パターン定義データ７４、実写画像データ７５、エッジ判定閾値７６、エッジ画素情報７７、直線情報７８、頂点情報７９、マーカー位置情報８０、動きベクトル情報８１および各種変数８２が記憶される。
【０２３２】
画像認識プログラム７０は、実写画像からマーカーを検出するためのコンピュータプログラムであり、画像生成プログラム７１は、画像認識プログラムに基づいて検出されたマーカーの位置に基づいて実写画像に仮想空間画像を合成するためのコンピュータプログラムである。これらのプログラムは、データ保存用内部メモリ３５からメインメモリ３２にロードされてもよいし、外部メモリ４４からメインメモリ３２にロードされてもよいし、無線通信モジュール３６またはローカル通信モジュール３７を通じてサーバ装置や他のゲーム装置からメインメモリ３２にロードされてもよい。なお、画像生成プログラム７１に基づいてＣＰＵ３１１によって実行される画像生成処理については、公知技術を用いればよく、本発明との関連性も低いため、本明細書では詳細な説明を省略する。また、画像認識プログラム７０および画像生成プログラム７１が、１つの画像処理プログラムとして構成されてもよい。
【０２３３】
仮想オブジェクトデータ７２は、仮想空間に配置される仮想オブジェクト６０に関する形状や色や模様等に関するデータである。
【０２３４】
仮想カメラデータ７３は、仮想空間に配置される仮想カメラの位置や姿勢等に関するデータである。
【０２３５】
パターン定義データ７４は、マーカー５０を判別するために用いられる、マーカー５０の図柄を示すデータであり、予め記憶されている（図４９）。
【０２３６】
実写画像データ７５は、カメラ（外側撮像部（左）２３ａまたは外側撮像部（右）２３ｂ）によって撮像された実写画像の画像データである。
【０２３７】
エッジ判定閾値７６は、輪郭検出処理において、実写画像の各画素がエッジ画素であるか否かを判定するための閾値である。
【０２３８】
エッジ画素情報７７は、輪郭検出処理において、エッジ画素であると判定された画素に関する情報である。
【０２３９】
直線情報７８は、直線算出処理において生成および更新される直線に関する情報である。
【０２４０】
頂点情報７９は、頂点算出処理において算出される頂点に関する情報である。
【０２４１】
マーカー位置情報８０は、頂点検出処理によって生成され、マーカー位置補正処理によって必要に応じて更新される、実写画像におけるマーカー５０の位置（マーカー５０の黒領域の４頂点の位置）を示す情報である。マーカー位置情報８０には、現在の実写画像から検出されたマーカー５０の位置を示す情報（８０ａ）だけでなく、直前の実写画像から検出されたマーカー５０の位置を示す情報（８０ｂ）も含まれる。
【０２４２】
動きベクトル情報８１は、マーカー５０が移動した方向を示す動きベクトルを示す情報である。
【０２４３】
各種変数８２は、画像認識プログラム７０や画像生成プログラム７１の実行時に利用される各種変数（例えば、白領域輝度Ｌｗ、黒領域輝度Ｌｂ、閾値Ｄ１、閾値Ｄ２、所定値Ａなど）である。
【０２４４】
まず、図７４を参照して、画像認識プログラムに基づいてＣＰＵ３１１によって実行される画像認識処理全体の流れを説明する。
【０２４５】
ステップＳ１において、ＣＰＵ３１１は、カメラ（外側撮像部（左）２３ａまたは外側撮像部（右）２３ｂ）によって撮像された実写画像を取得して、メインメモリ３２に格納する。
【０２４６】
ステップＳ２において、ＣＰＵ３１１は、輪郭検出処理を行う。輪郭検出処理の具体的な流れについては、図７５を参照して後述する。
【０２４７】
ステップＳ３において、ＣＰＵ３１１は、ステップＳ２の輪郭検出処理において輪郭が検出されたかどうかを判断し、輪郭が検出された場合には処理はステップＳ４に進み、そうでない場合には処理はステップＳ９に進む。
【０２４８】
ステップＳ４において、ＣＰＵ３１１は、頂点検出処理を行う。頂点検出処理の具体的な流れについては、図７６を参照して後述する。
【０２４９】
ステップＳ５において、ＣＰＵ３１１は、ステップＳ４の頂点検出処理において頂点が検出されたかどうかを判断し、頂点が検出された場合には処理はステップＳ６に進み、そうでない場合には処理はステップＳ９に進む。
【０２５０】
ステップＳ６において、ＣＰＵ３１１は、粗判別処理を行う。粗判別処理の具体的な流れについては、図７７を参照して後述する。
【０２５１】
ステップＳ７において、ＣＰＵ３１１は、ステップＳ６の粗判別処理の結果に基づいて、マーカー５０の候補となるような頂点が存在するかどうかを判断し、マーカー５０の候補となるような頂点が検出された場合には処理はステップＳ８に進み、そうでない場合には処理はステップＳ１２に進む。
【０２５２】
ステップＳ８において、ＣＰＵ３１１は、図柄判別処理を行う。図柄判別処理の具体的な流れについては、図７８を参照して後述する。
【０２５３】
ステップＳ９において、ＣＰＵ３１１は、直前の実写画像におけるマーカー５０の位置（すなわち、直前の実写画像において検出された頂点の位置または直前の実写画像において決定されたサンプル点の位置）に基づいて、図柄判別処理を行う。
【０２５４】
ステップＳ１０において、ＣＰＵ３１１は、ステップＳ８またはステップＳ９の図柄判別処理においてマーカー５０が検出されたかどうかを判断し、頂点が検出された場合には処理はステップＳ１１に進み、そうでない場合には処理はステップＳ１２に進む。
【０２５５】
ステップＳ１１において、ＣＰＵ３１１は、マーカー位置補正処理を行う。マーカー位置補正処理の具体的な流れについては、図７９を参照して後述する。
【０２５６】
ステップＳ１２において、ＣＰＵ３１１は、画像認識処理を終了するかどうかを判断し、画像認識処理を続行する場合にはステップＳ１に戻り、画像認識処理を終了する場合には画像認識プログラムの実行を終了する。
【０２５７】
次に、図７５を参照して、画像認識プログラムに基づいてＣＰＵ３１１によって実行される輪郭検出処理の流れを説明する。
【０２５８】
ステップＳ２１において、ＣＰＵ３１１は、注目画素Ｐ（ｎ）を決定する。
【０２５９】
ステップＳ２２において、ＣＰＵ３１１は、Ｌ（ｎ−８）−Ｌ（ｎ）が６０以上かどうかを判定し、６０以上である場合にはステップＳ２３に進み、そうでない場合にはステップＳ３４に進む。
【０２６０】
ステップＳ２３において、ＣＰＵ３１１は、変数ｋに初期値として８を代入する。
【０２６１】
ステップＳ２４において、ＣＰＵ３１１は、Ｌ（ｎ−ｋ−１）がＬ（ｎ−ｋ）よりも小さいかどうかを判定し、Ｌ（ｎ−ｋ−１）がＬ（ｎ−ｋ）よりも小さい場合にはステップＳ２５に進み、そうでない場合にはステップＳ２６に進む。
【０２６２】
ステップＳ２５において、ＣＰＵ３１１は、変数ｋをインクリメントする。
【０２６３】
ステップＳ２６において、ＣＰＵ３１１は、Ｌ（ｎ−ｋ）を白領域輝度値Ｌｗとして決定する。
【０２６４】
ステップＳ２７において、ＣＰＵ３１１は、Ｌ（ｎ）がＬ（ｎ＋２）よりも小さいかどうかを判定し、Ｌ（ｎ）がＬ（ｎ＋２）よりも小さい場合にはステップＳ２８に進み、そうでない場合には処理はステップＳ３０に進む。
【０２６５】
ステップＳ２８において、ＣＰＵ３１１は、Ｌｗ−Ｌ（ｎ＋２）が６０以上かどうかを判定し、６０以上である場合にはステップＳ２９に進み、そうでない場合にはステップＳ３０に進む。
【０２６６】
ステップＳ２９において、ＣＰＵ３１１は、Ｌ（ｎ＋２）を黒領域輝度値Ｌｂとして決定する。
【０２６７】
ステップＳ３０において、ＣＰＵ３１１は、Ｌ（ｎ）を黒領域輝度値Ｌｂとして決定する。
【０２６８】
ステップＳ３１において、ＣＰＵ３１１は、ＬｗとＬｂの平均値をエッジ判定閾値として決定する。
【０２６９】
ステップＳ３２において、ＣＰＵ３１１は、エッジ判定閾値に基づいて起点エッジ画素を検出する。当該起点エッジ画素の座標は、エッジ画素情報としてメインメモリ３２に格納される。
【０２７０】
ステップＳ３３において、ＣＰＵ３１１は、起点エッジ画素を起点として隣接するエッジ画素を順次辿っていくエッジ辿り処理を実行する。当該エッジ辿り処理で順次検出されるエッジ画素の座標は、エッジ画素情報としてメインメモリ３２に順次格納される。
【０２７１】
ステップＳ３４において、ＣＰＵ３１１は、次の注目画素が存在するかどうかを判定し、存在する場合にはステップＳ２１に戻り、そうでない場合には（すなわち、実写画像の全ての注目画素候補についての処理が完了した場合には）輪郭検出処理を終了する。
【０２７２】
次に、図７６を参照して、画像認識プログラムに基づいてＣＰＵ３１１によって実行される頂点検出処理の流れを説明する。
【０２７３】
ステップＳ４１において、ＣＰＵ３１１は、最初の直線（すなわち、起点エッジ画素Ｐｅ（０）からエッジ画素Ｐｅ（５）までを結んだベクトルＶ（０−５）に対応する直線Ｌｉ（０−５））を生成し、当該直線を示すデータをメインメモリ３２に格納する。
【０２７４】
ステップＳ４２において、ＣＰＵ３１１は、生成された直線と、当該直線に続くベクトルとが同一直線上にあるかどうかを、直線に対するベクトルの角度に基づいて判定する（図２４参照）。そして、同一直線上にあると判定された場合には、ステップＳ４３に進み、そうでない場合にはステップＳ４４に進む。
【０２７５】
ステップＳ４３において、ＣＰＵ３１１は、直線を更新する。具体的には、直線の後端からベクトルの先端までに含まれるサンプルエッジ画素に基づいて、最小自乗法により直線を算出し、当該算出結果に応じて直線を更新する（すなわち、メインメモリ３２に格納されている当該直線を示すデータを更新する）。
【０２７６】
ステップＳ４４において、ＣＰＵ３１１は、直線と、当該直線に続くベクトルとの交点において黒領域が凸角となっているかどうかを、直線に対するベクトルの角度に基づいて判定する（図２４参照）。そして、凸角となっていると判定された場合にはステップＳ４５に進み、そうでない場合にはステップＳ４７に進む。
【０２７７】
ステップＳ４５において、ＣＰＵ３１１は、ベクトルに対応する直線を新たに生成し、当該新たに生成した直線を示すデータをメインメモリ３２に新たに格納する。
【０２７８】
ステップＳ４６において、ＣＰＵ３１１は、黒領域の輪郭を一周し終えた（すなわち、起点エッジ画素に戻ってきた）かどうかを判断し、一周し終えた場合にはステップＳ４９に進み、そうでない場合にはステップＳ４２に戻る。
【０２７９】
ステップＳ４７において、ＣＰＵ３１１は、直線算出処理（すなわちステップＳ４２〜ステップＳ４６の処理）が反時計回りに行われているかどうかを判断し、反時計回りに行われている場合にはステップＳ４８に進み、そうでない場合にはステップＳ４９に進む。なお、本実施形態では、直線算出処理は最初に反時計回りで開始されるものとする。
【０２８０】
ステップＳ４８において、ＣＰＵ３１１は、直線算出処理を反時計回りから時計回りへと変更する。
【０２８１】
ステップＳ４９において、ＣＰＵ３１１は、メインメモリ３２に格納されている複数の直線を表すデータに基づいて、それらの複数の直線の中に、同一直線上かつ同一方向の複数の直線が存在するかどうかを判断する。そして、同一直線上かつ同一方向の複数の直線が存在する場合にはステップＳ５０に進み、そうでない場合にはステップＳ５１に進む。
【０２８２】
ステップＳ５０において、ＣＰＵ３１１は、同一直線上かつ同一方向の複数の直線を、１つの直線に統合し、メインメモリ３２に格納されている複数の直線に関するデータを更新する。
【０２８３】
ステップＳ５１において、ＣＰＵ３１１は、メインメモリ３２に格納されている複数の直線に関するデータに基づいて、これら複数の直線の中から４つの直線を選出する。具体的には、各直線の長さを計算し、最も長い直線と２番目に長い直線と３番目に長い直線と４番目に長い直線を選出する。
【０２８４】
ステップＳ５２において、ＣＰＵ３１１は、上記４つの直線の交点の位置を計算することによって、黒領域の４つの頂点の位置を算出する。そして、当該４つの頂点の位置をメインメモリ３２に格納して、頂点検出処理を終了する。
【０２８５】
次に、図７７を参照して、画像認識プログラムに基づいてＣＰＵ３１１によって実行される粗判別処理の流れを説明する。
【０２８６】
ステップＳ６１において、ＣＰＵ３１１は、頂点検出処理において検出された４頂点が、除外条件Ａを満たすかどうかを判断する。除外条件Ａとは、前述したように、いずれかの隣り合う２頂点の距離が近すぎる場合である。そして、除外条件Ａを満たす場合にはステップＳ６５に進み、そうでない場合にはステップＳ６２に進む。
【０２８７】
ステップＳ６２において、ＣＰＵ３１１は、頂点検出処理において検出された４頂点が、除外条件Ｂを満たすかどうかを判断する。除外条件Ｂとは、前述したように、いずれかの頂点と当該頂点に隣接しない２辺のいずれかとの距離が近すぎる場合である。そして、除外条件Ｂを満たす場合にはステップＳ６５に進み、そうでない場合にはステップＳ６３に進む。
【０２８８】
ステップＳ６３において、ＣＰＵ３１１は、頂点検出処理において検出された４頂点が、除外条件Ｃを満たすかどうかを判断する。除外条件Ｃとは、前述したように、いずれかの対向する２辺の直線が概ね同一方向である場合である。そして、除外条件Ｃを満たす場合にはステップＳ６５に進み、そうでない場合にはステップＳ６４に進む。
【０２８９】
ステップＳ６４において、ＣＰＵ３１１は、頂点検出処理において検出された４頂点が、除外条件Ｄを満たすかどうかを判断する。除外条件Ｄとは、前述したように、凹角が含まれている場合である。そして、除外条件Ｄを満たす場合にはステップＳ６５に進み、そうでない場合には粗判別処理を終了する。
【０２９０】
ステップＳ６５において、ＣＰＵ３１１は、頂点検出処理において検出された４頂点を、図柄判別処理の処理対象から除外する（例えば、当該４頂点に関するデータをメインメモリ３２から削除する）。そして、粗判別処理を終了する。
【０２９１】
次に、図７８を参照して、画像認識プログラムに基づいてＣＰＵ３１１によって実行される図柄判別処理の流れを説明する。
【０２９２】
ステップＳ７１において、ＣＰＵ３１１は、頂点検出処理で検出された４頂点で囲まれる四角形の４辺のうち、いずれか対向する２辺を選択する。
【０２９３】
ステップＳ７２において、ＣＰＵ３１１は、ステップＳ７１で選択した２辺が平行（概ね平行である場合も含む）であるかどうかを判定し、平行である場合にはステップＳ７３に進み、そうでない場合にはステップＳ７４に進む。
【０２９４】
ステップＳ７３において、ＣＰＵ３１１は、ステップＳ７１で選択した２辺のそれぞれを１６等分する。
【０２９５】
ステップＳ７４において、ＣＰＵ３１１は、ステップＳ７１で選択した２辺のそれぞれを不均等に（例えば、図５３〜図５５に示す方法で）１６分割する。
【０２９６】
ステップＳ７５において、ＣＰＵ３１１は、頂点検出処理で検出された４頂点で囲まれる四角形の４辺のうち、ステップＳ７１において選択しなかった方の対向する２辺を選択する。
【０２９７】
ステップＳ７６において、ＣＰＵ３１１は、ステップＳ７５で選択した２辺が平行（概ね平行である場合も含む）であるかどうかを判定し、平行である場合にはステップＳ７７に進み、そうでない場合にはステップＳ７８に進む。
【０２９８】
ステップＳ７７において、ＣＰＵ３１１は、ステップＳ７５で選択した２辺のそれぞれを１６等分する。
【０２９９】
ステップＳ７８において、ＣＰＵ３１１は、ステップＳ７５で選択した２辺のそれぞれを不均等に（例えば、図５３〜図５５に示す方法で）１６分割する。
【０３００】
ステップＳ７９において、ＣＰＵ３１１は、頂点検出処理で検出された４頂点で囲まれる四角形の４辺を分割することによって決定されたサンプル点の画素値と、パターン定義データにおいて定義されているサンプル点の画素値とに基づいて、これらの類似度を表す相関係数を計算する。
【０３０１】
ステップＳ８０において、ＣＰＵ３１１は、ステップＳ７９において計算された相関係数に基づいて、頂点検出処理で検出された４頂点で囲まれる領域に表示されている図柄と、マーカー５０の図柄とが一致するか否か判別する。そして、図柄が一致する場合にはステップＳ８１に進み、そうでない場合には図柄判別処理を終了する。
【０３０２】
ステップＳ８１において、ＣＰＵ３１１は、実写画像におけるマーカー５０の４頂点（左上頂点，左下頂点，右下頂点，右上頂点）の座標を、マーカー位置情報としてメインメモリ３２に記憶する。
【０３０３】
次に、図７９を参照して、画像認識プログラムに基づいてＣＰＵ３１１によって実行されるマーカー位置補正処理の流れを説明する。
【０３０４】
ステップＳ９１において、ＣＰＵ３１１は、実写画像上でのマーカー５０の大きさを計算し、その結果をメインメモリ３２に格納する。
【０３０５】
ステップＳ９２において、ＣＰＵ３１１は、現在の実写画像から検出されたマーカーと同一のマーカーが直前の実写画像に存在したかどうかを判断し、存在した場合にはステップＳ９３に進み、そうでない場合にはマーカー位置補正処理を終了する（すなわち、現在の実写画像から検出されたマーカーの位置を補正せずにそのまま利用する）。なお、現在の実写画像から検出されたマーカーと同一のマーカーが直前の実写画像に存在したかどうかどうかは、例えば、ステップＳ９１で計算されたマーカー５０の大きさに基づいて、図７２を参照して説明したような方法によって、判断することができる。
【０３０６】
ステップＳ９３において、ＣＰＵ３１１は、ステップＳ９１で計算されたマーカー５０の大きさに基づいて、閾値Ｄ１およびＤ２を計算し（図６８、図６９）、メインメモリ３２に格納する。
【０３０７】
ステップＳ９４において、ＣＰＵ３１１は、マーカー５０の移動量がＤ１未満かどうかを判断し、Ｄ１未満である場合にはステップＳ９５に進み、そうでない場合にはステップＳ９６に進む。
【０３０８】
ステップＳ９５において、ＣＰＵ３１１は、図柄判別処理において検出されたマーカー５０の位置を、前回検出されたマーカーの位置へと補正する。そして、マーカー位置補正処理を終了する。
【０３０９】
ステップＳ９６において、ＣＰＵ３１１は、マーカー５０の移動量がＤ２未満かどうかを判断し、Ｄ２未満である場合にはステップＳ９７に進み、そうでない場合にはマーカー位置補正処理を終了する（すなわち、現在の実写画像から検出されたマーカーの位置を補正せずにそのまま利用する）。
【０３１０】
ステップＳ９７において、ＣＰＵ３１１は、マーカー５０の動きベクトルを計算し、当該動きベクトルと過去の動きベクトルとに基づいて所定値Ａを決定する。具体的には、これらの動きベクトルに基づいて、実写画像においてマーカー５０が一定方向に継続して移動しているかどうかを判定し、一定方向に継続して移動している場合にはＡの値を大きくし、そうでない場合にはＡの値を小さくする。ここで計算された動きベクトルは、動きベクトル情報８１としてメインメモリ３２に格納される。
【０３１１】
ステップＳ９８において、ＣＰＵ３１１は、直前の実写画像におけるマーカー５０の位置と現在の実写画像におけるマーカー５０の位置とを結ぶ線分を（１−Ａ）：Ａの比率で内分する点に、マーカー５０の位置を補正する。そして、マーカー位置補正処理を終了する。
【０３１２】
（変形例）
なお、上記実施形態では、（１）輪郭検出処理、（２）頂点検出処理、（３）粗判別処理、（４）図柄判別処理、および（５）マーカー位置補正処理に関して、それぞれ、具体的な処理方法を説明したが、これらの処理のうちの１以上の処理を、公知技術で置き換えても構わない。
【０３１３】
また、画像認識処理の処理対象となる画像は、カメラからリアルタイムに順次取得される実写画像に限らず、例えば、過去にカメラによって撮像されてデータ保存用内部メモリ３５等に保存されている画像であってもよいし、他の装置から受信した画像であってもよいし、外部記憶媒体を通じて取得した画像であってもよい。
【０３１４】
また、画像認識処理の認識対象は、マーカー５０の黒領域に限らず、画像に含まれる任意の物体（例えば、人の顔や手など）または図柄であってもよい。
【０３１５】
また、画像認識処理の処理結果は、ＡＲ技術に限らず、任意の他の用途にも利用することができる。
【０３１６】
また、本実施形態では、ゲーム装置１０において画像処理（画像認識処理および画像生成処理）を実行しているが、これに限らず、据え置き型ゲーム装置、パーソナルコンピュータ、携帯電話などの任意の情報処理装置（または情報処理システム）において画像処理を実行してもよい。
【０３１７】
また、本実施形態では、上記画像処理を１台のゲーム装置１０において実行しているが、他の実施形態では、互いに通信可能な複数の情報処理装置によって分担して実行してもよい。
【０３１８】
また、本実施形態では、画像認識プログラム等を１つのＣＰＵ３１１によって実行しているが、他の実施形態では、画像認識プログラム等を複数のＣＰＵ３１１によって分担して実行してもよい。
【０３１９】
また、本実施形態では、画像認識プログラム等に基づいてＣＰＵ３１１によって上記画像処理が実行されるが、他の実施形態では、画像処理の一部をＣＰＵ３１１以外のハードウェアによって実現してもよい。
【０３２０】
また、上記実施形態では、カメラによって撮像された実写画像に仮想空間画像を合成して上側ＬＣＤ２２に表示している（ビデオシースルー方式）が、これに替えて、透過型の表示画面に仮想オブジェクトを表示し、当該透過型の表示画面を通じて見える実世界にあたかも仮想オブジェクトが実在するかのようにユーザに視認されるような光学シースルー方式を採用してもよい。
【符号の説明】
【０３２１】
１０  ゲーム装置
１２  下側ＬＣＤ
２２  上側ＬＣＤ
２３ａ  外側撮像部（左）
２３ｂ  外側撮像部（右）
５０  マーカー
６０  仮想オブジェクト
【図１】
2011154699.tif 000003
【図２Ａ】
2011154699.tif 000004
【図２Ｂ】
2011154699.tif 000005
【図２Ｃ】
2011154699.tif 000006
【図２Ｄ】
2011154699.tif 000007
【図３】
2011154699.tif 000008
【図４】
2011154699.tif 000009
【図５】
2011154699.tif 000010
【図６】
2011154699.tif 000011
【図７】
2011154699.tif 000012
【図８】
2011154699.tif 000013
【図９】
2011154699.tif 000014
【図１０】
2011154699.tif 000015
【図１１】
2011154699.tif 000016
【図１２】
2011154699.tif 000017
【図１３】
2011154699.tif 000018
【図１４】
2011154699.tif 000019
【図１５】
2011154699.tif 000020
【図１６】
2011154699.tif 000021
【図１７】
2011154699.tif 000022
【図１８】
2011154699.tif 000023
【図１９】
2011154699.tif 000024
【図２０】
2011154699.tif 000025
【図２１】
2011154699.tif 000026
【図２２】
2011154699.tif 000027
【図２３】
2011154699.tif 000028
【図２４】
2011154699.tif 000029
【図２５】
2011154699.tif 000030
【図２６】
2011154699.tif 000031
【図２７】
2011154699.tif 000032
【図２８】
2011154699.tif 000033
【図２９】
2011154699.tif 000034
【図３０】
2011154699.tif 000035
【図３１】
2011154699.tif 000036
【図３２】
2011154699.tif 000037
【図３３】
2011154699.tif 000038
【図３４】
2011154699.tif 000039
【図３５】
2011154699.tif 000040
【図３６】
2011154699.tif 000041
【図３７】
2011154699.tif 000042
【図３８】
2011154699.tif 000043
【図３９】
2011154699.tif 000044
【図４０】
2011154699.tif 000045
【図４１】
2011154699.tif 000046
【図４２】
2011154699.tif 000047
【図４３】
2011154699.tif 000048
【図４４】
2011154699.tif 000049
【図４５】
2011154699.tif 000050
【図４６】
2011154699.tif 000051
【図４７】
2011154699.tif 000052
【図４８】
2011154699.tif 000053
【図４９】
2011154699.tif 000054
【図５０】
2011154699.tif 000055
【図５１】
2011154699.tif 000056
【図５２】
2011154699.tif 000057
【図５３】
2011154699.tif 000058
【図５４】
2011154699.tif 000059
【図５５】
2011154699.tif 000060
【図５６】
2011154699.tif 000061
【図５７】
2011154699.tif 000062
【図５８】
2011154699.tif 000063
【図５９】
2011154699.tif 000064
【図６０】
2011154699.tif 000065
【図６１】
2011154699.tif 000066
【図６２】
2011154699.tif 000067
【図６３】
2011154699.tif 000068
【図６４】
2011154699.tif 000069
【図６５】
2011154699.tif 000070
【図６６】
2011154699.tif 000071
【図６７】
2011154699.tif 000072
【図６８】
2011154699.tif 000073
【図６９】
2011154699.tif 000074
【図７０】
2011154699.tif 000075
【図７１】
2011154699.tif 000076
【図７２】
2011154699.tif 000077
【図７３】
2011154699.tif 000078
【図７４】
2011154699.tif 000079
【図７５】
2011154699.tif 000080
【図７６】
2011154699.tif 000081
【図７７】
2011154699.tif 000082
【図７８】
2011154699.tif 000083
【図７９】
2011154699.tif 000084