(57)【特許請求の範囲】
【請求項１】
外周に所定長さの実線パターンを特徴的パターンとして有する２次元コードを２次元画像検出手段にて検出し、
前記２次元画像検出手段にて検出した２次元コードを含む１画像領域分の画像データを画像データメモリに記憶し、
画像領域の水平方向及び垂直方向の少なくともいずれか一方に平行な検査線を、前記画像データメモリ上に設定し、
前記検査線に沿って画像データを検査して、前記画像データメモリ上における前記２次元コードの存在領域を検出する方法であって、
前記検査線の始点は、前記画像領域の一方の端部に設定されたものと他方の端部に設定されたものとがあり、
一方、前記検査線の終点は、前記始点とは反対側の画像領域端部から離されて設定されていると共に、前記一方の端部を始点として設定された検査線の長さと、前記他方の端部を始点として設定された検査線の長さとを足し合わせた長さが、前記画像領域の両端部間の長さから、前記検出された２次元コードが前記画像領域中において取り得る最小のサイズに基づいて決定される所定長さ分だけ減じた長さ以上に設定されていること、
を特徴とする２次元コード存在領域検出方法。
【請求項２】
請求項１記載の２次元コード存在領域検出方法において、
前記検査線は、前記画像領域の両端部間の長さから、前記検出された２次元コードが前記画像領域中において取り得る最小のサイズに基づいて決定される所定長さ分だけ減じた長さ以上に設定されていること、
を特徴とする２次元コード存在領域検出方法。
【請求項３】
請求項１記載の２次元コード存在領域検出方法において、
前記一方の端部を始点として設定された検査線の長さと、前記他方の端部を始点として設定された検査線の長さとを足し合わせた長さが、前記画像領域の両端部間の長さよりも小さく設定されていること、
を特徴とする２次元コード存在領域検出方法。
【請求項４】
請求項１〜３のいずれか記載の２次元コード存在領域検出方法において、
前記検査線に沿って画像データを検査する際、明暗の変化点を検出する変化点検出処理を行い、明暗変化点が検出されれば前記変化点検出処理は一旦終了して、前記明暗変化点を起点として所定長さ以上の直線を検出する直線検出処理に移行し、
当該直線検出処理において前記所定長さ以上の直線が検出されれば、当該検出された直線に基づき画像領域中における前記２次元コードの存在領域を検出する領域検出処理に移行し、当該直線検出処理において前記所定長さ以上の直線が検出されなければ、当該検査線又は別の検査線に沿った前記変化点検出処理に移行すること、
を特徴とする２次元コード存在領域検出方法。
【請求項５】
請求項１〜４のいずれか記載の２次元コード存在領域検出方法において、
前記検査線は複数設定されると共に、隣り合う検査線同士の検査方向が交互に逆向きになるよう設定されていること、
を特徴とする２次元コード存在領域検出方法。
【請求項６】
請求項１〜５のいずれか記載の２次元コード存在領域検出方法において、
前記検査線に直交する方向から見て同じ位置に、前記画像領域の両端部を始点とした検査線を設定可能にすると共に、
まず一方の画像領域端部を始点とする検査線を用いた変化点検出処理によって明暗変化点が検出され、その後の直線検出処理によって所定長さ以上の直線が検出されなかった場合には、前記検査線に直交する方向から見て同じ位置であるが反対側の画像領域端部を始点とする検査線による前記変化点検出処理を実行すること、
を特徴とする２次元コード存在領域検出方法。
【請求項７】
請求項１〜６のいずれか記載の２次元コード存在領域検出方法において、
前記検出対象の２次元コードは、少なくとも２辺が実線パターンであること、
を特徴とする２次元コード存在領域検出方法。
【請求項８】
請求項７記載の２次元コード存在領域検出方法において、
前記検出対象の２次元コードは、隣接する２辺が実線パターンであること、
を特徴とする２次元コード存在領域検出方法。
【請求項９】
請求項１〜８のいずれか記載の２次元コード存在領域検出方法において、
前記検査線が複数本設定されている場合には、前記画像領域中央付近では相対的に密に設定されていること、
を特徴とする２次元コード存在領域検出方法。
【請求項１０】
請求項１〜９のいずれか記載の２次元コード存在領域検出方法において、
前記検査線が複数本設定されている場合には、前記検査線を用いる順番が、前記画像領域中央付近から画像領域周辺へ向かう順番であること、
を特徴とする２次元コード存在領域検出方法。
【請求項１１】
請求項１〜１０のいずれか記載の２次元コード存在領域検出方法によって検出された２次元コード存在領域内の画像データに基づいて、その中に含まれている前記２次元コードを読み取ること、
を特徴とする２次元コード読取方法。
【請求項１２】
請求項１〜１０のいずれか記載の２次元コード存在領域検出方法が、コンピュータシステムにて実行するプログラムとして記録されたことを特徴とする記録媒体。
【請求項１３】
請求項１１記載の２次元コード読取方法が、コンピュータシステムにて実行するプログラムとして記録されたことを特徴とする記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、２次元コードを読み取る際、２次元画像検出手段にて検出された２次元的な画像データを一時的に記憶した画像データメモリ上において、２次元コードの存在領域を検出する方法などに関する。
【０００２】
【従来の技術】
従来より、バーコードや２次元コードを２次元画像検出手段にて２次元的な画像データとして検出し、その画像データを一時的に記憶した画像データメモリを走査してコード読み取りを行う手法が考えられている。例えば特開平１０−１９８７５４号公報には２次元ＣＣＤセンサで２次元的に走査するものが開示されている。この特開平１０−１９８７５４号公報に記載のものは、実際にはバーコードを対象としているのであるが、２次元ＣＣＤセンサから出力される全走査線信号の内、所定間隔で設定された走査線の代表である検査線を設定し、その検査線に沿って画像データを走査することで、画像データメモリ上でのバーコードの位置を早く見つけるようにしている。つまり、走査線単位で逐次画像データを走査すると時間がかかるのであるが、実際に画像データメモリ上において読取対象のコードが存在している領域は一部であるため、走査線群から抜粋した検査線単位で画像データを走査することで、早期にコードの存在を検出できるようになる。但し、画像領域中のどの位置にコードが存在するか判らないため、画像領域全体を検査できるように複数本の検査線を設定する必要はある。
【０００３】
また、この検査線に関しては、例えばＵＳＰ５，７６４，７９８において、その検査方向を種々設定する旨が開示されている。検査線が走査線の代表という考え方の場合には、例えば主走査線を基準とした場合には画像領域横方向において同一の方向（通常は左から右へ向かう方向）へ走査することとなるため、検査線についても全て同一の方向へ検査することとなる。それに対して、上記ＵＳＰ５，７６４，７９８においては、画像領域横方向であっても左から右へ向かう検査線だけでなく、逆に右から左へ向かう検査線も設定できるようにしている。
【０００４】
【発明が解決しようとする課題】
しかしながら、検査線の方向がどうであれ、これら従来技術において設定される検査線は、例えば画像領域横方向、つまり主走査線方向であれば、その主走査線の長さと同じだけの長さの検査線とされていた。もちろん、画像領域縦方向に設定する場合も同様に、縦方向長さ、つまり副走査線の長さと同じだけの長さの検査線とされていた。上述したように、画像領域中のどの位置にコードが存在するか判らないため、検査線に沿って走査しても対象のコードが検出できない場合も当然起こり得る。その場合は、画像領域の全体に適宜設定した検査線を順次用いて検査するのであるが、結果的にコードを検出できないような検査線に基づく処理にあっては、常にその検査線の長さ分だけの処理時間が生じてしまう。
【０００５】
そこで、本発明は、検出対象を所定の特徴的パターンを有する２次元コードに絞り、検出された２次元的な画像データを一時的に記憶した画像データメモリ上において２次元コードの存在領域を検出する際、結果的に２次元コードを検出できないような検査線に基づく処理に要する時間を極力短縮させることによって、存在領域検出処理自体に要する時間を短縮させることを目的とする。
【０００６】
【課題を解決するための手段及び発明の効果】
上記目的を達成するためになされた請求項１記載の２次元コード存在領域検出方法によって存在領域を検出する対象となる２次元コードは、外周に所定長さの実線パターンを特徴的パターンとして有するものである。具体的には、例えば矩形形状の外周の１辺が実線パターンである場合や、対向する２辺あるいは隣接する２辺が実線パターンである場合や、４辺全てが実線パターンである場合などが考えられる。
【０００７】
そして、請求項１記載の発明方法は、２次元画像検出手段にて検出した２次元コードを含む１画像領域分の画像データを画像データメモリに記憶し、画像領域の水平方向及び垂直方向の少なくともいずれか一方に平行な検査線を、画像データメモリ上に設定し、その検査線に沿って画像データを検査して、前記画像データメモリ上における前記２次元コードの存在領域を検出する。
【０００８】
なお、検査線に沿って画像データを検査する際には、例えば請求項４に示すような手法を採用できる。すなわち、明暗の変化点を検出する変化点検出処理を行い、明暗変化点が検出されれば変化点検出処理は一旦終了して、明暗変化点を起点として所定長さ以上の直線を検出する直線検出処理に移行する。そして、その直線検出処理において所定長さ以上の直線が検出されれば、検出された直線に基づき画像領域中における２次元コードの存在領域を検出する領域検出処理に移行する。この直線検出処理において所定長さ以上の直線が検出されなければ、当該検査線又は別の検査線に沿った変化点検出処理に移行するのである。なお、「当該検査線に沿った変化点検出処理」とは、同じ検査線を用いて、明暗変化点を検出した時点より先に進んで再度明暗変化点を検出するということである。
【０００９】
なお、領域検出処理に際しては、例えば正方形の２次元コードであれば、１辺の長さだけ判れば領域全体を検出することは容易であり、また長方形のものであれば、対向する２辺あるいは隣接する２辺が判れば、これもまた領域全体を容易に検出できる。もちろん、４辺全てを検出できれば、その４辺で囲まれる領域は容易に検出できる。
【００１０】
このような基本的な領域検出方法を実行する上で、検査線に対して次のような工夫を施している。すなわち、画像領域の一方の端部に始点が設定された検査線と他方の端部に始点が設定された検査線とを有する。そして、検査線の終点については、次のように設定されている。まず、いずれの端部を始点としている場合であっても、始点とは反対側の画像領域端部から離されて設定されている。さらに、一方の端部を始点として設定された検査線の長さと、他方の端部を始点として設定された検査線の長さとを足し合わせた長さが、画像領域の両端部間の長さから、検出された２次元コードが画像領域中において取り得る最小のサイズに基づいて決定される所定長さ分だけ減じた長さ以上に設定されている。
【００１１】
このように画像領域の端部を始点とする検査線は、まず、始点とは反対側の画像領域端部から離されているため、従来のものよりも短くなる。そして、最大限短くなる場合は次の通りである。すなわち、両方の端部をそれぞれ始点とする検査線の長さ同士を足し合わせた長さが、画像領域の両端部間の長さから所定長さ分だけ減じた長さとなる場合である。この所定長さは、検出された２次元コードが画像領域中において取り得る最小のサイズに基づいて決定される。
【００１２】
このような範囲の長さに設定される検査線に関しては、例えば請求項２に示すように限定することもできる。
すなわち、検査線の長さを、画像領域の両端部間の長さから、検出された２次元コードが画像領域中において取り得る最小のサイズに基づいて決定される所定長さ分だけ減じた長さ以上に設定するのである。この所定長さは、図３（ａ）であればＷ１が該当する。したがって、主走査線方向に平行な検査線の終点が、画像領域の端部からＷ１手前で終了している。
【００１３】
ここで、所定長さ（Ｗ１）について説明する。検出対象の２次元コードが同一であっても、２次元画像検出手段に対する位置関係によっては、画像データメモリ上において取り得る２次元コードの画像サイズは異なってくる。一般的には、縮小光学系を用いた場合には、その光学系（結像レンズなど）から遠ざかるにつれて検出される２次元コードの画像サイズも小さくなる。但し、焦点距離からのずれが大きくなると読み取れなくなるため、適切な状態で検出されるという条件の下で、画像データメモリ上において取り得る２次元コードの最小の画像サイズが決まってくる。したがって、その「画像データメモリ上において取り得る最小のサイズ」を基準とする。図３（ｂ）であればＷ０が該当する。なお、ここでは２次元コード１０１は正方形であることを想定しており、１辺がＷ０となる。
【００１４】
そして、後述するように、所定長さ（Ｗ１）が長いほど検査線が短くなり、検出処理の短縮化が図れるので、極力、最小サイズ（Ｗ０）に近い長さを所定長さとすることが好ましい。したがって、理論的には、ほんの少しでも短ければよいが、実際には、２次元コードが明暗セルにて構成されていることを考えれば、その最小サイズ（Ｗ０）から１ないし２セル分程度短くした長さ（Ｗ１）を「所定長さ」とすることが現実的である。このようにすれば、最小サイズ（Ｗ０）の２次元コード１０１の画像データが画像領域の最端部に存在していたとしても、検査線にて検査することができる。この手法であれば、外周の所定長さの実線パターンを特徴的パターンとして有する大抵の２次元コードに対して、その２次元コードがどのように位置していても領域検出が可能となる。なお、「大抵の…」としたのは、例えば矩形形状の１辺にしか実線パターンがなく、その実線パターンが検査線に全く平行に位置してしまうというレアケースにおいては、領域検出ができない場合が生じるからである。そのようなレアケースを考えなければ、ほとんどの場合に検出可能である。
【００１５】
なお、ここで、画像領域の両方の端部を始点とする検査線が設定されていることによる効果を説明する。
このように画像領域の左右いずれの方向からも検査することは、特に検出対象の２次元コードの隣接する２辺が実線パターンである場合に効果がある。その点を図を参照して説明する。検出対象の２次元コードとしては、例えば図８（ａ）に示すコード１０１や図８（ｂ）に示すコード１０２などが挙げられる。これらのコード１０１，１０２は共に矩形形状の左辺と下辺に実線パターンＬ１，Ｌ２を有している。
【００１６】
図９（ａ）に示すように、検査線の方向が主走査線と同じ画像領域左から右への１方向である場合を考える（方向については向かって「左」、「右」として考える。以下同様。）なお、ここでは、副走査線の方向に見て９本の検査線が設定されており、図９（ａ）中に記した▲１▼〜▲９▼の番号の順番で検査線を用いることとする。そして、図９（ｂ）に示すように、上述した図８（ａ）のコード１０１が画像領域の下方にやや傾いた状態で存在している場合には、検査線を▲１▼，▲２▼，▲３▼の順番で用いて検査すると、検査線▲３▼によってコードの一部らしいものを検出する。
【００１７】
具体的には明暗の変化点が検出されるので、その明暗変化点を起点として所定長さ以上の直線を検出する直線検出処理に移行する。この場合には左辺の実線パターンＬ１であるため所定長さ以上の直線が検出され、その検出された直線に基づき１画像領域中における２次元コードの存在領域を検出する領域検出処理に移行する。この場合には、実線パターンＬ１の両端のいずれかにさらに所定長さの実線パターンＬ２が存在するかどうかを検出し、存在すれば、それらＬ字パターンに基づいて２次元コードの存在領域を検出することとなる。
【００１８】
しかしながら、図９（ｃ）に示すように、コード１０１の傾きが大きくなり、左周りに１００ｄｅｇ程度傾いた場合には、図９（ｂ）と同様にはいかなくなる。つまり、実線パターンＬ１，Ｌ２が画像領域中において下側及び右側に移動してしまっており、左から右方向へ検査していくような検査線を用いると、いずれも、実線パターンＬ１，Ｌ２における明暗変化点ではなく、明暗セルがセル単位で分布している部分において明暗変化点を検出してしまう。そのため、図９（ｃ）中の検査線▲３▼〜▲６▼のいずれにおいても、まず明暗変化点が検出された後の直線検出処理において所定長さ以上の直線が検出されない。したがって、全検査線を用いた後で、結果的に検出できないという結果になってしまう。
【００１９】
そこで、図４（ａ）に示すように、隣り合う検査線同士の検査方向が交互になるように設定する。つまり、検査線▲１▼は左から右へ向かう方向であるが、その両脇（図中では上下）に設定される検査線▲２▼，▲３▼は右から左へ向かう方向である。それ以外も同様に交互の検査方向となっている。なお、当然ながら、各検査線の終点は画像領域の端部から所定長さだけ短くされている。
【００２０】
このようにすれば、上述した図９（ｃ）に示すようにコード１０１の傾きが大きくなって左周りに１００ｄｅｇ程度傾いた場合であっても、右から左へ向かう方向の検査線によって実線パターンＬ２を検出できる。
一方、上述した所定範囲内の長さに設定される検査線に関しては、例えば請求項３に示すように限定してもよい。
【００２１】
すなわち、両方の端部をそれぞれ始点とする検査線の長さ同士を足し合わせた長さを、画像領域の両端部間の長さよりも小さく設定するのである。なお、当然ながら、最大限短くなる場合は、検査線の長さ同士を足し合わせた長さが、画像領域の両端部間の長さから所定長さ分だけ減じた長さとなる場合である。この所定長さは、上述した請求項２にて説明した内容と同じであるので、ここでは繰り返さない。
【００２２】
このように、検査線の長さを最大限短くした場合には、検査線の方向に画像データメモリ上の画像領域を３分割し、その中央の分割領域の幅を所定長さに設定し、その３分割した両端の分割領域において、それぞれ検査線の始点を画像領域端部に設定することと同等となる。例示すれば図７（ａ）に示すようになる。ここでは便宜上左側領域Ａ１、右側領域Ａ２、中央領域Ａ３と称す。なお、図７（ａ）の場合には画像領域の真に中央部分に中央領域Ａ３が設定されているが、画像領域の両方の端部をそれぞれ始点とする検査線の長さ同士を足し合わせた長さを、画像領域の両端部間の長さよりも所定長さだけ短ければよいので、左側領域Ａ１と右側領域Ａ２のいずれか一方が他方よりも長くてもよい。
【００２３】
この図７（ａ）からも判るように、各検査線の長さは画像領域の幅Ｍの半分以下となっており、結果的に２次元コードを検出できないような検査線に基づく処理に要する時間が、飛躍的に短縮される。但し、この場合には、読取対象の２次元コードに対する制約が大きくはなる。つまり、図７（ｂ）に示すように、４辺全てが実線パターンの２次元コードを対象とする場合には本方法は非常に有効である。画像領域中のどの部分に２次元コード１１１が存在しても、左側領域Ａ１あるいは右側領域Ａ２のいずれかにおいて実線パターンＬ１〜Ｌ４のいずれかが必ず検出されることとなるからである。このように４辺全てが実線パターンの２次元コードとしては、例えば図８（ｃ）に示すコード１１１や図８（ｄ）に示すコード１１２などが挙げられる。これらコード１１１やコード１１２は矩形形状の４辺に実線パターンＬ１〜Ｌ４を有している。
【００２４】
一方、例えば図８（ａ）に示すコード１０１や図８（ｂ）に示すコード１０２などのように、矩形形状の左辺と下辺にのみ実線パターンＬ１，Ｌ２を有している場合であっても、それら実線パターンＬ１，Ｌ２が、図７（ａ）に示す中央領域Ａ３内に全て入ってしまわない限り、検出は可能である。つまり、２次元コードが外周において有する特徴的パターンが、図７（ａ）に示す中央領域Ａ３内に全て入ってしまわない限り、検出は可能である。但し、このような特徴的パターンの位置によって領域検出が可能となったり不可能となったりするのが不都合であるならば、読取対象を限定することが現実的ではある。つまり、上述した４辺に実線パターンを有する２次元コードのように、コードがどのように位置しても、特徴的パターンの一部が図７（ａ）に示す左側領域Ａ１あるいは右側領域Ａ２に位置するようなコードに限定するのである。
【００２５】
以上、検査線の長さについては、読取対象の２次元コードの特徴的パターンなどに応じて適切な設定範囲が変わることを述べたが、いずれにしても、検査線自体は画像領域の両端部の長さよりも短く設定される。そのため、検出された２次元的な画像データを記憶した画像データメモリ上において２次元コードの存在領域を検出する際、結果的に２次元コードを検出できないような検査線に基づく処理に要する時間を極力短縮させることができる。これによって、２次元コードの存在領域検出処理自体に要する時間が短縮される。そして、上述したように、従来よりも短い検査線を用いても、領域検出機能は何ら劣ることがない。
【００２６】
なお、検査線に関して補足すると、上述したように、画像領域の水平方向及び垂直方向の少なくともいずれか一方に平行な検査線を設定すればよい。したがって、画像領域の水平方向に平行な検査線のみを設定してもよいし、垂直方向に平行な検査線のみを設定してもよいし、当然ながら両方を設定してもよい。但し、結果的に２次元コードを検出できないような検査線に基づく処理に要する時間を極力短縮させるという観点からすれば、検査線数は少ない方がよい。その際、一般的には画像領域は水平方向の方が垂直方向よりも長いことが多いので、検査線についても、画像領域の水平方向に平行な検査線を設定すると、検査線数は相対的に少なくてよくなる。
【００２７】
ところで、検査線の始点については、請求項５に示すように、複数設定した検査線について、隣り合う検査線同士の検査方向が交互になるように設定することも有効である。交互に設定しておけば、２次元コードの特徴的パターンをより確実に検出することができるからである。
【００２８】
なお、請求項５では、検査線の方向が交互になるように設定する手法を説明したが、請求項６に示すように、検査線に直交する方向から見て同じ位置に、画像領域の両端部を始点とした検査線を設定可能にした場合には、次のような手法を採用することができる。すなわち、まず一方の画像領域端部を始点とする検査線を用いた変化点検出処理によって明暗変化点が検出され、その後の直線検出処理によって所定長さ以上の直線が検出されなかった場合には、その検査線に直交する方向から見て同じ位置であるが反対側の画像領域端部を始点とする検査線による変化点検出処理を実行するのである。例えば図４（ｂ）を参照して説明すれば、左から右への検査方向を有する検査線▲５▼によって明暗変化点が検出されたが所定長さ以上の直線が検出されなかった場合には、反対側の画像領域端部を始点とする検査線▲５▼’による変化点検出処理を実行するのである。
【００２９】
これは、一方の画像領域端部を始点とする検査線によって明暗変化点が検出されたが所定長さの直線が検出されなかった場合には、その反対側から検査すれば所定長さの直線が存在する可能性が高いと考えられるからである。特に、隣接する２辺に実線パターンを有する２次元コードの場合には、極めて高い確率で所定長さの直線を検出できる。図４（ｂ）で言えば、コード１０１の傾きが左周りに１００ｄｅｇ程度傾いているため、検査線▲５▼によって明暗変化点が検出されても所定長さ以上の直線が検出されないが、反対側の画像領域端部を始点とする検査線▲５▼’によれば、実線パターンＬ２を検出できる。
【００３０】
このような観点からすれば、請求項７に示すように、検出対象の２次元コードとして、少なくとも２辺が実線パターンであるものに絞れば、存在領域の検出時間の短縮の面で効果的であり、さらに請求項８に示すように、隣接する２辺が実線パターンであるものに絞れば、より存在領域の検出時間の短縮が実現される。
【００３１】
当然ながら、４辺全てが実線パターンであっても構わないが、４辺全てが実線パターンであれば、あえて検査線の検査方向を反対側からも設定する必要はなく、全て同一方向であっても検出できる。したがって、上述した隣接する２辺が実線パターンであるタイプのものまでに対して特に有効であると考える。
【００３２】
なお、これまでに説明した各２次元コード存在領域検出方法において共通に適用できる工夫としては、次のような点が挙げられる。
検査線の間隔を非常に細かく設定すればよいが、検査線数が増加するほど処理負荷は大きくなる。そこで、請求項９に示すように、複数本設定することを前提としながら、画像領域中央付近で相対的に密に設定すれば、画像領域中央付近に２次元コードが存在する可能性が高いため、全体としては検査線の数を過度に多くせずに済む。なお、図４（ａ）に示した例もそのように設定されている。
【００３３】
また、検出対象の２次元コードが画像領域中央付近に存在する可能性が高いという観点からすれば、請求項１０に示すように、複数本の検査線を用いる順番は、画像領域中央付近から画像領域周辺へ向かう順番とすることが好ましい。このようにすれば、早期に２次元コードの存在領域を検出できることとなる。なお、図４（ａ）に示した例もそのように設定されている。
【００３４】
ところで、以上説明したのは２次元コード存在領域検出方法であったが、一般的には、このように検出された２次元コード存在領域内の画像データに基づいて、その中に含まれている２次元コードを読み取る処理を行う。したがって、請求項１１に示すように、２次元コード存在領域検出方法を実行して検出された２次元コード存在領域内の画像データに基づいて２次元コードを読み取る２次元コード読取方法という概念で技術思想を捉えることもできる。
【００３５】
なお、請求項１２，１３に示すように、請求項１〜１０のいずれか記載の２次元コード存在領域検出方法、あるいは請求項１１記載の２次元コード読取方法を実行する機能は、例えば、デジタル回路やコンピュータシステム側で起動するプログラムとして備えられる。プログラムで実現する場合、例えば、フロッピーディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ハードディスク等の機械読み取り可能な記録媒体に記憶し、必要に応じてコンピュータシステムにロードして起動することにより用いることができる。この他、ＲＯＭやバックアップＲＡＭを機械読み取り可能な記録媒体として前記プログラムを記憶しておき、このＲＯＭあるいはバックアップＲＡＭをコンピュータシステムに組み込んで用いても良い。
【００３６】
【発明の実施の形態】
以下に、本発明の好適な実施例を図面に基づいて説明する。尚、本発明の実施の形態は、下記の実施例に何ら限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採り得ることはいうまでもない。
【００３７】
図１のブロック図に、実施例としての２次元コード読取装置１の概略構成を示す。
２次元コード読取装置１は、制御回路１０と、照明発光ダイオード（照明ＬＥＤ）１１と、ＣＣＤエリアセンサ１２と、増幅回路１３と、Ａ／Ｄ変換回路１４と、同期パルス出力回路１６と、アドレス発生回路１７と、画像メモリ２０と、スイッチ群３１と、液晶表示器３２と、通信Ｉ／Ｆ回路３３とを中心にして構成されている。
【００３８】
制御回路１０は、ＣＰＵ、ＲＯＭ、ＲＡＭ、Ｉ／Ｏ等を備えたコンピュータシステムとして構成され、ＲＯＭに記憶されているプログラムに従って後述する読取処理等を実行し、２次元コード読取装置１の各構成を制御している。
照明ＬＥＤ１１は、読取対象の２次元コードに対して照明用の赤色光を照射するものである。
【００３９】
ＣＣＤエリアセンサ１２は、２次元的に配列された複数の受光素子であるＣＣＤを有しており、外界を撮像してその２次元画像を水平方向の走査線信号として出力する。この走査線信号は増幅回路１３によって増幅されてＡ／Ｄ変換回路１４に出力される。
【００４０】
増幅回路１３は、制御回路１０から入力したゲインコントロール電圧に対応する増幅率で、ＣＣＤエリアセンサ１２から出力された走査線信号を増幅する。
Ａ／Ｄ変換回路１４は、増幅回路１３にて増幅されたアナログの走査線信号をディジタル信号に変換して、画像メモリ２０に出力する。
【００４１】
ＣＣＤエリアセンサ１２では繰り返し画像を検出するので、その検出が繰り返される度に、画像メモリ２０内の画像データは更新される。
同期パルス出力回路１６は、ＣＣＤエリアセンサ１２から出力される２次元画像データのパルスより十分に細かい同期パルスを出力する。アドレス発生回路１７はこの同期パルスをカウントして、画像メモリ２０に対するそれぞれのアドレスを発生させる。
【００４２】
スイッチ群３１は、利用者が読取処理の開始を指示するための読取スイッチや、テンキーあるいは各種ファンクションキーを備えており、情報入力のために用いられる。
液晶表示器３２は、読み込んだ２次元コードなどを表示するためなどに用いられる。
【００４３】
通信Ｉ／Ｆ回路３３は、ホストコンピュータなどとの間で通信を行うものであり、例えば図示しない通信用発光素子を介してデータを外部装置に送信したり、図示しない通信用受光素子を介して外部装置からの信号（例えばシステムを動かすためのプログラムや解読した２次元コードのデータ送信を指示する命令等）を受信する。もちろん、ホストコンピュータと有線で接続する構成を採用してもよい。
【００４４】
このような構成を備えた本実施例の２次元コード読取装置１は、まず制御回路１０の指示により、ＣＣＤエリアセンサ１２にて２次元コードの２次元画像を検出する。ＣＣＤエリアセンサ１２は、２次元画像を検出すると、アナログ信号にて２次元画像データを出力する。ＣＣＤエリアセンサ１２から出力され増幅回路１３によって増幅された走査線信号は、Ａ／Ｄ変換回路１４によってディジタルデータに変換され、この１画像領域分のデータは画像メモリ２０に一時記憶される。
【００４５】
具体的には、図２（ａ）に示すように、ＣＣＤエリアセンサ１２の左上の画素を開始点の画素Ｐ１とし、左から右へ移動すると共に、上から下へ移動するような順番で最終的には右下の画素が終了点の画素Ｐｎとなる。そして、図２（ｂ）に示すように、その順番（Ｐ１〜Ｐｎ）で画像メモリ２０内の所定のアドレスＡ（ｐ１）〜Ａ（ｐｎ）に格納される。なお、以下の説明においては、実際には画像メモリ２０内のデータを用いて処理するのであるが、視覚的に理解が容易となるように、図２（ａ）に対応するような２次元の画像領域を想定して進めることとする。また、本実施例では、図３（ａ）に示すように、主走査線方向の画素数Ｍが６４０個、副走査線方向の画素数Ｎが４８０個であるとして説明を進める。
【００４６】
続いて、本実施例における２次元コードの読取に係る動作について説明する。実際の読取処理に係る処理は図６に示すフローチャートに従って実行されるのであるが、その前提として、図２（ａ）に示す２次元画像領域上に、図４に示すような検査線▲１▼〜▲９▼を設定しておく。この検査線▲１▼〜▲９▼の設定手法が特徴的であるため、その点を説明する。
【００４７】
本実施例の検査線▲１▼〜▲９▼の始点は画像領域端部に設定されているが、終点は、始点とは反対側の画像領域端部から所定長さＷ１だけ短く設定されている。この所定長さＷ１については、図３（ａ）を参照して既に説明した通り、画像データメモリ上において取り得る読取対象（検出対象）の２次元コード１０１の画像の最小サイズＷ０を基準に設定されている。具体的には、最小サイズＷ０から１〜２セル分（図３（ｂ）では２セル分短くしている）だけ短くした長さを所定長さＷ１としている。
【００４８】
なお、２次元コード１０１は、セル数に基づいて言えば、図３（ｃ）に示すようにＫセル×Ｋセルのサイズ（コードサイズ）とされている。一般的に使用頻度の多い２次元コード１０１の場合にはＫ＝２０〜１５０である（図３（ｂ）では図示する都合上から８セル×８セルで示している）。そして、画像データメモリ上において１セルが取り得る最小の画像サイズを４画素×４画素とすると、Ｗ０＝４Ｋ画素、Ｗ１＝４（Ｋ−１又は２）画素となる。このような関係から、読み取る対象の２次元コード１０１のコードサイズを勘案し、所定長さＷ１を画素単位で決定することができる。したがって、このように決定した所定長さＷ１分だけ短くした検査線を設定するのである。
【００４９】
また、本実施例の場合には、図４（ａ）に示すように、隣り合う検査線同士の検査方向が交互になるように設定する。つまり、検査線▲１▼は左から右へ向かう方向であるが、その両脇（図中では上下）に設定される検査線▲２▼，▲３▼は右から左へ向かう方向である。▲４▼〜▲９▼の検査線についても同様に交互の検査方向となっている。なお、当然ながら、各検査線▲１▼〜▲９▼の終点は画像領域の端部から所定長さＷ１だけ短くされている。
【００５０】
さらに、本実施例の場合には、基本的には図４（ａ）に示すように検査線の方向が交互になるように設定されているが、副走査線方向から見て同じ位置に、元々設定されている検査線の始点とは反対側の画像領域端部を始点とした検査線を設定可能にされている。つまり、図４（ｂ）に示すように、左から右への検査方向を有する検査線▲５▼と同じ位置（副走査線方向に見て同じ位置という意味）において、反対側の画像領域端部を始点とする検査線▲５▼’が設定可能であるということである。他の検査線▲１▼〜▲４▼、▲６▼〜▲９▼も同様である。なお、この検査線▲５▼’などを、どのような場合に設定するかは後述する。
【００５１】
続いて、実際の読取処理に係る処理を図６に示すフローチャートを参照して説明する。
最初のステップＳ１１０では、変数Ｊを初期値１に設定し、続くＳ１２０においてＪ番目の検査線に沿って画像データを検査する。続いて、その検査線に沿って検査した結果に基づいて暗パターンを検出したか否かを判定し（Ｓ１３０）、検出していなければ（Ｓ１３０：ＮＯ）、変数Ｊをインクリメントし（Ｓ１４０）、変数Ｊが検査線の設定本数Ｈ（図４（ａ）に示すように示す場合であればＨ＝９）よりも大きいか否かを判断する（Ｓ１５０）。
【００５２】
変数Ｊ≦設定本数Ｈであれば（Ｓ１５０：ＮＯ）、Ｓ１２０へ戻って、前回とは別の検査線を設定する。このようにして、暗パターンを見つけるまで、検査線を変更しながら検査していく。
なお、本実施例では、画像領域中の中央付近に２次元コードの画像が存在する可能性が高いという観点から、複数本設定された主検査線▲１▼〜▲９▼の使用順番は、画像領域の中央付近から外側へ向かう順番とされている（図４（ａ）参照）。
【００５３】
そして、Ｓ１３０の判定により暗パターンを検出した場合には、Ｓ１６０へ移行して所定長さ（Ｗ１）以上のＬ字パターンの有無を検査する。つまり、図５（ａ）で言えば、２次元コード１０１の外周の隣接する２辺に存在する実線パターンの有無を検出するのである。
【００５４】
具体的には、検査線によって実線パターンＬ１が検出された明暗変化点を基準とし、その明暗の境界線に沿って境界線の長さ、この場合であれば暗パターンの長さを調べる。通常は暗パターンの途中において検査線による明暗変化点が検出されるので、図５（ａ）に示すように、暗パターンの一端までの距離ａと他端までの距離ｂとの和（ａ＋ｂ）が所定長さ以上であるかどうか判断する。なお、この場合の所定長さとしては、読取対象とする２次元コードの最も小さいコード画像に含まれる直線部分の長さを想定する。
【００５５】
そして、このように２次元コード１０１の１辺に相当する暗パターン（この場合には実線パターンＬ１）の存在が確認された場合には、その暗パターンの端部から折れ曲がって同様に暗部の長さを調べる。この場合には、一端から折れ曲がって調べた暗部の長さｃは短いが、他端から折れ曲がって調べた暗部の長さｄがやはり所定長さ以上であるため、２次元コード１０１の他の１辺に相当する暗パターン（この場合には実線パターンＬ２）の存在を確認できる。これにより「Ｌ字パターン」があることが判る。
【００５６】
したがって、図５（ａ）に示すような検査線を用いた場合には、Ｌ字パターンが存在するため（Ｓ１７０：ＹＥＳ）、Ｓ２１０へ移行する。Ｓ２１０では、２次元コード１０１が存在する領域（コード領域）を計算する。この場合はＬ字パターンが正方形の２辺であることから、容易にコード領域を計算することができる。
【００５７】
そして、続くＳ２２０においては、Ｓ２１０で計算されたコード領域内の明暗パターンを解読し、記録されている情報を再生（デコード）する。その後、本処理ルーチンを終了する。
一方、例えば図５（ｂ）に示すように、２次元コード１０１が左周りに１００ｄｅｇ程度傾いている場合には、本来ならば２次元コード１０１の左側に存在する実線パターンＬ１が下側に移動しているため、左から右への検査方向を有する検査線▲５▼によって検出することができない。つまり、明暗変化点自体は検出できるが、図５（ａ）を参照して説明したような所定長さ以上の直線は検出できない（Ｓ１７０：ＮＯ）。そこでＳ１８０へ移行して、反対側の画像領域端部を始点とする検査線（図４（ｂ）で言えば検査線▲５▼’）を設定する。
【００５８】
そして、続くＳ１９０では、上述したＳ１６０と同様に、所定長さ以上のＬ字パターンの有無を検査する。図４（ｂ）に示す検査線▲５▼’を用いた場合にはＬ字パターンが存在するため（Ｓ２００：ＹＥＳ）、Ｓ２１０へ移行する。
なお、図５（ｂ）に示すように、検査線▲５▼では所定長さ以上の直線は検出できない場合には、反対側の画像領域端部を始点とする検査線▲５▼’では所定長さ以上の直線が検出できることが多い。但し、２次元コード１０１の回転度合いによっては検出できない場合もあるので、反対側の画像領域端部を始点とする検査線を用いても検出できない場合には（Ｓ２００：ＮＯ）、Ｓ１４０へ移行して、次の検査線による検査に委ねる。
また、検査線による検査に際して本実施例では次の点を考慮している。すなわち、図５（ｂ）に示すように、傷などが原因で生じた線（イ）を検査線が当たった場合には暗パターンを見つけたこととなるので、直線検出処理に移行する。但し、この場合には直線は検出されない。ここで、単に他の検査線による検査に移っても、２次元コード１０１の実線パターンＬ１，Ｌ２を検出することはできない。したがって、暗パターンを見つけて直線検出処理に移行したが直線を見つけられないような場合には、再び同じ検査線による検査に戻り、従前に検査した位置より先、つまりこの場合は傷などが原因で生じた線（イ）を乗り越えて、検査を続行する。但し、無限に行うわけではなく、例えば数回程度繰り返しても直線が検出できなければ、別の検査線による検査に移行する。これによって、傷や汚れなどがあっても目的の２次元コード１０１ににたどり着くことができるようになる。
【００５９】
ここで、図６に示した処理内容と特許請求の範囲に記載した用語との対応を簡単に説明しておく。図６中のＳ１１０〜Ｓ２１０の処理の実行が、２次元コード存在領域検出方法としての処理の実行に相当する。そして、Ｓ２２０の処理を加えることによって、２次元コード読取方法としての処理の実行に相当する。また、Ｓ１２０，Ｓ１３０の処理が変化点検出処理に相当し、Ｓ１６０，Ｓ１９０の処理が直線検出処理に相当し、Ｓ２１０の処理が領域検出処理に相当する。
【００６０】
このように、本実施例においては、図３，４などに示したように、２次元コード１０１の存在領域を検出する際に用いる検査線自体を短く設定したことによって、画像データメモリ上において２次元コード１０１の存在領域を検出する際、結果的に２次元コード１０１を検出できないような検査線に基づく処理に要する時間を極力短縮させることができる。つまり、図４（ｂ）に示す例で説明すれば、この場合は検査線▲１▼〜▲４▼によっては２次元コード１０１の明暗変化点自体が見つからないため、この検査線▲１▼〜▲４▼は、結果的に２次元コード１０１を検出できない検査線に該当する。しかし、この検査線▲１▼〜▲４▼の長さは画像領域全体を検査する目的で設定されていた従来に比べ、所定長さＷ１だけ短くなっている。そのため、単純に考えて、４本の検査線▲１▼〜▲４▼においてそれぞれＷ１分の画像データの明暗を判定する処理が不要となる。これは、２次元コード１０１の存在領域検出処理自体に要する時間を短縮させることとなる。
【００６１】
そして、この検査線を短くする「所定長さＷ１」は、図３（ａ）を参照して既に説明した通り、画像データメモリ上において取り得る読取対象（検出対象）の２次元コード１０１の画像の最小サイズＷ０から１〜２セル分だけ短くした長さとされている。そのため、最小サイズ（Ｗ０）の２次元コード１０１の画像データが画像領域の最端部に存在していたとしても、いずれかの検査線にて検査することができる。つまり、従来よりも短い検査線を用いても、領域検出機能は何ら劣ることがないのである。
【００６２】
また、本実施例においては、図４（ａ）に示すように、隣り合う検査線同士の検査方向が交互になるように設定すると共に、図４（ｂ）に示すように、左から右への検査方向を有する検査線▲５▼によって明暗変化点が検出されたが所定長さ以上の直線が検出されなかった場合には、反対側の画像領域端部を始点とする検査線▲５▼’による変化点検出処理を実行している。これは、一方の画像領域端部を始点とする検査線によって明暗変化点が検出されたが所定長さの直線が検出されなかった場合には、その反対側から検査すれば所定長さの直線が存在する可能性が高いと考えられるからである。特に、隣接する２辺に実線パターンを有する２次元コード１０１の場合には、極めて高い確率で所定長さの直線を検出できる。
【００６３】
［その他］
（１）上記実施例では、図３，４に示すように、検査線を主走査線方向に設定したが、理論的には、副走査線方向に設定してもよい。その場合に検査線の長さを短くする「所定長さ」については、やはり上述したＷ１（図３参照）である。もちろん、主走査線方向及び副走査線方向の両方に設定してもよい。
【００６４】
但し、結果的に２次元コードを検出できないような検査線に基づく処理に要する時間を極力短縮させる、という観点からすれば、検査線数は少ない方がよい。上記実施例では、図３（ａ）に示すように、主走査線方向の画素数Ｍが６４０個、副走査線方向の画素数Ｎが４８０個であるとした。つまり、画像領域は、主走査線方向の方が副走査線方向よりも長いため、検査線を主走査線方向に設定すると、検査線数が相対的に少なくてよくなる。
【００６５】
（２）上記実施例では、図４（ａ）に示すように、隣り合う検査線同士の検査方向が交互になるように設定したが、検査線を短くすることによって、結果的に２次元コードを検出できないような検査線に基づく処理に要する時間を極力短縮させる、という観点からすれば、検査線の始点を画像領域のいずれか一方の端部のみから設定してもよい。但し、図４（ｂ）に示したように、隣接する２辺のみに実線パターンＬ１，Ｌ２を有する２次元コード１０１の場合には、左右いずれかでも検査可能な検査線を設定することによって、２次元コード１０１がどのように回転していても適切にコード存在領域を検出できる、というメリットを享受できる。
【００６６】
このように、検出対象の２次元コードとして、隣接する２辺が実線パターンＬ１，Ｌ２であるものに絞れば、存在領域の検出時間の短縮がより適切に実現できることが判る。なお、図４（ｂ）に示した手法を採用した場合には、例えば対向する２辺のみに実線パターンである場合でも有効であるし、さらには１辺のみに実線パターンを有する場合でも高い確率で２次元コードの存在領域を検出できると考えられる。
【００６７】
当然ながら、４辺全てが実線パターンであっても構わないが、４辺全てが実線パターンであればあえて検査線の検査方向を反対側からも設定する必要はなく、全て同一方向であっても検出できる。
（３）４辺全てが実線パターンの２次元コードに特化するのであれば、さらなる存在領域の検出時間の短縮を考えて、次のような手法を採用してもよい。なお、この場合の検出対象の２次元コードとしては、例えば図８（ｃ）に示すコード１１１や図８（ｄ）に示すコード１１２などが挙げられる。これらコード１１１やコード１１２は矩形形状の４辺に実線パターンＬ１〜Ｌ４を有している。
【００６８】
このような４辺全てが実線パターンである２次元コード１１１，１１２を対象として、検査線を次のように設定する。すなわち、検査線の方向に画像データメモリ上の画像領域を３分割する。図７（ａ）では左側領域Ａ１、右側領域Ａ２、中央領域Ａ３と称す。そして、中央領域Ａ３の幅を、検出された２次元コードが画像領域中において取り得る最小のサイズに基づいて決定される所定長さ、すなわち図３を参照して説明したＷ１に設定する。そして、左側領域Ａ１、右側領域Ａ２において、それぞれ検査線の始点を画像領域端部に設定するのである。このようにすると、図７（ａ）からも判るように、各検査線の長さは画像領域の幅Ｍの半分以下となっている。なお、このように検査線の設定方法が異なるのみであり、それ以外の例えば変化点検出処理や、直線検出処理や、領域検出処理については、上記実施例について説明した場合と同様である。
【００６９】
このように検査線を設定すれば、結果的に２次元コードを検出できないような検査線に基づく処理に要する時間が、飛躍的に短縮される。それでいて、この場合には、４辺全てが実線パターンの２次元コードが対象であるため、図７（ｂ）に示すように、画像領域中のどの部分に２次元コード１１１が存在しても、左側領域Ａ１あるいは右側領域Ａ２のいずれかにおいて実線パターンＬ１〜Ｌ４のいずれかが必ず検出されることとなる。
【００７０】
また、図７においては、左側領域Ａ１及び右側領域Ａ２における検査線同士で、副走査線の方向の位置が一致しないよう設定してある。これは、図４（ａ）にて示したように、隣り合う検査線同士の検査方向を交互に設定する考え方を採用し、さらに各検査線の終点がそれぞれの属する領域（左側領域Ａ１、右側領域Ａ２）の端部に設定することで、検査線の長さを飛躍的に短縮させたものである。このようにすれば、各領域Ａ１、Ａ２内において隣接する検査線の間隔をある程度広く設定することができる。
【００７１】
なお、図７（ａ）では中央領域Ａ３を画像領域の丁度中央に設定したが、左右いずれかにずれていても構わない。
【図面の簡単な説明】
【図１】  実施例としての２次元コード読取装置のブロック図である。
【図２】  画像と画像データアドレスとの対応関係を示す説明図である。
【図３】  実施例における検査線の設定手法の説明図である。
【図４】  実施例における検査線の設定手法の説明図である。
【図５】  （ａ）は実施例におけるＬ字パターンの有無判断手法の説明図、（ｂ）は検査線による検査手法の説明図である。
【図６】  実施例における２次元コードの存在領域検出及び読取に係る処理を示すフローチャートである。
【図７】  別実施例における検査線の設定手法の説明図である。
【図８】  種々の２次元コードの説明図である。
【図９】  従来の検査線の設定手法及びそれによる問題点の説明図である。
【符号の説明】
１…２次元コード読取装置      １０…制御回路
１１…照明ＬＥＤ                １２…ＣＣＤエリアセンサ
１３…増幅回路                  １４…Ａ／Ｄ変換回路
１６…同期パルス出力回路        １７…アドレス発生回路
２０…画像メモリ                ３１…スイッチ群
３２…液晶表示器                ３３…通信Ｉ／Ｆ回路
１０１，１０２，１１１，１１２…２次元コード
Ａ１…左側領域                  Ａ２…右側領域
Ａ３…中央領域            Ｌ１，Ｌ２…実線パターン
【図１】
0004055290.tif 000002
【図２】
0004055290.tif 000003
【図３】
0004055290.tif 000004
【図４】
0004055290.tif 000005
【図５】
0004055290.tif 000006
【図６】
0004055290.tif 000007
【図７】
0004055290.tif 000008
【図８】
0004055290.tif 000009
【図９】
0004055290.tif 000010