2009-03-27 15 views
14

Bueno, ya escribí un jpeg joiner básico sin pérdidas en java pero me gustaría comparar los archivos que produce con los archivos originales.Una manera fácil (¿herramienta?) De comparar imágenes de píxel por píxel en diferentes formatos?

Solo puedo comparar tanto en un editor hexadecimal, ¿alguien sabe de una manera fácil, basada en software o java (preferiblemente software ya que no me siento con más codificación por ahora) que puedo comparar dos imágenes y producir ¿un "mapa de diferencia" donde los píxeles no son iguales?

Gracias.

Respuesta

14

Gracias por las sugerencias.

Probé el enfoque Gimp primero que funciona bien, excepto cuando la diferencia entre las imágenes es muy pequeña. No pude encontrar una opción para "mejorar las diferencias" para hacer obvias las diferencias y el histograma también solo da una representación aproximada de las diferencias.

Al final usé ImageMagick algo que había instalado hace un tiempo y olvidé de todo. La creación de una imagen de diferencia/comparación es tan fácil como escribir:

compare first.jpg second.png difference.gif 

en la línea de comandos.

Se explica todo muy bien here.

1

Utilice un editor de imágenes como Photoshop o el Gimp o lo que sea, que tiene varias capas. Crea una imagen donde cada imagen fuente se encuentre en una capa separada.

En este punto, puede comparar visualmente las imágenes al activar y desactivar la visibilidad de la capa superior.

En la mayoría de los editores decentes, también puede establecer la capa superior en modo "diferencia". Ahora el valor de cada píxel de imagen es la diferencia absoluta de los valores de píxel en las imágenes subyacentes. Puedes usar, p. una herramienta de histograma para ver si las imágenes son idénticas. Si son idénticos, todos los valores de píxel serán exactamente 0.

1

Para cosas como esta, me encanta el kit de herramientas netpbm/pbmplus. Puede usar djpeg y pnmtoplainpnm para convertir cada imagen en un formato ASCII simple. Luego, simplemente lee ambos archivos y emite una nueva imagen que muestra dónde se diferencian los píxeles. Podría, por ejemplo, calcular la distancia euclidiana en el espacio RGB entre píxeles viejos y nuevos y emitir un píxel blanco para una diferencia cero, gris claro para una pequeña diferencia, más oscuro para diferencias mayores, y así sucesivamente. El formato ASCII es simple y está bien documentado en las páginas man, y todos los programas visores estándar pueden verlo directamente.

4

Podría hacer mucho peor que Perceptual Diff.

+0

Esto se ve muy bien, pero es probablemente mucho más de lo que tengo que hacer. Solo quiero comparar imágenes píxel por píxel y ver las diferencias exactas. Esto es para verificar qué tan bien está funcionando mi edición jpeg "sin pérdidas". – joinJpegs

+0

Debería haber aclarado un poco más: usted * puede * especificar una bandera que generará una imagen que contenga las diferencias por píxel utilizando PDiff. El único inconveniente es que está en un formato extraño (PPM) :) –

+0

El puerto de Java de la herramienta Perceptual Diff de Hector Yee puede generar una imagen de diferencia .png: [bitbucket.org/joebowbeer/perceptualdiff](https://bitbucket.org/joebowbeer/perceptualdiff) –

5

TortoiseIDiff es un visor de diferencias de imágenes:

http://tortoisesvn.tigris.org/TortoiseIDiff.html

Es parte de TortoiseSVN, pero se puede utilizar sin la subversión.

Dependiendo de su proyecto, no todos los archivos que están bajo el control de la versión son archivos de texto. Lo más probable es que también tenga imágenes, para capturas de pantalla de ejemplo y diagramas para la documentación/archivo de ayuda.

Para esos archivos no es posible usar una herramienta de archivo común diff, porque solo funcionan con archivos de texto y diff línea por línea. Aquí está donde la herramienta Tortoise Image Diff (TortoiseIDiff) llega al rescate . Puede mostrar dos imágenes una al lado de la otra, o incluso mostrar las imágenes una encima de la otra combinadas alfa.

2

El mejor enfoque sería utilizar Pix para Windows (viene con DirectX SDK). Admite Bitmap, PNG y Jpeg ... ¡Disfrútalo!

0

También hay un conveniente web app called Resemble.js, que analiza y compara imágenes píxel por píxel. Los diferentes píxeles en las imágenes (si hay alguno) se resaltan con color rosado o amarillo dependiendo de su preferencia.

Cuestiones relacionadas