Un programa que diferencia 2 imágenes

Estoy buscando un programa que haga una "diferencia" entre dos imágenes JPG.

Requisitos:

  1. El algoritmo diff utilizado por la aplicación es conocido .

    Idealmente, debería ser verificable a través de la inspección del código, pero eso es bueno, no un requisito.

    Esto excluye cosas como Beyond Compare .

  2. Se ha demostrado de alguna manera que el algoritmo diff (o mejor aún, la implementación específica en este software) es confiable en las condiciones de los requisitos a continuación.

    "probado" significa algo así como el consenso de expertos en el campo de procesamiento de imágenes/visión por computadora; Publicaciones revisadas por pares, resultados de pruebas publicados a gran escala, etc.

  3. El algoritmo e, idealmente, la implementación debe ser resistente a los errores de tipo 1 y tipo 2 (por ejemplo, debe tener una tasa baja comprobable y demostrable de mostrar grandes diferencias falsas para imágenes casi idénticas, Y una tasa baja de no mostrar diferencias para imágenes diferentes) .

  4. El programa debería poder manejar imágenes que hayan sido manipuladas levemente en comparación con otras, por ejemplo:

    • Pequeño recorte de bordes (digamos <10%)

    • Cambio en la calidad de la imagen (guardar con una compresión ligeramente diferente)

    • Otros cambios menores (nitidez, contraste).

  5. El resultado deseado debe indicar el grado de similitud, ya sea textualmente (92 % similar) o visualmente (mapa de calor, mapa codificado por colores de diferencias, etc.)


Bien por tener :

  • Código abierto (más específicamente, la capacidad de verificar de forma independiente que el programa realmente usa el algoritmo que dice usar y que se implementó de manera correcta. Por ejemplo, si un recurso independiente confiable lo verificó y lo reconoció públicamente, es tan bueno como abierto fuente).

  • Freeware o de bajo costo preferido. Esto no es un requisito, sino una fuerte preferencia. Un servicio profesional que cueste $100/imagen (o una licencia de $100k) no es una buena opción.

OS/plataforma no importa mucho (Windows, Linux, OS/2, aplicación web, lo que sea).

NOTA: NO estoy buscando algo que me diga si una imagen fue editada con Photoshop, según una pregunta similar anterior. Estoy buscando el equivalente JPG del diffcomando Unix.

Respuestas (3)

Esta respuesta no será tan buena como normalmente me gusta (debido a la falta de conocimiento de mi parte), pero creo que debería funcionar bien para usted.

Lo que sugeriría es la función Comparar de ImageMagick . Es solo una línea de comando, pero genera un 2 (error), 0 (similar) o 1 (diferente), así como un mapa de diferencia de imagen; hay algunos tipos diferentes que puede generar; consulte los documentos para todas las MUCHAS opciones. En cuanto a sus requisitos:

  • 1: No sé qué algoritmo están usando, pero es de código abierto (Apache 2.0)
  • 2: Igual que el #1
  • 3: más o menos lo mismo que el n. ° 1, pero también hay opciones para controlar los umbrales para que pueda ajustar eso un poco.
  • 4: Puede detectar cuando una imagen está incluida en otra imagen, también puede detectar las diferencias de nitidez solamente, etc.
  • 5: salida de similitud visual y binaria.

Esta no es realmente una respuesta, pero en caso de que no surja nada mejor, podría dar una respuesta en el futuro :-)

Existe nuestra propia aplicación en línea, VIRaL , que permite cambios mucho más importantes como

  • cambio importante de punto de vista (coincidencia de línea de base amplia), que da como resultado, por ejemplo, un cambio de escala importante o una orientación arbitraria;
  • oclusión importante o coincidencia parcial en la medida en que las dos imágenes pueden tener solo una pequeña parte (<20%) en común;
  • cambio importante en las condiciones de iluminación.

Ejemplo , ejemplo .

Esta misma aplicación puede buscar fotos similares en una base de datos de millones e identificar dónde se tomó una foto determinada y qué representa. Ejemplo , ejemplo . Incluso puede organizar automáticamente un montón de fotos por similitud o visualizar una ruta en el mapa .

Utiliza métodos de visión artificial conocidos, algunos de ellos propios, y ha sido evaluado en publicaciones científicas. Más aquí .

La aplicación solo está disponible en línea. Puede obtener una imagen de consulta a través de una carga de usuario, pero solo se compara con su propia base de datos. Sin embargo, si hay interés, en general es posible empaquetar al menos una parte de este software de acuerdo con sus requisitos. El tiempo de ejecución típico para una comparación sería del orden de un segundo.

Esto podría hacerse como código abierto, pero algunos componentes seguirían utilizando el software existente y algunos de ellos podrían ser propietarios (aunque los métodos correspondientes están documentados en publicaciones).

Por cierto, te puede interesar la propuesta de visión artificial SE .

Me gusta usar BeyondCompare para todo tipo de comparación, incluso para una comparación de imágenes, porque BeyondCompare puede mostrar una diferencia en el mapa de calor.
Además, puede utilizar los filtros aritméticos de PSP Paint Shop Pro. Allí, puede marcar la diferencia de dos imágenes y obtener una nueva imagen que revelará las diferencias.