ローカル座標系の使用
イントロダクション
ローカル座標系は、入力画像上の異なる位置に表示される可能性のあるオブジェクトを検査するための便利な手段を提供します。 ジオメトリックプリミティブの座標を画像の絶対座標系で示す代わりに、ローカル座標系を使用すると、検査対象のオブジェクトに固有の座標を使用できます。 プログラムの初期段階でオブジェクトが検出され、それに応じてローカル座標系が設定されます。その後、他のツールをこの座標系内で動作するように構成でき、これによりそれらはオブジェクトの移動、回転、およびスケールに独立になります。
ここでの2つの最も重要な概念は次のとおりです:
- CoordinateSystem2D – Origin(Point2D)、Angle(実数)、およびScale(実数)から成る構造で、相対的な直交座標系を定義し、その点(0, 0)は親座標系(通常は画像)のOrigin点にあります。
- Alignment – ローカル座標系から画像(絶対)の座標にジオメトリックプリミティブを変換するプロセス、またはその変換を定義するデータ。通常、CoordinateSystem2Dデータ型で表されます。
ローカル座標系の作成
ローカル座標系を設定するのには2つの標準的な方法があります:
- Template Matching フィルタでは、検出されたオブジェクトのローカル座標系を提供する outObjectAlignment(s) 出力があるため、直感的です。
- CreateCoordinateSystem フィルタのいずれかを使用することで、任意の場所で手動でローカル座標系を作成し、任意の回転とスケールを設定できます。この種の典型的なシナリオでは、オブジェクトは 1D Edge Detection、Shape Fitting、または Blob Analysis ツールで検出されます。
ローカル座標系の使用
ローカル座標系が作成されたら、それを後続の画像解析ツールで使用できます。 Aurora Vision Studioで利用可能な高度なツールには、inAlignment(または類似の)入力があり、これを作成されたローカル座標系のポートに接続するだけで済みます。この時点で、座標系が計算されるまでにプログラムを実行し、その後、他の入力で定義されるジオメトリックプリミティブが自動的に検査対象のオブジェクトの位置と整列されます。
例1: テンプレートマッチングからの整列
Template Matching フィルタからオブジェクトの整列を使用するには、Alignment ポートを接続する必要があります:
テンプレートマッチングフィルタを実行し、FitCircleToEdges フィルタの inFittingField 入力のエディタに入ると、ローカル座標系が既に選択されている(手動で選択することもできます)ため、作成するプリミティブは相対座標を持ちます:
プログラムの実行中に、このジオメトリックプリミティブはオブジェクトの位置に自動的に整列されます。さらに、入力プリミティブを調整できるようになりますが、これは常に整列して表示されるため、任意の入力画像のコンテキストで行います。以下は例の結果です:
例2: Blob Analysisからの整列
多くのアプリケーションでは、Template Matching よりも簡単かつ高速なメソッドでオブジェクトを検出できます。 1D Edge Detection、Shape Fitting、または Blob Analysisのような方法です。次の例では、2つのブロブからローカル座標系を作成する方法を説明します:
最初のステップでは、ブロブ(以下も参照)を検出し、その中心を検出します:Blob Analysis)。
第2のステップでは、中心をX座標でソートし、2つの点によって定義される「セグメントから」座標系を作成します(CreateCoordinateSystemFromSegment)。 セグメントは原点と方向の両方を定義します。 この座標系が準備できたら、それをScanExactlyNRidgesのinScanPathAlignment入力に接続します。これにより、2つのインセット間の距離が測定されます。 この測定はオブジェクトの位置に関係なく正確に機能します(拡張された構造の入出力に注意してください):
手動整列
いくつかの場合、ローカル座標系を使用する必要のあるフィルタには適切なinAlignment入力がありません。 そのような場合の解決策は、AlignPoint、AlignCircle、AlignRectangleのようなフィルタを使用してプリミティブを手動で変換することです。 これらのフィルタは、ローカル座標系で定義された幾何学的なプリミティブと座標系自体を受け入れ、同じプリミティブを返しますが、絶対座標、つまり画像の座標系に整列しています。
非常に一般的なケースは、Region型のポートで、ピクセル単位であり、任意の形状の作成を許容しますが、直接変換できません。 このような場合は、CreateRectangleRegionフィルタを使用して、inRectangleに関心領域を定義することをお勧めします。 フィルタは、inRectangleAlignment入力も接続されている場合、関連するオブジェクトの位置と適切に整列した領域を返します。 いくつかの既製のツール、例えばCheckPresence_Intensity、は内部でこのアプローチを使用しています。
ローカル座標系の混合を避ける
プログラムの異なる場所に表示される幾何学的なプリミティブは、異なる座標系に属している可能性があるため、これを考慮に入れることが重要です。 このような異なるオブジェクトを組み合わせると(例:SegmentSegmentIntersectionのようなフィルタを使用して)、または単一のデータプレビューに配置すると、結果は無意味または少なくとも混乱を招く可能性があります。 したがって、同じ座標系に属するオブジェクトだけを組み合わせるべきです。 特に、画像の上にプレビューにプリミティブを配置する場合は、整列したプリミティブ(絶対座標で)のみを使用する必要があります。
一般的なルールとして、Aurora Vision Studioの画像分析フィルタは、入力でローカル座標系のプリミティブを受け入れますが、出力は常に整列しています(つまり、絶対座標系にあります)。 特に、内部で入力プリミティブを整列させる多くのフィルタは、絶対座標系に変換された入力プリミティブを含む出力も持っています。 たとえば、ScanSingleEdgeフィルタは、ローカル座標系で定義されたinScanPath入力と、絶対座標系で定義されたoutAlignedScanPath出力を持っています: