(57)【要約】  劣化したコード記号の信号波形からコード記号を正しく認識できるようにすると共に、コード記号の読み取り精度を向上できるようにする。  変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて２値化コード記号データを、反射光の強度の高い白色、反射光の強度の低い黒色、および白色と黒色の略中間を示す灰色に分類する。そして、灰色が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して灰色の２値化コード記号データを分割してコード記号情報を求める。これにより、白色と黒色の略中間を示す灰色の２値化コード記号データを認識できるようになる。従って、劣化したコード記号の信号波形からコード記号を正しく認識できるようになる。
2010090159.tif 000002
【特許請求の範囲】
【請求項１】
光反射率の異なる部分で構成されるコード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求める微分処理部と、
前記微分信号から変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求める２値化コード記号データ計算部と、
前記２値化コード記号データと前記変曲点の変化量に基づいて、前記読取信号のコード記号情報を求める演算部とを備え、
前記演算部は、
前記変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて前記２値化コード記号データを、反射光の強度の高い第１の色情報、反射光の強度の低い第２の色情報、および前記第１の色情報と前記第２の色情報の略中間を示す第３の色情報に分類し、前記第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して該第３の色情報の２値化コード記号データを分割して前記コード記号情報を求めることを特徴とする光学的情報読取装置。
【請求項２】
画像を取り込んで、前記画像をデジタルの輝度値で表現される画像データに変換する画像取込手段と、
前記画像取込手段によって変換された前記画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成する輝度ヒストグラム作成手段と、
前記輝度ヒストグラム作成手段で作成された輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求める２値化コード記号データ計算部と、
前記２値化コード記号データと前記変曲点の変化量に基づいて、前記画像データのコード記号情報を求める演算部とを備え、
前記演算部は、
前記変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて前記２値化コード記号データを、輝度値の高い第１の色情報、輝度値の低い第２の色情報、および前記第１の色情報と前記第２の色情報の略中間を示す第３の色情報に分類し、前記第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して該第３の色情報の２値化コード記号データを分割して前記コード記号情報を求めることを特徴とする光学的情報読取装置。
【請求項３】
前記演算部は、
前記変曲点の変化量が同じ符号である場合、前記第３の色情報の２値化コード記号データと判定し、該変曲点間の範囲で最も変化が少ない２点の中間値を前記レベル情報とし、
前記変曲点の変化量がマイナスからプラスに変わる場合、前記第２の色情報の２値化コード記号データと判定し、該変曲点間の範囲における最小値を前記レベル情報とし、
前記変曲点の変化量がプラスからマイナスに変わる場合、前記第１の色情報の２値化コード記号データと判定し、該変曲点間の範囲における最大値を前記レベル情報とすることを特徴とする請求項１又は２に記載の光学的情報読取装置。
【請求項４】
前記演算部は、
前記変曲点の変化量がマイナスであり、かつ、前記２値化コード記号データが前記最小幅の２値化コード記号データの所定倍よりも大きい場合にスタートマージンと判定し、
前記２値化コード記号データが前記最小幅の２値化コード記号データの所定倍よりも大きいか、又は、前記２値化コード記号データが最後の場合にエンドマージンと判定することを特徴とする請求項１又は２に記載の光学的情報読取装置。
【請求項５】
前記演算部は、
前記変曲点の変化量が同じ符号を示す前記レベル情報のみを抽出し、抽出したレベル情報の中間値を求め、
前記変曲点の変化量が異なる符号を示す前記レベル情報のみを抽出し、抽出したレベル情報の最大値と最小値を検出し、
前記レベル情報の中間値と前記レベル情報の最大値を演算して、前記第３の色情報と前記第１の色情報との第１の境界値を求め、
前記レベル情報の中間値と前記レベル情報の最小値を演算して、前記第３の色情報と前記第２の色情報との第２の境界値を求め、
前記変曲点の変化量が同じ符号を示す場合、偶数個の前記第３の色情報であると判定し、
前記変曲点の変化量がマイナスであり、かつ、前記レベル情報が前記第１の境界値よりも大きい場合、前記第１の色情報であると判定し、
前記変曲点の変化量がプラスであり、かつ、前記レベル情報が前記第２の境界値よりも小さい場合、前記第２の色情報であると判定することを特徴とする請求項１又は２に記載の光学的情報読取装置。
【請求項６】
前記演算部は、
前記最小幅の２値化コード記号データを求める場合、前記変曲点の変化量が同じ符号を示す２値化コード記号データのみを抽出し、抽出した２値化コード記号データの中から最小偶数幅の２値化コード記号データを選択して、該最小偶数幅の２値化コード記号データを半分にして前記最小幅の２値化コード記号データを求めることを特徴とする請求項１又は２に記載の光学的情報読取装置。
【請求項７】
光反射率の異なる部分で構成されるコード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求めるステップと、
前記微分信号から変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求めるステップと、
前記変曲点間の信号の強度を示すレベル情報を求めるステップと、
前記レベル情報に基づいて前記２値化コード記号データを、反射光の強度の高い第１の色情報、反射光の強度の低い第２の色情報、および前記第１の色情報と前記第２の色情報の略中間を示す第３の色情報に分類するステップと、
前記第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して該第３の色情報の２値化コード記号データを分割してコード記号情報を求めるステップとを有することを特徴とする光学的情報読取方法。
【請求項８】
画像を取り込んで、前記画像をデジタルの輝度値で表現される画像データに変換するステップと、
変換した画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成するステップと、
作成した輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求めるステップと、
前記変曲点間の信号の強度を示すレベル情報を求めるステップと、
前記レベル情報に基づいて前記２値化コード記号データを、輝度値の高い第１の色情報、輝度値の低い第２の色情報、および前記第１の色情報と前記第２の色情報の略中間を示す第３の色情報に分類するステップと、
前記第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して該第３の色情報の２値化コード記号データを分割してコード記号情報を求めるステップとを有することを特徴とする光学的情報読取方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バーコードや二次元コードのような光反射率の異なる部分で構成される読取対象の情報を読み取る光学的情報読取装置及び光学的情報読取方法に関する。
【背景技術】
【０００２】
光学的情報読取装置、例えばバーコードスキャナは、よく知られるように黒バー（あるいは単にバー）と白バー（あるいはスペース）とで構成されるバーコードの画像にレーザー光線等を投射し、その反射光を受光して電気的処理を施すことによって、そのコード情報を読み取るものである。このバーコードスキャナは、バーコードを照射する光源、バーコードからの拡散反射光を捉える光学系や受光素子、受光素子からの出力信号をデジタル化する回路及びデジタル信号を演算処理してデコードする回路などで構成される。【０００３】
バーコードスキャナによれば、取得した電気信号の波形からバーコードの白黒の変曲点を求め（２値化）、変曲点の幅情報に対して適合するバーコードを探すこと（デコード）でバーコードを読み取ることができる。このため、白と黒の変曲点を検出することがバーコードの読み取りにおいて重要な要因となる。【０００４】
バーコードの複数の変曲点のうち、１つでも変曲点が検出できない場合には、バーコードを読み取ることができなくなる。変曲点の検出ができなくなる主な要因は、レンズの性能（収差や回折）、サンプリングレート（又は画素数）、ノイズ等がある。【０００５】
一般的に、レーザーを用いたバーコードスキャナでは、遠方側でＳ／Ｎ比（Signal to Noise ratio）の低下が顕著に現れるため読み取りが困難になる。また、ＣＣＤ（Charge Coupled Device）やＣＭＯＳ（Complementary Metal Oxide Semiconductor）などのラインセンサを用いたバーコードスキャナでは、主にレンズの性能限界や画素数で読み取りが困難になる場合がある。【０００６】
このようなバーコードスキャナに関連して特許文献１には、バーコードスキャナが開示されている。このバーコードスキャナによれば、バーコードを照射して得た信号における微分波形の振幅値を「１，０，−１」の３つの値の何れかに割り当てて、該微分波形を３値化する。この値「１」を示す正側三値信号のピークと、値「−１」を示す負側三値信号のピークとの間隔がバーコードの基本幅の整数倍となるように合成する。これにより、バーコードの黒太り部分を除去することができるので、正しいバーコード幅に修正できるようになる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−２５２９０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、従来例に係る特許文献１に記載のバーコードスキャナにおいては、バーコードの各々に対する黒太り部分を除去することができても、信号の劣化によってバーコードそのものが読み取れない場合には、対応できない問題がある。すなわち、例えば複数の最小幅のバーコードが読み取れない場合、特許文献１のバーコードスキャナでは、これらの最小幅のバーコードを正しいバーコードに修正することは困難である。【０００９】
また、バーコードの読み取りの性能を向上させるために、レンズの性能向上や画素数を増やすことが考えられる。この場合、レンズの性能向上のためには光学設計の際に最適な解を求める必要がある。一般に高分解能な解像力を求めると、回折の影響を少なくするためにレンズを明るくしなければならない。しかし、レンズが明るくなるとデフォーカスの性能（焦点深度）が低下する。このようなトレードオフの関係にあるため、レンズの材料や枚数などの変更による基本性能の向上が必須となる。画素数の多いセンサーを用いたり、レンズの基本性能の向上を行ったりするとコスト維持の面では非常に困難となる。【００１０】
そこで、本発明はこのような従来例に係る課題を解決したものであって、劣化したバーコードや二次元コードなどのコード記号の信号波形からコード記号を正しく認識できるようにすると共に、コード記号の読み取り精度を向上できるようにした光学的情報読取装置及び光学的情報読取方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決するために、本発明に係る光学的情報読取装置は、光反射率の異なる部分で構成されるコード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求める微分処理部と、微分信号から変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求める２値化コード記号データ計算部と、２値化コード記号データと変曲点の変化量に基づいて、読取信号のコード記号情報を求める演算部とを備え、演算部は、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて２値化コード記号データを、反射光の強度の高い第１の色情報、反射光の強度の低い第２の色情報、および第１の色情報と第２の色情報の略中間を示す第３の色情報に分類し、第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して該第３の色情報の２値化コード記号データを分割してコード記号情報を求めるものである。【００１２】
また、本発明に係る光学的情報読取装置は、画像を取り込んで、この画像をデジタルの輝度値で表現される画像データに変換する画像取込手段と、画像取込手段によって変換された画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成する輝度ヒストグラム作成手段と、輝度ヒストグラム作成手段で作成された輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求める２値化コード記号データ計算部と、２値化コード記号データと変曲点の変化量に基づいて、画像データのコード記号情報を求める演算部とを備え、演算部は、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて２値化コード記号データを、輝度値の高い第１の色情報、輝度値の低い第２の色情報、および第１の色情報と第２の色情報の略中間を示す第３の色情報に分類し、第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して該第３の色情報の２値化コード記号データを分割してコード記号情報を求めるものである。【００１３】
上述した課題を解決するために、本発明に係る光学的情報読取方法は、光反射率の異なる部分で構成されるコード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求めるステップと、微分信号から変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求めるステップと、変曲点間の信号の強度を示すレベル情報を求めるステップと、レベル情報に基づいて２値化コード記号データを、反射光の強度の高い第１の色情報、反射光の強度の低い第２の色情報、および第１の色情報と第２の色情報の略中間を示す第３の色情報に分類するステップと、第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して該第３の色情報の２値化コード記号データを分割してコード記号情報を求めるステップとを有するものである。【００１４】
また、本発明に係る光学的情報読取方法は、画像を取り込んで、画像をデジタルの輝度値で表現される画像データに変換するステップと、変換した画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成するステップと、作成した輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求めるステップと、変曲点間の信号の強度を示すレベル情報を求めるステップと、レベル情報に基づいて２値化コード記号データを、輝度値の高い第１の色情報、輝度値の低い第２の色情報、および第１の色情報と第２の色情報の略中間を示す第３の色情報に分類するステップと、第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して該第３の色情報の２値化コード記号データを分割してコード記号情報を求めるステップとを有するものである。【００１５】
本発明において、微分処理部は、コード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求める。２値化コード記号データ計算部は、この微分信号から変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求める。演算部は、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて２値化コード記号データを、反射光の強度の高い第１の色情報、反射光の強度の低い第２の色情報、および前記第１の色情報と前記第２の色情報の略中間を示す第３の色情報に分類する。そして、演算部は、第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して第３の色情報の２値化コード記号データを分割する。これにより、例えば白色と黒色の略中間を示す灰色の２値化コード記号データを認識できるようになる。従って、劣化したコード記号の信号波形からコード記号を正しく認識できるようになる。【００１６】
また、本発明において、画像取込手段は、画像を取り込んで、この画像をデジタルの輝度値で表現される画像データに変換する。輝度ヒストグラム作成手段は、画像取込手段によって変換された画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成する。輝度ヒストグラム作成手段で作成された輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求める。演算部は、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて２値化コード記号データを、輝度値の高い第１の色情報、輝度値の低い第２の色情報、および第１の色情報と第２の色情報の略中間を示す第３の色情報に分類する。そして、演算部は、第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して第３の色情報の２値化コード記号データを分割する。これにより、例えば白色と黒色の略中間を示す灰色の２値化コード記号データを認識できるようになる。従って、劣化したコード記号の信号波形からコード記号を正しく認識できるようになる。
【発明の効果】
【００１７】
本発明に係る光学的情報読取装置及び光学的情報読取方法によれば、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて２値化コード記号データを、反射光の強度（輝度値）の高い第１の色情報、反射光の強度（輝度値）の低い第２の色情報、および第１の色情報と第２の色情報の略中間を示す第３の色情報に分類する。そして、第３の色情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して第３の色情報の２値化コード記号データを分割してコード記号情報を求める。【００１８】
これにより、例えば白色と黒色の略中間を示す灰色の２値化コード記号データを認識できるようになる。従って、劣化したコード記号の信号波形からコード記号を正しく認識できるようになる。これにより、システムリソースを大幅に増やすことなく、コード記号の読み取り精度を向上できるようになる。
【図面の簡単な説明】
【００１９】
【図１】第１の実施の形態に係るバーコードスキャナ１００の構成例を示すブロック図である。
【図２】２値化予測部１５０の構成例を示すブロック図である。
【図３】バーコードＢＣ１，ＢＣ２の一例を示す図である。
【図４】バーコードＢＣ１，ＢＣ２の読み取り例を示す図である。
【図５】バーコードＢＣ１を読み取って出力された出力信号の波形図である。
【図６】バーコードＢＣ２を読み取って出力された出力信号の波形図である。
【図７】第１の実施の形態に係るバーコードスキャナ１００と従来のバーコードスキャナの読取深度の比較例を示す図である。
【図８】バーコードスキャナ１００の動作例を示すフローチャートである。
【図９】背景色と同色化したバーコードＢＣ２を読み取った場合におけるラインデータの信号波形を示す図である。
【図１０】２値化バーコードデータＢＢＤ[Ａｄ]と変曲点の向きＩＯ[Ａｄ]を示すテーブルＴＢ１の構成例を示す図である。
【図１１】図９の（Ａ）のラインデータ（アナログデータ）におけるＢＢＤごとのアナログ信号のレベルを示す図である。
【図１２】２値化バーコードデータの信号の強度を示すレベル情報ＰＯＷ[Ａｄ]を説明する図である。
【図１３】２値化バーコードデータの信号の強度を示すレベル情報ＰＯＷ[Ａｄ]を計算する例を示すフローチャートである。
【図１４】スタートマージン及びエンドマージンを切り出すテーブルＴＢ３，ＴＢ４の構成例を示す図である。
【図１５】マージン計算及び切り出し処理を行う処理の一例を示すフローチャートである。
【図１６】２値化バーコードデータの信号の強度を示すレベル情報ＰＯＷデータの抽出例を示す図である。
【図１７】白色、黒色、灰色の境界線の計算を行う処理の一例を示すフローチャートである。
【図１８】色の振り分け例を示すテーブルＴＢ５を説明する図である。
【図１９】色の振り分け例を示すテーブルＴＢ６を説明する図である。
【図２０】変曲点間の色を振り分ける計算を行う処理の一例を示すフローチャートである。
【図２１】変曲点の向きを示すＩＯ[Ａｄ]に基づいて、２値化バーコードデータを抽出した例を示す図である。
【図２２】基準最小幅の計算を行う処理の一例を示すフローチャートである。
【図２３】灰色を示す２値化バーコードデータＢＢＤ[Ａｄ］を奇数又は偶数に分割する例を示す図である。
【図２４】灰色バーの分割例を示すテーブルＴＢ７と、分割した２値化バーコードデータＦ_ＢＢＤを示すテーブルＴＢ８を説明する図である。
【図２５】分割した２値化バーコードデータＦ_ＢＢＤの最小分解能を「１」に正規化したテーブルＴＢ９を説明する図である。
【図２６】灰色のバーの分割処理を実施するフローチャートである。
【図２７】第２の実施の形態に係るコードスキャナ２００の構成例を示すブロック図である。
【図２８】二次元バーコード例を示す図である。
【図２９】輝度ヒストグラム例を示す図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照しながら本発明に係る光学的情報読取装置について説明する。本実施の形態では、光学的情報読取装置の一例として、第１の実施の形態ではバーコードスキャナ１００を、第２の実施の形態ではコードスキャナ２００を説明する。
【００２１】
＜第１の実施の形態＞  
図１は、第１の実施の形態に係るバーコードスキャナ１００の構成例を示すブロック図である。図１に示すように、バーコードスキャナ１００は、光信号を入力してアナログの電気信号に変換する信号変換部１１０と、信号変換部１１０で変換された電気信号を増幅する増幅部１２０と、増幅部１２０で増幅された電気信号のうち所定周波数以下の低域成分の信号だけを通過させて出力するローパスフィルタ１３０と、ローパスフィルタ１３０から出力された出力信号に応じて増幅部１２０における増幅の利得を制御する自動利得制御（ＡＧＣ）部１４０と、劣化した出力信号に対してバーコードの白と黒の変曲点を予測する２値化予測部１５０とからなる。
【００２２】
信号変換部１１０に入力する光信号は、バーコードスキャナ１００が不図示のＬＥＤやレーザビーム発生器等の発光源からバーコードに向けて照射した光の反射光の強度を示す信号である。信号変換部１１０は、光電変換素子１１１及び電流／電圧変換部（以下、Ｉ／Ｖ変換部１１２という）を備える。光電変換素子１１１は、光信号を受光して電流信号に変換するフォトダイオード（ＰＤ）から構成される。Ｉ／Ｖ変換部１１２は、電流信号を電圧信号に変換する。
【００２３】
増幅部１２０は、前置増幅部１２１及び可変利得増幅器（以下、ＡＧＣアンプ１２２という）を備える。前置増幅部１２１は、小さい電圧信号を増幅するために用いる。ＡＧＣアンプ１２２は、出力信号レベルをフィードバックすることで、利得が入力信号レベルに対して適切な範囲になるよう調整する。ＡＧＣアンプ１２２の利得は、自動利得制御部１４０によって生成される制御信号Ｓｃに応じて変化する。
【００２４】
自動利得制御部１４０は、ローパスフィルタ１３０の出力部から分岐してＡＧＣアンプ１２２に帰還する閉ループ型の制御系であり、ピーク値検出器１４１、比較器１４２及び基準レベル設定回路１４３を備えている。
【００２５】
ピーク値検出器１４１は、ローパスフィルタ１３０の出力信号の振幅のピーク電圧（ピーク値Ｖｐ）を検出して保持する。基準レベル設定回路１４３は、基準となる電圧値（以下、基準電圧値Ｖｓという）を設定する。比較器１４２は、基準レベル設定回路１４３によって設定された基準電圧値Ｖｓと、ピーク値検出器１４１により保持したピーク値Ｖｐとを比較し、その比較結果に応じた制御信号Ｓｃを出力してＡＧＣアンプ１２２の利得を制御する。
【００２６】
この場合の比較器１４２は差動増幅器の機能を持ち、ピーク値Ｖｐと基準電圧値Ｖｓとの差に応じた制御信号Ｓｃを出力し、それをＡＧＣアンプ１２２の制御端子に入力させる。制御信号Ｓｃは、Ｖｐ＞Ｖｓのときは正、Ｖｐ＝Ｖｓのときは０、Ｖｐ＜Ｖｓのときは負となる。ＡＧＣアンプ１２２ではこの制御信号Ｓｃと反比例するように増幅の利得を可変する。すなわち、出力信号の振幅が小さくなると、ピーク値Ｖｐが基準電圧値Ｖｓより小さくなるので制御信号Ｓｃが負になり、ＡＧＣアンプ１２２の利得が大きくなる。逆に、出力信号の振幅が大きくなると、ピーク値Ｖｐが基準電圧値Ｖｓより大きくなるので制御信号Ｓｃが正になり、ＡＧＣアンプ１２２の利得が小さくなる。それによって、出力信号の平均的な振幅を略一定にする。
【００２７】
２値化予測部１５０は、ローパスフィルタ１３０から出力された出力信号を入力し、この出力信号が劣化している場合には、バーコードの白と黒の変曲点を予測してデジタルの２値化信号を生成する。この２値化信号は、後段の不図示の復号化回路によりデコードされてバーコード記号として読み取られる。
【００２８】
図２は、２値化予測部１５０の構成例を示すブロック図である。図２に示すように、２値化予測部１５０は、アナログ用の第１のメモリ（以下、第１のメモリ１５１という）、アナログ用の第２のメモリ（以下、第２のメモリ１５２という）、微分処理部１５３、変曲点検出部１５４、線形補完部１５５、ＢＢＤ計算部１５６、デジタル用の第１のメモリ（以下、第１のメモリ１５７という）、デジタル用の第２のメモリ（以下、第２のメモリ１５８という）及びＣＰＵ１５９を備えている。
【００２９】
図２に示す２値化予測部１５０は、第１のメモリ１５１と第２のメモリ１５２を切り替える。また、２値化予測部１５０は、第１のメモリ１５７と第２のメモリ１５８を切り替える。これは、バーコードを読み取る処理と演算する処理とを並列に行ってスループットを向上させるためである。
【００３０】
微分処理部１５３は、第１のメモリ１５１又は第２のメモリ１５２に保存された図９の（Ａ）に示すアナログデータを一階微分して、図９の（Ｂ）に示す一階微分した信号波形を求める。また、微分処理部１５３は、第１のメモリ１５１又は第２のメモリ１５２に保存されたアナログデータを二階微分して、図９の（Ｃ）に示す二階微分した信号波形を求める。
【００３１】
変曲点検出部１５４は、一階微分した信号波形と二階微分した信号波形から変曲点を検出する。線形補完部１５５は、二階微分の値を線形補完する。これにより、変曲点の位置をより正確に読み取ることができる。
【００３２】
ＢＢＤ計算部１５６は、図９の（Ｂ）に示す一階微分の絶対値が特定のスライスラインＬ１，Ｌ２より大きく（例えば、図９の（Ｂ）では、一階微分の値が、スライスラインＬ１よりも上方にある箇所、及び、スライスラインＬ２よりも下方にある箇所）、かつ、図９の（Ｃ）に示す二階微分の値がゼロのラインとクロスしている点を変曲点として検出する。ＢＢＤ計算部１５６は、変曲点の向き（変化量）を符号として図１０に示すテーブルＴＢ１のＩＯ[Ａｄ]に保存する。また、ＢＢＤ計算部１５６は、変曲点間の幅長を２値化バーコードデータ（以下適宜、ＢＢＤという）として図１０に示すテーブルＴＢ１のＢＢＤ[Ａｄ]に保存する。このテーブルＴＢ１は、第１のメモリ１５７又は第２のメモリ１５８に保存される。なお、変曲点検出部１５４、線形補完部１５５及びＢＢＤ計算部１５６は、２値化コード記号データ計算部の一例である。ＣＰＵ１５９は演算部の一例であり、第１のメモリ１５７又は第２のメモリ１５８に保存されたテーブルＴＢ１を参照して２値化信号を生成する。
【００３３】
図３は、バーコードの一例を示す図である。図３の（Ａ）に示すように、バーコードＢＣ１は、幅長の異なる複数の黒色のバーが白い紙などの媒体に印字されている。この例では、バーコードＢＣ１は、スタートマージンＳＭ、エンドマージンＥＭ、１値幅バーSBr1，SBr2及び多値（２値も含む）幅バーLBr1，LBr2を有している。
【００３４】
スタートマージンＳＭ及びエンドマージンＥＭの濃淡のレベル情報は、白色のみである。１値幅バーSBr1，SBr2及び多値幅バーLBr1，LBr2の濃淡のレベル情報は、白色及び黒色である。すなわち、１値幅バーは、黒色の１値幅バーSBr1と白色の１値幅バーSBr2から構成される。多値幅バーは、黒色の多値幅バーLBr1と白色の多値幅バーLBr2から構成される。バーコードＢＣ１は、スタートマージンＳＭで始まり、１値幅バーSBr1，SBr2及び多値幅バーLBr1，LBr2の様々な組み合わせで構成され、エンドマージンＥＭで終了する。
【００３５】
図３の（Ｂ）に示すように、バーコードＢＣ２は、図３の（Ａ）に示したバーコードＢＣ１と同一の構成である。すなわち、バーコードＢＣ２は、スタートマージンＳＭ、エンドマージンＥＭ、１値幅バーSBr1，SBr2及び多値幅バーLBr1，LBr2を有している。バーコードＢＣ２は、媒体に印字された１値幅バーSBr1及び多値幅バーLBr1の画像が背景色と同色化した状態を示している。このようなバーコードＢＣ２の同色化は、例えば印字対象の材質や印字の劣化に依存する。印字対象の材質が例えば緑色のプリント基板であり、このプリント基板の表面にレーザマーカでバーコードを印字する場合には、白色の背景に黒色のバーコードを印字する場合に比べて同色化を招きやすい。このように、バーコードは、印字対象の材質や印字の劣化により、様々な印字状態となる。
【００３６】
図４の（Ａ）は、バーコードＢＣ１の読み取り例を示す図である。図４の（Ａ）に示すように、バーコードＢＣ１が同色化していない場合、出力信号の波形からバーコードＢＣ１の白黒の変曲点を求めて、変曲点の幅情報に対して適合するバーコードを探すことでバーコードＢ１を読み取ることができる。すなわち、スタートマージンＳＭ、エンドマージンＥＭ、１値幅バーSBr1，SBr2及び多値幅バーLBr1，LBr2にバーコードＢＣ１を分類できる。
【００３７】
変曲点の求め方としては、出力信号の変化量の絶対値が一定値より大きい極大値を検出する必要がある。これにより、ノイズなどによって発生する変化量の少ない変曲点を検出することを防止できる。
【００３８】
図４の（Ｂ）は、バーコードＢＣ２の読み取り例を示す図である。図４の（Ｂ）に示すように、同色化したバーコードＢＣ２の場合、幅長の狭い１値幅バーSBr1，SBr2が白色か黒色であるかの判別が難しい。この場合、図２に示した２値化予測部１５０は、変曲点間の信号の強度を示すレベル情報を追加することにより、バーコードＢＣ２の１値幅バーSBr1，SBr2を白色と黒色の中間色である灰色（グレー）のバーBr3として判別する。
【００３９】
２値化予測部１５０は、変曲点間の信号の強度を示すレベル情報に基づいて、バーコードＢＣ２の２値化バーコードデータを白色（第１の色情報）、黒色（第２の色情報）及び灰色（第３の色情報）の３値に分類して、この灰色のバーBr3を、黒色の１値幅バーSBr1と白色の１値幅バーSBr2の集合として判別する。２値化予測部１５０は、この灰色を示すバーBr3をバーコードＢＣ２の特徴（配列パターン）に照らし合わせて、黒色の１値幅バーSBr1と白色の１値幅バーSBr2を予測して分割する。例えば、２値化予測部１５０は、灰色のバーBr3の２値化バーコードデータを最小幅の２値化バーコードデータで除算して該灰色のバーBr3を分割する。
【００４０】
この例で、２値化予測部１５０は、図４の（Ｂ）に示す灰色のバーBr3aの幅長を求め、例えば黒色の１値幅バーSBr1の幅長で該バーBr3aの幅長を除算する。これにより、灰色のバーBr3aの中に含まれる黒色の１値幅バーSBr1又は白色の１値幅バーSBr2の個数が分かる。この例では、バーBr3aに含まれる１値幅バーSBr1，SBr2の個数は４個である。２値化予測部１５０は、１値幅バーの個数を算出後、バーコードＢＣ２の黒色と白色の配列パターンから、灰色のバーBr3aを黒色の１値幅バーSBr1と白色の１値幅バーSBr2に分割する。このバーコードＢＣ２の配列パターンは、黒色の後には白色が続き、また、白色の後には黒色のバーが続くように構成される。すなわち、白色と黒色のバーが交互に配列されなければ、バーコードとして成立しない。
【００４１】
この例では、図４の（Ｂ）に示すバーBr3aは、黒色の多値幅バーLBr1と白色の多値幅バーLBr2に挟まれているので、バーBr3aの配列パターンは、紙面向かって左から、白色の１値幅バーSBr2→黒色の１値幅バーSBr1→白色の１値幅バーSBr2→黒色の１値幅バーSBr1となる。これにより、バーコードＢＣ２のように同色化した場合であっても、黒色の１値幅バーSBr1と白色の１値幅バーSBr2を判別できるようになる。
【００４２】
続いて、図１に示したバーコードスキャナ１００のローパスフィルタ１３０から出力される出力信号の波形とバーコードの関係について説明する。図５の（Ａ）に示す出力信号の波形は、図５の（Ｃ）に示すバーコードＢＣ１を読み取って出力された出力信号の波形である。図５の（Ａ）の縦軸には信号レベルを設定し、横軸には画素位置を設定している。図５の（Ａ）に示す出力信号は、該出力信号の全ての変曲点Ｉが検出されている。この変曲点Ｉに基づく幅情報のみから得た２値化結果から、図５の（Ｂ）に示すバーコードＢＣ３を生成することができる。このバーコードＢＣ３は、読み取った図５の（Ｃ）のバーコードＢＣ１と同一である。
【００４３】
図６の（Ａ）に示す出力信号の波形は、背景色と同色化した図６の（Ｃ）のバーコードＢＣ２を読み取って出力された出力信号の波形である。図６の（Ａ）の縦軸には信号レベルを設定し、横軸には画素位置を設定している。図６の（Ａ）に示す出力信号は、該出力信号の一部の変曲点Ｉのみが検出されている。この例で、黒色の１値幅バーSBr1と白色の１値幅バーSBr2を判別するための変曲点は検出されていない。
【００４４】
このとき、図２に示した２値化予測部１５０は、変曲点間の信号の強度を示すレベル情報を追加することにより、バーコードＢＣ２の１値幅バーSBr1，SBr2を白色と黒色の中間色である灰色のバーBr3として判別する。
【００４５】
２値化予測部１５０は、変曲点Ｉに基づく幅情報と変曲点間の信号の強度を示すレベル情報から、バーコードＢＣ２を白色、黒色及び灰色の３値に分類する。そして、この灰色のバーBr3を、黒色の１値幅バーSBr1と白色の１値幅バーSBr2の集合として判別する。２値化予測部１５０は、灰色を示すバーBr3をバーコードＢＣ２の配列パターンに照らし合わせて、黒色の１値幅バーSBr1と白色の１値幅バーSBr2を予測して分割する。これにより、背景色と同色化した図６の（Ｃ）のバーコードＢＣ２を読み取った場合であっても、正確に読み取ることができる。
【００４６】
続いて、本発明に係るバーコードスキャナ１００と従来のバーコードスキャナで読み取ったバーコードの読取深度の比較結果について説明する。ここで、読取深度とは、バーコードスキャナでバーコードを読むことができる最小距離と最大距離の差である。図７に示す縦軸には、バーコードの一例として、ＪＡＮ（Japanese Article Number）のモジュール幅が0.33mmのバーコードと、code39の細バーの寸法が0.25mmのバーコードを設定し、横軸には読取深度（ｍｍ）を設定している。
【００４７】
図７に示すＪＡＮのバーコードにおいて、従来のバーコードスキャナでは、読み取り最小距離が約６０ｍｍで、読み取り最大距離が約１２０ｍｍであり、読取深度は約６０ｍｍである。本発明に係るバーコードスキャナ１００では、読み取り最小距離が約６０ｍｍで、読み取り最大距離が約２００ｍｍであり、読取深度は約１４０ｍｍである。従って、本発明に係るバーコードスキャナ１００は、従来のバーコードスキャナに比べて読取深度が約８０ｍｍ向上している。
【００４８】
図７に示すcode39のバーコードにおいて、従来のバーコードスキャナでは、読み取り最小距離が約６０ｍｍで、読み取り最大距離が約１３８ｍｍであり、読取深度は約７８ｍｍである。本発明に係るバーコードスキャナ１００では、読み取り最小距離が約６０ｍｍで、読み取り最大距離が約２３８ｍｍであり、読取深度は約１７８ｍｍである。従って、本発明に係るバーコードスキャナ１００は、従来のバーコードスキャナに比べて読取深度が約１００ｍｍ向上している。
【００４９】
続いて、図１に示したバーコードスキャナ１００の動作を詳細に説明する。図８は、バーコードスキャナ１００の動作例を示すフローチャートである。この例では、図３の（Ｂ）に示したような、例えば印字対象の材質や印字の劣化によって、媒体に印字された１値幅バーSBr1及び多値幅バーLBr1の画像が背景色と同色化したバーコードＢＣ２を読み取る場合について説明する。
【００５０】
図８に示すステップＳＴ１で、バーコードスキャナ１００は、バーコードのラインデータを取り込んで変曲点を検出する。例えば、バーコードスキャナ１００のエリアセンサーとして機能する図１の光電変換素子１１１は、不図示のＬＥＤによりバーコードに照射されて反射された光信号を受光して電流信号に変換してＩ／Ｖ変換部１１２に出力する。Ｉ／Ｖ変換部１１２は、この電流信号を電圧信号に変換する。この電圧信号は、増幅部１２０により所定の電圧に増幅されてローパスフィルタ１３０を経て２値化予測部１５０に出力される。なお、光電変換素子１１１で受光したエリアデータから特定のラインデータのみを抜き出して該ラインデータを加算することにより、図９の（Ａ）に示すノイズの少ないラインデータを得ることができる。
【００５１】
図９の（Ａ）は、図３の（Ｂ）に示したような背景色と同色化したバーコードＢＣ２を読み取った場合のラインデータの信号波形を示す図である。図９の（Ｂ）は、図９の（Ａ）の信号波形を一階微分した信号波形を示す図である。図９の（Ｃ）は、図９の（Ａ）の信号波形を二階微分した信号波形を示す図である。図９の（Ａ），図９の（Ｂ）及び図９の（Ｃ）に示す縦軸には信号のレベルを設定し、横軸には画素位置を設定している。
【００５２】
２値化予測部１５０は、図９の（Ａ）に示す信号波形の変曲点を検出する場合に、図９の（Ｂ）に示す一階微分の絶対値が特定のスライスラインＬ１，Ｌ２より大きく、かつ、図９の（Ｃ）に示す二階微分の値がゼロのラインとクロスしている点を変曲点として検出する。変曲点の検出の際に、二階微分の値を線形補完部１５５によって線形補完することで、変曲点の位置をより正確に読み取ることができる。スライスレベルは、ノイズとの区別をするために必要で、このスライスレベルを超えない変曲点（図９の（Ｂ）では、スライスラインＬ１とスライスラインＬ２との間にある変曲点）はノイズとして扱う。
【００５３】
２値化予測部１５０は、変曲点間の幅長を２値化バーコードデータとして図１０に示すテーブルＴＢ１のＢＢＤ[Ａｄ]に保存する。２値化予測部１５０は、図９の（Ａ）の変曲点の向き（変化量）を示す１次微分値が正（図９の（Ｂ）の信号波形が上に凸）の場合にはプラス（＋）として図１０に示すテーブルＴＢ１のＩＯ[Ａｄ]に保存する。また、変曲点の向きを示す１次微分値が負（図９の（Ｂ）の信号波形が下に凸）の場合にはマイナス（−）として図１０に示すテーブルＴＢ１のＩＯ[Ａｄ]に保存する。
【００５４】
図１０は、２値化バーコードデータＢＢＤ[Ａｄ]と変曲点の向きを示すＩＯ[Ａｄ]を有するテーブルＴＢ１の構成例を示す図である。図１０に示すテーブルＴＢ１は、アドレス「Ａｄ」、ＢＢＤ[Ａｄ]及びＩＯ[Ａｄ]から構成されている。アドレス「Ａｄ」は、ＢＢＤを参照するためのアドレスである。ＢＢＤ[Ａｄ]には、変曲点間の幅長を示す２値化バーコードデータが保存される。ＩＯ[Ａｄ]には、変曲点の向き（変化量）を示す１次微分値（＋−符号）が保存される。
【００５５】
この例で、図１０に示すテーブルＴＢ１には、図９の（Ａ）に示した信号波形のＢＢＤ及び変曲点の向きが保存されている。例えば、スタートマージンＳＭを示すアドレス「Ａｄ」の「０」には、ＢＢＤ[Ａｄ]に「１２８２」、ＩＯ[Ａｄ]に「−」が保存されている。また、最初の２値化バーコードデータを示すＢＢＤ[１]に「１５」、ＩＯ[１]に「−」が保存されている。
【００５６】
続いて、図８に示したフローチャートのステップＳＴ２の処理について説明する。図８に示すステップＳＴ２で、２値化予測部１５０は、変曲点間のレベルを計算する。図１１は、図９の（Ａ）のラインデータ（アナログデータ）におけるＢＢＤごとのアナログ信号のレベルを示す図である。図１１に示すアドレス「Ａｄ」の「０」〜「２０」は、図１０のテーブルＴＢ１のアドレス「Ａｄ」の「０」〜「２０」に相当する。例えば、図１１によれば、テーブルＴＢ１のＢＢＤ[１]のアナログ信号のレベルは、約３５〜約４７の間で変位している。
【００５７】
図１２の（Ａ）は、変曲点の向き（変化量）を示すＩＯ[Ａｄ]，ＩＯ[Ａｄ−１]から、２値化バーコードデータの信号の強度を示すレベル情報ＰＯＷ[Ａｄ]を求める条件を示す図である。図１２の（Ａ）に示すCASE「Ａ」は、変曲点の向きを示す１次微分値が、両方プラス（＋）又は両方マイナス（−）の場合である。この場合、変曲点の向きを示す１次微分値が同じ符号であるため、ＢＢＤ[Ａｄ]は、灰色を示す２値化バーコードデータである。CASE「Ａ」では、灰色を示す２値化バーコードデータであるため、抽出したアナログデータの中で最も変化が少ない２点の中間値を、図１２の（Ｂ）のテーブルＴＢ２のレベル情報ＰＯＷ[Ａｄ]に設定する。
【００５８】
CASE「Ｂ」は、変曲点の向きを示す１次微分値が、ＩＯ[Ａｄ−１]がマイナス（−）で、ＩＯ[Ａｄ]がプラス（＋）の場合である。この場合、変曲点の向きを示す１次微分値がマイナスからプラスに変位するため、ＢＢＤ[Ａｄ]は、黒色を示す２値化バーコードデータである。CASE「Ｂ」では、反射光の強度の低い黒色を示す２値化バーコードデータであるため、抽出したアナログデータの中で最小値を、図１２の（Ｂ）のテーブルＴＢ２のレベル情報ＰＯＷ[Ａｄ]とする。
【００５９】
CASE「Ｃ」は、変曲点の向きを示す１次微分値が、ＩＯ[Ａｄ−１]がプラス（＋）で、ＩＯ[Ａｄ]がマイナス（−）であると判定した場合である。この場合、変曲点の向きを示す１次微分値がプラスからマイナスに変位するため、ＢＢＤ[Ａｄ]は、白色を示す２値化バーコードデータである。CASE「Ｃ」では、反射光の強度の高い白色を示す２値化バーコードデータであるため、抽出したアナログデータの中で最大値を、図１２の（Ｂ）のテーブルＴＢ２のレベル情報ＰＯＷ[Ａｄ]とする。
【００６０】
図１３は、２値化バーコードデータの信号の強度を示すレベル情報ＰＯＷ[Ａｄ]を計算する例を示すフローチャートであり、図８のステップＳＴ２の処理内容を詳細に説明するためのものである。図１３に示すステップＳＴ２００で、２値化予測部１５０は、図１２の（Ｂ）のテーブルＴＢ２のアドレス「Ａｄ」に「０」を設定して初期化する。続いてステップＳＴ２０１に移行する。
【００６１】
ステップＳＴ２０１で、２値化予測部１５０は、テーブルＴＢ１のアドレス「Ａｄ」に設定されたアドレスの２値化バーコードデータ（ＢＢＤ）の幅に属するアナログデータを抽出する。２値化予測部１５０は、例えばアドレス「Ａｄ」が「０」に属する図１１のアナログデータを抽出する。続いてステップＳＴ２０２に移行する。
【００６２】
ステップＳＴ２０２で、２値化予測部１５０は、変曲点の向き（変化量）を示すテーブルＴＢ１のＩＯ[Ａｄ]，ＩＯ[Ａｄ−１]を参照し、変曲点の向き（変化量）を示すＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が等しいか否かを判定する。図１２の（Ａ）に示すように、変曲点の向きを示す１次微分値が、両方プラス（＋）又は両方マイナス（−）の場合（図１２の（Ａ）のCASE「Ａ」に該当する場合）、ＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が等しいと判定してステップＳＴ２０３に移行する。
【００６３】
ステップＳＴ２０３で、２値化予測部１５０は、上述のステップＳＴ２０１で抽出したアナログデータの中で最も変化量の少ない２点の値を検出してステップＳＴ２０４に移行する。
【００６４】
ステップＳＴ２０４で、２値化予測部１５０は、上述のステップＳＴ２０３で検出した最も変化量の少ない２点の値から中間値を求め、図１２の（Ｂ）に示すテーブルＴＢ２のＰＯＷ[Ａｄ]に該中間値を、変曲点間の信号の強度を示すレベル情報として設定する。例えば、このテーブルＴＢ２のＰＯＷ[５]に中間値「３５」を、変曲点間の信号の強度を示すレベル情報として設定する。続いてステップＳＴ２０８に移行する。
【００６５】
上述のステップＳＴ２０２で、変曲点の向き（変化量）を示すＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が等しくない場合、ステップＳＴ２０５に移行する。
【００６６】
ステップＳＴ２０５で、２値化予測部１５０は、変曲点の向きを示すＩＯ[Ａｄ]がプラス（＋）であるか否かを判定する。図１２の（Ａ）に示すように、変曲点の向きを示す１次微分値が、ＩＯ[Ａｄ−１]がマイナス（−）で、ＩＯ[Ａｄ]がプラス（＋）の場合（図１２の（Ａ）のCASE「Ｂ」に該当する場合）、ステップＳＴ２０６に移行する。
【００６７】
ステップＳＴ２０６で、２値化予測部１５０は、上述のステップＳＴ２０１で抽出したアナログデータの中で最小値を検出して、図１２の（Ｂ）に示すテーブルＴＢ２のＰＯＷ[Ａｄ]に該最小値を、変曲点間の信号の強度を示すレベル情報として設定する。例えば、このテーブルＴＢ２のＰＯＷ[２]に最小値「３１」を、変曲点間の信号の強度を示すレベル情報として設定する。続いてステップＳＴ２０８に移行する。
【００６８】
上述のステップＳＴ２０５で、２値化予測部１５０は、変曲点の向きを示すＩＯ[Ａｄ]がプラス（＋）でない、すなわち図１２の（Ａ）に示すように、変曲点の向きを示す１次微分値が、ＩＯ[Ａｄ−１]がプラス（＋）で、ＩＯ[Ａｄ]がマイナス（−）であると判定した場合（図１２の（Ａ）のCASE「Ｃ」に該当する場合）、ステップＳＴ２０７に移行する。
【００６９】
ステップＳＴ２０７で、２値化予測部１５０は、上述のステップＳＴ２０１で抽出したアナログデータの中で最大値を検出して、図１２の（Ｂ）に示すテーブルＴＢ２のＰＯＷ[Ａｄ]に該最大値を、変曲点間の信号の強度を示すレベル情報として設定する。例えば、このテーブルＴＢ２のＰＯＷ[３]に最大値「３５」を、変曲点間の信号の強度を示すレベル情報として設定する。続いてステップＳＴ２０８に移行する。
【００７０】
ステップＳＴ２０８で、２値化予測部１５０は、図１０に示したテーブルＴＢ１のＢＢＤのアドレス「Ａｄ」を現在のアドレスから次のアドレスに変更してステップＳＴ２０９に移行する。
【００７１】
ステップＳＴ２０９で、２値化予測部１５０は、図１０に示したテーブルＴＢ１における次のアドレスのＢＢＤが存在するか否かを判定する。次のアドレスのＢＢＤが存在すると判定した場合、ステップＳＴＳＴ２０１に戻り、次のアドレスのＢＢＤが存在しないと判定した場合、図８に示したフローチャートのステップＳＴ３に移行する。このようにして、変曲点間のレベル計算を行う。なお、図１２の（Ｂ）のテーブルＴＢ２には、説明の理解を容易にするために、変曲点の向きを示すＩＯ[Ａｄ]とＩＯ[Ａｄ−１]の関係を表したCASE「Ａ」〜CASE「Ｃ」を記載している。
【００７２】
続いて、図８に示したフローチャートのステップＳＴ３の処理について説明する。図８に示すステップＳＴ３で、２値化予測部１５０は、マージン計算及び切り出し処理を行う。図１４の（Ａ）に示すテーブルＴＢ３のＢＢＤ[Ａｄ]、ＩＯ[Ａｄ]を参照して、スタートマージン及びエンドマージンを検出して該マージンを切り出す。
【００７３】
この例では、スタートマージンとして決定する条件として、ＩＯ[Ａｄ]がマイナスであり、かつ、ＢＢＤ[Ａｄ]が所定範囲における２値化バーコードデータの最小値の所定倍（例えば６倍）よりも大きいことを満たす場合とする。
【００７４】
また、エンドマージンとして決定する条件として、ＢＢＤ[Ａｄ]が所定範囲における２値化バーコードデータの最小値の所定倍（例えば１２倍）よりも大きいか、又は、ＢＢＤのデータが有効な範囲の最後を満たす場合とする。
【００７５】
図１５は、マージン計算及び切り出し処理を行う処理の一例を示すフローチャートであり、図８のステップＳＴ３の処理内容を詳細に説明するためのものである。
【００７６】
図１５に示すステップＳＴ３００で、２値化予測部１５０は、図１４の（Ａ）に示すテーブルＴＢ３のＢＢＤ[Ａｄ]のアドレス「Ａｄ」に「０」を設定して初期化する。続いてステップＳＴ３０１に移行する。
【００７７】
ステップＳＴ３０１で、２値化予測部１５０は、図１４の（Ａ）に示すテーブルＴＢ３を参照して、変曲点の向きを示すＩＯ[Ａｄ]がマイナス（−）であるか否かを判定する。ＩＯ[Ａｄ]がマイナス（−）であると判定した場合、ステップＳＴ３０２に移行する。
【００７８】
ステップＳＴ３０２で、２値化予測部１５０は、テーブルＴＢ３のＢＢＤ[Ａｄ＋１]からＢＢＤ[Ａｄ＋１２]までの間で、２値化バーコードデータの最小値を検出してステップＳＴ３０３に移行する。
【００７９】
ステップＳＴ３０３で、２値化予測部１５０は、上述のステップＳＴ３０２で求めたＢＢＤの最小値を所定倍した値とＢＢＤ[Ａｄ]の２値化バーコードデータとを比較して、ＢＢＤ[Ａｄ]の２値化バーコードデータが大きければ、ステップＳＴ３０４に移行する。なお、この例では、ＢＢＤの最小値を６倍している。
【００８０】
ステップＳＴ３０４で、２値化予測部１５０は、図１４の（Ａ）のテーブルＴＢ３のＢＢＤ[０]にスタートマージンを示す情報を設定する。例えば、図１４の（Ｂ）のテーブルＴＢ４に示すように、ＢＢＤ[−]にスタートマージンを示す「st_margin」を設定する。スタートマージンを示す「st_margin」を設定後、図１４の（Ｂ）のテーブルＴＢ４に示すように、ＢＢＤ[Ａｄ]のアドレスをシフトさせる。例えば、図１４の（Ｂ）のＢＢＤ[０]には、最初の２値化バーコードデータを示す「１５」を設定する。続いてステップＳＴ３０５に移行する。
【００８１】
ステップＳＴ３０５で、２値化予測部１５０は、図１４の（Ａ）のテーブルＴＢ３のＢＢＤのアドレス「Ａｄ」を現在のアドレスから次のアドレスに変更してステップＳＴ３０６に移行する。
【００８２】
ステップＳＴ３０６で、２値化予測部１５０は、図１４の（Ａ）のテーブルＴＢ３における次のアドレスのＢＢＤが存在するか否かを判定する。次のアドレスのＢＢＤが存在しないと判定した場合、ステップＳＴ３０７に移行する。
【００８３】
ステップＳＴ３０７で、２値化予測部１５０は、テーブルＴＢ３の現在のアドレスが示すＢＢＤ[Ａｄ]にエンドマージンを示す「ed_margin」を設定してステップＳＴ３１１に移行する。
【００８４】
上述のステップＳＴ３０６で、２値化予測部１５０は、図１４の（Ａ）のテーブルＴＢ３における次のアドレスのＢＢＤが存在すると判定した場合、ステップＳＴ３０８に移行する。
【００８５】
ステップＳＴ３０８で、２値化予測部１５０は、上述のステップＳＴ３０２で求めたＢＢＤの最小値を所定倍した値と現在のＢＢＤ[Ａｄ]の２値化バーコードデータとを比較して、ＢＢＤ[Ａｄ]の２値化バーコードデータが大きければ、ステップＳＴ３０９に移行する。なお、この例では、ＢＢＤの最小値を１２倍している。
【００８６】
ステップＳＴ３０９で、２値化予測部１５０は、図１４の（Ｂ）のテーブルＴＢ４に示すように、ＢＢＤ[−]にエンドマージンを示す「ed_margin」を設定してステップＳＴ３１０に移行する。
【００８７】
ステップＳＴ３１０で、２値化予測部１５０は、図１４の（Ａ）のテーブルＴＢ３のＢＢＤのアドレス「Ａｄ」を現在のアドレスから次のアドレスに変更してステップＳＴ３１１に移行する。
【００８８】
ステップＳＴ３１１で、２値化予測部１５０は、図１４の（Ａ）のテーブルＴＢ３を参照してスタートマージンからエンドマージンまでのＢＢＤ、ＩＯ及びＰＯＷを抽出して、図１４の（Ｂ）に示すテーブルＴＢ４を作成してステップＳＴ３１２に移行する。
【００８９】
ステップＳＴ３１２で、２値化予測部１５０は、図１４の（Ａ）のテーブルＴＢ３における次のアドレスのＢＢＤが存在するか否かを判定する。次のアドレスのＢＢＤが存在すると判定した場合、ステップＳＴ３０１に戻る。次のアドレスのＢＢＤが存在しないと判定した場合、図８に示したフローチャートのステップＳＴ４に移行する。このようにして、マージン計算及び切り出し処理を行う。
【００９０】
続いて、図８に示したフローチャートのステップＳＴ４の処理について説明する。図８に示すステップＳＴ４で、２値化予測部１５０は、白色、黒色、灰色の境界線の計算を行う。図１７は、白色、黒色、灰色の境界線の計算を行う処理の一例を示すフローチャートであり、図８のステップＳＴ４の処理内容を詳細に説明するためのものである。
【００９１】
図１７に示すステップＳＴ４００で、２値化予測部１５０は、図１４の（Ｂ）に示したテーブルＴＢ４を参照して、変曲点の向きを示すＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が同じ符号を示すＰＯＷデータのみを抽出する。図１６は、ＰＯＷデータの抽出例を示す図である。図１６に示す「ＰＯＷ_Ａ」は、図１４の（Ｂ）のＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が同じ符号を示すＰＯＷデータのみを抽出したものであり、「３９」、「３５」、「３４」、「３６」、「３６」及び「４４」となる。続いてステップＳＴ４０１に移行する。
【００９２】
ステップＳＴ４０１で、２値化予測部１５０は、ＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が同じ符号を示すＰＯＷ_Ａが存在するか否かを判定する。ＰＯＷ_Ａが存在すると判定した場合、ステップＳＴ４０２に移行する。
【００９３】
ステップＳＴ４０２で、２値化予測部１５０は、ＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が異なる符号を示すＰＯＷデータのみを抽出する。図１６に示す「ＰＯＷ_Ｂ」は、図１４の（Ｂ）のＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が異なる符号を示すＰＯＷデータのみを抽出したものであり、「３１」や「３５」などがある。続いてステップＳＴ４０３に移行する。
【００９４】
ステップＳＴ４０３で、２値化予測部１５０は、ＰＯＷ_Ｂのデータの中から最大値を検出して、該最大値を白色の境界線の値（Ｗ_ＬＩＮＥ）に設定する。例えば、図１６のＰＯＷ_Ｂによると、このＷ_ＬＩＮＥは「５８」となる。続いてステップＳＴ４０４に移行する。
【００９５】
ステップＳＴ４０４で、２値化予測部１５０は、ＰＯＷ_Ｂのデータの中から最小値を検出して、該最小値を黒色の境界線の値（Ｂ_ＬＩＮＥ）に設定する。例えば、図１６のＰＯＷ_Ｂによると、このＢ_ＬＩＮＥは「２９」となる。続いてステップＳＴ４０５に移行する。
【００９６】
ステップＳＴ４０５で、２値化予測部１５０は、ＰＯＷ_Ａのデータの中から３番目に大きい値と最も小さい値の中間値を求め、該中間値を灰色の境界線の値（Ｇ_ＬＩＮＥ）として算出する。例えば、図１６に示すＰＯＷ_Ａによると、３番目に大きい値は「３６」となり、最も小さい値は「３４」となり、Ｇ_ＬＩＮＥは「３５」となる。ＰＯＷ_Ａのデータの中から３番目に大きい値を選択した理由は、レベルが大きくなる傾向があるスタートマージンとエンドマージンの付近のデータをカットするためである。続いてステップＳＴ４０６に移行する。
【００９７】
ステップＳＴ４０６で、２値化予測部１５０は、白色と灰色の境界線の値（ＷＧ_ＬＩＮＥ）を以下の式（１）から求める。
【００９８】
ＷＧ_ＬＩＮＥ＝Ｇ_ＬＩＮＥ＋（Ｗ_ＬＩＮＥ−Ｇ_ＬＩＮＥ）×０．２５・・・（１）
例えば、上述のステップＳＴ４０３，ＳＴ４０５で求めたＷ_ＬＩＮＥ＝「５８」、Ｇ_ＬＩＮＥ＝「３５」を式（１）に代入すると、ＷＧ_ＬＩＮＥは、小数点以下を四捨五入して「４１」になる。続いてステップＳＴ４０７に移行する。
【００９９】
ステップＳＴ４０７で、２値化予測部１５０は、黒色と灰色の境界線の値（ＧＢ_ＬＩＮＥ）を以下の式（２）から求める。
【０１００】
ＧＢ_ＬＩＮＥ＝Ｇ_ＬＩＮＥ−（Ｇ_ＬＩＮＥ−Ｂ_ＬＩＮＥ）×０．２５・・・（２）
例えば、上述のステップＳＴ４０４，ＳＴ４０５で求めたＢ_ＬＩＮＥ＝「２９」、Ｇ_ＬＩＮＥ＝「３５」を式（２）に代入すると、ＧＢ_ＬＩＮＥは、小数点以下を四捨五入して「３４」になる。このようにして、白色、黒色、灰色の境界線を求めて、図８に示したフローチャートのステップＳＴ５に移行する。
【０１０１】
また、上述のステップＳＴ４０１で、２値化予測部１５０は、ＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が同じ符号を示すＰＯＷ_Ａが存在しないと判定した場合、ステップＳＴ４０８に移行する。
【０１０２】
ステップＳＴ４０８で、２値化予測部１５０は、図１４の（Ｂ）に示すＰＯＷの全データの中から最大値を検出して、該最大値を白色の境界線の値（Ｗ_ＬＩＮＥ）に設定してステップＳＴ４０９に移行する。
【０１０３】
ステップＳＴ４０９で、２値化予測部１５０は、図１４の（Ｂ）に示すＰＯＷの全データの中から最小値を検出して、該最小値を黒色の境界線の値（Ｂ_ＬＩＮＥ）に設定してステップＳＴ４１０に移行する。
【０１０４】
ステップＳＴ４１０で、２値化予測部１５０は、ステップＳＴ４０８で設定したＷ_ＬＩＮＥとステップＳＴ４０９で設定したＢ_ＬＩＮＥの中間値を求め、該中間値を灰色の境界線の値（Ｇ_ＬＩＮＥ）として算出する。続いてステップＳＴ４０６に移行する。このようにして、ＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が同じ符号を示すＰＯＷ_Ａが存在しない場合は、白色、黒色、灰色の境界線を求める。
【０１０５】
続いて、図８に示したフローチャートのステップＳＴ５の処理について説明する。図８に示すステップＳＴ５で、２値化予測部１５０は、変曲点間の色を振り分ける計算を行う。この例では、変曲点の向きを示すＩＯ[Ａｄ]、２値化バーコードデータの信号の強度を示すレベル情報ＰＯＷ[Ａｄ]、白色と灰色の境界線の値（ＷＧ_ＬＩＮＥ）、黒色と灰色の境界線の値（ＧＢ_ＬＩＮＥ）を用いて色の振り分けを行う。
【０１０６】
図１８は、色の振り分け例を示すテーブルＴＢ５を示す図である。図１８に示すテーブルＴＢ５には、色の振り分けを示すCOLOR[Ad]に、偶数個の１値幅バーが存在することを示す「偶数灰色（ＥＧ）」が設定されている。この「偶数灰色（ＥＧ）」を設定するためには、図１４の（Ｂ）のテーブルＴＢ４を参照して、ＩＯ[Ａｄ−１]とＩＯ[Ａｄ]が同じ符号を満たすことを条件とする。
【０１０７】
図１９の（Ａ）は、色の振り分け例の条件を示す図である。図１９の（Ａ）に示すように、ＩＯ[Ａｄ]がプラス（＋）であり、ＰＯＷ[Ａｄ]がＷＧ_ＬＩＮＥよりも大きい場合には、奇数個の灰色（Ｇ）となる。例えば、図１４の（Ｂ）に示すアドレス「Ａｄ」が「１８」の場合、ＩＯ[１８]がプラス（＋）であり、ＰＯＷ[１８]が「５０」であり、ＷＧ_ＬＩＮＥ（＝４１）よりも大きくなり、図１９の（Ｂ）のテーブルＴＢ６に示すように「奇数灰色（ＯＧ）」となる。また、図１９の（Ａ）に示すように、ＩＯ[Ａｄ]がプラス（＋）であり、ＰＯＷ[Ａｄ]がＷＧ_ＬＩＮＥとＧＢ_ＬＩＮＥの間である場合にも、「奇数灰色（ＯＧ）」となる。
【０１０８】
ＩＯ[Ａｄ]がプラス（＋）であり、ＰＯＷ[Ａｄ]がＧＢ_ＬＩＮＥよりも小さい場合には、黒色（Ｂ）となる。例えば、図１４の（Ｂ）に示すアドレス「Ａｄ」が「１」の場合、ＩＯ[１]がプラス（＋）であり、ＰＯＷ[１]が「３１」であり、ＧＢ_ＬＩＮＥ（＝３４）よりも小さくなり、図１９の（Ｂ）のテーブルＴＢ６に示すように「黒色（Ｂ）」となる。
【０１０９】
ＩＯ[Ａｄ]がマイナス（−）であり、ＰＯＷ[Ａｄ]がＷＧ_ＬＩＮＥよりも大きい場合には、白色（Ｗ）となる。例えば、図１４の（Ｂ）に示すアドレス「Ａｄ」が「５」の場合、ＩＯ[５]がマイナス（−）であり、ＰＯＷ[５]が「４５」であり、ＷＧ_ＬＩＮＥ（＝４１）よりも大きくなり、図１９の（Ｂ）のテーブルＴＢ６に示すように「白色（Ｗ）」となる。
【０１１０】
ＩＯ[Ａｄ]がマイナス（−）であり、ＰＯＷ[Ａｄ]がＷＧ_ＬＩＮＥとＧＢ_ＬＩＮＥの間である場合には、奇数個の灰色（Ｇ）となる。例えば、図１４の（Ｂ）に示すアドレス「Ａｄ」が「２」の場合、ＩＯ[２]がマイナス（−）であり、ＰＯＷ[２]が「３５」であり、ＰＯＷ[２]の値「３５」が、ＷＧ_ＬＩＮＥ（＝４１）とＧＢ_ＬＩＮＥ（＝３４）の間であり、図１９の（Ｂ）のテーブルＴＢ６に示すように「奇数灰色（ＯＧ）」となる。また、ＩＯ[Ａｄ]がマイナス（−）であり、ＰＯＷ[Ａｄ]がＧＢ_ＬＩＮＥよりも小さい場合にも、奇数個の灰色（Ｇ）となる。
【０１１１】
図２０は、変曲点間の色を振り分ける計算を行う処理の一例を示すフローチャートであり、図８のステップＳＴ５の処理内容を詳細に説明するためのものである。図２０に示すステップＳＴ５００で、２値化予測部１５０は、図１４の（Ｂ）に示したテーブルＴＢ４のＢＢＤ[Ａｄ]のアドレス「Ａｄ」に「０」を設定して初期化する。続いてステップＳＴ５０１に移行する。
【０１１２】
ステップＳＴ５０１で、２値化予測部１５０は、変曲点の向きを示すテーブルＴＢ４のＩＯ[Ａｄ]，ＩＯ[Ａｄ−１]を参照する。変曲点の向きを示すＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が等しいか否かを判定する。ＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が等しいと判定した場合、ステップＳＴ５１１に移行する。
【０１１３】
ステップＳＴ５１１で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６における色の振り分けを示すCOLOR[Ad]に、「偶数灰色（ＥＧ）」を設定してステップＳＴ５０９に移行する。
【０１１４】
また、上述のステップＳＴ５０１で、２値化予測部１５０は、ＩＯ[Ａｄ]とＩＯ[Ａｄ−１]が等しくないと判定した場合、ステップＳＴ５０２に移行する。
【０１１５】
ステップＳＴ５０２で、２値化予測部１５０は、変曲点の向きを示すＩＯ[Ａｄ]がプラス（＋）であるか否かを判定する。ＩＯ[Ａｄ]がプラス（＋）であると判定した場合、ステップＳＴ５０３に移行する。
【０１１６】
ステップＳＴ５０３で、２値化予測部１５０は、２値化バーコードデータの信号の強度を示すＰＯＷ[Ａｄ]が黒色と灰色の境界線の値（ＧＢ_ＬＩＮＥ）より小さいか否かを判定する。ＰＯＷ[Ａｄ]がＧＢ_ＬＩＮＥより小さいと判定した場合、ステップＳＴ５０４に移行する。
【０１１７】
ステップＳＴ５０４で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６における色の振り分けを示すCOLOR[Ad]に、「黒色（Ｂ）」を設定してステップＳＴ５０９に移行する。
【０１１８】
上述のステップＳＴ５０３で、２値化予測部１５０は、２値化バーコードデータの信号の強度を示すＰＯＷ[Ａｄ]がＧＢ_ＬＩＮＥ以上と判定した場合、ステップＳＴ５０５に移行する。
【０１１９】
ステップＳＴ５０５で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６における色の振り分けを示すCOLOR[Ad]に、「奇数灰色（ＯＧ）」を設定してステップＳＴ５０９に移行する。
【０１２０】
上述のステップＳＴ５０２で、２値化予測部１５０は、変曲点の向きを示すＩＯ[Ａｄ]がプラス（＋）でないと判定した場合、ステップＳＴ５０６に移行する。
【０１２１】
ステップＳＴ５０６で、２値化予測部１５０は、２値化バーコードデータの信号の強度を示すＰＯＷ[Ａｄ]が白色と灰色の境界線の値（ＷＧ_ＬＩＮＥ）より大きいか否かを判定する。ＰＯＷ[Ａｄ]がＷＧ_ＬＩＮＥより大きいと判定した場合、ステップＳＴ５０７に移行する。
【０１２２】
ステップＳＴ５０７で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６における色の振り分けを示すCOLOR[Ad]に、「白色（Ｗ）」を設定してステップＳＴ５０９に移行する。
【０１２３】
上述のステップＳＴ５０６で、２値化予測部１５０は、２値化バーコードデータの信号の強度を示すＰＯＷ[Ａｄ]がＷＧ_ＬＩＮＥ以下と判定した場合、ステップＳＴ５０８に移行する。
【０１２４】
ステップＳＴ５０８で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６における色の振り分けを示すCOLOR[Ad]に、「奇数灰色（ＯＧ）」を設定してステップＳＴ５０９に移行する。
【０１２５】
ステップＳＴ５０９で、２値化予測部１５０は、図１４の（Ｂ）に示したテーブルＴＢ４のＢＢＤのアドレス「Ａｄ」を現在のアドレスから次のアドレスに変更してステップＳＴ５１０に移行する。
【０１２６】
ステップＳＴ５１０で、２値化予測部１５０は、図１４の（Ｂ）に示したテーブルＴＢ４における次のアドレスのＢＢＤが存在するか否かを判定する。次のアドレスのＢＢＤが存在すると判定した場合、ステップＳＴＳＴ５０１に戻り、次のアドレスのＢＢＤが存在しないと判定した場合、図８に示したフローチャートのステップＳＴ６に移行する。このようにして、変曲点間の色を振り分ける。
【０１２７】
続いて、図８に示したフローチャートのステップＳＴ６の処理について説明する。図８に示すステップＳＴ６で、２値化予測部１５０は、図１４の（Ｂ）のテーブルＴＢ４を参照して、基準最小幅を計算する。
【０１２８】
例えば、変曲点の向きを示すＩＯ[Ａｄ]とＩＯ[Ａｄ−１]の符号が同じ２値化バーコードデータのみを抽出して、これらのデータを「ＢＢＤ_Ａ」と称する。図２１の（Ａ）は、図１４の（Ｂ）のテーブルＴＢ４から抽出したＢＢＤ_Ａを列挙した図であり、ＢＢＤ_Ａは、「１５」，「１４」，「１４」，「１３」，「２３」及び「１２」である。
【０１２９】
ＢＢＤ_Ａは、基準最小幅（１値幅バー）の白色と黒色が偶数個しか存在しないデータなので、複数の最小ＢＢＤ_Ａは、白色と黒色の１値幅バーが１つずつ存在する。従って、複数の最小ＢＢＤ_Ａを平均して１つの最小ＢＢＤ_Ａを求め、平均された最小ＢＢＤ_Ａを半分にすると、基準となる１値幅バーを得ることができる。
【０１３０】
一方で、変曲点の向きを示すＩＯ[Ａｄ]とＩＯ[Ａｄ−１]の符号が異なる２値化バーコードデータのみを抽出して、これらのデータを「ＢＢＤ_Ｂ」と称する。図２１の（Ａ）は、図１４の（Ｂ）のテーブルＴＢ４から抽出したＢＢＤ_Ｂを列挙した図であり、ＢＢＤ_Ｂは、「１３」や「７」などである。
【０１３１】
ＢＢＤ_Ｂは、１値幅バーや多値幅バーなどの様々なバーが存在する。最小ＢＢＤ_Ｂは、白色又は黒色の１値幅バーが１つ存在する。従って、複数の最小ＢＢＤ_Ｂを平均して、基準となる１値幅バーを得ることができる。
【０１３２】
図２１の（Ａ）に示すＢＢＤ_Ａによると、最も細いＢＢＤ_Ａは１値幅バーが２本であり、次に細いＢＢＤ_Ａは１値幅バーが４本なので２倍の太さを持つ。従って、最小ＢＢＤ_Ａを求める場合、ＢＢＤ_Ａのデータの中から、最小幅のＢＢＤ_Ａを検出する。そして、次に細いＢＢＤ_Ａは２倍以上の太さなので、これを検出しないようにするために、該最小幅のＢＢＤ_Ａを１．５倍した値のデータまでを抽出する。抽出した結果を図２１の（Ｂ）のＢＢＤ_Ａに示す。図２１の（Ｂ）によれば、ＢＢＤ_Ａの値は、「１５」，「１４」，「１４」，「１３」及び「１２」になる。
【０１３３】
また、図２１の（Ａ）に示すＢＢＤ_Ｂによると、最も細いＢＢＤ_Ｂは１値幅バーが１本であり、次に細いＢＢＤ_Ｂは１値幅バーの集合か、又は多値幅バーであるので２倍以上の太さを持つ。従って、最小ＢＢＤ_Ｂを求める場合、図２１の（Ａ）のＢＢＤ_Ｂにおけるデータの中から、最小幅のＢＢＤ_Ｂを検出する。そして、次に細いＢＢＤ_Ｂは２倍以上の太さなので、これを検出しないようにするために、該最小幅のＢＢＤ_Ｂを１．５倍した値のデータまでを抽出する。抽出した結果を図２１の（Ｂ）のＢＢＤ_Ｂに示す。図２１の（Ｂ）によれば、ＢＢＤ_Ｂの値は、「７」，「７」及び「８」になる。
【０１３４】
図２１の（Ｂ）に示すＢＢＤ_ＡとＢＢＤ_Ｂを用いて、基準となる最小幅を求める。例えば、ＢＢＤ_Ａの平均値は「１３．６」となり、２本分の１値幅バーが含まれている。従って、この値の半分の値「６．８」が基準最小幅（BBD_ref_A）となる。ＢＢＤ_Ｂの平均値は「７．３」となり、１本分の１値幅バーが含まれている。従って、この値「７．３」が基準最小幅（BBD_ref_B）となる。
【０１３５】
仮に、ＢＢＤ_Ａの最小幅が２本分の１値幅バーではなくて４本分の１値幅バーが含まれ、ＢＢＤ_Ｂの最小幅が１本分の１値幅バーの場合、BBD_ref_AはBBD_ref_Bの略２倍の値となる。この場合、BBD_ref_A＞BBD_ref_B×１．５の条件を満たすときには、基準最小幅には、BBD_ref_Bを使用する。
【０１３６】
逆に、ＢＢＤ_Ａの最小幅が２本分の１値幅バーが含まれ、ＢＢＤ_Ｂの最小幅が２値幅バーの場合、BBD_ref_BはBBD_ref_Aの略２倍の値となる。この場合、BBD_ref_B＞BBD_ref_A×１．５の条件を満たすときには、基準最小幅には、BBD_ref_Aを使用する。
【０１３７】
ＢＢＤ_Ａの最小幅が２本分の１値幅バーが含まれ、ＢＢＤ_Ｂの最小幅が１本分の１値幅バーの場合はどちらの値も有効だが、白色と黒色の太さが違う場合にはBBD_ref_Bの信頼性が低くなる。このため、BBD_ref_Aを使用する。従って、BBD_ref_A＞BBD_ref_B×１．５を満たす場合のみBBD_ref_Bを基準とする最小幅とし、それ以外ではBBD_ref_Aを基準とする最小幅とする。この例では、BBD_ref_A＞BBD_ref_B×１．５を満たさないので、基準となる最小幅は、BBD_ref_Aの「６．８」となる。
【０１３８】
図２２は、基準最小幅の計算を行う処理の一例を示すフローチャートであり、図８のステップＳＴ６の処理内容を詳細に説明するためのものである。図２２に示すステップＳＴ６００で、２値化予測部１５０は、図１４の（Ｂ）に示したテーブルＴＢ４において、変曲点の向きを示すＩＯ[Ａｄ]とＩＯ[Ａｄ−１]の符号が等しい２値化バーコードデータ（ＢＢＤ_Ａ）のみを検出してステップＳＴ６０１に移行する。
【０１３９】
ステップＳＴ６０１で、２値化予測部１５０は、ＩＯ[Ａｄ]とＩＯ[Ａｄ−１]の符号が等しい２値化バーコードデータ（ＢＢＤ_Ａ）が存在するか否かを判定する。ＢＢＤ_Ａが存在すると判定した場合、ステップＳＴ６０２に移行する。
【０１４０】
ステップＳＴで、２値化予測部１５０は、変曲点の向きを示すＩＯ[Ａｄ]とＩＯ[Ａｄ−１]の符号が異なる２値化バーコードデータ（ＢＢＤ_Ｂ）を検出してステップＳＴ６０３に移行する。
【０１４１】
ステップＳＴ６０３で、２値化予測部１５０は、抽出したＢＢＤ_Ａのデータの中から、最小幅のＢＢＤ_Ａを検出する。例えば、図２１の（Ａ）に示す「ＢＢＤ_Ａ」のデータの中から最小幅の「１２」を検出する。続いてステップＳＴ６０４に移行する。
【０１４２】
ステップＳＴ６０４で、２値化予測部１５０は、最小幅のＢＢＤ_Ａを１．５倍した値（例えば、最小幅１２の１．５倍の１８）のデータまでを抽出する。例えば、図２１の（Ｂ）によれば、ＢＢＤ_Ａの値は、「１５」，「１４」，「１４」，「１３」及び「１２」になる。続いてステップＳＴ６０５に移行する。
【０１４３】
ステップＳＴ６０５で、２値化予測部１５０は、ＢＢＤ_Ａから基準最小幅を算出する。例えば、図２１の（Ｂ）に示すＢＢＤ_Ａの値を平均して最小ＢＢＤ_Ａを求め、平均された最小ＢＢＤ_Ａを半分にして、基準となる１値幅バーを算出する。例えば、図２１の（Ｂ）によれば、基準最小幅（BBD_ref_A）は、「６．８」になる。もちろん、他の方法によりBBD_ref_Aを算出してもよい。例えば、図２１の（Ｂ）に示すＢＢＤ_Ａの中から最大幅を求め、該最大幅のＢＢＤ_ＡとステップＳＴ６０３の最小幅のＢＢＤ_Ａとを平均して求めてもよい。続いてステップＳＴ６０６に移行する。
【０１４４】
ステップＳＴ６０６で、２値化予測部１５０は、上述のステップＳＴ６０２で抽出したＢＢＤ_Ｂのデータの中から、最小幅のＢＢＤ_Ｂを検出する。例えば、図２１の（Ａ）に示す「ＢＢＤ_Ｂ」のデータの中から最小幅の「７」を検出する。続いてステップＳＴ６０７に移行する。
【０１４５】
ステップＳＴ６０７で、２値化予測部１５０は、最小幅のＢＢＤ_Ｂを１．５倍した値（例えば、最小幅７の１．５倍の１０．５）のデータまでを抽出する。例えば、図２１の（Ｂ）によれば、ＢＢＤ_Ｂの値は、「７」，「７」及び「８」になる。続いてステップＳＴ６０８に移行する。
【０１４６】
ステップＳＴ６０８で、２値化予測部１５０は、ＢＢＤ_Ｂから基準最小幅を算出する。例えば、図２１の（Ｂ）に示すＢＢＤ_Ｂの値を平均して最小ＢＢＤ_Ｂを求めて、基準となる１値幅バーを算出する。例えば、図２１の（Ｂ）によれば、基準最小幅（BBD_ref_B）は、「７．３」になる。もちろん、他の方法によりBBD_ref_Bを算出してもよい。例えば、図２１の（Ｂ）に示すＢＢＤ_Ｂの中から最大幅を求め、該最大幅のＢＢＤ_ＢとステップＳＴ６０６の最小幅のＢＢＤ_Ｂとを平均して求めてもよい。続いてステップＳＴ６０９に移行する。
【０１４７】
ステップＳＴ６０９で、２値化予測部１５０は、BBD_ref_A＞BBD_ref_B×１．５の条件を満たすか否かを判定する。BBD_ref_A＞BBD_ref_B×１．５の条件を満たすときには、ステップＳＴ６１０に移行する。
【０１４８】
ステップＳＴ６１０で、２値化予測部１５０は、基準最小幅には、BBD_ref_Bを設定する。また、上述のステップＳＴ６０９で、２値化予測部１５０は、BBD_ref_A＞BBD_ref_B×１．５の条件を満たさないときには、ステップＳＴ６１１に移行する。ステップＳＴ６１１で、２値化予測部１５０は、基準最小幅には、BBD_ref_Aを設定する。
【０１４９】
上述のステップＳＴ６０１で、２値化予測部１５０は、ＩＯ[Ａｄ]とＩＯ[Ａｄ−１]の符号が等しい２値化バーコードデータ（ＢＢＤ_Ａ）が存在しないと判定した場合、ステップＳＴ６１２に移行する。
【０１５０】
ステップＳＴ６１２で、２値化予測部１５０は、全ての２値化バーコードデータ（ＢＢＤ）の中から、最小幅のＢＢＤを検出してステップＳＴ６１３に移行する。
【０１５１】
ステップＳＴ６１３で、２値化予測部１５０は、最小幅のＢＢＤを１．５倍した値のデータまでを抽出してステップＳＴ６１４に移行する。
【０１５２】
ステップＳＴ６１４で、２値化予測部１５０は、ステップＳＴ６１３で抽出したＢＢＤから基準最小幅を算出する。例えば、抽出したＢＢＤの中から最大幅を求め、該最大幅のＢＢＤとステップＳＴ６１２の最小幅のＢＢＤとを平均して、基準最小幅（BBD_ref）を算出する。続いてステップＳＴ６１５に移行する。ステップＳＴ６１５で、２値化予測部１５０は、基準最小幅には、BBD_refを設定して図８に示したフローチャートのステップＳＴ７に移行する。このようにして、基準最小幅の計算を行う。
【０１５３】
続いて、図８に示したフローチャートのステップＳＴ７の処理について説明する。図８に示すステップＳＴ７で、２値化予測部１５０は、灰色のバーの分割処理を行う。例えば、図１９の（Ｂ）に示したテーブルＴＢ６を参照して、灰色のバーの分割処理を行う。このテーブルＴＢ６の色の振り分けを示すCOLOR[Ad]が「白色（Ｗ）」及び「黒色（Ｂ）」の場合には分割しない。COLOR[Ad]が「偶数灰色（ＥＧ）」の場合には、偶数個になるように分割する。COLOR[Ad]が「奇数灰色（ＯＧ）」の場合には、奇数個になるように分割する。
【０１５４】
図２３の（Ａ）は、灰色を示すＢＢＤ[Ａｄ］を奇数に分割する例を示す図である。図２３の（Ａ）に示す分割数Div_n[Ad]は、２値化バーコードデータＢＢＤ[Ａｄ]を基準最小幅BBD_refで除算して求める。例えば、図１９の（Ｂ）のテーブルＴＢ６のＢＢＤ[２]の「７」を、基準最小幅BBD_ref（＝６．８）で除算すると、図２３の（Ａ）の「０〜２」に該当するので、分割数Div_n[Ad]は、図２４の（Ａ）に示すように「１」となる。
【０１５５】
図２３の（Ｂ）は、灰色を示すＢＢＤ[Ａｄ］を偶数に分割する例を示す図である。図２３の（Ｂ）に示す分割数Div_n[Ad]は、２値化バーコードデータＢＢＤ[Ａｄ]を基準最小幅BBD_refで除算して求める。例えば、図１９の（Ｂ）のテーブルＴＢ６のＢＢＤ[０]の「１５」を、基準最小幅BBD_ref（＝６．８）で除算すると、図２３の（Ｂ）の「０〜３」に該当するので、分割数Div_n[Ad]は、図２４の（Ａ）に示すように「２」となる。図２４の（Ａ）は、灰色バーの分割例を示すテーブルＴＢ７の一例を示す図である。図２４の（Ａ）のテーブルＴＢ７に示すように、COLOR[Ad]が「偶数灰色（ＥＧ）」又は「奇数灰色（ＯＧ）」を示すＢＢＤ[Ａｄ]の分割数Div_n[Ad]を求める。
【０１５６】
図２４の（Ｂ）は、分割した２値化バーコードデータＦ_ＢＢＤを示すテーブルＴＢ８である。図２４の（Ｂ）に示すテーブルＴＢ８のＦ_ＢＢＤは、２値化バーコードデータＢＢＤ[Ａｄ]を分割数Div_n[Ad]で除算して求める。例えば、テーブルＴＢ８のＢＢＤ[０]の「１５」を分割数Div_n[２]で除算して、Ｆ_ＢＢＤの値「７．５」を求める。同様にして、COLOR[Ad]が「偶数灰色（ＥＧ）」又は「奇数灰色（ＯＧ）」を示すＢＢＤ[Ａｄ]のＦ_ＢＢＤを求める。
【０１５７】
図２５は、分割した２値化バーコードデータＦ_ＢＢＤの最小分解能を「１」に正規化したテーブルＴＢ９である。図２５に示すテーブルＴＢ９によると、「reference」には１値幅バーを示す「１．０」又は多値幅バーを示す「２．５」が設定されて、バーコードが再現されている。
【０１５８】
図２６は、灰色のバーの分割処理を実施するフローチャートであり、図８のステップＳＴ７の処理内容を詳細に説明するためのものである。図２６に示すステップＳＴ７００で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６のアドレス「Ａｄ」に「０」を設定して初期化する。続いてステップＳＴ７０１に移行する。
【０１５９】
ステップＳＴ７０１で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６を参照して、色の振り分けを示すCOLOR[Ad]が白色（Ｗ）であるか否かを判定する。COLOR[Ad]が白色（Ｗ）でないと判定した場合、ステップＳＴ７０２に移行する。
【０１６０】
ステップＳＴ７０２で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６を参照して、色の振り分けを示すCOLOR[Ad]が黒色（Ｂ）であるか否かを判定する。COLOR[Ad]が黒色（Ｂ）でないと判定した場合、ステップＳＴ７０３に移行する。
【０１６１】
ステップＳＴ７０３で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６を参照して、色の振り分けを示すCOLOR[Ad]が偶数の灰色（ＥＧ）であるか否かを判定する。COLOR[Ad]が偶数の灰色（ＥＧ）であると判定した場合、ステップＳＴ７０４に移行する。
【０１６２】
ステップＳＴ７０４で、２値化予測部１５０は、２値化バーコードデータＢＢＤ[Ａｄ]を基準最小幅BBD_refで除算する。例えば、図１９の（Ｂ）のテーブルＴＢ６のＢＢＤ[０]の「１５」を、基準最小幅BBD_ref（＝６．８）で除算してステップＳＴ７０５に移行する。
【０１６３】
ステップＳＴ７０５で、２値化予測部１５０は、２値化バーコードデータＢＢＤ[Ａｄ]を基準最小幅BBD_refで除算した値が、図２３の（Ｂ）のどの範囲に該当するか判定する。例えば、図１９の（Ｂ）のテーブルＴＢ６のＢＢＤ[０]の「１５」を、基準最小幅BBD_ref（＝６．８）で除算した値は、図２３の（Ｂ）の「０〜３」に該当するので、分割数Div_n[Ad]は、図２４の（Ａ）に示すように「２」となる。続いてステップＳＴ７０６に移行する。
【０１６４】
ステップＳＴ７０６で、２値化予測部１５０は、２値化バーコードデータのアドレスを次のアドレスに進めてステップＳＴ７０７に移行する。
【０１６５】
ステップＳＴ７０７で、２値化予測部１５０は、２値化バーコードデータＢＢＤ[Ａｄ]を分割数Div_n[Ad]で除算して、分割された２値化バーコードデータＦ_ＢＢＤ算出する。例えば、図２４の（Ｂ）のテーブルＴＢ８におけるＢＢＤ[０]の「１５」を分割数Div_n[２]で除算して、Ｆ_ＢＢＤの値「７．５」を算出する。続いてステップＳＴ７０８に移行する。
【０１６６】
ステップＳＴ７０８で、２値化予測部１５０は、図１９の（Ｂ）に示したテーブルＴＢ６における次のアドレスのＢＢＤが存在するか否かを判定する。次のアドレスのＢＢＤが存在すると判定した場合、ステップＳＴＳＴ７０１に戻る。
【０１６７】
上述のステップＳＴ７０３で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６を参照して、色の振り分けを示すCOLOR[Ad]が奇数の灰色（ＯＧ）であると判定した場合、ステップＳＴ７０９に移行する。
【０１６８】
ステップＳＴ７０９で、２値化予測部１５０は、２値化バーコードデータＢＢＤ[Ａｄ]を基準最小幅BBD_refで除算する。例えば、図１９の（Ｂ）のテーブルＴＢ６のＢＢＤ[２]の「７」を、基準最小幅BBD_ref（＝６．８）で除算してステップＳＴ７１０に移行する。
【０１６９】
ステップＳＴ７１０で、２値化予測部１５０は、２値化バーコードデータＢＢＤ[Ａｄ]を基準最小幅BBD_refで除算した値が、図２３の（Ａ）のどの範囲に該当するか判定する。例えば、図１９の（Ｂ）のテーブルＴＢ６のＢＢＤ[２]の「７」を、基準最小幅BBD_ref（＝６．８）で除算した値は、図２３の（Ａ）の「０〜２」に該当するので、分割数Div_n[Ad]は、図２４の（Ａ）に示すように「１」となる。続いてステップＳＴ７０６に移行する。
【０１７０】
上述のステップＳＴ７０１，ＳＴ７０２で、２値化予測部１５０は、図１９の（Ｂ）のテーブルＴＢ６を参照して、色の振り分けを示すCOLOR[Ad]が白色（Ｗ）又は黒色（Ｂ）であると判定した場合、ステップＳＴ７１１に移行する。
【０１７１】
ステップＳＴ７１１で、２値化予測部１５０は、２値化バーコードデータＢＢＤを分割しないので、図２４の（Ａ）に示すテーブルＴＢ７の分割数Div_n[Ad]に「１」を設定してステップＳＴ７０６に移行する。
【０１７２】
上述のステップＳＴ７０８で、２値化予測部１５０は、図１９の（Ｂ）に示したテーブルＴＢ６における次のアドレスのＢＢＤが存在しないと判定した場合、図８に示すステップＳＴ８に移行する。
【０１７３】
図８のステップＳＴ８では、デコード処理を行う。例えば、図２５に示したテーブルＴＢ９の「reference」からバーコードで表された情報を復号する。
【０１７４】
このように、第１の実施の形態に係るバーコードスキャナ１００及びバーコード読取方法によれば、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて２値化バーコードデータを、反射光の強度の高い白色、反射光の強度の低い黒色、および白色と黒色の略中間を示す灰色に分類する。そして、灰色が示す２値化バーコードデータを、最小幅の２値化バーコードデータで除算して灰色の２値化バーコードデータを分割してバーコード情報を求める。
【０１７５】
これにより、白色と黒色の略中間を示す灰色の２値化バーコードデータを認識できるようになる。従って、劣化したバーコードの信号波形からバーコードを正しく認識できるようになる。これにより、システムリソースを大幅に増やすことなく、バーコードの読み取り精度を向上できるようになる。
【０１７６】
＜第２の実施の形態＞  
本実施の形態では、二次元コードを読み取るコードスキャナ２００について説明する。前述の第１の実施の形態及び実施例と同じ名称及び符号のものは同じ機能を有するので、その説明を省略する。
【０１７７】
図２７は、第２の実施の形態に係るコードスキャナ２００の構成例を示すブロック図である。図２７に示すように、コードスキャナ２００は、画像取込手段の一例である光学ヘッド部２０１及び輝度ヒストグラム作成部を有する２値化予測部２０４からなる。光学ヘッド部２０１は、レンズ２０２及び固体撮像素子の一例であるＣＭＯＳイメージセンサ（以下、ＣＭＯＳ２０３という）を備える。
【０１７８】
レンズ２０２は、例えば、光学レンズであり、図２８の（Ａ）に示すＰＤＦ４１７や、図２８の（Ｂ）に示すＱＲコード（登録商標）や、図２８（Ｃ）に示すRSS Expanded等の二次元コードの画像データを光学ヘッド部２０１内に取り込む。レンズ２０２にはＣＭＯＳ２０３が設けられる。ＣＭＯＳ２０３は、レンズ２０２が取り入れた画像データを撮像し、該撮像した画像データをアナログの画像データからデジタルの輝度値で表現される画像データに変換して、出力信号として２値化予測部２０４に出力する。
【０１７９】
２値化予測部２０４は、ＣＭＯＳ２０３から出力された出力信号に含まれる画像データの輝度値を縦横のライン毎に測定する。２値化予測部２０４は、ライン毎に測定した輝度値から図２９に示す輝度ヒストグラムを図示しない輝度ヒストグラム作成部で作成する。（図２９は、縦軸を輝度値とし、横軸を位置ｘとしたときの輝度ヒストグラム例を示す図である。）
【０１８０】
２値化予測部２０４は、輝度ヒストグラム作成部で作成された輝度ヒストグラムから二次元コードの変曲点Ｉ１，Ｉ２，Ｉ３を検出して、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて２値化コードデータを、輝度値の高い白色、輝度値の低い黒色及び白色と黒色の略中間を示す灰色に分類する。そして、灰色が示す２値化コードデータを、最小幅の２値化コードデータで除算して灰色の２値化コードデータを分割して画像データの２値化信号を求める。
【０１８１】
２値化予測部２０４は、上述の処理を縦横のライン毎で行うことによって、二次元コードに対する２値化信号を求める。この２値化信号は、後段の不図示の復号化回路によりデコードされて二次元コードのコード記号として読み取られる。
【０１８２】
２値化予測部２０４の詳細な構成については、図２で説明した２値化予測部１５０の微分処理部１５３の代わりに輝度ヒストグラム作成部を設け、その他は２値化予測部１５０と同じであるので、その説明を省略する。
【０１８３】
このように、第２の実施の形態に係るコードスキャナ２００によれば、二次元コードを含む画像を取り込んで、この画像をデジタルの輝度値で表現される画像データに変換し、該変換した画像データの輝度値を縦横のライン毎で測定して輝度ヒストグラムを作成する。作成した輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す２値化コード記号データと該変曲点の変化量を求め、変曲点間の信号の強度を示すレベル情報を求める。この求めたレベル情報に基づいて２値化コード記号データを、輝度値の高い白色、輝度値の低い黒色及び白色と黒色の略中間を示す灰色に分類する。そして、灰色の情報が示す２値化コード記号データを、最小幅の２値化コード記号データで除算して該灰色の情報の２値化コード記号データを分割してコード記号情報を求める。
【０１８４】
これにより、二次元コードの信号波形が劣化していても、二次元コードを正しく認識できるようになる。この結果、システムリソースを大幅に増やすことなく、二次元コードの読み取り精度を向上できるようになる。
【産業上の利用可能性】
【０１８５】
本発明は、バーコードや二次元コードに向けて照射した光の反射光を受光してコード情報を読み取るコードスキャナに適用して極めて好適である。
【符号の説明】
【０１８６】
１００・・・バーコードスキャナ、１５０，２０４・・・２値化予測部、１５３・・・微分処理部、１５６・・・ＢＢＤ計算部（２値化コード記号データ計算部）、１５９・・・ＣＰＵ（演算部）、２００・・・コードスキャナ
【図１】
2010090159.tif 000003
【図２】
2010090159.tif 000004
【図３】
2010090159.tif 000005
【図４】
2010090159.tif 000006
【図５】
2010090159.tif 000007
【図６】
2010090159.tif 000008
【図７】
2010090159.tif 000009
【図８】
2010090159.tif 000010
【図９】
2010090159.tif 000011
【図１０】
2010090159.tif 000012
【図１１】
2010090159.tif 000013
【図１２】
2010090159.tif 000014
【図１３】
2010090159.tif 000015
【図１４】
2010090159.tif 000016
【図１５】
2010090159.tif 000017
【図１６】
2010090159.tif 000018
【図１７】
2010090159.tif 000019
【図１８】
2010090159.tif 000020
【図１９】
2010090159.tif 000021
【図２０】
2010090159.tif 000022
【図２１】
2010090159.tif 000023
【図２２】
2010090159.tif 000024
【図２３】
2010090159.tif 000025
【図２４】
2010090159.tif 000026
【図２５】
2010090159.tif 000027
【図２６】
2010090159.tif 000028
【図２７】
2010090159.tif 000029
【図２８】
2010090159.tif 000030
【図２９】
2010090159.tif 000031
【国際調査報告】
2010090159.tif 000032
2010090159.tif 000033
2010090159.tif 000034
2010090159.tif 000035