(57)【特許請求の範囲】
【請求項１】
複数の白および黒の四角形のセルの一部を固有パターンとして有する２次元コードの領域を含む多値画像を、次式
Ｃｂ＝ｘ／１６
ただし、Ｃｂ：乗算係数
ｘ：整数、１≦ｘ≦１５
に基づいて二値化して、二値画像を出力する画像二値化手段と、
前記二値画像から前記２次元コードの領域を検出する２次元コード検出手段と、
前記２次元コードの領域から固有パターンを検出する固有パターン検出手段と、
前記２次元コードをデコードするデコード手段と、を有し、
前記固有パターン検出手段は、前記固有パターンを構成する黒若しくは白のパターンのうち、一方のパターンを構成するセルが、予め定めたパターンを構成するセルと全て一致していることを条件とする第１の条件と、他方のパターンの一致度が予め定めた一致度を満たすことを条件とする第２の条件と、を判定する判定手段を備え、
前記二値化手段は、
黒のパターンの一致度が前記第１の条件を満たし、白のパターンの一致度が前記第２の条件を満たさない場合は、白のパターンの一致度が前記第２の条件を満たすように前記多値画像を再度二値化し、また、
白のパターンの一致度が前記第１の条件を満たし、黒のパターンの一致度が前記第２の条件を満たさない場合は、黒のパターンの一致度が前記第２の条件を満たすように前記多値画像を再度二値化し、
前記再度二値化した二値画像から前記固有パターンを検出し、前記デコード手段で前記２次元コードをデコードすることを特徴とする２次元コード読み取り装置。
【請求項２】
前記二値化手段が前記多値画像を再度二値化するときには、前記式のｘの値を、
黒のパターンの一致度が前記第１の条件を満たし、白のパターンの一致度が前記第２の条件を満たさない場合は、増やし、
白のパターンの一致度が前記第１の条件を満たし、黒のパターンの一致度が前記第２の条件を満たさない場合は、減らす
処理を行うことを特徴とする、請求項１記載の２次元コード読み取り装置。
【請求項３】
前記多値画像は、データ情報と誤り訂正情報とを有し、
前記デコード手段は、前記誤り訂正情報を利用した誤り訂正に失敗した場合に、
理想の白黒比の状態から二値化を試みた画像の白黒比への変化率を計算し、
前記二値化手段が前記多値画像を再度二値化するときには、前記式のｘの値を、
前記変化率が黒の割合が多くなっていることを示す場合は、減らし、
前記変化率が白の割合が多くなっていることを示す場合は、増やす
処理を行うことを特徴とする、請求項１又は２記載の２次元コード読み取り装置。
【請求項４】
複数の白および黒の四角形のセルの一部を固有パターンとして有する２次元コードの領域を含む多値画像を、次式
Ｃｂ＝ｘ／１６
ただし、Ｃｂ：乗算係数
ｘ：整数、１≦ｘ≦１５
に基づいて二値化して、二値画像を出力する画像二値化ステップと、
前記二値画像から前記２次元コードの領域を検出する２次元コード検出ステップと、
前記２次元コードの領域から固有パターンを検出する固有パターン検出ステップと、
前記２次元コードをデコードするデコードステップと、を有し、
前記固有パターン検出ステップは、前記固有パターンを構成する黒若しくは白のパターンのうち、一方のパターンを構成するセルが、予め定めたパターンを構成するセルと全て一致していることを条件とする第１の条件と、他方のパターンの一致度が予め定めた一致度を満たすことを条件とする第２の条件と、を判定する判定ステップを備え、
前記二値化ステップは、
黒のパターンの一致度が前記第１の条件を満たし、白のパターンの一致度が前記第２の条件を満たさない場合は、白のパターンの一致度が前記第２の条件を満たすように前記多値画像を再度二値化し、また、
白のパターンの一致度が前記第１の条件を満たし、黒のパターンの一致度が前記第２の条件を満たさない場合は、黒のパターンの一致度が前記第２の条件を満たすように前記多値画像を再度二値化し、
前記再度二値化した二値画像から前記固有パターンを検出し、前記デコードステップで前記２次元コードをデコードすることを特徴とする２次元コード読み取り方法。
【請求項５】
前記二値化ステップが前記多値画像を再度二値化するときには、前記式のｘの値を、
黒のパターンの一致度が前記第１の条件を満たし、白のパターンの一致度が前記第２の条件を満たさない場合は、増やし、
白のパターンの一致度が前記第１の条件を満たし、黒のパターンの一致度が前記第２の条件を満たさない場合は、減らす
処理を行うことを特徴とする、請求項４記載の２次元コード読み取り方法。
【請求項６】
前記多値画像は、データ情報と誤り訂正情報とを有し、
前記デコードステップは、前記誤り訂正情報を利用した誤り訂正に失敗した場合に、
理想の白黒比の状態から二値化を試みた画像の白黒比への変化率を計算し、
前記二値化ステップが前記多値画像を再度二値化するときには、前記式のｘの値を、
前記変化率が黒の割合が多くなっていることを示す場合は、減らし、
前記変化率が白の割合が多くなっていることを示す場合は、増やす
処理を行うことを特徴とする、請求項４又は５記載の２次元コード読み取り方法。
【請求項７】
請求項４から６のいずれか１項に記載の２次元コード読み取り方法をコンピュータに実行させることを特徴とする２次元コード読み取りプログラム。
【請求項８】
請求項７記載のプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２次元コード読み取り装置、２次元コード読み取り方法、２次元コード読み取りプログラム及び記録媒体に関し、特に多値で入力した画像を二値化してデコードする際、デコード失敗した場合にコード内の白黒画素の割合に応じて二値化パラメータを変更して再度適正な画像の二値化した上でデコードを行う２次元コード読み取り装置、２次元コード読み取り方法、２次元コード読み取りプログラム及び記録媒体に関する。
【背景技術】
【０００２】
従来、スキャナ入力された二値画像に対し、デコードを実行する文書処理システム、文書処理方法、文書処理プログラムが提案されている（例えば特許文献１参照）。スキャナで入力された印刷文書はスキャナが有する単一二値化閾値で二値化する機能を利用して画像を二値化し、取得した二値画像に対してデコード処理を一回のみ行っている。
【０００３】
また、二値化に関連する技術として、画像二値化装置、画像撮像装置等が提案されている（例えば特許文献２参照）。文字背景の色や輝度に応じて二値化の閾値を局所的に変更して文書の二値化を適正に行うものであり、これにより光源などの入力条件が一定のスキャナだけでなく様々な光源下で一定しない撮影環境の中でデジタルカメラを用いて文書撮影を行ってもその上の文字やバーコード、２次元コードを正しく二値化できる。
【０００４】
以上のような技術を用いればデジタルカメラで撮影した画像を二値化し、２次元コードのデコードを行うことが容易になる。
【特許文献１】特開２００５−１２２６８２号公報
【特許文献２】特開２００１−００８０３２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記のような技術には、以下の問題点がある。紙文書に２次元コードを印刷するためには２次元コードをラベルプリンタなどのバーコード専用プリンタで印刷するのではなく、電子写真プリンタ、インクジェットプリンタなどの汎用のプリンタを用いて印刷することが通常になる。電子写真プリンタはカーボンブラックを用いたトナーを利用して文書の文字を美しく印刷することに開発が注がれてきた。その結果、文字のかすれなどを嫌うがために細線を太めに印字するなどの工夫を行ってきた。そのため２次元コード、バーコードを印刷すると黒の部分が拡張されてしまう欠点がある。
【０００６】
また、インクジェットプリンタにおいては、インクの着弾場所が狙ったところに行かずにインクが白黒境界付近で飛散したり、紙に浸透してインクがにじんだり、あるいは顔料インク、染料インク等の濃度の違うインクが使われたり、印刷モードにも高画質モードやドラフトモードでは使用インク量が異なってモード間でかなりの印字濃度の差があったりする。すなわち、２次元コードやバーコードを同じ紙ではあっても異なる印刷条件で印刷し、同じ条件で画像入力し、同じパラメータで画像二値化を行っても出力される二値画像は黒が拡張されて黒潰れしているもの、コードの黒の部分に白画素が混じったり、黒領域の面積が少なくなっていたりする。そのため、２次元コードやバーコードのデコードを行っても正しくデコードできるとは限らない。
【０００７】
本発明はこのような状況に鑑みてなされたものであり、２次元コードのデコード失敗の場合に黒画素と白画素の比率を算出し、それを基に二値化パラメータを調整し、再度画像二値化を行って適切にデコードできる二値画像を生成し、デコード処理を実行することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、本発明は、第１の態様として、
複数の白および黒の四角形のセルの一部を固有パターンとして有する２次元コードの領域を含む多値画像を、次式
Ｃｂ＝ｘ／１６
ただし、Ｃｂ：乗算係数
ｘ：整数、１≦ｘ≦１５
に基づいて二値化して、二値画像を出力する画像二値化手段と、
前記二値画像から前記２次元コードの領域を検出する２次元コード検出手段と、
前記２次元コードの領域から固有パターンを検出する固有パターン検出手段と、
前記２次元コードをデコードするデコード手段と、を有し、
前記固有パターン検出手段は、前記固有パターンを構成する黒若しくは白のパターンのうち、一方のパターンを構成するセルが、予め定めたパターンを構成するセルと全て一致していることを条件とする第１の条件と、他方のパターンの一致度が予め定めた一致度を満たすことを条件とする第２の条件と、を判定する判定手段を備え、
前記二値化手段は、
黒のパターンの一致度が前記第１の条件を満たし、白のパターンの一致度が前記第２の条件を満たさない場合は、白のパターンの一致度が前記第２の条件を満たすように前記多値画像を再度二値化し、また、
白のパターンの一致度が前記第１の条件を満たし、黒のパターンの一致度が前記第２の条件を満たさない場合は、黒のパターンの一致度が前記第２の条件を満たすように前記多値画像を再度二値化し、
前記再度二値化した二値画像から前記固有パターンを検出し、前記デコード手段で前記２次元コードをデコードすることを特徴とする２次元コード読み取り装置を提供する。
【０００９】
上記目的を達成するために、本発明は、第２の態様として、
複数の白および黒の四角形のセルの一部を固有パターンとして有する２次元コードの領域を含む多値画像を、次式
Ｃｂ＝ｘ／１６
ただし、Ｃｂ：乗算係数
ｘ：整数、１≦ｘ≦１５
に基づいて二値化して、二値画像を出力する画像二値化ステップと、
前記二値画像から前記２次元コードの領域を検出する２次元コード検出ステップと、
前記２次元コードの領域から固有パターンを検出する固有パターン検出ステップと、
前記２次元コードをデコードするデコードステップと、を有し、
前記固有パターン検出ステップは、前記固有パターンを構成する黒若しくは白のパターンのうち、一方のパターンを構成するセルが、予め定めたパターンを構成するセルと全て一致していることを条件とする第１の条件と、他方のパターンの一致度が予め定めた一致度を満たすことを条件とする第２の条件と、を判定する判定ステップを備え、
前記二値化ステップは、
黒のパターンの一致度が前記第１の条件を満たし、白のパターンの一致度が前記第２の条件を満たさない場合は、白のパターンの一致度が前記第２の条件を満たすように前記多値画像を再度二値化し、また、
白のパターンの一致度が前記第１の条件を満たし、黒のパターンの一致度が前記第２の条件を満たさない場合は、黒のパターンの一致度が前記第２の条件を満たすように前記多値画像を再度二値化し、
前記再度二値化した二値画像から前記固有パターンを検出し、前記デコードステップで前記２次元コードをデコードすることを特徴とする２次元コード読み取り方法を提供する。
【００１０】
上記目的を達成するために、本発明は、第３の態様として、上記第２の態様における２次元コード読み取り方法をコンピュータに実行させることを特徴とする２次元コード読み取りプログラムを提供する。
また、第４の態様として、上記第３の態様におけるプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体を提供する。
【発明の効果】
【００１６】
本発明によれば、２次元コードのデコード失敗の場合に黒画素と白画素の比率を算出し、それを基に二値化パラメータを調整し、再度画像二値化を行って適切にデコードできる二値画像を生成し、デコード処理を実行することが出来る。
【発明を実施するための最良の形態】
【００１７】
以下に、本発明の実施形態について図面を用いて詳細に説明する。なお、以下に述べる実施形態は、本発明の好適な実施形態であるから、技術的に好ましい種々の限定が付されているが、本発明の範囲は、以下の説明において特に本発明を限定する旨の記載がない限り、これらの態様に限られるものではない。
【００１８】
まず、本実施形態で用いる「２次元コード」について以下説明する。この２次元コードの基本は矩形であるが、斜め前方からのカメラを用いた読み取りにも高い読み取り性能を維持するため、そのような場合には２次元コードを台形に変形させる（後述する座標変換）ことも可能である。
【００１９】
［２次元コードの外観］
２次元コードの原型となる矩形コードを図１に示す。斜め方向からの読み取りによるコード画像劣化を防ぐために、コードの高さを低く抑えコードのセル配置数を１２ｘ７の横長とする。セルとは、白黒の矩形の最小単位で、一つのセルが１ビットを表す。白が０、黒が１に対応する。この１２ｘ７セルにデータ７バイト（５６ビット）、誤り訂正データ２バイト（１６ビット）、コードの識別パターン１２ビットを埋め込む。そして１２ｘ７のセルを取り囲むようにセルと同じ大きさの黒枠で囲む。
【００２０】
このコードに座標変換を行って台形変形させると図２のようになる。このコードを斜めからカメラで読み取ると図１に示したコード画像に近いほぼ長方形のコード画像を得ることができる。
【００２１】
［クワイエットゾーン］
クワイエットゾーンは２次元コードの黒枠を囲む外接矩形の外側に設けられる余白領域であり、確実に読み取るために必要な領域である。クワイエットゾーンは最大セル長以上でかつ１mm以上であることが望ましい。
【００２２】
［コード識別パターン］
コードの識別パターン（「固有パターン」とも称す）はセル配列の最上行に配置された１２個のセルの並びで判定する。セルの並びは左から「白白黒黒白白黒黒白白黒黒」であり、印刷品質や読み取り品質が低くてもコードであることを判定できるように白と黒が二つずつ並んだパターンを採用している（図３、図４参照）。
【００２３】
［コードの大きさ］
コードの大きさはセルの大きさを決定することで決まる。一般的な応用におけるクワイエットゾーンを含めないコードの最小の大きさは、コードを読み取る解像度を３００dpiとし、読み取った画像において各セル一辺が４画素を含むとして、上底下底ともに５mm、高さは３mmとなる。
【００２４】
［誤り訂正］
２次元コードに使用する誤り訂正方式はリードソロモン方式である。データ７バイトに対して、２バイトの誤り訂正用データを付加する。誤り訂正できるバイト数は１である。
【００２５】
［データ配置］
上記のようにデータを７バイト、誤り訂正用データを２バイトとして、計９バイトのデータに加え、１２ビットのコード識別パターンをコードに配置する。斜め前方からコードを読む構成となっているため、コードの高さを低く抑えてコードのセル配置数を１２ｘ７の横長とする。各セルへのデータの配置位置を図３に示す。図３は各セルへのデータのバイト単位の配置を示している。データの各バイトを（ｓ1〜ｓ7）、誤り訂正符号の各バイトを（ｒ1〜ｒ2）とする。また、最上行の白２セル、黒２セルの並びはコードを識別するための識別パターン（固有パターンとも称す）である。図４は各データのビット単位での配置を示す。数字の０がＭＳＢ、７がＬＳＢを表す。
【００２６】
次に、台形を作成するためのエンコード（Encode：符号化）手順について説明する。
［エンコード手順の概要］
入力データを２次元コードに変換する際に要求される手順の概要は以下の通りである。
手順１・・・入力データのマスキング
入力データを７バイトのバイナリ形式に変換し、各バイトと０ｘ９６（１６進表記）とで排他的OR演算を行う。
手順２・・・誤り訂正符号の生成
マスキングを行ったデータに誤り訂正符号を付加する。
手順３・・・矩形コードの生成
誤り訂正符号が付加された入力データを矩形コードに配置する。
手順４・・・矩形コードの台形化
矩形コードを台形に変形させる。
【００２７】
［入力データのマスキング］（図５  ステップＳ１）
データ形式が整数値文字列の場合は７バイトの整数型データに変換する。データ形式が文字やバイナリの場合はそのまま使用する。データ形式の変換後、エンコードすべきデータの各バイトに対して０ｘ９６（１６進表記）の値で排他的ＯＲ演算を行う。
【００２８】
［誤り訂正符号の生成］（ステップＳ２、Ｓ３）
次にリードソロモン符号を使用して誤り訂正符号の生成を行う。排他的ＯＲ演算を行った７バイトデータ（ｓ1〜ｓ7）の各バイト値を係数とした多項式Ｓ（x） ＝ ｓ1ｘ8＋ ｓ2ｘ7 ＋ ｓ3ｘ6 ＋ ｓ4ｘ5 ＋ ｓ5ｘ4 ＋ ｓ6ｘ3 ＋ ｓ7ｘ2を生成し、生成多項式Ｇ（ｘ） ＝ （ｘ−α）（ｘ−α2）で除算する。実際に使用する生成多項式はＧ（ｘ） ＝ ｘ2 ＋ ６ｘ ＋ ８である。除算して得られた剰余多項式Ｒ（ｘ） ＝ ｒ1ｘ ＋ ｒ2の係数（ｒ1、 ｒ2）が誤り訂正符号となる。ここで、αはＧＦ（２8）上の原始要素２の根であり、演算はすべてＧＦ（２8）上で行われる。誤り訂正能力は１バイトである。
【００２９】
［矩形コードの生成］（ステップＳ４）
図３に示したとおり、ｓ１〜ｓ７、ｒ１、ｒ２の各ビットをコードにマッピングする。図４は各データのビット単位での配置を示し、数字の０がＭＳＢ、７がＬＳＢを表す。各データのビット１を黒セルに、ビット０を白セルに割り当てる。
【００３０】
［矩形コードの台形化］（ステップＳ５）
矩形コードの台形化の計算に必要な光学系パラメータを図６及び図７に示す。図示する符号の意は以下の通りである。
Ｏ：空間座標原点、Ｓ：撮像素子の結像中心、ＳＣ：光学中心、ＣＯ：紙面（ｚ＝０）、Ａ：撮像される画端、Ｂ：コードの下端、Ｃ：撮像される中心、Ｌ：撮像される画端（直線）、Ｔ：ｚ＝０上の台形コード、Ｒ：台形コードＴのもとになるｚ＝０上での矩形コード、ＳＯ：撮像素子と紙面との距離、∠ＣＳＯ：撮像時のあおり角度
【００３１】
台形化を行うための座標変換（２座標変換）について説明する。図８は、２次元コードの座標変換の動作処理を示すフローチャートである。まず、２次元コードのもとになる矩形コードＲを平面ｚ=０上に作成する（図９参照）。次に、直線Ｌを軸として矩形コードＲ内の点Ｐを∠CSOだけ回転させる。この点をＰｒとする（ステップＳ６）。次に、撮像素子の結像面の中心ＳとＰｒを結ぶ直線と平面ｚ=０との交点Ｐｔを求める（ステップＳ７）。このようにして矩形コードＲは台形コードＴに変換される。コード内の点を全て処理すると（ステップＳ８／Ｙｅｓ）座標変換処理は終了する。
【００３２】
上記のように作成した２次元コードをプリンタで紙に印刷する。
【００３３】
次に、本実施形態の２次元コード読み取り装置について説明する。図１０は本実施形態に係る２次元コード読み取り装置のブロック構成図である。２次元コード読み取り装置は、デジタルカメラやスキャナなどの画像入力手段から多値（グレースケール。カラーの場合は輝度信号を抽出する）画像として入力され、一旦メモリ１に保存される。メモリ１に保存されたあと、あらかじめ二値化パラメータ設定部４により設定された二値化パラメータを用いて二値化される（図１０  二値化部２）。二値化された画像を用いてデコード部３は二値化された画像に存在する２次元コードをデコードする。
【００３４】
２次元コードのデコードに失敗した場合、二値化パラメータ設定部４へ、失敗した旨の情報を出力する。二値化パラメータ設定部４は入力されたデコード失敗の情報を元に二値化パラメータの修正を行う。デコード失敗の情報とは、例えば二値化された画像に黒画素が多すぎる、あるいは白画素が多すぎる等の情報である。そして修正された二値化パラメータを使用して再度画像二値化を行い、その二値画像のデコードを行う。
【００３５】
二値化部２の構成は、特開２００１−００８０３２を利用することも考え得る。この場合、二値化パラメータ設定部４で設定される二値化パラメータは、特開２００１−００８０３２の二値化閾値設定回路で用いられる乗算係数Ｃｂに相当する（多値画像の二値化に使用する二値化閾値ＴＨを設定する際に、平均輝度値ａｖｅに係数Ｃｂを乗ずる）。Ｃｂが大きくなると二値化画像において黒画素が増大し、Ｃｂが小さくなると二値化画像において白画素が増大する。
【００３６】
このとき、Ｃｂ=ｘ／１６ （１＜＝ｘ＜＝１５；ｘは整数）と設定すると、二値化パラメータ設定部４はｘの値を１〜１５の範囲で変更することになる。この場合、通常はｘ＝８の設定にしておく。デコード部３から黒画素が多すぎるという情報が入力された場合、（ｘ＋１）／２を新しくｘに設定する。デコード部３から白画素が多すぎるという情報が入力された場合、（ｘ＋１５）／２を新しくｘに設定する。これにより一回目のデコードが失敗した場合でも、二回目のデコードを実行する際、２次元コードをデコードするためにより適した二値化画像を得ることができる。
【００３７】
次にデコード部３について詳述する。図１１は、デコード部３のブロック構成図である。図１１の点線で囲った部分がデコード部３である。
【００３８】
デコード部３は、頂点候補検出部５、黒枠判定部６、射影変換係数算出部７、セル位置取得部８、コード判定部９、ビット列取得部１０、誤り訂正部１１、データ復元部１２、黒の拡張率算出部１３から構成される。以下各構成について詳述する。
【００３９】
［頂点候補検出部５］
頂点候補検出部５は、２次元コードの各頂点候補を検出する。次の黒枠判定部６で黒枠（＝コード枠）として認識されて始めて頂点候補が２次元コードの頂点であると判定されるため、頂点「候補」と称す。
【００４０】
頂点候補検出の動作処理について述べる。まず、図１２に示すように画像の四隅から斜め走査を行い、黒画素を検出する。それをＡ、Ｂ、Ｃ、Ｄとする。さらに図１３では、Ａ、Ｂ、Ｃ、Ｄから矢印の方向、例えばＡなら右下４５度、Ｂなら左下４５度というように、最低３画素以上の画素数だけ画素を追跡してそれらがすべて黒画素かどうかを判定する。それらがすべて黒画素であればＡ、Ｂ、Ｃ、Ｄを頂点候補として検出し、黒枠判定部６に処理を移す。
【００４１】
［黒枠判定部６］
黒枠判定部６は、検出した頂点候補同士を結ぶ２次元コードの黒枠が存在するか否かを判定する。隣接した２頂点を結ぶ直線の外側にほとんど白画素の領域、内側にほとんど黒画素の領域が存在するときに、黒枠であると判定する。黒枠検出では、図１４のように、頂点候補Ａ、Ｂ、Ｃ、Ｄから頂点候補検出部５において追跡した終端画素どうしを結ぶ４直線（黒枠判定ライン）を通過する画素のうち黒画素の割合が全ての直線において直線毎に９割以上存在すればそれを仮の黒枠であると判定する。
【００４２】
次に、頂点候補Ａ、Ｂ、Ｃ、Ｄからそれぞれ外側へ０．５mmあるいは５画素程度の長さに位置する画素をクワイエットゾーン判定画素として、隣接するクワイエットゾーン判定画素を結ぶ直線上の画素が、直線毎に８割以上白画素であるならばそれをクワイエットゾーンとして判定し、先に判定した仮の黒枠とあわせて真の黒枠であると判定する。
【００４３】
このようにして頂点候補Ａ、Ｂ、Ｃ、Ｄを２次元コードの頂点Ａ、Ｂ、Ｃ、Ｄとして確定する。このとき、同時に頂点Ａ、Ｂ、Ｃ、Ｄの座標も検出される。ここで、コードの黒枠が検出できなければ読み取りは終了する。黒枠が検出されれば、射影変換係数算出処理に進む。
【００４４】
［射影変換係数算出部７］
射影変換係数算出部７は、射影変換係数算出部７では、黒枠検出で検出されたコード枠の各頂点の座標と、コードが矩形であるとしたときのコード枠の各頂点の仮想的な規定座標とから、各セルの規定中心座標と読み取った２次元コード画像の各セルの中心座標とをマッピングする係数（射影変換係数）を求める。規定座標とは、各セルが１の長さを持つ正方形として２次元コードが作成され、結果的にコードは長方形の形になるときの座標のことをいう。規定中心座標とは、前記のような規定座標系で、各セルの中心座標のことをいう。射影変換の詳細は後述する。
【００４５】
［セル位置取得部８］
セル位置取得部８は、求めた射影変換係数を用いて、各セルの規定中心座標から読み取った２次元コードの各セルの座標を演算し、読み取るべきセルの位置を取得する。
【００４６】
［コード判定部９］
コード判定部９は、固有パターン検出手段としての機能を有する。コード判定部９は、取得したセル位置より２次元コード固有のパターン（コードの識別パターン）を検出し、目的の２次元コードであるか否かを判定するとともに２次元コード固有パターンの検出結果が所定の条件を満たす場合にその結果を二値化パラメータ設定部４に出力する。
【００４７】
コード判定には、二値画像、識別パターンのセル位置が必要となる。識別パターンのセル位置を画像データのサンプリング中心座標とし、その座標を中心とする３ｘ３画素の黒画素数が白画素数を上回れば‘１’、そうでなければ‘０’としてデータを読み出す。読み出したデータと識別パターンの真のデータを比較し、誤りが２つ以下であれば、現在扱っている図形が２次元コードであると判定する。
【００４８】
コード判定が成功した場合は次のビット列取得部１０の処理へ進む。
【００４９】
コード判定が失敗した場合は、真のパターンデータと読み出したデータとが一致した黒パターンの数と白パターンの数を比較し、黒パターンが全て一致し（全て一致していること：第１の条件）、白パターンの一致した数が所定の一致度（所定の一致度を満たしていること：第２の条件）、例えば白セル４個を満たしておらず、４個以下の場合、画像二値化後の画像内の白画素を増大させるための信号を二値化パラメータ設定部４に出力する。一方、白パターンが全て一致し黒パターンの一致した数が４個以下の場合（白パターンは第１条件を満たし、黒パターンが第２条件を満たさない場合）、画像二値化後の画像内の黒画素を増大させるための信号を二値化パラメータ設定部４に出力する。この信号を受信した二値化パラメータ設定部４は既述したように二値化パラメータを設定しなおし、画像二値化からデコード処理をやり直す。
【００５０】
［ビット列取得部１０］
ビット列取得部１０は、目的の２次元コードと判定された２次元コードの各セルの白黒情報を読み取りビット列を取得する。従ってビット列取得には、２次元コード画像、読み取った２次元コード画像のセル位置が必要である。読み取った２次元コード画像の各セルの位置を画像データのサンプリング中心座標とし、その座標を中心とする３ｘ３画素の黒画素数が白画素数を上回れば（黒画素が多い）‘１’、そうでなければ（白画素が多い）‘０’としてデータを読み出し、データを配列する。
【００５１】
［誤り訂正部１１］
誤り訂正部１１は、ビット列から誤り訂正を行い、誤り訂正が出来なかった場合に所定の演算を行ってその結果を二値化パラメータ設定部４に出力する。読み出された７２ビットのデータは誤り訂正部１１に入力され、リードソロモン方式の誤り訂正の判定が行われる。誤りがないか、あるいは誤り訂正が可能ならば、５６ビット（７バイト）のデータをデータ復元部１２へ出力する。誤り訂正が不可能であった場合、白黒の画素数比および７２ビットのデータとから黒の拡張率を算出する。黒の拡張率が１より大きい場合、画像二値化後の画像内の白画素を増大させるための信号を二値化パラメータ設定部４に出力する。黒の拡張率が１より小さい場合は、画像二値化後の画像内の黒画素を増大させるための信号を二値化パラメータ設定部４に出力する。黒の拡張率の詳細については後述する。
【００５２】
［データ復元部１２］
データ復元部１２は、誤り訂正をした後で元のデータを復元する。具体的には、誤り訂正部１１で得られた７バイトのデータの各バイトに０ｘ９６（１６進表記）で排他的論理和を演算して元のデータを復元する。
【００５３】
［黒の拡張率部１３］
黒の拡張率は、デコードする２次元コードの黒領域がどれだけ拡張されているかを示す尺度である。入力画像がグレースケール画像であるため、二値化処理を実行し、画像を二値化する。２次元コード領域においてコードを各セルが正方形になるように矩形に変換したとき、理想の白黒比の状態から白黒の割合がどれだけ変化しているかを規定する。
【００５４】
まずコードの識別パターン「白白黒黒白白黒黒白白黒黒」の「白白黒黒白白」の１ライン分の画素数を数えて、白画素数をｗ、黒画素数をｂとする。白黒隣接部分の平均拡張画素数ｅｘｐは次式のようになる。
ｅｘｐ＝（ｂ／２ − ｗ／４）／２ ＝ （２ｂ − ｗ）／８
【００５５】
よって黒の拡張率Ｂｅｘｐは、次式のようになる。
Ｂｅｘｐ ＝ ｅｘｐ／（２ｂ＋ｗ）*８  ＋ １ ＝ ４ｂ／（２ｂ＋ｗ）
これは理想のセル長を基準として白に隣接した黒のセルのはみ出し割合を示したものである。黒の拡張がなければＢｅｘｐの値は１となる。
【００５６】
誤り訂正部１１で誤り訂正が失敗したときに黒の拡張率が１より大きい場合、画像二値化後の画像内の白画素を増大させるための信号を二値化パラメータ設定部４に出力する。黒の拡張率が１より小さい場合は、画像二値化後の画像内の黒画素を増大させるための信号を二値化パラメータ設定部４に出力する。
【００５７】
上記二次元バーコード読み取り装置の動作処理を、図１５のフローチャートに示す。画像入力（グレースケールの画像を入力）し（ステップＳ１０）、二値化パラメータの設定を行う（ステップＳ１１）。二値化パラメータ設定のステップで設定される二値化パラメータは、上述したように、特開２００１−００８０３２の二値化閾値設定回路で用いられる乗算係数Ｃｂに相当する。Ｃｂが大きくなると二値化画像において黒画素が増大し、Ｃｂが小さくなると二値化画像において白画素が増大する。このとき、Ｃｂ=ｘ／１６ （１＜＝ｘ＜＝１５；ｘは整数）と設定すると、二値化パラメータ設定ステップはｘの値を１〜１５の範囲で変更することになる。通常はｘ＝８の設定にしておく。デコードステップから黒画素が多すぎるという情報が入力された場合、（ｘ＋１）／２を新しくｘに設定する。デコードステップから白画素が多すぎるという情報が入力された場合、（ｘ＋１５）／２を新しくｘに設定する。これにより一回目のデコードが失敗した場合でも、その状況により二値化パラメータ設定ステップで二値化パラメータを設定しなおし、それを用いて２次元コードのデコードにより適した二値画像を得ることができ、２次元コードのデコードをやり直すことができる。
【００５８】
次に、画像二値化を行う（ステップＳ１２）。画像二値化は、二値化パラメータを用いて画像を二値化する。その後、二値化された画像内の２次元コードの各頂点候補を検出し（ステップＳ１３）、検出した頂点候補を用いて２次元コードの黒枠を判定する（ステップＳ１４）。黒枠と判定された領域の各頂点の座標を基に２次元コードの歪みを補正するための射影変換係数を算出する（ステップＳ１５）。射影変換により２次元コード内の各セル位置を取得する（ステップＳ１６）。
【００５９】
次に、コード判定の処理を行う（ステップＳ１７）。取得したセル位置より２次元コード固有のパターンを検出して目的の２次元コードであるか否かを判定するとともに（ステップＳ１８）、２次元コード固有パターンの検出結果が所定の条件を満たす場合にその結果を二値化パラメータ設定部４に出力する。
【００６０】
目的の２次元コードと判定されなかった場合は（ステップＳ１８／Ｎｏ）、黒のパターンが全一致か否か：第１条件（ステップＳ１９）、白のパターンが全一致か否か：第２条件（ステップＳ２６）について判定し、その結果を二値化パラメータ設定ステップ（ステップＳ１１）に出力する。
【００６１】
目的の２次元コードと判定された場合は（ステップＳ１８／Ｙｅｓ）、目的の２次元コードと判定された２次元コードの各セルの白黒情報について読み取りビット列を取得する（ステップＳ２０）。
【００６２】
ビット列から誤り訂正を行い（ステップＳ２１）、誤り訂正が出来なかった場合には（ステップＳ２２／Ｎｏ）、黒の拡張率を算出する（ステップＳ２４）。黒の拡張率が１．０を越えるか否かについて判断し（ステップＳ２５）、その結果を二値化パラメータ設定ステップ（ステップＳ１１）に出力する。
【００６３】
誤り訂正が成功した場合は（ステップＳ２３）、元のデータを復元する（ステップＳ２３）。
【００６４】
なお、図１５に示す動作処理は、コンピュータなどにおいてソフトウェアで２次元コードのデコードを行うための手順に相当し、本発明の範囲となる。
【００６５】
次に、射影変換の詳細について説明する。射影変換とは３次元空間内の図形・物体を２次元平面・スクリーンへと表示したときの変換である。３次元空間内の物体の座標を２次元平面上の座標へと変換するものである。
【００６６】
厳密な射影変換を図１６を用いて説明する。図１６は、読み取られたコード画像を模式的に示した図（左）と、電子的に生成されたコードを含む画像を模式的に示した図（右）である。コードの各頂点をＡｓ〜Ｄｓ、Ａｒ〜Ｄｒとする。それぞれの関係は、下記二つの式で結ばれている。
【００６７】
【数１】
0005145833.tif 000002
【００６８】
【数２】
0005145833.tif 000003
【００６９】
上記式１及び式２は、コードシンボル座標から画像座標への変換式を表し、Ａｒ〜ＤｒからＡｓ〜Ｄｓへの座標変換を規定する。この式でｂ１〜ｂ８は変換パラメータで、これは未知数であるためＡｒ〜Ｄｒ、Ａｓ〜Ｄｓの各座標値を式に代入して八元一次連立方程式を生成し、算出する。算出されたｂ１〜ｂ８を用いて、電子的に生成されたコードの各セルの中心座標Ｐｒｋ（ｋ＝０〜８３）を変換してコード画像のサンプリング中心座標Ｐｓｋ（ｋ＝０〜８３）を求める。
【００７０】
Ａｓ〜Ｄｓ：頂点候補検出により算出される。
Ｐｓｋ：上記式により算出される。
Ａｒ〜Ｄｒ：コードの生成時に記憶される。
Ｐｒｋ：コード生成時に記憶される。
【００７１】
本願の発明により、様々な濃度のインクで印刷された２次元コード、あるいは様々な機種のプリンタで印刷された２次元コードのデコードをたとえ失敗したとしてもその失敗の原因を画像二値化にフィードバックすることでデコードにより適切な二値画像が得られ、２次元コードのデコードを確実に行うことができるようになる。
【００７２】
なお、上述した２次元コード読み取り装置の動作処理（図１５のフローチャートに示す処理）を、ＣＰＵが実行するためのプログラムは本発明によるプログラムを構成する。このプログラムを記録する記録媒体としては、半導体記憶部や光学的及び／又は磁気的な記憶部等を用いることができる。このようなプログラム及び記録媒体を、前述した各実施形態とは異なる構成のシステム等で用い、そこのＣＰＵで上記プログラムを実行させることにより、本発明と実質的に同じ効果を得ることができる。
【００７３】
以上、本発明を好適な実施の形態に基づき具体的に説明したが、本発明は上記のものに限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【図面の簡単な説明】
【００７４】
【図１】本発明の実施形態に係る座標変換前の２次元コードを示す図である。
【図２】本発明の実施形態に係る座標変換後の台形２次元コードを示す図である。
【図３】本発明の実施形態に係る２次元コードにおけるバイト単位の配置を示す図である。
【図４】本発明の実施形態に係る２次元コードにおけるビット単位の配置を示す図である。
【図５】本発明の実施形態に係るエンコードの動作処理を示すフローチャートである。
【図６】本発明の実施形態に係る矩形コードの台形化の計算に必要な光学系パラメータを示す図である。
【図７】本発明の実施形態に係る矩形コードの台形化の計算に必要な光学系パラメータを示す図である。
【図８】本発明の実施形態に係る座標変換の動作処理を示すフローチャートである。
【図９】本発明の実施形態に係る座標変換の計算に必要な光学系パラメータを示す図である。
【図１０】本発明の実施形態に係る２次元コード読み取り装置のブロック構成図である。
【図１１】本発明の実施形態に係るデコード部３のブロック構成図である。
【図１２】本発明の実施形態に係る頂点候補画素検出を説明するための図である。
【図１３】本発明の実施形態に係る頂点候補検出を説明するための図である。
【図１４】本発明の実施形態に係る黒枠判定を説明するための図である。
【図１５】本発明の実施形態に係る二次元バーコード読み取り装置の動作処理を示すフローチャートである。
【図１６】本発明の実施形態に係る射影変換の説明をするための図である。
【符号の説明】
【００７５】
１    メモリ
２    二値化部
３    デコード部
４    二値化パラメータ設定部
５    頂点候補検出部
６    黒枠判定部
７    射影変換係数算出部
８    セル位置取得部
９    コード判定部
１０    ビット列取得部
１１    誤り訂正部
１２    データ復元部
１３    黒の拡張率算出部
【図１】
0005145833.tif 000004
【図２】
0005145833.tif 000005
【図３】
0005145833.tif 000006
【図４】
0005145833.tif 000007
【図５】
0005145833.tif 000008
【図６】
0005145833.tif 000009
【図７】
0005145833.tif 000010
【図８】
0005145833.tif 000011
【図９】
0005145833.tif 000012
【図１０】
0005145833.tif 000013
【図１１】
0005145833.tif 000014
【図１２】
0005145833.tif 000015
【図１３】
0005145833.tif 000016
【図１４】
0005145833.tif 000017
【図１５】
0005145833.tif 000018
【図１６】
0005145833.tif 000019