Ottieni la differenza tra due immagini come immagine trasparente in GIMP


21

Ho due immagini Ae Bche sono simili in molte regioni.

Voglio creare un'immagine in Cmodo che

B = C on top of A

dove Cdovrebbe essere il più trasparente possibile. on top ofè la normale sovrapposizione di livelli.

Quindi Cc'è una sorta di differenza tra Ae B. Se Ae Bsono identici, allora Cè totalmente trasparente. Se Ae Bsono molto diversi, allora Csarebbero quasi identici a B.


C'è un'ottima risposta a questa domanda su Stack Overflow che utilizza ImageMagick: stackoverflow.com/questions/5132749/…
AB

Risposte:


23

È possibile utilizzare la modalità di livello "differenza" per creare una maschera di livello e applicarla a B in questo modo:

  1. Apri entrambe le immagini come livelli, A in basso, B in alto
  2. Nella finestra di dialogo del livello, contrassegnare la modalità di livello B come "differenza". Ora dovresti vedere l'immagine per lo più nera se le immagini sono uguali, con le aree colorate che contrassegnano le aree che sono diverse. Questi colori, tuttavia, non corrisponderanno ai colori di B come desideri
  3. Modifica-> Copia visibile, per ottenere una copia dell'effetto calcolato su B
  4. Duplica livello B, ripristina la modalità su "Normale" (chiamiamo questo livello C)
  5. Nel menu Livelli, aggiungi una maschera di livello in C (Livello-> Maschera-> Aggiungi maschera di livello).
  6. Con la maschera selezionata, incolla il contenuto copiato nel passaggio 3 (modifica-> incolla).
  7. Ancorare i contenuti incollati sulla maschera del livello (layer-> Anchor layer)

Ecco fatto: rendi invisibili i livelli A e B e dovresti essere molto vicino a quello che vuoi. Ulteriori operazioni sulla maschera di livello (consiglio di usare Colori-> curva) possono regolare l'opacità / trasparenza delle aree sul livello C.

aggiornamento Di recente ho risposto a una domanda simile a questa su StackOverflow, dove l'OP voleva svolgere l'attività in modo programmatico (utilizzando Python + Python-imaging-library) - Ho pubblicato il programma completo su quella domanda e potrebbe essere di aiuto per chiunque interessato a questa risposta.


On the layer's dialog, mark B's layer mode as "difference". Mi dispiace che cosa? Sto guardando la finestra dello strumento Livelli e se faccio clic con il pulsante destro del mouse sul livello B, non vedo nulla che assomigli a a layer mode. Il più vicino che ho trovato è Add Layer Mask, ma non credo sia quello a cui ti riferisci. Utilizzando v2.8.22.
Adrian,

con il layer selezionato, la modalità layer può essere scelta in un menu a discesa nella parte superiore della finestra di dialogo dei layer, non dal menu di scelta rapida.
jsbueno,

Sto avendo un po 'di confusione o problemi con il passaggio 6 - sembra che stia incollando i contenuti in un nuovo livello, anche con "Maschera a C" selezionata, creando un quarto livello chiamato "Selezione mobile (livello incollato)" che è offset dalla posizione originale: è così che dovrebbe apparire?
Codice Jockey il

È una "selezione fluttuante" fino a quando non viene "ancorata" alla sua destinazione (Ctrl-H). Assicurati che la maschera sia attiva quando incolli (Ctrl-V) altrimenti l'ancoraggio potrebbe andare altrove.
xenoide,

5

C'è un metodo semplice per farlo:

Apri le immagini come due livelli, esegui Filtri - Animazione - Ottimizza (differenza), dovresti ottenere la stessa immagine risultante che è ora composta dal livello inferiore e un livello diff su di esso.

Le cose si complicano solo se hai una trasparenza parziale, perché il filtro lo rimuove.
Ecco una soluzione alternativa che ho trovato per questo caso:

  • Rimuovi canale alfa su entrambi i livelli (l'azione si trova nel menu di scelta rapida)

Le immagini riceveranno uno sfondo bianco, ma non preoccuparti, lo annulleremo in seguito.

  • Filtri - Animazione - Ottimizza (differenza)

Ora abbiamo il livello di differenza con sfondo bianco in punti di trasparenza parziale, ma abbiamo bisogno di quei pixel per essere trasparenti, quindi prenderemo la forma del diff e copieremo l'immagine di questa forma dal livello superiore originale. Assicurati che il livello diff appena generato sia selezionato e continua:

  • Livello - Livello a dimensione immagine
  • Modifica - Copia (Ctrl + C)
  • Ritorna all'immagine originale
  • Annulla, Annulla per restituire trasparenza ai nostri livelli
  • Modifica - Incolla come - Nuovo livello
  • Alpha to Selection (nel menu contestuale) sul layer diff incollato
  • Elimina il layer diff incollato
  • Assicurarsi che sia selezionato il livello superiore e Copia (Ctrl + C) da esso
  • Ora hai il diff, basta incollarlo (Ctrl + V) e creare un nuovo livello da esso.

Naturalmente, non accade magia e il livello superiore parzialmente trasparente non altera i colori né riduce la trasparenza del livello inferiore, quindi è solo per i casi di estensione, in cui i pixel alterati del livello superiore coprono il livello inferiore.


Il metodo di PS jsbueno non ha funzionato per me.


1

GIMP ha una modalità pennello denominata "Cancellazione colore". Applicando questo pennello, colorato con il colore X, per definire il pixel P1 si crea un pixel P2 con canale alfa abbassato, il modo in cui la fusione P2 con pixel con colore X in modalità normale risulta pixel P1. Lo stesso effetto, applicato alla regione selezionata o all'intera immagine, può essere ottenuto utilizzando l'azione "Colore ad alfa" .

La modalità pennello può essere applicata anche allo "strumento Clona". In questo caso è possibile prendere il colore dai pixel dell'immagine di sfondo A e applicarlo ai pixel corrispondenti dell'immagine risultante B. L'immagine che è rimasta è l'immagine desiderata C.

In dettaglio la creazione dell'immagine C è la seguente:

  1. Inserisci le immagini A e B come livelli (A sotto B).
  2. Duplica l'immagine B e chiamala C. Mettila tra A e B. Nascondi l'immagine B.
  3. Scegli "Strumento clone". Nel riquadro "Opzioni strumento" impostare le seguenti opzioni: Modalità: "Cancella colore"; Pennello: usa un pennello tondo appuntito ("Durezza 100") Dimensione: ingrandisci il pennello per dipingere facilmente tutta l'immagine in una volta.
  4. Seleziona Un livello e CTRL + sul pixel in alto a sinistra per selezionare un luogo da cui clonare e ricordare la sua posizione (per lo zoom del 100% sarà (1,1), per il 50% sarà (2,2) ecc.).
  5. Ora seleziona il livello C e inizia a dipingere in alto a sinistra e copre tutta l'immagine senza sollevare il pennello. Può sembrare che l'immagine non cambi. Ma se nascondi il livello A, vedresti che il livello C ora contiene l'immagine desiderata.
  6. Verifica risultato: mostra il livello A e il livello C. Attiva / disattiva la visibilità del livello B per essere sicuro che le immagini abbiano lo stesso aspetto. (Puoi anche scegliere la modalità "Differenza" per il livello B, in tal caso dovresti ottenere un'immagine assolutamente nera.)

Nota: questo metodo funziona come descritto se l'immagine di sfondo è opaca. Nelle parti trasparenti dell'immagine di sfondo, la fusione della C nella parte superiore di A appare diversa dall'immagine B.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.