# Caliper

対象物の幅の測定、単一エッジの位置の特定、エッジペアの位置と間隔の特定など、エッジに関する検査を行うために使用します。Caliper 関数は最も正確なエッジ関数ですが、セットアップと設定に時間がかかります。

## Caliper の概要

Caliper 関数を使用して画像を調べ、1 次元のエッジ、つまり周囲のピクセルのグレースケール値の変化を探します。この関数は、画像の指定した部分 ([領域] パラメータで定義) を調べ、黒から白、または白から黒への一方向に、ピクセルのグレースケール値の遷移をスキャンします。単一エッジまたはエッジのペア (予測される幅によって区別されます) をこの関数で探すことができます。

Caliper 関数は、対象物の内部または周囲のエッジの特徴の正確な位置に関する詳細情報を作成するアプリケーションで役立ちます。例えばこの関数を使用して、チップのリードをカウントする、部品の幅を測定する、別のビジョンツールで入力として使用するエッジポイントを検出するなどが可能です。この関数は、エッジモデルに基づいてエッジまたはエッジペアを探します。エッジ候補のピークがシンプルな 1D カーネルを使用して検出され、モデルと得点付け方法を使用して得点が付けられます。

画像内の対象エッジの位置と方向を特定したら、Caliper 関数を適用できます。

- Region を、エッジまたはエッジペアを囲むように設定します。
- [エッジモード] パラメータをエッジのタイプ (単一エッジまたはエッジペア) に設定し、検出するエッジの数を指定して、エッジ極性、位置、および間隔を含むエッジモデルを作成するように[第 1 エッジ]、[第 2 エッジ]、および [エッジ間の距離] パラメータを設定します。
- エッジまたはエッジペアが分離されるように [エッジ幅] および [最小コントラスト] パラメータを設定します。
- エッジ候補に得点を付けるために使用する得点付け方法を定義します。

## 領域の設定

領域を位置決めするときに、目的とするエッジを適切に識別できるように、スキャン方向を設定します。スキャン方向は、検出する最初のエッジの方向を指している必要があります。エッジの位置は、領域の中心に対して、エッジが検出される位置によって特定されます。

## エッジの分離とエッジモデルの定義

Caliper 関数は、領域内でエッジの位置を特定した後、画像内のエッジ候補ごとに得点を計算します。各エッジの得点は、現在の画像内のエッジと、定義された理想的なエッジとの類似性に基づいて計算されます。現在の画像内のエッジは「エッジ候補」とみなされ、理想的なエッジは「エッジモデル」と呼ばれます (単一エッジまたはエッジのペア)。

## エッジモデル

画像内のエッジ候補が、求めているエッジと適切に一致しているかどうかを評価するには、対象エッジを正確に表現するモデルを定義する必要があります。エッジモデルを定義するには、最初にエッジのタイプ (単一エッジまたはエッジのペア) を定義します。次に、領域内で探すエッジタイプの数を定義します。その後、極性 (白から黒または黒から白)、モデル内の各エッジの位置 (領域に対するエッジの位置によって指定)、およびエッジの間隔 (エッジペアを定義する場合) を指定します。

###### 最小コントラストしきい値を使用したエッジ検出とピーク検出

[エッジ幅] パラメータを使用して、入力画像からノイズを除去し、エッジプロファイルのピークを強調します。[最小コントラスト] パラメータを使用して、最小ピーク高さ (コントラストしきい値) を設定します。

###### エッジモードの得点付け

Caliper 関数は領域をフィルタ処理し、指定したコントラストしきい値を超えるエッジピークのリストを作成した後、画像内の各エッジ候補の得点を計算します。この得点により、画像内のどのエッジ候補が、エッジモデルの定義に従って実際の対象エッジのインスタンスを表しているかを判断できます。

Caliper 関数は、得点付け方法と呼ばれるユーザ定義の一連の得点付け基準に基づいて、エッジ候補をエッジモデルと比較することにより、各エッジ候補の得点を計算します。

得点付け方法には次の 2 つの部分があります。

- 評価するエッジの測定値を定義する得点付け方法の種類
- 未処理の測定値と、得点付け方法で使用するために生成されるマッピングされた得点の間の関係を定義する得点付け関数

得点付け方法は複数定義することができます。Caliper 関数は、定義したすべての得点付け方法を画像内の各エッジ候補に適用し、各エッジ候補の総合得点を返します。適切な得点付け方法を定義すると、得点が最も高いエッジ候補が対象エッジとなります。

## 得点付け方法の種類

Caliper 関数は、エッジ候補がエッジモデルとどの程度異なるかを示す、エッジ候補の得点に基づいています。この差異を判定するためにツールで使用する測定方法は、ユーザが定義します。指定できる測定方法の種類は得点付け方法の種類と呼ばれ、コントラスト、位置、サイズ、またがるの 4 種類の得点付け方法があります。

この関数で得点付け方法の種類をエッジ候補に適用すると、未処理の得点が生成されます。未処理の得点は、得点付け方法の種類によって異なります。得点付け方法の種類とその未処理の得点については、次のセクションで説明します。

###### コントラスト得点付け方法

エッジ候補のコントラストに基づいてエッジ候補に得点を付けます。エッジのコントラストは、ピクセル値の変化を、エッジのサイズ (ピクセル単位) で除算した値で表します。コントラスト得点付け方法の未処理の得点は、値 100 がコントラスト 256 (コントラストの最大値) と等しくなるように正規化されます。エッジペアモデルを指定した場合、未処理の得点は 2 つのエッジのコントラストの平均となります。

###### 位置得点付け方法

領域の中心に対するエッジ候補の位置に基づいてエッジ候補に得点を付けます。位置は、エッジ候補内の中心とモデルの原点の距離として定義されます。対象エッジが領域の中心から特定の距離にあると予想される場合、絶対位置得点付け方法を定義することができ、未処理の得点はピクセル単位で絶対距離として表されます。エッジペアモデルを使用し、エッジ候補と、モデルのサイズに対する領域の中心の間の位置の変動を考慮する必要がある場合は、相対位置得点付け方法を定義します。この場合、距離がモデルのサイズに等しい場合に値が 100 になるように、未処理の得点が正規化されます。

###### サイズ得点付け方法

エッジペアモデルを使用している場合、エッジ候補のエッジ間の幅が、エッジモデルのエッジ間の幅とどの程度異なるかに基づいて、エッジ候補に得点を付けることができます。サイズ得点付け方法は絶対値として定義することができ、未処理の得点はサイズの差異の絶対値 (ピクセル単位) として返されます。モデルのサイズに対するサイズの差異を識別する必要がある場合は、相対サイズ得点付け方法を定義します。この場合、サイズの差異がモデルのサイズと等しい場合に値が 100 になるように、未処理の得点が正規化されます。

###### またがる得点付け方法

エッジペアモデルが使用されている場合、2 つのエッジが領域の中心の両側にあるかどうかに基づいて、エッジペア候補に得点を付けることができます。この種類の得点付け方法を使用すると、領域の中心にあると予想されるエッジのペアで定義された対象物を見つけることができます。エッジが領域の中心をまたいでいる場合、未処理の得点として 100 が返され、エッジが領域の中心をまたいでいない場合は 0 が返されます。

## 得点付け関数

それぞれの得点付け方法で、選択した得点付け方法の種類に従って未処理の得点が生成されます。この未処理の得点がエッジ候補の総合得点に与える影響を制御するには、得点付け関数を定義します。得点付け関数は、未処理の得点を特定の得点にマッピングします。各得点付け方法であるエッジ候補にマッピングされた得点が合計されて、そのエッジ候補の総合得点となります。

## Caliper の [標準] タブ

パラメータ | 説明
画像 | このパラメータは、スプレッドシートで画像データ構造体を含むセルを参照する必要があります。デフォルトでは、このパラメータは、データ構造体を含むセル A0 を参照しています。また、このパラメータは、画像データアクセス関数や、座標補正関数により返された、その他の画像データ構造体も参照できます。
フィクスチャ | Fixture入力、またはビジョンツール関数の画像座標系の出力に関連する対象領域 (ROI) を定義します。フィクスチャに関連する ROI を設定すると、フィクスチャが回転または移動した場合に、フィクスチャに対応して ROI を確実に回転または移動できます。 デフォルト設定は画像の左上隅で、(0, 0, 0) になります。
X | 画像座標での X オフセット。
Y | 画像座標での Y オフセット。
角度 | 画像座標系での画像の X 軸からの回転 (時計回り +/-360 度)。
領域 | これは対象領域 (ROI) とも呼ばれ、解析の対象となる画像の領域を表します。[領域] パラメータをダブルクリックすると、変換と回転が可能な対話型グラフィックスモードを作成できます。このパラメータを選択して、プロパティシートの [ジョブの編集] ツールバーにある [領域の最大化] ボタンを押すと、画像全体が対象になるように領域が自動的に拡張されます。
X | フィクスチャ座標での原点の X オフセット
Y | フィクスチャ座標での原点の Y オフセット
幅 | 領域の X 軸に沿った寸法
高さ | 領域の Y 軸に沿った寸法
角度 | フィクスチャ座標での角度
カーブ | 領域の X 軸と反対側の境界線との間の角度変位
注: [フィクスチャ] および [領域] パラメータは、画像の範囲内で定義されている必要があります。画像の範囲内で定義されていない場合、この関数は #ERR を返します。
エッジモード | 単一エッジとエッジペアのどちらを探すかを指定します。
単一エッジ | 指定した基準を満たす単一エッジを領域でサーチし、その位置を返すように指定します。このモードでは、位置およびコントラスト得点付け方法を使用できます。
エッジペア | 指定した基準を満たすエッジペアを領域でサーチするように指定します。このモードでは、位置、コントラスト、サイズ、またがる得点付け方法を使用できます。
検出する数 | 返されるエッジまたはエッジペアの最大数を指定します (1 ～ In-Sight カメラの画像の幅 - 1、デフォルト = 1)。特定の In-Sight カメラが画像を取り込んでいる場合、検出されるエッジの最大数は画像の幅より 1 少ない数になります (つまり、ISC 8402 カメラの最大数は 1599 で、ビジョンシステムの画像解像度 1600 × 1200 より 1 少ない数になります)。得点が [アクセプトしきい値] パラメータ値を上回るエッジまたはエッジペアがこの最大数よりも多い場合は、最高得点のエッジまたはエッジペアが選択されます。
最小コントラスト | エッジまたはエッジペアの最小コントラストを指定します (0 ～ 100、デフォルト = 5)。コントラスト値は、領域内のグレースケールヒストグラムを 0 ～ 100 のスケールに正規化したものです。この関数は、この設定を上回るコントラスト値を持つエッジまたはエッジペアのみを返します。
アクセプトしきい値 | エッジ候補の許容できる最低一致得点を指定します (0 ～ 100、デフォルト = 5)。この関数は、この値を超える一致得点を持つエッジまたはエッジペアのみを返します。一致得点は、指定したすべての得点付け方法の幾何平均です。
エッジ幅 | エッジ変化が起きるピクセル距離を指定します (1 ～ 50、デフォルト = 2)。エッジを抽出する前にエッジ幅を使用して画像をフィルタ処理します。
第 1 エッジ | 領域内のスキャン方向に相対的に、ペアの第 1 エッジの極性を指定します。黒→白または白→黒を設定すると、第 1 エッジに指定した極性があるエッジペアのみが報告されます。
0 = 黒→白 | エッジの極性を黒→白に指定します。
1 = 白→黒 | エッジの極性を白→黒に指定します。
2 = 任意 (デフォルト) | エッジの極性を黒→白または白→黒のいずれかになるように指定します。
第 2 エッジ | 領域内のスキャン方向に相対的に、ペアの第 2 エッジの極性を指定します。黒→白または白→黒を設定すると、第 2 エッジに指定した極性があるエッジペアのみが報告されます。 注: このパラメータは、[エッジモード] パラメータが [エッジペア] に設定されている場合にのみ使用されます。
0 = 黒→白 | エッジの極性を黒→白に指定します。
1 = 白→黒 | エッジの極性を白→黒に指定します。
2 = 任意 (デフォルト) | エッジの極性を黒→白または白→黒のいずれかになるように指定します。
エッジ間の距離 | エッジペアの 2 つのエッジ間のピクセル距離を指定します (In-Sight ビジョンシステムの幅の 1 ～ 3 倍、デフォルト = 10)。このパラメータは、エッジペアモードの場合のみ使用されます。エッジ間の距離が領域の幅より長い場合、この関数は #ERR を返します。領域が回転も湾曲もしていない場合、この値は [領域] の値以下で、[幅] の値より大きい必要があります。 注: In-Sight ビジョンシステムの画像の幅は、画像を取り込んでいる特定の In-Sight ビジョンシステムの画像の幅です (つまり、In-Sight 5100 ビジョンシステムの最大値は 1920 となり、ビジョンシステムの画像解像度 640 x 480 の幅の 3 倍になります)。
表示 | 画像上の Caliper グラフィックスオーバレイの表示モードを指定します。
0 = 非表示 (デフォルト) | Caliper 関数を含んでいるセルがスプレッドシート内のアクティブセルである場合を除き、すべてのグラフィックスが表示されません。
1 = 結果のグラフィックスのみ | 直線エッジが常に表示されます。
2 = 入力と結果のグラフィックス | 入力画像領域と直線エッジは常に表示されます。
3 = すべて表示: 入力、結果、およびチャート | 入力画像領域、直線エッジ、およびエッジのレスポンスチャートが常に表示されます。 注: エッジのレスポンスチャートは、ドッキング可能なウィンドウです。詳細については、「スプレッドシートエディタ – チャート」のトピックを参照してください。

## Caliper の [得点付け方法] タブ

[得点付け方法] タブを使用して、エッジモデルと比較してエッジ候補に得点付けするために使用される得点付け関数を選択し、編集します。各エッジ候補について、選択したそれぞれの得点付け方法の未処理の得点を Caliper 関数で計算し、得点付け関数を適用すると、エッジ候補の総合得点が計算されます。総合得点を計算するには、マッピングされた得点の積の N 番目のルートを求めます。例えば、4 つの得点付け方法が定義されている場合、Caliper 関数は 4 つの得点を乗算し、その結果の 4 番目のルートを求めます (1 つの得点付け関数の結果が値 0 である場合、エッジ候補の総合得点も 0 になります)。

注: 得点付け方法は少なくとも 1 つ指定する必要があります。指定しないと #ERR が返されます。デフォルトでは、コントラスト得点付け関数が適用されます。

Caliper の [得点付け方法] タブは、次の 3 つの領域に分かれています。

- 得点付け関数の追加
- 現在の得点付け関数
- 得点付け方法のパラメータ編集

## 得点付け関数

[得点付け関数の追加] セクションのドロップダウンメニューから、[位置]、[コントラスト]、[サイズ]、[またがる] のいずれかを選択します。確定するには [追加] ボタンをクリックします。

注: [サイズ] と [またがる] は、[標準] タブの [エッジモード] パラメータで [エッジペア] を設定した場合にのみ使用できます。

パラメータ | 説明
位置 | この得点付け方法はエッジペアおよび単一エッジに使用可能であり、領域の左側または中央を基準とした、エッジまたはエッジペアの相対位置に基づいています。得点付け設定を調整して、領域の左側までの近さに基づいてエッジまたはエッジペアに 0 ～ 100 の範囲の得点を割り当てます。 [中心領域] チェックボックスがオンの場合 (デフォルトの状態)、領域の中心からの相対位置に基づいてエッジまたはエッジペアに得点を付けます。得点付け計算の基準として [外側エッジ] または [中央エッジ] ラジオボタンを選択します。中央エッジは領域の中心に近いエッジ、外側エッジは中心から離れているエッジです。 [中心領域] チェックボックスがオフの場合、領域の左側または右側からの相対位置に基づいて得点が付けられます。得点付け計算の基準として [左側エッジ] または [右側エッジ] ラジオボタンを選択します。 [エッジペア距離に正規化する] チェックボックス (エッジペアの場合にのみ使用) をオンにすると、エッジペアのエッジ間の距離を [エッジ間の距離] パラメータ値で除算してから、得点を計算します。これによって、得点計算に実際の値ではなくパーセンテージ値を使用することで、領域内のサイズの変化に適応することができます。 注: [エッジペア距離に正規化する] は、エッジペアにのみ使用できます。
コントラスト | この得点付け方法はエッジペアと単一エッジに使用可能であり、エッジ候補のコントラスト、つまりエッジを構成する隣接ピクセル間のコントラストの変化に基づいています。 エッジペアでは、2 つのエッジの平均コントラストが使用されます。得点付け設定を調整して、エッジまたはエッジペアに、コントラストに基づいて 0 ～ 100 の範囲の得点を割り当てます。得点計算の基準は、[低コントラストのエッジ] または [高コントラストのエッジ] のいずれかです。
サイズ | 注: エッジペアにのみ使用できます。 この得点付け方法は、エッジペア間の距離 (サイズ) に基づいています。得点付け設定を調整して、エッジペアに、サイズに基づいて 0 ～ 100 の範囲の得点を割り当てます。 [エッジペア距離の差異を使用する] チェックボックスは、得点の計算に実際の距離を使用します。得点計算の基準として、[エッジ間の距離] パラメータ値により近い距離またはより離れている距離 (ピクセル単位) を使用します。それ以外の場合、得点計算の基準は、予想された [エッジ間の距離] パラメータ値より長い、または短いエッジ間の距離になります。 [左右対称モードを使用する] チェックボックス (デフォルトではオフ) で、領域の拡大/縮小を許可することができます。この設定を使用すると、[エッジ間の距離] パラメータ値より短いサイズと長いサイズの両方を指定することができます。この設定では一方向の変化を許容し、もう一方への変化を無視することができます。例えば、短い距離を許容して、より長い距離には低い得点を付けるように設定できます。
またがる | 注: エッジペアにのみ使用できます。 この得点付け方法は、2 つのエッジが、領域の中心の両側にあるかどうかに基づいています。このタイプの得点付け方法を使用して、画像領域の中心に位置すると予測されるエッジのペアによって定義された対象物を見つけることができます。エッジペアのエッジが画像領域の中心にまたがらない場合の得点は 0 で、またがる場合は 100 点になります。

## 現在の得点付け関数

このセクションには、現在の得点付け関数の状態と設定が表示されます。デフォルトでは、最初に高コントラスト得点付け関数が作成されます。[コピー] ボタンを使用して関数を複製することも、[削除] ボタンを使用して削除することもできます。

ラベル | 説明
OK | ステータスライト: 緑 = 有効な得点付け方法 赤 = この得点付け方法は現在のキャリパエッジモードで有効ではありません。
得点付け方法 | 得点付け関数の種類と、[得点付け方法のパラメータの編集] セクションで設定したその他のパラメータが表示されます。
最高得点 | 関数の最高得点 (デフォルトは 100) は、[得点付け方法のパラメータの編集] セクションで調整することができます。

## 得点付け方法のパラメータ編集

このセクションにある対話型のチャートを使用すると、点をクリックして目的の設定に移動して調整することができます。使用できる設定は、得点付け関数の種類によって異なります。

| 点をクリックすると、コントロールハンドルが表示されます。マウスで点を移動することも、矢印ボタンでより正確に制御することもできます。設定によって一部の点の移動範囲が制限され、位置を変更できない場合があります。

得点付け関数を定義するには、入力値と出力値にそれぞれ高値と低値を指定します。得点付け関数には、片側と両側の 2 種類の得点付け関数があります。

###### 片側得点付け関数

この得点付け関数を設定するには、xC、x1、x0、y1、および y0 の値を定義します。y0 と y1 に定義する値は、0 ～ 100 の値である必要があります。xC、x1、および x0 に指定する値は、負の値を含めることができ (xC、x1、および x0 点の 1 つ以上の未処理の得点がゼロ未満となると予測される場合に、負の値を指定します)、選択した得点付け方法の種類によってその範囲が決まります。定義した得点付け関数は、次のように入力得点を出力得点にマッピングします。

- x0 を超える入力は、出力得点 y0 にマッピングされます。
- xC を下回る入力値は、出力得点 0 にマッピングされます。
- xC ～ x1 の入力値は、得点 y1 にマッピングされます。
- x1 ～ x0 の入力値は、y1 ～ y0 の範囲の得点に直線的にマッピングされます。

上の図に示す得点付け関数は、入力得点が高いほど出力得点が高くなる場合に適しています。その例として、エッジのコントラストが大きいほど得点が高くなるコントラスト得点付け方法などがあります。

###### 両側得点付け関数

エッジペアを使用している場合に、エッジモデルより小さいエッジ候補に、エッジモデルより大きいエッジ候補とは異なる得点を付けるように、両側得点付け関数を定義することができます。上の図は、エッジモデルより小さいエッジ候補と比べて、エッジモデルより大きいエッジ候補の許容度が高い、両側得点付け関数の例を示しています。この例では、エッジ候補がエッジモデルとまったく同じサイズである場合、入力得点は 0.0 となり、エッジ候補がエッジモデルより小さい場合、入力得点は 0 未満になり、エッジ候補がエッジモデルより大きい場合、入力得点は 0 より大きくなります。

両側得点付け関数を指定した場合、未処理の得点が正規化されて、エッジモデルのサイズと同じ分量だけエッジモデルより小さいエッジ候補が入力得点 -100 を受け取り、エッジモデルのサイズと同じ分量だけエッジモデルより大きいエッジ候補が入力得点 100 を受け取ります。

## Caliper の出力

戻り値 | ペアエッジを含むエッジデータ構造体。入力パラメータが無効であれば #ERR を返します。
結果 | Caliper 関数を初めてセルに挿入すると、スプレッドシート内に結果テーブルが自動的に作成されます。 結果テーブルを作成するため、次のエッジデータアクセス関数がスプレッドシートに自動挿入されます。
ラベル | 関数 | 説明
インデックス |  | インデックスの位置
X0 | GetX(エッジ, エッジインデックス, 0) | 指定したエッジの始点の x 座標。
Y0 | GetY(エッジ, エッジインデックス, 0) | 指定したエッジの始点の y 座標。
X1 | GetX(エッジ, エッジインデックス, 1) | 指定したエッジの終点の x 座標。
Y1 | GetY(エッジ, エッジインデックス, 1) | 指定したエッジの終点の y 座標。
得点 | GetScore(エッジ, エッジインデックス) | エッジまたはエッジペアの得点。指定したすべての得点付け関数の幾何平均です。
コントラスト | GetContrast(エッジ, エッジインデックス) | エッジの前景と背景の間の平均コントラスト (グレースケール階調で、0 ～ 255)。コントラストは黒→白の場合は正の値、白→黒の場合は負の値になります。
位置 | GetPosition(エッジ, エッジインデックス) | エッジまたはエッジペアの中心の、画像領域の左側からの相対的な X 位置。
注: エッジモードに [単一エッジ] が選択されている場合、結果テーブルには、各エッジのインデックス、行 0、列 0、行 1、列 1、得点、コントラスト、および位置が含まれます。インデックスは 0 から始まり、表示される行数は [検出する数] の設定値と等しくなります。 エッジモードに [エッジペア] が選択されている場合、結果テーブルには、各エッジのインデックス、行 0、列 0、行 1、および列 1 と、そのペアの最初のエッジの得点、コントラスト、位置、および距離が含まれます。インデックスは 0 から始まり、表示される行数は [検出する数] の設定値の 2 倍になります。