?> annotateImages - WeAreCAS
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).
Preparación de datos
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.

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
¡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
¡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`?