image

annotateImages

Descripción

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.

image.annotateImages { annotations={{ annotation={annotationType="LINES" | "POINTS" | "PROTOBUF" | "SEGMENTATION", annotationType-specific-parameters} }, ...}, casOut={<casouttable>}, copyVars={"variable-name-1" <, "variable-name-2", ...>}, decode={ convert=TRUE | FALSE, encodeType="string", value=TRUE | FALSE }, images={ dimension="variable-name", id="variable-name", image="variable-name", imageFormat="variable-name", label="variable-name", path="variable-name", resolution="variable-name", size="variable-name", table={<castable>}, type="variable-name" } };
Parámetros
ParámetroDescripción
annotationsEspecifica las anotaciones que la acción debe realizar. Es un parámetro obligatorio.
casOutEspecifica la tabla de salida para contener las imágenes anotadas. Es un parámetro obligatorio.
copyVarsEspecifica las variables a copiar de la tabla de entrada a la tabla de salida.
decodeEspecifica parámetros relacionados con la codificación de la imagen de salida.
imagesEspecifica la lista de parámetros que describen la tabla de imágenes de entrada. Es un parámetro obligatorio.
annotationTypeEspecifica el tipo de anotación a realizar. Puede ser 'LINES', 'POINTS', 'PROTOBUF' (para cajas delimitadoras y polígonos) o 'SEGMENTATION'.
bEspecifica un valor constante para el canal azul (B) del color de la anotación.
gEspecifica un valor constante para el canal verde (G) del color de la anotación.
rEspecifica un valor constante para el canal rojo (R) del color de la anotación.
thicknessEspecifica el grosor de la línea en píxeles para anotaciones de tipo 'LINES'.
radiusEspecifica el radio del punto en píxeles para anotaciones de tipo 'POINTS'.
representationDefine cómo se representan los datos de la anotación en la tabla de entrada.
columnNameEspecifica el nombre de la columna que contiene los datos de la anotación (puntos, líneas, protobuf).
colorMapPara 'SEGMENTATION', especifica el mapa de colores a utilizar (por ejemplo, 'JET', 'HOT', 'COOL').
inputBackgroundPara 'SEGMENTATION', especifica el valor del fondo en las imágenes de entrada.
transparencyPara 'SEGMENTATION', especifica la transparencia de la superposición en porcentaje (0-100).
Creación de Datos de Ejemplo

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.

¡Copiado!
1PROC CAS;
2 LOADACTIONSET 'image';
3 loadImages RESULT=r /
4 path='path/to/your/images/'
5 casout={name='my_images', caslib='CASUSER', replace=true};
6RUN;

Ejemplos

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.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC 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_'}}}};
6RUN;
Resultado :
Una nueva tabla CAS llamada `annotated_bounding_boxes` es creada. Contiene las imágenes originales con las cajas delimitadoras dibujadas sobre ellas según los datos de la columna `_protobuf_`.

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.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC 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 }};
15RUN;
Resultado :
Se crea una tabla CAS llamada `annotated_segmentation`. Esta tabla contiene las imágenes originales con las máscaras de segmentación superpuestas con un 50% de transparencia y coloreadas según el mapa 'JET'. La columna `_id_` de la tabla original también está presente en esta nueva tabla.

FAQ

¿Cuál es el propósito de la acción `annotateImages`?
¿Cuáles son los parámetros obligatorios para la acción `annotateImages`?
¿Qué tipos de anotaciones se pueden aplicar a las imágenes?
¿Cómo se especifica la tabla de entrada que contiene las imágenes a anotar?
¿Qué hace el parámetro `decode`?

Escenarios asociados

Caso de uso
Validación Visual de Defectos en Piezas Metálicas

Una planta de fabricación utiliza un modelo de IA para detectar defectos (arañazos, abolladuras) en piezas metálicas. Este escenario valida la capacidad de `annotateImages` para...

Caso de uso
Anotación Masiva de Puntos de Interés en Imágenes Satelitales

Una agencia de inteligencia geoespacial necesita procesar miles de imágenes satelitales para marcar puntos de interés (ej. nuevas construcciones, actividad inusual). Este escena...

Caso de uso
Segmentación de Tumores con Datos de Máscara Incompletos o Ausentes

Un hospital utiliza un modelo de IA para generar máscaras de segmentación de tumores en resonancias magnéticas. Ocasionalmente, el modelo falla o no encuentra un tumor, resultan...