(57)【特許請求の範囲】
【請求項１】
二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した二次元コードであって、
基本パターン部と、前記基本パターン部の外側に配置される周辺部と、を備え、
前記基本パターン部は、セル位置を特定するための位置検出パターンと、前記二次元コード領域内の前記基本パターン部の位置を示す基本パターン部移動情報と、を含む二次元コード。
【請求項２】
前記基本パターン部移動情報は、前記基本パターン部の所定位置からの移動量を示す基本パターン部移動量情報である請求項１に記載の二次元コード。
【請求項３】
前記基本パターン部移動情報は、前記基本パターン部の二次元コード内での位置を示す基本パターン部位置情報である請求項１に記載の二次元コード。
【請求項４】
前記基本パターン部移動情報は、前記基本パターン部の所定位置からの移動の有無を示す基本パターン部移動フラグを含む請求項１から３のいずれか１項に記載の二次元コード。
【請求項５】
請求項１記載の二次元コードの解析システムであって、
前記位置検出パターンの位置関係に基づいて前記基本パターン部の座標を求め、前記基本パターン部移動情報を検出する検出手段と、
符号化されたメッセージからなる実データを解析する実データ解析手段と、を備え、
前記実データ解析手段は、前記基本パターン部移動情報の検出結果に基づいて決定した前記実データの検出を行う二次元コードの解析システム。
【請求項６】
請求項１記載の二次元コードの作成システムであって、
前記二次元コードの周辺部のセルの配置を決定するためのスペックデータの作成手段と、
符号化されたメッセージからなる実データの作成手段と、
前記基本パターン部移動情報を配置する手段と、
少なくとも周辺部に前記実データを配置する手段と、
を含む二次元コードの作成システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、二次元コード、二次元コードの解析システム及び二次元コードの作成システムに関する。
【背景技術】
【０００２】
二次元コードは、一次元コードと比較して、狭い面積に多くの情報を持つことができるデータ効率の高いコードであり、物品管理や、携帯電話を用いたウェブ誘導など、様々な用途で広く活用されている。【０００３】
二次元コードは、撮影された画像の位置関係を検出するため、所定形状の位置検出パターンを有する。位置検出パターンは、二次元コード内で、他の部分と容易に区別可能な形状を有する。解析時は、撮影した二次元コードの画像において、位置検出パターンを検出し、位置検出パターンの位置関係に基づいて変換を行う。位置検出パターンの検出は、解析の基礎となる処理であり、位置検出パターンが認識できなかった場合には、コードは認識できないため、位置検出パターンを認識させやすい構成とすることは、コードの解析の精度にとって重要な要素となる。【０００４】
従来の二次元コードとしては、特許文献１のものが知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−２５４０３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
二次元コードを認識する場合、認識が困難な条件下でも利用できるようにすることが求められている。例えば、雑誌の見開きの内側の丸まった部分にコードを印字する場合、曲率が大きくなりすぎると内側の位置検出パターンが見つからなくなる。同様に、製造現場で、コードの所定の位置に照明があたり、常に特定の位置検出パターンが白飛びし、認識できないような場合がある。このように、予めコードの特定の箇所に読み取り困難な領域が発生することが判明している場合がある。この場合に、二次元コードの読み取りの認識精度を上げることが求められる。【０００７】
本発明は、位置検出パターンの配置の自由度を向上させ、読み取り困難な領域を避けて位置検出パターンを配置できる二次元コードの実現を目的とする。
【課題を解決するための手段】
【０００８】
請求項１の発明では、二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した二次元コードであって、基本パターン部と、上記基本パターン部の外側に配置される周辺部と、を備え、上記基本パターン部は、セル位置を特定するための位置検出パターンと、上記二次元コード領域内の上記基本パターン部の位置を示す基本パターン部移動情報と、を含む二次元コードである。
請求項２の発明では、上記基本パターン部移動情報は、上記基本パターン部の所定位置からの移動量を示す基本パターン部移動量情報である請求項１に記載の二次元コードである。
請求項３の発明では、上記基本パターン部移動情報は、上記基本パターン部の二次元コード内での位置を示す基本パターン部位置情報である請求項１に記載の二次元コードである。
請求項４の発明では、上記基本パターン部移動情報は、上記基本パターン部の所定位置からの移動の有無を示す基本パターン部移動フラグを含む請求項１から３のいずれか１項に記載の二次元コードである。
請求項５の発明では、請求項１記載の二次元コードの解析システムであって、上記位置検出パターンの位置関係に基づいて上記基本パターン部の座標を求め、上記基本パターン部移動情報を検出する検出手段と、符号化されたメッセージからなる実データを解析する実データ解析手段と、を備え、上記実データ解析手段は、上記基本パターン部移動情報の検出結果に基づいて決定した上記実データの検出を行う二次元コードの解析システムである。
請求項６の発明では、請求項１記載の二次元コードの作成システムであって、上記二次元コードの周辺部のセルの配置を決定するためのスペックデータの作成手段と、符号化されたメッセージからなる実データの作成手段と、上記基本パターン部移動情報を配置する手段と、少なくとも周辺部に上記実データを配置する手段と、を含む二次元コードの作成システムである。
【発明の効果】
【０００９】
本発明の二次元コードは、位置検出パターンの配置の自由度が高く、二次元コードを配置する場合に、読み取り困難な領域に位置検出パターンが位置する場合には、そのような読み取り困難な領域を避けて位置検出パターンを配置できる。これにより、二次元コードの読み取りの認識精度を上げることができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、第１実施形態の二次元コードの構成を示す図である。
【図２Ａ】図２Ａは、二次元コードに記録されるデータ構成例を示す。
【図２Ｂ】図２Ｂは、二次元コードに記録される実データの構成例を示す。
【図３Ａ】図３Ａは、第１実施形態の二次元コードのデータ配置の一例を示す全体構成を示す。
【図３Ｂ】図３Ｂは、第１実施形態の二次元コードのデータ配置の一例を示す図であり、一部分を拡大したブロックおよび分離パターンを示す。
【図４】図４は、第１実施形態の二次元コードの変形例を示す図である。
【図５Ａ】図５Ａは、第２実施形態を示す図（その１）である。
【図５Ｂ】図５Ｂは、第２実施形態を示す図（その２）である。
【図５Ｃ】図５Ｂは、第２実施形態を示す図（その３）である。
【図６Ａ】図６Ａは、第２実施形態の二次元コードのデータ配置の一例を示す図（その１）である。
【図６Ｂ】図６Ｂは、第２実施形態の二次元コードのデータ配置の一例を示す図（その２）である。
【図７Ａ】図７Ａは、第２実施形態の別例を示す図（その１）である。
【図７Ｂ】図７Ｂは、第２実施形態の別例を示す図（その２）である。
【図７Ｃ】図７Ｃは、第２実施形態の別例を示す図（その３）である。
【図７Ｄ】図７Ｄは、第２実施形態の別例を示す図（その４）である。
【図８】図８は、第２実施形態の別例を示す図（その５）である。
【図９Ａ】図９Ａは、二次元コードのバージョン情報に応じた変化を説明する図（その１）である。
【図９Ｂ】図９Ｂは、二次元コードのバージョン情報に応じた変化を説明する図（その２）である。
【図１０】図１０は、バージョン情報のビット列を示す図であり、各バージョンと、それを表すビット数と、ビット列と、を示す。
【図１１】図１１は、第１実施形態の二次元コードの１例を示す図である。
【図１２】図１２は、第２実施形態の１例を示す図である。
【図１３】図１３は、第２実施形態の１例を示す図である。
【図１４】図１４は、空白領域を設けた第２実施形態の二次元コードの１例を示す図である。
【図１５】図１５は、バージョン横３×縦３の二次元コードで、基本パターン部が移動しない第２実施形態の二次元コードの１例を示す図である。
【図１６】図１６は、周辺部を含む二次元コードに対して基本パターン部を中心から移動した第２実施形態の二次元コードの１例を示す図である。
【図１７】図１７は、横方向について、基本パターン部の位置を基本パターン部移動量情報でどのように表すか説明する図である。
【図１８】図１８は、バージョン横１９×縦１９の二次元コードにおいて、基本パターン部１１を移動させた例を示す図である。
【図１９】図１９は、二次元コードを作成して提供する作成システムのハードウェア構成を示す図である。
【図２０】図２０は、ユーザーが、ユーザーハードウェアを介してシステムハードウェアにアクセスし、所望の二次元コードを作成するエンコード処理の手順を示すフローチャートである。
【図２１】図２１は、実施形態の二次元コードを読み取り、二次元コードを解析する二次元コード解析装置のハードウェア構成を示す図である。
【図２２】図２２は、ユーザーが撮影した二次元コードを解析するデコード処理の手順を示すフローチャートである。
【図２３】図２３は、ユーザーが撮影した二次元コードを解析するデコード処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００１１】
図１は、第１実施形態の二次元コードの構成を示す図である。
第１実施形態の二次元コード１０は、二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置した二次元コードであり、一定形状の基本パターン部１１を有する。基本パターン部１１は、セル位置を特定するための位置検出パターン１２Ａ−１２Ｄと、スペックデータと実データからなる結合データ、を含む。スペックデータは、後述する周辺部のサイズを決定するバージョン情報を含む。結合データを表すデータ構造は、スペックデータと実データの区切りが明確である構造とする。
【００１２】
図１において、基本パターン部１１内の位置検出パターン１２Ａ−１２Ｄを除く領域、すなわち、参照番号１３で示す領域は結合データのデータ領域である。領域１３には、スペックデータと実データからなる結合データが記録される。領域１３には、さらに位置補正パターンおよび後述する分離パターンが必要により設けられる。また、領域１３には、結合データの誤り訂正を行う基本パターン部訂正データも記録される。スペックデータは、領域１３内の所定の位置に記録される。
【００１３】
結合データは、基本パターン部に記録される、スペックデータと実データを合わせたものである。結合データは、後述する周辺部２０の実データを含まない。基本パターン部誤り訂正データは、領域１３で表される所定のデータ量を訂正する情報を有する。
【００１４】
スペックデータのデータ量は、周辺部のサイズを決定するバージョン情報や、二次元コード１０における基本パターン部１１の位置情報、空白に関する情報など二次元コードの外形に影響する情報の組み合わせパターン数や、周辺部の誤り訂正のレベル情報のデータ量に応じて増減する。しかし、スペックデータのデータ量の変化量は、データ領域１３に記録できる範囲内である。領域１３の内、スペックデータを記録した残りの部分に実データが記録される。つまり、結合データのスペックデータの記録量を任意に設定可能であることから、基本パターン部１１内に記録可能な実データのデータ量は、スペックデータのデータ量に応じて増減する。第１実施形態は、後述するバージョン情報が周辺部には存在しないことを示している（バージョン横１×縦１）実施形態である。
【００１５】
図２Ａは、二次元コードに記録されるデータ構成例を示す。図２Ｂは、二次元コードに記録される実データの構成例を示す。
【００１６】
図２Ａに示すように、スペックデータはすべて基本パターン部１１内に記憶され、実データは基本パターン部１１内の残余部分に記録され、基本パターン部に納まりきらない場合には、後述する基本パターン部の周囲に形成される周辺部に記録される。スペックデータのデータ量は増減するため、基本パターン部１１内のスペックデータと実データの境界は、スペックデータのデータ量に応じて変化する。基本パターン部１１内に記録されるスペックデータと実データは、スペックデータのバイナリ列と実データのバイナリ列を結合させたデータビット列である結合データとして記録される。また、基本パターン部１１内のデータ領域１３をブロックに分割する場合、スペックデータと実データの境界がブロック内に存在する場合が起こり得る。
【００１７】
スペックデータは、周辺部におけるデータの配置に関する情報を表すデータである。スペックデータは、周辺部の形状を選択するスタイル情報、周辺部のサイズを決定する縦・横のバージョン情報、周辺部の誤り訂正データの量が可変であれば周辺部誤り訂正レベル情報、周辺部実データを配置しないブロックを決定する空白情報（データとして機能しないブロックの情報）、および基本パターン部移動情報等を有する。
【００１８】
スペックデータは、二次元コードの仕様を表すデータだが、基本パターン部１１が常に一定形状である場合、実質的に周辺部２０のスペックを定義するものとみなすことができる。ここで、一定形状とは、寸法及び形状が固定されている意味である。
【００１９】
スペックデータは、発行する二次元コード１０によりデータ量が増減し、周辺部に記録するデータ量およびデータ配置に影響する情報を有する。一方で、スペックデータは、データ量が変化するが、基本パターン部１１におけるスペックデータ内の情報はあらかじめ定められたで順に配置して記録される。基本パターン部１１のデータ領域１３の残余部分に実データが記録される。
【００２０】
特許文献１等に記載があるＱＲコード（登録商標）では、撮影画像から、位置検出パターンの画素数と、位置検出パターン同士の距離の画素数と、を計測し、そこからスペックデータであるバージョン情報を算出することも可能である。これを、ＱＲコード（登録商標）の規格（ＪＩＳ  Ｘ  ０５１０：２００４）によれば、参照復号アルゴリズムにおいて、仮のシンボル型番の求め方として、記載されている。このバージョン情報は、撮影画像の二次元コードの形状から算出しており、コードを斜め上から撮影した場合や、インキが滲んだ場合などでは、誤差が発生する。二次元コードには過酷な環境下での撮影や、劣悪な印字での認識も求められるため、この誤差を生じさせないために、バージョン情報を、読み取りに必要な冗長性とともに、二次元コードにデータとして持つことが望ましい。
【００２１】
図２Ｂはメッセージを符号化した実データの一例を示す。図２Ｂに示すように、実データは、メッセージおよびメッセージを修飾するヘッダー（メッセージ種類（メッセージのエンコード）・メッセージサイズ）を合わせたセグメントを、メッセージ数だけ並べる。メッセージは、ユーザーが二次元コードに格納するデータのことであり、複数のメッセージを格納でき、メッセージごとにセグメントを付与する。また、特殊なセグメントとして、メッセージを含まない、終端フラグだけが入ったセグメントを用意し、実データの容量が余った場合に終端フラグのセグメントを配置し、その後に埋め草を配置する。したがって、終端フラグは、メッセージの有無を示し、最後のセグメントの終端フラグはtrueであり、それ以外のセグメントの終端フラグはfalseである。
【００２２】
図２Ａに示す、スペックデータと、実データは、１ブロック当たりのデータ容量に従い、ブロック単位に分割される。同様に誤り訂正データも、ブロック単位に分割する。
【００２３】
データには誤り訂正データが付される。誤り訂正データにリードソロモン符号を使った場合、誤り訂正はワード単位で行われるため、１ワードを１ブロックとすることが望ましい。１ワードが複数のブロックにまたがる場合、１つのブロックに汚れが発生した場合でも、そのブロックが関係する全てのワードが誤り訂正の対象となり、訂正の効率が悪くなる。訂正原因となる汚れや、スポットライトによる色とびは、１箇所に集中することが多いが、１ワードを１ブロックにすることにより同時に訂正対象となるデータを１箇所にまとめる効果があり、効率的な訂正を可能にし、コードを認識させる可能性を高める。
【００２４】
ここで、スペックデータについてさらに説明する。スペックデータのデータ量は、周辺部の大きさを決定するバージョン情報により増減させることができる。すなわち、周辺部が小さい、もしくは存在しない場合には基本パターン部内のスペックデータの量を少なくし、周辺部が大きい場合には基本パターン部内のスペックデータの量を多くすることで、コードの情報量にあわせてスペックデータのデータ量を増減させることが可能である。従来例のようなスペックデータのデータ量を固定した場合、コードのサイズが小さい場合に、コードの面積当たりのスペックデータのデータ量が占める割合が大きくなるという課題もあったが、本実施形態ではこの問題を解決可能である。
【００２５】
上記のように、スペックデータは、バージョン情報を含み、バージョン情報に基づいて二次元コードの大きさ（サイズ）が決定される。例えば、バージョン情報として、コードの横のサイズを表す横バージョン情報と、コードの縦のサイズを表す縦バージョン情報という２種類のデータがあれば、コードは任意のサイズの長方形となる。バージョン情報の詳細については後述する。
【００２６】
図３Ａは、第１実施形態の二次元コードのデータ配置の一例を示す全体構成を示す。図３Ｂは、第１実施形態の二次元コードのデータ配置の一例を示す図であり、一部分を拡大したブロックおよび分離パターンを示す。
【００２７】
第１実施形態の二次元コード１０は、図３Ｂに示すように、この例では、１ブロックは横３×縦３セルを含み、分離スペース１６は１セルの幅を有する。基本パターン部１１は、破線で囲った横７×縦７ブロック（横２７×縦２７セル）のサイズで、４つのコーナーに位置検出パターン１２Ａ−１２Ｄが配置される。基本パターン部１１の位置検出パターン１２Ａ−１２Ｄ以外の領域が、基本パターン部１１のデータ領域１３である。領域１３のうち、基本パターン部１１の上側の横７×縦３ブロックの位置検出パターン１２Ｂおよび１２Ｄ以外の領域１４のブロックＡ１−Ａ１１が、結合データを記録するブロックであり、基本パターン部１１の下側の横７×縦４ブロックの位置検出パターン１２Ａおよび１２Ｃ以外の領域のブロックＢ１−Ｂ１２が、基本パターン部１１の領域１３に記録される、結合データの誤り訂正を行う基本パターン部誤り訂正データ（ワード）を記録する領域である。
ブロックは横３×縦３セルとするが、これが長方形でも、可変でも構わない。
また、セルの形状を正方形としているが、これに限られるものではない。
【００２８】
さらに、図３Ａの二次元コード１０では、各ブロックは分離パターン１６で分離されているため、４個の位置検出パターン１２Ａ−１２Ｄは、いずれもブロックより大きな面積を有する。これにより、位置検出パターンと同じパターンが、二次元コード中に出現することはなくなり、位置検出パターンの識別が容易になる。さらに、各ブロック１５は分離スペース１６により分離されているため、特に撮影画像にぼけ・ぶれがある場合の、各ブロック１５におけるセルの明暗の判定精度が向上する。
【００２９】
図３Ａの二次元コード１０の領域１３において、ブロック１８は位置補正パターンである。位置補正パターン１８は、ブロック１８の９個のセルがすべて暗であるが、位置補正パターン１８の形状はこれに限定されるものではなく、位置補正パターンとして識別できるものであればよい。
【００３０】
位置補正パターン１８は、基本パターン部の中心ブロックを（ＣＸ，ＣＹ）とした時に、（ＣＸ＋７Ｎ，ＣＹ＋７Ｍ）（Ｎ，Ｍは整数、ただし、コードをはみ出ない)のブロックに設けることが望ましい。二次元コード１０の領域を外れた部分には、位置補正ブロックを配置しない。また、位置補正パターン１８は、空白ブロックに重なる場合、位置検出パターンと重なる場合も配置しない。図３Ａでは、Ｎ＝Ｍ＝０である位置補正パターン１８を１ブロックのみに設けている。
【００３１】
位置補正パターンを含むと冗長性が高まり、認識精度向上が期待できる。位置検出パターン１２Ａ−１２Ｄの１つが汚れにより見つけられなかった場合、認識出来た位置検出パターン３個から位置補正パターン１８の位置を推測し、これを見つける。この位置検出パターン３個と位置補正パターン１個より、４個の点の組をパラメータとする二次元空間の射影変換より、二次元コード１０の各セルの計算精度が高まる。このように、図３Ａの二次元コード１０は、位置補正パターン１８を設けることにより、二次元コード１０におけるセル位置検出の精度が一層高まる。
【００３２】
位置検出パターンの配置には他にも各種の組合せが考えられる。位置検出パターンと位置補正パターンの合計が５個で、位置検出パターンが３個以下の組合せについては、いずれも、４個の位置検出パターンと１個の位置補正パターンの組合せより、汚れなどへの耐性が弱くなるが、認識は可能である。
【００３３】
位置検出パターンと、位置補正パターンは、セルの座標を特定するために使われるが、役割が異なる。位置検出パターンは、解析時に、位置検出パターンは独立して識別でき、コードの内外で同じ形状があらわれないことが望ましい。誤った位置検出パターンを検出した場合、二次元コードであるか否かを判別する必要があり、解析に時間がかかってしまう。また、識別に時間がかかる、複雑な形状や、コードの他の部分と分離困難な形状でないことが望ましい。
【００３４】
一方で、位置補正パターンの検出は、位置検出パターンにより二次元コードの位置を特定した後に行われる。位置補正パターンの場所もおおよそわかっている状態で、ある一定範囲を探索することで、位置補正パターンを見つける。位置補正パターンにより、セルの座標の計算の精度を高め、二次元コードが曲がり、セルが非均一になった場合にも認識できる可能性を高めることが可能となる。
【００３５】
図４は、第１実施形態の二次元コードの変形例を示す図である。このように、位置検出パターンの個数は１個でも構わない。ただし、位置検出パターンが１つの場合は、図４のような方向が一意に決定できる位置検出パターン５２とする必要がある。
【００３６】
図５Ａ、図５Ｂ及び図５Ｃは、第２実施形態を示す図である。第２実施形態は第１実施形態と比較し、基本パターン部の周囲に周辺部２０が設けられている点が異なる。スペックデータの増加や、実データの増加により、実データが基本パターン部に記録しきらない場合は、その実データを周辺部２０に記録する。
【００３７】
図５Ａは、正方形の基本パターン部１１を有する例を示す。図５Ｂは、二次元コード１０が、図５Ａに比べて縦長の基本パターン部１１を有し、さらに周辺部２０を有する例を示す。基本パターン部１１は、形状（正方形、長方形）、サイズなどは任意に設計可能である。
【００３８】
図５Ｃは、基本パターン部１１において、位置検出パターン１２Ａ−１２Ｄが、基本パターン部１１の境界から離れた内側、言い換えれば、コーナーでない位置に設けられている例を示す。図５Ｃに示すように、位置検出パターン１２Ａ−１２Ｄは、基本パターン部１１のコーナーや、境界に沿って設けられる必要はない。
【００３９】
図６Ａは、第２実施形態の二次元コードのデータ配置の一例を示す図（その１）である。図６Ｂは、第２実施形態の二次元コードのデータ配置の一例を示す図（その２）である。図６Ａは、第１実施形態の二次元コードのデータ配置を示した図３Ａと比較し、実データ記録ブロック１９が存在する点が異なる。
【００４０】
図７Ａ〜図７Ｄおよび図８は、第２実施形態の別例を示す図である。第１実施形態と同様に、位置検出パターンの個数は１個でも構わない。なお、図４と同様に、位置検出パターンの回転方向を一意に特定できるパターンであれば、位置補正パターン３８等の配置は必須ではない。
【００４１】
なお、第２実施形態のコードは、位置検出パターンを複数とした場合、複数の二次元コードを一括認識する際に優位である。複数の二次元コードを一括して認識する場合、１つの撮影画像内に複数の二次元コードの複数の位置検出パターンが写り込むことになる。例えば、正方形（長方形）の二次元コードで、複数個（３個以上）の位置検出パターンを二次元コードの四隅に配置した場合、同じような位置検出パターンが多数画像内に存在することになり、正しい位置検出パターンの組み合わせの絞り込みが困難となる。
【００４２】
この場合の解析処理として、位置検出パターンの組み合わせの絞り込みを容易とすれば、処理時間が短くなる。第２実施形態のようにコードのサイズを変化させても、常に基本パターン部のサイズを固定することで、同一の二次元コード内の位置検出パターン同士の距離は固定である上、バージョンが高く周辺部２０のサイズが大きい場合には、他の二次元コードの位置検出パターンとの距離が長くなる。そのため、正しい位置検出パターン同士の距離の組み合わせ以外を容易に除外できるので、判定する組み合わせ数を減らすことができる。この効果は、二次元コードの形状が正方形であれば、効果が大きいが、長方形の二次元コードであっても、組み合わせを減らす効果が得られる。
【００４３】
図９Ａ及び図９Ｂは、二次元コードのバージョン情報に応じた変化を説明する図である。第１実施形態の二次元コード１０は、図９Ａに示した基本パターン部１１のみを有する最小サイズのコードであり、基本パターン部１１のみを有する最小サイズの正方形の二次元コードを、バージョン横１×縦１と呼ぶ。
【００４４】
第２実施形態の二次元コード１０は、周辺部２０のサイズを縦方向および横方向にそれぞれ伸張できる。横バージョンが２、縦バージョンが３の場合、バージョン横２×縦３と表記する。二次元コード１０は、基本パターン部と同じ形状のバージョン横１×縦１を基準とし、バージョン数とともに二次元コード全体のサイズが増加する。バージョンが１上がるごとに、サイズが１単位大きくなる。この例ではバージョンは１から２６まで選択可能であるが、これに限定されるものではない。二次元コードは、バージョン情報を用いて、複数個の位置検出パターン間の距離を固定した状態で二次元コードのサイズを可変に設計することが可能になされている。
【００４５】
図９Ｂに示すように、横バージョンの増加では、バージョン数の増加にしたがって、周辺部２０の横方向のサイズが、左側（Ｙ２）、右側（Ｙ３）、左側（Ｙ４）、右側（Ｙ５）…という具合に交互に１単位ずつ増加する。言い換えれば、１つ増加するバージョン数が偶数の場合、左側に１単位追加する。同じく１つ増加するバージョン数が奇数の場合、右側に１単位追加する。したがって、横バージョンが奇数の場合には、周辺部２０の左右の幅は等しく、偶数の場合には、周辺部２０の左側が右側より１単位広い。
【００４６】
図９Ｂに示すように、縦バージョンの増加では、バージョン数の増加にしたがって、周辺部２０の縦方向のサイズが、上側（Ｔ１）、下側（Ｔ２）、上側（Ｔ３）、下側（Ｔ４）…という具合に交互に１単位ずつ増加する。言い換えれば、１つ増加するバージョン数が偶数の場合、上側に１単位追加する。同じく１つ増加するバージョン数が奇数の場合、下側に１単位追加する。したがって、縦バージョンが奇数の場合には、周辺部２０の上下の幅は等しく、偶数の場合には、周辺部２０の上側が下側より１単位広い。
この基本パターン部の位置は、基本パターン部の移動における、基準となる所定の位置とする。
【００４７】
バージョンの変化による、二次元コードのサイズの変化に関して、１単位ずつ交互に増やす以外にも、２単位以上を交互に増やす場合や、上下、左右にそれぞれ均等に１単位ずつ増加させる場合や、増加を上と左のみ、下や左のみなど一方向に増加させる場合があり得る。また、バージョンが小さい場合には、左右又は上下交互に１単位ずつ変化させることがある。バージョンが小さい大きい場合には、左右又は上下均等に１単位ずつのように、バージョンにより変化をつける場合など、様々な方法が考えられる。
【００４８】
以下に、バージョン情報が高くなるに従い、スペックデータの量が増加する仕組みの一例を説明する。
図１０は、バージョン情報のビット列を示す図であり、バージョン（Ｖｅｒｓｉｏｎ）と、それを表すのに必要なビット数と、ビット列と、を示す。このようなデータ構造のバージョン情報が、縦方向用および横方向用として２つ設けられる。
【００４９】
図７Ａ〜図７Ｄなどでは、二次元コードの形状が長方形であるコードを例としているが、形状を正方形に限定すれば、スペックデータのバージョン情報は１つでよい。反対に、読取可能にする二次元コードを複数の形状のコードに対応させる場合は、バージョン情報を表すデータの情報量が増え、スペックデータのバージョン情報も読み取り可能にした形状の数に応じて増やす。つまり、二次元コードの外形選択の自由度に従いバージョン情報のデータ量が増える。
【００５０】
第２実施形態の二次元コード１０は、スペック情報として、横のバージョン情報と、縦のバージョン情報の順にデータを持つ。スペックデータの先頭から２ビットを取出し、“００”、“０１”、“１０”のいずれかである場合は、横のバージョンが１−３で確定し、３ビット以降が縦のバージョン情報となる。“１１”である場合は、さらに次の３ビットを取出し、“１１１”以外の場合は、横のバージョン４−１０が確定し、６ビット以降が縦のバージョン情報となる。“１１１”である場合は、さらに次の４ビットを取出し、横のバージョン１１−２６が確定し、１０ビット以降が縦のバージョン情報となる。
【００５１】
縦のバージョンも同様に取出し、横と縦のバージョン情報を表すスペックデータのビット列以降のビットが実データとなる。したがって、図１０のバージョン情報であれば、バージョンを表すのに必要なビット数を使用すればよい。例えば、バージョン１−３を表すのであれば２ビットのみでよく、他のバージョンを表す場合に必要になる３ビット目以降を他のデータに使用できる。
【００５２】
第１実施形態は、横のバージョンのビット列が“００”で、縦のバージョンのビット列も“００”となる、最小のコードである。
このように、二次元コードのサイズが小さい場合はバージョン情報のビット数を少なくし、二次元コードのサイズが大きい場合はバージョン情報のビット数を多くすることで、バージョン情報のデータ量を固定にした場合に比べ、二次元コードのデータ量に対するバージョン情報のデータ量の割合をより一定に近づけることができる。本実施形態によれば、コードのサイズが小さい場合に、スペック情報の相対的なデータ量が大きくなり、データ効率が悪い、という問題を解消する。
【００５３】
同様に、例えば空白領域をコード内に設ける場合、この領域に関する情報を、空白領域がある場合には、空白領域があることを示す空白埋込フラグと、空白領域に関する情報を示す空白位置情報を、スペックデータに含ませる。また、空白領域がない場合には、空白領域がないことを示す空白埋込フラグのみをスペックデータに含ませて、空白領域に関する情報を省くことで、スペックデータの情報量を減らすことが可能である。さらに、空白領域がある場合の空白領域に関する情報も、バージョン情報にあわせ、ビット数を増減することで、スペックデータの情報量の効率を向上できる。
【００５４】
以下、自由度を持たせた二次元コードの例を示す。自由度を持たせることにより、スペックデータとして機能性を持たせるための情報が追加され、基本パターン部に記録可能な実データが減少することになる。
自由度は、機能と、機能の変化範囲の、２つが影響する。
機能として、例えば、二次元コードのサイズの変化として、正方形の場合と、長方形の場合を比較する。正方形は１辺の長さという１つのパラメータで表せるが、長方形は縦横の辺の長さという２つのパラメータが必要である。よって、正方形は１個の、長方形は２個の機能を有するといえる。二次元コードが空白領域を持つことを可能にした場合には、さらに機能が追加される。
機能の変化範囲として、例えば、図７Ａ〜図７Ｄの二次元コードでは、バージョンが縦と横で独立して１−２６の範囲で選択可能であるように、各機能でそれぞれ数パターンの変化がある。
よって、自由度は、機能と、機能の変化範囲を、掛けあわせたものといえる。この自由度が大きいほど、ユーザーが選択できる、二次元コードの形状の選択肢が増え、１種類のコードで、より多くのユーザーのニーズに合わせることが可能になる。
二次元コードに機能性を持たせることにより、二次元コードの中にキャラクターなどの絵柄を埋め込み可能な領域を提供して、二次元コードのデザイン性を高めることや、フォルダの背表紙などの限られたスペースにあわせて二次元コードの形状を変化させる、といったことが可能になる。
【００５５】
図１１は、第１実施形態の二次元コードの１例を示す図である。
図１２および図１３は、第２実施形態の例を示す図である。
スペックデータは、基本パターン部移動情報を持つようにしてもよい。バージョン情報により基本パターン部の外側に縦・横に順次周辺部を付加する場合、基本パターン部は二次元コードのほぼ中心に位置するケースが多い。しかし、二次元コードの中心以外の任意の位置に基本パターン部を配置することが要望される場合がある。基本パターン部移動量情報は、二次元コード内の基本パターン部の基準となる所定の位置からの移動量を指定する情報である。基本パターン部移動情報の詳細例については後述する。
【００５６】
本例では、スペック情報として、周辺部２０における周辺部誤り訂正レベル情報、および周辺部２０における空白領域を示す空白情報、および基本パターン部１１の移動に関する情報を示す基本パターン部移動情報を含む。また、空白情報は、空白を埋め込むか否かを示す空白埋込フラグと、空白を埋め込む場合には空白の領域を示す空白位置情報、を含む。また、基本パターン部移動情報は、基本パターン部１１を移動するか否かを示す基本パターン部移動フラグと、基本パターン部１１を移動する場合には所定の位置からの移動量を表す基本パターン部移動量情報、を含む。
【００５７】
スペック情報を表すビットデータであるスペックデータの、第２実施形態での一例を示す。まず、横のバージョン情報が入る。横のバージョン情報は１から２６までの値となり、２から９ビットで表される。次に、同様の方法で縦のバージョン情報が入る。次に、周辺部誤り訂正レベル情報が入る。周辺部誤り訂正レベル情報は２ビットで表され、４種類の周辺部誤り訂正レベルを取り得る。周辺部誤り訂正レベル情報に関しては後述する。次に、空白領域の有無を表す空白埋込フラグと、基本パターン部の所定位置からの移動の有無を表す基本パターン部移動フラグが入る。空白埋込フラグおよび基本パターン部移動フラグは、１ビットで表され、１（有り）か０（無し）である。次に、空白埋込フラグが１の時には、空白の位置情報を表す空白位置情報が基本パターン部移動フラグの後ろに追加される。次に、基本パターン部移動フラグが１の時は、基本パターン部移動量情報が、空白埋込フラグが１の時には空白位置情報の後に追加され、空白埋込フラグが０の時には基本パターン部移動フラグの後に追加される。これらの情報の後に、基本パターン部に格納可能な領域が残っている場合、実データが続いて格納される。
【００５８】
このスペック情報の種類や、順番、データ量、フラグの扱いに関して、上記に限られるものではないが、エンコードと、デコードにおいて、スペックデータを同じ解釈にする必要がある。
【００５９】
空白情報は、空白領域の有無を示す、空白埋込フラグと、空白の領域情報を表す、空白位置情報からなる。空白埋込フラグは、１（有り）と０（無し）の状態を持つ１ビットのデータであり、１の時にだけ空白位置情報があり、無しの場合には空白位置情報を省略できる。これにより空白が無いときの情報を減らすことができ、有りの場合にのみ空白位置情報をスペックデータに入れる。空白埋込フラグは、空白の有無以外に、空白領域の個数を表しても良い。例えば、空白埋込フラグは、２ビットとしておき、空白位置の個数を表す０から３の値を持つ。０の場合は、空白位置情報が無く、３の場合は、空白位置情報を３個連続してスペックデータに入れる。
【００６０】
空白位置情報は、ブロック単位で、サイズ・オフセットを指定し、この情報を空白の位置を示す情報として保持する。ブロックの座標を空白領域の左上隅のブロックを原点としてオフセットを（ｎ，ｍ）と表現する。コードの横ブロック数をｂｌＷ個、縦ブロック数をｂｌＨ個としたとき、空白領域の最大横ブロック数はｂｌＷ個、最大縦ブロック数はｂｌＨ個となる。
【００６１】
図１４は、空白領域を設けた第２実施形態の二次元コードの１例を示す図である。
図１４の空白領域は、オフセットが（１，１）であり、サイズは横ブロック数が９個、縦ブロック数が１個と表せる。ただし、空白ブロックが基本パターン部にかかってはならない。
【００６２】
空白位置情報は、その周辺部のサイズに合わせて、データ量を可変にできる。
バージョンが横９×縦９である場合、コードの横ブロック数が１５個であり、コードの縦ブロック数が１５個となる。取りうるオフセットの範囲が（０、０）から、（１４、１４）まで、縦横それぞれ１５通りが考えられる。最大横ブロック数は１５個、最大縦ブロック数は１５個なる。空白位置情報としては、縦横の各オフセットが４ビットずつ、縦横の各ブロック数が４ビットずつの、計１６ビット必要となる。
【００６３】
同様に、コードが縦横に可変した場合、バージョン情報からバージョンが横１１×縦１１である場合、取りうるオフセットの範囲が（０、０）から、（１６、１６）であり、縦と横の最大ブロック数が１７通りであるため、空白位置情報としては、縦横の各オフセットが５ビットずつ、縦横のサイズが５ビットずつの、計２０ビット必要となる。
このように、空白領域の個数、空白領域の範囲、コードのサイズに応じて、必要とするデータ量を増減することができる。
【００６４】
空白位置情報は、領域を全て明のセルとする範囲をブロック単位で指定する。認識対象とはならないため、エンドユーザーは絵柄、写真、文字をこの領域に入れて、コード情報の可視化や、二次元コードのデザイン性向上に役立てることができる。空白領域内は、解析時には無視されるので、埋め込まれた写真・絵柄は、解析に影響しない。
【００６５】
空白領域を表す方法としては、以下のような方法が考えられる。
（１）ブロックの開始座標と、ブロック幅・高さと指定する方法
（２）ブロックの開始座標と、終点座標を指定する方法
（３）数点のブロック座標を示し、その座標の内側を空白とする方法
（４）これらの指定の単位が、ブロックではなく、セルで指定する方法
（５）幾つか空白領域を予約しておき、それをコード内で指定する方法
（６）（１）−（５）に加え、拡大縮小率を変更させる方法
さらに、複数の空白領域を設ける場合には、それぞれの領域で異なる方法を行うようにしてもよい。
【００６６】
図１５は、バージョン横３×縦３で、基本パターン部を移動しない、第２実施形態の二次元コードの１例を示す図である。
【００６７】
図１６は、バージョン横３×縦３であり、周辺部を含む二次元コード１０に対して基本パターン部１１を中心から移動した第２実施形態の二次元コードの１例を示す図である。図１６は、図１５と比較し、基本パターン部が、右に１ブロック移動しており、上下方向は移動していない。基本パターン部１１は、二次元コード１０の領域に対して中心を基準位置とすることに限定されない。基本パターン部移動情報は、基本パターン部１１が、二次元コード１０の領域に対してどのように配置されるかを示す情報で、横方向と縦方向についてそれぞれ決定される。
【００６８】
基本パターン部移動情報は、移動の有無を示す、基本パターン部移動フラグと、基本パターン部の基準となる所定位置からの移動量を表す、基本パターン部移動量情報からなる。第２実施形態における所定位置は、図９Ｂの基本パターン部の位置とする。基本パターン部移動フラグは、１（移動有り）と０（移動無し）の状態を持つ１ビットのデータであり、１の時にだけ基本パターン部移動量情報があり、０（無し）の場合には基本パターン部移動量情報を省略できる。これにより基本パターン部を移動させない場合の情報を減らすことができ、移動させる場合にのみ基本パターン部移動量情報をスペックデータとして記録する。基本パターン部移動量情報は、基本パターン部が移動しない場合の基本パターン部の位置を基準とした、移動量を表す。
【００６９】
図１７は、基本パターン部１１の位置を基本パターン部移動情報でどのように表すか説明する図である。
図１７に示すように、バージョン１の時には基本パターン部１１のみであり、バージョンが増加するにしたがって左側、右側にブロック列が追加される。基本パターン部１１が移動可能な位置は、バージョン数に制限される。例えば、バージョン数が２であれば、基本パターン部１１が移動可能な位置は、移動しないか、左側に１ブロック列移動するかである。バージョン数が３であれば、基本パターン部１１が移動可能な位置は、移動しないか、左側に１ブロック列移動するか、右側に１ブロック列移動するか、である。言い換えれば、バージョン数が１増加するのに対応して基本パターン部１１が移動可能な位置が１つ増加するということである。したがって、基本パターン部移動量情報を表すのに必要なデータ量は、バージョン数に応じて変化する。
【００７０】
図１７において、横方向のバージョン数が６の場合に、−３から２の数字は、基本パターン部１１のブロック単位での基本パターン部移動量情報を示示す。横方向のバージョン数が、０は移動しない場合を、マイナスの値は左側への基本パターン部移動量情報を、プラスの値は右側への基本パターン部移動量情報を示す。図１５の移動量は０であり、図１６の移動量は１となる。ただし、図１５では基本パターン部が所定位置から移動していないため、スペックデータとしては、基本パターン部移動フラグを０とすれば、基本パターン部移動量情報は省略できる。
【００７１】
基本パターン部が移動する場合、基本パターン部移動情報としては、基本パターン部移動フラグが１となり、基本パターン部移動量情報として、横の移動量を表す情報と、縦の移動量を表す情報をスペックデータに記録する。
【００７２】
図１８は、バージョン横１９×縦１９の二次元コード１０において、基本パターン部１１を移動させた例を示す図である。
図１８において、参照番号１１は、移動していない基本パターン部１１を示し、この場合の基本パターン部位置は、横が０で、縦が０である。参照番号１１Ａで示す基本パターン部１１の基本パターン部位置は、横が−８で、縦が−８である。参照番号１１Ｂで示す基本パターン部１１の基本パターン部位置は、横が９で、縦が−９である。参照番号１１Ｃで示す基本パターン部１１の基本パターン部位置は、横が−５で、縦が４である。参照番号１１Ｄで示す基本パターン部１１の基本パターン部位置は、横が０で、縦が９である。参照番号１１Ｅで示す基本パターン部１１の基本パターン部位置は、横が９で、縦が９である。
【００７３】
ここでは基本パターン部移動の単位をブロックで表したが、セル単位でも構わない。
また、移動の単位を１ではなく、２より大きい値にしてもよい。この場合、図１８のバージョン横１９×縦１９の二次元コード１０では、横１９通り、縦１９通りの組み合わせであったが、移動の単位を２ブロックずつにすることで、横９通り、縦９通りの組み合わせとなり、これによりスペックデータの情報量を下げることができる。
【００７４】
また、基本パターン部移動情報として、二次元コードの中心からの移動量を示す基本パターン部移動量情報を含めたが、基本パターン部移動量情報の代わりに二次元コード内の基本パターン部の位置を表す基本パターン部位置情報を用いてもよい。
基本パターン部位置情報は、コード左上のブロック座標（０、０）に基本パターン部１１の左上のコーナーがある場合を基準とした場合の、基本パターン部１１のブロック座標とするここができる。例えば、図１６では、基本パターン部１１の左上のコーナーがブロック座標（２、１）にあるため、基本パターン部位置情報として、横に２ブロック、縦に１ブロック、を表すデータが、スペックデータに記録される。
【００７５】
また、基本パターン部位置情報の他の表現方法として、基本パターン部の移動のパターンをあらかじめ定義しておく方法もある。例えば、基本パターン部の移動パターンとして “左上”、“右上”、“左下”、“右下”の４通りあらかじめ定義しておき、基本パターン部位置情報として２ビットを持たせ、それぞれ０−３の値を移動のパターンに割り振っておく。図１８の二次元コード１０では、基本パターン部位置情報が示す値が、“左上”の場合は、横が−９で、縦が−９となり、“右下”の場合は、横が９で、縦が９となる。
【００７６】
この方法の利点として、基本パターン部移動量情報を常に２ビットに抑えることができ、スペックデータを小さくできる。
さらに、上記移動パターンに“真ん中”を追加した５通りとし、加えて基本パターン部移動フラグをなくすことで、基本パターン部移動情報が常に３ビットで示されることになり、少ない情報量で基本パターン部の移動が実現できる。
【００７７】
スペックデータには、周辺部誤り訂正レベル情報を持たせることができる。周辺部実データの誤り訂正量を、周辺部誤り訂正レベルとして、周辺部誤り訂正レベル情報に記録できるようにする。例えば、周辺部誤り訂正レベルは、１０％、２０％、３０％、４０％の４通りから選択させるようにする。これにより、撮影条件の悪い環境で用いるコードを認識させる場合には誤り訂正レベルを上げ、そうでない場合は下げるということが可能になる。この場合、スペックデータにおける周辺部誤り訂正レベル情報として、２ビットを確保するようにする。
周辺部誤り訂正レベルは、周辺部実データのデータ量に影響し、周辺部誤り訂正レベルが低ければデータ量が多くなり、周辺部誤り訂正レベルが大きければデータ量が少なくなる。
【００７８】
周辺部誤り訂正レベル情報は、周辺部が存在しない場合（バージョンが横１×縦１）は不要であり、スペックデータから省くことができ、その分実データの量を増やすことができる。バージョン情報と、空白情報と、位置補正パターンと、により、周辺部でのデータを持つブロックの数が決定する。これにより、周辺部の記録できるデータの量が決まる。この周辺部のデータ量と、周辺部誤り訂正レベル情報より、周辺部実データと、周辺部誤り訂正データの、データ量が決まる。
【００７９】
周辺部のデータの配置は、第２実施形態の１例では、例えば、周辺部実データを、左上から右方向へ順番にブロックごとに記録し、１行記録し終わったら、１ブロック下の左から右方向へ順番に記録する。周辺部実データの後に、周辺部誤り訂正データを記録する。その場合に、基本パターン部、空白領域、位置補正パターンにはデータを記録しない。
上記は一例であり、周辺部のデータの配置の方法は、あらかじめ決められていればよい。
【００８０】
また、第２実施形態の１例として、スペックデータは、スタイル情報を持つようにしてもよい。この場合、スタイル情報が、縦横バージョン可変、縦のみバージョン可変、横のみバージョン可変、バージョン不変（周辺部なし）の４つの状態を保持可能だとする。それにより、バージョン情報のデータ量を変化させる。スタイル情報の内容に従い、バージョン情報のデータ量を、縦横バージョン可変の場合には縦横バージョンの２つの値を保持し、縦のみバージョン可変、もしくは横のみバージョン場合には１つの値を保持し、それ以外はバージョン情報を無しにする、というように、スタイル情報によりバージョン情報量を可変にでき、また自由度の高いコード形状を許容する。
【００８１】
また、それ以外にもスタイル情報は、丸、星、など様々な形状が考えられ、コードを用途に合わせ自由に形状を変化させることが可能になる。
【００８２】
また、周辺部は基本パターン部に隣接する必要は無い。よって、基本パターン部から離れた場所に様々な周辺部を置いてもよい。よって、周辺部は、基本パターン部の形状に関わらず、自由な形状をとることも可能である。
また、周辺部は基本パターン部から独立している。よって、周辺部と基本パターン部とでは、セルの形状を同じ正方形にする必要はない。また、基本パターン部と、周辺部でセルのサイズを同じにする必要もない。例えば、基本パターン部のセルを認識させやすくするため、周辺部のセルよりも大きくしてもよい。また、周辺部のブロックが持つデータ量は、基本パターン部のブロックが持つデータ量と同じにする必要はない。また、周辺部のブロックと、基本パターン部のブロックとは、ブロックの形状が異なっていても良い。
【００８３】
以上の通り、第１実施形態、第２実施形態の二次元コードは、スペックデータのデータ量は、スペックデータの内容に応じて増減可能であり、基本パターン部のスペックデータを記録した残りのデータ領域には、実データが記録されるので、データ効率の低下が抑制できる。また、二次元コードに持たせる外形選択の自由度に応じて、基本パターン部に記録可能なスペックデータのデータ量を増減させることが可能なので、様々な機能性を持った二次元コードに柔軟に対応可能である。また、スペックデータのデータ量を周辺部のサイズと比例関係とすることで、二次元コードのサイズに適合したスペックデータのデータ量とすることが可能である。なお、第２実施形態において、基本パターン部の周囲に周辺部を設ける構成は、スペックデータのデータ量を増減可能にせず、基本パターン部には実データを含まなくても実現できる。また、第２実施形態において、位置検出パターンが複数である場合、複数の位置検出パターン間の距離が一定であることから、複数のコードを一括して認識する処理が優れている効果は第１実施形態と同様に得られる。
【００８４】
第１実施形態や第２実施形態で用いる位置検出パターンは、正方形の枠内に正方形を有する形状の第１位置検出パターン１２Ａと、第１位置検出パターン１２Ａより小さな正方形の枠形状の第２位置検出パターン１２Ｄと、長方形の第３位置検出パターン１２Ｂおよび第４位置検出パターン１２Ｃと、を有することが好ましい。４個の位置検出パターン１２Ａ−１２Ｄは、基本パターン部１１の四隅（４つのコーナー）に配置されている。この場合、第１位置検出パターン１２Ａと第２位置検出パターン１２Ｄは、対角上に配置され、第３位置検出パターン１２Ｂと第４位置検出パターン１２Ｃは、対角上に配置され、第３位置検出パターン１２Ｂおよび第４位置検出パターン１２Ｃの長辺は、第１位置検出パターン１２Ａの辺と同じ長さであり、第３位置検出パターン１２Ｂおよび第４位置検出パターン１２Ｃの短辺は、第２位置検出パターン１２Ｄの辺と同じ長さであり、第３位置検出パターン１２Ｂおよび第４位置検出パターン１２Ｃの短辺の一方は、第１位置検出パターン１２Ａの辺の延長上に配置され、第３位置検出パターン１２Ｂおよび第４位置検出パターン１２Ｃの長辺の一方は、第２位置検出パターン１２Ｄの辺の延長上に配置されることが望ましい。図１に示した位置検出パターン１２Ａ−１２Ｄは、それぞれ単独で容易に識別することができ、一部の位置検出パターンが汚れ等で識別できない場合でも、識別できた残りの位置検出パターンの組から、二次元コードにおけるセルの座標位置を容易に求めることができる。
【００８５】
位置検出パターンは、第１実施形態、第２実施形態に示した例以外にも各種の変形例が可能である。例えば、位置検出パターンの個数は、１個以上であり、上限は無いが、現実的には最大４個程度で、それ以上の個数であっても効果が少なく、逆にデータ効率が低下する。また、複数個の位置検出パターンの形状が同じ場合と、少なくとも一部が異なる場合があり得る。さらに、基本パターン部１１における位置検出パターンの位置は、基本パターン部１１のコーナーに限定されず、１個または複数の位置検出パターンの一部またはすべてが基本パターン部１１内のコーナー以外に位置してもよい。言い換えれば、基本パターン部１１内で、位置検出パターンと、データ領域１３の位置関係は、任意に決定できる。
【００８６】
第１実施形態、第２実施形態に示した以外の代表的な例としては、異なる形状の３個の位置検出パターンと１個の位置補正パターンの組合せ、位置検出パターンと位置補正パターンの合計が４つ以上の組合せ、１個の位置検出パターンと１個の位置補正パターンの組合せ、等が考えられる。異なる形状の３個の位置検出パターンと１個の位置補正パターンの組合せであれば、二次元コードにおけるセルの座標位置を比較的容易に求めることができる。
【００８７】
次に、実施形態の二次元コードを作成する処理（エンコード処理）について説明する。
図１９は、二次元コードを作成して提供する作成システムのハードウェア構成を示す図であり、クライアント・サーバ構成の例を示す。
【００８８】
作成システムは、仕様を決めて二次元コードの作成を依頼するユーザーが操作するユーザーハードウェアと、依頼された二次元コードを作成して提供するシステムハードウェアと、を有する。
【００８９】
ユーザーハードウェアは、コンピュータ等のユーザー処理装置７１と、磁気ディスク等の記憶装置７２と、を有する。
システムハードウェアは、コンピュータ等のシステム処理装置７５と、磁気ディスク等の記憶装置７６と、を有する。
【００９０】
ユーザー処理装置７１とシステム処理装置７５は、通信回線等で接続され、通信可能に構成されている。
ここでは、印刷は、ユーザー側で行うが、システム側や他の印刷所で行うようにしてもよい。二次元コードを印刷する媒体はどのようなものでもよく、例えば、紙、樹脂板、筐体表面などである。ここで、媒体として、埋め込む絵柄があらかじめ印刷されているものでもよく、印刷されている埋込絵柄が二次元コードの絵柄領域に入るようにセッティングした上で二次元コードを印刷する。
【００９１】
印刷装置は、これらの媒体に二次元コードを印刷可能なものであればよく、例えば簡易プリンター、精密プリンター、印刷装置等であり、モノクロ印刷だけでなく、カラー印刷可能なものでもよい。また、作成した二次元コードは、印刷せずに、通信回線を介してユーザーに二次元コードのデータとして送信されてもよい。ユーザーは、必要に応じて第三者のディスプレイ等に、作成した二次元コードを表示するようにデータを送信する。
【００９２】
なお、図１９はクライアント・サーバ構成の作成システムの例を示すが、作成システムはこれに限定されず、例えば。クライアントＰＣ上のエンコードソフトウェアで発行し、ＵＳＢ接続したプリンターから発行する構成や、ハンディータイプの端末・プリンターから発行する構成など、各種の変形例があり得る。また、二次元コードを作成する処理は、コンピュータ実行可能なプログラムとして、コンピュータが読み取り可能な非一時的な記憶媒体に記録されていてもよい。
【００９３】
図２０は、ユーザーが、ユーザーハードウェアを介してシステムハードウェアにアクセスし、所望の二次元コードを作成するエンコード処理の手順を示すフローチャートである。ここでは、バージョン横１×縦１より大きなバージョンの二次元コードを作成する場合を示しており、バージョン横１×縦１の場合には周辺部が存在しないので、それに関係する処理が実質的になくなる。
【００９４】
ステップＳ１０では、ユーザーがエンコードのメイン処理を開始する。
ステップＳ１１では、ユーザーが二次元コードに記録するメッセージを入力する。
ステップＳ１２では、ユーザーが、二次元コードのバージョン情報と、周辺部誤り訂正レベルと、空白情報と、基本パターン部移動情報と、を入力する。これに応じて、ユーザー処理装置７１は、システム処理装置７５に、入力されたメッセージと、バージョン情報と、周辺部誤り訂正レベルと、空白情報と、基本パターン部移動情報と、を通知する。
【００９５】
ステップＳ１３では、システム側で、送信された情報に基づいて基本パターン部と周辺部の配置を決定する。
ステップＳ１４では、送信された情報に基づいてスペックデータのデータ量を決定する。
【００９６】
ステップＳ１５では、システム側で、送信された情報に基づいて空白領域のブロックの配置と数を決定する。
ステップＳ１６では、位置補正パターンのブロックの配置とブロック数を決定する。
ステップＳ１７では、周辺部誤り訂正レベルから、周辺部誤り訂正データのブロック数を決定する。
【００９７】
ステップＳ１８では、二次元コードに記録可能な実データのサイズを決定する。
ステップＳ１９では、二次元コード内でメッセージを表現するのに必要な実データのサイズを計算する。
【００９８】
ステップＳ２０では、Ｓ１８で求められた二次元コードのデータサイズに、Ｓ１９の実データが入るか、データサイズが不足して入らないかを判定し、データサイズが不足であれば、ユーザー処理装置７１にデータサイズが不足することを送信し、データサイズが足りていればステップＳ２２に進む。
【００９９】
ステップＳ２１では、ユーザー処理装置７１がユーザーに、入力された二次元コードの形状では入力されたメッセージを表現するのにデータサイズが不足であるというエラー発生を通知して、終了する。
ステップＳ２２では、スペックデータを作成する。
【０１００】
ステップＳ２３では、実データを作成する。
ステップＳ２４では、スペックデータと実データを結合する。
ステップＳ２５では、基本パターン部に記録可能なスペックデータと実データ、基本パターン部に配置する。
Ｓ２６では、基本パターン部に記録されたデータから、基本パターン部誤り訂正データを計算し、配置する。
【０１０１】
ステップＳ２７では、基本パターン部に入りきらなかった実データを周辺部実データとして周辺部に配置する。
ステップＳ２８では、周辺部実データから、周辺部誤り訂正データを計算し、配置する。
ステップＳ２９では、二次元コードの情報を、画像としてユーザー処理装置７１に出力する。
ステップＳ３０で、エンコードのメイン処理が終了する。
【０１０２】
図２１は、第２実施形態の二次元コードを読み取り、二次元コードを解析する二次元コード解析装置のハードウェア構成を示す図である。
【０１０３】
二次元コード解析装置は、読み取り部８０と、コンピュータ（二次元コード解析処理部）８４と、ディスプレイ８５と、通信インターフェース８６と、を有する。読み取り部８０は、レンズ８１と、イメージセンサ８２と、アナログ・デジタル変換器（ＡＤ）８３と、を有し、撮影した二次元コードのデジタル画像データをコンピュータ８４に出力する。図２１の二次元コード解析装置は、広く使用されており、近年は携帯端末も二次元コード解析装置と同様の機能を実現している。また、二次元コードを解析する処理は、コンピュータ実行可能なプログラムとして、コンピュータが読み取り可能な非一時的な記憶媒体に記録されていてもよい。
【０１０４】
図２２および図２３は、ユーザーが撮影した二次元コードを解析するデコード処理の手順を示すフローチャートである。このデコード処理は、１画面に複数の第２実施形態の二次元コードが写し込まれている場合を想定している。デコード処理は、解析メイン処理と、情報取り出し処理からなる。まず、解析メイン処理を説明する。
【０１０５】
ステップＳ１０１では、解析のメイン処理を開始する。
ステップＳ１０２では、二次元コードの撮影画像を入力する。
【０１０６】
ステップＳ１０３では、入力された撮影画像の二値画像を作成する。二値化の方法は、入力された撮影画像がＲＧＢ画像などのカラー画像であれば、一旦グレースケール画像に変換し、画像内の最大輝度値と最小輝度値の平均を閾値とし、閾値以上であれば明、未満であれば暗とする。カラー画像からグレースケール変換するには、各画素のＲＧＢの値を用いて、輝度(brightness)＝０．２９９Ｒ＋０．５８７Ｇ＋０．１１４Ｂの変換式にしたがって変換する。カラー画像へのグレースケール画像への変換方法、さらに二値化画像への変換方法は、様々な方法が提案されており、上記変換方法に限られない。
【０１０７】
ステップＳ１０４では、位置検出パターン候補を検出する。具体的には、二値化画像を走査する際に、走査方向の横方向、および縦方向に、暗明暗、もしくは暗明暗明暗が、一定の比率であらわれるパターンを検出する。
ステップＳ１０５では、４種の位置検出パターンの組合せを作成し、検討していない４種の位置検出パターンの組合せが残っているか判定し、残っていればステップＳ１０６に進み、残っていなければステップＳ１１０に進む。
ステップＳ１０６では、２点の位置検出パターンの間の距離が、適切でない値となるような組み合わせが１組でもある場合には、正しい組合せではないと判定できる。このように、位置検出パターン同士の距離に基づいて誤検出を除外する。
【０１０８】
ステップＳ１０７では、組合せた位置検出パターンについて、同一の二次元コードの位置検出パターンであるとして情報の取り出しを行う。この処理については、図２３を参照して後述する。
【０１０９】
ステップＳ１０８では、情報取り出しに成功したかの結果に応じて、成功した場合にはステップＳ１０９に進み、失敗した場合には失敗した位置検出パターンの組合せを除外する処理を行った後、ステップＳ１０５に戻る。
【０１１０】
ステップＳ１０９では、情報の取り出しに成功した位置検出パターンの組合せをリストアップする。
ステップＳ１１０では、データの取り出しに成功した二次元パターンに使われた４個の位置検出パターン候補を除外し、ステップＳ１０５に戻る。なお、データの取り出しに成功した二次元パターンの範囲に、使用していない位置検出パターン候補がある場合には、それも候補から除外する。
【０１１１】
ステップＳ１０５からＳ１１０を繰り返すことにより、写し込まれた二次元コードの位置検出パターン候補の４個の組み合わせについて同一の二次元コードのものであるかの判定が終了する。
【０１１２】
ステップＳ１１１では、検討されていない３個の位置検出パターン候補の組み合わせが残っているか判定し、残っていなければステップＳ１２０に進み、残っていればステップＳ１１２に進む。
【０１１３】
ステップＳ１１２では、３個の位置検出パターン候補から位置補正パターンの位置を推定する。
【０１１４】
ステップＳ１１３では、位置補正パターンがあるか判定し、有ればステップＳ１１５に進み、無ければステップＳ１１４に進む。
ステップＳ１１４では、３個の３個の位置検出パターン候補から１個の位置検出パターン候補を補完し、ステップＳ１１５に進む。
ステップＳ１１５では、２点の位置検出パターンの間の距離が、適切でない値となるような組み合わせが１組でもある場合には、正しい組合せではないと判定できる。位置補正パターンなどで補完した場合にも、欠けていることが想定される位置検出パターンの座標を推定し、距離を検証する。
【０１１５】
ステップＳ１１６では、組合せた位置検出パターンについて、同一の二次元コードの位置検出パターンであるとして情報の取り出しを行う。この処理については、図２３を参照して後述する。
【０１１６】
ステップＳ１１７では、情報取り出しに成功したかの結果に応じて、成功した場合にはステップＳ１１８に進み、失敗した場合には失敗した位置検出パターンの組合せを除外する処理を行った後、ステップＳ１１１に戻る。
【０１１７】
ステップＳ１１８では、情報の取り出しに成功した位置検出パターンの組合せをリストアップする。
ステップＳ１１９では、データの取り出しに成功した二次元パターンに使われた３個の位置検出パターン候補を除外し、ステップＳ１１１に戻る。なお、データの取り出しに成功した二次元パターンの範囲に、使用していない位置検出パターン候補がある場合には、それも候補から除外する。
【０１１８】
ステップＳ１１１からＳ１１９を繰り返すことにより、写し込まれた二次元コードの位置検出パターン候補の３個の組み合わせについて同一の二次元コードのものであるかの判定が終了する。
【０１１９】
ステップＳ１２０では、リストアップされた位置検出パターンのメッセージを出力し、ステップＳ１２１に進む。
ステップＳ１２１では、解析メイン処理を終了する。
【０１２０】
次に図２３を参照してステップＳ１０７およびＳ１１６の情報取り出し処理を説明する。
ステップＳ２００で、情報取り出し処理を開始する。
ステップＳ２０１で、位置検出パターンから、基本パターン部に属するブロック内のセルの座標を計算する。
【０１２１】
ステップＳ２０２で、結合データと、基本パターン部誤り訂正データを取り出す。
ステップＳ２０３で、基本パターン部誤り訂正データによる誤り検出処理を行い、誤りがある場合にはステップＳ２０４に進み、誤りが無ければステップＳ２０７に進む。
【０１２２】
ステップＳ２０４では、ブロック内のセルデータから誤り訂正可能であるか判定し、誤り訂正が不可能であればステップＳ２０５に進み、誤り訂正が可能であればステップＳ２０６に進む。
ステップＳ２０５では、二次元コードからの情報の取出しに失敗ことを通知し、終了する。
【０１２３】
ステップＳ２０６では、結合データの誤り訂正処理を行う。
ステップＳ２０７では、結合データから、スペックデータを取り出し、二次元コードのバージョン、周辺部誤り訂正レベル、空白情報、基本パターン部移動情報を特定する。
【０１２４】
ステップＳ２０８では、スペックデータを元に、基本パターン部の周辺部の位置補正パターンを計算する。
ステップＳ２０９では、スペックデータを元に、周辺部の位置補正パターンと、空白領域と、を除く周辺部実データと、周辺部誤り訂正データのブロックを特定する。
ステップＳ２１０では、周辺部実データと、周辺部誤り訂正データのブロック数の合計を計算し、これと周辺部誤り訂正レベルから、それぞれのブロック数を計算する。
【０１２５】
ステップＳ２１１では、周辺部に属するブロック内のセルの座標を求める。
ステップＳ２１２では、周辺部実データと周辺部誤り訂正データを取り出す。
【０１２６】
ステップＳ２１３では、周辺部誤り訂正データにより誤りを検出し、誤りがあればステップＳ２１４に進み、誤りが無ければステップＳ２１７に進む。
ステップＳ２１４では、誤り訂正可能であるか判定し、誤り訂正が不可能であればステップＳ２１５に進み、誤り訂正が可能であればステップＳ２１６に進む。
【０１２７】
ステップＳ２１５では、二次元コードからの情報の取出しに失敗ことを通知し、終了する。
ステップＳ２１６では、データの誤り訂正処理を行う。
ステップＳ２１７では、基本パターン部のデータからスペックデータを除いた実データと、周辺部の実データを連結する。
【０１２８】
ステップＳ２１８では、実データを解析する。
ステップＳ２１９では、メッセージを取り出す。
ステップＳ２２０では、二次元コードからの情報の取出しに成功したので、メッセージを表示して終了する。
【０１２９】
以上説明したように、本発明の二次元コードは、位置検出パターンを含む基本パターン部を、二次元コード内の任意の位置に移動することで、汚れなどが発生しづらい箇所に、位置検出パターンを移動させることが可能になる。例えば、折り目がつきやすい部分、人が触れる箇所、本の中とじ部分など曲げが発生する箇所に位置検出パターンを配置しないことも可能となる。これにより、位置検出パターンが見つからないことにより認識できない場合を減らすことができ、その結果認識精度が高まる。
【０１３０】
位置検出パターンを含む基本パターン部の外側に周辺部を設け、周辺部を含む二次元コードの領域内で基本パターン部を移動することにより位置検出パターンを二次元コード内で移動するという機能を実現するには、スペックデータのデータ量が増加する。そこで、本発明の二次元コードでは、基本パターン部に記録するスペックデータのデータ量を仕様に応じて可変とし、基本パターン部に残余部分があれば実データを記録することにより、スペックデータのデータ量が少ない場合のデータ効率の低下を抑制している。なお、基本パターン部の外側に周辺部を設け、周辺部を含む二次元コードの領域内で基本パターン部を移動することにより位置検出パターンを二次元コード内で移動するという機能自体は、このようなデータ構造に限定されず、これまでの一般的な二次元コードのデータ構造でも実現できる。
【０１３１】
以上、本発明の実施形態を説明したが、記載した実施形態は発明を説明するためのもので、当業者には、特許請求の範囲において各種の変形例があり得ることが容易に理解可能である。
【符号の説明】
【０１３２】
１０    二次元コード
１１    基本パターン部
１２Ａ    第１位置検出パターン
１２Ｂ    第３位置検出パターン
１２Ｃ    第４位置検出パターン
１２Ｄ    第２位置検出パターン
１３    領域
１５    ブロック
１６    分離パターン
１７    セル
１８    位置補正パターン
【図１】
0006045752.tif 000002
【図２Ａ】
0006045752.tif 000003
【図２Ｂ】
0006045752.tif 000004
【図３Ａ】
0006045752.tif 000005
【図３Ｂ】
0006045752.tif 000006
【図４】
0006045752.tif 000007
【図５Ａ】
0006045752.tif 000008
【図５Ｂ】
0006045752.tif 000009
【図５Ｃ】
0006045752.tif 000010
【図６Ａ】
0006045752.tif 000011
【図６Ｂ】
0006045752.tif 000012
【図７Ａ】
0006045752.tif 000013
【図７Ｂ】
0006045752.tif 000014
【図７Ｃ】
0006045752.tif 000015
【図７Ｄ】
0006045752.tif 000016
【図８】
0006045752.tif 000017
【図９Ａ】
0006045752.tif 000018
【図９Ｂ】
0006045752.tif 000019
【図１０】
0006045752.tif 000020
【図１１】
0006045752.tif 000021
【図１２】
0006045752.tif 000022
【図１３】
0006045752.tif 000023
【図１４】
0006045752.tif 000024
【図１５】
0006045752.tif 000025
【図１６】
0006045752.tif 000026
【図１７】
0006045752.tif 000027
【図１８】
0006045752.tif 000028
【図１９】
0006045752.tif 000029
【図２０】
0006045752.tif 000030
【図２１】
0006045752.tif 000031
【図２２】
0006045752.tif 000032
【図２３】
0006045752.tif 000033