(57)【特許請求の範囲】
【請求項１】
符号化されたデータを二次元のマトリックス上にパターンとして配置した二次元コードを生成する二次元コード生成装置であって、
前記符号化されたデータに対し、隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データを、符号化されたデータ毎に区分する間隔で周期的に挿入し、スタートビット及びエンドビットを付加した前記二次元コードを生成する二次元コード生成手段を有することを特徴とする二次元コード生成装置。
【請求項２】
前記二次元コード生成手段は、前記二次元コードの長さ方向において、前記二次元コードの幅方向の両端部に交互に現れるように前記冗長化データを配置することを特徴とする請求項１に記載の二次元コード生成装置。
【請求項３】
前記二次元コード生成手段は、細線を除く、全てに通じて共通な形状で前記データを配置した二次元コードを生成することを特徴とする請求項１又は２に記載の二次元コード生成装置。
【請求項４】
符号化されたデータを二次元のマトリックス上にパターンとして配置した二次元コードを読み取る二次元コード読取装置であって、
スタートビット及びエンドビットを検出することにより前記二次元コードを読み取る読取手段と、
前記二次元コードにおいて前記符号化されたデータに対して符号化されたデータ毎に区分する間隔で周期的に挿入された隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データを基準にして、前記二次元コードから前記冗長化データにより区分された前記符号化されたデータを検出する検出手段と、
前記検出手段により検出された前記符号化されたデータを復号化する復号化手段とを有することを特徴とする二次元コード読取装置。
【請求項５】
前記読取手段により読み取られた前記二次元コードをメモリ上に展開する展開手段を更に有し、
前記検出手段は、前記メモリ上に展開された前記二次元コードから前記冗長化データを検出することを特徴とする請求項４に記載の二次元コード読取装置。
【請求項６】
符号化されたデータが二次元のマトリックス上にパターンとして配置された二次元コードであって、
前記符号化されたデータに対して、隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データが周期的に挿入され、スタートビット及びエンドビットが付加されたことを特徴とする二次元コード。
【請求項７】
前記冗長化データは、前記符号化されたデータ毎に区分する間隔で挿入されたことを特徴とする請求項６に記載の二次元コード。
【請求項８】
前記冗長化データは、前記二次元コードの長さ方向において、前記二次元コードの幅方向の両端部に交互に現れるように配置されたことを特徴とする請求項６又は７に記載の二次元コード。
【請求項９】
前記符号化されたデータは、細線を除く、全てに通じて共通な形状で配置されたことを特徴とする請求項６乃至８の何れか１項に記載の二次元コード。
【請求項１０】
前記符号化されたデータは、２値のデータ又は３値以上のデータであることを特徴とする請求項６乃至９の何れか１項に記載の二次元コード。
【請求項１１】
符号化されたデータを二次元のマトリックス上にパターンとして配置した二次元コードを生成する二次元コード生成方法であって、
前記符号化されたデータに対し、隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データを、符号化されたデータ毎に区分する間隔で周期的に挿入し、スタートビット及びエンドビットを付加した前記二次元コードを生成する二次元コード生成ステップを含むことを特徴とする二次元コード生成方法。
【請求項１２】
符号化されたデータを二次元のマトリックス上にパターンとして配置した二次元コードを読み取る二次元コード読取方法であって、
スタートビット及びエンドビットを検出することにより前記二次元コードを読み取る読取ステップと、
前記二次元コードにおいて前記符号化されたデータに対して符号化されたデータ毎に区分する間隔で周期的に挿入された隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データを基準にして、前記二次元コードから前記冗長化データにより区分された前記符号化されたデータを検出する検出ステップと、
前記検出ステップにより検出された前記符号化されたデータを復号化する復号化ステップとを含むことを特徴とする二次元コード読取方法。
【請求項１３】
符号化されたデータを二次元のマトリックス上にパターンとして配置した二次元コードを生成する二次元コード生成方法をコンピュータに実行させるためのプログラムであって、
前記符号化されたデータに対し、隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データを、符号化されたデータ毎に区分する間隔で周期的に挿入し、スタートビット及びエンドビットを付加した前記二次元コードを生成する二次元コード生成ステップをコンピュータに実行させるためのプログラム。
【請求項１４】
符号化されたデータを二次元のマトリックス上にパターンとして配置した二次元コードを読み取る二次元コード読取方法をコンピュータに実行させるためのプログラムであって、
スタートビット及びエンドビットを検出することにより前記二次元コードを読み取る読取ステップと、
前記二次元コードにおいて前記符号化されたデータに対して符号化されたデータ毎に区分する間隔で周期的に挿入された隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データを基準にして、前記二次元コードから前記冗長化データにより区分された前記符号化されたデータを検出する検出ステップと、
前記検出ステップにより検出された前記符号化されたデータを復号化する復号化ステップとをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを符号化して、二次元のマトリックス上にパターンとして配置した二次元コードを生成、読み取るための技術に関するものである。
【背景技術】
【０００２】
近年、固体識別等のためにバーコードが多く利用されてきている。例えば特許文献１には、文字や数字情報を略正方形に構成された二次元コード化する技術が開示されている。また、特許文献２には、縦横比の異なる長方形で構成された二次元コードの技術が開示されている。
【０００３】
ところで、特許文献１に開示された二次元コードは略正方形に構成されることから、情報量を増やすと縦横ともにコードサイズが大きくなる。従って、細長い形状の対象物に付するには不都合が生じる。例えば従来から用いられている１次元バーコードは、比較的細長い形状への表示は可能であるが、直線状の汚れに弱かったり、インクジェット式の印字では細線を表示することが困難であったりする。また、同じ面積を占有することで比較すると、二次元コードと比べて情報量が少ないという欠点がある。また、特許文献２に開示される二次元コードは長方形で構成されるため、特許文献１に開示される略正方形の二次元コードに比べると細長い形状に付するに都合がよい。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第２９３８３３８号公報
【特許文献２】特許第４２４７１９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献２に開示される技術では、カードに表示された二次元コードをカメラでカード１枚毎に撮影することが想定されている。対象物に付された細長い形状の二次元コードの場合、１画面として捉えるより、場合によっては二次元コードをスキャンして読み取ることの方が好都合であることも多い。
【０００６】
一般的に細長く構成された二次元コードをスキャンして認識する場合、スキャン速度によっては誤認識が発生しやすく、その対処が必要であるが特許文献２ではそのような考慮について開示されていない。
【０００７】
以上のことに鑑みて、この発明の目的とするところは、細長く構成された二次元コードをスキャンして認識する場合でも、二次元コードのデータビットの誤認識を回避し安定的にコード認識処理を行えるような二次元コード生成装置とプログラムを提供することである。
【課題を解決するための手段】
【０００８】
本発明の二次元コード生成装置は、符号化されたデータを二次元のマトリックス上にパターンとして配置した二次元コードを生成する二次元コード生成装置であって、前記符号化されたデータに対し、隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データを、符号化されたデータ毎に区分する間隔で周期的に挿入し、スタートビット及びエンドビットを付加した前記二次元コードを生成する二次元コード生成手段を有することを特徴とする。
本発明の二次元コード読取装置は、符号化されたデータを二次元のマトリックス上にパターンとして配置した二次元コードを読み取る二次元コード読取装置であって、スタートビット及びエンドビットを検出することにより前記二次元コードを読み取る読取手段と、前記二次元コードにおいて前記符号化されたデータに対して符号化されたデータ毎に区分する間隔で周期的に挿入された隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データを基準にして、前記二次元コードから前記冗長化データにより区分された前記符号化されたデータを検出する検出手段と、前記検出手段により検出された前記符号化されたデータを復号化する復号化手段とを有することを特徴とする。
本発明の二次元コードは、符号化されたデータが二次元のマトリックス上にパターンとして配置された二次元コードであって、前記符号化されたデータに対して、隣接し、且つ値が反転した少なくとも２つのデータを含む冗長化データが周期的に挿入され、スタートビット及びエンドビットが付加されたことを特徴とする。
【発明の効果】
【０００９】
以上説明したように本発明によれば、所定のデータ構造の冗長化データを周期的に挿入して二次元コードを生成する装置と復号化する装置を提供することにより、二次元コードのデータビットの誤認識を回避し安定的にコード認識処理を行うことができる。特に鋼板の製造ラインのようなスキャンして認識する場合に好適な二次元コード認識装置とプログラムを提供することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施形態に係る二次元コード生成装置及び二次元コード読取装置の機能的な構成を示す図である。
【図２】本発明の実施形態に係る二次元コード生成装置、二次元コード読取装置のハードウェア構成を示す図である。
【図３】本発明の実施形態に係る二次元コード生成装置の処理を示すフローチャートである。
【図４】本発明の実施形態に係る二次元コード読取装置の処理を示すフローチャートである。
【図５】変換テーブルの構成例を示す図である。
【図６】定義テーブルの構成例を示す図である。
【図７】図６の定義ルール１に従って“ＧＨ”という入力データをデータビットに変換し、二次元コードを生成する例を説明するための図である。
【図８】図６の定義ルール１に従って、図７で説明した処理により生成された二次元コードのデータビットを出力データに変換する例を説明するための図である。
【図９】図６の定義ルール２に従って“４４１”という入力データをデータビットに変換し、二次元コードを生成する例を説明するための図である。
【図１０】図６の定義テーブル２に従って、図９で説明した処理により生成された二次元コードのデータビットを出力データに変換する例を説明するための図である。
【図１１】図６の定義ルール２に従って“４４１”という入力データをデータビットに変換し、冗長化ビット挿入部が定義ルール２を参照することなく、一定の周期で冗長化ビットをデータビットに対して挿入する例を説明するための図である。
【図１２】図６の定義ルール２に従って、図１１で説明した処理により生成された二次元コードのデータビットを出力データに変換する例を説明するための図である。
【図１３】定義テーブルの他の例を示す図である。
【図１４】図１３の定義ルール１に従って“ＧＨ”という入力データをデータビットに変換し、二次元コードを生成する例を説明するための図である。
【図１５】図１３の定義ルール１に従って、図１４で説明した処理により生成された二次元コードのデータビットを出力データに変換する例を説明するための図である。
【図１６】定義テーブルの更に他の例と、当該定義テーブルに従って“ＡＢ０１２”という入力データから二次元コードを生成し、当該二次元コードを読み取る処理例とを示す図である。
【図１７】冗長化ビットの他の態様を示す図である。
【図１８】本発明の実施形態の一例を示すシステム構成図である。
【発明を実施するための形態】
【００１１】
以下、本発明を適用した好適な実施形態を、添付図面を参照しながら詳細に説明する。
【００１２】
図１は、本実施形態に係る二次元コード生成装置１及び二次元コード読取装置２の機能的な構成を示す図である。なお、二次元コード生成装置１と二次元コード読取装置２とは一体化された装置であってもよいし、夫々が個別の装置であってもよい。
【００１３】
＜二次元コード生成装置１＞
図１に示すように、二次元コード生成装置１は、データ入力部１１、二値化処理部１２、冗長化ビット挿入部１３、二次元コード出力部１４、変換テーブル１２１、定義テーブル１２２を備える。データ入力部１１は、二次元コードに変換される文字、数字や画像等のデータ（以下、入力データと称す）を入力する。二値化処理部１２は、入力データを二値化（符号化）する。その際に、二値化処理部１２は、変換テーブル１２１と定義テーブル１２２とを参照する。ここで変換テーブル１２１とは、図５に示すように、入力データ及び後述する出力データと二値化データとの対応関係を設定・管理するためのテーブルである。以下、二値化処理部１２が入力データを変換した二値化データをデータビットと称す。また、定義テーブル１２２とは、入力データ及び出力データのデータ構造を定義するためのデータ（以下、定義ルールと称す）を設定・管理するためのテーブルである。より具体的には、定義ルールにおいては、入力データ及び出力データを構成する各データが「文字」であるか「数字」であるか或いは「画像」であるかが定義されている。なお、以下では説明を簡単にするために入力データが「文字」及び「数字」である場合を中心に説明する。
【００１４】
図６は、定義テーブル１２２の構成例を示す図である。図６の例では、定義テーブル１２２は、入力データ及び出力データのデータ構造として「文字」、「文字」を定義している定義ルール１と、入力データ及び出力データのデータ構造として「数字」、「数字」、「数字」を定義している定義テーブル２とを管理している。即ち、定義ルール１においては、例えば“ＡＢ”や“ＢＤ”等の２つの「文字」が並んだデータ構造を定義している。また、定義ルール２においては、例えば“１２３”や“５７８”等の３つの「数字」が並んだデータ構造を定義している。
【００１５】
ここで、図５の変換テーブル１２１に示すように、「０」〜「９」の「数字」は上位２ビットの０を省略し４ビットで表現することが可能である。従って、二値化処理部１２は、定義テーブル１２２から定義ルール２を参照すると、「数字」、「数字」、「数字」と定義されているため、入力データの各データを４ビットのデータビットに変換する。また、図５の変換テーブル１２１に示すように、「Ａ」〜「Ｚ」までの「文字」は６ビットのデータビットで表現することが可能である。従って、二値化処理部１２は、定義テーブル１２２から定義ルール１を参照すると「文字」、「文字」と定義されているため、入力データの各データを６ビットのデータビットに変換する。
【００１６】
冗長化ビット挿入部１３は、二値化処理部１２によって得られたデータビットに対して冗長化ビットを挿入する。その際に冗長化ビット挿入部１３は、定義テーブル１２２を参照し、データビットに対して冗長化ビットを挿入する位置を決定する。本実施形態において、冗長化ビットは、二次元コード読取部２が二次元コードからデータビットを検出する際の基準位置を示すビットとして扱われる。従って、各データビットの区切りとなる位置に冗長化ビットを配置することが好ましい。よって、本実施形態では、定義ルール２のように「数字」、「数字」、「数字」と定義されている場合、冗長化ビット挿入部１３は、データビットに対して４ビット間隔で冗長化ビットを挿入することを決定する。また、定義ルール１のように「文字」、「文字」と定義されている場合、冗長化ビット挿入部１３は、データビットに対して６ビット間隔で冗長化ビットを挿入することを決定する。このように周期的に存在する冗長化ビットの位置を検出することにより、その間に存在するデータビットを正確に検出することが可能となる。なお、入力データが画像データの場合、例えば１スキャンラインのデータ毎に冗長化ビットを挿入したり、所定画素数のデータ毎に冗長化ビットを挿入したりすれば良い。
【００１７】
さらに、冗長化ビット挿入部１３は、データビットに冗長化ビットを挿入した後、その先頭部及び最後部に夫々、スタートビット及びエンドビットを付加する。このようにしておくとコードの読取時に、二次元コード読取装置２は、スタートビット及びエンドビットを二次元コードから検出することにより、どこからどこまでが二次元コードであるかを識別することが可能となる。以上のデータ処理により、二次元コードが生成される。二次元コード出力部１４は、上記の二次元コードを対象物に対して印字する。なお、二次元コードとは、数値の配列である入力データを二値化（ビット化）してデータビットとし、各データビットの値（二値）を二次元のマトリックス上に、それぞれ例えば白・黒のパターンとして配置したものである。以下では、幅方向が２ビット、長さ方向がＮビット（Ｎは自然数）の二次元のマトリックス上にデータビットを配置した二次元コードを例に挙げて説明を行う。
【００１８】
＜二次元コード読取装置２＞
二次元コード読取装置２について説明する。図１に示すように、二次元コード読取装置２は、二次元コード読取部２１、データビット検出部２２、データ変換部２３、データ出力部２４を備えている。二次元コード読取部２１は、対象物に印字された二次元コードを読み取る。データビット検出部２２は、二次元コードから冗長化ビットの位置を検出し、冗長化ビットの位置を基準にしてデータビットを検出する。即ち、データビット検出部２２は、周期的に現れる冗長化ビットを検出し、その間に存在するデータビットを検出する。その際、データビット検出部２２は、定義テーブル１２２から定義ルールを参照する。定義ルール２のようにデータ構造として「数字」、「数字」、「数字」と定義されている場合、データビット検出部２２は、二次元コードから検出するデータビットが４ビット毎であることを認識する。一方、定義ルール１のようにデータ構造として「文字」、「文字」と定義されている場合、データビット検出部２２は、二次元コードから検出するデータビットが６ビット毎であることを認識する。即ち、データビット検出部２２は、検出するデータビットのビット数を認識した上で、冗長化ビットの位置を基準にしてデータビットの検出を行う。データ変換部２３は、データビット検出部２２により検出されたデータビットを、変換テーブル１２１を参照して「数字」や「文字」のデータ（以下、出力データと称す）に変換（復号化）する。データ出力部２４は、データ変換部２３によって得られた出力データを例えばディスプレイ等に出力する。
【００１９】
図２は、本実施形態に係る二次元コード生成装置１、二次元コード読取装置２のハードウェア構成を示す図である。なお、図２は、二次元コード生成装置１と二次元コード読取装置２とが一体化された場合のハードウェア構成を示している。
【００２０】
ＣＰＵ２０１は、システムバスに接続される各デバイスやコントローラを統括的に制御する。ＲＯＭ２０３には、ＣＰＵ２０１の制御プログラムであるＢＩＯＳ（Basic Input / Output System）やオペレーティングシステムプログラム、二次元コード生成装置１、二次元コード読取装置２が実行する例えば図３、図４に示す処理フローのプログラム等が記憶されている。
【００２１】
また、本実施形態に係る例えば図３、図４に示す処理を行うためのプログラムは、ＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体に記録され、それらの記録媒体から供給される構成としてもよいし、インターネット等の通信媒体を介して供給される構成としてもよい。
【００２２】
ＲＡＭ２０２は、ＣＰＵ２０１の主メモリ、ワークエリア等として機能する。ＣＰＵ２０１は、処理の実行に際して必要なプログラム等をＲＡＭ２０２にロードして、プログラムを実行することで各種動作を実現するものである。
【００２３】
ＣＰＵ２０１は、処理の実行に際して必要なプログラム等をＲＡＭ２０２にロードして、プログラムを実行することで各種動作を実現するものである。
【００２４】
ディスプレイコントローラ２０８は、ディスプレイ２０９における画像表示を制御する。ＫＢコントローラ２０４は、ＫＢ（キーボード）２０５からの操作入力を受け付け、ＣＰＵ２０１に対して送信する。なお、図示していないが、ＫＢ２０５の他に、マウス等のポインティングデバイスもユーザの操作手段として本実施形態に係る二次元コード生成装置１、二次元コード読取装置２に適用可能である。
【００２５】
プリント部２０７は、対象物に二次元コードを印字するための装置である。スキャナ部２０６は、対象物に印字された二次元コードを読み取るための装置である。
【００２６】
図１８に実施形態の一例を示す。鋼板の製造ラインである通板中の鋼板１８０２、鋼板に印字された二次元コード１８０１、スキャナ部に相当するカメラ１８０３、前工程で二次元コードを印字するプリント部に相当するマーキング装置１８０４、二次元コード生成装置、読取装置である１．２で構成される。
【００２７】
なお、図１に示す二値化処理部１２、冗長化ビット挿入部１３、データビット検出部２２、データ変換部２３は、例えばＲＯＭ２０３内に記憶され、必要に応じてＲＡＭ２０２にロードされるプログラム及びそれを実行するＣＰＵ２０１によって実現される構成である。また、データ入力部１１は、ＫＢ２０５及びＫＢコントローラ２０４に相当する構成である。二次元コード出力部１４は、プリント部２０７に相当する構成である。二次元コード読取部２１は、スキャナ部２０６に相当する構成である。
【００２８】
図３は、本実施形態に係る二次元コード生成装置１の処理を示すフローチャートである。先ずステップＳ３０１において、データ入力部１１は、二次元コードに変換する文字や数字等の入力データを入力する。ステップＳ３０２において、二値化処理部１２は変換テーブル１２１と定義テーブル１２２とを参照する。ここで、二値化処理部１２は、定義テーブル１２２から定義ルールを参照し、入力データの構造に応じたビット数を認識する。即ち、定義ルール２において「数字」、「数字」、「数字」が定義されている入力データについては、二値化処理部１２は、当該入力データの各データを４ビットのデータビットに変換することを認識する。一方、定義ルール１において「文字」、「文字」が定義されている入力データについては、二値化処理部１２は、当該入力データの各データを６ビットのデータビットに変換することを認識する。ステップＳ３０３において、二値化処理部１２は、ステップＳ３０２で参照した変換テーブル１２１を用いて、認識したビット数で入力データをデータビットに変換する。即ち、二値化処理部１２は、４ビットのデータビットに変換すると認識した場合には、例えば入力データ“２”については変換テーブル１２１において“００００１０”が対応付けられているが、上２桁の“００”を除いた“００１０”に変換する。そもそも「数字」は４ビットで表現可能であるため、上２桁の“００”はなくても問題はない。一方、６ビットのデータビットに変換すると認識された場合、例えば入力データ“２”は“００００１０”に変換される。
【００２９】
ステップＳ３０４において、冗長化ビット挿入部１３は、定義テーブル１２２から定義ルールを参照し、データビットに対して冗長化ビットを挿入する。例えば、定義ルール２が参照された場合、冗長化ビット挿入部１３は、データビットに対して４ビット間隔の周期で冗長化ビットを挿入する。一方、定義ルール１が参照された場合、冗長化ビット挿入部１３は、データビットに対して６ビット間隔の周期で冗長化ビットを挿入する。
【００３０】
ステップＳ３０５において、冗長化ビット挿入部１３は、冗長化ビットが挿入されたデータビットの先頭部にスタートビットを付加するとともに、最後部にエンドビットを付加する。これにより、二次元コードが生成される。ステップＳ３０６において、二次元コード出力部１４は、生成された二次元コードを対象物に印字する。
【００３１】
図７は、図６の定義ルール１に従って“ＧＨ”という入力データをデータビットに変換し、二次元コードを生成する例を説明するための図である。
【００３２】
データ入力部１１が“ＧＨ”７０１という入力データを入力すると、二値化処理部１２は定義テーブル１２２から「文字」、「文字」という定義ルール１を参照し、入力データの各データ“Ｇ”、“Ｈ”を夫々６ビットのビットデータに変換することを認識する。従って、二値化処理部１２は、変換テーブル１２１を参照して、“Ｇ”を“０１００００”、“Ｈ”を“０１０００１”に変換する（図７の７０２）。二値化処理部１２は、これらのビットデータを結合することにより、“ＧＨ”に対応するビットデータ“０１０００００１０００１”を生成する。なお、入力データと参照する定義ルールとの紐づけは、入力データが入力される前に、参照すべき定義ルールがユーザによって指定される方法でもよいし、入力データと定義ルールとを対応付けたテーブルを別途用意してもよい。
【００３３】
次に冗長化ビット挿入部１３は、同じ定義ルール１を参照することにより、６ビット間隔で周期的にビットデータに対して冗長化ビットを挿入することを認識する。従って、冗長化ビット挿入部１３は、ビットデータ“０１０００００１０００１”の、先頭部と、“０１００００”と“０１０００１”との間との夫々に冗長化ビットを挿入する。次に冗長化ビット挿入部１３は、冗長化ビットを挿入した後のビットデータの先頭部にスタートビットを付加するとともに、最後部にエンドビットを付加する。これにより、二次元コードが生成される（図７の７０３）。なお、図７の７０３に示す二次元コード内の（０）〜（５）は、データビットの配置位置又は配置順序を示している。図９、図１１、図１４、図１７についても同様である。
【００３４】
図４は、本実施形態に係る二次元コード読取装置２の処理を示すフローチャートである。先ずステップＳ４０１において、二次元コード読取部２１は、対象物に印字された二次元コードを読み取る。ステップＳ４０２において、読み取られた二次元コード全体の画像データはＲＡＭ２０２上に展開される。ステップＳ４０３において、データビット検出部２２は、定義テーブル１２２から定義ルールを参照し、二次元コードから検出するデータビットのビット数を検出する。即ち、定義ルール２において「数字」、「数字」、「数字」が定義されている出力データについては、データビット検出部２２は、二次元コードから４ビット毎にデータビットを検出することを認識する。一方、定義ルール１において「文字」、「文字」が定義されている出力データについては、データビット検出部２２は、二次元コードから６ビット毎にデータビットを検出することを認識する。
【００３５】
ステップＳ４０４において、データビット検出部２２は、ＲＡＭ２０２上に展開された二次元コード全体の画像データからスタートビット、冗長化ビット及びエンドビットを検出する。ステップＳ４０５において、データビット検出部２２は、スタートビット、冗長化ビット及びエンドビットを用いて、二次元コードからデータビットを検出する。即ち、データビット検出部２２は、スタートビット及びエンドビットから二次元コードの先頭部と最後部とを検出することにより、どこからどこまでが二次元コードであるかを把握する。そしてデータビット検出部２２は、二次元コードに存在する冗長化ビットの位置を検出し、その位置を基準にして冗長化ビット間に存在するデータビットを検出する。その際、データビット検出部２２は、冗長化ビット間に存在するデータビットが定義ルールから認識したビット数のデータビットであるものとして、データビットの検出を行う。
【００３６】
本実施形態においては、仮に二次元コードが印字された対象物の移動速度が変化し、又は、二次元コード読取装置２の移動速度が変化することによって、二次元コードの読み取り速度が変化した場合でも、冗長化ビットの位置から二次元コードのデータビットを正確に読み取ることができる。即ち、読み取った二次元コードの画像データはＲＡＭ２０２上に一度展開されるが、読み取り速度が速い場合、実際のデータビットよりも小さなサイズでＲＡＭ２０２上に展開されたり、逆に読み取り速度が遅い場合、実際のデータビットより大きなサイズでＲＡＭ２０２上に展開されたりする。これにより従来方法では大きなサイズで展開されたデータビットは実際よりも大きなビット数のデータビットで検出される可能性があり、反対に小さなサイズで展開されたデータビットは実際よりも小さいビット数のデータビットで検出される可能性がある。このように、実際の二次元コードのデータビットとは異なるサイズで読み取られると、データビットの誤認識が生じることがある。
【００３７】
これに対し、本実施形態では、ＲＡＭ２０２上に展開された二次元コードから冗長化ビットの位置を検出し、二次元コードのどこからどこまでが所定のビット数（ここでは、４又は６ビット）のビットデータであるのかを把握した上でデータビットを検出するため、データビットの誤認識を回避することが可能となる。
【００３８】
冗長化ビットのなかには、隣接するデータビットとの関係により、それ自体だけでは検出が困難なものが存在し得る。これに対し、本実施形態では、読み取った二次元コードを一旦ＲＡＭ２０２上に展開した上で冗長化ビットの検出を行うようにしている。従って、他の冗長化ビットの検出がある程度の割合で成功していれば、それらの冗長化ビットの配置パターンの周期性を利用して、検出しづらい冗長化ビットの位置を推定することができる。
【００３９】
ステップＳ４０６において、データ変換部２３は、変換テーブル１２１を参照し、ステップＳ４０５で検出されたデータビットを出力データに変換する。ステップＳ４０７において、データ出力部２４は、出力データをディスプレイ等に表示する。
【００４０】
図８は、図６の定義ルール１に従って、図７で説明した処理により生成された二次元コード７０３のデータビットを出力データに変換する例を説明するための図である。
【００４１】
二次元コード読取部２１が二次元コード８０１（図７の７０３）を読み取ると、二次元コードの全ての画像データがＲＡＭ２０２上に展開される。データビット検出部２２は、定義テーブル１２２から「文字」、「文字」という定義ルール１を参照し、二次元コードから６ビット毎にデータビットを検出することを認識する。なお、二次元コードと参照する定義ルールとの紐づけは、二次元コードが読み取られる前に、参照すべき定義ルールがユーザによって指定される方法でもよいし、二次元コードと定義ルールとを対応付けたテーブルを別途用意してもよい。
【００４２】
次にデータビット検出部２２は、ＲＡＭ２０２上に展開された画像データから、スタートビット、冗長化ビット及びエンドビットを検出する。スタートビット及びエンドビットにより、どこからどこまでが二次元コードであるかを検出することができる。またデータビット検出部２２は、二次元コードから冗長化ビットの位置を検出し、冗長化ビット間に存在するデータビットを検出する。図８の８０２は、ＲＡＭ２０２上に展開された二次元コード８０１の画像データから検出される、全二次元コードのビットパターンを示している。スタートビットとエンドビットとは夫々独自のビットパターンとなっており、このビット配置が検出されることにより、どこからどこまでが二次元コードであるかが把握される。そして、スタートビットとエンドビットとの間には周期的に冗長化ビット（「１」、「０」）が配置されており、これらの冗長化ビットを検出することにより、冗長化ビット間に存在する“０１００００”、“０１０００１”のデータビットが検出される（図８の８０３）。データ変換部２３は、図５の変換テーブル１２１を参照して、“０１００００”、“０１０００１”のデータビットを出力データ“Ｇ”、“Ｈ”に変換する。データ出力部２４は、データ変換部２３により生成された出力データを結合した“ＧＨ”を出力する（図８の８０４）。
【００４３】
図９は、図６の定義ルール２に従って“４４１”という入力データをデータビットに変換し、二次元コードを生成する例を説明するための図である。
【００４４】
データ入力部１１が“４４１”９０１という入力データを入力すると、二値化処理部１２は定義テーブル１２２から「数字」、「数字」、「数字」という定義ルール２を参照し、入力データ“４”、“４”、“１”を夫々４ビットのビットデータに変換することを認識する。従って、二値化処理部１２は、変換テーブル１２１を参照して、“４”を“０１００”、“１”を“０００１”に変換する（図９の９０２）。二値化処理部１２は、これらのビットデータを結合することにより、“４４１”に対応するビットデータ“０１０００１０００００１”を生成する。
【００４５】
次に冗長化ビット挿入部１３は、同じ定義ルール２を参照することにより、４ビット間隔で周期的にビットデータに対して冗長化ビットを挿入することを認識する。従って、冗長化ビット挿入部１３は、ビットデータ“０１０００１０００００１”の、先頭部と、“０１００”と“０１００”との間と、“０１００”と“０００１”との間との夫々に冗長化ビットを挿入する。次に冗長化ビット挿入部１３は、冗長化ビットを挿入した後のビットデータの先頭部にスタートビットを付加することともに、最後部にエンドビットを付加する。これにより、二次元コードが生成される（図９の９０３）。
【００４６】
図１０は、図６の定義テーブル２に従って、図９で説明した処理により生成された二次元コード９０３のデータビットを出力データに変換する例を説明するための図である。
【００４７】
二次元コード読取部２１が二次元コード１００１（図９の９０３）を読み取ると、二次元コードの全ての画像データがＲＡＭ２０２上に展開される。データビット検出部２２は、定義テーブル１２２から「数字」、「数字」、「数字」という定義ルール２を参照し、二次元コードから４ビット毎にデータビットを検出することを認識する。次にデータビット検出部２２は、ＲＡＭ２２上に展開された画像データから、スタートビット、冗長化ビット及びエンドビットを検出する。スタートビット及びエンドビットにより、どこからどこまでが二次元コードであるかを検出することができる。またデータビット検出部２２は、二次元コードから冗長化ビットの位置を検出し、冗長化ビット間に存在するデータビットを検出する。図１０の１００２は、ＲＡＭ２０２上に展開された二次元コード１００１の画像データから検出される、全二次元コードのビット配置を示している。図８の例と同様に、スタートビットとエンドビットとのビット配置が検出されることにより、どこからどこまでが二次元コードであるかが把握される。そして、二次元コードに周期的に存在する冗長化ビット（「１」、「０」）が検出されることにより、冗長化ビット間に存在する“０１００”、“０１００”、“０００１”のデータビットが検出される（図１０の１００３）。データ変換部２３は、図５の変換テーブル１２１を参照して、“０１００”、“０１００”、“０００１”のデータビットを出力データ“４”、“４”、“１”に変換する。データ出力部２４は、データ変換部２３により生成された出力データを結合した“４４１”を出力する（図１０の１００４）。
【００４８】
以上のように、本実施形態では、入力データの構造が「数字」、「数字」、「数字」である場合、入力データを、「０」〜「９」を表現可能な最小限のビット数（４ビット）のデータビットに変換するようにしている。これにより、不要なデータビットを使用せずに二次元コードを生成することが可能となり、二次元コードのサイズを縮小することができる。
【００４９】
上述した実施形態では、データビットに対して、定義ルールに従って各データビットを区分する間隔で冗長化ビットを挿入しているが、他の実施形態として、常に一定のビット数の周期で冗長化ビットを挿入するようにしてもよい。その具体例を図１１及び図１２を参照しながら説明する。
【００５０】
図１１は、図６の定義ルール２に従って“４４１”という入力データをデータビットに変換し、冗長化ビット挿入部１３が定義ルール２を参照することなく、一定の周期（ここでは、６ビットの周期）で冗長化ビットをデータビットに対して挿入する例を説明するための図である。
【００５１】
データ入力部１１が“４４１”１１０１というデータを入力すると、二値化処理部１２は定義テーブル１２２から「数字」、「数字」、「数字」という定義ルール２を参照し、入力データ“４”、“４”、“１”を夫々４ビットのビットデータに変換することを認識する。従って、二値化処理部１２は、変換テーブル１２１を参照して、“４”を“０１００”、“１”を“０００１”に変換する（図１１の１１０２）。二値化処理部１２は、これらのビットデータを結合することにより、“４４１”に対応するビットデータ“０１０００１０００００１”を生成する。
【００５２】
次に冗長化ビット挿入部１３は、６ビットの周期で冗長化ビットをビットデータに対して挿入する。即ち、冗長化ビット挿入部１３は、ビットデータ“０１０００１０００００１”の、先頭部と、“０１０００１”と“０００００１”との間との夫々に冗長化ビットを挿入する。次に冗長化ビット挿入部１３は、冗長化ビットを挿入した後のビットデータの先頭部にスタートビットを付加するとともに、最後部にエンドビットを付加する。これにより、二次元コードが生成される（図１１の１１０３）。
【００５３】
図１２は、図６の定義ルール２に従って、図１１で説明した処理により生成された二次元コード１１０３のデータビットを出力データに変換する例を説明するための図である。
【００５４】
二次元コード読取部２１が二次元コード１２０１（図１１の１１０３）を読み取ると、二次元コードの全ての画像データがＲＡＭ２０２上に展開される。データビット検出部２２は、定義テーブル１２２から「数字」、「数字」、「数字」という定義ルール２を参照し、二次元コードから４ビット毎にデータビットを検出することを認識する。次にデータビット検出部２２は、ＲＡＭ２２上に展開された画像データから、スタートビット、冗長化ビット及びエンドビットを検出する。スタートビット及びエンドビットにより、どこからどこまでが二次元コードであるかを検出するところまでは図８及び図１０で説明した処理と同様である。本実施形態において、データビット検出部２２は、データビットに対して冗長化ビットが６ビット間隔で挿入されていることを予め把握しているものとする。また、データビット検出部２２は、定義ルール２から、４ビット毎にデータビットを検出することを認識している。従って、データビット検出部２２は、冗長化ビット間に存在する６ビットのデータビットを２回検出すると、２回検出した計１２ビットのデータビットから４ビットのデータビットを３つ検出する。即ち、データビット検出部２２は、冗長間ビット間に存在する６ビットのデータビットとして“０１０００１”、“０００００１”を検出すると（図１２の１２０２）、これらを結合したデータビット“０１０００１０００００１”を３つに分割し、“０１００”、“０１００”、“０００１”を検出する（図１２の１２０３）。データ変換部２３は、図５の変換テーブル１２１を参照して、“０１００”、“０１００”、“０００１”のデータビットを出力データ“４”、“４”、“１”に変換する。データ出力部２４は、データ変換部２３により生成された出力データを結合した“４４１”を出力する（図１２の１２０４）。
【００５５】
次に、本発明の実施形態に適用可能な他の定義ルールの例について説明する。上述した定義ルールでは、入力データ及び出力データについて常に同一の構造を定義していたが、本実施形態では、定義ルールにおいて、入力データと出力データとで異なる構造を定義している。即ち、本実施形態の定義ルールでは、入力データの構造から出力データへの構造の変換方法を定義している。
【００５６】
図１３は、定義テーブル１２２の他の例を示す図である。本定義テーブル１２２では、定義ルール１において、「文字」、「文字」という構造の入力データを、「数字」、「数字」、「数字」という構造の出力データに変換することを定義しており、定義ルール２において、「数字」、「数字」、「数字」という構造の入力データを、「文字」、「文字」という構造の出力データに変換することを定義している。以下、図１３の定義ルール１を適用した場合の動作について説明する。
【００５７】
図１４は、図１３の定義ルール１に従って“ＧＨ”という入力データをデータビットに変換し、二次元コードを生成する例を説明するための図である。
【００５８】
データ入力部１１が“ＧＨ”１４０１という入力データを入力すると、二値化処理部１２は定義テーブル１２２から「文字」、「文字」という定義ルール１を参照し、入力データ“Ｇ”、“Ｈ”を夫々６ビットのビットデータに変換することを認識する。従って、二値化処理部１２は、変換テーブル１２１を参照して、“Ｇ”を“０１００００”、“Ｈ”を“０１０００１”に変換する（図１４の１４０２）。二値化処理部１２は、これらのビットデータを結合することにより、“ＧＨ”に対応するビットデータ“０１０００００１０００１”を生成する。
【００５９】
次に冗長化ビット挿入部１３は、同じ定義ルール１を参照することにより、６ビット間隔で周期的にビットデータに対して冗長化ビットを挿入することを認識する。従って、冗長化ビット挿入部１３は、ビットデータ“０１０００００１０００１”の、先頭部と、“０１００００”と“０１０００１”との間との夫々に冗長化ビットを挿入する。次に冗長化ビット挿入部１３は、冗長化ビットを挿入した後のビットデータの先頭部にスタートビットを付加するととともに、最後部にエンドビットを付加する。これにより、二次元コードが生成される（図１４の１４０３）。
【００６０】
図１５は、図１３の定義ルール１に従って、図１４で説明した処理により生成された二次元コード１４０３のデータビットを出力データに変換する例を説明するための図である。
【００６１】
二次元コード読取部２１が二次元コード１５０１（図１４の１４０３）を読み取ると、二次元コードの全ての画像データがＲＡＭ２０２上に展開される。データビット検出部２２は、定義テーブル１２２の定義ルール１において出力データとして「数字」、「数字」、「数字」が定義されていることから、二次元コードから４ビット毎にデータビットを検出することを認識する。それとともに、データビット検出部２２は、同じく定義テーブル１２２の定義ルール１において入力データとして「文字」、「文字」が定義されていることから、二次元コード生成装置１の冗長化ビット挿入部１３ではデータビットに対して６ビット間隔で冗長化ビットが挿入されていることを認識する。次にデータビット検出部２２は、ＲＡＭ２２上に展開された画像データから、スタートビット、冗長化ビット及びエンドビットを検出する。データビット検出部２２は、スタートビット及びエンドビットにより、どこからどこまでが二次元コードであるかを検出する。
【００６２】
データビット検出部２２は、冗長化ビット間に存在する６ビットのデータビットを２回検出すると、２回検出した計１２ビットのデータビットから４ビットのデータビットを３つ検出する。即ち、データビット検出部２２は、冗長化ビット間に存在する６ビットのデータビットとして“０１００００”、“０１０００１”を検出すると（図１５の１５０２）、これらを結合したデータビット“０１０００００１０００１”を３つに分割し、“０１００”、“０１００”、“０００１”を検出する（図１５の１５０３）。データ変換部２３は、図５の変換テーブル１２１を参照して、“０１００”、“０１００”、“０００１”のデータビットを出力データ“４”、“４”、“１”に変換する。データ出力部２４は、データ変換部２３により生成された出力データを結合した“４４１”を出力する（図１５の１５０４）。
【００６３】
図１６は、定義テーブル１２２の更に他の例と、当該定義テーブル１２２に従って“ＡＢ０１２”という入力データから二次元コードを生成し、当該二次元コードを読み取る処理例とを示す図である。これまでは、二次元コードから読み取られるデータビットと同じデータ構造の出力データを生成する処理について説明したが、以下では、二次元コードから読み取られるデータビットとは異なるデータ構造の出力データを生成する処理について説明する。
【００６４】
図１６（ａ）に示すように、本例における定義テーブル１２２では、定義ルール１において、「文字（１）」、「文字（２）」、「数字（１）」、「数字（２）」、「数字（３）」という構造の入力データを、「文字（１）」、「数字（１）」、「数字（２）」、「数字（３）」、「文字（２）」という構造の出力データに変換することを定義している。
【００６５】
データ入力部１１が“ＡＢ０１２”１６０１というデータを入力すると、二値化処理部１２は定義テーブル１２２から「文字（１）」、「文字（２）」、「数字（１）」、「数字（２）」、「数字（３）」という定義ルール１を参照し、入力データ“Ａ”、“Ｂ”、“０”、“１”、“２”を夫々６ビットのビットデータに変換することを認識する。従って、二値化処理部１２は、変換テーブル１２１を参照して、“Ａ”を“００１０１０”、“Ｂ”を“００１０１１”、“０”を“００００００”、“１”を“０００００１”、“２”を“００００１０”に変換する（図１６の１６０２）。以降、同様の方法により、冗長化ビット挿入１３が冗長化ビット、スタートビット及びエンドビットをデータビットに挿入し、二次元コードが生成される。
【００６６】
生成された二次元コードを二次元コード読取部２１が読み取ると、データビット検出部２２は、定義ルール１において入力データとして「文字（１）」、「文字（２）」、「数字（１）」、「数字（２）」、「数字（３）」と定義され、出力データとして「文字（１）」、「数字（１）」、「数字（２）」、「数字（３）」、「文字（２）」と定義されていることから、二次元コードから６ビット毎にデータビットを検出した後、先頭から２番目に配置されている「文字（２）」を最後に配置するようにデータビットの入れ替えを行う。データ変換部２３は、図５の変換テーブル１２１を参照し、このように入れ替えられた後のデータビット“００１０１０”、“００００００”、“０００００１”、“００００１０”、“００１０１１”を出力データ“Ａ０１２Ｂ”に変換する。データ出力部２４は、データ変換部２３により生成された出力データ“Ａ０１２Ｂ”を出力する（図１６の１６０３）。このように、二次元コードから読み取られるデータビット“ＡＢ０１２”とは異なるデータ構造の出力データ“Ａ０１２Ｂ”を生成することが可能となる。
【００６７】
なお、上述した処理例では、二値化処理部１２は、図１６（ａ）の定義テーブル１２２の定義ルール１に基づいて、入力データ“Ａ”、“Ｂ”、“０”、“１”、“２”を夫々６ビットのビットデータに変換し、冗長化ビット挿入部１３は、そのビットデータに対して６ビット間隔で冗長化ビットを挿入するようにしているが、これに限られない。例えば、二値化処理部１２は、図１６（ａ）の定義テーブル１２２の定義ルール１を参照することにより、入力データ“Ａ”、“Ｂ”、“０”、“１”、“２”を夫々６ビット、６ビット、４ビット、４ビット、４ビットのデータビットに変換し、冗長化ビット挿入部１３は、二値化処理部１２が生成したデータビットに対して、６ビット、６ビット、４ビット、４ビット、４ビット間隔で冗長化ビットを挿入してもよい。この場合、データビット検出部２２は、定義ルール１を参照して、冗長化ビット間には、６ビット、６ビット、４ビット、４ビット、４ビットのデータビットが存在することに認識した上で、データビットの検出を行う。このような手法によっても、二次元コードの読み取り速度が変化しても、データビットの誤認識を回避することができる。
【００６８】
以上説明した実施形態においては、例えば図７に示すように、幅方向（図の縦方向）に２ビット、長さ方向（図の横方向）にＮ（Ｎは任意の自然数）ビットの二次元コードを例に挙げているが、本発明に適用可能な二次元コードはこの形態に限定されない。即ち、幅方向も任意のビット数（Ｍビット（Ｍは任意の自然数））で構成することができる。
【００６９】
また、冗長化ビットも上記実施形態で示した態様に限定されない。上記実施形態において冗長化ビットは、幅方向が２ビット、長さ方向がＮビットの二次元コードにおいて、長さ方向に“１”、“０”の２ビットを隣接させたデータビットが幅方向の両端部に交互に現れるように配置しているが、これ以外の冗長化ビットの態様として次のようなものが挙げられる。図１７は、冗長化ビットの他の態様を示す図である。図１７（ａ）は、二次元コードの幅方向に“１”、“０”の２ビットを隣接させたデータビットが長さ方向に３ビットの周期で現れるように配置した冗長化ビットの例を示している。また、図１７（ｂ）は、二次元コードの幅方向の一方の端部で長さ方向に“１”、“０”の２ビットを隣接させたデータビットが、同じく長さ方向に３ビットの周期で現れるように配置した冗長化ビットの例を示している。
【００７０】
図７に示す冗長化ビットの場合、二次元コードの幅方向の両端部において交互に冗長化ビットが現れるため、両端部に存在する冗長化ビットから二次元コードの幅が何ビットであるかを把握することができる。また、図１７（ａ）に示す冗長化ビットの場合、二次元コードの幅方向の全ビットにわたって配置させている。従って、一つの冗長化ビットを検出すれば、二次元コードの幅が何ビットであるかを把握することができる。このように図７、図１７（ａ）に示す冗長化ビットを採用した場合、二次元コードの幅が何ビットであるかを把握することができるため、実際には幅方向に更にデータビットが存在するのに存在しないものとして看做される等のデータビットの誤認識を回避することができる。一方、図１７（ｂ）に示す冗長化ビットの場合、図７、図１７（ａ）に示す冗長化ビットのように幅方向のデータビットの誤認識を防ぐには不向きであるが、長さ方向ではデータビットの誤認識を防ぐことができる。このように本発明に適用可能な冗長化ビットは様々な態様のものが挙げられ、以上例示したものに限定されない。
【００７１】
また、上述した実施形態では、データビット、冗長化ビットを“０”、“１”の２値のビットで表現しているが、本発明はこれに限定されない。即ち、データビットや冗長化ビットを３値以上のグレースケールやカラーで表現してもよい。この場合、二次元コードを読み取って画像データをＲＡＭ２０２上に展開し、当該画像データを画像処理してマルチレベルの値の認識を行った後、変換テーブルを用いてデータビットから出力データに変換する処理を行うことになる。さらに、冗長化ビットは、上述した実施形態のように２ビットに限定されず、それ以上のビット数で表現してもよい。
【００７２】
また、二次元コードのエンドビットの直前部分にチェックデジットを追加し、全データビットの値とチェックデジットの値とを加算し、０×Ｆで剰余をとったときに０×Ｆとなるか否かに応じて、正確にデータビットの読み取りができているか否かを判定（エラー検出）するようにしてもよい。もし正確にデータビットの読み取りができていないと判定された場合、もう一度読み取り処理を行うようにする。さらに、入力データをデータビットに変換する際に、公知のReed-Solomon符号化技術を用いてエラー訂正するようにしてもよい。
【００７３】
なお、上述した実施形態では、矩形の冗長化ビット及びデータビットを二次元コードに配置しているが、冗長化ビット及びデータビットの形状はこれに限定されず、例えば円形の冗長化ビット及びデータビットであってもよく、全てのビットに通じて共通な形状であればよい。これにより、１次元バーコードのように細線でデータを表現する場合のように、直線状の汚れに弱かったり、インクジェット式の印字では表示することが困難であるという問題点を解消することができる。
【符号の説明】
【００７４】
１：二次元コード生成装置、２：二次元コード読取装置、１１：データ入力部、１２：二値化処理部、１３：冗長化ビット挿入部、１４：二次元コード出力部、２１：二次元コード読取部、２２：データビット検出部、２３：データ変換部、２４：データ出力部、１２１：変換テーブル、１２２：定義テーブル
【図１】
0005592234.tif 000002
【図２】
0005592234.tif 000003
【図３】
0005592234.tif 000004
【図４】
0005592234.tif 000005
【図５】
0005592234.tif 000006
【図６】
0005592234.tif 000007
【図７】
0005592234.tif 000008
【図８】
0005592234.tif 000009
【図９】
0005592234.tif 000010
【図１０】
0005592234.tif 000011
【図１１】
0005592234.tif 000012
【図１２】
0005592234.tif 000013
【図１３】
0005592234.tif 000014
【図１４】
0005592234.tif 000015
【図１５】
0005592234.tif 000016
【図１６】
0005592234.tif 000017
【図１７】
0005592234.tif 000018
【図１８】
0005592234.tif 000019