(57)【要約】【課題】バーコードの認識を高速かつ高精度でおこなうことを課題とする。【解決手段】画像中の注目画素を所定の移動間隔で移動させるとともに、この移動間隔に応じた複数のサイズの画像変換フィルタを用いることとし、画像中の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出し、エッジ強度が所定の閾値以上であり、かつ、エッジ方向が基準方向から所定の角度以内であるエッジ点候補が基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定し、基準方向および直交方向にエッジ点の個数を加算したヒストグラムをそれぞれ生成し、かかるヒストグラムに基づいて画像中のバーコードの位置を認識する。【選択図】        図１
2006031167.tif 000002
【特許請求の範囲】
【請求項１】
バーコードを含む所定の領域を撮像した画像からバーコードを認識するバーコード認識装置であって、
前記画像を形成する複数の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出するエッジ点候補検出手段と、
エッジ強度が所定の閾値以上であり、かつ、エッジ方向が前記基準方向から所定の角度以内であるエッジ点候補が前記基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定するエッジ点判定手段と、
前記基準方向および前記直交方向に前記エッジ点の個数を加算したヒストグラムをそれぞれ生成するヒストグラム生成手段と、
前記ヒストグラムに基づいて前記画像中のバーコードの位置を認識するバーコード位置認識手段と
を備えたことを特徴とするバーコード認識装置。
【請求項２】
前記エッジ点候補検出手段は、前記画像中に移動可能な注目画素を設定し、該注目画素およびその隣接画素のラプラシアン値に基づいて前記エッジ点候補を検出することを特徴とする請求項１に記載のバーコード認識装置。
【請求項３】
前記エッジ点候補検出手段は、前記注目画素のラプラシアン値が所定の値をとる場合に、前記エッジ点候補を検出することを特徴とする請求項２に記載のバーコード認識装置。
【請求項４】
前記エッジ点候補検出手段は、前記基準方向に前記注目画素を両側から挟む画素を前記隣接画素とすることを特徴とする請求項２または３に記載のバーコード認識装置。
【請求項５】
前記エッジ点判定手段は、前記エッジ点候補のエッジ方向が前記基準方向から所定の角度以外にある場合には該エッジ点候補を候補から除外することを特徴とする請求項１〜４のいずれか一つに記載のバーコード認識装置。
【請求項６】
前記エッジ点判定手段は、前記注目画素の移動間隔に応じた該注目画素の近傍画素領域内において、対象領域の異なる複数のエッジ抽出フィルタを前記エッジ点候補にかけることにより前記エッジ強度および前記エッジ方向を検出することを特徴とする請求項１〜５のいずれか一つに記載のバーコード認識装置。
【請求項７】
前記バーコード認識手段は、前記ヒストグラムの基準方向最大値および直交方向最大値に基づいて、前記バーコードから数字を除いたバーコード部の位置を認識することを特徴とする請求項１〜６のいずれか一つに記載のバーコード認識装置。
【請求項８】
前記バーコード認識手段は、前記バーコード部の位置に基づいて前記バーコードの数字の位置を特定し、該数字を認識することにより前記バーコードを認識することを特徴とする請求項１〜７のいずれか一つに記載のバーコード認識装置。
【請求項９】
前記エッジ点候補検出手段は、前記基準方向あるいは前記直交方向に前記注目画素を所定の画素間隔で移動させることにより、前記入力画像全体を走査することを特徴とする請求項２〜８のいずれか一つに記載のバーコード認識装置。
【請求項１０】
バーコードを含む所定の領域を撮像した画像からバーコードを認識するバーコード認識方法であって、
前記画像を形成する複数の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出するエッジ点候補検出工程と、
エッジ強度が所定の閾値以上であり、かつ、エッジ方向が前記基準方向から所定の角度以内であるエッジ点候補が前記基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定するエッジ点判定工程と、
前記基準方向および前記直交方向に前記エッジ点の個数を加算したヒストグラムをそれぞれ生成するヒストグラム生成工程と、
前記ヒストグラムに基づいて前記画像中のバーコードの位置を認識するバーコード位置認識工程と
を備えたことを特徴とするバーコード認識方法。
【請求項１１】
バーコードを含む所定の領域を撮像した画像からバーコードを認識するバーコード認識プログラムであって、
前記画像を形成する複数の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出するエッジ点候補検出手順と、
エッジ強度が所定の閾値以上であり、かつ、エッジ方向が前記基準方向から所定の角度以内であるエッジ点候補が前記基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定するエッジ点判定手順と、
前記基準方向および前記直交方向に前記エッジ点の個数を加算したヒストグラムをそれぞれ生成するヒストグラム生成手順と、
前記ヒストグラムに基づいて前記画像中のバーコードの位置を認識するバーコード位置認識手順と
をコンピュータに実行させることを特徴とするバーコード認識プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バーコードを含む所定の領域を撮像した画像からバーコードを認識するバーコード認識装置、バーコード認識方法およびバーコード認識プログラムに関し、特に、能力が低いハードウェアを用いても高精度なバーコード認識をおこなうことができるバーコード認識装置、バーコード認識方法およびバーコード認識プログラムに関する。
【背景技術】
【０００２】
従来、帳票等の任意の位置に付されたバーコードを認識するバーコード認識装置においては、バーコードから数字を除いたバーコード部の位置を検出し、かかる位置情報に基づいてバーコードを認識することが通常であった。
【０００３】
たとえば、特許文献１には、認識対象となる画像全体に微分処理を施したうえで、かかる画像全体に膨張処理および縮退処理を施すことにより、バーコード部の位置を検出し、検出したバーコード部の位置に基づいてバーコードを認識する技術が開示されている。
【０００４】
また、特許文献２には、バーコード部のセンターバー、スタートバーおよびエンドバーを抽出することによりバーコード部の位置を検出し、検出したバーコード部の位置に基づいてバーコードを認識する技術が開示されている。
【０００５】
【特許文献１】特開平８−９６０５９号公報
【特許文献２】特開平９−２２４３７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１によれば、認識対象となる画像全体に対し、微分処理、膨張処理および縮退処理を施すので、これらの画像処理に要する計算量が大きなものとなってしまう。このため、かかる画像処理を実用上十分な速度でおこなうには、能力が高いハードウェアを用いなければならないという問題があった。
【０００７】
また、特許文献２によれば、バーコード部の目印となるセンターバーなどを検出できることがバーコード認識の前提となる。しかし、バーコードのバーを十分に検出することができない解像度の入力デバイスを用いる場合には、そもそも、かかる目印となるバーを検出することができないために、バーコード認識をおこなうことができないという問題があった。
【０００８】
これらのことから、能力の低いハードウェアを用いた場合であっても、実用上十分な速度で入力画像中のバーコードを認識することができるバーコード認識装置をいかにして実現するかが重要な課題となっている。
【０００９】
この発明は、上記課題（問題）に鑑みてなされたものであり、入力画像中のバーコードを迅速に認識し、能力が低いハードウェアを用いても高精度なバーコード認識をおこなうことができるバーコード認識装置、バーコード認識方法およびバーコード認識プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するために、請求項１の発明に係るバーコード認識装置は、バーコードを含む所定の領域を撮像した画像からバーコードを認識するバーコード認識装置であって、前記画像を形成する複数の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出するエッジ点候補検出手段と、エッジ強度が所定の閾値以上であり、かつ、エッジ方向が前記基準方向から所定の角度以内であるエッジ点候補が前記基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定するエッジ点判定手段と、前記基準方向および前記直交方向に前記エッジ点の個数を加算したヒストグラムをそれぞれ生成するヒストグラム生成手段と、前記ヒストグラムに基づいて前記画像中のバーコードの位置を認識するバーコード位置認識手段と
を備えたことを特徴とする。
【００１１】
また、請求項２の発明に係るバーコード認識装置は、請求項１の発明において、前記エッジ点候補検出手段は、前記画像中に移動可能な注目画素を設定し、該注目画素およびその隣接画素のラプラシアン値に基づいて前記エッジ点候補を検出することを特徴とする。
【００１２】
また、請求項３の発明に係るバーコード認識装置は、請求項２の発明において、前記エッジ点候補検出手段は、前記注目画素のラプラシアン値が所定の値をとる場合に、前記エッジ点候補を検出することを特徴とする。
【００１３】
また、請求項４の発明に係るバーコード認識装置は、請求項２または３の発明において、前記エッジ点候補検出手段は、前記基準方向に前記注目画素を両側から挟む画素を前記隣接画素とすることを特徴とする。
【００１４】
また、請求項５の発明に係るバーコード認識装置は、請求項１〜４のいずれか一つの発明において、前記エッジ点判定手段は、前記エッジ点候補のエッジ方向が前記基準方向から所定の角度以外にある場合には該エッジ点候補を候補から除外することを特徴とする。
【００１５】
また、請求項６の発明に係るバーコード認識装置は、請求項１〜５のいずれか一つの発明において、前記エッジ点判定手段は、前記注目画素の移動間隔に応じた該注目画素の近傍画素領域内において、対象領域の異なる複数のエッジ抽出フィルタを前記エッジ点候補にかけることにより前記エッジ強度および前記エッジ方向を検出することを特徴とする。
【００１６】
また、請求項７の発明に係るバーコード認識装置は、請求項１〜６のいずれか一つの発明において、前記バーコード認識手段は、前記ヒストグラムの基準方向最大値および直交方向最大値に基づいて、前記バーコードから数字を除いたバーコード部の位置を認識することを特徴とする。
【００１７】
また、請求項８の発明に係るバーコード認識装置は、請求項１〜７のいずれか一つの発明において、前記バーコード認識手段は、前記バーコード部の位置に基づいて前記バーコードの数字の位置を特定し、該数字を認識することにより前記バーコードを認識することを特徴とする。
【００１８】
また、請求項９の発明に係るバーコード認識装置は、請求項２〜８のいずれか一つの発明において、前記エッジ点候補検出手段は、前記基準方向あるいは前記直交方向に前記注目画素を所定の画素間隔で移動させることにより、前記入力画像全体を走査することを特徴とする。
【００１９】
また、請求項１０の発明に係るバーコード認識方法は、バーコードを含む所定の領域を撮像した画像からバーコードを認識するバーコード認識方法であって、前記画像を形成する複数の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出するエッジ点候補検出工程と、エッジ強度が所定の閾値以上であり、かつ、エッジ方向が前記基準方向から所定の角度以内であるエッジ点候補が前記基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定するエッジ点判定工程と、前記基準方向および前記直交方向に前記エッジ点の個数を加算したヒストグラムをそれぞれ生成するヒストグラム生成工程と、前記ヒストグラムに基づいて前記画像中のバーコードの位置を認識するバーコード位置認識工程とを備えたことを特徴とする。
【００２０】
また、請求項１１の発明に係るバーコード認識プログラムは、バーコードを含む所定の領域を撮像した画像からバーコードを認識するバーコード認識プログラムであって、
前記画像を形成する複数の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出するエッジ点候補検出手順と、エッジ強度が所定の閾値以上であり、かつ、エッジ方向が前記基準方向から所定の角度以内であるエッジ点候補が前記基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定するエッジ点判定手順と、前記基準方向および前記直交方向に前記エッジ点の個数を加算したヒストグラムをそれぞれ生成するヒストグラム生成手順と、前記ヒストグラムに基づいて前記画像中のバーコードの位置を認識するバーコード位置認識手順とをコンピュータに実行させることを特徴とする。
【発明の効果】
【００２１】
請求項１の発明によれば、画像を形成する複数の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出し、エッジ強度が所定の閾値以上であり、かつ、エッジ方向が基準方向から所定の角度以内であるエッジ点候補が基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定し、基準方向および直交方向にエッジ点の個数を加算したヒストグラムをそれぞれ生成し、ヒストグラムに基づいて画像中のバーコードの位置を認識するよう構成したので、高速かつ高精度にバーコード位置を認識することができるという効果を奏する。
【００２２】
また、請求項２の発明によれば、画像中に移動可能な注目画素を設定し、該注目画素およびその隣接画素のラプラシアン値に基づいてエッジ点候補を検出するよう構成したので、バーコード位置を高精度に認識することができるという効果を奏する。
【００２３】
また、請求項３の発明によれば、注目画素のラプラシアン値が所定の値をとる場合にのみ、エッジ点候補を検出するよう構成したので、バーコード位置を高速に認識することができるという効果を奏する。
【００２４】
また、請求項４の発明によれば、基準方向に注目画素を両側から挟む画素のみを隣接画素とするよう構成したので、バーコード位置を高速に認識することができるという効果を奏する。
【００２５】
また、請求項５の発明によれば、エッジ点候補のエッジ方向が基準方向から所定の角度以外にある場合には該エッジ点候補を候補から除外するよう構成したので、バーコード位置を高速に認識することができるという効果を奏する。
【００２６】
また、請求項６の発明によれば、注目画素の移動間隔に応じた注目画素近傍の画素領域内において、対象領域の異なる複数のエッジ抽出フィルタをエッジ点候補にかけることによりエッジ強度およびエッジ方向を検出するよう構成したので、バーコード位置を高精度に認識することができるという効果を奏する。
【００２７】
また、請求項７の発明によれば、ヒストグラムの基準方向最大値および直交方向最大値に基づいて、バーコードから数字を除いたバーコード部の位置を認識するよう構成したので、バーコード位置を高速に認識することができるという効果を奏する。
【００２８】
また、請求項８の発明によれば、バーコード部の位置に基づいてバーコードの数字の位置を特定し、該数字を認識することによりバーコードを認識するよう構成したので、画像が低解像度であってもバーコードを認識することができるという効果を奏する。
【００２９】
また、請求項９の発明によれば、記基準方向あるいは直交方向に注目画素を所定の画素間隔で移動させることにより、入力画像全体を走査するよう構成したので、バーコード位置を高速に認識することができるという効果を奏する。
【００３０】
また、請求項１０の発明によれば、画像を形成する複数の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出し、エッジ強度が所定の閾値以上であり、かつ、エッジ方向が基準方向から所定の角度以内であるエッジ点候補が基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定し、基準方向および直交方向にエッジ点の個数を加算したヒストグラムをそれぞれ生成し、ヒストグラムに基づいて画像中のバーコードの位置を認識するよう構成したので、高速かつ高精度にバーコード位置を認識することができるという効果を奏する。
【００３１】
また、請求項１１の発明によれば、画像を形成する複数の画素のうち所定の基準方向の濃度変化が大きな画素をエッジ点候補として検出し、エッジ強度が所定の閾値以上であり、かつ、エッジ方向が基準方向から所定の角度以内であるエッジ点候補が基準方向の直交方向に所定数連続する場合に、該所定数のエッジ点候補をエッジ点であると判定し、基準方向および直交方向にエッジ点の個数を加算したヒストグラムをそれぞれ生成し、ヒストグラムに基づいて画像中のバーコードの位置を認識するよう構成したので、高速かつ高精度にバーコード位置を認識することができるという効果を奏する。
【発明を実施するための最良の形態】
【００３２】
以下に添付図面を参照して、本発明に係るバーコード認識装置、バーコード認識方法およびバーコード認識プログラムの好適な実施例を説明する。なお、以下では、商品券の裏面に含まれるバーコードを認識する場合について説明する。また、以下の説明においては、バーコード内の黒バーおよび白バーからなるバーコード部分を「バーコードエリア」と、数字部分を「数字エリア」とそれぞれ呼ぶこととする。
【実施例】
【００３３】
図１は、本実施例に係るバーコード認識装置の構成を示す機能ブロック図である。同図に示すように、このバーコード認識装置１は、入力部１０と、数字エリア検出部２０と、数字認識部３０と、出力部４０と、バーコードエリア検出部１００とを備えており、かかるバーコードエリア検出部１００は、ゼロクロス点検出部１００ａと、エッジ点判定処理部１００ｂと、ヒストグラム生成処理部１００ｃと、バーコードエリア位置認識部１００ｄとを備えている。
【００３４】
入力部１０は、認識対象となるバーコード付き商品券の入力画像を装置内に取り込むための入力部であり、入力された画像をバーコードエリア検出部１００に出力する。具体的には、ラインセンサなどの入力デバイスを用いて、説明書きの文字列とバーコードとが混在した商品券の裏面を走査し、商品券の裏面全体の画像データを生成する。そして、かかる画像データを、たとえば、２５６階調の濃度値をもつグレースケール画像としてバーコードエリア検出部１００に出力する。
【００３５】
ここで、かかる入力部１０が生成する画像例を図２を用いて説明する。図２は、図１に示した入力部１０が生成する画像を説明するための説明図である。同図に示すように、商品券の裏面にはバーコードとともに、商品券の使用方法の説明や販売店の店名といった文字列が印刷されている。
【００３６】
したがって、かかる画像の画素値を単にｘ方向およびｙ方向に累積してヒストグラムを生成しても、これらのヒストグラムに基づいてバーコード位置を認識することは困難である。なぜならば、文字列に係る画素の影響により、バーコードに係る画素の情報が埋もれてしまうために、生成されたヒストグラムからバーコードの位置情報を抽出することは容易ではないからである。
【００３７】
本実施例においては、所定の特徴を有する特徴点（以下、「エッジ点」と言う）を抽出し、抽出したエッジ点の数を累積することにより、バーコード位置を認識することとしている。このエッジ点の抽出手法については後述するが、かかるエッジ点は、文字列部分のエッジ特徴の反映を抑えつつ、バーコードのバー部分のエッジ特徴を効率的に反映した点（画素）である。したがって、かかるエッジ点の個数を累積してヒストグラムを作成することとすれば、ヒストグラムに文字列の影響がでることを抑え、かかるヒストグラムからバーコード位置情報を取得することが可能となる。
【００３８】
しかしながら、入力画像の全画素にわたり、かかるエッジ点の抽出処理をおこなうと、抽出処理に要する計算量が多くなってしまい、高速なバーコード認識をおこなうことが困難となる。また、バーコード認識速度を上げるために、単純に、エッジ点の抽出対象とする画素を減らしたのでは、バーコードのバー部分のエッジ特徴が抽出対象外の画素に含まれる場合が多くなり、精度良くバーコード位置を認識することができない。
【００３９】
そこで、本実施例では、所定の画素間隔ずつとばした注目画素についてエッジ点抽出処理をおこなうことにより、バーコード認識速度を高速化するとともに、とばした画素についても、対象領域の異なる複数の画像フィルタを用いて画像処理の対象とすることにより、バー部分のエッジ特徴の見落としを防止している点に特徴がある。このようにすることで、バーコード認識速度の高速化と、バーコード認識精度の高精度化の両立を実現している。
【００４０】
本実施例においては、上述した「エッジ点」を抽出し、抽出したエッジ点の数を累積することにより、ｘ方向ヒストグラム１０１およびｙ方向ヒストグラム１０２を生成する。そして、ｘ方向ヒストグラム１０１の最大値１０１ａの位置に基づいてバーコード端座標１０１ｂおよびバーコード端座標１０１ｃを検出するとともに、ｙ方向ヒストグラム１０２の最大値１０２ａの位置に基づいてバーコード端座標１０２ｂおよびバーコード端座標１０２ｃを検出することにより、バーコードエリア１１の位置を認識する。
【００４１】
そして、このバーコードエリア１１の位置に基づいて数字エリア１２の位置を検出し、数字エリア１２中の数字を認識することによりバーコードの内容を認識する。このように、バーコードエリア１１の内容を認識することなく、バーコードエリア１１の位置に基づいて数字エリア１２の内容を認識するので、入力部１０の入力デバイスの解像度が低くバーコードのバーを読み取ることができない場合であっても、数字エリア１２の数字を読み取ることができる解像度があれば、バーコードの内容を認識することができる。なお、図２に示したように、以下の説明においては、水平右方向に向かうｘ軸および垂直下方向に向かうｙ軸からなるｘ−ｙ座標系を用いることとする。
【００４２】
図１の説明に戻り、バーコードエリア検出部１００について説明する。バーコードエリア検出部１００は、バーコードのバーコードエリア１１の位置を検出する処理をおこなう。具体的には、入力画像の画素値の濃度変化を取得して、濃度変化が正から負、または、負から正に変化する画素（以下、「ゼロクロス点」と言う）を検出する。そして、かかるゼロクロス点をエッジ点候補として、このエッジ点候補のエッジ強度およびエッジ方向を取得することにより、かかるエッジ点候補がエッジ点か否かを判定する。そして、エッジ点であると判定された画素の画素数を、ｘ方向およびｙ方向に累積し、ｘ方向ヒストグラム１０１およびｙ方向ヒストグラム１０２を生成する。そして、これらのヒストグラム（１０１および１０２）に基づいてバーコードエリア１１の位置を検出する。
【００４３】
ゼロクロス点検出部１００ａは、ラプラシアンフィルタを用いて入力画像からゼロクロス点（エッジ点候補）を検出する処理をおこなう。具体的には、入力画像中の注目画素について、この注目画素を中心とした周囲１ドットの範囲の画素を対象とするラプラシアンフィルタと、周囲２ドットの範囲の画素を対象とするラプラシアンフィルタとを適宜切替えて適用する。そして、かかる注目画素を所定の間隔で移動させることにより、入力画像全体についてゼロクロス点（エッジ点候補）を検出する。
【００４４】
エッジ点判定処理部１００ｂは、Ｓｏｂｅｌフィルタを用いて各ゼロクロス点（エッジ点候補）がエッジ点であるか否かを判定する処理をおこなう。具体的には、ゼロクロス点検出部１００ａにより検出された各エッジ点候補について、水平方向のＳｏｂｅｌフィルタおよび垂直方向のＳｏｂｅｌフィルタを適用し、かかるエッジ点候補のエッジ強度およびエッジ方向を求める。
【００４５】
そして、エッジ強度およびエッジ方向が所定の条件を満たしたエッジ点候補が、所定の方向に所定の個数連続している場合に、これらのエッジ点候補をエッジ点であると判定する。たとえば、ｘ軸と平行なバーを有するバーコードが入力画像に含まれる場合において、エッジ方向がｘ軸と平行である画素が、ｘ軸と平行に３画素連続しているならば、これらの３画素をすべてエッジ点であると判定する。
【００４６】
なお、Ｓｏｂｅｌフィルタについても周囲１ドットおよび周囲２ドット用のフィルタを適宜切替えて適用する。また、エッジ点判定処理部１００ｂで用いるフィルタは、エッジ強度およびエッジ方向を求めることができるフィルタであれば、Ｓｏｂｅｌフィルタ以外のフィルタであっても構わない。
【００４７】
ヒストグラム生成処理部１００ｃは、エッジ点判定処理部１００ｂによりエッジ点であると判定された画素の画素数をｘ方向およびｙ方向に累積し、ｘ方向ヒストグラム１０１およびｙ方向ヒストグラム１０２を生成する処理をおこなう。これらのヒストグラム（１０１および１０２）は、上述したエッジ点の累積数であるので、入力画像中の文字列よりもバーコードエリア１１が強調されている。したがって、これらのヒストグラム（１０１および１０２）の中でヒストグラム値が大きい部分にはバーコードエリア１１が存在していることになる。
【００４８】
なお、ヒストグラム生成処理部１００ｃは、ｘ−ｙ座標系を用いてｘ方向ヒストグラム１０１およびｙ方向ヒストグラム１０２を生成することとしたが、極座標などの他の座標系を用いてヒストグラムを生成するようにしても構わない。
【００４９】
バーコードエリア位置認識部１００ｄは、ヒストグラム生成処理部１００ｃにより生成されたヒストグラム（１０１および１０２）から、バーコードエリア１１の位置を認識する処理をおこなう。具体的には、ｘ方向ヒストグラム１０１から最大値１０１ａを検出し、かかる最大値１０１ａをとる座標からｘ軸の正負両方向に向かってヒストグラム値をサーチする。そして、最大値１０１ａの１／３の値をとる点をそれぞれ、バーコード端座標１０１ｂ、バーコード端座標１０１ｃとする。
【００５０】
また、ｙ方向ヒストグラム１０２から最大値１０２ａを検出し、ｙ方向ヒストグラム１０２のｙ軸両端から最大値１０２ａに向かってヒストグラム値をサーチする。そして、最大値１０２ａの１／２をとる点をそれぞれ、バーコード端座標１０２ｂ、バーコード端座標１０２ｃとする。
【００５１】
このように、各ヒストグラム（１０１および１０２）からバーコード端座標を検出する手順が異なる理由は以下のとおりである。すなわち、ｘ方向はバーの向きと平行であり、ｘ方向ヒストグラム１０１には、バーコードエリア１１の連続的なエッジ特徴があらわれるので、エッジ部分のヒストグラムも連続的な値をとる。したがって、最大値１０１ａをとる座標から両方向にそれぞれバーコード端座標（１０１ｂおよび１０１ｃ）を検出することとしても問題ない。
【００５２】
一方、ｙ方向はバーの向きと垂直であり、ｙ方向ヒストグラム１０２には、不連続なエッジ特徴があらわれる。また、所定の画素間隔でエッジ検出をおこなっているため、バー１本に対するエッジ特徴が全くあらわれない場合もある。このため、最大値１０２ａをとる座標から両方向にそれぞれバーコード端座標（１０２ｂおよび１０２ｃ）を検出しようとしても、ヒストグラムに連続性がなく途切れ途切れになっているため、かかるバーコード端座標を正しく検出することができない。これらの理由から、方向別（ｘ方向およびｙ方向）にそれぞれ異なるバーコード端検出手順を用いることとした。なお、上述した各バーコード端座標を検出するために用いた定数（１／２および１／３）は、他の定数を用いても構わない。
【００５３】
数字エリア検出部２０は、バーコードエリア検出部１００により検出されたバーコードエリア１１の位置に基づいて、数字エリア１２の位置を検出する処理をおこなう。また、数字認識部３０は、数字エリア検出部２０により検出された数字エリア１２の位置に基づいて、数字エリア１２内の各数字を認識する処理をおこなう。そして、出力部３０は、認識された数字エリア１２内の各数字を、辞書データなどを参照してバーコード情報に変換し出力する処理をおこなう。
【００５４】
次に、上述したバーコードエリア検出部１００の処理手順の概略を図３を用いて説明する。図３は、バーコードエリア検出部１００の処理概要を示すフローチャートである。なお、同図を用いた説明を補足するために、適宜、図４〜図１１を用いて説明をおこなうこととする。また、以下の説明の対象となる入力画像は、図２に示した入力画像であり、説明に用いる座標系は、図２に示したｘ軸およびｙ軸からなるｘ−ｙ座標系であるものとする。
【００５５】
図３に示すように、バーコードエリア検出部１００は、まず、入力画像の開始画素に移動して（ステップＳ１０１）、かかる画素（注目画素）および注目画素の周囲画素のラプラシアン値を算出する（ステップＳ１０２）。ステップＳ１０２においては、このラプラシアン値を算出するためにラプラシアンフィルタを用いる。図４は、かかるラプラシアンフィルタを説明するための説明図である。同図に示すように、ステップＳ１０２において用いられるラプラシアンフィルタは、注目画素の周囲１ドットを対象とするラプラシアンフィルタ１０３ａおよび注目画素の周囲２ドットを対象とするラプラシアンフィルタ１０３ｂの２種類である。なお、これらのラプラシアンフィルタ（１０３ａおよび１０３ｂ）の切り替え手順については後述する。
【００５６】
このように、サイズの異なる２種類のラプラシアンフィルタを用いるのは、所定数の画素をとばして注目画素を移動する処理（後述するステップＳ１０８）により、注目画素とならなかった画素をラプラシアンフィルタの対象画素に含め、エッジ特徴の見落としを防止するためである。たとえば、ｘ方向に４画素とばして次の注目画素に移動する場合には、周囲２ドットのフィルタを用いることで、とばした４画素をラプラシアンフィルタの対象画素に含めることができる。なお、本実施例においては、周囲１ドットおよび周囲２ドットのフィルタを用いることとしているが、注目画素の移動間隔の大小に応じてこれらのフィルタのサイズを変更することができる。
【００５７】
ここで、ラプラシアンフィルタを適用する各座標点について説明する。図５は、ラプラシアンフィルタを適用する座標点のラプラシアン値を説明するための説明図である。まず、ラプラシアン値１０４ａは、ラプラシアンフィルタ（１０３ａおよび１０３ｂ）を適用する中心点を上下左右方向にずらした場合のラプラシアン値を示す。たとえば、基準となる注目点のラプラシアン値をＬ（ｉ，ｊ）とすると、この注目点をｙ軸の正方向に１画素ずらした点のラプラシアン値はＬ（ｉ，ｊ＋１）で表される。そして、かかる注目点をｙ軸の負方向に１画素ずらした点のラプラシアン値はＬ（ｉ，ｊ−１）で表される。
【００５８】
また、座標点名称１０４ｂは、注目点および注目点の周囲１画素の名称を定義する。まず、注目点を「Ｃ」点とし、「Ｃ」点の上側（ｙ軸の負方向に１画素移動）の点を「Ｔ」点とする。そして、「Ｃ」点の下側（ｙ軸の正方向に１画素移動）の点を「Ｂ」点とする。また、「Ｃ」点の右側（ｘ軸の正方向に１画素移動）の点を「Ｒ」点とし、「Ｒ点」の上側の点を「ＲＴ」点、下側の点を「ＲＢ」点とする。同様に、「Ｃ」点の左側（ｘ軸の負方向に１画素移動）の点を「Ｌ」点とし、「Ｌ」点の上側の点を「ＬＴ」点、下側の点を「ＬＢ」点とする。
【００５９】
図３の説明に戻って、ステップＳ１０３について説明する。Ｓ１０２において注目画素および周囲画素のラプラシアン値を算出すると、次に、かかる注目画素がゼロクロス点であるか否かを判定する（ステップＳ１０３）。たとえば、Ｃ点、Ｔ点、Ｂ点のラプラシアン値を比較することにより、Ｃ点がゼロクロス点ではないと判定した場合には（ステップＳ１０３否定）、次の注目画素への画素移動をおこなう（ステップＳ１０８）。なお、図２に示したバーコードエリア１１内の各バーはｘ軸と平行方向であるため、ゼロクロス点であるか否かの判定には、Ｃ点、Ｔ点およびＢ点を用いる。なぜならば、各バーと垂直方向の各点を比較することにより、バーがある位置とバーがない位置とのラプラシアン値の変化を捉えやすいからである。したがって、バーコードのバーの向きがｙ軸と平行方向である場合には、ゼロクロス点判定にＣ点、Ｌ点およびＲ点を用いることになる。
【００６０】
一方Ｃ点がゼロクロス点であると判定した場合には（ステップＳ１０３肯定）、ゼロクロス点と判定されたＣ点のエッジ強度およびエッジ方向を算出する（ステップＳ１０４）。本実施例においては、かかるエッジ強度およびエッジ方向の算出にＳｏｂｅｌフィルタを用いる。図６は、このＳｏｂｅｌフィルタを説明するための説明図である。
【００６１】
同図に示すように、本実施例においては、縦方向（ｙ軸と平行方向）のエッジを検出するための、周囲１ドットを対象とする水平方向Ｓｏｂｅｌフィルタ１０５ａと、横方向（ｘ軸と平行方向）のエッジを検出するための、周囲１ドットを対象とする垂直方向Ｓｏｂｅｌフィルタ１０５ｂと、周囲２ドットを対象とする水平方向Ｓｏｂｅｌフィルタ１０５ｃと、周囲２ドットを対象とする垂直方向Ｓｏｂｅｌフィルタ１０５ｄとを用いる。なお、周囲１ドットおよび周囲２ドットを対象とするＳｏｂｅｌフィルタの切り替えについては後述する。
【００６２】
このように、サイズの異なる２種類のＳｏｂｅｌフィルタを用いるのは、所定数の画素をとばして注目画素を移動する処理（後述するステップＳ１０８）により、注目画素とならなかった画素をＳｏｂｅｌフィルタの対象画素に含め、エッジ特徴の見落としを防止するためである。たとえば、ｘ方向に４画素とばして次の注目画素に移動する場合には、周囲２ドットのフィルタを用いることで、とばした４画素をＳｏｂｅｌフィルタの対象画素に含めることができる。なお、本実施例においては、周囲１ドットおよび周囲２ドットのフィルタを用いることとしているが、注目画素の移動間隔の大小に応じてこれらのフィルタのサイズを変更することができる。
【００６３】
図３の説明に戻り、これらのＳｏｂｅｌフィルタを用いたエッジ強度およびエッジ方向の算出（ステップＳ１０４）について説明する。ステップＳ１０３によりＣ点がゼロクロス点と判別された場合、このＣ点について水平方向Ｓｏｂｅｌフィルタをかけた場合のエッジ強度をｍａｇＸ、垂直方向Ｓｏｂｅｌフィルタをかけた場合のエッジ強度をｍａｇＹとすると、かかるＣ点のエッジ強度（ｍａｇ）は、式
ｍａｇ＝｜ｍａｇＸ｜＋｜ｍａｇＹ｜
であらわされる。そして、エッジ方向（θ）は、式
θ＝ａｔａｎ（ｍａｇＹ／ｍａｇＸ）
であらわされる。ここで、エッジ方向（θ）について図７を用いて説明する。
【００６４】
図７は、エッジ方向について説明するための説明図である。エッジ方向の許容範囲（水平）１０６ａは、水平方向の許容範囲を２０°とした場合のθのとりうる値を斜線で示しており、エッジ方向の許容範囲（垂直）１０６ｂは、垂直方向の許容範囲を水平方向と同様に２０°とした場合のθのとりうる値を斜線で示している。たとえば、エッジ方向（θ）が５°である場合には、Ｃ点のエッジ方向は、水平方向の許容範囲に含まれ、エッジ方向（θ）が８５°である場合には、Ｃ点のエッジ方向は、垂直方向の許容範囲に含まれる。なお、図２に示したバーコードエリア１１内の各バーはｘ軸と平行方向であるため、水平方向の許容範囲に含まれるＣ点のみがエッジ点の候補となりうる。逆に、かかる各バーがｙ軸と平行方向である場合には、垂直方向の許容範囲に含まれるＣ点のみがエッジ点の候補となりうる。
【００６５】
ここで、エッジ方向（θ）に、上述した許容範囲を設けた理由について、図８および図９を用いて説明する。図８は、連続エッジ点の斜行について説明するための説明図であり、図９は、本実施例に係る連続エッジ点の斜行について説明するための説明図である。
【００６６】
図８に示すように、一般的に、ｘ軸と完全に平行な１ドット幅の直線を検出した場合には、上側の図のような連続したエッジ点として検出されるはずである。しかしながら、認識対象となる入力画像に含まれるバーコードエリア１１の各バーは、認識対象となる物品のずれなどにより、ｘ軸とは完全に平行とはならない。したがって、ｘ軸からずれたかかる直線は下側の図に示したように、ｘ軸方向に連続したｍドットがｙ軸方向に１ドットずれた状態で検出されることになる。つまり、エッジ方向（θ）は、式
θ＝ａｔａｎ（１／ｍ）
であらわされる。
【００６７】
本実施例においては、図９に示すように、Ｌ点、Ｃ点およびＲ点の連続した３点についてエッジ点判定をおこない、さらに、Ｃ点をｘ軸方向に５ドットずつスキップすることとしたので、かかるθの算出式のｍに５を代入するとθ＝１１．３°となる。したがって、最大１１．３°の斜行に対応することができる。
【００６８】
図３の説明に戻って、エッジ点か否かの判定（ステップＳ１０５）について説明する。本実施例においては、図９に示したように、Ｌ点、Ｃ点およびＲ点の連続した３点についてエッジ点判定をおこなう。具体的には、各点についての上述したエッジ強度（ｍａｇ）が所定の閾値以上であり、かつ、上述したエッジ方向（θ）が図７の１０６ａに示した許容範囲内である場合には、かかる点はエッジ点であると判定される。そして、Ｌ点、Ｃ点およびＲ点のすべてがエッジ点であると判定された場合には、これらの３点はエッジ点であると判定され、Ｌ点、Ｃ点およびＲ点のうち１つでもエッジ点ではないと判定された場合には、これらの３点はエッジ点ではないと判定される。
【００６９】
そして、エッジ点ではないと判定された場合には（ステップＳ１０５否定）、次の画素に移動し（ステップＳ１０８）、エッジ点であると判定された場合には（ステップＳ１０５肯定）、かかるエッジ点の個数のＸ方向ヒストグラムとＹ方向ヒストグラムとを累積する（ステップＳ１０６）。これらのヒストグラムの累積の結果生成されるｘ方向ヒストグラムおよびｙ方向ヒストグラムについて図１０を用いて説明する。
【００７０】
図１０は、本実施の形態に係るヒストグラムの加算について説明するための説明図である。同図に示すように、１０７ａ、１０７ｂおよび１０７ｃの各エッジ点が検出された場合において、これらの検出点の個数は、１０７ａ、１０７ｂおよび１０７ｃと同じｘ座標を有する、ｘ方向ヒストグラムの１０８ａ、１０８ｂおよび１０８ｃにそれぞれ１ずつ累積される。また、ｙ方向ヒストグラムについては、１０７ａ、１０７ｂおよび１０７ｃのｙ座標値は同一であるので、これら３点の個数がｙ方向ヒストグラムの１０９に累積される。
【００７１】
図３の説明に戻り、ステップＳ１０７以降の処理について説明する。ステップＳ１０６の処理が完了すると、全画素について処理が終了したか否かを判定し（ステップＳ１０７）、未だ処理が終了していない画素がある場合には（ステップＳ１０７否定）、所定数の画素をとばして次の画素に移動する（ステップＳ１０８）。一方、全画素について処理が終了した場合には（ステップＳ１０７肯定）、ｘ方向ヒストグラム１０１とｙ方向ヒストグラム１０２とからバーコードエリア１１の位置を決定する（ステップＳ１０９）。
【００７２】
つづいて、画素移動（ステップＳ１０８）について、図１１を用いて説明する。図１１は、本実施の形態に係る画素のとばし処理（スキップ処理）について説明するための説明図である。同図に示すように、最初の注目画素が１１０ａのＣ点である場合には、ｘ軸の正方向に５画素スキップして１１０ｂのＣ点を、次の注目画素に設定する。そして、ｘ軸の正方向にかかるスキップ処理を繰り返し、入力画像の領域外に出てしまう場合には、ｘ座標を最初の注目画素のｘ座標としたうえで、ｙ軸方向に４画素スキップして１１１ａのＣ点に注目画素を設定する。同様に、１１１ｂのＣ点に注目画素をスキップしていく。このようなスキップ処理をおこなうことにより、高速かつ高精度にバーコード位置の検出をおこなうことができる。
【００７３】
なお、かかるスキップ処理によるエッジ特徴の見落としを防止するため、上述したように、ステップＳ１０２およびステップＳ１０４において、それぞれ、周囲１ドットフィルタおよび周囲２ドットフィルタを用いることとしている。
【００７４】
次に、本実施例のバーコード認識装置１の処理手順についてさらに詳細に説明する。図１２は、図１に示した各処理部の処理手順を示すフローチャートである。同図に示すように、入力部１０は、バーコードを含む認識対象画像の取得処理をおこない（ステップＳ２０１）、取得した入力画像をバーコードエリア検出部２０に出力する。かかる入力画像を受け取ったバーコードエリア検出部１００は、入力画像中のバーコードに含まれるバーコードエリア１１のサーチ処理をおこなう（ステップＳ２０２）。そして、バーコードエリア１１の位置検出が完了したならば、検出したバーコードエリア１１の位置データを数字エリア検出部２０に出力する。
【００７５】
そして、バーコードエリア１１の位置データを受け取った数字エリア検出部２０は、この位置データに基づいて数字エリア１２のサーチ処理をおこない（ステップＳ２０３）、検出した数字エリア１２の位置データを数字認識部に出力する。数字エリア１２の位置データを受け取った数字認識部３０は、数字エリア１２内の各数字を認識し（ステップＳ２０４）、認識した数字データを出力部４０に出力する。そして、かかる数字データを受け取った出力部４０は、バーコード認識結果の出力をおこなう（ステップＳ２０５）。
【００７６】
次に、図１２に示したバーコード部サーチ処理（ステップＳ２０２）について、さらに詳細に説明する。図１３は、図１２に示したバーコード部サーチ処理（ステップＳ２０２）のフローチャートである。なお、以降の説明においては、連続したエッジ点を検出した場合に、「エッジ検出」という用語を用いることとする。
【００７７】
図１２に示すように、バーコード部サーチ処理（ステップＳ２０２）では、まず、ヒストグラム値の初期化処理をおこなう（ステップＳ３０１）。たとえば、ｘ方向ヒストグラム１０１およびｙ方向ヒストグラム１０２を、それぞれ、ｈｉｓｔＸ（ｘ）およびｈｉｓｔＹ（ｙ）とあらわしたならば、すべてのｈｉｓｔＸおよびｈｉｓｔＹの値を０に設定する。
【００７８】
そして、入力画像の開始座標へと移動して（ステップＳ３０２）、かかる座標を注目画素に設定しバーコードエリア１１位置の検出処理を開始する。開始座標は、入力画像の大きさごとに任意に設定することができる。つづいて、かかる注目画素を中心とした３点
について、周囲１ドットフィルタを用いたエッジ検出処理をおこなう（ステップＳ３０３）。かかる３点は、たとえば、図５に示した１０４ｂ内のＣ点、Ｌ点およびＲ点であり、Ｃ点が注目画素に相当する。このエッジ検出処理で用いるフィルタは、図４に示したラプラシアンフィルタ（周囲１ドット）１０３ａ、図６に示したＳｏｂｅｌフィルタ（水平，周囲１ドット）１０５ａおよびＳｏｂｅｌフィルタ（垂直，周囲１ドット）１０５ｂである。なお、エッジ検出処理の詳細については後述する。
【００７９】
そして、エッジ検出がなされたか否かを判定し（ステップＳ３０４）、エッジ検出がなされた場合には（ステップＳ３０４肯定）、周囲２ドットフィルタを用いたエッジ検出処理をおこなうことなく、ヒストグラム値の加算処理（ステップＳ３０７）をおこなう。ヒストグラム値加算処理（ステップＳ３０７）では、図１０に示した３点連続したエッジ検出点（１０７ａ〜１０７ｃ）のヒストグラム値加算処理をおこなう。かかるヒストグラム値加算処理においては検出したエッジ点の個数を加算する。すなわち、ｘ方向ヒストグラムには、１０８ａ〜１０８ｃの３点についてそれぞれ１を加算し、ｙ方向ヒストグラムには、１０９の１点に３を加算する。
【００８０】
一方、エッジ検出がなされなかった場合には（ステップＳ３０４否定）、周囲２ドットフィルタを用いたエッジ検出処理をおこなう（ステップＳ３０５）。このエッジ検出処理で用いるフィルタは、図４に示したラプラシアンフィルタ（周囲２ドット）１０３ｂ、図６に示したＳｏｂｅｌフィルタ（水平，周囲２ドット）１０５ｃおよびＳｏｂｅｌフィルタ（垂直，周囲２ドット）１０５ｄである。
【００８１】
かかる周囲２ドットフィルタを用いたエッジ検出処理によりエッジが検出された場合には（ステップＳ３０６肯定）、ヒストグラム値加算処理をおこなう（ステップＳ３０７）。一方、エッジが検出されなかった場合には（ステップＳ３０６否定）、ヒストグラム値の加算をすることなくｘ座標のスキップ処理（ステップＳ３０８）をおこなう。
【００８２】
このように、周囲１ドットフィルタを用いたエッジ検出処理においてエッジが検出されなかった場合（ステップＳ３０４否定）にのみ、周囲２ドットフィルタを用いたエッジ検出処理をおこなうことにより、重複したフィルタ処理をおこなうことなく効率的にエッジ検出をおこなうことができる。また、スキップ処理（ステップＳ３０８およびステップＳ３１１）との組み合わせにより、画素をスキップし処理速度を向上させながら、エッジ特徴の見落としを防止することができるので、効率的かつ高速にエッジ検出をおこなうことができる。
【００８３】
そして、周囲２ドットフィルタを用いてもエッジ検出がなされなかった場合（ステップ３０６否定）、あるいは、周囲１ドットフィルタまたは周囲２ドットフィルタを用いてエッジ検出がなされヒストグラム値加算処理（ステップＳ３０７）がおこなわれた場合には、つぎに、ｘ座標をスキップする処理がおこなわれる（ステップＳ３０８）。具体的には、図１１に示したように、ｘ軸の正方向に５画素移動する。そして、かかるスキップ処理の結果、ｘ座標が入力画像の領域外に出た場合には（ステップＳ３０９肯定）、ｘ座標を初期化したうえで（ステップＳ３１０）、ｙ座標のスキップ処理をおこなう（ステップＳ３１１）。一方、スキップ処理をおこなってもｘ座標が領域内にある場合には（ステップＳ３０９否定）、再度、周囲１ドットフィルタを用いたエッジ検出処理をおこなう（ステップＳ３０３）。
【００８４】
ｙ座標のスキップ処理（ステップＳ３１１）においては、図１１に示したように、４画素ずつｙ軸の正方向に４画素移動する。そして、そして、かかるスキップ処理の結果、ｙ座標が入力画像の領域外に出た場合には（ステップＳ３１２肯定）、バーコード部決定処理（ステップＳ３１３）をおこなったうえで、処理を終了する。一方、かかるスキップ処理をおこなってもｙ座標が領域内にある場合には（ステップＳ３１２否定）、再度、周囲１ドットフィルタを用いたエッジ検出処理をおこなう（ステップＳ３０３）。なお、バーコード部決定処理（ステップＳ３１３）については、後述することとする。
【００８５】
次に、図１３に示したエッジ検出処理（ステップＳ３０３およびステップＳ３０５）について図１４を用いて説明する。図１４は、図１３に示したエッジ検出処理のフローチャートである。なお、ステップＳ３０３においては、周囲１ドットフィルタ（１０３ａ、１０５ａおよび１０５ｂ）を用い、ステップＳ３０５においては、周囲２ドットフィルタ（１０３ｂ、１０５ｃおよび１０５ｄ）用いる点が異なるが、それ以外の処理は同一である。
【００８６】
図１４に示すように、まず、注目点（Ｃ点）がエッジ点であるかのチェック処理をおこない（ステップＳ４０１）、Ｃ点がエッジ点である場合には（ステップＳ４０２肯定）、つづいて、Ｌ点がエッジ点であるかのチェックをおこない（ステップＳ４０３）、Ｌ点がエッジ点である場合には（ステップＳ４０４肯定）、さらに、Ｒ点がエッジ点であるかのチェック処理をおこなって（ステップＳ４０５）、点Ｒがエッジ点である場合には（ステップＳ４０６肯定）、エッジを検出したと判定して戻り値にＹｅｓを設定する（ステップＳ４０７）。なお、本実施例においては、戻り値にエッジ検出の有無を設定し、上位のルーチン（たとえば図１３のフローチャート）に戻る（リターンする）こととしたが、エッジ検出の有無を格納したフラグにより、上位のルーチンに伝えることとしてもよい。
【００８７】
一方、点Ｃがエッジ点ではない場合（ステップＳ４０２否定）、点Ｌがエッジ点ではない場合（ステップＳ４０４否定）、点Ｒがエッジ点ではない場合（ステップＳ４０６）のいずれかである場合には、エッジが未検出であると判定して戻り値にＮｏを設定する（ステップＳ４０８）。このように、連続した３点（点Ｃ、点Ｌおよび点Ｒ）のすべてがエッジ点である場合にのみエッジを検出したと判定し、かかる３点のいずれか一つでもエッジ点ではない場合にはエッジを検出しなかったと判定する。
【００８８】
次に、図１４に示したエッジチェック処理（ステップＳ４０１、ステップＳ４０３およびステップＳ４０５）について図１５を用いて説明する。図１５は、図１４に示したエッジチェック処理のフローチャートである。なお、これらのエッジチェック処理では、チェック対象となる点が異なるが（それぞれ、Ｃ点、Ｌ点およびＲ点）、処理内容は同一である。
【００８９】
エッジチェック処理においては、対象となる点がエッジ点であるか否かの判定をラプラシアンフィルタおよびＳｏｂｅｌフィルタを用いておこなう。ここでは、エッジチェック処理の対象点がＣ点である場合について説明する。なお、エッジチェック処理の対象点がＬ点である場合には、図１５のＣ点、Ｔ点およびＢ点は、それぞれ、Ｌ点、ＬＴ点、ＬＢ点と読み替えることとし、エッジチェック処理の対象点がＲ点である場合には、図１５のＣ点、Ｔ点およびＢ点は、それぞれ、Ｒ点、ＲＴ点、ＲＢ点と読み替えることとする。
【００９０】
図１５に示すエッジチェック処理においては、ステップＳ５０１〜ステップＳ５０５において、Ｃ点がゼロクロス点か否かを判定する。そして、Ｃ点がゼロクロス点であると判定された場合には、ステップＳ５０６〜ステップＳ５１１において、Ｃ点がエッジ点か否かを判定する。
【００９１】
図１５に示したように、エッジチェック処理においては、まず、Ｃ点にラプラシアンフィルタをかけて点Ｃのラプラシアン値を取得する（ステップＳ５０１）。そして、Ｃ点のラプラシアン値が０より大きい場合には（ステップＳ５０２肯定）処理を続行する。一方、Ｃ点のラプラシアン値が０以下である場合には（ステップＳ５０２否定）、点Ｃは、エッジ点ではないと判定してＮｏを戻り値に設定して（ステップＳ５１２）、処理を終了する。
【００９２】
点Ｃのラプラシアン値が０より大きい場合にのみ、Ｃ点がゼロクロス点か否かの判定処理をおこなう理由は以下のとおりである。一般に、Ｃ点がゼロクロス点である場合、たとえば、エッジの立上り部分やエッジの立下り部分にＣ点がある場合には、かかるＣ点と隣接するＴ点またはＢ点とのラプラシアン値の積は、負となる。しかしながら、本実施例においては、エッジに相当するバーコードのバー自体を読み取る必要はなく、かかるバーの位置を取得できればよい。したがって、Ｃ点が正の場合にのみＣ点のゼロクロス点判定をおこなうことにより処理を高速化することができる。
【００９３】
ここで、Ｃ点がゼロクロス点であるか否かを判定するための条件を図１６および図１７を用いて説明する。図１６は、一般的なゼロクロス点の判定条件を説明するための説明図であり、図１７は、本実施の形態に係るゼロクロス点の判定条件を説明するための説明図である。なお、図１６および図１７においては、図５の１０４ａに示したラプラシアン値の座標名を使用しており、以下の説明においては、１０４ｂに示した座標名を併せて用いることとする。たとえば、点Ｃのラプラシアン値はＬ（ｉ，ｊ）であり、点Ｔのラプラシアン値はＬ（ｉ，ｊ−１）である。
【００９４】
まず、一般的なゼロクロス点の判定条件を図１６を用いて説明する。同図に示すように、Ｃ点が縦方向のゼロクロス点となる条件は、条件（１）または条件（２）を満たすことである。一方、Ｃ点が横方向のゼロクロス点となる条件は、条件（３）または条件（４）を満たすことである。
【００９５】
次に、本実施例についてのゼロクロス点の判定条件を図１７を用いて説明する。同図に示すように、Ｃ点が縦方向のゼロクロス点となる条件は、条件（５）または条件（６）を満たすことである。一方、Ｃ点が横方向のゼロクロス点となる条件は、条件（７）または条件（８）を満たすことである。条件（５）〜（８）は、条件（１）〜（４）に、Ｃ点のラプラシアン値が０より大きいことを追加条件として付加したものである。なお、本実施例においては、バーコードエリア１１の各バーがｘ軸と水平方向である場合について説明しているので、Ｃ点が縦方向のゼロクロス点であるか否かをみればよい。すなわち、用いる条件は、条件（５）と条件（６）であり、条件（５）または条件（６）のいずれかを満たせば、Ｃ点はエッジ点であると判定されることになる。なお、図１５においては、「ステップＳ５０２肯定」かつ「ステップＳ５０５肯定」であれば、これらの条件を満たすこととなる。
【００９６】
図１５の説明に戻り、ステップＳ５０２が肯定である場合について、引き続き説明する。Ｃ点のラプラシアン値が０よりも大きい場合には（ステップＳ５０２肯定）、Ｔ点にラプラシアンフィルタをかけ（ステップＳ５０３）、つづいて、Ｂ点にラプラシアンフィルタをかける（ステップＳ５０４）。そして、Ｂ点のラプラシアン値が０より小さいか、または、Ｔ点のラプラシアン値が０より小さい場合には（ステップＳ５０５肯定）、処理を続行する。一方、Ｂ点のラプラシアン値、または、Ｔ点のラプラシアン値のいずれかが０より小さくない場合には（ステップＳ５０５否定）、点Ｃは、エッジ点ではないと判定してＮｏを戻り値に設定して（ステップＳ５１２）、処理を終了する。
【００９７】
ここで、かかるゼロクロス点判定（ステップＳ５０１〜ステップＳ５０５）について、図１８および図１９を用いて説明する。図１８は、周囲１ドットのラプラシアンフィルタ１０３ａを使用する手順を説明するための説明図であり、図１９は、周囲２ドットのラプラシアンフィルタ１０３ｂを使用する手順を説明するための説明図である。
【００９８】
まず、図１８に示した１２１ａの３点（Ｔ点、Ｃ点、Ｂ点）について周囲１ドットのラプラシアンフィルタをかけた場合について説明する。Ｃ点に周囲１ドットのラプラシアンフィルタ１０３ａをかけると、１２２に示したＣ点を中心とする９ドット（網掛け部分）がラプラシアンフィルタの対象点となる。同様に、Ｔ点については１２３、Ｂ点については１２４に示した各９ドットがフィルタの対象点となる。そして、求められたラプラシアン値を、それぞれ、ｌａｐＣ、ｌａｐＴおよびｌａｐＢとすると、点Ｃ、点Ｔおよび点Ｂのラプラシアン値は１２５に示したとおりとなる。
【００９９】
Ｌ点がゼロクロス点であるか否かを判定する場合には、図１８に示した１２１ｂの３点（ＬＴ点、Ｌ点およびＬＢ点）のラプラシアン値を同様の手順により求めると、ＬＴ点、Ｌ点およびＬＢ点のラプラシアン値は、１２６に示したとおりとなる。また、Ｒ点がゼロクロス点であるか否かを判定する場合には、１２１ｃの３点（ＲＴ点、Ｒ点およびＲＢ点）について同様の手順でラプラシアン値を求めると、１２６に示したとおりとなる。
【０１００】
図１９は、図１８と同様の手順で、周囲２ドットのラプラシアンフィルタ１０３ｂを用いた場合について説明している。１３２〜１３４の網掛けの部分が、周囲２ドットのラプラシアンフィルタ１０３ｂの対象点となる部分である。その他の説明は図１８と同様であるため説明は省略することとする。
【０１０１】
図１５の説明に戻って、ステップＳ５０５が肯定である場合について、引き続き説明する。ステップＳ５０６以降では、ゼロクロス点（エッジ点候補）と判定されたＣ点について、図６に示したＳｏｂｅｌフィルタ（１０５ａ〜１０５ｄ）を用いて、かかるゼロクロス点がエッジ点か否かの判定をおこなう。
【０１０２】
まず、点Ｃに水平方向および垂直方向のＳｏｂｅｌフィルタをかけ（ステップＳ５０６）、点Ｃのエッジ強度（ｍａｇ）を算出する。かかるエッジ強度（ｍａｇ）は、上述したように、式
ｍａｇ＝｜ｍａｇＸ｜＋｜ｍａｇＹ｜
であらわされる。そして、算出したエッジ強度（ｍａｇ）が、所定の閾値よりも大きい場合には（ステップＳ５０８肯定）、ひきつづき処理を続行する。一方、エッジ強度が所定の閾値よりも大きくない場合には（ステップＳ５０９否定）、点Ｃは、エッジ点ではないと判定してＮｏを戻り値に設定し（ステップＳ５１２）、処理を終了する。
【０１０３】
つづいて、点Ｃのエッジ方向（θ）を算出し（ステップＳ５０９）、点Ｃのエッジ方向が横方向、すなわち、図７の１０６ａに示した許容範囲にある場合には（ステップＳ５１０肯定）、点Ｃは、エッジ点であると判定してＹｅｓを戻り値に設定し（ステップＳ５１１）処理を終了する。なお、エッジ方向（θ）は、上述したとおり、式
θ＝ａｔａｎ（ｍａｇＹ／ｍａｇＸ）
であらわされる。
【０１０４】
ここで、かかるエッジ点判定（ステップＳ５０６〜ステップＳ５１１）について、図２０を用いて説明する。図２０は、Ｓｏｂｅｌフィルタを使用する手順を説明するための説明図である。同図に示すように、ゼロクロス点（エッジ点候補）であると判定されたＣ点を中心として、Ｓｏｂｅｌフィルタ（水平，周囲１ドット）１０５ａをかけると、かかるフィルタの対象点は、１４１の網掛けで示した部分となる。また、Ｓｏｂｅｌフィルタ（垂直，周囲１ドット）１０５ｂをかけると、かかるフィルタの対象点は、１４２の網掛けで示した部分となる。また、Ｓｏｂｅｌフィルタ（水平，周囲２ドット）１０５ｃをかけると、かかるフィルタの対象点は、１４３の網掛けで示した部分となり、Ｓｏｂｅｌフィルタ（垂直，周囲２ドット）１０５ｄをかけると、かかるフィルタの対象点は、１４４の網掛けで示した部分となる。
【０１０５】
まず、図１８に示した１２１ａの３点（Ｔ点、Ｃ点、Ｂ点）について周囲１ドットのラプラシアンフィルタをかけた場合について説明する。Ｃ点に周囲１ドットのラプラシアンフィルタ１０３ａをかけると、１２２に示したＣ点を中心とする９ドット（網掛け部分）がラプラシアンフィルタの対象点となる。同様に、Ｔ点については１２３、Ｂ点については１２４に示した各９ドットがフィルタの対象点となる。そして、求められたラプラシアン値を、それぞれ、ｌａｐＣ、ｌａｐＴおよびｌａｐＢとすると、点Ｃ、点Ｔおよび点Ｂのラプラシアン値は１２５に示したとおりとなる。
【０１０６】
次に、図１３において示したバーコード部決定処理（ステップＳ３１３）について、図２および図２１を用いて説明する。図２１は、かかるバーコード部決定処理のフローチャートである。同図に示すように、バーコード部決定処理においては、まず、ｙ方向ヒストグラム１０２の最大値ｍａｘＹ（図２の１０２ａ）を求める（ステップＳ６０１）。
【０１０７】
そして、閾値をｍａｘＹ／２に、検知範囲の始点（ｓｔＹ）を０に、検知範囲の終点（ｅｄＹ）をＹ方向ヒストグラムサイズに、それぞれ初期化する（ステップＳ６０２）。つづいて、ｙ方向バーコード端（図２の１０２ｂおよび１０２ｃ）を求める処理をおこなう（ステップＳ６０３）。具体的には、ｓｔＹから最大値１０２ａの方向に閾値以上のヒストグラム値を有する座標を探すとともに、ｅｄＹから最大値１０２ａの方向に閾値以上のヒストグラム値を有する座標を探す。このようにして求めたバーコード端からバーコード幅を決定し（ステップＳ６０４）、このバーコード幅がバーコード規格最小値よりも小さいか否かを判定する（ステップＳ６０５）。
【０１０８】
そして、バーコード幅がバーコード規格最小値よりも小さい場合には（ステップＳ６０５肯定）、ｙ方向のマージンを修正し（ステップＳ６０６）、バーコード幅を適正幅に修正したうえで、バーコード幅がバーコード規格最大値よりも大きいか否かの判定をおこなう（ステップＳ６０７）。一方、バーコード幅がバーコード規格最小値よりも小さくない場合には（ステップＳ６０５否定）、ｙ方向のマージンを修正することなく、バーコード幅がバーコード規格最大値より大きいか否かの判定をおこなう（ステップＳ６０７）。
【０１０９】
バーコード幅がバーコード規格最大値より大きい場合には（ステップＳ６０７肯定）、バーコード幅内のヒストグラム値の分布に基づいてどちらのバーコード端が不適切であるかを判定する（ステップＳ６０８）。なお、不適切なバーコード端は、かかるバーコード端内側のヒストグラム分布が、より疎であるほうのバーコード端である。
【０１１０】
つづいて、検知範囲の始点（ｓｔＹ）および検知範囲の終点（ｅｄＹ）に前回検知した各バーコード端の座標を代入したうえで（ステップＳ６０９）、再度、ｙ方向バーコード端を求める（ステップＳ６１０）。すなわち、検知範囲は前回検知したバーコード端の内側となる。この場合、ステップＳ６０８において不適切なバーコード端と判定されたバーコード端についてのみバーコード端の再検知をおこなう。そして、ステップＳ６１０においてあらたに検知されたバーコード端と、ステップＳ６０８において適切と判定されたバーコード端とからバーコード幅を決定する（ステップＳ６１１）。
【０１１１】
そして、再度、バーコード幅がバーコード規格最大値より大きいか否かの判定をおこない（ステップＳ６０７）、バーコード幅がバーコード規格最大値以下となるまで、ステップＳ６０７〜ステップＳ６１１の処理を繰り返す。このように、ステップＳ６０１〜ステップＳ６１１の処理をおこなうことで、バーコード規格最小値以上、かつ、バーコード規格最大値以下のバーコード幅を決定することができる。
【０１１２】
ｙ方向ヒストグラム１０２に基づいてバーコードの幅を算出したならば、今度は、バーコードの高さを算出する。まず、ｘ方向ヒストグラム１０１の最大値ｍａｘＸ（図２の１０１ａ）を求め（ステップＳ６１２）、閾値をｍａｘＸ／３に設定したうえで（ステップＳ６１３）、ｘ方向バーコード端（図２の１０１ｂおよび１０１ｃ）を求める（ステップＳ６１４）。そして、これらのｘ方向バーコード端のｘ座標の差分からバーコード高さを決定し（ステップＳ６１５）、処理を終了する。なお、本実施例においては、ｘ方向ヒストグラム１０１０の最大値およびｙ方向ヒストグラム１０２の最大値に基づいて、閾値（ｍａｘＸ／３、ｍａｘＹ／２およびｍａｘＹ／３）を設定したが、これらの閾値は他の値を用いることもできる。
【０１１３】
上述してきたように、本実施例では、入力画像に注目点を設定して、この注目画素を所定の移動間隔で移動させるとともに、この移動間隔に応じたサイズの画像変換フィルタを用いることとし、かかる注目点を含む領域の所定の画素にラプラシアンフィルタをかけることにより、かかる注目点がゼロクロス点（エッジ候補点）であるか否かを判定し、エッジ候補点と判定された注目点にＳｏｂｅｌフィルタをかけることにより、かかるエッジ候補点のエッジ強度およびエッジ方向を求め、エッジ強度およびエッジ方向が所定の条件を満たし、かつ、エッジ候補点が所定の個数、所定の方向に連続する場合にかかるエッジ候補点をエッジ点と判定し、かかるエッジ点の個数をｘ方向ヒストグラム値およびｙ方向ヒストグラム値に加算し、かかる注目点の位置を所定のスキップ値に基づいてスキップし、入力画像の全領域についてエッジ点の判定を繰り返し、ｘ方向ヒストグラムおよびｙ方向ヒストグラムを生成し、ｘ方向ヒストグラムの最大値およびｙ方向ヒストグラムの最大値に基づいてバーコードエリアの位置を検出し、この位置に基づいて数字エリアの位置を検出したうえで数字エリア内の各数字を認識することによりバーコードを認識するよう構成したので、高速かつ高精度にバーコード認識をおこなうことができる。
【０１１４】
なお、本実施例においては、バーコードのバーがｘ軸と平行方向である場合について説明したが、バーがｙ軸と平行方向である場合は、上述した説明のｘ軸とｙ軸を入れ替えて処理をおこなえば、同様にバーコードを認識することができる。また、入力画像に含まれるバーコードの向きが一定方向ではなく、バーがｘ軸と平行方向のものと、バーがｙ軸と平行方向のものとが混在している場合には、本実施例の処理と、本実施例のｘ軸とｙ軸とを入れ替えた処理とをおこなうことにより、それぞれの向きのバーコードを認識することができる。
【産業上の利用可能性】
【０１１５】
本発明にかかるバーコード認識装置、バーコード認識方法およびバーコード認識プログラムは、物品に付されたバーコードの認識に有用であり、特に、バーコードの認識を高速かつ高精度でおこなう場合に適している。
【図面の簡単な説明】
【０１１６】
【図１】本実施の形態に係るバーコード認識装置の構成を示す機能ブロック図である。
【図２】図１に示した入力部が生成するバーコードを含む画像を説明するための説明図である。
【図３】図１に示したバーコードエリア検出部の処理概要を示すフローチャートである。
【図４】本実施の形態に係るラプラシアンフィルタを説明するための説明図である。
【図５】本実施の形態に係る座標点のラプラシアン値を説明するための説明図である。
【図６】本実施の形態に係るＳｏｂｅｌフィルタを説明するための説明図である。
【図７】本実施の形態に係るエッジ方向を説明するための説明図である。
【図８】連続エッジ点の斜行について説明するための説明図である。
【図９】本実施の形態に係る連続エッジ点の斜行について説明するための説明図である。
【図１０】本実施の形態に係るヒストグラムの加算について説明するための説明図である。
【図１１】本実施の形態に係る画素のスキップ処理について説明するための説明図である。
【図１２】図１に示した各処理部の処理手順を示すフローチャートである。
【図１３】図１２に示したバーコード部サーチ処理のフローチャートである。
【図１４】図１３に示したエッジ検出処理のフローチャートである。
【図１５】図１４に示したエッジチェック処理のフローチャートである。
【図１６】ゼロクロス点の判定条件を説明するための説明図である。
【図１７】本実施の形態に係るゼロクロス点の判定条件を説明するための説明図である。
【図１８】本実施の形態に係る周囲１ドットのラプラシアンフィルタを使用する手順について説明するための説明図である。
【図１９】本実施の形態に係る周囲２ドットのラプラシアンフィルタを使用する手順について説明するための説明図である。
【図２０】本実施の形態に係るＳｏｂｅｌフィルタを使用する手順について説明するための説明図である。
【図２１】図１２に示したバーコード部決定処理のフローチャートである。
【符号の説明】
【０１１７】
１  バーコード認識装置
１０  入力部
１１  バーコードエリア
１２  数字エリア
２０  数字エリア検出部
３０  数字認識部
４０  出力部
１００  バーコードエリア検出部
１００ａ  ゼロクロス点検出部
１００ｂ  エッジ点判定処理部
１００ｃ  ヒストグラム生成処理部
１００ｄ  バーコードエリア位置認識部
１０１  ｘ方向ヒストグラム
１０１ａ  最大値
１０１ｂ  バーコード端座標（上面）
１０１ｃ  バーコード端座標（下面）
１０２  ｙ方向ヒストグラム
１０２ａ  最大値
１０２ｂ  バーコード端座標（右面）
１０２ｃ  バーコード端座標（左面）
１０３ａ  ラプラシアンフィルタ（周囲１ドット）
１０３ｂ  ラプラシアンフィルタ（周囲２ドット）
１０４ａ  ラプラシアン値
１０４ｂ  座標点名称
１０５ａ  Ｓｏｂｅｌフィルタ（水平：周囲１ドット）
１０５ｂ  Ｓｏｂｅｌフィルタ（垂直：周囲１ドット）
１０５ｃ  Ｓｏｂｅｌフィルタ（水平：周囲２ドット）
１０５ｄ  Ｓｏｂｅｌフィルタ（垂直：周囲２ドット）
１０６ａ  エッジ方向の許容範囲（水平）
１０６ｂ  エッジ方向の許容範囲（垂直）
１０７ａ  エッジ検出点（Ｌ点）
１０７ｂ  エッジ検出点（Ｃ点）
１０７ｃ  エッジ検出点（Ｒ点）
１０８ａ  ｘ方向ヒストグラム（Ｌ点に対応）
１０８ｂ  ｘ方向ヒストグラム（Ｃ点に対応）
１０８ｃ  ｘ方向ヒストグラム（Ｒ点に対応）
１０９  ｙ方向ヒストグラム
１１０ａ  連続エッジ点１
１１０ｂ  連続エッジ点２
１１１ａ  連続エッジ点３
１１１ｂ  連続エッジ点４
１２１  ゼロクロス判定用座標（周囲１ドット）
１２１ａ  ゼロクロス判定用座標点（Ｃ点）
１２１ｂ  ゼロクロス判定用座標点（Ｌ点）
１２１ｃ  ゼロクロス判定用座標点（Ｒ点）
１２２  ラプラシアン対象座標点（Ｃ点）
１２３  ラプラシアン対象座標点（Ｔ点）
１２４  ラプラシアン対象座標点（Ｂ点）
１２５  ラプラシアン値（Ｃ点）
１２６  ラプラシアン値（Ｌ点，Ｃ点，Ｒ点）
１３１  ゼロクロス判定用座標（周囲２ドット）
１３２  ラプラシアン対象座標点（Ｃ点）
１３３  ラプラシアン対象座標点（Ｔ点）
１３４  ラプラシアン対象座標点（Ｂ点）
１３５  ラプラシアン値（Ｃ点）
１３６  ラプラシアン値（Ｌ点，Ｃ点，Ｒ点）
１４１  Ｓｏｂｅｌ対象座標点（水平，周囲１ドット）
１４２  Ｓｏｂｅｌ対象座標点（垂直，周囲１ドット）
１４３  Ｓｏｂｅｌ対象座標点（水平，周囲２ドット）
１４４  Ｓｏｂｅｌ対象座標点（垂直，周囲２ドット）
【図１】
2006031167.tif 000003
【図２】
2006031167.tif 000004
【図３】
2006031167.tif 000005
【図４】
2006031167.tif 000006
【図５】
2006031167.tif 000007
【図６】
2006031167.tif 000008
【図７】
2006031167.tif 000009
【図８】
2006031167.tif 000010
【図９】
2006031167.tif 000011
【図１０】
2006031167.tif 000012
【図１１】
2006031167.tif 000013
【図１２】
2006031167.tif 000014
【図１３】
2006031167.tif 000015
【図１４】
2006031167.tif 000016
【図１５】
2006031167.tif 000017
【図１６】
2006031167.tif 000018
【図１７】
2006031167.tif 000019
【図１８】
2006031167.tif 000020
【図１９】
2006031167.tif 000021
【図２０】
2006031167.tif 000022
【図２１】
2006031167.tif 000023