(57)【特許請求の範囲】
【請求項１】
２次元画像検出手段にて検出された２次元的な画像データを一時的に記憶した画像データメモリ上に、前記２次元画像検出手段における水平方向及び垂直方向にそれぞれ対応する画像データ検査線を設定し、
その設定された画像データ検査線に沿って画像データを走査することにより、前記画像データ中に含まれているバーコードの両端に存在するガードバーの内の一方を検出し、
その検出したガードバー上を起点とすると共に当該ガードバーに垂直な読取走査線を設定し、その設定された読取走査線に沿って所定の走査方向へ走査することにより、前記画像データ内に含まれているバーコードを読み取るバーコード読取方法であって、
前記一方のガードバー上の起点から前記読取走査線に沿って前記バーコードを走査した結果、その読取走査線が前記バーコードの他方のガードバーを貫かないで前記バーコードの存在領域外へ逸れてしまった場合には、その読取走査線を走査方向とは逆に辿って、その読取走査線に基づいて確実に認識されているバーの位置まで戻り、その確実に認識されているバー上を起点とすると共に当該バーに垂直な読取走査線を新たに設定する、という処理を、最終的に設定された読取走査線が前記他方のガードバーを貫くまで繰り返し行うことによって、前記バーコード全体を走査すること、
を特徴とするバーコード読取方法。
【請求項２】
２次元画像検出手段にて検出された２次元的な画像データを一時的に記憶した画像データメモリ上に、前記２次元画像検出手段における水平方向及び垂直方向にそれぞれ対応する画像データ検査線を設定し、
その設定された画像データ検査線に沿って画像データを走査することにより、前記画像データ中に含まれているバーコードの両端に存在するガードバーの内の一方を検出し、
その検出したガードバー上を起点とすると共に当該ガードバーに垂直な読取走査線を設定し、その設定された読取走査線に沿って所定の走査方向へ走査することにより、前記画像データ内に含まれているバーコードを読み取るバーコード読取方法であって、
前記一方のガードバー上の起点から前記読取走査線に沿って所定距離走査した時点あるいは所定数のバーを走査した時点で、直近のバー上を起点とすると共に当該バーに垂直な読取走査線を新たに設定する、という処理を、最終的に設定された読取走査線が前記他方のガードバーを貫くまで繰り返し行うことによって、前記バーコード全体を走査すること、
を特徴とするバーコード読取方法。
【請求項３】
請求項２記載のバーコード読取方法において、
前記所定数のバーは１であることを特徴とするバーコード読取方法。
【請求項４】
請求項１〜３のいずれか記載のバーコード読取方法において、
前記読取走査線の前記ガードバー上での起点として、前記画像データ検査線と前記ガードバーとの交点を設定し、
前記新たな読取走査線の前記確実に認識されているバーあるいは前記直近のバー上での起点として、前記直前に設定された読取走査線と前記確実に認識されているバーあるいは前記直近のバーとの交点を設定すること、
を特徴とするバーコード読取方法。
【請求項５】
請求項１〜３のいずれか記載のバーコード読取方法において、
前記読取走査線と前記ガードバーとの交点が、当該ガードバーの上下いずれかの端部付近である場合には、前記読取走査線の前記ガードバー上での起点として、前記画像データ検査線と前記ガードバーとの交点から前記端部付近であると判定された側の端部とは反対側へ所定量だけ移動した位置を設定し、
前記新たな読取走査線と前記確実に認識されているバーあるいは前記直近のバーとの交点が、当該確実に認識されているバーあるいは前記直近のバーの上下いずれかの端部付近である場合には、前記新たな読取走査線の前記確実に認識されているバーあるいは前記直近のバー上での起点として、前記直前に設定された読取走査線と前記確実に認識されているバーあるいは前記直近のバーとの交点から前記端部付近であると判定された側の端部とは反対側へ所定量だけ移動した位置を設定すること、
を特徴とするバーコード読取方法。
【請求項６】
請求項１〜３のいずれか記載のバーコード読取方法において、
前記読取走査線の前記ガードバー上での起点として、前記ガードバーの中央位置を設定し、
前記新たな読取走査線の前記確実に認識されているバーあるいは前記直近のバー上での起点として、前記確実に認識されているバーあるいは前記直近のバーの中央位置を設定すること、
を特徴とするバーコード読取方法。
【請求項７】
２次元画像検出手段にて検出された２次元的な画像データを一時的に記憶した画像データメモリ上に、前記２次元画像検出手段における水平方向及び垂直方向にそれぞれ対応する画像データ検査線を設定し、
その設定された画像データ検査線に沿って画像データを走査することにより、前記画像データ中に含まれているバーコードの両端に存在するガードバーの内の一方を検出し、
その検出したガードバーの中央位置を起点とすると共に当該ガードバーに垂直な読取走査線を設定し、その設定された読取走査線に沿って所定の走査方向へ走査することにより、前記画像データ内に含まれているバーコードを読み取るバーコード読取方法であって、
前記一方のガードバーの中央位置を起点とした前記読取走査線に沿って前記バーコードを走査した結果、その読取走査線が前記バーコードの他方のガードバーを貫かないで前記バーコードの存在領域外へ逸れてしまった場合には、その読取走査線を走査方向とは逆に辿って、その読取走査線に基づいて確実に認識されているバーの位置まで戻り、その確実に認識されているバーの中央位置と前記ガードバー上の起点とを結ぶ新たな読取走査線を設定する、という処理を、最終的に設定された読取走査線が前記他方のガードバーを貫くまで繰り返し行うことによって、前記バーコード全体を走査すること、
を特徴とするバーコード読取方法。
【請求項８】
請求項１〜７のいずれか記載のバーコード読取方法において、
前記水平方向及び垂直方向の画像データ検査線は、それぞれ複数本設定されていることを特徴とするバーコード読取方法。
【請求項９】
請求項８記載のバーコード読取方法において、
前記複数本の水平方向及び垂直方向の画像データ検査線は、前記２次元画像検出手段の画面中央付近に相当する範囲では相対的に密に設定されていることを特徴とするバーコード読取方法。
【請求項１０】
請求項８又は９記載のバーコード読取方法において、
前記複数本の水平方向及び垂直方向の画像データ検査線を用いる順番は、前記２次元画像検出手段の画面中央付近から外側へ向かう順番であることを特徴とするバーコード読取方法。
【請求項１１】
請求項８〜１０のいずれか記載のバーコード読取方法において、
前記水平方向及び垂直方向の内、いずれか一方の画像データ検査線を全て用いても検出できなかった場合には、他方の画像データ検査線を用いて検出することを特徴とするバーコード読取方法。
【請求項１２】
バーコードを２次元画像検出手段にて検出し、前記２次元画像検出手段にて検出したバーコードを含む１画像領域分の画像データを一時的に画像データメモリに記憶しておき、前記画像データメモリ上における１画像領域を複数の検査区域に分割し、その分割された検査区域毎に、その区域内に含まれる画像データに基づいて明暗の変化点の数を計数し、その計数された明暗変化点数に基づいてバーコードが存在する可能性の高い検査区域を抽出し、その抽出された検査区域を詳細検査対象領域として設定する詳細検査対象領域設定処理を行い、
その設定された詳細検査対象領域内に限定して請求項１〜１１のいずれか記載のバーコード読取方法を適用し、前記画像データ内に含まれているバーコードを読み取ること、
を特徴とするバーコード読取方法。
【請求項１３】
請求項１２記載のバーコード読取方法において、
前記検査区域は、前記画像領域を水平方向へ走査するための主走査線及び垂直方向へ走査するための副走査線とそれぞれ平行な線によって区画される矩形の区域であること、
を特徴とするバーコード読取方法。
【請求項１４】
請求項１２又は１３記載のバーコード読取方法において、
前記詳細検査対象領域設定処理によって設定された詳細検査対象領域を構成する検査区域毎に明暗パターンの特徴を調べて類型化し、最も多数の検査区域が属する類型を検出し、その検出された最頻類型に属する任意の検査区域内に存在するバー又はスペースの傾きを算出し、その算出されたバー又はスペースの傾きに直交する傾きを有する第１の検査線を設定し、
前記請求項１〜１１のいずれか記載のバーコード読取方法においては前記２次元画像検出手段における水平方向及び垂直方向にそれぞれ対応していた画像データ検査線に代えて、前記設定された第１の検査線を前記画像データ検査線として採用すること、
を特徴とするバーコード読取方法。
【請求項１５】
請求項１４記載のバーコード読取方法において、
前記画像データ検査線として採用する第１の検査線が、前記詳細検査対象領域の概略中心位置を通るように設定されていること、
を特徴とするバーコード読取方法。
【請求項１６】
請求項１４又は１５記載のバーコード読取方法において、
前記第１の検査線を前記画像データ検査線として採用した結果、バーコードを読み取れなかった場合には、前記第１の検査線と平行な第２の検査線を少なくとも１本設定し、その設定された第２の検査線を前記画像データ検査線として採用すること、
を特徴とするバーコード読取方法。
【請求項１７】
請求項１４又は１５記載のバーコード読取方法において、
前記第１の検査線を前記画像データ検査線として採用した結果、バーコードを読み取れなかった場合には、前記第１の検査線とは傾きが異なり、且つ前記詳細検査対象領域内において第１の検査線と交差する第２の検査線を少なくとも１本設定し、その設定された第２の検査線を前記画像データ検査線として採用すること、
を特徴とするバーコード読取方法。
【請求項１８】
請求項１７記載のバーコード読取方法において、
前記第２の検査線が前記第１の検査線と交差する点は、前記詳細検査対象領域の概略中心位置であること、
を特徴とするバーコード読取方法。
【請求項１９】
請求項１４〜１８のいずれか記載のバーコード読取方法において、
前記検査区域毎に明暗パターンの特徴を調べて類型化する際には、前記検査区域内の明暗変化点数が略同一であるものを同一の明暗パターンを有するものとして類型化すること、
を特徴とするバーコード読取方法。
【請求項２０】
請求項１４〜１８のいずれか記載のバーコード読取方法において、
前記検査区域毎に明暗パターンの特徴を調べて類型化する際には、前記検査区域内の縦横の明暗変化点数の比が略同一であるものを同一の明暗パターンを有するものとして類型化すること、
を特徴とするバーコード読取方法。
【請求項２１】
請求項１２〜２０のいずれか記載のバーコード読取方法において、
前記検査区域は、複数のサイズの中から選択可能であること、
を特徴とするバーコード読取方法。
【請求項２２】
請求項１〜２１のいずれか記載のバーコードの読取方法が、コンピュータシステムにて実行するプログラムとして記録されたことを特徴とする記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、商品の販売管理などに広く使用されているバーコードの読取方法などに関する。
【０００２】
【従来の技術】
従来、商品の販売管理などにバーコードが広く使用されているが、このバーコードには、図１６（Ａ）に示すように高さ及び幅が一般的なサイズのものに対し、図１６（Ｂ）に示すように高さが比較的高いものや、図１６（Ｃ）に示すように高さが比較的低いものなど様々である。このようなバーコードに対して１次元画像として読み取る場合には、図１７（Ａ）に示すように、読取ラインがバー／スペースに垂直な位置関係であることが望ましい。このような位置関係であれば、読取ラインが全てのバー／スペースを貫くこととなるからである。また、図１７（Ｂ）に示すように、バーコードが回転していたり位置がずれていても、ある程度までであれば読取可能である。但し、図１７（Ｃ）に示すように、バーコードの回転度合いや位置ずれ度合いが大きくなると、読取ラインが一部のバー／スペースしか貫かなくなるため、読取不可能となる。
【０００３】
そこで、バーコード全体を２次元画像として捉え、その２次元画像に基づいてバーコードの読み取りを行う手法が考えられている（図１８（Ａ）参照）。例えば特開平７−９３４５１号公報には１次元ＣＣＤセンサを移動させて２次元的に走査するものが開示され、特開平１０−１９８７５４号公報には２次元ＣＣＤセンサで２次元的に走査するものが開示されている。
【０００４】
特開平１０−１９８７５４号公報に記載のものは、２次元画像の横方向に主検査線、縦方向に副検査線をそれぞれ複数本設定するものであるが、少なくとも１本の主検査線あるいは副検査線がバーコードを貫いていないと読取は不可能であり、やはり、バーコードの回転に対しては回転程度が大きくなると読取ができなくなる。
【０００５】
一方、特開平７−９３４５１号公報に記載のものは、２次元画像中のバーコードの傾き角度を計算し、バーコードの傾きに応じて読取ラインを傾けて設定するようにしている（図１８（Ｂ）参照）。具体的には、バーコードの端部のバーの傾き角度を計算し、そのバーと垂直な角度に読取走査線を設定するのである。このようにすれば、２次元画像中のバーコードが形状自体は変わらず単に回転するだけであれば、理論上、バーコードがどのように回転していても読み取ることができると言える。また、図１８（Ｃ）に示すように、バーコードの一部が画像領域からはみ出していても、読取走査線が設定できれば、バーコードの読取は可能となる。
【０００６】
【発明が解決しようとする課題】
しかしながら、このような手法によって読取が可能である状態には限界がある。例えば、図１９（Ａ）に示すように、読取装置がバーコードを正面から捉えている場合には、図１９（イ）に示すようにバーコードの画像自体に歪みがなく、読取は可能である。これに対して、図１９（Ｂ）に示すように、読取装置がバーコードに対して後方に傾いている場合には、図１９（ロ）に示すようにバーコードの画像自体に歪みが生じる。つまり、前方側を上底、後方側を下底とする略台形形状となる。この場合には、歪み度合いが小さければ読取走査線を上手く設定すれば読取は可能であるが、歪み度合いが大きくなると、読取走査線がバーコード全体を貫かなくなる可能性が出てくる。また、図１９（Ｃ）に示すように、読取装置がバーコードに対して左方に傾いている場合には、図１９（ハ）に示すようにバーコードの画像自体に歪みが生じる。つまり、右方側を上底、左方側を下底とする略台形形状となる。この場合には、読取走査線を上手く設定すればバーコード全体を貫くこととなり、読み取れる可能性は高い。
【０００７】
そして、図１９（Ｂ）のように読取装置がバーコードに対して後方に傾くと共に、図１９（Ｃ）に示すように読取装置がバーコードに対して左方に傾く状態が重なると、元々長方形であったバーコードの画像は、図１９（ニ）に示すように平行な辺がない四辺形となる。この状況では、図１９（ロ）に示す状態よりも、さらに読取走査線がバーコード全体を貫かなくなる可能性が高くなる。つまり、読取装置とバーコードとの相対的な位置関係によって、取り込んだバーコード画像の歪み度合いが大きくなると、従来の手法では読取ができなくなってくる。
【０００８】
読取装置の使用に際しては、このようなバーコード読取の際の制約条件が極力少ない方が好ましい。つまり、２次元画像内においてバーコードがどのように回転していても読み取れることは当然とし、上述したように読取装置とバーコードとの相対的な位置関係によって、取り込んだバーコード画像が歪んでいても読み取れることが希求される。
【０００９】
そこで、本発明は、取り込んだバーコード画像が歪んでいても、適切に読み取ることができるようにすることを目的とする。
【００１０】
【課題を解決するための手段及び発明の効果】
請求項１記載のバーコードの読取方法は、２次元画像検出手段にて検出された２次元的な画像データを一時的に記憶した画像データメモリ上に、２次元画像検出手段における水平方向及び垂直方向にそれぞれ対応する画像データ検査線を設定し、その設定された画像データ検査線に沿って画像データを走査することにより、画像データ中に含まれているバーコードの両端に存在するガードバーの内の一方を検出する。そして、その検出したガードバー上を起点とすると共に当該ガードバーに垂直な読取走査線を設定し、その設定された読取走査線に沿って所定の走査方向へ走査することにより、画像データ内に含まれているバーコードを読み取ることを前提とする。
【００１１】
画像データ検査線は水平方向及び垂直方向の２方向に設定されているため、例えば２次元画像中においてバーコードが水平方向に近い角度で存在すれば、水平方向の画像データ検査線を用いることでガードバーを適切に検出できる。そして、傾く角度が大きくなると、水平方向の画像データ検査線とガードバーとの交差角度が小さくなり、適切にガードバーを検出できなくなる可能性が高いため、その場合には、垂直方向の画像データ検査線を用いれば適切に検出できる。このように、バーコードがどのように回転していても、水平方向及び垂直方向のいずれかを用いればガードバーの検出はできる。
【００１２】
但し、一方のガードバー上の起点から読取走査線に沿ってバーコードを走査した結果、その読取走査線がバーコードの他方のガードバーを貫かないでバーコードの存在領域外へ逸れてしまう場合も考えられる。例えば、図１９（Ｂ）のように読取装置がバーコードに対して後方に傾き、図１９（ロ）に示すようにバーコード画像が略台形形状に歪んだ場合、あるいは後方に傾くと共に図１９（Ｃ）に示すように読取装置がバーコードに対して左方に傾く状態が重なって、図１９（ニ）に示すように平行な辺がない四辺形となった場合には、読取走査線がバーコードの他方のガードバーを貫かないでバーコードの存在領域外へ逸れてしまう可能性が高い。この状況では、バーコード端部のガードバーに垂直な読取走査線を設定するだけでは、その読取走査線がバーコード全体を貫かなくなる可能性がある。
【００１３】
しかし本発明方法によれば、そのような場合であっても、バーコード全体を走査することができる。つまり、読取走査線がバーコードの存在領域外へ逸れてしまった場合には、その読取走査線を走査方向とは逆に辿って、その読取走査線に基づいて確実に認識されているバーの位置まで戻り、その確実に認識されているバー上を起点とすると共に当該バーに垂直な読取走査線を新たに設定する（図７参照）、という処理を、最終的に設定された読取走査線が他方のガードバーを貫くまで繰り返し行うからである。なお、図７に例示した状態では、読取走査線を１回だけ新たに設定するだけで対処できたが、当然ながら、その新たに設定した読取走査線がバーコードの存在領域から外れれば、読取走査線を再度設定することとなる。
【００１４】
読取装置の使用に際しては、バーコード読取の際の制約条件が極力少ない方が好ましいのであるが、本発明方法によれば、２次元画像内においてバーコードがどのように回転していても読み取れることは当然であり、さらに読取装置とバーコードとの相対的な位置関係によって、取り込んだバーコード画像が歪んでいても適切にバーコードを読み取ることができる。
【００１５】
また、請求項２に示す読取方法であっても同様に、取り込んだバーコード画像が歪んでいても適切にバーコードを読み取ることができる。上述した請求項１の場合には、設定した読取走査線がバーコードの他方のガードバーを貫かないでバーコードの存在領域外へ逸れてしまった場合に、新たな走査線を設定する手法であったが（図７参照）、この請求項２の読取方法の場合には、次のようにして読取走査線を設定する。すなわち、一方のガードバー上の起点から読取走査線に沿って所定距離走査した時点あるいは所定数のバーを走査した時点で、直近のバー上を起点とすると共に当該バーに垂直な読取走査線を新たに設定する、という処理を、最終的に設定された読取走査線が他方のガードバーを貫くまで繰り返し行うのである（図９参照）。なお、図９の場合には最初の読取走査線に加えて新たな読取走査線を２回設定することでバーコード全体を貫くこととなったが、バーコードの大きさと新たな読取走査線を設定する条件とに応じて変わってくる。
【００１６】
この新たな読取走査線を設定する条件は、所定距離走査した時点あるいは所定数のバー及びスペースを走査した時点であるが、例えば請求項３に示すように、所定数のバーを１とすれば、順次設定した読取走査線によって確実にバーコード全体を貫くこととなる。
【００１７】
なお、当然であるが、請求項３のように「新たな読取走査線を設定する条件を厳しく」した場合には、読取走査線の再設定処理が多くなるので、処理負荷は増える。所定距離を短くした場合も同様である。また、請求項１の手法と比較しても同様であり、本請求項２の手法の方が、読取走査線の再設定処理が多くなる。但し、バーコード全体を貫く読取走査線の設定という観点からすれば、その確実性は相対的に高いと言える。
【００１８】
また、上述したバーコード読取方法において読取走査線の起点を設定する場合には、次の点を工夫することができる。
まず、請求項４に示すように、読取走査線のガードバー上での起点として、画像データ検査線とガードバーとの交点を設定したり、あるいは、新たな読取走査線の確実に認識されているバーあるいは直近のバー上での起点として、直前に設定された読取走査線と確実に認識されているバーあるいは直近のバーとの交点を設定することが考えられる。
【００１９】
但し、例えば画像データ検査線とガードバーとの交点がガードバーの上下いずれかの端部付近である場合には、ガードバーと垂直な方向への読取走査線を設定する際に不都合が生じる場合が想定される。例えばその交点付近のガードバーの配置状態を見て傾きを把握しようとした場合、端部であるため上手くいかないことも考えられる。また、ガードバーの端部付近を起点とした読取走査線の場合には、歪んだバーコードに対して早期にバーコードの存在領域外へ逸れてしまう可能性が高くなることも想定される。
【００２０】
そこで、請求項５に示すように、読取走査線のガードバー上での起点として、画像データ検査線とガードバーとの交点から、端部付近であると判定された側の端部とは反対側へ所定量だけ移動した位置を設定することが好ましい。同様に、新たな読取走査線と確実に認識されているバーあるいは直近のバーとの交点が、当該確実に認識されているバーあるいは直近のバーの上下いずれかの端部付近である場合には、新たな読取走査線の確実に認識されているバーあるいは直近のバー上での起点として、直前に設定された読取走査線と確実に認識されているバーあるいは直近のバーとの交点から端部付近であると判定された側の端部とは反対側へ所定量だけ移動した位置を設定することが好ましい。
【００２１】
あるいは、同様の観点から、請求項６に示すように、読取走査線のガードバー上での起点として、ガードバーの中央位置を設定したり、新たな読取走査線の確実に認識されているバーあるいは直近のバー上での起点として、確実に認識されているバーあるいは直近のバーの中央位置を設定することも好ましい。
【００２２】
ところで、これまで説明したバーコード読取方法においては、読取走査線をガードバーと垂直に設定し、その読取走査線がバーコードの他方のガードバーを貫かないでバーコードの存在領域外へ逸れてしまった場合には、その読取走査線を走査方向とは逆に辿って、その読取走査線に基づいて確実に認識されているバーに垂直な読取走査線を新たに設定することを基本としていた。つまり、バーに垂直な読取走査線を設定することで、バーコードの歪みに対処するようにした。
【００２３】
しかし、必ずしもバーに垂直な読取走査線を設定するという技術思想ではなく、請求項７に示すような設定手法も採用できる。すなわち、まず、一方のガードバーの中央位置を起点とした読取走査線を設定する。そして、その読取走査線に沿ってバーコードを走査した結果、その読取走査線がバーコードの他方のガードバーを貫かないでバーコードの存在領域外へ逸れてしまった場合には、その読取走査線を走査方向とは逆に辿って、その読取走査線に基づいて確実に認識されているバーの位置まで戻り、その確実に認識されているバーの中央位置とガードバー上の起点（つまり中央位置）とを結ぶ新たな読取走査線を設定する、という処理を、最終的に設定された読取走査線が他方のガードバーを貫くまで繰り返し行うのである。この場合には、バーの中央位置同士を結ぶ読取走査線を設定していくことにより、やはりバーコードの歪みに対処することができる。
【００２４】
一方、上述したバーコード読取方法においては、水平方向及び垂直方向の画像データ検査線に沿って画像データを走査することにより、画像データ中に含まれているバーコードの両端に存在するガードバーの内の一方を検出することを前提としていたが、請求項８に示すように、この水平方向及び垂直方向の画像データ検査線は、それぞれ複数本設定することが好ましい。こうすれば、ガードバーをより検出し易くなるからである。
【００２５】
もちろん、画像データ検査線の間隔を非常に細かく設定すれば、確実にガードバーを設定することはできるが、処理負荷は大きくなる。そこで、複数本設定することを前提としながら、請求項９に示すように、２次元画像検出手段の画面中央付近に相当する範囲では相対的に密に設定することが考えられる。２次元画像検出手段の画面中央付近にバーコードの画像が存在する可能性が高いため、このようにすれば、全体としては画像データ検査線の数を過度に多くせずに済む。
【００２６】
また、２次元画像検出手段の画面中央付近にバーコードの画像が存在する可能性が高いという着目点からずれば、請求項１０に示すように、複数本の水平方向及び垂直方向の画像データ検査線を用いる順番は、２次元画像検出手段の画面中央付近から外側へ向かう順番とすることが好ましい。このようにすれば、早期にガードバーを検出できることとなる。
【００２７】
なお、水平方向及び垂直方向の画像データ検査線の用い方としては、請求項１１に示すように、いずれか一方の画像データ検査線を全て用いても検出できなかった場合に他方の画像データ検査線を用いて検出することが考えられる。例えば２次元画像中においてバーコードが水平方向に近い角度で存在する可能性が高いことを前提とするならば、最初に水平方向の画像データ検査線を用いることが好ましい。水平方向から多少傾いていても、水平方向の画像データ検査線のいずれかによってガードバーが検出されるからである。そして、傾く角度が大きくなって水平方向の画像データ検査線では適切にガードバーを検出できなくなった場合には、垂直方向の画像データ検査線を用いればよい。もちろん、２次元画像中においてバーコードが垂直方向に近い角度で存在する可能性が高ければ、最初に垂直方向の画像データ検査線を用いればよい。
【００２８】
また、画像データ検査線に沿って走査する対象となる画像データに関しては、画像データメモリ上における１画像領域全てを対象としてもよいが、請求項１２に示すように、予めバーコードが存在する可能性の高いと考えられる詳細検査対象領域を設定し、その領域内に限ってガードバーを見つける処理を行っても良い。具体的には、画像データメモリ上における１画像領域を複数の検査区域に分割し、その分割された検査区域毎に、その区域内に含まれる画像データに基づいて明暗の変化点の数を計数する。そして、その計数された明暗変化点数に基づいてバーコードが存在する可能性の高い検査区域を抽出し、その抽出された検査区域を詳細検査対象領域として設定するのである。
【００２９】
この詳細検査対象領域設定処理にて設定された詳細検査対象領域内に限定し、上述の請求項１〜１１のいずれか記載のバーコード読取方法を適用し、画像データ内に含まれているバーコードを読み取れば、全体として処理効率が向上する。つまり、複数画素を１まとめにした検査区域単位で、コードが存在する可能性の高い領域を詳細検査対象領域として推定し、その後、その推定された領域内においてのみ従来通りの１画素毎の明暗パターンを検査するので、その検査範囲が小さくて済む。また、詳細検査対象領域の推定にあっては、検査区域毎に計数した明暗変化点数の大小比較のみ、すなわち整数値の相対比較であるため、処理負荷は小さくて済む。したがって、概略的な存在領域を推定した後にバーコードの正確な位置を検出してデータ解読をする処理まで含めたコード読取処理に要する時間を短縮させることができる。
【００３０】
なお、検査区域に関しては、特にその形状が限定されるものではないが、処理効率を考慮すると、請求項１３に示すように設定することが好ましい。すなわち、画像領域を水平方向へ走査するための主走査線及び垂直方向へ走査するための副走査線とそれぞれ平行な線によって区画される矩形の区域を検査区域とするのである。２次元画像検出手段（例えばＣＣＤエリアセンサ）においては主走査線及び副走査線方向にマトリックス状に画素が配列されているので、このように矩形領域に設定した方がデータが扱いやすい。
【００３１】
また、このように詳細検査対象領域を設定した後のガードバーを検出する手法について、請求項１４に示すような工夫をしてもよい。請求項１〜１１のいずれか記載のバーコード読取方法においては２次元画像検出手段における水平方向及び垂直方向にそれぞれ対応していた画像データ検査線を用いてガードバーを検出していたが、そのような画像データ検査線に代えて、次に示すような第１の検査線を画像データ検査線として採用する。つまり、詳細検査対象領域設定処理によって設定された詳細検査対象領域を構成する検査区域毎に明暗パターンの特徴を調べて類型化し、最も多数の検査区域が属する類型を検出する。そして、その検出された最頻類型に属する任意の検査区域内に存在するバー又はスペースの傾きを算出し、その算出されたバー又はスペースの傾きに直交する傾きを有する第１の検査線を設定するのである。
【００３２】
このように設定された第１の検査線は、当該検査線自体を設定する際に、読み取ろうとしているバーコードのバー又はスペースの傾きと直交するようにしてあるため、この第１の検査線を画像データ検査線として用いれば、ガードバーを検出できる可能性が高くなる。つまり、請求項１で示した水平方向及び垂直方向の画像データ検査線を設定する理由は、画像データ中においてバーコードがどのように傾いているかが判らないため、どのように傾いていても対応できるように考慮したためである。
【００３３】
それに対して第１の検査線の場合には、バー又はスペースの傾きと直交、つまりバーコードの傾きを反映した検査線を設定できるため、より処理効率が向上する。つまり、水平方向及び垂直方向の画像データ検査線を設定する場合には、水平方向の検査線でしか見つけられないようにバーコードが傾いていると、垂直方向の検査線で見つけようとする処理が結果的には無駄となってしまうが、この第１の検査線を用いる場合にはそのような無駄がない。
【００３４】
なお、請求項１５に示すように、画像データ検査線として採用する第１の検査線が、詳細検査対象領域の概略中心位置を通るように設定すれば、より処理効率アップが期待できる。必ずしも、詳細検査対象領域の中心にバーコードが存在しているとは限らないが、確率的には、詳細検査対象領域の中心にバーコードが存在している可能性が高いため、このような第１の検査線によってガードバーを検出できる可能性が高くなる。
【００３５】
また、詳細検査対象領域の概略中心位置を通る場合、通らない場合共に、第１の検査線を画像データ検査線として採用した結果、バーコードを読み取れない場合も生じうる。その場合の対処としては、次のようにして設定した第２の検査線を用いてガードバーの検出を行うことが考えられる。
【００３６】
請求項１６に示す場合には、第１の検査線と平行な第２の検査線を少なくとも１本設定し、その設定された第２の検査線を画像データ検査線として採用する。また、請求項１７に示す場合には、第１の検査線とは傾きが異なり、且つ詳細検査対象領域内において第１の検査線と交差する第２の検査線を少なくとも１本設定し、その設定された第２の検査線を前記画像データ検査線として採用する。これらのいずれも、２本以上の第２の検査線を設定した場合には、例えば第１の検査線に近いものから順番に採用して順次ガードバーの検出を行えばよい。
【００３７】
なお、第１の検査線とは傾きが異なり、且つ詳細検査対象領域内において第１の検査線と交差するような第２の検査線を設定する際には、請求項１８に示すように、第２の検査線が第１の検査線と交差する点を、詳細検査対象領域の概略中心位置とすることが考えられる。
【００３８】
ところで、上述した請求項１４〜１８においては、詳細検査対象領域を構成する検査区域毎に明暗パターンの特徴を調べて類型化していたが、この類型化する際には、例えば請求項１９に示すように、検査区域内の明暗変化点数が略同一であるものを同一の明暗パターンを有するものとして類型化することが考えられる。また、請求項２０に示すように、検査区域内の縦横の明暗変化点数の比が略同一であるものを同一の明暗パターンを有するものとして類型化してもよい。
【００３９】
これらはバーコードの性質に基づいている。つまり、バーコードの場合には、バー又はスペースの太さに差異はあるものの、ある程度の本数が検査区域内に含まれれば、概略の明暗変化点数は近いものとなると考えられる。特に、文字などが含まれる検査区域の場合の明暗変化点数と比べれば、かなり明確な違いとなって現れると考えられるため、明暗変変化点の総数に基づくことは適切である。
【００４０】
また、バーコードの場合には、バー又はスペースが直線であるため、バー又はスペースの端部が含まれなければ、縦の明暗変化点数と横の明暗変化点数の比はやはり同じ様な値になる可能性が高い。特に、文字などが含まれる検査区域の場合の明暗変化点数の比と比べれば、総数の場合よりさらに明確に区別できると考えられる。したがって、この比に基づく類型化も非常に有効である。さらに、この縦横の明暗変化点数比を用いる場合には、次のような利点もある。つまり、第１の検査線は、「バー又はスペースの傾きθ」に直交するような傾きを持つように設定する必要がある。ここで、検査区域が矩形の場合には、その縦横の明暗変化点数の比はｔａｎθであると近似しても特に問題がない。そのため、類型化する処理中で、その後の第１検査線の傾きを設定するために必要な「バー又はスペースの傾きθ」も同時に得ることができるため、別個、傾き算出処理をしなくてもよくなる。
【００４１】
なお、以上の説明でも判るように、明暗変化点数あるいはその比で類型化する場合には、ある程度の本数のバー又はスペースが検査区域内に含まれている必要がある。例えば、バー又はスペースの幅が検査区域の幅よりも大きければ、明暗変化点数が１となり、また明暗変化点数の比も１となることが考えられ、その場合には適切な類型化が難しくなるからである。そのため、請求項２１に示すように、検査区域については、複数のサイズの中から選択可能にしておくことが好ましい。この複数のサイズについては、実際に使用される可能性の高いバーコードの種類などを考慮して設定する。また、選択については、利用者がマニュアルで切り替えて選択してもよいし、自動的に選択できるようにしてもよい。自動的に選択する場合には、例えばあるサイズで処理を実行して適切に読み取れなかった場合には次のサイズに切り替えて再度処理を実行する、といった手法が考えられる。
【００４２】
なお、このようなバーコードの読取方法を実行する機能は、例えば、デジタル回路やコンピュータシステム側で起動するプログラムとして備えられる。プログラムで実現する場合、例えば、フロッピーディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ハードディスク等の機械読み取り可能な記録媒体に記憶し、必要に応じてコンピュータシステムにロードして起動することにより用いることができる。この他、ＲＯＭやバックアップＲＡＭを機械読み取り可能な記録媒体として前記プログラムを記憶しておき、このＲＯＭあるいはバックアップＲＡＭをコンピュータシステムに組み込んで用いても良い。
【００４３】
【発明の実施の形態】
以下に、本発明の好適な実施例を図面に基づいて説明する。尚、本発明の実施の形態は、下記の実施例に何ら限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採り得ることはいうまでもない。
【００４４】
［第１実施例］
図１は上述した発明が適用された実施例としてのバーコード読取装置１のブロック図を示す。本実施例のバーコード読取装置１は、カメラ部制御装置１０とシステム制御装置３０の２つの制御装置を備えており、それぞれで分担して制御を行っている。
【００４５】
まず、カメラ部制御装置１０側に関連する構成としては、ＣＣＤエリアセンサ１１と、ＡＧＣアンプ１２と、ローパスフィルタ（ＬＰＦ）１３と、基準電圧生成部１４と、負帰還アンプ１５と、補助アンプ１６と、２値化回路１７と、周波数分析器１８と、Ａ／Ｄ変換器１９と、画像メモリ２０と、画像メモリコントローラ２１と、メモリ２２と、照明発光ダイオード（照明ＬＥＤ）３０などが挙げられる。
【００４６】
ＣＣＤエリアセンサ１１は、２次元的に配列された複数の受光素子であるＣＣＤを有しており、外界を撮像してその２次元画像を水平方向の走査線信号として出力する。この走査線信号はＡＧＣアンプ１２によって増幅されて補助アンプ１６及びＡ／Ｄ変換器１９に出力される。
【００４７】
ＡＧＣアンプ１２は、外部から入力したゲインコントロール電圧に対応する増幅率で、ＣＣＤエリアセンサ１１から出力された走査線信号を増幅するのであるが、このゲインコントロール電圧は負帰還アンプ１５から出力される。この負帰還アンプ１５には、ＡＧＣアンプ１２から出力される走査線信号をローパスフィルタ１３で積分して得た出力平均電圧Ｖavと、基準電圧生成部１４からの基準電圧Ｖstとが入力されており、これらの電圧差△Ｖに所定ゲインを掛けたものがゲインコントロール電圧として出力される。
【００４８】
補助アンプ１６は、ＡＧＣアンプ１２によって増幅された走査線信号を増幅して２値化回路１７に出力する。この２値化回路１７は、上記走査線信号を、閾値に基づいて２値化して周波数分析器１８に出力する。周波数分析器１８は、２値化された走査線信号の内から所定の周波数成分比を検出し、その検出結果は画像メモリコントローラ２１に出力される。
【００４９】
一方、Ａ／Ｄ変換器１９は、ＡＧＣアンプ１２によって増幅されたアナログの走査線信号をディジタル信号に変換して、画像メモリコントローラ２１に出力する。
画像メモリコントローラ２１は、アドレスバス及びデータバスによって画像メモリ２０と接続されていると共に、やはりアドレスバス及びデータバスによってカメラ部制御装置１０及びメモリ２２と接続されている。
【００５０】
カメラ部制御装置１０は、ここでは３２ｂｉｔのＲＩＳＣＣＰＵを用いて構成されており、基準電圧生成部１４、Ａ／Ｄ変換器１９及び照明ＬＥＤ２５を制御することができるようにされている。基準電圧生成部１４に対する制御とは、基準電圧を変更設定するなどの制御である。また、照明ＬＥＤ２５は、読取対象のバーコードに対して照明用の赤色光を照射するものである。
【００５１】
また、カメラ部制御装置１０は、システム制御装置３０との間でデータのやり取りができるようにされている。
一方、システム制御装置３０側に関連する構成としては、認識用ＬＥＤ３１と、ブザー３２と、液晶ディスプレイ（ＬＣＤ）３３と、キーパット３４と、読み取り用スイッチ３５と、シリアルＩ／Ｆ回路３６と、ＩｒＤＡＩ／Ｆ回路３７と、ＦＬＡＳＨメモリ３８と、ＤＲＡＭ３９と、リアルタイムクロック４０と、メモリバックアップ用電池４１などを備えている。
【００５２】
認識用ＬＥＤ３１は、読み取り対象の画像情報が適切にデコードされた場合に点灯され、所定時間後に消灯される。また、ブザー３２も、読み取り対象の画像情報が適切にデコードされた場合に鳴動される。
液晶ディスプレイ３３は、読み込んだバーコードなどを表示するためなどに用いられる。本実施例では２階調表示のＬＣＤとして構成されている。キーパット３４は、例えばテンキーや各種ファンクションキーを備えており、情報入力のために用いられる。読み取り用スイッチ３５は、利用者が読取処理の開始を指示するためのスイッチである。
【００５３】
ＩｒＤＡＩ／Ｆ回路３７は、ＩｒＤＡ（Infrared Data Association ）規格に準じた方法により図示しない外部装置との間で通信を行うものであり、図示しない通信用発光素子を介してデータを外部装置に送信したり、図示しない通信用受光素子を介して外部装置からの信号（例えばシステムを動かすためのプログラムや送信を待機する命令等）を受信する。
【００５４】
システム制御装置３０、ＦＬＡＳＨメモリ３８、ＤＲＡＭ３９、リアルタイムクロック４０は、アドレスバス及びデータバスによって相互に接続されている。画像メモリ２０と接続されていると共に、やはりアドレスバス及びデータバスによってカメラ部制御装置１０及びメモリ２２と接続されている。
【００５５】
カメラ部制御装置１０は、ここでは１６ｂｉｔのＣＰＵを用いて構成されており、上述したキーパット３４や読み取り用スイッチ３５の入力を受け付けたり、認識用ＬＥＤ３１やブザー３２への出力を制御したり、シリアルＩ／Ｆ回路３６やＩｒＤＡＩ／Ｆ回路３７を介した通信制御を行なう。そして、カメラ部制御装置１０を介して入力したバーコードの画像を液晶ディスプレイ３３に表示させることもできる。
【００５６】
このような構成を備えた本実施例のバーコード読取装置１は、ＣＣＤエリアセンサ１１から出力される走査線信号をＡＧＣアンプ１２によって増幅し、その増幅された走査線信号をＡ／Ｄ変換器１９によってディジタルデータに変換したものを取り込み、そのデータに基づいて、２次元画像内に含まれているバーコードを読み取る。Ａ／Ｄ変換器１９によってディジタルデータに変換された１画面分のデータは画像メモリ２０に一時記憶される。具体的には、図２（Ａ）に示すように、ＣＣＤエリアセンサ１１の左上の画素を開始点の画素Ｐ１とし、左から右へ移動すると共に、上から下へ移動するような順番で最終的には右下の画素が終了点の画素Ｐｎとなる。そして、図２（Ｂ）に示すように、その順番（Ｐ１〜Ｐｎ）で画像メモリ２０内の所定のアドレスＡ（Ｐ１）〜Ａ（Ｐｎ）に格納される。なお、以下の説明においては、実際には画像メモリ２０内のデータを用いて処理するのであるが、視覚的に理解が容易となるように、図２（Ａ）に対応するような２次元の画像領域を想定して進めることとする。
【００５７】
本実施例におけるバーコードの読取手法は次の通りである。
まず、この２次元画像領域上に、図３に示すような主検査線及び副検査線を設定する。主検査線は画像領域に対して水平方向の検査線であり、副検査線は画像領域に対して垂直方向の検査線である。なお、主検査線が「水平方向の画像データ検査線」に相当し、副検査線が「垂直方向の画像データ検査線」に相当する。
【００５８】
そして、図４，５に示すように、その設定された主検査線又は副検査線に沿って画像データを走査することにより、画像データ中に含まれているバーコードの両端に存在するガードバーの内の一方（図４，５中ではＧｂ１で示す。）を検出する。なお、図３に示すように、主検査線は画像を左から右へ検査していき、副検査線は画像を上から下へ検査していく。
【００５９】
そして、その検出したガードバーＧｂ１上を起点とすると共にガードバーＧｂ１に垂直な読取走査線を設定する。本実施例では、最初に主検査線を用いて走査し（図４参照）、全ての主検査線を用いてもガードバーＧｂ１を検出できなければ、次に副検査線を用いてガードバーＧｂ１検出を行うようにしている。
【００６０】
ガードバーＧｂ１の検出に際しては、図６に示すように、主検査線がバーの候補に交差した点（交点）の周辺を探索して、そのバー候補が直線であることを認識する。この認識は、次のようにして行う。すなわち、検出したガードバーＧｂ１の交点を中心として所定距離だけ両方向にバーを辿り、水平方向の変化分ΔＡと垂直方向の変化分ΔＢを所定数求め、全ての傾きΔＢ／ΔＡがほぼ一定値であれば、直線であると判断する。直線でなければバーではない。
【００６１】
また、読取走査線の設定は次のようにして行う。読取走査線の起点は、主検査線とガードバーＧｂ１との交点である。また、ガードバーＧｂ１の傾きがΔＢ／ΔＡであれば、それに垂直な直線の傾きはΔＡ／ΔＢである。したがって、主検査線とガードバーＧｂ１との交点を起点とした傾きΔＡ／ΔＢの直線を、読取走査線として設定するのである。つまり、読取走査線の設定に際しては、ガードバーＧｂ１や読取走査線の傾き角度を計算するといった面倒な処理はしない。
【００６２】
このようにガードバーＧｂ１の垂直な読取走査線を設定した場合、２次元画像中において元々長方形のバーコードが歪んでいなければ、その読取走査線は、他方のガードバーＧｂ２を必ず貫くこととなる（図４，５参照）。そのため、その読取走査線に沿って走査して得たデータに基づけば、バーコードの情報を適切にデコードすることができる。
【００６３】
しかし、バーコード読取装置とバーコードとの位置関係によって、２次元画像中のバーコードが図１９（ロ）に示すように略台形形状に歪んだり、図１９（ニ）に示すように平行な辺がない四辺形に歪むことが考えられる。この場合、図７に示すように、一方のガードバーＧｂ１上の起点から読取走査線に沿ってバーコードを走査した結果、その読取走査線がバーコードの他方のガードバーＧｂ２を貫かないでバーコードの存在領域外へ逸れてしまう可能性がある。その場合に本実施例では、読取走査線がバーコードの存在領域外へ逸れた位置から読取走査線を走査方向とは逆に辿り、その読取走査線に基づいて確実に認識されているバーの位置まで戻る。そして、その確実に認識されているバー上を起点とすると共に当該バーに垂直な読取走査線を新たに設定する（図７参照）。なお、図７においては、読取走査線を１回だけ新たに設定するだけで他方のガードバーＧｂ２を貫いているが、必要に応じて２回以上新たな読取走査線を設定すればよい。
【００６４】
このようにして、バーコード画像が歪んでいることによって、最初に設定した読取走査線だけでは対処できない場合には、２本以上の読取走査線を設定し、その読取走査線に沿って走査して得たデータに基づくことで、歪んだバーコード画像からも情報を適切にデコードすることができる。バーコード読取装置１の使用に際しては、バーコード読取の際の制約条件が極力少ない方が好ましいため、本実施例は非常に有効である。
【００６５】
図８は、カメラ部制御装置１０が実行するバーコード読取処理を示すフローチャートである。主要な内容については上述したので、全体的な流れについて簡単に説明する。
最初のステップＳ１１０では、変数ｉ，ｊをそれぞれ１に設定し、続くＳ１２０において主検査線（ｉ）を設定する。続いて、その主検査線（ｉ）に沿って検査した結果に基づいてバーコードの特徴パターンの有無を判定し（Ｓ１３０）、無ければ、変数ｉをインクリメントし（Ｓ１４０）、変数ｉが主検査線の設定本数Ｍよりも大きいか否かを判断する（Ｓ１５０）。変数ｉ≦設定本数Ｍであれば（Ｓ１５０：ＮＯ）、Ｓ１２０へ戻って、前回とは別の主検査線を設定する。このようにして、バーコードの特徴パターンを見つけるまで、主検査線を変更しながら検査していく。本実施例では、画像領域中の中央付近にバーコードの画像が存在する可能性が高いという観点から、複数本設定された主検査線の使用順番は、画像領域の中央付近から外側へ向かう順番とされている。
【００６６】
そして、Ｓ１３０の判定によりバーコードの特徴パターンが有った場合には、Ｓ１６０へ移行してガードバーＧｂ１を検出する。そして、ガードバーＧｂ１の傾きを検出し（Ｓ１７０）、そのガードバーＧｂ１に垂直な読取走査線を設定する（Ｓ１８０）。そして、その読取走査線に沿って走査し（Ｓ１９０）、その結果、他端のガードバーＧｂ２を検出できなかった場合には（Ｓ２００：ＮＯ）、Ｓ２１０へ移行し、確実に検出されたバーまで戻ってそのバーの傾きを検出する。そして、Ｓ１８０へ戻り、そのバーに垂直な読取走査線を新しく設定し、Ｓ１９０以降の処理を繰り返す。
【００６７】
一方、バーコードの他端のガードバーＧｂ２を検出した場合には（Ｓ２００：ＹＥＳ）、Ｓ２１０にて誤り検査を行い、誤りが無ければ、Ｓ２２０にて読み取ったデータを文字データに変換して出力し、誤りが有ればそのまま本処理ルーチンを終了する。
【００６８】
また、Ｓ１５０にて肯定判断、すなわち、設定された主検査線を全て用いて検査してもバーコードの特徴パターンを見つけられなかった場合には、Ｓ２４０〜Ｓ２７０において、今度は副検査線を用いた検査を実行する。この内容は主検査線の場合のＳ１２０〜Ｓ１５０の処理と同様であり、副検査線（ｊ）をｊ＝１〜Ｎ（設定本数）まで順番に用いてバーコードの特徴パターンを見つける処理を行う。なお、この場合も、複数本設定された副検査線の使用順番は、画像領域の中央付近から外側へ向かう順番とされている。
【００６９】
図８に示す例では、「一連の読み取り操作を終えて終了する」としたが、より正確さを期する場合、図８に示す処理を複数回繰り返し、同じ結果が得られた場合に終了するようにすることもできる。
［第２実施例］
上記第１実施例の場合には、設定した読取走査線がバーコードの他方のガードバーＧｂ２を貫かないでバーコードの存在領域外へ逸れてしまった場合に、新たな走査線を設定する手法であったが、次に示す設定手法を用いても同様に実現できる。
【００７０】
つまり、第２実施例の場合の読取走査線の設定手法は、一方のガードバーＧｂ１上の起点から読取走査線に沿って所定距離走査した時点あるいは所定数のバー及びスペースを走査した時点で、直近のバー上を起点とすると共に当該バーに垂直な読取走査線を新たに設定する、という処理を、最終的に設定された読取走査線が他方のガードバーＧｂ２を貫くまで繰り返し行うというものである（図９参照）。なお、図９の場合には最初の読取走査線に加えて新たな読取走査線を２回設定することでバーコード全体を貫くこととなったが、バーコードの大きさと新たな読取走査線を設定する条件とに応じて変わってくる。
【００７１】
図１０は、この第２実施例の場合のバーコード読取処理を示すフローチャートである。
Ｓ１１１０〜Ｓ１１７０及びＳ１２２０〜Ｓ１２７０の処理内容は、上述した第１実施例の場合の図８のフローチャートにおけるＳ１１０〜Ｓ１７０及びＳ２２０〜Ｓ２７０と全く同様であるので説明は省略し、変更部分についてのみ説明する。
【００７２】
Ｓ１１７０にてガードバーＧｂ１の傾きを検出した後、Ｓ１１８０では、そのガードバーＧｂ１の中点に読取走査線の起点を設定し、そのガードバーＧｂ１に垂直な読取走査線を設定する（Ｓ１１９０）。そして、その読取走査線に沿って所定本数のバーを走査する（Ｓ１２００）。その結果、バーコードの他端のガードバーＧｂ２を検出したかどうかを判断し（Ｓ１２１０）、他端のガードバーＧｂ２を検出しなかった場合には（Ｓ１２１０：ＮＯ）、Ｓ１１９０へ戻り、Ｓ１２００にて所定本数走査したバーを基準とし、そのバーに垂直な読取走査線を設定する。
【００７３】
なお、図１０に示すように示すフローチャートにおいては、所定本数のバーを走査した時点で（Ｓ１２００）、新たな読取走査線を設定するようにしているが、所定距離であってもよい。また、所定本数のバーを１とすれば、順次設定した読取走査線によって確実にバーコード全体を貫くこととなる。なお、当然であるが、所定本数を少なくしたり所定距離を短くすることによって、「新たな読取走査線を設定する条件を厳しく」した場合には、読取走査線の再設定処理が多くなるので、処理負荷は増える。但し、バーコード全体を貫く読取走査線の設定という観点からすれば、その確実性は相対的に高いと言える。
【００７４】
［第３実施例］
上述した第１あるいは第２実施例の場合には、読取走査線の設定手法に違いはあるが、読取走査線をガードバーＧｂ１等と垂直に設定するという点では共通していた。しかし、必ずしもガードバーＧｂ１等に垂直な読取走査線を設定するという手法ではなくてもよい。
【００７５】
本第３実施例での読取走査線の設定手法は次の通りである。すなわち、図１１に例示するように、最初は一方のガードバーＧｂ１の中央位置を起点としてガードバーＧｂ１に垂直な読取走査線を設定する。そして、その読取走査線に沿ってバーコードを走査した結果、その読取走査線がバーコードの他方のガードバーＧｂ２を貫かないでバーコードの存在領域外へ逸れてしまった場合には、その読取走査線を走査方向とは逆に辿って、その読取走査線に基づいて確実に認識されているバーの位置まで戻る。そして、その確実に認識されているバーの中央位置ｂとガードバー上の起点（つまり中央位置）とを結ぶ新たな読取走査線を設定する。この新たな読取走査線は、最初に設定した読取走査線と異なり、ガードバーＧｂ１に対して垂直ではない。なお、図１１の場合には新たな読取走査線を１回設定しただけでバーコード全体を貫くこととなったが、最終的に設定された読取走査線が他方のガードバーＧｂ２を貫くまで必要に応じて２回以上新たな読取走査線を設定する。このようにしても、やはりバーコードの歪みに対処することができる。
【００７６】
［第１〜第３実施例の別態様］
以上説明した第１〜第３実施例では、図７，９，１１などに示したように、バーコードの両側に存在するガードバーの内、画像領域中において相対的に左側に存在するガードバーＧｂ１に読取走査線の起点を設定する場合について説明した。しかし、例えば図１２に示すように画像領域中において相対的に右側に存在するガードバーＧｂ２に読取走査線の起点を設定して、上述した説明の場合とは逆方向、つまり画像領域の右から左へ向かう読取走査線を設定することも可能である。バーコードの配置や傾き状態によっては、主検査線にてガードバーＧｂ２の方を最初に検出する場合もあるからである。なお、図１２は、図７にて説明した第１実施例の場合に対応する逆向きの読取走査線を示している。
【００７７】
また、読取走査線の起点を設定する際には、次の点を工夫することができる。
上述した第１実施例では、読取走査線のガードバーＧｂ１上での起点として、主検査線とガードバーＧｂ１との交点を設定した。また、最初に設定した読取走査線がバーコードから逸れた場合に新たな読取走査線を設定する際も、同様に交点を起点とした。但し、例えば図１３に示すように、主検査線とガードバーＧｂ１との交点がガードバーＧｂ１の端部付近である場合には、ガードバーＧｂ１と垂直な方向への読取走査線を設定する際に不都合が生じる場合が想定される。図６にて説明したように、その交点付近のガードバーＧｂ１の配置状態を見て傾き（ΔＢ／ΔＡ）を把握し、それに基づいて読取走査線の傾き（ΔＡ／ΔＢ）を設定しているが、端部であるため上手くいかないことも考えられる。また、ガードバーＧｂ１の端部付近を起点とした読取走査線の場合には、歪んだバーコードに対して早期にバーコードの存在領域外へ逸れてしまう可能性が高くなることも想定される。
【００７８】
そこで、図１３に示すように、読取走査線のガードバーＧｂ１上での起点として、主検査線とガードバーＧｂ１との交点から、端部付近であると判定された側の端部とは反対側へ所定量だけ移動した位置を起点として設定する。もちろん、読取走査線のガードバーＧｂ１上の起点だけでなく、新たな読取走査線を設定する場合の、バー上の起点についても同様である。
【００７９】
また、所定量だけ移動するのではなく、同様の観点から、読取走査線の起点として、ガードバーＧｂ１の中央位置や、確実に認識されているバーの中央位置ｂを起点として設定してもよい（図１４参照）。特に、図１５に示すように、ガードバーＧｂ１自体が短く、主検査線とガードバーＧｂ１との交点から両側に向かってバーの状態を見ていった場合に、両端に行き着いてしまうことも考えられる。この場合には、バーの長さが所定値以上の場合だけ採用し、その中央位置を起点とした読取走査線を設定することが考えられる。
【００８０】
［第４実施例］
上述した第１〜第３実施例では、画像データ２０に記憶された１画像領域全てを、画像データ検査線に沿った走査対象としたが、本第４実施例では、予めバーコードが存在する可能性の高いと考えられる詳細検査対象領域を設定し、その領域内に限ってガードバーＧｂ１を見つけるようにしている。
【００８１】
本第４実施例のバーコード読取装置の構成は、基本的には、図１に示した第１実施例の構成と同様であるが、本実施例特有の構成の２値化回路５０を備えている。したがって、図１に示した２値化回路１７とは符号を異ならせて記載する。また、画像メモリ２０の内部構成についても多少メモリ構成が異なっている。さらには、Ａ／Ｄ変換器１９にてディジタル信号に変換された画像データは２値化回路５０にも出力され、また、カメラ部制御装置１０が２値化回路５０にリードライト制御信号やアドレス制御信号を出力できるようにされている。それ以外の構成については、特段変更されていないので、詳しい説明は省略する。
【００８２】
まず、画像メモリ２０の内部構成について説明する。画像メモリ２０は、画像データメモリ２０ａ、変化点数メモリ２０ｂ及び２次元画像メモリ２０ｃを備えている。画像データメモリ２０ａには、Ａ／Ｄ変換器１９にてディジタル信号に変換された画像データを記憶しておくためのものである。なお、変化点数メモリ２０ｂ及び２次元画像メモリ２０ｃについては、以下に説明する２値化回路との関係で説明する。
【００８３】
続いて、２値化回路５０の詳細について、図２０，２１を参照して説明する。図２０は２値化回路５０を構成する要素について概略的な機能別にまとめたブロック図であり、図２１は、さらに詳細な機能別にまとめたブロック図である。
図２０に示すように、２値化回路５０は、明比較器５１と、暗比較器５２と、明暗判定器５３と、カウンタ５４と、余裕値記憶ブロック５５と、ブロックアドレス制御回路５６とを備えている。そして、Ａ／Ｄ変換器１９にてディジタル信号に変換されて出力された画像データは、明比較器５１と、暗比較器５２と、明暗判定器５３とに入力する。明比較器５１及び暗比較器５２から出力されるデータは明暗判定器５３に入力され、明暗判定器５３からの出力データはカウンタ５４及び画像メモリ２０内の２次元画像メモリ２０ｃへ入力される。また、カウンタ５４からの出力、つまりカウント値は、画像メモリ２０内の変化点数メモリ２０ｂへ入力される。
【００８４】
また、カメラ部制御装置１０からのリードライト制御信号は、明比較器５１、暗比較器５２、明暗判定器５３、余裕値記憶ブロック５５、ブロックアドレス制御回路５６のそれぞれに入力している。一方、カメラ部制御装置１０からのアドレス制御信号は、ブロックアドレス制御回路５６へ入力しており、そのブロックアドレス制御回路５６からの制御信号は、画像メモリ２０内の変化点数メモリ２０ｂへ入力されている。なお、カメラ部制御装置１０からのアドレス制御信号は、画像メモリ２０内の画像データメモリ２０ａ及び２次元画像メモリ２０ｃにも入力されている。
【００８５】
以上は、２値化回路５０の概略的な説明であったので、図２１を参照してさらに詳しく説明する。なお、図２１においては、図２０に示した要素を構成するブロックであることを示すため、同じ数字の後に小文字の英字を付した。例えば明比較器５１であれば、比較ブロック５１ａと、明データ記憶ブロック５１ｂと、減算ブロック５１ｃと、暗上限記憶ブロック５１ｄとを備えるという具合である。それ以外の要素についても同様に示した。
【００８６】
明比較器５１の構成要素については説明したが、暗比較器５２は、比較ブロック５２ａと、暗データ記憶ブロック５２ｂと、加算ブロック５２ｃと、明下限記憶ブロック５２ｄとを備える。また、明暗判定器５３は、除算ブロック５３ａと、中間値記憶ブロック５３ｂと、明比較ブロック５３ｃと、暗比較ブロック５３ｄと、中間比較ブロック５３ｅと、明比較ブロック５３ｃ、暗比較ブロック５３ｄ及び中間比較ブロック５３ｅからの出力信号を入力して、所定の判定条件に基づく明暗判定を行う明暗判定ブロック５３ｆと、直前値記憶回路５３ｇと、比較ブロック５３ｈとを備えている。なお、カウンタ５４及び余裕値記憶ブロック５５は図２に示したものと同じである。また、ブロックアドレス制御回路５６は、主走査区分設定ブロック５６ａと、副走査区分設定ブロック５６ｂと、区域制御ブロック５６ｃとを備えている。
【００８７】
続いて、これらの要素間の信号のやりとりについて説明する。まず、図２０の明比較器５１に属する構成に関して、図２１を参照して説明する。
Ａ／Ｄ変換器１９（図２０参照）から出力された（Ａ／Ｄ変換後の）画像データは、比較ブロック５１ａ及び明データ記憶ブロック５１ｂに入力する。比較ブロック５１ａには明データ記憶ブロック５１ｂからの出力信号も入力しており、すなわち比較ブロック５１ａでは、順次入力される画像データの明るさを示すデータを従前に入力されたデータと比較し、より明るい方を明データ記憶ブロック５１ｂへ出力する。したがって、明データ記憶ブロック５１ｂには、それまでに入力された中で最も明るいデータ（以下、これを明データと称す。）が更新されながら記憶されることとなる。なお、本実施例においては、具体例として後述するように、明るさを１〜１５で示しており、数字が大きくなるほど明るいことを前提として説明を進めることとなる。
【００８８】
そして、減算ブロック５１ｃでは、余裕値記憶ブロック５５より出力された暗余裕値を、この明データ記憶ブロック５１ｂより出力される明データから減算して暗上限記憶ブロック５１ｄに出力する。したがって、暗上限記憶ブロック５１ｄには、暗上限値として、明データから暗余裕値を減算した値が更新されながら記憶されることとなる。なお、この暗上限値とは、明暗判定の際に「暗」と判定する上限の値を指し、それまでの入力データの内で最も明るいとされる明データから所定の暗余裕値を減算した値よりも大きな値となる範囲ではとても暗とは認められない、という判定のために用いるものである。
【００８９】
次に、図２０の暗比較器５２に属する構成に関して、図２１を参照して説明する。
Ａ／Ｄ変換後の画像データは、比較ブロック５２ａ及び暗データ記憶ブロック５２ｂに入力する。比較ブロック５２ａには暗データ記憶ブロック５２ｂからの出力信号も入力しており、すなわち比較ブロック５２ａでは、順次入力される画像データの明るさを示すデータを従前に入力されたデータと比較し、より暗い方を暗データ記憶ブロック５２ｂへ出力する。したがって、暗データ記憶ブロック５２ｂには、それまでに入力された中で最も暗いデータ（以下、これを暗データと称す。）が更新されながら記憶されることとなる。そして、加算ブロック５２ｃでは、余裕値記憶ブロック５５より出力された明余裕値を、この暗データ記憶ブロック５２ｂから出力される暗データに加算して明下限記憶ブロック５２ｄに出力する。したがって、明下限記憶ブロック５２ｄには、明下限値として、暗データに明余裕値を加算した値が更新されながら記憶されることとなる。なお、この明下限値とは、明暗判定の際に「明」と判定する下限の値を指し、それまでの入力データの内で最も暗いとされる暗データに所定の明余裕値を加算した値よりも小さな値となる範囲ではとても明とは認められない、という判定のために用いるものである。
【００９０】
次に、図２０の明暗判定器５３に属する構成に関して、図２１を参照して説明する。
除算ブロック５３ａには明データ記憶ブロック５１ｂからの明データと暗データ記憶ブロック５２ｂからの暗データが入力しており、それらが加算した後に２で除されて、明データと暗データの中間の値が算出されることとなる。つまり、その時点までに入力されている明るさを示すデータの内、最も明るいデータと最も暗いデータの中間の値が算出されて中間値記憶ブロック５３ｂに記憶される。
【００９１】
また、明比較ブロック５３ｃ、暗比較ブロック５３ｄ及び中間比較ブロック５３ｅには、それぞれＡ／Ｄ変換後の画像データが入力している。そして、明比較ブロック５３ｃでは、その入力された画像データの明るさを明下限記憶ブロック５２ｄからの明下限値と比較し、その比較結果を明暗判定ブロック５３ｆに出力する。一方、暗比較ブロック５３ｄでは、その入力された画像データの明るさを暗上限記憶ブロック５１ｄからの暗上限値と比較し、その比較結果を明暗判定ブロック５３ｆに出力する。さらに、中間比較ブロック５３ｅでは、その入力された画像データの明るさを中間値記憶ブロック５３ｂからの中間値と比較し、その比較結果を明暗判定ブロック５３ｆに出力する。
【００９２】
この明暗判定ブロック５３ｆにおいては、次のような明暗判定を行う。すなわち、明であるか否かの判定には、明比較ブロック５３ｃにおける判定結果と中間比較ブロック５３ｅからの比較結果を用いて、入力値≧中間値、且つ入力値≧明下限値であれば明と判断する。一方、暗であるか否かの判定には、暗比較ブロック５３ｄにおける判定結果と中間比較ブロック５３ｅからの比較結果を用いて、入力値＜中間値、且つ入力値≦暗下限値であれば暗と判断する。明暗の判定ができた場合には、当然その判定結果を出力するが、上述した明暗の判定条件をいずれも満たさない場合には明暗判定ができないものとして、前回の判定結果を出力するようにされている。なお、例えば明であれば１、暗であれば０として出力する。
【００９３】
この明暗判定ブロック５３ｆでの判定結果は、図２０に示す画像メモリ２０内の２次元画像メモリ２０ｃへ出力されると共に、直前値記憶回路５３ｇ及び比較ブロック５３ｈにも出力される。そして、比較ブロック５３ｈは、明暗判定ブロック５３ｆからの出力値を、直前値記憶回路５３ｇに記憶された直前値と比較し、変化している場合にのみカウンタ５４へ出力する。つまり、明暗が変化するとカウンタ５４へ出力されるのである。なお、カウンタ５４は、比較ブロック５３ｈからの出力に基づいて明暗が変化した数を計数し、その計数した明暗変化点数を、画像メモリ２０中の変化点数メモリ２０ｂへ出力する。
【００９４】
次に、図２０のブロックアドレス制御回路５６に属する構成に関して、図２１を参照して説明する。
区域制御ブロック５６ｃは、カメラ部制御装置１０（図２０参照）からのアドレス制御信号に基づくと共に、主走査区分設定ブロック５６ａ及び副走査区分設定ブロック５６ｂからの設定に応じて区域制御を行う。詳しくは、設定された検査区域の主走査線上の区分点と副走査線上の区分点とから検査区域毎の変化点数の格納アドレスを制御し、カウンタ５４を制御する。なお、区域制御ブロック５６ｃからの区域制御信号は、画像メモリ２０中の変化点数メモリ２０ｂへも出力されている。
【００９５】
また、主走査区分設定ブロック５６ａ及び副走査区分設定ブロック５６ｂは、カメラ部制御装置１０（図２０参照）からのリードライト制御信号によって制御されている。なお、上述した暗上限記憶ブロック５１ｄ、明下限記憶ブロック５２ｄ、中間値記憶ブロック５３ｂ及び余裕値記憶ブロック５５も、このリードライト制御信号によって制御されている。
【００９６】
以上は、本実施例のバーコード読取装置の構成説明であったが、次に、カメラ部制御装置１０が実行するバーコード読取処理について、図２２のフローチャートなどを参照して説明する。
最初のステップＳ２１００では、各検査区域の主走査線方向の明暗変化点数の算出を行う。これについて詳述する。本実施例においては、画像データメモリ２０ａに一時記憶された１画像領域分のデータの全てを対象としてバーコード読取処理を行うのではなく、バーコードが存在すると思われる領域を詳細検査対象領域として設定した後、バーコード読取処理を行う。そして、このバーコードの詳細検査対象領域の設定に際しては、画像データメモリ２０ａ上における１画像領域を複数の検査区域に分割し、その分割された検査区域毎に、その区域内に含まれる画像データに基づいて明暗の変化点の数を計数して、その計数値に基づいて推定を行う。そこで、まず、Ｓ２１００にて実行される明暗変化点数の算出処理について、図２３，２４を参照して説明する。
【００９７】
最初に検査区域について説明する。図２４（ａ）に示すように、画像領域を水平方向へ走査するための主走査線及び垂直方向へ走査するための副走査線とそれぞれ平行な線によって区画される矩形の区域を検査区域とする。これは、ＣＣＤエリアセンサ１１においては主走査線及び副走査線方向にマトリックス状に画素が配列されているので、このように矩形領域に設定した方がデータが扱い易いからである。
【００９８】
なお、図２４（ａ）においては、画像領域を横Ｇ個×縦Ｈ個の検査区域に分割し、各検査区域が横ａ画素×縦ｂ画素とされている。なお、図においてはＧ＝８，Ｈ＝１０，ａ＝ｂ＝８とされており、この想定では、画像領域のサイズが横８０×縦６４画素となってしまう。一般的に、６４０×４８０画素といったレベルの解像度のものが用いられるが、ここでは、図に基づく直感的理解を容易にするために、あえてこのような簡易モデルを用いることとする。
【００９９】
そして、このような設定の検査区域において、バーコードの一部を図２４（ｂ）に示すように捉えた場合を考える。明暗変化点は、各主走査線について計数するため、この場合は、８本の主走査線について、それぞれ、４，４，４，４，４，３，３，３となり、それらの合計数が２９となる。したがって、この検査区域の主走査線方向の明暗変化点数は２９となる。このようにして、各検査区域の明暗変化点数を求めるのである。
【０１００】
明暗変化点数をカウントするまでの処理内容については、図２１の構成説明に際して概略を説明したが、さらに補足説明する。ＣＣＤエリアセンサ１１から出力される画素毎の画像データについて、それまでに検出された最も明るい画像データと最も暗いデータの中間値を明暗判定の基準値とする。例えば数字が大きくなるほど明るくなる画像データを「１〜１５」の範囲で考える。最初１５のデータが入ってくると、明データと暗データは共に１５であり、中間値も１５となる。その後、１５が続けて入ってきている間は変化なしであるが、例えば９が入ってくると、暗データが９に更新され、中間値は１２となる。さらに、１が入ってくると、暗データが１に更新され、中間値は８となる。これが収束値となる。したがって、その後は８を基準として明暗判定する。
【０１０１】
また、明暗判定の基本は中間値との比較であるため、入力値≧中間値であれば明、入力値＜中間値であれば暗とするが、本実施例では、明暗判定の確実性を増すために不感帯を設けている。つまり、入力値≧中間値であっても、入力値が明下限値未満であれば明とは判定せず、同様に、入力値＜中間値であっても、入力値が暗上限よりも大きければ暗とは判定しない。つまり、入力値≧中間値、且つ入力値≧明下限値の場合にのみ明とし、入力値＜中間値、且つ入力値≦暗上限値の場合にのみ暗とする。これらの条件に合致しない場合には明暗判定はせず、上述したように前回の判定結果を援用する。
【０１０２】
そのため、具体的には次のようになる。なお、ここでは暗上限値は最大値−５であるとし、明下限値は最小値＋５を想定し、中間値の計算においては小数点以下は切り上げている。また、明暗判定できない場合を×で示してある。
入力順番        ▲１▼    ▲２▼    ▲３▼    ▲４▼    ▲５▼    ▲６▼    ▲７▼    ▲８▼
入力値        １５，１５，  ８，  １，  １，  １，  ８，１５
最大値（明）  １５，１５，１５，１５，１５，１５，１５，１５
最小値（暗）  １５，１５，  ８，  １，  １，  １，  １，  １
中間値        １５，１５，１２，  ８，  ８，  ８，  ８，  ８
暗上限値      １０，１０，１０，１０，１０，１０，１０，１０
明下限値      ２０，２０，１３，  ６，  ６，  ６，  ６，  ６
明暗判定        ×    ×    暗    暗    暗    暗    明    明
この具体例においては、入力順番▲１▼，▲２▼における入力値が１５であるので、最大値、最小値及び中間値が共に１５になり、暗上限値は１０、明下限値は２０となる。入力値（１５）≧中間値（１５）であるため「明」の可能性があるが、入力値（１５）は明下限値（２０）以上ではないので、明とは判定されない。当然「暗」とは判定されないので、明暗判定不可能（×）とされる。
【０１０３】
そして、入力順番▲３▼において入力値が８となると、最小値も８となり、中間値が１２となる。すると、入力値（８）＜中間値（１２）となり、且つ入力値（８）も暗上限値（１０）以下となるので、暗と判定される。入力順番▲１▼，▲２▼では明暗判定不可能（×）であったものが▲３▼で暗となったので、この場合には明暗変化があったものと考える。
【０１０４】
続く▲４▼における入力値は１であるので、最小値も１となり、中間値が８となる。すると、入力値（１）＜中間値（８）となり、且つ入力値（１）も暗上限値（１０）以下であるので、暗と判定される。なお、この時点で最大値１５と最小値１が出現しているので、暗上限値１０及び明下限値６はこれ以降同じとなる。入力順番▲５▼，▲６▼でも同様である。
【０１０５】
そして、入力順番▲７▼において入力値が８となると、入力値（８）≧中間値（８）となり、且つ入力値（８）も明下限値（６）以上となるので、明と判定される。入力順番▲６▼では暗と判定されていたものが▲７▼で明となったので、この場合には明暗変化があったものと考える。したがって、ここで示した例でいえば、明暗変化点数が２となる。
なお、入力順番▲３▼では入力値が８であるが暗と判定されていたが、それは取り得る最小値（１）がその時点で出現していなかったからである。上述したように、入力順番▲４▼までにおいて最大値１５と最小値１が出現して、暗上限値１０及び明下限値６はこれ以降同じとなるため、今後は、入力値が８以上であれば明と判定され、８未満であれば暗と判定されることとなる。
【０１０６】
それではここで、各検査区域の明暗変化点数を求めるための処理を図２３のフローチャートを参照して説明する。
最初のステップＳ２１１０では、変数ｇ，ｈを共に初期値１に設定し、続くＳ１２０においては、Ｊ番目の走査線に沿ってＩ番目の画像データを検査して、変化点数を累積カウントする。
【０１０７】
続いて、検査した画像データの位置を示すＩがａ×ｇであるか否かを判定する（Ｓ２１３０）。これは、主走査線に沿って横方向にｇ検査区域分だけ検査したか否かを判定する処理であり、Ｉがａ×ｇとなっていなければ（Ｓ２１３０：ＮＯ）、主走査線に沿ってｇ検査区域分を検査していないので、Ｓ２１２０へ戻る。一方、Ｉがａ×ｇとなれば、主走査線に沿ってｇ検査区域分だけ検査したこととなるので（Ｓ２１３０：ＹＥＳ）、Ｓ２１４０へ移行する。
【０１０８】
Ｓ２１４０では、Ｓ２１２０にて得た累積カウント値を（ｇ，ｈ）区域の明暗変化点数に加算して記憶する。そして、変数ｇをインクリメント（ｇ＝ｇ＋１）してから（Ｓ２１５０）、変数ｇが検査区域の横方向の総数Ｇよりも大きいか否かを判定する（Ｓ２１６０）。これは、１画像領域の横方向分だけ主走査線による検査をしたか否かを判定する処理であり、ｇ＞Ｇとなっていなければ（Ｓ２１６０：ＮＯ）、Ｓ２１２０へ戻る。一方、ｇ＞Ｇとなれば、１画像領域の横方向分だけ主走査線による検査をしたこととなるので（Ｓ２１６０：ＹＥＳ）、Ｓ２１７０へ移行する。
【０１０９】
Ｓ２１７０では、変数ｈが検査区域の縦方向の総数Ｈに一致したか否かを判定する。これは、１画像領域の縦方向分だけ主走査線による検査をしたか否かを判定する処理であり、ｈとＨが一致していなければ（Ｓ２１７０：ＮＯ）、検査に用いている走査線が何番目のものであるかを示すＪがｂ×ｈであるか否かを判定する（Ｓ２１８０）。これは、主走査線に沿った検査を縦方向にｈ検査区域分行ったか否かを判定する処理であり、Ｊがｂ×ｈとなっていなければ、まだ主走査線に沿った検査を縦方向にｈ検査区域分行っていないので（（Ｓ２１８０：ＮＯ）、Ｓ１２０へ戻る。一方、Ｊがｂ×ｈとなれば、主走査線に沿った検査を縦方向にｈ検査区域分行ったこととなるので（Ｓ２１８０：ＹＥＳ）、Ｓ２１９０へ移行する。
【０１１０】
Ｓ２１９０で変数ｈをインクリメント（ｈ＝ｈ＋１）してから、Ｓ２１２０へ戻る。このような処理を繰り返し、Ｓ２１７０にて肯定判断となった場合には、１画像領域の縦方向分だけ主走査線による検査をした、つまり１画像領域の全てについて検査したこととなるので、本処理を終了し、図２２のＳ２２００へ移行する。
【０１１１】
Ｓ２１０での明暗変化点数の計数処理がなされると、各検査区域単位での明暗変化点数が得られる。その各検査区域における明暗変化点数の表の一例を図２４（ｃ）に示す。細い線や小さな点は画素単位で明暗が分かれるので、明暗の「変化」は与えない。また、図柄などの大きな面積を持つ場合は、明暗変化点の数としては少なくなる。したがって、明暗変化点数が多い部分に情報コードが存在する可能性が高いと考えられる。
【０１１２】
このような状況を踏まえ、各検査区域の明暗変化点数に基づいて、バーコードの存在すると思われる領域を詳細検査対象領域として設定し、バーコードの読取を行う。
図２２のＳ２２０では、各検査区域の変化点数を所定値と比較し、所定値以上の検査区域を詳細検査対象区域候補として設定する。図２４（ｃ）に示した配列表では、理解を容易にするため、所定値を６として、明暗変化点数が６以上の検査区域である詳細検査対象区域候補に斜線を施して他の区域と区別した。
【０１１３】
続くＳ２３００では、各詳細検査対象区域候補について、今度は、副走査線方向の明暗変化点数の算出を行う。この算出手法は、Ｓ２１００で説明し主走査線方向の場合と同様であり、それを副走査線方向に変えただけである。但し、Ｓ２１００では１画像領域の全ての検査区域を対象として行ったが、このＳ２３００では、Ｓ２２００にて抽出された詳細検査対象区域候補についてのみ行う。例えば、図２４（ｂ）に示す場合には、８本の副走査線について、それぞれ、１，１，１，２，１，０，０，１となり、それらの合計数が７となる。
【０１１４】
続くＳ２４００では、縦横の変化点数比が類似している詳細検査対象区域候補を検査区域として設定する。例えば図２４（ｂ）の具体例では、縦（副検査線方向）の変化点数の合計数が７、横（主検査線方向）の変化点数の合計数が２９であり、縦横の変化点数比は２９／７となる。詳細検査対象区域候補がバーコードの一部を捉えている場合には、１区域に含まれるバー又はスペースの本数が増減しても、この縦横の変化点数比は極端には違わない。したがって、バーコードが存在していると思われる領域に属する詳細検査対象区域候補の縦横の変化点数比は類似していると考えられる。
【０１１５】
続くＳ２５００では、Ｓ２４００にて設定された詳細検査対象区域の配列を検査してその連続性を調べる。そして、連続していなければ（Ｓ２６００：ＮＯ）、そのまま本処理を終了するが、連続していれば（Ｓ２６００：ＹＥＳ）、Ｓ２７００へ移行して、その連続している詳細検査対象区域群（これが詳細検査対象領域となる）の中心点の座標を算出する。
【０１１６】
この中心点座標の算出について補足説明する。図２５（ａ）に示すように、破線で示したバーコードが存在すると推定される領域に設定された詳細検査対象領域（太い枠で示した）は、矩形形状とは限らない。但し、ここでは、副走査方向の最大幅Ｙと主走査方向の最大幅Ｘを考え、それらを縦横とする矩形形状の領域の中心座標を算出する。具体的には、図２５（ｂ）に示すようにＸ，Ｙ軸を取り、画像領域の左下端を原点とする。そして、詳細検査対象領域が取り得るＸ座標の最小値ｘ１と最大値ｘ２、及びＹ座標の最小値ｙ１と最大値ｙ２を考えると、中心座標のＸ座標を（ｘ２−ｘ１）／２、Ｙ座標を（ｙ２−ｙ１）／２として算出できる。
【０１１７】
続くＳ２７５０では、詳細検査対象領域中に存在すると推定されるバーコードのバー又はスペースの勾配θを推定する。ここでいう勾配θとは、図２６に示すように、バー又はスペースが副走査線方向となす角度である。そして、実際のバー又はスペースの形状を調べて勾配θを検出するのではなく、Ｓ２１００，Ｓ２３００にて得た主走査線方向及び副走査線方向の変化点数を用いて、下記の関係式を用いて推定する。
【０１１８】
ｔａｎθ≒副走査線方向の変化点数／主走査線方向の変化点数
ある程度の数の変化点数が得られれば上記関係式はほぼ正確に成立する。この関係式の数学的証明は省略するが、具体例を挙げて関係式が成立していることを説明しておく。
【０１１９】
図２６には、バー又はスペースの勾配θ＝３０°となっている状態を示している。ここで、図２４（ｂ）の場合と同様に、それぞれ８本ずつの主走査線方向及び副走査線方向の変化点数の合計を算出すると、主走査線方向の変化点総数は２６、副走査線方向の変化点総数は１５となる。ここで、ｔａｎ３０°≒０．５７７である。一方、副走査線方向の変化点数／主走査線方向の変化点数＝１５／２６≒０．５７６であり、両者がほぼ等しいことが判る。
【０１２０】
したがって、このＳ２７５０においては、バー又はスペースの勾配θを、ｔａｎθの近似値として推定した値を得ることとなる。
このように詳細検査対象領域の中心点座標及び勾配θの算出ができれば、次にＳ２８００へ移行して、画像データ検査線の設定〜ガードバー検出〜デコード処理に係る一連の処理を行う。Ｓ２８００の処理の詳細について図２７のフローチャートを参照して説明する。
【０１２１】
最初のステップＳ２８１０では、変数ｉを１に設定し、続くＳ２８２０において画像データ検査線（ｉ）を設定する。最初の設定時（ｉ＝１）には、図２２のＳ２７００にて算出した詳細検査対象領域の中心点を通り、且つ図２２のＳ２７５０にて推定したバー又はスペースの勾配θに直交するような画像データ検査線を設定する（図２５（ａ）参照）。
【０１２２】
続いて、その画像データ検査線（ｉ）に沿って検査した結果に基づいてバーコードの特徴パターンの有無を判定し（Ｓ２８３０）、無ければ、変数ｉをインクリメントし（Ｓ２８４０）、変数ｉが画像データ検査線の設定本数Ｍよりも大きいか否かを判断する（Ｓ２８５０）。変数ｉ≦設定本数Ｍであれば（Ｓ２８５０：ＮＯ）、Ｓ２８２０へ戻って、前回とは別の画像データ検査線を設定する。このようにして、バーコードの特徴パターンを見つけるまで、画像データ検査線を変更しながら検査していく。本実施例では、図２８（ａ）に示すように、詳細検査対象領域の中心点を通り、且つバー又はスペースの勾配θに直交するような画像データ検査線を基準として、それに平行な画像データ検査線が複数設定されている。そして、画像領域中の中央付近にバーコードの画像が存在する可能性が高いという観点から、複数本設定された画像データ検査線の使用順番は、詳細検査対象領域の中心点を通る画像データ検査線を基準として、画像領域の中央付近から外側へ向かう順番とされている。
【０１２３】
なお、図２８（ｂ）に示すように、詳細検査対象領域の中心点を通り、且つバー又はスペースの勾配θに直交するような画像データ検査線を基準とし、詳細検査対象領域の中心点を通るはするが、角度が基準の画像データ検査線とは異なる複数の検査線を設定してもよい。そして、この場合の複数本設定された画像データ検査線の使用順番は、基準の画像データ検査線との角度の差が小さいものから順番に使用していく。
【０１２４】
図２７の説明に戻り、Ｓ２８３０の判定によりバーコードの特徴パターンがあった場合には、Ｓ２８６０へ移行してガードバーＧｂ１を検出する。そして、そのガードバーＧｂ１に垂直な読取走査線を設定する（Ｓ２８７０）。なお、上述した第１実施例の場合には、図８のＳ１７０，Ｓ１８０に示すように、ガードバーＧｂ１の傾きを検出し、その傾きに直交するような傾きを持つ読取走査線を設定していた。それに対して本第４実施例では、Ｓ２８７０にて設定する読取走査線の傾きはＳ２８２０で設定した画像データ検査線の傾きと同じにする。この画像データ検査線の傾き自体が、バー又はスペースの傾きに直交するように設定されたものだからである。なお、図２８（ａ）に示すような平行な複数の画像データ検査線の中から順番に使用していく場合には、いずれの画像データ検査線であっても傾きは同じであるため問題ない。一方、図２８（ｂ）に示すように傾き自体を変える場合には、最初のＳ２８２０での処理、すなわち基準となる画像データ検査線を設定した場合の、その検査線の傾きと同じにすればよい。
【０１２５】
そして、その読取走査線に沿って走査し（Ｓ２８８０）、その結果、他端のガードバーＧｂ２を検出できなかった場合には（Ｓ２８９０：ＮＯ）、Ｓ２９００へ移行し、確実に検出されたバーまで戻ってそのバーの傾きを検出する。そして、Ｓ２８７０へ戻り、そのバーに垂直な読取走査線を新しく設定し、Ｓ２８８０以降の処理を繰り返す。
【０１２６】
一方、バーコードの他端のガードバーＧｂ２を検出した場合には（Ｓ２８９０：ＹＥＳ）、Ｓ２９１０にて誤り検査を行い、誤りが無ければ、Ｓ２９２０にて読み取ったデータを文字データに変換して出力し、誤りが有ればそのまま本処理ルーチンを終了する。
【０１２７】
また、Ｓ２８５０にて肯定判断、すなわち、設定された画像データ検査線を全て用いて検査してもバーコードの特徴パターンを見つけられなかった場合には、そのまま本処理を終了する。
なお、本第４実施例で用いた用語の内、特許請求の範囲に記載した用語と異なっているものについて、その対応を簡単に説明しておく。図２７のＳ２８２０にて設定されるｉ＝１の場合の画像データ検査線が「第１の検査線」に相当し、ｉ＝２，３…の場合の画像データ検査線が「第２の検査線」に相当する。また、詳細検査対象領域の中心点が「詳細検査対象領域の概略中心位置」に相当する。
【０１２８】
このように、本第４実施例においては、予めバーコードが存在する可能性の高いと考えられる詳細検査対象領域を設定し、その領域内に限ってガードバーＧｂ１を見つける処理を行うようにしたため、全体として処理効率が向上する。つまり、複数画素を１まとめにした検査区域単位で、コードが存在する可能性の高い領域を詳細検査対象領域として推定し、その後、その推定された領域内においてのみ従来通りの１画素毎の明暗パターンを検査するので、その検査範囲が小さくて済む。また、詳細検査対象領域の推定にあっては、検査区域毎に計数した明暗変化点数の大小比較のみ、すなわち整数値の相対比較であるため、処理負荷は小さくて済む。したがって、概略的な存在領域を推定した後にバーコードの正確な位置を検出してデータ解読をする処理まで含めたコード読取処理に要する時間を短縮させることができる。
【０１２９】
また、画像データ検査線自体が、詳細検査対象領域内に存在すると推定されるバーコードのバー又はスペースの傾きに直交するように設定されているため、ガードバーＧｂ１に垂直な読取走査線の設定（図２７のＳ２８７０）に際しても、その傾きを援用することができる。そして、バー又はスペースの傾きθに関しても、上述したように、実際のバー又はスペースの形状を調べて勾配θを検出するのではなく、主走査線方向及び副走査線方向の変化点数の比から推定できるため、処理効率が向上する。
【０１３０】
また、上述した第１実施例では、相互に直交する主検査線及び副検査線を用いていたが、これはバーコードがどのように傾いて画像領域中に存在しているかが判らないための対処であった。これに対して本第４実施例の場合には、画像データ検査線自体がバーコードの傾きを反映して設定されているため、より処理効率が向上する。つまり、水平方向及び垂直方向の画像データ検査線を設定する場合には、水平方向の検査線でしか見つけられないようにバーコードが傾いていると、垂直方向の検査線で見つけようとする処理が結果的には無駄となってしまうが、本第４実施例の画像データ検査線を用いる場合にはそのような無駄がない。
【０１３１】
［第４実施例の別態様］
（１）上記第１実施例に対する第２実施例の関係と同様に、図２７に示した処理に代えて、図２９のフローチャートに示す処理を実行するようにしてもよい。つまり、読取走査線の設定に際し、一方のガードバーＧｂ１上の起点から読取走査線に沿って所定距離走査した時点あるいは所定数のバー及びスペースを走査した時点で、直近のバー上を起点とすると共に当該バーに垂直な読取走査線を新たに設定する、という処理を、最終的に設定された読取走査線が他方のガードバーＧｂ２を貫くまで繰り返し行う手法である。
【０１３２】
図２９のＳ３０１０〜Ｓ３０６０及びＳ３１１０，３１２０の処理内容は、上述した実施例の場合の図２７のフローチャートにおけるＳ２８１０〜Ｓ２８６０及びＳ２９１０，２９２０と全く同様であるので説明は省略し、変更部分についてのみ説明する。
【０１３３】
Ｓ３０６０にてガードバーＧｂ１を検出した後、Ｓ３０７０では、そのガードバーＧｂ１の中点に読取走査線の起点を設定し、そのガードバーＧｂ１に垂直な読取走査線を設定する（Ｓ３０８０）。この場合の傾きについては、図２７のＳ２８７０で説明した通り、画像データ検査線の傾きをそのまま用いればよい。
【０１３４】
そして、その読取走査線に沿って所定本数のバーを走査する（Ｓ３０９０）。その結果、バーコードの他端のガードバーＧｂ２を検出したかどうかを判断し（Ｓ３１００）、他端のガードバーＧｂ２を検出しなかった場合には（Ｓ３１００：ＮＯ）、Ｓ３０８０へ戻り、Ｓ３０９０にて所定本数走査したバーを基準とし、そのバーに垂直な読取走査線を設定する。
【０１３５】
（２）図２７，２８などを参照して説明したように、基準の画像データ検査線（ｉ＝１）としては、詳細検査対象領域の概略中心点を通るものを採用した。これは、詳細検査対象領域の中心にバーコードが存在しているとは限らないが、確率的には、詳細検査対象領域の中心にバーコードが存在している可能性が高いため、この画像データ検査線によってガードバーＧｂ１を検出できる可能性が高くなると考えられるからである。したがって、この点を考慮しないのであれば、例えば図２８に示す画像データ検査線の使用順番ｉ＝１，２，３…を入れ替えても構わない。例えば画像領域の上側を走査する画像データ検査線を最初に設定し、その後、画像領域の下側へ向かう順番に用いてもよい。
【０１３６】
ところで、上述した実施例においては、詳細検査対象領域を構成する検査区域毎に明暗パターンの特徴を調べて類型化する際に、検査区域内の縦横の明暗変化点数比を用いたが、例えば明暗変化点の総数を用いても構わない。この総数に関しても、バーコードが存在する区域ではほぼ同じような値になると考えられるからである。
【０１３７】
但し、バーコード以外の文字などが含まれる検索区域の変化点の総数がバーコードのみの検査区域と同じになることも想定されるため変化点数比の方が好ましいと言える。つまり、縦横の変化点数比の場合には、文字などが含まれる検査区域の場合と比べれば、かなり明確な違いとなって現れると考えられるからである。そして、バーコードの場合には、バー又はスペースが直線であるため、バー又はスペースの端部が含まれなければ、縦の明暗変化点数と横の明暗変化点数の比はやはり同じ様な値になる可能性が高い。特に、文字などが含まれる検査区域の場合の明暗変化点数の比と比べれば、総数の場合よりさらに明確に区別できると考えられる。したがって、比に基づく類型化が非常に有効である。
【０１３８】
（３）上述の図２２のＳ２７５０についての説明中でも述べたが、バー又はスペースの勾配θを推定する際に利用した関係式「ｔａｎθ≒副走査線方向の変化点数／主走査線方向の変化点数」は、ある程度の数の変化点数が得られていることが前提である。つまり、例えばバー又はスペースの幅が検査区域の幅よりも大きければ、主検査線方向及び副検査線方向の明暗変化点数の一方あるいは両方が０となり、明暗変化点数比が０となってしまうことが考えられ、その場合は適切な類型化が難しくなるからである。この明暗変化点数の大小には、検査区域の大小が関係している。したがって、検査区域について複数のサイズの中から選択可能にしてもよい。例えば図３０に示すように、（ｂ）の「通常の検査区域」に対して、（ａ）の「より細かな検査区域」及び（ｃ）の「より大きな検査区域」を準備しておく。これら検査区域の複数のサイズについては、実際に使用される可能性の高いバーコードの種類などを考慮して設定すればよい。また、選択する際には、利用者がマニュアルで切り替えて選択してもよいし、自動的に選択できるようにしてもよい。自動的に選択する場合には、例えばあるサイズで処理を実行して適切に読み取れなかった場合には次のサイズに切り替えて再度処理を実行する、といった手法が考えられる。
【０１３９】
（４）検査区域の形状を正方形としたが、長方形であっても同様に実現できる。また、画像領域の全てにおいて同じサイズの検査区域としたが、複数サイズの検査区域を混在させることを除くものではない。もちろん、サイズを統一した方が処理上の都合はよい。また、正方形や長方形などの矩形以外の形状に設定することも可能ではあるが、上述した処理上の都合の観点からは、やはり矩形が好ましい。特に、検査区域の縦横の明暗変化点数の比でバー又はスペースの傾きθを推定しようとする場合には、正方形の検査区域の方が処理の都合上からも好ましいと言える。
【０１４０】
（５）明暗変化点として、明から暗への変化点と暗から明への変化点を共に明暗変化点としたが、これは、いずれかの一方のみに着目して処理してもよい。
【図面の簡単な説明】
【図１】実施例としてのバーコード読取装置のブロック図である。
【図２】画像と画像データアドレスとの対応関係を示す説明図である。
【図３】主検査線及び副検査線の説明図である。
【図４】読取走査線の設定手法の説明図である。
【図５】読取走査線の設定手法の説明図である。
【図６】読取走査線の設定手法の説明図である。
【図７】第１実施例の場合の新たな読取走査線の設定手法の説明図である。
【図８】第１実施例の場合のバーコード読取に係る処理を示すフローチャートである。
【図９】第２実施例の場合の新たな読取走査線の設定手法の説明図である。
【図１０】第２実施例の場合のバーコード読取に係る処理を示すフローチャートである。
【図１１】第３実施例の場合の新たな読取走査線の設定手法の説明図である。
【図１２】読取走査線の起点を反対側のガードバーを起点として逆向きに設定する手法の説明図である。
【図１３】読取走査線の起点を決定する際の別手法の説明図である。
【図１４】読取走査線の起点を決定する際の別手法の説明図である。
【図１５】読取走査線の起点を決定する際の別手法の説明図である。
【図１６】バーコードのサイズなどの違いを示す説明図である。
【図１７】１次元画像に基づくバーコード読取の説明図である。
【図１８】２次元画像に基づくバーコード読取の説明図である。
【図１９】読取装置とバーコードとの位置関係によって取り込んだバーコード画像が歪むことを示す説明図である。
【図２０】第４実施例の２値化回路の概略構成を示すブロック図である。
【図２１】第４実施例の２値化回路の詳細構成を示すブロック図である。
【図２２】第４実施例のバーコード読取に係るメイン処理を示すフローチャートである。
【図２３】第４実施例の明暗変化点の計数処理を示すフローチャートである。
【図２４】第４実施例の検査区域などの説明図である。
【図２５】第４実施例の詳細検査対象領域の中心点の説明図である。
【図２６】第４実施例のバー又はスペースの傾きθの説明図である。
【図２７】第４実施例の画像データ検査線の設定〜ガードバー検出〜デコード処理を示すフローチャートである。
【図２８】第４実施例の画像データ検査線の設定手法の説明図である。
【図２９】第４実施例の画像データ検査線の設定〜ガードバー検出〜デコード処理の別態様を示すフローチャートである。
【図３０】第４実施例の別態様として複数の検査区域を持つ場合の説明図である。
【符号の説明】
１…バーコード読取装置          １０…カメラ部制御装置
１１…ＣＣＤエリアセンサ          １２…ＡＧＣアンプ
１３…ローパスフィルタ            １４…基準電圧生成部
１５…負帰還アンプ                １６…補助アンプ
１７…２値化回路                  １８…周波数分析器
１９…Ａ／Ｄ変換器                ２０…画像メモリ
２１…画像メモリコントローラ      ２２…メモリ
２４…加算器                      ２５…照明ＬＥＤ
３０…システム制御装置            ３１…認識用ＬＥＤ
３２…ブザー                      ３３…液晶ディスプレイ
３４…キーパット                  ３５…読み取り用スイッチ
３６…シリアルＩ／Ｆ回路          ３７…ＩｒＤＡＩ／Ｆ回路
２０ａ…画像データメモリ          ２０ｂ…変化点数メモリ
２０ｃ…２次元画像メモリ            ５０…２値化回路
５１…明比較器                  ５１ａ…比較ブロック
５１ｂ…明データ記憶ブロック      ５１ｃ…減算ブロック
５１ｄ…暗上限記憶ブロック          ５２…暗比較器
５２ａ…比較ブロック              ５２ｂ…暗データ記憶ブロック
５２ｃ…加算ブロック              ５２ｄ…明下限記憶ブロック
５３…明暗判定器                ５３ａ…除算ブロック
５３ｂ…中間値記憶ブロック        ５３ｃ…明比較ブロック
５３ｄ…暗比較ブロック            ５３ｅ…中間比較ブロック
５３ｆ…明暗判定ブロック          ５３ｇ…直前値記憶回路
５３ｈ…比較ブロック                ５４…カウンタ
５５…余裕値記憶ブロック          ５６…ブロックアドレス制御回路
５６ａ…主走査区分設定ブロック    ５６ｂ…副走査区分設定ブロック
５６ｃ…区域制御ブロック
【図１】
0003994595.tif 000002
【図２】
0003994595.tif 000003
【図３】
0003994595.tif 000004
【図４】
0003994595.tif 000005
【図５】
0003994595.tif 000006
【図６】
0003994595.tif 000007
【図７】
0003994595.tif 000008
【図８】
0003994595.tif 000009
【図９】
0003994595.tif 000010
【図１０】
0003994595.tif 000011
【図１１】
0003994595.tif 000012
【図１２】
0003994595.tif 000013
【図１３】
0003994595.tif 000014
【図１４】
0003994595.tif 000015
【図１５】
0003994595.tif 000016
【図１６】
0003994595.tif 000017
【図１７】
0003994595.tif 000018
【図１８】
0003994595.tif 000019
【図１９】
0003994595.tif 000020
【図２０】
0003994595.tif 000021
【図２１】
0003994595.tif 000022
【図２２】
0003994595.tif 000023
【図２３】
0003994595.tif 000024
【図２４】
0003994595.tif 000025
【図２５】
0003994595.tif 000026
【図２６】
0003994595.tif 000027
【図２７】
0003994595.tif 000028
【図２８】
0003994595.tif 000029
【図２９】
0003994595.tif 000030
【図３０】
0003994595.tif 000031