(57)【特許請求の範囲】
【請求項１】
濃淡画像における濃度勾配方向の分布パターンを表す疑似画像を照合用データとして作成する処理と、モデル画像における濃度勾配方向の分布パターンを表す疑似画像をモデルデータとして前記照合用データに対応づけて、両疑似画像間における画素単位での濃度勾配方向の角度差を求める第１演算と、第１演算により算出された角度差を累計する第２演算とを実行することにより、前記照合用データとモデルデータとの不一致度を求める方法において、
前記照合用データを作成する処理では、０°以上３６０°未満の範囲にある角度を当該角度を２５６／３６０倍した値を整数に丸めた結果に相当する整数に置き換えるという定義に従って、前記濃淡画像中の少なくともエッジ画素を対象に、あらかじめ定めた基準の方向に対する特定の方向まわりの回転角度により対象画素における濃度勾配方向を表した場合の回転角度に対応する符号なし８ビット整数を、前記濃度勾配方向を表す角度データとして導出し、
前記第１演算では、前記照合用データと同じ定義に基づき作成されたモデルデータと前記照合用データとの間で対応関係にある画素の組毎に、組み合わせられた画素における角度データの差の値を２の補数表現による符号付き８ビット整数とみなして、当該差の絶対値を算出し、
前記第２演算では、前記第１演算で算出された差の絶対値を符号なし８ビット整数とみなして累計する演算を実行し、
前記照合用データとモデルデータとの間で対応関係にある画素の組の全てに対する前記第１演算および前記第２演算が終了したときの差の絶対値の累計値を、前記照合用データとモデルデータとの不一致度として特定する、
ことを特徴とする画像マッチング方法。
【請求項２】
請求項１に記載された方法において、
前記モデルデータとして、前記モデル画像における各画素の濃度勾配方向を前記定義に基づき表した角度データをそれぞれの座標に組み合わせた疑似画像をあらかじめ作成し、
前記照合用データを作成する処理では、モデル画像よりサイズが大きい濃淡画像を対象に、この画像内の各画素の濃度勾配方向を前記定義に基づき表した角度データをそれぞれの座標に組み合わせた疑似画像を照合用データとして作成し、
前記累計値を格納するための記憶領域として８ビットより大きい容量の記憶領域をＭ個（Ｍ≧２）設定すると共に、前記照合用データの画素配列にモデルデータの画素配列を合わせる対応づけステップを、モデルデータへの対応位置を一方の座標軸に沿ってＭ画素分の間隔をあけて動かしながら繰り返し、
毎回の対応づけステップでは、モデルデータ中の各画素に順に着目して、照合用データ中の着目画素に対応する位置にある画素からモデルデータへの対応位置の移動方向に沿って並ぶＭ個の画素を前記着目画素に個別に組み合わせて、組み合わせ毎に前記角度データを表す整数の差の絶対値を求める前記第１演算と、前記第１演算により得たＭ個の差の絶対値を前記Ｍ個の記憶領域に１つずつ対応づけて、各記憶領域内の累計値をそれぞれに対応づけられた差の絶対値の加算により更新する前記第２演算とを、それぞれＳＩＭＤ演算として実行する、画像マッチング方法。
【請求項３】
請求項２に記載された方法において、
毎回の対応づけステップでは、モデルデータ中の全ての画素に対する前記第１演算および前記第２演算が終了したときに前記Ｍ個の記憶領域に格納されている累計値の中の最小値をその対応づけステップにおける不一致度として特定すると共に、照合用データ内の前記モデルデータに位置合わせされている領域の位置と前記不一致度として特定された値が格納されていた記憶領域の前記Ｍ個の記憶領域内の順位とに基づき、前記照合用データ内における当該不一致度への対応位置を特定し、
毎回の対応づけステップにおいて特定された不一致度の中の最小値を特定して、その最小の不一致度への対応位置を前記モデルデータに対応する位置であると判定する、画像マッチング方法。
【請求項４】
請求項１に記載された方法において、
前記モデルデータとして、前記モデル画像における各画素の濃度勾配方向を前記定義に基づき表した角度データをそれぞれの座標に組み合わせた疑似画像をあらかじめ作成し、
前記照合用データを作成する処理では、モデル画像と同じサイズの濃淡画像を対象として、この画像の各画素の濃度勾配方向を前記定義に基づき表した角度データをそれぞれの座標に組み合わせた疑似画像を照合用データとして作成し、
前記累計値を格納するために８ビットより大きい容量の記憶領域を１つ設定して、前記照合用データの画素配列にモデルデータの画素配列を合わせて両者間で対応する画素の組み合わせをＭ組（Ｍ≧２）設定する対応づけステップを、対応関係にある全ての画素が組み合わせられるまで繰り返し、
毎回の対応づけステップにおいて、前記Ｍ組の組み合わせ毎に、組み合わせられた画素間での前記角度データを表す整数の差の絶対値を算出する前記第１演算を、ＳＩＭＤ演算として実行した後に、前記記憶領域内の累計値を、前記第１演算により算出されたＭ個の差の絶対値の総和を当該累計値に加算した値に更新する演算を、前記第２演算として実行する、画像マッチング方法。
【請求項５】
請求項４に記載された方法において、
前記全ての画素の組み合わせに対する前記第１演算およびその後の前記第２演算が終了したことに応じて、その時点における前記記憶領域内の累計値をあらかじめ定めたしきい値と比較して、その比較結果に基づき前記濃淡画像の良否を判定する、画像マッチング方法。
【請求項６】
請求項２または４に記載された方法において、
前記モデルデータおよび照合用データを作成する処理では、濃度勾配の強度が所定のしきい値を下回る画素に対しては、前記濃度勾配方向を示す角度データを０または＋１２７に設定する、画像マッチング方法。
【請求項７】
濃淡画像における濃度勾配方向の分布パターンを表す疑似画像を作成する疑似画像作成手段と、照合用の濃淡画像から作成された疑似画像を照合用データとし、モデル画像から作成された疑似画像をモデルデータとして両疑似画像を対応づけて、両疑似画像間における画素単位での濃度勾配方向の角度差を求める第１演算と、第１演算により算出された角度差を累計する第２演算とを実行することにより、前記照合用データとモデルデータとの不一致度を求めるマッチング処理手段と、マッチング処理手段による処理結果を出力する出力手段とを具備する装置であって、
前記疑似画像作成手段は、０°以上３６０°未満の範囲にある角度を当該角度を２５５／３６０倍した値を整数に丸めた結果に相当する整数に置き換えるという定義に従って、前記濃淡画像中の少なくともエッジ画素を対象に、あらかじめ定めた基準の方向に対する特定の方向まわりの回転角度により対象画素における濃度勾配方向を表した場合の回転角度に対応する符号なし８ビット整数を、前記濃度勾配方向を表す角度データとして導出し、
前記マッチング処理手段は、
前記第１演算として、前記照合用データとモデルデータとの間で対応関係にある画素の組毎に、組み合わせられた画素における角度データの差の値を２の補数表現による符号付き８ビット整数とみなして、当該差の絶対値を算出する第１演算手段と、
前記第２演算として、前記第１演算手段により算出された差の絶対値を符号なし８ビット整数とみなして累計する演算を実行する第２演算手段と、
前記照合用データとモデルデータとの間で対応関係にある画素の組の全てに対する前記第１演算および前記第２演算が終了したときの差の絶対値の累計値を、前記照合用データとモデルデータとの不一致度として特定する不一致度特定手段とを具備する、
ことを特徴とする画像マッチング装置。
【請求項８】
前記第１演算手段は、Ｍ組（Ｍ≧２）の画素の組み合わせを対象にした前記第１演算をＳＩＭＤ演算として実行する、請求項７に記載された画像マッチング装置。
【請求項９】
濃淡画像における濃度勾配方向の分布パターンを表す疑似画像を作成する疑似画像作成手段と、照合用の濃淡画像から作成された疑似画像を照合用データとし、モデル画像から作成された疑似画像をモデルデータとして両疑似画像を対応づけて、両疑似画像間における画素単位での濃度勾配方向の角度差を求める第１演算と、第１演算により算出された角度差を累計する第２演算とを実行することにより、前記照合用データとモデルデータとの不一致度を求めるマッチング処理手段として、コンピュータを機能させるプログラムであって、
前記疑似画像作成手段は、０°以上３６０°未満の範囲にある角度を当該角度を２５５／３６０倍した値を整数に丸めた結果に相当する整数に置き換えるという定義に従って、前記濃淡画像中の少なくともエッジ画素を対象に、あらかじめ定めた基準の方向に対する特定の方向まわりの回転角度により対象画素における濃度勾配方向を表した場合の回転角度に対応する符号なし８ビット整数を、前記濃度勾配方向を表す角度データとして導出し、
前記マッチング処理手段は、
前記第１演算として、前記照合用データとモデルデータとの間で対応関係にある画素の組毎に、組み合わせられた画素における角度データの差を２の補数表現による符号付き８ビット整数とみなして、当該差の絶対値を算出する第１演算手段と、
前記第２演算として、前記第１演算手段により算出された差の絶対値を符号なし８ビット整数とみなして累計する演算を実行する第２演算手段と、
前記照合用データとモデルデータとの間で対応関係にある画素の組の全てに対する前記第１演算および前記第２演算が終了したときの差の絶対値の累計値を、前記照合用データとモデルデータとの不一致度として特定する不一致度特定手段とを具備する、
ことを特徴とする画像マッチング用のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字や図形などのパターン画像を含む濃淡画像をあらかじめ準備されたモデル画像と照合する処理（以下、これを「画像マッチング」という。）に関する。特に、本発明は、画像における濃度勾配方向の分布パターンを比較する手法による画像マッチング方法、およびこの方法が適用された画像マッチング装置およびプログラムに関する。
【背景技術】
【０００２】
上記のマッチング処理の前提技術を示すものとして、特許文献１をあげる。
この特許文献１には、画素単位での濃度勾配方向の分布のパターンを、ｘ軸の正方向から反時計回りに見た角度により表すと定義して、照合対象の画像の各画素の座標にその画素における濃度勾配方向を表す角度データを対応づけた疑似画像（以下、「照合用データ」という。）を生成し、同様の方法によりモデル画像から生成された疑似画像（以下、「モデルデータ」という。）と照合用データとを比較することが記載されている。
【０００３】
また、特許文献１には、照合データとモデルデータとの間で、対応関係にある画素の組み合わせ毎に濃度勾配方向の角度差の正弦の絶対値を求め、この絶対値を画素単位での濃度勾配方向の不一致度として、組み合わせ毎の不一致度を累計したものを、照合用の画像のモデル画像に対する不一致度とすることが記載されている。
【０００４】
上記の画素単位での不一致度は、対応関係にある画素間の角度差θが０°および１８０°のときに最小値となり、θが９０°および２７０°のときに最大値となる。また、θが最小値に対応する角度から最大値に対応する角度に向かうにつれて徐々に不一致度が増加する。したがって、パターン画像と背景との明暗の関係がモデル画像と同様の画像を照合する場合には、モデル画像に対する類似度が高い画像ほど、画素単位での不一致度が０°に近い画素の組み合わせが増え、それらによる不一致度の累計値が小さくなる。一方、パターン画像と背景との明暗の関係がモデル画像とは反対になる画像を照合する場合には、モデル画像に対する類似度が高い画像ほど、画素単位での不一致度が１８０°に近くなる画素の組み合わせが増え、それらによる不一致度の累計値が小さくなる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第４０２３０９６号公報                                            （請求項１，３，段落００３９〜００７０等を参照。）
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載のとおり、濃度勾配方向を表す角度データは、特定の方向（たとえばｘ軸の正方向）を基準方向として、その基準方向に対する一定の方向まわりの回転角度として表される。よって、角度データが取り得る数値の範囲は０°以上３６０°未満となり、組み合わせられた画素間の角度データの差θも同様に、０°≦θ＜３６０°の範囲でばらつくことになる。
【０００７】
しかし、θが１８０°以上になる場合には、そのθは、濃度勾配方向を示すベクトルがなす狭い方の角度ではなく、その外側を大回りした角度を示すことになる。
たとえば、一方の濃度勾配方向を示す角度が１０°で他方の濃度勾配方向を示す角度が３５０°の場合には、１０°の方向から時計回り方向に３５０°の方向を見た角度である２０°を導出すべきであるが、演算で算出される角度差は３４０°になってしまう。
【０００８】
特許文献１に記載された発明では、角度差の正弦の絶対値を算出する方法によりこの問題を解決しているが、モデル画像と照合対象の画像との明暗が反転することを考慮する必要がない場合には、角度差の絶対値を画素単位での不一致度として、その不一致度の累計演算を実施してもよい。しかし、この方法をとる場合には、算出された角度差θが１８０度を超えるときには、その角度差θを（３６０°−θ）に置き換えてから加算する必要があるため、演算を十分に高速化するのが困難である。
【０００９】
本発明は上記の問題点に着目し、簡単な方法によって、画素単位での不一致度を表すパラメータを効率良く求めることができるようにし、これによって演算時間を大幅に短縮して、マッチング処理を高速化することを、課題とする。
【課題を解決するための手段】
【００１０】
本発明は、濃淡画像における濃度勾配方向の分布パターンを表す疑似画像を照合用データとして作成する処理と、モデル画像における濃度勾配方向の分布パターンを表す疑似画像をモデルデータとして照合用データに対応づけて、両疑似画像間における画素単位での濃度勾配方向の角度差を求める第１演算と、第１演算により算出された角度差を累計する第２演算とを実行することにより、照合用データとモデルデータとの不一致度を求める画像マッチング方法に適用される。
【００１１】
本発明では、照合用データを作成する処理において、０°以上３６０°未満の範囲にある角度を当該角度を２５６／３６０倍した値を整数に丸めた結果に相当する整数に置き換えるという定義に従って、濃淡画像中の少なくともエッジ画素を対象に、あらかじめ定めた基準の方向に対する特定の方向まわりの回転角度により対象画素における濃度勾配方向を表した場合の回転角度に対応する符号なし８ビット整数を、前記濃度勾配方向を表す角度データとして導出する。
また、第１演算では、照合用データと同じ定義に基づき作成されたモデルデータと照合用データとの間で対応関係にある画素の組毎に、組み合わせられた画素における角度データの差の値を２の補数表現による符号付き８ビット整数とみなして、当該差の絶対値を算出し、第２演算では、第１演算で算出された各絶対値を符号なし８ビット整数とみなして累計する演算を実行する。そして、照合用データとモデルデータとの間で対応関係にある画素の組の全てに対する第１演算および第２演算が終了したときの差の絶対値の累計値を、照合用データとモデルデータとの不一致度として特定する。
【００１２】
上記方法によれば、濃度勾配方向を表す角度のうち、０°以上１８０°未満の角度は０〜１２７の整数に置き換えられ、１８０°以上３６０°未満の角度は１２８〜２５５の整数に置き換えられる。これらは、符号なし８ビット整数として表されるが、２の補数表現による符号付き８ビット整数であるものと仮定すると、０〜１２７の範囲にある数値は変化しないが、１２８〜２５５の範囲の数値は−１２８〜−１の範囲の数値となる。
【００１３】
すなわち、元の濃度勾配を表す角度をθとすると、０°≦θ＜１８０°の範囲と、１８０°≦θ＜３６０°の範囲とは、０°の方向を挟んで角度を計る向きが逆になる。さらに言い換えれば、０°≦θ＜１８０°を示す０〜１２７の整数は、当初の定義どおりで変化しないが、１８０°≦θ＜３６０°を示す１２８〜２５５の整数は、その値から２５６（３６０°に相当）を差し引いた負の値に置き換えられる。
【００１４】
本発明では、この仕組みを利用して、第１演算において、符号なし８ビット整数による角度データの差の値を２の補数表現による符号付き８ビット整数とみなして、当該差の絶対値を算出するので、差分演算の結果が１２８以上となる場合でも、その差は−１から−１２８までの負の値とみなされる。よって、角度データの差が負の値になる場合でも、０°以上１８０°未満に相当する０から１２７までの整数を得ることができる。
【００１５】
０から１２７までの整数は、符号付きとしても符号なしとしても同値であるから、第２演算において、第１演算で算出された各絶対値を符号なし８ビット整数とみなして累計しても、演算に矛盾が生じることはない。よって、十分なビット数のレジスタを確保して、第２演算で各絶対値を符号なし８ビット整数として取り扱って累計演算を行えば、第２演算が終了したときに、照合用データとモデルデータとの不一致度を正しく特定することができる。
【００１６】
この方法の第１演算によれば、対応づけられた２つの画素における角度データの値の組み合わせに関わらず、常に同じ手順による演算を実行することができるので、シングル命令マルチデータ（Single Instruction Multiple Data；略してＳＩＭＤという。）方式を適用することができる。
ＳＩＭＤ方式の演算（以下、「ＳＩＭＤ演算」という。）とは、ＣＰＵに単一の命令を与えることにより、複数のデータ群に対してその命令による演算を並列で実行するもので、演算の時間を大幅に短縮することができる。
【００１７】
以下に、ＳＩＭＤ演算が適用される２つの実施形態を示す。いずれの実施形態でも、モデルデータとして、モデル画像における各画素の濃度勾配方向を前出の定義に基づき表した角度データをそれぞれの座標に組み合わせた疑似画像を作成する。
【００１８】
第１の実施形態では、照合用データを作成する処理において、モデル画像よりサイズが大きい濃淡画像を対象として、この画像内の各画素の濃度勾配方向を前出の定義に基づき表した角度データをそれぞれの座標に組み合わせた疑似画像を照合用データとして作成する。また、累計値を格納するための記憶領域として８ビットより大きい容量の記憶領域をＭ個（Ｍ≧２）設定すると共に、照合用データの画素配列にモデルデータの画素配列を合わせる対応づけステップを、モデルデータへの対応位置を一方の座標軸に沿ってＭ画素分の間隔をあけて動かしながら繰り返す。そして、毎回の対応づけステップにおいて、モデルデータ中の各画素に順に着目して、照合用データ中の着目画素に対応する位置にある画素からモデルデータへの対応位置の移動方向に沿って並ぶＭ個の画素を着目画素に個別に組み合わせて、組み合わせ毎に角度データを表す整数の差の絶対値を求める第１演算と、第１演算により得たＭ個の差の絶対値を前記Ｍ個の記憶領域に１つずつ対応づけて、各記憶領域内の累計値をそれぞれに対応づけられた差の絶対値の加算により更新する第２演算とを、それぞれＳＩＭＤ演算として実行する。
【００１９】
上記の実施形態は、モデル画像よりサイズの大きい濃淡画像の中からモデル画像に対する類似度が最も大きい領域を探すサーチ処理に適用することができる。この実施形態によれば、モデルデータ中の各画素にそれぞれ照合用データ側のＭ個の画素を一度に対応づけて、第１演算および第２演算を一挙に実施することができるので、１回の対応づけステップでＭ回分の対応づけをしたのと同様の結果を得ることができる。よって、サーチに要する時間を大幅に削減することが可能になる。
【００２０】
さらに、上記の実施形態の下位概念となる一実施形態では、毎回の対応づけステップにおいて、モデルデータ中の全ての画素に対する第１演算および第２演算が終了したときにＭ個の記憶領域に格納されている累計値の中の最小値をその対応づけステップにおける不一致度として特定すると共に、照合用データ内のモデルデータに位置合わせされている領域の位置と不一致度として特定された値が格納されていた記憶領域の前記Ｍ個の記憶領域内の順位とに基づき、照合用データ内における当該不一致度への対応位置を特定する。さらに、毎回の対応づけステップにおいて特定された不一致度の中の最小値を特定して、その最小の不一致度への対応位置をモデルデータに対応する位置であると判定する。
【００２１】
上記の実施形態によれば、対応づけステップでの一連の演算が終了する毎に、そのステップで処理された範囲において最小の不一致度が得られた位置を特定してゆき、最終的に最も低い不一致度が得られた位置をモデルデータに対応する位置（すなわちマッチング位置）として特定する。このようにすれば、モデルデータに対するマッチング位置を見つける処理を効率良く実施することができる。
【００２２】
ＳＩＭＤ演算を使用する第２の実施形態では、照合用データを作成する処理において、モデル画像と同じサイズの濃淡画像を対象として、この画像の各画素の濃度勾配方向を前出の定義に基づき表した角度データをそれぞれの座標に組み合わせた疑似画像を照合データとして作成する。
また、累計値を格納するために８ビットより大きい容量の記憶領域を１つ設定して、照合用データの画素配列にモデルデータの画素配列を合わせて両者間で対応する画素の組み合わせをＭ組（Ｍ≧２）設定する対応づけステップを、対応関係にある全ての画素が組み合わせられるまで繰り返す。毎回の対応づけステップにおいては、Ｍ組の組み合わせ毎に、組み合わせられた画素間での角度データを表す整数の差の絶対値を算出する第１演算を、ＳＩＭＤ演算として実行した後に、記憶領域内の累計値を、第１演算により算出されたＭ個の差の絶対値の総和を当該累計値に加算した値に更新する演算を、第２演算として実行する。
【００２３】
上記第２の実施形態は、たとえば、モデル画像と同じサイズの濃淡画像（モデル画像より大きい画像内の一部領域の画像でもよい。）を対象にして、モデル画像との類似の度合いを判定する場合に実施することができる。この実施形態では、モデルデータと照合用データとの間で対応関係にあるＭ組の画素の組み合わせに対する第１演算を一括で実施することができるので、第１演算に要する時間を大幅に短縮することが可能になる。また、第１演算の都度、その演算により得られたＭ個の絶対値の総和を累計する処理を行うので、画像全体の不一致度も効率良く求めることが可能になる。
【００２４】
第２の実施形態は、濃淡画像中のパターンの良否を判定する検査に利用することができる。この場合の一実施形態では、全ての画素の組み合わせに対する第１演算およびその後の第２演算が終了したことに応じて、その時点における記憶領域内の累計値をあらかじめ定めたしきい値と比較し、その比較結果に基づき濃淡画像の良否を判定する。
【００２５】
第１および第２の実施形態に共通する一実施形態では、モデルデータおよび照合用データを作成する処理において、濃度勾配の強度が所定のしきい値を下回る画素に対しては、濃度勾配方向を示す角度データを０または＋１２７に設定する。
【００２６】
本発明のように濃度勾配方向のパターンを比較する場合には、濃度勾配の強度が強いエッジ画素のみを差分演算の対象にするのが望ましいが、演算の対象を判別するための処理を入れると、ＳＩＭＤ演算を効率良く実行するのが困難になる。一方、全ての画素に濃度勾配方向を示す角度データを設定して演算の対象とすると、僅かな濃度勾配でも累計値に影響を及ぼすので、算出される不一致度が不正確になる。
この問題に関して、上記の実施形態では、濃度勾配の強度が弱い画素に対する角度データに一律に０または＋１２７をあてはめることにより、場合分けすることなく、全ての画素を対象にしたＳＩＭＤ演算を実行しても、演算の精度を確保できるようにしている。
【００２７】
０は角度データを計る基準の方向に対応し、＋１２７は、２の補数表現による符号付き８ビット整数とみなされた角度データ群の最大値となる。したがって、濃度勾配強度が弱い画素に角度データとして０または＋１２７を一律にあてはめると、エッジ画素でない画素同士が組み合わせられた場合の第１演算では、双方の角度データが一致して差の絶対値が０となるので、累計値には全く影響を及ぼさない。また、エッジ画素でない画素とエッジ画素とが組み合わせられた場合の第１演算では、前者の０または＋１２７に対して後者は異なる数値になる可能性が高いので、差の絶対値は０より大きくなり、不一致度が増える。よって、照合用の画像とモデル画像との間におけるエッジ画素の不整合の度合いが増えるほど、不一致度は高くなるから、不一致度の信頼度を高めることができる。
【００２８】
したがって、たとえば、照合対象の画像中のパターン画像の一部がモデル画像に一致するが、他の部分はモデル画像に一致しない場合には、そのパターン画像はモデル画像には対応していないと判別することができる。
【００２９】
上記の方法が適用される画像マッチング装置は、濃淡画像における濃度勾配方向の分布パターンを表す疑似画像を作成する疑似画像作成手段と、照合用の濃淡画像から作成された疑似画像を照合用データとし、モデル画像から作成された疑似画像をモデルデータとして両疑似画像を対応づけて、両疑似画像間における画素単位での濃度勾配方向の角度差を求める第１演算と、第１演算により算出された角度差を累計する第２演算とを実行することにより、照合用データとモデルデータとの不一致度を求めるマッチング処理手段と、マッチング処理手段による処理結果を出力する出力手段とを具備する。
【００３０】
疑似画像作成手段は、０°以上３６０°未満の範囲にある角度を当該角度を２５５／３６０倍した値を整数に丸めた結果に相当する整数に置き換えるという定義に従って、濃淡画像中の少なくともエッジ画素を対象に、あらかじめ定めた基準の方向に対する特定の方向まわりの回転角度により対象画素における濃度勾配方向を表した場合の回転角度に対応する符号なし８ビット整数を、濃度勾配方向を表す角度データとして導出する。
【００３１】
マッチング処理手段には、以下の第１演算手段、第２演算手段、不一致度特定手段が含まれる。
第１演算手段は、照合用データとモデルデータとの間で対応関係にある画素の組毎に、組み合わせられた画素における角度データの差の値を２の補数表現による符号付き８ビット整数とみなして、当該差の差の絶対値を算出する。
【００３２】
第２演算手段は、第１演算手段により算出された差の絶対値を符号なし８ビット整数とみなして累計する演算を実行する。
不一致度特定手段は、照合用データとモデルデータとの間で対応関係にある画素の組の全てに対する第１演算および第２演算が終了したときの差の絶対値の累計値を、照合用データとモデルデータとの不一致度として特定する。
【００３３】
上記の画像マッチング装置によれば、照合用データとモデルデータとの間で対応づけられた画素間の角度データがどのような値の組み合わせになっても、各角度データの差の絶対値を求める演算と、差の絶対値を累計する演算とにより対応できるので、演算時間を大幅に短縮することができる。
さらに、第１演算手段を、Ｍ組（Ｍ≧２）の画素の組み合わせを対象にした第１演算をＳＩＭＤ演算として実行する手段とすれば、演算時間を大きく短縮することができ、高速処理が要求される現場に対応することが容易になる。
【００３４】
さらに本発明は、上記の疑似画像作成手段およびマッチング処理手段として、コンピュータを機能させるプログラムを提供する。
【発明の効果】
【００３５】
本発明によれば、照合用データとモデルデータとの間の不一致度を求める演算に要する時間を大幅に短縮すると共に、算出される不一致度の精度を確保することができる。よって、モデル画像に対応する領域を検索する処理や検査などを短時間で実施することが要求される現場に適した画像マッチング処理を実現することができる。
【図面の簡単な説明】
【００３６】
【図１】画像マッチング装置の構成を示す機能ブロック図である。
【図２】符号なし８ビット整数によるエッジコードと、これを２の補数表現による符号付き８ビット整数とみなした場合の数値との関係を示すテーブルである。
【図３】２の補数表現とみなしたエッジコードと元の角度との関係を示す図である。
【図４】角度差の算出対象のエッジコードの組み合わせの例を、元の角度に関係づけて示す図である。
【図５】モデル画像の例を、マッチング処理に用いられるパラメータと共に示す図である。
【図６】照合用データに対するサーチ処理の原理を説明する図である。
【図７】サーチ処理の手順を示すフローチャートである。
【図８】図７のステップＳ２における詳細手順を示すフローチャートである。
【図９】図７のステップＳ７における詳細手順を示すフローチャートである。
【図１０】検査対象の濃淡画像に対するマッチング処理の原理を示す図である。
【図１１】検査の手順を示すフローチャートである。
【発明を実施するための形態】
【００３７】
図１は、本発明が適用される画像マッチング装置の構成を機能ブロック図により示す。
このパターン認識装置は、カメラにより生成された濃淡画像からあらかじめ登録されたモデルのパターンを検出する目的に使用されるもので、その実体は、専用のプログラムがインストールされたコンピュータである。
【００３８】
図１に示すように、この実施例のパターン認識装置は、画像入力部１、モード選択部２、入力画像処理部３、コード変換テーブル４、モデルメモリ５、サーチ制御部６、結果出力部７、ＳＩＭＤ演算実行部１０などを具備する。また、図１には示していないが、このパターン認識装置には、処理対象の画像を生成するためのカメラ、画像や処理結果を表示するための表示部、キーボードやマウスなどを含む操作部などの周辺機器が接続されている。
【００３９】
上記の認識処理装置では、濃淡画像における画素単位での濃度勾配方向を角度データとして表して、この角度データ（以下、「エッジコード」という。）の分布のパターンをモデルデータと照合する方法により、モデルパターンに類似するパターンが含まれる領域をを検出する。画像入力部１は、その処理対象の濃淡画像を入力する。入力画像処理部３は、画像入力部１が入力した画像内の各画素のエッジコードを求めて、画素の座標とエッジコードとを組み合わせた疑似画像を作成する。コード変換テーブル４は、この処理に使用される参照用のテーブルである。
【００４０】
モード選択部２は、ユーザの選択操作に応じて、設定モードおよび計測モードのうち操作により選択されたモードを装置内の各部に設定する。具体的には、設定モードが選択された場合には、入力画像処理部３は、画像入力部１から入力された画像の一部をモデル画像として切り出して、そのモデル画像中の各画素のエッジコードによる疑似画像を作成し、これをモデルデータとしてモデルメモリ５に登録する。
なお、モデル画像の切り出し領域は、表示部に入力画像を表示して、ユーザによる領域の指定操作を受け付けることにより定められる。また、モデル画像もモデルデータと共にモデルメモリ５に登録される。
【００４１】
計測モードが選択された場合には、入力画像処理部３は、画像入力部１が入力した画像中の全画素を対象にエッジコードを求め、各画素の座標にそれぞれのエッジコードを対応づけた疑似画像を作成する。この疑似画像は、照合用データとしてサーチ制御部６に渡される。サーチ制御部６は、モデルメモリ５内のモデルデータを読み出すと共に、ＳＩＭＤ演算実行部１０と協働して後述するサーチ処理を実行することによって、モデルデータへの類似度が最も高い領域の類似度および当該領域の基準点の座標（以下、「マッチング位置」という。）を特定する。結果出力部７は、特定された類似度やマッチング位置を含む処理結果を、表示部や外部機器などに出力する。
【００４２】
この実施例では、類似度として、モデルデータに対する不一致度を求める。
ＳＩＭＤ演算実行部１０は、この不一致度の算出に用いられるもので、第１演算部１１と第２演算部１２とが含まれる。詳細は後記するが、第１演算部１１では、照合用データとモデルデータとの間における画素単位の不一致度として、対応関係にある画素の組におけるエッジコードの差の絶対値を算出する。
【００４３】
この実施例では、この差の絶対値のことを「角度差」と呼ぶ。
第２演算部１２は、第１演算部１１により算出された角度差を累計する演算によって、照合対象の画像中のモデル画像に対応づけられた範囲の不一致度を求める。
【００４４】
以下、この実施例におけるエッジコードのデータ構成と、第１演算および第２演算の仕組みについて説明する。
この実施例でも、特許文献１に記載された発明と同様に、ｘ軸における濃度勾配Ｅｘが示すベクトルと、ｙ軸における濃度勾配Ｅｙが示すベクトルとの合成ベクトルを濃度勾配方向とする。そして、この合成ベクトルをｘ軸の正方向を基準方向とした反時計回りの回転角度として表した値を、エッジコードとする。
【００４５】
上記の回転角度は、Ｅｙ／Ｅｘの逆正接（ａｒｃｔａｎ（Ｅｙ／Ｅｘ））を用いて算出されるが、Ｅｘ，Ｅｙが正の値をとるか、負の値をとるかによって演算式が変わる。この実施例では、Ｅｙ／Ｅｘの値とその値から導き出されるエッジコードとの組み合わせを登録したコード変換テーブル４を参照する方法によって、エッジコードの導出に要する処理時間を短縮するようにしている。
【００４６】
一般的なエッジコードは、０度以上３６０度未満の範囲に含まれる角度として算出されるが、この実施例では、上記の角度範囲を０から２５５までの整数に置き換えて、これらの整数を符号なし８ビット整数として、対応するＥｙ／Ｅｘの値に組み合わせてコード変換テーブル４に格納する。
【００４７】
具体的に、通常の０°〜３６０°のスケールで表される角度をθとし、整数表現のエッジコードをＥＣとすると、θを２５６／３６０倍した値の小数点以下を四捨五入した値がＥＣとなる。
したがって、０°≦θ＜１８０°の角度範囲は０≦ＥＣ＜１２７となり、１８０°≦θ＜３６０°の角度範囲は、１２８≦ＥＣ＜２５５となる。
【００４８】
サーチ制御部６は、照合用データとモデルデータとの間で対応関係にある画素の組み合わせをＭ組設定する（Ｍ≧２；以下の具体例ではＭ＝１６）。第１演算部１１では、このＭ組について、上記の方法により導出された整数表現のエッジコードＥＣの角度差を算出する演算を一括で実行する。第２演算部１２では、第１演算部１１により算出されたＭ個の角度差を累計する演算を一括で実行する。
【００４９】
また、第１演算部１１では、演算対象のエッジコードＥＣを符号なし８ビット整数ではなく、２の補数表現による符号付き８ビット整数とみなして演算を実行する。一方、第２演算部１２では、６４ビットの記憶領域に累計値を格納すると共に、第１演算部１１により算出された角度差を符号なし８ビット整数とみなして、累計演算を実行する。
【００５０】
図２は、エッジコードＥＣを表す符号なし８ビット整数の１０進表記および２進表記の組み合わせに、この整数を２の補数表現による符号なし８ビット整数とみなした場合に当該整数が表す値を対応づけたテーブルを示す。また、テーブルの欄外に、各組み合わせとＥＣの元データであるθ（０°≦θ＜３６０°）との関係を示す。
【００５１】
このテーブルに示すとおり、０°≦θ＜１８０°の範囲の角度θに対応する０〜１２７の整数は、２の補数表現による整数とみなしても、同じ値となる。
これに対し、１８０°≦θ＜３６０°の範囲の角度θに対応する１２８〜２５５の整数は、２の補数表現による整数であるとみなすと、−１２８から−１までの範囲の負の整数となる。
【００５２】
図３は、上記の２の補数表現による整数をθの角度範囲に対応づけて示したものである。この図３に示すように、０°から１８０°までの角度θは、エッジコードの導出時の規定どおり、０°の方向を基準とする反時計回りの回転角度として示されるが、１８０°以上の角度θは、反対に、０°の方向を基準とする時計回り方向の角度として示されることになる。この仕組みは、エッジコードだけでなく、エッジコードから算出される角度差にもあてはまる。
【００５３】
図４（１）〜（４）は、角度差の算出の対象となる２つのエッジコードの値の組み合わせを４通り設定して、これらを０°から３６０°までの角度範囲に対応させて示す。各図では、０°，９０°，１２８°，２７０°を、それぞれ符号なし８ビット整数によるエッジコードによる数値０，６４，１２８，１９２により示している。一方、算出対象の２つのエッジコードについては、一方をＡ、他方をＢとして、２の補数表現に基づく方向まわりの角度として示す。
【００５４】
以下、Ａ，Ｂの値に対応する符号なし８ビット整数をａ，ｂとして説明する。
まず、Ａ≧０，Ｂ＜０（０≦ａ＜１２８，１２８≦ｂ≦２５５）の場合には、
｜Ａ−Ｂ｜＝｜Ａ｜＋｜Ｂ｜となる。
【００５５】
図４（１）（２）は、Ａ≧０，Ｂ＜０の事例を場合分けしたものである。図４（１）に示すように、０°の方向を挟んでＡが示す方向とＢが示す方向とがなす角度が１８０°より小さくなる場合には、｜Ａ｜＋｜Ｂ｜＜１２８となるので、｜Ａ｜＋｜Ｂ｜の値がそのまま｜Ａ−Ｂ｜にあてはめられる。
【００５６】
一方、図４（２）に示すように、０°の方向を挟んでＡが示す方向とＢが示す方向とがなす角度が１８０°以上になる場合には、２の補数表現による｜Ａ｜＋｜Ｂ｜の値は負の値となる。よって、｜Ａ｜＋｜Ｂ｜を示す負の値の絶対値が｜Ａ−Ｂ｜にあてはめられる。すなわち、１８０°の方向を挟んでＡが示す方向とＢが示す方向とがなす角度（図４（２）中の角度Ｃ）が｜Ａ−Ｂ｜にあてはめられることになる。
【００５７】
Ａ，Ｂがともに０以上となる場合（図４（３））や、Ａ，Ｂがともに負の値となる場合（図４（４））には、｜Ａ−Ｂ｜＝｜Ａ｜−｜Ｂ｜となる。
よって、０≦｜Ａ−Ｂ｜≦１２７となる。
【００５８】
このように、図４（１）〜（４）のいずれの事例においても、｜Ａ−Ｂ｜の値は、０から１２７までの整数として表されるが、確認のため、以下に図４（１）（２）に対応する具体例を２つあげる。なお、各例で使用する数値は、いずれも図２のテーブルに示されている。
【００５９】
まず、図４（１）の例として、ａ＝１０（００００１０１０），ｂ＝２５０（１１１１１０１０）とすると、００００１０１０−１１１１１０１０＝１１１１００００となる。この演算結果を符号なしの整数とすると２４０になる。この場合には、もう一段階、２５６−２４０の演算を行い、その演算結果の絶対値を角度差とするので、角度差は１６となる。
一方、上記の演算結果を２の補数表現による整数とみなすと、その値は−１６となるから、その絶対値を求めることにより、１６を導出することができる。
【００６０】
つぎに図４（２）の例として、ａ＝１００（０１１００１００），ｂ＝１５６（１００１１１００）とすると、０１１００１００−１００１１１００＝１１００１０００となる。この演算結果を符号なしの整数とすると２００になるが、この場合には、もう一段階、２５６−２００の演算を行うことにより、角度差５６が導出される。
一方、上記の演算結果を２の補数表現による整数とみなすと、その値は−５６となるから、その絶対値を求めることにより、５６を導出することができる。
【００６１】
上記のとおり、０〜２５５の範囲で表されたエッジコードＥＣにより差の絶対値を求めた場合に演算結果が１２８（１８０°に相当）を超えるケースでも、その差の値を２の補数表現による負の値とみなして、２の補数表現に基づき絶対値に転換すれば、どのような値の組み合わせによる演算でも、０から１２７までの数値（すなわち０°以上１８０°未満の角度範囲に対応する数値）の範囲内の角度差を得ることができる。第２演算では、この角度差を符号なし８ビット整数として累計するが、０から１２７までの数値であれば、符号なしでも符号付きでも同値であるので、演算結果に矛盾が生じることはない。しかも、８ビットで表すことができる数値が２倍になるので、累計値の増大にも対応しやすくなる。
【００６２】
演算対象の２つのエッジコードを符号付き８ビット整数とみなすことで、どのような値の組み合わせでも、１８０°以内の角度差に相当する数値を得ることができるので、演算式の場合分けが不要になる。これを利用して、第１演算部１１では、Ｍ組の画素の組み合わせを対象にしたＳＩＭＤ演算を実行する。第２演算部１２でも、第１演算部１１により算出された角度差の累計演算を一活で行うＳＩＭＤ演算を実行する。
【００６３】
以下、このＳＩＭＤ演算を用いたサーチ処理の手順を詳細に説明する。なお、以下では画素のことを便宜上、「点」という場合がある。
図５は、モデル画像を例示したものである。以下の説明では、このモデル画像の左上頂点を基準点として、その座標を（Ｘ０，Ｙ０）とする。また、モデル画像の横方向（ｘ軸に対応）の幅（画素数）をｄＸとし、縦方向（ｙ軸に対応）の幅（画素数）をｄＹとする。また、モデル画像において、基準点（Ｘ０，Ｙ０）からｘ方向にｉ画素、ｙ方向にｊ画素離れている画素の座標を、（Ｘ０＋ｉ，Ｙ０＋ｊ）とする。
これらのパラメータは、このモデル画像から作成されるモデルデータ（エッジコードによる疑似画像）にも、適用される。
【００６４】
図６（１）は、照合用データに相当する疑似画像を示すとともに、その疑似画像中に、モデルデータとの１回分のマッチングの対象となる領域を、ｇ１，ｇ２，ｇ３・・・として示す。図６（２）は、これらの領域ｇ１，ｇ２，ｇ３・・・の中の１つ（領域ｇｎ）を拡大したものである。
【００６５】
この実施例では、上記の照合用データに対し、図５のモデル画像から作成されたモデルデータを、ｘ軸に対しては１６画素おきに、ｙ軸に対しては１画素ずつ、位置をずらして対応づけて、マッチング処理を実行する。毎時のマッチング処理では、図６（２）に示すように、モデルデータよりもｘ軸方向の幅が１５画素分大きい領域が設定され、その左上頂点が基準点（ｘ０，ｙ０）に設定される。図６（２）中に一点鎖線で示すように、この領域は、モデルデータと同じサイズの領域をｘ軸に沿って１画素ずつずらして１５回走査する場合の走査範囲に相当する。
【００６６】
マッチング処理においては、ｉ，ｊにより設定されるモデルパターン中の着目画素（Ｘ０＋ｉ，Ｙ０＋ｊ）に対応する座標の画素Ｐ０を先頭にしてｘ軸に沿って並ぶ１６個の画素Ｐ０，Ｐ１，・・・Ｐ１５をそれぞれ着目画素に組み合わせ、第１演算部１１のＳＩＭＤ演算によって、組み合わせ毎の角度差を算出する。さらに、第２演算部１２のＳＩＭＤ演算では、照合用データ側の画素Ｐ０，Ｐ１，・・・Ｐ１５の並び順序に対応する１６個の配列ｕｒ（０），ｕｒ（２），・・・ｕｒ（１５）を用いて、第１演算部１１により算出される１６個の角度差をそれぞれ対応する配列内の値に加算する。
【００６７】
上記２段階のＳＩＭＤ演算により、通常はモデルデータをｘ軸方向に１画素ずつずらしながら１６回分のマッチング処理を実行する必要がある範囲のマッチング処理を、一括して実施することができる。これにより、マッチング処理に要する時間を大幅に短縮することができる。
【００６８】
以後は、照合用データにおいて１回分のマッチング処理により処理される領域ｇｎ（ｎ＝１，２，３・・・）内の画素群を「グループ」と呼ぶ。また、グループｇｎ内でモデルデータの着目画素（Ｘ０＋ｉ，Ｙ０＋ｊ）に対応する画素群のうちの左端の点Ｐ０の座標を（ｘｉ，ｙｊ）とおき、以下の点Ｐ１，Ｐ２，・・・Ｐ１５の座標を、それぞれ（ｘｉ＋１，ｙｊ）（ｘｉ＋２，ｙｊ）・・・（ｘｉ＋１５，ｙｊ）とする。
【００６９】
図７は、照合用データに対するサーチ処理における一連の流れを示し、図８は図７中のステップＳ２における詳細手順を示し、図９は図７中のステップＳ７における詳細手順を示す。以下、図７のメイン処理のフローチャートの流れに沿って説明しながら、適宜、図８および図９を参照する。
【００７０】
この実施例のサーチ処理は、計測モードの選択に応じて開始される。最初に、画像入力部１が照合対象の画像を入力する（ステップＳ１）と、入力画像処理部３によって、入力画像内の各画素のエッジコードが導出され、照合用データが作成される（ステップＳ２）。
【００７１】
図８は、照合用データの作成処理のうち、画素毎に実行される手順を取り出したものである。ここで、この図８を参照する。入力画像処理部３では、処理対象の画素につき、ｘ，ｙの各軸の濃度勾配Ｅｘ，Ｅｙを求める（ステップＳ２１）。さらにＥｘ，Ｅｙの二乗和を求めて、これを濃度勾配強度とし（ステップＳ２２）、その値を所定のしきい値と比較する（ステップＳ２３）。
【００７２】
濃度勾配強度がしきい値以上であれば（ステップＳ２３が「ＹＥＳ」）、先に述べたコード変換テーブル４を参照して、Ｅｙ／Ｅｘに対応するエッジコードを読み出し（ステップＳ２４）、これを処理対象の画素の座標に格納する（ステップＳ２６）。一方、濃度勾配強度がしきい値を下回る場合（ステップＳ２３が「ＮＯ」）には、エッジコードに１２７を設定し（ステップＳ２５）、これを処理対象の画素の座標に格納する（ステップＳ２６）。
【００７３】
上記の処理により、画像中のパターンのエッジを構成する画素（エッジ画素）には、その濃度勾配に応じたエッジコードが設定されるが、その他の濃度勾配強度が弱い画素には一律に１２７の値が設定される。１２７という値は、エッジコードが符号付き８ビット整数とみなされた場合の最大値に相当するが、エッジ画素でない画素どおしが組み合わせられた場合の角度差は０となるので、累計演算には影響を及ぼさない。逆に、わずかな濃度むらによる濃度勾配が角度差の累計値に影響を与えることがなくなり、累計値の精度が向上する。しかも、エッジ画素とエッジ画素以外の画素との組み合わせによる角度差を強調する効果が生じるので、不一致度としての確度を高めることができる。
なお、濃度勾配強度が低い画素には、１２７に限らず、最小値の０を設定してもよい。
【００７４】
図７に参照を戻す。
ステップＳ３からは、サーチ制御部６が主体となって実行する処理になる。ステップＳ３では、処理対象のグループを表すカウンタｎを初期値の０にすると共に、基準点（左上頂点）のｙ座標ｙ０に照合用データの左上頂点のｙ座標ｙ１（図６（１）に示す。）をセットし、ステップＳ４〜１１のループに入る。
【００７５】
はじめてステップＳ４〜Ｓ１１のループに入ったときのケースで説明すると、ステップＳ４では、基準点のｘ座標ｘ０に、照合用データの左上頂点のｘ座標ｘ１（図６（１）に示す。）をセットする。この処理と先のステップＳ３の処理とによって、照合用データの左上頂点（ｘ１，ｙ１）が基準点に初期設定される。
ステップＳ５では、ステップＳ３で０に設定したｎに１を加算する処理により、ｎ＝１とする。
【００７６】
ステップＳ６では、モデルパターンの基準点（Ｘ０，Ｙ０）に、照合用データの基準点（ｘ０，ｙ０）を対応づける。この段階では、ステップＳ３，Ｓ４において、（ｘ１，ｙ１）が照合用データの基準点（ｘ０，ｙ０）に設定されているので、照合用データの左上頂点がモデルパターンの基準点（Ｘ０，Ｙ０）に対応づけられることになる。
【００７７】
このようにｎのインクリメントと基準点の対応づけとを行うことにより、図６（１）に示したグループｇ１が照合対象のグループに設定される。ステップＳ７では、このグループｇ１に対するマッチング処理により、当該グループｇ１内の最小の不一致度ＵＲ１と、その不一致度への対応点Ｑ１（ＵＲ１が得られた位置を示す。）の座標を特定する。
【００７８】
ステップＳ７が終了すると、ステップＳ９においてｘ０に１６を加算した後に、ステップＳ５に戻ってｎの値を１つ増やし、さらにステップＳ６で、更新されたｘ０に基づく点（ｘ０，ｙ０）にモデルパターンの基準点（Ｘ０，Ｙ０）を対応づける。これにより、モデルパターンに対応づけられる領域がｘ軸に沿って１６画素分移動して、新しいグループｇ２が設定された状態となる。このグループｇ２に対してもステップＳ７が実行される。
【００７９】
以下も同様の流れで処理を進行させることによって、毎回、ｘ方向の幅がｄＸ＋１５で、ｙ方向の幅がｄＹの領域内の画素群によるグループが設定され、そのグループ内における最小の不一致度ＵＲｎおよびその対応点Ｑｎが特定される。
【００８０】
処理中のグループの右端のｘ座標（ｘ０＋ｄｘ＋１５）がｘ２以上となると（ステップＳ８が「ＹＥＳ」）、ステップＳ１１においてｙ０に１を加算した後に、ステップＳ４に戻り、ｘ０を再びｘ１に設定する。このステップＳ１１およびステップＳ４によって、次のグループの基準点（ｘ０，ｙ０）は、１画素下にずれた状態となってグループの左端に戻る。
【００８１】
その後、処理対象のグループの右端のｘ座標（ｘ０＋ｄｘ＋１５）がｘ２以上となり、下端のｙ座標（ｙ０＋ｄＹ）がｙ２以上となるまで、ｘ０またはｙ０を更新し（ステップＳ９，Ｓ１１）、ｎの値の更新（ステップＳ５）およびモデルパターンの基準点（Ｘ０，Ｙ０）への対応点の更新（ステップＳ６）を行うことにより、処理対象のグループを変更する。そして、変更後のグループに対しステップＳ７を実行する。
【００８２】
ここで、図９を参照して、各グループｇｎに対するステップＳ７のマッチング処理を詳細に説明する。
【００８３】
このマッチング処理は、処理対象のグループｇｎ内に、モデルデータに対応する大きさの照合領域を１６個設定して、これらの照合領域毎に、モデルデータ側の対応画素とのエッジコードの角度差を求める第１演算と、角度差の累計値を求める第２演算とを実行するものである。最初のステップＳ１０１では、照合領域毎の累計値を格納する配列ｕｒ（ｋ）（ｋ＝０〜１５）をゼロリセットする。
【００８４】
つぎに、ｉ，ｊに初期値の０をセットし（ステップＳ１０２）、ステップＳ１０３〜Ｓ１０９のループに入る。
図５を用いて説明したように、モデルデータ内の着目画素は、基準点（Ｘ０，Ｙ０）とｉ，ｊの値とを用いて、（Ｘ０＋ｉ，Ｙ０＋ｊ）と表される。ステップＳ１０３では、照合用データ側の基準点の座標ｘ０，ｙ０に同様にｉ，ｊを加えることにより、照合対象の１６点の先頭の点Ｐ０を示す座標ｘｉ，ｙｊを導出する。
【００８５】
ステップＳ１０４では、ｋ＝０〜１５として、照合対象の各点の座標を（ｘｉ＋ｋ，ｙｊ）と示す。このステップＳ１０４は、第１演算部１１による処理に相当するもので、（ｘｉ＋ｋ，ｙｊ）で特定される１６点Ｐ０〜Ｐ１５をそれぞれモデルデータ側の座標（Ｘ０＋ｉ，Ｙ０＋ｊ）の点と組み合わせて、組み合わせ毎のエッジコードの角度差（差の絶対値）ｄＴ（ｋ）を一括で算出する。先に説明したように、各エッジコードは符号付き８ビット整数とみなされて処理されるので、エッジコードの値の組み合わせにかかわらず、演算を統一することができる。
【００８６】
つぎのステップＳ１０５は、第２演算部１２による処理に相当するもので、同様にｋ＝０〜１５として、ステップＳ１０４で算出された１６個の角度差ｄＴ（ｋ）を、それぞれｋの値が一致する累計値ｕｒ（ｋ）に加算する演算を一括で実行する。この演算では、各角度差ｄＴ（ｋ）は符号なし８ビット整数として取り扱われる。また累計値ｕｒ（ｋ）には、累計値の増大に対応できるように、６４ビットのデータ長が設定される。
【００８７】
以下、同様にして、ｉ＝ｄＸかつｊ＝ｄＹとなるまでｉ，ｊの値を１ずつ増やすことにより（ステップＳ１０６，Ｓ１０７，Ｓ１０８，Ｓ１０９）、モデルデータ中の着目画素および照合対象の画素Ｐ１〜Ｐ１５を変更しつつ、ステップＳ１０４およびＳ１０５を繰り返す。
【００８８】
なお、ステップＳ１０４では、毎回、演算対象のエッジコードを格納するレジスタやｄＴ（ｋ）をリセットしてから演算を実行する。ｘ，ｙの各軸方向における照合用データの画素数によっては、右端側や下端側のグループでは図６（２）に示した大きさを確保できず、モデルデータが照合用データからはみ出る可能性があるが、上記のリセット処理によれば、モデルデータ側のエッジコードに組み合わせられるエッジコードが存在しない場合には、そのエッジコードを０とみなした演算を実行することができる。これによりＳＩＭＤ演算で演算エラーが生じるのを防ぐと共に、モデルデータに対応する可能性のない照合領域における累計値ｕｒ（ｋ）を大きな値にすることができる。
【００８９】
モデルデータ内の全ての画素に対する処理が終了すると、ステップＳ１０６およびＳ１０８が「ＹＥＳ」となり、ステップＳ１１０以下の処理に進む。
ステップＳ１１０では、ｋを０に設定すると共に、グループｇ１につき求めた累計値ｕｒ（０）を不一致度ＵＲｎに初期設定する。また、ステップＳ１１１において、グループｇ１の基準点の座標である（ｘ０，ｙ０）を、不一致度Ｓｎへの対応点Ｑｎとして初期設定する。
【００９０】
この後は、ｋを１つ増やし、更新後のｋにより特定される累計値ｕｒ（ｋ）をＵＲｎと比較し（ステップＳ１１２，Ｓ１１３）、ｕｒ（ｋ）＜ＵＲｎであれば（ステップＳ１１３が「ＹＥＳ」）、そのｕｒ（ｋ）をＵＲｎとする（ステップＳ１１４）。また、ＵＲｎへの対応点Ｑｎの座標を（ｘ０＋ｋ，ｙ０）に変更する（ステップＳ１１５）。
一方、ｕｒ（ｋ）≧ＵＲｎであれば、ステップＳ１１４，Ｓ１１５はスキップされる。
【００９１】
最終的にｋ＝１５となると（ステップＳ１１６が「ＹＥＳ」）、これをもってグループｇｎに対する処理は終了する。このとき、ＵＲｎには、１６個の累計値ｕｒ（ｋ）（ｋ＝０〜１５）の中の最小値が格納され、Ｑｎには、その最小値が得られた領域の基準点の座標が格納される。
【００９２】
ここで、再び図７に参照を戻し、モデルデータが対応づけられたグループ毎のマッチング処理が全て終了した後の処理について説明する。
最後のグループに対する処理が終了すると、ステップＳ８，Ｓ１０が「ＹＥＳ」となってステップＳ１２に進み、この段階でのｎの値をＮとした上で、ｎを１に戻す（Ｎの値によりグループの設定数が保存されたことになる。）。
【００９３】
つぎに、ステップＳ１３では、グループｇ１の不一致度ＵＲ１を照合用データ全体の不一致度ＵＲとして初期設定し、その不一致度ＵＲへの対応点Ｑに不一致度ＵＲ１への対応点Ｑ１の座標を初期設定する。
【００９４】
この後は、図９のステップＳ１１２〜Ｓ１１６と同様の手順により、ｎの値を１ずつ増やすことにより各グループｇｎに順に着目して、そのグループｇｎの不一致度ＵＲｎをＵＲと比較し（ステップＳ１４，Ｓ１５）、ＵＲｎがＵＲより小さい場合には（ステップＳ１５が「ＹＥＳ」）、そのＵＲｎをＵＲとし、対応点ＱｎをＱとする（ステップＳ１６，１７）。この処理をｎ＝Ｎとなるまで実行することにより（ステップＳ１８が「ＹＥＳ」）、グループｇ１〜ｇＮ毎の最小不一致度ＵＲ１〜ＵＲＮの中で最も小さな値が、照合用データ内の不一致度ＵＲとして特定される。さらに、その不一致度ＵＲが得られたときの照合領域においてモデルデータの基準点（Ｘ０，Ｙ０）に対応づけられた点Ｑの座標が、マッチング位置として確定する。
【００９５】
最後のステップＳ１９では、確定した点Ｑの座標をマッチング位置として出力する。ただし、出力はマッチング位置のみに限らず、不一致度ＵＲ、またはこれを一致度に変換した値を一緒に出力してもよい。また出力は表示や外部への出力に限らず、たとえば、パターン認識結果を受けて別の処理を行うアプリケーション（たとえばＯＣＲ用のアプリケーション）に、マッチング位置の座標やｄＸ，ｄＹの値など、パターンが含まれる範囲を特定するためのデータを提供してもよい。
【００９６】
以上に説明したサーチ処理によれば、モデルデータに対し、一度に１６個の照合領域を設定して、これらの照合領域に対するマッチング処理を一括して実行することができるので、処理に要する時間を格段に短縮することができる。
【００９７】
また、０°から３６０°の角度範囲をそのまま反映させた８ビットの整数をエッジコードとして疑似画像を作成するには、濃度勾配Ｅｘ，Ｅｙから算出される角度θを１／２倍した値をエッジコードとする必要があるが、そうすると分解能が半分になるので、角度差の精度も粗くなってしまう。これに対し、上記の実施例では、角度θを２５６／３６０倍した値をエッジコードとするので、角度差の精度を大幅に高めることができる。
【００９８】
加えて、上記実施例では、エッジ画素以外の画素のエッジコードを１２７に置き換える処理によって、僅かな濃度勾配が不一致度に影響を及ぼさないようにすると共に、モデルデータとエッジのパターンが整合しない箇所における角度差が大きくなるようにしているので、不一致度の精度を高めることができる。つまり、照合用データが示すパターンの一部がモデルのパターンに一致する場合でも、他の箇所がモデルのパターンとは異なる場合には、不一致度を高めることができる。よって、照合対象の画像のモデル画像に対する類似の度合を正しく判別することが可能になる。
【００９９】
また、この特徴を生かせば、照合対象のパターンの適否を検査する処理においても、精度の良い検査をすることが可能になる。この場合に、検査対象の画像がモデル画像と同じサイズであれば、上記の実施例とは異なる方式によるＳＩＭＤ演算によって、処理速度を短縮することができる。以下、その具体例を説明する。
【０１００】
図１０は、検査の対象となる画像の例を示す。この画像は、入力された画像からあらかじめ定めた計測領域内の画像を切り出して設定されたものであるため、モデル画像と同様に、ｘ軸方向の画素数がｄＸで，ｙ軸方向の画素数がｄＹとなっている。
【０１０１】
図１１は、図１０に示した画像を用いた検査の手順を示す。なお、この例における照合対象のモデル画像は先の図５と同じものである。また、この実施例では、照合用画像の左上頂点を基準点として、その座標を（ｘ０，ｙ０）とする。
【０１０２】
以下、適宜、図５，図１０を参照しながら、図１１の処理手順を説明する。
図１１のフローチャートでは省略しているが、この実施例でも、図７のステップＳ１，Ｓ２と同様の処理を実行することにより、照合用の画像におけるエッジコードの分布を示す照合データを作成する。
【０１０３】
また、この実施例でも、先の実施例と同様に、モデルデータ中の着目点を変数ｉ，ｊによって設定する。ステップＳ２０１では、これらｉ，ｊに初期値０として設定する。次のステップＳ２０２では、累計値ｕｒに、初期値として０を設定する。
【０１０４】
ステップＳ２０３では、モデルパターンに、その基準点の座標（Ｘ０，Ｙ０）と上記ｉ，ｊとを用いて、着目画素の座標（Ｘｉ，Ｙｊ）を設定する。続いて、照合用データについても、同様に、基準点（ｘ０，ｙ０）とｉ，ｊとを用いて、照合対象の座標（ｘｉ，ｙｊ）を設定する。図１０における点Ｐ０は、図５の座標（Ｘ０＋ｉ，Ｙ０＋ｊ）に対応する位置にある画素である。
【０１０５】
ステップＳ２０５では、ｋ＝０〜１５として、モデルデータ中の（Ｘｉ＋ｋ，Ｙｊ）により特定される１６点と、照合用データ中の（ｘｉ＋ｋ，ｙｊ）により特定される１６点とを抽出し、これらをｋの値が一致するもの毎に組み合わせて、組み合わせ毎にエッジコードの角度差ｄＴ（ｋ）を算出する。具体的に図１０を用いて説明すると、座標（ｘｉ，ｙｊ）の位置にある点Ｐ０はモデルデータの座標（Ｘｉ，Ｙｊ）の位置にある点と組み合わせられ、座標（ｘｉ＋１，ｙｊ）の位置にある点Ｐ１はモデルデータの座標（Ｘｉ＋１，Ｙｊ）の位置にある点と組み合わせられる、という具合に、それぞれの基準点に対する相対位置が一致する画素同士が組み合わせられる。そして、組み合わせ毎にエッジコードの角度差が算出されるのである。
【０１０６】
このステップＳ２０５の演算も、各エッジコードを符号付き８ビット整数とみなしたＳＩＭＤ演算として、一括で実行される。
【０１０７】
上記の演算が終了すると、ステップＳ２０６において、１６組の角度差ｄＴ（ｋ）（ｋ＝０〜１５）をｕｒに加算する演算を実行する。フローチャートでは、簡略化のためにΣｄＴ（ｋ）と記載したが、実際には、
ｕｒ＝ｕｒ＋ｄＴ（０）＋ｄＴ（１）＋・・・＋ｄＴ（１５）
という演算式を実行すれば良いので、効率良く累計値ｕｒを更新することができる。
【０１０８】
この後は、ｉに１６を加算し、ステップＳ２０３に戻る。このステップＳ２０３および続くステップＳ２０４では、それぞれ更新されたｉの値に基づき、着目画素（Ｘｉ，Ｙｊ）（ｘｉ，ｙｊ）をｘ軸方向に沿って１６画素ずらす。これにより、前回の照合対象の画素群の隣の１６個の画素が組み合わせられて、これらを対象にステップＳ２０５およびＳ２０６が実施される。
【０１０９】
照合対象の点が画像の右端まで達すると、ステップＳ２０７が「ＹＥＳ」となる。この場合には、ステップＳ２１０において、ｊを１加算して、ステップＳ２０３に戻る。この処理により、照合対象位置は、１画素下にずれた状態で左端側に戻る。
【０１１０】
以下、同様にして、照合用データとモデルデータとの間で、毎回、１６組の画素の組が対応づけされて、各組におけるエッジコードの角度差が一括で算出され、それらの角度差の総和により累計値ｕｒが更新される。この実施例でも、ステップＳ２０５の演算前に、各レジスタをゼロリセットするので、照合位置が右端側に移動した場合に１６組の組み合わせが確保できない場合でも、累計演算に影響を及ぼすことなく、演算を進めることが可能になる。
【０１１１】
全ての画素の組み合わせに対する処理が終了すると、ステップＳ２０７およびＳ２０９が「ＹＥＳ」となる。この時点での累計値ｕｒは、モデル画像に対する照合対象の画像の不一致度を示すものとなる。ステップＳ２１１ではこの不一致度ｕｒをあらかじめ定めた基準値ｕｒ０と比較し、ｕｒ≦ｕｒ０であれば、ステップＳ２１２に進んで、良判定を出力する。これに対し、ｕｒ＞ｕｒ０となった場合には、ステップＳ２１３に進んで、不良判定を出力する。
【０１１２】
上記の検査でも、１６組のエッジコードの角度差を１回の演算で求めるので、不一致度ｕｒを導出するまでの演算時間を大幅に短縮することができ、検査の高速化を実現することができる。また、先に述べたように、角度差の精度が高められ、また、モデルのパターンとは異なるパターンが含まれる画像に対する不一致度が高められるような仕組みが導入されているので、検査の精度を向上することが可能になる。
【符号の説明】
【０１１３】
３    入力画像処理部
４    コード変換テーブル
５    モデルメモリ
６    サーチ制御部
１０  ＳＩＭＤ演算実行部
１１  第１演算部
１２  第２演算部
【図１】
0005949002.tif 000002
【図２】
0005949002.tif 000003
【図３】
0005949002.tif 000004
【図４】
0005949002.tif 000005
【図５】
0005949002.tif 000006
【図６】
0005949002.tif 000007
【図７】
0005949002.tif 000008
【図８】
0005949002.tif 000009
【図９】
0005949002.tif 000010
【図１０】
0005949002.tif 000011
【図１１】
0005949002.tif 000012