(57)【特許請求の範囲】
【請求項１】
２次元コードから反射した光を受光し画像信号に変換する変換手段と、前記画像信号を画像メモリとして記憶する記憶手段と、前記画像メモリの２以上の情報から求めた差分値に基づいて２次元コードの切り出しを行うコード切り出し手段と、前記コード切り出し手段によって切り出された前記２次元コードの各セルの所定画素の値を２値化するセル２値化手段とを備えた２次元コード読み取り装置。
【請求項２】
セル２値化手段は、２次元コードの各セルの所定画素の画像信号に基づき前記画素の濃度値を求めるセル濃度値抽出手段と、前記セル濃度値抽出手段で求められた濃度値から局所的なしきい値を求める局所しきい値決定手段と、前記セル濃度値抽出手段で求められた濃度値と前記局所しきい値決定手段で求められたしきい値とを比較しセルの２値データを求めるセル２値決定手段とを備えた請求項１記載の２次元コード読み取り装置。
【請求項３】
コード切り出し手段は、縦方向及び横方向に画像メモリの走査を行い走査線上にある２次元コードのエッジを検出するエッジ検出手段と、前記エッジ検出手段で求められたエッジの傾きを求めるエッジ傾き検出手段と、前記エッジ傾き検出手段で求められた傾きに従ってエッジを追跡して直線を検出する直線検出手段を備えた請求項１記載の２次元コード読み取り装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、２次元コードを読み取る２次元コード読み取り装置に関する。
【０００２】
【従来の技術】
従来２次元コードを読み取る手段としては、特開平７−２３４９１５号公報に示されているようにセンサとしてＣＣＤエリアセンサを使い、（１）ＣＣＤエリアセンサから出力されるアナログの画像情報を２値化する、（２）２値化された画像データの中から２次元コードを切り出す、（３）切り出された２次元コードのセルデータを抽出する、という順序で処理が行われていた。
【０００３】
この内（１）の処理としては次の３つの方法が行われていた。
【０００４】
第１の２値化方法はＣＣＤエリアセンサから送られてきた画像信号を一定のしきい値と比較して２値化を行う。図２６（ｂ）は固定しきい値による２値化の回路の例である。ＣＣＤエリアセンサから出力されたアナログ信号電圧は入力Ｖｉｎにはいり、電圧Ｅｏと比較され高ければ１、低ければ０の信号が出力される。図２６（ａ）中で波形Ｖｉｎのが電圧Ｅｏの値よりも高いところは０（白）、低いところは１（黒）となる。
【０００５】
第２の２値化方法は画像信号を少し前の画像信号から求められる浮動しきい値と比較して２値化を行う。図２６（ｃ）は浮動しきい値による２値化回路の例である。この２値化回路は入力信号Ｖｉｎを低周波ろ波（積分）して得られるＥｖをしきい値としている。このしきい値Ｅｖは図２６（ａ）ではＥｖとなり、ＶｉｎがＥｖより高い場合は０（白）、低い場合は１（黒）が出力される。
【０００６】
第３の２値化方法はＣＣＤエリアセンサから出力される画像信号をＡ／Ｄ変換して、１画面分の画像信号を画像メモリに記憶し、この濃度分布の情報を用いて２値化する方法である。図２３はこの２値化方法の例である。まず画像メモリに記憶された画像に対して輝度ムラ等の影響をのぞくシェーディング（輝度ムラ）補正を画面全体に行う（ステップ５１）。このシェーディング補正には例えばｈｏｍｏｍｏｒｐｈｉｃ  ｆｉｌｔｅｒ（準同型フィルタ）によって画像から低周波成分を取り除く方法がある。つぎに画像の濃度値のヒストグラムを作り、２モード法によりしきい値を求める（ステップ５２）。
【０００７】
また２値化が行われたあと（２）の処理として２次元コードの切り出しを行う。２次元コードの切り出しは２次元コードの位置の検出を行うことであるが、この位置検出には例えば特公平１−３５３８５号公報に見られるようなチェーンコーディングを用いた方法がよく用いられている。
【０００８】
このチェーンコーディングは、図形の輪郭線を求める方法で、図２４（ａ）に示すように、黒画素２４１と白画素２４２の境界を追跡し（２４３）、図形の輪郭線を求め、切り出しを行う。
【０００９】
また特に２次元コード２０のように外側の少なくとも２辺が直線となっている２次元コードの切り出し方法としては特開平７−２３４９１５号公報のようにハフ変換を用いる方法が提案されている。
【００１０】
ハフ変換は、画像中に直線上に並ぶ点を大局的に抽出する方法で、効果的な直線検出手段として知られている。特開平７−２３４９１５号公報ではこのハフ変換を用いて２組の直線を検出し、２次元コードの切り出しを行っている。
【００１１】
図２５（ａ）（ｂ）でハフ変換を用いた直線検出を説明する。画像メモリ上を縦方向に一定の間隔を開けて走査して、エッジ点を見つける。そして求められたエッジ点の座標に対応するサイン曲線をθ（角度）−ρ（距離）平面に引く。例えばエッジ点２５１、２５２、２５３、２５４はθ−ρ平面上に２５６、２５７、２５８、２５９の曲線に変換される。ここでエッジ点２５１、２５２、２５３のように一直線上に並んでいる場合は図２５（ｂ）の点２６０のようにサイン曲線は３本交わる。実際にはθ−ρ平面上は量子化されており、サイン曲線の通る（θ、ρ）の点に１ずつ投票されていく。よって点２６０は３票投じられている。点２６０のように多くの点が投じられている点を見つけることによって直線２５５を検出できる。
【００１２】
上記のように２次元コードの切り出しが行われた後、（３）の処理では切り出された２次元コードの各セルの中心点の位置を求め、各セルの中心点の２値データが抽出される。この時、（１）の処理で２値化がすでに行われているので、セルの中心点の画素の濃度値を読み出すだけでセルの２値データを抽出することができる。
【００１３】
【発明が解決しようとする課題】
従来例であげた２値化方法の課題としては以下のことがあげられる。
【００１４】
第１の固定しきい値による２値化方法では、２値化を正確に行うことが可能なのは画像のコントラストが良く、輝度ムラ等がない場合で、コントラストが悪い場合や照明光の当たり具合により輝度ムラがある場合は正しく２値化できない。また細い線や小さい点は、センサの受光素子にまたがると図２６（ａ）の２２１のように十分な出力が得られない場合があるため、無視されることが多い。
【００１５】
第２の２値化方法は浮動しきい値による２値化をおこなっているため、第１の２値化方法の課題である輝度ムラの問題、または細い線等の欠落の問題も解決される。しかしこの方法でも輝度ムラによりＥｏ以下の黒信号が長く続くような波形の場合正しく２値化できない。つまり黒が画像信号に沿う向きに連続して続き、かつ輝度ムラがあるような領域の２値化は正しくできない。
【００１６】
第３の２値化方法は第１、第２の２値化方法の課題は解決しているが、いったん画像情報を画像メモリにすべて記憶させ、その画像情報すべてに対してシェーディング補正と２値化処理を行うために処理時間が非常にかかるという問題点がある。
【００１７】
また従来の２次元コードの切り出しの課題としては以下のことがあげられる。
【００１８】
前述したチェーンコーディングによる切り出し処理では、図２４（ｂ）のような傷２４４の付いた図形が読み込まれると、図中の矢印２４５で示すように傷の部分を輪郭として追跡してしまい、本来の輪郭と違った輪郭を認識してしまい、正しく切り出しができないという問題点がある。
【００１９】
また前述したハフ変換を用いた切り出しでは、チェーンコーディングによる切り出し処理と異なり、前述したように大局的な直線検出を行っているため、傷等の影響は受けずに直線検出を行うことができる。しかし、ハフ変換による直線検出を行うためには、多くのエッジ点をサイン曲線に変換するため、計算量が多くなり処理時間がかかるという問題点がある。
【００２０】
そこで本発明は、切り出しのための直線分で構成された特徴的なパターンを持つ２次元コードを高速にかつ正確に切り出すことができ、かつセルの２値化を高速かつ正確に行うことができる２次元コードリーダを提供することを目的とする。
【００２１】
【課題を解決するための手段】
この目的を達成するために本発明の第１の２次元コード読み取り装置は、２次元コードから反射した光を受光し画像信号に変換する変換手段と、前記画像信号を画像メモリとして記憶する記憶手段と、前記画像メモリの２以上の情報から求めた差分値に基づいて２次元コードの切り出しを行うコード切り出し手段と、前記コード切り出し手段によって切り出された前記２次元コードの各セルの所定画素の値を２値化するセル２値化手段とを備えたものである。
【００２２】
また、本発明の第２の２次元コード読み取り装置は、セル２値化手段は、２次元コードの各セルの所定画素の画像信号に基づき前記画素の濃度値を求めるセル濃度値抽出手段と、前記セル濃度値抽出手段で求められた濃度値から局所的なしきい値を求める局所しきい値決定手段と、前記セル濃度値抽出手段で求められた濃度値と前記局所しきい値決定手段で求められたしきい値とを比較しセルの２値データを求めるセル２値決定手段とを備えたものである。
【００２３】
また、本発明の第３の２次元コード読み取り装置は、コード切り出し手段は、縦方向及び横方向に画像メモリの走査を行い走査線上にある２次元コードのエッジを検出するエッジ検出手段と、前記エッジ検出手段で求められたエッジの傾きを求めるエッジ傾き検出手段と、前記エッジ傾き検出手段で求められた傾きに従ってエッジを追跡して直線を検出する直線検出手段を備えたものである。
【００２４】
【発明の実施の形態】
上記構成により本発明の第１の２次元コード読み取り装置は、２次元コードの切り出しを行った後に、前記コード切り出し手段によって切り出された前記２次元コードの各セルの所定画素の値を２値化するので、２値化する画素数が大幅に削減できることから、２値化処理にかかる時間が非常に短縮できるものである。
【００２５】
また、本発明の第２の２次元コード読み取り装置は、前記セル濃度値抽出手段で求められた濃度値と前記局所しきい値決定手段で求められたしきい値とを比較しセルの２値データを求めるセル２値決定手段とを備えることにより、輝度ムラの影響を受けないセルの２値化を行うことができる。また、セルの所定画像のみアクセスするために２値化処理にかかる時間が短縮できるものである。
【００２６】
また、本発明の第３の２次元コード読み取り装置は、コード切り出し手段は、縦方向及び横方向に画像メモリの走査を行い走査線上にある２次元コードのエッジを検出するエッジ検出手段と、前記エッジ検出手段で求められたエッジの傾きを求めるエッジ傾き検出手段と、前記エッジ傾き検出手段で求められた傾きに従ってエッジを追跡して直線を検出する直線検出手段を備えることにより、走査線を少なくすることができる、すなわち、画像メモリへのアクセスを少なくできるので、高速に２次元コードの切り出しを行うことができる。
【００２７】
以下に本発明の実施の形態におけるタッチ式２次元コードリーダの構成を図６を用いて説明する。
【００２８】
このタッチ式２次元コードリーダではセンサとしてエリアセンサ９を、アナログデジタル変換手段としてＡ／Ｄコンバータ１１を、演算手段として主回路１０を用いる。
【００２９】
ケース１の先端部に読み取り窓２が形成されている。ケースのヘッド部３内には、例えば複数の発光ダイオード（ＬＥＤ）からなる光源４が配設されており、この光源４から照明光は反射ミラー５に反射して読み取り窓２からケース１の外へ出力され、ラベル６上に印字されている２次元コード７にて乱反射される。そして乱反射された光線は再び読み取り窓２を介してケース１の中へ入射し、レンズ８を介してエリアセンサ９に投影される。
【００３０】
エリアセンサ９は主回路１０から取り込み要求信号を受け取った時、レンズ８を介して投影された２次元情報をアナログ画像信号に変換して出力する。エリアセンサ９から出力された画像信号はＡ／Ｄコンバータ１１によって２５６階調のデジタル画像情報に変換されて画像メモリ１２に記憶される。主回路は画像メモリに記憶した画像情報をプログラムに基づいて処理し、２次元コードにコード化されている情報のデコードを行い、データをホストコンピュータ１３等に送信するようになっている。
【００３１】
主回路の処理の流れを図７を用いて説明する。
【００３２】
取り込み処理（ステップ１）で主回路１０はエリアセンサ９に取り込み要求信号を出し、取り込み要求信号を受け取ったエリアセンサ９は投影されている画像情報を画像信号として出力する。出力された画像信号はＡ／Ｄコンバータ１１を介して画像メモリ１２に記憶される。画像情報すべてエリアセンサ９から出力されたのち、エリアセンサ９から主回路に取り込み完了信号が出力される。
【００３３】
取り込み完了信号を主回路が検出したら、切り出し処理（ステップ２）を行う。切り出し処理は主回路１１より画像メモリ１２の一部を読み出し、２次元コードの位置、向き及び２次元コードを構成しているセルの数を求める。
【００３４】
切り出し処理が成功すれば、セル２値化処理（ステップ３）を行う。セル２値化処理では切り出し処理で求められた２次元コードの位置、向き及び２次元コードを構成しているセルの数から各セルの位置を求めて、そのセルの２値データを画像メモリをアクセスして求める。
【００３５】
セル２値化処理で各セルの２値データが求められれば、次にデータ変換処理（ステップ４）で２値データから決められた規則にもとづいて、アスキーコード列に変換する。この時２値データのエラーが許容エラーを超えており、アスキーコード列への変換が失敗すれば切り出し処理（ステップ２）に戻り、他の２次元コードを検出する。画像メモリ内に２次元コードが検出できなくなったら、取り込み処理（ステップ１）へ戻る。
【００３６】
データ変換処理（ステップ４）が成功すればアスキーコード列を送信（ステップ５）して取り込み処理に戻る。
【００３７】
次に本実施の形態の２次元コードリーダで読み取らせる２次元コードについて説明する。
【００３８】
図８にある２次元コード２０（いわゆる、データマトリックス）はＬ字パターン２１、タイミングセル２２及びデータ領域２３より構成されている。Ｌ字パターン２１は２次元バーコード２０の外側２辺に位置するＬ字型のパターンである。タイミングセル２２は２次元コードのＬ字パターンの他の２辺に位置する。Ｌ字パターンはすべて黒セルによって成り立っており、タイミングセルは黒セルと白セルが交互に並んで成り立っている。データ領域２３はＬ字パターン２１とタイミングセル２２に囲まれて、セルが格子状に並んで構成されている。このデータ領域の白セルと黒セルが２次元コード２０にコード化されたデータを表している。
【００３９】
図９にある２次元コード２４（ＣＯＤＥ１）はセンターパターン２５、垂直参照パターン２６及びデータ領域２７から構成されている。
【００４０】
センターパターン２５は２次元コード２４の中央に位置し、２次元コード２４の水平方向に長い長方形の領域をしめ、水平方向に平行な複数のバー及びスペースが交互に並んでいる。この水平方向の複数本バーの内の一部のバーの両端には垂直方向に短いバーが接している。バー及びスペースの幅はほぼ等間隔であるが、印刷の条件等によりバーとスペースの幅が若干異なる場合もある。センターパターン２５のバーの本数や垂直方向の短いバーの長さによってこの２次元コード２の縦横のセルの数が決定される。また垂直参照パターン２６は２次元コード２４の決められた位置に垂直方向に複数あり、その１つは１組のバーとスペースによって成り立っている。データ領域２７はセンターパターン２５の上下に位置し、データ領域２７の黒セルと白セルが２次元コード２４にコード化されたデータを表している。
【００４１】
（実施の形態１）
図１０は本発明の第１の実施の形態における２次元コードリーダの切り出し手段を説明する流れ図である。以下本発明の第１の実施の形態における２次元コードリーダの切り出し手段を説明する際に、図８の２次元コード２０を使う。
【００４２】
まずはじめに２次元画像領域を縦方向、横方向に走査してエッジ点を検出する。（ステップ３１）走査を行う走査線は一定の間隔だけ開けることにより画像メモリのアクセスを少なくし、処理時間を短くする。
【００４３】
以下にエッジ点の検出方法を図１１により説明する。走査は例えば５１２×５１２の画像で３２ピクセルの幅で縦方向に１５本の走査、横方向に１５本の走査を行う。一本の走査では走査線上の画素の濃度値を順次読み取り、主回路内のメモリに記憶する。この記憶された濃度値からエッジ点を求める。
【００４４】
エッジ点の検出方法を以下に説明する。
【００４５】
図１１（ａ）の走査線ア上の画素の濃度値を順次配列ａ［ｉ］に記憶する。濃度値は０から２５５までの２５６階調の値を取り、値が小さいほど暗く、値が大きいほど明るい。図１１（ｂ）は濃度ａ［ｉ］を表したものである。
【００４６】
ｉの値は配列ａ［ｉ］の要素の番号を表しており、走査線の開始の画素イがｉ＝０に対応している。濃度値ａ［ｉ］から、差分値ｄ［ｉ］は
【００４７】
【式１】
0003567904.tif 000002
【００４８】
で求める。本実施の形態では２画素間隔での差分値を求めたが、この間隔は１画素であってもよいし３画素以上であってもよい。
【００４９】
このように求められた差分値ｄ［ｉ］は図１１（ｃ）のようになる。差分値ｄ［ｉ］が極大となるｉ、及び極小となるｉを求めることにより走査線上のエッジ点が求まる。
【００５０】
図１１（ｃ）で差分値ｄ［ｉ］が極大となる点ス、ソは図１１（ａ）のエッジ点エ、カに対応し、図１１（ｃ）で差分値ｄ［ｉ］が極小となる点シ、セは図１１（ａ）のエッジ点ウ、オに対応する。差分値が極大となる点では濃度値は立ち上がりとなり、走査の方向に向かって黒セル又はバーから白セル又はスペースに変わるエッジ点であり、図１１（ａ）中では黒丸●で表す。また差分値が極小となる点では濃度値は立ち下がりとなり、走査の方向に向かって白セル又はスペースから黒セル又はバーに変わるエッジ点であり、図１１（ａ）中では白丸○で表す。
【００５１】
以上のように走査線上の濃度値から差分値ｄ［ｉ］の極大値と極小値を求めることにより、２種類のエッジ点の座標を求める。
【００５２】
次に、ステップ３１で求められた各エッジ点が局所的な傾きを持っているか否かを判定し、持っていればその傾きを求める（ステップ３２）。
【００５３】
あるエッジ点ａが局所的な傾きを持っているか否かの判断は同種類のエッジをエッジ点ａの近傍に２点検出し、各点ごとにエッジ点ａからの方向を求め、方向が同方向もしくは反対方向であるかどうかを調べる。このエッジ点の局所的な傾きの検出方法は図１２を用いて説明する。
【００５４】
ステップ３１で立ち上がりのエッジ点カが検出されている。エッジ点カの左、右に走査線タに平行な短い走査線チ、ツを引き、その走査線チ、ツ上に立ち上がりのエッジ点テ、トを検出する。走査線チ、ツはエッジ点カの傾きが走査線タに対して４５゜〜１３５゜の角度の時、エッジ点テ、トが検出できるよう、走査線チの開始点を点ラ、終点を点リとし、走査線ツの開始点を点ル、終点をレと決める。このようにしてエッジ点テ、トが検出できれば、次はエッジ点カを始点としてエッジ点テ、トを終点とするベクトルｃ、ｄを求め、その２本のベクトルｃ，ｄの方向成分が等しいかどうかを調べる。ほぼ等しければエッジ点カは局所的な傾きを持っていると判断する。そして、２つのベクトルの方向成分の平均値をエッジ点カの傾きとする。
【００５５】
図１３ではエッジ点の傾きが検出できない例を示す。エッジ点ナの近傍に走査線ニ、ヌを引く。走査線ヌ上には同種類のエッジ点ネを検出することができた。しかし走査線ニ上にはエッジ点を検出できなかった。この場合エッジの傾きの検出は失敗する。また、もし２本の走査線上に同種類のエッジ点を２点検出できた場合でも、ベクトルの方向が同じでなければエッジ点の傾きとして検出しない。エッジ点の傾きが検出できるエッジ点のみを検出することによって、誤った直線分を検出することを少なくし、処理時間を短くすることができる。
【００５６】
なお図１４のようにエッジ点（カ）の近傍に同種類のエッジを近傍に３点以上検出して、エッジ点の方向ベクトルを求めて、方向ベクトルの傾きのばらつきが一定値以下であればエッジ点の傾きとして、これらの平均値を求めてエッジ点の傾きの検出を行ってもよい。
【００５７】
ステップ３２では以上のエッジ点傾き検出をすべてのエッジ点に対して行う。
【００５８】
次にステップ３２でエッジ点の傾きが求められた各エッジ点からエッジ点の傾きの方向に一定間隔毎に同種類のエッジ点を検出していく（ステップ３３）。
【００５９】
図１５でエッジ点カはエッジ点の傾きが検出されている。求められた傾きの方向へエッジ点ハ、ヒ、フとエッジ点を検出する。もし点へのような汚れなどでエッジが汚れておりエッジ点へが検出できない場合、エッジ点フから同方向に２倍の間隔でエッジ点を探索し、エッジ点ホを求める。もしさらにエッジ点ホが見つからない場合、３倍の間隔でエッジ点を探索する。一定間隔以上エッジ点か見つからなければ処理を終える。この処理はエッジ点カから逆方向へも行い、エッジ点ミ、ムと検出する。検出されたエッジ線は直線分に対応づける。
【００６０】
以上の処理をステップ３２で検出されたすべてのエッジ点に対して行う。
【００６１】
次に２次元コード２０の４隅の座標を求める（ステップ３４）。ステップ３３で求められた複数の直線分から図２２の２６１、２６２のような直角に交わる１組の組み合わせを求める。その直線を２辺とする長方形の対辺となる端線２６３、２６４を引き、この２本の各端線と垂直に交わる短い走査線２６５を引き、エッジ２６６を求める。この時２次元コード２０の２辺は白セルと黒セルが交互に並ぶタイミングセルであるのでエッジが検出できる走査線と検出できない走査線に分かれる。検出されたエッジ点を端線２６５、２６６に対応づける。直線分２６１、２６２、２６３、２６４に対応づけられたエッジ点をサンプル点として最小２乗近似法により４本の直線２６７、２６８、２６９、２７０を求める。この４本の直線の４つの交点が２次元コード２０の４隅の点となる。
【００６２】
２次元シンボルの縦横のセル数を求める（ステップ３５）。セル数はタイミングセルの数を数えることにより求めることができる。タイミングセルの数を数えるためには、タイミングセルの上を走査して、そのエッジの数を数えればわかる。２辺のタイミングセルの数を数えることにより、縦方向及び横方向のセルの数を数えることができる。
【００６３】
このように、２次元コード２０の切り出しパターンである２辺の直線を、まず画像メモリを広い間隔で縦横に走査しエッジを求め、次にエッジの傾きを求めてその方向に従って直線を追跡し、最後に最小２乗近似法を用いて検出することにより、従来法のようなハフ変換による直線抽出にくらべて、処理時間が短く高速に２次元コード２０の切り出しができる。また２次元コード２０の切り出しパターンである２本の直線上に汚れがある場合でも、直線上の汚れのない部分のエッジからエッジの傾きを求め、このエッジの傾きにもとづいてエッジを追跡し、汚れのある部分は飛び越えて追跡を続け直線を検出することにより、２次元コードの切り出しが正確にできる。またエッジは従来法のように２値化された画像ではなく、多値の画像情報から直接求められているので輝度ムラ等があっても正確にエッジを抽出ができる。
【００６４】
実施の形態１では２次元コード２０のようにＬ字パターンを持つ２次元コードの切り出しを例に説明したが、同様に４辺がすべてバー（黒セル）であるような２次元コードの検出もできる。この場合４辺のバーはステップ３３ですべて抽出されており、この情報から容易に四隅の座標が検出できるからである。
【００６５】
（実施の形態２）
図１６は本発明の第２の実施の形態における２次元コードリーダの切り出し手段を説明する図である。以下本発明の第２の実施の形態における２次元コードリーダの切り出し手段を説明するために、図９の２次元コード２４を使う。
【００６６】
まず２次元画像領域を縦方向、横方向に走査してエッジを検出する（ステップ４１）。走査を行う走査線は一定の間隔だけあけることにより画像メモリのアクセスを少なくし、処理時間を短くする。
【００６７】
次にステップ４１で求められたエッジの座標情報とエッジの種類（○又は●）の情報を元にして、センターパターンを横切った部位であるかどうかを判定する（ステップ４２）。２次元コード２４はセンターパターンを走査線が横切っている場合、図１７のように一定周期で２種類のエッジが交互に現れる。この時、２次元コードの印刷条件によりバーとスペースが同じ太さでない場合がある。そこで、本実施の形態では同じ種類のエッジの間隔が等しくなっているかで、センターパターンを横切る走査線上のエッジの並びであることを判断し、その各エッジの座標及びそのエッジの種類を記憶する。
【００６８】
図１７のエッジ点列の場合、点４２と点４４の距離をｄ１、点４３と点４５の距離をｄ２、点４４と点４６の距離をｄ３とするとｄ１、ｄ２、ｄ３がほぼ等しい距離であればセンターパターンを横切った部位であると認識する。
【００６９】
次にステップ４２で求められたエッジ点列４１と対応づけられるエッジ同士を結ぶベクトルの傾きが等しくなるエッジ点列４８を近傍に検出し、センターパターンの傾きを求める（ステップ４３）。ステップ４２で求められたエッジ点列の近傍に走査線４０と平行な短い走査線４７を引き、ステップ４１と同様の方法でエッジを求めていく。この求められたエッジ点とステップ４２で求められたエッジ点列のエッジ点を１対１で対応づけていく。エッジの対応づけはもっとも位置が近く同種類のエッジに対して行う。対応づけられたエッジを結んだ線のベクトルをエッジの傾きベクトル（ｔ、ｕｉ）とする。ｉはエッジの番号とする。図１８ではエッジは５点あるので５本の傾きベクトルが求められる。これらｕｉの平均値からセンターパターンの方向が求められる。なお本実施の形態ではｕｉの平均値によりセンターパターンの方向を求めているが、ｕｉのヒストグラムを求め、頻度が最も多い値をセンターパターンの方向としてもよい。またこの時ｕｉのばらつきが大きい場合は検出失敗とし、再度、ステップ４２から処理を行ってもよい。
【００７０】
傾きベクトルを求めるための走査線の開始点（ａ，ｂ１）と終了点（ａ，ｂ２）は次のように求められる。まずステップ４２で求められた複数のエッジの座標からバー間隔の平均値ｔｂとスペースの間隔の平均値ｔｓを求める。ｔｂとｔｓの内小さい方を走査線４０と走査線４７の間の間隔ｔとする。ステップ４２で求められたエッジの中で最も上部の座標を（ｍ，ｎ１）、最も下部の座標を（ｍ，ｎ２）とする。このとき（ａ，ｂ１）（ａ，ｂ２）は
【００７１】
【式２】
0003567904.tif 000003
【００７２】
で求められる。
【００７３】
ｔの値が大きい方がエッジの方向は精度よく求めることができる。しかしながらあまりｔの値が大きすぎると走査線１上のエッジと走査線２上のエッジの対応づけができなくなる。ｔ＜（ｔｂ＋ｔｓ）／２であればよい。上記の方法でｔを決定すると、回転角が４５度となったとしても、エッジの対応づけはできる。
【００７４】
次にステップ４２で求められた複数のエッジの座標からステップ４３で求められたエッジの傾きベクトル（ｔ，ｕ）に従って、同種類のエッジを追跡し、センターパターンの水平方向のバーとスペースの境界線上のエッジを求めていく（ステップ４４）。以下に具体的な処理について説明する。
【００７５】
図１９はステップ４４のエッジ追跡を表すものである。５０はステップ２で求められたエッジ点列である。このエッジ点列から走査線をｔ２だけ水平方向に移動させて、走査線上のエッジを検出していく。エッジの検出はステップ１で説明した方法と同様の方法を使えばよい。走査線上にエッジを検出した後、求められたエッジとエッジ点列５０のエッジをエッジの傾き（ｔ１，ｕ）をもとにして対応させる。この後、さらに走査線をｔ２だけ右方向に移動させて、走査線上のエッジを検出し、１つ前の走査線上のエッジと対応させていく。対応づけができるエッジが２つ以上の場合は追跡を行い、２つ以上ない場合は右方向の追跡を終える。エッジ点列５０の左方向に対しても同様の処理を行う。
【００７６】
このようにエッジ追跡を行うことにより、図２０のようにセンターパターン上に汚れ５１がある場合でも、正しくエッジ点を追跡できる。
【００７７】
対応づけられたエッジ点はセンターパターンの水平方向のバーとスペースの境界線上の点となっている。
【００７８】
求められた境界線上のエッジ点をサンプル点として最小２乗近似法を用いて、線分を精度良く求める。
【００７９】
ステップ４５では、ステップ４４で求められたセンターパターンの水平方向のバーとスペースの境界線の端線の延長方向にエッジを検出しセンターパターンの位置、回転角を求める。またセンターパターンの境界線の本数の情報から２次元コード２４の縦方向及び横方向のセルの数を求めることができる。
【００８０】
このように、まず画像メモリを広い間隔で縦横に走査してエッジを求め、次に同種類のエッジが等間隔に並ぶエッジ点列を検出し、さらに検出されたエッジ点列の近傍にエッジを検出することによりセンターパターンの傾きを求め、このセンターパターンの傾きをもとにしてエッジを追跡して行き、最後に最小２乗近似法を用いて複数の直線を検出することによりセンターパターンの切り出しを行うことにより、従来法のようなハフ変換による直線抽出に比べて、処理時間が短く高速に２次元コード２４の切り出しができる。
【００８１】
また２次元コード２４のセンターパターンに汚れがある場合でも、汚れのない部位でセンターパターンの傾きを求めて、直線検出をするため２次元コード２４の切り出しを正確に行うことができる。またエッジは従来法のように２値化された画像ではなく、多値の画像情報から直接求められているので輝度ムラ等があっても正確にエッジを抽出できる。
【００８２】
なお実施の形態２ではステップ４２でエッジの対応づけを行い、傾きを求めていたが、例えば図１８の走査線４０上のエッジ点列を基本パターンとし、走査線４７上に基本パターンに最もマッチングの度合いが大きいパターンを検出することによってセンターパターンの傾きを求め、この傾きにしたがって基本パターンにマッチングの度合いが高いエッジ点列を順次検出していく方法でもよい。この方法はパターンマッチングを用いた方法であるので汚れや傷に強く高精度な切り出しを行うことができる。
【００８３】
（実施の形態３）
本発明の第３の実施の形態の２次元バーコードリーダにおける切り出し処理の実施の形態について、２次元コード２４を例にして、図７、図１６及び図２１を用いて説明する。
【００８４】
まず、一回目の取り込み処理（ステップ１）を行い、その後切り出し処理（ステップ２）の中で図２１の走査線６０によってエッジ検出処理（ステップ４１）及び特徴エッジパターン検出処理（ステップ４２）を行う。しかしながら、この例のシンボルでは、汚れ６２があり同種類のエッジの間隔が一定となる部位を検出することができないので、再度取り込み処理を行い、その後切り出し処理を行う。切り出し処理の中で走査線の位置をかえて６１の走査線によって再度エッジ検出処理を行う。この時走査線の位置が変わったため、特徴エッジパターン検出処理で同種類のエッジの間隔が一定となる部位６３を検出でき、センターパターン６４を検出することができる。このように走査線の位置を移動させることによって、走査線間隔を大きくしたままで、汚れコードや小さいコードを確実に読み取ることができる。
【００８５】
このように上記方法を用いることにより、傷のあるコードや小さいコードは数回のデコード処理により確実に読み取ることができる。
【００８６】
（実施の形態４）
本発明の第４の実施の形態の２次元コードリーダについて説明する。
【００８７】
本実施の形態では切り出し手段によって２次元コードの４隅の座標、又は２次元コード２４の場合ではセンターパターンの４隅の座標及び２次元コードの縦方向、横方向のセル数が求められ、これらの情報をもとに、セル２値化手段によってセルの２値データが求められる。
【００８８】
従来法では切り出し手段によって２次元コードの切り出しを行う前に全画素に対して２値化が行われており、切り出し手段によって得られた情報をもとに各セルの中心点の画素を決定し、その画素に当たる画像メモリのアドレスをアクセスすることによってセル２値データを求めていた。
【００８９】
しかし、本実施の形態の２次元コードリーダでは高速でかつ輝度ムラに影響しない切り出し手段を実現するために、多値の画像情報から２次元コード切り出しを行っている。そのために各セルの中心点の画素に当たる画像メモリのアドレスをアクセスしても、画素の多値の濃度値が得られるだけである。そこで何らかの方法で得られた各セルの中心画素の濃度値の２値化を行う必要がある。
【００９０】
各セルの中心点の画素の濃度値を２値化するためには、例えば切り出された領域内の全画素の濃度値の最大値と最小値の平均値をしきい値として、各セルの中心画素を２値化する方法が考えられる。
【００９１】
しかし、この方法では領域内の全画素をアクセスするために、処理に時間がかかる。また照明の当たり具合の影響で輝度ムラ等が発生した場合、正しく２値化できない。
【００９２】
そこで本実施の形態の２次元コードリーダのセル２値化手段では、２値化のしきい値をセルの中心点の画素の濃度値のみから求めることによって処理時間を短くする。また２次元コードの領域を小領域に分割し、その各領域についての局所的なしきい値を求め、セルの２値データを求めることによって輝度ムラの影響を受けにくくする。
【００９３】
セル２値化の処理の流れを図１によって説明する。
【００９４】
切り出し処理によって得られた情報は図２のように四隅の点１４、１５、１６、１７の位置と２次元コードの縦横のセル数である。この情報から各セル１８の中心画素１９の位置を求めて、その位置の画素の濃度値を順次記憶する（ステップ１１）。
【００９５】
次に切り出された２次元コードを図３のように縦横数セル（ここでは２×２）ずつから成る小領域に分割して、小領域ごとの濃度値の最大値ｍａｘと最小値ｍｉｎを求める（ステップ１２）。これはステップ１１で求められた各セルの中心画素の濃度値から求める。
【００９６】
そして、ステップ１２で求められた最大値ｍａｘと最小値ｍｉｎをもとにして、小領域のしきい値ｔｈ及び振幅ｄを求める。（ステップ１３）。
【００９７】
各小領域のしきい値ｔｈはその小領域のセルの中心点の画素の濃度値の最大値ｍａｘと最小値ｍｉｎから求める。また振幅ｄはｍａｘとｍｉｎの差から求める。
【００９８】
隣接する小領域の振幅ｄの値を比較して、振幅ｄの値が周りに比べて小さい小領域を検出する。次に検出された小領域のしきい値ｔｈの値を隣接する複数の小領域のしきい値ｔｈの平均値から求める。
【００９９】
ここで小領域の振幅ｄを隣接の小領域の振幅ｄと比較するのは小領域のセルすべてが黒セルまたは白セルであるかどうかを判断するためのものである。小領域のセルがすべて黒または白セルであると小領域で求められたしきい値では正しく２値化を行うことができない。よって、このような小領域のしきい値は隣接する小領域の中で白セル、黒セルの両方のセルを含む小領域のしきい値を用いて求められることにより正確な２値化を行うことができる。
【０１００】
最後に、各セルの中心点の画素の濃度値をそのセルを含む小領域のしきい値ｔｈによって２値化する（ステップ１３）。
【０１０１】
実施の形態４の具体例を図４を用いて説明する。ここでは小領域は２×１セルとする。また注目小領域に隣接する小領域を左右２つの領域とする。
【０１０２】
図４（ａ）の４０は２次元コードのセルの中心画素を通る走査線上の画素の濃度値を表したものである。この波形はベースが右下がりのシェーディングが発生しており、固定のしきい値で正しく２値化できない。
【０１０３】
本実施の形態の方法ではまずステップ１１でセルの中心画素の濃度値４１を求める。次にステップ１２で各小領域の最大値ｍａｘと最小値ｍｉｎを求める。そしてステップ１３でステップ１２より求められた値から最大値ｍａｘと最小値ｍｉｎの差ｄ４５及び最大値ｍａｘと最小値ｍｉｎの平均値ｔｈ４４を求める。ステップ１４でもし隣接する２つの小領域のｄの最大値より注目小領域のｄが２分の１以下であれば、この小領域は黒セルのみ、又は白セルのみであると判断し、４６、４７のようにその小領域をラベルづけし、ラベルづけされた小領域のｔｈの値を４６のようにその小領域の両隣の小領域のｔｈの内挿によって求める。もし４７のように２つの小領域が連続してラベルづけされている場合は両隣の小領域のｔｈの内挿によってｔｈを補間する。その結果、図中４３で示す値となる。なお、この値は図４（ａ）では４２で示す値となる。
【０１０４】
なお、ここでは小領域は２×１セルの領域としたが、小領域を構成するセル数はいくらでもよい。また１セルに対応する画素数によって小領域を構成するセル数を変えてもよい。また各小領域は重複してもよい。また上記の説明では最大値ｍａｘと最小値ｍｉｎの差ｄの比較には右と左の小領域で行ったが、上下左右の４方向で行ってもよい。
【０１０５】
このように各セルの中心点の画素の濃度値を求め、その中心点の画素の濃度値のみから局所的なしきい値を求め、各セルの中心点の画素の濃度値と局所的なしきい値を比較し２値化を行うことによって、処理時間が短く、かつ輝度ムラに影響されないセルの２値化処理を行うことができる。
【０１０６】
（実施の形態５）
本発明の第５の実施の形態では切り出された２次元コードの領域に輝度ムラがない場合または白黒のコントラストが強い場合には一定のしきい値によって２値化を行い、輝度ムラがあり、かつ白黒のコントラストが弱い場合は第１の手段と同様の方法で２値化を行うセル２値化を行う。
【０１０７】
図５は本発明の第５の実施の形態のセル２値化処理の流れ図である。ステップ１１の後、濃度値のヒストグラム（濃度分布）を求める（ステップ２１）。ステップ１１ではセルの中心点の画素の濃度値のみを求めているため、もし輝度ムラがなければ濃度分布は完全に２つの山に分かれるはずである。またもし輝度ムラがある場合でも白黒のコントラストが強ければ２つの山に分かれるはずである。もしこのような分布をしている場合は固定のしきい値で２値化できる。
【０１０８】
そこで輝度分布が完全に２つの山に分かれている場合は２つの山の間の濃度値をしきい値とし（ステップ２３）、求められたしきい値により濃度値を２値化する。
【０１０９】
輝度分布が２つの山に分かれていない場合は、ステップ１２に進み、第１の手段と同様の方法で２値化を行う。
【０１１０】
このように輝度分布より２値化の方法を変えることにより、切り出された２次元コードの領域に輝度ムラが無い、または白黒のコントラストが強い場合はより高速に２値化を行うことができ、また輝度ムラがある場合は第１の手段と同様の方法により２値化を行うことによって輝度ムラによらず、高速なセル２値化が実現できる。
【０１１１】
以上説明してきたそれぞれの実施の形態によれば、切り出し手段によって求められた２次元コードの位置、回転角及びセルの数から求められるセルの中心点の画素の濃度値のみから局所的なしきい値を求め、２値化を行っているために、セル２値化手段の処理時間を短くし、かつ輝度ムラの影響を受けずに２値化を行うことができる。
【０１１２】
また、セルの中心点の画素の濃度値を求めた後、濃度値のヒストグラムを作り、その分布により輝度ムラがないと判断されれば、その濃度値より１つのしきい値を求めすべてのセルの２値化を行うため、さらにセル２値化手段の処理時間を短くすることができる。また、輝度ムラがあると判断されれば局所的なしきい値を求め、２値化を行うことにより輝度ムラの影響を受けずにセル２値化を行うことができる。
【０１１３】
また、縦横の走査線の間隔を広く開けることができるため画像メモリのアクセス数が少なくなり、かつ切り出し処理の前に画像を２値化する必要がないため、高速に２次元コードの切り出しを行うことができる。また、走査線上の画素の濃度値の変化によって切り出しを行うために、輝度ムラの影響を受けずに２次元コードの切り出しを行うことができる。
【０１１４】
また、走査線上のエッジが汚れ等でなくなっている場合でも走査線を移動させることにより確実に切り出しを行うことができる。
【０１１５】
【発明の効果】
以上の説明から明かなように、本発明の第１の２次元コード読み取り装置は、２次元コードの切り出しを行った後に、前記コード切り出し手段によって切り出された前記２次元コードの各セルの所定画素の値を２値化するので、２値化する画素数が大幅に削減できることから、２値化処理にかかる時間が非常に短縮できるものである。
【０１１６】
また、本発明の第２の２次元コード読み取り装置は、前記セル濃度値抽出手段で求められた濃度値と前記局所しきい値決定手段で求められたしきい値とを比較しセルの２値データを求めるセル２値決定手段とを備えることにより、輝度ムラの影響を受けないセルの２値化を行うことができる。また、セルの所定画像のみアクセスするために２値化処理にかかる時間が短縮できるものである。
【０１１７】
また、本発明の第３の２次元コード読み取り装置は、コード切り出し手段は、縦方向及び横方向に画像メモリの走査を行い走査線上にある２次元コードのエッジを検出するエッジ検出手段と、前記エッジ検出手段で求められたエッジの傾きを求めるエッジ傾き検出手段と、前記エッジ傾き検出手段で求められた傾きに従ってエッジを追跡して直線を検出する直線検出手段を備えることにより、走査線を少なくすることができる、すなわち、画像メモリへのアクセスを少なくできるので、高速に２次元コードの切り出しを行うことができる。
【図面の簡単な説明】
【図１】本発明の第４の実施の形態におけるセル２値化手段の流れ図
【図２】同セルの中心の画素の説明図
【図３】同２×２の小領域の説明図
【図４】（ａ）は同しきい値の求め方の第１の説明図
（ｂ）は同しきい値の求め方の第２の説明図
【図５】本発明の第５の実施の形態のセル２値化処理の流れ図
【図６】本発明の実施の形態におけるタッチ式２次元コードリーダの構成図
【図７】同２次元コードリーダの処理の流れ図
【図８】２次元コードラベル（データマトリックス）を示す図
【図９】２次元コードラベル（コード１）を示す図
【図１０】本発明の第１の実施の形態における２次元コードリーダの切り出し手段を説明する流れ図
【図１１】（ａ）は同エッジ点の検出の走査線を示す図
（ｂ）は同走査線上の濃度値を説明する図
（ｃ）は同差分値を示す図
【図１２】同エッジ点の傾き検出手段について説明する第１の図
【図１３】同エッジ点の傾き検出ができない例を示す図
【図１４】同エッジ点の傾き検出手段について説明する第２の図
【図１５】同直線検出について説明する図
【図１６】本発明の第２の実施の形態における２次元コードリーダの切り出し手段を説明する流れ図
【図１７】同特徴エッジパターン検出について説明する図
【図１８】同センターパターンの傾き検出について説明する図
【図１９】同エッジ追跡の説明図
【図２０】同センターパターンの汚れについて説明する図
【図２１】本発明の第３の実施の形態における走査の説明図
【図２２】本発明の第１の実施の形態の２次元コード２０の４隅の点を求め方の説明図
【図２３】従来のソフトによる２値化方法の流れ図
【図２４】（ａ）は従来のチェーンコーディングの説明図
（ｂ）は従来のチェーンコーディングが正常に読み込みできないことを示す説明図
【図２５】（ａ）は従来のハフ変換の第１の説明図
（ｂ）は従来のハフ変換の第２の説明図
【図２６】（ａ）は従来の２値化のしきい値の説明図
（ｂ）は固定しきい値による２値化の回路を示す図
（ｃ）は浮動しきい値による２値化回路を示す図
【符号の説明】
１  ケース
２  読み取り窓
３  ヘッド部
４  光源
５  反射ミラー
６  ラベル
７  ２次元コード
８  レンズ
９  エリアセンサ
１０  主回路
１１  Ａ／Ｄコンバータ
１２  画像メモリ
１３  ホストコンピュータ
【図１】
0003567904.tif 000004
【図２】
0003567904.tif 000005
【図３】
0003567904.tif 000006
【図４】
0003567904.tif 000007
【図５】
0003567904.tif 000008
【図６】
0003567904.tif 000009
【図７】
0003567904.tif 000010
【図８】
0003567904.tif 000011
【図９】
0003567904.tif 000012
【図１０】
0003567904.tif 000013
【図１１】
0003567904.tif 000014
【図１２】
0003567904.tif 000015
【図１３】
0003567904.tif 000016
【図１４】
0003567904.tif 000017
【図１５】
0003567904.tif 000018
【図１６】
0003567904.tif 000019
【図１７】
0003567904.tif 000020
【図１８】
0003567904.tif 000021
【図１９】
0003567904.tif 000022
【図２０】
0003567904.tif 000023
【図２１】
0003567904.tif 000024
【図２２】
0003567904.tif 000025
【図２３】
0003567904.tif 000026
【図２４】
0003567904.tif 000027
【図２５】
0003567904.tif 000028
【図２６】
0003567904.tif 000029