光学的情報読取装置
【課題】 大きなメモリ容量を必要とせず、かつ、短時間で高精度の読取りを行うことのできる光学的情報読取装置を実現する。
【解決手段】 明暗パターンの各幅値を配列順および走査線別に累積して累積幅値を算出する。汚れe1の明暗の変化点P4(累積幅値180+1=181の位置)は、走査線L2上では汚れe1、つまり暗パターンに属する。しかし、変化点P4が走査線L1,L3上に存在すると仮定した場合、変化点P4は走査線L1,L3上では明パターンに属する。明パターンに属するとの判定回数が暗パターンに属するとの判定回数よりも多いため、変化点P4は明パターンに属すると決定する。同様に変化点P5は明パターンに属すると決定する。これにより、変化点P4,P5は、明暗パターンの明暗の境界として扱われない。このように累積幅値を用いるため、大きなメモリ容量を必要としない。
【解決手段】 明暗パターンの各幅値を配列順および走査線別に累積して累積幅値を算出する。汚れe1の明暗の変化点P4(累積幅値180+1=181の位置)は、走査線L2上では汚れe1、つまり暗パターンに属する。しかし、変化点P4が走査線L1,L3上に存在すると仮定した場合、変化点P4は走査線L1,L3上では明パターンに属する。明パターンに属するとの判定回数が暗パターンに属するとの判定回数よりも多いため、変化点P4は明パターンに属すると決定する。同様に変化点P5は明パターンに属すると決定する。これにより、変化点P4,P5は、明暗パターンの明暗の境界として扱われない。このように累積幅値を用いるため、大きなメモリ容量を必要としない。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、バーコードなどの1次元コードを光で複数回走査し、1次元コードにて反射した反射光に基づいて1次元コードを読取る光学的情報読取装置に関する。
【背景技術】
【0002】
従来、この種の光学的情報読取装置では、バーコードの明パターン上に汚れが存在した場合、その汚れの上を走査すると、誤って汚れを暗パターンとして読み取ってしまい、バーコードの読取り精度が低下するという問題があった。また、暗パターンがかすれている場合、そのかすれの上を走査すると、誤ってかすれを明パターンとして読み取ってしまい、バーコードの読取り精度が低下するという問題もあった。
【0003】
そこで、そのような問題を解決するものとして、特許文献1(特開平6−230931号公報)に記載のバーコード読取り装置が提案されている。この装置は、光源からの光ビームを光スキャナによって複数本の平行な走査ラインに沿ってバーコードを順次走査する構成を備える。
【0004】
そして、バーコードからの反射光を反射強度に対応した2値データに変換し、その2値データを走査ラインの走査方向と垂直な方向で総和する。次に、その総和値がバー閾値よりも大きな領域はバー領域とし、スペース閾値よりも大きな領域はスペース領域とする。そして、両閾値の間の領域は、汚れやかすれの領域と判断することにより、汚れやかすれの領域における2値データを除外し、バーコードの読取り精度を向上させる。
【特許文献1】特開平6−230931号公報(第21〜35段落、図2)
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかし、前述のバーコード読取り装置は、複数の走査ラインの2値データを格納しておき、かつ、2値データを走査ラインの走査方向と垂直な方向で総和した総和値を格納する必要があるため、データ量が大きくなり、大きなメモリ容量が必要となるという問題がある。
しかも、サンプリングクロックと同期させて総和値を算出するため、読取り時間が長くなるし、読取り時間を短縮するために総和値を算出する間隔を長くすると、読取り精度が低下するという問題もある。
【0006】
この発明は、上述の諸問題を解決するためになされたものであり、大きなメモリ容量を必要とせず、かつ、短時間で高精度の読取りを行うことのできる光学的情報読取装置を実現することを目的とする。
【課題を解決するための手段】
【0007】
この発明は、上記目的を達成するため、請求項1に記載の発明では、明パターンおよび暗パターン(以下、明暗パターンという)を配列して構成された1次元コード(B)を複数の走査線(L1〜Ln)に沿って光で走査する走査手段(2,3)と、前記走査により前記1次元コードにて反射した反射光に基づいて前記明暗パターンの各幅値を算出する第1の算出手段(S3)と、前記幅値を前記明暗パターンの配列順及び前記走査線別に累積して累積幅値を算出する累積手段(S7)と、前記累積幅値を基に各走査線上における明暗の変化点を求め、当該各変化点に基づいて前記明暗パターンの境界を抽出する境界抽出手段(S30〜S42)と、前記抽出された境界間の幅値を前記累積幅値に基づいて算出する第2の算出手段(S43)と、前記第1または第2の算出手段により算出された幅値に基づいて前記1次元コードを読取る読取手段(S9)と、を備えたという技術的手段を用いる。
【0008】
請求項2に記載の発明では、請求項1に記載の光学的情報読取装置において、前記境界抽出手段は、前記各累積幅値の中から所定の累積幅値を選択し、その選択した累積幅値により特定される走査線上の前記変化点が明暗パターンのどちらに属するかの判定を総ての走査線に対して行う第1の判定(S33)と、この第1の判定の判定結果のうち、同じ判定結果の数が閾値を超えたかを判定する第2の判定(S37,S39)とを、総ての累積幅値について行い、前記第2の判定の判定結果が変化する境界を前記明暗パターンの境界として前記第2の判定の判定結果に基づいて抽出するという技術的手段を用いる。
【0009】
請求項3に記載の発明では、請求項1または請求項2に記載の光学的情報読取装置において、各走査線に共通の明暗パターンであって走査線の一端に最も近い明暗パターン(以下、第1基準パターンという)を総ての走査線を対象に検索する第1の検索手段(S5)を備えており、前記累積手段は、前記検索された第1基準パターンのうち、前記一端に最も近いパターンの幅値を初期値とし、前記第1の算出手段により算出された幅値を前記初期値から走査線の他端まで配列順及び前記走査線別に累積するという技術的手段を用いる。
【0010】
請求項4に記載の発明では、請求項1ないし請求項3のいずれか1つに記載の光学的情報読取装置において、前記第1の算出手段は、算出した幅値が所定の幅値以下であった場合に、その算出した幅値とその前に算出した幅値と後に算出した幅値とを加算して1つの幅値とする加算手段(S50〜S59)をさらに備えるという技術的手段を用いる。
【0011】
請求項5に記載の発明では、請求項4に記載の光学的情報読取装置において、前記第1の算出手段により算出された幅値の出現度数を計数する第1の出現度数計数手段を備えており、前記加算手段は、前記第1の出現度数計数手段による計数値が所定値以上の幅値のうち、最小の幅値から前記所定の幅値を算定するという技術的手段を用いる。
【0012】
請求項6に記載の発明では、請求項1ないし請求項5のいずれか1つに記載の光学的情報読取装置において、各走査線間で対応するパターンに対する各走査線別の幅値のうち、所定の走査線に対する幅値と他の走査線に対する幅値との比の値を、前記他の走査線別に算出する第3の算出手段(S70〜S77)と、前記比の値を、算出の対象となった前記他の走査線の各幅値にそれぞれ乗ずることにより、前記他の走査線に対する各幅値を補正する第1の補正手段(S78)と、を備えたという技術的手段を用いる。
【0013】
請求項7に記載の発明では、請求項1ないし請求項5のいずれか1つに記載の光学的情報読取装置において、各走査線に共通の明暗パターンであって走査線の他端に最も近い明暗パターン(以下、第2基準パターンという)を総ての走査線を対象に検索する第2の検索手段と、前記第1基準パターンのうち前記一端に最も近いパターンから、前記第2基準パターンのうち前記他端に最も近いパターンまでに存在する明暗パターンの各幅値の合計(以下、合計幅値という)を各走査線別に算出する合計幅値算出手段と、前記算出された合計幅値のうち、所定の走査線に対する合計幅値と、他の走査線に対する合計幅値との比の値を前記他の走査線別に算出する第4の算出手段と、前記比の値を、算出の対象となった前記他の走査線の各幅値に乗ずることにより、前記他の走査線に対する各幅値を補正する第2の補正手段と、を備えたという技術的手段を用いる。
【0014】
請求項8に記載の発明では、請求項1ないし請求項7のいずれか1つに記載の光学的情報読取装置において、前記累積手段は、前記走査線の総数よりも少ない所定数の走査線を選択し、前記第1の算出手段により算出された幅値を前記初期値から走査線の他端まで配列順及び前記選択した各走査線別に累積し、さらに、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合は、前記選択する走査線の数を増やして再度前記累積を行うという技術的手段を用いる。
【0015】
請求項9に記載の発明では、請求項8に記載の光学的情報読取装置において、前記累積手段は、走査線の総数が3本以上の場合に最上部および最下部の走査線以外の走査線を最初に選択するという技術的手段を用いる。
【0016】
請求項10に記載の発明では、請求項2ないし請求項9のいずれか1つに記載の光学的情報読取装置において、前記第1の算出手段により算出された所定個数の幅値に基づいて、前記明暗パターンの幅値のそれぞれの出現度数を計数する第2の出現度数計数手段(S91)と、前記第2の出現度数計数手段によって計数された明暗パターンの幅値のそれぞれの出現度数に基づいて、明暗パターンのどちらが相対的に太く算出されている傾向にあるかを判定し、その判定結果に基づいて前記閾値を変更する閾値変更手段(S92〜S95)と、を備えたという技術的手段を用いる。
【0017】
なお、上記の各括弧内の符号は、後述する発明の実施形態との対応関係を示すものである。
【発明の効果】
【0018】
(請求項1に係る発明の作用)
明暗パターンの幅値は、明暗の変化点に対応した値であるため、その幅値を累積した累積幅値は、1次元コードを構成する明暗パターンの各明暗の変化点に対応した値となるので、累積幅値によって各明暗の変化点を特定することができる。また、正規の明暗パターンには総ての走査線が通過するのに対して、明パターン中の汚れや暗パターン中のかすれには特定の走査線のみが通過することが多い。
【0019】
つまり、汚れやかすれによって形成される変化点は、特定の走査線上にのみ存在し、他の走査線上には存在しないことが多い。
そこで、特定の走査線上にのみ存在するような変化点は、汚れやかすれに起因するものであるとみなし、明暗パターンの境界の抽出には用いないようにすることにより、汚れやかすれが明暗パターンとして誤って読取られないようにする。
【0020】
(請求項1に係る発明の効果)
走査線上における明暗の変化点を求めるときに用いる累積幅値は、明暗パターンの各幅を示す幅値を明暗パターンの配列順及び走査線別に累積した値であるため、累積幅値を格納しておくためのメモリ容量は、従来のように、複数の走査で得た2値データを格納しておくものよりも少なくすることができる。
しかも、累積幅値は、幅値を累積して算出するものであるため、従来のようにサンプリングクロックと同期させて2値データの総和値を算出するものよりも、1次元コードを短時間で読取ることができる。また、明暗の変化点は累積幅値と対応するため、高精度の読取りを行うことができる。
【0021】
(請求項2に係る発明の作用)
特定の走査線上にのみ存在する変化点は、汚れまたはかすれによるものであるとみなし、明暗パターンの境界の抽出には用いないようにする。特定の走査線上にのみ存在する変化点であるか否かは、選択した累積幅値により特定される走査線上の変化点が明暗パターンのどちらに属するかの判定を総ての走査線に対して行い(第1の判定)、その判定結果のうち、同じ判定結果の数が閾値を超えたかを判定することにより決定する(第2の判定)。
【0022】
例えば、走査線の総数が3本であり、閾値が1である場合に、変化点が明パターンに属するという判定結果の数が2または3であった場合は、明パターンと判定した判定結果の数が閾値を超えたと判定する。つまり、その変化点が存在する領域は明パターンであると判定する。ここで、暗パターンと同じ明暗レベルの汚れが明パターン中に存在し、その汚れを1本の走査線のみが通過していると仮定すると、明パターンから汚れによる暗パターンに変化する変化点は、その汚れを通過する走査線上にのみ存在し、他の2本の走査線上には存在しないことになる。
【0023】
このため、暗パターンと判定した判定結果の数は1であるのに対して明パターンと判定した判定結果の数は2であるため、明パターンと判定した判定結果の数が閾値を超えたと判定する。つまり、その変化点が存在する領域は明パターンであると判定する。この判定により、汚れの部分が暗パターンと判定されなかったことになる。
そして、上記のように汚れやかすれに起因する明暗パターンが除外された状態になったところで、第2の判定の判定結果が変化する境界を正規の明暗パターンの境界として第2の判定の判定結果に基づいて抽出する。
【0024】
(請求項2に係る発明の効果)
第1および第2の判定という判定処理を行うだけで、第2の判定の判定結果に基づく明暗パターンの境界を抽出することができるため、判定結果および境界を格納するメモリ領域として大きなメモリ容量が不要であり、かつ、短時間で読取りを行うことができる。
【0025】
(請求項3に係る発明の効果)
1次元コードを複数の走査線に沿って走査する場合、各走査線の一端に最も近い明暗パターンが相互に一致しない場合がある。例えば、光学的情報読取装置を操作する者の手振れにより、隣接する他の光学的情報の一部が走査されてしまう場合がある。このような場合に、各走査線の一端から累積幅値を算出すると、走査線間で累積幅値が異なるという事態が発生する。つまり、1次元コードの読取り精度が低下するおそれがある。
【0026】
そこで、各走査線に共通の明暗パターンであって走査線の一端に最も近い明暗パターンを第1基準パターンとし、第1基準パターンのうち、走査線の一端に最も近いパターンの幅値を初期値とし、初期値から走査線の他端までの幅値を配列順及び走査線別に累積するため、走査線間で累積幅値が異なるという事態の発生をなくすことができる。つまり、1次元コードの読取り精度を高めることができる。
【0027】
(請求項4に係る発明の効果)
所定の幅値以下の汚れやかすれが存在する場合に、その幅値と、その前に算出した幅値と、後に算出した幅値とを加算して1つの幅値とすることができるため、汚れやかすれを明暗パターンに吸収することにより、汚れやかすれに起因して1次元コードの読取り精度が低下してしまうおそれをなくすことができる。
【0028】
(請求項5に係る発明の効果)
汚れやかすれなどの幅値を算定する際に、出現度数と無関係に総ての幅値を対象とするのではなく、出現度数が所定値以上の幅値を対象とし、それらの幅値のうち、最小の幅値から算定するするため、読取りに要する時間を短縮することができる。
【0029】
(請求項6または請求項7に係る発明の効果)
読取り距離の違いなどが原因で、走査線によって明暗パターンの幅に差違が存在する場合であっても、補正によってその差違をなくすことができるため、1次元コードの読取り精度を高めることができる。
【0030】
(請求項8に係る発明の効果)
最初から総ての走査線を対象にして累積幅値を算出するのではなく、走査線の総数よりも少ない所定数の走査線を対象にして累積幅値を算出し、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合に、選択する走査線の数を増やして再度累積を行うため、1次元コードの読取り時間を短縮することができる。
【0031】
また、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合は、その差は、汚れやかすれに起因するものである可能性があるため、走査線の数を増やすことにより、結果として汚れやかすれを通過しない走査線が増え、請求項2に係る発明における同じ判定結果の数を増やすことができる。
従って、同じ判定結果の数が閾値を超える可能性が高くなるため、汚れやかすれが誤って明暗パターンと判定される可能性が低くなるので、読取り精度を高めることができる。
【0032】
(請求項9に係る発明の効果)
走査線の総数が3本以上のとき、1次元コードの一部に汚れが付いていた場合、他の走査線を増やして判定をするが、その場合に最初に最上部または最下部の走査線を選択すると、その後、走査線を上下方向に増やすことができない。
従って、最初に最上部および最下部の走査線以外の走査線を選択することによって、汚れやかすれを正確に検索することができる。
【0033】
(請求項10に係る発明の効果)
明暗パターンのどちらが相対的に太く算出されている傾向にあるかを判定し、その判定結果に基づいて、明暗パターンの境界の判定基準となる第2の判定における閾値を変更することができるため、印刷のにじみやかすれなどに起因する読取り誤差を是正し、読取り精度を高めることができる。
【発明を実施するための最良の形態】
【0034】
<第1実施形態>
この発明に係る実施形態について図を参照しながら説明する。
以下の各実施形態では、この発明に係る光学的情報読取装置として、1次元コードとしてのバーコードを読取るバーコードリーダを代表に説明する。なお、バーコードとは、EAN/UPC、インターリーブド2オブ5、コーダバー、コード39/128、スタンダード2オブ5、RSSなどの1次元コードを意味する。
【0035】
[主な電気的構成]
この実施形態に係るバーコードリーダの主な電気的構成について、それをブロックで示す図1を参照しながら説明する。
【0036】
バーコードリーダ1は、光源2、光スキャナ3、受光部4、信号処理部5および制御回路6などを備える。光スキャナ3は光源から出射された出射光により、バーコードB上を走査する。受光部4は、光スキャナ3の走査によりバーコードBの記録面にて反射した反射光を受光し、その受光した反射光の光強度に対応したアナログ信号を信号処理部5へ出力する。信号処理部5は、入力したアナログ信号を明暗のどちらかに対応した2値データに変換する。
【0037】
制御回路6は、CPU7、メモリ8,9およびROM10などを備える。CPU7は、信号処理部5から出力された2値データを計数し、その計数値を明暗パターンの幅を示す幅値としてメモリ8に格納する。また、CPU7は、メモリ8に格納された各幅値に基づいてコード体系を判別し、バーコードBにエンコード(符号化)されている光学的情報をデコード(復号)する。
また、CPU7は、バーコードBのデコード処理を行う際に、バーコードBに存在する汚れやかすれなどによって読取り精度が低下しないようにする処理を実行する。この処理内容に本願発明の特徴が存在するが、これについては後で詳述する。
【0038】
また、CPU7は、光源2、光スキャナ3、受光部4および信号処理部5などの動作を制御する。ROM10は、CPU7が各種の制御および処理などを実行するためのシステムプログラムおよびテーブルなどを格納する。システムプログラムおよびテーブルなどは、バーコードリーダ1の電源が立ち上がったときにROM10から読出され、メモリ9のワークエリアに一時的に格納される。
【0039】
この実施形態では、バーコードリーダ1は、レーザー方式を採用したハンディタイプであり、光源2としてレーザー光源を使用し、光スキャナ3として、光源2から出射されたレーザー光を反射する反射ミラーを使用する。反射ミラーは、揺動装置(図示せず)によって揺動し、反射したレーザー光をバーコードBの一端から他端に向けてバーコードB上を走査する。また、受光部4としてレーザー受光素子を使用する。
【0040】
図2は、バーコードB上を複数回走査した場合の走査線の説明図である。光スキャナ3は、バーコードB上を一端のマージンQから他端のマージンQを通過するように走査する。光スキャナ3は、バーコードBをn回走査する。レーザ光が通過したラインを走査線とすると、L1〜Lnの計n本の走査線が存在する。図2に示す例では、走査線L1〜Lnは、バーコードBの上端近傍から下端近傍まで等間隔に存在するが、バーコードリーダ1を操作するユーザの手振れの程度、あるいは、バーコードリーダ1およびバーコードBの相対的な位置関係などによって各走査線間の間隔が変化する。
【0041】
[バーコードの読取り処理]
次に、CPU7が実行するバーコードの読取り処理について図を参照して説明する。
【0042】
図3は、3本の走査線に対応するバーコードの説明図であり、(a)は走査開始位置のズレを示す説明図、(b)は走査開始位置を揃えた状態を示す説明図である。図4は、明パターン中に汚れが存在する場合の明暗の変化点および累積幅値を示す説明図である。図5は、幅値テーブルの説明図である。図6は、累積幅値テーブルの説明図である。図7は、明暗判定結果テーブルの説明図である。図8は、明暗パターンテーブルの説明図である。図9は、復元したバーコードのイメージを示す説明図である。
【0043】
図10は、CPUが実行するバーコードの読取り処理の流れを示すフローチャートである。図11は、CPUが図10のS5において実行する第1基準パターン設定処理の流れを示すフローチャートである。図12は、CPUが図10のS7において実行する累積幅値算出処理の流れを示すフローチャートである。図13は、CPUが図10のS8において実行する明暗パターンテーブル作成処理の流れを示すフローチャートである。
【0044】
(バーコードの説明)
ここでは、技術内容を分かり易くするため、図4に示す例を用いて説明する。図4に示すように、走査開始側の端部におけるバーコードBは、暗パターンba1と、明パターンsp1と、暗パターンba2とから構成されている。明パターンsp1の中に汚れe1が存在し、この汚れe1は、暗パターンと誤って読取られる程度の明度を有する。
【0045】
また、バーコードBを計3回走査し、バーコードBを通過する走査線がL1,L2,L3の計3本存在するものとする。また、3本の走査線は、いずれも暗パターンba1、明パターンsp1,暗パターンba2を通過しているが、汚れe1には、走査線L2の1本のみが通過しているものとする。このため、走査線L2に対応する明暗パターンは、暗パターンba1,明パターンsp2,汚れe1(暗パターン),明パターンsp3,暗パターンba2になっている。さらに、暗パターンba1の右端および暗パターンba2の両端が、印刷のにじみなどに起因していびつになっている。P1〜P11は、明暗の変化点を示す。
【0046】
(バーコード走査から幅値格納まで)
CPU7は、光源2および光スキャナ3(図1)を駆動してバーコードBを走査し(図10のステップ(以下、ステップをSと略す)1)、その走査により信号処理部5から出力される信号を2値化する(S2)。続いて、その2値化した信号に基づいて明暗パターンの幅値を算出し、その算出した幅値を幅値テーブルta1(図5)に算出順に格納する(S3)。例えば、2値化した信号の「0」を計数し、その計数値を明パターンの幅値として幅値テーブルta1に格納し、「1」を計数し、その計数値を暗パターンの幅値として幅値テーブルta1に格納する。
【0047】
図5に示す幅値テーブルta1は、幅値テーブル番号Ya=1〜nの計n個、つまり走査線の総数nと同数の幅値テーブルから構成されている。幅値テーブル番号Yaは、走査線L1〜Lnと対応している。
各幅値テーブルには、それぞれパターン番号Xa=1〜mの計m個の幅値が明暗パターンの配列順に対応付けられている。パターン番号Xaの個数mは明暗パターンの個数に対応している。図中ハッチングを施したパターンが暗パターンの幅値であり、白抜きのパターンが明パターンの幅値である。
【0048】
図5に示す例では、図4に示す明暗パターンの各幅値が配列順および走査線別に格納されている。幅値テーブル番号Ya=1には、走査線L1に対応する暗パターンba1,明パターンsp1,暗パターンba2の各幅値として、幅値100,210,130が配列順に格納されている。幅値テーブル番号Ya=2には、走査線L2に対応する暗パターンba1,明パターンsp2,汚れe1(暗パターン),明パターンsp3,暗パターンba2の各幅値として、幅値90,90,50,70,160が配列順に格納されている。幅値テーブル番号Ya=3には、走査線L3に対応する暗パターンba1,明パターンsp1,暗パターンba2の各幅値として、幅値120,170,180が配列順に格納されている。
【0049】
そして、CPU7は、n回の走査により発生したn本の走査線総てに対応する明暗パターンの幅値を幅値テーブルta1に格納したか否かを判定し(S4)、走査線n本分格納していないと判定した場合は(S4:No)、再度、バーコードBの走査から幅値格納までを実行する(S1〜S3)。ここでは、走査線の総数nが3本であるため、走査線3本分格納したときにS4において肯定判定する。
【0050】
(第1基準パターン設定処理)
そして、CPU7は、走査線n本分の幅値を格納したと判定した場合は(S4:Yes)、第1基準パターン設定処理を実行する(S5)。ここで、第1基準パターンについて説明する。
バーコードBの走査開始位置近傍に他のバーコードなどが存在すると、そのバーコードの一部を走査してしまうことがある。このため、図3(a)に示すように、バーコードBを3回走査したときの各走査線に対応する明暗パターンの組合せは、各走査線毎に異なる場合がある。しかし、明暗パターンの境界を正確に抽出するためには、総ての走査線において、できるだけ同じ組合せの明暗パターンの累積幅値を算出する必要がある。
【0051】
そこで、先ず、幅値テーブルta1を参照し(図11のS10)、各走査線に共通の明暗パターンのうち、走査線の始点に最も近い明暗パターンを検索する(S11)。続いて、検索された明暗パターンを第1基準パターンに設定し、その第1基準パターンの走査線始点側の端部を基準位置に設定する(S12)。
【0052】
各走査線に共通の明暗パターンの検索方法は、例えば、所定の走査線を選択し、その走査線の始点に最も近い複数個の明暗パターンを選択する。そして、その選択した明暗パターンの各幅値の比を算出し、その比と所定の誤差範囲内にある明暗パターンを各走査線毎に検索する。
【0053】
例えば、図3(a)において走査線L1を選択し、その始点に最も近い5個の明暗パターンB3を選択したとする。そして、その明暗パターンB3を構成する各パターンの幅値の比が先頭から順に2:1:1:1:2であったとすると、その比と所定の誤差範囲内にある明暗パターンを他の走査線L2,L3において検索する。共通の明暗パターンを検索できなかった場合は、共通の明暗パターンが検索されるまで検索対象となる明暗パターンを変更しながら検索を繰り返す。
【0054】
図3(a)に示す例では、明暗パターンB3が各走査線に共通であり、かつ、走査線の始点に最も近い。このため、図3(b)に示すように、明暗パターンB3を各走査線における先頭の明暗パターンに設定し、明暗パターンB3の走査線始点側端部を基準位置に設定する。図4に示す例は、第1基準パターン設定処理が終了し、基準位置が設定された状態である。
【0055】
(累積幅値算出)
そして、CPU7は、第1基準パターンを設定したか否かを判定し(図10のS6)、設定したと判定した場合は(S6:Yes)、累積幅値算出処理(累積幅値テーブル作成処理)を実行する(S7)。
CPU7は、幅値テーブル番号Ya=1(初期値)にセットし、幅値テーブル番号Ya=1に対応付けられた各幅値を累積する準備を行う(図12のS20)。幅値は2値データであるため、明暗の変化点を座標のように特定することができないが、幅値を累積して累積幅値を算出することにより、基準位置から計測した明暗の変化点を特定することができる。
【0056】
続いて、幅値テーブルta1を参照し、幅値テーブル番号Ya=1に対応付けられたパターン番号Xa=1の幅値を読出す(S21)。つまり、第1基準パターンのうち、走査線の始点に最も近いパターンの幅値を初期値として読出す。続いて、パターン番号(Xa←Xa+1)の幅値、つまり配列順で次の順位の幅値を読出し(S22)、前回算出した累積幅値とS22で読出した幅値とを累積して累積幅値を算出する(S23)。最初のルーチンでは、前回累積幅値は算出されていないため、S21において読出したパターン番号Xa=1の幅値と、S22において読出したパターン番号Xa=2の幅値とを加算する。図5に示す例では、パターン番号Xa=1の幅値は100であり、パターン番号Xa=2の幅値は210であるから、100+210=310を算出する。
【0057】
続いて、S23において算出した累積幅値を累積幅値テーブルta2に格納する(S24)。図6に示す累積幅値テーブルta2は、累積幅値テーブル番号Yb=1〜nの計n個、つまり走査線の総数nと同数の累積幅値テーブルから構成されている。累積幅値テーブル番号Ybは、走査線L1〜Lnと対応している。
【0058】
続いて、パターン番号Xa=mになったか否か、つまり幅値テーブル番号Ya=1に対応付けられた総ての幅値の累積を終了したか否かを判定し(S25)、終了していないと判定した場合は(S25:No)、次の累積幅値の算出を行う(S22〜S24)。図5に示す例では、パターン番号Xa=3の幅値が130であるから、前回S23において算出した累積幅値310に幅値130を累積して累積幅値440を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=1の累積幅値番号Xb=3に格納する。
【0059】
また、CPU7は、幅値テーブル番号Ya=1に対応付けられた総ての幅値の累積を終了したと判定した場合は(S25:Yes)、累積幅値を算出する対象を次の幅値テーブル番号(Ya←Ya+1)に設定する(S26)。続いて、幅値テーブル番号Ya>nであるか否か、つまり総ての幅値テーブルについて幅値の累積処理が終了したか否かを判定する(S27)。ここで、終了していないと判定した場合は(S27:No)、S26において設定した幅値テーブル番号に対応付けられた幅値の累積処理を実行する(S21〜S26)。
【0060】
図5に示す例では、幅値テーブルta1の幅値テーブル番号Ya=2に対応付けられた幅値の累積処理を実行する。つまり、パターン番号Xa=1,2の各幅値90と90を加算して累積幅値180を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=2の累積幅値番号Xb=2に格納する(図6)。続いて、前回算出した累積幅値180と、幅値テーブルta1の幅値テーブル番号Ya=2のパターン番号Xa=3の幅値50とを累積して累積幅値230を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=2の累積幅値番号Xb=3に格納する(図6)。つまり、汚れe1の幅値50も暗パターンと同様に取り扱い、累積幅値の算出に用いる。
【0061】
続いて、前回算出した累積幅値230と、幅値テーブルta1の幅値テーブル番号Ya=2のパターン番号Xa=4の幅値70とを累積して累積幅値300を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=2の累積幅値番号Xb=4に格納する(図6)。続いて、前回算出した累積幅値300と、幅値テーブルta1の幅値テーブル番号Ya=2のパターン番号Xa=5の幅値160とを累積して累積幅値460を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=2の累積幅値番号Xb=5に格納する(図6)。
【0062】
続いて、幅値テーブル番号Ya+1=3となり(S26)、Ya>3ではないため(S27:No)、次の幅値テーブル番号Ya=3に対応付けられた幅値の累積処理を実行する。つまり、幅値テーブル番号Ya=3のパターン番号Xa=1,2の各幅値120と170とを加算して累積幅値290を算出し、それを累積幅値テーブルta2の累積幅値番号Xb=2に格納する(図6)。続いて、前回算出した累積幅値290と、パターン番号Xa=3の幅値180とを累積して累積幅値470を算出し、それを累積幅値テーブルta2の累積幅値番号Xb=3に格納する(図6)。
【0063】
また、幅値テーブルta1のパターン番号Xa=1に対応する各走査線の幅値100,90,120は、累積幅値ではないが、そのまま累積幅値テーブルta2の累積幅値番号Xb=1に対応する各走査線の累積幅値として格納される。なお、図6に示すように、累積幅値テーブル番号Yb=1,3については、それぞれ累積幅値が3つずつ格納されており、累積幅値テーブル番号Yb=2については、累積幅値が5つ格納されているが、これは、走査線L2のみが汚れe1を通過しており、走査線L1,L3と比較して明パターンおよび暗パターンがそれぞれ1個ずつ多いためである。
【0064】
以上のように、幅値テーブルta1に格納されている各幅値を明暗パターンの配列順および走査線別に累積して累積幅値を算出し、それらを累積幅値格納テーブルta2に格納することにより、累積幅値テーブルta2を作成する。
【0065】
ところで、前述した従来のもの(特許文献1)は、特許公報の図2(e)に示されるように、複数の走査ラインの2値データを格納しておき、かつ、2値データを走査ラインの走査方向と垂直な方向で総和した総和値を格納する必要があるため、データ量が大きくなり、大きなメモリ容量を必要とする。
しかし、この実施形態の累積幅値テーブルta2は、累積幅値を示すデータのみを格納すれば良いため、大きなメモリ容量を必要としない。
従って、累積幅値テーブルta2が格納されるメモリ9のメモリ容量を格段に小さくすることができる。
【0066】
また、従来のものは、サンプリングクロックと同期させて2値データの総和値を算出するため、読取り時間が長くなるし、読取り時間を短縮するために総和値を算出する間隔を長くすると、読取り精度が低下するという問題もある。
しかし、この実施形態における累積幅値を算出する処理は、幅値を累積するだけであるため、従来のものよりも1次元コードを短時間で読取ることができる。
【0067】
(明暗パターンテーブルの作成)
次に、CPU7は、バーコードBの読取りに用いる明暗パターンテーブルを作成する(図10のS8)。
CPU7は、累積幅値テーブルta2の中から所定の累積幅値を1つ選択する(図13のS30)。例えば、累積幅値テーブルta2に格納されている累積幅値の中から最小の累積幅値を選択する。図6に示す例では、累積幅値テーブル番号Yb=2の累積幅値番号Xb=1に格納されている累積幅値90を選択する。
【0068】
続いて、選択した累積幅値に「1」を加算した値を、次のS32における判定に用いる判定値に設定する(S31)。続いて、S31において設定した判定値が各走査線上において明暗パターンのどちらに属するかを判定する(S32)。例えば、S30において累積幅値90を選択し、S31において91(=90+1)を判定値に設定した場合は、判定値91が走査線L1〜L3において明暗パターンのどちらに属するかを判定する。
【0069】
続いて、S32における判定結果が明パターンであったか否かを判定し(S33)、明パターンであったと判定した場合は(S33:Yes)、明パターンと判定した回数を示す明判定数に1を加算する(S34)。
【0070】
続いて、S32〜S34の処理を総ての走査線に対して行ったか否かを判定し(S35)、行っていないと判定した場合は(S35:No)、再度S32〜S34の処理を次の走査線に対して行う。
図7に示す明暗判定結果テーブルta3は、S33における判定結果を第1判定結果として、S34における加算結果を明判定数としてそれぞれ格納する。
【0071】
明暗パターンのどちらに属するかの判定は、幅値テーブルta1(図5)を参照し、判定値がパターン番号Xaの何番に属するかに基づいて行うことができる。
例えば、幅値テーブルta1において奇数のパターン番号Xa=1,3,5・・・に属する場合は暗パターンに属することになり、偶数のパターン番号Xa=2,4・・・に属する場合は明パターンに属することになる。
【0072】
例えば、判定値91は、幅値テーブル番号Ya=1のパターン番号Xa=1に格納されている幅値100よりも小さいから、パターン番号Xa=1に属し、暗パターンに属すると決定する。また、判定値91は、幅値テーブル番号Ya=2のパターン番号Xa=1に格納されている幅値90よりも大きいから、パターン番号Xa=2に属し、明パターンに属すると決定する。
【0073】
また、判定値91は、幅値テーブル番号Ya=3のパターン番号Xa=1に格納されている幅値120よりも小さいから、パターン番号Xa=1に属し、暗パターンに属すると決定する。
従って、判定値91の走査線L1〜L3に対する第1判定結果は、それぞれ暗パターン、明パターン、暗パターンとなるから、明判定数は「1」となる。
【0074】
また、S32〜S34の処理を総ての走査線に対して行ったと判定した場合は(S35:Yes)、明判定数が閾値Lwを超えたか否かを判定する(S36)。ここで、閾値Lwを超えたと判定した場合は(S36:Yes)、先のS31において設定した判定値は、明パターンに属すると決定する(S37)。
【0075】
また、明判定数が閾値Lwを超えていないと判定した場合は(S36:No)、先のS31において設定した判定値は、暗パターンに属すると決定する(S38)。また、S33において明パターンではなかったと判定した場合は(S33:No)、S32〜S34の処理を総ての走査線に対して行ったか否かを判定する(S35)。
【0076】
例えば、閾値Lw,Lbをそれぞれ走査線の総数の1/2に設定し、多数決の原理によって明暗パターンを決定する。図7に示す例では、閾値Lwが「1」に設定されており、判定値91に対する明判定数は「1」であるため、暗パターンに決定する。つまり、走査線の総数3本に対して閾値が「1」であるため、2本以上の走査線において同じ判定結果が出た場合は、その判定結果に対応するパターンに決定される。
【0077】
ここで、汚れe1が関係する判定値181,231に着目すると、図7に示すように、判定値181の走査線L1〜L3に対する第1判定結果は、それぞれ明パターン、暗パターン、明パターンであり、明判定数が2であるため、第2判定結果は明パターンになる。また、判定値231についても同様に第2判定結果は明パターンになる。
【0078】
つまり、判定値181〜231の区間は、明パターンであるとみなされ、汚れe1は暗パターンとみなされない。
これが、バーコードリーダ1の特徴であり、累積幅値に基づいて上記の各判定処理を実行することにより、汚れe1を明暗パターンから除外することができる。
【0079】
そして、CPU7は、累積幅値テーブルta2に格納されている総ての累積幅値についてS30〜S38の処理を実行したか否かを判定し(S39)、実行していないと判定した場合は(S39:No)、累積幅値テーブルta2の中から次の累積幅値を選択し、その累積幅値について再度S30〜S38を実行する。
【0080】
図7に示す例では、境界1〜境界2の区間における第2判定結果は明パターンになっており、累積幅値180〜230に存在する汚れe1(暗パターン)が明パターンと見なされている。これにより、汚れe1が暗パターンと判定されることによるバーコードBの読取り誤りをなくすことができる。
【0081】
また、総ての累積幅値についてS30〜S38の処理を実行したと判定した場合は(S39:Yes)、先のS37,S38において決定した結果が変化する境界を、読取対象とすべき明暗パターンの境界に決定する(S40)。
【0082】
例えば、図7に示す例では、判定値100と101との間で決定結果が暗パターンから明パターンに変化しているため、判定値100と101との間を、基準位置から数えて1番目の境界1に決定する。また、判定値300と301との間で決定結果が明パターンから暗パターンに変化しているため、判定値300と301との間を2番目の境界2に決定する。さらに、判定値460と461との間で決定結果が暗パターンから明パターンに変化しているため、判定値460と461との間を3番目の境界3に決定する。
【0083】
次に、CPU7は、S40において決定した各境界間の累積幅値に基づいて明暗パターンテーブルを作成する(S41)。例えば、図7に示す例では、基準位置から境界1までの幅値は100であるから、図8に示す明暗パターンテーブルta4のパターン番号Xd=1には幅値100が格納される。
【0084】
また、図7において境界1から境界2までの幅値は、200(=301−101)であるから、明暗パターンテーブルta4のパターン番号Xd=2には幅値200が格納される。また、図7において境界2から境界3までの幅値は、160(=461−301)であるから、明暗パターンテーブルta4のパターン番号Xd=3には幅値160が格納される。
【0085】
そして、CPU7は、S43において作成した明暗パターンテーブルta4の各幅値に基づいてコード体系を判別し、バーコードBにエンコード(符号化)されている光学的情報をデコード(復号)する。このデコードされた光学的情報を復元すると、図9に示すバーコードを得る。この復元したバーコードには、汚れe1が存在しないため、汚れe1に起因する読取り誤りが発生することがない。
なお、S33〜S37では、明パターンを基準として判定および処理を実行したが、暗パターンを基準として判定および処理を実行することもできる。また、S33において明パターンではないと判定した場合に(S33:No)、暗パターンと判定した回数を示す暗判定数に「1」を加算する処理を実行し、全走査線に対する判定が終了した後に、暗判定数が閾値を超えているか否かを判定する処理を実行し、肯定判定した場合に暗パターンに決定する処理を実行することもできる。
【0086】
[第1実施形態の効果]
(1)以上のように、第1実施形態のバーコードリーダ1を使用すれば、走査線上における明暗の変化点を求めるときに用いる累積幅値は、明暗パターンの各幅を示す幅値を明暗パターンの配列順及び走査線別に累積した値であるため、累積幅値を格納しておくためのメモリ容量は、従来のように、複数の走査ラインの2値データを格納しておき、かつ、2値データを走査ラインの走査方向と垂直な方向で総和した総和値を格納しておくものよりも少なくすることができる。
【0087】
(2)しかも、累積幅値は、幅値を累積して算出するものであるため、従来のようにサンプリングクロックと同期させて2値データの総和値を算出するものよりも、1次元コードを短時間で読取ることができる。また、明暗の変化点は累積幅値と対応するため、高精度の読取りを行うことができる。
【0088】
(3)明暗パターンテーブル作成処理(図13)では、主として判定処理(S32,S33,S36)を行うだけで第2判定結果(S37,S38)に基づく明暗パターンの境界を抽出することができるため(S40)、判定結果および境界を格納するメモリ領域として大きなメモリ容量が不要であり、かつ、短時間で読取りを行うことができる。
【0089】
(4)各走査線に共通の明暗パターンであって走査線の始点に最も近い明暗パターンを第1基準パターンとし、第1基準パターンのうち、走査線の始点に最も近いパターンの幅値を初期値とし、初期値から走査線の終点までの幅値を配列順及び走査線別に累積するため、走査線間で累積幅値が異なるという事態の発生をなくすことができる。つまり、1次元コードの読取り精度を高めることができる。
【0090】
<第2実施形態>
次に、この発明の第2実施形態について図を参照して説明する。
この実施形態に係るバーコードリーダは、汚れやかすれなどの極小パターンをその前後のパターンに吸収することを特徴とする。図14は、極小パターンの吸収を示す説明図である。図15は、極小パターン吸収処理の流れを示すフローチャートである。なお、この実施形態に係るバーコードリーダは、CPU7が極小パターン吸収処理を実行する以外は、前述の第1実施形態のバーコードリーダと同一であるため、同一部分の説明を省略する。
【0091】
図15に示す極小パターン吸収処理は、例えば、図10のS3において実行する。CPU7は、幅値テーブルta1の幅値テーブル番号Yaを初期値の「1」に設定し(図15のS50)、幅値テーブルta1から読込む幅値のパターン番号Xaを初期値の「1」に設定する(S51)。続いて、幅値テーブルta1から幅値を読出す(S52)。最初のルーチンでは、パターン番号Xa=1に対応する幅値を読出す。
【0092】
続いて、その読み込んだ幅値が、予め設定されている閾値以下であるか否かを判定する(S53)。この閾値は、例えば、1次元コードを構成する明暗パターンの幅値のうち、最小の幅値よりも小さい値に設定する。
ここで、閾値以下であると判定した場合は(S53:Yes)、今回S51において読出した幅値と、その読出した幅値の1つ前に格納されている幅値と、1つ後に格納されている幅値とを加算する(S54)。
【0093】
つまり、今回S51において読出した幅値が閾値以下である場合は、今回読出した幅値と、その読出した幅値の1つ前に格納されている幅値と、1つ後に格納されている幅値とを加算することにより、今回読出した幅値を前後の幅値に吸収させる。
続いて、S54において算出された加算値を新たな幅値として幅値テーブルta1に格納する(S55)。この場合、この新たな幅値は、上記の読出した幅値の1つ前に格納されている幅値に上書きし、上記の読出した幅値の1つ後に格納されている幅値以降の各幅値を1つずつ格納順位を繰り上げて移動するようにしてもよい。
【0094】
続いて、パターン番号Xaに「1」を加算し(S56)、パターン番号Xaがmになったか否か、つまり幅値テーブルの終端まで幅値を読出したか否かを判定する(S57)。ここで、幅値テーブルの終端まで幅値を読出していないと判定した場合は(S57:No)、先のS56において算出したパターン番号の幅値を読出し(S52)、極小パターンの吸収処理を実行する(S53〜S56)。
【0095】
また、幅値テーブルの終端まで幅値を読出したと判定した場合は(S57:Yes)、幅値テーブル番号Yaに「1」を加算する(S58)。続いて、幅値テーブル番号Yaが幅値テーブル番号の最後の番号nを超えたか否か、つまり総ての幅値テーブルに対して極小パターンの吸収処理を実行したか否かを判定する(S59)。ここで、否定判定した場合は(S59:No)、先のS58において算出した幅値テーブル番号の各幅値に対して極小パターンの吸収処理を実行する(S51〜S58)。
【0096】
図14に示す例は、本来であれば暗パターンba3は幅値11の1つの暗パターンであるが、その一部にかすれが存在するために、幅値6の暗パターンba3−aと、かすれに起因する幅値1の極小の明パターンf1と、幅値4の暗パターンba3−bとに分割されている。閾値が2カウント(2値データ2カウント分の幅値)であるとすると、極小の明パターンf1の幅値「1」と、その1つ前に位置する暗パターンba3−aの幅値6と、極小の明パターンf1の1つ後に位置する暗パターンba3−bの幅値4とを加算し、幅値11(=6+1+4)を算出する。これにより、極小パターンf1は、その前後の暗パターンに吸収され、元の暗パターンba3が復元される。
【0097】
また、上記の例では、暗パターン中にかすれに起因する極小の明パターンが存在する場合を説明したが、明パターン中に汚れに起因する極小の暗パターンが存在する場合も上記の極小パターン吸収処理を実行することにより、極小の暗パターンをその前後の明パターンに吸収させることができる。
【0098】
[第2実施形態の効果]
以上のように、第2実施形態に係るバーコードリーダを使用すれば、明暗パターン中に所定の幅値以下の汚れやかすれが存在する場合に、その幅値と、その前に算出した幅値と、後に算出した幅値とを加算して1つの幅値とすることができるため、汚れやかすれを明暗パターンに吸収することにより、汚れやかすれに起因して1次元コードの読取り精度が低下してしまうおそれをなくすことができる。
【0099】
<変更例>
上述の第2実施形態では、予め設定した閾値以下の幅値を有するパターンを極小パターンとみなす手法を説明したが、幅値として幅値テーブルta1における出現度数が所定値以上の幅値のうち、最小の幅値よりも小さい幅値のパターンを極小パターンとみなすこともできる。
【0100】
図16は、幅値の出現度数の分布を示すヒストグラムである。このヒストグラムは、算出された各幅値に基づいてCPU7が作成する。図示の例では、出現度数の閾値として予め出現度数R1が設定されており、出現度数R1以上の幅値のうち、最小の幅値よりも小さい幅値W1を極小パターン判定に用いる閾値に設定する。つまり、出現度数R1未満であり、かつ、幅値W1以下は、汚れ、かすれ、あるいは、信号処理部5(図1)から出力される信号のノイズ成分であるとみなす。
【0101】
上記の変更例に係るバーコードリーダを使用すれば、極小パターンを判定する際の閾値を算定する際に、幅値の出現度数と無関係に総ての幅値を対象とするのではなく、幅値の出現度数の分布を示すヒストグラムを作成して出現度数が所定値以上の幅値を対象とし、それらの幅値のうち、最小の幅値から算定するため、読取りに要する時間を短縮することができる。
例えば、幅値の出現度数と無関係に閾値を設定すると、小さなバーコードあるいは遠くのバーコードを読取った場合、取得した幅値が全体的に小さな値になり、設定していた幅値よりも小さな幅値の中に読取りに必要な幅値が含まれ、読取りから除去されてしまうことがある。この場合、作成する明暗パターンテーブルが誤った情報を含む可能性が高くなり、誤読あるいは不読の可能性が高まる。
そこで、上記の変更例のように、取得した幅値の出現度数に応じて閾値を設定できれば、誤読の可能性が低くなり、読取り精度が高まるし、あるいは、不読の可能性が低くなり、読取り時間が短縮できる。
なお、上記のヒストグラムを作成するためにCPU7が実行する処理が、この発明の請求項5に記載の第1の出現度数計数手段として機能する。
【0102】
<第3実施形態>
次に、この発明の第3実施形態について図を参照して説明する。
この実施形態に係るバーコードリーダは、走査線によって明暗パターンの幅に差違が存在する場合であっても、補正によってその差違をなくすことができることを特徴とする。
図17は、明暗パターンの幅値を補正する原理を示す説明図であり、(a)は補正前の明暗パターンの一部を示し、(b)は補正後の明暗パターンの一部を示す。図18は、幅値補正処理の流れを示すフローチャートである。
【0103】
CPU7は、前述の第1実施形態において説明した第1基準パターン設定処理(図11)と同じ処理を実行して第1基準パターンを設定する(図18のS70)。続いて、第1基準パターンがあるか否かを判定し(S71)、あると判定した場合は(S71:Yes)、幅値テーブルta1の中から所定の幅値テーブルを基準の幅値テーブルとして選択する(S72)。続いて、先のS72において選択した基準の幅値テーブルの中から幅値を一部の所定個数読出し(S73)、その読出した各幅値を累積し、その累積幅値をaとする(S74)。
【0104】
続いて、先のS72において選択した基準の幅値テーブル以外の幅値テーブルの中から所定の幅値テーブルを選択し、先のS73において基準の幅値テーブルから読出した各幅値に対応する幅値を読出す(S75)。続いて、その読出した各幅値を累積し、その累積幅値をbとする(S76)。続いて、先のS74において算出した累積幅値aと、先のS76において算出した累積幅値bとの比の値r(=a/b)を算出する(S77)。
【0105】
続いて、先のS75において幅値を読出した幅値テーブルに対応付けられた各幅値に先のS77において算出した比の値rを乗じ、各幅値を基準の幅値テーブルの幅値に補正する(S78)。続いて、総ての幅値テーブルに対する幅値の補正を終了したか否かを判定し(S79)、終了していないと判定した場合は(S79:No)、次の幅値テーブルに対して幅値の補正を実行する(S75〜S78)。以降、S79において肯定判定するまで各幅値テーブルに対して幅値の補正を実行する。これにより、基準の幅値テーブル以外の幅値テーブルに対応付けられた各幅値は、基準の幅値テーブルに対応付けられた各幅値に補正される。
【0106】
図17は、複数の走査線のうち3本の走査線に対応する明暗パターンB1,B2,B3を例示している。図中、A,B、Cは、それぞれ各明暗パターンに共通の7個の明暗パターンの各幅値の累積幅値を示す。各累積幅値の比は、a:b:cである。明暗パターンB1の各幅値が格納された幅値テーブルを基準の幅値テーブルとすると、明暗パターンB1の合計値Aと、明暗パターンB2の合計値Bとの比の値は、(a/b)となる。
【0107】
そこで、明暗パターンB2の各幅値に比の値(a/b)をそれぞれ乗じ、各幅値を明暗パターンB1の幅値に補正する。また、明暗パターンB1の合計値Aと、明暗パターンB3の合計値Cとの比の値は、(a/c)となるから、明暗パターンB3の各幅値に(a/c)をそれぞれ乗じ、各幅値を明暗パターンB1の幅値に補正する。
【0108】
[第3実施形態の効果]
以上のように、第3実施形態に係るバーコードリーダを使用すれば、読取り距離の違いなどが原因で、走査線によって明暗パターンの幅に差違が存在する場合であっても、補正によってその差違をなくすことができるため、1次元コードの読取り精度を高めることができる。
【0109】
<変更例>
明暗パターンの各幅値を総て合計した合計幅値の比の値を用いることもできる。この場合、各走査線に共通していない明暗パターンが走査線の終点側に存在すると、合計幅値を正確に算出することができない。そこで、各走査線に共通の明暗パターンであって走査線の終点に最も近い明暗パターンを第2基準パターンを抽出する。また、第1基準パターンも抽出する。これにより、各走査線に対応する各明暗パターンは、第1基準パターンから第2基準パターンまでが同一のパターンに揃う。
【0110】
そして、各明暗パターンについて第1基準パターンの先頭のパターンから、第2基準パターンの最後尾のパターンまでの各幅値を合計して合計幅値をそれぞれ算出する。次に、所定の走査線に対応する明暗パターンの合計幅値を基準の合計幅値とし、その基準の合計幅値と、上記所定の走査線以外の他の走査線に対応する明暗パターンの合計幅値との比の値を、他の走査線別に算出する。次に、算出した比の値を、算出の対象となった他の走査線の各幅値に乗じ、他の走査線に対応付けられた各幅値を上記所定の走査線に対応付けられた幅値に補正する。なお、第2基準パターンの抽出には、前述の第1基準パターンの抽出方法と同じ方法を用いることができる。
【0111】
上記の変更例に係るバーコードリーダを使用すれば、1次元コードの印刷のにじみなどが原因で、走査線によって明暗パターンの幅に差違が存在する場合であっても、補正によってその差違をなくすことができるため、1次元コードの読取り精度を高めることができる。
【0112】
なお、CPU7が上記の第2基準パターンを検索するために実行する処理が、この発明の請求項7に記載の第2の検索手段として機能し、合計幅値を算出するために実行する処理が合計幅値算出手段として機能し、比の値を他の走査線別に算出するために実行する処理が第4の算出手段として機能し、比の値を各幅値に乗じて補正するために実行する処理が第2の補正手段として機能する。
【0113】
<第4実施形態>
次に、この発明の第4実施形態について図を参照して説明する。
この実施形態に係るバーコードリーダは、最初から総ての走査線に対応する累積幅値を用いて明暗パターンを作成しないことを特徴とする。図19は、汚れと明暗パターンとの間隔を示す説明図である。図20は、明暗パターンテーブル作成処理の一部を省略して示すフローチャートである。
【0114】
図19に示す例は、明パターンsp1の中に小さな暗パターンe2が存在する状態を示している。最上部の走査線L1、走査線L4および最下部の走査線L5は、暗パターンe2を通過しないため、走査線L1,L4,L5に対応する明暗パターンは、暗パターンba1、明パターンsp1および暗パターンba2から構成されている。
一方、走査線L2,L3は暗パターンe2を通過するため、走査線L2,L3に対応する明暗パターンは、暗パターンba1、明パターンsp2、暗パターンe2、明パターンsp3および暗パターンba2から構成されている。
【0115】
ここで、明パターンsp2および暗パターンe2間の境界(2)と、明パターンsp3(明パターンsp1)および暗パターンba2間の境界(3)との間の幅ΔWが所定値以下である場合、つまり暗パターンe2が暗パターンba2の近くに存在する場合は、そのΔWは、暗パターンba2の印刷のにじみであるとみなし、暗パターンba2の本来の幅値がΔW分太くなったものとして処理することができる。
一方、幅ΔWが所定値を超える場合は、暗パターンe2は、暗パターンba2から離れた箇所に存在する汚れである可能性があるため、暗パターンe2が汚れであるか暗パターンであるかを判定し、汚れであった場合は、それを誤って暗パターンとして読取らないようにする必要がある。
【0116】
(明暗パターン作成処理)
CPU7は、累積幅値テーブルta2(図6)の中から優先累積幅値テーブルを選択する(図20のS29)。ここで、優先累積幅値テーブルとは、明暗パターンテーブル作成処理を実行するに際して最初に用いる累積幅値テーブルのことで、累積幅値テーブルta2の中から最上部および最下部の走査線に対応する累積幅値テーブルを除いたものから、所定数を選択して設定する。
【0117】
続いて、S29において選択した優先累積幅値テーブルの中から所定の累積幅値を選択する(S30a)。例えば、優先累積幅値テーブルの中で最小の累積幅値を選択する。続いて、S30aにおいて選択した所定の累積幅値と、優先累積幅値テーブルにおける他の各累積幅値(上記所定の累積幅値以外の累積幅値)との差をそれぞれ算出する(S30b)。続いて、S30bにおいて算出した差が所定値を超える累積幅値が格納されているか否かを判定し(S30c)、格納されていると判定した場合は(S30c:Yes)、S29において選択した優先累積幅値テーブル以外の累積幅値テーブルも選択する(S30d)。
【0118】
つまり、所定の累積幅値との差が所定値を超える累積幅値が存在するということは、図19に示すような暗パターンe2が存在する可能性がある。そこで、暗パターンe2が汚れであるか否かの判定精度を高めるために走査線の最上部および最下部に対応する累積幅値テーブルも選択する。
【0119】
図19に示す例において、走査線L2〜L4に対応する累積幅値テーブルが優先累積幅値テーブルに設定されているとする。また、暗パターンe2に起因して形成された明パターンsp3の累積幅値と明パターンsp2の累積幅値との差がΔWであるとする。そして、ΔWが所定値を超えている場合は、暗パターンe2は汚れである可能性があるため、最上部の走査線L1および最下部の走査線L5を増やし、暗パターンe2が汚れであるか否かの判定精度を高める。
【0120】
以降、前述の第1実施形態における明暗パターンテーブル作成処理(図13)と同じ処理(S31〜S41)を実行することにより、汚れである暗パターンe2が誤って暗パターンとして読取られることのない明暗パターンテーブルを作成する。
なお、暗パターン中にかすれが存在する場合も上記の明暗パターンテーブル作成処理を実行することにより、かすれである明パターンが誤って明パターンとして読取られることのない明暗パターンテーブルを作成する
【0121】
[第4実施形態の効果]
(1)以上のように、第4実施形態に係るバーコードリーダを使用すれば、最初から総ての走査線を対象にして累積幅値を算出するのではなく、最上部および最下部の走査線以外の所定数の走査線を対象にして累積幅値を算出し、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合に、総ての走査線を対象にして再度累積を行うため、1次元コードの読取り時間を短縮することができる。
【0122】
(2)また、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合は、その差は、汚れやかすれに起因するものである可能性があるため、走査線の数を増やすことにより、汚れやかすれを通過しない走査線を増やし、汚れやかすれであるか否かの判定精度を高めることができる。
【0123】
<変更例>
明暗パターンテーブル作成処理において、最初は、総ての走査線のうち、中央付近の所定数の走査線を選択し、汚れやかすれが存在する可能性が出た場合に、走査線を上下方向に所定数ずつ増やし、それでも汚れやかすれであると判定できない場合にさらに走査線を上下方向に所定数ずつ増やすようにすることもできる。
また、走査線を増やす方向は限定されるものではなく、例えば、最上部から最下部に向けて増やしてもよく、最下部から最上部に向けて増やしてもよい。
【0124】
<第5実施形態>
次に、この発明の第5実施形態について図を参照して説明する。
この実施形態に係るバーコードリーダは、明暗パターンの一方の幅値が太く算出される傾向にあることに起因する読取り精度の低下をなくすことができることを特徴とする。図21は、明パターン幅および暗パターン幅の各出現度数分布を示すヒストグラムである。図22は、閾値決定処理の流れを示すフローチャートである。
【0125】
(閾値決定処理)
この閾値決定処理は、前述の明暗パターンテーブル作成処理(図13)のS30の前、あるいは、S30〜S35のどこかで実行する。CPU7は、暗パターンに決定する際の基準となる閾値Lbおよび明パターンに決定する際の基準となる閾値Lwの基準値をそれぞれ決定する(図22のS90)。続いて、明パターン幅および暗パターン幅の出現度数分布をそれぞれ作成する(S91)。
【0126】
続いて、S91において作成した各出現度数分布に基づき、明パターン幅および暗パターン幅の各出現度数分布のピーク値地点における幅値の大小を比較する(S92)。続いて、暗パターン幅値が明パターン幅値よりも大きいか否か、つまり暗パターン幅値が相対的に太く算出される傾向にあるか否かを判定する(S93)。
例えば、図21に示す例では、明パターン幅値のピーク値地点における幅値が、暗パターン幅値のピーク値地点における幅値よりも大きいため、明パターン幅値が相対的に太く算出される傾向にあると判定する(S93:No)。
【0127】
ここで、暗パターン幅値が相対的に太く算出される傾向にあると判定した場合は(S93:Yes)、閾値Lwの値を基準値から所定割合だけ小さく設定する(S94)。つまり、閾値Lwを小さくすることで、各走査線において明パターンと判定され易くする。これにより、暗パターン幅値が相対的に太く算出される傾向を是正することができる。
【0128】
また、暗パターン幅値が相対的に太く算出される傾向にはない、つまり図21に示す例のように、明パターン幅値が相対的に太く算出される傾向にあると判定した場合は(S93:No)、閾値Lwの値を基準値から所定割合だけ大きく設定する(S95)。つまり、閾値Lwを大きくすることにより、各走査線において明パターンと判定され難くする。これにより、明パターン幅値が相対的に太く算出される傾向を是正することができる。
【0129】
[第5実施形態の効果]
以上のように、第5実施形態に係るバーコードリーダを使用すれば、明暗パターンのどちらが相対的に太く算出されている傾向にあるかを判定し、その判定結果に基づいて、明暗パターンの境界の判定基準となる閾値を変更することができるため、印刷のにじみやかすれなどに起因する読取り誤差を是正し、読取り精度を高めることができる。
【0130】
<他の実施形態>
(1)この発明は、受光部4としてCCD(Charge Coupled Device)を1次元に配列してなるラインセンサ(リニアセンサ)を用いたバーコードリーダにも適用することもできる。また、光源およびスキャナを備えない、自然光のバーコードにおける反射を利用した方式のバーコードリーダにも適用することもできる。
【0131】
(2)幅値補正処理(図18)では、所定個数の幅値を累積した累積幅値の比の値に基づいて各幅値を補正したが、所定個数の幅値の平均値を算出し、その平均値の比の値に基づいて各幅値を補正することもできる。
【0132】
(3)閾値決定処理(図22)において、明パターン幅値のピーク値地点における幅値と、暗パターン幅値のピーク値地点における幅値との差の大きさに対応して閾値の増減割合を決定することもできる。
【図面の簡単な説明】
【0133】
【図1】この発明の実施形態に係るバーコードリーダの主な電気的構成ブロックで示す説明図である。
【図2】バーコードB上を複数回走査した場合の走査線の説明図である。
【図3】3本の走査線に対応するバーコードの説明図であり、(a)は走査開始位置のズレを示す説明図、(b)は走査開始位置を揃えた状態を示す説明図である。
【図4】明パターン中に汚れが存在する場合の明暗の変化点および累積幅値を示す説明図である。
【図5】幅値テーブルの説明図である。
【図6】累積幅値テーブルの説明図である。
【図7】明暗判定結果テーブルの説明図である。
【図8】明暗パターンテーブルの説明図である。
【図9】復元したバーコードのイメージを示す説明図である。
【図10】CPUが実行するバーコードの読取り処理の流れを示すフローチャートである。
【図11】CPUが図10のS5において実行する第1基準パターン設定処理の流れを示すフローチャートである。
【図12】CPUが図10のS7において実行する累積幅値算出処理の流れを示すフローチャートである。
【図13】CPUが図10のS8において実行する明暗パターンテーブル作成処理の流れを示すフローチャートである。
【図14】極小パターンの吸収を示す説明図である。
【図15】極小パターン吸収処理の流れを示すフローチャートである。
【図16】幅値の出現度数を示すヒストグラムである。
【図17】明暗パターンの幅値を補正する原理を示す説明図であり、(a)は補正前の明暗パターンの一部を示し、(b)は補正後の明暗パターンの一部を示す。
【図18】幅値補正処理の流れを示すフローチャートである。
【図19】汚れと明暗パターンとの間隔を示す説明図である。
【図20】明暗パターンテーブル作成処理の一部を省略して示すフローチャートである。
【図21】明パターン幅および暗パターン幅の各出現度数分布を示すヒストグラムである。
【図22】閾値決定処理の流れを示すフローチャートである。
【符号の説明】
【0134】
1・・バーコードリーダ(光学的情報読取装置)、2・・光源(走査手段)、
3・・光スキャナ(走査手段)、4・・受光部、5・・信号処理部、6・・制御回路、 7・・CPU、8,9・・メモリ、B・・バーコード、L1〜Ln・・走査線。
【技術分野】
【0001】
この発明は、バーコードなどの1次元コードを光で複数回走査し、1次元コードにて反射した反射光に基づいて1次元コードを読取る光学的情報読取装置に関する。
【背景技術】
【0002】
従来、この種の光学的情報読取装置では、バーコードの明パターン上に汚れが存在した場合、その汚れの上を走査すると、誤って汚れを暗パターンとして読み取ってしまい、バーコードの読取り精度が低下するという問題があった。また、暗パターンがかすれている場合、そのかすれの上を走査すると、誤ってかすれを明パターンとして読み取ってしまい、バーコードの読取り精度が低下するという問題もあった。
【0003】
そこで、そのような問題を解決するものとして、特許文献1(特開平6−230931号公報)に記載のバーコード読取り装置が提案されている。この装置は、光源からの光ビームを光スキャナによって複数本の平行な走査ラインに沿ってバーコードを順次走査する構成を備える。
【0004】
そして、バーコードからの反射光を反射強度に対応した2値データに変換し、その2値データを走査ラインの走査方向と垂直な方向で総和する。次に、その総和値がバー閾値よりも大きな領域はバー領域とし、スペース閾値よりも大きな領域はスペース領域とする。そして、両閾値の間の領域は、汚れやかすれの領域と判断することにより、汚れやかすれの領域における2値データを除外し、バーコードの読取り精度を向上させる。
【特許文献1】特開平6−230931号公報(第21〜35段落、図2)
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかし、前述のバーコード読取り装置は、複数の走査ラインの2値データを格納しておき、かつ、2値データを走査ラインの走査方向と垂直な方向で総和した総和値を格納する必要があるため、データ量が大きくなり、大きなメモリ容量が必要となるという問題がある。
しかも、サンプリングクロックと同期させて総和値を算出するため、読取り時間が長くなるし、読取り時間を短縮するために総和値を算出する間隔を長くすると、読取り精度が低下するという問題もある。
【0006】
この発明は、上述の諸問題を解決するためになされたものであり、大きなメモリ容量を必要とせず、かつ、短時間で高精度の読取りを行うことのできる光学的情報読取装置を実現することを目的とする。
【課題を解決するための手段】
【0007】
この発明は、上記目的を達成するため、請求項1に記載の発明では、明パターンおよび暗パターン(以下、明暗パターンという)を配列して構成された1次元コード(B)を複数の走査線(L1〜Ln)に沿って光で走査する走査手段(2,3)と、前記走査により前記1次元コードにて反射した反射光に基づいて前記明暗パターンの各幅値を算出する第1の算出手段(S3)と、前記幅値を前記明暗パターンの配列順及び前記走査線別に累積して累積幅値を算出する累積手段(S7)と、前記累積幅値を基に各走査線上における明暗の変化点を求め、当該各変化点に基づいて前記明暗パターンの境界を抽出する境界抽出手段(S30〜S42)と、前記抽出された境界間の幅値を前記累積幅値に基づいて算出する第2の算出手段(S43)と、前記第1または第2の算出手段により算出された幅値に基づいて前記1次元コードを読取る読取手段(S9)と、を備えたという技術的手段を用いる。
【0008】
請求項2に記載の発明では、請求項1に記載の光学的情報読取装置において、前記境界抽出手段は、前記各累積幅値の中から所定の累積幅値を選択し、その選択した累積幅値により特定される走査線上の前記変化点が明暗パターンのどちらに属するかの判定を総ての走査線に対して行う第1の判定(S33)と、この第1の判定の判定結果のうち、同じ判定結果の数が閾値を超えたかを判定する第2の判定(S37,S39)とを、総ての累積幅値について行い、前記第2の判定の判定結果が変化する境界を前記明暗パターンの境界として前記第2の判定の判定結果に基づいて抽出するという技術的手段を用いる。
【0009】
請求項3に記載の発明では、請求項1または請求項2に記載の光学的情報読取装置において、各走査線に共通の明暗パターンであって走査線の一端に最も近い明暗パターン(以下、第1基準パターンという)を総ての走査線を対象に検索する第1の検索手段(S5)を備えており、前記累積手段は、前記検索された第1基準パターンのうち、前記一端に最も近いパターンの幅値を初期値とし、前記第1の算出手段により算出された幅値を前記初期値から走査線の他端まで配列順及び前記走査線別に累積するという技術的手段を用いる。
【0010】
請求項4に記載の発明では、請求項1ないし請求項3のいずれか1つに記載の光学的情報読取装置において、前記第1の算出手段は、算出した幅値が所定の幅値以下であった場合に、その算出した幅値とその前に算出した幅値と後に算出した幅値とを加算して1つの幅値とする加算手段(S50〜S59)をさらに備えるという技術的手段を用いる。
【0011】
請求項5に記載の発明では、請求項4に記載の光学的情報読取装置において、前記第1の算出手段により算出された幅値の出現度数を計数する第1の出現度数計数手段を備えており、前記加算手段は、前記第1の出現度数計数手段による計数値が所定値以上の幅値のうち、最小の幅値から前記所定の幅値を算定するという技術的手段を用いる。
【0012】
請求項6に記載の発明では、請求項1ないし請求項5のいずれか1つに記載の光学的情報読取装置において、各走査線間で対応するパターンに対する各走査線別の幅値のうち、所定の走査線に対する幅値と他の走査線に対する幅値との比の値を、前記他の走査線別に算出する第3の算出手段(S70〜S77)と、前記比の値を、算出の対象となった前記他の走査線の各幅値にそれぞれ乗ずることにより、前記他の走査線に対する各幅値を補正する第1の補正手段(S78)と、を備えたという技術的手段を用いる。
【0013】
請求項7に記載の発明では、請求項1ないし請求項5のいずれか1つに記載の光学的情報読取装置において、各走査線に共通の明暗パターンであって走査線の他端に最も近い明暗パターン(以下、第2基準パターンという)を総ての走査線を対象に検索する第2の検索手段と、前記第1基準パターンのうち前記一端に最も近いパターンから、前記第2基準パターンのうち前記他端に最も近いパターンまでに存在する明暗パターンの各幅値の合計(以下、合計幅値という)を各走査線別に算出する合計幅値算出手段と、前記算出された合計幅値のうち、所定の走査線に対する合計幅値と、他の走査線に対する合計幅値との比の値を前記他の走査線別に算出する第4の算出手段と、前記比の値を、算出の対象となった前記他の走査線の各幅値に乗ずることにより、前記他の走査線に対する各幅値を補正する第2の補正手段と、を備えたという技術的手段を用いる。
【0014】
請求項8に記載の発明では、請求項1ないし請求項7のいずれか1つに記載の光学的情報読取装置において、前記累積手段は、前記走査線の総数よりも少ない所定数の走査線を選択し、前記第1の算出手段により算出された幅値を前記初期値から走査線の他端まで配列順及び前記選択した各走査線別に累積し、さらに、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合は、前記選択する走査線の数を増やして再度前記累積を行うという技術的手段を用いる。
【0015】
請求項9に記載の発明では、請求項8に記載の光学的情報読取装置において、前記累積手段は、走査線の総数が3本以上の場合に最上部および最下部の走査線以外の走査線を最初に選択するという技術的手段を用いる。
【0016】
請求項10に記載の発明では、請求項2ないし請求項9のいずれか1つに記載の光学的情報読取装置において、前記第1の算出手段により算出された所定個数の幅値に基づいて、前記明暗パターンの幅値のそれぞれの出現度数を計数する第2の出現度数計数手段(S91)と、前記第2の出現度数計数手段によって計数された明暗パターンの幅値のそれぞれの出現度数に基づいて、明暗パターンのどちらが相対的に太く算出されている傾向にあるかを判定し、その判定結果に基づいて前記閾値を変更する閾値変更手段(S92〜S95)と、を備えたという技術的手段を用いる。
【0017】
なお、上記の各括弧内の符号は、後述する発明の実施形態との対応関係を示すものである。
【発明の効果】
【0018】
(請求項1に係る発明の作用)
明暗パターンの幅値は、明暗の変化点に対応した値であるため、その幅値を累積した累積幅値は、1次元コードを構成する明暗パターンの各明暗の変化点に対応した値となるので、累積幅値によって各明暗の変化点を特定することができる。また、正規の明暗パターンには総ての走査線が通過するのに対して、明パターン中の汚れや暗パターン中のかすれには特定の走査線のみが通過することが多い。
【0019】
つまり、汚れやかすれによって形成される変化点は、特定の走査線上にのみ存在し、他の走査線上には存在しないことが多い。
そこで、特定の走査線上にのみ存在するような変化点は、汚れやかすれに起因するものであるとみなし、明暗パターンの境界の抽出には用いないようにすることにより、汚れやかすれが明暗パターンとして誤って読取られないようにする。
【0020】
(請求項1に係る発明の効果)
走査線上における明暗の変化点を求めるときに用いる累積幅値は、明暗パターンの各幅を示す幅値を明暗パターンの配列順及び走査線別に累積した値であるため、累積幅値を格納しておくためのメモリ容量は、従来のように、複数の走査で得た2値データを格納しておくものよりも少なくすることができる。
しかも、累積幅値は、幅値を累積して算出するものであるため、従来のようにサンプリングクロックと同期させて2値データの総和値を算出するものよりも、1次元コードを短時間で読取ることができる。また、明暗の変化点は累積幅値と対応するため、高精度の読取りを行うことができる。
【0021】
(請求項2に係る発明の作用)
特定の走査線上にのみ存在する変化点は、汚れまたはかすれによるものであるとみなし、明暗パターンの境界の抽出には用いないようにする。特定の走査線上にのみ存在する変化点であるか否かは、選択した累積幅値により特定される走査線上の変化点が明暗パターンのどちらに属するかの判定を総ての走査線に対して行い(第1の判定)、その判定結果のうち、同じ判定結果の数が閾値を超えたかを判定することにより決定する(第2の判定)。
【0022】
例えば、走査線の総数が3本であり、閾値が1である場合に、変化点が明パターンに属するという判定結果の数が2または3であった場合は、明パターンと判定した判定結果の数が閾値を超えたと判定する。つまり、その変化点が存在する領域は明パターンであると判定する。ここで、暗パターンと同じ明暗レベルの汚れが明パターン中に存在し、その汚れを1本の走査線のみが通過していると仮定すると、明パターンから汚れによる暗パターンに変化する変化点は、その汚れを通過する走査線上にのみ存在し、他の2本の走査線上には存在しないことになる。
【0023】
このため、暗パターンと判定した判定結果の数は1であるのに対して明パターンと判定した判定結果の数は2であるため、明パターンと判定した判定結果の数が閾値を超えたと判定する。つまり、その変化点が存在する領域は明パターンであると判定する。この判定により、汚れの部分が暗パターンと判定されなかったことになる。
そして、上記のように汚れやかすれに起因する明暗パターンが除外された状態になったところで、第2の判定の判定結果が変化する境界を正規の明暗パターンの境界として第2の判定の判定結果に基づいて抽出する。
【0024】
(請求項2に係る発明の効果)
第1および第2の判定という判定処理を行うだけで、第2の判定の判定結果に基づく明暗パターンの境界を抽出することができるため、判定結果および境界を格納するメモリ領域として大きなメモリ容量が不要であり、かつ、短時間で読取りを行うことができる。
【0025】
(請求項3に係る発明の効果)
1次元コードを複数の走査線に沿って走査する場合、各走査線の一端に最も近い明暗パターンが相互に一致しない場合がある。例えば、光学的情報読取装置を操作する者の手振れにより、隣接する他の光学的情報の一部が走査されてしまう場合がある。このような場合に、各走査線の一端から累積幅値を算出すると、走査線間で累積幅値が異なるという事態が発生する。つまり、1次元コードの読取り精度が低下するおそれがある。
【0026】
そこで、各走査線に共通の明暗パターンであって走査線の一端に最も近い明暗パターンを第1基準パターンとし、第1基準パターンのうち、走査線の一端に最も近いパターンの幅値を初期値とし、初期値から走査線の他端までの幅値を配列順及び走査線別に累積するため、走査線間で累積幅値が異なるという事態の発生をなくすことができる。つまり、1次元コードの読取り精度を高めることができる。
【0027】
(請求項4に係る発明の効果)
所定の幅値以下の汚れやかすれが存在する場合に、その幅値と、その前に算出した幅値と、後に算出した幅値とを加算して1つの幅値とすることができるため、汚れやかすれを明暗パターンに吸収することにより、汚れやかすれに起因して1次元コードの読取り精度が低下してしまうおそれをなくすことができる。
【0028】
(請求項5に係る発明の効果)
汚れやかすれなどの幅値を算定する際に、出現度数と無関係に総ての幅値を対象とするのではなく、出現度数が所定値以上の幅値を対象とし、それらの幅値のうち、最小の幅値から算定するするため、読取りに要する時間を短縮することができる。
【0029】
(請求項6または請求項7に係る発明の効果)
読取り距離の違いなどが原因で、走査線によって明暗パターンの幅に差違が存在する場合であっても、補正によってその差違をなくすことができるため、1次元コードの読取り精度を高めることができる。
【0030】
(請求項8に係る発明の効果)
最初から総ての走査線を対象にして累積幅値を算出するのではなく、走査線の総数よりも少ない所定数の走査線を対象にして累積幅値を算出し、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合に、選択する走査線の数を増やして再度累積を行うため、1次元コードの読取り時間を短縮することができる。
【0031】
また、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合は、その差は、汚れやかすれに起因するものである可能性があるため、走査線の数を増やすことにより、結果として汚れやかすれを通過しない走査線が増え、請求項2に係る発明における同じ判定結果の数を増やすことができる。
従って、同じ判定結果の数が閾値を超える可能性が高くなるため、汚れやかすれが誤って明暗パターンと判定される可能性が低くなるので、読取り精度を高めることができる。
【0032】
(請求項9に係る発明の効果)
走査線の総数が3本以上のとき、1次元コードの一部に汚れが付いていた場合、他の走査線を増やして判定をするが、その場合に最初に最上部または最下部の走査線を選択すると、その後、走査線を上下方向に増やすことができない。
従って、最初に最上部および最下部の走査線以外の走査線を選択することによって、汚れやかすれを正確に検索することができる。
【0033】
(請求項10に係る発明の効果)
明暗パターンのどちらが相対的に太く算出されている傾向にあるかを判定し、その判定結果に基づいて、明暗パターンの境界の判定基準となる第2の判定における閾値を変更することができるため、印刷のにじみやかすれなどに起因する読取り誤差を是正し、読取り精度を高めることができる。
【発明を実施するための最良の形態】
【0034】
<第1実施形態>
この発明に係る実施形態について図を参照しながら説明する。
以下の各実施形態では、この発明に係る光学的情報読取装置として、1次元コードとしてのバーコードを読取るバーコードリーダを代表に説明する。なお、バーコードとは、EAN/UPC、インターリーブド2オブ5、コーダバー、コード39/128、スタンダード2オブ5、RSSなどの1次元コードを意味する。
【0035】
[主な電気的構成]
この実施形態に係るバーコードリーダの主な電気的構成について、それをブロックで示す図1を参照しながら説明する。
【0036】
バーコードリーダ1は、光源2、光スキャナ3、受光部4、信号処理部5および制御回路6などを備える。光スキャナ3は光源から出射された出射光により、バーコードB上を走査する。受光部4は、光スキャナ3の走査によりバーコードBの記録面にて反射した反射光を受光し、その受光した反射光の光強度に対応したアナログ信号を信号処理部5へ出力する。信号処理部5は、入力したアナログ信号を明暗のどちらかに対応した2値データに変換する。
【0037】
制御回路6は、CPU7、メモリ8,9およびROM10などを備える。CPU7は、信号処理部5から出力された2値データを計数し、その計数値を明暗パターンの幅を示す幅値としてメモリ8に格納する。また、CPU7は、メモリ8に格納された各幅値に基づいてコード体系を判別し、バーコードBにエンコード(符号化)されている光学的情報をデコード(復号)する。
また、CPU7は、バーコードBのデコード処理を行う際に、バーコードBに存在する汚れやかすれなどによって読取り精度が低下しないようにする処理を実行する。この処理内容に本願発明の特徴が存在するが、これについては後で詳述する。
【0038】
また、CPU7は、光源2、光スキャナ3、受光部4および信号処理部5などの動作を制御する。ROM10は、CPU7が各種の制御および処理などを実行するためのシステムプログラムおよびテーブルなどを格納する。システムプログラムおよびテーブルなどは、バーコードリーダ1の電源が立ち上がったときにROM10から読出され、メモリ9のワークエリアに一時的に格納される。
【0039】
この実施形態では、バーコードリーダ1は、レーザー方式を採用したハンディタイプであり、光源2としてレーザー光源を使用し、光スキャナ3として、光源2から出射されたレーザー光を反射する反射ミラーを使用する。反射ミラーは、揺動装置(図示せず)によって揺動し、反射したレーザー光をバーコードBの一端から他端に向けてバーコードB上を走査する。また、受光部4としてレーザー受光素子を使用する。
【0040】
図2は、バーコードB上を複数回走査した場合の走査線の説明図である。光スキャナ3は、バーコードB上を一端のマージンQから他端のマージンQを通過するように走査する。光スキャナ3は、バーコードBをn回走査する。レーザ光が通過したラインを走査線とすると、L1〜Lnの計n本の走査線が存在する。図2に示す例では、走査線L1〜Lnは、バーコードBの上端近傍から下端近傍まで等間隔に存在するが、バーコードリーダ1を操作するユーザの手振れの程度、あるいは、バーコードリーダ1およびバーコードBの相対的な位置関係などによって各走査線間の間隔が変化する。
【0041】
[バーコードの読取り処理]
次に、CPU7が実行するバーコードの読取り処理について図を参照して説明する。
【0042】
図3は、3本の走査線に対応するバーコードの説明図であり、(a)は走査開始位置のズレを示す説明図、(b)は走査開始位置を揃えた状態を示す説明図である。図4は、明パターン中に汚れが存在する場合の明暗の変化点および累積幅値を示す説明図である。図5は、幅値テーブルの説明図である。図6は、累積幅値テーブルの説明図である。図7は、明暗判定結果テーブルの説明図である。図8は、明暗パターンテーブルの説明図である。図9は、復元したバーコードのイメージを示す説明図である。
【0043】
図10は、CPUが実行するバーコードの読取り処理の流れを示すフローチャートである。図11は、CPUが図10のS5において実行する第1基準パターン設定処理の流れを示すフローチャートである。図12は、CPUが図10のS7において実行する累積幅値算出処理の流れを示すフローチャートである。図13は、CPUが図10のS8において実行する明暗パターンテーブル作成処理の流れを示すフローチャートである。
【0044】
(バーコードの説明)
ここでは、技術内容を分かり易くするため、図4に示す例を用いて説明する。図4に示すように、走査開始側の端部におけるバーコードBは、暗パターンba1と、明パターンsp1と、暗パターンba2とから構成されている。明パターンsp1の中に汚れe1が存在し、この汚れe1は、暗パターンと誤って読取られる程度の明度を有する。
【0045】
また、バーコードBを計3回走査し、バーコードBを通過する走査線がL1,L2,L3の計3本存在するものとする。また、3本の走査線は、いずれも暗パターンba1、明パターンsp1,暗パターンba2を通過しているが、汚れe1には、走査線L2の1本のみが通過しているものとする。このため、走査線L2に対応する明暗パターンは、暗パターンba1,明パターンsp2,汚れe1(暗パターン),明パターンsp3,暗パターンba2になっている。さらに、暗パターンba1の右端および暗パターンba2の両端が、印刷のにじみなどに起因していびつになっている。P1〜P11は、明暗の変化点を示す。
【0046】
(バーコード走査から幅値格納まで)
CPU7は、光源2および光スキャナ3(図1)を駆動してバーコードBを走査し(図10のステップ(以下、ステップをSと略す)1)、その走査により信号処理部5から出力される信号を2値化する(S2)。続いて、その2値化した信号に基づいて明暗パターンの幅値を算出し、その算出した幅値を幅値テーブルta1(図5)に算出順に格納する(S3)。例えば、2値化した信号の「0」を計数し、その計数値を明パターンの幅値として幅値テーブルta1に格納し、「1」を計数し、その計数値を暗パターンの幅値として幅値テーブルta1に格納する。
【0047】
図5に示す幅値テーブルta1は、幅値テーブル番号Ya=1〜nの計n個、つまり走査線の総数nと同数の幅値テーブルから構成されている。幅値テーブル番号Yaは、走査線L1〜Lnと対応している。
各幅値テーブルには、それぞれパターン番号Xa=1〜mの計m個の幅値が明暗パターンの配列順に対応付けられている。パターン番号Xaの個数mは明暗パターンの個数に対応している。図中ハッチングを施したパターンが暗パターンの幅値であり、白抜きのパターンが明パターンの幅値である。
【0048】
図5に示す例では、図4に示す明暗パターンの各幅値が配列順および走査線別に格納されている。幅値テーブル番号Ya=1には、走査線L1に対応する暗パターンba1,明パターンsp1,暗パターンba2の各幅値として、幅値100,210,130が配列順に格納されている。幅値テーブル番号Ya=2には、走査線L2に対応する暗パターンba1,明パターンsp2,汚れe1(暗パターン),明パターンsp3,暗パターンba2の各幅値として、幅値90,90,50,70,160が配列順に格納されている。幅値テーブル番号Ya=3には、走査線L3に対応する暗パターンba1,明パターンsp1,暗パターンba2の各幅値として、幅値120,170,180が配列順に格納されている。
【0049】
そして、CPU7は、n回の走査により発生したn本の走査線総てに対応する明暗パターンの幅値を幅値テーブルta1に格納したか否かを判定し(S4)、走査線n本分格納していないと判定した場合は(S4:No)、再度、バーコードBの走査から幅値格納までを実行する(S1〜S3)。ここでは、走査線の総数nが3本であるため、走査線3本分格納したときにS4において肯定判定する。
【0050】
(第1基準パターン設定処理)
そして、CPU7は、走査線n本分の幅値を格納したと判定した場合は(S4:Yes)、第1基準パターン設定処理を実行する(S5)。ここで、第1基準パターンについて説明する。
バーコードBの走査開始位置近傍に他のバーコードなどが存在すると、そのバーコードの一部を走査してしまうことがある。このため、図3(a)に示すように、バーコードBを3回走査したときの各走査線に対応する明暗パターンの組合せは、各走査線毎に異なる場合がある。しかし、明暗パターンの境界を正確に抽出するためには、総ての走査線において、できるだけ同じ組合せの明暗パターンの累積幅値を算出する必要がある。
【0051】
そこで、先ず、幅値テーブルta1を参照し(図11のS10)、各走査線に共通の明暗パターンのうち、走査線の始点に最も近い明暗パターンを検索する(S11)。続いて、検索された明暗パターンを第1基準パターンに設定し、その第1基準パターンの走査線始点側の端部を基準位置に設定する(S12)。
【0052】
各走査線に共通の明暗パターンの検索方法は、例えば、所定の走査線を選択し、その走査線の始点に最も近い複数個の明暗パターンを選択する。そして、その選択した明暗パターンの各幅値の比を算出し、その比と所定の誤差範囲内にある明暗パターンを各走査線毎に検索する。
【0053】
例えば、図3(a)において走査線L1を選択し、その始点に最も近い5個の明暗パターンB3を選択したとする。そして、その明暗パターンB3を構成する各パターンの幅値の比が先頭から順に2:1:1:1:2であったとすると、その比と所定の誤差範囲内にある明暗パターンを他の走査線L2,L3において検索する。共通の明暗パターンを検索できなかった場合は、共通の明暗パターンが検索されるまで検索対象となる明暗パターンを変更しながら検索を繰り返す。
【0054】
図3(a)に示す例では、明暗パターンB3が各走査線に共通であり、かつ、走査線の始点に最も近い。このため、図3(b)に示すように、明暗パターンB3を各走査線における先頭の明暗パターンに設定し、明暗パターンB3の走査線始点側端部を基準位置に設定する。図4に示す例は、第1基準パターン設定処理が終了し、基準位置が設定された状態である。
【0055】
(累積幅値算出)
そして、CPU7は、第1基準パターンを設定したか否かを判定し(図10のS6)、設定したと判定した場合は(S6:Yes)、累積幅値算出処理(累積幅値テーブル作成処理)を実行する(S7)。
CPU7は、幅値テーブル番号Ya=1(初期値)にセットし、幅値テーブル番号Ya=1に対応付けられた各幅値を累積する準備を行う(図12のS20)。幅値は2値データであるため、明暗の変化点を座標のように特定することができないが、幅値を累積して累積幅値を算出することにより、基準位置から計測した明暗の変化点を特定することができる。
【0056】
続いて、幅値テーブルta1を参照し、幅値テーブル番号Ya=1に対応付けられたパターン番号Xa=1の幅値を読出す(S21)。つまり、第1基準パターンのうち、走査線の始点に最も近いパターンの幅値を初期値として読出す。続いて、パターン番号(Xa←Xa+1)の幅値、つまり配列順で次の順位の幅値を読出し(S22)、前回算出した累積幅値とS22で読出した幅値とを累積して累積幅値を算出する(S23)。最初のルーチンでは、前回累積幅値は算出されていないため、S21において読出したパターン番号Xa=1の幅値と、S22において読出したパターン番号Xa=2の幅値とを加算する。図5に示す例では、パターン番号Xa=1の幅値は100であり、パターン番号Xa=2の幅値は210であるから、100+210=310を算出する。
【0057】
続いて、S23において算出した累積幅値を累積幅値テーブルta2に格納する(S24)。図6に示す累積幅値テーブルta2は、累積幅値テーブル番号Yb=1〜nの計n個、つまり走査線の総数nと同数の累積幅値テーブルから構成されている。累積幅値テーブル番号Ybは、走査線L1〜Lnと対応している。
【0058】
続いて、パターン番号Xa=mになったか否か、つまり幅値テーブル番号Ya=1に対応付けられた総ての幅値の累積を終了したか否かを判定し(S25)、終了していないと判定した場合は(S25:No)、次の累積幅値の算出を行う(S22〜S24)。図5に示す例では、パターン番号Xa=3の幅値が130であるから、前回S23において算出した累積幅値310に幅値130を累積して累積幅値440を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=1の累積幅値番号Xb=3に格納する。
【0059】
また、CPU7は、幅値テーブル番号Ya=1に対応付けられた総ての幅値の累積を終了したと判定した場合は(S25:Yes)、累積幅値を算出する対象を次の幅値テーブル番号(Ya←Ya+1)に設定する(S26)。続いて、幅値テーブル番号Ya>nであるか否か、つまり総ての幅値テーブルについて幅値の累積処理が終了したか否かを判定する(S27)。ここで、終了していないと判定した場合は(S27:No)、S26において設定した幅値テーブル番号に対応付けられた幅値の累積処理を実行する(S21〜S26)。
【0060】
図5に示す例では、幅値テーブルta1の幅値テーブル番号Ya=2に対応付けられた幅値の累積処理を実行する。つまり、パターン番号Xa=1,2の各幅値90と90を加算して累積幅値180を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=2の累積幅値番号Xb=2に格納する(図6)。続いて、前回算出した累積幅値180と、幅値テーブルta1の幅値テーブル番号Ya=2のパターン番号Xa=3の幅値50とを累積して累積幅値230を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=2の累積幅値番号Xb=3に格納する(図6)。つまり、汚れe1の幅値50も暗パターンと同様に取り扱い、累積幅値の算出に用いる。
【0061】
続いて、前回算出した累積幅値230と、幅値テーブルta1の幅値テーブル番号Ya=2のパターン番号Xa=4の幅値70とを累積して累積幅値300を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=2の累積幅値番号Xb=4に格納する(図6)。続いて、前回算出した累積幅値300と、幅値テーブルta1の幅値テーブル番号Ya=2のパターン番号Xa=5の幅値160とを累積して累積幅値460を算出し、それを累積幅値テーブルta2の累積幅値テーブル番号Yb=2の累積幅値番号Xb=5に格納する(図6)。
【0062】
続いて、幅値テーブル番号Ya+1=3となり(S26)、Ya>3ではないため(S27:No)、次の幅値テーブル番号Ya=3に対応付けられた幅値の累積処理を実行する。つまり、幅値テーブル番号Ya=3のパターン番号Xa=1,2の各幅値120と170とを加算して累積幅値290を算出し、それを累積幅値テーブルta2の累積幅値番号Xb=2に格納する(図6)。続いて、前回算出した累積幅値290と、パターン番号Xa=3の幅値180とを累積して累積幅値470を算出し、それを累積幅値テーブルta2の累積幅値番号Xb=3に格納する(図6)。
【0063】
また、幅値テーブルta1のパターン番号Xa=1に対応する各走査線の幅値100,90,120は、累積幅値ではないが、そのまま累積幅値テーブルta2の累積幅値番号Xb=1に対応する各走査線の累積幅値として格納される。なお、図6に示すように、累積幅値テーブル番号Yb=1,3については、それぞれ累積幅値が3つずつ格納されており、累積幅値テーブル番号Yb=2については、累積幅値が5つ格納されているが、これは、走査線L2のみが汚れe1を通過しており、走査線L1,L3と比較して明パターンおよび暗パターンがそれぞれ1個ずつ多いためである。
【0064】
以上のように、幅値テーブルta1に格納されている各幅値を明暗パターンの配列順および走査線別に累積して累積幅値を算出し、それらを累積幅値格納テーブルta2に格納することにより、累積幅値テーブルta2を作成する。
【0065】
ところで、前述した従来のもの(特許文献1)は、特許公報の図2(e)に示されるように、複数の走査ラインの2値データを格納しておき、かつ、2値データを走査ラインの走査方向と垂直な方向で総和した総和値を格納する必要があるため、データ量が大きくなり、大きなメモリ容量を必要とする。
しかし、この実施形態の累積幅値テーブルta2は、累積幅値を示すデータのみを格納すれば良いため、大きなメモリ容量を必要としない。
従って、累積幅値テーブルta2が格納されるメモリ9のメモリ容量を格段に小さくすることができる。
【0066】
また、従来のものは、サンプリングクロックと同期させて2値データの総和値を算出するため、読取り時間が長くなるし、読取り時間を短縮するために総和値を算出する間隔を長くすると、読取り精度が低下するという問題もある。
しかし、この実施形態における累積幅値を算出する処理は、幅値を累積するだけであるため、従来のものよりも1次元コードを短時間で読取ることができる。
【0067】
(明暗パターンテーブルの作成)
次に、CPU7は、バーコードBの読取りに用いる明暗パターンテーブルを作成する(図10のS8)。
CPU7は、累積幅値テーブルta2の中から所定の累積幅値を1つ選択する(図13のS30)。例えば、累積幅値テーブルta2に格納されている累積幅値の中から最小の累積幅値を選択する。図6に示す例では、累積幅値テーブル番号Yb=2の累積幅値番号Xb=1に格納されている累積幅値90を選択する。
【0068】
続いて、選択した累積幅値に「1」を加算した値を、次のS32における判定に用いる判定値に設定する(S31)。続いて、S31において設定した判定値が各走査線上において明暗パターンのどちらに属するかを判定する(S32)。例えば、S30において累積幅値90を選択し、S31において91(=90+1)を判定値に設定した場合は、判定値91が走査線L1〜L3において明暗パターンのどちらに属するかを判定する。
【0069】
続いて、S32における判定結果が明パターンであったか否かを判定し(S33)、明パターンであったと判定した場合は(S33:Yes)、明パターンと判定した回数を示す明判定数に1を加算する(S34)。
【0070】
続いて、S32〜S34の処理を総ての走査線に対して行ったか否かを判定し(S35)、行っていないと判定した場合は(S35:No)、再度S32〜S34の処理を次の走査線に対して行う。
図7に示す明暗判定結果テーブルta3は、S33における判定結果を第1判定結果として、S34における加算結果を明判定数としてそれぞれ格納する。
【0071】
明暗パターンのどちらに属するかの判定は、幅値テーブルta1(図5)を参照し、判定値がパターン番号Xaの何番に属するかに基づいて行うことができる。
例えば、幅値テーブルta1において奇数のパターン番号Xa=1,3,5・・・に属する場合は暗パターンに属することになり、偶数のパターン番号Xa=2,4・・・に属する場合は明パターンに属することになる。
【0072】
例えば、判定値91は、幅値テーブル番号Ya=1のパターン番号Xa=1に格納されている幅値100よりも小さいから、パターン番号Xa=1に属し、暗パターンに属すると決定する。また、判定値91は、幅値テーブル番号Ya=2のパターン番号Xa=1に格納されている幅値90よりも大きいから、パターン番号Xa=2に属し、明パターンに属すると決定する。
【0073】
また、判定値91は、幅値テーブル番号Ya=3のパターン番号Xa=1に格納されている幅値120よりも小さいから、パターン番号Xa=1に属し、暗パターンに属すると決定する。
従って、判定値91の走査線L1〜L3に対する第1判定結果は、それぞれ暗パターン、明パターン、暗パターンとなるから、明判定数は「1」となる。
【0074】
また、S32〜S34の処理を総ての走査線に対して行ったと判定した場合は(S35:Yes)、明判定数が閾値Lwを超えたか否かを判定する(S36)。ここで、閾値Lwを超えたと判定した場合は(S36:Yes)、先のS31において設定した判定値は、明パターンに属すると決定する(S37)。
【0075】
また、明判定数が閾値Lwを超えていないと判定した場合は(S36:No)、先のS31において設定した判定値は、暗パターンに属すると決定する(S38)。また、S33において明パターンではなかったと判定した場合は(S33:No)、S32〜S34の処理を総ての走査線に対して行ったか否かを判定する(S35)。
【0076】
例えば、閾値Lw,Lbをそれぞれ走査線の総数の1/2に設定し、多数決の原理によって明暗パターンを決定する。図7に示す例では、閾値Lwが「1」に設定されており、判定値91に対する明判定数は「1」であるため、暗パターンに決定する。つまり、走査線の総数3本に対して閾値が「1」であるため、2本以上の走査線において同じ判定結果が出た場合は、その判定結果に対応するパターンに決定される。
【0077】
ここで、汚れe1が関係する判定値181,231に着目すると、図7に示すように、判定値181の走査線L1〜L3に対する第1判定結果は、それぞれ明パターン、暗パターン、明パターンであり、明判定数が2であるため、第2判定結果は明パターンになる。また、判定値231についても同様に第2判定結果は明パターンになる。
【0078】
つまり、判定値181〜231の区間は、明パターンであるとみなされ、汚れe1は暗パターンとみなされない。
これが、バーコードリーダ1の特徴であり、累積幅値に基づいて上記の各判定処理を実行することにより、汚れe1を明暗パターンから除外することができる。
【0079】
そして、CPU7は、累積幅値テーブルta2に格納されている総ての累積幅値についてS30〜S38の処理を実行したか否かを判定し(S39)、実行していないと判定した場合は(S39:No)、累積幅値テーブルta2の中から次の累積幅値を選択し、その累積幅値について再度S30〜S38を実行する。
【0080】
図7に示す例では、境界1〜境界2の区間における第2判定結果は明パターンになっており、累積幅値180〜230に存在する汚れe1(暗パターン)が明パターンと見なされている。これにより、汚れe1が暗パターンと判定されることによるバーコードBの読取り誤りをなくすことができる。
【0081】
また、総ての累積幅値についてS30〜S38の処理を実行したと判定した場合は(S39:Yes)、先のS37,S38において決定した結果が変化する境界を、読取対象とすべき明暗パターンの境界に決定する(S40)。
【0082】
例えば、図7に示す例では、判定値100と101との間で決定結果が暗パターンから明パターンに変化しているため、判定値100と101との間を、基準位置から数えて1番目の境界1に決定する。また、判定値300と301との間で決定結果が明パターンから暗パターンに変化しているため、判定値300と301との間を2番目の境界2に決定する。さらに、判定値460と461との間で決定結果が暗パターンから明パターンに変化しているため、判定値460と461との間を3番目の境界3に決定する。
【0083】
次に、CPU7は、S40において決定した各境界間の累積幅値に基づいて明暗パターンテーブルを作成する(S41)。例えば、図7に示す例では、基準位置から境界1までの幅値は100であるから、図8に示す明暗パターンテーブルta4のパターン番号Xd=1には幅値100が格納される。
【0084】
また、図7において境界1から境界2までの幅値は、200(=301−101)であるから、明暗パターンテーブルta4のパターン番号Xd=2には幅値200が格納される。また、図7において境界2から境界3までの幅値は、160(=461−301)であるから、明暗パターンテーブルta4のパターン番号Xd=3には幅値160が格納される。
【0085】
そして、CPU7は、S43において作成した明暗パターンテーブルta4の各幅値に基づいてコード体系を判別し、バーコードBにエンコード(符号化)されている光学的情報をデコード(復号)する。このデコードされた光学的情報を復元すると、図9に示すバーコードを得る。この復元したバーコードには、汚れe1が存在しないため、汚れe1に起因する読取り誤りが発生することがない。
なお、S33〜S37では、明パターンを基準として判定および処理を実行したが、暗パターンを基準として判定および処理を実行することもできる。また、S33において明パターンではないと判定した場合に(S33:No)、暗パターンと判定した回数を示す暗判定数に「1」を加算する処理を実行し、全走査線に対する判定が終了した後に、暗判定数が閾値を超えているか否かを判定する処理を実行し、肯定判定した場合に暗パターンに決定する処理を実行することもできる。
【0086】
[第1実施形態の効果]
(1)以上のように、第1実施形態のバーコードリーダ1を使用すれば、走査線上における明暗の変化点を求めるときに用いる累積幅値は、明暗パターンの各幅を示す幅値を明暗パターンの配列順及び走査線別に累積した値であるため、累積幅値を格納しておくためのメモリ容量は、従来のように、複数の走査ラインの2値データを格納しておき、かつ、2値データを走査ラインの走査方向と垂直な方向で総和した総和値を格納しておくものよりも少なくすることができる。
【0087】
(2)しかも、累積幅値は、幅値を累積して算出するものであるため、従来のようにサンプリングクロックと同期させて2値データの総和値を算出するものよりも、1次元コードを短時間で読取ることができる。また、明暗の変化点は累積幅値と対応するため、高精度の読取りを行うことができる。
【0088】
(3)明暗パターンテーブル作成処理(図13)では、主として判定処理(S32,S33,S36)を行うだけで第2判定結果(S37,S38)に基づく明暗パターンの境界を抽出することができるため(S40)、判定結果および境界を格納するメモリ領域として大きなメモリ容量が不要であり、かつ、短時間で読取りを行うことができる。
【0089】
(4)各走査線に共通の明暗パターンであって走査線の始点に最も近い明暗パターンを第1基準パターンとし、第1基準パターンのうち、走査線の始点に最も近いパターンの幅値を初期値とし、初期値から走査線の終点までの幅値を配列順及び走査線別に累積するため、走査線間で累積幅値が異なるという事態の発生をなくすことができる。つまり、1次元コードの読取り精度を高めることができる。
【0090】
<第2実施形態>
次に、この発明の第2実施形態について図を参照して説明する。
この実施形態に係るバーコードリーダは、汚れやかすれなどの極小パターンをその前後のパターンに吸収することを特徴とする。図14は、極小パターンの吸収を示す説明図である。図15は、極小パターン吸収処理の流れを示すフローチャートである。なお、この実施形態に係るバーコードリーダは、CPU7が極小パターン吸収処理を実行する以外は、前述の第1実施形態のバーコードリーダと同一であるため、同一部分の説明を省略する。
【0091】
図15に示す極小パターン吸収処理は、例えば、図10のS3において実行する。CPU7は、幅値テーブルta1の幅値テーブル番号Yaを初期値の「1」に設定し(図15のS50)、幅値テーブルta1から読込む幅値のパターン番号Xaを初期値の「1」に設定する(S51)。続いて、幅値テーブルta1から幅値を読出す(S52)。最初のルーチンでは、パターン番号Xa=1に対応する幅値を読出す。
【0092】
続いて、その読み込んだ幅値が、予め設定されている閾値以下であるか否かを判定する(S53)。この閾値は、例えば、1次元コードを構成する明暗パターンの幅値のうち、最小の幅値よりも小さい値に設定する。
ここで、閾値以下であると判定した場合は(S53:Yes)、今回S51において読出した幅値と、その読出した幅値の1つ前に格納されている幅値と、1つ後に格納されている幅値とを加算する(S54)。
【0093】
つまり、今回S51において読出した幅値が閾値以下である場合は、今回読出した幅値と、その読出した幅値の1つ前に格納されている幅値と、1つ後に格納されている幅値とを加算することにより、今回読出した幅値を前後の幅値に吸収させる。
続いて、S54において算出された加算値を新たな幅値として幅値テーブルta1に格納する(S55)。この場合、この新たな幅値は、上記の読出した幅値の1つ前に格納されている幅値に上書きし、上記の読出した幅値の1つ後に格納されている幅値以降の各幅値を1つずつ格納順位を繰り上げて移動するようにしてもよい。
【0094】
続いて、パターン番号Xaに「1」を加算し(S56)、パターン番号Xaがmになったか否か、つまり幅値テーブルの終端まで幅値を読出したか否かを判定する(S57)。ここで、幅値テーブルの終端まで幅値を読出していないと判定した場合は(S57:No)、先のS56において算出したパターン番号の幅値を読出し(S52)、極小パターンの吸収処理を実行する(S53〜S56)。
【0095】
また、幅値テーブルの終端まで幅値を読出したと判定した場合は(S57:Yes)、幅値テーブル番号Yaに「1」を加算する(S58)。続いて、幅値テーブル番号Yaが幅値テーブル番号の最後の番号nを超えたか否か、つまり総ての幅値テーブルに対して極小パターンの吸収処理を実行したか否かを判定する(S59)。ここで、否定判定した場合は(S59:No)、先のS58において算出した幅値テーブル番号の各幅値に対して極小パターンの吸収処理を実行する(S51〜S58)。
【0096】
図14に示す例は、本来であれば暗パターンba3は幅値11の1つの暗パターンであるが、その一部にかすれが存在するために、幅値6の暗パターンba3−aと、かすれに起因する幅値1の極小の明パターンf1と、幅値4の暗パターンba3−bとに分割されている。閾値が2カウント(2値データ2カウント分の幅値)であるとすると、極小の明パターンf1の幅値「1」と、その1つ前に位置する暗パターンba3−aの幅値6と、極小の明パターンf1の1つ後に位置する暗パターンba3−bの幅値4とを加算し、幅値11(=6+1+4)を算出する。これにより、極小パターンf1は、その前後の暗パターンに吸収され、元の暗パターンba3が復元される。
【0097】
また、上記の例では、暗パターン中にかすれに起因する極小の明パターンが存在する場合を説明したが、明パターン中に汚れに起因する極小の暗パターンが存在する場合も上記の極小パターン吸収処理を実行することにより、極小の暗パターンをその前後の明パターンに吸収させることができる。
【0098】
[第2実施形態の効果]
以上のように、第2実施形態に係るバーコードリーダを使用すれば、明暗パターン中に所定の幅値以下の汚れやかすれが存在する場合に、その幅値と、その前に算出した幅値と、後に算出した幅値とを加算して1つの幅値とすることができるため、汚れやかすれを明暗パターンに吸収することにより、汚れやかすれに起因して1次元コードの読取り精度が低下してしまうおそれをなくすことができる。
【0099】
<変更例>
上述の第2実施形態では、予め設定した閾値以下の幅値を有するパターンを極小パターンとみなす手法を説明したが、幅値として幅値テーブルta1における出現度数が所定値以上の幅値のうち、最小の幅値よりも小さい幅値のパターンを極小パターンとみなすこともできる。
【0100】
図16は、幅値の出現度数の分布を示すヒストグラムである。このヒストグラムは、算出された各幅値に基づいてCPU7が作成する。図示の例では、出現度数の閾値として予め出現度数R1が設定されており、出現度数R1以上の幅値のうち、最小の幅値よりも小さい幅値W1を極小パターン判定に用いる閾値に設定する。つまり、出現度数R1未満であり、かつ、幅値W1以下は、汚れ、かすれ、あるいは、信号処理部5(図1)から出力される信号のノイズ成分であるとみなす。
【0101】
上記の変更例に係るバーコードリーダを使用すれば、極小パターンを判定する際の閾値を算定する際に、幅値の出現度数と無関係に総ての幅値を対象とするのではなく、幅値の出現度数の分布を示すヒストグラムを作成して出現度数が所定値以上の幅値を対象とし、それらの幅値のうち、最小の幅値から算定するため、読取りに要する時間を短縮することができる。
例えば、幅値の出現度数と無関係に閾値を設定すると、小さなバーコードあるいは遠くのバーコードを読取った場合、取得した幅値が全体的に小さな値になり、設定していた幅値よりも小さな幅値の中に読取りに必要な幅値が含まれ、読取りから除去されてしまうことがある。この場合、作成する明暗パターンテーブルが誤った情報を含む可能性が高くなり、誤読あるいは不読の可能性が高まる。
そこで、上記の変更例のように、取得した幅値の出現度数に応じて閾値を設定できれば、誤読の可能性が低くなり、読取り精度が高まるし、あるいは、不読の可能性が低くなり、読取り時間が短縮できる。
なお、上記のヒストグラムを作成するためにCPU7が実行する処理が、この発明の請求項5に記載の第1の出現度数計数手段として機能する。
【0102】
<第3実施形態>
次に、この発明の第3実施形態について図を参照して説明する。
この実施形態に係るバーコードリーダは、走査線によって明暗パターンの幅に差違が存在する場合であっても、補正によってその差違をなくすことができることを特徴とする。
図17は、明暗パターンの幅値を補正する原理を示す説明図であり、(a)は補正前の明暗パターンの一部を示し、(b)は補正後の明暗パターンの一部を示す。図18は、幅値補正処理の流れを示すフローチャートである。
【0103】
CPU7は、前述の第1実施形態において説明した第1基準パターン設定処理(図11)と同じ処理を実行して第1基準パターンを設定する(図18のS70)。続いて、第1基準パターンがあるか否かを判定し(S71)、あると判定した場合は(S71:Yes)、幅値テーブルta1の中から所定の幅値テーブルを基準の幅値テーブルとして選択する(S72)。続いて、先のS72において選択した基準の幅値テーブルの中から幅値を一部の所定個数読出し(S73)、その読出した各幅値を累積し、その累積幅値をaとする(S74)。
【0104】
続いて、先のS72において選択した基準の幅値テーブル以外の幅値テーブルの中から所定の幅値テーブルを選択し、先のS73において基準の幅値テーブルから読出した各幅値に対応する幅値を読出す(S75)。続いて、その読出した各幅値を累積し、その累積幅値をbとする(S76)。続いて、先のS74において算出した累積幅値aと、先のS76において算出した累積幅値bとの比の値r(=a/b)を算出する(S77)。
【0105】
続いて、先のS75において幅値を読出した幅値テーブルに対応付けられた各幅値に先のS77において算出した比の値rを乗じ、各幅値を基準の幅値テーブルの幅値に補正する(S78)。続いて、総ての幅値テーブルに対する幅値の補正を終了したか否かを判定し(S79)、終了していないと判定した場合は(S79:No)、次の幅値テーブルに対して幅値の補正を実行する(S75〜S78)。以降、S79において肯定判定するまで各幅値テーブルに対して幅値の補正を実行する。これにより、基準の幅値テーブル以外の幅値テーブルに対応付けられた各幅値は、基準の幅値テーブルに対応付けられた各幅値に補正される。
【0106】
図17は、複数の走査線のうち3本の走査線に対応する明暗パターンB1,B2,B3を例示している。図中、A,B、Cは、それぞれ各明暗パターンに共通の7個の明暗パターンの各幅値の累積幅値を示す。各累積幅値の比は、a:b:cである。明暗パターンB1の各幅値が格納された幅値テーブルを基準の幅値テーブルとすると、明暗パターンB1の合計値Aと、明暗パターンB2の合計値Bとの比の値は、(a/b)となる。
【0107】
そこで、明暗パターンB2の各幅値に比の値(a/b)をそれぞれ乗じ、各幅値を明暗パターンB1の幅値に補正する。また、明暗パターンB1の合計値Aと、明暗パターンB3の合計値Cとの比の値は、(a/c)となるから、明暗パターンB3の各幅値に(a/c)をそれぞれ乗じ、各幅値を明暗パターンB1の幅値に補正する。
【0108】
[第3実施形態の効果]
以上のように、第3実施形態に係るバーコードリーダを使用すれば、読取り距離の違いなどが原因で、走査線によって明暗パターンの幅に差違が存在する場合であっても、補正によってその差違をなくすことができるため、1次元コードの読取り精度を高めることができる。
【0109】
<変更例>
明暗パターンの各幅値を総て合計した合計幅値の比の値を用いることもできる。この場合、各走査線に共通していない明暗パターンが走査線の終点側に存在すると、合計幅値を正確に算出することができない。そこで、各走査線に共通の明暗パターンであって走査線の終点に最も近い明暗パターンを第2基準パターンを抽出する。また、第1基準パターンも抽出する。これにより、各走査線に対応する各明暗パターンは、第1基準パターンから第2基準パターンまでが同一のパターンに揃う。
【0110】
そして、各明暗パターンについて第1基準パターンの先頭のパターンから、第2基準パターンの最後尾のパターンまでの各幅値を合計して合計幅値をそれぞれ算出する。次に、所定の走査線に対応する明暗パターンの合計幅値を基準の合計幅値とし、その基準の合計幅値と、上記所定の走査線以外の他の走査線に対応する明暗パターンの合計幅値との比の値を、他の走査線別に算出する。次に、算出した比の値を、算出の対象となった他の走査線の各幅値に乗じ、他の走査線に対応付けられた各幅値を上記所定の走査線に対応付けられた幅値に補正する。なお、第2基準パターンの抽出には、前述の第1基準パターンの抽出方法と同じ方法を用いることができる。
【0111】
上記の変更例に係るバーコードリーダを使用すれば、1次元コードの印刷のにじみなどが原因で、走査線によって明暗パターンの幅に差違が存在する場合であっても、補正によってその差違をなくすことができるため、1次元コードの読取り精度を高めることができる。
【0112】
なお、CPU7が上記の第2基準パターンを検索するために実行する処理が、この発明の請求項7に記載の第2の検索手段として機能し、合計幅値を算出するために実行する処理が合計幅値算出手段として機能し、比の値を他の走査線別に算出するために実行する処理が第4の算出手段として機能し、比の値を各幅値に乗じて補正するために実行する処理が第2の補正手段として機能する。
【0113】
<第4実施形態>
次に、この発明の第4実施形態について図を参照して説明する。
この実施形態に係るバーコードリーダは、最初から総ての走査線に対応する累積幅値を用いて明暗パターンを作成しないことを特徴とする。図19は、汚れと明暗パターンとの間隔を示す説明図である。図20は、明暗パターンテーブル作成処理の一部を省略して示すフローチャートである。
【0114】
図19に示す例は、明パターンsp1の中に小さな暗パターンe2が存在する状態を示している。最上部の走査線L1、走査線L4および最下部の走査線L5は、暗パターンe2を通過しないため、走査線L1,L4,L5に対応する明暗パターンは、暗パターンba1、明パターンsp1および暗パターンba2から構成されている。
一方、走査線L2,L3は暗パターンe2を通過するため、走査線L2,L3に対応する明暗パターンは、暗パターンba1、明パターンsp2、暗パターンe2、明パターンsp3および暗パターンba2から構成されている。
【0115】
ここで、明パターンsp2および暗パターンe2間の境界(2)と、明パターンsp3(明パターンsp1)および暗パターンba2間の境界(3)との間の幅ΔWが所定値以下である場合、つまり暗パターンe2が暗パターンba2の近くに存在する場合は、そのΔWは、暗パターンba2の印刷のにじみであるとみなし、暗パターンba2の本来の幅値がΔW分太くなったものとして処理することができる。
一方、幅ΔWが所定値を超える場合は、暗パターンe2は、暗パターンba2から離れた箇所に存在する汚れである可能性があるため、暗パターンe2が汚れであるか暗パターンであるかを判定し、汚れであった場合は、それを誤って暗パターンとして読取らないようにする必要がある。
【0116】
(明暗パターン作成処理)
CPU7は、累積幅値テーブルta2(図6)の中から優先累積幅値テーブルを選択する(図20のS29)。ここで、優先累積幅値テーブルとは、明暗パターンテーブル作成処理を実行するに際して最初に用いる累積幅値テーブルのことで、累積幅値テーブルta2の中から最上部および最下部の走査線に対応する累積幅値テーブルを除いたものから、所定数を選択して設定する。
【0117】
続いて、S29において選択した優先累積幅値テーブルの中から所定の累積幅値を選択する(S30a)。例えば、優先累積幅値テーブルの中で最小の累積幅値を選択する。続いて、S30aにおいて選択した所定の累積幅値と、優先累積幅値テーブルにおける他の各累積幅値(上記所定の累積幅値以外の累積幅値)との差をそれぞれ算出する(S30b)。続いて、S30bにおいて算出した差が所定値を超える累積幅値が格納されているか否かを判定し(S30c)、格納されていると判定した場合は(S30c:Yes)、S29において選択した優先累積幅値テーブル以外の累積幅値テーブルも選択する(S30d)。
【0118】
つまり、所定の累積幅値との差が所定値を超える累積幅値が存在するということは、図19に示すような暗パターンe2が存在する可能性がある。そこで、暗パターンe2が汚れであるか否かの判定精度を高めるために走査線の最上部および最下部に対応する累積幅値テーブルも選択する。
【0119】
図19に示す例において、走査線L2〜L4に対応する累積幅値テーブルが優先累積幅値テーブルに設定されているとする。また、暗パターンe2に起因して形成された明パターンsp3の累積幅値と明パターンsp2の累積幅値との差がΔWであるとする。そして、ΔWが所定値を超えている場合は、暗パターンe2は汚れである可能性があるため、最上部の走査線L1および最下部の走査線L5を増やし、暗パターンe2が汚れであるか否かの判定精度を高める。
【0120】
以降、前述の第1実施形態における明暗パターンテーブル作成処理(図13)と同じ処理(S31〜S41)を実行することにより、汚れである暗パターンe2が誤って暗パターンとして読取られることのない明暗パターンテーブルを作成する。
なお、暗パターン中にかすれが存在する場合も上記の明暗パターンテーブル作成処理を実行することにより、かすれである明パターンが誤って明パターンとして読取られることのない明暗パターンテーブルを作成する
【0121】
[第4実施形態の効果]
(1)以上のように、第4実施形態に係るバーコードリーダを使用すれば、最初から総ての走査線を対象にして累積幅値を算出するのではなく、最上部および最下部の走査線以外の所定数の走査線を対象にして累積幅値を算出し、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合に、総ての走査線を対象にして再度累積を行うため、1次元コードの読取り時間を短縮することができる。
【0122】
(2)また、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合は、その差は、汚れやかすれに起因するものである可能性があるため、走査線の数を増やすことにより、汚れやかすれを通過しない走査線を増やし、汚れやかすれであるか否かの判定精度を高めることができる。
【0123】
<変更例>
明暗パターンテーブル作成処理において、最初は、総ての走査線のうち、中央付近の所定数の走査線を選択し、汚れやかすれが存在する可能性が出た場合に、走査線を上下方向に所定数ずつ増やし、それでも汚れやかすれであると判定できない場合にさらに走査線を上下方向に所定数ずつ増やすようにすることもできる。
また、走査線を増やす方向は限定されるものではなく、例えば、最上部から最下部に向けて増やしてもよく、最下部から最上部に向けて増やしてもよい。
【0124】
<第5実施形態>
次に、この発明の第5実施形態について図を参照して説明する。
この実施形態に係るバーコードリーダは、明暗パターンの一方の幅値が太く算出される傾向にあることに起因する読取り精度の低下をなくすことができることを特徴とする。図21は、明パターン幅および暗パターン幅の各出現度数分布を示すヒストグラムである。図22は、閾値決定処理の流れを示すフローチャートである。
【0125】
(閾値決定処理)
この閾値決定処理は、前述の明暗パターンテーブル作成処理(図13)のS30の前、あるいは、S30〜S35のどこかで実行する。CPU7は、暗パターンに決定する際の基準となる閾値Lbおよび明パターンに決定する際の基準となる閾値Lwの基準値をそれぞれ決定する(図22のS90)。続いて、明パターン幅および暗パターン幅の出現度数分布をそれぞれ作成する(S91)。
【0126】
続いて、S91において作成した各出現度数分布に基づき、明パターン幅および暗パターン幅の各出現度数分布のピーク値地点における幅値の大小を比較する(S92)。続いて、暗パターン幅値が明パターン幅値よりも大きいか否か、つまり暗パターン幅値が相対的に太く算出される傾向にあるか否かを判定する(S93)。
例えば、図21に示す例では、明パターン幅値のピーク値地点における幅値が、暗パターン幅値のピーク値地点における幅値よりも大きいため、明パターン幅値が相対的に太く算出される傾向にあると判定する(S93:No)。
【0127】
ここで、暗パターン幅値が相対的に太く算出される傾向にあると判定した場合は(S93:Yes)、閾値Lwの値を基準値から所定割合だけ小さく設定する(S94)。つまり、閾値Lwを小さくすることで、各走査線において明パターンと判定され易くする。これにより、暗パターン幅値が相対的に太く算出される傾向を是正することができる。
【0128】
また、暗パターン幅値が相対的に太く算出される傾向にはない、つまり図21に示す例のように、明パターン幅値が相対的に太く算出される傾向にあると判定した場合は(S93:No)、閾値Lwの値を基準値から所定割合だけ大きく設定する(S95)。つまり、閾値Lwを大きくすることにより、各走査線において明パターンと判定され難くする。これにより、明パターン幅値が相対的に太く算出される傾向を是正することができる。
【0129】
[第5実施形態の効果]
以上のように、第5実施形態に係るバーコードリーダを使用すれば、明暗パターンのどちらが相対的に太く算出されている傾向にあるかを判定し、その判定結果に基づいて、明暗パターンの境界の判定基準となる閾値を変更することができるため、印刷のにじみやかすれなどに起因する読取り誤差を是正し、読取り精度を高めることができる。
【0130】
<他の実施形態>
(1)この発明は、受光部4としてCCD(Charge Coupled Device)を1次元に配列してなるラインセンサ(リニアセンサ)を用いたバーコードリーダにも適用することもできる。また、光源およびスキャナを備えない、自然光のバーコードにおける反射を利用した方式のバーコードリーダにも適用することもできる。
【0131】
(2)幅値補正処理(図18)では、所定個数の幅値を累積した累積幅値の比の値に基づいて各幅値を補正したが、所定個数の幅値の平均値を算出し、その平均値の比の値に基づいて各幅値を補正することもできる。
【0132】
(3)閾値決定処理(図22)において、明パターン幅値のピーク値地点における幅値と、暗パターン幅値のピーク値地点における幅値との差の大きさに対応して閾値の増減割合を決定することもできる。
【図面の簡単な説明】
【0133】
【図1】この発明の実施形態に係るバーコードリーダの主な電気的構成ブロックで示す説明図である。
【図2】バーコードB上を複数回走査した場合の走査線の説明図である。
【図3】3本の走査線に対応するバーコードの説明図であり、(a)は走査開始位置のズレを示す説明図、(b)は走査開始位置を揃えた状態を示す説明図である。
【図4】明パターン中に汚れが存在する場合の明暗の変化点および累積幅値を示す説明図である。
【図5】幅値テーブルの説明図である。
【図6】累積幅値テーブルの説明図である。
【図7】明暗判定結果テーブルの説明図である。
【図8】明暗パターンテーブルの説明図である。
【図9】復元したバーコードのイメージを示す説明図である。
【図10】CPUが実行するバーコードの読取り処理の流れを示すフローチャートである。
【図11】CPUが図10のS5において実行する第1基準パターン設定処理の流れを示すフローチャートである。
【図12】CPUが図10のS7において実行する累積幅値算出処理の流れを示すフローチャートである。
【図13】CPUが図10のS8において実行する明暗パターンテーブル作成処理の流れを示すフローチャートである。
【図14】極小パターンの吸収を示す説明図である。
【図15】極小パターン吸収処理の流れを示すフローチャートである。
【図16】幅値の出現度数を示すヒストグラムである。
【図17】明暗パターンの幅値を補正する原理を示す説明図であり、(a)は補正前の明暗パターンの一部を示し、(b)は補正後の明暗パターンの一部を示す。
【図18】幅値補正処理の流れを示すフローチャートである。
【図19】汚れと明暗パターンとの間隔を示す説明図である。
【図20】明暗パターンテーブル作成処理の一部を省略して示すフローチャートである。
【図21】明パターン幅および暗パターン幅の各出現度数分布を示すヒストグラムである。
【図22】閾値決定処理の流れを示すフローチャートである。
【符号の説明】
【0134】
1・・バーコードリーダ(光学的情報読取装置)、2・・光源(走査手段)、
3・・光スキャナ(走査手段)、4・・受光部、5・・信号処理部、6・・制御回路、 7・・CPU、8,9・・メモリ、B・・バーコード、L1〜Ln・・走査線。
【特許請求の範囲】
【請求項1】
明パターンおよび暗パターン(以下、明暗パターンという)を配列して構成された1次元コードを複数の走査線に沿って光で走査する走査手段と、
前記走査により前記1次元コードにて反射した反射光に基づいて前記明暗パターンの各幅値を算出する第1の算出手段と、
前記幅値を前記明暗パターンの配列順及び前記走査線別に累積して累積幅値を算出する累積手段と、
前記累積幅値を基に各走査線上における明暗の変化点を求め、当該各変化点に基づいて前記明暗パターンの境界を抽出する境界抽出手段と、
前記抽出された境界間の幅値を前記累積幅値に基づいて算出する第2の算出手段と、
前記第1または第2の算出手段により算出された幅値に基づいて前記1次元コードを読取る読取手段と、
を備えたことを特徴とする光学的情報読取装置。
【請求項2】
前記境界抽出手段は、
前記各累積幅値の中から所定の累積幅値を選択し、その選択した累積幅値により特定される走査線上の前記変化点が明暗パターンのどちらに属するかの判定を総ての走査線に対して行う第1の判定と、この第1の判定の判定結果のうち、同じ判定結果の数が閾値を超えたかを判定する第2の判定とを、総ての累積幅値について行い、前記第2の判定の判定結果が変化する境界を前記明暗パターンの境界として前記第2の判定の判定結果に基づいて抽出することを特徴とする請求項1に記載の光学的情報読取装置。
【請求項3】
各走査線に共通の明暗パターンであって走査線の一端に最も近い明暗パターン(以下、第1基準パターンという)を総ての走査線を対象に検索する第1の検索手段を備えており、
前記累積手段は、
前記検索された第1基準パターンのうち、前記一端に最も近いパターンの幅値を初期値とし、前記第1の算出手段により算出された幅値を前記初期値から走査線の他端まで配列順及び前記走査線別に累積することを特徴とする請求項1または請求項2に記載の光学的情報読取装置。
【請求項4】
前記第1の算出手段は、
算出した幅値が所定の幅値以下であった場合に、その算出した幅値とその前に算出した幅値と後に算出した幅値とを加算して1つの幅値とする加算手段をさらに備えることを特徴とする請求項1ないし請求項3のいずれか1つに記載の光学的情報読取装置。
【請求項5】
前記第1の算出手段により算出された幅値の出現度数を計数する第1の出現度数計数手段を備えており、
前記加算手段は、
前記第1の出現度数計数手段による計数値が所定値以上の幅値のうち、最小の幅値から前記所定の幅値を算定することを特徴とする請求項4に記載の光学的情報読取装置。
【請求項6】
各走査線間で対応するパターンに対する各走査線別の幅値のうち、所定の走査線に対する幅値と他の走査線に対する幅値との比の値を、前記他の走査線別に算出する第3の算出手段と、
前記比の値を、算出の対象となった前記他の走査線の各幅値にそれぞれ乗ずることにより、前記他の走査線に対する各幅値を補正する第1の補正手段と、
を備えたことを特徴とする請求項1ないし請求項5のいずれか1つに記載の光学的情報読取装置。
【請求項7】
各走査線に共通の明暗パターンであって走査線の他端に最も近い明暗パターン(以下、第2基準パターンという)を総ての走査線を対象に検索する第2の検索手段と、
前記第1基準パターンのうち前記一端に最も近いパターンから、前記第2基準パターンのうち前記他端に最も近いパターンまでに存在する明暗パターンの各幅値の合計(以下、合計幅値という)を各走査線別に算出する合計幅値算出手段と、
前記算出された合計幅値のうち、所定の走査線に対する合計幅値と、他の走査線に対する合計幅値との比の値を前記他の走査線別に算出する第4の算出手段と、
前記比の値を、算出の対象となった前記他の走査線の各幅値に乗ずることにより、前記他の走査線に対する各幅値を補正する第2の補正手段と、
を備えたことを特徴とする請求項1ないし請求項5のいずれか1つに記載の光学的情報読取装置。
【請求項8】
前記累積手段は、
前記走査線の総数よりも少ない所定数の走査線を選択し、前記第1の算出手段により算出された幅値を前記初期値から走査線の他端まで配列順及び前記選択した各走査線別に累積し、さらに、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合は、前記選択する走査線の数を増やして再度前記累積を行うことを特徴とする請求項1ないし請求項7のいずれか1つに記載の光学的情報読取装置。
【請求項9】
前記累積手段は、
走査線の総数が3本以上の場合に最上部および最下部の走査線以外の走査線を最初に選択することを特徴とする請求項8に記載の光学的情報読取装置。
【請求項10】
前記第1の算出手段により算出された所定個数の幅値に基づいて、前記明暗パターンの幅値のそれぞれの出現度数を計数する第2の出現度数計数手段と、
前記第2の出現度数計数手段によって計数された明暗パターンの幅値のそれぞれの出現度数に基づいて、明暗パターンのどちらが相対的に太く算出されている傾向にあるかを判定し、その判定結果に基づいて前記閾値を変更する閾値変更手段と、
を備えたことを特徴とする請求項2ないし請求項9のいずれか1つに記載の光学的情報読取装置。
【請求項1】
明パターンおよび暗パターン(以下、明暗パターンという)を配列して構成された1次元コードを複数の走査線に沿って光で走査する走査手段と、
前記走査により前記1次元コードにて反射した反射光に基づいて前記明暗パターンの各幅値を算出する第1の算出手段と、
前記幅値を前記明暗パターンの配列順及び前記走査線別に累積して累積幅値を算出する累積手段と、
前記累積幅値を基に各走査線上における明暗の変化点を求め、当該各変化点に基づいて前記明暗パターンの境界を抽出する境界抽出手段と、
前記抽出された境界間の幅値を前記累積幅値に基づいて算出する第2の算出手段と、
前記第1または第2の算出手段により算出された幅値に基づいて前記1次元コードを読取る読取手段と、
を備えたことを特徴とする光学的情報読取装置。
【請求項2】
前記境界抽出手段は、
前記各累積幅値の中から所定の累積幅値を選択し、その選択した累積幅値により特定される走査線上の前記変化点が明暗パターンのどちらに属するかの判定を総ての走査線に対して行う第1の判定と、この第1の判定の判定結果のうち、同じ判定結果の数が閾値を超えたかを判定する第2の判定とを、総ての累積幅値について行い、前記第2の判定の判定結果が変化する境界を前記明暗パターンの境界として前記第2の判定の判定結果に基づいて抽出することを特徴とする請求項1に記載の光学的情報読取装置。
【請求項3】
各走査線に共通の明暗パターンであって走査線の一端に最も近い明暗パターン(以下、第1基準パターンという)を総ての走査線を対象に検索する第1の検索手段を備えており、
前記累積手段は、
前記検索された第1基準パターンのうち、前記一端に最も近いパターンの幅値を初期値とし、前記第1の算出手段により算出された幅値を前記初期値から走査線の他端まで配列順及び前記走査線別に累積することを特徴とする請求項1または請求項2に記載の光学的情報読取装置。
【請求項4】
前記第1の算出手段は、
算出した幅値が所定の幅値以下であった場合に、その算出した幅値とその前に算出した幅値と後に算出した幅値とを加算して1つの幅値とする加算手段をさらに備えることを特徴とする請求項1ないし請求項3のいずれか1つに記載の光学的情報読取装置。
【請求項5】
前記第1の算出手段により算出された幅値の出現度数を計数する第1の出現度数計数手段を備えており、
前記加算手段は、
前記第1の出現度数計数手段による計数値が所定値以上の幅値のうち、最小の幅値から前記所定の幅値を算定することを特徴とする請求項4に記載の光学的情報読取装置。
【請求項6】
各走査線間で対応するパターンに対する各走査線別の幅値のうち、所定の走査線に対する幅値と他の走査線に対する幅値との比の値を、前記他の走査線別に算出する第3の算出手段と、
前記比の値を、算出の対象となった前記他の走査線の各幅値にそれぞれ乗ずることにより、前記他の走査線に対する各幅値を補正する第1の補正手段と、
を備えたことを特徴とする請求項1ないし請求項5のいずれか1つに記載の光学的情報読取装置。
【請求項7】
各走査線に共通の明暗パターンであって走査線の他端に最も近い明暗パターン(以下、第2基準パターンという)を総ての走査線を対象に検索する第2の検索手段と、
前記第1基準パターンのうち前記一端に最も近いパターンから、前記第2基準パターンのうち前記他端に最も近いパターンまでに存在する明暗パターンの各幅値の合計(以下、合計幅値という)を各走査線別に算出する合計幅値算出手段と、
前記算出された合計幅値のうち、所定の走査線に対する合計幅値と、他の走査線に対する合計幅値との比の値を前記他の走査線別に算出する第4の算出手段と、
前記比の値を、算出の対象となった前記他の走査線の各幅値に乗ずることにより、前記他の走査線に対する各幅値を補正する第2の補正手段と、
を備えたことを特徴とする請求項1ないし請求項5のいずれか1つに記載の光学的情報読取装置。
【請求項8】
前記累積手段は、
前記走査線の総数よりも少ない所定数の走査線を選択し、前記第1の算出手段により算出された幅値を前記初期値から走査線の他端まで配列順及び前記選択した各走査線別に累積し、さらに、各走査線間で対応するパターンに対する所定の走査線間の累積幅値の差が所定値を超えた場合は、前記選択する走査線の数を増やして再度前記累積を行うことを特徴とする請求項1ないし請求項7のいずれか1つに記載の光学的情報読取装置。
【請求項9】
前記累積手段は、
走査線の総数が3本以上の場合に最上部および最下部の走査線以外の走査線を最初に選択することを特徴とする請求項8に記載の光学的情報読取装置。
【請求項10】
前記第1の算出手段により算出された所定個数の幅値に基づいて、前記明暗パターンの幅値のそれぞれの出現度数を計数する第2の出現度数計数手段と、
前記第2の出現度数計数手段によって計数された明暗パターンの幅値のそれぞれの出現度数に基づいて、明暗パターンのどちらが相対的に太く算出されている傾向にあるかを判定し、その判定結果に基づいて前記閾値を変更する閾値変更手段と、
を備えたことを特徴とする請求項2ないし請求項9のいずれか1つに記載の光学的情報読取装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【公開番号】特開2009−123096(P2009−123096A)
【公開日】平成21年6月4日(2009.6.4)
【国際特許分類】
【出願番号】特願2007−298387(P2007−298387)
【出願日】平成19年11月16日(2007.11.16)
【出願人】(501428545)株式会社デンソーウェーブ (1,155)
【Fターム(参考)】
【公開日】平成21年6月4日(2009.6.4)
【国際特許分類】
【出願日】平成19年11月16日(2007.11.16)
【出願人】(501428545)株式会社デンソーウェーブ (1,155)
【Fターム(参考)】
[ Back to top ]