(57)【要約】【課題】文書や図表とともに任意の位置にある任意の大きさの一次元／二次元コードの正しい認識を可能とする。【解決手段】コード種類判別方法において、入力画像データを矩形ブロック単位で選択するブロック選択過程と、選択されたブロックが所定の条件を満たしているか否かを判定するブロック判別過程と、該所定の条件を満たすブロックに含まれるコードの種類を判別するコード判定過程とを備える。【選択図】図１
2008102952.tif 000002
【特許請求の範囲】
【請求項１】
セル化されたデータが二次元状に配置された二次元コードの境界検出方法であって、
入力画像データを走査し、白セルの連続長を検出する第１の白連続長検出過程と、
該第１の白連続長と交差する方向に入力画像データを走査し、該第１の白連続長と交点を持ち、かつ所定の長さを超える白セルの連続長を検出する第２の白連続長検出過程と、
該第１の白連続長と第２の白連続長との交点をコード境界位置として検出する境界検出過程とを備えることを特徴とするコード境界検出方法。
【請求項２】
前記第１の白連続長検出過程において、あらかじめ特定されたコードの位置に対応してコード内部の点から上、下、左、または右の方向に入力画像データを走査し、
前記境界検出過程において、上、下、左、または右のコード境界を検出することを特徴とする請求項１記載のコード境界検出方法。
【請求項３】
前記コード境界検出方法において、前記セルの幅を検出するセル幅検出過程をさらに備え、
前記白セルの連続長の検出において、該検出されたセル幅を基準として連続長を決定することを特徴とする請求項１記載のコード境界検出方法。
【請求項４】
前記セル幅検出過程において、
あらかじめ特定されたコードの位置に対応して、コード内部の点から上、下、左、または右の方向に入力画像データを走査し、白セルの連続長、および／または黒セルの連続長の長さの頻度を示すヒストグラムを作成する過程と、
該ヒストグラム上で所定の値以上の頻度を持つ連続長の中で、最小の連続長の長さをセル幅として決定する過程とを備えることを特徴とする請求項３記載のコード境界検出方法。
【請求項５】
前記コード境界検出方法において、前記白セルの連続長の検出において使用される閾値の決定過程をさらに備え、
セルに対する階調値が該閾値以上であるセルを白セルとして検出することを特徴とする請求項１記載のコード境界検出方法。
【請求項６】
前記第１の白連続長検出過程において、
前記入力画像データの走査にあたって、ある一定距離の走査毎に前記閾値決定過程を繰り返し、
該繰り返しによって更新された閾値以上であるセルを白セルとして検出することを特徴とする請求項５記載のコード境界検出方法。
【請求項７】
前記閾値決定過程において、
ある一定範囲内のセルに対する階調値の頻度を示すヒストグラムを作成する過程と、
該ヒストグラムにおいて階調値の高い側である一定値以上の頻度を持つピークに対応する第１の階調値を求める過程と、
階調値の低い側である一定値以上の頻度を持つピークに対応する第２の階調値を求める過程と、
該第１の階調値と第２の階調値の平均値を閾値として決定する過程とを備えることを特徴とする請求項５または６記載のコード境界検出方法。
【請求項８】
前記白セルの連続長の検出において、注目セルと周囲のセルに対する階調値を比較し、階調値の差がある値以上である時、階調値の大きなセルを白セルとして検出することを特徴とする請求項１記載のコード境界検出方法。
【請求項９】
セル化されたデータが二次元状に配置された二次元コードの境界を検出する計算機によって使用される記憶媒体であって、
入力画像データを走査し、白セルの連続長を検出する第１の白連続長検出ステップと、
該第１の白連続長と交差する方向に入力画像データを走査し、該第１の白連続長と交点を持ち、かつ所定の長さを超える白セルの連続長を検出する第２の白連続長検出ステップと、
該第１の白連続長と第２の白連続長との交点をコード境界位置として検出する境界検出ステップとを計算機に実行させるプログラムを格納した計算機読出し可能可搬型記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一次元バーコードや二次元コードの認識方法に係り、文書や図表と共に一次元／二次元コードが配置された電子画像データや、これらが印刷された紙面をスキャナやＣＣＤカメラなどの画像読み取り装置によって読み取った画像データから、一次元／二次元コードの有無や、その位置、種類などを検出するコード種類判別方法、および二次元コードのコード境界を正確に検出するコード境界検出方法に関する。
【背景技術】
【０００２】
従来から一次元のバーコードが広く使用されている。この一次元バーコードでは、コードを形成する直線としての黒バーや白バーに直交する方向の１ライン分のデータがあれば、バーコードデータの認識を行うことができる。このため読取装置としてレーザラインスキャナや、ＣＣＤラインセンサのように１ライン分のデータを取得する装置が広く用いられている。また近年、このような一次元バーコードよりも多くの情報を埋め込むことができる二次元コードが普及している。二次元コードでは、コード全体の二次元配列データがなければコードを正しく認識することができず、このため読み取り装置としてデジタルカメラやイメージスキャナのような画像読み取り装置が用いられている。また１つの読取装置で一次元コードと二次元コードの両方を自動的に認識する画像読み取り装置も実用化されつつある。
【０００３】
また一次元／二次元コードの普及に伴って、これまでのように専用のラベルに印刷されたコードを読み取るだけでなく、文書や図表と共に任意の位置に任意の大きさでコードが印刷されることも多くなっている。このように文書や図表と共に任意の位置に任意の大きさの一次元／二次元コードが配置された場合、デジタルカメラやイメージスキャナを用いて読み取りを行うと、一次元／二次元コードに加えて文字や図表の一部も画像データとして取り込まれる可能性が非常に高い。
【０００４】
このような場合には一次元／二次元コードの位置を検出し、コードの範囲のみを抽出しなければコードを正しく認識できない。また一次元コードと二次元コードとでは認識の方法が全く異なるため、あらかじめ画像データに存在するコードが一次元コードであるか、二次元コードであるかがわかっていなければ、その両方に対する認識処理を順番に適用することになり、処理に時間がかかる。さらに二次元コードに対しては、その境界の位置を正しく特定し、コード領域全体を抽出しなければ認識処理することができない。
【０００５】
このように、例えば一次元コードに対する認識処理としてのデコード処理に失敗した後に、画像全面に対して二次元コードのデコード処理を行う場合には、元々遅くて重いデコード処理を２回行うことになる。また一次元コードのデコード処理では、例えば取得画像の水平方向にコードが存在すると仮定して処理を行い、その処理に失敗するとコードが９０°回転した垂直方向に存在するものとして処理を行う必要があり、さらに時間がかかるという問題点があった。
【０００６】
このような一次元／二次元コードの認識に関する従来技術として次の４つの文献がある。
【特許文献１】特開２００１−３０７０１４号「二次元コード抽出方法」
【特許文献２】特開２０００−２００３２１号「２次元バーコードを場所検知し及び読取るための方法」
【特許文献３】特開平８−１８０１２５号「２次元コード読取装置」
【特許文献４】特開平７−２５４０３７号「二次元コード」
【０００７】
特許文献１には、文字やその他の画像が含まれた文書から、黒画素率の分布などを求めて、二次元コードと思われるブロックを検出し、そのようなブロックが連続している領域を二次元コード領域として抽出する技術が開示されている。
【０００８】
特許文献２には、コーナービットを含まない、印刷媒体上に印刷された境界がなくクロックのない２次元バーコードの形式でデジタル的に符号化された情報を複号化する技術が開示されている。
【０００９】
特許文献３、および４には、読み取り精度が高い二次元コードと、その読み取り装置が開示されており、二次元コードの検出には３個の位置決め用シンボルを用い、特許文献３では、その位置決めシンボルの検出をハードウェア的に行う技術が開示されている。
【００１０】
しかしながら、特許文献１と特許文献２では、二次元コードだけの読み取りを対象としており、文書や図表と共に任意の位置に任意の大きさの一次元／二次元コードが配置されている場合には特に一次元コードの検出ができないという問題点があった。
【００１１】
また特許文献３と４では、二次元コードに含まれる位置決め用シンボルの検出によってコードの位置やコード領域の検出が行われているが、この方法では入力機器の光学解像度が低い場合や、光学歪み、ピンぼけが発生した場合に、画像内の位置決め用シンボルの形状が劣化し、変形するためにこのシンボルを検出できず、図表や文字が配置された画像データの中から正確に二次元コードの抽出を行うことができないという問題点があった。
【００１２】
図２７はこのような位置決め用シンボルを利用したコード領域抽出方法の従来例の説明図である。図に示すようにコード領域の左上、左下、および右上に位置決め用シンボルが存在する二次元コードでは、この位置決め用シンボルの検出によってコード領域を抽出することができるが、光学解像度が低い場合などは位置決め用シンボルを検出できないという問題点があった。
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明の課題は、上述の問題点に鑑み、文書や図表と共に任意の位置に任意の大きさの一次元／二次元コードが配置されている場合に、一次元／二次元コードの位置を検出するだけでなく、一次元コードと二次元コードのいずれであるかというコードの種類を検出すると共に、一次元コードの場合にはその回転の有無を同時に検出することである。
【００１４】
また本発明の課題は、二次元コードのコード境界を正しく検出して、コード領域全体を精度よく抽出可能とすることである。
【課題を解決するための手段】
【００１５】
本発明のコード境界検出方法は、セル化されたデータが二次元状に配置された二次元コードの境界検出方法であり、第１の白連続長検出過程、第２の白連続長検出過程、および境界検出過程を少なくとも備える。
【００１６】
第１の白連続長検出過程は、入力画像データを走査し、白セルの連続長を検出するものであり、第２の白連続長検出過程は、第１の白連続長と交差する方向に入力画像データを走査し、該第１の白連続長と交点を持ち、かつ所定の長さを超える白セルの連続長を検出するものである。境界検出過程は、第１の白連続長と第２の白連続長との交点をコード境界位置として検出するものである。
【００１７】
発明の実施の形態においては、第１の白連続長検出過程においてあらかじめ特定された
コードの位置に対応して、コード内部の点から上、下、左、または右の方向に入力画像データを走査し、境界検出過程において上、下、左、または右のコード境界を検出することもできる。
【００１８】
また発明の実施の形態においては、セルの幅を検出するセル幅検出過程をさらに備え、白セルの連続長をそのセル幅を基準として決定することもできる。そしてそのセル幅検出過程が、あらかじめ特定されたコードの位置に対応してコード内部の点から入力画像データを走査し、白セルの連続長、および／または黒セルの連続長の長さの頻度を示すヒストグラムを作成する過程と、そのヒストグラム上で所定の値以上の頻度を持つ連続長の中で最小の連続長の長さをセル幅として決定する過程とを備えることもできる。
【００１９】
さらに実施の形態においては、白セルの連続長の検出において使用される閾値の決定過程をさらに備え、セルに対する階調値がその閾値以上であるセルを白セルとして検出することもでき、また例えば第１の白連続長検出過程において入力画像データの走査にあたり、ある一定距離の走査毎に閾値決定過程を繰り返し、その繰り返しによって更新された閾値以上の階調値を持つセルを白セルとして検出することもできる。
【００２０】
そして閾値決定過程においては、一定範囲内のセルに対する階調値の頻度を示すヒストグラムを作成する過程と、そのヒストグラムにおいて階調値の高い側にあるピークに対応する第１の階調値、階調値の低い側でのピークに対応する第２の階調値を求める過程と、第１の階調値と第２の階調値の平均値を閾値として決定する過程とを備えることもできる。
【００２１】
さらに実施の形態においては、白セルの連続長の検出において注目セルと周囲のセルに対する階調値を比較し、階調値の差がある値以上である時、階調値の大きなセルを白セルとして検出することもできる。
【００２２】
実施の形態において、入力画像データを矩形ブロック単位で選択するステップと、選択されたブロックが所定の条件を満たしているか否かを判定するステップと、所定の条件を満たすブロック内に含まれるコードの種類を判定するステップとを計算機に実行させるプログラムを格納する計算機読出し可能可搬型記憶媒体を用いることもでき、このプログラムはコード種類判定のステップにおいて一次元コードと判定されたコードが９０°回転した状態にあるか、否かを判定する回転検出ステップをさらに計算機に実行させることもできる。
【００２３】
またセル化されたデータが二次元状に配置された二次元コードの境界検出を行う計算機によって使用される記憶媒体として、入力画像データを走査し、白セルの連続長を検出する第１の白連続長検出ステップと、その第１の白連続長と交差する方向に入力画像データを走査し、該第１の白連続長と交点を持ち、かつ所定の長さを超える白セルの連続長を検出する第２の白連続長検出ステップと、第１の白連続長と第２の白連続長との交点をコード境界位置として検出するステップとを計算機に実行させるプログラムを格納した計算機読出し可能可搬型記憶媒体を用いることもできる。
【発明の効果】
【００２４】
本発明のコード種類判別方法によれば、一次元／二次元コードと文書や図表が混在する場合にも、一次元／二次元コードの位置が自動検出されるだけでなく、その種類が一次元コードと二次元コードのいずれであるか、また一次元コードの場合にはその回転の有無が自動検出されるため、その後の認識処理においてコードの種類や特性に応じた最適の方法を自動的に選択することができ、一次元／二次元コードの読み取り処理時間の短縮や、認識精度の向上を実現することができる。
【００２５】
また本発明のコード境界検出方法によれば、光学解像度、光学歪み、ピンぼけなどの影響をほとんど受けることがないクワイエットゾーンを検出することにより、正確に二次元コードの境界を検出することができ、前述のコード種類判別方法と組み合わせることによって、一次元／二次元コードの認識処理効率の向上に寄与するところが大きい。
【発明を実施するための最良の形態】
【００２６】
図１は、本発明のコード種類判別方法の原理説明図である。同図において本発明のコード種類判別方法は、入力画像データを矩形ブロック単位で選択するブロック選択過程１と、選択されたブロックが所定の条件を満たしているか否かを判定するブロック判別過程２と、所定の条件を満たすブロック内に含まれるコードの種類を判定するコード判定過程３とを備える。そして判定されたコードの種類などは結果出力過程４によって出力される。
【００２７】
発明の実施の形態においては、コード判定過程においてコードの種類として一次元コードと二次元コードの区別を判定することもでき、また一次元コードと判定された時には、その一次元コードが９０°回転した状態にあるか否かを判定する回転検出過程をさらに備えることもできる。
【００２８】
また実施の形態において、ブロック判別過程における所定の条件として、ブロック内の画素の階調値の分散が所定の範囲内にあることを判定することもでき、また所定の条件としてブロック内の黒画素と白画素の比率が所定の範囲内にあることを判定することもできる。
【００２９】
さらに実施の形態においては、ブロック判別過程２、および／またはコード判定過程３において前述の所定の条件、および／またはコード種類判定条件としてブロック内の水平方向、および／または垂直方向のライン上で画素の階調値が急変するエッジの個数が所定の範囲内にあることを判定することもでき、またブロック内の２本以上の水平ライン相互間、および／または２本以上の垂直ライン相互間で画素の階調値の相関が所定の範囲内にあることを判定することもできる。
【００３０】
まず、本発明のコード種類判別方法を第１の実施形態として説明する。図２は第１の実施形態としてのコード種類判別方法が適用されるコードの種類としての一次元コードと二次元コードの説明図である。一次元コードは異なる太さや間隔をもつ平行な直線の組合せによるコードであり、二次元コードはデータがセル化されて二次元状に配置されたコードであり、１つのセルは一般に複数の画素に対応する。図の二次元コードはクイックレスポンス（ＱＲ）コードと呼ばれる二次元コードであり、コード領域の右上、左上、および左下にコードの位置決め用シンボルが存在する点に特徴があり、この位置決め用シンボルが存在するためにコードを早く認識できるものとされているが、前述のように実際にはこの位置決めシンボルを見つけるのは難しい場合が多いという欠点がある。
【００３１】
第１の実施形態においては、前述のようにまず入力画像データを矩形ブロック単位に区切り、そのブロック毎にそのブロックに一次元、または二次元コードが含まれるか、あるいはそのブロックがそのようなコードの領域の少なくとも一部であるかが判定され、その後コードの種類、すなわち一次元コードであるか、二次元コードであるかが判定される。そこでまずコードの判別基準について説明する。
【００３２】
図２に示すように一次元コード、および二次元コードは、共に白、黒のようにコントラストの差が大きい２つの色を用いて印刷されている。またコード内の領域では２つの色の占める面積の比率が１対１に近くなるように配列がなされている。そのため画素の階調値のばらつき（分散）、または標準偏差が大きくなるという特徴がある。
【００３３】
これに対して文字が印刷されている領域では、文字の色が下地に対して占める面積の比率が小さくなり、画素の階調値のばらつきも小さくなる。また写真などが印刷されている領域では、画素の階調値が任意の値をとり、階調値のばらつきは小さくなる。この特徴を利用して、ブロック内の画素の階調値のばらつきが所定の範囲内となるブロックを検出することによって一次元コード、および二次元コードが含まれる領域を検出することが可能となる。
【００３４】
特に二次元コードの領域内では、白と黒の色の面積の比率が所定の範囲、例えば５０％±１０％以内となるようにコードが作成されている。そこでブロック内の白黒画素の比率が所定の範囲内になるブロックを検出することによって、特に二次元コードが含まれる領域のみを検出することが可能となる。
【００３５】
図３は、エッジ数による判定方法の説明図である。一次元コードでは、平行な直線の組合せによってデータが表現されるために、この直線、すなわちバーに垂直なライン上で画素を取り出した場合には、そのラインがコード内部のどこにあっても、ライン上の画素の階調値が急変する点（エッジ）がラインに直交するバーの数に対応して存在することになるが、バーに平行なライン上の画素を取り出す場合にはエッジが存在しないという特徴がある。
【００３６】
一方、二次元コードでは、二次元に配置された明暗ドット（セル）の組合せによってデータが表現され、コード内部ではできるだけ明暗が一様になるようになっているため、水平方向のライン上の画素を取り出した場合にも、また垂直方向のライン上の画素を取り出した場合にも、画素の階調値が急変する点としてのエッジの数があまり変わらないという特徴がある。また文字が印刷されている領域においてライン上の画素を取り出した場合には、文字間／行間など、エッジが存在しない場所があり、コード領域とはその特徴が明らかに異なってくる。
【００３７】
そこで本実施形態では、ブロック内の水平／垂直ライン上のエッジ数が所定の範囲内となるブロックを検出することによって、精度よく一次元／二次元コードが含まれる領域のみを検出することが可能となり、また一次元コードと二次元コードとを容易に区別することができる。
【００３８】
図４は、ライン間相関によるコードの判定方法の説明図である。一次元コードでは、コード領域内でバーに垂直な直線とその近傍の平行な直線との間での相互相関の値が大きくなるが、バーに平行な直線とその近傍の平行直線との間での相互相関の値が小さくなるという特徴がある。図４では、垂直な２つのラインとして、黒のバーの内部、あるいは白のバーの内部に２つのラインを考えているが、黒のバーの内部を通るラインと、白のバーの内部を通るラインとの間で、相互相関をとった場合も同様である。
【００３９】
これに対して二次元コードでは、水平な２本のラインの間でも、あるいは垂直な２本のラインの間でも、相互相関の値はともに小さくなるという特徴がある。また文字や写真が印刷されている領域においても、一次元コードの場合ほど強い相関を示すことはほとんどない。
【００４０】
そこでブロック内の水平ライン間、あるいは垂直ライン間の相関の値が所定の範囲内となるブロックを検出することによって、一次元／二次元コードが含まれる領域を精度よく検出することが可能となると共に、一次元コードと二次元コードとを容易に区別することが可能となる。
【００４１】
図５は、一次元コードにおける回転の有無の判定方法の説明図である。前述のように一次元コードに対しては、本来コードを形成するバーに対して直交する方向の１ライン分のデータを使用してバーコード認識を行うことになるが、一次元コードが９０°回転した状態となっていると、ラインの方向がバーの方向と平行になり、正しいコード認識ができない。そこでコードの回転の有無を検出する必要がある。
【００４２】
図５において、一次元コードが本来の方向、すなわち水平方向に存在する場合には、水平方向エッジ数は白バーと黒バーの数に対応する数だけ存在するのに対して、垂直方向エッジ数は０となる。また水平ライン間の相関は大きくなるが、垂直ライン間の相関は小さくなるという特徴がある。
【００４３】
これに対して一次元コードが９０°回転している場合には、水平方向エッジ数は０であるのに対して、垂直方向エッジ数は白バーと黒バーの数に対応した数だけ存在し、水平ライン間相関は小さいのに対して、垂直ライン間相関は大きくなるという特徴がある。
【００４４】
このため、画像データ内で一次元コードが水平方向を向いているか、あるいは９０°回転した状態となっているかを精度よく判別することが可能となる。
実際のコードの判別においては、上記に説明した判定条件を複数個適宜組み合わせることによって、精度よく一次元コードや二次元コードが含まれる領域のみを検出することが可能となる。また特に白黒画素数、エッジ数、相関などは、それらのとり得る値の範囲が一次元コードと二次元コードとの間である程度異なってくる場合もあるが、本実施形態ではそれぞれの所定の範囲を一次元コードと二次元コードとの間で区別することなく処理を行うものとして説明する。これによってそれぞれの判別のための処理を分けたりする必要が無くなり、結果として簡単な処理シーケンスで高速にコード判別を行うことが可能となる。
【００４５】
続いて第１の実施形態におけるコード種類判別処理のフローチャートについて図６から図９を用いて説明する。図６は、コード種類判別処理の全体フローチャートである。同図において処理が開始されると、まずステップＳ１１で入力画像データの中から注目するブロックが選択される。ブロックは画像の任意の位置から順番に選択していくものとする。通常は左上の隅から順次走査して選択したり、画像中央から周辺部に向かって走査したりする場合が多い。処理対象の特性上、コードが存在する可能性がより高い位置からブロックを選択する方がコードをすぐに検出でき、処理時間を短くすることができる。
【００４６】
ステップＳ１２でブロック内の画素の階調値に対する標準偏差（ＳＤ）が算出され、ステップＳ１３でその値があらかじめ定められた値ＳＤｃｏｄｅを超えているかが判定され、超えている場合にはステップＳ１４で水平方向エッジ数ＨＥｄｇｅが、ステップＳ１５で垂直方向エッジ数ＶＥｄｇｅが算出され、ステップＳ１６でこれらの値があらかじめ定められた所定の値ＥＤＧＥｍｉｎを超えているかが判定される。
【００４７】
水平方向エッジ数、垂直方向エッジ数のいずれか１つ以上が所定の値を超えている場合には、ステップＳ１７で黒画素率ＢＰＲａｔｉｏが、ステップＳ１８で水平ライン間相関ＨＳｏｕｋａｎが、ステップＳ１９で垂直ライン間相関ＶＳｏｕｋａｎが算出され、ステップＳ２０で黒画素率が所定の最小値ＢＰＲＡＴＩＯｍｉｎを超えており、かつ所定の最大値ＢＰＲＡＴＩＯｍａｘ未満であるか否かが判定される。
【００４８】
この判定条件が成立している場合には、ステップＳ２２のそのブロックがコード領域と判定され、その後ステップＳ２３でそのコード領域が一次元コードであるか否かが判定される。この一次元コードの判定については図７でさらに詳細に説明する。
【００４９】
ステップＳ２０で黒画素率に関する判定条件が成立しない場合には、ステップＳ２１で水平ライン間相関、または垂直ライン間相関がそれぞれ所定の最小値ＳＯＵＫＡＮｍｉｎを超えているか否かが判定され、いずれかのライン間相関が所定の最小値を超えている場合にはステップＳ２２以降の処理が行われる。
【００５０】
ステップＳ２３でコード領域が一次元コードであると判定された場合にはステップＳ２４でその一次元コードが回転した状態であるか否かが判定される。その判定については、図８でその詳細をさらに説明する。回転ありと判定された場合には、ステップＳ２５で一次元コードが回転しているものとしてのデコード処理が行われて処理を終了し、回転がない（水平）と判定された場合にはステップＳ２６で一次元コードが通常状態、すなわち水平方向にあるものとしてのデコード処理が行われて処理を終了する。
【００５１】
ステップＳ２３でコード領域が一次元コードでないと判定されると、ステップＳ２７でその領域が二次元コードであるか否かが判定され、二次元コードである場合にはステップＳ２８で二次元コードに対するデコード処理が行われ、処理を終了する。
【００５２】
この二次元コードに対するデコード処理は、後述する第２の実施形態においてコード境界を検出して、その検出結果に基いて実行されるが、検出されたブロックの位置に対応してコード境界検出を行うことによって、二次元コードのデコード処理を高速化することができる。
【００５３】
ステップＳ１３で標準偏差が所定の値以下である場合、ステップＳ１６で水平方向エッジ数、垂直方向エッジ数のいずれもが所定の最小値以下である場合、ステップＳ２１で水平ライン間相関、または垂直ライン間相関のいずれもがその最小値以下である場合、およびステップＳ２７で二次元コードでないと判定された場合には、ステップＳ１１に戻り、次のブロックを選択してステップＳ１２以降の処理が繰り返される。なおステップＳ２７で二次元コードでないと判定されることは基本的にはありえないが、このような場合にはなんらかのエラーがあったものとして、ステップＳ１１以降の処理が繰り返される。またステップＳ２４において、コード無しと判定された場合にも、エラーと見なしてステップＳ１１以降の処理が繰り返される。
【００５４】
図７は、図６のステップＳ２３における一次元コード判定処理の詳細フローチャートである。同図において処理が開始されると、まずステップＳ３１で画素の階調値の標準偏差ＳＤが所定の値を超えているか否かが判定される。この所定の値は例えば図６のステップＳ１３におけると同じとする。所定の値を超えている場合にはステップＳ３２で水平方向エッジ数、または垂直方向エッジ数の少なくともいずれか１つが所定の最小値を超えているか否かが判定される。この所定の最小値もステップＳ１６におけると同じとする。
【００５５】
いずれか１つのエッジ数が所定の最小値を超えている場合には、ステップＳ３３で水平ライン間相関、または垂直ライン間相関が所定の最小値（ステップＳ２１と同じ）を超えているか否かが判定され、超えている場合にはステップＳ３４で一次元コード領域と判定されて処理を終了し、図６のステップＳ２４の処理に移行する。
【００５６】
ステップＳ３１で標準偏差、ステップＳ３２で水平方向エッジ数と垂直方向エッジ数の両者、ステップＳ３３で水平ライン間相関と垂直ライン間相関の両者がそれぞれ対応する所定の値以下であると判定された場合には、ステップＳ３５で一次元コードでないと判定され、処理を終了し、図６のステップＳ２７の処理に移行する。
【００５７】
図８は、図６のステップＳ２４における回転有無の判定処理の詳細フローチャートである。同図において処理が開始されると、まずステップＳ３７で水平方向エッジ数が所定の
最小値を超えており、かつ水平ライン間相関が所定の最小値を超えているか否かが判定される。この判定は、図５の左側で説明したように一次元コードが水平方向となっている条件であり、この条件が成立すると、ステップＳ３８で垂直方向エッジ数が所定の最小値を超えており、かつ垂直ライン間相関が所定の最小値を超えているか否かが判定される。この条件は図５の右側にある一次元コードの回転状態に対応する。この条件が成立しない場合にはステップＳ４１で一次元コードは水平方向と判定され、図６のステップＳ２６の処理に移行する。
【００５８】
ステップＳ３８の判定条件が成立する場合は、一次元コードは水平方向でもなく、９０°回転した方向でもなく、例えば斜めの方向になっている場合に相当する。この場合にはステップＳ３９で水平ライン間相関ＨＳｏｕｋａｎが垂直ライン間相関ＶＳｏｕｋａｎ超えているか否かが判定され、超えている場合にはステップＳ４１で一次元コードが水平方向と判定され、ステップＳ２６の処理に移行する。
【００５９】
ステップＳ３７で判定条件が成立しない場合には、ステップＳ４０でステップＳ３８におけると同じ判定条件が成立するか否かが判定され、成立する場合、およびステップＳ３９で水平ライン間相関が垂直ライン間相関以下であると判定された場合には、ステップＳ４２で一次元コードが回転していると判定され、図６のステップＳ２５の処理に移行する。またステップＳ４０で判定条件が成立しない場合には、ステップＳ４３でコードなしと判定され、何らかのエラーが発生したものとして図６のステップＳ１１以降の処理が繰り返される。
【００６０】
図９は、図６のステップＳ２７における二次元コード判定処理の詳細フローチャートである。同図において処理が開始されると、ステップＳ４５で画素の階調値の標準偏差が所定の値を超えているか否かが判定され、超えている場合にはステップＳ４６で水平方向エッジ数と垂直方向エッジ数のいずれもが所定の最小値を超えているか否かが判定される。超えている場合にはステップＳ４７で黒画素率が所定の最小値を超えており、かつ所定の最大値未満であるか否かが判定される。この条件が成立する場合にはステップＳ４８で二次元コードと判定され、図６のステップＳ２８の処理に移行する。これに対してステップＳ４５で標準偏差が、ステップＳ４６で水平方向エッジ数、または垂直方向エッジ数の少なくともいずれか１つがそれぞれ所定の値以下の場合、またはステップＳ４７で黒画素率が所定の最小値と所定の最大値の間に入っていない場合には、ステップＳ４９で二次元コードでないと判定され、図６のステップＳ１１以降の処理が繰り返される。
【００６１】
以上のフローチャートにおいては、前述のように例えば水平方向エッジ数や、垂直方向エッジ数などの所定の最小値として一次元コードと二次元コードに対して共通の値を用いて判定を行うものとしたが、これらの所定の値として一次元コードに対する値と二次元コードに対する値を区別して処理を実行することも当然可能である。また、例えば図７の一次元コード判定処理における判定条件は図６のステップＳ１３、Ｓ１６、およびＳ２１に含まれており、例えばステップＳ２１の判定条件が成立した時点で処理対象ブロックは一次元コード領域であると判定して、ステップＳ２４の一次元コードの回転有無の判定処理を行うことも可能である。
【００６２】
続いて本発明の第２の実施形態について説明する。この第２の実施形態では、第１の実施形態において二次元コードと判定されたブロックに対応して、その二次元コードの境界を検出するものとする。
【００６３】
図１０は、第２の実施形態における二次元コード認識処理の全体フローチャートである。同図において処理が開始されると、まずステップＳ５１で画像読み取りが行われ、ステップＳ５２で光電変換が行われ、ステップＳ５３でＡ／Ｄ変換が行われ、ステップＳ５４
で二次元コード認識処理が行われ、ステップＳ５５でデータ文字出力が行われて処理を終了する。第２の実施形態としての二次元コードの境界検出は、ステップＳ５４の二次元コード認識処理の一部として実行される。
【００６４】
図１１は、この二次元コード認識処理のフローチャートである。同図において処理が開始されると、まずステップＳ５７でコード領域抽出処理、ステップＳ５８で解像度変換処理、ステップＳ５９でデコード処理が行われ、処理を終了する。コード領域の境界検出は、ステップＳ５７のコード領域抽出処理に含まれる。ステップＳ５８の解像度変換処理では、コード画像の１セルのデータを１画素のデータに変換する処理が行われる。すなわち一般には複数の画素に対応する１セルのデータを１画素のデータに変換することによって解像度の変換が行われる。
【００６５】
図１２は、ステップＳ５７のコード領域抽出処理のフローチャートである。同図において処理が開始されると、まずステップＳ６１でコード内の点の座標が検出され、ステップＳ６２でセル幅の検出が行われ、ステップＳ６３でコード境界の検出処理が行われて処理を終了する。ステップＳ６１の処理は、第１の実施形態において検出された二次元コードを含むブロックの位置に対応して行われる。ステップＳ６２のセル幅の検出処理については後述する。
【００６６】
図１３は、第２の実施形態における二次元コードの境界検出方法の原理的な説明図である。前述のように光学歪みやピントのボケが発生した場合には、ＱＲコードの位置決め用シンボルが検出できなくなるという問題点があったが、本実施形態においてはコードの回りに存在する白領域、すなわちクワイエットゾーンを検出することによって、二次元コードの境界を検出することが可能となる。例えば、ＱＲコードではコードの周囲に４セルの幅を持つ白領域（クワイエットゾーン）が存在し、そのクワイエットゾーンは光学歪みやピントのボケにほとんど影響されないため、二次元コードの境界を正しく検出することが可能となる。
【００６７】
図１４は、セル幅の検出方法の説明図である。同図において二次元コード内部の適当な点から上下左右の方向に白領域、および黒領域の連続長の長さが検出され、その長さの頻度によって分布を求め、頻度がある一定値以上になる範囲内で最小の連続長の長さがセル幅として求められる。画像内部ではピンボケやノイズなどの影響によって、セル幅とは関係のない連続長が検出されることがあるために、値の小さな連続長は無視し、ある特定の値以上の頻度を持つ範囲で最小の連続長がセル幅として求められることになる。なお二次元コードにおいて白と黒のセル幅は同じであるとする。
【００６８】
図１５、および図１６は、コード境界を検出するための第１の白連続長と第２の白連続長の検出方法の説明図である。図１５は第１の白連続長の検出方法の説明図であり、同図において二次元コードの内部の適当な点から上下左右のいずれか１つの方向に画像を走査し、白セルが連続する白連続長の検出が行われる。図１５では左側への走査が行われ、第１の白連続長として５つの連続長が検出されている。
【００６９】
図１６は、第２の白連続長検出方法の説明図である。ここでは図１５で検出された白連続長と交差する方向に第２の白連続長の検出が行われる。第１の白連続長上の１つの点を中心としてあらかじめ定められた直径の円を描き、その円周上の１つの点と、その点と中心に関して対称な点とを結ぶ線分上の点が全て白であれば、後述するようにその線分が第２の白連続長の一部として検出される。
【００７０】
第１の白連続長上の１つの点を中心として、あらかじめ定められた直径の円周上の各点に対応してそのような第２の白連続長が検出されない場合には、図１５の第１の白連続長
の線分の上で円の中心となる点を移動させて、その点を中心とするあらかじめ定められた直径の円周上の点に対応して第２の白連続長を検出する処理が繰り返される。その処理が二次元コードを含む画像の例えば左端の位置まで繰り返される。
【００７１】
図１７、および図１８は第２の白連続長としてのコード境界の検出方法の説明図である。図１７は、コード内部の第１の白連続長上の点を中心としたある定められた円周上の点を対象とする第２の白連続長検出動作の説明図である。第２の白連続長を検出するための円の直径をある程度以上大きくすることによって、コードの内部ではそのような長い白連続長を第２の白連続長として検出することはできない。
【００７２】
図１８は、コード境界における第２の白連続長の検出動作の説明図である。前述のようにコード境界においてクワイエットゾーンが存在するため、第２の白連続長を検出するための円の直径以上の長さの白連続長が検出可能である。実際には後述するようにこのような円の直径と同じ長さの白連続長が検出された時点で、さらにその線分を両側に伸ばし、延長された線分上の点が全て白であるか否かが検出され、全て白である場合に、その線分が二次元コードのクワイエットゾーンにおける第２の白連続長として検出される。
【００７３】
図１９は、境界検出処理の開始点の位置の説明図である。第２の実施形態ではコード境界検出するための第１の白連続長検出処理は、コード内部の適当な点を開始点として開始される。コード外部の点を開始点とすれば、二次元コード以外の図表や文字の領域において境界検出処理が行われてしまうことになる。この開始点は、第１の実施形態において二次元コードと判定されたブロックに対応してその位置が特定される。
【００７４】
図２０は、四次元コードの上下左右の４つの境界を検出する動作の説明図である。前述のように境界検出処理の開始点から上下左右の各方向に対して画像を走査し、第１の白連続長、および第２の白連続長を検出することによって、二次元コードのクワイエットゾーンに相当する上下左右の４つの境界が検出される。
【００７５】
このように上下左右の境界が検出されると二次元コードの画像内における傾き角度を求めることもできる。例えばその簡略的な方法として、境界を直線と見なして、その傾きからコードの傾き角度を求めることもでき、より精密な方法として境界の検出結果を用いて位置決め用シンボルの位置を特定し、その位置から二次元コードの傾き角度を計算することもできる。
【００７６】
図２１は、白セルと黒セルとを区別するための閾値の決定方法の説明図である。二次元コードに対する光の照射量が少ない場合や、センサの感度が低い場合などにおいては、閾値を、例えば２５６諧調の中間の１２８のように固定した場合にセルの黒、白を正確に判定することができないことがある。例えば、光の照射量が少ない場合には階調値のレンジが全体的に低いレベルに下がり、かすれやつぶれが発生する。そのようなかすれやつぶれの影響を排除するために、第２の実施形態では図２１に示す閾値の決定方法を用いる。
【００７７】
一般的に二次元コードは白と黒の２値で表現されたものが多く、入力画像の各セルに対する階調値のヒストグラムでは図２１に示されるように明るい領域と暗い領域で２つのピークが生ずる。頻度がそれぞれある一定値以上であり、最も左側にある階調値のピークと、右側にある階調値のピークとに対応する階調値の中間（平均値）を閾値の値として決定することによって、かすれやつぶれの影響を排除して、白セルと黒セルとの判定を正確に行うことが可能となる。
【００７８】
黒セルと白セルの判定方法として、このような閾値を用いる代わりに、注目セルとその周囲のセルの階調値とを比較し、その差がある一定値以上である場合には階調値の大きな
セルを白セル、小さなセルを黒セルと判定する方法を用いることもできる。
【００７９】
図２２は、閾値を用いる場合の閾値の更新動作の説明図である。二次元コードの画像領域の大きさや、光の照射方向などによって生じる影の影響などによって、黒セルと白セルを判別するために二次元コードの画像領域全体に一定の閾値を用いた場合には、正確な判別ができない場合がある。すなわち光源の位置などの影響によって、影の濃い部分と薄い部分とができるような場合には、影の濃い部分と薄い部分とで閾値を変更して黒セルと白セルとの判別を行う必要がある。
【００８０】
例えば図２０において右方向に画像を走査していく場合に、例えばある一定距離毎に閾値を修正して第１の白連続長、および第２の白連続長の検出処理を行う。この閾値修正を行う走査距離については、例えば光源の位置やその強度などを変更して実験を繰り返し、適切な距離を決定することができる。
【００８１】
以上で概略を説明した、二次元コード境界検出方法について図２３〜図２５のフローチャートを用いてさらに詳細に説明する。図２３は、コード境界検出処理の全体フローチャートである。ここで検出対象となる二次元コードは、例えば前述のＱＲコードであるものとするが、他の二次元コードに対する処理も実行することができる。このＱＲコードの詳細については次の文献に詳細に記述されている。
〔非特許文献１〕  ＪＩＳ  Ｘ０５１０  ２次元コードシンボル−ＱＲコード−基本仕様
解説
図２３において処理が開始されると、まずステップＳ７１で閾値を更新する距離に対応する閾値エリアのカウンタが０に初期化され、現在の処理対象の点の座標ｎＸＰｏｓ、およびｎＹＰｏｓにコード内部の走査開始点、すなわち第１の実施形態において検出された二次元コード領域の内部の点の座標ｒ−ｎｘ−ｃｔ、およびｒ−ｎｙ−ｃｔが代入され、ステップＳ７２で現在の点のＸ座標ｎＸＰｏｓが、画像の左端の点のＸ座標ｎＸＥｄ（＝０）以上であるか否かが判定される。なおここでは図２０で説明したように開始点から左方向に画像を走査するものとして、処理のフローチャートを説明する。
【００８２】
ステップＳ７２で現在の点が画像の左端に達していないと判定されると、ステップＳ７３で閾値エリアのカウンタの値が閾値の更新が必要となる値ｎＴｈＡｒｅａを超えたか否かが判定され、超えている場合にはステップＳ７４で閾値ｎＴｈｒｅｓｈを更新するために閾値の検出処理が行われる。閾値の検出処理は図２１で説明した方法によって行われる。
【００８３】
ステップＳ７４の処理に続いて、ステップＳ７５で閾値エリアのカウンタの値が０に初期化された後に、またステップＳ７３でカウンタの値が閾値更新を行うべき値を超えていない場合には、ステップＳ７６の第１の白連続長検出処理に移行する。この処理については図２４で詳細に説明するが、この検出処理に対応して第１の白連続長を示すｎＷＲａｎｇｅ、閾値エリアのカウンタの値、現在の点の座標値、および閾値ｎＴｈｒｅｓｈの変数の値が引き渡される。なおこれらの値のうち、現在の点のＹ座標ｎＹＰｏｓ、および閾値ｎＴｈｒｅｓｈ以外の値は第１の白連続長検出処理において更新される。なお第１の白連続長検出長検出処理の処理中に閾値エリアのカウンタ値がｎＴｈＡｒｅａの値を超える可能性もあるが、ここでは第１の白連続長は比較的短く、この処理中には閾値は更新されないものとする。
【００８４】
第１の白連続長検出処理が終了すると、ステップＳ７７で第１の白連続長検出処理において白連続長が検出されず、エラーとなったか否かが判定され、エラーとなった場合には処理を終了する。第１の白連続長の検出に成功した場合には、ステップＳ７８で第２の白連続長検出の終了判定処理に用いられるカウント値ｎＷＣｏｕｎｔの値が０に初期化され
、ステップＳ７９でそのカウント値が第１の白連続長を表すｎＷＲａｎｇｅ未満であるか否かが判定され、未満であるときにはステップＳ８０で第２の白連続長の検出が行われる。この処理については図２５で詳細に説明するが、この処理に対して現在の点のＸ座標とＹ座標、および閾値の値が引き渡される。
【００８５】
続いてステップＳ８１で第２の白連続長の検出に成功したか否かが判定され、成功した場合には処理を終了し、成功しない場合にはステップＳ８２でｎＷＣｏｕｎｔと閾値エリアのカウンタの値がインクリメントされ、現在の点のＸ座標がデクリメントされた後にステップＳ７９以降の処理が繰り返される。
【００８６】
すなわち図１５、および図１６で説明したように、第１の白連続長に対応する線分上で左方向に現在の点を移動させながら、第２の白連続長を検出する処理が繰り返されることになる。この処理の繰り返しはステップＳ７９でｎＷＣｏｕｎｔの値がこの第１の白連続長の長さ、すなわちｎＷＲａｎｇｅに達した時点で終了し、再びステップＳ７２以降の処理が繰り返されることになる。
【００８７】
図２４は、第１の白連続長検出処理の詳細フローチャートである。同図において処理が開始されると、ステップＳ８６で現在の点のＸ座標、Ｙ座標が変数ｘ、ｙに代入され、ステップＳ８７でｘが画像データの左端に達していないかが判定され、いない場合にはステップＳ８８で座標ｘ、ｙの点の階調値のデータが閾値未満であるか否かが判定される。本実施形態では、明るいセル、すなわち白いセルに対する階調値が、黒いセルに対する階調値より大きくなっているため、階調値が閾値未満であることは、現在処理対象となっているセルが黒であることになり、白セルを見つけるまで次のステップＳ８９からＳ９１の処理が繰り返される。
【００８８】
ステップＳ８９では、閾値エリアのカウンタがインクリメントされ、処理対象セルの座標ｘがデクリメントされ、ステップＳ９０でステップＳ８７と同様に画像の左端に達していないか否かが判定され、いない場合にはステップＳ９１でＳ８８と同様に階調値が閾値未満であるか否かが判定される。閾値未満である場合にはステップＳ８９以降の処理が繰り返される。
【００８９】
ステップＳ９１で階調値が閾値以上である場合、およびステップＳ８８で同様に階調値が閾値以上である場合には、ステップＳ９２で処理中のセルの座標ｘが第１の白連続長の開始点のＸ座標を示すｎＸｓｔに代入され、ステップＳ９３の処理に移行する。
【００９０】
ステップＳ９３からＳ９５において閾値エリアのカウンタの値がインクリメントされ、処理中のセルのＸ座標ｘがデクリメントされた後に、処理中のセルが画像の左端に達していないか、またセルが白であるかの判定が行われ、これらの判定が共に成立する場合には、これらの処理が繰り返され、ステップＳ９５でセルの階調値が閾値以下であり、セルが黒と判定されると、ステップＳ９６でセルのＸ座標ｘが第１の白連続長の終りの点のＸ座標を示すｎＸｅｄに代入され、ステップＳ９７で第１の白連続長の長さを示すｎＷＲａｎｇｅが求められ、図２３の全体処理において処理中のセルのＸ座標を示すｎＸＰｏｓの値が第１の白連続長の開始点の座標ｎＸｓｔの値とされ、第１の白連続長の検出の成功を示すプラグｎＥｒｒＦｌａｇ１の値が１とされて処理を終了し、リターンが行われる。
【００９１】
ステップＳ８７、ステップＳ９０、およびステップＳ９４のいずれかにおいて処理中のセルのＸ座標を示すｘが画像データの左端ｎＸＥｄに達したと判定されると、ステップＳ９８で第１の白連続長の検出の成功を示すフラグが−１、すなわち失敗を示す値に設定された後に処理を終了してリターンが行われる。
【００９２】
図２５は、図２３のステップＳ８０における第２の白連続長検出処理の詳細フローチャートである。同図において処理が開始されると、まずステップＳ１０１で図２４のステップＳ８６と同様に現在の処理対象のセルの座標ｘ、ｙの設定が行われる。ステップＳ１０２でこれらの座標によって決まる点を中心とした円が描かれ、その円周上の点が求められる。ここでこの円は前述のように第２の白連続長を検出するためのものであり、コード内部で第２の白連続長が検出されることがないように、ある程度大きな直径を持つ円が使用される。
【００９３】
続いてステップＳ１０３で円周上の点のインデックスとしてのｊが０に初期化され、ステップＳ１０４でｊの値がステップＳ１０２で求められた円周上の点の数Ｃｉｒｃｕ  Ｐｏｉｎｔ  Ｎｕｍ未満であるか否かが判定され、未満である場合にはステップＳ１０５で、インデックスｊで示される円周上の点における階調値Ｃｄａｔａ［ｊ］の値が閾値以上であるか否かが判定され、閾値以上、すなわち白である場合にはステップＳ１０６で、インデックスｊによって示される円周上の点と円の中心に関して対称な位置にある点の階調値ＣｄａｔａＲｅｖ［ｊ］が閾値以上であるか否かが判定される。閾値以上である場合にはステップＳ１０７でこれらの２つの点を結ぶ線分上の点の色が全て調べられ、全て白であるか否かがステップＳ１０８で判定され、全て白である場合には前述のようにステップＳ１０９で、その線分の外側にさらに延長線が引かれ、延長線上の点が全て白であるかが調べられ、ステップＳ１１０でそれらの点が全て白であるか否かが判定され、全て白である場合にはステップＳ１１２で第２の白連続長の検出成功を示すフラグｎＥｒｒＦｌａｇ２の値が１に設定された後に処理を終了し、リターンが行われる。なおステップＳ１０９で引かれる延長線の長さは、例えば延長線の長さを含む全体の線分の長さが、円の直径の２倍となるような長さとされる。
【００９４】
ステップＳ１０５で、円周上のインデックスｊで示される点、またはステップＳ１０６でその点と円の中心に関して対称な点の階調値が閾値未満である時、ステップＳ１０８、またはＳ１１０で線分上の点、または延長線上の点の一部が白でない時には、ステップＳ１１１でｊの値がインクリメントされた後にステップＳ１０４以降の処理が繰り返される。すなわちステップＳ１０２で求められた円周上の点を移動させながら、第２の白連続長の検出処理が続けられる。そしてステップＳ１０４で円周上の点に対する処理が全て終了したと判定されると、第２の白連続長の検出に失敗したことになるため、ステップＳ１１３でフラグの値が−１とされて処理を終了し、リターンが行われる。
【００９５】
以上において本発明のコード種類判別方法およびコード境界検出方法についてその詳細を説明したが、この方法を実行するコード読取装置は当然一般的なコンピュータシステムをその主要構成部として構成することが可能である。図２６はそのようなコンピュータシステム、すなわちハードウェア環境の構成ブロック図である。
【００９６】
図２６においてコンピュータシステムは中央処理装置（ＣＰＵ）１０、リードオンリメモリ（ＲＯＭ）１１、ランダムアクセスメモリ（ＲＡＭ）１２、通信インタフェース１３、記憶装置１４、入出力装置１５、可搬型記憶媒体の読取り装置１６、およびこれらの全てが接続されたバス１７によって構成されている。
【００９７】
記憶装置１４としてはハードディスク、磁気ディスクなど様々な形式の記憶装置を使用することができ、このような記憶装置１４、またはＲＯＭ１１に図６〜図９、図１０〜図１２、図２３〜図２５のフローチャートに示されたプログラムや、本発明の特許請求の範囲の請求項９、１０の記憶媒体に格納されたプログラムがＣＰＵ１０によって実行されることにより、本実施形態における一次元／二次元コードを含むブロックの検出、コードの種類判別などが可能となる。
【００９８】
このようなプログラムは、情報提供者１８側からネットワーク１９、および通信インタフェース１３を介して、例えば記憶装置１４に格納されることも、また市販され、流通している可搬型記憶媒体２０に格納され、読取り装置１６にセットされて、ＣＰＵ１０によって実行されることも可能である。可搬型記憶媒体２０としてはＣＤ−ＲＯＭ、フレキシブルディスク、光ディスク、光磁気ディスク、ＤＶＤなど様々な形式の記憶媒体を使用することができ、このような記憶媒体に格納されたプログラムが読取り装置１６によって読取られることにより、本実施形態における二次元コードのコード境界検出などが可能となる。
【００９９】
（付記１）  入力画像データを矩形ブロック単位で選択するブロック選択過程と、
該選択されたブロックが所定の条件を満たしているか否かを判定するブロック判別過程と、
該所定の条件を満たすブロック内に含まれるコードの種類を判定するコード判定過程とを備えることを特徴とするコード種類判別方法。
【０１００】
（付記２）  前記コード判定過程において、コードの種類として一次元コードと二次元コードの区別を判定することを特徴とする付記１記載のコード種類判別方法。
（付記３）  前記コード種類判別方法において、
コードの種類が一次元コードと判定された時、該一次元コードが９０°回転した状態にあるか否かを判定する回転検出過程をさらに備えることを特徴とする付記２記載のコード種類判別方法。
【０１０１】
（付記４）  前記ブロック判別過程において、前記所定の条件としてブロック内の画素の階調値の分散が所定の範囲内にあることを判定することを特徴とする付記１記載のコード種類判別方法。
【０１０２】
（付記５）  前記ブロック判別過程において、前記所定の条件としてブロック内の黒画素と白画素との比率が所定の範囲内にあることを判定することを特徴とする付記１記載のコード種類判別方法。
【０１０３】
（付記６）  前記ブロック判別過程、および／またはコード判定過程において、前記所定の条件、および／またはコード種類判定条件として、ブロック内の水平方向、および／または垂直方向のライン上で画素の階調値が急変するエッジの個数が所定の範囲内にあることを判定することを特徴とする付記１記載のコード種類判別方法。
【０１０４】
（付記７）  前記ブロック判別過程、および／またはコード判定過程において、前記所定の条件、および／またはコード種類判定条件として、ブロック内の２本以上の水平ライン相互間、および／または２本以上の垂直ライン相互間で画素の階調値の相関が所定の範囲内にあることを判定することを特徴とする付記１記載のコード種類判別方法。
【０１０５】
（付記８）  セル化されたデータが二次元状に配置された二次元コードの境界検出方法であって、
入力画像データを走査し、白セルの連続長を検出する第１の白連続長検出過程と、
該第１の白連続長と交差する方向に入力画像データを走査し、該第１の白連続長と交点を持ち、かつ所定の長さを超える白セルの連続長を検出する第２の白連続長検出過程と、
該第１の白連続長と第２の白連続長との交点をコード境界位置として検出する境界検出過程とを備えることを特徴とするコード境界検出方法。
【０１０６】
（付記９）  前記第１の白連続長検出過程において、あらかじめ特定されたコードの位置に対応してコード内部の点から上、下、左、または右の方向に入力画像データを走査し
、
前記境界検出過程において、上、下、左、または右のコード境界を検出することを特徴とする付記８記載のコード境界検出方法。
【０１０７】
（付記１０）  前記コード境界検出方法において、前記セルの幅を検出するセル幅検出過程をさらに備え、
前記白セルの連続長の検出において、該検出されたセル幅を基準として連続長を決定することを特徴とする付記８記載のコード境界検出方法。
【０１０８】
（付記１１）  前記セル幅検出過程において、
あらかじめ特定されたコードの位置に対応して、コード内部の点から上、下、左、または右の方向に入力画像データを走査し、白セルの連続長、および／または黒セルの連続長の長さの頻度を示すヒストグラムを作成する過程と、
該ヒストグラム上で所定の値以上の頻度を持つ連続長の中で、最小の連続長の長さをセル幅として決定する過程とを備えることを特徴とする付記１０記載のコード境界検出方法。
【０１０９】
（付記１２）  前記コード境界検出方法において、前記白セルの連続長の検出において使用される閾値の決定過程をさらに備え、
セルに対する階調値が該閾値以上であるセルを白セルとして検出することを特徴とする付記８記載のコード境界検出方法。
【０１１０】
（付記１３）  前記第１の白連続長検出過程において、
前記入力画像データの走査にあたって、ある一定距離の走査毎に前記閾値決定過程を繰り返し、
該繰り返しによって更新された閾値以上であるセルを白セルとして検出することを特徴とする付記１２記載のコード境界検出方法。
【０１１１】
（付記１４）  前記閾値決定過程において、
ある一定範囲内のセルに対する階調値の頻度を示すヒストグラムを作成する過程と、
該ヒストグラムにおいて階調値の高い側である一定値以上の頻度を持つピークに対応する第１の階調値を求める過程と、
階調値の低い側である一定値以上の頻度を持つピークに対応する第２の階調値を求める過程と、
該第１の階調値と第２の階調値の平均値を閾値として決定する過程とを備えることを特徴とする付記１２、または１３記載のコード境界検出方法。
【０１１２】
（付記１５）  前記白セルの連続長の検出において、注目セルと周囲のセルに対する階調値を比較し、階調値の差がある値以上である時、階調値の大きなセルを白セルとして検出することを特徴とする付記８記載のコード境界検出方法。
【０１１３】
（付記１６）  入力画像データに含まれるコードの種類を判別する計算機によって使用される記憶媒体であって、
入力画像データを矩形ブロック単位で選択するステップと、
該選択されたブロックが所定の条件を満たしているか否かを判定するステップと、
該所定の条件を満たすブロック内に含まれるコードの種類を判定するステップとを計算機に実行させるプログラムを格納した計算機読出し可能可搬型記憶媒体。
【０１１４】
（付記１７）  前記コード種類判定のステップにおいて、
コードの種類が一次元コードと判定された時、該一次元コードが９０°回転した状態に
あるか否かを判定するステップを前記プログラムがさらに計算機に実行させることを特徴とする付記１６記載の計算機読出し可能可搬型記憶媒体。
【０１１５】
（付記１８）  セル化されたデータが二次元状に配置された二次元コードの境界を検出する計算機によって使用される記憶媒体であって、
入力画像データを走査し、白セルの連続長を検出する第１の白連続長検出ステップと、
該第１の白連続長と交差する方向に入力画像データを走査し、該第１の白連続長と交点を持ち、かつ所定の長さを超える白セルの連続長を検出する第２の白連続長検出ステップと、
該第１の白連続長と第２の白連続長との交点をコード境界位置として検出する境界検出ステップとを計算機に実行させるプログラムを格納した計算機読出し可能可搬型記憶媒体。
【産業上の利用可能性】
【０１１６】
本発明は、一次元バーコードや二次元コードなどを例えば光学的に読み取り、そのコードの認識を行うためのコード認識装置の製造産業は当然のこととして、そのような一次元コードや二次元コードを利用する全ての産業において利用可能である。
【図面の簡単な説明】
【０１１７】
【図１】本発明のコード種類判別方法の原理的な説明図である。
【図２】一次元コードと二次元コードの例を示す図である。
【図３】コード内のエッジ数の判定方法の説明図である。
【図４】コード内の２本のライン間の相関判定方法の説明図である。
【図５】一次元コードの回転の有無の判定方法の説明図である。
【図６】第１の実施形態におけるコード種類判別処理の全体フローチャートである。
【図７】一次元コード判定処理の詳細フローチャートである。
【図８】一次元コード回転判定処理の詳細フローチャートである。
【図９】二次元コード判定処理の詳細フローチャートである。
【図１０】第２の実施形態における二次元コード認識処理の全体フローチャートである。
【図１１】二次元コード認識処理の詳細フローチャートである。
【図１２】二次元コードの境界検出処理の全体フローチャートである。
【図１３】第２の実施形態におけるクワイエットゾーン検出の説明図である。
【図１４】セル幅の検出方法の説明図である。
【図１５】第１の白連続長検出方法の説明図である。
【図１６】第２の白連続長検出方法の説明図である。
【図１７】コード内部における第２の白連続長検出動作の説明図である。
【図１８】コード境界における第２の白連続長検出動作の説明図である。
【図１９】コード境界検出処理の開始点の位置の説明図である。
【図２０】上下左右４方向のコード境界検出の説明図である。
【図２１】閾値の設定方法の説明図である。
【図２２】領域ごとの閾値決定方法の説明図である。
【図２３】コード境界検出処理の全体フローチャートである。
【図２４】第１の白連続長検出処理の詳細フローチャートである。
【図２５】第２の白連続長検出処理の詳細フローチャートである。
【図２６】本発明におけるプログラムのコンピュータへのローディングを説明する図である。
【図２７】従来の二次元コード領域抽出方法の説明図である。
【符号の説明】
【０１１８】
１  ブロック選択過程
２  ブロック判別過程
３  コード判定過程
４  結果出力過程
１０  ＣＰＵ
１１  リードオンリーメモリ（ＲＯＭ）
１２  ランダムアクセスメモリ（ＲＡＭ）
１３  通信インタフェース
１４  記憶装置
１５  入出力装置
１６  読み取り装置
１７  バス
１８  情報提供者
１９  ネットワーク
２０  可搬型記憶媒体
【図１】
2008102952.tif 000003
【図２】
2008102952.tif 000004
【図３】
2008102952.tif 000005
【図４】
2008102952.tif 000006
【図５】
2008102952.tif 000007
【図６】
2008102952.tif 000008
【図７】
2008102952.tif 000009
【図８】
2008102952.tif 000010
【図９】
2008102952.tif 000011
【図１０】
2008102952.tif 000012
【図１１】
2008102952.tif 000013
【図１２】
2008102952.tif 000014
【図１３】
2008102952.tif 000015
【図１４】
2008102952.tif 000016
【図１５】
2008102952.tif 000017
【図１６】
2008102952.tif 000018
【図１７】
2008102952.tif 000019
【図１８】
2008102952.tif 000020
【図１９】
2008102952.tif 000021
【図２０】
2008102952.tif 000022
【図２１】
2008102952.tif 000023
【図２２】
2008102952.tif 000024
【図２３】
2008102952.tif 000025
【図２４】
2008102952.tif 000026
【図２５】
2008102952.tif 000027
【図２６】
2008102952.tif 000028
【図２７】
2008102952.tif 000029