以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
1.2次元コード
図16(A)〜(C)は、本実施の形態の2次元コードの一例である。
図16(A)は、ID=1234567890123456に対応する2次元コードであり、図16(B)は、ID=1234567890123457に対応する2次元コードであり、図16(C)は、ID=1234567890123458に対応する2次元コードである。
図17(A)(B)は、本実施の形態の簡易版の2次元コードの一例である。図2(A)はID=12345678に対応する2次元コードであり、図17(B)はID=12345679に対応する2次元コードである。
図16(A)〜(C)や図2(A)(B)に示すように、本実施の形態の2次元コードは、メロンの皮の模様のような切り貼りが困難なデザインの2次元画像である。図16(A)〜(C)では0〜255、(3.6×1016)の整数値を埋め込み可能であり、図17(A)(B)では0〜225、(3.3×107)の整数値を埋め込み可能である。
本実施の形態の2次元コードは、所与のデータ(図16(A)〜(C)や図17(A)(B)のIDに相当)が2次元画像としてコード化された2次元コードであって、予め設定された2値データ列配置条件に従って、所与のデータに一義的に対応付けられた2値データ列に基づき2次元領域の点配置予約位置に配置された点と、前記各点と結線対象となる点を予め設定された結線条件に従って繋がれた線とを画像構成要素に含み、前記点を結ぶ線に所与の幅を与えて2次元画像化された2次元コードである。
構成要素となる点や線については「2.2次元コードの生成」で詳しく説明する。
図16(A)〜(C)や図17(A)(B)に示した2次元コードから構成要素となる点や線の情報を認識することで、対応するデータ(ID)をもとめることができる。2次元コードから構成要素となる点や線の情報を認識する手法については、「4−4.認識対象画像の認識処理及びエラー補正処理」で詳しく説明する。
また本実施の形態の2次元コードは、前記線が各点と他の点を結ぶ直線がそれ以外の点の点配置予約位置を含む点配置予約エリアを横切らないという必要条件を満たす他の点を各点の結線対象点とし、所定の条件を満たす結線対象点と各点との間を結ぶ線である構成でもよい。
所定の条件を満たす結線対象点については、「2−2.橋を架ける処理(結線処理)」で詳しく説明する。
また本実施の形態の2次元コードは、前記点が、予め設定された2値データ列配置条件に従って、前記2値データ列に基づき、2次元領域に設定されたメインレイヤーに属する点配置予約位置に配置された点を含む構成でもよい。予め設定された2値データ列配置条件及び2次元領域に設定されたメインレイヤーについては「2−3.2次元領域」「2−4.メインレイヤーへのデータの配置」で詳しく説明する。
また本実施の形態の2次元コードは、所与のデータが2次元画像としてコード化された2次元コードであって、所与のデータに一義的に対応付けられた2値データ列に基づき、2次元領域に設定されたメインレイヤーに属する点配置予約位置に配置された点と、2次元領域のメインレイヤー以外に属する点配置予約位置に配置されたダミーの点とを画像構成要素に含み、前記点に所与のパタンを与えて2次元画像化された2次元コードである。
また本実施の形態の2次元コードは、前記点が、2次元領域のメインレイヤー以外に設定されたサブレイヤーに属する点配置予約位置に、予め設定されたダミー点配置条件に従って配置されたダミーの点を含む構成でもよい。サブレイヤーへのダミーの点の配置手法については「2−6.サブレイヤーへのダミーデータの配置」で詳しく説明する。
また本実施の形態の2次元コードは、2次元領域のメインレイヤー以外に設定されたパリティレイヤーに属する点配置予約位置に、パリティ情報に基づき配置された点を含む構成でもよい。パリティレイヤーに属する点配置予約位置へのパリティ情報の配置手法については「2−5.パリティ情報の設定」で詳しく説明する。
また本実施の形態の2次元コードは、前記2値データ列が、所与のデータの標準フィボナッチ表現に基づき生成されたものでもよい。所与のデータから2値データ列を生成する手法については「2−2.標準フィボナッチ表現と2値データ列」で詳しく説明する。
本実施の形態の2次元コードは、整数値と絵柄が1対1に対応しており、一部違っていてもエラーとなるため、切り貼りが困難である。
なお実際に印刷される際には可視不可なインク(例えば赤外線にだけ反応するインク)で印刷され、肉眼では見えないように構成しても良いし、可視インクを用いて印刷しても良い。
QRコード(商標)等の2次元コードは、基本的に2次元平面上に敷き詰められた多数のタイルが白黒2値ないしはカラー数色を持ち、その組み合わせで表現されていると考えることができる。よって、原理的には1次元(線状)に並べ替えることも可能であり、1次元の場合と情報量的には同じである。
一方、本実施の形態の2次元コードは、2次元領域をフルに活用しており、2次元の広がりの中に、結線情報を含む「意味のある情報」を埋め込んでいるため、2次元平面上でしか表現できない。すなわち1次元(線状)に並べ替えることはできず、2次元であることを利用してより多くの情報量を含んでいる。
2.2次元コードの生成
2−1.2次元コードの生成の処理の流れ
図18は、2次元コードの生成の処理の流れを示すフローチャートである。
まず2次元コード化したい数値を入力する(ステップS10)。以下、実質的な情報量が55bit(パリティ等を除く)の場合をサンプルに解説する。
次に所与のルールに基づき、ビット単位の並べ替え等を行う(ステップS20)。
次に複数のブロックに分割する(ステップS30)。ここでは、1ブロックを5bitとして、5bit×11ブロックにする場合を例にとり説明する。
次にブロック毎に暗号化する(ステップS40)。暗号化の方式は任意である。
次に各暗号文ブロックを標準フィボナッチ表現に変換する(ステップS50)。
具体的には、「2−2.標準フィボナッチ表現と2値データ列」の項で説明する。
次にメイン・レイヤーの定められた位置に、標準フィボナッチ表現に変換した後のデータを配置(2次元平面に展開)する(ステップS60)。
具体的には、「2−4.メインレイヤーへのデータの配置」の項で説明する。
次にメイン・レイヤーに配置された「石」(点に相当)群の配置を見て、ルールに従いパリティ・レイヤーにも「石」(点に相当)群を配置する(ステップS70)。
具体的には、「2−5.パリティ情報の設定」の項で説明する。
次にメイン・レイヤーとパリティ・レイヤーに配置された「石」群の配置を見て、ルールに従いサブ・レイヤーにも「石」群を配置する(ステップS80)。
具体的には、「2−6.サブレイヤーへのダミーデータの配置」の項で説明する。
次に3枚のレイヤーに置かれた「石」の間に、所与のルールに従い「橋」を架ける(ステップS90)。
具体的には、「2−7.橋を架ける処理」の項で説明する。
次に最外周に置かれた点から、周囲の「枠」まで「橋」を架ける(ステップS100)。
2−2.標準フィボナッチ表現
所与のデータを標準フィボナッチ表現に変換して所与のデータに一義的に対応付けられた2値データ列を生成するようにしてもよい。
標準フィボナッチ表現とは、フィボナッチ表現のうち標準表現・極小表現を特に指すもので、1の数が一番少ないものを標準フィボナッチ表現という。標準フィボナッチ表現では、ビット列を1が隣り合わないように構成することができる。 なぜならすべての自然数はとなりあわないフィボナッチ数の和で表現できるのでこの性質を利用することにより、与えられた10進数を連続してビットが立たないフィボナッチ表現に変換できる。
本実施の形態では与えられた10進数(ID)を標準フィボナッチ表現に変換したものを2値データ列として用いる。
例えば1ブロック=5bit(32通り)を標準フィボナッチ表現(ここでは"1"と"0"の並びを2進数のbitに見立てて、"Fibonacci bit"=略して"fit"と呼ぶことにする)で表すには、7fit(34通り)必要であり、全ブロックに対してこの変換作業を行う。なお、5bitよりも7fitの方が2多いので、7fitで表現される組み合わせのうち、"0"(0000000)は使わずに、"33"(1010101)で代用することにした。こうすることで、最終的に生成される2次元コードに変化が出て面白くなる。
図19は、10進数・2進数・標準フィボナッチ表現の対応表である。10進数の1、2、3、5、8、13、21、34はフィボナッチ数である。この数の列は,2=1+1,3=1+2,5=2+3というように,引き続く2つの数の和がその次の数になるという規則にしたがっている。このような数をフィボナッチ数という。
2−3.2次元領域
本実施の形態では、所与のデータに基づき所与のデータに一義的に対応付けられた2値データ列を生成し、2次元領域に点が配置される可能性のある点配置予約位置を設定し、2値データ列に基づき予め設定された2値データ列配置条件に従って2次元領域の点配置予約位置に点を配置し、予め設定された結線条件に従って2次元領域に配置された点を線で繋ぐ結線処理を行い、前記線に基づき2次元コードの画像を生成する。ここで線に基づき2次元コードの画像を生成するとは、例えば、前記点を結ぶ線に幅を与えて2次元コードの画像を生成するような構成をいう。
ここで所与のデータとは、2次元コードに対応付けられた実データでもよいし、実データの暗号化後のデータでもよい。
また点配置予約位置は点やエリアを特定するための位置情報であり、所定の基準点に対する相対位置として設定してもよい。
また本実施の形態では、前記2値データ列に基づき行列を設定し、行列の各要素に前記点配置予約位置を対応付けて、対応付けられた点配置予約位置に行列の各要素の値に基づいて点を配置するようにしてもよい。
また本実施の形態では、2次元領域を格子状に並んだ複数のセルに分割し、格子点又は各セルの代表点を前記点配置予約位置としてもよい。
各セルの代表点とは、例えば各セルの中心点でもよい。
点配置予約位置は、2次元領域に極端な粗密ができないように分散して配置するようにしてもよい。
図20、図21は本実施の形態の2次元領域の一例について説明するための図である。
200は本実施の形態の2次元領域であり、2次元領域に2次元コード画像が生成される。
本実施の形態では2次元領域200を格子状に並んだ複数のセルS(x、y)(x=0,1,2、・・・16、y=0,1,2、・・、24)の行列に分割し、前記2値データ列(ビット列)の各ビットの値を所定の規則にしたがって各セルに対応付けて、各セルに対応するビットが第1の値(例えば1)である場合には当該セルに点を配置し、2値データ列に対応する点を2次元領域に配置する点配置処理を行う。
2次元領域200にメインレイヤーMLを設定し、メインレイヤーMLに属する点配置予約位置(例えばセルやセルの代表点)に2値データ列に基づき点を配置するようにしてもよい。
メインレイヤーに属する点配置予約位置とは、2次元領域を格子状に複数のセルに分割した場合の格子点が前記点配置予約位置である場合には格子点がメインレイヤーに属する場合をいい、各セルの代表点(中心点)が前記点配置予約位置である場合にはセルまたはその代表点がメインレイヤーに属する場合をいう。
また所与の点配置予約位置がメインレイヤーMLに属する場合には、当該点配置予約位置の周囲の所定範囲内にある点配置予約位置MLはメインレイヤーとならないようにメインレイヤーを設定するようにしてもよい。
当該点配置予約位置の周囲の所定範囲内とは、例えば当該点配置予約位置の前後左右斜めに隣り合う点配置予約位置等が含まれるように設定してもよい。
例えばメインレイヤーMLのセル(2,2)は前後左右斜めに隣り合うセルS(1,1)、S(1,2)、S(1,3)、S(2,1)、S(2,3)、S(3,1)、S(3,2)、S(3,3)についてはメインレイヤーMLとならないように設定されている。
2次元領域を碁盤の目のように区切り(格子状に区切り)各マス目をセルとし、奇数行かつ奇数列のセル又は偶数行かつ偶数列のセルをメインレイヤーMLとしてもよい。
またメインレイヤーのセルと辺または頂点を介して隣り合うセルはメインレイヤーとならないように設定された所定の規則に従ってメインレイヤーを設定するようにしてもよい。
例えば2値のデータを11ブロックにわけて各ブロックが7fitであるとすると、y=2かつx=2,4,6,8、10、12,14のセルが1ブロックの各fitに対応する。すなわち例えば1ブロック目の1fit目をセルS(2、2)に対応させ、1ブロック目の2fit目をセルS(4、2)に対応させ、1ブロック目の3fit目をセルS(6、2)に対応させ、1ブロック目の4fit目をセルS(8、2)に対応させ、1ブロック目の5fit目をセルS(10,2)に対応させ、1ブロック目の6fit目をセルS(12、2)に対応させ、1ブロック目の7fit目をセルS(14,2)に対応さる。このようにnブロック目のmfit目をセルS(2m、2n)に対応させるようにしてもよい。
そして例えばnブロック目のmfitが第1の値(例えば1)である場合には、対応するセルS(2m、2n)に点をおき、第2の値(例えば0)である場合には、対応するセルS(2m、2n)に点をおかないようにして、前記2値データ列の各ビットの値を所定の規則にしたがってメインレイヤーのセルを対応付けるようにしてもよい。
また2次元領域200のメインレイヤーML以外にパリティレイヤーPLを設定し、パリティレイヤーPLに属する点配置予約位置に、パリティ情報に基づき点を配置するようにしてもよい。
メインレイヤーMLの2次元領域に対して、所定の規則に従って、セルを最小構成単位とするパリティレイヤーを設定し、パリティレイヤーにパリティビットに対応する点を配置するようにしてもよい。例えば図21に示すようにメインレイヤーMLの周囲(最外周部(斜線部)のセルSi、j(i+j=偶数となるセル)をパリティレイヤーとして、パリティビットをおくように構成してもよい。
また図21に示すように2次元領域200のメインレイヤーML以外にサブレイヤーSLを設定し、サブレイヤーSLに属する点配置予約位置に、予め設定されたダミー点配置条件に従ってダミーの点を配置するようにしてもよい。
2−4.メインレイヤーへのデータの配置
図22はメインレイヤーへの2値データ列(ビット列)の各ビット情報の配置について説明するための図である。
規則に従ってメイン・レイヤーMLに標準フィボナッチ表現に変換した後のデータ(2値データ列)を配置(2次元平面に展開)する。ここでは図20に示すように偶数行かつ偶数列のセルをメインレイヤーMLとし、2値のデータを横7fit×縦11ブロックにして配置する場合を例にとり説明する。
fitで表現される"1"の位置に「石」(実体はデータの有無を表現する「点」だが、以下、説明のためにこのオブジェクトを「石」と呼ぶ)を置き、"0"の位置には「石」を置かない。
たとえば1ブロック目のfit列が’0010100’である場合には、1ブロック目の1fit目、2fit目、4fit目、6fit目、7fit目が’0’であるので対応するセルS(2、2)、セルS(4,2)、セルS(8,2)、セルS(12,2)、セルS(14,2)には石を配置しない。また1ブロック目の3fit目、5fit目が’1’であるので対応するセルS(6、2)、セルS(10,2)には石を配置する。
本実施の形態では標準フィボナッチ表現に変換後のデータを配置するため、横方向のラインを見た場合、2値データ列において1が連続して現れることはない(図19参照)。従ってメインレイヤーのセルに「石」を配置する場合連続して「石」が配置されることはない。しかも横方向のラインにはメインレイヤーのセル自体が1つ飛びに並んでいるので、「石」と「石」は少なくとも3つ以上のセルをあけた間隔で配置される事になる。
なお、ここでは、セルが格子状に規則正しく並んでいる場合を例にとり説明したが、本発明の適用はこれに限られるものではない。
2−5.パリティ情報の設定
2次元領域を複数のエリアに分割して、所与のエリア以外のエリアに配置された点に基づきパリティ情報を設定し、所与のエリアのパリティレイヤーに点を配置するようにしてもよい。
所与のエリア以外のエリアに配置された点は、ダミーの点を含む場合でもよいし、含まない場合でもよい。
メイン・レイヤーに配置された「石」群の配置を見て、ルールに従いパリティ・レイヤーにも「石」群を配置する。
2次元領域を複数のエリアに分割して、所与のエリアのパリティレイヤーには当該エリア以外のエリアに配置された点(ダミーの点を含む場合でもよいし、含まない場合でもよい)に基づきパリティ情報を設定し、パリティ情報に基づき所与のエリアのパリティレイヤーに点を配置するようにしてもよい。
図23、図24は、パリティビットの設定手法について説明するための図であり、図25はメインレイヤーの点の配置が図22の場合にパリティ情報に基づきパリティレイヤーに石を配置した様子を示す図である。
ここでは、図20に示すようにメインレイヤーMLの周囲(最外周部(斜線部)のセルS(i、j)(i+j=偶数となるセル)をパリティレイヤーPLとして、パリティビットをおく場合を例にとり説明する。下記の規則に従ってパリティレイヤーに石を配置する。
(1)メイン・レイヤーを大きく上下左右で4分割した時、自らが属していない領域に置かれた「石」を計数対象とする(領域の境界線上の「石」は数える)。
例えば図23に示すように縦方向の分割線250と、横方向の分割線252によって2次元領域を4つの領域R1、R2、R3、R4に分割する。
(2)縦の列(左右両端)のパリティの「石」は、横方向(自分と同じY座標の行と、点対称のY座標にある行)の「石」の数の合計が偶数の時に置かれる。
(3)横の列(上下両端)のパリティの「石」は、縦方向(自分と同じX座標の列と、点対称のX座標にある列)の「石」の数の合計が偶数の時に置かれる。
例えば、左下(最左端)の2点260,270に着目し、パリティの「石」を置くべきか検討してみる。
例えば図23の縦の列(左右両端)のセル260におくパリティの石については、自分260と同じY座標の行262と、点対称のY座標にある行264の「石」の数の合計が偶数の時に置かれる。ここで自分と同じY座標の行262については、自分260の属する領域R4以外の部分を対象とする。行262と行264におかれている石の合計は4個なので、図25に示すように260には石261が置かれている。
また例えば図24の縦の列(左右両端)のセル270におくパリティの石については、自分270と同じY座標の行272と、点対称のY座標にある行274の「石」の数の合計が偶数の時に置かれる。ここで自分と同じY座標の行272については、自分270の属する領域R4以外の部分を対象とする。行272と行274におかれている石の合計は5個なので図25にしめすように270には石が置かれていない。
この様にして、全ての最外周について、パリティの「石」を置くか否かを決めていく。
本実施の形態では切り貼り偽造の対策として、パリティの「石」の周辺だけで(つまり、ローカルな情報だけで)パリティが決まってしまうのを避け、あえて離れたラインの情報の影響を受けるようにしている。ちなみに、もし自分の属する領域も計数対象に含めてしまうと、4領域のパリティが同じ(=対称)になってしまう(情報的に冗長となる)ので、これもあえて非対称にしている。メイン・レイヤーに置かれた(または、置かれていない)1つの「石」は、計6つのパリティに影響を与え、これらがエラー補正時の有力なヒントにもなっている。
2−6.サブレイヤーへのダミーデータの配置
メイン・レイヤーとパリティ・レイヤーに配置された「石」群の配置を見て、ルールに従いサブ・レイヤーにも「石」群を配置する。
なお、サブ・レイヤーも、メイン・レイヤーやパリティ・レイヤーと同様に、「石」を配置しても良い場所が明確に定められている。
サブ・レイヤーに石を配置するルールとしては、まずセルSxyの「X座標+Y座標」が偶数となるセルは(少なくとも、メイン・レイヤーとパリティ・レイヤー用に予約されているセルを含むので)初めから除外しておく。
メイン・レイヤーとパリティ・レイヤーに「石」が置かれていないセルに注目し、周囲のセル(壁に接している場合は5セル、壁に接していない場合は8セル)にも同様に「石」が置かれていないなら、そのサブ・レイヤーに「石」を置く。
図26はサブレイヤーへのダミーデータ(ダミーの石)の配置について説明するための図である。
図25においてはRAは予約エリアである。ここで予約エリアRA以外をサブレイヤーとする。
サブレイヤーのセルS(1、0)は、壁に接しているセルであるため、当該セルと辺又は頂点を共有しているセル(周囲のセルという)はS(0,0)、S(2,0)、S(0,1)、S(1,1)、S(2,1)の5つのセルがある。この5つのセルのメイン・レイヤーとパリティ・レイヤーに「石」がおかれていない場合には当該セルS(1、0)に石が置かれ、5つのセルの少なくとも1つに「石」がおかれている場合には当該セルS(1、0)に石が置かれない。図25では周囲のセルS(0,0)、S(2,0)、S(0,1)、S(1,1)、S(2,1)にはいずれも石がおかれていないので、図26の310に示すように当該セルS(1,0)に石が置かれる。
図25において、サブレイヤーのセルS(2、5)は、壁に接していないセルであるため、当該セルと辺又は頂点を共有しているセル(周囲のセルという)はS(1,4)、S(2,4)、S(3,4)、S(1,5)、S(3,5)、S(1,6)、S(2,6)、S(3,6)の8つのセルがある。この8つのセルのメイン・レイヤーとパリティ・レイヤーに「石」がおかれていない場合には当該セルS(2,5)に石が置かれ、8つのセルの少なくとも1つに「石」がおかれている場合には当該セルS(2,5)に石が置かれない。図25では周囲のセルの1つのセルS(2,4)に石がおかれているので、図26の320に示すように当該セルS(2,5)に石が置かれない。
2−7.橋を架ける処理(結線処理)
本実施の形態では、2次元領域に配置された点と点の間を予め設定された結線条件に従って線で繋ぐ処理を行う。
2次元領域に配置された所与の点と他の点を結ぶ直線が点配置予約エリアを横切らないという必要条件を満たす場合に、所与の点と他の点を線で繋ぐ結線処理を行うようにしてもよい。所与の点と他の点を繋ぐ線は直線でもよい。
このようにすると点配置予約位置の情報を線でつぶさないように点と点を線で結ぶことができる。
また各点と他の点を結ぶ直線がメインレイヤーを通らないという必要条件を満たす他の点を各点の結線対象点としてもよい。
前記2値データ列の各ビットの値が対応付けられるセル又はメインレイヤーの点のおかれていないセルを線が横切らないように設定された所定の規則にしたがって点と点を線で結ぶようにしてもよい。
ダミーの点とダミーの点を線で結ぶ線がメインレイヤー以外を通るように設定された所定の規則に従ってダミーの点とダミーの点を線で結ぶようにしてもよい。
このように3枚のレイヤーに置かれた「石」の間に、ルールに従い「橋」を架ける。この「橋」こそが、本実施の形態の2次元コードの「目に見える部分(又は赤外線によって認識可能な部分)」=「画像認識対象」となる。
予め設定された結線条件として、例えば下記のような橋をかけるルール(結線条件、結線規則)を設定することができる。
図27〜図30は橋をかけるルールについて説明するための図である。
ルール1:メイン・レイヤーまたはパリティ・レイヤーに置かれた「石」に着目して、その周囲の「桂馬の位置」または「1マス空けて斜め45度の位置」に「石」(レイヤー問わず)があれば、「橋」を架ける。
例えば図27において、350Pがメイン・レイヤーまたはパリティ・レイヤーに置かれた「石」とすると、その周囲の「桂馬の位置」のセル360、361,362,363、364、365,366、367または「1マス空けて斜め45度の位置」のセル370、371、372,373に石があれば橋をかける(結線する)。
図28に示すように、石(点)350Pに対して「桂馬の位置」にあるセル360に石(点)360Pがおかれているので、石(点)350Pと石(点)360Pを線L1で繋ぐ(結線する)。
また石(点)350Pに対して「1マス空けて斜め45度の位置」の位置にあるセル371に石(点)371Pがおかれているので、石(点)350Pと石(点)371Pを線L2で繋ぐ(結線する)。
ルール2:サブ・レイヤーに置かれた「石」に着目して、「1マス空けて上下左右の位置」に「石」(サブ・レイヤー上に限られるはず)があれば、「橋」を架ける。但し、その「橋」が、メイン・レイヤーまたはパリティ・レイヤー上の「石」の有無の情報を隠す可能性がある場合には、「橋」を架けない。
例えば図29において、380Pがサブレイヤーに置かれた「石」とすると、その周囲の「1マス空けて上下左右の位置」のセル(サブ・レイヤー上に限られるはず)390、391,392,393に石があれば橋をかける(結線する)。
サブレイヤーに置かれた石(点)380Pに対して「1マス空けて上下左右の位置」の位置にあるセル390に石(点)390Pがおかれているので、石(点)380Pと石(点)390Pを線L3で繋ぐ(結線する)(図30参照)。
またサブレイヤーに置かれた石(点)380Pに対して「1マス空けて上下左右の位置」の位置にあるセル391に石(点)391Pがおかれている。しかし石(点)380Pと石(点)391Pを線で繋ぐ(結線する)と、メイン・レイヤーの石(点)410を覆い隠す可能性があるので橋をかけない(図30参照)。
ルール3:パリティ・レイヤーに置かれた「石」に着目して、(パリティ・レイヤーの長方形を構成する4辺の)上下端については「1マス空けて上下の位置」に「石」があれば、「橋」を架ける。同様に、左右端については「1マス空けて左右の位置」に「石」があれば、「橋」を架ける。
このようにして2次元領域の点と点を線でつないだ様子を表しているのが図31である。ここで線の太さはセルの幅より小さい幅で任意に設定可能であるが、最終的に本2次元コードを利用する画像認識システムに適応した幅に調整することが望ましい。
図31では、「橋」以外の要素である「石」も見えているが、実際には「橋」の線しか見えない。
そして、最外周に置かれた点から、周囲の「枠」まで「橋」を架けることで図32にしめすような2次元コードができあがる。
本実施の形態の2次元コードは、線の極端に「密」や「粗」な部分がないという特徴がある。それでいて、重要な情報を持つ「石」(メインレイヤーの石)の位置は、「黒」であっても「白」であっても周囲に余裕があるので、低画質のカメラで撮像する場合でも(つまり、ボケたり、歪んだりしても)、最低限必要な情報は得られるような「石」「橋」の配置になっている。
3.2次元コード生成システム
図33に本実施形態の2次元コード生成システムの機能ブロック図の例を示す。なお本実施形態の2次元コード生成システムは図33の構成要素(各部)の一部を省略した構成としてもよい。
印刷部650は、生成された2次元コードの画像を可視又は不可視インクで印刷する処理を行う。
操作部660は、操作データを入力するためのものであり、その機能は、レバー、方向指示キー、或いはボタンなどにより実現できる。
記憶部670は、処理部600や通信部696などのワーク領域となるもので、その機能はRAM(VRAM)などにより実現できる。
情報記憶媒体680(コンピュータにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク(CD、DVD)、メモリーカード、ハードディスク、或いはメモリー(ROM)などにより実現できる。処理部600は、情報記憶媒体680に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体680には、本実施形態の各部としてコンピュータを機能させるためのプログラム(各部の処理をコンピュータに実行させるためのプログラム)が記憶される。
ディスプレイ690は、本実施形態により生成された画像を表示出力するためのものである。
音出力部692は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
携帯型情報記憶装置694は、プレイヤーの個人データやゲームのセーブデータなどが記憶されるものであり、この携帯型情報記憶装置694としては、メモリカードや携帯型ゲームシステムなどがある。
通信部696は外部(例えばホスト装置や他のゲームシステム)との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ASICなどのハードウェアや、プログラムなどにより実現できる。
なお本実施形態の各部としてコンピュータを機能させるためのプログラム(データ)は、ホスト装置(サーバー)が有する情報記憶媒体からネットワーク及び通信部696を介して情報記憶媒体680(記憶部670)に配信してもよい。このようなホスト装置(サーバー)の情報記憶媒体の使用も本発明の範囲内に含めることができる。
処理部600(プロセッサ)は、操作部660からの操作データやプログラムなどに基づいて、ゲーム演算処理、画像生成処理、或いは音生成処理などを行う。この処理部600は記憶部670をワーク領域として各種処理を行う。処理部600の機能は各種プロセッサ(CPU、DSP等)、ASIC(ゲートアレイ等)などのハードウェアや、プログラムにより実現できる。
処理部600は、2次元コード生成部610、画像生成部630、音生成部640を含む。
2次元コード生成部610は、2値データ列生成処理部620、点配置処理部622、結線処理部624、基準位置設定処理部626、向き情報設定処理部628を含む。
2値データ列生成処理部620は、所与のデータに基づき所与のデータに一義的に対応付けられた2値データ列を生成し、点配置処理部622は、2次元領域に点が配置される可能性のある点配置予約位置を設定し、2値データ列に基づき予め設定された2値データ列配置条件に従って2次元領域の点配置予約位置に点を配置し、結線処理部624は、2次元領域に配置された各点について結線対象となる点を抽出し、各点と結線対象となる点を予め設定された結線条件に従って繋ぐ結線処理を行う。
点配置処理部622は、前記2値データ列に基づき行列を設定し、行列の各要素に前記点配置予約位置を対応付けて、対応付けられた点配置予約位置に行列の各要素の値に基づいて点を配置するようにしてもよい。
また点配置処理部622は、2次元領域を格子状に並んだ複数のセルに分割し、格子点又は各セルの代表点を前記点配置予約位置とするようにしてもよい。
結線処理部624は、各点と他の点を結ぶ直線がそれ以外の点の点配置予約位置を含む点配置予約エリアを横切らないという必要条件を満たす他の点を各点の結線対象点とし、所定の条件を満たす結線対象点と各点とを線(直線)で繋ぐ結線処理を行うようにしてもよい。
点配置処理部622は、2次元領域にメインレイヤーを設定し、メインレイヤーに属する点配置予約位置に2値データ列に基づき点を配置するようにしてもよい。
点配置処理部622は、所与の点配置予約位置がメインレイヤーに属する場合には、当該点配置予約位置の周囲の所定範囲内にある点配置予約位置はメインレイヤーとならないようにメインレイヤーを設定するようにしてもよい。
点配置処理部622は、2次元領域のメインレイヤー以外にサブレイヤーを設定し、サブレイヤーに属する点配置予約位置に、予め設定されたダミー点配置条件に従ってダミーの点を配置するようにしてもよい。
点配置処理部622は、2次元領域のメインレイヤー以外にパリティレイヤーを設定し、パリティレイヤーに属する点配置予約位置に、パリティ情報に基づき点を配置するようにしてもよい。
点配置処理部622は、2次元領域を複数のエリアに分割して、所与のエリア以外のエリアに配置された点に基づきパリティ情報を設定し、所与のエリアのパリティレイヤーに点を配置するようにしてもよい。
2値データ列生成処理部620は、所与のデータを標準フィボナッチ表現へ変換して所与のデータに一義的に対応付けられた2値データ列を生成する。
基準位置設定処理部626は、2次元領域の基準位置を示す情報を設定する処理を行う。
そして画像生成部630は、基準位置を示す情報が含まれた2次元画像を生成する。
向き情報設定処理部628は、2次元領域の向きを示す情報を設定する処理を行う。
そして画像生成部630は、向きを示す情報が含まれた2次元画像を生成する。
画像生成部630は、前記点を結ぶ線に幅を与えて2次元画像を生成する2次元画像生成部として機能する。
音生成部642は、処理部600で行われる種々の処理の結果に基づいて音処理を行い、BGM、効果音、又は音声などのゲーム音を生成し、音出力部192に出力する。
4.画像認識処理
4−1.画像の認識処理の流れ
図34は、2次元コード画像(認識対象画像)を含む画像の認識処理の流れを示すフローチャートである。
まず認識対象のカードを含む画像を撮像して画像データを取得する。(ステップS210)。
図2(A)は撮像部による認識対象物の撮像について説明するための図である。撮像部150はプレイヤーによってステージ12に並べられた複数のカード14(認識対象物)をステージ12の下方から撮像する。ステージ12は撮像部150がカード14を撮像できるように透明なガラス板等からなる。
図2(B)は本実施形態において認識対象物となるカードについて説明するための図である。カード14の裏面(ステージ12に接する面)には各カードを識別するための模様16が印刷されている。また模様16の周囲には所定幅の空白部分18が設けられている。本実施形態では複数のカード14を撮像した画像データから各カード14に表された模様16の外縁の形状(長方形)を判定し、模様16の領域(空白部分18で囲まれた領域)に対応する画像データを認識対象画像として抽出する処理を行うことになる。
本実施の形態の2次元コードが印刷されたカードは、カード自体が隠蔽されない限り、周囲にカード以外の雑多な物体が存在しても、カードの位置と回転角を正確に検出できる。撮影においては背景として用いる「均一な色の紙や布など」は不要であり、何を載せられるか分からない業務用ゲーム機のテーブル面(普通に「手」は載るし、天井の照明による明暗差も悪影響を与える)に対して、可視または不可視インクで印刷されたカードを載せてテーブル下から撮像するアプリケーション等に好適である。
次に撮像された画像データに対してフィルタリング処理を行う(ステップS220)。
一般に外乱の影響や筐体設計上の制約などにより、撮影するテーブル面を均一に照らすことは難しい。従って照明(特に、撮像素子の特性により、実質的な感度が低くなる赤外光照明)の配置により発生するムラや、暗所における撮影もしくは安価なカメラを使用した場合に発生するノイズ等は避けられない。
そこで、本実施の形態では画像認識処理に入る前に、必要な情報(本実施の形態の次元コードの「枠」と「橋」)のみを抜き出し、不要な情報(照明ムラやノイズ)を抑制するフィルターで前処理を行う。前処理は、具体的には2次微分処理、ぼかし処理、2値化処理の3ステップからなる。
具体的には、「4−2.フィルタリング処理」の項で説明する。
次にフィルタリング処理後画像データから認識対象画像を抽出する(ステップS230)。
入力画像(前処理の結果、白黒2値になっているはず)の左上の点から右方向にスキャンし、背景色(黒色)と異なる物体(白色)が見つかった時点で、その点を基準に反時計回りにその物体のアウトラインをトレースし、トレース結果がカードの形状(4頂点を持つ長方形)か否かを判定する。
(1)カードの形状ではない場合 → 今トレースしたアウトラインのみを消去する。→ そしてスキャンを続行する。
(2)カードの形状である場合 → カードの中味を読む。その結果、下記の2つに分岐。
(3)本実施の形態の2次元コードなら、そのデコード結果を返し、中味ごと消去する。→ そしてスキャンを続行する。
(4)本実施の形態の2次元コードではない場合は、今トレースしたアウトラインのみを消去する。→ そしてスキャンを続行する。
以上の操作(1)から(4)を、全ての点のトレースが終了するまで(つまり、右下の点に辿り着くまで)繰り返す。
図35(A)〜(D)は本実施の形態の認識対象画像抽出処理(本処理)の概念について説明するための図である(この図では、便宜上、白黒を反転している)。
図35(A)に示すように入力画像データに太さ1の線ノイズ510がある場合には一瞬で(1回で)消去する。
また図35(B)に示すように入力画像データに太さ2以上の線幅の障害物520がある場合にはアウトラインが長方形(カード)か否かを判定し、長方形(カード)なら図35(D)の処理を行うが、それ以外は明らかな障害物と判定し、図35(C)の処理を行う。
図35(C)では、太さ2以上の線幅の線を皮のように1枚づつ剥がしていく処理を行う。
図35(D)では、認識対象となる画像かどうかの判定を行う。長方形の内部画像が本実施の2次元コードであれば(例えば認識処理をおこなってエラーがでない場合)、長方形の内部を一気に消去する。長方形の内部画像が本実施の2次元コードでなければ(例えば認識処理をおこなってエラーがでた場合)、一枚づつ皮をむいて長方形の内部画像が本実施の2次元コードか否か調べる。
具体的には、「4−3.認識対象画像抽出処理(本処理)」の項で説明する。
次に認識対象画像の認識処理及びエラー補正処理を行う(ステップS240)。
具体的には、「4−4.認識対象画像の認識処理及びエラー補正処理」の項で説明する。
次に認識対象画像の向き検出処理を行う(ステップS250)。
具体的には、「4−5.認識対象画像の向き検出処理」の項で説明する。
4−2.フィルタリング処理
図36が撮影された画像である入力画像であるとして、本実施の形態のフィルタリング処理の一例について説明する。
まず入力画像の画像データに対して2次微分処理を行い、図37に示すような2次微分後の画像データを取得する。
図3は、2次微分処理を行う際に用いられる3×3の2次微分オペレータの具体例を示す図である。本実施形態では、中央の着目画素に重み付け係数「8」が、8個の隣接画素のそれぞれに重み付け係数「−1」が設定されており、これらの各画素に重み付け係数を乗算した値を合計した後に所定の利得(例えば1)を乗算することにより、この着目画素に対応する2次微分データが得られる。なお、周囲に8個の隣接画素が存在しない外周部分の着目画素については、各着目画素と同じ階調データの隣接画素が存在するものとして計算を行うようにしてもよいし、外周部の各画素については2次微分処理を行わないようにしてもよい。
次に2次微分処理後の画像データにぼかし処理を行い、図38に示すようなぼかし処理後の画像データを取得する。
2次微分処理が行われた2次微分データに対して、着目画素とその周囲の画素の2次微分データを用いたぼかし処理を行う。
図4は、ぼかし処理において用いられるぼかしフィルタの具体例を示す図である。本実施形態では、中央の着目画素とその周囲の8個の隣接画素のそれぞれに同じ重み付けがなされている。具体的には、着目画素と8個の隣接画素のそれぞれの2次微分データに係数値「1」を乗算した値を合計した後に所定の利得(例えば1/9)を乗算することにより、この着目画素の新たな2次微分データが得られる。すなわち、着目画素を含む9画素分の階調データを平均化するぼかし処理が行われる。なお、周囲に8個の隣接画素が存在しない外周部分の着目画素については、この着目画素と同じ階調データの隣接画素が存在するものとして計算が行われる。またこのぼかし処理は複数回適用してもよい。
例えば本実施の形態では3回適用している。適用する回数によって、「橋」として抽出する線幅を調整している。(ここで、例えばぼかし処理をガウスぼかしの半径で調整し、ぼかしフィルターの適用は1回のみにする等の手法を用いても良い)。
次にぼかし処理後の画像データに2値化処理を行い、図39に示すような2値化処理後の画像データを取得する。図39ではコントラストが弱い「人物の背後のブラインドの横線」も力強く抽出できている。
二値化処理は、ぼかし処理後の2次微分データを所定の閾値STHと比較することにより、二値データに変換する。2次微分データ>STHの場合には、二値データ=1に設定される。また、2次微分データ≦STHの場合には、二値データ=0に設定される。
尚、ぼかし処理後2次微分データについて、符号なし整数へ型変換(キャスト)を行って上記二値化処理を行ってもよい。符号なし整数への型変換を行うことにより、新たな2次微分データのマイナス値をプラスの最大値付近にすることができ、二値化処理後の画像のコントラストを高めることができる。
図5は、上述した微分処理部121、ぼかし処理部122、二値化処理部123による処理の内容を説明するための図である。図5(A)に示すように画素の色が白から黒、そして黒から白へと変化する2つの境界部分についての画像データに対して、図3に示す2次微分オペレータを用いて2次微分処理を行うと、図5(B)に示す形状に対応する2次微分データが得られる。この2次微分データに対して図4に示すぼかしフィルタを3回適用すると、図5(C)に示す形状に対応する新たな2次微分データが得られる。このぼかし処理された2次微分データを符号なし整数にキャストすると、図5(D)に示すように境界部分のマイナス値がプラスの最大値付近になった2次微分データが得られる。このキャストされた2次微分データを閾値STH=0として二値化処理を行うと、図5(E)に示すような境界部分が強調された二値データを得ることができる。二値化処理後の二値データと図5(A)に示す当初の画像データとを比較すると画素の色が白黒反転しているのがわかる。
2次微分処理とぼかし処理によって、特にエッジ(明暗の「境界」部分)の近辺では負値が出ているので、キャストで小さなマイナス値をプラスの最大値近辺にしてしまうことで、入力画像のエッジを抽出&強調した画像が得られる(全体的にコントラストが高まるという効果もある)。あとは単純に閾値で切れば良い。結果として、2次元コード部分に関しては白黒反転したような出力画像が得られる。もちろん実際には、単に白黒反転しただけではなく、照明ムラによる悪影響が消え、2次元コード以外の雑多なものが写っていた領域も、認識対象画像抽出処理におけるゴミ・ノイズ等の排除処理に適した多くの小領域に分割される。
なお、本フィルタリング処理は、2次元コードの「枠」や「橋」の太さ(撮像された画像における太さ、実際のカードにおける線幅と撮影距離に応じて決定される)に依存することが挙げられる。
また本実施の形態の2次元コードには「枠」と「橋」の太さの線を強調する、という性質が求められているので、2次元コードの線の太さ(のピクセル数)に応じて、ぼかし処理のフィルターの強さ(例えばぼかし処理を行う回数)や2値化処理の閾値の調整が必要になるということである。一方、線の太さが変わらない場合には、これらの調整は不要である。例えば、VGAで4×8枚のカードを敷き詰め上手く認識できたなら、QVGAで2×4枚のカードの認識も同等の精度で(面積が小さくなった分、より高速に!)行える、ということである。
なお本実施の形態の2次元コードの周囲には若干の空白部(元のカード上の「枠」や「橋」が黒ならば、白色の縁)を設けることで処理を容易にすることが可能である。
4−3.認識対象画像抽出処理
図6は二値化処理が行われた画像(二値化画像)の具体例を示す図である。図6において、各正方形領域が各画素に対応している。また、ハッチングが付された領域の画素が二値データ(画素情報)=0の画素であり、それ以外の領域が二値データ(画素情報)=1の画素である。なお、図6に示した二値化画像は、二値化処理および後述する輪郭抽出処理の説明を簡略化するために画素数を減らした場合であって、一例として1枚のカード14がステージ12上に並べられた場合が示されている。尚この例ではカード14だけでなくカード以外の画像も混ざっている。以下では、二値データ=1の画素を「白画素」、二値データ=0の画素を「黒画素」と称して説明を行うものとする。
輪郭抽出処理では、二値化画像を構成する各画素を所定の順番でスキャンして最初に到達する白画素を検出し、この白画素に隣接する他の白画素を最初の白画素に戻ってくるまで順番に辿る(トレースする)ことにより、隣接する白画素からなる画素群の輪郭を抽出する処理を行う。
図7は、輪郭抽出処理の具体例を示す図である。図7に示した例では、スキャン開始点SSが二値化画像の左上に設定されており、右方向に順番に各画素のスキャンが行われ、最終的に右下のスキャン終了点SEで終了する。輪郭抽出部125は、このようなスキャン動作において、最初に検出した白画素をトレース開始点TS1として抽出し、図7の実線の矢印で示した順番に、再びこのトレース開始点TSに到達するまで白画素を辿っていく処理を行う。
以下、輪郭抽出処理の詳細について説明する。まず、輪郭抽出部125は、その時点における白画素の位置を中心にその周囲の8画素を調べ、次に辿るべき白画素の位置を決定する。
図8は、上述した輪郭抽出処理において次の白画素を決定する手法を説明するための図である。図8において、「C」は現在の着目画素(白画素)を、「P」は現在の画素に至る直前の画素(白画素)の位置をそれぞれ示している。また、「1」〜「8」のそれぞれの数字は、次に辿っていく白画素の選択の優先順番を示している。例えば、直前の白画素が現在の着目画素の真上に位置する場合には、左上、左、左下、下、右下、右、右上、上の各画素を順番に見ていって、最初に現れる白画素が、次に辿るべき白画素として決定される。但し、直前の白画素がどの位置にあった場合であっても、「1」に対応する画素が、次に辿る白画素となることはないため、実際には最も多い場合であっても「2」〜「8」の7個の画素を調べればよい。
このようにして、トレース開始点TS1から順番に白画素を辿っていく処理が一巡すると、輪郭抽出部125は、順番に辿った各白画素の座標値に基づいて輪郭を抽出したことになる。
さらに後述する画素情報変更処理によって輪郭を構成する各白画素を黒画素に変更する処理が行われた後、または輪郭の内部領域にある各画素を黒画素に変更する処理が行われた後に、トレース開始点TS1の右隣の画素(次のスキャン対象画素)から輪郭抽出処理を再開させる。
図9〜図12は、輪郭抽出処理の流れについて説明するための図である。図9では、図7において抽出された輪郭の軌跡の形状が所定の形状でないと判定されたために、後述する画素情報変更部127によってTS1から始まる輪郭を構成していた白画素が黒画素に変更されている。輪郭抽出部125は、トレース開始点TS1の右隣の画素からスキャン動作を再開し、次に検出した白画素をトレース開始点TS2として抽出し、実線の矢印で示した順番に白画素を辿っていく処理を行い、辿った各白画素の座標値に基づいて輪郭を抽出する処理を行う。
図10では、図9において抽出された輪郭の軌跡の形状が所定の形状でないと判定されたために、後述する画素情報変更部127によってTS2から始まる輪郭を構成していた白画素が黒画素に変更されている。輪郭抽出部125は、トレース開始点TS2の右隣の画素からスキャン動作を再開し、次に検出した白画素をトレース開始点TS3として抽出し、実線の矢印で示した順番に白画素を辿っていく処理を行い、辿った各白画素の座標値に基づいて輪郭を抽出する処理を行う。
図11では、図10において抽出された輪郭の軌跡の形状が所定の形状でないと判定されたために、後述する画素情報変更部127によってTS3から始まる輪郭を構成していた白画素が黒画素に変更されている。輪郭出部125は、トレース開始点TS3の右隣の画素からスキャン動作を再開し、次に検出した白画素をトレース開始点TS4として抽出し、実線の矢印で示した順番に白画素を辿っていく処理を行い、辿った各白画素の座標値に基づいて輪郭を抽出する処理を行う。
図12では、図11において抽出された輪郭の軌跡の形状が所定の形状であり、かつ内部が正しい2次元コードであると判定されたために、認識対象画像の抽出後、後述する画素情報変更部127によって輪郭の内部領域にある各画素が黒画素に変更されている。輪郭抽出部125は、トレース開始点TS4の右隣の画素からスキャン動作を再開し、スキャン終了点SEまでスキャンして終了する。
輪郭判定部126は、輪郭抽出部125によって抽出された輪郭の軌跡の形状が所定の形状であるか否かを判定する処理を行う。本実施形態では、認識対象画像としてカード12に印刷された模様16を抽出するために、前記輪郭の軌跡の形状が長方形であるか否かを判定する。ここで長方形であるか否かの判断は、前記輪郭を構成する画素列に含まれる長方形の頂点を検出することにより行う。
以下、形状を判定する処理の詳細について説明する。輪郭判定処理では、抽出された輪郭に沿って所定の長さLの部分画素列を移動させながら、この部分画素列の頭部(先頭部分)と尾部(末尾部分)のそれぞれに対応するように設定された2つのベクトルの内積値IPの計算を行う。
図13は、輪郭に沿って移動する部分画素列の具体例を示す図である。例えば長さL=10とすると、輪郭に沿った10個の画素からなる部分画素列が生成される。また、この部分画素列の頭部と尾部のそれぞれには、所定の長さMの2つのベクトルA、B(頭部のベクトルAをVA、尾部のベクトルBをVBとする)が設定されている。例えば長さM=3とすると、VAは、部分画素列の先頭の画素を終点とし、3個目の画素を始点とする向きを有する。また、VBは、部分画素列の最後尾の画素を始点とし、後ろから3個目の画素を終点とする向きを有する。
ところで、VAとVBのそれぞれは以下のように表すことができる。
VA=(VAのX成分の差,VAのY成分の差)
=(vax,vay)
VB=(VBのX成分の差,VBのY成分の差)
=(vbx,vby)
したがって、VAとVBの内積値IPは、
IP=VA・VB=vax×vbx+vay×vby
となる。輪郭判定処理では、この内積値IPと所定の閾値TIPとを比較し、|IP|≦TIPの場合には、VAとVBとのなす角がほぼ直角であって、長方形の頂点が部分画素列に含まれていると判断し、|IP|>TIPの場合には長方形の頂点が部分画素列に含まれていないと判断する。
なお、正確には、VAとVBとのなす角θはarccos(IP/(|VA|×|VB|))の式で計算されるため、ベクトルの長さを計算したり、除算等を行う必要があるが、VA、VBについて考えた場合にはベクトルの長さは2から2√2までの範囲に含まれることがわかっているので、本実施形態ではTIPの値を2とすることにより、これらの面倒な計算を省略している。
このようにして、部分画素列を輪郭に沿って移動させることにより長方形の頂点を検出し、部分画素列を輪郭に沿って一周移動する間に4つの長方形の頂点を検出した場合に輪郭の軌跡の形状が長方形であると判定し、それ以外の場合には輪郭の軌跡の形状が長方形でないと判定する。
認識対象画像抽出処理では、輪郭判定処理によって輪郭の軌跡の形状が長方形であると判定された場合に、当該輪郭の内部領域にある各画素に対応する二値データを認識対象画像として抽出する処理を行う。
輪郭判定処理によって輪郭の軌跡の形状が長方形でないと判定された場合に、当該輪郭を構成する各白画素を黒画素に変更する画素情報変更処理を行う。ここで黒画素への変更は、輪郭抽出処理が順番に辿った各白画素に対応する二値データを0に設定することにより行う。
また輪郭の内部領域にある各画素の二値データの抽出が行われた場合に、当該輪郭の内部領域にある各画素を黒画素に変更する画素情報変更処理を行う。例えば、図14に示すように輪郭を構成する各白座標のX座標の最小値Xminと最大値Xmaxと、Y座標の最小値Yminと最大値Ymaxを抽出し、YminからYmaxまでの各Y座標について、対応するXminからXmaxまでの各画素に対応する二値データを0に設定する。
図15は本実施形態の処理の一例について説明するためのフローチャート図である。ここでは、二値化処理部123によって二値化処理が行われた後の処理について説明する。
二値化処理部123によって得られた二値化画像を構成する各画素のスキャンを開始し、全画素をスキャンしたか否かを判定する(ステップS110)。全画素をスキャンしていなければ次の画素をスキャンする(ステップS120)。スキャンした画素の画素情報が所定の画素条件を満たすか(白画素であるか)否か判断し(ステップS130)、満たさなければ(黒画素であれば)ステップS110に戻る。
スキャンした画素の画素情報が所定の画素条件を満たせば(白画素であれば)、当該画素をトレース開始点として抽出し、トレース開始点から再びトレース開始点に到達するまで順番に所定の画素条件を満たす画素情報をもつ画素(白画素)をトレースする(ステップS140)。次にトレースした各画素(各白画素)の座標値に基づき輪郭を抽出する(ステップS150)。次に抽出した輪郭の頂点を検出し、検出した頂点に基づき輪郭の軌跡の形状が所定の形状(長方形)であるか否か判定する。(ステップS160)、輪郭の軌跡の形状が所定の形状(長方形)でなければ、輪郭を構成する画素(トレースした白画素)の画素情報を所定の画素条件を満たす画素情報以外の画素情報(二値データ=0)に変更する処理を行い(ステップS170)、ステップS110に戻る。
抽出した輪郭の軌跡の形状が所定の形状(長方形)であれば、輪郭の内部領域にある各画素に対応する二値データを認識対象画像として抽出する処理を行う(ステップS180)。
次に抽出した認識対象画像が、本実施の形態の2次元コードであればステップS190の処理を行う(ステップS182)。本実施の形態の2次元コードと判定するための判定条件を予め設定しておき、条件を満たせば本実施の形態の2次元コードであると判定してもよい。
本実施の形態の2次元コードでなければ(ステップS182)、エラー補正を試みて(ステップS184)再び本実施の形態の2次元コードか否か判断し、本実施の形態の2次元コードであればステップS190の処理を行う(ステップS186)。本実施の形態の2次元コードでなければステップS170の処理を行う。
本実施の形態の2次元コードか否かの判断やエラー補正は、例えば「4−4.認識対象画像の認識処理及びエラー補正処理」で説明するような手法を用いることができる。
そして認識対象画像が本実施の形態の2次元コードであれば、抽出した認識対象画像からカードの識別番号、位置等を取得する処理を行う(ステップS190)。次に輪郭の内部領域にある各画素の画素情報を所定の画素条件を満たす画素情報以外の画素情報(二値データ=0)に変更する処理を行い(ステップS200)、ステップS110に戻る。そして全ての画素をスキャンした場合に処理を終了する。
4−4.認識対象画像の認識処理及びエラー補正処理
本実施の形態では、認識対象画像の基準点対応位置を検出し、基準点対応位置に基づき基準点に関連づけて設定されている注目点(例えば点配置予定位置)に対応する認識画像上の注目点対応位置を演算し、演算した注目点位置対応位置に基づき認識対象画像の画素情報を検出し、抽出された画素情報に基づき2次元コードに対応付けられた対応データを演算する。
図40〜図43は注目点画素情報検出処理について説明するための図である。K1’、K2’、K3’、K4’は認識対象画像400の基準点対応位置である。基準点は例えば2次元領域の四隅の頂点(図41のK1、K2、K3、K4)に設定するようにしてもよい。なお2次元領域が長方形(正方形も含む)の場合を長方形を構成する3頂点または2頂点(対角線上の頂点)で形状を特定することができるため基準点を3頂点または2頂点としてもよい。
認識対象画像の基準点対応位置は枠線の外周のエッジ(頂点)E1、E2、E3、E4と枠の幅により決定するようにしてもよい。また枠線410の内周のエッジを検出し、それを基準点対応位置と決定してもよい。
ここで注目点をメインレイヤーの点配置予定位置(図41の250)とすることにより、ここに点が配置されているかいなかの情報を認識対象画像から取得することができる。
図41に示すように2次元領域におけるメインレイヤーの点配置予定位置250は、基準位置K1、K2、K3、K4に対しての相対位置が決まっている。
ここで図41のメインレイヤーの点配置予定位置であるセルS(2、2)の中心点をP、認識対象画像上の対応位置をP’とする。2次元画像上での点Pの基準点K1からの相対位置を(x、y)とし(図41参照)、認識対象画像上での点P’の基準点対応位置K1’からの相対位置を(x’、y’)とすると、下記の式が成り立つ。
x:x’=L:L’
y:y’=L:L’
従って2次元領域における基準位置間の距離Lと、認識対象画像における対応する基準点対応位置間の距離L’が求まれば、認識対象画像のメインレイヤーの点配置予定位置も求めることができる。
例えば図40ではメインレイヤーの点配置予定位置であるセルS(2、2)の中心点をPの認識対象画像上の対応位置をP’の画素は白画素であるためセルS(2、2)には点が配置されていないことを検出することができる。
同様の処理をメインレイヤーを構成するすべて点配置予定位置にたいして行うことにより、メインレイヤーに配置された2値データ列を求めることができる。
そして求めた2値データ列を標準フィボナッチ表現とするデータを求めることで、2次元コードに対応付けられた対応データを求めることができる。
例えば図19に示すような標準フィボナッチ表現と10進数の対応テーブルを保持しておき、対応テーブルを参照して標準フィボナッチ表現に対応する10進数の対応データを求めるようにしてもよい。
また本実施の形態では、認識対象画像から求めた2値データ列に基づき、予め設定された2値データ列配置条件に従って、2次元領域の点配置予約位置に点を配置し、予め設定された結線条件に従って前記各点と結線対象となる点を繋ぐ結線シミュレーション処理を行い、認識対象画像から検出したサンプリングした点の結線状態と結線シミュレーション処理によって得られたサンプリングした点の結線状態とを比較して、エラーの検出及びエラー補正の少なくとも一方を行うようにしてもよい。
すなわち、画像認識システムにも2次元コード生成を行う際の点の配置及び結線のアルゴリズムを持たせて、認識対象画像から得られた2値データ列に基づいて2次元領域に点を配置し、結線条件にしたがって結線する結線シミュレーション処理を行う。
図42は結線シミュレーション処理によって、認識対象画像から得られた2値データ列に基づいて2次元領域に点を配置した状態を表す図である。図43は、認識対象画像である。ここでメインレイヤーのセルS(6,4)に配置された点とサブレイヤーのセルS(8,3)に配置された点に着目すると、この両点は、図27で説明した結線条件を満たすので線で繋がれる。そこで、線上の2点SP1、SP2をサンプリングして、SP1、SP2に対応する認識画像上の点SP1’SP2’の位置を求める。位置の求め方は図40、図41で説明した手法と同様である。そして認識対象画像から求めた位置に対応する画素情報を検出して、検出した画素情報が線の存在を示しているかいなか(例えば黒画素であるかいなか)を判定することにより結線状態の比較を行うようにしてもよい。
エラーがでる原因としては、偽造カードである場合と、ノイズ等による画像認識ミスによる場合が考えられる。
比較結果によりエラーが検出された場合には、エラーとして認識を中止してもよいし、エラー補正を行うようにしてもよい。
例えばエラーの原因が偽造カードである場合には、エラー補正する必要がないので、エラーとして認識を中止することで偽造カードの使用ができないようにすることもできる。
またエラーの原因がノイズ等による画像認識ミスである場合には、エラーがでなくなるまで石の位置を変更して結線シミュレーション処理を行うことで、エラー補正を行うことができる。
また本実施の形態では、認識対象画像から求めた2値データ列に対して、標準フィボナッチ表現で表される2値データ列の条件に基づきエラーの検出及びエラー補正の少なくとも一方を行うようにしてもよい。
例えば標準フィボナッチ表現は、データ列において1が隣り合うことがない。従って、メインレイヤーの点配置予約位置に連続して点が配置されている場合にはエラーであると判定することができる。
この場合にも、エラーとして認識を中止してもよいし、エラー補正を行うようにしてもよい。
例えばエラーの原因が偽造カードである場合には、エラー補正する必要がないので、エラーとして認識を中止することで偽造カードの使用ができないようにすることもできる。
またエラーの原因がノイズ等による画像認識ミスである場合には、標準フィボナッチ表現で表される2値データ列の条件に基づき石の位置を変更して、エラー補正を行うことができる。
また2次元領域のメインレイヤー以外に設定されたサブレイヤーに属する点配置予約位置に、予め設定されたダミー点配置条件にダミーの点を配置するシミュレーション処理を行い、認識対象画像から検出したサンプリングしたダミー点の位置とダミー点シミュレーション処理によって得られたダミー点の位置とを比較して、エラーの検出及びエラー補正の少なくとも一方を行うようにしてもよい。
サブレイヤーへのダミー点の配置は、メインレイヤーやパリティレイヤーの点の配置に関係した配置条件に従って配置される場合でもよいし、メインレイヤーやパリティレイヤーの点の配置とは無関係な規則や条件に従って配置される場合でもよい。
前者の場合には認識対象画像から求めた2値データ列に基づいて、メインレイヤーやパリティレイヤーへの点の配置のシミュレーションを行ってから、サブレイヤーへのダミーの点の配置シミュレーションを行うようにしてもよい。
そしてダミー点シミュレーション処理によって得られたダミー点に対応する認識対象画像上の位置を求めて、認識対象画像から求めた位置に対応する画素情報を検出して、検出した画素情報がダミー点の存在を示しているかいなか(例えば黒画素であるかいなか)を判定することによりエラー検出やエラー補正を行うようにしてもよい。
図44は、本実施の形態の認識対象画像の認識処理及びエラー補正処理の流れについて説明するためのフローチャートである。
まず認識対象画像の基準点対応位置を検出する(ステップS310)。
次に、基準点対応位置に基づき基準点に関連づけて設定されているメインレイヤーに属する点配置予定位置に対応する認識画像上の点配置予定位置を演算する(ステップS320)。
次に、演算した点配置予定位置に基づき認識対象画像の画素情報を検出する(ステップS330)。
次に、検出された画素情報に基づき2値データ列を求める(ステップS340)。
次に求めた2値データ列について標準フィボナッチ表現で表される2値データ列の条件に基づきエラーの検出及びエラー補正の少なくとも一方を行う(ステップS350)。
次に、2次元領域のメインレイヤー以外に設定されたサブレイヤーに属する点配置予約位置に、予め設定されたダミー点配置条件にダミーの点を配置するシミュレーション処理を行う(ステップS360)。
次に認識対象画像から検出したサンプリングしたダミー点の位置とダミー点シミュレーション処理によって得られたダミー点の位置とを比較して、エラーの検出及びエラー補正の少なくとも一方を行う(ステップS370)。
次に求めた2値データ列に基づき、予め設定された2値データ列配置条件に従って、2次元領域の点配置予約位置に点を配置し、予め設定された結線条件に従って前記各点と結線対象となる点を繋ぐ結線シミュレーション処理を行う(ステップS380)。
次に認識対象画像から検出したサンプリングした点の結線状態と結線シミュレーション処理によって得られたサンプリングした点の結線状態とを比較して、エラーの検出及びエラー補正の少なくとも一方を行う(ステップS390)。
なお上記ステップのすべて行う必要はなく、後述認識レベルに応じて適宜省略することができる。
4−5.2次元コードの認識レベル
本実施の形態の2次元コードは、その認識の深さにおいてスケーラブルである。表面的な部分のみを見ることにより低性能だが高速に実現することができ、深い部分まで見れば高性能だが低速に実現することができる。入力画像の画質も、前者ならば低画質でも動作するが、後者になるほど高画質を要求されるようになる。どのレベルの実装を利用するかは、用途やコストなどを考慮した上で総合的に判断するようにしてもよい。
なお、以下に述べる「セキュリティレベル」とは「切り貼り偽造」に対する強さを示している。
レベル1:メイン・レイヤーの「石」の情報のみを用いる。
認識対象となる画像の条件(つまり、画質)が劣悪な場合でも、何とかIDは取得できる。しかし、エラーチェックは最低限のものしか実行されない(具体的には「標準フィボナッチ表現か否か」程度)。また、セキュリティレベルも下がるので、実際には限定した条件下で利用するのが望ましい。
レベル2:レベル1に加え、パリティ・レイヤーの「石」の情報も用いる。
メイン・レイヤー上にやや大きなノイズが乗っていた場合でも検出できる可能性が高くなる。ただし、セキュリティレベルは、レベル1と同程度。
レベル3:レベル2に加え、サブ・レイヤーの「石」の情報も用いる。
ID検出については、エラー検出も含め、問題ないレベルになる。セキュリティレベルは、中程度。
レベル4:レベル3に加え、各「橋」上から数点をサンプリングし、「石」間の結線情報も取得・検証する。
セキュリティレベル的には、実用上、まず問題になることはない。処理速度とID検出・セキュリティレベルのバランスが良い。
レベル5:「橋」の形状全体を見る。
最高のセキュリティレベル。ただし、2次元画像として細部まで検証(標準パタンと比較)することになるため、処理が重くなる。
具体的には、「橋のエッジ」を照合する方法(境界部分のみを見る)と、「橋を作るピクセルの有無」を照合する方法(カード全体を見る)に大別できる。いずれも、橋の作る線の連続性も全て調べることになるので、事実上、切り貼り偽造は不可能である。
図45は、2次元コードの認識レベルの比較表である。
4−6.ピクセル単位のエラー訂正(前処理)
もともと「橋」自体に太さがあるので、まずこの時点で「橋」の上に乗っているピクセル単位の小さなノイズは、除去できる(もちろん、「橋」以外の部分のノイズも薄めることができる)。
具体的には、周囲のピクセルを参照すれば良い(例:「ぼかしフィルター」を掛ける等)。
なお、低画素数のカメラや低画質のレンズであれば、光学的に「ぼかしフィルター」が掛かった状態になるので、光速でノイズを除去できる。
4−7.2次元コードにおけるエラー訂正について(本処理)
例えば、標準フィボナッチ表現の性質により、横方向についてはメイン・レイヤーの「石」の間には必ず1以上の(3マス以上の)隙間があるはずなので、もし隙間が無かった場合には、何らかの問題が発生していることを検出できる(許容量以上のパースが掛かっている=つまりカードの一部が浮いて傾いているか、大きなノイズか、偽造カードか…)。
この場合、1以上の(3マス以上の)隙間を確保できる位置までメイン・レイヤーの「石」を仮に(内部処理的に)動かしたり、または「石」を排除することで、その際の周囲のサブ・レイヤーの「石」やパリティ・レイヤーの「石」(もちろん、それらとの間に架けられた「橋」の情報も用いる)との合致度(現実の入力画像とシミュレーションとの合致度)を調べ、最も誤差が少ない配置をエラー補正後の認識結果として返すことになる。通常の場合、うまく補正できれば、誤差はゼロまたは限りなくゼロに近付く。逆に、多少の補正では誤差が閾値以下にならない場合は、撮像システムのトラブルか切り貼りによる偽造カードなどの可能性が高い。
もちろん、この補正方法は、上の例のような標準フィボナッチ表現の性質により検出されたエラーだけではなく、メイン・レイヤー、サブ・レイヤー、パリティ・レイヤーのすべての「石」と「橋」(または、「石」や「橋」が置かれていない部分)の白黒反転(ノイズ等により白黒反転してしまった場合)についても有効である。
ちなみに、ここでのポイントは「本2次元コードのデコードを行う実装上にも、エンコードのためのルーチンを内蔵しておき、必要に応じてシミュレーションする(そして、誤差最少を目指す)」ということである。言い換えれば、この2次元コードを構成する「橋」の集合体の形状全体を用いた、総力戦によるエラー訂正とも言える。1つの「石」の有無が、周囲およびパリティに大きく影響を与えるため、局部に依存しない(連鎖反応的に周囲に影響を与える)。
4−8.姉妹IDとカードの向き
本実施の形態では2値データ列の値と認識対象画像の向きの関係に関する向き判定情報を記憶し、求めた2値データ列と前記向き判定情報に基づき認識対象画像の向きを判定する処理を行う。
向き判定情報として読み取り対象となる姉妹ID(正方向に認識した場合の正方向IDと逆方向に認識した場合の逆方向ID)と向きの関係を保持しておき、認識したデータがどちらにあたるかで向きを決定する。例えば求めたデータが逆方向IDであれば、カードの向きが逆方向であると判断してもよい。
また向き判定情報として、姉妹IDについて正方向IDの取り得る条件(例えば範囲)負方向IDの取り得る条件を記憶させておき、認識したデータがどちらの条件を満たすかで、向きを判定するようにしてもよい。
姉妹IDは特に本実施の形態の2次元コードを印刷したカードをカードゲーム機などに応用する場合に用いることができる。一般に2次元コードは正位置から読んだ場合と逆位置から読んだ場合で2種類のIDを持つが、この時、正位置のIDから見た逆位置のID(または、その逆)を「姉妹ID」と呼ぶ。正位置のIDが決まれば逆位置のIDも一意に決定する(もちろん、その逆も真)。実用上のメリットとしては、カードの向きを知る上で重要な情報となることや、正位置・逆位置両方でカードの認識を行い認識の精度を高める(冗長性を持たせる)ことなどが挙げられる。純粋に算術論理演算のみで、正位置のIDと逆位置のIDを相互に高速に変換できる。
なお、正位置のIDのみで逆位置のIDを持たないものもあるが、これを「姉妹IDを持たない」という。これは例えば、7fitの場合、"32"(1010100)を使用していないことに起因する。
ちなみに、認識エンジンが正位置のIDを持つカードしか検出しないように実装することも可能である。この場合、「カードが正位置の場合にのみ、筐体のテーブル上に存在する」という扱いにできる。同じカードの上下をひっくり返して逆位置にすると「カードが消える」のである(スイッチの様に使える)。もちろん、姉妹IDを持つカードでも同様の効果は得られるので、全てのカードの位置と回転角を常に把握しておきたいならば、姉妹IDを持つカードのみで構成するようにしてもよい。
5.画像認識装置
図1に本実施形態の画像認識装置を適用したゲームシステムの機能ブロック図の例を示す。なお本実施形態のゲーム装置は図1の構成要素(各部)の一部を省略した構成としてもよい。
撮像部150は、認識対象物を撮像するためのものであり、その機能は撮像素子としてCCDが用いられたカメラなどにより実現できる。また撮像部150は、撮像範囲の各座標の画素に対応するグレースケールの階調データ(画素情報)の集合である画像データを処理部100に出力する処理を行う。
操作部160は、プレイヤーが操作データを入力するためのものであり、その機能は、レバー、方向指示キー、或いはボタンなどにより実現できる。
記憶部170は、処理部100や通信部196などのワーク領域となるもので、その機能はRAM(VRAM)などにより実現できる。
情報記憶媒体180(コンピュータにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク(CD、DVD)、メモリーカード、ハードディスク、或いはメモリー(ROM)などにより実現できる。処理部100は、情報記憶媒体180に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体180には、本実施形態の各部としてコンピュータを機能させるためのプログラム(各部の処理をコンピュータに実行させるためのプログラム)が記憶される。
ディスプレイ190は、本実施形態により生成された画像を表示出力するためのものである。
音出力部192は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
携帯型情報記憶装置194は、プレイヤーの個人データやゲームのセーブデータなどが記憶されるものであり、この携帯型情報記憶装置194としては、メモリカードや携帯型ゲームシステムなどがある。
通信部196は外部(例えばホスト装置や他のゲームシステム)との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ASICなどのハードウェアや、プログラムなどにより実現できる。
なお本実施形態の各部としてコンピュータを機能させるためのプログラム(データ)は、ホスト装置(サーバー)が有する情報記憶媒体からネットワーク及び通信部196を介して情報記憶媒体180(記憶部170)に配信してもよい。このようなホスト装置(サーバー)の情報記憶媒体の使用も本発明の範囲内に含めることができる。
処理部100(プロセッサ)は、操作部160からの操作データやプログラムなどに基づいて、ゲーム演算処理、画像生成処理、或いは音生成処理などを行う。この処理部100は記憶部170をワーク領域として各種処理を行う。処理部100の機能は各種プロセッサ(CPU、DSP等)、ASIC(ゲートアレイ等)などのハードウェアや、プログラムにより実現できる。
処理部100は、ゲーム演算部110、画像生成部140、音生成部142を含む。
ゲーム演算部110は、ゲーム画像やゲーム音を生成するためのゲーム演算処理を行う。ここでゲーム演算処理としては、ゲームの内容やゲームモードを決定する処理、ゲーム開始条件が満たされた場合にゲームを開始する処理、ゲームを進行させる処理、ゲームプレイにより変化するゲームパラメータを演算する処理、或いはゲーム終了条件が満たされた場合にゲームを終了する処理などがある。
ゲーム演算部110は、画像認識部120を含む。画像認識部120は、撮像部150によって出力される画像データからカードの模様部分に対応する画像データを認識対象画像として抽出し、抽出した認識対象画像から撮像されたカードの識別情報や位置等を取得する処理を行う。そしてゲーム演算部110は、取得したカードの識別情報や位置情報等に基づきゲーム演算を行う。
画像認識部120は、微分処理部121、ぼかし処理部122、二値化処理部123、輪郭抽出部125、輪郭判定部126、画素情報変更部127、認識対象画像抽出部128、注目点画素情報検出部130,対応データ演算部132、シミュレーション処理部134、エラー検出・補正処理部136、向き判定部138を含む。
微分処理部121は、撮像部150から出力される画像データに対して、着目画素とその周囲の画素の階調データ(画素情報)を用いた2次微分処理を行う。
ぼかし処理部122は、微分処理部121によって2次微分処理が行われた2次微分データに対して、着目画素とその周囲の画素の2次微分データを用いたぼかし処理を行う。
二値化処理部123は、ぼかし処理部122から出力される新たな2次微分データを所定の閾値STHと比較することにより、二値データに変換する。2次微分データ>STHの場合には、二値データ=1に設定される。また、2次微分データ≦STHの場合には、二値データ=0に設定される。
尚、ぼかし処理部122から出力される新たな2次微分データについて、符号なし整数へ型変換(キャスト)を行って上記二値化処理を行ってもよい。符号なし整数への型変換を行うことにより、新たな2次微分データのマイナス値をプラスの最大値付近にすることができ、二値化処理後の画像のコントラストを高めることができる。
輪郭抽出部125は、二値化画像を構成する各画素を所定の順番でスキャンして最初に到達する白画素を検出し、この白画素に隣接する他の白画素を最初の白画素に戻ってくるまで順番に辿る(トレースする)ことにより、隣接する白画素からなる画素群の輪郭を抽出する処理を行う。
認識対象画像抽出部128は、輪郭判定部126によって輪郭の軌跡の形状が長方形であると判定された場合に、当該輪郭の内部領域にある各画素に対応する二値データを認識対象画像として抽出する処理を行う。
画素情報変更部127は、輪郭判定部126によって輪郭の軌跡の形状が長方形でないと判定された場合に、当該輪郭を構成する各白画素を黒画素に変更する処理を行う。ここで黒画素への変更は、輪郭抽出部125が順番に辿った各白画素に対応する二値データを0に設定することにより行う。
また画素情報変更部127は、認識対象画像抽出部128によって輪郭の内部領域にある各画素の二値データの抽出が行われた場合に、当該輪郭の内部領域にある各画素を黒画素に変更する処理を行う。例えば、図14に示すように輪郭を構成する各白座標のX座標の最小値Xminと最大値Xmaxと、Y座標の最小値Yminと最大値Ymaxを抽出し、YminからYmaxまでの各Y座標について、対応するXminからXmaxまでの各画素に対応する二値データを0に設定する。
注目点画素情報検出部130は、認識対象画像の基準点対応位置を検出し、基準点対応位置に基づき基準点に関連づけて設定されている注目点(例えば点配置予定位置)に対応する認識画像上の注目点対応位置を演算し、演算した注目点位置対応位置に基づき認識対象画像の画素情報を検出する処理を行う。
対応データ演算部132は、注目点画素情報検出部130によって検出された画素情報に基づき2次元コードに対応付けられた対応データを演算する処理を行う。
注目点画素情報検出部130は、メインレイヤーに属する点配置予定位置を注目点として、注目点対応位置として認識画像上の点配置予定位置を演算し、演算した点配置予定位置に基づき認識対象画像の画素情報を検出し、対応データ演算部132、検出された画素情報に基づき2値データ列を求め、求めた2値データ列に一義的に対応付けられた所与のデータを対応データとして求めるようにしてもよい。
シミュレーション処理部134は、対応データ演算部132によって演算された2値データ列に基づき、予め設定された2値データ列配置条件に従って、2次元領域の点配置予約位置に点を配置し、予め設定された結線条件に従って前記各点と結線対象となる点を繋ぐ結線シミュレーション処理を行うようにしてもよい。
シミュレーション処理部134は、2次元領域のメインレイヤー以外に設定されたサブレイヤーに属する点配置予約位置に、予め設定されたダミー点配置条件にダミーの点を配置するダミー点シミュレーション処理を行うようにしてもよい。
エラー検出・補正処理部136は、認識対象画像から検出したサンプリングした点の結線状態と結線シミュレーション処理によって得られたサンプリングした点の結線状態とを比較して、エラーの検出及びエラー補正の少なくとも一方を行うようにしてもよい。
エラー検出・補正処理部136は、対応データ演算部132によって演算された2値データ列に対して、標準フィボナッチ表現で表される2値データ列の条件に基づきエラーの検出及びエラー補正の少なくとも一方を行うようにしてもよい。
エラー検出・補正処理部136は、認識対象画像から検出したサンプリングしたダミー点の位置とダミー点シミュレーション処理によって得られたダミー点の位置とを比較して、エラーの検出及びエラー補正の少なくとも一方を行うようにしてもよい。
向き判定部138は、対応データ演算部132によって演算された2値データ列と前記向き判定情報に基づき認識対象画像の向きを判定する処理を行う。
画像生成部140は、処理部100で行われる種々の処理(ゲーム処理、画像認識処理)の結果に基づいて描画処理を行い、ディスプレイ190に出力する。この場合、画像生成部130が生成する画像は、いわゆる2次元画像であってもよいし、3次元画像であってもよい。
音生成部142は、処理部100で行われる種々の処理の結果に基づいて音処理を行い、BGM、効果音、又は音声などのゲーム音を生成し、音出力部192に出力する。
なお本発明は、上記実施形態で説明したものに限らず、種々の変形実施が可能である。例えば、明細書又は図面中の記載において広義や同義な用語として引用された用語は、明細書又は図面中の他の記載においても広義や同義な用語に置き換えることができる。
上記実施の形態では、2次元領域に配置された点が線でつながれた構成の2次元コードやその生成方法及び認識方法を例にとり説明したがこれに限られない。
例えば所与のデータが2次元画像としてコード化された2次元コードであって、所与のデータに一義的に対応付けられた2値データ列に基づき、2次元領域に設定されたメインレイヤーに属する点配置予約位置に配置された点と、2次元領域のメインレイヤー以外に属する点配置予約位置に配置されたダミーの点と、を画像構成要素に含み、前記点に所与のパタンを与えて2次元画像化された2次元コードやその生成方法及び認識方法も本発明の範囲内である。