EasyGauge - サブピクセルまで測定
EasyGaugeライブラリは寸法を制御します。各部品の位置、方向、曲率およびサイズを高精度で測定します。グラフィックで位置ゲージとサイズゲージを連携させ、グループ化した階層でそれらを組み合わせて、すべてのパラメータとともに保存および取得することができます。

ゲージモデルはプログラミングにより、あるいはグラフィックエディタで構築して、最終アプリケーションで「再生」します。
対象となるモデルの複雑さと必要とされる精度に合ったワークフロー(キャリブレーションなし、キャリブレーションあり、グループ化)を選択してください。

EasyGaugeの基本的な使用方法は簡単です。
- 必要な測定に合わせてゲージオブジェクトを作成します。
- デフォルト値が適切でないパラメータを変更します。
- 希望する測定関数を呼び出します。
- 結果の位置パラメータを読み取ります。
キャリブレーションなしのゲージングは簡単に実装できますが、デメリットもあります:
- 測定はミリメートル単位ではなくピクセル単位で実行されます。
- 測定モデルは移植性がありません:観察条件が変わったらゲージの位置およびサイズを修正する必要があります。
- 光学ディストーションやパースペクティブにより不正確な測定が行われます。

キャリブレーションありのゲージングは精度が高く、観察条件に関係なく検査対象の部品を測定できます。
すべての測定はキャリブレーション単位で行われ、あらゆるディストーションが暗黙のうちに補正されます。視野キャリブレーションの詳細を知るには、キャリブレーションを参照してください。
- キャリブレータオブジェクトを作成します。
- 検査対象の画面上にそれを配置します。
- キャリブレーションパラメータを調整します。
- ゲージをアタッチします。

ゲージをグループ化して(ゲージ操作プロセスを参照)、別のアイテムにアタッチすることができます:
- EFrameShapeオブジェクトにゲージをアタッチすると、ゲージがフレームと一緒に移動します(平行移動および/または回転)。アプリケーションプログラムは検査対象の部品を追跡するためにフレーム位置を変更しなければなりません。
- 別のゲージにゲージをアタッチすると、支持ゲージの測定位置に応じてそれらが移動します。例えば、ある部品の輪郭の検出に使用している長方形ゲージに複数のゲージがアタッチされている場合、長方形の輪郭が適合すると全ゲージが自動的に部品を追跡します。
複数の測定位置がある場合、完全なモデルをキャリブレーションモード、係数、アタッチされているゲージと一緒に1つのファイルに保存できます。


1つまたは複数のオブジェクトエッジを交差するラインセグメント測定に沿って、最も重要な遷移点を選択できます。ノイズを除去するために横方向および縦方向のフィルタリングを実行できます。
点の位置検出。コントラストベースの選択

ウェッジ型ゲージの位置は、ノミナル位置(中心の座標によって決まる)、ノミナル内半径および外半径(内径および外径)、幅(半径の差)、角度の開始位置、角度の大きさによって定義されます。
Setメンバは、完全な円、扇形、ディスクを区別します。
ウェッジの各辺には独自の遷移検出パラメータを設定することができ、ActiveEdges属性によって有効または無効に設定できます。辺が有効であるとき:
- パラメータの値を設定すると、現在有効な辺のみに適用されます。
- このパラメータの値がすべての有効な辺で同じ場合にのみ、パラメータの値を取得したときに結果が得られます。
- 有効な辺のみが測定およびモデルフィッティングに使用されます。
このように各辺に異なるパラメータを設定できるため、ウェッジ全体の代わりに平行な弧または傾斜した辺またはコーナーの点のみを測定できます。4つの辺はそれぞれ「a」、「r」、「AA」および「RR」の文字で表します。
ウェッジ型ゲージの各辺のネーミング規則
使用方法
ゲージを定義して位置を合わせ、Measureを使用してラインを合わせます。
ウェッジの属性を得るには、ActualShape属性をTRUEに設定して、フィッティングされたラインが(デフォルトのノミナルライン位置FALSEの代わりに)返されるようにします。
あるいは、MeasuredWedgeによりEWedgeオブジェクトとして結果を出力します。

ラインゲージの場所は、その中心の座標、長さ、X軸を基準とした角度によって定義されます。 ラインの傾斜値を指定するには、AngleおよびKnownAngleを設定します。
ラインフィッティング
使用方法
ゲージを定義して位置を合わせ、Measureを使用してラインを合わせます。ラインの属性を得るには、ActualShape属性をTRUEに設定して、フィッティングされたライン(TRUE値)が(デフォルトのノミナルライン位置FALSE値の代わりに)返されるようにします。
あるいは、MeasuredLineによりELineオブジェクトとして結果を出力します。

円形ゲージの位置は、ノミナル位置(中心の座標によって決まる)、ノミナル直径(または半径)、角度の開始位置、角度の大きさによって定義されます。
Setメンバは円と弧を区別できます(弧の大きさを指定する必要があります)。
円形フィッティング
使用方法
ゲージが定義されて位置決めされたら、Measureを使用して円形フィッティングの演算を開始します。測定結果を得るには、ActualShapeモードをTRUEに設定します。ActualShapeモードにより、照会時にフィッティングされた円(TRUE 値)または円のノミナル位置(FALSE値、デフォルト)が返されるのかが決まります。そして、要求された情報が円のプロパティを用いて取得されます。
あるいは、MeasuredCircleによりECircleオブジェクトとして結果を出力します。

ラインセグメント測定に沿って1つまたは複数のオブジェクトエッジを交差するすべての遷移点の位置を検出した後で、その中で最も重要な箇所を選択できます。ノイズを除去するために横方向および縦方向のフィルタリングを実行できます。
点の位置検出。コントラストベースの選択

点の位置検出の原理(左)、S字曲線とその導関数(右)
画像から抽出した線形のプロファイルでは、暗い色から明るい色(またはその逆)への遷移がエッジとして表されます。ピクセル値をゲージに沿ってプロットすると、このような遷移はS字状の曲線となります。この曲線の一次導関数は遷移点付近のピークとなって表れます。コントラストがはっきりしているほど遷移が鮮鋭になり、ピークが大きくなります。
EasyGaugeはプロファイル(赤色の曲線)に沿ってピクセル値を抽出し、ピーク解析によって遷移の位置を検出します。ピーク領域 導関数曲線とユーザー定義の水平閾値レベルの間の領域にある全ピクセル値が遷移の位置検出を計算するために使用されます。
- 遷移が少なくとも2ピクセル幅のほぼ均一な領域に囲まれている場合にのみ、サブピクセル精度が可能になります。
- BWBBlack / White / Black(黒/白/黒)遷移のプロファイルは上り曲線となり、ピークは正の値をとります。それ以外の場合は、曲線は下りでピークは負になります。
- BWBまたはWBWの遷移は一次導関数ではなく、EPointGauge(またはサンプルパス)に沿ったグレーレベルプロファイルでのピーク解析に基づいて検出されるため、通常はデフォルトの閾値 (20) を用いてピークを検出することはできません。
EPointGaugeには点測定の全パラメータが含まれ、コントラストがはっきり分かれているエッジはデフォルト値で検出されます。

Center:点のノミナル位置(通常は測定の前と後で異なる)。
Tolerance:許容値とゲージの方向。
TransitionType、TransitionChoice、TransitionIndex:ピーク選択の方法。
Threshold:雑音排除性。
MinAmplitude、MinArea:ピーク強度。
Thickness、Smoothing:ローカルフィルタ幅。
RectangularSamplingAreaはサンプリング領域(デフォルトは長方形)に横断フィルタリングモードを設定します。
Measure:オブジェクトを測定します。
- 単一遷移モードでは、適切な点が検出されるとValidがTrueを返します。測定結果を得るには、ActualShapeをTrueに設定することで、Centerにより検出点が返されるようにします(デフォルト値のFalseの場合は点のノミナル位置が返されます)。
- 複数遷移モードでは、NumMeasuredPointsは検出された点の数を返し、
GetMeasuredPointは検出された点の情報を含むEPointオブジェクトを返します。
0~GetNumMeasuredPoints-1までの整数インデックスを渡す必要があります。
GetMeasuredPeak:ピークのAreaとAmplitudeを含むEPeakを返し、測定セグメントに沿って座標を制限します(Start、LengthおよびCenterの値)。

閾値レベルが重要になります:
- 高すぎると重要なピークを見落としてしまうおそれがあり、優れた精度を得るにはピクセル値が不十分であることがあります。
- 低すぎるとノイズがピークと見なされるおそれがあります。
このジレンマを解消するため、EasyGaugeではピークを選択する際に低コントラストまたは偽のエッジを拒否することができるようになっています:遷移の強度はピークの振幅と面積によって測定されます。エッジ測定ごとにピークの振幅と面積が求められます。最小振幅または最小面積より値が小さくなると、その位置ではピークが無視されて点が考慮されなくなります。

複数遷移モードでは、複数のエッジ点を一度に測定して、後からすべての結果を取得することができます。
最も重要な遷移を1つだけ選択するには、最高ピーク、最大面積のピーク、ゲージ中心に最も近いピーク、ゲージの片方の端からN番目のピークの4つの基準を使用できます。

ポイントゲージの予想されるノミナル位置は、その中心、X軸を基準とした方向角度、長さ許容値によって指定され、それによって点の位置が変化することがあります。
その結果は、検出された点の座標(現在位置)と遷移の強度(振幅および面積)です。
低い値は、信頼性または精度が低い測定による弱いエッジを意味します。

EasyGaugeのデフォルトのパラメータおよび動作モードは鮮鋭なエッジに適しています。しかし、より複雑なケースではパラメータの調整が必要になる場合もあります。

ELineGauge、ECircleGauge、ERectangleGaugeまたはEWedgeGaugeといったあらかじめ定義されている幾何学モデルをオブジェクトのエッジにフィッティングすることができます。ターゲットのエッジを定義し、等間隔の点測定ゲージでエッジに沿って点をサンプリングします。その際、最小二乗のモデルフィッティングを適用できます:
ライン:直線エッジの位置および方向を測定します。 | ![]() ![]() |
円:円または弧の位置および曲率を測定します。 | ![]() ![]() ![]() |
長方形:長方形の位置、方向、大きさを測定します。 | ![]() ![]() |
ウェッジ:円/扇形/曲線長方形の位置、方向、大きさを測定します。 | ![]() ![]() ![]() |
すべてのタイプのゲージに共通の機能があります:
ポイントサンプリング | ||
ポイントゲージはエッジに沿って配置され、等間隔の点において測定が行われます。各点は長方形およびウェッジゲージの辺ごとに調整できます。すべての点測定パラメータおよび動作モードに対応しています。 SamplingStepではモデルに沿って点の位置検出ゲージの間隔を設定します。 NumSamplesは、モデルのフィッティング演算中にサンプリングされた点の数を返します。 |
![]() パスのサンプリングとサンプリングされた点 |
|
モデルフィッティング | ||
エラーを最小限に抑えてエッジパラメータを最適に推計できるようにモデルが調整されます。長方形とウェッジには平行性と同心性について制約があります。この図はサンプリングされた点とフィッティングされたラインを示します。 |
![]() |
|
外れ値の排除 | ||
モデルフィッティングの後、いくつかの点がフィッティングされたモデルからかなり離れた場所にあり、それによって位置特定精度が損なわれることがあります。EasyGaugeではFilteringThreshold属性を使ってこのような点を外れ値としてタグ付けし、無視することができます。 外れ値を除外するプロセスは、NumFilteringPassesを使って数回繰り返すことができます。 |
![]() |

EasyGaugeではグラフィック上でゲージと連携することができます。それにより、ゲージの位置決め/サイズ変更、グループ化されたアイテムの階層化、モデルファイルから動作パラメータの保存/取得が可能になります。

Drawはゲージのグラフィック表示を行います。描画は、希望のウィンドウに関連付けられたデバイスコンテキスト内で現在のペンを使って行われます。演算に応じてハンドルが表示されます。

対話形式で画像上にゲージをドラッグすることができます。さまざまなドラッグハンドルを使用できます。
- HitTestによって、マウスカーソルがいつハンドルに合わせられたかを判断します。そしてカーソルが合わせられると、カーソルの形状が変化してドラッグ可能な状態であることを知らせます。
- Dragはハンドルを移動し、それに合わせてゲージも移動します。

EasyGaugeではサンプリングされたパスおよび/またはその導関数に沿ってグレーレベル値をプロットすることができます。これはパラメータの調整に便利です。
点測定ゲージはMeasureを呼び出した後でプロットできます。
モデルフィッティングゲージは、0からGetNumSamples-1(を含む)の間のインデックス引数でMeasureSampleを呼び出した後でプロットできます。
対応するサンプリングパスを表示するには、EDrawingMode_SampledPathモードでDrawメソッドを使用してください。

測定前に検査対象アイテム/サンプルの動きを追うために、測定ゲージをグループ化して移動(平行移動および回転)可能な専用ツールを形成することができます(相対位置は固定されたままです)。
Attachによりゲージが母ゲージまたはEFrameShapeオブジェクトに関連付けられます。
NumDaughters、GetDaughterまたはMotherにより、アタッチされた娘または母に関する情報が取得されます。
Detach、DetachDaughtersはゲージまたは娘ゲージを母ゲージから切り離します。


光学セットアップが変更された場合、EWorldShapeオブジェクトにより(カメラ位置とレンズ倍率が固定された特定の画像条件のもとで)視野全体をキャリブレーションできます。
EWorldShapeは適切なキャリブレーション係数を計算し、それに関連付けられた測定ゲージを変換します。
それにより、ワールドからセンサーへの変換パラメータの設定、一方の座標系から別の座標系への変換の実行、未知のキャリブレーションパラメータの決定、後の再利用を見据えた変換パラメータの保存を行えます。
キャリブレーションの後、次のような目的のためにEWorldShapeはSensorToWorldおよびWorldToSensorによって任意の点の座標変換を実行できます:
- 非スクエアピクセルと回転座標軸を測定するため
- パフォーマンスを低下することなくパースペクティブおよび光学ディストーションを補正するため
キャリブレーション係数を取得するにはいくつかの方法があります:

キャリブレーション係数を推定するには、視野の境界を決めて画像解像度を視野サイズで割るか、または以下の手順に従います:
- 検査対象部品またはキャリブレーションターゲット(長方形など)の画像を取り込みます。
- 画像上でコーナーなどの特徴点の位置を(目で)確認し、その座標をピクセル単位で決めます。ここでは (i,j) とします。
- ユークリッド距離式を使ってキャリブレーション係数を導きます:
このとき、Cは単位当たりのピクセル数で表されたキャリブレーション係数で、Dは対応する点間の各単位でのワールド距離です。 - 非スクエアピクセルの場合は、水平点と垂直点の組にこの演算を繰り返します。
スキュー角を推定するには、ワールド座標系のX軸上にある2点に次の式を適用します:
キャリブレーション係数を使用できる場合、SetSensorを使って調整してキャリブレーションモードを設定するか、あるいはSetSensorSize、SetFieldSize、SetResolution、SetCenter、SetAngleを使って個別に設定します。

少なくとも4つのランドマークを特定し、センサー座標系(画像処理により)およびワールド座標系(現在の測定)での座標を取得します。ランドマークの数が増えるとキャリブレーション精度が高まります。
結果ピクセルのアスペクト比(X解像度/Y解像度)は、[-4/3、-3/4] (または[3/4、4/3])の範囲内でなければなりません。

キャリブレーションターゲットを自動的に分析し、適切なランドマークのセットを取得することができます。希望するランドマークの点座標を抽出する適切な手順を実行できるのであれば、この方法で簡単に自動キャリブレーションを行えます。
Open eVisionでは、(任意の形状の)対称的なドットの長方形グリッドを持つ、その他にオブジェクトがない特別なターゲットを使用します。

- キャリブレーションターゲットが視野全体を覆うようにキャリブレーションターゲットの画像を取り込みます(またはドットのみが含まれるROIに表示画像を制限します)。
- EasyObjectの場合と同様にして、ブロブ解析を実行してドットの中心座標を抽出します。
- 検出されたすべての点をAddPointに渡します(センサー座標のみ)。
- RebuildGridを呼び出し、各ドットのワールド座標を計算するための対話式アルゴリズムを用いて視野のキャリブレーション用のグリッドを再構築します。
- グリッド点の重心 (g) に最も近いグリッド点(g1およびg2)が選択され、長さAの最初の参照セグメントが形成されます。
- 参照セグメントの先端 (g2) から垂直方向に3つの許容範囲が決められます(図の白の正方形)。これらの許容範囲の中心は、 (g2) から距離A(参照セグメントの長さ)だけ離れた場所に位置決めされます。それぞれは正方形で、辺の長さはAです。
3つの許容範囲内で近傍点1点が探索されます。
各許容範囲に近傍点が1点含まれる場合、グリッドは正しくキャリブレーションされています。 - 3つの垂直のセグメントは、次回の対話式サーチの際に参照用に使用されます。アルゴリズムが2番目のステップに戻ります。
- Calibrateを呼び出してランドマークにアプローチします。
グリッドに過度のディストーションがある場合、期待したようには再構築が行われないことがあります。次のエラーが発生することがあります:
- 許容範囲に近傍点が含まれていない(図の赤色の正方形)。
- 許容範囲に複数の近傍点が含まれている。
- 許容範囲内の点が適切でない。例えば、点が斜めに繋がっている(図の赤色の点)。

視野キャリブレーションのモデルは次のパラメータを使って調整できます:

sensor width(センサーの幅)とsensor height(センサーの高さ)で論理的な画像サイズをピクセル単位(常に整数)で設定します。

field-of-view (f-o-v) width(視野の幅)とheight(高さ)で実際の画像サイズを長さの単位で設定します。すなわち、長方形の大きさがワールド空間での画像エッジに相当します。これらの値は次の計算式によってピクセル解像度に関連付けられます:
視野幅 = ピクセル幅 * センサー幅
視野高さ = ピクセル高さ * センサー高さ
または
センサー幅 = 視野幅 * 水平解像度
センサー高さ = 視野高さ * 垂直解像度
ピクセルは正方形であるという前提で、デフォルトではピクセル高さは指定しません(ピクセル幅 = ピクセル高さ)。

center abscissa(中心の横座標) (x) とordinate(縦座標) (y) は、画像の原点を示します(ワールド座標 (0,0))。デフォルトは画像の中心です。

skew angle(スキュー角)は、リアルワールドの参照フレーム(X軸)と画像エッジ(水平)によって形成される角度です。デフォルトはスキューなしです。
ピクセルが正方形でない場合は、EWorldShapeオブジェクトによってワールド空間とセンサー空間間の変換を行えます。

perspective strength(パースペクティブ強度)ではパースペクティブ効果の相対的な程度を設定します。焦点距離が短いほど、この値は大きくなります。

Distortion strengthおよびGetDistortionStrength2により、画像の角のラジアルディストーションの相対的な程度が設定されます。これは、ディストーションがある場合とない場合の画像の対角線の長さの比率です。
オプションの組み合わせとして表されるキャリブレーションモードはCalibrationModesからアクセスできます。
キャリブレーション係数の効果

EWorldShapeオブジェクトは視野キャリブレーションのコンテキストを管理します。このオブジェクトはワールド座標(物理的な単位)とセンサー座標(ピクセル)の関係を示し、画像形成プロセス固有のディストーションを明らかにします。
画像キャリブレーションは定量的測定アプリケーションの重要なプロセスです。それにより、検査対象のアイテム上で、画像上の点の位置(ピクセルインデックス)とその点のリアルワールドでの実際の位置との関係を構築します。
キャリブレーションを設定するには、キャリブレーションモデルのキャリブレーションパラメータを明確に指定するか、あるいは分かっている点(ランドマーク)のセットまたはキャリブレーションターゲットを使用します。
キャリブレーションの目的は2とおりあります:
- 検査対象アイテムのあらゆる絶対測定について一度だけ設定することで、どの観察条件(視野での部品の場所、レンズ倍率、センサー解像度など)でも対応できるようにするため
単一モデルと複数の観察条件
- イメージングプロセスに関係するいくつかのディストーション(パースペクティブ効果、光学収差など)を補正するため
画像ディストーションの除去
画像のピクセルインデックスは通常は整数ですが、サブピクセルメソッドを使用する際には小数の値となることもあります。これは多くの場合、画像を処理したり既知の特徴点の位置を特定する際に取得されます。このような値はセンサー座標と呼ばれます。
センサー空間内の特徴点
検査対象アイテム上の点の位置を示すワールド座標は、適切な長さの測定単位で表されます。
ワールド座標は実際の寸法で、多くの場合、設計図や機械的な測定値から集められます。
これには定義するための参照フレームが必要です。
ワールド空間の参照フレーム

画像の逆ワープにはUnwarp、SetupUnwarpおよびUnwarpAfterSetupを使用します。
逆ワープの前にルックアップテーブルを使用すると処理時間が短縮されます。