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:
Naturalmente, possono anche essere su una 'scala' diversa, come si può vedere da questa famiglia:
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.
E ovviamente, come gran finale, c'è la chiara possibilità di questo scenario "estremo":
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).
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?