(57)【特許請求の範囲】
【請求項１】
１つのキャラクタを構成するモジュールの数が固定されているバーコード体系のバーコードシンボルの復号方式において、
前記バーコードシンボルの各バーのバー幅を検出するバー幅検出手段と、
前記バー幅検出手段による検出値を前記モジュールに分類するための閾値を前記キャラクタ毎に設定する閾値設定手段と、
前記バーのそれぞれに対する基準値を前記キャラクタ毎に設定する基準値設定手段と、
前記基準値に対する前記バーのそれぞれの誤差を算出する誤差算出手段と、
前記誤差算出手段により算出された（ｉ−１）番目の前記キャラクタにおける前記バー幅の前記誤差と、（ｉ−１）番目の前記キャラクタで用いた補正値との平均値を、ｉ番目の前記キャラクタの補正値として算出する補正値算出手段と、前記補正値を用いて前記バーをそれぞれ前記モジュールに分類し、その組み合わせによって復号する復号手段と
を備えたことを特徴とするバーコード復号方式。
【請求項２】
前記閾値設定手段は、
前記キャラクタの全長を計測し、その計測値を前記モジュールの数で除算することにより、１モジュール当たりのバー幅を算出する第一閾値設定手段と、
前記１モジュール当たりのバー幅を用いて、所定の数だけ閾値を設定する第二閾値設定手段と
から構成されたことを特徴とする請求項１に記載のバーコード復号方式。
【請求項３】
前記基準値設定手段は、前記復号手段により分類された前記モジュール値と、前記１モジュール当たりのバー幅との積から、前記基準値を設定すること
を特徴とする請求項２に記載のバーコード復号方式。
【請求項４】
前記誤差算出手段は、前記基準値と、前記バー幅検出手段による検出値との差分を計算し、その差分の平均値を前記誤差として算出すること
を特徴とする請求項１に記載のバーコード復号方式。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、ＰＯＳ（Ｐｏｉｎｔ  ｏｆ  Ｓａｌｅｓ）端末等に用いられるバーコードシンボルを読み取って正確に復号する復号方式に関する。
【０００２】
【従来の技術】
従来、バーコードシンボルの復号方式では、例えば、１キャラクタを構成するバーの各バー幅を合計して、キャラクタ全長のバー幅を算出する。次に、そのキャラクタ全長を１キャラクタを構成するモジュール数で除算することによって、１モジュールのバー幅を求める。そして、１モジュール当たりのバー幅に基づいて黒バーや白バーのモジュールを判定し、バーコードデータを文字に変換するという方式のものが知られている。
ＵＰＣ／ＥＡＮ／ＪＡＮコード、ＣＯＤＥ１２８／ＥＡＮ１２８コードのバーコードシンボルでは、ＣＯＤＥ１２８／ＥＡＮ１２８のストップキャラクタ以外は、１キャラクタを構成するモジュール数がコード体系毎に決まっているため、上記方式による復号が可能となる。
【０００３】
この方式では、バーコードシンボルが滲んで印刷されると、黒バーが太く、白バーが細くなり、また、かすれて印刷されると、黒バーが細く、白バーが太くなるため、その結果、モジュール値の判定を間違え、バーコードの読み取りに不具合を生じてしまう。
このバーコードの印刷ムラによる読み取り不具合を防止する方法として、２つの方法が考えられる。
第一の方法は、バーの太り及び細りを補正してから復号する方法であり、その具体的な方法は、スタートキャラクタの太り及び細りの程度を検出し、それをバーコード全体の太り及び細りを補正する補正値として用い、各バーの補正を行うというものである。
また、第二の方法は、黒バーから隣接する黒バーまで、または、白バーから隣接する白バーまでの、黒バーと白バーとのバー幅を足し合わせた値を用い、バーの太り及び細りを相殺した形で復号するというものである。
【０００４】
【発明が解決しようとする課題】
しかしながら、上記の第一の方法では、１つのバーコード内では１モジュールのバー幅が一定と仮定し、黒バー及び白バーのそれぞれに対して一律に同じ補正値を用いて補正するため、実際的ではない。
即ち、バーコードラベルの湾曲やしわ、或いは、ペン型スキャナのペンの移動速度やレーザスキャナのレーザ光の走査速度の変化により、同一のバーコード内であっても、キャラクタによっては１モジュールのバー幅が変化するために、バー幅の補正に過不足が生じ、本来不読対策であるはずの補正処理が、不読や誤読の原因となってしまうという問題がある。
また、上記第二の方法では、隣接する黒バーと白バーとが共に太ったり細ったりした場合には、相殺の効果が出ずに、不読や誤読の原因となってしまうという問題がある。
【０００５】
従って、本発明の目的は、キャラクタ単位で黒バー及び白バーの補正値を算出し、バーコード内で１モジュールのバー幅が変動する場合においても、正確に読み取ることのできるバーコードの復号方式を提供することである。
【０００６】
【課題を解決するための手段】
上記の課題を解決するため、本発明の構成は、１つのキャラクタを構成するモジュールの数が固定されているバーコード体系のバーコードシンボルの復号方式において、バーコードシンボルの各バーのバー幅を検出するバー幅検出手段と、バー幅検出手段による検出値をモジュールに分類するための閾値をキャラクタ毎に設定する閾値設定手段と、バーのそれぞれに対する基準値をキャラクタ毎に設定する基準値設定手段と、基準値に対するバーのそれぞれの誤差を算出する誤差算出手段と、誤差算出手段により算出された（ｉ−１）番目のキャラクタにおけるバー幅の誤差と、（ｉ−１）番目のキャラクタで用いた補正値との平均値を、ｉ番目のキャラクタの補正値として算出する補正値算出手段と、その補正値を用いてバーをそれぞれモジュールに分類し、その組み合わせによって復号する復号手段とを備えたという技術的手段を採用するものである。
【０００７】
また、第二の発明の構成は、閾値設定手段は、キャラクタの全長を計測し、その計測値をモジュールの数で除算することにより、１モジュール当たりのバー幅を算出する第一閾値設定手段と、１モジュール当たりのバー幅を用いて、所定の数だけ閾値を設定する第二閾値設定手段とから構成されたという技術的手段を採用するものである。
【０００８】
第三の発明の構成は、基準値設定手段は、復号手段により分類されたモジュール値と、１モジュール当たりのバー幅との積から、基準値を設定するという技術的手段を採用するものである。
【０００９】
第四の発明の構成は、誤差算出手段は、基準値と、バー幅検出手段による検出値との差分を計算し、その差分の平均値を誤差として算出するという技術的手段を採用するものである。
【００１０】
【作用及び効果】
第一の作用は、１つのキャラクタを構成するモジュールの数が固定されているバーコード体系のバーコードシンボルの復号方式において、バーコードシンボルの各バーのバー幅を検出するバー幅検出手段と、バー幅検出手段による検出値をモジュールに分類するための閾値をキャラクタ毎に設定する閾値設定手段と、バーのそれぞれに対する基準値をキャラクタ毎に設定する基準値設定手段と、基準値に対するバーのそれぞれの誤差を算出する誤差算出手段と、誤差算出手段により算出された（ｉ−１）番目のキャラクタにおけるバー幅の誤差と、（ｉ−１）番目のキャラクタで用いた補正値との平均値を、ｉ番目のキャラクタの補正値として算出する補正値算出手段と、その補正値を用いてバーをそれぞれモジュールに分類し、その組み合わせによって復号する復号手段とを備えたことであり、その効果は、１つ前のキャラクタの補正値を次のキャラクタの補正に用いるため、復号済の全てのキャラクタの傾向を反映した復号を行えると共に、キャラクタ毎に各バーを補正できるため、各バーのモジュール値を正確に求めることができ、バーコードをより正確に復号できることである。（請求項１）
【００１１】
第二の作用は、閾値設定手段を、キャラクタの全長を計測し、その計測値をモジュールの数で除算することにより、１モジュール当たりのバー幅を算出する第一閾値設定手段と、１モジュール当たりのバー幅を用いて、所定の数だけ閾値を設定する第二閾値設定手段とで構成することであり、その効果は、各キャラクタ毎に各バー幅の変動に応じた閾値を設定できることである。（請求項２）
【００１２】
第三の作用は、基準値設定手段は、復号手段により分類されたモジュール値と、１モジュール当たりのバー幅との積から、基準値を設定することであり、その効果は、各キャラクタ毎に各バー幅の変動に応じた基準値を設定できることである。（請求項３）
【００１３】
第四の作用は、誤差算出手段は、基準値と、バー幅検出手段による検出値との差分を計算し、その差分の平均値を誤差として算出することであり、その効果は、各キャラクタ毎に各バー幅の変動に応じた誤差を算出できることである。（請求項４）
【００１４】
【実施例】
以下、本発明を具体的な実施例に基づいて説明する。
図１は、本発明に係わる第一実施例の構成を示したブロック図である。
バーコードリーダ１００は、レーザ光を発する発光部１、レーザ光の反射光を受光する受光部２、受光部２の出力信号を二値化する二値化回路３、二値化回路３の出力信号のエッジを検出するエッジ検出回路４、バー幅を検出するバー幅カウンタ５、エッジ検出毎にバー幅を記憶するメモリ６、メモリ６に記憶されたバーコードデータに基づいてバーコードデータを復号するＣＰＵ７、復号されたバーコードデータを外部に出力する外部インターフェース８から構成される。
【００１５】
発光部１は、ＣＰＵ７からの発光命令に基づき、レーザ光を発する。
この時、レーザ光は、ミラーが設けられた回転機構（図示せず）により走査光として発される。
バー幅カウンタ５は、エッジ検出回路４の検出信号に基づいてバー幅のカウントを行い、エッジが検出されるタイミング毎にカウント値がメモリ６に記憶される。
尚、上記構成のうち、発光部１と受光部２と二値化回路３とエッジ検出回路４とバー幅カウンタ５とがバー幅検出手段に相当する。
【００１６】
次に、バーコードの復号処理について説明する。
ＣＯＤＥ１２８の構成を図２に示す。バーコードは、図２に見られるように、両側にクワイエットゾーンが配置され、その間にスタートキャラクタ、データキャラクタ、チェックキャラクタ、ストップキャラクタの順で４つのキャラクタが配置されている。
図２に見られるように、ストップキャラクタを除いて、１キャラクタは３本の黒バーと３本の白バーの計６本のバーで構成されている。
【００１７】
これらキャラクタのうち、一例としてデータキャラクタの構成を図３に示す。本実施例では、分類されたモジュール値は、１、２、３、４の４種類である。
また、１キャラクタを構成するモジュールの数は、１１である。即ち、ｉ番目のキャラクタを例に説明すると、図３より黒バーＢ１  、Ｂ２  、Ｂ３  のモジュール値がそれぞれ、１、１、２であり、白バーＳ１  、Ｓ２  、Ｓ３  のモジュール値がそれぞれ２、１、４であるから、それらモジュール値を加算すると１１となる。
【００１８】
続いて、上記構成のデータキャラクタの復号処理について図４のフローチャートに基づいて説明する。
まず、補正値Ｈｉ  の初期値Ｈ１  を０に初期化する（ステップ１０１  ）。
尚、補正値Ｈｉ  はｉ番目のキャラクタにおける補正値という意である。
次に、数式１を用いてそのキャラクタにおける１モジュール当たりのバー幅ＴＭ  を算出する（ステップ１０２  、第一閾値設定手段に相当）。
【００１９】
【数１】
ＴＭ  ＝（Ｔａ  ＋Ｔｂ  ＋Ｔｃ  ＋Ｔｄ  ＋Ｔｅ  ＋Ｔｆ  ）÷１１              ─（１）
【００２０】
ここで、Ｔａ  、Ｔｃ  、Ｔｅ  はそれぞれ黒バーＢ１  、Ｂ２  、Ｂ３  のバー幅を示し、また、Ｔｂ  、Ｔｄ  、Ｔｆ  はそれぞれ白バーＳ１  、Ｓ２  、Ｓ３  のバー幅を示している。
【００２１】
この後、各バーのバー幅を用いて、モジュール値を判定する閾値の計算を行う（ステップ１０３  、第二閾値設定手段に相当）。
具体的には、ＣＯＤＥ１２８の場合、各バーのモジュール値は、１、２、３、４の４種類のいずれかの値になるため、その分類のために、それらの中間値として５種類のバー幅の閾値（０．５  ×ＴＭ  、１．５  ×ＴＭ  、２．５  ×ＴＭ  、３．５  ×ＴＭ  、４．５  ×ＴＭ  ）を設定する。
【００２２】
続いて、各バーのバー幅の補正を行う（ステップ１０４  、補正値算出手段に相当）。
この時、このキャラクタで用いるバー幅の補正値をＨｉ  とし、黒バーＢ１  〜Ｂ３  については補正値Ｈｉ  が正規の値からの太り分を表し、白バーＳ１  〜Ｓ３  については補正値Ｈｉ  が正規の値の細り分を表すものとする。
従って、黒バーＢ１  〜Ｂ３  についての補正処理は、検出された各黒バーＢ１  〜Ｂ３  のバー幅データから補正値Ｈｉ  を減算することであり、白バーＳ１  〜Ｓ３  についての補正処理は、検出された各白バーＳ１  〜Ｓ３  のバー幅データに補正値
Ｈｉ  を加算することである。
このようにして、バー幅Ｔａ  、Ｔｂ  、Ｔｃ  、Ｔｄ  、Ｔｅ  、Ｔｆ  の補正された値Ｔａ  ’  、Ｔｂ  ’  、Ｔｃ  ’  、Ｔｄ  ’  、Ｔｅ  ’  、Ｔｆ  ’  が、それぞれ数式２〜数式７から得られる。
【００２３】
【数２】
Ｔａ  ’  ＝  Ｔａ  −  Ｈｉ                                          ─（２）
【００２４】
【数３】
Ｔｂ  ’  ＝  Ｔｂ  ＋  Ｈｉ                                          ─（３）
【００２５】
【数４】
Ｔｃ  ’  ＝  Ｔｃ  −  Ｈｉ                                          ─（４）
【００２６】
【数５】
Ｔｄ  ’  ＝  Ｔｄ  ＋  Ｈｉ                                          ─（５）
【００２７】
【数６】
Ｔｅ  ’  ＝  Ｔｅ  −  Ｈｉ                                            ─（６）
【００２８】
【数７】
Ｔｆ  ’  ＝  Ｔｆ  ＋  Ｈｉ                                          ─（７）
【００２９】
この補正されたバー幅Ｔａ  ’  〜Ｔｆ  ’  を用いて、各バーをモジュールに分類し、その組み合わせによって復号する（ステップ１０５  、復号手段に相当）。
各バーをモジュールに分類する際に、上述の５種類の閾値が用いられる。
即ち、補正されたバー幅Ｔａ  ’  〜Ｔｆ  ’  が、０．５  ×ＴＭ  〜１．５  ×ＴＭ  にある時は１モジュールとし、１．５  ×ＴＭ  〜２．５  ×ＴＭ  にある時は２モジュールとし、２．５  ×ＴＭ  〜３．５  ×ＴＭ  ある時は３モジュールとし、３．５  ×ＴＭ  〜４．５  ×ＴＭ  にある時は、４モジュールと判定する。
尚、補正されたバー幅Ｔａ  ’  〜Ｔｆ  ’  が、上記以外の時は、エラーと判定する。
【００３０】
キャラクタがストップキャラクタの場合には、ステップ１０６  においてＹＥＳ  と判定し、復号処理を終了する。
ステップ１０６  においてＮＯと判定されると、各バーの誤差のないバー幅（基準値に相当）を算出する（ステップ１０７  、基準値設定手段に相当）。
ステップ１０６  にて、補正されたバー幅Ｔａ  ’  、Ｔｂ  ’  、Ｔｃ  ’  、Ｔｄ  ’  、Ｔｅ  ’  、Ｔｆ  ’  が、それぞれＭａ  、Ｍｂ  、Ｍｃ  、Ｍｄ  、Ｍｅ  、Ｍｆ  （Ｍａ  、Ｍｂ  、Ｍｃ  、Ｍｄ  、Ｍｅ  、Ｍｆ  は１〜４の整数）モジュールになったとする。
この時、バーＢ１  、Ｓ１  、Ｂ２  、Ｓ２  、Ｂ３  、Ｓ３  の誤差のないバー幅は、それぞれＴＭ  ×Ｍａ  、ＴＭ  ×Ｍｂ  、ＴＭ  ×Ｍｃ  、ＴＭ  ×Ｍｄ  、ＴＭ  ×Ｍｅ  、ＴＭ  ×Ｍｆ  となる。
【００３１】
続いて、これら誤差のないバー幅データを用いて、各バーのバー幅の誤差を算出する（ステップ１０８  、誤差算出手段に相当）。
バーＢ１  、Ｓ１  、Ｂ２  、Ｓ２  、Ｂ３  、Ｓ３  のそれぞれのバー幅の誤差Ｗａ  、Ｗｂ  、Ｗｃ  、Ｗｄ  、Ｗｅ  、Ｗｆ  は数式８〜数式１３に示される。
【００３２】
【数８】
Ｗａ    ＝  Ｔａ  −  ＴＭ  ×Ｍａ                                    ─（８）
【００３３】
【数９】
Ｗｂ    ＝  ＴＭ  ×Ｍｂ  −  Ｔｂ                                    ─（９）
【００３４】
【数１０】
Ｗｃ    ＝  Ｔｃ  −  ＴＭ  ×Ｍｃ                                      ─（１０）
【００３５】
【数１１】
Ｗｄ    ＝  ＴＭ  ×Ｍｄ  −  Ｔｄ                                      ─（１１）
【００３６】
【数１２】
Ｗｅ    ＝  Ｔｅ  −  ＴＭ  ×Ｍｅ                                        ─（１２）
【００３７】
【数１３】
Ｗｆ    ＝  ＴＭ  ×Ｍｆ  −  Ｔｆ                                      ─（１３）
【００３８】
このようにして、ｉ番目のキャラクタにおける各バーのバー幅の誤差Ｗａ  〜Ｗｆ  を算出した後、数式１４を用いて誤差Ｗａ  〜Ｗｆ  の平均値Ｗｉ  を算出し、数式１５により、補正値Ｈｉ  を更新し、（ｉ＋１）番目のキャラクタにおける補正値Ｈｉ＋１  を算出する（ステップ１０９  ）。
補正値Ｈｉ＋１  の算出後は、ステップ１０２  に戻り、処理を繰り返す。
尚、数式１５中のＷ１  は、スタートキャラクタの復号結果により求めた誤差であり、補正値Ｈｉ  の初期値Ｈ１  はステップ１０１  で設定され、Ｈ１  ＝０である。
【００３９】
【数１４】
Ｗｉ  ＝（Ｗａ  ＋Ｗｂ  ＋Ｗｃ  ＋Ｗｄ  ＋Ｗｅ  ＋Ｗｆ  ）÷６                ─（１４）
【００４０】
【数１５】
0003550807.tif 000002
【００４１】
数式１５により、補正値Ｈｉ  はキャラクタ毎に更新され、新しいキャラクタから得た補正データほど影響が大きく、古いキャラクタから得た補正データほど影響が小さく反映されていることがわかる。
よって、キャラクタ毎にキャラクタの傾向を反映してバー幅の補正を行うことができるため、より正確な復号ができ、バーコードの高精度な読み取りが可能となる。
数式１５は、ＣＯＤＥ１２８コード系における補正値Ｈｉ＋１  を求める計算式であり、ＵＰＣ系コードの場合には、数式１６に示される計算式により補正値Ｈｉ＋１  を求めることができる。
【００４２】
【数１６】
0003550807.tif 000003
【００４３】
数式１６中の誤差Ｗ０  は、ガードバーまたはセンターバー等により求めることもできる。尚、補正値Ｈｉ  の初期値Ｈ０  は、Ｈ０  ＝０とする。
数式１６により、ＵＰＣ系コードの場合においても、補正値Ｈｉ  はキャラクタ毎に更新され、新しいキャラクタから得た補正データほど影響が大きく、古いキャラクタから得た補正データほど影響が小さく反映されていることがわかる。
よって、ＵＰＣ系コードにおいても、キャラクタ毎にキャラクタの傾向を反映してバー幅の補正を行うことができ、より正確な復号を行うことができる。
【００４４】
本実施例では、バー幅データを補正し、その補正値がどの閾値の間に入るかを調べているが、バー幅データを補正せずに、閾値を補正し、バー幅データがその補正された閾値のどの範囲に該当するかを判定して復号してもよい。
この時、閾値の補正は、黒バーと白バーとを別々に行うため、閾値は黒バー用と白バー用の２種類が必要となる。
また、各バーの誤差Ｗｉ  を補正し、補正された誤差を用いて各バーのモジュール値を求める構成としてもよい。
【００４５】
本実施例では、レーザ光を用いるバーコードリーダを適用対象としたが、ＣＣＤタイプやペンタイプのバーコードリーダに適用してもよい。
【００４６】
上記に示されるように、本発明によれば、黒バーや白バーの太り及び細りを補正する補正値をバーコードのキャラクタ毎に算出することにより、バーの滲みやかすれ、バーコードラベルの湾曲やしわ、ペン型スキャナのペンの移動速度の変動、レーザスキャナのレーザ光の走査速度の変動等があっても、各バーのモジュール値を正確に求めて復号でき、バーコードの高精度な読み取りを行うことができる。
【図面の簡単な説明】
【図１】本発明に係わる第一実施例の構成を示したブロック図。
【図２】ＣＯＤＥ１２８コードの構成を示した説明図。
【図３】ＣＯＤＥ１２８コードのデータキャラクタの構成を示した拡大図。
【図４】本発明に係わる第一実施例における補正及び復号の処理フローを示したフローチャート。
【符号の説明】
１      発光部
２      受光部
３      二値化回路
４      エッジ検出回路
５      バー幅カウンタ
６      メモリ
７      ＣＰＵ
８      外部インターフェース
１００  バーコードリーダ
【図１】
0003550807.tif 000004
【図２】
0003550807.tif 000005
【図３】
0003550807.tif 000006
【図４】
0003550807.tif 000007