(57)【要約】  複数の特徴、例えば、変動する幅のバー及びスペースを含むコード、例えば、バーコードをエンコード及びデコードする手法が開示される。本発明の１つの態様において、単一のシンボルを使用する任意の長さのコードへ情報をエンコードする手法が提供される。別個の値が２つより多い特徴を有するコードを使用して情報をエンコード及びデコードする手法も提供される。
2008541297.tif 000002
【特許請求の範囲】
【請求項１】
（Ａ）入力値の範囲を識別するステップと、
（Ｂ）前記入力値の範囲をエンコードすることのできる特徴値の分布を識別するステップと、
（Ｃ）前記入力値の範囲において値を識別してバーコードの中にエンコードするステップと、
（Ｄ）値に対応する順序づけられた複数の特徴を含み、また特徴値の分布を有するデータ部分をバーコードの中に提供するステップと
を含む、バーコードを生成する方法。
【請求項２】
複数の順序づけられた特徴がスタートコード又はストップコードを含まない請求項１に記載の方法。
【請求項３】
バーコードがスタートコード又はストップコードを含まない請求項１に記載の方法。
【請求項４】
（Ｅ）バーコードを出力メディアへ書き込むステップを更に含む請求項１に記載の方法。
【請求項５】
ステップ（Ｅ）が、スタートコード又はストップコードを出力メディアへ書き込むことなく、バーコードを出力メディアへ書き込むステップを含む請求項４に記載の方法。
【請求項６】
ステップ（Ｅ）が、出力メディアから取り外すことのできる出力メディア部分へバーコードを書き込むステップを含む請求項４に記載の方法。
【請求項７】
順序づけられた複数の特徴が、第１の固有性を有するＮ1個の特徴及び第２の固有性を有するＮ2個の特徴から構成され、少なくとも１つの特徴制約がＮ1及びＮ2を指定する請求項１に記載の方法。
【請求項８】
入力値の範囲を識別する第１の識別手段と、
前記入力値の範囲をエンコードすることのできる特徴値の分布を識別する第２の識別手段と、
前記入力値の範囲の中において値を識別してバーコードの中にエンコードする第３の識別手段と、
値に対応する順序づけられた複数の特徴を含み、また特徴値の分布を有するデータ部分をバーコードの中に提供する手段と
を含む、バーコードを生成するシステム。
【請求項９】
バーコードがスタートコード又はストップコードを含まない請求項８に記載のシステム。
【請求項１０】
バーコードを出力メディアへ書き込む手段を更に含む請求項８に記載のシステム。
【請求項１１】
（Ａ）バーコードのデータ部分の中において、エンコード情報を表す複数の特徴を識別するステップと、
（Ｂ）バーコードのデータ部分を解析して、複数の特徴の間の特徴値の分布を識別するステップと、
（Ｃ）特徴値の分布及び複数の特徴の双方に基づいて、複数の特徴からデコード情報を導き出すステップと
を含む、バーコードによって表されたエンコード情報をデコードする方法。
【請求項１２】
ステップ（Ｃ）が、
（Ｃ）（１）複数の特徴に対応する複数の値を識別するステップと、
（Ｃ）（２）複数の値からデコード情報を導き出すステップと
を含む請求項１１に記載の方法。
【請求項１３】
デコード情報が単一の値から構成され、ステップ（Ｃ）（２）が複数の値から単一の値を導き出すステップを含む請求項１２に記載の方法。
【請求項１４】
バーコードの部分集合がスタートコード又はストップコードを表さない請求項１１に記載の方法。
【請求項１５】
複数の特徴がバーコード内の全ての特徴を含む請求項１１に記載の方法。
【請求項１６】
バーコードが出力メディアの中に具体化され、ステップ（Ａ）が出力メディアから複数の特徴を読み取るステップを含む請求項１１に記載の方法。
【請求項１７】
ステップ（Ａ）が、スタートコード又はストップコードを読み取ることなく、出力メディアから複数の特徴を読み取るステップを含む請求項１６に記載の方法。
【請求項１８】
ステップ（Ａ）が、出力メディア上の既定サイズの領域から複数の特徴を読み取るステップを含む請求項１６に記載の方法。
【請求項１９】
デコード情報が出力メディアの少なくとも１つの固有性を表し、（Ｄ）出力メディアの少なくとも１つの固有性に基づいてプリンタを構成するステップを更に含む請求項１６に記載の方法。
【請求項２０】
（Ｅ）ステップ（Ｄ）を実行した後に出力メディア上に出力を印刷するステップを更に含む請求項１９に記載の方法。
【請求項２１】
バーコードのデータ部分の中において、エンコード情報を表す複数の特徴を識別する手段と、
前記バーコードのデータ部分を解析し、複数の特徴の間の特徴値の分布を識別する手段と、
特徴値の分布及び複数の特徴の双方に基づいて、複数の特徴からデコード情報を導き出す手段と
を含む、バーコードによって表されたエンコード情報をデコードするシステム。
【請求項２２】
導き出す手段が、
複数の特徴に対応する複数の値を識別する手段と、
複数の値からデコード情報を導き出す手段と
を含む請求項２１に記載のシステム。
【請求項２３】
バーコードの部分集合がスタートコード又はストップコードを表さない請求項２１に記載の方法。
【請求項２４】
バーコードが出力メディアの中に具体化され、識別する手段が出力メディアから複数の特徴を読み取る手段を含む請求項２１に記載のシステム。
【請求項２５】
（Ａ）下記のステップ（Ａ）（１）及び（Ａ）（２）を実行することによって複数の特徴の複数の部分集合を識別するステップであって、ここで、ステップ（Ａ）（１）は、共通の固有性の値を共有する複数の特徴の第１の部分集合を識別し、ステップ（Ａ）（２）は、第１の部分集合を除き複数の特徴の中の全ての特徴を、複数の特徴の第２の部分集合として識別する、ステップと、
（Ｂ）複数の部分集合を複数の値へデコードするステップと
を含む、複数の特徴を含むコードをデコードする方法。
【請求項２６】
（Ｃ）複数の値に基づいて最終値を識別するステップを更に含む請求項２５に記載の方法。
【請求項２７】
ステップ（Ｃ）が、
（Ｃ）（１）中間値を初期化するステップと、
（Ｃ）（２）複数の値Ｖiの各々について
（ａ）対応する乗数Ｃiを識別し、
（ｂ）乗数Ｃiに中間値を掛けて積を生成し、
（ｃ）Ｖiを中間値に加えて合計を取得し、
（ｄ）合計を中間値に割り当て、
（Ｃ）（３）中間値を最終値に割り当てるステップと
を含む請求項２６に記載の方法。
【請求項２８】
ステップ（Ｃ）が、
（Ｃ）（１）複数の値に基づいて中間値を識別するステップと、
（Ｃ）（２）オフセットを中間値に加えて最終値を生成するステップと
を含む請求項２６に記載の方法。
【請求項２９】
ステップ（Ｂ）が、
（Ｂ）（１）第１の部分集合内の特徴が第１の文字によって表され、第２の部分集合内の特徴が第２の文字によって表されるパターンを識別するステップと、
（Ｂ）（２）文字のパターンに基づいて値を識別するステップと
を含む請求項２５に記載の方法。
【請求項３０】
ステップ（Ｂ）が、
（Ｂ）（３）複数の特徴から前記第１の部分集合を除去するステップと、
（Ｂ）（４）ステップ（Ａ）（１）、（Ａ）（２）、（Ｂ）（１）及び（Ｂ）（２）を反復するステップと
を更に含む請求項２９に記載の方法。
【請求項３１】
ステップ（Ｂ）が、
（Ｂ）（１）複数の部分集合に対応する複数のパターンを識別するステップと、
（Ｂ）（２）前記複数のパターンに基づいて複数の値を識別するステップと
を含む請求項２５に記載の方法。
【請求項３２】
コードがバーコードを含む請求項２５に記載の方法。
【請求項３３】
複数の特徴の複数の部分集合を識別する第１の識別手段であって、ここで、当該第１の識別手段が、共通の固有性の値を共有する複数の特徴の第１の部分集合を識別する第２の識別手段と、第１の部分集合を除き複数の特徴の中の全ての特徴を、複数の特徴の第２の部分集合として識別する第３の識別手段とを有する、第１の識別手段と、
複数の部分集合を複数の値へデコードする手段と
を含む、複数の特徴を含むコードをデコードするシステム。
【請求項３４】
複数の値に基づいて最終値を識別する手段を更に含む請求項３３に記載のシステム。
【請求項３５】
デコードする手段が、
複数の部分集合に対応する複数のパターンを識別する手段と、
複数のパターンに基づいて複数の値を識別する手段と
を含む請求項３３に記載のシステム。
【請求項３６】
（Ａ）コード内の特徴の総数ＮＴをＮの初期値として識別するステップと、
（Ｂ）第１の特徴値を識別するステップと、
（Ｃ）第１の特徴値以外の値を有するコード内の特徴の総数ＮＴgをＮgの初期値として識別するステップと、
（Ｄ）ＮＴ及びＮＴgの値に基づいて特徴の組み合わせの数Ｃsを識別するステップと、
（Ｅ）値Ｖ及び特徴の組み合わせの数Ｃsに基づいてコード内の複数の特徴の１つへ値を割り当てるステップと
を含む、値Ｖをコードへエンコードする方法。
【請求項３７】
（Ｆ）Ｎの値を減分するステップと、
（Ｇ）Ｎ＜０になるまでステップ（Ｄ）〜（Ｆ）を反復し、ステップ（Ｅ）の各々の実行がコード内の別個の特徴の上で協働するステップと
を更に含む請求項３６に記載の方法。
【請求項３８】
ステップ（Ｅ）が、
（Ｄ）（１）Ｖ≧Ｃsであれば、複数の特徴の１つへ第１の値を割り当ててＣsの値だけＶの値を減らすステップと、
（Ｄ）（２）Ｖ＜Ｃsであれば、複数の特徴の１つへ第２の値を割り当ててＮgの値を減分するステップと
を含む請求項３６に記載の方法。
【請求項３９】
コード内の特徴の総数ＮＴをＮの初期値として識別する手段と、
第１の特徴値を識別する手段と、
第１の特徴値以外の値を有するコード内の特徴の総数ＮＴgをＮgの初期値として識別する手段と、
ＮＴ及びＮＴgの値に基づいて特徴の組み合わせの数Ｃsを識別する手段と、
値Ｖ及び特徴の組み合わせの数Ｃｓに基づいてコード内の複数の特徴の１つへ値を割り当てる手段と
を含む、値Ｖをコードへエンコードするシステム。
【請求項４０】
（Ａ）コード内の特徴の総数ＮＴをＮの初期値として識別するステップと、
（Ｂ）第１の特徴値以外の値を有するコード内の特徴の総数ＮＴgをＮgの初期値として識別するステップと、
（Ｃ）ＮＴ及びＮＴgの値に基づいて特徴の組み合わせの数Ｃsを識別するステップと、
（Ｄ）コード内の特徴を選択するステップと、
（Ｅ）選択されたコード特徴の値、Ｎの値、及びＮgの値に基づいて値Ｖを更新するステップと
を含む、コードを値Ｖへデコードする方法。
【請求項４１】
（Ｆ）Ｎの値を減分するステップと、
（Ｇ）コード内の全ての特徴がステップ（Ｄ）で選択されてしまうまで、ステップ（Ｄ）〜（Ｅ）を反復するステップと
を更に含む請求項４０に記載の方法。
【請求項４２】
ステップ（Ｅ）が、
（Ｄ）（１）選択された特徴が第１の値を有し、またＮg≧０であれば、Ｎ！／Ｎg！／（Ｎ−Ｎg）！をＶへ加えるステップと、
（Ｄ）（２）選択された特徴が第２の値を有すれば、Ｎgの値を減分するステップと
を含む請求項４０に記載の方法。
【請求項４３】
コード内の特徴の総数ＮＴをＮの初期値として識別する手段と、
第１の特徴値以外の値を有するコード内の特徴の総数ＮＴgをＮgの初期値として識別する手段と、
ＮＴ及びＮＴgの値に基づいて特徴の組み合わせの数Ｃsを識別する手段と、
コード内の特徴を選択する手段と、
選択されたコード特徴の値、Ｎの値、及びＮgの値に基づいて値Ｖを更新する手段と
を含む、コードを値Ｖへデコードするシステム。
【請求項４４】
（Ａ）第１のコードの第１の特徴分布を識別するステップと、
（Ｂ）第２のコードの第２の特徴分布を識別するステップと、
（Ｃ）前記第１の特徴分布及び前記第２の特徴分布の組み合わせに基づいて第１の値を識別するステップと
を含む、第１のコード及び第２のコードを第１の値へデコードする方法。
【請求項４５】
第１及び第２のコードがバーコードを含み、第１及び第２の特徴分布が幅分布を含む請求項４４に記載の方法。
【請求項４６】
第１の特徴分布が、第１のコードについて許容される複数の特徴分布の１つを含む請求項４４に記載の方法。
【請求項４７】
第２の特徴分布が、第２のコードについて許容される複数の特徴分布の１つを含む請求項４６に記載の方法。
【請求項４８】
（Ｄ）第１のコードを第２の値へデコードするステップを更に含む請求項４４に記載の方法。
【請求項４９】
（Ｅ）第２のコードを第３の値へデコードするステップを更に含む請求項４８に記載の方法。
【請求項５０】
第１のコードの第１の特徴分布を識別する手段と、
第２のコードの第２の特徴分布を識別する手段と、
前記第１の特徴分布及び前記第２の特徴分布の組み合わせに基づいて第１の値を識別する手段と
を含む、第１のコード及び第２のコードを第１の値へデコードするシステム。
【請求項５１】
第１及び第２のコードがバーコードを含み、第１及び第２の特徴分布が幅分布を含む請求項５０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本出願は、「Ｔｈｅｒｍａｌ  Ｉｍａｇｉｎｇ  Ｓｙｓｔｅｍ」と題する２００４年１０月５日に許可された同一出願人の米国特許第６，８０１，２３３Ｂ２号に関し、参照して本明細書に組み入れられる。
【０００２】
［発明の分野］
本発明は、印刷されたコードに関し、更に具体的には、印刷メディアの上で使用され、そのようなメディアの固有性を識別するコードに関する。
【背景技術】
【０００３】
従来のディジタル・プリンタは、極めて多様な固有性を有する印刷メディアの上に印刷する。異なる印刷メディアの間で変動する固有性の例は、寸法、製造者、化学的組成、及び感度を含む。多くの場合、プリンタが印刷しているとき、現在の印刷メディアの具体的固有性をプリンタが考慮することは有用であり、プリンタはそのような固有性に基づいて印刷出力の品質を最適化してよい。
【０００４】
プリンタの使用者は、現在の印刷メディア固有性をプリンタへ手作業的に通知してよいが（例えば、ハードウェア制御パネル上の設定を選択するか、ソフトウェア構成プログラムなどによって）、そのような固有性を記述した情報を印刷メディアそれ自身の上にエンコードする様々な手法が周知である。例えば、そのような情報（本明細書では、「印刷メディア固有性情報」と呼ぶ）は、メディアの上に印刷されたコード、メディアの中に組み込まれた磁気材料、又はメディア上の化学的基質の中にエンコードされてよい。そのようなシステムにおいて、プリンタは、エンコードされた情報を印刷メディアから読み取るデバイスを備えている。プリンタは情報をデコードし、印刷メディアの固有性を識別する。次に、プリンタは適切なステップを取って、印刷メディアの識別された固有性に基づき印刷出力を最適化してよい。
【０００５】
例えば、幾つかのシステムにおいて、印刷メディア固有性情報は、メディア上に印刷されるバーコードの中にエンコードされる。対応するプリンタはバーコード・リーダを含み、このリーダは、バーコードがリーダの下を通過するときに印刷メディアからバーコードを読み取る。
【０００６】
そのような従来のシステムを説明する前に、従来のバーコードを詳細に説明する。一般的に、バーコードは黒いバーとスペースの配列であり、情報をエンコードするために使用される。そのような情報は、典型的には特定の製品に関連し、典型的には製品又は製品包装の上に印刷される。バーコードの中に情報をエンコードするには、多くの異なるシステムが存在する。「バーコード・システム」の用語は、本明細書では、バーコードを使用して情報を表す任意の具体的システムを意味する。製品包装の上で殆ど全世界的に印刷される統一商品コード（ＵＰＣ）は、おそらくバーコード・システムの最も知られた例である。
【０００７】
図１を参照すると、従来のバーコード１００の概略的な例が示される。バーコード１００は様々な幅の垂直黒バー（バー）１０２ａ〜１０２ｉの列を含み、これらのバーは様々な幅の白スペース（「スペース」）１０４ａ〜１０４ｈによって分離される。「特徴」の用語は、本明細書では、バーコード内の単一のバー又は単一のスペースのいずれかを意味する。したがって、バー１０２ａ〜１０２ｉの各々、及びスペース１０４ａ〜１０４ｈの各々は、特徴である。
【０００８】
バーコード内の各々の特徴は、典型的には、幅よりも高さが著しい。「特徴幅」の用語は、本明細書では、特徴（例えば、バー）の全ての中心を接続する次元１０６ａにおける単一の特徴の幅を意味する。典型的には、バーコード・システムは、システム内のバーコード内の全ての特徴に最小特徴幅（例えば、７．５ミル）を課している。最小特徴幅は、本明細書では、「単位」と呼ばれる。単一のバーコード内の異なる特徴は、異なる幅を有してよい。例えば、特徴１０２ｅは、特徴１０２ｄの２倍の幅である。特徴１０２ｄの幅が最小特徴幅であれば、特徴１０２ｄは「単一幅」又は「細い」特徴と呼んでよく、特徴１０２ｅは「２倍幅」又は「太い」特徴と呼んでよい。
【０００９】
多くのバーコード・システムは、各々の特徴が最小特徴幅の整数倍であることを要求する。例えば、図１で示される例示的バーコード１００において、各々の特徴の幅は、最小特徴幅に等しいか、正確に最小特徴幅の２倍である。しかし、全ての特徴幅が最小特徴（単位）幅の整数倍であることを、全てのシステムが要求するわけではない。２つだけの別個の幅を有するバーコードにおいて、幅特徴は、典型的には、細い特徴の２〜２．５倍の幅である。一般的に、単一のバーコード内の特徴幅は、特徴が首尾一貫して正しくデコード可能である限り、どのように変動してもよい。
【００１０】
「組み合わせ」の用語は、本明細書において、所与の幅分布を使用して有限個の特徴を特異に、また一意に順序づけることを意味する。「幅分布」の用語は、下記で定義される。図１で示されるバーコード１００は、組み合わせの例である。本明細書で使用される「シンボル」の用語は、「組み合わせ」と同義である。
【００１１】
典型的には、バーコード・システムは、組み合わせの集合と、対応する値、例えば、文字及び／又は数字との間の、マッピングを定義する。そのようなマッピングは、値を、対応する組み合わせへエンコードし、組み合わせを、対応する値へデコードするために使用されてよい。バーコード・システムは、典型的には、システム内のシンボルに制約の集合、例えば、固定されたシンボル長（単位で測定される）、固定された特徴数、又はこれらの双方を課している。バーコード・システムの「シンボル集合」とは、バーコード・システム内で定義された全てのシンボルを意味する。典型的には、シンボル集合は、適用可能な制約の集合、例えば、シンボル長を満足させる全ての可能なシンボルを含む。
【００１２】
「バーコード」の用語は、典型的には、同じシンボル集合の元である１つ又は複数のシンボル（即ち、単一のバーコード・システムに従って定義されたシンボル）の列を意味する。「スタートコード」の用語は、シンボル集合の元ではなくバーコードの開始を定める特徴の特別の列を意味する。特定のバーコード列の始まりで起こるスタートコードは、バーコード・システム及びバーコードが含んでよい特別のコーディング特徴を識別する。同様に、「ストップコード」の用語は、シンボル集合の元ではなくバーコードの終わりを定める特徴の特別の列を意味する。したがって、従来のバーコードは、典型的には、スタートコード、それに続く１つ又は複数のシンボル、それに続くストップコードを含む。スタートコード及びストップコードは、バーコード・デコーダがバーコードを正しい方向に走査して正しいデコード方法を使用できるようにする。
【００１３】
前述したように、バーコード・シンボルは、相互に幅が異なり得る特徴の列を含む。しかし、幾つかのバーコード・システムにおいて、各々のシンボルは、固定数の既定幅を有する固定数の特徴を含むように制約される。例えば、バーコード・システムは、各々のシンボルが、単一幅の４つの特徴、２倍幅の３つの特徴、及び３倍幅の１つの特徴を含み、全部で１３単位の幅を有する全部で８つの特徴を含むことを要求してよい。この「幅分布」は、表記法（４，３，１）を使用して表されてよい。そのようなシステムにおいて、全てのシンボルは同じ幅分布を有するが、異なる幅の特徴が現れる順序において変動する。
【００１４】
「幅配列」とは、特定のバーコード・シンボル内の特徴幅の列を表す配列である。例えば、前述したばかりの幅分布を使用するとき、有効な幅配列の例は（１，２，１，１，３，２，２，１）である。この幅配列は、第１の特徴が単一幅、第２の特徴が２倍幅、第３の特徴が単一幅、第４の特徴が単一幅、などのシンボルを表す。本明細書で使用されるように、変数Ｎはシンボル内の特徴の数を示し、変数Ｗfはシンボル内の索引ｆにおける特徴の幅を示す。ここで、１≦ｆ≦Ｎである。提供されたばかりの例示的幅配列の場合、Ｗ1＝１、Ｗ2＝２、及びＷ5＝３である。
【００１５】
異なるバーコード・システムは、異なる「情報密度」を有する。「情報密度」の用語は、本明細書において、特定のバーコード・システムがエンコードすることができる単位当たりの有効ビット数を意味し、ｌｏｇ2（利用可能なシンボルの総数）／（「単位」で表されたシンボルの長さ）として定義されてよい。例えば、「２  ｏｆ  ５」バーコード・システムにおいて、各々のシンボルは正確に５つの特徴を有し、正確にその中の２つは太く、正確にその中の３つは細い（即ち、幅分布は（３，２）である）。２  ｏｆ  ５シンボルの例はＢWＳNＢNＳWＢNである。ここで「Ｂ」はバーを意味し、「Ｓ」はスペースを意味し、添字「Ｗ」は太い特徴を意味し、添字「Ｎ」は細い特徴を意味する。
【００１６】
２  ｏｆ  ５システムでは１０個の可能なシンボルが存在し、３．３ビットの情報を有効に表す。各々のシンボルの中には７個の単位が存在する（各々が１単位である３個の細い特徴、及び各々が２単位である２個の太い特徴）。したがって、２  ｏｆ  ５システムの情報密度は、３．３ビット／７単位であるか、単位当たり約０．４７ビットである。この情報密度は、既存のバーコード・システムの中では比較的高い。大量の情報が小さなバーコード内でエンコードされなければならない場合、より高い情報密度を達成することが望ましい。
【００１７】
情報をバーコードへエンコードし、バーコードから情報をデコードすることが不可能であれば、バーコード・システムは有用とは言えないであろう。したがって、任意のバーコード・システムについて、バーコードとの間で情報をエンコード及びデコードする方法を提供することが必要である。典型的には、エンコードは、エンコードされていない情報（例えば、数）をシステム内のバーコードへマップするルックアップ・テーブルを使用して実行される。同様に、デコードは、典型的には、バーコードを数情報又は他の種類の値へマップするルックアップ・テーブルを使用して実行される。エンコード及びデコードは、ルックアップ・テーブルを使用して迅速に実行してよいが、ルックアップ・テーブルの１つの欠点は、記憶装置が著しい量のメモリを消費し得ることである。特に、シンボルが多数の特徴を含むバーコード・システムにおいてそうである。一般的に、エンコードとデコードの双方を迅速に実行し、比較的小さな量のメモリを使用することが望ましい。
【発明の開示】
【発明が解決しようとする課題】
【００１８】
したがって、必要なことは、バーコード内のメディア識別情報を効率的にエンコード及びデコードする改善された手法である。
【課題を解決するための手段】
【００１９】
複数の特徴、例えば、変動幅のバー及びスペースを含むコード、例えば、バーコードをエンコード及びデコードする手法が開示される。本発明の１つの態様において、単一のシンボルを使用して任意の長さのコードへ情報をエンコードする手法が提供される。２つよりも多い別個の値の特徴を有するコードを使用して情報をエンコード及びデコードする手法も提供される。
【００２０】
本発明の様々な態様及び実施形態の他の特徴及び利点は、下記の説明及び請求項から明らかになるであろう。
【発明を実施するための最良の形態】
【００２１】
本発明の実施形態を説明する前に、従来のバーコード・システムのある一定の固有性を説明する。多くの既存のバーコード・システムにおいて、各々のシンボルは少数の特徴を含む。結果として、別個のシンボルの数は典型的には小さく、通常、２００以下である。そのようなシステムで多数の組み合わせを得るためには、シンボルを組み合わせることが必要である。例えば、２  ｏｆ  ５バーコード・システムでは、５つの特徴が存在し、その中の２つは２単位の幅であり、全部で７単位の長さを与える（例えば、単位が１ｍｍであれば、７ｍｍである）。これらの特徴の１０個の可能な組み合わせ（即ち、１０個の異なるシンボル）が存在し、数字０〜９をエンコードするために使用される。２つのそのようなシンボルを含むバーコードは、全部で１４単位（例えば、１４ｍｍ）の長さを有し、全部で１００個の可能な値をエンコードすることができる。同様に、３シンボル２  ｏｆ  ５バーコードは１，０００個の値をエンコードすることができ、４シンボル２  ｏｆ  ５バーコードは１０，０００個の値をエンコードすることができる。
【００２２】
しかし、本発明の実施形態によれば、複数のシンボルを組み合わせることによってではなく、単一のシンボルの長さを拡張することによって、追加の情報がエンコードされる。シンボルの長さが大きくなるにつれて、組み合わせの数は劇的に増加する。例えば、７ｍｍの２つのシンボルの代わりに、４つの太いバー及び６つの細いバー（４  ｏｆ  １０）を有する１４ｍｍの１つのシンボルを使用するならば、組み合わせの総数は２１０個となる（２  ｏｆ  ５を使用する２シンボルの場合の１００個と対比される）。３シンボル等価物は６  ｏｆ  １５となり、５，００５個の値を生じる（２  ｏｆ  ５の場合の１，０００個と対比される）。単一の２８ｍｍシンボル（８  ｏｆ  ２０）を使用することは、１２５，９７０個の値を生じる。これは２  ｏｆ  ５システムの１２倍を超える。
【００２３】
本発明の１つの実施形態において、シンボル内の特徴の数が幾つであろうと、全てのバーコードが単一のシンボルから構成されるバーコード・システムを提供することによって、高い情報密度が得られる。複数のシンボルを生成してそれらを連結するのではなく、単一のシンボルの長さを拡張することによって、追加の値が得られる。そのようなシステムにおいて、どのような長さのバーコードも、いかなる内部スタート及びストップコードも含む必要はないことを理解すべきである。更に、ある条件のもとでは、初期スタートコード及び終端ストップコードは、システム内のバーコードから削除されてよい。バーコード・システム以外のコード・システムでも、同じ手法が適用されてよい。したがって、更に一般的には、本発明の１つの実施形態において、システム内の特徴の数が幾つであろうと、全てのコードが単一のシンボルから構成されるコード・システムが提供される。したがって、「特徴」の用語はバーコード内のバー及びスペースに限定されず、任意の種類のコードの中に情報をエンコードするために使用される任意のマーキング又は識別可能なエンティティの他の族を意味する。
【００２４】
バーコードは、次の意味で「単一シンボル」から構成される。バーコードは、データ及びメタデータの双方を含むものと考えられてよい。従来のバーコード・システムにおいて、データは、情報をエンコードする１つ又は複数のシンボルを含み、メタデータは、スタートコード及びストップコードのような特殊シンボルを含む。本発明の様々な実施形態において、データ部分内の特徴の１つ又は複数の部分集合（例えば、個々のシンボル）ではなく、データ部分内の特徴の全てに全体として適用される制約の集合を、各々のバーコードのデータ部分が満足させるバーコード・システムが提供される。例えば、前述した２  ｏｆ  ５コードにおいて、１０特徴バーコードが制約の集合によって定義され、この制約の集合が、バーコードの２つの５特徴部分集合の各々によって満足される。２  ｏｆ  ５システム内で追加の特徴を有するバーコードは、各々が２  ｏｆ  ５制約を満足させる追加のシンボルを生成し、それらのシンボルをバーコードへ付加することによって生成される。対照的に、本発明の実施形態において、バーコードのデータ部分を生成するために使用される制約の集合は、データ部分の部分集合ではなく、全体としてのデータ部分へ適用される。バーコードがデータ部分のみを含み、メタデータ部分を含まないならば（例えば、バーコードがスタートコード及びストップコードを含まないならば）、制約の集合は、バーコードの部分集合ではなく全体としてのバーコードへ適用される。
【００２５】
図２Ａを参照すると、本発明の１つの実施形態に従って情報をエンコードするために使用される方法２００のフローチャートが示される。方法２００は、エンコードすべき情報を識別する（ステップ２０２）。本発明の１つの実施形態において、ステップ２０２で識別された情報は、印刷メディア固有性情報である。
【００２６】
方法２００は、ステップ２０２で識別された情報をエンコードするために要求されるビットの数を識別する（ステップ２０４）。方法２００は、ステップ２０４で識別されたビットの数をコードがエンコードできるような、コードの特徴の数Ｎ及び特徴制約の集合（例えば、特徴の幅及び／又は全体のコード長）を選択する（ステップ２０６）。Ｎは、１よりも大きい任意の正の整数であってよい。従来のバーコード・システムによって使用される制約の集合の例は、２  ｏｆ  ５バーコード・システムによって課される制約である。２  ｏｆ  ５バーコード・システムは、シンボルが５つの特徴を含み、その中の２つが太く３つが細いことを要求する。下記で詳細に説明するように、方法２００のステップ２０６で選択された制約は、単一コード内の複数シンボルへ適用されず、データ部分の長さがどのようなものであれ、全体としてのコードの全データ部分へ適用される。本発明の実施形態で適用され得る他の制約の例は、下記で説明する。
【００２７】
方法２００は、ステップ２０６で選択された特徴制約を満足させるＮ個の特徴（ステップ２０６で選択される）のコードへ、ステップ２０２で識別された情報をエンコードする（ステップ２０８）。更に具体的には、方法２００はスタートコードを生成する（ステップ２１０）。方法２００は、ステップ２０４で選択された特徴制約を満足させるＮ個の特徴のコードへ、ステップ２０２で識別された情報をエンコードする（ステップ２１２）。データ部分は、いかなる内部スタート又はストップコードも含まなくてよい。
【００２８】
方法２００はストップコードを生成する（ステップ２１４）。ステップ２０８によって生成されたコードは、ステップ２１０で生成されたスタートコード、それに続いてステップ２１２で生成されたコード、それに続いてステップ２１４で生成されたストップコードを含む。方法２００は、ステップ２０８で生成されたコードを出力メディアへ書き込む（ステップ２１６）。方法２００によって生成されたデータ部分は「データ」の例であり、ステップ２１０及び２１４で生成されたスタートコード及びストップコードは、それぞれ本明細書で使用される用語としての「メタデータ」の例である。
【００２９】
方法２００によって生成されたコードは、単一のシンボルを含むことに注意されたい。単一のシンボルとは、ステップ２０６で識別された制約が、コード特徴の複数の部分集合ではなくコードのデータ部分の特徴へ全体として適用されるという意味においてである。図２Ａで示された実施形態において、方法２００によって生成されたコードは、いかなる内部スタート又はストップコードも含まない。図２Ａで示される実施形態において、方法２００によって生成されたコードは、初期スタートコード及び終端ストップコードを含むが、これは必要とされない。むしろ、方法２００によって生成されたコードは、いかなるスタート又はストップコードも含む必要はない。
【００３０】
更に、方法２００によって生成されたコードは、ステップ２０６で選択されたＮの値がどのようなものであれ、単一のシンボルを含む。言い換えれば、Ｎの値が増加されても、結果のコードが複数のシンボルを含むようになることはない。このようにしてコードを生成するために適用される手法の例は、下記で説明される。
【００３１】
図２Ｂを参照すると、図２Ａの方法２００によって生成されるコードの中にエンコードされた情報をデコードするため、本発明の１つの実施形態で使用される方法２２０のフローチャートが示される。コードは、出力メディアの上に印刷され、印刷メディア固有性情報を表してよい。方法２２０は、コードの特徴の数Ｎを識別する（ステップ２２２）。Ｎは、１よりも大きい任意の正の整数であってよい。ステップ２２２は、例えば、バーコード・リーダ又は他のデバイスを使用してコードを読み取り、コード内の特徴の数を識別することによって実行されてよい。方法２２０は、デコードすべき特徴値を識別する（ステップ２２４）。ステップ２２４は、ステップ２２２と同時に実行されてよい。
【００３２】
方法２２０は、識別された特徴を情報へデコードするが、特徴を複数の別個のシンボルとしては解釈しない（ステップ２２６）。更に具体的には、方法２２０は、任意的に、特徴の集合の始まりからスタートコード２２８を読み取る（ステップ２２８）。方法２２０は、任意的なスタートコードに続くデータ部分の中の特徴を情報へデコードするが、特徴を複数の別個のシンボルとして解釈しない（ステップ２３０）。むしろ、下記で詳細に説明するように、データ部分の中の特徴は全体として解釈される。ステップ２３０で読み取られた特徴は、スタート又はストップコードとして解釈されるいかなる特徴も含む必要はないことに注意されたい。
【００３３】
方法２２０は、任意的に、ストップコードを読み取る（ステップ２３４）。コードはスタート及びストップコードを省略してよいから、ステップ２２８及び２３４は省略されてよい。更に、方法２００によってデコードされるコードのデータ部分は、ステップ２０６で選択されたＮの値がどのようなものであれ、単一のシンボルを含む。言い換えれば、方法２２０は、特徴の任意の数Ｎを有するコードについて実行されてよい。このようにしてコードをデコードするために適用される手法の例は、下記で説明される。
【００３４】
本発明の１つの実施形態において、本明細書では「帰納的Ｗ  ｏｆ  Ｎ」又は「入れ子バーコード」と呼ばれるバーコード・システムの族が提供される。この族におけるバーコード・システムは、単一のシンボルが可変幅の特徴を含み得るシンボル集合を有する。特定のバーコード・システムＳにおける別個の幅の数をＩSとする。ＩS＝４、即ち、４つの別個の幅の特徴が存在する例示的バーコード・システムＳを考える。要求されることではないが、例示を目的として、各々のそのような幅が最小特徴幅の整数倍であると仮定する。
【００３５】
幅Ｗiに等しい幅を有する特徴の数をＮiとする。ここで、１≦ｉ≦ＩSである。各々の幅Ｗiが別個である限り、各々の幅Ｗiは任意の幅であってよいことに注意されたい。１つの実施形態において、Ｗiの各々の値は、最小特徴幅にｉを掛けたものに等しい。システムＳの幅分布は、表記法（Ｎ1，Ｎ2，Ｎ3，．．．ＮIS）を使用して表されてよい。そのような場合、ＩS＝４である例において、任意のバーコードの中には、幅１（即ち、最小特徴幅）の特徴がＮ1個存在し、幅２（即ち、最小特徴幅の２倍）の特徴がＮ2個存在し、幅３（即ち、最小特徴幅の３倍）の特徴がＮ3個存在し、幅４（即ち、最小特徴幅の４倍）の特徴がＮ4個存在する。そのような場合に利用できる組み合わせの総数Ｃは、式１によって与えられる。ここで、Ｎ＝Ｎ1＋Ｎ2＋Ｎ3＋Ｎ4である。
【数１】
2008541297.tif 000003
式１
【００３６】
式１は、ＩS＝４である場合を表すが、式２で与えられるように、式１はＩSの任意の値について一般化されてよいことに注意されたい。
【数２】
2008541297.tif 000004
式２
【００３７】
例示を目的として、Ｎ1＝４、Ｎ2＝２、Ｎ3＝２、及びＮ4＝１である場合を考える。これらの制約を満足させるバーコード３００ａの例は、図３Ａに示される。バーコード３００ａは、全部でＮ＝９＝Ｎ1＋Ｎ2＋Ｎ3＋Ｎ4個の特徴３０２ａ〜３０２ｉを含む。バーコード３００ａの幅配列は（１，２，１，１，３，１，２，３，４）である。配列の要素は特徴３０２ａ〜３０２ｉの幅に対応する。単一幅の特徴がＮ1＝４個存在し（３０２ａ、３０２ｃ、３０２ｄ、３０２ｆ）、２倍幅の特徴がＮ2＝２個存在し（３０２ｂ、３０２ｇ）、３倍幅の特徴がＮ3＝２個存在し（３０２ｅ、３０２ｈ）、４倍幅の特徴がＮ4＝１個存在する（３０２ｉ）ことに注意されたい。しかし、幅Ｗ1、Ｗ2、Ｗ3、及びＷ4は、最小特徴幅の連続した整数倍である必要はなく、別個の特徴幅の任意の集合であってよいことを想起されたい。
【００３８】
図４Ａを参照すると、そのようなシステムに従ってエンコードされるバーコード（例えば、バーコード３００ａ）をデコードする方法４００のフローチャートが示される。方法４００は、デコードすべきバーコードを識別し（ステップ４０１）、索引変数ｉを１へ初期化する（ステップ４０２）。
【００３９】
方法４００は、ｉがＩS（別個の特徴幅の数）よりも大きいかどうかを決定する（ステップ４０３）。大きくなければ、方法４００はステップ４０４で処理を継続する。現在の例では、ｉ＝１及びＩS＝４であり、方法４００はステップ４０４へ進む。
【００４０】
方法４００は、バーコード内の最も細い幅の特徴を「細い」特徴として識別する（ステップ４０４）。例えば、図３で示されるバーコード３００ａにおいて、最も細い幅は単一幅（幅１）である。特徴３０２ａ、３０２ｃ、３０２ｄ、及び３０２ｆは、この幅を有する。したがって、方法４００はステップ４０４でバーコード３００ａの特徴３０２ａ、３０２ｃ、３０２ｄ、及び３０２ｆを「細い」として識別する。
【００４１】
方法４００は、バーコード内の全ての残りの特徴を「太い」特徴として識別する（ステップ４０６）。例えば、方法４００はステップ４０６で特徴３０２ｂ、３０２ｅ、及び３０２ｇ〜３０２ｉを「太い」特徴として識別する。方法４００は、それぞれステップ４０４及び４０６で識別された細い特徴及び太い特徴によって形成されたパターンを識別する（ステップ４０８）。例えば、図３Ｂを参照すると、パターン３１０ａは、バーコード３００ａ（図３Ａ）の「細い」及び「太い」特徴を表すように示される。ここで、「ｎ」は「細い」特徴を表し、「ｗ」は「太い」特徴を表す。パターン３１０ａは要素３１２ａ〜３１２ｉを含み、これらの要素はバーコード３００ａ（図３Ａ）内の特徴３０２ａ〜３０２ｉと１対１の対応を有する。
【００４２】
方法４００は、パターンを中間値Ｖiへデコードする（ステップ４１０）。このデコードは任意の仕方で実行されてよく（例えば、ルックアップ・テーブル及び／又はアルゴリズムを使用して）、結果の値は任意の種類の値、例えば、数字、文字、又は列挙型であってよい。ステップ４１０でパターンをデコードするために使用される手法の例は、図６に関して下記で説明する。例示を目的として、この場合、Ｖ1＝１０３であると仮定する。
【００４３】
方法４００は、バーコード３００ａから「細い」特徴を除去する（ステップ４１２）。例えば、図３Ａに示されるバーコード３００ａから「細い」（単一幅）特徴を除去すると、図３Ｃに示される「バーコード」３００ｂを生じる。「バーコード」３００ｂは真のバーコードではなく、バーコード３００ａをデコードする目的で使用される中間構造であることに注意されたい。バーコード３００ｂは、特徴３０２ｂ、３０２ｅ、及び３０２ｇ〜３０２ｉを含む。この新しいバーコード３００ｂの中の最も細い特徴３０２ｂ及び３０２ｇは、幅２を有することに注意されたい。現在の説明は、バーコードから細い特徴を「除去」するとしているが、そのような「除去」は、バーコードの表示から要素を削除することなく実行され得ることに注意されたい。むしろ、「除去」の用語は、一般的に、下記で詳細に説明するように、方法４００の後続のステップでバーコードの「細い」特徴を考慮外にする任意の手法を意味する。
【００４４】
方法４００はｉの値を増分し（ステップ４１６）、ステップ４０３へ戻る。ｉ≦ＩSであれば（ステップ４０３）、方法４００はステップ４０４で処理を継続する。現在の例では、ｉ＝２及びＩS＝４であり、したがって方法４００はステップ４０４へ継続する。
【００４５】
ステップ４０４のこの反復において、２倍幅（幅＝２）を有する特徴は、「細い」特徴として解釈される（ステップ４０４）。現在の例において、これらは特徴３０２ｂ及び３０２ｇである。全ての他の特徴は、「太い」特徴として解釈される（ステップ４０６）。現在の例において、これらは特徴３０２ｅ、３０２ｈ、及び３０２ｉである。
【００４６】
方法４００は、それぞれステップ４０４及び４０６で識別された細い特徴及び太い特徴によって形成されたパターンを識別する（ステップ４０８）。例えば、図３Ｄを参照すると、バーコード３００ｂ（図３Ｃ）の「細い」及び「太い」特徴を表すパターン３１０ｂが示される。パターン３１０ｂは要素３１４ａ〜３１４ｅを含む。これらはバーコード３００ａ（図３Ａ）内の特徴３０２ｂ、３０２ｅ、３０２ｇ、３０２ｈ、及び３０２ｉと１対１の対応を有する。方法４００はパターンを他の中間値Ｖiへデコードする（ステップ４１０）。例示を目的として、この場合、Ｖ2＝８と仮定する。
【００４７】
方法４００は、バーコードから「細い」特徴を除去する（ステップ４１２）。例えば、図３Ｃで示されたバーコード３００ｂから「細い」（２倍幅）特徴を除去すると、図３Ｅで示されたバーコード３００ｃを生じる。この新しいバーコード３００ｃの中の最も細い特徴３０２ｅ及び３０２ｈは幅３を有することに注意されたい。
【００４８】
方法４００はｉの値を増分し（ステップ４１６）、ステップ４０３へ戻る。ｉ≦ＩSであれば（ステップ４０３）、方法４００はステップ４０４で処理を継続する。現在の例において、ｉ＝３及びＩS＝４であり、したがって方法４００はステップ４０４へ継続する。
【００４９】
ステップ４０４のこの反復において、３倍幅（幅＝３）を有する特徴３０２ｅ及び３０２ｈは、「細い」特徴として解釈される（ステップ４０４）。全ての他の特徴は、「太い」特徴として解釈される（ステップ４０６）。現在の例において、唯一のそのような特徴は特徴３０２ｉである。
【００５０】
方法４００は、それぞれステップ４０４及び４０６で識別された細い特徴及び太い特徴によって形成されたパターンを識別する（ステップ４０８）。例えば、図３Ｆを参照すると、バーコード３００ｃ（図３Ｅ）の「細い」及び「太い」特徴を表すパターン３１０ｃが示される。パターン３１０ｃは要素３１６ａ〜３１６ｃを含み、これらはバーコード３００ａ（図３Ａ）の中の特徴３０２ｅ、３０２ｈ、及び３０２ｉと１対１の対応を有する。方法４００は、パターン３１０ｃを他の中間値Ｖiへデコードする（ステップ４１０）。例示を目的として、この場合、Ｖ3＝２と仮定する。
【００５１】
方法４００は、バーコードから「細い」特徴を除去する（ステップ４１２）。例えば、図３Ｅで示されたバーコード３００ｃから「細い」（３倍幅）特徴を除去すると、図３Ｇで示されたバーコード３００ｄを生じる。この新しいバーコード３００ｄの中の唯一の特徴３０２ｉは幅４を有することに注意されたい。
【００５２】
方法４００はｉの値を増分し（ステップ４１６）、ステップ４０３へ戻る。ｉ＝４及びＩS＝４であるから、方法４００はステップ４０４へ継続する。現在、１つの可能な値を有する１つだけの特徴が存在するから、Ｖ4＝０である。一度、次にｉがステップ４１６で増分されると、ｉ＝５及びＩS＝４である。したがって、ステップ４０３の後、方法４００はステップ４１８へ進む。そこでは、方法４００が、１≦ｉ≦ＩSについて、デコード値Ｖiから最終デコード値を導き出す。図４Ａで示された実施形態において、デコード値Ｖiの総数は、常に、別個の幅の数ＩSに等しいことに注意されたい。更に注意すべきは、ステップ４１８が任意的であり、Ｖiの個々の値が使用されてよく、それらから単一の最終デコード値が導き出されなくてもよいことである。しかし、ステップ４１８が実行されるならば、それは様々な任意の仕方で実行されてよい。
【００５３】
図４Ａで示される方法４００は、最も細い特徴から始めて最も太い特徴で終わるように特徴を全探索するが、方法４００は任意の順序で特徴を全探索してよいことに注意されたい。更に、方法４００は左から右へ特徴を処理するが、これは必要とされない。むしろ、方法４００は任意の順序、例えば、右から左、又は中央から特徴を処理してよい。
【００５４】
例えば、図４Ｂを参照すると、ステップ４１８を実現するため、本発明の１つの実施形態で実行される方法４３０のフローチャートが示される。方法４３０の動作を説明する前に、バーコード「レベル」の概念を紹介する。本発明の１つの実施形態において、バーコード、例えば、図３Ａで示されるバーコード３００ａは、複数のレベルを含むものとして取り扱われる。バーコード自身（例えば、図３Ｂの３１０ａの中で「細い」及び「太い」特徴として解釈されるバーコード３００ａ）はレベル１である。「細い」特徴の第１の集合を除去することから生じるバーコード（例えば、図３Ｄの３１０ｂの中で解釈されるバーコード３００ｂ）はレベル２である。「細い」特徴の第２の集合を除去することから生じるバーコード（例えば、図３Ｆの３１０ｃの中で解釈されるバーコード３００ｃ）はレベル３である。以下同様である。
【００５５】
図４Ｂへ戻って、方法４３０は索引変数ｉの値をＩSの値へ初期化する（ステップ４３２）。例えば、ＩS＝４であれば、ステップ４３２の後にｉ＝４である。方法４３０は最終デコード値ＦＶの値をゼロへ初期化する（又は、任意的に、前のバーコード計算又はある他の計算の結果初期化する）（ステップ４３４）。
【００５６】
方法４３０は、レベルｉにおける可能なパターンの数Ｃiを識別する（ステップ４３６）。例えば、ｉ＝２であれば、Ｃiはレベル２におけるパターンの組み合わせの数、即ち、幅２以上の幅を有するバーコードに基づくパターンの組み合わせの数を表す。
【００５７】
方法はＦＶにＣiを掛け、レベルｉにおける中間デコード値Ｖiを結果の積に加え、ＦＶの新しい値を得る（ステップ４３８）。方法４３０は、ｉの値を減分する（ステップ４４０）。ステップ４３６〜４４０は、ｉ＝０となるまで反復される（ステップ４４２）。ｉ＝０となったとき、ＦＶの現在値がＦＶの最終値として返却される（ステップ４４４）。
【００５８】
方法４３０を、図３Ａで示されるバーコード３００ａへ適用する場合を考える。レベルｉにおけるバーコードをＢiとする。例えば、Ｂ1はバーコード３００ａであり（図３Ａ）、Ｂ2はバーコード３００ｂであり（図３Ｃ）、Ｂ3はバーコード３００ｃであり（図３Ｅ）、Ｂ4はバーコード３００ｄである（図３Ｇ）。同様に、レベルｉにおけるバーコードから導き出されたパターンをＰiとする。例えば、Ｐ1はパターン３１０ａであり（図３Ｂ）、Ｐ2はパターン３１０ｂであり（図３Ｄ）、Ｐ3はパターン３１０ｃである（図３Ｆ）。
【００５９】
レベルｉ＝１では（図３Ｂのパターン３１０ａ）、５つの太い特徴及び４つの細い特徴が存在し、１２６個の一意の組み合わせを生じる。言い換えれば、Ｃ1＝１２６である。例示を目的として、パターンＰ1  ３１０ａは数１０３へデコードされるものと仮定する。したがって、Ｖ1＝１０３である。
【００６０】
レベルｉ＝２では（図３Ｄのパターン３１０ｂ）、３つの太い特徴及び２つの細い特徴が存在し、１０個の一意の組み合わせを生じる。言い換えれば、Ｃ2＝１０である。例示を目的として、パターンＰ2  ３１０ｂは数８へデコードされるものと仮定する。したがって、Ｖ2＝８である。
【００６１】
レベルｉ＝３では（図３Ｆのパターン３１０ｃ）、１つの太い特徴及び２つの細い特徴が存在し、３つの一意の組み合わせを生じる。言い換えれば、Ｃ3＝３である。例示を目的として、パターンＰ3  ３１０ｃは数２へデコードされるものと仮定する。したがって、Ｖ3＝２である。バーコードＢ4  ３００ｄ（図３Ｇ）に対応するパターン（図示されず）は単一幅を有するだけであるから、パターンＰ4は値０へデコードされる。したがって、Ｖ4＝０である。
【００６２】
図４Ｂに示される方法４３０は、バーコードＢ1を、最終値ＦＶの最小有意部分として有効に取り扱うことに注意されたい。方法は、バーコードＢ2を、ＦＶの次の最小有意部分として以下同様に取り扱う。前述した特定の幅分布及び例示的バーコードＢを使用して、図４Ｂで示された方法４３０は、次の結果、即ち、（（Ｖ4＊Ｃ3＋Ｖ3）＊Ｃ2＋Ｖ2）＊Ｃ1＋Ｖ1＝（２＊１０＋８）＊１２６＋１０３＝３６３１を生成する。
【００６３】
各々のレベルｉにおけるバーコードの意味は、Ｂ1を最終値ＦＶの最大有意部分として解釈し、Ｂ2を最終値ＦＶの次の最大有意部分として解釈し、以下同様に解釈することによって逆にされてよい。図４Ｃを参照すると、この原理に従って動作する方法４５０のフローチャートが示される。
【００６４】
方法４５０は、索引変数ｉの値を１の値へ初期化する（ステップ４５２）。方法４５０は、最終デコード値ＦＶの値を０（又は、任意的に、前のバーコード計算又はある他の計算の結果）へ初期化する（ステップ４５４）。
【００６５】
方法４５０は、レベルｉにおけるパターンの可能な組み合わせの数Ｃiを識別する（ステップ４５６）。方法４５０はＦＶにＣiを掛け、レベルｉにおける中間デコード値Ｖiを結果の積に加え、ＦＶの新しい値を得る（ステップ４５８）。方法４５０はｉの値を増分する（ステップ４６０）。ステップ４５６〜４６０は、ｉ＞ＩSとなるまで反復される（ステップ４６２）。ＦＶの最終値はコードのデコード値として返却される（ステップ４６４）。方法４５０を前記の例へ適用すると、ＦＶ＝（１０３＊１０＋８）＊３＋２＝３１１６を生じる。
【００６６】
図４Ｂ及び図４Ｃで示された方法は、値Ｖｉを最終値へ組み合わせるために使用され得る方法の単なる例であることに注意されたい。他の方法を使用して、値Ｖｉを最終値へ組み合わせてよい。例えば、図４Ａ及び図４Ｂで示された方法は、当業者に周知の手法を使用して組み合わせられ、ＦＶの値を計算する帰納的関数を生成する。図４Ａ及び図４Ｃで示された方法についても、同じことが当てはまる。
【００６７】
前述した例示的バーコード・システムの各々において、バーコードはシステム内で単一の幅分布を有する。単一の幅分布が必要でなければ、利用可能な組み合わせの数は増加する。複数の分布を使用する幾つかの方法が存在する。
【００６８】
例えば、特定のバーコード・システムが、長さ、特徴の総数、個々の特徴の幅、１つの特定の特徴（又は幅）の数、及び／又は他のバーコード特性に制約を課すると仮定する。複数の幅分布は要件の組み合わせを満足させるかも知れず、複数の幅分布の１つは、単一の幅分布を必要とするシステムで使用されてよい。更に、システムによってエンコードされるべき値の範囲が、要件の組み合わせを満足させる１つの幅分布を使用して得られる範囲を超過すると仮定する。例えば、特定のバーコード・システムが、正確に１１単位の長さを有し、３つまでの別個の特徴幅を有する正確に５つの特徴を使用するバーコードを許すならば、３つの異なる幅分布が可能である。即ち、（ａ）５個の一意の組み合わせを生じる（０，４，１）、（ｂ）３０個の一意の組み合わせを生じる（１，２，２）、（ｃ）１０個の一意の組み合わせを生じる（２，０，３）である。したがって、そのようなシステムにおける一意の組み合わせの総数は４５（５＋３０＋１０）である。更に、この例における特定のバーコード・システムは、０〜４２の数の範囲をエンコードしなければならないと仮定する。本発明の１つの実施形態において、各々の特定の幅分布は、数の特定の範囲を表す。例えば、３０個の一意の組み合わせを有する幅分布（１，２，２）は、数０〜２９を表してよい。１０個の一意の組み合わせを有する幅分布（２，０，３）は、数３０〜３９を表してよい。５個の一意の組み合わせを有する幅分布（０，４，１）は、数４０〜４２を表してよい。最後の分布における５個の組み合わせの中の３個のみが、この例で使用されることに注意されたい。更に、分布の特定の順序づけは、任意のやり方で選択されてよいことに注意されたい。
【００６９】
そのような制約に従ってエンコードされるコードをデコードするため、当業者は、図４Ａ〜図４Ｃに関して前述したデコード手法を拡張する方法を理解するであろう。例えば、図４Ｄを参照すると、複数の幅分布を認識するシステム内でバーコードへ値を割り当てるため、本発明の１つの実施形態で実行される方法４７０のフローチャートが示される。方法４７０はバーコードを値Ｖへデコードする（ステップ４７２）。ステップ４７２は、例えば、図４Ａ及び図４Ｂ又は図４Ａ及び図４Ｃで示された方法を使用して実行されてよい。オフセット値は、デコードされたバーコードの特定の幅分布に基づいて計算される（ステップ４７４）。上記の例において、バーコードの幅分布が（１，２，２）であれば、オフセットは０である。なぜなら、先行する幅分布は存在しないからである。幅分布が（２，０，３）であれば、オフセットは３０である。先行する幅分布（１，２，２）は３０個の一意の組み合わせを有する。幅分布が（０，４，１）であれば、オフセットは４０である。オフセットは値Ｖへ加えられ、値Ｖ’を生成し（ステップ４７６）、この値がバーコードのデコード値として使用される（ステップ４７８）。
【００７０】
これまで説明したシステムは、単一のバーコードのみを使用する。しかし、１つより多いコードが使用され得る場合が存在する。これらのコードは、システムの要件を満足させる幅分布の任意の組み合わせを有してよい。それらは独立のエンティティとして取り扱われ、各々は、前述したように機能する。代替的に、コードが組み合わせられ、単一の数を作り出してよい。例えば、２つのバーコードＸ及びＹが存在すると仮定する。コードＸ及びＹの各々は、前述したように１つ又は複数の幅分布を有してよい。本発明の１つの実施形態において、２つのコードは、前述した手法を使用して、コードＸによって表された数をデコードすることによって組み合わせられる。結果は、コードＹについて利用可能な一意の組み合わせの数によって掛けられる。次に、結果の積は、コードＹによって表された数へ加えられる。
【００７１】
複数のコードを使用する他の方法は、１つの長いコードを２つ以上の部分へ分割することである。各々の部分は別々のセンサによって読み取られてよい。部分からの結果の幅配列は連結されてよく単一の幅配列を形成し、この幅配列が、前述したようにデコードされてよい。
【００７２】
複数のコードを使用する他の方法は、２つ以上のコードを利用することである。各々のコードは１つ又は複数の許された幅分布を有し、少なくとも１つのコードは２つ以上の許された分布を有する。前述したようにしてコード自身の中にエンコードされた情報に加えて、及びそれから独立して、分布の分布が、それ自体、情報をエンコードするために使用可能である。例えば、２つのコードＸ及びＹが存在すると仮定する。コードＸは幅分布Ａ又はＢの１つを有し、それら幅分布の各々は他のものと異なる。コードＹは幅分布Ｄ、Ｅ、又はＦの１つを有し、それら幅分布の各々は相互に異なる。しかし、幅分布Ａ及びＢの１つ又は複数は、幅分布Ｄ、Ｅ、又はＦとマッチしてよい。コードＸ及びＹは、数のデコード及び組み合わせに関して、前述したように取り扱われる。更に、Ｘ及びＹで使用される分布を見て、例えば、表１に示されるように、異なるペアについて値を割り当てることができる。
【表１】
2008541297.tif 000005
【００７３】
この情報は、Ｘ及びＹによって表された数と組み合わせ可能である。当業者は、説明したばかりのデコード手法に従って情報をエンコードする方法を理解するであろう。
【００７４】
これまでの説明は、本発明の様々な実施形態に従って実現されるバーコード・システムの特徴を説明する。特に、方法４００のステップ４１０（図４Ａ）に関して、各々のパターンＰiが、様々な方法の任意のものを使用して、対応する値Ｖiへデコードされ得ることが前述された。これから、例えば、図３Ｂ、図３Ｄ、及び図３Ｆで示されるパターンをデコードする手法の例を説明する。更に、値をそのようなパターンへエンコードする手法の例を説明する。
【００７５】
例えば、バーコードが全部でＮ個の特徴を有することに限定され、その中のＷ個の特徴が太い特徴であり、Ｎ−Ｗ個の特徴が細い特徴であるバーコード・システムＳを考える。例示を目的として、Ｎ＝５及びＷ＝２と仮定する。言い換えれば、５つの特徴が存在し、その中の２つが太く、３つが細い。本発明の１つの実施形態において、数字０〜９は表２に従ってシンボルへマップされる。
【表２】
2008541297.tif 000006
【００７６】
表２の左欄におけるシンボルの列は、表２の最初の行にあるシンボルｗｗｎｎｎで示されるように、太い特徴がシンボルの左側にあり、細い特徴が右側にあるシンボルから始めて、生成されていることに注意されたい。この第１のシンボルは数字０へマップされる。
【００７７】
次の数字（１）にマップするシンボルを生成するため、表２の第２の行で示されるように、最も右側の太い特徴が１つの位置だけ右へ動かされ、シンボルｗｎｗｎｎを生じる。２については、ｗが再び右へ動かされる（即ち、ｗｎｎｗｎ）。次の数字（２）へマップするシンボルを生成するため、表２の３行目で示されるように、最も右側の太い特徴が１つの位置だけ右へ動かされ、シンボルｗｎｎｗｎを生じる。この手続きは、最も右側の太い特徴がシンボルの最も右側の位置に来るまで反復される。これは、数字３へマップする表２の４行目にあるシンボルｗｎｎｎｗで示される。
【００７８】
次のシンボルは、表２の５番目の行で示されるように、元のシンボル（ｗｗｎｎｎ）へ戻り、双方の太い特徴を１つの位置だけ右へ動かし、シンボルｎｗｗｎｎを得ることによって生成される。このシンボルは数字５へマップする。前述した手続きは、残りの数字に対応するシンボルを生成するために反復される。
【００７９】
当業者は、表２に関して前述した手法が、より一般的に、任意の数の特徴を有するコードへ適用されてよいことを理解するであろう。そのようなコードにおいて、任意の数の特徴が太く、任意の数の特徴が細い。下記の説明において、図５Ａ〜図５Ｂ及び図６Ａ〜図６Ｂで示される実施形態は、２つだけの特徴値を有するコードを含むこと、及び図６Ｃ〜図６Ｄで示される実施形態は、任意の数の特徴値を有するコードへ一般化する方法を示すことに注意されたい。図５Ａ〜図５Ｂを参照すると、再帰的手続きが、表２で示されるコードの集合などのコードのフル・セットを生成することを示している。
【００８０】
図５Ａを参照すると、初期化方法５００が示される。初期化方法５００は、特徴Ｎの総数を、幅１を有する特徴の数Ｎ1と、幅０を有する特徴の数Ｎ0との合計として識別する（ステップ５０２）。この説明における「幅１」及び「幅０」のような用語は、列挙された値を意味することに注意されたい。列挙された値は、バーコード特徴の幅（この場合、幅１＝太い、幅０＝細い）へ変換されるだけでなく、更に一般的に、任意のコードの任意の種類の特徴（例えば、幅１＝赤、幅０＝青）へ変換されてよい。
【００８１】
ＩｎｉｔｉａｌＣｏｄｅという名前のコード配列は、Ｎ1個の１及びそれに続くＮ0個の０を含むように初期化される（ステップ５０４）。例えば、Ｎ1＝２及びＮ０＝3であれば、ＩｎｉｔｉａｌＣｏｄｅはコード１１０００へ初期化される。ＩｎｉｔｉａｌＣｏｄｅ配列は、ＧｅｎＡｌｌＣｏｄｅｓという名前の方法へ渡される（ステップ５０６）。この方法の実施形態は、図５Ｂで示される。これから詳細に説明するように、方法ＧｅｎＡｌｌＣｏｄｅｓはコードのフル・セット（例えば、表２で示されるコードの集合）を生成し、コードの集合を図５Ａで示される方法５００へ返却する（ステップ５０８）。
【００８２】
ここで図５Ｂを参照すると、本発明の１つの実施形態に従ったＧｅｎＡｌｌＣｏｄｅｓ方法５１０のフローチャートが示される。方法５１０は、コード配列ＩｎｉｔｉａｌＣｏｄｅを受け取る（ステップ５１２）。方法５１０は、コード配列ＩｎｉｔｉａｌＣｏｄｅがオール１又はオール０を含むかどうかを決定する（ステップ５１４）。コード配列ＩｎｉｔｉａｌＣｏｄｅがオール１又はオール０を含むならば、方法５１０はＩｎｉｔｉａｌＣｏｄｅコード配列から成る単一のコードを返却する（ステップ５１６）。
【００８３】
そうでなければ、方法５１０は、ＩｎｉｔｉａｌＣｏｄｅから最初の要素を剥ぎ取り、残りのコード要素をＩｎｉｔｉａｌＣｏｄｅ２という名前のコード配列として提供する（ステップ５１８）。例えば、ＩｎｉｔｉａｌＣｏｄｅがコード１１０００であったならば、ＩｎｉｔｉａｌＣｏｄｅ２はコード１０００となる。方法５１０は、ＩｎｉｔｉａｌＣｏｄｅ２を初期コードとしてそれ自身を呼び出してコードの集合を生成し、コードの集合内の各々のコードの始めに１を連結してＣｏｄｅＳｅｔ１という名前のコードの集合を生成する（ステップ５２０）。
【００８４】
同様に、方法５１０は、ＩｎｉｔｉａｌＣｏｄｅから最後の要素を剥ぎ取り、残りのコード要素をＩｎｉｔｉａｌＣｏｄｅ３という名前のコード配列として提供する（ステップ５２２）。例えば、ＩｎｉｔｉａｌＣｏｄｅがコード１１０００であったならば、ＩｎｉｔｉａｌＣｏｄｅ３はコード１１００となる。方法５１０は、ＩｎｉｔｉａｌＣｏｄｅ３を初期コードとしてそれ自身を呼び出してコードの集合を生成し、コードの集合内の各々のコードの始まりへ０を連結してＣｏｄｅＳｅｔ２という名前のコードの集合を生成する（ステップ５２４）。
【００８５】
方法５１０は、コード集合ＣｏｄｅＳｅｔ２をコード集合ＣｏｄｅＳｅｔ１の終わりに付加することによって、コードの最終集合を生成する（ステップ５２６）。結果として、ＦｉｎａｌＣｏｄｅＳｅｔは、ＣｏｄｅＳｅｔ１、それに続くＣｏｄｅＳｅｔ２を含む。最後に、方法５１０は最終のコード集合（ＦｉｎａｌＣｏｄｅＳｅｔ）を返却する（ステップ５２８）。例えば、Ｎ1＝２及びＮ0＝３であれば、最終のコード集合は表２で示されるコード集合に等しい。
【００８６】
図６Ａを参照すると、本発明の１つの実施形態に従って表２で示されるような順序づけられた列を有するコードへ値をエンコードする方法６００のフローチャートが示される。方法６００は、次のものを受け取る。即ち、（１）コード特徴配列Ｆの中にエンコードすべき値Ｖ、（２）生成されるべきコードの中の特徴の総数ＮＴ、及び（３）０以外の特徴値を有する特徴の数ＮＴgである（ステップ６０１）。
【００８７】
生成されるべきコードはバーコードであってよいが、このことは必要とされない。むしろ、コードは、任意の種類の特徴を有する任意の種類のコードであってよい。別個の特徴値は、０から始まる順次の整数値を使用して列挙されてよい。例えば、別個の幅が３つである特徴を有するバーコードにおいて、各々の別個の幅は別個の特徴の例である。幅の１つは特徴値０を割り当てられてよく、幅の他の１つは特徴値１を割り当てられてよく、幅の他の１つは特徴値２を割り当てられてよい。値は別個の特徴へ任意の順序で割り当てられてよい。例えば、バーコード内の最も細い特徴は最も低い値（例えば、０）を割り当てられ、最も太い特徴は最も高い値（例えば、２）を割り当てられるかも知れないが、このことは必要とされない。一般化を目的として、図６の残りの説明は、特徴自身の特性（例えば、幅）ではなく、列挙された特徴値を参照する。
【００８８】
方法６００は、ＮＴ（特徴の総数）の値を変数Ｎへ割り当て（ステップ６０２）、ＮＴg（特徴値が０よりも大きい特徴の利用可能な総数）の値を変数Ｎgへ割り当てる（ステップ６０４）。例えば、表２で示されるコードの場合、Ｎg＝２である。なぜなら、特徴値が０以外の各々のコードの中に２つの特徴が存在するからである（即ち、１の特徴値を有する「太い」特徴）。
【００８９】
方法６００は、Ｎ（ステップ６０６）及びＮg（ステップ６０８）の双方を減分する。特徴ポインタｆは、生成されているコードを表す特徴値の配列Ｆの中の最初の特徴を指すように初期化される（ステップ６１０）。Ｎgが０よりも大きいか等しいならば（ステップ６１１）、値Ｎ！／Ｎg！／（Ｎ−Ｎg）！が変数Ｃsへ割り当てられる（ステップ６１２）。そうでなければ、Ｃsは０へ設定される（ステップ６１３）。
【００９０】
Ｖ（エンコードされるべき値）がＣsよりも大きいか等しければ（ステップ６１４）、特徴ｆの特徴値は０へ設定され（ステップ６２０）、Ｖの値はＣsだけ減らされ（ステップ６２２）、Ｎの値は減分され（ステップ６２４）、特徴ポインタｆは特徴配列Ｆの中の次の特徴を指す（ステップ６２６）。
【００９１】
ステップ６１４へ戻って、値ＶがＣsよりも大きくなければ、特徴ｆの特徴値は１へ設定され（ステップ６３０）、Ｎgの値は減分され（ステップ６３２）、Ｎの値は減分され（ステップ６２４）、特徴ポインタｆは特徴配列Ｆの中の次の特徴を指す（ステップ６２６）。
【００９２】
Ｎが０よりも小さくなければ（ステップ６２８）、方法６００はステップ６１１へ戻り、前述したように追加の特徴をコード内に生成するように継続する。そうでなければ、コードの生成は完了し、方法は値Ｖを表すコードとして現在の特徴配列Ｆを返却する（ステップ６３４）。
【００９３】
図６Ｂを参照すると、本発明の１つの実施形態に従って、表２で示されるコードの固有性を有する特徴配列Ｆから情報をデコードする（ステップ６４１）方法６４０のフローチャートが示される（ここでは、ｎは０で置換され、ｗは１で置換される）。コード内の特徴の総数をＮとする（ステップ６４２）。０よりも大きい特徴値を有するコード内の特徴の数をＮgとする（ステップ６４４）。変数Ｃtの値はＮ！／Ｎg！／（Ｎ−Ｎg）！へ初期化される（ステップ６４６）。Ｎ（ステップ６４８）及びＮg（ステップ６５０）の値は減分される。累算器Ａの値は０へ初期化される（ステップ６５２）。特徴ポインタｆは、特徴配列Ｆ内の最初の特徴を指すように初期化される（ステップ６５４）。
【００９４】
特徴配列Ｆ内の最初の特徴ｆが０の特徴値を有し（ステップ６５６）、Ｎgの値が０よりも大きいか等しければ（ステップ６５８）、Ｎ！／Ｎg！／（Ｎ−Ｎg）！が累算器Ａへ加えられる（ステップ６６０）。特徴配列Ｆ内の最初の特徴ｆが０の特徴値を有さないならば、Ｎgは減分される（ステップ６６２）。特徴配列Ｆ内の最初の特徴ｆが０の特徴値を有し（ステップ６５６）、Ｎgの値が０よりも大きくないか等しくなければ（ステップ６５８）、方法はステップ６６４へ進む。
【００９５】
Ｎの値は減分され（ステップ６６４）、特徴ポインタｆは特徴配列Ｆ内の次の特徴へ進められる（ステップ６６６）。Ｎの値が０でなければ（ステップ６６８）、方法６４０はステップ６５６へ戻る。そうでなければ、累算器Ａ及び変数Ｃtの値が返却される（ステップ６７０）。累算器Ａの値は、特徴配列Ｆのデコード値を表す。
【００９６】
図６Ａ〜図６Ｂで示されたエンコード及びデコード方法は、別個の特徴値が２つである（例えば、０及び１）特徴を有するコードをエンコード及びデコードするために使用されてよい。しかし、前述したように、本発明の実施形態は、２つよりも多い別個の値を有するコードをエンコード及びデコードするために使用されてよい。そのようなエンコード及びデコードを実行する手法の例を、これから図６Ｃ〜図６Ｅに関して説明する。
【００９７】
具体的には、図６Ｃ〜図６Ｄを参照すると、２つの方法が示される。これらの方法は値Ｘをエンコードするため結合されて使用される。最初に、図６Ｃで示される方法６７２は、値Ｖiを含む「値配列」Ｖへ値Ｘをエンコードする。ここで、０＜ｉ≦ＩSであり、ＩSは別個の特徴値の数である。方法６７２は、特徴分布配列ＦＤ及びエンコードすべき値Ｘを受け取る（ステップ６７４）。前述したように、特徴分布配列は、各々の別個の特徴値を有する特徴の数を記述する。例えば、特徴分布配列［７，３，２，１］は、７つの特徴が最初の別個の特徴値を有し、３つの特徴が第２の別個の特徴値を有し、２つの特徴が第３の別個の特徴値を有し、１つの特徴が第４の別個の特徴値を有することを指定する。
【００９８】
方法６７２は、ｉの値をＦＤ内の要素の数へ初期化する（即ち、ｉ＝ＩS）（ステップ６７６）。方法６７２は、値配列ＶのサイズをＩSへ設定することによって、値配列Ｖを初期化する（ステップ６７８）。方法６７２は、ＮＴの値を０へ初期化し（ステップ６８０）、ＮＴgの値を０へ初期化し（ステップ６８２）、Ｒの値をＸへ初期化する（ステップ６８４）。
【００９９】
方法６７２は、特徴分布配列ＦＤの要素ｉの値だけＮＴの値を増加する（ステップ６８６）。方法６７２は、Ｃsの値を（ＮＴ！／ＮＴg！／（ＮＴ−ＮＴg）！）として計算する（ステップ６８８）。方法６７２は、値配列の現在の要素Ｖiの値をＲモジュラスＣsとして計算する（ステップ６９０）。
【０１００】
方法６７２は整数除法を使用してＲをＣsで割り、商をＲへ割り当てる（ステップ６９２）。方法６７２はＮＴgの値をＦＤiだけ増加し（ステップ６９４）、ｉを減分する（ステップ６９６）。
【０１０１】
ｉ＞０であれば（ステップ６９８）、方法６７２はステップ６８６へ戻る。そうでなければ、値配列Ｖの作成が完了し、方法６７２は値配列Ｖを返却する（ステップ６９９）。
【０１０２】
図６Ｄを参照すると、本発明の１つの実施形態に従って値Ｘをエンコードするため、図６Ｃの方法６７２によって生成された値配列Ｖを使用する方法７００のフローチャートが示される。方法７００は、図６Ｃの方法６７２で使用された同じ特徴分布配列ＦＤ、及びその方法６７２によって生成された値配列Ｖを、入力として受け取る。
【０１０３】
方法７００は、ｉを配列ＦＤ内の要素の数ＩSへ初期化する（ステップ７０４）。方法７００は、０の要素を有する空の特徴配列Ｆを初期化し（ステップ７０６）、ＮＴ（ステップ７０８）及びＮＴg（ステップ７１０）の値を０へ初期化する（ステップ７１０）。方法７００は、ＮＴの値をＦＤiだけ増加する（ステップ７１２）。
【０１０４】
方法７００は、図６Ａで示されたエンコード方法６００を使用し、ＮＴg個の特徴が０よりも大きい特徴値を有する全部でＮＴ個の特徴を使用して、値Ｖiを、現在ＮＴ個の要素を有する一時的特徴配列ＴＦへエンコードする（ステップ７１４）。方法７００は配列ＴＦ内の全ての１を配列Ｆの要素で１対１に対応させて置換し、Ｆの中で相対的順序を保存する（ステップ７１６）。次に、方法７００は特徴配列Ｆを一時的特徴配列ＴＦで置換し（ステップ７１８）、Ｆの全ての要素へ１を加え（ステップ７２０）、ＮＴgの値をＦＤiだけ増加し（ステップ７２２）、ｉを減分する（ステップ７２４）。
【０１０５】
ｉ＞０であれば（ステップ７２６）、方法７００はステップ７１２〜７２４を反復する。そうでなければ、特徴配列Ｆへの値配列Ｖのエンコードは完了し、方法７００は特徴配列Ｆを返却する（ステップ７２８）。
【０１０６】
図６Ｅを参照すると、２つ以上の別個の特徴値を有する特徴配列Ｆをデコードするため、本発明の１つの実施形態に従って実行される方法７３０のフローチャートが示される。方法７３０は特徴配列Ｆを受け取り（ステップ７３２）、配列Ｆ内の最大値を変数Ｌへ割り当てる（ステップ７３４）。方法７３０はｉを１へ初期化し（ステップ７３６）、Ｌ個の要素を有する空の値配列Ｖを作成し（ステップ７３８）、Ｌ個の要素を有する空の組み合わせ配列Ｃを作成する（ステップ７４０）。方法７３０は特徴配列Ｆ内の全ての要素から１を減じる（ステップ７４２）。
【０１０７】
方法７３０は図６Ｂで示された単一レベル・デコード方法６４０を使用して、特徴配列Ｆを値Ａ及びレベルｉにおける可能な組み合わせＣＴの数へデコードする（ステップ７４４）。方法７３０は値Ａを値配列要素Ｖiへ割り当て（ステップ７４６）、値ＣＴを組み合わせ配列要素Ｃiへ割り当てる（ステップ７４８）。
【０１０８】
方法７３０は特徴配列Ｆから全ての０値要素を除去し（ステップ７５０）、Ｆの全ての残りの要素から１を減じる（ステップ７５２）。方法７３０はｉを増分する（ステップ７５４）。
【０１０９】
ｉ≦Ｌであれば（ステップ７５６）、方法７３０はステップ７４４〜７５４を反復する。そうでなければ、値配列Ｖ及び組み合わせ配列Ｃへの特徴配列Ｆのデコードは完了し、方法７３０は値配列Ｖ及び組み合わせ配列Ｃを返却する（ステップ７５８）。最終デコード値ＦＶは、例えば、前述した方法４３０（図４Ｂ）又は４５０（図４Ｃ）を使用して、値配列Ｖ及び組み合わせ配列Ｃから導き出されてよい。
【０１１０】
前に参照された「Ｔｈｅｒｍａｌ  Ｉｍａｇｉｎｇ  Ｓｙｓｔｅｍ」と題する特許は、印刷ヘッドが単一印刷メディア上の単一通過で２つの色を書くことのできる感熱式プリンタを開示する。その特許に開示された手法は極めて多様なプリンタに応用されてよく、このプリンタは極めて多様な印刷メディアの上に印刷することができる。そのようなメディアは、例えば、サイズ及び感度において多様である。最適の印刷出力を生成するため、印刷メディアのそのような可変固有性に基づいて、プリンタのパラメータを修正することが望ましい。プリンタの使用者は、プリンタの中に現在装填されている印刷メディア固有性をプリンタへ手作業的に通知してよいが、そのような手法は使用者にとって不便であり、誤りを起こしやすい。
【０１１１】
したがって、本発明の１つの実施形態において、印刷メディアの固有性は、本明細書で開示された手法の中の任意の手法に従ってエンコードされるバーコードの形式で、印刷メディア自体の上にエンコードされる。例えば、図７を参照すると、タブ７６４の上に印刷されたバーコード７６６を含む印刷メディア７６２が示される。タブは印刷メディア７６２から除去可能であってよい（例えば、ミシン目を使用して）。本発明の１つの実施形態において、印刷メディア７６２の「画像区域」（タブ７６４を含まない印刷メディア７６２の部分）は４”Ｘ６”であり、タブ７６４は４”Ｘ１．０８”である。本発明の１つの実施形態において、バーコード７６６は、２つの別個のバーコードを含むバーコード領域として実現される。バーコードの１つは（７，３，２，１）の幅分布を有し、他のバーコードは、メディア・サイズに依存して（７，３，２，１）、（９，４，２，０）、又は（６，５，１，１）の幅分布を有する。バーコード７６６は、印刷メディアの固有性を記述する印刷メディア固有性情報をエンコードする。図７で示されるように、バーコード７６６は、例えば、印刷メディアの所定の領域の中に所定の方位で、及び所定のサイズで印刷されてよい。下記で詳細に説明するように、このような仕方でバーコードの印刷固有性を制約することは、バーコードの読み取り及び解釈処理を容易にする。
【０１１２】
図８を参照すると、システム８００のデータフロー図が示される。システム８００の中で、プリンタ８０６は、印刷メディア８０２の上に印刷されたバーコード８０４に基づいて構成される。プリンタ８０６は、バーコード８０４から導き出された構成に基づいて印刷メディア８０２の上に印刷出力８２６を生成する。図９を参照すると、本発明の１つの実施形態に従って、システム８００によって実行される方法９００のフローチャートが示される。
【０１１３】
印刷メディア８０２の固有性は、本明細書で開示された手法の中の任意の手法を使用して識別され、バーコード８０４へエンコードされてよいことに注意されたい。バーコード８０４は、方法９００を実行する前、例えば、製造終了作業の間に、印刷メディア８０２上の任意の地点に印刷されてよい。バーコード８０４は、任意の様々なやり方でメディア８０２上に置かれてよい。例えば、メディア８０２が感熱型であれば、バーコード８０４は感熱式に印刷されてよい。代替的に、パッド及びインクジェット印刷を含む多数の従来の印刷技術が、バーコード８０４をメディア８０２の上に配置してよい。
【０１１４】
プリンタ８０６はバーコード・リーダ８０８を含む。図８でプリンタ８０６の構成部分として示される構成部分、例えば、バーコード・リーダ８０８は、代替的に、プリンタ８０６の外部にある構成部分として実現されてよく、任意の適切な通信手段を使用してプリンタ８０６と通信してよいことに注意されたい。バーコード・リーダ８０８はバーコード８０８を読み取り、それによってバーコード８０４内の特徴８１０を識別する（ステップ９０２）。
【０１１５】
バーコード・リーダ８０８は、バーコード８０４を読み取ることのできる任意の種類のデバイスであってよい。例えば、プリンタ８０６は従来のＬＥＤ／光ダイオードのペアを既に含み、メディア・シートの存在を感知してよい。このＬＥＤ／光ダイオードのペアは、更に、バーコード・リーダ８０８として使用されてよく、可視光を使用してバーコードを読み取ってよい。したがって、バーコード・リーダ８０８は特殊目的バーコード読み取りデバイスである必要はないことを理解すべきである。図７で示されるように、使用者によって除去されてよいタブ７６４の上にバーコード７６６が印刷されるならば、通常の染料が使用されてバーコード７６６を印刷してよく、赤外線染料も蛍光性混合物も必要ではない。
【０１１６】
プリンタ８０６はバーコード・デコーダ８１２を含む。バーコード・デコーダ８１２は特徴８１０の幾つか又は全てを印刷メディア固有性情報８１４へデコードする。印刷メディア固有性情報８１４は印刷メディア８０２の固有性を記述している（ステップ９０４）。バーコード８０４の中にエンコードされた印刷メディア固有性情報８１４は、印刷メディア８０２の全ての固有性を指定する必要はないことに注意されたい。更に、印刷メディア固有性情報８１４は、特定の固有性に関する部分的情報を指定してよい。印刷メディア固有性情報８１４は、プリンタ８０６の中に記憶されたプリンタ・パラメータ８１８を指してよい。パラメータ８１８は、バーコード８０４自体の中に含まれない詳細な構成情報を含んでよい。
【０１１７】
プリンタ８０６はプリンタ構成器８１６を含む。プリンタ構成器８１６は埋め込みマイクロプロセッサとして実現されてよい。埋め込みマイクロプロセッサは印刷メディア固有性情報８１４に基づいてプリンタ８０６のパラメータ８１８を修正する（ステップ９０６）。例えば、プリンタ８０６は、バーコード内の情報に基づく印刷メディアの特定の固有性に従って印刷ヘッドへ供給されるエネルギーの量を変化させることによって、所与の色を印刷する方法を変えてよい。印刷メディアが普通よりも高い感度を有するならば、プリンタは、全体的に、より少ないエネルギーを使用して印刷するであろう。より高いか低い感度のメディアについては、より高いか低い感度を示す印刷メディア固有性情報をバーコードが含んでよく、プリンタ構成器８１６はこの情報を使用して、印刷に使用されるエネルギーの範囲をプリンタに減少又は増加させてよい。印刷メディアの特性応答曲線（エネルギーの関数としての印刷密度）が変化するならば、バーコードは、メディアと密接にマッチする特性曲線を識別する印刷メディア固有性情報を含んでよく、プリンタ構成器８１６はその情報を使用してこの曲線を選択し、各々の密度について正しい印刷エネルギーを決定する参照としてよい。
【０１１８】
プリンタ８０６は印刷エンジン８２０を含む。印刷エンジン８２０は、印刷ジョブを表す印刷データ８２２を受け取る（ステップ９０８）。印刷エンジン８２０は、印刷データ８２２及びプリンタ・パラメータ８１８に基づいて印刷メディア８０２の上に印刷出力８２６を生成する（ステップ９１０）。言い換えれば、印刷エンジン８２０は、バーコード８０４の中にエンコードされた印刷メディア固有性情報に基づいてステップ９０６で構成されたプリンタ８０６を使用して、印刷データ８２２を印刷する。こうして、システム８００はバーコード８０４を使用し、印刷メディア８０２の固有性に基づいて印刷出力８２６を最適化する。
【０１１９】
本発明の利点の中には、次の１つ又は複数が含まれる。本明細書で開示されたように、本発明の様々な実施形態は、複数のシンボルへ細分されないバーコードの中に情報をエンコードする。そのようなバーコードは、分割されない特徴の単一の列を含み、従来のバーコードと比較して情報密度を増加している。そのような増加した情報密度によって、従来のバーコードと同じスペースの中で、より多くの情報をエンコードすることができる。スペースが貴重であるとき、及び／又はバーコード・リーダ８０８が低分解能を有するとき、高い情報密度が特に重要となる。例えば、バーコード・リーダ８０８がＬＥＤ／光ダイオードのペアである１つの実施形態において、リーダ８０８は、１ｍｍ以上の幅である特徴を感知できるだけかも知れない。例えば、バーコード８０４を印刷しなければならないスペース（例えば、タブ７６４）が２５ｍｍの長さであれば、バーコードの中には１１〜１５個の特徴の余地があるにすぎない。そのような場合、高い情報密度を有するバーコードを提供することが特に有利である。１つの実施形態において、バーコード８０４に利用可能なスペースは２３ｍｍの長さであり、センサは１ｍｍ以上の幅を感知できる。複数のシンボル及びスタート及びストップコードを有する２  ｏｆ  ５型バーコードを使用すると、エンコード可能な数の範囲は０〜９９であり、全部で１００個となる。本発明の実施形態は、そのスペース内で１０２，９６０個の数、又は２  ｏｆ  ５バーコードの１０００倍を超えてエンコードすることができる。
【０１２０】
本発明の実施形態の他の利点は、無限の長さのバーコード・シンボルを生成でき、それによってエンコード情報が、有限長のシンボルを有するバーコードよりも高い情報密度を有することである。同様に、本明細書で開示されたデコード手法は、無限長のバーコード・シンボルをデコードするために使用されてよい。しかし、デコード・システムの計算能力によって限定され得る場合は例外である。
【０１２１】
上述したように、本発明の様々な実施形態で使用されるバーコードは、スタートコード及びストップコードを含む必要はない。従来のバーコード・システムでスタート及びストップコードを使用する理由は、入力バーコードのサイズ、方位、フォーマット、及びロケーションが変動し得るからである。しかし、図７で示される実施形態において、バーコード７６６のサイズ、方位、フォーマット、及びロケーションは固定されており、前もって知られている。そのような被制御環境の結果として、スタート及びストップコードを使用しなくても、プリンタ８０６はバーコード７６６の固有性に関するこの既定の知識に基づいてバーコード７６６を正確に読み取るように構成される。
【０１２２】
本発明は特定の実施形態に関して前述したが、これまでの実施形態は例証のためにのみ提供され、本発明の範囲を限定又は規定するものではないことを理解すべきである。下記の実施形態を非限定的に含む様々な他の実施形態も、請求項の範囲の中にある。例えば、本明細書で説明された要素及び構成部分は、更に、追加の構成部分へ分割されるか、より少ない構成部分を形成するように相互に結合され、同一の機能を実行してよい。
【０１２３】
本発明の実施形態に従ってエンコードされる印刷メディア固有性情報の例は、非限定的に、印刷メディアの色料又は染料の最小及び最大密度、印刷するときに使用するトーンカーブを示すコード、印刷メディア固有性に従ってトーンカーブを構築又は修正するために使用されるパラメータ、印刷メディアの全体的感度、メディアのカラーバランス、印刷メディアの温度感度、印刷メディアのサイズ、印刷メディアに存在する色料のタイプ、どのようにプリンタを再構成して、その機能又は印刷メディアに関連するパラメータを更新するかを示すコード、又はプリンタの構成及びプリンタが現在の印刷メディアをどのように取り扱ってその上に印刷するかに関連する任意の他の情報を含む。
【０１２４】
本明細書で開示された特定の例はバーコードを参照するが、本発明の実施形態はバーコードに関連する使用に限定されない。むしろ、本発明の実施形態は、出力メディアの上で印刷メディア情報をエンコードする任意の種類のコードに関連して使用されてよい。例えば、本明細書で開示された特定の例は、バーコード内の「バー」及び「スペース」を参照するが、そのような用語はコーディング・システム内の「特徴」の例にすぎない。例えば、別個の色は、情報をエンコードするために使用されてよい特徴の例である。したがって、バー及びスペース以外の特徴を使用して、本明細書で開示された手法を実現する方法が、当業者によって理解されるであろう。同様に、本明細書で開示されたある一定の例は、「太い」特徴及び「細い」特徴を参照するが、これらはコーディング・システムにおける特徴の固有性の例にすぎない。したがって、「太い」特徴及び「細い」特徴に適用される手法を、どのようなふうに異なろうと相互に異なる２つの特徴へ、代わって適用してよいことが、当業者によって理解されるであろう。同じことは、より一般的に、「幅」のような用語についても当てはまる。「幅」は、より一般的に、コード内の特徴間で値が変動し得る任意の固有性に代わって意味してよい。
【０１２５】
前述した手法は、例えば、ハードウェア、ソフトウェア、ファームウェア、又はこれらの任意の組み合わせで実現されてよい。前述した手法は、プログラム可能なコンピュータの上で実行する１つ又は複数のコンピュータ・プログラムとして実現されてよい。コンピュータは、プロセッサ、プロセッサによって読み取られる記憶メディア（例えば、揮発性及び不揮発性メモリ及び／又は記憶素子を含む）、少なくとも１つの入力デバイス、及び少なくとも１つの出力デバイスを含む。プログラム・コードは、入力デバイスを使用して入れられた入力へ適用され、説明された機能を実行して出力を生成する。出力は１つ又は複数の出力デバイスへ提供されてよい。
【０１２６】
下記の請求項の範囲の中にある各々のコンピュータ・プログラムは、任意のプログラミング言語、例えば、アセンブリ言語、機械語、高レベル手続きプログラミング言語、又はオブジェクト指向プログラミング言語で実現されてよい。プログラミング言語は、例えば、コンパイル又は解釈されるプログラミング言語であってよい。
【０１２７】
各々のそのようなコンピュータ・プログラムは、コンピュータ・プロセッサによって実行される機械読み取り可能記憶デバイスで有形的に具体化されたコンピュータ・プログラムプロダクトとして実現されてよい。本発明の方法ステップは、コンピュータ・プロセッサによって実行されてよい。コンピュータ・プロセッサは、コンピュータ読み取り可能メディアの上で有形的に具体化されたプログラムを実行し、入力の上に動作し出力を生成することによって本発明の機能を実行する。適切なプロセッサは、例として、汎用マイクロプロセッサ及び特殊目的マイクロプロセッサの双方を含む。一般的に、プロセッサは読み出し専用メモリ及び／又はランダム・アクセス・メモリから命令及びデータを受け取る。コンピュータ・プログラム命令を有形的に具体化する適切な記憶デバイスは、例えば、不揮発性メモリの全ての形態、例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリ・デバイスを含む半導体メモリ・デバイス、磁気ディスク、例えば、内部ハードディスク及び取り外し可能ディスク、光磁気ディスク、及びＣＤ−ＲＯＭを含む。前述した任意のものが、特殊設計のＡＳＩＣ（アプリケーション特定集積回路）又はＥＰＧＡ（フィールドプログラマブルゲートアレイ）によって補足されるか、それらの中に組み込まれてよい。更に、コンピュータは、一般的に、記憶メディア、例えば、内部ディスク（図示されず）又は取り外し可能ディスクからプログラム及びデータを受け取ることができる。これらの構成部品は、更に、従来のデスクトップ又はワークステーション・コンピュータ、及び本明細書で説明された方法を実現するコンピュータ・プログラムを実行するのに適した他のコンピュータの中に存在するであろう。これらのコンピュータは、任意のディジタル印刷エンジン又はマーキング・エンジン、ディスプレイ・モニタ、又は紙、フィルム、ディスプレイ・スクリーン、又は他の出力メディアの上にカラー又はグレースケール・ピクセルを生成することのできる他のラスタ出力デバイスと結合して使用されてよい。
【０１２８】
本発明の様々な実施形態で使用するのに適したプリンタは、典型的には、印刷エンジン及びプリンタ・コントローラを含む。プリンタ・コントローラは、ホスト・コンピュータから印刷データを受け取るか、直接接続（例えば、ワイヤ又は光ケーブルを使用して）又は無線伝送を介してメモリ・デバイス内の画像データに直接アクセスし、ページ情報を生成する。プリンタ・コントローラは、ページ情報を印刷エンジンへ伝送して印刷させる。印刷エンジンは、ページ情報によって指定された画像の物理的印刷を、出力メディア上で実行する。
【図面の簡単な説明】
【０１２９】
【図１】従来のバーコードの一般的な例を示す図である。
【図２Ａ】本発明の１つの実施形態に従って情報をエンコードするために使用される方法のフローチャートである。
【図２Ｂ】本発明の１つの実施形態に従って情報をデコードするために使用される方法のフローチャートである。
【図３Ａ】本発明の１つの実施形態に従ったバーコード及び対応する入れ子パターンを示す図である。
【図３Ｂ】本発明の１つの実施形態に従ったバーコード及び対応する入れ子パターンを示す図である。
【図３Ｃ】本発明の１つの実施形態に従ったバーコード及び対応する入れ子パターンを示す図である。
【図３Ｄ】本発明の１つの実施形態に従ったバーコード及び対応する入れ子パターンを示す図である。
【図３Ｅ】本発明の１つの実施形態に従ったバーコード及び対応する入れ子パターンを示す図である。
【図３Ｆ】本発明の１つの実施形態に従ったバーコード及び対応する入れ子パターンを示す図である。
【図３Ｇ】本発明の１つの実施形態に従ったバーコード及び対応する入れ子パターンを示す図である。
【図４Ａ】本発明の１つの実施形態に従ってバーコードをデコードする方法のフローチャートである。
【図４Ｂ】本発明の第１の実施形態に従って、バーコードから導き出された複数の値を単一の値へ組み合わせる方法のフローチャートである。
【図４Ｃ】本発明の第２の実施形態に従って、バーコードから導き出された複数の値を単一の値へ組み合わせる方法のフローチャートである。
【図４Ｄ】複数の幅分布を認識するシステムの中で値をバーコードへ割り当てるため、本発明の１つの実施形態で実行される方法のフローチャートである。
【図５Ａ】本発明の１つの実施形態に従ってバーコード・システム内でバーコードのフル・セットを生成する再帰的手続きのフローチャートである。
【図５Ｂ】本発明の１つの実施形態に従ってバーコード・システム内でバーコードのフル・セットを生成する再帰的手続きのフローチャートである。
【図６Ａ】本発明の１つの実施形態に従って値をコードへエンコードする方法のフローチャートである。
【図６Ｂ】本発明の１つの実施形態に従って、コードからの情報を、そのコードによって表された値へデコードする方法のフローチャートである。
【図６Ｃ】本発明の１つの実施形態に従って値をコードへエンコードするために使用される方法のフローチャートである。
【図６Ｄ】本発明の１つの実施形態に従って値をコードへエンコードするために使用される方法のフローチャートである。
【図６Ｅ】コードを値へデコードするため、本発明の１つの実施形態に従って実行される方法のフローチャートである。
【図７】本発明の１つの実施形態に従ったバーコードを含む印刷メディアを示す図である。
【図８】本発明の１つの実施形態に従って印刷メディア上に印刷されたバーコードに基づいてプリンタが構成されるシステムのデータフローを示す図である。
【図９】本発明の１つの実施形態に従って図８のシステムによって実行される方法のフローチャートである。
【図１】
2008541297.tif 000007
【図２Ａ】
2008541297.tif 000008
【図２Ｂ】
2008541297.tif 000009
【図３Ａ】
2008541297.tif 000010
【図３Ｂ】
2008541297.tif 000011
【図３Ｃ】
2008541297.tif 000012
【図３Ｄ】
2008541297.tif 000013
【図３Ｅ】
2008541297.tif 000014
【図３Ｆ】
2008541297.tif 000015
【図３Ｇ】
2008541297.tif 000016
【図４Ａ】
2008541297.tif 000017
【図４Ｂ】
2008541297.tif 000018
【図４Ｃ】
2008541297.tif 000019
【図４Ｄ】
2008541297.tif 000020
【図５Ａ】
2008541297.tif 000021
【図５Ｂ】
2008541297.tif 000022
【図６Ａ】
2008541297.tif 000023
【図６Ｂ】
2008541297.tif 000024
【図６Ｃ】
2008541297.tif 000025
【図６Ｄ】
2008541297.tif 000026
【図６Ｅ】
2008541297.tif 000027
【図７】
2008541297.tif 000028
【図８】
2008541297.tif 000029
【図９】
2008541297.tif 000030
【国際調査報告】
2008541297.tif 000031
2008541297.tif 000032
2008541297.tif 000033
2008541297.tif 000034
2008541297.tif 000035
2008541297.tif 000036