(57)【特許請求の範囲】
【請求項１】
入力画像データから２次元コード画像を抽出し、歪みを補正して２次元コードの認識処理を行う２次元コード読取方法において、
コンピュータが、
撮像装置によって撮像された画像データを２値化して２値画像を生成し、
前記２値画像に対してぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を２次元コード候補として検出し、
前記２次元コード候補の領域に対応する２値画像を、２次元コードの特徴を示す情報と照合し、
前記２次元コードの特徴を満たすと判定された前記２次元コード候補が検出されたときは、前記２次元コード候補を２次元コードと特定し、
前記特定した２次元コードに対応する２値画像から、前記２次元コードの基準画像パタンを検出し、
検出された前記基準画像パタンを用いて、前記２次元コードを構成する各モジュールの縦横の画素数を推定して、前記縦横の画素数に基づいて得られる形状の仮モジュールを生成し、
前記２次元コードに対応する２値画像の画素配列に合わせて、前記２次元コードに対応する２値画像内の前記仮モジュールと同じ形状の領域に、前記仮モジュールを割り当て、
前記仮モジュールが割り当てられた領域を前記２次元コードのモジュールとして、前記２次元コードのデコードを行う、
ことを特徴とする２次元コード読取方法。
【請求項２】
前記２次元コード候補を検出する際、前記ぼかし処理の結果得られた前記画素集合の形状を、前記２次元コードを特徴付ける外縁の形状と照合し、所定の許容範囲内で前記２次元コードを特徴付ける形状と一致する前記画素集合を前記２次元コード候補とし、
前記２次元コードを特定する際、前記２次元コード候補に対応する２値画像に、前記２次元コードを特徴付ける２次元コード検出用パタンが検出されるかどうかを判定する、
ことを特徴とする請求項１記載の２次元コード読取方法。
【請求項３】
前記２次元コード候補を検出する際、前記ぼかし処理の結果得られた前記画素集合の形状が、前記２次元コードを特徴付ける外縁の形状と一致しないときは、前記画素集合内に予め決められたノイズ形状の条件を満たす形状を持つ画像の有無を検査し、前記条件を満たすノイズ形状が検出されたときは、検出されたノイズ形状を取り除いて前記画素集合の形状を補正し、補正後に前記２次元コードを特徴付ける外縁の形状と照合する、
ことを特徴とする請求項２記載の２次元コード読取方法。
【請求項４】
前記２次元コードを特定する際、前記２次元コード候補に対応する２値画像が前記２次元コード検出用パタンを複数有するときは、少なくとも１つの前記２次元コード検出用パタンが検出され、かつ、検出された前記２次元コード検出用パタンと、前記２次元コード候補に対応する２値画像における前記２次元コード画像の範囲とに基づいて推定される残りの前記２次元コード検出用パタンの推定位置に、前記２次元コード検出用パタンの条件を満たす形状が少なくとも１つ検出されたときは、前記２次元コード候補に対応する２値画像を２次元コードと特定する、
ことを特徴とする請求項２〜３のいずれか１項に記載の２次元コード読取方法。
【請求項５】
前記２次元コードを特定する際、前記２次元コード候補に対応する２値画像が前記２次元コード検出用パタンを複数有するときは、少なくとも１つの前記２次元コード検出用パタンが検出され、かつ、検出された前記２次元コード検出用パタンと、前記２次元コード候補に対応する２値画像における前記２次元コード画像の範囲とに基づいて推定される残りの前記２次元コード検出用パタンの推定位置に、前記２次元コード検出用パタンの条件より緩和された条件を満たす形状が少なくとも１つ検出されたときは、前記２次元コード候補に対応する２値画像を２次元コードと特定する、
ことを特徴とする請求項２〜３のいずれか１項に記載の２次元コード読取方法。
【請求項６】
前記仮モジュールの割り当ての際、前記基準画像パタンに基づいて、前記基準画像パタンに対応するモジュールの縦横の画素数と、前記２次元コード画像の傾きを算出し、算出された前記モジュールの縦の画素数を高さ、前記モジュールの横の画素数を幅とする仮モジュールを生成するとともに、前記傾き及び既に前記２次元コードに対応する２値画像に割り当てられた既割当の仮モジュールの形状とに応じて前記仮モジュールを変形し、前記２次元コードに対応する２値画像に割り当てる、
ことを特徴とする請求項１〜５のいずれか１項に記載の２次元コード読取方法。
【請求項７】
入力画像データから２次元コード画像を抽出し、歪みを補正して２次元コードの認識処理を行う２次元コード読取方法において、
コンピュータが、
撮像装置によって撮像された画像データを２値化して２値画像を生成し、
前記２値画像に対してぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を２次元コード候補として検出し、
前記２次元コード候補の領域に対応する２値画像を、２次元コードの特徴を示す情報と照合し、
前記２次元コードの特徴を満たすと判定された前記２次元コード候補が検出されたときは、前記２次元コード候補を２次元コードと特定し、
前記特定された２次元コードに対応する２値画像から、前記２次元コードの基準画像パタンを検出し、
検出された前記基準画像パタンに基づいて、前記基準画像パタンに対応するモジュールの縦横の画素数と、前記２次元コード画像の傾きを算出し、算出された前記モジュールの縦の画素数を高さ、前記モジュールの横の画素数を幅とする仮モジュールを生成し、
前記傾き及び既に前記２次元コードに対応する２値画像に割り当てられた既割当の前記仮モジュールの形状とに応じて前記仮モジュールを変形し、前記２次元コードに対応する２値画像に割り当て、
前記２次元コード画像の所定の範囲の前記仮モジュール割当が終了したときは、割り当てられたモジュールと、前記２次元コードに対応する２値画像とのずれを計測し、ずれの大きさが予め決められた閾値を超えているときは、前記仮モジュールの変形を調整し、前記所定の範囲について調整された仮モジュールの割当処理を再度実行し、
割り当てられた前記仮モジュールに基づき前記２次元コードのデコードを行う、
ことを特徴とする２次元コード読取方法。
【請求項８】
入力画像データから２次元コード画像を抽出し、歪みを補正して２次元コードの認識処理を行う２次元コード読取方法において、
コンピュータが、
撮像装置によって撮像された画像データを２値化して２値画像を生成し、
前記２値画像に対してぼかし処理を施し、
前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を２次元コード候補として検出し、
前記２次元コード候補の領域に対応する２値画像を、２次元コードの特徴を示す情報と照合し、
前記２次元コードの特徴を満たすと判定された前記２次元コード候補が検出されたときは、前記２次元コード候補を２次元コードと特定し、
前記２次元コードに対応する２値画像から、前記２次元コードの基準画像パタンを検出し、
検出された前記基準画像パタンに基づいて、前記基準画像パタンに対応するモジュールの縦横の画素数と、前記２次元コード画像の傾きを算出し、算出された前記モジュールの縦の画素数を高さ、前記モジュールの横の画素数を幅とする仮モジュールを生成し、
前記傾き及び既に前記２次元コードに対応する２値画像に割り当てられた既割当の前記仮モジュールの形状とに応じて前記仮モジュールを変形し、前記変形した仮モジュールを前記２次元コードに対応する２値画像に割り当て、
前記２次元コードに、前記２次元コードの領域を所定のブロック単位に区切り、１または複数の前記ブロックから成るブロック領域ごとに誤り訂正符号が設定されているときは、前記ブロック領域ごとに前記誤り訂正符号によって誤り訂正ができなかったブロック領域の数を計測し、前記誤り訂正ができなかったブロック領域が存在し、かつ、前記誤り訂正ができなかったブロック領域の数が所定の閾値以下の場合に、前記誤り訂正ができなかったブロック領域に対応するモジュールについて前記２値画像への割当処理を再度実行し、
割り当てられた前記仮モジュールに基づき前記２次元コードのデコードを行う、
ことを特徴とする２次元コード読取方法。
【請求項９】
２次元コード画像の歪みを補正して認識処理を行う２次元コード認識方法において、
コンピュータが、
撮像装置によって撮像された画像データから前記２次元コード画像を抽出し、
抽出した前記２次元コード画像を２値化して２次元コードに対応する２値画像を生成し、
前記２次元コードに対応する２値画像から、２次元コードの基準画像パタンを検出し、
検出された基準画像パタンを用いて前記２次元コードに対応する２値画像を構成する各モジュールの縦横の画素数を推定して、前記縦横の画素数に基づいて得られる形状の仮モジュールを生成し、
前記２次元コードに対応する２値画像の画素配列に合わせて、前記２次元コードに対応する２値画像内の前記仮モジュールと同じ形状の領域に、前記仮モジュールを割り当て、
前記仮モジュールが割り当てられた領域を前記２次元コードのモジュールとして、前記２次元コードのデコードを行う、
ことを特徴とする２次元コード認識方法。
【請求項１０】
入力画像データから２次元コード画像を抽出し、歪みを補正して２次元コードの認識処理を行う２次元コード読取装置において、
撮像装置によって撮像された画像データを２値化して２値画像を生成し、前記２値画像に対してぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を２次元コード候補として検出し、前記２次元コード候補の領域に対応する２値画像を、２次元コードの特徴を示す情報と照合し、前記２次元コードの特徴を満たすと判定された前記２次元コード候補が検出されたときは、前記２次元コード候補を２次元コードと特定する２次元コード抽出手段と、
前記特定した２次元コードに対応する２値画像から、前記２次元コードの基準画像パタンを検出し、検出された前記基準画像パタンを用いて、前記２次元コードを構成する各モジュールの縦横の画素数を推定して、前記縦横の画素数に基づいて得られる形状の仮モジュールを生成し、前記２次元コードに対応する２値画像の画素配列に合わせて、前記２次元コードに対応する２値画像内の前記仮モジュールと同じ形状の領域に、前記仮モジュールを割り当て、前記仮モジュールが割り当てられた領域を前記２次元コードのモジュールとして、前記２次元コードのデコードを行う２次元コード認識手段と、
を有することを特徴とする２次元コード読取装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力画像データから２次元コード画像を抽出し、歪みを補正して２次元コードの認識処理を行う２次元コード読取方法及び２次元コード読取装置と、２次元コード認識方法と、に関する。
【背景技術】
【０００２】
従来から、撮像装置の撮像した画像データを取得し、この画像データから２次元コード画像部分を抽出して２次元コードの認識処理を行う２次元コード読取装置がある。
ＱＲコード（登録商標）であれば、画像データを走査してＪＩＳ（Japanese Industrial Standards）規格に定められる３つのファインダパタン（Finder Pattern；位置検出パタン）を検出し、検出されたファインダパタンの囲む領域をもってコード画像部抽出としている。そして、コードを構成するモジュール（セルとも呼ばれる）の配置状態を特定し、認識処理を行う。ＱＲコードの一部が正しく読み取れなかった場合は、ＱＲコードの特徴に基づいて不具合領域を推定し、誤り訂正を行う（例えば、特許文献１参照）。
【０００３】
入力した画像が歪んでいる場合には、画像を補正してから認識処理を行う。補正方法として、２次元コード画像について包絡線を作成し、包絡線で囲まれた画像の縦横方向に作成した補助線にモジュール数に応じた分割点を設け、２次元コード認識のための格子点を求める方法がある（例えば、特許文献２参照）。また、画像の明暗パタンから、バー幅またはモジュールサイズを検出し、検出されたサイズなどに基づいてバー幅またはモジュールサイズを正規化し、正規化画像を生成する方法もある（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−１６７２２２号公報
【特許文献２】特開２００４−３６２０５３号公報
【特許文献３】特開２００７−６６０００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、２次元コードの適用分野が広がっており、撮像装置の解像度が低い場合や、撮像時の状態が良好でない場合など、低品質・低解像度の入力画像データを処理しなければならないケースが増えている。しかし、従来の２次元コード読取方法では、低品質・低解像度の画像から２次元コードを読み取ることが困難であるという問題点がある。
【０００６】
入力画像データから２次元コード画像を抽出するときは、ファインダパタンを用いる。しかしながら、入力画像データの画質が良好でなければファインダパタンを見つけることは困難である。ＱＲコードを例にとると、入力画像データを走査して、ファインダパタンを検出する。しかしながら、低解像度、低品質の画像データでは、ノイズなどの影響で、ファインダパタンの検出が困難であった。さらに、２次元コード画像が傾いていたり、画像に歪みが生じていたりすると、ファインダパタンの抽出はより困難になる。加えて、単にパタンの一致をファインダパタン検出の条件とすると、漢字の「回」をファインダパタンと誤認識してしまう場合もある。また、画像領域全体を走査してパタン検出を行うため、複数の２次元コードや、２次元コード以外の画像が含まれていた場合には、ファインダパタンの抽出処理時間がかかるという問題もある。
【０００７】
一方、ファインダパタンが検出され、２次元コードが抽出できたとしても、低解像度・低品質の画像データでは、デコード処理のための画像補正が必要になる。しかしながら、従来の２次元コード画像の歪み補正は、画質が良好で、かつ、歪みが均一であることを前提としている。すなわち、歪みが均一であることを前提に、２次元コード認識のための補助線の作成や、バー幅またはモジュールサイズの正規化が行われる。しかし、低品質・低解像度の画像データでは、歪みが均一でない場合が多く、従来の歪み補正方法では、画像の補正が十分に行えなかった。また、均一ではない非線形な歪みを均一な歪みを前提とした画像変換で補正しようとするため、かえって歪みを増長してしまうという問題点がある。
【０００８】
以上のように、従来の２次元コード読取方法では、低解像度・低品質の画像データから２次元コードを抽出し、その認識処理を行うことが難しかった。
このような点に鑑み、低解像度や非線形な歪みを持った低品質な画像であっても、２次元コードの読み取りが可能な２次元コード読取方法、２次元コード認識方法及び２次元コード読取装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、コンピュータが、入力画像データから２次元コード画像を抽出し、歪みを補正して２次元コードの認識処理を行う２次元コード読取方法が提供される。
【００１０】
この２次元コード読取方法では、撮像装置によって撮像された画像データを２値化して２値画像を生成し、２値画像を画像データ記憶手段に格納する。次に、２値画像に対してぼかし処理を施し、ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を２次元コード候補として検出する。続いて、この２次元コード候補の領域に対応する２値画像を画像データ記憶手段から読み出して、２次元コードの特徴を示す情報と照合し、２次元コードの特徴を満たすと判定された２次元コード候補が検出されたときは、この２次元コード候補を２次元コードと特定する。次に、２次元コードの２値画像として、２次元コードとして特定された２次元コード候補に対応する２値画像を画像データ記憶手段から読み出し、画像データ記憶手段から読み出した２次元コードの２値画像から、２次元コードの基準画像パタンを検出する。次に、検出された基準画像パタンを用いて、２次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、２次元コードの２値画像の画素配列に合わせて仮モジュールを２次元コードの２値画像に割り当てる。そして、割り当てられたモジュールに基づき、２次元コードのデコードを行う。
【００１１】
また、上記課題を解決するために、コンピュータが上記２次元コード読取方法と同様の処理を実行する２次元コード読取装置が提供される。さらに、上記の２次元コード認識手順と同様の手順を実行する２次元コード認識方法と、が提供される。
【発明の効果】
【００１２】
開示の２次元コード読取方法、２次元コード認識方法及び２次元コード読取装置によれば、対象画像をぼかし処理し、ぼかし画像上の画素集合として対象画像に含まれる２次元コードを捉えることによって、低解像度・低品質の画像から２次元コードを抽出することができる。また、仮モジュールを生成し、２値化された２次元コード画像に割り当ててデコード処理を行うことによって、低解像度で低品質の歪んだ画像でもデコードが可能となる。このように、低解像度で、かつ、非線形な歪みを持った低品質な画像であっても、２次元コードの読み取りが可能となる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の２次元コード読取装置の構成の一例を示した図である。
【図２】ＱＲコードの概略を示した図である。
【図３】ＱＲコード読取装置のハードウェア構成例を示すブロック図である。
【図４】ＱＲコード抽出部を中心としたソフトウェア構成を示した図である。
【図５】ラベルリストの一例を示した図である。
【図６】ＱＲ候補リストの一例を示した図である。
【図７】ＱＲリストの一例を示した図である。
【図８】ＱＲコード認識部を中心としたソフトウェア構成を示した図である。
【図９】パタンリストの一例を示した図である。
【図１０】幅・高さリスト及び傾きリストの一例を示した図である。
【図１１】ＲＳブロックリストの一例を示した図である。
【図１２】ぼかし処理の概要を示した図である。
【図１３】ＱＲコードの上方向にノイズがある場合のノイズ除去の例を示した図である。
【図１４】ＱＲコードの上方向と右方向にノイズがある場合のノイズ除去の例を示した図である。
【図１５】ファインダパタンの画像にノイズが混じっている例を示した図である。
【図１６】ＱＲコード抽出処理全体の手順を示したフローチャートである。
【図１７】ＱＲコード候補の抽出処理の手順を示したフローチャートである。
【図１８】縦方向のノイズチェック処理の手順を示したフローチャートである。
【図１９】横方向のノイズチェック処理の手順を示したフローチャートである。
【図２０】ＱＲコード候補の精査処理の詳細を示したフローチャートである。
【図２１】モジュールの幅と高さをファインダパタンとタイミングパタンとから求める方法を説明する図である。
【図２２】水平方向のモジュール割当処理を示した図である。
【図２３】モジュールの変形例を示した図である。
【図２４】モジュールを組み合わせた一例である。
【図２５】ＲＳブロックの構成例を示した図である。
【図２６】ＱＲコード認識処理全体の手順を示したフローチャートである。
【図２７】モジュール割当処理の手順を示したフローチャートである。
【発明を実施するための形態】
【００１４】
以下、実施の形態を、図面を参照して説明する。
図１は、第１の実施の形態の２次元コード読取装置の構成の一例を示した図である。
２次元コード読取装置１０は、画像データ記憶手段１１ａ及びコード情報記憶手段１１ｂを含む記憶手段、画像入力手段１２、２次元コード抽出手段１３、２次元コード認識手段１４及び結果出力手段１５を有する。２次元コード読取装置１０の各処理手段は、コンピュータが、２次元コード読取プログラムを実行することにより、その処理機能を実現する。
【００１５】
画像データ記憶手段１１ａは、２次元コード読取装置１０が取得した入力画像データを格納する記憶領域を有する。また画像データ記憶手段１１ａは、必要に応じて２値化された画像、所定のぼかし処理を施した画像など、画像データを記憶する。
【００１６】
コード情報記憶手段１１ｂは、２次元コードに関する２次元コード情報を格納する領域を有する。コード情報記憶手段１１ｂには例えば、２次元コード抽出手段１３が抽出した２次元コード画像領域の位置を示す２次元コード位置情報が格納される。
【００１７】
画像入力手段１２は、撮像装置によって撮像された画像データを入力し、この入力画像データを画像データ記憶手段１１ａに格納する。
２次元コード抽出手段１３は、画像データ記憶手段１１ａに格納された入力画像データを読み出し、入力画像データから２次元コードを抽出する。２次元コード抽出手段１３はまず、画像データ記憶手段１１ａから読み出した入力画像データを２値化し、２値画像を生成して、画像データ記憶手段１１ａに格納する。２次元コード抽出手段１３は次いで、生成した２値画像に対して所定のぼかし処理を施す。ぼかし処理は、明画素と暗画素との境界をぼかす処理で、ぼかし処理には、平滑化やＯＲ間引きが含まれる。２値画像に対してぼかし処理を行うことによって、所定の範囲に点在する暗画素同士が連結され、暗画素が所定の割合以上で偏って分布している画素集合（黒画素の塊）が形成される。２次元コード抽出手段１３はこの画素集合を検出し、画素集合の元になった２値画像が２次元コード画像の特徴を満たすかどうか判定する。まず、ぼかし処理を施した画像に基づいて、その形状が２次元コード画像の形状の特徴を満たす画素集合を２次元コード候補として抽出する。例えば、対象の２次元コード全体（外縁）の形状が正方形をしている場合には、画素集合の形状がおおよそ正方形をしているかどうかを判定し、画素集合がおおよそ正方形をしていれば、２次元コード候補として抽出する。なお、２次元コード候補抽出のとき、２次元コード抽出手段１３が画素集合のノイズをチェックし、検出されたノイズを除去して画素集合の形状を整えた後、画素集合形状の判定を行うとしてもよい。こうして、２次元コード抽出手段１３は、ぼかし処理を施した画像に基づいて、２次元コード候補を抽出する。続いて２次元コード抽出手段１３は、２次元コード候補の画素集合に相当する領域を、画像データ記憶手段１１ａに格納されるぼかし処理前の２値画像から抽出する。そして、より詳細に、抽出した２次元コード候補の２値画像を、２次元コードを特徴付ける２次元コード検出用パタンと照合する。例えば、２次元コードのファインダパタンの形状がわかっていれば、２次元コード抽出手段１３は、抽出された２次元コード候補に対応する２値画像の領域を走査し、ファインダパタンを探索する。２次元コード候補の２値画像からファインダパタンが検出できれば、２次元コード抽出手段１３はこの２次元コード候補を２次元コードと判定し、その画像領域の位置を示す２次元コード位置情報を生成し、コード情報記憶手段１１ｂに格納する。ここでは、２次元コード外縁形状が正方形の場合で説明したが、検出基準の形状は対象の２次元コードに応じて決まる。例えば、２次元コードの縦横の比が既知の矩形であれば、その形状と画素集合の形状とを照合する。また、２次元コードであるか否かの判定に用いる詳細な２次元コードの特徴も、対象の２次元コードに応じて適宜決める。
【００１８】
２次元コード認識手段１４は、２次元コード抽出手段１３が抽出した２次元コード画像領域のデコード処理を行う。２次元コード認識手段１４は、コード情報記憶手段１１ｂに格納されている２次元コード位置情報に基づいて、入力画像データから２次元コード画像を抽出する。２次元コード認識手段１４はまた、抽出された２次元コード画像を２値化し、２値化された２次元コードの２値画像からモジュールの位置検出用の基準画像パタンを検出する。なお、新たに２値化処理を行わず、２次元コード抽出手段１３によって２値化された２値画像を画像データ記憶手段１１ａから読み出して用いるとしてもよい。２次元コードには、２次元コードを構成する複数のモジュールの位置検出用にさまざまな基準画像パタンが用意されている。２次元コード認識手段１４では、基準画像パタンそれぞれの画像的特徴を用いて、２次元コードの２値画像から基準画像パタンを検出する。そして、２次元コード認識手段１４は検出された基準画像パタンを用いて、２次元コードを構成する各モジュールの縦横の画素数を推定し、仮モジュールを生成する。仮モジュールの縦横の画素数は、推定された画素数になる。そして２次元コード認識手段１４は、生成された仮モジュールを２次元コードの２値画像に割り当て、割り当てられた仮モジュールの領域を２次元コードのモジュールと見なし、２次元コードのデコード処理を行う。このとき、２次元コードに設定されている誤り訂正符号を用いた誤り訂正処理が行われる。２次元コード認識手段１４は、さらに、誤り訂正符号による誤り訂正ができない領域を検出したときは、誤り訂正ができない領域に属するモジュールの位置決め（仮モジュールの割当）をやり直すとしてもよい。なお、モジュール位置決めのやり直しの対象は、誤り訂正ができない領域だけでよい。また、モジュール位置決めのやり直しの際には、２値化処理の方法を変更し、再度２値化処理からの手順を行うとしてもよい。デコード結果は、結果出力手段１５に出力する。
【００１９】
結果出力手段１５は、２次元コード認識手段１４によるデコード結果を、表示装置などに出力し、結果を利用者に通知する。
このような２次元コード読取装置１０の動作及び２次元コード読取方法について説明する。
【００２０】
画像入力手段１２は、撮像された入力画像データを取得し、画像データ記憶手段１１ａに格納する。２次元コード抽出手段１３は、画像データ記憶手段１１ａに格納された入力画像データを２値化処理し、２値画像を画像データ記憶手段１１ａに格納する。そして、２値画像に対して所定のぼかし処理を行う。２次元コード抽出手段１３は、所定のぼかし処理によって形成された画素集合を抽出して、抽出した画素集合の形状が、２次元コードの形状の特徴を満たしているかどうかを判定し、特徴を満たしている画素集合を２次元コード候補とする。このとき、２次元コード抽出認識手段１３は画素集合のノイズをチェックし、画像集合からノイズを除去してから形状判定を行う。こうして２次元コード候補が検出される。さらに、２次元コード抽出手段１３は、ぼかし処理の結果得られた２次元コード候補の画像領域に相当するぼかし処理前の２値画像の領域を抽出し、抽出した領域が２次元コードの特徴を満たすかどうかをより詳細な条件でチェックする。２次元コード抽出手段１３は例えば、２次元コードが備える基準画像パタンが２次元コード候補に対応する２値画像から検出できるかどうかをチェックする。２次元コードが複数の基準画像パタンを備えているときは、全ての基準画像パタンが検出されなくてもよいとすることもできる。少なくとも１つ基準画像パタンが検出され、検出された基準画像パタンとぼかし処理の結果得られた２次元コード候補の画像領域から推定される基準画像パタンの推定位置に基準画像パタンと推定される画像が検出されれば、基準画像パタンが検出できたとする。２値画像から基準画像パタンを検出できるときは、２次元コード抽出手段１３はこの２次元コード候補を２次元コードと判定し、２次元コード位置情報を生成する。２次元コード位置情報は、コード情報記憶手段１１ｂに格納される。なお、２値化処理及びぼかし処理にはさまざまな方法があり、それぞれに得られる画像は異なる。そこで、ある２値化処理方法あるいはぼかし処理方法を用いて行った結果から２次元コードが検出できないときは、２値化処理方法またはぼかし処理方法を他の処理方法に変更し、２次元コードの抽出手順を繰り返す。
【００２１】
このように、２次元コード読取装置１０では、２値画像に所定のぼかし処理を行って２次元コード画像部分を１つの塊にして２次元コード候補として抽出する。これにより、低解像度や低画質の画像であっても、２次元コード候補を抽出することが可能となる。さらに、２次元コード候補に対応するぼかし処理前の２値画像領域を走査し、２値画像から基準画像パタンが検出されるかどうかを判定する。基準画像パタン検出の対象となる２値画像領域は、既に２次元コード候補として絞られている領域であるので、基準画像パタンと見なす条件を緩和しても２次元コード画像を検出することが可能であり、低解像度や低品質の画像からの２次元コード抽出を容易にする。また、２値画像を走査するのは、２次元コード候補の領域だけであるので、抽出時間を削減することができる。
【００２２】
さらに、２次元コード認識手段１４は、２次元コード抽出手段１３が特定した２次元コード画像領域の入力画像データを読み出して２値化し、２値化された２次元コード画像から２次元コードに含まれる基準画像パタンを検出する。そして、２次元コード認識手段１４は検出された基準画像パタンを用いて各モジュールの縦横の画素を推定し、仮モジュールを作成する。２次元コード認識手段１３は、作成した仮モジュールを適宜変形して２次元コードの２値画像に割り当て、割り当てられたモジュールに基づく２次元コードのデコードを行う。２次元コード抽出手順と同様に、２値化処理の方法を変更すると得られる画像が変わるので、２次元コードのデコードがうまくいかなかったときは、２値化処理方法を変更し、２次元コードの認識手順を繰り返す。
【００２３】
このように、２次元コード読取装置１０では、検出された基準画像パタンに合わせて仮モジュールを作成し、これを２次元コード画像に割り当ててデコード処理を行う。これにより、低解像度あるいは非線形な歪みが生じた低品質の画像であってもデコードの成功率を高めることができる。
【００２４】
次に、第２の実施の形態として、ＱＲコードの読み取りを行うＱＲコード読取装置に適用した場合について説明する。
まず、ＱＲコードの読み取りに用いるＱＲコードの画像の特徴について説明する。ＱＲコードには、デコードを補助するために用いる機能パタンの領域と、情報（データ）が書き込まれる領域とがある。なお、以下の説明では、暗画素を黒画素または黒、明画素を白画素または白と呼ぶ。
【００２５】
図２は、ＱＲコードの概略を示した図である。
図２に示すＱＲコード２０は、ＱＲコードから機能パタン領域の画像を取り出して示している。なお、情報（データ）は、符号化され、符号化領域２５に設定される。
【００２６】
ＱＲコード２０の機能パタンには、ファインダパタン２１ａ，２１ｂ，２１ｃと、タイミングパタン（Timing Pattern）２２ａ，２２ｂと、位置合わせパタン（Alignment Pattern）２３がある。また、ＱＲコード２０の周りには、何も表示されない空白領域であるクワイエットゾーン（Quiet Zone）２４が確保される。
【００２７】
ファインダパタン２１ａ，２１ｂ，２１ｃは、ＱＲコード２０の３つの隅（左上、左下、右上）に配置され、ＱＲコードの検出に用いられる。ファインダパタンの中心付近を直線的に横切ると、黒、白、黒、白、黒のパタンが、１：１：３：１：１の比率で検出される。
【００２８】
タイミングパタン２２ａ，２２ｂは、水平方向と垂直方向に１本ずつ配置される。タイミングパタンは黒と白とが交互に出現するパタンで、黒、白が１：１の比率で検出される。
【００２９】
位置合わせパタン２３は、ＱＲコードのバージョンによって決められた位置に配置される。位置合わせパタンの中心付近を直線的に横切ると、黒、白、黒、白、黒のパタンが、１：１：１：１：１の比率で検出される。位置合わせパタン２３は、大きなＱＲコードの場合、シンボル位置の検索を補助する働きをする。
【００３０】
ＱＲコード読取装置は、このような機能パタンを用いて、ＱＲコード部分の抽出処理と、ＱＲコードの認識処理と、を行う。
ここで、ＱＲコード読取装置のハードウェア構成について説明する。図３は、ＱＲコード読取装置のハードウェア構成例を示すブロック図である。
【００３１】
ＱＲコード読取装置１００は、ＣＰＵ（Central Processing Unit）１０１によって装置全体が制御されている。ＣＰＵ１０１には、バス１０７を介してＲＡＭ（Random Access Memory）１０２、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）１０３、グラフィック処理部１０４、入力インタフェース１０５、及び画像入力部１０６が接続されている。
【００３２】
ＲＡＭ１０２には、ＣＰＵ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、ＣＰＵ１０１による処理に必要な各種データが格納される。ＨＤＤ１０３には、ＯＳやアプリケーションのプログラムが格納される。グラフィック処理部１０４には、モニタ１０８が接続されており、ＣＰＵ１０１からの命令に従って画像をモニタ１０８の画面に表示させる。入力インタフェース１０５には、キーボード１０９ａやマウス１０９ｂが接続されており、キーボード１０９ａやマウス１０９ｂから送られてくる信号を、バス１０７を介してＣＰＵ１０１に送信する。画像入力部１０６は、撮像装置に接続されており、撮像装置が生成したＱＲコードを含む画像信号を入力し、バス１０７を介してＣＰＵ１０１に送信する。
【００３３】
このようなハードウェア構成によって、ＱＲコード読取装置１００の処理機能を実現することができる。
次に、ＱＲコード読取装置１００のソフトウェア構成を、ＱＲコード抽出部と、ＱＲコード認識部とに分けて説明する。
【００３４】
図４は、ＱＲコード抽出部を中心としたソフトウェア構成を示した図である。なお、図４の実線矢印はデータの書き込みを表し、点線矢印はデータの読み出しを表す。
ＱＲコード読取装置１００は、画像データ記憶部１１０ａ、コード情報記憶部１１０ｂ、画像入力部１２０、ＱＲコード抽出部１３０、ＱＲコード認識部１４０及び結果出力部１５０を有する。
【００３５】
画像データ記憶部１１０ａは、元画像領域１１００、２値画像領域１１１０、ぼかし画像領域１１２０及び２値画像領域（複写）１１３０の各画像データ格納領域を有する。元画像領域１１００には、撮像装置により撮像された処理前の画像データが格納される。例えば、元画像領域１１００に格納された画像データが、ＱＲコードが不特定の位置に配置される文書の画像データなどであり、ＱＲコード以外の画像が多数含まれているとする。２値画像領域１１１０には、２値化処理部１３１が元画像データについて２値化処理を行った２値画像データが格納される。ぼかし画像領域１１２０には、２値画像領域１１１０に格納された２値画像データについて、ぼかし処理部１３２がぼかし処理を行ったぼかし画像データが格納される。２値画像領域（複写）１１３０には、ＱＲコード認識部１４０が行ったモジュール割当処理で生成される２値画像データ（複写）が格納される。
【００３６】
コード情報記憶部１１０ｂには、ラベルリスト１１４０、ＱＲ候補リスト１１５０及びＱＲリスト１１６０が格納される。各情報は、ＱＲコード抽出部１３０で生成し、ＱＲコード抽出部１３０及びＱＲコード認識部１４０で参照する。ラベルリスト１１４０には、ラベリング処理部１３３がラベリングを行った画素集合の一覧が格納される。ＱＲ候補リスト１１５０には、ＱＲコード候補抽出部１３４がラベルリスト１１４０から抽出したＱＲコード候補の一覧が格納される。ＱＲリスト１１６０には、ＱＲコード精査判定部１３５がＱＲコード候補のうち、精査判定によって認められたＱＲコードの一覧が格納される。なお、コード情報記憶部１１０ｂに格納されるＱＲコード認識部１４０が参照するデータについては、後述する。
【００３７】
画像入力部１２０は、撮像装置が撮像した画像データを入力し、元画像領域１１００に格納する。ＱＲコード抽出部１３０は、元画像領域１１００に格納された元画像データからＱＲコードを抽出する。ＱＲコード抽出の詳細は、後述する。ＱＲコード認識部１４０は、ＱＲコード抽出部１３０が抽出したＱＲコードの認識処理を行う。結果出力部１５０は、ＱＲコード認識部１４０によるＱＲコードの認識結果を出力する。
【００３８】
ＱＲコード抽出部１３０の詳細について説明する。ＱＲコード抽出部１３０は、２値化処理部１３１、ぼかし処理部１３２、ラベリング処理部１３３、ＱＲコード候補抽出部１３４及びＱＲコード精査判定部１３５を有する。
【００３９】
２値化処理部１３１は、元画像領域１１００に格納された画像データを入力し、画像データに対して２値化処理を施して２値画像を生成し、２値画像領域１１１０に格納する。２値化処理には、大津法やＮｉｂｌａｃｋ法などさまざまな手法が知られており、本実施形態によるＱＲコード読取装置では、そのいくつかの処理手順を選択して実行することができる。また、画像領域を分割し、それぞれの領域単位で２値化処理を行うとしてもよい。場合によっては、サブピクセル化を行った後、２値化処理を行うとしてもよい。
【００４０】
ぼかし処理部１３２は、２値画像領域１１１０に格納された２値画像にぼかし処理を施してぼかし画像を生成し、ぼかし画像領域１１２０に格納する。ぼかし処理には、ＯＲ間引きや平滑化が用いられる。また、２値画像を縮小し、縮小率に応じた範囲に含まれる画素中の黒画素が所定の割合以上のときは、この範囲に対応する縮小画像の画素を黒画素にする。こうして、２値画像に点在する黒画素から黒画素の集まりを生成する。２値画像を縮小することにより、ぼかし処理を施した２値画像全体の画素数が減少し、以降の処理を高速に実行することができる。ＯＲ間引きを用いると、単位画素範囲に黒画素が存在すれば黒画素を、単位画素範囲内の画素がすべて白画素のときのみ白画素を選択することで２値画像の画素が間引かれ、ぼかし画像が得られる。適当なぼかし処理を施すと、ＱＲコードを１つの正方形の黒画素の集合と見なせるようになる。
【００４１】
ラベリング処理部１３３は、ぼかし画像の黒画素の集合に、属性としてラベル（番号）を付加する処理である。近接する黒画素をまとめ、１つのラベルを付加することで、黒画素の画素集合をグループとして分類する。ラベリング処理の目的は、ＱＲコードをほぼ正方形の黒画素のグループとして捉えることにあるので、ラベリング処理部１３３はおおまかなノイズは画素集合から除去し、ラベリングされた画素グループをラベルリスト１１４０に登録する。例えば、検出対象とするＱＲコードは正方形であるので、ある許容範囲内の矩形以外の形状の画素グループは、リストに登録しない。ラベルリスト１１４０に登録されたグループをラベル矩形またはラベルと呼ぶ。
【００４２】
ＱＲコード候補抽出部１３４は、ラベルリスト１１４０に登録されるラベル矩形から、ＱＲコード候補の条件を満たすラベル矩形を抽出し、ＱＲ候補リスト１１５０に登録する。ここでは、ぼかし画像に基づいてラベル矩形抽出の判断を行うことから、ＱＲコード候補抽出部１３４は、ラベル矩形の詳細な条件ではなく、ラベル矩形のシルエットといった形状がＱＲコードの外縁の形状と許容範囲内で一致しているかどうかを判定する。例えば、一定の偏平率のマージンをラベル矩形に対して設定し、概略正方形と見なせるラベル矩形をＱＲコード候補とする。ラベル矩形とＱＲコード外縁形状とが一致しないときは、画像にノイズが含まれていないかをラベル矩形の外側から内側に向かってチェックし、ノイズが検出されるときはこれを除去して、再度ラベル矩形とＱＲコード外縁形状との照合を行う。例えば、ラベル矩形の全体の幅に対して狭い幅を持つ線状の形状をノイズ条件とし、このような形状がラベル矩形から検出されれば、これをノイズとして除去し、ラベル矩形の範囲を補正する。例えば、クワイエットゾーン側に延びるノイズがあれば、ノイズが除去され、ラベル矩形が補正される。ラベル矩形補正の詳細は後述する。こうして、ぼかし画像で検出されたラベル矩形に基づいて、ＱＲコード候補が抽出される。
【００４３】
ＱＲコード精査判定部１３５は、ＱＲ候補リスト１１５０に登録される各ＱＲコード候補について、ぼかし画像のＱＲコード候補の範囲（ラベル矩形の領域）に対応する領域の２値画像を２値画像領域１１１０から読み出し、読み出した２値画像からＱＲコードのファインダパタンを検出する。そして、ＱＲコード精査判定部１３５はファインダパタンが検出されたＱＲコード候補をＱＲコードとして特定し、ＱＲリスト１１６０に登録する。例えば、前述のように、「１．正方形シンボルが３つ」、「２．正方形シンボルが３隅に存在する」及び「３．正方形シンボル内に別の正方形がある」という条件を用いてファインダパタンを検出する。この条件をすべて満たしたときは、このＱＲコード候補はＱＲコードであると判定する。なお、上記の条件をすべて満たさなくても、３つのファインダパタンのうち少なくとも１つのファインダパタンが検出され、残りのファインダパタンの推定位置にファインダパタンらしき形状が検出されれば、ＱＲコードと見なすこともできる。ＱＲコード精査判定部１３５は例えば、検出されたファインダパタン、あるいは検出されたファインダパタンとラベル矩形とから推定される他のファインダパタンの推定位置に存在する画像の形状をチェックする。そして、その形状がファインダパタンの上記の３条件を少なくとも１つ満たせば、ＱＲコード精査判定部１３５はラベル矩形をＱＲコードと見なす。これにより、低解像度・低品質でファインダパタンにノイズが混じっているような場合であっても、ＱＲコードを検出することができる。検出されたＱＲコードについて、その領域を示す位置情報を生成し、ＱＲリスト１１６０に登録する。このとき、ファインダパタンの位置や、ＱＲコードの画像が傾いている場合の傾きなども算出し、位置情報とともに登録しておく。
【００４４】
次に、ラベルリスト１１４０、ＱＲ候補リスト１１５０及びＱＲリスト１１６０について説明する。
図５は、ラベルリストの一例を示した図である。
【００４５】
ラベルリスト１１４０には、ラベリング処理部１３３が検出したラベル矩形が登録される。ラベルリスト１１４０には、ラベル矩形を識別する識別番号（Ｎｏ．）に対応し、矩形左上座標１１４１、矩形右下座標１１４２、矩形中心座標１１４３及び矩形長さ１１４５が登録される。
【００４６】
矩形左上座標１１４１には、ラベル矩形の４頂点のうち、左上の頂点の座標が設定される。矩形右下座標１１４２には、ラベル矩形の４頂点のうち、右下の頂点の座標が設定される。矩形左上座標と矩形右下座標とから、ラベル矩形の範囲が特定される。図５では、水平方向の座標をＸ、垂直方向の座標をＹとしている。
【００４７】
矩形中心座標１１４３には、矩形の中心の座標が設定される。図５では、水平方向の座標をｘ、垂直方向の座標をｙとしている。また、矩形長さ１１４５には、矩形の大きさを表す、水平方向の幅（Ｗ）と、垂直方向の高さ（Ｈ）とが設定される。
【００４８】
図５の例では、Ｎｏ．１からＮｏ．５までの５つのラベル矩形が登録されている。
図６は、ＱＲ候補リストの一例を示した図である。
ＱＲ候補リスト１１５０には、ＱＲコード候補抽出部１３４が、ラベルリスト１１４０から抽出したＱＲコード候補が登録される。ＱＲ候補リスト１１５０の各情報項目は、図５のラベルリスト１１４０と同様である。
【００４９】
図６の例では、ラベルリスト１１４０に登録されたラベル矩形から、Ｎｏ．２とＮｏ．５とがＱＲコード候補として抽出され、登録されている。
図７は、ＱＲリストの一例を示した図である。
【００５０】
ＱＲリスト１１６０には、ＱＲコード精査判定部１３５が、ＱＲ候補リスト１１５０から選択したＱＲコードの位置情報を含むコード情報が登録される。
矩形左上座標１１６１は、ラベルリスト１１４０の矩形左上座標１１４１と同様である。矩形右下座標１１６２は、ラベルリスト１１４０の矩形右下座標１１４２と同様である。ファインダパタン位置１１６３は、ＱＲコード候補から検出されたファインダパタンの位置座標が登録される。傾き１１６４には、画像上のＱＲコードの傾きが登録される。
【００５１】
次に、ＱＲコード認識部１４０について詳細に説明する。
図８は、ＱＲコード認識部を中心としたソフトウェア構成を示した図である。図４と同じものには同じ番号を付し、説明は省略する。なお、図８の実線矢印はデータの書き込みを表し、点線矢印はデータの読み出しを表す。
【００５２】
ＱＲコード認識部１４０は、２値化処理部１４１、パタン検出部１４２、サイズ算出部１４３、モジュール割当部１４４、デコード処理部１４５及び誤り判定部１４６を有する。
【００５３】
また、コード情報記憶部１１０ｂには、図４に示した情報に加え、パタンリスト１１７０、傾き・幅・高さリスト１１８０及びリードソロモン（Reed-Solomon、以下、ＲＳとする）ブロックリスト１１９０が格納される。パタンリスト１１７０には、パタン検出部１４２が検出したファインダパタン、タイミングパタンなどの機能パタンの位置を示す座標が格納される。傾き・幅・高さリスト１１８０には、サイズ算出部１４３が算出した各パタンの幅及び高さ、画像の傾きなどの情報が格納される。ＲＳブロックリスト１１９０には、ＱＲコードに組み込まれるＲＳブロックごとの誤り訂正の成否が記録される。
【００５４】
ＱＲコード認識部１４０の各処理部について説明する。
２値化処理部１４１は、ＱＲリスト１１６０を読み出し、矩形左上座標１１６１及び矩形右下座標１１６２によって指定されたＱＲコードの位置座標に基づき、ＱＲコードの画像データを元画像領域１１００から読み出し、２値化処理する。サブピクセル化を行った後、２値化処理を行うとしてもよい。２値化処理部１４１は、２値化したＱＲコード画像を、２値画像領域１１１０に格納する。なお、ＱＲコード抽出部１３０が生成した２値画像を用いるとすることもできる。しかし、ＱＲコード抽出部１３０及びＱＲコード認識部１４０は、処理状況に応じて２値化処理の手法を適宜選択するので、ここでは、ＱＲコード認識部１４０が、以降の処理手順の実行前に改めて元画像に対する２値化処理を行うとする。２値化処理の手順は、ＱＲコード抽出部１３０の処理と同様である。しかしながら、２値化の対象範囲は、ＱＲコードの領域に限定されるので、入力画像全体を２値化するＱＲコード抽出部１３０の場合と比較し、２値化のための処理時間は少なくて済む。
【００５５】
パタン検出部１４２は、図２に示したＱＲコード２０のファインダパタン２１ａ，２１ｂ，２１ｃ、タイミングパタン２２ａ，２２ｂ及び位置合わせパタン２３ａを、読み出したＱＲコードの画像データから検出する。画像データから検出されたパタンの位置は、パタンリスト１１７０に設定する。なお、ＱＲリスト１１６０に予めファインダパタン位置１１６３が設定されているときは、ファインダパタンの検出を省略するとしてもよい。
【００５６】
サイズ算出部１４３は、検出されたファインダパタン２１ａ，２１ｂ，２１ｃと、タイミングパタン２２ａ，２２ｂと、に基づいて、ＱＲコードを構成するモジュールに割り当てる各仮モジュールの幅と高さを算出し、またＱＲコード画像全体の傾きを算出する。サイズ算出部１４３は例えば、互いに水平方向に配置されるファインダパタン２１ａとファインダパタン２１ｂとの間のずれを検出し、水平方向の傾きを算出する。同様にサイズ算出部１４３は、互いに垂直方向に配置されるファインダパタン２１ｂとファインダパタン２１ｃとの間のずれを検出し、垂直方向の傾きを算出する。サイズ算出部１４３はまた、１モジュールごとに白と黒が交互に配置されるタイミングパタン２２ａ，２２ｂに基づいて、各仮モジュールの幅（横の画素数）と、高さ（縦の画素数）とを算出する。算出結果は、傾き・幅・高さリスト１１８０に設定する。
【００５７】
モジュール割当部１４４は、サイズ算出部１４３で設定された傾き・幅・高さリスト１１８０に基づき、仮モジュールを生成し、２値画像領域１１１０に格納される２次元コードの２値画像に割り当てる。モジュール割当部１４４は、傾き・幅・高さリスト１１８０に基づき、仮モジュールの幅と高さを決定し、ＱＲコードの傾きや画像の状況に応じて仮モジュールを変形する。モジュール割当部１４４はこのとき、既に配置されたモジュールと組み合わさるように仮モジュールの割当を行う。必要であれば、既割当のモジュールに合わせて仮モジュールを変形し、ＱＲコードの２値画像に割り当てていく。所定の範囲、例えば、１モジュール列、あるいはＱＲコード全体についてモジュールの割り当てが終了したときは、モジュール割当部１４４は仮モジュールを割り当てた２値画像と、ＱＲコードの元の２値画像とのずれを計測する。そして、ずれが予め設定される閾値より大きいときは、モジュール割当部１４４は仮モジュールの割当処理をやり直す。なお、モジュールの割当処理は、ＱＲコードの４隅のうちの１つを選択し、そこを起点として開始する。また、ＱＲコードに位置合わせパタンが検出できた場合は、検出された位置合わせパタンを起点としてモジュール割り当てを行うとしてもよい。さらに、複数の位置合わせパタンが検出できた場合は、各位置合わせパタンから開始し、位置合わせパタンが囲む領域の内側に向かってモジュール割り当てを行うとしてもよい。モジュールの割当処理は、２値画像領域１１１０に格納されている画像を２値画像領域（複写）１１３０に複写しながら行われる。
【００５８】
デコード処理部１４５は、２値画像領域（複写）１１３０に格納されるＱＲコードの２値画像に基づき、ＱＲコードのデコード処理を行う。このとき、デコード処理部１４５はＲＳブロック単位で訂正の成否を判定し、結果をＲＳブロックリスト１１９０に登録しておく。
【００５９】
誤り判定部１４６は、ＲＳブロックリスト１１９０を参照し、誤り訂正ができなかったＲＳブロックを特定する。各ＲＳブロックを構成するモジュールの場所は決められているので、誤り判定部１４６は、誤り訂正ができなかったＲＳブロックに属するモジュールについて、位置決めが間違っていると判断する。誤り判定部１４６は、誤り訂正ができなかったＲＳブロックが存在し、その数が所定の閾値以下の場合に、誤り訂正ができなかったＲＳブロックに属するモジュールについてのみ、モジュールの割り当てをやり直す。モジュールの割り当てのやり直しは、対象ＲＳブロックについて仮モジュールの変形を調整し、変形した仮モジュールの再度の割り当てを行う。また、未使用の２値化処理方法を選択し、選択した２値化処理方法による２値化処理からの手順を再度行うとしてもよい。なお、このとき再割り当てを行うのは、誤り訂正符号による誤り訂正ができなかったＲＳブロックのみとする。
【００６０】
次に、パタンリスト１１７０、傾き・幅・高さリスト１１８０及びＲＳブロックリスト１１９０について説明する。
図９は、パタンリストの一例を示した図である。
【００６１】
パタンリスト１１７０には、パタン検出部１４２が検出したＱＲコードのファインダパタン、タイミングパタン及び位置合わせパタンの座標が登録される。各パタンを識別する識別番号に対応付けて、パタンの矩形左上座標１１７１と、矩形右下座標１１７２とが設定される。
【００６２】
図１０は、幅・高さリスト及び傾きリストの一例を示した図である。
幅・高さリスト１１８０には、サイズ算出部１４３が算出したモジュールごとの幅１１８１と、高さ１１８２とが、モジュールを識別する識別番号に対応付けて登録される。また、傾きリスト１１８３には、サイズ算出部１４３が算出したＱＲコード画像の傾きが登録される。
【００６３】
図１１は、ＲＳブロックリストの一例を示した図である。
ＲＳブロックリスト１１９０には、デコード処理部１４５が検出したＲＳブロックごとに誤り訂正の成否が登録される。ＲＳブロックリスト１１９０には、ＲＳブロックの識別情報１１９１に対応付けて、そのＲＳブロックの誤り訂正の成否１１９２が設定される。
【００６４】
このような構成のＱＲコード読取装置１００により、ＱＲコードの抽出と認識処理とが実行される。以下、それぞれの処理の詳細について、ＱＲコード抽出処理、ＱＲコード認識処理の順に説明する。
【００６５】
（１）ＱＲコード抽出処理
ＱＲコード抽出部１３０は、処理が開始されると処理対象の元画像データを元画像領域１１００から読み出し、２値化処理部１３１が読み出した元画像データに対する２値化処理を行い、２値画像を生成する。２値化処理部１３１により生成された２値画像は、２値画像領域１１１０に格納する。
【００６６】
続いて、ぼかし処理部１３２が、２値画像領域１１１０に格納された２値画像を読み出してぼかし処理する。
図１２は、ぼかし処理の概要を示した図である。図１２の例では、ぼかし処理としてＯＲ間引きを行うとする。なお、間引き画像はイメージであり、実際のぼかし画像を示すものではない。
【００６７】
２値画像１１０１は、元画像データを２値化した画像であり、ＱＲコード２１１とともに、文字が読み込まれている。
ＯＲ間引き１／２は、元の２値画像の画素数を縦・横ともに１／２にする間引き処理である。２値画像１１０１の４画素（例えば、縦２画素×横２画素）内に黒画素が１つでも含まれるときは、黒画素を選択して２値画像の間引き処理を行う。ＯＲ間引き１／２を施したぼかし画像１１０２では、ＱＲコード２１２は、黒画素が所定の割合以上を占める正方形となっている。なお、ＱＲコード以外の部分も黒の正方形と見なせる場合もある。図１２の例では、文字の部分がほぼ黒の正方形になっている。
【００６８】
ＯＲ間引き１／４は、元の２値画像の画素数を縦・横ともに１／４にする間引き処理であり、さらに間引き率が上がる。２値画像１１０１の１６画素（例えば、縦４画素×横４画素）を単位として、ＯＲ間引き１／２と同様の処理を行う。ＯＲ間引き１／４を施したぼかし画像１１０３では、ＱＲコード２１３は、さらに、黒画素が所定の割合以上を占める正方形となっている。
【００６９】
ＱＲコードは隙間だらけの正方形であるが、クワイエットゾーン２４によって形成されるＱＲコードの周りの隙間は４モジュールあるということから、２値画像に対してぼかし処理を行うと、ＱＲコード部分は、黒画素が所定の割合以上を占めるおおよそ正方形の画像として抽出される。また、クワイエットゾーン２４により、ＱＲコード部分が他の画像とは切り離される。
【００７０】
ラベリング処理部１３３では、黒画素の集まりを見つけて、黒画素集合にラベルを付すラベリング処理を行い、検出されたラベルをラベルリスト１１４０に登録する。ぼかし画像１１０２，１１０３では、ＱＲコードは黒画素の集まりと見なすことができるので、ラベルリング処理によって抽出され、ラベルリスト１１４０に登録される。なお、ラベリング処理部１３３では、ぼかし画像に存在するＱＲコード以外の黒画素の集まりを抽出し、ラベルリスト１１４０に登録する可能性がある。
【００７１】
続いて、ＱＲコード候補抽出部１３４は、ラベルリスト１１４０の登録ラベルからＱＲコード候補を抽出し、抽出したＱＲコード候補をＱＲ候補リスト１１５０に登録する。ここでは、ＱＲコードの形状の特徴である「正方形」に基づき、ＱＲコード候補抽出部１３４は偏平率に一定のマージンを設けた範囲内の正方形に近い形状のラベル矩形をＱＲコード候補とする。このとき、ＱＲコード候補抽出部１３４はＱＲコード外部のクワイエットゾーンに発生しているノイズの除去も行う。なお、ＱＲコード候補抽出部１３４では、ぼかし画像に存在するＱＲコード以外の黒い正方形をＱＲコード候補として抽出する可能性がある。
【００７２】
以下、ノイズ除去について説明する。
図１３は、ＱＲコードの上方向にノイズがある場合のノイズ除去の例を示した図である。
【００７３】
（Ａ）ラベリング処理実行後の状態では、ＱＲコード２２０の上方向に発生しているノイズ３１０を含めてＱＲコード候補がラベリングされている。このときのラベル範囲４１０は、ノイズ３１０を含む縦長の形状になっている。なお、「ラベル範囲」とは、ラベリングされているＱＲコード候補の範囲を指す。
【００７４】
ＱＲコード候補抽出部１３４では、ラベル範囲４１０が縦長であることが検出されたときは、上下方向のノイズ除去処理を行う。ラベル範囲４１０の画像を上から下に向かって、または下から上に向かって横方向に走査し、ノイズ条件と合致する形状の画像を探索する。ＱＲコード部分の画像であれば、画像内をほぼ黒画素が占めることから、黒画素の幅の狭い部分をノイズと判断することができる。またＱＲコード候補抽出部１３４は、上または下から順にラベル範囲４１０を走査し、ＱＲコード２２０と見なせる画像が検出されたときに走査を終了する。こうして、ノイズ３１０の位置を特定し、検出したノイズ３１０が含まれる領域を、ラベル範囲４１０から削除する。なお、ノイズの幅や本数は、環境ファイルやパラメタで取り込み画像に応じて設定できるとする。
【００７５】
この結果、（Ｂ）領域調整後に示したように、ラベルの領域は、ラベル範囲４１０のノイズ３１０が除去されたラベル範囲４１１に調整される。ラベル範囲４１１が、正方形と見なせる範囲となったら処理を終了する。図１３の例では、ここで処理を終了し、ラベル範囲４１１が、ラベル矩形の画像領域になる。
【００７６】
図１４は、ＱＲコードの上方向と右方向にノイズがある場合のノイズ除去の例を示した図である。
（Ａ）ラベリング処理実行後の状態では、ＱＲコード２３０の上方向に発生しているノイズ３２０と、右方向に発生しているノイズ３２１とを含めてラベリングされている。このときのラベル範囲４２０は、ノイズ３２０，３２１を含む縦長の形状になっている。
【００７７】
ＱＲコード候補抽出部１３４では、ラベル範囲４２０が縦長であることを検出し、図１３と同様にして上方向のノイズ３２０の位置を特定する。こうして、（Ｂ）上下領域調整後に示したように、ラベルの領域は、ラベル範囲４２０のノイズ３２０が除去されたラベル範囲４２１に調整される。すると、ラベル範囲４２１は横長になるので、ラベル範囲４２１の画像を右から左に向かって、または左から右に向かって縦方向に走査し、ノイズ条件と合致する形状を持つ画像を探索する。方向が異なるだけで、走査手順は上下方向のノイズの場合と同様である。こうして、ノイズ３２１の位置を特定し、検出したノイズ３２１が含まれる領域を、ラベル範囲４２１から削除する。
【００７８】
この結果、（Ｃ）左右領域調整後に示したように、ラベルの領域は、ラベル範囲４２１のノイズ３２１が除去されたラベル範囲４２２に調整される。垂直方向及び水平方向のノイズを検出したので、処理を終了する。
【００７９】
なお、ここではラベル範囲が縦長または横長であることを検出してノイズ除去処理を行うとしている。ノイズの状態によっては、ノイズを含んだラベル範囲が正方形になる場合も想定される。すべてのラベル範囲に対してノイズ検査を行えば、このようなケースのノイズも除去できる。しかし、これは特殊なケースであり、そのためにすべてのラベル範囲についてノイズ検査を行うのは、効率的ではない。また、次処理では、より詳細にラベルのチェックを行うので、実施の形態では、縦長または横長をノイズ除去処理の開始条件とする。
【００８０】
以上の処理手順が実行され、所定の許容範囲内で正方形と認められたラベル矩形が選択され、ＱＲ候補リスト１１５０に登録される。
次に、ＱＲコード精査判定部１３５は２値画像を用いて、ＱＲ候補リスト１１５０に登録されるＱＲコード候補がＱＲコードであるかどうかを判定する。ＱＲコード精査判定部１３５は、ぼかし画像のＱＲコード候補の領域に対応する２値画像を２値画像領域１１１０から読み出し、２値画像を走査してＱＲコードのファインダパタンを検出する。ここでは、上記の「３隅の正方形シンボル内に別の正方形がある」という条件により、ファインダパタンを検出する。ＱＲコード以外はファインダパタンが検出できないことから、ＱＲコード候補抽出部１３４においてＱＲコード以外の黒い正方形がＱＲコード候補として抽出されていた場合であっても、ＱＲコード以外の黒い四角形はＱＲコードと認められない。
【００８１】
しかし、画像が低解像度または低品質である場合、２値画像であってもファインダパタンにノイズが混じっていることが考えられる。そこで、ＱＲコード候補の画像から少なくとも１つのファインダパタンが検出できた場合、他のファインダパタンの推定位置にファインダパタンらしきシンボルが検出できれば、ＱＲコード精査判定部１３５は、この２値画像はＱＲコードであると判定する。具体例を用いて説明する。
【００８２】
図１５は、ファインダパタンの画像にノイズが混じっている例を示した図である。
ＱＲコード２４０には、３隅にファインダパタン２４１ａ，２４１ｂ，２４１ｃがある。しかし、画像が低解像度または低品質のため、図１５の例ではファインダパタン２４１ａにはノイズ３３１ａ、ファインダパタン２４１ｂにはノイズ３３１ｂが混じっている。このため、ファインダパタン２４１ｃは検出されるが、ファインダパタン２４１ａ，２４１ｂはノイズの影響でファインダパタンと認識されない。そこで、検出されたファインダパタン２４１ｃと、ＱＲコード候補抽出部１３４で検出されたＱＲコード候補の外縁を示すラベル範囲とに基づいて、残りの２つのファインダパタンの位置を推定する。そして、推定位置に、例えば、ファインダパタンの黒画素の外枠部分あるいは黒の正方形が検出できるかどうかを判定する。黒画素の外枠の外縁は、ＱＲコード候補のラベル範囲とほぼ等しく、かつ、クワイエットゾーンによって周囲から切り離されているので検出しやすい。例えば、図１５のファインダパタン２４１ｂは、ノイズ３３１ｂによってファインダパタンとして検出されないが、黒画素の外枠は検出可能である。また、内側の黒の正方形は、ＱＲコードであれば黒画素の外枠の内側に白画素の枠が存在するので、検出しやすい。例えば、図１５のファインダパタン２４１ａは、ノイズ３３１ａによりファインダパタンとして検出されない。また、黒画素の外枠もノイズ３３１ａがＱＲコード外部にも伸びていることから、検出することができない。しかし、内側の黒の正方形は検出可能である。推定位置から黒画素の外枠部分あるいは黒の正方形を検出できた場合には、このＱＲコード候補は真のＱＲコードであると判定する。なお、黒画素の外枠と、内側の黒い正方形の間の白の枠をファインダパタンの判定に用いる検出対象とすることもできる。また、２つのファインダパタンが検出できたときは、その２つのファインダパタンから残りの１つのファインダパタンの位置を推定する。そして、上記と同様に、推定位置から黒画素の外枠部分あるいは黒の正方形を検出できるかどうかで、ＱＲコード候補が真のＱＲコードか否かを判定する。また、ファインダパタンの推定位置の中心を直線的に横切ったときの黒画素のヒストグラムをファインダパタンのヒストグラムと比較し、黒画素ヒストグラムがファインダパタン固有のヒストグラムとほぼ一致すればファインダパタンと判定するとしてもよい。
【００８３】
このように、２値画像からのファインダパタンの検出は、ＱＲコード候補の領域のみで行われるので、画像全体でファインダパタンの検出処理を行う場合に比べ、処理に要する時間を短縮することができる。また、ＱＲコード候補抽出時点でＱＲコードの範囲が特定できているので、特定されたＱＲコード候補の領域から少なくとも１つのファインダパタンを検出できれば、その領域内の他のファインダパタンの推定位置を算出し、ファインダパタンと見なせるシンボルの有無を検査できる。これにより、従来ＱＲコードが検出できなかった低解像度・低品質の画像からＱＲコードを抽出することが可能となる。
【００８４】
次に、ＱＲコード抽出方法の処理手順をフローチャートを用いて説明する。
図１６は、ＱＲコード抽出処理全体の手順を示したフローチャートである。
元画像領域１１００に格納される元画像データを読み出して、処理が開始される。
【００８５】
［ステップＳ１１］  ２値化処理部１３１が、用意されている２値化処理のうち、実行していない２値化処理方法が有るかどうかを判定する。「有」のときは、処理をステップＳ１２に進める。「無」のときは、処理をステップＳ２１に進める。
【００８６】
［ステップＳ１２］  実行していない２値化処理方法が「有」のときは、指定の２値化処理方法による元画像の２値化を行う。場合によっては、元画像に対するサブピクセル化を行った後、元画像の２値化処理を行ってもよい。２値化処理は、例えば、複数の２値化処理方法に予め優先順位を設定しておき、前に実行した２値化処理方法の次の優先度を持つ２値化方法が指定されるとする。また、利用者に未実行の２値化処理方法を提示し、いずれか１つを指定させるとしてもよい。
【００８７】
［ステップＳ１３］  ぼかし処理部１３２が、ステップＳ１２で２値化した２値画像のぼかし処理を行うために、ステップＳ１２で２値化処理された２値画像について、実行していないぼかし処理方法があるかどうかを判定する。「有」のときは、処理をステップＳ１４に進める。「無」のときは、処理をステップＳ１１に戻し、２値化処理方法の指定からの手順を繰り返す。
【００８８】
［ステップＳ１４］  ２値画像に対して実行していないぼかし処理方法が「有」のときは、指定のぼかし処理方法によるぼかし処理を行う。ぼかし処理方法の指定は、ステップＳ１２の２値化処理方法の指定と同様に行う。
【００８９】
［ステップＳ１５］  ラベリング処理部１３３が、ステップＳ１４で生成されたぼかし画像に基づいて、黒画素の割合が所定値以上のグループを検出し、検出したグループに対してラベルを設定する。設定されたラベルは、検出されたラベルの範囲を示す座標や大きさなどが、ラベルに付与されたラベル識別番号に対応付けられ、ラベルリスト１１４０に登録される。
【００９０】
［ステップＳ１６］  ＱＲコード候補抽出部１３４が、ぼかし画像を用いて、ラベルリスト１１４０に登録されたラベルの形状がＱＲコードの外縁の形状（正方形）であるかどうかをチェックし、ＱＲコード候補を抽出する。なお、このとき、ぼかし画像のノイズチェックを行い、ラベルの外側に向かって延びるノイズが検出されるときは、このノイズを除去してラベル範囲を補正して、形状チェックを行う。詳細は後述する。
【００９１】
［ステップＳ１７］  ステップＳ１６においてＱＲコード候補が検出されたか否かを判定する。ＱＲコード候補が検出されたときは、処理をステップＳ１８に進める。ＱＲコード候補が検出されなかったときは、処理をステップＳ１３に戻し、ぼかし処理方法の指定からの処理手順を繰り返す。ぼかし処理方法が異なれば、生成されるラベルも異なるので、２値画像に対して複数のぼかし処理方法を順番に実行し、ＱＲコード候補が検出できるぼかし処理方法を選ぶ。
【００９２】
［ステップＳ１８］  ＱＲコード候補が検出されたときは、ＱＲコード精査判定部１３５が、ＱＲコード候補が真のＱＲコードであるかどうかを詳細にチェックする。ＱＲコード精査判定部１３５は、ステップＳ１６で特定されたＱＲコード候補のラベル範囲に相当する２値画像を読み出し、２値画像からファインダパタンを検出する。２値画像からファインダパタンが検出できれば、ＱＲコード精査判定部１３５は２値画像を真のＱＲコードと判定する。詳細は後述する。
【００９３】
［ステップＳ１９］  ステップＳ１８の処理で、真のＱＲコードが検出できたかどうかを判定する。真のＱＲコードが検出できたときは、処理をステップＳ２０に進める。真のＱＲコードが検出できなかったときは、処理をステップＳ１３に戻し、ぼかし処理方法の指定からの処理手順を繰り返す。
【００９４】
［ステップＳ２０］  真のＱＲコードが検出できたときは、ＱＲコードの抽出成功と判断し、ＱＲコード抽出の処理を終了する。
［ステップＳ２１］  真のＱＲコードが検出できず、かつ、実行していない２値化処理が存在しないときは、ＱＲコードの抽出失敗と判断し、処理を終了する。
【００９５】
次に、ＱＲコード候補の抽出処理について説明する。図１７は、ＱＲコード候補の抽出処理の手順を示したフローチャートである。
ラベルリスト１１４０に黒画素の集まりが登録された後、１つのラベルが選択され、処理が開始される。
【００９６】
［ステップＳ１６１］  ラベルリスト１１４０から対象ラベルの矩形長さを読み出し、ラベル範囲の幅（Ｗ）と高さ（Ｈ）の比率が正方形からどの程度ずれているかを、偏平率として算出する。そして、算出された偏平率が予め決めた所定の閾値範囲内であるかどうかを判定する。ここでの閾値は、ＱＲコードの外側にゴミ（ノイズなどによるＱＲコードの外側にはみ出た部分）があった場合を想定して設定される。すなわち、明らかにＱＲコードの形状ではないというラベルを検査対象から取り除くための閾値が設定される。偏平率が閾値範囲内であれば、処理をステップＳ１６２に進める。偏平率が閾値範囲内を超えていれば、処理をステップＳ１７４に進める。
【００９７】
［ステップＳ１６２］  ラベル範囲の偏平率が閾値範囲内であるときは、さらに、偏平率が予め決められた正方形範囲内であるかどうかを判定する。ここでは、ほぼ正方形の矩形とそれ以外の矩形とを区別するための閾値が設定される。偏平率が正方形範囲内でなければ、処理をステップＳ１６３に進める。偏平率が正方形範囲内であれば、処理をステップＳ１７３に進める。
【００９８】
［ステップＳ１６３］  正方形範囲内にはないと判定されたラベル範囲が縦長であるかどうか、すなわち、ラベル範囲の幅よりも高さのほうが大きいかどうかを判定する。ラベル範囲が縦長であるときは、処理をステップＳ１６４に進める。ラベル範囲が縦長でないとき、すなわち横長のときは処理をステップＳ１６８に進める。
【００９９】
［ステップＳ１６４］  ラベル範囲が縦長のときは、縦方向のノイズチェック処理を行い、縦方向のノイズを除去する。処理の詳細は後述する。
［ステップＳ１６５］  縦方向のノイズチェック処理後のラベル範囲の偏平率を算出し、偏平率が正方形範囲内になったかどうかを判定する。ラベル範囲の偏平率が正方形範囲内でなければ、処理をステップＳ１６６に進める。ラベル範囲の偏平率が正方形範囲内であれば処理をステップＳ１７３に進める。
【０１００】
［ステップＳ１６６］  縦方向のノイズが除去されたラベル範囲の偏平率が正方形範囲内でなければ、ノイズ除去後のラベル範囲が横長であるかどうかを判定する。ラベル範囲が横長であれば、処理をステップＳ１６７に進める。横長でなければ、処理をステップＳ１７４に進める。
【０１０１】
［ステップＳ１６７］  ラベル範囲の偏平率が横長であるときは、横方向のノイズチェックを行い、横方向のノイズを除去する。処理の詳細は後述する。これにより、縦方向に加え、横方向のノイズを除去する。ノイズチェック終了後、処理をステップＳ１７２に進める。
【０１０２】
［ステップＳ１６８］  ステップＳ１６３の判断の結果、ラベル範囲が横長のときは、横方向のノイズチェック処理を行い、横方向のノイズを除去する。
［ステップＳ１６９］  横方向のノイズチェック処理後のラベル範囲の偏平率を算出し、偏平率が正方形範囲内になったかどうかを判定する。ラベル範囲の偏平率が正方形範囲内でなければ、処理をステップＳ１７０に進める。ラベル範囲の偏平率が正方形範囲内であれば処理をステップＳ１７３に進める。
【０１０３】
［ステップＳ１７０］  ノイズ除去後のラベル範囲の偏平率が正方形範囲内でなければ、ラベル範囲が縦長であるかどうかを判定する。ラベル範囲が縦長であれば、処理をステップＳ１７１に進める。縦長でなければ、処理をステップＳ１７４に進める。
【０１０４】
［ステップＳ１７１］  ラベル範囲の偏平率が縦長であるときは、縦方向のノイズチェックを行い、縦方向のノイズを除去する。これにより、横方向に加え、縦方向のノイズを除去する。
【０１０５】
［ステップＳ１７２］  縦横方向のノイズチェック処理後のラベル範囲の偏平率を算出し、偏平率が正方形範囲内になったかどうかを判定する。ラベル範囲の偏平率が正方形範囲内であれば、処理をステップＳ１７３に進める。ラベル範囲の偏平率が正方形範囲内でなければ処理をステップＳ１７４に進める。
【０１０６】
［ステップＳ１７３］  ラベル範囲の偏平率が正方形範囲内であるときは、このラベルをＱＲコード候補とし、ＱＲ候補リスト１１５０に登録する。その後、処理を終了する。
［ステップＳ１７４］  ラベル範囲の偏平率が正方形範囲内にならないときは、このラベルをＱＲコード候補から除外し、処理を終了する。
【０１０７】
こうして、１つのラベルについて処理が終了したときは、ラベルリスト１１４０に登録されている次のラベルについて上記処理手順を実行する。ラベルリスト１１４０に登録されているすべてのラベルについて処理が終了したとき、ＱＲコード候補の抽出処理を終了する。
【０１０８】
次に、縦方向のノイズチェック処理について説明する。図１８は、縦方向のノイズチェック処理の手順を示したフローチャートである。
ラベル範囲が縦長であることが検出され、処理が開始される。
【０１０９】
［ステップＳ１６４１］  ラベル範囲の画像を、ラベル範囲の上限から下方向に向かって横方向に走査し、横方向に走査された１ライン中で連続して検出された黒画素の数と、その黒画素の集まりの本数をカウントする。
【０１１０】
［ステップＳ１６４２］  ステップＳ１６４１でカウントした黒画素がノイズ条件を満たすかどうか判定する。例えば、１ライン中に連続して検出された黒画素の数（ゴミの幅になる）の最大値と、黒画素の集まりの本数（ゴミの本数になる）の最大値とを決めておき、カウントされた黒画素数あるいは本数がその範囲内であるかどうかで、ノイズ条件を判定する。例えば、カウントされた黒画素数が最大値を超える場合には、その黒画素はゴミではないと判定する。これにより、幅の狭いひげ状のゴミを検出することができる。なお、ノイズ条件は、取り込み画像に応じて適宜設定される。カウントされた黒画素がノイズ条件を満たしているときは、処理をステップＳ１６４３に進める。黒画素がノイズ条件を満たしていないときは、処理をステップＳ１６４４に進める。
【０１１１】
［ステップＳ１６４３］  走査された１つの横ラインでカウントされた黒画素がノイズ条件を満たしているときは、次のラインを横方向に走査し、ステップＳ１６４２に戻って次のラインにゴミが検出されるかどうか判定する。
【０１１２】
［ステップＳ１６４４］  走査された横ラインでカウントされた黒画素がノイズ条件を満たしていないときは、ゴミの領域は終了したと判断する。そして、ラベル上限、つまりＱＲコード候補の上端を、この横ラインの位置に更新する。
【０１１３】
［ステップＳ１６４５］  ラベル範囲の画像を、ラベル範囲の下限から上方向に向かって１ラインごとに横方向に走査し、横方向に走査された１ラインで連続して検出された黒画素の数と、その黒画素の集まりの本数をカウントする。
【０１１４】
［ステップＳ１６４６］  ステップＳ１６４５でカウントした１ライン中の黒画素がノイズ条件を満たすかどうか判定する。条件は、ステップＳ１６４２と同様にする。１ライン中の黒画素がノイズ条件を満たしていないときは、処理をステップＳ１６４８に進める。ノイズ条件を満たしているときは、処理をステップＳ１６４７に進める。
【０１１５】
［ステップＳ１６４７］  １ライン中でカウントされた黒画素がノイズ条件を満たしているときは、次のラインを横方向に走査し、ステップＳ１６４６に戻って次のラインにゴミが検出されるかどうか判定する。
【０１１６】
［ステップＳ１６４８］  カウントされた１ライン中の黒画素がノイズ条件を満たしていないときは、ゴミの領域は終了したと判断する。そして、ラベル下限を、このラインの位置に更新し、処理を終了する。
【０１１７】
なお、ラベル範囲下限から先にノイズチェックするとしてもよい。
次に、ラベル範囲の横方向のノイズチェック処理について説明する。図１９は、横方向のノイズチェック処理の手順を示したフローチャートである。
【０１１８】
ラベル範囲が横長であることが検出され、処理が開始される。
［ステップＳ１７０１］  ラベル範囲の画像を、ラベル範囲の左限から右方向に向かって１ラインずつ縦方向に走査し、１ライン中で連続して検出された黒画素の数と、その黒画素の集まりの本数をカウントする。
【０１１９】
［ステップＳ１７０２］  ステップＳ１７０１でカウントした１ライン中の黒画素がノイズ条件を満たすかどうか判定する。ノイズ条件は、縦長のノイズチェックと同様にする。判定対象の１ラインがノイズ条件を満たしているときは、処理をステップＳ１７０３に進める。ノイズ条件を満たしていないときは、処理をステップＳ１７０４に進める。
【０１２０】
［ステップＳ１７０３］  カウントされた１ライン中の黒画素がノイズ条件を満たしているときは、次のラインを縦方向に走査し、ステップＳ１７０２に戻って次のラインにゴミが検出されるかどうか判定する。
【０１２１】
［ステップＳ１７０４］  カウントされた１ライン中の黒画素がノイズ条件を満たしていないときは、ゴミの領域は終了したと判断する。そして、ラベル左限を、この縦ラインの位置に更新する。
【０１２２】
［ステップＳ１７０５］  ラベル範囲の画像を、ラベル範囲の右限から左に向かって１ラインずつ縦方向に走査し、１ライン中で連続して検出された黒画素の数と、その黒画素の集まりの本数をカウントする。
【０１２３】
［ステップＳ１７０６］  ステップＳ１７０５でカウントした１ライン中の黒画素がノイズ条件を満たすかどうか判定する。条件は、ステップＳ１７０２と同様にする。ノイズ条件を満たしていないときは、処理をステップＳ１７０８に進める。ノイズ条件を満たしているときは、処理をステップＳ１７０７に進める。
【０１２４】
［ステップＳ１７０７］  カウントされた１ライン中の黒画素がノイズ条件を満たしているときは、次のラインを縦方向に走査し、ステップＳ１７０６に戻って次のラインにゴミが検出されるかどうか判定する。
【０１２５】
［ステップＳ１７０８］  カウントされた１ライン中の黒画素がノイズ条件を満たしていないときは、ゴミの領域は終了したと判断する。そして、ラベル右限を、この縦ラインの位置に更新し、処理を終了する。
【０１２６】
なお、右限から先にチェックするとしてもよい。
次に、ＱＲコード候補の精査処理について説明する。図２０は、ＱＲコード候補の精査処理の詳細を示したフローチャートである。
【０１２７】
ＱＲ候補リスト１１５０にＱＲコード候補が登録された後、１つのＱＲコード候補が選択され、処理が開始される。
［ステップＳ１８０１］  ２値画像から選択されたＱＲコード候補の領域の画像を読み出し、ファインダパタンを抽出する。ファインダパタンは、例えば、「ＱＲコード候補領域の３隅の正方形シンボル内に別の正方形がある」という条件で抽出する。
【０１２８】
［ステップＳ１８０２］  ステップＳ１８０１によるファインダパタン抽出によって、３つのファインダパタンすべてが抽出されたかどうかを判定する。抽出できた抽出パタンが３つであれば、抽出完了として処理をステップＳ１８１１に進める。抽出パタンが３つでなければ、処理をステップＳ１８０３に進める。
【０１２９】
［ステップＳ１８０３］  抽出パタンが３つでないときは、抽出パタンが２つであるかどうかを判定する。２つであれば処理をステップＳ１８０４に進める。抽出パタンが２つでなければ、処理をステップＳ１８０５に進める。
【０１３０】
［ステップＳ１８０４］  抽出パタンが２つのときは、抽出された２つのファインダパタンの位置から、残りの１つのファインダパタンの位置を推定し、処理をステップＳ１８０７に進める。
【０１３１】
［ステップＳ１８０５］  抽出パタンが２つでないときは、抽出パタンが１つであるかどうかを判定する。１つ抽出されれば処理をステップＳ１８０６に進める。１つもパタンが抽出されないときは、抽出不可として処理をステップＳ１８１０に進める。
【０１３２】
［ステップＳ１８０６］  抽出パタンが１つのときは、抽出されたファインダパタンの位置と、ＱＲコード候補のラベル範囲とに基づいて、残り２つのパタンの位置を推定する。
【０１３３】
［ステップＳ１８０７］  ファインダパタンの推定位置に、黒画素の外枠があるかどうかを判定する。黒画素の外枠は、ファインダパタンの内側の白画素と黒画素の正方形を囲む枠状の形状をいう。黒画素の外枠があれば、ファインダパタンと推定し、処理をステップＳ１８１１に進める。黒画素の外枠がないときは、処理をステップＳ１８０８に進める。
【０１３４】
［ステップＳ１８０８］  ファインダパタンの推定位置に黒画素の外枠がないときは、推定位置の内側に黒画素の正方形領域があるかどうかを判定する。推定位置の内側に黒画素の正方形領域があれば、ファインダパタンと推定し、処理をステップＳ１８１１に進める。黒画素の正方形領域がないときは、処理をステップＳ１８０９に進める。
【０１３５】
［ステップＳ１８０９］  ファインダパタンの推定位置の内側に黒画素の正方形領域がないときは、ファインダパタンの推定位置の中央付近を横切る画素のヒストグラムを求める。ついで、ヒストグラムがファインダパタンの画素構成と一致するか否かを判定する。ヒストグラムがファインダパタンの画素構成と一致するときは、推定位置の画像をファインダパタンと推定し、処理をステップＳ１８１１に進める。ヒストグラムがファインドパタンの画素構成と一致しないときは、処理をステップＳ１８１０に進める。
【０１３６】
［ステップＳ１８１０］  ファインダパタンが１つも検出されないとき、または検出された１または２のファインダパタンから推定される推定位置にファインダパタンの形状の特徴が検出できなかったときは、２値画像はＱＲコードでないと判定する。そのため、その２値画像をＱＲコードから除外し、処理を終了する。
【０１３７】
［ステップＳ１８１１］  ファインダパタンがすべて検出されたとき、または検出された１または２のファインダパタンから推定される推定位置にファインダパタンの形状の特徴が少なくとも１つ検出できたときは、２値画像がＱＲコードであると判定する。そして、判定された２値画像をＱＲリスト１１６０に登録し、処理を終了する。
【０１３８】
こうして、１つのＱＲコード候補について処理が終了したときは、ＱＲ候補リスト１１５０に登録される次のＱＲコード候補について上記処理手順を実行する。ＱＲ候補リスト１１５０に登録されるすべてのＱＲコード候補について処理が終了したとき、ＱＲコード候補の精査処理を終了する。
【０１３９】
以上の処理手順を実行することによって、ぼかし画像を生成して全体として正方形になっているＱＲコード候補を見つけてから、それが確かにＱＲコードであることを検証する。また、ＱＲコードの検証時には、ＱＲコード候補として検出したＱＲコード範囲を利用して、検出できなかったファインダパタンの位置を推定し、ＱＲコード候補ファインダパタンと見なせる特徴を有するシンボルがＱＲコード候補から検出できれば、ＱＲコード候補をＱＲコードとする。
【０１４０】
これにより、低解像度でもＱＲコードの抽出が可能となるばかりでなく、安価なイメージ取り込み装置の画質の良くない画像でも十分にＱＲコード抽出が可能となる。
（２）ＱＲコード認識処理
ＱＲコード認識部１４０は、ＱＲコード抽出部１３０が生成したＱＲリスト１１６０に基づき、ＱＲコードに対応する元画像データを元画像領域１１００から読み出し、２値化処理部１４１で２値画像を生成する。続いて、パタン検出部１４２が、２値画像からファインダパタン、タイミングパタン及び位置合わせパタンを検出する。検出したパタンの位置座標は、パタンリスト１１７０に登録する。続いて、検出されたパタンに基づいて、ＱＲコードの傾きと、各モジュールの幅と高さを算出し、傾き・幅・高さリスト１１８０に登録する。
【０１４１】
ここで、モジュールの幅と高さの算出方法について説明する。図２１は、モジュールの幅と高さをファインダパタンとタイミングパタンとから求める方法を説明する図である。
図２１に示したように、ＱＲコードには、ファインダパタン２１ａ，２１ｂ，２１ｃと、タイミングパタン２２ａ，２２ｂと、が配置されている。タイミングパタン２２ａ，２２ｂは、白モジュールと黒モジュールが１モジュールずつ交互に並ぶ。また、ファインダパタン２１ａ，２１ｂ，２１ｃは、上端から順に、高さ１の黒モジュール、高さ１の白モジュール、高さ３の黒モジュール、高さ１の白モジュール、高さ１の黒モジュールである。
【０１４２】
ここで、ＱＲコードの領域を、図２１のように領域Ａ２５１、領域Ｂ２５２、領域Ｃ２５３、領域Ｄ２５４、領域Ｅ２５５及び領域Ｆ２５６に分ける。
領域Ａ２５１は、水平方向にタイミングパタン２２ａが、垂直方向にファインダパタン２１ａ，２１ｂがある。領域Ａ２５１の図示水平方向の各モジュールの幅は、水平方向のタイミングパタン２２ａの各モジュールの幅と同じと推定する。領域Ａ２５１の上下方向の高さは、ファインダパタン２１ａ，２１ｂと同じく７モジュールである。そこで、領域Ａ２５１の上端２モジュールの各モジュール高さは、ファインダパタン２１ｂの上端の黒モジュールと白モジュールとの高さから推定する。同様に、領域Ａ２５１の下端２モジュールの各モジュールの高さは、ファインダパタン２１ｂの下端の黒モジュールと白モジュールとの高さから推定する。また、領域Ａ２５１の中央３モジュールの各モジュール高さは、ファインダパタン２１ｂの中央の黒モジュールの高さを３等分した値と同じと推定する。
【０１４３】
領域Ｂ２５２は、水平方向にファインダパタン２１ｂ，２１ｃが、垂直方向にタイミングパタン２２ｂがある。領域Ｂ２５２の左右端各２モジュール、計４モジュールの幅は、ファインダパタン２１ｂの外側の黒枠を構成する黒モジュールと白枠を構成する白モジュールとの幅から推定し、領域Ｂ２５２の中央３モジュールの幅は、ファインダパタン２１ｂの中央の黒モジュールの幅を３等分した値と同じと推定する。領域Ｂ２５２の高さ方向の各モジュールは、垂直方向のタイミングパタン２２ｂの各モジュールの高さと同じと推定する。
【０１４４】
領域Ｃ２５３は、水平方向にタイミングパタン２２ａが、垂直方向にタイミングパタン２２ｂがある。領域Ｃ２５３の水平方向の各モジュールの幅は、水平方向のタイミングパタン２２ａの各モジュールの幅と同じと推定する。また、領域Ｃ２５３の垂直方向の各モジュールの高さは、垂直方向のタイミングパタン２２ｂの各モジュールの高さと同じと推定する。
【０１４５】
領域Ｄ２５４は、水平方向にファインダパタン２１ａ、垂直方向にタイミングパタン２２ｂがある。領域Ｄ２５４の左右端各２モジュールの幅は、ファインダパタン２１ａの外枠の黒モジュールと白枠の白モジュールとの幅から推定し、領域Ｄ２５４の中央３モジュール分の各モジュール幅は、ファインダパタン２１ａの中央の黒モジュールの幅を３等分した値と同じと推定する。領域Ｄ２５４の高さ方向の各モジュール高さは、垂直方向のタイミングパタン２２ｂの各モジュールの高さと同じと推定する。
【０１４６】
領域Ｅ２５５は、水平方向にタイミングパタン２２ａ、垂直方向にファインダパタン２１ｃがある。領域Ｅ２５５の水平方向の各モジュールの幅は、水平方向のタイミングパタン２２ａの各モジュールの幅と同じと推定する。領域Ｅ２５５の上下端各２モジュール分の各モジュール高さは、ファインダパタン２１ｃの高さ、中央３モジュールの高さは、ファインダパタン２１ｃの中央の黒モジュールの高さを３等分した値と同じと推定する。
【０１４７】
領域Ｆ２５６は、水平方向にファインダパタン２１ａ、垂直方向にファインダパタン２１ｃがある。領域Ｆ２５６の左右端４モジュールの幅は、ファインダパタン２１ａの中央の黒モジュールの幅を３等分した値と同じと推定する。領域Ｆ２５６の上下端４モジュールの高さは、ファインダパタン２１ｃの高さ、中央３モジュールの高さは、ファインダパタン２１ｃの中央の黒モジュールの高さを３等分した値と同じと推定する。
【０１４８】
このように、ファインダパタンとタイミングパタンとにより、ＱＲコードのすべての領域について、モジュールの幅と高さを推定することができる。
こうして傾き・幅・高さリスト１１８０が登録されると、モジュール割当部１４４は、各モジュールを２値画像に割り当てる割当処理を行う。
【０１４９】
図２２は、水平方向のモジュール割当処理を示した図である。（Ａ）はモジュール割当対象のＱＲコード、（Ｂ）はＱＲコード読み取りの結果得られたＱＲコード画像、（Ｃ）はモジュール割当の一例を示している。なお、説明を簡単にするため、図２２では、高さ１モジュール分の画素群を示している。また、読み取られた画像の垂直方向に歪みは発生していないとしている。
【０１５０】
（Ａ）の対象ＱＲコード２０００は、読み取り対象のＱＲコードが歪みなく読み取れた場合の理想的な２値画像を示している。対象ＱＲコード２０００は、それぞれ３×３画素のモジュールＭ１，Ｍ２，Ｍ３，Ｍ４，Ｍ５，Ｍ６が一列に並んでいる。図では、白画素は内部が白で示され、黒画素は内部が黒で塗りつぶしてある。すなわち、Ｍ１は白、Ｍ２は黒、Ｍ３は白、Ｍ４は黒、Ｍ５は白、Ｍ６は黒と、図２２（Ａ）のＱＲコードでは白モジュールと黒モジュールとが交互に並ぶ。
【０１５１】
（Ｂ）のＱＲコード画像２１００は、撮像装置でＱＲコードを撮像して得られた、水平方向の歪みを含む画像を２値化した２値画像である。また、タイミングパタン２１１０は、ＱＲコード読み取り時に同時に得られたタイミングパタンである。１モジュールを３×３画素と仮定したときには、読み取られた画像は水平方向に３画素単位で分割されるため、各分割領域は（Ｂ）に示すようにそれぞれｍ１，ｍ２，ｍ３，ｍ４，ｍ５，ｍ６になる。しかし、実際の読み取り画像には、水平方向に歪みが生じているため、例えば、単純に、ｍ１から順に３×３画素で領域を区切って判断を行うとすると、ｍ１，ｍ２，ｍ３，・・と進むに従って、（Ａ）に示したＭ１，Ｍ２，Ｍ３・・・とのずれが大きくなる。例えば、（Ａ）では領域Ｍ３は白画素のみで構成されるが、（Ｂ）に示すｍ３では、水平方向の歪みに起因して黒画素の割合が多くなる。このため、図２２（Ｂ）の画像のモジュール判定を３画素単位で行った場合、モジュール本来の画素構成と、読み取り画像から得られたモジュールの画素構成とが異なってしまい、ＱＲコードを正しくデコードすることができなくなる。
【０１５２】
従来の処理では、モジュールが正方形の画像となるように読み取り画像の補正が行われていた。しかし、ＱＲコードのデコードに必要なのは、要素が０／１（白／黒）で構成される正方行列であり、必ずしも正方形の画像が必要ではない。そこで、本実施形態では、歪んだ画像の補正は行わず、モジュールの形を変えながら、ＱＲコード画像２１００にモジュールを割り当てていく。
【０１５３】
モジュール割当について説明する。（Ｃ）のモジュール割当２２００は、（Ｂ）のＱＲコード画像２１００に、モジュール割当部１４４によるモジュール割当を行った場合の一例を示している。太線が割り当てられたモジュールの範囲を示している。
【０１５４】
ここで、図２２（Ｂ）に示した画像のモジュール判定は、図２１に関連して述べたように、読み取られたタイミングパタン２１１０を基準として行なう。図２２（Ｂ）においては、タイミングパタン２１１０は白３画素、黒２画素、白２画素、黒３画素、白４画素、黒４画素の各モジュールを持つものとして読み取られている。そこで、本実施形態では、図２２（Ｂ）の読み取り画像を、タイミングパタンのモジュール構成に基づいて分割する。その結果、図２２（Ｃ）に示すように、白３画素幅のモジュールｍ１１、黒２画素幅のモジュールｍ１２、白２画素幅のモジュールｍ１３、黒３画素幅のモジュールｍ１４、白４画素幅のモジュールｍ１５、黒４画素幅のモジュールｍ１６が得られる。
【０１５５】
なお、図２２（Ｂ）に示す画像の高さについても、例えばタイミングパタンなどを用いて１モジュールを構成する画素数が推測・決定される。例えば、傾き・幅・高さリスト１１８０に、ｍ１１が幅３、高さ３と設定されていたとする。モジュール割当部１４４は、３×３画素の集合の形状をＱＲコード画像２１００に合わせて変形し、ＱＲコード画像２１００に割り当てる。ここで、１つのモジュールは本来であれば同じ色の画素が矩形に配置されたものである。そこで、モジュールの変形処理を行なう場合には、同一色の画素が含まれた領域が１つのモジュールを構成しているものと推定する。図２２（Ｂ）のｍ１では、３×３画素の矩形を抽出すると、矩形内には星型で示した８つの白画素と、黒四角で示した１つの黒画素とが含まれたものとして、モジュールが認識される。しかし、図２２（Ｃ）の例では、星型で示した３×３の画素集合の上端３画素を１画素分図示左側にずらしたｍ１１が割り当てられている。これによって、ｍ１１を構成する画素は全て星型で示した白画素のみとなる。ｍ１１の右隣のモジュールには、幅２、高さ３の画像集合を、ｍ１１と同様に変形したｍ１２を割り当てる。この処理によって、ｍ１２は計６つの黒画素のみから構成されたモジュールと認識される。ｍ１３、ｍ１４、ｍ１５及びｍ１６も、傾き・幅・高さリスト１１８０に登録された幅・高さの画素集合を変形させ、ＱＲコード画像２１００に割り当てる。以上の処理により、図２２（Ｃ）に示すように、同じ色の画素で構成されたモジュールを抽出することができる。また、このような処理によって、各モジュールを、必ずしも同じ画素数で構成される正方領域として扱う必要がなくなる。
【０１５６】
モジュールの割当処理は、２値画像を２値画像領域（複写）１１３０に格納しながら行う。また、ＱＲコード画像の傾きがｒ°と算出されていたときは、ｒ°に応じた画素のずれを算出し、モジュールの変形に反映する。例えば、ｒ°が幅１０画素に対し高さが１画素分上昇するような場合、このような比率でモジュールを変形させる。そして、所定の範囲のモジュール割当を行った後、元の２値画像１１１０とのずれを計測する。そして、２値画像１１１０とのずれが所定の値より大きいときは、モジュールの変形を調整して再度割当を行う。２値画像１１１０とのずれが所定の範囲内に納まるまで、モジュールの変形の調整と割当を繰り返す。
【０１５７】
図２３は、モジュールの変形例を示した図である。
（Ａ）は、元のモジュールで、３×３画素が整列する配置である。（Ｂ）は、モジュール変形例１で、元のモジュールから上端の画素を左に１ずつずらした領域を１つのモジュールと見なしている。（Ｃ）は、モジュール変形例２で、元のモジュールから下端の画素を左に１ずつずらした領域を１つのモジュールと見なしている。（Ｄ）は、モジュール変形例３で、元のモジュールから中央の画素を左に１ずつずらした領域を１つのモジュールと見なしている。（Ｅ）は、モジュール変形例４で、元のモジュールから左端の画素を下に１ずつずらした領域を１つのモジュールと見なしている。
【０１５８】
この他、画像に合わせてさまざまな変形を行うことができる。
図２４は、モジュールを組み合わせた一例である。
ｍ１１からｍ１６は、図２２のモジュール割当２２００と同じである。ｍ２１からｍ２６の列は、モジュール幅がそれぞれｍ１１からｍ１６と同じで、モジュール高さが２である。ｍ２１からｍ２６の列では、水平方向の歪みは生じていないものとする。ｍ３１からｍ３６の列は、タイミングモジュールに基づいてモジュール幅がそれぞれｍ１１からｍ１６と同じ画素数と見なせる。また、モジュールの高さは、３画素になる。しかし、ｍ３１については、モジュール幅をｍ１１と同じく３画素とすると、三角形で示した白の画素に、四角形で示した黒の画素が含まれてしまう。前述のように、モジュールの変形処理を行なう場合には、同一色の画素が含まれた領域が１つのモジュールを構成しているものと推定し、ｍ３１のモジュール幅を２画素とする。ｍ３２からｍ２６については、ｍ１２からｍ１６と同じモジュール幅としてモジュールの変形処理を行う。図２４のモジュール変形処理では、ｍ３１からｍ３６の列は、上端の２画素を左に１ずつずらした領域を１つのモジュールと見なしている。
【０１５９】
このように、いろいろな形のモジュールを順番に画像に当てはめていき、全体の画像とのずれが少なくなるように埋めていくという操作を繰り返すことにより、必ずしも均一ではない歪みに柔軟に追従できる。
【０１６０】
また、モジュール割当処理は、ＱＲコードの隅から始めるとしてもよいし、ＱＲコードに位置合わせパタンが存在するならば、その位置合わせパタンから開始するとしてもよい。また、ＱＲコードに４つ以上の位置合わせパタンが存在するならば、各位置合わせパタンを起点として、それらの位置合わせパタンが囲む領域の中心に向かってモジュール割当処理を行うとしてもよい。
【０１６１】
モジュール割当処理が終了すると、デコード処理部１４５がモジュール割当に基づいてデコード処理を行う。このとき、ＲＳブロック単位に誤り訂正が行われる。このＲＳブロック単位の誤り訂正の成否をＲＳブロックリスト１１９０に登録する。誤り判定部１４６は、ＲＳブロックリスト１１９０に基づき、誤り訂正ができなかったＲＳブロックが存在し、かつその数が所定の閾値以下の場合に、このＲＳブロックに含まれる領域について、モジュールの再割当を行う。
【０１６２】
図２５は、ＲＳブロックの構成例を示した図である。
ＲＳブロックは、ＱＲコード領域３０００の予め決められたモジュールにより構成される。図の例では、Ｄ１１，Ｄ１２，Ｅ１１，Ｅ１２，Ｅ１３，Ｅ１４から１つのＲＳブロックが形成される。ＲＳブロックは、読み取られたＱＲコードの誤り訂正に用いられる。ＲＳブロックによる誤り訂正ができなかったときは、このＲＳブロックに属するモジュールの割当処理をやり直し、割当処理をやり直したＱＲコードをデコードする。
【０１６３】
次に、ＱＲコード認識方法の処理手順を、フローチャートを用いて説明する。
図２６は、ＱＲコード認識処理全体の手順を示したフローチャートである。
ＱＲリスト１１６０にＱＲコードが登録された後、１つのＱＲコードが選択され、処理が開始される。
【０１６４】
［ステップＳ５１］  ＱＲコード認識部１４０に用意されていて未実行の２値化画像処理方法があるかどうかを判定する。「有」のときは、処理をステップＳ５２に進める。「無」のときは、処理をステップＳ５９に進める。
【０１６５】
［ステップＳ５２］  ２値化処理部１４１は、未実行の画像処理方法のうち、指定の画像処理方法（２値化処理方法）を選択し、読み出したＱＲコード領域の元画像データに対する２値化処理を実行して２値画像を生成する。実行する画像処理方法は、予め決められた優先度に従って選択されるとしてもよいし、利用者が実行する処理を指定するとしてもよい。
【０１６６】
［ステップＳ５３］  パタン検出部１４２は、ステップＳ５２で生成された２値画像から、ファインダパタン、タイミングパタン、位置合わせパタンを検出する。また、サイズ算出部１４３は、ＱＲコードの画像全体の傾きと、ＱＲコードを構成する各モジュールの幅と高さを算出し、傾き・幅・高さリスト１１８０に登録する。
【０１６７】
［ステップＳ５４］  モジュール割当部１４４は、傾き・幅・高さリスト１１８０に基づいて各モジュールの幅と高さを決定し、画像の傾きや元画像に応じてモジュールを変形し、画像に割り当てる割当処理を行う。処理の詳細は後述する。
【０１６８】
［ステップＳ５５］  デコード処理部１４５は、画像に割り当てられたモジュールに基づいて、ＱＲコードのデコード処理を行う。このとき、ＲＳブロック単位に実行される誤り訂正により検出された誤り訂正の成否をＲＳブロックリスト１１９０に登録する。
【０１６９】
［ステップＳ５６］  誤り判定部１４６は、ＲＳブロックリスト１１９０を確認し、誤り訂正ができなかったＲＳブロックがあるかどうかを判定する。誤り訂正ができなかったＲＳブロックがあるときは、処理をステップＳ５７に進める。誤り訂正ができなかったＲＳブロックがないときは、処理をステップＳ５８に進める。
【０１７０】
［ステップＳ５７］  誤り訂正ができなかったＲＳブロックがあるときは、ＲＳブロックリスト１１９０に基づき、誤り訂正ができなかったＲＳブロックの数が、予め決められた閾値以下であるどうかを判定する。誤り訂正ができなかったＲＳブロックの数が、予め決められた閾値以下であるときは、ステップＳ５４に戻り、ＲＳブロックに属するモジュールについて、モジュールの再割当を行う。なお、リトライ回数を設定しておき、何度かリトライを行ってもエラーが発生するときは、再割当を中止し、ステップＳ５１に戻って未実行の２値化処理方法の選択からの処理を行うとしてもよい。誤り訂正ができなかったＲＳブロックの数が、予め決められた閾値より多いときは、ステップＳ５１に戻って、未実行の２値化処理方法の選択からの処理を行う。
【０１７１】
［ステップＳ５８］  誤り訂正ができなかったＲＳブロックが存在しないときは、デコード成功として処理を終了する。
［ステップＳ５９］  誤り訂正ができなかったＲＳブロックが存在し、かつ、未実行の２値化処理がないときは、デコード失敗として処理を終了する。
【０１７２】
こうして、１つのＱＲコードについて処理が終了したときは、ＱＲリスト１１６０に登録される次のＱＲコードについて上記処理手順を実行する。ＱＲリスト１１６０に登録されるすべてのＱＲコードについて処理が終了したとき、ＱＲコードの認識処理を終了する。
【０１７３】
次に、モジュール割当処理について詳細に説明する。図２７は、モジュール割当処理の手順を示したフローチャートである。
［ステップＳ５４１］  サイズ算出部１４３は、ファインダパタン及びタイミングパタンを用いて画像の傾きと、各モジュールの幅及び高さ（縦横画素数）と、を推定する。推定した幅・高さは、傾き・幅・高さリスト１１８０に登録する。
【０１７４】
［ステップＳ５４２］  モジュール割当部１４４は、傾き・幅・高さリスト１１８０に基づき、推定縦横画素数のモジュールを生成し、傾きや割り当て対象の画像に応じて生成したモジュールを変形する。そして、この変形モジュールを元の２値画像に割り当てる。変形モジュールの割当は、所定の範囲を単位として実行する。例えば、モジュール１列、４つの位置合わせパタンに囲まれる領域、画像領域全体といった単位で実行する。
【０１７５】
［ステップＳ５４３］  所定の範囲のモジュール割当が終了したら、割り当てた変形モジュールと元画像とのずれを計測する。ずれの計測は例えば、変形モジュールに割り当てられなかった画素数などを指標とする。
【０１７６】
［ステップＳ５４４］  ステップＳ５４３で計測されたずれの大きさが予め決められた閾値を超えているかどうかを判定する。超えているときは、処理をステップＳ５４５に進める。超えていないときは、処理をステップＳ５４６に進める。
【０１７７】
［ステップＳ５４５］  ずれの大きさが閾値を超えているときは、モジュールの変形を調整し、ステップＳ５４２に戻ってモジュールの再割り当てを行う。
［ステップＳ５４６］  モジュール割当を行っていない割当未領域が２値画像にあるかどうかを判定する。モジュールの割当未領域が２値画像にあれば、ステップＳ５４２に戻って、割当未領域のモジュール割当を行う。２値画像にモジュール割当未領域がなければ、処理を終了する。
【０１７８】
なお、上記処理手順では、すべてのモジュールの縦横画素数を先に算出しておくとしたが、モジュール割当を行う所定の範囲ごと、または、各モジュールの当てはめ実行前にモジュールごとに算出するとしてもよい。
【０１７９】
以上の処理手順が実行されることにより、歪んだ画像には手を加えず、モジュールをピースに見立てたパズルを完成させるかのように、モジュールの形を変えながら画像に当てはめ、モジュールの位置及び範囲を確定する。これにより、均一でない微小な歪みは、変形したモジュールによって吸収することができる。したがって、モジュールを構成する画素数が少ないＱＲコードであっても歪みに起因する画素のずれを抑えることができ、正しくデコードすることが可能となる。また、位置合わせパタンを用いて位置合わせパタンやファインダパタンに囲まれる最少の四角形領域を補正の対象とすることにより、歪みの累積による大幅なずれを防ぐことができる。
【０１８０】
このように、ＱＲコード認識部１４０によれば、低解像度でもデコードが可能となるばかりでなく、安価なイメージ取り込み装置の画質の良くない画像でも十分にデコードが可能となる。
【０１８１】
以上のように、ＱＲコード読取装置１００によるＱＲコードの抽出方法及び認識方法によれば、低解像度あるいは低品質の画像でもＱＲコードを抽出して認識することが可能となる。低解像度でもＱＲコードの読み取りができるため、取り込む画像サイズを小さくすることができるようになり、省資源化が図れる。また、安価なイメージ取り込み装置の画質の良くない画像でも読み取り可能となるため、低コスト化が可能である。さらに、携帯電話のカメラで撮影するような場合でも、カメラをきちんと固定しなくてもよいなど、利便性も向上する。また、搬送型スキャナであれば、電子的ノイズや搬送ローラーなどの物理的な汚れや、コピーなどの汚れによる読取精度への影響が少ないという利点もある。
【０１８２】
なお、上記には、ＱＲコードの読み取りを行う場合について説明したが、本発明はこれに限定されない。２次元コードの位置検出用シンボル及びデータ読取用のシンボルに着目して本発明を適用すれば、ＱＲコード同様に低解像度・低品質の画像から２次元コードを読み取ることが可能となる。
【０１８３】
上記の処理機能は、コンピュータによって実現することができる。その場合、２次元コード読取装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【０１８４】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ（Digital Versatile Disc）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）などの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１８５】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１８６】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）  入力画像データから２次元コード画像を抽出し、歪みを補正して２次元コードの認識処理を行う２次元コード読取方法において、
コンピュータが、
撮像装置によって撮像された画像データを２値化して２値画像を生成し、前記２値画像を前記画像データ記憶手段に格納し、
前記２値画像に対してぼかし処理を施し、
前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を２次元コード候補として検出し、
前記２次元コード候補の領域に対応する２値画像を前記画像データ記憶手段から読み出して、２次元コードの特徴を示す情報と照合し、
前記２次元コードの特徴を満たすと判定された前記２次元コード候補が検出されたときは、前記２次元コード候補を２次元コードと特定し、
前記２次元コードの２値画像として、前記２次元コードとして特定された前記２次元コード候補の領域に対応する２値画像を前記画像データ記憶手段から読み出し、
前記画像データ記憶手段から読み出した前記２次元コードの２値画像から、前記２次元コードの基準画像パタンを検出し、
検出された前記基準画像パタンを用いて、前記２次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、
前記２次元コードの２値画像の画素配列に合わせて前記仮モジュールを前記２次元コードの２値画像に割り当て、
割り当てられたモジュールに基づき前記２次元コードのデコードを行う、
ことを特徴とする２次元コード読取方法。
【０１８７】
（付記２）  前記画像データの２値化及び２値画像に対するぼかし処理を行う際、
複数の２値化処理手順及びぼかし処理手順から一の２値化処理手順及び一のぼかし処理手順を選択して実行し、
得られたぼかし画像から前記２次元コードが抽出できなかったときは、未実行の２値化処理手順または未実行のぼかし処理手順を選択して再度実行し、
前記２次元コード画像が抽出されるか、または、未実行の前記２値化処理手順及びぼかし処理手順がなくなるまで、２値化処理及びぼかし処理を繰り返す、
ことを特徴とする付記１記載の２次元コード読取方法。
【０１８８】
（付記３）  前記２値画像に対して前記ぼかし処理を行う際、
前記２値画像を縮小し、縮小率に応じた所定の範囲の画素に含まれる暗画素が所定の割合以上のときは、前記所定の範囲に対応する縮小画像の画素を暗画素にすることを特徴とする付記１〜２記載の２次元コード読取方法。
【０１８９】
（付記４）  前記２値画像に対して前記ぼかし処理を行う際、
前記２値画像の所定の範囲内の画素に暗画素が含まれている場合は暗画素を、前記所定の範囲の画素がすべて明画素のときは明画素を選択して間引き処理を行う、
ことを特徴とする付記３記載の２次元コード読取方法。
【０１９０】
（付記５）  前記２次元コード候補を検出する際、前記ぼかし処理の結果得られた前記画素集合の形状を、前記２次元コードを特徴付ける外縁の形状と照合し、所定の許容範囲内で前記２次元コードを特徴付ける形状と一致する前記画素集合を前記２次元コード候補とし、
前記２次元コードを特定する際、前記２次元コード候補に対応する２値画像を前記画像データ記憶手段から読み出し、前記読み出した２値画像に、前記２次元コードを特徴付ける２次元コード検出用パタンが検出されるかどうかを判定する、
ことを特徴とする付記１〜４記載の２次元コード読取方法。
【０１９１】
（付記６）  前記２次元コード候補を検出する際、前記ぼかし処理の結果得られた前記画素集合の形状が、前記２次元コードを特徴付ける外縁の形状と一致しないときは、前記画素集合内に予め決められたノイズ形状の条件を満たす形状を持つ画像の有無を検査し、前記条件を満たすノイズ形状が検出されたときは、検出されたノイズ形状を取り除いて前記画素集合の形状を補正し、補正後に前記２次元コードを特徴付ける外縁の形状と照合する、
ことを特徴とする付記５記載の２次元コード読取方法。
【０１９２】
（付記７）  前記２次元コードを特定する際、前記２次元コード候補に対応する２値画像が前記２次元コード検出用パタンを複数有するときは、少なくとも１つの前記２次元コード検出用パタンが検出され、かつ、検出された前記２次元コード検出用パタンと、前記２次元コード候補に対応する２値画像における前記２次元コード画像の範囲とに基づいて推定される残りの前記２次元コード検出用パタンの推定位置に、前記２次元コード検出用パタンの条件を満たす形状が少なくとも１つ検出されたときは、前記２次元コード候補に対応する２値画像を２次元コードと特定する、
ことを特徴とする付記５〜７記載の２次元コード読取方法。
【０１９３】
（付記８）  前記２次元コードはＱＲコードであり、
前記２次元コード候補として前記ＱＲコード候補を検出する際、前記所定のぼかし処理の結果得られた前記画素集合の形状が、正方形であるかどうかを判定し、所定の許容範囲内で正方形と見なせる前記画素集合をＱＲコード候補とし、
前記２次元コードとして前記ＱＲコードを特定する際、前記ＱＲコード候補に対応する２値画像を前記画像データ記憶手段から読み出し、前記ＱＲコード候補に対応する２値画像に、前記ＱＲコードのファインダパタンが検出されるかどうかを判定することを特徴とする付記１〜４記載の２次元コード読取方法。
【０１９４】
（付記９）  前記ＱＲコードを特定する際、前記ＱＲコードの３つの前記ファインダパタンのうち、少なくとも１つの前記ファインダパタンが検出され、かつ、検出された前記ファインダパタンと、前記ＱＲコード候補に対応する前記２値画像におけるＱＲコードの範囲とに基づいて推定される残りの前記ファインダパタンの推定位置に、前記ファインダパタンを特徴付ける少なくとも１つの形状が検出されたときは、前記ＱＲコード候補を前記ＱＲコードと特定する、
ことを特徴とする付記８記載の２次元コード読取方法。
【０１９５】
（付記１０）  前記ＱＲコードを特定する際、前記ファインダパタンの推定位置に、前記ファインパタンの外枠の形状が検出されたとき、前記ファインダパタンの内側の正方形の形状が検出されたとき、または、前記ファインダパタンの推定位置の暗画素のヒストグラムが前記ファインダパタンのヒストグラムと一致したとき、のいずれかの条件が成立するかどうかに基づいて、前記ＱＲコードを特定する、
ことを特徴とする付記９記載の２次元コード読取方法。
【０１９６】
（付記１１）  前記モジュールの割り当ての際、前記基準画像パタンに基づいて、前記基準画像パタンに対応するモジュールの縦横の画素数と、前記２次元コード画像の傾きを算出し、算出された前記モジュールの縦の画素数を高さ、前記モジュールの横の画素数を幅とする仮モジュールを生成するとともに、前記傾き及び既に前記２次元コードの２値画像に割り当てられた既割当のモジュールの形状とに応じて前記仮モジュールを変形し、前記２次元コードの２値画像に割り当てる、
ことを特徴とする付記１〜７記載の２次元コード読取方法。
【０１９７】
（付記１２）  前記モジュールの割り当ての際、前記２次元コード画像の所定の範囲のモジュール割当が終了したときは、割り当てられたモジュールと、前記２次元コードの２値画像とのずれを計測し、ずれの大きさが予め決められた閾値を超えているときは、前記仮モジュールの変形を調整し、前記所定の範囲について調整された仮モジュールを割り当てる処理を行う、
ことを特徴とする付記１１記載の２次元コード読取方法。
【０１９８】
（付記１３）  前記２次元コードのデコードの際、複数の２値化処理手順から一の２値化処理手順を選択して実行し、得られた画像に基づくデコードが失敗したと判定されたときは、未実行の２値化処理手順を選択して再度実行することを特徴とする付記１１〜１２記載の２次元コード読取方法。
【０１９９】
（付記１４）  前記モジュールの割り当ての際、前記２次元コードに、前記２次元コード領域を所定のブロック単位に区切り、１または複数の前記ブロックから成るブロック領域ごとに誤り訂正符号が設定されているときは、前記ブロック領域ごとに前記誤り訂正符号によって誤り訂正ができなかったブロック領域の数を計測し、前記誤り訂正ができなかったブロック領域が存在し、かつ、前記誤り訂正ができなかったブロック領域の数が所定の閾値以下の場合に、前記誤り訂正ができなかったブロック領域に対応するモジュールについて前記２値画像への割当処理を再度実行する、
ことを特徴とする付記１１〜１３記載の２次元コード読取方法。
【０２００】
（付記１５）  前記２次元コードはＱＲコードであり、
前記基準画像パタン検出の際、前記基準画像パタンとしてＱＲコードのファインダパタン及びタイミングパタンを検出し、前記ファインダパタン及び前記タイミングパタンの画素配列に基づいて前記仮モジュールの縦横の画素数を算出する、
ことを特徴とする付記１１記載の２次元コード読取方法。
【０２０１】
（付記１６）  前記仮モジュールを生成する際、前記モジュールの割り当てを行う対象の前記２次元コードの２値画像の所定の領域について、前記所定の領域の水平方向が水平方向のタイミングパタンに、垂直方向が垂直方向のタイミングパタンに対応付けられるときは前記水平方向のタイミングパタン及び前記垂直方向のタイミングパタンを構成するモジュールの幅または高さに基づいて前記仮モジュールの幅と高さを推定し、前記所定の領域に前記水平方向のタイミングパタンまたは前記垂直方向のタイミングパタンのいずれかが対応付けられないときは、前記タイミングパタンが対応付けられない方向にある前記ファインダパタンと、前記所定の領域に対応する前記水平方向のタイミングパタンまたは前記垂直方向のタイミングパタンを構成するモジュールの幅または高さに基づいて前記仮モジュールの幅と高さを推定する、
ことを特徴とする付記１５記載の２次元コード読取方法。
【０２０２】
（付記１７）  前記モジュールの割り当てを行う際、前記ＱＲコードに設定される位置合わせパタンが４つ以上検出できる場合は、検出された位置合わせパタンによって囲まれる領域を、前記４つの位置合わせパタンを起点として中心に向かって前記仮モジュールの割り当てを行う、
ことを特徴とする付記１５〜１６記載の２次元コード読取方法。
【０２０３】
（付記１８）  前記モジュールの割り当てを行う際、前記ＱＲコードに設定されるリードソロモンブロック単位の誤り訂正符号に基づき、前記リードソロモンブロック単位の誤り訂正符号によって誤り訂正ができなかったリードソロモンブロックが存在し、その数が所定の閾値以下のときは、前記リードソロモンブロックに属するモジュールについて、未使用の前記２値化処理手順を用いて２値化からの処理手順を再度実行する、
ことを特徴とする付記１５〜１７記載の２次元コード読取方法。
【０２０４】
（付記１９）  入力画像データから２次元コード画像を抽出する２次元コード抽出方法において、
コンピュータが、
撮像装置によって撮像された画像データを２値化して２値画像を生成して前記画像データ記憶手段に格納し、
前記２値画像に対してぼかし処理を施し、
前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を２次元コード候補として検出し、
前記２次元コード候補の領域に対応する２値画像を前記画像データ記憶手段から読み出して、２次元コードの特徴を示す情報と照合し、
前記２次元コードの特徴を満たすと判定された前記２次元コード候補が検出されたときは、前記２次元コード候補を２次元コードと特定し、
特定された２次元コードの画像領域の位置を示す２次元コード位置情報を前記２次元コード候補の領域に基づいて生成し、前記２次元コード位置情報をコード情報記憶手段に格納する、
ことを特徴とする２次元コード抽出方法。
【０２０５】
（付記２０）  ２次元コード画像の歪みを補正して認識処理を行う２次元コード認識方法において、
コンピュータが、
撮像装置によって撮像された画像データから前記２次元コード画像を抽出し、
抽出した前記２次元コードの画像を２値化して２次元コードの２値画像を生成して画像データ記憶手段に格納し、
前記２次元コードの２値画像から、２次元コードの基準画像パタンを検出し、
検出された基準画像パタンを用いて前記２次元コードの２値画像を構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、
前記画像データ記憶手段から読み出した前記２次元コードの２値画像の画素配列に合わせて前記仮モジュールを前記２次元コードの２値画像に割り当て、
割り当てられたモジュールに基づき前記２次元コードのデコードを行う、
ことを特徴とする２次元コード認識方法。
【０２０６】
（付記２１）  入力画像データから２次元コード画像を抽出し、歪みを補正して２次元コードの認識処理を行う２次元コード読取装置において、
撮像装置によって撮像された画像データを２値化して２値画像を生成し、前記２値画像を前記画像データ記憶手段に格納し、前記２値画像に対してぼかし処理を施し、前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を２次元コード候補として検出し、前記２次元コード候補の領域に対応する２値画像を前記画像データ記憶手段から読み出して、２次元コードの特徴を示す情報と照合し、前記２次元コードの特徴を満たすと判定された前記２次元コード候補が検出されたときは、前記２次元コード候補を２次元コードと特定する２次元コード抽出手段と、
前記２次元コードの２値画像として、前記２次元コードとして特定された前記２次元コード候補の領域に対応する２値画像を前記画像データ記憶手段から読み出し、前記画像データ記憶手段から読み出した前記２次元コードの２値画像から、前記２次元コードの基準画像パタンを検出し、検出された前記基準画像パタンを用いて、前記２次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、前記２次元コードの２値画像の画素配列に合わせて前記仮モジュールを前記２次元コードの２値画像に割り当て、割り当てられたモジュールに基づき前記２次元コードのデコードを行う２次元コード認識手段と、
を有することを特徴とする２次元コード読取装置。
【０２０７】
（付記２２）  入力画像データから２次元コード画像を抽出し、歪みを補正して２次元コードの認識処理を行うための２次元コード読取プログラムにおいて、
コンピュータに、
撮像装置によって撮像された画像データを２値化して２値画像を生成し、前記２値画像を前記画像データ記憶手段に格納し、
前記２値画像に対してぼかし処理を施し、
前記ぼかし処理を施したぼかし画像から、暗画素が所定の割合以上に分布している画素集合を２次元コード候補として検出し、
前記２次元コード候補の領域に対応する２値画像を前記画像データ記憶手段から読み出して、２次元コードの特徴を示す情報と照合し、
前記２次元コードの特徴を満たすと判定された前記２次元コード候補が検出されたときは、前記２次元コード候補を２次元コードと特定し、
前記２次元コードの２値画像として、前記２次元コードとして特定された前記２次元コード候補の領域に対応する２値画像を前記画像データ記憶手段から読み出し、
前記画像データ記憶手段から読み出した前記２次元コードの２値画像から、前記２次元コードの基準画像パタンを検出し、
検出された前記基準画像パタンを用いて、前記２次元コードを構成する各モジュールの縦横の画素数を推定して仮モジュールを生成し、
前記２次元コードの２値画像の画素配列に合わせて前記仮モジュールを前記２次元コードの２値画像に割り当て、
割り当てられたモジュールに基づき前記２次元コードのデコードを行う、
手順を実行させることを特徴とする２次元コード読取プログラム。
【符号の説明】
【０２０８】
１０  ２次元コード読取装置
１１ａ  画像データ記憶手段
１１ｂ  コード情報記憶手段
１２  画像入力手段
１３  ２次元コード抽出手段
１４  ２次元コード認識手段
１５  結果出力手段
【図１】
0005507134.tif 000002
【図２】
0005507134.tif 000003
【図３】
0005507134.tif 000004
【図４】
0005507134.tif 000005
【図５】
0005507134.tif 000006
【図６】
0005507134.tif 000007
【図７】
0005507134.tif 000008
【図８】
0005507134.tif 000009
【図９】
0005507134.tif 000010
【図１０】
0005507134.tif 000011
【図１１】
0005507134.tif 000012
【図１２】
0005507134.tif 000013
【図１３】
0005507134.tif 000014
【図１４】
0005507134.tif 000015
【図１５】
0005507134.tif 000016
【図１６】
0005507134.tif 000017
【図１７】
0005507134.tif 000018
【図１８】
0005507134.tif 000019
【図１９】
0005507134.tif 000020
【図２０】
0005507134.tif 000021
【図２１】
0005507134.tif 000022
【図２２】
0005507134.tif 000023
【図２３】
0005507134.tif 000024
【図２４】
0005507134.tif 000025
【図２５】
0005507134.tif 000026
【図２６】
0005507134.tif 000027
【図２７】
0005507134.tif 000028