image

compareImages

Descripción

La acción `compareImages` se utiliza para evaluar la similitud o diferencia entre dos conjuntos de imágenes. Compara las imágenes de una tabla de origen con las de una tabla de referencia utilizando métricas específicas como el Índice de Similitud Estructural (SSIM) o la Relación Señal-Ruido de Pico (PSNR). Esta acción es fundamental para tareas como la detección de cambios, la verificación de la calidad de la imagen o la búsqueda de imágenes duplicadas.

image.compareImages result=<nombre_resultado> status=<código_retorno> / casOut={<parámetros_casout>} referenceImages={<parámetros_imágenes_referencia>} sourceImages={<parámetros_imágenes_origen>} <copyVars={<lista_variables>}> <maximum=valor_doble> <method="PSNR" | "SSIM"> <minimum=valor_doble> <pairAll=booleano> <pairOnPath=booleano> <pairReferenceOn="nombre_columna"> <pairSourceOn="nombre_columna"> <separateChannels=booleano>;
Parámetros
ParámetroDescripción
casOutEspecifica la tabla de salida para almacenar los resultados de la comparación. Es un parámetro obligatorio.
referenceImagesEspecifica la tabla que contiene las imágenes de referencia para la comparación. Es un parámetro obligatorio.
sourceImagesEspecifica la tabla que contiene las imágenes de origen a comparar. Es un parámetro obligatorio.
copyVarsEspecifica una lista de variables para copiar de la tabla de entrada a la tabla de salida.
maximumEspecifica el valor máximo de comparación a reportar. Las comparaciones con un valor superior no se incluirán en la salida.
methodEspecifica el método de comparación de imágenes. 'PSNR' para Peak Signal-to-Noise Ratio o 'SSIM' para Structural Similarity Index. El valor predeterminado es 'SSIM'.
minimumEspecifica el valor mínimo de comparación a reportar. Las comparaciones con un valor inferior no se incluirán en la salida.
pairAllSi se establece en True, compara cada imagen de la tabla de origen con cada imagen de la tabla de referencia. Predeterminado es False.
pairOnPathSi se establece en True, indica que las variables de emparejamiento son rutas de archivo. Predeterminado es True.
pairReferenceOnEspecifica el nombre de la columna en la tabla de imágenes de referencia que se utilizará para el emparejamiento.
pairSourceOnEspecifica el nombre de la columna en la tabla de imágenes de origen que se utilizará para el emparejamiento.
separateChannelsSi se establece en True, la comparación se realiza por separado para cada canal de color de la imagen. Predeterminado es True.
Creación de Datos de Ejemplo

Para ilustrar el uso de la acción `compareImages`, primero cargamos dos tablas en CAS: una con imágenes de origen y otra con imágenes de referencia. Estas tablas contienen una columna `_path_` que especifica la ubicación de los archivos de imagen. Asumimos que las imágenes ya existen en una ruta accesible desde el servidor CAS.

¡Copiado!
1PROC CAS;
2 /* Crear tabla de imágenes de origen */
3 DATA casuser.source_images;
4 LENGTH _path_ $200;
5 INFILE DATALINES dsd;
6 INPUT _path_ $;
7 DATALINES;
8 /img/original/image1.png
9 /img/original/image2.jpg
10 ;
11 RUN;
12 
13 /* Crear tabla de imágenes de referencia */
14 DATA casuser.reference_images;
15 LENGTH _path_ $200;
16 INFILE DATALINES dsd;
17 INPUT _path_ $;
18 DATALINES;
19 /img/reference/image1.png
20 /img/reference/image2.jpg
21 ;
22 RUN;
23 
24 /* Cargar las imágenes en las tablas CAS */
25 image.loadImages /
26 path="/img/original/"
27 casout={name="source_images_loaded", caslib="casuser", replace=true};
28 RUN;
29 
30 image.loadImages /
31 path="/img/reference/"
32 casout={name="reference_images_loaded", caslib="casuser", replace=true};
33 RUN;
34QUIT;

Ejemplos

Este ejemplo compara imágenes entre dos tablas basándose en la coincidencia de la columna `_path_`. Utiliza el método por defecto, Índice de Similitud Estructural (SSIM), para medir qué tan parecidas son las imágenes.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1 
2PROC CAS;
3image.compareImages / TABLE={name='source_images_loaded', caslib='casuser'}, referenceImages={TABLE={name='reference_images_loaded', caslib='casuser'}}, casOut={name='comparisons_ssim', caslib='casuser', replace=true};
4 
5RUN;
6 
7QUIT;
8 
Resultado :
Se crea una tabla llamada `comparisons_ssim` en la librería `casuser`. Esta tabla contiene una fila por cada par de imágenes coincidentes, con una columna `_ssim_` que muestra la puntuación de similitud (un valor cercano a 1 indica alta similitud).

Este ejemplo realiza una comparación de 'todos contra todos' (`pairAll=True`) entre las imágenes de las dos tablas. Utiliza el método PSNR (Peak Signal-to-Noise Ratio) y solo muestra en la salida los pares de imágenes cuya puntuación PSNR esté entre 30 y 100, lo que ayuda a filtrar resultados de baja calidad o ruido.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1 
2PROC CAS;
3image.compareImages / TABLE={name='source_images_loaded', caslib='casuser'}, referenceImages={TABLE={name='reference_images_loaded', caslib='casuser'}}, method='PSNR', pairAll=true, minimum=30, maximum=100, casOut={name='comparisons_psnr_all', caslib='casuser', replace=true};
4 
5RUN;
6 
7QUIT;
8 
Resultado :
Se genera una tabla de salida `comparisons_psnr_all` en `casuser`. Contendrá todas las combinaciones de comparaciones entre las imágenes de origen y de referencia, pero únicamente aquellas cuyo valor PSNR se encuentre en el rango de 30 a 100. La tabla incluirá columnas como `_psnr_` con el valor calculado.

En este caso, las imágenes se emparejan utilizando una columna de identificación personalizada llamada 'image_id' en lugar de la ruta del archivo. Además, la comparación SSIM se realiza en la imagen completa en lugar de por canales separados (`separateChannels=False`), lo que puede ser más rápido pero menos granular.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1 
2PROC CAS;
3image.compareImages / TABLE={name='source_images_loaded', caslib='casuser'}, referenceImages={TABLE={name='reference_images_loaded', caslib='casuser'}}, pairSourceOn='image_id', pairReferenceOn='image_id', separateChannels=false, casOut={name='comparisons_ssim_by_id', caslib='casuser', replace=true};
4 
5RUN;
6 
7QUIT;
8 
Resultado :
La tabla de salida `comparisons_ssim_by_id` se crea en `casuser`. Las filas representan pares de imágenes que tienen el mismo valor en la columna 'image_id' en ambas tablas. La columna `_ssim_` contendrá la puntuación de similitud calculada sobre la imagen en su totalidad.

FAQ

¿Para qué se utiliza la acción `compareImages` en SAS Viya?
¿Qué métodos de comparación de imágenes están disponibles en la acción `compareImages`?
¿Cómo se especifica la tabla de salida para los resultados de la comparación?
¿Qué hace el parámetro `pairAll`?
¿Cómo se pueden emparejar imágenes específicas entre la tabla de origen y la de referencia?
¿Qué significa el parámetro `separateChannels`?
¿Puedo filtrar qué resultados de comparación se guardan en la tabla de salida?