(58)【調査した分野】(Int.Cl.,DB名)
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、単独で画像から検出可能な3個の異なる位置検出パターンを備え、3個以上の異なる前記位置検出パターンそれぞれは、外形が四角形であるか、又は外形が円形であるか、又は外形が楕円形であるか、又は外形が直角三角形であるか、又は第1の長方形及び第2の長方形を有し、前記第1の長方形と前記第2の長方形とは互いに重心の位置で直交するように交差しているか、又は第3の長方形及び第4の長方形を有し、前記第3の長方形の端部から前記第4の長方形が垂直に延びている、二次元コードを撮影した画像から、前記二次元コードを解析する二次元コードの解析方法であって、
3個の異なる前記位置検出パターンを識別した時は、識別された3個の異なる前記位置検出パターンに基づいて、位置検出パターンが設けられていない第4の位置を推測し、推測した第4の位置及び識別された3個の異なる前記位置検出パターンを含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換し、
3個の異なる前記位置検出パターンのうち対角線上に配置された2個の異なる前記位置検出パターンを識別した時は、識別された2個の前記位置検出パターンの位置関係に基づいて、残りの前記位置検出パターンの位置と、位置検出パターンが設けられていない第4の位置を推測し、推測した前記残りの位置検出パターンの位置及び推測した第4の位置と、識別された2個の異なる前記位置検出パターンの位置を含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換する二次元コードの解析方法。
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、単独で画像から検出可能な4個以上の異なる位置検出パターンを備え、3個以上の異なる前記位置検出パターンそれぞれは、外形が四角形であるか、又は外形が円形であるか、又は外形が楕円形であるか、又は外形が直角三角形であるか、又は第1の長方形及び第2の長方形を有し、前記第1の長方形と前記第2の長方形とは互いに重心の位置で直交するように交差しているか、又は第3の長方形及び第4の長方形を有し、前記第3の長方形の端部から前記第4の長方形が垂直に延びている、二次元コードを撮影した画像から、前記二次元コードを解析する二次元コードの解析方法であって、
4個以上の異なる前記位置検出パターンを識別した時は、少なくとも4個の前記位置検出パターンの位置関係に基づいて前記二次元コードの座標を変換し、
4個以上の異なる前記位置検出パターンのうち識別した前記位置検出パターンが2個または3個の時は、識別した2個または3個の前記位置検出パターンの位置関係から、残りの前記位置検出パターンの位置を推測し、推測した前記位置検出パターンの位置を含めて少なくとも4個の前記位置検出パターンの位置関係に基づいて前記二次元コードの座標を変換する二次元コードの解析方法。
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、単独で画像から検出可能な3個の異なる位置検出パターンを備え、3個以上の異なる前記位置検出パターンそれぞれは、外形が四角形であるか、又は外形が円形であるか、又は外形が楕円形であるか、又は外形が直角三角形であるか、又は第1の長方形及び第2の長方形を有し、前記第1の長方形と前記第2の長方形とは互いに重心の位置で直交するように交差しているか、又は第3の長方形及び第4の長方形を有し、前記第3の長方形の端部から前記第4の長方形が垂直に延びている、二次元コードを撮影した画像から、前記二次元コードを解析するようにコンピュータを制御するプログラムであって、
3個の異なる前記位置検出パターンを識別した時は、識別された3個の異なる前記位置検出パターンに基づいて、位置検出パターンが設けられていない第4の位置を推測し、推測した第4の位置及び識別された3個の異なる前記位置検出パターンを含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換し、
3個の異なる前記位置検出パターンのうち対角線上に配置された2個の異なる前記位置検出パターンを識別した時は、識別した2個の前記位置検出パターンの位置関係に基づいて、残りの前記位置検出パターンの位置と、位置検出パターンが設けられていない第4の位置を推測し、推測した前記残りの位置検出パターンの位置及び推測した第4の位置と、識別された2個の異なる前記位置検出パターンの位置を含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換するようにコンピュータを制御するプログラム。
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、単独で画像から検出可能な4個以上の異なる位置検出パターンを備え、3個以上の異なる前記位置検出パターンそれぞれは、外形が四角形であるか、又は外形が円形であるか、又は外形が楕円形であるか、又は外形が直角三角形であるか、又は第1の長方形及び第2の長方形を有し、前記第1の長方形と前記第2の長方形とは互いに重心の位置で直交するように交差しているか、又は第3の長方形及び第4の長方形を有し、前記第3の長方形の端部から前記第4の長方形が垂直に延びている、二次元コードを撮影した画像から、前記二次元コードを解析するようにコンピュータを制御するプログラムであって、
4個以上の異なる前記位置検出パターンを識別した時は、少なくとも4個の前記位置検出パターンの位置関係に基づいて前記二次元コードの座標を変換し、
4個以上の異なる前記位置検出パターンのうち識別した前記位置検出パターンが2個または3個の時は、識別した2個または3個の前記位置検出パターンの位置関係から、残りの前記位置検出パターンの位置を推測し、推測した前記位置検出パターンの位置を含めて少なくとも4個の前記位置検出パターンの位置関係に基づいて前記二次元コードの座標を変換するようにコンピュータを制御するプログラム。
少なくとも2個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項1から13いずれか1項に記載の二次元コード。
少なくとも2個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項14に記載の二次元コード。
少なくとも2個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項15または16に記載の二次元コードの解析方法。
少なくとも2個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項17または18に記載の二次元コードの解析方法。
少なくとも2個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項19または20に記載のプログラム。
少なくとも2個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項21または22に記載のプログラム。
少なくとも2個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項23または24に記載の二次元コードの作成システム。
少なくとも3個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項1から13いずれか1項に記載の二次元コード。
少なくとも3個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項14に記載の二次元コード。
少なくとも3個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項15または16に記載の二次元コードの解析方法。
少なくとも3個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項17または18に記載の二次元コードの解析方法。
少なくとも3個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項19または20に記載のプログラム。
少なくとも3個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項21または22に記載のプログラム。
少なくとも3個の前記位置検出パターンは、回転させても形状が一致しないか、又は回転させても外形が一致しないか、又は、回転させて外形が一致しても前記位置検出パターンを形成する線の線幅の比率が異なるか、又は、大きさが異なる請求項23または24に記載の二次元コードの作成システム。
【発明を実施するための形態】
【0038】
本発明の実施形態を説明する前に、現在広く使用されている一般的な二次元コードについて説明する。
図1は、特許文献1に記載された二次元コードを示す図である。
【0039】
図1に示すように、二次元コード1は、3つの隅に配置された3個の位置検出パターン(位置決め用シンボル)2と、データ領域3と、を有する。データ領域3は、二次元コード1の領域から、3個の位置検出パターン2およびその周囲のスペーサ部分を除いた部分である。各位置検出パターン2は、暗部分である正方形の枠2aおよび正方形の枠2a内に配置された正方形2cと、枠2aと正方形2cの間の明部分である正方形の枠2bと、を有する。撮影された位置検出パターン2は、走査線が中心を通過する時、走査線がいかなる方向であっても、その長さ比率(周波数成分比)は暗:明:暗:明:暗=1:1:3:1:1となる。そのため、二次元コードをいかなる方向に回転した状態で撮影しても、一定方向の走査処理のみで位置検出パターン2の持つ特定周波数成分比を検出することができる。したがって、位置検出パターン2の中心位置を容易に検出することができる。
【0040】
データ領域3は、マトリックス状に密に配置されたビットを有し、ビットマトリックスは、データ領域内のドットの位置補正のための位置合わせパターン(タイミングセル)4に加えて、二次元コードの形式情報およびその誤り訂正信号と、型番情報およびその誤り訂正信号と、データ部分と、に分けられる。位置合わせパターン4、二次元コードの形式情報およびその誤り訂正信号、および型番情報およびその誤り訂正信号は、コード領域3のビットマトリックス上の所定の位置に配置され、残りの部分がコード化したデータを記録するデータ部で、必要なデータを記録して残った部分が残余ビットである。記録するデータビットと残余ビットは、データビットの最後のエンドパターンで区別される。残余ビットは、埋め草と称され、明(“1”)のビット列であるが、記録時には所定の処理を施されて明暗ビット列に変換されるのが一般的である。
【0041】
位置合わせパターン4は、データ領域内のドットの位置補正のための明暗のビット(ドット)列であり、
図1に示すように、多数個が配置される。位置合わせパターン4は、二次元パターン全体の基準位置を検出する位置検出パターン2とは別のものである。
特許文献3および4は、埋め草であるデータ領域3のビットを利用して、ビット画像を設けることを記載している。
【0042】
二次元コードの認識では、まず位置検出が行えないとコードが認識できないため、位置検出パターンの認識精度を高めることが重要となる。そのための方策として、次の3つの手法が考えられる。
(1)コード全体を大きくする。
(2)位置検出パターンを認識しやすくする。
(3)位置検出パターンの訂正できるように、言い換えれば位置検出パターンに冗長性を持たせる。
【0043】
(1)のコード全体を大きくすることについては、二次元コードを設ける紙面のデザインや、媒体の制限(小さな部品にコードをつけたい)など、二次元コードの印字スペースは小さいことが求められ、面積が小さいことが二次元コードの利点の1つである。よって、(1)の手法は望ましくない。
【0044】
(2)の認識しやすい位置検出パターンについては、二次元コードのサイズに対して位置検出パターンを相対的に大きくして認識しやすくすることが考えられる。しかし、二次元コードのサイズが同じ場合、位置検出パターンを大きくすると、その分データ領域が狭くなり、データ量が少なくなるため、望ましくない。
【0045】
図1の二次元コード1の位置検出パターン2は、画像の走査線がいかなる方向であっても所定の周波数成分比が得られるように、正方形とその周囲に設けた正方形枠とを有する二重形状になっている。この形状自体は、他のビットパターンとの区別が容易であるという利点があるが、小さいパターンの場合には、正方形と正方形枠の間の明の部分がつぶれて認識できないため、画像にぼけ・ぶれがあっても容易に認識できるようにするには、ある程度の大きさにする必要があり、その分データ領域が狭くなるため、データ効率が低下する。
【0046】
さらに、
図1の位置検出パターン2は、全面走査を前提として形状配置を考案されており、必ずしも位置補正パターンの検出時間が短く、効率的な解析を行うのに適しているとは言えない。
【0047】
位置検出パターンは、単純な(シンプルな)形状にすると相対的に大きくしてもセルサイズを少なくできるが、その場合周囲の写り込みを拾いやすくなり、位置検出パターンを誤検出する可能性が高くなり、この場合確認する必要のある位置検出パターンの組合せが増える。そのため、位置検出パターンは、単純ではあるが、ぼけ・ぶれの影響を受けにくく、他の写り込みと区別しやすい形状であることが望ましい。
【0048】
(3)の位置検出パターンに冗長性を持たせるということは、位置検出パターンを複数個設け、そのうちの1個または2個以上の位置検出パターンが識別できない場合でも、識別した残りの位置検出パターンで二次元コード内の位置検出パターンの基準位置を訂正可能にすることである。
【0049】
例えば、
図1の二次元コード1は、3個の位置検出パターンを3箇所の隅(コーナー)に設け、1箇所の隅には設けないようにすることで二次元コードの回転位置を特定できるようにしている。しかし、3個の位置検出パターンのうち1個でも識別できないと二次元コードの回転位置を特定できず、認識に失敗する。位置検出パターンの補完を行えたとしても、二次元コードの検出処理時間が大幅に増加し、ななめからの撮影や、歪み、ぼけなどで正確な座標が得にくいため、データ抽出の精度に大きく影響する。
【0050】
位置検出パターンの個数を増加させれば、位置検出パターンの基準位置は訂正可能になる。例えば、位置検出パターンが5個以上あれば、1個欠けても、4個以上の位置検出パターンを識別できれば、データの座標のマッピング(画像とコードの位置関係の決定)が精度よく行える。
【0051】
位置検出パターンが多ければ多いほど冗長性が増し、汚れなどへの耐性が増すが、検討すべき組合せがその分多くなってしまい、処理時間が長くなると共に、二次元コードにおける位置検出パターンの占める面積が増加し、データ効率が低下する。
【0052】
図1の位置検出パターン2は、画像の走査線がいかなる方向であっても所定の周波数成分比が得られるが、形状を変更すると所定の周波数成分比が得られないため、3個の位置検出パターン2は、同じ形状にする必要がある。そのため、
図1の二次元コード1の位置検出パターン2を異ならせるには、大きさを変える必要がある。位置検出パターン2は、正方形とその周囲に設けた正方形枠を有するため、元々大きなパターンであり、もし3個または4個のパターンの大きさを、画像認識で異なると判定できるように変える場合には、もっとも小さなパターンもある程度の大きさにする必要があり、もっとも大きなパターンは非常に大きくなる。このように、
図1の位置検出パターン2は、冗長性を持たせるには適していない。
【0053】
なお、冗長性を持たせる場合、1個の位置検出パターンが識別できない場合だけでなく、2個以上の位置検出パターンが識別できない場合も考慮することが望ましい。特許文献2は、正方形とその周囲に設けた正方形枠とを有する1個の大型位置検出パターンおよび正方形枠を有する3個の小型位置検出パターンを四隅に配置し、中央に1個の小型置検出パターンを配置した二次元コードを記載している。ここで、中央の小型置検出パターンは、データの座標のマッピングへの寄与が少ないので、使用しない場合を考える。この場合、大型位置検出パターンと1個の小型位置検出パターンが識別できず、2個の小型位置検出パターンのみが識別できた場合には、データの座標のマッピングは行えない。
【0054】
以上のように、位置検出パターンに冗長性を持たせる場合、異なる位置検出パターンの個数が増加するほど冗長性が向上する。
以下、本発明の実施形態を説明する。
【0055】
図2は、第1実施形態の二次元コードを示す図である。
第1実施形態の二次元コードは、35×35セルの大きさを有し、9×9のブロックに分割され、隣接するブロック間に1セルの明の分離スペース23を有する。したがって、分離スペースは、8×8列の1セル幅のブロック間隔の格子状パターンになる。右下の3×3ブロックおよび3×3分離スペースの部分には第1位置検出パターン12Aが、左上の2×2ブロックおよび2×2分離スペースの部分には第2位置検出パターン12Dが、右上の3(横)×2(縦)ブロックおよび3×2分離スペースの部分には第3位置検出パターン12Bが、左下の2(横)×3(縦)ブロックおよび2×3分離スペースの部分には第4位置検出パターン12Cが、それぞれ設けられている。したがって、二次元コードの第1から第4位置検出パターン以外のブロックに、第1から第4位置検出パターン以上のパターンが出現することはない。
【0056】
二次元コードのコード部分の最小単位はセルである。二次元コードは、通常正方形または長方形の形状をとる。他の形状も可能だが、二次元コードの多くは四角形であり、第1実施形態の二次元コードも正方形であるが、これに限定されるものではなく、長方形でも他の形状でもよい。
【0057】
一般に、二次元コードは明暗のセルでデータを表し、第1実施形態の二次元コードもコード部は明暗のセルでデータを表す。なお、特許文献2に記載されたような色によりセルを区別する二次元コードや、ミラー(左右反転)型の二次元コードも提案されており、そのような二次元コードに本発明を適用することも可能であるが、その場合にも、後述するように、4個以上の形状の異なる位置検出パターンを備える。
【0058】
さらに、第1実施形態の二次元コードは、35×35セルの正方形であるが、これよりサイズの大きなコードや、長方形のような縦横の大きさを変えた形状にすることも可能である。35×35セルの正方形の二次元コードを、これをバージョン2×2と呼ぶ。ここで、最小のバージョンは1×1であり、この時のセルサイズは27×27となる。絵柄の埋込は、縦横のバージョンが共に2以上の場合に可能とする。バージョンが1×1の際に絵柄を埋め込まない理由は、データ量が少ないにも関わらず、絵柄を埋め込むと、さらにデータ量が少なくなり、認識してもほとんどデータが得られないことになるため、上記のような制限を加えた。第1実施形態の二次元コードは、縦方向および横方向にそれぞれ伸張できる。横バージョンが2、縦バージョンが3の場合、バージョン2×3と表記する。バージョンが1上がるごとに、セルサイズが8大きくなり、ブロック数が2大きくなる。よって、バージョン3×4では、セルサイズは43×51になる。バージョンは1から20まで選択可能であるが、これに限定されるものではない。
【0059】
第1位置検出パターン12Aは、暗セルの部分が、8×8セルの1セル幅の正方形枠と、正方形枠の中心の2×2の正方形と、を有する。第2位置検出パターン12Dは、暗セルの部分が、4×4セルの1セル幅の正方形枠を有する。第3位置検出パターン12Bは、暗セルの部分が、8×4セルの1セル幅の長方形枠を有する、横長の長方形枠である。第4位置検出パターン12Cは、暗セルの部分が、4×8セルの1セル幅の長方形枠を有する、縦長の長方形枠である。
【0060】
第1実施形態では、正方形の二次元コードの4隅に4個の異なる位置検出パターンを配置する。なお、位置検出パターンが異なるというのは、形状、大きさ、二次元コード上での配置方向が異なる場合であり、線幅の比率が異なる場合も含まれる。ただし、撮影条件等の影響を受けるため、色の違いは対象とせず、明暗の二値画像を対象とする。
【0061】
第1実施形態では、位置検出パターンは、正方形または長方形の各頂点付近に配置する。これは、1箇所に配置する場合より、できるだけ離れて配置する方が汚れの影響を分散できるためである。ただし、位置検出パターンの配置位置は、4隅に限定されるものではない。第1実施形態のように、位置検出パターンとして、正方形だけでなく、長方形のものを用いることで、形状・傾き・大きさの区別が容易にできるため、高速に認識できる。また中抜きした長方形は、他の写り込みと区別するのが容易であり、データの無駄が少ない。
【0062】
4個の位置検出パターンを配置する理由は、解析において精度高くデータの座標のマッピングを計算するのに用いる二次元の射影変換では、コードのセルと、そのセルに対応する撮影画像の座標を計算するために、4組の座標の組をパラメータとして与える必要がある。位置検出パターン数が2個または3個しかない場合でも、座標を補間することで、4点を算出した上で射影変換を行うことは可能であるが、ななめからの撮影や、歪み、ぼけなどで正確な座標が得にくく、データ抽出の精度に大きく影響するため、第1実施形態では4個の位置検出パターンを配置している。
また、位置検出パターンが異なる理由は、見つからない位置検出パターンがあった場合でも、見つからなかった位置検出パターンが確実に特定でき、見つからなかった位置検出パターンの座標の予測が可能になり、位置検出パターンの訂正が可能になる。すべて同じ位置検出パターンを用いた場合、見つからなかった位置検出パターンの特定は、すべて異なる位置検出パターンを用いた場合ほど容易ではなく、位置検出パターンの訂正が困難になる。
二次元コードの4個の位置検出パターン以外の56ブロックは、データ部であり、実データブロック、誤り訂正符号ブロック、バージョン情報ブロック、フォーマット情報ブロック、および絵柄埋込情報ブロックと、を含む。
【0063】
上記のように、データ部は3×3セルを1ブロックとし、ブロック単位でデータを埋め込む。データ部は、バージョン情報ブロック15および16と、フォーマット情報ブロック17と、絵柄埋込情報ブロック18A、18B、19Aおよび19Bと、を有し、残りのブロックが実データブロック22である。なお、後述するように、第1実施形態では、実データブロック22の一部を、誤り訂正符号と、位置補正パターンとして利用する。
【0064】
したがって、位置検出パターン、バージョン情報ブロック、フォーマット情報ブロック、絵柄埋込情報ブロック、位置補正パターンを設けるブロック、さらに誤り訂正符号ブロックを除いた、残りのブロック22が、実データブロックである。もし、絵柄の埋め込みが行われる場合には、絵柄埋込情報ブロックが指示する絵柄埋め込みブロックも実データブロックから除く。実データは、実データブロックに属するブロックについて、左上から右に順にデータを敷き詰め、敷き詰め終わったら1ブロック下の左から敷き詰めるという具合に順に記録する。
【0065】
ブロックは、3×3セルを有し、各セルは明と暗の1ビットを表すので、1ブロックは最大9ビットの情報を持つ(9ビット表現)が、ここでは画像のぼけ・ぶれに対する耐性を高めるため、1ブロック当たりのデータ量を9ビットのデータ量より小さく設定できるようにしている。なお、第1実施形態では、ブロックを3×3セルのサイズとしたが、ブロックサイズはこれに限定されるものではなく、最小である1×1セルのサイズや、縦と横のセルサイズが異なるなどのブロックサイズも可能である。
【0066】
バージョン情報ブロックは、二次元コードのサイズに関する情報を記録し、縦バージョン情報ブロック15と、横バージョン情報ブロック16の2種類存在し、それぞれ対応するバージョン情報が記録される。縦バージョン情報ブロック15および横バージョン情報ブロック16は、それぞれ同じ情報を記憶した2個のブロックを離れた2箇所に配置することにより、汚れ等で欠損するリスクを分散させる。バージョン情報として、バージョン数(縦横各1から20)までの数値を表すブロックを配置する。
【0067】
フォーマット情報ブロック17は、絵柄埋込フラグ(1ビット)と、データブロック種別データ(2ビット)からなるフォーマット情報を記録し、同じ情報を記憶した3個のブロックを離れた3箇所に配置する。絵柄埋込フラグは、絵柄埋込の有無、すなわち絵柄埋込領域が設けられているか否かを示す。絵柄埋込が有の場合、絵柄埋込情報ブロックが設けられる。データブロック種別データは、データブロックの種別を示し、データブロックの種別とは、1ブロック当たりのデータ容量であり、6、7、9ビット/ブロックのいずれかを選択する。データ量は9ビット>7ビット>6ビット表現の順に少なくなるが、データの読み取りのしやすさは、6ビット>7ビット>9ビットの順であり、ぼけやぶれの発生具合と、データ量を勘案して、選択する。これについては後述する。
【0068】
埋め込まれる絵柄は、ブロック単位で埋め込まれ、隣接した複数のブロックが絵柄埋込領域である場合には、その間の分離スペースも絵柄埋込領域に含まれる。埋め込まれる絵柄の外形は四角形であり、絵柄の画像は、セル単位の2値画像に限定されず、どのようなものでもよい。また、絵柄を埋め込む四角形のブロックは、複数個あってもよい。例えば、絵柄は、セルより高分解能の多値画像でも、カラー画像でもよく、もちろんセル単位の2値画像でもよい。第1実施形態では、絵柄埋め込みの制限として、コード上側ブロック2行、左側ブロック2列、下側ブロック3行、右ブロック3列には絵柄を埋め込まないものとする。この範囲は二次元コードの仕様により、絵柄の埋め込み範囲外の部分に画像の情報を持つ絵柄埋込情報ブロックを配置する。
【0069】
絵柄埋込情報ブロックは、絵柄を埋め込む領域のサイズおよびブロック位置に関する情報を縦横それぞれで記録し、縦埋込情報ブロック18Aおよび18Bと、横埋込情報ブロック19Aおよび19Bの2種類存在し、それぞれ対応するバージョン情報が記録される。縦埋込情報ブロック18Aおよび18Bは、絵柄埋め込み高さ(3ビットまたは6ビット)および絵柄埋込オフセット高さ(3ビットまたは6ビット)を記録する。横埋込情報ブロック19Aおよび19Bは、絵柄埋込幅(3ビットまたは6ビット)および絵柄埋込オフセット幅(3ビットまたは6ビット)を指定する。なお、3ビットまたは6ビットにするかは、後述するようにバージョン情報に関係し、バージョンが2〜4の場合には3ビット、バージョンが5〜20の場合には6ビット必要であり、バージョン2〜4の場合には、縦埋込情報ブロック18Bおよび横埋込情報ブロック19Bは不要である。
【0070】
絵柄埋込情報ブロックは、フォーマット情報ブロックで絵柄埋込フラグが立っていた場合のみ存在する。第1実施形態は、埋込絵柄の個数が1つのみの場合を想定しており、複数の埋込絵柄を複数領域に埋め込むことを想定した場合には、フォーマット情報ブロックで絵柄埋込フラグのビット数を増加させて絵柄埋込領域数を示すようにすると共に、上記の絵柄埋込情報ブロックを絵柄枚数分設ける。絵柄のサイズと絵柄の埋込開始位置は、ブロック単位で指定する。ブロックの座標を左上隅のブロックを原点として(n,m)と表現し、横ブロック数をblW個、縦ブロック数をblH個とする。第1実施形態では、絵柄の埋め込み領域は、左上(2,2)、右下((blW−4,blH−4)からなる矩形の領域に限定される。絵柄の最大横ブロック数はblW−5個、最大縦ブロック数はblH−5個となる。
【0071】
絵柄の位置は、始点(左上)となるブロック座標と、ブロックサイズの情報を絵柄埋込情報ブロックとしてコード内に埋め込むことで、コード解析時にどの位置に絵柄が入っているかを認識できるようにする。バージョン情報ブロックと同様に、横と縦で別々に扱う。横はblW−5が8未満の時(横バージョン2〜4)と、それ以外の場合(横バージョン5〜20)でデータ量を分け、縦も同様にする。blWと、blHの値は、横と縦のバージョンを解析することで求められる。
【0072】
blWが13未満の時、横のブロックサイズは最小1、最大8ブロックであり、8通りは3ビットで表すことができ、同様に横のオフセットブロック数は2から8まで7通りあり、これも3ビットで表せるため、合計が6ビットとなる。そのため、ブロックを6ビット表現し、これらは1ブロックで表現可能である。縦も同様にする。blWが13以上の時、横のブロックサイズは6ビットで表し、同様に横のオフセットブロック数も6ビットで表す。よって、2ブロックを使って表現することになる。縦も同様にする。
【0073】
横埋込情報ブロック19Aおよび19Bは、左上および右下の横バージョン情報ブロックの外側(上側及び下側)に、縦埋込情報ブロック18Aおよび18Bは、左下および右下の縦バージョン情報ブロックの外側(左側および右側)に配置する。
もし絵柄を埋め込まない場合、すなわちフォーマット情報ブロックの絵柄埋込フラグが「無し」を示す場合、絵柄埋込情報ブロックおよび絵柄埋め込みの領域が不要になるため、コードが効率的になる。
【0074】
位置補正パターンは、実データブロック、誤り訂正符号ブロック、絵柄が埋め込まれている場合には絵柄埋込情報ブロックの座標補正に用いる目的のパターンである。二次元コードにおける概ねの座標は位置検出パターンから取得できるが、紙のよれ、曲がり、レンズの歪み、位置検出パターン取得時のズレによりデータ部の座標に誤差がでるので、これを修正する目的で設ける。位置補正パターンは、位置検出パターンと異なり、他のノイズと区別する必要がなく、位置検出パターンが算出できれば位置補正パターンの位置は容易に判明する。したがって、位置補正パターンは細かな座標補正がしやすい形状が望ましい。
【0075】
第1実施形態では、位置補正パターンは、決められたセルの組合せからなるブロック(位置補正ブロック)を実データの代わりに等間隔に配置する。ブロックの中心1セルを暗、その周囲を明にしたブロックを、ブロック座標(7n,7m)(n,mは0以上の整数)がデータ部であれば配置する。ただし、その座標に、位置検出ブロック、バージョン情報ブロック、フォーマット情報ブロック、絵柄埋込情報ブロックおよび絵柄が存在すべき時は、配置しない。ここでは、ブロック座標は、ブロックの左上の座標基準座標を(0,0)とし、右隣のブロックを(1,0)と表現している。なお、位置補正パターンを設けるブロックは、上記に限られない。
【0076】
実データは、メッセージと、メッセージを修飾するヘッダー(メッセージ種類(メッセージのエンコード)・メッセージサイズ)を合わせたセグメントを、メッセージ数だけ並べる。また特殊なセグメントとして、メッセージを含まない、終端フラグだけが入ったセグメントを用意し、実データの容量が余った場合に終端フラグのセグメントを配置し、その後に埋め草を配置する。実データはデータブロック種別データが示す1ブロック当たりのデータ容量に従い、ブロック単位に分割する。同様に誤り訂正符号も、ブロック単位に分割する。
誤り訂正符号にリードソロモン符号を使った場合、誤り訂正はワード単位で行われるため、1ワードを1ブロックとすることが望ましい。1ワードが複数のブロックにまたがる場合、1つのブロックに汚れが発生した場合でも、そのブロックが関係する全てのワードが誤り訂正の対象となり、訂正の効率が悪くなる。訂正原因となる汚れや、スポットライトによる色とびは、1箇所に集中することが多いが、ブロックにすることにより同時に訂正対象となるデータを1箇所にまとめる効果があり、効率的な訂正を可能にし、コードを認識させる可能性を高める。
【0077】
上記のように、第1実施形態の二次元コードは、ブロック間に設けられた1セル幅の分離スペース23を有する。したがって、位置検出パターンおよびブロックは、すべて周囲を明のセルで囲まれている。
図3は、第1実施形態の二次元コードにおける複数のブロックの配置を示す図である。各ブロックは3×3のセルを有し、周囲が1セル幅の分離スペース23で隔てられている。
【0078】
図4は、分離スペース23を有する二次元コードと、分離スペース23を有さない二次元コードにおいて、データに応じてセルを明または暗にした場合のパターンの例を示す図である。
図4の(A)は、分離スペース23を有する二次元コードで、4個のブロックの4個の3×3セルを、中央および4隅が暗、それ以外を明として場合のパターン3つと、その3つのパターンと明暗が反転したパターン1つからなる二次元コードで、
図4(B)は、(A)に示した二次元コードの分離スペース23がない場合を示したものである。このように分離スペース23がない場合は、ブロック間の境目が不明確になり、暗セルに囲まれた明セルは黒潰れしてしまう可能性がある。
【0079】
分離スペース23を有さない二次元コードに比べて、分離スペース23を有する二次元コードの方が大きくなり、データ効率は低下するが、撮影した画像にぼけ・ぶれがある場合でも、隣接するブロックのパターンの影響を受けにくくなるので、各セルの明暗判定の精度が向上する。実際に、分離スペース23を有する二次元コードと分離スペース23を有さない二次元コードの画像を二値化処理した場合、分離スペース23を有さない二次元コードは黒潰れが発生しやすい。撮影した画像にぼけ・ぶれがある場合、各セルは周囲のセルの色に影響を受ける。
図4の(B)は周囲のセルが明暗どちらであるかはほぼランダムであり、周囲のセルが異なる色が大きければ大きな影響があるが、そうでなければ影響は少なく、一様でないため、色の判定は困難となる。
図3のようにブロックを構成するセルをa〜iとして説明すると、
図4(A)は分離スペース23があることからacgiは周囲8箇所中5箇所が分離スペースと接し、bdfhは周囲8箇所中3箇所が分離スペースと接するため、e以外のセルは
図4の(B)より周囲の影響を受けにくくなったといえる。さらに後述する6ビット表現にすることで、影響を受けやすいeのセルを評価しなくなり、acgiは周囲8箇所中6箇所が明セルと接し、bdfhは周囲8箇所中4箇所が明セルと接するため、よりぼけ・ぶれの影響を受けにくくなったといえる。
【0080】
このように、分離スペース23を設けることで、セルがぼけ・ぶれにより正しく認識できなくなるリスクを低減することが可能となる。
【0081】
なお、位置検出パターンは、最もサイズの小さい第2位置検出パターン12Dでも、4×4セルの正方形であり、3×3ブロックが分離スペース23で分離されているため、データブロック中に位置検出パターンと同じパターンが出現することはない。したがって、分離スペース23を設けることにより、位置検出パターンの検出処理も容易になる。
【0082】
第1実施形態では、1ブロック当たりのデータ容量を、データ劣化の耐性に応じた種別に分けて選択可能にしている。
【0083】
図5は、第1実施形態における1ブロックのデータ種別を説明する図である。
図5の(A)は、1ブロックの3×3のセルのそれぞれa〜iのビットを割り当て、9ビット表現可能にしたデータ種別を示す。この場合、1ブロックは、9ビットの情報量を有し、2
9=0〜511までの値を表現できる。
図5の(A)の解析を行う際は、入力された撮影画像から作成された二値画像に対して、各セルが対応する画像内の座標を計算し、その座標の画素の値が明(“1”)と暗(“0”)のいずれかを判断し、ブロックあたり9ビットとなる値にする。撮影画像を二値画像に変換する方法は後述する。
【0084】
図5の(B)は、1ブロックの3×3のセルの中心を“1”(明)に固定し、周囲の8個のセルj1〜j8は、4個の明(“1”)と4個の暗(“0”)を含むように設定するデータ種別を示す。この場合、1ブロックは、
8C
4=70パターン、およそ6ビットの情報量を有する。(6ビット表現)
【0085】
図5の(C)は、1ブロックの3×3のセルの中心を“0”(暗)に固定し、周囲の8個のセルj1〜j8は、4個の明(“1”)と4個の暗(“0”)を含むように設定するデータ種別を示す。この場合も、1ブロックは、
8C
4=70パターン、およそ6ビットの情報量を有する。(6ビット表現)
データ種別が6ビット表現である時、(B)と(C)のいずれも使うことができるが、エンコード側とデコード側で一致させる。
図5の(B)(C)の解析を行う際は、入力された撮影画像から作成されたグレースケール画像に対して、j1〜j8のセルの撮影画像内での座標を計算し、各セルのグレースケールの画素値を取得し、画素値を降順にソートする。このとき、画素値の高いセル4つが明であり、低いセル4つが暗である。撮影画像をグレースケール画像に変換する方法は後述する。
二次元コードは様々な撮影環境下での認識が求められる。その際に、光は撮影画像に対して、局所的な色の変化、段階的な色の変化など、悪い影響を与え、これは撮影画像に対する適切な二値化画像の作成が困難である要因となる。
この方法の利点は、二値化閾値が不要な点である。二値化閾値を導出しなくても、各セルの相対的な画素値の関係より、セルの明暗を判定することを可能とする効果がある。また、スポットライトのような局所的な強い色の変化に対しても、ブロックにすることで関係するセルが密集するため、全セルが影響を一様に受ける確率が高くなり、セル全体が白くなった場合でも、相対的な画素値の大小関係は維持されるため、認識できる可能性が高くなる。
【0086】
なお、
図5の(B)および(C)で、中心のセルは“1”(明)または“0”(暗)に任意に設定可能で、周囲の8個のセルj1〜j8を、4個の明(“1”)と4個の暗(“0”)を含むように設定するデータ種別も可能であり、この場合は、1ブロックは、
8C
4×2=140パターン、およそ7ビットの情報量を有する。(7ビット表現)
この解析方法について、周囲のセルの解析の方法までは6ビットの場合と同じである。これに加え、中心画素の解析は、画素値が高い4点のうち画素値が最小となるセルの画素値をG1、画素値が低い4点のうち画素値が最大となるセルの画素値をG2とし、ブロックの中心のセルの撮影画像内での座標を計算し、得られた画素値が(G1+G2)/2以上であれば中心のセルを明セル、それ以外であれば中心のセルを暗セルとする。
この方法では、中心のセルの評価に隣接するセルの解析から得られた閾値を用いており、中心セルと近接するセルは撮影環境から受ける影響がほぼ同じである可能性が高いため、精度が高く認識できる。
【0087】
図5の(D1)〜(D8)は、1ブロックにおいて、中心セルを明か暗に固定し(ここでは明(“1”)に固定)、周囲の8個のセルを明暗4セルずつにするが、時計回りに明暗暗明明明暗暗に固定し、孤立した明セルの位置でデータを取り出す。この場合、8パターン取り出せるので、3ビットのデータ量になる。(3ビット表現)このパターンで、孤立した明セルの位置を検出するには、開始位置のセルから時計回りに、各セルの輝度値を、加算、減算、減算、加算、加算、加算、減算そして減算する演算処理を、開始位置を順に回転しながら行い、演算結果が最大になる開始位置を求める。これが孤立した明セルの位置である。同様に、明暗反転して行うこともでき、この場合は演算結果が最小になる開始位置を求める。
【0088】
前述のように、第1実施形態では、フォーマット情報ブロック17内のデータブロック種別データ(2ビット)により、上記の9ビット表現、7ビット表現、および6ビット表現のいずれかが選択される。必要があれば、3ビット表現を選択できるようにしてもよい。
【0089】
なお、第1実施形態では、重要な情報を記録するバージョン情報ブロックおよびフォーマット情報ブロックは、次に説明する20パターン表現のデータ種別を利用する。
【0090】
図6は、20パターン表現のデータ種別を説明する図である。
図6において、参照番号31は、20パターン表現のデータブロックを、32は第1から第4のいずれかの位置検出パターンを示す。
図6の(A)および(B)に示すように、位置検出パターン32の下側または上側に配置されるデータブロック31は、上下方向の中央の列のセルを、暗明暗(010)に固定し、両側の2列のセルm1からm6の6ビットでデータを表現する。さらに、6ビットのうち3ビットを明、3ビットを暗にすることにより、
6C
3=20パターンを表現する。
図6の(A)および(B)に示したブロックのセルデータの検出は、上下方向に走査することにより行う。また、
図6の(C)および(D)に示すように、位置検出パターン32の右側または左側に配置されるデータブロック31は、横方向の中央の列のセルを、暗明暗(010)に固定し、両側の2列のセルm1からm6の6ビットでデータを表現する。さらに、6ビットのうち3ビットを明、3ビットを暗にすることにより、
6C
3=20パターンを表現する。
図6の(C)および(D)に示したブロックのセルデータの検出は、横方向に走査することにより行う。
このデータ種別により、解析の際にコードのバージョン、およびセルサイズが不確かな状態でも、位置検出パターンの撮影画像内での位置が判明していれば、データブロックからデータを得ることができる。バージョン、およびセルサイズが不明である場合、位置検出パターンの撮影画像内での座標がわかっていてもブロックの座標が算出できない。しかし、位置検出パターンから、隣接する位置検出パターン(第1位置検出パターンと第2位置検出パターンは、第3位置検出パターンと第4位置検出パターン隣接する)の方向を走査することで、データブロックが見つかる。
図6の(A)では、データブロックの中央の列に向かい、参照番号32の位置検出パターンの下側の辺に対して垂直に走査を行う。位置検出パターンのすぐ下から走査を行い、中央の列の上側のセルである暗セルにぶつかる。このまま進めると、明セルにぶつかり、そして暗セルにぶつかり、さらに分離スペースの明セルにぶつかる。これにより中央の列のセルの座標と、データブロックの1セルあたりの画素数が算出できる。これにより、データブロックの他のセルの座標も容易に判明することから、データブロックが表すデータが得られる。
【0091】
バージョン情報ブロックおよびフォーマット情報ブロックは、解析処理において重要なデータブロックであり、位置検出パターンに対して
図6に示すような位置関係になるように配置して、20パターン表現を行う。情報ブロックは2箇所、フォーマット情報は3箇所に同じ情報を保持することで、汚れや、スポットライトなどの局所的なノイズへの対策を行っている。
【0092】
図7は、第1実施形態の二次元コードにしたがって作成した二次元コードの例を示す図である。
図7の二次元コードは、43×43セルで、11×11ブロックの二次元コードであり、バージョンは3×3となる。
図7の二次元コードは、絵柄領域を有さず、絵柄も埋め込まれていない。したがって、絵柄埋込情報ブロックも不要である。
【0093】
図8は、第1実施形態の二次元コードにしたがって作成した二次元コードの別の例を示す図である。
図8の二次元コードは、59×59セルで、15×15ブロックの二次元コードであり、バージョンは5×5となる。
図8の二次元コードは、ブロック座標(2,5)と(11,8)を対角とする長方形の絵柄領域を有し、IDコードと物品名が記載された画像が付されている。これにより、ユーザーは、コードを認識する前でも認識対象の概要を判別することが可能である。
【0094】
位置検出パターンは、各種の形状のものを使用することが可能であり、二次元コードのサイズ等も色々な値が取り得る。
図9は、第2実施形態の二次元コードを示す図である。第2実施形態の二次元コードの第1実施形態の二次元コードとの相違点は、次の通りである。
【0095】
(1)第1位置検出パターン52Aが、暗セルの正方形枠のみで内側に正方形を有さない。また、第2位置検出パターン52Bおよび第3位置検出パターン52Cは、正方形に近い長方形である。第4位置検出パターン52Dは、第1実施形態の12Dと同じ形状である。
【0096】
(2)ブロックサイズおよびブロック構成が異なり、特に横方向および縦方向が位置検出パターンに挟まれた外側部分のブロック構成が、異なる。この部分に配列されるブロックは1列で、その部分に、2個の縦バージョン情報ブロック55、2個の横バージョン情報ブロック56、3個のフォーマット情報ブロック57、2個の縦絵柄埋込情報ブロック58、2個の横絵柄埋込情報ブロック59、および位置補正パターン54Aおよび54Bを設ける。残りのブロック60が、実データブロック、誤り訂正符号ブロック、位置補正パターンとなるブロック、および絵柄埋込領域である。
【0097】
他の部分は、第1実施形態と同じであるので、説明は省略する。
図10は、第2実施形態の二次元コードにしたがって作成した二次元コードの例を示す図である。
【0098】
図10の(A)は、36×36セルで、8×8ブロックの二次元コードである。
図10の(A)の二次元コードは、ブロック座標(2,2)と(5,5)を対角とする長方形の絵柄領域を有し、高分解能の多値画像が付されている。これにより、二次元コードが与える印象を改善し、注目を集めることができる。
【0099】
図10の(B)は、36×36セルで、8×8ブロックの二次元コードである。
図10の(B)の二次元コードは、ブロック座標(2,3)と(5,4)を対角とする長方形の絵柄領域を有し、数字の画像が付されている。
【0100】
二次元コードのサイズおよび形状は各種あり、そのいずれにも本発明の二次元コードを適用することが可能である。
【0101】
図11は、第2実施形態の二次元コードの位置検出パターンを、サイズおよび形状の異なる二次元パターンに適用した変形例を示す図である。参照番号53は、データ領域を示す。
【0102】
図11の(A)は、正方形の小型の二次元コードの例を示す。
図11の(B)は、第2実施形態と類似の二次元コードの例を示す。
図11の(C)は、長方形の二次元コードの例を示す。
【0103】
図11の(D)は、長方形の二次元コードで、中心部に第5位置検出パターン52Eを追加した二次元コードの例を示す。第5位置検出パターン52Eは、正方形枠と、その内部に正方形を有する第1実施形態の第1検出パターン12Aに類似の形状を有する。
【0104】
ここで、位置検出パターンとして好ましい形状について検討する。
本発明での位置検出パターンは、(1)4種の位置検出パターン同士で、形状・大きさ・二次元コード上での配置方向のいずれかで区別が可能であること、(2)位置検出パターン同士で、種類の区別が簡易なアルゴリズムで実現可能であること、(3)区別した位置検出パターンについて、組合せの絞込みが容易であること(高速化に貢献)、(4)位置検出パターンのセルサイズを抑えること、(5)二次元コード以外の写り込んだ画像と区別しやすいこと、および(6)二次元コード内に他に位置検出パターンが表れないことが望まれる。
図2および
図9の位置検出パターンは、以上の事項を満足するといえる。
【0105】
ここで、正方形および長方形の位置検出パターンで、枠の幅および識別スペースの幅、すなわちセルサイズについて、色々な組合せの位置検出パターンを作成して、ぼけ・ぶれを生じるように撮影した画像で二値化を行い、位置検出パターンの区別が行えるか実験を行った。その結果、枠の内部の識別スペースの有無で位置検出パターンとその他の写り込んだ画像とを区別するというのは、容易に実施できること、1セルのスペース、その中の1セルの正方形は、ぼけに影響を受けやすいこと、外枠の太さはぼけの耐性に大きく影響しないこと、が判明した。
【0106】
このような結果から、正方形または長方形の枠で、内部に識別スペースを有し、識別スペースが2セルであるものの有用性が判明した。この理由は、次のように考えられる。最小セルが1ビットを表す二次元コードでは、1セル以上のぼけ・ぶれが発生する場合は、位置検出ができても、データの取得ができなくなる。通常の撮影条件であれば1セル以上のぼけ・ぶれが生じることは少ないため、識別スペースが2セルあれば、1セル分のあらゆる方向のぼけ・ぶれに対応できることとなる。
【0107】
第1の実施形態に示した、セルサイズが4×4の正方形である第2位置検出パターンが、上記のスペースを持つ、最小セルサイズの構成となる。
第1位置検出パターンについては、1セルの枠と2セルのスペースと2セルの正方形を重ねたものとなる。この位置検出パターンであれば、その向きによらず、中心を走査すると暗明暗明暗のパターンが得られ、第2位置検出パターンや、ノイズとの違いが明確である。
【0108】
第3位置検出パターンおよび第4位置検出パターンの形状は、位置検出パターンの枠の延長線に位置検出パターンの枠が存在することが望ましい。これにより、位置検出パターンが欠けた際に、欠けた位置検出パターンの座標を予測する精度が向上する効果が得られる。
これらの条件に当てはまる形状は、第1実施形態の第3位置検出パターン、および第4位置検出パターンとなる。それぞれ90度傾いており、第1位置検出パターン、および第2位置検出パターンとは縦横比が異なることから区別が容易である。
【0109】
第2実施形態は、最も位置検出パターンが占めるセルサイズが少ない構成であり、第1位置検出パターンと第2位置検出パターンは、同じ形状であり、大きさが異なり、第2位置検出パターンを5×5セルにし、上記と同様の理由で第3位置検出パターンと、第4位置検出パターンを作成する。
これら位置検出パターンのセルサイズは、第1実施形態では、16+64+32+32=144セルとなり、第2実施形態では、16+25+20+20=81セルとなる。
図1に示し二次元コードは、3箇所にしか位置検出パターンが無いにもかかわらず、7×7×3=147セルで、本実施例よりセルサイズが大きい。
【0110】
第1実施形態は、第2実施形態と比べ、セルサイズが大きくなるが、第2実施形態では全ての位置検出パターンの面積が近く、斜めからの撮影で精度への影響を受けやすいのに比べ、第1実施形態は、第1位置検出パターンと、第2位置検出パターンは形状が異なり、第3位置検出パターンと、第4位置検出パターンは向きが異なり、第1検出パターン・第2位置検出パターンと、第3検出パターン・第4位置検出パターンは縦横比が異なる。これらは斜めからの撮影でも、充分区別可能であり、位置検出パターンの区別に有用な構成となる。
【0111】
また、
図2の位置検出パターンは周囲2セルに余白として明セルを配置している。
図1の二次元コードの認識の際は、コードを印字した周囲にクワイエットゾーンが必要であり、これはコードの一部と考えられる。これに対して、第1実施形態の二次元コードは、コードの周囲はどのような印刷が行われようが精度に影響しない。また、
図9の第2実施形態のように、余白は
図1のコード同様にコードの外に配置することも可能である。
【0112】
しかし、本発明の主旨からは、他の形状の位置検出パターンも使用でき、各種の変形例が可能である。
図12は、変形例の4個の位置検出パターンの例を示す図である。
図12の(A)は、大きな円枠、方向の異なる2個の楕円枠および小さな円枠が、4個の位置検出パターンである例を示す。
【0113】
図12の(B)は、内部に小さな円を有する大きな円枠、方向の異なる2個の楕円枠および小さな円枠が、4個の位置検出パターンである例を示す。
図12の(C)は、大きな十字形、延長方向が異なる一方のみ延長した2個の十字形および小さな十字形が、4個の位置検出パターンである例を示す。
【0114】
図12の(D)は、大きなL字形、延長方向が異なる一方のみ延長した2個のL字形および小さなL字形が、4個の位置検出パターンである例を示す。ここで、L字は同じ方向であり、角の位置から回転方向を判定することが可能である。なお、L字の方向を90度ずつ回転したものにしてもよい。
【0115】
図12の(E)は、大きな三角枠、延長方向が異なる一方のみ延長した2個の三角枠および小さな三角枠が、4個の位置検出パターンである例を示す。
図12に示した例は、一部の例であり、他にも各種の形状の位置検出パターンが可能である。
【0116】
次に、第1および第2実施形態の二次元コードを作成する処理(エンコード処理)について説明する。
図13は、依頼に基づいて二次元コードを作成して提供する作成システムのハードウェア構成を示す図であり、クライアント・サーバ構成の例を示す。
【0117】
作成システムは、仕様を決めて二次元コードの作成を依頼するユーザーが操作するユーザーハードウェアと、依頼された二次元コードを作成して提供するシステムハードウェアと、を有する。
【0118】
ユーザーハードウェアは、コンピュータ等のユーザー処理装置61と、磁気ディスク等の記憶装置62と、を有する。
システムハードウェアは、コンピュータ等のシステム処理装置65と、磁気ディスク等の記憶装置66と、を有する。
【0119】
ユーザー処理装置61とシステム処理装置65は、通信回線等で接続され、通信可能に構成されている。
ここでは、印刷は、ユーザー側で行うが、システム側や他の印刷所で行うようにしてもよい。二次元コードを印刷する媒体はどのようなものでもよく、例えば、紙、樹脂板、筐体表面などである。ここで、媒体として、埋め込む絵柄があらかじめ印刷されているものでもよく、印刷されている埋込絵柄が二次元コードの絵柄領域に入るようにセッティングした上で二次元コードを印刷する。
【0120】
印刷装置は、これらの媒体に二次元コードを印刷可能なものであればよく、例えば簡易プリンタ、精密プリンタ、印刷装置等であり、モノクロ印刷だけでなく、カラー印刷可能なものでもよい。また、作成した二次元コードは、印刷せずに、通信回線を介してユーザーに二次元コードのデータとして送信されてもよい。ユーザーは、必要に応じて第三者のディスプレイ等に、作成した二次元コードを表示するようにデータを送信する。
【0121】
なお、
図13はクライアント・サーバ構成の作成システムの例を示すが、作成システムはこれに限定されず、例えば。クライアントPC上のエンコードソフトウェアで発行し、USB接続したプリンタから発行する構成や、ハンディータイプの端末・プリンタから発行する構成など、各種の変形例があり得る。
【0122】
図14から
図16は、ユーザーが、ユーザーハードウェアを介してシステムハードウェアにアクセスし、所望の二次元コードを作成するエンコード処理の手順を示すフローチャートである。
【0123】
ステップS10では、ユーザーがエンコードのメイン処理を開始する。
ステップS11では、ユーザーが二次元コードに記録するメッセージを入力する。
ステップS12では、ユーザーが二次元コードに絵柄の埋め込みを行うか否かを決定し、絵柄の埋め込みを行う場合にはステップS13に進み、行わない場合にはシステム側で行うステップS15に進む。この際、ユーザー処理装置61は、システム処理装置65に入力されたメッセージ、および絵柄の埋め込みを行わないこと、を通知する。
【0124】
ステップS13では、ユーザーが、絵柄を埋め込むブロック位置(絵柄埋込オフセット幅、絵柄埋込オフセット高さ、絵柄埋込幅および絵柄埋込高さ)を入力する。ユーザー処理装置61は、システム処理装置65に、入力されたメッセージ、絵柄の埋め込みを行うこと、および絵柄埋込ブロック位置を通知する。
【0125】
ステップS14では、システム側で、送信されたブロック位置に基づいて絵柄のブロックサイズを決定する。
ステップS15では、送信されたメッセージを記録するブロックサイズを決定する。
【0126】
ステップS16では、すべての横バージョンに関して最小縦バージョンを計算する。これは、縦および横のブロック数を乗じたものから、位置検出パターン、バージョン情報ブロック、フォーマット情報ブロック、絵柄を埋め込む場合には絵柄埋込情報ブロックおよび絵柄埋込領域に応じたブロック、位置補正パターンのブロックを除いた残りのブロックを計算する。さらに、このブロック数に対して、一定の誤り訂正率になるような誤り訂正符号ブロックの数を除いた残りのブロックに、メッセージを記録する実データブロックが収容できるサイズをテーブルの形で提示するものである。システム処理装置65は、計算したテーブルのデータを、ユーザー処理装置61に送信する。
【0127】
ステップS17では、ユーザーに縦・横バージョンのテーブルを提示し、ユーザーがいずれを使用するかを決定する。ユーザー処理装置61は、決定した縦・横バージョンを、システム処理装置65に送信する。
ステップS18では、システム側で、送信された縦・横バージョンと、絵柄埋込領域に応じたブロックサイズから、実データのブロックサイズを決定する。
【0128】
ステップS19では、システム側で、送信された縦・横バージョンと、絵柄埋込領域に応じたブロックサイズから、誤り訂正符号ブロックサイズを決定する。
ステップS20では、システム側で、バージョン情報ブロック、フォーマット情報ブロック、絵柄を埋め込む場合には絵柄埋込情報ブロックおよび絵柄埋込領域ブロックの位置を決定する。
【0129】
ステップS21では、システム側で、絵柄埋込を行うか否かが判定され、絵柄埋込を行う場合にはステップS22に進み、行わない場合にはステップS23に進む。
ステップS22では、絵柄埋込情報ブロックを、コード画像部分の所定ブロック位置に配置する。
【0130】
ステップS23では、位置検出パターン・位置補正パターンを画像部分に配置する。
ステップS24では、バージョン情報ブロック・フォーマット情報ブロックを画像部分に配置する。
【0131】
ステップS25では、メッセージごとにメッセージヘッダーを付与する。
ステップS26では、まだデータを入れる部分があるか判定し、あればステップS27に進み、無ければステップS29に進む。
ステップS27では、終端メッセージヘッダー(終端フラグ)をメッセージデータの末尾に付与する。
【0132】
ステップS28では、埋め草を残りの実データ部に付与する。
ステップS29では、実データをブロックにして、画像部分に配置する。
ステップS30では、誤り訂正符号ブロックを画像部分に配置する。
【0133】
ステップS31では、システム処理装置65が、上記のようにして作成したコード画像を出力し、ユーザー処理装置61に送信する。
ステップS32では、ユーザー側で、絵柄埋め込みを行うか否かを判定し、絵柄埋め込みを行う場合にはステップS33に進み、行わない場合にはステップS34に進んで終了する。
【0134】
ステップS33では、送信されたコード画像で、絵柄埋込領域のブロックに埋め込む絵柄データを合成して全体の画像を生成する。絵柄の埋め込みは、例えばデータ添付という形でシステム処理部において行ってもよい。
ステップS34で、エンコードのメイン処理が終了する。
上記の例では、ユーザー側が絵柄データを有していたが、システム側が絵柄データを有しており、それをユーザーが指定するようにしてもよい。
【0135】
図17は、第1実施形態の二次元コードを読み取り、二次元コードを解析する二次元コード解析装置のハードウェア構成を示す図である。
【0136】
二次元コード解析装置は、読み取り部70と、コンピュータ(二次元コード解析処理部)74と、ディスプレイ75と、通信インターフェース76と、を有する。読み取り部70は、レンズ71と、イメージセンサ72と、アナログ・デジタル変換器(AD)73と、を有し、撮影した二次元コードのデジタル画像データをコンピュータ74に出力する。
図17の二次元コード解析装置は、広く使用されており、近年は携帯端末も二次元コード解析装置と同様の機能を実現している。
【0137】
図18から
図20は、ユーザーが撮影した二次元コードを解析するデコード処理の手順を示すフローチャートである。このデコード処理は、1画面に複数の二次元コードが写し込まれている場合を想定している。デコード処理は、解析メイン処理と、情報取り出し処理からなる。まず、解析メイン処理を説明する。
【0138】
ステップS101では、解析のメイン処理を開始する。
ステップS102では、二次元コードの撮影画像を入力する。
【0139】
ステップS103では、入力された撮影画像の二値画像を作成する。二値化の方法は、入力された撮影画像がRGB画像などのカラー画像であれば、一旦グレースケール画像に変換し、画像内の最大輝度値と最小輝度値の平均を閾値とし、閾値以上であれば明、未満であれば暗とする。カラー画像からグレースケール変換するには、各画素のRGBの値を用いて、輝度(brightness)=0.299R+0.587G+0.114Bの変換式にしたがって変換する。カラー画像へのグレースケール画像への変換方法、さらに二値化画像への変換方法は、様々な方法が提案されており、上記変換方法に限られない。
【0140】
ステップS104では、位置検出パターン候補を検出する。具体的には、画像の左上の点を始点とし、画面をX方向に走査し、右端にたどり着いたら、数ピクセル下の左端からX方向に走査する。言い換えれば、数ピクセル分間引くことになる。これを画像全体に対して繰り返す。間引くピクセル数は、(最大間引き量)=(位置検出パターンの最小セル高さ)×(撮影時のセルあたりのピクセル数)である。位置検出パターンの最小高さとは、コードの回転も考慮し、位置検出パターンの回転で起こり得るY方向の最小セルサイズであり、実施形態では左上の第2位置検出パターンの回転しない状態での4セルが最小となる。撮影時のセルあたりのピクセル数は、1セル当たり1ピクセルを下回ると、理想画像でもセルを明と暗を判別することが困難になる。実際の撮影画像でのセルのずれや回転を考慮すると、少なくとも1セル当たり3ピクセル以上あるのが望ましい。3ピクセルとすると、上記の場合最大間引き量は12ピクセルとなり、画像走査回数は全画素数の1/12となり、走査数を大幅に削減できる。
【0141】
ステップS105では、位置検出パターン候補を検査する。具体的には、走査中に明から暗の境界を見つけた場合、暗部分の周囲を走査する。その際に、最小・最大のX座標、Y座標をそれぞれ求める。これにより、暗の固まりの外接する長方形が取得できる。これの左上座標を(x1,y1)、右下座標を(x2,y2)と表す。1度周囲を走査すれば、以後走査はしなくてよい。
【0142】
なお、周囲探索を行っても、充分に画像走査回数を減らすことができる。周囲探査でもっとも処理時間が長くなる最悪ケースの一例は、1ピクセルの縦縞を1ピクセルごとに配置するようなケースであるが、そもそもそのようなケースは発生しない上、発生しても周囲長の探索は全画素を1回走査するのと同じ回数で抑えることができ、走査回数が増加することはない。これは他の最悪ケースでも同様である。
【0143】
図1の二次元コードの場合、暗明暗明暗が1:1:3:1:1の比率になる部分を探すことにより位置検出パターンを検出でき、1回の走査で位置検出パターンを見つけることができる。ここで、撮影したコードが45度傾いている際の走査で、1:1:3:1:1の比率が得られるのは、対角線上の走査だけである。多くの場合、撮影の向きが自由であり、そのため、撮影するコードの向きが360度のいずれの回転位置もあり得る。このような場合、間引くことができる量は少なく、実際の回転位置は分からないので、間引き量を大きくすることはできない。
【0144】
図21は、位置検出パターン候補の形状チェックを説明する図である。
次に、位置検出パターン候補の形状をチェックする。第1実施形態の二次元コードの位置検出パターンは、いずれも枠、すなわち穴形状を有する。そこで、まず穴の有無を確認する。始点を外接長方形の左側中点(x1,(y1+y2)/2)、終点を(x2,(y1+y2)/2)とするx軸方向の走査を行う。ここで、次の(1)または(2)の条件にあてはまることを確認する。
【0145】
(1)暗明暗となる並びが存在することを確認する。1つ目の暗の左端(lx1)から2つ目の暗の右端(rx1)までの中心となる画素が明であることを確認する。
(2)暗明暗明暗というパターンを探す。1つ目の暗の左端(lx2)から3つ目の暗の右端(rx2)までの中心となる画素が暗であることを確認する。
【0146】
(1)の場合はさらに、
図21の(A)に示すように、中心座標((lx1+rx1)/2,(y1+y2)/2)から上下を走査し、上が明暗明となっており(終点:((lx1+rx1)/2),y1−1))、下が明暗明(終点:((lx1+rx1)/2),y2+1))であり、上側走査の暗と明の境界のy座標ty1と下側走査の暗と明の境界のy座標by1の中点が、明の中心座標とほぼ一致することを確認する。
【0147】
(2)の場合もさらに、
図21の(B)に示すように、中心座標((lx2+rx2)/2,(y1+y2)/2)から上下を走査し、上が暗明暗明となっており(終点:((lx2+rx2)/2),y1−1))、下が暗明暗明(終点:((lx2+rx2)/2),y2+1))であり、上側走査の2つめの暗と明の境界のy座標ty2と下側走査の2つめの暗と明の境界のy座標by2の中点が明の中心座標とほぼ一致することを確認する。
【0148】
以上の処理により、枠内に暗部を有する第1位置検出パターン(正方形枠内に正方形)と、枠のみの第2から第4位置検出パターン(正方形枠または長方形枠:ロ型)と、に区別できた。
【0149】
(1)または(2)に当てはまらないものは、位置検出パターンではない。
次に、各位置検出パターン候補の頂点を探索する。外接する長方形の左上の座標(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は長方形(正方形を含む)となるはずである。そうでない場合は、位置検出パターンではない。
図21の(B)の表記は省略する。
【0150】
次に長方形の縦横比を見る。((vx1−vx2)×(vx1−vx2)+(vy1−vy2)×(vy1−vy2))
1/2で1辺の長さが、((vx2−vx3)×(vx2−vx3)+(vy2−vy3)×(vy2−vy3))
1/2でもう1辺の長さが、求められる。辺の比率が、(長辺):(短辺)=1:1でかつ形状が(1)であれば第2位置検出パターン、(2)であれば第1位置検出パターン、(長辺):(短辺)=1:2で形状が(1)であれば第3または第4位置検出パターンとなる。ここまでで、3種類の位置検出パターンの区別が可能となった。
【0151】
次に面積を求める。ここでの面積は、外側の長方形枠の面積で、内側のスペースの面積も含む。第1位置検出パターンの場合は、枠の中の正方形も含む。位置検出パターンの面積は、外側の長方形の面積から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で求まる。
【0152】
次に、回転角度を求める。第1および第2位置検出パターンは、正方形なので90度以上の傾きを検知できないので、90度まで求める。角度は時計回りとする。
θ=arctan((vy2−vy1)/(vx2−vx1))
θが回転角度となる。
【0153】
第3および第4位置検出パターンは、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度で求まる。第4位置検出パターンについても同様に回転角度θを求める。
【0154】
次に、位置検出パターン候補の中心座標を検出する。中心座標は外接長方形の中心((x1+x2)/2(y1+y2)/2)とする。
以上で、位置検出パターン候補の検査が終了する。
【0155】
ステップS106では、既に3種類に区別されている位置検出パターンを、区別ごとに、位置検出パターンを面積で降順にソートする。
【0156】
ステップS107では、4種の位置検出パターンの組合せを作成する。まず、第1位置検出パターン候補の中で最も面積の大きな位置検出パターン候補を選択する。第1位置検出パターンの面積をSとすると、面積がS/4である第2位置検出パターン候補で、かつ回転角度が同じ組合せを探す。これが見つかると、第3および第4位置検出パターン候補で面積がS/2となる候補を探し、さらに角度が同じ候補と、90度異なる候補の組合せを探す。
【0157】
ここで、1画面に複数の二次元コードが写し込まれている場合、位置検出パターン候補のあらゆる組合せを考えると、莫大な組合せになってしまう。本発明のように位置検出パターンを全て変えることにより組合せを大きく減らせ、さらに事前に得られた形状・面積・回転などの特徴を用いることで、簡単な比較演算で、さらなる組合せの絞込みが可能となっている。これについては後述する。
【0158】
ステップS107では、検討していない4種の位置検出パターンの組合せが残っているか判定し、残っていればステップS108に進み、残っていなければステップS112に進む。
【0159】
ステップS108では、組合せた位置検出パターンについて、同一の二次元コードの位置検出パターンであるとして情報の取り出しを行う。この処理については、
図19および
図20を参照して後述する。
【0160】
ステップS109では、情報取り出しに成功したかの結果に応じて、成功した場合にはステップS110に進み、失敗した場合には失敗した位置検出パターンの組合せを除外する処理を行った後、ステップS107に戻る。
【0161】
ステップS110では、取り出しに成功した情報のメッセージを保存する。
ステップS111では、データの取り出しに成功した二次元パターンに使われた候補を位置検出パターン候補から除外し、ステップS107に戻る。なお、データの取り出しに成功した二次元パターンの範囲に、使用していない位置検出パターン候補がある場合には、それも候補から除外する。
【0162】
ステップS107からS111を繰り返すことにより、写し込まれた二次元コードの解析が終了する。ここで、除外されていない位置検出パターン候補が残っている場合には、3種または2種の組合せについて、ステップS108の情報の取り出し処理を行うようにしてもよい。これについては後述する。
【0163】
ステップS112では、解析が終了したとのメッセージを呼出元に送信する。
ステップS113で、解析メインの処理を終了する。
【0164】
次に
図19および
図20を参照してステップS108の情報取り出し処理を説明する。
ステップS200で、情報取り出し処理を開始する。
ステップS201で、位置検出パターン4種の組合せの関係をチェックする。チェックは以下の(a)(b)の条件を満たすか判定することで行い、満たさない項目があれば、問題ありとして処理を終了する。
【0165】
まず、前記第1位検出パターンの中心座標をpt1、前記第2位検出パターンの中心座標をpt2、前記第3位検出パターンの中心座標をpt3、前記第4位検出パターンの中心座標をpt4とし、pt1、pt3、pt2、pt4、pt1と順番に各点を結ぶ。位置検出の4種の組合せが正しければ、長方形が得られる。
【0166】
(a)全ての頂点の角度が直角になる。
【0167】
(b)向かい合う辺の長さが1:1になる。
【0168】
ステップS202では、以上のチェック結果で問題があるか判定し、あればステップS203に進み、情報取り出しに失敗したことを示すフラグを立て、問題が無ければステップS204に進む。
【0169】
ステップS204では、いずれかの位置検出パターンから、1セルあたりのピクセル数を求める。第2位置検出パターンの場合、面積は4×4=16セル分の面積であり、1セルあたりのピクセル数=((面積)/16)
1/2の式で求まる。
【0170】
ステップS205では、隣接する位置検出パターンの中心座標の距離を縦横それぞれで計測し、ステップS204で求めた値で割ることにより、二次元コードの縦・横のセルサイズをそれぞれ求めることができる。得られた中心座標の横の距離をdピクセル、1セルあたりのピクセル数をpピクセル毎セルとすると、コードの横のセルサイズ=d/p+(4+6)が得られる。縦も同様の方法。
【0171】
ステップS205では、ステップS205で求めたセルサイズから二次元コードのバージョンを仮決定する。バージョンは8セルずつ段階的に大きくなる。コードの横のセルサイズ=横バージョン×8+19で求められるため、この式を変形させ横バージョン=(セルサイズ−19)/8で求められる。ここで得られた横バージョンの値が、横仮決定バージョンとなる。セルサイズが一致するバージョンがない場合は、最もセルサイズが近いバージョンを指定する。縦も同様の方法。仮とする理由は、斜めから撮影や、印字した紙の曲がりなどで、正確な値が得られない可能性を考慮しており、バージョン情報ブロックもあわせて利用することで、正しい値を得るようにしている。
【0172】
ステップS206では、位置検出パターンから、隣接する位置検出パターンの方向を走査することで、バージョン情報ブロック、フォーマット情報ブロックを構成するセルの撮影画像での座標を検出する。
【0173】
ステップS207では、バージョン情報ブロックの解析(縦横)を行う。これにより、縦横のバージョンが判明する。解析に失敗した場合、処理を終了する。前述のように、バージョン情報ブロックおよびフォーマット情報ブロックは、1ブロックで20通りの値を示す。バージョン情報ブロックは、縦・横それぞれブロックが2箇所配置されており、縦・横2箇所ずつのバージョン情報ブロックから読み取った値と、コード幅・高さと位置検出パターンのサイズから得られる仮決定バージョン情報、これら3つの値のうち2つ以上同じ値があれば、その値を採用する。
【0174】
ステップS208では、フォーマット情報ブロックの解析を行う。絵柄埋め込みの有無と、ブロックごとのデータ埋め込み方が決定する。解析に失敗した場合、処理を終了する。フォーマット情報ブロックは、3箇所は位置されており、2箇所以上同じであれば採用する。
【0175】
ステップS209では、位置補正パターンの座標を計算し、各セルの二次元コードの画像内での座標を高精度に求める。各セルの座標は既に導出できているが、位置補正パターンにより、レンズの歪みの影響を軽減することが可能となる。既に位置補正パターンの画像内での座標は判明しているので、その点が暗であることを確かめる。そして、この点を始点とし、右方向に走査を行い、暗と明の画素の境界を見つけ、S105同様の方法で周囲を走査し、外接する長方形の左上座標を(x1,y1)、右下座標を(x2,y2)とし、中心座標は((x1+x2)/2,(y1+y2)/2))が得られた。
【0176】
ステップS210では、フォーマット情報ブロックで絵柄埋め込みが有りであるか否かを判定し、絵柄ありと判定された場合、ステップS211に進み、絵柄なしと判定された場合ステップS212に進む。
【0177】
ステップS211では、絵柄埋込情報ブロックを参照することにより、絵柄埋め込みブロックの縦横それぞれのオフセット幅と高さ、および絵柄のブロックの幅と高さが判明する。
ステップS212では、実データブロックと、誤り訂正符号ブロックに関して、最寄りの、位置検出パターンの中心座標、または位置補正パターンの中心座標、いずれか4点を選び、射影変換より、撮影画像内でのセルの座標を求める。
【0178】
ステップS213では、実データブロックと、誤り訂正符号ブロックについて、フォーマット情報ブロックのデータ種別に従い、複数の明(1)と暗(0)のデータを検出する。
ステップS214では、実データブロックと、誤り訂正符号ブロックの個数から、誤り訂正符号ブロックの個数を計算する。これにより、実データと、誤り訂正符号が判明する。
【0179】
ステップS215では、誤り訂正符号を用いて、データ部と誤り訂正符号に関して、誤りの数と位置を検出する。誤りが0であれば、ステップS219に進む。そうでなければ、ステップS216に進む。
ステップS216では、訂正可能であるか否かを判定し、訂正可能であればステップS218に進み、訂正ができなければステップS217に進む。
【0180】
ステップS217では、情報取り出しに失敗したのでメッセージが得られず、処理を終了する。
ステップS218では、誤り訂正符号により、実データの誤り訂正を行う。
【0181】
ステップS219では、得られた実データは、ヘッダー(メッセージ種類(メッセージのエンコード)・メッセージサイズ)、メッセージ、終端フラグ、埋め草からなる。ヘッダーとメッセージを合わせたものをセグメントとする。終端フラグはメッセージを含まない、特殊なセグメントである。セグメントは複数の場合がある。終端フラグが見つかった際、その後は全て埋め草となる。データからメッセージを復元する。
ステップS220では、情報取り出し処理を終了する。
【0182】
射影変換では、4組以上の座標が必要である。上記の解析処理では、4個の位置検出パターンが検出できた場合の例を説明したが、汚れやぼけ・ぶれなどのために、3個または2個の位置検出パターンのみが検出されることも起こり得る。本発明では、そのような場合、検出できた3個または2個の位置検出パターン形状が異なるので、3個または2個の位置関係から検出できなかった位置検出パターンの種類が判明することから、位置を容易に予測することができる。例えば、第1実施形態の二次元コードで、3個の位置検出パターンが検出できた場合には、形状から対角に位置する2個の位置検出パターンが識別できるので、検出できなかった1個は、対角の2個の位置検出パターンを結ぶ直線に対して、もう1個の位置検出パターンのミラー対称の位置にあると推測できる。また、さらに、2個の位置検出パターンが検出できた場合には、形状から2個の位置関係が判明する。例えば、隣接する2個の位置検出パターンであれば、2個の位置検出パターンを結ぶ直線から垂直な方向にこの直線と同じ長さ離れた位置に残りの2個の位置検出パターンが存在すると予測される。また、対角の2個の位置検出パターンであれば、2個の位置検出パターンの辺の延長線上の交点に残りの2個の位置検出パターンが存在すると予測される。例えば、第3位置検出パターンと第4位置検出パターンが見つかった場合に、それぞれの短辺2本を延長することで交点が4点できるが、この交点は第1位置検出パターンの頂点となり、同様に長辺を延長してできる交点4点は、第2位置検出パターンとなる。第1位置検出パターンと第2位置検出パターンが見つかった場合も同様の方法で予測できる。もちろん、4個の位置検出パターンの場合に比べて、3個の場合は精度が低下し、2個の場合はさらに精度が低下する。いずれにしろ上記のようにして4個の位置検出パターンの位置を仮決定し、それを射影変換し、位置補正パターンの位置情報を取得する。そして、位置補正パターンを利用して座標を補正し、検出した位置検出パターンの座標と、位置補正パターンで補正した座標に基づいて4組の位置検出パターンの座標を最終決定する。
【0183】
位置検出パターンの個数は、汚れなどで検出できないものが発生することを考慮すると、個数が多い方が望ましいが、その分位置検出パターンの示す面積比率が増加してデータ効率が低下するだけでなく、位置検出パターンの検出処理量が増加するので、二次元コードの使用形態等に応じて適宜決定することが望ましい。
【0184】
次に、1画面に複数の二次元コードが写し込まれた場合について、本発明の二次元コードと
図1の二次元コードを使用した場合を比較する。例えば、1画面に6個の
図1の二次元コードが写し込まれた場合、同じ位置検出パターンが18個写し込まれる。前述のように、18個の位置検出パターンを検出し、それらのうち3個の組合せすべてについて同一の二次元コードのものであるかチェックするとする。この場合、組合せは
18C
3=816通りとなる。もし、1個の二次元コードに4個の同じ位置検出パターンがある場合には、画面の位置検出パターンの個数は24個になり、その組合せは、
24C
4=10624通りとなる。このように、組合せの数が膨大となりその分処理時間が増加する。
【0185】
これに対して、本発明のように位置検出パターンが異なる場合、3個の異なる位置検出パターンでは、
6C
1×
6C
1×
6C
1=216通りとなり、4個の異なる位置検出パターンでは、
6C
1×
6C
1×
6C
1×
6C
1=1296通りとなり、組合せが大幅に減る。
【0186】
さらに、上記の解析処理では、画面を間引きながら走査して位置検出パターンを検出したが、1個の位置検出パターン候補を発見できれば、その形状から他の位置検出パターンが存在する方向および距離範囲をある程度予測することが可能であり、走査をその領域に限定することで位置検出パターンの検出効率を改善することができる。例えば、第1および第2実施形態の二次元コードでは、長方形の第3および第4位置検出パターンの長辺の延長方向に第2位置検出パターンが存在し、長辺に垂直な短辺の延長方向に第1位置検出パターンが存在すると予測することが可能である。2個の位置検出パターンが検出された場合および3個の位置検出パターンが検出された場合には、残りの位置検出パターンが存在すると予測される領域は更に限定される。
【0187】
なお、上述した二次元コードは4個の異なる位置検出パターンが配置されているが、3個の異なる位置検出パターンと、1個以上の位置補正パターン、という構成でも精度の高いデータ抽出が可能である。この場合の位置検出パターンの配置は、4個の位置検出パターンの配置から、位置検出パターンが1個欠けた配置となる。
【0188】
解析する際は、3個の位置検出パターンを検出した後、位置検出パターンが欠けた部分の位置検出パターンの座標を、他の位置検出パターンの位置関係から補完する。ただし、斜め上から撮影する場合は、補完された座標に誤差があることが懸念される。そこで、まずは位置検出パターン3組の座標と、補完した座標1組の、計4組の座標から、欠けた位置検出パターンの最寄りの位置補正パターンの座標を、射影変換により取得する。
【0189】
そして、位置補正パターンを走査することにより位置補正パターンの座標補正を行う。次に、3個の位置検出パターンと、1個の位置補正パターンの、計4組の座標を用い、データの座標のマッピングを行う。位置補正パターンには、座標の誤差を軽減する効果があり、精度の高い座標の取得ができることから、位置検出パターンが3個と、1個以上の位置補正パターンからでも精度の高いデータの抽出が可能となる。
位置補正パターンが既に配置されている場合には、位置検出パターンが1つ減るため、コードの効率がよくなる。一方で、位置検出パターンの冗長性が減り、汚れなどに対する耐性が下がる。
【0190】
また、入力される撮影画像は1枚とは限らず、複数画像の入力から1枚の画像を合成し、解析を行うことも考えられる。例えば、動画のような時系列の連続した画像から1枚の画像を生成して解析する場合や、コードの画像が分割され、複数枚に分けて入力される場合などである。
さらに、動画で異なるコードを連続して表示し、これらコードを全て認識することで、はじめて一つのデータが得られるといった活用も考えられる。この場合、動画でなく、紙に複数のコードを配置してもよい。
このような場合でも本発明の二次元コードを適用することは可能である。
【0191】
以上、本発明の実施形態を説明したが、記載した実施形態は発明を説明するためのもので、当業者には、特許請求の範囲において各種の変形例があり得ることが容易に理解可能である。
(1)
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した二次元コードであって、
単独で画像から検出可能な3個以上の異なる位置検出パターンを備える二次元コード。
(2)
単独で画像から検出可能な4個以上の異なる前記位置検出パターンを備える1に記載の二次元コード。
(3)
前記二次元コードは1個以上の位置補正パターンを備える1または2記載の二次元コード。
(4)
3個以上の異なる前記位置検出パターンは、正方形、長方形の組み合わせからなる1から3いずれか1項記載の二次元コード。
(5)
前記二次元のマトリックスの前記位置検出パターン以外の領域は、複数の同じ大きさのブロックに分割され、
前記二次元のマトリックスは、隣接する前記ブロック間に、明または暗の分離スペースを有する1から4のいずれか1項記載の二次元コード。
(6)
前記位置検出パターンは、前記ブロックより大きな面積を有する5記載の二次元コード。
(7)
前記ブロックは、3×3のセルを有し、
前記分離スペースは、1セルの幅を有し、
前記位置検出パターンは、4セル以上の横幅と、4セル以上の縦幅と、を有する6記載の二次元コード。
(8)
3個以上の異なる前記位置検出パターンの内、少なくとも2つは、内部に識別スペースを設けた枠形状であり、前記識別スペースは、二次元コードを構成する最小セルの2倍以上のスペースである1から7いずれか1項記載の二次元コード。
(9)
単独で画像から検出可能な4個以上の異なる前記位置検出パターンを備え、
4個以上の異なる前記位置検出パターンの内、少なくとも3つは、内部に識別スペースを設けた枠形状であり、前記識別スペースは、二次元コードを構成する最小セルの2倍以上のスペースである1から7いずれか1項記載の二次元コード。
(10)
単独で画像から検出可能な4個以上の異なる前記位置検出パターンを備え、
4個以上の異なる前記位置検出パターンは、
正方形の第1位置検出パターンと、
前記第1位置検出パターンより小さな正方形の第2位置検出パターンと、
長方形の第3位置検出パターンおよび第4位置検出パターンと、からなる4個の位置検出パターンを含み、
前記第3位置検出パターンの長方形の長辺と前記第4位置検出パターンの長方形の長辺は、伸びる方向が異なり、
前記4個の位置検出パターンは、前記二次元のマトリックスの四隅に配置されている1から9いずれか1項記載の二次元コード。
(11)
前記第1位置検出パターンと前記第2位置検出パターンは、対角上に配置され、
前記第3位置検出パターンと前記第4位置検出パターンは、対角上に配置され、
前記第3位置検出パターンおよび前記第4位置検出パターンの長辺は、前記第1位置検出パターンの辺と同じ長さであり、
前記第3位置検出パターンおよび前記第4位置検出パターンの短辺は、前記第2位置検出パターンの辺と同じ長さであり、
前記第3位置検出パターンおよび前記第4位置検出パターンの短辺の一方は、前記第1位置検出パターンの辺の延長上に配置され、
前記第3位置検出パターンおよび前記第4位置検出パターンの長辺の一方は、前記第2位置検出パターンの辺の延長上に配置される10記載の二次元コード。
(12)
前記第1位置検出パターンおよび前記第2位置検出パターンは、それぞれ一重の正方形枠を有し、
前記第3位置検出パターンおよび前記第4位置検出パターンは、それぞれ一重の長方形枠を有する10または11項記載の二次元コード。
(13)
前記第1位置検出パターンは、一重の正方形枠と、前記正方形枠内に配置された正方形を有し、
前記第2位置検出パターンは、一重の正方形枠を有し、
前記第3位置検出パターンおよび前記第4位置検出パターンは、それぞれ一重の長方形枠を有する10から12のいずれか1項記載の二次元コード。
(14)
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した二次元コードであって、
対角上に配置された単独で画像から検出可能な2個の異なる位置検出パターンを備える二次元コード。
(15)
周囲が明セルに囲まれた2個の異なる前記位置検出パターンを備える14に記載の二次元コード。
(16)
2個の異なる前記位置検出パターンは、正方形、長方形の組み合わせからなる14または15記載の二次元コード。
(17)
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した二次元コードであって、
周囲が明セルに囲まれた、3個以上の異なる位置検出パターンを備える二次元コード。
(18)
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、単独で画像から検出可能な3個の異なる位置検出パターンを備える二次元コードを撮影した画像から、前記二次元コードを解析する二次元コードの解析方法であって、
3個の異なる前記位置検出パターンを識別した時は、識別された3個の異なる前記位置検出パターンに基づいて、位置検出パターンが設けられていない第4の位置を推測し、推測した第4の位置及び識別された3個の異なる前記位置検出パターンを含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換し、
3個の異なる前記位置検出パターンのうち対角線上に配置された2個の異なる前記位置検出パターンを識別した時は、識別された2個の前記位置検出パターンの位置関係に基づいて、残りの前記位置検出パターンの位置と、位置検出パターンが設けられていない第4の位置を推測し、推測した前記残りの位置検出パターンの位置及び推測した第4の位置と、識別された2個の異なる前記位置検出パターンの位置を含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換する二次元コードの解析方法。
(19)
前記二次元コードは、位置補正パターンを含み、
3個の異なる前記位置検出パターン及び前記位置補正パターンを識別した時は、識別された3個の異なる前記位置検出パターン及び前記位置補正パターンに基づいて、位置検出パターンが設けられていない第4の位置を推測し、推測した第4の位置及び識別された3個の異なる前記位置検出パターンを含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換し、
3個の異なる前記位置検出パターンのうち対角線上に配置された2個の異なる前記位置検出パターン及び前記位置補正パターンを識別した時は、識別された2個の前記位置検出パターン及び前記位置補正パターンに基づいて、残りの前記位置検出パターンの位置と、位置検出パターンが設けられていない第4の位置を推測し、推測した前記残りの位置検出パターンの位置及び推測した第4の位置と、識別された2個の異なる前記位置検出パターンの位置を含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換する18記載の二次元コードの解析方法。
(20)
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、単独で画像から検出可能な4個以上の異なる位置検出パターンを備える二次元コードを撮影した画像から、前記二次元コードを解析する二次元コードの解析方法であって、
4個以上の異なる前記位置検出パターンを識別した時は、少なくとも4個の前記位置検出パターンの位置関係に基づいて前記二次元コードの座標を変換し、
4個以上の異なる前記位置検出パターンのうち識別した前記位置検出パターンが2個または3個の時は、識別した2個または3個の前記位置検出パターンの位置関係から、残りの前記位置検出パターンの位置を推測し、推測した前記位置検出パターンの位置を含めて少なくとも4個の前記位置検出パターンの位置関係に基づいて前記二次元コードの座標を変換する二次元コードの解析方法。
(21)
前記二次元コードは、位置補正パターンを含み、
識別した前記位置補正パターンを利用して、識別した2個または3個の前記位置検出パターンの位置関係から、残りの前記位置検出パターンの位置を推測する20記載の二次元コードの解析方法。
(22)
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、単独で画像から検出可能な3個の異なる位置検出パターンを備える二次元コードを撮影した画像から、前記二次元コードを解析するようにコンピュータを制御するプログラムであって、
3個の異なる前記位置検出パターンを識別した時は、識別された3個の異なる前記位置検出パターンに基づいて、位置検出パターンが設けられていない第4の位置を推測し、推測した第4の位置及び識別された3個の異なる前記位置検出パターンを含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換し、
3個の異なる前記位置検出パターンのうち対角線上に配置された2個の異なる前記位置検出パターンを識別した時は、識別した2個の前記位置検出パターンの位置関係に基づいて、残りの前記位置検出パターンの位置と、位置検出パターンが設けられていない第4の位置を推測し、推測した前記残りの位置検出パターンの位置及び推測した第4の位置と、識別された2個の異なる前記位置検出パターンの位置を含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換するようにコンピュータを制御するプログラム。
(23)
前記二次元コードは、位置補正パターンを含み、
3個の異なる前記位置検出パターン及び前記位置補正パターンを識別した時は、識別された3個の異なる前記位置検出パターン及び前記位置補正パターンに基づいて、位置検出パターンが設けられていない第4の位置を推測し、推測した第4の位置及び識別された3個の異なる前記位置検出パターンを含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換し、
3個の異なる前記位置検出パターンのうち対角線上に配置された2個の異なる前記位置検出パターン及び前記位置補正パターンを識別した時は、識別した2個の前記位置検出パターン及び前記位置補正パターンに基づいて、残りの前記位置検出パターンの位置と、位置検出パターンが設けられていない第4の位置を推測し、推測した前記残りの位置検出パターンの位置及び推測した第4の位置と、識別された2個の異なる前記位置検出パターンの位置を含めた少なくとも4個の位置関係に基づいて前記二次元コードの座標を変換するようにコンピュータを制御する22記載のプログラム。
(24)
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、単独で画像から検出可能な4個以上の異なる位置検出パターンを備える二次元コードを撮影した画像から、前記二次元コードを解析するようにコンピュータを制御するプログラムであって、
4個以上の異なる前記位置検出パターンを識別した時は、少なくとも4個の前記位置検出パターンの位置関係に基づいて前記二次元コードの座標を変換し、
4個以上の異なる前記位置検出パターンのうち識別した前記位置検出パターンが2個または3個の時は、識別した2個または3個の前記位置検出パターンの位置関係から、残りの前記位置検出パターンの位置を推測し、推測した前記位置検出パターンの位置を含めて少なくとも4個の前記位置検出パターンの位置関係に基づいて前記二次元コードの座標を変換するようにコンピュータを制御するプログラム。
(25)
前記二次元コードは、位置補正パターンを含み、
識別された前記位置補正パターンを利用して、識別した2個または3個の前記位置検出パターンの位置関係から、残りの前記位置検出パターンの位置を推測するようにコンピュータを制御する24記載のプログラム。
(26)
1記載の二次元コードの作成システムであって、
単独で画像から検出可能な3個以上の異なる前記位置検出パターンを、二次元のマトリックスの所定位置に配置する位置検出パターン配置手段と、
前記二次元のマトリックスの3個以上の異なる前記位置検出パターンを配置する領域以外の領域に、前記二次元コードの解析に必要なベース情報を記録したベース情報領域を配置するベース情報配置手段と、
メッセージの記録データを、前記二次元のマトリックスの3個以上の異なる前記位置検出パターンおよび前記ベース情報領域を除いた領域に、順次配置するメッセージデータ配置手段と、を備える二次元コードの作成システム。
(27)
前記位置検出パターン配置手段は、単独で画像から検出可能な4個以上の異なる前記位置検出パターンを、前記二次元のマトリックスの所定位置に配置する26に記載の二次元コードの作成システム。