(57)【特許請求の範囲】
【請求項１】
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、位置検出パターンを備え、任意の絵柄を配置可能な二次元コードであって、
絵柄領域の位置を示す絵柄埋込情報を有することを特徴とする二次元コード。
【請求項２】
前記絵柄埋込情報は、任意の絵柄を配置可能な絵柄領域の有無および前記絵柄領域有りの場合に前記絵柄領域の位置を示す絵柄埋込情報であることを特徴とする請求項１記載の二次元コード。
【請求項３】
前記二次元のマトリックスの前記位置検出パターン以外の領域は、複数のブロックに分割され、
前記絵柄埋込情報領域は、前記絵柄領域の有無を示すフォーマット情報ブロックと、前記絵柄領域の位置をブロック単位で示す絵柄埋込情報ブロックと、を備える請求項２記載の二次元コード。
【請求項４】
前記二次元のマトリックスの前記位置検出パターン以外の領域は、複数のブロックに分割され、
前記絵柄領域は、前記セルより高分解能の画像を有する請求項１から３のいずれか１項記載の二次元コード。
【請求項５】
請求項３記載の二次元コードの作成システムであって、
二次元コードに絵柄を配置するか判定する判定手段と、
絵柄を配置するとの判定結果の場合に、前記フォーマット情報ブロックに絵柄ありの情報を付加し、さらに前記絵柄埋込情報ブロックに前記絵柄領域の位置をブロック単位で示す情報を付加する絵柄埋込情報付加手段と、を備える二次元コードの作成システム。
【請求項６】
請求項３記載の二次元コードを解析するようにコンピュータを制御する解析プログラムであって、
検出した位置検出パターンに基づいて前記フォーマット情報ブロックの位置を検出して、前記絵柄領域の有無を判定し、
前記絵柄領域の有りの場合に、前記絵柄埋込情報ブロックの位置を検出して、前記絵柄領域のブロック位置を検出し、
前記絵柄領域のブロックを除く前記二次元コードのデータ領域からメッセージデータを取り出すようにコンピュータを制御する解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、二次元コードに関する。
【背景技術】
【０００２】
二次元コードは、一次元コードと比較して、狭い面積に多くの情報を持つことができ、物品管理や、携帯電話を用いたウェブ誘導など、様々な用途で広く活用されている。
一般の二次元コードは、二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置しており、コード内の座標を再現するための位置検出パターンと、データ部と、を有する。データ部は、さらにバージョン情報、フォーマット情報、位置補正パターンおよび誤り訂正符号などと、実データ部と、を有し、実データ部にコード化したメッセージデータを記録する。したがって、二次元コードは、セル化したデータのみが記録されている。【０００３】
二次元コードに任意の絵柄を入れたいというニーズがある。例えば、雑誌やポスターなど、デザイン性が求められるメディアに二次元コードを印字する場合や、物品管理に行う際に、オペレーターがリーダーを使わなくても判別できるようにする場合などである。【０００４】
特許文献１は、広く使用されている一般の二次元コードを記載している。しかし、特許文献１は、絵柄の埋め込みについては何ら記載していない。【０００５】
特許文献２は、終端パターンの後の埋め草部分に、デザインのコードを置くことで、明暗セルの埋込画像を形成する手法を記載している。しかし、リーダーで読み取った画像を解析する時に明暗セルの埋込画像を無意味な文字列として読み込んでしまうことや、埋込画像の位置が二次元コードの中央に限定される、等の問題がある。【０００６】
特許文献３は、埋め草の符号化パターンが配置された不使用データ領域は、符号化パターンのデータが空であることを示しているに過ぎないことを利用し、不使用データ領域の黒モジュールと白モジュールの配置が、デザインを構成するように二次元コードを生成する技術が開示されている。しかし、デザイン部分が二次元コードの中央に限定されることや、デザインが明暗に限定されるなどデザインに制約が多いという問題がある。【０００７】
特許文献４は、ＲＳ符号の誤り訂正をできる限り大きくして、絵柄をシンボルに重ね合わせてもデータを読み取れるようにする手法を記載している。しかし、この手法では、ある程度の大きさの絵柄を重ねるためにはＲＳ符号の誤り訂正が大きくなり、その分格納できるデータ量が小さくなることや、誤り訂正の一部を既に使用しているため、二次元コードの傷つき、読み取り時のボケに弱くなるといった問題がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平７−２５４０３７号公報
【特許文献２】特開２００７−２４１３２８号公報
【特許文献３】特開２００９−１６３７２０号公報
【特許文献４】特開２００９−０７５８７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記のように、セルからなるデザインデータを付加した二次元コードが知られているが、本来データが入る部分にデザインパターンを入力するため、位置補正パターン等コードの構成上必要なデータがセルの形で設けられる上、付加できるデザインが制限されるという問題があった。【００１０】
本発明は、任意の画像を付加できるようにして、デザイン性を向上した二次元コードの実現を目的とする。
【課題を解決するための手段】
【００１１】
上記目的を実現するため、本発明の二次元コードは、二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置し、位置検出パターンを備えた二次元コードであって、任意の絵柄を配置可能な絵柄領域の有無および絵柄領域有りの場合に絵柄領域の位置を示す絵柄埋込情報を備えることを特徴とする。【００１２】
二次元のマトリックスの位置検出パターン以外の領域は、複数のブロックに分割され、絵柄埋込情報領域は、絵柄領域の有無を示すフォーマット情報ブロックと、絵柄領域の位置をブロック単位で示す絵柄埋込情報ブロックと、を有することが望ましい。【００１３】
本発明によれば、絵柄埋込情報により、絵柄領域の有無および絵柄領域の位置を判定できるので、その領域は解析（デコード）しないようにすることが可能であり、任意の画像を配置しても、解析処理に悪影響を及ぼすことはない。【００１４】
任意の絵柄は、明暗のセルからなるコード画像に限定されず、コード画像（セル画像）より高分解能の画像であっても、カラー画像であってもよい。二次元コードは、プリンタなどで印刷されることが多いが、近年、低価格の高解像度プリンタが普及してきており、コード画像より高分解能の画像の印刷が容易に行えるため、印刷の面からは、絵柄を明暗のセルからなるコード画像に限定する制約は無い。しかし、絵柄は任意のため、絵柄の内容によっては解析に悪影響を与える可能性があるが、二次元コードは、基本的には確実な認識が求められるため、絵柄の内容により認識精度に影響することは好ましくなく、絵柄埋込情報領域のデータにより絵柄領域を明確に示して解析の対象範囲から除外する。これにより、絵柄が二次元コードの解析に影響しないようにできる。【００１５】
さらに、二次元コードを印刷機により印刷する場合もあり、この場合にはより精密な絵柄を設けることが可能である。さらに、あらかじめ絵柄領域に対応する位置に絵柄が印刷された用紙に、プリンタなどで二次元コードを印刷するようにしてもよい。さらに、絵柄はカラー印刷されたものでもよい。さらに、二次元コードは、印刷されたものに限定されず、ディスプレイに表示されるものでもよい。【００１６】
以上のように、任意の絵柄を埋め込み可能とすることで、二次元コードのデザイン性が向上し、第三者へのアピール力が向上し、二次元コードの使用範囲を広げることができる。特に、カラー画像の絵柄を埋め込めば、これらの効果が一層向上する。また、二次元コードはユーザーが直接理解できるものではないが、絵柄としてユーザーが理解できる情報を付加することが可能になる。【００１７】
フォーマット情報ブロックと絵柄埋込情報ブロックとを有する本発明の二次元コードを作成する作成システムは、二次元コードに絵柄を配置するか判定する判定手段と、絵柄を配置するとの判定結果の場合に、フォーマット情報ブロックに絵柄ありの情報を付加し、さらに絵柄埋込情報ブロックに絵柄領域の位置をブロック単位で示す情報を付加する絵柄埋込情報付加手段と、を備える。【００１８】
フォーマット情報ブロックと絵柄埋込情報ブロックとを有する本発明の二次元コードを解析するようにコンピュータを制御する解析プログラムは、検出した位置検出パターンに基づいてフォーマット情報ブロックの位置を検出して、絵柄領域の有無を判定し、絵柄領域の有りの場合に、絵柄埋込情報ブロックの位置を検出して、絵柄領域のブロック位置を検出し、絵柄領域のブロックを除く二次元コードのデータ領域からメッセージデータを取り出すようにコンピュータを制御する。【００１９】
これにより、絵柄領域を二次元コードの生成および解析処理から分離して自由に取り扱うことが可能になるので、任意の絵柄を扱える。
【発明の効果】
【００２０】
本発明の二次元コードでは、コード化されたデータの解析に影響しない形で、任意の絵柄を付加できるので、デザイン性・認識の容易性が向上する。
【図面の簡単な説明】
【００２１】
【図１】図１は、特許文献１に記載された二次元コードを示す図である。
【図２】図２は、第１実施形態の二次元コードを示す図である。
【図３】図３は、第１実施形態の二次元コードにおける複数のブロックの配置を示す図である。
【図４】図４は、分離スペースを有する二次元コードと、分離スペースを有さない二次元コードにおいて、データに応じてセルを明または暗にした場合のパターンの例を示す図である。
【図５】図５は、第１実施形態におけるデータブロックのデータ種別を説明する図である。
【図６】図６は、２０パターン表現のデータ種別を説明する図である。
【図７】図７は、第１実施形態の二次元コードにしたがって作成した二次元コードの例を示す図である。
【図８】図８は、第１実施形態の二次元コードにしたがって作成した二次元コードの別の例を示す図である。
【図９】図９は、第２実施形態の二次元コードを示す図である。
【図１０】図１０は、第２実施形態の二次元コードにしたがって作成した二次元コードの例を示す図である。
【図１１】図１１は、第２実施形態の二次元コードの位置検出パターンを、サイズおよび形状の異なる二次元パターンに適用した変形例を示す図である。
【図１２】図１２は、変形例の４個の位置検出パターンの例を示す図である。
【図１３】図１３は、依頼に基づいて二次元コードを作成して提供する作成システムのハードウェア構成を示す図である。
【図１４】図１４は、ユーザーが、ユーザーハードウェアを介してシステムハードウェアにアクセスし、所望の二次元コードを作成するエンコード処理の手順を示すフローチャートである。
【図１５】図１５は、ユーザーが、ユーザーハードウェアを介してシステムハードウェアにアクセスし、所望の二次元コードを作成するエンコード処理の手順を示すフローチャートである。
【図１６】図１６は、ユーザーが、ユーザーハードウェアを介してシステムハードウェアにアクセスし、所望の二次元コードを作成するエンコード処理の手順を示すフローチャートである。
【図１７】図１７は、第１実施形態の二次元コードを読み取り、二次元コードを解析する二次元コード解析装置のハードウェア構成を示す図である。
【図１８】図１８は、ユーザーが撮影した二次元コードを解析するデコード処理の手順を示すフローチャートである。
【図１９】図１９は、ユーザーが撮影した二次元コードを解析するデコード処理の手順を示すフローチャートである。
【図２０】図２０は、ユーザーが撮影した二次元コードを解析するデコード処理の手順を示すフローチャートである。
【図２１】図２１は、位置検出パターン候補の形状チェックを説明する図である。
【発明を実施するための形態】
【００２２】
本発明の実施形態を説明する前に、現在広く使用されている一般的な二次元コードについて説明する。
図１は、特許文献１に記載された二次元コードを示す図である。
【００２３】
図１に示すように、二次元コード１は、３つの隅に配置された３個の位置検出パターン（位置決め用シンボル）２と、データ領域３と、を有する。データ領域３は、二次元コード１の領域から、３個の位置検出パターン２およびその周囲のスペーサ部分を除いた部分である。各位置検出パターン２は、暗部分である正方形の枠２ａおよび正方形の枠２ａ内に配置された正方形２ｃと、枠２ａと正方形２ｃの間の明部分である正方形の枠２ｂと、を有する。撮影された位置検出パターン２は、走査線が中心を通過する時、走査線がいかなる方向であっても、その長さ比率（周波数成分比）は暗：明：暗：明：暗＝１：１：３：１：１となる。そのため、二次元コードをいかなる方向に回転した状態で撮影しても、一定方向の走査処理のみで位置検出パターン２の持つ特定周波数成分比を検出することができる。したがって、位置検出パターン２の中心位置を容易に検出することができる。
【００２４】
データ領域３は、マトリックス状に密に配置されたビットを有し、ビットマトリックスは、データ領域内のドットの位置補正のための位置合わせパターン（タイミングセル）４に加えて、二次元コードの形式情報およびその誤り訂正信号と、型番情報およびその誤り訂正信号と、データ部分と、に分けられる。位置合わせパターン４、二次元コードの形式情報およびその誤り訂正信号、および型番情報およびその誤り訂正信号は、コード領域３のビットマトリックス上の所定の位置に配置され、残りの部分がコード化したデータを記録するデータ部で、必要なデータを記録して残った部分が残余ビットである。記録するデータビットと残余ビットは、データビットの最後のエンドパターンで区別される。残余ビットは、埋め草と称され、明（“１”）のビット列であるが、記録時には所定の処理を施されて明暗ビット列に変換されるのが一般的である。
【００２５】
位置合わせパターン４は、データ領域内のドットの位置補正のための明暗のビット（ドット）列であり、図１に示すように、多数個が配置される。位置合わせパターン４は、二次元パターン全体の基準位置を検出する位置検出パターン２とは別のものである。
特許文献３および４は、埋め草であるデータ領域３のビットを利用して、ビット画像を設けることを記載している。
【００２６】
以下、本発明の実施形態を説明する。
図２は、第１実施形態の二次元コードを示す図である。
第１実施形態の二次元コードは、３５×３５セルの大きさを有し、９×９のブロックに分割され、隣接するブロック間に１セルの明の分離スペース２３を有する。したがって、分離スペースは、８×８列の１セル幅のブロック間隔の格子状パターンになる。右下の３×３ブロックおよび３×３分離スペースの部分には第１位置検出パターン１２Ａが、左上の２×２ブロックおよび２×２分離スペースの部分には第２位置検出パターン１２Ｄが、右上の３（横）×２（縦）ブロックおよび３×２分離スペースの部分には第３位置検出パターン１２Ｂが、左下の２（横）×３（縦）ブロックおよび２×３分離スペースの部分には第４位置検出パターン１２Ｃが、それぞれ設けられている。したがって、二次元コードの第１から第４位置検出パターン以外のブロックに、第１から第４位置検出パターン以上のパターンが出現することはない。
【００２７】
二次元コードのコード部分の最小単位はセルである。二次元コードは、通常正方形または長方形の形状をとる。他の形状も可能だが、二次元コードの多くは四角形であり、第１実施形態の二次元コードも正方形であるが、これに限定されるものではなく、長方形でも他の形状でもよい。
【００２８】
一般に、二次元コードは明暗のセルでデータを表し、第１実施形態の二次元コードもコード部は明暗のセルでデータを表す。
さらに、第１実施形態の二次元コードは、３５×３５セルの正方形であるが、これよりサイズの大きなコードや、長方形のような縦横の大きさを変えた形状にすることも可能である。３５×３５セルの正方形の二次元コードを、これをバージョン２×２と呼ぶ。ここで、最小のバージョンは１×１であり、この時のセルサイズは２７×２７となる。絵柄の埋込は、縦横のバージョンが共に２以上の場合に可能とする。バージョンが１×１の際に絵柄を埋め込まない理由は、データ量が少ないにも関わらず、絵柄を埋め込むと、さらにデータ量が少なくなり、認識してもほとんどデータが得られないことになるため、上記のような制限を加えた。第１実施形態の二次元コードは、縦方向および横方向にそれぞれ伸張できる。横バージョンが２、縦バージョンが３の場合、バージョン２×３と表記する。バージョンが１上がるごとに、セルサイズが８大きくなり、ブロック数が２大きくなる。よって、バージョン３×４では、セルサイズは４３×５１になる。バージョンは１から２０まで選択可能であるが、これに限定されるものではない。
【００２９】
第１位置検出パターン１２Ａは、暗セルの部分が、８×８セルの１セル幅の正方形枠と、正方形枠の中心の２×２の正方形と、を有する。第２位置検出パターン１２Ｄは、暗セルの部分が、４×４セルの１セル幅の正方形枠を有する。第３位置検出パターン１２Ｂは、暗セルの部分が、８×４セルの１セル幅の長方形枠を有する、横長の長方形枠である。第４位置検出パターン１２Ｃは、暗セルの部分が、４×８セルの１セル幅の長方形枠を有する、縦長の長方形枠である。
【００３０】
第１実施形態では、正方形の二次元コードの４隅に４個の異なる位置検出パターンを配置する。なお、位置検出パターンが異なるというのは、形状、大きさ、二次元コード上での配置方向が異なる場合であり、線幅の比率が異なる場合も含まれる。ただし、撮影条件等の影響を受けるため、色の違いは対象とせず、明暗の二値画像を対象とする。
【００３１】
第１実施形態では、位置検出パターンは、正方形または長方形の各頂点付近に配置する。これは、１箇所に配置する場合より、できるだけ離れて配置する方が汚れの影響を分散できるためである。ただし、位置検出パターンの配置位置は、４隅に限定されるものではない。第１実施形態のように、位置検出パターンとして、正方形だけでなく、長方形のものを用いることで、形状・傾き・大きさの区別が容易にできるため、高速に認識できる。また中抜きした長方形は、他の写り込みと区別するのが容易であり、データの無駄が少ない。
【００３２】
４個の位置検出パターンを配置する理由は、解析において精度高くデータの座標のマッピングを計算するのに用いる二次元の射影変換では、コードのセルと、そのセルに対応する撮影画像の座標を計算するために、４組の座標の組をパラメータとして与える必要がある。位置検出パターン数が２個または３個しかない場合でも、座標を補間することで、４点を算出した上で射影変換を行うことは可能であるが、ななめからの撮影や、歪み、ぼけなどで正確な座標が得にくく、データ抽出の精度に大きく影響するため、第１実施形態では４個の位置検出パターンを配置している。
また、位置検出パターンが異なる理由は、見つからない位置検出パターンがあった場合でも、見つからなかった位置検出パターンが確実に特定でき、見つからなかった位置検出パターンの座標の予測が可能になり、位置検出パターンの訂正が可能になる。すべて同じ位置検出パターンを用いた場合、見つからなかった位置検出パターンの特定は、すべて異なる位置検出パターンを用いた場合ほど容易ではなく、位置検出パターンの訂正が困難になる。
二次元コードの４個の位置検出パターン以外の５６ブロックは、データ部であり、実データブロック、誤り訂正符号ブロック、バージョン情報ブロック、フォーマット情報ブロック、および絵柄埋込情報ブロックと、を含む。
【００３３】
上記のように、データ部は３×３セルを１ブロックとし、ブロック単位でデータを埋め込む。データ部は、バージョン情報ブロック１５および１６と、フォーマット情報ブロック１７と、絵柄埋込情報ブロック１８Ａ、１８Ｂ、１９Ａおよび１９Ｂと、を有し、残りのブロックが実データブロック２２である。なお、後述するように、第１実施形態では、実データブロック２２の一部を、誤り訂正符号と、位置補正パターンとして利用する。
【００３４】
したがって、位置検出パターン、バージョン情報ブロック、フォーマット情報ブロック、絵柄埋込情報ブロック、位置補正パターンを設けるブロック、さらに誤り訂正符号ブロックを除いた、残りのブロック２２が、実データブロックである。もし、絵柄の埋め込みが行われる場合には、絵柄埋込情報ブロックが指示する絵柄埋め込みブロックも実データブロックから除く。実データは、実データブロックに属するブロックについて、左上から右に順にデータを敷き詰め、敷き詰め終わったら１ブロック下の左から敷き詰めるという具合に順に記録する。
【００３５】
ブロックは、３×３セルを有し、各セルは明と暗の１ビットを表すので、１ブロックは最大９ビットの情報を持つ（９ビット表現）が、ここでは画像のぼけ・ぶれに対する耐性を高めるため、１ブロック当たりのデータ量を９ビットのデータ量より小さく設定できるようにしている。なお、第１実施形態では、ブロックを３×３セルのサイズとしたが、ブロックサイズはこれに限定されるものではなく、最小である１×１セルのサイズや、縦と横のセルサイズが異なるなどのブロックサイズも可能である。
【００３６】
バージョン情報ブロックは、二次元コードのサイズに関する情報を記録し、縦バージョン情報ブロック１５と、横バージョン情報ブロック１６の２種類存在し、それぞれ対応するバージョン情報が記録される。縦バージョン情報ブロック１５および横バージョン情報ブロック１６は、それぞれ同じ情報を記憶した２個のブロックを離れた２箇所に配置することにより、汚れ等で欠損するリスクを分散させる。バージョン情報として、バージョン数（縦横各１から２０）までの数値を表すブロックを配置する。
【００３７】
フォーマット情報ブロック１７は、絵柄埋込フラグ（１ビット）と、データブロック種別データ（２ビット）からなるフォーマット情報を記録し、同じ情報を記憶した３個のブロックを離れた３箇所に配置する。絵柄埋込フラグは、絵柄埋込の有無、すなわち絵柄埋込領域が設けられているか否かを示す。絵柄埋込が有の場合、絵柄埋込情報ブロックが設けられる。データブロック種別データは、データブロックの種別を示し、データブロックの種別とは、１ブロック当たりのデータ容量であり、６、７、９ビット／ブロックのいずれかを選択する。データ量は９ビット＞７ビット＞６ビット表現の順に少なくなるが、データの読み取りのしやすさは、６ビット＞７ビット＞９ビットの順であり、ぼけやぶれの発生具合と、データ量を勘案して、選択する。これについては後述する。
【００３８】
埋め込まれる絵柄は、ブロック単位で埋め込まれ、隣接した複数のブロックが絵柄埋込領域である場合には、その間の分離スペースも絵柄埋込領域に含まれる。埋め込まれる絵柄の外形は四角形であり、絵柄の画像は、セル単位の２値画像に限定されず、どのようなものでもよい。また、絵柄を埋め込む四角形のブロックは、複数個あってもよい。例えば、絵柄は、セルより高分解能の多値画像でも、カラー画像でもよく、もちろんセル単位の２値画像でもよい。第１実施形態では、絵柄埋め込みの制限として、コード上側ブロック２行、左側ブロック２列、下側ブロック３行、右ブロック３列には絵柄を埋め込まないものとする。この範囲は二次元コードの仕様により、絵柄の埋め込み範囲外の部分に画像の情報を持つ絵柄埋込情報ブロックを配置する。
【００３９】
絵柄埋込情報ブロックは、絵柄を埋め込む領域のサイズおよびブロック位置に関する情報を縦横それぞれで記録し、縦埋込情報ブロック１８Ａおよび１８Ｂと、横埋込情報ブロック１９Ａおよび１９Ｂの２種類存在し、それぞれ対応するバージョン情報が記録される。縦埋込情報ブロック１８Ａおよび１８Ｂは、絵柄埋め込み高さ（３ビットまたは６ビット）および絵柄埋込オフセット高さ（３ビットまたは６ビット）を記録する。横埋込情報ブロック１９Ａおよび１９Ｂは、絵柄埋込幅（３ビットまたは６ビット）および絵柄埋込オフセット幅（３ビットまたは６ビット）を指定する。なお、３ビットまたは６ビットにするかは、後述するようにバージョン情報に関係し、バージョンが２〜４の場合には３ビット、バージョンが５〜２０の場合には６ビット必要であり、バージョン２〜４の場合には、縦埋込情報ブロック１８Ｂおよび横埋込情報ブロック１９Ｂは不要である。
【００４０】
絵柄埋込情報ブロックは、フォーマット情報ブロックで絵柄埋込フラグが立っていた場合のみ存在する。第１実施形態は、埋込絵柄の個数が１つのみの場合を想定しており、複数の埋込絵柄を複数領域に埋め込むことを想定した場合には、フォーマット情報ブロックで絵柄埋込フラグのビット数を増加させて絵柄埋込領域数を示すようにすると共に、上記の絵柄埋込情報ブロックを絵柄枚数分設ける。絵柄のサイズ・オフセットは、ブロック単位で指定する。ブロックの座標を左上隅のブロックを原点として（ｎ，ｍ）と表現し、横ブロック数をｂｌＷ個、縦ブロック数をｂｌＨ個とする。第１実施形態では、絵柄の埋め込み領域は、左上（２，２）、右下（(ｂｌＷ−４，ｂｌＨ−４)からなる矩形の領域に限定される。絵柄の最大横ブロック数はｂｌＷ−５個、最大縦ブロック数はｂｌＨ−５個となる。
【００４１】
絵柄の位置は、始点（左上）となるブロック座標と、ブロックサイズの情報を絵柄埋込情報ブロックとしてコード内に埋め込むことで、コード解析時にどの位置に絵柄が入っているかを認識できるようにする。バージョン情報ブロックと同様に、横と縦で別々に扱う。横はｂｌＷ−５が８未満の時（横バージョン２〜４）と、それ以外の場合（横バージョン５〜２０）でデータ量を分け、縦も同様にする。ｂｌＷと、ｂｌＨの値は、横と縦のバージョンを解析することで求められる。
【００４２】
ｂｌＷが１３未満の時、横のブロックサイズは最小１、最大８ブロックであり、８通りは３ビットで表すことができ、同様に横のオフセットブロック数は２から８まで７通りあり、これも３ビットで表せるため、合計が６ビットとなる。そのため、ブロックを６ビット表現し、これらは１ブロックで表現可能である。縦も同様にする。ｂｌＷが１３以上の時、横のブロックサイズは６ビットで表し、同様に横のオフセットブロック数も６ビットで表す。よって、２ブロックを使って表現することになる。縦も同様にする。
【００４３】
横埋込情報ブロック１９Ａおよび１９Ｂは、左上および右下の横バージョン情報ブロックの外側（上側及び下側）に、縦埋込情報ブロック１８Ａおよび１８Ｂは、左下および右下の縦バージョン情報ブロックの外側（左側および右側）に配置する。
もし絵柄を埋め込まない場合、すなわちフォーマット情報ブロックの絵柄埋込フラグが「無し」を示す場合、絵柄埋込情報ブロックおよび絵柄埋め込みの領域が不要になるため、コードが効率的になる。
【００４４】
位置補正パターンは、実データブロック、誤り訂正符号ブロック、絵柄が埋め込まれている場合には絵柄埋込情報ブロックの座標補正に用いる目的のパターンである。二次元コードにおける概ねの座標は位置検出パターンから取得できるが、紙のよれ、曲がり、レンズの歪み、位置検出パターン取得時のズレによりデータ部の座標に誤差がでるので、これを修正する目的で設ける。位置補正パターンは、位置検出パターンと異なり、他のノイズと区別する必要がなく、位置検出パターンが算出できれば位置補正パターンの位置は容易に判明する。したがって、位置補正パターンは細かな座標補正がしやすい形状が望ましい。
【００４５】
第１実施形態では、位置補正パターンは、決められたセルの組合せからなるブロック（位置補正ブロック）を実データの代わりに等間隔に配置する。ブロックの中心１セルを暗、その周囲を明にしたブロックを、ブロック座標（７ｎ，７ｍ）（ｎ，ｍは０以上の整数)がデータ部であれば配置する。ただし、その座標に、位置検出ブロック、バージョン情報ブロック、フォーマット情報ブロック、絵柄埋込情報ブロックおよび絵柄が存在すべき時は、配置しない。ここでは、ブロック座標は、ブロックの左上の座標基準座標を（０，０）とし、右隣のブロックを（１，０）と表現している。なお、位置補正パターンを設けるブロックは、上記に限られない。
【００４６】
実データは、メッセージと、メッセージを修飾するヘッダー（メッセージ種類（メッセージのエンコード）・メッセージサイズ）を合わせたセグメントを、メッセージ数だけ並べる。また特殊なセグメントとして、メッセージを含まない、終端フラグだけが入ったセグメントを用意し、実データの容量が余った場合に終端フラグのセグメントを配置し、その後に埋め草を配置する。実データはデータブロック種別データが示す１ブロック当たりのデータ容量に従い、ブロック単位に分割する。同様に誤り訂正符号も、ブロック単位に分割する。
誤り訂正符号にリードソロモン符号を使った場合、誤り訂正はワード単位で行われるため、１ワードを１ブロックとすることが望ましい。１ワードが複数のブロックにまたがる場合、１つのブロックに汚れが発生した場合でも、そのブロックが関係する全てのワードが誤り訂正の対象となり、訂正の効率が悪くなる。訂正原因となる汚れや、スポットライトによる色とびは、１箇所に集中することが多いが、ブロックにすることにより同時に訂正対象となるデータを１箇所にまとめる効果があり、効率的な訂正を可能にし、コードを認識させる可能性を高める。
【００４７】
上記のように、第１実施形態の二次元コードは、ブロック間に設けられた１セル幅の分離スペース２３を有する。したがって、位置検出パターンおよびブロックは、すべて周囲を明のセルで囲まれている。
図３は、第１実施形態の二次元コードにおける複数のブロックの配置を示す図である。各ブロックは３×３のセルを有し、周囲が１セル幅の分離スペース２３で隔てられている。
【００４８】
図４は、分離スペース２３を有する二次元コードと、分離スペース２３を有さない二次元コードにおいて、データに応じてセルを明または暗にした場合のパターンの例を示す図である。図４の（Ａ）は、分離スペース２３を有する二次元コードで、４個のブロックの４個の３×３セルを、中央および４隅が暗、それ以外を明として場合のパターン３つと、その３つのパターンと明暗が反転したパターン１つからなる二次元コードで、図４（Ｂ）は、（Ａ）に示した二次元コードの分離スペース２３がない場合を示したものである。このように分離スペース２３がない場合は、ブロック間の境目が不明確になり、暗セルに囲まれた明セルは黒潰れしてしまう可能性がある。
【００４９】
分離スペース２３を有さない二次元コードに比べて、分離スペース２３を有する二次元コードの方が大きくなり、データ効率は低下するが、撮影した画像にぼけ・ぶれがある場合でも、隣接するブロックのパターンの影響を受けにくくなるので、各セルの明暗判定の精度が向上する。実際に、分離スペース２３を有する二次元コードと分離スペース２３を有さない二次元コードの画像を二値化処理した場合、分離スペース２３を有さない二次元コードは黒潰れが発生しやすい。撮影した画像にぼけ・ぶれがある場合、各セルは周囲のセルの色に影響を受ける。図４の（Ｂ）は周囲のセルが明暗どちらであるかはほぼランダムであり、周囲のセルが異なる色が大きければ大きな影響があるが、そうでなければ影響は少なく、一様でないため、色の判定は困難となる。図３のようにブロックを構成するセルをa〜iとして説明すると、図４（Ａ）は分離スペース２３があることからａｃｇｉは周囲８箇所中５箇所が分離スペースと接し、ｂｄｆｈは周囲８箇所中３箇所が分離スペースと接するため、ｅ以外のセルは図４の（Ｂ）より周囲の影響を受けにくくなったといえる。さらに後述する６ビット表現にすることで、影響を受けやすいｅのセルを評価しなくなり、ａｃｇｉは周囲８箇所中６箇所が明セルと接し、ｂｄｆｈは周囲８箇所中４箇所が明セルと接するため、よりぼけ・ぶれの影響を受けにくくなったといえる。
【００５０】
このように、分離スペース２３を設けることで、セルがぼけ・ぶれにより正しく認識できなくなるリスクを低減することが可能となる。
【００５１】
なお、位置検出パターンは、最もサイズの小さい第２位置検出パターン１２Ｄでも、４×４セルの正方形であり、３×３ブロックが分離スペース２３で分離されているため、データブロック中に位置検出パターンと同じパターンが出現することはない。したがって、分離スペース２３を設けることにより、位置検出パターンの検出処理も容易になる。
【００５２】
第１実施形態では、１ブロック当たりのデータ容量を、データ劣化の耐性に応じた種別に分けて選択可能にしている。
【００５３】
図５は、第１実施形態における１ブロックのデータ種別を説明する図である。
図５の（Ａ）は、１ブロックの３×３のセルのそれぞれａ〜ｉのビットを割り当て、９ビット表現可能にしたデータ種別を示す。この場合、１ブロックは、９ビットの情報量を有し、２９＝０〜５１１までの値を表現できる。
図５の（Ａ）の解析を行う際は、入力された撮影画像から作成された二値画像に対して、各セルが対応する画像内の座標を計算し、その座標の画素の値が明（“１”）と暗（“０”）のいずれかを判断し、ブロックあたり９ビットとなる値にする。撮影画像を二値画像に変換する方法は後述する。
【００５４】
図５の（Ｂ）は、１ブロックの３×３のセルの中心を“１”（明）に固定し、周囲の８個のセルｊ１〜ｊ８は、４個の明（“１”）と４個の暗（“０”）を含むように設定するデータ種別を示す。この場合、１ブロックは、８Ｃ４＝７０パターン、およそ６ビットの情報量を有する。（６ビット表現）
【００５５】
図５の（Ｃ）は、１ブロックの３×３のセルの中心を“０”（暗）に固定し、周囲の８個のセルｊ１〜ｊ８は、４個の明（“１”）と４個の暗（“０”）を含むように設定するデータ種別を示す。この場合も、１ブロックは、８Ｃ４＝７０パターン、およそ６ビットの情報量を有する。（６ビット表現）
データ種別が６ビット表現である時、（Ｂ）と（Ｃ）のいずれも使うことができるが、エンコード側とデコード側で一致させる。
図５の（Ｂ）（Ｃ）の解析を行う際は、入力された撮影画像から作成されたグレースケール画像に対して、ｊ１〜ｊ８のセルの撮影画像内での座標を計算し、各セルのグレースケールの画素値を取得し、画素値を降順にソートする。このとき、画素値の高いセル４つが明であり、低いセル４つが暗である。撮影画像をグレースケール画像に変換する方法は後述する。
二次元コードは様々な撮影環境下での認識が求められる。その際に、光は撮影画像に対して、局所的な色の変化、段階的な色の変化など、悪い影響を与え、これは撮影画像に対する適切な二値化画像の作成が困難である要因となる。
この方法の利点は、二値化閾値が不要な点である。二値化閾値を導出しなくても、各セルの相対的な画素値の関係より、セルの明暗を判定することを可能とする効果がある。また、スポットライトのような局所的な強い色の変化に対しても、ブロックにすることで関係するセルが密集するため、全セルが影響を一様に受ける確率が高くなり、セル全体が白くなった場合でも、相対的な画素値の大小関係は維持されるため、認識できる可能性が高くなる。
【００５６】
なお、図５の（Ｂ）および（Ｃ）で、中心のセルは“１”（明）または“０”（暗）に任意に設定可能で、周囲の８個のセルｊ１〜ｊ８を、４個の明（“１”）と４個の暗（“０”）を含むように設定するデータ種別も可能であり、この場合は、１ブロックは、８Ｃ４×２＝１４０パターン、およそ７ビットの情報量を有する。（７ビット表現）
この解析方法について、周囲のセルの解析の方法までは６ビットの場合と同じである。これに加え、中心画素の解析は、画素値が高い４点のうち画素値が最小となるセルの画素値をＧ１、画素値が低い４点のうち画素値が最大となるセルの画素値をＧ２とし、ブロックの中心のセルの撮影画像内での座標を計算し、得られた画素値が（Ｇ１＋Ｇ２）／２以上であれば中心のセルを明セル、それ以外であれば中心のセルを暗セルとする。
この方法では、中心のセルの評価に隣接するセルの解析から得られた閾値を用いており、中心セルと近接するセルは撮影環境から受ける影響がほぼ同じである可能性が高いため、精度が高く認識できる。
【００５７】
図５の（Ｄ１）〜（Ｄ８）は、１ブロックにおいて、中心セルを明か暗に固定し（ここでは明（“１”）に固定）、周囲の８個のセルを明暗４セルずつにするが、時計回りに明暗暗明明明暗暗に固定し、孤立した明セルの位置でデータを取り出す。この場合、８パターン取り出せるので、３ビットのデータ量になる。（３ビット表現）このパターンで、孤立した明セルの位置を検出するには、開始位置のセルから時計回りに、各セルの輝度値を、加算、減算、減算、加算、加算、加算、減算そして減算する演算処理を、開始位置を順に回転しながら行い、演算結果が最大になる開始位置を求める。これが孤立した明セルの位置である。同様に、明暗反転して行うこともでき、この場合は演算結果が最小になる開始位置を求める。
【００５８】
前述のように、第１実施形態では、フォーマット情報ブロック１７内のデータブロック種別データ（２ビット）により、上記の９ビット表現、７ビット表現、および６ビット表現のいずれかが選択される。必要があれば、３ビット表現を選択できるようにしてもよい。
【００５９】
なお、第１実施形態では、重要な情報を記録するバージョン情報ブロックおよびフォーマット情報ブロックは、次に説明する２０パターン表現のデータ種別を利用する。
【００６０】
図６は、２０パターン表現のデータ種別を説明する図である。
図６において、参照番号３１は、２０パターン表現のデータブロックを、３２は第１から第４のいずれかの位置検出パターンを示す。図６の（Ａ）および（Ｂ）に示すように、位置検出パターン３２の下側または上側に配置されるデータブロック３１は、上下方向の中央の列のセルを、暗明暗（０１０）に固定し、両側の２列のセルｍ１からｍ６の６ビットでデータを表現する。さらに、６ビットのうち３ビットを明、３ビットを暗にすることにより、６Ｃ３＝２０パターンを表現する。図６の（Ａ）および（Ｂ）に示したブロックのセルデータの検出は、上下方向に走査することにより行う。また、図６の（Ｃ）および（Ｄ）に示すように、位置検出パターン３２の右側または左側に配置されるデータブロック３１は、横方向の中央の列のセルを、暗明暗（０１０）に固定し、両側の２列のセルｍ１からｍ６の６ビットでデータを表現する。さらに、６ビットのうち３ビットを明、３ビットを暗にすることにより、６Ｃ３＝２０パターンを表現する。図６の（Ｃ）および（Ｄ）に示したブロックのセルデータの検出は、横方向に走査することにより行う。
このデータ種別により、解析の際にコードのバージョン、およびセルサイズが不確かな状態でも、位置検出パターンの撮影画像内での位置が判明していれば、データブロックからデータを得ることができる。バージョン、およびセルサイズが不明である場合、位置検出パターンの撮影画像内での座標がわかっていてもブロックの座標が算出できない。しかし、位置検出パターンから、隣接する位置検出パターン（第１位置検出パターンと第２位置検出パターンは、第３位置検出パターンと第４位置検出パターン隣接する）の方向を走査することで、データブロックが見つかる。図６の（Ａ）では、データブロックの中央の列に向かい、参照番号３２の位置検出パターンの下側の辺に対して垂直に走査を行う。位置検出パターンのすぐ下から走査を行い、中央の列の上側のセルである暗セルにぶつかる。このまま進めると、明セルにぶつかり、そして暗セルにぶつかり、さらに分離スペースの明セルにぶつかる。これにより中央の列のセルの座標と、データブロックの１セルあたりの画素数が算出できる。これにより、データブロックの他のセルの座標も容易に判明することから、データブロックが表すデータが得られる。
【００６１】
バージョン情報ブロックおよびフォーマット情報ブロックは、解析処理において重要なデータブロックであり、位置検出パターンに対して図６に示すような位置関係になるように配置して、２０パターン表現を行う。情報ブロックは２箇所、フォーマット情報は３箇所に同じ情報を保持することで、汚れや、スポットライトなどの局所的なノイズへの対策を行っている。
【００６２】
図７は、第１実施形態の二次元コードにしたがって作成した二次元コードの例を示す図である。図７の二次元コードは、４３×４３セルで、１１×１１ブロックの二次元コードであり、バージョンは３×３となる。図７の二次元コードは、絵柄領域を有さず、絵柄も埋め込まれていない。したがって、絵柄埋込情報ブロックも不要である。
【００６３】
図８は、第１実施形態の二次元コードにしたがって作成した二次元コードの別の例を示す図である。図８の二次元コードは、５９×５９セルで、１５×１５ブロックの二次元コードであり、バージョンは５×５となる。図８の二次元コードは、ブロック座標（２，５）と（１１，８）を対角とする長方形の絵柄領域を有し、ＩＤコードと物品名が記載された画像が付されている。これにより、ユーザーは、コードを認識する前でも認識対象の概要を判別することが可能である。
【００６４】
位置検出パターンは、各種の形状のものを使用することが可能であり、二次元コードのサイズ等も色々な値が取り得る。
図９は、第２実施形態の二次元コードを示す図である。第２実施形態の二次元コードの第１実施形態の二次元コードとの相違点は、次の通りである。
【００６５】
（１）第１位置検出パターン５２Ａが、暗セルの正方形枠のみで内側に正方形を有さない。また、第２位置検出パターン５２Ｂおよび第３位置検出パターン５２Ｃは、正方形に近い長方形である。第４位置検出パターン５２Ｄは、第１実施形態の１２Ｄと同じ形状である。
【００６６】
（２）ブロックサイズおよびブロック構成が異なり、特に横方向および縦方向が位置検出パターンに挟まれた外側部分のブロック構成が、異なる。この部分に配列されるブロックは１列で、その部分に、２個の縦バージョン情報ブロック５５、２個の横バージョン情報ブロック５６、３個のフォーマット情報ブロック５７、２個の縦絵柄埋込情報ブロック５８、２個の横絵柄埋込情報ブロック５９、および位置補正パターン５４Ａおよび５４Ｂを設ける。残りのブロック６０が、実データブロック、誤り訂正符号ブロック、位置補正パターンとなるブロック、および絵柄埋込領域である。
【００６７】
他の部分は、第１実施形態と同じであるので、説明は省略する。
図１０は、第２実施形態の二次元コードにしたがって作成した二次元コードの例を示す図である。
【００６８】
図１０の（Ａ）は、３６×３６セルで、８×８ブロックの二次元コードである。図１０の（Ａ）の二次元コードは、ブロック座標（２，２）と（５，５）を対角とする長方形の絵柄領域を有し、高分解能の多値画像が付されている。これにより、二次元コードが与える印象を改善し、注目を集めることができる。
【００６９】
図１０の（Ｂ）は、３６×３６セルで、８×８ブロックの二次元コードである。図１０の（Ｂ）の二次元コードは、ブロック座標（２，３）と（５，４）を対角とする長方形の絵柄領域を有し、数字の画像が付されている。
【００７０】
二次元コードのサイズおよび形状は各種あり、そのいずれにも本発明の二次元コードを適用することが可能である。
【００７１】
図１１は、第２実施形態の二次元コードの位置検出パターンを、サイズおよび形状の異なる二次元パターンに適用した変形例を示す図である。参照番号５３は、データ領域を示す。
【００７２】
図１１の（Ａ）は、正方形の小型の二次元コードの例を示す。
図１１の（Ｂ）は、第２実施形態と類似の二次元コードの例を示す。
図１１の（Ｃ）は、長方形の二次元コードの例を示す。
【００７３】
図１１の（Ｄ）は、長方形の二次元コードで、中心部に第５位置検出パターン５２Ｅを追加した二次元コードの例を示す。第５位置検出パターン５２Ｅは、正方形枠と、その内部に正方形を有する第１実施形態の第１検出パターン１２Ａに類似の形状を有する。
【００７４】
ここで、位置検出パターンとして好ましい形状について検討する。
本発明での位置検出パターンは、（１）４種の位置検出パターン同士で、形状・大きさ・二次元コード上での配置方向のいずれかで区別が可能であること、（２）位置検出パターン同士で、種類の区別が簡易なアルゴリズムで実現可能であること、（３）区別した位置検出パターンについて、組合せの絞込みが容易であること（高速化に貢献）、（４）位置検出パターンのセルサイズを抑えること、（５）二次元コード以外の写り込んだ画像と区別しやすいこと、および（６）二次元コード内に他に位置検出パターンが表れないことが望まれる。
図２および図９の位置検出パターンは、以上の事項を満足するといえる。
【００７５】
ここで、正方形および長方形の位置検出パターンで、枠の幅および識別スペースの幅、すなわちセルサイズについて、色々な組合せの位置検出パターンを作成して、ぼけ・ぶれを生じるように撮影した画像で二値化を行い、位置検出パターンの区別が行えるか実験を行った。その結果、枠の内部の識別スペースの有無で位置検出パターンとその他の写り込んだ画像とを区別するというのは、容易に実施できること、１セルのスペース、その中の１セルの正方形は、ぼけに影響を受けやすいこと、外枠の太さはぼけの耐性に大きく影響しないこと、が判明した。
【００７６】
このような結果から、正方形または長方形の枠で、内部に識別スペースを有し、識別スペースが２セルであるものの有用性が判明した。この理由は、次のように考えられる。最小セルが１ビットを表す二次元コードでは、１セル以上のぼけ・ぶれが発生する場合は、位置検出ができても、データの取得ができなくなる。通常の撮影条件であれば１セル以上のぼけ・ぶれが生じることは少ないため、識別スペースが２セルあれば、１セル分のあらゆる方向のぼけ・ぶれに対応できることとなる。
【００７７】
第１の実施形態に示した、セルサイズが４×４の正方形である第２位置検出パターンが、上記のスペースを持つ、最小セルサイズの構成となる。
第１位置検出パターンについては、１セルの枠と２セルのスペースと２セルの正方形を重ねたものとなる。この位置検出パターンであれば、その向きによらず、中心を走査すると暗明暗明暗のパターンが得られ、第２位置検出パターンや、ノイズとの違いが明確である。
【００７８】
第３位置検出パターンおよび第４位置検出パターンの形状は、位置検出パターンの枠の延長線に位置検出パターンの枠が存在することが望ましい。これにより、位置検出パターンが欠けた際に、欠けた位置検出パターンの座標を予測する精度が向上する効果が得られる。
これらの条件に当てはまる形状は、第１実施形態の第３位置検出パターン、および第４位置検出パターンとなる。それぞれ９０度傾いており、第１位置検出パターン、および第２位置検出パターンとは縦横比が異なることから区別が容易である。
【００７９】
第２実施形態は、最も位置検出パターンが占めるセルサイズが少ない構成であり、第１位置検出パターンと第２位置検出パターンは、同じ形状であり、大きさが異なり、第２位置検出パターンを５×５セルにし、上記と同様の理由で第３位置検出パターンと、第４位置検出パターンを作成する。
これら位置検出パターンのセルサイズは、第１実施形態では、１６＋６４＋３２＋３２＝１４４セルとなり、第２実施形態では、１６＋２５＋２０＋２０＝８１セルとなる。
図１に示し二次元コードは、３箇所にしか位置検出パターンが無いにもかかわらず、７×７×３＝１４７セルで、本実施例よりセルサイズが大きい。
【００８０】
第１実施形態は、第２実施形態と比べ、セルサイズが大きくなるが、第２実施形態では全ての位置検出パターンの面積が近く、斜めからの撮影で精度への影響を受けやすいのに比べ、第１実施形態は、第１位置検出パターンと、第２位置検出パターンは形状が異なり、第３位置検出パターンと、第４位置検出パターンは向きが異なり、第１検出パターン・第２位置検出パターンと、第３検出パターン・第４位置検出パターンは縦横比が異なる。これらは斜めからの撮影でも、充分区別可能であり、位置検出パターンの区別に有用な構成となる。
【００８１】
また、図２の位置検出パターンは周囲２セルに余白として明セルを配置している。図１の二次元コードの認識の際は、コードを印字した周囲にクワイエットゾーンが必要であり、これはコードの一部と考えられる。これに対して、第１実施形態の二次元コードは、コードの周囲はどのような印刷が行われようが精度に影響しない。また、図９の第２実施形態のように、余白は図１のコード同様にコードの外に配置することも可能である。
【００８２】
しかし、本発明の主旨からは、他の形状の位置検出パターンも使用でき、各種の変形例が可能である。
図１２は、変形例の４個の位置検出パターンの例を示す図である。
図１２の（Ａ）は、大きな円枠、方向の異なる２個の楕円枠および小さな円枠が、４個の位置検出パターンである例を示す。
【００８３】
図１２の（Ｂ）は、内部に小さな円を有する大きな円枠、方向の異なる２個の楕円枠および小さな円枠が、４個の位置検出パターンである例を示す。
図１２の（Ｃ）は、大きな十字形、延長方向が異なる一方のみ延長した２個の十字形および小さな十字形が、４個の位置検出パターンである例を示す。
【００８４】
図１２の（Ｄ）は、大きなＬ字形、延長方向が異なる一方のみ延長した２個のＬ字形および小さなＬ字形が、４個の位置検出パターンである例を示す。ここで、Ｌ字は同じ方向であり、角の位置から回転方向を判定することが可能である。なお、Ｌ字の方向を９０度ずつ回転したものにしてもよい。
【００８５】
図１２の（Ｅ）は、大きな三角枠、延長方向が異なる一方のみ延長した２個の三角枠および小さな三角枠が、４個の位置検出パターンである例を示す。
図１２に示した例は、一部の例であり、他にも各種の形状の位置検出パターンが可能である。
【００８６】
次に、第１および第２実施形態の二次元コードを作成する処理（エンコード処理）について説明する。
図１３は、依頼に基づいて二次元コードを作成して提供する作成システムのハードウェア構成を示す図であり、クライアント・サーバ構成の例を示す。
【００８７】
作成システムは、仕様を決めて二次元コードの作成を依頼するユーザーが操作するユーザーハードウェアと、依頼された二次元コードを作成して提供するシステムハードウェアと、を有する。
【００８８】
ユーザーハードウェアは、コンピュータ等のユーザー処理装置６１と、磁気ディスク等の記憶装置６２と、を有する。
システムハードウェアは、コンピュータ等のシステム処理装置６５と、磁気ディスク等の記憶装置６６と、を有する。
【００８９】
ユーザー処理装置６１とシステム処理装置６５は、通信回線等で接続され、通信可能に構成されている。
ここでは、印刷は、ユーザー側で行うが、システム側や他の印刷所で行うようにしてもよい。二次元コードを印刷する媒体はどのようなものでもよく、例えば、紙、樹脂板、筐体表面などである。ここで、媒体として、埋め込む絵柄があらかじめ印刷されているものでもよく、印刷されている埋込絵柄が二次元コードの絵柄領域に入るようにセッティングした上で二次元コードを印刷する。
【００９０】
印刷装置は、これらの媒体に二次元コードを印刷可能なものであればよく、例えば簡易プリンタ、精密プリンタ、印刷装置等であり、モノクロ印刷だけでなく、カラー印刷可能なものでもよい。また、作成した二次元コードは、印刷せずに、通信回線を介してユーザーに二次元コードのデータとして送信されてもよい。ユーザーは、必要に応じて第三者のディスプレイ等に、作成した二次元コードを表示するようにデータを送信する。
【００９１】
なお、図１３はクライアント・サーバ構成の作成システムの例を示すが、作成システムはこれに限定されず、例えば。クライアントＰＣ上のエンコードソフトウェアで発行し、ＵＳＢ接続したプリンタから発行する構成や、ハンディータイプの端末・プリンタから発行する構成など、各種の変形例があり得る。
【００９２】
図１４から図１６は、ユーザーが、ユーザーハードウェアを介してシステムハードウェアにアクセスし、所望の二次元コードを作成するエンコード処理の手順を示すフローチャートである。
【００９３】
ステップＳ１０では、ユーザーがエンコードのメイン処理を開始する。
ステップＳ１１では、ユーザーが二次元コードに記録するメッセージを入力する。
ステップＳ１２では、ユーザーが二次元コードに絵柄の埋め込みを行うか否かを決定し、絵柄の埋め込みを行う場合にはステップＳ１３に進み、行わない場合にはシステム側で行うステップＳ１５に進む。この際、ユーザー処理装置６１は、システム処理装置６５に入力されたメッセージ、および絵柄の埋め込みを行わないこと、を通知する。
【００９４】
ステップＳ１３では、ユーザーが、絵柄を埋め込むブロック位置（絵柄埋込オフセット幅、絵柄埋込オフセット高さ、絵柄埋込幅および絵柄埋込高さ）を入力する。ユーザー処理装置６１は、システム処理装置６５に、入力されたメッセージ、絵柄の埋め込みを行うこと、および絵柄埋込ブロック位置を通知する。
【００９５】
ステップＳ１４では、システム側で、送信されたブロック位置に基づいて絵柄のブロックサイズを決定する。
ステップＳ１５では、送信されたメッセージを記録するブロックサイズを決定する。
【００９６】
ステップＳ１６では、すべての横バージョンに関して最小縦バージョンを計算する。これは、縦および横のブロック数を乗じたものから、位置検出パターン、バージョン情報ブロック、フォーマット情報ブロック、絵柄を埋め込む場合には絵柄埋込情報ブロックおよび絵柄埋込領域に応じたブロック、位置補正パターンのブロックを除いた残りのブロックを計算する。さらに、このブロック数に対して、一定の誤り訂正率になるような誤り訂正符号ブロックの数を除いた残りのブロックに、メッセージを記録する実データブロックが収容できるサイズをテーブルの形で提示するものである。システム処理装置６５は、計算したテーブルのデータを、ユーザー処理装置６１に送信する。
【００９７】
ステップＳ１７では、ユーザーに縦・横バージョンのテーブルを提示し、ユーザーがいずれを使用するかを決定する。ユーザー処理装置６１は、決定した縦・横バージョンを、システム処理装置６５に送信する。
ステップＳ１８では、システム側で、送信された縦・横バージョンと、絵柄埋込領域に応じたブロックサイズから、実データのブロックサイズを決定する。
【００９８】
ステップＳ１９では、システム側で、送信された縦・横バージョンと、絵柄埋込領域に応じたブロックサイズから、誤り訂正符号ブロックサイズを決定する。
ステップＳ２０では、システム側で、バージョン情報ブロック、フォーマット情報ブロック、絵柄を埋め込む場合には絵柄埋込情報ブロックおよび絵柄埋込領域ブロックの位置を決定する。
【００９９】
ステップＳ２１では、システム側で、絵柄埋込を行うか否かが判定され、絵柄埋込を行う場合にはステップＳ２２に進み、行わない場合にはステップＳ２３に進む。
ステップＳ２２では、絵柄埋込情報ブロックを、コード画像部分の所定ブロック位置に配置する。
【０１００】
ステップＳ２３では、位置検出パターン・位置補正パターンを画像部分に配置する。
ステップＳ２４では、バージョン情報ブロック・フォーマット情報ブロックを画像部分に配置する。
【０１０１】
ステップＳ２５では、メッセージごとにメッセージヘッダーを付与する。
ステップＳ２６では、まだデータを入れる部分があるか判定し、あればステップＳ２７に進み、無ければステップＳ２９に進む。
ステップＳ２７では、終端メッセージヘッダー（終端フラグ）をメッセージデータの末尾に付与する。
【０１０２】
ステップＳ２８では、埋め草を残りの実データ部に付与する。
ステップＳ２９では、実データをブロックにして、画像部分に配置する。
ステップＳ３０では、誤り訂正符号ブロックを画像部分に配置する。
【０１０３】
ステップＳ３１では、システム処理装置６５が、上記のようにして作成したコード画像を出力し、ユーザー処理装置６１に送信する。
ステップＳ３２では、ユーザー側で、絵柄埋め込みを行うか否かを判定し、絵柄埋め込みを行う場合にはステップＳ３３に進み、行わない場合にはステップＳ３４に進んで終了する。
【０１０４】
ステップＳ３３では、送信されたコード画像で、絵柄埋込領域のブロックに埋め込む絵柄データを合成して全体の画像を生成する。絵柄の埋め込みは、例えばデータ添付という形でシステム処理部において行ってもよい。
ステップＳ３４で、エンコードのメイン処理が終了する。
上記の例では、ユーザー側が絵柄データを有していたが、システム側が絵柄データを有しており、それをユーザーが指定するようにしてもよい。
【０１０５】
図１７は、第１実施形態の二次元コードを読み取り、二次元コードを解析する二次元コード解析装置のハードウェア構成を示す図である。
【０１０６】
二次元コード解析装置は、読み取り部７０と、コンピュータ（二次元コード解析処理部）７４と、ディスプレイ７５と、通信インターフェース７６と、を有する。読み取り部７０は、レンズ７１と、イメージセンサ７２と、アナログ・デジタル変換器（ＡＤ）７３と、を有し、撮影した二次元コードのデジタル画像データをコンピュータ７４に出力する。図１７の二次元コード解析装置は、広く使用されており、近年は携帯端末も二次元コード解析装置と同様の機能を実現している。
【０１０７】
図１８から図２０は、ユーザーが撮影した二次元コードを解析するデコード処理の手順を示すフローチャートである。このデコード処理は、１画面に複数の二次元コードが写し込まれている場合を想定している。デコード処理は、解析メイン処理と、情報取り出し処理からなる。まず、解析メイン処理を説明する。
【０１０８】
ステップＳ１０１では、解析のメイン処理を開始する。
ステップＳ１０２では、二次元コードの撮影画像を入力する。
【０１０９】
ステップＳ１０３では、入力された撮影画像の二値画像を作成する。二値化の方法は、入力された撮影画像がＲＧＢ画像などのカラー画像であれば、一旦グレースケール画像に変換し、画像内の最大輝度値と最小輝度値の平均を閾値とし、閾値以上であれば明、未満であれば暗とする。カラー画像からグレースケール変換するには、各画素のＲＧＢの値を用いて、輝度(brightness)＝０．２９９Ｒ＋０．５８７Ｇ＋０．１１４Ｂの変換式にしたがって変換する。カラー画像へのグレースケール画像への変換方法、さらに二値化画像への変換方法は、様々な方法が提案されており、上記変換方法に限られない。
【０１１０】
ステップＳ１０４では、位置検出パターン候補を検出する。具体的には、画像の左上の点を始点とし、画面をＸ方向に走査し、右端にたどり着いたら、数ピクセル下の左端からＸ方向に走査する。言い換えれば、数ピクセル分間引くことになる。これを画像全体に対して繰り返す。間引くピクセル数は、（最大間引き量）＝(位置検出パターンの最小セル高さ）×（撮影時のセルあたりのピクセル数)である。位置検出パターンの最小高さとは、コードの回転も考慮し、位置検出パターンの回転で起こり得るＹ方向の最小セルサイズであり、実施形態では左上の第２位置検出パターンの回転しない状態での４セルが最小となる。撮影時のセルあたりのピクセル数は、１セル当たり１ピクセルを下回ると、理想画像でもセルを明と暗を判別することが困難になる。実際の撮影画像でのセルのずれや回転を考慮すると、少なくとも１セル当たり３ピクセル以上あるのが望ましい。３ピクセルとすると、上記の場合最大間引き量は１２ピクセルとなり、画像走査回数は全画素数の１／１２となり、走査数を大幅に削減できる。
【０１１１】
ステップＳ１０５では、位置検出パターン候補を検査する。具体的には、走査中に明から暗の境界を見つけた場合、暗部分の周囲を走査する。その際に、最小・最大のＸ座標、Ｙ座標をそれぞれ求める。これにより、暗の固まりの外接する長方形が取得できる。これの左上座標を（ｘ１，ｙ１）、右下座標を（ｘ２，ｙ２）と表す。１度周囲を走査すれば、以後走査はしなくてよい。
【０１１２】
なお、周囲探索を行っても、充分に画像走査回数を減らすことができる。周囲探査でもっとも処理時間が長くなる最悪ケースの一例は、１ピクセルの縦縞を１ピクセルごとに配置するようなケースであるが、そもそもそのようなケースは発生しない上、発生しても周囲長の探索は全画素を１回走査するのと同じ回数で抑えることができ、走査回数が増加することはない。これは他の最悪ケースでも同様である。
【０１１３】
図１の二次元コードの場合、暗明暗明暗が１：１：３：１：１の比率になる部分を探すことにより位置検出パターンを検出でき、１回の走査で位置検出パターンを見つけることができる。ここで、撮影したコードが４５度傾いている際の走査で、１：１：３：１：１の比率が得られるのは、対角線上の走査だけである。多くの場合、撮影の向きが自由であり、そのため、撮影するコードの向きが３６０度のいずれの回転位置もあり得る。このような場合、間引くことができる量は少なく、実際の回転位置は分からないので、間引き量を大きくすることはできない。
【０１１４】
図２１は、位置検出パターン候補の形状チェックを説明する図である。
次に、位置検出パターン候補の形状をチェックする。第１実施形態の二次元コードの位置検出パターンは、いずれも枠、すなわち穴形状を有する。そこで、まず穴の有無を確認する。始点を外接長方形の左側中点（ｘ１，（ｙ１＋ｙ２）／２）、終点を（ｘ２，（ｙ１＋ｙ２）／２）とするｘ軸方向の走査を行う。ここで、次の（１）または（２）の条件にあてはまることを確認する。
【０１１５】
（１）暗明暗となる並びが存在することを確認する。１つ目の暗の左端（ｌｘ１）から２つ目の暗の右端（ｒｘ１）までの中心となる画素が明であることを確認する。
（２）暗明暗明暗というパターンを探す。１つ目の暗の左端（ｌｘ２）から３つ目の暗の右端（ｒｘ２）までの中心となる画素が暗であることを確認する。
【０１１６】
（１）の場合はさらに、図２１の（Ａ）に示すように、中心座標（（ｌｘ１＋ｒｘ１）／２，（ｙ１＋ｙ２）／２）から上下を走査し、上が明暗明となっており（終点:（（ｌｘ１＋ｒｘ１）／２），ｙ１−１））、下が明暗明（終点:（（ｌｘ１＋ｒｘ１）／２），ｙ２＋１））であり、上側走査の暗と明の境界のｙ座標ｔｙ１と下側走査の暗と明の境界のｙ座標ｂｙ１の中点が、明の中心座標とほぼ一致することを確認する。
【０１１７】
（２）の場合もさらに、図２１の（Ｂ）に示すように、中心座標（（ｌｘ２＋ｒｘ２）／２，（ｙ１＋ｙ２）／２）から上下を走査し、上が暗明暗明となっており（終点:（（ｌｘ２＋ｒｘ２）／２），ｙ１−１））、下が暗明暗明（終点:（（ｌｘ２＋ｒｘ２）／２），ｙ２＋１））であり、上側走査の２つめの暗と明の境界のｙ座標ｔｙ２と下側走査の２つめの暗と明の境界のｙ座標ｂｙ２の中点が明の中心座標とほぼ一致することを確認する。
【０１１８】
以上の処理により、枠内に暗部を有する第１位置検出パターン（正方形枠内に正方形）と、枠のみの第２から第４位置検出パターン（正方形枠または長方形枠：ロ型）と、に区別できた。
【０１１９】
（１）または（２）に当てはまらないものは、位置検出パターンではない。
次に、各位置検出パターン候補の頂点を探索する。外接する長方形の左上の座標（ｘ１，ｙ１）からＸ軸方向に（ｘ２，ｙ１）まで走査する。一番初めに接触した暗点の座標をｖｅｒｔｅｘ１：（ｖｘ１，ｖｙ１）とする。次に右上の座標（ｘ２，ｙ１）からＹ軸方向に（ｘ２，ｙ２）まで走査する。一番初めに接触した暗点の座標をｖｅｒｔｅｘ２：（ｖｘ２，ｖｙ２）とする。右下の座標（ｘ２，ｙ２）からＸ軸の反対方向に（ｘ１，ｙ２）まで走査する。一番初めに接触した暗点の座標をｖｅｒｔｅｘ３：（ｖｘ３，ｖｙ３）とする。次に左下の座標（ｘ１，ｙ２）からＹ軸の反対方向に（ｘ１，ｙ１）まで走査する。一番初めに接触した暗点の座標をｖｅｒｔｅｘ４：（ｖｘ４，ｖｙ４）とする。ｖｅｒｔｅｘ１〜４は長方形（正方形を含む）となるはずである。そうでない場合は、位置検出パターンではない。図２１の（Ｂ）の表記は省略する。
【０１２０】
次に長方形の縦横比を見る。（（ｖｘ１−ｖｘ２）×（ｖｘ１−ｖｘ２）＋（ｖｙ１−ｖｙ２）×（ｖｙ１−ｖｙ２））１／２で１辺の長さが、（（ｖｘ２−ｖｘ３）×（ｖｘ２−ｖｘ３）＋（ｖｙ２−ｖｙ３）×（ｖｙ２−ｖｙ３））１／２でもう１辺の長さが、求められる。辺の比率が、（長辺）：（短辺）＝１：１でかつ形状が（１）であれば第２位置検出パターン、（２）であれば第１位置検出パターン、（長辺）：（短辺）＝１：２で形状が（１）であれば第３または第４位置検出パターンとなる。ここまでで、３種類の位置検出パターンの区別が可能となった。
【０１２１】
次に面積を求める。ここでの面積は、外側の長方形枠の面積で、内側のスペースの面積も含む。第１位置検出パターンの場合は、枠の中の正方形も含む。位置検出パターンの面積は、外側の長方形の面積から４隅を含む４つの直角三角形の面積を減じれば求まる。面積＝（ｘ２−ｘ１）×（ｙ２−ｙ１）−（ｖｘ１−ｖｘ４）×（ｖｙ４−ｖｙ１）／２−（ｖｘ２−ｖｘ１）×（ｖｙ２−ｖｙ１）／２−（ｖｘ２−ｖｘ３）×（ｖｙ３−ｖｙ２）／２−（ｖｘ３−ｖｘ４）×（ｖｙ３−ｖｙ４）／２で求まる。
【０１２２】
次に、回転角度を求める。第１および第２位置検出パターンは、正方形なので９０度以上の傾きを検知できないので、９０度まで求める。角度は時計回りとする。
θ＝ａｒｃｔａｎ（（ｖｙ２−ｖｙ１）／（ｖｘ２−ｖｘ１））
θが回転角度となる。
【０１２３】
第３および第４位置検出パターンは、０から１８０度まで求める。第３位置検出パターンは、２点間座標の距離を求める関数 ｌｅｎｇｔｈ（ｘ１,ｙ１,ｘ２,ｙ２）  ＝  （（ｘ２−ｘ１）２  ＋  （ｙ２−ｙ１）２）１／２を定義し、０〜４５度まではｌｅｎｇｔｈ（ｖｘ１,ｖｙ１,ｖｘ２,ｖｙ２）＞ｌｅｎｇｔｈ（ｖｘ４,ｖｙ４,ｖｘ１,ｖｙ１）かつ（ｘ２−ｘ１）＞（ｙ２−ｙ１）であり、θ＝ａｒｃｔａｎ（（ｖｙ２−ｖｙ１）／（ｖｘ２−ｖｘ１））で求まる。４５〜９０度まではｌｅｎｇｔｈ（ｖｘ１,ｖｙ１,ｖｘ２,ｖｙ２）＞ｌｅｎｇｔｈ（ｖｘ４,ｖｙ４,ｖｘ１,ｖｙ１）および（ｘ２−ｘ１）＜（ｙ２−ｙ１）であり、θ＝ａｒｃｔａｎ（（ｖｙ２−ｖｙ１）／（ｖｘ２−ｖｘ１））で求まる。９０〜１３５度まではｌｅｎｇｔｈ（ｖｘ１,ｖｙ１,ｖｘ２,ｖｙ２）＜ｌｅｎｇｔｈ（ｖｘ４,ｖｙ４,ｖｘ１,ｖｙ１）および（ｘ２−ｘ１）＜（ｙ２−ｙ１）であり、θ＝ａｒｃｔａｎ（（ｖｙ２−ｖｙ１）／（ｖｘ２−ｖｘ１））＋９０度で求まる。１３５〜１８０度まではｌｅｎｇｔｈ（ｖｘ１,ｖｙ１,ｖｘ２,ｖｙ２）＜ｌｅｎｇｔｈ（ｖｘ４,ｖｙ４,ｖｘ１,ｖｙ１）および（ｘ２−ｘ１）＞（ｙ２−ｙ１）であり、θ＝ａｒｃｔａｎ（（ｖｙ２−ｖｙ１）／（ｖｘ２−ｖｘ１））＋９０度で求まる。第４位置検出パターンについても同様に回転角度θを求める。
【０１２４】
次に、位置検出パターン候補の中心座標を検出する。中心座標は外接長方形の中心（（ｘ１＋ｘ２）／２（ｙ１＋ｙ２）／２）とする。
以上で、位置検出パターン候補の検査が終了する。
【０１２５】
ステップＳ１０６では、既に３種類に区別されている位置検出パターンを、区別ごとに、位置検出パターンを面積で降順にソートする。
【０１２６】
ステップＳ１０７では、４種の位置検出パターンの組合せを作成する。まず、第１位置検出パターン候補の中で最も面積の大きな位置検出パターン候補を選択する。第１位置検出パターンの面積をＳとすると、面積がＳ／４である第２位置検出パターン候補で、かつ回転角度が同じ組合せを探す。これが見つかると、第３および第４位置検出パターン候補で面積がＳ／２となる候補を探し、さらに角度が同じ候補と、９０度異なる候補の組合せを探す。
【０１２７】
ここで、１画面に複数の二次元コードが写し込まれている場合、位置検出パターン候補のあらゆる組合せを考えると、莫大な組合せになってしまう。本発明のように位置検出パターンを全て変えることにより組合せを大きく減らせ、さらに事前に得られた形状・面積・回転などの特徴を用いることで、簡単な比較演算で、さらなる組合せの絞込みが可能となっている。これについては後述する。
【０１２８】
ステップＳ１０７では、検討していない４種の位置検出パターンの組合せが残っているか判定し、残っていればステップＳ１０８に進み、残っていなければステップＳ１１２に進む。
【０１２９】
ステップＳ１０８では、組合せた位置検出パターンについて、同一の二次元コードの位置検出パターンであるとして情報の取り出しを行う。この処理については、図１９および図２０を参照して後述する。
【０１３０】
ステップＳ１０９では、情報取り出しに成功したかの結果に応じて、成功した場合にはステップＳ１１０に進み、失敗した場合には失敗した位置検出パターンの組合せを除外する処理を行った後、ステップＳ１０７に戻る。
【０１３１】
ステップＳ１１０では、取り出しに成功した情報のメッセージを保存する。
ステップＳ１１１では、データの取り出しに成功した二次元パターンに使われた候補を位置検出パターン候補から除外し、ステップＳ１０７に戻る。なお、データの取り出しに成功した二次元パターンの範囲に、使用していない位置検出パターン候補がある場合には、それも候補から除外する。
【０１３２】
ステップＳ１０７からＳ１１１を繰り返すことにより、写し込まれた二次元コードの解析が終了する。ここで、除外されていない位置検出パターン候補が残っている場合には、３種または２種の組合せについて、ステップＳ１０８の情報の取り出し処理を行うようにしてもよい。これについては後述する。
【０１３３】
ステップＳ１１２では、解析が終了したとのメッセージを呼出元に送信する。
ステップＳ１１３で、解析メインの処理を終了する。
【０１３４】
次に図１９および図２０を参照してステップＳ１０８の情報取り出し処理を説明する。
ステップＳ２００で、情報取り出し処理を開始する。
ステップＳ２０１で、位置検出パターン４種の組合せの関係をチェックする。チェックは以下の（ａ）（ｂ）の条件を満たすか判定することで行い、満たさない項目があれば、問題ありとして処理を終了する。
【０１３５】
まず、前記第１位検出パターンの中心座標をｐｔ１、前記第２位検出パターンの中心座標をｐｔ２、前記第３位検出パターンの中心座標をｐｔ３、前記第４位検出パターンの中心座標をｐｔ４とし、ｐｔ１、ｐｔ３、ｐｔ２、ｐｔ４、ｐｔ１と順番に各点を結ぶ。位置検出の４種の組合せが正しければ、長方形が得られる。
【０１３６】
（ａ）全ての頂点の角度が直角になる。
【０１３７】
（ｂ）向かい合う辺の長さが１：１になる。
【０１３８】
ステップＳ２０２では、以上のチェック結果で問題があるか判定し、あればステップＳ２０３に進み、情報取り出しに失敗したことを示すフラグを立て、問題が無ければステップＳ２０４に進む。
【０１３９】
ステップＳ２０４では、いずれかの位置検出パターンから、１セルあたりのピクセル数を求める。第２位置検出パターンの場合、面積は４×４＝１６セル分の面積であり、１セルあたりのピクセル数＝（（面積）／１６）１／２の式で求まる。
【０１４０】
ステップＳ２０５では、隣接する位置検出パターンの中心座標の距離を縦横それぞれで計測し、ステップＳ２０４で求めた値で割ることにより、二次元コードの縦・横のセルサイズをそれぞれ求めることができる。得られた中心座標の横の距離をｄピクセル、１セルあたりのピクセル数をｐピクセル毎セルとすると、コードの横のセルサイズ＝ｄ／ｐ＋（４＋６）が得られる。縦も同様の方法。
【０１４１】
ステップＳ２０５では、ステップＳ２０５で求めたセルサイズから二次元コードのバージョンを仮決定する。バージョンは８セルずつ段階的に大きくなる。コードの横のセルサイズ＝横バージョン×８＋１９で求められるため、この式を変形させ横バージョン＝（セルサイズ−１９）／８で求められる。ここで得られた横バージョンの値が、横仮決定バージョンとなる。セルサイズが一致するバージョンがない場合は、最もセルサイズが近いバージョンを指定する。縦も同様の方法。仮とする理由は、斜めから撮影や、印字した紙の曲がりなどで、正確な値が得られない可能性を考慮しており、バージョン情報ブロックもあわせて利用することで、正しい値を得るようにしている。
【０１４２】
ステップＳ２０６では、位置検出パターンから、隣接する位置検出パターンの方向を走査することで、バージョン情報ブロック、フォーマット情報ブロックを構成するセルの撮影画像での座標を検出する。
【０１４３】
ステップＳ２０７では、バージョン情報ブロックの解析（縦横）を行う。これにより、縦横のバージョンが判明する。解析に失敗した場合、処理を終了する。前述のように、バージョン情報ブロックおよびフォーマット情報ブロックは、１ブロックで２０通りの値を示す。バージョン情報ブロックは、縦・横それぞれブロックが２箇所配置されており、縦・横２箇所ずつのバージョン情報ブロックから読み取った値と、コード幅・高さと位置検出パターンのサイズから得られる仮決定バージョン情報、これら３つの値のうち２つ以上同じ値があれば、その値を採用する。
【０１４４】
ステップＳ２０８では、フォーマット情報ブロックの解析を行う。絵柄埋め込みの有無と、ブロックごとのデータ埋め込み方が決定する。解析に失敗した場合、処理を終了する。フォーマット情報ブロックは、３箇所は位置されており、２箇所以上同じであれば採用する。
【０１４５】
ステップＳ２０９では、位置補正パターンの座標を計算し、各セルの二次元コードの画像内での座標を高精度に求める。各セルの座標は既に導出できているが、位置補正パターンにより、レンズの歪みの影響を軽減することが可能となる。既に位置補正パターンの画像内での座標は判明しているので、その点が暗であることを確かめる。そして、この点を始点とし、右方向に走査を行い、暗と明の画素の境界を見つけ、Ｓ１０５同様の方法で周囲を走査し、外接する長方形の左上座標を（ｘ１，ｙ１）、右下座標を（ｘ２，ｙ２）とし、中心座標は（（ｘ１＋ｘ２）／２，（ｙ１＋ｙ２）／２））が得られた。
【０１４６】
ステップＳ２１０では、フォーマット情報ブロックで絵柄埋め込みが有りであるか否かを判定し、絵柄ありと判定された場合、ステップＳ２１１に進み、絵柄なしと判定された場合ステップＳ２１２に進む。
【０１４７】
ステップＳ２１１では、絵柄埋込情報ブロックを参照することにより、絵柄埋め込みブロックの縦横それぞれのオフセット幅と高さ、および絵柄のブロックの幅と高さが判明する。
ステップＳ２１２では、実データブロックと、誤り訂正符号ブロックに関して、最寄りの、位置検出パターンの中心座標、または位置補正パターンの中心座標、いずれか４点を選び、射影変換より、撮影画像内でのセルの座標を求める。
【０１４８】
ステップＳ２１３では、実データブロックと、誤り訂正符号ブロックについて、フォーマット情報ブロックのデータ種別に従い、複数の明（１）と暗（０）のデータを検出する。
ステップＳ２１４では、実データブロックと、誤り訂正符号ブロックの個数から、誤り訂正符号ブロックの個数を計算する。これにより、実データと、誤り訂正符号が判明する。
【０１４９】
ステップＳ２１５では、誤り訂正符号を用いて、データ部と誤り訂正符号に関して、誤りの数と位置を検出する。誤りが０であれば、ステップＳ２１９に進む。そうでなければ、ステップＳ２１６に進む。
ステップＳ２１６では、訂正可能であるか否かを判定し、訂正可能であればステップＳ２１８に進み、訂正ができなければステップＳ２１７に進む。
【０１５０】
ステップＳ２１７では、情報取り出しに失敗したのでメッセージが得られず、処理を終了する。
ステップＳ２１８では、誤り訂正符号により、実データの誤り訂正を行う。
【０１５１】
ステップＳ２１９では、得られた実データは、ヘッダー（メッセージ種類（メッセージのエンコード）・メッセージサイズ）、メッセージ、終端フラグ、埋め草からなる。ヘッダーとメッセージを合わせたものをセグメントとする。終端フラグはメッセージを含まない、特殊なセグメントである。セグメントは複数の場合がある。終端フラグが見つかった際、その後は全て埋め草となる。データからメッセージを復元する。
ステップＳ２２０では、情報取り出し処理を終了する。
【０１５２】
射影変換では、４組以上の座標が必要である。上記の解析処理では、４個の位置検出パターンが検出できた場合の例を説明したが、汚れやぼけ・ぶれなどのために、３個または２個の位置検出パターンのみが検出されることも起こり得る。本発明では、そのような場合、検出できた３個または２個の位置検出パターン形状が異なるので、３個または２個の位置関係から検出できなかった位置検出パターンの種類が判明することから、位置を容易に予測することができる。例えば、第１実施形態の二次元コードで、３個の位置検出パターンが検出できた場合には、形状から対角に位置する２個の位置検出パターンが識別できるので、検出できなかった１個は、対角の２個の位置検出パターンを結ぶ直線に対して、もう１個の位置検出パターンのミラー対称の位置にあると推測できる。また、さらに、２個の位置検出パターンが検出できた場合には、形状から２個の位置関係が判明する。例えば、隣接する２個の位置検出パターンであれば、２個の位置検出パターンを結ぶ直線から垂直な方向にこの直線と同じ長さ離れた位置に残りの２個の位置検出パターンが存在すると予測される。また、対角の２個の位置検出パターンであれば、２個の位置検出パターンの辺の延長線上の交点に残りの２個の位置検出パターンが存在すると予測される。例えば、第３位置検出パターンと第４位置検出パターンが見つかった場合に、それぞれの短辺２本を延長することで交点が４点できるが、この交点は第１位置検出パターンの頂点となり、同様に長辺を延長してできる交点４点は、第２位置検出パターンとなる。第１位置検出パターンと第２位置検出パターンが見つかった場合も同様の方法で予測できる。もちろん、４個の位置検出パターンの場合に比べて、３個の場合は精度が低下し、２個の場合はさらに精度が低下する。いずれにしろ上記のようにして４個の位置検出パターンの位置を仮決定し、それを射影変換し、位置補正パターンの位置情報を取得する。そして、位置補正パターンを利用して座標を補正し、検出した位置検出パターンの座標と、位置補正パターンで補正した座標に基づいて４組の位置検出パターンの座標を最終決定する。
【０１５３】
位置検出パターンの個数は、汚れなどで検出できないものが発生することを考慮すると、個数が多い方が望ましいが、その分位置検出パターンの示す面積比率が増加してデータ効率が低下するだけでなく、位置検出パターンの検出処理量が増加するので、二次元コードの使用形態等に応じて適宜決定することが望ましい。
【０１５４】
次に、１画面に複数の二次元コードが写し込まれた場合について、本発明の二次元コードと図１の二次元コードを使用した場合を比較する。例えば、１画面に６個の図１の二次元コードが写し込まれた場合、同じ位置検出パターンが１８個写し込まれる。前述のように、１８個の位置検出パターンを検出し、それらのうち３個の組合せすべてについて同一の二次元コードのものであるかチェックするとする。この場合、組合せは１８Ｃ３＝８１６通りとなる。もし、１個の二次元コードに４個の同じ位置検出パターンがある場合には、画面の位置検出パターンの個数は２４個になり、その組合せは、２４Ｃ４＝１０６２４通りとなる。このように、組合せの数が膨大となりその分処理時間が増加する。
【０１５５】
これに対して、本発明のように位置検出パターンが異なる場合、３個の異なる位置検出パターンでは、６Ｃ１×６Ｃ１×６Ｃ１＝２１６通りとなり、４個の異なる位置検出パターンでは、６Ｃ１×６Ｃ１×６Ｃ１×６Ｃ１＝１２９６通りとなり、組合せが大幅に減る。
【０１５６】
さらに、上記の解析処理では、画面を間引きながら走査して位置検出パターンを検出したが、１個の位置検出パターン候補を発見できれば、その形状から他の位置検出パターンが存在する方向および距離範囲をある程度予測することが可能であり、走査をその領域に限定することで位置検出パターンの検出効率を改善することができる。例えば、第１および第２実施形態の二次元コードでは、長方形の第３および第４位置検出パターンの長辺の延長方向に第２位置検出パターンが存在し、長辺に垂直な短辺の延長方向に第１位置検出パターンが存在すると予測することが可能である。２個の位置検出パターンが検出された場合および３個の位置検出パターンが検出された場合には、残りの位置検出パターンが存在すると予測される領域は更に限定される。
【０１５７】
なお、上述した二次元コードは４個の異なる位置検出パターンが配置されているが、３個の異なる位置検出パターンと、１個以上の位置補正パターン、という構成でも精度の高いデータ抽出が可能である。この場合の位置検出パターンの配置は、４個の位置検出パターンの配置から、位置検出パターンが１個欠けた配置となる。
【０１５８】
解析する際は、３個の位置検出パターンを検出した後、位置検出パターンが欠けた部分の位置検出パターンの座標を、他の位置検出パターンの位置関係から補完する。ただし、斜め上から撮影する場合は、補完された座標に誤差があることが懸念される。そこで、位置検出パターン３組の座標と、補完した座標１組の、計４組の座標から、欠けた位置検出パターンの最寄りの位置補正パターンの座標を、射影変換により取得する。
【０１５９】
そして、位置補正パターンを走査することにより位置補正パターンの座標補正を行う。次に、３個の位置検出パターンと、１個の位置補正パターンの、計４組の座標を用い、データの座標のマッピングを行う。位置補正パターンには、座標の誤差を軽減する効果があり、精度の高い座標の取得ができることから、位置検出パターンが３個と、１個以上の位置補正パターンからでも精度の高いデータの抽出が可能となる。
位置補正パターンが既に配置されている場合には、位置検出パターンが１つ減るため、コードの効率がよくなる。一方で、位置検出パターンの冗長性が減り、汚れなどに対する耐性が下がる。
【０１６０】
また、入力される撮影画像は１枚とは限らず、複数画像の入力から１枚の画像を合成し、解析を行うことも考えられる。例えば、動画のような時系列の連続した画像から１枚の画像を生成して解析する場合や、コードの画像が分割され、複数枚に分けて入力される場合などである。
さらに、動画で異なるコードを連続して表示し、これらコードを全て認識することで、はじめて一つのデータが得られるといった活用も考えられる。この場合、動画でなく、紙に複数のコードを配置してもよい。
このような場合でも本発明の二次元コードを適用することは可能である。
【０１６１】
また、上述した実施形態では、絵柄領域の有無を示すフォーマット情報ブロックを設けた二次元コードとなっているが、初めから絵柄領域を設けることが決まっている場合には、絵柄領域の有無を示すフォーマット情報ブロックは設けなくても問題はない。
【０１６２】
以上、本発明の実施形態を説明したが、記載した実施形態は発明を説明するためのもので、当業者には、特許請求の範囲において各種の変形例があり得ることが容易に理解可能である。
【符号の説明】
【０１６３】
１２Ａ    第１位置検出パターン
１２Ｂ    第３位置検出パターン
１２Ｃ    第４位置検出パターン
１２Ｄ    第２位置検出パターン
１５    バージョン情報ブロック（縦）
１６    バージョン情報ブロック（横）
１７    フォーマット情報ブロック
１８Ａ−１８Ｂ    絵柄埋込情報ブロック（縦）
１９Ａ−１９Ｂ    絵柄埋込情報ブロック（横）
【図１】
0005848464.tif 000002
【図２】
0005848464.tif 000003
【図３】
0005848464.tif 000004
【図４】
0005848464.tif 000005
【図５】
0005848464.tif 000006
【図６】
0005848464.tif 000007
【図７】
0005848464.tif 000008
【図８】
0005848464.tif 000009
【図９】
0005848464.tif 000010
【図１１】
0005848464.tif 000011
【図１２】
0005848464.tif 000012
【図１３】
0005848464.tif 000013
【図１４】
0005848464.tif 000014
【図１５】
0005848464.tif 000015
【図１６】
0005848464.tif 000016
【図１７】
0005848464.tif 000017
【図１８】
0005848464.tif 000018
【図１９】
0005848464.tif 000019
【図２０】
0005848464.tif 000020
【図２１】
0005848464.tif 000021
【図１０】
0005848464.tif 000022