5

Diciamo che stai prendendo un video (con la fotocamera in una posizione stabile) e un uccello vola attraverso la vista della telecamera. Dovrebbe essere possibile effettuare la segmentazione dell'immagine e rimuovere automaticamente questo uccello dal video.Quali sono le tecniche standard per rimuovere una segmentazione (come un essere umano o un uccello) da un video?

Quali sono questi stili di algoritmi chiamati e come vengono normalmente eseguiti?

+0

Si sta tentando di rimuovere un'istanza specifica (ad esempio un particolare uccello che è possibile contrassegnare per la rimozione) o tutti gli oggetti non statici (ad esempio tutte le persone in movimento) dalla scena? – Doug

+0

Mi piacerebbe prendere esempi specifici. Quindi, suppongo che uno alla volta sia sufficiente. – amssage

risposta

3

C'è una tecnica chiamata Simple Image Object Extraction (SIOX) - utilizza una tecnica per identificare gli oggetti in primo piano e quelli di sfondo nelle immagini fisse e video. L'editor open source GIMP ne ha un'implementazione e c'è more information about it here.

Dalla panoramica:

SIOX sta per semplice estrazione oggetto interattivo ed è una soluzione per l'estrazione di primo piano da immagini fisse con l'interazione utente molto poco. SIOX è veloce, robusto e può quindi essere utilizzato anche per la segmentazione dei video. Evita molti degli svantaggi dei metodi di segmentazione basati sui grafici, ma si comporta altrettanto bene su diversi benchmark. SIOX è aperto e gratuito (licenza Apache) e gli autori non hanno intenzionalmente brevettato alcuna parte della tecnologia. Di conseguenza, è stato integrato in diversi programmi di manipolazione di immagini open source negli anni passati. SIOX è l'algoritmo sottostante dello strumento di estrazione in primo piano nel GNU Image Manipulation Program (GIMP) e fa parte dello strumento di tracciamento in Inkscape. SIOX ha origine da E-Chalk dove è collocato un istruttore in piedi di fronte a una lavagna elettronica. Le varianti di SIOX vengono utilizzate per la visione robotica e per il miglioramento della segmentazione 3D della telecamera a tempo di volo.

Ecco un link al Java Reference Implementation of SIOX.

Ecco un collegamento allo PDF with details su come funziona una variante dell'algoritmo.

Dovresti essere in grado di adattarlo all'uso dell'interpolazione tra fotogrammi per rimuovere uno specifico oggetto in primo piano da ciascun fotogramma di un video utilizzando i dati temporali dai fotogrammi circostanti.

2

Se la telecamera è fissa e non c'è molto movimento nella scena, suggerirei un metodo basato sulla sottrazione dello sfondo.

Passaggio 1: Calcolo dello sfondo per ciascun fotogramma del video. Ci sono algoritmi complicati per fare ciò, ma uno molto semplice ed efficace sarebbe calcolare il valore mediano di ogni pixel dell'immagine attraverso una finestra temporale di 3 secondi. Più a lungo se l'oggetto in questione si muove lentamente. Per inciso, se si esegue solo questo tipo di filtraggio rimuoverà la maggior parte degli oggetti in movimento dal video se la telecamera è fissa, quindi la mia precedente domanda su tutti gli oggetti rispetto a un oggetto.

Passaggio 2: contrassegna le regioni da rimuovere in ogni fotogramma con uno strumento pennello e sostituiscile con i pixel dello sfondo. Non preoccuparti di un pennello fine o di uno strumento lazo, poiché qualsiasi pixel non oggetto che contrassegni verrà semplicemente sostituito con la loro versione filtrata. Probabilmente potresti utilizzare gli stessi segni del pennello per diversi fotogrammi poiché il limite non è così importante. Se l'oggetto è l'unica cosa che si muove nella scena, puoi semplicemente segnare l'intero fotogramma e farlo sostituire con lo sfondo.

In ogni caso, per rispondere alla domanda più generale, l'argomento che si desidera ricercare si chiama inpainting per immagini e video.C'è un bel po 'di letteratura là fuori sull'argomento, quello che ho descritto era solo un metodo semplicissimo che potresti implementare in un'ora o giù di lì con opencv.