La corrispondenza dei modelli tende a non essere robusta per questo tipo di applicazione a causa di incoerenze dell'illuminazione, cambiamenti di orientamento, cambiamenti di scala, ecc. Il modo tipico per risolvere questo problema è quello di portare l'apprendimento automatico. Quello che stai cercando di fare allenando il tuo classificatore boosting è un approccio possibile. Tuttavia, non penso che tu stia facendo correttamente l'allenamento. Hai detto che hai dato il logo 1 come immagine di allenamento positiva e altre 5 immagini che non contengono il logo come esempi negativi? In genere è necessario che i campioni di addestramento siano nell'ordine di centinaia o migliaia o più. Non è possibile allenarsi con 6 campioni di allenamento e aspettarsi che funzioni.
Se non si ha familiarità con l'apprendimento della macchina, qui è circa cosa si dovrebbe fare:
1) È necessario raccogliere molti campioni di formazione positivi (da centinaia di poi, ma in generale più siamo meglio è) di l'oggetto che stai cercando di rilevare. Se si sta tentando di rilevare singoli caratteri nell'immagine, ottenere immagini ritagliate di singoli caratteri. È possibile iniziare con il database MNIST per questo. Meglio ancora, per addestrare il classificatore per il tuo particolare problema, ottenere molte immagini ritagliate dei personaggi sul bus dalle foto. Se si sta tentando di rilevare l'intero pannello LED rettangolare, utilizzare le immagini come campioni di allenamento positivi.
2) È necessario raccogliere molti campioni di allenamento negativo. Il loro numero dovrebbe essere nello stesso ordine del numero di campioni di allenamento positivi che hai.Queste potrebbero essere le immagini degli altri oggetti che appaiono nelle immagini su cui verrà eseguito il rilevatore. Ad esempio, è possibile ritagliare le immagini della parte anteriore del bus, delle superfici stradali, degli alberi lungo la strada ecc. E utilizzarle come esempi negativi. Questo per aiutare il classificatore a escludere questi oggetti nell'immagine su cui viene eseguito il rilevatore. Quindi, gli esempi negativi sono non solo qualsiasi immagine contenente oggetti che non si desidera rilevare. Dovrebbero essere oggetti che potrebbero essere scambiati per l'oggetto che stai cercando di rilevare nelle immagini su cui viene eseguito il rilevatore (almeno per il tuo caso).
consultare il seguente link su come addestrare la cascata di classificatore e produrre il file del modello XML: http://note.sonots.com/SciSoftware/haartraining.html
Anche se lei ha detto che si desidera solo per rilevare i singoli caratteri invece che l'intero pannello LED sul bus, Consiglierei innanzitutto di rilevare il pannello LED in modo da localizzare la regione contenente i caratteri di interesse. Successivamente, esegui la corrispondenza dei modelli all'interno di questa regione più piccola o esegui un classificatore addestrato a riconoscere i singoli caratteri su patch di pixel in questa regione ottenuti utilizzando l'approccio a finestra scorrevole e, eventualmente, su più scale. (Nota: il classificatore boosting haarcascade che hai menzionato sopra rileverà i caratteri ma non ti dirà quale personaggio ha rilevato a meno che tu non lo addestri solo per rilevare quel particolare carattere ...) Rilevare i caratteri in questa regione in una finestra scorrevole darà l'ordine in cui appaiono i caratteri in modo da poterli stringere in parole, ecc.
Spero che questo aiuti.
EDIT:
mi è capitato di possibilità su questo vecchio post di mine dopo separatamente scoperta del modulo di testo scena in OpenCV 3 citato da @KaolinFire.
Per coloro che sono curiosi, questo è il risultato dell'esecuzione di quel rivelatore sull'immagine campione fornita dall'OP. Si noti che il rilevatore è in grado di localizzare l'area di testo, anche se restituisce più di un riquadro di delimitazione.
noti che questo metodo non è infallibile (almeno questa implementazione in OpenCV con i parametri di default). Tende a generare falsi positivi, specialmente quando l'immagine di input contiene molti "distrattori". Qui ci sono altri esempi ottenuti utilizzando questo rilevatore di testo OpenCV 3 su Google Street View set di dati:
noti che si ha la tendenza a trovare "testo" tra le linee parallele (ad esempio, , finestre, pareti ecc.). Poiché l'immagine in ingresso dell'OP probabilmente contiene scene esterne, questo sarà un problema soprattutto se non limiterà la regione di interesse a una regione più piccola intorno ai segni dei LED.
Sembra che se si è in grado di localizzare una regione "approssimativa" contenente solo il testo (ad esempio, solo il segno LED nell'immagine di esempio dell'OP), l'esecuzione di questo algoritmo può aiutare a ottenere un riquadro di selezione più stretto. Ma dovrai affrontare i falsi positivi (magari scartando piccole regioni o raccogliendo tra i riquadri di delimitazione sovrapposti usando un euristico basato sulla conoscenza del modo in cui le lettere appaiono sui segni dei LED).
Qui ci sono più risorse (discussione + codice + set di dati) sul rilevamento del testo.
Codice
Dataset
Troverete le Streetview e MSRA set di dati di Google qui. Sebbene le immagini in questi set di dati non siano esattamente identiche a quelle dei segnali LED sui bus, possono essere utili sia per scegliere l'algoritmo di esecuzione "migliore" tra diversi algoritmi concorrenti, sia per formare un algoritmo di apprendimento automatico da zero.
http://www.iapr-tc11.org/mediawiki/index.php/Datasets_List
ma la posizione di cifre dell'immagine può variare, quindi non posso confrontare per la particolare posizione dell'immagine. L'immagine comparata non è chiara, quindi come otterrò la particolare cifra dall'immagine ??? – asifkt
@asifkt, quindi modifica la tua domanda per fornire ulteriori dettagli sulla tua applicazione. Cosa sai delle lettere (tipi di carattere, dimensioni, prospettiva) della fonte dell'immagine (video, scanner, ecc.) E altro ancora. Ciò contribuirà a concentrarsi sulle possibili soluzioni. –
Ho sviluppato un'applicazione per il rilevamento del volto. In realtà il file cascade haarcascade_frontalface_alt.xml è fornito con opencv. Per il riconoscimento delle lettere ho bisogno di creare un file xml.Così ho usato i file opencv_createsamples.exe, opencv_haartraining.exe per creare questo file. Ho dato un logo come immagine positiva e altre 5 immagini che non contengono il logo come immagini negative. Non ho ricevuto alcun file xml allenandolo. Ho sentito che ci vorranno almeno 3 giorni per l'allenamento di haar. È vero?? Per ottenere un xml intermedio ho bisogno di usare il file convert_cascade.exe. Se lo uso, otterrò il risultato migliore ??? – asifkt