光学的情報読取装置及び光学的情報読取方法
【課題】最大事後確率推定を用いて情報を取り出すと共に、その際の計算量を削減する。
【解決手段】入力装置(CCD103)で撮影された入力画像はデコード基板106上に設けられるメモリ107の入力画像バッファ171に記憶される。このメモリ107の入力画像バッファ171、抽出バーコード画像バッファ172、前処理後バーコード画像バッファ173、計M本のスキャンラインバッファ174高解像度化スキャンラインバッファ176、エッジ強調高解像度化スキャンラインバッファ177に記憶されるデータがCPU部105のバーコード領域抽出部151、前処理部152の画像補正部153、スキャンライン取得部154、高解像度化実行部155、後処理部156、バーコード読み取り部157に供給される。さらに、同定されたキャラクタがメモリ107のバーコード読み取り結果バッファ178に記憶され、出力装置109に取り出される。
【解決手段】入力装置(CCD103)で撮影された入力画像はデコード基板106上に設けられるメモリ107の入力画像バッファ171に記憶される。このメモリ107の入力画像バッファ171、抽出バーコード画像バッファ172、前処理後バーコード画像バッファ173、計M本のスキャンラインバッファ174高解像度化スキャンラインバッファ176、エッジ強調高解像度化スキャンラインバッファ177に記憶されるデータがCPU部105のバーコード領域抽出部151、前処理部152の画像補正部153、スキャンライン取得部154、高解像度化実行部155、後処理部156、バーコード読み取り部157に供給される。さらに、同定されたキャラクタがメモリ107のバーコード読み取り結果バッファ178に記憶され、出力装置109に取り出される。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、例えばバーコードリーダーに使用して好適な光学的情報読取装置及び光学的情報読取方法に関する。詳しくは、最大事後確率推定を用いて装置の解像度以上の情報の取り出しを可能にするものであって、さらに、その際の計算量を削減してCPU(Central Processing Unit)での処理を可能にすることができるものである。
【背景技術】
【0002】
流通、物流、郵便、医療・化学検査などの広範な分野で、物品や書類、材料、被検体、その他各種の物の認識手段として、光反射率の異なる部分で情報を表記したバーコード記号や二次元コード記号が広く使用されている。このようなバーコード記号や二次元コード記号等を読取対象とするバーコードスキャナや二次元コードスキャナ等には、従来から光学的情報読取装置が使用される。
【0003】
ところが、このようなバーコード記号や二次元コード記号等の情報を光学的情報読取装置で読み取る場合には、バーコード記号や二次元コード記号等自体の汚損や、バーコード記号や二次元コード記号等の記載される紙面の状態などによって、読み取った信号にノイズが混入することが避けられない。そこで、このようなノイズを除去するために種々の技術が開発されている。
【0004】
すなわち、例えばハイパスフィルタとローパスフィルタとを組み合わせて用いることにより、ノイズを除去する技術が開発されている(例えば、特許文献1参照。)。
あるいは、フィルタリングの際に、ラプラス演算子等を用いた伝達関数を実現することにより、紙面ノイズを除去しているものもある(例えば、特許文献2参照。)。
さらに、最大事後確率(MAP)推定を用いて低解像度の画像を高解像度化する研究も行われている(例えば、非特許文献1参照。)。
【0005】
【特許文献1】特許第2752870号公報
【特許文献2】特開2005−293327号公報
【非特許文献1】Hardie et al. ,“Joint MAP Registration and High-Resolution Image Estimation Using a Sequence of Undersampled Images”, IEEE Trans. on Image Proc., VOL.6, NO.12, pp.1621-1633 Dec.1997
【発明の開示】
【発明が解決しようとする課題】
【0006】
従来から光学的情報読取装置においては、特許文献1,2にも開示されているように、情報の正確な読み取りを行うための種々の技術が開発されている。しかしながら、これら特許文献1,2に開示された技術の目的は、汚損や表示面の状態によって生じるノイズの除去であって、例えば装置の解像度以上の情報の取り出しを行うものではない。
【0007】
ところで、撮像装置を用いてバーコードの読み取りを行う場合に、バーコードに収納できる情報量は、撮像装置の性能や撮像位置などによる影響を受ける。また、撮像位置が遠い場合にバーコードが読み取れないという問題が生じる。特に、撮像装置の画素数が少ない場合にこの問題は顕著となるが、画素数が多い場合でも、より多くの情報を一度に読み込むためには、より遠くからバーコードが正確に読み取れる必要がある。
【0008】
一方、従来の技術では、バーコードの細いエレメントが画像上で1ピクセル程度の幅がなければ読み取ることが不可能であると考えられていた。これに対して、非特許文献1に開示された技術のように、画像処理の技術を利用して撮影された画像の解像度を上げることは考えられるが、従来の技術でバーコードの画像処理を行うには膨大な計算量が必要となり、通常のCPUの処理では実施が困難であるか、非常に時間が掛かってしまう。
【0009】
この発明はこのような問題点に鑑みて成されたものであって、本発明の目的は、最大事後確率推定を用いて装置の解像度以上の情報の取り出しを可能とすることであって、さらに、その際の計算量を削減して、通常のCPUでも処理が行えるようにすることである。
【課題を解決するための手段】
【0010】
上記の課題を解決し、本発明の目的を達成するため、請求項1に記載された発明は、画像の明部及び/または暗部の長さにより情報を形成すると共に、情報の配列方向に対して直交する方向に任意の幅を有してなる2値画像を読み取る光学的情報読取装置であって、任意の幅の範囲を互いに位相を違えて複数回走査する画像走査手段と、複数回の走査で読み取った信号に対して最大事後確率推定を用いて情報を取り出す情報抽出手段と、を設けることを特徴とする光学的情報読取装置である。
【0011】
請求項2に記載の光学的情報読取装置においては、互いに位相を違えて複数回走査する画像走査手段は、筐体に対して所定の角度を傾けて配置された撮像装置からなることを特徴とするものである。
【0012】
請求項3に記載の光学的情報読取装置においては、互いに位相を違えて複数回走査する画像走査手段は、撮像装置で撮像された任意の走査線に対して光学的情報1画素分ずれて同じになる走査線を判別し、その間を等分した走査線を複数回走査した信号として取り出す手段を含むことを特徴とするものである。
【0013】
請求項4に記載の光学的情報読取装置においては、最大事後確率推定を用いて情報を取り出す情報抽出手段は、複数回の走査で読み取った信号に対して画像の明部及び暗部の変わり目における重み付けを用いて行列演算を行うと共に、重み付けの値を予め設定して計算量を削減する演算手段を含むことを特徴とするものである。
【0014】
また、請求項5に記載された発明は、画像の明部及び/または暗部の長さにより情報を形成すると共に、情報の配列方向に対して直交する方向に任意の幅を有してなる2値画像を読み取るための光学的情報読取方法であって、任意の幅の範囲を互いに位相を違えて複数回走査するステップと、複数回の走査で読み取った信号に対して最大事後確率推定を用いて情報を取り出すステップと、を備えることを特徴とする光学的情報読取方法である。
【0015】
請求項6に記載の光学的情報読取方法においては、複数回の走査で読み取った信号に対して、任意の走査線と光学的情報1画素分ずれて同じになる走査線とを判別するステップと、判別された走査線の間を等分した走査線を取り出すステップと、取り出された信号に対して最大事後確率推定を用いて情報を取り出すステップと、を備えることを特徴とするものである。
【0016】
請求項7に記載の光学的情報読取方法においては、最大事後確率推定は、複数回の走査で読み取った信号に対して画像の明及び暗部の変わり目における重み付けを用いて行列演算を行うと共に、重み付けの値を予め設定して計算量を削減することを特徴とするものである。
【発明の効果】
【0017】
本発明の光学的情報読取装置及び光学的情報読取方法によれば、最大事後確率推定を用いて装置の解像度以上の情報の取り出しを可能にすることができる。また、その際の計算量を削減してCPUでの処理を可能にすることができる。
【発明を実施するための最良の形態】
【0018】
本発明は、バーコード読み取りシステムにおけるセンサ(CCD:Charge Coupled Device)の配置と、センサによって得られる信号の処理に関するものである。バーコード読み取りシステムは、流通や製造など様々な場面で用いられている。また携帯電話のカメラを用いた情報取得など個人的利用も増えており、ここでは、こうしたバーコードを利用しうる全ての状況を想定している。
【0019】
想定されるシステム全体の構成例を図1のAに示す。システムは、バーコードを撮像する素子(CCD)及びその情報を処理してバーコード情報のデコード(読み取り)を行うCPUを含むスキャナ部100と、デコードされた情報が転送される端末200からなっている。但し、情報を処理するCPU部分が端末200に存在する場合や、図1のBのように端末200からは独立して、デコードされた情報をスキャナ部100に直接貯蔵したり、処理したりする場合もある。
【0020】
このようなバーコード読み取りシステムにおいて、本発明は、まずスキャナ部100に存在するCCDの配置に関するものである。すなわち、図2にはスキャナ部100の具体的な構成を示し、ここでは発光素子101からの光線がバーコード300に照射され、その反射光がレンズ102を介してCCD103で撮像される。そしてこの場合に、CCD103を筐体104に対して若干傾けて配置することで、読み取りの際に非常に有用な情報を取得することが可能となる。
【0021】
このようにCCD103を若干傾けて配置することができるのは、バーコード300において縦方向に同じ情報が並んでいるためである。すなわち、縦方向に同じ情報が並んでいるバーコード300に対して、CCD103が傾けて配置されることで、CCD103からはバーコード300の異なった位置の情報が得られる。なお、スキャナ部100は人間の手で保持されるので、バーコード300に対しては通常でも傾くことが多いと考えられるが、CCD103を筐体104に対して傾けて配置することで、確実に傾くことになるものである。
【0022】
そして、このCCD103によって得られた情報は、CPU部105を含むデコード基板106に供給される。すなわち、このCCD103によって得られた情報をCPU部105で処理する手法も本発明の主要な点となるものである。この処理は、バーコード300の情報を高解像度化するものであり、デコードをより高精度に行うことを可能とする。なお、バーコードには様々な種類が存在するが、本発明は、基本的には既存のどの種類のバーコードに対しても適用可能とされる。
【0023】
図3には、上述したデコード基板106の構成を模式的なブロック図で示す。図3において、入力装置としてのCCD103で撮影された入力画像はデコード基板106上に設けられるメモリ107の入力画像バッファ171に記憶される。
【0024】
この入力画像バッファ171に記憶された入力画像がCPU部105のバーコード領域抽出部151に供給される。バーコード領域抽出部151では、図4のAに示すように、例えば画像の二値化(ステップS1)、エッジの抽出(ステップS2)、画像をブロックに分割(ステップS3)、ブロック内のエッジ数カウント(ステップS4)、バーコードの存在領域候補決定(ステップS5)、ラベリングによるバーコード領域抽出(ステップS6)等の処理が行われる。そして抽出されたバーコード領域の画像が、メモリ107の抽出バーコード画像バッファ172に記憶される。
【0025】
抽出バーコード画像バッファ172に記憶された抽出バーコード画像は、CPU部105の前処理部152の画像補正部153に供給される。画像補正部153では、図4のBに示すように、例えば輝度正規化(ステップS7)、エッジ強調(ステップS8)等の処理が行われて、メモリ107の前処理後バーコード画像バッファ173に記憶される。
【0026】
前処理後バーコード画像バッファ173に記憶された前処理後バーコード画像は、CPU部105の前処理部152のスキャンライン取得部154に供給される。スキャンライン取得部154では、図4のCに示すように、例えば基本ラインのスキャン(ステップS9)、ブロックマッチング手法による1ピクセルずれたスキャンラインの探索(ステップS10)、M倍の高解像度化を行う場合には、基本スキャンラインと1ピクセルずれたスキャンライン間をM等分するスキャンラインを取得(ステップS11)等の処理が行われる。そして取得された計M本のスキャンラインが、メモリ107の計M本のスキャンラインバッファ174に記憶される。
【0027】
また、例えば外部記憶装置108にあらかじめ設定されているずれ/ボケを表現する行列の逆行列が、メモリ107のずれ/ボケを表現する行列の逆行列バッファ175に読み込まれる。そして、計M本のスキャンラインバッファ174に記憶された信号がCPU部105の高解像度化実行部155に供給され、図4のDに示すように、例えば高速化のためのスキャンライン分割(ステップS12)、重み計算(ステップS13)、ずれ/ボケを表現する行列の逆行列バッファ175からずれ/ボケを表現する行列の逆行列が入力されて、ずれ/ボケを表現する行列の逆行列から繰り返し演算がスタート(ステップS14)等の処理が行われる。
【0028】
さらに高解像度化実行部155では、逆行列の補助定理を用いた繰り返しによる逆行列演算(ステップS15)が行われて、重み計算に変化があるか否か判断(ステップS16)される。このステップS16で変化があるとき(Yes)はステップS14に戻される。また、ステップS16で変化がないとき(No)は、高解像度化スキャンライン結果取得(ステップS17)等の処理が行われる。そして取得された高解像度化スキャンラインが、メモリ107の高解像度化スキャンラインバッファ176に記憶される。
【0029】
高解像度化スキャンラインバッファ176に記憶された高解像度化スキャンラインは、CPU部105の後処理部156に供給される。後処理部156では、図4のEに示すように、例えばエッジ強調(ステップS18)等の処理が行われる。そしてエッジ強調されたエッジ強調高解像度化スキャンラインが、メモリ107のエッジ強調高解像度化スキャンラインバッファ177に記憶される。
【0030】
エッジ強調高解像度化スキャンラインバッファ177に記憶されたエッジ強調高解像度化スキャンラインは、CPU部105のバーコード読み取り部157に供給される。バーコード読み取り部157では、図4のFに示すように、例えば分割されたスキャンラインを結合(ステップS19)、スキャンライン二値化(ステップS20)、太エレメントと細エレメントの同定(ステップS21)、エレメントの補正(ステップS22)、キャラクタの同定(ステップS23)等の処理が行われる。そして同定されたキャラクタが、メモリ107のバーコード読み取り結果バッファ178に記憶される。さらに、バーコード読み取り結果バッファ178に記憶された情報が出力装置109に取り出される。
【0031】
これによって、上述の装置によれば、例えば図5に示すように、手順1としてバーコード画像の撮影を行い、手順2ではバーコード領域の抽出として画像中のバーコードを抜き出し、手順3の前処理で画像の補正、エッジ強調処理、正規化を行うことでレンズやCCDの特性を補正する。なお、前処理に必要なパラメータは使用するカメラ(CCD)によって変更する。さらに、手順4として高解像度化を行い、手順5の後処理としてエッジ強調処理行い、手順6のデコードで全処理を終えた結果をデコードする。
【0032】
上述の手順1でバーコードをカメラで撮影する際にはバーコードを傾けて撮影する。ユーザが意識する必要なく傾けて撮像するために、CCD自体を水平に対して傾けて配置しておく。もしくは、ユーザが撮像した際に自動的に必要な傾きになるようにセンサ部を可動式にしておく。これによって、読み取りの際に非常に有用な情報を取得することが可能となる。
【0033】
さらに手順4の高解像度化では、最大事後確率(MAP:Maximum a posteriori)推定を用いて高解像度化を行う。またこの際に、バーコードをブロック化すると共に、以下に提案する逆行列演算を用いることで、高速に演算を行うことを可能とする。また適切な重みの計算を行う。以下は、この手順4の高解像度化について説明する。
【0034】
図6のAには、従来のMAP推定を用いた画像高解像度化の手法を示し、図6のBには本発明による従来のMAP推定を用いた画像高解像度化の手法を示す。
【0035】
ここで図6のAの従来の手法では、適当にずれのある画像を入力とする(ステップS31)。次に、補間により高解像度画像の初期値を決定(ステップS32)し、さらに画像のずれを推定する(ステップS33)。そして、重みを画像全体で一定として高解像度画像を推定する(ステップS34)。さらに収束したかを判断し(ステップS35)、収束していないとき(No)はステップS33に戻される。また収束していたとき(Yes)は終了される(ステップS36)。
【0036】
これに対して、図6のBの本発明による手法では、基準のラインからずれが(1/倍率)の倍数となるラインを入力とする(ステップS41)。次に、重みを画像全体で一定として高解像度画像を推定(ステップS42)し、画素ごとに最適な重みを決定する(ステップS43)。そして、ステップS43で求めた重みを用いて高解像度画像化する(ステップS44)。さらに収束したかを判断し(ステップS45)、収束していないとき(No)はステップS43に戻される。また収束していたとき(Yes)は終了される(ステップS46)。
【0037】
以上の手法の違いにおいて、従来のMAP推定を用いた画像高解像度化では、画像のずれと高解像度画像を交互に何度も繰り返し計算するために時間が非常にかかるものであった。しかし、本発明の手法では、バーコードは縦に同じデータが並んでいるという特性を利用し、傾けて撮影することにより最初に全ての画像(ライン)のずれを推定することが可能であり、必要最低限の画像を使用して高解像度化が可能である。
【0038】
すなわち、一般的な画像と違い、バーコード画像は輝度の差が大きい点が多く見られるため重みを画素ごとに変更することが望ましい。そこで、重みを画像によって変更し高解像度画像と重みを交互に繰り返し計算する。重みを変更することで、従来のMAP推定を用いた高解像度化と同様に繰り返し処理が必要となるが、演算方法を工夫し処理の高速化を行うことで少ない計算量で計算することが可能である。
【0039】
また、初期値を決める際にずれが予め判っており、重みを全体で一定とすると、処理に時間のかかる行列演算を予め行っておくことが可能となる。これによって、短い処理時間で、従来の手法による補間の場合より良い画像が計算される。
【0040】
さらに以下には、MAP推定を用いた高解像度化について具体的に説明する。ここでは、バーコード画像の高解像度化にはMAP推定を用いた方法として非特許文献1に開示された手法を使用する。
【0041】
MAP推定を用いた高解像度化とは、低解像度画像yが与えられたときの事後確率Pr(z,s|y)を最大とする高解像度画像zとレジストレーションパラメータsを推定する方法である。Pr(z,s|y)は、対数を取りベイズの定理を用いることで事前確率の対数logPr(z)と条件付確率の対数logPr(y|z,s)の和によって表される。従ってMAP推定の問題は、次のように書くことができる。(なお、以下の説明で、数式ではベクトルを太字で表すが、説明文では太字を使用できないため、通常の文字で表記している)
【0042】
【数1】
【0043】
上式は二つの重みσ、λによって制御される。二つの重みの比をw=σ2/λとするとwが大きければ隣り合う画素の輝度が近い値になる。しかし、バーコードは黒から白へと輝度が急激に変わる部分があるため、そこではwの値を小さくする必要がある。提案手法では、白が続く場合(輝度200以上が3ピクセル以上続いている場合)と、黒が続いている場合(輝度50以下が3ピクセル以上続いている場合)はw=w1、それ以外の場合はw=w2というように輝度によってwの値を変化させた。重みを変更したときの結果を図7に示す。
【0044】
次に、スキャンラインの取得について説明する。1次元バーコードは横1行にデータが配置されており、同じデータが縦に並んでいる。よって、水平に1ラインとしてスキャン出来れば良い。図8に示したものは1次元バーコードの例Aとそれがスキャンされる様子Bである。図6Bに示した3本のスキャンラインから得られるデータはすべて同一となるため、一次元バーコードを高解像度化された結果として必要となるのは横一列の一次元のデータであり、二次元画像を高解像度化する必要はない。
【0045】
そこで本発明の手法では、低解像度なバーコード画像より、複数のスキャンラインのデータを用いて一つの高解像度化された一次元データを推定する。なお、2次元のコードであっても、エレメントの水平方向のデータの並びが同じとなる範囲を複数スキャンできるようにすれば、本発明は実施可能となるものである。
【0046】
以下の説明では、画像を4倍に高解像度化するものであり、その場合に、正しく高解像度化するためには画像を高解像度化した状態で1ピクセル(低解像度で4分の1ピクセル)ずつずれたラインが4本必要である。スキャンラインの取得方法を以下に示す。
手順1:画像の撮影
図9に示すようにわざと位置ずれが発生するように撮影する。これは、カメラセンサ部を若干水平より傾けておくことで自然に実現可能である。
【0047】
手順2:1ピクセルずれたラインの取得
図9のライン(a)のような基本となるラインを1つ決定し、1ピクセルずらしたものと他のラインと差をとり、一番差が小さいライン(図9のライン(b))を探し出す。
手順3:ラインの取得
従って、ライン(a)と(b)を4等分するライン(c)が4分の1ずつずれた必要となるスキャンラインである。これらのライン(a)と(c)の計4本のスキャンラインを用いて高解像度化を行う。
【0048】
すなわち、スキャンラインを取得する際に横一列のデータを単純に取得するのではなく上下一列を含めた3列の平均を取ったものを一本のスキャンラインとすることでより高い認識率を実現した。スキャンラインを1列から得たものと3列の平均を用いたものの結果の例を図10、11に示す。1列では輝度の差がほとんど見られなかった部分が、3列用いることで輝度の差がはっきり出る部分があることがわかる。
【0049】
さらに、高速化について説明する。ここではまず高速化のためのブロック化について検討する。高解像度化における問題は計算量である。問題は次の二つに集約される。
(1)大きなサイズの行列演算であること
(2)逆行列の演算が伴うこと
【0050】
ここでは、まず(1)の問題について考える。演算する行列のサイズを小さくするには、単純に信号をブロックに分割することで、大きなサイズの行列演算を小さなサイズの複数の行列演算に置き換えればよい。但し、単に信号をブロックに分割すると分割した境界での誤差が大きくなり問題となる。そこでここでは、隣り合うブロックが重複するように分割することでこの問題を回避する。ブロックのサイズは、実験的に高解像度化後の60ピクセル分とした。また、ブロック間の重複は、20ピクセルとした。
【0051】
次に、(2)の逆行列の演算の高速化について考える。高解像度画像zは式(3)で表される。
【数2】
ここで逆行列の演算が必要となり、最低でも60×60の逆行列の演算が必要となる。
【0052】
この式(3)でCは滑らかさを表すものであり、式(4)で表される。
【数3】
【0053】
そこで、WsTWs=Aとおき、d=[d1,d2・・・dN]とすると、式(3)のカッコ内の逆行列は式(5)で表される。
【数4】
【0054】
さらに、式(5)の逆行列は式(6)で表される。
【数5】
逆行列は式(6)の演算をN回(60回)行う必要がある。
【0055】
ここで、Wiは0.002と1.0の2種類である。そこで、Aの対角行列に0.002を足すとWiは0と0.998の2種類に変更できる。一方、Wiの比率はおよそ(0.002):(1.0)=3:1であるので、0.002を足すことで演算量を約4分の1に減らすことができる。さらに、最終的に必要となるデータは以上の方法で求めた逆行列にWsTyをかけた高解像度化画像▲z▼(zの上に^)である。
【0056】
そこで、WsTWs=bとおき、式(6)の両辺に右からbをかけると式(7)のようになる。
【数6】
【0057】
ここで、AN-1-1CNが計算できていれば式(7)で▲z▼(zの上に^)を計算することが可能である。式(6)では60×60の行列を求める計算だったが、式(7)を用いるとベクトルの計算となり計算量の減少が期待できる。AN-1-1CNは式(6)を用いて式(8)のように表される。
【数7】
【0058】
さらに、AN-2-1CNも同様に式(9)で表される。
【数8】
【0059】
この計算をA0-1CNが計算されるまで繰り返すことでAN-1CNbは計算される。この場合の60×60の大きさの行列の計算量の比較を表1に示す。なお、画像全体の計算量はバーコードの幅が600ピクセルのとき計算量である。
【0060】
【表1】
【0061】
この表1において、従来の方法であるLU分解を用いた方法と比べ、本発明の手法を用いることで計算量は約5分の1となった。逆行列を計算するためには従来では40,824,000回計算が必要であったが、本発明の方法を用いることで2,952,000回に減らすことが可能となる。
【0062】
さらに、9種類のバーコードを200mmから25mmずつ300mmまで離して撮影した画像を用いて、重みw2を変化させながら高解像度化を行った。実験結果を表2に示す。
【表2】
【0063】
この表2において、w2の値を変更した結果を見ると、距離によって最適なw2の値は違うことがわかった。つまり、距離によってw2の値を変更することでより高い認識率が実現できる。今回の場合撮影距離が250mmまでのときはw2を0.05、それよりも離したときは0.02を用いることで高い認識率を実現できる。撮影距離によってw2を変更し、後処理としてアンシャープ処理を行うことで250mmまでは9枚すべて275mmは8枚、300mmについても7枚認識することが出来た。
【0064】
さらに、300mmから10mmずつ離して撮影し、読み取れる距離の限界を調べた。カメラとバーコードの距離は従来法では215mmが限界であるが、提案法では330mmとなった。これらを文字数に換算すると、従来法の読み取り限界は42文字、提案手法では63文字となり、より多くの情報を保持できることが分かる。なお、MAP推定を用いて高解像度化した結果を図12に示す。図12(c)を見ると、線形補間により計算したもの(b)に比べ、良い結果が得られていることが分かる。
【0065】
以下さらに、2倍の高解像度化を行う際の実施形態について、図13を用いて具体的に説明する。この図13における問題点は、低解像度入力から高解像度の1ライン(ここでは1番上の基準ラインxとする)を推定することである。
【0066】
そこで、手順1の前処理では、
(1)入力画像全体を0から255の範囲に正規化する(ここでは便宜上0から1の範囲とする)
(2)画像中のエッジを強調する(ここでは説明の便宜上強調は行わない)
(3)入力における赤の基準スキャンラインを1ピクセルずらしたものと、それ以降のスキャンラインを比較することで、一ピクセルずれたスキャンラインを検索する。
【0067】
ここでは、
y0を1ピクセルずらしたもの⇒[0 0 0.5 0.9](左端は折り返すことで生成する)
y1⇒[0.1 0 1.1 0.9]
y2⇒[0 0 0.4 1]
とする。
【0068】
これらの2乗誤差を計算すると、y2がy0の1ピクセルに相当するものであることが分かる。よって、y0とこれが1/2ピクセル(高解像度画像上で1ピクセル)ずれたy1を用いて高解像度化の計算を行う。
【0069】
次に、手順2の高解像度化処理では、
(1)スキャンラインの分割(実際にはスキャンラインが300やそれ以上の長さを持っているため、これを手ごろな長さで分割するが、ここでの例は十分短いため分割しない)。
(2)重みの計算をするために入力y0を補間する⇒[0 0.25 0.5 0.75 1 1 1 1]
各ピクセルに対する滑らかさの重みを補間した情報により決定する。
⇒w=[w0 w1 w2 w3 w4 w5 w6 w7]=[0 0 0 0 1 11 1]
【0070】
この重みは、エレメントの切り替わりが起っている位置では滑らかさの拘束を課さないために必要となる。また、繰り返しによって、高解像度画像が得られるたびに更新する。
(ここでは便宜上、隣との差が大きい場合は0小さい場合は1とするが、実際には輝度200以上が3ピクセル以上続いている場合か、輝度50以下が3ピクセル以上続いている場合に1、それ以外の場合に0.002とする)
【0071】
(3)求めたい高解像度情報をx=[x0 x1 x2 x3 x4 x5 x6 x7]Tとおくと、
【数9】
が等しくなるようにxを求めればよい。
【0072】
ただし、y0とy1にはノイズがのっているため、単純に連立方程式を解いてしまうと正しい結果が得られない可能性がある。そこで、自乗誤差の和が最小になるようにxを決定する。
【0073】
これらは、行列で書くと
【数10】
であり、これらの和であるから
⇒xT(W0TW0+W1TW1)x−2(W0TW0+W1TW1)x+(y0Ty0+y1Ty1)
となる。
【0074】
さらに滑らかさの拘束条件(隣り合うピクセル同士が近い値をとる)を考えると、
【数11】
も小さくなる必要があり、これを足すと問題は、xT(W0TW0+W1TW1)x−2(W0TW0+W1TW1)x+(y0Ty0+y1Ty1)を最小にするxを求めることである。
【0075】
そこで、上式を微分して0とおくと
【数12】
を解けばよい。
【0076】
この逆行列をそのまま解くと計算量が問題となるため、逆行列の補助定理と
【数13】
なる関係を用いる。
【0077】
またA0-1は何倍に高解像度化するかにのみ依存するため、事前に計算しておくことが可能である。これらより解はベクトル計算のみによって再帰的に計算可能であり、また重みwiがゼロの位置では計算する必要がなく、非常に効率的である。
【0078】
実際に解く手順は次の通り。
a) 準備として、A0-1をメモリにロードする。またbを計算する。
b)-1-1 A0-1C1を計算。A0-1C1=[2 -6 6 -6 6 -6 6 -6]
b)-1-2 A1-1bを計算。A1-1b=[0.1 -0.1 0.1 0.9 1.3 0.5 1.3 1.1]
b)-2-1 A0-1C2を計算。A0-1C2=[-2 10 -14 14 -14 14 -14 14]
b)-2-2 A1-1C2を計算。A1-1C2=[-2 10 -14 14 -14 14 -14 14]
b)-2-3 A2-1bを計算。A2-1b=[0.1 -0.1 0.1 0.9 1.3 0.5 1.3 1.1]
b)-3-1 A1-1C3を計算。
【0079】
同様に繰り返し
b)-3-3 A2-1C2まで計算。
b)-3-4 A3-1bを計算。A3-1b=[0.1 -0.1 0.1 0.9 1.3 0.5 1.3 1.1]
同様に繰り返し(実際にはwiがゼロとなるところは計算する必要がない)
b)-8-9 A8-1bを計算。
A8-1b=[0.079 0.003 -0.085 1.167 0.950 0.956 1.038 1.103]
【0080】
よって、設定した重みに対する最終的な解は、
x=[0.079 0.003 -0.085 1.167 0.950 0.956 1.038 1.103]
となる。b)におけるステップ数はxの長さによって決まる。
【0081】
(4)上述の(3)で得られた結果に対して重みを計算する。重みに変化がなければ終了して次の手順へ移る。変化した場合は、新たな重みで再び(3)の計算を行う。例では、x=[0.079 0.003 -0.085 1.167 0.950 0.956 1.038 1.103]Tであるから、w=[1 1 0 1 1 11 1]となり、前回の重みと異なるため、もう一度(3)に戻る。
【0082】
2度目の繰り返し後は解が
A8-1b=[0.050 0.016 0.002 1.034 1.003 0.974 1.044 1.107]T
となり、重みも前回と変化がないため、これが最終的な解となる。
【0083】
さらに、手順3の後処理では、エッジを強調し、手順4のバーコードのデコードでは、バーコードを読み取ることが行われるが、これらは従来の技術と同様であるので、説明は省略する。
【0084】
こうして、本発明によれば、MAP推定を用いたバーコード画像の高解像度化により遠距離からのバーコードの読み取りを実現し、収納できる情報量の増加が可能であることを示した。
【0085】
また、従来の技術では、細エレメント幅が約1.0ピクセルであるときが限界であったが、本発明の技術を用いることで約0.66ピクセルまで正しく読むことができる。これを640×480の解像度のカメラを使用したとすると、文字数にして従来法では42文字が限界だったが、63文字まで読み取ることが可能である。また、29文字収納されたバーコードを読み取るには従来法だと最低でも横幅が420ピクセルの解像度が必要であったが、提案法を用いると横幅が285ピクセルで読み取ることが出来る。
【0086】
これによりバーコード読み取り機のセンサ部の小型化もしくは、コスト低減を図ることができる。また、ユーザは、バーコードを読み取る際のセンサとバーコードとの位置に関する自由度が高くなり、より使い勝手の良いバーコード読み取り装置を実現できる。
【0087】
なお本発明は、上述の説明した実施形態に限定されるものではなく、特許請求の範囲の記載を逸脱しない範囲において、種々の変形が可能とされるものである。
【図面の簡単な説明】
【0088】
【図1】本発明の適用されるシステム全体の構成を示す模式図である。
【図2】そのスキャナ部100の具体的な構成を示す図である。
【図3】そのデコード基板106の構成を示す模式的なブロック図である。
【図4】その説明のためのフローチャート図である。
【図5】その説明のためのフローチャート図である。
【図6】その説明のためのフローチャート図である。
【図7】その説明のための図である。
【図8】その説明のための図である。
【図9】その説明のための図である。
【図10】その説明のための図である。
【図11】その説明のための図である。
【図12】その説明のための図である。
【図13】その説明のための図である。
【符号の説明】
【0089】
100…スキャナ部、200…端末、300…バーコード、101…発光素子、102…レンズ、103…CCD、104…筐体、105…CPU部、106…デコード基板、107…メモリ、108…外部記憶装置、109…出力装置
【技術分野】
【0001】
本発明は、例えばバーコードリーダーに使用して好適な光学的情報読取装置及び光学的情報読取方法に関する。詳しくは、最大事後確率推定を用いて装置の解像度以上の情報の取り出しを可能にするものであって、さらに、その際の計算量を削減してCPU(Central Processing Unit)での処理を可能にすることができるものである。
【背景技術】
【0002】
流通、物流、郵便、医療・化学検査などの広範な分野で、物品や書類、材料、被検体、その他各種の物の認識手段として、光反射率の異なる部分で情報を表記したバーコード記号や二次元コード記号が広く使用されている。このようなバーコード記号や二次元コード記号等を読取対象とするバーコードスキャナや二次元コードスキャナ等には、従来から光学的情報読取装置が使用される。
【0003】
ところが、このようなバーコード記号や二次元コード記号等の情報を光学的情報読取装置で読み取る場合には、バーコード記号や二次元コード記号等自体の汚損や、バーコード記号や二次元コード記号等の記載される紙面の状態などによって、読み取った信号にノイズが混入することが避けられない。そこで、このようなノイズを除去するために種々の技術が開発されている。
【0004】
すなわち、例えばハイパスフィルタとローパスフィルタとを組み合わせて用いることにより、ノイズを除去する技術が開発されている(例えば、特許文献1参照。)。
あるいは、フィルタリングの際に、ラプラス演算子等を用いた伝達関数を実現することにより、紙面ノイズを除去しているものもある(例えば、特許文献2参照。)。
さらに、最大事後確率(MAP)推定を用いて低解像度の画像を高解像度化する研究も行われている(例えば、非特許文献1参照。)。
【0005】
【特許文献1】特許第2752870号公報
【特許文献2】特開2005−293327号公報
【非特許文献1】Hardie et al. ,“Joint MAP Registration and High-Resolution Image Estimation Using a Sequence of Undersampled Images”, IEEE Trans. on Image Proc., VOL.6, NO.12, pp.1621-1633 Dec.1997
【発明の開示】
【発明が解決しようとする課題】
【0006】
従来から光学的情報読取装置においては、特許文献1,2にも開示されているように、情報の正確な読み取りを行うための種々の技術が開発されている。しかしながら、これら特許文献1,2に開示された技術の目的は、汚損や表示面の状態によって生じるノイズの除去であって、例えば装置の解像度以上の情報の取り出しを行うものではない。
【0007】
ところで、撮像装置を用いてバーコードの読み取りを行う場合に、バーコードに収納できる情報量は、撮像装置の性能や撮像位置などによる影響を受ける。また、撮像位置が遠い場合にバーコードが読み取れないという問題が生じる。特に、撮像装置の画素数が少ない場合にこの問題は顕著となるが、画素数が多い場合でも、より多くの情報を一度に読み込むためには、より遠くからバーコードが正確に読み取れる必要がある。
【0008】
一方、従来の技術では、バーコードの細いエレメントが画像上で1ピクセル程度の幅がなければ読み取ることが不可能であると考えられていた。これに対して、非特許文献1に開示された技術のように、画像処理の技術を利用して撮影された画像の解像度を上げることは考えられるが、従来の技術でバーコードの画像処理を行うには膨大な計算量が必要となり、通常のCPUの処理では実施が困難であるか、非常に時間が掛かってしまう。
【0009】
この発明はこのような問題点に鑑みて成されたものであって、本発明の目的は、最大事後確率推定を用いて装置の解像度以上の情報の取り出しを可能とすることであって、さらに、その際の計算量を削減して、通常のCPUでも処理が行えるようにすることである。
【課題を解決するための手段】
【0010】
上記の課題を解決し、本発明の目的を達成するため、請求項1に記載された発明は、画像の明部及び/または暗部の長さにより情報を形成すると共に、情報の配列方向に対して直交する方向に任意の幅を有してなる2値画像を読み取る光学的情報読取装置であって、任意の幅の範囲を互いに位相を違えて複数回走査する画像走査手段と、複数回の走査で読み取った信号に対して最大事後確率推定を用いて情報を取り出す情報抽出手段と、を設けることを特徴とする光学的情報読取装置である。
【0011】
請求項2に記載の光学的情報読取装置においては、互いに位相を違えて複数回走査する画像走査手段は、筐体に対して所定の角度を傾けて配置された撮像装置からなることを特徴とするものである。
【0012】
請求項3に記載の光学的情報読取装置においては、互いに位相を違えて複数回走査する画像走査手段は、撮像装置で撮像された任意の走査線に対して光学的情報1画素分ずれて同じになる走査線を判別し、その間を等分した走査線を複数回走査した信号として取り出す手段を含むことを特徴とするものである。
【0013】
請求項4に記載の光学的情報読取装置においては、最大事後確率推定を用いて情報を取り出す情報抽出手段は、複数回の走査で読み取った信号に対して画像の明部及び暗部の変わり目における重み付けを用いて行列演算を行うと共に、重み付けの値を予め設定して計算量を削減する演算手段を含むことを特徴とするものである。
【0014】
また、請求項5に記載された発明は、画像の明部及び/または暗部の長さにより情報を形成すると共に、情報の配列方向に対して直交する方向に任意の幅を有してなる2値画像を読み取るための光学的情報読取方法であって、任意の幅の範囲を互いに位相を違えて複数回走査するステップと、複数回の走査で読み取った信号に対して最大事後確率推定を用いて情報を取り出すステップと、を備えることを特徴とする光学的情報読取方法である。
【0015】
請求項6に記載の光学的情報読取方法においては、複数回の走査で読み取った信号に対して、任意の走査線と光学的情報1画素分ずれて同じになる走査線とを判別するステップと、判別された走査線の間を等分した走査線を取り出すステップと、取り出された信号に対して最大事後確率推定を用いて情報を取り出すステップと、を備えることを特徴とするものである。
【0016】
請求項7に記載の光学的情報読取方法においては、最大事後確率推定は、複数回の走査で読み取った信号に対して画像の明及び暗部の変わり目における重み付けを用いて行列演算を行うと共に、重み付けの値を予め設定して計算量を削減することを特徴とするものである。
【発明の効果】
【0017】
本発明の光学的情報読取装置及び光学的情報読取方法によれば、最大事後確率推定を用いて装置の解像度以上の情報の取り出しを可能にすることができる。また、その際の計算量を削減してCPUでの処理を可能にすることができる。
【発明を実施するための最良の形態】
【0018】
本発明は、バーコード読み取りシステムにおけるセンサ(CCD:Charge Coupled Device)の配置と、センサによって得られる信号の処理に関するものである。バーコード読み取りシステムは、流通や製造など様々な場面で用いられている。また携帯電話のカメラを用いた情報取得など個人的利用も増えており、ここでは、こうしたバーコードを利用しうる全ての状況を想定している。
【0019】
想定されるシステム全体の構成例を図1のAに示す。システムは、バーコードを撮像する素子(CCD)及びその情報を処理してバーコード情報のデコード(読み取り)を行うCPUを含むスキャナ部100と、デコードされた情報が転送される端末200からなっている。但し、情報を処理するCPU部分が端末200に存在する場合や、図1のBのように端末200からは独立して、デコードされた情報をスキャナ部100に直接貯蔵したり、処理したりする場合もある。
【0020】
このようなバーコード読み取りシステムにおいて、本発明は、まずスキャナ部100に存在するCCDの配置に関するものである。すなわち、図2にはスキャナ部100の具体的な構成を示し、ここでは発光素子101からの光線がバーコード300に照射され、その反射光がレンズ102を介してCCD103で撮像される。そしてこの場合に、CCD103を筐体104に対して若干傾けて配置することで、読み取りの際に非常に有用な情報を取得することが可能となる。
【0021】
このようにCCD103を若干傾けて配置することができるのは、バーコード300において縦方向に同じ情報が並んでいるためである。すなわち、縦方向に同じ情報が並んでいるバーコード300に対して、CCD103が傾けて配置されることで、CCD103からはバーコード300の異なった位置の情報が得られる。なお、スキャナ部100は人間の手で保持されるので、バーコード300に対しては通常でも傾くことが多いと考えられるが、CCD103を筐体104に対して傾けて配置することで、確実に傾くことになるものである。
【0022】
そして、このCCD103によって得られた情報は、CPU部105を含むデコード基板106に供給される。すなわち、このCCD103によって得られた情報をCPU部105で処理する手法も本発明の主要な点となるものである。この処理は、バーコード300の情報を高解像度化するものであり、デコードをより高精度に行うことを可能とする。なお、バーコードには様々な種類が存在するが、本発明は、基本的には既存のどの種類のバーコードに対しても適用可能とされる。
【0023】
図3には、上述したデコード基板106の構成を模式的なブロック図で示す。図3において、入力装置としてのCCD103で撮影された入力画像はデコード基板106上に設けられるメモリ107の入力画像バッファ171に記憶される。
【0024】
この入力画像バッファ171に記憶された入力画像がCPU部105のバーコード領域抽出部151に供給される。バーコード領域抽出部151では、図4のAに示すように、例えば画像の二値化(ステップS1)、エッジの抽出(ステップS2)、画像をブロックに分割(ステップS3)、ブロック内のエッジ数カウント(ステップS4)、バーコードの存在領域候補決定(ステップS5)、ラベリングによるバーコード領域抽出(ステップS6)等の処理が行われる。そして抽出されたバーコード領域の画像が、メモリ107の抽出バーコード画像バッファ172に記憶される。
【0025】
抽出バーコード画像バッファ172に記憶された抽出バーコード画像は、CPU部105の前処理部152の画像補正部153に供給される。画像補正部153では、図4のBに示すように、例えば輝度正規化(ステップS7)、エッジ強調(ステップS8)等の処理が行われて、メモリ107の前処理後バーコード画像バッファ173に記憶される。
【0026】
前処理後バーコード画像バッファ173に記憶された前処理後バーコード画像は、CPU部105の前処理部152のスキャンライン取得部154に供給される。スキャンライン取得部154では、図4のCに示すように、例えば基本ラインのスキャン(ステップS9)、ブロックマッチング手法による1ピクセルずれたスキャンラインの探索(ステップS10)、M倍の高解像度化を行う場合には、基本スキャンラインと1ピクセルずれたスキャンライン間をM等分するスキャンラインを取得(ステップS11)等の処理が行われる。そして取得された計M本のスキャンラインが、メモリ107の計M本のスキャンラインバッファ174に記憶される。
【0027】
また、例えば外部記憶装置108にあらかじめ設定されているずれ/ボケを表現する行列の逆行列が、メモリ107のずれ/ボケを表現する行列の逆行列バッファ175に読み込まれる。そして、計M本のスキャンラインバッファ174に記憶された信号がCPU部105の高解像度化実行部155に供給され、図4のDに示すように、例えば高速化のためのスキャンライン分割(ステップS12)、重み計算(ステップS13)、ずれ/ボケを表現する行列の逆行列バッファ175からずれ/ボケを表現する行列の逆行列が入力されて、ずれ/ボケを表現する行列の逆行列から繰り返し演算がスタート(ステップS14)等の処理が行われる。
【0028】
さらに高解像度化実行部155では、逆行列の補助定理を用いた繰り返しによる逆行列演算(ステップS15)が行われて、重み計算に変化があるか否か判断(ステップS16)される。このステップS16で変化があるとき(Yes)はステップS14に戻される。また、ステップS16で変化がないとき(No)は、高解像度化スキャンライン結果取得(ステップS17)等の処理が行われる。そして取得された高解像度化スキャンラインが、メモリ107の高解像度化スキャンラインバッファ176に記憶される。
【0029】
高解像度化スキャンラインバッファ176に記憶された高解像度化スキャンラインは、CPU部105の後処理部156に供給される。後処理部156では、図4のEに示すように、例えばエッジ強調(ステップS18)等の処理が行われる。そしてエッジ強調されたエッジ強調高解像度化スキャンラインが、メモリ107のエッジ強調高解像度化スキャンラインバッファ177に記憶される。
【0030】
エッジ強調高解像度化スキャンラインバッファ177に記憶されたエッジ強調高解像度化スキャンラインは、CPU部105のバーコード読み取り部157に供給される。バーコード読み取り部157では、図4のFに示すように、例えば分割されたスキャンラインを結合(ステップS19)、スキャンライン二値化(ステップS20)、太エレメントと細エレメントの同定(ステップS21)、エレメントの補正(ステップS22)、キャラクタの同定(ステップS23)等の処理が行われる。そして同定されたキャラクタが、メモリ107のバーコード読み取り結果バッファ178に記憶される。さらに、バーコード読み取り結果バッファ178に記憶された情報が出力装置109に取り出される。
【0031】
これによって、上述の装置によれば、例えば図5に示すように、手順1としてバーコード画像の撮影を行い、手順2ではバーコード領域の抽出として画像中のバーコードを抜き出し、手順3の前処理で画像の補正、エッジ強調処理、正規化を行うことでレンズやCCDの特性を補正する。なお、前処理に必要なパラメータは使用するカメラ(CCD)によって変更する。さらに、手順4として高解像度化を行い、手順5の後処理としてエッジ強調処理行い、手順6のデコードで全処理を終えた結果をデコードする。
【0032】
上述の手順1でバーコードをカメラで撮影する際にはバーコードを傾けて撮影する。ユーザが意識する必要なく傾けて撮像するために、CCD自体を水平に対して傾けて配置しておく。もしくは、ユーザが撮像した際に自動的に必要な傾きになるようにセンサ部を可動式にしておく。これによって、読み取りの際に非常に有用な情報を取得することが可能となる。
【0033】
さらに手順4の高解像度化では、最大事後確率(MAP:Maximum a posteriori)推定を用いて高解像度化を行う。またこの際に、バーコードをブロック化すると共に、以下に提案する逆行列演算を用いることで、高速に演算を行うことを可能とする。また適切な重みの計算を行う。以下は、この手順4の高解像度化について説明する。
【0034】
図6のAには、従来のMAP推定を用いた画像高解像度化の手法を示し、図6のBには本発明による従来のMAP推定を用いた画像高解像度化の手法を示す。
【0035】
ここで図6のAの従来の手法では、適当にずれのある画像を入力とする(ステップS31)。次に、補間により高解像度画像の初期値を決定(ステップS32)し、さらに画像のずれを推定する(ステップS33)。そして、重みを画像全体で一定として高解像度画像を推定する(ステップS34)。さらに収束したかを判断し(ステップS35)、収束していないとき(No)はステップS33に戻される。また収束していたとき(Yes)は終了される(ステップS36)。
【0036】
これに対して、図6のBの本発明による手法では、基準のラインからずれが(1/倍率)の倍数となるラインを入力とする(ステップS41)。次に、重みを画像全体で一定として高解像度画像を推定(ステップS42)し、画素ごとに最適な重みを決定する(ステップS43)。そして、ステップS43で求めた重みを用いて高解像度画像化する(ステップS44)。さらに収束したかを判断し(ステップS45)、収束していないとき(No)はステップS43に戻される。また収束していたとき(Yes)は終了される(ステップS46)。
【0037】
以上の手法の違いにおいて、従来のMAP推定を用いた画像高解像度化では、画像のずれと高解像度画像を交互に何度も繰り返し計算するために時間が非常にかかるものであった。しかし、本発明の手法では、バーコードは縦に同じデータが並んでいるという特性を利用し、傾けて撮影することにより最初に全ての画像(ライン)のずれを推定することが可能であり、必要最低限の画像を使用して高解像度化が可能である。
【0038】
すなわち、一般的な画像と違い、バーコード画像は輝度の差が大きい点が多く見られるため重みを画素ごとに変更することが望ましい。そこで、重みを画像によって変更し高解像度画像と重みを交互に繰り返し計算する。重みを変更することで、従来のMAP推定を用いた高解像度化と同様に繰り返し処理が必要となるが、演算方法を工夫し処理の高速化を行うことで少ない計算量で計算することが可能である。
【0039】
また、初期値を決める際にずれが予め判っており、重みを全体で一定とすると、処理に時間のかかる行列演算を予め行っておくことが可能となる。これによって、短い処理時間で、従来の手法による補間の場合より良い画像が計算される。
【0040】
さらに以下には、MAP推定を用いた高解像度化について具体的に説明する。ここでは、バーコード画像の高解像度化にはMAP推定を用いた方法として非特許文献1に開示された手法を使用する。
【0041】
MAP推定を用いた高解像度化とは、低解像度画像yが与えられたときの事後確率Pr(z,s|y)を最大とする高解像度画像zとレジストレーションパラメータsを推定する方法である。Pr(z,s|y)は、対数を取りベイズの定理を用いることで事前確率の対数logPr(z)と条件付確率の対数logPr(y|z,s)の和によって表される。従ってMAP推定の問題は、次のように書くことができる。(なお、以下の説明で、数式ではベクトルを太字で表すが、説明文では太字を使用できないため、通常の文字で表記している)
【0042】
【数1】
【0043】
上式は二つの重みσ、λによって制御される。二つの重みの比をw=σ2/λとするとwが大きければ隣り合う画素の輝度が近い値になる。しかし、バーコードは黒から白へと輝度が急激に変わる部分があるため、そこではwの値を小さくする必要がある。提案手法では、白が続く場合(輝度200以上が3ピクセル以上続いている場合)と、黒が続いている場合(輝度50以下が3ピクセル以上続いている場合)はw=w1、それ以外の場合はw=w2というように輝度によってwの値を変化させた。重みを変更したときの結果を図7に示す。
【0044】
次に、スキャンラインの取得について説明する。1次元バーコードは横1行にデータが配置されており、同じデータが縦に並んでいる。よって、水平に1ラインとしてスキャン出来れば良い。図8に示したものは1次元バーコードの例Aとそれがスキャンされる様子Bである。図6Bに示した3本のスキャンラインから得られるデータはすべて同一となるため、一次元バーコードを高解像度化された結果として必要となるのは横一列の一次元のデータであり、二次元画像を高解像度化する必要はない。
【0045】
そこで本発明の手法では、低解像度なバーコード画像より、複数のスキャンラインのデータを用いて一つの高解像度化された一次元データを推定する。なお、2次元のコードであっても、エレメントの水平方向のデータの並びが同じとなる範囲を複数スキャンできるようにすれば、本発明は実施可能となるものである。
【0046】
以下の説明では、画像を4倍に高解像度化するものであり、その場合に、正しく高解像度化するためには画像を高解像度化した状態で1ピクセル(低解像度で4分の1ピクセル)ずつずれたラインが4本必要である。スキャンラインの取得方法を以下に示す。
手順1:画像の撮影
図9に示すようにわざと位置ずれが発生するように撮影する。これは、カメラセンサ部を若干水平より傾けておくことで自然に実現可能である。
【0047】
手順2:1ピクセルずれたラインの取得
図9のライン(a)のような基本となるラインを1つ決定し、1ピクセルずらしたものと他のラインと差をとり、一番差が小さいライン(図9のライン(b))を探し出す。
手順3:ラインの取得
従って、ライン(a)と(b)を4等分するライン(c)が4分の1ずつずれた必要となるスキャンラインである。これらのライン(a)と(c)の計4本のスキャンラインを用いて高解像度化を行う。
【0048】
すなわち、スキャンラインを取得する際に横一列のデータを単純に取得するのではなく上下一列を含めた3列の平均を取ったものを一本のスキャンラインとすることでより高い認識率を実現した。スキャンラインを1列から得たものと3列の平均を用いたものの結果の例を図10、11に示す。1列では輝度の差がほとんど見られなかった部分が、3列用いることで輝度の差がはっきり出る部分があることがわかる。
【0049】
さらに、高速化について説明する。ここではまず高速化のためのブロック化について検討する。高解像度化における問題は計算量である。問題は次の二つに集約される。
(1)大きなサイズの行列演算であること
(2)逆行列の演算が伴うこと
【0050】
ここでは、まず(1)の問題について考える。演算する行列のサイズを小さくするには、単純に信号をブロックに分割することで、大きなサイズの行列演算を小さなサイズの複数の行列演算に置き換えればよい。但し、単に信号をブロックに分割すると分割した境界での誤差が大きくなり問題となる。そこでここでは、隣り合うブロックが重複するように分割することでこの問題を回避する。ブロックのサイズは、実験的に高解像度化後の60ピクセル分とした。また、ブロック間の重複は、20ピクセルとした。
【0051】
次に、(2)の逆行列の演算の高速化について考える。高解像度画像zは式(3)で表される。
【数2】
ここで逆行列の演算が必要となり、最低でも60×60の逆行列の演算が必要となる。
【0052】
この式(3)でCは滑らかさを表すものであり、式(4)で表される。
【数3】
【0053】
そこで、WsTWs=Aとおき、d=[d1,d2・・・dN]とすると、式(3)のカッコ内の逆行列は式(5)で表される。
【数4】
【0054】
さらに、式(5)の逆行列は式(6)で表される。
【数5】
逆行列は式(6)の演算をN回(60回)行う必要がある。
【0055】
ここで、Wiは0.002と1.0の2種類である。そこで、Aの対角行列に0.002を足すとWiは0と0.998の2種類に変更できる。一方、Wiの比率はおよそ(0.002):(1.0)=3:1であるので、0.002を足すことで演算量を約4分の1に減らすことができる。さらに、最終的に必要となるデータは以上の方法で求めた逆行列にWsTyをかけた高解像度化画像▲z▼(zの上に^)である。
【0056】
そこで、WsTWs=bとおき、式(6)の両辺に右からbをかけると式(7)のようになる。
【数6】
【0057】
ここで、AN-1-1CNが計算できていれば式(7)で▲z▼(zの上に^)を計算することが可能である。式(6)では60×60の行列を求める計算だったが、式(7)を用いるとベクトルの計算となり計算量の減少が期待できる。AN-1-1CNは式(6)を用いて式(8)のように表される。
【数7】
【0058】
さらに、AN-2-1CNも同様に式(9)で表される。
【数8】
【0059】
この計算をA0-1CNが計算されるまで繰り返すことでAN-1CNbは計算される。この場合の60×60の大きさの行列の計算量の比較を表1に示す。なお、画像全体の計算量はバーコードの幅が600ピクセルのとき計算量である。
【0060】
【表1】
【0061】
この表1において、従来の方法であるLU分解を用いた方法と比べ、本発明の手法を用いることで計算量は約5分の1となった。逆行列を計算するためには従来では40,824,000回計算が必要であったが、本発明の方法を用いることで2,952,000回に減らすことが可能となる。
【0062】
さらに、9種類のバーコードを200mmから25mmずつ300mmまで離して撮影した画像を用いて、重みw2を変化させながら高解像度化を行った。実験結果を表2に示す。
【表2】
【0063】
この表2において、w2の値を変更した結果を見ると、距離によって最適なw2の値は違うことがわかった。つまり、距離によってw2の値を変更することでより高い認識率が実現できる。今回の場合撮影距離が250mmまでのときはw2を0.05、それよりも離したときは0.02を用いることで高い認識率を実現できる。撮影距離によってw2を変更し、後処理としてアンシャープ処理を行うことで250mmまでは9枚すべて275mmは8枚、300mmについても7枚認識することが出来た。
【0064】
さらに、300mmから10mmずつ離して撮影し、読み取れる距離の限界を調べた。カメラとバーコードの距離は従来法では215mmが限界であるが、提案法では330mmとなった。これらを文字数に換算すると、従来法の読み取り限界は42文字、提案手法では63文字となり、より多くの情報を保持できることが分かる。なお、MAP推定を用いて高解像度化した結果を図12に示す。図12(c)を見ると、線形補間により計算したもの(b)に比べ、良い結果が得られていることが分かる。
【0065】
以下さらに、2倍の高解像度化を行う際の実施形態について、図13を用いて具体的に説明する。この図13における問題点は、低解像度入力から高解像度の1ライン(ここでは1番上の基準ラインxとする)を推定することである。
【0066】
そこで、手順1の前処理では、
(1)入力画像全体を0から255の範囲に正規化する(ここでは便宜上0から1の範囲とする)
(2)画像中のエッジを強調する(ここでは説明の便宜上強調は行わない)
(3)入力における赤の基準スキャンラインを1ピクセルずらしたものと、それ以降のスキャンラインを比較することで、一ピクセルずれたスキャンラインを検索する。
【0067】
ここでは、
y0を1ピクセルずらしたもの⇒[0 0 0.5 0.9](左端は折り返すことで生成する)
y1⇒[0.1 0 1.1 0.9]
y2⇒[0 0 0.4 1]
とする。
【0068】
これらの2乗誤差を計算すると、y2がy0の1ピクセルに相当するものであることが分かる。よって、y0とこれが1/2ピクセル(高解像度画像上で1ピクセル)ずれたy1を用いて高解像度化の計算を行う。
【0069】
次に、手順2の高解像度化処理では、
(1)スキャンラインの分割(実際にはスキャンラインが300やそれ以上の長さを持っているため、これを手ごろな長さで分割するが、ここでの例は十分短いため分割しない)。
(2)重みの計算をするために入力y0を補間する⇒[0 0.25 0.5 0.75 1 1 1 1]
各ピクセルに対する滑らかさの重みを補間した情報により決定する。
⇒w=[w0 w1 w2 w3 w4 w5 w6 w7]=[0 0 0 0 1 11 1]
【0070】
この重みは、エレメントの切り替わりが起っている位置では滑らかさの拘束を課さないために必要となる。また、繰り返しによって、高解像度画像が得られるたびに更新する。
(ここでは便宜上、隣との差が大きい場合は0小さい場合は1とするが、実際には輝度200以上が3ピクセル以上続いている場合か、輝度50以下が3ピクセル以上続いている場合に1、それ以外の場合に0.002とする)
【0071】
(3)求めたい高解像度情報をx=[x0 x1 x2 x3 x4 x5 x6 x7]Tとおくと、
【数9】
が等しくなるようにxを求めればよい。
【0072】
ただし、y0とy1にはノイズがのっているため、単純に連立方程式を解いてしまうと正しい結果が得られない可能性がある。そこで、自乗誤差の和が最小になるようにxを決定する。
【0073】
これらは、行列で書くと
【数10】
であり、これらの和であるから
⇒xT(W0TW0+W1TW1)x−2(W0TW0+W1TW1)x+(y0Ty0+y1Ty1)
となる。
【0074】
さらに滑らかさの拘束条件(隣り合うピクセル同士が近い値をとる)を考えると、
【数11】
も小さくなる必要があり、これを足すと問題は、xT(W0TW0+W1TW1)x−2(W0TW0+W1TW1)x+(y0Ty0+y1Ty1)を最小にするxを求めることである。
【0075】
そこで、上式を微分して0とおくと
【数12】
を解けばよい。
【0076】
この逆行列をそのまま解くと計算量が問題となるため、逆行列の補助定理と
【数13】
なる関係を用いる。
【0077】
またA0-1は何倍に高解像度化するかにのみ依存するため、事前に計算しておくことが可能である。これらより解はベクトル計算のみによって再帰的に計算可能であり、また重みwiがゼロの位置では計算する必要がなく、非常に効率的である。
【0078】
実際に解く手順は次の通り。
a) 準備として、A0-1をメモリにロードする。またbを計算する。
b)-1-1 A0-1C1を計算。A0-1C1=[2 -6 6 -6 6 -6 6 -6]
b)-1-2 A1-1bを計算。A1-1b=[0.1 -0.1 0.1 0.9 1.3 0.5 1.3 1.1]
b)-2-1 A0-1C2を計算。A0-1C2=[-2 10 -14 14 -14 14 -14 14]
b)-2-2 A1-1C2を計算。A1-1C2=[-2 10 -14 14 -14 14 -14 14]
b)-2-3 A2-1bを計算。A2-1b=[0.1 -0.1 0.1 0.9 1.3 0.5 1.3 1.1]
b)-3-1 A1-1C3を計算。
【0079】
同様に繰り返し
b)-3-3 A2-1C2まで計算。
b)-3-4 A3-1bを計算。A3-1b=[0.1 -0.1 0.1 0.9 1.3 0.5 1.3 1.1]
同様に繰り返し(実際にはwiがゼロとなるところは計算する必要がない)
b)-8-9 A8-1bを計算。
A8-1b=[0.079 0.003 -0.085 1.167 0.950 0.956 1.038 1.103]
【0080】
よって、設定した重みに対する最終的な解は、
x=[0.079 0.003 -0.085 1.167 0.950 0.956 1.038 1.103]
となる。b)におけるステップ数はxの長さによって決まる。
【0081】
(4)上述の(3)で得られた結果に対して重みを計算する。重みに変化がなければ終了して次の手順へ移る。変化した場合は、新たな重みで再び(3)の計算を行う。例では、x=[0.079 0.003 -0.085 1.167 0.950 0.956 1.038 1.103]Tであるから、w=[1 1 0 1 1 11 1]となり、前回の重みと異なるため、もう一度(3)に戻る。
【0082】
2度目の繰り返し後は解が
A8-1b=[0.050 0.016 0.002 1.034 1.003 0.974 1.044 1.107]T
となり、重みも前回と変化がないため、これが最終的な解となる。
【0083】
さらに、手順3の後処理では、エッジを強調し、手順4のバーコードのデコードでは、バーコードを読み取ることが行われるが、これらは従来の技術と同様であるので、説明は省略する。
【0084】
こうして、本発明によれば、MAP推定を用いたバーコード画像の高解像度化により遠距離からのバーコードの読み取りを実現し、収納できる情報量の増加が可能であることを示した。
【0085】
また、従来の技術では、細エレメント幅が約1.0ピクセルであるときが限界であったが、本発明の技術を用いることで約0.66ピクセルまで正しく読むことができる。これを640×480の解像度のカメラを使用したとすると、文字数にして従来法では42文字が限界だったが、63文字まで読み取ることが可能である。また、29文字収納されたバーコードを読み取るには従来法だと最低でも横幅が420ピクセルの解像度が必要であったが、提案法を用いると横幅が285ピクセルで読み取ることが出来る。
【0086】
これによりバーコード読み取り機のセンサ部の小型化もしくは、コスト低減を図ることができる。また、ユーザは、バーコードを読み取る際のセンサとバーコードとの位置に関する自由度が高くなり、より使い勝手の良いバーコード読み取り装置を実現できる。
【0087】
なお本発明は、上述の説明した実施形態に限定されるものではなく、特許請求の範囲の記載を逸脱しない範囲において、種々の変形が可能とされるものである。
【図面の簡単な説明】
【0088】
【図1】本発明の適用されるシステム全体の構成を示す模式図である。
【図2】そのスキャナ部100の具体的な構成を示す図である。
【図3】そのデコード基板106の構成を示す模式的なブロック図である。
【図4】その説明のためのフローチャート図である。
【図5】その説明のためのフローチャート図である。
【図6】その説明のためのフローチャート図である。
【図7】その説明のための図である。
【図8】その説明のための図である。
【図9】その説明のための図である。
【図10】その説明のための図である。
【図11】その説明のための図である。
【図12】その説明のための図である。
【図13】その説明のための図である。
【符号の説明】
【0089】
100…スキャナ部、200…端末、300…バーコード、101…発光素子、102…レンズ、103…CCD、104…筐体、105…CPU部、106…デコード基板、107…メモリ、108…外部記憶装置、109…出力装置
【特許請求の範囲】
【請求項1】
画像の明部及び/または暗部の長さにより情報を形成すると共に、前記情報の配列方向に対して直交する方向に任意の幅を有してなる2値画像を読み取る光学的情報読取装置であって、
前記任意の幅の範囲を互いに位相を違えて複数回走査する画像走査手段と、
前記複数回の走査で読み取った信号に対して最大事後確率推定を用いて情報を取り出す情報抽出手段と、
を設けることを特徴とする光学的情報読取装置。
【請求項2】
前記互いに位相を違えて複数回走査する画像走査手段は、筐体に対して所定の角度を傾けて配置された撮像装置からなる
ことを特徴とする請求項1記載の光学的情報読取装置。
【請求項3】
前記互いに位相を違えて複数回走査する画像走査手段は、前記撮像装置で撮像された任意の走査線に対して前記光学的情報1画素分ずれて同じになる走査線を判別し、その間を等分した走査線を前記複数回走査した信号として取り出す手段を含む
ことを特徴とする請求項2記載の光学的情報読取装置。
【請求項4】
前記最大事後確率推定を用いて情報を取り出す情報抽出手段は、前記複数回の走査で読み取った信号に対して前記画像の明部及び暗部の変わり目における重み付けを用いて行列演算を行うと共に、前記重み付けの値を予め設定して計算量を削減する演算手段を含む
ことを特徴とする請求項1〜3のいずれか一つに記載の光学的情報読取装置。
【請求項5】
画像の明部及び/または暗部の長さにより情報を形成すると共に、前記情報の配列方向に対して直交する方向に任意の幅を有してなる2値画像を読み取るための光学的情報読取方法であって、
前記任意の幅の範囲を互いに位相を違えて複数回走査するステップと、
前記複数回の走査で読み取った信号に対して最大事後確率推定を用いて情報を取り出すステップと、
を備えることを特徴とする光学的情報読取方法。
【請求項6】
前記複数回の走査で読み取った信号に対して、任意の走査線と前記光学的情報1画素分ずれて同じになる走査線とを判別するステップと、
前記判別された走査線の間を等分した走査線を取り出すステップと、
前記取り出された信号に対して最大事後確率推定を用いて情報を取り出すステップと、
を備えることを特徴とする請求項5記載の光学的情報読取方法。
【請求項7】
前記最大事後確率推定は、前記複数回の走査で読み取った信号に対して前記画像の明及び暗部の変わり目における重み付けを用いて行列演算を行うと共に、前記重み付けの値を予め設定して計算量を削減する
ことを特徴とする請求項5または6のいずれかに記載の光学的情報読取方法。
【請求項1】
画像の明部及び/または暗部の長さにより情報を形成すると共に、前記情報の配列方向に対して直交する方向に任意の幅を有してなる2値画像を読み取る光学的情報読取装置であって、
前記任意の幅の範囲を互いに位相を違えて複数回走査する画像走査手段と、
前記複数回の走査で読み取った信号に対して最大事後確率推定を用いて情報を取り出す情報抽出手段と、
を設けることを特徴とする光学的情報読取装置。
【請求項2】
前記互いに位相を違えて複数回走査する画像走査手段は、筐体に対して所定の角度を傾けて配置された撮像装置からなる
ことを特徴とする請求項1記載の光学的情報読取装置。
【請求項3】
前記互いに位相を違えて複数回走査する画像走査手段は、前記撮像装置で撮像された任意の走査線に対して前記光学的情報1画素分ずれて同じになる走査線を判別し、その間を等分した走査線を前記複数回走査した信号として取り出す手段を含む
ことを特徴とする請求項2記載の光学的情報読取装置。
【請求項4】
前記最大事後確率推定を用いて情報を取り出す情報抽出手段は、前記複数回の走査で読み取った信号に対して前記画像の明部及び暗部の変わり目における重み付けを用いて行列演算を行うと共に、前記重み付けの値を予め設定して計算量を削減する演算手段を含む
ことを特徴とする請求項1〜3のいずれか一つに記載の光学的情報読取装置。
【請求項5】
画像の明部及び/または暗部の長さにより情報を形成すると共に、前記情報の配列方向に対して直交する方向に任意の幅を有してなる2値画像を読み取るための光学的情報読取方法であって、
前記任意の幅の範囲を互いに位相を違えて複数回走査するステップと、
前記複数回の走査で読み取った信号に対して最大事後確率推定を用いて情報を取り出すステップと、
を備えることを特徴とする光学的情報読取方法。
【請求項6】
前記複数回の走査で読み取った信号に対して、任意の走査線と前記光学的情報1画素分ずれて同じになる走査線とを判別するステップと、
前記判別された走査線の間を等分した走査線を取り出すステップと、
前記取り出された信号に対して最大事後確率推定を用いて情報を取り出すステップと、
を備えることを特徴とする請求項5記載の光学的情報読取方法。
【請求項7】
前記最大事後確率推定は、前記複数回の走査で読み取った信号に対して前記画像の明及び暗部の変わり目における重み付けを用いて行列演算を行うと共に、前記重み付けの値を予め設定して計算量を削減する
ことを特徴とする請求項5または6のいずれかに記載の光学的情報読取方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図8】
【図13】
【図7】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図8】
【図13】
【図7】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2008−134710(P2008−134710A)
【公開日】平成20年6月12日(2008.6.12)
【国際特許分類】
【出願番号】特願2006−318834(P2006−318834)
【出願日】平成18年11月27日(2006.11.27)
【出願人】(504133110)国立大学法人 電気通信大学 (383)
【出願人】(391062872)株式会社オプトエレクトロニクス (70)
【Fターム(参考)】
【公開日】平成20年6月12日(2008.6.12)
【国際特許分類】
【出願日】平成18年11月27日(2006.11.27)
【出願人】(504133110)国立大学法人 電気通信大学 (383)
【出願人】(391062872)株式会社オプトエレクトロニクス (70)
【Fターム(参考)】
[ Back to top ]