# Usar la herramienta PMAlign para fijar elementos en imágenes para la herramienta de análisis roja de ViDi

Este tema describe cómo convertir las transformaciones producidas por una herramienta PMAlign en transformaciones entendidas por herramientas de ViDi. También describe cómo usar una transformación para modificar la región de interés de una herramienta de ViDi con el fin de crear una vista con elemento fijado que se adapte a las diferencias de traslación y rotación entre las imágenes de entrada.

## Conversión de transformaciones

La ROI de una herramienta VisionPro puede definirse en coordenadas absolutas o en coordenadas relativas a un patrón encontrado por la herramienta PMAlign. Esto se hace definiendo un CogTransform2DLinear que asigna puntos relativos al patrón a píxeles de puntos en la imagen de entrada. Por defecto, las poses de la herramienta PMAlign asignan puntos desde el espacio de patrón a puntos en el espacio seleccionado de la imagen de entrada; si el espacio seleccionado no es espacio de píxeles (por ejemplo, la imagen está submuestreada o calibrada), hace falta una transformación adicional desde el espacio seleccionado al espacio de píxeles.

Consejo:

###### Ejemplo de API

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

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

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

En este caso, <Pose> es la transformación devuelta por la herramienta PMAlign.

De manera similar, la ROI (o vista) para una herramienta de ViDi puede definirse en coordenadas absolutas o en coordenadas relativas a la salida de una herramienta previa, como por ejemplo, el modelo de una herramienta azul. Esto se hace definiendo una System.Windows.Media.Matrix que asigna puntos relativos a la salida anterior a píxeles de puntos en la imagen de entrada.

Naturalmente, es posible crear una vista relativa a un patrón PatMax que coincida convirtiendo la salida de la herramienta PMAlign de una CogTransform2DLinear a una matriz de Píxeles y asignando la vista a través de esta matriz.

Nota:

- Puede usarse el método de extensión ToMatrixTransform para convertir una CogTransform2DLinear en una System.Windows.Media.Matrix equivalente.
- Puede emplearse el método de extensión ToLinear2DTransform para realizar la conversión inversa.

## Creación de una vista con elemento fijado

Antes de entrenar una herramienta de ViDi, hay que definir las vistas en las que funcionará la herramienta. Desde la interfaz gráfica de usuario de ViDi, esto se hace editando la ROI rectangular, aplicando la ROI a las imágenes de entrenamiento y, luego, procesando todas las imágenes de entrenamiento (que aplica la transformación a cada una). Desde la API, debe configurarse la RegionOfInterest de la herramienta como una IManualRegionOfInterest, y deben especificarse manualmente el tamaño y la transformación que usa la vista. A continuación, la herramienta debe procesar la imagen.

Nota:

- La interfaz IManualRegionOfInterest expone un método AddView, que acepta el tamaño de la vista, así como la transformación de la matriz.
  - No olvide transformar la pose de la herramienta PMAlign en espacio de píxeles.
  - Si se pasa un tamaño de (0.0,0.0), la nueva vista se ajustará de forma predeterminada al tamaño de IManualRegionOfInterest.
  - Si no está usando la interfaz gráfica de usuario y quiere mover la ROI de su posición predeterminada (origen en el punto central del patrón que coincide), no olvide combinar la matriz de pose final con una matriz que describa cómo debe moverse la ROI desde su posición predeterminada (véase el ejemplo ilustrado a continuación). La interfaz gráfica de usuario se encarga de ello cuando se arrastra o gira la ROI.
- También existe una sobrecarga de AddView que aceptará una CogTransform2DLinear en lugar de una matriz.

## Resumen

Puede fijarse una herramienta de ViDi con la herramienta PMAlign haciendo lo siguiente:

1. Obtenga la pose desde CogPMAlignResult.
   1. Convierta la pose de CogTransform2DLinear a System.Windows.Media.Matrix usando el método de extensión proporcionado.
2. Obtenga la región de interés de la herramienta de ViDi y envíela a IManualRegionOfInterest.
3. Invoque el método AddView en IManualRegionOfInterest para crear la vista con elemento fijado, pasando un tamaño y la matriz de pose.
4. Procese la imagen.

Para el entrenamiento, debe repetirse este procedimiento para cada imagen de entrenamiento antes de entrenar la herramienta. Así se garantiza que la herramienta se entrene en una vista con elemento fijado para cada imagen de entrenamiento, en lugar de en toda la imagen de entrenamiento. Por supuesto, esto implica primero ejecutar cada imagen de entrenamiento a través de la herramienta PMAlign para generar una transformación para la vista, ya que el elemento fijado puede moverse en cada imagen.

En tiempo de ejecución, este procedimiento debe realizarse para cada imagen entrante, de modo que la herramienta procese la vista con elemento fijado para dicha imagen, en lugar de la propia imagen. Una vez más, esto requiere que la imagen pase primero por la herramienta PMAlign.

Nota:

- El procesamiento de una imagen de entrenamiento se hace invocando el método ITool.IToolDatabase.Process, pasando un filtro de nombre de archivo correspondiente a la imagen de entrenamiento que se va a procesar.
  - El nombre pasado a AddView debería ser el nombre de la imagen.
- El procesamiento de una imagen de entrada en tiempo de ejecución se hace creando una ISample desde la imagen e invocando una ISample.Process, pasando por la ITool que debe procesar la imagen.
  - El nombre pasado a AddView debería ser el nombre de la muestra (p. ej., ISample.Name).