(57)【特許請求の範囲】
【請求項１】
画像データを矩形ブロック単位で選択するブロック選択過程と、
選択されたブロックが所定の条件を満たすかを判別するブロック判別過程と、
所定の条件を満たすブロック内に含まれるコードの種類及び特性を判定するコード判定過程と、
種類及び特性が判定されたコードに対し認識を行うコード認識過程と、
コード認識結果に基づいてブロック走査の手順を制御するブロック走査制御過程と、
を含み、
前記コード認識過程は、コードに格納されたコード関連情報を認識するコード関連情報処理過程と、認識したコード関連情報に基づいて処理を行うコード関連情報処理過程と、を含み、
前記コード関連情報は、他のコードとの位置関係を表す位置情報を含み、
前記コード関連情報処理過程は、前記位置情報に基づいて認識すべきコード位置に移動するコード位置移動過程と、
を含むコード画像処理方法。
【請求項２】
前記コード認識過程は、コードの領域を抽出するコード領域抽出過程を含むことを特徴とする請求項１記載のコード画像処理方法。
【請求項３】
前記コード領域抽出過程は、コード内部座標検出過程と、セル幅の検出過程と、コード境界の検出処理過程を含む請求項２記載のコード画像処理方法。
【請求項４】
前記ブロック走査制御過程は、前記コード領域抽出過程で抽出されたコード領域に一部または全部が含まれるブロックに対しては別のブロックへ走査を移動するブロック移動過程を含むことを特徴とする請求項１または２記載のコード画像処理方法。
【請求項５】
前記位置情報は、
１ないし複数の他のコードとの位置関係を表す相対位置情報を含み、
認識した相対位置情報の順序と、それまでの認識結果に基づいて移動する位置を決定するコード認識位置決定過程と、
を含むことを特徴とする請求項１記載のコード画像処理方法。
【請求項６】
複数のコードが配置された文書読取り画像において、
各コードが複数のコード間の関連情報を含むようにされ、
認識すべきコードの位置を１つだけ指定するコード位置指定過程と、
位置指定されたコードからコード間の関連情報を認識するコード関連情報認識過程と、
認識したコード関連情報に基づいて処理を行うコード関連情報処理過程と、
を含むことを特徴とするコード画像処理方法。
【請求項７】
コード位置指定にポインティングデバイスを使用する請求項６記載のコード画像処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字や図表とともに複数のコードが配置された電子画像データや複数のコードが印刷された文書をデジタルカメラやスキャナなどの画像読取装置で読み取った画像データから、複数のコードを認識し、それらをまとめて処理するコード画像処理方法に関する。
【背景技術】
【０００２】
近年、一次元バーコード（特に断らない限り、以下、“一次元コード”と称する）よりも多くの情報を埋め込むことができる二次元バーコード（特に断らない限り、以下、“二次元コード”と称する）の普及が進んでいる。二次元コードでは、コード全体の二次元配列データが分らなければ認識できないため、読取装置にはデジタルカメラやイメージスキャナのような画像読取装置が用いられている。
【０００３】
二次元コードの普及に伴い、これまでの専用のラベルに印刷されたコードを読み取るだけでなく、文字や図表とともに任意に位置に任意の大きさのコードが印刷される用途も増大している。また、１枚の文書上に複数の二次元コードを配置して使用する用途も増えつつある。
【０００４】
図１は、コード領域の右上、左上、および左下にコードの位置決め用シンボルが配置されるクイックレスポンス（ＱＲ）コード（非特許文献１参照）と呼ばれる二次元コードが有る画像データから、コード画像処理して二次元コードを認識する従来のコード画像処理方法を説明するための概略図である。図１において従来は、画像データを小ブロック領域30毎に左上隅から横方向に順次走査し、走査で小ブロック領域30が第１の二次元コード40の内部に入って、第１の二次元コード40内の位置31で領域内の画像の特徴が二次元コードと合致する場合には、そのブロック領域にコードが存在すると特定してその近傍に対して認識処理を行っていた。この場合、図１（ａ）に示すように、一度認識を終了すると、そこで処理を終了するため、コードが複数含まれている場合でも最初に特定した１つしか認識できないという問題が有った。また、図１（ｂ）に示すように、認識後に走査を継続した場合、第１の二次元コード40中に複数の小ブロック領域30が含まれるような時には、第１の二次元コード40内の位置32でも領域内の画像の特徴が二次元コードと合致するということで再び認識処理を行ってしまうため、同一のコードを複数回認識してしまうという問題が有った。（特許文献１参照）
図２は、ＱＲコードが有る画像データとは別に画像データに含まれるコードの位置情報を記録したレイアウトのテンプレートの情報を使用して二次元コードを認識する従来のコード画像処理方法を説明するための概略図である。この従来例は図２に示すように、画像データ（図２(ａ)）とは別に、画像データに含まれるコード60、70の位置情報を記録したレイアウトのテンプレート80、90（図２(ｂ)）を別途作製しておき、認識処理時にテンプレートの情報を参照するようにしている（図２(ｃ)）。この場合、レイアウトのテンプレートを別途作製しておき、読み取る文書に応じてレイアウトのテンプレートをいちいち選択する手間がかかるという問題があった。さらに、読み取った画像データとテンプレートの位置合わせを正確に行うようにし、画像データに回転や歪みが発生しない方法で画像を読み取らなければならないという課題もあった。（特許文献２参照）
【特許文献１】特願2003-408104
【特許文献２】特開2000-339407号公報(第２欄50行〜第３欄20行、図５)
【非特許文献１】JIS X0510  ２次元コードシンボル−ＱＲコード−基本仕様  解説
【発明の開示】
【０００５】
文字や図表とともに任意の位置に任意の数の二次元コードが配置された文書の場合、デジタルカメラやイメージスキャナを用いて読み取りを行うと二次元コードに加えて文字や図表の一部も画像データとして取り込まれてしまう。このため、画像データに複数含まれる二次元コードを認識するには、まずコードが存在するそれぞれの位置を特定し、特定した位置の近傍に対して順次コード認識処理を行う必要がある。
【０００６】
本発明のコード画像処理方法は、画像データを矩形ブロック単位で選択するブロック選択過程と、選択されたブロックが所定の条件を満たすかを判別するブロック判別過程と、所定の条件を満たすブロック内に含まれるコードの種類及び特性を判定するコード判定過程と、種類及び特性が判定されたコードに対し認識を行うコード認識過程と、コード認識結果に基づいてブロック走査の手順を制御するブロック走査制御過程を含んでなることを特徴とする。
【０００７】
本発明によれば、画像データにコードが複数含まれている場合でも、一つのコード認識で止まることなく、認識したコード領域におけるコード判別処理及びコード認識処理をスキップするので、コード全体の探索と認識を高速かつ確実に行うことが可能である。また、テンプレートを別途用意しなくとも、コードの位置を検出して認識を行えるため、コードがどのように配置されていても、また読み取った画像データが傾いていたり位置がずれていた場合でも間違いなく認識を行うことが可能である。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施形態を、図面を参照しながら詳細に説明する。
［実施形態１］
図３は、本発明の第１の実施形態に係るコード画像処理方法の原理説明図である。同図において本発明の基本処理ブロックは、画像データを矩形ブロック単位で選択するブロック選択過程１と、選択されたブロックが所定の条件を満たすかを判別するブロック判別過程２と、所定の条件を満たすブロック内に含まれるコードの種類及び特性を判定するコード判定過程３と、種類及び特性が判定されたコードに対し認識を行うコード認識過程４と、コード認識結果に基づいてブロック走査の手順を制御するブロック走査制御過程５を備えている。そして、ブロック走査制御過程５により手順制御されたブロック走査を経て全てのコードの認識処理が終了した後に結果出力過程６から結果が出力される。
【０００９】
本実施形態に係るブロック選択過程１においては、画像データを小ブロック領域(矩形ブロック単位)に区切って走査し、ブロックを選択してコードを探索する。次に、ブロック判別過程２においては、ブロック選択過程１で選択したブロックのうち所定の条件として、ブロック内の画素の階調値の分散が所定の範囲内にあることを判別するか、または、ブロック内の黒画素と白画素の比率が所定の範囲内にあるかを判別する。
【００１０】
またコード判定過程３においては、一次元コードか二次元コードかのコード種類を判定し、また一次元コードと判定された時には、その一次元コードの特性、たとえば回転した状態にあるか否かを判定する。そしてコード認識過程４においては、コード判定過程３でブロックの領域内にコードが含まれていると判定された場合にコードの認識を行う。また本実施形態に係るブロック走査制御過程５は、コード認識過程４でのコード認識結果に基づいて、ブロック走査の手順を制御する。これについては、図２６に示すフローチャートを用いて詳しく説明する。
【００１１】
図４は、一次元コードと二次元コードの典型例を示す図である。一次元コードは、異なる太さや間隔をもつ平行な直線の組合せによるコードであり、二次元コードは、データがセル化されて二次元状に配置されたコードであり、１つのセルは一般に複数の画素に対応する。図４の二次元コードは、クイックレスポンス（ＱＲ：Quick Response）コードと呼ばれる二次元コードであり、コード領域の右上、左上、および左下にコードの位置決め用シンボルを設けている。
【００１２】
図４に示すように一次元コード、および二次元コードは、共に白、黒のようにコントラストの差が大きい２つの色を用いて印刷されている。またコード内の領域では２つの色の占める面積の比率が１対１に近くなるように配列がなされている。そのため画素の階調値のばらつき（分散）、または標準偏差が大きくなるという特徴がある。
【００１３】
これに対して文字が印刷されている領域では、文字の色が下地に対して占める面積の比率が小さくなり、画素の階調値のばらつきも小さくなる。また写真などが印刷されている領域では、画素の階調値が任意の値をとり、階調値のばらつきは小さくなる。この特徴を利用して、ブロック内の画素の階調値のばらつきが所定の範囲内となるブロックを検出することによって一次元コード、および二次元コードが含まれる領域を検出することが可能となる。
【００１４】
特に二次元コードの領域内では、白と黒の色の面積の比率が所定の範囲、例えば５０％±１０％以内となるようにコードが作成されている。そこでブロック内の白黒画素の比率が所定の範囲内になるブロックを検出することによって、二次元コードが含まれる領域のみを検出することが可能となる。
【００１５】
図５は、エッジ数によるコード判定方法の説明図である。一次元コードでは、平行な直線の組合せによってデータが表現されるために、この直線、すなわちバーに垂直なライン上で画素を取り出した場合には、そのラインがコード内部のどこにあっても、ライン上の画素の階調値が急変する点（エッジ）がラインに直交するバーの数に対応して存在することになるが、バーに平行なライン上の画素を取り出す場合にはエッジが存在しないという特徴がある。
【００１６】
一方、二次元コードでは、二次元に配置された明暗ドット（セル）の組合せによってデータが表現され、コード内部ではできるだけ明暗が一様になるようになっているため、水平方向のライン上の画素を取り出した場合にも、また垂直方向のライン上の画素を取り出した場合にも、画素の階調値が急変する点としてのエッジの数があまり変わらないという特徴がある。また文字が印刷されている領域においてライン上の画素を取り出した場合には、文字間／行間など、エッジが存在しない場所があり、コード領域とはその特徴が明らかに異なってくる。
【００１７】
そこで本実施形態では、ブロック内の水平／垂直ライン上のエッジ数が所定の範囲内となるブロックを検出することによって、精度よく一次元／二次元コードが含まれる領域のみを検出することが可能となり、また一次元コードと二次元コードとを容易に区別することができる。
【００１８】
図６は、ライン間相関によるコードの判定方法の説明図である。一次元コードでは、コード領域内でバーに垂直な直線とその近傍の平行な直線との間での相互相関の値が大きくなるが、バーに平行な直線とその近傍の平行直線との間での相互相関の値が小さくなるという特徴がある。図６では、垂直な２つのラインとして、黒のバーの内部、あるいは白のバーの内部に２つのラインを考えているが、黒のバーの内部を通るラインと、白のバーの内部を通るラインとの間で、相互相関をとった場合も同様である。
【００１９】
これに対して二次元コードでは、水平な２本のラインの間でも、あるいは垂直な２本のラインの間でも、相互相関の値はともに小さくなるという特徴がある。また文字や写真が印刷されている領域においても、一次元コードの場合ほど強い相関を示すことはほとんどない。
【００２０】
そこでブロック内の水平ライン間、あるいは垂直ライン間の相関の値が所定の範囲内となるブロックを検出することによって、一次元／二次元コードが含まれる領域を精度よく検出することが可能となると共に、一次元コードと二次元コードとを容易に区別することが可能となる。
【００２１】
図７は、一次元コードにおける回転の有無の判定方法の説明図である。前述のように一次元コードに対しては、本来コードを形成するバーに対して直交する方向の１ライン分のデータを使用してバーコード認識を行うことになるが、一次元コードが９０°回転した状態となっていると、ラインの方向がバーの方向と平行になり、正しいコード認識ができない。そこでコードの回転の有無を検出する必要がある。
【００２２】
図７において、一次元コードが本来の方向、すなわち水平方向に存在する場合には、水平方向エッジ数は白バーと黒バーの数に対応する数だけ存在するのに対して、垂直方向エッジ数は０となる。また水平ライン間の相関は大きくなるが、垂直ライン間の相関は小さくなるという特徴がある。
【００２３】
これに対して一次元コードが９０°回転している場合には、水平方向エッジ数は０であるのに対して、垂直方向エッジ数は白バーと黒バーの数に対応した数だけ存在し、水平ライン間相関は小さいのに対して、垂直ライン間相関は大きくなるという特徴がある。
【００２４】
この性質を利用して、画像データ内で一次元コードが水平方向を向いているか、あるいは９０°回転した状態となっているかを精度よく判別することが可能となる。
実際のコードの判別においては、上記に説明した判定条件を複数個適宜組み合わせることによって、精度よく一次元コードや二次元コードが含まれる領域のみを検出することが可能となる。また特に白黒画素数、エッジ数、相関などは、それらのとり得る値の範囲が一次元コードと二次元コードとの間である程度異なってくる場合もあるが、本実施形態ではそれぞれの所定の範囲を一次元コードと二次元コードとの間で区別することなく処理を行うものとして説明する。これによってそれぞれの判別のための処理を分けたりする必要が無くなり、結果として簡単な処理シーケンスで高速にコード判別を行うことが可能となる。
【００２５】
図８は、コード種類及び特性の判別処理の全体フローチャートである。同図において処理が開始されると、まず入力画像データの中から注目するブロックが選択される（Ｓ11）。ブロックは画像の任意の位置から順番に選択していくものとする。通常は左上の隅から順次走査して選択したり、画像中央から周辺部に向かって走査したりする場合が多い。処理対象の特性上、コードが存在する可能性がより高い位置からブロックを選択する方がコードをすぐに検出でき、処理時間を短くすることができる。
【００２６】
ブロック内の画素の階調値に対する標準偏差（ＳＤ：Standard Deviation）が算出され（Ｓ12）、その値があらかじめ定められた値ＳＤｃｏｄｅを超えているかが判定され（Ｓ13）、超えている場合には水平方向エッジ数ＨＥｄｇｅが算出され（Ｓ14）、垂直方向エッジ数ＶＥｄｇｅが算出され（Ｓ15）、これらの値があらかじめ定められた所定の値ＥＤＧＥｍｉｎを超えているかが判定される（Ｓ16）。
【００２７】
水平方向エッジ数、垂直方向エッジ数のいずれか１つ以上が所定の値を超えている場合には、黒画素率ＢＰＲａｔｉｏが算出され（Ｓ17）、水平ライン間相関ＨＳｏｕｋａｎが算出され（Ｓ18）、垂直ライン間相関ＶＳｏｕｋａｎが算出され（Ｓ19）、黒画素率が所定の最小値ＢＰＲＡＴＩＯｍｉｎを超えており、かつ所定の最大値ＢＰＲＡＴＩＯｍａｘ未満であるか否かが判定される（Ｓ20）。
【００２８】
この判定条件が成立している場合には、そのブロックがコード領域と判定され（Ｓ22）、その後そのコード領域が一次元コードであるか否かが判定される（Ｓ23）。この一次元コードの判定については図９でさらに詳細に説明する。
【００２９】
黒画素率に関する判定条件が成立しない場合には、水平ライン間相関、または垂直ライン間相関がそれぞれ所定の最小値ＳＯＵＫＡＮｍｉｎを超えているか否かが判定され（Ｓ21）、いずれかのライン間相関が所定の最小値を超えている場合にはステップＳ22以降の処理が行われる。
【００３０】
コード領域が一次元コードであると判定された場合にはその一次元コードが回転した状態であるか否かが判定される（Ｓ24）。その判定の詳細については後述する。回転ありと判定された場合には、一次元コードが回転しているものとしてのデコード処理が行われて（Ｓ25）、処理を終了し、また、回転がない（水平）と判定された場合には一次元コードが通常状態、すなわち水平方向にあるものとしてのデコード処理が行われて（Ｓ26）、処理を終了する。
【００３１】
コード領域が一次元コードでないと判定されると、その領域が二次元コードであるか否かが判定され（Ｓ27）、二次元コードである場合には二次元コードに対するデコード処理が行われ（Ｓ28）、処理を終了する。
【００３２】
ステップＳ13で標準偏差が所定の値以下である場合、ステップＳ16で水平方向エッジ数、垂直方向エッジ数のいずれもが所定の最小値以下である場合、ステップＳ21で水平ライン間相関、または垂直ライン間相関のいずれもがその最小値以下である場合、およびステップＳ27で二次元コードでないと判定された場合には、ステップＳ11に戻り、次のブロックを選択してステップＳ12以降の処理が繰り返される。なおステップＳ27で二次元コードでないと判定されることは基本的にはありえないが、このような場合にはなんらかのエラーがあったものとして、ステップＳ11以降の処理が繰り返される。またステップＳ24において、コードが無いと判定された場合にも、エラーと見なしてステップＳ11以降の処理が繰り返される。
【００３３】
図９は、図８のステップＳ23における一次元コード判定処理の詳細フローチャートである。同図において処理が開始されると、まず画素の階調値の標準偏差ＳＤ（Standard Deviation）が所定の値を超えているか否かが判定される（Ｓ31）。この所定の値は例えば図８のステップＳ13におけると同じとする。所定の値を超えている場合には水平方向エッジ数、または垂直方向エッジ数の少なくともいずれか１つが所定の最小値を超えているか否かが判定される（Ｓ32）。この所定の最小値もステップＳ16におけると同じとする。
【００３４】
いずれか１つのエッジ数が所定の最小値を超えている場合には、水平ライン間相関、または垂直ライン間相関が所定の最小値（ステップＳ21と同じ）を超えているか否かが判定され（Ｓ33）、超えている場合には一次元コード領域と判定されて（Ｓ34）、処理を終了し、図８のステップＳ24の処理に移行する。
【００３５】
ステップＳ31で標準偏差、ステップＳ32で水平方向エッジ数と垂直方向エッジ数の両者、ステップＳ33で水平ライン間相関と垂直ライン間相関の両者がそれぞれ対応する所定の値以下であると判定された場合には、一次元コードでないと判定され（Ｓ35）、処理を終了し、図８のステップＳ27の処理に移行する。
【００３６】
図１０は、図８のステップＳ24における回転有無の判定処理の詳細フローチャートである。同図において処理が開始されると、まず水平方向エッジ数が所定の最小値を超えており、かつ水平ライン間相関が所定の最小値を超えているか否かが判定される（Ｓ37）。この判定は、図７の左側で説明したように一次元コードが水平方向となっている条件であり、この条件が成立すると、垂直方向エッジ数が所定の最小値を超えており、かつ垂直ライン間相関が所定の最小値を超えているか否かが判定される（Ｓ38）。この条件は図７の右側にある一次元コードの回転状態に対応する。この条件が成立しない場合には一次元コードは水平方向と判定され（Ｓ41）、図８のステップＳ26の処理に移行する。
【００３７】
ステップＳ38の判定条件が成立する場合は、一次元コードは水平方向でもなく、９０°回転した方向でもなく、例えば斜めの方向になっている場合に相当する。この場合には水平ライン間相関ＨＳｏｕｋａｎが垂直ライン間相関ＶＳｏｕｋａｎ超えているか否かが判定され（Ｓ39）、超えている場合には一次元コードが水平方向と判定され（Ｓ41）、図８のステップＳ26の処理に移行する。
【００３８】
ステップＳ37で判定条件が成立しない場合には、ステップＳ38におけると同じ判定条件が成立するか否かが判定され（Ｓ40）、成立する場合、およびステップＳ39で水平ライン間相関が垂直ライン間相関以下であると判定された場合には、一次元コードが回転していると判定され（Ｓ42）、図８のステップＳ25の処理に移行する。またステップＳ40で判定条件が成立しない場合には、コードなしと判定され（Ｓ43）、何らかのエラーが発生したものとして図８のステップＳ11以降の処理が繰り返される。
【００３９】
図１１は、図８のステップＳ27における二次元コード判定処理の詳細フローチャートである。同図において処理が開始されると、画素の階調値の標準偏差が所定の値を超えているか否かが判定され（Ｓ45）、超えている場合には水平方向エッジ数と垂直方向エッジ数のいずれもが所定の最小値を超えているか否かが判定される（Ｓ46）。超えている場合には黒画素率が所定の最小値を超えており、かつ所定の最大値未満であるか否かが判定される（Ｓ47）。この条件が成立する場合には二次元コードと判定され（Ｓ48）、図８のステップＳ28の処理に移行する。これに対してステップＳ45で標準偏差が、ステップＳ46で水平方向エッジ数、または垂直方向エッジ数の少なくともいずれか１つがそれぞれ所定の値以下の場合、またはステップＳ47で黒画素率が所定の最小値と所定の最大値の間に入っていない場合には、二次元コードでないと判定され（Ｓ49）、図８のステップＳ11以降の処理が繰り返される。
【００４０】
以上のフローチャートにおいては、前述のように例えば水平方向エッジ数や、垂直方向エッジ数などの所定の最小値として一次元コードと二次元コードに対して共通の値を用いて判定を行うものとしたが、これらの所定の値として一次元コードに対する値と二次元コードに対する値を区別して処理を実行することも当然可能である。また、例えば図９の一次元コード判定処理における判定条件は図８のステップＳ13、Ｓ16、およびＳ21に含まれており、例えばステップＳ21の判定条件が成立した時点で処理対象ブロックは一次元コード領域であると判定して、ステップＳ24の一次元コードの回転有無の判定処理を行うことも可能である。
【００４１】
図１２は、本発明の第１の実施形態に係るコード画像処理方法を説明するための概略図である。同図において、画像データの左上隅から横方向に小ブロック領域300毎に順次走査しながら二次元コードを探索する。走査で小ブロック領域300が第１の二次元コード100の内部に入って、第１の二次元コード100内の位置310で領域内の画像の特徴が二次元コードと合致する場合には、そのブロック領域中にコードが存在すると特定してその近傍に対して認識処理を続行し、二次元コードの認識に成功したら、さらに第１の二次元コード100の領域を抽出する（図１２（ａ）参照）。これについては後述する。第１の二次元コード100の領域抽出に成功したら、図１２（ｂ）に示すように、引き続き、小ブロック領域300毎の走査を続け、第２の二次元コード200を探索する。その際、認識済みコードである第１の二次元コード100の領域にさしかかった時には、その領域をスキップして探索を続ける。これについても後述する。この操作を繰り返して、第２の二次元コード200を高速に見つけることができる。
【００４２】
これにより、スキップした小ブロック領域でのブロック判別処理及びコード認識処理を削減することができ、画像データ上の全二次元コードの探索処理を高速化することが可能となる。
【００４３】
ここで二次元コードの認識処理について概説すると、二次元コードの認識は、コード領域抽出処理、解像度変換処理、デコード処理の順に実行される。まずコード領域抽出処理では、コード内部座標検出が行われ、次にセル幅の検出が行われ、最後にコード境界の検出処理が行われる。解像度変換処理は、コード画像の１セルのデータを１画素のデータに変換する処理である。
【００４４】
図１３は、二次元コードの境界検出方法の原理的な説明図である。画像データを得る際に光学歪みやピントのボケが発生するとＱＲコードの位置決め用シンボルが正しく検出できなくなることがあったが、本実施形態においてはコードの回りに存在する白領域、すなわちクワイエットゾーン102を検出することによって、二次元コードの境界を検出することが可能となる。例えば、ＱＲコードではコードの周囲に５セルの幅を持つ白領域（クワイエットゾーン）（図２８に関連記載あり）が存在し、そのクワイエットゾーンは光学歪みやピントのボケにほとんど影響されないため、二次元コードの境界を正しく検出することが可能となる。
【００４５】
図１２において走査で小ブロック領域300が第１の二次元コード100の内部に入って、第１の二次元コード100内の位置310で領域内の画像についてその特徴を調べる。まず、二次元コード100内の位置310を基点に上下左右の方向に白領域、および黒領域の連続長の長さを検出し、その長さの頻度によって分布を求め、頻度がある一定値以上になる範囲内で最小の連続長の長さをセル幅として求める。これを図１４を用いて説明する。
【００４６】
図１４は、セル幅の検出方法の説明図である。同図において二次元コード内部の適当な点から上下左右の方向に白領域、および黒領域の連続長の長さを検出し、その長さの頻度によって分布を求め、頻度がある一定値以上になる範囲内で最小の連続長の長さをセル幅として求めている。画像内部ではピンボケやノイズなどの影響によって、セル幅とは関係のない連続長が検出されることがあるために、値の小さな連続長は無視し、ある特定の値以上の頻度を持つ範囲で最小の連続長をセル幅として求めることになる。なお二次元コードにおいて白と黒のセル幅は同じであるとする。
【００４７】
図１５は、コード境界を検出するための第１の白連続長の検出方法の説明図である。同図において二次元コードの内部の適当な点から上下左右のいずれか１つの方向に画像を走査し、白セルが連続する白連続長の検出を行う。図１５では左側への走査を行い、第１の白連続長として５セル幅長を検出することとなる。
【００４８】
図１６は、コード境界を検出するための第２の白連続長検出方法の説明図である。ここでは図１５で検出された第１の白連続長と交差する方向に第２の白連続長の検出を行う。第１の白連続長上の１つの点を中心としてあらかじめ定められた直径の円を描き、その円周上の１つの点と、その点と中心に関して対称な点とを結ぶ線分上の点が全て白であれば、その線分を第２の白連続長の一部として検出する。
【００４９】
第１の白連続長上の１つの点を中心として、あらかじめ定められた直径の円周上の各点に対応してそのような第２の白連続長が検出されない場合には、図１５の第１の白連続長の線分の上で円の中心となる点を移動させて、その点を中心とするあらかじめ定められた直径の円周上の点に対応して第２の白連続長を検出する処理を繰り返す。その処理を二次元コードを含む画像の例えば左端の位置まで繰り返す。
【００５０】
図１７および図１８は第２の白連続長としてのコード境界の検出方法の説明図である。図１７は、コード内部の第１の白連続長上の点を中心とした或る定められた円周上の点を対象とする第２の白連続長検出動作の説明図である。第２の白連続長を検出するための円の直径をある程度以上大きくすることによって、コードの内部ではそのような長い白連続長を第２の白連続長として検出することはできない。
【００５１】
図１８は、コード境界における第２の白連続長の検出動作の説明図である。前述のようにコード境界においてクワイエットゾーンが存在するため、第２の白連続長を検出するための円の直径以上の長さの白連続長が検出可能である。実際には後述するようにこのような円の直径と同じ長さの白連続長が検出された時点で、さらにその線分を両側に伸ばし、延長された線分上の点が全て白であるか否かが検出され、全て白である場合に、その線分を二次元コードのクワイエットゾーンにおける第２の白連続長として検出する。
【００５２】
図１９は、境界検出処理の開始点の位置の説明図である。コード境界を検出するための第１の白連続長検出処理は、コード内部の適当な点を開始点として開始される。コード外部の点を開始点とすれば、二次元コード以外の図表や文字の領域において境界検出処理が行われてしまうことになる。この開始点は、二次元コードと判定されたブロックに対応してその位置が特定される。
【００５３】
図２０は、上下左右４方向の二次元コード境界検出の説明図である。前述のように境界検出処理の開始点から上下左右の各方向に対して画像を走査し、第１の白連続長、および第２の白連続長を検出することによって、二次元コードのクワイエットゾーンに相当する上下左右４方向における境界が検出される。
【００５４】
このように上下左右の境界が検出されると二次元コードの画像内における傾き角度を求めることもできる。例えばその簡略的な方法として、境界を直線と見なして、その傾きからコードの傾き角度を求めることもでき、より精密な方法として境界の検出結果を用いて位置決め用シンボルの位置を特定し、その位置から二次元コードの傾き角度を計算することもできる。
【００５５】
図２１は、白セルと黒セルとを区別するための閾値の決定方法の説明図である。二次元コードに対する光の照射量が少ない場合や、センサの感度が低い場合などにおいては、閾値を、例えば２５６諧調の中間の１２８のように固定した場合にセルの黒、白を正確に判定することができないことがある。例えば、光の照射量が少ない場合には階調値のレンジが全体的に低いレベルに下がり、かすれやつぶれが発生する。そのようなかすれやつぶれの影響を排除するために、図２１に示す閾値の決定方法を用いる。
【００５６】
一般的に二次元コードは白と黒の２値で表現されたものが多く、入力画像の各セルに対する階調値のヒストグラムでは図２１に示されるように明るい領域と暗い領域で２つのピークが生ずる。頻度がそれぞれある一定値以上であり、最も左側にある階調値のピークと、右側にある階調値のピークとに対応する階調値の中間（平均値）を閾値の値として決定することによって、かすれやつぶれの影響を排除して、白セルと黒セルとの判定を正確に行うことが可能となる。
【００５７】
黒セルと白セルの判定方法として、このような閾値を用いる代わりに、注目セルとその周囲のセルの階調値とを比較し、その差がある一定値以上である場合には階調値の大きなセルを白セル、小さなセルを黒セルと判定する方法を用いることもできる。
【００５８】
図２２は、領域ごとの閾値決定方法の説明図である。二次元コードの画像領域の大きさや、光の照射方向などによって生じる影の影響などによって、黒セルと白セルを判別するために二次元コードの画像領域全体に一定の閾値を用いた場合には、正確な判別ができない場合がある。すなわち光源の位置などの影響によって、影の濃い部分と薄い部分とができるような場合には、影の濃い部分と薄い部分とで閾値を変更して黒セルと白セルとの判別を行う必要がある。
【００５９】
例えば図２２において右方向に画像を走査していく場合に、例えばある一定距離毎に閾値を修正して第１の白連続長、および第２の白連続長の検出処理を行う。この閾値修正を行う走査距離については、例えば光源の位置やその強度などを変更して実験を繰り返し、適切な距離を決定することができる。
【００６０】
以上で概略を説明した、二次元コード境界検出方法について図２３〜図２５のフローチャートを用いてさらに詳細に説明する。図２３は、コード境界検出処理の全体フローチャートである。ここで検出対象となる二次元コードは、例えば前述のＱＲコードであるものとするが、他の二次元コードに対する処理も実行することができる。
【００６１】
図２３において処理が開始されると、まずステップＳ７１で閾値を更新する距離に対応する閾値エリアのカウンタが０に初期化され、現在の処理対象の点の座標ｎＸＰｏｓ、およびｎＹＰｏｓにコード内部の走査開始点、すなわち上述の説明において検出された二次元コード領域の内部の点の座標ｒ−ｎｘ−ｃｔ、およびｒ−ｎｙ−ｃｔが代入され、ステップＳ７２で現在の点のＸ座標ｎＸＰｏｓが、画像の左端の点のＸ座標ｎＸＥｄ（＝０）以上であるか否かが判定される。なおここでは図２０で説明したように開始点から左方向に画像を走査するものとして、処理のフローチャートを説明する。
【００６２】
ステップＳ７２で現在の点が画像の左端に達していないと判定されると、ステップＳ７３で閾値エリアのカウンタの値が閾値の更新が必要となる値ｎＴｈＡｒｅａを超えたか否かが判定され、超えている場合にはステップＳ７４で閾値ｎＴｈｒｅｓｈを更新するために閾値の検出処理が行われる。閾値の検出処理は図２１で説明した方法によって行われる。
【００６３】
ステップＳ７４の処理に続いて、ステップＳ７５で閾値エリアのカウンタの値が０に初期化された後に、またステップＳ７３でカウンタの値が閾値更新を行うべき値を超えていない場合には、ステップＳ７６の第１の白連続長検出処理に移行する。この処理については図２４で詳細に説明するが、この検出処理に対応して第１の白連続長を示すｎＷＲａｎｇｅ、閾値エリアのカウンタの値、現在の点の座標値、および閾値ｎＴｈｒｅｓｈの変数の値が引き渡される。なおこれらの値のうち、現在の点のＹ座標ｎＹＰｏｓ、および閾値ｎＴｈｒｅｓｈ以外の値は第１の白連続長検出処理において更新される。なお第１の白連続長検出処理の処理中に閾値エリアのカウンタ値がｎＴｈＡｒｅａの値を超える可能性もあるが、ここでは第１の白連続長は比較的短く、この処理中には閾値は更新されないものとする。
【００６４】
第１の白連続長検出処理が終了すると、ステップＳ７７で第１の白連続長検出処理において白連続長が検出されず、エラーとなったか否かが判定され、エラーとなった場合には処理を終了する。第１の白連続長の検出に成功した場合には、ステップＳ７８で第２の白連続長検出の終了判定処理に用いられるカウント値ｎＷＣｏｕｎｔの値が０に初期化され、ステップＳ７９でそのカウント値が第１の白連続長を表すｎＷＲａｎｇｅ未満であるか否かが判定され、未満であるときにはステップＳ８０で第２の白連続長の検出が行われる。この処理については図２５で詳細に説明するが、この処理に対して現在の点のＸ座標とＹ座標、および閾値の値が引き渡される。
【００６５】
続いてステップＳ８１で第２の白連続長の検出に成功したか否かが判定され、成功した場合には処理を終了し、成功しない場合にはステップＳ８２でｎＷＣｏｕｎｔと閾値エリアのカウンタの値がインクリメントされ、現在の点のＸ座標がデクリメントされた後にステップＳ７９以降の処理が繰り返される。
【００６６】
すなわち図１５および図１６で説明したように、第１の白連続長に対応する線分上で左方向に現在の点を移動させながら、第２の白連続長を検出する処理を繰り返すことになる。この処理の繰り返しはステップＳ７９でｎＷＣｏｕｎｔの値がこの第１の白連続長の長さ、すなわちｎＷＲａｎｇｅに達した時点で終了し、再びステップＳ７２以降の処理が繰り返されることになる。
【００６７】
図２４は、第１の白連続長検出処理の詳細フローチャートである。同図において処理が開始されると、ステップＳ８６で現在の点のＸ座標、Ｙ座標が変数ｘ、ｙに代入され、ステップＳ８７でｘが画像データの左端に達していないかが判定され、達していない場合にはステップＳ８８で座標ｘ、ｙの点の階調値のデータが閾値未満であるか否かが判定される。本実施形態では、明るいセル、すなわち白いセルに対する階調値が、黒いセルに対する階調値より大きくなっているため、階調値が閾値未満であることは、現在処理対象となっているセルが黒であることになり、白セルを見つけるまで次のステップＳ８９からＳ９１の処理が繰り返される。
【００６８】
ステップＳ８９では、閾値エリアのカウンタがインクリメントされ、処理対象セルの座標ｘがデクリメントされ、ステップＳ９０でステップＳ８７と同様に画像の左端に達していないか否かが判定され、達していない場合にはステップＳ９１でＳ８８と同様に階調値が閾値未満であるか否かが判定される。閾値未満である場合にはステップＳ８９以降の処理が繰り返される。
【００６９】
ステップＳ９１で階調値が閾値以上である場合、およびステップＳ８８で同様に階調値が閾値以上である場合には、ステップＳ９２で処理中のセルの座標ｘが第１の白連続長の開始点のＸ座標を示すｎＸｓｔに代入され、ステップＳ９３の処理に移行する。
【００７０】
ステップＳ９３からＳ９５において閾値エリアのカウンタの値がインクリメントされ、処理中のセルのＸ座標ｘがデクリメントされた後に、処理中のセルが画像の左端に達していないか、またセルが白であるかの判定が行われ、これらの判定が共に成立する場合には、これらの処理が繰り返され、ステップＳ９５でセルの階調値が閾値以下であり、セルが黒と判定されると、ステップＳ９６でセルのＸ座標ｘが第１の白連続長の終りの点のＸ座標を示すｎＸｅｄに代入され、ステップＳ９７で第１の白連続長の長さを示すｎＷＲａｎｇｅが求められ、図２３の全体処理において処理中のセルのＸ座標を示すｎＸＰｏｓの値が第１の白連続長の開始点の座標ｎＸｓｔの値とされ、第１の白連続長の検出の成功を示すフラグｎＥｒｒＦｌａｇ１の値が１とされて処理を終了し、リターンが行われる。
【００７１】
ステップＳ８７、ステップＳ９０、およびステップＳ９４のいずれかにおいて処理中のセルのＸ座標を示すｘが画像データの左端ｎＸＥｄに達したと判定されると、ステップＳ９８で第１の白連続長の検出の成功を示すフラグが−１、すなわち失敗を示す値に設定された後に処理を終了してリターンが行われる。
【００７２】
図２５は、図２３のステップＳ８０における第２の白連続長検出処理の詳細フローチャートである。同図において処理が開始されると、まずステップＳ１０１で図２４のステップＳ８６と同様に現在の処理対象のセルの座標ｘ、ｙの設定が行われる。ステップＳ１０２でこれらの座標によって決まる点を中心とした円が描かれ、その円周上の点が求められる。ここでこの円は前述のように第２の白連続長を検出するためのものであり、コード内部で第２の白連続長が検出されることがないように、ある程度大きな直径を持つ円が使用される。
【００７３】
続いてステップＳ１０３で円周上の点のインデックスとしてのｊが０に初期化され、ステップＳ１０４でｊの値がステップＳ１０２で求められた円周上の点の数Ｃｉｒｃｕ  Ｐｏｉｎｔ  Ｎｕｍ未満であるか否かが判定され、未満である場合にはステップＳ１０５で、インデックスｊで示される円周上の点における階調値Ｃｄａｔａ［ｊ］の値が閾値以上であるか否かが判定され、閾値以上、すなわち白である場合にはステップＳ１０６で、インデックスｊによって示される円周上の点と円の中心に関して対称な位置にある点の階調値ＣｄａｔａＲｅｖ［ｊ］が閾値以上であるか否かが判定される。閾値以上である場合にはステップＳ１０７でこれらの２つの点を結ぶ線分上の点の色が全て調べられ、全て白であるか否かがステップＳ１０８で判定され、全て白である場合には前述のようにステップＳ１０９で、その線分の外側にさらに延長線が引かれ、延長線上の点が全て白であるかが調べられ、ステップＳ１１０でそれらの点が全て白であるか否かが判定され、全て白である場合にはステップＳ１１２で第２の白連続長の検出成功を示すフラグｎＥｒｒＦｌａｇ２の値が１に設定された後に処理を終了し、リターンが行われる。なおステップＳ１０９で引かれる延長線の長さは、例えば延長線の長さを含む全体の線分の長さが、円の直径の２倍となるような長さとされる。
【００７４】
ステップＳ１０５で、円周上のインデックスｊで示される点、またはステップＳ１０６でその点と円の中心に関して対称な点の階調値が閾値未満である時、ステップＳ１０８、またはＳ１１０で線分上の点、または延長線上の点の一部が白でない時には、ステップＳ１１１でｊの値がインクリメントされた後にステップＳ１０４以降の処理が繰り返される。すなわちステップＳ１０２で求められた円周上の点を移動させながら、第２の白連続長の検出処理が続けられる。そしてステップＳ１０４で円周上の点に対する処理が全て終了したと判定されると、第２の白連続長の検出に失敗したことになるため、ステップＳ１１３でフラグの値が−１とされて処理を終了し、リターンが行われる。
【００７５】
図２６は、図３に示すブロック走査制御過程５の処理を詳しく説明するためのフローチャートである。図２６においてブロック走査制御過程では、まず対象ブロックにおいてコード認識が行われたか否かを判別する（Ｓ121）。コード認識が行われていない場合には、次のブロックに移動する（Ｓ124）。コード認識が行われている場合、認識に成功（Ｓ122）していれば、認識済みのコード領域を設定する（Ｓ123）。認識に失敗（Ｓ122）した場合は、次のブロックに移動する（Ｓ124）。移動した次のブロックが、画像データの内部からはみ出した（Ｓ125）場合には、対象画像データの全領域を探索し終えたものとして処理を終了する。次のブロックが、設定されている認識済みのコード領域内である（Ｓ126）場合には、更に次のブロックへ移動して処理を続ける（Ｓ124）。このように、認識済みのコード領域をスキップして、処理を行うことで、コード探索に係る処理時間を短縮することが可能となる。
【００７６】
［実施形態２］
図２７は、本発明の第２の実施形態に係るコード画像処理方法を説明するための概略図である。本実施形態では、画像データに複数、例えば２つの二次元コードが配置される例について説明する。複数の二次元コード、例えば第１の二次元コード400と第２の二次元コード500には、それぞれコードデータの外に、関連情報として互いの処理方法（例えば、互いの二次元コードをどのように「連結」するか）および相対位置情報が格納される。
【００７７】
図２７の読取り画像において、(１)読み取った画像データに対して小ブロック領域300を画像データの左上隅から横方向に走査しながら二次元コードを探索し、走査で小ブロック領域300が画像データ右上の第１のコード400の内部に入った場合には、ここに二次元コードが有ると判定され、第１の二次元コード400の認識が行われる。第１の二次元コード400の認識結果に基づいて第１の二次元コード400からコードデータとして、例えば「○×中央病院」を得る。(２)次いで関連するコードの位置情報の検出を行い、第１の二次元コード400からコードデータとして、例えば位置情報「-400、-600」を得る。(３)この位置情報に基づいて、第２の二次元コード500のコード認識を行う。第２の二次元コード500からコードデータとして、例えば「2004年○月×日受信分」を得る。(４)ここで、第１の二次元コード400の関連情報には、指定処理として「連結」と連結の仕方が指示されているから、読取った順に第２の二次元コード500のコードデータを「連結」して処理する。(５)その結果、出力するコードデータは、例えば「○×中央病院 2004年○月×日受信分」を得ることになる。こうすることで、複数の二次元コードに分けて格納した関連情報に基づいて、その指定処理にしたがってコードデータを「連結」処理することにより、コードデータを一つにまとめ、一つの二次元コードでは格納しきれない大きなデータでも格納可能となり二次元コードの利用を拡大させることが可能となる。
【００７８】
図２８は、本発明の第２の実施形態に係るコード画像処理方法における基準座標の設定を説明するための図である。二次元コードの認識が成功した場合、まず二次元コードに格納されている位置情報を取り出す。位置情報には、二次元コードの１つの特徴点（ここでは左下の頂点）を基準座標、すなわち座標原点に、二次元コードの向き（ここでは、左辺と下辺）を軸（左辺上向きをＹ軸、下辺走査方向をＸ軸）にした座標に対して、二次元コードの大きさに関する特徴量（ここでは二次元コードの１つのセル105の大きさ）を基準に位置（相対位置）情報が記述される。図２７において第１の二次元コード400から見た第２の二次元コード500の相対位置情報は、セルの大きさを単位にかつ座標の向きを考慮して、「（-400、-600）」と記述される。このようにすることで、画像データの大きさや傾きなどの要因に影響されること無く位置（相対位置）情報を記述することが可能である。もちろん、画像データの上の二次元コード以外の特徴点を基準座標として記述することも可能であるが、この場合は、基準座標を認識する処理が別途必要となる。
【００７９】
次に、位置（相対位置）情報にしたがい、関連した第２の二次元コード500の位置を求める。すなわち、図２７に示した第２の二次元コード500は第１の二次元コード400に格納された位置情報によって座標上でその位置が画像データ左下に有ることが分るので、直ちに第２の二次元コード500のコード認識を行うことができる。これにより、２つの二次元コードの間に存在するブロック領域では小ブロックによる探索、ブロック判別処理及びコード認識処理を削減することができ、処理を高速化することが可能となる。また、位置（相対位置）情報によって関連する二次元コードの位置を正確に知ることができるため、認識精度も向上する。
【００８０】
なお、第２の二次元コード500にも位置情報として、第２の二次元コード500から見た第１の二次元コード400の位置（相対位置）情報を格納しておくことによって、小ブロック領域単位の走査を左下から開始した場合でも同様の手順にて２つの二次元コードの認識を高速に行うことが可能である。
【００８１】
第１の二次元コード400および第２の二次元コード500の認識に成功したら、両方の二次元コードに格納されている処理方法に基づいて情報を処理する。ここでは、コードデータ１をコードデータ２に「連結」して出力するという処理方法が指示されているので、二次元コード400から取り出したコードデータに二次元コード500から取り出したコードデータを結合して１つのコードデータとして出力する。これにより、処理方法について別途指示しなくても、コードデータを適切に処理することが可能となる。また、一つの二次元コードでは表現しきれないコードデータでも、複数の二次元コードに分割して格納して処理することで二次元コードの活用をさらに拡大させることが可能となる。
【００８２】
図２９は本発明の第２の実施形態に係るコード画像処理方法を説明するためのフローチャートである。同図において、ブロック走査を開始しブロック位置でのコード認識が実行（Ｓ132）されるまでブロック走査を続ける（Ｓ131）。ブロック位置でのコード認識に成功（Ｓ133）したら、その中に格納されているコードデータを解析し、関連する他のコードの位置情報が含まれているかどうかを判別する（Ｓ134）。他のコードの位置情報が含まれている場合は、その位置に移動（Ｓ135）して、コード認識を行う（Ｓ136）。他のコードの位置情報が含まれていない場合は、これまで通りブロック走査を繰り返す（Ｓ138）。対象画像データの全領域を探索し終えたら（Ｓ137）、認識したコードに処理情報が含まれているかどうかを判別する（Ｓ139）。処理情報が含まれている場合には、その情報に従った処理を行う（Ｓ140）。
【００８３】
［実施形態３］
図３０は、本発明の第３の実施形態に係るコード画像処理方法を説明するための概略図である。図３０に示す第３の実施形態に係るコード画像処理方法が図２７に示す第２の実施形態に係るコード画像処理方法との違いは、マウスなどのポインティングデバイス操作で画像データ内の１つの二次元コード領域を指定できるよう構成した点である。その以外の構成は、図２７で説明したのと同様なのでここでの説明を省略する。
【００８４】
図３１は本発明の第３の実施形態に係るコード画像処理方法を説明するフローチャートである。同図において、まず画像データに対して、任意の方法で、例えば、マウスなどのポインティングデバイス操作で画像データ内の１つの二次元コード、例えば第１の二次元コード400の位置を指定する（Ｓ151）。次いで第１の二次元コード400の認識に成功（Ｓ152）したら、その中に格納されているコードデータを解析し、他の関連する二次元コード、例えば第２の二次元コード500の位置情報が含まれているかどうかを判別する（Ｓ153）。二次元コードの位置情報が含まれている場合は、その位置に移動（Ｓ154）して、二次元コードの認識を行う（Ｓ155）。二次元コードの位置情報が含まれていない場合は、他の二次元コードの位置の指定を行う（Ｓ157）。対象画像データ中に含まれている全ての二次元コードの認識を終えたら（Ｓ156）、認識した二次元コードに処理情報が含まれているかどうかを判別する（Ｓ158）。二次元コードに処理情報が含まれている場合には、その情報に従った処理を行う（Ｓ159）。
【００８５】
以上において本発明のコード画像処理方法についてその詳細を説明したが、この方法を実行するコード読取装置は当然一般的なコンピュータシステムをその主要構成部として構成することが可能である。
【００８６】
図３２は、本発明におけるプログラムのコンピュータへのローディングを説明する図である。同図においてコンピュータシステムは中央処理装置（ＣＰＵ）１０、リードオンリメモリ（ＲＯＭ）１１、ランダムアクセスメモリ（ＲＡＭ）１２、通信インタフェース１３、記憶装置１４、入出力装置１５、記録媒体の読取り装置１６、およびこれらの全てが接続されたバス１７によって構成される。
【００８７】
記憶装置１４としてはハードディスク、磁気ディスクなど様々な形式の記憶装置を使用することができ、このような記憶装置１４、またはＲＯＭ１１に図８〜図１１、図２３〜２６、図２９、図３１のフローチャートに示された媒体に格納されたプログラムがＣＰＵ１０によって実行されることにより、本実施形態における一次元／二次元コードを含むコードが存在するブロックの検出、コードの種類の判別、コードの認識などが可能となる。
【００８８】
このようなプログラムは、情報提供者１８側からネットワーク１９、および通信インタフェース１３を介して、例えば記憶装置１４に格納されることも、また市販され、流通している記録媒体２０に格納され、読み取り装置１６にセットされて、ＣＰＵ１０によって実行されることも可能である。
【産業上の利用可能性】
【００８９】
本発明のコード画像処理方法によれば、画像データにコードが複数含まれている場合でも、一つのコード認識で止まることなく、認識したコード領域におけるコード判別処理及びコード認識処理をスキップするので、コード全体の探索と認識を高速かつ確実に行うことが可能であるので、任意の数、位置および大きさの二次元コードが一つの文書に複数配置されて利用されるようになり、コード利用形態を拡大させることが可能となる。
【図面の簡単な説明】
【００９０】
【図１】従来のコード画像処理方法を説明するための概略図である。
【図２】コードの位置情報を記録したレイアウトのテンプレートの情報を使用して二次元コードを認識する従来のコード画像処理方法を説明するための概略図である。
【図３】本発明の第１の実施形態に係るコード画像処理方法の原理説明図である。
【図４】一次元コードと二次元コードの典型例を示す図である。
【図５】エッジ数によるコード判定方法の説明図である。
【図６】ライン間相関によるコードの判定方法の説明図である。
【図７】一次元コードの回転の有無の判定方法の説明図である。
【図８】コード種類及び特性の判別処理の全体フローチャートである。
【図９】一次元コード判定処理の詳細フローチャートである。
【図１０】一次元コード回転判定処理の詳細フローチャートである。
【図１１】二次元コード判定処理の詳細フローチャートである。
【図１２】本発明の第１の実施形態に係るコード画像処理方法を説明するための概略図である。
【図１３】二次元コードの境界検出方法の原理的な説明図である。
【図１４】セル幅の検出方法の説明図である。
【図１５】第１の白連続長検出方法の説明図である。
【図１６】第２の白連続長検出方法の説明図である。
【図１７】コード内部における第２の白連続長検出動作の説明図である。
【図１８】コード境界における第２の白連続長検出動作の説明図である。
【図１９】コード境界検出処理の開始点の位置の説明図である。
【図２０】上下左右４方向のコード境界検出の説明図である。
【図２１】閾値の設定方法の説明図である。
【図２２】領域ごとの閾値決定方法の説明図である。
【図２３】コード境界検出処理の全体フローチャートである。
【図２４】第１の白連続長検出処理の詳細フローチャートである。
【図２５】第２の白連続長検出処理の詳細フローチャートである。
【図２６】図３に示すブロック走査制御過程の処理を説明するためのフローチャートである。
【図２７】本発明の第２の実施形態に係るコード画像処理方法を説明するための概略図である。
【図２８】本発明の第２の実施形態に係る基準座標の設定を説明するための図である。
【図２９】本発明の第２の実施形態に係るコード画像処理方法を説明するためのフローチャートである。
【図３０】本発明の第３の実施形態に係るコード画像処理方法を説明するための概略図である。
【図３１】本発明の第３の実施形態に係るコード画像処理方法を説明するフローチャートである。
【図３２】本発明におけるプログラムのコンピュータへのローディングを説明する図である。
【図１】
0004531809.tif 000002
【図２】
0004531809.tif 000003
【図３】
0004531809.tif 000004
【図４】
0004531809.tif 000005
【図５】
0004531809.tif 000006
【図６】
0004531809.tif 000007
【図７】
0004531809.tif 000008
【図８】
0004531809.tif 000009
【図９】
0004531809.tif 000010
【図１０】
0004531809.tif 000011
【図１１】
0004531809.tif 000012
【図１２】
0004531809.tif 000013
【図２３】
0004531809.tif 000014
【図２４】
0004531809.tif 000015
【図２５】
0004531809.tif 000016
【図２６】
0004531809.tif 000017
【図２７】
0004531809.tif 000018
【図２８】
0004531809.tif 000019
【図２９】
0004531809.tif 000020
【図３０】
0004531809.tif 000021
【図３１】
0004531809.tif 000022
【図３２】
0004531809.tif 000023
【図１３】
0004531809.tif 000024
【図１４】
0004531809.tif 000025
【図１５】
0004531809.tif 000026
【図１６】
0004531809.tif 000027
【図１７】
0004531809.tif 000028
【図１８】
0004531809.tif 000029
【図１９】
0004531809.tif 000030
【図２０】
0004531809.tif 000031
【図２１】
0004531809.tif 000032
【図２２】
0004531809.tif 000033