以下、本明細書で開示する二次元コードの好ましい第1実施形態を、図を参照して説明する。但し、本発明の技術範囲はそれらの実施形態に限定されず、特許請求の範囲に記載された発明とその均等物に及ぶものである。
図1は、本明細書に開示する第1実施形態の二次元コードを示す図である。
本実施形態の二次元コード10は、図1に示すように、所定の方向に延びる形状を備えており、図1に示す例では、横長の形状を備える。
二次元コード10は、二次元コードが撮影された画像において二次元コードの位置を検出するために使用される複数の位置検出パターン12A、12B、12Cと、メッセージ等の情報を有するデータ部11を備える。
二次元コード10は、単独で画像から検出可能な2個以上の異なる位置検出パターンを備える。本実施形態では、二次元コード10は、3つ異なる位置検出パターン12A、12B、12Cを備える。なお、二次元コード10は、4個以上の位置検出パターンを備えていてもよい。
具体的には、二次元コード10は、長手方向の左端に配置される第1位置検出パターン12Aと、長手方向の中央部に配置される第2位置検出パターン12Bと、長手方向の右端に配置される第3位置検出パターン12Cを備える。
第1位置検出パターン12Aと第2位置検出パターン12Bとの間には、データ部11が配置される。また、第2位置検出パターン12Bと第3位置検出パターン12Cとの間にも、データ部11が配置される。データ部11は、一対の延長線Lの内部から外部へ亘って配置されているが、データ部11を構成するセルが、一対の延長線Lの外部に配置される領域は、一対の延長線Lの幅の50%以内、特に20%以内、更に10%以内であることが、二次元コード10の幅を狭くする観点から好ましい。
各位置検出パターン12A、12B、12Cの外形は四角形であり、一の位置検出パターン12Aの対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線Lの内部に、全ての他の2つの位置検出パターン12B、12Cそれぞれが、少なくとも一部が重なるように配置されている。
図1に示す二次元コードの例では、第2位置検出パターン12Bは、その対向する一対の辺が、一対の延長線Lと重なるように配置されており、第2位置検出パターン12Bの全体が、一対の延長線Lの内部に重なるように配置されている。
また、第3位置検出パターン12Cも、その対向する一対の辺が、一対の延長線Lと重なるように配置されており、第3位置検出パターン12Cの全体が、一対の延長線Lの内部に重なるように配置されている。
上述した説明では、一対の延長線として、第1位置検出パターン12Aの対向する一対の辺を、仮想的に辺の延びる方向に延長した線を用いて、他の位置検出パターン12B、12Cとの関係を説明したが、一の位置検出パターンの対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線Lの内部に、全ての他の位置検出パターンそれぞれが、少なくとも一部が重なるように配置されていればよい。一対の延長線は、第2位置検出パターン12B又は第3位置検出パターン12Cの対向する一対の辺を延長した線であってもよい。
各位置検出パターン12A、12B、12Cは、上述したように、二次元コード10が撮影された画像において二次元コード10の位置を検出して、解析するために使用される。具体的には、まず、撮影された画像から位置検出パターン12A、12B、12Cが識別される。次に、識別された位置検出パターン12A、12B、12Cに基づいて4つの座標が取得される。次に、取得された4つの座標に基づいて、二次元空間の射影変換の係数が求まり、射影変換により二次元コードの画像の座標変換が行われて、画像の歪み又は画像のぼけ等の影響が補正される。次に、補正された二次元コードの画像のデータ部11のセルに基づいて、メッセージ等の情報が取り出される。この処理の詳細については、後述する。
データ部11は、図2に示すように、二次元のマトリックス状のパターンとして配置され、メッセージ等の情報が二進コードで表されたデータを表す複数のセル13を有する。セル13は、明又は暗の明るさの違いによって、二進情報を表す。
図2に示すように、データ部11は、複数の同じ大きさのブロック14に分割されており、隣接するブロック14間に、明又は暗の分離スペース15を有する。一のブロック14は、複数のセル13により形成される。
図2に示す例では、ブロック14は、3×3のセルにより形成されており、隣接するブロック14間には、1セル分の明の分離スペース15が配置される。分離スペース15は、各ブロック14を分離するように格子状に配置される。これにより、各ブロック14におけるセルの明暗の判定精度が向上する。なお、ブロックを形成するセルの数又は形状は、図2に示す例には制限されない。また、分離スペースの形状も、図2に示す例には制限されない。
データ部11が有する実データは、メッセージの数に対応した複数のセグメントと、終端フラグだけが入ったセグメントと、実データの余った領域に配置される埋め草を有する。複数のセグメントは、メッセージと、メッセージを修飾するヘッダー(メッセージ種類(メッセージのエンコード)・メッセージサイズ等)を有するセグメントが、メッセージの数だけ並べられたものである。データ部11は、実データが、1ブロック当たりのデータ容量に従い、ブロック単位に分割される。
また、データ部11は、デコードする際のデータ部11自身の誤りを訂正するための誤り訂正符号を有する。誤り訂正符号も、ブロック単位に分割される。
例えば、誤り訂正符号にリードソロモン符号を使った場合、誤り訂正はワード単位で行われるため、1ワードを1ブロックとすることが好ましい。1ワードが複数のブロックにまたがる場合、1つのブロックに汚れが発生した場合でも、そのブロックが関係する全てのワードが誤り訂正の対象となり、訂正の効率が悪くなる。訂正原因となる汚れや、スポットライトによる色とびは、1箇所に集中することが多いが、ブロックにすることにより同時に訂正対象となるデータを1箇所にまとめる効果があるので、効率的な訂正を可能にし、コードを認識させる可能性を高める。
また、データ部11は、位置検出パターン12A、12B、12Cに対して、所定の位置に配置される位置補正パターン16A、16Bを備える。位置補正パターン16Aは、第1位置検出パターン12A及び第2位置検出パターン12Bそれぞれに対して、所定の位置に配置されている。位置補正パターン16Bは、第2位置検出パターン12B及び第3位置検出パターン12Cそれぞれに対して、所定の位置に配置されている。なお、位置補正パターンは、何れか一方の位置検出パターンに対してか、又は複数の位置検出パターン対して位置が関連づけられていればよい。
位置補正パターン16A、16Bの第1の役割は、二次元コードを撮影した画像から検出された位置検出パターン候補に対して所定の位置に配置される位置補正パターンが識別されることにより、検出された位置検出パターン候補が位置検出パターンであることが識別されることである。例えば、二次元コードを撮影した画像から1個の位置検出パターン候補しか検出されない場合、位置検出パターンが単純な形状であるほど、撮影画像のノイズである可能性が高まるが、位置検出パターン候補に対応する位置補正パターンが識別されることにより、検出された位置検出パターン候補が、位置検出パターンであることが識別されるので、識別された1個の位置検出パターンに基づいて4つの座標を取得することができる。この処理の詳細については、後述する。
また、位置補正パターン16A、16Bの第2の役割は、データ部11のセルの座標の誤差を補正することである。二次元コードを撮影した画像から位置検出パターンの位置を取得する時のズレによりデータ部11のセルの座標に誤差が生じる場合がある。そこで、位置補正パターン16A、16Bと対応づけられている位置検出パターンとの位置関係に基づいて、データ部11のセルの座標の誤差が補正される。なお、位置補正パターンを形成するセルの数又は形状は、図1に示す例には制限されない。
また、データ部11は、バージョン情報ブロック、フォーマット情報ブロック、絵柄埋め込み情報ブロック等を有していてもよい。
バージョン情報ブロックは、二次元コード10のサイズに関する情報を有する。二次元コード10を解析する時には、バージョン情報ブロックが有する情報に基づいて、データ部11の領域を識別することができる。例えば、二次元コードの縦方向のサイズに関する情報を有する縦バージョン情報ブロックと、二次元コードの横方向のサイズに関する情報を有する横バージョン情報ブロックを用いることができる。バージョン情報ブロックを用いることにより、データ部11のサイズを可変にして、二次元コード10に含める情報量を制御することができる。
フォーマット情報ブロックは、一つのブロック14が有するデータ量を情報として有する。フォーマット情報ブロックを用いることにより、例えば、一つのブロック14が有するデータ量を、6、7、9ビット/ブロックというように選択可能にすることができる。
絵柄埋め込み情報ブロックは、二次元コード10が絵柄を有する時に、絵柄等が配置されて、セルが配置されない領域を規定するために用いられる。絵柄埋め込み情報ブロックは、例えば、絵柄等を埋め込む領域(セルが配置されない領域)のサイズ及びブロック位置に関する情報を有することができる。なお、セルが配置されない領域には、絵柄だけでなく、空白又は他の一次元コード若しくは二次元コードを配置することもできる。
位置検出パターンが、単独で画像から検出可能であるとは、二次元コードを撮影した画像に基づいて、画像を解析することにより各位置検出パターンを検出可能であることを意味する。
また、位置検出パターンが異なることには、例えば、外形、大きさ、二次元コード上での配置方向、位置検出パターンを形成する線幅の比率が異なることが含まれる。また、線幅の比率が異なるとは、例えば位置検出パターンの中心を通るように走査した際に、明暗の比率が異なることを含む。
また、位置検出パターンが異なることには、外形が同じでも、内部の形状が異なることが含まれる。更に、位置検出パターンが異なることには、少なくとも2個の位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても位置検出パターンを形成する線の線幅の比率が異なることが含まれる。
二次元コード10が少なくとも2個以上の位置検出パターンを備える理由を、以下に説明する。二次元コード10の解析では、画像の歪み又は画像のぼけ等の影響を精度良く補正して、歪み又はぼけの影響の少ない二次元コードの画像を得ることが好ましい。この観点から、少なくとも4点の座標を位置検出パターンに基づいて取得し、取得された4点の座標に基づいて、二次元空間の射影変換の係数が求まり、射影変換により二次元コードの画像の座標変換を行うことが好ましい。射影変換を行うための4点の座標は、データ取得の計算対象となるデータ部11に近いことが望まれる。1つの位置検出パターンから4点の座標を取得した場合、この位置検出パターンから離れたデータ部11における座標の計算精度が悪化するため、データ部11の全体を広くカバーできる4点を取得することが望ましい。また、読取装置のレンズの歪みや、二次元コードを印字する面の歪みなどが原因で撮影されたコードに歪みが発生した場合、その歪みは一様ではない。そのため、同じ位置検出パターンから取得した4点の座標から二次元空間の射影変換の係数を取得するよりも、異なる位置検出パターンにまたがる複数の点に基づいて射影変換の係数を求める方が、歪みによる影響を軽減できる効果が期待できる。
次に、二次元コード10が異なる位置検出パターンを備える理由を、以下に説明する。1画像に複数の二次元コードが撮影された場合、各二次元コードの複数の位置検出パターンが異なる場合には、位置検出パターンの検討すべき組合せ数を大幅に減少することが可能であり、正規の組合せであるかを判定する処理量を低減することができる。この処理量が低減することを、以下に説明する。
撮影された1つの画像に複数の二次元コードが写し込まれた場合について、二次元コードが異なる複数の位置検出パターンを備える場合と、二次元コードが同じ複数の位置検出パターンを備える場合とについて、位置検出パターンの正規の組合せであることを判定する処理量を以下に比較する。
例えば、1つの画像に6個の二次元コードが撮影されており、各二次元コードは3個の同じ位置検出パターンを備えているとする。この場合、画像には、同じ位置検出パターンが18個(6個×3)写し込まれる。18個の位置検出パターンを検出し、それらの内の3個の組合せ全てについて同一の二次元コードのものであるか調べる場合、組合せは18C3=816通りとなる。もし、1個の二次元コードに4個の同じ位置検出パターンがある場合には、画面の位置検出パターンの個数は24個になり、その組合せは、24C4=10624通りとなる。このように、位置検出パターンの組合せ数が膨大となりその処理時間が増加する。
一方、図1に示す二次元コードのように3個の位置検出パターンが異なる場合、3個の異なる位置検出パターンの組み合わせ数は、6C1×6C1×6C1=216通りとなり、4個の異なる位置検出パターンでは、6C1×6C1×6C1×6C1=1296通りとなり、上述した場合と比べて位置検出パターンの組合せ数が大幅に減る。従って、同じ二次元コードに含まれる位置検出パターンの正規の組合せを判定する処理量を大きく低減できる。
また、位置検出パターンが異なる場合には、1個の位置検出パターンを検出した場合に他の位置検出パターンの方向・位置の予測が容易になるので、位置検出パターンを探索する処理量を低減することができる。二次元コードが位置補正パターンを備える場合には、他の位置検出パターンを探索する時に、位置補正パターンを用いてもよい。
3つの位置検出パターン12A、12B、12Cは、ブロック14よりも大きな面積を有することが好ましい。これにより、位置検出パターンと同じパターンが、二次元コード中に出現することはなくなり、位置検出パターンの検出が容易になる。
また、位置検出パターン12A、12B、12Cは、識別スペースを設けた枠形状であることが好ましい。この識別スペースは、二次元コードを構成する最小セルの2倍以上のスペースであることが好ましい。
二次元コード10では、第1位置検出パターン12Aは、一重の正方形枠を有する。第2位置検出パターン12Bは、一重の正方形枠と、正方形枠内に配置された正方形を有する。第3位置検出パターン12Cは、一重の長方形枠を有する。各位置検出パターン12A、12B、12Cは、最小セルの2倍以上のスペースである明の識別スペースを有している。
位置検出パターン12A、12B、12Cが内部に識別スペースを有することにより、位置検出パターンとその他の写り込みを容易に区別することができるので、ぼけ・ブレの影響を抑制して識別性が向上する。この場合、識別スペースは、2セル以上であることが好ましい。その理由は、最小セルが1ビットを表す二次元コードでは、1セルを上回るぼけ・ブレが発生する場合には、位置検出パターンの検出ができても、データの取得ができなくなるためである。1セルを上回るぼけ・ブレがある場合はコードを認識できず、識別スペースが2セルあれば、1セル分のあらゆる方向のぼけ・ブレに対応できる。これは、1画面で複数の二次元コードを撮影する場合に、1つ1つの二次元コードが小さくなるので、ぼけ・ブレの影響が大きくなり、二次元コードの画像が不鮮明になることに対しても有効である。
各位置検出パターン12A、12B、12Cの周囲には、1セル分の明パターンが配置されている。これにより、二次元コード10と隣接して、他の図形が配置された場合にも、二次元コード10が撮影された画像から、各位置検出パターン12A、12B、12Cを検出し易くなされている。
なお、二次元コード10の各位置検出パターン12A、12B、12C及びデータ部11を形成する明暗を反転してもよい。例えば、図1の第1位置検出パターン12Aの明暗を反転した場合には、黒い正方形の背景の中に、明の正方形枠が配置されることになる。
次に、図3を参照しながら、一対の延長線と他の二次元コードとの関係の例を説明する。以下に説明する図3(A)〜図3(D)は、第1位置検出パターン12Aの対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線Lの内部に他の位置検出パターン12B、12Cの少なくとも一部が重なっている場合の例を示す。
図3(A)に示す例では、第1位置検出パターン12Aの対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線Lの内の一方と、第2位置検出パターン12Bの輪郭の少なくとも一部が重なっている。具体的には、第2位置検出パターン12Bの外形を形成する正方形の一辺が、延長線Lと重なっている。第2位置検出パターン12Bは、外形を形成する正方形の一辺を除いた部分は、一対の延長線Lの内部には重なっていない。このように、一対の延長線Lの内部に第2位置検出パターン12Bの少なくとも一部が重なることには、第2位置検出パターン12Bの輪郭の少なくとも一部が重なっていることが含まれる。
図3(B)に示す例では、図1と同様に、第2位置検出パターン12Bは、その対向する一対の辺が、一対の延長線Lと重なるように配置されており、第2位置検出パターン12Bの全体が、一対の延長線Lの内部に重なるように配置されている。第3位置検出パターン12C(図1とは異なる形状を有する)は、その対向する一対の辺の内の一方が、一対の延長線Lの内の一方と重なるように配置されており、第3位置検出パターン12Cの全体が、一対の延長線Lの内部に重なるように配置されている。
図3(C)に示す例では、第2位置検出パターン12Bは、第2位置検出パターン12Bの一部(約半分の領域)が、一対の延長線Lの内部に重なるように配置されている。
図3(D)に示す例では、第2位置検出パターン12Bは、第2位置検出パターン12Bの輪郭が、一対の延長線Lの内部に含まれるように配置されている。
上述した図3(A)〜図3(D)に示すように、一の位置検出パターン12Aの対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線Lの内部に、他の位置検出パターン12B、12Cそれぞれが、少なくとも一部が重なるように配置されているので、一の位置検出パターン12Aに基づいて、他の位置検出パターン12B、12Cを検索する処理時間が短くなるようになされている。特に、図3(D)に示すように、第2位置検出パターン12Bの輪郭が、一対の延長線Lの内部に配置されている場合には、他の例よりも検索領域が少なくなるので、検索する処理時間を一層短くできる。詳しい説明は後述する。
上述した図1及び図3(A)〜図3(D)の例では、一の位置検出パターン12Aの対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線Lと、他の位置検出パターン12B、12Cとの関係を説明したが、本明細書では、各位置検出パターンの外形が四角形であれば、一の位置検出パターンの対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線の内部に、全ての他の位置検出パターンそれぞれが、少なくとも一部が重なるように配置されていればよい。
また、本発明では、各位置検出パターンの外形が四角形以外の形状を有していてもよい。この場合、一の位置検出パターンの輪郭上の対向する一対の点を、仮想的に所定の方向に平行に延長した一対の延長線の内部に、全ての他の位置検出パターンそれぞれが、少なくとも一部が重なるように配置されており、全てのセルは、一対の延長線の内部に配置される。
次に、位置検出パターンの様々な形態を、図面を参照しながら、以下に説明する。
図4(A)〜図4(L)は、外形が四角形の位置検出パターンの様々な形態を示す図である。
図4(A)及び図4(B)では、位置検出パターンは、一重の正方形枠を有する。図4(A)に示す位置検出パターンは、図4(B)に示す位置検出パターンよりも大きい。また、位置検出パターンを形成する線の線幅の比率も異なる。
図4(C)及び図4(D)では、位置検出パターンは、縦長の一重の長方形枠を有する。図4(C)に示す位置検出パターンは、図4(D)に示す位置検出パターンよりも幅が広い。また、位置検出パターンを形成する線の線幅の比率も異なる。
図4(E)〜図4(G)では、位置検出パターンは、横長の一重の長方形枠を有する。図4(E)に示す位置検出パターンは、図4(F)に示す位置検出パターンよりも大きい。図4(G)に示す位置検出パターンは、図4(E)に示す位置検出パターンよりも高さが高いが、幅は狭い。また、位置検出パターンを形成する線の線幅の比率も異なる。
図4(H)及び図4(I)では、位置検出パターンは、一重の正方形枠と、この正方形枠内に配置された正方形を有する。図4(H)に示す位置検出パターンは、図4(I)に示す位置検出パターンよりも大きい。また、位置検出パターンを形成する線の線幅の比率も異なる。
図4(J)〜図4(L)では、位置検出パターンは、暗パターンにより形成される。図4(J)に示す位置検出パターンは、正方形である。図4(K)に示す位置検出パターンは、縦長の長方形である。図4(L)に示す位置検出パターンは、横長の長方形である。
図5(A)及び図5(B)は、外形が正方形の位置検出パターンの他の形態を示す図である。
図5(A)に示す位置検出パターンは、二重の正方形枠を有する。図5(B)に示す位置検出パターンは、三重の正方形枠を有する。図5(A)に示す位置検出パターンは、二重の縦長又は横長の長方形枠で構成しても良い。また、図5(B)に示す位置検出パターンは、三重の縦長又は横長の長方形枠で構成しても良い。さらに、図5(A)、図5(B)に示す位置検出パターンは、位置検出パターンの内側の正方形のパターンのみを縦長又は横長の長方形枠で構成してもよく、また4重以上の枠を有してもよい。
図6(A)〜図6(E)は、外形が正方形の位置検出パターンの更に他の形態を示す図である。
図6(A)に示す位置検出パターンは、一重の正方形枠と、この正方形枠内に配置された縦長の長方形の明パターン及び暗パターンを有する。
図6(B)に示す位置検出パターンは、一重の正方形枠と、この正方形枠内に配置された三角形の明パターン及び暗パターンを有する。
図6(C)に示す位置検出パターンは、一重の正方形枠と、この正方形枠内に配置されており、交互に縦方向に並べられた横長の明パターン及び暗パターンを有する。
図6(D)に示す位置検出パターンは、一重の正方形枠と、この正方形枠内に配置されており、交互に横方向に並べられた縦長の明パターン及び暗パターンを有する。
図6(E)に示す位置検出パターンは、一重の正方形枠と、この正方形枠内に配置された4つの正方形の明パターンと、各正方形の明パターンを分離する暗パターンを有する。図6に示す位置検出パターンは、縦長又は横長の長方形としても良い。また、位置検出パターンを形成する線幅の比率を適宜変更してもよい。
図7(A)〜図7(E)は、外形が四角形以外の形状を有する位置検出パターンの形態を示す図である。
図7(A)に示す位置検出パターンは、一重の円形又は楕円形の枠を有する。4つの位置検出パターンは、異なっている。
図7(B)に示す位置検出パターンは、一重の円形又は楕円形の枠と、枠内に配置された円形又は楕円形を有する。4つの位置検出パターンは、異なっている。
図7(C)に示す位置検出パターンは、第1の長方形及び第2の長方形を有し、第1の長方形と第2の長方形とは互いに重心の位置で直交するように交差している。4つの位置検出パターンは、異なっている。
図7(D)に示す位置検出パターンは、第1の長方形及び第2の長方形を有し、第1の長方形の端部から第2の長方形が垂直に延びている。4つの位置検出パターンは、異なっている。
図7(E)に示す位置検出パターンは、一重の直角三角形の枠を有する。4つの位置検出パターンは、異なっている。また、例えば1つの二次元コードを構成する3つの位置検出パターンとして、図4(A)と図5(A)と図6(A)に記載のものを用いる等、図4、図5、図6、図7に示す位置検出パターンをそれぞれ組み合わせても良い。
次に、上述した第1実施形態の二次元コードの変形例1及び変形例2を、図面を参照しながら、以下に説明する。
図8は、本明細書に開示する第1実施形態の二次元コードの変形例1を示す図である。
変形例1の二次元コード10は、四角形の第1位置検出パターン12Aの輪郭上の対向する一対の点Pを、仮想的に所定の方向に平行に延長した一対の延長線Lの内部に、全ての他の位置検出パターン12B、12Cそれぞれが、少なくとも一部が重なるように配置されており、全てのセルは、一対の延長線Lの内部に配置される。
輪郭上の対向する一対の点P、四角形の第1位置検出パターン12Aの輪郭上の点であれば、辺上の点であってもよいし、頂点であってもよい。
二次元コード10のセルが、一対の延長線Lの内部に配置されることは、一のセルの輪郭が、一対の延長線Lの一方と重なるように配置されることを含む。
データ部11を形成する全てのセルは、一対の延長線Lの内部に配置されるので、二次元コード10の大きさを小さくするように成されている。
変形例1の二次元コード10では、位置検出パターン12A、12B、12Cの四角形の外形を有しているが、位置検出パターン12A、12B、12Cは、四角形以外の外形を有していてもよい。例えば、位置検出パターンは、図7(A)〜図7(E)に示すような外形を有していてもよい。
また、変形例1の二次元コード10は、位置補正パターンを有していない。データ部11に位置補正パターンを配置しないことにより、より多くの情報をデータ部11にセルとして配置することができる。
図9は、本明細書に開示する第1実施形態の二次元コードの変形例2を示す図である。
変形例2の二次元コード10は、縦長の形状を有する。変形例2の二次元コード10では、第1位置検出パターン12Aの縦方向に延びる対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線Lの内部に、全ての他の2つの位置検出パターン12B、12Cそれぞれが、少なくとも一部が重なるように配置されている。
次に、上述した二次元コードが物品に配置された例を、図面を参照しながら、以下に説明する。
図10は、本明細書に開示する第1実施形態の二次元コードが印刷されたカードを示す図である。
カード20は、例えば、ゲーム機によって読み取り可能な情報を有するカード状の媒体である。カード20には、カード20を特徴づける絵柄21が配置される。また、カード20には、絵柄21と、カード20の端縁との間の横長の領域に、二次元コード10が印刷されている。二次元コード10のデータ部には、例えば、カード20を識別する識別情報が記録されている。カード20は、例えば、ゲーム機によって、二次元コード10が有するカード20の識別情報が読み取られて、カード20の情報がゲームの進行に組み込まれる。
図11は、本明細書に開示する第1実施形態の二次元コードの変形例2が貼付された本を示す図である。
本30の背表紙31には、二次元コード10が貼付されている。二次元コード10のデータ部には、例えば、本を管理する管理番号及び本のタイトルが情報として記録されている。多数の本を管理する図書館等では、本30の背表紙31に貼付された二次元コード10を用いて、本30の管理を行うことができる。
上述した本実施形態の二次元コードによれば、物品等の狭い部分に配置可能であり、複数の二次元コードを同時に撮影する場合、又は、ぼけ・ブレが発生し易い環境での撮影等、様々な撮影条件で撮影された場合にも、二次元コードの正確な認識が短時間で行うことできる。
次に、上述した二次元コードの第2実施形態を、図12(A)及び図12(B)を参照しながら以下に説明する。第2実施形態について特に説明しない点については、上述の第1実施形態に関して詳述した説明が適宜適用される。また、同一の構成要素には同一の符号を付してある。
図12(A)は、本明細書に開示する第2実施形態の二次元コードを示す図である。
本実施形態の二次元コード10は、基本パターン部10Aと、基本パターン部10Aの外側に配置される周辺部10Bを備える。基本パターン部10Aは、3つの異なる位置検出パターン12A、12B、12Cと、データ部11を備える。基本パターン部10Aの構成は、上述した第1実施形態の二次元コードと同様である。
周辺部10Bには、データ部11が配置される。周辺部10Bは、基本パターン部10Aの長手方向の両端の外側に配置される。
基本パターン部10Aは、二次元コード領域内の基本パターン部10Aの位置を示す基本パターン部移動情報を含む。基本パターン部移動情報は、基本パターン部10Aの二次元コード内での位置を示す基本パターン部位置情報、又は、基本パターン部の所定位置からの移動量を示す基本パターン部移動量情報を有する。二次元コード10を解析する時には、基本パターン部移動情報に基づいて、二次元コード10における基本パターン部10Aの領域及び周辺部10Bの領域が識別される。
また、基本パターン部10Aは、二次元コード10のサイズを示すバージョン情報を有しており、バージョン情報を用いて、複数個の位置検出パターン間の距離を固定した状態で二次元コードのサイズを可変に設計することが可能になされている。
上述した本実施形態の二次元コードによれば、位置検出パターンの配置の自由度が高く、二次元コードを配置する場合に、読み取り困難な領域に位置検出パターンが位置する場合には、そのような読み取り困難な領域を避けて位置検出パターンを配置できる。これにより、二次元コードの読み取りの認識精度を上げることができる。また、データ部11に配置されるデータ量に応じて周辺部10Bの大きさを可変に設計可能である。更に、上述した第1実施形態と同様の効果が奏される。
図12(B)は、第2実施形態の二次元コードの変形例を示す図である。
本変型例の二次元コード10では、周辺部10Bは、基本パターン部10Aの上下左右の周囲に配置される。データ部11に配置されるデータ量が多い場合には、基本パターン部10Aの長手方向の両端の外側と、基本パターン部10Aの長手方向の側縁の外側にもデータ部11を配置してもよい。
次に、上述した本明細書に開示する二次元コードを作成する作成方法(エンコード方法)について、図13を参照しながら、以下に説明する。
図13は、本明細書に開示する二次元コードの作成方法を説明するフローチャートである。
図13に示す処理は、例えば、コンピュータが、記憶媒体等を含む記憶装置に記憶された所定のプログラムを実行することにより実現され得る。
まず、ステップS10において、エンコードのメイン処理を開始する。
次に、ステップS12において、二次元コードに記録するメッセージが、コンピュータに入力される。
次に、ステップS14において、コンピュータは、コード画像における位置検出パターンの配置位置を決定する。コンピュータは、単独で画像から検出可能な2個以上の異なる位置検出パターンであって、各位置検出パターンの外形は四角形である位置検出パターンを、一の位置検出パターンの対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線の内部に、全ての他の位置検出パターンそれぞれが、少なくとも一部が重なるようにコード画像に配置する。又は、コンピュータは、単独で画像から検出可能な2個以上の異なる位置検出パターンを、一の位置検出パターンの対向する一対の辺を、仮想的に辺の延びる方向に延長した一対の延長線の内部に、全ての他の位置検出パターンそれぞれが、少なくとも一部が重なるようにコード画像配置してもよい。この場合には、後述するステップS24では、全てのセルは、一対の延長線の内部に配置される。
次に、ステップS16において、コンピュータは、コード画像における位置補正パターンの配置位置を決定する。位置補正パターンは、位置検出パターンに対して所定の位置に配置される。なお、二次元コードに位置補正パターンを配置しない場合には、このステップは省略される。
次に、ステップS18において、コンピュータは、各メッセージにヘッダーを付与してセグメントを生成し、複数のセグメントを有する実データを作成する。
次に、ステップS20において、コンピュータは、実データに対して、誤り訂正符号を作成する。例えば、誤り訂正符号にリードソロモン符号を使用して、誤り訂正をワード単位で行なってもよい。
次に、ステップS22において、コンピュータは、実データ及び誤り訂正符号を二進コードに変換して、明暗のセル情報を作成する。
次に、ステップS24において、コンピュータは、位置検出パターン、位置補正パターン及びデータ部を形成する各セルを、コード画像に配置する。
次に、ステップS26において、コンピュータは、コード画像をデータとして出力して、二次元コードが得られる。
二次元コードが印刷される場合には、二次元コードを印刷する媒体はどのようなものでもよく、例えば、紙、樹脂板、筐体表面等が挙げられる。印刷装置は、これらの媒体に二次元コードを印刷可能なものであればよく、例えば簡易プリンタ、精密プリンタ、印刷装置等が挙げられる。印刷装置は、モノクロ印刷だけでなく、カラー印刷可能なものでもよい。また、作成した二次元コードは、印刷せずに、通信回線を介してユーザーに二次元コードのデータとして送信されてもよい。
次に、上述した本明細書に開示する二次元コードを解析する解析装置(デコード装置)について、図14を参照しながら、以下に説明する。
解析装置40は、読み取り部41と、コンピュータ(二次元コード解析処理部)45と、ディスプレイ46と、通信インターフェース47を有する。読み取り部41は、レンズ42と、イメージセンサ43と、アナログ・デジタル変換器(AD)44を有し、撮影した二次元コードのデジタル画像データをコンピュータ45に出力する。コンピュータ45は、記憶媒体等を含む記憶装置に記憶された所定のプログラムを実行することにより、二次元コードの解析を実行する演算部を有する。図14に示す解析装置40は、例えば、携帯端末を用いて構成され得る。コンピュータ45は、二次元コードを解析したデータを、通信インターフェース47を用いて、ネットワーク(図示せず)を介して、他のサーバ又は端末等(図示せず)へ送信してもよい。
次に、上述した解析装置40が、図1に示す二次元コードを解析する解析方法を、図面を参照しながら、以下に説明する。図15〜図17は、本明細書に開示する二次元コードの解析方法を説明するフローチャートである。
まず、ステップS30において、解析のメイン処理を開始する。
次に、ステップS32において、コンピュータ45は、読み取り部41により撮影された二次元コードの画像を入力する。
次に、ステップS34では、コンピュータ45は、入力された撮影画像の二値画像を作成する。二値化の方法は、入力された撮影画像がRGB画像等のカラー画像であれば、一旦グレースケール画像に変換し、画像内の最大輝度値と最小輝度値の平均を閾値とし、閾値以上であれば明、閾値未満であれば暗とする。カラー画像からグレースケールに変換するには、例えば、各画素のRGBの値を用いて、輝度(brightness)=0.299R+0.587G+0.114Bの変換式にしたがって変換した輝度をグレースケールとして扱う。カラー画像へのグレースケール画像への変換方法、更に二値化画像への変換方法は、様々な方法が提案されており、上記変換方法には限られない。
次に、ステップS36において、コンピュータ45は、位置検出パターン候補を検出する。具体的には、画像の左上の点を始点とし、画面をX方向に走査し、右端にたどり着いたら、数ピクセル下の左端からX方向に走査する。言い換えれば、数ピクセル分間引くことになる。これを画像全体に対して繰り返す。間引くピクセル数は、(最大間引き量)=(全ての位置検出パターンの辺の長さの中で最小となるセルサイズ)×(撮影時のセルあたりのピクセル数)である。位置検出パターンの辺の長さの中で最小となるセルサイズとは、コードの回転も考慮し、位置検出パターンの回転で起こり得るY方向の最小セルサイズである。撮影時のセルあたりのピクセル数は、1セル当たり1ピクセルを下回ると、理想的な撮影画像でもセルの明と暗を判別することが困難になる。実際の撮影画像でのセルのずれ又は回転を考慮すると、少なくとも1セル当たり3ピクセル以上あるのが望ましい。
そして、コンピュータ45は、検出された位置検出パターン候補を検査する。具体的には、走査中に明から暗の境界を見つけた場合、暗部分の周囲を走査する。その際に、最小・最大のX座標、Y座標をそれぞれ求める。これにより、暗の固まりの外接する長方形が取得できる。これの左上座標を(x1,y1)、右下座標を(x2,y2)と表す。
図18は、位置検出パターン候補の形状チェックを説明する図である。
まず、コンピュータ45は、位置検出パターン候補の形状をチェックする。図1に示す二次元コードの各位置検出パターンは、いずれも枠、すなわち穴形状を有する。そこで、まず穴の有無を確認する。始点を外接長方形の左側中点(x1,(y1+y2)/2)とし、終点を(x2,(y1+y2)/2)として、x軸方向の走査を行う。ここで、次の(1)または(2)の条件にあてはまることを確認する。
(1)暗明暗となる並びが存在することを確認する。1つ目の暗の左端(lx1)から2つ目の暗の右端(rx1)までの中心となる画素が明であることを確認する。
(2)暗明暗明暗というパターンを探す。1つ目の暗の左端(lx2)から3つ目の暗の右端(rx2)までの中心となる画素が暗であることを確認する。
(1)の場合はさらに、図18(A)に示すように、中心座標((lx1+rx1)/2,(y1+y2)/2)から上下を走査し、上側が明暗明(終点:((lx1+rx1)/2),y1−1))となっており、下側が明暗明(終点:((lx1+rx1)/2),y2+1))となっており、上側走査の暗と明の境界のy座標ty1と下側走査の暗と明の境界のy座標by1の中点が、明の中心座標とほぼ一致することを確認する。
(2)の場合もさらに、図18(B)に示すように、中心座標((lx2+rx2)/2,(y1+y2)/2)から上下方向それぞれを走査し、上側が暗明暗明となっており(終点:((lx2+rx2)/2),y1−1))、下側が暗明暗明となっており(終点:((lx2+rx2)/2),y2+1))、上側走査の2つめの暗と明の境界のy座標ty2と下側走査の2つめの暗と明の境界のy座標by2の中点が暗の中心座標とほぼ一致することを確認する。
以上の処理により、枠内に暗部を有する第2位置検出パターン(正方形枠内に正方形)と、枠のみの第1位置検出パターン及び第3位置検出パターン(正方形枠または長方形枠:ロ型)と、に区別できる。(1)又は(2)に当てはまらないものは、位置検出パターンではない。
次に、コンピュータ45は、各位置検出パターン候補の頂点を探索する。外接する長方形の左上の座標(x1,y1)からX軸方向に(x2,y1)まで走査する。一番初めに接触した暗点の座標をvertex1:(vx1,vy1)とする。次に右上の座標(x2,y1)からY軸方向に(x2,y2)まで走査する。一番初めに接触した暗点の座標をvertex2:(vx2,vy2)とする。右下の座標(x2,y2)からX軸の反対方向に(x1,y2)まで走査する。一番初めに接触した暗点の座標をvertex3:(vx3,vy3)とする。次に左下の座標(x1,y2)からY軸の反対方向に(x1,y1)まで走査する。一番初めに接触した暗点の座標をvertex4:(vx4,vy4)とする。vertex1〜4は長方形(正方形を含む)となるはずである。そうでない場合は、位置検出パターンではない。図18(B)の表記は省略する。
次に、コンピュータ45は、長方形の長辺と短辺の辺の比を計算する。((vx1−vx2)×(vx1−vx2)+(vy1−vy2)×(vy1−vy2))1/2で1辺の長さが、((vx2−vx3)×(vx2−vx3)+(vy2−vy3)×(vy2−vy3))1/2でもう1辺の長さが、求められる。そして、求めた2辺を比較して、長い方が長辺、短い方が短辺となる。
辺の比率が、(長辺):(短辺)=1:1でかつ形状が(2)であれば第2位置検出パターン候補であり、辺の比率が、(長辺):(短辺)=1:1でかつ(1)であれば第1位置検出パターン候補であり、(長辺):(短辺)=9:5で形状が(2)であれば第3位置検出パターン候補となる。このようにして、3種類の位置検出パターン候補の区別が可能となる。
次に、コンピュータ45は、位置検出パターン候補の面積を求める。ここでの面積は、外側の長方形枠の面積で、内側のスペースの面積も含む。第2位置検出パターンの場合は、枠の中の正方形も含む。位置検出パターンの面積は、外側の長方形の面積から4隅を含む4つの直角三角形の面積を減じることにより求める。面積=(x2−x1)×(y2−y1)−(vx1−vx4)×(vy4−vy1)/2−(vx2−vx1)×(vy2−vy1)/2−(vx2−vx3)×(vy3−vy2)/2−(vx3−vx4)×(vy3−vy4)/2で求まる。
次に、コンピュータ45は、位置検出パターン候補の回転角度を求める。第1位置検出パターン及び第2位置検出パターンは、正方形であり90度以上の傾きを検知できないので、90度まで求める。角度は時計回りとする。
θ=arctan((vy2−vy1)/(vx2−vx1))
θが回転角度となる。
長方形である第3位置検出パターン候補の回転角度は、0から180度まで求める。第3位置検出パターンは、2点間の座標の距離を求める関数length(x1,y1,x2,y2)=((x2−x1)2 + (y2−y1)2)1/2を定義し、0〜45度まではlength(vx1,vy1,vx2,vy2)>length(vx4,vy4,vx1,vy1)かつ(x2−x1)>(y2−y1)であり、θ=arctan((vy2−vy1)/(vx2−vx1))で求まる。45〜90度まではlength(vx1,vy1,vx2,vy2)>length(vx4,vy4,vx1,vy1)および(x2−x1)<(y2−y1)であり、θ=arctan((vy2−vy1)/(vx2−vx1))で求まる。90〜135度まではlength(vx1,vy1,vx2,vy2)<length(vx4,vy4,vx1,vy1)および(x2−x1)<(y2−y1)であり、θ=arctan((vy2−vy1)/(vx2−vx1))+90度で求まる。135〜180度まではlength(vx1,vy1,vx2,vy2)<length(vx4,vy4,vx1,vy1)および(x2−x1)>(y2−y1)であり、θ=arctan((vy2−vy1)/(vx2−vx1))+90度で求まる。
次に、コンピュータ45は、位置検出パターン候補の中心座標を検出する。中心座標は外接長方形の中心((x1+x2)/2、(y1+y2)/2)とする。
以上で、位置検出パターン候補の検査が終了する。
次に、ステップS38において、コンピュータ45は、3種の位置検出パターン候補の組合せを作成する。まず、コンピュータ45は、第1位置検出パターン候補を選択する。第1位置検出パターンの面積をSとすると、面積がSであり且つ回転角度(0度から90度)が同じである位置検出パターン候補を、第2位置検出パターン候補として探す。第2位置検出パターン候補が見つかると、次に、面積がS*5/9であり且つ回転角度(0度から180度)が同じである位置検出パターン候補を、第3位置検出パターン候補として探す。
撮影された1画像に複数の二次元コードが写し込まれている場合、位置検出パターン候補のあらゆる組合せを考えると、莫大な組合せ数になってしまう。本発明のように位置検出パターンを全て異ならせることにより、この組合せ数を大きく低減し、更に事前に得られた形状・面積・回転などの特徴を用いることで、簡単な比較演算で、更なる組合せ数の絞込みが可能となっている。また、本明細書に開示する二次元コードによれば、位置検出パターンの配置の特徴により、以下に説明するように組み合わせ数の絞り込みが可能となる。このことを具体的に説明する。
一の位置検出パターンの対向する一対の辺または、一の位置検出パターンの輪郭上の対向する一対の点を、辺の延びる方向又は所定の方向に延長した一対の延長線の内部に、全ての他の位置検出パターンそれぞれが、少なくとも一部が重なるように配置されているため、この条件から外れる位置に存在する位置検出パターンは一の二次元コードを構成する位置検出パターンの候補から外れるので、組み合わせ数の絞り込みが可能となっている。例えば、図1では、位置検出パターンの対向する一対の辺を延びる方向に延長した一対の延長線に、全ての他の位置検出パターンそれぞれが、重なるように配置されている。具体的には、図21の位置検出パターン12Aの辺A4―A1と、辺A2―A3を延長した延長線が、位置検出パターン12Bの辺B4―B1と、辺B2―B3と重なり、また位置検出パターン12Cの辺C4―C1と、辺C2−C3と重なる。辺A4―A1は、1次方程式Y=a1X+b1−(1)で表される。辺A2―A3は、辺A4−A1と平行であり、1次方程式Y=a1X+b1’−(2)により表される。
位置検出パターン12Aの重心を通る上記1次方程式の法線は、Y=−(1/a1)X+b1’’−(3)で表され、位置検出パターン12Bの重心を通る上記1次方程式の法線は、Y=−(1/a1)X+b2−(4)で表され、位置検出パターン12Cの重心を通る上記1次方程式の法線は、Y=−(1/a1)X+b3−(5)で表せる。位置検出パターン12Aの重心と、式(1)と式(3)の交点座標との距離を、L1として、位置検出パターン12Bの重心と、式(1)と式(4)の交点座標との距離を、L2として、位置検出パターン12Cの重心と、式(1)と式(5)の交点座標との距離を、L3とする。L1、L2、L3の比率を、L1を基準として、L1:L2:L3=1:R2:R3と表した時、図1ではR2=1、R3=1となる。
位置検出パターンの組み合わせが正しければ、R2=1=L2/L1、R3=1=L3/L1となる。また、位置検出パターン12Aの重心と、式(2)と式(3)との交点座標の距離を、L4として、位置検出パターン12Bの重心と、式(2)と式(4)の交点座標との距離を、L5として、位置検出パターン12Cの重心と、式(2)と式(5)の交点座標との距離を、L6とする。L4、L5、L6の比率を、L4を基準として、L4:L5:L6=1:R5:R6と表した時、図1ではR2=1、R3=1となる。位置検出パターンの組み合わせが正しければ、R5=1=L5/L4、R6=1=L6/L4となる。上記関係が成り立たない場合は、位置検出パターンの組み合わせとして正しくない。この方法により、位置検出パターンの組み合わせが正しいか否かを検証することができる。また、図3(A)の場合でも、R2、R3、R5、R6の値が変わるだけで、同様の方法により、位置検出パターンの組み合わせが正しいか否かを判定できる。位置検出パターンの輪郭上の対向する一対の点を、所定の方向に平行に延長した一対の延長線の内部に、全ての他の位置検出パターンそれぞれが、少なくとも一部が重なるように配置した場合でも、また図7に示すような位置検出パターンが四角形でない場合でも、形状に関わらず、組み合わせが正しいか否かの判定が可能である。辺の延びる方向に延長した一対の延長線上の辺A4−A1と、辺A2−A3のかわりに、位置検出パターンの輪郭上の対向する一対の点を、所定の方向に平行に延長した一対の延長線を用いることで、同様に位置検出パターンの組み合わせが正しいか否かを判定できる。さらに、一の位置検出パターンの対向する一対の辺または、一の位置検出パターンの輪郭上の対向する一対の点を、辺の延びる方向又は所定の方向に延長した一対の延長線の内部に、全ての他の位置検出パターンそれぞれが、少なくとも一部が重なるように配置されているため、この条件から外れる位置に存在する位置検出パターンが一の二次元コードを構成する位置検出パターンの候補から外れることで、組み合わせ数の絞り込みが可能となっている。
ステップS38では、コンピュータ45は、検討されていない3種の位置検出パターン候補の組合せが残っているかを判定し、残っていればステップS40に進み、残っていなければステップS50に進む。
ステップS40では、コンピュータ45は、組合せた3種の位置検出パターン候補が、同一の二次元コードの位置検出パターンであるとして、データ部から情報の取り出しを行う。この処理については、図20を参照して後述する。
ステップS42では、コンピュータ45は、情報の取り出しに成功したかの結果に応じて、成功した場合にはステップS44に進み、失敗した場合には失敗した位置検出パターンの組合せを、位置検出パターン候補の組み合わせ対象から除外する処理を行った後、ステップS38に戻る。
ステップS44では、コンピュータ45は、データの取り出しに成功した二次元パターンに使われた3個の位置検出パターン候補を、同一の二次元コードの識別された3個の位置検出パターンの組み合わせてとして記録する。
次に、ステップS46において、コンピュータ45は、データの取り出しに成功した二次元パターンに使われた3個の位置検出パターン候補を、位置検出パターン候補の組み合わせ対象から除外して、ステップS38に戻る。なお、データの取り出しに成功した二次元パターンの所定の範囲に、使用していない位置検出パターン候補がある場合には、その位置検出パターン候補を、位置検出パターン候補の組み合わせ対象から除外しても良い。
上述したステップS38からS46を繰り返すことにより、3種の位置検出パターン候補の組合せが、同一の二次元コードに含まれているかが確認される。ここで、検討されていない3種の位置検出パターン候補の組み合わせが残っていない場合には、ステップS50に進む。
ステップS50では、コンピュータ45は、検討されていない2種の位置検出パターン候補の組合せが残っているかを判定し、残っていればステップS52に進み、残っていなければステップS60に進む。
ステップS52では、組合せた2種の位置検出パターン候補が、同一の二次元コードの位置検出パターンであるとして、データ部から情報の取り出しを行う。この処理については、図20を参照して後述する。
ステップS54では、コンピュータ45は、情報の取り出しに成功したかの結果に応じて、成功した場合にはステップS56に進み、失敗した場合には失敗した位置検出パターンの組合せを、位置検出パターン候補の組み合わせ対象から除外する処理を行った後、ステップS50に戻る。
ステップS56では、コンピュータ45は、データの取り出しに成功した二次元パターンに使われた2個の位置検出パターン候補を、同一の二次元コードの識別された2個の位置検出パターンの組み合わせてとして記録する。
次に、ステップS58において、コンピュータ45は、データの取り出しに成功した二次元パターンに使われた2個の位置検出パターン候補を、位置検出パターン候補の組み合わせ対象から除外して、ステップS50に戻る。なお、データの取り出しに成功した二次元パターンの所定の範囲に、使用していない位置検出パターン候補がある場合には、その位置検出パターン候補を、位置検出パターン候補の組み合わせ対象から除外する。
上述したステップS50からステップS58を繰り返すことにより、2種の位置検出パターン候補の組合せが、同一の二次元コードに含まれているかが確認される。ここで、検討されていない2種の位置検出パターン候補の組み合わせが残っていない場合には、ステップS60に進む。
ステップS60では、コンピュータ45は、検討されていない1種の位置検出パターン候補が残っているかを判定し、残っていればステップS62に進み、残っていなければステップS72に進む。ステップS72では、解析メインの処理を終了する。
ステップS62では、コンピュータ45は、検出された1種の位置検出パターン候補が、位置検出パターンである場合に、該位置検出パターンに対して所定の位置に配置されている位置補正パターンが識別されるかを判定する。この位置補正パターンが識別された場合には、ステップ64に進む。コンピュータ45は、位置検出パターン候補に対して所定の位置に配置されている位置補正パターンを識別できたので、この位置検出パターン候補が、位置検出パターンであることを識別する。一方、位置補正パターンが識別されない場合には、検出された1種の位置検出パターン候補を、検討していない1種の位置検出パターン候補の対象から除外する処理を行った後、ステップS50に戻る。
ここで位置補正パターンを検出する処理について、図19を参照しながら、以下に説明する。二次元コードに位置補正パターンが存在する場合、位置補正パターンを検出する。位置補正パターンを検出する場合、図18に示す位置検出パターンと同様、画像の左上の点を始点とし、画面をX方向に走査し、右端にたどり着いたら、数ピクセル下の左端からX方向に走査する。言い換えれば、数ピクセル分間引くことになる。これを画像全体に対して繰り返す。間引くピクセル数は、(最大間引き量)=(位置補正パターンの辺の長さの中で最小となるセルサイズ)×(撮影時のセルあたりのピクセル数)である。全ての位置補正パターンの辺の長さの中で最小となるセルサイズは、コードの回転も考慮し、位置補正パターンの回転で起こり得るY方向の最小セルサイズである。撮影時のセルあたりのピクセル数は、1セル当たり1ピクセルを下回ると、理想的な撮影画像でもセルの明と暗を判別することが困難になる。実際の撮影画像でのセルのずれ又は回転を考慮すると、少なくとも1セル当たり3ピクセル以上であることが望ましい。この処理は、間引くピクセルサイズを除き、位置検出パターンの検出のための走査とほぼ同じ処理になるため、同時に行ってもよい。その場合、間引くピクセルサイズを、少ない方に合わせる。そして、コンピュータ45は、検出された位置補正パターンを検査する。
具体的には、走査中に明から暗の境界を見つけた場合、暗部分の周囲を走査する。その際に、最小・最大のX座標、Y座標をそれぞれ求める。これにより、暗の固まりの外接する長方形が取得できる。これの左上座標を(x1’,y1’)、右下座標を(x2’,y2’)と表す。図19は、位置補正パターンの形状チェックを説明する図である。まず、コンピュータ45は、位置補正パターンの形状をチェックする。
(x2’-x1’)と、(y2’−y1’)の値がほぼ同じ値となる。図1に示す二次元コードの各位置補正パターン16A、16Bは、3×3の暗セルである。そこで、まず明の穴がないことを確認する。始点を外接長方形の左側中点(x1’,(y1’+y2’)/2)とし、終点を(x2’,(y1’+y2’)/2)として、x軸方向の走査を行う。ここで、暗の左端(lx1’)から暗の右端(rx1’)まで、全て暗であることを確認する。さらに、図19に示すように、中心座標((lx1’+rx1’)/2,(y1’+y2’)/2)から上下を走査し、こちらもy軸方向に、暗の上端と暗の下端まで、全て暗であることを確認する。
次に、コンピュータ45は、各位置補正パターンの頂点を探索する。外接する長方形の左上の座標(x1’,y1’)からX軸方向に(x2’,y1’)まで走査する。一番初めに接触した暗点の座標をvertex1:(vx1’,vy1’)とする。次に右上の座標(x2’,y1’)からY軸方向に(x2’,y2’)まで走査する。一番初めに接触した暗点の座標をvertex2:(vx2’,vy2’)とする。右下の座標(x2’,y2’)からX軸の反対方向に(x1’,y2’)まで走査する。一番初めに接触した暗点の座標をvertex3:(vx3’,vy3’)とする。次に、左下の座標(x1’,y2’)からY軸の反対方向に(x1’,y1’)まで走査する。一番初めに接触した暗点の座標をvertex4:(vx4’,vy4’)とする。vertex1〜4は正方形となるはずである。そうでない場合は、位置補正パターンではないと判定する。
次に、コンピュータ45は、位置補正パターンの面積を求める。位置補正パターンの面積は、外接する正方形の面積から4隅を含む4つの直角三角形の面積を減じることにより求める。面積=(x2’−x1’)×(y2’−y1’)−(vx1’−vx4’)×(vy4’−vy1’)/2−(vx2’−vx1’)×(vy2’−vy1’)/2−(vx2’−vx3’)×(vy3’−vy2’)/2−(vx3’−vx4’)×(vy3’−vy4’)/2で求まる。
次に、コンピュータ45は、位置補正パターン候補の回転角度を求める。位置補正パターンは、正方形であり90度以上の傾きを検知できないので、90度までの角度を求める。角度は時計回りとする。θ=arctan((vy2’−vy1’)/(vx2’−vx1’))θが回転角度となる。これら検査は簡単なものであり、これと似た形状(黒の正方形)は多くあるため、多数のノイズを拾うことになる。位置補正パターンは、位置検出パターンにより画像内での二次元コードの位置がおおまかに判明した後に、セルの座標補正や、位置検出パターン候補の作成を行うため用いるものであり、検出された位置補正パターンを単独で正しいかどうかを判定する必要はなく、識別された位置検出パターン、又は位置検出パターン候補との位置関係に基づいて、正しい位置補正パターンか否かを判定できればよい。また一方で、位置補正パターンが見つからなくても、位置検出パターン候補を取得することは可能であり、位置補正パターンは、位置検出パターンと異なり必須ではない。
ステップS64では、コンピュータ45は、検出された1種の位置検出パターン候補が、二次元コードの位置検出パターンであるとして、データ部から情報の取り出しを行う。この処理については、図20を参照して後述する。
ステップS66では、コンピュータ45は、情報の取り出しに成功したかの結果に応じて、成功した場合にはステップS68に進み、失敗した場合には失敗した位置検出パターン候補を、位置検出パターン候補の対象から除外する処理を行った後、ステップS60に戻る。
ステップS68では、コンピュータ45は、データの取り出しに成功した二次元パターンに使われた1個の位置検出パターン候補を、二次元コードの識別された位置検出パターンとして記録する。
次に、ステップS70において、コンピュータ45は、データの取り出しに成功した二次元パターンに使われた1個の位置検出パターン候補を、位置検出パターン候補の対象から除外して、ステップS60に戻る。なお、データの取り出しに成功した二次元パターンの所定の範囲に、使用していない位置検出パターン候補がある場合には、その位置検出パターン候補を、位置検出パターン候補の対象から除外する。
上述したステップS60からステップS70を繰り返すことにより、1種の位置検出パターン候補が、二次元コードの位置検出パターンであるかが確認される。ここで、除外されていない1種の位置検出パターン候補が残っていない場合には、ステップS72に進む。ステップS72では、解析メインの処理を終了する。処理時間短縮のため、ステップS50で、検討していない2種の位置検出パターン候補の組み合わせがない場合は、ステップS72で解析メインの処理を終了しても良い。
次に、上述したステップS40、S52及びS64における情報の取り出し処理を、図20〜図23を参照して、以下に説明する。
まず、ステップS80において、コンピュータ45は、情報取り出し処理を開始する。
次に、ステップS82において、コンピュータ45は、一又は複数の位置検出パターンから合計4点の座標を取得する。まず、ステップS40の場合の処理について、以下に説明する。
ステップS40の場合には、コンピュータ45は、検出された3個の位置検出パターン候補の内から2個の位置検出パターン候補を選択して、選択された一の位置検出パターン候補から少なくとも1点の座標を取得するように、選択された少なくとも2個の位置検出パターン候補から合計4点の座標を取得する。この際、位置検出パターンは外側の2つを選択し、各位置検出パターンから4隅の2点を選択して、選択された4点を結んだ外形が長方形状となることが望ましい。後述するステップS96において、取り出されたメッセージから正しく情報が得られたならば、検出された位置検出パターン候補は、識別された位置検出パターンということになる。なお、コンピュータ45は、識別された少なくとも3個の位置検出パターンの内から少なくとも1個の記位置検出パターンを選択して、選択された位置検出パターンから合計4点の座標を取得してもよい。
図21は、検出された3個の位置検出パターン候補から合計4点の座標を取得することを説明する図である。
図21に示すように、撮影された二次元コードの画像に基づいて、3つの位置検出パターン候補が検出されているとする。コンピュータ45は、4点の座標を、複数の位置検出パターンの輪郭を形成する点から取得することが好ましい。図21に示す例では、位置検出パターン12A、12B、12Cの外形は四角形であり、コンピュータ45は、4点の座標を、位置検出パターン12A、12B、12Cの輪郭を形成する四角形の頂点から取得する。4点の座標は、二次元コードの射影変換を行うパラメータとして取得して使用されるので、同一直線上に配置されない4点を取得することが好ましい。この考え方は、後述するS52及びS64の処理にも適用される。
第1位置検出パターン12Aは、左上の位置から反時計回りに、4つの頂点A1、頂点A2、頂点A3、頂点A4を有する。第2位置検出パターン12Bは、左上の位置から反時計回りに、4つの頂点B1、頂点B2、頂点B3、頂点B4を有する。第3位置検出パターン12Cは、左上の位置から反時計回りに、4つの頂点C1、頂点C2、頂点C3、頂点C4を有する。
コンピュータ45は、3つの異なる位置検出パターン候補の内、距離が最も離れている第1位置検出パターン12A及び第3位置検出パターン12Cを選択する。そして、コンピュータ45は、第1位置検出パターン12Aから2つの頂点A1及び頂点A2の座標を取得し、第3位置検出パターン12Cから2つの頂点C3及び頂点C4の座標を取得する。このように、最も距離が離れている2つの位置検出パターンを選択し、更に、最も距離が離れている4つの頂点が取得される理由は、データ取得の計算対象となるデータ部11から近いことが望まれるためである。1つの位置検出パターンから4点の座標を取得した場合、遠くのデータ部11における座標の計算精度が悪化するため、データ部11の全体を広くカバーできる4点を取得することが望ましい。また、読取装置のレンズの歪みや、二次元コードを印字する面の歪みなどが原因で撮影されたコードに歪みが発生した場合、その歪みは一様でない。そのため、同じ位置検出パターンから取得した4点の座標から二次元空間の射影変換の係数を取得するよりも、異なる位置検出パターンにまたがる複数の点を元に係数を計算したほうが、歪みによる影響を軽減できる効果が期待できる。
そして、コンピュータ45は、取得した4つの頂点の組み合わせが、以下の(a)(b)の条件を満たすことが望ましい。これらの条件が満たされない場合は、ステップS100に進んでも良い。ステップS100では情報の取り出しに失敗して、処理を終了する。
(a)4つの頂点を結んで形成される4角形の4つの頂点の角度が直角になり、向かい合う辺の長さが1:1となる。
(b)4つの頂点を結んで形成される4角形がデータ部から所定の距離以上離れている。
以上が、ステップS40の場合の処理の説明である。
次に、ステップS52の場合の処理について、以下に説明する。
ステップS52の場合には、コンピュータ45は、検出された2個の記位置検出パターン候補に基づいて、一の位置検出パターン候補から少なくとも1点の座標を取得するように、検出された2個の位置検出パターン候補から合計4点の座標を取得する。後述するステップS96において、取り出されたメッセージから正しく情報が得られたならば、検出された位置検出パターン候補は、識別された位置検出パターンということになる。なお、コンピュータ45は、識別された2個の位置検出パターンの内から少なくとも1個の位置検出パターンを選択して、選択された位置検出パターンから合計4点の座標を取得してもよい。
図22(A)〜図22(C)は、検出された2個の位置検出パターン候補から合計4点の座標を取得することを説明する図である。
図22(A)〜図22(C)に示すように、撮影された二次元コードの画像に基づいて、3つの内の2つ位置検出パターン候補が検出されているとする。二次元コードの汚れ又は撮影時のぼけ・ブレ等のために、3つの内の1つ位置検出パターンは検出されていない。
図22(A)に示す例では、第1位置検出パターン12A及び第3位置検出パターン12Cが検出されており、第2位置検出パターン12Bは検出されていない。コンピュータ45は、第1位置検出パターン12Aから2つの頂点A1及び頂点A2の座標を取得し、第3位置検出パターン12Cから2つの頂点C3及び頂点C4の座標を取得する。最も距離が離れている4つの頂点が取得される理由は、射影変換を行うための4点の座標は、データ取得の計算対象となるデータ部11から近いことが望まれるからである。1つの位置検出パターンから4点の座標を取得した場合、遠くのデータ部11における座標の計算精度が悪化するため、データ部11を広くカバーできる4点を取得することが望ましい。また、読取装置のレンズの歪みや、二次元コードを印字する面の歪みなどが原因で撮影されたコードに歪みが発生した場合、その歪みは一様でない。そのため、同じ位置検出パターンから取得した4点の座標から二次元空間の射影変換の係数を取得するよりも、異なる位置検出パターンにまたがる複数の点を元に係数を計算したほうが、歪みによる影響を軽減できる効果が期待できる。この考え方は、図22(B)及び図22(C)の処理に対しても適用される。
図22(B)に示す例では、第2位置検出パターン12B及び第3位置検出パターン12Cが検出されており、第1位置検出パターン12Aは検出されていない。コンピュータ45は、第2位置検出パターン12Bから2つの頂点B1及び頂点B2の座標を取得し、第3位置検出パターン12Cから2つの頂点C3及び頂点C4の座標を取得する。
図22(C)に示す例では、第1位置検出パターン12A及び第2位置検出パターン12Bが検出されており、第3位置検出パターン12Cは検出されていない。コンピュータ45は、第1位置検出パターン12Aから2つの頂点A1及び頂点A2の座標を取得し、第2位置検出パターン12Bから2つの頂点B3及び頂点B4の座標を取得する。
そして、コンピュータ45は、取得した4つの頂点の組み合わせが、以下の(a)(b)の条件を満たすことが望ましい。これらの条件が満たされない場合は、ステップS100に進んでも良い。ステップS100では情報の取り出しに失敗して、処理を終了する。
(a)4つの頂点を結んで形成される4角形の4つの頂点の角度が直角になり、向かい合う辺の長さが1:1となる。
(b)4つの頂点を結んで形成される4角形がデータ部から所定の距離以上離れている。
以上が、ステップS52の場合の処理の説明である。
次に、ステップS64の場合の処理について、以下に説明する。
ステップS64の場合には、コンピュータ45は、識別された位置検出パターンから、4点の座標を取得する。
図23(A)〜図23(C)は、検出された1個の位置検出パターン候補から合計4点の座標を取得することを説明する図である。
図23(A)〜図23(C)に示すように、撮影された二次元コードの画像に基づいて、3つの内の1つ位置検出パターンが識別されているとする。二次元コードの汚れ又は撮影時のぼけ・ブレ等のために、3つの内の2つ位置検出パターンは検出されていない。位置検出パターン候補が正しいとすると、位置補正パターンが所定の位置から見つかるはずである。位置検出パターン12Aの頂点A1と頂点A2の中点をM1、頂点A2と頂点A3の中点をM2、頂点A3と頂点A4の中点をM3、頂点A4と頂点A1の中点をM4とする。位置検出パターンの重心座標から、4点M1、M2、M3、M4を通る直線を引く。その直線上、且つ重心座標から所定の距離(例えば14.5セル)に、位置補正パターンが存在するはずである。さらに位置検出パターンと、位置補正パターンの面積を比較し、例えば位置検出パターンの面積:位置補正パターンの面積=64:9(8×8セル:3×3セル)でなければ、位置検出パターンの候補から除外する。さらに位置検出パターンと、位置補正パターンの回転角度を比較し、同じでなければ、位置検出パターンの候補から除外する。以上の判定より、位置検出パターン候補と、位置補正パターンから、正しい位置検出パターンを取得できる。
図23(A)に示す例では、位置補正パターン16Aを識別することにより、第1位置検出パターン12Aが識別されており、第2位置検出パターン12B及び第3位置検出パターン12Cは検出されていない。コンピュータ45は、第1位置検出パターン12Aから4つの頂点A1、頂点A2、頂点A3及び頂点A4の座標を取得する。四角形の位置検出パターンの4つの頂点が取得される理由は、位置検出パターン上の局所的に汚れている点を取得することを回避するためである。図23(A)に示す例では、4つの頂点が1つの位置検出パターンから取得されるため、4つの頂点から大きく離れたコード端部に位置するデータ部が発生しているので、第1位置検出パターン12A、第3位置検出パターン12Cから4点を取得した場合に比べ、精度は下がるがデータの検出は可能である。この考え方は、図23(B)及び図23(C)の処理に対しても適用される。
図23(B)に示す例では、位置補正パターン16A又は16Bを識別することにより、第2位置検出パターン12Bが識別されており、第1位置検出パターン12A及び第3位置検出パターン12Cは検出されていない。コンピュータ45は、第2位置検出パターン12Bから4つの頂点B1、頂点B2、頂点B3及び頂点B4の座標を取得する。
図23(C)に示す例では、位置補正パターン16Bを識別することにより、第3位置検出パターン12Cが識別されており、第1位置検出パターン12A及び第2位置検出パターン12Bは検出されていない。コンピュータ45は、第3位置検出パターン12Cから4つの頂点C1、頂点C2、頂点C3及び頂点AC2の座標を取得する。
そして、コンピュータ45は、取得した4つの頂点の組み合わせが、以下の(a)(b)の条件を満たすことが望ましい。これらの条件が満たされない場合は、ステップS100に進んでも良い。ステップS100では情報の取り出しに失敗して、処理を終了する。
(a)4つの頂点を結んで形成される4角形の4つの頂点の角度が直角になり、向かい合う辺の長さが1:1となる。
(b)4つの頂点を結んで形成される4角形がデータ部から所定の距離以上離れている。
以上が、ステップS64の場合の処理の説明である。
コンピュータ45は、ステップS82の処理を終了すると、ステップS84に進む。
次に、ステップS84において、コンピュータ45は、取得された4点の座標に基づいて、二次元空間の射影変換の係数が求まり、射影変換により二次元コードの画像の座標変換を行って、歪み又はぼけが補正された二次元コードの元の形状の画像を生成する。
次に、ステップS86において、コンピュータ45は、元の形状に座標変換された二次元コードの画像における各セルの座標及び画素値を求める。
次に、ステップS88において、コンピュータ45は、各セルの画素値に基づいて、メッセージ、誤り訂正符号等を含むバイナリ形式の実データを取り出す。
次に、ステップS90において、コンピュータ45は、誤り訂正符号を用いて、データ部と誤り訂正符号に関して、誤りの数と位置を検出する。誤り数がゼロであれば、ステップS96に進む。誤り数がゼロでなければ、ステップS92に進む。
ステップS92では、コンピュータ45は、誤り訂正可能であるか否かを判定し、訂正可能であればステップS94に進み、訂正ができなければステップS100に進む。ステップS100では、情報の取り出しが失敗して、処理を終了する。
ステップS94では、コンピュータ45は、誤り訂正符号を用いて、実データの誤り訂正を行う。
次に、ステップS96において、コンピュータ45は、実データに基づいてメッセージを復元して記憶する。
次に、ステップS98において、コンピュータ45は、情報の取り出しに成功したので、情報の取り出しを終了して、ステップS40、S52又はS64の次の処理に進む。
図22及び図23の例で示したように、位置検出パターンの個数は、二次元コードが汚れている場合には検出できないものが発生することを考慮すると、個数の多い方が好ましい。しかし、個数が多いと、位置検出パターンが占有する二次元コード内の領域の面積の比率が増加するので、データ効率が低下すると共に、位置検出パターンを検出するための処理量も増加する。従って、位置検出パターンの個数は、二次元コードの使用形態等に応じて適宜決定することが好ましい。
本発明では、上述した二次元コード、二次元コードの解析方法、二次元コードの解析装置及び二次元コードを解析するプログラムは、本発明の趣旨を逸脱しない限り適宜変更が可能である。また、一の実施形態が有する構成要件は、他の実施形態にも適宜適用することができる。