Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Introduzione
Il presente lavoro di tesi rappresenta la conclusione dell’esperienza di stage
svolto presso il laboratorio di Automatica e Telecomunicazioni della Facoltà
di Ingegneria dell’Automazione presso l’Università di Lecce.
Il progetto sviluppato durante il tirocinio verte sull’elaborazione di un sistema
di visione artificiale, da applicare su un robot mobile, che nella prima fase
effettua il riconoscimento di oggetti aventi una struttura rettangolare, nel caso
particolare di scaffali, e successivamente determina la posizione del robot
rispetto allo scaffale individuato nell’ambiente circostante.
In questa tesi sarà analizzata la prima fase del progetto ossia l’elaborazione
delle immagini prelevate tramite una webcam per l’individuazione dei
segmenti rettilinei presenti nell’immagine.
Questa procedura rappresenta il passo primario per l’intero progetto poiché
consente di individuare i contorni dello scaffale certamente rettilinei.
Lo sviluppo di un sistema di visione artificiale di questo tipo si rivela
estremamente utile per le applicazione in ambienti industriali o in magazzini in
cui la movimentazione degli oggetti è affidata a robot mobili. In questo caso
infatti, è necessario che il robot individui la presenza degli scaffali e stimi la
sua posizione rispetto ad essi per garantire il suo corretto spostamento in tale
ambiente strutturato.
Il progetto è stato sviluppato in ambiente IConnect (della MICRO-EPSILON
Software Division), un software che consente una programmazione di tipo
grafico mediante l’utilizzo di blocchi preprogrammati chiamati moduli.
In questa tesi si descrive il problema affrontato e le tecniche utilizzate per la
sua risoluzione.
In particolare, nel primo capitolo si esaminano le tecniche per acquisire le
immagini e digitalizzarle, in modo da prepararle alla successiva elaborazione.
Il secondo capitolo contiene le basi teoriche su cui si fondano le tecniche
implementate in fase progettuale. Queste ultime sono descritte nel terzo
capitolo, in cui sono esaminate tutte le operazioni effettuate, dall’acquisizione
delle immagini alla ricostruzione delle rette tramite la trasformata di Hough.
Infine, nel quarto capitolo si raccolgono i risultati ottenuti da numerose prove
sperimentali. Sono stati riportati anche i risultati errati o poco soddisfacenti
ottenuti nel corso del progetto in modo da confrontare le varie tecniche
utilizzate per la risoluzione dei problemi e motivare le scelte implementative
fatte.
Capitolo 1
Fondamenti di elaborazione delle
immagini
Tra i 5 sensi di cui disponiamo, la vista è senza dubbio quello dotato di
maggiori potenzialità ed è quello che consente di interagire maggiormente con
il mondo che ci circonda. La visione umana infatti, è uno dei meccanismi di
percezione più complessi ed il nostro cervello è in grado di eseguire
elaborazioni così complesse che la potenza delle macchine attuali non è in
grado di eguagliare come, ad esempio, distinguere, a colpo d’occhio il volto di
una persona che passeggia fra la folla, elaborare forme diverse , riconoscere
gli oggetti, leggere ecc.
L’elaborazione delle immagini e’ quel campo di ricerca dell’informatica
avanzata che tenta di emulare al calcolatore i comportamenti percettivi tipici
dell’uomo. Ha avuto un notevole sviluppo a partire dalla metà degli anni ‘60
anche se, per molti anni, a causa della enorme quantità di calcoli che gli
algoritmi di elaborazione delle immagini richiedono, è rimasta un’area di
ricerca riservata a pochi.
Il notevole sviluppo dei processi di calcolo ha tuttavia permesso, negli ultimi
anni, una grande diffusione di questa disciplina.
La Visione Artificiale, infatti, ha compiuto negli ultimi vent’anni passi da
gigante e ha portato alla realizzazione di algoritmi, tecniche, programmi e
sistemi capaci di vedere ed interpretare la scena, almeno in delimitati settori
ben strutturati.
La diffusione di tale competenze ha permesso di realizzare tanti sistemi che
oggi tutti conosciamo: ricordiamo, ad esempio, i sistemi in grado di verificare
la presenza di masse tumorali in immagini mammografiche, di tracciare il
percorso di un aereo in un video, di controllare il movimento di un robot che
deve localizzare e manipolare pezzi meccanici, di verificare la presenze di code
a semafori controllati da telecamere dell’occhio umano.
Solitamente si divide l’elaborazione di un’immagine, o di una
sequenza di immagini, in tre fasi successive:
• Analisi di basso livello: in ingresso si hanno le immagini originali
provenienti dai sensori. Quest’analisi è legata al processo di
riduzione dei disturbi e distorsioni del processo di acquisizione e
trasmissione. È necessaria per preparare le immagini per
l’elaborazione successiva e in uscita si ottengono delle immagini.
•Analisi di livello intermedio: la descrizione per pixel della scena è
troppo complessa per essere utile in applicazioni pratiche. Con
un’elaborazione di questo tipo allora, si ottiene in uscita un insieme
di strutture, ognuna delle quali descrive un particolare attributo
(feature) della scena.
• Analisi di alto livello: viene definita di alto livello in analogia alla
visione umana ed è strettamente legata all’intelligenza artificiale. In
ingresso, il sistema di elaborazione ha dei descrittori e un modello
della scena da analizzare, mentre in uscita fornisce una
classificazione, un’interpretazione o un nuovo modello per la
comprensione dell’immagine.
1.1 Il sistema ottico di acquisizione dell’immagine La primissima fase dell’elaborazione di un’immagine è l’acquisizione della
stessa mediante gli strumenti adeguati. Un apparato di acquisizione di
immagini (imaging) funziona raccogliendo la luce riflessa dagli oggetti
della scena e creando una immagine bidimensionale. Il meccanismo è quello di
una camera oscura: la luce riflessa dall’oggetto passa per il foro presente sulla
scatola e viene visualizzata invertita su un piano (dove può essere posizionata
una pellicola o un sensore CCD).
Poiché per i sistemi digitali un semplice foro non è in grado di fornire
immagini sufficientemente contrastate e nitide si utilizzano dei sistemi ottici
formati da una o più lenti .
Si ipotizza inoltre, per semplificare i calcoli nei software, di utilizzare lenti tali
che i raggi paralleli all’asse ottico incidenti sulla lente vengono rifratti in modo
da passare per un punto dell’asse ottico chiamato fuoco lasciando inalterati
quelli che passano per il centro C della lente. Tra le proprietà di un sistema
ottico, quelle più importanti sono:
• la distanza focale che è la distanza fra la lente e il punto in cui
convergono i fasci dei raggi luminosi. Da essa dipende l’ingrandimento
delle immagini e la distanza degli oggetti da riprendere dalla
telecamera;
• la profondità di campo che rappresenta l’intervallo compreso fra la
distanza minima e la distanza massima all’interno del quale l’immagine
è a fuoco;
• il rapporto focale: è il rapporto fra la distanza focale e il diametro della
lente. Da esso dipendono la luminosità e la risoluzione dell’immagine.
1.2 L’acquisizione delle immagini
Se l’acquisizione avviene in via analogica il segnale acquisito dalla telecamera
è tipicamente un segnale continuo che descrive l'intensità del segnale luminoso.
Il segnale video è corredato, per ogni punto dell’immagine, di diverse
informazioni quali il livello di luminosità dell'immagine in quel punto e il
colore del punto se la telecamera è a colori. Il segnale, di tipo analogico, è
campionato ad intervalli regolari (generalmente ogni 25-30 µsec) da un circuito
elettronico apposito, detto circuito di conversione analogico-digitale per poi
essere successivamente quantizzato e codificato. Il segnale viene infatti
suddiviso in livelli e ogni livello è equivalente al valore raggiunto
dall’ampiezza del segnale analogico in quel momento. Ad ogni livello si
assegna poi un valore che varia a seconda della codifica effettuata. Se
l'ampiezza è massima significa che il punto è bianco e, con una codifica a 8 bit,
il corrispondente valore digitale sarà 255. Quando il segnale analogico ha
ampiezza minima il corrispondente valore digitale sarà zero. Via via che il
primo cresce anche il secondo incrementa il suo valore. Successivamente sarà
analizzato il punto adiacente e così via per l'intera immagine. In questo modo
ad ogni punto dell'immagine è associato un determinato valore numerico che
ne rappresenta il livello di luminosità (detto anche livello di grigio).
Nelle telecamere digitali il principale vantaggio è la possibilità di trasferire
dalla telecamera alla scheda di acquisizione il segnale video in forma digitale e
non analogica. La maggior parte delle telecamere di questo tipo utilizzano
come elemento fotosensibile, che trasforma la radiazione elettromagnetica
incidente in segnale elettrico, un sensore detto CCD (Charge Coupled Device),
anche se trovano sempre maggior diffusione i sensori CMOS (Complementary
Metal Oxide Semiconductor), soprattutto nelle applicazioni che richiedono
maggior sensibilità, velocità e dinamica, e minori consumi energetici.
Nell’ambito del mio lavoro di tesi è stata utilizzata una webcam dotata proprio
di questo tipo di sensore. Il principio di funzionamento del sensore CMOS è
analogo al funzionamento del CCD.
Il CCD è un circuito integrato che, solitamente, è ricoperto con una pellicola
trasparente che spesso svolge anche la funzione di filtro verso la radiazione
elettromagnetica. Il CCD è strutturato come una matrice regolare di piccoli
elementi organizzati in righe, detti pixel.
Il pixel è un elemento fotosensibile nel quale il livello di carica elettrica
accumulata è proporzionale all’energia luminosa ricevuta. La carica
accumulata da ogni pixel per un certo intervallo di tempo definito viene
scaricata per righe tramite un apposito circuito elettronico ad intervalli definiti
con un apposito segnale di sincronismo. Il segnale di ogni riga può essere
convertito in un valore digitale. I valori così ottenuti vengono ricombinati in
una matrice.
Nel caso del sensore CMOS viene convertito il segnale proveniente da ogni
pixel indipendentemente tramite un circuito direttamente integrato con il
sensore riducendo, in questo modo, dimensioni, consumi e costi e aumentando
velocità e dinamica.
Sia in un caso che nell’altro, al termine della fase di acquisizione per ogni
punto dell’immagine, si ha a disposizione la sua luminosità. Quindi
un'immagine digitale pronta per l’elaborazione è generata mediante la
conversione delle informazioni contenute nell'immagine originale acquisita da
un sensore in un segnale elettronico digitale e dalla successiva sua
memorizzazione sotto forma di dati binari generalmente codificati a 8 bit.
1.2.1 Immagini a colori
Secondo un procedimento analogo viene analizzato il segnale del colore
suddiviso nei tre colori primari (Rosso, Verde e Blu). Ricordiamo innanzitutto
che il colore percepito dipende dalla natura della luce riflessa dall’oggetto
sottoposto ad illuminazione. Una superficie colorata, infatti, se illuminata,
riflette la luce ad una lunghezza d’onda appartenente all’intervallo tipico del
suo colore, mentre assorbe l’energia relativa a tutte le altre lunghezze d’onda.
Tutti i colori, per la struttura stessa dell’occhio umano, sono visti come una
combinazione variabile dei colori primari, il rosso, il verde e il blu aventi
lunghezze d’onda rispettivamente di 700 nm, 546,1 nm, 435,8 nm.
Nel caso delle immagini a colori, allora, l’immagine attraverserà tre sensori
diversi, ognuno dei quali ha una risposta in frequenza che copre una sola delle
tre componenti primarie. In uscita dai sensori, si producono quindi tre
immagini differenti, di uguali dimensioni, e tre matrici diverse, una per il rosso,
una per il verde e una per il blu, aventi valori di grigio differenti in
corrispondenza dei pixel che si trovano nella stessa posizione.
In questo modo, il livello di grigio di ogni matrice determina la percentuale di
rosso, verde o blu nell’immagine, alla posizione del pixel in questione.
1.3 Rappresentazione dell’immagine digitale
Un’immagine digitale è rappresentabile quindi mediante una matrice di
pixels. Ogni pixel costituisce l’elemento più piccolo dell’immagine digitale e
porta con sé l’informazione circa la sua posizione nello spazio individuata dai
valori (x, y) rispetto ad una coppia di assi cartesiani ed il valore della sua
intensità luminosa. Indicando con k il numero di bit utilizzati per la codifica
dell’informazione, i valori di luminosità, chiamati anche livelli di grigio, sono
compresi nel campo [0 2k-1].
Con la codifica a 1 byte i livelli di grigio vanno da 0 a 255 dove con 0 si indica
il nero mentre con 255 si indica il bianco.
L’immagine digitale è quindi una matrice Y(i, j) di valori discreti di livelli di
grigio ed è costituita da M*N pixel ciascuno dei quali ha un valore
appartenente all’intervallo [0 2k-1].
La codifica a 8 bit è quella usata più di frequente perché con 8 bit si ha la
possibilità si rappresentare un numero di livelli di grigio tale da consentire una
discriminazione dei grigi accettabile nella maggior parte delle applicazioni in
quanto abbastanza prossima a quella dell’occhio umano.
1.4 IConnect (versione 5.1) A questo punto le immagini sono pronte per essere elaborate.
Lo strumento software utilizzato per l’implementazione del sistema realizzato è
l’ambiente di sviluppo IConnect (della MICRO-EPSILON Software Division).
IConnect è un software orientato all'acquisizione e al trattamento di segnali
analogici e digitali. E’ molto simile ad altri ambienti di programmazione e
sviluppo che si basano su linguaggi più noti, quali il C++ o il VisualBasic. Ciò
che contraddistingue e caratterizza , rispetto agli ambienti di sviluppo classici ,
questo software è la tecnica di programmazione. IConnect ricorre ad un
linguaggio di programmazione di tipo grafico che consente la creazione di
programmi in forma di diagrammi a blocchi (mediante la composizione di
blocchi funzionali chiamati Moduli). A questo tipo di blocchi che
implementano molte funzioni si affiancano anche altri blocchi chiamati
“Interpret” che permettono una più elevata libertà per definire algoritmi più
sofisticati che possano espletare il lavoro desiderato. Il linguaggio previsto per
utilizzare i blocchi Interpret è basato sulla sintassi dell’ANSI C.
L’ambiente di lavoro prevede una finestra principale nella quale vengono
inseriti i moduli presenti nella finestra Module Library ; i moduli in
quest’ultima sono divisi per categoria di appartenenza. Ogni modulo è
caratterizzato da una serie di proprietà che possono essere fissate. Lo schema a
blocchi che viene creato costituisce l’equivalente del codice sorgente nei
linguaggi di programmazione testuali. Vi sono, tra l’altro, una serie di moduli
con i quali è possibile creare un’interfaccia grafica interattiva per l’utente.
Un ruolo importante nel presente progetto rivestono i componenti software di
basati sulla libreria Image Processing. Queste componenti software sono in
grado di effettuare delle operazioni puntuali e local sulle immagini come la
segmentazione o l’estrazione dei bordi di un’immagine, in base alla scelta dei
parametri da parte dell’utente. La libreria di Image Processing contiene moduli
IConnect che offrono le seguenti caratteristiche:
tecnologia di campionamento dei pixel parametrica;
scansione radiale e Delta Sampling;
calibrazione a priori dei colori;
una serie di metodi per il bilanciamento della luminosità;
Color Blob Analysis;
trasformazione dello spazio colore in alta precisione.
Infine possiamo dire che i file realizzati utilizzando IConnect sono facilmente
riconoscibili dall’ estensione che essi hanno che è : “.tc2”.
Capitolo 2
Elementi di teoria
In questo capitolo si analizzano i fondamenti teorici delle tecniche
implementate in fase progettuale.
Saranno analizzati quindi i metodi più usati per la segmentazione delle
immagini e per l’estrazione dei bordi, considerando anche dei metodi che poi
non sono stati implementati, ma che costituiscono l’approccio classico per la
risoluzione dei problemi nell’elaborazione delle immagini.
Una particolare attenzione è data alla trasformata di Hough, tecnica f
fondamentale per lo sviluppo dell’intero progetto.
2.1 Immagini affette da rumore
Le immagini sono spesso degradate da variazioni casuali dei valori di intensità
dei pixel, meglio note con il termine di rumore.
Il rumore è introdotto dal processo di digitalizzazione dell’immagine, durante
la sua elaborazione e trasmissione. I rumori più diffusi sono il rumore salt and
pepper, il rumore impulsivo e il rumore gaussiano.
Il primo è caratterizzato da occorrenze casuali e superflue di valori di intensità
bianchi e neri e si genera durante la trasmissione delle immagini.
Il rumore impulsivo invece è riconoscibile dalla presenza di pixel aventi valori
di grigio molto alti, vicinissimi al bianco.
Il rumore gaussiano presenta una variazione dell’intensità dei valori dei pixel
modellabile secondo una distribuzione normale o gaussiana.
Sia x la variabile casuale che descrive il rumore si ha:
p(x) = 2
2
2
)(
2
1σ
µ
σ
−−
x
e
Questo tipo di rappresentazione costituisce un ottimo modello per molti tipi di
rumore dei sensori, come quello causato dall’elettronica presente nella camera.
In questo lavoro di tesi, la prima operazione, immediatamente successiva
all’acquisizione dell’immagine è quella del filtraggio della stessa tramite un
filtro di “smoothing” lineare, più propriamente un filtro gaussiano.
Nel prossimo paragrafo saranno esposte le tecniche di filtraggio delle
immagini proprie dei filtri lineari con una particolare attenzione al filtro
gaussiano.
2.4 I filtri lineari
2.4.1 L’operatore di convoluzione
I filtri lineari per l’attenuazione del rumore sono realizzati mediante l’uso delle
maschere di convoluzione.
Le maschere di convoluzione sono degli operatori locali che realizzano la
media pesata del valore dei pixel compresi nell’intorno del pixel a cui sono
applicate. L’area dei pixel di vicinanza interessati dall’operatore è variabile,
normalmente si sceglie una maschera di forma quadrata rappresentata in forma
matriciale con dimensioni variabili, per esempio 3x3, 5x5 ecc. e il pixel in
elaborazione che riceve il risultato della convoluzione si trova posizionato al
centro della finestra. Un esempio di maschera di convoluzione di dimensione
3x3 è mostrato in figura 2.4.1:
Figura 2.4.1 maschera di convoluzione 3x3
Poiché stiamo parlando di filtri lineari, la maschera di convoluzione non è altro
che la risposta impulsiva del sistema di filtraggio e l’immagine in uscita è
proprio il prodotto di convoluzione tra l’immagine d’ingresso e la risposta
impulsiva del sistema.
Per ogni pixel di coordinate (i, j) nell’immagine il risultato del filtraggio si
calcola traslando la maschera di convoluzione sul pixel (i, j) nell’immagine e
successivamente effettuando la media pesata dei pixel compresi nell’intorno di
(i, j) dove i singoli pesi sono i coefficienti che si trovano nelle posizioni
corrispondenti all’interno della maschera di convoluzione
L’operatore di convoluzione quindi opera come un processo lineare in quanto
esegue la somma di elementi, i livelli di grigio dei pixel in corrispondenza della
maschera, moltiplicati da valori costanti.
Se i pesi del filtro non cambiano per l’intera immagine l’operatore di
convoluzione si dice spazialmente invariante.
2.4.2 Il filtro gaussiano
Il filtro gaussiano è un filtro di smoothing lineare realizzabile mediante una
maschera di convoluzione i cui coefficienti sono definiti in accordo alla
funzione gaussiana.
La funzione di trasferimento g(i, j) di tali filtri è modellizzata dalla funzione
gaussiana discreta con media nulla, rappresentata dalla seguente espressione
analitica :
222
2),( σ
ji
ejig
+−
=
Il parametro σ definisce l’area di influenza del filtro gaussiano. In
corrispondenza di valori di σ piccoli si ha uno smoothing lieve, ma le
caratteristiche proprie dell’immagine restano intatte.
In corrispondenza di un parametro σ più grande, si ottiene un filtro più ampio
con una maggiore capacità di smoothing. In questo caso però è possibile
perdere o attenuare anche una parte del contenuto informativo dell’immagine.
È necessario quindi stabilire un compromesso per avere una buona
attenuazione del rumore contemporaneamente alla conservazione delle
caratteristiche dell’immagine.
Per la proprietà di simmetria circolare del filtro gaussiano, l’operazione di
smoothing è eseguita in modo identico in tutte le direzioni ed inoltre, poiché la
funzione gaussiana ha un singolo lobo, il peso dato ai pixel compresi
nell’intorno dei pixel a cui si sta applicando il filtro, decresce
monotonicamente all’aumentare della distanza dal pixel centrale.
Queste proprietà del filtro gaussiano garantiscono che non ci sia alcuna
distorsione nell’immagine a seguito dell’operazione di filtraggio ed in
particolare che se ne preservino le caratteristiche importanti , come i bordi e le
loro orientazione
2.5 Segmentazione delle immagini
Generalmente in un’immagine sono presenti diversi oggetti che compongono la
scena e può essere utile suddividere l’immagine in regioni differenti, ognuna
delle quali contenga solo i pixel che corrispondono ad un oggetto o ad un
insieme di oggetti aventi delle caratteristiche comuni. Questo processo di
suddivisione delle immagini in regioni tra loro omogenee si chiama
segmentazione. I pixel sono raggruppati in regioni in base ad un criterio di
omogeneità che può essere di diverso tipo. I criteri più diffusi sono:
• il raggruppamento per valori di similarità di attributi, come il
colore, la tessitura;
• il raggruppamento per valori di prossimità spaziale come la distanza euclidea ecc.
Si utilizzano questi criteri per la segmentazione delle immagini perché regioni
omogenee derivano dalla proiezione di punti di un oggetto nell’immagine,
rappresentati da pixel che sono spazialmente vicini con valori simili di livelli di
grigio
L’algoritmo di segmentazione non genera una classificazione delle regioni ma
si limita a fornire esclusivamente una partizione dell’immagine in regioni
omogenee.
La segmentazione di un’immagine è strettamente legata alla sua applicazione.
Essa non si basa su una precisa teoria fisico-matematica. E’ quindi probabile
che un metodo di segmentazione valido per un’immagine non si riveli
altrettanto efficiente per immagini di natura molto differente.
Per questo motivo l’implementazione del processo di segmentazione in via
automatica con la certezza di risultati soddisfacenti in ogni situazione è un
obiettivo abbastanza arduo da raggiungere. Tuttavia sono stati messi a punto
degli algoritmi, molti dei quali basati su un approccio euristico, che utilizzano
metodi specifici per le varie applicazioni.
2.5.2 Algoritmi di segmentazione
Gli algoritmi di segmentazione si raggruppano in
• algoritmi basati sulla conoscenza globale o parziale dell’immagine,
rappresentata dall’analisi dell’istogramma di alcune caratteristiche
dell’immagine
• algoritmi basati sulle regioni
• algoritmi basati sui contorni
Le ultime due modalità di algoritmi si classificano a loro volta sulla base di
features quali il colore, la tessitura, la luminanza, utilizzate per l’estrazione dei
bordi o delle regioni.
Il più delle volte, come accade nel progetto, argomento di questa tesi, un
risultato accettabile si ottiene mediante la combinazione dei diversi algoritmi e
l’integrazione della conoscenza a priori della scena, opportunamente
modellizzata.
2.5.3 Definizioni di regione e bordo
Prima di tutto vediamo come si definiscono le regioni e il bordo.
La regione è l’insieme dei pixel in cui è possibile definire un percorso
considerando qualsiasi coppia di pixel stessi, dove con percorso tra due pixel A
e B si intende la sequenza dei pixel S1, S2… Sn dove S1=A, Sn = B ed il pixel
Si+ 1 è vicino al pixel Si con i = 1…n-1.
Nella definizione di bordo consideriamo sia l’elemento di bordo che il tratto di
bordo.
L’elemento di bordo, è un punto dell’immagine localizzato dalle coordinate (i,
j) dove si verifica una discontinuità del valore di intensità mentre il tratto di
bordo è costituito da un insieme di punti del bordo allineati. È caratterizzato
dalle coordinate (i, j, θ) che lo localizzano nella posizione (i, j) all’interno del
piano immagine. θ è il suo angolo di orientazione rispetto ad un asse di
riferimento, ad esempio l’asse orizzontale.
Normalmente si trova ai confini tra regioni omogenee di una immagine,
costituisce una proprietà locale di un pixel con i suoi vicini ed è caratterizzato
come un vettore definito dal modulo e dalla direzione.
2.5.4 La segmentazione region-based
Il metodo di segmentazione più semplice e diffuso è quello della
segmentazione in regioni per soglia.
In questo modo è possibile convertire un’immagine con molteplici livelli di
grigio in un’immagine binaria, un’immagine ossia, in cui i valori dei pixel
possano assumere solo due valori, secondo una legge di questo tipo:
0 se x < S
1 se x > S
dove S è la soglia dei livelli di grigio ed x è il valore di grigio di ogni pixel.
Una possibile applicazione per la segmentazione di questo tipo può essere la
separazione degli oggetti dallo sfondo.
Gli oggetti della scena solitamente sono proiettati in zone omogenee
nell’immagine e sono caratterizzati da una riflettività quasi costante.
E’ possibile che si vogliano esaltare alcuni oggetti in un’immagine. Se è noto
l’intervallo dei valori di grigio associato a questi oggetti nell’immagine è
possibile effettuare una segmentazione secondo la legge seguente:
1 se S1< x < S2
0 altrimenti
Lo stesso metodo si può usare, in maniera più generale, se sono noti diversi
intervalli, disgiunti tra loro, di livelli di grigio associati ai diversi oggetti.
Con questo metodo è quindi possibile effettuare un’estrazione dei bordi
dell’oggetto, qualora si ipotizzi che, mentre gli oggetti sono scuri rispetto ad
uno sfondo chiaro, un intervallo di livelli di grigio possa comprendere solo i
livelli che appartengono agli elementi dell’immagine che si trovano tra lo
sfondo e confini degli oggetti, ossia ai bordi.
Con le tecniche analizzate si effettua quindi una partizione dell’immagine ad n
livelli, se ad ogni livello di grigio si associa un intervallo di valori.
Con la segmentazione a soglia le soglie sono generalmente calcolate
interattivamente dall’utente, in accordo con l’immagine esaminata e con gli
elementi dell’immagine che si vogliono mettere in risalto.
L’individuazione della soglia che renda efficace il processo di binarizzazione
della matrice non è semplice. Nelle immagini seguenti si può notare l’effetto di
un’errata scelta del valore di soglia con una segmentazione dell’immagine
effettuata secondo la suddetta legge
0 se x < S
255 se x > S
Nel primo caso (figura 2) si è scelto un valore troppo basso mentre nel
secondo caso (figura 3) la soglia è troppo alta, con una conseguente scarsa
individuazione degli oggetti dell’immagine a cui corrispondono livelli di grigio
bassi, propri dei colori scuri.
Figura 1. Immagine campione Figura 2. Soglia troppo bassa
Figura 3. Soglia troppo alta
Tuttavia sono state messe a punto delle tecniche di segmentazione mediante
soglia in cui il valore della soglia è stabilito con maggior facilità.
2.5.5 Scelta della soglia basata sull’istogramma
La soglia utile per separare gli oggetti di un’immagine dallo sfondo è valutabile
con l’analisi dell’istogramma dei livelli di grigio.
In alcuni casi l’istogramma dei valori di grigio presenta un andamento
nettamente bimodale.
Si rilevano cioè due picchi che corrispondono rispettivamente ad un oggetto
della scena e allo sfondo.
Il valore della soglia viene fissato al punto di minimo locale tra i due picchi.
L’individuazione del primo picco dell’istogramma è molto semplice perché
corrisponde al punto di massimo assoluto dell’istogramma mentre quella del
secondo picco può essere soggetta ad ambiguità.
Si ovvia a questo problema moltiplicando i valori dell’istogramma per il
quadrato della distanza dal primo picco e scegliendo il valore massimo tra
questi prodotti
Max2 = max[ (k-j)2 h(k) ] 0<=k<=255
favorendo in questo modo i picchi che non sono vicini al massimo.
2.5.6 Metodo basato sull’istogramma modificato
L’istogramma tuttavia, nella maggior parte dei casi, non presenta un
andamento bimodale. E’ quindi quasi impossibile individuare una soglia in
grado di partizionare l’immagine in 2 regioni ben definite.
Poiché questo problema si presenta quando le distribuzioni dei livelli di grigio
dell’oggetto e dello sfondo si sovrappongono, si modifica l’istogramma non
considerando i pixel ad alto gradiente cioè i pixel appartenenti ai bordi.
In corrispondenza dei punti del bordo infatti, la funzione intensità
dell’immagine presenta le discontinuità più forti e, in questi punti il gradiente,
assume i valori più alti.
In questo modo l’istogramma dell’immagine è calcolato solo sul contributo dei
pixel che appartengono nettamente allo sfondo o all’oggetto mentre non si
considerano i pixel del bordo che potrebbero facilmente causare errori ed
ambiguità.
Oppure si calcola l’istogramma considerando solo i pixel di bordo, ad alto
gradiente. In questo caso nell’istogramma si ha un solo picco con il
corrispondente livello di grigio che è scelto come soglia di segmentazione
2.5 Estrazione dei bordi Un’altra tecnica efficace di segmentazione delle immagini è quella
dell’estrazione dei bordi degli oggetti che si trovano nella scena.
Come detto prima, i bordi sono i punti in cui la funzione intensità
dell’immagine ha brusche discontinuità che possono essere di tipo diverso.
Le più diffuse sono:
• le discontinuità a gradino, in corrispondenza delle quali i valori di intensità
variano bruscamente da un valore associato ai pixel di una regione a un
valore diverso associato ai pixel di una regione adiacente differente.
• le discontinuità a linea, in cui l’intensità varia bruscamente da un valore ad
un altro per pochi pixel adiacenti, ma poi torna ad assestarsi al valore
originario dopo breve tempo
Tuttavia queste discontinuità sono “ideali” nel senso che, nella realtà, a causa
delle componenti a bassa frequenza indesiderate e dello smoothing non si
hanno delle variazioni brusche del valore della funzione ma il cambio avviene
in maniera graduale dando luogo a discontinuità a rampa nel caso delle
discontinuità a gradino e alle discontinuità a “roof” per le discontinuità a linea.
Nelle immagini reali, poi, si possono verificare discontinuità generate dalla
combinazione di discontinuità a gradino e a linea.
Un bordo è quindi una significativa variazione locale dell’intensità
dell’immagine. Gli operatori per l’estrazione dei bordi esaltano le
discontinuità dei valori di intensità. L’operatore matematico che meglio
evidenzia le discontinuità di una funzione è l’operatore derivata prima.
Poiché però si sta lavorando con immagini bidimensionali si deve considerare
il gradiente della funzione e valutarne il suo picco che corrisponde proprio al
punto in cui si riscontra la massima discontinuità dell’immagine.
Si applica quindi l’operatore gradiente ad f(x, y) nella generica direzione r con
angolo θ rispetto all’asse x.
Per determinare poi il valore massimo del gradiente r
f
∂
∂, orientato nella
direzione di massima variazione della funzione f si deriva ulteriormente la
funzione gradiente rispetto a θ e si calcola il punto in cui questa derivata
assume il valore 0, il punto cioè in cui la funzione gradiente assume il valore
massimo. Il risultato di quest’operazione è proprio il valore massimo della
derivata dir
f
∂
∂ nella direzione di massima variazione e si indica con il nome di
vettore gradiente della funzione f(x, y) .
Tale vettore
ha modulo
e direzione
dove si considera la funzione arcotangente a quattro quadranti.
Il gradiente è quindi un vettore orientato nella direzione di massima
variazione della funzione ed il suo modulo è proprio una misura della massima
variazione di f nella direzione di df.
Dovendo lavorare su immagini digitalizzate sono state introdotte
approssimazioni sulle derivate parziali rispetto agli assi coordinati , sostituite
dalle differenze finite lungo tali assi. Inoltre, l'operazione di differenziazione
viene eseguita tramite la convoluzione , analizzata precedentemente, con una
maschera rettangolare n x m.
Sono stati sviluppati diversi operatori del prim’ordine per l’estrazione dei bordi
Questi operatori si basano tutti sulla tecnica del gradiente ma differiscono tra
loro per le tecniche di approssimazione delle derivate
Ci sono operatori diversi che si basano sul calcolo del gradiente e si
differenziano tra loro proprio per le approssimazioni applicate al gradiente
stesso Si ottengono quindi maschere di convoluzione caratterizzate da
coefficienti differenti a seconda del tipo di filtro. I filtri del prim’ordine più
usati sono più usati sono quelli di Roberts e di Sobel.
2.6.1 Metodi del secondo ordine
Per accentuare ulteriormente i bordi, poi, si utilizzano gli operatori del
second’ordine. I punti del bordo corrispondono ai punti in cui non solo si ha il
massimo valore del gradiente ma contemporaneamente si ha un
attraversamento dello zero della derivata seconda.
Si utilizza allora l’operatore laplaciano che rappresenta l’equivalente
bidimensionale della derivata seconda. Applicandolo alla funzione intensità
dell’immagine si possono localizzare i punti del bordo, in corrispondenza dei
quali si verifica l’attraversamento dello zero cioè il fianco di salita o di discesa
della derivata seconda passa per lo zero. Anche quest’operatore si implementa
con una maschera di convoluzione per le applicazioni nell’elaborazione delle
immagini. Tuttavia è più sensibile al rumore e può generare doppi bordi oltre a
non fornire informazioni sulla direzione del bordo. Non viene quindi utilizzato,
se non applicandolo ad immagini filtrate con un filtro gaussiano.
2.7 La trasformata di Hough
Dopo aver esaminato i metodi usati per estrarre le caratteristiche desiderate di
un’immagine, quali particolari regioni o i bordi degli oggetti, in questo
paragrafo si espone la tecnica che utilizza i risultati delle elaborazioni
precedenti per riconoscere le linee rette presenti nell’immagine.
La trasformata di Hough infatti, permette di riconoscere la presenza di figure
geometriche note, quali rette, cerchi, in un’immagine.
2.7.1 Cos’è la trasformata di Hough
Questa tecnica, ideata da Hough nel 1962 permette il riconoscimento di
configurazioni globali presenti in una immagine quali segmenti, curve, forme
prestabilite sfruttando la loro proiezione puntiforme in uno spazio dei
parametri, o caratteristiche, opportunamente definito. Tale tecnica ha
dimostrato di essere molto robusta in quanto consente di ricercare le curve
parametrizzate anche a partire da figure rumorose e dai contorni non continui.
Nella sua versione tradizionale, la trasformata di Hough si applica ad immagini
binarie, ovvero immagini in cui sono presenti due soli livelli, bianco e nero, ed
in cui l'informazione associata ad un punto è rappresentata unicamente dalla
sua posizione.
In questo modo il problema di riconoscere una configurazione che può
occupare una grande porzione dell'immagine e avere forma complessa si riduce
a quello di riconoscere una configurazione locale, per lo più puntiforme, in un
spazio parametrico. I parametri scelti per la costruzione di questo spazio
parametrico sono strettamente connessi alle caratteristiche delle strutture
geometriche che si vogliono riconoscere..
Supponiamo ad esempio che le curve da noi cercate siano le rette o segmenti di
retta: le variabili nello spazio dei parametri potranno essere una coppia
qualsiasi di parametri sufficienti a descrivere la retta generica (inclinazione e
distanza dall'origine oppure coordinate dell'intersezione tra la retta e gli assi
cartesiani o ancora elevazione della normale alla retta e distanza dall'origine,
...). In questo modo una retta nel piano dell'immagine verrà trasformata in un
punto le cui coordinate sono i parametri che caratterizzano la retta stessa.
Lo stesso principio può essere applicato ad altre forme geometriche pur di
scegliere come variabili trasformate opportuni parametri che definiscono la
forma cercata. Ad esempio per i cerchi, occorrerà definire uno spazio di tre
parametri (coordinate del centro e raggio, …) i cui punti ne rappresentino uno
in particolare. I punti che fanno parte di una curva cercata, nel piano
parametrico sono trasformati in curve parametriche, una per ogni punto
dell’immagine, e si intersecano in un unico punto le cui coordinate sono
proprio date dai parametri corrispondenti alla curva da riconoscere.
Supponiamo ad esempio che per un certo punto P' dello spazio dei parametri
passino N curve parametriche, corrispondenti ad altrettanti punti del piano
immagine: di conseguenza nel piano immagine la curva di forma cercata,
caratterizzata dalla combinazione dei parametri del punto P', passa per N punti
dell'immagine stessa. Pertanto maggiore è il numero di curve trasformate che si
incrociano in un certo punto P', maggiore sarà la somiglianza tra la curva di
forma cercata e la "figura" formata dai suddetti punti dell'immagine.
Nel caso delle rette, una retta nel piano immagine è parametrizzata con
l’angolo θ che la normale alla retta forma con l’asse positivo delle ascisse e la
distanza ρ della retta dall’origine del piano, calcolata lungo la normale alla
retta
Ogni punto avrà quindi una rappresentazione polare nel piano di Hough.
Dato il punto di coordinate (x0, y0) la trasformata del punto sarà la curva di
equazione
(2.7.1) ρ = x0 cosθ+ y0 sinθ
La trasformata dell'intera immagine sarà invece la sovrapposizione di tante
curve quanti sono i punti che compongono l'immagine stessa.
Come detto prima, se alcuni di questi punti sono attraversati dalla stessa retta,
ossia sono allineati, le corrispondenti sinusoidi si incroceranno in uno stesso
punto, le cui coordinate sono proprio i parametri che caratterizzano la retta, nel
piano di Hough.
Nell’esempio in figura la retta che attraversa i punti A, B, C ha una distanza
dall’origine, calcolata lungo la normale, pari a ρ0 e l’angolo formato dalla
normale con l’ asse x uguale a θ0.
Il range dei parametri (ρ,θ) che si usa abitualmente, data un’immagine di
larghezza M ed altezza N, è :
2222 NMNM +<<+− ρ
-π/ 2 < θ < π/2
θ0
ρ0
La trasformata di Hough va poi quantizzata per essere memorizzata in una
matrice. Pertanto si costruisce una di matrice di accumulazione, detta mappa
di Hough, in cui ogni cella contiene il numero di sinusoidi che passano
nell'intervallo di quantizzazione associato alla cella stessa: le celle che
contengono i valori di accumulazione più elevati rivelano potenziali forme
all'interno dell'immagine che meglio di altre assomigliano a rette.
In particolare, se si ha una cella della matrice di accumulazione per ogni valore
di ρ e di θ, una generica cella relativa alla coppia di parametri (ρ0, θ0) avrà un
valore pari al numero di sinusoidi passanti per il punto (ρ0, θ0) nel piano di
Hough.
Una successiva analisi della matrice di accumulazione permette di estrarre le
coppie di parametri relativi a linee rette dell’immagine di partenza e di risalire
ai coefficienti e ,quindi, alle equazioni delle rette stesse, nel piano cartesiano.
Nel progetto, la trasformata di Hough è stata usata come come un "rivelatore
di rette" per riconoscere i tratti lineari del contorno degli oggetti contenuti in
una immagine. In questo caso è stato necessario applicare la trasformata non
direttamente all'immagine ma ai contorni degli oggetti nell’immagine, ottenuti
mediante una preventiva estrazione dai bordi.
Una delle caratteristiche più interessanti della Trasformata di Hough è quella di
non risentire del rumore presente in una immagine.
Infatti, l'altezza dei picchi nella matrice di accumulazione, dipende in maniera
del tutto trascurabile da eventuali lacune presenti nella retta di partenza o
dall'esistenza di punti spuri presenti nello spazio immagine.
Capitolo 3
Il Sistema sviluppato
In questo capitolo è descritta l’applicazione pratica delle conoscenze teoriche
discusse finora, nell’ambito dello sviluppo di un software in grado di risolvere
in modo efficiente il problema dell’individuazione di segmenti rettilinei in
un’immagine.
Saranno analizzate in dettaglio, quindi, le implementazioni delle tecniche di
filtraggio dell’immagine, dell’estrazione dei contorni degli oggetti presenti
nella scena e infine dell’individuazione dei segmenti attraverso la trasformata
di Hough.
3.1 Acquisizione delle immagini
La prima operazione effettuata è stata quella di acquisire delle immagini
tramite una webcam.
La webcam utilizzata è dotata di un sensore CMOS, le cui caratteristiche sono
state trattate nel Capitolo 2, e presenta proprietà di elevata velocità e dinamica
sebbene abbia una risoluzione non molto elevata.
La scelta di un sensore a bassa risoluzione non è stata casuale, ma motivata
dalle considerazioni sull’eventuale impiego del sistema sviluppato. L’ambiente
industriale che dovrebbe essere la naturale destinazione di tale software non
richiede, infatti, un sistema di acquisizione delle immagini estremamente
sofisticato o delicato, data la notevole dimensione degli scaffali visibili anche
con una risoluzione medio-bassa della webcam.
L’ambiente di sviluppo Iconnect fornisce dei moduli preprogrammati per il
trattamento e l’elaborazione di immagini digitali.
Il sistema sviluppato fa largo uso di questi moduli per il caricamento delle
immagini e per le procedure di segmentazione e di estrazione dei bordi
dall’immagine.
Per utilizzare le immagini acquisite con la webcam nel sistema è stato
utilizzato un apposito modulo, loadimage, , in grado di caricare le immagini di
molteplici formati tra cui il jpg.
3.2 Filtraggio delle immagini
Dopo aver acquisito l’immagine è stato necessario convertirla in un formato a 8
bit senza segno, un formato ossia in cui i livelli dei valori di grigio sia
compreso in un campo di valori pari a [0 255] dove lo 0 corrisponde al nero
mentre 255 corrisponde al bianco.
Questa conversione a 8 bit in realtà non è necessaria in quanto l’immagine è
stata prelevata in via digitale e quindi codificata, come avviene di solito, con
una codifica a 8 bit.
L’introduzione di questo blocco di conversione è stata necessaria per
l’interfacciamento con il successivo modulo histogram che calcola
l’istogramma dei valori di grigio e che pretende un ingresso a 8 bit o senza
segno.
Si è insistito nel capitolo precedente sull’importanza di un filtro che eliminasse
o, almeno, attenuasse, il rumore presente nelle immagini.
Per lo sviluppo di questo sistema si è scelto di usare il filtro di Gauss, per il
suo comportamento migliore nei confronti del rumore rispetto a quello ottenuto
con altri filtri.
Il filtro di Gauss è stato implementato mediante il modulo preprogrammato
Filterimage in grado di effettuare vari tipi di filtraggi dell’immagine.
A seconda del filtro utilizzato la matrice immagine è sottoposta a diverse
operazioni.
In questo caso si implementa l’operazione di convoluzione, esaminata nel
capitolo precedente e la matrice di convoluzione è:
1 2 1
2 4 2
1 2 1
3.3 Segmentazione dell’immagine
3.3.1 Segmentazione per intervallo di soglia
In seguito al filtraggio dell’immagine sono state quindi selezionati i pixel
corrispondenti agli oggetti presenti nell’immagine L’operazione di
segmentazione dell’immagine è stata realizzata in due modi differenti.
La prima versione prevede l’utilizzo del blocco preprogrammato ImageOp che
opera sulle immagini effettuandone la segmentazione in base alla soglia scelta
dall’utente.
La scelta della soglia deriva dall’analisi dell’istogramma dei livelli di grigio
dell’immagine, ottenuto mediante il modulo histogram.
Come discusso nel capitolo precedente, questo istogramma, come avviene nella
maggior parte dei casi, non presenta un andamento nettamente bimodale.
L’andamento dell’istogramma è caratterizzato invece dalla presenza di più
picchi come si può vedere nell’esempio di Figura 4.3
Figura 4.3 Istogramma dei valori di grigio
in cui lungo l’asse delle ascisse ci sono i valori di grigio dei pixel e lungo l’asse
delle ordinate i numeri di occorrenza dei livelli di grigio.
In molte delle situazioni affrontate l’istogramma era analogo a quello in figura.
In questo istogramma sono ben evidenti i picchi relativi allo sfondo chiaro in
quanto posizionati nell’intorno del valore di grigio 255, tipico del bianco,
mentre i picchi relativi ai pixel degli oggetti non facenti parte dello sfondo, in
quantità notevolmente minore, si localizzano in corrispondenza di valori di
grigio più bassi e collocati tutti nella zona intermedia del range [0 255]
Proprio in questo intervallo intermedio si trovano i pixel messi in risalto
attraverso il modulo ImageOp.
Scegliendo infatti un intervallo di segmentazione pari all’intervallo suddetto,
nell’immagine si lasciano inalterati i pixel appartenenti a questo intervallo
mentre tutti gli altri sono posti a zero. L’intervallo scelto in fase di progetto è
stato [50 110].
Si ottiene in questo modo un’immagine intermedia in cui sono presenti solo gli
oggetti evidenziati mentre il resto dell’immagine è completamente nero.
Questo risultato è visibile anche mediante la visualizzazione della matrice
immagine in cui sono diversi da zero solo i pixel il cui valore è compreso
nell’intervallo di interesse.
3.3.2 Formazione dell’immagine binaria
Per facilitare le operazioni successive è stato opportuno fare in modo che nella
matrice immagine i pixel avessero solo due valori di grigio: 0, corrispondente
al nero e 255, corrispondente al bianco.
Come è stato esposto nel precedente paragrafo, si è fatto in modo che nella
matrice immagine restino invariati solo i pixel i cui valori di grigio
appartengono ad un intervallo stabilito.
I pixel che non soddisfano questo criterio di selezione assumono valore 0.
E’ ora possibile binarizzare l’immagine senza deteriorare in alcun modo le
informazioni ottenute mediante le operazioni precedenti.
Le zone selezionate infatti, continueranno ad essere ben differenziate dal resto
dell’immagine anche in seguito alla segmentazione a cui si sottopone
nuovamente l’immagine per renderla binaria.
La segmentazione stavolta è ad un’unica soglia da scegliere in modo
opportuno.
Si fa in modo che il valore della soglia coincida con l’estremo inferiore
dell’intervallo utilizzato nell’operazione precedente. Dopodiché si mettono a
255 tutti i pixel aventi un valore inferiore al valore di soglia mentre tutti gli
altri sono posti a 0.
In questo modo gli oggetti d’interesse sono neri mentre il resto dell’immagine
diventa completamente bianco.
Si è scelta la soglia in questo modo poiché gli unici pixel della matrice
immagine che non avessero un valore inferiore a quello della soglia erano
proprio i pixel degli oggetti, come previsto dall’applicazione delle precedenti
operazioni.
3.3.3 Segmentazione per colore L’ approccio precedentemente utilizzato tuttavia, non è molto robusto. Il
sistema, infatti, fornisce risultati molto soddisfacenti solo in ambienti in cui
siano presenti esclusivamente gli scaffali ben visibili su sfondo chiaro o scuro.
Con altre immagini in cui sono presenti anche altri oggetti ed i contrasti non
sono ben definiti, si è visto, mediante prove sperimentali, che è necessario
adattare di volta in volta il valore della soglia all’immagine analizzata. Inoltre,
bisogna ricordare che anche applicando queste operazioni ad immagini
acquisite nello stesso ambiente ma in condizioni differenti di luminosità i
risultanti non si mantengono costanti perché varia il valore di grigio dei pixel.
Il sistema, pertanto, non è in grado di adattarsi automaticamente alle differenti
situazioni, ma è indispensabile un intervento dell’utente.
Lasciando invariata la soglia d’altronde, si possono ottenere dei risultati
indesiderati che influenzano pesantemente le operazioni di estrazione dei bordi
e della trasformata di Hough. Se si estraggono i bordi nelle immagini in cui gli
oggetti non sono nettamente distinti, è infatti molto alta la probabilità che ci
siano dei bordi vicini a quelli degli scaffali o addirittura tali da poter essere
confusi con essi.
Il risultato dell’applicazione della trasformata di Hough a queste immagini è
quello di avere delle rette relative, come previsto, a contorni rettilinei anche
molto piccoli effettivamente presenti nell’immagine, ma inutili al fine del
riconoscimento degli scaffali. Queste rette sono anzi, una notevole fonte di
errore per il sistema stesso. Per risolvere questo problema allora, si è utilizzata
una segmentazione per colore realizzata in linguaggio C in altra sede.
Si è ipotizzato che gli scaffali da riconoscere nell’ambiente strutturato siano di colore rosso.
In primo luogo si mettono in risalto i pixel corrispondenti agli oggetti rossi
presenti nell’immagine in modo da rilevare esclusivamente gli scaffali e
successivamente se ne estraggono i bordi.
Tale metodo si è dimostrato molto più robusto, preciso ed adattabile ad una
varietà più ampia di situazioni..
Questa implementazione prevede due realizzazioni, differenti unicamente per il
criterio di scelta dei pixel.
Nel primo caso, gli oggetti rossi nell’immagine possono essere messi in risalto
scegliendo solo i pixel in cui la componente rossa, ossia il livello di grigio del
pixel nella matrice relativa alla componente rossa, ha un valore superiore ad
una soglia fissata, nel nostro caso 50 mentre le componenti di blu e di verde
hanno dei valori inferiori a tale soglia.
In questo modo è stato possibile non solo selezionare le componenti rosse
dell’immagine ma anche quelle che si differenziano di poco dal rosso
scarlatto, come il rosa o il bordeaux.
In seguito, ai pixel selezionati si assegna il valore 0 mentre il livello di grigio
dei pixel restanti è posto a 255.
Il secondo metodo implementativo, che ha fornito i risultati migliori in
assoluto, prevede invece la scelta dei pixel in cui la componente di rosso supera
di una volta e mezzo la quantità delle componenti di grigio e di verde.
Si considera cioè, la percentuale delle componenti dei tre colori primari in ogni
pixel scegliendo quelli in cui il rapporto fra le tre componenti o, meglio, tra la
percentuale della componente rossa e quelle degli altri colori è di 1,5.
Anche in questo caso, per avere un’immagine con due soli livelli di grigio, 0 e
255, si mettono a 0 i pixel che soddisfano la condizione stabilita mentre gli altri
assumono un valore di grigio pari a 255.
Nella versione definitiva del progetto si è preferito usare questa seconda
implementazione a seguito del confronto tra i risultati ottenuti.
In questo caso quindi non sono stati utilizzati i blocchi ImageOp
precedentemente illustrati per la segmentazione ma è stata data in ingresso al
sistema l’immagine già segmentata a cui viene poi applicato il filtro gaussiano
per l’attenuazione del rumore.
3.4 Estrazione dei bordi
Dopo aver segmentato l’immagine con le operazioni suddette la matrice
ottenuta presenta dei valori pari a 0 in corrispondenza degli oggetti di interesse
e 255 nel resto dell’immagine.
I punti del bordo quindi sono quelli in cui i pixel aventi valori diversi sono
vicini tra loro.
Per determinare esclusivamente i punti del bordo è stato utilizzato un metodo
differente da quelli utilizzati solitamente e visti nel capitolo precedente.
L’implementazione di questa operazione infatti non è stata realizzata con uno
dei filtri del primo o del secondo ordine, ma è stata affidata al modulo
preprogrammato thinimage che realizza, in realtà, un assottigliamento dei
contorni.
Il criterio su cui ci si basa è sempre quello di calcolare la differenza tra i pixel
appartenenti ad un intorno di un pixel considerato. Quest’operazione si applica
a tutti i pixel della matrice. In corrispondenza dei pixel che si trovano in una
zona omogenea dell’immagine, la differenza tra i valori dei pixel sarà nulla. In
corrispondenza dei punti del bordo invece, in cui si hanno delle disomogeneità,
la differenza tra i valori dei pixel sarà diversa da zero.
Nel caso particolare, si considera il pixel (i, j) e quelli in rapporto di 8-
vicinanza con esso, ossia quelli raggiungibili con un solo passo in orizzontale,
in verticale o in diagonale.
Nella figura 3.4 è rappresentata una 8-vicinanza (8-neighbours):
Fig. 3.4
dove, se il pixel ha come coordinate nella matrice la coppia (i, j), i pixel vicini
hanno coordinate (i+1, j), (i-1, j), (i, j+1), (i, j-1),(i-1, j+1),(i+1,j+1),(i-1, j-1),
(i+1,j+1) .
In particolare si verifica che il pixel di coordinate (i-1, j) abbia un valore
maggiore o uguale a quello del pixel di coordinate (i+1, j) e che il pixel di
coordinate (i, j+1) sia maggiore o uguale del pixel (i, j-1). Se si verificano
queste condizioni il pixel (i, j) è un punto del bordo.
Solo i pixel che soddisfano questi vincoli restano invariati nella matrice, gli
altri pixel sono tutti posti a 255.
In questo modo nell’immagine sono visibili solo i contorni degli oggetti rossi
presenti in essa.
3.5 Implementazione della Trasformata di Hough
Le procedure di estrazione dei contorni illustrate finora sono necessarie per una
efficace implementazione della trasformata di Hough, il cui corretto
funzionamento si basa proprio sulla qualità delle operazioni precedenti.
In questo progetto l’algoritmo della trasformata di Hough, i cui dettagli teorici
sono stati esaminati nel Capitolo 2, è stato implementato utilizzando il blocco
Interpret programmabile dall’utente in un linguaggio molto simile al C.
Poiché il blocco Interpret non prevede l’impiego delle matrici e le operazioni
con esse, è stato necessario inserire l’intera matrice immagine in un unico
grande vettore avente un numero di elementi pari al prodotto del numero di
righe per il numero di colonne della matrice immagine. È stato possibile farlo
mediante l’uso del modulo Mat2Vect che oltre a prelevare una determinata
riga o colonna dalla matrice in ingresso offre la possibilità di scrivere l’intera
matrice in un vettore.
Negli elementi teorici riguardanti la Trasformata di Hough si è detto che per
ogni punto appartenente ai bordi degli oggetti presenti nell’immagine, si deve
calcolare la coppia di parametri ( ρ, θ ) del piano di Hough.
La cella della matrice di accumulazione corrispondente alla coppia di parametri
calcolati dovrà essere incrementata di un’unità. La matrice di accumulazione è
costruita in modo tale da avere una riga per ogni valore dell’angolo θ
considerato e una colonna per ogni valore di ρ.
Non potendo generare una matrice di accumulazione, anche in questo caso è
stato necessario inserire tutti i dati in un vettore di accumulazione, cioè
costruire un unico vettore avente un numero di blocchi pari al numero di angoli
considerati per il calcolo della trasformata di ogni punto. Ogni blocco, poi, ha
una cella per ogni valore di ρ appartenente al range di valori ottenibili. Ιl
vettore è indicizzato nella maniera opportuna per muoversi al suo interno ed
effettuare tutte le operazioni necessarie.
3.5.1 Calcolo dei parametri ρρρρ e θθθθ
Le coordinate cartesiane dei pixel si ricavano dalla posizione dei pixel nella
matrice immagine.
L’origine del sistema di riferimento è posizionato in alto a sinistra. L’asse delle
ascisse è diretto verso destra e l’asse delle ordinate è orientato verso il basso
come mostrato in figura
x
y
La coppia (x, y) di coordinate del pixel è data dal numero di colonna e dal
numero di riga del pixel nella matrice.
Si scandisce ogni cella della matrice immagine tralasciando le celle che fanno
parte delle tre righe e delle tre colonne situate in prossimità dei margini in cui
si suppone non ci sia un contenuto informativo utile.
In corrispondenza dei pixel del bordo, che nel nostro caso valgono 255, perché
precedentemente si è fatto in modo, per comodità, che nell’immagine risultante
da tutte le operazioni precedenti i bordi fossero bianchi, si calcola il valore
di ρ per ogni valore di θ appartenente al range [ -π, π ] secondo la formula
(3.5.1) ρ = x ∗cos θ + y ∗ sen θ
La coppia (x, y) presente nella (3.5.1) è la coppia delle coordinate cartesiane
del punto di cui si sta calcolando la trasformata.
L’angolo varia nell’intervallo suddetto per ottenere una maggiore precisione
nell’individuazione delle rette in modo che non venga trascurata nessuna retta,
qualsiasi orientazione essa abbia.
Poiché, poi, il valore di ρ geometricamente rappresenta il valore della
distanza (in pixel) della retta dall’origine, calcolata lungo la retta normale ad
essa, risulta evidente che il valore massimo che ρ può assumere è pari alla
misura della diagonale dell’immagine stessa.
Dal calcolo di ρ, tuttavia, per come è scritta la (3.5.1) è possibile che ci siano
dei valori negativi di ρ, data la presenza delle funzioni seno e coseno che,
possono assumere anche valori negativi.
Il range in cui varia ρ, per le osservazioni appena fatte, è dato da [- 800 800],
lavorando su immagini di dimensioni (in pixel) 640 x 480.
Dopo aver calcolato il valore di ro con la (3.5.1) per ogni valore di theta
compreso nell’intervallo [-π, π], si incrementa di un’unità la cella
corrispondente alla coppia (ρ, θ) della matrice di accumulazione.
Si incrementa cioè, in ogni riga, ognuna corrispondente ad un valore di θ, la
cella della colonna corrispondente al valore di ρ trovato.
Queste operazioni si ripetono finché non sono stati esaminati tutti i pixel della
matrice immagine.
Quando il vettore di accumulazione è stato completamente calcolato, si devono
scegliere solo le celle a valore più elevato. In questo modo si considerano le
celle relative ai segmenti più lunghi poiché contenenti un numero maggiore di
punti diminuendo la probabilità di considerare segmenti molto piccoli o
elementi indesiderati.
Queste celle si selezionano prendendo solo quelle il cui valore è superiore ad
una soglia prefissata.
Spesso tuttavia, questo algoritmo riesce ad individuare delle rette che
riprendono piccoli bordi rettilinei o dettagli inutili dell’immagine. Oppure è
probabile che ci siano due celle adiacenti, relative allo stesso ρ e a due angoli
successivi, aventi un valore superiore a quello della soglia. Le coordinate
parametriche di queste due celle saranno utilizzate per rappresentare due rette
che in realtà si riferiscono allo stesso bordo rettilineo nell’immagine ma
differiscono solo per un grado nell’orientazione. Situazioni di questo genere
danno luogo, quindi , ad una ridondanza inutile oltre che dannosa per le
applicazioni successive. Un’operazione che attenua questo problema è la
“pulizia” della matrice di accumulazione.
3.5.2 Pulizia del vettore di accumulazione
Questa operazione consiste nella ricerca dei massimi locali nella matrice di
accumulazione. Si cerca cioè il valore massimo tra le celle appartenenti ad una
sottomatrice, la “maschera” appunto, di dimensione Xa x Ya dove Xa e Ya
sono dei valori arbitrari stabiliti dall’utente. Il valore del massimo è
inizializzato ad una soglia da noi stabilita e successivamente viene aggiornato
man mano che si esegue la ricerca del massimo locale. Quando si trova un
valore maggiore del’attuale valore massimo, questo viene aggiornato. Al
termine del processo, quando sono state confrontate tutte le celle presenti nella
maschera ed è stato calcolato il massimo locale, si lascia invariata la cella in
cui si trova questo valore mentre tutte le altre celle della maschera sono poste a
zero.
Quest’operazione si ripete finché non è stata analizzata l’intera matrice di
accumulazione. In questo modo diminuisce drasticamente la possibilità di
avere più rette che si riferiscono allo stesso contorno o rette inutili ai fini delle
applicazioni successive.
La scelta delle dimensioni della maschera non è immediata. Richiede anzi una
particolare attenzione perché una maschera di dimensioni molto ridotte
potrebbe essere insufficiente ad eliminare le rette superflue mentre una
maschera estesa potrebbe eliminare anche delle rette valide.
In questo progetto si è scelta una maschera 45 x 40 perché si è dimostrata la più
adatta alle situazioni affrontate.
Dopo questa operazione, nel vettore di accumulazione (in questo paragrafo uso
indifferentemente il termine di matrice o vettore poiché la matrice di
accumulazione è stata inserita in un unico vettore per motivi tecnici) solo le
celle corrispondenti ai massimi locali calcolati in precedenza hanno un valore
diverso da zero.
Effettuando nuovamente la scansione dell’intero vettore si prelevano i valori di
ρ e θ relativi a queste celle.
3.6 Determinazione dei coefficienti m e q delle rette
E’ possibile ora risalire al coefficiente angolare m e al termine noto q,
necessari per determinare l’espressione analitica delle rette nel piano
cartesiano.
Le formule matematiche utile per ricavare m e q dai valori di ρ e θ sono
ricavabili mediante semplici passaggi trigonometrici.
Dalla figura
è immediato verificare che
ρ (4.6.1) q = senθ
Considerando poi, che il coefficiente angolare della retta perpendicolare a
quella di cui si vuole conoscere m è pari alla tangente dell’angolo θ e che i
coefficienti di queste due rette sono uno l’antireciproco dell’altro, il
coefficiente desiderato risulta uguale a
(4.6.2) m = - cotg θ
L’implementazione di queste formule è stata realizzata mediante un blocco
Interpret .
In ingresso al blocco ci sono i vettori contenenti i valori utili di ρ e θ. Le
coppie (ρ , θ ) si ottengono estraendo dai vettori i valori di ρ e θ situati nelle
posizioni corrispondenti .
Non è possibile calcolare m nel caso di rette verticali il cui coefficiente
angolare è infinito, ossia quando θ è uguale a 0.
Poiché anche in corrispondenza di valori di θ diversi da 0 ma molto piccoli si
verifica questo problema , allora si è disposto che per gli angoli la cui misura in
gradi è minore di 2, le rette corrispondenti si considerino verticali. Quindi non
si misura m ma si impone che tali rette abbiano l’ascissa pari a ρ e q uguale a
0.
Per tutte le altre rette invece il calcolo dei parametri avviene secondo le
formule descritte prima.
3.7 Visualizzazione delle rette È possibile visualizzare un segmento in un’immagine di uscita di dimensione
640 x 480, mediante il modulo Genfeat, semplicemente fornendo in ingresso le
coordinate degli estremi del segmento.
Per fare in modo che il segmento caratterizzato dai parametri (m, q) attraversi
l’intera immagine di uscita, si pone l’ascissa del primo estremo pari a 0 (e
quindi ordinata pari a q) e quella del secondo estremo pari a 640. Per il secondo
estremo l’ordinata si ottiene tramite la relazione
(3.7.1) y=mx+q
In questo modo è possibile visualizzare tutte le rette, ad esclusione di quelle
verticali, ottenute con la tecnica della trasformata di Hough.
Per la visualizzazione delle rette verticali si utilizza un secondo modulo
Genfeat che riceve in ingresso le coordinate degli estremi dei segmenti
verticali.
Anche in questo caso si preferisce che i segmenti attraversino l’intera
immagine. Per questo motivo, mentre le ascisse dei punti estremi dipendono
dalla misura di ρ, come descritto sopra nel caso delle rette verticali, le ordinate
sono uguali a 0 e a 480 rispettivamente per il primo ed il secondo estremo.
Questa separazione tra le rette verticali e quelle orizzontali risulta essere molto
utile per le successive operazioni di riconoscimento degli scaffali.
In una fase successiva del progetto infatti, i risultati ottenuti finora sono stati
utilizzati per effettuare la stima della posizione dell’osservatore nell’ambiente
strutturato.
Capitolo 4
Prove sperimentali
In questo capitolo sono presentati i risultati ottenuti mediante
l’implementazione delle tecniche fin qui illustrate.
Saranno quindi motivate le scelte implementative effettuate in fase progettuale,
con il supporto dei risultati delle prove sperimentali. I risultati qui presentati
sono stati il presupposto per la stima della posizione di un robot mobile,
effettuata nella seconda parte del progetto.
4.1 Segmentazione delle immagini
Dopo aver acquisito le immagini con la webcam, nel corso della realizzazione
del progetto sono stati utilizzati vari metodi per effettuare la segmentazione
delle immagini.
Nel primo metodo è stata acquisita un’immagine ed se n’è effettuata la
segmentazione mettendo in risalto gli oggetti presenti nell’immagine. Si è
scelto di utilizzare per la segmentazione un intervallo di soglia pari a [50 110]
(Cap.3, par. 3.3.1), lasciando quindi invariati nella matrice i pixel appartenenti
a questo intervallo e ponendo a 0 tutti gli altri.
Per semplificare le operazioni di segmentazione abbiamo fatto in modo che le
condizioni di lavoro fossero tali da avere degli oggetti ben in risalto rispetto
allo sfondo chiaro. Nelle figure seguenti si vede il risultato della segmentazione
effettuata.
Figura 1
Figura 2
Nella prima immagine si ha la foto originale, non sottoposta ad alcuna
operazione mentre nella seconda si vede il risultato della segmentazione
effettuata.
Se si cambia la soglia di segmentazione considerando un intervallo più ampio,
che permette di selezionare un numero di pixel maggiori si ottiene il risultato
Figura 3
visibile in figura 3.La soglia di segmentazione in questo caso è [50 150]
Considerando infatti i pixel aventi un valore di grigio più alto, quindi più
chiari, nella situazione in analisi aumenta il numero di pixel che rientrano nei
criteri di segmentazione stabiliti.
Cambiando l’intervallo scelto i risultati cambiano notevolmente. In figura 4 e 5
sono riportati i risultati ottenuti rispettivamente con un intervallo di
segmentazione di [40 90] e di [150 200].
Mentre nel primo caso l’oggetto colorato è ben in risalto rispetto allo sfondo,
nel secondo caso, in cui sono stati scelti i pixel aventi livelli di grigio molto
alti, sono stati selezionati molti pixel appartenenti all’ambiente circostante
l’oggetto
Figura 4
Figura 5
Il problema più evidente con questo metodo, era proprio quello
dell’impossibilità di adattare lo stesso intervallo di segmentazione a tutte le
situazioni. Era necessario cioè modificare la soglia adattandola all’immagine.
Con la stessa soglia adottata nel caso precedente, ad esempio, è stata
segmentata l’immagine in Figura 6:
Figura 6
Il risultato della segmentazione è visibile in Figura 7. Si può notare che ,
Figura 7
nell’immagine sono stati considerati anche tutti i pixel degli oggetti circostanti
l’oggetto di interesse. Questa soluzione, per evidenti motivi, non è stata
ritenuta valida e quindi si è preferito adottare il secondo metodo esposto nel
capitolo precedente ossia la segmentazione per componenti di colore nei pixel.
Scegliendo infatti solo i pixel che hanno una percentuale di componente del
rosso più grande di una volta e mezzo rispetto a quella del verde e del blu, è
stato possibile ottenere dei buoni risultati. Nella figura 8 si vede il risultato di
questo tipo di segmentazione applicato alla stessa immagine di figura 6.
. Figura 8 I bordi dell’immagine sono stati poi assottigliati. Il risultato di tale operazione, applicata all’immagine in figura 2 è visibile nella figura 9
Figura 9
in cui è rappresentato il risultato dell’estrazione dei bordi all’immagine
precedentemente segmentata. Nel caso della segmentazione con un intervallo
di [150 200] il risultato di quest’operazione diventa quello in figura 10,
evidentemente insoddisfacente
Figura 10
Una segmentazione ben realizzata è quindi fondamentale per il corretto
funzionamento delle operazioni successive, in particolar modo della
trasformata di Hough.
Mediante questa tecnica, come è stato visto prima, é possibile riconoscere i
segmenti presenti nelle immagini. Un buon risultato della trasformata di Hough
dipende quindi in primo luogo dalla segmentazione effettuata.
Applicando ad esempio la trasformata ad un’immagine segmentata in maniera
errata, si genera infatti un risultato sconfortante come si può vedere in figura
12.
Figura 11
L’immagine originale è quella in figura 11 e si può notare come, oltre a
riconoscere le rette desiderate, cioè quelle dell’armadio sulla destra, siano stati
riconosciuti anche i piccoli segmenti facenti parte degli oggetti circostanti.
Figura 12
In figura 12 sono rappresentate in colore le rette costruite con la trasformata di
Hough, che si sovrappongono a quelle dell’immagine originale.
Questo problema invece si non si pone con una segmentazione efficace.
Nella figura seguente, si sovrappongono, ad esempio, le rette ottenute con la
trasformata di Hough al risultato delle procedure di segmentazione ed
estrazione dei bordi
Figura 13
applicate all’immagine di figura 14
Figura 14
In questo caso inoltre, bisogna tener conto anche della scelta corretta delle
dimensioni della maschera di pulizia della matrice di accumulazione.
Infatti, una maschera troppo piccola può causare una ridondanza di rette, come
illustrato nel capitolo precedente.
Nel caso appena analizzato la maschera aveva dimensioni 50 x 50.
Figura 15
In figura 15 si può vedere invece il risultato ottenuto con una maschera di
dimensioni 30x30. È possibile notare la ridondanza di rette relative ad un
segmento.
Questo tipo di errore è nocivo per le applicazioni successive dei metodi
implementati in questa fase di progetto.
Nell’esempio seguente è stata applicata la trasformata di Hough ad
un’immagine segmentata con il primo metodo di segmentazione usato. Si è
variata poi la dimensione della maschera di pulizia e la soglia utilizzata
.L’immagine originale è quella in figura 16
Figura 16
Il risultato della Trasformata di Hough con la maschera 40 x 45 è quello in figura 17
. Figura 17
Come si può vedere sono state riprese anche delle rette indesiderate. Tuttavia utilizzando una maschera di dimensioni 50 x 50 il risultato migliora:
Figura 18
Un risultato ancora più valido si ottiene con un innalzamento della soglia usata
per calcolare il massimo locale. In figura 19 si può vedere, infatti, che sono state eliminate le rette relative agli oggetti circostanti l’armadio mentre sono rimaste le rette effettivamente utili Figura 20
4.2 Scelta della posizione dell’osservatore e dei
sistemi di riferimento
Molto importante, in fase di progetto, è stata la scelta della posizione della
webcam rispetto all’oggetto e dei sistemi di riferimento, uno relativo
all’immagine e uno all’osservatore.
Questa scelta è stata fondamentale soprattutto per la seconda parte del progetto,
ossia per la stima della posizione dell’osservatore nell’ambiente circostante.
Nell’elaborazione delle immagini bisogna considerare che l’oggetto non è
visto sempre com’è in realtà ma nell’immagine le sue dimensioni variano a
seconda della distanza a cui si trova l’osservatore e da una sua eventuale
angolazione rispetto all’oggetto.
Una fase importante del progetto è stata quella di calcolare le dimensioni
dell’oggetto visto al fine di risalire alla posizione dell’osservatore rispetto ad
esso.
Il primo passo fondamentale per il calcolo della distanza e l’angolazione
dell’osservatore rispetto all’oggetto è quello di determinare i sistemi di
riferimento, uno solidale con l’osservatore e l’altro nel piano immagine.
Le situazioni analizzate nel corso del progetto prevedono, come già ripetuto più
volte, la presenza, all’interno dell’immagine di uno scaffale orientato in vari
modi, a seconda della posizione dell’osservatore.
Se quest’ultimo è posto frontalmente rispetto allo scaffale, ne vedrà solo un
lato. In tutti gli altri casi, ossia in presenza di una rotazione rispetto
all’oggetto, saranno visualizzati due lati.
Il sistema di riferimento solidale con l’oggetto nell’immagine ha, per comodità,
l’origine coincidente proprio con uno degli spigoli dello scaffale, in particolare
con lo spigolo comune ad entrambi i lati visti dello scaffale.
Figura 21
Il sistema di riferimento solidale con l’osservatore è dato dalla terna cartesiana
avente l’asse z coincidente con l’asse della webcam , l’asse x parallelo ed
equiverso all’asse x del sistema di riferimento precedentemente descritto e
l’asse y determinabile con la regola della mano destra.
Sono state effettuate diverse prove per individuare la collocazione e
l’orientazione più efficiente della camera da applicare sull’osservatore.
x
y
O
O
In prima analisi si è verificato che il posizionamento della camera sullo stesso
piano d’appoggio dell’oggetto considerato provoca delle distorsioni all’interno
dell’immagine visualizzata.
Non si è in grado, infatti, di risalire ad eventuali angolazioni dello scaffale
rispetto al punto di vista.
Dal confronto delle due figure successive possiamo infatti osservare che,
mentre nell’immagine reale si percepisce un’angolazione di circa 45° tra
osservatore e oggetto, nell’immagine elaborata, da noi utilizzata per le
operazioni successive, tale orientazione è del tutto invisibile.
Figura 22
Figura 23
Si è osservato che traslando verticalmente la camera era possibile ottenere
anche un’informazione relativa all’angolo di rotazione dell’oggetto rispetto
all’orizzontale.
Anche in questo caso si verificano due situazioni diverse.
La prima prevede che la webcam sia posizionata al di sopra dell’oggetto e che
il suo asse ottico sia perpendicolare al piano di appoggio dell’oggetto stesso. In
questo caso l’angolazione dello scaffale rispetto all’orizzontale è univocamente
determinabile. Questa situazione però è difficilmente realizzabile fisicamente.
Si preferisce allora la seconda soluzione che prevede che l’asse della webcam
non sia verticale ma inclinato. In fase progettuale si è scelto, per semplicità di
calcolo, di ruotare l’asse di un angolo di 45 ° rispetto all’asse orizzontale.
In questo modo si mantiene l’informazione relativa all’angolazione dello
scaffale ma sono necessari calcoli aggiuntivi per la determinazione delle
dimensioni dei lati visualizzati.
Supponiamo quindi, di visualizzare nel piano immagine un segmento orientato
di un angolo α rispetto all’asse x.
Se gli estremi P1 e P2 del segmento hanno rispettivamente coordinate (x0, y0) e
(x1, y1) , le coordinate di P2 nel sistema di riferimento solidale con l’osservatore
si ottengono mediante le seguenti trasformazioni:
( ) )45cos(sin
cos
0'1
0'1
α
α
lyy
lxx
+=
+=
dove l è la lunghezza del segmento nel sistema di riferimento relativo al piano
immagine.
La lunghezza L del segmento nel sistema di riferimento solidale
all’osservatore, quindi, è data da:
)45cossin(cos 22222 αα llL +=
Per le ipotesi fatte nella scelta del sistema di riferimento relativo al piano
immagine l’estremo comune a due lati dello scaffale coincide con l’origine. Di
conseguenza, la coppia (x0, y0), nelle nostre applicazioni, sarà sempre uguale
alla coppia (0, 0).
Conclusioni
Il problema affrontato in questa tesi, ossia il riconoscimento dei segmenti per
l’individuazione delle strutture rettangolari presenti nell’immagine, costituisce
dunque la prima fase di un progetto più esteso sviluppato in fase di stage.
Dopo aver riconosciuto e ricostruito le rette presenti nell’immagine, è possibile
infatti risalire alla misura dei segmenti visti, coincidenti con i lati degli scaffali
presenti nell’ambiente strutturato, e determinare in questo modo la distanza
dell’osservatore dallo scaffale. Mediante ulteriori operazioni, definite nel corso
del progetto, si può determinare anche l’orientazione dell’osservatore rispetto
allo scaffale.
In questo modo, applicando tale sistema di visione ad un robot mobile, lo si
rende in grado di stimare la sua posizione in un ambiente strutturato.
Un possibile sviluppo può essere la realizzazione di un sistema di controllo per
la movimentazione del robot all’interno di tale ambiente.
Il robot potrebbe essere controllato in real-time ossia mediante l’acquisizione
delle immagini dall’ambiente circostante ed il contemporaneo movimento sulla
base delle decisioni prese istantaneamente dal sistema di controllo, oppure off-
line, cioè con l’analisi di un’immagine acquisita dall’ambiente, la
determinazione della traiettoria da seguire, il conseguente spostamento “alla
cieca” del robot ed il confronto finale tra la posizione raggiunta e l’obiettivo
iniziale.
Bibliografia
Testi consultati 1. Ioannis Pitas, “Digital Image Processing Algorithms”, Prentice Hall,
Aristotle University of Thessaloniky (1993)
2. Henning Bassmann, Philipp W. Besslich, “Image Processing Ad Oculos”,
DBS Gmbh, Heidelberg (1993)
3. “ MATLAB the Language of Technical Computing”, The Math Works
Inc., Natick (Maggio 1997)
4. B. Jahne, “Digital Image Processing Concepts, Algorithms and Scientific
Applications (5th revised and extended edition)”, Springer-Verlag
5. H. M. Deitel, P. J. Deitel, “C How to program (fourth edition)”
6. S. Olufs, “AISVision – Real-Time Image Processing for Mobile Robotic
Applications”, Fraunhofer Institute Autonome Intelligente Systeme
Dispense di lezione
1. “Proprietà dell’immagine digitale”
2. “Image filtering”
3. “Color”
4. “Image enhancement”
5. “Segmentazione delle immagini”
Siti Web consultati 1. http://www.ghostcomputerclub.it/articoli/news/articoligcc.php?titcode=SOYMR-
1302002103958
2. http://lorca.umh.es/isa/es/doct/pava/DeteccionBordes.pdf
3. http://www.ee.bgu.ac.il/~greg/graphics/special.html
4. http://www.di.uniba.it/~laura/hough/hough.html
5. http://www.dmti.unifi.it/grafica/immagini/Lezione%20III%20(2%20ore).pdf
Tesi consultate
Luca perli, “ Sviluppo di un sistema per la stima del moto proprio da una
sequenza di immagini reali”, Università degli studi di Trento, a.a.2002-2003