以下、本発明のコード読み取り装置の実施形態について図1〜図33を参照して詳細に説明する。コード読み取り装置は、イメージセンサで露光・結像することにより生成したデジタルコードの画像データをデコードすることで、当該デジタルコードによって符号化された情報(例えば、価格やシリアル番号等の商品管理情報、URLやE−mailアドレス等がある。)を解読する装置である。
デジタルコードのコード形式には、1次元コード(バーコード)のJAN(Japan Article Number)、code39、ITF(Interleaved Two of Five)等や、2次元コードのQR(Quick Response)コード(QRコードは(株)デンソーウェーブの登録商標)、PDF417(PDF417はシンボルテクノロジー社の登録商標)、DataMatrixコード(DataMatrixコードはデータマトリックス社の登録商標)、Maxiコード(MaxiコードはUSP社の登録商標)等があり、CPUは、イメージセンサにより生成された画像データに対して、コード形式に適応したデコードを行う。
このコード読み取り装置は、例えば、POS(Point of Sales)システムのバーコードリーダ、バーコードスキャナ等に適用されるが、その適用例はこれに限られず、例えば、ハンディターミナルや携帯電話、PDA(Personal Digital Assistant)の各種電子機器に適宜適用可能である。
〔第1実施形態〕
先ず、コード読み取り装置1の第1実施形態について図1〜図10を参照して説明する。図1は、コード読み取り装置1の機能構成の一例を示すブロック図である。図1に示すようにコード読み取り装置1は、CPU10と、ROM20と、RAM30と、専用ASIC50とがシステムバス90に接続されて構成されている。
CPU10は、ROM20に記憶されたプログラムに基づいた処理を実行し、各機能部への指示やデータの入出力を行うことで、コード読み取り装置1を統括的に制御する。また、CPU10は、フレーム画像31のデコードを行うデコーダとして機能する。
このフレーム画像31は、第1イメージセンサSa及び第2イメージセンサSbによって生成されたデジタルコードの画像データである。CPU10は、フレーム画像31を2値化した結果、デジタルコードが1次元コードであった場合、バーコードの長さ及び幅と、隣り合うバーの間隔とを算出して、その算出結果を元に情報の復元を行い、また、デジタルコードが2次元コードであった場合は、白黒のデータセルの配置パターンを元にデコード(復元)を行う。また、デコードして得られた情報に対して、フレーム画像31のデジタルコードに含まれるチェックディジットによって誤り訂正を行う。尚、CPU10のデコード機能は、CPU10とは別個の電子回路でハード的に実現することとしてもよい。
ROM20は、各種初期設定やハードウェアの検査等を行うための初期プログラムや、コード読み取り装置1の動作に係る各種機能を実現するためのプログラムを格納する。
RAM30は、CPU10が実行する各種プログラムの実行に係るデータ等を一時的に保持する記憶領域である。図1によれば、RAM30は、上述したフレーム画像31を記憶している。
専用ASIC50は、コード読み取り装置1のために独自に設計・製造されたLSI(Large Scale Integration)であり、レンズユニット40が有する第1イメージセンサSa及び第2イメージセンサSbそれぞれの露光制御と、これらのイメージセンサSa及びSbにより生成された画像データのRAM30への転送とを行う。
図2にレンズユニット40の構成例を示す。レンズユニット40は、撮影レンズ41と、プリズムPと、近接用レンズ43aと、遠方用レンズ43bと、第1イメージセンサSaと、第2イメージセンサSbとを備えて構成される。
プリズムPは、例えば、ハーフプリズムやペンタプリズム等により構成され、撮影レンズ41を透過した入力画像Fgの光路を図2の矢印Va及びVbの方向に分岐する。プリズムPにより分岐された入力画像Fgは、近接用レンズ43a及び遠方用レンズ43bそれぞれに投射される。
近接用レンズ43aと遠方用レンズ43bとは、異なる焦点を持つ単焦点レンズであり、図3に示す読取深度特性及び分解能特性を有している。読取深度特性は、デジタルコードの読み取りが可能となるレンズから当該デジタルコードまでの距離(深さ)、即ちレンズがサポートする焦点距離の特性である。
図3(a)に示すように、近接用レンズ43aの読取深度特性はおよそ30〜350mmである。これは、近接用レンズ43aからの距離が約30〜350mmのデジタルコードをピンぼけすることなく明瞭に読み取りできることを表している。また遠方用レンズ43bの読取深度特性はおよそ130〜630mmである。
分解能特性は、読み取り及び識別が可能となるデジタルコードのバーの細さ又はセルの大きさの特性である。図3(b)に示すように、近接用レンズ43aの分解能特性はおよそ0.08〜0.38mmであり、遠方用レンズ43bは、およそ0.25〜1.2mmである。
これは、例えば、2次元コードのセルの一辺の長さが0.8〜0.38mmである場合は、近接用レンズ43aを透過したデジタルコードのセルが識別可能であり、0.25〜1.2mmである場合は、遠方用レンズ43bを透過したデジタルコードのセルが識別可能であることを表している。このように異なる特性を持つ近接用レンズ43a及び遠方用レンズ43bそれぞれに、撮影レンズ41により捉えられた入力画像Fgが投射されることとなる。
第1イメージセンサSa及び第2イメージセンサSbは、CMOS(Complementary Metal Oxide Semiconductor)センサやCCD(Charge Coupled Device)の撮像素子を備えて構成され、デジタルコードの光学像、即ち入力画像Fgを露光・走査することで、当該入力画像Fgを光学的に読み取り(光電変換して)、画像データを生成する。
第1イメージセンサSaは、近接用レンズ43aを透過した入力画像Fgaの画像データを生成し、第2イメージセンサSbは、遠方用レンズ43bを透過した入力画像Fgbの画像データを生成する。このため、レンズユニット40全体として読取深度特性は、図3(a)のように近接用レンズ43a及び遠方用レンズ43bの読取深度特性それぞれを合成したおよそ30〜630mmとなり、分解能特性は、図3(b)のように近接用レンズ43a及び遠方用レンズ43bの分解能特性を合成したおよそ0.08〜1.2mmとなる。
また、各イメージセンサは、水晶発振器等の発振回路を有して構成され、ピクセルクロック信号PCLK、水平同期信号Hsync及び垂直同期信号Vsyncを内部的に生成して、こられの信号に基づいて、ピクセル単位、ライン毎及びフレーム単位の走査を制御する。ピクセルクロック信号PCLKは、1ピクセル(例えば、8bitのデータ)毎の走査を制御するクロック信号である。水平同期信号Hsyncは1ライン毎の走査を制御する同期信号、垂直同期信号Vsyncは1フレーム毎の走査を制御する同期信号である。
イメージセンサは、入力される光学像をピクセルクロック信号PCLKに基づいて露光・走査して、ピクセル単位の画像データを生成して専用ASIC50に出力する。そして、水平同期信号HsyncがH(High)の間に、ピクセルクロック信号PCLKに基づいて1ピクセルずつ水平方向に走査することで1ラインの走査を行い、Lに切り替わったら当該走査するラインを垂直方向にずらす。尚、このLの間は無効データ(ダミーデータ)を出力する。このため、専用ASIC50は、水平同期信号Hsyncに同期してデータを取得することで、ライン単位の有効な画像データのみを取得することができる。
また、イメージセンサは、垂直同期信号VsyncがLの間に、ピクセルクロック信号PCLK及び水平同期信号Hsyncに基づいて走査して得られた1フレーム分の画像データを専用ASIC50に出力し、Hの間に無効データを出力する。このため、専用ASIC50は、垂直同期信号Vsyncに同期してデータを取得することで、フレーム単位の有効な画像データのみを取得することができる。
第1イメージセンサSa及び第2イメージセンサSbそれぞれは、生成したピクセルクロック信号PCLK、水平同期信号Hsync及び垂直同期信号Vsyncを専用ASIC50のセレクタ61に出力する。
専用ASIC50は、図1に示すように、タイミングコントローラ51と、データバッファ53と、RAM30に直接アクセスしてデータの読み書きを行うDMA55と、AE(Auto Exposure)計算器57、イメージセンサコントローラ59及びセレクタ61を備えて構成される。
セレクタ61は、第1イメージセンサSaから入力される入力画像Fgaと、第2イメージセンサSbから入力される入力画像Fgbとを交互に選択して、データバッファ53に出力する。
より具体的には、第1イメージセンサSa及び第2イメージセンサSbから出力される垂直同期信号Vsyncに基づいて、図4に示すような周期の矩形波のセレクト信号61aを生成する。そして、このセレクト信号61aがHのときに、第1イメージセンサSaから入力される入力画像Fgaの画像データをデータバッファ53に出力する。また、このとき、第1イメージセンサSaから入力されるピクセルクロック信号PCLK、水平同期信号Hsync及び垂直同期信号Vsyncをタイミングコントローラ51に出力する。
一方、セレクト信号61aがLのときは、第2イメージセンサSaから入力される入力画像Fgbの画像データをデータバッファ53に、ピクセルクロック信号PCLK、水平同期信号Hsync及び垂直同期信号Vsyncをタイミングコントローラ51に出力する。
タイミングコントローラ51は、セレクタ61から入力されるピクセルクロック信号PCLK、水平同期信号Hsync及び垂直同期信号Vsyncに基づいて、データバッファ53に入力される画像データの蓄積(バッファリング)を制御する回路部である。
データバッファ53は、イメージセンサによって読み取られた入力画像の画像データを一旦蓄積した後にDMA55に出力する回路部である。図1によれば、データバッファ53は、バッファセレクタBSと、第1ラインバッファLBaと、第2ラインバッファLBbとを備えて構成される。バッファセレクタBSは、セレクタ61を介して入力された画像データを蓄積させるラインバッファを択一的に選択して切り替える回路部である。
ここで、タイミングコントローラ51及びデータバッファ53の動作を簡単に説明すると次のようになる。先ず、バッファセレクタBSは、タイミングコントローラ51の制御に基づいて、セレクタ61を介して入力される1ピクセルずつの画像データを第1ラインバッファLBa及びAE計算器57に出力する。
そして、バッファセレクタBSが、第1ラインバッファLBaに1ライン分の画像データを出力した後に、タイミングコントローラ51の制御に基づいてその出力先を第2ラインバッファLBbに切り替えて、次の1ライン分の画像データを出力する。第2ラインバッファLBbに画像データを蓄積している間、第1ラインバッファLBaに蓄積された1ライン分の画像データは、DMA55を介してRAM30に転送されて、フレーム画像31のデータ領域に書き込まれる。次いで、バッファセレクタBSが第1ラインバッファLBaに出力を切り替えると、第2ラインバッファLBbに蓄積された画像データがDMA55を介してRAM30に書き込まれる。
このように、第1ラインバッファLBa及び第2ラインバッファLBbにはライン単位の画像データが記憶され、RAM30のフレーム画像31のデータ領域には、イメージセンサで生成さえた入力画像の画像データが1ラインずつ書き込まれて、結果的に1フレーム分の画像データがフレーム画像31として記憶されることとなる。
また、セレクタ61が、第1イメージセンサSaと、第2イメージセンサSbとを1フレームおきに交互に選択することで、フレーム画像31は、第1イメージセンサSaにより読み取られた入力画像Fgaの画像データと、第2イメージセンサSbにより読み取られた入力画像Fgbの画像データとで交互に更新される。
AE計算器57は、バッファセレクタBSから入力される画像データの露光量が適正露光となるように、露光値(シャッター速度及び絞り値)を計算する回路部である。イメージセンサコントローラ59は、I2Cインターフェイス等により構成され、AE計算器57により計算された露光値を、セレクタ61を介して第1イメージセンサSa及び第2イメージセンサSbに出力し、各イメージセンサの露光設定値を変更する。このとき、セレクタ61はセレクト信号61aに基づいて選択しているイメージセンサに対して、当該露光値を出力する。この露光値は、イメージセンサの次に露光・走査するフレームの入力画像の露光・走査に対して反映される。
次に、図4のタイムチャートを用いて、コード読み取り装置1の具体的な動作を説明する。尚、同図において、入力画像の読み取りを第1イメージセンサSaから先に行うこととしているが、第2イメージセンサSbから行うこととしてもよく、例えば、デジタルコードとレンズユニット40との距離を400mm以上離して使用されるコード読み取り装置1の場合は、第2イメージセンサSbから行うようにしてもよく、その順序は適宜変更可能である。
先ず、第1イメージセンサSaは、垂直同期信号VsyncがLの間に露光を行って、入力画像A1,A1−1,A2,A2−1,・・・,という順次で読み取りを行う。上述したように露光設定は2フレームおきに更新されるため、入力画像A1と入力画像A1−1と略同一の画像データであり、入力画像A2と入力画像A2−1とが略同一となる。また、第2イメージセンサSbも垂直同期信号Vsyncに基づいて、入力画像B1,B1−1,B2,・・・,と順次読み取りを行う。
セレクタ61は、セレクト信号61aがHの間に第1イメージセンサSaを選択して、入力される画像データをデータバッファ53及びDMA55を介してRAM30に転送させる。従って、第1イメージセンサSaが時刻t1に露光開始して読み取られた入力画像A1の画像データは、その読み取り終了後の時刻t3にRAM30に転送してフレーム画像31にとして記憶される。
そして、時刻t5には、セレクト信号61aがLとなり、第2イメージセンサSaが読み取った入力画像B1の画像データがRAM30に転送される。このため、図4に示すようにRAM30のフレーム画像31は、入力画像A1,B1,A2,B2,・・・,といったように第1イメージセンサSa及び第2イメージセンサSbにより読み取られた入力画像の画像データで交互に更新される。また、露光設定値が変わらないまま露光されて得られた入力画像A1−1や入力画像B1−1は、RAM30には転送されない。
CPU10は、入力画像A1,B1,A2,・・・,といった順に更新されていくフレーム画像31を順次デコードして、フレーム画像31のデジタルコードで符号化された情報を解読・取得する。
以上、第1実施形態によれば、プリズムPを介することで、異なる焦点を持つ近接用レンズ43aと遠方用レンズ43bとに、撮影レンズ41を透過した入力画像Fgを投射することができるため、第1イメージセンサSa及び第2イメージセンサSbそれぞれに入力されるデジタルコードの画像データは同一であり、その構図がずれてしまうことがない。
また、焦点を調整するための調整機構のような駆動部を設けることなく、2つのレンズで入力画像を捉えることができるため、落下や振動、衝撃といった外的要因による故障を減らすことができ、電源消費も少なくなる。
また、近接用レンズ43aを透過した入力画像Fgaと、遠方用レンズ43bを透過した入力画像Fgbとで交互にフレーム画像31が更新されるため、異なる画質のフレーム画像31を順次デコードできる。このため、従来のコード読み取り装置100ように次のデコードまでの空き時間を無駄にすることがなく、デコードの効率化が図れる。
また、近接用レンズ43a及び遠方用レンズ43bを透過した入力画像Fga及びFgbをそれぞれデコードするため、コード読み取り装置1全体での見かけ上の読取深度特性及び分解能特性が広くなる。また、焦点を合わせるためのオートフォーカスを設ける必要がないため、高速に入力画像を読み取ることができる。
尚、レンズユニット40は、上述した図2の構成例に限らず適宜変更可能である。次に、図5〜図7を用いてレンズユニット40の構成を変えた場合の変形例を説明する。尚、以下の説明において、第1実施形態のコード読み取り装置1と同一の構成要素には、同一の符号を付してその詳細な説明を省略する。
〔第1実施形態の第1変形例〕
図5(a)は、第1変形例におけるレンズユニット40aの構成の一例を示す図である。
図5(a)によれば、レンズユニット40aは、撮影レンズ41、プリズムP1、近接用レンズ43a、遠方用レンズ43b、中域用レンズ43c及び第1〜第3イメージセンサSa〜Scを備えて構成される。
プリズムP1は、例えば、ダイクロイックプリズム等により構成され、撮影レンズ41を透過した入力画像Fgの光路を図5(a)のように3方向に分岐する。中域用レンズ43cは、近接用レンズ43a及び遠方用レンズ43bとは異なる焦点を持つレンズであり、第3イメージセンサScは、中域用レンズ43cを透過した入力画像Fgcの読み取りを行う。
例えば、約30〜350mmの読取深度特性を持つ近接用レンズ43aと、約300mm〜650mmの中域用レンズ43cと、約600〜900mmの遠方用レンズ43bとによってレンズユニッ401を構成することにより、全体の読取深度特性を約30〜900mmと広くすることができる。
また、個々のレンズの読取深度特性の幅が狭い高性能なレンズを採用することで、レンズユニット40の性能向上が期待でき、また、同様の効果が分解能特性についても得られる。尚、図5(b)のように、レンズユニット40bとして、近接用レンズ43a、遠方用レンズ43b及び中域用レンズ43cと、プリズムP2とを一体的に形成することとしてもよい。
〔第1実施形態の第2変形例〕
図6は、第2変形例におけるレンズユニット40cの構成の一例を示す図である。図6によれば、レンズユニット40cは、撮影レンズ41と、反射ミラーMと、近接用レンズ43aと、遠方用レンズ43bと、第1及び第2イメージセンサSa及びSbとを備えて構成され、中空状のT字型に形成されている。
反射ミラーMは、例えば、ステップモーター等により回転軸Pb1を中心に左右に振動・回転可能に構成され、撮影レンズ41を透過した入力画像Fgを矢印Vc及びVd方向に反射することで、当該入力画像Fgを近接用レンズ43a及び遠方用レンズ43bに投射する。
より具体的には、先ず、入力画像Fgを矢印Vcの方向へ反射させるために、入力画像Fgの入射角が45度になるような角度で、反射ミラーMを図6のように一時停止する。そして、図6の実線で示した反射ミラーMを、波線で示す反射ミラーMまで時計回りに90度回転させて一時停止する。これにより、入力画像Fgは矢印Vdの方向に反射して、遠方用レンズ43bに入力される。
次に、波線で示す反射ミラーMを反時計回りに90度回転させて停止することで、矢印Vcの方向に入力画像Fgを反射させる。このように、反射ミラーMの時計回り及び反時計回りの90度回転を繰り返すことで、入力画像Fgは近接用レンズ43a及び遠方用レンズ43bに交互に投射される。この回転の周期を短くすることで、入力画像Fgの高速な読み取りが可能となる。
このように第2変形例によれば、反射ミラーMを所定周期で回転することで、入力画像Fgを近接用レンズ43a及び遠方用レンズ43bに交互に投射する。このため、第1イメージセンサSa及び第2イメージセンサSbの画像データの出力も交互となるため、画像データを選択するための第1実施形態のセレクタ61を設ける必要がなくなる。従って、専用ASIC50の回路構成の小型化及び簡略化ができる。
尚、分光手段をプリズムや反射鏡により実現することとしたが、その実現方法は適宜公知技術を採用可能であり、例えば、光ファイバーを用いて撮影レンズ41を透過した入力画像Fgの光路を分岐することとしてもよい。
〔第1実施形態の第3変形例〕
次に、図7(a)に、第3変形例におけるレンズユニット40dの構成例を示す。図7(a)によれば、レンズユニット40dは、撮影レンズ41と、スライドユニットSUと、イメージセンサ45とを備えて構成される。
スライドユニットSUは、図7(a)に示すように上下に区切られており、上側に近接用レンズ43a、下側に遠方用レンズ43bが設けられている。スライドユニットSUは、所定の周期で上下にスライド(振動)することで、撮影レンズ41を透過した入力画像Fgは、近接用レンズ43aと遠方用レンズ43bとに交互に投射される。このため、イメージセンサ45には、近接用レンズ43aを透過した入力画像Fgと、遠方用レンズ43bを透過した入力画像Fgとが交互に入力される。
このように第3変形例によれば、近接用レンズ43a及び遠方用レンズ43bをスライドさせることで、入力画像Fgの光路の分岐を行うことなく、1つのイメージセンサ45に近接用レンズ43a及び遠方用レンズ43bそれぞれを透過した入力画像Fgを投射することができる。このため、イメージセンサ45を複数設ける必要がなくなる。
〔第1実施形態の第4変形例〕
次に、図7(b)に、第4変形例におけるレンズユニット40eの構成例を示す。図7(b)によれば、レンズユニット40eは、撮影レンズ41と、回転盤47と、イメージセンサ45とを備えて構成される。
回転盤47は、薄板状の円盤型に形成され、異なる焦点をそれぞれ持つ第1レンズ49a(近接用レンズ43a)、第2レンズ49b(遠方用レンズ43b)、第3レンズ49c及び第4レンズ49dが回転軸Pb3を中心にして配設されている。この回転盤47は、回転軸Pb3を中心に回転可能に構成される。このため、撮影レンズ41を透過した入力画像Fgは、回転盤47の回転周期の応じて、第1レンズ49a、第2レンズ49b、第3レンズ49c、第4レンズ49dといった順に透過して、イメージセンサ45に投射される。
このように第4変形例によれば、回転盤47上に複数のレンズを配設することができるため、レンズユニット40eの読取深度特性及び分解能特性の幅を更に広げることができ、また、第1変形例のように、個々のレンズの焦点を狭小にしてレンズユニット40eの精度を上げることもできる。また、第3変形例と同様に、入力画像Fgの光路の分岐を行わなくてもよいため、イメージセンサを複数設ける必要がない。
次に第5及び第6変形例について図8〜図10を用いて説明する。第1実施形態におけるコード読み取り装置1は、第1イメージセンサSa及び第2イメージセンサSbそれぞれに生成されたデジタルコードの画像データを、セレクタ61によって切り替えて順次取得することとしたが、第5及び第6変形例におけるコード読み取り装置1a及び1bは、その画像データを個々に独立した経路で取得するものである。尚、以下の説明において、第1実施形態のコード読み取り装置1と同一の構成要素には同一の符号を付して、その説明を省略する。
〔第1実施形態の第5変形例〕
図8に、第5変形例におけるコード読み取り装置1aのブロック図を示す。図8によれば、コード読み取り装置1aは、CPU10、ROM20、RAM30及び専用ASIC50aがシステムバス90に接続されて構成されている。専用ASIC50aは、第1系統ブロック50aと、第2系統ブロック50bと、DMA55と、AE計算器57と、イメージセンサコントローラ59とを備えて構成される。
第1系統ブロック50aは、第1イメージセンサSaにより生成された画像データを第1フレームメモリFMaに記憶させるための処理系統であり、第2系統ブロック50bは、第2イメージセンサSbにより生成された画像データを第2フレームメモリFMbに記憶させるための処理系統である。第1フレームメモリFMa及び第2フレームメモリFMbは、RAMやフラッシュメモリ等により構成される記憶領域である。
第1系統ブロック50aは、タイミングコントローラ51aと、データバッファ53aと、メモリコントローラMCaとを有して構成される。タイミングコントローラ51aは、第1イメージセンサSaから入力されるピクセルクロック信号PCLK、水平同期信号Hsync及び垂直同期信号Vsyncに基づいて、データバッファ53aに画像データを所定のデータ量分(例えば、1ライン分)蓄積させる。
メモリコントローラMCaは、第1フレームメモリFMaに対するデータの書き込みと、CPU10からの第1フレームメモリFMaへのアクセスとを制御する。より具体的には、1フレーム分の画像データがデータバッファ53aに入力されている間は、当該画像データを第1フレームメモリFMaに記憶させる。そして、1フレーム分の画像データの第1フレームメモリFMaへの記憶を終了すると、CPU10からの第1フレームメモリFMaへのアクセスを許可し、その間、第1フレームメモリFMaへの書き込みは行わない。これにより、CPU10は、第1イメージセンサSaにより読み取られたデジタルコードの画像データのデコードを行う。
また、データバッファ53aは、第1イメージセンサSaから入力された画像データをAE計算器57に出力する。AE計算器57は、当該画像データから露光値を再計算し、当該露光値を露光設定値として第1イメージセンサSaにイメージセンサコントローラ59を介して出力する。
第2系統ブロック50bは、タイミングコントローラ51bと、データバッファ53bと、メモリコントローラMCbとを有して構成される。尚、第2系統ブロック50bの処理は、第1系統ブロック50aと同様であるので、その説明を省略する。
以上、第5変形例によれば、第1イメージセンサSa及び第2イメージセンサSbそれぞれにより生成されたデジタルコードの画像データを第1フレームメモリFMa及び第2フレームメモリFMbにそれぞれ記憶する。このため、コード読み取り装置1aのシステムメモリとして使用されるRAM30の空き領域が増えるため、コード読み取り装置1aの負荷を低減させることができる。尚、このようなコード読み取り装置1aは、無線通信機能等の負荷の高い処理を行うハンディターミナル等に適用することで、その効果が好適に作用する。
〔第1実施形態の第6変形例〕
図9に、第6変形例におけるコード読み取り装置1bのブロック図を示す。図9によれば、コード読み取り装置1bは、CPU10、ROM20、RAM30及び専用ASIC50bがシステムバス90に接続されて構成されている。
専用ASIC50bは、第1系統ブロック52aと、第2系統ブロック52bと、DMA55と、AE計算器57と、イメージセンサコントローラ59と、メモリコントローラMCと、画像合成プロセッサ82とを備えて構成される。
第1系統ブロック52aは、第1イメージセンサSaにより生成された画像データを1ラインずつ画像合成プロセッサ82に出力するための処理系統であり、第2系統ブロック50bは、第2イメージセンサSbにより生成された画像データを1ラインずつ画像合成プロセッサ82に出力するための処理系統である。
第1系統ブロック52aは、タイミングコントローラ51cと、バッファセレクタBSaと、第1ラインバッファLB1aと、第2ラインバッファLB2aとを有して構成される。タイミングコントローラ51cは、第1イメージセンサSaから入力されるピクセルクロック信号PCLK、水平同期信号Hsync及び垂直同期信号Vsyncに基づいて、バッファセレクタBSaのラインバッファの選択と、画像データの出力とを制御する。
バッファセレクタBSaは、第1イメージセンサSaから入力されるピクセル単位の画像データを第1ラインバッファLB1a及び第2ラインバッファLB1bに交互に1ラインずつ出力する。このとき、タイミングコントローラ51cは、垂直同期信号Vsyncに基づいて、その画像データの出力先を第1ラインバッファLB1aと第2ラインバッファLB2aとで交互に切り替えさせる。第1ラインバッファLB1a及び第2ラインバッファLB2aには順次1ラインずつの画像データが蓄積され、この画像データが画像合成プロセッサ82に出力される。
第2系統ブロック52bは、タイミングコントローラ52d、バッファセレクタBSbと、第1ラインバッファLB1bと、第2ラインバッファLB2bとを有して構成される。尚、第2系統ブロック52bの処理は第1系統ブロック52aと同様であるので、その説明を省略する。
画像合成プロセッサ82は、第1系統ブロック52a及び第2系統ブロック52bそれぞれから入力される画像データを合成する回路部である。第1系統ブロック52a及び第2系統ブロック52bからは、バッファセレクタBSa及びBSbのラインバッファの選択により1ライン毎の画像データが出力される。画像合成プロセッサ82は、この1ライン毎の画像データに画像処理を施すことで合成して、メモリコントローラMCを介してフレームメモリFMに記憶する。
フレームメモリFMは、RAMやフラッシュメモリ等により構成される記憶領域である。メモリコントローラMCは、図8のメモリコントローラMCa及びMCbと同様に、フレームメモリFMに対するデータの書き込みと、CPU10からのフレームメモリFMへのアクセスの制御と行う。AE計算器57は、画像合成プロセッサ82により合成された画像データから露光値を再計算して、第1イメージセンサSa及び第2イメージセンサSbの露光設定値を変更する。
例えば、図10(a)のように近接用レンズ43aの焦点が約50〜300mmであり、遠方用レンズ43bが約400〜1000mmであった場合に、レンズユニット40からの距離が350mmの地点Ptにあるデジタルコードの読み取りを行うこととする。この場合、近接用レンズ43a及び遠方用レンズ43bのそれぞれは、地点Ptのデジタルコードに対して焦点(ピント)を合わせることが難しくなる。
このため、近接用レンズ43aを透過した入力画像Fgと、遠方用レンズ43bを透過した入力画像Fgbとは、図10(b)のようにピンぼけしてコントラストが低くなってしまう。そこで、画像合成プロセッサ82がこの入力画像Fga及びFgbを合成することで、図10(b)のように明瞭な合成画像Fgsが得られる。
このように第6変形例によれば、第1イメージセンサSa及び第2イメージセンサSbそれぞれにより生成された画像データを合成し、この合成した画像データで露光値の再計算及びデコードを行う。このため、近接用レンズ43a及び遠方用レンズ43bそれぞれの焦点の合わない状態でデジタルコードを読み取ったとしても、当該デジタルコードのコントラストを高めることで、デコード率を上げることができる。また、近接用レンズ43a及び遠方用レンズ43bの焦点をはずれた位置のデジタルコードの読み取りも可能になる。
〔第2実施形態〕
次に、本発明を適用したコード読み取り装置2の第2実施形態について図11〜図20を用いて説明する。尚、以下の説明において、従来のコード読み取り装置100と同一の構成要素には同一の符号を付して、その説明を省略する。
図11は、コード読み取り装置2の機能構成の一例を示すブロック図である。図11に示すように、コード読み取り装置2は、図34(a)に示したコード読み取り装置100にモード設定スイッチSWを更に備えた構成である。
モード設定スイッチSWは、コード読み取り装置2の露光モードの設定・切り替えを行うための、例えば、ディップスイッチにより構成されるスイッチである。モード設定スイッチSWは、設定された露光モードを識別するためのモード値をCPU10に出力する。
露光モードは、コード読み取り装置2の露光時の環境に合わせて予め定めた露光設定とLED設定との組み合わせであり、図12(a)に示すように、デフォルトモード、屋外モード、窓際モード、屋内モード及び倉庫モードの5種がある。露光設定には、最大露光値と、フレームレイトとがあり、LED設定には輝度がある。
図12(b)は、イメージセンサ70が単位時間当たりに露光するフレーム数であるフレームレイトと、環境照度との関係を示す図であり、この関係を利用して、露光モードの露光設定及びLED設定を定める。
例えば、フレームレイトが10fps(frame per second)の場合に、デジタルコードの画像データを明瞭に取得できる環境照度は、150〜600Lux程度であり、フレームレイトを高くする、即ち露光時間を短く(シャッター速度を速く)すると、短い時間内に必要量の光量を露光する必要があるために図12(b)のように環境照度は高くなっていく。
このような、フレームレイトと環境照度との関係から、例えば、倉庫内の暗い環境での露光時には、フレームレイトを低くすることで露光時間を長くし、LEDの輝度を高くすることで、充分な露光量が得られるように倉庫モードの露光設定及びLED設定を定める。
また、図11によれば、ROM20は、コード読み取りプログラム21を記憶し、RAM30は、フレーム画像31と、露光設定値33、最大露光値35と、フレームレイト37と、LED輝度39、モード値32とを記憶している。コード読み取りプログラム21は、図13及び14に示すコード読み取り処理を実現するためのプログラムである。
露光設定値33は、イメージセンサ70が実際に露光する際の露光値であり、露光が行われる度に、CPU10によりがその露光量が適正となるように露光値が計算されて更新される。モード値32は、モード設定スイッチSWから出力されるモード値であり、初期状態では「0」が記憶される。
最大露光値35、フレームレイト37及びLED輝度39は、ユーザにより設定された露光モードに応じて図12(a)に示す各値がCPU10によって設定される。尚、初期状態においては、露光モードはデフォルトモードに設定されて、最大露光値35に「100」、フレームレイト37に「30」、LED輝度39に「100」が記憶される。
CPU10は、露光設定値33及びLED輝度39に基づいてイメージセンサ70を制御して露光を行う。また、水晶発振器等の発振回路を有しており、この発振回路から出力されるクロック信号に基づいて計時を行う。
次に、コード読み取り装置2の具体的な動作を、図13及び14のフローチャートを用いて説明する。CPU10は、ROM20に記憶されたコード読み取りプログラム21を読み出すことで、図13に示すコード読み取り処理を開始すると共に経過時間の計時を始める。
先ず、CPU10は、図13に示すコード読み取り処理において、モード設定スイッチSWの状態を取り込んで(ステップS1)、図14に詳細を示す露光モード設定処理を開始すると(ステップS3)、当該スイッチにより設定された露光モードのモード値32を取得する(ステップS31)。
そして、その取得したモード値32が“1”である、即ち屋外モードに設定されたと判定した場合は(ステップS33;Yes)、ステップS41に進み、最大露光値35に「100」、フレームレイト37に「30」、LED輝度39に「50」を記憶する。そして、ステップS41の実行後は露光モード設定処理を終了して図13に示すコード読み取り処理のステップS5に進む。
また、モード値32が“2”である、即ち窓際モードに設定されたと判定した場合は(ステップS35;Yes)、ステップS43に進み、最大露光値35に「200」、フレームレイト37に「30」、LED輝度39に「50」を記憶する。そして、ステップS43の実行後は露光モード設定処理を終了して図13に示すコード読み取り処理のステップS5に進む。
また、モード値32が“3”である、即ち屋内モードに設定されたと判定した場合は(ステップS37;Yes)、ステップS45に進み、最大露光値35に「200」、フレームレイト37に「20」、LED輝度39に「100」を記憶する。そして、ステップS45の実行後は露光モード設定処理を終了して図13に示すコード読み取り処理のステップS5に進む。
また、モード値32が“4”である、即ち倉庫モードに設定されたと判定した場合は(ステップS39;Yes)、ステップS47に進み、最大露光値35に「250」、フレームレイト37に「10」、LED輝度39に「100」を記憶する。そして、ステップS47の実行後は露光モード設定処理を終了して図13に示すコード読み取り処理のステップS5に進む。
モード値32が“1”〜“4”の何れでもない、即ち、デフォルトモードのままであると判定した場合は(ステップS39;No)、最大露光値35、フレームレイト37及びLED輝度39の設定・記憶を行わずに露光モード設定処理を終了して図13に示すコード読み取り処理のステップS5に進む。
図13のコード読み取り処理に戻ると、CPU10は、フレームレイト37に基づいて露光設定値33に初期値を設定して(ステップS5)、露光設定値33及びLED輝度39でイメージセンサ70を制御して入力画像の露光(画像キャプチャ)を行う(ステップS7)。そして、当該露光により読み取った画像データをデータバッファ53及びDMA55を介してRAM30に転送させた後(ステップS9)、フレーム画像31のデコードを行う(ステップS11)。
そして、デコードの結果、デジタルコードにより符号化された情報が取得できて、当該デコードが成功したと判定した場合(ステップS13;Yes)、CPU10は、コード読み取り処理を終了するが、失敗したと判定した場合(ステップS13;No)、計時している経過時間が例えば、5秒を超えてタイムアウトとなったか否かを判定する(ステップS15)。
CPU10は、タイムアウトになったと判定した場合(ステップS15;No)、コード読み取り処理を終了するが、タイムアウトになっていないと判定した場合(ステップS14;Yes);フレーム画像31から露光量が最適となるように露光値を再計算して、露光設定値33を更新する(ステップS17)。
尚、この露光値の再計算により最大露光値35を超えた場合は、最大露光値35を露光設定値33として設定することで、露光量が一定量を超えないように制限する。CPU10は、その計算した露光値を露光設定値33として設定した後、ステップS13及びS15の判定条件を満たすまでステップS7〜S17の処理を繰り返す。
以上、第2実施形態によれば、コード読み取り装置2が使用される環境に応じて予め定めた露光設定及びLED設定毎に露光モードを設けて、ユーザにより設定された露光モードに応じて最大露光値35、フレームレイト37及びLED輝度39を設定する。このため、倉庫内や屋内といったユーザのコード読み取り装置2の使用環境に応じて、露光モードを適切に設定することで、コントラストの高い画像データが得られるようになる。
また、モード設定スイッチSWで露光モードを選択することで、コード読み取り装置2の露光設定やLED設定が自動的に選択されるため、ユーザは、露光設定やLED設定等の設定変更を行わなくても良く、専門的な知識を要さない。
尚、第2実施形態におけるコード読み取り装置2は、ユーザのモード設定スイッチSWの操作に基づいて露光モードを設定することとしたが、その設定方法はこれに限らず適宜変更可能である。
次に、図15〜図20を用いてコード読み取り装置2の変形例について説明する。尚、以下の説明において、第2実施形態のコード読み取り装置2と同一の構成要素には、同一の符号を付してその詳細な説明を省略する。また、変形例におけるコード読み取り処理において、図13及び14に示したフローチャートと同一の処理ステップには、同一のステップ番号を付してその説明を省略する。
〔第2実施形態の第1変形例〕
先ず、コード読み取り装置2の第1変形例について説明する。第1変形例におけるコード読み取り装置2は、図11に示したコード読み取り装置1からモード切替スイッチSWを削除した構成である。
図15(a)は、第1変形例におけるコード読み取り処理を説明するためのフローチャートである。先ず、CPU10は、露光設定値33に予め定められた初期値を記憶して初期設定を行った後(ステップS2)、図15(b)に示す露光モード設定処理を開始する。初期状態では、モード値32は“0”であるから、CPU10は、露光モード設定処理における最大露光値35、フレームレイト37及びLED輝度39の設定を行わず、デフォルトモードを保持する。
そして、入力画像の露光、データ転送及びデコードを行った後に(ステップS5〜S11)、デコードに失敗し、更にタイムアウトではないと判定した場合は(ステップS13→S15;No)、露光値の再計算を行い(ステップS17)、露光モード切替処理(図15(b)参照)を開始する。
CPU10は、露光設定値33が最大露光値35より以上であると判定し(ステップS41;Yes)、更に、モード値32が4より小さいと判定した場合(ステップS43;Yes)、モード値32に1加算して当該モード値32を更新する。即ち、露光設定値33が最大露光値35に達してしまい、現在の露光モードよりもモード値の高い露光モードがある場合は、モード値32を次の露光モードのモード値に変更して、露光モード設定処理(ステップS3)で最大露光値35、フレームレイト37及びLED輝度39の設定を行う。
このため、露光モードを、初期状態のデフォルトモード(モード値=0)から、屋外モード(モード値=1)、窓際モード(モード値=2)、屋内モード(モード値=3)、倉庫モード(モード値=4)といった順にデコードに成功するまで切り替えることとなる。
このように、第1変形例によれば、自動的に露光モードが順次切り替わってゆき、適切な露光モードが選択・設定されるため、ユーザは、露光モードの設定操作を行わなくてもよい。
〔第2実施形態の第2変形例〕
次に、コード読み取り装置2aの第2変形例について図16〜図18を用いて説明する。コード読み取り装置2aは、図11に示したコード読み取り装置2に、照度センサ80を更に備えたものである。照度センサ80は、コード読み取り装置2a本体の外光の照度を検出し、その検出した照度に応じた検知信号をCPU10に出力する回路部である。
また、図16によれば、RAM30は、フレーム画像31、露光設定値33、最大露光値35、フレームレイト37、LED輝度39及び照度34を記憶している。CPU10は、照度センサ80から出力される検出信号に基づいて照度を取得してRAM30に記憶する。
図17は、第2変形例におけるコード読み取り処理を説明するためのフローチャートである。CPU10は、照度センサ80から出力される検出信号から照度34を取得して記憶した後(ステップS1−1)、図18に示す露光モード設定処理を開始する(ステップS3−1)。
第2変形例における露光モード設定処理では、取得した照度34に基づいて露光モードの設定を行う。即ち、CPU10は、先ず、照度34が8000Lux以上であった場合(ステップS51;Yes)、屋外モードとして最大露光値35、フレームレイト37及びLED輝度39を設定する(ステップS41)。
また、照度34が1500〜7999Luxの間の場合は(ステップS53;Yes)、窓際モードとして設定し(ステップS42)、750〜1449Luxの間の場合は(ステップS55;Yes)、屋内モードとして設定し(ステップS45)、749Lux以下である場合は(ステップS55;No)、倉庫モードとして設定し(ステップS47)。
このように、第2変形例によれば、照度センサ80が検出した照度に基づいて露光モードの設定を行うため、コード読み取り装置2aが使用されている環境照度に適した露光モードを即座に選択して設定することができる。
尚、照度センサ80に基づいて露光モードを設定するだけではなく、例えば、紫外線を検出する紫外線センサを備えて、当該紫外線センサにより検出された紫外線が所定量を超えた場合には屋外モードに設定し、所定量未満であれば屋内モードに設定することとしてもよい。
また、露光モードの種類は、図12(a)に示したものに限らず、例えば、デジタルコードが記録される記録紙の色に基づいて露光モードを設定することとしてもよい。デジタルコードが記録される記録紙には、例えば、値札のように白地のものや、ダンボール紙のような有色のものがある。
図19(a)に示すように、白地の記録紙上に記録されたバーコードC1のフレーム画像31は、図19(b)に示すようにコントラストがはっきりしているため、バーの幅や間隔の読み取りが容易である。しかし、図20(a)に示すように、ダンボール紙に記録されたバーコードC3のフレーム画像31は、図20(b)に示すように読み取りが困難となる。
そこで、露光モードとして、ダンボールモードを予め設け、このダンボールモードのモード値は「5」、最大露光値を「200」、フレームレイトを「30」、LED輝度を「100」として予め定める。そして、露光モードをダンボールモードに設定することで、図20(c)に示すようにフレーム画像31のコントラストが高くなり、バーコードC3の読み取りが可能となる。
尚、ダンボールモードへの設定の切り替えは、モード設定スイッチSWのユーザ操作に応じて行ってもよいし、また、一旦露光して得られたフレーム画像31から記録紙の色を判別した、その判別した色に応じて行ってもよい。
尚、図12に示した露光モードと、ダンボールモードとを組み合わせることとしてもよく、これにより、工場等の屋内や倉庫内において、ダンボールに記録されたデジタルコードを読み取る際のデコード率が向上される。また、記録紙の色の他に、記録紙の材質に基づいた露光モードとして、例えば、ビニルからの反射光を抑えるようにフレームレイトを高く設定したビニルモードを設けることとしてもよい。
〔第3実施形態〕
次に、本発明を適用したコード読み取り装置の第3実施形態について図21〜図27を用いて説明する。尚、第3実施形態におけるコード読み取り装置3について、図34(a)に示したコード読み取り装置100と同一の構成要素には、同一の符号を付してその説明を省略する。
図21(a)は、第3実施形態におけるコード読み取り装置3の機能構成の一例を示すブロック図である。図21に示すように、コード読み取り装置3は、図34(a)に示したコード読み取り装置100のRAM30をフラッシュメモリ300に置き換えた構成である。
フラッシュメモリ300は、データの読み書きが可能な不揮発性の記憶領域であり、図21(a)によれば、イメージセンサ70に読み取られた画像データであるフレーム画像310、第1露光設定値320、第2露光設定値330及び最適露光値350を記憶する。
上述したように、従来のコード読み取り装置100は、1フレームおきに露光設定値を更新して露光を行ったが、第3実施形態のコード読み取り装置3は、2つの露光設定値、即ち第1露光設定値320及び第2露光設定値330を交互に更新しながら露光を行っていく。最適露光値350は、前回の露光時に最適露光範囲R3内に到達した第1露光設定値320及び第2露光設定値330の何れかの露光設定値である。
ここで、図21(b)のタイムチャートを用いて、コード読み取り装置3の基本動作を説明すると次のようになる。先ず、CPU10は、第1露光設定値320に第1初期値v1、第2露光設定値330に第2初期値v2といった異なる初期値を設定する。
そして、垂直同期信号VsyncがLとなっている間の1フレーム目の露光は、第1初期値v1に設定された第1露光設定値320で行う。次いで、2フレーム目の露光は、第2初期値v2に設定された第2露光設定値330で行う。
この2フレーム目の露光の間、CPU10は、1フレーム目の露光で得られた画像データDT1をフラッシュメモリ300に転送してフレーム画像310として記憶させる。そして、画像データDT1に基づいて露光値を計算して、当該露光値(計算値AE1)を第2露光設定値330として記憶する。
そして、2フレーム目の露光が終了したら、当該露光により得られた画像データDT2をフラッシュメモリ300に転送すると共に、3フレーム目の露光を行う。この3フレーム目の露光は、計算値AE1に設定された第1露光設定値310で行う。そして、3フレーム目の露光の間に、CPU10は、2フレーム目の露光で得られた画像データDT2をフラッシュメモリ300に転送して、この画像データDT2に基づいて露光値を計算して計算値AE2を算出する。4フレーム目の露光は、この計算値AE2(第2露光設定値330)で行う。
このように、奇数番目のフレームの露光は第1露光設定値320で行って、この第1露光設定値320を逐次計算更新していく。また、偶数番目のフレームの露光は第2露光設定値330で行って、この第2露光設定値330を逐次更新していく。そして、この一連の処理を繰り返して露光設定値が最適露光範囲R3に到達するまで、2つの露光設定値によって交互に露光を行っていく。これにより、異なる露光設定値で露光した画像データがフレーム毎に順に得られるため、従来のように1つおきにデコードするといった無駄を削減し、効率のよいデコードが行える。
次に、第1初期値v1及び第2初期値v2の設定方法と、その設定後に逐次計算・更新される第1露光設定値320及び第2露光設定値330の遷移例について説明する。
図22(a)及び(b)は、イメージセンサ70が露光可能な露光値の範囲(以下、この範囲を「露光可能範囲」という。)R1内における最大値max(例えば、255)を第1初期値v1として、最小値min(例えば、0)を第2初期値v2として設定した場合の、第1露光設定値320及び第2露光設定値330の遷移例を示す図である。
ここで、コード読み取り装置3が使用されたある環境下での最適露光範囲R3が図22(a)に示すように、露光可能範囲R1内の中心値c付近であるとする。第1露光設定値320は、1フレーム目、3フレーム目、5フレーム目といった奇数番目に計算されて、第1初期値v1から順に計算値AE1,AE3,AE5,・・・,と最適露光範囲R3に近づいてゆく。
これに対して、第2露光設定値330は、2フレーム目、4フレーム目、6フレーム目といった偶数番目に計算されて、第2初期値v2から順に計算値AE2,AE4,AE6,・・・,と最適露光範囲R3に近づいてゆく。これにより、第1露光設定値320は、11フレーム目の計算値AE9で最適露光範囲R3内に到達し、このときコントラストが高いフレーム画像310が得られるようになる。
一方、図22(b)のように、最適露光範囲R3が中心値cから最小値側にずれている場合は、第2露光設定値330が計算値AE3と計算された6フレーム目に最適露光範囲R3内に到達する。このように、最適露光範囲R3が露光可能範囲R3の中心からずれた場合には、図22(a)に示した遷移例よりも、第2露光設定値330が高速に最適露光範囲R3内に到達することができる。尚、図示は省略するが、最適露光範囲R3が露光可能範囲R3の中心から最大値側にずれた場合、第1露光設定値320が同様に最適露光範囲R3に早く到達するのは勿論である。
図23(a)及び(b)は、フラッシュメモリ300に記憶された最適露光値350を第1初期値v1として設定し、最大値maxから最適露光値350を減算した露光設定値を第2初期値v2として設定した場合の、第1露光設定値320及び第2露光設定値330の遷移例を示す図である。
図23(a)及び(b)に示すように初期値v1及び初期値v2は、露光可能範囲R1の中心値cを中心として線対称な位置関係となり、最適露光値350は、図22(b)において最適露光範囲R3内に到達した計算値AE3とする。このため、図22(b)で使用したコード読み取り装置3と同等の環境下で当該装置が使用された場合は、第1露光設定値320として設定された第1初期値v1は、図23(a)に示すように既に最適露光範囲R3内であるため、第1露光設定値320及び第2露光設定値330の再計算を行う必要がない。
一方、最適露光範囲R3が図23(b)のように中心値cの上側となる場合は、4フレーム目で計算された第2露光設定値330の計算値AE2が当該最適露光範囲R3内に到達する。このように、過去の露光時に最適露光範囲R3内に到達した露光設定値、即ち最適露光値350を初期値として設定することで、コード読み取り装置3の使用環境が変化した場合にも、比較的早く最適露光範囲R3内に安定するようになる。
図24(a)は、第1初期値v1として最大値maxを設定し、この第1初期値v1に対してオフセットを持たせた値を第2初期値v2として設定した場合の、第1露光設定値320及び第2露光設定値330の遷移例を示す図である。
第2初期値v2は、第1初期値v1よりも中心値c側となるため、第2露光設定値330は、第1露光設定値320よりも早く最適露光範囲R3に到達する。また、最適露光範囲R3が第1初期値v1と第2初期値v2との間になる場合は、第1露光設定値320が最適露光範囲R3に早く到達する。
尚、第1初期値v1として最小値minを設定して、この第1初期値v1に対してオフセットを持たせた値を第2初期値v2として設定しても、同様の効果が得られるのは無論である。
図24(b)は、第1露光設定値320及び第2露光設定値330の他に第3露光設定値340を設け、第1初期値v1に最大値max、第2初期値v2に最小値min、第3露光設定値340の初期値である第3初期値v3に中心値cを設定した場合の、これらの露光設定値の遷移例を示す図である。
この場合、CPU10は、“3n−2(nは自然数)”フレーム目に第1露光設定値320で、“3n−1”フレーム目に第2露光設定値330で、“3n”フレーム目に第3露光設定値340でそれぞれ露光を行うように制御して、その露光毎に各露光設定値の再計算を行う。
図24(b)では、第3露光設定値340が6フレーム目で最適露光範囲R3内に到達している。また、最適露光範囲R3が最大値max側にあれば、第1露光設定値320がより早く当該最適露光範囲R3に到達するようになり、最小値min側にあれば、第2露光設定値330がより早く当該最適露光範囲R3に到達するようになる。このように、複数の露光設定値を設けることで、最適露光範囲R3に早く到達する確率を向上させることができる。
図25(a)及び(b)は、第1初期値v1に最大値max、第2初期値v2に最小値minを設定し、第1露光設定値320及び第2露光設定値330の平均値で各露光設定値を更新した場合の遷移例を示す図である。
CPU10は、図22(a)と同様に、1フレーム目で露光して得られたフレーム画像310から第1露光設定値320の計算値AE1を計算して、3フレーム目で当該計算値AE1に基づいた露光を行う。また、2フレーム目で得られたフレーム画像310から第2露光設定値330の計算値AE2を計算して、4フレーム目で当該計算値AE2に基づいた露光を行う。
CPU10は、第1露光設定値320及び第2露光設定値330を更新後、その更新後の第1露光設定値320と第2露光設定値330の平均値AE10を算出する。その算出した平均値AV1を第1露光設定値320に設定して5フレーム目の露光を行う。また、平均値AV1に設定された第1露光設定値320と、第2露光設定値330との平均値AV2を算出する。この算出した平均値AV2を第2露光設定値330として設定した後に6フレーム目の露光を行う。
このように、第1露光設定値320と第2露光設定値330との平均値を随時算出して、その算出した平均値を各露光設定値に設定することで、例えば、図25(a)のように、最適露光範囲R3が中心値c付近である場合は、5フレーム目に第1露光設定値320が当該最適露光範囲R3に到達する。また、図25(b)のように、最適露光範囲R3が中心値cより下側である場合は、6フレーム目で第2露光設定値330が最適露光範囲R3に到達することができる。
尚、図23において前回の最適露光値350を初期値として設定することとしたが、1日、1週間、1ヶ月といった一定期間の間の最適露光値350をフラッシュメモリ300に蓄積しておき、その最適露光値の平均値を算出して、当該平均値を露光設定値の初期値に設定することとしてもよい。
図26(a)は、比較的安定した環境下でコード読み取り装置3が使用されて際の、1ヶ月間に蓄積した最適露光値350の履歴を示す図である。この場合は、この最適露光値350の履歴の平均値AV3を算出して、この平均値AV10を第1露光設定値320の第1初期値v1に設定することで、より高速に露光設定値が最適露光範囲R3内に安定するようにすることができる。
図26(b)は、コード読み取り装置3の使用環境が大きく変わった場合の、最適露光値350の履歴の一例である。CPU10は、この1ヶ月間の履歴内の最大の最適露光値(最大露光値Max)と、最小の最適露光値(最小露光値Min)との差が所定値(例えば、50)を超えた場合には、コード読み取り装置3の使用環境にばらつきがあると判断して、次のようにして2つの平均値を算出する。
先ず、最適露光値の履歴の中から最大露光値Maxと、最小露光値Minとを抽出する。そして、最大露光値Max及び最小露光値Minとの平均を算出し、その平均を閾値BLとして、最適露光値の履歴を二分する。そして、二分した一方の最適露光値の平均値AV11と、他方の最適露光値の平均値AV12とを算出して、これらの平均値を第1初期値v1及び第2初期値v2としてそれぞれ設定する。
図27は、平均値AV11を第1初期値v1として、平均値AV12を第2初期値v2として設定した場合の、第1露光設定値320及び第2露光設定値330の遷移例を示す図である。
例えば、最適露光範囲R3が図27(a)に示すように中心値cを境に最小値min側であって、第1露光設定値320は、当該最適露光範囲R3内に既に含まれているため、露光設定値の計算を行わなくてもよい。また、最適露光範囲R3が図27(b)に示すように中心値cを境に最大値max側である場合は、4フレーム目で計算した第2露光設定値330の計算値AE2が最適露光範囲R3内に到達する。
このため、コード読み取り装置3の使用環境にばらつきがあった場合にも、最適露光範囲R3に近いほうの平均値AV11又はAV12が当該最適露光範囲R3に早く到達する。このように、過去の最適露光値350の履歴における平均値を初期値に設定することで、コード読み取り装置3の使用環境にばらつきがあっても、より高速に最適露光範囲R3に到達するようにできる。
以上、第3実施形態によれば、露光設定値の初期値を異なる値で複数設定して、これらの初期値で始まる露光設定値を順次計算して更新する。これにより、コード読み取り装置3の使用環境が変わっても、露光設定値が最適露光範囲に到達するまでの時間を短くすることがでる。
〔第4実施形態〕
次に、本発明を適用したコード読み取り装置の第4実施形態について図28〜図33を用いて説明する。尚、第4実施形態におけるコード読み取り装置4について、図1に示した従来のコード読み取り装置1と同一の構成要素には、同一の符号を付してその説明を省略する。
図28は、第4実施形態におけるコード読み取り装置4の機能構成の一例を示すブロック図である。図28に示すように、コード読み取り装置4は、図1に示したコード読み取り装置1の専用ASIC50を図28の専用ASIC50eに、レンズユニット40をイメージセンサ70に置き換えた構成である。
専用ASIC50eは、タイミングコントローラ51e、データバッファ53及びDMA55を有して構成される。タイミングコントローラ51eは、図29(a)に示す転送制御回路510を含んで構成され、イメージセンサ70から出力されるピクセルクロック信号PCLK、水平同期信号Hsync及び垂直同期信号Vsyncに基づいて、バッファセレクタBSの第1ラインバッファLBa及び第2ラインバッファLBbへの1ライン毎、1フレームごとのデータ転送を制御する。
転送制御回路510は、転送許可信号TEを生成してバッファセレクタBSに出力することで、バッファセレクタBSの第1ラインバッファLBa及び第2ラインバッファLBbへのデータ転送を制御する回路であり、例えばDフリップフロップ(Delay flip-flop)により構成される。
また、タイミングコントローラ51eは、CPU10の制御に基づいて、フレームスタートリクエスト信号FSRを内部的に生成して転送制御回路510に出力する。より具体的には、CPU10が任意のタイミングでタイミングコントローラ51eにフレーム画像の転送開始の要求をタイミングコントローラ51eに対して行う。タイミングコントローラ51eは、CPU10の要求に応じて、一定期間の間、1(H)を保持するフレームスタートリクエスト信号FSRを生成して転送制御回路510に出力する。
図29(a)は、転送制御回路510の回路構成の一例、図29(b)は転送制御回路510の入出力する信号の関係を示す図、図30は転送制御回路510の動作例を説明するためのタイムチャートである。ここで、転送制御回路510の具体的な動作例を図29及び30を参照して説明する。
転送制御回路510は、タイミングコントローラ51eにより生成されたフレームスタートリクエスト信号FSRと垂直同期信号Vsyncとに基づいて、図29(a)に示すように転送許可信号TEを生成する。
即ち、時刻t11にフレームスタートリクエスト信号FSRが1(H)になることで、画像データの転送要求が出力され、その後、時刻t15に垂直同期信号VsyncがHからLに切り替わると、転送許可信号TEが1(H)に立ち上がる。
そして、フレームスタートリクエスト信号FSRが0(L)に切り替わった後(時刻t19)に、時刻t21に垂直同期信号VsyncがHからLに切り替わると、転送許可信号TEが0(L)に戻る。
転送制御回路510は、この転送許可信号TEをバッファセレクタBSに出力して、当該転送許可信号TEが1(H)のときに、第1ラインバッファLBa及び第2ラインバッファLBbへの画像データの転送を許可する。
次に、コード読み取り装置4の具体的な動作について図31を用いて説明する。先ず、CPU10は、図31のようなイメージャ転送制御信号TCをイメージセンサ70に出力することによって、垂直同期信号Vsyncの出力と、当該イメージセンサ70が生成した画像データの専用ASIC50eへの出力とを開始させる。このイメージャ転送制御信号TCがHの間、画像データの転送が開始されて各回路部が稼働し、Lの間はデータ転送が為されないためスタンバイ状態にとなる。
このとき、専用ASIC50eには、イメージセンサ70から出力される垂直同期信号VsyncがLになっている間に、画像データ(入力画像)が転送され、例えば、図31のように、イメージャ転送制御信号TCがHの間に3回発振する垂直同期信号Vsyncに同期して入力画像C1,C2及びC3が順次転送されてくる。
そして、タイミングコントローラ51eは、上述したようにして生成した転送許可信号TEをバッファセレクタBSに出力することで、イメージセンサ70から順次転送された入力画像のうちの1つの入力画像C2を取得してRAM30に転送させる。CPU10は、この転送された入力画像C2のフレーム画像31をデコードする。
以上、第4実施形態によれば、転送制御回路510をタイミングコントローラ51eに設けて、転送許可信号TEを生成することで、イメージセンサ70から順次転送されてくる入力画像のうち、フレームスタートリクエスト信号FSRによりデータ転送が要求された間の入力画像が取得されてRAM30に転送される。このため、入力画像がシステムバス90を占有する占有率を低めることができる。従って、コード読み取り装置4の回路が入力画像の処理のために常に活性状態となることがなくなり、当該装置の負荷を低減させることができ、更には省電力化も期待できる。
尚、第4実施形態では、垂直同期信号Vsyncに基づいて、転送許可信号TEを生成することとしたが、水平同期信号Hsyncに基づいて生成することとしてもよい。この場合、タイミングコントローラ51eの内部に図32に示すラインデータ転送制御回路512を設ける。
このラインデータ転送制御回路512は、転送許可信号TE、垂直同期信号Vsync及び水平同期信号Hsyncからラインデータ転送許可信号LTEを生成する回路部であり、例えば、AND回路により構成される。即ち、転送許可信号TEが1(H)、垂直同期信号Vsyncが0(L)、水平同期信号Hsyncが1(H)である場合に、1(H)を保持するラインデータ転送許可信号LTEを生成する。
ラインデータ転送制御回路512は、このラインデータ転送許可信号LTEをバッファセレクタBSに出力して、当該ラインデータ転送許可信号LTEが1(H)のときに、第1ラインバッファLBa及び第2ラインバッファLBbへの画像データの転送を許可する。
このため、図33のように、転送許可信号TEが1(H)、垂直同期信号VsyncがLとなっている間に、水平同期信号Hsyncが立ち上がる度に、ラインデータ転送許可信号LTEも立ち上がる。そして、このラインデータ転送許可信号LTEがHとなっている間に、1ライン毎の入力画像C202,C204,C206,・・・,が第1ラインバッファLBa及び第2ラインバッファLBbを介して転送されていく。
このため、時刻t31(図32及び32参照)より以前に入力された入力画像C1のライン単位の入力画像C110はRAM30に転送されない。従って、RAM30への入力画像のデータ転送を、更に精細に制御することができるようになる。
尚、第2〜第4実施形態において、露光設置値の再計算や、イメージセンサ70の露光設定の変更等をCPU10がソフト的に実現することとするが、第1実施形態のコード読み取り装置1のようにAE計算器57及びイメージセンサコントローラ59を設けてハード的に実現することとしてもよい。