# CompareImage

CompareImage 関数は、対象領域とテンプレート画像を比較し、特定の許容範囲内でテンプレートと一致していない領域を白いピクセルで示した画像を返します。

## CompareImage の概要

CompareImage 関数は、プロパティシートの [学習を強制] チェックボックスが選択されている場合に、現在の画像からテンプレートを抽出するように設計されています。このチェックボックスをオフにすると、CompareImage 関数はテンプレートのピクセルを入力画像にマッピングし、比較してグレースケール出力画像を生成します。特定の許容範囲内でテンプレート画像と一致していないピクセルは、明るいピクセル、つまり白いピクセルとして表示されます。

## CompareImage の入力

パラメータ | 説明
画像 | このパラメータは、画像データ構造体を含むスプレッドシートセルのセル参照を使用する必要があります。デフォルトでは、このパラメータは、 関数によって返された画像データ構造体を含むセル A0 を参照しています。また、このパラメータは、ビジョンツールの画像フィルタ関数によって返された、その他の画像データ構造体も参照できます。
フィクスチャ | Fixture入力、またはビジョンツール関数の画像座標系の出力に関連する対象領域 (ROI) を定義します。フィクスチャに関連する ROI を設定すると、フィクスチャが回転または移動した場合に、フィクスチャに対応して ROI を確実に回転または移動できます。 デフォルト設定は画像の左上隅で、(0, 0, 0) になります。
X | 画像座標での X オフセット。
Y | 画像座標での Y オフセット。
角度 | 画像座標系での画像の X 軸からの回転 (時計回り +/-360 度)。
領域 | これは対象領域 (ROI) とも呼ばれ、解析の対象となる画像の領域を表します。[領域] パラメータをダブルクリックすると、変換と回転が可能な対話型グラフィックスモードを作成できます。このパラメータを選択して、プロパティシートの [ジョブの編集] ツールバーにある [領域の最大化] ボタンを押すと、画像全体が対象になるように領域が自動的に拡張されます。
X | フィクスチャ座標での原点の X オフセット
Y | フィクスチャ座標での原点の Y オフセット
幅 | 領域の X 軸に沿った寸法
高さ | 領域の Y 軸に沿った寸法
角度 | フィクスチャ座標での角度
注: [フィクスチャ] および [領域] パラメータは、画像の範囲内で定義されている必要があります。画像の範囲内で定義されていない場合、この関数は #ERR を返します。
学習を強制 | どのような場合に現在の画像からテンプレートを抽出するかを指定します。ROI のサイズが変更された場合と、[学習を強制] パラメータが選択された場合のいずれかを指定できます。
0 = OFF (デフォルト) | 現在の画像からテンプレートが抽出されるのは、ROI のサイズが変更された場合のみです。ユーザがテンプレート画像を選択 (または「学習」) した後でこの設定を選択すると、[学習] パラメータが無効になり、テンプレートが上書きされるのを防ぐことができます。
1 = ON | 現在の画像からテンプレートが抽出されます。ユーザがテンプレート画像を選択中 (または「学習中」) である場合にはこの設定が選択されます。
エッジ範囲 | 画像比較時に許容されるエッジ周辺のピクセル数 (0〜24、デフォルト = 3) を指定します。この数値が大きいほど、テンプレートと入力画像間のエッジ一致は厳密でなくなります (つまり、一致が不完全なエッジが、出力画像の差分として示される可能性が低くなります)。
補間方法 | 差分の出力画像を生成するために、入力画像にテンプレートをマッピングする際に実行するピクセル比較の種類を指定します。
0 = 最近傍 (デフォルト) | テンプレートの各ピクセルを入力画像の最近傍ピクセルと比較して、各ピクセルの正規化後のグレースケールの差を計算します。この方法は高速ですが、精度は低くなります。
1 = バイリニア | テンプレートの各ピクセルを加重平均 (入力画像の 4 つの最近傍ピクセルのグレースケール値を表す) と比較し、各ピクセルの正規化後のグレースケールの差を計算します。この方法は精密ですが、時間がかかります。
表示 | 画像の上に表示するグラフィックスオーバーレイを指定します。
0 = 非表示 (デフォルト) | CompareImage 関数を含んでいるセルがスプレッドシート内でハイライトされている場合を除き、使用可能なグラフィックス項目は表示されません。
1 = 結果のグラフィックスのみ | 処理された画像が常に表示されます。
2 = 入力のグラフィックスのみ | 入力画像領域と関連付けられているグラフィックス項目が常に表示されます。
3 = すべて表示: 入力のグラフィックスとテンプレート画像 | 入力画像領域と関連付けられているグラフィックス項目が常に表示されます。ただし、CompareImage 関数のプロパティシートには、テンプレート画像も表示されます。

## CompareImage の出力

戻り値 | 処理済みの画像を含んでいる画像データ構造体。入力パラメータが無効であれば #ERR を返します。

## CompareImage の例

この例では、CompareImage 関数を使用して、「良好」なガスケットのテンプレート画像と生産ライン上のガスケットの入力画像を比較します。

まず、CompareImage 関数をスプレッドシートに挿入した後、プロパティシートで「領域」という単語をダブルクリックして ROI を定義します。画像の上に赤い ROI ボックスが表示されます。カーソルを使用してボックスを移動し、サイズを調整したら、[ジョブの編集] ツールバーの [OK] ボタンをクリックして (または Enter キーを押して) 選択を確定し、プロパティシートに戻ります。

次に、別のデータ構造体にツールをフィクスチャします。フィクスチャするとき、対象物のすべてのインスタンスに見られる際立った特徴を特定し、後続のビジョンツールの参照ポイントとして指定します。これにより、生産ライン上で対象物が多少回転したり、ずれたりしても、比較や検査を正確に行うことができます。

関数をフィクスチャするには、プロパティシートで「フィクスチャ」という単語をクリックし、プロパティシートのツールバーにある [絶対参照] ボタンまたは [相対参照] ボタンをクリックします。

プロパティシートが表示されなくなり、In-Sight スプレッドシートが表示されます。カーソルを動かしてスプレッドシートの別のデータ構造体 (FindPatterns など) の行、列、角度の各セルをフィクスチャの参照として選択したら、[ジョブの編集] ツールバーの [OK] ボタンをクリックして (または Enter キーを押して) 選択を確定し、プロパティシートに戻ります。

プロパティシートの [学習を強制] チェックボックスがオンになっていることを確認します。これにより、画像の取り込みを手動でトリガした際にテンプレート画像 (下図) が自動的に抽出されます。(ただし、[学習を強制] チェックボックスをオンにするだけで、画像の取り込みがトリガされるため、現在の画像で問題がなければ、画像の設定と手動での取り込みのトリガを省略することができます。)テンプレートを選択した後は、このチェックボックスをオフにして、テンプレートが上書きされるのを防ぐことができます。

その他のパラメータについてはデフォルト設定を受け入れ、プロパティシートで [OK] をクリックしてこの例の設定を完了し、関数を入力画像に適用します。

実行時に、テンプレート画像が入力画像と比較されます。「不良」な入力画像のガスケットに白い部分があるとします (下図)。

2 つの画像の差は、グレースケール出力画像 (下図) で明るいピクセルとして表示されます。

別のツール (DetectBlobs など、下図を参照) では、出力画像を参照して、ガスケットの検査の合否を判定することができます。