Skip to content

Studio di algoritmi di estrazione informazioni ad alto livello per sistema di visione embedded

L'algoritmo in linguaggio C e Matlab a confronto

La dichiarazione di più valori numerici ordinati in forma di matrice non è effettuabile in C. Il linguaggio permette la memorizzazione di serie numeriche attraverso array (vettori). L'array è giustificato dal fatto che lo spazio in memoria è costituito da tante cellette consecutive, all'interno delle quali, i dati vengono immagazzinati in successione. E' necessario dichiarare la quantità di elementi che compongono l'array, affinché il calcolatore possa riservare il giusto spazio in memoria. Questa è da considerarsi una differenza molto importante, poiché tutto l'algoritmo in Matlab è basato su cicli for e logiche che lavorano su matrici. Sembrerebbe quindi necessario variare tutti i cicli for e le funzioni che effettuano le convoluzioni per operare su vettori anziché matrici. La soluzione adottata è l'utilizzo di array di puntatori che puntassero a particolari posizioni del vettore di dati. Conoscendo il numero di colonne di una matrice (definito nc), è possibile dichiarare un'array di dimensioni pari al numero di righe della matrice; attraverso un ciclo for si assegna un puntatore ogni nc elementi del vettore dati. In questo modo avremo i puntatori che punteranno verso ogni primo elemento delle righe della matrice.

Attraverso questo costrutto è così possibile accedere ai dati come se essi fossero memorizzati in una struttura matriciale. Tale soluzione è applicabile a qualsiasi array di valori, sarà così possibile riottenere tutte le matrici desiderate. Il nuovo costrutto si richiama attraverso il nome attribuito, seguito da due parentesi quadre contenenti una il valore del puntatore (corrispondente all'indice della riga), e l'altra il valore posizione del dato nell'array di origine (considerando come posizione zero il valore a cui punta il puntatore).

All'interno del main, dopo le dichiarazioni delle costanti e dei prototipi delle funzioni, con il metodo appena descritto, vengono ricreate le matrici immagine, il kernel Gaussiano e la matrice R. Nel linguaggio C si è preferito allocare subito tutto lo spazio necessario alla matrice dei risultati R, poiché tale spazio verrà comunque interamente utilizzato e poiché risultava più complesso collegare parti dell'array R all'array dei relativi puntatori durante lo svolgimento della funzione. Nel Matlab era possibile aggiungere righe alla matrice dei risultati man mano che i valori venivano generati. Successivamente viene invocata la funzione find_cim ed in conclusione i risultati ottenuti vengono visualizzati all'interno dell'interfaccia grafica. Con le funzioni conv_x, conv_y e conv_nxn, utilizzate all'interno di find_cim, è stato possibile utilizzare la stessa struttura e gli stessi cicli for utilizzati in Matlab grazie all'utilizzo delle matrici. Le differenze di tali funzioni rispetto al Matlab sono da ricercarsi nel passaggio di input e output, effettuato indicando il puntatore al primo valore di un'array o una matrice e non passando l'intero array o matrice. E' necessario inoltre assegnare il valore zero alla variabile dei risultati prima di effettuare un ciclo for; non possiamo essere sicuri che la cella di memoria sia vuota e, effettuando un'operazione di sommatoria e non una sovrascrizione, ciò potrebbe generare errore. Anche gli indici dei cicli variano leggermente: un vettore Matlab indicizza i suoi elementi a partire da 1, un vettore in C invece a partire da 0. Nella funzione find_cim vengono dichiarati i vettori Ix e Iy per i valori delle convoluzioni derivative, puntatori ed array per le matrici Ix2 , Iy2 e Ixy ed infine i tre vettori per i valori della convoluzione Gaussiana. L'aggiunta delle righe di zeri sopra e sotto la matrice immagine, in questo caso viene effettuata allocando un solo vettore di zeri, delle stesse dimensioni delle righe dell'immagine. Anziché avere più vettori di zeri a cui sono indirizzati un pari numero di puntatori, è possibile risparmiare spazio indirizzando i puntatori delle righe verso un unico vettore di zeri, operazione possibile poiché esso verrà impiegato solo in lettura.

I tre cicli for principali, che calcolano il valore del gradiente di luminosità nelle zone di bordo superiore, centro e bordo inferiore, mantengono una architettura simile a quella dello script Matlab, fatto salvo per una particolare attenzione all'utilizzo dei puntatori, per non commettere errori nel passaggio di indirizzi o di dati. Differenti sono anche i comandi per aggiornare la matrice che contiene i valori Ix2 , Iy2 e Ixy (convoluzioni derivative elevate al quadrato) e quelli per il calcolo del valore R. Nel dettaglio, per permettere all'algoritmo di mantenere i valori necessari alla convoluzione Gaussiana della riga successiva, in Matlab veniva cancellata la prima riga delle matrici Ix2 , Iy2 e Ixy e quella nuova era aggiunta in coda a quelle esistenti. In C, è stata creata la funzione shiftMat: essa agisce su un array di puntatori a righe, i quali vengono indirizzati verso la riga precedente quella iniziale. In questo modo gli indici delle righe variano come se le righe venissero fatte scorrere verso l'alto, la prima riga, che rimarrebbe così senza puntatore, viene assegnata all'ultimo puntatore. Attraverso l'ultimo puntatore è ora possibile accedere all'array contenente valori obsoleti che potranno così essere sovrascritti. Per quanto riguarda il calcolo del valore R, l'esigenza di effettuare moltiplicazioni tra valori molto grandi, ha richiesto l'utilizzo di tipi di dati double e di una suddivisione dei prodotti parziali (moltiplicazione tra sIx2 e sIy2 e poi tra sIxy e sIxy) e del denominatore e numeratore. E' stato infatti verificato che il calcolatore introduceva degli errori sconosciuti se gli veniva richiesto di calcolare in un solo passaggio il valore di R; si è preferito quindi effettuare step-by-step le operazioni necessarie. Da sottolineare infine che, coerentemente con l'obbiettivo di ridurre lo spazio richiesto in memoria, all'interno dell'algoritmo implementato in C, non è mai stato fatto uso della funzione malloc. La funzione è di fondamentale importanza nella programmazione in C per la gestione dinamica della memoria. Essa consente di allocare, ovvero riservare, una certa quantità di memoria; la funzione si incarica di rintracciare all'interno della RAM un'area sufficientemente ampia e ne restituisce l'indirizzo. E' possibile comprendere perché la funzione malloc sia assolutamente sconsigliata se la priorità è il risparmio di memoria: l'area riservata non sarà più disponibile per successive allocazioni fino al termine del programma o finché essa non venga esplicitamente restituita all'insieme della memoria libera mediante la funzione free.

Questo brano è tratto dalla tesi:

Studio di algoritmi di estrazione informazioni ad alto livello per sistema di visione embedded

CONSULTA INTEGRALMENTE QUESTA TESI

La consultazione è esclusivamente in formato digitale .PDF

Acquista

Informazioni tesi

  Autore: Giacomo Scandroglio
  Tipo: Laurea I ciclo (triennale)
  Anno: 2008-09
  Università: Politecnico di Milano
  Facoltà: Ingegneria
  Corso: Ingegneria industriale
  Relatore: Alberto Rovetta
  Lingua: Italiano
  Num. pagine: 62

FAQ

Per consultare la tesi è necessario essere registrati e acquistare la consultazione integrale del file, al costo di 29,89€.
Il pagamento può essere effettuato tramite carta di credito/carta prepagata, PayPal, bonifico bancario.
Confermato il pagamento si potrà consultare i file esclusivamente in formato .PDF accedendo alla propria Home Personale. Si potrà quindi procedere a salvare o stampare il file.
Maggiori informazioni
Ingiustamente snobbata durante le ricerche bibliografiche, una tesi di laurea si rivela decisamente utile:
  • perché affronta un singolo argomento in modo sintetico e specifico come altri testi non fanno;
  • perché è un lavoro originale che si basa su una ricerca bibliografica accurata;
  • perché, a differenza di altri materiali che puoi reperire online, una tesi di laurea è stata verificata da un docente universitario e dalla commissione in sede d'esame. La nostra redazione inoltre controlla prima della pubblicazione la completezza dei materiali e, dal 2009, anche l'originalità della tesi attraverso il software antiplagio Compilatio.net.
  • L'utilizzo della consultazione integrale della tesi da parte dell'Utente che ne acquista il diritto è da considerarsi esclusivamente privato.
  • Nel caso in cui l’utente che consulta la tesi volesse citarne alcune parti, dovrà inserire correttamente la fonte, come si cita un qualsiasi altro testo di riferimento bibliografico.
  • L'Utente è l'unico ed esclusivo responsabile del materiale di cui acquista il diritto alla consultazione. Si impegna a non divulgare a mezzo stampa, editoria in genere, televisione, radio, Internet e/o qualsiasi altro mezzo divulgativo esistente o che venisse inventato, il contenuto della tesi che consulta o stralci della medesima. Verrà perseguito legalmente nel caso di riproduzione totale e/o parziale su qualsiasi mezzo e/o su qualsiasi supporto, nel caso di divulgazione nonché nel caso di ricavo economico derivante dallo sfruttamento del diritto acquisito.
L'obiettivo di Tesionline è quello di rendere accessibile a una platea il più possibile vasta il patrimonio di cultura e conoscenza contenuto nelle tesi.
Per raggiungerlo, è fondamentale superare la barriera rappresentata dalla lingua. Ecco perché cerchiamo persone disponibili ad effettuare la traduzione delle tesi pubblicate nel nostro sito.
Per tradurre questa tesi clicca qui »
Scopri come funziona »

DUBBI? Contattaci

Contatta la redazione a
[email protected]

Ci trovi su Skype (redazione_tesi)
dalle 9:00 alle 13:00

Oppure vieni a trovarci su

Parole chiave

algoritmo
matlab
robotica
c++
harris
visione
sistema di visione
stereoscopico
ricerca features
harris corner detector
modulo di visione

Tesi correlate


Non hai trovato quello che cercavi?


Abbiamo più di 45.000 Tesi di Laurea: cerca nel nostro database

Oppure consulta la sezione dedicata ad appunti universitari selezionati e pubblicati dalla nostra redazione

Ottimizza la tua ricerca:

  • individua con precisione le parole chiave specifiche della tua ricerca
  • elimina i termini non significativi (aggettivi, articoli, avverbi...)
  • se non hai risultati amplia la ricerca con termini via via più generici (ad esempio da "anziano oncologico" a "paziente oncologico")
  • utilizza la ricerca avanzata
  • utilizza gli operatori booleani (and, or, "")

Idee per la tesi?

Scopri le migliori tesi scelte da noi sugli argomenti recenti


Come si scrive una tesi di laurea?


A quale cattedra chiedere la tesi? Quale sarà il docente più disponibile? Quale l'argomento più interessante per me? ...e quale quello più interessante per il mondo del lavoro?

Scarica gratuitamente la nostra guida "Come si scrive una tesi di laurea" e iscriviti alla newsletter per ricevere consigli e materiale utile.


La tesi l'ho già scritta,
ora cosa ne faccio?


La tua tesi ti ha aiutato ad ottenere quel sudato titolo di studio, ma può darti molto di più: ti differenzia dai tuoi colleghi universitari, mostra i tuoi interessi ed è un lavoro di ricerca unico, che può essere utile anche ad altri.

Il nostro consiglio è di non sprecare tutto questo lavoro:

È ora di pubblicare la tesi