(54)【発明の名称】2次元アレイ状に配置された情報を含む複数のコードを撮像した画像から認識されないコードが存在すると推測される推測領域を決定する方法、装置及びプログラム
(58)【調査した分野】(Int.Cl.,DB名)
前記画像は、2次元アレイ状に配置された複数の前記コードを含むコード群の輪郭を規定する2本の交差する直線を、前記画像のx軸及びy軸の方向と一致させるように撮像されており、
複数の前記集合体は、前記画像のx軸が複数に分割された領域と対応するように形成された複数の集合体Xと、前記画像のy軸が複数に分割された領域と対応するように形成された複数の集合体Yとを有し、
前記演算部は、
前記コードの位置を示す代表位置のx座標が所定の範囲内にある前記コードが同じ前記集合体Xに含まれるように、各前記コードを複数の前記集合体Xに分類し、
前記コードの位置を示す代表位置のy座標が所定の範囲内にある前記コードが同じ前記集合体Yに含まれるように、各前記コードを複数の前記集合体Yに分類する請求項1に記載の方法。
【発明を実施するための形態】
【0022】
以下、本明細書で開示する解析装置の好ましい第1実施形態を、図を参照して説明する。但し、本発明の技術範囲はそれらの実施形態に限定されず、特許請求の範囲に記載された発明とその均等物に及ぶものである。
【0023】
図3は、本明細書に開示する解析装置の第1実施形態を示す図である。
図4は、コード群を説明する図である。
図5は、解析装置により撮像されたコード群の画像を示す図である。
図6は、コードを説明する図である。
【0024】
本実施形態の解析装置10は、2次元アレイ状に配置された情報を含む複数のコードを有するコード群を撮像した画像から、各コードを認識して解析し、解析した結果を出力する。
【0025】
また、解析装置10は、認識されないコードが存在すると推測される場合には、認識されないコードが存在すると推測される推測領域を決定し、画像内の推測領域を再走査して認識されたコードを解析する。
【0026】
図4に示すように、撮像される複数のコード20は、2次元アレイ状に配置されたコードの群を形成する。このようなコード群として、例えば、
図1に示すようなコード群が挙げられる。
図4に示す例では、縦方向にm個のコード20が並べられており、横方向にn個のコード20が並べられている。コード群の輪郭は長方形を形成する。
【0027】
本実施形態の解析装置10は、2次元アレイ状に配置されたコードの群の縦方向のコード数及び横方向のコード数が未知であっても動作可能である。
【0028】
図5に示すように、解析装置10により撮像された画像には、コード群が含まれている。コード群の画像30は、2次元アレイ状に配置されたコードの画像31を含む。コード群の画像30は、2次元アレイ状に配置された複数のコードを含むコード群の輪郭を規定する2本の交差する直線L1、L2を、画像30のx軸及びy軸の方向と一致させるように撮像されている。
【0029】
図5には、コード群の画像30の座標系の原点Oと共にx軸及びy軸を示す。
【0030】
画像のy軸方向には、m個のコードの画像31が並んでおり、画像のx軸方向には、n個のコードの画像31が並んでいる。
【0031】
ここで、コード群の画像30の中央付近には、解析装置10の認識が困難なように撮像されたコードの画像31aが存在する。
【0032】
コードの画像31は、コード20が撮像されたものであり、コード20と同じ情報を有している。以下、本明細書では、コードの画像を単にコードともいうことにする。
【0033】
図6に示すように、本実施形態で撮像されたコード(コードの画像)31は、二次元コードである。コード31は、二進コードで表されるデータをセル化して、二次元のマトリックス状にパターンとして配置しており、コードの位置を検出するための4つの異なる位置検出パターンX0〜X3と、4つの位置検出パターンX0〜X3に囲まれたデータ部を有する。データ部は、更に、フォーマット情報、及び誤り訂正符号等と、セグメントを含む実データ部等を有する。位置検出パターンX0〜X3は、コード中には位置検出パターンと同形状のパターンが出現しないように設計してあるため、コードの画像31から個々にそれぞれ認識可能になされている。
【0034】
本実施形態で撮像されるコードは、カラーコード又は絵柄が配置された二次元コード等の他の形式を有する二次元コードであってもよい。また、本実施形態で撮像されるコードは、バーコード等の一次元コードであってもよい。
【0035】
次に、解析装置10について、以下に詳細に説明する。
【0036】
解析装置10は、演算部11と、記憶部12と、操作部13と、表示部14と、通信部15と、撮像部16を有する。
【0037】
演算部11は、記憶部12に予め記憶されている所定のプログラムに従い、解析装置10の各要素の制御及び各種処理を行い、処理中に生じるデータを一時的に保存するために記憶部12を利用する。
【0038】
記憶部12は、1次記憶装置及び2次記憶装置を有していても良い。また、記憶部12は、所定のプログラムを記憶する記憶媒体12aを読み出し可能なドライブを有していても良い。
【0039】
操作部13は、解析装置10の操作者等によって操作されて、各種の情報を入力する。操作部13としては、例えば、タッチパネルを用いることができる。演算部11は、操作部13から入力された各種の情報を用いて、各種処理を行う。
【0040】
表示部14は、演算部11の動作によって、各種の情報を表示する。表示部14としては、例えば、液晶パネルを用いることができる。
【0041】
通信部15は、撮像部16からの画像データを入力する。また、通信部15は、外部のネットワークを介して、他の装置との間でコードを解析した情報等のデータの送受信を行うことができる。
【0042】
撮像部16は、通信部15を介して、演算部11により制御されて、コード群を撮像する。撮像部16としては、例えば、CCD、又はCMOS画像化素子等を用いることができる。
【0043】
解析装置10としては、例えば、多機能型携帯電話機、タブレット端末、ノート型パーソナルコンピュータ等を用いることができる。
【0044】
次に、解析装置10の動作を
図7及び
図8に示すフローチャートを参照しながら、以下に説明する。
【0045】
まず、ステップS10において、解析装置10は、情報を含むコードが2次元アレイ状に配置されたコード群を撮像する。撮像された画像は、記憶部12に記憶される。
【0046】
次に、ステップS12において、解析装置10は、コード群の画像を走査してコードを認識し、認識されたコードを解析する。また、解析装置10は、認識されたコードの数を求める。
【0047】
次に、ステップS14において、解析装置10は、2つ以上のコードを認識したか否かを判断する。2つ以上のコードが認識されている場合には、ステップS16へ進む。一方、2つ以上のコードが認識されていない場合には、ステップS32へ進む。
【0048】
ステップS32へ進んだ場合には、解析装置10は、コードを解析した解析結果を表示部14に出力する。
【0049】
ステップS16へ進んだ場合には、解析装置10は、認識したコードの位置検出パターンの座標を抽出する。
図6を参照して、解析装置10の処理を以下に説明する。
【0050】
解析装置10は、認識したコードが有する4つの位置検出パターンの隅部P0〜P3の位置を求める。この処理により、位置検出パターンX0の隅部P0の座標(px0,py0)、位置検出パターンX1の隅部P1の座標(px1,py1)、位置検出パターンX2の隅部P2の座標(px2,py2)、位置検出パターンX3の隅部P3の座標(px3,py3)が得られる。
【0051】
次に、ステップS18において、解析装置10は、認識された各コードの位置を代表する代表位置として中心Cの座標(cx、cy)を求める。解析装置10は、ステップS16で求めた4つの位置検出パターンの隅部P0〜P3の座標を用いて、コードの中心Cの座標を求めることができる。
【0052】
具体的には、コードの中心Cのx座標は、(px0+px1+px2+px3)/4となり、y座標は、(py0+py1+py2+py3)/4となる。
【0053】
また、解析装置10は、コードの対角線上に位置する2つの位置検出パターンの隅部の座標を用いて、コードの中心Cの座標を求めてもよい。
【0054】
具体的には、2つの位置検出パターンX0、X2を用いる場合には、コードの中心Cのx座標は、(px0+px2)/2となり、y座標は、(py0+py2)/2となる。また、2つの位置検出パターンX1、X3を用いる場合には、コードの中心Cのx座標は、(px1+px3)/2となり、y座標は、(py1+py3)/2となる。
【0055】
なお、コードの位置を代表する代表位置は、コードの中心でなくてもよい。また、コードの中心の位置を求める方法としては、上述した方法以外の他の方法を用いてもよい。
【0056】
次に、ステップS20において、解析装置10は、認識された各コードの中心の座標と、位置検出パターンの座標とを関連づけて、記憶部12に記憶する。
【0057】
次に、ステップS22において、解析装置10は、所定の位置関係にあるコードが同じ集合体に含まれるように、各コードの位置に基づいて、各コードを複数の集合体に分類する。各コードの位置は、コードの位置を代表する代表位置として、コードの中心の座標を用いる。
【0058】
ステップS22の処理を、
図9〜
図13を参照して、以下に説明する。
【0059】
図9は、解析装置の処理を説明するフローチャートである。
図10は、集合体Xを説明する図である。
図11は、集合体Yを説明する図である。
【0060】
図10及び
図11に示すように、複数の集合体は、画像のx軸が複数に分割された領域と対応するように形成された複数の集合体Xと、画像のy軸が複数に分割された領域と対応するように形成された複数の集合体Yとを有する。
【0061】
複数の集合体Xは、画像のx軸がコードのx軸方向の寸法と対応するように複数に分割された領域と対応するように形成される。また、複数の集合体Yは、画像のy軸がコードのy軸方向の寸法と対応するように複数に分割された領域と対応するように形成される。
【0062】
このようにして、コード群のy軸方向に列をなすように並んだコードは、同じ集合体Xに分類され、コード群のx軸方向に行をなすように並んだコードは、同じ集合体Yに分類される。
【0063】
次に、認識した各コードを、複数の集合体Yに分類する処理を、以下に説明する。認識した各コードを、複数の集合体Xに分類する処理も同様に行われる。
【0064】
まず、
図9のステップS40において、解析装置10は、認識した各コードを、コードの代表位置である中心のy座標の順番にソートする。画像から認識されたコードの数をNとすると、ソートされたコードは、コード1、コード2・・・コードNというように、1番目からN番目までの順番にソートされる。
【0065】
次に、ステップS42において、解析装置10は、ソートされたコードの順番を示す変数iに2を設定し、集合体Yの順番を示す変数jに1を設定する。また、解析装置10は、集合体Yjに含まれるコードのy座標の最大値を示す変数Yj
_ymaxに対して、ソートされた1番目のコード1の最大のy座標を有する位置検出パターンの中心のy座標の値を設定する。
【0066】
次に、ソートされたコード2からコードNまでの各コードに対して、ステップS44からステップS62の間の処理が繰り返される。
【0067】
まず、ステップS46において、解析装置10は、コードiの中心のy座標が、Yj
_ymaxよりも大きいか否かを判断する。コードiの中心のy座標が、Yj
_ymax以下の場合には、ステップS48へ進む。一方、コードiの中心のy座標が、Yj
_ymaxよりも大きい場合には、ステップS54へ進む。
【0068】
ステップS48へ進んだ場合には、解析装置10は、コードiを集合体Yjに分類する。
【0069】
図12に示す例では、集合体Y1には、コード1及びコード2がすでに分類されている。次に、コード3のコード3の中心のy座標は、Y1
_ymax以下なので、コード3も集合体Y1に分類される。
【0070】
次に、ステップS50において、解析装置10は、コードiが有する位置検出パターンの内で、最大のy座標を持つ位置検出パターンの中心のy座標yi
_fmaxが、Yj
_ymaxよりも大きいか否かを判断する。yi
_fmaxが、Yj
_ymaxよりも大きい場合には、ステップS52へ進む。一方、yi
_fmaxが、Yj
_ymaxよりも大きくない場合には、ステップS62へ進む。
【0071】
ステップS52へ進んだ場合には、解析装置10は、yi
_fmaxを、Yj
_ymaxに代入する。一方、yi
_fmaxが、Yj
_ymaxよりも大きくない場合には、Yj
_ymax値の変更はされない。このように、集合体Yjに新しいコードが分類される度に、Yj
_ymaxの更新処理が行われる。
【0072】
図13に示す例では、集合体Yjに新しいコードiが分類される。このコードiのyi
_fmaxは、Yj
_ymaxよりも大きい。そこで、Yj
_ymaxの更新処理が行われて、コードiのyi
_fmaxがYj
_ymaxに代入される。
【0073】
一方、ステップ46において、ステップS54へ進んだ場合には、解析装置10は、集合体Yj+1を生成して、コードiを集合体Yj+1に分類する。
【0074】
図12に示す例では、コード4の中心のy座標が、Y1
_ymaxよりも大きいので、コード4は、新たに生成された集合体Y2に分類される。
【0075】
次に、ステップS56において、解析装置10は、コードiが有する位置検出パターンの内で、その中心の位置が最大のy座標を持つ位置検出パターンのy座標yi
_fmaxを求める。
【0076】
次に、ステップS58において、解析装置10は、yi
_fmaxを、Yj+1
_ymaxに代入する。このように、新しい集合体Yj+1が生成される度に、Yj
_ymaxの更新処理が行われる。
【0077】
次に、ステップS60において、解析装置10は、集合体Yの順番を示す変数jに1を加えた値を、新たな変数jとして設定する。
【0078】
上述したステップS46からステップS62の間の処理を行うことにより、
図11に示すように、認識した各コードは、コードの中心の位置を示すy座標が所定の範囲内にあるコードが同じ集合体Yに含まれるように、複数の集合体Yに分類される。
図11に示す例では、認識した各コードは、複数の集合体Y1〜集合体Ymに分類される。
【0079】
また、認識した各コードの中心のx座標を用いて、上述したのと同様の処理を行うことにより、
図10に示すように、認識した各コードは、コードの中心の位置を示すx座標が所定の範囲内にあるコードが同じ集合体Xに含まれるように、複数の集合体Xに分類される。そして、ステップS24に進む。
図10に示す例では、認識した各コードは、複数の集合体X1〜集合体Xnに分類される。
【0080】
そして、
図7のステップS24へ進む。
【0081】
次に、ステップS24において、解析装置10は、複数の集合体に基づいて、コード群の画像内に認識されないコードが存在するか否かを判断する。コード群の画像内に認識されないコードが存在する場合には、ステップS26へ進む。一方、コード群の画像内に認識されないコードが存在しない場合には、ステップS32へ進む。ステップS32へ進んだ場合には、解析装置10は、認識したコードを解析した結果を表示部14に出力する。
【0082】
ステップS26へ進んだ場合には、解析装置10は、認識されないコードが存在すると推測される推測領域の中心の座標を求める。
【0083】
次に、ステップS28において、解析装置10は、認識されないコードが存在すると推測される推測領域を決定する。
【0084】
上述したステップS24からステップS28の詳細な処理を、
図14〜
図16を参照しながら、以下に説明する。
【0085】
まず、ステップS70において、解析装置10は、各集合体Xに含まれるコードの数を比較して、他の集合体Xよりもコードの数が少ない集合体が存在するか否かを判断する。他の集合体Xよりもコードの数が少ない集合体が存在する場合には、ステップS72へ進む。一方、他の集合体Xよりもコードの数が少ない集合体が存在しない場合には、ステップ32へ進む。ステップS32へ進んだ場合には、解析装置10は、認識したコードを解析した結果を表示部14に出力する。
【0086】
解析装置10は、複数の集合体Xの内で、最も多いコードの数を有する集合体のコード数をX
maxとして、コード数がX
maxよりも少ない集合体を、他の集合体Xよりもコードの数が少ない集合体として判断することができる。
【0087】
コード群のx軸方向に並ぶコードの数がnであることが既知である場合には、コード数がnよりも少ない集合体を、他の集合体Xよりもコードの数が少ない集合体として判断してもよい。例えば、コード群がm×n個のコードにより形成されており、このコード群が2つ並んでいる場合がある。この場合、画像には、m×2n個又は2m×n個のコードが含まれることになる。ここで、コード群がm×n個のコードにより形成されていることが既知であれば、コード数がnよりも少ない集合体を、他の集合体Xよりもコードの数が少ない集合体として判断して、処理を行える。この説明は、集合体Yの処理に対しても適用される。
【0088】
ステップ72へ進んだ場合には、解析装置10は、他の集合体Xよりもコードの数が少ない集合体Xである集合体Xaを選択する。
【0089】
図10に示す例では、複数の集合体Xの内で、最も多いコードの数を有する集合体のコード数X
maxはmである。
図10に示す例では、コード群の中で認識されないコードの数が一つなので、他の集合体Xよりもコードの数が少ない集合体Xaの数は一つであり、集合体Xaが有するコードの数はm−1である。なお、認識されないコードの数は、2つ以上の場合もある。
【0090】
次に、ステップS74において、解析装置10は、各集合体Yに含まれるコードの数を比較して、他の集合体Yよりもコードの数が少ない集合体が存在するか否かを判断する。他の集合体Yよりもコードの数が少ない集合体が存在する場合には、ステップS76へ進む。一方、他の集合体Yよりもコードの数が少ない集合体が存在しない場合には、ステップ32へ進む。ステップS32へ進んだ場合には、解析装置10は、認識したコードを解析した結果を表示部14に出力する。
【0091】
解析装置10は、複数の集合体Yの内で、最も多いコードの数を有する集合体のコード数をY
maxとして、コード数がY
maxよりも少ない集合体を、他の集合体Yよりもコードの数が少ない集合体として判断することができる。
【0092】
コード群のy軸方向に並ぶコードの数がmであることが既知である場合には、コード数がmよりも少ない集合体を、他の集合体Yよりもコードの数が少ない集合体として判断してもよい。
【0093】
ステップ76へ進んだ場合には、解析装置10は、他の集合体Yよりもコードの数が少ない集合体Yである集合体Ybを選択する。
【0094】
図11に示す例では、複数の集合体Yの内で、最も多いコードの数を有する集合体のコード数Y
maxはnである。
図11に示す例では、コード群の中で認識されないコードの数が一つなので、他の集合体Yよりもコードの数が少ない集合体Ybの数は一つであり、集合体Ybが有するコードの数はn−1である。なお、認識されないコードの数は、2つ以上の場合もある。
【0095】
次に、ステップS78において、解析装置10は、集合体Xaに含まれるコードの中心のx座標の平均値であるx座標x
aveと、集合体Ybに含まれるコードの中心のy座標の平均値であるy座標y
aveを求める。
【0096】
図10に示す例では、集合体Xaに含まれるコードの中心のx座標を、(x
a1,y
a1),(x
a2,y
a2),・・・,(x
a(m−1),y
a(m−1))とすると、集合体Xaが含むコードの中心のx座標の平均値x
aveは、
x
ave=(x
a1+x
a2+・・・x
a(m−1))/(m−1)
となる。
【0097】
また、
図11に示す例では、集合体Ybに含まれるコードの中心のy座標を、(x
b1,y
b1),(x
b2,y
b2),・・・,(x
b(n−1),
yb(n−1))とすると、集合体Ybが含むコードの中心のy座標の平均値y
aveは、
y
ave=(y
b1+y
b2+・・・y
b(n−1))/(n−1)
となる。
【0098】
次に、ステップS80において、解析装置10は、推測領域の中心の位置として、x座標をx
aveとし、y座標をy
aveとして、中心の座標(x
ave、y
ave)を決定する。
【0099】
図16の例に示すように、集合体Xaと集合体Ybとが重複する領域に、推測領域の中心の座標(x
ave、y
ave)が含まれる。
【0100】
次に、全ての推測領域の中心に対して、ステップS82からステップS89の間の処理が繰り返される。なお、本実施形態では、推測領域の中心は一つなので、ステップS82からステップS89の間の処理は一回だけ行われる。
【0101】
まず、ステップS84において、解析装置10は、集合体Xaに含まれるコードの内で、yaveより小さい中心のy座標を有するコードの中で最大のy座標を有するコードAを選択する。また、解析装置10は、集合体Ybに含まれるコードの内で、xaveより小さいx座標を有するコードの中で最大のx座標を有するコードBを選択する。
【0102】
図16に示す例では、コードAが、その中心の座標(x
as、y
as)が、集合体Xaに含まれるコードの内で、yaveより小さい中心のy座標を有するコードの中で最大のy座標を有するコードとして選択される。また、コードBが、その中心の座標(x
bt、y
bt)が、xaveより小さいx座標を有するコードの中で最大のx座標を有するコードとして選択される。
【0103】
次に、ステップS86において、解析装置10は、コードAに対して、中心の座標と関連づけられて記憶されている位置検出パターンの座標に基づいて、最大のy座標を有する位置検出パターンの中心のy座標y
fを求める。また、解析装置10は、コードBに対して、中心の座標と関連づけられて記憶されている位置検出パターンの座標に基づいて、最大のx座標を有する位置検出パターンの中心のx座標x
fを求める。
【0104】
次に、ステップS88において、解析装置10は、推測領域32を決定する。推測領域32の境界は、例えば、以下のように決定され得る。
【0105】
まず、推測領域32の一の境界を示す推測領域開始点の座標(x
start,y
start)を、
図16に示すように、コードAの最大のy座標を有する位置検出パターンの中心のy座標y
fと、コードBの最大のx座標を有する位置検出パターンの中心のx座標x
fとを用いて、座標(x
f、y
f)とすることができる。
【0106】
また、推測領域32の他の境界を示す推測領域終了点の座標(x
end,y
end)を、
x
end=(x
ave-x
f)×2+x
f=2x
ave−x
f
y
end=(y
ave-y
f)×2+y
f=2y
ave−y
f
とすることができる。
【0107】
図16に示すように、推測領域32は、推測領域開始点と推測領域終了点により規定される領域として決定され得る。そして、ステップS30へ進む。
【0108】
次に、
図8ステップS30において、解析装置10は、コード群の画像内の推測領域32を再走査して、認識されたコードを解析する。
【0109】
図17に示すように、解析装置10は、記憶部12に記憶された画像内の推測領域32を再走査する。再走査では、走査する範囲が、画像内の推測領域32の部分だけなので、走査の分解能を最初の走査よりも高めて行うことが好ましい。また、再走査では、複数の解析条件(二値化閾値等)を用いて、解析を行ってもよい。再走査では、走査の分解能を高めるか、又は複数の解析条件を用いて、解析を行うことが認識されにくいコードを認識する上で好ましい。推測領域32に対して、このような再走査及び解析処理を行っても、画像全体を再走査又は解析する処理よりも処理時間を短縮することができる。
【0110】
次に、ステップS32において、解析装置10は、最初の走査で認識されたコードの解析結果と共に、推測領域を再走査して認識されたコードに対する解析結果を表示部14に出力する。
【0111】
次に、ステップS34において、解析装置10は、解析を終了するか否かを判断する。例えば、ユーザの指示により、更に認識されないコードを解析する必要がある場合には、解析を終了せずに、ステップS10へ戻る。
【0112】
上述した本実施形態の解析装置10によれば、2次元アレイ状に配置された情報を含む複数のコードを撮像した画像から認識されないコードが存在すると推測される推測領域を決定できる。そして、推測領域について認識されなかったコードを再走査して解析できるので、処理速度を向上することが可能である。
【0113】
なお、コード群を形成するコードの数が既知である場合、例えば、コード群がm×n個のコードにより形成されることが既知である場合には、上述したステップS14において、認識されたコードの数が、m×n個である場合には、ステップS32へ進んで、ステップS16以降の処理を行わなくてもよい。
【0114】
また、上述したように、複数の集合体Xは、画像のx軸がコードのx軸方向の寸法と対応するように複数に分割された領域と対応するように形成されていればよく、また、複数の集合体Yは、画像のy軸がコードのy軸方向の寸法と対応するように複数に分割された領域と対応するように形成されていればよい。以下、分割された領域の他の例として、変形例1及び変形例2を説明する。
【0115】
図18に示す変形例1では、コードが一の集合体Yに追加される度に、Yj
_ymaxが更新される。
図18に示す例では、集合体Yjには、5つのコードが分類されており、Yj
_ymaxは、5つのコードそれぞれが有する位置検出パターンの内で、最大のy座標を持つ位置検出パターンのy座標の値の平均値として更新される。次のコードの中心の座標は、更新されたYj
_ymaxと比較される。集合体Xについても、各コードを集合体Xに分類することも、同様に行うことができる。
【0116】
図19に示す変形例2では、一の集合体Yが有するコードの中から基準となる基準コードを選択し、基準コードが有する位置検出パターンの内で、最大のy座標を持つ位置検出パターンのy座標を、Yj
_ymaxとする。このYj
_ymaxは、集合体Yに分類されるコードのy座標の上限値である。同様に、基準コードが有する位置検出パターンの内で、最小のy座標を持つ位置検出パターンのy座標を、集合体Yに分類されるコードのy座標の下限値を示す変数Yj
_yminとしてもよい。この場合、各コードの分類は、Yj
_ymax及びYj
_yminを用いて行われる。基準コードとしては、各集合体Yに最初に分類されるコードを選択することができる。各コードを集合体Xに分類することも、同様に行うことができる。
【0117】
次に、上述した解析装置の第2実施形態を、
図20〜
図28を参照しながら以下に説明する。他の実施形態について特に説明しない点については、上述の第1実施形態に関して詳述した説明が適宜適用される。また、同一の構成要素には同一の符号を付してある。
【0118】
上述した実施形態では、コード群は、コード群の輪郭を規定する2本の交差する直線L1、L2を、画像30のx軸及びy軸の方向と一致させるように撮像されていた。
【0119】
しかし、コード群の輪郭が、画像のx軸及びy軸の方向と一致するように撮像されるとは限らない。
【0120】
本実施形態の解析装置は、コード群の輪郭が、画像のx軸及びy軸の方向と一致するように撮像されていなくとも、各コード群を複数の集合体に分類して、推測領域を決定するものである。
【0121】
ただし、本実施形態では、2次元アレイ状に配置された複数のコードを含むコード群の輪郭が3角形又は4角形の形状を有しており、コード群の縦方向に並ぶコードの数がm個であること及び横方向に並ぶコードの数がn(m≦n)個であることは既知であるとする。また、2次元アレイ状に配置された複数のコードを含むコード群の輪郭を規定する2本の直線L1,L2が交差してなす交差角度も既知であるとする。
【0122】
本実施形態の解析装置10の構成は、
図3に示す上述した第1実施形態と同様である。
【0123】
図20は、本明細書に開示する解析装置の第2実施形態が解析する画像を説明する図である。コード群の輪郭は、長方形であり、2本の直線L1,L2がなす交差角度は、90度である。
【0124】
図20に示すように、コード群の輪郭は、画像のx軸及びy軸の方向と一致するようには撮像されていない。
【0125】
次に、解析装置10の動作を
図21〜
図24に示すフローチャートを参照しながら、以下に説明する。
【0126】
まず、ステップS90において、解析装置10は、情報を含むコードが2次元アレイ状に配置されたコード群を撮像する。撮像された画像は、記憶部12に記憶される。
【0127】
次に、ステップS92において、解析装置10は、コード群の画像を走査して、コードを認識し、認識されたコードを解析する。また、解析装置10は、認識されたコードの数を求める。
【0128】
次に、ステップS94において、解析装置10は、2つ以上のコードを認識したか否かを判断する。2つ以上のコードが認識されている場合には、ステップS96へ進む。一方、2つ以上のコードが認識されていない場合には、ステップS140へ進む。
【0129】
ステップS140へ進んだ場合には、解析装置10は、コードを解析した解析結果を表示部14に出力する。
【0130】
次に、ステップS96において、解析装置10は、コード群の輪郭の隅を形成する4つの隅コード1〜隅コード4の位置を求める。解析装置10は、隅コードの位置として、コードの位置を代表する代表位置として中心の座標を求める。
【0131】
解析装置10は、認識した各コードの中心の座標を比較して、最大のx座標x
max、最大のy座標y
max、最小のx座標x
min、最小のy座標y
minを有する4つのコードを隅コードとして選択する。
【0132】
図20に示す例では、隅コード1は、最大のy座標y
maxを有する。隅コード2は、最小のx座標x
minを有する。隅コード3は、最小のy座標y
minを有する。隅コード4は、最大のx座標x
maxを有する。
【0133】
次に、ステップS98において、解析装置10は、隅コードの番号を示す変数iに1を設定する。
【0134】
次に、ステップS100において、解析装置10は、i≦4であるか否かを判断する。i≦4である場合には、ステップS102へ進む。一方、i≦4でない場合には、ステップS107へ進む。S107へ進んだ場合には、4つの隅コードを用いても、各コードを複数の集合体に分類できなかったので、解析装置10は、解析不可能であると判断して、処理を終了する。
【0135】
次に、ステップS102において、解析装置10は、ステップS108からステップS116の間の処理を行う回数を示す変数rに1を設定する。
【0136】
次に、ステップS104において、解析装置10は、r<mであるか否かを判断する。r<mである場合には、ステップS108へ進む。一方、r<mでない場合には、ステップS106へ進む。ステップS106へ進んだ場合には、変数iに1を加えた値を新たな変数iとして、ステップS100へ戻り、次の隅コードに対して、同じ処理を繰り返す。
【0137】
ステップS108へ進んだ場合には、解析装置10は、隅コードiの周りに位置する他のコードを選択する。
図25に示す例では、解析装置10は、隅コード1の周りに最近接で位置し且つ以前には選択されていないコードを選択する。r=1では、解析装置10は、コードC1〜コードC3の3つのコードを選択する。また、r=pでは、解析装置10は、コードC1〜Cqのq=2p+1個のコードを選択する。なお、隅コード1の周りに最近接で位置するとは、
図25に示すように、四角形の形状を有するコードの一辺の長さと対角線の長さ程度の距離の差は、同じ最近接の距離に含まれることを意味する。
【0138】
次に、ステップS110において、解析装置10は、コード群の輪郭の一の隅部を形成する隅コードiと、ステップS108で選択された他のコードを通る直線を作成する。
【0139】
図26に示す例では、隅コード1と、選択されたq=2p+1個のコードC1〜Cqを通る直線が形成される。具体的には、解析装置10は、コード群の輪郭の一の隅部を形成する隅コード1の中心と、隅コード1の周りに位置する選択された一のコードC1の中心を通り傾きa
1を有する第1直線から、隅コード1の中心と隅コード1の周りに位置する選択された他のコードCqの中心を通り傾きa
qを有する第q直線までのq=2p+1本の直線を作成する。
【0140】
次に、ステップS112において、解析装置10は、ステップS110で作成された複数の直線の内の2つの直線が隅コードiで交差する角度を求め、求めた角度が、交差角度90度と所定の範囲内で一致する角度で交差する2つの直線を選択し、選択された2つの直線の傾きa
i、a
jを求める。所定の範囲としては、例えば、10度以内、好ましくは5度以内とすることができる。
【0141】
図26に示す例では、隅コード1とコードC1を通る直線と、隅コード1とコードCqを通る直線が選択される。この2つの直線は、コード群の輪郭を規定する交差する直線に対応する。ここで、コードCqを通る直線の傾きa
qを傾きa
iとし、コードC1を通る直線の傾きa
1をa
jとする。
【0142】
次に、ステップS114において、
図27に示すように、解析装置10は、求めた2本の直線の傾きの内の一の傾きa
iを用いて、隅コード1の中心を通る直線を作成する。なお、他の傾きa
jを用いて、隅コード1の中心を通る直線を作成してもよい。
【0143】
次に、ステップS116において、解析装置10は、傾きaiの直線上にm個のコードが重なるか否かを判断する。傾きaiの直線上にm個のコードが重なる場合には、ステップS118へ進む。一方、傾きaiの直線上にm個のコードが重ならない場合には、ステップS120へ進む。なお、傾きa
jを用いた場合には、傾きajの直線上にn個のコードが重なるか否かを判断する。
【0144】
ここで、傾きaiを有し、隅コード1の中心を通る直線(y=ai・x+bi)が、隅コード1以外の認識されている一のコードと重なっているか否かは、次のように判断される。
【0145】
まず、認識されている一のコードの4つの隅の点の座標(又は位置検出パターンの中心)の内で、最大のx座標を持つ点の座標を(x
max,y
1)とし、最小のx座標を持つ点の座標を(x
min,y
2)とし、最大のy座標を持つ点の座標を(x
1,y
max)とし、最小のx座標を持つ点の座標を(x
2,y
min)とする。
【0146】
下記の2つの関係の内の何れか一方が満足されていれば、傾きaiを有し、隅コード1の中心を通る直線が、一のコードと重なっていると判断される。
【0147】
関係(1){y
2≦a
i・x
min+bi}∧{y
1≧a
i・x
max+bi} 又は
{y
1≦a
i・x
max+bi}∧{y
2 ≧ a
i・x
min+bi}
関係(2){y
max≦a
i・x
1+bi}∧{y
min≧a
i・x
2+bi} 又は
{y
max≦a
i・x
1+bi}∧{y
min≧a
i・x
1+bi}
【0148】
ステップS118へ進んだ場合には、解析装置10は、ステップS114で作成した直線が通るコードを同じ集合体M1に分類する。
【0149】
図27に示すように、傾きaiを有し、隅コード1の中心を通る直線(y=ai・x+b
i)は、コード群の一の輪郭を規定するコードの列と重なっているので、隅コード1を含むm個のコードが、集合体M1に分類される。
【0150】
一方、ステップS116において、ステップS120へ進んだ場合には、解析装置10は、変数rに1を加えた値を新たな変数rとして、ステップS104へ戻り、ステップS108以降のステップを繰り返す。
【0151】
次に、ステップS122において、解析装置10は、集合体Mの数を示す変数eに2を設定する。
【0152】
次に、ステップS124において、解析装置10は、認識したコードの内で、集合体Mに分類されていないコードCを選択する。
【0153】
図28に示す例では、解析装置10は、中心の座標(x
c、y
c)を有するコードCを選択する。コードCは、集合体M1には含まれない。
【0154】
次に、ステップS126において、
図28に示すように、解析装置10は、コードCの中心を通り、傾きa
iを有する直線(y=a
i・x+(y
c−a
i・x
c))を作成する。なお、ステップS114において、傾きa
jを用いた場合には、このステップにおいても同じ傾きを用いる。
【0155】
次に、ステップS128において、解析装置10は、ステップS126で作成した直線と重なるコードを集合体Meに分類する。
【0156】
図28に示すように、傾きaiを有し、コードCの中心を通る直線(y=a
i・x+(y
c−a
i・x
c))と重なるm個のコードが、集合体Meに分類される。
【0157】
次に、ステップS130において、解析装置10は、e>nであるか否かを判断する。e>nである場合には、ステップS134へ進む。一方、e>nでない場合には、ステップS132へ進む。
【0158】
ステップS132へ進んだ場合には、解析装置10は、変数eに1を加えた値を新たな変数eとして、ステップS124へ戻り、ステップS124〜ステップS128の処理を繰り返す。
【0159】
一方、ステップS134へ進んだ場合には、解析装置10は、各集合体Mに含まれるコードの数を比較して、他の集合体Mよりもコードの数が少ない集合体Msを選択する。他の集合体Mよりもコードの数が少ない集合体Msを選択する方法としては、例えば、上述した第1実施形態と同様の方法を用いることができる。
【0160】
次に、ステップS136において、解析装置10は、集合体Msが含むコードを、コードの位置に基づいて傾きa
iの方向に並べ、隣接するコード同士の間の距離を求めて、最大の距離を示した隣接するコードの間の領域を含むように推測領域を決定する。
【0161】
推測領域は、例えば、以下のように決定できる。
【0162】
最大の距離を示した隣接する2つのコードそれぞれは、他方のコードと対向する側に2つの隅に位置する点を有するので、推測領域を規定する4つの隅の位置が得られる。
【0163】
ここで、4つの隅の位置の座標に基づいて、最大のx座標を示すxs
_max、最大のy座標を示すys
_max、最小のx座標を示すxs
_min、最小のy座標を示すys
_minが求められる。これらの座標を用いて、推測領域を、(xs
_max,ys
_max)、(xs
_max,ys
_min)、(xs
_min,ys
_max)、(xs
_min,ys
_min)の4つの点により規定される四角形の領域とすることができる。
【0164】
次に、ステップS138において、解析装置10は、コード群の画像内の推測領域を再走査して、認識されたコードを解析する。
【0165】
次に、ステップS140において、解析装置10は、最初の走査で認識されたコードの解析結果と共に、推測領域を再走査して認識されたコードに対する解析結果を表示部14に出力する。
【0166】
次に、ステップS142において、解析装置10は、解析を終了するか否かを判断する。例えば、ユーザの指示により、更に認識されないコードを解析する必要がある場合には、解析を終了せずに、ステップS90へ戻る。
【0167】
上述した実施形態の解析装置10によれば、コード群の輪郭が、画像のx軸及びy軸の方向と一致するように撮像されていなくとも、推測領域を決定することができる。そして、推測領域について認識されなかったコードを再走査して解析できるので、処理速度を向上することが可能である。なお、本実施形態の解析装置10は、コード群の輪郭が、画像のx軸及びy軸の方向と一致するように撮像されている場合にも適用可能であることはいうまでもない。
【0168】
本実施形態の解析装置10は、コード群の輪郭が正方形又は長方形又は平行四辺形又は三角形であれば、各コードを複数の集合体に精度良く分類して、推測領域を決定できる。なお、コード群の輪郭が平行四辺形の場合には、交差角は2つの角度を有する。また、コード群の輪郭が三角形の場合には、交差角は3つの角度を有する。
【0169】
また、上記以外の多角形に対しては、精度の低下や計算量の増加はあるものの、各コードを複数の集合体に分類して、推測領域を決定できる。
【0170】
2次元アレイ状に配置された複数の前記コードを含むコード群の輪郭を規定する交差する2本の直線がなす交差角度で交差する2本の直線の傾きを求める方法として、他の方法を用いることができる。以下、他の方法を用いる例として、変形例1及び変形例2を説明する。
【0171】
図29は、第2実施形態の変形例1を説明する図である。
【0172】
変形例1では、コード群の画像は、コード群の輪郭の4つの各隅部にマーカが配置されて撮像されている。マーカの画像40を、以下、単にマーカともいう。
【0173】
解析装置10は、2つのマーカ40の中心を結ぶ直線の内、交差角度で交差する2本の直線の傾きを求め、コード群の輪郭を規定する交差する2本の直線がなす交差角度で交差する2本の直線L1,L2の傾きとする。
【0174】
マーカは、コードと共に撮像されたものである。例えば、
図1に示すように、箱にコードが配置されている場合には、棚の枠内に、箱を縦方向及び横方向に積み上げて並べておき、棚の枠の4隅にマーカを配置して、マーカを含むコード群を撮像することができる。
【0175】
4つのマーカ40は、コード群の輪郭を形成するように配置されることが好ましい。また、コード群の対角線上に位置しない2つのマーカ40を結んだ直線は、コード群の輪郭を規定する直線と平行になるように、各マーカ40が配置されることが好ましい。
【0176】
4つのマーカは全て同じパターンである必要はないが、位置検出パターンのようにカメラで認識されやすい形状・デザインであることが好ましい。以上が、変形例1の説明である。
【0177】
図30は、第2実施形態の変形例2を説明する図である。
【0178】
変形例2では、解析装置10は、コード群の輪郭の4つの隅部を形成するコードである4つの隅コードの位置を示す中心の座標に基づいて、2つのコードの中心の座標を結ぶ直線の内、交差角度で交差する2本の直線の傾きを求めて、コード群の輪郭を規定する交差する2本の直線がなす交差角度で交差する2本の直線L1,L2の傾きとする。
【0179】
まず、解析装置10は、認識したコードすべての中心の座標のうち、最大のx座標、最大のy座標、最小のx座標、最小のy座標を有する4つのコードを隅コードとして選択する。
【0180】
次に、
図30に示すように、解析装置10は、隅コードの中心の座標同士を直線で結び、その中から最短の4本の直線を選択する。
【0181】
次に、解析装置10は、選定された4本の直線の内で、交差角度で交差する2本の直線の傾きを求める。以上が、変形例2の説明である。
【0182】
本発明では、上述した実施形態の方法、装置及びプログラムは、本発明の趣旨を逸脱しない限り適宜変更が可能である。また、一の実施形態が有する構成要件は、他の実施形態にも適宜適用することができる。