come rimuovere un'immagine di sfondo e ottenere l'immagine in primo piano

voti
12

ci sono due immagini

alt text http://bbs.shoucangshidai.com/attachments/month_1001/1001211535bd7a644e95187acd.jpg alt text http://bbs.shoucangshidai.com/attachments/month_1001/10012115357cfe13c148d3d8da.jpg un'immagine di sfondo è un altro è la foto di una persona con la stesso sfondo, stesse dimensioni, quello che voglio fare è rimuovere sfondo la seconda dell'immagine e distillare solo profilo della persona. il metodo comune è sottrarre prima immagine dal secondo, ma il mio problema è che se il colore di usura della persona è simile allo sfondo. il risultato della sottrazione è terribile. non riesco a ottenere il profilo integrali della gente. che hanno una buona idea per rimuovere lo sfondo darmi qualche consiglio. Grazie in anticipo.

È pubblicato 20/01/2010 alle 09:52
fonte dall'utente
In altre lingue...                            


6 risposte

voti
-3

Posta la foto su Craigslist e dire loro che sei disposto a pagare $ 5 per qualcuno per farlo.

Garantito si otterrà colpi in pochi minuti.

Risposto il 21/01/2010 a 02:22
fonte dall'utente

voti
-3

Invece di una sottrazione rettilineo, si potrebbe passare da entrambe le immagini, pixel per pixel, e solo "sottrarre" i pixel che sono esattamente gli stessi. Che ovviamente non rappresenteranno il variazioni minori in colori, però.

Risposto il 21/01/2010 a 02:28
fonte dall'utente

voti
1

Una tecnica che penso sia comune è quello di utilizzare un modello di miscela . Afferra un numero di fotogrammi di fondo e per ogni pixel costruire un modello misto per il suo colore.

Quando si applica una cornice con la persona che in esso si otterrà qualche probabilità che il colore è di primo piano o di sfondo, date le densità di probabilità del modello miscela per ogni pixel.

Dopo aver P (pixel è in primo piano) e P (pixel è sfondo) si può solo soglia le immagini di probabilità.

Un'altra possibilità è quella di utilizzare le probabilità come ingressi in qualche algoritmo di segmentazione più intelligente. Un esempio è tagli grafico che ho notato funziona abbastanza bene.

Tuttavia, se la persona indossa vestiti che sono visivamente indistguishable dallo sfondo, ovviamente, nessuno dei metodi descritti in precedenza avrebbe funzionato. Faresti sia necessario ottenere un altro sensore (come IR o UV) o di avere un abbastanza elaborato "persona modello", che potrebbe "add" le gambe nella giusta posizione, se non trova ciò che pensa è un torso e la testa.

Buona fortuna con il progetto!

Risposto il 21/01/2010 a 09:10
fonte dall'utente

voti
16

Se si dispone di una buona stima dello sfondo dell'immagine, sottraendolo l'immagine con la persona è un buon primo passo. Ma è solo il primo passo. Dopo di che, è necessario segmentare l'immagine, cioè è necessario eseguire partizione l'immagine in "background" e "primo piano" pixel, con i vincoli come questi:

  1. nelle aree in primo piano, la differenza media da l'immagine di sfondo dovrebbe essere alto
  2. nelle zone di fondo, la differenza media da l'immagine di sfondo deve essere bassa
  3. le aree devono essere lisce. lunghezza contorno e curvatura dovrebbe essere minimo.
  4. i confini delle aree dovrebbero avere un alto contrasto nell'immagine sorgente

Se siete matematicamente inclini, questi vincoli possono essere modellati perfettamente con il Mumford-Shah funzionale. Vedi qui per maggiori informazioni.

Ma probabilmente si può adattare altri algoritmi di segmentazione al problema.

Se si desidera una versione veloce e semplice (ma non perfetto), si potrebbe provare questo:

  • sottrarre le due immagini
  • trovare la più grande "blob" consecutiva di pixel con uno sfondo-primo piano differenza maggiore di una certa soglia. Questa è la prima stima approssimativa per la "zona di persona" in primo piano immagine, ma la segmentazione non soddisfa i criteri 3 e 4 di cui sopra.
  • Trovare la sagoma del grande blob ( EDIT: Si noti che non c'è bisogno di iniziare al contorno Si può anche iniziare con un poligono più grande, come i passi verranno automaticamente ridursi nella posizione ottimale..)
  • ora passare attraverso ogni punto del contorno e lisciare il contorno. Per esempio per ogni punto trovare il punto che minimizza la formula: c1 * L - c2 * G, dove L è la lunghezza del poligono contorno se il punto sono stati spostati qui e G è il gradiente nella posizione del punto si sposterebbe, c1 / c2 sono costanti per controllare il processo. Spostare il punto a quella posizione. Questo ha l'effetto di lisciatura poligono profilo in zone a bassa pendenza nell'immagine sorgente, mantenendolo legato ad elevati gradienti nell'immagine sorgente (cioè i confini visibili della persona). È possibile provare espressioni diverse per L e G, per esempio, L potrebbe assumere la lunghezza e la curvatura in considerazione, e G potrebbe anche prendere il gradiente in background e immagini sottratto in considerazione.
  • probabilmente sarà necessario ri-normalizzare il poligono di contorno, cioè fare in modo che i punti sul contorno sono distanziati regolarmente. O che, o fare in modo che le distanze tra i punti rimangono regolari nella fase precedente. ( "Snakes geodetica")
  • ripetere le ultime due fasi fino convergenza

Si dispone ora di un poligono contorno che tocca la persona-sfondo bordo visibile e continua senza intoppi dove il confine non è visibile o ha basso contrasto. Look up "Snakes" ( ad esempio qui ) per ulteriori informazioni.

Risposto il 21/01/2010 a 09:24
fonte dall'utente

voti
4

Filtro passa-basso (sfocatura) le immagini prima di sottrarre. Quindi utilizzare tale segnale di differenza come maschera per selezionare i pixel di interesse. Un filtro a livello di sufficiente ignorerà i troppo-piccole caratteristiche (ad alta frequenza) che finiscono per ritagliarsi regioni "Awful" all'interno del vostro oggetto di interesse. Sarà anche a ridurre l'evidenziazione del rumore a livello di pixel e di allineamento (le informazioni più alta frequenza).

Inoltre, se si dispone di più di due fotogrammi, l'introduzione di un certo tempo di isteresi vi permetterà di formare regioni più stabili di interesse nel corso del tempo anche.

Risposto il 05/02/2010 a 21:36
fonte dall'utente

voti
0

Sfondo vs rilevazione di primo piano è molto soggettiva. Lo scenario applicazione definisce sfondo o in primo piano. Tuttavia nell'applicazione dettaglio, immagino che si sta implicitamente dicendo che la persona è in primo piano. Usando l'ipotesi di cui sopra, ciò che cercate è un algoritmo di rilevamento persona. Una possibile soluzione è:

  1. Eseguire un rivelatore di funzione Haar + potenziato cascata di classificatori deboli (vedi il wiki OpenCV per i dettagli)
  2. Calcolare movimento inter-frame (differenze)
  3. Se c'è un + ve rilevamento del volto per un frame, i pixel di cluster di movimento intorno al viso ( algoritmo kNN )

voilà ... si dovrebbe avere un semplice rilevatore di persona.

Risposto il 30/10/2010 a 13:04
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more