(58)【調査した分野】(Int.Cl.,DB名)
前記複数個の位置検出パターンの内の2個の位置検出パターンの組み合わせについて、前記2個の位置検出パターンの中心を結ぶ直線が長方形の当該二次元コードの外部との境界に交差する2点間の距離は、前記2個の位置検出パターンの中心間の距離の2倍より大きい請求項3に記載の二次元コード。
前記除外手段は、2つの前記位置検出パターン間の距離が所定の距離とならない場合には、前記2つの位置検出パターンの組み合わせを、一の二次元コードに含まれる位置検出パターンの組み合わせではない誤った位置検出パターンの組み合わせとして除外する請求項5に記載の二次元コードの解析システム。
前記第1の二次元コード及び前記第2の二次元コードは、二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した長方形の二次元コードであって、
長方形の基本パターン部を有し、
前記基本パターン部は、
セル位置を特定するための前記複数個の位置検出パターンと、
前記二次元コードのサイズを示すバージョン情報と、を含み、
前記バージョン情報を用いて、前記複数個の位置検出パターン間の距離を固定した状態で前記二次元コードのサイズを可変に設計することが可能になされている二次元コードである請求項7記載の二次元コードの解析システム。
前記第1の二次元コード及び前記第2の二次元コードは、前記複数個の位置検出パターンの内の2個の位置検出パターンの組み合わせについて、前記2個の位置検出パターンの中心を結ぶ直線が長方形の当該二次元コードの外部との境界に交差する2点間の距離は、前記2個の位置検出パターンの中心間の距離の2倍より大きい請求項9記載の二次元コードの解析システム。
【発明を実施するための形態】
【0020】
図1は、特許文献1に記載された正方形の4つのコーナーのうち3つのコーナーに3個の同じ形状の位置検出パターンを配置した二次元コードを、隣接して4個配置した状態で1画像に入るように撮影した場合の画像を示す図である。説明用に4個の二次元コードは簡略図としてある。
【0021】
図1に示すように、二次元コードA、B、C,Dが同じ向きに近接して配置されている。二次元コードAは、3個の位置検出パターンA1、A2、A3を有し、他の二次元コードB、C、Dも同様に3個の位置検出パターンを有する。二次元コードAだけが、二次元コードのセル数(バージョン)が異なり、位置検出パターン間の距離が異なる。3個の位置検出パターン(A1、A2、A3)の位置関係は、二次元コードAの仕様による所定の位置関係を有し、他の3個の二次元コードB、C、Dの位置検出パターンは同じ仕様による位置関係を有する。
【0022】
読み取り時には、位置検出パターンの組み合わせとして、
図1において、B3−D1と、C2−D1と、D1−D2と、の距離が全て等しいとした場合、(A1、A2、A3)、(B1、B2、B3)、(C1、C2、C3)、(D1、D2、D3)の4つの組み合わせの他に、例えば、(D1、B3、D2)や、(A2、C2、D2)の組み合わせも候補として検出されることとなる。
【0023】
二次元コードの解析を行う場合には、二次元コードの形状に基づいて3個の位置検出パターンを特定し、さらに3個の位置検出パターンからセル座標を算出する。そして、二次元コードの3個の位置検出パターン以外の部分のセルの値(明または暗)から記録されたデータを読み取る。
【0024】
図1の画像例では、12個の同じ形状の位置検出パターンが存在し、位置検出パターンの組み合わせとして3個選択するが、3個の組み合わせの中には(A1、D1、D3)のように明らかに誤りである組み合わせもある。また、(C2、A2、D2)のように、位置検出パターン同士の関係としては正しいものの、一の二次元コードに含まれない組み合わせが多数ある。しかし、文献3の二次元コードは、位置検出パターン間の距離が型番(バージョン)により異なるため、位置検出パターン間の距離だけでは除外することができない。この場合、3個の位置検出パターンから算出したセルの座標に基づいて、さらに詳しくコード内の情報から、二次元コードがあるか判断する必要があり、その分解析処理が増えることとなる。そのため、複数の位置検出パターンの位置関係だけで除外できない組み合わせが多いと、その分解析時間が長くなるという問題を生じる。
【0025】
図2は、本発明の第1実施形態の二次元コードを、
図1と同様に複数並べたものである。本発明の第1の特徴は、コードに記録する情報量を増やすため、バージョンを変えたとしても、位置検出パターン間の距離が変わらない点にある。すなわち、従来のコードでは、
図1のように型番によって位置検出パターン間の距離が異なるため、
図1の例えば、(A2、B2、C2)の誤検出の組み合わせを距離の情報から除外することができなかった。本発明のコードは、
図2に示したとおり、コードに記録する情報が増加した場合に大きくなるのは、後述する基本パターン部2の周囲に配置された、増加した情報を記録する周辺部5であり、位置検出パターンが含まれる基本パターン部の寸法及び形状は常に固定である。そのため、位置検出パターン同士の距離を比較するだけの簡単な計算で、位置検出パターンの組み合わせの候補からより多くの組み合わせを除外することができる。
【0026】
前述した通り、位置検出パターンの組み合わせを、簡単な計算で、より多くの組み合わせを除外できるため、複数のコードを認識する解析時間の短縮において本発明の二次元コードは優位性がある。
【0027】
図3Aは、本発明の第2実施形態における位置検出パターンの外形が全て異なるる二次元コードを、
図1と同様に4つ並べたものである。
図3Bは、
図3Aの二次元コードAにおける外形が全て異なる位置検出パターンを示す図である。
図3Aの位置検出パターンA1が
図3BのA1に対応し、
図3Aの位置検出パターンA2が
図3BのA2に対応し、
図3Aの位置検出パターンA3が
図3BのA3に対応し、
図3Aの位置検出パターンA4が
図3BのA4に対応する。二次元コードB、C、Dも同様の位置検出パターンを有する。本発明の第2の特徴は、1個の二次元コードに含まれる複数の位置検出パターンの外形を、互いに異なったものとすることで、位置検出パターンの誤った組み合わせ候補を除外する点にある。すなわち、従来のコードでは、
図1の、例えば、(A2、B2、C2、D2)の誤った組み合わせを除外することができなかった。しかし、第2実施形態では、
図3でこれに相当する(A2、B2、C2、D2)の組み合わせにおいて、位置検出パターンが全て同じ外形となるため、位置検出パターンの組み合わせから除外することが可能である。これは、第2実施形態が、異なる外形を持つ4個の位置検出パターンではなく、異なる外形を持つ3個の位置検出パターンであっても、同様にこの位置検出パターンの外形に基づいて、誤った組み合わせを除外できる。
【0028】
この場合の組み合わせを削減する効果を、数値で示す。
図1のように、二次元コードが4個あり、それぞれのコードに位置検出パターンが3個あった場合、撮影画像に計12個の位置検出パターンが存在することになる。計12個の位置検出パターンのうち3個の組み合わせすべてについて同一の二次元コードのものであるかチェックするとする。この場合、組み合わせは12C3=220通りとなる。もし、1個の二次元コードに4個の同じ位置検出パターンがある場合には、撮影画像内の位置検出パターンの個数は16個になり、その組み合わせは、16C4=1820通りとなる。
【0029】
これに対して、位置検出パターンの外形が全て異なる場合、3個の位置検出パターンでは、4C1×4C1×4C1=64通りとなり、4個の位置検出パターンでは、4C1×4C1×4C1×4C1=256通りとなり、組み合わせの数が大幅に減ることがわかる。
【0030】
なお、説明のため、第1実施形態と第2実施形態の特徴を分けて説明するが、両方の特徴を備えたコードも当然可能であり、両方の特徴の効果により、複数のコードを認識する処理に更に適したコードとなる。
【0031】
図4は、第1実施形態の二次元コードの1例の構成を示す図である。
図4の二次元コード1は、二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した正方形の二次元コードであり、一定形状の正方形の基本パターン部2と、基本パターン部2の周囲に設けられた周辺部5と、を有する。基本パターン部2は、セル位置を特定するための3個の位置検出パターン3A−3Cを有する。ここで、一定形状とは、寸法及び形状が固定されている意味である。二次元コード1の位置検出パターン3A−3Cを除いた部分はセル化されており、セルの明と暗で情報(データ)を記録する。基本パターン部2の位置検出パターン3A−3Cを除いた部分がデータ領域4である。データ領域4は、スペックデータと、必要に応じて実データと、を含む。スペックデータは、基本パターン部2の外側に形成される周辺部5の大きさを決定するバージョン情報などの、周辺部5のデータ配置に関する情報を含む。周辺部5は実データを含み、データ領域4の実データと周辺部5の実データが、二次元コードの情報を表す。ここでは、形状が正方形の二次元コードを例として説明するが、二次元コードの形状は長方形でもよく、長方形には正方形も含まれるものとする。
【0032】
位置検出パターン3A−3Cは、特許文献1に記載された位置検出パターンと同様に、中心に位置する正方形の暗部分と、正方形の暗部分の周囲に設けられた正方形の枠状の暗部分と、を有し、間は明部分である。
図4において、位置検出パターン3Aに対して、位置検出パターン3Bは横方向に、位置検出パターン3Cは縦方向に、隣接している。
位置検出パターンの候補を除外する効果の大きい構成について説明する。図示のように、位置検出パターン3Aと3Bの中心間の距離はd1であり、位置検出パターン3Aと二次元コード1の左側の境界までの距離はd2/2であり、位置検出パターン3Bと二次元コード1の右側の境界までの距離はd2/2である。したがって、二次元コード1の横方向の幅は、d1+d2である。実施形態の二次元コード1では、d1<d2であるように設定される。言い換えれば、位置検出パターン3Aと3Bの中心を結ぶ直線が長方形(正方形)の二次元コード1の外部との境界に交差する2点間の距離は、位置検出パターン3Aと3Bの中心間の距離の2倍より大きい。
【0033】
なお図示していないが、位置検出パターン3Aと3Cの中心間の距離はD1であり、位置検出パターン3Aと二次元コード1の上側の境界までの距離はD2/2であり、位置検出パターン3Cと二次元コード1の下側の境界までの距離はD2/2である。(ここではD=d)したがって、二次元コード1の横方向の幅は、D1+D2であり、実施形態の二次元コード1では、D1<D2であるように設定され、上記の条件が成立する。
二次元コードの位置検出パターンの中心間の距離がd1よりも長くなる場合、異なる二次元コードの位置検出パターンと判断できていたが、全ての二次元コードについてd1<d2が成り立つ場合、他の二次元コードとの位置検出パターンの中心距離がd1となる場合が存在しなくなるため、位置検出パターンの組み合わせの除外がさらに容易になる。
【0034】
次に、画像中で
図4の二次元コードが近接して存在する場合に、異なる二次元コードの位置検出パターンであると区別するための条件について説明する。
図5A及び
図5Bは、位置検出パターンの候補削減の効果の大きい構成における条件を説明する図である。
【0035】
図5Aに示すように、1つの二次元コードの2個の位置検出パターン3Pおよび3Qがあり、その中心間の距離はdであるとする。図示のように、位置検出パターン3Pおよび3Qを中心とする半径d/2の半円とその間を結ぶ長方形からなる長円の範囲に、他の二次元コードが存在しないとする。言い換えれば、この二次元コードの外部との境界(周辺部の外部との境界)は、この長円の範囲外にあるとする。ここでは、他の二次元コードも同様の条件を有するとする。この場合、位置検出パターン3Pおよび3Qからの中心間の距離がdより短い他の二次元コードの位置検出パターンは存在しない。言い換えれば、二次元コードの境界を、複数の位置検出パターンのすべての組み合わせについて
図5Aの範囲の外側になるように設定すれば、位置検出パターン間の距離により、同一の二次元パターンに属する位置検出パターンであるか否かが判定できる。実際には、判定の誤差も考慮して、ある程度余裕をもって二次元コードの境界を設定することが必要である。
【0036】
正方形の二次元コードについての上記の条件は、
図5Bに示すように、4個の位置検出パターン3A−3Cの中心が長方形の頂点をなり、二次元コード1の外形(外部との境界)も相似の正方形であるとする。この場合、横方向の位置検出パターン3Aと3Bの中心間距離をd1とすると、二次元コード1の横幅はd1+d2で、d1<d2である。縦方向についても同様の条件がある。2方向でこの条件を満たせば、斜め方向の位置検出パターン3Sと3Tについての同様の条件も満たす。
【0037】
これまでの説明は、正方形の二次元コードについて行ったが、本発明は長方形の二次元コードでもよい。言い換えれば、本発明での長方形は正方形を含む。
図6は、
図5Bの条件を縦長の長方形の二次元コードについて示す図である。横方向については、
図5Bと同じである。縦方向については、位置検出パターン3Aと3Cの中心間距離をD1とすると、二次元コード1の縦幅はD1+D2で、D1<D2であれば、他の二次元コードの位置検出パターンと中心間の距離で区別できる。なお、
図6の場合も、斜め方向について同様の条件が成り立つ。このように、バージョンが変わっても位置検出パターン間距離を一定とした上で、さらに上述のようなコード設計とすることで、さらに複数のコードの認識に適したコードとなる。
【0038】
これまでの説明は、二次元コードの外形と基本パターン部が相似形で、複数個の位置検出パターンが基本パターン部のコーナーに位置する場合を説明したが、本発明は、これに限定されない。例えば、複数個の位置検出パターンが基本パターン部のコーナーに位置する必要はなく、前述の条件が成り立つならば、基本パターン部の内側の周辺部との境界から離れた位置に配置してもよい。
【0039】
また、基本パターン部の中心と二次元コードの中心が一致する必要はない。
図7A及び
図7Bは、基本パターン部の中心と二次元コードの中心がずれた(相対移動した)例を示す図である。
図7Aに示すように、正方形の基本パターン部2は、正方形の二次元コード1に対して、左上の頂点が一致するように配置される。この場合も、横方向および縦方向の位置検出パターン間距離をd1とすると、二次元コード1の横幅および縦幅はd1+d2で、d1<d2であるとの条件が満たされる。この条件が満たされるならば、他の二次元コードを、方向を変えずに隣接して配置した場合であれば、隣接した他の二次元コードの位置検出パターンとの中心間距離はd2以上であり、他の二次元コードの位置検出パターンと中心間の距離で区別できる。
【0040】
ただし、
図7Bに示すように、4個の二次元コード1A−1Dをそれぞれ90度ずつ異なるように回転して、基本パターン部2A−2Dが近接するように配置すると、図で1説明したような状態になり、他の二次元コードの位置検出パターンとの間で、中心間の距離で区別できなくなる。
【0041】
そのため、基本パターン部の中心と二次元コードの中心がずれた二次元コードにする場合には、隣接して配置する他の二次元コードは同一方向とするように制限してコードを配置することが望ましい。なお、
図7Aに示すように、基本パターン部と二次元コードの頂点が一致するようにずらすのではなく、基本パターン部の外側のすべての方向で周辺部が存在するようにずらす。そしてすべての方向で周辺部の幅を十分に大きくして、位置検出パターンと二次元コードの境界までの距離が、2つの位置検出パターン間の中心距離の1/2より広くする。このような構成によれば、
図7Bのように他の二次元コードを回転して隣接させても、他の二次元コードの位置検出パターンと中心間の距離で区別できる。
【0042】
以上説明した例では、3個の位置検出パターンは、同じ形状であったが、個数は4個以上でも良く、互いに異なる形状の位置検出パターンを設けてもよい。
図8は、方向が特定できる、2個の位置検出パターンを用いた二次元コードを示す図である。
【0043】
図8の二次元コード1は、2個の異なる形状の位置検出パターン3Rおよび3Sを有し、3Rおよび3Sは方向が特定できる形状であることが、
図4の二次元コードと異なり、他は同じである。
図8の二次元コード1は、一定形状の長方形の基本パターン部2と、基本パターン部2の周囲に設けられた周辺部5と、を有する。基本パターン部2は、セル位置を特定するための2個の形状の異なる位置検出パターン3Rおよび3Sを有する。基本パターン部2の位置検出パターン3Rおよび3Sを除いた部分がデータ領域4である。データ領域4は、スペックデータと、必要により実データと、を含む。スペックデータは、基本パターン2の外側に形成される周辺部5の大きさを決定するバージョン情報などの、周辺部5のデータ配置に関する情報を含む。周辺部5は実データを含み、データ領域4の実データと周辺部5の実データが、二次元コードの情報を表す。
【0044】
図8でも、位置検出パターン3Rおよび3Sの中心間距離をd1とし、位置検出パターン3Rおよび3Sの中心を結ぶ直線が二次元コード1の外部との境界と交差する部分の距離、すなわち二次元コード1の横幅をd1+d2とすると、d1<d2の条件を満たすことにより、位置検出パターンの組み合わせの候補を選択する場合の候補数を減少させて処理量を低減できる。さらに、
図8の位置検出パターン3Rおよび3Sは、方向が特定できる形状を有し、形状も異なるため、1つの二次元コードの2個の位置検出パターンを特定するのがさらに容易になる。
【0045】
なお、位置検出パターン3Rおよび3Sの中心から、二次元コードの上側または下側の境界までの距離をd3とする。d3がd2以上であれば、上下に隣接して他の二次元コードが配置される場合にも、距離を比較することにより、位置検出パターンの組の候補を選択する場合の候補数を減少させることができる。
【0046】
図8では、方向が特定できる位置検出パターンを使用したが、さらに複数個の位置検出パターンの少なくとも一部を異なる形状として、基本パターン部のコーナーの位置も特定できるようにすることが考えられる。このように、第1実施形態の二次元コードは、コードのサイズを変化させても、位置検出パターン間距離が変わらないため、位置検出パターン同士の距離に基づいて誤検出を除外することが可能である。誤った位置検出パターンの組み合わせは、一の二次元コードに含まれる位置検出パターンの組み合わせではないとして除外される。また、さらに、位置検出パターン間距離と、周辺部のサイズを上述したように設計することで、位置検出パターン同士の距離に基づいて誤検出を除外する効果はさらに増す。
次に説明する第2実施形態は、コーナーごとに異なる位置検出パターンを設けた二次元コードである。
【0047】
図9は、第2実施形態の二次元コードの1例の構成を示す図である。
第2実施形態の二次元コード10は、二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した二次元コードであり、一定形状の基本パターン部11を有する。基本パターン部11は、セル位置を特定するための位置検出パターン12A−12Dと、スペックデータと実データからなる結合データ含む。また、基本パターン部に入られなかった実データは、周辺部20に記録する。結合データを表すデータ構造は、スペックデータと実データの区切りが明確である構造とする。
【0048】
図9において、基本パターン部11内の位置検出パターン12A−12Dを除く領域、すなわち、参照番号13で示す領域は結合データのデータ領域である。領域13には、スペックデータと実データからなる結合データが記録される。領域13には、さらに位置補正パターンおよび後述する分離パターンが必要により設けられる。また、領域13には、結合データの誤り訂正を行う基本パターン部訂正データも記録される。スペックデータは、領域13内の所定の位置に記録される。
【0049】
スペックデータのデータ量は、周辺部のサイズを決定するバージョン情報や、二次元コード10における基本パターン部11の位置情報、周辺部の誤り訂正のレベル情報、空白に関する情報などのデータ量に応じて増減する。しかし、スペックデータのデータ量の変化量は、データ領域13に記録できる範囲内である。領域13の内、スペックデータを記録した残りの部分に実データが記録される。したがって、基本パターン部11内に記録可能な実データのデータ量は、スペックデータのデータ量に応じて増減する。したがって、基本パターン部11内に記録される実データのデータ量は、スペックデータのデータ量に応じて変化し、データ領域13がスペックデータで一杯になる場合には、データ領域13は実データを含まない場合もあり得る。
【0050】
周辺部20は、基本パターン部11の周辺部分であり、ここにも実データを記録するセルが存在する。スペックデータの増加や、実データの増加により、実データが基本パターン部に記録しきらない場合は、その実データを周辺部20に記録する。
【0051】
図9に示した位置検出パターンは、正方形の枠内に正方形を有する形状の第1位置検出パターン12Aと、第1位置検出パターン12Aより小さな正方形の枠形状の第2位置検出パターン12Dと、長方形の第3位置検出パターン12Bおよび第4位置検出パターン12Cと、を有する。4個の位置検出パターン12A−12Dは、基本パターン部11の四隅(4つのコーナー)に配置されている。この場合、第1位置検出パターン12Aと第2位置検出パターン12Dは、対角上に配置され、第3位置検出パターン12Bと第4位置検出パターン12Cは、対角上に配置され、第3位置検出パターン12Bおよび第4位置検出パターン12Cの長辺は、第1位置検出パターン12Aの辺と同じ長さであり、第3位置検出パターン12Bおよび第4位置検出パターン12Cの短辺は、第2位置検出パターン12Dの辺と同じ長さであり、第3位置検出パターン12Bおよび第4位置検出パターン12Cの短辺の一方は、第1位置検出パターン12Aの辺の延長上に配置され、第3位置検出パターン12Bおよび第4位置検出パターン12Cの長辺の一方は、第2位置検出パターン12Dの辺の延長上に配置されることが望ましい。
図9に示した位置検出パターン12A−12Dは、それぞれ単独で容易に識別することができ、一部の位置検出パターンが汚れ等で識別できない場合でも、識別できた残りの位置検出パターンの組から、二次元コードにおけるセルの座標位置を容易に求めることができる。
【0052】
位置検出パターン12Aと12Cおよび12Bと12Dの横方向の中心間距離をd1とすると、二次元コードの横方向および縦方向の幅は、d1+d2であり、d1<d2である。これにより、位置検出パターンの組の候補を選択する場合の候補数を減少させて処理量を低減できる。さらに、
図9の位置検出パターン12A−12Dは、すべて形状が異なるため、複数のコードを認識する時に1つの二次元コードの4個の位置検出パターンを特定し、二次元コード内のセル位置の算出が容易になる。
【0053】
図10Aは、第2実施形態の二次元コードに記録されるデータ構成例を示す。
図10Bは、第2実施形態の二次元コードに記録される実データの構成例を示す。
【0054】
図10Aに示すように、スペックデータはすべて基本パターン部11内に記憶され、実データは基本パターン部11内の残余部分に記録され、基本パターン部に納まりきらない場合には、基本パターン部の周囲に形成される周辺部に記録される。スペックデータのデータ量は増減するため、基本パターン部11内のスペックデータと実データの境界は、スペックデータのデータ量に応じて変化する。また、基本パターン部11内のデータ領域13をブロックに分割する場合、スペックデータと実データの境界がブロック内に存在する場合が起こり得る。
【0055】
スペックデータは、周辺部におけるデータの配置に関する情報を表すデータである。スペックデータは、周辺部のサイズを決定する縦・横のバージョン情報、周辺部の誤り訂正データの量が可変であれば周辺部誤り訂正レベル情報、周辺部実データを配置しないブロックを決定する空白情報(データとして機能しないブロックの情報)、および基本パターン部移動情報等を有する。
【0056】
スペックデータは、二次元コードの仕様を表すデータだが、基本パターン部11が常に一定形状である場合、実質的に周辺部20のスペックを定義するものとみなすことができる。
【0057】
スペックデータは、発行する二次元コード10によりデータ量が増減し、周辺部に記録するデータ量およびデータ配置に影響する情報を有する。一方で、スペックデータは、データ量が変化するが、基本パターン部11におけるスペックデータ内の情報はあらかじめ定められたで順に配置して記録される。基本パターン部11のデータ領域13の残余部分に実データが記録される。
【0058】
特許文献1等に記載があるQRコード(登録商標)では、撮影画像から、位置検出パターンの画素数と、位置検出パターン同士の距離の画素数と、を計測し、そこからスペックデータであるバージョン情報を算出することも可能である。これを、QRコード(登録商標)の規格(JIS X 0510:2004)によれば、参照復号アルゴリズムにおいて、仮のシンボル型番の求め方として、記載されている。このバージョン情報は、撮影画像の二次元コードの形状から算出しており、コードを斜め上から撮影した場合や、インキが滲んだ場合などでは、誤差が発生する。二次元コードには過酷な環境下での撮影や、劣悪な印字での認識も求められるため、この誤差を生じさせないために、バージョン情報などのスペック情報を、読み取りに必要な冗長性とともに、二次元コードにデータとして持つことが望ましい。
【0059】
図10Bに示すように、実データは、メッセージおよびメッセージを修飾するヘッダー(メッセージ種類(メッセージのエンコード)・メッセージサイズ)を合わせたセグメントを、メッセージ数だけ並べる。メッセージは、ユーザーが二次元コードに格納するデータのことであり、複数のメッセージを格納でき、メッセージごとにセグメントを付与する。また、特殊なセグメントとして、メッセージを含まない、終端フラグだけが入ったセグメントを用意し、実データの容量が余った場合に終端フラグのセグメントを配置し、その後に埋め草を配置する。したがって、終端フラグは、メッセージの有無を示し、最後のセグメントの終端フラグはtrueであり、それ以外のセグメントの終端フラグはfalseである。
【0060】
図10Aに示す、スペックデータと、実データは、1ブロック当たりのデータ容量に従い、ブロック単位に分割される。同様に誤り訂正データも、ブロック単位に分割する。
【0061】
データには誤り訂正データが付される。誤り訂正データにリードソロモン符号を使った場合、誤り訂正はワード単位で行われるため、1ワードを1ブロックとすることが望ましい。1ワードが複数のブロックにまたがる場合、1つのブロックに汚れが発生した場合でも、そのブロックが関係する全てのワードが誤り訂正の対象となり、訂正の効率が悪くなる。訂正原因となる汚れや、スポットライトによる色とびは、1箇所に集中することが多いが、1ワードを1ブロックにすることにより同時に訂正対象となるデータを1箇所にまとめる効果があり、効率的な訂正を可能にし、コードを認識させる可能性を高める。
【0062】
ここで、スペックデータについてさらに説明する。スペックデータのデータ量は、周辺部の大きさを決定するバージョン情報により増減させることができる。すなわち、周辺部が小さい、もしくは存在しない場合には基本パターン部内のスペックデータの量を少なくし、周辺部が大きい場合には基本パターン部内のスペックデータの量を多くすることで、コードの情報量にあわせてスペックデータのデータ量を増減させることが可能である。従来例のようなスペックデータのデータ量を固定した場合、コードのサイズが小さい場合に、コードの面積当たりのスペックデータのデータ量が占める割合が大きくなるという課題もあったが、本実施形態ではこの問題を解決可能である。
【0063】
上記のように、スペックデータは、バージョン情報を含み、バージョン情報に基づいて二次元コードの大きさ(サイズ)が決定される。例えば、バージョン情報として、コードの横のサイズを表す横バージョン情報と、コードの縦のサイズを表す縦バージョン情報という2種類のデータがあれば、コードは任意のサイズの長方形となる。二次元コードは、バージョン情報を用いて、複数個の位置検出パターン間の距離を固定した状態で二次元コードのサイズを可変に設計することが可能になされている。
【0064】
図11A及び。
図11Bは、二次元コードの周辺部のバージョンに応じた変化を説明する図である。
第2実施形態の最小のサイズである二次元コード10は、
図11Aに示した基本パターン部11のみを有する最小サイズのコードであり、基本パターン部11のみを有する最小サイズの正方形の二次元コードを、バージョン横1×縦1と呼ぶ。
【0065】
第2実施形態の二次元コード10は、周辺部20のサイズを縦方向および横方向にそれぞれ伸張できる。横バージョンが2、縦バージョンが3の場合、バージョン横2×縦3と表記する。二次元コード10は、基本パターン部と同じ形状のバージョン横1×縦1を基準とし、バージョン数とともに二次元コード全体のサイズが増加する。バージョンが1上がるごとに、サイズが1単位大きくなる。この例ではバージョンは1から26まで選択可能であるが、これに限定されるものではない。
【0066】
図11Bに示すように、横バージョンの増加では、バージョン数の増加にしたがって、周辺部20の横方向のサイズが、左側(Y2)、右側(Y3)、左側(Y4)、右側(Y5)…という具合に交互に1単位ずつ増加する。言い換えれば、1つ増加するバージョン数が偶数の場合、左側に1単位追加する。同じく1つ増加するバージョン数が奇数の場合、右側に1単位追加する。したがって、横バージョンが奇数の場合には、周辺部20の左右の幅は等しく、偶数の場合には、周辺部20の左側が右側より1単位広い。
【0067】
図11Bに示すように、縦バージョンの増加では、バージョン数の増加にしたがって、周辺部20の縦方向のサイズが、上側(T1)、下側(T2)、上側(T3)、下側(T4)…という具合に交互に1単位ずつ増加する。言い換えれば、1つ増加するバージョン数が偶数の場合、上側に1単位追加する。同じく1つ増加するバージョン数が奇数の場合、下側に1単位追加する。したがって、縦バージョンが奇数の場合には、周辺部20の上下の幅は等しく、偶数の場合には、周辺部20の上側が下側より1単位広い。
この基本パターン部の位置は、基本パターン部の移動における、基準となる所定の位置とする。
【0068】
バージョンの変化による、二次元コードのサイズの変化に関して、1単位ずつ交互に増やす以外にも、2単位以上を交互に増やす場合や、上下、左右にそれぞれ均等に1単位ずつ増加させる場合や、増加を上と左のみ、下や左のみなど一方向に増加させる場合があり得る。また、バージョンが小さい場合には、上下又は左右交互に1単位ずつ変化させることがる。バージョンが大きい場合には、上下又は左右均等に1単位ずつのように、バージョンにより変化をつける場合など、様々な方法が考えられる。
【0069】
図12Aは、第2実施形態の二次元コードの基本パターン部の全体構成を示す。
図12Bは、第2実施形態の二次元コードの基本パターン部の構成を示す図であり、ブロックおよび分離パターンを示す。
【0070】
第2実施形態の二次元コード10は、
図12Bに示すように、この例では、1ブロックは横3×縦3セルを含み、分離スペース16は1セルの幅を有する。基本パターン部11は、破線で囲った横7×縦7ブロック(横27×縦27セル)のサイズで、4つのコーナーに位置検出パターン12A−12Dが配置される。基本パターン部11の位置検出パターン12A−12D以外の領域が、基本パターン部11のデータ領域13である。領域13のうち、基本パターン部11の上側の横7×縦3ブロックの位置検出パターン12Bおよび12D以外の領域14のブロックA1−A11が、結合データを記録するブロックであり、基本パターン部11の下側の横7×縦4ブロックの位置検出パターン12Aおよび12C以外の領域のブロックB1−B12が、基本パターン部11の領域13に記録される、結合データの誤り訂正を行う基本パターン部誤り訂正データ(ワード)を記録する領域である。
ブロックは横3×縦3セルとするが、これが長方形でも、可変でも構わない。
また、セルの形状を正方形としているが、これに限られるものではない。
【0071】
さらに、
図12Aの二次元コード10では、各ブロックは分離パターン16で分離されているため、4個の位置検出パターン12A−12Dは、いずれもブロックより大きな面積を有する。これにより、位置検出パターンと同じパターンが、二次元コード中に出現することはなくなり、位置検出パターンの識別が容易になる。さらに、各ブロック15は分離スペース16により分離されているため、特に撮影画像にぼけ・ぶれがある場合の、各ブロック15におけるセルの明暗の判定精度が向上する。
【0072】
図12Aの二次元コード10の領域13において、ブロック18は位置補正パターンである。位置補正パターン18は、ブロック18の9個のセルがすべて暗であるが、位置補正パターン18の形状はこれに限定されるものではなく、位置補正パターンとして識別できるものであればよい。
【0073】
位置補正パターン18は、基本パターン部の中心ブロックを(CX,CY)とした時に、(CX+7N,CY+7M)(N,Mは整数、ただし、コードをはみ出ない)のブロックに設けることが望ましい。二次元コード10の領域を外れた部分には、位置補正ブロックを配置しない。また、位置補正パターン18は、空白ブロックに重なる場合、位置検出パターンと重なる場合も配置しない。
図12Aでは、N=M=0である位置補正パターン18を1ブロックのみに設けている。
【0074】
位置補正パターンを含むと冗長性が高まり、認識精度向上が期待できる。位置検出パターン12A−12Dの1つが汚れにより見つけられなかった場合、認識出来た位置検出パターン3個から位置補正パターン18の位置を推測し、これを見つける。この位置検出パターン3個と位置補正パターン1個より、4個の点の組をパラメータとする二次元空間の射影変換より、二次元コード10の各セルの計算精度が高まる。このように、
図12Aの二次元コード10は、位置補正パターン18を設けることにより、二次元コード10におけるセル位置検出の精度が一層高まる。
【0075】
位置検出パターンの配置には他にも各種の組合せが考えられる。位置検出パターンと位置補正パターンの合計が5個で、位置検出パターンが3個以下の組合せについては、いずれも、4個の位置検出パターンと1個の位置補正パターンの組合せより、汚れなどへの耐性が弱くなるが、認識は可能である。
【0076】
位置検出パターンと、位置補正パターンは、セルの座標を特定するために使われるが、役割が異なる。位置検出パターンは、解析時に、位置検出パターンは独立して識別でき、コードの内外で同じ形状があらわれないことが望ましい。誤った位置検出パターンを検出した場合、二次元コードであるか否かを判別する必要があり、解析に時間がかかってしまう。また、識別に時間がかかる、複雑な形状や、コードの他の部分と分離困難な形状でないことが望ましい。
【0077】
一方で、位置補正パターンの検出は、位置検出パターンにより二次元コードの位置を特定した後に行われる。位置補正パターンの場所もおおよそわかっている状態で、ある一定範囲を探索することで、位置補正パターンを見つける。位置補正パターンにより、セルの座標の計算の精度を高め、二次元コードが曲がり、セルが非均一になった場合にも認識できる可能性を高めることが可能となる。
【0078】
位置補正パターン18は、実データブロック、誤り訂正符号ブロック、絵柄が埋め込まれている場合には絵柄埋込情報ブロックなどのブロックの座標補正に用いる目的のパターンである。二次元コード10における概ねの座標は、位置検出パターン12A−12Dから取得できるが、紙のよれ、曲がり、レンズの歪み、位置検出パターン取得時のズレによりデータ領域の座標に誤差がでるので、これを補正する目的で設ける。位置補正パターン18は、位置検出パターン12A−12Dにより画像内のコードの座標関係が大まかに判明していることを前提とするため、位置検出パターン12A−12Dと異なり単体で他のノイズと区別する必要がないため、複雑な形状にしなくてもよい。一方で、位置補正パターン18は細かな座標補正がしやすい形状が望ましい。
【0079】
基本パターン部11は、二次元コード10の領域に対して中心付近に位置することに限定されず、中心からずれた位置に配置することも可能である。
図13は、横方向について、基本パターン部11の位置を基本パターン部移動情報でどのように表すか説明する図である。
図13に示すように、バージョン1の時には基本パターン部11のみであり、バージョンが増加するにしたがって左側、右側にブロック列が追加される。基本パターン部11が移動可能な位置は、バージョン数に制限される。例えば、バージョン数が2であれば、基本パターン部11が移動可能な位置は、移動しないか、左側に1ブロック列移動するかである。バージョン数が3であれば、基本パターン部11が移動可能な位置は、移動しないか、左側に1ブロック列移動するか、右側に1ブロック列移動するか、である。言い換えれば、バージョン数が1増加するのに対応して基本パターン部11が移動可能な位置が1つ増加するということである。したがって、基本パターン部移動量情報を表すのに必要なデータ量は、バージョン数に応じて変化する。
【0080】
図13において、横方向のバージョン数が6の場合に、−3から2の数字は、基本パターン部11のブロック単位での基本パターン部移動量情報を示す。横方向のバージョン数が、0は移動しない場合を、マイナスの値は左側への基本パターン部移動量情報を、プラスの値は右側への基本パターン部移動量情報を示す。
【0081】
基本パターン部移動情報は、移動の有無を示す、基本パターン部移動フラグと、基本パターン部の所定位置からの移動量を表す、基本パターン部移動量情報からなる。ここでの所定位置は、
図11Bの基本パターン部の位置を示す。基本パターン部移動フラグは、1(移動有り)と0(移動無し)の状態を持つ1ビットのデータであり、1の時にだけ基本パターン部移動量情報があり、無しの場合には基本パターン部移動量情報を省略できる。これにより基本パターン部を移動させない場合の情報を減らすことができ、移動させる場合にのみ基本パターン部移動量情報をスペックデータとして記録する。基本パターン部移動量情報は、基本パターン部が移動しない場合の基本パターン部の位置を基準とした、移動量を表す。
【0082】
基本パターン部が移動する場合、基本パターン部移動情報としては、基本パターン部移動フラグが1となり、基本パターン部移動量情報として、横の移動量を表す情報と、縦の移動量を表す情報をスペックデータに記録する。
基本パターン部が所定位置から移動しない場合、基本パターン部移動フラグを0とし、基本パターン部移動量情報は省略できる。
【0083】
図14は、バージョン横19×縦19の二次元コード10において、基本パターン部11を移動させた例を示す図である。
図14において、参照番号11は、移動していない基本パターン部11を示し、この場合の基本パターン部位置は、横が0で、縦が0である。参照番号11Aで示す基本パターン部11の基本パターン部位置は、横が−8で、縦が−8である。参照番号11Bで示す基本パターン部11の基本パターン部位置は、横が9で、縦が−9である。参照番号11Cで示す基本パターン部11の基本パターン部位置は、横が−5で、縦が4である。参照番号11Dで示す基本パターン部11の基本パターン部位置は、横が0で、縦が9である。参照番号11Eで示す基本パターン部11の基本パターン部位置は、横が9で、縦が9である。
【0084】
ここでは基本パターン部移動の単位をブロックで表したが、セル単位でも構わない。
また、移動の単位を1ではなく、2より大きい値にしてもよい。この場合、
図14のバージョン横19×縦19の二次元コード10では、横19通り、縦19通りの組み合わせであったが、移動の単位を2ブロックずつにすることで、横9通り、縦9通りの組み合わせとなり、これによりスペックデータの情報量を下げることができる。
【0085】
また、基本パターン部移動情報として、二次元コードの中心からの移動量を示す基本パターン部移動量情報を含めたが、基本パターン部移動量情報の代わりに二次元コード内の基本パターン部の位置を表す基本パターン部位置情報を用いてもよい。
基本パターン部位置情報は、コード左上のブロック座標(0、0)に基本パターン部11の左上のコーナーがある場合を基準とした場合の、基本パターン部11のブロック座標とするここができる。例えば、
図16では、基本パターン部11の左上のコーナーがブロック座標(2、1)にあるため、基本パターン部位置情報として、横に2ブロック、縦に1ブロック、を表すデータが、スペックデータに記録される。
【0086】
また、基本パターン部位置情報の他の表現方法として、基本パターン部の移動のパターンをあらかじめ定義しておく方法もある。例えば、基本パターン部の移動パターンとして “左上”、“右上”、“左下”、“右下”の4通りあらかじめ定義しておき、基本パターン部位置情報として2ビットを持たせ、それぞれ0−3の値を移動のパターンに割り振っておく。
図14の二次元コード10では、基本パターン部位置情報が示す値が、“左上”の場合は、横が−9で、縦が−9となり、“右下”の場合は、横が9で、縦が9となる。
【0087】
この方法の利点として、基本パターン部移動量情報を常に2ビットに抑えることができ、スペックデータを小さくできる。
さらに、上記移動パターンに“真ん中”を追加した5通りとし、加えて基本パターン部移動フラグをなくすことで、基本パターン部移動情報が常に3ビットで示されることになり、少ない情報量で基本パターン部の移動が実現できる。
【0088】
また、空白領域をコード内に設ける場合、この領域に関する情報を、空白領域がある場合には、空白領域があることを示す空白埋込フラグと、空白領域に関する情報を示す空白位置情報を、スペックデータに含ませる。また、空白領域がない場合には、空白領域がないことを示す空白埋込フラグのみをスペックデータに含ませて、空白領域に関する情報を省くことで、スペックデータの情報量を減らすことが可能である。さらに、空白領域がある場合の空白領域に関する情報も、バージョン情報にあわせ、ビット数を増減することで、スペックデータの情報量の効率を向上できる。
【0089】
スペックデータには、周辺部誤り訂正レベル情報を持たせることができる。周辺部実データの誤り訂正量を、周辺部誤り訂正レベルとして、周辺部誤り訂正レベル情報に記録できるようにする。例えば、周辺部誤り訂正レベルは、10%、20%、30%、40%の4通りから選択させるようにする。これにより、撮影条件の悪い環境で用いるコードを認識させる場合には誤り訂正レベルを上げ、そうでない場合は下げるということが可能になる。この場合、スペックデータにおける周辺部誤り訂正レベル情報として、2ビットを確保するようにする。
周辺部誤り訂正レベルは、周辺部実データのデータ量に影響し、周辺部誤り訂正レベルが低ければデータ量が多くなり、周辺部誤り訂正レベルが大きければデータ量が少なくなる。
【0090】
周辺部誤り訂正レベル情報は、周辺部が存在しない場合(バージョンが横1×縦1)は不要であり、スペックデータから省くことができ、その分実データの量を増やすことができる。バージョン情報と、空白情報と、位置補正パターンと、により、周辺部でのデータを持つブロックの数が決定する。これにより、周辺部の記録できるデータの量が決まる。この周辺部のデータ量と、周辺部誤り訂正レベル情報より、周辺部実データと、周辺部誤り訂正データの、データ量が決まる。
【0091】
スペック情報を表すビットデータであるスペックデータの、第2実施形態での一例を示す。まず、横のバージョン情報が入る。横のバージョン情報は1から26までの値となり、2から9ビットで表される。次に、同様の方法で縦のバージョン情報が入る。次に、周辺部誤り訂正レベル情報が入る。周辺部誤り訂正レベル情報は2ビットで表され、4種類の周辺部誤り訂正レベルを取り得る。周辺部誤り訂正レベル情報に関しては後述する。次に、空白領域の有無を表す空白埋込フラグと、基本パターン部の所定位置からの移動の有無を表す基本パターン部移動フラグが入る。空白埋込フラグおよび基本パターン部移動フラグは、1ビットで表され、1(有り)か0(無し)である。次に、空白埋込フラグが1の時には、空白の位置を表す空白位置情報が基本パターン部移動フラグの後ろに追加される。次に、基本パターン部移動フラグが1の時は、基本パターン部移動量情報が、空白埋込フラグが1の時には空白位置情報の後に追加され、空白埋込フラグが0の時には基本パターン部移動フラグの後に追加される。これらの情報の後に、基本パターン部に格納可能な領域が残っている場合、実データが続いて格納される。
【0092】
このスペック情報の種類や、順番、データ量、フラグの扱いに関して、上記に限られるものではないが、エンコードと、デコードにおいて、スペックデータを同じ解釈にする必要がある。
【0093】
周辺部のデータの配置は、第2実施形態の1例では、例えば、周辺部実データを、左上から右方向へ順番にブロックごとに記録し、1行記録し終わったら、1ブロック下の左から右方向へ順番に記録する。周辺部実データの後に、周辺部誤り訂正データを記録する。その場合に、基本パターン部、空白領域、位置補正パターンにはデータを記録しない。
上記は一例であり、周辺部のデータの配置の方法は、あらかじめ決められていればよい。
【0094】
以下、第2実施形態の二次元コード10において、位置検出パターンの組み合わせの候補の削減で効果的なバージョンの二次元コードの実施例を説明する。
図15は、バージョン横4×縦4の二次元コードの例を示す図である。横方向のd1は18セルであり、d2は、左側が11.5セル、右側が9.5セルなので、合計21セルとなり、d1<d2が成り立つ。縦方向も同様にD1<D2が成り立ち、つまり、第2実施形態の二次元コードのバージョンが横・縦共に4以上である場合は、常に条件が成り立ち、大きな効果が得られる。これは基本パターン部が移動した場合にも変わらない。
図16は、バージョン5×5の二次元コードの例を示す図である。
図15と同様に、常にd1<d2と、D1<D2が成り立つ。
【0095】
次に、実施形態の二次元コードを作成する処理(エンコード処理)について説明する。
図17は、二次元コードを作成して提供する作成システムのハードウェア構成を示す図であり、クライアント・サーバ構成の例を示す。
【0096】
作成システムは、仕様を決めて二次元コードの作成を依頼するユーザーが操作するユーザーハードウェアと、依頼された二次元コードを作成して提供するシステムハードウェアと、を有する。
【0097】
ユーザーハードウェアは、コンピュータ等のユーザー処理装置71と、磁気ディスク等の記憶装置72と、を有する。
システムハードウェアは、コンピュータ等のシステム処理装置75と、磁気ディスク等の記憶装置76と、を有する。
【0098】
ユーザー処理装置71とシステム処理装置75は、通信回線等で接続され、通信可能に構成されている。
ここでは、印刷は、ユーザー側で行うが、システム側や他の印刷所で行うようにしてもよい。二次元コードを印刷する媒体はどのようなものでもよく、例えば、紙、樹脂板、筐体表面などである。ここで、媒体として、埋め込む絵柄があらかじめ印刷されているものでもよく、印刷されている埋込絵柄が二次元コードの絵柄領域に入るようにセッティングした上で二次元コードを印刷する。
【0099】
印刷装置は、これらの媒体に二次元コードを印刷可能なものであればよく、例えば簡易プリンター、精密プリンター、印刷装置等であり、モノクロ印刷だけでなく、カラー印刷可能なものでもよい。また、作成した二次元コードは、印刷せずに、通信回線を介してユーザーに二次元コードのデータとして送信されてもよい。ユーザーは、必要に応じて第三者のディスプレイ等に、作成した二次元コードを表示するようにデータを送信する。
【0100】
なお、
図17はクライアント・サーバ構成の作成システムの例を示すが、作成システムはこれに限定されず、例えば。クライアントPC上のエンコードソフトウェアで発行し、USB接続したプリンターから発行する構成や、ハンディータイプの端末・プリンターから発行する構成など、各種の変形例があり得る。また、二次元コードを作成する処理は、コンピュータ実行可能なプログラムとして、コンピュータが読み取り可能な非一時的な記憶媒体に記録されていてもよい。
【0101】
図18は、ユーザーが、ユーザーハードウェアを介してシステムハードウェアにアクセスし、所望の二次元コードを作成するエンコード処理の手順を示すフローチャートである。
【0102】
ステップS10では、ユーザーがエンコードのメイン処理を開始する。
ステップS11では、ユーザーが二次元コードに記録するメッセージを入力する。
ステップS12では、ユーザーが、二次元コードのバージョン情報と、周辺部誤り訂正レベルと、空白情報と、基本パターン部移動情報と、を入力する。これに応じて、ユーザー処理装置71は、システム処理装置75に、入力されたメッセージと、バージョン情報と、周辺部誤り訂正レベルと、空白情報と、基本パターン部移動情報と、を通知する。
【0103】
ステップS13では、システム側で、送信された情報に基づいて基本パターン部と周辺部の配置を決定する。
ステップS14では、送信された情報に基づいてスペックデータのデータ量を決定する。
【0104】
ステップS15では、システム側で、送信された情報に基づいて空白領域のブロックの配置と数を決定する。
ステップS16では、位置補正パターンのブロックの配置とブロック数を決定する。
ステップS17では、周辺部誤り訂正レベルから、周辺部誤り訂正データのブロック数を決定する。
【0105】
ステップS18では、二次元コードに記録可能な実データのサイズを決定する。
ステップS19では、二次元コード内でメッセージを表現するのに必要な実データのサイズを計算する。
【0106】
ステップS20では、S18で求められた二次元コードのデータサイズに、S19の実データが入るか、データサイズが不足して入らないかを判定し、データサイズが不足であれば、ユーザー処理装置71にデータサイズが不足することを送信し、データサイズが足りていればステップS22に進む。
【0107】
ステップS21では、ユーザー処理装置71がユーザーに、入力された二次元コードの形状では入力されたメッセージを表現するのにデータサイズが不足であるというエラー発生を通知して、終了する。
ステップS22では、スペックデータを作成する。
【0108】
ステップS23では、実データを作成する。
ステップS24では、スペックデータと実データを結合する。
ステップS25では、基本パターン部に記録可能なスペックデータと実データ、基本パターン部に配置する。
S26では、基本パターン部に記録されたデータから、基本パターン部誤り訂正データを計算し、配置する。
【0109】
ステップS27では、基本パターン部に入りきらなかった実データを周辺部実データとして周辺部に配置する。
ステップS28では、周辺部実データから、周辺部誤り訂正データを計算し、配置する。
ステップS29では、二次元コードの情報を、画像としてユーザー処理装置71に出力する。
ステップS30で、エンコードのメイン処理が終了する。
【0110】
図19は、実施形態の二次元コードを読み取り、二次元コードを解析する二次元コード解析装置のハードウェア構成を示す図である。
【0111】
二次元コード解析装置は、読み取り部80と、コンピュータ(二次元コード解析処理部)84と、ディスプレイ85と、通信インターフェース86と、を有する。読み取り部80は、レンズ81と、イメージセンサ82と、アナログ・デジタル変換器(AD)83と、を有し、撮影した二次元コードのデジタル画像データをコンピュータ84に出力する。
図19の二次元コード解析装置は、広く使用されており、近年は携帯端末も二次元コード解析装置と同様の機能を実現している。また、二次元コードを解析する処理は、コンピュータ実行可能なプログラムとして、コンピュータが読み取り可能な非一時的な記憶媒体に記録されていてもよい。
【0112】
図20および
図21は、ユーザーが撮影した二次元コードを解析するデコード処理の手順を示すフローチャートである。このデコード処理は、1画面に複数の第2実施形態の二次元コードが写し込まれている場合を想定している。デコード処理は、解析メイン処理と、情報取り出し処理からなる。まず、解析メイン処理を説明する。
【0113】
ステップS101では、解析のメイン処理を開始する。
ステップS102では、二次元コードの撮影画像を入力する。
【0114】
ステップS103では、入力された撮影画像の二値画像を作成する。二値化の方法は、入力された撮影画像がRGB画像などのカラー画像であれば、一旦グレースケール画像に変換し、画像内の最大輝度値と最小輝度値の平均を閾値とし、閾値以上であれば明、未満であれば暗とする。カラー画像からグレースケール変換するには、各画素のRGBの値を用いて、輝度(brightness)=0.299R+0.587G+0.114Bの変換式にしたがって変換する。カラー画像へのグレースケール画像への変換方法、さらに二値化画像への変換方法は、様々な方法が提案されており、上記変換方法に限られない。
【0115】
ステップS104では、位置検出パターン候補を検出する。具体的には、二値化画像を走査する際に、走査方向の横方向、および縦方向に、暗明暗、もしくは暗明暗明暗が、一定の比率であらわれるパターンを検出する。
ステップS105では、4種の位置検出パターンの組み合わせを作成し、検討していない4種の位置検出パターンの組み合わせが残っているか判定し、残っていればステップS106に進み、残っていなければステップS110に進む。
ステップS106では、2点の位置検出パターンの間の距離が、適切でない値となるような組み合わせが1組でもある場合には、正しい組み合わせではないと判定できる。このように、位置検出パターン同士の距離に基づいて誤検出を除外する。
【0116】
ステップS107では、組み合わせた位置検出パターンについて、同一の二次元コードの位置検出パターンであるとして情報の取り出しを行う。この処理については、
図21を参照して後述する。
【0117】
ステップS108では、情報取り出しに成功したかの結果に応じて、成功した場合にはステップS109に進み、失敗した場合には失敗した位置検出パターンの組み合わせを除外する処理を行った後、ステップS105に戻る。
【0118】
ステップS109では、情報の取り出しに成功した位置検出パターンの組み合わせをリストアップする。
ステップS110では、データの取り出しに成功した二次元パターンに使われた4個の位置検出パターン候補を除外し、ステップS105に戻る。なお、データの取り出しに成功した二次元パターンの範囲に、使用していない位置検出パターン候補がある場合には、それも候補から除外する。
【0119】
ステップS105からS110を繰り返すことにより、写し込まれた二次元コードの位置検出パターン候補の4個の組み合わせについて同一の二次元コードのものであるかの判定が終了する。
【0120】
ステップS111では、検討されていない3個の位置検出パターン候補の組み合わせが残っているか判定し、残っていなければステップS120に進み、残っていればステップS112に進む。
【0121】
ステップS112では、3個の位置検出パターン候補から位置補正パターンの位置を推定する。
【0122】
ステップS113では、位置補正パターンがあるか判定し、有ればステップS115に進み、無ければステップS114に進む。
ステップS114では、3個の3個の位置検出パターン候補から1個の位置検出パターン候補を補完し、ステップS115に進む。
ステップS115では、2点の位置検出パターンの間の距離が、適切でない値となるような組み合わせが1組でもある場合には、正しい組み合わせではないと判定できる。位置補正パターンなどで補完した場合にも、欠けていることが想定される位置検出パターンの座標を推定し、距離を検証する。
【0123】
ステップS116では、組み合わせた位置検出パターンについて、同一の二次元コードの位置検出パターンであるとして情報の取り出しを行う。この処理については、
図21を参照して後述する。
【0124】
ステップS117では、情報取り出しに成功したかの結果に応じて、成功した場合にはステップS118に進み、失敗した場合には失敗した位置検出パターンの組み合わせを除外する処理を行った後、ステップS111に戻る。
【0125】
ステップS118では、情報の取り出しに成功した位置検出パターンの組み合わせをリストアップする。
ステップS119では、データの取り出しに成功した二次元パターンに使われた3個の位置検出パターン候補を除外し、ステップS111に戻る。なお、データの取り出しに成功した二次元パターンの範囲に、使用していない位置検出パターン候補がある場合には、それも候補から除外する。
【0126】
ステップS111からS119を繰り返すことにより、写し込まれた二次元コードの位置検出パターン候補の3個の組み合わせについて同一の二次元コードのものであるかの判定が終了する。
【0127】
ステップS120では、リストアップされた位置検出パターンのメッセージを出力し、ステップS121に進む。
ステップS121では、解析メイン処理を終了する。
【0128】
次に
図21を参照してステップS107およびS116の情報取り出し処理を説明する。
ステップS200で、情報取り出し処理を開始する。
ステップS201で、位置検出パターンから、基本パターン部に属するブロック内のセルの座標を計算する。
【0129】
ステップS202で、結合データと、基本パターン部誤り訂正データを取り出す。
ステップS203で、基本パターン部誤り訂正データによる誤り検出処理を行い、誤りがある場合にはステップS204に進み、誤りが無ければステップS207に進む。
【0130】
ステップS204では、ブロック内のセルデータから誤り訂正可能であるか判定し、誤り訂正が不可能であればステップS205に進み、誤り訂正が可能であればステップS206に進む。
ステップS205では、二次元コードからの情報の取出しに失敗ことを通知し、終了する。
【0131】
ステップS206では、結合データの誤り訂正処理を行う。
ステップS207では、結合データから、スペックデータを取り出し、二次元コードのバージョン、周辺部誤り訂正レベル、空白情報、基本パターン部移動情報を特定する。
【0132】
ステップS208では、スペックデータを元に、基本パターン部の周辺部の位置補正パターンを計算する。
ステップS209では、スペックデータを元に、周辺部の位置補正パターンと、空白領域と、を除く周辺部実データと、周辺部誤り訂正データのブロックを特定する。
ステップS210では、周辺部実データと、周辺部誤り訂正データのブロック数の合計を計算し、これと周辺部誤り訂正レベルから、それぞれのブロック数を計算する。
【0133】
ステップS211では、周辺部に属するブロック内のセルの座標を求める。
ステップS212では、周辺部実データと周辺部誤り訂正データを取り出す。
【0134】
ステップS213では、周辺部誤り訂正データにより誤りを検出し、誤りがあればステップS214に進み、誤りが無ければステップS217に進む。
ステップS214では、誤り訂正可能であるか判定し、誤り訂正が不可能であればステップS215に進み、誤り訂正が可能であればステップS216に進む。
【0135】
ステップS215では、二次元コードからの情報の取出しに失敗ことを通知し、終了する。
ステップS216では、データの誤り訂正処理を行う。
ステップS217では、基本パターン部のデータからスペックデータを除いた実データと、周辺部の実データを連結する。
【0136】
ステップS218では、実データを解析する。
ステップS219では、メッセージを取り出す。
ステップS220では、二次元コードからの情報の取出しに成功したので、メッセージを表示して終了する。
【0137】
以上説明した第1、第2実施形態の二次元コードによれば、二次元コードのサイズが異なっても、基本パターン部のセル位置を計算するための複数個の位置検出パターンの位置関係は固定であるため、複数のコードを認識する際に、二次元コードのサイズが異なると位置関係が異なる従来の二次元コードに比べて特定するのが容易である。また、コードに含まれる位置検出パターンが互いに異なる形状であるため、複数のコードを認識する際に、誤検出の位置検出パターンの組み合わせを除外することが可能となる。
【0138】
特に、複数のコードを隣接して並ぶように1画像内に撮影して解析する場合、同一の二次元コード内の位置検出パターン同士の距離は固定であり、周辺部が存在するため、他の二次元コードの位置検出パターンとの距離が長くなる。そのため、異なる距離の組み合わせを容易に除外できるので、正しい組み合わせであるか判定する処理における組み合わせ数を減らすことができる。これは、二次元コードの形状が正方形であれば、効果が大きいが、長方形の二次元コードであっても、組み合わせを減らす効果が得られる。
【0139】
以上、本発明の実施形態を説明したが、記載した実施形態は発明を説明するためのもので、当業者には、特許請求の範囲において各種の変形例があり得ることが容易に理解可能である。
(1)
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した長方形の二次元コードであって、
長方形の基本パターン部を有し、
前記基本パターン部は、
セル位置を特定するための複数個の位置検出パターンと、
前記二次元コードのサイズを示すバージョン情報と、を含み、
前記バージョン情報を用いて、前記複数個の位置検出パターン間の距離を固定した状態で前記二次元コードのサイズを可変に設計することが可能になされている二次元コード。
(2)
前記複数個の位置検出パターンは互いに外形が異なる請求項1に記載の二次元コード。
(3)
前記基本パターン部の外側に形成される周辺部を備える請求項1または2記載の二次元コード。
(4)
前記複数個の位置検出パターンの内の2個の位置検出パターンの組み合わせについて、前記2個の位置検出パターンの中心を結ぶ直線が長方形の当該二次元コードの外部との境界に交差する2点間の距離は、前記2個の位置検出パターンの中心間の距離の2倍より大きい請求項3に記載の二次元コード。
(5)
セル位置を特定するための複数の位置検出パターンを含む第1の二次元コードと、セル位置を特定するための複数の位置検出パターンを含む第2の二次元コードを、複数一括して撮影した画像を解析するシステムであって、
前記第1の二次元コードに含まれる位置検出パターンと、前記第2の二次元コードに含まれる位置検出パターンとによる、誤った位置検出パターンの組み合わせを除外する除外手段を含む二次元コードの解析システム。
(6)
前記除外手段は、2つの前記位置検出パターン間の距離が所定の距離とならない場合には、前記2つの位置検出パターンの組み合わせを、一の二次元コードに含まれる位置検出パターンの組み合わせではない誤った位置検出パターンの組み合わせとして除外する請求項5に記載の二次元コードの解析システム。
(7)
前記除外手段は、前記位置検出パターン同士の外形に基づいて組み合わせを除外する手段である請求項5または6に記載の二次元コードの解析システム。