(57)【特許請求の範囲】
【請求項１】
印刷媒体上に印刷する情報をエンコードする方法であって、
該情報を、データビットを表現する１シーケンスの「０」および「１」文字を有するデータストリームに変換するステップと、
該データストリームをランダマイズすることによって、１シーケンスの「０」および「１」文字を有するランダマイズされたデータストリームを生成するステップと、
該ランダマイズされたデータストリームを、複数のロウおよび複数のカラムの２次元ビットマップにフォーマットするステップと、
クロッキングビットなし、かつ、ボーダーなしで該フォーマットされたビットマップを該印刷媒体上に印刷するステップと、
を含んでいる情報エンコード方法。
【請求項２】
印刷媒体上に印刷する情報をエンコードする方法であって、
該情報を、データビットを表現する１シーケンスの「０」および「１」文字を有するデータストリームに変換するステップと、
該データストリームをマッピングすることによって、複数の所定の空きビット位置をもつ複数のロウおよび複数のカラムのディジタル２次元ビットマップをつくるステップと、
該複数の所定の空きビット位置のそれぞれにディジタルブロック識別子を追加するステップであって、該ディジタルブロック識別子がそれぞれ、所定数のブロック識別子ビットと、該ディジタルブロック識別子間のロウ数あるいはカラム数を識別可能とする値と、を有している、ステップと、
該ディジタル２次元ビットマップをフォーマットすることによって、データ画素およびブロック識別子画素を有する、画素ベースの２次元ビットマップをつくるステップと、
クロッキングビットなし、かつ、ボーダーなしで該フォーマットされたビットマップを該印刷媒体上に印刷するステップと、
を含んでいる情報エンコード方法。
【請求項３】
印刷媒体上に印刷する情報をエンコードする方法であって、
該情報を、データビットを表現する１シーケンスの「０」および「１」文字を有するデータストリームに変換するステップと、
該データストリームをランダマイズすることによって、データストリームにおいてほぼ同数の「０」文字および「１」文字を生成するステップと、
該ランダマイズされたデータストリームをマッピングすることによって、複数の所定の空きビット位置をもつ複数のロウおよび複数のカラムのディジタル２次元ビットマップをつくるステップと、
該複数の所定の空きビット位置のそれぞれにディジタルブロック識別子を追加するステップであって、該ディジタルブロック識別子がそれぞれ、所定数のブロック識別子ビットと、該ディジタルブロック識別子間のロウ数あるいはカラム数を識別可能とする値と、を有している、ステップと、
該ディジタル２次元ビットマップをフォーマットすることによって、データ画素およびブロック識別子画素を有する、画素ベースの２次元ビットマップをつくるステップと、
クロッキングビットなし、かつ、ボーダーなしで該フォーマットされたビットマップを該印刷媒体上に印刷するステップと、
を含んでいる情報エンコード方法。
【請求項４】
前記情報を圧縮するステップをさらに含んでいる、請求項１から３のいずれか１つに記載の方法。
【請求項５】
誤り訂正符号データビットを前記データストリームに追加するステップをさらに含んでいる、請求項４に記載の方法。
【請求項６】
前記データストリームを複製することによって、エンコード時の信頼性を改善する冗長データを生成するステップをさらに含んでいる、請求項５に記載の方法。
【請求項７】
前記フォーマットするステップが、前記データストリームにヘッダ情報を追加することによって、標準的なポータブルビットマップ（ＰＢＭ）フォーマットをつくるステップをさらに含んでいる、請求項６に記載の方法。
【請求項８】
前記フォーマットするステップが、ロウの長さまたはカラムの長さにそれぞれほぼ等しい長さをもつ、少なくとも１つの水平または垂直デスキューイングストリップを追加するステップをさらに含んでいる、請求項７に記載の方法。
【請求項９】
前記フォーマットするステップが、前記ＰＢＭフォーマットをインキャプシュレーテッドポストスクリプトに変換するステップをさらに含んでいる、請求項３に記載の方法。
【請求項１０】
前記データストリームをランダマイズする前記ステップが、該ストリームを１ビットずつランダマイズする、請求項１および３のいずれか１つに記載の方法。
【請求項１１】
所定の情報を表現するデータ画素の複数のロウおよび複数のカラムのかたちで印刷媒体上に印刷された情報をデコードする方法であって、該データ画素が第１の色または第２の色のいずれかであり、該方法は、
該印刷媒体から該情報を読み取るステップと、
該複数の画素ロウおよび該複数の画素カラムのそれぞれにおいて、水平エッジ数および垂直エッジ数を求めるステップと、
該複数のロウおよび該複数のカラム中から選択されたいくつかのグループをつくり、該選択されたいくつかのグループのそれぞれにおいて、該エッジの数が最小となるロウセンターラインおよびカラムセンターラインをそれぞれ求めるステップと、
該ロウセンターラインのそれぞれと、該カラムセンターラインのそれぞれとの交点に位置する２進データを読み出すことによって、該印刷媒体上に印刷されているエンコードされた情報を表現する信号を生成するステップと、
を含んでいる方法。
【請求項１２】
所定の情報を表現するデータ画素の複数のロウおよび複数のカラムのかたちで印刷媒体上に印刷されたランダマイズされた情報をデコードする方法であって、該データ画素が第１の色または第２の色のいずれかであり、該方法は、
該印刷媒体から該情報を読み取るステップと、
該複数の画素ロウおよび該複数の画素カラムのそれぞれにおいて、水平エッジ数および垂直エッジ数を求めるステップと、
該複数のロウおよび該複数のカラム中から選択されたいくつかのグループをつくり、該選択されたいくつかのグループのそれぞれにおいて、該エッジの数が最小となるロウセンターラインおよびカラムセンターラインをそれぞれ求めるステップと、
該ロウセンターラインのそれぞれと、該カラムセンターラインのそれぞれとの交点に位置する２進データを読み出すことによって、該印刷媒体上に印刷されているエンコードされた情報を表現するランダマイズされた信号を生成するステップと、
該ランダマイズされた信号をデランダマイズすることによって、該媒体上に印刷されている該ランダマイズされた情報をデコードするステップと、
を含んでいる方法。
【請求項１３】
エンコードされたデータビットを表現するデータ画素の複数のロウおよび複数のカラムのビットマップのかたちで印刷媒体上に印刷された情報をデコードする方法であって、該データ画素のうち所定数のデータ画素が、該エンコードされたデータビットのうち比例する数の該エンコードされたデータビットをそれぞれ表現しており、該比例する数の該エンコードされたデータビットが、所定の値を有するブロック識別子ビットを表現する複数のブロック識別子画素によって互いに分離されており、該データ画素および該ブロック識別子画素のそれぞれが、第１の色または第２の色のいずれかであり、該方法は、
該印刷媒体から該ビットマップを読み取るステップと、
該データ画素および該ブロック識別子画素から２進データを読み出すことによって、該ブロック識別子ビットによって互いに分離されている、ある選択された数の該エンコードされたデータビットを有する該ビットマップを表現する２次元ディジタルアレイをつくるステップと、
該所定の値と実質的に同じ値を表現するデータビットを選択することによって、該複数のブロック識別子ビットのそれぞれを求めるステップと、
該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットのビット数をカウントするステップと、
該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットの該比例する数を超える該エンコードされたデータビットのビットを削除するステップと、
該エンコードされたデータビットの該数が該比例する数未満である時に、該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットにディジタルビットを追加することによって、該印刷媒体上に印刷されている該情報をデコードするステップと、
を含んでいる方法。
【請求項１４】
前記エンコードされたデータビットの前記比例する数がそれぞれ、ブロック識別子ビットを表現する前記複数のブロック識別子画素のあるロウによって分離されている、複数のロウの既知の数を含んでおり、前記削除するステップが、該複数のロウの該既知の数を超える該エンコードされたデータビットの複数のロウを削除し、かつ、前記追加するステップが、複数のディジタルビットロウの数が、該複数のロウの該既知の数未満である時に、該複数のディジタルビットロウを追加する、請求項１３に記載の方法。
【請求項１５】
エンコードされたデータビットを表現するデータ画素の複数のロウおよび複数のカラムのビットマップのかたちで印刷媒体上に印刷された情報をデコードする方法であって、該複数のデータ画素カラムのうち所定数の該データ画素カラムがそれぞれ、該エンコードされたデータビットの該複数のカラムのうち比例する数の該エンコードされたデータビットカラムを表現しており、該比例する数の該エンコードされたデータビットカラムが、所定の値を有するブロック識別子ビットを表現する複数のブロック識別子画素によって互いに分離されており、該データ画素および該ブロック識別子画素のそれぞれが、第１の色または第２の色のいずれかであり、該方法は、
該印刷媒体から該ビットマップを読み取るステップと、
該データ画素および該ブロック識別子画素から２進データを読み出すことによって、該ブロック識別子ビットによって互いに分離されている、該エンコードされたデータビットの複数のロウを有する該ビットマップを表現する２次元ディジタルアレイをつくるステップと、
該所定の値と実質的に同じ値を表現するビットを有するカラムを選択することによって、該複数のブロック識別子ビットのそれぞれを決定するステップと、
該ブロック識別子ビットを有するそれぞれのカラム毎に、該エンコードされたデータビットの複数のカラムの数をカウントするステップと、
該ブロック識別子ビットを有する該それぞれのカラム毎に、該複数のエンコードされたデータビットカラムの該比例する数を超える複数のエンコードされたデータビットカラムを削除するステップと、
該複数のエンコードされたデータビットカラムの該数が該比例する数未満である時に、該ブロック識別子ビットを有する該それぞれのカラム毎に、ディジタルビットの複数のカラムを追加することによって、該印刷媒体上に印刷されている該情報をデコードするステップと、
を含んでいる方法。
【請求項１６】
エンコードされたデータビットを表現するデータ画素の複数のロウおよび複数のカラムのビットマップのかたちで印刷媒体上に印刷されたラインダマイズされた情報をデコードする方法であって、該複数のデータ画素ロウのうち所定数の該データ画素ロウがそれぞれ、該エンコードされたデータビットの該複数のロウのうち比例する数の該エンコードされたデータビットロウを表現しており、該比例する数の該エンコードされたデータビットロウが、所定の値を有するブロック識別子ビットを表現する複数のブロック識別子画素によって互いに分離されており、該データ画素および該ブロック識別子画素のそれぞれが、第１の色または第２の色のいずれかであり、該方法は、
該印刷媒体から該ビットマップを読み取るステップと、
該ビットマップの該複数のロウおよび該複数のカラムのそれぞれにおいて、水平エッジ数および垂直エッジ数を求めるステップと、
該複数のロウおよび該複数のカラム中から選択されたいくつかのグループをつくり、該選択されたいくつかのグループのそれぞれにおいて、該エッジの数が最小となるロウセンターラインおよびカラムセンターラインをそれぞれ求めるステップと、
該ロウセンターラインのそれぞれと、該カラムセンターラインのそれぞれとの交点に位置する２進データを読み出すことによって、該エンコードされたデータビットおよび該ブロック識別子ビットの複数のロウを有する該ビットマップを表現する２次元ディジタルアレイをつくるステップと、
該所定の値と実質的に同じ値を表現するビットを選択することによって、該複数のブロック識別子ビットのそれぞれを求めるステップと、
該ブロック識別子ビットを有するそれぞれのロウ毎に、該エンコードされたデータビットの複数のロウの数をカウントするステップと、
該ブロック識別子ビットを有する該それぞれのロウ毎に、該複数のエンコードされたデータビットロウの該比例する数を超える該複数のエンコードされたデータビットロウを削除するステップと、
該複数のエンコードされたデータビットロウの該数が該比例する数未満である時に、該ブロック識別子ビットを有する該それぞれのロウ毎に、複数のディジタルビットロウを追加するステップと、
該ビットマップの該ディジタル表現をデランダムマイズすることによって、該印刷媒体上に印刷されている該情報をデコードするステップと、
を含んでいる方法。
【請求項１７】
エンコードされたデータビットを表現するデータ画素の複数のロウおよび複数のカラムのビットマップのかたちで印刷媒体上に印刷されたランダマイズされた情報をデコードする方法であって、該データ画素のうち所定数のデータ画素がそれぞれ、該エンコードされたデータビットのうち比例する数の該エンコードされたデータビットを表現しており、該比例する数の該エンコードされたデータビットが、所定の値を有するブロック識別子ビットを表現する複数のブロック識別子画素によって互いに分離されており、該データ画素および該ブロック識別子画素のそれぞれが、第１の色または第２の色のいずれかであり、該印刷媒体が、印刷されたテキスト情報をさらに有しており、該エンコードされた情報が、該情報に隣接する少なくとも１つの垂直または水平デスキューイングストリップを有しており、該方法は、
該印刷媒体から該テキスト情報および該ビットマップを読み取るステップと、
該テキスト情報および該ビットマップを画素ベースの階調表現にフォーマットするステップと、
該階調表現に基づいて、閾値を超える画素が該第１の色に対応し、かつ、該閾値を下回る画素が該第２の色に対応するように、閾値強度レベルを設定することによって、該閾値のビットマップを求めるステップと、
該閾値ビットマップの位置を特定するステップと、
該少なくとも１つの垂直または水平デスキューイングストリップが、それぞれ実質的に垂直または水平にシフトされるように、該ビットマップをデスキューするステップと、
該ビットマップの該複数のロウおよび該複数のカラムのそれぞれにおいて、水平エッジ数および垂直エッジ数を求めるステップと、
該複数のロウおよび該複数のカラム中から選択されたいくつかのグループをつくり、該選択されたいくつかのグループのそれぞれにおいて、該エッジの数が最小となるロウセンターラインおよびカラムセンターラインをそれぞれ求めるステップと、
該ロウセンターラインのそれぞれと、該カラムセンターラインのそれぞれとの交点に位置する２進データを読み出すことによって、選択された数の該エンコードされたデータビットおよび該ブロック識別子ビットを有する該ビットマップを表現する２次元ディジタル表現を生成するステップと、
該所定の値と実質的に同じ値を表現するデータビットを選択することによって、該複数のブロック識別子ビットのそれぞれを求めるステップと、
該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットのビット数をカウントするステップと、
該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットの該比例する数を超える該エンコードされたデータビットのビットを削除するステップと、
該エンコードされたデータビットの該数が該比例する数未満である時に、該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットにディジタルビットを追加するステップと、
該ビットマップの該ディジタル表現をデランダマイズするステップと、
該デランダマイズされたディジタル表現を誤り訂正することによって、該印刷媒体上に印刷された該エンコードされた情報を表現する実質的に誤りのない信号を生成するステップと、
を含んでいる方法。
【請求項１８】
前記エッジ数を求める前記ステップが、ある選択された画素に隣接する２つの画素の色を求めるステップと、該２つの隣接する画素が異なる色である時にエッジを宣言するステップと、を含んでいる、請求項１１、１２、１６および１７のいずれか１つに記載の方法。
【請求項１９】
前記第１の色が白および黒のいずれか１つであり、前記第２の色が白および黒のもう一方である、請求項１８に記載の方法。
【請求項２０】
前記ロウまたはカラムを削除するステップが、隣接するロウまたはカラムと実質的に同じディジタルデータを有するロウまたはカラムを選択することによって、削除すべき余分なロウまたはカラムを選択するステップを含んでおり、前記ロウまたはカラムを追加するステップが、ランダムデータロウまたはランダムデータカラムを追加するステップを含んでいる、請求項１４、１５および１６のいずれか１つに記載の方法。
【請求項２１】
前記ディジタルロウあるいはカラムを追加するステップが、前記それぞれのロウセンターラインに隣接するロウが、該ロウセンターラインに対して最大ハミング距離を有する位置を求めることによって、該追加するロウあるいはカラムをどこに追加するかを選択するステップと、ランダムデータを含むディジタルロウあるいはカラムを該位置に追加するステップと、をさらに含んでいる、請求項１５および１６のいずれか１つに記載の方法。
【請求項２２】
前記ランダマイズされた情報が、１ビットずつランダマイズされている、請求項１２、１５、１６および１７のいずれか１つに記載の方法。
【請求項２３】
選択された画素ロウ長およびカラム長を有し、かつ複数のブロック識別子を有する、ディジタル的にエンコードされた情報のビットマップフォーマット化表現を含んでいる２次元データバーコードであって、該複数のブロック識別子のそれぞれが所定の値を有しており、かつ、隣接するブロック識別子から所定数のロウまたはカラムだけ隔てられているように所定の位置に配置されており、それによって、該エンコードされた情報が該バーコードからデコードされた時に、もし２つのシーケンシャルブロック識別子間のロウ数またはカラム数が該所定の数に等しくないのなら、該デコードされた情報を自動的に訂正することができる、２次元データバーコード。
【請求項２４】
選択された画素ロウ長およびカラム長を有し、かつ複数のブロック識別子を有するランダマイズされエンコードされた情報のビットマップフォーマット化表現を含んでいる２次元データバーコードであって、該複数のブロック識別子のそれぞれが所定の値を有しており、かつ、隣接するブロック識別子から所定数のロウまたはカラムだけ隔てられているように所定の位置に配置されており、それによって、該エンコードされた情報が該バーコードからデコードされた時に、もし２つのシーケンシャルブロック識別子間のロウ数またはカラム数が該所定の数に等しくないのなら、該デコードされた情報を自動的に訂正することができる、２次元データバーコード。
【請求項２５】
前記ロウ長または前記カラム長にそれぞれほぼ等しい長さをもつ少なくとも１つの水平または垂直デスキューイングストリップをさらに含んでいる、請求項２３および２４のいずれか１つに記載のデータバーコード。
【請求項２６】
前記ランダマイズされたエンコードされた情報が、１ビットずつランダマイズされている、請求項２４に記載のデータバーコード。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、広くは、２次元バーコードに関しており、より具体的には、耐久性のあるクロック不要の２次元バーコードのシンボロジと、そのようなバーコードシンボロジでフォーマットされた情報をエンコードすることと、バーコードシンボロジを印刷媒体上に印刷することと、それをデコードすることとに関する。
【０００２】
【従来の技術】
いつかは「紙のない社会」に住むことになるだろうとしばしば予測されてはいるものの、紙やその他の印刷媒体は、安価で、効果的で、便利な通信手段としてますます重要になる役割を果たしている。しかし紙についての基本的な制約は、コンピュータの視点からいえば、現在は出力専用のフォーマットになっていることである。紙は、人間が使うための情報を表示する媒体としては好ましいが、いったん印刷されてしまうと、コンピュータがデータを高い信頼性で復元することは、不可能ではないにせよ困難である。光学的文字認識（ＯＣＲ）は、標準フォントを用いて印刷されたテキストのような比較的、簡単な領域においてこの問題を解決しようとするものであるが、今のところは限られた成功にしか至っていない。認識率（accuracy rate）９９％は、おそらく実現可能であり、これだけでも大したものと思えるものの、３０００文字のページに平均３０文字のＯＣＲエラーが発生することになるので、高価で時間のかかる手作業による後処理が必要となってしまう。
【０００３】
また別のアプローチでは、紙（またはマイクロフィルムのような他の印刷媒体）の上に直接、含ませることができる、コンピュータが判読可能なバーコードを利用する。いったんエンコードされると、このようなバーコードは、それを読む人間には明らかだが、コンピュータが認識するには難しい情報（例えば印刷されたテキスト）や、ページを構成するために暗黙のうちに含まれるが、それを読む人間には実質的には不可視の情報（例えばスプレッドシートの数式）や、または紙の上の実際の文字テキストに依存する、しないにかかわらず必要とされるその他の情報をコンピュータによって復元するために用いることができる。
【０００４】
ディジタルデータが紙の上に直接、記録される、コンピュータが判読可能なバーコードは、簡単な数字のエンコード技術とスキャニング技術とを用いて、決められた一連の値が割り振られることによって文書または製品の識別をおこなうために知られており、利用されてきている。過去に用いられた文書または製品の識別システムは、現在広い範囲の分野で利用されているバーコードマーカおよびスキャナを含んでいる。紙でできた書類については、例えばＨｉｋａｗａの米国特許第５,０５１,７７９号に教示される画像処理のためのジョブ制御シートのように、情報を関連する装置に与えるために、紙の上の特別のマークやパターンが用いられてきている。同様に、Ｊｏｈｎｓｏｎらに付与された米国特許第５,０６０,９８０号に記載されているように、エンコードされた情報を含む識別用のマークが予め印刷されたフォームの表面に印刷されてきている。Ｊｏｈｎｓｏｎらのシステムによれば、ユーザは、書式の紙コピーの上のフィールドの中に手で書いた情報を入力した後、その書式をスキャンすることによって、コンピュータの中に電子的に記憶される同一の書式の中のフィールドへの挿入をおこなうことができる。さらに他のシステムがＢｌｏｏｍｂｅｒｇらの米国特許第５,０９１,９６６号に記載されている。Ｂｌｏｏｍｂｅｒｇらは、グリフ状のコードをデコードすることを教示している。このようなコードは、紙面上にディジタル的にエンコードされたデータである。これらの識別コードはコンピュータが判読可能なものである。このコードを用いることによって、例えば文書の識別、取り出しおよび送信といった、コンピュータによる文書操作がより容易になる。
【０００５】
上述したさまざまな形状のバーコードの他にも、印刷媒体上にディジタル的にエンコードされた情報を表現する、複数の「データライン」すなわち複数のロウを有する「データストリップ」と呼ばれる２次元バーコードもまた、この技術分野ではよく知られている。各データラインロウは、（それぞれの画素が２進値「０」または「１」を表現している）一連の白画素および黒画素から構成されている。各ロウにおいてビットの順番付けをおこなうことによって、そのロウに記憶されるディジタルデータを決めることができる。すべてのロウ内に記憶されたデータが、２次元バーコード内に含まれているデータを規定する。このバーコードを読み取るためには、典型的には、ユーザは、バーコードの長さ方向に沿って垂直に各データラインロウの情報を同時に読み取ることによって、すべてのデータラインロウを読み取る、ハンドスキャナを通す。
【０００６】
【発明が解決しようとする課題】
複数のデータラインロウを有するデータストリップ２次元バーコードを紙の媒体と共に用いる従来技術によるシステムの一例は、Ｂｒａｓｓらに付与された米国特許第４,６９２,６０３号、第４,７５４,１２７号および第４,７８２,２２１号に記載されている。このシステムにおいては、２次元バーコードは、コンピュータプログラムおよび紙面上のデータをエンコードするのに用いられ、ハンドスキャナを用いてスキャニングされる、複数のデータラインロウから構成される。コンピュータプログラムおよびデータをエンコードすることに加えて、これらのデータラインは、トラッキングビットおよび同期ビット（以下の説明では、「クロックビット」と称する）も含んでいる。各データラインロウ内に多数のクロックビットを直接用いることが要求されるために、各ロウ内に記憶可能なディジタルデータの量が大幅に減ってしまう。また、（このようなバーコードを写真複写したり、ファクシミリシステムによって送信したりしたときにはよくあることであるが）、もしクロックビットを有するデータラインロウにダメージが与えられると、このようなクロックビットか失われてしまい、バーコード内にエンコードされた情報をデコードすることは、不可能ではないにしても、難しくなってしまう。
【０００７】
Ｋｎｏｗｌｅｓの米国特許第５,０８３,２１４号は、エンコードされたデータそのものの中にクロックビットを埋め込むことがやはり必要になる２次元バーコードシステムを記載している。しかし、同期ビットおよびトラッキングビットを用いてデータのすべてのロウおよびカラムをエンコードするのではなく、Ｋｎｏｗｌｅｓの第'２１４号特許は、スキャニング中に同期をとるために、データバーコードの一番上のロウを用いる。また、左端から８本のカラムのビットは、各ロウに含まれているデータビットを読み出すためのクロックを確定するために用いられるクロックビットを含んでいる。 Ｋｎｏｗｌｅｓの第'２１４号特許に記載されている２次元バーコードの一番上のロウおよび左端の８本のカラムは、同期をとりクロックを合わせるためだけに用いられるので、バーコードの全データ容量はこれに比例して低下する。また、もしバーコードの一番上のロウあるいは左端の８本のカラムにダメージが与えられると、クロック情報が失われてしまい、従来技術によるその他のシステムと同様に、各データロウ内にエンコードされたデータを読み出すことは、不可能ではないにしても、難しくなってしまう。
【０００８】
本発明は、上記課題を解決するためになされたものであり、その目的とするところは、ディジタル的にエンコードされたデータを表現するクロック不要の２次元バーコードを提供することにある。
【０００９】
本発明の別の目的は、印刷媒体上に印刷され、媒体に対するダメージに耐えられるだけの十分な耐久性をもつ、クロック不要の２次元バーコードを提供することにある。
【００１０】
本発明のさらに別の目的は、ランダマイズされたデータビットを表現する複数の画素を設けることによって、連続する複数の画素からなる長いストリングが同一の色になることを防止し、かつ、不正なデコードを防止する安全性を保証する、クロック不要の２次元バーコードを提供することにある。
【００１１】
本発明のさらに別の目的は、データのいくつかロウあるいはカラムが複製されているか、あるいは散逸しているかどうかを判定して、エラーを訂正するために、クロック不要の２次元バーコード内にブロック識別子を設けることにある。
【００１２】
本発明のさらに別の目的は、印刷媒体上に印刷するために、クロック不要の２次元バーコードにフォーマットされた情報をエンコードすることにある。
【００１３】
本発明のさらに別の目的は、印刷媒体上に印刷されたクロック不要の２次元バーコードのかたちでディジタル的にエンコードされた情報をデコードする方法を提供することにある。
【００１４】
本発明のその他のさまざまな目的、効果および特徴は、以下に述べる詳細な説明を読めば容易に明らかになるであろう。また、本発明の新規な特徴は、添付の請求の範囲内で具体的に指摘されるであろう。
【００１５】
【課題を解決するための手段】
本発明による印刷媒体上に印刷する情報をエンコードする方法は、該情報を、データビットを表現する１シーケンスの「０」および「１」文字を有するデータストリームに変換するステップと、該データストリームをランダマイズすることによって、１シーケンスの「０」および「１」文字を有するランダマイズされたデータストリームを生成するステップと、該ランダマイズされたデータストリームを、複数のロウおよび複数のカラムの２次元ビットマップにフォーマットするステップと、クロッキングビットなし、かつ、ボーダーなしで該フォーマットされたビットマップを該印刷媒体上に印刷するステップと、を含んでおり、そのことにより上記目的が達成される。
【００１６】
本発明による印刷媒体上に印刷する情報をエンコードする方法は、該情報を、データビットを表現する１シーケンスの「０」および「１」文字を有するデータストリームに変換するステップと、該データストリームをマッピングすることによって、複数の所定の空きビット位置をもつ複数のロウおよび複数のカラムのディジタル２次元ビットマップをつくるステップと、該複数の所定の空きビット位置のそれぞれにディジタルブロック識別子を追加するステップであって、該ディジタルブロック識別子がそれぞれ、所定数のブロック識別子ビットと、該ディジタルブロック識別子間のロウ数あるいはカラム数を識別可能とする値と、を有している、ステップと、該ディジタル２次元ビットマップをフォーマットすることによって、データ画素およびブロック識別子画素を有する、画素ベースの２次元ビットマップをつくるステップと、クロッキングビットなし、かつ、ボーダーなしで該フォーマットされたビットマップを該印刷媒体上に印刷するステップと、を含んでおり、そのことにより上記目的が達成される。
【００１７】
本発明による印刷媒体上に印刷する情報をエンコードする方法は、該情報を、データビットを表現する１シーケンスの「０」および「１」文字を有するデータストリームに変換するステップと、該データストリームをランダマイズすることによって、データストリームにおいてほぼ同数の「０」文字および「１」文字を生成するステップと、該ランダマイズされたデータストリームをマッピングすることによって、複数の所定の空きビット位置をもつ複数のロウおよび複数のカラムのディジタル２次元ビットマップをつくるステップと、該複数の所定の空きビット位置のそれぞれにディジタルブロック識別子を追加するステップであって、該ディジタルブロック識別子がそれぞれ、所定数のブロック識別子ビットと、該ディジタルブロック識別子間のロウ数あるいはカラム数を識別可能とする値と、を有している、ステップと、該ディジタル２次元ビットマップをフォーマットすることによって、データ画素およびブロック識別子画素を有する、画素ベースの２次元ビットマップをつくるステップと、クロッキングビットなし、かつ、ボーダーなしで該フォーマットされたビットマップを該印刷媒体上に印刷するステップと、を含んでおり、そのことにより上記目的が達成される。
【００１８】
ある実施形態では、前記情報を圧縮するステップをさらに含んでいる。
【００１９】
ある実施形態では、誤り訂正符号データビットを前記データストリームに追加するステップをさらに含んでいる。
【００２０】
ある実施形態では、前記データストリームを複製することによって、エンコード時の信頼性を改善する冗長データを生成するステップをさらに含んでいる。
【００２１】
ある実施形態では、前記フォーマットするステップが、前記データストリームにヘッダ情報を追加することによって、標準的なポータブルビットマップ（ＰＢＭ）フォーマットをつくるステップをさらに含んでいる。
【００２２】
ある実施形態では、前記フォーマットするステップが、ロウの長さまたはカラムの長さにそれぞれほぼ等しい長さをもつ、少なくとも１つの水平または垂直デスキューイングストリップを追加するステップをさらに含んでいる。
【００２３】
ある実施形態では、前記フォーマットするステップが、前記ＰＢＭフォーマットをインキャプシュレーテッドポストスクリプトに変換するステップをさらに含んでいる。
【００２４】
ある実施形態では、前記データストリームをランダマイズする前記ステップが、該ストリームを１ビットずつランダマイズする。
【００２５】
本発明による所定の情報を表現するデータ画素の複数のロウおよび複数のカラムのかたちで印刷媒体上に印刷された情報をデコードする方法は、該データ画素が第１の色または第２の色のいずれかである、方法であって、該印刷媒体から該情報を読み取るステップと、該複数の画素ロウおよび該複数の画素カラムのそれぞれにおいて、水平エッジ数および垂直エッジ数を求めるステップと、該複数のロウおよび該複数のカラム中から選択されたいくつかのグループをつくり、該選択されたいくつかのグループのそれぞれにおいて、該エッジの数が最小となるロウセンターラインおよびカラムセンターラインをそれぞれ求めるステップと、該ロウセンターラインのそれぞれと、該カラムセンターラインのそれぞれとの交点に位置する２進データを読み出すことによって、該印刷媒体上に印刷されているエンコードされた情報を表現する信号を生成するステップと、を含んでおり、そのことにより上記目的が達成される。
【００２６】
本発明による所定の情報を表現するデータ画素の複数のロウおよび複数のカラムのかたちで印刷媒体上に印刷されたランダマイズされた情報をデコードする方法において、該データ画素が第１の色または第２の色のいずれかである、方法は、該印刷媒体から該情報を読み取るステップと、該複数の画素ロウおよび該複数の画素カラムのそれぞれにおいて、水平エッジ数および垂直エッジ数を求めるステップと、該複数のロウおよび該複数のカラム中から選択されたいくつかのグループをつくり、該選択されたいくつかのグループのそれぞれにおいて、該エッジの数が最小となるロウセンターラインおよびカラムセンターラインをそれぞれ求めるステップと、該ロウセンターラインのそれぞれと、該カラムセンターラインのそれぞれとの交点に位置する２進データを読み出すことによって、該印刷媒体上に印刷されているエンコードされた情報を表現するランダマイズされた信号を生成するステップと、該ランダマイズされた信号をデランダマイズすることによって、該媒体上に印刷されている該ランダマイズされた情報をデコードするステップと、を含んでおり、そのことにより上記目的が達成される。
【００２７】
本発明によるエンコードされたデータビットを表現するデータ画素の複数のロウおよび複数のカラムのビットマップのかたちで印刷媒体上に印刷された情報をデコードする方法は、該データ画素のうち所定数のデータ画素が、該エンコードされたデータビットのうち比例する数の該エンコードされたデータビットをそれぞれ表現しており、該比例する数の該エンコードされたデータビットが、所定の値を有するブロック識別子ビットを表現する複数のブロック識別子画素によって互いに分離されており、該データ画素および該ブロック識別子画素のそれぞれが、第１の色または第２の色のいずれかである、方法であって、該印刷媒体から該ビットマップを読み取るステップと、該データ画素および該ブロック識別子画素から２進データを読み出すことによって、該ブロック識別子ビットによって互いに分離されている、ある選択された数の該エンコードされたデータビットを有する該ビットマップを表現する２次元ディジタルアレイをつくるステップと、該所定の値と実質的に同じ値を表現するデータビットを選択することによって、該複数のブロック識別子ビットのそれぞれを求めるステップと、該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットのビット数をカウントするステップと、該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットの該比例する数を超える該エンコードされたデータビットのビットを削除するステップと、該エンコードされたデータビットの該数が該比例する数未満である時に、該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットにディジタルビットを追加することによって、該印刷媒体上に印刷されている該情報をデコードするステップと、を含んでおり、そのことにより上記目的が達成される。
【００２８】
ある実施形態では、前記エンコードされたデータビットの前記比例する数がそれぞれ、ブロック識別子ビットを表現する前記複数のブロック識別子画素のあるロウによって分離されている、複数のロウの既知の数を含んでおり、前記削除するステップが、該複数のロウの該既知の数を超える該エンコードされたデータビットの複数のロウを削除し、かつ、前記追加するステップが、複数のディジタルビットロウの数が、該複数のロウの該既知の数未満である時に、該複数のディジタルビットロウを追加する。
【００２９】
本発明によるエンコードされたデータビットを表現するデータ画素の複数のロウおよび複数のカラムのビットマップのかたちで印刷媒体上に印刷された情報をデコードする方法は、該複数のデータ画素カラムのうち所定数の該データ画素カラムがそれぞれ、該エンコードされたデータビットの該複数のカラムのうち比例する数の該エンコードされたデータビットカラムを表現しており、該比例する数の該エンコードされたデータビットカラムが、所定の値を有するブロック識別子ビットを表現する複数のブロック識別子画素によって互いに分離されており、該データ画素および該ブロック識別子画素のそれぞれが、第１の色または第２の色のいずれかである、方法であって、該印刷媒体から該ビットマップを読み取るステップと、該データ画素および該ブロック識別子画素から２進データを読み出すことによって、該ブロック識別子ビットによって互いに分離されている、該エンコードされたデータビットの複数のロウを有する該ビットマップを表現する２次元ディジタルアレイをつくるステップと、該所定の値と実質的に同じ値を表現するビットを有するカラムを選択することによって、該複数のブロック識別子ビットのそれぞれを決定するステップと、該ブロック識別子ビットを有するそれぞれのカラム毎に、該エンコードされたデータビットの複数のカラムの数をカウントするステップと、該ブロック識別子ビットを有する該それぞれのカラム毎に、該複数のエンコードされたデータビットカラムの該比例する数を超える複数のエンコードされたデータビットカラムを削除するステップと、該複数のエンコードされたデータビットカラムの該数が該比例する数未満である時に、該ブロック識別子ビットを有する該それぞれのカラム毎に、ディジタルビットの複数のカラムを追加することによって、該印刷媒体上に印刷されている該情報をデコードするステップと、を含んでおり、そのことにより上記目的が達成される。
【００３０】
本発明によるエンコードされたデータビットを表現するデータ画素の複数のロウおよび複数のカラムのビットマップのかたちで印刷媒体上に印刷されたランダマイズされた情報をデコードする方法は、該複数のデータ画素ロウのうち所定数の該データ画素ロウがそれぞれ、該エンコードされたデータビットの該複数のロウのうち比例する数の該エンコードされたデータビットロウを表現しており、該比例する数の該エンコードされたデータビットロウが、所定の値を有するブロック識別子ビットを表現する複数のブロック識別子画素によって互いに分離されており、該データ画素および該ブロック識別子画素のそれぞれが、第１の色または第２の色のいずれかである、方法であって、該印刷媒体から該ビットマップを読み取るステップと、該ビットマップの該複数のロウおよび該複数のカラムのそれぞれにおいて、水平エッジ数および垂直エッジ数を求めるステップと、該複数のロウおよび該複数のカラム中から選択されたいくつかのグループをつくり、該選択されたいくつかのグループのそれぞれにおいて、該エッジの数が最小となるロウセンターラインおよびカラムセンターラインを求めるステップと、該ロウセンターラインのそれぞれと、該カラムセンターラインのそれぞれとの交点に位置する２進データを読み出すことによって、該エンコードされたデータビットおよび該ブロック識別子ビットの複数のロウを有する該ビットマップを表現する２次元ディジタルアレイをつくるステップと、該所定の値と実質的に同じ値を表現するビットを選択することによって、該複数のブロック識別子ビットのそれぞれを求めるステップと、該ブロック識別子ビットを有するそれぞれのロウ毎に、該エンコードされたデータビットの複数のロウの数をカウントするステップと、該ブロック識別子ビットを有する該それぞれのロウ毎に、該複数のエンコードされたデータビットロウの該比例する数を超える該複数のエンコードされたデータビットロウを削除するステップと、該複数のエンコードされたデータビットロウの該数が該比例する数未満である時に、該ブロック識別子ビットを有する該それぞれのロウ毎に、複数のディジタルビットロウを追加するステップと、該ビットマップの該ディジタル表現をデランダマイズすることによって、該印刷媒体上に印刷されている該情報をデコードするステップと、を含んでおり、そのことにより上記目的が達成される。
【００３１】
本発明によるエンコードされたデータビットを表現するデータ画素の複数のロウおよび複数のカラムのビットマップのかたちで印刷媒体上に印刷されたランダマイズされた情報をデコードする方法において、該データ画素のうち所定数のデータ画素がそれぞれ、該エンコードされたデータビットのうち比例する数の該エンコードされたデータビットを表現しており、該比例する数の該エンコードされたデータビットが、所定の値を有するブロック識別子ビットを表現する複数のブロック識別子画素によって互いに分離されており、該データ画素および該ブロック識別子画素のそれぞれが、第１の色または第２の色のいずれかであり、該印刷媒体が、印刷されたテキスト情報をさらに有しており、該エンコードされた情報が、該情報に隣接する少なくとも１つの垂直または水平デスキューイングストリップを有している、方法であって、該印刷媒体から該テキスト情報および該ビットマップを読み取るステップと、該テキスト情報および該ビットマップを画素ベースの階調表現にフォーマットするステップと、該階調表現に基づいて、閾値を超える画素が該第１の色に対応し、かつ、該閾値を下回る画素が該第２の色に対応するように、閾値強度レベルを設定することによって、該閾値のビットマップを求めるステップと、該閾値ビットマップの位置を特定するステップと、該少なくとも１つの垂直または水平デスキューイングストリップが、それぞれ実質的に垂直または水平にシフトされるように、該ビットマップをデスキューするステップと、該ビットマップの該複数のロウおよび該複数のカラムのそれぞれにおいて、水平エッジ数および垂直エッジ数を求めるステップと、該複数のロウおよび該複数のカラム中から選択されたいくつかのグループをつくり、該選択されたいくつかのグループのそれぞれにおいて、該エッジの数が最小となるロウセンターラインおよびカラムセンターラインを求めるステップと、該ロウセンターラインのそれぞれと、該カラムセンターラインのそれぞれとの交点に位置する２進データを読み出すことによって、選択された数の該エンコードされたデータビットおよび該ブロック識別子ビットを有する該ビットマップの２次元ディジタル表現を生成するステップと、該所定の値と実質的に同じ値を表現するデータビットを選択することによって、該複数のブロック識別子ビットのそれぞれを求めるステップと、該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットのビット数をカウントするステップと、該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットの該比例する数を超える該エンコードされたデータビットのビットを削除するステップと、該エンコードされたデータビットの該数が該比例する数未満である時に、該それぞれのブロック識別子ビット毎に、該エンコードされたデータビットにディジタルビットを追加するステップと、該ビットマップの該ディジタル表現をデランダマイズするステップと、該デランダマイズされたディジタル表現を誤り訂正することによって、該印刷媒体上に印刷された該エンコードされた情報を表現する実質的に誤りのない信号を生成するステップと、を含んでおり、そのことにより上記目的が達成される。
【００３２】
ある実施形態では、前記エッジ数を求める前記ステップが、ある選択された画素に隣接する２つの画素の色を求めるステップと、該２つの隣接する画素が異なる色である時にエッジを宣言するステップと、を含んでいる。
【００３３】
ある実施形態では、前記第１の色が白および黒のいずれか１つであり、前記第２の色が白および黒のもう一方である。
【００３４】
ある実施形態では、前記ロウまたはカラムを削除するステップが、隣接するロウまたはカラムと実質的に同じディジタルデータを有するロウまたはカラムを選択することによって、削除すべき余分なロウまたはカラムを選択するステップを含んでおり、前記ロウまたはカラムを追加するステップが、ランダムデータロウまたはランダムデータカラムを追加するステップを含んでいる。
【００３５】
ある実施形態では、前記ディジタルロウあるいはカラムを追加するステップが、前記それぞれのロウセンターラインに隣接するロウが、該ロウセンターラインに対して最大ハミング距離を有する位置を求めることによって、該追加するロウあるいはカラムをどこに追加するかを選択するステップと、ランダムデータを含むディジタルロウあるいはカラムを該位置に追加するステップと、をさらに含んでいる。
【００３６】
ある実施形態では、前記ランダマイズされる情報が、１ビットずつランダマイズされる。
【００３８】
本発明による選択された画素ロウ長およびカラム長を有し、かつ複数のブロック識別子を有する、ディジタル的にエンコードされた情報のビットマップフォーマット化表現を含んでいる２次元データバーコードは、該複数のブロック識別子のそれぞれが所定の値を有しており、かつ、隣接するブロック識別子から所定数のロウまたはカラムだけ隔てられているように所定の位置に配置されており、それによって、該エンコードされた情報が該バーコードからデコードされた時に、もし２つのシーケンシャルブロック識別子間のロウ数またはカラム数が該所定の数に等しくないのなら、該デコードされた情報を自動的に訂正することができ、そのことにより上記目的が達成される。
【００３９】
本発明による選択された画素ロウ長およびカラム長を有し、かつ複数のブロック識別子を有するランダマイズされエンコードされた情報のビットマップフォーマット化表現を含んでいる２次元データバーコードは、該複数のブロック識別子のそれぞれが所定の値を有しており、かつ、隣接するブロック識別子から所定数のロウまたはカラムだけ隔てられているように所定の位置に配置されており、それによって、該エンコードされた情報が該バーコードからデコードされた時に、もし２つのシーケンシャルブロック識別子間のロウ数またはカラム数が該所定の数に等しくないのなら、該デコードされた情報を自動的に訂正することができ、そのことにより上記目的が達成される。
【００４０】
ある実施形態では、前記ロウ長または前記カラム長にそれぞれほぼ等しい長さをもつ少なくとも１つの水平または垂直デスキューイングストリップをさらに含んでいる。
【００４１】
ある実施形態では、前記ランダマイズされたエンコードされた情報が、１ビットずつランダマイズされる。
【００４２】
以下に作用を説明する。
【００４３】
本発明の２次元バーコードはそれぞれ、好ましくはランダマイズされたエンコードされたデータビットを表現するビットマップ内にエンコードされたディジタル情報を有しており、印刷媒体上に印刷される。このビットマップは、さらに、所定数のエンコードされたデータビットを介して互いに隔てられている、複数のブロック識別子を含みうる。これらのブロック識別子は、バーコードがデコードされた時に、失われたデータビットや追加されたデータビットを訂正するために用いられる。印刷媒体上に印刷されているバーコードがデコードされると、ディジタル情報がスキャンされ、バーコード中の各カラム内の水平エッジの数、および各ロウ内の垂直エッジの数が、それぞれ求められる。エッジは、１個の画素を選択し、選択されたその画素に隣接する２つの画素の色が、選択されたその画素の色と異なるかどうかを判定することによって求められる。すべてのエッジがカウントされた後、選択されたいくつかのカラムグループおよびロウグループが分析され、選択された各グループにおいてカラムセンターラインおよびロウセンターラインを示す、カウントされた水平エッジ数の極小値、および垂直エッジ数の極小値が選択された各グループにおいて求められる。その後、各カラムセンターラインと各ロウセンターラインとの交点に位置する２進データが読み出され、印刷されたバーコード内にエンコードされたディジタル情報を表現する信号が生成される。
【００４４】
本発明の上記目的およびその他の目的は、選択された画素ロウ長およびカラム長を有する、ランダマイズされたデータビットから構成されるビットマップフォーマット化表現のかたちでエンコードされたディジタル情報をもつ２次元データバーコードによって実現される。
【００４５】
本発明の別の実施形態においては、２次元データバーコードは、選択された画素ロウ長およびカラム長を有するビットマップフォーマット化表現のかたちでエンコードされたディジタル情報をもつ。このビットマップは、複数のブロック識別子を含んでいる。これらのブロック識別子は、それぞれ所定の値を有しており、また、２つのシーケンシャルなブロック識別子同士が所定数のロウまたはカラムを介して隔てられているように、所定の位置に配置されている。このようなブロック識別子は、デコードされた情報における２つのシーケンシャルなブロック識別子間のロウ数またはカラム数が、これらのブロック識別子間の所定のロウ数またはカラム数に等しくない場合に、バーコードからデコードされた情報を自動的に訂正するために用いられる。
【００４６】
本発明の別の局面として、例えば紙のような印刷媒体上に印刷する情報をエンコードする方法が説明される。情報は、まず、データビットを表現する１シーケンスの２進文字を有するデータストリームに変換される。次に、このデータストリームがランダマイズされ、ほぼ同数の「０」文字および「１」文字を生成する。その後、ランダマイズされたデータストリームは、複数のロウおよび複数のカラムからなる２次元ビットマップにフォーマットされ、印刷媒体上に印刷される。
【００４７】
本発明のこの局面による別の実施形態においては、情報は、データビットを表現する複数の２進文字を有するデータストリームに変換される。このデータストリームはマッピングされ、所定の空き位置をもつ複数のロウおよびカラムからなる２次元ビットマップとして配列されるディジタルデータビットを生成する。ビットマップにおける以前の空き位置には、ディジタルブロック識別子が挿入される。各ディジタルブロック識別子は、所定の値を表現する所定の数のブロック識別子ビットを有している。それによって、各ディジタルブロック識別子を認識することができる。また、その結果、隣接するディジタルブロック識別子間のロウ数あるいはカラム数をカウントすることができるので、ロウまたはカラムが追加されたり、失われていたりしても、そのことを確実に検出することができる。このディジタル２次元ビットマップは、画素ベースの２次元ビットマップをつくるようにフォーマットされた後、印刷媒体上に印刷される。
【００４８】
本発明のさらに別の局面は、所定の情報を表現するデータ画素からなる複数のロウおよび複数のカラムのかたちで印刷媒体上に印刷された情報をデコードする方法に関する。まず、この情報は、例えば媒体をスキャニングすることによって印刷媒体から読み出される。その後、各カラムおよびロウにそれぞれ対応する水平エッジおよび垂直エッジが求められる。エッジは、ある画素を選択して、選択されたその画素に隣接する２つの画素が、選択された画素の色と異なる色であるかどうかを判定することによって求められる。水平エッジおよび垂直エッジは、それぞれ各カラムおよび各ロウについてカウントされる。次に、複数のカラムおよび複数のロウの中から選択されたいくつかのカラムグループおよびロウグループが分析され、選択された各グループにおいてカウントされた水平エッジ数および垂直エッジ数における極小値をそれぞれ求める。それによって、選択された各グループについて、カラムセンターラインおよびロウセンターラインがそれぞれ求められる。その後、各カラムセンターラインおよび各ロウセンターラインの交点に位置する２進データが読み出され、印刷媒体上に印刷されたエンコードされた情報を表現する信号を生成する。
【００４９】
本発明による２次元バーコードのすべての実施形態において、好ましくは、印刷媒体上に印刷されたエンコードされた情報はランダマイズされる。これは、（ランダマイズをおこなわなければそうなる可能性がある事態である）連続する複数の画素からなるいくつかのストリングが、同じ色になるのを防ぐためにおこなわれる。
【００５０】
本発明のこの局面による別の実施形態においては、エンコードされたデータビットを表現するデータ画素から構成される複数のロウおよび複数のカラムからなる２次元ビットマップのかたちで印刷媒体上に印刷された情報がデコードされる。エンコードされたデータビットは、複数のロウおよび／または複数のカラムにおいてエンコードされたデータビットの数が所定数に等しくなるたびに、複数のブロック識別子を介して分離される。このビットマップは、印刷媒体からスキャニングされ、データ画素およびブロック識別子からの２進データが読み出されて、エンコードされたデータビットおよびブロック識別子にそれぞれ対応する２次元のディジタルアレイをつくる。このディジタルアレイにおけるブロック識別子が求められる。その後、隣接する複数のブロック識別子間のエンコードされたデータビット数がカウントされ、カウントされたデータビットの数が、エンコードされたデータビットの所定数を超えているか、あるいはそれ未満であるかによって、データビットが削除されたり、追加されたりする。
【００５１】
【発明の実施の形態】
以下に述べる詳細な説明は、単に一例を示すことを目的とするものであり、本発明を以下の実施形態のみに限定することを意図しているものではないが、添付の図面を併せて参照しながら読めば、最もよく理解することができるであろう。
【００５２】
「証明可能な光学文字認識」（シリアル番号０７／９５８,９３８、１９９２年１０月９日出願、すでに出願放棄済み、継続出願は、シリアル番号０８／２２３,８３０、１９９４年４月６日出願）、および「印刷された文書の改善された光学文字認識再生を提供する方法および装置」（シリアル番号０８／１３８,４６７、１９９３年１０月１５日出願）と題され、同時係属中の特許出願（これらの内容はここで明示的に参考として援用される）に十分に記載されているように、文書の内容、レイアウト、生成、および取り出しに関する情報は、初めてその文書を生成するとき、またはそれに続くコンピュータ処理時に、コンピュータによってエンコードされうる。エンコードされた文書情報は、それから、文書の印刷されたバージョンの表面に生成されたデータバーコード（本願明細書では、「パナマーク（PanaMark）」(R)とも称する）を介して与えられうる。なお本明細書においては、「(R)」によって各社の登録商標であることを示す。現在利用できるエンコードおよび印刷の解像度の能力は、１インチ４方のスペースにおいて、３００００ビットもの情報まで扱える。よって上述の出願によって教示されているように、理論的には文書内容のすべてをエンコードすることができる。これは、パナマーク用にすすんで犠牲にされる文書表面上のスペース量によってのみ制限をうける。バーコードスキャナは、 光学ページスキャナと連係して、またはそれからまったく独立して、パナマークをスキャニングすることができ、また、適切な認識およびデコーディングソフトウェアを備えた付属システムに情報を出力することができる。デコードされた情報は、文書の新しいバージョンをつくるか、またはスキャンされた文書についての認識、再生および誤り訂正を改善するために、その後、スキャニングシステムによって用いられうる。パナマークをデコードするにあたって、このようなバーコードスキャナおよびスキャニングシステムは、もしスキャナのスキャニング解像度が少なくともパナマークの印刷解像度と同程度に細かいものであるのなら、パナマークの印刷解像度を知っている必要はない。その結果、パナマークの１×１以上のサイズの、論理ビットを表現する各画素をスキャニングすることができる。
【００５３】
パナマークのかたちでエンコードされた情報は、紙の文書を作成するために既に用いられているソフトウェアツールを改良するのに用いることができる。その例としては、ワードプロセッサ、スプレッドシート、オブジェクト指向グラフィックス、および音声記録や写真撮像のような各種マルチメディアアプリケーションなどが挙げられる。以下に、図１を参照して、このような例を説明する。
【００５４】
図１は、印刷されたページ上に印刷されるパナマークの各種アプリケーションのいくつかを図示する図である。印刷されたページ１０は、例えばマイクロソフト(R)ワード５．１ａ(R)のような標準的なワードプロセシングプログラムによって生成された文字テキストを図示している。印刷されたページ１１は、例えばマイクロソフト(R)エクセル(R)のような標準的なスプレッドシートプログラムによって生成されたスプレッドシートを図示している。印刷されたページ１２は、例えばマックドロープロ１．５ｖｌ(R)のような標準的なグラフィックスプログラムによって生成された、コンピュータによって生成されたグラフィックスを図示している。これらの印刷されたページ１０〜１２はそれぞれ、例えばページ１０の文字テキストのような、人間が目で容易に読み取って理解できるアナログ部１３と、機械用にフォーマットされたデータバーコードつまりパナマークの一例であるディジタル部１４とを含んでいる。印刷されたページ１０のパナマーク１４は、ページの全テキスト、および／または例えば別のフォーマット化情報のようなその他の情報をエンコードすることができる。その結果、例えばマイクロソフト(R)ワード(R)のようなあるワードプロセシングソフトウェアによって生成されたテキストをフォーマットしなおして、例えばワードパーフェクト(R)のような別のワードプロセシングソフトウェアを用いて作業にあてることができる。印刷されたページ１１のパナマーク１４は、実際のテキストスプレッドシートをエンコードすることができ、および／または書式およびフォーマット化情報を含むこともできる。その結果、マイクロソフト(R)エクセル(R)でフォーマットされたスプレッドシートを、例えばロータス(R)スプレッドシートのようなその他のスプレッドシートソフトウェアプログラムに変換することができる。同様に、印刷されたページ１２のパナマーク１４も、コンピュータによって生成されたグラフィックス以外の情報をエンコードすることができる。また、これらのパナマーク１４はいずれも、アナログ部１３から完全に独立した情報を含むことができることには注意が必要である。さらには、パナマーク１４は、美観上の考慮から、あるいは印刷されたページ上に所定の量のエンコードされた情報を含ませるために必要とされるいかなる２次元サイズおよび形状のものでもよい。
【００５５】
図２は、基本的なパナマークシンボロジの一例を図示している。パナマーク１５は、２次元グリッドをなす１セットのエンコードされたデータビットを含んでいる。典型的には、エンコードされた各データビットは、黒または白の複数の画素１７からなるマトリックスとして印刷される。好ましくは、１データビットを表現する画素マトリックスは方形であり、１×１程度の小さいマトリックスから６×６以上の大きいマトリックスまでの様々なサイズのものでありうる。また、非方形マトリックスを用いることもできる。このパナマークは、好ましくは、デスキューイング（deskewing）ボーダー１６を含んでいる。このデスキューイングボーダー１６は、２つの水平デスキューイングストリップと２つの垂直デスキューイングストリップとを含んでいる。これらのストリップは、パナマークの非データ部分のみを構成する。それぞれのデスキューイングストリップは、図５を参照して後にさらに詳しく説明するように、パナマークの各ロウおよび各カラムが、互いに確実に正しい向きになる（aligned）ように用いられる。しかし、１本のデスキューイングストリップを用いるだけで十分な位置合わせ（alignment）を実現することができるので、これらのデスキューイングストリップのいずれかを用いることがなくても、十分に許容可能な結果を得ることができる。
【００５６】
複数の黒画素および白画素１７によって表現されるデータビットは、好ましくは、０ビットと１ビットを確実に均等にミックスすることができるように、ランダマイズされる。また、通常の（黒）インク、または、（例えば紫外スキャナのような）適切なスキャナのみが判読可能である「不可視」インクのいずれかを用いて、パナマークの全体を印刷することができる。
【００５７】
図３は、デスキューイングボーダー２５を有しており、かつ、いわゆる「ブロック識別子」である複数のロウ２１、２２、２３および２４を含んでいるパナマーク２０の好ましい例を図示している。これらのブロック識別子は、それぞれ、図３に図示されているように、データビットからなる１本のロウ全体を含んでいてもいいし、１本のロウの一部、すなわち予め具体的に定められた複数の位置におけるデータビットのみを含むものでもよい。また、ブロック識別子は、データビットからなる複数のロウの代わりに、またはそれらに加えて、データビットからなる複数のカラムに含まれていてもよい。
【００５８】
図４を参照して以下により詳細に説明するように、ブロック識別子は、隣接するブロック識別子間のデータビット数を識別することができるように、パナマーク内の所定のいくつかの位置に随意に追加されるものである。このようにして、パナマーク内にデータビットが追加されているか、あるいは失われているかどうかを判定し、そのような誤りを補償することができる。
【００５９】
図４は、情報を、パナマークのかたちで紙などの印刷媒体上にエンコードするための各ステップを示すフローチャートである。パナマーク内に含ませるように指定された入力データは、ステップ３０において圧縮される。入力データの性格次第で（例えば、テキスト用にはＬＺＷ(R)、グラフィックス用にはＪＰＥＧ(R)というふうに）異なる複数の圧縮アルゴリズムを使い分けることができる。圧縮アルゴリズムをおこなうことによって、生の入力データ（どんな種類のものでもよい）が変換され、文字ベースの圧縮データストリームあるいは２進圧縮データストリームが生成される。もし圧縮データストリームが文字ベースのものであるのなら、そのデータストリームは、複数の０および複数の１を含むディジタルデータの対応する２進ビットまたはバイトにマッピングされる。もし圧縮データストリームが２進値である場合には、このステップは不要である。
【００６０】
ステップ３１において、２進データストリームは所定の回数だけ複写され、好ましくは、単一の線形データストリームに組み合わせられる。冗長度は、どのような用途に供するつもりであるかによって（例えば、現実世界でどの程度のダメージを受けることが予想されるかによって）、また、パナマーク用に利用可能なスペースの量によって変わってくる。また、データストリームを複製することは必ずしも必要ではなく、冗長性をもたせることによってデコード時の正確さを改善するために用いられるものであることは理解されたい。
【００６１】
ステップ３２において、データストリームに沿ったさまざまな位置に誤り訂正符号（ＥＣＣ）を追加してもよい。例えば、データに対してＥＣＣビットを生成する標準的なＥＣＣ技術を適用することができる。満足のいく結果をもたらしたＥＣＣアルゴリズムの一例としては、２進ＢＣＨ符号が挙げられる。さらに、データストリーム内のデータを巡回冗長検査（ＣＲＣ）を用いてエンコードすることによって、誤りを検出し、誤り訂正をサポートすることができる。用いられるＣＲＣアルゴリズムは、例えば「ＣＣＩＴＴ多項式」のような標準的なアルゴリズムでよい。この場合でも、ＥＣＣは必ずしも必要ではなく、デコード時により高い正確さを実現するためには、用いるのが好ましいものであるにすぎない。
【００６２】
ステップ３３において、データストリーム内のデータは、好ましくはランダマイズされ、全データストリームを通して実質的に同数の「０」ビットおよび「１」ビットが確実に存在しているようにする。このランダマイズ動作は、ランダマイズされたビットを、デコード時にデランダマイズすることができるように、もちろん反転可能なものでなければならない。ランダマイズ動作をおこなうためには、多くの技術を利用できる。例えば、データストリームを１ビットずつランダマイズすることができる。すなわち、データストリーム内の各データビットは、２進０ビットになる可能性と、２進１ビットになる可能性とを等しくもっていることになる。別の圧縮レイヤを適用するためには、別のランダマイズ技術が用いられることになる。さらに、よく知られているいくつかの暗号化技術のいずれかを用いることもできる。暗号化技術を用いれば、望ましい副作用、すなわちデータを安全に保つことができるという効果が得られる可能性もある。なぜなら、データをデコードするためには、適正な処理キーが必要になるからである。したがって、パナマークが不正にデコードされる事態を回避することができる。データビットをランダマイズする目的は、複数の「０」および「１」が正しく５０％対５０％の割合で確実に配分されているようにすることである。このような配分は、クロックを用いないでパナマーク内のデータをデコードする一助となるからである。このことについては、後にさらに詳しく説明する。
【００６３】
ステップ３４では、ランダマイズされたデータストリームがマッピングされる。つまり、２次元アレイをなすようにブロック化される。このステップは、この技術分野ではよく知られている技術である簡単なロウ優先順マッピング技術、あるいはもっと複雑な「ランダム」マッピング技術を用いておこなうことができる。また、この２次元アレイは、使用されていない複数の位置を満たすために、複数のランダムビットで満たす、すなわち「ビットスタッフする」ことができる。また、上述したように、もしブロック識別子をパナマーク内に挿入することが望ましいのなら、このブロッキングプロセスでは、２次元アレイ内のいくつかの所定の位置を空いたままにしておく。
【００６４】
ステップ３５では、前述したように隣接するブロック識別子間のエンコードされたデータビットの数をカウントすることによって、パナマークが読み出された時に失われた、または追加されているデータロウおよび／またはデータカラムを検出するために用いられる複数の空き位置の中に、ブロック識別子が挿入される。これらの空き位置は、２次元アレイ内の複数のロウまたは複数のカラム内にあってもよく、また、１本のロウまたは１本のカラムの全体を含んでいても、含んでいなくてもよい。
【００６５】
次に、この２次元ディジタルアレイは、ステップ３６でヘッダ情報および何らかの必要な制御データ（例えば、スキューバー）をパナマークに加えることによって、ポータブルビットマップ（ＰＢＭ）フォーマットに変換される。このＰＢＭは、次に、従来の変換プログラムを用いてインキャプシュレーテッドポストスクリプト（Encapsulated Postscript: EPS）に変換される。
【００６６】
ステップ３７では、標準的なマージプログラムを用いて、パナマークのＥＰＳ表現が印刷されたページのポストスクリプト表現と組み合わせられる。最後に、ステップ３８では、何らかのタイプの標準的なプリンタを用いて、アナログ情報およびパナマークが、印刷媒体上に印刷される。
【００６７】
なお、上述した複数のステップの多くは、相互に順番を入れ替えたり、すっかりなくしてしまったりすることができるものであることは理解されたい。例えば、データストリームを複製するステップ３１の前に、ランダマイズするステップ３３をおこなうこともできるし、このランダマイズするステップ３３そのものを完全になくしてしまうこともできる。
【００６８】
図４で説明した各ステップを説明する一助となる具体例が図５に示されている。ステップ５０において、フレーズ「Ｃａｌｌ ｍｅ Ｉｓｈｍａｅｌ」は、パナマーク内にエンコードされ、印刷されたページ上に印刷されるべき生の入力データを表している。
【００６９】
ステップ５１では、上記文字フレーズを、図示されている表現に圧縮することができる。次に、ステップ５２において、それぞれの文字がその２進表現にマッピングされる。
【００７０】
ステップ５３は、ステップ５２のデータストリームの複製をとることを図示している。なお、図には３つのデータストリームが示されているが、これらのデータストリームは、好ましくは単一のコンカレントデータストリーム（concurrent data stream）であることは理解されたい。ステップ５４では、図示されているように、３ビットのＥＣＣが、データの４ビット毎に加えられる。ステップ５５では、複製されたＥＣＣエンコードされたデータストリームのビットがランダマイズされる。ステップ５６では、ランダマイズされた線形データストリームが、「ランダム」マッピング技術を用いて２次元アレイにマッピングされる。パナマークの一部に与えられるダメージがごく局所的なものであることが予想される用途では、ロウ優先順マッピングよりもランダムマッピングのほうが好ましい。空きビット位置には、ステップ５７でブロック識別子（０ ０ １）が挿入される。最後に、ステップ５８で、パナマークの一部の表現が示される。
【００７１】
いったん情報がパナマークのかたちにエンコードされ、印刷媒体上に印刷されると、図６に示す各ステップを通して、その情報をページから読み取ることができるようになる。パナマークをデコードするに当たっては、このマークの識別は、単に印刷されたページ上でのその位置をつきとめるステップの他にもいくつかのステップを含んでいる。この識別は、ステップ６０〜６３からなる。これらのステップには、パナマークの位置の特定と、パナマークのデコードを準備するためのイメージ変換の実行とが含まれている。
【００７２】
ステップ６０では、例えばスキャナによって、文書のそのページ全体が読み取られる。このステップでは、アナログ部およびパナマークの両方がオンラインビットマップ表現に転換（transferred）される。具体的には、このステップは、標準的な８ビット階調（ＴＩＦＦ）フォーマットでイメージファイルを生成するフラットベッド光学スキャナを用いておこなうことができる。しかし、もしパナマークが上述したいわゆる「不可視」インクを用いて印刷されているのなら、パナマークをスキャンするために紫外光スキャナを用いることもできる。
【００７３】
ステップ６１では、階調イメージは、閾値を用いて分けることによって、２進黒および白のビットマップに変換される。この閾値分けをおこなう時、強度レベルが動的に選択される。すなわち、閾値レベルを上回る強度レベルを有する画素は、黒（または白）画素とみなされ、逆に閾値レベルを下回る強度レベルを有する画素は、白（または黒）画素とみなされる。
【００７４】
その後、ステップ６２において、パナマークは、さまざまな技術に基づき、ビットマップからその位置が特定される。例えば、パナマークのサイズおよびそのおおよその位置を記憶しておき、印刷された文書上でそのパナマークの位置を特定することができるようにすることができる。次に、パナマークイメージが取り入れられ、２次元画素サイズが求められる。ここで、画素の長さあるいは幅を求めるのが望ましい。なぜなら、例えば、もしパナマークが２６１５画素長であるとわかり、それが６５５ビットに相当することがわかっているのなら、各ビットはおよそ４画素長であると結論づけることができるからである。
【００７５】
ステップ６３において、わずかな角度でパナマークをスキャニングしたことを補償するために、パナマークに対して補正が施される。基本的には、パナマークをデスキューするこのステップは、垂直および水平デスキューイングストリップが実際にそれぞれ垂直および水平となるように、データビットおよびデスキューイングストリップを「スライドさせる」ことによって、マークの回転を戻すステップを含んでいる。上述したように、このデスキューイングステップをおこなうためには、１個のストリップが必要なだけである。この技術では、いわゆる「純粋な」アルゴリズムを用いることができる。このアルゴリズムでは、必要に応じていくつかの画素ロウを左にスライドさせるために、左端のストリップがパナマークのエッジで面一であるものとされる。「回転」アルゴリズムとして知られている別のデスキューイング技術を用いることもできる。この技術では、逆幾何学的回転をイメージに適用する。パナマークがデスキューされた後、デスキューイングストリップ（すなわち、非データボーダー）は、イメージから取り除かれる。
【００７６】
この時点では、既にパナマークの位置が特定され、改善されているので、このパナマークは、ステップ６４および６５でデコードする準備ができたものとなっている。パナマークをデコードするステップは、スキャニングされたイメージからの画素を、２次元ビットアレイのかたちの２進データに実際に変換するステップを含んでいる。このようなものであるので、これは、パナマーク読み取りプロセスおいて最も重要なステップであることが理解できるであろう。上述したように、過去においては２次元バーコードは、いわゆる「クロック」または「クロッキングビット」を用いてデコードされてきたが、このパナマークは、そのようなクロッキングビットを用いず、データ画素そのものだけに基づいて情報をデコードする。このデコーディングは、各データ画素のランダム性を利用している。その結果、与えられたどのロウまたはカラムにも、ほぼ同数の「０」および「１」が含まれていることになる。よって、このマーク全体をとおして、多数の「白黒」遷移および「黒白」遷移（以下、「エッジ」と称する）がある。これらのエッジは、ステップ６４でロウおよびカラムの「中心」を計算するために用いられる。これらのロウおよびカラムの中心は、次に、ステップ６５で各データビットをどこから読み出すべきかを決めるために用いられる。このクロック不要のデコード技術は、もしデータがランダマイズされていなくても作用することができる。しかし、その場合には、あまり効果的ではないと思われる。ステップ６４および６５の詳細については、図９〜図１５を参照して後により詳細に説明する。
【００７７】
ステップ６６において、２進データがパナマークから読み出され、（もしあるのなら）ブロック識別子の位置が求められる。次に、位置の求められたブロック識別子間のエンコードされたデータビットの数、またはロウ数および／またはカラム数に基づいて、データのロウ／カラムが削除されたか、あるいは追加されたかがベリファイされる。もしそうであるのなら、追加されたロウ／カラム、または失われたロウ／カラムは、図１２〜図１５を参照して後に説明するように補償される。
【００７８】
２次元ビットアレイが完全なかたちであることが確認された後、ステップ６７で２進データビットのブロックが解体され、線形データストリームが形成される。次に、ステップ６８で、逆ランダマイズプロセスが適用される。ステップ６９において、２進データビットは、この技術分野ではよく知られている標準的なＥＣＣプロシージャにかけられ、誤りをなくす。ＥＣＣプロシージャの後、ステップ７０では、（もしあるのなら）冗長データストリームが「コンセンサス」データストリームを形成するのに用いられる。例えば、もし３つの冗長データストリームがあるものとすると、多数決投票（majority voting）が適用される。それにより、もしこれら３つのデータストリームのうち２つが、特定のデータ文字の値が「Ｃ」であることを表しているのに対して、３つ目のデータストリームが、その値は「Ｑ」であることを表しているのなら、多数派が勝ち、出力は「Ｃ」となる。最後に、ステップ７１において、ストリームは伸長され、オリジナルの生の入力データが復元される。
【００７９】
さて次に、パナマークをデコードするこの技術を、図７〜図１１を参照してさらに説明する。クロッキングビットを用いることなくパナマークをデコードするためには、各カラムに対応するすべての水平「エッジ」および各ロウに対応するすべての垂直「エッジ」がカウントされる。ここで、エッジとは、ある色の画素に隣接する、その色とは別の同一色の２つの画素のことをいう。互いに異なる４つのタイプの水平エッジが、図７に参照番号７３および７４で示されている。同様に、互いに異なる４つのタイプの垂直エッジが、図８に参照番号７５および７６で示されている。水平エッジを右のエッジ７３と見なすか、左のエッジ７４と見なすかということは、パナマークをデコードするのにそれらのエッジを用いる時には、何ら重要なことではない。しかし、もし水平右エッジおよび水平左エッジの数が予めわかっているのなら、そして異なる数がカウントされれば、誤りが検出されることになる。同じことは、垂直上エッジ７５および垂直下エッジ７６についても言うことができる。
【００８０】
図９は、水平エッジおよび垂直エッジが、どのようにして各カラムおよび各ロウにおいてそれぞれカウントされ、カラムセンターラインおよびロウセンターラインが求められるかを図示している。概して、カラムセンターラインおよびロウセンターラインにそれぞれ対応するカラムおよびロウは、非センターに対応するカラムおよびロウに比べて、エッジ数がはるかに少ない。カラムセンターラインおよびロウセンターラインは、読み出されるべき２進データビットを表現する画素マトリックスの中心画素を求めるために用いられる。中心画素は、そのマトリックスの周囲の近傍画素とは対立するものとして、最も正確なデータを与えるために読み出される。換言すれば、単一のデータビットが、３×３画素からなるブロックによって表現される場合には、そのデータビットの中心画素は、２進データを読み出すのに最も望ましい位置にある。逆に、中心画素周囲の画素は、ランダム画素誤りなどによってもたらされるノイズの影響で誤りを含んでいる可能性が、中心画素よりもはるかに高い。したがって、エッジの数が最小であるそれぞれのカラムおよびロウの位置を求めれば、各中心画素の位置を正確に求めることができる。その結果、その画素が読み出される時、最も信頼性の高い２進データを生成することができる。
【００８１】
図９は、パナマークの一部において、どのように垂直エッジおよび水平エッジがカウントされるかを図示している。例えば、スキャンライン８０は、ロウ３に含まれている垂直エッジの数をカウントするために用いられる。図示されているように、ロウ３は４個の垂直エッジをもっている。同様に、ロウ５は、スキャンライン８１に沿ってカウントされる、１３個の垂直エッジをもっている。水平エッジカウントについては、カラム８は、スキャンライン７８に沿って８個の水平エッジをもっており、カラム１５はスキャンライン７９に沿って２個の水平エッジをもっている。もちろん、各ロウおよび各カラムは、それぞれのロウおよびカラムについてエッジ数を求めることができるようにスキャンされることになる。
【００８２】
図１０は、１３４本の画素カラムを有するパナマークの全幅についてカウントされる１カラム毎の水平エッジ数を示している。図示されているように、極小値があるところではどこでも、そのカラムはセンターラインをもっていると判定される。同様に、図１１は、図１のパナマーク１４に見られるように、印刷されたページの大半で垂直方向に延びているパナマークの（最初の１３４本のロウに対応する）長さの一部に対応する１ロウ毎の垂直エッジカウントを表している。ここでも、ロウセンターラインを示す極小値は、十分に規定されている。
【００８３】
動作時において、コンピュータシステムは、図１０および図１１にそれぞれ図示されているカラムおよびロウの中心を、実際にグラフィック再生する必要はない。その代わり、極小値を求めるために、各ロウおよび各カラムにそれぞれ対応する１次元線形表現が計算される。この計算は、非常に正確におこなうことができる。なぜなら、コンピュータは、それぞれのロウの中心およびカラムの中心がどのぐらい離れているべきであるかを推定することができるからである。例えば、３×３画素マトリックスによって表現される２進データビットにおいては、およそ３本の画素ロウ毎に新たなロウセンターラインがあるはずであること、また、およそ３本の画素カラム毎に新たなカラムセンターラインがあるはずであることがわかっている。しかし、センターラインをそのようにうまく規定できるからといって、コンピュータが、センターライン間のおおよその間隔を知っている必要はない。
【００８４】
いったん、水平エッジおよび垂直エッジがカウントされ、各カラムセンターラインおよび各ロウセンターラインが求められると、カラムセンターラインとロウセンターラインとの交点に位置する２進データがシーケンシャルに読み出され、データビットから構成される２次元アレイを形成する。例えば、図１０に示されているように、カラム３１はカラムセンターラインをもっている。よって、それぞれのロウセンターラインについては、図１１に図示されているように（ロウ９、１３、１６…）、２進データは、各ロウセンターライン（９、１３、１６…）がカラムセンターライン３１と交差するところから読み出されることになる。
【００８５】
いったん、データビットから構成される２次元アレイがつくられると、（もしあるのなら）ブロック識別子が、図６のステップ６６で述べたように識別される。エンコードする段階でパナマーク中にブロック識別子を挿入することにより得られる効果は明白であろう。すなわち、パナマーク内の２進データが信頼性よくデコードできない状況は、容易に想像できるものであるからである。例えば、パナマークの大半が覆い隠されていたり、失われている場合、あるいはパナマークが、ごく一部でも覆い隠されている場合を想定する。その場合、存在しているどのデータもすべて直接にデコードすることは可能ではあるが、失われたデータについては、そのデータがどこに属しているかはわからないので、デコードされたそのデータを利用することができないこともある。パナマークをファクスする時には、もっと微妙な影響が生じる。ファクシミリ機のスキャナが、データバーコードに対して多少の歪みをもたらすことは観察の結果わかっている。そういうものであるので、ファクシミリ機を通して送信されたパナマークが、画素ロウを横切って歪みを受けている結果、いくつかの画素ロウが失われていたり、余分な画素ロウが現れたりすることは十分に考えられる。図１２は、ある画素ロウ８３が圧縮されたパナマーク８２を示している。ここで、その画素ロウ８３は、パナマークがデコードされる時、スキップされるように圧縮されている。図１３は、ある画素ロウ８６が、オリジナルのサイズのほぼ２倍に伸長されているパナマーク８４を示している。したがって、パナマーク８４がデコードされると、伸長されたロウが出力中に現れる回数が１回よりも多くなる。これは、そのロウの全体、またはデータビットからなるいくつかのロウが失われたり、複製されたりすることにつながる。もちろん、同じ影響はパナマークのカラムにも現れる可能性がある。
【００８６】
したがって、図５のステップ５６および５７に示されているように、（それぞれが既知の、つまり所定のビットシーケンスまたは値をもつ）ブロック識別子を、ディジタル２次元アレイの所定の空き位置内に挿入するのが望ましい。これらのブロック識別子は、あるロウまたはあるカラムの全体を占めることができる。また、隣接するブロック識別子同士を、データビットから構成される既知の数のロウまたはカラムで互いに隔てることもできる。あるいは、ブロック識別子は、所定数のデータビットによって互いに隔てられた所定数のビットでもありうる。デコード時において、２進データビットが２次元ビットアレイに読み出された後、まず、それらのブロック識別子の位置が求められた後、好ましくは、隣接するブロック識別子間のロウ数および／またはカラム数がカウントされることによって、追加されたロウがあるか、あるいは失われているロウがあるかが判定される。あるいは、隣接するブロック識別子間のデータビット数をカウントすることによって、データビットを追加すべきか、あるいは削除すべきかが判定される。もしデータビットから構成されるいくつかのロウおよび／またはカラムが失われているのなら、それらの誤りを補償するために、どこにデータを追加すべきを決定しなければならない。
【００８７】
図１４は、ブロック識別子の位置を求めるに当たって好ましいサーチオーダーを示している。誤りは、他のどこよりもブロック識別子を表現するビット内で発生する可能性が高いので、ブロック識別子アルゴリズムは、所定の値と正確に整合する値をサーチしない。その代わり、所定の各ビットシーケンスに対するハミング距離が最小であるラインが、ブロック識別子を含むラインとして識別される。もちろん、ハミング距離比較以外の技術を用いてもよい。
【００８８】
図１４は、一連のデータビットロウ９１、９２、９３、９４および９５を有するパナマーク９０の一部を示している。ここで、各ロウは、所定のビットシーケンスを有するブロック識別子を有している。ブロック識別子の位置を求めるためには、もし、例えば、８つのエンコードされたデータビットロウの後に必ず１個のブロック識別子が挿入されることがわかっているのなら、歪みが生じているのでなければ、ブロック識別子ビットを有するロウは、９番目のロウ毎にあるものとされる。したがって、予想されるブロック識別子を有するロウ（図１４ではロウ９１）が、まず所定のビットシーケンスと比較される。もし正確に整合しないのなら、ロウ９２がそのビットシーケンスと比較される。残りのサーチオーダーは、図１４に示されているとおりである。つまり、ロウ９３、９４そして９５の順となる。もしこれらのロウのいずれにも正確な整合が見られないのなら、所定のビットシーケンスから最小のハミング距離を有するロウが、ブロック識別子ロウであると判定される。ブロック識別子は、データビットロウの中にあるものとして図示されてはいるものの、もちろん、ブロック識別子は、ビットアレイのカラム内に位置していてもよい。また、ロウまたはカラム内の各ブロック識別子の正確な位置を知ることができるので、上述したように、その既知のロウまたはカラムが、最初に所定のビットシーケンスと比較される。
【００８９】
いったんすべてのブロック識別子の位置が求められたら、アラインメント（alignment、位置合わせ）をおこなう必要があるかどうかが判定される。もし隣接するブロック識別子間のロウ数が正しい所定の数であるのなら、アラインメントをおこなう必要はない。しかし、もしそのロウ数が少なすぎるのなら、追加ロウを追加するためにアラインメントが必要になる。一方、もしライン数が多すぎるのなら、余剰ロウを削除するためにアラインメントが必要になる。
【００９０】
もし、あるエンコードされたデータビットロウを削除すべきであると判定されたのなら、つまり、もし実際のエンコードされたデータビットロウの数が所定の数を超えているのなら、同一の２進データをもつ隣接する２つのロウがある場合、そのうち１つを削除すべきであるものとする。もし同一のデータをもつ２つの隣接するロウがないのなら、相互間のハミング距離が最小である２つの隣接するロウのうち１つが削除されることになる。
【００９１】
しかし、もし、エンコードされた２進データロウの数が所定の数よりも小さいと判定されたのなら（例えば、１本のロウが失われているのなら）、２進データロウを追加することが必要になる。これによって、どんなデータを挿入すべきか、そしてどこにそのようなデータを挿入すべきかという問題が生ずる。どんなデータを挿入すべきかということについては、より情報量の多い選択肢がないときには、ランダムデータを「プレースホールダ（place holder）」として用いることができる。オリジナルのエンコードされたデータはランダマイズされるのであるから、挿入されるロウに対する「０」および「１」の数をどのように設定しても、予想される正確度（accuracy rate）は５０％になる。挿入されるロウは、平均すると比較的多数の誤りを含むものになるが、隣接するブロック識別子間に正しい数のロウを配置することは可能になる。また、ＥＣＣをおこなうことによって、および／またはデータに冗長性をもたせることによって、発生したどのような誤りも訂正することができる。
【００９２】
図１５は、１本のロウが失われたと判定された場合に、パナマーク１００のどこにランダム２進データロウを挿入すべきかを決定するためのプロシージャを示している。好ましいプロシージャでは、決定されたそれぞれのロウセンターラインを見る。例えば、図１５に矢印１０５で示されているように、連続する２つのブロック識別子間のロウセンターライン１０１を見る。ロウセンターライン１０１では、すべての画素に「×」マークがつけられている。次に、ロウセンターライン１０１の上のロウ１０２内の各画素、 およびロウセンターライン１０１の下のロウ１０３内の各画素が、ロウセンターライン１０１内の、それぞれの画素に隣接している画素と比較される。これらのロウ１０２および１０３において、ロウセンターライン１０１の隣接画素と同一色である（すなわち「接続されている」）画素には、それを示す「×」マークがつけられている。最後に、「×」の数が一番少ないロウ（すなわち、「接続の断たれている」画素が一番多いロウ）が、ロウセンターラインに隣接するには不適切なロウであると判定され、ランダムデータからなる追加ロウが、それに該当するロウとロウセンターラインを含むロウとの間に挿入される。この技術を用いれば、ロウ１０２は、（ロウ１０３の接続の断たれている画素が２つだけであるのに対して）接続の断たれている画素を３つ含むことになるので、誤って隣接しているロウとして選択されることになる。したがって、ロウ１０２とロウセンターライン１０１との間に、１本のランダムデータロウが追加される。
【００９３】
以上に、好ましい実施形態および各種局面に言及しながら、本発明を具体的に示し説明してきたが、本発明の着想および範囲を超えることなく、さまざまな変形および改変を加えることが可能であることは、当業者には理解できるであろう。また、添付の請求の範囲は、本願明細書に記載された各実施形態、前述した代替方法、およびそれらの等価物のすべてを包含すると解釈されるように意図されているものである。
【００９４】
【発明の効果】
本発明によれば、少なくとも以下の効果が得られる。すなわち、ディジタル的にエンコードされたデータを表現するクロック不要の２次元バーコードを提供することができる。また印刷媒体上に印刷され、媒体に対するダメージに耐えられるだけの十分な耐久性をもつ、クロック不要の２次元バーコードを提供することができる。さらに、ランダマイズされたデータビットを表現する複数の画素を設けることによって、連続する複数の画素からなる長いストリングが同一の色になることを防止し、かつ、不正なデコードを防止する安全性を保証する、クロック不要の２次元バーコードを提供することができる。さらに、印刷媒体上に印刷するために、クロック不要の２次元バーコードにフォーマットされた情報をエンコードすることができる。さらに、印刷媒体上に印刷されたクロック不要の２次元バーコードのかたちでディジタル的にエンコードされた情報をデコードする方法を提供することができる。
【図面の簡単な説明】
【図１】本発明により印刷媒体上に印刷されたバーコードのいくつかの例を模式的に示す図である。
【図２】本発明による２次元バーコードの一例を示す図である。
【図３】本発明によるブロック識別子ロウを含む２次元バーコードを示す図である。
【図４】本発明により情報を印刷媒体上にエンコードするための各ステップを示すフローチャートである。
【図５】図４のフローチャートに述べられている方法に基づいておこなわれる複数のステップのいくつかを図示する図である。
【図６】本発明により印刷媒体上に印刷された情報をデコードするための各ステップを示すフローチャートである。
【図７】本発明によりスキャニングされたバーコードにおいて、どのようにして水平エッジが求められるかを説明する図である。
【図８】本発明によりスキャニングされたバーコードにおいて、どのようにして垂直エッジが求められるかを説明する図である。
【図９】本発明により、どのようにして水平エッジおよび垂直エッジが各ロウおよび各カラムにおいてそれぞれカウントされるかを説明する図である。
【図１０】本発明により、どのようにしてカラムクロックセンターが求められるかをグラフによって説明する図である。
【図１１】本発明により、どのようにしてロウクロックセンターが求められるかをグラフによって説明する図である。
【図１２】本発明において、失われたロウのあるバーコードを示す図である。
【図１３】本発明において、余分なロウのあるバーコードを示す図である。
【図１４】本発明によりブロック識別子の位置を求めるためのサーチオーダーを示す図である。
【図１５】本発明により失われたロウが求められた時の、情報ロウの追加を示す図である。
【符号の説明】
３０  圧縮ステップ
３１  複製ステップ
３２  ＥＣＣ付加ステップ
３３  ランダマイズステップ
３４  ブロック化ステップ
３５  タグ付加ステップ
３６  ポストスクリプト生成ステップ
３７  ポストスクリプト導入ステップ
３８  印刷ステップ
【図１】
0003643196.tif 000002
【図２】
0003643196.tif 000003
【図３】
0003643196.tif 000004
【図４】
0003643196.tif 000005
【図５】
0003643196.tif 000006
【図６】
0003643196.tif 000007
【図７】
0003643196.tif 000008
【図８】
0003643196.tif 000009
【図９】
0003643196.tif 000010
【図１０】
0003643196.tif 000011
【図１１】
0003643196.tif 000012
【図１２】
0003643196.tif 000013
【図１３】
0003643196.tif 000014
【図１４】
0003643196.tif 000015
【図１５】
0003643196.tif 000016