Come posso confrontare due immagini dalla fotocamera e dire se ci sono abbastanza differenze per rilevare il movimento?


18

Voglio usare il mio telefono come sistema TVCC per controllare una stanza della mia casa e visualizzare un avviso quando qualcosa si muove.

Per ora, quello che sono riuscito a fare è prendere un'immagine ogni minuto e caricarla tramite uno script PHP sul mio server. Ora, vorrei confrontare l'immagine attuale e l'immagine 1 minuto fa e rilevare se qualcuno è entrato nella stanza. Quindi, in sostanza, dovrei confrontare le differenze di pixel sull'immagine (ma tenendo anche conto del fatto che una nuvola potrebbe solo salutare e cambiare luminosità durante un minuto)

Qualcuno ha un indizio su come ottenere questo o alcuni documenti da leggere?


4
Ho fatto qualcosa del genere anni fa. La mia tecnica consisteva nel suddividere l'immagine in sezioni, ad esempio una griglia 20 * 20, trovare un valore per il colore medio in ogni cella (prendendo il colore medio in ciascun pixel in quella cella) e memorizzandolo. Fai lo stesso per l'immagine successiva e se c'è abbastanza differenza (lascerò quella tolleranza fino a te) nei colori medi, puoi assumere il movimento. Non rendere la tolleranza così fine che noterà sottili cambiamenti di luce o ombre che passano ecc.

1
Ecco un post interessante sull'argomento che potresti trovare utili codeproject.com/KB/audio-video/Motion_Detection.aspx

CHDK inoltre suddivide l'immagine in una griglia. chdk.wikia.com/wiki/UBASIC/Scripts:_AdaptiveMD Per rilevare il movimento e non rilevare i cambiamenti di illuminazione, direi che un cambiamento in molte celle della griglia non è movimento, mentre un cambiamento in poche celle della griglia lo è.
endolith

Risposte:


10

Mi sembra che tu stia cercando una tecnica di sottrazione di sfondo. Con immagini rumorose e condizioni di illuminazione variabili potrebbe non essere banale. L'attuale tecnica all'avanguardia per questo è la rappresentazione di matrice di basso rango, ma richiede non due ma molte (~ dozzine) immagini. Seguono alcuni calcoli gravosi: ogni immagine considerata come un vettore di pixel, i vettori combinati in matrice e questa matrice è scomposta in matrice di basso livello e residuo. Le colonne di matrice di basso rango sono sfondi e il resto è oggetti in movimento. Ci sono alcune implementazioni open source, ma solo per la fattorizzazione stessa, non la pipeline di immagini IIRC completa

Ecco un documento e un codice per la fattorizzazione a matrice http://www.ece.rice.edu/~aew2/sparcs.html

Ecco una panoramica dal blog CS e il link ad altro codice:

https://sites.google.com/site/igorcarron2/matrixfactorizations

http://nuit-blanche.blogspot.com/search/label/MF

Rilievo di alcune altre tecniche: http://www.vis.uni-stuttgart.de/uploads/tx_vispublications/Brutzer2011-2.pdf


1
hai intenzionalmente realizzato questo CW?
Lorem Ipsum,

1
Cosa significa "CW"?
mirror2image

Ahh, domanda wiki. Ho pensato che sarebbe stata una buona idea introdurre questa tecnologia completamente nuova facendo cose pratiche. Sentiti libero di rimuoverlo se non sei d'accordo. Anche altri ppl potrebbero avere più esperienza con questa tecnologia - ho solo iniziato ad approfondire.
mirror2image

Un CW è una domanda wiki-comunità. Ciò significa che non otterrai reputazione (in questo caso 4x10 = 40) per i voti sulla tua risposta. Alcune persone fanno intenzionalmente le loro risposte in questo modo, ma il più delle volte è accidentale. L'ho ripristinato per te, in modo da ottenere il tuo rappresentante. Adesso sono le 181 da 126 :)
Lorem Ipsum,

5

Ricorda: ci sono ombre (non solo luminosità).

L'idea di James Webster non mi piace molto, dal momento che sta sostanzialmente ridimensionando la risoluzione in ogni dimensione e confrontando le immagini ridimensionate (inoltre non mi piacciono le soglie: sono arbitrarie, devi testarle e modificarle fino a quando non ottieni un buon valore e il giorno successivo questi valori potrebbero essere obsoleti a causa di condizioni meteorologiche diverse o di altri effetti ambientali)

Ma per essere onesti, anche io non ho una soluzione davvero buona. La mia prima idea era di diffondere ogni immagine in un'immagine di riferimento della stanza vuota ed eseguire un rilevamento dei bordi sull'immagine diff. Ma questo rileverebbe anche le ombre. Ma immagino che non si possa differenziare tra ombre e altri oggetti ... almeno non so come. Ma forse puoi confrontare il risultato dopo il rilevamento Edge tra 2 fotogrammi, poiché le ombre si muovono per lo più lentamente (ancora ci saranno problemi quando le macchine si muovono o quando si muove una nuvola)


Vuoi rilevare qualcosa che cambia improvvisamente. Le ombre non cambieranno molto da un minuto all'altro. Tuttavia, la luminosità generale del sole lo farà.
endolith

2
Le ombre si muoveranno rapidamente, se ad esempio c'è un'auto che passa e lascia cadere la propria ombra attraverso il finestrino o fa cadere ombre di alcuni altri oggetti dal suo faro.
Philipp Wendt,

4

La tecnica di "fattorizzazione a matrice" NON ti aiuterà a fare il tuo lavoro! L'articolo a cui fa riferimento @ mirror2image riguarda la sottrazione di sfondo ma NON si basa sulla "fattorizzazione a matrice".

L'uso di video in esecuzione per rilevare oggetti in movimento (siano essi umani o veicoli) è un'area di ricerca attiva.

Come principio di base, il sistema stima uno sfondo statico tipico campionando su più immagini e prendendo una differenza di energia tra l'immagine in arrivo e lo sfondo. Se l'energia è significativa, il pixel viene classificato come primo piano. Tale set di primo piano ti dice se c'è una voce dell'oggetto nel sistema.

Il miglior riferimento al tuo documento di ricerca (e anche relativamente più semplice se vuoi davvero implementarlo) sarebbe: il sistema W4 lo trova qui e vede il documento Picardi qui come un sondaggio più dettagliato per altre tecniche nel sistema.

Esistono molte sfide che si applicano al problema:

  1. La presenza di rumore crea problemi di maggiore ambiguità. L'approccio qui è applicare un filtro temporale efficiente e considerare la varianza del rumore per renderlo immune alla soglia.

  2. La presenza dell'ombra crea ambiguità di non essere né in primo piano né. Ci sono documenti che modellano la distinzione tra colore e intensità per distinguere l'ombra rispetto al primo piano reale.

  3. Lo sfondo può essere complesso come agitare alberi o mare ecc.

  4. Lo sfondo può avere una variazione lenta o improvvisa dell'illuminazione in cui lo sfondo "appreso" precedente viene quindi adattato a quello nuovo.

Uno dei documenti di riferimento più citati è chiamato L' algoritmo del fiore murale mostra il modo migliore per combinare vari scenari simili per produrre un robusto rilevamento di oggetti in movimento.


2

Non conosco la soluzione esatta, ma dovresti creare una sorta di hash dell'immagine; un set di dati più piccolo estratto dall'immagine, che è comparabile meglio dell'intera immagine.

Penso che l' istogramma del colore sia una buona scelta per questo.

Se si divide l'immagine in aree e si realizzano istogrammi separati per queste aree, è possibile determinare la posizione / il percorso dell'intruso.


Grazie mille, aspetterò altre soluzioni, se non riesco a trovare di meglio, accetterò le tue. Cordiali saluti, non voglio determinare il percorso dell'intruso, poiché 1 minuto non è sufficiente per questo, ma solo inviare un avviso è fantastico. Grazie.

1
Fai attenzione, alcuni intrusi potrebbero finire in 1 minuto! Fai il controllo più frequente possibile. Se il programma è troppo lento, ridurre la risoluzione dell'immagine.

1
Sì, in effetti, ho in programma di scattare una foto ogni 10 secondi e caricarli solo quando rilevo un intruso o ogni minuto quando non c'è nessun problema.

1

Prendere la differenza due volte, vale a dire la differenza di differenze, può essere d'aiuto ... quindi se la doppia derivata dei pixel è maggiore di una soglia in alcune regioni, è possibile definirla come qualcuno che entra nella stanza. I cambiamenti di luminosità daranno un gradiente approssimativamente costante in tutta l'immagine, ma prendere la tela di iuta o la doppia derivata darà una buona indicazione del movimento o dei cambiamenti importanti nella stanza.

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.