JP5349504B2 - 光学的情報読取装置及び光学的情報読取方法 - Google Patents

光学的情報読取装置及び光学的情報読取方法 Download PDF

Info

Publication number
JP5349504B2
JP5349504B2 JP2010549459A JP2010549459A JP5349504B2 JP 5349504 B2 JP5349504 B2 JP 5349504B2 JP 2010549459 A JP2010549459 A JP 2010549459A JP 2010549459 A JP2010549459 A JP 2010549459A JP 5349504 B2 JP5349504 B2 JP 5349504B2
Authority
JP
Japan
Prior art keywords
code symbol
symbol data
color information
information
binarized
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010549459A
Other languages
English (en)
Other versions
JPWO2010090159A1 (ja
Inventor
葉 田中
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Optoelectronics Co Ltd
Original Assignee
Optoelectronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Optoelectronics Co Ltd filed Critical Optoelectronics Co Ltd
Priority to JP2010549459A priority Critical patent/JP5349504B2/ja
Publication of JPWO2010090159A1 publication Critical patent/JPWO2010090159A1/ja
Application granted granted Critical
Publication of JP5349504B2 publication Critical patent/JP5349504B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/12Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using a selected wavelength, e.g. to sense red marks and ignore blue marks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/10544Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation by scanning of the records by radiation in the optical part of the electromagnetic spectrum
    • G06K7/10712Fixed beam scanning
    • G06K7/10722Photodetector array or CCD scanning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/10544Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation by scanning of the records by radiation in the optical part of the electromagnetic spectrum
    • G06K7/10821Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation by scanning of the records by radiation in the optical part of the electromagnetic spectrum further details of bar or optical code scanning devices
    • G06K7/10851Circuits for pulse shaping, amplifying, eliminating noise signals, checking the function of the sensing device

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Electromagnetism (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Toxicology (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Character Input (AREA)

Description

本発明は、バーコードや二次元コードのような光反射率の異なる部分で構成される読取対象の情報を読み取る光学的情報読取装置及び光学的情報読取方法に関する。
光学的情報読取装置、例えばバーコードスキャナは、よく知られるように黒バー(あるいは単にバー)と白バー(あるいはスペース)とで構成されるバーコードの画像にレーザー光線等を投射し、その反射光を受光して電気的処理を施すことによって、そのコード情報を読み取るものである。このバーコードスキャナは、バーコードを照射する光源、バーコードからの拡散反射光を捉える光学系や受光素子、受光素子からの出力信号をデジタル化する回路及びデジタル信号を演算処理してデコードする回路などで構成される。
バーコードスキャナによれば、取得した電気信号の波形からバーコードの白黒の変曲点を求め(2値化)、変曲点の幅情報に対して適合するバーコードを探すこと(デコード)でバーコードを読み取ることができる。このため、白と黒の変曲点を検出することがバーコードの読み取りにおいて重要な要因となる。
バーコードの複数の変曲点のうち、1つでも変曲点が検出できない場合には、バーコードを読み取ることができなくなる。変曲点の検出ができなくなる主な要因は、レンズの性能(収差や回折)、サンプリングレート(又は画素数)、ノイズ等がある。
一般的に、レーザーを用いたバーコードスキャナでは、遠方側でS/N比(Signal to Noise ratio)の低下が顕著に現れるため読み取りが困難になる。また、CCD(Charge Coupled Device)やCMOS(Complementary Metal Oxide Semiconductor)などのラインセンサを用いたバーコードスキャナでは、主にレンズの性能限界や画素数で読み取りが困難になる場合がある。
このようなバーコードスキャナに関連して特許文献1には、バーコードスキャナが開示されている。このバーコードスキャナによれば、バーコードを照射して得た信号における微分波形の振幅値を「1,0,−1」の3つの値の何れかに割り当てて、該微分波形を3値化する。この値「1」を示す正側三値信号のピークと、値「−1」を示す負側三値信号のピークとの間隔がバーコードの基本幅の整数倍となるように合成する。これにより、バーコードの黒太り部分を除去することができるので、正しいバーコード幅に修正できるようになる。
特開2004−252905号公報
ところで、従来例に係る特許文献1に記載のバーコードスキャナにおいては、バーコードの各々に対する黒太り部分を除去することができても、信号の劣化によってバーコードそのものが読み取れない場合には、対応できない問題がある。すなわち、例えば複数の最小幅のバーコードが読み取れない場合、特許文献1のバーコードスキャナでは、これらの最小幅のバーコードを正しいバーコードに修正することは困難である。
また、バーコードの読み取りの性能を向上させるために、レンズの性能向上や画素数を増やすことが考えられる。この場合、レンズの性能向上のためには光学設計の際に最適な解を求める必要がある。一般に高分解能な解像力を求めると、回折の影響を少なくするためにレンズを明るくしなければならない。しかし、レンズが明るくなるとデフォーカスの性能(焦点深度)が低下する。このようなトレードオフの関係にあるため、レンズの材料や枚数などの変更による基本性能の向上が必須となる。画素数の多いセンサーを用いたり、レンズの基本性能の向上を行ったりするとコスト維持の面では非常に困難となる。
そこで、本発明はこのような従来例に係る課題を解決したものであって、劣化したバーコードや二次元コードなどのコード記号の信号波形からコード記号を正しく認識できるようにすると共に、コード記号の読み取り精度を向上できるようにした光学的情報読取装置及び光学的情報読取方法を提供することを目的とする。
上述した課題を解決するために、本発明に係る光学的情報読取装置は、光反射率の異なる部分で構成されるコード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求める微分処理部と、微分信号から変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求める2値化コード記号データ計算部と、2値化コード記号データと変曲点の変化量に基づいて、読取信号のコード記号情報を求める演算部とを備え、演算部は、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて2値化コード記号データを、反射光の強度の高い第1の色情報、反射光の強度の低い第2の色情報、および第1の色情報と第2の色情報の略中間を示す第3の色情報に分類し、第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して該第3の色情報の2値化コード記号データを分割してコード記号情報を求めるものである。
また、本発明に係る光学的情報読取装置は、画像を取り込んで、この画像をデジタルの輝度値で表現される画像データに変換する画像取込手段と、画像取込手段によって変換された画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成する輝度ヒストグラム作成手段と、輝度ヒストグラム作成手段で作成された輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求める2値化コード記号データ計算部と、2値化コード記号データと変曲点の変化量に基づいて、画像データのコード記号情報を求める演算部とを備え、演算部は、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて2値化コード記号データを、輝度値の高い第1の色情報、輝度値の低い第2の色情報、および第1の色情報と第2の色情報の略中間を示す第3の色情報に分類し、第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して該第3の色情報の2値化コード記号データを分割してコード記号情報を求めるものである。
上述した課題を解決するために、本発明に係る光学的情報読取方法は、光反射率の異なる部分で構成されるコード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求めるステップと、微分信号から変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求めるステップと、変曲点間の信号の強度を示すレベル情報を求めるステップと、レベル情報に基づいて2値化コード記号データを、反射光の強度の高い第1の色情報、反射光の強度の低い第2の色情報、および第1の色情報と第2の色情報の略中間を示す第3の色情報に分類するステップと、第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して該第3の色情報の2値化コード記号データを分割してコード記号情報を求めるステップとを有するものである。
また、本発明に係る光学的情報読取方法は、画像を取り込んで、画像をデジタルの輝度値で表現される画像データに変換するステップと、変換した画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成するステップと、作成した輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求めるステップと、変曲点間の信号の強度を示すレベル情報を求めるステップと、レベル情報に基づいて2値化コード記号データを、輝度値の高い第1の色情報、輝度値の低い第2の色情報、および第1の色情報と第2の色情報の略中間を示す第3の色情報に分類するステップと、第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して該第3の色情報の2値化コード記号データを分割してコード記号情報を求めるステップとを有するものである。
本発明において、微分処理部は、コード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求める。2値化コード記号データ計算部は、この微分信号から変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求める。演算部は、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて2値化コード記号データを、反射光の強度の高い第1の色情報、反射光の強度の低い第2の色情報、および前記第1の色情報と前記第2の色情報の略中間を示す第3の色情報に分類する。そして、演算部は、第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して第3の色情報の2値化コード記号データを分割する。これにより、例えば白色と黒色の略中間を示す灰色の2値化コード記号データを認識できるようになる。従って、劣化したコード記号の信号波形からコード記号を正しく認識できるようになる。
また、本発明において、画像取込手段は、画像を取り込んで、この画像をデジタルの輝度値で表現される画像データに変換する。輝度ヒストグラム作成手段は、画像取込手段によって変換された画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成する。輝度ヒストグラム作成手段で作成された輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求める。演算部は、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて2値化コード記号データを、輝度値の高い第1の色情報、輝度値の低い第2の色情報、および第1の色情報と第2の色情報の略中間を示す第3の色情報に分類する。そして、演算部は、第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して第3の色情報の2値化コード記号データを分割する。これにより、例えば白色と黒色の略中間を示す灰色の2値化コード記号データを認識できるようになる。従って、劣化したコード記号の信号波形からコード記号を正しく認識できるようになる。
本発明に係る光学的情報読取装置及び光学的情報読取方法によれば、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて2値化コード記号データを、反射光の強度(輝度値)の高い第1の色情報、反射光の強度(輝度値)の低い第2の色情報、および第1の色情報と第2の色情報の略中間を示す第3の色情報に分類する。そして、第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して第3の色情報の2値化コード記号データを分割してコード記号情報を求める。
これにより、例えば白色と黒色の略中間を示す灰色の2値化コード記号データを認識できるようになる。従って、劣化したコード記号の信号波形からコード記号を正しく認識できるようになる。これにより、システムリソースを大幅に増やすことなく、コード記号の読み取り精度を向上できるようになる。
第1の実施の形態に係るバーコードスキャナ100の構成例を示すブロック図である。 2値化予測部150の構成例を示すブロック図である。 バーコードBC1,BC2の一例を示す図である。 バーコードBC1,BC2の読み取り例を示す図である。 バーコードBC1を読み取って出力された出力信号の波形図である。 バーコードBC2を読み取って出力された出力信号の波形図である。 第1の実施の形態に係るバーコードスキャナ100と従来のバーコードスキャナの読取深度の比較例を示す図である。 バーコードスキャナ100の動作例を示すフローチャートである。 背景色と同色化したバーコードBC2を読み取った場合におけるラインデータの信号波形を示す図である。 2値化バーコードデータBBD[Ad]と変曲点の向きIO[Ad]を示すテーブルTB1の構成例を示す図である。 図9の(A)のラインデータ(アナログデータ)におけるBBDごとのアナログ信号のレベルを示す図である。 2値化バーコードデータの信号の強度を示すレベル情報POW[Ad]を説明する図である。 2値化バーコードデータの信号の強度を示すレベル情報POW[Ad]を計算する例を示すフローチャートである。 スタートマージン及びエンドマージンを切り出すテーブルTB3,TB4の構成例を示す図である。 マージン計算及び切り出し処理を行う処理の一例を示すフローチャートである。 2値化バーコードデータの信号の強度を示すレベル情報POWデータの抽出例を示す図である。 白色、黒色、灰色の境界線の計算を行う処理の一例を示すフローチャートである。 色の振り分け例を示すテーブルTB5を説明する図である。 色の振り分け例を示すテーブルTB6を説明する図である。 変曲点間の色を振り分ける計算を行う処理の一例を示すフローチャートである。 変曲点の向きを示すIO[Ad]に基づいて、2値化バーコードデータを抽出した例を示す図である。 基準最小幅の計算を行う処理の一例を示すフローチャートである。 灰色を示す2値化バーコードデータBBD[Ad]を奇数又は偶数に分割する例を示す図である。 灰色バーの分割例を示すテーブルTB7と、分割した2値化バーコードデータF_BBDを示すテーブルTB8を説明する図である。 分割した2値化バーコードデータF_BBDの最小分解能を「1」に正規化したテーブルTB9を説明する図である。 灰色のバーの分割処理を実施するフローチャートである。 第2の実施の形態に係るコードスキャナ200の構成例を示すブロック図である。 二次元バーコード例を示す図である。 輝度ヒストグラム例を示す図である。
以下、図面を参照しながら本発明に係る光学的情報読取装置について説明する。本実施の形態では、光学的情報読取装置の一例として、第1の実施の形態ではバーコードスキャナ100を、第2の実施の形態ではコードスキャナ200を説明する。
<第1の実施の形態>
図1は、第1の実施の形態に係るバーコードスキャナ100の構成例を示すブロック図である。図1に示すように、バーコードスキャナ100は、光信号を入力してアナログの電気信号に変換する信号変換部110と、信号変換部110で変換された電気信号を増幅する増幅部120と、増幅部120で増幅された電気信号のうち所定周波数以下の低域成分の信号だけを通過させて出力するローパスフィルタ130と、ローパスフィルタ130から出力された出力信号に応じて増幅部120における増幅の利得を制御する自動利得制御(AGC)部140と、劣化した出力信号に対してバーコードの白と黒の変曲点を予測する2値化予測部150とからなる。
信号変換部110に入力する光信号は、バーコードスキャナ100が不図示のLEDやレーザビーム発生器等の発光源からバーコードに向けて照射した光の反射光の強度を示す信号である。信号変換部110は、光電変換素子111及び電流/電圧変換部(以下、I/V変換部112という)を備える。光電変換素子111は、光信号を受光して電流信号に変換するフォトダイオード(PD)から構成される。I/V変換部112は、電流信号を電圧信号に変換する。
増幅部120は、前置増幅部121及び可変利得増幅器(以下、AGCアンプ122という)を備える。前置増幅部121は、小さい電圧信号を増幅するために用いる。AGCアンプ122は、出力信号レベルをフィードバックすることで、利得が入力信号レベルに対して適切な範囲になるよう調整する。AGCアンプ122の利得は、自動利得制御部140によって生成される制御信号Scに応じて変化する。
自動利得制御部140は、ローパスフィルタ130の出力部から分岐してAGCアンプ122に帰還する閉ループ型の制御系であり、ピーク値検出器141、比較器142及び基準レベル設定回路143を備えている。
ピーク値検出器141は、ローパスフィルタ130の出力信号の振幅のピーク電圧(ピーク値Vp)を検出して保持する。基準レベル設定回路143は、基準となる電圧値(以下、基準電圧値Vsという)を設定する。比較器142は、基準レベル設定回路143によって設定された基準電圧値Vsと、ピーク値検出器141により保持したピーク値Vpとを比較し、その比較結果に応じた制御信号Scを出力してAGCアンプ122の利得を制御する。
この場合の比較器142は差動増幅器の機能を持ち、ピーク値Vpと基準電圧値Vsとの差に応じた制御信号Scを出力し、それをAGCアンプ122の制御端子に入力させる。制御信号Scは、Vp>Vsのときは正、Vp=Vsのときは0、Vp<Vsのときは負となる。AGCアンプ122ではこの制御信号Scと反比例するように増幅の利得を可変する。すなわち、出力信号の振幅が小さくなると、ピーク値Vpが基準電圧値Vsより小さくなるので制御信号Scが負になり、AGCアンプ122の利得が大きくなる。逆に、出力信号の振幅が大きくなると、ピーク値Vpが基準電圧値Vsより大きくなるので制御信号Scが正になり、AGCアンプ122の利得が小さくなる。それによって、出力信号の平均的な振幅を略一定にする。
2値化予測部150は、ローパスフィルタ130から出力された出力信号を入力し、この出力信号が劣化している場合には、バーコードの白と黒の変曲点を予測してデジタルの2値化信号を生成する。この2値化信号は、後段の不図示の復号化回路によりデコードされてバーコード記号として読み取られる。
図2は、2値化予測部150の構成例を示すブロック図である。図2に示すように、2値化予測部150は、アナログ用の第1のメモリ(以下、第1のメモリ151という)、アナログ用の第2のメモリ(以下、第2のメモリ152という)、微分処理部153、変曲点検出部154、線形補完部155、BBD計算部156、デジタル用の第1のメモリ(以下、第1のメモリ157という)、デジタル用の第2のメモリ(以下、第2のメモリ158という)及びCPU159を備えている。
図2に示す2値化予測部150は、第1のメモリ151と第2のメモリ152を切り替える。また、2値化予測部150は、第1のメモリ157と第2のメモリ158を切り替える。これは、バーコードを読み取る処理と演算する処理とを並列に行ってスループットを向上させるためである。
微分処理部153は、第1のメモリ151又は第2のメモリ152に保存された図9の(A)に示すアナログデータを一階微分して、図9の(B)に示す一階微分した信号波形を求める。また、微分処理部153は、第1のメモリ151又は第2のメモリ152に保存されたアナログデータを二階微分して、図9の(C)に示す二階微分した信号波形を求める。
変曲点検出部154は、一階微分した信号波形と二階微分した信号波形から変曲点を検出する。線形補完部155は、二階微分の値を線形補完する。これにより、変曲点の位置をより正確に読み取ることができる。
BBD計算部156は、図9の(B)に示す一階微分の絶対値が特定のスライスラインL1,L2より大きく(例えば、図9の(B)では、一階微分の値が、スライスラインL1よりも上方にある箇所、及び、スライスラインL2よりも下方にある箇所)、かつ、図9の(C)に示す二階微分の値がゼロのラインとクロスしている点を変曲点として検出する。BBD計算部156は、変曲点の向き(変化量)を符号として図10に示すテーブルTB1のIO[Ad]に保存する。また、BBD計算部156は、変曲点間の幅長を2値化バーコードデータ(以下適宜、BBDという)として図10に示すテーブルTB1のBBD[Ad]に保存する。このテーブルTB1は、第1のメモリ157又は第2のメモリ158に保存される。なお、変曲点検出部154、線形補完部155及びBBD計算部156は、2値化コード記号データ計算部の一例である。CPU159は演算部の一例であり、第1のメモリ157又は第2のメモリ158に保存されたテーブルTB1を参照して2値化信号を生成する。
図3は、バーコードの一例を示す図である。図3の(A)に示すように、バーコードBC1は、幅長の異なる複数の黒色のバーが白い紙などの媒体に印字されている。この例では、バーコードBC1は、スタートマージンSM、エンドマージンEM、1値幅バーSBr1,SBr2及び多値(2値も含む)幅バーLBr1,LBr2を有している。
スタートマージンSM及びエンドマージンEMの濃淡のレベル情報は、白色のみである。1値幅バーSBr1,SBr2及び多値幅バーLBr1,LBr2の濃淡のレベル情報は、白色及び黒色である。すなわち、1値幅バーは、黒色の1値幅バーSBr1と白色の1値幅バーSBr2から構成される。多値幅バーは、黒色の多値幅バーLBr1と白色の多値幅バーLBr2から構成される。バーコードBC1は、スタートマージンSMで始まり、1値幅バーSBr1,SBr2及び多値幅バーLBr1,LBr2の様々な組み合わせで構成され、エンドマージンEMで終了する。
図3の(B)に示すように、バーコードBC2は、図3の(A)に示したバーコードBC1と同一の構成である。すなわち、バーコードBC2は、スタートマージンSM、エンドマージンEM、1値幅バーSBr1,SBr2及び多値幅バーLBr1,LBr2を有している。バーコードBC2は、媒体に印字された1値幅バーSBr1及び多値幅バーLBr1の画像が背景色と同色化した状態を示している。このようなバーコードBC2の同色化は、例えば印字対象の材質や印字の劣化に依存する。印字対象の材質が例えば緑色のプリント基板であり、このプリント基板の表面にレーザマーカでバーコードを印字する場合には、白色の背景に黒色のバーコードを印字する場合に比べて同色化を招きやすい。このように、バーコードは、印字対象の材質や印字の劣化により、様々な印字状態となる。
図4の(A)は、バーコードBC1の読み取り例を示す図である。図4の(A)に示すように、バーコードBC1が同色化していない場合、出力信号の波形からバーコードBC1の白黒の変曲点を求めて、変曲点の幅情報に対して適合するバーコードを探すことでバーコードB1を読み取ることができる。すなわち、スタートマージンSM、エンドマージンEM、1値幅バーSBr1,SBr2及び多値幅バーLBr1,LBr2にバーコードBC1を分類できる。
変曲点の求め方としては、出力信号の変化量の絶対値が一定値より大きい極大値を検出する必要がある。これにより、ノイズなどによって発生する変化量の少ない変曲点を検出することを防止できる。
図4の(B)は、バーコードBC2の読み取り例を示す図である。図4の(B)に示すように、同色化したバーコードBC2の場合、幅長の狭い1値幅バーSBr1,SBr2が白色か黒色であるかの判別が難しい。この場合、図2に示した2値化予測部150は、変曲点間の信号の強度を示すレベル情報を追加することにより、バーコードBC2の1値幅バーSBr1,SBr2を白色と黒色の中間色である灰色(グレー)のバーBr3として判別する。
2値化予測部150は、変曲点間の信号の強度を示すレベル情報に基づいて、バーコードBC2の2値化バーコードデータを白色(第1の色情報)、黒色(第2の色情報)及び灰色(第3の色情報)の3値に分類して、この灰色のバーBr3を、黒色の1値幅バーSBr1と白色の1値幅バーSBr2の集合として判別する。2値化予測部150は、この灰色を示すバーBr3をバーコードBC2の特徴(配列パターン)に照らし合わせて、黒色の1値幅バーSBr1と白色の1値幅バーSBr2を予測して分割する。例えば、2値化予測部150は、灰色のバーBr3の2値化バーコードデータを最小幅の2値化バーコードデータで除算して該灰色のバーBr3を分割する。
この例で、2値化予測部150は、図4の(B)に示す灰色のバーBr3aの幅長を求め、例えば黒色の1値幅バーSBr1の幅長で該バーBr3aの幅長を除算する。これにより、灰色のバーBr3aの中に含まれる黒色の1値幅バーSBr1又は白色の1値幅バーSBr2の個数が分かる。この例では、バーBr3aに含まれる1値幅バーSBr1,SBr2の個数は4個である。2値化予測部150は、1値幅バーの個数を算出後、バーコードBC2の黒色と白色の配列パターンから、灰色のバーBr3aを黒色の1値幅バーSBr1と白色の1値幅バーSBr2に分割する。このバーコードBC2の配列パターンは、黒色の後には白色が続き、また、白色の後には黒色のバーが続くように構成される。すなわち、白色と黒色のバーが交互に配列されなければ、バーコードとして成立しない。
この例では、図4の(B)に示すバーBr3aは、黒色の多値幅バーLBr1と白色の多値幅バーLBr2に挟まれているので、バーBr3aの配列パターンは、紙面向かって左から、白色の1値幅バーSBr2→黒色の1値幅バーSBr1→白色の1値幅バーSBr2→黒色の1値幅バーSBr1となる。これにより、バーコードBC2のように同色化した場合であっても、黒色の1値幅バーSBr1と白色の1値幅バーSBr2を判別できるようになる。
続いて、図1に示したバーコードスキャナ100のローパスフィルタ130から出力される出力信号の波形とバーコードの関係について説明する。図5の(A)に示す出力信号の波形は、図5の(C)に示すバーコードBC1を読み取って出力された出力信号の波形である。図5の(A)の縦軸には信号レベルを設定し、横軸には画素位置を設定している。図5の(A)に示す出力信号は、該出力信号の全ての変曲点Iが検出されている。この変曲点Iに基づく幅情報のみから得た2値化結果から、図5の(B)に示すバーコードBC3を生成することができる。このバーコードBC3は、読み取った図5の(C)のバーコードBC1と同一である。
図6の(A)に示す出力信号の波形は、背景色と同色化した図6の(C)のバーコードBC2を読み取って出力された出力信号の波形である。図6の(A)の縦軸には信号レベルを設定し、横軸には画素位置を設定している。図6の(A)に示す出力信号は、該出力信号の一部の変曲点Iのみが検出されている。この例で、黒色の1値幅バーSBr1と白色の1値幅バーSBr2を判別するための変曲点は検出されていない。
このとき、図2に示した2値化予測部150は、変曲点間の信号の強度を示すレベル情報を追加することにより、バーコードBC2の1値幅バーSBr1,SBr2を白色と黒色の中間色である灰色のバーBr3として判別する。
2値化予測部150は、変曲点Iに基づく幅情報と変曲点間の信号の強度を示すレベル情報から、バーコードBC2を白色、黒色及び灰色の3値に分類する。そして、この灰色のバーBr3を、黒色の1値幅バーSBr1と白色の1値幅バーSBr2の集合として判別する。2値化予測部150は、灰色を示すバーBr3をバーコードBC2の配列パターンに照らし合わせて、黒色の1値幅バーSBr1と白色の1値幅バーSBr2を予測して分割する。これにより、背景色と同色化した図6の(C)のバーコードBC2を読み取った場合であっても、正確に読み取ることができる。
続いて、本発明に係るバーコードスキャナ100と従来のバーコードスキャナで読み取ったバーコードの読取深度の比較結果について説明する。ここで、読取深度とは、バーコードスキャナでバーコードを読むことができる最小距離と最大距離の差である。図7に示す縦軸には、バーコードの一例として、JAN(Japanese Article Number)のモジュール幅が0.33mmのバーコードと、code39の細バーの寸法が0.25mmのバーコードを設定し、横軸には読取深度(mm)を設定している。
図7に示すJANのバーコードにおいて、従来のバーコードスキャナでは、読み取り最小距離が約60mmで、読み取り最大距離が約120mmであり、読取深度は約60mmである。本発明に係るバーコードスキャナ100では、読み取り最小距離が約60mmで、読み取り最大距離が約200mmであり、読取深度は約140mmである。従って、本発明に係るバーコードスキャナ100は、従来のバーコードスキャナに比べて読取深度が約80mm向上している。
図7に示すcode39のバーコードにおいて、従来のバーコードスキャナでは、読み取り最小距離が約60mmで、読み取り最大距離が約138mmであり、読取深度は約78mmである。本発明に係るバーコードスキャナ100では、読み取り最小距離が約60mmで、読み取り最大距離が約238mmであり、読取深度は約178mmである。従って、本発明に係るバーコードスキャナ100は、従来のバーコードスキャナに比べて読取深度が約100mm向上している。
続いて、図1に示したバーコードスキャナ100の動作を詳細に説明する。図8は、バーコードスキャナ100の動作例を示すフローチャートである。この例では、図3の(B)に示したような、例えば印字対象の材質や印字の劣化によって、媒体に印字された1値幅バーSBr1及び多値幅バーLBr1の画像が背景色と同色化したバーコードBC2を読み取る場合について説明する。
図8に示すステップST1で、バーコードスキャナ100は、バーコードのラインデータを取り込んで変曲点を検出する。例えば、バーコードスキャナ100のエリアセンサーとして機能する図1の光電変換素子111は、不図示のLEDによりバーコードに照射されて反射された光信号を受光して電流信号に変換してI/V変換部112に出力する。I/V変換部112は、この電流信号を電圧信号に変換する。この電圧信号は、増幅部120により所定の電圧に増幅されてローパスフィルタ130を経て2値化予測部150に出力される。なお、光電変換素子111で受光したエリアデータから特定のラインデータのみを抜き出して該ラインデータを加算することにより、図9の(A)に示すノイズの少ないラインデータを得ることができる。
図9の(A)は、図3の(B)に示したような背景色と同色化したバーコードBC2を読み取った場合のラインデータの信号波形を示す図である。図9の(B)は、図9の(A)の信号波形を一階微分した信号波形を示す図である。図9の(C)は、図9の(A)の信号波形を二階微分した信号波形を示す図である。図9の(A),図9の(B)及び図9の(C)に示す縦軸には信号のレベルを設定し、横軸には画素位置を設定している。
2値化予測部150は、図9の(A)に示す信号波形の変曲点を検出する場合に、図9の(B)に示す一階微分の絶対値が特定のスライスラインL1,L2より大きく、かつ、図9の(C)に示す二階微分の値がゼロのラインとクロスしている点を変曲点として検出する。変曲点の検出の際に、二階微分の値を線形補完部155によって線形補完することで、変曲点の位置をより正確に読み取ることができる。スライスレベルは、ノイズとの区別をするために必要で、このスライスレベルを超えない変曲点(図9の(B)では、スライスラインL1とスライスラインL2との間にある変曲点)はノイズとして扱う。
2値化予測部150は、変曲点間の幅長を2値化バーコードデータとして図10に示すテーブルTB1のBBD[Ad]に保存する。2値化予測部150は、図9の(A)の変曲点の向き(変化量)を示す1次微分値が正(図9の(B)の信号波形が上に凸)の場合にはプラス(+)として図10に示すテーブルTB1のIO[Ad]に保存する。また、変曲点の向きを示す1次微分値が負(図9の(B)の信号波形が下に凸)の場合にはマイナス(−)として図10に示すテーブルTB1のIO[Ad]に保存する。
図10は、2値化バーコードデータBBD[Ad]と変曲点の向きを示すIO[Ad]を有するテーブルTB1の構成例を示す図である。図10に示すテーブルTB1は、アドレス「Ad」、BBD[Ad]及びIO[Ad]から構成されている。アドレス「Ad」は、BBDを参照するためのアドレスである。BBD[Ad]には、変曲点間の幅長を示す2値化バーコードデータが保存される。IO[Ad]には、変曲点の向き(変化量)を示す1次微分値(+−符号)が保存される。
この例で、図10に示すテーブルTB1には、図9の(A)に示した信号波形のBBD及び変曲点の向きが保存されている。例えば、スタートマージンSMを示すアドレス「Ad」の「0」には、BBD[Ad]に「1282」、IO[Ad]に「−」が保存されている。また、最初の2値化バーコードデータを示すBBD[1]に「15」、IO[1]に「−」が保存されている。
続いて、図8に示したフローチャートのステップST2の処理について説明する。図8に示すステップST2で、2値化予測部150は、変曲点間のレベルを計算する。図11は、図9の(A)のラインデータ(アナログデータ)におけるBBDごとのアナログ信号のレベルを示す図である。図11に示すアドレス「Ad」の「0」〜「20」は、図10のテーブルTB1のアドレス「Ad」の「0」〜「20」に相当する。例えば、図11によれば、テーブルTB1のBBD[1]のアナログ信号のレベルは、約35〜約47の間で変位している。
図12の(A)は、変曲点の向き(変化量)を示すIO[Ad],IO[Ad−1]から、2値化バーコードデータの信号の強度を示すレベル情報POW[Ad]を求める条件を示す図である。図12の(A)に示すCASE「A」は、変曲点の向きを示す1次微分値が、両方プラス(+)又は両方マイナス(−)の場合である。この場合、変曲点の向きを示す1次微分値が同じ符号であるため、BBD[Ad]は、灰色を示す2値化バーコードデータである。CASE「A」では、灰色を示す2値化バーコードデータであるため、抽出したアナログデータの中で最も変化が少ない2点の中間値を、図12の(B)のテーブルTB2のレベル情報POW[Ad]に設定する。
CASE「B」は、変曲点の向きを示す1次微分値が、IO[Ad−1]がマイナス(−)で、IO[Ad]がプラス(+)の場合である。この場合、変曲点の向きを示す1次微分値がマイナスからプラスに変位するため、BBD[Ad]は、黒色を示す2値化バーコードデータである。CASE「B」では、反射光の強度の低い黒色を示す2値化バーコードデータであるため、抽出したアナログデータの中で最小値を、図12の(B)のテーブルTB2のレベル情報POW[Ad]とする。
CASE「C」は、変曲点の向きを示す1次微分値が、IO[Ad−1]がプラス(+)で、IO[Ad]がマイナス(−)であると判定した場合である。この場合、変曲点の向きを示す1次微分値がプラスからマイナスに変位するため、BBD[Ad]は、白色を示す2値化バーコードデータである。CASE「C」では、反射光の強度の高い白色を示す2値化バーコードデータであるため、抽出したアナログデータの中で最大値を、図12の(B)のテーブルTB2のレベル情報POW[Ad]とする。
図13は、2値化バーコードデータの信号の強度を示すレベル情報POW[Ad]を計算する例を示すフローチャートであり、図8のステップST2の処理内容を詳細に説明するためのものである。図13に示すステップST200で、2値化予測部150は、図12の(B)のテーブルTB2のアドレス「Ad」に「0」を設定して初期化する。続いてステップST201に移行する。
ステップST201で、2値化予測部150は、テーブルTB1のアドレス「Ad」に設定されたアドレスの2値化バーコードデータ(BBD)の幅に属するアナログデータを抽出する。2値化予測部150は、例えばアドレス「Ad」が「0」に属する図11のアナログデータを抽出する。続いてステップST202に移行する。
ステップST202で、2値化予測部150は、変曲点の向き(変化量)を示すテーブルTB1のIO[Ad],IO[Ad−1]を参照し、変曲点の向き(変化量)を示すIO[Ad]とIO[Ad−1]が等しいか否かを判定する。図12の(A)に示すように、変曲点の向きを示す1次微分値が、両方プラス(+)又は両方マイナス(−)の場合(図12の(A)のCASE「A」に該当する場合)、IO[Ad]とIO[Ad−1]が等しいと判定してステップST203に移行する。
ステップST203で、2値化予測部150は、上述のステップST201で抽出したアナログデータの中で最も変化量の少ない2点の値を検出してステップST204に移行する。
ステップST204で、2値化予測部150は、上述のステップST203で検出した最も変化量の少ない2点の値から中間値を求め、図12の(B)に示すテーブルTB2のPOW[Ad]に該中間値を、変曲点間の信号の強度を示すレベル情報として設定する。例えば、このテーブルTB2のPOW[5]に中間値「35」を、変曲点間の信号の強度を示すレベル情報として設定する。続いてステップST208に移行する。
上述のステップST202で、変曲点の向き(変化量)を示すIO[Ad]とIO[Ad−1]が等しくない場合、ステップST205に移行する。
ステップST205で、2値化予測部150は、変曲点の向きを示すIO[Ad]がプラス(+)であるか否かを判定する。図12の(A)に示すように、変曲点の向きを示す1次微分値が、IO[Ad−1]がマイナス(−)で、IO[Ad]がプラス(+)の場合(図12の(A)のCASE「B」に該当する場合)、ステップST206に移行する。
ステップST206で、2値化予測部150は、上述のステップST201で抽出したアナログデータの中で最小値を検出して、図12の(B)に示すテーブルTB2のPOW[Ad]に該最小値を、変曲点間の信号の強度を示すレベル情報として設定する。例えば、このテーブルTB2のPOW[2]に最小値「31」を、変曲点間の信号の強度を示すレベル情報として設定する。続いてステップST208に移行する。
上述のステップST205で、2値化予測部150は、変曲点の向きを示すIO[Ad]がプラス(+)でない、すなわち図12の(A)に示すように、変曲点の向きを示す1次微分値が、IO[Ad−1]がプラス(+)で、IO[Ad]がマイナス(−)であると判定した場合(図12の(A)のCASE「C」に該当する場合)、ステップST207に移行する。
ステップST207で、2値化予測部150は、上述のステップST201で抽出したアナログデータの中で最大値を検出して、図12の(B)に示すテーブルTB2のPOW[Ad]に該最大値を、変曲点間の信号の強度を示すレベル情報として設定する。例えば、このテーブルTB2のPOW[3]に最大値「35」を、変曲点間の信号の強度を示すレベル情報として設定する。続いてステップST208に移行する。
ステップST208で、2値化予測部150は、図10に示したテーブルTB1のBBDのアドレス「Ad」を現在のアドレスから次のアドレスに変更してステップST209に移行する。
ステップST209で、2値化予測部150は、図10に示したテーブルTB1における次のアドレスのBBDが存在するか否かを判定する。次のアドレスのBBDが存在すると判定した場合、ステップSTST201に戻り、次のアドレスのBBDが存在しないと判定した場合、図8に示したフローチャートのステップST3に移行する。このようにして、変曲点間のレベル計算を行う。なお、図12の(B)のテーブルTB2には、説明の理解を容易にするために、変曲点の向きを示すIO[Ad]とIO[Ad−1]の関係を表したCASE「A」〜CASE「C」を記載している。
続いて、図8に示したフローチャートのステップST3の処理について説明する。図8に示すステップST3で、2値化予測部150は、マージン計算及び切り出し処理を行う。図14の(A)に示すテーブルTB3のBBD[Ad]、IO[Ad]を参照して、スタートマージン及びエンドマージンを検出して該マージンを切り出す。
この例では、スタートマージンとして決定する条件として、IO[Ad]がマイナスであり、かつ、BBD[Ad]が所定範囲における2値化バーコードデータの最小値の所定倍(例えば6倍)よりも大きいことを満たす場合とする。
また、エンドマージンとして決定する条件として、BBD[Ad]が所定範囲における2値化バーコードデータの最小値の所定倍(例えば12倍)よりも大きいか、又は、BBDのデータが有効な範囲の最後を満たす場合とする。
図15は、マージン計算及び切り出し処理を行う処理の一例を示すフローチャートであり、図8のステップST3の処理内容を詳細に説明するためのものである。
図15に示すステップST300で、2値化予測部150は、図14の(A)に示すテーブルTB3のBBD[Ad]のアドレス「Ad」に「0」を設定して初期化する。続いてステップST301に移行する。
ステップST301で、2値化予測部150は、図14の(A)に示すテーブルTB3を参照して、変曲点の向きを示すIO[Ad]がマイナス(−)であるか否かを判定する。IO[Ad]がマイナス(−)であると判定した場合、ステップST302に移行する。
ステップST302で、2値化予測部150は、テーブルTB3のBBD[Ad+1]からBBD[Ad+12]までの間で、2値化バーコードデータの最小値を検出してステップST303に移行する。
ステップST303で、2値化予測部150は、上述のステップST302で求めたBBDの最小値を所定倍した値とBBD[Ad]の2値化バーコードデータとを比較して、BBD[Ad]の2値化バーコードデータが大きければ、ステップST304に移行する。なお、この例では、BBDの最小値を6倍している。
ステップST304で、2値化予測部150は、図14の(A)のテーブルTB3のBBD[0]にスタートマージンを示す情報を設定する。例えば、図14の(B)のテーブルTB4に示すように、BBD[−]にスタートマージンを示す「st_margin」を設定する。スタートマージンを示す「st_margin」を設定後、図14の(B)のテーブルTB4に示すように、BBD[Ad]のアドレスをシフトさせる。例えば、図14の(B)のBBD[0]には、最初の2値化バーコードデータを示す「15」を設定する。続いてステップST305に移行する。
ステップST305で、2値化予測部150は、図14の(A)のテーブルTB3のBBDのアドレス「Ad」を現在のアドレスから次のアドレスに変更してステップST306に移行する。
ステップST306で、2値化予測部150は、図14の(A)のテーブルTB3における次のアドレスのBBDが存在するか否かを判定する。次のアドレスのBBDが存在しないと判定した場合、ステップST307に移行する。
ステップST307で、2値化予測部150は、テーブルTB3の現在のアドレスが示すBBD[Ad]にエンドマージンを示す「ed_margin」を設定してステップST311に移行する。
上述のステップST306で、2値化予測部150は、図14の(A)のテーブルTB3における次のアドレスのBBDが存在すると判定した場合、ステップST308に移行する。
ステップST308で、2値化予測部150は、上述のステップST302で求めたBBDの最小値を所定倍した値と現在のBBD[Ad]の2値化バーコードデータとを比較して、BBD[Ad]の2値化バーコードデータが大きければ、ステップST309に移行する。なお、この例では、BBDの最小値を12倍している。
ステップST309で、2値化予測部150は、図14の(B)のテーブルTB4に示すように、BBD[−]にエンドマージンを示す「ed_margin」を設定してステップST310に移行する。
ステップST310で、2値化予測部150は、図14の(A)のテーブルTB3のBBDのアドレス「Ad」を現在のアドレスから次のアドレスに変更してステップST311に移行する。
ステップST311で、2値化予測部150は、図14の(A)のテーブルTB3を参照してスタートマージンからエンドマージンまでのBBD、IO及びPOWを抽出して、図14の(B)に示すテーブルTB4を作成してステップST312に移行する。
ステップST312で、2値化予測部150は、図14の(A)のテーブルTB3における次のアドレスのBBDが存在するか否かを判定する。次のアドレスのBBDが存在すると判定した場合、ステップST301に戻る。次のアドレスのBBDが存在しないと判定した場合、図8に示したフローチャートのステップST4に移行する。このようにして、マージン計算及び切り出し処理を行う。
続いて、図8に示したフローチャートのステップST4の処理について説明する。図8に示すステップST4で、2値化予測部150は、白色、黒色、灰色の境界線の計算を行う。図17は、白色、黒色、灰色の境界線の計算を行う処理の一例を示すフローチャートであり、図8のステップST4の処理内容を詳細に説明するためのものである。
図17に示すステップST400で、2値化予測部150は、図14の(B)に示したテーブルTB4を参照して、変曲点の向きを示すIO[Ad]とIO[Ad−1]が同じ符号を示すPOWデータのみを抽出する。図16は、POWデータの抽出例を示す図である。図16に示す「POW_A」は、図14の(B)のIO[Ad]とIO[Ad−1]が同じ符号を示すPOWデータのみを抽出したものであり、「39」、「35」、「34」、「36」、「36」及び「44」となる。続いてステップST401に移行する。
ステップST401で、2値化予測部150は、IO[Ad]とIO[Ad−1]が同じ符号を示すPOW_Aが存在するか否かを判定する。POW_Aが存在すると判定した場合、ステップST402に移行する。
ステップST402で、2値化予測部150は、IO[Ad]とIO[Ad−1]が異なる符号を示すPOWデータのみを抽出する。図16に示す「POW_B」は、図14の(B)のIO[Ad]とIO[Ad−1]が異なる符号を示すPOWデータのみを抽出したものであり、「31」や「35」などがある。続いてステップST403に移行する。
ステップST403で、2値化予測部150は、POW_Bのデータの中から最大値を検出して、該最大値を白色の境界線の値(W_LINE)に設定する。例えば、図16のPOW_Bによると、このW_LINEは「58」となる。続いてステップST404に移行する。
ステップST404で、2値化予測部150は、POW_Bのデータの中から最小値を検出して、該最小値を黒色の境界線の値(B_LINE)に設定する。例えば、図16のPOW_Bによると、このB_LINEは「29」となる。続いてステップST405に移行する。
ステップST405で、2値化予測部150は、POW_Aのデータの中から3番目に大きい値と最も小さい値の中間値を求め、該中間値を灰色の境界線の値(G_LINE)として算出する。例えば、図16に示すPOW_Aによると、3番目に大きい値は「36」となり、最も小さい値は「34」となり、G_LINEは「35」となる。POW_Aのデータの中から3番目に大きい値を選択した理由は、レベルが大きくなる傾向があるスタートマージンとエンドマージンの付近のデータをカットするためである。続いてステップST406に移行する。
ステップST406で、2値化予測部150は、白色と灰色の境界線の値(WG_LINE)を以下の式(1)から求める。
WG_LINE=G_LINE+(W_LINE−G_LINE)×0.25・・・(1)
例えば、上述のステップST403,ST405で求めたW_LINE=「58」、G_LINE=「35」を式(1)に代入すると、WG_LINEは、小数点以下を四捨五入して「41」になる。続いてステップST407に移行する。
ステップST407で、2値化予測部150は、黒色と灰色の境界線の値(GB_LINE)を以下の式(2)から求める。
GB_LINE=G_LINE−(G_LINE−B_LINE)×0.25・・・(2)
例えば、上述のステップST404,ST405で求めたB_LINE=「29」、G_LINE=「35」を式(2)に代入すると、GB_LINEは、小数点以下を四捨五入して「34」になる。このようにして、白色、黒色、灰色の境界線を求めて、図8に示したフローチャートのステップST5に移行する。
また、上述のステップST401で、2値化予測部150は、IO[Ad]とIO[Ad−1]が同じ符号を示すPOW_Aが存在しないと判定した場合、ステップST408に移行する。
ステップST408で、2値化予測部150は、図14の(B)に示すPOWの全データの中から最大値を検出して、該最大値を白色の境界線の値(W_LINE)に設定してステップST409に移行する。
ステップST409で、2値化予測部150は、図14の(B)に示すPOWの全データの中から最小値を検出して、該最小値を黒色の境界線の値(B_LINE)に設定してステップST410に移行する。
ステップST410で、2値化予測部150は、ステップST408で設定したW_LINEとステップST409で設定したB_LINEの中間値を求め、該中間値を灰色の境界線の値(G_LINE)として算出する。続いてステップST406に移行する。このようにして、IO[Ad]とIO[Ad−1]が同じ符号を示すPOW_Aが存在しない場合は、白色、黒色、灰色の境界線を求める。
続いて、図8に示したフローチャートのステップST5の処理について説明する。図8に示すステップST5で、2値化予測部150は、変曲点間の色を振り分ける計算を行う。この例では、変曲点の向きを示すIO[Ad]、2値化バーコードデータの信号の強度を示すレベル情報POW[Ad]、白色と灰色の境界線の値(WG_LINE)、黒色と灰色の境界線の値(GB_LINE)を用いて色の振り分けを行う。
図18は、色の振り分け例を示すテーブルTB5を示す図である。図18に示すテーブルTB5には、色の振り分けを示すCOLOR[Ad]に、偶数個の1値幅バーが存在することを示す「偶数灰色(EG)」が設定されている。この「偶数灰色(EG)」を設定するためには、図14の(B)のテーブルTB4を参照して、IO[Ad−1]とIO[Ad]が同じ符号を満たすことを条件とする。
図19の(A)は、色の振り分け例の条件を示す図である。図19の(A)に示すように、IO[Ad]がプラス(+)であり、POW[Ad]がWG_LINEよりも大きい場合には、奇数個の灰色(G)となる。例えば、図14の(B)に示すアドレス「Ad」が「18」の場合、IO[18]がプラス(+)であり、POW[18]が「50」であり、WG_LINE(=41)よりも大きくなり、図19の(B)のテーブルTB6に示すように「奇数灰色(OG)」となる。また、図19の(A)に示すように、IO[Ad]がプラス(+)であり、POW[Ad]がWG_LINEとGB_LINEの間である場合にも、「奇数灰色(OG)」となる。
IO[Ad]がプラス(+)であり、POW[Ad]がGB_LINEよりも小さい場合には、黒色(B)となる。例えば、図14の(B)に示すアドレス「Ad」が「1」の場合、IO[1]がプラス(+)であり、POW[1]が「31」であり、GB_LINE(=34)よりも小さくなり、図19の(B)のテーブルTB6に示すように「黒色(B)」となる。
IO[Ad]がマイナス(−)であり、POW[Ad]がWG_LINEよりも大きい場合には、白色(W)となる。例えば、図14の(B)に示すアドレス「Ad」が「5」の場合、IO[5]がマイナス(−)であり、POW[5]が「45」であり、WG_LINE(=41)よりも大きくなり、図19の(B)のテーブルTB6に示すように「白色(W)」となる。
IO[Ad]がマイナス(−)であり、POW[Ad]がWG_LINEとGB_LINEの間である場合には、奇数個の灰色(G)となる。例えば、図14の(B)に示すアドレス「Ad」が「2」の場合、IO[2]がマイナス(−)であり、POW[2]が「35」であり、POW[2]の値「35」が、WG_LINE(=41)とGB_LINE(=34)の間であり、図19の(B)のテーブルTB6に示すように「奇数灰色(OG)」となる。また、IO[Ad]がマイナス(−)であり、POW[Ad]がGB_LINEよりも小さい場合にも、奇数個の灰色(G)となる。
図20は、変曲点間の色を振り分ける計算を行う処理の一例を示すフローチャートであり、図8のステップST5の処理内容を詳細に説明するためのものである。図20に示すステップST500で、2値化予測部150は、図14の(B)に示したテーブルTB4のBBD[Ad]のアドレス「Ad」に「0」を設定して初期化する。続いてステップST501に移行する。
ステップST501で、2値化予測部150は、変曲点の向きを示すテーブルTB4のIO[Ad],IO[Ad−1]を参照する。変曲点の向きを示すIO[Ad]とIO[Ad−1]が等しいか否かを判定する。IO[Ad]とIO[Ad−1]が等しいと判定した場合、ステップST511に移行する。
ステップST511で、2値化予測部150は、図19の(B)のテーブルTB6における色の振り分けを示すCOLOR[Ad]に、「偶数灰色(EG)」を設定してステップST509に移行する。
また、上述のステップST501で、2値化予測部150は、IO[Ad]とIO[Ad−1]が等しくないと判定した場合、ステップST502に移行する。
ステップST502で、2値化予測部150は、変曲点の向きを示すIO[Ad]がプラス(+)であるか否かを判定する。IO[Ad]がプラス(+)であると判定した場合、ステップST503に移行する。
ステップST503で、2値化予測部150は、2値化バーコードデータの信号の強度を示すPOW[Ad]が黒色と灰色の境界線の値(GB_LINE)より小さいか否かを判定する。POW[Ad]がGB_LINEより小さいと判定した場合、ステップST504に移行する。
ステップST504で、2値化予測部150は、図19の(B)のテーブルTB6における色の振り分けを示すCOLOR[Ad]に、「黒色(B)」を設定してステップST509に移行する。
上述のステップST503で、2値化予測部150は、2値化バーコードデータの信号の強度を示すPOW[Ad]がGB_LINE以上と判定した場合、ステップST505に移行する。
ステップST505で、2値化予測部150は、図19の(B)のテーブルTB6における色の振り分けを示すCOLOR[Ad]に、「奇数灰色(OG)」を設定してステップST509に移行する。
上述のステップST502で、2値化予測部150は、変曲点の向きを示すIO[Ad]がプラス(+)でないと判定した場合、ステップST506に移行する。
ステップST506で、2値化予測部150は、2値化バーコードデータの信号の強度を示すPOW[Ad]が白色と灰色の境界線の値(WG_LINE)より大きいか否かを判定する。POW[Ad]がWG_LINEより大きいと判定した場合、ステップST507に移行する。
ステップST507で、2値化予測部150は、図19の(B)のテーブルTB6における色の振り分けを示すCOLOR[Ad]に、「白色(W)」を設定してステップST509に移行する。
上述のステップST506で、2値化予測部150は、2値化バーコードデータの信号の強度を示すPOW[Ad]がWG_LINE以下と判定した場合、ステップST508に移行する。
ステップST508で、2値化予測部150は、図19の(B)のテーブルTB6における色の振り分けを示すCOLOR[Ad]に、「奇数灰色(OG)」を設定してステップST509に移行する。
ステップST509で、2値化予測部150は、図14の(B)に示したテーブルTB4のBBDのアドレス「Ad」を現在のアドレスから次のアドレスに変更してステップST510に移行する。
ステップST510で、2値化予測部150は、図14の(B)に示したテーブルTB4における次のアドレスのBBDが存在するか否かを判定する。次のアドレスのBBDが存在すると判定した場合、ステップSTST501に戻り、次のアドレスのBBDが存在しないと判定した場合、図8に示したフローチャートのステップST6に移行する。このようにして、変曲点間の色を振り分ける。
続いて、図8に示したフローチャートのステップST6の処理について説明する。図8に示すステップST6で、2値化予測部150は、図14の(B)のテーブルTB4を参照して、基準最小幅を計算する。
例えば、変曲点の向きを示すIO[Ad]とIO[Ad−1]の符号が同じ2値化バーコードデータのみを抽出して、これらのデータを「BBD_A」と称する。図21の(A)は、図14の(B)のテーブルTB4から抽出したBBD_Aを列挙した図であり、BBD_Aは、「15」,「14」,「14」,「13」,「23」及び「12」である。
BBD_Aは、基準最小幅(1値幅バー)の白色と黒色が偶数個しか存在しないデータなので、複数の最小BBD_Aは、白色と黒色の1値幅バーが1つずつ存在する。従って、複数の最小BBD_Aを平均して1つの最小BBD_Aを求め、平均された最小BBD_Aを半分にすると、基準となる1値幅バーを得ることができる。
一方で、変曲点の向きを示すIO[Ad]とIO[Ad−1]の符号が異なる2値化バーコードデータのみを抽出して、これらのデータを「BBD_B」と称する。図21の(A)は、図14の(B)のテーブルTB4から抽出したBBD_Bを列挙した図であり、BBD_Bは、「13」や「7」などである。
BBD_Bは、1値幅バーや多値幅バーなどの様々なバーが存在する。最小BBD_Bは、白色又は黒色の1値幅バーが1つ存在する。従って、複数の最小BBD_Bを平均して、基準となる1値幅バーを得ることができる。
図21の(A)に示すBBD_Aによると、最も細いBBD_Aは1値幅バーが2本であり、次に細いBBD_Aは1値幅バーが4本なので2倍の太さを持つ。従って、最小BBD_Aを求める場合、BBD_Aのデータの中から、最小幅のBBD_Aを検出する。そして、次に細いBBD_Aは2倍以上の太さなので、これを検出しないようにするために、該最小幅のBBD_Aを1.5倍した値のデータまでを抽出する。抽出した結果を図21の(B)のBBD_Aに示す。図21の(B)によれば、BBD_Aの値は、「15」,「14」,「14」,「13」及び「12」になる。
また、図21の(A)に示すBBD_Bによると、最も細いBBD_Bは1値幅バーが1本であり、次に細いBBD_Bは1値幅バーの集合か、又は多値幅バーであるので2倍以上の太さを持つ。従って、最小BBD_Bを求める場合、図21の(A)のBBD_Bにおけるデータの中から、最小幅のBBD_Bを検出する。そして、次に細いBBD_Bは2倍以上の太さなので、これを検出しないようにするために、該最小幅のBBD_Bを1.5倍した値のデータまでを抽出する。抽出した結果を図21の(B)のBBD_Bに示す。図21の(B)によれば、BBD_Bの値は、「7」,「7」及び「8」になる。
図21の(B)に示すBBD_AとBBD_Bを用いて、基準となる最小幅を求める。例えば、BBD_Aの平均値は「13.6」となり、2本分の1値幅バーが含まれている。従って、この値の半分の値「6.8」が基準最小幅(BBD_ref_A)となる。BBD_Bの平均値は「7.3」となり、1本分の1値幅バーが含まれている。従って、この値「7.3」が基準最小幅(BBD_ref_B)となる。
仮に、BBD_Aの最小幅が2本分の1値幅バーではなくて4本分の1値幅バーが含まれ、BBD_Bの最小幅が1本分の1値幅バーの場合、BBD_ref_AはBBD_ref_Bの略2倍の値となる。この場合、BBD_ref_A>BBD_ref_B×1.5の条件を満たすときには、基準最小幅には、BBD_ref_Bを使用する。
逆に、BBD_Aの最小幅が2本分の1値幅バーが含まれ、BBD_Bの最小幅が2値幅バーの場合、BBD_ref_BはBBD_ref_Aの略2倍の値となる。この場合、BBD_ref_B>BBD_ref_A×1.5の条件を満たすときには、基準最小幅には、BBD_ref_Aを使用する。
BBD_Aの最小幅が2本分の1値幅バーが含まれ、BBD_Bの最小幅が1本分の1値幅バーの場合はどちらの値も有効だが、白色と黒色の太さが違う場合にはBBD_ref_Bの信頼性が低くなる。このため、BBD_ref_Aを使用する。従って、BBD_ref_A>BBD_ref_B×1.5を満たす場合のみBBD_ref_Bを基準とする最小幅とし、それ以外ではBBD_ref_Aを基準とする最小幅とする。この例では、BBD_ref_A>BBD_ref_B×1.5を満たさないので、基準となる最小幅は、BBD_ref_Aの「6.8」となる。
図22は、基準最小幅の計算を行う処理の一例を示すフローチャートであり、図8のステップST6の処理内容を詳細に説明するためのものである。図22に示すステップST600で、2値化予測部150は、図14の(B)に示したテーブルTB4において、変曲点の向きを示すIO[Ad]とIO[Ad−1]の符号が等しい2値化バーコードデータ(BBD_A)のみを検出してステップST601に移行する。
ステップST601で、2値化予測部150は、IO[Ad]とIO[Ad−1]の符号が等しい2値化バーコードデータ(BBD_A)が存在するか否かを判定する。BBD_Aが存在すると判定した場合、ステップST602に移行する。
ステップSTで、2値化予測部150は、変曲点の向きを示すIO[Ad]とIO[Ad−1]の符号が異なる2値化バーコードデータ(BBD_B)を検出してステップST603に移行する。
ステップST603で、2値化予測部150は、抽出したBBD_Aのデータの中から、最小幅のBBD_Aを検出する。例えば、図21の(A)に示す「BBD_A」のデータの中から最小幅の「12」を検出する。続いてステップST604に移行する。
ステップST604で、2値化予測部150は、最小幅のBBD_Aを1.5倍した値(例えば、最小幅12の1.5倍の18)のデータまでを抽出する。例えば、図21の(B)によれば、BBD_Aの値は、「15」,「14」,「14」,「13」及び「12」になる。続いてステップST605に移行する。
ステップST605で、2値化予測部150は、BBD_Aから基準最小幅を算出する。例えば、図21の(B)に示すBBD_Aの値を平均して最小BBD_Aを求め、平均された最小BBD_Aを半分にして、基準となる1値幅バーを算出する。例えば、図21の(B)によれば、基準最小幅(BBD_ref_A)は、「6.8」になる。もちろん、他の方法によりBBD_ref_Aを算出してもよい。例えば、図21の(B)に示すBBD_Aの中から最大幅を求め、該最大幅のBBD_AとステップST603の最小幅のBBD_Aとを平均して求めてもよい。続いてステップST606に移行する。
ステップST606で、2値化予測部150は、上述のステップST602で抽出したBBD_Bのデータの中から、最小幅のBBD_Bを検出する。例えば、図21の(A)に示す「BBD_B」のデータの中から最小幅の「7」を検出する。続いてステップST607に移行する。
ステップST607で、2値化予測部150は、最小幅のBBD_Bを1.5倍した値(例えば、最小幅7の1.5倍の10.5)のデータまでを抽出する。例えば、図21の(B)によれば、BBD_Bの値は、「7」,「7」及び「8」になる。続いてステップST608に移行する。
ステップST608で、2値化予測部150は、BBD_Bから基準最小幅を算出する。例えば、図21の(B)に示すBBD_Bの値を平均して最小BBD_Bを求めて、基準となる1値幅バーを算出する。例えば、図21の(B)によれば、基準最小幅(BBD_ref_B)は、「7.3」になる。もちろん、他の方法によりBBD_ref_Bを算出してもよい。例えば、図21の(B)に示すBBD_Bの中から最大幅を求め、該最大幅のBBD_BとステップST606の最小幅のBBD_Bとを平均して求めてもよい。続いてステップST609に移行する。
ステップST609で、2値化予測部150は、BBD_ref_A>BBD_ref_B×1.5の条件を満たすか否かを判定する。BBD_ref_A>BBD_ref_B×1.5の条件を満たすときには、ステップST610に移行する。
ステップST610で、2値化予測部150は、基準最小幅には、BBD_ref_Bを設定する。また、上述のステップST609で、2値化予測部150は、BBD_ref_A>BBD_ref_B×1.5の条件を満たさないときには、ステップST611に移行する。ステップST611で、2値化予測部150は、基準最小幅には、BBD_ref_Aを設定する。
上述のステップST601で、2値化予測部150は、IO[Ad]とIO[Ad−1]の符号が等しい2値化バーコードデータ(BBD_A)が存在しないと判定した場合、ステップST612に移行する。
ステップST612で、2値化予測部150は、全ての2値化バーコードデータ(BBD)の中から、最小幅のBBDを検出してステップST613に移行する。
ステップST613で、2値化予測部150は、最小幅のBBDを1.5倍した値のデータまでを抽出してステップST614に移行する。
ステップST614で、2値化予測部150は、ステップST613で抽出したBBDから基準最小幅を算出する。例えば、抽出したBBDの中から最大幅を求め、該最大幅のBBDとステップST612の最小幅のBBDとを平均して、基準最小幅(BBD_ref)を算出する。続いてステップST615に移行する。ステップST615で、2値化予測部150は、基準最小幅には、BBD_refを設定して図8に示したフローチャートのステップST7に移行する。このようにして、基準最小幅の計算を行う。
続いて、図8に示したフローチャートのステップST7の処理について説明する。図8に示すステップST7で、2値化予測部150は、灰色のバーの分割処理を行う。例えば、図19の(B)に示したテーブルTB6を参照して、灰色のバーの分割処理を行う。このテーブルTB6の色の振り分けを示すCOLOR[Ad]が「白色(W)」及び「黒色(B)」の場合には分割しない。COLOR[Ad]が「偶数灰色(EG)」の場合には、偶数個になるように分割する。COLOR[Ad]が「奇数灰色(OG)」の場合には、奇数個になるように分割する。
図23の(A)は、灰色を示すBBD[Ad]を奇数に分割する例を示す図である。図23の(A)に示す分割数Div_n[Ad]は、2値化バーコードデータBBD[Ad]を基準最小幅BBD_refで除算して求める。例えば、図19の(B)のテーブルTB6のBBD[2]の「7」を、基準最小幅BBD_ref(=6.8)で除算すると、図23の(A)の「0〜2」に該当するので、分割数Div_n[Ad]は、図24の(A)に示すように「1」となる。
図23の(B)は、灰色を示すBBD[Ad]を偶数に分割する例を示す図である。図23の(B)に示す分割数Div_n[Ad]は、2値化バーコードデータBBD[Ad]を基準最小幅BBD_refで除算して求める。例えば、図19の(B)のテーブルTB6のBBD[0]の「15」を、基準最小幅BBD_ref(=6.8)で除算すると、図23の(B)の「0〜3」に該当するので、分割数Div_n[Ad]は、図24の(A)に示すように「2」となる。図24の(A)は、灰色バーの分割例を示すテーブルTB7の一例を示す図である。図24の(A)のテーブルTB7に示すように、COLOR[Ad]が「偶数灰色(EG)」又は「奇数灰色(OG)」を示すBBD[Ad]の分割数Div_n[Ad]を求める。
図24の(B)は、分割した2値化バーコードデータF_BBDを示すテーブルTB8である。図24の(B)に示すテーブルTB8のF_BBDは、2値化バーコードデータBBD[Ad]を分割数Div_n[Ad]で除算して求める。例えば、テーブルTB8のBBD[0]の「15」を分割数Div_n[2]で除算して、F_BBDの値「7.5」を求める。同様にして、COLOR[Ad]が「偶数灰色(EG)」又は「奇数灰色(OG)」を示すBBD[Ad]のF_BBDを求める。
図25は、分割した2値化バーコードデータF_BBDの最小分解能を「1」に正規化したテーブルTB9である。図25に示すテーブルTB9によると、「reference」には1値幅バーを示す「1.0」又は多値幅バーを示す「2.5」が設定されて、バーコードが再現されている。
図26は、灰色のバーの分割処理を実施するフローチャートであり、図8のステップST7の処理内容を詳細に説明するためのものである。図26に示すステップST700で、2値化予測部150は、図19の(B)のテーブルTB6のアドレス「Ad」に「0」を設定して初期化する。続いてステップST701に移行する。
ステップST701で、2値化予測部150は、図19の(B)のテーブルTB6を参照して、色の振り分けを示すCOLOR[Ad]が白色(W)であるか否かを判定する。COLOR[Ad]が白色(W)でないと判定した場合、ステップST702に移行する。
ステップST702で、2値化予測部150は、図19の(B)のテーブルTB6を参照して、色の振り分けを示すCOLOR[Ad]が黒色(B)であるか否かを判定する。COLOR[Ad]が黒色(B)でないと判定した場合、ステップST703に移行する。
ステップST703で、2値化予測部150は、図19の(B)のテーブルTB6を参照して、色の振り分けを示すCOLOR[Ad]が偶数の灰色(EG)であるか否かを判定する。COLOR[Ad]が偶数の灰色(EG)であると判定した場合、ステップST704に移行する。
ステップST704で、2値化予測部150は、2値化バーコードデータBBD[Ad]を基準最小幅BBD_refで除算する。例えば、図19の(B)のテーブルTB6のBBD[0]の「15」を、基準最小幅BBD_ref(=6.8)で除算してステップST705に移行する。
ステップST705で、2値化予測部150は、2値化バーコードデータBBD[Ad]を基準最小幅BBD_refで除算した値が、図23の(B)のどの範囲に該当するか判定する。例えば、図19の(B)のテーブルTB6のBBD[0]の「15」を、基準最小幅BBD_ref(=6.8)で除算した値は、図23の(B)の「0〜3」に該当するので、分割数Div_n[Ad]は、図24の(A)に示すように「2」となる。続いてステップST706に移行する。
ステップST706で、2値化予測部150は、2値化バーコードデータのアドレスを次のアドレスに進めてステップST707に移行する。
ステップST707で、2値化予測部150は、2値化バーコードデータBBD[Ad]を分割数Div_n[Ad]で除算して、分割された2値化バーコードデータF_BBD算出する。例えば、図24の(B)のテーブルTB8におけるBBD[0]の「15」を分割数Div_n[2]で除算して、F_BBDの値「7.5」を算出する。続いてステップST708に移行する。
ステップST708で、2値化予測部150は、図19の(B)に示したテーブルTB6における次のアドレスのBBDが存在するか否かを判定する。次のアドレスのBBDが存在すると判定した場合、ステップSTST701に戻る。
上述のステップST703で、2値化予測部150は、図19の(B)のテーブルTB6を参照して、色の振り分けを示すCOLOR[Ad]が奇数の灰色(OG)であると判定した場合、ステップST709に移行する。
ステップST709で、2値化予測部150は、2値化バーコードデータBBD[Ad]を基準最小幅BBD_refで除算する。例えば、図19の(B)のテーブルTB6のBBD[2]の「7」を、基準最小幅BBD_ref(=6.8)で除算してステップST710に移行する。
ステップST710で、2値化予測部150は、2値化バーコードデータBBD[Ad]を基準最小幅BBD_refで除算した値が、図23の(A)のどの範囲に該当するか判定する。例えば、図19の(B)のテーブルTB6のBBD[2]の「7」を、基準最小幅BBD_ref(=6.8)で除算した値は、図23の(A)の「0〜2」に該当するので、分割数Div_n[Ad]は、図24の(A)に示すように「1」となる。続いてステップST706に移行する。
上述のステップST701,ST702で、2値化予測部150は、図19の(B)のテーブルTB6を参照して、色の振り分けを示すCOLOR[Ad]が白色(W)又は黒色(B)であると判定した場合、ステップST711に移行する。
ステップST711で、2値化予測部150は、2値化バーコードデータBBDを分割しないので、図24の(A)に示すテーブルTB7の分割数Div_n[Ad]に「1」を設定してステップST706に移行する。
上述のステップST708で、2値化予測部150は、図19の(B)に示したテーブルTB6における次のアドレスのBBDが存在しないと判定した場合、図8に示すステップST8に移行する。
図8のステップST8では、デコード処理を行う。例えば、図25に示したテーブルTB9の「reference」からバーコードで表された情報を復号する。
このように、第1の実施の形態に係るバーコードスキャナ100及びバーコード読取方法によれば、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて2値化バーコードデータを、反射光の強度の高い白色、反射光の強度の低い黒色、および白色と黒色の略中間を示す灰色に分類する。そして、灰色が示す2値化バーコードデータを、最小幅の2値化バーコードデータで除算して灰色の2値化バーコードデータを分割してバーコード情報を求める。
これにより、白色と黒色の略中間を示す灰色の2値化バーコードデータを認識できるようになる。従って、劣化したバーコードの信号波形からバーコードを正しく認識できるようになる。これにより、システムリソースを大幅に増やすことなく、バーコードの読み取り精度を向上できるようになる。
<第2の実施の形態>
本実施の形態では、二次元コードを読み取るコードスキャナ200について説明する。前述の第1の実施の形態及び実施例と同じ名称及び符号のものは同じ機能を有するので、その説明を省略する。
図27は、第2の実施の形態に係るコードスキャナ200の構成例を示すブロック図である。図27に示すように、コードスキャナ200は、画像取込手段の一例である光学ヘッド部201及び輝度ヒストグラム作成部を有する2値化予測部204からなる。光学ヘッド部201は、レンズ202及び固体撮像素子の一例であるCMOSイメージセンサ(以下、CMOS203という)を備える。
レンズ202は、例えば、光学レンズであり、図28の(A)に示すPDF417や、図28の(B)に示すQRコード(登録商標)や、図28(C)に示すRSS Expanded等の二次元コードの画像データを光学ヘッド部201内に取り込む。レンズ202にはCMOS203が設けられる。CMOS203は、レンズ202が取り入れた画像データを撮像し、該撮像した画像データをアナログの画像データからデジタルの輝度値で表現される画像データに変換して、出力信号として2値化予測部204に出力する。
2値化予測部204は、CMOS203から出力された出力信号に含まれる画像データの輝度値を縦横のライン毎に測定する。2値化予測部204は、ライン毎に測定した輝度値から図29に示す輝度ヒストグラムを図示しない輝度ヒストグラム作成部で作成する。(図29は、縦軸を輝度値とし、横軸を位置xとしたときの輝度ヒストグラム例を示す図である。)
2値化予測部204は、輝度ヒストグラム作成部で作成された輝度ヒストグラムから二次元コードの変曲点I1,I2,I3を検出して、変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて2値化コードデータを、輝度値の高い白色、輝度値の低い黒色及び白色と黒色の略中間を示す灰色に分類する。そして、灰色が示す2値化コードデータを、最小幅の2値化コードデータで除算して灰色の2値化コードデータを分割して画像データの2値化信号を求める。
2値化予測部204は、上述の処理を縦横のライン毎で行うことによって、二次元コードに対する2値化信号を求める。この2値化信号は、後段の不図示の復号化回路によりデコードされて二次元コードのコード記号として読み取られる。
2値化予測部204の詳細な構成については、図2で説明した2値化予測部150の微分処理部153の代わりに輝度ヒストグラム作成部を設け、その他は2値化予測部150と同じであるので、その説明を省略する。
このように、第2の実施の形態に係るコードスキャナ200によれば、二次元コードを含む画像を取り込んで、この画像をデジタルの輝度値で表現される画像データに変換し、該変換した画像データの輝度値を縦横のライン毎で測定して輝度ヒストグラムを作成する。作成した輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求め、変曲点間の信号の強度を示すレベル情報を求める。この求めたレベル情報に基づいて2値化コード記号データを、輝度値の高い白色、輝度値の低い黒色及び白色と黒色の略中間を示す灰色に分類する。そして、灰色の情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して該灰色の情報の2値化コード記号データを分割してコード記号情報を求める。
これにより、二次元コードの信号波形が劣化していても、二次元コードを正しく認識できるようになる。この結果、システムリソースを大幅に増やすことなく、二次元コードの読み取り精度を向上できるようになる。
本発明は、バーコードや二次元コードに向けて照射した光の反射光を受光してコード情報を読み取るコードスキャナに適用して極めて好適である。
100・・・バーコードスキャナ、150,204・・・2値化予測部、153・・・微分処理部、156・・・BBD計算部(2値化コード記号データ計算部)、159・・・CPU(演算部)、200・・・コードスキャナ

Claims (8)

  1. 光反射率の異なる部分で構成されるコード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求める微分処理部と、
    前記微分信号から変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求める2値化コード記号データ計算部と、
    前記2値化コード記号データと前記変曲点の変化量に基づいて、前記読取信号のコード記号情報を求める演算部とを備え、
    前記演算部は、
    前記変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて前記2値化コード記号データを、反射光の強度の高い第1の色情報、反射光の強度の低い第2の色情報、および前記第1の色情報と前記第2の色情報の略中間を示す第3の色情報に分類し、前記第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して該第3の色情報の2値化コード記号データを分割して前記コード記号情報を求めることを特徴とする光学的情報読取装置。
  2. 画像を取り込んで、前記画像をデジタルの輝度値で表現される画像データに変換する画像取込手段と、
    前記画像取込手段によって変換された前記画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成する輝度ヒストグラム作成手段と、
    前記輝度ヒストグラム作成手段で作成された輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求める2値化コード記号データ計算部と、
    前記2値化コード記号データと前記変曲点の変化量に基づいて、前記画像データのコード記号情報を求める演算部とを備え、
    前記演算部は、
    前記変曲点間の信号の強度を示すレベル情報を求め、該レベル情報に基づいて前記2値化コード記号データを、輝度値の高い第1の色情報、輝度値の低い第2の色情報、および前記第1の色情報と前記第2の色情報の略中間を示す第3の色情報に分類し、前記第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して該第3の色情報の2値化コード記号データを分割して前記コード記号情報を求めることを特徴とする光学的情報読取装置。
  3. 前記演算部は、
    前記変曲点の変化量が同じ符号である場合、前記第3の色情報の2値化コード記号データと判定し、該変曲点間の範囲で最も変化が少ない2点の中間値を前記レベル情報とし、
    前記変曲点の変化量がマイナスからプラスに変わる場合、前記第2の色情報の2値化コード記号データと判定し、該変曲点間の範囲における最小値を前記レベル情報とし、
    前記変曲点の変化量がプラスからマイナスに変わる場合、前記第1の色情報の2値化コード記号データと判定し、該変曲点間の範囲における最大値を前記レベル情報とすることを特徴とする請求項1又は2に記載の光学的情報読取装置。
  4. 前記演算部は、
    前記変曲点の変化量がマイナスであり、かつ、前記2値化コード記号データが前記最小幅の2値化コード記号データの所定倍よりも大きい場合にスタートマージンと判定し、
    前記2値化コード記号データが前記最小幅の2値化コード記号データの所定倍よりも大きいか、又は、前記2値化コード記号データが最後の場合にエンドマージンと判定することを特徴とする請求項1又は2に記載の光学的情報読取装置。
  5. 前記演算部は、
    前記変曲点の変化量が同じ符号を示す前記レベル情報のみを抽出し、抽出したレベル情報の中間値を求め、
    前記変曲点の変化量が異なる符号を示す前記レベル情報のみを抽出し、抽出したレベル情報の最大値と最小値を検出し、
    前記レベル情報の中間値と前記レベル情報の最大値を演算して、前記第3の色情報と前記第1の色情報との第1の境界値を求め、
    前記レベル情報の中間値と前記レベル情報の最小値を演算して、前記第3の色情報と前記第2の色情報との第2の境界値を求め、
    前記変曲点の変化量が同じ符号を示す場合、偶数個の前記第3の色情報であると判定し、
    前記変曲点の変化量がマイナスであり、かつ、前記レベル情報が前記第1の境界値よりも大きい場合、前記第1の色情報であると判定し、
    前記変曲点の変化量がプラスであり、かつ、前記レベル情報が前記第2の境界値よりも小さい場合、前記第2の色情報であると判定することを特徴とする請求項1又は2に記載の光学的情報読取装置。
  6. 前記演算部は、
    前記最小幅の2値化コード記号データを求める場合、前記変曲点の変化量が同じ符号を示す2値化コード記号データのみを抽出し、抽出した2値化コード記号データの中から最小偶数幅の2値化コード記号データを選択して、該最小偶数幅の2値化コード記号データを半分にして前記最小幅の2値化コード記号データを求めることを特徴とする請求項1又は2に記載の光学的情報読取装置。
  7. 光反射率の異なる部分で構成されるコード記号に向けて照射した光の反射光の強度を示す読取信号を微分して微分信号を求めるステップと、
    前記微分信号から変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求めるステップと、
    前記変曲点間の信号の強度を示すレベル情報を求めるステップと、
    前記レベル情報に基づいて前記2値化コード記号データを、反射光の強度の高い第1の色情報、反射光の強度の低い第2の色情報、および前記第1の色情報と前記第2の色情報の略中間を示す第3の色情報に分類するステップと、
    前記第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して該第3の色情報の2値化コード記号データを分割してコード記号情報を求めるステップとを有することを特徴とする光学的情報読取方法。
  8. 画像を取り込んで、前記画像をデジタルの輝度値で表現される画像データに変換するステップと、
    変換した画像データの輝度値をライン毎に測定して輝度ヒストグラムを作成するステップと、
    作成した輝度ヒストグラムから変曲点を検出して、該変曲点間の幅長を示す2値化コード記号データと該変曲点の変化量を求めるステップと、
    前記変曲点間の信号の強度を示すレベル情報を求めるステップと、
    前記レベル情報に基づいて前記2値化コード記号データを、輝度値の高い第1の色情報、輝度値の低い第2の色情報、および前記第1の色情報と前記第2の色情報の略中間を示す第3の色情報に分類するステップと、
    前記第3の色情報が示す2値化コード記号データを、最小幅の2値化コード記号データで除算して該第3の色情報の2値化コード記号データを分割してコード記号情報を求めるステップとを有することを特徴とする光学的情報読取方法。
JP2010549459A 2009-02-05 2010-02-01 光学的情報読取装置及び光学的情報読取方法 Expired - Fee Related JP5349504B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010549459A JP5349504B2 (ja) 2009-02-05 2010-02-01 光学的情報読取装置及び光学的情報読取方法

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP2009025172 2009-02-05
JP2009025172 2009-02-05
JP2010549459A JP5349504B2 (ja) 2009-02-05 2010-02-01 光学的情報読取装置及び光学的情報読取方法
PCT/JP2010/051365 WO2010090159A1 (ja) 2009-02-05 2010-02-01 光学的情報読取装置及び光学的情報読取方法

Publications (2)

Publication Number Publication Date
JPWO2010090159A1 JPWO2010090159A1 (ja) 2012-08-09
JP5349504B2 true JP5349504B2 (ja) 2013-11-20

Family

ID=42542053

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010549459A Expired - Fee Related JP5349504B2 (ja) 2009-02-05 2010-02-01 光学的情報読取装置及び光学的情報読取方法

Country Status (2)

Country Link
JP (1) JP5349504B2 (ja)
WO (1) WO2010090159A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2013175063A (ja) * 2012-02-24 2013-09-05 Tac:Kk 飲食店用券売機を用いた料理提供システム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02129776A (ja) * 1988-11-10 1990-05-17 Eastman Kodatsuku Japan Kk バーコード読取装置
JP2000357205A (ja) * 1999-06-14 2000-12-26 Fujitsu Ltd バーコード読取装置及びバーコード読取方法
WO2004093433A1 (ja) * 2003-04-15 2004-10-28 Fujitsu Limited コード認識方法及び装置
JP2008535058A (ja) * 2005-03-23 2008-08-28 マイクロスキャン・システムズ・インコーポレーテッド 高密度光学シンボルの2段階デコーディングのための装置とプロセス

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02129776A (ja) * 1988-11-10 1990-05-17 Eastman Kodatsuku Japan Kk バーコード読取装置
JP2000357205A (ja) * 1999-06-14 2000-12-26 Fujitsu Ltd バーコード読取装置及びバーコード読取方法
WO2004093433A1 (ja) * 2003-04-15 2004-10-28 Fujitsu Limited コード認識方法及び装置
JP2008535058A (ja) * 2005-03-23 2008-08-28 マイクロスキャン・システムズ・インコーポレーテッド 高密度光学シンボルの2段階デコーディングのための装置とプロセス

Also Published As

Publication number Publication date
JPWO2010090159A1 (ja) 2012-08-09
WO2010090159A1 (ja) 2010-08-12

Similar Documents

Publication Publication Date Title
CN102640165B (zh) 包括用于图像获取的边界搜索的基于成像的扫描器
US8718370B2 (en) Optical information-reading apparatus and optical information-reading method
WO1999023598A1 (en) Electronic edge detection system
JP5676183B2 (ja) バーコード読取装置およびバーコード読取方法
US9076225B2 (en) Image processing device, an image processing method and a program to be used to implement the image processing
US9262665B2 (en) Decoding method and decoding processing device
US10460142B2 (en) Barcode identification method for improving decoding reliability by correcting image distortion
JP5349504B2 (ja) 光学的情報読取装置及び光学的情報読取方法
JP5121685B2 (ja) バーコード読取装置、バーコード読取プログラム、バーコード読取方法
JP5219943B2 (ja) 二値化方法および二値化回路
JP2011191957A (ja) バーコード情報読取方法及びバーコード情報読取装置
JP2011159178A (ja) 光学的情報読取装置、光学的情報読取方法及びデジタルフィルタの作成方法
WO2014091880A1 (ja) バーコードリーダ、バーコード読取り方法及びバーコード読取り用プログラム
JP5453594B2 (ja) シンボル情報読取装置及びシンボル情報読取方法
JP2015176425A (ja) バーコード読取装置、バーコード読取方法及びバーコード読取プログラム
JP4107237B2 (ja) 光学的情報読取装置の境界位置特定方法
JP5441200B1 (ja) バーコード読取装置及びバーコード読取方法
JP5818281B2 (ja) 距離検出装置、距離検出装置を備えた読取装置、距離検出方法及び距離検出プログラム
JP2023162011A (ja) プログラム、方法、及びシステム
JP5559393B1 (ja) 距離検出装置、距離検出装置を備えた読取装置、距離検出方法及び距離検出プログラム
JP5284115B2 (ja) バーコード読取装置
JP2007108118A (ja) 標尺領域検出方法およびその装置
JPH0668776B2 (ja) 光学的情報読取装置
JP2016015177A (ja) バーコード読取装置、バーコード読取方法及びバーコード読取プログラム
JP2010033490A (ja) バーコード読取装置及びバーコード読取方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121213

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130813

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130820

R150 Certificate of patent or registration of utility model

Ref document number: 5349504

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees