• Non ci sono risultati.

Il codice scritto è più snello e meno articolato del primo. Divideremo il codice per la fase di training e per la fase di test che sono salvati all’interno del CD rispettivamente nella cartella Train e Test all’interno della directory secondo_problema. Nel paragrafo successive verranno esposte le funzioni usate sia nella fase di train che in quella di test.

B.4.1 Funzioni generali

Sia nella parte di training e di test è necessario determinare la sezione circolare dell’immagine che rappresenta l’oggetto da analizzare. Al fine di determinare tale parte dell’immagine sono state utilizzate alcune funzioni implementate da noi o scaricate dal sito :

http://www.mathworks.com/matlabcentral/fileexchange/. Tali funzioni sono:

transImageInvPolar che applica una trasformazione polare inversa ad un immagine con strut-tura circolare. Come output restituisce l’immagine linearizzata, in cui le colonne dell’im-magine rappresentano i raggi della sezione circolare di partenza.

motorcase_circlefit tramite tale funzione ricaviamo il centro e il raggio del cerchio della se-zione circolare dell’immagine contenente l’oggetto. Per far ciò ci si ricava un immagine binarizzata attraverso una sogliatura del colore. Tramite tale blob si ricava il contorno che sarà passata come ingresso alla funzione Landau_Smith che determina la circonferenza che interpola meglio i punti del contorno.

B.4.2 Fase di Training

Per tale fase si è implementata la GUI Train_features, la cui interfaccia è riportata in Figura B.3. Prima di eseguire il file è necessario impostare alcune variabili:

• handles.nameDir è il path della cartella contenente le immagini che si vogliono utilizzare per il training del classificatore;

• handles.Kresize è il fattore di scalatura dell’immagine di partenza. Come detto nel capitolo 4, l’immagine di partenza ha dimensioni eccessivamente grandi. É stato previsto quindi di scalare l’immagini prima di applicare i filtri;

• handles.cellSize è il numero di pixel della cella dell’Histogram of Oriented Gradients (HOG) • handles.numCell è il numero di celle quadrate di un lato della finestra che si utilizzerà per

scorrere l’HOG, sliding windows

Come si può vedere da Figura B.3 l’interfaccia prevede:

• una list box dove sono elencati tutti i nomi delle immagini contenute in handles.nameDir ; • una prima axes, a destra della list box, dove viene mostrata l’immagine selezionata

dall’e-lenco disponibile;

• il pulsante HOG TRAINING. Una volta selezionata l’immagine da cui trarre i training examples, premendo tale pulsante si andrà a calcolare l’HOG dell’apertura polare della sezione circolare dell’immagine contenente l’oggetto da esaminare. Tale immagine è ripor-tata nell’axes superiore. Tali passi sono svolti dalla funzione calculatehog che viene invoca premendo il pulsante. La funzione richiede in ingresso:

B.4. CODICE SECONDO PROBLEMA 83

Fig. B.3: Esempio dell’interfaccia GUI Train_features, utilizzata nella fase di Train del secondo problema

1. name_image il nome dell’immagine; 2. Kresize

3. cellSize

e come output restituisce l’HOG e l’immagine che lo rappresenta.

• le due slider bar permettono di far scorrere orizzontalmente e verticalmente, la finestra (in giallo) all’interno dell’HOG. Tale finestra permetterà di selezionare i training examples. • i pulsanti Difetto e Non Difetto permettono una volta portata la finestra (gialla) nella parte

di HOG che vogliamo selezionare come training example, di applicargli la labels difetto o non difetto. Una volta selezionato, il training example sarà colorato in rosso se appartenente alla classe difetto, in verde se appartenente alla classe non difetto. I training examples sono salvati nel file trainingft.mat all’interno di un array di strutture. La lunghezza di tale array è pari al numero di immagini da cui sono stati estratti i training examples. La struttura è composta dagli attributi:

– pos e neg le coordinate delle celle dell’HOG rappresentanti l’angolo in alto a destra della finestra utilizzata per estrarre un training example appartenente rispettivamente alla classe difetto e non difetto;

– FTpos e FTneg il training example (la concatenazione degli istogrammi delle celle della finestra selezionata);

– name è il nome dell’immagine da cui sono stati estratti i training examples.

Lo script file training_classificatore.m legge il file Train_features e allena il classificatore tramite i parametri impostati nella funzione svmtrain.

B.4.3 Fase di Test

Per la fase di test si è sviluppata una seconda GUI Test_Image. Un esempio dell’interfaccia è riportato in Figura B.4. Prima di eseguire la GUI è necessario impostare alcuni parametri:

84 APPENDICE B. LIBRERIE UTILIZZATE

Fig. B.4: Esempio dell’interfaccia GUI Train_features, utilizzata nella fase di Test del secondo problema

• handles.nameDir è il path della cartella contenente le immagini da analizzare • handles.Kresize è il fattore di scalatura dell’immagine di partenza

• handles.cellSize è il numero di pixel della cella dell’Histogram of Oriented Gradients (HOG) • handles.numCell è il numero di celle di un lato della finestra che si utilizzerà per scorrere

l’HOG, sliding windows.

Le ultime tre variabili vanno settate in accordo con quelle utilizzate nella fase di training del classificatore. Per eseguire il test è necessario premere il pulsante COLLA FONDO e i candidati classificati come difetti verranno segnalati in rosso sia sull’immagine dell’apertura polare dell’og-getto analizzata, la prima immagine in alto, sia sull’immagine di partenza in scala di grigi, prima figura in basso a sinistra. Per andare ad analizzare l’immagine si richiama all’interno della GUI la funzione MotorCase_GUI che non fa altro che eseguire ciò che è stato spiegato nel capitolo quattro.

Bibliografia

[1] N. Dalal and B. Triggs, “Histograms of oriented gradients for human detection”, in IEEE Conference on Computer Vision and Pattern Recognition, 2005.

[2] P. F. Felzenszwalb, R. B. Girshick, D. McAllester and D. Ramanan, “Object Detection with Discriminatively Trained Part Based Models“, PAMI, vol. 32, no. 9, pp. 1627-1645, September 2010

[3] Chang, Chih-Chung and Lin, Chih-Jen, LIBSVM: A library for support vector machines, ACM Transactions on Intelligent Systems and Technology, vol. 2, pp, 27:1–27:27, 2011, Software available at http://www.csie.ntu.edu.tw/ cjlin/libsvm

[4] A. Ng, CS229 Lecture Notes, Materiale didattico del corso Machine Learning dell’Università di Stanford, avalaible at http://cs229.stanford.edu/materials.html

[5] O. Chapelle, P. Haffner, and Vladimir N. Vapnik, Support Vector Machines for Histogram-Based Image Classification, IEEE Transactions on Neural Networks, vol. 10, no. 5, September 1999

[6] M. Stricker and M. Orengo , Similarity of Color Images, Communications Technology

Laboratory Swiss Federal Institute of Technology, ETH

Documenti correlati