テンプレートマッチング

イントロダクション

テンプレートマッチングは、予め定義されたテンプレートに一致する画像の部分を識別する高度な機械ビジョンの手法です。高度なテンプレートマッチングアルゴリズムでは、テンプレートの回転やローカルな輝度にかかわらず、そのテンプレートの出現を見つけることができます。

テンプレートマッチング技術は柔軟で比較的簡単に使用できるため、物体の位置特定の最も一般的な手法の1つとなっています。彼らの適用範囲は、主に利用可能な計算能力によって制約されます。なぜなら、大きくて複雑なテンプレートの識別は時間がかかる可能性があるからです。

コンセプト

テンプレートマッチング技術は、次のニーズに対処することを期待されています: 物体のリファレンス画像(テンプレート画像)と検査対象の画像(入力画像)が提供された場合、テンプレート画像にある物体が存在するすべての入力画像の場所を特定したいとします。具体的な問題に応じて、回転またはスケーリングされた場合を特定したりしなかったりすることがあります。

私たちはまず、現実のアプリケーションには不十分ながら、実際のテンプレートマッチングアルゴリズムが派生している基本の概念を示す単純なテンプレートマッチング法のデモンストレーションから始めます。その後、この方法がどのように高度なグレースケールベースのマッチングおよびエッジベースのマッチングルーチンで拡張および拡張されるかを説明します。

単純なテンプレートマッチング

プラグの画像を検査し、そのピンを見つけることが目標であるとしましょう。探している参照オブジェクトを表すテンプレート画像と検査対象の入力画像が提供されています。

テンプレート画像

入力画像

実際の検索では、比較的直感的な方法で行います。つまり、テンプレートを画像上のすべての可能な位置に配置し、それぞれの位置で現在重なっている画像セグメントとテンプレートの類似性を数値で計算します。最終的には、最も良い類似性を示す位置を特定し、これらがおそらくテンプレートの出現と見なされます。

画像相関

上記の仕様で発生するサブプロブレムの1つは、整列したテンプレート画像と入力画像の重なるセグメントの類似性の尺度を計算することです。これは、同じ寸法の2つの画像の類似性を数値で表すことが通常画像相関と呼ばれるタスクです。

クロスコレレーション
Image1Image2クロスコレレーション
19404780
23316890
24715810

画像相関を計算するための基本的な方法は、クロスコレレーションと呼ばれるものであり、基本的には対応する画像のピクセル値の単純な積の合計です。

クロスコレレーション値が画像の類似性を実際に反映しているように見えるかもしれませんが、クロスコレレーションメソッドは強固ではないことから遠く離れています。その主な欠点は、画像のグローバルな明るさの変化にバイアスがかかっていることです。画像を明るくすると、第二の画像がまったく類似していなくても、そのクロスコレレーションが急激に増加する可能性があります。

\mbox{クロスコレレーション}(\mbox{Image1}, \mbox{Image2})= \sum_{x,y} \mbox{Image1}(x,y) \times \mbox{Image2}(x,y)
正規化クロスコレレーション
Image1Image2NCC
-0.417
0.553
0.844

正規化クロスコレレーションは、クラシックなクロスコレレーションメソッドの向上版であり、元のメソッドに対して2つの改良を導入しています:

  • 結果は画像のグローバルな明るさの変化に対して不変であり、つまり、いずれかの画像の一貫した明るくなりまたは暗くなりが結果に影響を与えないようになっています(これは各ピクセルの値から平均画像の明るさを減算することによって実現されます)。
  • 最終的な相関値は[-1, 1]の範囲にスケーリングされています。つまり、2つの同一の画像のNCCは1.0に等しく、画像とその否定のNCCは-1.0に等しいです。
\mbox{NCC}(\mbox{Image1}, \mbox{Image2})= \frac{1}{N\sigma_1 \sigma_2} \sum_{x,y} (\mbox{Image1}(x,y)-\overline{\mbox{Image1} }) \times (\mbox{Image2}(x,y)-\overline{\mbox{Image2} })}

テンプレート相関画像

さて、手元の問題に戻りましょう。正規化クロスコレレーション(画像の類似性の頑健な尺度)を紹介したことで、テンプレートが各可能な位置にどれだけ適しているかを決定できるようになりました。結果は、各ピクセルの明るさがそのピクセル上に配置されたテンプレートのNCC値を表す画像の形で表現できます(黒色は最小相関の-1.0を、白色は最大相関の1.0を表します)。

テンプレート画像

入力画像

テンプレート相関画像

一致の識別

この時点で行う必要があるのは、テンプレート相関画像のどの点が実際の一致と見なすに値するかを決定することです。通常、一致と見なす位置は、以下を(同時に)表します:

  • ある事前定義された閾値値(すなわち0.5よりも強い)よりも強い
  • 局所的に極大値(周辺ピクセルのテンプレート相関よりも強い)

テンプレート相関が0.75以上の領域

局所的に極大のテンプレート相関点

テンプレート相関が0.75以上の局所的に極大の点

まとめ

上記の手法をAurora Vision Studioで表現するのは非常に簡単です。組み込みの2つのフィルターしか必要ありません。 ImageCorrelationImage フィルターを使用してテンプレート相関画像を計算し、その後、ImageLocalMaxima を使用して一致を識別します - 前のセクションで説明したように、弱いローカルマキシマを結果からカットオフするために inMinValue パラメータを設定するだけです。

導入された手法は問題を解決するのに十分であったものの、重要な欠点がいくつかあります:

  • テンプレートの発生は、参照テンプレート画像の方向を保持する必要があります。
  • このメソッドは効率的ではなく、中程度から大きな画像に対してテンプレート相関画像を計算するのに時間がかかります。

次のセクションでは、これらの問題が高度なテンプレートマッチング技術でどのように対処されているかについて説明します:グレースケールベースのマッチング および エッジベースのマッチング

グレースケールベースのマッチング、エッジベースのマッチング

グレースケールベースのマッチング は、相関に基づくテンプレート検出の原始的なアイデアを拡張し、テンプレートの発生をその方向に関係なく検索できるように効率的にする高度なテンプレートマッチングアルゴリズムです。 エッジベースのマッチング は、計算をオブジェクトのエッジ領域に制限することで、このメソッドをさらに向上させます。

このセクションでは、両方のアルゴリズムの固有の詳細を説明します。次のセクション(フィルターツールセット)では、これらのテクニックをAurora Vision Studioでどのように使用するかを説明します。

イメージピラミッド

イメージピラミッド は、各画像が前の要素のダウンサンプリング(この場合は2倍に縮小)の結果である一連の画像です。

レベル0(入力画像)

レベル1

レベル2

ピラミッド処理

画像ピラミッドは、相関に基づくテンプレート検出の効率を向上させるために適用できます。重要な観察結果は、参照画像に描かれたテンプレートは通常、画像の大幅なダウンサンプリング後でも識別可能であることです(もちろん、このプロセスでは細かいディテールが失われます)。したがって、我々はピラミッドの最上位レベルのダウンサンプル(したがって処理がはるかに高速な)画像で一致候補を特定し、次にピラミッドの下位レベルで検索を繰り返すことができます。毎回、前のレベルで高得点を獲得したテンプレートの位置のみを考慮します。

ピラミッドの各レベルでは、適切にダウンサンプルされた参照テンプレートの画像が必要です。つまり、入力画像ピラミッドとテンプレート画像ピラミッドの両方を計算する必要があります。

レベル0(テンプレート参照画像)

レベル1

レベル2

グレースケールベースのマッチング

いくつかのアプリケーションでは、オブジェクトの方向が均一で固定されている場合があります(プラグの例で見たように)。しかし、検出されるオブジェクトが回転する場合もよくあります。テンプレートマッチングアルゴリズムでは、古典的なピラミッド検索を適応して、テンプレートの 多角度 マッチング、つまりテンプレートの回転されたインスタンスの識別を可能にしています。

これは、1つのテンプレート画像ピラミッドだけでなく、テンプレートの可能な回転ごとに1つのピラミッドセットを計算することによって達成されます。入力画像でのピラミッド検索中、アルゴリズムはテンプレートの回転を考慮に入れた (テンプレート位置、テンプレートの方向) のペアを識別します。元のスキーマと同様に、検索の各レベルでアルゴリズムは前のレベルで高得点を獲得した (位置、方向) ペアのみを検証します。

テンプレート画像

入力画像

多角度マッチングの結果

ピラミッドマッチング技術と 多角度 検索とは、 グレースケールベースのテンプレートマッチング メソッドを構成しています。

エッジベースのマッチング

エッジベースのマッチングは、先に述べたグレースケールベースのマッチングを一つの重要な観察に基づいて強化しています - それは任意のオブジェクトの形状は主にそのエッジの形状によって定義されるということです。したがって、テンプレート全体の一致ではなく、そのエッジを抽出して近くのピクセルのみを一致させることで、いくつかの不要な計算を回避できます。一般的なアプリケーションでは、達成される速度向上は通常著しいものです。

グレースケールベースのマッチング:
エッジベースのマッチング:

オブジェクト全体ではなくオブジェクトのエッジを一致させることは、元のピラミッドマッチングメソッドのわずかな変更を必要とします。均一な色で均一な背景に配置されたオブジェクトを一致させていると想像してください。すべてのオブジェクトのエッジピクセルは同じ強度を持ち、元のアルゴリズムでは適切な色の大きなブロブがある場所ならどこでもオブジェクトを一致させるでしょう。これは clearly な望ましくない結果です。この問題を解決するために、エッジベースのマッチングでは、エッジピクセルの強度ではなく、その勾配方向(イラスト用に HSV 空間で表現される)が一致します。

フィルターツールセット

Aurora Vision Studioは、グレースケールベースのマッチングエッジベースのマッチング の両方を実装した一連のフィルターを提供しています。フィルターのリストについては、テンプレートマッチング フィルターを参照してください。

テンプレート画像はピラミッドマッチングの前に前処理する必要があるため(すべての可能な回転とスケールのテンプレート画像ピラミッドを計算する必要があります)、アルゴリズムは次の2つの部分に分割されます:

  • モデルの作成 - このステップではテンプレート画像ピラミッドが計算され、その結果がモデルに格納されます - ピラミッドマッチングを実行するために必要なすべてのデータを表すアトミックオブジェクト。
  • 一致 - このステップではテンプレートモデルを使用して、入力画像でテンプレートを一致させます。

このような処理の組織は、モデルを一度計算し、複数回再利用することを可能にします。

利用可能なフィルター

両方のテンプレートマッチングメソッドについて、アルゴリズムの各ステップに対して1つのフィルターが用意されています。

グレースケールベースのマッチング エッジベースのマッチング
モデルの作成: CreateGrayModel CreateEdgeModel2
一致: LocateMultipleObjects_NCC LocateMultipleObjects_Edges2

CreateGrayModel および CreateEdgeModel2 フィルターの使用は、より高度なアプリケーションでのみ必要です。それ以外の場合、一致 ステップのフィルターを1つ使用し、 モデルinGrayModel または inEdgeModel パラメーターで設定して モデル を作成することで十分です。詳細については、テンプレートマッチングのモデルの作成を参照してください。CreateEdgeModel2LocateMultipleObjects_Edges2 フィルターは、CreateEdgeModel1LocateMultipleObjects_Edges1 よりも新しく、より高度なバージョンでより多くの機能があるため、推奨されます。

テンプレートマッチング技術を適用する際の主な課題は、プログラム構造を設計するのではなく、フィルターパラメーターを注意深く調整することにあります。

高度なアプリケーションスキーマ

テンプレートマッチングの対話型GUIが十分でないいくつかの高度なアプリケーションがあり、ユーザーはCreateGrayModel または CreateEdgeModel2 フィルターを直接使用する必要があります。例:

  1. モデルの作成に非自明な画像前処理が必要な場合。
  2. 画像セットから自動的に作成されたモデルの配列が必要な場合。
  3. エンドユーザーがランタイムアプリケーションで独自のテンプレートを定義できるようにする必要がある場合(たとえば、入力画像で選択を作成するなど)。
スキーマ1: 別のプログラムでのモデル作成

ケース1および2の場合は、モデル作成を別のTaskマクロフィルターで実装し、モデルをAVDATAファイルに保存してから、そのファイルをメインプログラムのマッチングフィルターの入力にリンクすることをお勧めします:

モデル作成
メインプログラム

このプログラムが完成したら、必要に応じて「CreateModel」タスクをプログラムとして実行し、いつでもモデルを再作成できます。その後、マッチングフィルターの入力のデータファイルへのリンクは修正する必要はありません。これは単なるリンクであり、変更されるのはディスク上のファイルだけです。

スキーマ2: 動的モデル作成

ケース3の場合、モデルを動的に作成する必要がある場合は、モデル作成フィルターとマッチングフィルターは同じタスク内に配置する必要があります。ただし、前者は条件付きで実行されるべきであり、対応するHMIイベントが発生したときに(たとえば、ユーザーがImpulseButtonをクリックするか、VideoBoxでマウスアクションを起こすかなど)、最新のモデルを保存するためにEdgeModel2?のregisterを使用するか、LastNotNilフィルターを使用するかのいずれかを選択します。 次は、HMIでボタンがクリックされたときに入力画像の事前定義されたボックスからモデルが作成される例です:

モデルの作成

ピラミッドの高さ

inMaxPyramidLevel パラメーターは、ピラミッドマッチングのレベル数を決定し、テンプレートが最も高いピラミッドレベルでまだ識別可能な数に設定する必要があります。この値は、診断出力 diagTemplatePyramid(グレースケールベースのマッチング)または diagEdgePyramid(エッジベースのマッチング)を使用して対話型実験を通じて選択する必要があります。

inMinPyramidLevel パラメーターは、作成フェーズ中に生成されるピラミッドの最低レベルおよび位置フェーズ中に追跡されるピラミッドの最低レベルを決定します。パラメーターが位置で作成よりも低い値に設定されている場合、不足しているレベルは位置フィルターによって動的に生成されます。このアプローチは作成がはるかに速くなりますが、位置がやや遅くなります。

次の例では、inMaxPyramidLevel の値が4は高すぎるでしょう(両方のメソッドにとって)、なぜならこのピラミッドのレベルではテンプレートの構造が完全に失われるからです。また、値が3はやや過剰(特にエッジベースのマッチングの場合)であり、値が2は確実に安全な選択肢でしょう。

レベル 0 レベル 1 レベル 2 レベル 3 レベル 4
グレースケールベースのマッチング
(diagTemplatePyramid):
エッジベースのマッチング
(diagEdgePyramid):
角度範囲

inMinAngleinMaxAngle パラメータは、マッチングプロセスで考慮されるテンプレートの方向の範囲を決定します。たとえば(角度の範囲を表す inMinAngleinMaxAngle 値の組み合わせ):

  • (-180.0, 180.0): すべての回転が考慮されます(デフォルト値)
  • (-15.0, 15.0): テンプレートの出現は、参照テンプレートの方向から最大で15.0度ずれることが許容されます(各方向に対して)
  • (0.0, 0.0): テンプレートの出現は、参照テンプレートの方向を保持することが期待されます

広範囲の可能な方向は、かなりのメモリ使用量と計算時間のオーバーヘッドを発生させる可能性があるため、できるだけ範囲を制限することが望ましいです。異なるスケールが関与する場合は特に範囲を制限することが助けになります。回転の数は inAnglePrecision パラメータでさらに操作できます。減少させると、モデルも実行時間も小さくなりますが、オブジェクトはわずかに不正確になる可能性があります。

スケール範囲

inMinScaleinMaxScale パラメータは、マッチングプロセスで考慮されるテンプレートのスケールの範囲を決定します。これにより、モデル作成時のオブジェクトよりもわずかに小さいまたは大きいオブジェクトを特定できます。

広範なスケールの可能性は、かなりのメモリ使用量と計算時間のオーバーヘッドを発生させる可能性があるため、できるだけ範囲を制限することが望ましいです。スケールの数は inScalePrecision パラメータでさらに操作できます。減少させると、モデルも実行時間も小さくなりますが、オブジェクトはわずかに不正確になる可能性があります。

エッジ検出設定(エッジベースのマッチングのみ)

CreateEdgeModel2 フィルタの inEdgeThresholdinEdgeHysteresis パラメータは、テンプレート画像内のエッジを検出するために使用されるヒステリシス閾値の設定を決定します。 inEdgeThreshold 値が低いほど、テンプレート画像内でエッジが多く検出されます。これらのパラメータは、テンプレートのすべての重要なエッジが検出され、結果の冗長なエッジ(ノイズ)の量ができるだけ制限されるように設定する必要があります。ピラミッドの高さと同様に、エッジ検出の閾値は、outEdges 出力と診断出力 diagEdgePyramid を使用して対話的な実験を行って選択する必要があります。今回は最も低いレベルの画像のみを見る必要があります。

(15.0, 30.0) - 過度なノイズの量

(40.0, 60.0) - OK

(60.0, 70.0) - 重要なエッジが失われています

CreateEdgeModel2 フィルタは、ピラミッドの頂点でエッジが検出されない(つまり、いくつかの重要なエッジだけでなく、すべてのエッジが失われた)モデルを作成することは許容せず、その場合はエラーが発生します。それが発生した場合は、ピラミッドの高さ、エッジの閾値、またはその両方を減少させる必要があります。

マッチング

inMinScore パラメータは、アルゴリズムがマッチ候補を検証する際の寛容度を決定します。値が高いほど、返される結果が少なくなります。このパラメータは対話的な実験を通じて設定する必要があり、すべての正しいマッチが返されることを保証するために十分に低い値に設定する必要がありますが、あまりに低いとアルゴリズムを遅くし、結果に誤ったマッチが現れる可能性があります。

ヒントとベストプラクティス

どの方法を選択するか?

ほとんどのアプリケーションにとって、Edge-based Matching メソッドは Grayscale-based Matching よりも堅牢で効率的です。後者は、検討されているテンプレートが識別可能なエッジで定義されていない滑らかな色の遷移領域を持ち、それでも一致する必要がある場合にのみ考慮すべきです。

Edge-based Matching の結果をさらに向上させる方法は?

EnhanceMultipleObjectMatches フィルタまたは EnhanceSingleObjectMatch フィルタを使用して結果を微調整できます。その使用例は CreateGoldenTemplate2 フィルタで紹介されています。