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