(57)【特許請求の範囲】
【請求項１】
バーコードから、当該バーコードの複数のバーの幅を示すバーデータからなるバーコードイメージを読み取る読取手段と、
前記バーコードに対応しバーデータ比較の基準となるバーコードイメージをベースデータとして記憶する記憶手段と、
前記読取手段により読み取られた最新のバーコードイメージをデコードし、当該デコードが失敗した場合に、前記記憶されたベースデータのバーデータと前記最新のバーコードイメージのバーデータとが一致するように、当該最新のバーコードイメージのバーデータを合成し、合成後のバーコードイメージをデコードする制御手段と、
を備えるバーコード読取装置。
【請求項２】
前記制御手段は、合成前の前記最新のバーコードイメージと前記ベースデータとを比較し、当該合成前の最新のバーコードイメージが当該ベースデータよりもベースデータとして適する場合に、前記記憶手段に記憶されたベースデータを当該合成前の最新のバーコードイメージで更新する請求項１に記載のバーコード読取装置。
【請求項３】
前記制御手段は、前記合成後の最新のバーコードイメージの全てのバーデータにおいて各バーデータごとに変数とし、前記ベースデータの全てのバーデータにおいて各バーデータごとに変数とした場合の、これらの変数の差が、予め決められた許容範囲以内である場合に当該バーデータが一致すると判別する請求項１又は２に記載のバーコード読取装置。
【請求項４】
前記ベースデータは、バーデータ個数が最小であるバーコードイメージである請求項１から３のいずれか一項に記載のバーコード読取装置。
【請求項５】
前記ベースデータは、デコード桁数が最長であるバーコードイメージである請求項１から４のいずれか一項に記載のバーコード読取装置。
【請求項６】
前記制御手段は、前記最新のバーコードイメージのバーデータが前記ベースデータのバーデータよりも小さい場合に、当該最新のバーコードイメージのバーデータを合成する請求項１から５のいずれか一項に記載のバーコード読取装置。
【請求項７】
コンピュータを、
バーコードから、当該バーコードの複数のバーの幅を示すバーデータからなるバーコードイメージを読み取る読取手段、
前記バーコードに対応しバーデータ比較の基準となるバーコードイメージをベースデータとして記憶する記憶手段、
前記読取手段により読み取られた最新のバーコードイメージをデコードし、当該デコードが失敗した場合に、前記記憶されたベースデータのバーデータと前記最新のバーコードイメージのバーデータとが一致するように、当該最新のバーコードイメージのバーデータを合成し、合成後のバーコードイメージをデコードする制御手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バーコード読取装置及びプログラムに関する。
【背景技術】
【０００２】
従来、一次元バーコードを読み取るバーコード読取機能を有するＨＴ（Handy Terminal）等のバーコード読取装置が知られている。例えば、コンビニエンスストア等の店舗において、会計（売上登録）処理、棚卸時に、商品に付されたバーコードをバーコード読取装置で読み取り、そのバーコードに記録された商品の識別情報を取得していた。
【０００３】
バーコード読取装置は、記憶部、制御部及びバーコードイメージ読み取り部を備える。また、バーコード読取装置において、バーコードイメージ読み取り部でバーコードイメージを読み取り、バーコードの印刷品質不良やバーコードの汚れにより、そのバーコードイメージにバーコード条件不成立部分が含まれる場合には、そのバーコード条件不成立部分を、他のバーコードイメージのバーコード条件成立部分に置き換えて、読み取り可能にするようにバーコード合成を行っていた（例えば、特許文献１参照）。
【特許文献１】特開２００１−４３３００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、上記従来のバーコード合成方式では、読み取っているバーコードの種別（Ｃｏｄｅ３９等）が事前に分かっていないとバーコード条件が成立しているか否かが判断できなかった。このため、実際の運用される状況のように、複数のバーコードを読み取る場合は、従来のバーコード合成方式を適用するのが難しいという問題があった。
【０００５】
また、従来のバーコード合成方式では、バーコードイメージの一部を他のバーコードイメージと置き換えるため、置き換えた部分の前後でバーコードの特性が変化してしまうおそれがあった。例えば、バーコードイメージ読み取り部から近距離で取得したバーコードイメージに対して、ある一部分を遠距離で取得したバーコードイメージに置き換えると、置き換えた前後でデータの大きさが変化し、バーコードイメージをデコードする場合に問題となるおそれがあった。
【０００６】
本発明の課題は、バーコードの読み取り性能を向上することである。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１に記載の発明のバーコード読取装置は、
バーコードから、当該バーコードの複数のバーの幅を示すバーデータからなるバーコードイメージを読み取る読取手段と、
前記バーコードに対応しバーデータ比較の基準となるバーコードイメージをベースデータとして記憶する記憶手段と、
前記読取手段により読み取られた最新のバーコードイメージをデコードし、当該デコードが失敗した場合に、前記記憶されたベースデータのバーデータと前記最新のバーコードイメージのバーデータとが一致するように、当該最新のバーコードイメージのバーデータを合成し、合成後のバーコードイメージをデコードする制御手段と、を備える。
【０００８】
請求項２に記載の発明は、請求項１に記載のバーコード読取装置において、
前記制御手段は、合成前の前記最新のバーコードイメージと前記ベースデータとを比較し、当該合成前の最新のバーコードイメージが当該ベースデータよりもベースデータとして適する場合に、前記記憶手段に記憶されたベースデータを当該合成前の最新のバーコードイメージで更新する。
【０００９】
請求項３に記載の発明は、請求項１又は２に記載のバーコード読取装置において、
前記制御手段は、前記合成後の最新のバーコードイメージの全てのバーデータにおいて各バーデータごとに変数とし、前記ベースデータの全てのバーデータにおいて各バーデータごとに変数とした場合の、これらの変数の差が、予め決められた許容範囲以内である場合に当該バーデータが一致すると判別する。
【００１０】
請求項４に記載の発明は、請求項１から３のいずれか一項に記載のバーコード読取装置において、
前記ベースデータは、バーデータ個数が最小であるバーコードイメージである。
【００１１】
請求項５に記載の発明は、請求項１から４のいずれか一項に記載のバーコード読取装置において、
前記ベースデータは、デコード桁数が最長であるバーコードイメージである。
【００１２】
請求項６に記載の発明は、請求項１から５のいずれか一項に記載のバーコード読取装置において、
前記制御手段は、前記最新のバーコードイメージのバーデータが前記ベースデータのバーデータよりも小さい場合に、当該最新のバーコードイメージのバーデータを合成する。
【００１３】
請求項７に記載の発明のプログラムは、
コンピュータを、
バーコードから、当該バーコードの複数のバーの幅を示すバーデータからなるバーコードイメージを読み取る読取手段、
前記バーコードに対応しバーデータ比較の基準となるバーコードイメージをベースデータとして記憶する記憶手段、
前記読取手段により読み取られた最新のバーコードイメージをデコードし、当該デコードが失敗した場合に、前記記憶されたベースデータのバーデータと前記最新のバーコードイメージのバーデータとが一致するように、当該最新のバーコードイメージのバーデータを合成し、合成後のバーコードイメージをデコードする制御手段、
として機能させる。
【発明の効果】
【００１４】
本発明によれば、バーコードの読み取り性能を向上できる。
【発明を実施するための最良の形態】
【００１５】
以下、添付図面を参照して本発明に係る好適な実施の形態を詳細に説明する。なお、本発明は、図示例に限定されるものではない。
【００１６】
図１〜図９を参照して本発明に係る実施の形態を説明する。先ず、図１を参照して本実施の形態の装置構成を説明する。図１に、本実施の形態のハンディターミナル１の構成を示す。
【００１７】
本実施の形態のバーコード読取装置としてのハンディターミナル１は、バーコード読取機能を有する携帯端末である。図１に示すように、ハンディターミナル１は、ＣＰＵ（Central Processing Unit）１１、入力部１２、記憶手段としてのＲＡＭ（Random Access Memory）１３、表示部１４、記憶部１５、通信部１６、電源部１７、読取手段としてのスキャナ部１８等を備えて構成され、各部がバス１９を介して接続される。スキャナ部１８は、レーザ走査部１８１、レーザ受光部１８２及びバーカウンタ抽出部１８３を備えて構成される。
【００１８】
ＣＰＵ１１は、ハンディターミナル１の各部を中央制御する。ＣＰＵ１１は、記憶部１５に記憶されているシステムプログラム及び各種アプリケーションプログラムの中から指定されたプログラムをＲＡＭ１３に展開し、ＲＡＭ１３に展開されたプログラムとの協働で、各種処理を実行する。ＣＰＵ１１は、プログラムとの協働により制御手段として機能する。
【００１９】
ＣＰＵ１１は、後述するデコードプログラムとの協働により、スキャナ部１８により光学的に読み取られた最新データをデコードし、そのデコードが失敗した場合に、バーの個数が最小のバーコードイメージをベースデータとして使用して、最新データを合成してデコードし、そのデコードが失敗した場合に、デコード桁数が最長のバーコードイメージをベースデータとして使用して、最新データを合成してデコードする。ここで、一つのバーコードに対し、スキャナ部１８における一回のレーザ光走査で取得した全てのバー（及びスペース）の幅（カウンタ値）をバーコードイメージという。また、一つ一つのバー（又はスペース）の幅をバーデータという。ベースデータは、読み取り対象のバーコードに対応しバーデータ比較の基準となるバーコードイメージである。また、最新データは、スキャナ部１８により読み取られた最新のバーコードイメージとする。
【００２０】
入力部１２は、スキャン実行を入力するためのトリガキーと、カーソルキー、数字キー及び各種機能キー等を有するキーパッドとを備え、操作者から押下入力された各キーの入力信号をＣＰＵ１１に出力する。
【００２１】
ＲＡＭ１３は、揮発性のメモリであり、実行される各種プログラムやこれら各種プログラムに係るデータ等を格納するワークエリアを有し、情報を一時的に格納する。表示部１４は、ＬＣＤ（Liquid Crystal Display）、ＥＬＤ（ElectroLuminescent Display）等で構成され、ＣＰＵ１１からの表示信号に従って画面表示を行う。
【００２２】
記憶部１５は、各種プログラム及び各種データを読み出し可能に記憶するＲＯＭ（Read Only Memory）を備えて構成される。また、記憶部１５には、各種情報を読み出し及び書き込み可能に記憶するフラッシュメモリをさらに含める構成としてもよい。記憶部１５は、デコードプログラムを記憶する。
【００２３】
通信部１６は、無線又は有線の通信方式で外部機器と各種情報の通信を行う。電源部１７は、ハンディターミナル１の各部に電源電力を供給する。電源部１７は、例えば、ＣＰＵ１１の指示により、電源供給のオフ等を行う。
【００２４】
スキャナ部１８は、ＣＰＵ１１の指示に基づいて、バーコードを光学的に読み取り、バーコードイメージ（バーデータ）を取得する。レーザ走査部１８１は、レーザ光の発光部と可動式のミラー部とを備える。レーザ走査部１８１は、発光部からレーザ光を発光してミラー部に反射させて出射し、その際ミラー部を駆動してレーザ光の反射角度を変化させることにより、レーザ光がバーコード上を走査する。
【００２５】
レーザ受光部１８２は、レーザ走査部１８１から出射されたレーザ光がバーコードで反射された反射光を受光し、その受光した光信号を電気信号に変換する。バーカウンタ抽出部１８３は、レーザ受光部１８２により取得された電気信号から、予め定められた閾値を用いてバーコードの黒白の２値のカウンタ値を検出し、そのカウンタ値から、各バー（黒）、各スペース（白）の幅を示すバーデータを取得し、一回のレーザ走査で得られる全バーデータをバーコードイメージとして取得する。以下、特に断らない限り、バー及びスペースをまとめて“バー”と表現する。
【００２６】
次いで、図２を参照して、バーコードイメージ及びバーデータの具体例を説明する。図２（ａ）に、バーコードＢ及び各バーの幅の一例を示す。図２（ｂ）に、バーコードイメージ及びバーデータの一例を示す。
【００２７】
図２（ａ）に示すような一次元のバーコードＢが左から右への矢印の向きに、スキャナ部１８によりバーコード読み取りされるものとする。バーコードＢの各バーの幅は、順にバーデータＣ１〜Ｃ１７であるものとする。このとき、図２（ｂ）に示すように、一回のレーザ走査で、各バーデータＣ１〜Ｃ１７を含むバーコードイメージが得られる。
【００２８】
次に、図３〜図９を参照して、ハンディターミナル１の動作を説明する。先ず、図３を参照して、本実施の形態におけるバーコードイメージの合成の概念について説明する。図３に、ベースデータと最新データ（以下、スキャナ部１８により最新に取得されたバーコードイメージを最新データという）との合成の一例を示す。
【００２９】
バーコードの読み取りにおいては、バーコード読み取り時のノイズ、バーコードの品質不良（掠れ）、バーコードの傷、汚れ等により、本来一本であるはずのバーが複数に分割されたバーとして読み取られることが発生しうる。そこで、本実施の形態では、ベースデータを用いて、分割されたバーデータを一つにし、本来の幅のバーデータに合成する。つまり、最新データがベースデータと同じような比率（大きさ）になるように、最新データ内のバーデータを合成（結合）する。
【００３０】
１つのバーコードをスキャンする場合に、レーザ走査部１８１は、複数回レーザ走査を行い、その走査の都度バーコードイメージが取得される。取得済のバーコードイメージのうち、正確なデータを多く含むとみなされる最適なバーコードイメージをベースデータとする。
【００３１】
本実施の形態では、１つのバーコードイメージに含まれるバーデータの個数が最小であるバーコードイメージ（以下、最小データとする）をベースデータの一つとして用いる。最小データは、バーデータ個数が最小であることから、バーの分割が少ない最適なデータと考えられるからである。また、１つのバーコードイメージにおいてデコードした桁数が最長であるバーコードイメージ（以下、最長データとする）をベースデータの一つとして用いる。最長データは、デコード処理が最も進んだデータであり、正しいデータが取れている領域が大きい最適なデータと考えられるからである。
【００３２】
図３に示すように、バーコード読み取り中に、ベースデータと、最新データとの各バーデータが左から順に比較される。例えば、あるバーについて、ベースデータのバーデータに比較し最新データのバーデータが小さいとすると、最新データのバーデータに次の２本のバーデータが合成（結合）されて、ベースデータのバーデータと比較される。２本のバーデータは、白（スペース）と黒（バー）との組み合わせとなり、この組み合わせで本来のバーデータが分割されていると考えられる。バーデータが一致するまで上記比較が繰り返される。
【００３３】
図３の例では、ｂ１、ｂ２部分に、ベースデータに比較して最新データに分割が発生している。このため、ｂ１、ｂ２部分のバーデータが合成されて合成データ（合成後のバーコードイメージ）が生成される。ｂ３部分では、最新データに比較してベースデータに分割が発生している。このため、ｂ３部分のバーデータは合成されず、次のバーデータの比較に移る。このようにして得られた合成データは、新たなベースデータの候補となり、ベースデータがより適切なものに更新されていく。
【００３４】
次いで、図４〜図９を参照して、ハンディターミナル１で実行されるデコード処理を説明する。図４に、デコード処理の流れを示す。図５に、図４のデコード処理の続きの流れを示す。
【００３５】
ハンディターミナル１において、スキャナ部１８によりバーコードが読み取られる場合に、バーコードにレーザ光が複数回走査される。スキャナ部１８において、レーザ走査部１８１によりバーコードにレーザ光が走査され、レーザ受光部１８２及びバーカウンタ抽出部１８３によりバーコードイメージ（全バーコードデータ）が取得される毎に、デコード処理が実行される。このように、ハンディターミナル１において、スキャナ部１８により、バーコードにレーザ光が一回走査されて１つのバーコードイメージが取得されたことをトリガとして、記憶部１５から読み出されて適宜ＲＡＭ１３上に展開されたデコードプログラムと、ＣＰＵ１１との協働で、デコード処理が実行される。スキャナ部１８により取得されたバーコードイメージは、最新データとしてＲＡＭ１３に格納される。
【００３６】
図４及び図５に示すように、先ず、スキャナ部１８により取得された合成前のバーコードイメージ（最新データ）がデコードされる（ステップＳ１）。ステップＳ１において、デコードの成功した桁数（デコード桁数）も取得される。そして、ステップＳ１のデコードが最新データの最後まで完全に成功したか否かが判別される（ステップＳ２）。
【００３７】
ステップＳ１のデコードが完全に成功していない場合（ステップＳ２；ＮＯ）、バーコードイメージ中のバーデータ個数が最小であるバーコードイメージ（最小データ）がＲＡＭ１３に格納されているか否かが判別される（ステップＳ３）。最小データがある場合（ステップＳ３；ＹＥＳ）、ＲＡＭ１３に格納されている最小データをベースデータとして使用して最新データの合成処理が実行される（ステップＳ４）。
【００３８】
そして、ステップＳ４で合成された合成データがデコードされる（ステップＳ５）。ステップＳ５において、デコードのデコード桁数も取得される。そして、ステップＳ５のデコードが完全に成功したか否かが判別される（ステップＳ６）。
【００３９】
ステップＳ５のデコードが完全に成功していない場合（ステップＳ６；ＮＯ）、バーコードイメージ中のデコード桁数が最長であるバーコードイメージ（最長データ）がＲＡＭ１３に格納されているか否かが判別される（ステップＳ７）。最小データがない場合（ステップＳ３；ＮＯ）、ステップＳ７に移行される。最長データがある場合（ステップＳ７；ＹＥＳ）、ＲＡＭ１３に格納されている最長データをベースデータとして使用して最新データの合成処理が実行される（ステップＳ８）。
【００４０】
そして、ステップＳ８で合成された合成データがデコードされる（ステップＳ９）。ステップＳ９において、デコードのデコード桁数も取得される。そして、ステップＳ９のデコードが完全に成功したか否かが判別される（ステップＳ１０）。
【００４１】
ステップＳ９のデコードが完全に成功していない場合（ステップＳ１０；ＮＯ）、最新データのステータスにデコード失敗が設定される（ステップＳ１１）。最長データがない場合（ステップＳ７；ＮＯ）、ステップＳ１１に移行される。ステップＳ１のデコードが完全に成功した場合（ステップＳ２；ＹＥＳ）、ステップＳ５のデコードが完全に成功した場合（ステップＳ６；ＹＥＳ）、又はステップＳ９のデコードが完全に成功した場合（ステップＳ１０；ＹＥＳ）、最新データのステータスにデコード成功が設定される（ステップＳ１２）。デコード成功の設定は、デコードを複数回（例えば３回）実行し、全てデコードが完全に成功した場合に、スータスをデコード成功に設定することとしてもよい。
【００４２】
そして、合成前の最新データのバーデータ個数が、ＲＡＭ１３に格納された最小データのバーデータ個数よりも小さいか否かが判別される（ステップＳ１３）。合成前の最新データのバーデータ個数が最小データより小さい場合（ステップＳ１３；ＹＥＳ）、ＲＡＭ１３に格納される最小データが合成前の最新データに更新されてベースデータが更新される（ステップＳ１４）。
【００４３】
そして、合成後の最新データのデコード桁数が、ＲＡＭ１３に格納された最長データのデコード桁数よりも長いか否かが判別される（ステップＳ１５）。合成後の最新データ及びそのデコード桁数は、ステップＳ１、Ｓ５又はＳ１０で得られたものとする。合成前の最新データのバーデータ個数が最小データより小さくない場合（ステップＳ１３；ＮＯ）、ステップＳ１５に移行される。合成後の最新データのデコード桁数が最長データより長い場合（ステップＳ１５；ＹＥＳ）、ＲＡＭ１３に格納される最長データが最新データに更新されてベースデータが更新され（ステップＳ１６）、デコード処理が終了する。合成後の最新データのデコード桁数が最長データより長くない場合（ステップＳ１５；ＮＯ）、デコード処理が終了する。
【００４４】
次いで、図６〜図８を参照して、デコード処理のステップＳ４，Ｓ８のベースデータを使用した最新データの合成処理を説明する。図６に、デコード処理内の合成処理の流れを示す。図７に、図６の合成処理の続きの流れを示す。図８に、ベースデータと最新データとの合成の様子を示す。ステップＳ４でベースデータとして最小データを使用し、ステップＳ８でベースデータとして最長データを使用するが、まとめてベースデータを使用するものとして説明する。
【００４５】
図８に示すように、ベースデータの各バーデータを変数Ｎで表し、最新データの各バーデータを変数ｎで表す。本実施の形態の合成処理では、ベースデータを使用して最新データを合成して合成データを得る。
【００４６】
図６及び図７に示すように、先ず、ベースデータの未読み込みのバーデータＮが左から順に一つＲＡＭ１３から読み込まれる（ステップＳ２１）。そして、最新データの未読み込みのバーデータｎが左から順に一つＲＡＭ１３から読み込まれる（ステップＳ２２）。そして、ステップＳ２１，Ｓ２２において、ベースデータ又は最新データの全てのバーデータが読み込まれたか（直前のステップＳ２１又はＳ２２において、読み込むバーデータがないか）否かが判別される（ステップＳ２３）。
【００４７】
ベースデータ又は最新データの全てのバーデータが読み込まれた場合（ステップＳ２３；ＹＥＳ）、合成処理が終了する。ベースデータ又は最新データの全てのバーデータが読み込まれていない場合（ステップＳ２３；ＮＯ）、バーデータｎとバーデータＮとの差ｄ１＝｜ｎ−Ｎ｜が算出される（ステップＳ２４）。そして、差ｄ１がｎ／１０よりも小さいか否かが判別される（ステップＳ２５）。
【００４８】
差ｄ１がｎ／１０よりも小さい場合（ステップＳ２５；ＹＥＳ）、バーデータＮがバーデータｎと一致したとみなされ、バーデータｎが合成データに挿入され（ステップＳ２６）、ステップＳ２１に移行される。
【００４９】
差ｄ１がｎ／１０以上である場合（ステップＳ２５；ＮＯ）、バーデータｎがバーデータＮより小さいか否かが判別される（ステップＳ２７）。バーデータｎがバーデータＮより小さい場合（ステップＳ２７；ＹＥＳ）、最新データに分割が発生しているものとみなされ、最新データのベースデータへの一致処理が開始され、最新データのバーデータｎの次のバーデータ（ｎ＋１）、（ｎ＋２）がＲＡＭ１３から読み込まれ、合成後のバーデータｎａ＝ｎ＋（ｎ＋１）＋（ｎ＋２）が算出される（ステップＳ２８）。
【００５０】
そして、バーデータｎａとバーデータＮとの差ｄ２＝｜ｎａ−Ｎ｜が算出される（ステップＳ２９）。そして、差ｄ２がｎａ／１０よりも小さいか否かが判別される（ステップＳ３０）。差ｄ２がｎａ／１０よりも小さい場合（ステップＳ３０；ＹＥＳ）、バーデータｎａがバーデータＮと一致したとみなされ、バーデータｎａが合成データに挿入され（ステップＳ３１）、ステップＳ２１に移行される。
【００５１】
差ｄ２がｎａ／１０以上である場合（ステップＳ３０；ＮＯ）、差ｄ２が差ｄ１より小さいか否かが判別される（ステップＳ３２）。差ｄ２が差ｄ１より小さい場合（ステップＳ３２；ＹＥＳ）、合成によりバーデータの差が縮まっており、差ｄ１に差ｄ２の値が代入される（ステップＳ３３）。そして、バーデータｎにバーデータｎａの値が代入され（ステップＳ３４）、ステップＳ２８に移行される。
【００５２】
差ｄ２が差ｄ１以上である場合（ステップＳ３２；ＮＯ）、合成によりバーデータの差が拡大しており、バーデータｎが合成データに挿入される（ステップＳ３５）。そして、最新データのバーデータｎの読込位置が左にバーデータ２つ分戻され（ステップＳ３６）、ステップＳ２１に移行される。
【００５３】
バーデータｎがバーデータＮ以上である場合（ステップＳ２７；ＮＯ）、ベースデータに分割が発生しているものとみなされ、ベースデータの比較位置移動処理が開始され、ベースデータのバーデータＮの次のバーデータ（Ｎ＋１）、（Ｎ＋２）がＲＡＭ１３から読み込まれ、合成後のバーデータＮａ＝Ｎ＋（Ｎ＋１）＋（Ｎ＋２）が算出される（ステップＳ３７）。
【００５４】
そして、バーデータｎとバーデータＮａとの差ｄ２＝｜ｎ−Ｎａ｜が算出される（ステップＳ３８）。そして、差ｄ２がｎ／１０よりも小さいか否かが判別される（ステップＳ３９）。差ｄ２がｎ／１０よりも小さい場合（ステップＳ３９；ＹＥＳ）、バーデータｎがバーデータＮａと一致したとみなされ、バーデータｎが合成データに挿入され（ステップＳ４０）、ステップＳ２１に移行される。
【００５５】
差ｄ２がｎ／１０以上である場合（ステップＳ３９；ＮＯ）、差ｄ２が差ｄ１より小さいか否かが判別される（ステップＳ４１）。差ｄ２が差ｄ１より小さい場合（ステップＳ４１；ＹＥＳ）、合成によりバーデータの差が縮まっており、差ｄ１に差ｄ２の値が代入される（ステップＳ４２）。そして、バーデータＮにバーデータＮａの値が代入され（ステップＳ４３）、ステップＳ３７に移行される。
【００５６】
差ｄ２が差ｄ１以上である場合（ステップＳ４１；ＮＯ）、合成によりバーデータの差が拡大しており、バーデータｎが合成データに挿入される（ステップＳ４４）。そして、ベースデータのバーデータＮの読込位置が左にバーデータ２つ分戻され（ステップＳ４５）、ステップＳ２１に移行される。
【００５７】
ここで、図９を参照して、上記合成処理の具体例を説明する。図９に、ベースデータと最新データとの一例を示す。
【００５８】
図９に示すように、バーデータＡ１〜Ａ１０を有するベースデータと、バーデータａ１〜ａ１２を有する最新データと、を考える。先ず、（ａ１−Ａ１）＜ａ１／１０であるので、バーデータａ１とバーデータＡ１とが一致するとみなされ、バーデータａ１が合成データに挿入される。
【００５９】
そして、（Ａ２−ａ２）＞ａ２／１０であるので、バーデータａ２にバーデータａ３，ａ４が合成される。そして、（Ａ２−（ａ２＋ａ３＋ａ４））＜（ａ２＋ａ３＋ａ４）／１０であるので、バーデータ（ａ２＋ａ３＋ａ４）とバーデータＡ２とが一致するとみなされ、バーデータ（ａ１＋ａ２＋ａ３）が合成データに挿入される。
【００６０】
同様にして、バーデータａ５〜ａ８は、バーデータＡ３〜Ａ６と一致するとみなされ、バーデータａ５〜ａ８が合成データに挿入される。そして、（ａ９−Ａ７）＞ａ９／１０であるので、バーデータＡ７にバーデータＡ８，Ａ９が合成される。そして、（ａ９−（Ａ７＋Ａ８＋Ａ９））＞ａ９／１０であり且つ（ａ９−Ａ７）＜（ａ９−（Ａ７＋Ａ８＋Ａ９））であるので、バーデータａ９とバーデータＡ７とが一致するとみなされ、バーデータａ９が合成データに挿入される。このようにして、ベースデータのバーデータＡ１〜Ａ１０を使用して、最新データのバーデータａ１〜ａ１２の合成が行われる。
【００６１】
以上、本実施の形態によれば、ハンディターミナル１は、スキャナ部１８により読み取られた最新データをデコードし、当該デコードが失敗した場合に、ＲＡＭ１３に記憶されたベースデータのバーデータと最新データのバーデータとが一致するように、当該最新データのバーデータに続く２本（スペース及びバー）のバーデータを合成して合成データを生成し、この合成データをデコードしていく。このため、ノイズ、バーコードの印刷品質不良、汚れ、傷等によりデコードが失敗した場合にも、ベースデータに基づいて最新データを適切に合成してデコードでき、バーコードの読み取り性能を向上できる。
【００６２】
また、合成前の最新データのバーデータ数がベースデータのバーデータ数より大きいか否かを判別し、合成前の最新データのバーデータ数が大きい場合に、最小データを合成前の最新データで更新する。また、合成後の最新データのデコード桁数がベースデータのデコード桁数より長いか否かを判別し、合成後の最新データのデコード桁数が大きい場合に、最長データを合成後の最新データで更新する。このため、ベースデータをより適切な合成前又は合成後の最新データで容易に更新できる。
【００６３】
また、合成前又は合成後の最新データのバーデータとベースデータのバーデータとの差が、最新データのバーデータの１／１０より小さい場合に当該バーデータが一致すると判別する。このため、バーデータの誤差を許容範囲として、最新データのバーデータとベースデータのバーデータとの一致を適切に判別できる。
【００６４】
また、ベースデータとして、バーデータ数が最小であるバーコードイメージである最小データを用いた。このため、ベースデータとして適切なバーコードイメージを用いることができる。
【００６５】
また、ベースデータとして、デコード桁数が最長であるバーコードイメージである最長データを用いた。このため、ベースデータとして適切なバーコードイメージを用いることができる。
【００６６】
また、最新データのバーデータがベースデータのバーデータよりも小さい場合に、この最新データのバーデータを合成して合成データとする。このため、デコード対象として最新データから合成データを生成できる。
【００６７】
なお、上記実施の形態における記述は、本発明に係るバーコード読取装置及びプログラムの一例であり、これに限定されるものではない。
【００６８】
上記実施の形態では、バーコード読取装置としてハンディターミナルを用いる構成としたが、ＥＣＲ（Electronic Cash Register）、ＰＯＳ（Point Of Sales System）端末等に接続されるバーコード読取装置等、他のバーコード読取装置としてもよい。
【００６９】
また、上記実施の形態では、ベースデータとして、バーデータ数が最小のバーコードイメージと、デコード桁数が最長のバーコードイメージと、を用いる構成として説明したが、これに限定されるものではない。例えば、ベースデータとして、バーデータの比率分布がある一定範囲内である（バーの太さが一定比率である）バーコードイメージや、全てのバーデータがある一定値以上の（バー幅が細過ぎない）バーコードイメージ等を用いる構成としてもよい。
【００７０】
また、上記実施の形態では、合成前の最新データによりベースデータとしての最小データを更新し、合成後の最新データによりベースデータとしての最長データを更新する構成として説明したが、これに限定されるものではない。例えば、合成後の最新データにより最小データを更新し、合成前の最新データにより最長データを更新する構成等、合成前及び合成後の最新データの少なくとも一つによりベースデータを更新する構成としてもよい。
【００７１】
また、上記実施の形態では、合成前の最新データのデコードが失敗した場合に、最小データを用いた最新データの合成及びデコードを行い、最小データを用いた最新データのデコードが失敗した場合に、最長データを用いた最新データの合成及びデコードを行う構成として説明したが、これに限定されるものではない。例えば、１つの種類のベースデータを用いて最新データの合成及びデコードを行う構成でもよく、複数の種類のベースデータを用いて最新データの合成及びデコードを行う構成でもよい。また、合成及びデコードを行うベースデータの順は、特定の順に限定されない。
【００７２】
また、上記実施の形態におけるハンディターミナル１の各構成要素の細部構成及び細部動作に関しては、本発明の趣旨を逸脱することのない範囲で適宜変更可能であることは勿論である。
【図面の簡単な説明】
【００７３】
【図１】本発明に係る実施の形態のハンディターミナルの構成を示すブロック図である。
【図２】（ａ）は、バーコード及び各バーの幅の一例を示す図である。（ｂ）は、バーコードイメージ及びバーデータの一例を示す図である。
【図３】ベースデータと最新バーコードイメージとの合成の一例を示す図である。
【図４】デコード処理を示すフローチャートである。
【図５】図４のデコード処理の続きを示すフローチャートである。
【図６】デコード処理内の合成処理を示すフローチャートである。
【図７】図６の合成処理の続きを示すフローチャートである。
【図８】ベースデータと最新データとの合成の様子を示す図である。
【図９】ベースデータと最新データとの一例を示す。
【符号の説明】
【００７４】
１  ハンディターミナル
１１  ＣＰＵ
１２  入力部
１３  ＲＡＭ
１４  表示部
１５  記憶部
１６  通信部
１７  電源部
１８  スキャナ部
１８１  レーザ走査部
１８２  レーザ受光部
１８３  バーカウンタ抽出部
１９  バス
【図１】
0005115123.tif 000002
【図２】
0005115123.tif 000003
【図３】
0005115123.tif 000004
【図４】
0005115123.tif 000005
【図５】
0005115123.tif 000006
【図６】
0005115123.tif 000007
【図７】
0005115123.tif 000008
【図８】
0005115123.tif 000009
【図９】
0005115123.tif 000010