?>
La acción `annotateImages` en el conjunto de acciones de `image` es una herramienta fundamental en el procesamiento de imágenes dentro de SAS Viya. Su propósito principal es superponer anotaciones visuales sobre las imágenes de una tabla de entrada. Estas anotaciones se basan en metadatos que ya existen en la misma tabla, como coordenadas de cajas delimitadoras, puntos, líneas o máscaras de segmentación. El resultado es una nueva tabla CAS que contiene las imágenes con las anotaciones dibujadas, lo que es crucial para la validación visual de modelos de detección de objetos, la preparación de datos para entrenamiento o la creación de informes visuales.
| Parámetro | Descripción |
|---|---|
| annotations | Especifica las anotaciones que la acción debe realizar. Es un parámetro obligatorio. |
| casOut | Especifica la tabla de salida para contener las imágenes anotadas. Es un parámetro obligatorio. |
| copyVars | Especifica las variables a copiar de la tabla de entrada a la tabla de salida. |
| decode | Especifica parámetros relacionados con la codificación de la imagen de salida. |
| images | Especifica la lista de parámetros que describen la tabla de imágenes de entrada. Es un parámetro obligatorio. |
| annotationType | Especifica el tipo de anotación a realizar. Puede ser 'LINES', 'POINTS', 'PROTOBUF' (para cajas delimitadoras y polígonos) o 'SEGMENTATION'. |
| b | Especifica un valor constante para el canal azul (B) del color de la anotación. |
| g | Especifica un valor constante para el canal verde (G) del color de la anotación. |
| r | Especifica un valor constante para el canal rojo (R) del color de la anotación. |
| thickness | Especifica el grosor de la línea en píxeles para anotaciones de tipo 'LINES'. |
| radius | Especifica el radio del punto en píxeles para anotaciones de tipo 'POINTS'. |
| representation | Define cómo se representan los datos de la anotación en la tabla de entrada. |
| columnName | Especifica el nombre de la columna que contiene los datos de la anotación (puntos, líneas, protobuf). |
| colorMap | Para 'SEGMENTATION', especifica el mapa de colores a utilizar (por ejemplo, 'JET', 'HOT', 'COOL'). |
| inputBackground | Para 'SEGMENTATION', especifica el valor del fondo en las imágenes de entrada. |
| transparency | Para 'SEGMENTATION', especifica la transparencia de la superposición en porcentaje (0-100). |
Antes de anotar imágenes, necesitamos cargarlas en una tabla CAS. El siguiente código utiliza la acción `loadImages` para cargar archivos de imagen desde una ruta del servidor a una tabla CAS llamada `my_images`. Esta tabla servirá como base para los ejemplos de anotación.
1 PROC CAS; 2 loadactionset 'image'; 3 loadImages RESULT=r / 4 path='path/to/your/images/' 5 casout={name='my_images', caslib='CASUSER', replace=true}; 6 RUN;
Este ejemplo anota las imágenes en la tabla `my_images` utilizando las coordenadas de las cajas delimitadoras que se encuentran en la tabla `object_detections`. Se asume que `object_detections` contiene una columna `_image_` (para unir con la tabla de imágenes) y una columna `_protobuf_` con la información de la caja delimitadora.
| 1 | PROC CAS; |
| 2 | image.annotateImages / |
| 3 | TABLE={name='my_images', caslib='CASUSER'} |
| 4 | casout={name='annotated_bounding_boxes', caslib='CASUSER', replace=true} |
| 5 | annotations={{annotation={annotationType='PROTOBUF', representation={representationType='SINGLE_COLUMN', columnName='_protobuf_'}}}}; |
| 6 | RUN; |
Este ejemplo complejo anota las imágenes de la tabla `my_images` con máscaras de segmentación de la tabla `segmentation_masks`. Se utiliza un mapa de colores 'JET' con una transparencia del 50%. Además, se utiliza `copyVars` para transferir la columna `_id_` de la tabla de entrada a la de salida, y `decode` para asegurar que la imagen anotada se guarde en formato JPG.
| 1 | PROC CAS; |
| 2 | image.annotateImages / |
| 3 | TABLE={name='my_images', caslib='CASUSER'} |
| 4 | casout={name='annotated_segmentation', caslib='CASUSER', replace=true} |
| 5 | copyVars={'_id_'} |
| 6 | decode={value=true, encodeType='JPG'} |
| 7 | annotations={{ |
| 8 | annotation={ |
| 9 | annotationType='SEGMENTATION', |
| 10 | image='_segmentation_mask_', |
| 11 | transparency=50, |
| 12 | colorMap='JET' |
| 13 | } |
| 14 | }}; |
| 15 | RUN; |