(57)【特許請求の範囲】
【請求項１】
情報コードを２次元画像検出手段にて検出し、前記２次元画像検出手段にて検出した情報コードを含む１画像領域分の画像データを一時的に画像データメモリに記憶しておき、当該記憶された画像データに基づいて前記画像データメモリ上における前記情報コードの概略的な存在領域を推定する方法であって、
前記画像データメモリ上における１画像領域を、１の上位検査区域が複数の下位検査区域に分割された階層構造を有する複数の検査区域に分割し、その分割された検査区域毎に、当該区域内に含まれる画像データに基づいて明暗の変化点の数を計数し、
その計数された明暗変化点数に基づいて、前記上位検査区域毎に当該区域内に含まれる明暗変化点数が所定の上位検査区域用閾値以上の区域を抽出し、
その抽出された区域同士が隣接して構成される上位検査区域群の周辺部に位置する上位検査区域について、当該上位検査区域内を構成する下位検査区域毎に当該区域内に含まれる明暗変化点数が所定の下位検査区域用閾値以上の区域と所定の下位検査区域用閾値未満の区域とを区別し、
前記抽出した上位検査区域群から、前記所定の下位検査区域用閾値未満として区別された下位検査区域を除外した領域を、前記画像データメモリ上における前記情報コードの概略的な存在領域として推定すること、
を特徴とする情報コード概略存在領域推定方法。
【請求項２】
情報コードを２次元画像検出手段にて検出し、前記２次元画像検出手段にて検出した情報コードを含む１画像領域分の画像データを一時的に画像データメモリに記憶しておき、当該記憶された画像データに基づいて前記画像データメモリ上における前記情報コードの概略的な存在領域を推定する方法であって、
前記画像データメモリ上における１画像領域を複数の検査区域に分割し、その分割された検査区域毎に、当該区域内に含まれる画像データに基づいて明暗の変化点の数を計数する処理を、前記２次元画像検出手段にて検出された画像データが画像データメモリに出力されて記憶される処理と並行して実行し、
また、この明暗変化点数の計数においては、
現時点までに取り込んだ画像データの明暗度合いを示すデータの内、最も明るいデータ及び最も暗いデータを所定のメモリ領域に更新しながら記憶していくと共に、それら最も明るいデータ及び最も暗いデータの中間値を計算し、新たに取り込むデータについてはその中間値と比較することで明暗の判定を行い、その明暗判定処理の結果、明暗が変化した数を計数し、
さらに、この明暗の判定に際しては、
前記最も明るいデータから所定の余裕値だけ暗いデータである暗上限値及び前記最も暗いデータから所定の余裕値だけ明るいデータである明下限値を用いることを前提とし、
前記新たに取り込むデータが前記中間値以上であり、且つ前記明下限値以上である場合には明であると判定し、一方、前記新たに取り込むデータが前記中間値よりも暗くて、且つ前記暗上限値以下である場合には暗であると判定し、
そして、前記明暗変化点数の計数おいて計数された明暗変化点数と前記検査区域との対応関係をテーブル化して記憶しておき、
その記憶された変化点数に基づいて前記情報コードが存在する可能性の高い検査区域を抽出し、その抽出された検査区域を、前記画像データメモリ上における前記情報コードの概略的な存在領域として推定すること、
を特徴とする情報コード概略存在領域推定方法。
【請求項３】
請求項１又は２記載の情報コード概略存在領域推定方法において、
前記検査区域は、前記画像領域を水平方向へ走査するための主走査線及び垂直方向へ走査するための副走査線とそれぞれ平行な線によって区画される矩形の区域であること、
を特徴とする情報コード概略存在領域推定方法。
【請求項４】
請求項３記載の情報コード概略存在領域推定方法において、
前記情報コードが複数のセルによって構成される２次元コードであり、
前記検査区域は、読取対象とする前記セルが前記画像データメモリ上で取り得る最小サイズよりも大きく設定されていること、
を特徴とする情報コード概略存在領域推定方法。
【請求項５】
請求項４記載の情報コード概略存在領域推定方法において、
前記検査区域は、前記セルが前記画像データメモリ上で取り得る最小サイズの２倍よりも大きく設定されていること、
を特徴とする情報コード概略存在領域推定方法。
【請求項６】
請求項１又は２記載の情報コード概略存在領域推定方法において、
前記検査区域は、前記画像領域を水平方向へ走査するための各主走査線に対応する区域であること、
を特徴とする情報コード概略存在領域推定方法。
【請求項７】
請求項１又は２記載の情報コード概略存在領域推定方法において、
前記検査区域は、前記画像領域を水平方向へ走査するための各主走査線に対応する区域を、さらに所定数に分割した区域であること、
を特徴とする情報コード概略存在領域推定方法。
【請求項８】
請求項１〜７のいずれか記載の情報コード概略存在領域推定方法において、
前記抽出された検査区域同士が隣接している場合には、その隣接している検査区域群を、前記情報コードの概略的な存在領域として推定することを前提とし、
前記検査区域群が複数存在する場合には、その少なくとも一部が前記画像領域中央の所定範囲内に存在する検査区域群を、前記情報コードの概略的な存在領域である可能性が高いと推定すること、
を特徴とする情報コード概略存在領域推定方法。
【請求項９】
請求項８記載の情報コード概略存在領域推定方法において、
前記検査区域群中に含まれる検査区域数が多いほど、前記情報コードの概略的な存在領域である可能性が高いと推定すること、
を特徴とする情報コード概略存在領域推定方法。
【請求項１０】
請求項１〜９のいずれか記載の情報コード概略存在領域推定方法において、
前記検査区域に属する走査線が複数存在する場合には、
１つの走査線毎に前記明暗変化点数の計数を行うことを前提とし、前記検査区域毎に、当該検査区域内の画像データに基づく明暗変化点数を一時的に記憶していくと共に、当該検査区域に属する１の走査線に対する計数が終了した時点で前の走査線までに計数した明暗変化点数を累積記憶していき、当該検査区域に属する全走査線に対する計数が終了した時点での前記明暗変化点数の累積値を、当該検査区域内の画像データに基づく明暗変化点数とすること、
を特徴とする情報コード概略存在領域推定方法。
【請求項１１】
請求項１〜１０のいずれか記載の情報コード概略存在領域推定方法において、
前記検査区域毎に含まれる画像データの明暗度合いを示すデータの平均値を求め、
前記情報コードが存在する可能性の高い検査区域を抽出する際には、前記計数された明暗変化点数に基づくと共に、前記求めた明暗度合いを示すデータの平均値も加味すること、
を特徴とする情報コード概略存在領域推定方法。
【請求項１２】
請求項１〜１１のいずれか記載の情報コード概略存在領域推定方法によって推定された情報コードの概略存在領域内に検査線を設定し、その設定した検査線に沿って画像データを検査することで情報コードの正確な存在領域を検出し、その検出された存在領域内の画像データに基づいて、その中に含まれている前記情報コードを読み取ること、
を特徴とする情報コード読取方法。
【請求項１３】
２次元画像検出手段と、
該２次元画像検出手段にて検出した情報コードを含む１画像領域分の画像データを一時的に記憶しておく画像データメモリと、
該画像データメモリ上における前記情報コードの概略的な存在領域を、請求項１〜１１のいずれか記載の情報コード概略存在領域推定方法によって推定し、その推定された情報コードの概略存在領域内に検査線を設定し、その設定した検査線に沿って画像データを検査することで情報コードの正確な存在領域を検出する存在領域検出手段と、
該存在領域検出手段にて検出された存在領域内の画像データに基づいて、その中に含まれている前記情報コードを読み取る読取手段と、
を備えることを特徴とする情報コード読取装置。
【請求項１４】
請求項１〜１１のいずれか記載の情報コード概略存在領域推定方法が、コンピュータシステムにて実行するプログラムとして記録されたことを特徴とする記録媒体。
【請求項１５】
請求項１２記載の情報コード読取方法が、コンピュータシステムにて実行するプログラムとして記録されたことを特徴とする記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、バーコードや２次元コードなどの情報コードを読み取る際、２次元画像検出手段にて検出された２次元的な画像データを一時的に記憶した画像データメモリ上において、情報コードの概略的な存在領域を推定する方法などに関する。
【０００２】
【従来の技術】
従来より、バーコードや２次元コードを２次元画像検出手段にて２次元的な画像データとして検出し、その画像データを一時的に記憶した画像データメモリを走査してコード読み取りを行う手法が考えられている。この場合の画像データの総量は非常に多い（例えば横６４０画素×縦４８０画素＝３０７２００画素）ため、まず画像領域内のどの部分に情報コードが存在するかを短時間で見い出すことが重要である。
【０００３】
例えば特開平１０−１９８７５４号公報においては、２次元ＣＣＤセンサから出力される全走査線信号の内、所定間隔で設定された走査線の代表である検査線を設定し、その検査線に沿って画像データを走査することで、画像データメモリ上でのバーコードの位置を早く見つけるようにしている。つまり、走査線単位で逐次画像データを走査すると時間がかかるが、実際に画像データメモリ上において読取対象のコードが存在している領域は一部であるため、走査線群から抜粋した検査線単位で画像データを走査することで早期にコードの存在を検出できるようになる。
【０００４】
【発明が解決しようとする課題】
しかしながら、このように検査線を設定する手法の場合には、画像領域中のどの位置にコードが存在するか判らないため、画像領域全体を検査できるように複数本の検査線を設定する必要はある。そして、この検査線は、例えば画像領域横方向であればその横方向長さと同じだけの長さの検査線とされていた。もちろん、画像領域縦方向に設定する場合も同様に、縦方向長さと同じだけの長さの検査線とされていた。
【０００５】
このような検査線を用いる手法も有効ではあるが、例えば情報コードの周囲に枠線や文字などの記載があると、情報コードとの判別が必要となる状況が頻繁に発生し、１本の検査線に沿って検査するのに要する時間が増大する。その結果、情報コードの解読に成功したとしても、解読までに要する時間が長く（レスポンスが悪く）なり、作業性の低下を招来してしまう。
【０００６】
そこで、本発明は、検出された２次元的な画像データを一時的に記憶した画像データメモリ上において情報コードの概略的な存在領域を推定することにより、その推定された概略的な存在領域に基づいて、その後に情報コードの正確な位置を検出してデータ解読をする処理まで含めたコード読取処理に要する時間を短縮させることを目的とする。
【０００７】
【課題を解決するための手段及び発明の効果】
上記目的を達成するためになされた請求項１記載の情報コード概略存在領域推定方法は、２次元画像検出手段にて検出した情報コード（バーコードや２次元コードなど）を含む１画像領域分の画像データを画像データメモリに一時的に記憶しておき、この画像データ中から情報コードの概略存在領域を推定する。この推定方法の内容は後述するが、概略存在領域としては、情報コードよりも大きく、情報コードの全てが含まれる領域として推定されることもあるし、あるいは情報コードの一部は含まれないような概略存在領域として推定されることもある。
【０００８】
なお、このように情報コードの概略存在領域を推定するのは、その後、推定された情報コードの概略存在領域内に検査線を設定し、その設定した検査線に沿って画像データを検査することで情報コードの正確な存在領域を検出し、その検出された存在領域内の画像データに基づいて、その中に含まれている情報コードを読み取ることを前提としている。したがって、このような情報コードの正確な位置検出及びコード読取という処理を行うための前処理という位置づけとなる。
【０００９】
このような前提において請求項１記載の推定方法は、まず、画像データメモリ上における１画像領域を複数の検査区域に分割し、その分割された検査区域毎に、当該区域内に含まれる画像データに基づいて明暗の変化点の数を計数する。そして、その計数された明暗変化点数に基づいて、情報コードが存在する可能性の高い検査区域を抽出し、その抽出された検査区域を、画像データメモリ上における情報コードの概略的な存在領域として推定するのである。
【００１０】
従来は、走査線に従って画像データメモリ領域内の画像データを１画素ごとに検査していく手法であったが、本発明方法は、複数画素を１まとめにした検査区域単位で概略的なコード存在領域を推定した後、その推定された領域内においてのみ従来通りの１画素毎の明暗パターンを検査するので、その検査範囲が小さくて済む。また、概略的なコード存在領域の推定にあっては、検査区域毎に計数した明暗変化点数の大小比較のみ、すなわち整数値の相対比較であるため、処理負荷は小さくて済む。したがって、概略的な存在領域を推定した後に情報コードの正確な位置を検出してデータ解読をする処理まで含めたコード読取処理に要する時間を短縮させることができる。
【００１１】
なお、検査区域に関しては、特にその形状が限定されるものではないが、処理効率を考慮すると、請求項３に示すように設定することが好ましい。すなわち、画像領域を水平方向へ走査するための主走査線及び垂直方向へ走査するための副走査線とそれぞれ平行な線によって区画される矩形の区域を検査区域とするのである。２次元画像検出手段（例えばＣＣＤエリアセンサ）においては主走査線及び副走査線方向にマトリックス状に画素が配列されているので、このように矩形領域に設定した方がデータが扱いやすい。
【００１２】
また、情報コードが複数のセルによって構成される２次元コードであり、検査区域を矩形領域に設定する場合には、請求項４に示すように、検査区域を、読取対象とするセルが画像データメモリ上で取り得る最も小さいセルサイズよりも大きく設定することが好ましい。このように、情報コードが２次元コードの場合には、検査区域をセルサイズよりも大きくすることにより、明暗セルが隣接している状態を確実に検出できる。
つまり、逆に検査区域がセルサイズよりも小さいと、実際には２次元コードが存在している領域であるにも関わらず、明暗変化点が０という結果が生じてしまい、適切でないからである。もちろん、明セル同士あるいは暗セル同士が隣接している場合には、明暗変化点が存在しないこともあり得るが、少なくとも検査区域をセルサイズよりも大きくすれば、明暗セルが隣接している状態を確実に検出できる点で有効である。
【００１３】
この請求項４の考え方に基づけば、請求項５に示すように、検査区域を、セルが画像データメモリ上で取り得る最小サイズの２倍よりも大きくすることが好ましい。この場合は、明セル同士あるいは暗セル同士が２つ隣接している場合でも明暗変化点を確実に検出できる。そして、明暗セルが交互に隣接している状態の場合には、明暗変化点がより多く検出されるため、２次元コードの存在領域であることを、より確実に推定できる。つまり、単なる汚れなどの場合には明暗変化点数がそう多くはならないが、明暗セルが交互に隣接する可能性が高いという２次元コード特有の技術的性質に基づけば、明暗変化点数が多いほど、存在の可能性が高くなる。
【００１４】
また、請求項６に示すように、検査区域を、画像領域を水平方向へ走査するための各主走査線に対応する区域とすることも考えられる。画像領域は主走査線に沿って走査されていくため、このように各主走査線に対応する区域を検査区域とすれば、主走査線に沿った走査が終了する毎に検査区域の明暗変化点数がされるため、処理負担は軽減する。但し、この場合には、主走査線単位であるため、画像領域の副走査線方向における明暗変化点数の多い部分を抽出することは可能であるが、主走査線方向に見た場合には、どの部分に明暗変化点が多いかは判断できない。そこで、請求項７に示すように、上述した各主走査線に対応する区域をさらに所定数に分割して、検査区域としてもよい。このようにすれば、主走査線方向に見た場合に、どの部分に明暗変化点が多いかの判断もできるようになる。
【００１５】
なお、検査区域のサイズに関しては、一般論として、次のようなことが言える。サイズが小さければ、推定した概略的なコード存在領域が実際のコード存在領域に近い形状として得られるが、検査区域数が多くなるので、推定のための処理負荷は相対的に大きい。但し、その後に実際のコード存在領域を検出（１画素毎に処理）する場合の処理負荷は小さくなる。
【００１６】
反対に、サイズが大きければ、推定した概略的なコード存在領域が実際のコード存在領域に対して大きな形状として得られることとなる。つまり、検査区域のほんの一部にしかコードが存在していない場合であっても、その（相対的に大きな）検査区域も概略的なコード存在領域として扱ってしまうため、その後に実際のコード存在領域を検出（１画素毎に処理）する場合の処理負荷は大きくなる。但し、検査区域数が少なくなるので、推定のための処理負荷は相対的に小さい。
【００１７】
このように、検査区域の大小によって、領域推定のための処理負荷とその後の領域検出のための処理負荷は相反する結果となるので、両者の効果の有効性を考慮して、適宜設定すればよい。
次に、計数された明暗変化点数に基づいてコードが存在する可能性の高い検査区域を抽出し、その抽出された検査区域を情報コードの概略的な存在領域として推定する際の手法について説明する。
【００１８】
請求項８に示す手法は、抽出された検査区域同士が隣接している場合には、その隣接している検査区域群を、情報コードの概略的な存在領域として推定することを前提とし、その検査区域群が複数存在する場合の対処に関するものである。すなわち、この場合は、その少なくとも一部が画像領域中央の所定範囲内に存在する検査区域群を、情報コードの概略的な存在領域である可能性が高いとして推定する。
【００１９】
さらに、請求項９に示す手法は、請求項６と同様に検査区域群が複数存在している場合であって、検査区域群中に含まれる検査区域数が多いほど、情報コードの概略的な存在領域である可能性が高いと推定する。画像領域内には情報コード以外の画像も入り込むことがある。そこで、まず、対象となる情報コードが画像領域の中央付近に存在する可能性が高いことに鑑み、請求項８に示すように、検査区域群の少なくとも一部が画像領域中央の所定範囲内に存在する検査区域群を、情報コードの概略的な存在領域である可能性が高いと推定する。これは、コード読取操作においては、画面のなるべく中央にコードが来るようにユーザが操作する可能性が高いことを考慮したものである。
【００２０】
そして、画像領域中央の所定範囲内に存在する場合はもちろん、存在しない場合についても、請求項９に示すように検査区域群のサイズに着目し、サイズが大きいほどコード存在領域である可能性が高いとすることにより、情報コードの存在領域であると考えられる範囲を優先して取り扱うことができる。例えば図柄などで大きな面積を持つ部分は明暗変化点数としては少なくなるので、抽出される検査区域群が大きくなることはない。一般的には、情報コードに対応する検査区域群が最大になると思われる。したがって、検査区域群の少なくとも一部が画像領域中央の所定範囲内に含まれ、且つ検査区域群を構成する検査区域数が多いものが、最も情報コードの概略的な存在領域としての可能性が高いと推定される。
【００２１】
ところで、検査区域に関しては、請求項１に示すように、１の上位検査区域が複数の下位検査区域に分割された階層構造を採用することも考えられる。もちろん２階層でも３階層でもよい。そして、次のような情報コードの概略存在領域の推定を行う。すなわち、まず、上位検査区域毎に当該区域内に含まれる明暗変化点数が所定の上位検査区域用閾値以上の区域を抽出する。
続いて、その抽出された区域同士が隣接して構成される上位検査区域群の周辺部に位置する上位検査区域について、当該上位検査区域内を構成する下位検査区域毎に当該区域内に含まれる明暗変化点数が所定の下位検査区域用閾値以上の区域と所定の下位検査区域用閾値未満の区域とを区別する。そして、抽出した上位検査区域群から、所定の下位検査区域用閾値未満として区別された下位検査区域を除外した領域を、画像データメモリ上における前記情報コードの概略的な存在領域として推定するのである。
【００２２】
抽出された上位検査区域は、その区域内に情報コードが含まれる可能性が高いのであるが、情報コードの中央付近に該当する上位検査区域では、区域内の全部に情報コードが存在するが、情報コードの周辺部に該当する上位検査区域では、区域内の一部にしか情報コードが存在しない場合もある。そこで、抽出された上位検査区域同士が隣接して構成される上位検査区域群の周辺部に位置する上位検査区域については、小さな下位検査区域の単位で、所定の下位検査区域用閾値以上の区域と所定の下位検査区域用閾値未満の区域とを区別する。そして、下位検査区域用閾値未満として区別された下位検査区域を、抽出した上位検査区域群から除外すれば、その領域は、情報コードの実際の存在領域により近い概略的存在領域となる。
【００２３】
このようにすれば、最初から小さな検査区域を設定して、各検査区域毎に判定していく場合に比べて、処理効率が向上する。一方、検査区域毎の明暗変化点数の計数に関しては、請求項２に示すような手法を採用することができる。つまり、２次元画像検出手段にて検出された画像データが画像データメモリに出力されて記憶される処理と並行して実行し、その計数された明暗変化点数と前記検査区域との対応関係をテーブル化して記憶しておく。そして、この記憶された変化点数に基づいて情報コードが存在する可能性の高い検査区域を抽出するのである。
【００２４】
本推定方法は、その後に、情報コードを読み取る処理へ移行するための前処理として位置づけられるものであるため、２次元画像検出手段にて検出された画像データ自体も画像データメモリに記憶しておく必要がある。そこで、画像データメモリへ出力される過程と並行して画像データを取得し、明暗変化点のみをカウントする処理を行う。このようにすれば、１画像領域分の画像データを記憶してから、その記憶された画像データを走査して明暗変化点を検出するのに比べて、処理時間の短縮が実現される。これは、コード読取全体に要する時間の短縮にも寄与する。
【００２５】
また、明暗変化点数の計数方法に関しては、請求項２に示す手法を採用してもよい。すなわち、現時点までに取り込んだ画像データの明暗度合いを示すデータの内、最も明るいデータ及び最も暗いデータを所定のメモリ領域に更新しながら記憶していく。それと共に、それら最も明るいデータ及び最も暗いデータの中間値を計算する。そして、新たに取り込むデータについてはその中間値と比較することで明暗の判定を行い、その明暗判定処理の結果、明暗が変化した数を計数するのである。
【００２６】
２次元画像検出手段から出力される画素毎の画像データ（輝度データ）について、それまでに検出された最も明るい画像データと最も暗いデータの中間値を明暗判定の基準値としていく。例えば明るさを数値化した場合、数字が大きくなるほど明るくなる画像データを考え、１〜１５まであるとする。最初１５が入ってくると、最も明るい画像データと最も暗いデータは共に１５であり、中間値も１５となる。その後、１５が続けて入ってきている間は変化なしであるが、例えば９が入ってくると、最も暗いデータが９に更新され、中間値は１２となる。さらに、１が入ってくると、最も暗いデータが１に更新され、中間値は８となる。これが収束値となる。したがって、８を基準として明暗判定すればよい。
【００２７】
なお、明暗判定の基本は中間値との比較である。具体的には、入力値≧中間値であれば明、入力値＜中間値であれば暗とすることが考えられるが、明暗判定の確実性を増すため、請求項２に示すようにすることも考えられる。まず、次のような明下限値及び暗上限値を用いることを前提とする。すなわち、最も明るいデータから所定の余裕値だけ暗いデータを暗上下限値とし、最も暗いデータから所定の余裕値だけ明るいデータを明下限値とする。そして、明暗判定に際しては、新たに取り込むデータが中間値以上であり、且つ前記明下限値以上である場合には明であると判定し、一方、新たに取り込むデータが中間値よりも暗くて、且つ暗上限値以下である場合には暗であると判定するのである。なお、明下限値を定めるために用いる余裕値及び暗上限値を定めるために用いる余裕値については、それぞれ別々の値を設定してもよいが、両者を等しくしてもよい。
【００２８】
例えば、明るさの度合いを１〜１５で表した上述の画像データにおいて、明下限値及び暗上限値を定めるための余裕値をそれぞれ５とすると、中間値よりも小さい場合であっても、最も明るいデータよりも５以上小さくなければ暗としては認めないようにし、また、中間値以上であっても、最も暗いデータよりも５以上大きくなければ明として認めないのである。このようにすることで、例えば中間値が３のときに明るさの度合いが４の画像データが入ってきても、それは最も暗いデータよりも５以上大きくはないので「明データ」として認めないこととなり、実状にあった判定となる。
【００２９】
なお、検査区域に属する操作線が複数存在する場合には、明暗変化点数の計数に当たっては、請求項１０に示すような手法を採用できる。つまり、１つの走査線毎に明暗変化点数の計数を行うことを前提とし、検査区域毎に、その検査区域内の画像データに基づく明暗変化点数を一時的に記憶していくと共に、その検査区域に属する１の走査線に対する計数が終了した時点で前の走査線までに計数した明暗変化点数を累積記憶していく。そして、その検査区域に属する全走査線に対する計数が終了した時点での明暗変化点数の累積値を、その検査区域内の画像データに基づく明暗変化点数とする。一般的には、主走査線毎に処理するため、このような計数手法が採用されることとなる。
【００３０】
また、以上説明した情報コード概略存在領域推定方法においては、情報コードが存在する可能性の高い検査区域を抽出するために明暗変化点数に基づいていたが、さらに、請求項１１に示すように判定指標を用いても良い。すなわち、検査区域毎に含まれる画像データの明暗度合いを示すデータの平均値を求め、その求めた明暗度合いを示すデータの平均値も加味して、情報コードが存在する可能性の高い検査区域を抽出するのである。具体的には、例えば明暗度合いを示すデータの平均値に基づいて、情報コードの存在する可能性の高い検査区域を概略的に抽出しておき、その中から、計数された明暗変化点数に基づいて抽出したり、あるいは、明暗変化点数と画像データの明暗度合いを示すデータの平均値という２つの判定指標に基づいてそれぞれ抽出した領域の重なる部分を、最終的に抽出する、といった種々の用い方が考えられる。
【００３１】
ところで、以上説明したのは情報コード概略存在領域推定方法であったが、上述したように、本推定方法は、その後に、情報コードを読み取る処理へ移行するための前処理として位置づけられるものである。そのため、請求項１２に示すように、以上説明した方法で推定された情報コードの概略存在領域内に検査線を設定し、その設定した検査線に沿って画像データを検査することで情報コードの正確な存在領域を検出し、その検出された存在領域内の画像データに基づいて、その中に含まれている前記情報コードを読み取る２次元コード読取方法という概念で技術思想を捉えることもできる。
【００３２】
また、この２次元コード読取方法を用いた２次元コード読取装置としては、例えば請求項１３に示すような構成を採用することができる。すなわち、２次元画像検出手段と、２次元画像検出手段にて検出した情報コードを含む１画像領域分の画像データを一時的に記憶しておく画像データメモリと、画像データメモリ上における情報コードの概略的な存在領域を、請求項１〜１１のいずれか記載の情報コード概略存在領域推定方法によって推定し、その推定された情報コードの概略存在領域内に検査線を設定し、その設定した検査線に沿って画像データを検査することで情報コードの正確な存在領域を検出する存在領域検出手段と、存在領域検出手段にて検出された存在領域内の画像データに基づいて、その中に含まれている情報コードを読み取る読取手段とを備える構成である。
【００３３】
なお、請求項１４，１５に示すように、請求項１〜１１のいずれか記載の情報コード概略存在領域推定方法、あるいは請求項１２記載の情報コード読取方法を実行する機能は、例えば、デジタル回路やコンピュータシステム側で起動するプログラムとして備えられる。プログラムで実現する場合、例えば、ＦＤ、光磁気ディスク、ＣＤ−ＲＯＭ、ハードディスク等の機械読み取り可能な記録媒体に記憶し、必要に応じてコンピュータシステムにロードして起動することにより用いることができる。この他、ＲＯＭやバックアップＲＡＭを機械読み取り可能な記録媒体として前記プログラムを記憶しておき、このＲＯＭあるいはバックアップＲＡＭをコンピュータシステムに組み込んで用いても良い。
【００３４】
【発明の実施の形態】
以下に、本発明の好適な実施例を図面に基づいて説明する。尚、本発明の実施の形態は、下記の実施例に何ら限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採り得ることはいうまでもない。
【００３５】
［第１実施例］
図１のブロック図に、実施例としての情報コード読取装置１の概略的な構成を示す。
情報コード読取装置１は、制御回路１０と、照明発光ダイオード（照明ＬＥＤ）１１と、ＣＣＤエリアセンサ１２と、増幅回路１３と、Ａ／Ｄ変換回路１４と、同期パルス出力回路１６と、アドレス発生回路１７と、画像メモリ２０と、スイッチ群３１と、液晶表示器３２と、通信Ｉ／Ｆ回路３３と、２値化回路５０とを中心にして構成されている。
【００３６】
制御回路１０は、ＣＰＵ、ＲＯＭ、ＲＡＭ、Ｉ／Ｏ等を備えたコンピュータシステムとして構成され、ＲＯＭに記憶されているプログラムに従って後述する読取処理等を実行し、情報コード読取装置１の各構成を制御している。
照明ＬＥＤ１１は、読取対象の２次元コードに対して照明用の赤色光を照射するものである。
【００３７】
ＣＣＤエリアセンサ１２は、２次元的に配列された複数の受光素子であるＣＣＤを有しており、外界を撮像してその２次元画像を水平方向の走査線信号として出力する。この走査線信号は増幅回路１３によって増幅されてＡ／Ｄ変換回路１４に出力される。
【００３８】
増幅回路１３は、制御回路１０から入力したゲインコントロール電圧に対応する増幅率で、ＣＣＤエリアセンサ１２から出力された走査線信号を増幅する。
Ａ／Ｄ変換回路１４は、増幅回路１３にて増幅されたアナログの走査線信号をディジタル信号に変換して、画像メモリ２０に出力する。ＣＣＤエリアセンサ１２では繰り返し画像を検出するので、その検出が繰り返される度に、画像メモリ２０内の画像データは更新される。
【００３９】
同期パルス出力回路１６は、ＣＣＤエリアセンサ１２から出力される２次元画像データのパルスより十分に細かい同期パルスを出力する。アドレス発生回路１７はこの同期パルスをカウントして、画像メモリ２０に対するそれぞれのアドレスを発生させる。
【００４０】
画像メモリ２０は、画像データメモリ２０ａと、変化点数メモリ２０ｂと、２次元画像メモリ２０ｃとを備えている。上述したＡ／Ｄ変換回路１４にてディジタル信号に変換された画像データは、画像メモリ２０中の画像データメモリ２０ａに格納される。
【００４１】
また、Ａ／Ｄ変換回路１４にてディジタル信号に変換された画像データは、２値化回路５０にも出力される。この２値化回路５０については後述する。
スイッチ群３１は、利用者が読取処理の開始を指示するための読取スイッチや、テンキーあるいは各種ファンクションキーを備えており、情報入力のために用いられる。
【００４２】
液晶表示器３２は、読み込んだ２次元コードなどを表示するためなどに用いられる。
通信Ｉ／Ｆ回路３３は、ホストコンピュータなどとの間で通信を行うものであり、例えば図示しない通信用発光素子を介してデータを外部装置に送信したり、図示しない通信用受光素子を介して外部装置からの信号（例えばシステムを動かすためのプログラムや、解読した情報コードのデータ送信を指示する命令等）を受信する。もちろん、ホストコンピュータと有線で接続する構成を採用してもよい。
【００４３】
続いて、２値化回路５０の詳細について、図２，３を参照して説明する。図２は２値化回路５０を構成する要素について概略的な機能別にまとめたブロック図であり、図３は、さらに詳細な機能別にまとめたブロック図である。
図２に示すように、２値化回路５０は、明比較器５１と、暗比較器５２と、明暗判定器５３と、カウンタ５４と、余裕値記憶ブロック５５と、ブロックアドレス制御回路５６とを備えている。そして、Ａ／Ｄ変換回路１４にてディジタル信号に変換されて出力された画像データは、明比較器５１と、暗比較器５２と、明暗判定器５３とに入力する。明比較器５１及び暗比較器５２から出力されるデータは明暗判定器５３に入力され、明暗判定器５３からの出力データはカウンタ５４及び画像メモリ２０内の２次元画像メモリ２０ｃへ入力される。また、カウンタ５４からの出力、つまりカウント値は、画像メモリ２０内の変化点数メモリ２０ｂへ入力される。
【００４４】
また、制御回路１０からのリードライト制御信号は、明比較器５１、暗比較器５２、明暗判定器５３、余裕値記憶ブロック５５、ブロックアドレス制御回路５６のそれぞれに入力している。一方、アドレス発生回路１７からのアドレス制御信号は、ブロックアドレス制御回路５６へ入力しており、そのブロックアドレス制御回路５６からの制御信号は、画像メモリ２０内の変化点数メモリ２０ｂへ入力されている。なお、アドレス発生回路１７からのアドレス制御信号は、画像メモリ２０内の画像データメモリ２０ａ及び２次元画像メモリ２０ｃにも入力されている。
【００４５】
以上は、２値化回路５０の概略的な説明であったので、図３を参照してさらに詳しく説明する。なお、図３においては、図２に示した要素を構成するブロックであることを示すため、同じ数字の後に小文字の英字を付した。例えば明比較器５１であれば、比較ブロック５１ａと、明データ記憶ブロック５１ｂと、減算ブロック５１ｃと、暗上限記憶ブロック５１ｄとを備えるという具合である。それ以外の要素についても同様に示した。
【００４６】
明比較器５１の構成要素については説明したが、暗比較器５２は、比較ブロック５２ａと、暗データ記憶ブロック５２ｂと、加算ブロック５２ｃと、明下限記憶ブロック５２ｄとを備える。また、明暗判定器５３は、除算ブロック５３ａと、中間値記憶ブロック５３ｂと、明比較ブロック５３ｃと、暗比較ブロック５３ｄと、中間比較ブロック５３ｅと、明比較ブロック５３ｃ、暗比較ブロック５３ｄ及び中間比較ブロック５３ｅからの出力信号を入力して、所定の判定条件に基づく明暗判定を行う明暗判定ブロック５３ｆと、直前値記憶回路５３ｇと、比較ブロック５３ｈとを備えている。なお、カウンタ５４及び余裕値記憶ブロック５５は図２に示したものと同じである。また、ブロックアドレス制御回路５６は、主走査区分設定ブロック５６ａと、副走査区分設定ブロック５６ｂと、区域制御ブロック５６ｃとを備えている。
【００４７】
続いて、これらの要素間の信号のやりとりについて説明する。まず、図２の明比較器５１に属する構成に関して説明する。
Ａ／Ｄ変換回路１４（図２参照）から出力された（Ａ／Ｄ変換後の）画像データは、比較ブロック５１ａ及び明データ記憶ブロック５１ｂに入力する。比較ブロック５１ａには明データ記憶ブロック５１ｂからの出力信号も入力しており、すなわち比較ブロック５１ａでは、順次入力される画像データの明るさを示すデータを従前に入力されたデータと比較し、より明るい方を明データ記憶ブロック５１ｂへ出力する。したがって、明データ記憶ブロック５１ｂには、それまでに入力された中で最も明るいデータ（以下、これを明データと称す。）が更新されながら記憶されることとなる。なお、本実施例においては、具体例として後述するように、明るさを１〜１５で示しており、数字が大きくなるほど明るいことを前提として説明を進めることとなる。
【００４８】
そして、減算ブロック５１ｃでは、余裕値記憶ブロック５５より出力された暗余裕値を、この明データ記憶ブロック５１ｂより出力される明データから減算して暗上限記憶ブロック５１ｄに出力する。したがって、暗上限記憶ブロック５１ｄには、暗上限値として、明データから暗余裕値を減算した値が更新されながら記憶されることとなる。なお、この暗上限値とは、明暗判定の際に「暗」と判定する上限の値を指し、それまでの入力データの内で最も明るいとされる明データから所定の暗余裕値を減算した値よりも大きな値となる範囲ではとても暗とは認められない、という判定のために用いるものである。
【００４９】
次に、図２の暗比較器５２に属する構成に関して説明する。
Ａ／Ｄ変換後の画像データは、比較ブロック５２ａ及び暗データ記憶ブロック５２ｂに入力する。比較ブロック５２ａには暗データ記憶ブロック５２ｂからの出力信号も入力しており、すなわち比較ブロック５２ａでは、順次入力される画像データの明るさを示すデータを従前に入力されたデータと比較し、より暗い方を暗データ記憶ブロック５２ｂへ出力する。したがって、暗データ記憶ブロック５２ｂには、それまでに入力された中で最も暗いデータ（以下、これを暗データと称す。）が更新されながら記憶されることとなる。そして、加算ブロック５２ｃでは、余裕値記憶ブロック５５より出力された明余裕値を、この暗データ記憶ブロック５２ｂから出力される暗データに加算して明下限記憶ブロック５２ｄに出力する。したがって、明下限記憶ブロック５２ｄには、明下限値として、暗データに明余裕値を加算した値が更新されながら記憶されることとなる。なお、この明下限値とは、明暗判定の際に「明」と判定する下限の値を指し、それまでの入力データの内で最も暗いとされる暗データに所定の明余裕値を加算した値よりも小さな値となる範囲ではとても明とは認められない、という判定のために用いるものである。
【００５０】
次に、図２の明暗判定器５３に属する構成に関して説明する。
除算ブロック５３ａには明データ記憶ブロック５１ｂからの明データと暗データ記憶ブロック５２ｂからの暗データが入力しており、それらが加算した後に２で除されて、明データと暗データの中間の値が算出されることとなる。つまり、その時点までに入力されている明るさを示すデータの内、最も明るいデータと最も暗いデータの中間の値が算出されて中間値記憶ブロック５３ｂに記憶される。
【００５１】
また、明比較ブロック５３ｃ、暗比較ブロック５３ｄ及び中間比較ブロック５３ｅには、それぞれＡ／Ｄ変換後の画像データが入力している。そして、明比較ブロック５３ｃでは、その入力された画像データの明るさを明下限記憶ブロック５２ｄからの明下限値と比較し、その比較結果を明暗判定ブロック５３ｆに出力する。一方、暗比較ブロック５３ｄでは、その入力された画像データの明るさを暗上限記憶ブロック５１ｄからの暗上限値と比較し、その比較結果を明暗判定ブロック５３ｆに出力する。さらに、中間比較ブロック５３ｅでは、その入力された画像データの明るさを中間値記憶ブロック５３ｂからの中間値と比較し、その比較結果を明暗判定ブロック５３ｆに出力する。
【００５２】
この明暗判定ブロック５３ｆにおいては、次のような明暗判定を行う。すなわち、明であるか否かの判定には、明比較ブロック５３ｃにおける判定結果と中間比較ブロック５３ｅからの比較結果を用いて、入力値≧中間値、且つ入力値≧明下限値であれば明と判断する。一方、暗であるか否かの判定には、暗比較ブロック５３ｄにおける判定結果と中間比較ブロック５３ｅからの比較結果を用いて、入力値＜中間値、且つ入力値≦暗下限値であれば暗と判断する。明暗の判定ができた場合には、当然その判定結果を出力するが、上述した明暗の判定条件をいずれも満たさない場合には明暗判定ができないものとして、前回の判定結果を出力するようにされている。なお、例えば明であれば１、暗であれば０として出力する。
【００５３】
この明暗判定ブロック５３ｆでの判定結果は、図２に示す画像メモリ２０内の２次元画像メモリ２０ｃへ出力されると共に、直前値記憶回路５３ｇ及び比較ブロック５３ｈにも出力される。そして、比較ブロック５３ｈは、明暗判定ブロック５３ｆからの出力値を、直前値記憶回路５３ｇに記憶された直前値と比較し、変化している場合にのみカウンタ５４へ出力する。つまり、明暗が変化するとカウンタ５４へ出力されるのである。なお、カウンタ５４は、比較ブロック５３ｈからの出力に基づいて明暗が変化した数を計数し、その計数した明暗変化点数を、画像メモリ２０中の変化点数メモリ２０ｂへ出力する。
【００５４】
次に、図２のブロックアドレス制御回路５６に属する構成に関して説明する。
区域制御ブロック５６ｃは、アドレス発生回路１７（図１参照）からのアドレス制御信号に基づくと共に、主走査区分設定ブロック５６ａ及び副走査区分設定ブロック５６ｂからの設定に応じて区域制御を行う。詳しくは、設定された検査区域の主走査線上の区分点と副走査線上の区分点とから検査区域毎の変化点数の格納アドレスを制御し、カウンタ５４を制御する。なお、区域制御ブロック５６ｃからの区域制御信号は、画像メモリ２０中の変化点数メモリ２０ｂへも出力されている。
【００５５】
また、主走査区分設定ブロック５６ａ及び副走査区分設定ブロック５６ｂは、制御回路１０（図１参照）からのリードライト制御信号によって制御されている。なお、上述した暗上限記憶ブロック５１ｄ、明下限記憶ブロック５２ｄ、中間値記憶ブロック５３ｂ及び余裕値記憶ブロック５５も、このリードライト制御信号によって制御されている。
【００５６】
このような構成を備えた本実施例の情報コード読取装置１は、まず制御回路１０の指示により、ＣＣＤエリアセンサ１２にて２次元コードの２次元画像を検出する。ＣＣＤエリアセンサ１２は、２次元画像を検出すると、アナログ信号にて２次元画像データを出力する。ＣＣＤエリアセンサ１２から出力され増幅回路１３によって増幅された走査線信号はＡ／Ｄ変換回路１４によってディジタルデータに変換され、この１画像領域分のデータは画像メモリ２０中の画像データメモリ２０ａに一時記憶される。
【００５７】
具体的には、図４（ａ）に示すように、ＣＣＤエリアセンサ１２の左上の画素を開始点の画素Ｐ１とし、左から右へ移動すると共に、上から下へ移動するような順番で最終的には右下の画素が終了点の画素Ｐｎとなる。そして、図４（ｂ）に示すように、その順番（Ｐ１〜Ｐｎ）で画像データメモリ２０ａ内の所定のアドレスＡ（Ｐ１）〜Ａ（Ｐｎ）に格納される。なお、以下の説明においては、実際には画像データメモリ２０ａ内のデータを用いて処理するのであるが、視覚的に理解が容易となるように、図４（ａ）に対応するような２次元の画像領域を想定して進めることとする。
【００５８】
本実施例においては、画像データメモリ２０ａに一時記憶された１画像領域分のデータの全てを対象としてコード読取処理を行うのではなく、情報コードの概略存在領域を推定した後、情報コード読取処理を行う。そして、この情報コードの概略存在領域の推定に際しては、画像データメモリ２０ａ上における１画像領域を複数の検査区域に分割し、その分割された検査区域毎に、その区域内に含まれる画像データに基づいて明暗の変化点の数を計数して、その計数値に基づいて推定を行う。そこで、まず、この明暗変化点数の計数処理について、図を参照して説明する。
【００５９】
最初に検査区域について説明する。図５（ａ）に示すように、画像領域を水平方向へ走査するための主走査線及び垂直方向へ走査するための副走査線とそれぞれ平行な線によって区画される矩形の区域を検査区域とする。これは、ＣＣＤエリアセンサ１２においては主走査線及び副走査線方向にマトリックス状に画素が配列されているので、このように矩形領域に設定した方がデータが扱い易いからである。
【００６０】
なお、図５（ａ）においては、画像領域を横Ｇ個×縦Ｈ個の検査区域に分割し、各検査区域が横ａ画素×縦ｂ画素とされている。なお、図においてはＧ＝８，Ｈ＝１０，ａ＝ｂ＝８とされており、この想定では、画像領域のサイズが横８０×縦６４画素となってしまう。一般的に、６４０×４８０画素といったレベルの解像度のものが用いられるが、ここでは、図に基づく直感的理解を容易にするために、あえてこのような簡易モデルを用いることとする。
【００６１】
そして、このような設定の検査区域において、１セルが４×４画素の２次元コードの一部を図５（ｂ）に示すように捉えた場合を考える。明暗変化点は、各主走査線について計数するため、この場合は、８本の主走査線について、それぞれ、０，０，２，２，２，２，２，２となり、それらの累積値が１２となる。したがって、この検査区域の明暗変化点数は１２となる。このようにして、各検査区域の明暗変化点数を求めるのである。
【００６２】
次に、明暗変化点数をカウントするまでの処理内容について、図３の構成説明に際して概略を説明したが、さらに補足説明する。ＣＣＤエリアセンサ１２から出力される画素毎の画像データについて、それまでに検出された最も明るい画像データと最も暗いデータの中間値を明暗判定の基準値とする。例えば数字が大きくなるほど明るくなる画像データを「１〜１５」の範囲で考える。最初１５のデータが入ってくると、明データと暗データは共に１５であり、中間値も１５となる。その後、１５が続けて入ってきている間は変化なしであるが、例えば９が入ってくると、暗データが９に更新され、中間値は１２となる。さらに、１が入ってくると、暗データが１に更新され、中間値は８となる。これが収束値となる。したがって、その後は８を基準として明暗判定する。
【００６３】
また、明暗判定の基本は中間値との比較であるため、入力値≧中間値であれば明、入力値＜中間値であれば暗とするが、本実施例では、明暗判定の確実性を増すために不感帯を設けている。つまり、入力値≧中間値であっても、入力値が明下限値未満であれば明とは判定せず、同様に、入力値＜中間値であっても、入力値が暗上限よりも大きければ暗とは判定しない。つまり、入力値≧中間値、且つ入力値≧明下限値の場合にのみ明とし、入力値＜中間値、且つ入力値≦暗上限値の場合にのみ暗とする。これらの条件に合致しない場合には明暗判定はせず、上述したように前回の判定結果を援用する。
【００６４】
そのため、具体的には次のようになる。なお、ここでは暗上限値は最大値−５であるとし、明下限値は最小値＋５を想定し、中間値の計算においては小数点以下は切り上げている。また、明暗判定できない場合を×で示してある。
入力順番        ▲１▼    ▲２▼    ▲３▼    ▲４▼    ▲５▼    ▲６▼    ▲７▼    ▲８▼
入力値        １５，１５，  ８，  １，  １，  １，  ８，１５
最大値（明）  １５，１５，１５，１５，１５，１５，１５，１５
最小値（暗）  １５，１５，  ８，  １，  １，  １，  １，  １
中間値        １５，１５，１２，  ８，  ８，  ８，  ８，  ８
暗上限値      １０，１０，１０，１０，１０，１０，１０，１０
明下限値      ２０，２０，１３，  ６，  ６，  ６，  ６，  ６
明暗判定        ×    ×    暗    暗    暗    暗    明    明
この具体例においては、入力順番▲１▼，▲２▼における入力値が１５であるので、最大値、最小値及び中間値が共に１５になり、暗上限値は１０、明下限値は２０となる。入力値（１５）≧中間値（１５）であるため「明」の可能性があるが、入力値（１５）は明下限値（２０）以上ではないので、明とは判定されない。当然「暗」とは判定されないので、明暗判定不可能（×）とされる。
【００６５】
そして、入力順番▲３▼において入力値が８となると、最小値も８となり、中間値が１２となる。すると、入力値（８）＜中間値（１２）となり、且つ入力値（８）も暗上限値（１０）以下となるので、暗と判定される。入力順番▲１▼，▲２▼では明暗判定不可能（×）であったものが▲３▼で暗となったので、この場合には明暗変化があったものと考える。
【００６６】
続く▲４▼における入力値は１であるので、最小値も１となり、中間値が８となる。すると、入力値（１）＜中間値（８）となり、且つ入力値（１）も暗上限値（１０）以下であるので、暗と判定される。なお、この時点で最大値１５と最小値１が出現しているので、暗上限値１０及び明下限値６はこれ以降同じとなる。入力順番▲５▼，▲６▼でも同様である。
【００６７】
そして、入力順番▲７▼において入力値が８となると、入力値（８）≧中間値（８）となり、且つ入力値（８）も明下限値（６）以上となるので、明と判定される。入力順番▲６▼では暗と判定されていたものが▲７▼で明となったので、この場合には明暗変化があったものと考える。したがって、ここで示した例でいえば、明暗変化点数が２となる。
なお、入力順番▲３▼では入力値が８であるが暗と判定されていたが、それは取り得る最小値（１）がその時点で出現していなかったからである。上述したように、入力順番▲４▼までにおいて最大値１５と最小値１が出現して、暗上限値１０及び明下限値６はこれ以降同じとなるため、今後は、入力値が８以上であれば明と判定され、８未満であれば暗と判定されることとなる。
【００６８】
それではここで、各検査区域の明暗変化点数を求めるための処理を図６のフローチャートを参照して説明する。
最初のステップＳ１１０では、変数ｇ，ｈを共に初期値１に設定し、続くＳ１２０においては、Ｊ番目の走査線に沿ってＩ番目の画像データを検査して、変化点数を累積カウントする。
【００６９】
続いて、検査した画像データの位置を示すＩがａ×ｇであるか否かを判定する（Ｓ１３０）。これは、主走査線に沿って横方向にｇ検査区域分だけ検査したか否かを判定する処理であり、Ｉがａ×ｇとなっていなければ（Ｓ１３０：ＮＯ）、主走査線に沿ってｇ検査区域分を検査していないので、Ｓ１２０へ戻る。一方、Ｉがａ×ｇとなれば、主走査線に沿ってｇ検査区域分だけ検査したこととなるので（Ｓ１３０：ＹＥＳ）、Ｓ１４０へ移行する。
【００７０】
Ｓ１４０では、Ｓ１２０にて得た累積カウント値を（ｇ，ｈ）区域の明暗変化点数に加算して記憶する。そして、変数ｇをインクリメント（ｇ＝ｇ＋１）してから（Ｓ１５０）、変数ｇが検査区域の横方向の総数Ｇよりも大きいか否かを判定する（Ｓ１６０）。これは、１画像領域の横方向分だけ主走査線による検査をしたか否かを判定する処理であり、ｇ＞Ｇとなっていなければ（Ｓ１６０：ＮＯ）、Ｓ１２０へ戻る。一方、ｇ＞Ｇとなれば、１画像領域の横方向分だけ主走査線による検査をしたこととなるので（Ｓ１６０：ＹＥＳ）、Ｓ１７０へ移行する。
【００７１】
Ｓ１７０では、変数ｈが検査区域の縦方向の総数Ｈに一致したか否かを判定する。これは、１画像領域の縦方向分だけ主走査線による検査をしたか否かを判定する処理であり、ｈとＨが一致していなければ（Ｓ１７０：ＮＯ）、検査に用いている走査線が何番目のものであるかを示すＪがｂ×ｈであるか否かを判定する（Ｓ１８０）。これは、主走査線に沿った検査を縦方向にｈ検査区域分行ったか否かを判定する処理であり、Ｊがｂ×ｈとなっていなければ、まだ主走査線に沿った検査を縦方向にｈ検査区域分行っていないので（（Ｓ１８０：ＮＯ）、Ｓ１２０へ戻る。一方、Ｊがｂ×ｈとなれば、主走査線に沿った検査を縦方向にｈ検査区域分行ったこととなるので（Ｓ１８０：ＹＥＳ）、Ｓ１９０へ移行する。
【００７２】
Ｓ１９０で変数ｈをインクリメント（ｈ＝ｈ＋１）してから、Ｓ１２０へ戻る。このような処理を繰り返し、Ｓ１７０にて肯定判断となった場合には、１画像領域の縦方向分だけ主走査線による検査をした、つまり１画像領域の全てについて検査したこととなるので、本処理を終了する。
【００７３】
このような明暗変化点数の計数処理がなされると、各検査区域単位での明暗変化点数が得られる。その各検査区域における明暗変化点数の表の一例を図５（ｃ）に示す。細い線や小さな点は画素単位で明暗が分かれるので、明暗の「変化」は与えない。また、図柄などの大きな面積を持つ場合は、明暗変化点の数としては少なくなる。したがって、明暗変化点数が多い部分に情報コードが存在する可能性が高いと考えられる。
【００７４】
このような状況を踏まえ、各検査区域の明暗変化点数に基づいて、情報コードの概略存在領域を推定し、情報コードの読取を行う。この処理について、図７のフローチャートなどを参照して説明する。
図７の最初のステップＳ２１０では、各検査区域の変化点数を所定値と比較し、所定値以上の検査区域と所定値未満の検査区域の配列表を作成する。図８（ａ）には、その配列表の一例を示す。ここでは、理解を容易にするため、所定値を１として、明暗変化点数が１以上の検査区域と０の検査区域とに区別した（図８（ａ）では斜線の有無にて区別している）。なお、実際には、所定値が１であると、画像領域内のかなりの検査区域にて１以上となってしまうおそれがあるため、もう少し大きな値が好ましい。例えば、明暗変化点数の最大値と最小値の差分の３分の１を最小値に加えた値などが考えられる。例えば最大値が「１８」、最小値が「０」であれば、その差分「１８」の３分の１である「６」を最小値０に加えた値「６」を所定値とする、といった具合である。
【００７５】
図７のフローチャートの説明に戻り、続くＳ２２０では、明暗変化点数が所定値以上の検査区域が主走査線方向に連続しているか、副走査線方向に連続している検査区域群を求め、各検査区域群に含まれる検査区域数を求める。そして、Ｓ２３０において、所定条件に合致する検査区域群から順に、コード記録領域の第１候補、……第Ｎ候補とする。
【００７６】
本実施例では、所定条件として、まず第１に、検査区域群の少なくとも一部が画像領域中央の所定範囲（図８（ｂ）参照）内に存在するか否かという条件にて候補順位の高低を判定する。そして第２に、検査区域群中に含まれる検査区域数が多いほど候補順位を高くする。したがって、検査区域群の少なくとも一部が所定範囲内に含まれ、且つ検査区域群を構成する検査区域数が多いものが、ここでいう第１候補となる。
【００７７】
このように所定条件に基づいて候補順位を決定したのは次の理由からである。画像領域内には情報コード以外の画像も入り込むことがある。そこで、まず、対象となる情報コードが画像領域の中央付近に存在する可能性が高いことに鑑み、検査区域群の少なくとも一部が画像領域中央の所定範囲内に存在する検査区域群を、情報コードの概略的な存在領域である可能性が高いと推定することとした。これは、コード読取操作においては、画面のなるべく中央にコードが来るようにユーザが操作する可能性が高いことを考慮したものである。
【００７８】
そして、画像領域中央の所定範囲内に存在する場合はもちろん、存在しない場合についても、検査区域群のサイズに着目し、サイズが大きいほどコード存在領域である可能性が高いとすることにより、情報コードの存在領域であると考えられる範囲を優先して取り扱うことができる。例えば図柄などで大きな面積を持つ部分は明暗変化点数としては少なくなるので、抽出される検査区域群が大きくなることはない。一般的には、情報コードに対応する検査区域群が最大になると思われる。したがって、このような所定条件が、情報コードの概略的な存在領域としての可能性の高さを反映するものとして適切である。
【００７９】
図７に戻り、Ｓ２４０にて変数ｍを初期値１に設定した後、第ｍ候補の検査区域群を詳細に検査してコードの解読を行う（Ｓ２５０）。このＳ２５０におけるコード解読処理は、大きく分けると、コード領域検出処理とコード読取処理の２つになる。それらについて説明する。
【００８０】
ここでは、図８（ｃ）に示すように、情報コードとして矩形外周の隣接する２辺に実線パターンを有する２次元コード１０１が存在していると仮定する。この２次元コード１０１の場合には、一般的に、主走査線に平行な検査線を設定して検査していき、暗パターンを検出した場合には、その暗パターンを辿ることによってＬ字パターンの有無を検査する。つまり、図８（ｃ）で言えば、２次元コード１０１の外周の隣接する２辺に存在する実線パターンＬ１，Ｌ２の有無を検出するのである。具体的には、検査線によって実線パターンＬ１が検出された明暗変化点を基準とし、その明暗の境界線に沿って境界線の長さ、この場合であれば暗パターンの長さを調べる。そして、このように２次元コード１０１の１辺に相当する暗パターン（この場合には実線パターンＬ１）の存在が確認された場合には、その暗パターンの端部から折れ曲がって同様に暗部の長さを調べる。２次元コード１０１の他の１辺に相当する暗パターン（この場合には実線パターンＬ２）の存在を確認できれば、これにより「Ｌ字パターン」があることが判る。
【００８１】
このように検査線にて実線パターンＬ１，Ｌ２を検出する際、図８（ｃ）からも判るように、設定する検査線が検査区域群内においてのみ設定されている。つまり、画像領域全体に検査線が設定されるのではなく、検査区域群内においてのみ設定されるため、検査の無駄（つまり実線パターンを検出できない処理）が飛躍的に減少する。
【００８２】
このようにしてＬ字パターンが検出できれば、２次元コード１０１が存在する領域（コード領域）を計算する。この場合はＬ字パターンが正方形の２辺であることから、容易にコード領域を計算することができる。
そして、コード領域が計算できれば、その計算されたコード領域内の明暗パターンを解読し、記録されている情報を解読（デコード）する。
【００８３】
Ｓ２５０にてコードの解読ができた後は、正常に解読できたか否かを判定する（Ｓ２６０）。そして、正常に解読できた場合には（Ｓ２６０：ＹＥＳ）、画像メモリ２０内の図示しない出力データエリアに解読データをセットし（Ｓ２７０）、本処理を終了する。
【００８４】
一方、正常に解読できない場合には（Ｓ２６０：ＮＯ）、変数ｍをインクリメント（ｍ＝ｍ＋１）してから（Ｓ２８０）、変数ｍが検査区域群の最大候補数Ｎよりも大きいか否かを判定する（Ｓ２９０）。そして、ｍ≦Ｎであれば（Ｓ２９０：ＮＯ）、Ｓ２５０へ戻り、ｍ＞Ｎであれば（Ｓ２９０：ＹＥＳ）、Ｓ３００へ移行して解読失敗フラグをセットしてから、本処理を終了する。
【００８５】
なお、図６，７に示した処理内容と特許請求の範囲に記載した用語との対応を簡単に説明しておく。図６の処理及び図７中のＳ２１０〜Ｓ２３０の処理の実行が、情報コード概略存在領域推定方法としての処理の実行に相当する。そして、図７中のＳ２４０〜Ｓ３００の処理を加えることによって、情報コード読取方法としての処理の実行に相当する。
【００８６】
このように、本第１実施例においては、情報コードの概略存在領域の推定に際して、画像データメモリ上における１画像領域を分割した複数の検査区域毎に、その区域内に含まれる画像データに基づいて明暗の変化点の数を計数し、その計数された明暗変化点数に基づいて、情報コードが存在する可能性の高い検査区域を抽出し、その抽出された検査区域を、画像データメモリ上における情報コードの概略的な存在領域として推定する。
【００８７】
従来は、走査線に従って画像データメモリ領域内の画像データを１画素ごとに検査していく手法であったが、本実施例の場合には、複数画素を１まとめにした検査区域単位で概略的なコード存在領域を推定した後、その推定された領域内においてのみ従来通りの１画素毎の明暗パターンを検査するので、その検査範囲が小さくて済む。また、概略的なコード存在領域の推定にあっては、検査区域毎に計数した明暗変化点数の大小比較のみ、すなわち整数値の相対比較であるため、処理負荷は小さくて済む。したがって、概略的な存在領域を推定した後に情報コードの正確な位置を検出してデータ解読をする処理まで含めたコード読取処理に要する時間を短縮させることができる。
【００８８】
また、検査区域毎の明暗変化点数の計数に関しては、Ａ／Ｄ変換回路１４から画像データメモリ２０ａに出力されて記憶される処理と並行して実行している。情報コードを読み取る処理のためには、画像データメモリ２０ａへの記憶は必要であるため、この過程と並行して明暗変化点の計数処理を行えば、１画像領域分の画像データを記憶してから、その記憶された画像データを走査して明暗変化点を検出するのに比べて、処理時間の短縮が実現される。これは、コード読取全体に要する時間の短縮にも寄与する。
【００８９】
なお、本第１実施例においては、理解を容易にするため、図５に示すように、１の検査区域を横ａ画素×縦ｂ画素で構成し、図示する際には、１セルのサイズが４×４画素の場合に、検査区域を８×８画素で示した。この場合の検査区域のサイズに関しては種々の設定が考えられるが、基本的には、読取対象の情報コードにおける発現頻度が高いセルサイズとの兼ね合いで決定することが好ましい。つまり、細かく区画しすぎると、その区域内に含まれる変化点数が少なすぎて検出の信頼性が低下するし、逆に大きすぎると、特にコード周辺部において余分なデータが含まれて好ましくない状況も生じ易くなる。したがって、例えば、発現頻度が高いセルサイズが５×５画素の場合に、検査区域を１６×１６画素〜３２×３２画素程度にすることは、適当な設定であると考えられる。
【００９０】
［第２実施例］
本第２実施例の場合にも、上述した図１〜図３の情報コード読取装置１の概略構成はそのまま適用できるので、説明は繰り返さない。
上述した第１実施例においては、図５（ａ）に示すように、画像領域を横Ｇ個×縦Ｈ個の検査区域に分割し、各検査区域を横ａ画素×縦ｂ画素で構成したが、本第２実施例においては、検査区域を階層的に設定した。つまり、図９に示すように、画像領域を横Ｇ個×縦Ｈ個の大検査区域に分割し（図９（ａ）参照）、さらに、その各大検査区域を横Ｅ個×縦Ｆ個の小検査区域に分割し（図９（ｂ）参照）、各小検査区域を横ａ画素×縦ｂ画素で構成した（図９（ｃ）参照）。
【００９１】
この場合は２階層であるので、大検査区域が「上位検査区域」に相当し、小検査区域が「下位検査区域」に相当する。もちろん３階層以上でも構わないが、ここでは、理解を容易にするため図９に示すように２階層の場合で説明する。
明暗変化点の計数手法は基本的には第１実施例と同様に、主走査線に沿って画像データの明暗を判定し、その明暗が変化した場合に変化点数というカウントしていく。但し、本第２実施例の場合には、図９（ｄ）に示すような小検査区域単位での明暗変化点数の表と、図９（ｅ）に示すような大検査区域単位での明暗変化点数の表を作成する。
【００９２】
それではここで、各小検査区域及び各大検査区域単位での明暗変化点数を求めるための処理を、図１０，１１のフローチャートを参照して説明する。なお、以下の説明においては、適宜、小検査区域を「小区域」、大検査区域を「大区域」、明暗変化点数を「変化点数」と略記する。
【００９３】
最初のステップＳ３１０では、変数などの初期化を行う。具体的には、変数ｅ，ｆ，ｇ，ｈを共に初期値１に設定すると共に、累積カウント数、全小区域の変化点数、全大区域の変化点数を共に０に設定する。
続くＳ３２０では、Ｊ番目の走査線に沿ってＩ番目の画像データを検査して、変化点数を累積カウントする。
【００９４】
続いて、検査した画像データの位置を示すＩがａ×ｅであるか否かを判定する（Ｓ３３０）。これは、小区域の横方向の画素数がａであることから、主走査線に沿って横方向にｅ個の小区域分だけ検査したか否かを判定する処理であり、Ｉがａ×ｅとなっていなければ（Ｓ３３０：ＮＯ）、主走査線に沿ってｅ小区域分を検査していないので、Ｓ３２０へ戻る。一方、Ｉがａ×ｅとなれば、主走査線に沿ってｅ小区域分だけ検査したこととなるので（Ｓ３３０：ＹＥＳ）、Ｓ３４０へ移行する。
【００９５】
Ｓ３４０では、Ｓ３２０にて得た累積カウント値を（ｅ×ｇ，ｆ×ｈ）小区域の変化点数に加算して記憶する。そして、累積カウントを０とする。
続いて、検査に用いている走査線が何番目のものであるかを示すＪがｂ×ｆであるか否かを判定する（Ｓ３６０）。これは、主走査線に沿った検査を縦方向にｆ小区域分行ったか否かを判定する処理であり、Ｊがｂ×ｆとなっていなければ（Ｓ３６０：ＮＯ）、Ｓ３２０へ戻る。一方、Ｊがｂ×ｆとなれば、主走査線に沿った検査を縦方向にｅ小区域分行ったこととなるので（Ｓ３６０：ＹＥＳ）、Ｓ３７０へ移行する。
【００９６】
Ｓ３７０では、Ｓ３４０にて得た（ｅ×ｇ，ｆ×ｈ）小区域の変化点数を、（ｇ，ｆ）大区域の変化点数に加算して記憶する。
その後は、図９のＳ３８０へ移行して、変数ｅが、１の大区域を構成する小区域の横方向の総数Ｅに一致したか否かを判定する（Ｓ３８０）。これは、１の大区域の横方向分だけ主走査線による検査をしたか否かを判定する処理であり、ｅ＝Ｅとなっていなければ（Ｓ３８０：ＮＯ）、Ｓ３９０で変数ｅをインクリメント（ｅ＝ｅ＋１）してから、Ｓ３２０へ戻る。
【００９７】
一方、ｅ＝Ｅとなれば、１の大区域の横方向分だけ主走査線による検査をしたこととなるので（Ｓ３８０：ＹＥＳ）、Ｓ４００へ移行して、変数ｅを初期値１にセットする。
続くＳ４１０では、変数ｇが大区域の横方向の総数Ｇに一致したか否かを判定する。これは、１画像領域の横方向分だけ主走査線による検査をしたか否かを判定する処理であり、ｇ＝Ｇとなっていなければ（Ｓ４１０：ＮＯ）、Ｓ４２０で変数ｇをインクリメント（ｇ＝ｇ＋１）してから、Ｓ３２０へ戻る。
【００９８】
一方、ｇ＝Ｇとなれば、１画像領域の横方向分だけ主走査線による検査をしたこととなるので（Ｓ４１０：ＹＥＳ）、Ｓ４３０へ移行して、変数ｇを初期値１にセットする。
続くＳ４４０では、変数ｆが、１の大区域を構成する小区域の縦方向の総数Ｆに一致したか否かを判定する。これは、１の大区域の縦方向分だけ主走査線による検査をしたか否かを判定する処理であり、ｆ＝Ｆとなっていなければ（Ｓ４４０：ＮＯ）、Ｓ４５０で変数ｆをインクリメント（ｆ＝ｆ＋１）してから、Ｓ３２０へ戻る。
【００９９】
一方、ｆ＝Ｆとなれば、１の大区域の縦方向分だけ主走査線による検査をしたこととなるので（Ｓ４４０：ＹＥＳ）、Ｓ４６０へ移行して、変数ｆを初期値１にセットする。
続くＳ４７０では、変数ｈが大区域の縦方向の総数Ｈに一致したか否かを判定する。これは、１画像領域の縦方向分だけ主走査線による検査をしたか否かを判定する処理であり、ｈ＝Ｈとなっていなければ（Ｓ４７０：ＮＯ）、Ｓ４８０で変数ｈをインクリメント（ｈ＝ｈ＋１）してから、Ｓ３２０へ戻る。
【０１００】
一方、ｈ＝Ｈとなった場合には（Ｓ４７０：ＹＥＳ）、１画像領域の縦方向分だけ主走査線による検査をした、つまり１画像領域の全てについて検査したこととなるので、本処理を終了する。
このような変化点数の計数処理がなされると、図９（ｄ）に示す小区域単位での変化点数の表と、図９（ｅ）に示す大区域単位での変化点数の表が得られる。
【０１０１】
そして、これら２種類の変化点数表に基づいて、情報コードの概略存在領域を推定し、情報コードの読取を行う。この処理について、図１０のフローチャートなどを参照して説明する。
図１２の最初のステップＳ５１０では、各大区域の変化点数を所定値と比較し、所定値以上の大区域と所定値未満の大区域の配列表を作成する。上述した第１実施例における図８（ａ）の配列表例と同様に、図９（ｅ）の表を基に、所定値以上の区域と所定値未満の区域とが区別できるような配置列表が作成される。なお、この場合の所定値についても、上述した第１実施例の場合と同様の観点から設定される。例えば、大区域単位で見た場合の変化点数の最大値と最小値の差分の３分の１を最小値に加えた値などである。
【０１０２】
続くＳ５２０では、明暗変化点数が所定値以上の大区域が主走査線方向に連続しているか、副走査線方向に連続している大区域群を求め、各大区域群に含まれる大区域数を求める。
そして、５３０において、所定条件に合致する大区域群から順に、コード記録領域の第１候補、……第Ｎ候補とする。この所定条件は、上述した第１実施例と同じである。すなわち、まず第１に、大区域群の少なくとも一部が画像領域中央の所定範囲（図８（ｂ）参照）内に存在するか否かという条件にて候補順位の高低を判定する。そして第２に、大査区域群中に含まれる大区域数が多いほど候補順位を高くする。したがって、大区域群の少なくとも一部が所定範囲内に含まれ、且つ大区域群を構成する大区域数が多いものが、ここでいう第１候補となる。
【０１０３】
続くＳ５４０にて変数ｍを初期値１に設定した後、Ｓ５５０では、第ｍ候補の大区域群の周辺部の大区域に属する小区域の変化点数を所定値と比較し、所定値以上の小区域と所定値未満の小区域の配列表を作成する。例えば図１３に示すような大区域群が得られたとすると、この大区域群の「周辺部の大区域」とは、図１３にＢ１〜Ｂ１４で示す区域を指す。すなわち、この場合の大区域は矩形であるので、その少なくとも１辺が区域群外に面しているような大区域のみを意味することとなる。そして、図１３においては大区域Ｂ１〜Ｂ３についてのみ示しているが、大区域に属する小区域（図１３中では横４区域×縦４区域で示した）のそれぞれについて、所定値以上の小区域と所定値未満の小区域の配列表を作成するのである。なお、この場合の所定値についても、例えば、小区域単位で見た場合の変化点数の最大値と最小値の差分の３分の１を最小値に加えた値などが採用される。
【０１０４】
このようにして、第ｍ大区域群の周辺部の大区域に属する小区域についての配列表が作成されると、続くＳ５６０においては、第ｍ大区域群から、変化点数が所定値未満となった小区域を除外した領域を情報コードの概略存在領域と推定し、その推定領域を対象として詳細に検査し、情報コードの解読を行う。このコード解読処理については、上記第１実施例において図８（ｃ）を参照して説明した内容と同様である。すなわち、推定領域内に検査線を設定して検査していき、暗パターンを検出した場合には、その暗パターンを辿ることによって、図１３に示す２次元コード１０１の外周の隣接する２辺に存在する実線パターンＬ１，Ｌ２（Ｌ字パターン）の有無を検出する。
【０１０５】
このように検査線にて実線パターンＬ１，Ｌ２を検出する際、設定する検査線が推定領域内においてのみ設定される。本第２実施例においては、大区域単位で概略存在領域を推定した結果である大区域群から、さらに、その大区域群の周辺部の大区域に属する小区域の内で変化点数が所定値未満となった小区域を除外した領域を、情報コードの概略存在領域と推定している。したがって、より実際のコード存在領域に近い領域を推定できる。そのため、検査の無駄（つまり実線パターンを検出できない処理）が飛躍的に減少する。
【０１０６】
Ｌ字パターンが検出できれば、２次元コード１０１が存在する領域（コード領域）が計算される。そして、コード領域が計算できれば、その計算されたコード領域内の明暗パターンを解読し、記録されている情報を解読（デコード）する。
Ｓ５６０にてコード解読ができた後は、Ｓ５７０にて、正常に解読できたか否かを判定し、正常に解読できた場合には（Ｓ５７０：ＹＥＳ）、画像メモリ２０内の図示しない出力データエリアに解読データをセットし（Ｓ５８０）、本処理を終了する。
【０１０７】
一方、正常に解読できない場合には（Ｓ５７０：ＮＯ）、変数ｍをインクリメント（ｍ＝ｍ＋１）してから（Ｓ５９０）、変数ｍが大区域群の最大候補数Ｎよりも大きいか否かを判定する（Ｓ６００）。そして、ｍ≦Ｎであれば（Ｓ６００：ＮＯ）、Ｓ５５０へ戻り、ｍ＞Ｎであれば（Ｓ６００：ＹＥＳ）、Ｓ６１０へ移行して解読失敗フラグをセットしてから、本処理を終了する。
【０１０８】
なお、図１０〜１２に示した処理内容と特許請求の範囲に記載した用語との対応を簡単に説明しておく。図１０，１１の処理及び図１２中のＳ５１０〜Ｓ５６０の処理の実行が、情報コード概略存在領域推定方法としての処理の実行に相当する。なお、Ｓ５６０で実行される処理の内、「第ｍ大区域群から、変化点数が所定値未満となった小区域を除外した領域を情報コードの概略存在領域と推定する」処理までが、情報コード概略存在領域推定方法としての処理の実行に相当する。そして、図１２中のＳ５６０の処理中のコード解読処理及びＳ５７０〜Ｓ６１０の処理の実行が、情報コード読取方法としての処理の実行に相当する。
【０１０９】
このように、本第２実施例においては、まず、大区域毎に当該区域内に含まれる変化点数が所定値以上の区域を抽出し、その抽出された大区域同士が隣接して構成される大区域群の周辺部に位置する大区域について、その大区域内を構成する小区域毎にその小区域内に含まれる変化点数が所定値以上か所定値未満かを区別する。そして、抽出した大区域群から、所定値未満の小区域を除外した領域を、画像データメモリ上における情報コードの概略的な存在領域として推定する。
【０１１０】
抽出された大区域は、その区域内に情報コードが含まれる可能性が高いのであるが、情報コードの中央付近に該当する大区域では、区域内の全部に情報コードが存在するが、情報コードの周辺部に該当する大区域では、区域内の一部にしか情報コードが存在しない場合もある。そこで、抽出された大区域群の周辺部に位置する大区域については、小区域単位で、さらに変化点数による大小判定を行う。そして、（小区域用の）所定値未満とされた小区域を、抽出した大区域群から除外すれば、その領域は、情報コードの実際の存在領域により近い概略的存在領域となる。
【０１１１】
このようにすれば、最初から小さな検査区域を設定して、各検査区域毎に判定していく場合に比べて、処理効率が向上する。
なお、本第２実施例においては、図９に示すように、画像領域を横Ｇ個×縦Ｈ個の大検査区域に分割し、さらに、その各大検査区域を横Ｅ個×縦Ｆ個の小検査区域に分割し、各小検査区域を横ａ画素×縦ｂ画素で構成した。この場合の区域のサイズに関しては、種々の設定が考えられるが、この場合も、上述した第１実施例の場合と同様の考慮をすることが適切である。つまり、細かく区画しすぎると、その区域内に含まれる変化点数が少なすぎて検出の信頼性が低下するし、逆に大きすぎると、特にコード周辺部において余分なデータが含まれて好ましくない状況も生じ易くなるため、読取対象の情報コードにおける発現頻度が高いセルサイズとの兼ね合いで決定する。したがって、例えば発現頻度が高いセルサイズが５×５画素の場合に、小区域を１６×１６画素、大区域を６４×６４画素（あるいは１２８×１２８画素）にすることは、適当な設定であると考えられる。
【０１１２】
［第３実施例］
本第３実施例の場合には、上述した図１〜図３３にて説明した第１実施例の情報コード読取装置１の構成に、図１４に示す平均値算出回路７０を追加し、画像メモリ２０内に平均値記憶メモリ２０ｄを追加した点が異なるだけである。
【０１１３】
図１４に示すように、平均値算出回路７０は、積算ブロック７１及び除算ブロック７２を備えており、積算ブロック７１には、Ａ／Ｄ変換後の画像データ及びＣＣＤ読出クロックが入力している。なお、このＣＣＤ読出クロックは、図１における同期パルス発生回路１６から入力される。
【０１１４】
積算ブロック７１では、ディジタル値に変換された画像データをＣＣＤ読出クロックに同期して累積加算する。そして、除算ブロック７２では、この積算ブロック７１からの出力値を、１ブロックに含まれる画素数で割って平均値を算出する。この算出された平均値は、メモリ２０内の平均値記憶メモリ２０ｄへ出力される。
【０１１５】
図１５は、この平均値を算出・記憶するための処理を示すフローチャートである。
最初のステップＳ７１０で積算値をクリアした後、ＣＣＤ読出クロック毎に１画素分の画像データを積算する（Ｓ７２０）。そして、１ブロック分の画像データの積算が終了したか否かを判断し（Ｓ７３０）、１ブロック分の積算が終了していない場合には（Ｓ７３０：ＮＯ）、Ｓ７２０の処理を繰り返す。一方、１ブ１ブロック分の積算が終了した場合には（Ｓ７３０：ＹＥＳ）、その積算値を１ブロックの画素数で除算する（Ｓ７４０）。そして、当該ブロックの画像の平均値として当該ブロックに該当するアドレスに記憶する（Ｓ７５０）。その後、全ブロックの積算を終了したか否かを判断し（Ｓ７６０）。終了していなければ（Ｓ７６０：ＮＯ）、Ｓ７１０へ戻って積算値をクリアした後、Ｓ７２０〜Ｓ７５０の処理を繰り返す。
【０１１６】
上述した第１実施例においては、図７のＳ２３０にてコード記録領域の第１候補、……第Ｎ候補とする所定条件として、次の２条件を挙げていた。すなわち、検査区域群の少なくとも一部が画像領域中央の所定範囲（図８（ｂ）参照）内に存在するか否かという条件と、検査区域群中に含まれる検査区域数に基づく条件であった。本第３実施例においては、これら２条件に、上述の明暗度合いを示すデータの平均値に基づく条件を加える。具体的には、平均値が大きいブロックほど候補順位を高くする。
【０１１７】
具体的には、例えば明暗度合いを示すデータの平均値に基づいて、情報コードの存在する可能性の高い検査区域を概略的に抽出しておき、その中から、計数された明暗変化点数に基づいて抽出したり、あるいは、明暗変化点数と画像データの明暗度合いを示すデータの平均値という２つの判定指標に基づいてそれぞれ抽出した領域の重なる部分を、最終的に抽出する、といった種々の用い方が考えられる。
【０１１８】
なお、第２実施例の場合であっても同様に、図１２のＳ５３０において明暗度合いを示すデータの平均値も加味して判定を行えばよい。
［その他］
（１）上記各実施例では、検査区域（第２実施例における大区域及び小区域も含む）の形状を正方形としたが、長方形であっても同様に実現できる。また、画像領域の全てにおいて同じサイズの検査区域としたが、複数サイズの検査区域を混在させることを除くものではない。もちろん、サイズを統一した方が処理上の都合はよい。
【０１１９】
また、正方形や長方形などの矩形以外の形状に設定することも可能ではあるが、上述した処理上の都合の観点からは、やはり矩形が好ましい。
（２）上記各実施例では、明暗変化点として、明から暗への変化点と暗から明への変化点を共に明暗変化点としたが、これは、いずれかの一方のみに着目して処理してもよい。
【０１２０】
（３）上記各実施例では、図８（ｃ）あるいは図１３に示すように、対象のコードとして、隣接する２辺に実線パターンＬ１，Ｌ２を有する２次元コード１０１を例に挙げたが、それに限らず、例えば図１６（ａ）に示すバーコードや、図１６（ｂ）〜（ｅ）に示す２次元コードなど、種々のものが読取対象として採用可能である。
【０１２１】
また、当然であるが、図８（ｃ）あるいは図１３に示すように、隣接する２辺に実線パターンＬ１，Ｌ２を有する２次元コード１０１の場合であったため、検査線によってその実線パターンＬ１，Ｌ２を見つけるようにしたが、図１２に示すそれ以外の情報コードの場合であれば、それぞれに合致したコード存在領域の検出手法を採用すればよい。例えば図１６（ｃ）に示す２次元コードの場合であれば、４つの頂点の内の３つに配置されている、いわゆる「切り出しシンボル」を見つければ、コード存在領域を計算することができる。
【図面の簡単な説明】
【図１】実施例としての情報コード読取装置のブロック図である。
【図２】２値化回路の概略構成を示すブロック図である。
【図３】２値化回路の詳細構成を示すブロック図である。
【図４】画像と画像データアドレスとの対応関係を示す説明図である。
【図５】第１実施例における検査区域などの説明図である。
【図６】第１実施例における明暗変化点の計数処理を示すフローチャートである。
【図７】第１実施例における明暗変化点に基づくコード概略存在領域の推定及びコード読取処理を示すフローチャートである。
【図８】第１実施例における明暗変化点に基づくコード概略存在領域の推定及びコード読取処理を示す説明図である。
【図９】第２実施例における検査区域などの説明図である。
【図１０】第２実施例における明暗変化点の計数処理の前半を示すフローチャートである。
【図１１】第２実施例における明暗変化点の計数処理の後半を示すフローチャートである。
【図１２】第２実施例における明暗変化点に基づくコード概略存在領域の推定及びコード読取処理を示すフローチャートである。
【図１３】第２実施例における明暗変化点に基づくコード概略存在領域の推定処理を示す説明図である。
【図１４】第３実施例としての情報コード読取装置の内、第１実施例と異なる部分のみを示したブロック図である。
【図１５】第３実施例における平均値算出処理を示すフローチャートである。
【図１６】  情報コードとしての他の例を示しており、（ａ）はバーコード、（ｂ）〜（ｅ）は２次元コードの説明図である。
【符号の説明】
１…情報コード読取装置            １０…制御回路
１１…照明ＬＥＤ                    １２…ＣＣＤエリアセンサ
１３…増幅回路                      １４…Ａ／Ｄ変換回路
１６…同期パルス出力回路            １７…アドレス発生回路
２０…画像メモリ                  ２０ａ…画像データメモリ
２０ｂ…変化点数メモリ              ２０ｃ…２次元画像メモリ
２０ｄ…平均値記憶メモリ              ３１…スイッチ群
３２…液晶表示器                    ３３…通信Ｉ／Ｆ回路
５０…２値化回路                    ５１…明比較器
５１ａ…比較ブロック                ５１ｂ…明データ記憶ブロック
５１ｃ…減算ブロック                ５１ｄ…暗上限記憶ブロック
５２…暗比較器                    ５２ａ…比較ブロック
５２ｂ…暗データ記憶ブロック        ５２ｃ…加算ブロック
５２ｄ…明下限記憶ブロック            ５３…明暗判定器
５３ａ…除算ブロック                ５３ｂ…中間値記憶ブロック
５３ｃ…明比較ブロック              ５３ｄ…暗比較ブロック
５３ｅ…中間比較ブロック            ５３ｆ…明暗判定ブロック
５３ｇ…直前値記憶回路              ５３ｈ…比較ブロック
５４…カウンタ                        ５５…余裕値記憶ブロック
５６…ブロックアドレス制御回路      ５６ａ…主走査区分設定ブロック
５６ｂ…副走査区分設定ブロック      ５６ｃ…区域制御ブロック
７０…平均値算出回路                  ７１…積算ブロック
７２…除算ブロック                  １０１…２次元コード
Ｌ１，Ｌ２…実線パターン
【図１】
0004288756.tif 000002
【図２】
0004288756.tif 000003
【図３】
0004288756.tif 000004
【図４】
0004288756.tif 000005
【図５】
0004288756.tif 000006
【図６】
0004288756.tif 000007
【図７】
0004288756.tif 000008
【図８】
0004288756.tif 000009
【図９】
0004288756.tif 000010
【図１０】
0004288756.tif 000011
【図１１】
0004288756.tif 000012
【図１２】
0004288756.tif 000013
【図１３】
0004288756.tif 000014
【図１４】
0004288756.tif 000015
【図１５】
0004288756.tif 000016
【図１６】
0004288756.tif 000017