Domanda

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  uno è immagine di sfondo un altro è la foto di una persona con lo stesso sfondo, stesse dimensioni, quello che voglio fare è rimuovere lo sfondo della seconda 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.

È stato utile?

Soluzione

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, vale a dire è 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 del contorno e la curvatura dovrebbe essere minimo.
  4. i confini delle aree dovrebbero avere un alto contrasto nella immagine di origine

Se si 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
  • trova il 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.
  • Trova la sagoma del grande blob ( EDIT: Nota che non c'è bisogno di iniziare al contorno Si può anche iniziare con un poligono più grande, come i passi si restringono automaticamente a. la 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 diverse espressioni per L e G, per esempio, potrei prendere la lunghezza e la curvatura in considerazione, e G potrebbe anche prendere il gradiente in background e sottratto le immagini in considerazione.
  • che probabilmente sarà necessario ri-normalizzare il poligono di contorno, vale a dire 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. ( "Geodetiche Snakes")
  • ripetere gli ultimi due passaggi fino a 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" ( esempio qui ) per ulteriori informazioni.

Altri suggerimenti

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 (la più alta frequenza di informazioni).

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.

Una tecnica che credo sia comune è quello di utilizzare un . 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 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!

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   (Si veda la OpenCV wiki per i dettagli)
  2.   
  3. Calcola movimento inter-frame (differenza)
  4.   
  5. Se c'è un + ve rilevamento del volto per un frame, pixel di cluster movimento   intorno al viso ( kNN algoritmo )
  6.   

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

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

Garantito si otterrà colpi in pochi minuti.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top