(58)【調査した分野】(Int.Cl.,DB名)
実線の直線パターンおよび点線の直線パターンの少なくともいずれか一方である特徴パターンを含む二次元コードを読み取るために、その二次元コードを含む画像を撮像し、撮像した画像における前記特徴パターンの位置に基づいて前記二次元コードのセルの画像上の位置を決定した後、そのセルの位置の輝度に基づいてセルの色を二値化してデコードを行なう二次元コード読み取り装置であって、
前記画像における二次元コードの外形を推定する外形推定手段と、
その外形推定手段で推定した外形に基づいて前記特徴パターンの概略位置を決定する概略位置決定手段と、
その概略位置決定手段で決定した特徴パターンの概略位置に輝度特徴値を算出するための直線である輝度特徴値算出線を設定し、その輝度特徴値算出線の角度を走査しつつ、各走査角度において輝度特徴値算出線の輝度特徴値を算出する輝度特徴値算出手段と、
その輝度特徴値算出手段が、各走査角度において算出した輝度特徴値の比較に基づいて、前記特徴パターンの角度を決定する角度決定手段と
を含むことを特徴とする二次元コード読み取り装置。
【発明を実施するための形態】
【0022】
(本発明による特徴パターンの角度検出手法の説明)
本発明を適用した二次元コード読み取り装置を説明する前に、本発明の考え方を、二次元コードとしてデータマトリックスを例にして説明する。
【0023】
図1(A)、(B)はいずれもデータマトリックスの一部画像である。データマトリックスは、周知の通り、特徴パターンとして、
図1(A)においてA−A矢印で挟まれる部分に存在するアライメントパターンと、
図1(B)においてB−B矢印で挟まれる部分に存在するクロックパターンとを有する。これらアライメントパターン、クロックパターンはいずれも直線であり、アライメントパターンは実線パターン、クロックパターンは点線パターンである。点線パターンは、より詳しくは、セル単位で色が反転するパターンである。
【0024】
データマトリックスのデコードにおいては、これらアライメントパターン、クロックパターンを検出し、これらアライメントパターン、クロックパターンから得られる情報に基づいてコード内の各セルの位置決定を行なう。
【0025】
そのため、コードの読み取り精度向上のためには、これらの特徴パターンの傾きが精度よく検出できることが望ましい。さらには、特徴パターンを形成する各セルのセル中心を正確に検出できることがより望ましい。なお、以下の説明においては、特に言及しない限り、特徴パターンは、アライメントパターンとクロックパターンとを含む意味である。
【0026】
図2は、データマトリックスを模して擬似的に作成した二次元コード画像である。データマトリックスは本来は正方形であるが、この
図2の画像は正方形から変形している。具体的には、頂角はいずれも直角からややずれており、4辺の長さは、わずかではあるが互いに異なっている。この画像は擬似的に作成したものであるが、読み取り装置のデータマトリックスに対する傾きにより、実際の撮像画像においても、この
図2に示したように、データマトリックスは正方形から変形していることも多い。
【0027】
このような変形したデータマトリックスの画像から、特徴パターンの位置を正確に検出する必要がある。直線の位置は、直線上の1点と直線の傾きにより定まる。よって、特徴パターンの位置検出精度を向上させるためには、特徴パターンの傾き、および、パターン上の点の位置の一方、好ましくは、両方の検出精度を向上させる必要がある。
【0028】
上記特徴パターン、すなわち、アライメントパターン、クロックパターンはいずれも直線であることから、直線検出手法として周知のハフ変換や最小二乗法を用いてこれらのパターンを検出することが考えられる。しかし、既に説明したようにこれらの手法は計算量が多い。
【0029】
そこで、本発明では、特徴パターンが存在すると推定できる概略位置に輝度算出線(特許請求の範囲の輝度特徴値算出線に相当)Lを設定し、その輝度算出線Lを走査しつつ、輝度算出線Lの輝度特徴値を算出する。輝度特徴値として、まず、輝度算出線上に所定間隔で設定したサンプリング点における隣接サンプリング点に対する輝度差の総和(以下、輝度変化総和という)を説明する。
【0030】
図3は、二次元コードの一部分を拡大した概念図であり、上述のサンプリング点を例示している図である。
図3においては、ハッチングで示す四角が黒セルであることを示しており、それに隣接するハッチングなしの四角が白セルであることを示している。
図3では、輝度算出線Lの上に、一定間隔でサンプリング点(黒丸)が配置されている。サンプリング点の間隔は、1セル内に複数配置できる間隔に設定されており、
図3の例では、1セル内に3つのサンプリング点が配置されている。この
図3の例のように1セル内に3つ、あるいは、それ以上のサンプリング点が配置できることが好ましい。ただし、ほとんどのセルに少なくとも1つのサンプリング点が配置できる間隔であれば、本発明の目的とする効果を得ることはできる。
【0031】
輝度算出線Lを走査しつつ輝度変化総和を算出すると、実線パターン(アライメントパターン)や点線パターン(クロックパターン)の位置に輝度算出線Lがある場合、輝度変化総和は最小あるいは最大となる。従って、輝度算出線Lを走査しつつ輝度変化総和を算出することで、実線パターンや点線パターンの角度を精度よく検出することができる。
【0032】
次に、輝度変化総和により、実線パターンおよび点線パターンの角度を精度よく検出できることを確認した実験を説明する。
【0033】
実験においては、
図2に例示した擬似的な二次元コード画像を、特徴パターン以外はランダムに白黒を配置して1000枚作成した。これら1000枚の画像において、正解の位置(特徴パターンの中心を通る位置)からの角度ズレと輝度変化総和の関係を調べた。実験条件として、セルサイズは5画素、サンプリング点の間隔は1/4セルとした。輝度算出線Lは、一点を特徴パターンの端点(
図2の点O)に固定し、正解の角度に対して±10度の範囲(
図2に両矢印で示す範囲)を走査した。また、角度分解能(すなわち輝度算出線Lの走査角度単位)は0.5度とした。
【0034】
また、サンプリング点における輝度をサブピクセルの細度(すなわち撮像装置の画素よりも細かい間隔)で決定するために、ピクセルとピクセルとの間の点(補間点)の輝度値を、その周囲の輝度値に基づいて決定した。この決定手法としては、公知の種々のサブピクセル処理を用いることができ、たとえば、補間点の上下左右4点の輝度値の平均値を補間点の輝度値とする。
【0035】
図4は、特徴パターンが実線パターンである場合の実験結果を示すグラフである。横軸は正解の角度を0度とし、その正確の角度に対する輝度算出線Lの角度のズレを示している。縦軸は、1000回の実験における各々の「角度のズレ」における輝度変化総和の平均値を示している。
【0036】
図4に示すように、特徴パターンを実線パターンとしたこの実験では、角度のズレ=0度(すなわちズレがない位置)を中心として−1度から1度までの間は、輝度変化総和がゼロとなっている。輝度算出線Lが実線パターン上に位置している場合、サンプリング点の輝度は全て黒を示す輝度であることから、隣接するサンプリング点間の輝度変化はゼロとなるからである。
【0037】
図5は、特徴パターンが点線パターンである場合の実験結果を示すグラフである。
図5に示すように、特徴パターンを点線パターンとした実験では、角度のズレ=0度を中心として−1度から1度までの間が、輝度変化総和が最大となっている。輝度算出線Lが破線パターン上に位置している場合、輝度算出線Lは、黒セルと白セルとが交互に繰り返す位置を通っていることになるからである。
【0038】
このように、輝度算出線Lの角度が実線パターンの角度と一致すると輝度変化総和は最小となり、輝度算出線Lの角度が点線パターンの角度と一致すると輝度変化総和は最大となることが確認できた。
【0039】
次に、輝度変化総和がピークとなる輝度算出線Lの角度を特徴パターンの角度として検出したとき、その検出した角度と、正確の角度とのズレを確認した実験の結果を示す。実験条件は、
図4、
図5の場合と同様に、特徴パターン以外はランダムに白黒を配置して1000枚の二次元コード画像を作成し、セルサイズ、サンプリング点の間隔、輝度算出線Lの走査条件(固定している点の位置と、走査角度範囲)、角度分解能も、
図4、5と同一とした。
【0040】
図6は、特徴パターンが実線パターンである場合の実験結果を示すグラフであり、
図7は、特徴パターンが点線パターンである場合の実験結果を示すグラフである。いずれのグラフも、横軸は正解の角度からのズレを示し、縦軸は、正解の角度からのズレが横軸の値となった回数を示している。
【0041】
図6、
図7は、いずれも、正解の角度からのズレが0度にピークが存在している。すなわち、輝度変化総和の最小値あるいは最大値を示す角度を特徴パターン(実線パターンあるいは点線パターン)の角度とする手法は、精度よく、その特徴パターンの角度を検出できることが分かる。
【0042】
ところで、これまで説明した実験では外乱は考慮していない。外乱としては、画像のボケ等による輝度値変動、特徴パターンを検出する際の輝度算出線Lの固定点のセル中心からの位置ずれなどがある。しかしながら、これらの外乱をある程度考慮しても、正解の角度からのズレは±1度に収まることを確認した。その根拠を次に説明する。
【0043】
図8は、
図4の実験に用いた画像に対してセルサイズ相当のボケをガウシアンフィルタによって付加し、さらに、輝度算出線Lの固定点をセル中心から1/4セルずらして、他の条件は
図4と同じとした実験の結果を示すグラフである。また、
図8において、実線は、ボケを付加したのみで固定点はセル中心である場合、破線は、ボケを付加し、且つ、固定点をずらした場合の実験結果である。
【0044】
図8の実線と
図4との比較から分かるように、ボケを付加すると、正解からの角度のズレが−1度から1度の範囲でも輝度変化総和が0ではなくなること、および、輝度変化総和の最小となる範囲が狭まることが分かる。さらに、固定点を1/4セルずらすと、破線で示すように、正解からの角度のズレが−1度から1度の範囲における輝度変化総和が一層増加することが分かる。
【0045】
図9は、
図6に対応するものであり、
図6と同様に、輝度変化総和のピークを特徴パターンの角度として検出したとき、その検出した角度と、正確の角度とのズレを確認した実験の結果を示している。
図9と
図6の違いは、
図8と
図4の違いと同じ、すなわち、実験に用いた画像に対してセルサイズ相当のボケをガウシアンフィルタによって付加したこと、および、輝度算出線Lの固定点をセル中心から1/4セルずらしたことである。
【0046】
図9の実線から分かるように、ボケを付加しただけならば、ほとんど精度低下は生じない。また、ボケの付加に加え固定点を1/4セルずらすと、破線で示すように、多少、精度が低下することが分かる。しかし、ほとんどの検出において、正解からの角度ズレは−1度から1度の範囲に収まっている。すなわち、ある程度の外乱があっても、本手法は、正解の角度からのズレが±1度に収まることが分かる。
【0047】
(複数本の輝度算出線上にサンプリング点を配置した手法の説明)
上述の説明では、サンプリング点を配置する輝度算出線Lを1本として説明していた。しかし、この輝度算出線Lとして、複数本(たとえば3本)の平行線を用意してもよい。
【0048】
複数本の平行線を用いる場合、一方の端の平行線から他方の端の平行線までの長さが1セルよりも短くなるように、複数本の平行線を配置する。1セルよりも短くなるようにするためには、セルサイズを推定することが好ましい。セルサイズの推定はたとえば次のようにして行なう。まず、輝度算出線Lなど、コードに対して略垂直に引いた線における輝度変化を求める。そして、この輝度変化において極大から極小への変化周期の最小値を1セルサイズと推定する。その他に、コード外形の概略位置の推定後に、その概略位置に基づいて、セルサイズを示す特徴パターン(たとえばクロックパターン)の概略位置を推定する手法も考えられる。このときの特徴パターンの位置は概略位置であることから、セルサイズも概略となるが、複数の本の平行線の配置幅を、1セルサイズよりも短くなるようにするために利用するだけであることから、概略でも問題ない。また、平行線の間隔を装置性能から定まる最小間隔あるいはそれに近い間隔に設定しておいてもよい。このようにすれば、平行線の配置幅は、ほとんどの場合、1セルサイズよりも狭くなるからである。
【0049】
複数本の平行線を配置したら、これら複数の平行線を平行を維持したまま走査し、各走査角度において輝度変化総和を算出する。輝度変化総和は、互いに隣り合うサンプリング点における輝度差の総和であり、複数本の平行線を配置する場合における隣り合うサンプリング点は、同一輝度算出線上において隣り合うサンプリング点である。このようにすると、各線毎に輝度変化総和を算出できるが、これら線の数分の輝度変化総和を全部加算して、特徴パターンを検出するための輝度変化総和とする。
【0050】
このように複数本とする場合、ある1本の輝度算出線Lは、正解の角度において汚れ等の外乱が多い位置だったとしても、他の輝度算出線Lは、正解の角度においてその外乱が少ない可能性がある。よって、複数本の平行な輝度算出線上のサンプリング点における輝度変化の総和を算出すれば、角度検出がより外乱の影響を受けにくくなる。
【0051】
(セル中心の検出方法)
次に、セル中心位置の検出方法について説明する。ここまでに説明した手法は、特徴パターンの角度を求める手法である。また、この手法では、
図8、
図9を用いて説明したように、輝度算出線Lの固定点Oがセル中心から少しずれていても、特徴パターンの角度をよい精度で検出できる。
【0052】
しかし、二次元コードのデコードにおいては、各セルが白セルであるか黒セルであるか正しく決定することが重要であり、各セルが白セルであるか黒セルであるかはセル中心の輝度から判断する。セル中心の輝度を用いてセルの色を判断するのは、セル中心はボケ等の外乱の影響を最も受けにくいからである。このように、各セルの色の判断にセル中心を用いることから、セル中心をより精度よく検出できることが望まれる。そこで、次に、特徴パターンの角度の検出の次に行なう、セル中心の検出方法を説明する。
【0053】
ここで、セル中心の検出に対する従来公知の方法として、セルのエッジ点を求め、そのエッジ点から中点を求める方法がある。しかし、エッジ点は周囲のセルの影響を受けるため、正確さに問題がある。また、統計的に求め用としてエッジ点の数を増やすと、計算量が多くなってしまう。
【0054】
一方、本実施形態におけるセル中心の検出方法は、これまでに説明した角度検出に類似しており、特徴パターンの角度検出と同様に、輝度算出線Lの輝度変化総和を用いる。そのため計算量は少ない。また、後に実験結果を示すように、精度も良好である。
【0055】
図10は、本実施形態におけるセル中心の検出方法の概念図である。角度検出の場合との違いは、角度検出の場合には輝度算出線Lの角度を走査していたが、セル中心の検出においては、輝度算出線Lを平行移動させつつ、輝度変化総和を算出する。
【0056】
前述したように、セル中心は最も外乱の影響を受けにくい。そのため、輝度算出線Lが特徴パターンの各セルのセル中心を通る場合が、最も特徴パターンの輝度変化総和を正しく表しているはずである。一方、輝度算出線Lが特徴パターンを通る場合には、輝度変化総和はピークを示す。よって、輝度算出線Lを平行移動させたとき、輝度変化総和のピークとなる位置が、特徴パターンの各セルのセル中心を輝度算出線Lが通っていると判断できる。
【0057】
このようにして特徴パターンのセル中心を正しく検出できることを実験により確認した。この実験は、角度検出の場合と同様に、特徴パターン以外はランダムに白黒を配置して1000枚の二次元コード画像を作成して行なった。セルサイズ、サンプリング点の間隔は、角度検出での実験と同じにした。輝度算出線Lの平行移動範囲は、±1/2セルとした。
【0058】
この実験の結果を
図11、
図12に示す。
図11は、特徴パターンが実線パターンである場合の実験結果を示すグラフである。横軸はセル中心からのズレを示している。縦軸は、1000回の実験における各々の「セル中心からのズレ」における輝度変化総和の平均値を示している。また、
図12は、特徴パターンが点線パターンである場合の実験結果を示すグラフであり、縦軸、横軸は
図11と同じである。また、
図11、
図12とも、実線は、前述の手法で検出した特徴パターンの角度が正確の角度からずれていない場合であり、破線は、検出した角度が正解の角度から1度ずれている場合のセル中心検出結果である。
【0059】
図11、12に示すように、特徴パターンが実線パターンである場合にも、また、点線である場合にも、セル中心に輝度変化総和のピークがあることが分かる。さらに、角度ズレがあっても、セル中心に輝度変化総和のピークがあることが分かる。
【0060】
次に、輝度算出線Lを平行移動させつつ算出した輝度変化総和がピークとなる輝度算出線Lの位置をセル中心として検出したとき、検出したセル中心の位置と、正確のセル中心とのズレを確認した実験の結果を示す。実験条件は、
図11、12と同じである。
【0061】
図13は、特徴パターンが実線パターンである場合の実験結果を示すグラフであり、
図14は、特徴パターンが点線パターンである場合の実験結果を示すグラフである。いずれのグラフも、横軸は正解のセル中心位置からのズレを示し、縦軸は、正解の角度からのズレが横軸の値となった回数を示している。
【0062】
図13、
図14は、いずれも、正確のセル中心位置にピークが存在しており、正解のセル中心位置からずれたとしても、ほとんどの場合、1/8セルのズレに収まっていることが分かる。
【0063】
本発明の二次元コード読み取り装置は、ここまでに説明した手法により、二次元コードの特徴パターンの角度およびその特徴パターンのセル中心の位置を検出する。
【0064】
(実施形態)
次に、本発明の二次元コード読み取り装置の実施形態を説明する。
図15は、本発明の実施形態となる二次元コード読み取り装置10の機械的構成を示すブロック図である。機械的構成は、従来周知の二次元コード読み取り装置と同じである。
【0065】
図15に示す回路部20は、図示しないハウジング内に収容されている。この回路部20は、主に、光学系とコンピュータ系と電源系とから構成されている。光学系は、マーカ光投射器60、発光ダイオード21、エリアセンサ23、結像レンズ27等から構成されている。
【0066】
発光ダイオード21は、ハウジング本体の読取口(図示せず)を介して読み取り面Rに向けて照明光Lfを照射可能に構成されている。この読み取り面Rには二次元コードなどが記録されている。なお、記録形態としては、印刷、刻印等がある。
【0067】
エリアセンサ23は、読み取り面Rに照射されて反射した反射光Lrを受光可能に構成されるもので、例えば、C−MOSやCCD等の固体撮像素子である受光素子を数10万から数100万個オーダでm行n列の2次元に配列して構成されている。受光素子は、受光した光を電気信号に変換して出力する。
【0068】
このエリアセンサ23の受光面23aは、ハウジング本体外から上述の読取口を介して外観可能に位置しており、エリアセンサ23は、結像レンズ27を介して入射する入射光をこの受光面23aで受光可能に配置されている。
【0069】
結像レンズ27は、外部から読取口を介して入射する入射光を集光してエリアセンサ23の受光面23aに像を結像可能な結像光学系として機能するもので、例えば、鏡筒とこの鏡筒内に収容される複数の集光レンズとにより構成されている。発光ダイオード21から照射された照明光Lfが二次元コードに反射して読取口に入射する反射光Lrは、結像レンズ27により集光され、これにより、エリアセンサ23の受光面23aにコード像が結像する。マーカ光投射器60は、二次元コードの読み取り範囲を示すマーカ光Mを読み取り面Rに投射する。
【0070】
次に、コンピュータ系の構成概要を説明する。コンピュータ系は、増幅回路31、A/D変換回路33、メモリ35、アドレス発生回路36、同期信号発生回路38、制御回路40、操作スイッチ42、LED43、ブザー44、液晶表示器46、通信インタフェース48等から構成されている。このコンピュータ系は、前述した光学系によって撮像されたコード像の画像信号をハードウェア的およびソフトウェア的に信号処理し得るものである。また制御回路40は、二次元コード読み取り装置10の全体システムに関する制御も行っている。
【0071】
光学系のエリアセンサ23から出力される画像信号(アナログ信号)は、増幅回路31に入力されることで所定ゲインで増幅された後、A/D変換回路33に入力されると、アナログ信号からディジタル信号に変換される。そして、ディジタル化された画像信号、つまり画像データ(画像情報)は、メモリ35に入力されて蓄積される。なお、同期信号発生回路38は、エリアセンサ23およびアドレス発生回路36に対する同期信号を発生可能に構成されており、またアドレス発生回路36は、この同期信号発生回路38から供給される同期信号に基づいて、メモリ35に格納される画像データの格納アドレスを発生可能に構成されている。
【0072】
メモリ35は、半導体メモリ装置で、例えばRAM(DRAM、SRAM等)やROM(EPROM、EEPROM等)がこれに相当する。またROMには、画像処理プログラムの他、マーカ光投射器60、発光ダイオード21、エリアセンサ23等の各ハードウェアを制御可能なシステムプログラム等が予め格納されている。
【0073】
制御回路40は、二次元コード読み取り装置10全体を制御可能なコンピュータで、CPU、システムバス、入出力インタフェース等からなる。この制御回路40は、内蔵された入出力インタフェースを介して種々の入出力装置(周辺装置)と接続可能に構成されており、電源スイッチ41、操作スイッチ42、LED43、ブザー44、液晶表示器46、通信インタフェース48、マーカ光投射器60等が接続されている。
【0074】
これにより、例えば、コードの読み取り処理、電源スイッチ41や操作スイッチ42の監視や管理、またインジケータとして機能するLED43の点灯・消灯、ビープ音やアラーム音を発生可能なブザー44の鳴動のオンオフ、さらには読み取った二次元コードによるコード内容を画面表示可能な液晶表示器46の画面制御や外部機器との通信を可能にする通信インタフェース48の通信制御、マーカ光投射器60からのマーカ光Mの投射制御等を可能にしている。
【0075】
電源系は、電源スイッチ41、電池49等により構成されており、制御回路40により管理される電源スイッチ41のオンオフによって、上述した各装置や各回路に、電池49から供給される駆動電圧の導通や遮断が制御されている。
【0076】
次に、制御回路40の読み取り処理について詳しく説明する。読み取り処理は、撮像したコード像から文字コードを読み取る処理である。読み取り処理においては、二次元コードを構成する各セルが黒セルであるか白セルであるかを決定する。このセルの色の決定においてはセル中心の輝度の二値化処理を行なう。セル中心の位置は、特徴パターンの位置をもとにして決定する。特徴パターンは、二次元コード中における位置および範囲が予め決まっていることから、特徴パターンの位置をもとにして、二次元コードの各セルの中心座標を決定することができるのである。
【0077】
本実施形態の二次元コード読み取り装置10の制御回路40は、前述した手法により、特徴パターンの角度検出処理と、特徴パターンを構成するセルの中心位置の検出するセル中心検出処理を行なう。
【0078】
図16は、特徴パターンの角度検出処理を示すフローチャートである。
図16、
図17のフローチャートの説明では、データマトリックスを例にして具体的処理を説明する。また、
図18に、この
図16の角度検出処理および
図17のセル中心検出処理の概要を図示している。この
図18も参照しつつ
図16、
図17を説明する。
【0079】
まず、ステップS1(特許請求の範囲の外形推定手段に相当)では、コード外形の概略位置の推定を行なう。この推定には、たとえば、ハフ変換を用いる。ハフ変換は、既に説明したように、計算量が多いという課題を有する。そこで、本実施形態では、ハフ変換を用いる処理をこのステップS1におけるコード外形の概略位置の推定に限定し、特徴パターンの検出にはハフ変換は用いない。
【0080】
続くステップS2(特許請求の範囲の概略位置決定手段に相当)では、ステップS1においてコード外形の概略位置を推定した結果をもとに、特徴パターンがあると推定できる位置に輝度変化総和を算出するための輝度算出線Lを設定する。
【0081】
データマトリックスには、特徴パターンとして、実線パターンであるアライメントパターンと、点線パターンであるクロックパターンとがある。これらの位置は、データマトリックスの1辺のセル数が32セル以上の場合には、アライメントパターンは、コードの4辺のうちの互いに接する2辺と、コードの互いに対向する2辺のそれぞれの中点を結ぶ位置に存在する。クロックパターンは、コードの4辺のうちアライメントパターンが存在しない残りの2辺と、コードの互いに対向する2辺のそれぞれの中点を結ぶ位置に存在する。なお、データマトリックスは、互いに接する2辺にアライメントパターンが配置され、残りの2辺にクロックパターンが配置されている正方形を1つのブロックとし、コードが大きくなる場合には、そのブロックを組み合わせて1つのコードが生成される。そのため、4ブロックが組み合わされて1つのコードが形成されている場合、コードの内側に存在するアライメントパターンの位置は、より正確には、コードを2分割した線に隣接する2本のセル列のうち、アライメントパターンが存在するコード外辺から遠い側のセル列である。また、コードの内側に存在するクロックパターンの位置は、より正確には、コードを2分割した線に隣接する2本のセル列のうち、クロックパターンが存在する外辺から遠い側のセル列である。
【0082】
このように、二次元コードにおいて特徴パターンの位置が予め分かっていることと、ステップS1で推定したコード外形の概略位置を用いて、輝度算出線Lを設定する。輝度算出線Lの設定方法の一例として、
図2において、コード中央に左右方向に存在するアライメントパターンに対して輝度算出線Lを設定する場合を説明する。
【0083】
この場合、まず、
図2においてコード左辺の中点とコード右辺の中点とを結ぶ直線、つまり、コードを上下2つに分ける上下分割直線を演算する。そして、この上下分割直線を0.5セル分上方向に平行移動させた直線が、コード中央に左右方向に存在するアライメントパターンに対する輝度算出線Lである。なお、0.5セル分の平行移動のためには、画像における1セルの大きさを推定する必要がある。この推定方法としては、前述のように、輝度算出線Lなどコードに対して略垂直に引いた線上の輝度変化周期から推定する方法がある。また、データマトリックスでは、コードの2辺にクロックパターンが配置されていることから、この2辺のクロックパターンから、撮像画像における1セルサイズの概略推定を行ってもよい。また、ステップS1でコード外形を概略ではあるが推定しており、また、既に説明したように、特徴パターンの角度検出においては輝度算出線Lがセル中心からずれていても、角度の検出精度の低下はそれほど大きくない。従って、0.5セル分の平行移動を省略してもよい。また、予め設定された一定量だけ平行移動させることとしてもよい。
【0084】
図18(A)に、このステップS2で設定した輝度算出線Lを例示している。
図18(A)に示すように、当然、ステップS2の段階では、輝度算出線Lはセルの並び方向となっているとは限らない。
【0085】
続くステップS3、S4は、特許請求の範囲の輝度特徴値算出手段に相当する。ステップS3では、輝度算出線Lの走査角度範囲を決定する。この走査角度範囲はコードの変形程度に基づいて決定する。たとえば、コードの四辺のうち、本来は特徴パターンと平行である一対の辺の傾きの範囲を上記走査角度範囲とする。より具体的には、
図2において、コードの上辺の傾きが−α度、下辺の傾きがβ度であるとすると、上記走査角度範囲を、ステップS2で設定した輝度算出線の初期角度−α〜初期角度+βとする。また、それ以外にも、上記α、βに一定値γを加算あるいは減算した範囲を走査角度範囲としてもよい。さらには、画像におけるコードの最大の変形程度を考慮して、走査角度範囲の振り幅(走査角度範囲の最大値−最小値)を予め設定しておいてもよい。
図18(B)において一点鎖線で示す範囲は、このステップS3で決定した走査角度範囲を概念的に示している。
【0086】
続くステップS4では、輝度算出線Lの一方の端を固定して、ステップS3で決定した走査角度範囲において所定のステップ角度毎に輝度算出線Lを回転移動させつつ、各ステップ角度において輝度変化総和を算出する。なお、輝度算出線Lにおいて輝度変化総和を算出する範囲は、始点は固定点Oであり、終点は、固定点Oではない側のコード外辺である。
【0087】
ステップS5(特許請求の範囲の角度決定手段に相当)では、輝度変化総和がピークとなったときの輝度算出線Lの角度を特徴パターンの角度とする。
図18(C)は、このステップS5で決定された角度での輝度算出線Lである。
【0088】
なお、ステップS2以下の処理は特徴パターン毎に行う。
図2のデータマトリックスでは、アライメントパターンが外辺に2本あり内部にも2本ある。また、クロックパターンも、外辺および内部にも2本ずつある。よって、合計8回、ステップS2以下の処理を行う。ただし、外辺の特徴パターンについては、ステップS1のコード外形の概略位置推定で代用してもよい。
【0089】
このようにして特徴パターンの角度を検出した後は、
図17のセル中心検出処理を実行する。
図17において、ステップS11、S12は特許請求の範囲の平行移動処理手段に相当する。ステップS11では、輝度算出線Lを、セル中心検出処理における初期位置に設定する。この初期位置は、
図16で最終的に決定した角度であって、
図16の角度検出処理での固定点を通る位置である。前述の
図18(C)は、このステップS11において設定された初期位置の輝度算出線Lでもある。
【0090】
ステップS12では、輝度算出線Lを、1セルサイズよりも短い所定の移動間隔(たとえば1/8セル)で所定の移動幅分(たとえば1/2セル〜1セル幅分)にわたり平行移動させつつ、各位置において輝度変化総和を算出する。
図18(D)がこのステップS12の処理を概念的に示している。なお、移動間隔はセルサイズを演算して決定してもよいし、また、セルサイズよりも十分に狭いと考えられる間隔に予め設定しておいてもよい。移動幅についても、セルサイズを演算して決定してもよい。また、セルサイズの1/2幅分よりは長くなると想定できる一定値に予め設定しておいてもよい。
【0091】
ステップS13(特許請求の範囲の中心位置決定手段に相当)では、輝度変化総和がピークとなったときの輝度算出線Lの位置を特徴パターンの各セルのセル中心を通る線とする。
図18(E)は、このステップS13で決定されたセル中心を通っている輝度算出線Lである。
【0092】
図16、
図17の角度検出処理、セル中心検出処理により、特徴パターンの角度、および、特徴パターンを構成する各セルの(セル配列に対して垂直方向の)中心位置が精度よく決定できる。その後、特徴パターンを構成する各セルのセル中心位置をもとにして、二次元コード内のその他のセルのセル中心位置を決定する。
【0093】
以上、説明した本実施形態によれば、輝度算出線Lの角度を走査しつつ、各走査角度において輝度変化総和を算出する(S4)。そして、輝度変化総和が最小であるときの輝度算出線Lの角度を実線パターン(アライメントパターン)の角度とし、輝度変化総和が最大であるときの輝度算出線Lの角度を点線パターン(クロックパターン)の角度としている(S5)。輝度変化総和は、直線上の輝度値の差分を加算するだけの単純な処理であることから、従来手法よりも計算量を少なくすることができる。
【0094】
また、輝度算出線Lの走査角度範囲を、コードの変形程度に基づいて決定していることから(ステップS3)、コードの外形の変形程度が小さい場合には、走査角度範囲は狭くなる。よって、走査角度範囲を常に広い範囲とする場合よりも、計算量を少なくすることができる。
【0095】
さらに、角度検出処理(
図16)は、輝度算出線Lがセル中心を通っていない場合にも、精度よく特徴パターンの角度を検出することができる。そして、この角度検出処理で精度よく検出した角度で輝度算出線Lを配置して、特徴パターンを構成する各セルの中心位置を決定している。よって、計算量を少なくしつつも、特徴パターンの位置を精度よく決定することができる。従って、精度のよい読み取りが可能となる。
【0096】
以上、本発明の実施形態を説明したが、本発明は上述の実施形態に限定されるものではなく、次の実施形態も本発明の技術的範囲に含まれ、さらに、下記以外にも要旨を逸脱しない範囲内で種々変更して実施することができる。
【0097】
たとえば、前述の実施形態では、輝度特徴値として輝度変化総和を算出していた。しかし、これに代えて、実線パターン(アライメントパターン)の場合、サンプリング点における輝度値を単純に加算した輝度値総和を用いてもよい。
【0098】
また、コード外形の概略位置の推定(ステップS1)は、ハフ変換に限られず、公知の種々の手法、たとえば、オープニング・クロージング(膨張収縮)を用いてもよい。
【0099】
また、本発明が適用できる二次元コードは、データマトリックスに限らず、実線の直線パターンおよび点線の直線パターンの少なくともいずれか一方の特徴パターンを含んでいる二次元コードであればよい。また、特徴パターンは、コードの辺の長さよりも短くてもよい。QRコード(登録商標)のファインダパターンやタイミングパターンは、上記特徴パターンに該当する。よって、本発明は、QRコード(登録商標)の読み取りにも適用することができる。
【0100】
なお、特徴パターンがコードの辺の長さよりも短い場合には、輝度値総和などの輝度特徴値を算出する範囲を、輝度算出線Lがコードと重なっている範囲全部とするのではなく、特徴パターンがあると推定できる範囲に限定する。