# PMAlign 도구를 이용해 ViDi Red 분석 도구를 위한 이미지 고정화하기

이 항목은 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는 절대 좌표로, 또는 Blue 도구의 모델 같은, 이전 도구의 결과물에 상대적으로 정의될 수 있습니다. 이는 이전 결과물에 상대적인 점을 입력 이미지의 점 픽셀로 매핑하는 System.Windows.Media.Matrix를 정의함으로써 수행됩니다.

자연스럽게, CogTransform2DLinear로부터의 PMAlign 도구 결과물을 픽셀 행렬로 전환하고 이 행렬을 통해 보기를 매핑함으로써, 일치된 PatMax 패턴에 상대적인 보기를 생성하는 것도 가능합니다.

참고 :

- 확장 메서드인 ToMatrixTransform을 이용해 CogTransform2DLinear를 동등한 System.Windows.Media.Matrix로 전환할 수 있습니다.
- 확장 메서드 ToLinear2DTransform을 이용해 반대 전환도 가능합니다.

## 고정화된 보기 생성

ViDi 도구를 트레이닝하기 전에, 도구가 작동할 보기를 정의해야 합니다. ViDi GUI에서, 이는 사각형 ROI의 편집, ROI를 트레이닝 이미지에 적용, 트레이닝 이미지 전체를 처리(이는 변환을 각각 적용합니다)함으로써 수행됩니다. API에서는, 이 도구의 RegionOfInterest가 IManualRegionOfInterest로 설정되어야 하고, 보기에서 사용되는 크기 및 변환은 수동으로 지정되어야 합니다. 다음으로, 해당 도구가 이미지를 처리해야 합니다.

참고 :

- IManualRegionOfInterest 인터페이스는 AddView 메서드를 제공하는데, 이는 보기의 크기와 행렬 변환을 수락합니다.
  - PMAlign 도구 포즈를 픽셀 공간으로 변환해야 함을 기억하십시오.
  - (0.0,0.0)의 크기를 넘기면 새로운 보기가 IManualRegionOfInterest의 크기로 기본값이 되어 버립니다.
  - GUI를 이용하지 않으면서 ROI를 기본 위치(일치된 패턴의 중심점에 원점)에서 이동하고자 하면, 마지막 포즈 행렬과 ROI를 기본 위치에서 어떻게 이동해야 하는지 설명하는 행렬을 결합하여야 함을 기억하십시오(아래의 예 참조). 사용자가 ROI를 끌거나 회전하면, GUI가 대신 이를 처리합니다.
- 또한, AddView에는 행렬 대신 CogTransform2DLinear를 수락하는 오버로드가 존재합니다.

## 요약

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)이어야 합니다.