descargar - "Diff" una imagen con ImageMagick
imagemagick ubuntu (2)
¿Cómo puedo obtener la diferencia entre dos imágenes? Tengo la imagen original. Alguien ha escrito sobre un duplicado exacto de la imagen original. Ahora, necesito comparar el original con la imagen escrita y extraer solo la escritura en formato de imagen.
Ejemplo: tengo una foto de una casa. Alguien tomó una copia y escribió "¡Hola!" En la copia. Quiero comparar de alguna manera las dos imágenes, quitar la casa y quedarme con una imagen de las palabras "¡Hola!".
¿Es esto posible con ImageMagick? Sé que hay maneras de obtener la diferencia estadística entre las imágenes, pero eso no es lo que estoy buscando.
Mis propios favoritos son estos dos:
compare image1 image2 -compose src diff.png
compare image1 image2 -compose src diff.pdf
La única diferencia entre los 2 comandos anteriores: el primero muestra la diferencia visual entre las dos imágenes como un archivo PNG, el segundo como un PDF.
El archivo diff resultante muestra todos los píxeles que son diferentes en color rojo. Los que no han cambiado aparecen en blanco.
Corto y dulce.
Tenga en cuenta que sus imágenes no necesitan ser del mismo tipo. Incluso puede mezclar JPEG, TIFF, PNG - bajo una condición: las imágenes deben ser del mismo tamaño (dimensión de la imagen en píxeles). El formato de salida está determinado por la extensión del nombre del archivo de salida.
Si, por alguna razón, necesita una resolución superior a la predeterminada (72 ppp), simplemente agregue un parámetro de -density
apropiado:
compare -density 300 image1 image2 -compose src diff.jpeg
Ejemplos ilustrados
Aquí hay algunas ilustraciones de resultados para variaciones del comando anterior. Nota: los dos archivos comparados eran incluso archivos PDF , por lo que también funciona con estos (¡siempre que sean 1 paginadores)!
Izquierda: Imagen con texto Centro: Imagen original Derecha: Diferencias (= texto) en píxeles rojos.
compare /
porsche-with-scratch.pdf porsche-original.pdf /
-compose src /
diff-compose-default.pdf
Este es el mismo comando que sugerí anteriormente.
Izquierda: Imagen con texto Centro: Imagen original Derecha: Diferencias en píxeles ''verdes''.
compare /
porsche-with-scratch.pdf porsche-original.pdf /
-compose src /
-highlight-color seagreen /
diff-compose-default.pdf
Este comando agrega un parámetro para diferenciar los píxeles de ''seagreen'' en lugar del rojo predeterminado.
Izquierda: Imagen con texto Centro: Imagen original Derecha: Diferencias azules (pero con algún fondo de contexto) l
compare /
porsche-with-scratch.pdf porsche-original.pdf /
-highlight-color blue /
diff-compose-default.pdf
Este comando elimina la parte -compose src
- el resultado es el comportamiento predeterminado de compare
que mantiene como fondo iluminado la primera de las 2 imágenes diferidas. (Esta vez con un parámetro agregado para que los píxeles de diferencia aparezcan en azul).
Si bien compare
hace un buen trabajo para muchas aplicaciones, encontré que a veces prefiero un enfoque diferente, particularmente cuando comparo imágenes que son principalmente en escala de grises:
convert ''('' file1.png -flatten -grayscale Rec709Luminance '')'' /
''('' file2.png -flatten -grayscale Rec709Luminance '')'' /
''('' -clone 0-1 -compose darken -composite '')'' /
-channel RGB -combine diff.png
La idea es la siguiente: convertir tanto file1.png
como file2.png
en escala de grises. Luego trat la primera como el canal rojo de la imagen resultante, el segundo como el canal verde. El canal azul se forma a partir de estos dos utilizando el operador darken
componer, que esencialmente significa tomar el mínimo.
Entonces las cosas que son blancas en ambas imágenes permanecen blancas. Las cosas que son negras en ambas imágenes permanecen negras. Las cosas que son blancas en la primera imagen pero negras en la segunda se vuelven rojas, y las que son blancas en la segunda, pero negras en la primera, se vuelven verdes.
El resultado le da una imagen muy bien codificada por colores donde puede asociar fácilmente verde con la primera entrada y rojo con la segunda. Aquí hay un ejemplo en el que estoy usando esto para comparar el resultado de LaTeX con el de KaTeX (antes de arreglar algunos errores para mejorarlo):
Puede combinar los enfoques, usando compare
para ver dónde cambió algo y luego usar lo anterior para ver con más detalle cómo cambió.