Docsity
Docsity

Prepare for your exams
Prepare for your exams

Study with the several resources on Docsity


Earn points to download
Earn points to download

Earn points by helping other students or get them with a premium plan


Guidelines and tips
Guidelines and tips

Circuito per la costruzione dell' istogramma di gradienti orientati su FPGA, Thesis of Digital Image Processing

Istogramma di gradienti orientati per il riconoscimento pedoni

Typology: Thesis

2016/2017

Uploaded on 11/15/2017

dino-santoro
dino-santoro 🇮🇹

1 document

1 / 59

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
Università della Calabria
Dipartimento di Ingegneria Informatica, Modellistica,
Elettronica e Sistemistica
Corso di Laurea Triennale in
Ingegneria Elettronica
Tesi di Laurea
Circuito per il calcolo dell’istogramma di gradienti
orientati su FPGA
Relatore Candidato
Prof. Pasquale Corsonello Dino Santoro
172631
Anno Accademico 2016 / 2017
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b

Partial preview of the text

Download Circuito per la costruzione dell' istogramma di gradienti orientati su FPGA and more Thesis Digital Image Processing in PDF only on Docsity!

Università della Calabria

Dipartimento di Ingegneria Informatica, Modellistica,

Elettronica e Sistemistica

Corso di Laurea Triennale in

Ingegneria Elettronica

Tesi di Laurea

“Circuito per il calcolo dell’istogramma di gradienti

orientati su FPGA”

Relatore Candidato

Prof. Pasquale Corsonello Dino Santoro

Anno Accademico 20 16 / 2017

i

Tabella dei contenuti Tabella dei contenuti ..................................................................................................... i

iii Lista delle figure Figura 2.1: Flusso di processo dell’istogramma di gradienti orientati. ....................... 5 Figura 2.2: Filtri per la variazione lungo x. (a) Filtro di Prewitt. (b) Filtro di Sobel. (c) Filtro centrato. (d) Filtro decentrato. ...................................................................... 6 Figura 2.3: A sinistra vediamo l’immagine divisa in celle, al centro notiamo le direzioni dei gradienti e le diverse lunghezze di una singola cella, a destra i valori di modulo e angolo di ogni singolo pixel della cella ....................................................... 7 Figura 2.4: Esempio di costruzione dell’istogramma partendo dai valori di modulo e angolo........................................................................................................................... 8 Figura 2.5: Istogramma di gradienti orientati di una singola cella. ............................. 9 Figura 2.6: Spostamento dei blocchi di normalizzazione con sovrapposizione ........ 10 Figura 2.7: Iperpiano di separazione che massimizza il margine fra le due classi di dati ............................................................................................................................. 11 Figura 3.1: Dispositivo FPGA di settima generazione .............................................. 12 Figura 3.2: A sinistra un’interconnessione SRAM-Based, a destra un FAMOS in cui è possibile notare il floating gate, sotto un MOSFET dove è presente l’antifuse. ..... 14 Figura 3.3: Struttura generale di una scheda FPGA .................................................. 17 Figura 3.4: Struttura di una slice M di ultima generazione ....................................... 18 Figura 3.5: Disposizione delle Slice all'interno delle CLB in una Spartan6 ............. 19 Figura 3.6: Porzione di un FPGA in cui sono presenti una switch matrix, una connection block e una CLB ...................................................................................... 20 Figura 3.7: Posizione delle BRAM (in celestino) e dei DSP (in rosso) posti lungo le verticali parallele che he si estendono per tutto il chip .............................................. 23 Figura 3.8: Struttura di una slice DSP48E2 ............................................................... 24 Figura 3.9: Struttura del Digital Clock Manager (DCM) .......................................... 24 Figura 3.10: Design Flow su FPGA........................................................................... 27 Figura 4.1: Board Nexys 4 DDR ............................................................................... 30 Figura 4.2: Tabella di comparazione tra le famiglie della serie 7 .............................. 32 Figura 4.3: Tabella delle caratteristiche generali dei modelli della Artix- 7 .............. 33 Figura 4.4: Grafica di un progetto in Vivado............................................................. 34 Figura 5.1: Schema generale del circuito................................................................... 35 Figura 5.2: Schema del blocco di calcolo .................................................................. 36 Figura 5.3: Pixel su quale calcolare il gradiente orientato in verde ed i pixel intorno interessati per poterlo calcolare in giallo. .................................................................. 36 Figura 5.4: Struttura iterativa dell'algoritmo CORDIC ............................................. 38 Figura 5.5: Immagine 64x128 in scala di grigi usata nella tesi rappresentante un corridore (Usain Bolt) ................................................................................................ 42

iv

  • Introduzione Lista delle figure iii
  • 1 Elaborazione di immagini
    • 1.1 Riconoscimento di pedoni
    • 1.2 Algoritmi di processamento
  • 2 Istogramma di gradienti orientati
    • 2.1 Preprocessamento
    • 2.2 Calcolo del gradiente.....................................................................................
    • 2.3 Costruzione dell’istogramma
    • 2.4 Normalizzazione dei blocchi
    • 2.5 Classificazione
  • 3 Le FPGA
    • 3.1 Tipologie di FPGA
    • 3.2 Differenze tra FPGA e ASIC
    • 3.3 Impieghi delle FPGA
    • 3.4 Struttura delle FPGA
      • 3.4.1 Configurable Logic Block
      • 3.4.2 Switch Matrix
      • 3.4.3 I/O Blocks
      • 3.4.4 Altri blocchi
    • 3.5 Linguaggi di configurazione
      • 3.5.1 Il linguaggio VHDL
    • 3.6 Flusso di progettazione
  • 4 Strumenti hardware e software usati
    • 4.1 Nexys 4 DDR
    • 4.2 Artix-
    • 4.3 Vivado Design Suite ii
  • 5 Descrizione del circuito
    • 5.1 Introduzione
    • 5.2 Schematic
    • 5.3 Blocco di calcolo
      • 5.3.1 CORDIC
    • 5.4 Blocco di scansione dei pixel
    • 5.5 Blocco di controllo
    • 5.6 Ottimizzazioni principali e precisazioni......................................................
    • 5.7 Velocità, precisione, potenza e risorse utilizzate
    • 5.8 Verifica dei risultati.....................................................................................
  • 6 Conclusione e sviluppi futuri
  • Bibliografia e riferimenti
  • Figura 5.6: Grafico di potenza e temperatura
  • Figura 5.7: Implementazione del circuito sull'FPGA
  • Figura 5.8: Dati principali sulle risorse usate
  • Figura 5.9: Schermata ILA effettuando il test sul dispositivo
  • Figura 5.10: Zoom della schermata dell'ILA

1 Elaborazione di immagini Introduzione Negli ultimi anni l’elaborazione di immagini (Image Processing) è diventata oggetto di molti studi in quanto quasi tutti i dispositivi avanzati dispongono di una o più telecamere, a partire dai pochi pixel delle semplici webcam fino ad arrivare alle alte ed altissime definizioni per le riprese spaziali passando per i droni, le riprese cinematografiche, o le comuni telecamere per videosorveglianza. Questa branca di ricerca si occupa principalmente di comprimere e compattare le immagini tramite segmentazione cosi da ridurne la dimensione, molto importante data l’immensa mole di immagini presenti nei database o nei nostri personal computer, di estrarre caratteristiche come ad esempio riconoscere i bordi di un oggetto o di una persona all’interno di un’immagine. Di recente, data l’automatizzazione dell’industria e l’avanzamento della guida assistita verso una guida del tutto autonoma, ha preso sempre più piede la visione artificiale (Computer Vision) che mira ad approssimare il mondo tridimensionale circostante partendo da una o più immagini bidimensionali ma soprattutto interpreta il contenuto di tale immagine ovvero estrarne le informazioni e prendere una decisione automatica senza alcun’azione umana. 1.1 Riconoscimento di pedoni Un settore in cui l’elaborazione delle immagini è molto impegnata è il riconoscimento pedoni o più in generale il riconoscimento di persone (Human Detection).

Questo settore comprende diversi campi di sviluppo e di applicazione:

1. Conteggio Sistemi di conteggio di persone così da poterne controllare i flussi in una specifica area interessata da un grande evento sportivo, musicale o culturale, come ad esempio concerti, o flussi anomali che evidenziano situazioni critiche o di pericolo. 2. Video sorveglianza Sistemi di sorveglianza come quelli ormai presenti in tutte le città con telecamere posizionate sia nelle piazze a protezione di beni pubblici sia nei cosiddetti “punti grigi” i quali potrebbero essere luogo di atti illeciti come spaccio di droga. Rilevando presenze sospette è possibile intervenire quasi istantaneamente senza aver bisogno di costose ronde notturne. 3. Sicurezza Sistemi di riconoscimento di una specifica persona intrecciando i dati con i database delle forze dell’ordine così da identificare eventuali fuggitivi o sospetti. 4. Risparmio energetico Sistemi di accensione automatica delle luci in presenza di persone distinguendo quest’ultime da oggetti di vario tipo in movimento. Questo metodo può far risparmiare diverse migliaia di euro ad un ente pubblica come un comune sostituendo la classica temporizzazione dei lampioni con una tecnica a rilevamento di persona poiché spesso i lampioni sono accessi senza un effettivo uso in quanto non passa nessuno nelle sue vicinanze se non sporadicamente. 5. Human tracking Sistemi più avanzati per l’identificazione dei gesti e dei movimenti umani cosi da prevedere le intenzioni. 6. Automotive e sicurezza stradale Ogni anno perdono la vita quasi 600 pedoni, e sono quasi 20.000 quelli che restano feriti sulle strade italiane e ciò rende necessario un’assistenza alla guida. Questa tecnologia può portare ad un avanzamento dei sistemi di riconoscimento dei pedoni al fine di rende la guida completamente autonoma una realtà efficace. Grazie al riconoscimento dei pedoni e dei suoi movimenti verso una o l’altra direzione l’autovettura può prendere decisioni autonome sulla propria velocità e direzione.

2 Istogramma di gradienti orientati Introduzione L’algoritmo dell’istogramma di gradienti orientati si suddivide in 5 parti i quali ha ognuno dei compiti precisi e diverse scelte da prendere. Le sezioni dell’algoritmo possono essere viste nella figura 2.1. Figura 2. 1 : Flusso di processo dell’istogramma di gradienti orientati. 2.1 Preprocessamento In questa fase l’immagine catturata dalla telecamera viene segmentata in pezzi (patches) il cui rapporto d’aspetto è di 1:2. Per esempio un’immagine 100x200 o 256x512 può essere successivamente elaborata a differenza di un’immagine 200x300. Questa sezione selezionata deve essere poi ridimensionata in un’immagine che sia 64x128 per poter essere poi processata dal successivo modulo. La scelta di tale grandezza (64x128) e data dalla dimensione delle celle con il quale si lavorerà successivamente. La dimensione della cella sarà di 8x8, qualora si presenta la necessità di cambiare la dimensione sarà possibile, o necessario, cambiare anche le dimensioni del ridimensionamento dell’immagine. In questa fase inoltre può essere presente una conversione da RGB in scala di grigi che rende il sistema decisamente più veloce senza perdere di precisione nel riconoscimento. La conversione da RGB in scala di grigi avviene moltiplicando per una determinata costante ogni valore di rosso, verde e blu così da ottenere una sola matrice con valori da 1 a 255 e non tre matrici. Preprocessamento Calcolo del gradiente dell'istogramma^ Costruzione Normalizzazione Classificazione

2.2 Calcolo del gradiente In questa fase vengono elaborati i valori della figura presenti nella memoria applicando dei filtri specifici così da ottenere il gradiente dell’immagine sia lungo le ascisse che lungo le ordinate. Nell’implementazione hardware la scelta dei filtri è importante dal punto di vista delle risorse fisiche in quanto maschere grandi richiederebbe delle piccole memorie aggiuntive o comunque un accumulatore che però rallenta il processo. I filtri più usati per questo tipo di elaborazione sono mostrati in figura 2.2. I filtri tali da dare i migliori risultati sono cosi costruiti: fx = [-1,0,1]; fy = [1,0,-1] T; e data un’immagine ( I ) ci restituirà il gradiente del pixel scelto tramite la seguente operazione: Gx = fx * I; Gy = fy * I; e in seguito verranno calcolati modulo e angolo in questo modo: Modulo: M(x,y) = (^) √𝐺𝑥^2 + 𝐺𝑦^2 ; Angolo: φ(x,y) = 𝑡𝑎𝑛−^1 ( 𝐺𝑦 𝐺𝑥

Figura 2. 2 : Filtri per la variazione lungo x. (a) Filtro di Prewitt. (b) Filtro di Sobel. (c) Filtro centrato. (d) Filtro decentrato.

Comparando i valori di modulo e di angolo di ogni singolo pixel si va aggiungere il valore del modulo nella casella con il corrispettivo angolo. Qualora l’angolo del pixel si trovi una zona intermedia tra le due classi si provvederà a farne la media pesata del modulo dividendo il valore del modulo a secondo della vicinanza ad una classe rispetto ad un’altra, se l’angolo è a metà fra due classi allora il modulo sarà diviso in due tra le due classi Figura 2. 4 : Esempio di costruzione dell’istogramma partendo dai valori di modulo e angolo Come possiamo vedere nella figura 2.4 ogni valore del modulo andrà a contribuire ad incrementare una determinata classe e ciò ci porterà a capire quali sono le direzioni principali di tale cella. Nella figura 2. 5 è presente l’istogramma completo della cella e ci mostra come l’orientazione principale dei gradienti e quella tra 140° e 180° il che ci mostra la presenza di un bordo con tale inclinazione. Se ci trovassimo di fronte ad un istogramma con i valori quasi tutti costanti allora vorrebbe dire che quella cella è omogenea quindi non costituisce un bordo ma una zona uniforme che porterà poca informazione utile al fine del riconoscimento.

2.4 Normalizzazione dei blocchi Dopo aver costruito l’istogramma di ogni singola cella si procede con la normalizzazione. Questa fase è molto importante in quanto le variazioni di luce possono far aumentare o diminuire di molto il valore di intensità di un pixel e di conseguenza gradienti maggiori che ci amplificano i valori dell’istogramma rispetto alle zone d’ombra non dandoci quindi un effettivo riscontro di alcune parti del corpo. Immaginiamo di avere una persona con la parte superiore illuminata bene mentre la parte inferiore all’ombra otterremmo degli istogrammi per la parte superiore con valori elevati a differenza di quelli della parte inferiore e tale appiattimento dei grafici “scuri” potrebbe risultare una zona omogenea e senza bordi nonostante la presenza delle gambe. Per ovviare a questo problema è necessario normalizzare le intensità luminose delle singole zone. Una normalizzazione dei valori potrebbe essere eseguita su una cella. Per avere una normalizzazione più precisa però è più corretto lavorare su un blocco di quatto celle adiacenti che formano un quadrato 2x2 di celle da 64 pixel. Questo uso dei blocchi garantisce una robustezza tale da risolvere le forti variazioni luminose in zone ridotte dell’immagine che sono quelle più comuni nell’individuazione umana. Inoltre il passo di questi blocchi da normalizzare deve essere di una cella per volta prima lungo x e poi lungo y cosi da migliorare le prestazioni. Lo spostamento dei blocchi può essere osservato nella figura 2.6. La sovrapposizione (overlap) dei blocchi rende “legati” i blocchi tra di loro cosi da minimizzare le variazioni tra blocchi e aumentare l’area normalizzata. Figura 2. 5 : Istogramma di gradienti orientati di una singola cella.

L’ SVM è una valida alterativa, per l’apprendimento dei classificatori polinomiali, alle tecniche di addestramento delle reti neurali artificiali. La tecnica SVM presenta un algoritmo efficiente ed è in grado di rappresentare funzioni non lineari, cosa che con le reti neurali artificiali non è possibile fare. Il classificare SVM genera un iperpiano di separazione tra i campioni delle due classi di dati (pedone e non pedone), vedi figura 2.7, tramite l’apprendimento iniziale. Qualora i dati delle due classi non siano linearmente separabili allora l’algoritmo provvederà ad aumentare le dimensioni dello spazio dei campioni fino al punto in cui saranno linearmente separabili. L’algoritmo SVM quindi riceverà in ingresso l’istogramma e lo comparerà con i dati appresi in precedenza e ci restituirà il riscontro positivo o negativo sulla presenza o meno di un umano nell’immagine ricevuta. Una nuova alternativa all’ SVM del quale si iniziano a vedere le pubblicazioni, applicate al campo del riconoscimento dei pedoni con l’impiego di FPGA è il classificatore AdaBoost (Adaptive Boosting). Quest’ultimo è principalmente usato nel riconoscimento caratteri ma sembra dare buoni risultati in questo campo. Figura 2. 7 : Iperpiano di separazione che massimizza il margine fra le due classi di dati

3 Le FPGA Introduzione I dispositivi FPGA sono dei circuiti integrati programmabili tramite software. FPGA è l’acronimo di Field Programmable Gate Array ovvero array di porte configurabili sul campo. Questo insieme di porte logiche virtuali possono essere configurate direttamente dall’utente nei laboratori per la progettazione del proprio sistema digitale e non dal costruttore del dispositivo. Inizialmente i sistemi digitali programmabili erano degli insiemi di porte elementari, AND e OR, che combinate tra loro riuscivano a creare tutte le funzioni logiche. Questi dispositivi erano detti PLA (Programmable Logic Array) e si svilupparono negli anni ’70. Successivamente si introdussero i circuiti sequenziali così da dar vita alle prime FPGA negli anni ’80. In questi oltre trent’anni lo sviluppo di questi dispositivi è stato esponenziale passando dalle poche migliaia di porte logiche fino al milione in un solo dispositivo. I principali produttori sono la Xilinx e l’Altera che controllano l’80% del mercato. Figura 3. 1 : Dispositivo FPGA di settima generazione

Altre tecnologie sono quelle basate su EEPROM che sono riprogrammabili tramite la cancellazione dei dati precedenti con valori elevati di tensione ma occupano più spazio rispetto alle Flash. Alcune tecnologie sono ormai in disuso perché obsolete in quanto basate sul BJT invece che sulla tecnologia CMOS. Figura 3. 2 : A sinistra un’interconnessione SRAM-Based, a destra un FAMOS in cui è possibile notare il floating gate, sotto un MOSFET dove è presente l’antifuse.

3.2 Differenze tra FPGA e ASIC ASIC e l’acronimo di Application Specific Integrated Circuit, circuito integrato per applicazioni specifiche. Questi dispositivi sono creati appositamente per risolvere uno specifico calcolo. Tali circuiti hanno un approccio full custom il che significa che ogni singolo transistor è progettato in dimensione e posizione rendendo il circuito ottimizzato al massimo. Inoltre è pianificata nei minimi dettagli anche la posizione dei singoli transistor al fine di rendere le zone più lente meglio interconnesse e migliorando le velocità. Queste ottimizzazioni si traducono in un dispendio di tempo elevato ed un elevato costo di progettazione senza considerare il fatto che se c’è un errore tutta la scheda progettata e pagata va buttata. Approcci semicustom come quelli cell-based o array-based sono sempre più diffusi per risolvere tali problemi. Negli approcci cell-based si usa sfruttare delle standard cell che svolgono funzioni semplici predeterminate come ad esempio un flip-flop o un sommatore. Negli approcci array-based, delle quali fa parte l’FPGA, invece si sfruttano dei componenti già presenti all’interno del circuito integrato e tramite programmazione vengono interconnessi. I vantaggi nell’uso delle FPGA sono nell’essere adatte ad un gran numero di applicazioni, nella programmazione diretta da parte dell’utente finale il quale riduce i tempi di progettazione, nel poter correggere gli errori tramite una semplice riprogrammazione, nell’essere user-friendly e a basso costo. I vantaggi nell’uso dell’ASIC sono nel riuscire a raggiungere prestazione in termini di velocità e consumo non raggiungibili con soluzioni generiche (general purpose). Le FPGA sono spesso usate per la prototipizzazione o per applicazioni su piccola scala a differenza delle ASIC che sono usate dove le prestazioni devono essere massime ovvero su larga scala, dove i costi di fabbricazione possono essere recuperati dall’elevato numero di prodotti realizzati, come l’elettronica di consumo, schede madri, ecc.