Misurazione della "novità" dei dati

1

Ho una mentalità euristica che dovrebbe consentirmi di "segnare" i dati basati sulla "novità" che mi piacerebbe lavorare in tempo reale.

In questo caso, intendo la novità nel senso che l'origine dei dati è qualcosa di simile a un video e voglio sapere quando c'è un cambiamento statisticamente significativo nel flusso.

Ad esempio, considera un video di una scena in cui la videocamera sta girando a destra. Finché la velocità della virata è costante, i dati dovrebbero essere considerati come non nuovi o poco interessanti. Se un uccello vola oltre nella direzione opposta, allora le parti del fotogramma dove passa l'uccello verrebbero considerate nuove e verrebbero assegnati un punteggio elevato. Se i punteggi sono stati assegnati per 16x16 blocchi di pixel, quando l'uccello ha raggiunto il centro del frame potrebbe apparire come:

0 0 0 0 0 0 0
0 0 0 3 1 0 0
0 0 0 0 1 0 0
0 0 0 0 0 0 0

A quanto ho capito, ci sono algoritmi che possono fare parte di ciò per la compressione video, bloccare Compensazione del movimento e < a href="http://en.wikipedia.org/wiki/Global_motion_compensation"> Compensazione del movimento globale , ma il risultato di questi algoritmi sembra essere un'immagine di differenza che avrei poi bisogno di digerire ulteriormente (media di differenze), quando tutto ciò che voglio è un semplice hash. Cioè, data la matrice 7x4 sopra:

0x00003200

Il primo fotogramma del video, senza cronologia, sarebbe al massimo romanzo:

0xFFFFFFFF

La cosa interessante sarebbe assegnare un punteggio all'intero fotogramma, e poi per fotogrammi interessanti suddividerlo in blocchi più piccoli, e per i blocchi interessanti un altro set, e così via, come un quadtree .

Quindi, per riassumere, c'è una scorciatoia per passare da una serie di frame a un singolo valore hash per ogni frame, in base ai fotogrammi più recenti? O c'è un migliore modo per fare ciò che non conosco?

Ulteriori affinamenti

Riutilizzando la matrice di esempio sopra, dove c'è un 3 il campione è più nuovo perché il blocco dove l'uccello è in questa cornice non aveva un uccello lì prima, mentre i campioni con un 1 sono ancora un po 'nuovi perché non c'è più un uccello lì, ma non tanto perché quel blocco è tornato a ciò che ci si aspetterebbe in background.

Questo mi porta a credere che ci dovrebbe essere un qualche tipo di effetto cumulativo nella soluzione, perché bisogna prendere in considerazione più dell'ultimo frame.

    
posta jzx 14.02.2014 - 17:54
fonte

1 risposta

1

Vorrei procedere in questo modo:

  1. Acquisisci il nuovo frame
  2. Confronta ogni pixel con lo stesso pixel, ma da n fotogrammi precedenti
  3. Assegna un "indice di novità" a quel pixel (ad esempio, la media quadratica delle differenze da ogni fotogramma n passato, forse ponderata con la differenza temporale del fotogramma)
  4. Conta il numero di pixel il cui "indice novità" supera una "soglia novità"
  5. Se quel numero è al di sopra di una certa "soglia generale di novità", quella cornice è nuova

Puoi adattare questo approccio a un approccio ricorsivo, in modo da scomporre il frame in 4 aree e così via, applicare l'algoritmo e quindi tornare al frame superiore.

N.B .: Non sono un informatico né un matematico, quindi probabilmente non è l'approccio migliore!

    
risposta data 19.02.2014 - 14:36
fonte

Leggi altre domande sui tag