Quali tecniche di elaborazione delle immagini sono ideali per questo particolare abbinamento invariante di spostamento / scala?


17

Un problema che avevo discusso inizialmente qui si è evoluto e potrebbe essere diventato un po 'più semplice mentre lo studiavo in qualche altro e ottenevo nuove informazioni.

In conclusione, vorrei essere in grado di rilevare questo modello mostrato qui, usando tecniche di visione artificiale / elaborazione di immagini. Come puoi vedere, il modello ideale è composto da quattro "ping". Il riconoscimento dell'oggetto dovrebbe essere:

  • Shift Invariant
    • Orizzontalmente, l'immagine sarà ciclica. (ovvero, Spingi a destra, esce a sinistra e viceversa).
    • (Fortunatamente) In verticale, non è ciclico. (ovvero, spingere verso l'alto o verso il basso e si fermerà).
  • Scala invariante (I ping possono variare in "spessore" come puoi vedere.)

Potrei andare avanti all'infinito, ma ho allegato immagini che coprono ciò che intendo, vedere di seguito:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Naturalmente, possono anche essere su una 'scala' diversa, come si può vedere da questa famiglia:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

E infine, ecco alcuni scenari "realistici" di ciò che potrei effettivamente ricevere, dove ci sarebbe rumore, le file potrebbero "sbiadire" mentre vai verso il fondo e, naturalmente, l'immagine avrà molte linee spurie, artefatti , eccetera.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

E ovviamente, come gran finale, c'è la chiara possibilità di questo scenario "estremo":

inserisci qui la descrizione dell'immagine

Quindi, ancora una volta, vorrei chiedere una guida su quali tecniche di computer-machine-vision dovrei utilizzare qui al fine di rilevare meglio il verificarsi del mio modello, in cui ho bisogno di essere spostato e scalare invariante come puoi vedere, e anche essere in grado di ottenere risultati decenti per gli scenari realistici. (La buona notizia è che NON ne ho bisogno per essere invariante a livello di rotazione). L'unica idea che sono stato in grado di elaborare finora è una correlazione 2D.

Dovrei aggiungere che, in realtà, NON ho immagini a colori - otterrò solo una martix di numeri, quindi suppongo che stiamo parlando di "scala di grigi".

Grazie in anticipo!

PS Per quello che vale probabilmente userò open C V.

EDIT # 1:

Sulla base dei commenti, ho aggiunto i dettagli richiesti qui:

Per le caratteristiche che definiscono i dati, possiamo assumere quanto segue:

  • La lunghezza orizzontale di ciascun ping può variare, ma conosco i limiti superiore e inferiore. SÌ per qualsiasi cosa all'interno di questo limite, NO per qualsiasi cosa al di fuori. (Ad esempio, so che la lunghezza dei ping può essere compresa tra 1 e 3 secondi, ad esempio).

  • Tutti i ping devono essere "visibili" per SÌ, tuttavia può mancare l'ultima riga e continuare a dire "SÌ". Altrimenti NO.

  • La lunghezza verticale (lo "spessore") di ciascun ping può variare, ma anche in questo caso conoscere il limite superiore e inferiore. (Simile a quello che vedi in quelle immagini). SÌ per qualsiasi cosa all'interno di tale limite. NO per niente al di fuori.

  • L'altezza tra ogni ping dovrebbe essere sempre la stessa per SÌ. Se non lo sono, allora NO. (Esempio, puoi vedere come tutti i ping abbiano la stessa altezza l'uno rispetto all'altro, ~ 110 sull'asse verticale). Quindi 110 +/- 5 può essere un SÌ, qualsiasi altra cosa deve essere NO.

Penso che sia a questo proposito - ma fammi sapere cos'altro posso aggiungere ... (Inoltre, tutto ciò che viene mostrato qui dovrebbe essere registrato come SÌ, a proposito).


Cosa intendi quando dici detect this pattern shown here? Sei solo interessato a isolare la linea rossa / gialla o vuoi davvero un'espressione che calcoli la relazione tra tali linee. Solo la ricerca di righe potrebbe richiedere solo un certo limite o segmentazione. cosa vuoi veramente?
Dipan Mehta,

@DipanMehta Ci scusiamo per la confusione. Quello che voglio fare è questo: prima di tutto non prestare attenzione ai colori (è solo il dire che sono stati tracciati), quello che avrò sarà solo una matrice di numeri, quindi in scala di grigi. La seconda cosa, dal momento che non ci sono colori, mi interessa solo lo "schema" che vedi lì con i 4 ping che stai vedendo ripetere. Quindi il rivelatore vedrà le varianti di quel modello di immagine come mostrato nelle immagini sopra e dice "sì, questo modello esiste". Scusate la confusione, fatemi sapere se posso chiarire qualcos'altro. Grazie!
Spacey,

Ok, quindi se ho capito bene, dato che c'è la prima riga in cima, vuoi scoprire se anche il saldo è nello stesso posto. in tal caso, concluderesti che esiste un modello! Giusto?
Dipan Mehta,

@DipanMehta Sì, fondamentalmente, essere in grado di rilevare se il modello mostrato sopra esiste, abbastanza robusto da gestire l'invarianza di scala e abbastanza robusto da gestire l'invarianza di turno. Ha senso? Grazie,
Spacey,

1
Quello che sto ottenendo è se hai accesso ai dati di origine nel sistema reale su cui stai lavorando. In tal caso, potrebbe esserci un approccio migliore che opera direttamente sui dati originali anziché sul formato dello spettrogramma intermedio su cui si è azzerato.
Jason R,

Risposte:


6

In generale, ci sono due approcci principali per risolvere questo problema:

un. corrispondenza del modello o
b. corrispondenza con un modello con parametri.

Personalmente, data la semplicità del modello, preferirei il secondo approccio per questo problema.

Passaggio 1: identificare i BLOB di ping

Come primo passo, estrai le "Scatole", essenzialmente i quadrati giallo / blu. Un metodo più semplice qui potrebbe essere solo la soglia dell'immagine. Non sembrano esserci molte variazioni sullo sfondo, tranne che quando il rumore aumenta tende ad essere abbastanza simile ai ping. Quindi, la soglia può essere globale in tutta l'immagine - e penso che sarai in grado di ottenere una soglia decente che funzioni su tutte le immagini. La soglia, tuttavia, dovrebbe essere intelligente in modo da poter usare qualcosa come il metodo di Otsu. Vedi questo e questo per ulteriori riferimenti.

Miglioramento dei blocchi

Una delle cose buone che puoi fare per rimuovere i punti spuri che assomigliano al primo piano del ping in cui alcuni pixel all'interno dei ping sono anche blu. È necessario qui un'operazione morfologica chiamata "Apertura". Ecco uno dei riferimenti di HIPR . Questo tipo di operazioni richiede una forma intelligente che aiuta a preservare forme simili e rimuoverne altre. Nel tuo caso puoi scegliere linee orizzontali. Alla fine di questo, hai pixel di sfondo e di primo piano che separano ordinatamente i ping senza toccarsi.

Passaggio 2: contrassegnare / registrare i blocchi

Ora che hai ottenuto i BLOB più puliti possibile, è tempo di contrassegnarli come 1,2,3,4 o A, B, C, D ecc. Questo di solito viene realizzato da quello che viene chiamato un semplice algoritmo. Corri attraverso ogni pixel e se tocca una regione contrassegnata, ed è anche in primo piano, assegnalo a quel segmento altrimenti creane uno nuovo. Se ti capita di trovare più di 4 segmenti importanti, devi scegliere quelli più pertinenti. Applicare un po 'di euristica qui piuttosto che qualsiasi algoritmo teorico.

Passaggio 3: modellazione dei parametri

Ora, una volta che avremo molto probabilmente i primi 4 candidati dei 4 ping corrispondenti, puoi identificare i riquadri di delimitazione - essenzialmente gli angoli in alto a sinistra e in basso a destra (o la maggior parte dei pixel a sinistra e a destra, così come le righe in alto e in basso del blob) . Trova il rettangolo di selezione, puoi multare il centroide di ciascuna casella di ping.

Cio dove io{1,2,3,4}C1C1

quindi ora è possibile calcolare le distanze inter centroidi:

C1io[X,y]={C1[X]-Cio[X],C1[y]-Cio[y]}

Lio dove io{1,2,3,4}

Essenzialmente hai 8 parametri vecoter:

1.{C1[X],C1[y]}2..4C1io[X,y]5..8Lio

Passaggio 4: Classificazione
Nell'ultimo passaggio, ora è necessario disporre della classificazione se esiste un pattern ping sì o no.

Per qualcosa del genere, puoi avere un bel quadro di classificazione bayesiana.

Ci sono due ipotesi che hai

H0: esiste il modello ping.
H1: il pattern ping non esiste

C1,io[X]

Prima di tutto studi molte immagini in cui sai che appartengono all'immagine. Ora puoi tracciare vari istogrammi o applicare un metodo di stima della densità. Leggi la classificazione dei modelli di Duda Hart.

C1,io[X]μ=20,σ=.1

C1,ioH0P[C1,io[X]|H0]

Ora, dai dati del test

P[H0|C1,io[X]=X1]C1[X]X1H0

Quindi, puoi calcolare

P[H0 |C1,io[X]]=P[C1,io[X]|H0]*P[H0]P[C1,io[X]]

Devi combinare questa espressione per l'espressione vettoriale e devi compiere molti sforzi per fare esattamente la stima dei parametri da fare. Ma ti lascio con un approccio di base qui.

Per favore, fai i tuoi calcoli, questo sarà lungo, ma dovrebbe essere ancora abbastanza intuitivo.

P[H0|tutti i parametri]>1/2

MODIFICA
Poiché si stanno già definendo i criteri specifici di 110 +/- 5 pixel, l'ultimo passaggio può essere più semplice. Probabilmente non è necessario calcolare tutte queste probabilità se i criteri di classificazione sono fissi.


Grazie mille! Dovrò digerire questo e tornare da te.
Spacey,

3

Questo problema sembra a me come la ripetizione degli impulsi intervallo di rilevamento + stima problema. Avrò bisogno di sviluppare questa risposta nel tempo, ma il tipo di algoritmi che funzionano bene in quel problema sono la massima probabilità su un reticolo .


Grazie, sì, sarò felice di sentire le tue opinioni su questo. Nel frattempo esaminerò il tuo link.
Spacey,

Peter, hai avuto del tempo per pensarci come hai detto? Sarei interessato a sentire i tuoi pensieri in merito.
Spacey,

Ho appena iniziato a armeggiare di nuovo (aprile è stato un annullamento). Potrei sbagliarmi: il modo in cui il documento di Clarkson formula il problema è diverso ... fammi scavare un po 'di più.
Peter K.
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.