# PMAlign ツールを使用して ViDi 解析 (赤) ツール用に画像をフィクスチャする

このトピックでは、PMAlign ツールによって生成された変換を ViDi ツールに理解できる変換にする方法について説明します。また、入力画像間の平行移動と回転の差異を吸収するフィクスチャされたビューを作成するために、変換を使用して ViDi ツールの対象領域を変更する方法についても説明します。

## 変換

VisionPro ツールの ROI は、絶対座標、または PMAlign ツールによって検出されたパターンを基準にした座標で定義できます。これを行うには、パターンを基準にしたポイントを、入力画像内のポイントのピクセルにマッピングする CogTransform2DLinear を定義します。デフォルトでは、PMAlign ツールのポーズは、パターン空間からのポイントを、入力画像の選択された空間内のポイントにマッピングします。選択された空間がピクセル空間ではない (たとえば、画像がサブサンプリングまたはキャリブレーションされている) 場合、選択された空間からピクセル空間への追加の変換が必要です。

ヒント :

###### API の例

    // ViDi にはピクセルで定義された線形変換が必要なため、パターン空間からピクセル空間に変換する

    ICogTransform2D fromSelectedToPixelTransform = cogImage.GetTransform("#", ".");

    CogTransform2DLinear fromPatternToPixelLinearTransform = fromSelectedToPixelTransform.ComposeBase(<Pose>).LinearTransform(0, 0);

この例では、 <Pose> は PMAlign ツールによって返される変換です。

同様に、ViDi ツールの ROI (ビュー) は、絶対座標、または青ツールのモデルなど、前のツールの出力を基準にした座標で定義できます。これを行うには、前の出力を基準にしたポイントを、入力画像内のポイントのピクセルにマッピングする System.Windows.Media.Matrix を定義します。

当然、PMAlign ツールの出力を CogTransform2DLinear からピクセルマトリックスに変換して、このマトリックスを通じてビューをマッピングすることによって、一致した PatMax パターンを基準にしたビューを作成できます。

注 :

- 拡張メソッド ToMatrixTransform を使用すると、CogTransform2DLinear を同等の System.Windows.Media.Matrix に変換できます。
- 拡張メソッド ToLinear2DTransform を使用すると、逆の変換を実行できます。

## フィクスチャされたビューの作成

ViDi ツールの学習前に、ツールが動作するビューを定義する必要があります。定義するには、ViDi GUI から矩形の ROI を編集して学習画像に適用した後に、すべての学習画像を処理 (それぞれに変換を適用) します。API からツールの RegionOfInterest を IManualRegionOfInterest に設定し、ビューで使用されるサイズと変換を手動で指定する必要があります。その後、ツールで画像を処理する必要があります。

注 :

- IManualRegionOfInterest インタフェースは AddView メソッドを公開することで、ビューのサイズおよびマトリックス変換を受け入れます。
  - PMAlign ツールのポーズは必ずピクセル空間に変換してください。
  - (0.0,0.0) のサイズを渡すと、新しいビューが IManualRegionOfInterest のサイズにデフォルト設定されます。
  - GUI を使用せず、デフォルトの位置 (一致したパターンの中心ポイントにある原点) から ROI を移動する場合は、最終的なポーズマトリックスを、デフォルトの位置から ROI がどのように移動するかを示すマトリックスと必ず結合してください。GUI では、ROI をドラッグまたは回転させると、この処理が行われます。
- マトリックスではなく CogTransform2DLinear を受け入れる AddView のオーバーロードもあります。

## 要約

ViDi ツールは、次のステップに従って PMAlign ツールを使用してフィクスチャできます。

1. CogPMAlignResult からポーズを取得します。
   1. 提供されている拡張メソッドを使用して、ポーズを CogTransform2DLinear から System.Windows.Media.Matrix に変換します。
2. ViDi ツールから RegionOfInterest を取得して、IManualRegionOfInterest にキャストします。
3. IManualRegionOfInterest で AddView メソッドを呼び出し、サイズおよびポーズマトリックスを渡してフィクスチャされたビューを作成します。
4. 画像を処理します。

学習の場合は、ツールの学習前に、すべての学習画像に対してこの手順を繰り返す必要があります。これにより、学習画像全体ではなく、学習画像ごとにフィクスチャされたビューでツールに学習させます。当然、フィクスチャが各画像で移動する場合があるため、まず PMAlign ツールによって各学習画像を実行してビューの変換を生成する必要があります。

ランタイムの場合は、ツールが画像そのものではなく、その画像のフィクスチャされたビューを処理するように、すべての入力画像に対してこの手順を実行する必要があります。なお、これにはまず PMAlign ツールによって画像を実行する必要があります。

注 :

- 学習画像を処理するには、ITool.IToolDatabase.Process メソッドを呼び出し、処理する学習画像に対応するファイル名フィルタを渡します。
  - AddView には、画像の名前を渡す必要があります。
- ランタイムに入力画像を処理するには、画像から ISample を作成して ISample.Process を呼び出し、画像を処理する必要がある ITool に渡します。
  - AddView には、サンプルの名前 (ISample.Name) を渡す必要があります。