カード
【課題】 精度よく認識することのできる2次元コードを提供することを目的とする。
【解決手段】 本発明の2次元コードは、所定の形状を有する基準セル100と、それぞれを2次元配置することでコードデータを構成する複数の方形セル106と、同一形状を有する複数のコーナーセル104とを備える。コーナーセル104は、基準セル100、方形セル106と異なる色を付けられる。この2次元コードが撮像装置により撮像されると、画素値の範囲を設定することで各セルを抽出でき、2次元コードの読み取り精度を向上できる。
【解決手段】 本発明の2次元コードは、所定の形状を有する基準セル100と、それぞれを2次元配置することでコードデータを構成する複数の方形セル106と、同一形状を有する複数のコーナーセル104とを備える。コーナーセル104は、基準セル100、方形セル106と異なる色を付けられる。この2次元コードが撮像装置により撮像されると、画素値の範囲を設定することで各セルを抽出でき、2次元コードの読み取り精度を向上できる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のセルを2次元配置することでコードデータを表現する技術に関する。
【背景技術】
【0002】
近年、2次元コードをカメラで撮像してコードデータを認識し、そのコードデータに対応付けられた所定の処理を実行させる技術が普及している。1次元バーコードと比較すると、2次元コードの方がコード化できる情報量が多く、現在では様々な種類の2次元コードが登場するようになっている。2次元コードのコードデータは、画像データから効率よく且つ正確に読み取られる必要がある。このような状況をふまえて、従来、2次元コードの画像認識に関する技術を提案するものがある(例えば、特許文献1参照)。
【特許文献1】特開2000−82108号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
画像データの解像度が高ければ、2次元コードの情報量を多く取得でき、コードデータの高い認識率を実現することができる。しかしながら、カメラによっては解像度の低いものもあり、そのような場合であっても、コードデータの認識率を高めることが好ましい。また、撮像して取得された画像データには、外部の環境光などの影響が含まれているため、取得した画像データを2値化する際にその影響を考慮して、2値化する画素値の範囲を好適に設定することが好ましい。
本発明は、精度よく認識することのできるカードなどの物体を提供することを目的とする。また本発明は、画像データを2値化する際の画素値の範囲を好適に設定する技術を提供することを目的とする。
【課題を解決するための手段】
【0004】
上記課題を解決するために、本発明のある態様の物体は、 所定の形状を有する基準セルと、 それぞれを2次元配置することでコードデータを構成する複数の多辺形セルと、 同一形状を有する複数のコーナーセルと、を備える。コーナーセルは、基準セルおよび多辺形セルとは異なる色を付けられる。この物体はカードなどの2次元的なオブジェクトであってもよく、また3次元オブジェクトであってもよい。
【0005】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0006】
本発明によると、精度よく認識することのできる2次元コードを提供することができる。
【発明を実施するための最良の形態】
【0007】
図1は、本発明の実施例にかかるゲームシステム1の構成を示す。ゲームシステム1は、撮像装置2、画像処理装置10および出力装置6を備える。画像処理装置10は、画像解析装置20およびゲーム装置30を備える。画像解析装置20およびゲーム装置30は別装置として構成されてもよいが、一体として構成されてもよい。撮像装置2は、CCD撮像素子またはMOS撮像素子などから構成されるビデオカメラであり、例えば320画素×240画素の解像度を有する。撮像装置2は実空間を所定の周期で撮像して、周期ごとのフレーム画像を生成する。撮像領域5は撮像装置2により撮像される範囲であり、撮像装置2の高さや向きを調整することで、撮像領域5の位置や大きさが調整される。ゲームプレイヤは、撮像領域5において、実オブジェクトであるゲームカード4を指で動かす。ゲームカード4は、自身を一意に識別するための2次元コードを有して構成される。
【0008】
出力装置6は、表示装置であるディスプレイ7を有する。出力装置6は、さらにスピーカ(図示せず)を有して構成されてもよい。基本的に画像処理装置10は、撮像装置2により撮像されたフレーム画像をディスプレイ7に表示させ、その際に、ゲームカード4上に仮想オブジェクトであるキャラクタを重畳するように表示制御する。プレイヤは、ディスプレイ7を見ることで、ゲームカード4が撮像領域5に入っているか容易に確認でき、入っていない場合には、ゲームカード4の位置をずらしたり、また撮像装置2の向きを調整して、撮像装置2にゲームカード4を撮像させるようにする。
【0009】
実施例のゲームアプリケーションでは、プレイヤがゲームカード4に対して所定の操作を施すことにより、キャラクタを動作させる。このゲームアプリケーションの性質上、プレイヤにゲームカード4とキャラクタとの一体性を認識させることが好ましく、そのため、キャラクタの画像を、ゲームカード4に重ね合わせて表示させている。撮像領域5内でゲームカード4をゆっくりと移動させると、キャラクタは、ゲームカード4の上に乗った状態を維持しながら、ゲームカード4の動きに追従して一緒に移動する。
【0010】
以上のキャラクタの動きは、画像処理装置10により制御される。まず、画像解析装置20は、撮像装置2において取得されたフレーム画像から、ゲームカード4の画像情報を抽出する。さらに、画像解析装置20は、ゲームカード4の画像情報から、ゲームカード4に印刷された2次元コードを抽出する。このとき、画像解析装置20は、ゲームカード4の2次元コードから、ゲームカード4の空間における位置情報、方向情報、距離情報などを決定する。
【0011】
後述するが、画像解析装置20は、フレーム画像中のゲームカード4の画像における基準セルおよび4隅のコーナーセルを用いて、撮像装置2とゲームカード4との距離やゲームカード4の向きなどを計算して求める。これにより、キャラクタは、ゲームカード4上にて前方を向くように表示制御される。また、2次元コードにおける複数の方形セルの配列から、ゲームカード4のコードデータを取得する。
【0012】
図1では、ゲームカード4が台3に単に置かれている状態を示しているが、ゲームカード4は、例えば台3に対して斜めに傾けられたり、また台3よりも上に持ち上げられたりしてもよい。画像解析装置20は、ゲームカード4が傾斜された状態、または、台3からの高さを変化された状態を画像解析により認識する機能をもつ。画像解析装置20において画像解析された結果は、ゲーム装置30に送られる。なお、撮像装置2において撮像されたフレーム画像が、ゲーム装置30に送られて、ゲーム装置30側で画像解析を行ってもよい。この場合、画像処理装置10は、ゲーム装置30のみで構成されることになる。
【0013】
ゲーム装置30は、画像解析装置20における画像解析結果をもとに、ディスプレイ7の表示画面上で、キャラクタをゲームカード4の上に位置するように表示制御する。キャラクタは、ゲームカード4から抽出したコードデータに対応付けられて、ゲームシーンごとに適宜割り当てられてもよい。この場合、ゲームシーンが切り替わると、表示されるキャラクタも切り替わることになる。
【0014】
図2は、ゲームカードの表面に印刷した2次元コードを示す。ゲームカード4の表面には、複数の所定形状をもつ多角形セルが所定の配列規則にしたがって2次元的に配置されている。具体的に、ゲームカード4の2次元コードは、撮像装置2により撮像された画像データからゲームカード4の認識処理を行うための基準となる基準セル100、複数の方形セル106を2次元配置することでコードデータを構成するコードデータ部分102、コードデータ部分102を取り囲むように配置される複数のコーナーセル104a、104b、104c、104d(以下、総称する場合は、「コーナーセル104」と呼ぶ)を備えている。コードデータ部分102およびコーナーセル104は、2次元コードにおけるコード部110に存在している。
【0015】
基準セル100、方形セル106およびコーナーセル104は、それぞれ所定の形状を有して構成される。図2に示す2次元コードでは、各セルが黒色に塗りつぶされて存在している。図2において、領域108は、複数の方形セル106が連結して構成されたものであり、他の方形セル106とともにコードデータを構成している。方形セル106は、同一の形状、ここでは正方形の形状をもつ。実施例のゲームカード4が複数存在する場合に、基準セル100およびコーナーセル104の配置および大きさは共通とされ、コードデータ部分102における方形セル106の配列により、ゲームカード4を一意に特定することができる。
【0016】
以下に、本実施例における2次元コードの詳細を説明する。正方形状の方形セル106の1辺を1ブロックとすると、基準セル100は、7ブロック分の横方向の長辺と1.5ブロック分の縦方向の短辺で形成される長方形状のセル(エレメント)として構成される。実施例において、縦1ブロックと横1ブロックで形成される正方形状の領域をブロック領域と呼ぶ。
【0017】
コードデータ部分102は、7ブロック×7ブロックで囲まれる領域に形成される。この領域の一辺は、基準セル100の長辺に平行であり且つ長辺から1ブロック離れた位置に配置される。図示のように、コード部110は、8ブロック×8ブロックで囲まれる領域であり、コードデータ部分102は、コード部110が形成される領域に含まれる。実際に方形セル106が配置される領域は、7ブロック×7ブロックで囲まれる領域の4隅における2ブロック×2ブロックの領域を除いた部分とする。すなわち、4隅の2ブロック×2ブロックの領域には方形セル106を配置させないこととし、したがって、(7×7−2×2×4)=33のブロック領域に方形セル106が配置されて、コードデータを構成する。
【0018】
コーナーセル104aは、コード部110の左上隅の領域に配置される。この左上隅の領域は、コードデータ部分102として7ブロック×7ブロックで囲まれる領域の左上隅の2ブロック×2ブロックの領域の範囲内であってよく、またその範囲内からはみ出してもよい。図示の例では、コーナーセル104aが、コードデータ部分102における左上隅の2ブロック×2ブロックの領域から縦に0.5ブロック分、横に0.5ブロック分だけはみ出して配置されている。すなわち、コーナーセル104aは、コード部110において2.5ブロック×2.5ブロックで囲まれる左上隅の領域に存在している。同様に、コーナーセル104bはコード部110の右上隅の領域に配置され、コーナーセル104cはコード部110の右下隅の領域に配置され、コーナーセル104dはコード部110の左下隅の領域に配置される。図示の例では、各コーナーセル104は方形に形成され、具体的には1辺を1.5ブロック分の長さとする正方形のセルとして形成されている。
【0019】
コードデータ部分102は、1ブロック領域を1ビットとすると、合計で33ビット分の情報をコード化することができる。この33ビット中、9ビット分は、コードデータが、正しいコードデータであることを確かめるためのチェックデータを構成する。従って、コードデータ部分102には、24ビット分の情報がコード化されている。
【0020】
方形セル106は、コードデータを表現する重要なエレメントであり、画像解析装置20において正確に画像認識される必要がある。そのためには、全ての方形セル106を大きく形成することが理想的であるが、当然のことながらゲームカード4の大きさには制約があり、方形セル106を大きくすることは、それだけコードデータ部分102を構成する方形セル106の数を減じる結果となる。これは情報のビット数を減らすことに相当し、好ましくない。
【0021】
以上のことから、本実施例において、コーナーセル104は、方形セル106よりも大きな面積を有して構成される。後述するが、本実施例の画像解析装置20において、4隅のコーナーセル104は、コードデータ部分102を検出するために利用される。逆に言えば、4隅のコーナーセル104を検出できなければ、方形セル106を検出することもできないため、この2次元コードでは、方形セル106よりもコーナーセル104をまず確実に認識する必要がある。4隅のコーナーセル104を方形セル106よりも大きく形成することで、4隅のコーナーセル104の認識率を高めることができる。
【0022】
画像解析装置20は、フレーム画像中の基準セル100の候補を抽出して所定の基準を満たすものを基準セル100として仮定し、その仮定した基準セル100の近傍に4つのコーナーセル104が存在しているか否かを判定する。4つのコーナーセル104を認識すると、画像解析装置20は、4つのコーナーセル104により囲まれた領域、すなわちコードデータ部分102における方形セル106の配置を読み取り、コードデータを取得する。これにより、仮定した基準セル100が真の基準セル100であったことが判断され、ゲームカード4を認識することができる。画像解析装置20は、撮像装置2を基準(原点)とするゲームカード4の仮想3次元座標系における位置と方向を計算して求める。
【0023】
図3は、画像解析装置の構成を示す。画像解析装置20は、フレーム画像取得部40、実オブジェクト抽出部42および状態決定部44を備える。実オブジェクト抽出部42は、2値化処理部50、基準セル検出部52、コード部検出部54、検証処理部56を備える。本実施例における画像解析装置20の処理機能は、CPU、メモリ、メモリにロードされたプログラムなどによって実現され、ここではそれらの連携によって実現される構成を描いている。プログラムは、画像解析装置20に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。図示の例では、画像解析装置20のCPUが、フレーム画像取得部40、実オブジェクト抽出部42、状態決定部44としての機能をもつ。
【0024】
フレーム画像取得部40が、撮像装置2にて撮像された実空間のフレーム画像を取得する。撮像装置2は、周期的にフレーム画像を取得し、好適には1/60秒間隔でフレーム画像を生成する。
【0025】
実オブジェクト抽出部42は、フレーム画像から実オブジェクト画像、すなわちゲームカード4の画像を抽出する。具体的に、2値化処理部50がフレーム画像を2進数のビット表現に変換して、フレーム画像の情報をビットのオンとオフで表現する。基準セル検出部52は、フレーム画像の2値化データから、基準セル100を検出する。基準セル100を検出すると、コード部検出部54が、基準セル100の位置をもとにコード部110を検出し、検証処理部56が、コード部110に含まれるコードデータの検証処理を行う。
【0026】
状態決定部44は、設定した座標系における実オブジェクトの状態を決定し、具体的には、ゲームカード4の位置、方向および撮像装置2からの距離を決定する。状態決定部44において決定された位置情報、方向情報、距離情報は、2次元コードから取得されたコードデータにそれぞれ関連付けされて、ゲーム装置30に送られる。なお、複数のゲームカード4が撮像領域5に存在する場合には、それぞれのゲームカード4ごとに、位置情報、方向情報、距離情報、コードデータが関連付けされてゲーム装置30に送られる。また、ゲームシステム1では、撮像装置2により撮像されたフレーム画像をディスプレイ7に表示させるため、フレーム画像自体もゲーム装置30に送られる。ゲーム装置30は、コードデータに対応付けられたキャラクタを読み出し、3次元の仮想空間においてゲームカード4とキャラクタとを重畳させて表示させる。
【0027】
図4は、2次元コードの認識処理の処理手順を示すフローチャートである。2次元コードが撮像装置2により撮像され、その結果得られた1フレーム分の画像データが、フレーム画像取得部40により取得される。2値化処理部50は、画像データに対して2値化処理を行う(S10)。2値化処理では、所定の閾値より大きい輝度を保持する画素の画素値が"0"に符号化され、表示上、その画素は白色とされる。以下においては、このように、画素値が"0"に符号化された画素を、白色画素と称する。一方、閾値以下の輝度値を保持する画素の画素値は、"1"に符号化され、表示上、その画素は黒色とされる。以下においては、このように、画素値が"1"に符号化された画素を、黒色画素と称する。2値化処理部50は、黒色画素が連続して存在する領域を1つの連結領域としてまとめ、抽出された複数の黒色画素連結領域に対して、番号を1から順に昇順で設定(ラベリング)する(S12)。例えば、ラベリングの番号は、連結領域として抽出した順すなわち特定した順に設定されてもよい。番号は、その座標データとともにRAM(図示せず)に記憶させる。図2に示す2次元コードを利用すると、コーナーセル104が方形セル106よりも大きく表示されているため、コーナーセル104を黒色画素連結領域として検出できる確率および座標位置の精度を高くすることができる。
【0028】
基準セル検出部52は、今回対象とする画像データより前に実行された2次元コード認識処理において、認識された2次元コードの表示上の位置、例えば、基準セル100の中央点が、RAMに記憶されているか否かを判定する(S14)。前フレームにおける基準セル100の中央点がRAMに記憶されている場合(S14のY)、記憶されている位置を基準セル検出処理の開始点として設定する(S16)。前の画像フレームにおいて基準セル100が検出されている場合、今回の画像フレームにおいてもゲームカード4の位置は大きく変化していないことが多いため、前フレームの基準セル100の中央点を利用することで、今回のフレームにおいて効率的に基準セル100を検出することが可能となる。一方、2次元コードの位置がRAMに記憶されていない場合(S14のN)、基準セル検出部52は、ディスプレイ7の表示上の中心点を基準セル検出処理の開始点に設定する(S18)。開始点を設定した後、基準セル検出部52は、基準セル100の検出処理を実行する(S20)。
【0029】
図5は、基準セルの検出処理を示すフローチャートである。なお、本フローにて示す画素数は撮像装置2の解像度などに依存し、ここでは理解を容易にするため、一例としての画素数を示すこととする。まず、基準セル検出部52は、図4のS12においてラベリングした黒色画素連結領域の総数Mを読み出し、カウンタの値jを1に初期設定する(S100)。次に、図4のS16またはS18において設定した開始点から、ディスプレイ7の画面上を左回りの渦巻の軌跡に沿って、黒色画素連結領域を探索し、始めに検出した黒色画素連結領域を基準セル候補領域として選択する(S102)。基準セル検出部52は、選択した基準セル候補領域の縁部分を抽出して、短辺および長辺を決定する(S104)。
【0030】
基準セル検出部52は、短辺が所定画素数、例えば20画素以上の画素で構成されているか否かを判定する(S106)。短辺は1.5ブロック分の長さで構成されているが、短辺が20画素より少ない画素で構成されている基準セル100である場合、1ブロックの長さは、さらに少ない数の画素から構成されることとなる。そのため、2次元コードにおける最小の構成要素である方形セル106の一辺は約13画素以下となり、撮像装置2で適切に撮像することはできない。このことより、短辺が20画素より少ない画素で構成されていると判定された場合(S106のN)、S102で選択された黒色画素連結領域は、基準セル100ではないと判断することとし、S116に進む。
【0031】
短辺が20画素以上の画素で構成されていると判定された場合(S106のY)、基準セル検出部52は、基準セル候補領域の長辺が所定画素数、例えば300画素以下の画素で構成されているか否かを判定する(S108)。例えば、長辺が300画素より多い画素で構成されている基準セル100であるとすると、長辺の長さが7に対して1の割合で求められる1ブロックの長さが大きくなり、基準セル100から、8.5ブロック分離れて位置する右下コーナーセル104cおよび左下コーナーセル104dが、撮像装置2にて撮像されなくなる。このことより、長辺が300画素より多い画素で構成されていると判定された場合(S108のN)、S102で選択された黒色画素連結領域は、基準セル100ではないと判断することとし、S116に進む。
【0032】
長辺が300画素以下の画素で構成されていると判定された場合(S108のY)、基準セル検出部52は、基準セル候補領域の黒色画素の総数が、20画素以上かつ1500画素未満であるか否かを判定する(S110)。黒色画素の総数が20画素未満の場合(S110のN)、短辺が20画素より少ない画素で構成された場合と同様の問題が発生し、また、1500画素以上である場合(S110のN)、長辺が300画素より多い画素で構成された場合と同様の問題が発生する。したがって、これらの場合には、基準セル候補領域が基準セル100である可能性が小さいと判断することとし、S116に進む。
【0033】
基準セル候補領域の黒色画素の総数が20画素以上かつ1500画素未満である場合(S110のY)、基準セル検出部52が、基準セル候補領域の方形らしさを判定する(S112)。方形らしさは、既述した特許文献1に記載されるように、基準セル候補領域のモーメントをもとに求められる。方形でないと判定する場合(S112のN)、基準セル候補領域が基準セル100でないと判断することとし、S116に進む。方形であると判定される場合(S112のY)、基準セル検出部52は、基準セル候補領域を基準セル100として設定し(S114)、基準セル候補領域とされた黒色画素連結領域のラベリング番号を、RAMに記憶させる。このようにして、基準セル100を検出することができる。画像データ中に1枚のゲームカード4しか含まれていない場合、基準セル100を検出した時点で、基準セルの検出処理を終了する。一方、ゲームカード4が複数含まれている可能性がある場合には、S116に進む。
【0034】
基準セル検出部52は、カウント値jが基準セル候補領域の総数Mに等しいか否かを判定する(S116)。カウント値jが総数Mに達していない場合(S116のN)、カウント値jを1インクリメントして(S118)、S102のステップに戻る。一方、カウント値jが総数Mに達すると(S116のY)、この基準セル検出処理を終了する。
【0035】
図4に戻って、S20の基準セル検出処理において基準セル100が検出されない場合(S22のN)、ゲームカード4の存在を確認できないため、2次元コードの認識処理を終了する。一方、基準セル100が検出されると(S22のY)、コード部検出処理が実行される(S24)。
【0036】
図6は、コード部の検出処理を示すフローチャートである。まず、コード部検出部54は、図5のS114において設定された基準セル100の総数Nを読み出し、カウンタの値kを1に初期設定する(S200)。なお、S114において設定した基準セル100には、設定した順に番号をふっているものとする。続いて、図4のS12においてラベリングした黒色画素連結領域の総数Mを読み出し、カウンタの値jを1に初期設定する(S202)。コード部検出部54は、カウント値jに対応する番号の黒色画素連結領域を検出し、それを左下隅のコーナーセル候補領域として選択する(S204)。
【0037】
次に、コード部検出部54は、選択した左下隅コーナーセル候補領域が、図4のS20において検出してカウント値kに対応する番号の基準セル100に対して予め設定された探索範囲内に存在するか否かを判定する(S206)。基準セル100と左下隅のコーナーセル104dとの位置関係は図2に示すように予め定められているため、基準セル100の座標データから、左下隅コーナーセルを探索する範囲を絞ることが可能である。なお、基準セル100は横長の矩形状を有するため、長辺側を挟んで対向する2つの位置に探索範囲を設定することが可能となる。探索範囲内に存在しない場合(S206のN)、その黒色画素連結領域は左下コーナーセル104dではないと判断され、S232に進む。探索範囲内に存在する場合(S206のY)、その黒色画素連結領域を左下コーナーセル104dとして設定する(S208)。
【0038】
左下コーナーセル104を設定した後、コード部検出部54は、黒色画素連結領域の番号をカウントする他のカウンタの値lを1に初期設定する(S210)。コード部検出部54は、カウント値lに対応する番号の黒色画素連結領域を検出し、それを右下隅のコーナーセル候補領域として選択する(S212)。
【0039】
次に、コード部検出部54は、S208で設定した左下コーナーセル104dの画素数(面積)と、S212で選択した右下コーナーセル候補領域の画素数(面積)の比を算出し、その比(面積比)が例えば1/6以上または6倍以下であるか否かを判定する(S214)。コーナーセル104は撮像装置2からの距離に応じて取得される画素数が変化する。具体的に、撮像装置2に近ければ大きい面積を有し、離れれば面積は小さくなる。そのため、コーナーセル同士であっても画像データ中の面積は異なるケースが想定される。しかしながら、例えば左下コーナーセルと右下コーナーセルの比が1/6より小さく、または6倍よりも大きくなるようなケース(S214のN)は通常想定しえないため、これらは一つの2次元コードにおけるコーナーセルであるとみなすことはできず、S226に進む。
【0040】
面積比が例えば1/6以上、6倍以下である場合(S214のY)、コード部検出部54は、左下コーナーセル104dの中心点と、S212で選択した右下コーナーセル候補領域の中心点の距離が所定の条件を満たすか否かを判定する(S216)。ここで所定の条件とは、中心点同士の距離が例えば基準セル100の長辺の長さに近似していることであってもよい。所定の条件が成立しなければ(S216のN)、S226にすすみ、所定の条件が成立すると(S216のY)、コード部検出部54は、その黒色画素連結領域を右下コーナーセル104cとして設定する(S218)。
【0041】
以上のように左下コーナーセル104d、右下コーナーセル104cを設定すると、コード部検出部54が、設定した基準セル100、左下コーナーセル104d、右下コーナーセル104cを、ディスプレイ7の画面上のX軸方向およびY軸方向にアフィン変換する(S220)。なお、1ブロックの長さは、S20で設定した基準セル100の長辺または短辺の長さに基づいて算出される。コード部検出部54は、アフィン変換して得られた画像から、コード部110の領域に含まれる黒色画素連結領域をセルとしてマッピングし、コードマップを生成する(S222)。
【0042】
コード部検出部54は、生成したコードマップのセルのうち、4隅のコーナーセル104を検出し、その周りの3ブロック領域が、白色画素とされているか否かを判定する(S224)。コーナーセル104の周囲の3ブロック領域が白色画素で構成されている場合(S224のY)、そのコードマップを2次元コードのコード部110と設定して(S230)、S236に進む。コーナーセル104の周囲の3ブロック領域が白色画素でない場合、S226に進む。
【0043】
S226では、カウント値lが黒色画素連結領域の総数Mに等しいか否かを判定し、カウント値lがMに等しければ(S226のY)、S232に進み、等しくなければ(S226のN)、カウント値lを1インクリメントして(S228)、S212に戻る。
【0044】
S232では、カウント値jが黒色画素連結領域の総数Mに等しいか否かを判定し、カウント値jがMに等しければ(S232のY)、S236に進み、等しくなければ(S232のN)、カウント値jを1インクリメントして(S234)、S204に戻る。
【0045】
S236では、カウント値kが設定した基準セル100の総数Nに等しいか否かを判定し、カウント値kがNに等しくなければ(S236のN)、カウント値kを1インクリメントして(S238)、S202に戻る。これにより、画像データにおいて複数の2次元コードを探索することが可能となる。カウント値kがNに等しくなると(S236のY)、以上により、コード部110の検出処理が終了する。
【0046】
図4に戻って、S24のコード部検出処理においてコード部110が検出されない場合(S26のN)、2次元コードの存在を確認できないため、2次元コードの認識処理を終了する。一方、コード部110が検出されると(S26のY)、コードデータの検証処理が実行される(S28)。
【0047】
図7は、コードデータの検証処理を示すフローチャートである。既述したように、33ビットのコードデータ中、所定のアルゴリズムで生成された9ビットのチェックデータと、24ビットの情報データとが存在し、この処理ではチェックデータを用いて、コードデータを検証する。以下では、所定のアルゴリズムで生成したチェックデータを、そのアルゴリズムに基づいてコードデータからチェックデータを生成して照合することで、コードデータを検証する処理を行う。
【0048】
まず、検証処理部56は、後のステップであるS304、S308で算出される基準値を、1ビット右方向にシフトする回数をカウントするカウンタの値pを1に初期設定する(S300)。次に、検証処理部56は、コード部110のコードマップから、コードデータおよびチェックデータの値を算出する(S302)。
【0049】
検証処理部56は、算出したコードデータの値(ビットストリーム)と、0xFFFFFFとの排他的論理和演算を行い(S304)、その結果得られた値(ビットストリーム)を基準値(基準ビットストリーム)とする。基準ビットストリームのLSB(Least Significant Bit)に"1"が立っているか否かを判定し(S306)、"1"が立っていないと判定した場合(S306のN)、検証処理部56は、基準値(基準ビットストリーム)と、0x8408との排他的論理和演算を行い(S308)、その結果得られた値(ビットストリーム)を新たな基準値(基準ビットストリーム)とし、S310に進む。LSBに"1"がたっている場合(S306のY)、同様にS310に進む。
【0050】
検証処理部56は、S304またはS308において算出した基準値(基準ビットストリーム)を1ビットだけ右にシフトさせ(S310)、カウント値pが、予め定めたシフト回数である24に等しいか否かを判定する(S312)。p=24ではないと判定した場合(S312のN)、カウント値pを1だけインクリメントした後(S314)、S306に戻る。
【0051】
p=24であると判定した場合(S312のY)、算出されたビットストリームと、0x1FFとの論理積演算を行う(S316)。検証処理部56は、論理積演算より得られ値が、算出したチェックデータの値と等しいか否かを判定し(S318)、等しいと判定した場合(S318のY)、図4のS24で検出されたコード部110が、2次元コードとして適正なパターンであるとし、2次元コードのコード部110を確定する(S320)。チェックコードと等しくなければ(S318のN)、コード部110の読み取りに誤りがあったことを判定して、コードデータの検証処理を終了する。なお、図7では1つのコード部110の検証処理のみを示しているが、複数のコード部110が検出されている場合は、それぞれについてこの検証処理を実行する。
【0052】
図4に戻って、S28のコードデータ検出処理においてコード部110が確定されない場合(S30のN)、2次元コードの存在を確認できないため、2次元コードの認識処理を終了する。一方、コード部110が確定されると(S30のY)、コードデータの値、すなわち、2次元コードの値を、例えばRAMに記憶させ、保持し(S32)、2次元コードの認識処理を終了する。
【0053】
以下に、3次元座標系におけるゲームカード4の位置および方向の求め方について説明する。ゲームカード4の仮想3次元座標系の位置および方向を求めるために、本実施例では、撮像装置2の画角、スクリーン解像度、4つのコーナーセル104のスクリーン座標位置、実際のコーナーセル104間の距離を利用する。なお、スクリーンとは、撮像装置2により撮像された画像を表示するディスプレイ7の画面である。
【0054】
(ステップ1)
まず、視点からスクリーン投影面までの距離を求める。ここでは、カメラの画角とスクリーン解像度により、視点からスクリーン投影面までの距離を求める。
カメラの水平方向の画角:θ
スクリーンの水平方向の解像度:W
視点からスクリーン投影面までの距離:P
とすると、以下の計算式が成り立つ。
P=(W×0.5)/tan(θ×0.5)
【0055】
(ステップ2)
次に、視点から各コーナーセル104に伸びる3次元ベクトルを求める。
コーナーセルのスクリーン座標位置:SX、SY
視点からスクリーン投影面までの距離:P
コーナーセルへ伸びる3次元ベクトル:V
とすると、以下の計算式が成り立つ。
V=(SX,SY,P)
なお、スクリーン座標位置は、スクリーンの中央を原点としている。
【0056】
(ステップ3)
視点と、隣り合う2つのコーナーセルの3点が形成する平面の法線ベクトルを求める。この法線ベクトルは、合計で4つ生成される。
視点からコーナーセル104aへ伸びる3次元ベクトル:V1
視点からコーナーセル104bへ伸びる3次元ベクトル:V2
視点からコーナーセル104cへ伸びる3次元ベクトル:V3
視点からコーナーセル104dへ伸びる3次元ベクトル:V4
視点とコーナーセル104a、104bが形成する平面の法線ベクトル:S12
視点とコーナーセル104b、104cが形成する平面の法線ベクトル:S23
視点とコーナーセル104c、104dが形成する平面の法線ベクトル:S34
視点とコーナーセル104d、104aが形成する平面の法線ベクトル:S41
とすると、以下の計算式が成り立つ。
S12=V1×V2
S23=V2×V3
S34=V3×V4
S41=V4×V1
なお、「×」は、外積を指す。
【0057】
(ステップ4)
続いて、ゲームカード4の3次元上での方向(座標軸)を求める。ステップ3で求めた4つの法線ベクトルをもとに、カードの座標軸が求まる。
カードのローカル座標X軸(カード表面に対して左右方向):VX
カードのローカル座標Y軸(カード表面に対して貫く方向):VY
カードのローカル座標Z軸(カード表面に対して上下方向):VZ
とすると、以下の計算式が成り立つ。
VX=S12×S34
VZ=S23×S41
VY=VZ×VX
【0058】
(ステップ5)
最後に、ゲームカード4の3次元上での位置を求める。ステップ4では、ゲームカード4のローカル座標変換マトリクスを求めたが、現実のコーナーセル間の距離が分かれば、カードの位置は容易に求められる。コーナーセル104aの3次元座標位置を変数として表現すると、その変数を使ってコーナーセル104b、104c、104dの3次元座標位置を表すことができる。4つのコーナーセルのスクリーン座標位置は判明しているため、これらの計算式の連立方程式を解くことで、ゲームカード4の3次元座標位置を特定できる。
【0059】
以上の実施例に示したように、図2に示す2次元コードを利用することで、コード部110におけるコーナーセル104の認識率を高めることができるとともに、2次元座標系におけるコーナーセル104の座標位置を正確に求めることが可能となる。具体的には、コーナーセル104を大きく形成することで、コーナーセル104の中心位置を正確に求めることができるため、ゲームカード4の位置を正確に特定できる。また、複数のコーナーセル104の中心位置を正確に求めることで、基準セル100とコーナーセル104との位置関係を正確に把握して、アフィン変換の精度を高めることができ、ゲームカード4の位置やゲームカード4が向いている方向などを正確に特定できる。
【0060】
図8は、ゲームカードの表面に印刷した2次元コードの別の例を示す。ゲームカード4の表面には、所定の形状を有する基準セル100およびコード部110が配置されている。図2の2次元コードと比較すると、図8に示す2次元コードでは、コードデータ部分102を取り囲む複数のコーナーセル104a、104b、104c、104dが円形に形成されている。既述したように、コーナーセル104の2次元座標位置は、コーナーセル104の中心点により特定される。コーナーセル104が丸い形状を有することで、撮像装置2に対するゲームカード4の向きによらず、撮像装置2により撮像されるコーナーセル104の形状は変化しない。そのため、撮像装置2に対する向きによって、コーナーセル104の中心点が変わらず、したがって安定して中心点を取得することが可能となる。これにより、既述したように、ゲームカード4の位置情報、方向情報、距離情報を正確に求めることが可能となる。なお、方形セル106を丸く形成してもよい。また、コーナーセル104を円形にするだけでなく、図2に関して説明したように、方形セル106に対して大きく形成することで、コーナーセル104の座標位置をさらに高精度に求めることが可能となる。
【0061】
図9は、ゲームカードの表面に印刷した2次元コードのさらに別の例を示す。ゲームカード4の表面には、基準セル100およびコード部110が配置されている。図2の2次元コードと比較すると、図9に示す2次元コードでは、所定の形状を有する基準セル100、それぞれ2次元配置することでコードデータを構成する複数の方形セル106、コードデータ部分102の領域を取り囲むように配置される複数のコーナーセル104の少なくとも1つのセルが、他のセルと異なる色を付けられる。例えば、基準セル100に赤色、方形セル106に緑色、コーナーセル104に青色とそれぞれのセルに異なる色を割り当ててもよい。なお、ここで割り当てる色は、撮像装置2において取り込んで、所定の輝度閾値を基準として2値化できる色であればよく、必ずしも人間の目に可視であることは要求されない。使用する撮像装置2の撮像特性が予め分かっている場合は、その特性に合わせてセルを色づけしてもよい。
【0062】
本実施例の2次元コードの認識処理では、図4のS20に示すように、まず基準セル100を検出することが条件となる。2次元コードの認識処理全体のなかでも、この基準セル検出処理の負荷は高く、したがって、画像データ中から基準セル100を効率的に抽出できることが好ましい。そこで、複数種類のセルのうち、少なくとも基準セル100には、方形セル106およびコーナーセル104とは異なる色をつけることが好ましい。
【0063】
撮像装置2の受光面の前面にはRGBのカラーフィルタが配置されており、フレーム画像ごとに、RGBのそれぞれの画素値が256階調で表現されたデータとして記録される。この例において、2値化処理部50が、2値化処理するためのRGBの画素値の範囲を設定する機能をもつ。基準セル100が赤色で塗りつぶされている場合、図4のS10の2値化処理において、2値化処理部50が、基準セル用のRGBの画素値の範囲を設定する。例えば、2値化処理部50は、赤色(R)の画素値の範囲を200〜255、緑色(G)の画素値の範囲を0〜100、青色(B)の画素値の範囲を0〜100と設定する。この設定に基づいて、2値化処理部50は、この範囲内にあるRGBの複合画素を抽出して、その画素値を"1"に符号化する。例えば、R画素値が225、G画素値が30、B画素値が50となる複合画素の画素値は"1"に符号化され、2値画像としての色が黒色に設定される。一方、RGBの画素値がこれらの範囲内にない複合画素の画素値は"0"に符号化され、2値画像としての色が白色に設定される。このように、赤色の画素を画像データから抽出することで、図4のS12において、2値画像において黒色画素となる連結領域をラベリングすることができる。黒色画素として抽出する画素を画像データにおいて特定の色、ここでは赤色のものに限定することで、抽出するノイズの数を少なくでき、基準セル検出部52は、フレーム画像の2値化データから基準セル100を検出する時間を短縮できる。
【0064】
なお、画素値はカラーフィルタ特性の影響を受けるため、カラーフィルタの特性も加味した画素値の範囲設定を行うために、ゲームカード4を台3に配置した状態で、基準セル100の赤色の画素値を調査してもよい。これにより、撮像装置2において取得される基準セル100のRGBの画素値を特定することができ、特定した画素値に若干のマージンを与えた範囲で2値化処理を行うことで、検出する黒色画素連結領域の数を飛躍的に少なくすることが可能となる。特に、ゲームシステム1においては、リアルタイムで処理することが好ましいため、基準セル100を効率的に抽出できることには、大きなメリットがある。
【0065】
なお、他の種類のセル、例えばコーナーセル104、方形セル106に色づけを施した場合も同様である。コーナーセル104を青色とする場合、図4のS10において、2値化処理部50が、コーナーセル用のRGBの画素値の範囲を設定する。例えば、2値化処理部50は、赤色(R)の画素値の範囲を0〜100、緑色(G)の画素値の範囲を0〜100、青色(B)の画素値の範囲を200〜255と設定する。この設定に基づいて、2値化処理部50は、この範囲内にあるRGBの複合画素を抽出して、その画素値を"1"に符号化する。例えば、R画素値が20、G画素値が30、B画素値が240となる複合画素の画素値は"1"に符号化され、2値画像としての色が黒色に設定される。一方、RGBの画素値がこれらの範囲内にない複合画素の画素値は"0"に符号化され、2値画像としての色が白色に設定される。このように、青色の画素を画像データから抽出することで、図4のS12において、2値画像において黒色画素となる連結領域をラベリングすることができる。
【0066】
このように、青色の強い画像を黒色画像に変換する2値化処理を行ってから、S12において黒色画素連結領域としてラベリングされたものを、コード部検出部54が、図6のフローに示すコーナーセル候補領域として選択するために利用する。黒色画素として抽出する画素を画像データにおいて特定の色、ここでは青色のものに限定することで、抽出するノイズの数を少なくでき、コード部検出部54は、フレーム画像の2値化データからコーナーセル104を検出する時間を短縮できる。方形セル106を緑色とした場合は、図4のS10において緑色の強い画像を黒色画像に変換する2値化処理を行ってから、S12において黒色画素連結領域としてラベリングされたものを、図6のS222のコードマップ生成処理に利用する。3種類のセルに異なる色づけをした場合、2値化処理をする回数が増えることになるが、2値化処理した後の連結領域を探索する処理量が大幅に低減されるため、全体的な効率化を実現できる。
【0067】
図9に示した2次元コードは、色づけしたセルを有しており、色づけしたセルは、大きく形成されてもよく、また図8に示すように、丸く形成されてもよい。
【0068】
図10は、ゲームカードの表面に印刷した2次元コードのさらに別の例を示す。ゲームカード4の表面には、基準セル100およびコード部110が配置されている。図10に示す2次元コードは、図9に示した2次元コードの一つの実施態様である。図10に示す2次元コードは、所定の形状を有する基準セル100、それぞれ2次元配置することでコードデータを構成する複数の方形セル106、コードデータ部分102の領域を取り囲むように配置される複数のコーナーセル104を備える。4つのコーナーセル104a、104b、104c、104dには全て同一の配色がなされるが、基準セル100および方形セル106とは異なる色を付けられる。
【0069】
ゲームカード4の美観性を向上するために、コーナーセル104は、ゲームカード4の側縁まで設けられる。コーナーセル104はゲームカード4の4隅の近くに配置され、また方形セル106よりも大きく形成されるため、ゲームカード4の中で、4つのコーナーセル104は目立つ存在となる。本来、コーナーセル104は、方形セル106の存在位置を特定するために設けられるが、ゲームカード4として使用される以上は、美観性も重要である。そのためゲームカード4を縁取る枠縁107を、コーナーセル104の位置でコーナーセル104を取り囲むように内側に折れ曲げてデザイン的に変化をもたせることで、コーナーセル104に意匠性をもたせることとしている。
【0070】
このようにコーナーセル104をゲームカード4の側縁に設ける場合、コーナーセル104は、黒色以外の色をつけられることが好ましい。仮に黒色を割り当てた場合、ゲームカード4を撮像装置2で撮像して2値化処理を施すと、ゲームカード4の縁部に生じる影も黒色画素として変換されることがあり、黒色画素に変換された2つのコーナーセル104が、ゲームカード4の縁部の影で連結される状況が想定される。2値化処理により2つのコーナーセル104が連結されると、連結した黒色画素から2つのコーナーセル104を分離することは難しくなる。そのため、コーナーセル104に黒色以外の色を割り当て、2値化する際のRGBの閾値、すなわちRGBの範囲を適切に設定して2値化処理することで、ゲームカード4の縁部の影によりコーナーセル104が連結される事態を回避することが可能となる。このように、コーナーセル104をゲームカード4の側縁まで設けた場合には、影の色以外の色、すなわち黒色以外の色を割り当てることで、コーナーセル104を適切に抽出することが可能となる。
【0071】
また、図10に示すゲームカード4においては、コーナーセル104が三角形状に構成される。この形状は、正三角形であってもよい。コーナーセル104を正三角形とすることで、コーナーセル104の認識精度を高めることができる。
【0072】
図11(a)〜図11(c)は、取得した黒色画素がコーナーセル104であるか否かを判別する方法を説明するための説明図である。既述したように、コーナーセル104は、フレーム画像を2値化したあと、黒色画素の連結領域をもとに判別される。2値化されたフレーム画像は、2次元のXY座標上に表現されるため、この連結領域の座標値を利用して、連結領域がコーナーセル104であるか否かを判別することができる。
【0073】
図11(a)は、フレーム画像から抽出された連結領域の一例を示す。この連結領域109aは、X軸方向の幅をH1、Y軸方向の幅をV1とする。なお、この幅は、2次元座標上の画素数でカウントする。この連結領域109aの画素数をC1とした場合、この連結領域109aがコーナーセル104の候補であるか否かは、以下の式で判別される。
α×H1×V1≦ C1 ≦β×H1×V1(α<β<1)
例えばαは0.3、βは0.7である。
連結領域109aの画素数C1が、上式を満たす場合、この連結領域109aをコーナーセル104の候補であると判別してもよい。当然のことながら、定数α、βの値は、他の値に設定してもよい。
【0074】
図11(b)は、フレーム画像から抽出された連結領域の別の例を示す。この連結領域109bがコーナーセル104の候補であるか否かは、同様に以下の式で判別される。この連結領域109bの画素数をC2、X軸方向の幅をH2、Y軸方向の幅をV2とする。
α×H2×V2≦ C2 ≦β×H2×V2(α<β<1)
図11(a)および図11(b)に示す連結領域は、それぞれ判別式を満たしており、コーナーセル104の候補であると判別された例である。図11(a)および図11(b)に示されるように、フレーム画像において、ゲームカード4は様々な角度で撮像領域5中に配置されている可能性があるが、上記した判別式を利用することで、三角形状のコーナーセル104を適切に認識することが可能となる。
【0075】
図11(c)は、フレーム画像から抽出された連結領域のさらに別の例を示す。この場合、連結領域109cの画素数C3は、α×H3(X軸方向の幅)×V3(Y軸方向の幅)よりも小さい。すなわち、
C3 < α×H3×V3
の関係が成立する。これは、判別式(α×H3×V3≦ C3 ≦β×H3×V3)を満足するものではないため、図11(c)に示す連結領域109cは、コーナーセル104ではないことが判別される。
【0076】
以上のように、コーナーセル104の形状を三角形とすることで、2次元座標上の座標値を利用して、簡単にコーナーセル104の候補を抽出することができる。またコーナーセル104の形状を正三角形とすると、他の三角形状と比較して、上記判別式で判定する際の方向依存性を低減できるため、コーナーセル104の認識精度をより高めることができる。
なお、図10に示すゲームカード4においては、方形セル106で構成されるコードデータ部分102を、カード下方のコーナーセル104c、104dの間に配置する。これにより、ゲームカード4の中央部分にスペースを作ることができ、そこにキャラクタの絵などを印刷することが可能となる。
【0077】
図12は、ゲームカードの表面に印刷した2次元コードのさらに別の例を示す。図12に示すゲームカード4では、図10に示すゲームカード4と同様に、コーナーセル104がゲームカード4の側縁から設けられている。このコーナーセル104は三角形状に形成され、基準セル100およびコードデータ部分102a、102bとは異なる色を付けられる。
【0078】
図12に示すゲームカード4では、方形セル106を設ける領域が2つに分離される。ここでは、2つのコードデータ部分102a、102bが、4つのコーナーセル104a、104b、104c、104dより取り囲まれる領域以外の部分に配置される。コードデータ部分102aは、基準セル100とゲームカード4の上縁との間に形成され、コードデータ部分102bは、コーナーセル104cおよび104dを結んだラインとゲームカード4の下縁との間に形成される。なお、コーナーセル104cおよび104dを結ぶラインとは、カード内向きの三角形頂点同士を結んだラインである。コードデータ部分102aおよびコードデータ部分102bを、4つのコーナーセル104で囲まれる領域の外に配置することで、ゲームカード4の中央領域のスペースを広くとることができ、そこにキャラクタの絵などを印刷することが可能となる。コードデータ部分102aおよび102bは、それぞれ12ビットの情報を記録することができ、したがって合計24ビットの情報量を保持できる。なお、ゲームカード4の下方に配置されたコードデータ部分102bは、基準セル100と誤認識されることを防ぐために、所定のビット長、例えば3ビット以上連続して着色されないようにすることが望ましい。
【0079】
図12の方形セル106を認識する際には、既に基準セル100と、左下および右下のコーナーセル104d、104cが検出されているため、これらの近傍を探索することで、コードデータ部分102aおよび102bを容易に検出することができる。すなわち、コードデータ部分102aは、基準セル100に対してコーナーセル104cおよび104dの反対側に存在し、コードデータ部分102bは、コーナーセル104cおよび104dに対して基準セル100の反対側に存在する。基準セル100とコードデータ部分102aとを近傍に設定し、またコーナーセル104cおよび104dとコードデータ部分102bとを近傍に設定することで、コードデータ部分102の探索効率を高めることが可能となる。
【0080】
なお、図12のゲームカード4においては、コードデータ部分102aおよび102bとが2つに分離した配置を示したが、コードデータ部分102aおよび102bは、隣接して配置されてもよい。すなわち、コードデータ部分102aおよび102bは、基準セル100とゲームカード4の上縁の間に配置されてもよく、またコーナーセル104dおよび104cとゲームカード4の下縁の間に配置されてもよい。
【0081】
なお以上は、ゲームカード4を台3上で動かしているが、台3にゲーム用マットを置いて、その上でゲームカード4を動かしてもよい。
図13は、ゲーム用カードを配置するためのゲーム用マットを示す。図1を参照して、ゲーム用マット300は、撮像装置2の撮像領域5に入るように台3に置かれる。ゲーム用マット300は、フェルト生地などの柔らかい素材で作製されて、使用しない間はコンパクトに丸めて収納できることが好ましい。
【0082】
ゲーム用マット300には、複数の仕切り線304により、9つのマス302a、302b、302c、302d、302e、302f、302g、302h、302i(以下、総称する場合は、「マス302」と呼ぶ)が形成されている。ゲーム用マット300は、ゲームアプリケーションに応じて構成され、それぞれのマス302は、ゲームカード4を配置する区画を形成する。1人以上のユーザがゲームカード4をいずれかのマス302に置くと、画像解析装置20が、配置されたマス302を特定してゲームカード4の2次元コードを認識し、ゲーム装置30が、配置されたマスに応じたゲームストーリーを展開してもよい。図13に示すゲーム用マット300では3×3のマス302が形成されているが、マス302の数は、これに限るものではない。ユーザがゲームカード4を動かしてよい領域を「プレイエリア」と呼ぶと、図13に示すゲーム用マット300においては、マス302が形成された正方形の領域がプレイエリア306を形成する。ゲーム用マット300は、その全体が撮像領域5に入るように配置される必要はないが、少なくともプレイエリア306は撮像領域5に入っている必要がある。なお、ゲームカード4を自由に動かしてもよいゲームアプリケーションにおいては、マス302は形成されなくてもよい。
【0083】
ゲーム用マット300において、プレイエリア306の4隅に、段階的に明度が変化するグラデーション領域310a、310b、310c、310d(以下、総称する場合は、「グラデーション領域310」と呼ぶ)が設けられる。色には、色相、明度、彩度の3つの属性があるが、グラデーション領域310は、一つの色相の明度を変化させることで構成され、彩度については変化させなくてもよい。グラデーション領域310の外縁は円形であり、グラデーション領域310の中心から外縁に向かう方向に、高明度から低明度に明度が同心円状に段階的に変化している。
【0084】
図14は、グラデーション領域の外観を示す。グラデーション領域310は、一つの色相で構成され、その色相において段階的に明度を変化させて構成される。色相は、赤、緑、青といった色合いの違いを表し、明度は明るさの違いを表す。ここではグラデーション領域310が色相をもち、すなわち有彩色で表現される場合を想定している。なお、白、黒、グレーなどの無彩色には色相は存在していないが、グラデーション領域310を、白から黒に明度を段階的に変化して構成することも可能である。グラデーション領域310における明度の相違は、RGBフィルタを介してデジタル化される際、輝度の相違として取得される。
【0085】
このように、グラデーション領域310の外縁312の明度が低く、中心314の明度は高く設定される。すなわち、このグラデーション領域310は、外側が濃い有彩色の領域をもち、内側が白く構成される。4つのグラデーション領域310は、4つ全てを同色で構成してもよいが、少なくとも1つの色を変えることでゲーム用マット300の向きを定めるための指標として利用することができる。例えば、3つのグラデーション領域310a、310b、310cを同一の色相で構成し、1つのグラデーション領域310dを別の色相で構成してもよい。このとき、4つのグラデーション領域310を検出することができれば、グラデーション領域310a、310b、310cに対するグラデーション領域310dの位置が既知であるため、ゲーム用マット300の向きを特定することが可能となる。
【0086】
グラデーション領域310は、さらに、ゲームカード4の基準セル100、コーナーセル104および/または方形セル106の画像を2値化して抽出する際のRGBの画素値の閾値を決定するために利用される。例えば、コーナーセル104の色相が緑であり、所定の明度を有して構成されるものとする。このとき、グラデーション領域310の色相を緑に設定し、グラデーションの一部に、コーナーセル104と同一の明度をもつ領域を形成する。したがって、コーナーセル104と同一の明度をもつセル明度領域316が、グラデーション領域310の中心314から外縁312の間の所定位置に設定される。好適には、セル明度領域316は、中心314と外縁312の中間地点に同心円状に形成される。したがって、グラデーション領域310の半径方向において、セル明度領域316と中心314の間には、セル明度領域316よりも明度の高い領域が設けられ、またセル明度領域316と外縁312の間には、セル明度領域316よりも明度の低い領域が設けられる。
【0087】
コーナーセル104と、グラデーション領域310のセル明度領域316とが、同一色相(G)で同一の輝度(階調)をもち、環境光などの影響がない場合には、Gフィルタを介して取得されるG画素値が、例えば127で表現されるものとする。2値化処理部50は、2値化処理するためにRGBの画素値の範囲を設定するが、コーナーセル104の画素値が予め分かっている場合には、理想的には、2値化閾値をコーナーセル104の画素値近傍で設定して、コーナーセル104よりも画素値の低い(すなわち明度の高い)ものを、できるだけ抽出しないように範囲設定することが好ましい。この場合、理論的には、2値化処理部50が、例えば閾値を120として、G画素値の範囲を120〜255に設定することで、コーナーセル104を抽出でき、G画素値が120に満たない画像を2値化処理により”0”に変換できる。2値化処理の際のG画素値の範囲を狭くすることで、他のノイズを低減できる。
【0088】
しかしながら、実際の環境下では、照明があったり、また太陽光が入るなどして、撮像装置2により取得されるコーナーセル104は、理論値(127)から異なることが多い。なお、「理論値」は、本実施例を説明するために便宜上使用する用語であって、基準となる環境下で画像データから抽出される画素値を意味する。2値化するために設定する画素値の範囲は、狭ければ狭いほど、後処理の負荷を低減できるが、一方で、環境光の影響により実際に取得される画素値が理論値とは異なってくるために、2値化する画素値の範囲が狭ければ、その範囲から外れる可能性が生じる。そのため、本実施例のゲームシステム1では、グラデーション領域310を利用して、2値化する際の画素値範囲にキャリブレーションを施し、環境光などの影響を加味した現実使用環境下での画素値範囲を設定する。
【0089】
図15は、画像解析装置の別の構成を示す。画像解析装置20は、フレーム画像取得部40および実オブジェクト抽出部42を備える。実オブジェクト抽出部42は、2値化処理部50、領域抽出部60、RGB調整部62を備える。図3に示したブロック図とは異なり、図15では、2値化する際の画素値の範囲をキャリブレーションする構成が示されている。この画像解析装置20の処理機能は、CPU、メモリ、メモリにロードされたプログラムなどによって実現され、ここではそれらの連携によって実現される構成を描いている。プログラムは、画像解析装置20に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。図示の例では、画像解析装置20のCPUが、フレーム画像取得部40、実オブジェクト抽出部42としての機能をもつ。
【0090】
フレーム画像取得部40が、撮像装置2にて撮像された実空間のフレーム画像を取得する。撮像装置2は、周期的にフレーム画像を取得し、好適には1/60秒間隔でフレーム画像を生成する。撮像領域5には、ゲーム用マット300と、ゲーム用マット300上に置かれたゲームカード4が配置されており、したがってフレーム画像は、ゲーム用マット300とゲームカード4を含んでいる。
【0091】
実オブジェクト抽出部42は、フレーム画像から実オブジェクト画像を抽出する。ここでは、コーナーセル104を2値化する際のRGBの画素値の範囲を調整することを目的とするため、抽出する実オブジェクト画像は、ゲーム用マット300におけるグラデーション領域310である。以下では、コーナーセル104が所定の明度をもった緑色で構成されており、グラデーション領域310が、その所定の明度を含んだ緑色のグラデーションとして形成されている場合について説明する。
【0092】
2値化処理部50は、2値化するRGBの範囲を設定して、フレーム画像を2進数のビット表現に変換する。具体的に、2値化処理部50は、緑色のグラデーションが施されたグラデーション領域310a、310b、310cを抽出するために、G画素値の範囲を120〜255、R画素値の範囲を0〜20、B画素値の範囲を0〜20に設定し、このRGBの画素値の範囲内にあるRGBの複合画素を抽出する。RBについて画素値の範囲を0としないのは、カラーフィルタの特性などを考慮するためである。2値化処理部50は、設定したRGBの画素値の範囲内にある複合画素を抽出して、その画素値を”1”とする。
【0093】
領域抽出部60は、フレーム画像の2値化データから、ゲーム用マット300のグラデーション領域310を抽出する。グラデーション領域310は、中心部分のG画素値が低く、外周部分のG画素値が高いグラデーションを形成している。2値化処理の結果、グラデーション領域310は、中心部分の複合画素値が0、外周部分の複合画素値が1のビット表現に変換され、中心部分が空白となるドーナツ形状となる。そこで、領域抽出部60は、2値化されたデータの中からドーナツ形状を検出する。2値化処理の結果、グラデーション領域310以外にドーナツ形状に変換される領域は少ないと考えられるため、グラデーション領域310を円形に形成することは、グラデーション領域310の候補を絞る意味においてメリットが高い。
【0094】
ここで、4つのグラデーション領域310は、正方形の頂点に配置されている。緑色用の2値化処理および黒色用の2値化処理の結果、複数のドーナツ領域が検出された場合に、それらのドーナツ領域が正方形の頂点にくる関係となるものを抽出し、それらをグラデーション領域310として特定する。緑色のグラデーション領域310a、310b、310cとして特定されたドーナツ領域の形状は、2値化閾値のキャリブレーションのためにRGB調整部62に送られる。
【0095】
図16(a)〜図16(c)は、グラデーション領域として特定されたドーナツ領域を示す。以下では、緑色のグラデーション領域310a〜310cをもとに、2値化して同一色のコーナーセル104を検出する際のG画素値の範囲をキャリブレーションする方法について説明する。G画素値の2値化閾値を120とし、抽出範囲を120〜255とする。RGB調整部62は、グラデーション領域310の2値化データをもとに、2値化処理部50において2値化する際のRGBの画素値の範囲を調整する。
【0096】
図16(a)は、内径と外径との比が約1:2、正確には121:256となるドーナツ領域を示す。この場合は、撮像装置2により取り込んだフレーム画像において環境光の影響が一切なく、グラデーション領域310が理想的に2値化されている。このドーナツ領域において、方形セル106と同一階調をもつセル明度領域316は、中心と外縁とを1:1に分割した地点に存在し、ドーナツ領域の黒色部分に含まれている。したがって、G画素値の閾値を120に設定することで、コーナーセル104を好適に抽出することが可能となる。
【0097】
図16(b)は、ドーナツ領域の外径に対して内径が非常に小さくなった状態を示す。この場合、中心と外縁とを1:1に分割した地点に存在するセル明度領域316は、ドーナツ領域の黒色部分に含まれているが、その内側の階調の低い領域までもが検出されている。例えば、環境光に緑色光が含まれている場合に、緑色光とグラデーション領域310の緑色とが重なり合って、検出光のG成分が強くなることがある。このとき、ドーナツ領域の画素値は、グラデーション領域310の画素値の理論値よりも強い値で検出され、そのため、2値化されて”1”に符号化される領域が必要以上に増えることになる。
【0098】
したがって、2値化処理部50が、G画素値の範囲を120〜255に設定してゲームカード4の画像を2値化すると、コーナーセル104を抽出することはできるが、コーナーセル104よりも薄い緑色の領域も同様に抽出することになる。コーナーセル104の候補が増えると、それだけコーナーセル104の特定処理に時間がかかるため、コーナーセル104の候補が少なくなるように、2値化する際の画素値の範囲を設定することが好ましい。
【0099】
RGB調整部62は、グラデーション領域310のグラデーションで表現される階調の分布と、コーナーセル104と同一の階調が存在する領域の位置を予め保持している。したがって、RGB調整部62は、図16(b)に示すドーナツ領域の形状を受け取ると、設定した閾値(120)が低かったことを判定し、閾値を高くする必要があることを決定する。
【0100】
例えばRGB調整部62は、グラデーション領域310の階調分布をもとに、ドーナツ領域における中心から内径までの距離(すなわち、白色領域の半径)から、その地点におけるグラデーション領域310のG画素値の理論値を求める。その地点のG画素値の理論値は、本来、120よりも低いG画素値をとるが、図16(b)に示すドーナツ領域では、その地点のG画素値が120として検出されている。したがって、RGB調整部62は、グラデーション領域310上のG画素値の理論値と、設定された閾値120との差を、環境光による上昇分として、閾値の上げ量を定めてもよい。例えば、ドーナツ領域における白色領域と黒色領域の境界のグラデーション領域310上のG画素値の理論値を60とした場合、設定閾値120との差は60となるため、RGB調整部62は、2値化処理におけるG画素値の閾値を180として、2値化処理部50に供給する。
【0101】
図16(c)は、ドーナツ領域の内径が外径の半分よりも大きくなった状態を示す。この場合、中心と外縁とを1:1に分割した地点に存在するセル明度領域316は、ドーナツ領域の白色部分に含まれており、したがって、コーナーセル104と同一階調のセル明度領域316は、2値化処理により”0”に変換されていることになる。例えば、環境が非常に暗いような場合に、グラデーション領域310の理論値よりも画素値が低く検出されることがある。
【0102】
したがって、2値化処理部50が、G画素値の範囲を120〜255に設定してゲームカード4を2値化すると、コーナーセル104を抽出できないことになる。そのため、G画素値の抽出範囲を広げて、コーナーセル104と同一の画素値をもつセル明度領域316を抽出できるように、2値化処理のG画素値の範囲を再設定する必要がある。
【0103】
RGB調整部62は、図16(c)に示すドーナツ領域の形状を受け取ると、設定した閾値(120)が高かったことを判定し、閾値を低くする必要があることを決定する。例えばRGB調整部62は、グラデーション領域310の階調分布をもとに、ドーナツ領域における中心から内径までの距離(すなわち、白色領域の半径)から、その地点におけるグラデーション領域310のG画素値の理論値を求める。その地点のG画素値の理論値は、本来、120よりも高いG画素値をとるが、図16(c)に示すドーナツ領域では、その地点のG画素値が120として検出されている。したがって、RGB調整部62は、グラデーション領域310上のG画素値の理論値と、設定された閾値120との差を、閾値の下げ量に定めてもよい。例えば、ドーナツ領域における白色領域と黒色領域の境界のグラデーション領域310上のG画素値の理論値を180とした場合、設定閾値120との差は60となるため、RGB調整部62は、2値化処理におけるG画素値の閾値を60として、2値化処理部50に供給する。
【0104】
2値化処理部50は、RGB調整部62より調整された画素値の範囲を受け取ると、その範囲をもとにフレーム画像の2値化処理を実行する。領域抽出部60は、2値化されたデータから、グラデーション領域310に対応するドーナツ領域を検出して、RGB調整部62に供給する。RGB調整部62は、ドーナツ領域をもとに、2値化処理の閾値を調整し、2値化処理部50にフィードバックする。以上のキャリブレーション処理は、ドーナツ領域が、図16(a)に示すような状態となるまで実行されてもよい。
【0105】
なお、以上は、2値化する際のG画素値の範囲(閾値)をキャリブレーションする場合について説明したが、他のR、B画素値についても同様である。緑色のグラデーション領域310a、310b、310cの2値化処理時のRB画素値の閾値を20にデフォルト設定しているが、RGB調整部62は、必要に応じてこのデフォルト値を調整することが好ましい。
【0106】
なお、グラデーション領域310a、310b、310cは、空間的に異なる3点に存在しており、環境光などの影響により、その位置によって2値化処理時の最適な画素値の範囲が異なることも考えられる。外部照明の向きにより、グラデーション領域310a、310bの付近が明るく、グラデーション領域310cの付近が暗いような場合、グラデーション領域310cにあわせて、2値化する際の閾値を低く設定してもよい。これにより、ゲームカード4の配置位置にかかわらず、コーナーセル104を検出することが可能となる。
【0107】
しかしながら、グラデーション領域310a、310b付近では、2値化閾値が低く設定されることで、コーナーセル104以外の様々な領域を抽出する可能性が高まる。そのため、それぞれのグラデーション領域310の位置における最適な2値化閾値を求め、この3点の2値化閾値から、プレイエリア306中の任意の位置における2値化閾値を導出してもよい。例えば、グラデーション領域310bにおける2値化閾値をT1、グラデーション領域310cにおける2値化閾値をT2とした場合、グラデーション領域310bおよび310cを結ぶライン上では、2値化閾値をT1からT2までリニアに変化させるように設定してもよい。他の任意の位置についても同様であり、3点の2値化閾値からの距離に応じて、それぞれの位置における2値化閾値が算出されてもよい。これにより、照明が近い場合など、カードの位置によって照明環境が異なり、撮影されるコード色が大きく異なるような場合であっても、適切にコードを認識することが可能となる。
【0108】
本実施例のキャリブレーション処理は、定期的に行われることが好ましい。なお、環境に変化がない場合には、頻繁にキャリブレーション処理が行われる必要性は高くないため、環境の変化を検知するセンサを別途設け、そのセンサにより環境変化が検知された場合に、キャリブレーション処理が行われるようにしてもよい。なお、環境変化には、ゲーム用マット300を動かした場合や、外部照明などの明るさが変わった場合などがある。
【0109】
キャリブレーション処理の方法として、グラデーション領域310の所定位置における実際の画素値と、撮影の結果得られる測定値との差分から、2値化閾値を補正してもよいし、グラデーション領域310を2値化したときのドーナツ領域の形状が特定の形状になるように、2値化閾値を補正してもよい。後者の場合、例えば、ドーナツ領域の大小に応じて、2値化閾値をインクリメント又はデクリメントし、ドーナツ領域の形状が理論値に近づくように調整してもよい。また、単に1つの2値化閾値をもとに2値化するだけでなく、上限と下限の2つの閾値を設け、その範囲に入るか否かによって2値化してもよい。例えば、画素値が85以上170以下であれば「0」、それ以外であれば「1」として2値化してもよい。この場合、ある2値化閾値の大小によりグラデーション領域310を2値化して、グラデーション領域310の外径を把握してから、上限と下限の2つの閾値により特定される中間領域のドーナツ領域の実測結果を取得し、その形状が理論値に近づくように上限と下限を補正してもよい。また、上述した例と濃淡が逆転していてもよく、その場合、反転処理をしてから2値化を行ってもよい。
【0110】
図1に示したように、撮像装置2は斜め上方からゲーム用マット300を撮像するので、グラデーション領域310の形状が真円であったとしても、楕円形として認識される可能性がある。この場合であっても、上述したように、ゲーム用マット300の位置や方向などを予め把握することが可能であるから、この情報をもとにグラデーション領域310の認識結果であるドーナツ領域の形状を補正してから、上述したキャリブレーション処理を行ってもよい。
【0111】
また、ゲーム用マット300が固定的に設置されてからキャリブレーション処理を行うことが好ましいので、例えば、グラデーション領域310の認識処理を複数回行って位置が変わらないことを確認してから、または、所定時間をおいて再度認識処理を行って位置が変わらないことを確認してから、キャリブレーション処理を開始してもよい。
【0112】
図17は、実施例における画像データの伝送システムを示す。画像データ伝送システム200は、画像データを生成する画像データ生成装置201、画像データを送信する送信局204、送信された画像データを受信する端末装置202を有して構成される。端末装置202は、受信した画像データを表示するための表示装置203を有する。画像データ伝送システム200は、無線通信によりデータを伝送しているが、有線通信によりデータを伝送するものであってもよい。
【0113】
画像データ生成装置201は、上述した2次元コード、すなわち図2、図8、図9、図10および図12に関して説明した2次元コードの画像データを、端末装置202の表示装置203に表示させるためのデータフォーマットにしたがって生成する。画像データ生成装置201は、図2に示す2次元コードの画像データとして、複数の方形セルを表示装置203上の所定の座標位置に表示させるためのデータと、所定の座標位置に表示される複数の方形セルを取り囲む座標位置に複数のコーナーセルを表示させるためのデータを生成してもよい。画像データ生成装置201は、表示装置203上で、コーナーセルが方形セルよりも大きく表示されるように、コーナーセルと方形セルのデータを設定する。
【0114】
画像データ生成装置201は、図8に示す2次元コードの画像データとして、複数の方形セルを表示装置203上の所定の座標位置に表示させるためのデータと、所定の座標位置に表示される複数の方形セルを取り囲む座標位置に複数のコーナーセルを表示させるためのデータを生成してもよい。画像データ生成装置201は、コーナーセルが丸い形状に表示されるように、コーナーセルのデータを設定する。
【0115】
画像データ生成装置201は、図9に示す2次元コードの画像データとして、所定の形状を有する基準セルを表示装置上の所定の位置に表示させるためのデータと、基準セルに対して定められる領域の範囲内で複数の多辺形セルを表示させるためのデータと、領域を取り囲む座標位置に複数のコーナーセルを表示させるためのデータを生成してもよい。画像データ生成装置201は、基準セル、多辺形セル、コーナーセルの少なくとも一つのセルの色が、他のセルの色と異なるように設定する。また画像データ生成装置201は、図10、図12に示す2次元コードの画像データとして、所定の形状を有する基準セルを表示装置上の所定の位置に表示させるためのデータと、同一形状を有する複数のコーナーセルを表示させるためのデータと、所定の領域に複数のコーナーセルを表示させるためのデータを生成してもよい。画像データ生成装置201は、コーナーセルの色を、基準セルおよび多辺形セルとは異なる色に設定する。
【0116】
送信局204は、画像データ生成装置201により生成された画像データを、端末装置202に送信する。画像データは、端末装置202において解凍可能な形式で圧縮されていることが好ましく、また端末装置202におけるブラウザ機能などにより表示されるデータフォーマットで作成されている必要がある。送信局204は、例えばセルごとの画像データを表示座標位置に対応付けて送信することで、データ送信量を削減することが可能となる。端末装置202は、表示装置203上に2次元コードを表示する。図1のゲームシステム1において、ユーザは、表示装置203に表示された2次元コードを、ゲームカード4の代わりに使用して、撮像装置2により読み取らせることができる。これにより、ユーザは、ゲームカード4を有していなくても、画像データを端末装置202にダウンロードすることで、ゲームシステム1に参加することができる。
【0117】
以上、本発明を実施例をもとに説明した。この実施例は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【図面の簡単な説明】
【0118】
【図1】実施例にかかるゲームシステムの構成を示す図である。
【図2】ゲームカードの表面に印刷した2次元コードを示す図である。
【図3】画像解析装置の構成を示す図である。
【図4】2次元コードの認識処理の処理手順を示すフローチャートである。
【図5】基準セルの検出処理を示すフローチャートである。
【図6】コード部の検出処理を示すフローチャートである。
【図7】コードデータの検証処理を示すフローチャートである。
【図8】ゲームカードの表面に印刷した2次元コードの別の例を示す図である。
【図9】ゲームカードの表面に印刷した2次元コードのさらに別の例を示す図である。
【図10】ゲームカードの表面に印刷した2次元コードのさらに別の例を示す図である。
【図11】(a)〜(c)は、コーナーセルであるか否かを判別する方法を説明するための説明図である。
【図12】ゲームカードの表面に印刷した2次元コードのさらに別の例を示す図である。
【図13】ゲーム用カードを配置するためのゲーム用マットを示す図である。
【図14】グラデーション領域の外観を示す図である。
【図15】画像解析装置の別の構成を示す図である。
【図16】(a)〜(c)は、グラデーション領域として特定されたドーナツ領域を示す図である。
【図17】実施例における画像データの伝送システムを示す図である。
【符号の説明】
【0119】
1・・・ゲームシステム、2・・・撮像装置、4・・・ゲームカード、6・・・出力装置、7・・・ディスプレイ、10・・・画像処理装置、20・・・画像解析装置、30・・・ゲーム装置、40・・・フレーム画像取得部、42・・・実オブジェクト抽出部、44・・・状態決定部、50・・・2値化処理部、52・・・基準セル検出部、54・・・コード部検出部、56・・・検証処理部、60・・・領域抽出部、62・・・RGB調整部、100・・・基準セル、102・・・コードデータ部分、104・・・コーナーセル、106・・・方形セル、108・・・領域、110・・・コード部、200・・・画像データ伝送システム、201・・・画像データ生成装置、202・・・端末装置、203・・・表示装置、204・・・送信局。
【技術分野】
【0001】
本発明は、複数のセルを2次元配置することでコードデータを表現する技術に関する。
【背景技術】
【0002】
近年、2次元コードをカメラで撮像してコードデータを認識し、そのコードデータに対応付けられた所定の処理を実行させる技術が普及している。1次元バーコードと比較すると、2次元コードの方がコード化できる情報量が多く、現在では様々な種類の2次元コードが登場するようになっている。2次元コードのコードデータは、画像データから効率よく且つ正確に読み取られる必要がある。このような状況をふまえて、従来、2次元コードの画像認識に関する技術を提案するものがある(例えば、特許文献1参照)。
【特許文献1】特開2000−82108号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
画像データの解像度が高ければ、2次元コードの情報量を多く取得でき、コードデータの高い認識率を実現することができる。しかしながら、カメラによっては解像度の低いものもあり、そのような場合であっても、コードデータの認識率を高めることが好ましい。また、撮像して取得された画像データには、外部の環境光などの影響が含まれているため、取得した画像データを2値化する際にその影響を考慮して、2値化する画素値の範囲を好適に設定することが好ましい。
本発明は、精度よく認識することのできるカードなどの物体を提供することを目的とする。また本発明は、画像データを2値化する際の画素値の範囲を好適に設定する技術を提供することを目的とする。
【課題を解決するための手段】
【0004】
上記課題を解決するために、本発明のある態様の物体は、 所定の形状を有する基準セルと、 それぞれを2次元配置することでコードデータを構成する複数の多辺形セルと、 同一形状を有する複数のコーナーセルと、を備える。コーナーセルは、基準セルおよび多辺形セルとは異なる色を付けられる。この物体はカードなどの2次元的なオブジェクトであってもよく、また3次元オブジェクトであってもよい。
【0005】
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0006】
本発明によると、精度よく認識することのできる2次元コードを提供することができる。
【発明を実施するための最良の形態】
【0007】
図1は、本発明の実施例にかかるゲームシステム1の構成を示す。ゲームシステム1は、撮像装置2、画像処理装置10および出力装置6を備える。画像処理装置10は、画像解析装置20およびゲーム装置30を備える。画像解析装置20およびゲーム装置30は別装置として構成されてもよいが、一体として構成されてもよい。撮像装置2は、CCD撮像素子またはMOS撮像素子などから構成されるビデオカメラであり、例えば320画素×240画素の解像度を有する。撮像装置2は実空間を所定の周期で撮像して、周期ごとのフレーム画像を生成する。撮像領域5は撮像装置2により撮像される範囲であり、撮像装置2の高さや向きを調整することで、撮像領域5の位置や大きさが調整される。ゲームプレイヤは、撮像領域5において、実オブジェクトであるゲームカード4を指で動かす。ゲームカード4は、自身を一意に識別するための2次元コードを有して構成される。
【0008】
出力装置6は、表示装置であるディスプレイ7を有する。出力装置6は、さらにスピーカ(図示せず)を有して構成されてもよい。基本的に画像処理装置10は、撮像装置2により撮像されたフレーム画像をディスプレイ7に表示させ、その際に、ゲームカード4上に仮想オブジェクトであるキャラクタを重畳するように表示制御する。プレイヤは、ディスプレイ7を見ることで、ゲームカード4が撮像領域5に入っているか容易に確認でき、入っていない場合には、ゲームカード4の位置をずらしたり、また撮像装置2の向きを調整して、撮像装置2にゲームカード4を撮像させるようにする。
【0009】
実施例のゲームアプリケーションでは、プレイヤがゲームカード4に対して所定の操作を施すことにより、キャラクタを動作させる。このゲームアプリケーションの性質上、プレイヤにゲームカード4とキャラクタとの一体性を認識させることが好ましく、そのため、キャラクタの画像を、ゲームカード4に重ね合わせて表示させている。撮像領域5内でゲームカード4をゆっくりと移動させると、キャラクタは、ゲームカード4の上に乗った状態を維持しながら、ゲームカード4の動きに追従して一緒に移動する。
【0010】
以上のキャラクタの動きは、画像処理装置10により制御される。まず、画像解析装置20は、撮像装置2において取得されたフレーム画像から、ゲームカード4の画像情報を抽出する。さらに、画像解析装置20は、ゲームカード4の画像情報から、ゲームカード4に印刷された2次元コードを抽出する。このとき、画像解析装置20は、ゲームカード4の2次元コードから、ゲームカード4の空間における位置情報、方向情報、距離情報などを決定する。
【0011】
後述するが、画像解析装置20は、フレーム画像中のゲームカード4の画像における基準セルおよび4隅のコーナーセルを用いて、撮像装置2とゲームカード4との距離やゲームカード4の向きなどを計算して求める。これにより、キャラクタは、ゲームカード4上にて前方を向くように表示制御される。また、2次元コードにおける複数の方形セルの配列から、ゲームカード4のコードデータを取得する。
【0012】
図1では、ゲームカード4が台3に単に置かれている状態を示しているが、ゲームカード4は、例えば台3に対して斜めに傾けられたり、また台3よりも上に持ち上げられたりしてもよい。画像解析装置20は、ゲームカード4が傾斜された状態、または、台3からの高さを変化された状態を画像解析により認識する機能をもつ。画像解析装置20において画像解析された結果は、ゲーム装置30に送られる。なお、撮像装置2において撮像されたフレーム画像が、ゲーム装置30に送られて、ゲーム装置30側で画像解析を行ってもよい。この場合、画像処理装置10は、ゲーム装置30のみで構成されることになる。
【0013】
ゲーム装置30は、画像解析装置20における画像解析結果をもとに、ディスプレイ7の表示画面上で、キャラクタをゲームカード4の上に位置するように表示制御する。キャラクタは、ゲームカード4から抽出したコードデータに対応付けられて、ゲームシーンごとに適宜割り当てられてもよい。この場合、ゲームシーンが切り替わると、表示されるキャラクタも切り替わることになる。
【0014】
図2は、ゲームカードの表面に印刷した2次元コードを示す。ゲームカード4の表面には、複数の所定形状をもつ多角形セルが所定の配列規則にしたがって2次元的に配置されている。具体的に、ゲームカード4の2次元コードは、撮像装置2により撮像された画像データからゲームカード4の認識処理を行うための基準となる基準セル100、複数の方形セル106を2次元配置することでコードデータを構成するコードデータ部分102、コードデータ部分102を取り囲むように配置される複数のコーナーセル104a、104b、104c、104d(以下、総称する場合は、「コーナーセル104」と呼ぶ)を備えている。コードデータ部分102およびコーナーセル104は、2次元コードにおけるコード部110に存在している。
【0015】
基準セル100、方形セル106およびコーナーセル104は、それぞれ所定の形状を有して構成される。図2に示す2次元コードでは、各セルが黒色に塗りつぶされて存在している。図2において、領域108は、複数の方形セル106が連結して構成されたものであり、他の方形セル106とともにコードデータを構成している。方形セル106は、同一の形状、ここでは正方形の形状をもつ。実施例のゲームカード4が複数存在する場合に、基準セル100およびコーナーセル104の配置および大きさは共通とされ、コードデータ部分102における方形セル106の配列により、ゲームカード4を一意に特定することができる。
【0016】
以下に、本実施例における2次元コードの詳細を説明する。正方形状の方形セル106の1辺を1ブロックとすると、基準セル100は、7ブロック分の横方向の長辺と1.5ブロック分の縦方向の短辺で形成される長方形状のセル(エレメント)として構成される。実施例において、縦1ブロックと横1ブロックで形成される正方形状の領域をブロック領域と呼ぶ。
【0017】
コードデータ部分102は、7ブロック×7ブロックで囲まれる領域に形成される。この領域の一辺は、基準セル100の長辺に平行であり且つ長辺から1ブロック離れた位置に配置される。図示のように、コード部110は、8ブロック×8ブロックで囲まれる領域であり、コードデータ部分102は、コード部110が形成される領域に含まれる。実際に方形セル106が配置される領域は、7ブロック×7ブロックで囲まれる領域の4隅における2ブロック×2ブロックの領域を除いた部分とする。すなわち、4隅の2ブロック×2ブロックの領域には方形セル106を配置させないこととし、したがって、(7×7−2×2×4)=33のブロック領域に方形セル106が配置されて、コードデータを構成する。
【0018】
コーナーセル104aは、コード部110の左上隅の領域に配置される。この左上隅の領域は、コードデータ部分102として7ブロック×7ブロックで囲まれる領域の左上隅の2ブロック×2ブロックの領域の範囲内であってよく、またその範囲内からはみ出してもよい。図示の例では、コーナーセル104aが、コードデータ部分102における左上隅の2ブロック×2ブロックの領域から縦に0.5ブロック分、横に0.5ブロック分だけはみ出して配置されている。すなわち、コーナーセル104aは、コード部110において2.5ブロック×2.5ブロックで囲まれる左上隅の領域に存在している。同様に、コーナーセル104bはコード部110の右上隅の領域に配置され、コーナーセル104cはコード部110の右下隅の領域に配置され、コーナーセル104dはコード部110の左下隅の領域に配置される。図示の例では、各コーナーセル104は方形に形成され、具体的には1辺を1.5ブロック分の長さとする正方形のセルとして形成されている。
【0019】
コードデータ部分102は、1ブロック領域を1ビットとすると、合計で33ビット分の情報をコード化することができる。この33ビット中、9ビット分は、コードデータが、正しいコードデータであることを確かめるためのチェックデータを構成する。従って、コードデータ部分102には、24ビット分の情報がコード化されている。
【0020】
方形セル106は、コードデータを表現する重要なエレメントであり、画像解析装置20において正確に画像認識される必要がある。そのためには、全ての方形セル106を大きく形成することが理想的であるが、当然のことながらゲームカード4の大きさには制約があり、方形セル106を大きくすることは、それだけコードデータ部分102を構成する方形セル106の数を減じる結果となる。これは情報のビット数を減らすことに相当し、好ましくない。
【0021】
以上のことから、本実施例において、コーナーセル104は、方形セル106よりも大きな面積を有して構成される。後述するが、本実施例の画像解析装置20において、4隅のコーナーセル104は、コードデータ部分102を検出するために利用される。逆に言えば、4隅のコーナーセル104を検出できなければ、方形セル106を検出することもできないため、この2次元コードでは、方形セル106よりもコーナーセル104をまず確実に認識する必要がある。4隅のコーナーセル104を方形セル106よりも大きく形成することで、4隅のコーナーセル104の認識率を高めることができる。
【0022】
画像解析装置20は、フレーム画像中の基準セル100の候補を抽出して所定の基準を満たすものを基準セル100として仮定し、その仮定した基準セル100の近傍に4つのコーナーセル104が存在しているか否かを判定する。4つのコーナーセル104を認識すると、画像解析装置20は、4つのコーナーセル104により囲まれた領域、すなわちコードデータ部分102における方形セル106の配置を読み取り、コードデータを取得する。これにより、仮定した基準セル100が真の基準セル100であったことが判断され、ゲームカード4を認識することができる。画像解析装置20は、撮像装置2を基準(原点)とするゲームカード4の仮想3次元座標系における位置と方向を計算して求める。
【0023】
図3は、画像解析装置の構成を示す。画像解析装置20は、フレーム画像取得部40、実オブジェクト抽出部42および状態決定部44を備える。実オブジェクト抽出部42は、2値化処理部50、基準セル検出部52、コード部検出部54、検証処理部56を備える。本実施例における画像解析装置20の処理機能は、CPU、メモリ、メモリにロードされたプログラムなどによって実現され、ここではそれらの連携によって実現される構成を描いている。プログラムは、画像解析装置20に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。図示の例では、画像解析装置20のCPUが、フレーム画像取得部40、実オブジェクト抽出部42、状態決定部44としての機能をもつ。
【0024】
フレーム画像取得部40が、撮像装置2にて撮像された実空間のフレーム画像を取得する。撮像装置2は、周期的にフレーム画像を取得し、好適には1/60秒間隔でフレーム画像を生成する。
【0025】
実オブジェクト抽出部42は、フレーム画像から実オブジェクト画像、すなわちゲームカード4の画像を抽出する。具体的に、2値化処理部50がフレーム画像を2進数のビット表現に変換して、フレーム画像の情報をビットのオンとオフで表現する。基準セル検出部52は、フレーム画像の2値化データから、基準セル100を検出する。基準セル100を検出すると、コード部検出部54が、基準セル100の位置をもとにコード部110を検出し、検証処理部56が、コード部110に含まれるコードデータの検証処理を行う。
【0026】
状態決定部44は、設定した座標系における実オブジェクトの状態を決定し、具体的には、ゲームカード4の位置、方向および撮像装置2からの距離を決定する。状態決定部44において決定された位置情報、方向情報、距離情報は、2次元コードから取得されたコードデータにそれぞれ関連付けされて、ゲーム装置30に送られる。なお、複数のゲームカード4が撮像領域5に存在する場合には、それぞれのゲームカード4ごとに、位置情報、方向情報、距離情報、コードデータが関連付けされてゲーム装置30に送られる。また、ゲームシステム1では、撮像装置2により撮像されたフレーム画像をディスプレイ7に表示させるため、フレーム画像自体もゲーム装置30に送られる。ゲーム装置30は、コードデータに対応付けられたキャラクタを読み出し、3次元の仮想空間においてゲームカード4とキャラクタとを重畳させて表示させる。
【0027】
図4は、2次元コードの認識処理の処理手順を示すフローチャートである。2次元コードが撮像装置2により撮像され、その結果得られた1フレーム分の画像データが、フレーム画像取得部40により取得される。2値化処理部50は、画像データに対して2値化処理を行う(S10)。2値化処理では、所定の閾値より大きい輝度を保持する画素の画素値が"0"に符号化され、表示上、その画素は白色とされる。以下においては、このように、画素値が"0"に符号化された画素を、白色画素と称する。一方、閾値以下の輝度値を保持する画素の画素値は、"1"に符号化され、表示上、その画素は黒色とされる。以下においては、このように、画素値が"1"に符号化された画素を、黒色画素と称する。2値化処理部50は、黒色画素が連続して存在する領域を1つの連結領域としてまとめ、抽出された複数の黒色画素連結領域に対して、番号を1から順に昇順で設定(ラベリング)する(S12)。例えば、ラベリングの番号は、連結領域として抽出した順すなわち特定した順に設定されてもよい。番号は、その座標データとともにRAM(図示せず)に記憶させる。図2に示す2次元コードを利用すると、コーナーセル104が方形セル106よりも大きく表示されているため、コーナーセル104を黒色画素連結領域として検出できる確率および座標位置の精度を高くすることができる。
【0028】
基準セル検出部52は、今回対象とする画像データより前に実行された2次元コード認識処理において、認識された2次元コードの表示上の位置、例えば、基準セル100の中央点が、RAMに記憶されているか否かを判定する(S14)。前フレームにおける基準セル100の中央点がRAMに記憶されている場合(S14のY)、記憶されている位置を基準セル検出処理の開始点として設定する(S16)。前の画像フレームにおいて基準セル100が検出されている場合、今回の画像フレームにおいてもゲームカード4の位置は大きく変化していないことが多いため、前フレームの基準セル100の中央点を利用することで、今回のフレームにおいて効率的に基準セル100を検出することが可能となる。一方、2次元コードの位置がRAMに記憶されていない場合(S14のN)、基準セル検出部52は、ディスプレイ7の表示上の中心点を基準セル検出処理の開始点に設定する(S18)。開始点を設定した後、基準セル検出部52は、基準セル100の検出処理を実行する(S20)。
【0029】
図5は、基準セルの検出処理を示すフローチャートである。なお、本フローにて示す画素数は撮像装置2の解像度などに依存し、ここでは理解を容易にするため、一例としての画素数を示すこととする。まず、基準セル検出部52は、図4のS12においてラベリングした黒色画素連結領域の総数Mを読み出し、カウンタの値jを1に初期設定する(S100)。次に、図4のS16またはS18において設定した開始点から、ディスプレイ7の画面上を左回りの渦巻の軌跡に沿って、黒色画素連結領域を探索し、始めに検出した黒色画素連結領域を基準セル候補領域として選択する(S102)。基準セル検出部52は、選択した基準セル候補領域の縁部分を抽出して、短辺および長辺を決定する(S104)。
【0030】
基準セル検出部52は、短辺が所定画素数、例えば20画素以上の画素で構成されているか否かを判定する(S106)。短辺は1.5ブロック分の長さで構成されているが、短辺が20画素より少ない画素で構成されている基準セル100である場合、1ブロックの長さは、さらに少ない数の画素から構成されることとなる。そのため、2次元コードにおける最小の構成要素である方形セル106の一辺は約13画素以下となり、撮像装置2で適切に撮像することはできない。このことより、短辺が20画素より少ない画素で構成されていると判定された場合(S106のN)、S102で選択された黒色画素連結領域は、基準セル100ではないと判断することとし、S116に進む。
【0031】
短辺が20画素以上の画素で構成されていると判定された場合(S106のY)、基準セル検出部52は、基準セル候補領域の長辺が所定画素数、例えば300画素以下の画素で構成されているか否かを判定する(S108)。例えば、長辺が300画素より多い画素で構成されている基準セル100であるとすると、長辺の長さが7に対して1の割合で求められる1ブロックの長さが大きくなり、基準セル100から、8.5ブロック分離れて位置する右下コーナーセル104cおよび左下コーナーセル104dが、撮像装置2にて撮像されなくなる。このことより、長辺が300画素より多い画素で構成されていると判定された場合(S108のN)、S102で選択された黒色画素連結領域は、基準セル100ではないと判断することとし、S116に進む。
【0032】
長辺が300画素以下の画素で構成されていると判定された場合(S108のY)、基準セル検出部52は、基準セル候補領域の黒色画素の総数が、20画素以上かつ1500画素未満であるか否かを判定する(S110)。黒色画素の総数が20画素未満の場合(S110のN)、短辺が20画素より少ない画素で構成された場合と同様の問題が発生し、また、1500画素以上である場合(S110のN)、長辺が300画素より多い画素で構成された場合と同様の問題が発生する。したがって、これらの場合には、基準セル候補領域が基準セル100である可能性が小さいと判断することとし、S116に進む。
【0033】
基準セル候補領域の黒色画素の総数が20画素以上かつ1500画素未満である場合(S110のY)、基準セル検出部52が、基準セル候補領域の方形らしさを判定する(S112)。方形らしさは、既述した特許文献1に記載されるように、基準セル候補領域のモーメントをもとに求められる。方形でないと判定する場合(S112のN)、基準セル候補領域が基準セル100でないと判断することとし、S116に進む。方形であると判定される場合(S112のY)、基準セル検出部52は、基準セル候補領域を基準セル100として設定し(S114)、基準セル候補領域とされた黒色画素連結領域のラベリング番号を、RAMに記憶させる。このようにして、基準セル100を検出することができる。画像データ中に1枚のゲームカード4しか含まれていない場合、基準セル100を検出した時点で、基準セルの検出処理を終了する。一方、ゲームカード4が複数含まれている可能性がある場合には、S116に進む。
【0034】
基準セル検出部52は、カウント値jが基準セル候補領域の総数Mに等しいか否かを判定する(S116)。カウント値jが総数Mに達していない場合(S116のN)、カウント値jを1インクリメントして(S118)、S102のステップに戻る。一方、カウント値jが総数Mに達すると(S116のY)、この基準セル検出処理を終了する。
【0035】
図4に戻って、S20の基準セル検出処理において基準セル100が検出されない場合(S22のN)、ゲームカード4の存在を確認できないため、2次元コードの認識処理を終了する。一方、基準セル100が検出されると(S22のY)、コード部検出処理が実行される(S24)。
【0036】
図6は、コード部の検出処理を示すフローチャートである。まず、コード部検出部54は、図5のS114において設定された基準セル100の総数Nを読み出し、カウンタの値kを1に初期設定する(S200)。なお、S114において設定した基準セル100には、設定した順に番号をふっているものとする。続いて、図4のS12においてラベリングした黒色画素連結領域の総数Mを読み出し、カウンタの値jを1に初期設定する(S202)。コード部検出部54は、カウント値jに対応する番号の黒色画素連結領域を検出し、それを左下隅のコーナーセル候補領域として選択する(S204)。
【0037】
次に、コード部検出部54は、選択した左下隅コーナーセル候補領域が、図4のS20において検出してカウント値kに対応する番号の基準セル100に対して予め設定された探索範囲内に存在するか否かを判定する(S206)。基準セル100と左下隅のコーナーセル104dとの位置関係は図2に示すように予め定められているため、基準セル100の座標データから、左下隅コーナーセルを探索する範囲を絞ることが可能である。なお、基準セル100は横長の矩形状を有するため、長辺側を挟んで対向する2つの位置に探索範囲を設定することが可能となる。探索範囲内に存在しない場合(S206のN)、その黒色画素連結領域は左下コーナーセル104dではないと判断され、S232に進む。探索範囲内に存在する場合(S206のY)、その黒色画素連結領域を左下コーナーセル104dとして設定する(S208)。
【0038】
左下コーナーセル104を設定した後、コード部検出部54は、黒色画素連結領域の番号をカウントする他のカウンタの値lを1に初期設定する(S210)。コード部検出部54は、カウント値lに対応する番号の黒色画素連結領域を検出し、それを右下隅のコーナーセル候補領域として選択する(S212)。
【0039】
次に、コード部検出部54は、S208で設定した左下コーナーセル104dの画素数(面積)と、S212で選択した右下コーナーセル候補領域の画素数(面積)の比を算出し、その比(面積比)が例えば1/6以上または6倍以下であるか否かを判定する(S214)。コーナーセル104は撮像装置2からの距離に応じて取得される画素数が変化する。具体的に、撮像装置2に近ければ大きい面積を有し、離れれば面積は小さくなる。そのため、コーナーセル同士であっても画像データ中の面積は異なるケースが想定される。しかしながら、例えば左下コーナーセルと右下コーナーセルの比が1/6より小さく、または6倍よりも大きくなるようなケース(S214のN)は通常想定しえないため、これらは一つの2次元コードにおけるコーナーセルであるとみなすことはできず、S226に進む。
【0040】
面積比が例えば1/6以上、6倍以下である場合(S214のY)、コード部検出部54は、左下コーナーセル104dの中心点と、S212で選択した右下コーナーセル候補領域の中心点の距離が所定の条件を満たすか否かを判定する(S216)。ここで所定の条件とは、中心点同士の距離が例えば基準セル100の長辺の長さに近似していることであってもよい。所定の条件が成立しなければ(S216のN)、S226にすすみ、所定の条件が成立すると(S216のY)、コード部検出部54は、その黒色画素連結領域を右下コーナーセル104cとして設定する(S218)。
【0041】
以上のように左下コーナーセル104d、右下コーナーセル104cを設定すると、コード部検出部54が、設定した基準セル100、左下コーナーセル104d、右下コーナーセル104cを、ディスプレイ7の画面上のX軸方向およびY軸方向にアフィン変換する(S220)。なお、1ブロックの長さは、S20で設定した基準セル100の長辺または短辺の長さに基づいて算出される。コード部検出部54は、アフィン変換して得られた画像から、コード部110の領域に含まれる黒色画素連結領域をセルとしてマッピングし、コードマップを生成する(S222)。
【0042】
コード部検出部54は、生成したコードマップのセルのうち、4隅のコーナーセル104を検出し、その周りの3ブロック領域が、白色画素とされているか否かを判定する(S224)。コーナーセル104の周囲の3ブロック領域が白色画素で構成されている場合(S224のY)、そのコードマップを2次元コードのコード部110と設定して(S230)、S236に進む。コーナーセル104の周囲の3ブロック領域が白色画素でない場合、S226に進む。
【0043】
S226では、カウント値lが黒色画素連結領域の総数Mに等しいか否かを判定し、カウント値lがMに等しければ(S226のY)、S232に進み、等しくなければ(S226のN)、カウント値lを1インクリメントして(S228)、S212に戻る。
【0044】
S232では、カウント値jが黒色画素連結領域の総数Mに等しいか否かを判定し、カウント値jがMに等しければ(S232のY)、S236に進み、等しくなければ(S232のN)、カウント値jを1インクリメントして(S234)、S204に戻る。
【0045】
S236では、カウント値kが設定した基準セル100の総数Nに等しいか否かを判定し、カウント値kがNに等しくなければ(S236のN)、カウント値kを1インクリメントして(S238)、S202に戻る。これにより、画像データにおいて複数の2次元コードを探索することが可能となる。カウント値kがNに等しくなると(S236のY)、以上により、コード部110の検出処理が終了する。
【0046】
図4に戻って、S24のコード部検出処理においてコード部110が検出されない場合(S26のN)、2次元コードの存在を確認できないため、2次元コードの認識処理を終了する。一方、コード部110が検出されると(S26のY)、コードデータの検証処理が実行される(S28)。
【0047】
図7は、コードデータの検証処理を示すフローチャートである。既述したように、33ビットのコードデータ中、所定のアルゴリズムで生成された9ビットのチェックデータと、24ビットの情報データとが存在し、この処理ではチェックデータを用いて、コードデータを検証する。以下では、所定のアルゴリズムで生成したチェックデータを、そのアルゴリズムに基づいてコードデータからチェックデータを生成して照合することで、コードデータを検証する処理を行う。
【0048】
まず、検証処理部56は、後のステップであるS304、S308で算出される基準値を、1ビット右方向にシフトする回数をカウントするカウンタの値pを1に初期設定する(S300)。次に、検証処理部56は、コード部110のコードマップから、コードデータおよびチェックデータの値を算出する(S302)。
【0049】
検証処理部56は、算出したコードデータの値(ビットストリーム)と、0xFFFFFFとの排他的論理和演算を行い(S304)、その結果得られた値(ビットストリーム)を基準値(基準ビットストリーム)とする。基準ビットストリームのLSB(Least Significant Bit)に"1"が立っているか否かを判定し(S306)、"1"が立っていないと判定した場合(S306のN)、検証処理部56は、基準値(基準ビットストリーム)と、0x8408との排他的論理和演算を行い(S308)、その結果得られた値(ビットストリーム)を新たな基準値(基準ビットストリーム)とし、S310に進む。LSBに"1"がたっている場合(S306のY)、同様にS310に進む。
【0050】
検証処理部56は、S304またはS308において算出した基準値(基準ビットストリーム)を1ビットだけ右にシフトさせ(S310)、カウント値pが、予め定めたシフト回数である24に等しいか否かを判定する(S312)。p=24ではないと判定した場合(S312のN)、カウント値pを1だけインクリメントした後(S314)、S306に戻る。
【0051】
p=24であると判定した場合(S312のY)、算出されたビットストリームと、0x1FFとの論理積演算を行う(S316)。検証処理部56は、論理積演算より得られ値が、算出したチェックデータの値と等しいか否かを判定し(S318)、等しいと判定した場合(S318のY)、図4のS24で検出されたコード部110が、2次元コードとして適正なパターンであるとし、2次元コードのコード部110を確定する(S320)。チェックコードと等しくなければ(S318のN)、コード部110の読み取りに誤りがあったことを判定して、コードデータの検証処理を終了する。なお、図7では1つのコード部110の検証処理のみを示しているが、複数のコード部110が検出されている場合は、それぞれについてこの検証処理を実行する。
【0052】
図4に戻って、S28のコードデータ検出処理においてコード部110が確定されない場合(S30のN)、2次元コードの存在を確認できないため、2次元コードの認識処理を終了する。一方、コード部110が確定されると(S30のY)、コードデータの値、すなわち、2次元コードの値を、例えばRAMに記憶させ、保持し(S32)、2次元コードの認識処理を終了する。
【0053】
以下に、3次元座標系におけるゲームカード4の位置および方向の求め方について説明する。ゲームカード4の仮想3次元座標系の位置および方向を求めるために、本実施例では、撮像装置2の画角、スクリーン解像度、4つのコーナーセル104のスクリーン座標位置、実際のコーナーセル104間の距離を利用する。なお、スクリーンとは、撮像装置2により撮像された画像を表示するディスプレイ7の画面である。
【0054】
(ステップ1)
まず、視点からスクリーン投影面までの距離を求める。ここでは、カメラの画角とスクリーン解像度により、視点からスクリーン投影面までの距離を求める。
カメラの水平方向の画角:θ
スクリーンの水平方向の解像度:W
視点からスクリーン投影面までの距離:P
とすると、以下の計算式が成り立つ。
P=(W×0.5)/tan(θ×0.5)
【0055】
(ステップ2)
次に、視点から各コーナーセル104に伸びる3次元ベクトルを求める。
コーナーセルのスクリーン座標位置:SX、SY
視点からスクリーン投影面までの距離:P
コーナーセルへ伸びる3次元ベクトル:V
とすると、以下の計算式が成り立つ。
V=(SX,SY,P)
なお、スクリーン座標位置は、スクリーンの中央を原点としている。
【0056】
(ステップ3)
視点と、隣り合う2つのコーナーセルの3点が形成する平面の法線ベクトルを求める。この法線ベクトルは、合計で4つ生成される。
視点からコーナーセル104aへ伸びる3次元ベクトル:V1
視点からコーナーセル104bへ伸びる3次元ベクトル:V2
視点からコーナーセル104cへ伸びる3次元ベクトル:V3
視点からコーナーセル104dへ伸びる3次元ベクトル:V4
視点とコーナーセル104a、104bが形成する平面の法線ベクトル:S12
視点とコーナーセル104b、104cが形成する平面の法線ベクトル:S23
視点とコーナーセル104c、104dが形成する平面の法線ベクトル:S34
視点とコーナーセル104d、104aが形成する平面の法線ベクトル:S41
とすると、以下の計算式が成り立つ。
S12=V1×V2
S23=V2×V3
S34=V3×V4
S41=V4×V1
なお、「×」は、外積を指す。
【0057】
(ステップ4)
続いて、ゲームカード4の3次元上での方向(座標軸)を求める。ステップ3で求めた4つの法線ベクトルをもとに、カードの座標軸が求まる。
カードのローカル座標X軸(カード表面に対して左右方向):VX
カードのローカル座標Y軸(カード表面に対して貫く方向):VY
カードのローカル座標Z軸(カード表面に対して上下方向):VZ
とすると、以下の計算式が成り立つ。
VX=S12×S34
VZ=S23×S41
VY=VZ×VX
【0058】
(ステップ5)
最後に、ゲームカード4の3次元上での位置を求める。ステップ4では、ゲームカード4のローカル座標変換マトリクスを求めたが、現実のコーナーセル間の距離が分かれば、カードの位置は容易に求められる。コーナーセル104aの3次元座標位置を変数として表現すると、その変数を使ってコーナーセル104b、104c、104dの3次元座標位置を表すことができる。4つのコーナーセルのスクリーン座標位置は判明しているため、これらの計算式の連立方程式を解くことで、ゲームカード4の3次元座標位置を特定できる。
【0059】
以上の実施例に示したように、図2に示す2次元コードを利用することで、コード部110におけるコーナーセル104の認識率を高めることができるとともに、2次元座標系におけるコーナーセル104の座標位置を正確に求めることが可能となる。具体的には、コーナーセル104を大きく形成することで、コーナーセル104の中心位置を正確に求めることができるため、ゲームカード4の位置を正確に特定できる。また、複数のコーナーセル104の中心位置を正確に求めることで、基準セル100とコーナーセル104との位置関係を正確に把握して、アフィン変換の精度を高めることができ、ゲームカード4の位置やゲームカード4が向いている方向などを正確に特定できる。
【0060】
図8は、ゲームカードの表面に印刷した2次元コードの別の例を示す。ゲームカード4の表面には、所定の形状を有する基準セル100およびコード部110が配置されている。図2の2次元コードと比較すると、図8に示す2次元コードでは、コードデータ部分102を取り囲む複数のコーナーセル104a、104b、104c、104dが円形に形成されている。既述したように、コーナーセル104の2次元座標位置は、コーナーセル104の中心点により特定される。コーナーセル104が丸い形状を有することで、撮像装置2に対するゲームカード4の向きによらず、撮像装置2により撮像されるコーナーセル104の形状は変化しない。そのため、撮像装置2に対する向きによって、コーナーセル104の中心点が変わらず、したがって安定して中心点を取得することが可能となる。これにより、既述したように、ゲームカード4の位置情報、方向情報、距離情報を正確に求めることが可能となる。なお、方形セル106を丸く形成してもよい。また、コーナーセル104を円形にするだけでなく、図2に関して説明したように、方形セル106に対して大きく形成することで、コーナーセル104の座標位置をさらに高精度に求めることが可能となる。
【0061】
図9は、ゲームカードの表面に印刷した2次元コードのさらに別の例を示す。ゲームカード4の表面には、基準セル100およびコード部110が配置されている。図2の2次元コードと比較すると、図9に示す2次元コードでは、所定の形状を有する基準セル100、それぞれ2次元配置することでコードデータを構成する複数の方形セル106、コードデータ部分102の領域を取り囲むように配置される複数のコーナーセル104の少なくとも1つのセルが、他のセルと異なる色を付けられる。例えば、基準セル100に赤色、方形セル106に緑色、コーナーセル104に青色とそれぞれのセルに異なる色を割り当ててもよい。なお、ここで割り当てる色は、撮像装置2において取り込んで、所定の輝度閾値を基準として2値化できる色であればよく、必ずしも人間の目に可視であることは要求されない。使用する撮像装置2の撮像特性が予め分かっている場合は、その特性に合わせてセルを色づけしてもよい。
【0062】
本実施例の2次元コードの認識処理では、図4のS20に示すように、まず基準セル100を検出することが条件となる。2次元コードの認識処理全体のなかでも、この基準セル検出処理の負荷は高く、したがって、画像データ中から基準セル100を効率的に抽出できることが好ましい。そこで、複数種類のセルのうち、少なくとも基準セル100には、方形セル106およびコーナーセル104とは異なる色をつけることが好ましい。
【0063】
撮像装置2の受光面の前面にはRGBのカラーフィルタが配置されており、フレーム画像ごとに、RGBのそれぞれの画素値が256階調で表現されたデータとして記録される。この例において、2値化処理部50が、2値化処理するためのRGBの画素値の範囲を設定する機能をもつ。基準セル100が赤色で塗りつぶされている場合、図4のS10の2値化処理において、2値化処理部50が、基準セル用のRGBの画素値の範囲を設定する。例えば、2値化処理部50は、赤色(R)の画素値の範囲を200〜255、緑色(G)の画素値の範囲を0〜100、青色(B)の画素値の範囲を0〜100と設定する。この設定に基づいて、2値化処理部50は、この範囲内にあるRGBの複合画素を抽出して、その画素値を"1"に符号化する。例えば、R画素値が225、G画素値が30、B画素値が50となる複合画素の画素値は"1"に符号化され、2値画像としての色が黒色に設定される。一方、RGBの画素値がこれらの範囲内にない複合画素の画素値は"0"に符号化され、2値画像としての色が白色に設定される。このように、赤色の画素を画像データから抽出することで、図4のS12において、2値画像において黒色画素となる連結領域をラベリングすることができる。黒色画素として抽出する画素を画像データにおいて特定の色、ここでは赤色のものに限定することで、抽出するノイズの数を少なくでき、基準セル検出部52は、フレーム画像の2値化データから基準セル100を検出する時間を短縮できる。
【0064】
なお、画素値はカラーフィルタ特性の影響を受けるため、カラーフィルタの特性も加味した画素値の範囲設定を行うために、ゲームカード4を台3に配置した状態で、基準セル100の赤色の画素値を調査してもよい。これにより、撮像装置2において取得される基準セル100のRGBの画素値を特定することができ、特定した画素値に若干のマージンを与えた範囲で2値化処理を行うことで、検出する黒色画素連結領域の数を飛躍的に少なくすることが可能となる。特に、ゲームシステム1においては、リアルタイムで処理することが好ましいため、基準セル100を効率的に抽出できることには、大きなメリットがある。
【0065】
なお、他の種類のセル、例えばコーナーセル104、方形セル106に色づけを施した場合も同様である。コーナーセル104を青色とする場合、図4のS10において、2値化処理部50が、コーナーセル用のRGBの画素値の範囲を設定する。例えば、2値化処理部50は、赤色(R)の画素値の範囲を0〜100、緑色(G)の画素値の範囲を0〜100、青色(B)の画素値の範囲を200〜255と設定する。この設定に基づいて、2値化処理部50は、この範囲内にあるRGBの複合画素を抽出して、その画素値を"1"に符号化する。例えば、R画素値が20、G画素値が30、B画素値が240となる複合画素の画素値は"1"に符号化され、2値画像としての色が黒色に設定される。一方、RGBの画素値がこれらの範囲内にない複合画素の画素値は"0"に符号化され、2値画像としての色が白色に設定される。このように、青色の画素を画像データから抽出することで、図4のS12において、2値画像において黒色画素となる連結領域をラベリングすることができる。
【0066】
このように、青色の強い画像を黒色画像に変換する2値化処理を行ってから、S12において黒色画素連結領域としてラベリングされたものを、コード部検出部54が、図6のフローに示すコーナーセル候補領域として選択するために利用する。黒色画素として抽出する画素を画像データにおいて特定の色、ここでは青色のものに限定することで、抽出するノイズの数を少なくでき、コード部検出部54は、フレーム画像の2値化データからコーナーセル104を検出する時間を短縮できる。方形セル106を緑色とした場合は、図4のS10において緑色の強い画像を黒色画像に変換する2値化処理を行ってから、S12において黒色画素連結領域としてラベリングされたものを、図6のS222のコードマップ生成処理に利用する。3種類のセルに異なる色づけをした場合、2値化処理をする回数が増えることになるが、2値化処理した後の連結領域を探索する処理量が大幅に低減されるため、全体的な効率化を実現できる。
【0067】
図9に示した2次元コードは、色づけしたセルを有しており、色づけしたセルは、大きく形成されてもよく、また図8に示すように、丸く形成されてもよい。
【0068】
図10は、ゲームカードの表面に印刷した2次元コードのさらに別の例を示す。ゲームカード4の表面には、基準セル100およびコード部110が配置されている。図10に示す2次元コードは、図9に示した2次元コードの一つの実施態様である。図10に示す2次元コードは、所定の形状を有する基準セル100、それぞれ2次元配置することでコードデータを構成する複数の方形セル106、コードデータ部分102の領域を取り囲むように配置される複数のコーナーセル104を備える。4つのコーナーセル104a、104b、104c、104dには全て同一の配色がなされるが、基準セル100および方形セル106とは異なる色を付けられる。
【0069】
ゲームカード4の美観性を向上するために、コーナーセル104は、ゲームカード4の側縁まで設けられる。コーナーセル104はゲームカード4の4隅の近くに配置され、また方形セル106よりも大きく形成されるため、ゲームカード4の中で、4つのコーナーセル104は目立つ存在となる。本来、コーナーセル104は、方形セル106の存在位置を特定するために設けられるが、ゲームカード4として使用される以上は、美観性も重要である。そのためゲームカード4を縁取る枠縁107を、コーナーセル104の位置でコーナーセル104を取り囲むように内側に折れ曲げてデザイン的に変化をもたせることで、コーナーセル104に意匠性をもたせることとしている。
【0070】
このようにコーナーセル104をゲームカード4の側縁に設ける場合、コーナーセル104は、黒色以外の色をつけられることが好ましい。仮に黒色を割り当てた場合、ゲームカード4を撮像装置2で撮像して2値化処理を施すと、ゲームカード4の縁部に生じる影も黒色画素として変換されることがあり、黒色画素に変換された2つのコーナーセル104が、ゲームカード4の縁部の影で連結される状況が想定される。2値化処理により2つのコーナーセル104が連結されると、連結した黒色画素から2つのコーナーセル104を分離することは難しくなる。そのため、コーナーセル104に黒色以外の色を割り当て、2値化する際のRGBの閾値、すなわちRGBの範囲を適切に設定して2値化処理することで、ゲームカード4の縁部の影によりコーナーセル104が連結される事態を回避することが可能となる。このように、コーナーセル104をゲームカード4の側縁まで設けた場合には、影の色以外の色、すなわち黒色以外の色を割り当てることで、コーナーセル104を適切に抽出することが可能となる。
【0071】
また、図10に示すゲームカード4においては、コーナーセル104が三角形状に構成される。この形状は、正三角形であってもよい。コーナーセル104を正三角形とすることで、コーナーセル104の認識精度を高めることができる。
【0072】
図11(a)〜図11(c)は、取得した黒色画素がコーナーセル104であるか否かを判別する方法を説明するための説明図である。既述したように、コーナーセル104は、フレーム画像を2値化したあと、黒色画素の連結領域をもとに判別される。2値化されたフレーム画像は、2次元のXY座標上に表現されるため、この連結領域の座標値を利用して、連結領域がコーナーセル104であるか否かを判別することができる。
【0073】
図11(a)は、フレーム画像から抽出された連結領域の一例を示す。この連結領域109aは、X軸方向の幅をH1、Y軸方向の幅をV1とする。なお、この幅は、2次元座標上の画素数でカウントする。この連結領域109aの画素数をC1とした場合、この連結領域109aがコーナーセル104の候補であるか否かは、以下の式で判別される。
α×H1×V1≦ C1 ≦β×H1×V1(α<β<1)
例えばαは0.3、βは0.7である。
連結領域109aの画素数C1が、上式を満たす場合、この連結領域109aをコーナーセル104の候補であると判別してもよい。当然のことながら、定数α、βの値は、他の値に設定してもよい。
【0074】
図11(b)は、フレーム画像から抽出された連結領域の別の例を示す。この連結領域109bがコーナーセル104の候補であるか否かは、同様に以下の式で判別される。この連結領域109bの画素数をC2、X軸方向の幅をH2、Y軸方向の幅をV2とする。
α×H2×V2≦ C2 ≦β×H2×V2(α<β<1)
図11(a)および図11(b)に示す連結領域は、それぞれ判別式を満たしており、コーナーセル104の候補であると判別された例である。図11(a)および図11(b)に示されるように、フレーム画像において、ゲームカード4は様々な角度で撮像領域5中に配置されている可能性があるが、上記した判別式を利用することで、三角形状のコーナーセル104を適切に認識することが可能となる。
【0075】
図11(c)は、フレーム画像から抽出された連結領域のさらに別の例を示す。この場合、連結領域109cの画素数C3は、α×H3(X軸方向の幅)×V3(Y軸方向の幅)よりも小さい。すなわち、
C3 < α×H3×V3
の関係が成立する。これは、判別式(α×H3×V3≦ C3 ≦β×H3×V3)を満足するものではないため、図11(c)に示す連結領域109cは、コーナーセル104ではないことが判別される。
【0076】
以上のように、コーナーセル104の形状を三角形とすることで、2次元座標上の座標値を利用して、簡単にコーナーセル104の候補を抽出することができる。またコーナーセル104の形状を正三角形とすると、他の三角形状と比較して、上記判別式で判定する際の方向依存性を低減できるため、コーナーセル104の認識精度をより高めることができる。
なお、図10に示すゲームカード4においては、方形セル106で構成されるコードデータ部分102を、カード下方のコーナーセル104c、104dの間に配置する。これにより、ゲームカード4の中央部分にスペースを作ることができ、そこにキャラクタの絵などを印刷することが可能となる。
【0077】
図12は、ゲームカードの表面に印刷した2次元コードのさらに別の例を示す。図12に示すゲームカード4では、図10に示すゲームカード4と同様に、コーナーセル104がゲームカード4の側縁から設けられている。このコーナーセル104は三角形状に形成され、基準セル100およびコードデータ部分102a、102bとは異なる色を付けられる。
【0078】
図12に示すゲームカード4では、方形セル106を設ける領域が2つに分離される。ここでは、2つのコードデータ部分102a、102bが、4つのコーナーセル104a、104b、104c、104dより取り囲まれる領域以外の部分に配置される。コードデータ部分102aは、基準セル100とゲームカード4の上縁との間に形成され、コードデータ部分102bは、コーナーセル104cおよび104dを結んだラインとゲームカード4の下縁との間に形成される。なお、コーナーセル104cおよび104dを結ぶラインとは、カード内向きの三角形頂点同士を結んだラインである。コードデータ部分102aおよびコードデータ部分102bを、4つのコーナーセル104で囲まれる領域の外に配置することで、ゲームカード4の中央領域のスペースを広くとることができ、そこにキャラクタの絵などを印刷することが可能となる。コードデータ部分102aおよび102bは、それぞれ12ビットの情報を記録することができ、したがって合計24ビットの情報量を保持できる。なお、ゲームカード4の下方に配置されたコードデータ部分102bは、基準セル100と誤認識されることを防ぐために、所定のビット長、例えば3ビット以上連続して着色されないようにすることが望ましい。
【0079】
図12の方形セル106を認識する際には、既に基準セル100と、左下および右下のコーナーセル104d、104cが検出されているため、これらの近傍を探索することで、コードデータ部分102aおよび102bを容易に検出することができる。すなわち、コードデータ部分102aは、基準セル100に対してコーナーセル104cおよび104dの反対側に存在し、コードデータ部分102bは、コーナーセル104cおよび104dに対して基準セル100の反対側に存在する。基準セル100とコードデータ部分102aとを近傍に設定し、またコーナーセル104cおよび104dとコードデータ部分102bとを近傍に設定することで、コードデータ部分102の探索効率を高めることが可能となる。
【0080】
なお、図12のゲームカード4においては、コードデータ部分102aおよび102bとが2つに分離した配置を示したが、コードデータ部分102aおよび102bは、隣接して配置されてもよい。すなわち、コードデータ部分102aおよび102bは、基準セル100とゲームカード4の上縁の間に配置されてもよく、またコーナーセル104dおよび104cとゲームカード4の下縁の間に配置されてもよい。
【0081】
なお以上は、ゲームカード4を台3上で動かしているが、台3にゲーム用マットを置いて、その上でゲームカード4を動かしてもよい。
図13は、ゲーム用カードを配置するためのゲーム用マットを示す。図1を参照して、ゲーム用マット300は、撮像装置2の撮像領域5に入るように台3に置かれる。ゲーム用マット300は、フェルト生地などの柔らかい素材で作製されて、使用しない間はコンパクトに丸めて収納できることが好ましい。
【0082】
ゲーム用マット300には、複数の仕切り線304により、9つのマス302a、302b、302c、302d、302e、302f、302g、302h、302i(以下、総称する場合は、「マス302」と呼ぶ)が形成されている。ゲーム用マット300は、ゲームアプリケーションに応じて構成され、それぞれのマス302は、ゲームカード4を配置する区画を形成する。1人以上のユーザがゲームカード4をいずれかのマス302に置くと、画像解析装置20が、配置されたマス302を特定してゲームカード4の2次元コードを認識し、ゲーム装置30が、配置されたマスに応じたゲームストーリーを展開してもよい。図13に示すゲーム用マット300では3×3のマス302が形成されているが、マス302の数は、これに限るものではない。ユーザがゲームカード4を動かしてよい領域を「プレイエリア」と呼ぶと、図13に示すゲーム用マット300においては、マス302が形成された正方形の領域がプレイエリア306を形成する。ゲーム用マット300は、その全体が撮像領域5に入るように配置される必要はないが、少なくともプレイエリア306は撮像領域5に入っている必要がある。なお、ゲームカード4を自由に動かしてもよいゲームアプリケーションにおいては、マス302は形成されなくてもよい。
【0083】
ゲーム用マット300において、プレイエリア306の4隅に、段階的に明度が変化するグラデーション領域310a、310b、310c、310d(以下、総称する場合は、「グラデーション領域310」と呼ぶ)が設けられる。色には、色相、明度、彩度の3つの属性があるが、グラデーション領域310は、一つの色相の明度を変化させることで構成され、彩度については変化させなくてもよい。グラデーション領域310の外縁は円形であり、グラデーション領域310の中心から外縁に向かう方向に、高明度から低明度に明度が同心円状に段階的に変化している。
【0084】
図14は、グラデーション領域の外観を示す。グラデーション領域310は、一つの色相で構成され、その色相において段階的に明度を変化させて構成される。色相は、赤、緑、青といった色合いの違いを表し、明度は明るさの違いを表す。ここではグラデーション領域310が色相をもち、すなわち有彩色で表現される場合を想定している。なお、白、黒、グレーなどの無彩色には色相は存在していないが、グラデーション領域310を、白から黒に明度を段階的に変化して構成することも可能である。グラデーション領域310における明度の相違は、RGBフィルタを介してデジタル化される際、輝度の相違として取得される。
【0085】
このように、グラデーション領域310の外縁312の明度が低く、中心314の明度は高く設定される。すなわち、このグラデーション領域310は、外側が濃い有彩色の領域をもち、内側が白く構成される。4つのグラデーション領域310は、4つ全てを同色で構成してもよいが、少なくとも1つの色を変えることでゲーム用マット300の向きを定めるための指標として利用することができる。例えば、3つのグラデーション領域310a、310b、310cを同一の色相で構成し、1つのグラデーション領域310dを別の色相で構成してもよい。このとき、4つのグラデーション領域310を検出することができれば、グラデーション領域310a、310b、310cに対するグラデーション領域310dの位置が既知であるため、ゲーム用マット300の向きを特定することが可能となる。
【0086】
グラデーション領域310は、さらに、ゲームカード4の基準セル100、コーナーセル104および/または方形セル106の画像を2値化して抽出する際のRGBの画素値の閾値を決定するために利用される。例えば、コーナーセル104の色相が緑であり、所定の明度を有して構成されるものとする。このとき、グラデーション領域310の色相を緑に設定し、グラデーションの一部に、コーナーセル104と同一の明度をもつ領域を形成する。したがって、コーナーセル104と同一の明度をもつセル明度領域316が、グラデーション領域310の中心314から外縁312の間の所定位置に設定される。好適には、セル明度領域316は、中心314と外縁312の中間地点に同心円状に形成される。したがって、グラデーション領域310の半径方向において、セル明度領域316と中心314の間には、セル明度領域316よりも明度の高い領域が設けられ、またセル明度領域316と外縁312の間には、セル明度領域316よりも明度の低い領域が設けられる。
【0087】
コーナーセル104と、グラデーション領域310のセル明度領域316とが、同一色相(G)で同一の輝度(階調)をもち、環境光などの影響がない場合には、Gフィルタを介して取得されるG画素値が、例えば127で表現されるものとする。2値化処理部50は、2値化処理するためにRGBの画素値の範囲を設定するが、コーナーセル104の画素値が予め分かっている場合には、理想的には、2値化閾値をコーナーセル104の画素値近傍で設定して、コーナーセル104よりも画素値の低い(すなわち明度の高い)ものを、できるだけ抽出しないように範囲設定することが好ましい。この場合、理論的には、2値化処理部50が、例えば閾値を120として、G画素値の範囲を120〜255に設定することで、コーナーセル104を抽出でき、G画素値が120に満たない画像を2値化処理により”0”に変換できる。2値化処理の際のG画素値の範囲を狭くすることで、他のノイズを低減できる。
【0088】
しかしながら、実際の環境下では、照明があったり、また太陽光が入るなどして、撮像装置2により取得されるコーナーセル104は、理論値(127)から異なることが多い。なお、「理論値」は、本実施例を説明するために便宜上使用する用語であって、基準となる環境下で画像データから抽出される画素値を意味する。2値化するために設定する画素値の範囲は、狭ければ狭いほど、後処理の負荷を低減できるが、一方で、環境光の影響により実際に取得される画素値が理論値とは異なってくるために、2値化する画素値の範囲が狭ければ、その範囲から外れる可能性が生じる。そのため、本実施例のゲームシステム1では、グラデーション領域310を利用して、2値化する際の画素値範囲にキャリブレーションを施し、環境光などの影響を加味した現実使用環境下での画素値範囲を設定する。
【0089】
図15は、画像解析装置の別の構成を示す。画像解析装置20は、フレーム画像取得部40および実オブジェクト抽出部42を備える。実オブジェクト抽出部42は、2値化処理部50、領域抽出部60、RGB調整部62を備える。図3に示したブロック図とは異なり、図15では、2値化する際の画素値の範囲をキャリブレーションする構成が示されている。この画像解析装置20の処理機能は、CPU、メモリ、メモリにロードされたプログラムなどによって実現され、ここではそれらの連携によって実現される構成を描いている。プログラムは、画像解析装置20に内蔵されていてもよく、また記録媒体に格納された形態で外部から供給されるものであってもよい。したがってこれらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者に理解されるところである。図示の例では、画像解析装置20のCPUが、フレーム画像取得部40、実オブジェクト抽出部42としての機能をもつ。
【0090】
フレーム画像取得部40が、撮像装置2にて撮像された実空間のフレーム画像を取得する。撮像装置2は、周期的にフレーム画像を取得し、好適には1/60秒間隔でフレーム画像を生成する。撮像領域5には、ゲーム用マット300と、ゲーム用マット300上に置かれたゲームカード4が配置されており、したがってフレーム画像は、ゲーム用マット300とゲームカード4を含んでいる。
【0091】
実オブジェクト抽出部42は、フレーム画像から実オブジェクト画像を抽出する。ここでは、コーナーセル104を2値化する際のRGBの画素値の範囲を調整することを目的とするため、抽出する実オブジェクト画像は、ゲーム用マット300におけるグラデーション領域310である。以下では、コーナーセル104が所定の明度をもった緑色で構成されており、グラデーション領域310が、その所定の明度を含んだ緑色のグラデーションとして形成されている場合について説明する。
【0092】
2値化処理部50は、2値化するRGBの範囲を設定して、フレーム画像を2進数のビット表現に変換する。具体的に、2値化処理部50は、緑色のグラデーションが施されたグラデーション領域310a、310b、310cを抽出するために、G画素値の範囲を120〜255、R画素値の範囲を0〜20、B画素値の範囲を0〜20に設定し、このRGBの画素値の範囲内にあるRGBの複合画素を抽出する。RBについて画素値の範囲を0としないのは、カラーフィルタの特性などを考慮するためである。2値化処理部50は、設定したRGBの画素値の範囲内にある複合画素を抽出して、その画素値を”1”とする。
【0093】
領域抽出部60は、フレーム画像の2値化データから、ゲーム用マット300のグラデーション領域310を抽出する。グラデーション領域310は、中心部分のG画素値が低く、外周部分のG画素値が高いグラデーションを形成している。2値化処理の結果、グラデーション領域310は、中心部分の複合画素値が0、外周部分の複合画素値が1のビット表現に変換され、中心部分が空白となるドーナツ形状となる。そこで、領域抽出部60は、2値化されたデータの中からドーナツ形状を検出する。2値化処理の結果、グラデーション領域310以外にドーナツ形状に変換される領域は少ないと考えられるため、グラデーション領域310を円形に形成することは、グラデーション領域310の候補を絞る意味においてメリットが高い。
【0094】
ここで、4つのグラデーション領域310は、正方形の頂点に配置されている。緑色用の2値化処理および黒色用の2値化処理の結果、複数のドーナツ領域が検出された場合に、それらのドーナツ領域が正方形の頂点にくる関係となるものを抽出し、それらをグラデーション領域310として特定する。緑色のグラデーション領域310a、310b、310cとして特定されたドーナツ領域の形状は、2値化閾値のキャリブレーションのためにRGB調整部62に送られる。
【0095】
図16(a)〜図16(c)は、グラデーション領域として特定されたドーナツ領域を示す。以下では、緑色のグラデーション領域310a〜310cをもとに、2値化して同一色のコーナーセル104を検出する際のG画素値の範囲をキャリブレーションする方法について説明する。G画素値の2値化閾値を120とし、抽出範囲を120〜255とする。RGB調整部62は、グラデーション領域310の2値化データをもとに、2値化処理部50において2値化する際のRGBの画素値の範囲を調整する。
【0096】
図16(a)は、内径と外径との比が約1:2、正確には121:256となるドーナツ領域を示す。この場合は、撮像装置2により取り込んだフレーム画像において環境光の影響が一切なく、グラデーション領域310が理想的に2値化されている。このドーナツ領域において、方形セル106と同一階調をもつセル明度領域316は、中心と外縁とを1:1に分割した地点に存在し、ドーナツ領域の黒色部分に含まれている。したがって、G画素値の閾値を120に設定することで、コーナーセル104を好適に抽出することが可能となる。
【0097】
図16(b)は、ドーナツ領域の外径に対して内径が非常に小さくなった状態を示す。この場合、中心と外縁とを1:1に分割した地点に存在するセル明度領域316は、ドーナツ領域の黒色部分に含まれているが、その内側の階調の低い領域までもが検出されている。例えば、環境光に緑色光が含まれている場合に、緑色光とグラデーション領域310の緑色とが重なり合って、検出光のG成分が強くなることがある。このとき、ドーナツ領域の画素値は、グラデーション領域310の画素値の理論値よりも強い値で検出され、そのため、2値化されて”1”に符号化される領域が必要以上に増えることになる。
【0098】
したがって、2値化処理部50が、G画素値の範囲を120〜255に設定してゲームカード4の画像を2値化すると、コーナーセル104を抽出することはできるが、コーナーセル104よりも薄い緑色の領域も同様に抽出することになる。コーナーセル104の候補が増えると、それだけコーナーセル104の特定処理に時間がかかるため、コーナーセル104の候補が少なくなるように、2値化する際の画素値の範囲を設定することが好ましい。
【0099】
RGB調整部62は、グラデーション領域310のグラデーションで表現される階調の分布と、コーナーセル104と同一の階調が存在する領域の位置を予め保持している。したがって、RGB調整部62は、図16(b)に示すドーナツ領域の形状を受け取ると、設定した閾値(120)が低かったことを判定し、閾値を高くする必要があることを決定する。
【0100】
例えばRGB調整部62は、グラデーション領域310の階調分布をもとに、ドーナツ領域における中心から内径までの距離(すなわち、白色領域の半径)から、その地点におけるグラデーション領域310のG画素値の理論値を求める。その地点のG画素値の理論値は、本来、120よりも低いG画素値をとるが、図16(b)に示すドーナツ領域では、その地点のG画素値が120として検出されている。したがって、RGB調整部62は、グラデーション領域310上のG画素値の理論値と、設定された閾値120との差を、環境光による上昇分として、閾値の上げ量を定めてもよい。例えば、ドーナツ領域における白色領域と黒色領域の境界のグラデーション領域310上のG画素値の理論値を60とした場合、設定閾値120との差は60となるため、RGB調整部62は、2値化処理におけるG画素値の閾値を180として、2値化処理部50に供給する。
【0101】
図16(c)は、ドーナツ領域の内径が外径の半分よりも大きくなった状態を示す。この場合、中心と外縁とを1:1に分割した地点に存在するセル明度領域316は、ドーナツ領域の白色部分に含まれており、したがって、コーナーセル104と同一階調のセル明度領域316は、2値化処理により”0”に変換されていることになる。例えば、環境が非常に暗いような場合に、グラデーション領域310の理論値よりも画素値が低く検出されることがある。
【0102】
したがって、2値化処理部50が、G画素値の範囲を120〜255に設定してゲームカード4を2値化すると、コーナーセル104を抽出できないことになる。そのため、G画素値の抽出範囲を広げて、コーナーセル104と同一の画素値をもつセル明度領域316を抽出できるように、2値化処理のG画素値の範囲を再設定する必要がある。
【0103】
RGB調整部62は、図16(c)に示すドーナツ領域の形状を受け取ると、設定した閾値(120)が高かったことを判定し、閾値を低くする必要があることを決定する。例えばRGB調整部62は、グラデーション領域310の階調分布をもとに、ドーナツ領域における中心から内径までの距離(すなわち、白色領域の半径)から、その地点におけるグラデーション領域310のG画素値の理論値を求める。その地点のG画素値の理論値は、本来、120よりも高いG画素値をとるが、図16(c)に示すドーナツ領域では、その地点のG画素値が120として検出されている。したがって、RGB調整部62は、グラデーション領域310上のG画素値の理論値と、設定された閾値120との差を、閾値の下げ量に定めてもよい。例えば、ドーナツ領域における白色領域と黒色領域の境界のグラデーション領域310上のG画素値の理論値を180とした場合、設定閾値120との差は60となるため、RGB調整部62は、2値化処理におけるG画素値の閾値を60として、2値化処理部50に供給する。
【0104】
2値化処理部50は、RGB調整部62より調整された画素値の範囲を受け取ると、その範囲をもとにフレーム画像の2値化処理を実行する。領域抽出部60は、2値化されたデータから、グラデーション領域310に対応するドーナツ領域を検出して、RGB調整部62に供給する。RGB調整部62は、ドーナツ領域をもとに、2値化処理の閾値を調整し、2値化処理部50にフィードバックする。以上のキャリブレーション処理は、ドーナツ領域が、図16(a)に示すような状態となるまで実行されてもよい。
【0105】
なお、以上は、2値化する際のG画素値の範囲(閾値)をキャリブレーションする場合について説明したが、他のR、B画素値についても同様である。緑色のグラデーション領域310a、310b、310cの2値化処理時のRB画素値の閾値を20にデフォルト設定しているが、RGB調整部62は、必要に応じてこのデフォルト値を調整することが好ましい。
【0106】
なお、グラデーション領域310a、310b、310cは、空間的に異なる3点に存在しており、環境光などの影響により、その位置によって2値化処理時の最適な画素値の範囲が異なることも考えられる。外部照明の向きにより、グラデーション領域310a、310bの付近が明るく、グラデーション領域310cの付近が暗いような場合、グラデーション領域310cにあわせて、2値化する際の閾値を低く設定してもよい。これにより、ゲームカード4の配置位置にかかわらず、コーナーセル104を検出することが可能となる。
【0107】
しかしながら、グラデーション領域310a、310b付近では、2値化閾値が低く設定されることで、コーナーセル104以外の様々な領域を抽出する可能性が高まる。そのため、それぞれのグラデーション領域310の位置における最適な2値化閾値を求め、この3点の2値化閾値から、プレイエリア306中の任意の位置における2値化閾値を導出してもよい。例えば、グラデーション領域310bにおける2値化閾値をT1、グラデーション領域310cにおける2値化閾値をT2とした場合、グラデーション領域310bおよび310cを結ぶライン上では、2値化閾値をT1からT2までリニアに変化させるように設定してもよい。他の任意の位置についても同様であり、3点の2値化閾値からの距離に応じて、それぞれの位置における2値化閾値が算出されてもよい。これにより、照明が近い場合など、カードの位置によって照明環境が異なり、撮影されるコード色が大きく異なるような場合であっても、適切にコードを認識することが可能となる。
【0108】
本実施例のキャリブレーション処理は、定期的に行われることが好ましい。なお、環境に変化がない場合には、頻繁にキャリブレーション処理が行われる必要性は高くないため、環境の変化を検知するセンサを別途設け、そのセンサにより環境変化が検知された場合に、キャリブレーション処理が行われるようにしてもよい。なお、環境変化には、ゲーム用マット300を動かした場合や、外部照明などの明るさが変わった場合などがある。
【0109】
キャリブレーション処理の方法として、グラデーション領域310の所定位置における実際の画素値と、撮影の結果得られる測定値との差分から、2値化閾値を補正してもよいし、グラデーション領域310を2値化したときのドーナツ領域の形状が特定の形状になるように、2値化閾値を補正してもよい。後者の場合、例えば、ドーナツ領域の大小に応じて、2値化閾値をインクリメント又はデクリメントし、ドーナツ領域の形状が理論値に近づくように調整してもよい。また、単に1つの2値化閾値をもとに2値化するだけでなく、上限と下限の2つの閾値を設け、その範囲に入るか否かによって2値化してもよい。例えば、画素値が85以上170以下であれば「0」、それ以外であれば「1」として2値化してもよい。この場合、ある2値化閾値の大小によりグラデーション領域310を2値化して、グラデーション領域310の外径を把握してから、上限と下限の2つの閾値により特定される中間領域のドーナツ領域の実測結果を取得し、その形状が理論値に近づくように上限と下限を補正してもよい。また、上述した例と濃淡が逆転していてもよく、その場合、反転処理をしてから2値化を行ってもよい。
【0110】
図1に示したように、撮像装置2は斜め上方からゲーム用マット300を撮像するので、グラデーション領域310の形状が真円であったとしても、楕円形として認識される可能性がある。この場合であっても、上述したように、ゲーム用マット300の位置や方向などを予め把握することが可能であるから、この情報をもとにグラデーション領域310の認識結果であるドーナツ領域の形状を補正してから、上述したキャリブレーション処理を行ってもよい。
【0111】
また、ゲーム用マット300が固定的に設置されてからキャリブレーション処理を行うことが好ましいので、例えば、グラデーション領域310の認識処理を複数回行って位置が変わらないことを確認してから、または、所定時間をおいて再度認識処理を行って位置が変わらないことを確認してから、キャリブレーション処理を開始してもよい。
【0112】
図17は、実施例における画像データの伝送システムを示す。画像データ伝送システム200は、画像データを生成する画像データ生成装置201、画像データを送信する送信局204、送信された画像データを受信する端末装置202を有して構成される。端末装置202は、受信した画像データを表示するための表示装置203を有する。画像データ伝送システム200は、無線通信によりデータを伝送しているが、有線通信によりデータを伝送するものであってもよい。
【0113】
画像データ生成装置201は、上述した2次元コード、すなわち図2、図8、図9、図10および図12に関して説明した2次元コードの画像データを、端末装置202の表示装置203に表示させるためのデータフォーマットにしたがって生成する。画像データ生成装置201は、図2に示す2次元コードの画像データとして、複数の方形セルを表示装置203上の所定の座標位置に表示させるためのデータと、所定の座標位置に表示される複数の方形セルを取り囲む座標位置に複数のコーナーセルを表示させるためのデータを生成してもよい。画像データ生成装置201は、表示装置203上で、コーナーセルが方形セルよりも大きく表示されるように、コーナーセルと方形セルのデータを設定する。
【0114】
画像データ生成装置201は、図8に示す2次元コードの画像データとして、複数の方形セルを表示装置203上の所定の座標位置に表示させるためのデータと、所定の座標位置に表示される複数の方形セルを取り囲む座標位置に複数のコーナーセルを表示させるためのデータを生成してもよい。画像データ生成装置201は、コーナーセルが丸い形状に表示されるように、コーナーセルのデータを設定する。
【0115】
画像データ生成装置201は、図9に示す2次元コードの画像データとして、所定の形状を有する基準セルを表示装置上の所定の位置に表示させるためのデータと、基準セルに対して定められる領域の範囲内で複数の多辺形セルを表示させるためのデータと、領域を取り囲む座標位置に複数のコーナーセルを表示させるためのデータを生成してもよい。画像データ生成装置201は、基準セル、多辺形セル、コーナーセルの少なくとも一つのセルの色が、他のセルの色と異なるように設定する。また画像データ生成装置201は、図10、図12に示す2次元コードの画像データとして、所定の形状を有する基準セルを表示装置上の所定の位置に表示させるためのデータと、同一形状を有する複数のコーナーセルを表示させるためのデータと、所定の領域に複数のコーナーセルを表示させるためのデータを生成してもよい。画像データ生成装置201は、コーナーセルの色を、基準セルおよび多辺形セルとは異なる色に設定する。
【0116】
送信局204は、画像データ生成装置201により生成された画像データを、端末装置202に送信する。画像データは、端末装置202において解凍可能な形式で圧縮されていることが好ましく、また端末装置202におけるブラウザ機能などにより表示されるデータフォーマットで作成されている必要がある。送信局204は、例えばセルごとの画像データを表示座標位置に対応付けて送信することで、データ送信量を削減することが可能となる。端末装置202は、表示装置203上に2次元コードを表示する。図1のゲームシステム1において、ユーザは、表示装置203に表示された2次元コードを、ゲームカード4の代わりに使用して、撮像装置2により読み取らせることができる。これにより、ユーザは、ゲームカード4を有していなくても、画像データを端末装置202にダウンロードすることで、ゲームシステム1に参加することができる。
【0117】
以上、本発明を実施例をもとに説明した。この実施例は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【図面の簡単な説明】
【0118】
【図1】実施例にかかるゲームシステムの構成を示す図である。
【図2】ゲームカードの表面に印刷した2次元コードを示す図である。
【図3】画像解析装置の構成を示す図である。
【図4】2次元コードの認識処理の処理手順を示すフローチャートである。
【図5】基準セルの検出処理を示すフローチャートである。
【図6】コード部の検出処理を示すフローチャートである。
【図7】コードデータの検証処理を示すフローチャートである。
【図8】ゲームカードの表面に印刷した2次元コードの別の例を示す図である。
【図9】ゲームカードの表面に印刷した2次元コードのさらに別の例を示す図である。
【図10】ゲームカードの表面に印刷した2次元コードのさらに別の例を示す図である。
【図11】(a)〜(c)は、コーナーセルであるか否かを判別する方法を説明するための説明図である。
【図12】ゲームカードの表面に印刷した2次元コードのさらに別の例を示す図である。
【図13】ゲーム用カードを配置するためのゲーム用マットを示す図である。
【図14】グラデーション領域の外観を示す図である。
【図15】画像解析装置の別の構成を示す図である。
【図16】(a)〜(c)は、グラデーション領域として特定されたドーナツ領域を示す図である。
【図17】実施例における画像データの伝送システムを示す図である。
【符号の説明】
【0119】
1・・・ゲームシステム、2・・・撮像装置、4・・・ゲームカード、6・・・出力装置、7・・・ディスプレイ、10・・・画像処理装置、20・・・画像解析装置、30・・・ゲーム装置、40・・・フレーム画像取得部、42・・・実オブジェクト抽出部、44・・・状態決定部、50・・・2値化処理部、52・・・基準セル検出部、54・・・コード部検出部、56・・・検証処理部、60・・・領域抽出部、62・・・RGB調整部、100・・・基準セル、102・・・コードデータ部分、104・・・コーナーセル、106・・・方形セル、108・・・領域、110・・・コード部、200・・・画像データ伝送システム、201・・・画像データ生成装置、202・・・端末装置、203・・・表示装置、204・・・送信局。
【特許請求の範囲】
【請求項1】
所定の形状を有する基準セルと、
コードデータを構成する複数の多辺形セルと、
同一形状を有する複数のコーナーセルと、
を備え、
前記多辺形セルは、前記複数のコーナーセルより取り囲まれる領域以外の部分に配置されることを特徴とするカード。
【請求項2】
前記コーナーセルは、前記基準セルおよび前記多辺形セルとは異なる色を付けられることを特徴とする請求項1に記載のカード。
【請求項3】
前記コーナーセルは三角形であることを特徴とする請求項1または2に記載のカード。
【請求項4】
前記コーナーセルは、当該カードの縁部から設けられ、黒色以外の色をつけられることを特徴とする請求項1から3のいずれかに記載のカード。
【請求項5】
所定の形状を有する基準セルと、
コードデータを構成する複数の多辺形セルと、
同一形状を有する複数のコーナーセルと、
を備えた矩形状のカードであって、
前記複数のコーナーセルは、当該カードの相対向する第1縁部および第2縁部において設けられ、
前記複数の多辺形セルの少なくとも一部は、前記第1縁部および前記第2縁部とは異なる第3縁部の近傍において、当該第3縁部に沿って設けられることを特徴とするカード。
【請求項6】
前記複数の多辺形セルの一部が、前記第3縁部に対向する第4縁部の近傍において、当該第4縁部に沿って設けられており、前記第3縁部と前記第4縁部に設けられた複数の多辺形セルが、1つの2次元コードを構成することを特徴とする請求項5に記載のカード。
【請求項7】
前記複数のコーナーセルにより取り囲まれる領域には、前記多辺形セルおよび前記基準セルが形成されないことを特徴とする請求項5または6に記載のカード。
【請求項1】
所定の形状を有する基準セルと、
コードデータを構成する複数の多辺形セルと、
同一形状を有する複数のコーナーセルと、
を備え、
前記多辺形セルは、前記複数のコーナーセルより取り囲まれる領域以外の部分に配置されることを特徴とするカード。
【請求項2】
前記コーナーセルは、前記基準セルおよび前記多辺形セルとは異なる色を付けられることを特徴とする請求項1に記載のカード。
【請求項3】
前記コーナーセルは三角形であることを特徴とする請求項1または2に記載のカード。
【請求項4】
前記コーナーセルは、当該カードの縁部から設けられ、黒色以外の色をつけられることを特徴とする請求項1から3のいずれかに記載のカード。
【請求項5】
所定の形状を有する基準セルと、
コードデータを構成する複数の多辺形セルと、
同一形状を有する複数のコーナーセルと、
を備えた矩形状のカードであって、
前記複数のコーナーセルは、当該カードの相対向する第1縁部および第2縁部において設けられ、
前記複数の多辺形セルの少なくとも一部は、前記第1縁部および前記第2縁部とは異なる第3縁部の近傍において、当該第3縁部に沿って設けられることを特徴とするカード。
【請求項6】
前記複数の多辺形セルの一部が、前記第3縁部に対向する第4縁部の近傍において、当該第4縁部に沿って設けられており、前記第3縁部と前記第4縁部に設けられた複数の多辺形セルが、1つの2次元コードを構成することを特徴とする請求項5に記載のカード。
【請求項7】
前記複数のコーナーセルにより取り囲まれる領域には、前記多辺形セルおよび前記基準セルが形成されないことを特徴とする請求項5または6に記載のカード。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図15】
【図16】
【図17】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図15】
【図16】
【図17】
【図14】
【公開番号】特開2007−80108(P2007−80108A)
【公開日】平成19年3月29日(2007.3.29)
【国際特許分類】
【出願番号】特願2005−269295(P2005−269295)
【出願日】平成17年9月15日(2005.9.15)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】
【公開日】平成19年3月29日(2007.3.29)
【国際特許分類】
【出願日】平成17年9月15日(2005.9.15)
【出願人】(395015319)株式会社ソニー・コンピュータエンタテインメント (871)
【Fターム(参考)】
[ Back to top ]