Obtenga la diferencia entre dos imágenes como imagen transparente en GIMP


21

Tengo dos imágenes Ay Bque son similares en muchas regiones.

Quiero crear una imagen Cpara que

B = C on top of A

donde Cdebería ser lo más transparente posible. on top ofes la superposición de capa normal.

Entonces, ¿ Chay algún tipo de diferencia entre Ay B? Si Ay Bson idénticos, entonces Ces totalmente transparente. Si Ay Bson muy diferentes, entonces Cserían casi idénticos a B.


Hay una gran respuesta a esta pregunta en Stack Overflow que usa ImageMagick: stackoverflow.com/questions/5132749/…
AB

Respuestas:


23

Puede usar el modo de capa "diferencia" para crear una máscara de capa y aplicarla a B de esta manera:

  1. Abra ambas imágenes como capas, A en la parte inferior, B en la parte superior
  2. En el cuadro de diálogo de la capa, marque el modo de capa de B como "diferencia". Ahora debería ver que la imagen en su mayoría es negra si las imágenes son iguales, con las áreas coloreadas que marcan las áreas que son diferentes. Sin embargo, estos colores no coincidirán con los colores de B como quieras
  3. Editar-> Copiar visible, para obtener una copia del efecto calculado en B
  4. Duplique la capa B, cambie su modo nuevamente a "Normal" (llamemos a esta capa C)
  5. En el menú Capas, agregue una máscara de capa a C (Capa-> Máscara-> Agregar máscara de capa).
  6. Con la máscara seleccionada, pegue el contenido copiado en el paso 3 (editar-> pegar).
  7. Ancle el contenido pegado en la máscara de la capa (capa-> Capa de anclaje)

Ahí estás: haz que las capas A y B sean invisibles, y debes estar muy cerca de lo que quieres. Otras operaciones en la máscara de capa (recomiendo usar Colores-> curva) pueden ajustar la opacidad / transparencia de las áreas en la capa C.

Actualización Hace poco respondí una pregunta similar a esta en Stackoverflow, donde el OP quería realizar la tarea mediante programación (Uso de Python + Python-imaging-library): publiqué el programa completo sobre esa pregunta y podría ser de ayuda para cualquiera interesado en esta respuesta


On the layer's dialog, mark B's layer mode as "difference". Perdon Estoy mirando la ventana de la herramienta Capas, y si hago clic derecho en la capa B, no veo nada que se parezca a layer mode. Lo más cercano que he encontrado es Add Layer Mask, pero no creo que a eso se refiera. Usando v2.8.22.
Adrian

con la capa seleccionada, el modo de capa se puede elegir en un menú desplegable en la parte superior del cuadro de diálogo de capas, no desde el menú contextual.
jsbueno

Tengo un poco de confusión o problemas con el paso 6: parece estar pegando el contenido en una nueva capa, incluso con "Máscara C" seleccionada, creando una cuarta capa llamada "Selección flotante (capa pegada)" que está desplazada desde la posición original, ¿es así como debería verse?
Code Jockey

Es una "selección flotante" hasta que la "ancla" a su destino (Ctrl-H). Asegúrese de que la máscara esté activa cuando pegue (Ctrl-V); de lo contrario, el anclaje puede ir a otro lado.
xenoid

5

Hay un método simple para hacerlo:

Abra las imágenes como dos capas, ejecute Filtros - Animación - Optimizar (Diferencia), debería obtener la misma imagen resultante que ahora está hecha de la capa inferior y una capa de diferencia en la parte superior.

Las cosas se complican solo si tiene una transparencia parcial, porque el filtro la elimina.
Aquí hay una solución que he encontrado para este caso:

  • Eliminar Alpha Channel en ambas capas (la acción está en el menú contextual)

Las imágenes recibirán un fondo blanco, pero no se preocupe, lo desharemos más tarde.

  • Filtros - Animación - Optimizar (diferencia)

Ahora tenemos la capa de diferencia con fondo blanco en lugares de transparencia parcial, pero necesitamos que esos píxeles sean transparentes, por lo que tomaremos la forma del diferencial y copiaremos la imagen de esta forma desde la capa superior original. Asegúrese de que la capa diff recién generada esté seleccionada y continúe:

  • Capa - Capa a tamaño de imagen
  • Editar - Copiar (Ctrl + C)
  • Regresar a la imagen original
  • Deshacer, Deshacer para devolver la transparencia a nuestras capas
  • Editar - Pegar como - Nueva capa
  • Alfa a selección (en el menú contextual) en la capa de diferencias pegada
  • Eliminar la capa diff pegada
  • Asegúrese de que la capa superior esté seleccionada y copie (Ctrl + C) de ella
  • Ahora que tiene la diferencia, simplemente péguela (Ctrl + V) y cree una nueva capa a partir de ella.

Por supuesto, no ocurre magia, y la capa superior parcialmente transparente no alterará los colores ni reducirá la transparencia de la capa inferior, por lo que es solo para casos de extensión, donde los píxeles alterados de la capa superior cubren la capa inferior.


El método de PS jsbueno no me funcionó.


1

GIMP tiene un modo de pincel llamado "Borrado de color". La aplicación de este pincel, coloreado con el color X, para definir el píxel P1 crea un píxel P2 con un canal alfa reducido, de la misma forma que la combinación de P2 con el píxel con el color X en el modo normal da como resultado el píxel P1. El mismo efecto, aplicado a la región seleccionada o a la imagen completa, se puede lograr usando la acción "Color a Alfa" .

El modo de pincel también se podría aplicar a la "herramienta Clonar". En este caso, es posible tomar color de los píxeles de la imagen de fondo A y aplicarlo a los píxeles correspondientes de la imagen de resultado B. La imagen que queda es la imagen deseada C.

En detalles, la creación de la imagen C es la siguiente:

  1. Ponga las imágenes A y B como capas (A debajo de B).
  2. Duplique la imagen B y llámela C. Colóquela entre A y B. Oculte la imagen B.
  3. Elija "Herramienta de clonación". En el panel "Opciones de herramienta", configure las siguientes opciones: Modo: "Borrar color"; Pincel: use un pincel redondo afilado ("Dureza 100") Tamaño: haga el pincel más grande para pintar fácilmente toda la imagen a la vez.
  4. Seleccione una capa y CTRL + en el píxel superior izquierdo para seleccionar un lugar desde el que clonar y recordar su posición (para un zoom del 100% será (1,1), para un 50% será (2,2), etc.).
  5. Ahora seleccione la capa C y comience a pintar desde la parte superior izquierda y cubra toda la imagen sin levantar el pincel. Puede parecer que la imagen no cambia. Pero si oculta la capa A, vería que la capa C ahora contiene la imagen deseada.
  6. Verifique el resultado: muestre la capa A y la capa C. Cambie la visibilidad de la capa B para asegurarse de que las imágenes tengan el mismo aspecto. (También puede elegir el Modo "Diferencia" para la capa B, en ese caso, debería obtener una imagen absolutamente negra).

Nota: Este método funciona como se describe si la imagen de fondo es opaca. En las partes transparentes de la imagen de fondo, la combinación de C en la parte superior de A se ve diferente de la imagen B.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.