(57)【特許請求の範囲】
【請求項１】
スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジの位置情報と極性情報に基づいて前記バーコードが示す情報を読み取るバーコードリーダであって、
前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジの位置情報と極性情報を削除するエッジ削除手段を備え、
前記エッジ削除手段は、連続している２つの同一極性のエッジを検出したら、スキャンの端部に近い側のエッジを前記不要エッジとして、該不要エッジの位置情報と極性情報を削除することを特徴とするバーコードリーダ。
【請求項２】
請求項１に記載のバーコードリーダであって、
前記エッジの極性として、そのエッジに対応する変化開始点の極性を利用することを特徴とするバーコードリーダ。
【請求項３】
請求項１又は２に記載のバーコードリーダであって、
スキャン端部と前記スキャン端部から見て最初の或る極性のエッジとの間に、他のエッジが無い場合には、前記スキャン端部を前記或る極性と反対の極性を有するエッジとする手段を更に備えることを特徴とするバーコードリーダ。
【請求項４】
請求項１乃至３の何れか１に記載のバーコードリーダであって、
前記エッジ削除手段により不要エッジの位置情報と極性情報が削除された後に残った複数のエッジの位置情報に基づいて、各バーの幅データを求め、前記エッジ削除手段により不要エッジの位置情報と極性情報が削除された後に残った前記複数のエッジの極性情報に基づいて、各バーの二値レベルデータを求める手段を更に備えることを特徴とするバーコードリーダ。
【請求項５】
請求項４に記載のバーコードリーダであって、
前記各バーの幅データと前記各バーの二値レベルデータに基づいて、前記バーコードが示す情報をデコードするデコーダを更に備えることを特徴とするバーコードリーダ。
【請求項６】
請求項１乃至５の何れか１に記載のバーコードリーダであって、
前記読取り信号を表す１スキャン分の入力データにそれぞれ対応する１スキャン分の差分データであって、相互に隣接する入力データ間の差分を表す差分データに基づいて、１スキャンに含まれる複数のエッジを検出するエッジ検出手段を更に備えることを特徴とするバーコードリーダ。
【請求項７】
スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジの位置情報と極性情報に基づいて前記バーコードが示す情報を読み取るバーコード読取り方法であって、
前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジの位置情報と極性情報を削除するエッジ削除ステップを有し、
前記エッジ削除ステップでは、連続している２つの同一極性のエッジを検出したら、スキャンの端部に近い側のエッジを前記不要エッジとして、該不要エッジの位置情報と極性情報を削除することを特徴とするバーコード読取り方法。
【請求項８】
スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジの位置情報と極性情報に基づいて前記バーコードが示す情報を読み取るバーコードリーダとしてコンピュータを機能させるためのバーコード読取り用プログラムであって、
前記バーコード読取り用プログラムは、コンピュータを、
前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジの位置情報と極性情報を削除するエッジ削除手段として機能させることを含み、
前記エッジ削除手段は、連続している２つの同一極性のエッジを検出したら、スキャンの端部に近い側のエッジを前記不要エッジとして、該不要エッジの位置情報と極性情報を削除することを特徴とするバーコード読み取り用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バーコードを読み取るためのバーコードリーダ、バーコード読取り方法及びバーコード読取り用プログラムに関する。
【背景技術】
【０００２】
図１は、通常のバーコードリーダの一例のブロック図である。バーコードリーダからバーコードに投光し、バーコードからの反射光を受光して読み取りを行う。具体的には、バーコードの読み取りの仕組みは以下の通りである。投光用ＬＥＤ９０１からバーコード９０３へ投光し、バーコードからの反射光を、受光レンズ９０５を通してＣＣＤ(Charge Coupled Device)センサ９０７に集光させる。集光された反射光をＣＣＤセンサ９０７で光電変換し、それにより得られた反射光の強度を示す読取りアナログ信号の振幅をアナログ増幅器９０９で増幅した後、その増幅されたアナログの信号を所定の方式で二値化して、その二値化により得られるデジタル信号をデコード部９１１に取り込み、そのデコード部９１１によりデコードすることによりバーコードシンボルの形態でエンコードされているデータを得る。
【０００３】
ここで、投光用ＬＥＤ９０１から出射した光のことをスキャン光という。スキャン光をバーコード９０３に照射し、バーコード９０３からの反射光をＣＣＤセンサ９０７などの撮像装置で撮像することをスキャンという。ここで、スキャン光は、バーコード９０３を一端から他端まで時間を追って順にスキャンするものでもよいし、バーコード９０３の一端から他端までを同時にスキャンするものであってもよい。
【０００４】
なお、図１に示す例では、ＣＰＵ(Central Processing Unit)がデコード部９１１及びＧＰＩＯ(General Purpose Input/Output)９１３を含み、ＧＰＩＯ９１３が投光用ＬＥＤ９０１に投光用の信号を与えるようにしている。ここで、デコード部９１１は、ＣＰＵ９１５に内蔵されているハードウェアでもよいし、ＣＰＵ９１５がプログラムを読んで実行することによるソフトウェア的なものであってもよいし、これらを混合したものであってもよい。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−０７６０３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、例えば、バーコード配置対象物の配置面が白色であり、これに配置されたバーコードの明部が灰色であり、バーコードに含まれるバーコードの暗部が黒色である場合があるが、このような場合（すなわち、配置面の反射率のほうがバーコードの明部の反射率よりも高い場合）には、通常のバーコードリーダではバーコードを読み取ることができなかった。
【０００７】
ここで、バーコードは、バーコードシンボルとその両端部にあるクワイエットゾーンを含む。バーコードシンボルは、スタートキャラクタ、データキャラクタ、チェックデジット、ストップキャラクタに対応する白色バーと黒色バーを含む。また、クワイエットゾーンと白色バーが明部を構成し、黒色バーが暗部を構成する。
【０００８】
また、配置とは、貼付、印刷などを含む。
【０００９】
例えば、図２（ａ）は、暗部を構成する黒色バーが黒色であり、明部を構成する下地色が灰色であるようなバーコードを上面から見た場合の一例を示している。図２（ｂ）は、バーコード配置対象物である白色の配置面に、図２（ａ）に示すバーコードを配置して、通常のバーコードリーダにより、これを読み取った際のアナログ読取り信号の波形を示している。通常のバーコードリーダは、最高電位Ａをバーコードの明部の明度に対応する電位であると認識し、また、最低電位Ｂをバーコードの暗部の明度に対応する電位であると認識し、それらの２つの電位Ａ、Ｂの中間電位を閾値として設定する。そして、アナログ読取り信号の電位を閾値と比較して二値化する。従って、図２（ｂ）の配置面の白色に対応する電位Ａと黒色バーの暗部の黒色に対応する電位Ｂの中間電位を閾値としてから、二値化をするため、クワイエットゾーンの一部を黒色バーと認識してしまう。従って、二値化後のデータがバーコードのパターンに対応しないものとなるので正常にバーコードをデコードすることができなかった。
【００１０】
図２は、バーコードのクワイエットゾーンの長さが規定より短い場合を示しているが、クワイエットゾーンの長さが規定を満足している場合も同様であって、正常にバーコードをデコードすることができない。また、図２には、バーコードシンボルの前のクワイエットゾーンのみ記しているが、バーコードシンボルの後ろにもクワイエットゾーンが存在する。
【００１１】
特許文献１には、印刷されたバーコードの明部が灰色であり、そのバーコードの周辺が白色であるような場合でもデコード可能な光学的情報読取装置が開示されている。しかしながら、特許文献１は、マージンとして認識されるべき領域（マージン対応領域）に黒色領域が含まれる誤りを検出し、そのマージン対応領域を復元するように配列データを再構成し、その再構成後の配列データをデコードするという複雑な処理を行わなければならない。
【００１２】
そこで、本発明は、バーコードの周辺の反射率のほうがバーコードの明部の反射率よりも高い場合であっても、簡易な処理で、バーコードをデコードすることが可能なバーコードリーダ、バーコード読取り方法及びバーコード読取り用プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の第１の観点によれば、スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジの位置情報と極性情報に基づいて前記バーコードが示す情報を読み取るバーコードリーダであって、前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジの位置情報と極性情報を削除するエッジ削除手段を備え、前記エッジ削除手段は、連続している２つの同一極性のエッジを検出したら、スキャンの端部に近い側のエッジを前記不要エッジとして、該不要エッジの位置情報と極性情報を削除することを特徴とするバーコードリーダが提供される。
【００１４】
本発明の第２の観点によれば、スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジの位置情報と極性情報に基づいて前記バーコードが示す情報を読み取るバーコード読取り方法であって、前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジの位置情報と極性情報を削除するエッジ削除ステップを有し、前記エッジ削除ステップでは、連続している２つの同一極性のエッジを検出したら、スキャンの端部に近い側のエッジを前記不要エッジとして、該不要エッジの位置情報と極性情報を削除することを特徴とするバーコード読取り方法が提供される。
【００１５】
本発明の第３の観点によれば、スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジの位置情報と極性情報に基づいて前記バーコードが示す情報を読み取るバーコードリーダとしてコンピュータを機能させるためのバーコード読取り用プログラムであって、前記バーコード読取り用プログラムは、コンピュータを、前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジの位置情報と極性情報を削除するエッジ削除手段として機能させることを含み、前記エッジ削除手段は、連続している２つの同一極性のエッジを検出したら、スキャンの端部に近い側のエッジを前記不要エッジとして、該不要エッジの位置情報と極性情報を削除することを特徴とするバーコード読み取り用プログラムが提供される。
【発明の効果】
【００１６】
本発明によれば、バーコードの周辺の反射率のほうがバーコードの明部の反射率よりも高い場合であっても、簡易な処理で、バーコードをデコードすることが可能となる。
【図面の簡単な説明】
【００１７】
【図１】通常のバーコードリーダの構成を示す概念図である。
【図２】（ａ）は、暗部を構成する黒色バーが黒色であり、明部を構成する下地色が灰色であるようなバーコードを上面から見た場合の一例を示す。（ｂ）は、バーコード配置対象物である白色の配置面に、（ａ）に示すバーコードを配置して、通常のバーコードリーダにより、これを読み取った際のアナログ読取り信号の波形を示す。
【図３】本発明の実施形態によるバーコードリーダの構成を示す概念図である。
【図４】図３に示すメモリの領域群を示す図である。
【図５】本発明の実施形態による前処理部で行う処理のフローを示すフローチャートである。
【図６】図５のフローの変化開始点検索処理の詳細なフローを示すフローチャートである。
【図７】図５のフローの変化終了点検索処理の詳細なフローを示すフローチャートである。
【図８】本発明の実施形態によるバーコードの黒色バー、白色バーが交互に連続する部分の読取りアナログ信号波形及びそれからバーコードを読み取るためのバーコード読取り方法を説明するための波形図である。
【図９】本発明の実施形態によるバーコードのクワイエットゾーン及びその隣接部の信号波形及びそれからバーコードを読み取るためのバーコード読取り方法を説明するための波形図である。
【図１０】図５に示す工程の一部とそれに追加した工程を示すフローチャートである。
【発明を実施するための形態】
【００１８】
以下、図面を参照して本発明を実施するための形態について詳細に説明する。
【００１９】
本実施形態では、バーコードに投光し、受光データをＡ／Ｄ変換した後に、以下の前処理を行うことによって、上記課題を解決する。
【００２０】
（１）サンプルされた隣接データ間の差分を計算する。
【００２１】
（２）上記（１）で得た差分とその差分の±符号から、「立ち上がり」変化開始点、「立ち下がり」変化開始点、及び、変化終了点を検索して決定する。
【００２２】
（３）「立ち上がり」変化開始点が連続する場合（つまり、２つの「立ち上がり」変化開始点の間に「立ち下がり」変化開始点が無い場合）、前の「立ち上がり」変化開始点を削除し、「立ち下がり」変化開始点が連続する場合（つまり、２つの「立ち下がり」変化開始点の間に「立ち上がり」変化開始点が無い場合）、前の「立ち下がり」変化開始点を削除する。
【００２３】
（４）変化開始点が、「立ち上がり」変化開始点であるか、「立ち下がり」変化開始点であるかのデータに基づいて、その変化開始点から白色バーが始まるのか、黒色バーが始まるのかを決定する。また、「立ち上がり」変化開始点とそれに続く変化終了点の中点を求め、「立ち下がり」変化開始点とそれに続く変化終了点の中点を求める。「立ち上がり」変化開始点に対応する中点と、「立ち下がり」変化開始点に対応する中点との距離に基づいて、バー幅を決定する。
【００２４】
図３は、本実施形態によるバーコードリーダの概念図である。
【００２５】
図３に示す投光用ＬＥＤ１０１、バーコード１０３、受光レンズ１０５、ＣＣＤ１０７、アナログ増幅器１０９、ＧＰＩＯ１１３は、それぞれ、図１に示す投光用ＬＥＤ９０１、バーコード９０３、受光レンズ９０５、ＣＣＤ９０７、アナログ増幅器９０９、ＧＰＩＯ９１３と同様なものであるので、これらについての重複する説明は省略する。
【００２６】
本実施形態によるバーコードリーダが、通常のバーコードリーダと異なる点は、以下の点である。すなわち、アナログ増幅器１０９とデコード部１１１との間に、Ａ／Ｄ変換部１２１、メモリ１２３、前処理部１２５が追加されている点である。また、デコード部１１１がデコード部９１１と同様なものでないことである。
【００２７】
Ａ／Ｄ変換部１２１は、ＣＣＤセンサ１０７から出力され、アナログ増幅器１０９で増幅された読取りアナログ信号をデジタル信号である入力データに変換する。より詳細には、Ａ／Ｄ変換部(Analog-to-Digital Converter)１２１は、アナログ増幅器１０９から入力した読取りアナログ信号を所定のサンプリングレート及び所定のビット数のデジタル信号に変換するが、このデジタル信号の各サンプルが各入力データである。
【００２８】
メモリ１２３は、Ａ／Ｄ変換部１２１でＡ／Ｄ変換された各入力データを１スキャン分まとめて格納する。
【００２９】
前処理部１２５は、所定の処理（後述する）を行って、各バーが黒色バーであるのか各白色バーであるのかを示すデータと、各バーの幅を示すデータを生成する。これらのデータがデコード部１１１に供給される。
【００３０】
なお、図３では、ＣＰＵ１１５は、Ａ／Ｄ変換部１２１、メモリ１２３、前処理部１２５、デコード部１１１を内蔵している。Ａ／Ｄ変換部１２１、前処理部１２５、デコード部１１１は、それぞれ、ＣＰＵ１１５に内蔵されているハードウェアでもよいし、ＣＰＵ１１５がプログラムを読んで実行することによるソフトウェア的なものであってもよいし、これらを混合したものであってもよい。
【００３１】
また、Ａ／Ｄ変換部１２１、メモリ１２３、前処理部１２５、デコード部１１１の一部又は全部を、ＣＰＵ１１５内部ではなく、ＣＰＵの外部に配置して、ＣＰＵ１１５がこれらを制御するようにしてもよい。
【００３２】
図５は、前処理部１２５で行う処理のフローを示すフローチャートであり、図６は、図５のフローの変化開始点検索処理の詳細なフローを示すフローチャートであり、図７は、図５のフローの変化終了点検索処理の詳細なフローを示すフローチャートである。図８は、バーコードの黒色バー、白色バーが交互に連続する部分の読取りアナログ信号波形等を示す波形図であり、図９は、バーコードのクワイエットゾーン及びその隣接部の読取りアナログ信号波形等を示す波形図である。
【００３３】
次に、図５、図６、及び図７を参照して、前処理部１２５で行う処理について説明する。
【００３４】
バーコードへ投光して反射光を受光（バーコードをスキャン）し、受光強度を示すアナログ読取り信号をＡ／Ｄ変換することにより得られる１スキャン分の入力データがメモリ１２３の入力データ用領域１２３−１（図４）に格納されると、以下の処理を行う。
【００３５】
（１）相互に隣接するデータ間（つまり、相互に隣接するサンプルデータ間）の差分を計算する（ＳＴＥＰ１）。より詳細に説明すると、メモリ１２３の入力データ用領域１２３−１に格納されている１スキャン分のすべての入力データについて、それに隣接する入力データとの差分を計算する。つまり、メモリ１２３の入力データ用領域１２３−１に含まれるｎ番地に格納されている入力データと（ｎ＋１）番地に格納されている入力データとの差分である差分データを計算し、その差分データを、メモリ１２３の差分データ用領域１２３−２に含まれるｎ番地に格納する。
【００３６】
（２）全ての変化開始点を検索して決定する（ＳＴＥＰ２、ＳＴＥＰ３）。
【００３７】
（２−１）変化開始点があるか検索する（ＳＴＥＰ２０１）。より詳細に説明すると、自入力データと直前の入力データとの差分データ（直前の入力データに対応してメモリ１２３の差分データ用領域１２３−２に格納されている差分データ）の値の絶対値が所定値未満であり、且つ、自入力データと直後の入力データとの差分（自入力データに対応してメモリ１２３の差分データ用領域１２３−２に格納されている差分データ）の値の絶対値が所定値以上である場合には、その自入力データのある番地を変化開始点に対応した変化開始点メモリ番地とする。
【００３８】
（２−２）変化開始点に対応した変化開始点メモリ番地をメモリ１２３の変化開始点メモリ番地用領域１２３−３に格納する（ＳＴＥＰ２０２）。
【００３９】
（２−３）差分データ用領域１２３−２の変化開始点メモリ番地に格納されている差分データが示す差分の±符号を確認する（ＳＴＥＰ２０３）。
【００４０】
（２−４）差分の±符号がプラスであれば、変化開始点は、「立ち上がり」の変化開始点であると判断し（ＳＴＥＰ２０４）、差分データの符号がマイナスであれば、変化開始点は、「立ち下がり」の変化開始点であると判断する（ＳＴＥＰ２０５）。
【００４１】
（２−５）変化開始点が、「立ち上がり」の変化開始点であるか、「立ち下がり」の変化開始点であるかを示す符号データをメモリ１２３の符号データ用領域１２３−４に格納する。例えば、変化開始点が、「立ち上がり」の変化開始点であるか、「立ち下がり」の変化開始点であるかを示す符号データを、メモリ１２３の変化開始点用領域に格納されている変化開始メモリ番地に関連づけられるように符号データ用領域１２３−４に格納する（ＳＴＥＰ２０６）。
【００４２】
（３）削除すべき変化開始点があるかを確認する（ＳＴＥＰ４）。より詳細に説明すると、連続する「立ち上がり」の変化開始点があるか否かと、連続する「立ち下がり」の変化開始点があるか否かを確認する。具体的には、変化開始点メモリ番地用領域１２３−３に格納されている変化開始点メモリ番地と、それに関連づけられて符号データ用領域１２３−４に格納されている符号データを見て、それらの変化開始点メモリ番地のうちの２つの連続する変化開始点メモリ番地に対応する符号データがプラス符号を示しているか否かをみる。そして、そうならば、２つの連続する変化開始点メモリ番地のうち大きい方の変化開始点メモリ番地とそれに対応する符号データ（実際にはプラス符号を示している。）を削除すべき変化開始点に係るものとする。これは、スキャン末端点付近にあるクワイエットゾーンとそれに後続する周辺白色部との明度差により生ずる不要立ち上がりエッジを削除する処理である。更に、同様に、変化開始点メモリ番地用領域１２３−３に格納されている変化開始点メモリ番地と、それに関連づけられて符号データ用領域１２３−４に格納されている符号データを見て、それらの変化開始点メモリ番地のうちの２つの連続する変化開始点メモリ番地に対応する符号データがマイナス符号を示しているか否かをみる。そして、そうならば、２つの連続する変化開始点メモリ番地のうち小さい方の変化開始点メモリ番地とそれに対応する符号データ（実際にはマイナス符号を示している。）を削除すべき変化開始点に係るものとする。これは、スキャン開始点付近にあるクワイエットゾーンとそれに先行する周辺白色部との明度差により生ずる不要立ち下がりエッジを削除する処理である。
【００４３】
（４）削除すべき変化開始点に係るデータを削除する（ＳＴＥＰ５）。具体的には、削除すべきものと判断された変化開始点メモリ番地とそれらに関連づけられている符号データとを、それぞれ、変化開始点メモリ番地用領域１２３−３と符号データ用領域１２３−４から削除する。
【００４４】
例えば、「立ち上がり」の変化開始点に対応する変化開始点メモリ番地の数値が変化開始点メモリ番地領域１２３−３において２つ連続している場合は、後の変化開始点メモリ番地とそれに対応する符号データを削除し、前の変化開始点メモリ番地とそれに対応する符号データを残す。同様に、「立ち下がり」の変化開始点に対応する変化開始点メモリ番地の数値が変化開始点メモリ番地領域１２３−３において２つ連続している場合は、前の変化開始点メモリ番地とそれに対応する符号データを削除し、後の変化開始点メモリ番地とそれに対応する符号データを残す。
【００４５】
（５）上記の（４）での削除の後に残った全ての変化開始点にそれぞれ対応する複数の変化終了点を検索して決定する（ＳＴＥＰ６、ＳＴＥＰ７）。
【００４６】
（５−１）自入力データと直前の入力データとの差分データ（直前の入力データに対応して差分データ用領域１２３−２に格納されている差分データ）の値の絶対値が所定値以上であり、且つ、自入力データと直後の入力データとの差分（自入力データに対応して差分データ用領域１２３−２に格納されている差分データ）の値の絶対値が所定値未満である場合には、その自入力データのあるメモリ番地を変化終了点に対応した変化終了点メモリ番地とする（ＳＴＥＰ６０１）。変化終了点を検索する際の閾値としての所定値は、変化開始点を検索する際の所定値と同じであってもよいし、別に定めてもよい。それぞれの変化開始点の位置から最初に見つかった変化終了点が、その変化開始点に対応する変化終了点である。従って、それぞれの変化開始点に対して１つの変化終了点を見つければよく、従って、後で、一部の変化終了点を削除するような処理は不要である。
【００４７】
（５−２）変化終了点メモリ番地を、変化終了点メモリ番地用領域１２３−５に、対応する変化開始点メモリ番地と関連づけて、格納する（ＳＴＥＰ６０２）
（６）変化開始点と変化終了点間との間の中点を決定する（ＳＴＥＰ８）。具体的には、変化開始点に対応する変化開始点メモリ番地とそれに続く（それに対応する）変化終了点メモリ番地との平均値に最も近いメモリ番地を、中点に対応する中点メモリ番地とする。そして、中点メモリ番地を中点メモリ番地用領域１２３−６に格納する。
【００４８】
従って、削除した変化開始点に対応する変化終了点及び中点は得られない。変化開始点、変化終了点及び中点が１つのエッジに対応する一組の点であると扱うことができ、従って、変化開始点を削除することは、それに対応するエッジを発生させないことと同じである。変化開始点の削除をしないまま、変化終了点及び中点を得て、それから、変化開始点、変化終了点及び中点を削除しても同じ結果が得られる。この場合は、この削除はエッジの削除であるということができる。なお、エッジとは、立ち上がりエッジと立ち下がりエッジの総称である。
【００４９】
（７）中点間のバー幅を算出する（ＳＴＥＰ９）。
【００５０】
バー幅の算出では、相互に隣接する２つの中点にそれぞれ対応する２つの中点メモリ番地の差に所定係数を掛けて得られた数値をバー幅とする。受光強度を示す入力データは、所定間隔でＡ／Ｄ変換されてから、メモリ１２３の入力データ用領域１２３−１の連続するメモリ番地に格納されている。従って、前述したように、相互に隣接する２つの中点にそれぞれ対応する２つの中点メモリ番地の差に基づいてバー幅を算出することができる。
【００５１】
（８）バー幅データ及びバー二値レベルデータを格納する（ＳＴＥＰ１０）。
【００５２】
一方では、「立ち上がり」の変化開始点から開始し、変化終了点と、「立ち下がり」の変化開始点とを経て、変化終了点で終了する区間は、白色バーの区間であると判断する。他方では、「立ち下がり」の変化開始点から開始し、変化終了点と、「立ち上がり」の変化開始点とを経て、変化終了点で終了する区間は、黒色バーの区間であると判断する。そこで、各区間が白色バーに対応するのか、黒色バーに対応するのかを示すバー二値レベルデータを、バー幅データとを、相互に関連づけて、それぞれ、バー二値レベルデータ用領域１２３−７とバー幅データ用領域１２３−８に格納する。バー二値レベルデータとバー幅データは、それらの領域において、バーの出現順序の共通のアドレスに格納されれば、そのアドレスをデコード用に利用することができる。また、バーの出現順序を、バー二値レベルデータとバー幅データに関連づけられたデータとして格納してもよい。バー二値レベルデータとバー幅データは、更に、変化開始点メモリ番地と関連づけられていてもよい。また、バー二値レベルデータの代わりに、符号データを用いてもよい。
【００５３】
デコード部１１１は、メモリ１２３のバー二値レベルデータ用領域１２３−７に格納されているバー二値レベルデータ及びバー幅データ用領域１２３−８に格納されているバー幅データを基に、バーコードのデコードを行う。
【００５４】
図５のフローでは、変化開始点の検索を行った後に変化終了点の検索を行っているが、これとは逆に、変化終了点の検索を行った後に変化開始点の検索を行ってもよい。また、最初のデータから順に、変化開始点であるか、変化終了点であるかを１つずつ判断していくようにしてもよい。これらの場合であっても、２つの連続する「立ち上がり」に対応するエッジのうち最後の方のエッジと、２つの連続する「立ち下がり」に対応するエッジのうちの最初の方のエッジを削除する。
【００５５】
図８は、バーコードの黒色バー、白色バーが交互に連続する部分に対応する読取りアナログ信号の波形を示す。この信号波形を対象とした場合の前処理部１２５の動作の説明をする。図８では、読取りアナログ信号の波形を連続線で示し、Ａ／Ｄ変換して得られるサンプル点をその連続線上にある小さな菱形で示している。図中、白抜きの丸は立ち上がり変化開始点を、黒色の丸は立ち下がり変化開始点を示し、黒色の三角はそれらの何れかに対応した変化終了点を示す。
【００５６】
図８の２番目の凸波形では、Ａ点の位置に対応する変化開始点メモリ番地とＢ点の位置に対応する変化終了点メモリ番地との平均値に近いメモリ番地が、Ａ点とＢ点との中点１の位置に対応する中点メモリ番地とされる。同様に、Ｃ点の位置に対応する変化開始点メモリ番地とＤ点の位置に対応する変化終了点メモリ番地との平均値に近いメモリ番地が、Ｃ点とＤ点との中点２の位置に対応する中点メモリ番地とされる。そして、中点１に対応する中点メモリ番地と中点２に対応する中点メモリ番地と差分である差分メモリ番地に基づいて、これらの中点間の距離がバー幅として算出される。
【００５７】
図９は、バーコードのクワイエットゾーンとその隣接部に対応する読取りアナログ信号の波形を示す。この信号波形を対象とした場合の前処理部１２５の動作の説明をする。より詳細に説明をすると、図９は、バーコードに印刷されているバーコードのうちの暗部が黒であり、バーコードのうちの明部が灰色であり、そのバーコードの周辺が白色である場合に、バーコードシンボルの前のクワイエットゾーンを含む部分に対応する読取りアナログ信号の波形である。なお、図９から明らかなようにクワイエットゾーンと白バーとが明部であり灰色である。具体的には、スキャン開始点付近において、バーコードに先行する隣接部の白色を読み取った後に、クワイエットゾーンを読み取り、それからバーコードシンボルを読み出す場合の読取りアナログ信号の波形である。
【００５８】
図９でも、図８と同様に、原波形を連続線で示し、Ａ／Ｄ変換して得られたサンプル点をその連続線上にある小さな菱形で示している。図中、白抜きの丸は立ち上がり変化開始点を、黒色の丸は立ち下がり変化開始点を示し、黒色の三角はそれらの何れかに対応した変化終了点を示す。
【００５９】
図９では、アドレス番地についての細かい説明は省略するが、Ｅ点が立ち上がり変化開始点、Ｆ点が変化終了点、Ｇ点が立ち下がり変化開始点、Ｈ点が変化終了点と決定される。また、Ｅ点とＦ点に対応する中点３が１つの中点とされ、Ｇ点とＨ点に対応する中点４がもう１つの中点とされる。ここで、ＳＴＥＰ２、ＳＴＥＰ３で、Ｘ点は立ち下がり変化開始点として検出されるが、ＳＴＥＰ４、ＳＴＥＰ５で、削除されている。従って、これに伴い、点Ｙは、立ち下がり変化終了点として検出されていない。更に、これらに伴い、点Ｘと点Ｙに対応する中点は算出されていない。つまり、バーコードの明部が灰色であり、そのバーコードの隣接部が白色であるので、波形上は、立ち下がり変化開始点であるＸ点、変化終了点であるＹ点が存在しているが、立ち下がり変化開始点Ｘと立ち下がり変化開始点Ｇとが連続しているので、前の「立ち下がり」の変化開始点Ｘ点は削除され、後の「立ち下がり」の変化開始点Ｇ点はそのまま維持される。つまり、立ち下がり変化開始点Ｘと立ち下がり変化開始点Ｇとが連続しているので、これらのうちの前の「立ち下がり」の変化開始点Ｘ点は、バーコードのパターンに起因したものではないと判断され、後の「立ち下がり」の変化開始点Ｇ点は、バーコードのパターンに起因したものであると判断される。その結果、Ｅ点からＨ点までの間が、１つの白色バーとして認識され、中点３と中点４との間の距離が、その白色バーに対応するバー幅として算出される。
【００６０】
図８と図９では、変化開始点と変化終了点が別々に決定される信号波形を示しているが、信号によっては、サンプル間隔との比較において信号の変化率が大きいことに起因して、変化開始点と変化終了点が同一のポイントとなることもある。この場合には、中間点は、変化開始点と変化終了点とに一致する。
【００６１】
図９は、上記と説明が一部重複するが、バーコードに印刷されているバーコードのうちの明部が灰色であり、そのバーコードレベルの隣接部が白色であり、その隣接部の外側に黒色部がある場合の波形等を示している。つまり、図９において、Ｅ点は、バーコードの周辺の白色部の更に外側の黒色部に対応するものであり、Ｆ点からＸ点までの範囲は、バーコードの周辺の白色部に対応するものである。
【００６２】
これに対し、バーコードの周辺の白色部の更に外側に黒色の領域が存在していない場合もある。このような場合には、図５、図６、及び図７に示す処理に加え、以下のような処理をする。
【００６３】
（Ａ）スキャン開始点と最初の立ち下がりの変化開始点の間に、他の変化開始点がなかった場合は、スキャン開始点の入力データのメモリ番地を、立ち上がりの変化開始点、変化終了点、及び中点の全てに対応したメモリ番地として設定する。
【００６４】
バーコードの周辺の白色部の更に外側に黒色の領域が存在していない場合には、スキャン開始点のレベルがＦ点とＸ点のレベルと等しくなり、従って、スキャン開始点と最初の立ち下がりの変化点であるＸ点の間に、立ち上がり変化開始点が無く、よって、この設定が行われる。
【００６５】
比較のために説明をすると、図９の場合には、スキャン開始点と最初の立ち下がりの変化点であるＸ点の間に、立ち上がり変化開始点であるＥ点があるので、この設定は行われない。
【００６６】
（Ｂ）スキャン終了点と最後の立ち上がりの変化開始点の間に、他の変化開始点がなかった場合は、スキャン終了点のデータのメモリ番地を、立ち下がりの変化開始点、変化終了点、及び中点の全てに対応したメモリ番地として設定する。これは、上記の（Ａ）の処理を左右反転させた処理である。
【００６７】
上記の（Ａ）と（Ｂ）の処理は、ＳＴＥＰ３とＳＴＥＰ４の間に行う。上記の（Ａ）をＳＴＥＰ１１、１２で表し、上記の（Ｂ）をＳＴＥＰ１３、１４で表したフローチャートの一部を図１０に示す。
【００６８】
なお、図９は、バーコードのうちの明部が灰色であり、そのバーコードの隣接部が白色である場合の一例として、スキャン開始点付近において、バーコードの隣接部の白色をスキャンした後に、バーコードをスキャンする例を示した。これに対し、スキャン終了点付近においては、バーコードをスキャンした後に、バーコードの周辺の白色をスキャンすることとなる。従って、スキャン終了点付近においては、バーコードの最後の暗部から明部にかけての立ち上がりと、バーコードの最後の明部からバーコードの周辺の白色部にかけての立ち上がりが２回連続する。これに対処する処理として、後者の「立ち上がり」の変化開始点のデータを削除し、前者の「立ち上がり」の変化開始点のデータを残す処理を行うことになる。
【００６９】
すなわち、これらを合わせて説明をすると、連続している２つの同一極性のエッジを検出したら、バーコードのスキャン方向に沿って端部に近い側のエッジを不要エッジとして削除するということになる。つまり、スキャンの端部に近い側のエッジを不要エッジとして削除するということになる。スキャンの端部に近い側とは、スキャン開始側の端部であれば、スキャン開始の端部に近い側であり、スキャン終了側の端部であれば、スキャン終了の端部に近い側である。
【００７０】
なお、上記では、バーコードの明部が灰色であり、バーコードの暗部が黒色であり、バーコードの隣接部が白である場合を例にとり、説明をしたが、本発明は、これに限らず、読取りアナログ信号の波形を見て、バーコードの隣接部に対応するレベルとバーコードの暗部に対応するレベルとの間にバーコードの明部に対応するレベルがある様々な場合に適用することができる。従って、本発明は、例えば、所定の波長の光に対して、同様な特性が出る場合にも適用することができる。また、本発明は、上記の例と、明度が反転した場合にも適用することができる。
【００７１】
なお、上記のバーコードリーダは、ハードウェア、ソフトウェア又はこれらの組合わせにより実現することができる。また、上記のバーコードリーダにより行なわれるバーコード読取り方法も、ハードウェア、ソフトウェア又はこれらに組合わせにより実現することができる。ここで、ソフトウェアによって実現されるとは、コンピュータがプログラムを読み込んで実行することにより実現されることを意味する。
【００７２】
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えば、フレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば、光磁気ディスク）、ＣＤ−ＲＯＭ(Read Only Memory)、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ(Programmable ROM)、ＥＰＲＯＭ(Erasable PROM)、フラッシュＲＯＭ、ＲＡＭ(random access memory)）を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００７３】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００７４】
（付記１）
スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジに基づいて前記バーコードが示す情報を読み取るバーコードリーダであって、
前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジを削除するエッジ削除手段を備えることを特徴とするバーコードリーダ。
【００７５】
（付記２）
付記１に記載のバーコードリーダであって、
前記エッジ削除手段は、連続している２つの同一極性のエッジを検出したら、スキャンの端部に近い側のエッジを前記不要エッジとして削除することを特徴とするバーコードリーダ。
【００７６】
（付記３）
付記２に記載のバーコードリーダであって、
前記エッジの極性として、そのエッジに対応する変化開始点の極性を利用することを特徴とするバーコードリーダ。
【００７７】
（付記４）
付記１乃至３の何れか１に記載のバーコードリーダであって、
スキャン端部と前記スキャン端部から見て最初の或る極性のエッジとの間に、他のエッジが無い場合には、前記スキャン端部を前記或る極性と反対の極性を有するエッジとする手段を更に備えることを特徴とするバーコードリーダ。
【００７８】
（付記５）
付記１乃至４の何れか１に記載のバーコードリーダであって、
前記エッジ削除手段により不要エッジが削除された後に残った複数のエッジの位置情報に基づいて、各バーの幅データを求め、前記複数のエッジの極性情報に基づいて、各バーの二値レベルデータを求める手段を更に備えることを特徴とするバーコードリーダ。
【００７９】
（付記６）
付記５に記載のバーコードリーダであって、
前記各バーの幅データと前記各バーの二値レベルデータに基づいて、前記バーコードが示す情報をデコードするデコーダを更に備えることを特徴とするバーコードリーダ。
【００８０】
（付記７）
付記１乃至６の何れか１に記載のバーコードリーダであって、
前記読取り信号を表す１スキャン分の入力データにそれぞれ対応する１スキャン分の差分データであって、相互に隣接する入力データ間の差分を表す差分データに基づいて、１スキャンに含まれる複数のエッジを検出するエッジ検出手段を更に備えることを特徴とするバーコードリーダ。
【００８１】
（付記８）
スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジに基づいて前記バーコードが示す情報を読み取るバーコード読取り方法であって、
前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジを削除するエッジ削除ステップを有することを特徴とするバーコード読取り方法。
【００８２】
（付記９）
付記８に記載のバーコード読取り方法であって、
前記エッジ削除ステップでは、連続している２つの同一極性のエッジを検出したら、スキャンの端部に近い側のエッジを前記不要エッジとして削除することを特徴とするバーコード読取り方法。
【００８３】
（付記１０）
付記９に記載のバーコード読取り方法であって、
前記エッジの極性として、そのエッジに対応する変化開始点の極性を利用することを特徴とするバーコード読取り方法。
【００８４】
（付記１１）
付記８乃至１０の何れか１に記載のバーコード読取り方法であって、
スキャン端部と前記スキャン端部から見て最初の或る極性のエッジとの間に、他のエッジが無い場合には、前記スキャン端部を前記或る極性と反対の極性を有するエッジとするステップを更に有することを特徴とするバーコード読取り方法。
【００８５】
（付記１２）
付記８乃至１１の何れか１に記載のバーコード読取り方法であって、
前記エッジ削除ステップにより不要エッジが削除された後に残った複数のエッジの位置情報に基づいて、各バーの幅データを求め、前記複数のエッジの極性情報に基づいて、各バーの二値レベルデータを求めるステップを更に有することを特徴とするバーコード読取り方法。
【００８６】
（付記１３）
付記１２に記載のバーコード読取り方法であって、
前記各バーの幅データと前記各バーの二値レベルデータに基づいて、前記バーコードが示す情報をデコードするデコードステップを更に有することを特徴とするバーコード読取り方法。
【００８７】
（付記１４）
付記８乃至１３の何れか１に記載のバーコード読取り方法であって、
前記読取り信号を表す１スキャン分の入力データにそれぞれ対応する１スキャン分の差分データであって、相互に隣接する入力データ間の差分を表す差分データに基づいて、１スキャンに含まれる複数のエッジを検出するエッジ検出ステップを更に有することを特徴とするバーコード読取り方法。
【００８８】
（付記１５）
スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジに基づいて前記バーコードが示す情報を読み取るバーコードリーダとしてコンピュータを機能させるためのバーコード読取り用プログラムであって、
コンピュータを、
前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジを削除するエッジ削除手段として機能させることを特徴とするバーコード読取り用プログラム。
【００８９】
（付記１６）
付記１５に記載のバーコード読取り用プログラムであって、
前記エッジ削除手段は、連続している２つの同一極性のエッジを検出したら、スキャンの端部に近い側のエッジを前記不要エッジとして削除することを特徴とするバーコード読取り用プログラム。
【００９０】
（付記１７）
付記１６に記載のバーコード読取り用プログラムであって、
前記エッジの極性として、そのエッジに対応する変化開始点の極性を利用することを特徴とするバーコード読取り用プログラム。
【００９１】
（付記１８）
付記１５乃至１７の何れか１に記載のバーコード読取り用プログラムであって、
コンピュータを、
スキャン端部と前記スキャン端部から見て最初の或る極性のエッジとの間に、他のエッジが無い場合には、前記スキャン端部を前記或る極性と反対の極性を有するエッジとする手段として更に機能させることを特徴とするバーコード読取り用プログラム。
【００９２】
（付記１９）
付記１５乃至１８の何れか１に記載のバーコード読取り用プログラムであって、
コンピュータを、
前記エッジ削除手段により不要エッジが削除された後に残った複数のエッジの位置情報に基づいて、各バーの幅データを求め、前記複数のエッジの極性情報に基づいて、各バーの二値レベルデータを求める手段として更に機能させることを特徴とするバーコード読取り用プログラム。
【００９３】
（付記２０）
付記１９に記載のバーコード読取り用プログラムであって、
コンピュータを、
前記各バーの幅データと前記各バーの二値レベルデータに基づいて、前記バーコードが示す情報をデコードするデコーダとして更に機能させることを特徴とするバーコード読取り用プログラム。
【００９４】
（付記２１）
付記１５乃至２０の何れか１に記載のバーコード読取り用プログラムであって、
コンピュータを、
前記読取り信号を表す１スキャン分の入力データにそれぞれ対応する１スキャン分の差分データであって、相互に隣接する入力データ間の差分を表す差分データに基づいて、１スキャンに含まれる複数のエッジを検出するエッジ検出手段として更に機能させることを特徴とするバーコード読取り用プログラム。
【産業上の利用可能性】
【００９５】
本発明は、バーコードを読み取るために利用することができる。
【符号の説明】
【００９６】
１０１  投光用ＬＥＤ
１０３  バーコード
１０５  受光レンズ
１０７  ＣＣＤ
１０９  アナログ増幅器
１１１  デコード部
１１３  ＧＰＩＯ
１１５  ＣＰＵ
１２１  Ａ／Ｄ変換部
１２３  メモリ
１２５  前処理部
【要約】
【課題】バーコードの周辺の反射率のほうがバーコードの明部の反射率よりも高い場合であっても、簡易な処理で、バーコードをデコードすることが可能なバーコードリーダを提供する。
【解決手段】スキャン光が照射されたバーコードからの反射光の強度を示す読取り信号に含まれる複数のエッジに基づいて前記バーコードが示す情報を読み取るバーコードリーダであって、前記バーコードのクワイエットゾーンからの反射光の強度と前記クワイエットゾーンの隣接部からの反射光の強度との差により生ずる不要エッジを削除するエッジ削除手段を備える。
【選択図】図３【図８】
0005424369.tif 000002
【図９】
0005424369.tif 000003
【図１】
0005424369.tif 000004
【図２】
0005424369.tif 000005
【図３】
0005424369.tif 000006
【図４】
0005424369.tif 000007
【図５】
0005424369.tif 000008
【図６】
0005424369.tif 000009
【図７】
0005424369.tif 000010
【図１０】
0005424369.tif 000011