説明

2次元コード読取方法、2次元コード抽出方法、2次元コード認識方法及び2次元コード読取装置

【課題】低解像度で低品質な画像から2次元コードを読み取る。
【解決手段】2次元コード抽出手段13は、入力画像データを2値化した2値化画像に所定のぼかし処理を施し、暗画素が所定の割合以上に分布している画素集合を検出し、2次元コード候補とする。さらに、2値画像を用いて2次元コード候補が2次元コードの特徴を満たすかどうかを判定し、2次元コードを特定する。2次元コード認識手段14は、2次元コードに対応する2値画像から基準画像パタンを検出する。基準画像パタンに基づく仮モジュールを2値化した2次元コードの画像に割り当て、デコード処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、入力画像データから2次元コード画像を抽出し、歪みを補正して2次元コードの認識処理を行う2次元コード読取方法及び2次元コード読取装置と、2次元コード抽出方法及び2次元コード認識方法と、に関する。
【背景技術】
【0002】
従来から、撮像装置の撮像した画像データを取得し、この画像データから2次元コード画像部分を抽出して2次元コードの認識処理を行う2次元コード読取装置がある。
QRコード(登録商標)であれば、画像データを走査してJIS(Japanese Industrial Standards)規格に定められる3つのファインダパタン(Finder Pattern;位置検出パタン)を検出し、検出されたファインダパタンの囲む領域をもってコード画像部抽出としている。そして、コードを構成するモジュール(セルとも呼ばれる)の配置状態を特定し、認識処理を行う。QRコードの一部が正しく読み取れなかった場合は、QRコードの特徴に基づいて不具合領域を推定し、誤り訂正を行う(例えば、特許文献1参照)。
【0003】
入力した画像が歪んでいる場合には、画像を補正してから認識処理を行う。補正方法として、2次元コード画像について包絡線を作成し、包絡線で囲まれた画像の縦横方向に作成した補助線にモジュール数に応じた分割点を設け、2次元コード認識のための格子点を求める方法がある(例えば、特許文献2参照)。また、画像の明暗パタンから、バー幅またはモジュールサイズを検出し、検出されたサイズなどに基づいてバー幅またはモジュールサイズを正規化し、正規化画像を生成する方法もある(例えば、特許文献3参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2001−167222号公報
【特許文献2】特開2004−362053号公報
【特許文献3】特開2007−66000号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
近年、2次元コードの適用分野が広がっており、撮像装置の解像度が低い場合や、撮像時の状態が良好でない場合など、低品質・低解像度の入力画像データを処理しなければならないケースが増えている。しかし、従来の2次元コード読取方法では、低品質・低解像度の画像から2次元コードを読み取ることが困難であるという問題点がある。
【0006】
入力画像データから2次元コード画像を抽出するときは、ファインダパタンを用いる。しかしながら、入力画像データの画質が良好でなければファインダパタンを見つけることは困難である。QRコードを例にとると、入力画像データを走査して、ファインダパタンを検出する。しかしながら、低解像度、低品質の画像データでは、ノイズなどの影響で、ファインダパタンの検出が困難であった。さらに、2次元コード画像が傾いていたり、画像に歪みが生じていたりすると、ファインダパタンの抽出はより困難になる。加えて、単にパタンの一致をファインダパタン検出の条件とすると、漢字の「回」をファインダパタンと誤認識してしまう場合もある。また、画像領域全体を走査してパタン検出を行うため、複数の2次元コードや、2次元コード以外の画像が含まれていた場合には、ファインダパタンの抽出処理時間がかかるという問題もある。
【0007】
一方、ファインダパタンが検出され、2次元コードが抽出できたとしても、低解像度・低品質の画像データでは、デコード処理のための画像補正が必要になる。しかしながら、従来の2次元コード画像の歪み補正は、画質が良好で、かつ、歪みが均一であることを前提としている。すなわち、歪みが均一であることを前提に、2次元コード認識のための補助線の作成や、バー幅またはモジュールサイズの正規化が行われる。しかし、低品質・低解像度の画像データでは、歪みが均一でない場合が多く、従来の歪み補正方法では、画像の補正が十分に行えなかった。また、均一ではない非線形な歪みを均一な歪みを前提とした画像変換で補正しようとするため、かえって歪みを増長してしまうという問題点がある。
【0008】
以上のように、従来の2次元コード読取方法では、低解像度・低品質の画像データから2次元コードを抽出し、その認識処理を行うことが難しかった。
このような点に鑑み、低解像度や非線形な歪みを持った低品質な画像であっても、2次元コードの読み取りが可能な2次元コード読取方法、2次元コード抽出方法、2次元コード認識方法及び2次元コード読取装置を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記課題を解決するために、コンピュータが、入力画像データから2次元コード画像を抽出し、歪みを補正して2次元コードの認識処理を行う2次元コード読取方法が提供される。
【0010】
この2次元コード読取方法では、撮像装置によって撮像された画像データを2値化して2値画像を生成し、2値画像を画像データ記憶手段に格納する。次に、2値画像に対してぼかし処理を施し、ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を2次元コード候補として検出する。続いて、この2次元コード候補の領域に対応する2値画像を画像データ記憶手段から読み出して、2次元コードの特徴を示す情報と照合し、2次元コードの特徴を満たすと判定された2次元コード候補が検出されたときは、この2次元コード候補を2次元コードと特定する。次に、2次元コードの2値画像として、2次元コードとして特定された2次元コード候補に対応する2値画像を画像データ記憶手段から読み出し、画像データ記憶手段から読み出した2次元コードの2値画像から、2次元コードの基準画像パタンを検出する。次に、検出された基準画像パタンを用いて、2次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、2次元コードの2値画像の画素配列に合わせて仮モジュールを2次元コードの2値画像に割り当てる。そして、割り当てられたモジュールに基づき、2次元コードのデコードを行う。
【0011】
また、上記課題を解決するために、コンピュータが上記2次元コード読取方法と同様の処理を実行する2次元コード読取装置が提供される。さらに、上記の2次元コード抽出手順と同様の手順を実行する2次元コード抽出方法と、上記の2次元コード認識手順と同様の手順を実行する2次元コード認識方法と、が提供される。
【発明の効果】
【0012】
開示の2次元コード読取方法、2次元コード抽出方法、2次元コード認識方法及び2次元コード読取装置によれば、対象画像をぼかし処理し、ぼかし画像上の画素集合として対象画像に含まれる2次元コードを捉えることによって、低解像度・低品質の画像から2次元コードを抽出することができる。また、仮モジュールを生成し、2値化された2次元コード画像に割り当ててデコード処理を行うことによって、低解像度で低品質の歪んだ画像でもデコードが可能となる。このように、低解像度で、かつ、非線形な歪みを持った低品質な画像であっても、2次元コードの読み取りが可能となる。
【図面の簡単な説明】
【0013】
【図1】第1の実施の形態の2次元コード読取装置の構成の一例を示した図である。
【図2】QRコードの概略を示した図である。
【図3】QRコード読取装置のハードウェア構成例を示すブロック図である。
【図4】QRコード抽出部を中心としたソフトウェア構成を示した図である。
【図5】ラベルリストの一例を示した図である。
【図6】QR候補リストの一例を示した図である。
【図7】QRリストの一例を示した図である。
【図8】QRコード認識部を中心としたソフトウェア構成を示した図である。
【図9】パタンリストの一例を示した図である。
【図10】幅・高さリスト及び傾きリストの一例を示した図である。
【図11】RSブロックリストの一例を示した図である。
【図12】ぼかし処理の概要を示した図である。
【図13】QRコードの上方向にノイズがある場合のノイズ除去の例を示した図である。
【図14】QRコードの上方向と右方向にノイズがある場合のノイズ除去の例を示した図である。
【図15】ファインダパタンの画像にノイズが混じっている例を示した図である。
【図16】QRコード抽出処理全体の手順を示したフローチャートである。
【図17】QRコード候補の抽出処理の手順を示したフローチャートである。
【図18】縦方向のノイズチェック処理の手順を示したフローチャートである。
【図19】横方向のノイズチェック処理の手順を示したフローチャートである。
【図20】QRコード候補の精査処理の詳細を示したフローチャートである。
【図21】モジュールの幅と高さをファインダパタンとタイミングパタンとから求める方法を説明する図である。
【図22】水平方向のモジュール割当処理を示した図である。
【図23】モジュールの変形例を示した図である。
【図24】モジュールを組み合わせた一例である。
【図25】RSブロックの構成例を示した図である。
【図26】QRコード認識処理全体の手順を示したフローチャートである。
【図27】モジュール割当処理の手順を示したフローチャートである。
【発明を実施するための形態】
【0014】
以下、実施の形態を、図面を参照して説明する。
図1は、第1の実施の形態の2次元コード読取装置の構成の一例を示した図である。
2次元コード読取装置10は、画像データ記憶手段11a及びコード情報記憶手段11bを含む記憶手段、画像入力手段12、2次元コード抽出手段13、2次元コード認識手段14及び結果出力手段15を有する。2次元コード読取装置10の各処理手段は、コンピュータが、2次元コード読取プログラムを実行することにより、その処理機能を実現する。
【0015】
画像データ記憶手段11aは、2次元コード読取装置10が取得した入力画像データを格納する記憶領域を有する。また画像データ記憶手段11aは、必要に応じて2値化された画像、所定のぼかし処理を施した画像など、画像データを記憶する。
【0016】
コード情報記憶手段11bは、2次元コードに関する2次元コード情報を格納する領域を有する。コード情報記憶手段11bには例えば、2次元コード抽出手段13が抽出した2次元コード画像領域の位置を示す2次元コード位置情報が格納される。
【0017】
画像入力手段12は、撮像装置によって撮像された画像データを入力し、この入力画像データを画像データ記憶手段11aに格納する。
2次元コード抽出手段13は、画像データ記憶手段11aに格納された入力画像データを読み出し、入力画像データから2次元コードを抽出する。2次元コード抽出手段13はまず、画像データ記憶手段11aから読み出した入力画像データを2値化し、2値画像を生成して、画像データ記憶手段11aに格納する。2次元コード抽出手段13は次いで、生成した2値画像に対して所定のぼかし処理を施す。ぼかし処理は、明画素と暗画素との境界をぼかす処理で、ぼかし処理には、平滑化やOR間引きが含まれる。2値画像に対してぼかし処理を行うことによって、所定の範囲に点在する暗画素同士が連結され、暗画素が所定の割合以上で偏って分布している画素集合(黒画素の塊)が形成される。2次元コード抽出手段13はこの画素集合を検出し、画素集合の元になった2値画像が2次元コード画像の特徴を満たすかどうか判定する。まず、ぼかし処理を施した画像に基づいて、その形状が2次元コード画像の形状の特徴を満たす画素集合を2次元コード候補として抽出する。例えば、対象の2次元コード全体(外縁)の形状が正方形をしている場合には、画素集合の形状がおおよそ正方形をしているかどうかを判定し、画素集合がおおよそ正方形をしていれば、2次元コード候補として抽出する。なお、2次元コード候補抽出のとき、2次元コード抽出手段13が画素集合のノイズをチェックし、検出されたノイズを除去して画素集合の形状を整えた後、画素集合形状の判定を行うとしてもよい。こうして、2次元コード抽出手段13は、ぼかし処理を施した画像に基づいて、2次元コード候補を抽出する。続いて2次元コード抽出手段13は、2次元コード候補の画素集合に相当する領域を、画像データ記憶手段11aに格納されるぼかし処理前の2値画像から抽出する。そして、より詳細に、抽出した2次元コード候補の2値画像を、2次元コードを特徴付ける2次元コード検出用パタンと照合する。例えば、2次元コードのファインダパタンの形状がわかっていれば、2次元コード抽出手段13は、抽出された2次元コード候補に対応する2値画像の領域を走査し、ファインダパタンを探索する。2次元コード候補の2値画像からファインダパタンが検出できれば、2次元コード抽出手段13はこの2次元コード候補を2次元コードと判定し、その画像領域の位置を示す2次元コード位置情報を生成し、コード情報記憶手段11bに格納する。ここでは、2次元コード外縁形状が正方形の場合で説明したが、検出基準の形状は対象の2次元コードに応じて決まる。例えば、2次元コードの縦横の比が既知の矩形であれば、その形状と画素集合の形状とを照合する。また、2次元コードであるか否かの判定に用いる詳細な2次元コードの特徴も、対象の2次元コードに応じて適宜決める。
【0018】
2次元コード認識手段14は、2次元コード抽出手段13が抽出した2次元コード画像領域のデコード処理を行う。2次元コード認識手段14は、コード情報記憶手段11bに格納されている2次元コード位置情報に基づいて、入力画像データから2次元コード画像を抽出する。2次元コード認識手段14はまた、抽出された2次元コード画像を2値化し、2値化された2次元コードの2値画像からモジュールの位置検出用の基準画像パタンを検出する。なお、新たに2値化処理を行わず、2次元コード抽出手段13によって2値化された2値画像を画像データ記憶手段11aから読み出して用いるとしてもよい。2次元コードには、2次元コードを構成する複数のモジュールの位置検出用にさまざまな基準画像パタンが用意されている。2次元コード認識手段14では、基準画像パタンそれぞれの画像的特徴を用いて、2次元コードの2値画像から基準画像パタンを検出する。そして、2次元コード認識手段14は検出された基準画像パタンを用いて、2次元コードを構成する各モジュールの縦横の画素数を推定し、仮モジュールを生成する。仮モジュールの縦横の画素数は、推定された画素数になる。そして2次元コード認識手段14は、生成された仮モジュールを2次元コードの2値画像に割り当て、割り当てられた仮モジュールの領域を2次元コードのモジュールと見なし、2次元コードのデコード処理を行う。このとき、2次元コードに設定されている誤り訂正符号を用いた誤り訂正処理が行われる。2次元コード認識手段14は、さらに、誤り訂正符号による誤り訂正ができない領域を検出したときは、誤り訂正ができない領域に属するモジュールの位置決め(仮モジュールの割当)をやり直すとしてもよい。なお、モジュール位置決めのやり直しの対象は、誤り訂正ができない領域だけでよい。また、モジュール位置決めのやり直しの際には、2値化処理の方法を変更し、再度2値化処理からの手順を行うとしてもよい。デコード結果は、結果出力手段15に出力する。
【0019】
結果出力手段15は、2次元コード認識手段14によるデコード結果を、表示装置などに出力し、結果を利用者に通知する。
このような2次元コード読取装置10の動作及び2次元コード読取方法について説明する。
【0020】
画像入力手段12は、撮像された入力画像データを取得し、画像データ記憶手段11aに格納する。2次元コード抽出手段13は、画像データ記憶手段11aに格納された入力画像データを2値化処理し、2値画像を画像データ記憶手段11aに格納する。そして、2値画像に対して所定のぼかし処理を行う。2次元コード抽出手段13は、所定のぼかし処理によって形成された画素集合を抽出して、抽出した画素集合の形状が、2次元コードの形状の特徴を満たしているかどうかを判定し、特徴を満たしている画素集合を2次元コード候補とする。このとき、2次元コード抽出認識手段13は画素集合のノイズをチェックし、画像集合からノイズを除去してから形状判定を行う。こうして2次元コード候補が検出される。さらに、2次元コード抽出手段13は、ぼかし処理の結果得られた2次元コード候補の画像領域に相当するぼかし処理前の2値画像の領域を抽出し、抽出した領域が2次元コードの特徴を満たすかどうかをより詳細な条件でチェックする。2次元コード抽出手段13は例えば、2次元コードが備える基準画像パタンが2次元コード候補に対応する2値画像から検出できるかどうかをチェックする。2次元コードが複数の基準画像パタンを備えているときは、全ての基準画像パタンが検出されなくてもよいとすることもできる。少なくとも1つ基準画像パタンが検出され、検出された基準画像パタンとぼかし処理の結果得られた2次元コード候補の画像領域から推定される基準画像パタンの推定位置に基準画像パタンと推定される画像が検出されれば、基準画像パタンが検出できたとする。2値画像から基準画像パタンを検出できるときは、2次元コード抽出手段13はこの2次元コード候補を2次元コードと判定し、2次元コード位置情報を生成する。2次元コード位置情報は、コード情報記憶手段11bに格納される。なお、2値化処理及びぼかし処理にはさまざまな方法があり、それぞれに得られる画像は異なる。そこで、ある2値化処理方法あるいはぼかし処理方法を用いて行った結果から2次元コードが検出できないときは、2値化処理方法またはぼかし処理方法を他の処理方法に変更し、2次元コードの抽出手順を繰り返す。
【0021】
このように、2次元コード読取装置10では、2値画像に所定のぼかし処理を行って2次元コード画像部分を1つの塊にして2次元コード候補として抽出する。これにより、低解像度や低画質の画像であっても、2次元コード候補を抽出することが可能となる。さらに、2次元コード候補に対応するぼかし処理前の2値画像領域を走査し、2値画像から基準画像パタンが検出されるかどうかを判定する。基準画像パタン検出の対象となる2値画像領域は、既に2次元コード候補として絞られている領域であるので、基準画像パタンと見なす条件を緩和しても2次元コード画像を検出することが可能であり、低解像度や低品質の画像からの2次元コード抽出を容易にする。また、2値画像を走査するのは、2次元コード候補の領域だけであるので、抽出時間を削減することができる。
【0022】
さらに、2次元コード認識手段14は、2次元コード抽出手段13が特定した2次元コード画像領域の入力画像データを読み出して2値化し、2値化された2次元コード画像から2次元コードに含まれる基準画像パタンを検出する。そして、2次元コード認識手段14は検出された基準画像パタンを用いて各モジュールの縦横の画素を推定し、仮モジュールを作成する。2次元コード認識手段13は、作成した仮モジュールを適宜変形して2次元コードの2値画像に割り当て、割り当てられたモジュールに基づく2次元コードのデコードを行う。2次元コード抽出手順と同様に、2値化処理の方法を変更すると得られる画像が変わるので、2次元コードのデコードがうまくいかなかったときは、2値化処理方法を変更し、2次元コードの認識手順を繰り返す。
【0023】
このように、2次元コード読取装置10では、検出された基準画像パタンに合わせて仮モジュールを作成し、これを2次元コード画像に割り当ててデコード処理を行う。これにより、低解像度あるいは非線形な歪みが生じた低品質の画像であってもデコードの成功率を高めることができる。
【0024】
次に、第2の実施の形態として、QRコードの読み取りを行うQRコード読取装置に適用した場合について説明する。
まず、QRコードの読み取りに用いるQRコードの画像の特徴について説明する。QRコードには、デコードを補助するために用いる機能パタンの領域と、情報(データ)が書き込まれる領域とがある。なお、以下の説明では、暗画素を黒画素または黒、明画素を白画素または白と呼ぶ。
【0025】
図2は、QRコードの概略を示した図である。
図2に示すQRコード20は、QRコードから機能パタン領域の画像を取り出して示している。なお、情報(データ)は、符号化され、符号化領域25に設定される。
【0026】
QRコード20の機能パタンには、ファインダパタン21a,21b,21cと、タイミングパタン(Timing Pattern)22a,22bと、位置合わせパタン(Alignment Pattern)23がある。また、QRコード20の周りには、何も表示されない空白領域であるクワイエットゾーン(Quiet Zone)24が確保される。
【0027】
ファインダパタン21a,21b,21cは、QRコード20の3つの隅(左上、左下、右上)に配置され、QRコードの検出に用いられる。ファインダパタンの中心付近を直線的に横切ると、黒、白、黒、白、黒のパタンが、1:1:3:1:1の比率で検出される。
【0028】
タイミングパタン22a,22bは、水平方向と垂直方向に1本ずつ配置される。タイミングパタンは黒と白とが交互に出現するパタンで、黒、白が1:1の比率で検出される。
【0029】
位置合わせパタン23は、QRコードのバージョンによって決められた位置に配置される。位置合わせパタンの中心付近を直線的に横切ると、黒、白、黒、白、黒のパタンが、1:1:1:1:1の比率で検出される。位置合わせパタン23は、大きなQRコードの場合、シンボル位置の検索を補助する働きをする。
【0030】
QRコード読取装置は、このような機能パタンを用いて、QRコード部分の抽出処理と、QRコードの認識処理と、を行う。
ここで、QRコード読取装置のハードウェア構成について説明する。図3は、QRコード読取装置のハードウェア構成例を示すブロック図である。
【0031】
QRコード読取装置100は、CPU(Central Processing Unit)101によって装置全体が制御されている。CPU101には、バス107を介してRAM(Random Access Memory)102、ハードディスクドライブ(HDD:Hard Disk Drive)103、グラフィック処理部104、入力インタフェース105、及び画像入力部106が接続されている。
【0032】
RAM102には、CPU101に実行させるOS(Operating System)のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、RAM102には、CPU101による処理に必要な各種データが格納される。HDD103には、OSやアプリケーションのプログラムが格納される。グラフィック処理部104には、モニタ108が接続されており、CPU101からの命令に従って画像をモニタ108の画面に表示させる。入力インタフェース105には、キーボード109aやマウス109bが接続されており、キーボード109aやマウス109bから送られてくる信号を、バス107を介してCPU101に送信する。画像入力部106は、撮像装置に接続されており、撮像装置が生成したQRコードを含む画像信号を入力し、バス107を介してCPU101に送信する。
【0033】
このようなハードウェア構成によって、QRコード読取装置100の処理機能を実現することができる。
次に、QRコード読取装置100のソフトウェア構成を、QRコード抽出部と、QRコード認識部とに分けて説明する。
【0034】
図4は、QRコード抽出部を中心としたソフトウェア構成を示した図である。なお、図4の実線矢印はデータの書き込みを表し、点線矢印はデータの読み出しを表す。
QRコード読取装置100は、画像データ記憶部110a、コード情報記憶部110b、画像入力部120、QRコード抽出部130、QRコード認識部140及び結果出力部150を有する。
【0035】
画像データ記憶部110aは、元画像領域1100、2値画像領域1110、ぼかし画像領域1120及び2値画像領域(複写)1130の各画像データ格納領域を有する。元画像領域1100には、撮像装置により撮像された処理前の画像データが格納される。例えば、元画像領域1100に格納された画像データが、QRコードが不特定の位置に配置される文書の画像データなどであり、QRコード以外の画像が多数含まれているとする。2値画像領域1110には、2値化処理部131が元画像データについて2値化処理を行った2値画像データが格納される。ぼかし画像領域1120には、2値画像領域1110に格納された2値画像データについて、ぼかし処理部132がぼかし処理を行ったぼかし画像データが格納される。2値画像領域(複写)1130には、QRコード認識部140が行ったモジュール割当処理で生成される2値画像データ(複写)が格納される。
【0036】
コード情報記憶部110bには、ラベルリスト1140、QR候補リスト1150及びQRリスト1160が格納される。各情報は、QRコード抽出部130で生成し、QRコード抽出部130及びQRコード認識部140で参照する。ラベルリスト1140には、ラベリング処理部133がラベリングを行った画素集合の一覧が格納される。QR候補リスト1150には、QRコード候補抽出部134がラベルリスト1140から抽出したQRコード候補の一覧が格納される。QRリスト1160には、QRコード精査判定部135がQRコード候補のうち、精査判定によって認められたQRコードの一覧が格納される。なお、コード情報記憶部110bに格納されるQRコード認識部140が参照するデータについては、後述する。
【0037】
画像入力部120は、撮像装置が撮像した画像データを入力し、元画像領域1100に格納する。QRコード抽出部130は、元画像領域1100に格納された元画像データからQRコードを抽出する。QRコード抽出の詳細は、後述する。QRコード認識部140は、QRコード抽出部130が抽出したQRコードの認識処理を行う。結果出力部150は、QRコード認識部140によるQRコードの認識結果を出力する。
【0038】
QRコード抽出部130の詳細について説明する。QRコード抽出部130は、2値化処理部131、ぼかし処理部132、ラベリング処理部133、QRコード候補抽出部134及びQRコード精査判定部135を有する。
【0039】
2値化処理部131は、元画像領域1100に格納された画像データを入力し、画像データに対して2値化処理を施して2値画像を生成し、2値画像領域1110に格納する。2値化処理には、大津法やNiblack法などさまざまな手法が知られており、本実施形態によるQRコード読取装置では、そのいくつかの処理手順を選択して実行することができる。また、画像領域を分割し、それぞれの領域単位で2値化処理を行うとしてもよい。場合によっては、サブピクセル化を行った後、2値化処理を行うとしてもよい。
【0040】
ぼかし処理部132は、2値画像領域1110に格納された2値画像にぼかし処理を施してぼかし画像を生成し、ぼかし画像領域1120に格納する。ぼかし処理には、OR間引きや平滑化が用いられる。また、2値画像を縮小し、縮小率に応じた範囲に含まれる画素中の黒画素が所定の割合以上のときは、この範囲に対応する縮小画像の画素を黒画素にする。こうして、2値画像に点在する黒画素から黒画素の集まりを生成する。2値画像を縮小することにより、ぼかし処理を施した2値画像全体の画素数が減少し、以降の処理を高速に実行することができる。OR間引きを用いると、単位画素範囲に黒画素が存在すれば黒画素を、単位画素範囲内の画素がすべて白画素のときのみ白画素を選択することで2値画像の画素が間引かれ、ぼかし画像が得られる。適当なぼかし処理を施すと、QRコードを1つの正方形の黒画素の集合と見なせるようになる。
【0041】
ラベリング処理部133は、ぼかし画像の黒画素の集合に、属性としてラベル(番号)を付加する処理である。近接する黒画素をまとめ、1つのラベルを付加することで、黒画素の画素集合をグループとして分類する。ラベリング処理の目的は、QRコードをほぼ正方形の黒画素のグループとして捉えることにあるので、ラベリング処理部133はおおまかなノイズは画素集合から除去し、ラベリングされた画素グループをラベルリスト1140に登録する。例えば、検出対象とするQRコードは正方形であるので、ある許容範囲内の矩形以外の形状の画素グループは、リストに登録しない。ラベルリスト1140に登録されたグループをラベル矩形またはラベルと呼ぶ。
【0042】
QRコード候補抽出部134は、ラベルリスト1140に登録されるラベル矩形から、QRコード候補の条件を満たすラベル矩形を抽出し、QR候補リスト1150に登録する。ここでは、ぼかし画像に基づいてラベル矩形抽出の判断を行うことから、QRコード候補抽出部134は、ラベル矩形の詳細な条件ではなく、ラベル矩形のシルエットといった形状がQRコードの外縁の形状と許容範囲内で一致しているかどうかを判定する。例えば、一定の偏平率のマージンをラベル矩形に対して設定し、概略正方形と見なせるラベル矩形をQRコード候補とする。ラベル矩形とQRコード外縁形状とが一致しないときは、画像にノイズが含まれていないかをラベル矩形の外側から内側に向かってチェックし、ノイズが検出されるときはこれを除去して、再度ラベル矩形とQRコード外縁形状との照合を行う。例えば、ラベル矩形の全体の幅に対して狭い幅を持つ線状の形状をノイズ条件とし、このような形状がラベル矩形から検出されれば、これをノイズとして除去し、ラベル矩形の範囲を補正する。例えば、クワイエットゾーン側に延びるノイズがあれば、ノイズが除去され、ラベル矩形が補正される。ラベル矩形補正の詳細は後述する。こうして、ぼかし画像で検出されたラベル矩形に基づいて、QRコード候補が抽出される。
【0043】
QRコード精査判定部135は、QR候補リスト1150に登録される各QRコード候補について、ぼかし画像のQRコード候補の範囲(ラベル矩形の領域)に対応する領域の2値画像を2値画像領域1110から読み出し、読み出した2値画像からQRコードのファインダパタンを検出する。そして、QRコード精査判定部135はファインダパタンが検出されたQRコード候補をQRコードとして特定し、QRリスト1160に登録する。例えば、前述のように、「1.正方形シンボルが3つ」、「2.正方形シンボルが3隅に存在する」及び「3.正方形シンボル内に別の正方形がある」という条件を用いてファインダパタンを検出する。この条件をすべて満たしたときは、このQRコード候補はQRコードであると判定する。なお、上記の条件をすべて満たさなくても、3つのファインダパタンのうち少なくとも1つのファインダパタンが検出され、残りのファインダパタンの推定位置にファインダパタンらしき形状が検出されれば、QRコードと見なすこともできる。QRコード精査判定部135は例えば、検出されたファインダパタン、あるいは検出されたファインダパタンとラベル矩形とから推定される他のファインダパタンの推定位置に存在する画像の形状をチェックする。そして、その形状がファインダパタンの上記の3条件を少なくとも1つ満たせば、QRコード精査判定部135はラベル矩形をQRコードと見なす。これにより、低解像度・低品質でファインダパタンにノイズが混じっているような場合であっても、QRコードを検出することができる。検出されたQRコードについて、その領域を示す位置情報を生成し、QRリスト1160に登録する。このとき、ファインダパタンの位置や、QRコードの画像が傾いている場合の傾きなども算出し、位置情報とともに登録しておく。
【0044】
次に、ラベルリスト1140、QR候補リスト1150及びQRリスト1160について説明する。
図5は、ラベルリストの一例を示した図である。
【0045】
ラベルリスト1140には、ラベリング処理部133が検出したラベル矩形が登録される。ラベルリスト1140には、ラベル矩形を識別する識別番号(No.)に対応し、矩形左上座標1141、矩形右下座標1142、矩形中心座標1143及び矩形長さ1145が登録される。
【0046】
矩形左上座標1141には、ラベル矩形の4頂点のうち、左上の頂点の座標が設定される。矩形右下座標1142には、ラベル矩形の4頂点のうち、右下の頂点の座標が設定される。矩形左上座標と矩形右下座標とから、ラベル矩形の範囲が特定される。図5では、水平方向の座標をX、垂直方向の座標をYとしている。
【0047】
矩形中心座標1143には、矩形の中心の座標が設定される。図5では、水平方向の座標をx、垂直方向の座標をyとしている。また、矩形長さ1145には、矩形の大きさを表す、水平方向の幅(W)と、垂直方向の高さ(H)とが設定される。
【0048】
図5の例では、No.1からNo.5までの5つのラベル矩形が登録されている。
図6は、QR候補リストの一例を示した図である。
QR候補リスト1150には、QRコード候補抽出部134が、ラベルリスト1140から抽出したQRコード候補が登録される。QR候補リスト1150の各情報項目は、図5のラベルリスト1140と同様である。
【0049】
図6の例では、ラベルリスト1140に登録されたラベル矩形から、No.2とNo.5とがQRコード候補として抽出され、登録されている。
図7は、QRリストの一例を示した図である。
【0050】
QRリスト1160には、QRコード精査判定部135が、QR候補リスト1150から選択したQRコードの位置情報を含むコード情報が登録される。
矩形左上座標1161は、ラベルリスト1140の矩形左上座標1141と同様である。矩形右下座標1162は、ラベルリスト1140の矩形右下座標1142と同様である。ファインダパタン位置1163は、QRコード候補から検出されたファインダパタンの位置座標が登録される。傾き1164には、画像上のQRコードの傾きが登録される。
【0051】
次に、QRコード認識部140について詳細に説明する。
図8は、QRコード認識部を中心としたソフトウェア構成を示した図である。図4と同じものには同じ番号を付し、説明は省略する。なお、図8の実線矢印はデータの書き込みを表し、点線矢印はデータの読み出しを表す。
【0052】
QRコード認識部140は、2値化処理部141、パタン検出部142、サイズ算出部143、モジュール割当部144、デコード処理部145及び誤り判定部146を有する。
【0053】
また、コード情報記憶部110bには、図4に示した情報に加え、パタンリスト1170、傾き・幅・高さリスト1180及びリードソロモン(Reed-Solomon、以下、RSとする)ブロックリスト1190が格納される。パタンリスト1170には、パタン検出部142が検出したファインダパタン、タイミングパタンなどの機能パタンの位置を示す座標が格納される。傾き・幅・高さリスト1180には、サイズ算出部143が算出した各パタンの幅及び高さ、画像の傾きなどの情報が格納される。RSブロックリスト1190には、QRコードに組み込まれるRSブロックごとの誤り訂正の成否が記録される。
【0054】
QRコード認識部140の各処理部について説明する。
2値化処理部141は、QRリスト1160を読み出し、矩形左上座標1161及び矩形右下座標1162によって指定されたQRコードの位置座標に基づき、QRコードの画像データを元画像領域1100から読み出し、2値化処理する。サブピクセル化を行った後、2値化処理を行うとしてもよい。2値化処理部141は、2値化したQRコード画像を、2値画像領域1110に格納する。なお、QRコード抽出部130が生成した2値画像を用いるとすることもできる。しかし、QRコード抽出部130及びQRコード認識部140は、処理状況に応じて2値化処理の手法を適宜選択するので、ここでは、QRコード認識部140が、以降の処理手順の実行前に改めて元画像に対する2値化処理を行うとする。2値化処理の手順は、QRコード抽出部130の処理と同様である。しかしながら、2値化の対象範囲は、QRコードの領域に限定されるので、入力画像全体を2値化するQRコード抽出部130の場合と比較し、2値化のための処理時間は少なくて済む。
【0055】
パタン検出部142は、図2に示したQRコード20のファインダパタン21a,21b,21c、タイミングパタン22a,22b及び位置合わせパタン23aを、読み出したQRコードの画像データから検出する。画像データから検出されたパタンの位置は、パタンリスト1170に設定する。なお、QRリスト1160に予めファインダパタン位置1163が設定されているときは、ファインダパタンの検出を省略するとしてもよい。
【0056】
サイズ算出部143は、検出されたファインダパタン21a,21b,21cと、タイミングパタン22a,22bと、に基づいて、QRコードを構成するモジュールに割り当てる各仮モジュールの幅と高さを算出し、またQRコード画像全体の傾きを算出する。サイズ算出部143は例えば、互いに水平方向に配置されるファインダパタン21aとファインダパタン21bとの間のずれを検出し、水平方向の傾きを算出する。同様にサイズ算出部143は、互いに垂直方向に配置されるファインダパタン21bとファインダパタン21cとの間のずれを検出し、垂直方向の傾きを算出する。サイズ算出部143はまた、1モジュールごとに白と黒が交互に配置されるタイミングパタン22a,22bに基づいて、各仮モジュールの幅(横の画素数)と、高さ(縦の画素数)とを算出する。算出結果は、傾き・幅・高さリスト1180に設定する。
【0057】
モジュール割当部144は、サイズ算出部143で設定された傾き・幅・高さリスト1180に基づき、仮モジュールを生成し、2値画像領域1110に格納される2次元コードの2値画像に割り当てる。モジュール割当部144は、傾き・幅・高さリスト1180に基づき、仮モジュールの幅と高さを決定し、QRコードの傾きや画像の状況に応じて仮モジュールを変形する。モジュール割当部144はこのとき、既に配置されたモジュールと組み合わさるように仮モジュールの割当を行う。必要であれば、既割当のモジュールに合わせて仮モジュールを変形し、QRコードの2値画像に割り当てていく。所定の範囲、例えば、1モジュール列、あるいはQRコード全体についてモジュールの割り当てが終了したときは、モジュール割当部144は仮モジュールを割り当てた2値画像と、QRコードの元の2値画像とのずれを計測する。そして、ずれが予め設定される閾値より大きいときは、モジュール割当部144は仮モジュールの割当処理をやり直す。なお、モジュールの割当処理は、QRコードの4隅のうちの1つを選択し、そこを起点として開始する。また、QRコードに位置合わせパタンが検出できた場合は、検出された位置合わせパタンを起点としてモジュール割り当てを行うとしてもよい。さらに、複数の位置合わせパタンが検出できた場合は、各位置合わせパタンから開始し、位置合わせパタンが囲む領域の内側に向かってモジュール割り当てを行うとしてもよい。モジュールの割当処理は、2値画像領域1110に格納されている画像を2値画像領域(複写)1130に複写しながら行われる。
【0058】
デコード処理部145は、2値画像領域(複写)1130に格納されるQRコードの2値画像に基づき、QRコードのデコード処理を行う。このとき、デコード処理部145はRSブロック単位で訂正の成否を判定し、結果をRSブロックリスト1190に登録しておく。
【0059】
誤り判定部146は、RSブロックリスト1190を参照し、誤り訂正ができなかったRSブロックを特定する。各RSブロックを構成するモジュールの場所は決められているので、誤り判定部146は、誤り訂正ができなかったRSブロックに属するモジュールについて、位置決めが間違っていると判断する。誤り判定部146は、誤り訂正ができなかったRSブロックが存在し、その数が所定の閾値以下の場合に、誤り訂正ができなかったRSブロックに属するモジュールについてのみ、モジュールの割り当てをやり直す。モジュールの割り当てのやり直しは、対象RSブロックについて仮モジュールの変形を調整し、変形した仮モジュールの再度の割り当てを行う。また、未使用の2値化処理方法を選択し、選択した2値化処理方法による2値化処理からの手順を再度行うとしてもよい。なお、このとき再割り当てを行うのは、誤り訂正符号による誤り訂正ができなかったRSブロックのみとする。
【0060】
次に、パタンリスト1170、傾き・幅・高さリスト1180及びRSブロックリスト1190について説明する。
図9は、パタンリストの一例を示した図である。
【0061】
パタンリスト1170には、パタン検出部142が検出したQRコードのファインダパタン、タイミングパタン及び位置合わせパタンの座標が登録される。各パタンを識別する識別番号に対応付けて、パタンの矩形左上座標1171と、矩形右下座標1172とが設定される。
【0062】
図10は、幅・高さリスト及び傾きリストの一例を示した図である。
幅・高さリスト1180には、サイズ算出部143が算出したモジュールごとの幅1181と、高さ1182とが、モジュールを識別する識別番号に対応付けて登録される。また、傾きリスト1183には、サイズ算出部143が算出したQRコード画像の傾きが登録される。
【0063】
図11は、RSブロックリストの一例を示した図である。
RSブロックリスト1190には、デコード処理部145が検出したRSブロックごとに誤り訂正の成否が登録される。RSブロックリスト1190には、RSブロックの識別情報1191に対応付けて、そのRSブロックの誤り訂正の成否1192が設定される。
【0064】
このような構成のQRコード読取装置100により、QRコードの抽出と認識処理とが実行される。以下、それぞれの処理の詳細について、QRコード抽出処理、QRコード認識処理の順に説明する。
【0065】
(1)QRコード抽出処理
QRコード抽出部130は、処理が開始されると処理対象の元画像データを元画像領域1100から読み出し、2値化処理部131が読み出した元画像データに対する2値化処理を行い、2値画像を生成する。2値化処理部131により生成された2値画像は、2値画像領域1110に格納する。
【0066】
続いて、ぼかし処理部132が、2値画像領域1110に格納された2値画像を読み出してぼかし処理する。
図12は、ぼかし処理の概要を示した図である。図12の例では、ぼかし処理としてOR間引きを行うとする。なお、間引き画像はイメージであり、実際のぼかし画像を示すものではない。
【0067】
2値画像1101は、元画像データを2値化した画像であり、QRコード211とともに、文字が読み込まれている。
OR間引き1/2は、元の2値画像の画素数を縦・横ともに1/2にする間引き処理である。2値画像1101の4画素(例えば、縦2画素×横2画素)内に黒画素が1つでも含まれるときは、黒画素を選択して2値画像の間引き処理を行う。OR間引き1/2を施したぼかし画像1102では、QRコード212は、黒画素が所定の割合以上を占める正方形となっている。なお、QRコード以外の部分も黒の正方形と見なせる場合もある。図12の例では、文字の部分がほぼ黒の正方形になっている。
【0068】
OR間引き1/4は、元の2値画像の画素数を縦・横ともに1/4にする間引き処理であり、さらに間引き率が上がる。2値画像1101の16画素(例えば、縦4画素×横4画素)を単位として、OR間引き1/2と同様の処理を行う。OR間引き1/4を施したぼかし画像1103では、QRコード213は、さらに、黒画素が所定の割合以上を占める正方形となっている。
【0069】
QRコードは隙間だらけの正方形であるが、クワイエットゾーン24によって形成されるQRコードの周りの隙間は4モジュールあるということから、2値画像に対してぼかし処理を行うと、QRコード部分は、黒画素が所定の割合以上を占めるおおよそ正方形の画像として抽出される。また、クワイエットゾーン24により、QRコード部分が他の画像とは切り離される。
【0070】
ラベリング処理部133では、黒画素の集まりを見つけて、黒画素集合にラベルを付すラベリング処理を行い、検出されたラベルをラベルリスト1140に登録する。ぼかし画像1102,1103では、QRコードは黒画素の集まりと見なすことができるので、ラベルリング処理によって抽出され、ラベルリスト1140に登録される。なお、ラベリング処理部133では、ぼかし画像に存在するQRコード以外の黒画素の集まりを抽出し、ラベルリスト1140に登録する可能性がある。
【0071】
続いて、QRコード候補抽出部134は、ラベルリスト1140の登録ラベルからQRコード候補を抽出し、抽出したQRコード候補をQR候補リスト1150に登録する。ここでは、QRコードの形状の特徴である「正方形」に基づき、QRコード候補抽出部134は偏平率に一定のマージンを設けた範囲内の正方形に近い形状のラベル矩形をQRコード候補とする。このとき、QRコード候補抽出部134はQRコード外部のクワイエットゾーンに発生しているノイズの除去も行う。なお、QRコード候補抽出部134では、ぼかし画像に存在するQRコード以外の黒い正方形をQRコード候補として抽出する可能性がある。
【0072】
以下、ノイズ除去について説明する。
図13は、QRコードの上方向にノイズがある場合のノイズ除去の例を示した図である。
【0073】
(A)ラベリング処理実行後の状態では、QRコード220の上方向に発生しているノイズ310を含めてQRコード候補がラベリングされている。このときのラベル範囲410は、ノイズ310を含む縦長の形状になっている。なお、「ラベル範囲」とは、ラベリングされているQRコード候補の範囲を指す。
【0074】
QRコード候補抽出部134では、ラベル範囲410が縦長であることが検出されたときは、上下方向のノイズ除去処理を行う。ラベル範囲410の画像を上から下に向かって、または下から上に向かって横方向に走査し、ノイズ条件と合致する形状の画像を探索する。QRコード部分の画像であれば、画像内をほぼ黒画素が占めることから、黒画素の幅の狭い部分をノイズと判断することができる。またQRコード候補抽出部134は、上または下から順にラベル範囲410を走査し、QRコード220と見なせる画像が検出されたときに走査を終了する。こうして、ノイズ310の位置を特定し、検出したノイズ310が含まれる領域を、ラベル範囲410から削除する。なお、ノイズの幅や本数は、環境ファイルやパラメタで取り込み画像に応じて設定できるとする。
【0075】
この結果、(B)領域調整後に示したように、ラベルの領域は、ラベル範囲410のノイズ310が除去されたラベル範囲411に調整される。ラベル範囲411が、正方形と見なせる範囲となったら処理を終了する。図13の例では、ここで処理を終了し、ラベル範囲411が、ラベル矩形の画像領域になる。
【0076】
図14は、QRコードの上方向と右方向にノイズがある場合のノイズ除去の例を示した図である。
(A)ラベリング処理実行後の状態では、QRコード230の上方向に発生しているノイズ320と、右方向に発生しているノイズ321とを含めてラベリングされている。このときのラベル範囲420は、ノイズ320,321を含む縦長の形状になっている。
【0077】
QRコード候補抽出部134では、ラベル範囲420が縦長であることを検出し、図13と同様にして上方向のノイズ320の位置を特定する。こうして、(B)上下領域調整後に示したように、ラベルの領域は、ラベル範囲420のノイズ320が除去されたラベル範囲421に調整される。すると、ラベル範囲421は横長になるので、ラベル範囲421の画像を右から左に向かって、または左から右に向かって縦方向に走査し、ノイズ条件と合致する形状を持つ画像を探索する。方向が異なるだけで、走査手順は上下方向のノイズの場合と同様である。こうして、ノイズ321の位置を特定し、検出したノイズ321が含まれる領域を、ラベル範囲421から削除する。
【0078】
この結果、(C)左右領域調整後に示したように、ラベルの領域は、ラベル範囲421のノイズ321が除去されたラベル範囲422に調整される。垂直方向及び水平方向のノイズを検出したので、処理を終了する。
【0079】
なお、ここではラベル範囲が縦長または横長であることを検出してノイズ除去処理を行うとしている。ノイズの状態によっては、ノイズを含んだラベル範囲が正方形になる場合も想定される。すべてのラベル範囲に対してノイズ検査を行えば、このようなケースのノイズも除去できる。しかし、これは特殊なケースであり、そのためにすべてのラベル範囲についてノイズ検査を行うのは、効率的ではない。また、次処理では、より詳細にラベルのチェックを行うので、実施の形態では、縦長または横長をノイズ除去処理の開始条件とする。
【0080】
以上の処理手順が実行され、所定の許容範囲内で正方形と認められたラベル矩形が選択され、QR候補リスト1150に登録される。
次に、QRコード精査判定部135は2値画像を用いて、QR候補リスト1150に登録されるQRコード候補がQRコードであるかどうかを判定する。QRコード精査判定部135は、ぼかし画像のQRコード候補の領域に対応する2値画像を2値画像領域1110から読み出し、2値画像を走査してQRコードのファインダパタンを検出する。ここでは、上記の「3隅の正方形シンボル内に別の正方形がある」という条件により、ファインダパタンを検出する。QRコード以外はファインダパタンが検出できないことから、QRコード候補抽出部134においてQRコード以外の黒い正方形がQRコード候補として抽出されていた場合であっても、QRコード以外の黒い四角形はQRコードと認められない。
【0081】
しかし、画像が低解像度または低品質である場合、2値画像であってもファインダパタンにノイズが混じっていることが考えられる。そこで、QRコード候補の画像から少なくとも1つのファインダパタンが検出できた場合、他のファインダパタンの推定位置にファインダパタンらしきシンボルが検出できれば、QRコード精査判定部135は、この2値画像はQRコードであると判定する。具体例を用いて説明する。
【0082】
図15は、ファインダパタンの画像にノイズが混じっている例を示した図である。
QRコード240には、3隅にファインダパタン241a,241b,241cがある。しかし、画像が低解像度または低品質のため、図15の例ではファインダパタン241aにはノイズ331a、ファインダパタン241bにはノイズ331bが混じっている。このため、ファインダパタン241cは検出されるが、ファインダパタン241a,241bはノイズの影響でファインダパタンと認識されない。そこで、検出されたファインダパタン241cと、QRコード候補抽出部134で検出されたQRコード候補の外縁を示すラベル範囲とに基づいて、残りの2つのファインダパタンの位置を推定する。そして、推定位置に、例えば、ファインダパタンの黒画素の外枠部分あるいは黒の正方形が検出できるかどうかを判定する。黒画素の外枠の外縁は、QRコード候補のラベル範囲とほぼ等しく、かつ、クワイエットゾーンによって周囲から切り離されているので検出しやすい。例えば、図15のファインダパタン241bは、ノイズ331bによってファインダパタンとして検出されないが、黒画素の外枠は検出可能である。また、内側の黒の正方形は、QRコードであれば黒画素の外枠の内側に白画素の枠が存在するので、検出しやすい。例えば、図15のファインダパタン241aは、ノイズ331aによりファインダパタンとして検出されない。また、黒画素の外枠もノイズ331aがQRコード外部にも伸びていることから、検出することができない。しかし、内側の黒の正方形は検出可能である。推定位置から黒画素の外枠部分あるいは黒の正方形を検出できた場合には、このQRコード候補は真のQRコードであると判定する。なお、黒画素の外枠と、内側の黒い正方形の間の白の枠をファインダパタンの判定に用いる検出対象とすることもできる。また、2つのファインダパタンが検出できたときは、その2つのファインダパタンから残りの1つのファインダパタンの位置を推定する。そして、上記と同様に、推定位置から黒画素の外枠部分あるいは黒の正方形を検出できるかどうかで、QRコード候補が真のQRコードか否かを判定する。また、ファインダパタンの推定位置の中心を直線的に横切ったときの黒画素のヒストグラムをファインダパタンのヒストグラムと比較し、黒画素ヒストグラムがファインダパタン固有のヒストグラムとほぼ一致すればファインダパタンと判定するとしてもよい。
【0083】
このように、2値画像からのファインダパタンの検出は、QRコード候補の領域のみで行われるので、画像全体でファインダパタンの検出処理を行う場合に比べ、処理に要する時間を短縮することができる。また、QRコード候補抽出時点でQRコードの範囲が特定できているので、特定されたQRコード候補の領域から少なくとも1つのファインダパタンを検出できれば、その領域内の他のファインダパタンの推定位置を算出し、ファインダパタンと見なせるシンボルの有無を検査できる。これにより、従来QRコードが検出できなかった低解像度・低品質の画像からQRコードを抽出することが可能となる。
【0084】
次に、QRコード抽出方法の処理手順をフローチャートを用いて説明する。
図16は、QRコード抽出処理全体の手順を示したフローチャートである。
元画像領域1100に格納される元画像データを読み出して、処理が開始される。
【0085】
[ステップS11] 2値化処理部131が、用意されている2値化処理のうち、実行していない2値化処理方法が有るかどうかを判定する。「有」のときは、処理をステップS12に進める。「無」のときは、処理をステップS21に進める。
【0086】
[ステップS12] 実行していない2値化処理方法が「有」のときは、指定の2値化処理方法による元画像の2値化を行う。場合によっては、元画像に対するサブピクセル化を行った後、元画像の2値化処理を行ってもよい。2値化処理は、例えば、複数の2値化処理方法に予め優先順位を設定しておき、前に実行した2値化処理方法の次の優先度を持つ2値化方法が指定されるとする。また、利用者に未実行の2値化処理方法を提示し、いずれか1つを指定させるとしてもよい。
【0087】
[ステップS13] ぼかし処理部132が、ステップS12で2値化した2値画像のぼかし処理を行うために、ステップS12で2値化処理された2値画像について、実行していないぼかし処理方法があるかどうかを判定する。「有」のときは、処理をステップS14に進める。「無」のときは、処理をステップS11に戻し、2値化処理方法の指定からの手順を繰り返す。
【0088】
[ステップS14] 2値画像に対して実行していないぼかし処理方法が「有」のときは、指定のぼかし処理方法によるぼかし処理を行う。ぼかし処理方法の指定は、ステップS12の2値化処理方法の指定と同様に行う。
【0089】
[ステップS15] ラベリング処理部133が、ステップS14で生成されたぼかし画像に基づいて、黒画素の割合が所定値以上のグループを検出し、検出したグループに対してラベルを設定する。設定されたラベルは、検出されたラベルの範囲を示す座標や大きさなどが、ラベルに付与されたラベル識別番号に対応付けられ、ラベルリスト1140に登録される。
【0090】
[ステップS16] QRコード候補抽出部134が、ぼかし画像を用いて、ラベルリスト1140に登録されたラベルの形状がQRコードの外縁の形状(正方形)であるかどうかをチェックし、QRコード候補を抽出する。なお、このとき、ぼかし画像のノイズチェックを行い、ラベルの外側に向かって延びるノイズが検出されるときは、このノイズを除去してラベル範囲を補正して、形状チェックを行う。詳細は後述する。
【0091】
[ステップS17] ステップS16においてQRコード候補が検出されたか否かを判定する。QRコード候補が検出されたときは、処理をステップS18に進める。QRコード候補が検出されなかったときは、処理をステップS13に戻し、ぼかし処理方法の指定からの処理手順を繰り返す。ぼかし処理方法が異なれば、生成されるラベルも異なるので、2値画像に対して複数のぼかし処理方法を順番に実行し、QRコード候補が検出できるぼかし処理方法を選ぶ。
【0092】
[ステップS18] QRコード候補が検出されたときは、QRコード精査判定部135が、QRコード候補が真のQRコードであるかどうかを詳細にチェックする。QRコード精査判定部135は、ステップS16で特定されたQRコード候補のラベル範囲に相当する2値画像を読み出し、2値画像からファインダパタンを検出する。2値画像からファインダパタンが検出できれば、QRコード精査判定部135は2値画像を真のQRコードと判定する。詳細は後述する。
【0093】
[ステップS19] ステップS18の処理で、真のQRコードが検出できたかどうかを判定する。真のQRコードが検出できたときは、処理をステップS20に進める。真のQRコードが検出できなかったときは、処理をステップS13に戻し、ぼかし処理方法の指定からの処理手順を繰り返す。
【0094】
[ステップS20] 真のQRコードが検出できたときは、QRコードの抽出成功と判断し、QRコード抽出の処理を終了する。
[ステップS21] 真のQRコードが検出できず、かつ、実行していない2値化処理が存在しないときは、QRコードの抽出失敗と判断し、処理を終了する。
【0095】
次に、QRコード候補の抽出処理について説明する。図17は、QRコード候補の抽出処理の手順を示したフローチャートである。
ラベルリスト1140に黒画素の集まりが登録された後、1つのラベルが選択され、処理が開始される。
【0096】
[ステップS161] ラベルリスト1140から対象ラベルの矩形長さを読み出し、ラベル範囲の幅(W)と高さ(H)の比率が正方形からどの程度ずれているかを、偏平率として算出する。そして、算出された偏平率が予め決めた所定の閾値範囲内であるかどうかを判定する。ここでの閾値は、QRコードの外側にゴミ(ノイズなどによるQRコードの外側にはみ出た部分)があった場合を想定して設定される。すなわち、明らかにQRコードの形状ではないというラベルを検査対象から取り除くための閾値が設定される。偏平率が閾値範囲内であれば、処理をステップS162に進める。偏平率が閾値範囲内を超えていれば、処理をステップS174に進める。
【0097】
[ステップS162] ラベル範囲の偏平率が閾値範囲内であるときは、さらに、偏平率が予め決められた正方形範囲内であるかどうかを判定する。ここでは、ほぼ正方形の矩形とそれ以外の矩形とを区別するための閾値が設定される。偏平率が正方形範囲内でなければ、処理をステップS163に進める。偏平率が正方形範囲内であれば、処理をステップS173に進める。
【0098】
[ステップS163] 正方形範囲内にはないと判定されたラベル範囲が縦長であるかどうか、すなわち、ラベル範囲の幅よりも高さのほうが大きいかどうかを判定する。ラベル範囲が縦長であるときは、処理をステップS164に進める。ラベル範囲が縦長でないとき、すなわち横長のときは処理をステップS168に進める。
【0099】
[ステップS164] ラベル範囲が縦長のときは、縦方向のノイズチェック処理を行い、縦方向のノイズを除去する。処理の詳細は後述する。
[ステップS165] 縦方向のノイズチェック処理後のラベル範囲の偏平率を算出し、偏平率が正方形範囲内になったかどうかを判定する。ラベル範囲の偏平率が正方形範囲内でなければ、処理をステップS166に進める。ラベル範囲の偏平率が正方形範囲内であれば処理をステップS173に進める。
【0100】
[ステップS166] 縦方向のノイズが除去されたラベル範囲の偏平率が正方形範囲内でなければ、ノイズ除去後のラベル範囲が横長であるかどうかを判定する。ラベル範囲が横長であれば、処理をステップS167に進める。横長でなければ、処理をステップS174に進める。
【0101】
[ステップS167] ラベル範囲の偏平率が横長であるときは、横方向のノイズチェックを行い、横方向のノイズを除去する。処理の詳細は後述する。これにより、縦方向に加え、横方向のノイズを除去する。ノイズチェック終了後、処理をステップS172に進める。
【0102】
[ステップS168] ステップS163の判断の結果、ラベル範囲が横長のときは、横方向のノイズチェック処理を行い、横方向のノイズを除去する。
[ステップS169] 横方向のノイズチェック処理後のラベル範囲の偏平率を算出し、偏平率が正方形範囲内になったかどうかを判定する。ラベル範囲の偏平率が正方形範囲内でなければ、処理をステップS170に進める。ラベル範囲の偏平率が正方形範囲内であれば処理をステップS173に進める。
【0103】
[ステップS170] ノイズ除去後のラベル範囲の偏平率が正方形範囲内でなければ、ラベル範囲が縦長であるかどうかを判定する。ラベル範囲が縦長であれば、処理をステップS171に進める。縦長でなければ、処理をステップS174に進める。
【0104】
[ステップS171] ラベル範囲の偏平率が縦長であるときは、縦方向のノイズチェックを行い、縦方向のノイズを除去する。これにより、横方向に加え、縦方向のノイズを除去する。
【0105】
[ステップS172] 縦横方向のノイズチェック処理後のラベル範囲の偏平率を算出し、偏平率が正方形範囲内になったかどうかを判定する。ラベル範囲の偏平率が正方形範囲内であれば、処理をステップS173に進める。ラベル範囲の偏平率が正方形範囲内でなければ処理をステップS174に進める。
【0106】
[ステップS173] ラベル範囲の偏平率が正方形範囲内であるときは、このラベルをQRコード候補とし、QR候補リスト1150に登録する。その後、処理を終了する。
[ステップS174] ラベル範囲の偏平率が正方形範囲内にならないときは、このラベルをQRコード候補から除外し、処理を終了する。
【0107】
こうして、1つのラベルについて処理が終了したときは、ラベルリスト1140に登録されている次のラベルについて上記処理手順を実行する。ラベルリスト1140に登録されているすべてのラベルについて処理が終了したとき、QRコード候補の抽出処理を終了する。
【0108】
次に、縦方向のノイズチェック処理について説明する。図18は、縦方向のノイズチェック処理の手順を示したフローチャートである。
ラベル範囲が縦長であることが検出され、処理が開始される。
【0109】
[ステップS1641] ラベル範囲の画像を、ラベル範囲の上限から下方向に向かって横方向に走査し、横方向に走査された1ライン中で連続して検出された黒画素の数と、その黒画素の集まりの本数をカウントする。
【0110】
[ステップS1642] ステップS1641でカウントした黒画素がノイズ条件を満たすかどうか判定する。例えば、1ライン中に連続して検出された黒画素の数(ゴミの幅になる)の最大値と、黒画素の集まりの本数(ゴミの本数になる)の最大値とを決めておき、カウントされた黒画素数あるいは本数がその範囲内であるかどうかで、ノイズ条件を判定する。例えば、カウントされた黒画素数が最大値を超える場合には、その黒画素はゴミではないと判定する。これにより、幅の狭いひげ状のゴミを検出することができる。なお、ノイズ条件は、取り込み画像に応じて適宜設定される。カウントされた黒画素がノイズ条件を満たしているときは、処理をステップS1643に進める。黒画素がノイズ条件を満たしていないときは、処理をステップS1644に進める。
【0111】
[ステップS1643] 走査された1つの横ラインでカウントされた黒画素がノイズ条件を満たしているときは、次のラインを横方向に走査し、ステップS1642に戻って次のラインにゴミが検出されるかどうか判定する。
【0112】
[ステップS1644] 走査された横ラインでカウントされた黒画素がノイズ条件を満たしていないときは、ゴミの領域は終了したと判断する。そして、ラベル上限、つまりQRコード候補の上端を、この横ラインの位置に更新する。
【0113】
[ステップS1645] ラベル範囲の画像を、ラベル範囲の下限から上方向に向かって1ラインごとに横方向に走査し、横方向に走査された1ラインで連続して検出された黒画素の数と、その黒画素の集まりの本数をカウントする。
【0114】
[ステップS1646] ステップS1645でカウントした1ライン中の黒画素がノイズ条件を満たすかどうか判定する。条件は、ステップS1642と同様にする。1ライン中の黒画素がノイズ条件を満たしていないときは、処理をステップS1648に進める。ノイズ条件を満たしているときは、処理をステップS1647に進める。
【0115】
[ステップS1647] 1ライン中でカウントされた黒画素がノイズ条件を満たしているときは、次のラインを横方向に走査し、ステップS1646に戻って次のラインにゴミが検出されるかどうか判定する。
【0116】
[ステップS1648] カウントされた1ライン中の黒画素がノイズ条件を満たしていないときは、ゴミの領域は終了したと判断する。そして、ラベル下限を、このラインの位置に更新し、処理を終了する。
【0117】
なお、ラベル範囲下限から先にノイズチェックするとしてもよい。
次に、ラベル範囲の横方向のノイズチェック処理について説明する。図19は、横方向のノイズチェック処理の手順を示したフローチャートである。
【0118】
ラベル範囲が横長であることが検出され、処理が開始される。
[ステップS1701] ラベル範囲の画像を、ラベル範囲の左限から右方向に向かって1ラインずつ縦方向に走査し、1ライン中で連続して検出された黒画素の数と、その黒画素の集まりの本数をカウントする。
【0119】
[ステップS1702] ステップS1701でカウントした1ライン中の黒画素がノイズ条件を満たすかどうか判定する。ノイズ条件は、縦長のノイズチェックと同様にする。判定対象の1ラインがノイズ条件を満たしているときは、処理をステップS1703に進める。ノイズ条件を満たしていないときは、処理をステップS1704に進める。
【0120】
[ステップS1703] カウントされた1ライン中の黒画素がノイズ条件を満たしているときは、次のラインを縦方向に走査し、ステップS1702に戻って次のラインにゴミが検出されるかどうか判定する。
【0121】
[ステップS1704] カウントされた1ライン中の黒画素がノイズ条件を満たしていないときは、ゴミの領域は終了したと判断する。そして、ラベル左限を、この縦ラインの位置に更新する。
【0122】
[ステップS1705] ラベル範囲の画像を、ラベル範囲の右限から左に向かって1ラインずつ縦方向に走査し、1ライン中で連続して検出された黒画素の数と、その黒画素の集まりの本数をカウントする。
【0123】
[ステップS1706] ステップS1705でカウントした1ライン中の黒画素がノイズ条件を満たすかどうか判定する。条件は、ステップS1702と同様にする。ノイズ条件を満たしていないときは、処理をステップS1708に進める。ノイズ条件を満たしているときは、処理をステップS1707に進める。
【0124】
[ステップS1707] カウントされた1ライン中の黒画素がノイズ条件を満たしているときは、次のラインを縦方向に走査し、ステップS1706に戻って次のラインにゴミが検出されるかどうか判定する。
【0125】
[ステップS1708] カウントされた1ライン中の黒画素がノイズ条件を満たしていないときは、ゴミの領域は終了したと判断する。そして、ラベル右限を、この縦ラインの位置に更新し、処理を終了する。
【0126】
なお、右限から先にチェックするとしてもよい。
次に、QRコード候補の精査処理について説明する。図20は、QRコード候補の精査処理の詳細を示したフローチャートである。
【0127】
QR候補リスト1150にQRコード候補が登録された後、1つのQRコード候補が選択され、処理が開始される。
[ステップS1801] 2値画像から選択されたQRコード候補の領域の画像を読み出し、ファインダパタンを抽出する。ファインダパタンは、例えば、「QRコード候補領域の3隅の正方形シンボル内に別の正方形がある」という条件で抽出する。
【0128】
[ステップS1802] ステップS1801によるファインダパタン抽出によって、3つのファインダパタンすべてが抽出されたかどうかを判定する。抽出できた抽出パタンが3つであれば、抽出完了として処理をステップS1811に進める。抽出パタンが3つでなければ、処理をステップS1803に進める。
【0129】
[ステップS1803] 抽出パタンが3つでないときは、抽出パタンが2つであるかどうかを判定する。2つであれば処理をステップS1804に進める。抽出パタンが2つでなければ、処理をステップS1805に進める。
【0130】
[ステップS1804] 抽出パタンが2つのときは、抽出された2つのファインダパタンの位置から、残りの1つのファインダパタンの位置を推定し、処理をステップS1807に進める。
【0131】
[ステップS1805] 抽出パタンが2つでないときは、抽出パタンが1つであるかどうかを判定する。1つ抽出されれば処理をステップS1806に進める。1つもパタンが抽出されないときは、抽出不可として処理をステップS1810に進める。
【0132】
[ステップS1806] 抽出パタンが1つのときは、抽出されたファインダパタンの位置と、QRコード候補のラベル範囲とに基づいて、残り2つのパタンの位置を推定する。
【0133】
[ステップS1807] ファインダパタンの推定位置に、黒画素の外枠があるかどうかを判定する。黒画素の外枠は、ファインダパタンの内側の白画素と黒画素の正方形を囲む枠状の形状をいう。黒画素の外枠があれば、ファインダパタンと推定し、処理をステップS1811に進める。黒画素の外枠がないときは、処理をステップS1808に進める。
【0134】
[ステップS1808] ファインダパタンの推定位置に黒画素の外枠がないときは、推定位置の内側に黒画素の正方形領域があるかどうかを判定する。推定位置の内側に黒画素の正方形領域があれば、ファインダパタンと推定し、処理をステップS1811に進める。黒画素の正方形領域がないときは、処理をステップS1809に進める。
【0135】
[ステップS1809] ファインダパタンの推定位置の内側に黒画素の正方形領域がないときは、ファインダパタンの推定位置の中央付近を横切る画素のヒストグラムを求める。ついで、ヒストグラムがファインダパタンの画素構成と一致するか否かを判定する。ヒストグラムがファインダパタンの画素構成と一致するときは、推定位置の画像をファインダパタンと推定し、処理をステップS1811に進める。ヒストグラムがファインドパタンの画素構成と一致しないときは、処理をステップS1810に進める。
【0136】
[ステップS1810] ファインダパタンが1つも検出されないとき、または検出された1または2のファインダパタンから推定される推定位置にファインダパタンの形状の特徴が検出できなかったときは、2値画像はQRコードでないと判定する。そのため、その2値画像をQRコードから除外し、処理を終了する。
【0137】
[ステップS1811] ファインダパタンがすべて検出されたとき、または検出された1または2のファインダパタンから推定される推定位置にファインダパタンの形状の特徴が少なくとも1つ検出できたときは、2値画像がQRコードであると判定する。そして、判定された2値画像をQRリスト1160に登録し、処理を終了する。
【0138】
こうして、1つのQRコード候補について処理が終了したときは、QR候補リスト1150に登録される次のQRコード候補について上記処理手順を実行する。QR候補リスト1150に登録されるすべてのQRコード候補について処理が終了したとき、QRコード候補の精査処理を終了する。
【0139】
以上の処理手順を実行することによって、ぼかし画像を生成して全体として正方形になっているQRコード候補を見つけてから、それが確かにQRコードであることを検証する。また、QRコードの検証時には、QRコード候補として検出したQRコード範囲を利用して、検出できなかったファインダパタンの位置を推定し、QRコード候補ファインダパタンと見なせる特徴を有するシンボルがQRコード候補から検出できれば、QRコード候補をQRコードとする。
【0140】
これにより、低解像度でもQRコードの抽出が可能となるばかりでなく、安価なイメージ取り込み装置の画質の良くない画像でも十分にQRコード抽出が可能となる。
(2)QRコード認識処理
QRコード認識部140は、QRコード抽出部130が生成したQRリスト1160に基づき、QRコードに対応する元画像データを元画像領域1100から読み出し、2値化処理部141で2値画像を生成する。続いて、パタン検出部142が、2値画像からファインダパタン、タイミングパタン及び位置合わせパタンを検出する。検出したパタンの位置座標は、パタンリスト1170に登録する。続いて、検出されたパタンに基づいて、QRコードの傾きと、各モジュールの幅と高さを算出し、傾き・幅・高さリスト1180に登録する。
【0141】
ここで、モジュールの幅と高さの算出方法について説明する。図21は、モジュールの幅と高さをファインダパタンとタイミングパタンとから求める方法を説明する図である。
図21に示したように、QRコードには、ファインダパタン21a,21b,21cと、タイミングパタン22a,22bと、が配置されている。タイミングパタン22a,22bは、白モジュールと黒モジュールが1モジュールずつ交互に並ぶ。また、ファインダパタン21a,21b,21cは、上端から順に、高さ1の黒モジュール、高さ1の白モジュール、高さ3の黒モジュール、高さ1の白モジュール、高さ1の黒モジュールである。
【0142】
ここで、QRコードの領域を、図21のように領域A251、領域B252、領域C253、領域D254、領域E255及び領域F256に分ける。
領域A251は、水平方向にタイミングパタン22aが、垂直方向にファインダパタン21a,21bがある。領域A251の図示水平方向の各モジュールの幅は、水平方向のタイミングパタン22aの各モジュールの幅と同じと推定する。領域A251の上下方向の高さは、ファインダパタン21a,21bと同じく7モジュールである。そこで、領域A251の上端2モジュールの各モジュール高さは、ファインダパタン21bの上端の黒モジュールと白モジュールとの高さから推定する。同様に、領域A251の下端2モジュールの各モジュールの高さは、ファインダパタン21bの下端の黒モジュールと白モジュールとの高さから推定する。また、領域A251の中央3モジュールの各モジュール高さは、ファインダパタン21bの中央の黒モジュールの高さを3等分した値と同じと推定する。
【0143】
領域B252は、水平方向にファインダパタン21b,21cが、垂直方向にタイミングパタン22bがある。領域B252の左右端各2モジュール、計4モジュールの幅は、ファインダパタン21bの外側の黒枠を構成する黒モジュールと白枠を構成する白モジュールとの幅から推定し、領域B252の中央3モジュールの幅は、ファインダパタン21bの中央の黒モジュールの幅を3等分した値と同じと推定する。領域B252の高さ方向の各モジュールは、垂直方向のタイミングパタン22bの各モジュールの高さと同じと推定する。
【0144】
領域C253は、水平方向にタイミングパタン22aが、垂直方向にタイミングパタン22bがある。領域C253の水平方向の各モジュールの幅は、水平方向のタイミングパタン22aの各モジュールの幅と同じと推定する。また、領域C253の垂直方向の各モジュールの高さは、垂直方向のタイミングパタン22bの各モジュールの高さと同じと推定する。
【0145】
領域D254は、水平方向にファインダパタン21a、垂直方向にタイミングパタン22bがある。領域D254の左右端各2モジュールの幅は、ファインダパタン21aの外枠の黒モジュールと白枠の白モジュールとの幅から推定し、領域D254の中央3モジュール分の各モジュール幅は、ファインダパタン21aの中央の黒モジュールの幅を3等分した値と同じと推定する。領域D254の高さ方向の各モジュール高さは、垂直方向のタイミングパタン22bの各モジュールの高さと同じと推定する。
【0146】
領域E255は、水平方向にタイミングパタン22a、垂直方向にファインダパタン21cがある。領域E255の水平方向の各モジュールの幅は、水平方向のタイミングパタン22aの各モジュールの幅と同じと推定する。領域E255の上下端各2モジュール分の各モジュール高さは、ファインダパタン21cの高さ、中央3モジュールの高さは、ファインダパタン21cの中央の黒モジュールの高さを3等分した値と同じと推定する。
【0147】
領域F256は、水平方向にファインダパタン21a、垂直方向にファインダパタン21cがある。領域F256の左右端4モジュールの幅は、ファインダパタン21aの中央の黒モジュールの幅を3等分した値と同じと推定する。領域F256の上下端4モジュールの高さは、ファインダパタン21cの高さ、中央3モジュールの高さは、ファインダパタン21cの中央の黒モジュールの高さを3等分した値と同じと推定する。
【0148】
このように、ファインダパタンとタイミングパタンとにより、QRコードのすべての領域について、モジュールの幅と高さを推定することができる。
こうして傾き・幅・高さリスト1180が登録されると、モジュール割当部144は、各モジュールを2値画像に割り当てる割当処理を行う。
【0149】
図22は、水平方向のモジュール割当処理を示した図である。(A)はモジュール割当対象のQRコード、(B)はQRコード読み取りの結果得られたQRコード画像、(C)はモジュール割当の一例を示している。なお、説明を簡単にするため、図22では、高さ1モジュール分の画素群を示している。また、読み取られた画像の垂直方向に歪みは発生していないとしている。
【0150】
(A)の対象QRコード2000は、読み取り対象のQRコードが歪みなく読み取れた場合の理想的な2値画像を示している。対象QRコード2000は、それぞれ3×3画素のモジュールM1,M2,M3,M4,M5,M6が一列に並んでいる。図では、白画素は内部が白で示され、黒画素は内部が黒で塗りつぶしてある。すなわち、M1は白、M2は黒、M3は白、M4は黒、M5は白、M6は黒と、図22(A)のQRコードでは白モジュールと黒モジュールとが交互に並ぶ。
【0151】
(B)のQRコード画像2100は、撮像装置でQRコードを撮像して得られた、水平方向の歪みを含む画像を2値化した2値画像である。また、タイミングパタン2110は、QRコード読み取り時に同時に得られたタイミングパタンである。1モジュールを3×3画素と仮定したときには、読み取られた画像は水平方向に3画素単位で分割されるため、各分割領域は(B)に示すようにそれぞれm1,m2,m3,m4,m5,m6になる。しかし、実際の読み取り画像には、水平方向に歪みが生じているため、例えば、単純に、m1から順に3×3画素で領域を区切って判断を行うとすると、m1,m2,m3,・・と進むに従って、(A)に示したM1,M2,M3・・・とのずれが大きくなる。例えば、(A)では領域M3は白画素のみで構成されるが、(B)に示すm3では、水平方向の歪みに起因して黒画素の割合が多くなる。このため、図22(B)の画像のモジュール判定を3画素単位で行った場合、モジュール本来の画素構成と、読み取り画像から得られたモジュールの画素構成とが異なってしまい、QRコードを正しくデコードすることができなくなる。
【0152】
従来の処理では、モジュールが正方形の画像となるように読み取り画像の補正が行われていた。しかし、QRコードのデコードに必要なのは、要素が0/1(白/黒)で構成される正方行列であり、必ずしも正方形の画像が必要ではない。そこで、本実施形態では、歪んだ画像の補正は行わず、モジュールの形を変えながら、QRコード画像2100にモジュールを割り当てていく。
【0153】
モジュール割当について説明する。(C)のモジュール割当2200は、(B)のQRコード画像2100に、モジュール割当部144によるモジュール割当を行った場合の一例を示している。太線が割り当てられたモジュールの範囲を示している。
【0154】
ここで、図22(B)に示した画像のモジュール判定は、図21に関連して述べたように、読み取られたタイミングパタン2110を基準として行なう。図22(B)においては、タイミングパタン2110は白3画素、黒2画素、白2画素、黒3画素、白4画素、黒4画素の各モジュールを持つものとして読み取られている。そこで、本実施形態では、図22(B)の読み取り画像を、タイミングパタンのモジュール構成に基づいて分割する。その結果、図22(C)に示すように、白3画素幅のモジュールm11、黒2画素幅のモジュールm12、白2画素幅のモジュールm13、黒3画素幅のモジュールm14、白4画素幅のモジュールm15、黒4画素幅のモジュールm16が得られる。
【0155】
なお、図22(B)に示す画像の高さについても、例えばタイミングパタンなどを用いて1モジュールを構成する画素数が推測・決定される。例えば、傾き・幅・高さリスト1180に、m11が幅3、高さ3と設定されていたとする。モジュール割当部144は、3×3画素の集合の形状をQRコード画像2100に合わせて変形し、QRコード画像2100に割り当てる。ここで、1つのモジュールは本来であれば同じ色の画素が矩形に配置されたものである。そこで、モジュールの変形処理を行なう場合には、同一色の画素が含まれた領域が1つのモジュールを構成しているものと推定する。図22(B)のm1では、3×3画素の矩形を抽出すると、矩形内には星型で示した8つの白画素と、黒四角で示した1つの黒画素とが含まれたものとして、モジュールが認識される。しかし、図22(C)の例では、星型で示した3×3の画素集合の上端3画素を1画素分図示左側にずらしたm11が割り当てられている。これによって、m11を構成する画素は全て星型で示した白画素のみとなる。m11の右隣のモジュールには、幅2、高さ3の画像集合を、m11と同様に変形したm12を割り当てる。この処理によって、m12は計6つの黒画素のみから構成されたモジュールと認識される。m13、m14、m15及びm16も、傾き・幅・高さリスト1180に登録された幅・高さの画素集合を変形させ、QRコード画像2100に割り当てる。以上の処理により、図22(C)に示すように、同じ色の画素で構成されたモジュールを抽出することができる。また、このような処理によって、各モジュールを、必ずしも同じ画素数で構成される正方領域として扱う必要がなくなる。
【0156】
モジュールの割当処理は、2値画像を2値画像領域(複写)1130に格納しながら行う。また、QRコード画像の傾きがr°と算出されていたときは、r°に応じた画素のずれを算出し、モジュールの変形に反映する。例えば、r°が幅10画素に対し高さが1画素分上昇するような場合、このような比率でモジュールを変形させる。そして、所定の範囲のモジュール割当を行った後、元の2値画像1110とのずれを計測する。そして、2値画像1110とのずれが所定の値より大きいときは、モジュールの変形を調整して再度割当を行う。2値画像1110とのずれが所定の範囲内に納まるまで、モジュールの変形の調整と割当を繰り返す。
【0157】
図23は、モジュールの変形例を示した図である。
(A)は、元のモジュールで、3×3画素が整列する配置である。(B)は、モジュール変形例1で、元のモジュールから上端の画素を左に1ずつずらした領域を1つのモジュールと見なしている。(C)は、モジュール変形例2で、元のモジュールから下端の画素を左に1ずつずらした領域を1つのモジュールと見なしている。(D)は、モジュール変形例3で、元のモジュールから中央の画素を左に1ずつずらした領域を1つのモジュールと見なしている。(E)は、モジュール変形例4で、元のモジュールから左端の画素を下に1ずつずらした領域を1つのモジュールと見なしている。
【0158】
この他、画像に合わせてさまざまな変形を行うことができる。
図24は、モジュールを組み合わせた一例である。
m11からm16は、図22のモジュール割当2200と同じである。m21からm26の列は、モジュール幅がそれぞれm11からm16と同じで、モジュール高さが2である。m21からm26の列では、水平方向の歪みは生じていないものとする。m31からm36の列は、タイミングモジュールに基づいてモジュール幅がそれぞれm11からm16と同じ画素数と見なせる。また、モジュールの高さは、3画素になる。しかし、m31については、モジュール幅をm11と同じく3画素とすると、三角形で示した白の画素に、四角形で示した黒の画素が含まれてしまう。前述のように、モジュールの変形処理を行なう場合には、同一色の画素が含まれた領域が1つのモジュールを構成しているものと推定し、m31のモジュール幅を2画素とする。m32からm26については、m12からm16と同じモジュール幅としてモジュールの変形処理を行う。図24のモジュール変形処理では、m31からm36の列は、上端の2画素を左に1ずつずらした領域を1つのモジュールと見なしている。
【0159】
このように、いろいろな形のモジュールを順番に画像に当てはめていき、全体の画像とのずれが少なくなるように埋めていくという操作を繰り返すことにより、必ずしも均一ではない歪みに柔軟に追従できる。
【0160】
また、モジュール割当処理は、QRコードの隅から始めるとしてもよいし、QRコードに位置合わせパタンが存在するならば、その位置合わせパタンから開始するとしてもよい。また、QRコードに4つ以上の位置合わせパタンが存在するならば、各位置合わせパタンを起点として、それらの位置合わせパタンが囲む領域の中心に向かってモジュール割当処理を行うとしてもよい。
【0161】
モジュール割当処理が終了すると、デコード処理部145がモジュール割当に基づいてデコード処理を行う。このとき、RSブロック単位に誤り訂正が行われる。このRSブロック単位の誤り訂正の成否をRSブロックリスト1190に登録する。誤り判定部146は、RSブロックリスト1190に基づき、誤り訂正ができなかったRSブロックが存在し、かつその数が所定の閾値以下の場合に、このRSブロックに含まれる領域について、モジュールの再割当を行う。
【0162】
図25は、RSブロックの構成例を示した図である。
RSブロックは、QRコード領域3000の予め決められたモジュールにより構成される。図の例では、D11,D12,E11,E12,E13,E14から1つのRSブロックが形成される。RSブロックは、読み取られたQRコードの誤り訂正に用いられる。RSブロックによる誤り訂正ができなかったときは、このRSブロックに属するモジュールの割当処理をやり直し、割当処理をやり直したQRコードをデコードする。
【0163】
次に、QRコード認識方法の処理手順を、フローチャートを用いて説明する。
図26は、QRコード認識処理全体の手順を示したフローチャートである。
QRリスト1160にQRコードが登録された後、1つのQRコードが選択され、処理が開始される。
【0164】
[ステップS51] QRコード認識部140に用意されていて未実行の2値化画像処理方法があるかどうかを判定する。「有」のときは、処理をステップS52に進める。「無」のときは、処理をステップS59に進める。
【0165】
[ステップS52] 2値化処理部141は、未実行の画像処理方法のうち、指定の画像処理方法(2値化処理方法)を選択し、読み出したQRコード領域の元画像データに対する2値化処理を実行して2値画像を生成する。実行する画像処理方法は、予め決められた優先度に従って選択されるとしてもよいし、利用者が実行する処理を指定するとしてもよい。
【0166】
[ステップS53] パタン検出部142は、ステップS52で生成された2値画像から、ファインダパタン、タイミングパタン、位置合わせパタンを検出する。また、サイズ算出部143は、QRコードの画像全体の傾きと、QRコードを構成する各モジュールの幅と高さを算出し、傾き・幅・高さリスト1180に登録する。
【0167】
[ステップS54] モジュール割当部144は、傾き・幅・高さリスト1180に基づいて各モジュールの幅と高さを決定し、画像の傾きや元画像に応じてモジュールを変形し、画像に割り当てる割当処理を行う。処理の詳細は後述する。
【0168】
[ステップS55] デコード処理部145は、画像に割り当てられたモジュールに基づいて、QRコードのデコード処理を行う。このとき、RSブロック単位に実行される誤り訂正により検出された誤り訂正の成否をRSブロックリスト1190に登録する。
【0169】
[ステップS56] 誤り判定部146は、RSブロックリスト1190を確認し、誤り訂正ができなかったRSブロックがあるかどうかを判定する。誤り訂正ができなかったRSブロックがあるときは、処理をステップS57に進める。誤り訂正ができなかったRSブロックがないときは、処理をステップS58に進める。
【0170】
[ステップS57] 誤り訂正ができなかったRSブロックがあるときは、RSブロックリスト1190に基づき、誤り訂正ができなかったRSブロックの数が、予め決められた閾値以下であるどうかを判定する。誤り訂正ができなかったRSブロックの数が、予め決められた閾値以下であるときは、ステップS54に戻り、RSブロックに属するモジュールについて、モジュールの再割当を行う。なお、リトライ回数を設定しておき、何度かリトライを行ってもエラーが発生するときは、再割当を中止し、ステップS51に戻って未実行の2値化処理方法の選択からの処理を行うとしてもよい。誤り訂正ができなかったRSブロックの数が、予め決められた閾値より多いときは、ステップS51に戻って、未実行の2値化処理方法の選択からの処理を行う。
【0171】
[ステップS58] 誤り訂正ができなかったRSブロックが存在しないときは、デコード成功として処理を終了する。
[ステップS59] 誤り訂正ができなかったRSブロックが存在し、かつ、未実行の2値化処理がないときは、デコード失敗として処理を終了する。
【0172】
こうして、1つのQRコードについて処理が終了したときは、QRリスト1160に登録される次のQRコードについて上記処理手順を実行する。QRリスト1160に登録されるすべてのQRコードについて処理が終了したとき、QRコードの認識処理を終了する。
【0173】
次に、モジュール割当処理について詳細に説明する。図27は、モジュール割当処理の手順を示したフローチャートである。
[ステップS541] サイズ算出部143は、ファインダパタン及びタイミングパタンを用いて画像の傾きと、各モジュールの幅及び高さ(縦横画素数)と、を推定する。推定した幅・高さは、傾き・幅・高さリスト1180に登録する。
【0174】
[ステップS542] モジュール割当部144は、傾き・幅・高さリスト1180に基づき、推定縦横画素数のモジュールを生成し、傾きや割り当て対象の画像に応じて生成したモジュールを変形する。そして、この変形モジュールを元の2値画像に割り当てる。変形モジュールの割当は、所定の範囲を単位として実行する。例えば、モジュール1列、4つの位置合わせパタンに囲まれる領域、画像領域全体といった単位で実行する。
【0175】
[ステップS543] 所定の範囲のモジュール割当が終了したら、割り当てた変形モジュールと元画像とのずれを計測する。ずれの計測は例えば、変形モジュールに割り当てられなかった画素数などを指標とする。
【0176】
[ステップS544] ステップS543で計測されたずれの大きさが予め決められた閾値を超えているかどうかを判定する。超えているときは、処理をステップS545に進める。超えていないときは、処理をステップS546に進める。
【0177】
[ステップS545] ずれの大きさが閾値を超えているときは、モジュールの変形を調整し、ステップS542に戻ってモジュールの再割り当てを行う。
[ステップS546] モジュール割当を行っていない割当未領域が2値画像にあるかどうかを判定する。モジュールの割当未領域が2値画像にあれば、ステップS542に戻って、割当未領域のモジュール割当を行う。2値画像にモジュール割当未領域がなければ、処理を終了する。
【0178】
なお、上記処理手順では、すべてのモジュールの縦横画素数を先に算出しておくとしたが、モジュール割当を行う所定の範囲ごと、または、各モジュールの当てはめ実行前にモジュールごとに算出するとしてもよい。
【0179】
以上の処理手順が実行されることにより、歪んだ画像には手を加えず、モジュールをピースに見立てたパズルを完成させるかのように、モジュールの形を変えながら画像に当てはめ、モジュールの位置及び範囲を確定する。これにより、均一でない微小な歪みは、変形したモジュールによって吸収することができる。したがって、モジュールを構成する画素数が少ないQRコードであっても歪みに起因する画素のずれを抑えることができ、正しくデコードすることが可能となる。また、位置合わせパタンを用いて位置合わせパタンやファインダパタンに囲まれる最少の四角形領域を補正の対象とすることにより、歪みの累積による大幅なずれを防ぐことができる。
【0180】
このように、QRコード認識部140によれば、低解像度でもデコードが可能となるばかりでなく、安価なイメージ取り込み装置の画質の良くない画像でも十分にデコードが可能となる。
【0181】
以上のように、QRコード読取装置100によるQRコードの抽出方法及び認識方法によれば、低解像度あるいは低品質の画像でもQRコードを抽出して認識することが可能となる。低解像度でもQRコードの読み取りができるため、取り込む画像サイズを小さくすることができるようになり、省資源化が図れる。また、安価なイメージ取り込み装置の画質の良くない画像でも読み取り可能となるため、低コスト化が可能である。さらに、携帯電話のカメラで撮影するような場合でも、カメラをきちんと固定しなくてもよいなど、利便性も向上する。また、搬送型スキャナであれば、電子的ノイズや搬送ローラーなどの物理的な汚れや、コピーなどの汚れによる読取精度への影響が少ないという利点もある。
【0182】
なお、上記には、QRコードの読み取りを行う場合について説明したが、本発明はこれに限定されない。2次元コードの位置検出用シンボル及びデータ読取用のシンボルに着目して本発明を適用すれば、QRコード同様に低解像度・低品質の画像から2次元コードを読み取ることが可能となる。
【0183】
上記の処理機能は、コンピュータによって実現することができる。その場合、2次元コード読取装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【0184】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD(Digital Versatile Disc)、CD−ROM(Compact Disc Read Only Memory)などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0185】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【0186】
以上の実施の形態に関し、さらに以下の付記を開示する。
(付記1) 入力画像データから2次元コード画像を抽出し、歪みを補正して2次元コードの認識処理を行う2次元コード読取方法において、
コンピュータが、
撮像装置によって撮像された画像データを2値化して2値画像を生成し、前記2値画像を前記画像データ記憶手段に格納し、
前記2値画像に対してぼかし処理を施し、
前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を2次元コード候補として検出し、
前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出して、2次元コードの特徴を示す情報と照合し、
前記2次元コードの特徴を満たすと判定された前記2次元コード候補が検出されたときは、前記2次元コード候補を2次元コードと特定し、
前記2次元コードの2値画像として、前記2次元コードとして特定された前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出し、
前記画像データ記憶手段から読み出した前記2次元コードの2値画像から、前記2次元コードの基準画像パタンを検出し、
検出された前記基準画像パタンを用いて、前記2次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、
前記2次元コードの2値画像の画素配列に合わせて前記仮モジュールを前記2次元コードの2値画像に割り当て、
割り当てられたモジュールに基づき前記2次元コードのデコードを行う、
ことを特徴とする2次元コード読取方法。
【0187】
(付記2) 前記画像データの2値化及び2値画像に対するぼかし処理を行う際、
複数の2値化処理手順及びぼかし処理手順から一の2値化処理手順及び一のぼかし処理手順を選択して実行し、
得られたぼかし画像から前記2次元コードが抽出できなかったときは、未実行の2値化処理手順または未実行のぼかし処理手順を選択して再度実行し、
前記2次元コード画像が抽出されるか、または、未実行の前記2値化処理手順及びぼかし処理手順がなくなるまで、2値化処理及びぼかし処理を繰り返す、
ことを特徴とする付記1記載の2次元コード読取方法。
【0188】
(付記3) 前記2値画像に対して前記ぼかし処理を行う際、
前記2値画像を縮小し、縮小率に応じた所定の範囲の画素に含まれる暗画素が所定の割合以上のときは、前記所定の範囲に対応する縮小画像の画素を暗画素にすることを特徴とする付記1〜2記載の2次元コード読取方法。
【0189】
(付記4) 前記2値画像に対して前記ぼかし処理を行う際、
前記2値画像の所定の範囲内の画素に暗画素が含まれている場合は暗画素を、前記所定の範囲の画素がすべて明画素のときは明画素を選択して間引き処理を行う、
ことを特徴とする付記3記載の2次元コード読取方法。
【0190】
(付記5) 前記2次元コード候補を検出する際、前記ぼかし処理の結果得られた前記画素集合の形状を、前記2次元コードを特徴付ける外縁の形状と照合し、所定の許容範囲内で前記2次元コードを特徴付ける形状と一致する前記画素集合を前記2次元コード候補とし、
前記2次元コードを特定する際、前記2次元コード候補に対応する2値画像を前記画像データ記憶手段から読み出し、前記読み出した2値画像に、前記2次元コードを特徴付ける2次元コード検出用パタンが検出されるかどうかを判定する、
ことを特徴とする付記1〜4記載の2次元コード読取方法。
【0191】
(付記6) 前記2次元コード候補を検出する際、前記ぼかし処理の結果得られた前記画素集合の形状が、前記2次元コードを特徴付ける外縁の形状と一致しないときは、前記画素集合内に予め決められたノイズ形状の条件を満たす形状を持つ画像の有無を検査し、前記条件を満たすノイズ形状が検出されたときは、検出されたノイズ形状を取り除いて前記画素集合の形状を補正し、補正後に前記2次元コードを特徴付ける外縁の形状と照合する、
ことを特徴とする付記5記載の2次元コード読取方法。
【0192】
(付記7) 前記2次元コードを特定する際、前記2次元コード候補に対応する2値画像が前記2次元コード検出用パタンを複数有するときは、少なくとも1つの前記2次元コード検出用パタンが検出され、かつ、検出された前記2次元コード検出用パタンと、前記2次元コード候補に対応する2値画像における前記2次元コード画像の範囲とに基づいて推定される残りの前記2次元コード検出用パタンの推定位置に、前記2次元コード検出用パタンの条件を満たす形状が少なくとも1つ検出されたときは、前記2次元コード候補に対応する2値画像を2次元コードと特定する、
ことを特徴とする付記5〜7記載の2次元コード読取方法。
【0193】
(付記8) 前記2次元コードはQRコードであり、
前記2次元コード候補として前記QRコード候補を検出する際、前記所定のぼかし処理の結果得られた前記画素集合の形状が、正方形であるかどうかを判定し、所定の許容範囲内で正方形と見なせる前記画素集合をQRコード候補とし、
前記2次元コードとして前記QRコードを特定する際、前記QRコード候補に対応する2値画像を前記画像データ記憶手段から読み出し、前記QRコード候補に対応する2値画像に、前記QRコードのファインダパタンが検出されるかどうかを判定することを特徴とする付記1〜4記載の2次元コード読取方法。
【0194】
(付記9) 前記QRコードを特定する際、前記QRコードの3つの前記ファインダパタンのうち、少なくとも1つの前記ファインダパタンが検出され、かつ、検出された前記ファインダパタンと、前記QRコード候補に対応する前記2値画像におけるQRコードの範囲とに基づいて推定される残りの前記ファインダパタンの推定位置に、前記ファインダパタンを特徴付ける少なくとも1つの形状が検出されたときは、前記QRコード候補を前記QRコードと特定する、
ことを特徴とする付記8記載の2次元コード読取方法。
【0195】
(付記10) 前記QRコードを特定する際、前記ファインダパタンの推定位置に、前記ファインパタンの外枠の形状が検出されたとき、前記ファインダパタンの内側の正方形の形状が検出されたとき、または、前記ファインダパタンの推定位置の暗画素のヒストグラムが前記ファインダパタンのヒストグラムと一致したとき、のいずれかの条件が成立するかどうかに基づいて、前記QRコードを特定する、
ことを特徴とする付記9記載の2次元コード読取方法。
【0196】
(付記11) 前記モジュールの割り当ての際、前記基準画像パタンに基づいて、前記基準画像パタンに対応するモジュールの縦横の画素数と、前記2次元コード画像の傾きを算出し、算出された前記モジュールの縦の画素数を高さ、前記モジュールの横の画素数を幅とする仮モジュールを生成するとともに、前記傾き及び既に前記2次元コードの2値画像に割り当てられた既割当のモジュールの形状とに応じて前記仮モジュールを変形し、前記2次元コードの2値画像に割り当てる、
ことを特徴とする付記1〜7記載の2次元コード読取方法。
【0197】
(付記12) 前記モジュールの割り当ての際、前記2次元コード画像の所定の範囲のモジュール割当が終了したときは、割り当てられたモジュールと、前記2次元コードの2値画像とのずれを計測し、ずれの大きさが予め決められた閾値を超えているときは、前記仮モジュールの変形を調整し、前記所定の範囲について調整された仮モジュールを割り当てる処理を行う、
ことを特徴とする付記11記載の2次元コード読取方法。
【0198】
(付記13) 前記2次元コードのデコードの際、複数の2値化処理手順から一の2値化処理手順を選択して実行し、得られた画像に基づくデコードが失敗したと判定されたときは、未実行の2値化処理手順を選択して再度実行することを特徴とする付記11〜12記載の2次元コード読取方法。
【0199】
(付記14) 前記モジュールの割り当ての際、前記2次元コードに、前記2次元コード領域を所定のブロック単位に区切り、1または複数の前記ブロックから成るブロック領域ごとに誤り訂正符号が設定されているときは、前記ブロック領域ごとに前記誤り訂正符号によって誤り訂正ができなかったブロック領域の数を計測し、前記誤り訂正ができなかったブロック領域が存在し、かつ、前記誤り訂正ができなかったブロック領域の数が所定の閾値以下の場合に、前記誤り訂正ができなかったブロック領域に対応するモジュールについて前記2値画像への割当処理を再度実行する、
ことを特徴とする付記11〜13記載の2次元コード読取方法。
【0200】
(付記15) 前記2次元コードはQRコードであり、
前記基準画像パタン検出の際、前記基準画像パタンとしてQRコードのファインダパタン及びタイミングパタンを検出し、前記ファインダパタン及び前記タイミングパタンの画素配列に基づいて前記仮モジュールの縦横の画素数を算出する、
ことを特徴とする付記11記載の2次元コード読取方法。
【0201】
(付記16) 前記仮モジュールを生成する際、前記モジュールの割り当てを行う対象の前記2次元コードの2値画像の所定の領域について、前記所定の領域の水平方向が水平方向のタイミングパタンに、垂直方向が垂直方向のタイミングパタンに対応付けられるときは前記水平方向のタイミングパタン及び前記垂直方向のタイミングパタンを構成するモジュールの幅または高さに基づいて前記仮モジュールの幅と高さを推定し、前記所定の領域に前記水平方向のタイミングパタンまたは前記垂直方向のタイミングパタンのいずれかが対応付けられないときは、前記タイミングパタンが対応付けられない方向にある前記ファインダパタンと、前記所定の領域に対応する前記水平方向のタイミングパタンまたは前記垂直方向のタイミングパタンを構成するモジュールの幅または高さに基づいて前記仮モジュールの幅と高さを推定する、
ことを特徴とする付記15記載の2次元コード読取方法。
【0202】
(付記17) 前記モジュールの割り当てを行う際、前記QRコードに設定される位置合わせパタンが4つ以上検出できる場合は、検出された位置合わせパタンによって囲まれる領域を、前記4つの位置合わせパタンを起点として中心に向かって前記仮モジュールの割り当てを行う、
ことを特徴とする付記15〜16記載の2次元コード読取方法。
【0203】
(付記18) 前記モジュールの割り当てを行う際、前記QRコードに設定されるリードソロモンブロック単位の誤り訂正符号に基づき、前記リードソロモンブロック単位の誤り訂正符号によって誤り訂正ができなかったリードソロモンブロックが存在し、その数が所定の閾値以下のときは、前記リードソロモンブロックに属するモジュールについて、未使用の前記2値化処理手順を用いて2値化からの処理手順を再度実行する、
ことを特徴とする付記15〜17記載の2次元コード読取方法。
【0204】
(付記19) 入力画像データから2次元コード画像を抽出する2次元コード抽出方法において、
コンピュータが、
撮像装置によって撮像された画像データを2値化して2値画像を生成して前記画像データ記憶手段に格納し、
前記2値画像に対してぼかし処理を施し、
前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を2次元コード候補として検出し、
前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出して、2次元コードの特徴を示す情報と照合し、
前記2次元コードの特徴を満たすと判定された前記2次元コード候補が検出されたときは、前記2次元コード候補を2次元コードと特定し、
特定された2次元コードの画像領域の位置を示す2次元コード位置情報を前記2次元コード候補の領域に基づいて生成し、前記2次元コード位置情報をコード情報記憶手段に格納する、
ことを特徴とする2次元コード抽出方法。
【0205】
(付記20) 2次元コード画像の歪みを補正して認識処理を行う2次元コード認識方法において、
コンピュータが、
撮像装置によって撮像された画像データから前記2次元コード画像を抽出し、
抽出した前記2次元コードの画像を2値化して2次元コードの2値画像を生成して画像データ記憶手段に格納し、
前記2次元コードの2値画像から、2次元コードの基準画像パタンを検出し、
検出された基準画像パタンを用いて前記2次元コードの2値画像を構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、
前記画像データ記憶手段から読み出した前記2次元コードの2値画像の画素配列に合わせて前記仮モジュールを前記2次元コードの2値画像に割り当て、
割り当てられたモジュールに基づき前記2次元コードのデコードを行う、
ことを特徴とする2次元コード認識方法。
【0206】
(付記21) 入力画像データから2次元コード画像を抽出し、歪みを補正して2次元コードの認識処理を行う2次元コード読取装置において、
撮像装置によって撮像された画像データを2値化して2値画像を生成し、前記2値画像を前記画像データ記憶手段に格納し、前記2値画像に対してぼかし処理を施し、前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を2次元コード候補として検出し、前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出して、2次元コードの特徴を示す情報と照合し、前記2次元コードの特徴を満たすと判定された前記2次元コード候補が検出されたときは、前記2次元コード候補を2次元コードと特定する2次元コード抽出手段と、
前記2次元コードの2値画像として、前記2次元コードとして特定された前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出し、前記画像データ記憶手段から読み出した前記2次元コードの2値画像から、前記2次元コードの基準画像パタンを検出し、検出された前記基準画像パタンを用いて、前記2次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、前記2次元コードの2値画像の画素配列に合わせて前記仮モジュールを前記2次元コードの2値画像に割り当て、割り当てられたモジュールに基づき前記2次元コードのデコードを行う2次元コード認識手段と、
を有することを特徴とする2次元コード読取装置。
【0207】
(付記22) 入力画像データから2次元コード画像を抽出し、歪みを補正して2次元コードの認識処理を行うための2次元コード読取プログラムにおいて、
コンピュータに、
撮像装置によって撮像された画像データを2値化して2値画像を生成し、前記2値画像を前記画像データ記憶手段に格納し、
前記2値画像に対してぼかし処理を施し、
前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を2次元コード候補として検出し、
前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出して、2次元コードの特徴を示す情報と照合し、
前記2次元コードの特徴を満たすと判定された前記2次元コード候補が検出されたときは、前記2次元コード候補を2次元コードと特定し、
前記2次元コードの2値画像として、前記2次元コードとして特定された前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出し、
前記画像データ記憶手段から読み出した前記2次元コードの2値画像から、前記2次元コードの基準画像パタンを検出し、
検出された前記基準画像パタンを用いて、前記2次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、
前記2次元コードの2値画像の画素配列に合わせて前記仮モジュールを前記2次元コードの2値画像に割り当て、
割り当てられたモジュールに基づき前記2次元コードのデコードを行う、
手順を実行させることを特徴とする2次元コード読取プログラム。
【符号の説明】
【0208】
10 2次元コード読取装置
11a 画像データ記憶手段
11b コード情報記憶手段
12 画像入力手段
13 2次元コード抽出手段
14 2次元コード認識手段
15 結果出力手段

【特許請求の範囲】
【請求項1】
入力画像データから2次元コード画像を抽出し、歪みを補正して2次元コードの認識処理を行う2次元コード読取方法において、
コンピュータが、
撮像装置によって撮像された画像データを2値化して2値画像を生成し、前記2値画像を画像データ記憶手段に格納し、
前記2値画像に対してぼかし処理を施し、
前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を2次元コード候補として検出し、
前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出して、2次元コードの特徴を示す情報と照合し、
前記2次元コードの特徴を満たすと判定された前記2次元コード候補が検出されたときは、前記2次元コード候補を2次元コードと特定し、
前記2次元コードの2値画像として、前記2次元コードとして特定された前記2次元コード候補に対応する2値画像を前記画像データ記憶手段から読み出し、
前記画像データ記憶手段から読み出した前記2次元コードの2値画像から、前記2次元コードの基準画像パタンを検出し、
検出された前記基準画像パタンを用いて、前記2次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、
前記2次元コードの2値画像の画素配列に合わせて前記仮モジュールを前記2次元コードの2値画像に割り当て、
割り当てられたモジュールに基づき前記2次元コードのデコードを行う、
ことを特徴とする2次元コード読取方法。
【請求項2】
前記2次元コード候補を検出する際、前記ぼかし処理の結果得られた前記画素集合の形状を、前記2次元コードを特徴付ける外縁の形状と照合し、所定の許容範囲内で前記2次元コードを特徴付ける形状と一致する前記画素集合を前記2次元コード候補とし、
前記2次元コードを特定する際、前記2次元コード候補に対応する2値画像を前記画像データ記憶手段から読み出し、前記読み出した2値画像に、前記2次元コードを特徴付ける2次元コード検出用パタンが検出されるかどうかを判定する、
ことを特徴とする請求項1記載の2次元コード読取方法。
【請求項3】
前記2次元コード候補を検出する際、前記ぼかし処理の結果得られた前記画素集合の形状が、前記2次元コードを特徴付ける外縁の形状と一致しないときは、前記画素集合内に予め決められたノイズ形状の条件を満たす形状を持つ画像の有無を検査し、前記条件を満たすノイズ形状が検出されたときは、検出されたノイズ形状を取り除いて前記画素集合の形状を補正し、補正後に前記2次元コードを特徴付ける外縁の形状と照合する、
ことを特徴とする請求項2記載の2次元コード読取方法。
【請求項4】
前記2次元コードを特定する際、前記2次元コード候補に対応する2値画像が前記2次元コード検出用パタンを複数有するときは、少なくとも1つの前記2次元コード検出用パタンが検出され、かつ、検出された前記2次元コード検出用パタンと、前記2次元コード候補に対応する2値画像における前記2次元コード画像の範囲とに基づいて推定される残りの前記2次元コード検出用パタンの推定位置に、前記2次元コード検出用パタンの条件を満たす形状が少なくとも1つ検出されたときは、前記2次元コード候補に対応する2値画像を2次元コードと特定する、
ことを特徴とする請求項2〜3記載の2次元コード読取方法。
【請求項5】
前記モジュールの割り当ての際、前記基準画像パタンに基づいて、前記基準画像パタンに対応するモジュールの縦横の画素数と、前記2次元コード画像の傾きを算出し、算出された前記モジュールの縦の画素数を高さ、前記モジュールの横の画素数を幅とする仮モジュールを生成するとともに、前記傾き及び既に前記2次元コードの2値画像に割り当てられた既割当のモジュールの形状とに応じて前記仮モジュールを変形し、前記2次元コードの2値画像に割り当てる、
ことを特徴とする請求項1〜4記載の2次元コード読取方法。
【請求項6】
前記モジュールの割り当ての際、前記2次元コード画像の所定の範囲のモジュール割当が終了したときは、割り当てられたモジュールと、前記2次元コードの2値画像とのずれを計測し、ずれの大きさが予め決められた閾値を超えているときは、前記仮モジュールの変形を調整し、前記所定の範囲について調整された仮モジュールを割り当てる処理を行う、
ことを特徴とする請求項5記載の2次元コード読取方法。
【請求項7】
前記モジュールの割り当ての際、前記2次元コードに、前記2次元コード領域を所定のブロック単位に区切り、1または複数の前記ブロックから成るブロック領域ごとに誤り訂正符号が設定されているときは、前記ブロック領域ごとに前記誤り訂正符号によって誤り訂正ができなかったブロック領域の数を計測し、前記誤り訂正ができなかったブロック領域が存在し、かつ、前記誤り訂正ができなかったブロック領域の数が所定の閾値以下の場合に、前記誤り訂正ができなかったブロック領域に対応するモジュールについて前記2値画像への割当処理を再度実行する、
ことを特徴とする請求項5〜6記載の2次元コード読取方法。
【請求項8】
入力画像データから2次元コード画像を抽出する2次元コード抽出方法において、
コンピュータが、
撮像装置によって撮像された画像データを2値化して2値画像を生成して前記画像データ記憶手段に格納し、
前記2値画像に対してぼかし処理を施し、
前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を2次元コード候補として検出し、
前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出して、2次元コードの特徴を示す情報と照合し、
前記2次元コードの特徴を満たすと判定された前記2次元コード候補が検出されたときは、前記2次元コード候補を2次元コードと特定し、
特定された2次元コードの画像領域の位置を示す2次元コード位置情報を前記2次元コード候補の領域に基づいて生成し、前記2次元コード位置情報をコード情報記憶手段に格納する、
ことを特徴とする2次元コード抽出方法。
【請求項9】
2次元コード画像の歪みを補正して認識処理を行う2次元コード認識方法において、
コンピュータが、
撮像装置によって撮像された画像データから前記2次元コード画像を抽出し、
抽出した前記2次元コードの画像を2値化して2次元コードの2値画像を生成して画像データ記憶手段に格納し、
前記2次元コードの2値画像から、2次元コードの基準画像パタンを検出し、
検出された基準画像パタンを用いて前記2次元コードの2値画像を構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、
前記画像データ記憶手段から読み出した前記2次元コードの2値画像の画素配列に合わせて前記仮モジュールを前記2次元コードの2値画像に割り当て、
割り当てられたモジュールに基づき前記2次元コードのデコードを行う、
ことを特徴とする2次元コード認識方法。
【請求項10】
入力画像データから2次元コード画像を抽出し、歪みを補正して2次元コードの認識処理を行う2次元コード読取装置において、
撮像装置によって撮像された画像データを2値化して2値画像を生成し、前記2値画像を前記画像データ記憶手段に格納し、前記2値画像に対してぼかし処理を施し、前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を2次元コード候補として検出し、前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出して、2次元コードの特徴を示す情報と照合し、前記2次元コードの特徴を満たすと判定された前記2次元コード候補が検出されたときは、前記2次元コード候補を2次元コードと特定する2次元コード抽出手段と、
前記2次元コードの2値画像として、前記2次元コードとして特定された前記2次元コード候補の領域に対応する2値画像を前記画像データ記憶手段から読み出し、前記画像データ記憶手段から読み出した前記2次元コードの2値画像から、前記2次元コードの基準画像パタンを検出し、検出された前記基準画像パタンを用いて、前記2次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、前記2次元コードの2値画像の画素配列に合わせて前記仮モジュールを前記2次元コードの2値画像に割り当て、割り当てられたモジュールに基づき前記2次元コードのデコードを行う2次元コード認識手段と、
を有することを特徴とする2次元コード読取装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate