説明

二次元コードリーダおよびプログラム

【課題】画像に含まれる複数の二次元コードそれぞれを特定すると共に、特定された二次元コードそれぞれの各セルの領域の色の判定処理にかかる時間を低減するための技術を提供すること。
【解決手段】取得された画像(原画像)から生成されたエッジ画像に基づき、このエッジ画像中における候補領域の抽出、この抽出した候補領域に対応する原画像中の対応領域それぞれに特徴的なパターンが含まれているか否かの判定を経て、原画像中から二次元コードの領域を検出する。また、検出した二次元コードの領域について各ピクセルの色の判定処理を行う際に、その領域の各行を構成するピクセル群ごとに判定処理を行うと共に、各ピクセルに対してその配列順に色の判定処理を順次行い、各セルの領域に対応する各行において一定数以上のピクセルが色の判定領域内に含まれると判定された場合に、その行の残りのピクセルについては色の判定処理を省略する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、1以上の二次元コードを含む領域が撮影されてなる画像から二次元コードを読み取って認識する二次元コードリーダに関する。
【背景技術】
【0002】
従来から、二次元コードを示す画像から二次元コードの領域を特定し、その二次元コードにてコード化された情報を識別する技術が用いられている(特許文献1参照)。
二次元コードが、複数のセルが配列され、各セルに色を付すことで該色または色の組合せに応じた1以上の情報それぞれをコード化した構成である場合に、情報の識別を行うためには各セルの色の判定を行う必要がある。色の判定は、二次元コードで用いられる色について、各セルの領域の全てのピクセルの色を判定しその判定結果に基づき行う。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2001−195536号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかし、上記特許文献1の技術においては、情報を識別する際に取得される画像が、1つの二次元コードが画像領域の大部分にわたって収まっている画像を用いるように構成されているため、複数の二次元コードが領域内に収まっている画像から、この画像に含まれる二次元コードそれぞれを特定することができなかった。
また、二次元コードの面積が大きい場合、各セルの面積が大きい場合、セルの面積が大きくかつ数が多い場合などに、各セルを構成する全てのピクセルに対して色の判定処理を行うと、色の判定処理に要する時間が極めて長く必要となる。
本発明は、このような課題を解決するためになされたものであり、その目的は、画像に含まれる複数の二次元コードそれぞれを特定すると共に、特定された二次元コードそれぞれの各セルの領域の色の判定処理にかかる時間を低減するための技術を提供することである。
【課題を解決するための手段】
【0005】
〔第1の構成〕
上記課題を解決するために、本発明に係る第1の構成の二次元コードリーダは、複数のセルが配列され、前記複数のセルに色の異なる複数種類のセルが含まれるように各セルに色を付すことで該色または色の組合せに応じた1以上の情報それぞれをコード化した構成の複数の二次元コードの領域を含む領域が撮影されてなる画像を取得する画像取得部と、該画像取得部により取得された画像を、該画像に含まれるエッジ成分の分布を示すエッジ画像に変換する成分変換部と、該成分変換部により変換されたエッジ画像から、あらかじめ定められた規則に従って形成されている領域を前記二次元コードの領域からなる候補領域として抽出する領域抽出部と、前記画像取得部により取得された画像における、前記領域抽出部により抽出された候補領域に対応する対応領域それぞれについて、該対応領域を形成する要素に、前記二次元コードの領域を規定する特徴的なパターンが含まれているか否かを判定するパターン判定部と、該パターン判定部により特徴的なパターンが含まれていると判定された対応領域を、前記二次元コードの領域として検出することにより、前記画像に含まれる複数の二次元コードの領域を検出可能な領域検出部と、前記領域検出部により検出された二次元コードの領域それぞれについて、該二次元コードの領域における各セルの領域に付されている色を判定する色判定部と、前記二次元コードの領域における各セルの領域に、該セルの領域について前記色判定部が判定した色が付されているものとして、各セルの領域に付された色または色の組合せに基づいて前記コード化された情報を識別する情報識別部と、を備えている。
【0006】
そして、前記色判定部は、前記二次元コードの領域における各セルの領域についてピクセル毎に順次色を判定し、所定数の有効な色の判定結果を得たときに、色の判定処理が未処理の残りのピクセルについて色の判定処理を省略し、前記所定数の有効な色の判定結果に基づき各セルの領域に付された色を判定する。
この構成では、取得された画像(原画像)から生成されたエッジ画像に基づき、このエッジ画像中における候補領域の抽出、この抽出した候補領域に対応する原画像中の対応領域それぞれに特徴的なパターンが含まれているか否かの判定を経て、原画像中から二次元コードの領域を検出することができる。
【0007】
このように、原画像の領域において、エッジ画像の候補領域に対応する対応領域のうち、特徴的なパターンが含まれる対応領域を、原画像中における二次元コードの領域として検出することにより、原画像に含まれる複数の二次元コードの領域それぞれを特定することができるようになる。
また、上記構成では、エッジ画像に基づいて検出された各二次元コードの領域について、この二次元コードの領域における各セルの領域に付された色に基づいて、コード化された情報を識別することができる。
【0008】
また、上記構成では、取得された画像から、二次元コードの領域の候補となる候補領域を抽出したうえで、この領域から二次元コードの領域を検出して情報の識別を行うことができる。そのため、候補領域を抽出することなく二次元コードの領域を検出しようとする場合と比べて、抽出した候補領域という限定的な範囲から二次元コードの領域の検出を行うことができる。これにより、二次元コードの領域から情報の識別を行うまでに要する処理負荷および処理時間を抑えることができる。
【0009】
また、上記構成では、二次元コードの領域における各セルの領域についてピクセル毎に順次色を判定し、所定数の有効な色の判定結果を得たときに、色判定が未処理の残りのピクセルについては色判定処理を省略し、所定数の有効な色の判定結果に基づき各セルの領域に付された色を判定することができる。
これにより、各セルの領域を構成する複数のピクセルにおいて所定数の有効な色の判定結果を得た場合に、残りの未処理のピクセルについては色の判定処理が行われないため、その分だけ各セルの領域の色の判定にかかる処理時間を短縮することができる。
【0010】
この構成において、原画像から変換されるエッジ画像は、原画像に含まれるエッジ成分の分布を示すものであればよく、例えば、原画像における輝度、明度など特定の成分のみを分布させた画像における所定のしきい値以上の成分のみを抽出(具体的にはしきい値で二値化)した画像や、この画像に対して輪郭線を抽出した画像などのことである。
また、エッジ画像から候補領域を抽出する際の「あらかじめ定められた規則」とは、二次元コードの領域からなる候補領域を規定するものであればよく、例えば、二次元コードの領域の外形形状、外形形状が多角形である場合における各辺の長さや各辺で形成される角度、外形形状が多角形である場合における各辺の長さの比率、エッジ画像に二次元コードの領域が含まれている場合におけるエッジ成分の分布パターン(エッジ成分の分布状態、分布されているエッジ成分の配置など)、などを規定しておけばよい。
【0011】
また、原画像から二次元コードの領域を検出する際に参照される「特徴的なパターン」とは、二次元コードについて定められた特徴的なパターンを直接的または間接的に示す情報であればよく、例えば、二次元コードにおいてコード化のシンボルとなるセルの配置パターンや、二次元コードであることを識別するために配置された特定シンボルの配置パターンや、二次元コードであることを識別するために配置されたマークのパターンを直接的または間接的に示す情報などのことである。
【0012】
また、「所定数の有効な色の判定結果」とは、各セルの領域の色を正確に判定可能な精度を有した有効な色の判定結果の数であり、処理速度の観点からは、より少数の方が望ましい。
また、「有効な色」とは、例えば、色の判定対象が複数ある場合には判定結果が最も多数となる色や、予め各セルの領域に付す色が解っている場合、または、色の並びなどから推定できる場合は、各セルの領域に対応する色などが該当する。
【0013】
〔第2の構成〕
さらに、第2の構成の二次元コードリーダは、上記第1の構成において、前記複数のセルは、あらかじめ定められた色が付されたセパレータによって分けられており、前記あらかじめ定められた色に基づき前記二次元コードの領域における各ピクセルの色の判定処理を行うことで、前記二次元コードの領域における前記セパレータの領域の位置を特定するセパレータ領域特定部と、前記セパレータ領域特定部で特定されたセパレータの領域の位置に基づき、前記二次元コードの領域における各セルの領域の位置を特定するセル領域特定部と、を備えている。
【0014】
この構成では、あらかじめ定められた色が付されたセパレータによって各セルが分けられており、二次元コードの領域における各ピクセルについて、あらかじめ定められた色に基づき色の判定処理を行うことで、セパレータの領域の位置を特定することができる。さらに、特定したセパレータの領域の位置に基づき、各セルの領域の位置を特定することができる。
【0015】
これにより、セパレータの領域の位置から各セルの領域の位置を把握することができるので、各セルの領域において所定数の有効な色の判定結果を得た後に、簡易に、各セルの領域における残りのピクセルについて色の判定処理を省略して、次のセルの領域の色の判定処理へと移行することができる。
この構成において、「あらかじめ定められた色」は、セルに付される色以外の色であることが望ましいが、例えば、二次元コードの領域の位置や方向を特定するセルなどの、特別なセルを含む場合には、その色と同じ色にする場合もある。
【0016】
〔第3の構成〕
さらに、第3の構成の二次元コードリーダは、上記第2の構成において、前記色判定部は、前記二次元コードの領域において、行または列を形成するピクセル群ごとに各ピクセルの色の判定を順次行い、各行または各列の各セルの領域に対応する部分において所定数の有効な色の判定結果を得たときに、次のセルの領域を示すピクセルの手前のピクセルまで、その行または列における色の判定処理が未処理の残りのピクセルについて色の判定処理を省略し、各セルの領域に対する各行または各列の前記色の判定結果に基づき各セルの領域に付された色を判定する。
【0017】
この構成では、二次元コードの領域の全体に対して、その行または列を形成するピクセル群ごとに各ピクセルの色の判定処理を順次行うことができる。そして、各セルの領域の部分において、各行または各列について所定数の有効な色の判定結果が得られたときに、そのセルの領域の各行または各列の残りのピクセルについて、色の判定処理を省略することができる。
これにより、各セルの領域の各行または各列において、所定数の有効な色の判定結果が得られた場合に、残りの未処理のピクセルについては色の判定処理が行われないため、その分だけ各セルの領域の色の判定処理にかかる処理時間を短縮することができる。
【0018】
〔第4の構成〕
さらに、第4の構成の二次元コードリーダは、上記第2の構成において、前記色判定部は、前記二次元コードの領域における各セルの領域において、行または列を形成するピクセル群ごとに各ピクセルの色の判定を順次行い、各セルの領域に対応する各行または各列において所定数の有効な色の判定結果を得たときに、次のセルの領域を示すピクセルの手前のピクセルまで、その行または列における色の判定処理が未処理の残りのピクセルについて色の判定処理を省略し、各行または各列の前記色の判定結果に基づき各セルの領域に付された色を判定する。
【0019】
この構成では、二次元コードの領域における各セルの領域ごとに、その行または列を形成するピクセル群について該ピクセル群ごとに各ピクセルの色の判定処理を順次行うことができる。そして、各セルの領域において、各行または各列について所定数の有効な色の判定結果が得られたときに、そのセルの領域の各行または各列の残りのピクセルについて、色の判定処理を省略することができる。
【0020】
これにより、各セルの領域の各行または各列において、所定数の有効な色の判定結果が得られた場合に、残りの未処理のピクセルについては色の判定処理が行われないため、その分だけ各セルの領域の色の判定処理にかかる処理時間を短縮することができる。
また、セルごとに各ピクセルの色の判定処理を行うため、次のセルの領域について各ピクセルの色の判定処理を行う前に、判定処理の終わったセルの領域に付された色の判定を行うことが可能となる。従って、次のセルの色判定処理を行う前に、セルの色の並び順等を知りたい場合に有効である。
【0021】
〔第5の構成〕
さらに、第5の構成の二次元コードリーダは、上記第1〜第4の構成のいずれか1において、前記成分変換部による画像のエッジ画像への変換を、異なる1種類以上の変換条件のそれぞれについて順に実施させると共に、各変換条件について変換されたエッジ画像それぞれに対し、前記領域抽出部による候補領域の抽出、前記パターン判定部による特徴的なパターンの判定、および、前記領域検出部による二次元コードの領域の検出、を繰り返し実施させる繰り返し実施部と、特定の前記エッジ画像に対して、前記領域抽出部により抽出された候補領域それぞれが、別のエッジ画像について前記領域抽出部が抽出した候補領域(以降「抽出済み候補領域」という)と一致するか否かを、両方の候補領域に基づいて判定する一致判定部と、を備えている。
【0022】
そして、前記繰り返し実施部は、前記パターン判定部による特徴的なパターンを有しているか否かの判定、および、前記領域検出部による二次元コードの領域の検出、を、前記領域抽出部により抽出された候補領域のうち、前記一致判定部により前記抽出済み候補領域と一致しないと判定された候補領域についてのみ実施させる。
この構成では、原画像に基づいて生成される複数種類のエッジ画像それぞれについて、候補領域の抽出、この抽出した位置情報に対応する対応領域に特徴的なパターンが含まれているか否かの判定、および、二次元コードの領域の検出を繰り返し実施している。
これにより、特定のエッジ画像に基づいて二次元コードの領域を検出できなかったとしても、別のエッジ画像に基づいて検出されることが期待でき、その結果、原画像における二次元コードの領域の検出精度を高めることができる。
【0023】
また、この繰り返しの過程では、特定のエッジ画像について新たに抽出された候補領域が、先に参照されたエッジ画像について抽出された抽出済み候補領域と、原画像の領域において一致している場合も想定される。ところが、上記構成では、このように一致する抽出済み候補領域について、抽出した候補領域に特徴的なパターンが含まれているか否かの判定、および、二次元コードの領域の検出を実施しない。
そのため、複数のエッジ画像それぞれに基づいて検出された各二次元コードの領域について、この二次元コードの領域にて示される情報を識別するに際し、本来同じものであるはずの二次元コードの領域を繰り返し識別してしまうといった無用な処理負担をなくすことができる。
【0024】
〔第6の構成〕
さらに、第6の構成の二次元コードリーダは、上記第1〜第5の構成のいずれか1において、前記二次元コードは、前記複数のセルそれぞれに付される色が、複数種類の色のうち、該セルにてコード化すべき情報、および、該セルと隣接するセルに付された色に応じた着色規則に従って定められており、さらに、前記領域検出部により検出された二次元コードの領域それぞれについて、該二次元コードの領域における各セルの領域のうち、該セルの領域に対して前記着色規則に従って付されるべき色、および、前記二次元コードにおいて使用されるべき色、以外の色が付されているセルの領域につき、該セルの領域に本来付されるべき色を前記着色規則に従って推定する色推定部、を備えており、前記情報識別部は、前記二次元コードの領域における各セルの領域のうち、前記色推定部により色が推定されたセルの領域に該推定された色が付されているものとして、各セルの領域に付された色または色の組合せに基づいて情報を識別する。
【0025】
ここで、上記第5の構成では、二次元コード全体が正常に画像として生成されていれば問題はないが、画像の生成(具体的には撮影)状態によっては、一部のセルに対応する領域が欠けてしまうなど正常に画像として生成されていないことも考えられ、この場合、情報の識別そのものができなくなってしまう。
このような問題に対しては、一部のセルに対応する領域が欠けてしまったような場合であっても、これを補償して適切な情報の識別が実現できるようにしておくことが望ましい。
【0026】
上記第6の構成であれば、二次元コードにおける各セルのうち、一部のセルに対応する領域が欠けてしまっていたとしても、そのセルに本来付されるべき色を着色規則に従って推定し、その色に基づいて情報を識別することができるため、情報の識別そのものができなくなってしまうことを防止することができる。
なお、この構成において、着色規則に従って推定されるセルの色として、複数の色が推定されるような場合には、そのうちのいずれかの色を、例えば、推定結果の確からしさなどといったパラメータに基づいて選択し、そうして選択した色が付されていると推定することとすればよい。また、複数の色が推定されるような場合、複数の色が付されているパターンそれぞれについて情報を識別し、そうして識別した情報の中から、いずれかの情報をユーザに選択させるようにしてもよい。
【0027】
〔第7の構成〕
さらに、第7の構成の二次元コードリーダは、上記第1〜第6の構成のいずれか1において、前記色判定部は、前記二次元コードの領域における各セルの領域に付されている色を、該二次元コードにおいて使用される複数の色それぞれを中心に拡がる色空間上の判定領域のいずれに含まれているかにより判定する。
この構成であれば、二次元コードにおける各セルの領域に付されている色を、色空間におけるいずれの判定領域に含まれているかにより判定することができる。
【0028】
〔第8の構成〕
さらに、第8の構成の二次元コードリーダは、上記第7の構成において、前記色判定部は、複数の色それぞれに対応する前記判定領域のいずれにも含まれていないと判定したセルの領域が一定数以上存在する二次元コードの領域に対し、前記判定領域を一定領域だけ拡げたうえで、再度、各セルの領域に付されている色を判定する。
上記第7の構成においては、画像の生成条件によっては多くのセルの領域に付された色がいずれの判定領域にも含まれないことも考えられ、この場合、情報の識別そのものができなくなってしまう。
【0029】
このような問題に対しては、多くのセルの領域に付された色がいずれの判定領域にも含まれない場合であっても、これを補償して適切な情報の識別が実現できるようにしておくことが望ましい。
上記第8の構成であれば、画像の生成条件が悪く、適切に色の判定ができない場合であっても、判定領域を拡げることで判定の感度を上げて再度色を判定することにより、色の判定確率を高めることができる。
この構成において、判定領域を拡げる際の拡張幅は、他の判定領域と干渉しない範囲を上限として拡げることとすればよく、判定領域のいずれにも含まれていないと判定したセルが一定数未満となるまで、判定領域を徐々に拡げて再度の判定を繰り返すこととしてもよい。
【0030】
〔第9の構成〕
さらに、第9の構成の二次元コードリーダは、上記第7の構成において、前記色判定部は、複数の色それぞれに対応する前記判定領域のいずれにも含まれていないと判定したセルの領域が一定数以上存在する二次元コードの領域に対し、該二次元コードの領域における色の分布に応じて前記判定領域を色空間上で変移させたうえで、再度、各セルの領域に付されている色を判定する。
この構成であれば、画像の生成条件が悪く、適切に色の判定ができない場合であっても、判定領域を色の分布に応じた適切な位置まで変移させて再度色を判定することにより、色の判定確率を高めることができる。
【0031】
この構成において、判定領域は、二次元コードの領域における色成分の偏りを打ち消すことのできる色空間上の位置へと変移させることとすればよい。より具体的には、二次元コードの領域において特定の色成分が全体的に大きくなっている場合に、この色成分を小さくする方向に判定領域を変移させることが考えられる。
なお、上記第8、第9の構成において、「判定領域のいずれにも含まれていないと判定したセルが一定数以上存在する」における「一定数」については、全てのセルに占める該当セルの割合であってもよいし、該当セルの絶対数であってもよい。また、二次元コードにおいて該当セルが特定パターンで配置されている数であってよい。
【0032】
〔第10の構成〕
さらに、第10の構成の二次元コードリーダは、上記第5〜第9の構成のいずれか1において、前記一致判定部は、特定の前記エッジ画像に対して、前記領域抽出部により抽出された候補領域それぞれが、別のエッジ画像における前記抽出済み候補領域と一致するか否かを、両方の候補領域における重複度合に応じて判定する。
【0033】
この構成において、前記一致判定部は、特定の前記エッジ画像に対して、前記領域抽出部により抽出された候補領域それぞれが、別のエッジ画像における前記抽出済み候補領域と一致するか否かを、両方の候補領域における重複度合に応じて判定する。
この構成であれば、特定のエッジ画像から抽出された候補領域と、別のエッジ画像における抽出済み候補領域との重複度合に応じ、その重複度合が一定以上であることをもって、両候補領域が一致すると判定することができる。
【0034】
〔第11の構成〕
さらに、第11の構成の二次元コードリーダは、上記第5〜第10の構成のいずれか1において、前記一致判定部は、特定の前記エッジ画像に対して、前記領域抽出部により抽出された候補領域それぞれが、別のエッジ画像における前記抽出済み候補領域と一致するか否かを、両方の候補領域のうちの一方の候補領域が他方の候補領域に包摂されているか否かに応じて判定する。
この構成であれば、特定のエッジ画像から抽出された候補領域、および、別のエッジ画像における抽出済み候補領域のうち、一方の候補領域が他方の候補領域に包摂されていることをもって、両候補領域が一致すると判定することができる。
【0035】
〔第12の構成〕
さらに、第12の構成の二次元コードリーダは、上記第5〜第11の構成のいずれか1において、前記二次元コードの領域が多角形である場合において、
前記一致判定部は、特定の前記エッジ画像において前記領域抽出部により抽出された候補領域それぞれについて、該候補領域として形成された多角形における1以上の頂点が、前記抽出済み候補領域として形成された多角形におけるいずれかの頂点から一定範囲内に位置しているか否かに応じて、前記領域抽出部により抽出された候補領域それぞれが、別のエッジ画像における前記抽出済み候補領域と一致するか否かを判定する。
【0036】
この構成であれば、特定のエッジ画像から抽出された候補領域における1以上の頂点が、抽出済み候補領域におけるいずれかの頂点から一定範囲内に位置していることをもって、両候補領域が一致すると判定することができる。
ここでいう「いずれかの頂点から一定範囲内」とは、特定のエッジ画像から抽出された候補領域と、別のエッジ画像における抽出済み候補領域とが一致する場合における両者の位置関係で決まる範囲内とすればよい。
【0037】
また、両候補領域が一致すると判定する条件としては、特定のエッジ画像から抽出された候補領域における少なくとも1の頂点が、別のエッジ画像における抽出済み候補領域におけるいずれかの頂点から一定範囲内に位置していればよい。また、両候補領域が一致すると判定するに際しては、いくつの頂点が一定範囲内に位置していることを条件としてもよく、二次元コードの領域を検出するまでの処理負担や処理速度などに応じて適宜変更することが考えられる。
【0038】
〔第13の構成〕
さらに、第13の構成の二次元コードリーダは、上記第1〜第12の構成のいずれか1において、前記領域抽出部は、前記二次元コードの領域の形成に係る規則を規定するテンプレートに基づいて、前記成分変換部により変換されたエッジ画像から、そのテンプレートにて定められた規則に従って形成されている領域の位置情報を候補領域の位置情報として抽出する。
【0039】
このように構成すれば、テンプレートで規定される規則に従って候補領域を抽出することができるため、このテンプレートと共に規則を変更することにより、任意の規則に従って形成された領域を候補領域として検出できるようにすることができる。
なお、上述した二次元コードリーダは、単体の装置により構成してもよいし、複数の装置が協調して動作するシステムとして構成してもよい。
【0040】
〔第14の構成〕
また、上記課題を解決するための第14の構成としては、上記第1から第13のいずれか1の構成における全ての構成部として機能させるための各種処理手順を、コンピュータシステムに実行させるためのプログラムとしてもよい。
このようなプログラムにより制御されるコンピュータシステムは、上記各構成に係る二次元コードリーダの一部を構成することができる。
なお、上述した各プログラムは、コンピュータシステムによる処理に適した命令の順番付けられた列からなるものであって、各種記録媒体や通信回線を介して二次元コードリーダや、これを利用するユーザに提供されるものである。
【図面の簡単な説明】
【0041】
【図1】二次元コードリーダ1の構成例を示すブロック図である。
【図2】二次元コード100の構成例を示す図である。
【図3】コード利用物品検出処理の処理手順の一例を示すフローチャートである。
【図4】エッジ画像から抽出された候補領域それぞれが抽出済み候補領域と一致するか否かを判定するための別手法を示す図である。
【図5】(a)は、変数Yの値と画像種類およびしきい値との対応関係の一例を示す図であり、(b)は、エッジ画像生成処理の処理手順の一例を示すフローチャートである。
【図6】有効領域判定処理の処理手順を示すフローチャートである。
【図7】(a)は、理想的な候補領域の形状例を示す図であり、(b)〜(e)は、誤差範囲外の形状例を示す図であり、(f)〜(g)は、誤差範囲内の形状例を示す図である。
【図8】色判定処理の処理手順の一例を示すフローチャートである。
【図9】物品検出処理の処理手順の一例を示すフローチャートである。
【図10】データベースに登録された識別情報および物品情報の一例を示す図である。
【図11】(a)は、物品検出モードの検出対象画像例を示す図であり、(b)は、検出結果の表示例を示す図である。
【図12】(a)は、期限管理モードの検出対象画像例を示す図であり、(b)は、検出結果の表示例を示す図であり、(c)は、カメラ76の配設位置の一例を示す図である。
【図13】検出モード設定処理の処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【0042】
以下に本発明の実施形態を図面に基づき説明する。
(1)二次元コードリーダ1の構成
まず、図1に基づき、二次元コードリーダ1の構成を説明する。図1は、二次元コードリーダ1の構成例を示すブロック図である。
二次元コードリーダ1は、図1に示すように、CPU(Central Processing Unit)60と、RAM(Random Access Memory)62と、ROM(Read Only Memory)64と、入出力インターフェース(I/F)66と、バス68とを含んで構成されるコンピュータシステムを備えている。CPU60、RAM62、ROM64およびI/F66は、バス68に接続されており、バス68を介してこれら接続デバイス間のデータの送受信を可能としている。
【0043】
二次元コードリーダ1は、さらに、I/F66を介して、記憶装置70と、表示装置72と、入力装置74と、カメラ76と、NIC(Network Interface Card)78とに接続されている。
CPU60は、ROM64または記憶装置70に予め記憶された各種専用のコンピュータプログラムをRAM62に読み込み、RAM62に読み込まれたプログラムに記述された命令に従って、各種リソースを駆使して、後述する二次元コードを利用した物品検出処理(以下、コード利用物品検出処理と称す)を実行する。
【0044】
記憶装置70は、各種専用のコンピュータプログラム、プログラムの実行において用いられるデータ等の、上記コード利用物品検出処理に必要なデータを記憶する。
具体的に、記憶装置70は、二次元コードを特徴づける情報を規定したテンプレート、カメラ76によって撮影して得られる画像データを記憶する。
さらに、記憶装置70は、各二次元コードにおいて独特のセル群それぞれの色または色の組み合わせと、各二次元コードに対してユニークな情報を含む情報との対応関係が登録されたデータテーブルを記憶する。
【0045】
さらに、記憶装置70は、二次元コードが付された物品に関する情報(以下、物品情報と称す)と、各二次元コードの有するユニークな情報(識別情報)とを対応付けてなる情報を登録したデータベースを記憶する。このデータベースは、具体的に、物品の識別情報(品名、シリアル番号等)、個数情報、入庫時期等の保管開始時期情報、出荷期限、消費期限等の期限情報などを、各二次元コードの有するユニークな情報と対応付けて登録したものとなる。
【0046】
ここで、記憶装置70は、FDドライブ、HDドライブ等の磁気記憶型記憶装置、CDドライブ、DVDドライブ、BRDドライブ等の光学的読取/書込方式記憶装置、MOドライブ等の磁気記憶型/光学的読取方式記憶装置等の、コンピュータで記憶データを読み取り可能な記憶装置であれば何でもよい。
表示装置72は、CRTディスプレイ、液晶ディスプレイなどの周知の表示装置であり、CPU60からの指令に応じて、カメラ76で撮影された画像、該画像を加工した加工画像等の画像(動画を含む)の表示を行う。
【0047】
入力装置74は、キーボード、マウス、操作ボタン、タッチ式の入力デバイス(タッチパネル等)などのヒューマンインターフェースデバイスであり、ユーザの操作に応じた入力を受け付ける。
カメラ76は、デジタルカメラ等の周知のカメラであり、所定の撮影領域を撮影して得られた画像を示す画像データを生成して順次I/F66を介してRAM62または記憶装置70に送信して、RAM62または記憶装置70に画像データを格納する。
【0048】
NIC78は、LAN、WAN、インターネット等のネットワーク上の外部装置と通信するためのデバイスであり、一般にLANカード等と呼ばれる周知のネットワークアダプタである。NIC78は、ネットワークケーブルLを介してルータやハブ等に接続され、これらを介して、二次元コードリーダ1をネットワークに接続する。なお、周知の無線LAN等の、無線によって無線LAN用のアクセスポイントを介してネットワークに接続する構成であってもよい。
【0049】
これにより、本実施の形態では、ネットワークに接続された外部カメラから、NIC78を介して所定の撮影領域の撮影画像を示す画像データを取得したり、ネットワークに接続されたデータサーバから各種データを取得したりすることも可能である。
なお、この二次元コードリーダ1は、例えば、携帯電話端末、携帯情報端末、周知のパーソナルコンピュータなどに実装されるものとして構成される。
【0050】
そして、本実施形態における二次元コードリーダ1は、複数の物品と該物品にそれぞれ付された1以上の二次元コードとが含まれた画像を示す画像データに基づき、その画像中の二次元コードを検出する処理と、検出した二次元コードにより示される情報を識別して取得する処理とを行う装置として構成されている。さらに、取得した識別情報に対応する物品のなかに検出対象として指定された物品が存在するか否かを判定し、検出対象の物品が存在する場合に、この物品に対応する二次元コードの領域を強調表示する加工を原画像に施し、該加工後の画像を表示する処理を行う装置として構成されている。
なお、本実施形態において、上記各処理は、入力装置74を介したユーザーの操作入力(指示情報)をトリガとして行われる一連の処理となる。
【0051】
(2)二次元コード100の構成
次に、図2に基づき、二次元コードリーダ1により読み取る二次元コード100について説明する。図2は、二次元コード100の構成例を示す図である。
本実施形態における二次元コード100は、図2に示すように、黒色のセパレータ110上に複数のセルC11〜Cpq(2≦p,2≦q)が一定間隔で配列され、所定の情報が各セルの色および色の組み合わせによりコード化されたものである。つまり、この二次元コードは、セルそれぞれ、または、組み合わせに係るセル群それぞれが、そこに付された複数の色(多色)、または、色の組み合わせパターンにより、数字や文字など複数種類の値(多値)を表現可能となっている。例えば、複数の二次元コードについて、それぞれ、色の組み合わせや、色の配列パターンを変えることによって、各二次元コードに固有のユニークな情報を付すことが可能である。
【0052】
ここで、この二次元コードを構成する1行目(図2における最上部の行)のセルC11〜C1qは、二次元コードの各セルCに付けられうるマークの色により、順番にマークが付けられた(セルCが塗りつぶされた)ヘッダー領域となっている。
本実施形態においては、セルCに付けられうるマークの色として、黒(k)を除く1色以上の色が、黒(k)でマークが付けられたセルCとセットで配列されている。
また、各行のセルCのうち、先頭(図2における左端の列))に位置するセルC11〜Cp1(本実施形態では、黒(k)が付されたセル)は、二次元コードの位置を特定するための特定セルとして配置されたものである。
【0053】
そして、2行目以降のセルC11〜Cpq(先頭のセルC11〜Cp1を除く)は、行毎に、それぞれ1以上のセルCからなるセル群に分けられており、そのセル群で示すべき単位情報(1以上の文字)の対応づけられた色または色の組み合わせでマークが付けられる。こうして、各セルそれぞれ、または、1以上の組み合わせに係るセル群それぞれが、複数種類の文字のいずれかや多進数の数字で示されるいずれかの値からなる情報を持つことができるようになっている。
【0054】
また、これらセルCにそれぞれ付けられたマークの色は、シアン(c)、マゼンタ(m)、イエロー(y)の分布を表した三次元空間内において、それぞれ三次元領域として球形に拡がる複数の成分領域(後述する判定領域)を、これら成分領域同士が互いに干渉しない大きさおよび位置関係で配置した成分モデルにより決められる。具体的に、この成分モデルに配置された成分領域内における中心座標で表される成分それぞれが、情報色の成分または組み合わせ色における各色の成分として、セル群にマークが付けられている。
ここでいう「成分領域同士が互いに干渉しない」とは、各成分領域が重複しないように、各成分領域同士の間隔を空けて配置したり、各成分領域の境界を隣接させて配置したり、することである。
【0055】
また、成分領域の大きさは、画像の撮影環境に応じて生じうる誤差の範囲を十分に包摂できる空間として規定したものであり、本実施形態では、特定座標における色を一般的な撮影環境下の色とし、この色から撮影環境に応じて生じうる誤差の範囲を含む領域を成分領域として規定している。
また、二次元コード100における特定セルに付けられたマークの色、および、セパレータ110の色には、セルCに付すマークの色に用いられていない成分領域における中心座標の色(本実施形態では黒系統の色)が用いられている。
【0056】
(3)CPU60による処理
以下に、CPU60がROM64または記憶装置70に記憶された専用のコンピュータプログラムに従って実行する各種処理の手順について順次説明する。
(3−1)コード利用物品検出処理
まず、二次元コードリーダ1が、カメラ76からの画像データを受信中において、入力装置74を介したユーザからの指示入力に応じて開始されるコード利用物品検出処理の処理手順を、図3に基づいて説明する。
【0057】
ここで、図3は、コード利用物品検出処理の処理手順の一例を示すフローチャートである。
コード利用物品検出処理が開始されると、まず、カメラ76で撮影された撮影画像データからのエッジ画像データの生成、エッジ画像データからの候補領域の抽出、候補領域が有効か否かの判定、原画像における有効な候補領域に対応する領域が特徴パターンを含むか否かの判定といった手順を経て、二次元コードの領域を検出する。
【0058】
次に、検出された二次元コードの領域に対して、セパレータ110の検出、セル領域を分割、各セル領域の色の判定(補正、再判定等含む)、各セル領域の色の判定結果の照合といった手順を経て、検出した二次元コードの情報を識別する。
さらに、予め設定された検出モードに応じて、検出対象の物品に対応する二次元コードの特定、原画像の加工、および加工した画像の表示といった手順を経て、原画像中の検出物品の位置が明示された画像を表示する。具体的に、画像の加工は、原画像(複写画像でも可)に対して、原画像中における特定した二次元コードの画像部分の強調(例えば、マーキング、色の変更等)、検出モードに応じた物品に係る情報画像(例えば、文字画像)の追加等を行う処理となる。従って、原画像に対して、検出対象の物品の位置を明示する画像(または効果)および該物品に係るモードに応じた情報画像が加えられた画像が、表示装置72に表示されることになる。
【0059】
本実施形態において、設定可能な上記検出モードには、原画像中に含まれる二次元コードの付された物品の中から、指定された物品を検出する物品検出モードと、出荷期限や消費期限の切れた物品を検出する期限管理モードとがある。
コード利用物品検出処理は、CPU60によって、専用のコンピュータプログラムを実行することで起動される処理であって、プログラムが実行されると、図3に示すように、まず、ステップS100へと移行する。
【0060】
ステップS100では、入力装置74を介して、ユーザからの指示入力があったか否かを判定し、指示入力があったと判定した場合(Yes)は、ステップS102に移行し、そうでない場合(No)は、入力されるまで判定処理を続行する。
ここで、物品検出モードが設定されている場合は、指示入力を行う前に、例えば、物品のシリアル番号、品名等の検出対象の物品の識別情報を設定する必要がある。この設定は、入力装置74を介して、ユーザが検出対象の商品を識別する情報を手入力してもよいし、物品リスト等を表示してユーザがその中から物品名等の識別情報を選択するようにしてもよい。
【0061】
一方、期限管理モードが設定されている場合は、物品検出モードと同様に識別情報を設定してもよいが、例えば、倉庫に山積みにされた出荷待ちの物品(商品)や、店内の商品陳列棚に並べられた物品等のように全てを管理対象としたい場合は、この設定は不要としてもよい。本実施形態では、期限管理モードにおいて、物品の識別情報を設定する処理を行わないこととする。
【0062】
なお、本実施形態において、指示入力は、表示装置72に表示されたカメラ76の撮影画像を見ながらユーザが入力装置74を介して行う処理となり、検出対象の物品は、指示入力の入力時に表示されていた撮影画像の中から検索されることになる。
ステップS102に移行した場合(Yes)は、RAM62または記憶装置70から、指示入力のあったタイミングに表示していた画像データまたは該画像データに加えて複数フレーム分の画像データを取得して、ステップS104に移行する。
【0063】
具体的に、設定されたモードや仕様に応じて、指示入力が行われたタイミングの1枚の画像、または、指示入力のタイミングを起点にして予め設定された複数フレームの画像を取得する。そして、これらの画像データに対して以降の処理が実行される。但し、説明の便宜上、本実施形態では、1枚の画像を取得し、取得した1枚の画像について処理を行うこととする。
【0064】
ステップS104では、二次元コードを特徴づける情報を規定したテンプレートを記憶装置70から読み出して、ステップS106に移行する。
ここでいうテンプレートは、二次元コードからなる領域を規定する領域規則、二次元コードにおける特徴的なパターン、二次元コードにマークとして付けられる色(色数,色の種類)の着色規則などを示す情報である。
【0065】
これらのうち、「領域規則」とは、エッジ画像から候補領域を抽出(座標を特定)する際においては、例えば、二次元コードの外形形状に応じて、真円形の領域、楕円形の領域などの円形の領域、矩形の領域、三角形の領域などの多角形の領域、または、これらに類似する形状の領域などを、規定しておけばよい。類似する形状としては、例えば、二次元コードの外形形状が矩形形状であれば、台形の領域などの矩形形状を角度を変えて見た(撮影した)場合の形状等となり、二次元コードの外形形状が真円形であれば、六角形や八角形の領域などの撮影環境や原画像の画質等によって円形が崩れた場合の形状等が該当する。また、例えば、形状等は無視して、閉領域であれば何でも候補領域として抽出するといった規定でもよいし、エッジ成分の分布パターン(エッジ成分の分布状態、分布されているエッジ成分の配置など)が特定のパターンの領域を抽出するといった規定でもよい。
【0066】
さらに、抽出した候補領域が有効であるか否かを判定する際においては、例えば、抽出した候補領域の外形形状が円形である場合における扁平率や、外形形状が多角形である場合における各辺の長さや各辺で形成される角度、外形形状が多角形である場合における各辺の長さの比率などを規定しておけばよい。
ただ、「領域規則」は、以降の処理に要する処理負担を軽減するためには、複数の項目を選択して規定したものとすることが望ましく、この場合、候補領域としての抽出数が少なくなる結果、処理負担の軽減に伴って処理時間の短縮が実現されることとなる。
【0067】
また、「特徴的なパターン」とは、例えば、二次元コードにおいてコード化のシンボルとなるセルの配置パターンや、二次元コードであることを識別するために配置された特定シンボルの配置パターンや、二次元コードであることを識別するために配置されたマークのパターンなどのことである。
例えば、図2に例示した二次元コード100であれば、上記特定セルC11〜Cp1に付けられた色と、上記ヘッダー領域C11〜C1qの各セルに付けられた複数の色との双方または一方により、二次元コードの領域を示す特徴的なパターンが形成されている。
【0068】
なお、この特徴的なパターンとしては、セパレータ110の領域もパターンに含ませる構成や、ヘッダー領域や特定セル等を設けずに、情報を示す領域(図2の例では特定セルC11〜Cp1を除く2行目以降の領域)の各セルに付された複数の色やその組み合わせパターン、該複数の色の付されたセルの配置順等が特徴的なパターンを形成する構成など、別の構成により実現するものとしてもよい。
【0069】
また、「着色規則」とは、二次元コードにおける複数のセルそれぞれに付すべき色の規則であり、該当セルにてコード化すべき情報、および、該当セルと隣接するセルに付された色に応じて決められるものである。
ステップS106では、以降の処理で参照する変数X,Yを初期化(0→X,1→Y)して、ステップS108に移行する。
【0070】
ステップS108では、ステップS102で取得した画像データに対してエッジ画像の生成処理を実行してエッジ画像データを生成し、ステップS110に移行する。なお、このエッジ画像生成処理における具体的な処理手順については後述する。
ステップS110では、ステップS108において生成されたエッジ画像データに基づいて、このエッジ画像から、二次元コードからなる候補領域それぞれの位置を特定して、ステップS112に移行する。ここでは、ステップS104にて読み出されたテンプレートにおける「領域規則」に基づいて、第Y番目のエッジ画像から、二次元コードからなる候補領域を規定する画像中の座標それぞれが特定される。
【0071】
本実施形態では、二次元コード100が図2に示す外形形状(矩形形状)であることから、「領域規則に従った領域」として、線形化された輪郭部によって閉領域となる矩形形状の領域を候補領域として全て特定する。また、この「領域規則に従った領域」には、領域規則に従った領域だけでなく、その領域として許容される誤差範囲のパラメータで形成された領域も含まれる。例えば、誤差範囲内であれば、矩形形状だけでなく、台形形状、平行四辺形状、菱形形状なども含まれる。
【0072】
ステップS112では、ステップS110において、候補領域が特定されたか否かを判定し、特定されたと判定した場合(Yes)は、ステップS114に移行し、そうでない場合(No)は、ステップS140に移行する。
ステップS114に移行した場合は、ステップS110において特定された候補領域(座標情報)それぞれをリストに登録して、ステップS116に移行する。
【0073】
ステップS116では、ステップS114においてリストに登録された候補領域のうち、以降の処理で処理対象となっていない(未処理の)候補領域があるか否かを判定し、あると判定した場合(Yes)は、ステップS118に移行し、そうでない場合(No)は、ステップS138に移行する。ここでは、リストに候補領域が登録されていない場合にも、未処理の候補領域がないと判定される。
【0074】
ステップS118に移行した場合は、リストに登録されている未処理の候補領域のうち、いずれか1の候補領域を選択して、ステップS120に移行する。
ステップS120では、ステップS118において選択された候補領域が有効なものであるか否かを判定する有効領域判定処理を実行して、ステップS122に移行する。なお、この有効領域判定処理における具体的な処理手順については後述する。
【0075】
ステップS122では、ステップS120の判定結果に基づき、ステップS118で選択した候補領域が、有効なものであるか否かを判定する。そして、有効なものであると判定した場合(Yes)は、ステップS124に移行し、そうでない場合(No)は、ステップS116に移行し、以降、別の候補領域について上記同様の処理を行う。
ステップS124に移行した場合は、直前に行われた上記ステップS110において特定された候補領域(新規候補領域)が、過去に行われた上記ステップS110において特定された候補領域(抽出済み候補領域)と同じであるか否かを判定する。
具体的に、新規候補領域が抽出済み候補領域に領域として所定割合以上重複している場合、または、新規候補領域および抽出済み候補領域の一方が他方に包摂されている場合に、新規候補領域が抽出済み候補領域と同じであると判定される。
【0076】
本実施形態では、候補領域が多角形となるため、エッジ画像から抽出された候補領域それぞれが、別のエッジ画像における抽出済み候補領域と一致するか否かは、候補領域として形成された多角形における1以上の頂点Pnが抽出済み候補領域として形成された多角形におけるいずれかの頂点Poから一定範囲(例えば一定の半径r距離)内に位置しているか否かに応じて判定することとしてもよい(図4参照)。
なお、ここでいう「いずれかの頂点から一定範囲内」とは、特定のエッジ画像から抽出された候補領域と、別のエッジ画像における抽出済み候補領域とが一致する場合に、両方の候補領域が位置しうる位置関係で決まる範囲内とすればよく、上記一定の半径r距離内に限られない。
【0077】
そして、ステップS124において新規候補領域が過去に行われた上記ステップS110において特定されてRAM62または記憶装置70に格納されたいずれかの抽出済み候補領域と同じであると判定した場合(Yes)は、ステップS116に移行し、以降、別の候補領域について上記同様の処理を行う。
一方、ステップS124において新規候補領域が抽出済み候補領域と同じではないと判定された場合(No)は、ステップS126に移行する。
【0078】
ステップS126に移行した場合は、この時点における新規候補領域を情報の識別に適したものとなるように補正して、ステップS128に移行する。
ここでは、新規候補領域における二次元コードの形状、角度が補正される。具体的には、例えば、処理対象の領域が斜めに配置されていた場合や、正方形になっていない歪んだ形状となっている場合に、そのようなズレを補正すべく回転や、座標軸に合わせた延長・短縮などが行われる。
【0079】
なお、領域そのものを補正するのではなく、これ以降の処理で二次元コードか否かの判定、および、ここからの情報の識別を行う際に基準とする座標軸の角度や長さを補正することとしてもよい。
さらに、このステップS126では、新規候補領域における二次元コードの色成分が、各セルにおける色の識別性を高めるべく補正される。
【0080】
具体的に、原画像データがRGB色空間等のCMYK以外の色空間で色が表現されたカラー画像データである場合に、各ピクセル値を、CMYKの色空間で色が表現されたカラー画像データへと変換する。これにより、以降の色判定処理において、例えば、RGB色空間では認識しにくい色(例えば、緑色)の認識精度を向上することができる。本実施形態では、CMYK以外の色空間(本実施形態ではRGB色空間)の値を、CMYK色空間の値に変換する変換テーブル(色変換用LUT(Look Up Table))が記憶装置70に記憶されており、この色変換用LUTを用いて色変換を行う。
【0081】
また、補正の必要が無い場合は、上記いずれの処理も行わずにステップS128に移行する。
ステップS128では、上記ステップS102において取得された画像データで示される原画像のうち、上記ステップS126において補正された候補領域に対応する対応領域に、二次元コードとしての特徴的なパターンが含まれているか否かを判定する。
【0082】
ここでは、ステップS126において補正された候補領域を単位領域(1以上のドットからなる領域)ずつ走査していき、そうして特定されたセル(特にヘッダー領域および特定セル)やマークのパターンが、上記ステップS104において読み出されたテンプレートにおける「特徴的なパターン」で規定されたセルの配置パターンやマークのパターンと一致しているか否かを判定する。そして、一致している場合は、コード領域に二次元コードとしての特徴的なパターンが含まれていると判定し、一致していない場合は、コード領域に二次元コードとしての特徴的なパターンが含まれていないと判定する。
なお、この判定処理において、セルのパターンを特定する際の各セルの色の判定を行う際に、後述する色判定処理のアルゴリズムを適用することが可能である。
【0083】
また、図2に例示した二次元コード100は、ヘッダー領域および特定セルの領域といったように、データ領域とは別に特別に設けられた領域を有しており、この領域が「特徴的なパターン」として抽出され判定が行われる構成となっているが、この構成に限らない。
例えば、図2に示す二次元コードにおいて、ヘッダー領域および特定セルの領域を除外した、データ領域のみで構成された二次元コードなど他の構成としてもよい。
【0084】
この場合も、二次元コード100と同様に、データ領域における、複数種類のセルの配置パターンやマークのパターンなどが「特徴的なパターン」となり、このパターンとテンプレートにおける特徴的なパターンとを比較して、「特徴的なパターン」が含まれているか否かを判定することになる。但し、データ領域の各セルは、情報をコード化する役割も果たしており、二次元コード100のように専用のセルとはならない。
【0085】
また、判定の際に、特定のセルに付される色に何らかの情報を対応付けておき、この情報を用いた計算処理などによって、特徴的なパターンが含まれているか否かを判定することも可能である。つまり、各セルの配置パターンや、各セルの色などが正しいパターンおよび色となっているかを計算処理によって確認できる情報(例えば、誤り検出符号など)を対応付ける。
この場合は、例えば、計算結果の数値等が正しいパターンを示す数値となっているか否か等で判定を行うことになる。そのため、テンプレートにおける特徴的なパターンは、直接的なパターンだけではなく、間接的に正しいパターンを示す数値などの情報として設定される場合もある。
【0086】
そして、ステップS128において、二次元コードとしての特徴的なパターンが含まれていないと判定した場合(No)は、ステップS116に移行し、以降、別のコード領域について上記同様の処理を行う。
一方、ステップS128において、二次元コードとしての特徴的なパターンが含まれていると判定した場合(Yes)は、ステップS130に移行する。
【0087】
ステップS130に移行した場合は、この時点における新規候補領域を二次元コードの領域として検出して、ステップS132に移行する。
この検出処理は、新規候補領域の座標情報に基づき、原画像から新規候補領域を切り出して(複製画像を生成して)、記憶装置70に記憶する処理となる。
ステップS132では、上記ステップS130において検出された二次元コードの領域につき、その二次元コードにおけるセルそれぞれに付された色を特定するための色判定処理を行って、ステップS134に移行する。
この色判定処理は、上記ステップS130において検出された二次元コードの領域を引数として実行され、この二次元コードにおけるセルそれぞれに付された色が戻り値となる。なお、この色判定処理における具体的な処理手順については後述する。
【0088】
ステップS134では、上記ステップS130において検出された二次元コードの領域につき、上記ステップS132において特定された色に基づいて、その二次元コードで示される情報を、セルCそれぞれに付された色およびその組み合わせに基づいて識別して、ステップS136に移行する。
ステップS136では、ステップS134において識別された情報を、RAM62または記憶装置70に格納して、ステップS138に移行する。
【0089】
ステップS138では、変数Xをインクリメント(X+1→X)して、ステップS140に移行する。
ここまで示したように、上述したステップS116〜S136までが行われるのは、ステップS110において特定された候補領域が二次元コードの体をなしていたことを意味している。そのため、このステップS138では、この変数Xをインクリメントすることにより、二次元コードの領域として検出かつ識別された候補領域の数を積算していることになる。
ステップS140では、この時点で変数Xが所定数以上になっているか否かを判定する。つまり、所定数以上の候補領域が二次元コードの体をなしていたか否かを判定する。
【0090】
そして、ステップS140において、変数Xが所定数以上になっていると判定した場合(Yes)は、ステップS140に移行し、変数Xが所定数以上になっていないと判定した場合(No)は、ステップS142に移行する。
つまり、上記ステップS116〜S140は、二次元コードとして検出かつ識別された候補領域の数が所定数以上とならない限り、リストに登録された全てのコード領域について繰り返し行われる。
その後、全ての候補領域について上記ステップS116〜S140が行われたら、上記ステップS116において未処理の候補領域がないと判定されて、ステップS142に移行し、この時点での変数Yの値が、変数nの値より小さい値(Y<n)となっているか否かを判定する。
【0091】
そして、ステップS142において、変数Yの値が変数nの値より小さい値となっていると判定した場合(Yes)は、ステップS144に移行する。
ステップS144に移行した場合は、変数Yをインクリメント(Y+1→Y)して、ステップS108に移行し、上記ステップS108〜S144の処理を行う。
これ以降は、次のエッジ画像に基づいて上記ステップS110〜S144の処理が行われ、その処理の中で変数Xが所定数以上になれば、上記ステップS140で「Yes」と判定されて、ステップS146に移行する。一方、その処理の中で変数Xが所定数以上にならなければ、その次のエッジ画像についての処理が繰り返し行われることとなる。
【0092】
さらに、ステップS142において、変数Yの値が変数nの値以上の値となっていると判定した場合(No)は、変数Xの値に関係なく、ステップS146に移行する。
ステップS146に移行した場合は、識別された二次元コードの情報に基づき、原画像中における指定物品を検出する物品検出処理を実行して、一連の処理を終了する。なお、この物品検出処理における具体的な処理手順については後述する。
【0093】
(3−2)エッジ画像生成処理
続いて、図3のステップS108であるエッジ画像生成処理の処理手順の一例を図5に基づき説明する。図5(a)は、変数Yの値と画像種類およびしきい値との対応関係の一例を示す図であり、(b)は、エッジ画像生成処理の処理手順の一例を示すフローチャートである。
本実施形態において、エッジ画像は、異なる複数種類の変換条件に基づいて行う。
具体的に、第1〜第i(1≦i)の変換条件に対応する第1〜第i番目のエッジ画像までが、それぞれ異なるしきい値で原画像をグレースケール化してなるグレースケール画像を二値化した画像の輪郭部を線形化した画像となる。
【0094】
また、第(i+1)〜第(i+j)の変換条件に対応する第(i+1)〜第(i+j)番目(1≦j)のエッジ画像までが、j種類の色成分それぞれを原画像から抽出した色成分画像をグレースケール化し、該グレースケール画像を予め設定されたしきい値で二値化した二値化画像の輪郭部を線形化した画像となる。
特に、各色成分画像について、予め設定されたしきい値としてk種類(1≦k)のしきい値を用いて二値化を行う場合は、第(i+1)〜第(i+j×k)の変換条件に対応する第(i+1)〜第(i+j×k)番目のエッジ画像までが、j種類の色成分それぞれを原画像から抽出した色成分画像をグレースケール化し、該グレースケール画像をk種類のしきい値それぞれで二値化した二値化画像の輪郭部を線形化した画像となる。
【0095】
従って、最大で「i+j×k」種類の変換条件に基づいて「i+j×k」種類のエッジ画像を生成することができる。
ここでいう「i」および「k」は、予め用意されたしきい値の種類によって値が決定し、「j」は、原画像に用いられている色空間(表色系)の種類によって規定される色成分数によって値が決定する。例えば、しきい値の種類がそれぞれ3種類で、色空間がRGB色空間であれば、「i」および「k」の値は3、「j」の値は3となる。
【0096】
本実施形態では、図5(a)に示すように、変数Yの値に対応する1〜6の数値と、変換条件の種類を示すエッジ画像を生成する際に用いる画像の種類としきい値とが対応付けられてデータテーブルとして記憶装置70に記憶されている。なお、図5(a)の例は、「i」の値が3、「j」の値が3、「k」の値が1となる例である。ここで、変数Yの上限値は、変数nにセットされる値によって決まるが、本実施形態では、ユーザが、要求する二次元コードの検出精度に応じた値を任意にセット可能に構成されている。なお、図5(a)の例では、変数nの最大値は「6」となる。
エッジ画像生成処理が開始されると、図5(b)に示すように、まず、ステップS200に移行し、変数Yの値が3以下となっているか否かを判定する。
【0097】
そして、ステップS200において、変数Yの値が3以下となっていると判定した場合(Yes)は、ステップS202に移行し、変数Yの値が3よりも大きいと判定した場合(No)は、ステップS208に移行する。
ステップS202に移行した場合は、上記図3のステップS102で取得した原画像のデータを複製し、該複製した原画像データに基づき、グレースケール画像を生成して、ステップS204に移行する。
【0098】
ここでは、原画像のデータが、RGBの各色8ビット(0〜255)のカラー画像データであるとして、この画像データからグレースケール画像を生成する。
なお、必須ではないが、原画像データのピクセル数が膨大(例えば、1200万画素等)な場合は、処理負荷および処理時間を考慮して、検出精度を損なわない程度に、解像度をこれよりも低解像度へと変換する処理を行うようにしてもよい。
【0099】
また、グレースケール画像の生成方法としては、例えば、中間値法、平均法等の周知の生成方法がある。
中間値法は、R、G、Bの3つの色成分の値のうち、最大値と最小値の2つを足して2で割ったものを利用してグレースケール化する方法である。
平均法は、平均の取り方によって、算術平均(相和平均)法、幾何平均(相乗平均)法、加重平均法等がある。
算術平均法は、R、G、Bの3つの色成分の値を算術平均(足して3で割る)して平均値を算出し、算出した平均値を利用してグレースケール化する方法である。
【0100】
幾何平均法は、R、G、Bの3つの色成分の値を幾何平均(各色成分の値の対数値を算術平均)して平均値を算出し、算出した平均値を利用してグレースケール化する方法である。
加重平均法は、R、G、Bの3つの色成分の値に対して、重み付けをして3で割り、平均を取ってグレースケール化する方法である。この重み付けの係数の内容によって、NTSC加重平均法、HDTV加重平均法等がある。NTSC加重平均法は、日本やアメリカのテレビ放送で利用されている輝度信号(明るさ)の分離方法のものと同じである。また、HDTV加重平均法は、デジタルハイビジョン放送を映す際に基準とされる、HDTV規格に基づいて重み係数が設定されたものである。
グレースケール画像の生成方法は、処理速度(処理時間)や検出精度等を考慮して適切なものを用いることが望ましい。
【0101】
そして、上記いずれかの方法を用いた場合は、算出された1つの輝度値を、R、G、Bの3つの色成分の値(R=G=B)とする。
なお、ここでは、グレースケール画像を、R,G,Bの各要素の値を輝度値に変換することで生成する例を説明したが、輝度以外に、明度等によってグレースケール画像を生成するようにしてもよい。
このようにして、原画像データの各ピクセル値をグレースケール値に変換することで、グレースケール画像データが生成される。
【0102】
ステップS204では、ステップS202で生成したグレースケール画像データを、現時点の変数Yの値に対応したしきい値により二値化してなる二値化画像データを生成して、ステップS206に移行する。
具体的に、グレースケール画像データの各色のピクセル値が8ビットの階調値で表現されているときに、しきい値と、グレースケール画像の各ピクセル値とを比較し、ピクセル値がしきい値以下のときに、ピクセル値を「0」に変換し、ピクセル値がしきい値より大きいときに、ピクセル値を「255」に変換することで二値化を行う。
【0103】
ここでは、図5(a)に示すように、変数Yの値1、2、3に対して、120、150、200の3種類のしきい値がそれぞれ用意されている。この二値化のしきい値は、二次元コードの「領域規則」および「特徴的なパターン」に応じ、以降の処理において有効な候補領域を抽出し、適切に二次元コードを識別するのに適した値として定められたものである。
従って、変数Yの値が1のときは、しきい値120を用いて上記ステップS202で生成したグレースケール画像を二値化し、変数Yの値が2、3のときは、しきい値150、200をそれぞれ用いて上記ステップS202で生成したグレースケール画像を二値化する。
【0104】
例えば、しきい値120のときに、グレースケール画像におけるあるピクセル値が(80,80,80)である場合は、二値化後の値は、黒色に対応する(0,0,0)となる。一方、しきい値120のときに、グレースケール画像におけるあるピクセル値が(160,160,160)である場合は、二値化後の値は、白色に対応する(255,255,255)となる。
このようにして、上記ステップS202で生成したグレースケール画像データの各ピクセル値を二値化したものが、原画像データに対する二値化画像データとなる。
【0105】
ステップS206では、二値化画像データに対して、二値化画像中の輪郭部を線形化してなるエッジ画像データを生成して、一連の処理を終了し、元の処理に復帰する。
本実施形態では、公知のブレゼンハムの線分描画アルゴリズムによって、二値化画像中に存在する物体の輪郭部を線形化する。なお、本実施形態では、線形化後の輪郭線を形成していない不要なピクセルは除去(例えば、ピクセル値を(0,0,0)に変換)する。
ここで、ブレゼンハムの線分描画アルゴリズムは、割り算等を用いずに全てを整数演算のみで行うことができるため、高速に線分を描画することができる。
このようにして、二値化画像中の輪郭部を線形化した画像のデータが、エッジ画像データとなる。
【0106】
一方、ステップS200において変数Yの値が3よりも大きくてステップS208に移行した場合は、原画像のデータから、変数Yの値に対応した色成分を抽出して、ステップS210に移行する。
ここでは、図5(a)に示すように、変数Yの値4、5、6に対して、赤色、緑色、青色の色成分をそれぞれ抽出する。
【0107】
例えば、変数Yの値が4であり、原画像データのあるピクセル値が(120,80,45)である場合は、赤色成分値(120,0,0)を抽出する。同様に、変数Yの値が5であれば、緑色成分値(0,80,0)を抽出し、変数Yの値が6であれば、青色成分値(0,0,45)を抽出する。
このようにして、各色成分の値を抽出してなる画像データが、赤色成分画像データ、緑色成分画像データ、青色成分画像データとなる。
【0108】
ステップS210では、ステップS208で生成した色成分画像データからグレースケール画像データを生成して、ステップS212に移行する。
グレースケール画像データの生成は、上記ステップS202と同様の処理となる。
ステップS212では、ステップS210で生成したグレースケール画像に対して、予め設定されたしきい値で二値化を行い、二値化画像データを生成して、ステップS206に移行する。
【0109】
ここでは、図5(a)に示すように、変数Yの値4、5、6に対して、共通のしきい値120が用意されている。
従って、上記ステップS210で生成したグレースケール画像データに対して、しきい値120を用いて二値化を行い、ステップS208で生成した色成分画像データに対する二値化画像データを生成する。
【0110】
そして、ステップS212で二値化画像データを生成後は、ステップS206に移行して、二値化画像中の物体の輪郭部を線形化してなるエッジ画像データを生成し、一連の処理を終了して、元の処理に復帰する。
なお、図5(a)に示す例では、色成分画像に対応するグレースケール画像の二値化に用いるしきい値の種類を1種類としたが、この構成に限らず、第7以降の変換条件を設定して、複数種類のしきい値を用いて二値化を行う構成としてもよい。
【0111】
また、図5(a)に示す例では、原画像に対応するグレースケール画像に対してしきい値を小さい値から順に用いて二値化を行い、その二値化画像からエッジ画像を生成する処理を行う構成とした。さらに、原画像に対応するグレースケール画像を用いたエッジ画像の生成処理の後に、色成分画像に対応するグレースケール画像を二値化してエッジ画像を生成する処理を、赤、緑、青の色成分画像の順で行う構成としたが、この構成に限らない。
例えば、原画像に対応するグレースケール画像の二値化に用いるしきい値を別の順番で用いる構成、色成分画像に対応するグレースケール画像の二値化を別の色の順番で行う構成としてもよい。
【0112】
また、例えば、色成分画像を用いたエッジ画像の生成処理を原画像を用いた生成処理よりも先に行う構成、原画像と色成分画像とを用いたエッジ画像の生成処理を交互に行う構成、ランダムに行う構成など、別の順番で行う構成としてもよい。
また、色成分画像に対応するグレースケール画像の二値化を複数種類のしきい値を用いて行う場合は、そのしきい値を用いる順番も小さい方から順に行う構成だけに限らず、別の順番とする構成としてもよい。また、色成分画像に対応するグレースケール画像の二値化に用いるしきい値の値は、原画像に対応するグレースケール画像の二値化に用いるしきい値と同じ値であってもよいし、異なる値であってもよい。
【0113】
また、図5(a)に示す例では、原画像に対するしきい値を3種類、色成分画像に対するしきい値を1種類、色成分画像数を3種類としたが、これらの組み合わせに限らず、異なる種類数の組み合わせとしてもよい。
また、図5(a)に示す例では、原画像および色成分画像の双方を用いてエッジ画像の生成を行うことが可能な構成としたが、この構成に限らず、原画像だけを用いてエッジ画像を生成する構成や、色成分画像だけを用いてエッジ画像を生成する構成など他の構成としてもよい。
【0114】
また、図5(a)に示す例では、原画像に対応するグレースケール画像を二値化する際の3種類のしきい値として、「120」、「150」、「200」を用いているが、これに限らず、別の値を用いる構成としてもよい。同様に、図5(a)に示す例では、色成分画像に対応するグレースケール画像を二値化する際のしきい値として、「120」を用いているが、これに限らず、別の値を用いる構成としてもよい。
【0115】
(3−3)有効領域判定処理
続いて、図3のステップS120である有効領域判定処理の処理手順を図6および図7に基づき説明する。
ここで、図6は、有効領域判定処理の処理手順を示すフローチャートである。また、図7(a)は、理想的な候補領域の形状例を示す図であり、(b)〜(e)は、誤差範囲外の形状例を示す図であり、(f)〜(g)は、誤差範囲内の形状例を示す図である。
候補領域の縦横比は、図7(a)に示すように、理想の領域形状における短辺の長さAと長辺の長さBとの比(A:B=A/B)となっていることが望ましい。また、候補領域の各辺間(四隅)の角度は、図7(a)に示すように、理想的には、いずれも90°であることが望ましい。
【0116】
しかし、上記ステップS110の候補領域の特定処理においては、矩形形状の閉領域(矩形領域)であれば何でも候補領域として特定するようになっているため、様々な外形形状の候補領域が特定されることになる。また、特定された候補領域が二次元コードのものであっても、撮影環境(撮影角度等)や撮影画像の画質等によって、形状が理想的な形状とならないこともある。そのため、厳密な判定を行ってしまうと、二次元コードの領域に該当する領域をも除外することになってしまう。そこで、本実施形態では、判定の際の縦横比および角度等の領域規則で定められた情報に誤差範囲を設定している。
ここでは、二次元コードの領域が、図2に示すように、矩形形状であることと、処理負荷とを考慮して、縦横比と各辺間の角度とから有効領域か否かを判定する例を説明する。
【0117】
有効領域判定処理が開始されると、図6に示すように、まず、ステップS300に移行し、選択された候補領域の縦横比が、テンプレートの領域規則に定められた縦横比の誤差範囲内か否かを判定する。
例えば、図7(b)、(c)および(f)に示す候補領域のように、短辺の長さをC、長辺の長さをDとした場合に、縦横比は「C:D=C/D」となり、理想形との誤差drは、「dr=A/B−C/D」となる。そして、誤差範囲を「−dx〜+dx」とし、本実施形態では、drが「−dx〜+dx」の範囲内であれば、誤差範囲内であると判定し、「−dx〜+dx」の範囲外であれば、誤差範囲外であると判定する。
【0118】
そして、ステップS300において、候補領域の縦横比が誤差範囲外であると判定した場合(No)は、ステップS302に移行し、候補領域の縦横比が誤差範囲内であると判定した場合(Yes)は、ステップS304に移行する。
ステップS302に移行した場合は、誤差範囲外と判定された候補領域を無効な候補領域であると判定して(判定結果を戻り値として)、一連の処理を終了し、元の処理に復帰する。
これにより、例えば、図7(b)および(c)に示すように、理想の縦横比A:Bに対して極端に縦横比の異なる形状を排除することができ、これらの領域に対して以降の処理(図3のステップS124以降の処理)が行われるのを防ぐことができる。
【0119】
一方、縦横比が誤差範囲内であると判定されステップS304に移行した場合は、候補領域の各辺間で形成される角度が、テンプレートの領域規則に定められた角度の誤差範囲内か否かを判定する。
例えば、図7(d)〜(f)に示すように、各辺間(四隅)の角度をβ1〜β4とした場合に、理想形の角度との誤差dβ1〜dβ4は、理想形の角度90°から角度β1〜β4をそれぞれ減じたもの「dβ1〜dβ4=90°−β1〜90°−β4」となる。そして、誤差範囲を「−dy〜+dy」とし、本実施形態では、dβ1〜dβ4がいずれも「−dy〜+dy」の範囲内であれば誤差範囲内であると判定し、いずれか1つでも「−dy〜+dy」の範囲外であれば誤差範囲外であると判定する。
【0120】
そして、ステップS304において候補領域の各辺間の角度が誤差範囲外であると判定した場合(No)は、ステップS306に移行し、候補領域の各辺間の角度が誤差範囲内であると判定した場合(Yes)は、ステップS308に移行する。
ステップS306に移行した場合は、誤差範囲外と判定された候補領域を無効な候補領域であると判定して(判定結果を戻り値として)、一連の処理を終了し、元の処理に復帰する。
これにより、例えば、図7(d)および(e)に示すように、理想の角度に対して角度β1〜β4の少なくとも1つが誤差範囲外の角度となっている形状を排除することができ、これらの領域に対して以降の処理(図3のステップS124以降の処理)が行われるのを防ぐことができる。
【0121】
一方、角度が誤差範囲内であると判定されステップS308に移行した場合は、誤差範囲内と判定された候補領域を有効な候補領域であると判定して(判定結果を戻り値として)、一連の処理を終了し、元の処理に復帰する。
例えば、図7(f)に示す候補領域のように、角度β1〜β4の誤差dβ1〜dβ4がいずれも誤差範囲内(この例では、いずれも90°)で、縦横比の誤差drが「−dx〜+dx」の範囲内となる程度で縦横比のみが異なる場合に、この候補領域は除外されることなく、有効な候補領域と判定される。
【0122】
同様に、例えば、図7(g)に示す候補領域のように、縦横比の誤差drが「−dx〜+dx」の範囲内であるが、角度β1〜β4がいずれも90°とならずに斜めに歪んでいても、角度β1〜β4の誤差dβ1〜dβ4のいずれもが「−dy〜+dy」の誤差範囲内となる場合には、この候補領域は除外されることなく、有効な候補領域と判定される。
つまり、本実施形態では、縦横比および角度の双方が誤差範囲内に納まっている候補領域のみを有効な候補領域と判定する。
【0123】
(3−4)色判定処理
続いて、図3のステップS132である色判定処理の処理手順を図8に基づき説明する。
ここで、図8は、色判定処理の処理手順の一例を示すフローチャートである。
色判定処理が開始さると、図8に示すように、まず、ステップS400に移行して、図3のステップS130で検出された二次元コードの領域におけるセパレータ110の領域を特定(座標を特定)して、ステップS402に移行する。
【0124】
なお、検出された二次元コードの領域は、例えば、図2の形状姿勢において、左上のピクセルの座標を(0,0)として管理される。そして、セパレータ110の特定は、座標(0,0)から、行方向および列方向にピクセルを走査(ラスタスキャン)して、各ピクセルの値(色)が、セパレータ110の色(本実施形態では特定セルに使われている黒(k))の判定領域に含まれているか否かを判定する。そして、ピクセルの色が判定領域に含まれていると判定したときに、そのピクセル(座標)をセパレータ110と判定する。そして、この座標情報をRAM62または記憶装置70に記憶する。
なお、図2に例示した構成の二次元コード100については、上記図3のステップS128において、既に、候補領域から、特徴的なパターンを識別済みであるので、識別済みの領域(例えば、ヘッダー領域および特定セルを含む領域)を切り離した残りの部分だけについて色判定処理を行うようにしてもよい。
【0125】
ステップS402では、セパレータ110の座標情報に基づき、各セルの存在する領域を分割して、ステップS404に移行する。
具体的に、黒色(k)のピクセルが所定数以上連続する領域や、セパレータ110に周囲(四辺)を囲まれた領域の座標を各セルの座標として、その座標情報をRAM62または記憶装置70に記憶する。
【0126】
ステップS404では、以降の処理で参照する変数を初期化(0→ap,0→x,0→y)して、ステップS406に移行する。
ステップS406では、セパレータ110の特定された二次元コードの領域における座標(x,y)のピクセルを選択して、ステップS408に移行する。
ステップS408では、変数apの値が予め定められた一定数以上か否かを判定し、一定数以上ではないと判定した場合(No)は、ステップS410に移行し、一定数以上であると判定した場合(Yes)は、ステップS422に移行する。
ステップS410に移行した場合は、選択したピクセルの値(色)が、二次元コードにおいて使用される複数の色それぞれを中心座標として広がる色空間上の判定領域のうち、いずれかの判定領域に含まれている(いずれの判定領域内に位置する)か否かを判定する。
【0127】
そして、ステップS410において、選択したピクセルがいずれかの判定領域内に含まれていると判定した場合(Yes)は、ステップS412に移行し、選択したピクセルがいずれの判定領域にも含まれていないと判定した場合(No)は、ステップS414に移行する。
ステップS412に移行した場合は、変数apをインクリメント(ap+1→ap)して、ステップS414に移行する。
ここでは、変数apをインクリメントすることで、判定領域に含まれていると判定されたピクセルの数を計数している。この判定結果(判定領域の情報および計数結果を含む)は、各セルに対応付けてRAM62または記憶装置70に記憶される。
【0128】
なお、ここでは、変数apにより、同じ色の判定領域に含まれるピクセルの数を計数することが望ましい。しかし、各セルの領域において、それぞれ異なる色の判定領域に含まれるピクセルがある場合に、上記ステップS412の処理では、これらを区別せずに計数してしまう。つまり、同じセルの領域において、イエローと判定されても、マゼンタと判定されても、変数apはインクリメントされてしまう。従って、それぞれ異なる色の判定領域に含まれるピクセルがあることを想定した場合に、別の変数を用いて各領域に含まれるピクセルの数を計数し、上記ステップS412の処理を、現時点で最も数の多い判定領域のピクセル数を変数apに設定する処理に代えてもよい。
その後、ステップS414に移行して、変数xの値が、その行の一番右端のx座標であるxEであるか否かを判定する。
【0129】
一方、選択したピクセルがいずれの判定領域にも含まれていないと判定された場合も、ステップS414に移行して、変数xの値が、xEであるか否かを判定する。
そして、変数xの値がxEではないと判定した場合(No)は、ステップS416に移行し、変数xの値がxEであると判定した場合(Yes)は、ステップS422に移行する。
ステップS416に移行した場合は、変数xをインクリメント(x+1→x)して、ステップS418に移行する。
つまり、変数xの値がxEではない場合に、変数xをインクリメントすることで、1つ右隣のピクセルに座標を変更する。
【0130】
ステップS418では、現時点の座標(x,y)が次のセルに対応するセパレータ部分の開始座標であるか否かを判定する。そして、次のセパレータの開始座標であると判定した場合(Yes)は、ステップS420に移行し、そうでない場合(No)は、ステップS406に移行する。
ステップS420に移行した場合は、変数apを初期化(0→ap)して、ステップS406に移行する。
つまり、色判定領域に含まれる色のピクセルが一定数以上とならないまま、x座標が、次のセルに対応するセパレータの開始x座標に到達した場合に、変数apを初期化する。
【0131】
一方、ステップS414において変数xの値がxEであると判定されてステップS422に移行した場合は、変数yの値が列方向の一番下端のy座標であるyEであるか否かを判定する。
そして、変数yの値がyEではないと判定した場合(No)は、ステップS424に移行し、変数yの値がyEであると判定した場合(Yes)は、ステップS438に移行する。
【0132】
ステップS424に移行した場合は、変数apおよび変数xを初期化(0→ap,0→x)し、変数yをインクリメント(y+1→y)して、ステップS406に移行する。
つまり、変数xを初期化し、変数yをインクリメントすることで、1つ下隣の行で且つ一番左端のピクセルに座標を変更する。このとき、座標(x,y)が次のセルに対応した領域の座標となるので、変数apも初期化する。
【0133】
一方、ステップS408において、変数apの値が一定数以上ではないと判定されてステップS426に移行した場合は、変数xの値が、xEであるか否かを判定する。
そして、変数xの値がxEではないと判定した場合(No)は、ステップS428に移行し、変数xの値がxEであると判定した場合(Yes)は、ステップS432に移行する。
ステップS428に移行した場合は、変数xをインクリメント(x+1→x)して、ステップS430に移行する。
【0134】
ステップS430では、現時点の座標(x,y)が次のセルに対応するセパレータの開始座標であるか否かを判定する。そして、次のセパレータの開始座標であると判定した場合(Yes)は、ステップS432に移行し、そうでない場合(No)は、ステップS426に移行する。
ステップS432に移行した場合は、変数apを初期化(0→ap)して、ステップS406に移行する。
つまり、変数apが一定数以上のときに、上記ステップS426〜S430の処理を繰り返し行うことで、各セルCに対応する領域においてその行の残りのピクセルに対して上記ステップS410の色判定処理を省略している。
【0135】
ここで、上記ステップS408における変数apの比較対象である一定数は、色の判定精度を考慮して予め設定される値であり、各行における各セルCのピクセル数未満の値となる。従って、各行の色の判定に十分な一定数の色の判定がされたことに応じて、残りのピクセルに対する色判定処理を省略することとなる。
具体的に、例えば、一定数を10としたときに、あるセルの領域におけるいずれかの行においてイエローを中心座標とした判定領域に含まれると判定されたピクセルが10ピクセル(ap=10)になったときに、ステップS408において、変数apの値が一定数以上であると判定され、該当セルCの同じ行の残りのピクセルに対しては上記ステップS410の色判定処理が省略される。
【0136】
一方、ステップS426において、変数xの値がxEであると判定されてステップS434に移行した場合は、現時点における変数yの値が列方向の一番下端のy座標であるyEであるか否かを判定する。
そして、ステップS434において、変数yの値がyEではないと判定した場合(No)は、ステップS436に移行し、変数yの値がyEであると判定した場合(Yes)は、ステップS438に移行する。
【0137】
ステップS436に移行した場合は、変数apおよび変数xを初期化(0→ap,0→x)し、変数yをインクリメント(y+1→y)して、ステップS406に移行する。
一方、二次元コードの領域における全てのピクセルについて色判定が終了して、ステップS438に移行した場合は、RAM62または記憶装置70に記憶された各セルCの領域の各行のピクセルの色の判定結果に基づき、各セルCの色を判定して、ステップS440に移行する。
【0138】
具体的に、各セルCの領域について、判定領域内に含まれるピクセル数が一定数以上となっている行が所定数以上のときに、各セルCの色をその判定領域の中心座標の色として判定する。そして、各セルCと、判定された色とが対応づけられてRAM62または記憶装置70のデータテーブルに登録される。ここでは、データテーブルに登録済のセルCに対して色が判定された場合、このセルCに対応する色として、こうして判定された最新の色に更新される。なお、判定領域内に含まれるピクセル数が一定数以上となっている行が所定数未満であり、二次元コードに用いられる複数色の判定領域のいずれにも含まれていないと判定された場合には、該当のセルCに対し、判定領域外の色である旨が対応づけられる。
【0139】
ステップS440では、ステップS438で色が判定されたセルCの中に、着色規則に従っていない色の付されたセルCが一定数以上存在しているか否かを判定する。
ここでは、この時点でセルCと色とが対応づけて登録されたデータテーブルの中に、判定領域外の色である旨が対応づけられたセルCが一定数(例えば全体の3割)以上存在していることをもって、着色規則に従っていない色の付されたセルCが所定割合以上存在していると判定される。
【0140】
なお、ここでは、着色規則に従っていない色の付されたセルCが一定数以上存在しているか否かを、二次元コードのセルCに占める相対的な数(つまり割合)により判定するように構成しているが、二次元コードのセルCに占める絶対数により判定するように構成してもよいし、着色規則に従っていないセルCが特定のパターン(例えば、このセルCが2つ以上連続しているなど)で配置されている場合におけるこのパターンの数により判定するように構成してもよい。
【0141】
このステップS440において、着色規則に従っていない色の付されたセルCが一定数以上存在していると判定した場合(Yes)は、ステップS442に移行する。
ステップS442に移行した場合は、判定領域を変更して再度の色判定が可能な状態であるか否かを判定する。
ここでは、ステップS410における色判定で参照された判定領域が、あらかじめ定められた上限まで変更されている場合に、再度の色判定が可能な状態ではないと判定される。
【0142】
この「あらかじめ定められた上限」とは、各判定領域が他の判定領域と干渉しないように変更できる範囲として定められたものであり、後述のように、判定領域を単純に拡げていく場合であれば、各判定領域を他の領域と干渉する程度まで拡張した状態となっていることをもって「あらかじめ定められた上限まで変更されている」こととすればよい。また、判定領域を変移させていく場合であれば、判定領域で規定される色が別の色成分になる直前の位置(境界)まで変移した状態となっていることをもって、「あらかじめ定められた上限まで変更されている」こととすればよい。
【0143】
このステップS442において、再度の色判定が可能であると判定された場合(Yes)は、ステップS444に移行し、そうでない場合(No)は、ステップS446に移行する。
ステップS444に移行した場合は、上記ステップS410における色判定で参照された判定領域を変更して、ステップS404に移行する。ここでは、各判定領域を色空間上で一定領域だけ拡げる、または、各判定領域を色空間上で一定距離だけ変移させることにより判定領域それぞれが変更される。
【0144】
なお、この後者の場合、判定領域は、二次元コードの画像領域における色成分の偏りを打ち消すことのできる色空間上の位置へと変移させるように構成するとよい。具体的には、二次元コードの画像領域における色の分布を参照し、その分布において特定の色成分が全体的に大きくなっている場合に、この色成分を小さくする方向に各判定領域を変移させる。
【0145】
こうして、ステップS444を終えた後、ステップS404に移行し、再度、ステップS402で分割された各セルCの領域について色の判定処理が行われる。
以降、再度色が判定されたセルCそれぞれの中に、着色規則に従っていない色の付されたセルCが一定数以上存在していないと判定されるまで(ステップS440の「No」の分岐)、判定領域の変更および再度の色判定が繰り返される(ステップS404〜S444)。
【0146】
一方、ステップS442において、再度の色判定が不可能であると判定されステップS446に移行した場合は、エラー処理を行って、一連の処理を終了し、元の処理に復帰する。
このエラー処理では、いずれのセルCの色についても判定できなかったものとし、データテーブルに登録されていた全ての対応関係を消去され、こうして空のデータテーブルが戻り値として元の処理へと復帰する。この場合、図3のコード利用物品検出処理では、ステップS134,S136で何らの処理も行われることなく、S138以降の処理が行われる。
【0147】
そして、上記ステップS438〜S444までの処理中に、上記ステップS440において、着色規則に従っていない色の付されたセルCが一定数以上存在していないと判定された場合(No)は、ステップS448に移行する。
ステップS448に移行した場合は、着色規則に従っていない色の付されたセルCが存在しているか否かを判定する。
このステップS448において、該当セルCが存在していると判定した場合(Yes)は、ステップS450に移行し、該当セルCが存在していないと判定した場合(No)は、一連の処理を終了し、元の処理に復帰する。
【0148】
ステップS450に移行した場合は、二次元コードの中から該当セルCを特定して、ステップS452に移行する。
ここでは、この時点でデータテーブルに登録されているセルCのうち、着色規則に従っていない色の付されたセルCが特定され、このセルCが二次元コードの中から特定される。
ステップS452では、上記ステップS448において特定されたセルCそれぞれについて、着色規則に従って本来付されるべき色を推定して、ステップS454に移行する。
【0149】
ここでは、上記ステップS448において特定されたセルCに対し、着色規則に従って本来付されるべき色の候補として、そのセルCに隣接するセルCに付された色との関係で考えられる色が選出され、その候補の中から最も確からしい色が、そのセルCに付されるべき色であるとして推定される。
ステップS454では、上記ステップS448において特定されたセルCそれぞれについて、該セルCの色が、上記ステップS452において推定された色であると判定し、一連の処理を終了し、元の処理に復帰する。
【0150】
ここでは、上記ステップS448において特定されたセルCそれぞれについてのみ、データテーブルにおける色の更新がなされる。
この場合と、ステップS448において該当のセルCが特定されなかった場合は、この時点でセルCと色との対応関係が登録されたデータテーブルを戻り値として図3のコード利用物品検出処理へと戻る。この場合、コード利用物品検出処理では、データテーブルに基づいて各セルCに付された色を認識したうえで、ステップS134による情報の識別を行うこととなる。
なお、上記図1のステップS128における、特徴的なパターンを含むか否かを判定する処理を行う際に、上記ステップS400〜S454に示すアルゴリズム、または、上記ステップS400〜S438に示すアルゴリズムを適用することが可能である。
【0151】
また、データ領域しか有さない二次元コードの構成であれば、ステップS128の処理を行う前に、上記ステップS400〜S438の色判定処理、または、上記ステップS400〜S454の色判定処理を先に行い、その判定結果に基づき、特徴的なパターンを含むか否かを判定する処理を行う構成とすることも可能である。例えば、上記図1のステップS126の処理の次に、色判定処理(S132)を行う構成とし、ステップS128では、先に行われた色判定処理の結果に基づき、特徴的なパターンを含むか否かの判定を行う。この場合は、以降の色判定処理を不要とすることができる。
【0152】
(3−5)物品検出処理
続いて、図3のステップS146である物品検出処理の処理手順を図9〜図12に基づき具体例を示しながら説明する。
ここで、図9は、物品検出処理の処理手順の一例を示すフローチャートである。また、図10は、データベースに登録された識別情報および物品情報の一例を示す図である。また、図11(a)は、物品検出モードの検出対象画像例を示す図であり、(b)は、検出結果の表示例を示す図である。また、図12(a)は、期限管理モードの検出対象画像例を示す図であり、(b)は、検出結果の表示例を示す図であり、(c)は、カメラ76の配設位置の一例を示す図である。
物品検出処理が開始さると、図9に示すように、まず、ステップS500に移行して、設定されている検出モードが、物品検出モードか否かを判定する。
【0153】
そして、設定されている検出モードが物品検出モードであると判定した場合(Yes)は、検出対象として指定された物品(以下、指定物品と称す)の情報を取得して、ステップS502に移行し、物品検出モードではないと判定した場合(No)は、ステップS520に移行する。
ステップS502に移行した場合は、記憶装置70に記憶された物品情報に基づき、RAM62または記憶装置70に格納された各二次元コードの識別情報に対応する物品情報に対応する物品のなかに、指定物品があるか否かを判定する。
【0154】
ここで、物品情報としては、例えば、図10に示すように、上記図3のステップS134で識別された識別情報に対応付けて、品名コード、品種、個数、保管開始時期、出荷期限、消費期限が登録されている。
本実施形態では、ダンボール等の梱包材に梱包された物品に対して、各梱包材に1つの二次元コードを付しており、品名コードは、各梱包材に梱包された1以上の物品に対して付与されるものである。従って、個数情報は、1つの梱包材に梱包された物品の個数の情報となる。
【0155】
また、保管開始時期は、例えば、倉庫で管理される物品であれば、入庫日の情報が登録される。また、店内の商品棚に陳列される食品等の物品であれば、陳列日の情報あるいは物品の製造日の情報が登録される。また、食品や薬品等の、経過日数に応じて状態が劣化していくような物品の場合は、消費期限(賞味期限)の情報が登録される。また、倉庫に保管する物品について、出荷(保管)期限がある場合は、出荷(保管)期限の情報が登録される。
従って、指定物品の有無の判定は、指定された品名コードに対応する識別情報が、上記図3のステップS134で識別された識別情報の中にあるか否かを判定することによって行われる。
【0156】
そして、ステップS502において、指定物品があると判定した場合(Yes)は、ステップS504に移行し、指定物品がないと判定した場合(No)は、ステップS518に移行する。
指定物品があると判定してステップS504に移行した場合は、記憶装置70の物品情報から、指定物品の情報を取得して、ステップS506に移行する。
ステップS506では、RAM62または記憶装置70から、原画像の画像データと、指定物品の識別情報に対応する二次元コードの原画像における座標情報とを取得して、ステップS508に移行する。
【0157】
ここで、原画像のデータとして、図11(a)に示すように、ダンボール箱に梱包された状態の複数の物品200が積み上げられ、ダンボール箱の正面側の面に、二次元コード100が付された画像を示す画像データが取得されたとする。図11(a)の画像例では、物品が仕切り板によって8箱毎に仕切られており、全部で8箱×12=96箱の物品が積み上げられた状態となっている。これらのうち、指定物品の検出の対象となる領域は、二次元コードが正面側に表示されている(画像内に含まれている)48箱となる。
【0158】
ステップS508では、ステップS506において取得した原画像のデータに対して、指定物品の二次元コードの画像領域を強調表示するための加工処理を行って、ステップS510に移行する。
ここで、上記「強調表示するための加工処理」は、例えば、原画像中の、二次元コードの画像領域の周囲を赤色等の目立つ色の線で囲んだり、二次元コードの画像領域を目立つ色で塗りつぶしたり、二次元コードの画像領域の輪郭部を強調(輪郭線を太くする、輪郭線を赤色等の目立つ色に変更する、これら双方など)したりする処理となる。他にも、点滅表示やアニメーション表示されるように加工処理を施してもよい。
【0159】
つまり、「強調表示するための加工処理」は、原画像中の検出対象の指定物品に対応する二次元コードの画像が視覚的に目立つようにマーキング等の強調表示加工を行う処理となる。
ステップS510では、指定物品に対応する二次元コードが複数あるか否かを判定し、複数あると判定した場合(Yes)は、ステップS512に移行し、そうでない場合(No)は、ステップS514に移行する。
【0160】
ステップS512に移行した場合は、保管開始時期の情報に基づき、原画像に対して、指定物品に対応する各二次元コードの近傍に、保管開始順に番号画像を追加する加工を行って、ステップS514に移行する。
ステップS514では、原画像に、指定物品の保管開始時期、出荷期限、消費期限等の画像情報を追加する加工処理を行って、ステップS516に移行する。
これら物品に係る情報は、画像中の物品200の表示されていない部分等に表示されるように加工処理が行われる。なお、表示領域が確保できない場合は、これら情報の表示領域を生成する加工処理を行ってもよい。
【0161】
また、指定物品に対応する二次元コードが複数ある場合は、各番号に対応付けて物品に係る情報を表示する。
なお、ステップS514の物品200に係る情報の表示処理は、行わないようにする、または行わない設定にできるようにしてもよく、行わない場合は、ステップS512の処理からステップS516の処理へと移行する。
この場合は、ステップS516において、ステップS508,S512およびS514で加工された画像を、表示装置72に表示する処理を行って、上記一連の物品検出処理を終了し、元の処理に復帰する。
【0162】
ここで、図11(b)の画像例は、図11(a)の原画像から、3つの指定物品が検出された場合の例であり、各物品に対応する二次元コードを、四角い枠で囲むマーキングが施されている。これにより、ユーザは、指定物品が原画像中のいずれの物品200なのかを視覚的に瞬時に把握することができる。
さらに、図11(b)に示すように、指定物品の各二次元コードの近傍(右下)には、入庫日の古い順に、番号(1)〜(3)が付される(表示される)。これにより、ユーザは、番号画像から物品の入庫された順番を視覚的に瞬時に把握することができ、簡易に入庫日の古い順に出荷作業を行うことが可能となる。特に、物品に消費期限のある場合に、消費期限へと先に到達する物品から順に出荷を行うことができる。
【0163】
また、図11(b)に示すように、画面右上には、入庫順に対応する番号と共に品名コード、入庫日、出荷期限および消費期限の文字画像が表示される。これにより、ユーザは、検出された物品が指定物品に間違いないか否かの判断を容易に行え、且つ、正確な入庫日、出荷期限および消費期限を容易に知ることができる。図11(b)の例では、物品は薬品であり、各物品の出荷期限や消費期限を確認することができる。
【0164】
一方、ステップS502において指定物品がないと判定されてステップS518に移行した場合は、RAM62または記憶装置70から、原画像の画像データを取得し、取得した画像データに基づき、表示装置72に原画像を表示する。そして、一連の処理を終了して、元の処理に復帰する。
つまり、撮影した画像中に指定物品が含まれていない場合に、強調表示加工や追加表示加工などの施されていない原画像を表示する。これにより、ユーザは指定物品が無いことを視覚的に瞬時に把握することができる。なお、指定物品が無い旨を示すメッセージ等の画像を原画像中に表示するようにしてもよい。
【0165】
また、ステップS500において、設定された検出モードが物品検出モードではなくてステップS520に移行した場合は、設定された検出モードが期限管理モードか否かを判定する。
そして、設定された検出モードが期限管理モードであると判定した場合(Yes)は、ステップS522に移行し、期限管理モードではないと判定した場合(No)は、ステップS532に移行する。
【0166】
ステップS522に移行した場合は、記憶装置70に記憶されたデータベースから、図3のステップS134において識別して得られた識別情報に対応する出荷期限および消費期限の情報を取得して、ステップS524に移行する。
ステップS524では、コンピュータシステムの有する不図示のRTC(Real Time Clock)から取得した現在(現時点)の年月日時刻の情報と、取得した出荷期限および消費期限とを比較して、期限を経過した物品があるか否かを判定する。
【0167】
そして、ステップS524において、期限を経過した物品(以下、経過物品と称す)があると判定した場合(Yes)は、ステップS526に移行し、経過物品がないと判定した場合(No)は、ステップS530に移行する。
ここで、ステップS524において、期限が経過した物品ではなくて、例えば、期限までの日数が所定日数以下となった物品を検出するようにしてもよい。つまり、ステップS524において、取得した出荷期限および消費期限から所定期間を減じた期限と、現時点の年月日時刻の情報とを比較して判定を行ってもよい。
【0168】
ステップS526に移行した場合は、RAM62または記憶装置70から、原画像の画像データと、経過物品に対応する二次元コードの領域の座標情報とを取得して、ステップS528に移行する。
ここで、原画像のデータとして、例えば、図12(a)に示す、商品陳列棚に複数の物品300が載置され、各物品300の正面側に、二次元コード100が付された被写体の撮影画像を示す画像データが取得されたとする。なお、図12の例では、図12(b)に示すように、二次元コードリーダ1が、携帯型の情報端末で構成されており、この情報端末の裏面側上部には、図12(c)に示すように、カメラ76のレンズ部分が配設されている。これにより、ユーザは、図12(b)に示されている表示画面を見ながら、裏面画のカメラ76で、商品陳列棚を撮影することができる。そして、原画像のデータは、図12(b)に示すように、撮影範囲PRの撮影画像のデータとなる。つまり、ここではユーザが二次元コードリーダ1を携帯し、商品陳列棚の商品を撮影しながら経過物品の検出結果を確認できる実施態様を例示している。
【0169】
ステップS528では、ステップS526において取得した原画像のデータに対して、経過物品の二次元コードの画像領域を強調表示するための加工処理を行って、ステップS516に移行する。
ここでの加工処理は、上記ステップS508の処理と同様の処理となる。
この場合は、ステップS516において、ステップS528で加工された画像を、表示装置72に表示する処理を行って、上記一連の物品検出処理を終了し、元の処理に復帰する。
図12(b)の画像例は、3つの経過物品が検出された例であり、各経過物品に対応する二次元コードを、丸い枠で囲むマーキングが施されている。これにより、ユーザは、経過物品が原画像中のいずれの物品300なのかを視覚的に瞬時に把握することができる。
【0170】
一方、ステップS524において、経過物品がないと判定してステップS530に移行した場合は、RAM62または記憶装置70から、原画像の画像データを取得し、取得した画像データに基づき、表示装置72に原画像を表示する。そして、一連の処理を終了して、元の処理に復帰する。
つまり、撮影した画像中に経過物品が含まれていない場合に、強調表示加工や追加加工などの施されていない原画像を表示する。これにより、ユーザは経過物品が無いことを視覚的に瞬時に把握することができる。なお、経過物品が無い旨を示すメッセージ等の画像を原画像中に表示するようにしてもよい。
【0171】
また、ステップS520において、期限管理モードではないと判定してステップS532に移行した場合は、モードの設定を促すメッセージを表示装置72に表示する処理を行って、上記一連の処理を終了し、元の処理に復帰する。
この処理は、物品検出モードおよび期限管理モードのいずれか一方が必ず設定されるように構成されている場合には不要の処理となる。
【0172】
(3−6)検出モード設定処理
続いて、図3のコード利用物品検出処理を実行する前等に行われる、検出対象の物品を指定する検出モード設定処理の処理手順を図13に基づき説明する。
ここで、図13は、検出モード設定処理の処理手順の一例を示すフローチャートである。
検出モード設定処理は、上記図3のコード利用物品検出処理とは独立して行われる処理であって、入力装置74を介したユーザの指示入力に応じて起動し、図13に示すように、まず、ステップS600に移行する。
【0173】
ステップS600では、指示入力に応じて、検出モードを設定する設定モードへと移行して、ステップS602に移行する。
ここでは、入力装置74によって、簡易に検出モードが選択できるように、物品検出モードを選択するボタンのグラフィックスと、期限管理モードを選択するボタンのグラフィックスとを表示装置72の表示画面に表示する。
【0174】
そして、例えば、画面に表示されたボタンを、入力装置74がタッチパネルであれば指でタッチすることで選択かつ押下し、入力装置がマウスであればマウスカーソルによって選択してクリックすることにより押下することで、いずれかのモードを選択できるようにしている。つまり、GUI(Graphical User Interface)によって、簡易に検出モードの選択および設定を行うことが可能となっている。
【0175】
ステップS602では、物品検出モードが選択されたか否かを判定し、選択されたと判定した場合(Yes)は、ステップS604に移行し、そうでない場合(No)は、ステップS612に移行する。
ステップS604に移行した場合は、検出モードとして物品検出モードを設定して、ステップS606に移行する。
ステップS606では、指定物品の入力を促す画面を表示装置72の表示画面に表示して、ステップS608に移行する。
【0176】
例えば、指定物品として指定可能な物品のリストを表示して、その中から選択できるようにする。また、品名、品名コード、シリアル番号等で指定可能な物品を検索できるようにしてもよい。
ステップS608では、指定物品の情報が入力されたか否かを判定し、入力されたと判定した場合(Yes)は、ステップS610に移行し、そうでない場合(No)は、入力されるまで判定処理を続行する。
なお、指定する物品が見つからなかった場合等において、設定モードを終了した場合は、判定処理から抜けて、一連の処理を終了する。
【0177】
ステップS610では、ステップS608で入力された検出対象の指定物品を設定して、処理を終了する。
これにより、検出モードとして物品検出モードが設定され、さらに、指定物品が設定される。具体的に、これらの情報がRAM62の所定アドレスに格納される。
【0178】
一方、ステップS602において、物品検出モードが選択されずにステップS612に移行した場合は、期限管理モードが選択されたか否かを判定する。そして、期限管理モードが選択されたと判定した場合(Yes)は、ステップS614に移行し、そうでない場合(No)は、ステップS602に移行して、判定処理を続行する。
ステップS614に移行した場合は、検出モードとして期限管理モードを設定して、一連の処理を終了する。
これにより、検出モードとして期限管理モードが設定される。物品検出モードと同様に、この情報はRAM62の所定アドレスに格納される。
【0179】
(4)作用,効果
上記実施形態における二次元コードリーダ1であれば、取得された画像(原画像)から、グレースケール画像の生成(図5(b)のS202,S210)、二値化画像の生成(同図S204,S212)、二値化画像中の物体の輪郭部の線形化(同図S206)を経てエッジ画像を生成することができる(図3のS108)。
【0180】
さらに、生成したエッジ画像に基づき、このエッジ画像中における候補領域の抽出(同図S110)、この抽出した候補領域に対応する原画像中の対応領域それぞれに特徴的なパターンが含まれているか否かの判定(同図S128)を経て、原画像中から二次元コードの領域を検出することができる(同図S130)。
このように、二値化画像中の物体の輪郭部が線形化されたエッジ画像から、候補領域を抽出することができるので、線形化しない場合と比較して高速に候補領域を抽出することができる。
【0181】
そして、原画像の領域において、候補領域に対応する対応領域のうち、特徴的なパターンが含まれている対応領域を、原画像中における二次元コードの領域として検出することにより、原画像中に含まれる複数の二次元コードそれぞれを特定することができるようになる。
また、上記実施形態では、原画像に基づいて生成される複数種類のエッジ画像それぞれについて、候補領域の抽出、この抽出した候補領域に特徴的なパターンが含まれているか否かの判定、および、二次元コードの領域の検出を繰り返し実施している(図3のS108〜S144)。
これにより、特定のエッジ画像に基づいて二次元コードの領域を検出できなかったとしても、別のエッジ画像に基づいて検出されることが期待でき、その結果、原画像における二次元コードの検出精度を高めることができる。
【0182】
また、この繰り返しの過程では、特定のエッジ画像について新たに抽出された候補領域が、先に参照されたエッジ画像について抽出された抽出済み候補領域と、原画像の領域において一致している場合も想定される。ところが、上記構成では、このような抽出済み領域について、抽出した候補領域に特徴的なパターンが含まれているか否かの判定、および、二次元コードの領域の検出を実施しない(同図S124の「Yes」の分岐)。
そのため、複数のエッジ画像それぞれに基づいて検出された各二次元コードの領域について、この二次元コードにてコード化された情報を識別するに際し、本来同じものであるはずの二次元コードを繰り返し識別してしまうといった無用な処理負担をなくすことができる。
【0183】
また、この繰り返しの過程では、理想的な領域形状に対して、各候補領域の縦横比および四隅の角度等の形状情報が、あらかじめ設定された誤差範囲内となるか否かを判定することによって(図6のS300〜S308)、抽出した候補領域が有効な候補領域であるか否かを判定することができる(図3のS122)。
これにより、理想的な形状に対して、誤差範囲外の形状を有する候補領域を、以降の処理対象から除外することができ、二次元コードの領域とは明らかに異なる領域等に対して、無用な処理が行われるのを防ぐことができる。
【0184】
また、上記実施形態では、原画像からエッジ画像を生成し、このエッジ画像から、二次元コードの領域の候補となる候補領域を抽出したうえで(図3のS110)、原画像における、この抽出した候補領域に対応する領域から二次元コードの領域を検出して情報の識別を行っている(同図S116〜S134)。そのため、候補領域を抽出することなく二次元コードの領域を検出しようとする場合と比べて、抽出した候補領域という限定的な範囲から二次元コードの領域の検出を行うことができる。これにより、二次元コードの領域から情報の識別を行うまでに要する処理負荷および処理時間を抑えることができる。
【0185】
また、上記実施形態では、複数のエッジ画像それぞれに基づいて検出された各二次元コードの領域について、この二次元コードにてコード化された情報を識別することができる(図3のS134)。
また、上記実施形態においては、特定のエッジ画像から抽出された候補領域と、別のエッジ画像における抽出済み候補領域との重複度合に応じ、その重複度合が一定以上であることをもって、両候補領域が一致すると判定することができる。
【0186】
また、上記実施形態においては、特定のエッジ画像から抽出された候補領域、および、別のエッジ画像における抽出済み候補領域のうち、一方の候補領域が他方の候補領域に包摂されていることをもって、両候補領域が一致すると判定することができる。
また、上記実施形態においては、特定のエッジ画像から抽出された候補領域における1以上の頂点が、抽出済み候補領域におけるいずれかの頂点から一定範囲内に位置していることをもって、両候補領域が一致すると判定することもできる。
【0187】
また、上記実施形態においては、テンプレートで規定される規則に従って候補領域を抽出することができるため、このテンプレートと共に規則を変更することにより、任意の規則に従って形成された二次元コードの領域として検出できるようにすることができる。
また、上記実施形態においては、二次元コードの各セルCに付された色に基づいて、二次元コードで示される情報を識別することができる(図3のS132〜S134)。
【0188】
また、上記実施形態では、画像の生成(具体的には撮影)状態により、二次元コードにおける各セルCのうち、一部のセルCに対応する領域が欠けてしまっていたとしても、そのセルに本来付されるべき色を着色規則に従って推定し(図8のS452)、その色に基づいて情報を識別することができるため、情報の識別そのものができなくなってしまうことを防止することができる。
また、上記実施形態では、二次元コードにおける各セルCに付されている色を、色空間におけるいずれの判定領域に含まれているかにより判定することができる(図8のS410)。
【0189】
また、この構成においては、各ピクセルの色判定を行う際に、二次元コードの領域を、ラスタスキャンによって順番に走査して色判定処理を行い(図8のS410)、各セルCの領域における各行に位置するピクセルについて、一定数以上が判定領域に含まれると判定された場合(図8のS408の「Yes」の分岐)に、該当セルCの領域におけるその行の残りのピクセルに対して色判定処理を省略することができる。
これによって、各セルCの領域における各行のピクセルの全てに対して色判定処理を行う場合と比較して、各ピクセルの色判定処理を高速に行うことができる。
【0190】
また、この構成においては、各セルCの色を判定するに際し、多くのセルCに付された色がいずれの判定領域にも含まれず、情報の識別そのものができなくなるような場合であっても、そのようなことを防止できるように構成されている。
具体的には、複数の色それぞれに対応する判定領域のいずれにも含まれていないと判定したセルが一定数以上存在する場合に(図8のS440「Yes」の分岐)、判定領域を一定領域だけ拡げる、または、変移させたうえで、再度、各セルに付されている色を判定している(同図S444〜S438)。
この構成であれば、画像の生成条件が悪く、適切に色の判定ができない場合であっても、判定領域を拡げることで判定の感度を上げて再度色を判定する、または、判定領域を色の分布に応じた適切な位置まで変移させて再度色を判定することにより、色の判定確率を高めることができる。
【0191】
また、上記実施形態では、物品検出モードが設定されている場合に、各セルCの色の判定結果に基づいて識別された情報に基づき、該情報に対応する物品のなかに、指定物品が存在するか否かを判定することができる(図9のS502)。
さらに、指定物品が存在する場合に、原画像における指定物品に対応する二次元コードの領域が強調表示されるように原画像を加工し(図9のS508)、加工した画像を表示することができる(図9のS516)。
これによって、原画像中の指定物品に対応する二次元コードの領域が強調表示された画像を表示することができるので、ユーザは、表示された画像を見ることで、原画像中における指定物品の位置を簡易かつ瞬時に把握することができる。
【0192】
また、この構成においては、指定物品が複数あるときに、各指定物品の管理開始時期情報に基づき、管理開始時期が古い順に、順番を示す番号の画像を、指定物品に対応する二次元コードの領域上、または、その近傍に表示されるように原画像に追加する加工を行うことができるように構成されている(図9のS512)。
これによって、ユーザは、表示された画像を見ることで、各指定物品の管理開始時期の順番を視覚的に簡易かつ瞬時に把握することができる。例えば、倉庫内における物品を、その管理開始時期の古い順に出荷するなどの作業を容易に行うことができる。
【0193】
また、この構成においては、原画像に対して、強調表示加工に加えて、指定物品に係る表示情報を追加する加工を行うことができるように構成されている(図9のS514)。
これによって、ユーザは、表示された画像を見ることで、品名、品名コード、管理開始期限、出荷期限等の指定物品に係る情報を確認することができる。
また、この構成においては、期限管理モードを設定した場合に、出荷期限、消費期限等の期限が経過した物品、または、期限までの期間が所定期間以下の物品を指定物品とすることができる。そして、各セルCの色の判定結果に基づいて識別された情報に対応する物品のなかから、期限を経過した物品、または、期限までの期間が所定期間以下の物品が存在するか否かを判定することができる(図9のS524)。
【0194】
さらに、指定物品が存在する場合に、原画像における指定物品に対応する二次元コードの領域が強調表示されるように原画像を加工し(図9のS528)、加工した画像を表示することができる(図9のS516)。
これによって、原画像中の指定物品に対応する二次元コードの領域が強調表示された画像を表示することができるので、ユーザは、表示された画像を見ることで、原画像中における指定物品の位置を簡易かつ瞬時に把握することができる。
【0195】
(5)変形例
以上、本発明の実施形態について説明したが、本発明は、上記実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態をとり得ることはいうまでもない。
例えば、上記実施形態においては、二次元コードリーダ1が単体の装置により構成されている場合を例示したが、この二次元コードリーダ1は、複数の装置が協調して動作するシステムとして構成してもよい。
【0196】
また、上記実施形態においては、二次元コードの領域としては、上述したような二次元コードに限らず、特定の画像(例えば、ロゴなど)を示す領域としてもよい。
また、上記実施形態では、着色規則に従って付されるべき色の候補を選出し、その中から最も確からしい単一の色を、着色規則に従って本来付されるべき色と推定しているが、こうして色の候補を選出した段階で、これら候補のいずれかをユーザに選択させることとしてもよい。
【0197】
また、候補として選出した色それぞれについて情報の識別までも行うようにし、そうして識別した情報の中からいずれかをユーザに選択させることとしてもよい。この場合、図8のS452では何らの処理も行わず、S454にて候補の色それぞれを、該当するセルCに付された色と判定する。そして、図3のS134では、セルCに付された色として判定された色が複数存在していれば、各色について、または、各色の組合せに基づいて情報を識別し、そうして識別した情報の中から、いずれかをユーザに選択させる、といった構成を考えることができる。
【0198】
また、上記実施形態においては、物品検出処理において、指定された物品を検索する例と、期限について条件を満たしている物品を検索する例とを説明したが、これらの例に限らず、別の条件を満たす物品を検索できるように構成してもよい。
また、上記実施形態においては、管理開始期限の古い順に番号画像を二次元コードの領域上、または、その近傍に表示する構成としたが、この構成に限らず、消費期限が早い順など、他の条件に基づく順番の番号画像を表示する構成としてもよい。
【0199】
また、上記実施形態において、コード利用物品検出処理を、入力装置74を介したユーザーの操作入力(指示情報)をトリガとして行われる一連の処理として説明したが、この構成に限らない。
例えば、検出対象の物品が設定(検出モードが設定)された状態であれば、トリガがなくてもコード利用物品検出処理を繰り返し実行して、常に、撮影画像に対して検出処理を実行し、検出結果の画像を表示する構成とするなど、他の構成としてもよい。
【0200】
また、上記実施形態において、二次元コードリーダ1は、専用のプログラムをCPU60によって実行することで、コード利用物品検出処理に必要な各機能を実現する構成としたが、この構成に限らない。例えば、処理の一部を半導体集積回路等のハードウェアに置き換えて、ハードウェアとソフトウェアとの双方によって各機能を実現する構成としてもよいし、可能であれば、処理の全てまたは略全てをハードウェアに置き換えて、ハードウェア主体で各機能を実現する構成としてもよい。
【0201】
(6)本発明との対応関係
以上説明した実施形態において、図3のS102が本発明における画像取得部であり、同図S108(図5のS200〜S212)が本発明における成分変換部であり、同図S110が本発明における領域抽出部であり、同図S128が本発明におけるパターン判定部である。
【0202】
また、図3のS130が本発明における領域検出部であり、同図S108〜S144(特にS108,S142,S144)が本発明における繰り返し実施部であり、同図S124が本発明における一致判定部であり、同図S134が本発明における情報識別部である。
また、図8におけるS400が本発明におけるセパレータ領域特定部であり、図8におけるS402が本発明におけるセル領域特定部であり、図8におけるS452が本発明における色推定部であり、同図S410,S438およびS454が本発明における色判定部である。
【0203】
また、図9のS502,S524が本発明における物品有無判定部であり、図9のS508,S512,S514が本発明における画像加工部であり、図9のS506が本発明における画像表示部である。
また、検出モードが本発明における指定情報であり、図13のS600〜S614が本発明における指定情報設定部である。
【符号の説明】
【0204】
1…二次元コードリーダ、60…CPU、62…RAM、64…ROM、66…I/F、68…バス、70…記憶装置、72…表示装置、74…入力装置、76…カメラ、78…NIC、C…セル。

【特許請求の範囲】
【請求項1】
複数のセルが配列され、前記複数のセルに色の異なる複数種類のセルが含まれるように各セルに色を付すことで該色または色の組合せに応じた1以上の情報それぞれをコード化した構成の複数の二次元コードの領域を含む領域が撮影されてなる画像を取得する画像取得部と、
該画像取得部により取得された画像を、該画像に含まれるエッジ成分の分布を示すエッジ画像に変換する成分変換部と、
該成分変換部により変換されたエッジ画像から、あらかじめ定められた規則に従って形成されている領域を前記二次元コードの領域からなる候補領域として抽出する領域抽出部と、
前記画像取得部により取得された画像における、前記領域抽出部により抽出された候補領域に対応する対応領域それぞれについて、該対応領域を形成する要素に、前記二次元コードの領域を規定する特徴的なパターンが含まれているか否かを判定するパターン判定部と、
該パターン判定部により特徴的なパターンが含まれていると判定された対応領域を、前記二次元コードの領域として検出することにより、前記画像に含まれる複数の二次元コードの領域を検出可能な領域検出部と、
前記領域検出部により検出された二次元コードの領域それぞれについて、該二次元コードの領域における各セルの領域に付されている色を判定する色判定部と、
前記二次元コードの領域における各セルの領域に、該セルの領域について前記色判定部が判定した色が付されているものとして、各セルの領域に付された色または色の組合せに基づいて前記コード化された情報を識別する情報識別部と、を備え、
前記色判定部は、前記二次元コードの領域における各セルの領域についてピクセル毎に順次色を判定し、所定数の有効な色の判定結果を得たときに、色の判定処理が未処理の残りのピクセルについて色の判定処理を省略し、前記所定数の有効な色の判定結果に基づき各セルの領域に付された色を判定することを特徴とする二次元コードリーダ。
【請求項2】
前記複数のセルは、あらかじめ定められた色が付されたセパレータによって分けられており、
前記あらかじめ定められた色に基づき前記二次元コードの領域における各ピクセルの色の判定処理を行うことで、前記二次元コードの領域における前記セパレータの領域の位置を特定するセパレータ領域特定部と、
前記セパレータ領域特定部で特定されたセパレータの領域の位置に基づき、前記二次元コードの領域における各セルの領域の位置を特定するセル領域特定部と、を備えることを特徴とする請求項1に記載の二次元コードリーダ。
【請求項3】
前記色判定部は、前記二次元コードの領域において、行または列を形成するピクセル群ごとに各ピクセルの色の判定を順次行い、各行または各列の各セルの領域に対応する部分において所定数の有効な色の判定結果を得たときに、次のセルの領域を示すピクセルの手前のピクセルまで、その行または列における色の判定処理が未処理の残りのピクセルについて色の判定処理を省略し、各セルの領域に対する各行または各列の前記色の判定結果に基づき各セルの領域に付された色を判定することを特徴とする請求項2に記載の二次元コードリーダ。
【請求項4】
前記色判定部は、前記二次元コードの領域における各セルの領域において、行または列を形成するピクセル群ごとに各ピクセルの色の判定を順次行い、各セルの領域に対応する各行または各列において所定数の有効な色の判定結果を得たときに、次のセルの領域を示すピクセルの手前のピクセルまで、その行または列における色の判定処理が未処理の残りのピクセルについて色の判定処理を省略し、各行または各列の前記色の判定結果に基づき各セルの領域に付された色を判定することを特徴とする請求項2に記載の二次元コードリーダ。
【請求項5】
前記成分変換部による画像のエッジ画像への変換を、異なる1種類以上の変換条件のそれぞれについて順に実施させると共に、各変換条件について変換されたエッジ画像それぞれに対し、前記領域抽出部による候補領域の抽出、前記パターン判定部による特徴的なパターンの判定、および、前記領域検出部による二次元コードの領域の検出、を繰り返し実施させる繰り返し実施部と、
特定の前記エッジ画像に対して、前記領域抽出部により抽出された候補領域それぞれが、別のエッジ画像について前記領域抽出部が抽出した候補領域(以降「抽出済み候補領域」という)と一致するか否かを、両方の候補領域に基づいて判定する一致判定部と、を備えており、
前記繰り返し実施部は、前記パターン判定部による特徴的なパターンを有しているか否かの判定、および、前記領域検出部による二次元コードの領域の検出、を、前記領域抽出部により抽出された候補領域のうち、前記一致判定部により前記抽出済み候補領域と一致しないと判定された候補領域についてのみ実施させることを特徴とする請求項1乃至請求項4のいずれか1項に記載の二次元コードリーダ。
【請求項6】
前記二次元コードは、前記複数のセルそれぞれに付される色が、複数種類の色のうち、該セルにてコード化すべき情報、および、該セルと隣接するセルに付された色に応じた着色規則に従って定められており、
さらに、
前記領域検出部により検出された二次元コードの領域それぞれについて、該二次元コードの領域における各セルの領域のうち、該セルの領域に対して前記着色規則に従って付されるべき色、および、前記二次元コードにおいて使用されるべき色、以外の色が付されているセルの領域につき、該セルの領域に本来付されるべき色を前記着色規則に従って推定する色推定部、を備えており、
前記情報識別部は、前記二次元コードの領域における各セルの領域のうち、前記色推定部により色が推定されたセルの領域に該推定された色が付されているものとして、各セルの領域に付された色または色の組合せに基づいて情報を識別することを特徴とする請求項1乃至請求項5のいずれか1項に記載の二次元コードリーダ。
【請求項7】
前記色判定部は、前記二次元コードの領域における各セルの領域に付されている色を、該二次元コードにおいて使用される複数の色それぞれを中心に拡がる色空間上の判定領域のいずれに含まれているかにより判定することを特徴とする請求項1乃至請求項6のいずれか1項に記載の二次元コードリーダ。
【請求項8】
前記色判定部は、複数の色それぞれに対応する前記判定領域のいずれにも含まれていないと判定したセルの領域が一定数以上存在する二次元コードの領域に対し、前記判定領域を一定領域だけ拡げたうえで、再度、各セルの領域に付されている色を判定することを特徴とする請求項7に記載の二次元コードリーダ。
【請求項9】
前記色判定部は、複数の色それぞれに対応する前記判定領域のいずれにも含まれていないと判定したセルの領域が一定数以上存在する二次元コードの領域に対し、該二次元コードの領域における色の分布に応じて前記判定領域を色空間上で変移させたうえで、再度、各セルの領域に付されている色を判定することを特徴とする請求項7に記載の二次元コードリーダ。
【請求項10】
前記一致判定部は、特定の前記エッジ画像に対して、前記領域抽出部により抽出された候補領域それぞれが、別のエッジ画像における前記抽出済み候補領域と一致するか否かを、両方の候補領域における重複度合に応じて判定することを特徴とする請求項5乃至請求項9のいずれか1項に記載の二次元コードリーダ。
【請求項11】
前記一致判定部は、特定の前記エッジ画像に対して、前記領域抽出部により抽出された候補領域それぞれが、別のエッジ画像における前記抽出済み候補領域と一致するか否かを、両方の候補領域のうちの一方の候補領域が他方の候補領域に包摂されているか否かに応じて判定することを特徴とする請求項5乃至請求項10のいずれか1項に記載の二次元コードリーダ。
【請求項12】
前記二次元コードの領域が多角形である場合において、
前記一致判定部は、特定の前記エッジ画像において前記領域抽出部により抽出された候補領域それぞれについて、該候補領域として形成された多角形における1以上の頂点が、前記抽出済み候補領域として形成された多角形におけるいずれかの頂点から一定範囲内に位置しているか否かに応じて、前記領域抽出部により抽出された候補領域それぞれが、別のエッジ画像における前記抽出済み候補領域と一致するか否かを判定することを特徴とする請求項5乃至請求項11のいずれか1項に記載の二次元コードリーダ。
【請求項13】
前記領域抽出部は、前記二次元コードの領域の形成に係る規則を規定するテンプレートに基づいて、前記成分変換部により変換されたエッジ画像から、そのテンプレートにて定められた規則に従って形成されている領域の位置情報を候補領域の位置情報として抽出することを特徴とする請求項1乃至請求項12のいずれか1項に記載の二次元コードリーダ。
【請求項14】
請求項1乃至請求項13のいずれか1項に記載の全ての構成部として機能させるための各種処理手順をコンピュータシステムに実行させるためのプログラム。

【図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


【公開番号】特開2012−33034(P2012−33034A)
【公開日】平成24年2月16日(2012.2.16)
【国際特許分類】
【出願番号】特願2010−172619(P2010−172619)
【出願日】平成22年7月30日(2010.7.30)
【特許番号】特許第4724801号(P4724801)
【特許公報発行日】平成23年7月13日(2011.7.13)
【出願人】(306040388)株式会社シフト (8)
【Fターム(参考)】