image compareImages

Detección Masiva de Duplicados en Banco de Imágenes

Scénario de test & Cas d'usage

Contexto empresarial

Una agencia de stock de fotografía recibe un lote masivo de 10,000 nuevas imágenes. Antes de publicarlas, deben verificar si alguna de ellas es un duplicado o una versión ligeramente modificada (recortada, ruido añadido) de su catálogo existente para evitar infracciones de copyright. Se requiere una comparación 'todos contra todos' utilizando PSNR para detectar similitudes de señal.
Sobre el conjunto : image

Procesamiento, manipulación y análisis de imágenes.

Descubrir todas las acciones de image
Preparación de datos

Generación de lotes masivos simulados. 'incoming_batch' (nuevas) y 'archive_catalog' (existentes). No hay ID común, se requiere fuerza bruta.

¡Copiado!
1 
2DATA casuser.incoming_batch;
3LENGTH _path_ $100;
4DO i=1 to 50;
5_path_=cats('/uploads/new_', i, '.jpg');
6OUTPUT;
7END;
8 
9RUN;
10 
11DATA casuser.archive_catalog;
12LENGTH _path_ $100;
13DO j=1 to 1000;
14_path_=cats('/archive/img_', j, '.jpg');
15OUTPUT;
16END;
17 
18RUN;
19 

Étapes de réalisation

1
Ejecución de comparación exhaustiva (Producto Cartesiano) con filtro de umbral para optimizar el almacenamiento.
¡Copiado!
1 
2PROC CAS;
3image.compareImages / TABLE={name='incoming_batch', caslib='casuser'}, referenceImages={TABLE={name='archive_catalog', caslib='casuser'}}, pairAll=true, method='PSNR', minimum=30, maximum=100, casOut={name='potential_duplicates', caslib='casuser', replace=true};
4 
5RUN;
6 
7QUIT;
8 

Resultado esperado


La acción genera una tabla masiva 'potential_duplicates' que contiene SOLO los pares de imágenes donde el PSNR es mayor a 30 (indicando alta similitud). El uso de `pairAll=true` ignora cualquier columna de emparejamiento y fuerza la comparación de cada imagen nueva contra todas las del catálogo. El filtrado `minimum=30` previene que la tabla de salida crezca exponencialmente con ruido irrelevante.