(57)【特許請求の範囲】
【請求項１】
バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するプロセッサを備え、前記プロセッサは二値化処理の対象画素の受光強度が１画素全体がバーコードの白部に相当するときの第１受光強度と黒部に相当するときの第２受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定し、
前記プロセッサは、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第１初期条件と黒部から白部に変わる第２初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とするバーコード読取装置。
【請求項２】
前記プロセッサは、前記対象画素が前記中間の値の受光強度を有する場合、前記隣接画素に対して前記対象画素の受光強度が増加しているとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素に対して前記対象画素の受光強度が減少しているとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする請求項１に記載のバーコード読取装置。
【請求項３】
前記プロセッサは、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする請求項１又は２に記載のバーコード読取装置。
【請求項４】
前記プロセッサは、前記対象画素内での白黒順序と前記第１受光強度又は前記第２受光強度に対する前記対象画素の受光強度の比とに基づいて前記対象画素内での白部と黒部の境界位置を決定することを特徴とする請求項１〜３のいずれか１項に記載のバーコード読取装置。
【請求項５】
前記判定基準は、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数が少ない方の二値化データ群を選択するというものである請求項１に記載のバーコード読取装置。
【請求項６】
前記判定基準は、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する二値化データ群を破棄するというものである請求項１に記載のバーコード読取装置。
【請求項７】
バーコードに光を照射する照射光源と、
前記バーコードからの反射光をイメージセンサ上に結像する集光レンズと、
前記結像されたバーコードの映像に対し画素毎に受光強度を測定するイメージセンサと、
を更に備えることを特徴とする請求項１〜６のいずれか１項に記載のバーコード読取装置。
【請求項８】
バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するステップを含み、前記ステップにおいて二値化処理の対象画素の受光強度が１画素全体がバーコードの白部に相当するときの第１受光強度と黒部に相当するときの第２受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定し、
前記ステップにおいて、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第１初期条件と黒部から白部に変わる第２初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とするバーコード読取方法。
【請求項９】
コンピュータを、バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理する手段として機能させるためのバーコード読取プログラムであって、前記手段により、二値化処理の対象画素の受光強度が１画素全体がバーコードの白部に相当するときの第１受光強度と黒部に相当するときの第２受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定し、
前記手段は、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第１初期条件と黒部から白部に変わる第２初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とするバーコード読取プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はバーコード読取装置、バーコード読取方法及びバーコード読取プログラムに関し、特に、バーコード読み取りにおける二値化方法に関する。
【背景技術】
【０００２】
バーコード読取装置（以下「バーコードスキャナ」ともいう）により、各種の製品や管理の対象物などに印刷されるか又はラベルで貼付されたバーコードが読み取られる。バーコードは、種々の太さの線とその間隔の並びによって数字、文字、記号などを表現した符号である。一般に線の色は黒で、線間の色は白であるが、明暗を識別できる色であれば白と黒に限定されない。以下では、暗部である線の部分を「黒部」といい、明部である線間部分を「白部」という。
【０００３】
バーコード読取装置はバーコードの映像を受光するイメージセンサを備える。このバーコード読取装置には、イメージセンサで受けたバーコード画像の白部及び黒部の幅を検出できる限界（最小分解能）が存在する。通常はその限界を超えた細かい白部や黒部を含むバーコードでは、白部と黒部を適切に切り分けられないので、バーコードの読み取りは不可能である。
【０００４】
例えば、バーコード読取装置に搭載された１次元イメージセンサの画素が1000ピクセルで、そのバーコード読取装置の読取可能なバーコード幅が60mmとすれば、バーコード読取装置のイメージセンサの1画素あたりに換算すると、見かけの分解能は60mm/1000ピクセル、即ち0.06mm/ピクセルに相当することになる。
【０００５】
しかし、バーコードの映像がセンサ画素幅に対して、ちょうど１対１となるようなことは現実的にはあり得ず、白部と黒部の境界部が映像としてイメージセンサの１つの画素に映り込むような状態が発生する。この状態における当該画素での受光強度は、画素全体が白部のときの受光強度と画素全体が白部のときの受光強度との中間の値をとる。一般に、その中間の値が或る閾値より白部の受光強度に近ければ白と、黒部の受光強度に近ければ黒と判断されていた。このような処理の結果、本来のバーコード像（以下「バーコード原像」ともいう）の黒部の幅がバーコード読取装置ではより太く認識されたり、より細く認識されたりするため、バーコード原像に比して二値化後の白部及び黒部の幅に誤差が発生していた。この誤差によって、白部と黒部の適切な幅を検出できず、結果的にバーコードのデコードに失敗することがあった。
【０００６】
この様な事情から、一般的にはイメージセンサの３画素分程度の幅、本例では、0.06mm×3=0.18mmが白部と黒部を適切に切り分けられる限界（すなわち最小分解能）とされている。
【０００７】
次に、閾値を用いて画素毎に白部と黒部を判定する従来技術の二値化方法について図１３及び図１４を参照して説明する。
【０００８】
図１３（Ａ）はバーコードラベル１１を示す。バーコードラベル１１は、黒と白を同じ幅で等間隔に並べたバーコードを模している。図１３（Ｂ）はこのバーコードラベル１１の一部１２を示す。図１３（Ｃ）は画素番号０〜７までの画素をもつイメージセンサ１３を示す。このイメージセンサ１３上にバーコードラベルの像が結像した状態を考える。イメージセンサ１３の画素の幅を１とした場合、ラベルの一部１２の黒部の幅は4.2である。図１３（Ｃ）に示されるように、ラベルの一部１２の黒部がイメージセンサ１３の画素１〜５にかけて、網掛け部で示したように投影されているとする。このとき、イメージセンサ１３の画素１は白部が0.6、画素５は白部が0.2の幅で映る。
【０００９】
図１３（Ｄ）は、画素全体が黒部のときの受光強度を0、画素全体が白部のときの受光強度を1とした場合に、イメージセンサ１３の各画素０〜７での受光強度分布を示したグラフ１４である。従来技術の二値化方法では、この受光強度分布に対して閾値を設けて、受光強度がその値を超えるものを白、下回るものを黒とする。図１３（Ｄ）の例では閾値を0.5と設定して二値化している。
【００１０】
図１３（Ｅ）は、上記の二値化により得られた白・黒のパターン１７を示す。イメージセンサ１３に映る映像の黒部の幅は4.2であったものが、二値化処理後の白・黒のパターン１７では4となっている。この段階で、バーコード原像に対する二値化後の誤差は−5%となる。図１３の例では原像１２の黒部の幅が、センサ画素数の４ピクセル分以上あるため、原像１２に対する二値化後の黒部の幅の誤差は比較的小さく、閾値0.5によって二値化したこの例の結果は、以後のデコード処理に利用可能なデータになる。
【００１１】
一方、次に図１４の場合を考える。図１４（Ａ）はこの例で用いられるバーコードラベル２１を示す。バーコードラベル２１は、図１３（Ａ）のバーコードラベル１１と同様に、黒と白を同じ幅で等間隔に並べたバーコードを模している。図１４（Ｂ）はこのバーコードラベル２１の一部２２を示す。図１４（Ｃ）は画素番号０〜７までの画素をもつイメージセンサ２３を示す。このイメージセンサ２３上にバーコードラベルの像が結像した状態を考える。イメージセンサ２３の１画素分の幅を１とした場合、ラベルの一部２２の黒部の幅は1.4である。図１４（Ｃ）に示されるように、ラベルの一部２２の黒部が網掛け部で示したように投影されているとする。
【００１２】
図１４（Ｄ）は、画素全体が黒部のときの受光強度を0、画素全体が白部のときの受光強度を1とした場合に、イメージセンサ２３の各画素０〜７での受光強度分布を示したグラフ２４である。図１４（Ｄ）の例でも閾値を0.5と設定して二値化している。
【００１３】
図１４（Ｅ）は、上記の二値化により得られた白・黒のパターン２７を示す。二値化後のパターン２７の黒部に注目すると、幅が１のものと２のものが生じているのが分かる。これは、原像２２では同じ幅の黒部が、二値化後に同じ幅と識別されずに不均一となっていることを意味している。図１４の例の場合は、同じ幅1.4であるはずの黒部が１又は２の幅となっており、原像に対してはそれぞれ誤差−30%、＋43%となる。しかも、二値化後の状態を基準にすると、幅１のものが幅２にもなりうる、つまり誤差100%となる。これでは後段のデコード処理で利用できない（このまま処理をしても確実にデコードに失敗する）。
【００１４】
この問題を技術的に解決するためには、バーコード読取装置に搭載するイメージセンサを、より画素数の多いものに変更する、という方法が一般的である。しかし、この方法では、画素数の多いイメージセンサはより高価であり、またそれにより処理すべき画素のデータ量が増加すると、より高性能なプロセッサを必要とするなど、ハードウェアのコストが上昇してしまう点や、画素数の多いイメージセンサ自体に技術的或いは製造上の限界が存在する点などが課題となっていた。
尚、特許文献１には、光学的情報読取装置において、見かけ上の分解能を向上させる一方法が開示されている。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開平０６−２５１１９４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
本発明の目的は、バーコード読取用のイメージセンサの画素数を増すことなく、最小分解能を向上させたバーコード読取装置、バーコード読取方法及びバーコード読取プログラムを提供することにある。
【課題を解決するための手段】
【００１７】
本発明の第１の観点によるバーコード読取装置は、バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するプロセッサを備え、前記プロセッサは二値化処理の対象画素の受光強度が１画素全体がバーコードの白部に相当するときの第１受光強度と黒部に相当するときの第２受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定し、前記プロセッサは、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第１初期条件と黒部から白部に変わる第２初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする。
【００１８】
本発明の第２の観点によるバーコード読取方法は、バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するステップを含み、前記ステップにおいて二値化処理の対象画素の受光強度が１画素全体がバーコードの白部に相当するときの第１受光強度と黒部に相当するときの第２受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定し、前記ステップにおいて、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第１初期条件と黒部から白部に変わる第２初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする。
【００１９】
本発明の第３の観点によるバーコード読取プログラムは、コンピュータを、バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理する手段として機能させるためのバーコード読取プログラムであって、前記手段により、二値化処理の対象画素の受光強度が１画素全体がバーコードの白部に相当するときの第１受光強度と黒部に相当するときの第２受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定し、前記手段は、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第１初期条件と黒部から白部に変わる第２初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする。
【発明の効果】
【００２０】
本発明の上記構成により、バーコード読取用のイメージセンサの画素数を増すことなく、最小分解能を向上させることが可能なバーコード読取装置、バーコード読取方法及びバーコード読取プログラムを提供できる。
【図面の簡単な説明】
【００２１】
【図１】本発明の実施形態におけるバーコード読取装置の基本構成を示す斜視構成図である。
【図２】本発明の実施形態における二値化方法の説明図である。
【図３】本発明の実施形態におけるバーコード読取処理のフロー図である。
【図４】本発明の実施形態における二値化処理のフロー図である。
【図５】本発明の実施形態における二値化処理のフロー図である。
【図６】本発明の実施形態による二値化方法を適用した例を示す。
【図７】本発明の実施形態による二値化方法を適用した別の例を示す。
【図８】本発明の実施形態における読取限界の説明図である。
【図９】本発明の実施形態における読取限界の別の説明図である。
【図１０】イメージセンサの画素番号に対する受光強度を示すグラフである。
【図１１】規格化された受光強度を示すグラフである。
【図１２】規格化後にノイズ除去を行った受光強度を示すグラフである。
【図１３】従来技術による二値化方法の説明図であり、誤差が比較的小さい例を示す。
【図１４】従来技術による二値化方法の説明図であり、誤差が大きい例を示す。
【発明を実施するための形態】
【００２２】
以下、本発明を実施するための形態について詳細に説明する。
【００２３】
〔バーコード読取装置の構成〕
図１は本発明の実施形態におけるバーコード読取装置の基本構成を示す。バーコード読取装置１は照明光源２と反射ミラー３と集光レンズ４とイメージセンサ５とプロセッサ６とを備える。プロセッサ６は上位装置と通信をするためのラインに接続される。上位装置との通信は無線で行ってもよい。照明光源２はバーコード（又はバーコードラベル）７に光を照射する。反射ミラー３はバーコード７で反射された光を集光レンズ４に向けて反射する。反射ミラー３はバーコード読取装置１の形状によっては省略可能である。集光レンズ４はバーコード７からの反射光をイメージセンサ５上に結像させる。照射光を適切に通す光学フィルタを集光レンズ４と共に設けてもよい。イメージセンサ５はバーコード７を撮像するものであり、バーコード７からの反射光を電気信号に変換する。イメージセンサ５は１次元イメージセンサに限定されず、例えば２次元イメージセンサでもよい。２次元イメージセンサを用いる場合は、適当な１列の画素列を選択的に使用してもよい。プロセッサ６はイメージセンサ５の各画素が示す受光強度からバーコード画像の二値化処理を行う。プロセッサ６は二値化処理で得られた二値化データに対してデコード処理を行ってもよい。デコード処理により、バーコードに符号化されていた原情報が得られる。
【００２４】
一般にバーコードは中間色の無い白部と黒部によって構成される。そのため、イメージセンサの一つの画素の受光強度が白と黒の中間の値をとる場合、当該画素にはバーコードの白部と黒部の境界が映り込んでいると想定される。さらに、このような場合に本発明の実施形態では、１画素中における白部と黒部の境界は必ず１箇所であることを前提とする。例えば、図１３の例では、イメージセンサ１３の画素番号１及び画素番号５の部分がこれに当たる。
【００２５】
一画素での受光強度が１（すなわち画素全体が白）又は０（すなわち画素全体が黒）の場合は、画素中に白・黒の境界が存在しない。ここで、受光強度は１画素全体が白のとき１に、１画素全体が黒のとき０になるように規格化されている（以下の説明でも同様）。例えば、受光強度１なら白１、黒０、受光強度０なら、白０、黒１と記録する。尚、この場合、０となる白又は黒の情報は、記録上省いても良い。０となる白又は黒の情報を省かない場合は、後の幅計算上「１となる黒又は白のみで、０となる白・黒部は存在しない（つまり、白・黒の境界が存在しない）」という扱いとする。
【００２６】
ある一つの画素の受光強度が白と黒の中間の値をとる場合、すなわち上記のような規格化がされているとき一画素の受光強度が０より大きくかつ１より小さい場合、「白と黒の中間の値」だけでは、当該画素内における白部と黒部の配置順序（本明細書及び特許請求の範囲では「白黒順序」ともいう）が判断できない。つまり、画素内において同一方向から見て、白部から黒部に変わる境界があるのか、あるいは逆に黒部から白部に変わる境界があるのか判断できない。尚、以下では白部から黒部に変わることを「白→黒」と、黒部から白部に変わることを「黒→白」と略記することもある。
【００２７】
本発明の実施形態では一画素の受光強度が白と黒の中間値をとる場合、当該画素中に白と黒の境界が存在すると想定し、当該画素の受光強度を当該画素に隣接する画素の受光強度と比較して、その値が減少しているか、或いは増加しているかによって、当該画素内における白・黒の順番を決定する。以下、当該画素内での白黒順序が白→黒なのか、黒→白なのかを決定する方法を場合分けして説明する。
【００２８】
〔ケース（１）：バーコードの原像の最小の白幅、黒幅がイメージセンサの画素幅１つ分より広く、かつ、受光強度が白と黒の中間の値をとる状態が２画素以上連続しない場合〕
【００２９】
この場合、白と黒の中間の値の受光強度を有する画素内における白黒順序はシンプルに決定できる。例えば、当該画素の受光強度（大きさは中間値）をその一つ前（すなわち一つ左側又は一つ右側）の画素の受光強度と比較して、その値が減少していれば白→黒の順、増加していれば黒→白の順と判定すればよい。
【００３０】
「一つ前の画素」とは、受光強度が中間値の画素についての二値化処理よりも時間的に一つ前に行った二値化処理に係る画素を意味する。例えば、１次元イメージセンサの一連の画素列において一方の端部（左側）の画素からもう一方の端部（右側）の画素に向けて順に白黒順序の判定を含めて二値化処理を行っていく場合を考える。この場合、或る画素の受光強度が中間値を有するとき、その「一つ前の画素」とは、一つ左側の画素のことである。左右は便宜的に仮定したものであり、右側の端部の画素から二値化処理を開始した場合には、「一つ前の画素」とは、一つ右側の画素になることは当然である。いずれにしても、受光強度が中間値を有する画素とそれに隣接している画素とで受光強度を比較して増減状況（増減関係ともいう）を調べて白黒順序を判定する。なお、二値化処理は、イメージセンサの一連の画素列の端部の画素から開始することに限定されるものではなく、画素列中の任意の画素から開始してもよい。
【００３１】
「一つ前の画素の受光強度と比較して値が減少している」とは、「白と黒の中間の値」をとる画素の一つ前の画素の受光強度が１、つまり、白であることを意味している。「白と黒の中間の値」をとる画素ではその画素中に白から黒に切り替わる境界が映り込んでいると解釈し、その画素は、一つ前の画素から見て白→黒の順番で構成されている、と判断できる。
【００３２】
これは、例えば図１３（Ｃ）の画素番号０，１，２の部分でバーコード原像が白から黒に変化する部分において、画素番号１で白と黒の中間値をとる状態に相当する。図１３（Ｃ）の画素番号０，１，２の部分の例では、画素番号１に着目すると、その一つ前（一つ左側）の画素、即ち画素番号０の受光強度が１であるため（同図（Ｄ））、画素番号１は「一つ前の画素の受光強度と比較して値が減少している」に該当する。このため、前述の考え方で、画素番号１の白・黒の順は白→黒と決定することができる。
【００３３】
次に、「一つ前の画素の受光強度と比較して値が増加している」とは、「白と黒の中間の値」をとる画素の一つ前の画素の受光強度が０、つまり、黒であることを意味している。「白と黒の中間の値」をとる画素ではその画素中に黒から白に切り替わる境界が映り込んでいると解釈し、その画素は、一つ前の画素から見て黒→白の順番で構成されている、と判断できる。
【００３４】
これは、図１３（Ｃ）の画素番号４，５，６の部分でバーコード原像が黒から白に変化する部分において、画素番号５で白と黒の中間値をとる状態に相当する。図１３の画素番号４，５，６の部分の例では、画素番号５に着目すると、その一つ前（一つ左側）の画素、即ち画素番号４の受光強度が０であるため（同図（Ｄ））、画素番号５は「一つ前の画素の受光強度と比較して値が増加している」に該当する。このため、前述の考え方で、画素番号５の白・黒の順は黒→白と決定することができる。
【００３５】
尚、「バーコード原像の最小の白幅、黒幅がイメージセンサ画素幅１つ分より広く、かつ、受光強度が白と黒の中間の値をとる状態が２画素以上連続しない場合」のケース（１）では、文字通り「白と黒の中間の値」をとる画素が２つ以上連続しないため、「白と黒の中間の値」をとる画素において、受光強度の増加または減少のみに着目し、「増減がない」場合は考慮しなくてもよい。「増減がない」場合は処理上、例えば、受光強度が増加又は減少した場合の処理に編入してもよい。
【００３６】
表１にケース（１）での白黒順序の決定方法をまとめる。表１では、現在の位置の画素が白と黒の中間の値の受光強度を有する場合に、その受光強度が一つ前の隣接画素の受光強度に対して増加又は減少しているかにより、現在の画素内における白黒順序が一つ前の画素から見てどのような白・黒パターンになるかを示している。
【００３７】
【表１】
0005896488.tif 000002
【００３８】
〔ケース（２）：バーコード原像の最小の白幅、黒幅がイメージセンサの画素幅１つ分程度より広く、かつ、受光強度が白と黒の中間の値をとる状態が２画素以上連続する場合〕
【００３９】
この場合、一つ前の画素との受光強度の増減の解析だけでは正しくバーコード原像を再現することができない場合がある。この状態は、例えば図１４（Ｃ）の画素番号４、５に相当する。
【００４０】
この問題は、一つ前の画素の白・黒順と逆の順番で白・黒の順序を定義することで解決できる。連続二画素の受光強度が中間値の場合における、「一つ前の画素の白・黒順」と現在の位置の画素の白・黒順の関係を表２にまとめる。表２は、一つ前の画素から現在位置の画素に向かう方向における白黒順序を夫々の画素について示している。
【００４１】
【表２】
0005896488.tif 000003
【００４２】
図１４（Ｃ）の画素番号３、４、５を例に画素番号５の画素内における白黒順序を決定するプロセスを説明する。
【００４３】
まず、図１４（Ｃ）の画素番号３の画素は受光強度１であり、白単色とすることができる。次に、画素番号４の画素は受光強度が0.4であるため、前述の表１の受光強度増減の白・黒順対応表により、白→黒と決定することができる。
【００４４】
画素番号５の画素は受光強度が0.2である。一つ前の画素（画素番号４）が「白と黒の中間の値をとる状態（受光強度0.4）」であるため、画素番号４と５で、「連続して白と黒の中間の値をとる状態」であるといえる。この時、画素番号４は、「白→黒」という順として決定されているため、画素番号５の白・黒順は画素番号４の白・黒順の逆、つまり、黒→白という順番であると決定することができる。画素番号３〜５について、白・黒順の決定結果は、図１４（Ｂ）のバーコードの原像の状態と矛盾しない。
【００４５】
尚、前述の「ケース（１）：バーコード原像の最小の白幅、黒幅がイメージセンサの画素幅１つ分より広く、かつ、受光強度が白と黒の中間の値をとる状態が２画素以上連続しない場合」では、正しく二値化できる幅が２画素幅程度であるが、ケース（２）では、正しく二値化できる最小幅を１画素幅程度に向上させることができる。
【００４６】
〔ケース（３）：一つ目の画素が白と黒の中間の値をとる場合〕
【００４７】
一つ目の画素が白と黒の中間の値をとる場合は、一つ前の画素が存在しないため、上記の白黒決定方法では白→黒、又は黒→白という順番が確定できない。この場合には、一つ目の画素において白→黒と黒→白の両方のパターンがそれぞれ成立していると仮定する。そして、両方の仮定の下で２画素目以降の二値化処理をそれぞれ実施し、二値化の処理継続中または二値化処理完了後に、より適切な結果が得られた方を採用する。
【００４８】
次に、上記ケース（１）〜（３）に示した白黒順序の決定方法に従ってどのように二値化処理を行うかを具体例に基づいて説明する。
【００４９】
図２はバーコードの原像が図１３の原像と同じ場合について本発明の実施形態による二値化処理を行った例を示す。図２（Ａ）のバーコードの原像、図２（Ｂ）のイメージセンサ３３の画素０〜７及びイメージセンサ上の結像状態、図２（Ｃ）の受光強度分布は、図１３において対応する図と同一である。
【００５０】
図２（Ｄ）は各画素の受光強度の値（上段）と、各画素とその一つ前の画素とで受光強度を比較して得られた増減状況（下段）とを示している。増減状況は増加なら“＋”、減少なら“−”、変化の無いものは“＝”、比較対象のないもの（画素番号０）は“＊”と記載している。
【００５１】
表３は、図２の例について上述した白黒順序の決定方法を用いて二値化処理した結果をイメージセンサ３３の画素番号０〜７についてまとめたものである。
【００５２】
【表３】
0005896488.tif 000004
【００５３】
表３の各画素における二値化処理について説明を加える。
・画素番号０：受光強度が１なので、白１、黒０となる（これは画素幅を１と仮定し、白幅が１で黒幅が０という意味である。以下においても同様。）。受光強度が中間値をとらないため、白１、黒０以外の分岐は考慮しない。
・画素番号１：受光強度が0.6で白黒境界が存在する。２画素目なので、一つ前の画素の受光強度との比較のみで考える。画素番号０と受光強度を比較すると、画素１の受光強度は減少している。よって、白黒境界のパターン（白黒順序）は白→黒と決定し、白0.6、黒0.4となる（すなわち白幅0.6、黒幅0.4）。すなわち、バーコードの白部と黒部の境界は画素番号１の画素内において画素番号０側の端部から0.6の位置に存在する。よって「白黒順序」と「境界位置」が確定した。
・画素番号２、３，４：受光強度が０なので、それぞれ白０、黒１となる。
・画素番号５：受光強度が0.2で白黒境界が存在する。一つ前の画素（画素番号４）と現在の画素の受光強度を比較すると増加している。よって、白黒境界のパターンは黒→白の順と決定し、黒0.8、白0.2となる。
・画素番号６，７：受光強度が１なので、それぞれ白１、黒０となる。
【００５４】
この結果、黒部に着目すると、画素１〜５にかけて黒部が連続していてその幅は、画素１〜５の黒部の値の合計、つまり、0.4+1.0+1.0+1.0+0.8＝4.2とすることができる。この結果は、バーコードの原像３２の黒部の幅と一致する。図２（Ｅ）に、この方法によって得られた二値化後のパターン37を示す。この二値化後のパターン37と、従来技術による方法で得られる二値化後のパターン（図１３（Ｅ）のパターン17）を比較すると、本発明の実施形態の二値化方法によって得られる二値化後のパターンの方がより原像に近くなる（本例では一致）ことが明らかである。
【００５５】
次に、本発明の実施形態におけるバーコード読取の処理フローを具体例を挙げて説明する。
【００５６】
〔ハードウェア構成と全体の処理フロー〕
例として図１のバーコード読取装置のハードウェア構成を考える。このバーコード読取装置は図３のバーコード読取処理フローを実行できる構成を実装しているものとする。バーコード７の原像は反射ミラー３と集光レンズ４を通してイメージセンサ５に映し出される。図３のフローでは、イメージセンサ５に結像した状態（Ｓ２）からセンサ受光強度出力を取得し（Ｓ３）、その値から二値化（Ｓ４）する。二値化された情報をデコード処理（Ｓ５）してデコードに成功すれば（Ｓ６のyes）、デコードデータを出力（Ｓ７）して処理を終了し（Ｓ８）、デコードに失敗すれば（Ｓ６のno）、デコード出力をせずに終了する（Ｓ８）。
【００５７】
本発明の実施形態による二値化方法は、図３のステップＳ４の二値化処理に相当する部分に適用される。図３のフローの二値化処理（Ｓ４）の詳細フローを示したものが図４と図５である。図４、図５のフローは、本発明の実施形態（表１、表２を含む）に基づくフローである。
【００５８】
〔二値化処理の具体例１〕
以下、図１４に示すバーコード原像に対して本発明の実施形態による二値化処理を適用する場合を例にとって説明する。このバーコード原像は、白部の幅1.4で黒部の幅1.4の白黒パターンで構成されている。イメージセンサの各画素の幅は1.0である。
【００５９】
図１４（Ｄ）に示すように、イメージセンサの各画素の受光強度を閾値0.5によって二値化する従来技術の場合、バーコード原像22に対して二値化後のパターン27が大きく異なる結果となることは、前述の通りである。
【００６０】
図６は、図１４と同じバーコード原像に対して本発明の実施形態による方法を用いて二値化する場合を示す。図６（Ａ）はバーコードの原像42を示す。図６（Ｂ）はイメージセンサにおける画素番号０〜７までの８個の画素43を示し、イメージセンサ上の結像状態も示している。図６（Ｃ）は各画素の受光強度図である。図６（Ｄ）は、各画素の受光強度の値（上段）と、各画素とその左隣の画素とで受光強度を比較して得られた増減状況（下段）とを示している。増減状況は増加なら“＋”、減少なら“−”、比較対象のない先頭画素（画素番号０）は“＊”と記載している。
【００６１】
図４は本発明の実施形態における二値化処理（図３のステップS4）の詳細フローを示す。二値化処理を開始すると（Ｓ１０）、まず最初に１番目の画素（＝画素番号０）の受光強度を取得する（Ｓ１１）。図６の例では、イメージセンサの１番目の画素の受光強度は0.8となる。次に、取得した受光強度が０又は１かを判断する（Ｓ１２）。図６の例では、取得した受光強度は0.8なので、“no”に分岐し、ステップＳ１３に進む。
【００６２】
ステップ１３では、１画素目（＝画素番号０）の受光強度から白・黒の順番は確定できないため、幅情報群Ａと幅情報群Ｂを設けると共に、それぞれにペンディング値（Ｐ）を設定する。幅情報群Ａは、１番目の画素における白黒順序が白→黒であると仮定して後続画素から順次得られるバーコードの白部幅と黒部幅に関するデータ群である（図６（Ｅ）参照）。幅情報群Ｂは、１番目の画素における白黒順序が黒→白であると仮定して後続画素から順次得られるバーコードの白黒パターンと白部幅及び黒部幅とに関するデータ群である（図６（Ｆ）参照）。ペンディング値（Ｐ）は上記の仮定から出発して二値化処理を行って得られた結果（二値化データ）の信頼性の程度を示す値であり、値が小さいほど信頼性が高い。なお、幅情報群は「二値化データ群」ともいう。
【００６３】
ステップＳ１２において受光強度が０又は１の場合は、１つの幅情報群を設けることになり、受光強度と白黒の別を示す情報を記録する（Ｓ１４）。
【００６４】
図６の例では、ステップＳ１４において、幅情報群Ａにはペンディング値(PA)=0、画素番号０の幅情報として、データ番号00に白:0.8、データ番号01に黒:0.2と記録し、また、幅情報群Ｂにはペンディング値(PB)=0、画素番号０の幅情報として、データ番号00に黒:0.2、データ番号01に白:0.8とそれぞれ記録する。図６（Ｅ）と図６（Ｆ）はこのときの二値化をイメージ化したものであり、幅情報群Ａを符号46で、幅情報群Ｂを符号47で示している。ステップＳ１４の段階では、それぞれ画素０の部分のみが記録された状態である。
【００６５】
次に、図４のステップＳ１５に移り、２画素目（＝画素１）の受光強度、即ち、図６（Ｂ）のイメージセンサ43の画素番号１の画素の受光強度を取得する。このとき取得される受光強度は0.6となる。ステップＳ１６では、取得した受光強度が０か１かを判断する。図６の例では、取得した受光強度は0.6であるため、“no”のフローに進み、図５のステップＳ２１に移る。
【００６６】
図５のステップＳ２１は「有効な幅情報群の一つを選ぶ（計算済みを除く）」処理だが、幅情報群Ａ、幅情報群Ｂともに未計算なので、まずは幅情報群Ａを選び、次のステップＳ２２に進む。ステップＳ２２では一つ前の画素、即ち画素番号０の受光強度が、１か０であったかどうかを確認する。図６の例では、一つ前の画素、即ち画素番号０の受光強度は0.8であるため、ステップ２２の“no”のフローに進み、ステップＳ２４に移る。ここまでのステップによって、画素番号０と画素番号１は「受光強度が白と黒の中間の値をとる状態」であることを示している。
【００６７】
ステップＳ２４では、一つ前の画素、即ち画素番号０の白・黒の順の決定結果が「黒→白」であるかどうかを確認する。幅情報群Ａの画素番号０は白→黒の順であるため、このフローでは”no”となり、ステップＳ２５に進む。ステップＳ２５で、現在処理している画素、即ち画素番号１の白・黒順を「黒→白」と決定し、ステップＳ２７に進む。
【００６８】
ステップＳ２７では、現在処理中の画素番号１の画素において「黒→白」という順に（１−受光強度値）の幅の黒部と、受光強度値の幅の白部とが配置されているとし、一つ前の画素との境界を挟む部分、即ち画素番号０と画素番号１の境界をまたぐ黒部の幅の合計を計算する。図６の例では、画素番号０の黒部の幅は0.2、画素番号１の黒部の幅が0.4であるため、合計すると0.6、つまり「黒の連続した幅情報の合計は0.6」となる。次にステップＳ２９に進む。
【００６９】
ステップＳ２９では、この計算結果が１以上かどうかを確認する。本例では結果は１以上ではないため、“no”となり、ステップＳ３２に進む。
【００７０】
ステップＳ３２では、他に有効な幅情報群があるかどうかを確認する。この時、幅情報群Ａの処理のみ行われているが、幅情報群Ｂは存在するため、「ほかに有効な幅情報群がある」となり、“yes”に分岐してステップＳ３３に進む。
【００７１】
ステップＳ３３では、直前まで計算していた幅情報群、即ち、幅情報群Ａを不適切だったとして無効化し、再びステップ２１に戻る。
【００７２】
尚、ステップＳ３２における判断で、隣接画素との境界を跨いでいる部分の幅が1未満の範囲（「破棄範囲」ともいう）にあり、他に有効な情報群が存在しなかった場合、ステップＳ３５に進む。ステップＳ３５では、隣接画素との境界を跨いでいる部分の幅が1未満であっても有効なものとして取り扱い、白・黒の幅情報を記録するが、同時に、ペンディング値(P)を１インクリメントして、データの信憑性レベルが低下していることを記録する。
【００７３】
ステップＳ３３からステップＳ２１に戻ると、ステップＳ２１で再び幅情報群を選ぶ。ここでは未計算の幅情報群Ｂを選ぶことになる。ステップＳ２２では、１つ前の画素（画素番号０）で取得した受光強度は0.8であり、０でも１でもないので、“no”に分岐してステップＳ２４に進む。
【００７４】
ステップＳ２４では、一つ前の画素、即ち、幅情報群Ｂの画素番号０は黒→白の順であるため、このフローでは“yes”となり、ステップＳ２６に進む。ステップＳ２６で、現在処理している画素、即ち画素番号１の白・黒順を「白→黒」と決定し、ステップＳ２８に進む。
【００７５】
ステップＳ２８では、現在処理中の画素番号１の画素において「白→黒」という順に受光強度値の幅の白部と、（１−受光強度値）の幅の黒部とが配置されているとし、一つ前の画素との境界を挟む部分、即ち画素番号０と画素番号１の境界をまたぐ白部の幅の合計を計算する。図６の例では、画素番号０の白部の幅は0.8、画素番号１の白部の幅が0.6であるため、合計すると1.4、つまり「白の連続した幅情報の合計は1.4」となる（これを図にしたものが図６（Ｆ）の符号47で示した部分である）。次にステップＳ３０に進む。
【００７６】
ステップＳ３０では、この計算結果が１以上かどうかを確認する。結果は１以上のため、“yes”となり、ステップＳ３１に進む。ステップＳ３１では、幅情報群Ｂの画素番号１の幅情報として白→黒の順に、データ番号02に白:0.6、データ番号03に黒:0.4と記録し、次のステップＳ３４に進む。ステップＳ３４では他に処理すべき有効な幅情報群があるかどうか確認する。本例ではこの段階で有効な情報群が情報群Ｂのみなので、“no”に進み、図４のステップＳ１８に移る。
【００７７】
ステップＳ１８では、最後に取得した受光強度の画素がイメージセンサの最後の画素かどうかを確認する。この段階ではまだ次の画素が存在するため、“no”に進み、ステップＳ１５に移る。
【００７８】
ステップＳ１５では、次の画素、つまり３つ目である画素番号２の受光強度を取得する。図６の例では、受光強度は“0”となる。ステップＳ１６では、受光強度が0か1かを判断し、本例では受光強度が0のため、“yes”に進み、ステップＳ１７に移る。
【００７９】
ステップＳ１７では、画素番号２の受光強度の結果として、データ番号04に黒：１、データ番号05に白：0として記録する。次のステップＳ１８に移り、最後に取得した受光強度の画素が最後の画素かどうかを確認し、ステップＳ１５に戻るか次に進むか判断する。
【００８０】
このような処理を画素番号７（イメージセンサの最後の画素）まで行い、ステップＳ１８の判断で最終画素と判断した場合、ステップＳ１９に移る。このとき、有効な幅情報群が複数ある場合は、最もペンディング値が小さいものを結果として選ぶ。本例では、幅情報群Ｂのみが有効となっているため、幅情報群Ｂが結果として選ばれることになる。次のステップＳ２０で、選択した幅情報群のデータを整理して、デコードで使用できるデータ（二値化データ）にする、即ち二値化である。
【００８１】
ステップＳ２０の処理が終了したら、図３のデコード処理（Ｓ５）に進み、二値化処理で得られた二値化データをデコードする。次のステップＳ６でデコードが成功したか否かを判断し、デコードに成功したならば（Ｓ６で“yes”）、デコードデータを出力（Ｓ７）して終了し（Ｓ８）、デコードに成功しなければ（Ｓ６で“no”）、そのまま終了する（Ｓ８）。
【００８２】
本例で計算した幅情報群Ａ、幅情報群Ｂの具体的なデータと幅情報群Ｂの二値化データ（幅データを整理したもの）を表４にまとめる。
【００８３】
【表４】
0005896488.tif 000005
【００８４】
結果として、バーコード原像４２に対する二値化処理により得られた二値化データは、図６（Ｆ）に示すバーコード像４７となり、バーコード原像４２と一致した二値化結果を得ることができた。従来の方法で二値化した結果である図１４（Ｅ）のパターン２７（＝図６（Ｇ）のパターン４８）と比較すると、本発明の実施形態による二値化処理によって再現したバーコード像の方がより正確である。
【００８５】
〔二値化処理の具体例２〕
次に、図７に示すバーコード原像５２に対して本発明の実施形態による二値化処理を適用する場合を例にとって説明する。このバーコード原像５２は、白部の幅0.8で黒部の幅0.8の白黒パターンで構成されている。イメージセンサの各画素の幅は1.0である。すなわち、イメージセンサに映るバーコード原像の白・黒の各幅がイメージセンサの各画素幅より狭い状態である。図７（Ｇ）は、閾値0.5による従来の二値化方法で二値化した場合の結果を示す。バーコード原像５２の白・黒のパターンと比較すると、バーコード原像５２には同じ幅の「黒」が５本存在するが、二値化後のパターン５８では黒は３本しか存在しないだけでなく、幅が異なる状態となり、適切に二値化できないといえる。
【００８６】
一方、上記の具体例１と同様に、本発明の実施形態の図３、図４、図５のフローに従って二値化処理を行うとどうなるか、以下に示す。
【００８７】
図７（Ａ）はバーコード原像５２を示す。図７（Ｂ）はイメージセンサにおける画素番号０〜７までの８個の画素５３を示す、イメージセンサ上の結像状態も示している。図７（Ｃ）は各画素の受光強度図である。図７（Ｄ）は、各画素の受光強度の値（上段）と、各画素とその左隣の画素とで受光強度を比較して得られた増減状況（下段）とを示している。増減状況は増加なら“＋”、減少なら“−”、等しければ“=”を記し、比較対象のない先頭画素（画素番号０）は“＊”を記している。
【００８８】
図３のフローにおいてバーコード読取装置のイメージセンサに映し出された映像を二値化するステップ（Ｓ４）まで来ると、図４の二値化処理開始のステップ（Ｓ１０）に移る。次に最初の１画素目（＝画素番号０）の受光強度を取得する（Ｓ１１）。図７の例では、イメージセンサの１画素目（＝画素番号０）の受光強度は0.2である。次に、取得した受光強度が０又は１かを判断する（Ｓ１２）。図７の例では、取得した受光強度は0.2なので、“no”に分岐し、ステップＳ１３に進む。
【００８９】
ステップ１３では、この段階で１画素目（＝画素番号０）の白・黒の順番は確定できないため、幅情報群Ａと幅情報群Ｂを設けると共に、それぞれにペンディング値（Ｐ）を設定する。幅情報群Ａは、１番目の画素における白黒順序が白→黒であると仮定して後続画素から順次得られるバーコードの白部幅と黒部幅に関するデータ群である（図７（Ｅ）参照）。幅情報群Ｂは、１番目の画素における白黒順序が黒→白であると仮定して後続画素から順次得られるバーコードの白黒パターンと白部幅及び黒部幅とに関するデータ群である（図７（Ｆ）参照）。
【００９０】
図７の例では、ステップＳ１４において、幅情報群Ａにはペンディング値(PA)=0、画素番号０の幅情報として、データ番号00に白：0.2、データ番号01に黒:0.8を記録し、また、幅情報群Ｂにはペンディング値(PB)=0、画素番号０の幅情報としてデータ番号00に黒：0.2、データ番号01に白:0.2とそれぞれ記録する。図７（Ｅ）と図７（Ｆ）ははこのときの二値化をイメージ化したものであり、幅情報群Ａを符号５６で、幅情報群Ｂを符号５７で示している。ステップＳ１４の段階では、それぞれ画素０の部分のみが記録された状態である。
【００９１】
次に、図４のステップＳ１５に移り、２画素目（＝画素１）の受光強度、即ち、図７（Ｂ）のイメージセンサ５３の画素番号１の画素の受光強度を取得する。このとき取得される受光強度は0.6となる。ステップＳ１６では、取得した受光強度が０か１かを判断する。図７の例では、取得した受光強度は0.6のため、“no”のフローに進み、図５のステップＳ２１に移る。
【００９２】
図５のステップＳ２１は「有効な幅情報群の一つを選ぶ（計算済みを除く）」処理だが、幅情報群Ａ、幅情報群Ｂともに未計算なので、まずは幅情報群Ａを選び、次のステップＳ２２に進む。ステップＳ２２では一つ前の画素、即ち画素番号０の受光強度が、１か０であったかどうかを確認する。図７の例では、一つ前の画素、即ち画素番号０の受光強度は0.2であるため、ステップ２２の“no”のフローに進み、ステップＳ２４に移る。ここまでのステップによって、画素番号０と画素番号１は「受光強度が白と黒の中間の値をとる状態」であることを示している。
【００９３】
ステップＳ２４では、一つ前の画素、即ち画素番号０の白・黒の順の決定結果が「黒→白」であるかどうかを確認する。幅情報群Ａの画素番号０は白→黒の順であるため、このフローでは“no”となり、ステップＳ２５に進む。ステップＳ２５で、現在処理している画素、即ち画素番号１の白・黒順を「黒→白」と決定し、ステップＳ２７に進む。
【００９４】
ステップＳ２７では、現在処理中の画素番号１の画素において「黒→白」という順に（１−受光強度値）の幅の黒部と、受光強度値の幅の白部とが配置されているとし、一つ前の画素との境界を挟む部分、即ち画素番号０と画素番号１の境界をまたぐ黒部の幅の合計を計算する。図７の例では、画素番号０の黒部の幅は0.8、画素番号１の黒部の幅が0.4であるため、合計すると1.2、つまり「黒の連続した幅情報の合計は1.2」となる。次にステップＳ２９に進む。
【００９５】
ステップＳ２９では、この計算結果が１以上かどうかを確認する。本例では結果は１以上なので、“yes”となり、ステップＳ３１に進む。ステップＳ３１では、幅情報群Ａの画素番号１の幅情報として白→黒の順に、データ番号02に白:0.2、データ番号03に黒:0.8と記録し、次のステップＳ３４に進む。ステップＳ３４では他に処理すべき有効な幅情報群があるかどうか確認する。本例ではこの段階で幅情報群Ｂが未計算なので、“yes”に進み、ステップＳ２１に戻る。
【００９６】
ステップＳ２１では、再び幅情報群を選ぶ。ここでは未計算の幅情報群Ｂを選ぶことになる。ステップＳ２２では、１つ前の画素（画素番号０）で取得した受光強度は0.2であり、０でも１でもないので、“no”に分岐してステップＳ２４に進む。
【００９７】
ステップＳ２４では、一つ前の画素、即ち、幅情報群Ｂの画素番号０は黒→白の順であるため、このフローでは“yes”となり、ステップＳ２６に進む。ステップＳ２６で、現在処理している画素、即ち画素番号１の白・黒順を「白→黒」と決定し、ステップＳ２８に進む。
【００９８】
ステップＳ２８では、現在処理中の画素番号１の画素において「白→黒」という順に受光強度値の幅の白部と、（１−受光強度値）の幅の黒部とが配置されているとし、一つ前の画素との境界を挟む部分、即ち画素番号０と画素番号１の境界をまたぐ白部の幅の合計を計算する。図７の例では、画素番号０の白部の幅は0.2、画素番号１の白部の幅が0.6であるため、合計すると0.8、つまり「白の連続した幅情報の合計は0.8」となる（これを図にしたものが図７（Ｆ）の符号５７で示した部分である）。次にステップＳ３０に進む。
【００９９】
ステップＳ３０では、ステップＳ２８で算出した「白の連続した幅情報の合計」が１以上かどうかを判断する。この計算結果は0.8であるため、ステップＳ３０は“no”となり、ステップＳ３２に進む。
【０１００】
ステップＳ３２では、他に有効な幅情報群があるかどうかを確認する。本例では、幅情報群Ａが存在するため、「ほかに有効な幅情報群がある」となり、“yes”に分岐してステップＳ３３に進む。ステップＳ３３では、直前まで計算していた幅情報群、即ち、幅情報群Ｂを不適切だったとして無効化し、再びステップＳ２１に戻る。
【０１０１】
ステップＳ２１では、再びで幅情報群を選ぶ。本例ではこの段階で計算すべき幅情報群が残っていないため、図４のステップＳ１８に移る。
【０１０２】
ステップＳ１８では、最後に取得した受光強度の画素がイメージセンサの最後の画素かどうかを確認する。この段階ではまだ次の画素が存在するため、“no”に進み、ステップＳ１５に移る。ステップＳ１５で次の画素、つまり３つ目である画素番号２の受光強度を取得する。図７の例では、受光強度は0.6となる。ステップＳ１６で受光強度が0か1かを判断し、本例では受光強度は0でも1でもないため、“no”に進んでステップＳ２１に移る。
【０１０３】
このような処理を画素番号７（イメージセンサの最後の画素）まで行い、ステップＳ１８の判断で最終画素と判断した場合、ステップＳ１９に移る。このとき、有効な幅情報群が複数ある場合は、最もペンディング値が小さいものを結果として選ぶ。本例では、幅情報群Ａのみが有効となったため、幅情報群Ａが結果として選ばれることになる。次のステップＳ２０で、選択した幅情報群のデータを整理して、デコードで使用できるデータ（二値化データ）にする、即ち二値化である。
【０１０４】
本例で計算した幅情報群Ａ、幅情報群Ｂの具体的なデータと幅情報群Ａの二値化データ（幅データを整理したもの）を表５にまとめる。幅情報群Ａはペンディング値Pが3に増加している。幅情報群Ｂは２画素目（＝画素１）の処理の段階で破棄されている。
【０１０５】
【表５】
0005896488.tif 000006
【０１０６】
本例において、本発明の実施形態に従って二値化した結果のイメージが図７（Ｅ）のパターン５６である。バーコード原像の白幅及び黒幅が画素幅より狭いにもかかわらず、従来の方法で二値化したイメージ５８と比較して、画素番号４以降では、0.8の幅を正確に再現しているなど、原像５２の再現度が高い。つまり、後段のデコード処理でデコードに成功する可能性が高いことを意味する。
【０１０７】
このとき、二値化処理中のペンディング値の存在によって再現性が低下していることを後段のデコード処理ブロックに通知することができるため、仮に、デコードできたとしても、その結果の信頼性が低下していること、及びその度合いを数値でアウトプットすることも可能である。
【０１０８】
〔本発明の実施形態の処理フローの変形例〕
図４及び図５による二値化方法では、計算する量をできるだけ減らせるよう、早い段階で「不適切」な結果を振るい落とせるように、図５のステップＳ２９とステップＳ３０で画素境界を跨ぐ白または黒の幅の下限値を１（＝画素幅と同じ）として切り分け、ステップＳ３３で他に有効な候補があればもう一方は無効化する、という処理を設けたが、次のような方法でもよい。
【０１０９】
・図５のステップＳ２９とステップＳ３０で画素境界を跨ぐ白または黒の幅の下限値を０．５〜１の範囲に設定して、「不適切」と判断される数を敢えて下げ、二値化処理候補（幅情報群）をできるだけ最後まで残す方法。これは原像が画素幅より小さい白又は黒が存在している場合に有効である。
【０１１０】
・ステップＳ３３で、ある幅情報群を「不適切」と判断した場合でも幅情報群を敢えて無効化せず、全ての画素の処理が完了した段階でペンディング値の総計で比較し、より値の小さい方を「より信頼度の高い結果」として採用する方法。
【０１１１】
・ステップＳ３３で、ある幅情報群を「不適切」と判断した場合でも幅情報群を敢えて無効化せず、全ての画素の処理を行い、全ての二値化結果でデコードを試み、デコードできた二値化結果の中で、ペンディング値の総計が最も小さいものを「より信頼度の高い結果」として採用する方法。
【０１１２】
〔読取限界について〕
特殊な例として、図８（Ａ）と図８（Ｂ）を考える。図８（Ａ）は、幅１の白と黒が交互に存在するバーコード原像で、それぞれ各画素の中央に、白・黒の境界が映り込むような状態である。一方、図８（Ｂ）は、幅0.5の白と黒が交互に存在するバーコード原像で、それぞれ各画素に白・黒が均等に映り込むような状態である。図８（Ａ）及び図８（Ｂ）では、どちらも、全てのセンサ画素の受光強度の結果が全く同じとなる。つまり、センサ画素の受光強度の値を用いて始まる二値化処理の結果、原像が図８（Ａ）だったのか、図８（Ｂ）だったのかは判断できない。具体的には、図８（Ａ）及び図８（Ｂ）のそれぞれについて、本発明の実施形態である図４及び図５のフローで二値化処理を行うと、いずれも図８（Ａ）の原像と同一の二値化結果となり、必ずしも原像を再現できない。これは、画素幅より小さい白・黒の幅を持つバーコード原像では、二値化処理結果の信頼性が低下することを意味する。
【０１１３】
もう一つの特殊な例として、図９（Ａ）と図９（Ｂ）を考える。図９（Ａ）は、不均一な幅の白と黒のパターンで、一部、0.8幅の白が存在するものである。図９（Ｂ）は図９（Ａ）のセンサ画素の受光強度の値が全く同じとなるように図９（Ａ）と異なる原像を想定したものである。図９（Ｂ）の原像には0.4幅の白が含まれている。
【０１１４】
図９（Ａ）及び図９（Ｂ）のそれぞれについて、本発明の実施形態である図４及び図５のフローで二値化処理を行うと、いずれも図９（Ａ）の原像と同一の二値化結果となる。これは二値化過程において想定しうる原像のなかで、より幅の太い白または黒の幅を持つ原像の方が「より正しいもの」として判断していることを意味する。図９（Ａ）の原像は一部画素幅を下回る白が含まれていても二値化できるが、図９（Ｂ）の原像は二値化できる限界幅を下回っていて二値化できない（二値化した結果は図９（Ａ）の原像と同じとなってしまう）。
【０１１５】
〔センサ受光強度の前処理〕
現実的には、原像に対するセンサ受光強度にはノイズ成分が含まれている。また、バーコードの印刷状態や印刷のインクの状態に依存するため、白部は必ずしもセンサ受光可能値の最大値とはならず、また、黒部も必ずしもセンサ受光可能値の最小値をとはならない。
【０１１６】
そこで、３２個の画素をもつイメージセンサに、ある原像が映っている状態を考える。センサ受光可能最大値を１、センサ受光最小値を０としたときに、横軸にセンサ画素番号、縦軸に受光強度を示した例として図１０のようになったとする。図１０では、白部は受光強度の値で0.6〜0.8の間にノイズ成分を含んだ状態で分布している。また、黒部は受光強度の値で0.0〜0.2の間にノイズ成分を含んだ状態で分布している。
【０１１７】
この状態では、本発明の実施形態による二値化方法には利用しにくいため、センサ受光強度の最大値を１、最小値を０となるように規格化する。センサ画素番号をx、その受光強度をf(x)とし、その最大値をf(x)max、最小値をf(x) minとすると、センサ受光強度の最大値を１、最小値を０となるように規格化した値g(x)は、
【数１】
0005896488.tif 000007
となる。g(x)を図にしたものが図１１である。これで最大値を１、最小値を０とできるが、ノイズ成分が残っているため、g(x)に対して、15%の幅をノイズと想定し、0.85以上の値であれば１と見なし、また、0.15以下の値であれば0と見なすことによるノイズ除去を行う。その結果が図１２である。図１２は白部が１、黒部が０、その境界は中間値をとるような状態となり、本発明の実施形態による二値化処理に適した状態になる。
【０１１８】
このように、実際にイメージセンサで取得される受光強度を二値化しやすい状態に前処理してから、本発明の実施形態による二値化を行っても良い。
【０１１９】
本発明の実施形態における二値化方法では、バーコード読取装置のイメージセンサで撮像されたバーコードの撮像画像について画素毎の受光強度を分析し、対象の画素の受光強度が白部と黒部の中間の値をとる場合に、当該画素内にバーコードの白部と黒部の境界が存在すると判断した上で、当該画素とそれに隣接する画素での受光強度の増減関係と中間の値とに基づいて当該画素内における白黒順序及び境界位置を決定することにより、従来想定されていた最小分解能より小さい幅の二値化が可能となった。
【０１２０】
従来のバーコード読取装置ではリニアイメージセンサの３画素分程度の幅が検出できる限界であったが、本発明の実施形態によるバーコード読取装置では１画素分程度の幅も検出できるようになった。
【０１２１】
なお、上記のバーコード読取装置は、ハードウェア、ソフトウェア又はこれらの組合せにより実現することができる。また、上記のバーコード読取方法も、ハードウェア、ソフトウェア又はこれらに組合せにより実現することができる。ここで、ソフトウェアによって実現されるとは、コンピュータがプログラムを読み込んで実行することにより実現されることを意味する。
【０１２２】
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えば、フレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば、光磁気ディスク）、ＣＤ−ＲＯＭ(Read Only Memory)、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ(Programmable ROM)、ＥＰＲＯＭ(Erasable PROM)、フラッシュＲＯＭ、ＲＡＭ(random access memory)）を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【０１２３】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０１２４】
（付記１）
バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するプロセッサを備え、前記プロセッサは二値化処理の対象画素の受光強度が１画素全体がバーコードの白部に相当するときの第１受光強度と黒部に相当するときの第２受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定することを特徴とするバーコード読取装置。
【０１２５】
（付記２）
前記プロセッサは、前記対象画素が前記中間の値の受光強度を有する場合、前記隣接画素に対して前記対象画素の受光強度が増加しているとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素に対して前記対象画素の受光強度が減少しているとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記１に記載のバーコード読取装置。
【０１２６】
（付記３）
前記プロセッサは、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記１又は２に記載のバーコード読取装置。
【０１２７】
（付記４）
前記プロセッサは、前記対象画素内での白黒順序と前記第１受光強度又は前記第２受光強度に対する前記対象画素の受光強度の比とに基づいて前記対象画素内での白部と黒部の境界位置を決定することを特徴とする付記１〜３のいずれか１に記載のバーコード読取装置。
【０１２８】
（付記５）
前記プロセッサは、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第１初期条件と黒部から白部に変わる第２初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする付記１〜４のいずれか１に記載のバーコード読取装置。
【０１２９】
（付記６）
前記判定基準は、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数が少ない方の二値化データ群を選択するというものである付記５に記載のバーコード読取装置。
【０１３０】
（付記７）
前記判定基準は、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する二値化データ群を破棄するというものである付記５に記載のバーコード読取装置。
【０１３１】
（付記８）
バーコードに光を照射する照射光源と、
前記バーコードからの反射光をイメージセンサ上に結像する集光レンズと、
前記結像されたバーコードの映像に対し画素毎に受光強度を測定するイメージセンサと、
を更に備えことを特徴とする付記１〜７のいずれか１に記載のバーコード読取装置。
【０１３２】
（付記９）
前記プロセッサは、更に、二値化処理により得られた二値化データに対してデコード処理を行うことを特徴とする付記１〜８のいずれか１に記載のバーコード読取装置。
【０１３３】
（付記１０）
前記プロセッサは、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数の情報に基づいて、前記デコード処理を行って取得できたデコードデータのうち、前記個数が少ない方のデコードデータを選択することを特徴とする付記５を引用する付記９に記載のバーコード読取装置。
【０１３４】
（付記１１）
前記プロセッサは、更に、前記イメージセンサの各画素にて測定された受光強度に対して最大値１及び最小値０となるように規格化し、所定の第１閾値以上であれば１と見なし、所定の第２閾値以下であれば０と見なすノイズ除去処理を行うことを特徴とする付記１〜１０のいずれか１に記載のバーコード読取装置。
【０１３５】
（付記１２）
バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理するステップを含み、前記ステップにおいて二値化処理の対象画素の受光強度が１画素全体がバーコードの白部に相当するときの第１受光強度と黒部に相当するときの第２受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定することを特徴とするバーコード読取方法。
【０１３６】
（付記１３）
前記ステップでは、前記対象画素が前記中間の値の受光強度を有する場合、前記隣接画素に対して前記対象画素の受光強度が増加しているとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素に対して前記対象画素の受光強度が減少しているとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記１２に記載のバーコード読取方法。
【０１３７】
（付記１４）
前記ステップでは、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記１２又は１３に記載のバーコード読取方法。
【０１３８】
（付記１５）
前記ステップでは、前記対象画素内での白黒順序と前記第１受光強度又は前記第２受光強度に対する前記対象画素の受光強度の比とに基づいて前記対象画素内での白部と黒部の境界位置を決定することを特徴とする付記１２〜１４のいずれか１に記載のバーコード読取方法。
【０１３９】
（付記１６）
前記ステップでは、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第１初期条件と黒部から白部に変わる第２初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする付記１２〜１５のいずれか１に記載のバーコード読取方法。
【０１４０】
（付記１７）
前記判定基準は、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数が少ない方の二値化データ群を選択するというものである付記１６に記載のバーコード読取方法。
【０１４１】
（付記１８）
前記判定基準は、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する二値化データ群を破棄するというものである付記１６に記載のバーコード読取方法。
【０１４２】
（付記１９）
バーコードに光を照射するステップと、
前記バーコードからの反射光をイメージセンサ上に結像するステップと、
前記結像されたバーコードの映像に対し画素毎に受光強度を測定するステップと、
を更に含むことを特徴とする付記１２〜１８のいずれか１に記載のバーコード読取方法。
【０１４３】
（付記２０）
前記二値化処理するステップでは、更に、二値化処理により得られた二値化データに対してデコード処理を行うことを特徴とする付記１２〜１９のいずれか１に記載のバーコード読取方法。
【０１４４】
（付記２１）
前記二値化処理するステップでは、更に、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数の情報に基づいて、前記デコード処理を行って取得できたデコードデータのうち、前記個数が少ない方のデコードデータを選択することを特徴とする付記１６を引用する付記２０に記載のバーコード読取方法。
【０１４５】
（付記２２）
前記二値化処理するステップでは、更に、前記イメージセンサの各画素にて測定された受光強度に対して最大値１及び最小値０となるように規格化し、所定の第１閾値以上であれば１と見なし、所定の第２閾値以下であれば０と見なすノイズ除去処理を行うことを特徴とする付記１２〜２１のいずれか１に記載のバーコード読取方法。
【０１４６】
（付記２３）
コンピュータを、バーコードを撮像したイメージセンサの各画素の受光強度に応じて撮像画像を画素毎に二値化処理する手段として機能させるためのバーコード読取プログラムであって、前記手段により、二値化処理の対象画素の受光強度が１画素全体がバーコードの白部に相当するときの第１受光強度と黒部に相当するときの第２受光強度との中間の値をとる場合に、前記対象画素内にバーコードの白部と黒部の境界が存在すると判断し、前記対象画素とその隣接画素での受光強度の増減関係と前記中間の値とに基づいて前記対象画素内における白黒順序及び境界位置を決定することを特徴とするバーコード読取プログラム。
【０１４７】
（付記２４）
前記手段は、前記対象画素が前記中間の値の受光強度を有する場合、前記隣接画素に対して前記対象画素の受光強度が増加しているとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素に対して前記対象画素の受光強度が減少しているとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記２３に記載のバーコード読取プログラム。
【０１４８】
（付記２５）
前記手段は、前記対象画素と前記隣接画素とが前記中間の値の受光強度を有する場合、前記隣接画素での白黒順序が前記対象画素の側から黒部と白部の順序であるとき、前記対象画素内において前記隣接画素の側から黒部と白部の順序で配置されていると判定し、前記隣接画素での白黒順序が前記対象画素の側から白部と黒部の順序であるとき、前記対象画素内において前記隣接画素の側から白部と黒部の順序で配置されていると判定することを特徴とする付記２３又は２４に記載のバーコード読取プログラム。
【０１４９】
（付記２６）
前記手段は、前記対象画素内での白黒順序と前記第１受光強度又は前記第２受光強度に対する前記対象画素の受光強度の比とに基づいて前記対象画素内での白部と黒部の境界位置を決定することを特徴とする付記２３〜２５のいずれか１に記載のバーコード読取プログラム。
【０１５０】
（付記２７）
前記手段は、前記対象画素が二値化処理の最初の画素である場合、前記対象画素内における前記隣接画素の側からの白黒順序が白部から黒部に変わる第１初期条件と黒部から白部に変わる第２初期条件とを暫定的に定めておき、両初期条件それぞれの下で後続画素について二値化処理を行っていき夫々の二値化データ群を取得し、所定の判定基準に基づいてどちらかの二値化データ群を選択することを特徴とする付記２３〜２６のいずれか１に記載のバーコード読取プログラム。
【０１５１】
（付記２８）
前記判定基準は、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数が少ない方の二値化データ群を選択するというものである付記２７に記載のバーコード読取プログラム。
【０１５２】
（付記２９）
前記判定基準は、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する二値化データ群を破棄するというものである付記２７に記載のバーコード読取プログラム。
【０１５３】
（付記３０）
前記手段は、更に、二値化処理により得られた二値化データに対してデコード処理を行うことを特徴とする付記２３〜２９のいずれか１に記載のバーコード読取プログラム。
【０１５４】
（付記３１）
前記手段は、更に、取得された２つの二値化データ群の夫々についてバーコードの白部及び黒部の幅を夫々求め、該幅が所定の破棄範囲内に存在する個数の情報に基づいて、前記デコード処理を行って取得できたデコードデータのうち、前記個数が少ない方のデコードデータを選択することを特徴とする付記２７を引用する付記３０に記載のバーコード読取プログラム。
【０１５５】
（付記３２）
前記手段は、更に、前記イメージセンサの各画素にて測定された受光強度に対して最大値１及び最小値０となるように規格化し、所定の第１閾値以上であれば１と見なし、所定の第２閾値以下であれば０と見なすノイズ除去処理を行うことを特徴とする付記２３〜３１のいずれか１に記載のバーコード読取プログラム。
【産業上の利用可能性】
【０１５６】
本発明は、バーコード読取装置の二値化プログラムの一部の処理に利用できる。原像が白と黒、あるいは、明部と暗部の二値となるものであれば、バーコード読取装置以外の用途でも応用可能である。
【符号の説明】
【０１５７】
１  バーコード読取装置
２  照明光源
３  反射ミラー
４  集光レンズ
５  イメージセンサ
６  プロセッサ
７  バーコード
【図１】
0005896488.tif 000008
【図２】
0005896488.tif 000009
【図３】
0005896488.tif 000010
【図４】
0005896488.tif 000011
【図５】
0005896488.tif 000012
【図６】
0005896488.tif 000013
【図７】
0005896488.tif 000014
【図８】
0005896488.tif 000015
【図９】
0005896488.tif 000016
【図１０】
0005896488.tif 000017
【図１１】
0005896488.tif 000018
【図１２】
0005896488.tif 000019
【図１３】
0005896488.tif 000020
【図１４】
0005896488.tif 000021