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

여기에서는 PMAlign 도구가 생성한 변환을 Deep Learning도구가 이해할 수 있는 변환으로 전환하는 방법을 설명합니다. 또한, 변환을 이용해 Deep Learning 도구의 관심 영역(ROI)을 수정하여, input 이미지 간의 좌표 이동 및 회전에 따른 차이를 수용하는, 고정화된 보기를 생성하는 방법도 설명합니다.

## 변환의 전환

VisionPro 도구의 ROI는 절대 좌표로 정의할 수도 있으며, PMAlign 도구가 발견한 패턴에 대한 상대 좌표로 정의할 수도 있습니다. 이는 패턴에 상대적인 점을 input 이미지의 점 픽셀로 매핑하는 CogTransform2DLinear를 정의함으로써 수행됩니다. 기본적으로, PMAlign 도구의 pose는 패턴 공간의 점을 input 이미지의 선택된 공간으로 매핑합니다. 선택된 공간이 픽셀 공간이 아닌 경우(예컨대, 이미지가 서브샘플링되거나 보정된 경우), 선택된 공간으로부터 픽셀 공간으로 추가적인 변환이 필요합니다.

Tip:

###### API 예

    // Convert from pattern space into Pixel space because Deep Learning expects a linear transform defined in terms of pixels

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

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

이 예에서 <Pose>는 PMAlign 도구가 반환하는 변환입니다.

유사하게, Deep Learning 도구의 ROI는 절대 좌표로 정의할 수도 있으며, 이전 도구의 결과물(예: Blue 도구의 모델)에 대한 상대 좌표로 정의할 수도 있습니다. 이는 이전 결과물에 상대적인 점을 input 이미지의 점 픽셀로 매핑하는 System.Windows.Media.Matrix를 정의함으로써 수행됩니다.

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

Note:

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

## 고정화된 뷰 생성

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

Note:

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

## 요약

Deep Learning 도구는 다음을 통해 PMAlign 도구와 함께 고정화될 수 있습니다.

1. CogPMAlignResult로부터 pose를 얻습니다.
   1. 제공된 확장 메서드를 이용해 CogTransform2DLinear의 pose를 System.Windows.Media.Matrix로 전환합니다.
2. Deep Learning 도구로부터 RegionOfInterest를 얻고 이를 IManualRegionOfInterest로 캐스팅합니다.
3. IManualRegionOfInterest에 AddView 메서드를 호출하여, 고정화된 뷰를 생성하고 크기 및 pose 행렬을 넘깁니다.
4. 이미지를 프로세싱합니다.

트레이닝의 경우, 도구를 트레이닝하기 전에 모든 트레이닝 이미지에 대해 이 절차를 반복해야 합니다. 이렇게 해야, 전체 트레이닝 이미지가 아니라 각 트레이닝 이미지에 대해 고정화된 뷰로 도구가 트레이닝되는 것이 보장됩니다. 물론, 이렇게 하려면, 먼저 각 트레이닝 이미지에 대해 PMAlign 도구를 실행해 뷰에 대한 변환을 생성해야 합니다. Fixture가 각 이미지 내에서 이동할 수 있기 때문입니다.

런타임에서는, 입력되는 모든 이미지에 대해 이 절차가 수행되어, 도구가 해당 이미지 자체가 아니라, 해당 이미지의 고정화된 뷰를 프로세싱하도록 해야 합니다. 역시, 이 경우에도 먼저 이미지에 PMAlign 도구를 실행해야 합니다.

Note:

- 트레이닝 이미지 프로세싱은, ITool.IToolDatabase.Process 메서드를 호출하고, 트레이닝 이미지에 해당하는 파일 이름 필터를 프로세스에 넘겨줌으로써 수행됩니다.
  - AddView로 넘겨진 이름은 이미지 이름이어야 합니다.
- 런타임에 input 이미지를 프로세싱하는 일은 이미지로부터 ISample을 생성하고, ISample.Process를 호출하고, 이미지를 프로세싱할 Itool을 넘김으로써 수행됩니다.
  - AddView로 넘겨진 이름은 샘플 이름 (예: ISample.Name)이어야 합니다.