〈第1の実施の形態〉
第1の実施の形態では、コード読取装置に1次元スキャナと2次元スキャナを備え、この1次元スキャナ及び2次元スキャナにより同時に1次元コードのコードスキャンを行い、2次元スキャナにより取り込まれたエリア画像における1次元スキャナによる光ビームの照射位置に基づいて、1次元コードまでの距離を算出し、当該算出された距離に応じて1次元スキャナのコード読取に係るパラメータを変更設定する例を説明する。
まず、構成を説明する。
図1に、第1の実施の形態におけるコード読取装置10を示す。図1(a)はコード読取装置10をその上面から見た図であり、図1(b)はコード読取装置10を側面から見た図である。
図1(a)に示すように、コード読取装置10は、コードスキャンを行う読取部1と、支持部2とから構成される。読取部1にはその上面に表示ディスプレイ1aが設けられ、支持部2にはその上面に操作手段として各種キー群2aが備えられている。なお、本実施の形態では、持ち運び可能なハンディタイプのコード読取装置10を例示したが、ハンディタイプ以外の形態であってもよい。
また、読取部1には、1次元コードを読み取るための1次元スキャナ(以下、1Dスキャナという。)Pと、2次元コードを読み取るための2次元スキャナ(以下、2Dスキャナという。)Qとが内蔵される。1DスキャナPは、2DスキャナQの真上に並列して設置され、図1(b)に示すように、1DスキャナPから照射される光ビームの走査面と、2DスキャナQによるエリア画像の取込範囲の中心軸とが所定角度で交差するように設置される。すなわち、図1(a)は光ビームの走査面をその真上から見た図であり、図1(b)は光ビームの走査面をその側面から見た図である。なお、1DスキャナP及び2DスキャナQの機能説明は後述する。
図2に、コード読取装置10の内部構成を示す。
図2に示すように、コード読取装置10は、CPU(Central Processing Unit)11、RAM(Random Access Memory)12、表示部13、入力部14、通信部15、ROM(Read Only Memory)16、1Dスキャナコントローラ17、1DスキャナP、2Dスキャナコントローラ18、2DスキャナQを備えて構成され、各部はバス19により接続されている。この第1の実施の形態では、1DスキャナPはレーザ光ビームを照射して1次元コードを読み取るレーザスキャナであり、2DスキャナQはCMOS(Complementary Metal-Oxide Semiconductor)イメージセンサを内蔵する2Dスキャナである。
CPU11は、ROM16に格納されている基本動作プログラムの他、本発明に係る第1のコード読取処理プログラム(図7参照)等の各プログラムをRAM12に展開し、当該プログラムとの協働により処理動作を統括的に制御する。
CPU11は、第1のコード読取処理において、2DスキャナQにより読み取られたエリア画像における1DスキャナPの光ビームの照射位置を検出し、当該検出された光ビームの照射位置に基づいてコード距離を算出する。
以下、図3〜6を参照して、距離の算出方法について説明する。
図3(a)は、コードスキャン時の様子を示す図であり、図3(b)は、近距離、中距離、長距離のコード距離でコードスキャンが行われた際に2DスキャナQにより取り込まれたエリア画像A〜Cを示す図である。取り込まれた各エリア画像には、1DスキャナPから走査された光ビームの照射位置を示す走査ラインが現れる(図中では、説明の便宜上、光ビームの走査ラインを黒の実線で示したが、実際には光ビームは輝度が高いので走査ラインは低輝度な白い線でエリア画像上に現れる。)。
近距離でコードスキャンが行われると、図3(b)に示すようにエリア画像Aが得られる。エリア画像Aではコード距離が近距離であり、画像取込範囲が小さいため、エリア画像全体の画像領域が小さくなるとともに、コード画像のサイズは実際のサイズに近いサイズとなる。また、コードまでの光ビームの入射距離が浅いため、コード画像及びそのコード画像をスキャンする光ビームの走査ラインがエリア画像Aの上部に位置する。
中距離でコードスキャンが行われると、図3(b)に示すようにエリア画像Bが得られる。エリア画像Bでは、エリア画像全体の画像領域が近距離の場合より大きくなるとともに、コード画像のサイズは実際のサイズより小さいサイズとなる。また、コードまでの光ビームの入射距離が近距離の場合よりも伸びるため、コード画像及び光ビームの走査ラインはエリア画像Bのやや下部に位置する。
遠距離でコードスキャンが行われると、図3(b)に示すようにエリア画像Cが得られる。エリア画像Cでは、エリア画像全体の画像領域が中距離の場合よりさらに大きくなるとともに、コード画像のサイズは中距離で取り込まれた場合よりもさらに小さいサイズとなる。また、2DスキャナQの画像取込範囲内で1DスキャナPの光ビームが照射される位置が画像取込範囲のかなり下部に位置するため、コード画像及び光ビームの走査ラインはエリア画像Cの下端近くに位置する。
すなわち、コードまでの距離に応じて、エリア画像中のコード画像を走査する光ビームの照射位置(走査ラインの位置)が変化する。従って、コード距離と、エリア画像における光ビームの照射位置との相関関係を予め求めてテーブル化しておき、コードスキャン時にエリア画像における光ビームの照射位置を検出することにより、そのテーブルに基づいてコードまでの距離を算出することができる。
図4を参照してコード距離と、エリア画像における光ビームの照射位置との相関関係の求め方について説明する。
図4(a)は、図3(a)におけるコード読取装置10のコードスキャンの様子を模式化した図であり、図4(b)はそのコードスキャンの際に2DスキャナQにより取り込まれたエリア画像を示す図である。
図4(a)に示すように、画像取込範囲の中心軸(以下、単に中心軸という。)と画像取込範囲の外郭線との角度をθ、光ビームの走査面と中心軸との交差角をφ、コード読取装置10から光ビームの走査面と中心軸との交差点までの距離をk、コード距離をdとし、図4(b)に示すように、取り込まれたエリア画像の上端から下端までの距離をz、エリア画像の上端から光ビームの照射位置までの距離をy、エリア画像の上端から光ビームの照射位置までの割合をxとすると、光ビームの照射位置の割合xは下記の式1により求められる。
さらに、上記式1において、コード距離dについて求めると、下記の式2が得られる。
この式2を用いてコード距離dと光ビームの照射位置yとの相関関係を求める。
まず、エリア画像を画像解析して、光ビームの照射位置y、エリア画像の上端から下端までの距離zを計測する。そして、計測されたy、zの値から光ビームの照射位置の割合xを算出し、式2に代入すると、距離k、角度θ及び角度φは設定により一意に決まる定数であるので、コード距離dが算出される。次いで、割合xに対してコード距離dをプロットすると、図5に示すような相関関係が得られる。図5に示すように、光ビームの照射位置の割合xを右縦軸に、コード距離dを横軸にとると、上記式2を示す曲線Mが得られる。このとき、割合xは、x=y/zで示されるので、予め測定によりコード距離dと、その距離dで取り込まれたエリア画像の上端から下端までの距離zとの相関関係を求めておくことにより、コード距離dと光ビームの照射位置までの距離yとの相関関係を導き出すことができる。
図5に、エリア画像の上端からの距離を左縦軸に、コード距離dを横軸にとり、コード距離dに対するエリア画像の上端から下端までの距離z、つまりエリア画像の取込範囲の変化を直線Lで示し、コード距離dに対するエリア画像の上端から光ビームの照射位置までの距離yの変化を直線Nで示す。
そして、この直線Nで示されるコード距離dと光ビームの照射位置yとの相関関係をテーブル化し、距離テーブルとしてROM16に格納しておく。以後、コードスキャン時にコード距離dを算出する際には、CPU11は、まずエリア画像を画像解析してエリア画像における光ビームの照射位置yを検出し、当該検出された照射位置yに応じたコード距離dの値をROM16に格納された距離テーブルから読み出す。すなわち、CPU11により算出手段を実現することが可能となる。
このようにして、コードスキャン時にコード距離dを算出すると、CPU11は、算出されたコード距離dに応じて1DスキャナPのコード読取に係る各種パラメータの変更設定を行い、変更されたパラメータで読み取られたライン画像に含まれるコード画像を画像解析してデコードを行う。すなわち、CPU11により設定手段を実現することができる。
RAM12は、CPU11によって実行される各種プログラム及びこれらプログラムに係るデータを一時的に記憶するワークエリアを形成する。
入力部13は、数字キー、文字キー、各種機能キー等のキー群2aを備えて構成され、操作されたキーに対応する操作信号をCPU11に出力する。なお、表示部13と一体型のタッチパネルを備える構成としてもよい。
表示部14は、LCD(Liquid Crystal Display)等の表示ディスプレイ1aを備えて構成され、各種操作画面やCPU11による処理結果等の各種表示情報を表示する。
通信部15は、ネットワークインターフェイスカードやモデム等の通信用インターフェイスを備えて構成され、通信ネットワーク上の外部機器と相互に情報の送受信を行う。
ROM16は、半導体メモリ等から構成され、基本動作プログラムの他、第1のコード読取処理プログラム及び各プログラムで処理されたデータ等を記憶する。
また、ROM16は、エリア画像における1DスキャナPの光ビームの照射位置yと、読取対象コードまでの距離dとの相関関係をテーブル化した距離テーブルを格納する。
1Dスキャナコントローラ17は、1DスキャナPに制御信号を出力して光ビームの照射タイミング、走査幅等の読取動作を制御する。また、内部に1DスキャナPにより読み取られたライン画像の画像データを一時的に保存するバッファメモリを有し、画像データのデコード時には、当該バッファメモリに一時保存された画像データをCPU11に出力する。さらに、1Dスキャナコントローラ17は、CPU11からの指示に従って、1DスキャナPにおける信号の増幅率、振幅スピード、レーザ光の走査幅等のコード読取に係る各種パラメータを変更設定する。
1DスキャナPは、読取対象のコードに対し、レーザ光をライン状に照射してそのライン画像を光学的に読み取るスキャナである。
図6に、1DスキャナPの内部構成を示す。
図6に示すように、1DスキャナPは、レーザダイオード等からなるレーザ発光部p1、ミラーp2、レーザ光を読取対象のコードに対してライン状に走査させるためのレーザ振動部(振動ミラー)p3、ライン状にCCD(Charge Coupled Device)等の光電変換素子が1列に配置されたラインセンサからなるレーザ受光部p4、信号処理部p5から構成され、信号処理部p5は、増幅部p51、二値化部p52から構成される。
コードスキャン時には、まずレーザ発光部p1によりレーザ光が発光され、当該レーザ光がミラーp2により反射されてレーザ振動部p3の反射面に入射する。レーザ振動部p3は、所定範囲内の回転角度で反復回転を繰り返し、当該レーザ振動部p3の反射面に入射したレーザ光はコードが印刷された用紙上に照射され、レーザ振動部p3の反復回転によりライン状に走査される。
次いで、用紙上に照射されたレーザ光の反射光がレーザ受光部p4において受光されると、光電変換によりライン画像の画像信号が生成されて当該画像信号が信号処理部p5に入力される。信号処理部p5では、増幅部51において画像信号が増幅された後、二値化部p52により二値化が行われてデジタル画像データに変換される。二値化されたデジタル画像データは、1Dスキャナコントローラ17に出力される。
2Dスキャナコントローラ18は、2DスキャナQに制御信号を出力してエリア画像の読取タイミング、露光時間等の読取動作を制御する。また、内部に2DスキャナQにより読み取られたエリア画像の画像データを一時的に保存するバッファメモリを有し、デコード時には当該バッファメモリに一時保存された画像データをCPU11に出力する。さらに、2DスキャナQにおける画像取込時の露光スピード、二値化時のスレッシェルドレベル等のパラメータの変更設定を行う。
2DスキャナQは、一定領域を撮像してそのエリア画像を読み取るスキャナであり、被写体からの光像を結像する光学レンズ群、CMOS,CCD等の光電変換素子がマトリックス上に配置されたエリアセンサ、増幅部、二値化部等を有する信号処理部等から構成される。
コードスキャン時には、光学レンズ群を介して光像がエリアセンサに入光すると、エリアセンサにおいて光電変換が行われ、エリア画像の画像信号が生成される。エリア画像の画像信号は、信号処理部において増幅部により増幅された後、二値化部により二値化が行われてデジタル画像データに変換される。二値化されたデジタル画像データは、2Dスキャナコントローラ18に出力される。
以下、第1の実施の形態における動作を説明する。
図7は、第1の実施の形態におけるコード読取装置10により実行される第1のコード読取処理を説明するフローチャートである。このコード読取処理は、〈1〉〜〈3〉の3段階で実行される。
図7に示すコード読取処理では、ユーザが入力部14に設けられたトリガキー等を操作することによって、まずCPU11からスキャン開始の指示情報が1Dスキャナコントローラ17、2Dスキャナコントローラ18に出力される(ステップS1)。指示情報を受けた1Dスキャナコントローラ17では、1DスキャナPの起動制御が行われ(ステップS2)、1DスキャナPによりレーザ光が発光されてその光ビームが照射される(ステップS3)。一方、スキャン開始の指示情報を受けた2Dスキャナコントローラ18においても2DスキャナQの起動制御が行われ(ステップS4)、エリア画像の取り込みが開始される(ステップS5)。
1DスキャナPにより光ビームが照射されて読取対象のコードの走査が行われ(ステップS6)、1走査分の走査が終了すると(ステップS7)、割り込みフラグが生成され、当該割り込みフラグデータがCPU11に出力されるとともに、走査により読み取られたライン画像のデータがDMA(Direct Memory Access)機能によりRAM12に転送され(ステップS8)、RAM12において保存される(ステップS11)。
2DスキャナQでは、1DスキャナPによるコード走査時と同時にエリア画像の取り込みが行われ(ステップS9)、取り込まれたエリア画像のデータがDMA機能によりRAM12に転送され(ステップS10)、RAM12において保存される(ステップS11)。
1DスキャナP、2DスキャナQによりライン画像又はエリア画像が取り込まれ、その画像データがRAM12に記憶されていく過程で、1Dスキャナコントローラ17からの割り込みフラグが発生すると、CPU11では、エリア画像の転送を停止する指示情報が2Dスキャナコントローラ18に出力され、1Dスキャナコントローラ17から転送されたライン画像のデコードが行われる(ステップS12)。
デコードが成功した場合は本処理を終了し、デコードが失敗した場合は、エリア画像の転送を再開する指示情報が2Dスキャナコントローラ18に出力される。そして、1画面分のエリア画像の転送が終了すると、CPU11において、転送されたエリア画像に基づいて読取対象コードまでの距離の算出が行われる(ステップS13)。
読取対象コードまでの距離が算出されると、当該算出された距離に応じて1DスキャナPのパラメータが決定され(ステップS14)、当該決定されたパラメータのデータが1Dスキャナコントローラ17に出力される(ステップS15)。次いで、このパラメータデータは1Dスキャナコントローラ17から1DスキャナPに転送され(ステップS15)、1Dスキャナコントローラ17の制御により、転送されたパラメータデータに基づいて1DスキャナPのパラメータが変更設定される(ステップS16)。
例えば、コードまでの距離が遠距離である場合は、コードが画像取込範囲に含まれるように光ビームの走査幅を広げる、或いは振幅スピードを上げるようにパラメータを変更したり、読み取られたコード信号が小さいと推測されるので増幅率を大きくするようパラメータを変更する。また、近距離である場合には、コードが画像取込範囲に入りやすくなるので、光ビームの振幅スピードを下げるようにパラメータを変更する。
パラメータ変更後は、〈1〉段階の処理に戻る、つまりステップS1から処理が実行され、変更されたパラメータで再度1DスキャナP及び2DスキャナQによるコードスキャンが行われて、1次元コードのデコードが成功するまで1DスキャナPのパラメータの変更が繰り返される。
以上のように、第1の実施の形態では、コード読取装置10に、1DスキャナPと2DスキャナQを搭載し、予めコード距離と、2DスキャナQにより読み取られたエリア画像における1Dスキャナからの光ビームの照射位置との相関関係をテーブル化して備えておくことにより、コードスキャン時に得られたエリア画像を画像解析して検出された光ビームの照射位置から読取対象のコードまでの距離を容易に算出することができる。そして、算出された距離に応じて最適なコード読取を行えるように1DスキャナPのコードスキャン時の各種パラメータを変更設定するので、読取性能を向上させるとともに正確なデコードを行うことが可能となる。
また、2DスキャナQを同時搭載しているので、1次元コードだけではなく、2次元コードも読み取ることができ、利便性が良い。
〈第2の実施の形態〉
第2の実施の形態では、コード読取装置に1Dスキャナと2Dスキャナを備え、この1Dスキャナ及び2Dスキャナにより同時に2次元コードのコードスキャンを行い、コードスキャン時に2Dスキャナにより取り込まれたエリア画像における1Dスキャナにより走査された光ビームの照射位置に基づいて、2次元コードまでの距離を算出し、当該算出された距離に応じて2Dスキャナのコード読取に係る各種パラメータを変更設定する例を説明する。
まず、第2の実施の形態におけるコード読取装置の構成について説明するが、第2の実施の形態のコード読取装置は、第1の実施の形態におけるコード読取装置と同一構成であるので、同一構成の各部には同一の符号を付してその図示を省略し、異なる機能部分についてのみ説明することとする。すなわち、第2の実施の形態におけるコード読取装置10は、CPU11、RAM12、表示部13、入力部14、通信部15、ROM16、1Dスキャナコントローラ17、1DスキャナP、2Dスキャナコントローラ18、2DスキャナQを備えて構成される。
第2の実施の形態において、CPU11は、ROM16に格納されている基本動作プログラムの他、本発明に係る第2のコード読取処理プログラム(図9参照)等の各プログラムをRAM12に展開し、当該プログラムとの協働により処理動作を統括的に制御する。
CPU11は、第2のコード読取処理において、1DスキャナP及び2DスキャナQに同時にコードスキャンさせ、このコードスキャン時に2DスキャナQにより読み取られたエリア画像における1DスキャナPの光ビームの照射位置を検出する。そして、検出された光ビームの照射位置に基づいて、コード読取装置10から読取対象の2次元コードまでの距離を算出する。
以下、コード距離の算出方法について説明する。
図8(a)は、コードスキャン時の様子を示す図であり、図8(b)は、コード読取装置10から近距離、中距離、遠距離の各コード距離でコードスキャンが行われた際に2DスキャナQにより取り込まれたエリア画像A〜Cを示す図である。
近距離でコードスキャンが行われると、図8(b)に示すようにエリア画像Aが得られる。エリア画像Aでは、コード距離が近距離で画像取込範囲が小さいため、エリア画像全体の画像領域が小さくなるとともに、コード画像のサイズは実際のサイズに近いサイズで現れることとなる。また、コードまでの光ビームの入射距離が浅いため、2次元コードの画像はエリア画像Aの上部に位置することとなる。
中距離でコードスキャンが行われると、図8(b)に示すようなエリア画像Bが得られる。エリア画像Bでは、近距離の場合よりは画像取込範囲が広がるため、エリア画像全体の画像領域は近距離の場合より大きくなるとともに、コード画像のサイズは実際のサイズより小さめに現れることとなる。また、コードまでの光ビームの入射距離が近距離の場合よりも伸びるため2次元コードの画像はエリア画像Bの下部に位置することとなる。
遠距離でコードスキャンが行われると、図8(b)に示すようなエリア画像Cが得られる。エリア画像Cでは画像領域が中距離の場合よりさらに大きくなるとともに、コード画像のサイズは中距離の場合のサイズよりさらに小さく現れる。また、2DスキャナQの画像取込範囲内で1DスキャナPの光ビームが照射される位置が画像取込範囲のかなり下部に位置するため、2次元コードの画像はエリア画像Cの下端近くに位置することとなる。
すなわち、コード距離に応じて、2DスキャナQのエリア画像においてコード上を走査する光ビームの照射位置(走査ラインの位置)が変化することになる。従って、コード距離と、エリア画像における光ビームの照射位置との相関関係を予め求めてテーブル化しておき、コードスキャン時にエリア画像における光ビームの照射位置を検出することにより、そのテーブルに基づいてコード距離を算出することができる。
エリア画像における光ビームの照射位置との相関関係の求め方は、第1の実施の形態において図4及び図5を参照して説明した方法と同様であるので、その説明は省略する。すなわち、式1及び式2を用いてコード距離dと、エリア画像における光ビームの照射位置の割合xとの相関関係を求め、その相関関係からコードまでの距離dと、エリア画像における光ビームの照射位置yとの相関関係を求める。求められた相関関係は、テーブル化され、距離テーブルとしてROM16に格納される。
CPU11は、コードスキャン時に2次元スキャナQにより取り込まれたエリア画像を画像解析してエリア画像における光ビームの照射位置を検出し、当該検出された照射位置に応じたコード距離の値をROM16に格納された距離テーブルから読み出す。すなわち、CPU11により算出手段を実現することが可能となる。
そして、コード距離dが算出されると、CPU11は、算出されたコード距離dに応じて2DスキャナQのコード読取に係る各種パラメータの変更設定を行い、変更されたパラメータで読み取られたエリア画像中のコード画像のデコードを行う。すなわち、CPU11により設定手段を実現することができる。
ROM16は、第2のコード読取処理プログラムを記憶する。また、コード距離と、エリア画像における1DスキャナPの光ビームの照射位置との相関関係をテーブル化した距離テーブルを記憶する。
次に、第2の実施の形態における動作を説明する。
図9は、第2の実施の形態におけるコード読取装置10により実行される第2のコード読取処理を説明するフローチャートである。この第2のコード読取処理は、〈1〉〜〈5〉の5段階で実行される。
図9に示す第2のコード読取処理では、ユーザが入力部14に設けられたトリガキー等を操作することによって、まずCPU11からスキャン開始の指示情報が1Dスキャナコントローラ17、2Dスキャナコントローラ18に出力される(ステップT1)。指示情報を受けた1Dスキャナコントローラ17では、1DスキャナPの起動制御が行われ(ステップT2)、1DスキャナPによりレーザ光が発光されてその光ビームが照射される(ステップT3)。一方、スキャン開始の指示情報を受けた2Dスキャナコントローラ18においても2DスキャナQの起動制御が行われ(ステップT4)、エリア画像の取り込みが開始される(ステップT5)。
1DスキャナPにより光ビームが照射されて読取対象のコードの走査が行われ(ステップT6)、1走査分の走査が終了すると(ステップT7)、割り込みフラグが生成され、当該割り込みフラグデータがCPU11に出力されるとともに、走査により読み取られたライン画像のデータがDMA機能によりRAM12に転送され(ステップT8)、RAM12において保存される(ステップT11)。
2DスキャナQでは、1DスキャナPによるコード走査時と同時にエリア画像の取り込みが行われ(ステップT9)、取り込まれたエリア画像のデータがDMA機能によりRAM12に転送され(ステップT10)、RAM12において保存される(ステップT11)。
1DスキャナP、2DスキャナQによりライン画像又はエリア画像が取り込まれ、その画像データがRAM12に記憶されていく過程で、1Dスキャナコントローラ17からの割り込みフラグが発生すると、CPU11では、エリア画像の転送を停止する指示情報が2Dスキャナコントローラ18に出力され、1Dスキャナコントローラ17から転送されたライン画像のデコードが行われる(ステップT12)。
デコードが成功した場合は本処理を終了し、デコードが失敗した場合は、エリア画像の転送を再開する指示情報が2Dスキャナコントローラ18に出力される。そして、1画面分のエリア画像の転送が終了すると、CPU11において、転送されたエリア画像に基づいて読取対象コードまでの距離の算出が行われる(ステップT13)。
読取対象コードまでの距離が算出されると、当該算出された距離に応じて1DスキャナP及び2DスキャナQのパラメータが決定され、当該決定されたパラメータのデータが1Dスキャナコントローラ17及び2Dスキャナコントローラ18のそれぞれに出力される(ステップT14)。1Dスキャナコントローラ17に出力されたパラメータデータは、1DスキャナPに転送され(ステップT15)、1Dスキャナコントローラ17の制御により、転送されたパラメータデータに基づいて1DスキャナPのパラメータが変更設定される(ステップT16)。
一方、2Dスキャナコントローラ18に出力されたパラメータデータは、2DスキャナQに転送され(ステップT17)、2Dスキャナコントローラ18の制御により、転送されたパラメータデータに基づいて2DスキャナQのパラメータが変更設定される。例えば、読取対象のコードまでの距離が遠距離である場合は、画像取込時の露光時間が長時間になるように露光スピードのパラメータを変更設定する。
パラメータの変更設定が終了すると、CPU11から1DスキャナPによるコードスキャンを停止する指示情報が1Dスキャナコントローラ17に出力され(ステップT19)、1Dスキャナコントローラ17の制御により1DスキャナPの動作が停止されて(ステップT20)、レーザ光が消灯される(ステップT21)。
1DスキャナPのスキャン動作が停止されると、エリア画像の取り込み開始の指示情報がCPU11から2Dスキャナコントローラ18に出力され、2Dスキャナコントローラ18の制御により2DスキャナQによるエリア画像の取り込みが行われる(ステップT22)。取り込まれたエリア画像はDMA機能により2Dスキャナコントローラ18からRAM12に出力され、その画像データがRAM12に保存される(ステップT24)。
RAM12にエリア画像の画像データが保存されると、CPU11では当該画像データの画像解析が行われ、2次元コード画像の検出が行われる。そして、検出された2次元コード画像のデコードが行われる(ステップT25)。CPU11においてデコードに成功した場合は本処理を終了し、デコードに失敗した場合は、1DスキャナPによるスキャンを開始する指示情報がCPU11から1Dスキャナコントローラ17に出力され(ステップT26)、1Dスキャナコントローラ17の制御により、1DスキャナPが起動されて(ステップT27)、1DスキャナPからレーザ光の発光が行われる(ステップT28)。
1DスキャナPによるスキャン開始後は、〈2〉段階の処理に戻る、つまりステップT11の処理から実行され、再度1DスキャナP及び2DスキャナQによるコードスキャンが行われて、2次元コードのデコードが成功するまで2DスキャナQのパラメータの変更が繰り返される。
以上のように、第2の実施の形態では、コード読取装置10に、1DスキャナPと2DスキャナQを搭載し、予め読取対象のコードまでの距離と、2DスキャナQにより読み取られたエリア画像における1Dスキャナからの光ビームの照射位置との相関関係をテーブル化して備えておくことにより、コードスキャン時に得られたエリア画像を画像解析して検出された光ビームの照射位置から読取対象のコードまでの距離を容易に算出することができる。そして、算出された距離に応じて最適なコード読取を行えるように2DスキャナQのコードスキャン時の各種パラメータを変更設定するので、読取性能を向上させるとともに正確なデコードを行うことが可能となる。
また、1DスキャナQを同時搭載しているので、2次元コードだけではなく、1次元コードも読み取ることができ、利便性が良い。
〈第3の実施の形態〉
第3の実施の形態では、コード読取装置に1Dスキャナと2Dスキャナを備え、この1Dスキャナ及び2Dスキャナにより同時にコードスキャンを行い、このとき2Dスキャナにより取り込まれたエリア画像における1次元スキャナの光ビームの照射位置に基づいて、読取対象のコードまでの距離を算出し、当該算出された距離に応じて1Dスキャナ又は2Dスキャナのコード読取に係るパラメータを変更設定するとともに、エリア画像における光ビームの照射位置の傾斜角度からピッチ方向(光ビームの走査方向)におけるコードの傾斜角度を算出し、当該算出された傾斜角度に応じてコード画像の画像補正を行う例を説明する。
まず、第3の実施の形態におけるコード読取装置の構成について説明するが、第3の実施の形態のコード読取装置は、第1の実施の形態におけるコード読取装置と同一構成であるので、同一構成の各部には同一の符号を付してその図示を省略し、異なる機能部分についてのみ説明することとする。すなわち、第3の実施の形態におけるコード読取装置10は、CPU11、RAM12、表示部13、入力部14、通信部15、ROM16、1Dスキャナコントローラ17、1DスキャナP、2Dスキャナコントローラ18、2DスキャナQを備えて構成される。
第3の実施の形態において、CPU11は、ROM16に格納されている基本動作プログラムの他、本発明に係る第3のコード読取処理プログラム(図14参照)等の各プログラムをRAM12に展開し、当該プログラムとの協働により処理動作を統括的に制御する。
CPU11は、第3のコード読取処理において、2DスキャナQにより読み取られたエリア画像における1DスキャナPの光ビームの照射位置を検出し、当該検出された光ビームの照射位置に基づいて、コード読取装置10から読取対象コードまでの距離を算出する。
以下、コード距離の算出方法について説明する。
図10(a)は、コードスキャン時の様子を示す図であり、図10(b)は、コード読取装置10から近距離、中距離、遠距離の各コード距離でコードスキャンが行われた際に2DスキャナQにより取り込まれたエリア画像A〜Cを示す図である。2DスキャナQの画像取込時には1DスキャナPによるスキャンも行われているので、読み取られたエリア画像には、1DスキャナPから走査された光ビームのラインが現れる。
なお、第3の実施の形態では、読取対象のコードが2次元コードである場合を例に説明するが、コードが1次元コードであっても同様の処理が行われることとする。
近距離でコードスキャンが行われると、図10(b)に示すようなエリア画像Aが得られる。エリア画像Aでは、コード距離が近距離で画像取込範囲が小さいため、エリア画像全体の画像領域が小さくなるとともに、コード画像のサイズは実際のサイズに近いサイズで現れることとなる。また、コードまでの光ビームの入射距離が浅いため、2次元コードの画像はエリア画像Aの上部に位置することとなる。
中距離でコードスキャンが行われると、図10(b)に示すようなエリア画像Bが得られる。エリア画像Bでは、近距離よりは画像取込範囲が広がるため、エリア画像全体の画像領域が近距離の場合より大きくなるとともに、コード画像のサイズは実際のサイズより小さめに現れることとなる。また、コードまでの光ビームの入射距離が近距離の場合よりも伸びるため2次元コードの画像はエリア画像Bの下部に位置することとなる。
遠距離でコードスキャンが行われると、図10(b)に示すようなエリア画像Cが得られる。エリア画像Cでは、エリア画像全体の画像領域が中距離の場合よりさらに大きくなるとともに、コード画像のサイズは中距離の場合のサイズよりさらに小さく現れる。また、2DスキャナQの画像取込範囲内で1DスキャナPの光ビームが照射される位置が画像取込範囲のかなり下部に位置するため、2次元コードの画像はエリア画像Cの下端近くに位置することとなる。
すなわち、コードとコード読取装置10との距離に応じて、2DスキャナQのエリア画像においてコード上を走査する光ビームの照射位置(走査ラインの位置)が変化することになる。従って、予めコード距離と、エリア画像における光ビームの照射位置との相関関係を求めてテーブル化しておき、コードスキャン時にエリア画像における光ビームの照射位置を検出することにより、そのテーブルに基づいてコードまでの距離を算出することができる。
エリア画像における光ビームの照射位置との相関関係の求め方は、第1の実施の形態において図4及び図5を参照して説明した方法と同様であるので、ここでは説明を省略する。すなわち、式1及び式2を用いて読取対象のコードまでの距離dと、エリア画像における光ビームの照射位置の割合xとの相関関係を求め、その相関関係からコードまでの距離dと、エリア画像における光ビームの照射位置yとの相関関係を求める。求められた相関関係は、テーブル化されて距離テーブルとしてROM16に格納される。
CPU11は、コードスキャン時に2DスキャナQにより取り込まれたエリア画像を画像解析してエリア画像における光ビームの照射位置を検出し、当該検出された照射位置に応じたコード距離の値をROM16に格納された距離テーブルから読み出す。すなわち、CPU11により算出手段を実現することが可能となる。
そして、コード距離が算出されると、CPU11は、算出されたコード距離に応じて1DスキャナP又は2DスキャナQのコード読取に係る各種パラメータの変更設定を行う。すなわち、CPU11により設定手段を実現することができる。
また、CPU11は、エリア画像において検出された1DスキャナPの光ビームの照射位置に基づいて、光ビームの走査方向(これをピッチ方向という。)における読取対象コードの傾斜を検出し、その傾斜角度(以下、これをピッチ角度という。)を算出する。
例えば、図10(a)において、コード読取装置10から中距離の位置でコードスキャンされた際に、読取対象のコードがピッチ方向に対して左側又は右側に傾斜した状態でコードスキャンが行われると、図10(c)に示すように、傾斜によりコード画像が歪んだエリア画像B−1、B−2が得られる。
図10(c)に示すエリア画像B−1は、コードがピッチ方向右側に傾斜した状態で取り込まれた画像である。コード読取装置10からの距離はエリア画像の右側がその左側よりも遠距離となるので、エリア画像B−1では光ビームの走査ラインが右肩下がりで現れるとともに、コード画像も歪み右にいくほど小さくなる。一方、エリア画像B−2は、コードがピッチ方向左側に傾斜した状態で取り込まれた画像であり、エリア画像の左側がその右側よりも遠距離となるので、1DスキャナPの光ビームの走査ラインが左肩下がりで現れるとともに、コード画像も左にいくほど小さくなって歪むこととなる。
このように、傾斜した状態でコードスキャンが行われた場合のピッチ角度の算出方法について図11及び図12を参照して説明する。
図11は、図10(a)に示すコードスキャンの様子を図式化した図である。図11(a)は光ビームの走査面をその側面から見た図であり、図11(b)はその光ビームの走査面を上から見た図である。また、図12は、そのコードスキャン時に2DスキャナQにより取り込まれたエリア画像を示す図である。
図11(a)、(b)において、エリア画像の取込中心軸とその画像取込範囲の外郭線との角度をθ、光ビームの走査面と中心軸との交差点における交差角をφ、その交差点までの距離をk、ピッチ角度をδ、コード読取装置10からエリア画像の左端までの距離をd1、右端までの距離をd2とする。また、図12において、エリア画像の上端から下端までの距離をz、左端から右端までの距離をw、エリア画像の左端と光ビームの走査ラインとの交差点を点L、エリア画像の右端部と光ビームの走査ラインとの交差点を点Rとする。
ここで、エリア画像の上端から点Lまでの距離をy1、上端から点Rまでの距離をy2、点Lにおいて光ビームの照射位置が占める割合x1、点Rにおいて占める割合x2とすると、割合x1、x2は以下の式3、式4により求められる。
x1=y1/z・・・(3)
x2=y2/z・・・(4)
さらに、コード距離d1、d2は、第1の実施の形態で示した式1においてコード距離dにd1、d2を代入することにより、以下の式5、式6に示すように求められる。
エリア画像における光ビームの照射位置までの距離y1、y2はコードのピッチ角度δに応じて変化する、つまりピッチ角度δに応じてエリア画像における光ビームの走査ラインの傾斜角度αが変化することになるので、予めピッチ角度δと、エリア画像における光ビームの走査ラインの傾斜角度αとの相関関係を求めてテーブル化しておき、コードスキャン時に、エリア画像を画像解析して光ビームの照射位置を検出することにより、そのテーブルに基づいてピッチ角度を算出することができる。
光ビームの走査ラインの傾斜角度αは、光ビームの照射位置y1、y2から次の式7により求められる。
また、コードのピッチ角度δは、次の式8により求めることができる。
これらの式7、8を用いて傾斜角度αとピッチ角度δの相関関係を求める。
まず、エリア画像を画像解析して、光ビームの照射位置y1、y2、エリア画像の左端から右端までの距離w、上端から下端までの距離zを検出する。そして、検出されたy1、y2、wの値を上記式7に代入して光ビームの傾斜角度αを算出する。次に、y1、y2、zの値を式5、式6に代入してコード距離d1、d2を算出し、当該算出されたコード距離d1、d2を式8に代入してピッチ角度δを算出する。このようにして算出されたピッチ角度δに対する光ビームの傾斜角度αをプロットすると、図13に示すような相関関係が得られる。図13に示すように、ピッチ角度δを横軸に、傾斜角度αを縦軸にとると、曲線Jが得られる。
そして、この曲線Jで示される相関関係をテーブル化してピッチ角度テーブルとしてROM16に格納しておく。CPU11は、ピッチ角度を算出する際には、まずエリア画像を画像解析してエリア画像における光ビームの照射位置y1、y2及びエリア画像の左端から右端までの距離wを検出し、当該検出されたy1、y2、wから光ビームの走査ラインの傾斜角度αを算出する。そして、算出された傾斜角度αに応じたピッチ角度δの値をROM16に格納されたピッチ角度テーブルから読み出す。
ピッチ角度δが算出されると、CPU11は、当該ピッチ角度δ分の傾斜により歪んだエリア画像中のコード画像を、ピッチ角度δに応じて座標変換により画像補正する。そして、画像補正されたコード画像を画像解析してデコードを行う。
なお、ピッチ方向にコードが傾斜している場合、エリア画像の右側と左側ではコード距離が異なってくる。従って、ピッチ方向にコードが傾斜している場合にコード距離を算出する際には、光ビームの照射位置y1、y2との平均値yavを算出して、当該平均値yavに対応するコード距離の値を距離テーブルから読み出すこととしてもよいし、y1、y2の何れか一方に対応するコード距離の値を読み出すこととしてもよい。
ROM16は、第3のコード読取処理プログラムを記憶する、また、コード距離と、エリア画像における光ビームの照射位置との相関関係を示す距離テーブルを格納するとともに、読取対象のコードのピッチ角度と、エリア画像における光ビームの照射位置の傾斜角度との相関関係を示すピッチ角度テーブルを格納する。
次に、第3の実施の形態における動作を説明する。
図14は、第3の実施の形態におけるコード読取装置10により実行される第3のコード読取処理を説明するフローチャートである。この第3のコード読取処理は、〈1〉〜〈5〉の5段階で実行される。
図14に示す第3のコード読取処理では、ユーザが入力部14に設けられたトリガキー等を操作することによって、まずCPU11からスキャン開始の指示情報が1Dスキャナコントローラ17、2Dスキャナコントローラ18に出力される(ステップE1)。指示情報を受けた1Dスキャナコントローラ17では、1DスキャナPの起動制御が行われ(ステップE)、1DスキャナPによりレーザ光が発光されてその光ビームが照射される(ステップE3)。一方、スキャン開始の指示情報を受けた2Dスキャナコントローラ18においても2DスキャナQの起動制御が行われ(ステップE4)、エリア画像の取り込みが開始される(ステップE5)。
1DスキャナPにより光ビームが照射されて読取対象のコードの走査が行われ(ステップE6)、1走査分の走査が終了すると(ステップE7)、割り込みフラグが生成され、当該割り込みフラグデータがCPU11に出力されるとともに、走査により読み取られたライン画像のデータがDMA機能によりRAM12に転送され(ステップE8)、RAM12において保存される(ステップE11)。
2DスキャナQでは、1DスキャナPによるコード走査時と同時にエリア画像の取り込みが行われ(ステップE9)、取り込まれたエリア画像のデータがDMA機能によりRAM12に転送され(ステップE10)、RAM12において保存される(ステップE11)。
1DスキャナP、2DスキャナQによりライン画像又はエリア画像が取り込まれ、その画像データがRAM12に記憶されていく過程で、1Dスキャナコントローラ17からの割り込みフラグが発生すると、CPU11では、エリア画像の転送を停止する指示情報が2Dスキャナコントローラ18に出力され、1Dスキャナコントローラ17から転送されたライン画像のデコードが行われる(ステップE12)。
デコードが成功した場合は本処理を終了し、デコードが失敗した場合は、エリア画像の転送を再開する指示情報が2Dスキャナコントローラ18に出力される。そして、1画面分のエリア画像の転送が終了すると、CPU11において、転送されたエリア画像に基づいて読取対象コードまでの距離の算出が行われる(ステップE13)。次いで、エリア画像における光ビームの照射位置の傾斜角度から読取対象コードのピッチ角度が算出される(ステップE14)。
距離及びピッチ角度が算出されると、算出された距離に応じて1DスキャナP及び2DスキャナQのパラメータが決定され、当該決定されたパラメータのデータが1Dスキャナコントローラ17及び2Dスキャナコントローラ18のそれぞれに出力される(ステップE15)。1Dスキャナコントローラ17に出力されたパラメータデータは、1DスキャナPに転送され(ステップE16)、1Dスキャナコントローラ17の制御により、転送されたパラメータデータに基づいて1DスキャナPのパラメータが変更設定される(ステップE17)。
一方、2Dスキャナコントローラ18に出力されたパラメータデータは、2DスキャナQに転送され(ステップE18)、2Dスキャナコントローラ18の制御により、転送されたパラメータデータに基づいて2DスキャナQのパラメータが変更設定される。例えば、読取対象のコードまでの距離が遠距離である場合は、画像取込時の露光時間が長時間になるように露光スピードのパラメータを変更設定する。
パラメータの変更設定が終了すると、CPU11から1DスキャナPによるコードスキャンを停止する指示情報が1Dスキャナコントローラ17に出力され(ステップE20)、1Dスキャナコントローラ17の制御により1DスキャナPの動作が停止されて(ステップT21)、レーザ光が消灯される(ステップE22)。
1DスキャナPのスキャン動作が停止されると、エリア画像の取り込み開始の指示情報がCPU11から2Dスキャナコントローラ18に出力され、2Dスキャナコントローラ18の制御により2DスキャナQによるエリア画像の取り込みが行われる(ステップE23)。取り込まれたエリア画像はDMA機能により2Dスキャナコントローラ18からRAM12に出力され(ステップE24)、その画像データがRAM12に保存される(ステップE25)。
RAM12にエリア画像の画像データが保存されると、CPU11では当該画像データの画像解析が行われ、2次元コード画像の検出が行われる。そして、ステップE14で算出されたピッチ角度に応じて、検出された2次元コード画像に対し、画像補正が施される(ステップE26)。例えば、2次元コードがピッチ方向に対して右側に傾斜された状態でエリア画像が取り込まれた場合は、そのコード画像は右にいくほど小さくなるように歪んだ画像となるので、そのピッチ角度分だけ傾斜を戻した状態のコード画像となるように座標変換される等して画像補正が行われる。
画像補正が終了すると、当該補正された2次元コード画像のデコードが行われる(ステップE27)。デコードが成功した場合は本処理を終了し、デコードに失敗した場合は、1DスキャナPによるスキャンを開始する指示情報がCPU11から1Dスキャナコントローラ17に出力される(ステップE28)。次いで、1Dスキャナコントローラ17の制御により1DスキャナPが起動されると(ステップE29)、1DスキャナPによりレーザ光が発光されて、コードスキャンが開始される(ステップE30)。
1DスキャナPによるスキャン開始後は、〈1〉段階の処理に戻る、つまりステップT11から処理が実行され、再度1DスキャナP及び2DスキャナQによるコードスキャンが行われて、2次元コードのデコードが成功するまで2DスキャナQのパラメータの変更及びコード画像の補正が繰り返される。
以上のように、第3の実施の形態では、コード読取装置10に、1DスキャナPと2DスキャナQを搭載し、予め読取対象のコードまでの距離と、2DスキャナQにより読み取られたエリア画像における1Dスキャナからの光ビームの照射位置との相関関係をテーブル化して備えておくことにより、コード読取時に2DスキャナQにより得られたエリア画像における1DスキャナPの光ビームの照射位置から読取対象のコードまでの距離を算出することができる。そして、算出された距離に応じて最適なコード読取を行えるように1DスキャナP及び/又は2DスキャナQのコードスキャン時の各種パラメータを変更設定するので、読取性能を向上させるとともに正確なデコードを行うことが可能となる。
また、読取対象コードのピッチ角度と、2DスキャナQにより読み取られたエリア画像における光ビームの照射位置の傾斜角度との相関関係をテーブル化して備えておくことにより、コードスキャン時に2DスキャナQから得られたエリア画像における光ビームの照射位置の傾斜角度から読取対象コードのピッチ角度を算出することができる。そして、算出されたピッチ角度に応じて最適なデコードを行えるようにコードスキャンされたコード画像の画像補正を行うので、コードを正確にデコードすることができ、デコード性能を向上させることができる。
また、1DスキャナP及び2DスキャナQを同時搭載しているので、1次元コード及び2次元コードの両方を読み取ることができ、利便性が良い。
〈第4の実施の形態〉
第4の実施の形態では、コード読取装置に2台の1Dスキャナと1台の2Dスキャナを備え、この1Dスキャナ及び2Dスキャナにより同時にコードスキャンを行い、2Dスキャナにより取り込まれたエリア画像に基づいて算出されたコード距離に応じて、1Dスキャナ又は2Dスキャナのコード読取に係るパラメータを変更設定するとともに、エリア画像における光ビームの照射位置の傾斜角度からコードのピッチ方向及び当該ピッチ方向と直交するスキュー方向における傾斜角度を算出し、当該算出された傾斜角度に応じてコード画像の画像補正を行う例を説明する。
まず、構成を説明する。
図15に、第4の実施の形態におけるコード読取装置20の外観を示す。図15(a)は、コード読取装置20を真上から見た図であり、図15(b)はコード読取装置20をその側面から見た図である。
図15(a)、(b)に示すように、コード読取装置20は、2台の1DスキャナPa、Pbと、1台の2DスキャナQとを備えて構成される。1DスキャナPaは2DスキャナQの真上に並列して設置され、1DスキャナPbは2DスキャナQの側面に並列して設置される。
1DスキャナPaは、図15(b)に示すように、1DスキャナPaから照射される光ビームAの走査面と、2DスキャナQの画像取込範囲の中心軸とが一定角度で交差するように設置され、1DスキャナPbは、図15(a)に示すように、1DスキャナPbから照射される光ビームBの走査面と、2DスキャナQの画像取込範囲の中心軸とが一定角度で交差するように、かつ光ビームBの走査面が1DスキャナPaの光ビームAの走査面と直交するように設置される。すなわち、図15(a)は、光ビームAの走査面をその真上から見た図であると同時に、光ビームBの走査面をその側面から見た図となる。逆に、図15(b)は、光ビームAの走査面をその側面から見た図であると同時に、光ビームBの走査面をその真上から見た図である。
図16に、コード読取装置20の内部構成を示す。なお、第1の実施の形態におけるコード読取装置10の各部と同一の構成部には、同一の符号を付すこととする。
図16に示すように、コード読取装置20は、CPU11、RAM12,表示部13、入力部14、通信部15、ROM16、1Dスキャナコントローラ17a、17b、1DスキャナPa、Pb、2Dスキャナコントローラ18、2DスキャナQを備えて構成される。
第4の実施の形態において、CPU11は、ROM16に格納されている基本動作プログラムの他、本発明に係る第4のコード読取処理プログラム(図19参照)等の各プログラムをRAM12に展開し、当該プログラムとの協働により処理動作を統括的に制御する。
CPU11は、第4のコード読取処理において、2DスキャナQにより読み取られたエリア画像における1DスキャナPa、Pbの光ビームの照射位置を検出し、当該検出された光ビームの照射位置に基づいて、コード読取装置20から読取対象コードまでの距離を算出する。
以下、コード距離の算出方法について説明する。
図17(a)は、コードスキャンの様子をコード読取装置20の真上から見た図であり、図17(b)はコード読取装置20をその側面から見た図である。また、図17(c)は、コード読取装置10から近距離、中距離、遠距離のコード距離でコードスキャンが行われた際に2DスキャナQにより取り込まれたエリア画像A〜Cを示す図である。コードスキャンは、1DスキャンPa、Pb及び2DスキャンQにより同時に行われるので、取り込まれたエリア画像には、1DスキャナPa、Pbから照射された光ビームA、Bの走査ラインが現れる。
なお、第3の実施の形態では、読取対象のコードが2次元コードである場合を例に説明するが、読取対象のコードが1次元コードであっても同様の処理が行われることとする。
近距離でコードスキャンが行われると、図17(c)に示すようなエリア画像Aが得られる。エリア画像Aでは、コード距離が近距離で画像取込範囲が小さいため、エリア画像全体の画像領域が小さくなるとともに、コード画像のサイズは実際のサイズに近いサイズで現れることとなる。また、コードまでの光ビームの入射距離が浅いため、2次元コードの画像はエリア画像Aの上部に位置することとなる。
中距離でコードスキャンが行われると、図17(c)に示すようなエリア画像Bが得られる。エリア画像Bでは、近距離よりは画像取込範囲が広がるため、エリア画像全体の画像領域が近距離の場合より大きくなるとともに、コード画像のサイズは実際のサイズより小さめに現れることとなる。また、コードまでの光ビームの入射距離が近距離の場合よりも伸びるため2次元コードの画像はエリア画像Bの下部に位置することとなる。
遠距離でコードスキャンが行われると、図17(b)に示すようなエリア画像Cが得られる。エリア画像Cでは、エリア画像全体の画像領域が中距離の場合よりさらに大きくなるとともに、コード画像のサイズは中距離の場合のサイズよりさらに小さく現れる。また、2DスキャナQの画像取込範囲内で1DスキャナPの光ビームが照射される位置が画像取込範囲のかなり下部に位置するため、2次元コードの画像はエリア画像Cの下端近くに位置することとなる。
すなわち、コードとコード読取装置10との距離(コード距離)に応じて、2DスキャナQのエリア画像においてコード上を走査する光ビームの照射位置(走査ラインの位置)が変化することになる。従って、コード距離と、エリア画像における光ビームの照射位置との相関関係を予め求めておくことにより、その後エリア画像における光ビームの照射位置を検出することにより、コードまでの距離を算出することができる。
エリア画像における光ビームの照射位置との相関関係の求め方は、第1の実施の形態において図4及び図5を参照して説明した方法と同様であるので、ここでは説明を省略する。すなわち、式1及び式2を用いて読取対象のコードまでの距離dと、エリア画像における光ビームの照射位置の割合xとの相関関係を求め、その相関関係からコードまでの距離dと、エリア画像における光ビームの照射位置yとの相関関係を求める。求められた相関関係は、テーブル化されて距離テーブルとしてROM16に格納される。
なお、コード距離の算出に用いるエリア画像中の光ビームの照射位置は、1DスキャナPa又は1DスキャナPbから照射された光ビームA、Bのうち、何れの光ビームのものであってもよい。
CPU11は、コードスキャン時に2次元スキャナQにより取り込まれたエリア画像を画像解析してエリア画像における光ビームの照射位置を検出し、当該検出された照射位置に応じたコード距離の値をROM16に格納された距離テーブルから読み出す。すなわち、CPU11により算出手段を実現することが可能となる。
そして、コードスキャン時にコード距離を算出すると、CPU11は、算出されたコード距離に応じて1DスキャナP又は2DスキャナQのコード読取に係る各種パラメータの変更設定を行う。すなわち、CPU11により設定手段を実現することができる。
また、CPU11は、1DスキャナPaから照射された光ビームAの走査方向(以下、これをピッチ方向という。)におけるコードの傾斜を検出し、その傾斜角度(以下、これをピッチ角度という。)を算出する。
例えば、図17(a)において、コード読取装置10から中距離の位置でコードスキャンする際に、読取対象のコードがピッチ方向に対して左側又は右側に傾斜した状態でコードスキャンが行われると、図17(d)に示すように、傾斜によりコード画像が歪み、1DスキャナPaから照射された光ビームの走査ラインが傾斜したエリア画像B−1、B−2が得られる。この走査ラインの傾斜角度は、ピッチ角度に応じて変化する。従って、読取対象のコードのピッチ角度と、エリア画像における1DスキャナPaによる光ビーム走査ラインの傾斜角度との相関を予め求めておくことにより、光ビームの傾斜角度が判明すればピッチ角度を算出することができる。
ピッチ角度と、エリア画像における光ビーム走査ラインの傾斜角度との相関関係の求め方は、図11(a)、(b)及び図12を参照して第3の実施の形態において説明した方法と同様であるので、ここでは説明を省略する。求められた相関関係はテーブル化されてピッチ角度テーブルとして、ROM16に格納される。CPU11は、デコード時に、算出されたピッチ角度に応じてエリア画像中のコード画像を座標変換により画像補正し、当該画像補正されたコード画像のデコードを行う。
また、CPU11は、1DスキャナPbから照射された光ビームBの走査方向(1DスキャナPaからの光ビームの走査方向をピッチ方向としたとき、1DスキャナPbからの光ビームの走査方向をスキュー方向という。)におけるコードの傾斜を検出し、その傾斜角度(以下、これをスキュー角度という。)を算出する。
例えば、図17(a)において、コード読取装置10から中距離の位置でコードスキャンする際に、読取対象のコードがスキュー方向に傾斜した状態でコードスキャンが行われると、図17(d)に示すように、傾斜によりコード画像が歪み、1DスキャナPbから照射された光ビームBの走査ラインが傾斜したエリア画像B−3、B−4が得られる。この走査ラインの傾斜角度は、スキュー角度に応じて変化する。従って、読取対象のコードのスキュー角度と、エリア画像における1DスキャナPbによる光ビーム走査ラインの傾斜角度との相関を予め求めておくことにより、光ビームの傾斜角度が判明すればスキュー角度を算出することができる。
スキュー角度とエリア画像における光ビーム走査ラインの傾斜角度との相関関係の求め方は、図11(a)、(b)を参照して説明したピッチ角度の場合と同様であるので、ここでは説明を省略する。すなわち、スキュー方向は、ピッチ方向と直交するので、図11(a)に示す光ビーム走査面を側面から見た図と、図11(b)に示す光ビーム走査面を上から見た図とにおいて、ピッチ角度δをスキュー角度γに置き換えて、また図12においても光ビームの走査ラインの傾斜角度αをβに置き換えて、スキュー角度γと、エリア画像における1DスキャナPbの光ビームの走査ラインの傾斜角度βとの相関関係を求める。
図18に、2次元コードのスキュー角度γに対して1DスキャナPbによる光ビームBの走査ラインの傾斜角度βをプロットして得られた相関関係を示す。図18に示すように、コードのスキュー角度γを横軸に、エリア画像における光ビームBの傾斜角度βを縦軸にとると、曲線Eが得られる。この曲線Eで示される相関関係をテーブル化し、スキュー角度テーブルとしてROM16に格納しておく。
CPU11は、コード画像のデコード時に、まずエリア画像を画像解析してエリア画像における光ビームの照射位置及びエリア画像の上端から下端までの距離を検出し、光ビームBの走査ラインの傾斜角度βを算出する。そして、算出された傾斜角度βに応じたスキュー角度γの値をROM16のスキュー角度テーブルから読み出す。
スキュー角度γが算出されると、CPU11は、当該スキュー角度γ分の傾斜により歪んだエリア画像中のコード画像を、スキュー角度γに応じて座標変換により画像補正する。そして、画像補正されたコード画像を画像解析してコード画像のデコードを行う。
ROM16は、読取対象のコードまでの距離と、エリア画像における光ビームの照射位置との相関関係を示す距離テーブルを格納する。また、読取対象のコードのピッチ角度と、エリア画像における光ビームの照射位置の傾斜角度との相関関係を示すピッチ角度テーブル、読取対象のコードのスキュー角度とエリア画像における光るビームの照射位置の傾斜角度との相関関係を示すスキュー角度テーブルを格納する。
次に、第4の実施の形態における動作を説明する。
図19は、第4の実施の形態におけるコード読取装置20により実行される第4のコード読取処理を説明するフローチャートである。
図19に示す第3のコード読取処理では、ユーザが入力部14に設けられたトリガキー等を操作することによって、まずCPU11からスキャン開始の指示情報が1Dスキャナコントローラ17a、17b、2Dスキャナコントローラ18に出力される(ステップD1)。指示情報を受けた1Dスキャナコントローラ17a、17bでは、1DスキャナPa、Pbの起動制御がそれぞれ行われ(ステップD2)、1DスキャナPa、Pbにより同時にレーザ光が発光されてその光ビームが照射される(ステップD3)。一方、スキャン開始の指示情報を受けた2Dスキャナコントローラ18においても2DスキャナQの起動制御が行われ(ステップD4)、エリア画像の取り込みが開始される(ステップD5)。
1DスキャナPa、Pbにより光ビームが照射されて読取対象のコードの走査が行われ(ステップD6)、1走査分の走査が終了すると(ステップD7)、割り込みフラグが生成され、当該割り込みフラグデータがCPU11に出力されるとともに、走査により読み取られたライン画像のデータがDMA機能によりそれぞれRAM12に転送され(ステップD8)、RAM12において保存される(ステップD11)。
2DスキャナQでは、1DスキャナPa、Pbによるコード走査と同時にエリア画像の取り込みが行われ(ステップD9)、取り込まれたエリア画像のデータがDMA機能によりRAM12に転送され(ステップD10)、RAM12において保存される(ステップD11)。
1DスキャナPa、Pb、2DスキャナQによりライン画像又はエリア画像が取り込まれ、その画像データがRAM12に記憶されていく過程で、1Dスキャナコントローラ17a、17bからの割り込みフラグが発生すると、CPU11では、エリア画像の転送を停止する指示情報が2Dスキャナコントローラ18に出力され、1Dスキャナコントローラ17a、17bから転送されたライン画像のデコードが行われる(ステップD12)。
デコードが成功した場合は本処理を終了し、デコードが失敗した場合は、エリア画像の転送を再開する指示情報が2Dスキャナコントローラ18に出力される。そして、1画面分のエリア画像の転送が終了すると、CPU11において、転送されたエリア画像に基づいて読取対象コードまでの距離の算出が行われる(ステップD13)。次いで、エリア画像において、ピッチ方向に沿って照射された光ビーム、つまり1DスキャナPaから照射された光ビームの照射位置のピッチ方向における傾斜角度が検出され、当該傾斜角度から読取対象コードのピッチ角度が算出される(ステップD14)。
ピッチ角度が算出されると、エリア画像における光ビームの照射位置のエリア画像において、スキュー方向に沿って照射された光ビームの照射位置のスキュー方向における傾斜角度が検出され、当該傾斜角度から読取対象コードのスキュー角度が算出される(ステップD15)。
距離、ピッチ角度及びスキュー角度が算出されると、算出された距離に応じて1DスキャナPa、Pb及び2DスキャナQのパラメータが決定され、当該決定されたパラメータのデータが1Dスキャナコントローラ17a、17b及び2Dスキャナコントローラ18のそれぞれに出力される(ステップD16)。1Dスキャナコントローラ17a、17bに出力されたパラメータデータは、1DスキャナPa、Pbに転送され(ステップD17)、1Dスキャナコントローラ17a、17bの制御により、転送されたパラメータデータに基づいて1DスキャナPaのパラメータが変更設定される(ステップD18)。
一方、2Dスキャナコントローラ18に出力されたパラメータデータは、2DスキャナQに転送され(ステップD19)、2Dスキャナコントローラ18の制御により、転送されたパラメータデータに基づいて2DスキャナQのパラメータが変更設定される。例えば、読取対象のコードまでの距離が遠距離である場合は、画像取込時の露光時間が長時間になるように露光スピードのパラメータを変更設定する。
パラメータの変更設定が終了すると、CPU11から1DスキャナPによるコードスキャンを停止する指示情報が1Dスキャナコントローラ17に出力され(ステップD21)、1Dスキャナコントローラ17a、17bの制御により1DスキャナPa、Pbの動作が停止されて(ステップD22)、レーザ光が消灯される(ステップD23)。
1DスキャナPa、Pbのスキャン動作が停止されると、エリア画像の取り込み開始の指示情報がCPU11から2Dスキャナコントローラ18に出力され、2Dスキャナコントローラ18の制御により2DスキャナQによるエリア画像の取り込みが行われる(ステップD24)。取り込まれたエリア画像はDMA機能により2Dスキャナコントローラ18からRAM12に出力され(ステップD25)、その画像データがRAM12に保存される(ステップD26)。
RAM12にエリア画像の画像データが保存されると、CPU11では当該画像データの画像解析が行われ、2次元コード画像の検出が行われる。そして、ステップE14で算出されたピッチ角度及びスキュー角度に応じて、検出された2次元コード画像に対し、画像補正が施される(ステップE26)。例えば、2次元コードがピッチ方向に対して右側に傾斜された状態でエリア画像が取り込まれた場合は、そのコード画像は右にいくほど小さくなるように歪んだ画像となるので、そのピッチ角度分だけ傾斜を戻した状態のコード画像となるように座標変換される等して画像補正が行われる。
画像補正が終了すると、当該補正された2次元コード画像のデコードが行われる(ステップD28)。デコードが成功した場合は本処理を終了し、デコードに失敗した場合は、1DスキャナPa、Pbによるスキャンを開始する指示情報がCPU11から1Dスキャナコントローラ17に出力される(ステップD29)。次いで、1Dスキャナコントローラ17a、17bの制御により1DスキャナPa、Pbが起動されると(ステップD30)、1DスキャナPによりレーザ光が発光されて、コードスキャンが開始される(ステップD31)。
1DスキャナPによるスキャン開始後は、ステップD6の処理に戻り、再度1DスキャナPa、Pb及び2DスキャナQによるコードスキャンが行われて、2次元コードのデコードが成功するまで2DスキャナQのパラメータの変更及びコード画像の補正が繰り返される。
以上のように、コード読取装置20に、2台の1DスキャナPa、Pbと1台の2DスキャナQを搭載し、予め読取対象のコードまでの距離と、2DスキャナQにより読み取られたエリア画像における1DスキャナPa、Pbからの光ビームの照射位置との相関関係をテーブル化して備えておくことにより、コード読取時に2DスキャナQにより得られたエリア画像における1DスキャナPa、Pbの光ビームの照射位置から読取対象のコードまでの距離を算出することができる。そして、算出された距離に応じて最適なコード読取を行えるように2DスキャナQの読取時の各種パラメータを変更設定するので、コードを正確に読み取ることができ、読取性能を向上させることができる。
また、読取対象コードのピッチ角度と、2DスキャナQにより読み取られたエリア画像における光ビームの照射位置の傾斜角度との相関関係をテーブル化して備えておくことにより、コード読取時に2DスキャナQから得られたエリア画像における光ビームの照射位置の傾斜角度から読取対象コードのピッチ角度を算出することができる。そして、算出されたピッチ角度に応じて最適なデコードを行えるようにコードスキャンされたコード画像の画像補正を行うので、コードを正確にデコードすることができ、デコード性能を向上させることができる。
また、1DスキャナPa、Pb及び2DスキャナQを同時搭載しているので、1次元コード及び2次元コードの両方を読み取ることができ、利便性が良い。さらに、照射された光ビームの走査方向が異なるように2台の1DスキャナPa、Pbを備えるので、1次元コードの読取位置の自由度を向上させることができる。