2012-07-13 16 views
11

Qual è il miglior set di operazioni di preelaborazione dell'immagine da applicare alle immagini per il riconoscimento del testo in EmguCV?Preelaborazione delle immagini per il riconoscimento del testo

Ho incluso due immagini di esempio here.

L'applicazione di un filtro passa basso o passa alto non è adatta, poiché il testo potrebbe essere di qualsiasi dimensione. Ho provato filtri mediani e bilaterali, ma non sembrano influenzare molto l'immagine.

Il risultato ideale sarebbe un'immagine binaria con tutto il testo bianco e la maggior parte del resto nero. Questa immagine verrà quindi inviata al motore OCR.

Grazie

+1

potresti per favore caricare quelle immagini di esempio qui? link dà 403 proibito – Alupotha

risposta

16

Non c'è niente come il miglior set. Tieni presente che le immagini digitali possono essere acquisite da diversi dispositivi di acquisizione e ogni dispositivo può incorporare il proprio sistema di preelaborazione (filtri) e altre caratteristiche che possono cambiare drasticamente l'immagine e persino aggiungere rumori. Quindi ogni caso dovrebbe essere trattato diversamente (pre-elaborato).

Tuttavia, esistono operazioni commmon che possono essere utilizzati per migliorare l'individuazione, ad esempio, uno molto semplice sarebbe quella di convertire l'immagine in scala di grigio e applicare un threshold binarizzare l'immagine. Un'altra tecnica che ho usato prima è the bounding box, che consente di rilevare l'area di testo. Per rimuovere i rumori dalle immagini potresti essere interessato a operazioni di erosione/dilatazione. Dimostro alcune di queste operazioni su this post.

Inoltre, ci sono altri post interessanti su OCR e OpenCV che si dovrebbe dare un'occhiata:

Ora, solo per mostrare un approccio semplice che può essere utilizzato con l'immagine di esempio, questo è il risultato di invertire il colore e applicare una soglia:

cv::Mat new_img = cv::imread(argv[1]); 
cv::bitwise_not(new_img, new_img); 

double thres = 100; 
double color = 255; 
cv::threshold(new_img, new_img, thres, color, CV_THRESH_BINARY); 

cv::imwrite("inv_thres.png", new_img); 
+0

Immagino che dovrò trovare l'insieme corretto di operazioni di erosione/dilatazione per ogni immagine. In questo momento, non riesco a trovare una combinazione che funzioni ragionevolmente bene per tutte le immagini. L'esempio spartiacque funziona meglio, però. – Osiris

+0

Esistono altri modi per rilevare il testo nelle immagini? – Maystro

+1

Il secondo collegamento OpenCV è morto, ecco un'alternativa: https://github.com/damiles/basicOCR – yurez

2

Prova l'elaborazione dell'immagine morfologica. Dai un'occhiata a this. Tuttavia, funziona solo su immagini binarie, quindi dovrai binarizzare l'immagine (soglia?). Sebbene sia semplice, dipende dalla dimensione del carattere, quindi un elemento della struttura non funzionerà per tutte le dimensioni dei caratteri. Se si desidera una soluzione generica, sono disponibili numerosi documenti per il rilevamento del testo nelle immagini. Una ricerca di questo termine in Google Scholar dovrebbe fornire alcune pubblicazioni utili.

+0

Grazie, quel documento sarà davvero utile. Ho esaminato le operazioni morfologiche, ma, come hai detto tu, dipendono dalle dimensioni del testo. – Osiris

Problemi correlati