¿Cómo puedo obtener la diferencia entre dos imágenes? Tengo la imagen original Alguien ha escrito en un duplicado exacto de la imagen original. Ahora, necesito comparar el original con el escrito en la imagen 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 formas de obtener la diferencia estadística entre las imágenes, pero eso no es lo que estoy buscando.
image
image-processing
imagemagick
diff
difference
Justin Noel
fuente
fuente
Respuestas:
Mis propios favoritos son estos dos:
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 blancos.
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 de archivo de salida.
Si, por alguna razón, necesita una resolución más alta que la predeterminada (72 ppp), simplemente agregue un
-density
parámetro apropiado :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 y cuando sean de 1 página!)
Izquierda: imagen con texto Centro: imagen original Derecha: diferencias (= texto) en píxeles rojos.
Este es el mismo comando que sugerí anteriormente.
Izquierda: imagen con texto Centro: imagen original Derecha: diferencias en píxeles 'verde marino'.
Este comando agrega un parámetro para hacer que la diferencia de píxeles sea 'verde marino' en lugar del rojo predeterminado.
Izquierda: imagen con texto Centro: imagen original Derecha: diferencias azules (pero con algún fondo de contexto) l
Este comando elimina la
-compose src
parte; el resultado es el comportamiento predeterminadocompare
que mantiene como fondo claro la primera de las 2 imágenes difusas. (Esta vez con el parámetro agregado para que los píxeles de diferencia aparezcan en azul).fuente
'compare'
. Para v7.x de ImageMagick, debe ejecutar en su'magick compare'
lugar.Si bien
compare
hace un buen trabajo para muchas aplicaciones, descubrí que a veces prefiero un enfoque diferente, particularmente al comparar imágenes que son en su mayoría en escala de grises:La idea es la siguiente: convertir ambos
file1.png
yfile2.png
en escala de grises. Luego, identifique el primero 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 eldarken
operador de composición, lo 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 cosas que son blancas en la segunda pero negras en la primera se vuelven verdes.
El resultado le brinda una imagen bien codificada por colores donde puede asociar fácilmente el verde con la primera entrada y el rojo con la segunda. Aquí hay un ejemplo en el que estoy usando esto para comparar la salida de LaTeX con la de KaTeX (antes de corregir algún error para mejorar esto):
Puede combinar los enfoques, usando
compare
para ver dónde cambió algo y luego usando lo anterior para ver con más detalle cómo cambió.fuente
-colorspace gray
lugar de-grayscale Rec709Luminance
arregla eso, pero esto arruina la composición. Agregue-respect-parentheses
como la primera opción paraconvert
ocuparse de eso.pdfdiff
directorio e imprime adicionalmente los números de las páginas que difieren entre los dos PDF.-grayscale
que no es compatible, tuve que usar-colorspace gray
como sugirió