(57)【特許請求の範囲】
【請求項１】
画像データ中に含まれるバーコードを認識するバーコード認識方法において、
画像データからバーコードを含む複数のラインを抽出し、該抽出したラインのいずれかをバー幅の対応付けの基準となる基本ラインに設定し、該基本ラインに対して前記ラインに含まれるバー幅情報の対応付けをＤＰマッチング処理を用いて行い、該対応付けられたバー幅情報を集積し、該集積したバー幅情報に基づいて前記バーコードを認識することを特徴とするバーコード認識方法。
【請求項２】
前記ラインの抽出は、前記画像データを所定のしきい値を用いて２値化してから行い、前記バーコードの認識に失敗した場合は、前記画像データを前記しきい値とは別のしきい値で２値化し、該２値化した画像データに基づいて、再度、前記バーコードの認識を行うことを特徴とする請求項１記載のバーコード認識方法。
【請求項３】
前記集積したバー幅情報に基づいて、前記バーコードを構成するバーの基準幅を算出し、該算出した基準幅に基づいて前記バーコードを認識することを特徴とする請求項１記載のバーコード認識方法。
【請求項４】
前記画像データは、バーコードが印刷された帳票を読み取ることにより得られることを特徴とする請求項１記載のバーコード認識方法。
【請求項５】
画像データ中に含まれるバーコードを認識するバーコード認識装置において、
画像データからバーコードを含む複数のラインを抽出するライン抽出手段と、
前記ライン抽出手段が抽出した複数のライン情報のそれぞれに含まれるバー幅情報を取得するバー幅情報取得手段と、
前記ライン抽出手段が抽出したラインのいずれかをバー幅の対応付けの基準となる基本ラインに設定する基本ライン設定手段と、
前記基本ライン設定手段が設定した基本ラインに対して前記バー幅情報取得手段が取得したバー幅情報の対応付けをＤＰマッチング処理を用いて行い、該対応付けられたバー幅情報を集積し、該集積したバー幅情報に基づいて前記バーコードを構成する各バーの幅を特定するバー幅特定手段と、
前記バー幅特定手段が特定したバー幅に基づいて前記バーコードを認識する認識手段と
を具備することを特徴とするバーコード認識装置。
【請求項６】
画像データを２値化する２値化手段をさらに具備し、
前記ライン抽出手段と前記バー幅情報取得手段、前記バー幅特定手段、前記認識手段は、前記２値化手段により所定のしきい値を用いて２値化された画像データに基づいて前記各処理を行い、
前記認識手段が前記バーコードの認識に失敗した場合は、前記２値化手段が前記画像データを前記しきい値とは別のしきい値で２値化し、該２値化した画像データに基づいて、前記ライン抽出手段と前記バー幅情報取得手段、前記バー幅特定手段、前記認識手段が前記各処理を行う
ことを特徴とする請求項５記載のバーコード認識装置。
【請求項７】
前記バー幅特定手段が特定したバー幅情報に基づいて、前記バーコードを構成するバーの基準幅を算出する基準幅算出手段をさらに具備し、
前記認識手段は、前記基準幅算出手段が算出した基準幅に基づいて前記バーコードを認識する
ことを特徴とする請求項５記載のバーコード認識装置。
【請求項８】
コンピュータを動作させ画像データ中に含まれるバーコードを認識するバーコード認識プログラムにおいて、
画像データからバーコードを含む複数のラインを抽出するステップと、
前記ラインのいずれかをバー幅の対応付けの基準となる基本ラインに設定するステップと、
前記基本ラインに対して前記ラインに含まれるバー幅情報の対応付けをＤＰマッチング処理を用いて行い、該対応付けられたバー幅情報を集積し、該集積したバー幅情報に基づいて前記バーコードを構成する各バーのバー幅を特定するステップと、
前記バー幅に基づいて前記バーコードを認識するステップと
を具備することを特徴とするバーコード認識プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、バーコード認識方法および装置並びにプログラムに関し、特に、低品質の画像に含まれるバーコードを認識するバーコード認識方法および装置並びにプログラムに関する。
【０００２】
【従来の技術】
近年、コンピュータおよびその周辺技術の発達に伴って、様々な文書が電子化されて、利用、保存されている。例えば、銀行等の金融機関においては、口座振替依頼書等の伝票や帳票を電子データ化し、その電子データに基づいて業務を行っている場合がある。
【０００３】
帳票の電子データ化は、例えば、帳票をスキャナで読み取り、この読取画像に基づいて様々な処理を施すことによって行われるが、この読取画像自体もデータベース等に長期保存され、必要に応じて再利用されることがある。読取画像は、長期保存の際のデータベースの資源（ハードディスク等）の節約や処理速度の向上等を目的として当該帳票を視覚により認識可能な程度の解像度で読み取られるのが一般的である。
【０００４】
一方、最近の帳票類には、バーコードが印刷されていることが多く、これを利用して業務の効率化が図られている。バーコードの利用は、通常、（紙の）帳票に対するものであるが、電子データ化した帳票を再利用する際にも、バーコードを利用することができれば、より効率的に業務を行うことが可能となる。
【０００５】
しかしながら、電子データ化した帳票は、上述のように視覚により認識可能な程度の解像度で読み取られることが多いため、そのバーコード部分にノイズや欠落、つぶれ等が生じる等、バーコード自体が低品質なものとなってしまう。これに対してバーコードは、周知のようにバーの幅等を識別することによって、そのデータを認識しているものである。そのため、バーコードが低品質な場合、その認識時にエラーが多く発生してしまうことになる。
【０００６】
【発明が解決しようとする課題】
上述のように、電子データ化された帳票等に含まれるバーコードは、低品質であることが多く、このバーコードを正確に認識して処理を行うことは困難であった。
【０００７】
そこで、この発明は、低解像度の画像等に含まれる低品質なバーコードを正確に認識することのできるバーコード認識方法および装置並びにプログラムを提供することを目的とする。
【０００８】
【課題を解決するための手段】
上述した目的を達成するため、請求項１の発明は、画像データ中に含まれるバーコードを認識するバーコード認識方法において、画像データからバーコードを含む複数のラインを抽出し、該抽出したラインのいずれかをバー幅の対応付けの基準となる基本ラインに設定し、該基本ラインに対して前記ラインに含まれるバー幅情報の対応付けをＤＰマッチング処理を用いて行い、該対応付けられたバー幅情報を集積し、該集積したバー幅情報に基づいて前記バーコードを認識することを特徴とする。
【０００９】
また、請求項２の発明は、請求項１の発明において、前記ラインの抽出は、前記画像データを所定のしきい値を用いて２値化してから行い、前記バーコードの認識に失敗した場合は、前記画像データを前記しきい値とは別のしきい値で２値化し、該２値化した画像データに基づいて、再度、前記バーコードの認識を行うことを特徴とする。
【００１０】
また、請求項３の発明は、請求項１の発明において、前記集積したバー幅情報に基づいて、前記バーコードを構成するバーの基準幅を算出し、該算出した基準幅に基づいて前記バーコードを認識することを特徴とする。
【００１１】
また、請求項４の発明は、請求項１の発明において、前記画像データは、バーコードが印刷された帳票を読み取ることにより得られることを特徴とする。
【００１２】
また、請求項５の発明は、画像データ中に含まれるバーコードを認識するバーコード認識装置において、画像データからバーコードを含む複数のラインを抽出するライン抽出手段と、前記ライン抽出手段が抽出した複数のライン情報のそれぞれに含まれるバー幅情報を取得するバー幅情報取得手段と、前記ライン抽出手段が抽出したラインのいずれかをバー幅の対応付けの基準となる基本ラインに設定する基本ライン設定手段と、前記基本ライン設定手段が設定した基本ラインに対して前記バー幅情報取得手段が取得したバー幅情報の対応付けをＤＰマッチング処理を用いて行い、該対応付けられたバー幅情報を集積し、該集積したバー幅情報に基づいて前記バーコードを構成する各バーの幅を特定するバー幅特定手段と、前記バー幅特定手段が特定したバー幅に基づいて前記バーコードを認識する認識手段とを具備することを特徴とする。
【００１３】
また、請求項６の発明は、請求項５の発明において、画像データを２値化する２値化手段をさらに具備し、前記ライン抽出手段と前記バー幅情報取得手段、前記バー幅特定手段、前記認識手段は、前記２値化手段により所定のしきい値を用いて２値化された画像データに基づいて前記各処理を行い、前記認識手段が前記バーコードの認識に失敗した場合は、前記２値化手段が前記画像データを前記しきい値とは別のしきい値で２値化し、該２値化した画像データに基づいて、前記ライン抽出手段と前記バー幅情報取得手段、前記バー幅特定手段、前記認識手段が前記各処理を行うことを特徴とする。
【００１４】
また、請求項７の発明は、請求項５の発明において、前記バー幅特定手段が特定したバー幅情報に基づいて、前記バーコードを構成するバーの基準幅を算出する基準幅算出手段をさらに具備し、前記認識手段は、前記基準幅算出手段が算出した基準幅に基づいて前記バーコードを認識することを特徴とする。
【００１５】
また、請求項８の発明は、コンピュータを動作させ画像データ中に含まれるバーコードを認識するバーコード認識プログラムにおいて、画像データからバーコードを含む複数のラインを抽出するステップと、前記ラインのいずれかをバー幅の対応付けの基準となる基本ラインに設定するステップと、前記基本ラインに対して前記ラインに含まれるバー幅情報の対応付けをＤＰマッチング処理を用いて行い、該対応付けられたバー幅情報を集積し、該集積したバー幅情報に基づいて前記バーコードを構成する各バーのバー幅を特定するステップと、前記バー幅に基づいて前記バーコードを認識するステップとを具備することを特徴とする。
【００２３】
【発明の実施の形態】
以下、この発明に係るバーコード認識方法および装置並びにプログラムの一実施の形態について、添付図面を参照して詳細に説明する。
【００２４】
図１は、この発明を適用したバーコード認識装置の構成を示すブロック図である。
【００２５】
同図に示すように、バーコード認識装置は、帳票画像取得部１と帳票処理部２、バー幅特定部３、認識部４、バーコード辞書５を具備して構成される。また、バー幅特定部３は、２値化部３１とバーコードライン抽出部３２、対応付け部３３、バー幅算出部３４を具備して構成され、認識部４は、スタートキャラクタ検出部４１とモジュール数算出部４２、キャラクタ変換部４３、文字コード出力部４４を具備して構成される。なお、このバーコード認識装置は、コンピュータおよびスキャナ等の周辺装置をハードウェアとし、これらを動作させるソフトウェアにより構成することもできる。
【００２６】
帳票画像取得部１は、スキャナ等により帳票を読み取って得た帳票画像を取得し、帳票処理部２は、帳票画像取得部１が取得した帳票画像の罫線情報等から帳票の種別を判定し、帳票画像内のバーコードが存在する位置を特定する。なお、帳票処理部２は、必ずしもバーコードの位置を特定する必要は無いが、バーコードの位置を特定した方が後の処理が効率的に行えることになる。
【００２７】
バー幅特定部３は、２値化部３１により帳票画像を２値化し、バーコードライン抽出部３２でバーコード画像をライン毎に複数ライン抽出する。対応付け部３３は、バーコードライン抽出部３２が抽出した複数のラインから各バーの対応付けを行う。バー幅算出部３４は、対応付け部３３で対応付けされた各バーの幅を算出する。このバー幅特定部３で、バーコードを複数ラインで検出しているのは、帳票画像内の低解像度・低品質のバーコード画像は、バーの欠落やかすれ、つぶれ等により、各ライン毎にバー幅が異なって検出される可能性があるためである。なお、ここでの処理の詳細は後述する。
【００２８】
認識部４は、バー幅特定部３が特定したバー幅に基づいて、バーコードを認識する。この際、スタートキャラクタ検出部４１は、バーコードの開始位置を示すスタートキャラクタを検出し、モジュール数算出部４２は、バーコードを構成する各バーのモジュール数を算出する。キャラクタ変換部４３は、モジュール数算出部４２が算出したモジュール数に基づいて、コードを特定し、バーコード辞書５を参照して特定したコードを文字コードに変換する。文字コード出力部４４は、キャラクタ変換部４３が変換した文字コードを出力する。なお、認識部４における処理についても、詳細は後述する。
【００２９】
さて、帳票画像取得部１は、スキャナ等で読み取られた帳票画像を取得するが、ここで取得する帳票画像は、カラー画像、階調画像、２値画像のいずれであっても良い。帳票処理部２は、帳票画像取得部１が取得した帳票画像からバーコードの位置を特定する等の処理を行う。この処理は、例えば、帳票取得部１が図２に示すような帳票画像を取得した場合には、帳票内の各罫線の位置、形状等に基づいて帳票の種別を特定し、特定した帳票の種別に応じて記憶している位置をバーコードの存在位置とすることで行う。そして、帳票処理部２によりバーコードの位置が特定されると、バー幅特定部３でのバー幅の特定、認識部４でのバーコードの認識が行われる。なお、帳票処理部２でバーコードの位置が特定できない場合であっても、バー幅特定部３でバーコードを抽出することは可能である。
【００３０】
次に、バー幅特定部３および認識部４での処理について説明するが、最初に処理全体の流れを説明し、続いて各処理の詳細について説明する。
【００３１】
図３は、バーコード認識装置の処理の流れを示すフローチャートである。
【００３２】
まず、帳票画像取得部１が取得した帳票画像から帳票処理部２で所定の処理を施してバーコード画像を取得する（ステップ１０１）、当該バーコード画像がカラー画像若しくは階調画像であった場合には（ステップ１０２でＮＯ）、２値化部３１が当該バーコード画像を２値化するためのしきい値を算出し（ステップ１０３）、算出したしきい値に基づいて２値画像を作成する（ステップ１０４）。一方、バーコード画像が２値画像であった場合には（ステップ１０２でＹＥＳ）、２値化部３１は、何も処理は行わない。
【００３３】
次に、バーコードライン抽出部３２がバーコードラインの抽出を行う（ステップ１０５）。バーコードラインの抽出は、２値のバーコード画像をライン（バーコードの走査方向）毎に処理を行い、バーコードを含んでいるラインを抽出する。
【００３４】
続いて、対応付け部３３が、バーコードライン抽出部３２が抽出したバーコードラインから後の処理に利用するための基本ラインを検出し（ステップ１０６）、検出した基本ラインを利用してバーコードラインに含まれる各バーの対応付けを行う（ステップ１０７）。
【００３５】
バーの対応付けが終了すると、バー幅算出部３４が対応付けられた各バーの幅を算出し（ステップ１０８）、認識部４がバーコードの認識処理を行う（ステップ１０９）。
【００３６】
認識処理の結果、バーコードの認識に成功すれば（ステップ１１０でＹＥＳ）、そのまま処理を終了するが、認識に失敗した場合には（ステップ１１０でＮＯ）、バーコード画像の２値化しきい値が変更可能であれば（ステップ１１１でＹＥＳ）、ステップ１０３に戻り、新たな２値化しきい値を算出して、同様の処理を繰り返す。
【００３７】
さて、２値化部３１では、バーコード画像の２値化を行うが、この２値化を行う際のしきい値の算出（ステップ１０３）は、判別基準法を用いて行う。例えば、図４（ａ）に示す階調画像（同図では、ディザ処理を施した２値画像として表示している）をしきい値１１４（８ビット）で２値化した場合には、図４（ｂ）に示すような２値画像が得られる。このしきい値１１４は、判別基準法により求めたものであるが、これを別のしきい値に変更する場合（ステップ１１１でＹＥＳの場合）には、クラス１（しきい値１１４よりも小さい値の画素）の平均濃度値としきい値の間を３つに区切り、この区切った値を新たなしきい値とする。ただし、最初に変更するのは、区切り値のうちの１１４に近いものと利用する。この場合、変更したしきい値は、９０となり、図４（ｃ）に示すような２値画像が得られることになる。また、さらにしきい値の変更が必要な場合には、もう１つの区切り値を用い、さらなる変更を行う場合には、クラス２（しきい値１１４よりも大きい値の画素）の平均濃度値としきい値の間を３つに区切る値を利用する。なお、しきい値の算出方法は、他のどの方法を用いても良い。
【００３８】
次に、バーコードライン抽出部３２によるバーコードライン抽出処理（ステップ１０５）の詳細について説明する。
図５および図６は、バーコードライン抽出処理の流れを示すフローチャートであり、図７は、２値化されたバーコード画像の例を示した図である。
【００３９】
バーコードライン抽出部３２は、まず、バーコード画像の各ラインの黒および白の塊数を算出する。算出する塊数は、黒および白の塊の数を示すもので、例えば、図７（ａ）に示すバーコード画像の１ライン目（図中最上位のライン）は３、２乃至１３ライン目は１７となる。
【００４０】
次に、塊数が高頻度となるライン数（以下、高頻度値とする）が全ライン数に占める割合を算出する（ステップ２０２）。その結果、高頻度値が全ライン数に占める割合が９０％以上であった場合には（ステップ２０３でＹＥＳ）、「全ラインにバーコードが存在する」と判定するとともに（ステップ２０４）、当該バーコード画像には、「ノイズが含まれていない」と判定する（ステップ２０５）。
【００４１】
一方、高頻度値が全ラインに占める割合が９０％未満であった場合には（ステップ２０３でＮＯ）、高頻度塊数±１０の塊を有するラインを抽出する（ステップ２０６）。そして、高頻度値が抽出ライン数に占める割合を算出する（ステップ２０７）。その結果、高頻度値が抽出ライン数に占める割合が９０％以上であった場合には（ステップ２０８でＹＥＳ）、「高頻度塊数のラインにバーコードが存在する」と判定するとともに（ステップ２０９）、当該バーコード画像には、「ノイズが含まれていない」と判定する（ステップ２０５）。ただし、ステップ２０６で抽出するラインの範囲には、下限が存在し、必ずしも高頻度塊数±１０となるとは限らない。これは、バーコードの性質上、バーの最低数が決まっている（バーコードの種類により異なる）ためであり、この数を下限として処理を行うことになる。
【００４２】
また、高頻度値が抽出ラインに占める割合が９０％未満であった場合には（ステップ２０８でＮＯ）、高頻度塊数から高頻度塊数−１０の範囲の塊を有する全てのラインの合計数が抽出ライン数に占める割合を算出し（ステップ２１０）、その割合が９０％以上であった場合には（ステップ２１１でＹＥＳ）、「高頻度塊数から高頻度塊数−１０の範囲のラインにバーコードが存在する」と判定するとともに（ステップ２１２）、当該バーコード画像には、「ノイズが含まれている」と判定する（ステップ２１３）。ただし、この場合にも範囲（高頻度塊数−１０）には下限がある。
【００４３】
一方、高頻度塊数から高頻度塊数−１０の範囲の塊を有する全てのラインの合計数が抽出ライン数に占める割合が９０％未満であった場合には（ステップ２１１でＮＯ）、高頻度塊数から高頻度塊数＋１０の範囲の塊を有する全てのラインの合計数が抽出ライン数に占める割合を算出し（ステップ２１４）、その割合が９０％以上であった場合には（ステップ２１５でＹＥＳ）、「高頻度塊数から高頻度塊数＋１０の範囲のラインにバーコードが存在する」と判定するとともに（ステップ２１６）、当該バーコード画像には、「ノイズが含まれている」と判定する（ステップ２１３）。また、高頻度塊数から高頻度塊数＋１０の範囲の塊を有する全てのラインの合計数が抽出ライン数に占める割合が９０％未満であった場合には（ステップ２１５でＮＯ）、「高頻度塊数±１０のラインにバーコードが存在する」と判定するとともに（ステップ２１７）、当該バーコード画像には、「ノイズが含まれている」と判定する（ステップ２１３）。
【００４４】
このような判定は、例えば、図７（ａ）に示すバーコード画像を対象とした場合、高頻度値は１７であるが、その全ライン中に占める割合は、９０％未満（１２／１４）であるので（ステップ２０３でＮＯ）、７〜２７の塊数を有するラインを抽出する（ステップ２０６）。ただし、上述した下限が存在する場合、例えば、下限が１７であれば１７〜２７の塊数を有するラインを抽出することになる。ここで抽出したラインは、全て塊数が１７のラインとなるので、高頻度値が抽出ラインに占める割合は１００％となり（ステップ２０８でＹＥＳ）、高頻度塊数のライン、つまり、塊数１７の２乃至１３ラインにバーコードが存在し（ステップ２０９）、ノイズがない（ステップ２０５）と判定される。
【００４５】
また、図７（ｂ）に示すバーコード画像を対象とした場合、高頻度値は１７であるが、その全ライン中に占める割合は、９０％未満（７／１４）であるので（ステップ２０３でＮＯ）、７〜２７の塊数を有するラインを抽出する（ステップ２０６）。ただし、上述した下限が存在する場合、例えば、下限が１７であれば１７〜２７の塊数を有するラインを抽出することになる。ここで抽出したラインは、２乃至１３ライン目の１２ラインとなるので、高頻度値が抽出ラインに占める割合は９０％未満（７／１２）となる（ステップ２０８でＮＯ）。また、７〜１７の塊数を有するライン数は７であり（ステップ２１１でＮＯ）、１７〜２７の塊数を有するライン数は１２、つまり、高頻度塊数から高頻度塊数＋１０の範囲の塊を有する全てのラインの合計数が抽出ライン数に占める割合が１００％となるため（ステップ２１５でＹＥＳ）、１７〜２７の塊数を有するラインである２乃至１３ラインにバーコードが存在し（ステップ２１６）、ノイズがある（ステップ２１３）と判定される。
【００４６】
ところで、バーコードライン抽出部３２は、抽出した各バーコードラインの情報を図８に示すような波形として対応付け部３３に出力する。出力する波形は、ノイズやバーの欠落、かすれ、つぶれ等が無かった場合の波形を図８（ａ）に示すようなものとすれば、正常な波形は、図８（ｂ）に示すようなものとなる。この図８（ｂ）に示す波形は、バーの幅を示す値（各波形）に多少の相違があるものの全体としては同様の傾向を示し、波形Ａ乃至Ｊが各々図８（ａ）に示すものに対応する。
【００４７】
また、バーコードラインにノイズが含まれる場合には、出力される波形は、図８（ｃ）に示すようなものとなる。この波形には、ノイズの影響により、図８（ａ）に示すものとは対応しない波形Ｘが存在することになる。
【００４８】
バーコードラインにバーの欠落が含まれる場合には、出力される波形は、図８（ｄ）に示すようなものとなる。この波形には、バーの欠落の影響により、図８（ａ）の波形Ｄに相当するものが欠落し、結果として、波形Ｃ乃至Ｅに対応するはずの部分に、対応しない波形Ｘが存在することになる。
【００４９】
バーコードラインにバーのつぶれが含まれる場合には、出力される波形は、図８（ｅ）に示すようなものとなる。この波形には、バーのつぶれの影響により、図８（ａ）の波形Ｉに相当するものがつぶれ、結果として、波形Ｈ乃至Ｊに対応するはずの部分に、対応しない波形Ｘが存在することになる。
【００５０】
また、元のバーコード画像が図９に示すように傾いていた場合であっても、出力される波形は、図８（ｆ）に示すように、バーの幅を示す値や、バーの位置が異なるものの、全体としては同傾向の波形となる。この場合、図８（ａ）に示したものと対応しないものは、波形Ｙのみとなる（波形Ｙは、波形Ａと比較して、その大きさが大きく異なるため）。
【００５１】
次に、対応付け部３３によるバーの対応付け処理について説明する。バーの対応付け処理では、図８に示したバーコードラインの情報に基づいて、波形Ａ乃至Ｊをそれぞれ対応付ける。
【００５２】
バーの対応付けは、ＤＰ（Dynamic Programing：動的計画法）マッチングにより行う。これにより、バーコードライン内に存在するノイズやバーの欠落、かすれ、つぶれ等を排除するとともに、バーコード画像自体の傾きによるバーの位置づれをも排除する。
【００５３】
このバーの対応付け処理に際しては、まず、基本ラインの検出（図３のステップ１０６参照）を行う。
【００５４】
基本ラインの検出は、上述したバーコードライン抽出部３２によるバーコードラインの抽出時に、「ノイズなし」と判定された場合と、「ノイズあり」と判定された場合とで異なる。
【００５５】
「ノイズなし」と判定された場合には、図１０に示すように、高頻度塊数のラインの中心のラインであるライン６１を基本ラインとする。
【００５６】
また、「ノイズあり」と判定された場合には、図１１に示すように、各塊数のラインの中心のラインであるライン６３、６４を基本ライン候補とする。また、同じ塊数のラインが複数箇所に分離して存在する場合は、そのラインの連続数が大きい方の中心ラインであるライン６２を基本ライン候補とする。基本ライン候補が決定されると、この基本ライン候補からＤＰマッチングにより、基本ラインを検出する。
【００５７】
図１２は、基本ライン検出処理の流れを示すフローチャートである。
まず、先に決定した基本ライン候補の１つを基本情報に設定する（ステップ３０１）。続いて、基本ライン候補以外の未処理ラインの１つを入力情報に設定する（ステップ３０２）。未処理ラインとは、以降のステップ３０３およびステップ３０４の処理を実施していないラインである。基本情報と入力情報を設定すると、ＤＰマッチングにより基本情報と入力情報の波形の合わせ込みを行い（ステップ３０３）、その際に算出した距離値を合計する（ステップ３０４）。なお、ステップ３０３およびステップ３０４での処理の詳細は後述する。そして、ステップ３０３およびステップ３０４の処理は、基本ライン候補以外の全てのラインを入力情報として処理するまで繰り返す（ステップ３０５でＮＯ）。
【００５８】
基本ライン候補以外の全てのラインを入力情報として処理すると（ステップ３０５でＹＥＳ）、別の基本ライン候補を基本情報に設定し（ステップ３０６でＮＯ、ステップ３０１）、全ての基本ライン候補を基本情報に設定して処理を行うと（ステップ３０６でＹＥＳ）、これまでの処理で算出した距離値合計が最小の基本ライン候補を基本ラインとして検出する（ステップ３０７）。
【００５９】
次に、ステップ３０３での基本情報と入力情報の波形の合わせ込み処理およびステップ３０４での距離値合計処理について説明する。
【００６０】
ステップ３０３での基本情報と入力情報の波形の合わせ込み処理は、基本情報と入力情報の各波形の距離値（類似度）を算出するもので、ここで算出した各波形の距離値を波形全体の距離として合計したものがステップ３０４での距離値合計処理となる。
【００６１】
ここで、図１３を参照して距離値の算出方法について説明する。
図１３は、距離値の算出方法を説明するための図である。
【００６２】
まず、同図の横軸に基本情報の幅情報を設定する。この幅情報は、基本情報の各波形の幅を表すもので、−１，２，−２，２，−３，１．．．のような値を設定する。この値の絶対値は、画素数を示しており、正の数は黒画素を負の数は白画素を表している。また、同様に縦軸に入力情報の幅情報を設定する。なお、基本情報と入力情報の幅情報の数は、ノイズ等の影響があるため必ずしも一致しない。
【００６３】
次に、入力情報の最初の波形と基本情報の各波形との距離値を求める。まず、入力情報の最初の波形と基本情報の最初の波形の距離値は、各幅情報の差の絶対値により求められる。例えば、入力情報の最初の波形の幅情報が「−５」で、基本情報の最初の波形の幅情報が「−１」であれば、両者の距離値は、その差の絶対値である「４」となる。
【００６４】
続いて、入力情報の最初の波形と基本情報の２番目の波形との距離値を求める。この距離値は、入力情報の最初の波形と基本情報の最初の波形の距離値に、入力情報の最初の波形と基本情報の２番目の波形の幅情報の差の絶対値を加えた値となる。
【００６５】
次に、入力情報の最初の波形と基本情報の３番目以降の波形との距離値を求めるが、これらの距離値は、入力情報の最初の波形と基本情報の２番目の波形の距離値と同様に、
0004089807.tif 000002
により求められる。
【００６６】
次に、基本情報の最初の波形と入力情報の各波形との距離値を求める。基本情報の最初の波形と入力情報の最初の波形の距離値は、各幅情報の差の絶対値により求められる。基本情報の最初の波形と入力情報の２番目以降の波形との距離値は、入力情報の最初の波形と基本情報の２番目以降の波形の距離値と同様に、
0004089807.tif 000003
により求められる。
【００６７】
次に、入力情報のｎ番目の波形と基本情報のｍ番目の波形の距離値を求める。ただし、ここでのｎとｍは、２以上の整数である。まず、入力情報のｎ番目の波形と基本情報のｍ番目の波形の幅情報の差の絶対値（以下、絶対値ｎｍと称する）を求める。続いて、ユークリッド距離とシティ距離を求める。ユークリッド距離は、図１４（ａ）に示すような距離であり、シティ距離は、図１４（ｂ）および図１４（ｃ）に示すような距離である。なお、以下では、図１４（ｂ）に示す距離をシティ距離１、図１４（ｃ）に示す距離をシティ距離２とする。
【００６８】
これら各距離は、
0004089807.tif 000004
で求められる。
【００６９】
そして、ユークリッド距離、シティ距離１、シティ距離２のうちの最小のものを入力情報のｎ番目の波形と基本情報のｍ番目の波形の距離値とする。
【００７０】
具体的に説明すると、図１３の一部を拡大した図１４（ｄ）に示すように、基本情報の幅情報が順に−１，２，−２．．．、入力情報の幅情報が−５，３，−２．．．であれば、入力情報の２番目の波形と基本情報の２番目の波形の距離値（図中ａ点の位置）は、その幅情報の差の絶対値が１であるから、
ユークリッド距離＝４＋１＋１＝６
シティ距離１＝８＋１＝９
シティ距離２＝１１＋１＝１２
となり、最小の６となる。
【００７１】
同様に、入力情報の２番目の波形と基本情報の３番目の波形の距離値（図中ｂ点の位置）は、その幅情報の差の絶対値が５であるから、
ユークリッド距離＝１１＋５＋５＝２１
シティ距離１＝６＋５＝１１
シティ距離２＝１４＋５＝２１
となり、最小の１１となる。
【００７２】
また、入力情報の３番目の波形と基本情報の２番目の波形の距離値（図中ｃ点の位置）は、その幅情報の差の絶対値が４であるから、
ユークリッド距離＝８＋４＋４＝１６
シティ距離１＝９＋４＝１３
シティ距離２＝６＋４＝１０
となり、最小の１０となる。
【００７３】
さらに、入力情報の３番目の波形と基本情報の３番目の波形の距離値（図中ｄ点の位置）は、その幅情報の差の絶対値が０であるから、
ユークリッド距離＝６＋０＋０＝６
シティ距離１＝１０＋０＝１０
シティ距離２＝１１＋０＝１１
となり、最小の６となる。
【００７４】
このようにして、順次、入力情報のｎ番目の波形と基本情報のｍ番目の波形の距離値を求め、入力情報の最後の波形と基本情報の最後の波形の距離値（図１３中右上に×印で示す）まで求める処理が、ステップ３０３での基本情報と入力情報の波形の合わせ込み処理となる。また、ステップ３０４での距離値合計処理は、ここで求めた距離値を合計する処理となる。
【００７５】
次に、対応付け部３３によるバーの対応付け処理（図３のステップ１０７参照）について説明する。
【００７６】
バーの対応付け処理においても、上述したノイズがある場合の基本ラインの検出と同様に、ＤＰマッチングにより、基本情報と入力情報の波形の合わせ込みを行い、その結果から各波形の対応を取得する。
【００７７】
図１５は、バーの対応付け処理時のＤＰマッチング処理の流れを示すフローチャートである。
【００７８】
バーの対応付け処理時のＤＰマッチング処理では、まず、基本ライン以外の未処理ラインの１つを入力情報に設定する（ステップ４０１）。未処理ラインとは、以降のステップ４０２の処理を実施していないラインである。次に、基本ラインを基本情報に設定して、基本情報と入力情報の波形の合わせ込みを行う（ステップ４０２）。そして、基本情報と入力情報の波形の合わせ込み処理を基本ライン以外の全てのラインを入力情報として処理するまで繰り返し（ステップ４０３でＮＯ）、基本ライン以外の全てのラインを入力情報として処理すると（ステップ４０３でＹＥＳ）、ＤＰマッチング処理を終了する。
【００７９】
さて、ＤＰマッチング処理が終了すると、入力情報のｎ番目の波形と基本情報のｍ番目の波形の距離値がそれぞれ算出される。この結果を利用し、図１６（ａ）に×印で示す入力情報の最後の波形と基本情報の最後の波形の距離値を示す位置から、図１６（ｂ）、図１６（ｃ）、図１６（ｄ）に示す各方向のうち、距離値が小さい方向に順次進んでいく。その結果、図１６（ｂ）に示した方向では、その位置が示す入力情報のｎ番目の波形と基本情報のｍ番目の波形が対応し、図１６（ｃ）、図１６（ｄ）に示す方向では、その位置が示す入力情報のｎ番目の波形と基本情報のｍ番目の波形は対応しない。
【００８０】
図１６（ａ）に示した例では、基本情報の１番目の波形と入力情報の１番目の波形が対応し、基本情報の２番目の波形と入力情報の２番目の波形が対応するが、基本情報の３番目および４番目に対応する入力情報の波形は存在しない。また、基本情報の５番目の波形と入力情報の３番目の波形、基本情報の６番目の波形と入力情報の４番目の波形等がそれぞれ対応する。
【００８１】
次に、バー幅算出部３４によるバー幅算出処理（図３のステップ１０８参照）について説明する。バー幅算出部３４は、対応付け部３３により対応付けられた各バーコードラインの各バー幅を集計し、最も頻度の高い幅を当該バーのバー幅として決定する。例えば、各バーコードラインのあるバー幅が図１７に示すように、幅２のものが４ライン、幅３のものが７ライン、幅４のものが１ラインであったとすれば、最も頻度の高い幅３を当該バーのバー幅とする。
【００８２】
次に、認識部４による認識処理（図３のステップ１０９参照）について説明する。図１８は、認識部４による認識処理の流れを示すフローチャートである。
【００８３】
認識部４では、まず、スタートキャラクタ検出部４１が、予め設定したスタートキャラクタ検出範囲からバーコードの始まりを示すスタートキャラクタを検出する（ステップ５０１でＹＥＳ、ステップ５０２）。スタートキャラクタ検出範囲は、例えば、図１９に示すように、バーコード画像の左端からＴ［ｍｍ］に設定しておく、これを左端から順次走査してスタートキャラクタを検出する。ただし、実際には、画像を走査するのではなく、バー幅特定部３で特定された情報（上述の基本ラインの波形のバー幅を特定したバー幅に修正したもの）に基づいて行う。また、スタートキャラクタ検出範囲を越えた場合であっても、最初に走査された黒バーは、無条件にスタートキャラクタであるか否かをチェックする。
【００８４】
スタートキャラクタ検出部４１によりスタートキャラクタが検出されると（ステップ５０３でＹＥＳ）、モジュール数算出部４２が、モジュール化およびモジュール数の算出といったモジュール処理を行う（ステップ５０４）。モジュール化とは、バーコードを構成する各バーの太さを分別する処理であり、このバーの太さの段階を表す数値をモジュール数と呼ぶ。例えば、バーコードの規格の１つであるＪＡＮ（ＪＩＳ  Ｘ  ０５０１）では、バーの太さを４段階で表し、１番細いバーを１モジュールと呼び、順次、太くなるに従って、２モジュール、３モジュール、４モジュールとなる。また、ＪＡＮでは、図２０に示すように１キャラクタを４本のバーで構成し、その合計モジュール数が７モジュールとなるように規定されている。したがって、バー幅特定部３で特定されたバー幅に１キャラクタの合計モジュール数（ＪＡＮでは７モジュール）を乗じた値を１キャラクタの合計バー幅で除すことにより、モジュール数を算出することができる。
【００８５】
モジュール処理が成功すると（ステップ５０５でＹＥＳ）、、キャラクタ変換部４３が１キャラクタ分のモジュール数の組み合わせをバーコード辞書と照らし合わせてキャラクタ（文字コード）に変換する（ステップ５０６）。
【００８６】
キャラクタ変換が終了すると（ステップ５０７でＹＥＳ）、文字コード出力部４４がチェックデジットの計算を行い（ステップ５０９）、その計算結果とバーコードが表現する最後の値とが一致すると（ステップ５０９でＹＥＳ）、バーコードの認識に成功したものとして文字コードを出力する。
【００８７】
一方、上述したいずれかの処理で、処理の失敗があった場合には（ステップ５０３、５０５、５０７、５０９のいずれかでＮＯ）、先に検出したスタートキャラクタ若しくは最初のバー以外のバーが、スタートキャラクタ検出範囲内にある限り、上述した各処理をもう一度行う。スタートキャラクタとして検出すべきバーがスタートキャラクタ検出範囲内に無い場合には（ステップ５０１でＮＯ）、当該バーコードをリジェクトして（ステップ５１０）、認識処理を終了する。
【００８８】
なお、ここでは、ＪＡＮを例として説明したが、予め複数規格のバーコード辞書を備えておけば、他の規格のバーコードであっても同様に処理することが可能である。
【００８９】
【発明の効果】
以上説明したように、この発明によれば、画像中に含まれるバーコードを認識する際に、バーコードを含む全てのラインの情報に基づいて、バーコードを構成する各バーの幅を特定するように構成したので、バーの欠落やかすれ、つぶれ等が存在したり、ノイズが混合している可能性の高い低解像度若しくは低品質の画像に含まれるバーコードを正確に認識することができ、バーコードを含む画像を有効に利用することが可能となる。
【図面の簡単な説明】
【図１】この発明を適用したバーコード認識装置の構成を示すブロック図である。
【図２】バーコードを含む帳票画像の例を示した図である。
【図３】バーコード認識装置の処理の流れを示すフローチャートである。
【図４】バーコード画像の例を示した図である。
【図５】バーコードライン抽出処理の流れを示すフローチャート（１）である。
【図６】バーコードライン抽出処理の流れを示すフローチャート（２）である。
【図７】２値化されたバーコード画像の例を示した図である。
【図８】バーコードライン抽出部３２が抽出した各バーコードラインの情報を示した図である。
【図９】傾いたバーコード画像を示した図である。
【図１０】基本ラインの検出を説明するための図（１）である。
【図１１】基本ラインの検出を説明するための図（２）である。
【図１２】基本ライン検出処理の流れを示すフローチャートである。
【図１３】距離値の算出方法を説明するための図（１）である。
【図１４】距離値の算出方法を説明するための図（２）である。
【図１５】バーの対応付け処理時のＤＰマッチング処理の流れを示すフローチャートである。
【図１６】バーの対応付け処理を説明するための図である。
【図１７】バー幅の算出方法を説明するための図である。
【図１８】認識部４による認識処理の流れを示すフローチャートである。
【図１９】スタートキャラクタ検出範囲を説明するための図である。
【図２０】モジュール処理を説明するための図である。
【符号の説明】
１    帳票画像取得部
２    帳票処理部
３    バー幅特定部
４    認識部
５    バーコード辞書
３１    ２値化部
３２    バーコードライン抽出部
３３    対応付け部
３４    バー幅算出部
４１    スタートキャラクタ検出部
４２    モジュール数算出部
４３    キャラクタ変換部
４４    文字コード出力部
６１    ライン
６２    ライン
６３    ライン
６４    ライン
【図１】
0004089807.tif 000005
【図２】
0004089807.tif 000006
【図３】
0004089807.tif 000007
【図４】
0004089807.tif 000008
【図５】
0004089807.tif 000009
【図６】
0004089807.tif 000010
【図７】
0004089807.tif 000011
【図８】
0004089807.tif 000012
【図９】
0004089807.tif 000013
【図１０】
0004089807.tif 000014
【図１１】
0004089807.tif 000015
【図１２】
0004089807.tif 000016
【図１３】
0004089807.tif 000017
【図１４】
0004089807.tif 000018
【図１５】
0004089807.tif 000019
【図１６】
0004089807.tif 000020
【図１７】
0004089807.tif 000021
【図１８】
0004089807.tif 000022
【図１９】
0004089807.tif 000023
【図２０】
0004089807.tif 000024