progetto esame elaborazione delle immagini Giugno 2018
La prima parte del progetto si occupa di estrarre dall'immagine originale la scacchiera.
funzione che carica le immagini nell'intervallo specificato, trasforma in double
- input due valori interi che indicano l'intervallo delle immagini da analizzare
- output void
- parametri: 0
- funzioni MATLAB invocate: im2double, imread, sprintf
- invocata da: tutti gli script di test, script main
funzione che si occupa di fare una resize dell'immagine in modo da rendere più veloce e più scalabile tutta la computazione, e di lavorare in un formato standardizzato. diminuisce tutte le immagini a un massimo di dimensioni dei 2 lati di 1042 px tenendo le proporzioni originali. importante che imresize mantiene le proporzioni
- input: immagine del dataset di immagini da analizzare
- output: array di due elementi , immagine di nuove dimensione , scala usata per le immagini
- parametri: misura massima degli assi dell'immagine= 1000+42
- funzioni MATLAB invocate: size, imresize
- test: testResize
script di test per la funzione resize vengono salvate in variabili separate le dimensioni dell'immagine originale, immagine resized e scala in un array boolean test viene verificato stia funzionando correttasmente la 'scalata' di tutte le immagini tramite il calcolo inverso.
- funzioni invocate: readImages
funzione, seconda possibilità di elaborazione sviluppata in modo complementare alla secondaryElaboration, per poter individuare le scacchiere la dove c'è la presenza di uno sfondo a texture
- input: immagine già nella dimensione stabilita per l'elaborazione
- output: immagine in bianco e nero pronta per il riconoscimento dei componenti
- parametri: misure dischi
- funzioni MATLAB invocate: size, rgb2gray, im2double, imopen
- parametri: misure dischi
- matlab functions: size, rgb2gray, im2double, imopen, imclose, strel, imbinarize
- test: testPrimaryElaboration

script di test per la funzione primaryElaboration vengono caricate, elaborate, e mostratre a video, le immagini originali e quelle elaboborate
funzione, prima possibilità di elaborazione porta l'immagine a livelli di grigi se necessario, elabora tramite equalizzazione dell istogramma e sogliatura immagine con soglia individuata tramite Otsu.
- input: immagine già nella dimensione stabilita per l'elaborazione, boolean per il testing
- output: immagine in bianco e nero pronta per il riconoscimento delle componenti
- parametri: misura disco =6= per tentativi dopo aver stimato sulle prime 20 immagini che doveva essere 4,6,8 o 10 (!!!scrivere il perchè in due parole)
- funzioni MATLAB invocate: size, rgb2gray, adapthisteq, imclose, strel, graythresh, imbinarize
- parametri: misura disco
- matlab functions: size, rgb2gray, adapthisteq, imclose, strel, graythresh, imbinarize
- test: testSecondaryElaboration

script di test per la funzione secondaryElaboration vengono caricate, elaborate, e mostratre a video, le immagini originali e quelle elaboborate
funzione che si occupa di individuare la scacchiera. sfruttando le bounding box va a cercare le bounding box quadrate, con un errore del 20%, per poi selezionare quella più grande. (da aggiungere un controllo sulle diagonali =, forse anche pitagora)
- input: immagine elaborata(per ora da elaborationOne), la scala dell'immagine elaborata(output di resizeImage), immagine originale.
- output: la probabile chessboard sotto forma di struct contenente boundingbox, convexarea, convexImage ed scacchiera ritagliata dall'immagine originale
- parametri: errore di approssimazione dei lati = 0.20= stimato sulle prime 10 immagini, considerando che è solo un primo passaggio il secondo verrà poi implementato (dopo si può un po' abbassare )
- funzioni MATLAB invocate: regionprops,
- parametri: errore di approssimazione dei lati = 0.18
- matlab functions: regionprops, sort, fliplr (guardare anche le funzioni invocate per il test)
- test: testChessDiscover

script di test per la funzione chessDiscover vengono caricate, elaborate, e mostratre a video, le immagini originale tagliate e la maschera dell'immagine binaria tagliata
funzione che si occupa di individuare i 4 corner di una maschera binaria che riceve in input.
- input: maschera binaria figura bianco su sfondo nero
- output: matrice con i 4 corner
- parametri: 0
- funzioni MATLAB invocate: find
- invocata da: straightnessChess, (la userò anche per controllare le diagonali)
funzione che si occupa di raddrizzare la scacchiera all'interno della boundingBox che la contiene.
- input: immagine boundingBox da raddrizzare , maschera immagine boundingbox da raddrizzare
- output: immagine raddrizzata
- prametri: 0
- funzioni MATLAB invocate: size, imresize, fitgeotrans , imwarp, regionprops, imcrop
- test: testStraightensChess
script di test per la funzione testStraightensChess vengono mostrate a video le immagini,() interne alla più grossa boundingbox quadrata ) rispettivamente prima di essere raddrizate e successivamente
funzione che si occupa di stimare una percentuale che indica la probabilità che l'immagine passata sia effivamente una scacchiera.
- input: immagine (presunta scacchiera)
- output: valore numerico 0<x<1
- parametri: disco di dimensione 3 (!!! scrivere perchè dopo il ripasso)
- funzioni MATLAB invocate: rgb2gray, size, imread, rgb2gray, imbinarize, imopen, imresize, corr2
- test: testIsChessboard
script di test per la funzione isChessboard
- funzioni invocate: isChessboard, readImages, resizeImage, elaborationOne, chessDiscover, straightensChess.

funzione che si occupa di stabilire se la presuntaScacchiera trovata con secondaryElaboration è effettivamente una scacchier. se è una scacchiera ma viene tagliata male, stabilisce la migliore tra le due elaborazioni.
- input: immagine ridimensionata, scala del ridimensionamento, immagine originale
- output: immagine scacchiera
- parametri: stiama scacchiera=0.60
test che accorpora tutti i test sviluppati fino a questo punto, mostrando in successione tutti i risultati dii ogni test.
fine prima parte progetto--------------------------------------------------------------------------------
funzione che si occupa di creare la stringa FEN partendo dall'immagine ritagliata e raddrizzata della scacchiera. Per individuare i pezzi utilizza la correlazione incrociata normalizata. Questa funzione crea la matrice degli indici che passa poi alla funzione fenString che restituirà la stringa FEN.
- input: immagine della scacchiera ritagliata e raddrizzata, dataset dei pezzi per il match ed il n° dell'immagine che si sta analizzando.
- output: stringa FEN, angolo di rotazione della scacchiera, percentuale di riconoscimento.
- funzioni invocate: findSquare, fenString.
- funzioni MATLAB invocate: rgb2gray, imadjust, zeros, normxcorr2, abs, max, rot90, find, imrotate
funzione che ritaglia dalla scacchiera le singole celle.
- input: imaggine scacchiera ritagliata e raddrizzata.
- output: singole celle in oggetto di tipo "cell".
- funzione invocata da: fenGenerator
- funzioni MATLAB invocate: size, floor, cell, imresize, imshow, waitfor,
funzione che crea la stringa fen partendo dalla matrice degli indici dei pezzi trovata grazie alla funzione fenGenerator.
- input: matrice contenente i vari indici dei pezzi, n° immagine che si sta analizzando.
- output: stringa fen, percentuale riconoscimento.
- funzione invocata da: fenGenerator
- funzioni invocate: fenStringApp, wrongFen.
- funzioni MATLAB invocate: reshape
funzione che crea la stringa fen partendo da una stringa composta dalle iniziali dei pezzi.
- input: stringa con le iniziali dei pezzi e n° immagine che si sta analizzando.
- output: stringa fen e un vaore tra 0(non completamente correta) e 100(completaamente corretta).
- funzione invocata da: fenString.
- funzione invocata: checkFen.
- funzioni MATLAB invocate: strcat, num2str
funzione che verifica se la stringa fen è corertta (ritorna 100) o incorretta (ritorna 0).
- input: stringa fen e n° immagine che si sta analizzando.
- output: un numero tra 100(riconosciuta) e 0 (non riconosciuta).
- funzione invocata da: fenStringApp.
- funzioni MATLAB invocate: sprintf, fopen, fscanf, strcmp
funzione che controlla di quanto è sbagliata la stringa fen e ritorna la percentuale di correttezza e i pezzi che ha sbagliato a riconoscere.
- input: stringa iniziali pezzi in versione estesa e n° dell'immagine che sta analizzando.
- output: percentuale di pezi trovati correttamente e stringa contenente i pezzi che sono stati scambiati.
- funzione invocata da: fenString.
- funzione invocata: expandFen.
- funzioni MATLAB invocate: sprintf, fopen, fscanf, sum length, strcat
funzione che converte la stringa fen in formato esteso(sostituisco i numeri con il carattere 'a' ripetuto il numero di volte corrispondete al numere che sostituisce).
- input: stringa fen in versione estesa.
- output: fen in formato esteso.
- funzione invocata da: wrongFen.
- funzioni MATLAB invocate: length, str2num, strcat
funzione che crea la matrice di confusione.
- input: stringhe FEN e intervallo delle immagini analizzate.
- output: matrice di confusione e numero di stringhe fen completamente corrette.
- funzione invocata da: testOCR.
- funzioni MATLAB invocate: zeros, sprintf, fopen, fscanf, confusionmat, size, num2cell
script di test per la parte della creazione della stringa. Corrisponde ad una chiamata più completa rispetto allo script main
- funzioni invocate: readImages, makeDataset, resizeImage, chooseElaboration, chessDiscover, fenGenerator,confusionMat.
- funzioni MATLAB invocate: zeros, exist, load, save, cell, etime, size, sprintf, disp
script per l'esecuzione del progetto in formato base





