Ir al contenido principal

Comparación visual de imágenes que no poseen el mismo hash

A continuación se plantean técnicas para Comparar Imágenes Visualmente (Incluso con Diferentes Resoluciones o formatos)

Introducción

En un mundo donde las imágenes son omnipresentes, a menudo nos encontramos con la necesidad de comparar dos que, a primera vista, parecen idénticas o muy similares. Sin embargo, bajo la superficie, pueden existir diferencias sutiles pero significativas, ya sea por manipulación, compresión, cambios de fotogramas (como en un video) o simplemente por provenir de fuentes con distinta resolución. Verificar visualmente si dos imágenes contienen los mismos elementos, a pesar de posibles variaciones técnicas, es un desafío que requiere herramientas y métodos específicos.

Este artículo explora diversas aproximaciones para llevar a cabo esta comparación, desde técnicas manuales hasta el uso de herramientas especializadas, enfocándonos en cómo identificar esas diferencias ocultas y cómo presentarlas de manera clara.

¿Por Qué Necesitamos Comparar Imágenes Visualmente?

La necesidad de comparar imágenes va más allá de la simple duplicidad de archivos. Puede surgir en contextos como:

Análisis Forense Digital: Verificar la autenticidad de una imagen, detectar manipulaciones o comparar una imagen sospechosa con una original.

Análisis de Video: Rastrear el movimiento de objetos (como un automóvil en diferentes fotogramas) o identificar cambios en una escena a lo largo del tiempo.

Verificación de Contenido: Asegurarse de que una versión de baja resolución de una imagen (miniatura, vista previa) realmente corresponde a la versión de alta resolución, o viceversa, conteniendo los mismos elementos visuales.

Control de Calidad: Comparar una imagen procesada con el original para identificar artefactos o errores.

El desafío se acentúa cuando las imágenes tienen diferentes tamaños o resoluciones. Una comparación directa píxel a píxel no es viable, y simplemente mirarlas lado a lado puede no revelar las sutilezas.

Métodos para la Comparación Visual de Imágenes

Existen varias estrategias para abordar esta tarea, adaptándose a diferentes niveles de precisión y necesidades de presentación:

Cálculo y Análisis de Diferencias a Nivel de Píxel:

Aunque no es directamente una "comparación visual" en el sentido de superposición, es la base de muchas herramientas. Consiste en comparar el valor de color/intensidad de cada píxel correspondiente en ambas imágenes. Si las imágenes son del mismo tamaño, se puede restar el valor de un píxel al otro para obtener una "imagen de diferencia" donde las áreas sin cambios son negras (o grises), y las áreas con diferencias se muestran con colores o intensidades que reflejan la magnitud de la variación.

Uso Típico: Detección de movimiento en video (donde el automóvil cambia de posición), análisis automatizados.

Limitación para el Caso: Requiere que las imágenes tengan el mismo tamaño exacto o un redimensionamiento muy preciso y sin distorsión previa, lo que puede ser difícil o inapropiado para el objetivo de verificar elementos a pesar de la resolución. La "imagen de diferencia" generada es útil para análisis técnico, pero no siempre intuitiva para un observador casual como un juez sin una explicación.

Nivel descriptivo: Comparación Manual Lado a Lado o Presentación en Documento:

Este es un método simple y directo para presentar a un tercero (como un juez) la evidencia visual.

Técnica: Consiste en colocar ambas imágenes, la original y la de prueba, una al lado de la otra en un documento (como un PDF). Se pueden ajustar tamaños relativos si es necesario (aunque la diferencia de resolución seguirá siendo visible).

Presentación: Crear un PDF con la imagen de referencia a la izquierda y la imagen a comparar a la derecha.

Ventaja: Muy fácil de entender para cualquiera. No requiere software especializado más allá de un visor de imágenes y una herramienta de creación de PDF (o simplemente arrastrarlas a un documento).

Limitación: La comparación depende completamente de la capacidad visual del observador. Las diferencias sutiles o los pequeños cambios en la alineación son difíciles de detectar a simple vista, especialmente con imágenes de diferentes tamaños.


Nivel analítico: Superposición de Imágenes Usando Software de Edición/Dibujo:

Una técnica más interactiva que permite una comparación visual directa de los elementos.

Técnica: Se abre una imagen en un software como LibreOffice Draw (o GIMP, Photoshop, etc.) y se carga la segunda imagen como una capa separada encima de la primera. Ajustando la posición y, crucialmente, la opacidad de la capa superior, se puede "ver a través" y comparar la alineación y presencia de los elementos.

Presentación: Se pueden mostrar las dos imágenes originales lado a lado, y luego, como tercera opción, la superposición (quizás con la capa superior semi-transparente) para que el juez pueda ver las áreas que coinciden y las que no. Las diferencias se harán visibles como "solapamientos" o áreas que no se alinean correctamente.

Ventaja: Permite una comparación visual intuitiva de la alineación y la existencia de elementos. Es más efectivo que el lado a lado para detectar desajustes.

Limitación: Requiere un ajuste manual cuidadoso (alinear las imágenes si no están perfectamente registradas). La comparación depende de la habilidad del usuario para manipular las capas y la interpretación visual del observador. No resalta automáticamente las diferencias.


Nivel técnico: Comparación Automatizada Resaltando Diferencias Usando Herramientas como ImageMagick:

Este método combina el análisis de píxeles con una presentación visual clara de los resultados. Herramientas de línea de comandos como compare de ImageMagick son ideales para esto en entornos Linux como Kubuntu.

Técnica: La herramienta compara las dos imágenes píxel a píxel (después de un posible pre-procesamiento como redimensionamiento) y genera una tercera imagen donde las áreas que son diferentes se resaltan de manera prominente (por ejemplo, en rojo o magenta), mientras que las áreas idénticas se muestran en escala de grises o en su color original suavizado.

La Línea de Comando compare de ImageMagick:

compare -resize 224x338 imagen1.jpg imagen2.jpg -fuzz 20% diferencia.png

Analicemos los parámetros:

compare: El comando de ImageMagick para comparar imágenes.

-resize 224x338: Importante para imágenes de diferentes resoluciones. Indica que las imágenes de entrada (imagen1.jpg y imagen2.jpg) deben ser redimensionadas a 224x338 píxeles antes de realizar la comparación. Esto permite comparar imágenes de distinto tamaño. (Nota: la sintaxis precisa para aplicar resize a las entradas antes de la comparación puede variar ligeramente dependiendo de la versión de ImageMagick; a veces se usan paréntesis \( ... \) para procesar las entradas por separado antes de la comparación principal, pero la intención es clara: hacerlas comparables en tamaño).

imagen1.jpg imagen2.jpg: Las dos imágenes de entrada a comparar (original y de baja resolución/prueba).

-fuzz 20%: Un parámetro crucial para comparaciones prácticas. Indica que se ignore cualquier diferencia de píxel que sea menor al 20%. Esto ayuda a pasar por alto pequeñas variaciones debidas a la compresión (JPEG), ruido, o ligeras diferencias en el color que no representan un cambio real en los elementos principales. Puedes ajustar este porcentaje.

diferencia.png: El nombre del archivo de salida que contendrá la imagen con las diferencias resaltadas.

Ventaja: Genera un resultado objetivo y visualmente claro que muestra exactamente dónde están las diferencias. Es eficiente para encontrar cambios sutiles que serían difíciles de ver a simple vista o por superposición manual. El parámetro -fuzz lo hace robusto ante variaciones menores no relevantes. Permite comparar imágenes de diferente resolución gracias a -resize.

Presentación: Se pueden mostrar las dos imágenes originales y, al lado, la imagen diferencia.png que resalta las áreas de cambio.

Alternativa con el fondo más aclarado:

compare -fuzz 20% -lowlight-color "#ffffffF0" imagen1.webp imagen2.webp diferencia.png

donde #ffffff es el color blanco.

y F0 es el porcentaje de opacidad.

Conclusión

Comparar imágenes para verificar la presencia de los mismos elementos, especialmente cuando varían en resolución, requiere ir más allá de una simple observación. Mientras que la comparación manual lado a lado es útil para una primera impresión y la superposición ofrece una comparación más interactiva, herramientas automatizadas como compare de ImageMagick brindan una forma objetiva y precisa de resaltar las diferencias exactas, incluso ignorando variaciones menores con el parámetro -fuzz.

Dependiendo del contexto y la audiencia (como la necesidad de presentar evidencia clara a un juez), se puede elegir el método o una combinación de ellos. La capacidad de generar una imagen que muestre las diferencias de manera inconfundible (como la salida de compare) puede ser una herramienta muy poderosa para demostrar visualmente que dos imágenes, a pesar de sus similitudes o diferencias de formato/resolución, sí contienen (o no) los mismos elementos clave.


APENDICE

Para el caso de que las imágenes se encuentren ligeramente desfasadas es posible aumentar el valor de fuzz para que omita diferencias de uno o dos pixeles. Si ello no es suficiente, será necesario realizar una corrección. Para ello ejecutar lo siguiente:

A) Identificar el desplazamiento que produce el menor error de diferencias.

for x in {-2..2}; do
 for y in {-2..2}; do
   xsign=$( (( x >= 0 )) && echo "+$x" || echo "$x" )
   ysign=$( (( y >= 0 )) && echo "+$y" || echo "$y" )
   convert imagen1.webp -roll ${xsign}${ysign} temp1.webp
   err=$(compare -metric AE -fuzz 20% temp1.webp imagen2.webp null: 2>&1)
   echo "Desplazamiento x=$x y=$y -> Error: $err"
 done
done


Desplazamiento x=-2 y=-2 -> Error: 96178
Desplazamiento x=-2 y=-1 -> Error: 79232
Desplazamiento x=-2 y=0 -> Error: 67000
Desplazamiento x=-2 y=1 -> Error: 80274
Desplazamiento x=-2 y=2 -> Error: 96332
Desplazamiento x=-1 y=-2 -> Error: 84162
Desplazamiento x=-1 y=-1 -> Error: 64930
Desplazamiento x=-1 y=0 -> Error: 49796
Desplazamiento x=-1 y=1 -> Error: 65071
Desplazamiento x=-1 y=2 -> Error: 85128
Desplazamiento x=0 y=-2 -> Error: 71889
Desplazamiento x=0 y=-1 -> Error: 48316
Desplazamiento x=0 y=0 -> Error: 28204
Desplazamiento x=0 y=1 -> Error: 48698
Desplazamiento x=0 y=2 -> Error: 73657
Desplazamiento x=1 y=-2 -> Error: 66190
Desplazamiento x=1 y=-1 -> Error: 37673
Desplazamiento x=1 y=0 -> Error: 9587
Desplazamiento x=1 y=1 -> Error: 38290
Desplazamiento x=1 y=2 -> Error: 67623
Desplazamiento x=2 y=-2 -> Error: 74163
Desplazamiento x=2 y=-1 -> Error: 49611
Desplazamiento x=2 y=0 -> Error: 30104
Desplazamiento x=2 y=1 -> Error: 50834
Desplazamiento x=2 y=2 -> Error: 75257

B) Desplazar imagen1.webp

Se debe desplazar x = 1, y = 0 que son los valores que optimizan ese resultado.

convert imagen1.webp -roll +1+0 temp1.webp

C) Finalmente efectuar la comparación

compare -fuzz 20% -lowlight-color "#ffffffF0" temp1.webp imagen2.webp diferencia.png



Comentarios