Sei sulla pagina 1di 113

Capitolo 1

INTRODUZIONE
Cosa è un'immagine
Un'immagine è una funzione bidimensionale f(x,y) dove x,y sono le coordinate spaziali sul piano e
l'ampiezza di f è l'intensità o livello di grigio dell'immagine in quel determinato punto. Siccome parliamo di
immagini digitali avremo a che fare con valori di x,y e f discreti, finiti.
Gli elementi che compongono un'immagine si chiamano pixel o picture element; sono in numero finito e
ciascuno di essi ha un particolare valore e una particolare posizione.

Ci sono tre livelli, ambiti:


L'elaborazione delle immagini digitali (digital image processing) che si occupa dell'elaborazione di
queste funzioni tramite un elaboratore elettronico.
A sua volta abbiamo diversi livelli:
o Basso livello: riguarda operazioni primitive come la riduzione del rumore, il miglioramento
del contrasto, …
Abbiamo come input un’immagine e come output un’immagine.
o Medio livello: riguarda la segmentazione, la descrizione di regioni, il riconoscimento di
oggetti, …
Abbiamo come input un’immagine e come output contorni e righe.
la visione artificiale (computer vision) il cui fine è di emulare la visione umana.
l'analisi dell'immagine (image analysis) o comprensione che si trova tra le altre due.

Spettro Elettromagnetico
Lo spettro elettromagnetico permette di classificare le immagini in base alla loro sorgente di energia.
Le onde elettromagnetiche sono delle onde sinusoidali di lunghezza variabile considerate come un flusso di
particelle senza massa, ognuna delle quali viaggia seguendo l'andamento dell'onda e si muove alla velocità
della luce. Ogni particella contiene una certa quantità di energia definita fotone.
Lo spettro elettromagnetico raggruppa le bande spettrali in base all'energia dei fotoni; nello specifico parte
dai raggi gamma (a energia più alta) per finire con le onde radio (di energia inferiore). La transizione tra le
bande avviene gradualmente, non in modo netto.
Ogni banda è utilizzata in vari ambiti diversi, ad esempio i raggi gamma sono utilizzati nella medicina
nucleare e nell'osservazione astronomica. I colori da noi percepiti nello spettro del visibile rappresentano
solo una piccola parte di tutto lo spettro.
Lo spettro elettromagnetico può essere espresso anche sotto forma di lunghezza d'onda, frequenza ed
energia. Le equazioni che regolano questi aspetti sono:

lunghezza d’onda λ= c / v
dove c è la velocità della luce, λ la lunghezza d'onda e v la frequenza.

energia e = hv
dove h è la costante di Planck

Dalla seconda equazione emerge che l'energia è direttamente proporzionale alla frequenza; quindi una
frequenza più alta (lunghezza d'onda minore) produce una maggiore energia per fotone.

Lo spettro del visibile comprende onde da 0,43 (violetto) a 0,79 (rosso). I colori che la vista percepisce in un
oggetto sono determinati dalla natura della luce riflessa dall'oggetto stesso.
Una luce priva di colore si definisce monocromatica o acromatica; il suo unico attributo è la sua intensità (o
livello di grigio).
Per descrivere la sorgente di luce cromatica si utilizzano (oltre alla frequenza) anche le tre seguenti
quantità:
radianza: totale quantitativo di energia emesso dalla fonte di luce (watt)
flusso luminoso: fornisce la misura dell'energia percepita dall'osservatore a partire dalla fonte di
luce (lumen) (ad esempio la luce infrarossa ha una grande energia però avrà flusso luminoso pari a
zero perché non viene percepita dall'osservatore)
luminosità: attributo soggettivo collegato alla percezione della luce, quindi impossibile da misurare
Capitolo 2
FONDAMENTI DELLE IMMAGINI DIGITALI

Occhio Umano
L'occhio umano ha una forma pressoché sferica con un diametro di circa 20 mm. E' circondato da tre
membrane: cornea e sclera (membrane esterne); coroide; retina (membrana interna).

Per la nostra trattazione ci interessano le seguenti informazioni:


La coroide ha uno strato di colore scuro che riduce la quantità di luce che penetra nel bulbo oculare. Inoltre
nella parte anteriore si divide in corona ciliare e iride. Quest'ultima si contrae e dilata (con un diametro da 2
a 8 mm) controllando la quantità di luce che entra nell'occhio.

La retina è una membrana interna sulla quale viene impressa la luce che proviene da un oggetto. Sulla
retina sono disposte due classi di recettori di luce e la loro distribuzione determina la visione vera e propria.
Nella retina è presente anche un punto cieco dovuto all'assenza di recettori.
Le due classi di recettori sono:
Coni: sono posizionati nella parte centrale della retina chiamata
fovea e sono molto sensibili ai colori. Sono circa 7 milioni. I
dettagli fini colti dagli esseri umani sono dovuti ai coni ed al
fatto che ognuno di essi è collegato al proprio terminale
nervoso.
La visione legata ai coni viene chiamata fotopica.

Bastoncelli: sono distribuiti in tutta la superficie della retina;


variano da 75 a 150 milioni. I dettagli percepiti dai bastoncelli
sono meno dettagliati in quanto sono tutti collegati ad un solo
terminale nervoso. Inoltre sono sensibili fino a bassi livelli
d’illuminazione e non sono coinvolti nella percezione dei colori.
La visione legata ai bastoncelli viene chiamata scotopica.

Legato alla corona ciliare grazie a delle fibre c'è il cristallino formato per il 70% da acqua. Il cristallino è
importante perché la lunghezza focale necessaria è raggiunta variando la forma proprio del cristallino, in
quanto la distanza tra cristallino e retina (cioè la nostra regione di imaging) è fissa a circa 17 mm. Le fibre
della corona ciliare ispessiscono o assottigliano il cristallino, rispettivamente per oggetti vicini e lontani.
L'immagine della retina è focalizzata principalmente nella regione della fovea. La percezione poi utilizza la
sollecitazione dei recettori luminosi, che trasformano l'energia radiante in impulsi elettrici, che infine
vengono decodificati dal cervello.
La luminosità soggettiva (intensità percepita dal sistema visivo umano) è una funzione logaritmica
dell'intensità della luce incidente sull'occhio.

La linea curva rappresenta le intensità a cui la vista può


adattarsi. Il sistema visivo umano non riesce a interessare
simultaneamente tutti i valori del range, ma risolve il problema
variando la propria sensibilità; questa variazione viene definita
adattamento alla luminosità. Il passaggio dalla visione scotopica
a quella fotopica avviene gradualmente. Il range dei livelli
distinti di intensità che l’occhio può discriminare
simultaneamente è inferiore rispetto a quella totale di
adattamento.

Il rapporto di Weber e' definito:

dove ΔIc è l'incremento dell'illuminazione che risulta


discriminabile rispetto all'illuminazione I dello sfondo.
Un valore basso del rapporto indica che anche solo una piccola
percentuale di variazione è discriminabile. Un valore alto del
rapporto indica che è necessaria una maggiore percentuale di variazione di intensità e si ha quindi una
scarsa discriminazione della luminosità.
Quindi la capacità discriminativa rispetto alla luminosità è scarsa (rapporto di Weber aumenta) ai livelli più
bassi di illuminazione, e aumenta (rapporto di Weber diminuisce) al crescere dell'illuminazione. Questo
avviene perché con poca illuminazione la vista utilizza i bastoncelli, mentre con molta illuminazione
vengono utilizzati i coni.

Acquisizione delle immagini


L'acquisizione delle immagini avviene seguendo il seguente processo:
l'energia in entrata è trasformata in tensione elettrica grazie alla combinazione dell'elettricità in input e del
materiale del sensore sensibile a un particolare tipo dell'energia rilevata. La forma d'onda della tensione di
uscita è la risposta del sensore, e una quantità digitale viene ottenuta da ciascun sensore attraverso la
digitalizzazione di questa risposta. La risposta di ogni singolo sensore è proporzionale all'integrale
dell'energia luminosa proiettata sulla superficie del sensore.

Nell'ambito delle macchine fotografiche digitali vengono utilizzati i CCD (Charge-Coupled Device) e i CMOS
(Complementary Metal Oxide Semiconductor).
I processi di fabbricazione dei due sensori sono differenti, così come lo è la disposizione dei circuiti su di
essi, fermo restando che si tratta sempre di piastrine piene di fotodiodi che raccolgono la luce e la
convogliano.
Ai fini fotografici la differenza più rilevante è quella relativa proprio alla raccolta di luce:
nei CCD la carica elettrica immagazzinata dai singoli fotodiodi viene trasferita, accumulandosi man
mano lungo le file di fotodiodi, fino ai bordi del sensore, dove poi viene amplificata ed infine
convertita in un segnale digitale (da un apposito ADC, Analog-to-Digital Converter).
In pratica la carica elettrica viene letta una riga alla volta, e poi il parziale (di ogni riga) viene
riportato alla riga successiva e così via, in sequenza, fino a coprire l'intero sensore, quindi viene
trasportata della carica elettrica.
i sensori fabbricati con un processo di tipo CMOS, invece, lavorano diversamente: ogni fotodiodo
dispone di un amplificatore e di un convertitore, quindi la carica elettrica accumulata viene
convertita in differenza di potenziale – il cui trasporto richiede molta meno energia, quindi a parità
di altre condizioni, un sensore CMOS consuma meno di un sensore CCD.
Punti fermi riguardo i sensori di tipo CMOS:
tendono ad essere di più facile fabbricazione e più economici
consentono di implementare sul sensore dei componenti che i sensori CCD non ospitano
(l'amplificatore, l'ADC), e questo porta alla realizzazione di chip più piccoli: ciò spiega perché i
sensori di tipo CMOS sono la norma sui cellulari, sulle fotocamere compatte, e così via
a parità di altre condizioni consumano (e scaldano) meno

A questo punto verrebbe da chiedersi perché si trovino ancora in giro dei CCD e la risposta è: qualità
d'immagine. I sensori CCD hanno le potenzialità per offrire una maggiore gamma dinamica, meno rumore e
maggiore sensibilità.
In generale i sensori CMOS hanno due limiti: il rumore e la sensibilità. Poiché c'è un amplificatore per ogni
fotodiodo, basta una minima disuniformità nel funzionamento di uno o più di questi amplificatori per
generare pixel irregolari e/o disturbati.
Inoltre, proprio la maggiore presenza di circuiteria sul sensore genera più
rumore rispetto ad un CCD perché un po’ di rumore accompagna
inevitabilmente ogni componente elettronico.
Quanto alla sensibilità, sempre perché i sensori CMOS ospitano più circuiti
(rispetto ai CCD), ne deriva che una parte della loro superficie non è destinata
alla raccolta di luce (la percentuale di un punto realmente utilizzata per
raccogliere luce si chiama “fill factor”) ma appunto ad ospitare tali circuiti,
mentre un CCD utilizza tutta la superficie per raccogliere la luce.

Abbiamo detto che un'immagine viene definita come una funzione bidimensionale f(x, y) con valori discreti.
f(x,y) deve essere finita e diversa da zero; solitamente ciò si indica con l'intervallo [0, L-1] dove 0 indica il
nero, e L-1 indica il bianco (ovviamente si parla di un’immagine monocromatica).
La convenzione vuole che l'origine di un'immagine digitale si trovi nella parte in alto a sinistra, con l'asse
positivo delle x che si estende verso il basso, l'asse positivo delle y verso destra.
Inoltre è caratterizzata da due componenti:
illuminazione: quantità di luce diretta incidente sulla scena. La sua natura è determinata dalla fonte
di illuminazione.
riflettanza: quantità di luce riflessa dagli oggetti presenti nella scena. La sua natura è determinata
dalle caratteristiche degli oggetti.

Queste due componenti danno origine alla f(x,y):

con
e

Campionamento e quantizzazione di immagini


Se un'immagine digitale è una funzione discreta allora dobbiamo convertire i dati continui in forma digitale
tramite i due processi di:
campionamento: operazione di digitalizzazione delle coordinate.
L'esattezza del campionamento è determinata dalla qualità delle componenti ottiche del sistema.
quantizzazione: operazione di digitalizzazione dell'ampiezza. Quando la funzione bidimensionale
discreta ha un valore di intensità intero per ogni coppia di coordinate (x,y).
L'esattezza della quantizzazione è determinata dal livello di rumore del segnale campionato.
La qualità di un'immagine digitale dipende in larga misura dal numero di campioni e dai livelli di
intensità discreti utilizzati per la quantizzazione e il campionamento.

Il range dinamico di un sistema di imaging viene definito come il rapporto tra l'intensità massima misurabile
e il livello minimo di intensità rilevabile nel sistema.
Il limite più alto viene indicato come saturazione, quello più basso come rumore.
Il contrasto di un'immagine è la differenza di intensità tra il più alto e il più basso livello di intensità di
un'immagine.

La quantizzazione può portare a degli effetti come il falso contorno che si crea
quando nelle zone omogenee di un’immagine digitale non si utilizza un numero
sufficiente di livelli di intensità.

Il numero di bit b richiesti per memorizzare un'immagine digitale è:


b=NxMxk
dove k è l'esponente che determina il numero di livelli di intensità:

Le curve di isopreferenza nel piano Nk, introdotte da Huang, quantificano in modo sperimentale gli effetti
prodotti sulla qualità di un'immagine variando contemporaneamente N e k (quindi nel caso in cui
l'immagine è quadrata e la formula di prima diventa ). Ogni punto nel piano Nk rappresenta
un'immagine avente i valori di N e k uguali alle coordinate di quel punto.
All'aumentare del dettaglio le curve di isopreferenza tendono a diventare sempre più verticali, quindi
significa che per le immagini con maggiore dettaglio sono necessari pochi livelli di intensità. Nelle immagini
con medio - basso dettaglio la qualità rimane invariata in alcuni intervalli in cui il numero di campioni
aumenta, ma il numero dei livelli di intensità descresce. Questo avviene perché la diminuzione di k fa
aumentare il contrasto apparente, che viene percepito come un miglioramento dell'immagine.
Vediamo un esempio:

Nell’immagine di destra sono rappresentate le curve di isopreferenza


delle tre immagini di sinistra. Notiamo che hanno le caratteristiche
sopra citate. Infatti la curva della folla è praticamente verticale in
quanto contiene una grande quantità di dettagli e per rappresentarla
sono necessari solo pochi livelli di intensità. Accade l’opposto nel caso della modella.

Interpolazione di un’immagine
L'interpolazione di un'immagine è il processo mediante il quale si utilizzano dei dati noti di segnale per
stimarne apparentemente i valori in locazioni sconosciute. Questo strumento viene utilizzato per lo zoom, il
rimpicciolimento, la rotazione e le correzioni geometriche.
Vediamo tre tipi di interpolazione:
interpolazione nearest neighbor: assegna a ogni nuova posizione l'intensità del pixel più prossimo
nell'immagine originale. Questo metodo è poco utilizzato perché, anche se semplice, introduce
artefatti.
interpolazione bilineare: l'intensità da assegnare a ciascuna nuova posizione è stimata tramite i
quattro pixel più vicini.
L'equazione che regola questo metodo è
v(x,y) = ax + by + cxy + d
dove v è il valore dell’intensità; mentre i quattro coefficienti sono determinati a partire dalle
quattro equazioni nelle quattro incognite ottenibili utilizzando i quattro pixel più vicini al punto
(x,y).
Ovviamente questo tipo di interpolazione offre dei risultati migliori rispetto alla precedente.
interpolazione bicubica: è come la bilineare con la differenza che questa volta consideriamo i 16
pixel più vicini. Quindi avremo 16 coefficienti determinati con 16 equazioni in 16 incognite.

Relazioni di base tra i pixel


L'intorno di un pixel può essere in due formati:
4-intorno o N4(p): quando consideriamo i quattro pixel orizzontali e verticali, vicini al pixel p di
coordinate (x,y), le cui coordinate sono:
(x+1,y) (x-1,y) (x,y+1) (x,y-1)

Ciascun pixel si trova ad una distanza unitaria da (x,y). Nel caso in cui il pixel p si trovi vicino ai bordi
dell'immagine, l’intorno dei pixel può non essere definito.
Oppure quando consideriamo i vicini diagonali, che hanno coordinate:
(x+1,y+1) (x+1,y-1) (x-1,y+1) (x-1,y-1)

8-intorno o N8(p): quando consideriamo sia i vicini orizzontale e verticali che quelli diagonali.

Definiamo due tipi di adiacenza:


4-adiacenza: due pixel p e q con valori in V sono 4-adiacenti se q è nell’insieme N4(p)
8-adiacenza: due pixel p e q con valori in V sono 8-adiacenti se q è nell’insieme N8(p)

dove V è l’insieme dei valori di intensità utilizzati per definire l’adiacenza.

Definito S come un sottoinsieme di pixel in un’immagine, due pixel p e q si dicono connessi in S se esiste un
path tra di essi formato interamente di pixel appartenenti a S. La componente connessa di S è l’insieme dei
pixel connessi, in S, a ciascun pixel p. S viene detto connesso se all’interno ha un’unica componente
connessa.

Definito R come un sottoinsieme di pixel in un’immagine. Chiamiamo R una regione dell’immagine se R è


un insieme connesso.
L’insieme di tutte le regioni presenti in un’immagine forma il foreground (primo piano), mentre il suo
complemento forma il background (sfondo).
Le regioni possono essere adiacenti, se la loro unione forma un insieme connesso, o disgiunte, quando non
sono adiacenti.
Il bordo di una regione R è l’insieme dei punti che sono adiacenti a punti dell’insieme complementare di R,
cioè l’insieme dei pixel che hanno almeno un vicino nel background.
Quando R coincide con l’immagine intera allora i suoi bordi coincidono con l’insieme dei pixel che si trovano
nella prima e ultima riga e nella prima e ultima colonna dell’immagine.
Capitolo 3
TRASFORMAZIONI DI INTENSITA' E FILTRAGGIO SPAZIALE

Le trasformazioni di intensità e i filtraggi trattati in questo capitolo lavorano nel dominio spaziale, cioè nel
piano che contiene i pixel dell’immagine, andando ad applicare una manipolazione diretta dei pixel.
Successivamente vedremo che per poter operare in un dominio di trasformazione è necessario prima
convertire l'immagine nel dominio della trasformata, applicare il filtraggio e infine calcolare
l’antitrasformata che riporta il risultato ottenuto nel dominio spaziale.
L’espressione che riassume i processi nel dominio spaziale, quindi il filtraggio spaziale, è la seguente:
𝒈 𝒙, 𝒚 = 𝑻 𝒇(𝒙, 𝒚)

dove f(x, y) è l’immagine di input, g(x, y) è l’immagine di output e T è l’operatore definito su f nell’intorno di
un punto (x, y). L’intorno solitamente è rettangolare, centrato su (x, y)
e piccolo.
Per ogni locazione specifica (x, y), il valore dell’immagine di output g
a quelle coordinate è equivalente al risultato dell’applicazione di T
alla regione con origine (x, y) in f.

La più piccola regione possibile misura 1x1. In questo caso g dipende


solo dal valore di f in un singolo punto (x, y) e T diventa una funzione
di trasformazione dell’intensità, chiamata livello di grigio o
mappatura, la cui formula è:
s = T(r)

dove s denota l’intensità di g, mentre r denota l’intensità di f in ogni punto (x, y).

I filtraggi solitamente riguardano il miglioramento dell’immagine o enhancement, cioè quel processo di


manipolazione dell’immagine tale che il risultato sia più adatto dell’originale a una specifica applicazione. Il
miglioramento dell’immagine non è un processo valido per qualsiasi ambito, perché in base all’applicazione
e al risultato che si vuole ottenere si possono utilizzare diversi tipi di filtraggi. L’esempio migliore è quello
dell’ambito medico: in medicina infatti non verranno mai utilizzati filtri che provocano perdita di
informazioni nell’immagine.

Funzioni per la trasformazione di intensità


Vediamo ora tre tipologie di funzioni per le trasformazioni di intensità:
1- lineari (negative e identità)
Negativo: si ottiene tramite l’espressione
s=L–1–r

con un’immagine nella gamma [0, L-1]


Il risultato ottenuto è l’equivalente di un negativo fotografico, infatti
vengono invertiti i livelli di intensità dell’immagine.
Questa elaborazione è utile per migliorare i dettagli bianchi o grigi
inseriti nelle regioni scure di un’immagine.

2- logaritmica (log e log inverso)


L’espressione che regola la trasformazione logaritmica è la seguente:
s = c log (1+r)

dove c è una costante ed 𝑟 ≥ 0.


Questa trasformazione associa a una stretta gamma di valori a bassa
intensità una gamma più ampia di valori di output; si verifica il
contrario con valori più alti dei livelli di input. L’obiettivo quindi è di
espandere i valori dei pixel scuri di un’immagine mentre si
comprimono i valori di livello superiore.
La caratteristica della funzione logaritmica è quella di comprimere la
gamma dinamica delle immagini che presentano ampie variazioni dei
valori dei pixel, permettendo di avere maggiore dettaglio.

3- di potenza [gamma] (potenza n-esima e radice n-esima)


Le trasformazioni di potenza chiamate anche trasformazioni gamma hanno la forma:
s = crγ
dove c e γ sono costanti positive.
Variando γ è possibile ottenere varie curve di trasformazione
che permettono di migliorare la qualità dell'immagine,
migliorare il contrasto e permettere una corretta
visualizzazione dell'immagine sullo schermo. Immagini che
non hanno un corretto valore di γ possono apparire sbiadite o
troppo scure. Questo concetto vale non solo per le immagini
in toni di grigio, ma anche per le immagini a colori, infatti la
correzione gamma non modifica soltanto l'intensità, ma anche
le percentuali di rosso, verde e blu, quindi un corretto valore
di gamma permette di visualizzare i colori in modo fedele.
Le curve di potenza con valori frazionali di γ, come la
trasformazione logaritmica, trasformano una stretta gamma di
valori di input scuri in una gamma più ampia di valori di ouput.
Si verifica l’opposto per valori più alti dei livelli di input. Quindi
la differenza con la trasformazione logaritmica è che in questo
caso è possibile variare l’esponente per variare la curva di
trasformazione.
Le curve generate con γ > 1 hanno un effetto opposto a quelle con γ < 1. Quando γ = c = 1 otteniamo una
trasformazione di identità.
Funzioni di trasformazione lineare a tratti
Un metodo alternativo ai tre visti precedentemente è quello di utilizzare le funzioni di trasformazione
lineare a tratti. Il vantaggio è che la forma può essere arbitrariamente complessa; lo svantaggio è che
richiedono input maggiori da parte dell’utente.
Ne vediamo tre tipi:

- espansione del contrasto (stretching)


E' il processo che amplia la gamma dei livelli di intensità di un’immagine in modo tale che venga
utilizzata l’intera gamma di valori nel mezzo di registrazione o nello strumento di visualizzazione.

- selezione del livello d’intensità (Intensity Slicing):


L'Intensity Slicing è il processo che permette di fare una selezione dei livelli d’intensità utilizzando
due metodi principali:
andando a visualizzare con un valore (esempio bianco) tutti i valori della gamma di
interesse e con un altro (nero) tutte le altre intensità.
utilizzare una trasformazione che rende più chiari (o scuri) i valori della gamma desiderata e
lascia invariati tutti gli altri livelli di intensità.

- selezione mediante piani di bit (bit-plane):


Questo tipo di selezione si basa sul fatto che il valore di ogni pixel dell’immagine originale può
essere ricostruito dai corrispondenti pixel sui vari piani di bit. Quindi invece che prendere in
considerazione la gamma dei livelli di intensità si pone l’attenzione al contributo dato da bit
specifici all’aspetto generale dell’immagine.
I piani di bit di ordine superiore contengono la maggior parte delle informazioni dell’immagine,
mentre i piani di bit inferiori contengono i dettagli legati alle piccole variazioni di intensità.
Lo scopo di questo tipo di selezione è quello di andare ad analizzare l’importanza relativa di ogni
bit, quindi poter determinare l’accuratezza del
numero di bit usati per quantizzare
l’immagine; migliorare la compressione
dell’immagine, in quanto è possibile utilizzare
un minor numero di piani di bit per
rappresentarla.
La ricostruzione viene fatta moltiplicando i
n-1
pixel del piano n-esimo per la costante 2 e
tutti i piani utilizzati vengono sommati per
ottenere l’immagine in scala di grigio.

Elaborazione di Istogrammi
L'istogramma di un'immagine digitale con livelli di intensità nella gamma [0, L-1] è una funzione discreta
h(rk) = nk dove rk è il valore d'intensità k-esimo ed nk è il numero di pixel dell'immagine con intensità rk.
La normalizzazione di un istogramma avviene dividendo ogni componente per il numero totale dei pixel
dell’immagine, quindi tramite la seguente espressione:
p(rk) = rk/MN per k = 0,1,2,...L-1.

p(rk) può essere visto come una stima della probabilità dell’occorrenza del livello di intensità rk in
un’immagine. La somma delle componenti di un istogramma normalizzato deve dare 1.
L'asse orizzontale degli istogrammi corrisponde ai valori di intensità rk. L'asse verticale corrisponde ai valori
di p(rk) = nk/MN dove M e N sono le dimensioni dell'immagine.
L'istogramma ci interessa perché quando i pixel di un’immagine occupano l’intera gamma dei livelli di
intensità possibili e si distribuiscono uniformemente l’immagine avrà un aspetto ad alto contrasto e
mostrerà un’ampia varietà di tonalità di grigio, quindi avremo un’immagine con un ampia gamma dinamica
ed una grande quantità di dettagli.
Equalizzazione di Istogrammi
Per poter migliorare l’immagine ed ottenere un istogramma uniforme dobbiamo utilizzare l’equalizzazione
(o linearizzazione) dell’istogramma tramite la seguente espressione:

𝑘 𝑘
𝐿−1
𝑠𝑘 = 𝑇 𝑟𝑘 = 𝐿 − 1 𝑝𝑟 𝑟𝑘 = 𝑛𝑘
𝑀𝑁
𝑘=0 𝑘=0

Dove p(rk) = nk/MN è la probabilità dei livelli di intensità. M e N sono le dimensioni dell'immagine e nk è il
numero di pixel che hanno intensità rk. Quindi un’immagine equalizzata si ottiene trasformando ogni pixel
dell’immagine di input di intensità rK in un pixel con intensità sK.
Siccome abbiamo a che fare con valori interi, dobbiamo arrotondare tutti i risultati delle probabilità al
valore intero più vicino.

Vediamo un esempio numerico:


Supponiamo di avere un’immagine a 3 bit (L = 8) di 64x64 pixel (MN = 4096), con le seguenti distribuzioni di
intensità:

rk nk p(rk) = nk/MN
R0 = 0 790 0.19
R1 = 1 1023 0.25
R2 = 2 850 0.21
R3 = 3 656 0.16
R4 = 4 329 0.08
R5 = 5 245 0.06
R6 = 6 122 0.03
R7 = 7 81 0.02

I valori della funzione di trasformazione dell’equalizzazione dell’istogramma sono ottenuti con l’equazione
indicata sopra:
𝑠0 = 1.33 → 1
𝑠1 = 3.08 → 3
𝑠2 = 4.55 → 5
𝑠3 = 5.67 → 6
𝑠4 = 6.23 → 6
𝑠5 = 6.65 → 7
𝑠6 = 6.86 → 7
𝑠7 = 7.00 → 7

I valori ottenuti sono frazionari perché sono stati ottenuti sommando i valori di probabilità ed è necessario
arrotondarli al numero intero più vicino. Alla fine otteniamo solo cinque livelli distinti.
In generale dato che l’istogramma è un’approssimazione di una funzione PDF e nel processo non si possono
generare nuovi livelli di intensità, è raro trovare istogrammi perfettamente piatti nella realizzazione pratica
dell’equalizzazione di istogrammi. Quindi non può essere provato che l’equalizzazione di un istogramma
discreto generi un istogramma uniforme. Solitamente si ottiene un istogramma più plasmato con i livelli di
intensità dell’immagine su una gamma più vasta, ottenendo come risultato finale un miglioramento del
contrasto.

(a) istogramma originale


(b) Funzione di
trasformazione
(c) Istogramma
equalizzato
Matching tra Istogrammi
Parliamo di matching tra istogrammi (specifica di un istogramma) quando indichiamo la forma
dell’istogramma che vogliamo ottenere dal processo di enhancement.
Il procedimento da seguire è il seguente:
calcolare l’istogramma pr(r) della data immagine ed effettuare l’equalizzazione dell’istogramma tramite
l’espressione sopra indicata. Arrotondare i risultati sk a numeri interi nell’intervallo [0, L-1]
calcolare tutti i valori della funzione di trasformazione G utilizzando la seguente equazione:
𝑞

𝐺 𝑧𝑞 = 𝐿 − 1 𝑝𝑧 𝑧𝑖
𝑖=0
per q = 0,1,2,..L-1 dove pz(zi) sono i valori dell’istogramma specificato. Arrotondare i valori di G a numeri
interi nell’intervallo [0, L-1]. Memorizzare i valori di G in una tabella.
per ogni valore di sk utilizzare i valori di G in tabella per trovare i valori corrispondenti di zq cosicché
G(zq) è il più vicino a sk e incamerare queste trasformazioni da s a z. Quando più valori di zq soddisfano il
valore dato sk (cioè la trasformazione non è univoca) scegliere per convenzione il valore più piccolo.
ottenere l’immagine dell’istogramma specificato equalizzando prima l’immagine di input e poi
trasformando ogni valore equalizzato sk di questa immagine al corrispondente valore di zq utilizzando le
trasformazioni trovate nel passaggio 3.

Anche se i passi da seguire sono questi, la specifica di un istogramma è un processo che procede per
tentativi perché non esistono regole precise ed è necessario procedere caso per caso con un processo di
analisi dedicato.

Notiamo che sia l’equalizzazione che il matching sono elaborazioni globali, in quanto i pixel vengono
modificati da una funzione di trasformazione basata sulla distribuzione di intensità nell’intera immagine.

Vediamo un esempio numerico:


Supponiamo di avere sempre l’immagine di prima, questa volta però vogliamo trasformare l’istogramma in
modo tale che abbia i valori specificati nella seguente tabella:

zq Specificato
pz(zq)
z0 = 0 0.00
z1 = 1 0.00
z2 = 2 0.00
z3 = 3 0.15
z4 = 4 0.20
z5 = 5 0.30
z6 = 6 0.20
z7 = 7 0.15

Come prima dobbiamo calcolare la scala dei valori dell’istogramma equalizzato:


𝑠0 = 1
𝑠1 = 3
𝑠2 = 5
𝑠3 = 6
𝑠4 = 6
𝑠5 = 7
𝑠6 = 7
𝑠7 = 7

Successivamente calcoliamo tutti i valori della funzione di trasformazione G utilizzando l’equazione sopra
indicata:
𝐺 𝑧0 = 0.00 → 0
𝐺 𝑧1 = 0.00 → 0
𝐺 𝑧2 = 0.00 → 0
𝐺 𝑧3 = 1.05 → 1

𝐺 𝑧4 = 2.45 → 2
𝐺 𝑧5 = 4.55 → 5
𝐺 𝑧6 = 5.95 → 6
𝐺 𝑧7 = 7.00 → 7

Come nell’esempio precedente, i valori frazionari vengono convertiti in numeri interi nell’intervallo *0, 7].
G non è strettamente monotona, quindi dobbiamo utilizzare la tecnica vista nel punto 3 dell’algoritmo.
Dobbiamo trovare il valore più piccolo di zq cosicché il valore G(zq) è il più vicino a sk. Operiamo in questo
modo per ogni valore di sk per creare le trasformazioni richieste da s a z.
Ad esempio s0 = 1 e G(z3) = 1 e abbiamo la corrispondenza 𝑠0 → 𝑧3 , quindi ogni pixel il cui valore è 1
nell’immagine con istogramma equalizzato si trasformerà in un pixel con valore 3 nell’immagine con
l’istogramma specificato.
Continuando con questo procedimento otteniamo:

sk → zq
1 → 3
3 → 4
5 → 5
6 → 6
7 → 7

Infine le relazioni di questa tabella vengono utilizzate per trasformare ogni pixel dell’immagine con
istogramma equalizzato in un pixel corrispondente nella nuova immagine con l’istogramma specificato. I
valori dell’istogramma risultante sono i seguenti:

Reale
pz(zk)
0.00
0.00
0.00
0.19
0.25
0.21
0.24
0.11

I valori di pz(zk) sono stati ottenuti utilizzando lo stesso procedimento dell’esempio precedente
dell’equalizzazione. Ad esempio vediamo in tabella che s=1 si trasforma in z=3 e ci sono 790 pixel
nell’immagine con istogramma equalizzato con il valore di 1, quindi pz(z3) = 790/4096 = 0.19.

(a) istogramma di un’immagine a 3 bit


(b) istogramma specificato
(c) funzione di trasformazione ottenuta dall’istogramma (b)
(d) risultato dell’applicazione della specifica dell’istogramma
Elaborazione locale di Istogrammi
A volte però a noi serve migliorare non tutta l’immagine, ma solo una porzione quindi risulta necessario
utilizzare una elaborazione locale degli istogrammi, tramite funzioni di trasformazione basate sulla
distribuzione dell’intensità nell’intorno di ogni pixel dell’immagine.
In pratica utilizziamo le tecniche viste definendo una zona di prossimità e spostando il suo centro di pixel in
pixel. Ad ogni posizione si calcola l’istogramma dei punti nell’intorno per poi applicare una tecnica di
manipolazione dell’istogramma (equalizzazione e matching) per trasformare l’intensità del pixel al centro
della zona interessata. Tale centro viene poi spostato verso un pixel adiacente e la procedura viene
ripetuta.
L’elaborazione locale degli istogrammi serve quando ad esempio abbiamo delle zone dell’immagine che
vogliamo migliorare, ma non hanno un contributo significativo da poter influenzare l’equalizzazione
globale.

Per migliorare un’immagine abbiamo utilizzato le statistiche dell’istogramma, come la probabilità dei valori
di intensità dei pixel.
Ora vediamo la media e la varianza:
media: corrisponde all’intensità media dei pixel nell’immagine e si ottiene con la seguente
espressione.
𝐿−1

𝑚= 𝑟𝑖 𝑝 𝑟𝑖
𝑖=0

L’intensità media si può calcolare anche sommando i valori di tutti i pixel e dividendo tale valore
per il numero totale di pixel nell’immagine.

varianza: è una misura del contrasto di un’immagine e si ottiene con la seguente espressione.

𝐿−1

𝜇2 𝑟 = 𝑟𝑖 − 𝑚 2 𝑝 𝑟𝑖
𝑖=0

Media e varianza vengono utilizzati per il miglioramento locale dell’immagine, perché provocano dei
cambiamenti su ogni singolo pixel della zona.

Quando abbiamo un’immagine che ha delle caratteristiche nascoste, che vogliamo far risaltare, conviene
utilizzare il miglioramento locale tramite la manipolazione del contrasto.
Quindi ad esempio quando vogliamo lasciar stare le zone chiare di un’immagine e migliorare le zone scure.
Per fare ciò utilizziamo il valore della deviazione standard locale per fare in modo che le zone chiare non
vengano modificate mentre le zone scure si. I pixel che soddisfano le condizioni vengono moltiplicati per
una costante che aumenta o diminuisce il valore dell’intensità rispetto al resto dell’immagine. Visto che
dobbiamo migliorare le zone scure utilizziamo un valore di E relativamente basso in modo tale che le zone
scure modificate tendano ancora verso l’estremità scura della scala, preservando l’aspetto generale
dell’immagine.
In generale la sottoimmagine deve essere il più piccola possibile in modo tale da mantenere i dettagli e
ridurre il costo computazionale.
Vediamo due immagini che illustrano i vantaggi dell’elaborazione locale:

(a) immagine originale


(b) risultato dell’equalizzazione globale
dell’istogramma
(c) risultato dell’equalizzazione locale
dell’istogramma applicata ad (a)
tramite una regione 3x3
(a) immagine originale
(b) risultato dell’equalizzazione
globale dell’istogramma
(c) immagine migliorata utilizzando
delle statistiche locali
dell’istogramma

Elementi di base del filtraggio spaziale


Il filtraggio spaziale, che opera nel dominio spaziale descritto precedentemente, può essere lineare e non
lineare; nel caso lineare c’è una corrispondenza uno a uno con il filtraggio nel dominio della frequenza,
mentre nel caso non lineare non abbiamo una corrispondenza nel dominio della frequenza.
Il vantaggio del filtraggio spaziale sta nella sua maggiore versatilità proprio perché permette di utilizzare
filtri non lineari. Quando si utilizza un filtro non lineare è necessario specificare le dimensioni dell’intorno
sui cui si applicheranno determinate operazioni.

Un filtro spaziale consiste in una regione di prossimità (solitamente un rettangolo) e un’operazione


predefinita che viene applicata ai pixel dell’immagine appartenenti alla regione.
Il filtraggio crea un nuovo pixel con le stesse coordinate del centro dell’intorno, il cui valore è il risultato
dell’operazione di filtraggio (solitamente è meglio lavorare con filtri di dimensioni dispari in quanto i centri
sono valori interi).
Il risultato dell’operazione di filtraggio quindi è un’immagine filtrata creata dalle modifiche indotte dal filtro
su ogni pixel dell’immagine di input.
Se l’operazione di filtraggio è lineare allora il filtro viene detto filtro spaziale lineare.
In generale il filtraggio spaziale di un’immagine di dimensioni MxN con un filtro di dimensioni mxn è dato
dalla seguente espressione:
𝑎 𝑏

𝑔 𝑥, 𝑦 = 𝑤 𝑠, 𝑡 𝑓 𝑥 + 𝑠, 𝑦 + 𝑡
𝑠=−𝑎 𝑡=−𝑏

dove x e y variano in modo tale che ogni pixel di w visiti ogni pixel di f.

I due concetti principali legati al filtraggio spaziale sono la correlazione e la convoluzione:


correlazione: processo che consiste nel progressivo scorrimento di una maschera filtro
sull’immagine e nel calcolo della somma dei prodotti in ogni posizione.
Note:
- è una funzione di spostamento del filtro, quindi il primo valore di correlazione corrisponde allo
spostamento zero del filtro, il secondo corrisponde allo spostamento di una unità e cosi via.
- correlare un filtro w a una funzione che contiene tutti i valori 0 e un solo valore 1 (chiamata
impulso unitario discreto) porta a un risultato che è la copia di w ruotata di 180°. Quindi la
correlazione di una funzione con un impulso unitario discreto porta a una versione ruotata della
funzione nella posizione dell’impulso.
- se l’immagine contiene una regione identicamente uguale a w, il valore della funzione di
correlazione è massimo quando w è centrato su quella regione di f.
La correlazione di un filtro w(x,y) di dimensioni mxn con un immagine f(x,y) è data dalla seguente
equazione:
𝑎 𝑏

𝑤 𝑥, 𝑦 ⋆ 𝑓 𝑥, 𝑦 = 𝑤 𝑠, 𝑡 𝑓 𝑥 + 𝑠, 𝑦 + 𝑡
𝑠=−𝑎 𝑡=−𝑏
convoluzione: opera come la correlazione, ma il filtro viene prima ruotato di 180°. In pratica
ruotiamo una funzione di 180° e poi applichiamo le stesse operazioni della correlazione, quindi se
la maschera filtro è simmetrica il risultato è sempre lo stesso.
Note:
- la convoluzione di una funzione con l’impulso unitario porta a una copia della funzione nella
posizione dell’impulso.
La convoluzione di un filtro w(x, y) di dimensioni mxn con un’immagine f(x,y) è data dalla seguente
equazione:
𝑎 𝑏

𝑤 𝑥, 𝑦 ⋆ 𝑓 𝑥, 𝑦 = 𝑤 𝑠, 𝑡 𝑓 𝑥 − 𝑠, 𝑦 − 𝑡
𝑠=−𝑎 𝑡=−𝑏
Il ribaltamento e lo scivolamento vengono applicati su f anziché su w per semplicità.

In entrambi i casi bisogna applicare del padding all’immagine, cioè aggiungere m-1 righe di valori 0
e n-1 colonne di valori 0 con un filtro di dimensioni mxn.

Il filtraggio lineare possiamo anche rappresentarlo linearmente tramite la seguente equazione:


𝑚𝑛

𝑅 = 𝑤1 𝑧1 + 𝑤2 𝑧2 + 𝑤𝑚𝑛 𝑧𝑚𝑛 = 𝑤𝑘 𝑧𝑘 = 𝒘𝑻 𝒛
𝑘=1

dove i valori di w sono i coefficienti di un filtro mxn e i valori di z sono le intensità corrispondenti
nell’immagine da filtrare.

Filtri spaziali di Smoothing


I fitri spaziali di smoothing vengono utilizzati per ridurre il rumore e produrre immagini sfocate. Il risultato
si può ottenere sia con un filtro lineare sia con un filtro non lineare.

Filtri lineari di smoothing (o filtri di media, filtri low pass):


Questi filtri sostituiscono il valore di ogni pixel dell’immagine con la media dei livelli di intensità nella
regione definita dalla maschera del filtro. Applicando questo tipo di filtro i risultati ottenuti sono:
ridurre le transizioni di intensità brusche, spesso dovute alla presenza di rumore.
sfocare l’immagine, per far emergere oggetti di interesse, però magari perdendo caratteristiche
visive importanti.
eliminare i falsi contorni dovuti all’utilizzo di un numero insufficiente di livelli d’intensità.
ridurre i dettagli irrilevanti, cioè le regioni di pixel che sono piccole rispetto alle dimensioni della
maschera del filtro. Infatti le intensità degli oggetti piccoli tendono a essere inglobate nello sfondo,
mentre gli oggetti più grandi diventano macchie facili da individuare.
introduce dei bordi neri quando si utilizzano delle maschere di grandi dimensioni.

In generale ci sono due tipi di filtri media:


1- filtro box: filtro di media spaziale in cui tutti i coefficienti sono uguali.
111
111
111
2- filtro di media ponderata: filtro che fa in modo che i pixel vengano moltiplicati per coefficienti diversi,
dando maggiore peso ad alcuni pixel piuttosto che ad altri.
121
242
121

Filtri di smoothing non lineari basati sulle statistiche d’ordine:


La risposta di questi filtri consiste nell’ordinare i pixel contenuti in una zona dell’immagine incorporata dal
filtro e poi nella sostituzione del valore del pixel centrale con il valore indotto dalla posizione nell’insieme
ordinato.
Il principale filtro di questo tipo è il filtro mediano che sostituisce il valore di un pixel con il valore mediano
delle intensità della regione in cui si trova il pixel. I filtri mediani sono molto potenti nel caso sia presente
del rumore casuale, in quanto oltre che ridurre molto il rumore introducono una minor sfocatura rispetto ai
filtri lineari. Il principale rumore di tipo casuale che viene ridotto dal filtro mediano è il rumore a impulsi o
sale e pepe, per via della presenza di puntini bianchi e neri nell’immagine. Il filtro mediano è efficace contro
questo tipo di rumore perché si forzano i pixel a mantenere il proprio livello di intensità simile a quello
dell’intorno; quindi gruppi isolati di pixel chiari o scuri rispetto ai loro vicini e la cui area è minore della metà
dell’area del filtro vengono completamente eliminati.

Filtri Spaziali di Sharpening


I filtri spaziali di sharpening rendono più nitida l’immagine mettendo in evidenza le transizioni di intensità e
le zone sfocate. Per poter effettuare lo sharpening si sfruttano le caratteristiche delle derivate spaziali di
primo e secondo ordine; infatti la risposta di un operatore derivativo è proporzionale al grado di
discontinuità dell’intensità dell’immagine nel punto in cui si applica l’operatore, andando quindi ad
evidenziare gli edge ed il rumore e mettere in secondo piano le zone con intensità poco variabile o
costante.

Le caratteristiche di un operatore che approssima la derivata prima sono:


deve essere 0 nelle aree d’intensità costante
deve essere diverso da 0 su un gradino o rampa d’intensità
deve essere diverso da 0 lungo le rampe
Quando si calcola la derivata prima in un punto x, si sottrae il valore della funzione in quel punto dal punto
successivo, infatti è considerata un’operazione “in avanti”.

Le caratteristiche di un operatore che approssima la derivata seconda sono:


deve essere 0 nelle aree d’intensità costante
deve essere diverso da 0 all’inizio e alla fine di un gradino o rampa d’intensità, inoltre deve
cambiare di segno
deve essere 0 lungo le rampe

Vediamo un’immagine di esempio che illustra le caratteristiche delle due derivate appena elencate:

Nelle immagini digitali i lati sono spesso passaggi d’intensità, simili alle rampe, per cui la derivata prima da
come risultato lati sottili, essendo diversa da zero lungo la rampa. La derivata seconda invece produce un
doppio contorno dello spessore di un pixel, separato da zeri, essendo uguale a zero lungo la rampa e
diversa da zero all’inizio e alla fine della rampa.
Quindi la derivata seconda è ideale per lo sharpening in quanto risalta meglio i dettagli rispetto alla derivata
prima.

Metodo Laplaciano
Il laplaciano è l’operatore derivativo di secondo ordine isotropico più semplice da utilizzare. Isotropico
significa che è invariante per rotazione, cioè ruotare l’immagine e poi applicare il filtro da lo stesso risultato
di applicare prima il filtro e poi ruotare il risultato. Quindi la risposta di un filtro isotropico è indipendente
dalla direzione delle discontinuità dell’immagine a cui è applicato il filtro.

Il laplaciano è definito come:


𝜕2 𝑓 𝜕2 𝑓
∇2 𝑓 = +
𝜕𝑥 2 𝜕𝑦 2

Siccome le derivate sono operazioni lineari, allora anche il laplaciano è un operatore lineare.
Ma a noi interessano valori discreti e l’equazione laplaciana a valori discreti è la seguente:
∇2 𝑓 𝑥, 𝑦 = 𝑓 𝑥 + 1, 𝑦 + 𝑓 𝑥 − 1, 𝑦 + 𝑓 𝑥, 𝑦 + 1 + 𝑓 𝑥, 𝑦 − 1 − 4𝑓 𝑥, 𝑦

Questa equazione può essere implementata usando la seguente maschera filtro, che dà un risultato
isotropico per rotazioni di 90°:
0 1 0 0 -1 0
1 -4 1 -1 4 -1
0 1 0 0 -1 0

Le direzioni diagonali si ottengono aggiungendo due termini all’equazione, uno per ognuna delle direzioni
diagonali.
Le maschere utilizzate per implementare le direzioni diagonali invece sono:
1 1 1 -1 -1 -1
1 -8 1 -1 8 -1
1 1 1 -1 -1 -1

In sintesi il laplaciano, come già indicato sopra, mette in evidenza le discontinuità di intensità (aumenta il
contrasto nei punti di discontinuità) di un’immagine e lascia in secondo piano le zone con livelli di intensità
costante o poco variabile. Ciò produce immagini con linee grigiastre e altre discontinuità, su uno sfondo
scuro ed anonimo. Lo sfondo può essere recuperato sommando (o sottraendo) l’immagine originale
all’immagine laplaciana.
Quando si ottiene un immagine laplaciana troppo scura con molto nero è dovuto al fatto che
nell’equazione ci sono sia valori positivi sia negativi e tutti i valori negativi sono ridotti a 0 dal display. Per
rientrare nella gamma [0, L-1] si somma all’immagine laplaciana il suo valore minimo in modo da riportare il
minimo a zero. Lo sfondo quindi da nero dovrebbe diventare grigio, per via della riscalatura delle intensità.
Vediamo un esempio:

(a) immagine lunare


(b) immagine laplaciana (infatti contiene valori negativi portati a 0)
(c) immagine laplaciana scalata per favorirne la visualizzazione
(riportato il minimo a 0)
(d) immagine resa più nitida tramite una delle maschere viste sopra
Unsharp Masking e filtraggio highboost
Un’altra tecnica di sharpening dell’immagine è l'unsharp masking, cioè quel processo che consiste nel
sottrarre una versione sfocata dell’immagine dall’originale.
I passi da seguire sono i seguenti:
1. sfocare l'immagine originale
2. sottrarre l'immagine sfocata dall’originale (la differenza ottenuta si chiama maschera)
3. aggiungere la maschera all’originale

L'equazione che permette di ottenere la maschera quindi è:


𝑔𝑚𝑎𝑠𝑘 𝑥, 𝑦 = 𝑓 𝑥, 𝑦 − 𝑓 𝑥, 𝑦

poi aggiungiamo una porzione opportunamente pesata della maschera all’immagine originale:
𝑔 𝑥, 𝑦 = 𝑓 𝑥, 𝑦 + 𝑘 ∗ 𝑔𝑚𝑎𝑠𝑘 𝑥, 𝑦
quando:
- k=1 si effettua un operazione di unsharp masking.
- k>1 si effettua un filtraggio highboost
- k<1 si riduce il contributo della unsharp mask

Se si utilizza un k grande o l'immagine originale ha qualche valore nullo, può capitare di introdurre degli
aloni scuri attorno agli edge, dovuto al fatto che il valore grande di k porta i picchi della maschera a un
livello superiore al valore minimo dell’originale.

Gradiente
Le caratteristiche delle derivate prime vengono sfruttate tramite l'utilizzo del gradiente, che permette di
effettuare lo sharpening non lineare delle immagini.
Il gradiente di f alle coordinate (x, y) è definito come un vettore colonna bidimensionale ed ha l'importante
proprietà geometrica di puntare verso la direzione dove è concentrata la più alta percentuale di variazione
di f rispetto al punto (x, y).
𝜕𝑓
𝑔𝑥 𝜕𝑥
∇𝑓 ≡ 𝑔𝑟𝑎𝑑 𝑓 ≡ = 𝜕𝑓
𝑔𝑦
𝜕𝑦

La magnitudo (lunghezza) del vettore è data da:


𝑀 𝑥, 𝑦 = 𝑚𝑎𝑔 ∇𝑓 = 𝑔𝑥2 + 𝑔𝑦2
I calcoli di gx e gy sono operazioni lineari perché implicano l’uso di derivate e possono essere implementati
come somma di prodotti utilizzando delle particolari maschere spaziali; invece il calcolo di M(x,y) implica
quadrati e radici quadrate o l’uso di valori assoluti quindi utilizza operazioni non lineari.

Le maschere sopra citate che permettono di calcolare le due componenti del gradiente sono gli operatori
gradiente di Roberts che hanno la seguente forma:
-1 0 0 -1
01 1 0

e gli operatori di Sobel che hanno la seguente forma:


-1 -2 -1 -1 0 1
0 0 0 -2 0 2
1 2 1 -1 0 1

Nella prima la differenza tra la terza e la prima riga approssima la derivata nella direzione x. Nella seconda
la differenza tra la terza e la prima colonna approssima nella direzione y.
Negli operatori di Sobel si utilizza il coefficiente 2 per ottenere dello smoothing che permette di dare
maggiore importanza al punto centrale.
Le maschere di dimensione pari sono scomode da usare perché non hanno un centro di simmetria; in tutte
le maschere di questo tipo la somma dei coefficienti deve essere 0, perché il nostro scopo è che queste
maschere restituiscano 0 nelle zone ad intensità costante.
Riassumendo il gradiente permette di:
effettuare dello sharpening
facilitare l'individuazione dei difetti
facilitare lo sforzo computazionale per eventuali ispezioni automatiche
evidenziare piccole caratteristiche non facilmente visibili in un’immagine in scala di grigio
evidenziare piccole discontinuità in aree pressoché piatte

Vediamo un esempio:

(a) immagine ottica di una lente a contatto


(b) gradiente di Sobel
Capitolo 4
FILTRAGGIO NEL DOMINIO DELLA FREQUENZA

Il filtraggio nel dominio della frequenza è possibile grazie alle caratteristiche della serie di Fourier e della
trasformata di Fourier, che permette di lavorare su una funzione nel dominio di Fourier e, successivamente,
ritornare al dominio originale della funzione senza perdere nessuna informazione.
Nel nostro caso utilizziamo solamente la trasformata di Fourier, però facciamo anche qualche accenno alla
serie.
La serie di Fourier è una somma di seni e coseni moltiplicati per coefficienti appropriati, che esprime una
funzione f(t) di una variabile continua periodica t, con periodo T.

La serie di Fourier ha la seguente forma:

dove

Impulsi e proprietà di sifting


Un concetto fondamentale collegato alla trasformata di Fourier è quello dell’impulso e delle sue proprietà
di sifting. Un impulso unitario di una variabile continua f, posizionato a t=0 e denotato da δ(t) è definito
come:

E deve soddisfare l’identità:

Quindi un impulso può essere visto come un picco di ampiezza infinita e durata nulla, avente una superficie
unitaria.
La proprietà di sifting, citata prima, fornisce il valore della funzione f(t) nella posizione dell’impulso t0,
quindi:

Le proprietà viste finora si riferiscono al continuo, ma noi, trattando immagini digitali, abbiamo a che fare
con quantità discrete quindi le formule viste prima per poter descrivere un singolo impulso discreto δ(x)
diventano:
La proprietà di sifting diventa:

Un singolo impulso discreto posizionato in . La variabile x è


discreta, e δ è 0 in qualsiasi posizione, ad eccezione che in

Un treno di impulsi è la somma di infiniti impulsi periodici ΔT unitari e separati:

Treno di impulsi

Trasformata di Fourier di una variabile continua


La trasformata di Fourier di una funzione continua f(t) di una variabile continua t è definita dalla seguente
equazione:

La trasformata può essere indicata con F(μ) perché è una funzione della sola variabile μ, anch’essa
continua, infatti t è la variabile di integrazione.
L’antitrasformata di Fourier (o trasformata inversa) permette di risalire a f(t) data F(μ), in questo modo:

Le due equazioni che abbiamo appena visto individuano la coppia di Fourier.


L’equazione della trasformata di Fourier, grazie alla formula di Eulero, può essere riscritta nel seguente
modo:

Dopo l’integrazione l’unica variabile rimasta è la frequenza, per questo motivo il dominio della trasformata
di Fourier viene chiamato dominio della frequenza.
Il problema della trasformata di Fourier è che solitamente contiene termini complessi e, per agevolare la
visualizzazione, si lavora con la magnitudo della trasformata (cioè una quantità reale), chiamata spettro di
Fourier (o spettro della frequenza):

L’immagine illustra le caratteristiche dei concetti illustrati finora:

Notiamo che la funzione tende a infinito sia per i valori positivi sia per quelli negativi di μ. Le posizioni degli
zeri di entrambe le funzioni (trasformata e spettro) sono inversamente proporzionali alla larghezza W, la cui
altezza dei lobi decresce in funzione della distanza dall’origine.

Trasformata di Fourier di un impulso e di un treno di impulsi


La trasformata di Fourier di un impulso posizionato nell’origine del dominio spaziale diventa una costante
nel dominio della frequenza. Se invece l’impulso è posizionato in t = t0 allora diventa:

Il treno di impulsi , periodico con periodo ΔT, invece può essere espresso come una serie di Fourier:

dove:

L’integrale nell’intervallo * +, comprende solo l’impulso di , collocato nell’origine.


La somma è un processo lineare, quindi la trasformata di Fourier di una somma è uguale alla somma delle
trasformate delle singole componenti, cioè degli esponenziali.
Da notare infine che la trasformata di Fourier di un treno di impulsi, con periodo ΔT, è a sua volta un treno
di impulsi.

Convoluzione
Come abbiamo visto nel capitolo 3, la convoluzione di due funzioni prevede il flipping (rotazione di 180°) di
una funzione rispetto all’origine e il suo scorrimento sull’altra, durante il quale si effettua un calcolo.
La convoluzione di due funzioni continue f(t) e h(t), di una variabile continua t, è definita:

dove il segno meno serve per il flipping descritto prima; t è lo spostamento necessario per lo scorrimento di
una funzione sull’altra; τ è la variabile d’integrazione.
La trasformata di Fourier della convoluzione risulta essere:

dove f(t) e h(t) possono essere invertite, quindi la convoluzione gode della proprietà commutativa.
In dettaglio, se t indica il dominio spaziale e μ il dominio della frequenza, la trasformata di Fourier della
convoluzione di due funzioni nel dominio spaziale è uguale al prodotto delle due funzioni nel dominio della
frequenza della trasformata di Fourier delle due funzioni.
Viceversa, dal prodotto di due trasformate otteniamo la convoluzione nel dominio spaziale calcolando
l’antitrasformata di Fourier.
Quindi sono una coppia di Fourier.
Ora abbiamo tutti gli elementi per esporre le due parti del teorema della convoluzione, che è la base del
filtraggio nel dominio della frequenza:

Prima parte:

Questa prima parte indica che l’espressione di destra si ottiene attraverso la trasformata di Fourier
dell’espressione di sinistra, mentre l’espressione di sinistra si ottiene attraverso l’inverso della trasformata
di Fourier dell’espressione di destra.

Seconda parte:

Questa seconda parte indica che la convoluzione nel dominio della frequenza è analoga alla moltiplicazione
nel dominio spaziale, e che sono relazionate, rispettivamente, dalla trasformata di Fourier e dalla sua
inversa.

Campionamento e trasformata di Fourier di funzioni campionate

Campionamento
Come già visto nel capitolo 3, per poter elaborare le immagini al computer è necessario trasformare le
funzioni continue in una sequenza di valori discreti, tramite i processi di campionamento e quantizzazione.
Il campionamento è modellato moltiplicando f(t) per una funzione di campionamento uguale al treno di
impulsi ΔT unitari e separati:

dove è la funzione campionata.


Ciascun componente della sommatoria è un impulso pesato al quale viene assegnato il valore assunto da
f(t) nella posizione dell’impulso stesso. Il valore di ciascun campione è dato dalla forza dell’impulso pesato
ottenuto dall’integrazione. Il valore di fk di un campione arbitrario nella sequenza è dato da:

dove k può essere qualsiasi valore intero.


Vediamo un’immagine che rappresenta i concetti illustrati finora sul campionamento.
(a) Una funzione continua
(b) Treno di impulsi utilizzato per modellare il
processo di campionamento
(c) Funziona campionata formata dal prodotto di
(a) e (b)
(d) Valori campione ottenuti dall’integrazione e
dall’utilizzo della proprietà di sifting
dell’impulso.

La trasformata di Fourier di funzioni campionate


La trasformata di Fourier della funzione campionata è una sequenza infinita e periodica di copie
di , la trasformata della funzione continua originale, quindi la trasformata della funzione campionata è
continua.
La distanza tra le copie è determinata dal valore di e la quantità di è la frequenza di
campionamento usata per generare le funzioni campionate. In base alla frequenza di campionamento
possiamo avere:
sovracampionamento: la frequenza è abbastanza alta da permettere un sufficiente distacco tra i
vari periodi.
campionamento critico: la frequenza è alta abbastanza ma al limite, infatti un valore ancora più
basso di causerebbe una fusione dei periodi, mentre un valore più alto fornirebbe un
maggiore distacco tra i periodi.
sottocampionamento: la frequenza è più bassa del minimo richiesto, non riuscendo a mantenere
distinte e separate le copie di F(μ).
Vediamo un’immagine che riassume i concetti appena illustrati:

(a) trasformata di Fourier di una


funzione a banda limitata
(b) trasformata della funzione (a) che
rappresenta le condizioni di sovra
campionamento
(c) trasformata che rappresenta le
condizioni di campionamento
critico
(d) trasformata che rappresenta le
condizioni di sottocampionamento
Il teorema del campionamento
Una funzione a banda limitata (come quella della figura precedente) è una funzione f(t) la cui trasformata è
zero per i valori in frequenza esterni a un intervallo finito [-μmax, μmin].
Dai concetti illustrati prima sulla frequenza di campionamento emerge che è necessario avere un periodo
completo che caratterizzi l’intera trasformata, in modo da poter recuperare f(t) da quel singolo periodo
facendo uso dell’antitrasformata di Fourier.
E’ possibile estrarre da un singolo periodo uguale a quello di F(μ), se la separazione tra le varie copie è
sufficiente. Il distacco sufficiente è garantito se

Quindi una funzione continua a banda limitata può essere completamente ricostruita a partire dall’insieme
dei suoi campioni (nessuna informazione è completamente persa), se questi ultimi sono stati acquisiti con
un valore superiore al doppio della frequenza più alta della funzione; un tasso di campionamento
esattamente uguale al doppio della frequenza più alta è chiamato frequenza di Nyquist. Di conseguenza la
frequenza massima che può essere catturata campionando un segnale a è .
Il risultato ottenuto è il teorema del campionamento. I filtri che permettono di ricostruire la funzione
originale a partire dai campioni vengono chiamati filtri di ricostruzione.

Aliasing
L’aliasing (o aliasing della frequenza) è il processo in cui le componenti ad alta frequenza di una funzione
continua, si mascherano alle frequenze più basse nella funzione campionata. La conseguenza di questo
processo è che l’antitrasformata introduce degli errori nell’immagine.
Come abbiamo visto prima il sottocampionamento, quindi l’abbassamento del tasso di campionamento
sotto quello di Nyquist, provoca la sovrapposizione dei periodi e diventa impossibile isolare un singolo
periodo della trasformata, a prescindere dal filtro utilizzato. Infatti anche utilizzando un filtro low pass
otterremmo una funzione sporcata dalle frequenze dei periodi adiacenti.
L’immagine seguente rappresenta proprio questo aspetto.

(a) Trasformata di Fourier di una


funzione a banda limitata e
sotto campionata
(b) Filtro ideale low-pass
(c) Prodotto di (a) e (b).
L’interferenza dei periodi
adiacenti fa sì che l’aliasing
impedisca il perfetto
recupero di F(μ), e, di
conseguenza, della funzione
continua a banda limitata
originale.

Nei segnali campionati l’aliasing è sempre presente perché, sebbene la funzione campionata originale sia a
banda limitata, le componenti infinite in frequenza vengono introdotte quando si limita l’estensione della
funzione, procedura indispensabile nella pratica.
Nella pratica gli effetti di aliasing possono essere ridotti dallo smoothing delle funzioni di input, che ne
attenua le frequenze più alte. Questo processo chiamato anti-aliasing deve essere effettuato prima che la
funzione venga campionata, perché l’aliasing è una fase del campionamento che non può essere “eliminato
dopo”.
Una funzione ricostruita perfettamente è una somma infinita di funzioni sinc pesate dai valori dei campioni,
e possiede la proprietà secondo la quale la funzione ricostruita equivale ai valori dei campioni negli
incrementi multipli e interi di ΔT.

Trasformata discreta di Fourier (DFT) a una variabile


Per calcolare le DFT serve campionare un solo periodo.
Dato un insieme {fn} avente M campioni di f(t), tramite la seguente equazione:

è possibile ottenere un insieme di campioni {Fm} di valori complessi discreti che corrispondono alla
trasformata discreta di Fourier dell’insieme dei campioni di input.
Al contrario dato un insieme {Fm} possiamo ricostruire l’insieme dei campioni {fn} utilizzando
l’antitrasformata discreta di Fourier (IDFT), utilizzando la seguente equazione:

La coppia della DFT può essere applicata a qualsiasi insieme finito di campioni discreti presi
uniformemente.
Infine notiamo che la trasformata discreta di Fourier e la sua inversa sono infinitamente periodiche, con
periodo M.
La risoluzione in frequenza Δu della DFT dipende dalla durata di T, dove la funzione continua f(t) è
campionata, e l’intervallo delle frequenze attraversato dalla DFT dipende dall’intervallo di campionamento
ΔT.

Estensione alle funzioni a due variabili


Ora estendiamo i concetti visti finora a due variabili.

Impulso 2-D e la sua proprietà di sifting


L’impulso δ(t, z) di due variabili continue, t e z, è definito

L’impulso 2-D soddisfa, come nel caso 1-D, la proprietà di sifting per un impulso con coordinate (t0, z0):

Ricordiamo che la proprietà di sifting fornisce il valore della funzione f(t, z) nella posizione dell’impulso.

Ora vediamo le proprietà illustrate sopra applicate nel discreto: l’impulso discreto 2-D, per le variabili
discrete x e y, è definito

La proprietà di sifting diventa, per un impulso con coordinate (x0, y0):

Come al solito, la proprietà di sifting di un impulso discreto ha come risultato il valore della funzione
discreta f(x, y) nella posizione dell’impulso.
Vediamo un impulso discreto 2-D con un’immagine:
Impulso discreto unitario e bidimensionale. Le variabili x e
y sono discrete e δ vale sempre 0, ad eccezione del punto
di coordinate (x0, y0)

Coppia di Fourier continua 2-D


La coppia di Fourier continua e bidimensionale, con f(t, z) funzione continua di due variabili continue t e x, è
data dalle seguenti espressioni:

dove μ e v sono le variabili in frequenza e il loro dominio viene definito dominio continuo della frequenza.
Vediamo un esempio di funzione bidimensionale e del suo spettro:

(a) Funzione bidimensionale


(b) Sezione del suo spettro

Il blocco è più lungo rispetto all’asse t,


così lo spettro sarà più contratto
lungo l’asse delle μ

Le posizioni degli zeri nello spettro sono inversamente proporzionali ai valori di T e Z, quindi T e Z saranno
più grandi quando lo spettro si contrae, e viceversa.

Campionamento bidimensionale e teorema del campionamento 2-D


Il campionamento bidimensionale può essere modellato utilizzando la funzione di campionamento (treno di
impulsi 2-D)

dove ΔT e ΔZ sono le distanze tra i campioni lungo l’asse delle t e delle z della funzione continua f(t, z).
Questa equazione descrive un insieme di impulsi periodici che si estendono all’infinito lungo i due assi.
Vediamo un esempio tramite un’immagine:
La funzione f(t ,z) viene detta a banda limitata se la sua trasformata di Fourier è 0 al di fuori del rettangolo
individuato dagli intervalli [-μmax, μmax] e [-vmax, vmax].
Il teorema del campionamento bidimensionale stabilisce che una funzione continua, a banda limitata, f(t ,z)
può essere ricostruita senza errori da un insieme dei suoi campioni se gli intervalli di campionamento sono:

Ovviamente girando le frazioni e parlando in termini di tasso di campionamento abbiamo:

Quindi non si perde nessuna informazione se una funzione continua, a banda limitata e bidimensionale è
rappresentata da campioni acquisiti a valori due volte più grandi della massima frequenza della funzione, in
entrambe le direzioni μ e v.
Insomma tutti i concetti visti per il caso unidimensionale si ripetono nel bidimensionale, infatti se la
funzione è sotto campionata i periodi si sovrappongono e diventa impossibile isolare un singolo periodo,
provocando il fenomeno dell’aliasing.
Una possibile rappresentazione grafica del caso bidimensionale è la seguente:

(a) Trasformata di Fourier


sovracampionata
(b) Trasformata di Fourier
sottocampionata

Aliasing nelle immagini

Estensione dall’aliasing 1-D


Come abbiamo visto nel caso unidimensionale, una funzione continua f(t, z) di due variabili continue t e z,
può essere a banda limitata solo se si estende infinitamente in entrambe le coordinate spaziali. L’aliasing è
sempre presente in quanto non è possibile campionare una funzione infinita e limitare la durata della
funzione introduce delle componenti distorte in frequenza.
Ci sono due tipi di manifestazioni dell’aliasing nelle immagini:
aliasing spaziale: dovuto al sottocampionamento.
Si presenta sotto forma di artefatti come linee frastagliate, rilievi spuri e presenza di strutture
(pattern) in frequenza non presenti nell’immagine originale.
aliasing temporale: legato agli intervalli temporali tra le immagini in una sequenza.
Un esempio è l’effetto wagon wheel (ruota del vagone), nel quale in una sequenza di immagini, le
ruote con i raggi sembrano ruotare indietro; la causa è il valore del frame rate (immagini al
secondo) troppo basso rispetto alla velocità di rotazione delle ruote nella sequenza.

Esattamente come nel caso unidimensionale gli effetti dell’aliasing possono essere ridotti tramite
smoothing in modo da attenuare le frequenze più alte; ricordiamo che il filtraggio anti-aliasing deve essere
applicato prima che l’immagine venga campionata, in quanto non esistono software in grado di applicare
filtri anti-aliasing dopo il campionamento per ridurre gli artefatti indotti dalle violazioni del teorema del
campionamento.
Interpolazione di un’immagine e ricampionamento
La ricostruzione perfetta di una funzione a banda limitata di un’immagine a partire da un insieme dei suoi
campioni, richiede una convoluzione bidimensionale nel dominio spaziale con una funzione sinc, quindi
richiede un’interpolazione che utilizza infinite sommatorie, obbligandoci a procedere per approssimazioni.
Come abbiamo già visto precedentemente l’interpolazione viene utilizzata per il ridimensionamento di
un’immagine: l’ingrandimento può essere visto come un caso di sovracampionamento (ad esempio lo
zooming effettuato mediante la replicazione dei pixel, applicabile quando si vuole aumentare la dimensione
dell’immagine di un numero intero di volte); il rimpicciolimento come un caso di sottocampionamento, che
si ottiene cancellando opportunamente righe e colonne.
Per ridurre il fenomeno dell’aliasing possiamo utilizzare due metodi:
sfocare leggermente l’immagine prima di rimpicciolirla
sovracampionare (utilizzare una risoluzione maggiore) la scena originale e ridurre (ricampionando)
le sue dimensioni attraverso la cancellazione di righe e colonne. Ovviamente con questa tecnica è
necessario avere accesso alla scena originale.

Quando abbiamo a che fare con immagini che hanno dei contorni ben definiti, gli effetti dell’aliasing
appaiono come blocchi chiamati jaggy.

Effetto moiré
Questo tipo di artefatto è visibile nel campionamento di scene con componenti periodiche o quasi.
Nell’ottica questo effetto si riferisce alle strutture periodiche prodotte tra due griglie sovrapposte aventi,
approssimativamente, un’uguale distanza.
Nell’elaborazione delle immagini questo problema compare nella scansione di stampe multimediali, come i
giornali e le riviste, o nelle immagini con componenti periodiche la cui distanza è confrontabile con lo
spazio di separazione tra i campioni.
Vediamo un esempio chiarificatore:

individualmente le singole componenti sono chiare e


prive di interferenze, ma la sovrapposizione di un
disegno sull’altro crea una struttura periodica delle
frequenze completamente assenti nelle strutture
originali

Le immagini (a) e (b) sono delle linee verticali, ma siccome


l’immagine è stata importata dalla digitale si sono creati
proprio gli artefatti che stiamo descrivendo.

I giornali e gli altri supporti stampati fanno uso dei cosiddetti punti a mezzotono (halftone), che sono punti
o ellissi neri le cui dimensioni variano a seconda degli schemi utilizzati per simulare i toni di grigio.
Importante ricordare che la dimensione del punto è inversamente proporzionale all’intensità
dell’immagine; nelle aree chiare infatti i punti sono piccoli o totalmente assenti, nelle aree grigie non
troppo scure i punti sono larghi.
Solitamente i giornali sono stampati utilizzando 75 dpi (dots per inch), le riviste utilizzano 133 dpi e le
brochure ad alta qualità 175 dpi.
Il reticolo di campionamento, orientato orizzontalmente e verticalmente, e i modelli dei punti
sull’immagine del giornale, orientati a , creano strutture uniformi di moiré che rendono l’immagine
come se fosse macchiata.
La trasformata discreta di Fourier 2-D (DFT) e la sua inversa (IDFT)
La trasformata discreta di Fourier 2-D si ottiene con la seguente espressione

dove f(x, y) è un’immagine digitale di dimensioni ; i valori delle variabili u e v devono appartenere al
range .
L’antitrasformata discreta di Fourier ci permette di ottenere f(x, y) data F(u, v):

dove .
Ovviamente queste due equazioni costituiscono la coppia di Fourier discreta 2-D.

Alcune proprietà della trasformata discreta di Fourier 2-D

Relazione tra gli intervalli spaziali e gli intervalli della frequenza


Esistono relazioni fondamentali tra gli intervalli del campionamento spaziale e i corrispondenti intervalli nel
dominio della frequenza. Se una funzione continua f(t, z) viene campionata per formare un’immagine
digitale f(x, y), formata da campioni presi rispettivamente nell’asse t e nell’asse z. Se ΔT e ΔZ
denotano le distanze tra i campioni, le distanze tra le corrispondenti variabili discrete del dominio della
frequenza si ottengono da:

Notiamo che le distanze tra i campioni nel dominio della frequenza sono inversamente proporzionali sia alla
distanza tra i campioni spaziali che al numero dei campioni stessi.

Traslazione e rotazione
La coppia di Fourier vista prima soddisfa le seguenti proprietà di traslazione:

Cioè moltiplicando f(x, y) per l’esponenziale mostrato si trasla l’origine della DFT in (u0, v0) e, viceversa,
moltiplicando F(u, v) per il negativo dello stesso esponente si trasla l’origine della f(x, y) in (x0, y0).
La traslazione non ha effetti sulla magnitudo (spettro) di F(u, v).
Utilizzando le coordinate polari

la coppia di Fourier diventa:

per cui ruotando f(x, y) di un angolo anche F(u, v) viene ruotato dello stesso angolo. Viceversa ruotando
F(u, v) anche f(x, y) ruota in maniera analoga.
Periodicità
Le periodicità della trasformata e della sua inversa sono aspetti fondamentali per l’implementazione degli
algoritmi basati sulla DFT.
I dati della trasformata nell’intervallo tra 0 e M-1 consistono in due mezzi periodi invertiti che si incontrano
nel punto . Per la visualizzazione e il filtraggio è più conveniente avere in questo intervallo un periodo
completo della trasformata, nella quale i dati sono contigui; per fare in modo che F(0) sia al centro
dell’intervallo *0, M-1] si moltiplica f(x) per .
Nel caso bidimensionale il principio rimane lo stesso, anche se al posto dei due mezzi periodi avremo
quattro periodi da che si incontrano nel punto . Come nel caso monodimensionale, la
visualizzazione è semplificata se si traslano i dati in maniera tale che F(0, 0) sia in ; per fare in
modo che F(0, 0) risulti al centro del rettangolo della frequenza, definito dall’intervallo *0, M-1] e [0, N-1] si
moltiplica f(x, y) per .

Vediamo un’immagine che illustra il riposizionamento della trasformata di Fourier al centro:

(a) DFT 1-D con un numero infinito di


periodi
(b) DFT spostata, ottenuta dalla
moltiplicazione di f(x) per
prima di calcolare F(u)
(c) DFT 2-D con un numero infinito di
periodi. L’area racchiusa dalla linea
scura continua è una matrice di
valori , F(u, v)
(d) DFT ottenuta dalla moltiplicazione
di f(x, y) per , prima di
calcolare F(u, v). I dati adesso
contengono un periodo completo e
centrato, come in (b)

Proprietà di simmetria
Ogni funzione reale o complessa w(x, y) può essere espressa come la somma di una parte pari e di una
parte dispari (ciascuna delle quali può essere reale o complessa):

dove, per via della definizione della parte pari e della parte dispari, abbiamo

e
Infatti le funzioni pari vengono dette simmetriche, mentre le funzioni dispari antisimmetriche. Dal
momento che tutti gli indici nella DFT e nella IDFT sono positivi, quando parliamo di simmetria (e di
antisimmetria) ci riferiamo alla simmetria (o antisimmetria) rispetto al punto centrale di una sequenza.
La trasformata di Fourier di una funzione reale f(x, y) gode della proprietà di simmetria coniugata:

Invece la trasformata di Fourier di una funzione immaginaria f(x, y) sarà antisimmetrica coniugata:

Spettro di Fourier e angolo di fase


La DFT 2-D è solitamente complessa, quindi può essere espressa in forma polare

dove
magnitudo (spettro o frequenza di Fourier):

angolo di fase:

spettro di potenza:

R e I sono, rispettivamente, le parti reale e immaginaria di F(u, v) e tutti i calcoli sono eseguiti per le variabili
discrete . Quindi magnitudo, spettro e angolo sono matrici di
dimensioni .
Prima abbiamo detto che la trasformata di Fourier di una funzione reale è simmetrica coniugata, quindi lo
spettro ha una simmetria pari rispetto all’origine:

e l’angolo di fase possiede la seguente simmetria dispari rispetto all’origine:

Dall’equazione della trasformata discreta di Fourier 2-D segue che:

il quale indica che il termine della frequenza zero è proporzionale al valore medio di f(x, y).
Poiché i componenti in frequenza u e v valgono zero nell’origine, F(0, 0) viene chiamato anche componente
dc della trasformata.

Vediamo un bell’esempio che illustra i concetti visti finora.


(a) Immagine
(b) Spettro che mostra dei punti
luminosi nei quattro angoli
(c) Spettro centrato
(d) Maggiori dettagli ottenuti
grazie ad una trasformazione
logaritmica. I passaggi dello
zero crossing dello spettro
sono più vicini lungo la
verticale poiché il rettangolo
in (a) è più lungo in quella
direzione

Dall’immagine notiamo che:


le origini di entrambi i domini, spaziale e della frequenza, sono in alto a sinistra.
L’area attorno all’origine della trasformata contiene i valori più alti, in ogni caso i quattro angoli
dello spettro contengono valori alti.
Per centrare lo spettro, moltiplichiamo l’immagine in (a) per , prima di calcolare la DFT.
Questa operazione viene fatta per avere un risultato più facile da visualizzare.
Siccome il termine dc domina i valori dello spettro, il range dinamico delle altre intensità
nell’immagine sono compresse. Per recuperare questi dettagli utilizziamo una trasformazione
logaritmica .

Ora vediamo come lo spettro si comporta nel caso di traslazione e rotazione:

(a) Rettangolo della figura precedente


traslato
(b) Spettro di (a)
(c) Rettangolo ruotato
(d) Spettro del rettangolo ruotato, che
notiamo essere uguale a quello della
figura originale

Dall’immagine notiamo che:


Lo spettro è insensibile alla traslazione dell’immagine, in quanto il valore assoluto del termine
esponenziale è 1, ma esso ruota attorno allo stesso angolo di un’immagine ruotata
Ruotando l’immagine ruota anche lo spettro

Le componenti dello spettro della DFT determinano le ampiezze delle onde sinusoidali che si combinano
per formare l’immagine risultante. Per ogni data frequenza nella DFT di un’immagine, una grande ampiezza
implica una maggiore prominenza di una sinusoide a quella frequenza nell’immagine stessa; al contrario
un’ampiezza minore implica che la sinusoide è meno presente nell’immagine.
Il contributo delle componenti di fase è meno intuitivo, ma importante, in quanto la fase è una misura dello
spostamento delle varie sinusoidi rispetto alla loro origine. Mentre la magnitudo della DFT 2-D è una
matrice le cui componenti determinano le intensità dell’immagine, la fase corrispondente è una matrice di
angoli che ci fornisce numerose informazioni sulla posizione degli oggetti discernibili nell’immagine.

Vediamo un esempio che illustra l’importanza della fase:

(a) Immagine di donna


(b) Angolo di fase
(c) Ricostruzione della donna facendo uso solamente
dell’angolo di fase
(d) Ricostruzione della donna utilizzando solamente lo
spettro
(e) Ricostruzione effettuata utilizzando l’angolo di fase
corrispondente a quello dell’immagine della donna e
lo spettro del rettangolo precedente
(f) Ricostruzione effettuata utilizzando la fase del
rettangolo e lo spettro della donna

Dall’immagine notiamo che:


In (b) l’analisi visiva non consente nessuna associazione con il contenuto specifico dell’immagine
corrispondente.
L’immagine (c) è stata ottenuta calcolando l’antitrasformata discreta di Fourier, facendo uso
solamente delle informazioni desunte dalla fase. Le informazioni riguardanti le intensità sono
andate perdute (infatti vengono preservate dallo spettro), mentre le caratteristiche di base della
forma complessiva di quest’immagine sono facilmente riconducibili all’immagine iniziale della
donna.
L’immagine (d) è stata ottenuta facendo uso solamente dello spettro e calcolando l’antitrasformata
discreta di Fourier, ponendo il termine esponenziale uguale a 1 e quindi con un angolo di fase nullo.
L’immagine contiene soltanto le informazioni che riguardano l’intensità, con il termine dc che
risulta dominante; non c’è alcuna informazione che riguardi la forma nell’immagine, proprio perché
la fase è stata annullata.
Nell’immagine (e) domina la forma della donna, infatti è stato utilizzato lo spettro del rettangolo e
l’angolo di fase corrispondente all’immagine della donna. In (f) avviene esattamente il contrario,
infatti domina il rettangolo.

Teorema della convoluzione 2-D


Il teorema della convoluzione 2-D è dato dalle seguenti espressioni:

Come nel caso monodimensionale la doppia freccia è utilizzata per indicare che sia la parte sinistra che la
parte destra delle espressioni costituiscono una coppia di Fourier.
Per i nostri scopi ci interessa soprattutto la prima, la quale afferma che l’antitrasformata di Fourier del
prodotto è uguale a , ovvero alla convoluzione spaziale 2-D di f e h;
analogamente dalla DFT della convoluzione spaziale si ottiene il prodotto delle trasformate nel dominio
della frequenza.
Le basi per il filtraggio nel dominio della frequenza

Caratteristiche aggiuntive del dominio della frequenza


Dall’equazione della trasformata discreta di Fourier notiamo che ciascun termine di F(u, v) contiene tutti i
valori di f(x, y) modificati dai valori dei termini esponenziali. Quindi risulta impossibile fare delle
associazioni dirette tra le componenti specifiche di un’immagine e la sua trasformata.
Nonostante ciò possiamo trovare delle relazioni tra le componenti in frequenza della trasformata di Fourier
e le caratteristiche spaziali di un’immagine. Infatti la frequenza è direttamente collegata alla velocità
spaziale delle variazioni di intensità, quindi risulta possibile associare le frequenze nella trasformata alle
variazioni di intensità.
Precedentemente abbiamo visto che la più lenta componente variabile in frequenza (u = v = 0) è
proporzionale all’intensità media di un’immagine. Quando ci si allontana dall’origine della trasformata, le
frequenze più basse corrispondono alle componenti di intensità di un’immagine che variano lentamente
(nell’immagine di una stanza ad esempio le variazioni di intensità sulle pareti e sul pavimento). Quando ci si
sposta ancora più lontano dall’origine le frequenze più alte cominciano a corrispondere a variazioni di
intensità sempre più veloci nell’immagine; queste corrispondono ai contorni degli oggetti o altre
componenti caratterizzate da bruschi cambiamenti di intensità.

Le tecniche di filtraggio nel dominio della frequenza si basano sulla modifica della trasformata di Fourier
per raggiungere gli obiettivi prefissati e poi, calcolando l’antitrasformata discreta, tornare al dominio
dell’immagine, ricordando che le componenti alle quali abbiamo accesso sono lo spettro (la magnitudo
della trasformata) e l’angolo di fase.

Vediamo un esempio che illustra le relazioni tra un’immagine e il suo spettro:

Le caratteristiche principali del dispositivo sono:


Contorni marcati disposti approssimativamente a

Due protrusioni bianche ossidate risultato di un


guasto

Lo spettro infatti mostra le componenti a ; la componente lungo l’asse


verticale un po’ fuori asse sulla sinistra è provocata dagli edge delle
protrusioni.

Filtraggio nel dominio della frequenza


Data un’immagine digitale f(x, y), di dimensioni , l’equazione del filtraggio è la seguente:

dove è l’antitrasformata di Fourier; è la trasformata dell’immagine di input f(x, y); è la


funzione filtro, che modifica la trasformata dell’immagine di input per ottenere un output processato;
è ovviamente l’immagine filtrata. Le funzioni F, H e g sono matrici di dimensioni . Da
ricordare che si utilizzano funzioni simmetriche rispetto al loro centro, che fanno in modo che sia
centrata a sua volta.
Come abbiamo già accennato precedentemente le basse frequenze nella trasformata sono relazionate alle
componenti di un’immagine che modificano in maniera graduale la loro intensità (pareti stanza o cielo di un
panorama), mentre le alte frequenze sono relazionate alle componenti che modificano in maniera brusca la
loro intensità (contorni e rumore). Quindi un filtro low pass (passa basso) che lascia passare le basse
frequenze ed attenua le alte dovrebbe sfocare l’immagine, mentre un filtro high pass (passa alto) dovrebbe
migliorare la nitidezza dei dettagli. Nel caso del filtro high pass è necessario aggiungere una piccola
costante (indicata dalla freccia rossa in figura), che previene l’eliminazione del termine dc e preserva la
tonalità, altrimenti se il termine dc diventa zero, lo diventa anche l’intensità media dell’immagine di output,
diventando quindi molto scura.
L’immagine illustra i due filtri e il problema del termine dc azzerato:

Prima riga: filtri nel dominio della


frequenza.
Seconda riga: immagini filtrate.

Abbiamo già visto che solitamente conviene introdurre dello zero-padding a un’immagine per evitare di
ottenere risultati erronei. Finora lo abbiamo applicato all’immagine di input, ma qual è la relazione tra il
padding spaziale e i filtri individuati direttamente nel dominio della frequenza?
Il metodo migliore per adoperare il padding di un filtro nel dominio della frequenza potrebbe essere quello
di creare un filtro (delle stesse dimensioni dell’immagine); calcolare la sua IDFT per ottenere il filtro spaziale
corrispondente; eseguire il padding del filtro nel dominio spaziale; calcolare la DFT per tornare nel dominio
della frequenza. Questo metodo non va bene, perché le discontinuità nel filtro spaziale creano un ringing
(risonanza) nella sua controparte del dominio della frequenza.
In dettaglio, la trasformata di Fourier di una funzione box è una funzione sinc le cui componenti della
frequenza si estendono all’infinito e quindi ci aspettiamo lo stesso comportamento anche per
l’antitrasformata della funzione box, perciò la rappresentazione spaziale di un filtro ideale (box) nel
dominio della frequenza possiede le componenti che si estendono all’infinito. Quindi un qualsiasi
troncamento spaziale del filtro indotto che implementa il processo di padding introdurrà delle
discontinuità, che daranno vita al fenomeno di ringing nel dominio della frequenza. Il risultato è che non è
possibile utilizzare un filtro ideale nel dominio della frequenza e contemporaneamente utilizzare lo zero
padding per evitare errori, dal momento che non si possono gestire un numero infinito di componenti.
Vediamo un’immagine che illustra il fenomeno del ringing:

(a) Filtro originale individuato (centrato) nel dominio


della frequenza
(b) (immagine in basso a sinistra)Rappresentazione
spaziale ottenuta dal calcolo della IDFT di (a)
(c) Risultato del padding di (b) per il doppio della sua
lunghezza, si notino le discontinuità
(d) Filtro corrispondente nel dominio della frequenza
ottenuto dal calcolo della DFT di (c). E’ presente il
ringing a causa delle discontinuità di (c)
Il nostro obiettivo è quello di lavorare con filtri caratterizzabili nel dominio della frequenza senza
preoccuparsi di eventuali troncamenti. Perciò il metodo da utilizzare è quello di applicare lo zero padding
alle immagini e successivamente creare i filtri nel dominio della frequenza delle stesse dimensioni delle
immagini padded (utilizzando la DFT filtri e immagini devono avere le stesse dimensioni).

La DFT è una matrice complessa, quindi possiamo esprimerla in questo modo:

dove R è la parte reale; I è la parte immaginaria.


Andando a sostituire questa espressione con quella illustrata all’inizio del paragrafo otteniamo:

I filtri senza traslazione di fase sono quei filtri che interessano la parte reale e la parte immaginaria allo
stesso modo e che non hanno effetti sulla fase. Utilizziamo questi perché anche piccole variazioni all’angolo
di fase possono avere effetti disastrosi e inaspettati sull’output filtrato.

Riassumiamo i passi da seguire per effettuare il filtraggio nel dominio della frequenza

1. Data un’immagine di input f(x, y) di dimensioni , si ricavano i parametri di padding P e Q,


solitamente P = 2M e Q = 2N.
2. Si forma un’immagine padded di dimensioni , estendendo f(x, y) con il necessario
numero di zeri
3. Si moltiplica per per centrarne la trasformata
4. Si calcola la DFT F(u, v) dell’immagine del punto 3
5. Si genera una funzione filtro simmetrica e reale ,H(u, v), di dimensioni con il centro nelle
coordinate (P/2, Q/2)
6. Si ottiene l’immagine:

7. Il risultato finale g(x, y) è ottenuto attraverso l’estrazione della regione dal quadrante in alto
a sinistra di
Vediamo delle immagini che illustrano ciascun passo del filtraggio:

(a) Immagine f, di dimensioni


(b) Immagine padded di dimensioni

(c) Risultato della moltiplicazione di per

(d) Spettro di
(e) Filtro low pass gaussiano centrato, H, di
dimensioni
(f) Spettro del prodotto di HFp
(g) gp, il prodotto di per la parte reale,
della IDFT di HFp
(h) risultato finale g ottenuto selezionando le
prima M righe e N colonne di gp

Corrispondenza tra il filtraggio nel dominio spaziale e quello nel dominio della frequenza
Il legame fondamentale tra il filtraggio eseguito nel dominio spaziale e quello eseguito nel dominio della
frequenza è costituito dal teorema della convoluzione.
Dato un filtro spaziale, otteniamo la sua rappresentazione nel dominio della frequenza prendendo la
trasformata di Fourier del filtro spaziale. I due filtri infatti formano una coppia di Fourier:

dove h(x, y) è un filtro spaziale, che viene chiamato anche risposta finita all’impulso di H(u, v), in quanto
questo filtro può essere ottenuto dalla risposta di un filtro nel dominio della frequenza ad un impulso.
Un modo per trarre vantaggio dalla proprietà di entrambi i domini è quello di specificare un filtro nel
dominio della frequenza, calcolare la sua IDFT, e poi utilizzarne il filtro spaziale risultante come una guida
per la costruzione di maschere filtro spaziali più piccole.

I filtri basati sulle funzioni gaussiane sono interessanti perché sia la trasformata di Fourier della funzione
gaussiana che la sua antitrasformata sono funzioni gaussiane reali. Le equazioni che caratterizzano i filtri
nei due domini hanno le seguenti peculiarità:
rappresentano una coppia di Fourier, le cui componenti sono entrambe gaussiane e reali,
facilitando l’analisi in quanto non ci sono numeri complessi.
Entrambe le funzioni hanno un comportamento che si influenza reciprocamente. Quando il filtro
nel dominio della frequenza ha un profilo ampio, quello nel dominio spaziale (ottenuto tramite
l’antitrasformata) ha un profilo ristretto, e viceversa.
Più il filtro nel dominio della frequenza è stretto, più esso attenuerà le basse frequenze,
aumentando la sfocatura

Il dominio della frequenza può essere considerato come un laboratorio nel quale approfittare dei vantaggi
della corrispondenza tra il contenuto della frequenza e l’aspetto dell’immagine. In molti casi infatti gli
obiettivi non sono raggiungibili nel dominio spaziale, mentre diventano banali nel dominio della frequenza.
Una volta individuato un filtro specifico attraverso la sperimentazione nel dominio della frequenza,
l’implementazione reale del metodo viene svolta nel dominio spaziale.
Smoothing di un’immagine utilizzando i filtri nel dominio della frequenza
Lo smoothing nel dominio della frequenza è ottenuto tramite l’attenuazione delle frequenze più alte, cioè
tramite il filtraggio low pass. Abbiamo già visto infatti che i contorni e le transizioni di intensità più nette (il
rumore) contribuiscono nell’immagine a incrementare il contenuto di alte frequenze nella sua trasformata.

Filtri low pass ideali


Il filtro low pass ideale ILPF è un filtro low pass 2-D che lascia passare, senza attenuarle, tutte le frequenze
all’interno di un cerchio di raggio D0, centrato sull’origine, e “taglia fuori” (annulla) tutte le frequenze al di
fuori di questo cerchio.
La funzione che lo caratterizza è la seguente:

dove D0 è una costante positiva.


In una sezione trasversale del filtro low pass ideale, il punto di transizione tra H(u, v) = 1 e H(u, v) = 0 è
chiamato frequenza di taglio (cut-off frequency). Nell’immagine sotto la frequenza di taglio è D0.
La netta frequenza di taglio di un filtro ideale low pass non può essere realizzata in hardware, sebbene
possa essere simulata al computer.

(a) Diagramma prospettico di


una funzione filtro low
pass ideale
(b) Filtro visualizzato come
immagine
(c) Sezione trasversale radiale
del filtro

Un modo per stabilire un insieme di valori standard per le corrispondenti frequenze di taglio è quello di
calcolare i cerchi che racchiudono uno specifico ammontare di potenza totale dell’immagine PT.
Vediamo un esempio:

(a) immagine originale


(b) – (f) risultati del filtraggio effettuato attraverso i filtri low
pass ideali con frequenza di taglio stabilita dai valori dei
raggi 10, 30, 60, 160, 460. Questi cerchi racchiudono
rispettivamente l’87%, il 93.1%, il 95.7%, il 97.8% della
potenza spettrale complessiva.

La forte sfocatura dell’immagine (b) indica che i dettagli sono


contenuti nel 13% di potenza rimossa dal filtro. Al crescere del
raggio, si rimuove una quantità di spettro via via minore, e anche
la sfocatura diminuisce.
Dall’esempio notiamo che il filtraggio low pass ideale è poco
funzionale.
La sfocatura e il ringing provocati dai ILPF si spiegano utilizzando il teorema della convoluzione.

(a) Rappresentazione nel dominio spaziale


di un filtro low pass ideale
(b) Profilo dell’intensità di una linea
orizzontale passante per il centro
dell’immagine

Dal momento che una sezione trasversale del filtro low pass ideale nel dominio della frequenza assomiglia a
un filtro box, la sezione trasversale del corrispondente filtro spaziale ha la forma di una funzione sinc;
ricordiamo che il filtraggio nel dominio spaziale è dato dalla convoluzione di h(x, y) con l’immagine e che
operando la convoluzione di una funzione sinc con un impulso si copia il sinc nella posizione dell’impulso
stesso. Il lobo centrale della funzione sinc è la causa principale della sfocatura, mentre i lobi più esterni e
piccoli sono i principali responsabili del ringing.
Dal momento che l’estensione della funzione sinc è inversamente proporzionale al raggio di H(u, v) più D0
diventa grande, più il sinc spaziale si avvicina a un impulso che, al limite, non provoca nessun tipo di
sfocatura quando si opera la convoluzione con l’immagine.

Filtri low pass di Butterworth


La funzione di trasferimento di un filtro low pass di Butterworth di ordine n, con frequenza di taglio posta a
distanza D0 dall’origine, è definita:

(a) Diagramma prospettico della


funzione di trasferimento di
un filtro lowpass di
Butterworth
(b) Filtro visualizzato come
immagine
(c) Sezioni trasversali radiali
del filtro di ordine 1-4

La funzione di trasferimento del filtro low pass di Butterworth è graduale, in quanto non ha una
discontinuità marcata che indica un taglio netto tra le frequenze filtrate e quelle che vengono lasciate
passare. In questo caso è possibile definire la posizione della frequenza di taglio come il luogo dei punti in
cui è minore di una determinata frazione del suo valore massimo; il 50% del valore massimo si ha
per .

Vediamo lo stesso esempio di prima, ma utilizzando il filtro di Butterworth:


(a) Immagine originale
(b) – (f) Risultati del filtraggio effettuato attraverso i filtri low
pass di Butterworth di ordine 2, con le stesse frequenze di
taglio dell’esempio del filtro ideale

Notiamo che non è presente del ringing in nessuna delle


immagini processate, ciò è dovuto alla transizione graduale tra
le frequenze basse e alte.

Specifichiamo però che la presenza del ringing dipende dall’ordine utilizzato, infatti un filtro di ordine 1 non
presenta ringing nel dominio spaziale; di ordine 2 è impercettibile, quindi risulta essere una soluzione
ottimale per avere un buon compromesso tra l’effettivo filtraggio e la presenza di ringing; il fenomeno
diventa significativo negli ordini superiori, infatti un filtro low pass di Butterworth di ordine 20 porta a dei
risultati simili a quelli del filtro low pass ideale.
Le immagini illustrano quattro diversi ordini:

(a) – (d) rappresentazione spaziale dei


BPLF di ordine 1, 2, 5, 20 e i
corrispondenti profili di intensità
passanti per il centro dei filtri; come
abbiamo detto prima il ringing
aumenta all’aumentare dell’ordine.

Filtri low pass gaussiani


I filtri low pass gaussiani GLPF sono definiti dalla seguente espressione:

Dove D0 è la frequenza di tagli; quando D(u, v) = D0 il filtro low pass gaussiano è più piccolo del suo massimo
valore di 0.607.
L’antitrasformata di Fourier del filtro low pass gaussiano è a sua volta una funzione gaussiana, quindi il filtro
spaziale gaussiano, ottenuto dal calcolo della IDFT, non avrà ringing.
Vediamo la solita rappresentazione grafica:
(a) Diagramma prospettico della
funzione di trasferimento del filtro
low pass gaussiano
(b) Filtro visualizzato come immagine
(c) Sezioni trasversali radiali dei
differenti valori di D0

Vediamo come si comporta il filtro gaussiano con l’esempio


utilizzato per i precedenti due filtri:
notiamo che la transizione graduale nella sfocatura è legata
all’incremento della frequenza di taglio. Il filtro gaussiano ha
come risultato un minore livello di smoothing rispetto al filtro
low pass di Butterworth di ordine 2 sebbene la frequenza di
taglio sia uguale. Siamo comunque certi dell’assenza di ringing.

(a) Immagine originale


(b) – (f) risultati del filtraggio effettuato con il filtro low pass
gaussiano, con le stesse frequenze di taglio dell’esempio del
filtro ideale

Vediamo qualche applicazione dei filtri appena descritti.

Esempio 1

(a) campioni di testo a bassa


risoluzione
(b) Risultato del filtraggio con il filtro
low pass gaussiano (i segmenti dei
caratteri sono stati uniti)

Nell’immagine notiamo che i caratteri presentano forme distorte e fratture. I sistemi di riconoscimento
automatico hanno difficoltà ad acquisire correttamente questi caratteri ed una possibile soluzione è quella
di colmare gli spazi vuoti nell’immagine di input attraverso la sfocatura.
L’immagine di destra è stata ottenuta con un filtro low pass gaussiano con D0 = 80.
Esempio 2

(a) Immagine originale


(b) Risultato del filtraggio effettuato attraverso
il filtro low pass gaussiano con D0 = 100
(c) Risultato del filtraggio effettuato attraverso
il filtro low pass gaussiano con D0 = 80. Le
rughe vengono ridotte notevolmente

L’obiettivo di questo filtraggio è quello di ottenere un risultato più dolce e attenuato rispetto all’originale,
eliminando le rughe e le piccole imperfezioni.

Esempio 3

(a) Immagine con linee di


scansione orizzontali
(b) Risultato del filtraggio
effettuato attraverso il
filtro low pass gaussiano
con D0 = 50
(c) Risultato del filtraggio
effettuato attraverso il
filtro low pass gaussiano
con D0 = 20

Le immagini acquisite da sensori remoti hanno una certa predisposizione ad avere delle linee pronunciate
ben visibili lungo la direzione in cui la scena viene scansionata. Il filtraggio low pass è un modo rude, ma
semplice per ridurre la presenza di queste linee.

Sharpening di un’immagine utilizzando i filtri nel dominio della frequenza


Lo sharpening di un’immagine può essere effettuato nel dominio della frequenza attraverso il filtraggio high
pass, che attenua le componenti a bassa frequenza e lascia passare le frequenze più alte nella trasformata
di Fourier.
Un filtro high pass si ottiene a partire da un filtro low pass utilizzando l’equazione:

dove è la funzione di trasferimento del filtro low pass. Quando il filtro low pass attenua le
frequenze, il filtro high pass le lascia passare e viceversa.
Anche nel caso dello sharpening il filtro di Butterworth può essere considerato una via di mezzo tra il filtro
ideale e quello gaussiano.
Vediamo le caratteristiche generali dei tre filtri (ideale; Butterworth; gaussiano) con queste due immagini:

(a) Diagramma prospettico


(b) Rappresentazione mediante immagine
(c) Sezione trasversale di un filtro high
pass ideale

Nella seconda riga abbiamo il filtro di


Butterworth e nella terza il filtro gaussiano.
Notiamo che le caratteristiche sono
praticamente identiche a quelle del filtro low
pass, solamente invertiti.

Rappresentazione spaziale dei filtri high pass


nel dominio della frequenza
(a) Ideale
(b) Butterworth
(c) Gaussiano

Ora vediamoli più in dettaglio.

Filtri high pass ideali


Un filtro high pass ideale 2-D IHPL è definito:

dove D0 come al solito è la frequenza di taglio.


Il filtro high pass porta a zero tutte le frequenze all’interno del cerchio di raggio D0 e lascia passare, senza
attenuarle, tutte le frequenze esterne. Nella pratica non è fisicamente realizzabile.
Filtri high pass di Butterworth
Un filtro high pass di Butterworth 2-D BHPF di ordine n con frequenza di taglio uguale a D0 è definito:

Come nel caso dei filtri low pass, i filtri high pass di Butterworth hanno dei risultati più tenui rispetto ai filtri
high pass ideali.

Filtri high pass gaussiani


La funzione di trasferimento del filtro high pass gaussiano GHPF, la cui frequenza di taglio è posta a distanza
D0 dal centro del rettangolo della frequenza è data da:

I risultati ottenuti sono più tenui di quelli dei precedenti due filtri.

Vediamo un esempio dove i tre filtri appena visti vengono applicati alla stessa immagine:

Prima riga: risultati del filtraggio high pass utilizzando un filtro


ideale con D0 = 30, 60, 160.
Il ringing in (a) è così forte da ottenere delle linee di contorno
distorte e spesse.
In (c) i contorni sono più puliti e meno distorti e gli oggetti più
piccoli sono stati filtrati.
In generale il background si annulla in tutte le immagini
sottoposte a filtraggio high pass poiché è analogo alla
differenziazione del dominio spaziale.

Seconda riga: risultati del filtraggio high pass utilizzando un


BPHF di ordine 2, con D0 = 30, 60, 160.
I contorni sono molto meno distorti rispetto a quelli del
filtraggio ideale, anche per valori più piccoli della frequenza di
taglio.
Le prestazioni del filtro ideale e di Butterworth sono simili sui
piccoli oggetti, in quanto le dimensioni nell’area centrale sono
simili. Con il BPHF però la transizione verso i valori più alti delle
frequenze di taglio è più graduale.

Terza riga: risultati del filtraggio high pass utilizzando un GPHF


con D0 = 30, 60, 160.
I risultati ottenuti sono più tenui di quelli dei precedenti filtri.
Il filtraggio degli oggetti più piccoli e delle sottili barre
verticali è più chiaro con il filtro gaussiano.

Il laplaciano nel dominio della frequenza


Il metodo laplaciano può essere implementato nel dominio della frequenza utilizzando il filtro:

o, rispetto al centro del rettangolo della frequenza, utilizzando il filtro:

L’immagine laplaciana quindi è ottenuta come:

dove F(u, v) è la DFT di f(x, y).


L’enhancement è ottenuto utilizzando l’equazione:

Le differenze tra f e il suo operatore laplaciano devono essere trasferite in range comparabili, questo viene
fatto normalizzando i valori di f(x, y) nel range [0, 1] (prima di calcolare la sua DFT) e dividere per
il suo valore massimo, che condurrà il risultato nel range [-1, 1].

Unsharp masking, filtraggio highboost e filtraggio di enfasi dell’alta frequenza


L’espressione vista nel capitolo 3 che indica l’unsharp masking quando k=1 e il filtraggio highboost quando
k>1, è possibile esprimerla con termini del dominio della frequenza i cui calcoli comprendono un filtro low
pass:

È possibile sostituire il filtro low pass con un filtro high pass:

L’espressione all’interno delle parentesi quadre è chiamata filtro di enfasi dell’alta frequenza. I filtri high
pass, come abbiamo già visto precedentemente, riducono a zero il termine dc, riducendo l’intensità media
nell’immagine filtrata a zero. Invece il filtro di enfasi dell’alta frequenza non riscontra questo problema in
quanto gli viene aggiunto il valore 1 (questo valore 1 può essere sostituito da un termine che
specifica la distanza dall’origine). La costante k controlla la proporzione delle alte frequenze che
influenzano il risultato finale.

Filtraggio omomorfico
Il filtraggio omomorfico è un filtraggio che opera nel dominio della frequenza e quindi utilizza la
Trasformata di Fourier. Questo tipo di filtraggio si basa sui concetti dell'illuminazione e della riflettanza per
andare a migliorare l'aspetto dell'immagine effettuando operazioni di compressione dei range dell'intensità
e miglioramento del contrasto.
Ciò è possibile perché un'immagine può essere espressa come prodotto delle componenti di illuminazione
i(x,y) e riflettanza r(x,y):

questa equazione non può essere utilizzata direttamente nel dominio della frequenza perché la trasformata
di Fourier di un prodotto non è uguale al prodotto delle trasformate. Per poter operare nella frequenza è
necessario separare le componenti di illuminazione e riflettanza, in modo tale che il filtro possa operare
separatamente sulle due componenti (ad operare sulle due componenti separatamente è la funzione del
filtro omomorfico H(u, v), che tratta le componenti a bassa e alta frequenza in modo differente); il risultato
finale di output sarà dato da:

I passi fondamentali per arrivare a questo risultato sono i seguenti:


Il concetto fondamentale legato a questo tipo di filtraggio è che nel dominio spaziale la componente di
illuminazione è caratterizzata da lente variazioni spaziali, mentre la componente di riflettanza tende a
variare bruscamente soprattutto nei punti di separazione di oggetti differenti. Queste caratteristiche
portano ad associare le basse frequenze della trasformata di Fourier con l'illuminazione e le alte frequenze
con la riflettanza.
Quindi per ottenere una compressione del range dinamico e un miglioramento del contrasto bisogna
amplificare gli effetti dovuti alle alte frequenze(riflettanza) e attenuare gli effetti dovuti alle basse
frequenze(illuminazione).
Capitolo 5
RESTAURO E RICOSTRUZIONE DI IMMAGINI

La differenza tra il restauro e il miglioramento (enhancement) delle immagini è che il miglioramento è un


processo soggettivo, mentre il restauro è un processo oggettivo, che cerca di riparare un’immagine
danneggiata (o degradata) facendo uso di una conoscenza a priori del fenomeno che ha provocato il
degrado. Le tecniche di restauro quindi modellano il processo di degrado e cercano di generare il processo
inverso che permette di ricostruire l’immagine originale.
Il processo di degrado/restauro dell’immagine è il seguente:

Quindi abbiamo un’immagine iniziale di input f(x, y) che tramite una funzione di degrado insieme a del
rumore additivo diventa un’immagine degradata g(x, y). Data g(x, y), della conoscenza a priori sulla
funzione di degrado H e sul rumore η(x,y) l’obiettivo del restauro è quello di ottenere una stima
dell’immagine originale.
Se H è un processo lineare invariante per posizione, l’immagine degradata nel dominio spaziale è:

Dove h(x,y) è la rappresentazione spaziale della funzione di degrado.


La convoluzione nel dominio spaziale equivale a una moltiplicazione nel dominio della frequenza, quindi
l’equazione precedente, nel dominio della frequenza, diventa:

dove i termini in maiuscolo sono le trasformate di Fourier dei termini del dominio spaziale.

Modelli di rumore
Come abbiamo già detto le immagini sono degradate per via della presenza di rumore, quindi Il rumore
nelle immagini è una sorta di "disturbo" che peggiora la qualità dell'immagine, cioè ne diminuisce il
contenuto informativo e visuale.
Il rumore ha origine durante le fasi di acquisizione e/o trasmissione. Durante l'acquisizione ad esempio i
fattori che determinano la presenza di rumore possono essere: la qualità dell'illuminazione in una scena, la
qualità del sensore, oppure la temperatura del sensore, ecc. Il rumore può essere introdotto durante la
trasmissione a causa della presenza di alcune interferenze sul canale, cosa che può avvenire ad esempio se
le immagini vengono trasmesse tramite wireless.
I principali tipi di rumore additivo, nel dominio spaziale, che ci interessano sono i seguenti:

rumore gaussiano (o normale): viene molto utilizzato nella


pratica. La PDF di una variabile casuale gaussiana z è data
da:

dove z è l’intensità, è il valore medio, σ la deviazione


standard.
rumore uniforme: la PDF di questo rumore è data:

la media è:

la varianza è:

rumore impulsivo (sale e pepe): nell'immagine in cui è presente questo tipo di rumore si possono
notare dei puntini neri e dei puntini bianchi oppure solo uno dei due tipi.
La definizione corretta del rumore Sale e Pepe è Rumore a Impulsi Bipolare, ma viene chiamato
sale e pepe per via della somiglianza con i granuli sale-e-pepe che sono distribuiti casualmente
nell'immagine.
Solitamente il rumore ad impulsi è presente quando si
verificano transizioni veloci durante il processo di imaging.

La densità di probabilità(PDF) di questo tipo di rumore è data


da:

Quindi se b>a apparirà come un punto chiaro nell'immagine,


mentre se a>b allora comparirà come un punto scuro. Nel
caso in cui Pa o Pb sono nulli allora il rumore viene definito Unipolare, cioè o solo Sale o solo Pepe
per via della presenza di soli puntini bianchi o soli puntini neri.
I puntini bianchi e neri sono puri, quindi avranno il valore di intensità minore (0 nero) e maggiore
(255 bianco) dell'immagine (non saranno gli unici pixel ad avere valore minore o maggiore, dipende
da che tipo di immagine abbiamo), quindi nell'istogramma alle estremità avremo o dei picchi o
comunque dei valori aggiuntivi (dipende sempre dal tipo di immagine che abbiamo).
Solitamente il filtro più efficace con il rumore Sale e Pepe è il filtro mediano, che nel caso di rumori
casuali è più efficace rispetto ai filtri di smoothing perché sfoca di meno l'immagine. Questo filtro è
efficace sia col rumore Bipolare sia Unipolare.
Il filtro mediano sostituisce il valore di un pixel con il mediano dei livelli di intensità nel suo intorno.

Vediamo qualche immagine di esempio dei rumore appena elencati:


Rumore Periodico
Un tipo particolare di rumore è quello periodico che deriva solitamente da interferenze elettriche o
elettromeccaniche presenti durante l'acquisizione. Questo tipo di rumore è ridotto in modo efficace
utilizzando il filtraggio nel dominio della frequenza. La trasformata di Fourier di una sinusoide pura è una
coppia di impulsi coniugati localizzati alle frequenze coniugate dell’onda del seno, quindi se l'ampiezza
dell’onda sinusoidale nel dominio spaziale è abbastanza pronunciata nello spettro dell’immagine troviamo
una coppia di impulsi per ciascuna onda presente nell’immagine. In parole povere il rumore periodico si
presenta come picchi concentrati di energia nel dominio di Fourier, nelle posizioni corrispondenti alle
frequenze dell’interferenza periodica.

Ci sono tre modi per stimare i parametri del rumore periodico:


ispezionando lo spettro di Fourier dell’immagine, analizzando i picchi visivamente
agire sulle periodicità delle componenti del rumore direttamente dall’immagine
analisi automatica quando i picchi di rumore sono molto pronunciati o si conosce a priori la
posizione delle componenti in frequenza dell’interferenza

Vediamo due tipi di filtri che permettono di ridurre il rumore periodico (che operano nel dominio delle
frequenze):
filtri band reject:
è un filtro stretto e preciso che viene utilizzato quando la posizione delle componenti del rumore
nel dominio della frequenza è più o meno nota. I risultati ottenuti con questo filtro non possono
essere ottenuti nel dominio spaziale tramite maschere di convoluzione.

filtri band pass:


esegue l'operazione opposta del filtro band reject, quindi toglie anche dettagli importanti
dall’immagine; risulta efficace quando la componente rumore è concentrata su specifiche bande di
frequenza.
Si ottiene tramite la seguente equazione:

Vediamo un esempio:

(a) Immagine corrotta da rumore sinusoidale


(b) Spettro (ogni paio di impulsi coniugati corrisponde ad
un’onda del seno)
(c) Filtro band reject di Butterworth
(d) Risultato del filtraggio
Restauro in presenza solo di rumore – filtraggio spaziale
Nel caso in cui l'immagine sia deteriorata a causa della sola presenza di rumore additivo, allora dobbiamo
utilizzare il filtraggio spaziale.
Ci sono vari tipi di filtri, vediamone qualcuno:

filtri spaziali di media


filtro di media aritmetica:
ha lo scopo di attenuare le variazioni locali di un’immagine riducendone il rumore. In pratica calcola
il valore medio dell’immagine corrotta g(x,y) nell’area definita da Sxy, che è l’insieme delle
coordinate in un intorno di dimensioni mxn centrato sul punto (x,y). Il valore dell’immagine
restaurata nel punto (x,y) è la media aritmetica calcolata utilizzando i pixel nella regione Sxy, in
formula:

filtro di media geometrica:


raggiunge uno smoothing simile a quello del filtro di media aritmetica, ma porta ad una minore
perdita di quantità di dettagli.
Ogni pixel restaurato è dato dal prodotto dei pixel nella finestra della sottoimmagine, elevato alla
potenza di 1/mn.

filtri basati sulle statistiche d’ordine:


filtri spaziali la cui risposta si basa sull’ordinamento (posizione) dei valori dei pixel contenuti nell’area
dell’immagine inglobata al filtro.

filtro mediano:
sostituisce il valore di un pixel con il mediano dei livelli di intensità nel suo intorno:

Sono molto potenti in presenza di rumore casuale (soprattutto rumore a impulsi bipolare e
unipolare), poiché riducono di molto il rumore e sfocano meno rispetto ad altri filtri spaziali.
Ripetuti passaggi di questo filtro sfocano l'immagine ulteriormente, quindi sarebbe meglio limitare
il numero di applicazioni successive.
Da notare che è efficace col rumore a impulsi se la densità spaziale del rumore non è troppo ampia,
cioè deve essere minore di 0,2.

filtri massimo e minimo:


il massimo si ottiene utilizzando il 100-esimo valore percentile:

Serve per trovare i punti più chiari di un’immagine e permette di ridurre il rumore pepe avendo
questo rumore valori molto bassi.

il minimo invece si ottiene utilizzando il primo valore percentile:


Serve per trovare i punti più scuri di un’immagine e permette di ridurre il rumore sale avendo
questo rumore valori molto alti.

filtro di media alpha-trimmed (alfa-bilanciato):


è utile quando nell’immagine abbiamo forme di rumore multiple. Viene utilizzato quando vogliamo
cancellare i d\2 più bassi e d\2 più alti valori di intensità di g(s,t) nell’intorno Sxy. Assumiamo che
gr(s,t) rappresenti i rimanenti mn-d pixel; il nostro filtro è formato dalla media di questi pixel
rimanenti:

filtri adattivi
sono più potenti, ma di maggiore complessità.
vediamone due esempi:

filtro adattivo locale di riduzione del rumore:


si basa sulla media e sulla varianza in quanto sono legate all’aspetto di un’immagine, infatti la
media fornisce la misura dell’intensità media nella regione in cui viene calcolata e la varianza
fornisce una misura di contrasto.
L'espressione che caratterizza questo tipo di filtro è:

dove g(x,y) è il valore dell’immagine rumorosa in (x,y); la varianza del rumore di cui è affetta
f(x,y) per generare g(x,y); mL la media locale dei pixel in Sxy; la varianza locale dei pixel in Sxy.
Il risultato che restituisce dipende dal valore delle due varianze.

filtro mediano adattivo:


riesce a gestire il rumore a impulsi anche con probabilità maggiori di 0,2. Un’altra caratteristica è
che preserva i dettagli mentre riduce il rumore non a impulsi; quindi entrambe cose che il filtro di
media tradizionale non riesce a fare.
Questo filtro cambia le dimensioni di Sxy, durante l'operazione di filtraggio, al verificarsi di
determinate condizioni.

Stima della funzione di degrado


La stima della funzione di degrado serve per restaurare un’immagine, questo processo viene chiamato
deconvoluzione cieca, a causa del fatto che la vera funzione di degrado è raramente nota.
E' possibile stimare la funzione di degrado citata prima in tre modi:

1. stima mediante osservazione diretta:


partendo dall’ipotesi che l'immagine sia stata degradata da un processo lineare invariante per
posizione, si può cercare di calcolare H raccogliendo informazioni dall’immagine stessa.
Quindi:

dove è la sottoimmagine ed la sottoimmagine elaborata, cioè la nostra stima


dell’immagine originale in quell’area.
2. stima mediante sperimentazione:
lo scopo è quello di ottenere la risposta all’impulso del degrado acquisendo un impulso utilizzando
gli stessi sistemi; poiché, come già visto in precedenza, un sistema lineare invariante spazialmente è
completamente caratterizzato dalla sua risposta all’impulso. L'impulso è simulato da un punto di
luce, più luminoso possibile per ridurre gli effetti del rumore a valori trascurabili. L'equazione della
stima quindi è:

dove G è la trasformata di Fourier dell’immagine osservata e A una costante che descrive la forza
dell’impulso.

3. stima tramite modelli:


lo scopo è quello di derivate un modello matematico che parte da principi di base. Ad esempio si
può tenere conto delle condizioni ambientali che provocano i vari tipi di degrado, tenendo conto
delle caratteristiche fisiche della turbolenza atmosferica.

Filtraggio Inverso
Una volta stimata la funzione di degrado possiamo restaurare l'immagine degradata tramite il filtraggio
inverso diretto. Questo metodo calcola una stima , della trasformata dell’immagine originale
dividendo la trasformata dell’immagine degradata per la funzione di degrado:

L'equazione si può scrivere anche in questo modo:

dove notiamo che pur conoscendo la funzione di degrado non riusciamo a ripristinare l'immagine non
degradata, perche N(u,v) non è noto.
Inoltre se la funzione di degrado ha valori nulli o molto piccoli il rapporto domina rispetto
al valore di . Per risolvere questo problema si limitano le frequenze del filtro a valori vicini
all’origine, perche H(0,0) è solitamente il valore più alto di H(u,v) nel dominio della frequenza; quindi
limitando l'analisi a frequenze vicine all’origine riduciamo la probabilità di incontrare valori nulli.

Filtraggio che minimizza l'errore quadratico medio (filtro di Wiener)


Questo tipo di filtraggio ingloba la funzione di degrado e le caratteristiche statistiche del rumore nel
processo di restauro.
Il metodo considera le immagini ed il rumore come variabili casuali e cerca di trovare un valore
dell’immagine non corrotta f tale che l'errore quadratico medio tra di essi sia minimo.
Si assume che il rumore e l'immagine non siano correlate, che l’uno o l’altra abbia media nulla e che i livelli
di intensità nella stima siano una funzione lineare dei livelli nell’immagine degradata.
Il filtro di Wiener non presenta lo stesso problema del filtro inverso con degli zeri nella funzione di degrado,
a meno che l'intero denominatore sia zero per gli stessi valori di u e v.
L'immagine restaurata nel dominio spaziale è data dalla trasformata di Fourier inversa del valore nel
dominio della frequenza .
Se il rumore è zero, allora lo spettro di potenza del rumore si annulla e il filtro di Wiener si riduce al filtro
inverso.

Il rapporto segnale-rumore (SNR) è una delle misure che si basano sullo spettro di potenza del rumore e
dell’immagine non degradata.
Questo rapporto fornisce una misura del livello di informazione che trasporta la potenza del segnale
(immagine originale non degradata) al livello della potenza del rumore.
Nel dominio spaziale è possibile definire il rapporto segnale-rumore considerando l’immagine restaurata
come un “segnale” e la differenza tra questa immagine e l’originale come rumore.

Filtraggio ai minimi quadrati vincolati


Il problema del filtro di Wiener è che H(u, v) e lo spettro dell’immagine non degradata e del rumore devono
essere noti, mentre il filtraggio ai minimi quadrati vincolati richiede soltanto di conoscere, oltre ad H(u, v),
la media e la varianza del rumore e permette di ottenere un risultato ottimale per ogni immagine a cui è
applicato.
Possiamo esprimere:

In forma matriciale:

Se l’immagine ha MxN pixel, allora g è un vettore di lunghezza MxN ottenuto concatenando i pixel di
; η è un vettore di lunghezza MxN ottenuto concatenando i pixel di ; H è una matrice di
dimensione (MN)x(MN).
Potremmo quindi arrivare alla conclusione che il problema del restauro possa essere ridotto a semplici
manipolazioni matriciali, ma sfortunatamente non è così, in quanto le dimensioni dei vettori e delle matrici
diventano troppo grandi.
La caratteristica centrale di questo metodo è la sensibilità di H al rumore; un modo per ridurre questa
sensibilità è rendere il restauro ottimale tramite una misura della sfocatura, come ad esempio la derivata
seconda di un’immagine cioè il laplaciano.
Per essere significativo, il restauro deve essere limitato dai parametri dei problemi da affrontare. Quindi si
vuole trovare il minimo di una funzione criterio C definita come:

soggetta ai vincoli:

dove è il valore dell’immagine non degradata.


La soluzione nel dominio della frequenza è data dall’espressione

dove è un parametro che deve essere regolato in modo tale che venga soddisfatto il vincolo mostrato
sopra; è la trasformata di Fourier della funzione

che è appunto l’operatore laplaciano.


Il parametro è un valore scalare, mentre il valore K, presente nel filtraggio di Wiener, è
un’approssimazione del rapporto di due funzioni non note nel dominio della frequenza; questo rapporto
difficilmente è costante. Quindi basandosi sulla scelta manuale di si riesce a ottenere una stima più
accurata dell’immagine degradata.
In generale, i filtri di restauro determinati in automatica portano a risultati inferiori rispetto alla regolazione
manuale dei parametri del filtro.

Filtro di media geometrica


Questo filtro è la generalizzazione del filtro di Wiener. Contiene due costanti α e β reali positive; al variare
di queste due variabili otteniamo:
α = 0 diventa filtro di Wiener parametrico
α = 1 diventa filtro inverso
β = 1 diventa filtro di Wiener standard
Capitolo 6
ELABORAZIONE DI IMMAGINI A COLORI

Il colore viene utilizzato nelle immagini digitali per due motivi principali:
è un descrittore che semplifica l’identificazione di un oggetto e la sua estrazione da una scena
gli uomini riescono a distinguere migliaia di gradazioni di colore e di intensità, in confronto a solo
due dozzine di tonalità di grigio

Le due principali aree di interesse sono:


elaborazione full color: quando le immagini vengono acquisite con un sensore full-color, come uno
scanner o una macchina fotografica digitale
elaborazione a falsi colori: quando si assegna un colore a particolari valori di intensità
monocromatici o appartenenti ad una gamma di intensità. Questo tipo di elaborazione viene fatto
per semplificare l’analisi delle immagini

Alcune delle tecniche utilizzate per l’elaborazione in toni di grigio possono essere utilizzate anche
nell’elaborazione a colori, mentre altre tecniche devono essere riformulate.

Lo spettro del colore, in full-color cioè a piena risoluzione cromatica, è formato da sei regioni che non
terminano bruscamente, ma ogni colore sfuma gradualmente nel successivo. Questo spettro è creato dal
fatto che un prisma di vetro attraversato da un raggio di sole non crea un raggio di luce bianco, ma uno
spettro di colori dal viola al rosso.

I colori che gli essere umani percepiscono in un oggetto sono determinati dalla natura della luce riflessa
dell’oggetto. La luce visibile è composta da una banda relativamente stretta di frequenze nello spettro
elettromagnetico [0.43 – 0.79µm].

La luce acromatica (senza colore) ha come unico attributo l’intensità. La luce cromatica invece copre lo
spettro elettromagnetico da 400 a 700 nm.
La qualità della luce cromatica viene descritta tramite tre quantità:
radianza: quantità totale di energia che fuoriesce dalla fonte di luce
luminanza: da una misura della quantità di energia percepita dall’osservatore, misurata in lumen
luminosità: descrittore soggettivo impossibile da misurare

Come abbiamo visto nel capitolo 2 i responsabili della visione del colore sono i coni, che possono essere
suddivisi in tre categorie percettive:
65% sensibile alla luce rossa
33% sensibile alla luce verde
2% sensibile alla luce blu

infatti i colori vengono visti come combinazioni variabili dei colori primari RGB. Le tre componenti RGB da
sole non possono però generare tutti i colori dello spettro. I colori primari possono essere mescolati per
produrre i colori secondari: magenta, giallo e ciano. I colori primari sono usati spesso in modo additivo,
quelli secondari in modo sottrattivo.

Le tre caratteristiche utilizzate per distinguere un colore da un altro:


Luminosità: descrittore soggettivo impossibile da misurare, che ingloba la nozione acromatica di
intensità
Tonalità: attributo associato alla lunghezza d’onda dominante in un insieme di onde luminose, cioè
dell’immagine
Saturazione: purezza relativa della quantità di luce bianca mescolata a una data tonalità. Il grado di
saturazione è inversamente proporzionale alla quantità di luce bianca aggiunta.
I colori puri dello spettro sono pienamente saturi, gli altri sono meno saturi.
Tonalità e saturazione prese insieme vengono chiamate cromaticità.

I valori tristimolo corrispondono alle quantità di RGB rosso, verde, blu necessarie per formare un dato
colore; queste quantità sono indicate con X, Y, Z. Un colore viene specificato tramite i suoi coefficienti
tricromatici definiti:

quindi x + y + z = 1.
Per ogni lunghezza d'onda di luce nello spettro visibile, i valori tristimolo necessari per produrre il colore
corrispondente a quella lunghezza d'onda possono essere ottenuti dalle tabelle o curve che sono state
compilate a seguito di sperimentazioni.

Il diagramma di cromaticità è un altro metodo per specificare un certo colore come funzione di x(rosso) e
y(verde). Per ogni valore di x e y, il corrispondente valore di z(blu) si ottiene dall'equazione z = 1-(x+y).
In generale se un triangolo interno al diagramma ha i vertici sui tre colori primari fissi RGB (rosso, verde,
blu): ogni colore all'interno del triangolo o sul bordo è ottenibile da una combinazione dei tre colori iniziali.
Da ciò comprendiamo che con i tre colori primari fissi non si può ottenere tutta la gamma di colori presente
nel diagramma di cromaticità.

Il diagramma di cromaticità ha la seguente forma:

I colori che si trovano sul bordo del diagramma sono pienamente saturi, man mano che ci si "addentra" nel
diagramma aumenta la quantità di luce bianca presente e diminuisce quindi la saturazione del colore.
Oltre al triangolo è possibile definire altre figure interne utili, come ad esempio un segmento lineare che
unisce due punti qualsiasi nel diagramma definisce tutte le diverse variazioni di colore che possono essere
ottenute mediante combinazione lineare dei due colori.

Il Gamut (o gamut dei colori) è la gamma di colori racchiusa all'interno di una certa figura geometrica,
all'interno del diagramma di cromaticità, che caratterizza un certo dispositivo, ad esempio una stampante a
colori o un monitor RGB.
Quindi ad esempio in questa figura:

Il triangolo in dettaglio mostra una tipica gamma di colori prodotta dai monitor RGB.
La regione irregolare all'interno del triangolo invece è rappresentativa della serie di colori dei dispositivi di
stampa a colori ad alta qualità. Il bordo del range di stampa a colori è irregolare perché la stampa a colori
utilizza una combinazione di miscelazioni additive e sottrattive di colori.

Modelli di Colore
I modelli di colore servono per facilitare e standardizzare la specifica dei colori. E’ un sistema di coordinate
e di un sottospazio all’interno di quel sistema dove ogni colore viene rappresentato da un singolo punto.
La scelta del modello colore dipende dal tipo di applicazione, anche se sono più orientati all’hardware ed
alle applicazioni di modellazione del colore:
RGB: monitor a colori
CMY(K): stampanti a colori
HSI: corrisponde meglio con il modo in cui gli uomini interpretano i colori

Modello RGB
Nel modello RGB ogni colore è rappresentato dalle sue componenti primarie spettrali di rosso, verde e blu,
infatti le immagini rappresentate nel modello RGB sono formate da tre immagini, una per ogni colore
primario. Si basa su un sistema di coordinate cartesiane, mentre il suo sottospazio è il seguente cubo:
i valori primari RGB si trovano su tre spigoli; i colori secondari (ciano, magenta e giallo) sono in altri tre
spigoli; il nero è all’origine e il bianco si trova sullo spigolo più distante dall’origine.
I toni di grigio (che hanno uguale valore RGB) vanno dal nero al bianco lungo la linea che unisce i due punti.
I diversi colori invece sono punti all’interno o sulla superficie del cubo e vengono definiti in modo vettoriale.
La profondità del pixel (pixel depth) è il numero di bit utilizzato per rappresentare ogni pixel nello spazio
RGB.
I colori RGB sicuri sono un sottoinsieme di colori dei quali la riproduzione fedele è indipendente dalle
capacità dell’hardware. Il numero minimo di colori che possono essere riprodotti fedelmente da qualsiasi
sistema è 256, ma 40 di questi vengono processati in modo diverso dai vari sistemi operativi, mentre i
rimanenti 216 sono comuni alla maggior parte dei sistemi, quindi sono diventati gli standard di fatto dei
colori sicuri. Vengono utilizzati quando si vuole che i colori visti dalla maggior parte delle persone siano gli
stessi. Ognuno di questi 216 colori sicuri è formato da tre valori RGB, ma ogni valore può essere solo 0, 51,
102, 153, 204, 255.
Le facce del cubo che rappresenta i colori sicuri sono le seguenti:

Nel cubo corrispondente i colori sicuri sono solo nei piani in superficie (infatti sono le facce). Ogni piano ha
36 colori e l’intera superficie del cubo è coperta da 216 diversi colori.
Concludendo quindi questo modello è utile per la creazione di immagini a colori, ma non per la descrizione
del colore.

I modelli CMY e CMYK


Questo modello serve per i dispositivi di stampa a colori che richiedono input di dati CMY o applicano una
conversione da RGB a CMY con la seguente operazione:

Dove è richiesto che i valori vengano normalizzati nel range [0, 1].
Girando l’espressione è possibile dal modello CMY ottenere i valori RGB.
Il modello CMYK (che aggiunge un quarto colore: nero) viene utilizzato per poter stampare un vero nero,
che non è possibile ottenere con uguali quantità di pigmenti primari (ciano, magenta, giallo), in quanto
producono un colore simile al nero.
Il modello HSI
I modelli visti finora non sono molto adatti a descrivere i colori in termini pratici per l’interpretazione
umana, per questo motivo è stato introdotto il modello HSI che descrive i colori in termini di tonalità,
saturazione ed intensità, quindi si basa su descrizioni dei colori più naturali e intuitive. Il modello divide la
componente intensità dalle informazioni relative al colore (tonalità, saturazione) di un’immagine a colori.
Questi due cubi permettono di confrontare il modello RGB con quello HSI:

Notiamo che:
l’intensità si trova lungo la linea che unisce i due vertici bianco e nero, che è verticale ed aumenta
lungo questo asse verticale.
Per poter determinare la componente di intensità di ogni punto colore, dobbiamo far passare un
piano perpendicolare all’asse di intensità che contenga il punto. L’intersezione del piano con l’asse
di intensità da un punto con valore di intensità nella gamma [0, 1].
La componente di intensità è data da:

la saturazione di un colore aumenta in funzione della distanza dall’asse di intensità; nello specifico
è la lunghezza del vettore dall’origine a quel punto. L’origine è definita dall’intersezione del piano
colore con l’asse di intensità verticale.

la tonalità del punto è determinata dall’angolo rispetto a qualche punto di riferimento. Solitamente
un angolo di 0° dall’asse del rosso indica la tonalità 0 e la tonalità aumenta in senso orario a partire
da quel punto.

possiamo convertire qualunque punto RGB in un punto corrispondente nel modello HSI applicando
le formule geometriche.

il concetto più importante è che lo spazio HSI è rappresentato da un asse di intensità verticale e dal
luogo dei punti colore che giacciono su piani perpendicolari a questo asse. Dato che i piani si
muovono lungo l’asse di intensità su e giù, i bordi definiti da una intersezione di ogni piano con le
facce del cubo hanno una forma triangolare o esagonale.

la forma scelta per il piano HSI può essere un esagono, un triangolo, un cerchio, ma non è un
problema perché ognuna di queste forme può essere trasformata in una delle altre due attraverso
una trasformazione geometrica.
Riassumendo le componenti principali dello spazio HSI sono:
L’asse di intensità verticale
La lunghezza del vettore verso un punto colore
L’angolo che il vettore descrive con l’asse del rosso

Vediamo un’immagine di esempio che rappresenta la tonalità e la saturazione nel modello HSI:

Il punto è un punto colore


arbitrario.
L’angolo dall’asse rosso dà la
tonalità e la lunghezza del
vettore è la saturazione.
L’intensità di tutti i colori in
ognuno di questi piani è data
dalla posizione del piano
sull’asse di intensità verticale.

Elaborazione di immagini a falsi colori


L’elaborazione di immagini a falsi colori è un metodo che consiste nell’assegnare opportunamente
l’informazione colore ai valori di grigio. Il termine pseudo colore viene utilizzato per differenziare il processo
di assegnazione dei colori per immagini monocromatiche da quanto avviene per le immagini true color.
L’uso principale delle immagini a falsi colori si ha nel settore della visualizzazione e dell’interpretazione
visiva da parte dell’uomo di fenomeni a toni di grigio descritti da una o più immagini in sequenza.

Ripartizione delle intensità (slicing)


La ripartizione delle intensità (slicing) è un esempio di elaborazione di immagini a falsi colori.
Considerando una funzione 3D come quella in figura:

Questo metodo consiste nel porre dei piani paralleli al piano delle coordinate dell’immagine, quindi ogni
piano divide la funzione nell’area di intersezione. Successivamente si assegna un colore ad un lato del piano
ed un altro colore all’altro lato, quindi ogni pixel il cui livello di intensità si trova al di sopra del piano sarà
codificato con un colore e ogni pixel al di sotto del piano sarà codificato con un altro colore. Ai pixel che si
trovano sul piano stesso può essere assegnato arbitrariamente uno dei due colori.
Con questo metodo otteniamo un’immagine binaria il cui aspetto è controllato dalla posizione di li sull’asse
delle intensità.
Nel caso in cui vengano utilizzati più livelli allora la funzione di trasformazione assume una forma a scala
con più gradini.
Questo metodo diventa semplice ed efficace nel caso in cui siano noti i valori di intensità a priori.

Trasformazioni da intensità a colore


Un altro metodo nell’elaborazione di immagini a falsi colori è quello delle trasformazioni da intensità a
colore che consiste nell’attuare tre trasformazioni indipendenti sull’intensità di ogni pixel di input, quindi ci
basiamo sull’intensità non sulla posizione dei pixel. I tre risultati sono visualizzati separatamente nei canali
rosso, verde e blu. Alla fine del processo otteniamo un’immagine composta il cui contenuto di colore è
regolato dalla natura delle funzioni di trasformazione.

Fondamenti di elaborazione delle immagini full-color


I metodi di elaborazione di immagini full-color possono essere classificati in due categorie:
Ogni componente viene elaborata individualmente e poi si procede alla combinazione
dell’immagine a colori finale
Si lavora direttamente con i pixel a colori di input.

Dato che le immagini full-color hanno almeno tre componenti i pixel a colori sono dei vettori. Quindi
avremo ad esempio:

Dove le componenti di c sono le componenti RGB di un’immagine a colori in quel punto.


Le due categorie non sono sempre equivalenti, non danno sempre gli stessi risultati. Per fare in modo che
siano equivalenti bisogna soddisfare due condizioni:
1. Il processo deve essere applicabile sia a vettori che a valori scalari
2. L’operazione su ogni componente di un vettore deve essere indipendente dalle altre componenti

Trasformazioni di colore
Con il termine trasformazioni di colore di si riferisce alle tecniche di elaborazione delle immagini per singola
componente e non alle tecniche di conversione degli spazi colore.

Ripartizione di colore (slicing)


Il Color Slicing, come nel caso delle immagini in b/n, serve per evidenziare una gamma specifica di colori e
risulta utile per separare gli oggetti da ciò che li circonda.
L'idea è quella di visualizzare i colori di interesse in modo che emergano dallo sfondo ed utilizzare la
regione definita dai colori come maschera per ulteriori elaborazioni.
Ovviamente le trasformazioni a colori sono più complicate delle loro controparti in scala di grigio.
Un metodo semplice per ripartire un'immagine a colori è trasformare i colori al di fuori della gamma di
interesse in un colore neutrale non promittente.

Elaborazione di istogrammi
Le operazioni sugli istogrammi viste per le immagini in toni di grigio possono essere applicate anche alle
immagini a colori.
Ricordiamo che l’equalizzazione di istogrammi, come descritto nel capitolo 3, serve per produrre
un’immagine con un istogramma uniforme dei valori di intensità.
Come abbiamo visto prima però le immagini a colori sono formate da varie componenti, quindi bisogna
adattare la tecnica utilizzata in scala di grigio a più componenti e/o istogrammi. Per un istogramma
comunque è difficile equalizzare le componenti di un’immagine a colori indipendentemente, perché ciò
comporterebbe degli errori nel dominio del colore. La soluzione migliore è quella di lavorare nello spazio
HSI, nello specifico di distribuire uniformemente le intensità del colore, lasciando invariata la tonalità, cioè i
colori stessi. Questo metodo permette di migliorare la qualità di un’immagine andando a modificare
soltanto l’intensità e lasciando invariate saturazione e tonalità.

Segmentazione di immagini basata sul colore


La segmentazione, il processo che divide l’immagine in regioni, può essere applicato in due spazi colore:
Spazio a colori HSI:
si utilizza questo spazio quando si desidera segmentare un’immagine basandosi sul colore e si vuole
portare avanti l’elaborazione su singoli piani.
In questo spazio:
- la tonalità rappresenta bene il colore, quindi i suoi valori possono essere utilizzati per segmentare
l’immagine
- la saturazione è usata come immagine maschera per isolare ulteriori regioni di interesse rispetto
alla tonalità
- l’intensità è utilizzata di meno per la segmentazione in quanto non contiene informazioni
riguardanti i colori

Spazio colori RGB:


spazio nel quale si ottengono i risultati migliori. Dato un insieme di punti campione rappresentativo
dei colori di interesse è possibile ottenere una stima del colore medio che si vuole segmentare;
quindi l’obiettivo della segmentazione è quello di classificare ogni pixel RGB in una data immagine
come un colore appartenente alla gamma specificata o al di fuori di essa; per poter fare questo
confronto è necessario avere una misura di similarità, in questo caso si utilizza la distanza euclidea.

Individuazione di edge a colori


Uno degli strumenti principali che permettono di segmentare un’immagine è l’individuazione dei bordi
(edge). Nelle immagini in toni di grigio per trovare i bordi viene utilizzato il gradiente, ma in questo caso
non possiamo utilizzarlo perché non è definito per quantità vettoriali, quindi non possiamo calcolare il
gradiente sulle componenti RGB singole e poi usare il risultato per formare un’immagine a colori. Al
massimo possiamo utilizzarlo lavorando su una singola componente, sempre se ci interessa soltanto
individuare i bordi, perché se l’obiettivo è la precisione è necessaria una nuova definizione del gradiente
applicabile alle quantità vettoriali.
Siano r,g e b i vettori unitari lungo gli assi R, G e B dello spazio colore RGB e definiamo i vettori:
u e v sono vettori unici ottenuti dalla somma dei tre gradienti.
La direzione della percentuale massima di variazione di c(x,y) (cioè la variazione del gradiente percepita da
noi) è data dall’angolo:

Rumore nelle immagini a colori


Il rumore nelle immagini a colori può essere presente in ogni canale con le stesse caratteristiche, ma è
possibile anche che i singoli canali vengano interessati in maniera diversa. La causa principale, di avere
diversi livelli di rumore, è la differenza di illuminazione disponibile per ogni singolo canale.
Per eliminare il rumore tramite filtraggio di immagini full-color è possibile lavorare sulle singole immagini
componenti o direttamente nello spazio vettoriale a colori.
Le caratteristiche principali che emergono dalla presenza di rumore nello spazio RGB e HSI e nel passaggio
da uno all’altro sono:
in un’immagine a colori il rumore a grana è meno visibile rispetto che in un’immagine
monocromatica
le componenti di tonalità e saturazione sono fortemente degradate, a causa della non linearità
delle operazioni di coseno e minimo utilizzate per calcolare le due componenti dallo spazio RGB
la componente intensità risulta più sfocata rispetto alle tre immagini componenti RGB, il motivo è
che l’immagine dell’intensità è la media delle immagini RGB
quando si passa dallo spazio RGB a quello HSI se solo uno dei canali RGB è affetto da rumore, la
conversione in HSI distribuisce il rumore a tutte le immagini componenti, perché il calcolo delle
componenti HSI utilizza tutte le componenti RGB

In questo esempio vediamo le componenti HSI di un’immagine rumorosa:

(a) tonalità
(b) saturazione
(c) intensità
Capitolo 8
COMPRESSIONE DI IMMAGINI

La compressione delle immagini è il processo che riduce la quantità di dati necessari per rappresentare
un’immagine, cioè una certa quantità di informazione. La distinzione tra dati e informazione è che i dati
rappresentano l'informazione; visto che differenti quantità di dati possono rappresentare la stessa quantità
di informazione, allora le rappresentazioni che contengono informazioni irrilevanti o ripetute contengono
dati ridondanti.
Se supponiamo che b e b' denotano il numero di bit in due rappresentazioni della stessa informazione, la
ridondanza relativa dei dati R della rappresentazione con b bit è:

dove C è il rapporto di compressione, o coefficiente di ridondanza, ed è definito come:

dove b è il file originale, mentre b' è il file compresso.


La compressione si realizza quando la ridondanza viene ridotta o eliminata.

Solitamente le immagini risentono di tre tipi di ridondanza:

1- Ridondanza della codifica (Coding Redundancy):


i codici a 8 bit che vengono utilizzati per rappresentare le intensità delle immagini contengono più bit del
necessario.
Più in dettaglio un codice è un sistema di simboli (lettere, numeri, bit) utilizzati per rappresentare una certa
quantità di informazione. Ad ogni pezzo di informazione è assegnata una sequenza di simboli codificati,
chiamati codeword. Il numero di simboli che costituisce ciascun codice è la sua lunghezza.

Come abbiamo già visto nel capitolo 3 se assumiamo che una variabile discreta casuale rk rappresenti le
intensità dell’immagine MxN e che pr(rk) sia la probabilità di ciascuna rk avremo:

k=0,1,2,…,L-1

dove nk è il numero di volte che l’intensità rk appare nell’immagine.


Ora possiamo aggiungere che se il numero di bit utilizzati per rappresentare ciascun valore rk è l(rk), il
numero medio di bit richiesti per rappresentare ciascun pixel è:

Quindi la lunghezza media dei codeword assegnati ai valori di intensità è ottenuta sommando i prodotti del
numero di bit utilizzati per rappresentare ciascuna intensità per la probabilità che quella data intensità sia
presente; il numero totale di bit richiesti per rappresentare un’immagine MxN è MNLavg.
Questo tipo di ridondanza è quasi sempre presente quando le intensità di un’immagine sono rappresentate
utilizzando un codice binario naturale, in quanto una codifica binaria assegna lo stesso numero di bit sia ai
valori più probabili che a quelli meno probabili, introducendo una ridondanza nella codifica dei dati. Questo
avviene perché alcune intensità sono molto più probabili di altre.
2- Ridondanza spaziale e temporale (Interpixel Redundancy):
nella maggior parte delle immagini i pixel sono relazionati spazialmente (ciascun pixel è simile ai pixel del
suo intorno o dipende da esso), quindi l'informazione è replicata inutilmente nei pixel correlati e
l’informazione contenuta in ogni singolo pixel è davvero piccola.
La ridondanza temporale invece è presente nei video.

La ridondanza spaziale può essere ridotta attraverso una rappresentazione più efficiente, ma non visiva,
chiamata mapping. Il mapping può essere di due tipi: reversibile se i pixel originali possono essere ricostruiti
senza errori a partire dall’insieme dei dati trasformati; irreversibile in caso contrario.
In dettaglio, nella rappresentazione dell’immagine sotto forma di sequenze di coppie run-length ciascuna
coppia individua l’inizio di una nuova intensità e il numero dei pixel consecutivi che condividono quel
valore. Quindi ciascuna linea di 256 pixel della rappresentazione originale è rimpiazzata in quella run-length
da un singolo valore di intensità a 8 bit e da un valore di lunghezza pari a 256.

Vediamo un esempio:

Le due immagini hanno istogrammi identici e la codifica run-


length può essere utilizzata per ridurre la ridondanza.
La correlazione tra i pixel deriva dalle relazioni geometriche
e strutturali degli oggetti presenti nell'immagine.
Il processo di codifica non altera il livello di correlazione tra
i pixel all’interno delle immagini.

3- Informazione irrilevante (Psychovisual Redundancy):


è quel tipo di informazione che nelle immagini è meno importante perché viene ignorata dal sistema visivo
umano e può essere eliminata in quanto non viene ridotta la percezione qualitativa dell'immagine. Questo
avviene perché il sistema visivo umano opera una media delle intensità e percepisce solo il valore medio e
ignora le piccole variazioni di intensità presenti.
Questo tipo di ridondanza si può eliminare perché l’informazione persa non è essenziale né per
l’elaborazione visiva né per il fine ultimo dell’immagine; questo tipo di rimozione viene definito
quantizzazione, cioè un’operazione non reversibile di mapping di un largo range di valori in input in un
numero limitato di valori in output.

(a) Immagine originale con 256 possibili livelli di


grigio
(b) Immagine ottenuta con una quantizzazione
uniforme a 16 livelli. Notiamo che si introducono
dei falsi contorni.
(c) Immagine ottenuta con la quantizzazione IGS
improbe gray-scale) che sfrutta le peculiarità del
sistema visivo umano.
Misurare l’informazione nelle immagini
La teoria dell’informazione ci aiuta a dire quanti bit sono realmente necessari per rappresentare
un’immagine, cioè qual è la più piccola quantità di dati sufficiente a descrivere un’immagine senza che
nessuna informazione vada persa.
Tutto parte dal fatto che la sorgente dell’informazione può essere modellata come un processo
probabilistico e può essere quindi oggetto di misure. Un evento casuale E con probabilità P(E) contiene

unità di informazione.
Se P(E) = 1 abbiamo un evento certo, quindi I(E) = 0 cioè nessuna informazione è associata all’evento. Non
c’è nessuna incertezza correlata all’evento, quindi nessuna informazione viene trasferita per “comunicare”
che l’evento è accaduto; si verifica sempre.
La base del logaritmo determina l’unità utilizzata per misurare l’informazione; noi utilizziamo la base 2,
infatti l’unità di informazione è il bit.

Data una sorgente di eventi casuali e statisticamente indipendenti (quindi una sorgente senza memoria), a
partire da un insieme discreto di eventi possibili {a1, a2, a3, …, aj} con probabilità {P(a1), P(a2),…,P(aj)}
l’informazione media per la sorgente di output, cioè l’entropia (di primo ordine), è data da:

Le aj sono i simboli di sorgente.


Se consideriamo un’immagine come output di una sorgente di intensità immaginaria senza memoria,
possiamo utilizzare l’istogramma dell’immagine per stimare le probabilità dei simboli della sorgente. Quindi
l’entropia diventa:

Otteniamo quindi l’informazione media della sorgente di intensità immaginaria in bit; importante ricordare
che non è possibile codificare i valori di intensità dell’immagine con meno di bit/pixel.
Dopo qualche esempio possiamo notare che il rapporto tra l’entropia e l’informazione in un’immagine è
tutt’altro che intuitivo, infatti ci possono essere casi in cui sembra sia quasi assente informazione visiva, ma
il valore dell’entropia è alto e viceversa, cioè valori bassi di entropia e molta informazione visiva.

Criteri di fedeltà
Per quantificare la natura e la quantità di informazione persa ci sono due criteri:

- Oggettivo:
misura l'errore tra l'immagine di input e quella di output. E' semplice e conveniente, ma si preferisce l'altro
criterio per via del fatto che alla fine le immagini vengono viste dalle persone.
Due esempi di misure di fedeltà sono:
1- L’errore quadratico medio (root-mean-square) tra due immagini, che viene calcolato utilizzando le
seguenti espressioni.
L’errore e tra e :

dove è un’approssimazione di , ottenuta dalla compressione e dalla successiva


decompressione dell’input.
L’errore totale tra le due immagini è dato da:

dove le immagini sono di dimensioni .


L’errore quadratico medio è dato dalla radice quadrata della media dell’errore al quadrato in una
matrice :

2- PSNR che normalizza l’errore medio quadratico rispetto alla distorsione massima in maniera tale da
poter meglio confrontare le prestazioni degli algoritmi di compressione su immagini differenti in
maniera più uniforme. Maggiore è il valore del PSNR maggiore è la qualità registrata.

I metodi per la valutazione della qualità possono essere classificati in base alla presenza di una maggiore o
minore disponibilità del segnale di riferimento, con il quale confrontare l’immagine distorta, nel seguente
modo:
FR (full reference): metrica di qualità nella quale si ha la completa disponibilità dell’immagine di
riferimento e quindi dove si può realizzare un confronto completo tra l’immagine distorta, della
quale si vuole conoscere la qualità, e l’immagine di riferimento.
NR (no reference): metrica di qualità nella quale non si ha alcuna informazione sull’immagine di
riferimento.
RR (reduced reference): metrica di qualità nella quale l’immagine di riferimento non è
interamente disponibile. Dall’immagine originale si estraggono solo alcune informazioni parziali
che vengono elaborate per fornire una valutazione della qualità dell’immagine distorta presa in
esame.

- Soggettivo:
è il criterio più appropriato e può essere fatto presentando un’immagine decompressa a un campione di
osservatori e, successivamente, effettuando la media delle loro valutazioni.
Vediamo un esempio di una possibile scala di valutazione:

Valore Valutazione Descrizione


1 Eccellente Un’immagine di estrema qualità che soddisfa al meglio i
desideri dell’osservatore.
2 Buona Un’immagine ad alta qualità, che soddisfa abbastanza
l’osservatore. L’interferenza è trascurabile.
3 Passabile Un’immagine di qualità accettabile. L’interferenza è
trascurabile.
4 Marginale Un’immagine di bassa qualità, che si spera di poter
migliorare. L’interferenza comincia ad essere visibile.
5 Inferiore Un’immagine di bassissima qualità, che si può ancora
guardare. L’interferenza è chiaramente presente.
6 Inutilizzabile Un’immagine pessima, impossibile da guardare.
Modelli di compressione di un’immagine
L’immagine mostra quali sono le componenti e le fasi principali del processo di compressione di
un’immagine:

Quindi le due componenti principali che formano un sistema di compressione di un’immagine sono
l’encoder e il decoder:

Processo di codifica o compressione


1. l’encoder (codificatore): esegue la compressione su di un’immagine di input f(x,y).
In dettaglio rimuove le ridondanze definite precedentemente attraverso tre operazioni
indipendenti:
a) Mapper: trasforma il segnale in un formato che riduce la ridondanza spaziale e temporale;
questa operazione è solitamente reversibile e può ridurre la quantità di dati richiesti per
rappresentare l’immagine.
b) Quantizzatore: riduce l’accuratezza dell’output del mapper in accordo a criteri di fedeltà
prestabiliti. In poche parole elimina l’informazione irrilevante dalla rappresentazione
compressa.
Questo processo è irreversibile, quindi in caso di compressione lossless di informazione il
quantizzatore non può essere presente e deve essere omesso.
c) Codificatore di simbolo (encoder di simbolo): genera un codice a lunghezza variabile o fissa
per rappresentare l’output del quantizzatore ed esegue il mapping dell’output secondo il
codice.
I codeword più brevi vengono assegnati ai valori di output del quantizzatore che risultano
essere più frequenti.
Con questi tre processi abbiamo eliminato le tre ridondanze presentate precedentemente.

Processo di decodifica o di decompressione


2. il decoder (decodificatore): esegue la decompressione di un’immagine compressa dall’encoder,
quindi genera un’immagine ricostruita .
Le componenti del decoder sono:
a) decodificatore di simbolo: esegue l’operazione inversa operata dal codificatore di simbolo.
b) mapper inverso: esegue l’operazione inversa del mapper dell’encoder.
La quantizzazione non è presente, e non può essere inclusa in un modello di decodifica, in quanto
ha come risultato una perdita irreversibile di informazione.

In base al risultato ottenuto alla fine del processo possiamo avere due tipi di sistemi:
- error free (o lossless): quando l’immagine ricostruita è uguale all’immagine f(x,y) di input. Questo tipo di
codifica abbiamo già detto che è obbligatoria in alcuni ambiti come quello medico, per non compromettere
l’accuratezza della diagnosi.
- lossy: quando l’immagine ricostruita in output è distorta.
Quel programma che è in grado di codificare e decodificare si chiama codec.
Metodi di base per la compressione

Codifica di Huffman
La codifica di Huffman è uno dei principali metodi di compressione. Quando si codificano i simboli di una
sorgente di informazione uno alla volta, permette di ottenere un codice ottimale.
I passi da seguire per ottenere la codifica sono:
creare una serie di riduzioni della sorgente ordinando le probabilità dei simboli, combinando i
simboli con probabilità più bassa e sostituendoli con un singolo simbolo nella riduzione di sorgente
successiva.
All’estrema sinistra un insieme di sorgenti di simbolo e le loro probabilità sono ordinate dall’alto al
basso in ordine decrescente.
Per formare la prima riduzione, le due probabilità
più in basso vengono combinate per formare un
simbolo composto; il simbolo composto e la sua
probabilità vengono posizionati nella prima
colonna della riduzione di sorgente in modo che le
probabilità della sorgente ridotta continuino ad
essere ordinate in modo decrescente.
Questo processo continua fino al raggiungimento di
una sorgente ridotta che possiede solo due simboli.

Codificare ogni sorgente ridotta cominciando dalla sorgente più piccola, procedendo fino alla
sorgente originale.
In una sorgente a due simboli il codice binario di lunghezza minima è costituito da 0 e 1.

Il codice ottenuto viene chiamato codice a blocco perché ciascuna sorgente di simboli viene mappata in una
sequenza fissa di simboli. Una volta ottenuto il codice, la codifica/decodifica si attua utilizzando la tabella
generata; infatti ogni sequenza di Huffman di simboli può essere decodificata esaminando i singoli simboli
che compongono la sequenza da sinistra a destra. Il codice è istantaneamente e unicamente decodificabile.
E’ istantaneo perché ogni codeword in una sequenza di simboli può essere decodificato senza fare
riferimento ai simboli successivi. E’ unicamente decodificabile perché ogni sequenza di simboli può essere
decodificata in un solo modo.

Procedura di Huffman per


l’assegnazione di un codice

Le ultime considerazioni sono che il metodo di Huffman non è banale se abbiamo un elevato numero di
simboli da codificare; inoltre quando le probabilità dei simboli della sorgente possono essere stimate a
priori, si può ottenere un codice ottimale attraverso codici di Huffman già calcolati, come avviene con le
codifiche JPEG e MPEG.
Codifica LZW (Lempel-Ziv-Welch)
Questo tipo di codifica assegna delle codeword a lunghezza fissa a sequenze di simboli a lunghezza
variabile. La caratteristica chiave di questa codifica è che non è necessaria una conoscenza a priori della
probabilità di occorrenza dei simboli che devono essere codificati.

I passi da seguire per ottenere la codifica sono:


All’inizio della codifica si costruisce un dizionario (codebook) contenente i simboli della sorgente da
codificare. Per le immagini monocromatiche a 8 bit alle 256 intensità (0,1,2…,255) vengono
assegnate le prime 256 parole del dizionario.
Quando l’encoder esamina sequenza dopo sequenza i pixel dell’immagine, le sequenze di intensità
che non sono nel dizionario vengono man mano posizionate nella locazione successiva inutilizzata.
La dimensione del dizionario è un parametro importante del sistema, infatti se è troppo piccolo il
rilevamento delle sequenze dei livelli di intensità combacianti sarà meno probabile; se è troppo
grande la dimensione delle codeword comprometterebbe le performance della compressione.
L’immagine viene codificata attraverso la visita dei suoi pixel da sinistra verso destra e dall’alto
verso il basso. Ciascun valore di intensità durante la visita è concatenato con una variabile chiamata
“sequenza attualmente riconosciuta”, che in principio è nulla o vuota. Il dizionario cerca ciascuna
delle sequenze concatenate:
- se la trova, la sostituisce con una nuova sequenza concatenata e riconosciuta.
In questo caso nessun codice di output è stato generato e il dizionario non si è alterato.
- se non la trova, l’indirizzo della sequenza attualmente riconosciuta è l’output del successivo valore
codificato, inoltre una sequenza concatenata ma non riconosciuta viene aggiunta al dizionario e la
sequenza attualmente riconosciuta viene inizializzata al valore corrente del pixel.

Dai passi necessari per effettuare la codifica emerge che la creazione del dizionario avviene
contemporaneamente alla codifica dei dati. Un decoder LZW genera un dizionario di decompressione
identico che decomprime simultaneamente lo stream di dati codificati.
Quando si verifica un overflow del dizionario (cioè si riempie completamente) è necessario iniziarne uno
nuovo opportunamente inizializzato.
Questa codifica quindi permette di comprimere un’immagine andando a determinare le numerose
ripetizioni delle sequenze di intensità.

Esempio di codifica LZW


Codifica a blocchi mediante trasformata
In questo tipo di codifica l’immagine viene divisa in piccoli blocchi non sovrapposti di uguale dimensione che
vengono elaborati in modo indipendente utilizzando una trasformata 2-D. Ogni blocco (o sottoimmagine)
viene mappato, tramite una trasformata lineare e reversibile (il nostro amico Fourier), in un insieme di
coefficienti della trasformata, che vengono poi quantizzati e codificati. Nella maggior parte dei casi molti
coefficienti hanno una piccola magnitudo, che può quindi essere scartata, introducendo una piccola
distorsione nell’immagine.

L’encoder quindi esegue quattro operazioni:


costruzione delle sottoimmagini: hanno dimensione nxn e vengono trasformate per generare
MN/n2 matrici di valori trasformati.
trasformazione: serve per decorrelare i pixel di ciascuna sottoimmagine, raccogliendo quanta più
informazione possibile in un ristretto numero di coefficienti della trasformata.
quantizzazione: si quantizzano grossolanamente i coefficienti che contengono la minor quantità di
informazione, perché questi coefficienti hanno un impatto minimo sulla qualità della
sottoimmagine ricostruita.
codifica: dei coefficienti quantizzati tramite un codice a lunghezza variabile.

Possiamo avere due tipi di codifica:


1) Codifica mediante trasformata adattativa: quando i passi della codifica possono essere adattati al
contenuto dell’immagine
2) Codifica mediante trasformata non adattativa: quando i passi della codifica rimangono fissi per
tutte le sottoimmagini

Il decoder, come al solito, implementa la sequenza inversa di operazioni rispetto all’encoder ad eccezione
della quantizzazione.
Da tutto ciò emerge che il processo di compressione non avviene durante la fase di trasformazione, ma
avviene grazie alla quantizzazione dei coefficienti trasformati.

Scelta della trasformata


Come abbiamo visto prima questo tipo di codifica si basa sulle trasformate e la scelta di questa dipende
dalle risorse computazionali disponibili e dall’entità di errore nella ricostruzione che può essere tollerata.
Una delle più utilizzate è la trasformata discreta del coseno DCT, per via del fatto che raggiunge un buon
compromesso tra la capacità di conservare l’informazione e la complessità di calcolo. Il vantaggio che la
contraddistingue dalle altre è che può essere implementata in un singolo circuito integrato, inglobando una
notevole quantità di informazione in un piccolo numero di coefficienti, riducendo l’artefatto blocking cioè
l’aspetto “a blocchi” che si ottiene quando i contorni delle sottoimmagini rimangono visibili. Questo tipo di
artefatto avviene perché i pixel di confine assumono il valore medio delle discontinuità formate in quei
punti.

(a) Periodicità DFT


(b) Periodicità DCT

Notiamo che nella DCT non sono presenti le


discontinuità che caratterizzano la DFT.

In generale comunque ci interessano le trasformate che raccolgono o ridistribuiscono la maggior parte


dell’informazione su pochi coefficienti, in quanto forniscono migliori approssimazioni della sottoimmagine e
quindi con minori errori di ricostruzione.
Importante ricordare che l’errore quadratico medio di un’immagine MxN è uguale all’errore quadratico
medio di una singola sottoimmagine.

Scelta della dimensione della sottoimmagine


La dimensione della sottoimmagine va ad influenzare anch’essa l’errore di codifica e la complessità di
calcolo. La scelta sulla dimensione della sottoimmagine solitamente è effettuata per fare in modo che la
ridondanza tra le sottoimmagini adiacenti sia ridotta a un livello accettabile e meglio se è una potenza di 2.
Le dimensioni più utilizzate sono 8x8 e 16x16.
L’allocazione dei bit è l’insieme dei processi di eliminazione, quantizzazione e codifica dei coefficienti della
sottoimmagine trasformata.

Nei sistemi di codifica mediante trasformate ci sono due modi per selezionare i coefficienti residui:
Codifica zonale: si basa sul concetto che l’informazione viene
descritta come un fenomeno incerto e viene implementata
utilizzando una singola maschera fissa per tutte le sottoimmagini.
In dettaglio, quando i coefficienti della trasformata hanno varianza
massima trasportano con sé la maggior parte dell’informazione di
un’immagine e vengono quindi maggiormente preservati nel
processo di codifica. I coefficienti di massima varianza vengono
posizionati attorno all’origine della trasformata dell’immagine.

Codifica threshold (a soglia): codifica di tipo adattativa, cioè la locazione dei coefficienti della
trasformata da preservare varia per ogni sottoimmagine.
Il concetto principale è che, per ciascuna sottoimmagine, i coefficienti della trasformata di
magnitudo maggiore danno un contributo più significativo alla qualità della sottoimmagine.
Per effettuare il threshold sulle sottoimmagini trasformate possiamo utilizzare tre modi:
1) una soglia singola e globale applicata a tutte le sottoimmagini.
Il livello di compressione differisce da immagine a immagine, perché dipende dal numero di
coefficienti che eccede la soglia globale.
2) una soglia differente per ogni sottoimmagine (codifica N-largest).
Per ogni sottoimmagine viene scartato lo stesso numero di coefficienti. Il tasso di codifica è
costante e noto a priori.
3) soglia variabile in funzione della locazione di ciascun coefficiente della sottoimmagine.
Come nel primo caso il valore di codifica è variabile.

JPEG
E’ uno degli standard di compressione più utilizzati per le immagini statiche e a tono continuo.
Sono possibili tre differenti modalità di codifica:
a) sistema sequenziale baseline:
è un sistema baseline per la codifica lossy che si basa sulla DCT.
La compressione viene eseguita in tre passi: calcolo della DCT; quantizzazione e assegnazione del
codice a lunghezza variabile.
L’immagine viene partizionata in blocchi da 8x8, da sinistra verso destra e dall’alto verso il basso.
Per ogni blocco (sottoimmagine) 8x8 i suoi 64 pixel sono traslati di livello sottraendo 2k-1, dove 2k è
il numero massimo dei livelli di intensità. Viene poi calcolata la trasformata discreta del coseno 2-D
di ciascun blocco, questa viene a sua volta quantizzata e riordinata utilizzando un modello a zigzag
per formare una sequenza 1-D dei coefficienti quantizzati. Questo vettore viene costruito
utilizzando uno schema incrementale rispetto alle frequenze spaziali, infatti prima ci sono le basse
frequenze poi quelle alte.
Questo tipo di codifica trae vantaggio delle lunghe sequenze di zeri che vengono normalmente
create dal riordinamento.
b) Sistema di codifica esteso per le applicazioni che richiedono un livello maggiore di compressione e
accuratezza, oppure con ricostruzione progressiva.
c) Sistema di codifica lossless per la compressione reversibile.

In generale i passi da seguire per effettuare una compressione JPEG sono quattro:
1. Trasformare RGB in YIQ/YUV, separando l’intensità dal colore.
Il modello YUV è più simile alla percezione umana dei colori, rispetto al modello RGB. La
componente Y è la luminosità; U e V sono le componenti colore. YUV non è uno spazio colore
assoluto, ma un modo per effettuare l’encoding dell’informazione RGB.

(a)
(b)
(c)
(d) Immagine RGB
(e) Componente Y
(f) Componete U
(g) Componente V

2. Identificare i dati ridondanti utilizzando la DCT.


L’immagine è suddivisa in blocchi da 8x8 e ogni blocco è analizzato con la DCT.
3. Quantizzare i dati rimanenti.
E’ un procedimento lossy, nel quale i valori dei coefficienti della DCT sono divisi da un valore
costante differente per ogni blocco e i risultati sono arrotondati al valore intero più vicino.
4. Effettuare l’encoding lossless sul risultato.

Vediamo infine le differenze principali tra la compressione JPEG e la compressione GIF:

Profondità di colore:
JPEG salva in full color (24 bits/pixel)
GIF salva in 8 bits/pixel

Preservazione dei contorni:


JPEG tende a sfocare I bordi
GIF è efficiente con le immagini disegnate

B&W:
JPEG non è adatto per le immagini a due toni
GIF per le immagini in toni di grigio è lossless
Codifica predittiva
La codifica predittiva è un tipo di codifica che viene utilizzata in molti standard tra cui anche il JPEG, in
quanto raggiunge ottimi risultati. Si basa sull’eliminazione delle ridondanze interpixel, spaziali e temporali,
estraendo e codificando solo la nuova informazione di ogni pixel, cioè la differenza tra il valore attuale e il
valore predetto di ogni pixel.
Può essere:

Codifica predittiva lossless:


L’immagine mostra le componenti di questo sistema

Notiamo che, come al solito, abbiamo due componenti principali che svolgono operazioni opposte:
l’encoder (codificatore) e il decoder (decodificatore). In questo sistema però abbiamo una
componente aggiuntiva: il predittore, sia per l’encoder che per il decoder.

I passi da seguire per effettuare la codifica/decodifica sono i seguenti:


o Quando i successivi campioni del segnale discreto di input del tempo vengono introdotti
nell’encoder, il predittore genera un valore atteso basandosi su un certo numero di
campioni precedenti.

o L’output del predittore viene arrotondato all’intero più vicino e viene calcolato
l’errore di predizione tramite la seguente espressione:

il valore ottenuto è codificato con un codice a lunghezza variabile per generare il successivo
elemento nello stream di dati compressi

o Il decoder ricostruisce e(n) da una codeword a lunghezza variabile ed esegue l’operazione


inversa

per decomprimere o ricreare la sequenza di input originale.


può essere generato tramite metodi globali, locali e adattativi.
Codifica predittiva lossy:
L’immagine mostra le componenti di questo sistema

Dall’immagine notiamo che, come prima, abbiamo due componenti principali che svolgono operazioni
opposte: l’encoder (codificatore) e il decoder (decodificatore). In questo sistema però oltre al
predittore abbiamo anche un quantizzatore nella fase di codifica, introdotto per esaminare
l’accuratezza nella ricostruzione e la performance della compressione nel contesto dei predittori
spaziali. Il quantizzatore, che va a sostituire la funzione di arrotondamento all’intero più vicino presente
nell’altro sistema, viene inserito tra l’encoder di simboli e il punto in cui si forma l’errore di predizione;
questo viene fatto perché permette di mappare l’errore di predizione in un range di output limitato,
denotato da , che stabilisce la quantità di compressione e di distorsione del sistema. Per fare in
modo che il processo di quantizzazione sia corretto è necessario modificare l’encoder in modo che le
predizioni dell’encoder e del decoder siano equivalenti. Questa equivalenza viene ottenuta disponendo
il predittore all’interno di un ciclo di feedback continuo, dove il suo input è generato in funzione
delle predizioni precedenti e dei corrispondenti errori quantizzati, quindi:

Dove denota l’output. Questo tipo di configurazione previene l’accumulo di errore nell’output del
decoder.

In generale le distorsioni che si creano in questo tipo di codifiche dipendono da un insieme di


interazioni tra la quantizzazione e i metodi di predizione impiegati.
Da notare infine che predittore e quantizzatore sono progettati indipendentemente l’uno dall’altro, in
quanto il predittore è progettato assumendo che non ci sia alcun errore, mentre il quantizzatore
minimizza il proprio errore.
Capitolo 9
LA MORFOLOGIA APPLICATA ALLE IMMAGINI DIGITALI

La morfologia è una branca della biologia che ha a che fare con la forma degli animali e delle piante; nel
nostro caso è un mezzo che ci serve per estrarre delle componenti di interesse da delle immagini di input e
poter quindi rappresentare e descrivere regioni, bordi e superfici. Inoltre si utilizzano delle tecniche
morfologiche per realizzare pre o post elaborazioni, come ad esempio il filtraggio morfologico o
l’assottigliamento.
Il linguaggio della morfologia matematica fa parte della teoria degli insiemi e nel nostro caso rappresentano
degli oggetti all’interno di un’immagine.
Nelle immagini binarie questi insiemi sono membri dello spazio degli interi 2-D cioè Z2, dove ogni elemento
di un insieme è una tupla (vettore 2-D) le cui coordinate sono le coordinate (x, y) di un pixel bianco (o nero,
a seconda della convenzione) dell’immagine.
Le immagini in scala di grigio possono essere rappresentate come insiemi le cui componenti si trovano in Z3;
due componenti di ogni elemento dell’insieme fanno riferimento alle coordinate di un pixel mentre la terza
corrisponde al valore discreto di intensità.
In morfologia due concetti fondamentali e molto usati sono:
Riflessione:
indicata con è definita:

in sostanza se B è l’insieme dei pixel che rappresentano un oggetto in un’immagine, allora è l’insieme
dei punti in B le cui coordinate (x, y) sono state sostituite da (-x, -y).

Traslazione:
di un insieme B tramite un punto z = (z1, z2) e indicata con (B)z è definita:

in sostanza se B è l’insieme dei pixel che rappresentano un oggetto di un’immagine, allora (B)z è
l’insieme dei punti in B le cui coordinate (x, y) sono state sostituite da (x+z1, y+z2).

Questi due concetti vengono utilizzati per realizzare operazioni basate sugli elementi strutturanti (SE), cioè
piccoli insiemi o sottoimmagini usati per esplorare un’immagine riguardo alle proprietà di interesse. Di
questi elementi strutturanti bisogna specificare l’origine, che solitamente si fa coincidere con il baricentro,
ma non obbligatoriamente. Per quanto riguarda la forma di questi SE è necessario che siano racchiusi in
una matrice rettangolare che faccia uso della minor quantità possibile di elementi di sfondo, che risultano
necessari per poter formare l’area rettangolare. Quando si fa scorrere un elemento strutturante in
un’immagine è necessario effettuare del padding in quanto il bordo dello sfondo deve essere grande
abbastanza da ospitare l’intero elemento strutturante quando la sua origine si trova sul bordo dell’insieme
originale.
Per determinare se un certo elemento strutturante è contenuto in un insieme oppure no si considerano
solo gli elementi ombreggiati di entrambi gli insiemi, cioè non si considera lo sfondo introdotto per fare in
modo che l’elemento strutturante abbia forma rettangolare.

Nell’immagine a fianco ne vediamo un esempio:

Nella prima riga è mostrato un elemento strutturante.


Nella seconda riga gli elementi strutturanti sono trasformati in
matrici rettangolari.
I punti indicano i centri degli SE.
Erosione e Dilatazione
Le due operazioni primitive su cui si basano tutti gli algoritmi che vedremo sono:

1. Erosione:
questa operazione di filtraggio morfologico viene utilizzata per eliminare o assottigliare gli oggetti in
un’immagine binaria; i dettagli dell’immagine che vengono eliminati sono quelli più piccoli
dell’elemento strutturante.
Matematicamente parlando, se A e B sono due insiemi in Z2, l’erosione di A attraverso B è indicata con
ed è definita:

quindi l’erosione di A attraverso B è l’insieme di tutti i punti z tali che B traslato sia contenuto in A. B
deve essere completamente contenuto in A quindi non deve avere elementi in comune con lo sfondo.

Vediamo un semplice esempio:

2. Dilatazione:
questa operazione di filtraggio morfologico viene utilizzata per accrescere e ispessire gli oggetti in
un’immagine binaria; le dimensioni dell’ispessimento dipendono dalla forma dell’elemento
strutturante. Una delle applicazioni più semplici di questa operazione è il riempimento dei vuoti, che
rispetto al filtro low pass ha anche il vantaggio di restituire direttamente un’immagine binaria.
Matematicamente parlando, se A e B sono due insiemi in Z2, la dilatazione di A attraverso B è indicata
con ed è definita:

questa equazione si basa sulla riflessione di B rispetto alla sua origine e sulla traslazione di questa
riflessione attraverso z.
Quindi la dilatazione di A attraverso B è l’insieme di tutti gli spostamenti z, tali che ed A si
sovrappongano almeno per un elemento.

Vediamo un semplice esempio in figura:


Dualità
Queste due operazioni sono duali l’una dell’altra rispetto al complementare e alla riflessione di un insieme:

la dualità è utile quando l’elemento strutturante è simmetrico rispetto alla sua origine, quindi ,
c
perché possiamo ottenere l’erosione di un’immagine attraverso B dilatando lo sfondo A con lo stesso
elemento strutturante e complementando il risultato.

Apertura e Chiusura
Altre due importanti operazioni morfologiche derivanti dalla dilatazione e dall’erosione sono:

1. Apertura:
rende più omogenei i contorni di un oggetto, elimina le piccole interruzioni e le protuberanze sottili.
L’apertura di un insieme A attraverso un elemento strutturante B è indicata con ed è definita:

quindi l’apertura è semplicemente l’erosione di A attraverso B, seguita dalla dilatazione del risultato
attraverso B.
L’interpretazione geometrica dell’apertura è la seguente:
l’elemento strutturante B è una palla ruotante piatta che gira all’interno di A. Il contorno dell’immagine
è definito dai punti in B che raggiungono il punto più lontano nel bordo di A mentre gira
all’interno del suo confine.
2. Chiusura:
rende più omogenee le sezioni del contorno, fonde le interruzioni sottili, elimina piccoli vuoti, riempie
vuoti nel contorno.
La chiusura di un insieme A attraverso un elemento strutturante B è indicata con ed è definita:

quindi la chiusura di A attraverso B è semplicemente la dilatazione di A attraverso B, seguita


dall'erosione del risultato attraverso B.
L’interpretazione geometrica della chiusura è simile a quella dell’apertura con la differenza che la palla
(l’elemento strutturante B) ruota sul lato esterno del contorno.

Da notare che aperture e chiusure multiple di un insieme non hanno effetto dopo che l’operatore è stato
applicato una volta.

Vediamo un esempio di applicazione delle due operazioni sopra citate:

Apertura: immagini da (a) a (e). Gli effetti sono:


Eliminazione del ponte tra le due sezioni
principali
Eliminazione delle protuberanze esterne
dell’elemento di destra
Smussamento degli angoli che puntano
all’esterno; gli angoli interni invece non sono
influenzati

Chiusura: immagini da (f) a (i). Gli effetti sono:


Il vuoto interno nella sezione di sinistra è stata
ridotta
Smussamento degli angoli interni; gli angoli
esterni non sono influenzati

In entrambi i casi provoca smoothing.


Trasformazioni hit - or - miss
Questa trasformazione morfologica è fondamentale per l’individuazione della forma. Ne vediamo le
caratteristiche principali tramite un esempio.
La figura mostra un insieme A che contiene tre
forme (sottoinsiemi), indicate con C, D ed E. Le
ombreggiature nelle figure a e c indicano gli
insiemi originali, mentre quelle nelle figure d ed e
indicano il risultato di operazioni morfologiche.
L’obiettivo in questo esempio è quello di trovare
la posizione della forma D.
Assumiamo che l’origine di ogni forma coincida
con il suo centro di gravità; assumiamo inoltre
che D sia racchiusa da una piccola finestra W. Lo
sfondo locale di D rispetto a W è definito come
l’insieme differenza (W - D), come mostra
l’immagine b.
La figura c mostra il complemento di a.
La figura d mostra l’erosione di A attraverso D
( ), cioè l’insieme delle posizioni dell’origine
di D alle quali D ha trovato un abbinamento (hit)
in A.
La figura e mostra l’erosione del complemento di
A attraverso l’insieme dello sfondo locale (W – D),
la regione ombreggiata è parte dell’erosione.
Dalle figure d ed e notiamo che l’insieme delle
posizioni per cui D coincide esattamente in A è
l’intersezione dell’erosione di A attraverso D con
l’erosione di AC attraverso (W – D), come mostra
la figura f.
L’intersezione è la posizione cercata.
Quindi matematicamente parlando, l’accoppiamento di B (insieme composto da D e dal suo sfondo) in A è
dato da:

Generalizzando possiamo porre , dove è l’insieme formato dagli elementi di B associati ad


un oggetto e è l’insieme degli elementi di B associati allo sfondo corrispondente. Quindi nel nostro caso
avremo che e , sostituendo nella precedente equazione otteniamo:

Quindi, l’insieme contiene tutti i punti (origine) ai quali, simultaneamente, ha trovato un


accoppiamento (hit) in A e ha trovato un accoppiamento in .
Ciascuna delle due equazioni è una trasformazione morfologica hit-or-miss.

L’associazione dei due elementi strutturanti e rispettivamente ai dati oggetti e allo sfondo si basa
sull’assunzione che due o più oggetti sono distinti solo se essi formano insiemi disgiunti (disconnessi); ciò
viene garantito richiedendo che ogni oggetto abbia uno sfondo di almeno un pixel attorno ad esso.
In alcune situazioni, la trasformazione hit-or-miss si riduce alla semplice erosione.
Algoritmi morfologici fondamentali
Ora vediamo un elenco di alcuni algoritmi morfologici:

Estrazione di contorni:
il bordo di un insieme A, indicato con β(A) si ottiene erodendo A attraverso B e poi applicando la
differenza insiemistica tra A e la sua erosione. Quindi:

dove ovviamente B è l’elemento strutturante.


Vediamo un esempio:

Riempimento di vuoti:
un vuoto è una regione di sfondo circondata da un bordo connesso di pixel del foreground, cioè del
primo piano.
La formula che permette di riempire tutti i vuoti è la seguente:

l’algoritmo termina quando Xk-1 = Xk. Dove B è l’elemento strutturante; Xk è l’insieme che contiene tutti i
vuoti riempiti; X è una matrice che contiene tutti valori 0, tranne nel punto di vuoto che viene posto a
1; l’unione degli insiemi Xk e A contiene tutti i vuoti riempiti e i loro bordi, cioè il risultato che volevamo
ottenere.
Quindi per poter riempire i vuoti facciamo uso della dilatazione, dell’intersezione del risultato con il
complementare di A ed infine dell’unione del risultato con A.
Vediamo un esempio:

(a) Immagine binaria. Il punto bianco all’interno di una


delle regioni(indicato dalla freccia rossa) è il punto di
partenza per l’algoritmo di riempimento dei vuoti.
(b) Il risultato di riempimento di quella regione.
(c) Risultato del riempimento di tutti i vuoti.

Estrazione di componenti connesse:


questo algoritmo serve per estrarre le componenti connesse da un’immagine binaria ed è
fondamentale in molte applicazioni automatizzate di analisi dell’immagine.
I concetti da utilizzare sono molto simili a quelli visti per il riempimento di vuoti, con l’unica differenza
che ora si utilizza A, invece del suo complementare.
In dettaglio abbiamo un insieme A contenente una o più componenti connesse; un elemento
strutturante basato sulla 8-connettività tra pixel, altrimenti non potremmo trovare le componenti
connesse in diagonale; una matrice X0 i cui elementi hanno valore 0 (valori di sfondo), tranne nella
posizione che corrisponde ad un punto di ogni componente connessa in A, a cui assegniamo valore 1
(valore di primo piano). Partendo da X0 è possibile individuare tutte le componenti connesse di A,
tramite la seguente procedura iterativa:

l’algoritmo termina quando Xk-1 = Xk. Dove B è l’elemento strutturante; Xk è l’insieme che contiene tutte
le componenti connesse di A. In questo algoritmo non utilizziamo l’immagine complementare perché
stiamo cercando punti in primo piano, l’opposto di quello che facevamo nel riempimento di vuoti, dove
cercavamo punti di sfondo.
Vediamo un esempio:

(a) matrice iniziale contenente un valore 1 nella


regione della componente connessa. (tutti i
punti grigi hanno valore 1, ma sono
rappresentati in modo diverso perché non
sono ancora stati trovati dall’algoritmo)
(b) Elemento strutturante
(c) Risultato del primo passo iterativo
(d) Risultato del secondo passo
(e) Risultato finale

Involucro convesso (scorza):


Innanzitutto ricordiamo che un insieme A è convesso se il segmento lineare che unisce due punti
qualsiasi di A giace interamente all’interno di A. Quindi l’involucro convesso H di un insieme arbitrario S
è il più piccolo insieme convesso contenente S. La differenza convessa di S è data da H - S.
Il metodo per ottenere l’involucro convesso consiste nell’applicazione iterativa della trasformazione hit-
or-miss su A con Bi con i=1, dove B è un elemento strutturante; quando non si verificano ulteriori
cambiamenti, si applica l’unione con A ottenendo come risultato D1. La procedura viene ripetuta con
tutti i B finché non si verificheranno cambiamenti. L’unione degli insiemi D risultanti costituisce
l’involucro convesso di A.
Vediamo un esempio:

(a) Elementi strutturanti (le X indicano condizioni


trascurabili)
(b) Insieme
(c) – (f) risultati dell’algoritmo con gli elementi
strutturanti mostrati in (a)
(g) Involucro convesso
(h) Involucro convesso che mostra il contributo di ogni
elemento strutturante
Assottigliamento:
L’assottigliamento di un insieme A attraverso un elemento strutturante B, indicato con , può
essere definito utilizzando una trasformazione hit-or-miss:

E’ possibile definire l’assottigliamento anche attraverso una sequenza di elementi strutturanti in questo
modo:

il processo in questo caso consiste nell’assottigliare A attraverso un passaggio con B1, poi assottigliare il
risultato con B2 e così via fino a Bn. L’intero processo viene ripetuto finché non si verificheranno ulteriori
cambiamenti.
Vediamo un esempio:

(a) Sequenza di elementi strutturanti ruotati


utilizzati per l’assottigliamento
(b) Insieme A
(c) Risultato dell’assottigliamento con il
primo elemento
(d) – (i) risultati di assottigliamento con i
successivi sette elementi (notiamo che
tra il settimo e l’ottavo non è avvenuto
cambiamento)
(j) Risultato dell’ulteriore ripetizione
dell’uso dei primi quattro elementi
(k) Risultato dopo la convergenza
(l) Conversione alla m-connettività

Ricostruzione morfologica:
In questo tipo di algoritmo abbiamo due immagini (marker; maschera) ed un elemento strutturante, a
differenza dei metodi visti finora che implicavano la presenza di una immagine ed un elemento
strutturante.
Il marker è l’immagine che contiene i punti iniziali per la trasformazione; la maschera invece vincola la
trasformazione; l’elemento strutturante è usato per definire la connettività.
Le due operazioni principali per la ricostruzione morfologica sono (in entrambi i casi denotiamo F
l’immagine marker, G l’immagine maschera e .):

1) Dilatazione geodetica:
di taglia 1 dell’immagine marker rispetto alla maschera è indicata con DG(1)(F) = F ed è definita
come:

dove l’operazione di intersezione garantisce che la maschera G limiti la crescita (dilatazione) del
marker F.
Vediamo un esempio:

2) Erosione geodetica:
di taglia 1 dell’immagine marker rispetto alla maschera è indicata con EG(1)(F) = F ed è definita come:

dove l’operazione di unione garantisce che l’erosione geodetica di un’immagine rimanga maggiore
o uguale alla sua immagine maschera.
Vediamo un esempio:

Come nel caso classico queste due operazioni sono duali rispetto all’insieme complementare.
Morfologia in scala di grigio
La morfologia in scala di grigio è un’estensione dei concetti visti finora alle immagini in scala di grigio.
In questo caso l’immagine viene denotata con f(x,y) mentre l’elemento strutturante con b(x,y), dove f e b
assegnano un valore di intensità ad ogni coppia distinta di coordinate (x, y).
Gli elementi strutturanti, come nella controparte binaria, vengono utilizzati come sonde per esaminare
un’immagine riguardo a proprietà specifiche. In questo contesto però ci sono due categorie di elementi
strutturanti:

Non piatte (non flat):

Piatte (flat):

La riflessione di un elemento strutturante in scala di grigio è indicata con .

Erosione e dilatazione
Anche in questo caso le operazioni fondamentali da cui partono tutti gli algoritmi sono la dilatazione e
l’erosione (anche se bisogna distinguere tra flat e non flat), vediamole in dettaglio:

Erosione in scala di grigio (flat):


l’erosione di f attraverso un elemento strutturante flat b è definita per ogni posizione (x, y) come il
valore minimo dell’immagine nella regione coincidente con b, quando l’origine di b si trova in (x, y).
In formula:

dove x e y vengono incrementati per fare in modo che l’origine di b visiti ogni pixel di f. Quindi
l’origine dell’elemento strutturante si posiziona in ogni posizione dei pixel dell’immagine.
L’erosione seleziona il valore minimo di f da tutti i valori di f contenuti nella regione coincidente.

Applicando l’erosione in scala di grigio otteniamo un’immagine più scura dell’originale, in quanto le
dimensioni delle componenti chiare vengono ridotte e le dimensioni delle componenti scure
vengono aumentate (infatti si calcola il minimo).

Dilatazione in scala di grigio (flat):


la dilatazione di f attraverso un elemento strutturante flat b è definita per ogni posizione (x, y)
come il valore massimo dell’immagine nella finestra indicata da quando l’origine di si trova in (x,
y).
In formula:

dove = b(-x, -y) e l’elemento strutturante è riflesso rispetto alla sua origine.

Applicando un’erosione in scala di grigio otteniamo un’immagine più chiara dell’originale, in quanto
le componenti chiare si sono ispessite e le componenti scure vengono ridotte (infatti si calcola il
massimo).

Vediamo un esempio:

(a) Immagine originale


(b) Risultato della dilatazione (più chiara)
(c) Risultato dell’erosione (più scura)

Gli elementi strutturanti non flat hanno una maggiore complessità computazionale ed hanno valori in scala
di grigio che variano rispetto al loro dominio di definizione, inoltre vengono utilizzati raramente nella
pratica.

Erosione in scala di grigio (non flat):


questo tipo di erosione è definita:

quindi si sottraggono da f i valori per determinare l’erosione in un punto qualsiasi, quindi l’erosione
non è limitata dai valori di f, cosa che avviene nella versione flat.

Dilatazione in scala di grigio (non flat):

In entrambi i casi quando tutti gli elementi di bN sono costanti queste due equazioni diventano come quelle
flat, con una costante scalare uguale all’ampiezza dell’elemento strutturante.

Apertura e Chiusura
Anche in questo contesto avremo le operazioni di apertura e chiusura:

Apertura in scala di grigio:


di un’immagine f attraverso un elemento strutturante b è indicata con ed è
dove, come nella controparte binaria, è l’erosione di f attraverso b, seguita da una dilatazione del
risultato con b.

Chiusura in scala di grigio:


di un’immagine f attraverso un elemento strutturante b è indicata con ed è

dove, come nella controparte binaria, è la dilatazione di f attraverso b, seguita da una erosione del
risultato con b.

La proprietà di dualità della controparte binaria vale anche in questo contesto, mentre varia
l’interpretazione geometrica:
in pratica la funzione immagine f(x, y) viene vista come una superficie 3-D con i suoi valori di intensità
interpretati come valori di altezza sul piano xy, quindi l’apertura viene vista come la spinta dell’elemento
strutturante dal basso verso l’alto sulla superficie di f, perciò l’apertura completa è l’insieme di tutti quei
valori ottenuti facendo sì che l’origine di b visiti ogni coordinata (x, y) di f.
Ecco un esempio chiarificatore:

Apertura e Chiusura nel caso monodimensionale.


(a) Segnale originale 1-D
(b) Elemento strutturante flat sospinto sotto il
segnale
(c) Apertura
(d) Elemento strutturante flat pressato lungo la
parte superiore del segnale
(e) chiusura

Dall’immagine si nota che (nel caso dell’apertura) quando l’elemento strutturante è troppo ampio per
adattarsi completamente all’interno delle punte superiori della curva, le estremità superiori delle punte
sono eliminate; la parte rimossa è proporzionale alla capacità dell’elemento strutturante di stare all’interno
della punta.
Nel caso della chiusura ovviamente accade l’opposto, cioè l’elemento strutturante viene pressato sulla
parte superiore della curva mentre viene spostato.

Algoritmi morfologici di base in scala di grigio


Ora vediamo un elenco di alcuni algoritmi morfologici in scala di grigio:

Smoothing morfologico:
abbiamo visto che l’apertura e la chiusura permettono rispettivamente di eliminare i dettagli chiari
e i dettagli scuri, quindi posso essere utilizzate come filtri morfologici per lo smoothing
dell’immagine e la riduzione del rumore.
A volte lo smoothing si ottiene tramite un filtraggio sequenziale alternante, cioè viene applicata la
sequenza apertura-chiusura inizialmente con l’immagine originale, ma i passaggi successivi sui
risultati dei passi precedenti.
Vediamo un esempio:

(a) Immagine originale


(b) Smoothing morfologico dell’immagine (a)

Gradiente morfologico:
è possibile ottenere il gradiente morfologico tramite la dilatazione e l’erosione combinate con la
sottrazione dell’immagine:

infatti la dilatazione ispessisce le regioni, l’erosione le rimpicciolisce e la loro differenza permette di


enfatizzare i contorni delle regioni ed eliminare le aree omogenee, quindi il risultato finale è un
effetto gradiente di tipo derivativo.
Vediamo un esempio:

(a) immagine originale


(b) Gradiente morfologico di (a)

Ricostruzione morfologica in scala di grigio:


anche in questo contesto abbiamo le due immagini (marker f; maschera g) di dimensioni uguali e con f ≤ g
ed un elemento strutturante.

1) dilatazione geodetica di taglia 1 di f rispetto a g:

quindi effettuiamo la dilatazione di f attraverso b e poi selezioniamo il minimo tra il risultato e g in ogni
punto (x, y).

2) erosione geodetica di taglia 1 di f rispetto a g:


quindi effettuiamo l’erosione di f attraverso b e poi selezioniamo il massimo tra il risultato e g in ogni
punto (x, y).

L’apertura tramite ricostruzione di immagini in scala di grigio prima erode l’immagine in ingresso e quindi la
usa come marker. L’obiettivo è quello di preservare la forma delle componenti dell’immagine dopo il
processo di erosione.

La chiusura tramite ricostruzione è possibile ottenerla attraverso il complemento dell’immagine, ottenendo


l’apertura tramite ricostruzione e complementando il risultato.
Capitolo 10
SEGMENTAZIONE DI IMMAGINI

La segmentazione suddivide un'immagine nelle regioni o negli oggetti che la compongono. Il dettaglio della
segmentazione dipende da ciò che si vuole ottenere dall'immagine, cioè il processo deve terminare quando
gli oggetti o le regioni di interesse sono stati individuati.
Ci sono due possibili situazioni: si conoscono a priori le condizioni di contorno, quindi si conosce a priori la
struttura dell'immagine; oppure non si conosce nulla a priori e si utilizzano dei metodi specifici per
individuare le regioni di interesse.
Ci sono due approcci alla segmentazione:
Discontinuità (segmentazione dipendente dagli edge): si partiziona un'immagine basandosi sui
bruschi cambiamenti di intensità locali (ad esempio gli edge), quindi i bordi delle regioni devono
essere sufficientemente diversi l’uno dall’altro e dallo sfondo.

Similarità (segmentazione dipendente dalle regioni): ci si basa sulle similarità tra regioni. Si
utilizzano le tecniche di thresholding e region growing.

Se R indica l’intera regione occupata da un’immagine, la segmentazione è quel processo che partiziona R in
n sottoregioni, R1, R2, …, Rn rispettando le seguenti proprietà:

a)
cioè la segmentazione deve essere completa, ogni pixel deve appartenere a una qualche regione

b) , è un insieme connesso, i = 1,2,…,n


cioè i punti in una regione devono essere 4 o 8 connessi

c) per tutti i valori i e j, i ≠ j


cioè le regioni devono essere disgiunte

d) per i = 1,2,…,n
indica le proprietà che devono essere soddisfatte dai pixel in una regione segmentata

e) per ogni coppia di regioni adiacenti Ri e Rj


due regioni adiacenti Ri e Rj devono essere diverse nel senso del predicato Q. Ricordiamo che due
regioni sono adiacenti se la loro unione forma un insieme connesso.

Individuazione di edge, linee e punti


Le tre caratteristiche dell’immagine a cui siamo interessati sono:

Edge (o segmenti di edge):


sono insiemi di pixel di edge connessi, dove i pixel di edge sono pixel in cui l’intensità dell’immagine
cambia all’improvviso. I pixel di edge vengono individuati tramite dei metodi di elaborazione locali
chiamati individuatori di edge (edge detector)
Linee:
segmento di edge in cui l’intensità dello sfondo su entrambi i lati della linea è maggiore o minore
dell’intensità dei pixel della linea.
Punti:
linea con lunghezza e larghezza pari a 1 pixel.
Gli strumenti che permettono di individuare le brusche variazioni locali di intensità sono le derivate prima e
seconda.
Le caratteristiche matematiche della derivata prima sono:
Deve essere nulla nelle aree di intensità costante
Deve essere non nulla all’inizio di una rampa o di un gradino di intensità
Deve essere non nulla nei punti lungo una rampa di intensità
Inoltre la derivata prima produce edge spessi e mette in rilievo i dettagli fini meno rispetto alla derivata
seconda.

Le caratteristiche matematiche della derivata seconda invece sono:


Deve essere nulla in aree ad intensità costante
Deve essere non nulla all’inizio e alla fine di una rampa o di un gradino di intensità
Deve essere nulla lungo le rampe di intensità
Inoltre la derivata seconda evidenzia meglio i cambiamenti bruschi e quindi mette in rilievo i dettagli sottili
(incluso il rumore).
Produce una risposta doppia lungo le transizioni di intensità a rampa e a gradino, questo avviene perché
abbiamo visto che è diversa da zero sia all’inizio che alla fine del gradino, mentre la derivata prima è diversa
da zero solo all’inizio.
Il segno della derivata seconda può essere utilizzato per determinare il tipo di transizione di un edge, cioè
se c’è una transizione da chiaro a scuro (derivata seconda negativa) o da scuro a chiaro (derivata seconda
positiva) dove il segno si mantiene mentre si attraversa l’edge.
Questa immagine mostra un esempio dei valori appena specificati che assumono le derivate lungo un certo
profilo di intensità di un’immagine:

Siccome abbiamo a che fare con immagini digitali, quindi valori finiti, la massima variazione di intensità
possibile è finita e la più piccola distanza in cui può avvenire un cambiamento è tra pixel adiacenti.
Per calcolare le derivate prime e seconde in ogni pixel dell’immagine si utilizzano i filtri spaziali con
opportune maschere.
Individuazione di punti isolati
Da quanto detto finora è chiaro che i punti isolati possono essere individuati utilizzando la derivata
seconda, nello specifico utilizzando il laplaciano:

Dopo aver calcolato le derivate parziali quindi otteniamo:

Questa espressione è implementata tramite la seguente maschera:


0 1 0
1 -4 1
0 1 0

Se vogliamo includere anche i termini diagonali allora la maschera diventa:


1 1 1
1 -8 1
1 1 1

Come al solito la somma dei coefficienti è zero, in quanto vogliamo che queste maschere diano risposta
nulla nelle aree ad intensità costante.
Vengono utilizzate queste maschere per individuare il punto perché l’idea di base è che l’intensità di un
punto isolato è abbastanza diversa dalle intensità vicine.
Utilizzando la seconda maschera, un punto viene individuato nella posizione (x, y) su cui la maschera è
centrata se il valore assoluto della risposta della maschera in quel punto supera uno specifico valore di
soglia. Tali punti vengono denotati con 1 nell’immagine di output, mentre tutti gli altri vengono posti a 0,
producendo così un’immagine binaria.
In formula:

dove g è l’immagine di output e T è la soglia non negativa.


Quello che avviene è che vengono misurate le differenze pesate tra un pixel e i suoi 8 vicini.

Individuazione di linee
Anche per l’individuazione di linee conviene utilizzare la derivata seconda, in quanto da una risposta più
forte e produce linee più sottili rispetto alla derivata prima. Utilizziamo ancora la maschera laplaciana vista
per l’individuazione dei punti isolati, stando attenti alla doppia risposta della derivata seconda.
L’immagine laplaciana che otteniamo contiene dei valori negativi, quindi è necessario effettuare
un’operazione di scaling.
La maschera utilizzata è isotropica, quindi la sua risposta è indipendente dalla direzione; un problema che
non avevamo con l’individuazione dei punti isolati è che le linee possono avere differenti direzioni, quindi
dobbiamo utilizzare maschere diverse per poter avere risposta massima nelle differenti direzioni.
Ad esempio possiamo utilizzare le seguenti maschere:

-1 -1 -1 2 -1 -1 -1 2 -1 -1 -1 2
2 2 2 -1 2 -1 -1 2 -1 -1 2 -1
-1 -1 -1 -1 -1 2 -1 2 -1 2 -1 -1
orizzontale +45° verticale -45°
Dove la direzione preferita di ogni maschera è pesata con un coefficiente più grande (in questo caso 2)
rispetto ad altre possibili direzioni.
Quindi se ci interessa trovare tutte le linee in una certa direzione in un’immagine, dobbiamo spostare la
maschera (che meglio individua quella direzione) lungo l’immagine e sogliare il valore assoluto del risultato.
I punti che rimangono sono le risposte più forti, che corrispondono meglio alla direzione definita dalla
maschera.

Vediamo un esempio:

Lo scopo in questo esempio è quello di trovare tutte le linee di un


pixel orientate a +45°

(a) Immagine binaria di un circuito elettronico.


(b) Risultato dell’elaborazione con una maschera di
Individuazione di linee a +45°. In questa immagine i valori
negativi sono impostati a zero, infatti ricordiamo che come
risultato del laplaciano otteniamo un’immagine con sfondo
grigio.
(c) Risultato dell’applicazione della soglia sull’immagine (b),
quindi i punti bianchi sono quelli che soddisfano la
condizione.

Modelli di edge
L'edge detection, cioè l'individuazione dei bordi, è il metodo più utilizzato per la segmentazione di
immagini e si basa sui bruschi cambiamenti locali di intensità.
Esistono tre tipi di edge, classificati secondo i loro profili di intensità:

1. a gradino:
sono edge ideali che separano due livelli di intensità alla distanza di 1
pixel; sono ideali perché è più probabile trovarli in un'immagine
generata in laboratorio che non in un'immagine reale in quanto
queste sono solitamente sfocate e rumorose.

2. a rampa:
sono edge caratterizzati dalla sfocatura e dal rumore presenti nelle
immagini presenti a causa del dispositivo di acquisizione. L’ampiezza
della rampa è inversamente proporzionale alla sfocatura nell’edge.

3. roof:
è associato al bordo di una qualche regione e la base (la larghezza) di
questo tipo di bordo è determinata dallo spessore e dalla sfocatura
della linea.
Comunque sia nelle immagini possono essere presenti tutti e
tre questi tipi di edge, ovviamente non identici ai modelli
ideali, ma simili in base alla quantità di rumore e sfocatura
presenti.
In base alle caratteristiche dei tre modelli di edge risulta
evidente che per poterli individuare si possono utilizzare le
caratteristiche della derivata prima e della derivata seconda.
Infatti la magnitudo della derivata prima può essere utilizzata
per individuare la presenza di un edge in un punto, mentre il
segno della derivata seconda può essere utilizzato per
determinare se un pixel di un edge giace sul lato scuro o
chiaro di un edge. Inoltre l’intersezione tra l’asse di intensità
zero e una linea che passa per gli estremi della derivata
seconda segna un punto chiamato zero crossing, questo
punto può essere utilizzato per localizzare i centri di un edge.

Il problema delle derivate è che in presenza di rumore è quasi impossibile ricavare qualsiasi informazione
dall'istogramma, come vediamo nella figura sottostante.

Prima colonna: immagini e profili di intensità di un edge a rampa


corrotto da rumore gaussiano casuale a media nulla e deviazione
standard a livelli di intensità rispettivamente 0.0, 0.1, 10.0.

Seconda colonna: immagini della derivata prima e profili di


intensità.

Terza colonna: immagini della derivata seconda e profili di


intensità.

Individuazione degli edge


I tre passi fondamentali per individuare gli edge sono:
1. applicare lo smoothing all'immagine per ridurre il rumore presente
2. individuare i potenziali punti di edge
3. localizzare gli edge, cioè selezionare tra i punti candidati quelli che lo sono veramente

Le tecniche utilizzate per questo scopo sono:


operatori gradiente (utilizza la derivata prima)
combinazione del gradiente con il thresholding (utilizza la derivata prima)
individuatore di Marr-Hildreth (utilizza la derivata seconda)
Operatori gradiente
Il gradiente viene utilizzato per definire l'intensità e la direzione di un edge in un certo punto (x,y).
Tutto ciò è possibile perché il gradiente è un vettore bidimensionale che ha la proprietà geometrica di
puntare nella direzione di massima variazione di f nel punto (x,y).
Il gradiente e' definito:

La direzione del gradiente è data dall’angolo:

calcolato rispetto all’asse x. La direzione di un edge in un punto qualsiasi (x, y) è ortogonale alla direzione di
α(x,y) del vettore gradiente in quel punto.

Vediamo un esempio:

Utilizzo del gradiente per determinare


direzione e forza di un edge in un punto. Si noti
che l’edge è perpendicolare alla direzione del
vettore gradiente nel punto in cui il gradiente
viene calcolato.

Per ottenere le componenti del gradiente serve calcolare le derivate parziali e per ogni pixel
dell’immagine e queste possono essere implementate utilizzando le maschere (o operatori) di Roberts, di
Prewitt e di Sobel.

Operatore di Roberts:
è l'operatore a croce più semplice che serve per individuare la direzione diagonale di un edge. E' un
operatore 2X2 semplice da implementare, ma scomodo (per calcolare la direzione) per via del fatto
che non è simmetrico rispetto al punto centrale.
Le forme possibili sono:
-1 0 0 -1
0 1 1 0

Operatore di Prewitt:
è un operatore 3X3 che approssima le derivate nella direzione x e y e permette anche di individuare
gli edge diagonali.
Le forme possibili sono:
-1 -1 -1 -1 0 1 orizzontale e verticale
0 0 0 -1 0 1
1 1 1 -1 0 1

0 1 1 -1 -1 0 diagonale
-1 0 1 -1 0 1
-1 -1 0 0 1 1
Operatore di Sobel:
è un operatore 3X3 che approssima le derivate nella direzione x e y e permette anche di individuare
gli edge diagonali.
Viene preferito a Prewitt perché è più performante nella rimozione del rumore e nelle prestazioni.
Le forme possibili sono:
-1 -2 -1 -1 0 1 orizzontale e verticale
0 0 0 -2 0 2
1 2 1 -1 0 1

0 1 2 -2 -1 0 diagonale
-1 0 1 -1 0 1
-2 -1 0 0 1 2

Per poter individuare gli edge in modo più selettivo e mantenendo il più alto grado di connettività
solitamente conviene effettuare uno smoothing prima del calcolo del gradiente e quindi il thresholding
all’immagine gradiente. Utilizzare questo metodo può portare ad eliminare tutti gli edge i cui valori di
intensità sono stati radicalmente attenuati dalla sfocatura.

L’individuatore di edge di Marr-Hildreth


Una tecnica avanzata per l'individuazione degli edge che tiene conto (a differenza dei metodi visti sopra)
della presenza di rumore e della natura degli edge è l'individuatore di Marr-Hildreth.
Le ipotesi di partenza di questi tizi sono:
le variazioni di intensità sono dipendenti dalla scala dell'immagine e quindi la loro individuazione
richiede l'uso di operatori di dimensioni diverse.
un cambiamento di intensità improvviso da origine a un picco o lungo la derivata prima o a uno
zero crossing nella derivata seconda.

Quindi le caratteristiche principali di un operatore utilizzato per l'individuazione degli edge dovrebbero
essere:
essere un operatore differenziale capace di calcolare un'approssimazione delle derivate prima e
seconda in ogni punto dell'immagine
poter essere regolato per agire a ogni scala selezionata, in modo tale che gli operatori più grandi
possano essere utilizzati per individuare gli edge sfocati, mentre gli operatori più piccoli per
individuare i dettagli più piccoli scarsamente visibili.

L'operatore che ha le seguenti caratteristiche è il LoG, il Laplaciano del Gaussiano o per via della sua forma
operatore a sombrero.

L’espressione che lo caratterizza è la seguente:


Questo operatore ha due aspetti fondamentali:
la parte gaussiana dell'operatore sfoca l'immagine, quindi riduce il rumore sia nel dominio spaziale
che in quello della frequenza ed è quindi meno probabile che vengano introdotti artefatti non
presenti nell'immagine originale.
il laplaciano ha il vantaggio di essere isotropico, cioè invariante per rotazione, e quindi ha le
caratteristiche del sistema visivo umano e risponde in egual modo alle variazioni di intensità in ogni
direzione della maschera, senza quindi la necessità di dover utilizzare maschere multiple per
calcolare la risposta più forte.

Per concludere l'algoritmo di Marr-Hildreth può essere riassunto nei seguenti passi:
1) filtrare l’immagine di input con un filtro passa basso gaussiano
2) calcolare il laplaciano dell’immagine ottenuta nel passo precedente
3) trovare gli zero crossing dell’immagine del passo precedente per determinare le posizioni degli
edge.
Gli zero crossing, in ogni pixel p dell’immagine filtrata, vengono individuati utilizzando un intorno
3x3 centrato in p; uno zero crossing in p implica che i segni di almeno dei due suoi pixel vicini
opposti sono diversi. Ci sono quattro casi possibili: sinistra/destra, sopra/sotto e le due diagonali.
Una caratteristica fondamentale di questo metodo è che utilizzare gli zero crossing per
l’individuazione degli edge comporta che gli edge risultanti sono spessi 1 pixel.

Vediamo in un esempio le differenze tra un risultato ottenuto con Sobel e col LoG:

Immagine originale

Gradiente di Sobel

Rispettivamente: LoG; LoG sogliato; LoG zero


crossing
Edge-linking e individuazione dei bordi
I metodi appena visti servono per individuare gli edge e idealmente dovrebbero restituire insiemi di pixel
che giacciono soltanto sugli edge. In pratica, questi pixel non caratterizzano completamente gli edge a
causa del rumore, di rotture negli edge dovute a illuminazione non uniforme e altre discontinuità. Risulta
necessario quindi utilizzare, dopo aver individuato gli edge, un algoritmo di linking per poter collegare tra
loro i pixel di edge.
Vediamo i tre metodi principali per effettuare edge-linking.

Elaborazione locale:
consiste nell’analizzare le caratteristiche dei pixel in un piccolo intorno su ogni punto (x, y) che è stato
riconosciuto come punto di edge. Tutti i punti che soddisfano determinate proprietà di similarità vengono
collegati, formando un edge di pixel.
Le due proprietà che servono per stabilire la similarità dei pixel di edge sono:
Intensità (magnitudo)
Direzione del vettore gradiente

Per collegare i pixel entrambi i criteri devono essere soddisfatti.


Vediamo un esempio:

(a) Immagine del retro di un veicolo


(b) Immagine della magnitudo del gradiente
(c) Pixel di edge connessi in orizzontale
(d) Pixel di edge connessi in verticale
(e) L’OR logico delle due immagini precedenti
(f) Risultato finale ottenuto utilizzando
l’assottigliamento morfologico

Elaborazione nelle regioni:


si utilizza quando si ha una conoscenza a priori delle regioni di interesse e dell’appartenenza di un pixel ad
una determinata regione, ottenendo come risultato l’approssimazione del bordo della regione. I pixel
vengono collegati tra loro perché si sa che fanno parte dei contorni di una regione.
In questo tipo di elaborazione si utilizzano delle tecniche che permettono di ottenere un’approssimazione
delle caratteristiche essenziali della forma della regione, mantenendo la rappresentazione del bordo
relativamente semplice.
In questa procedura ci sono due requisiti fondamentali: devono essere specificati due punti iniziali; tutti i
punti devono essere ordinati. Questo ci permette di capire se ci troviamo davanti a una curva aperta o
chiusa analizzando le distanze tra i punti:

curva chiusa: se la separazione tra punti tende ad essere uniforme


curva aperta: se c’è una grande distanza tra due punti consecutivi nella sequenza ordinata rispetto
alle distanze tra altri punti nella sequenza
Vediamo un esempio:

In questo esempio abbiamo un insieme di punti che


rappresentano una curva aperta in cui gli estremi sono
indicati con A e B; questi due punti sono i vertici del
poligono.
Si comincia calcolando i parametri di una retta che
passa da A a B. Ora calcoliamo la distanza
perpendicolare da tutti gli altri punti della curva a
questa linea e scegliamo il punto di massima distanza;
se tale distanza supera una soglia T, il punto
corrispondente, C, diventa un nuovo vertice (come si
vede in figura).
Successivamente vengono definite le linee da A a C e
da C a B e si calcolano le distanze da tutti i punti tra A
e C alla linea AC. Il punto corrispondente alla distanza
massima diventa vertice, D, se tale distanza supera la
soglia T; altrimenti non viene dichiarato alcun nuovo vertice per quel segmento.
Lo stesso procedimento viene applicato ai punti tra C e B. Questa procedura iterativa viene ripetuta finché nessun
punto soddisfa il test di sogliatura.
(d) Mostra il risultato finale, che è un’approssimazione ragionevole della forma di una curva che si adatta ai
punti dati.

Elaborazione globale utilizzando la trasformata di Hough:


Quando non si ha nessuna conoscenza a priori sugli oggetti di interesse (sulle regioni e i bordi) e si ha
soltanto un’immagine di edge, allora tutti i pixel sono possibili candidati per il linking e possono essere
accettati o rifiutati sulla base delle loro proprietà globali, infatti ci si basa sulla direzione delle rette.
La trasformata di Hough, dati n punti in un’immagine, permette di trovare dei sottoinsiemi che si trovano
su linee rette.
Per un punto (xi, yi), del piano xy, passano infinite rette e tutte soddisfano l’equazione generale della retta
yi = axi + b al variare di a e b.
Possiamo considerare la retta b = - axi + yi considerando il piano ab (chiamato spazio dei parametri) in
modo da ottenere l’equazione di una singola retta passante per (xi, yi).
Anche per un secondo punto (xj, yj) passa una retta nello spazio dei parametri che interseca (a meno che
sono parallele) la retta associata a (xi, yi) nello stesso punto (a’, b’) dove a’ è la pendenza e b’ l’intersezione
della linea che contiene sia (xi,yi) che (xj, yj) nel piano xy.
Per tutti i punti di questa retta (quella del piano xy) passano infinite rette nello spazio dei parametri che si
intersecano in (a’, b’).
In questa immagine sono illustrati i concetti appena descritti:
In generale, le rette dello spazio dei parametri che corrispondono a tutti i punti (xk, yk) nel piano xy possono
essere identificate, tirando fuori le linee principali nel piano, individuando i punti nello spazio dei parametri
in cui si interseca il maggior numero di rette. Il problema è che all’avvicinarsi della retta alla direzione
verticale, a (la pendenza) tende all’infinito. Per poter risolvere questo problema si utilizza la
rappresentazione normale della retta, cioè:
xcosΘ + ysinΘ = ρ

L’interpretazione geometrica dei parametri Θ e ρ è illustrata nelle seguenti figure:

Notiamo dalla figura (a) che una linea verticale ha Θ = 90°, mentre ρ è uguale all’intersezione positiva
rispetto all’asse y; una linea orizzontale ha Θ = 0° mentre ρ è uguale all’intersezione positiva rispetto
all’asse x.
Ogni curva sinusoidale in figura (b) rappresenta l’insieme delle linee che passano per un particolare punto
(xk, yk) nel piano xy. Il punto di intersezione (ρ’, Θ’) corrisponde alla retta che passa sia per (xi, yi) sia per (xj,
yj).
La figura (c) mostra il piano ρΘ suddiviso nelle celle di accumulazione, dove (ρmin, ρmax) (Θmin, Θmax) sono gli
intervalli consentiti per i valori dei parametri: -90° ≤ Θ ≤ 90° e –D ≤ ρ ≤ D, in cui D è la distanza massima tra
gli angoli opposti di un’immagine. La cella con coordinate (i,j), con un valore di accumulazione A(i,j),
corrisponde al quadrato associato alle coordinate dello spazio dei parametri (ρi, Θj). Queste celle vengono
inizialmente poste a zero.
Per ogni punto (xk, yk) nel piano xy si suppone che Θ sia uguale a ciascuno dei valori di suddivisione
permessi sull’asse Θ e si risolve per i ρ corrispondenti utilizzando la seguente equazione:
ρ = xkcosΘ + yksinΘ

I valori di ρ risultanti vengono successivamente arrotondati al valore della cella più vicina lungo l’asse ρ. Se
la scelta di Θp ha come risultato la soluzione ρq, si pone A(p, q) = A(p, q) + 1.
Alla fine della procedura, un valore di P in A(i, j) indica che P punti nel piano xy si trovano sulla retta xcosΘj
+ ysinΘj = ρi.
Il numero delle suddivisioni nel piano ρΘ determina l’accuratezza della collinearità di questi punti.

La trasformata di Hough non è applicabile soltanto alle rette, ma può essere applicata a qualsiasi funzione
che abbia la forma g(v, c) = 0 dove v è un vettore di coordinate e c è un vettore di coefficienti.
Ovviamente la complessità della trasformata di Hough dipende dal numero di coordinate e coefficienti nella
rappresentazione.

Riassumendo quindi i passi da seguire sono i seguenti:


1) Ottenere un’immagine binaria dei contorni
2) Individuare le suddivisioni nel piano ρΘ
3) Esaminare i contatori delle celle di accumulazione con alte concentrazioni di pixel
4) Esaminare la relazione (di continuità) tra i pixel delle celle scelte.
La continuità si basa sul calcolo della distanza tra i pixel disconnessi corrispondenti alla data cella di
accumulazione. L’interruzione in una retta associata con una cella viene colmata se la sua lunghezza
è minore di una data soglia.
Vediamo un esempio che chiarisce questi concetti astrusi:
La figura (a) mostra un’immagine con cinque
punti in rilievo; la figura (b) mostra ognuno di
questi punti posizionato sul piano ρΘ,
utilizzando le suddivisioni di un’unità per gli
assi ρ e Θ.
Il range dei valori Θ è , mentre il range
dell’asse ρ è , dove D è la distanza tra gli
angoli opposti dell’immagine.
Nella figura (b) notiamo che ogni curva ha una
forma sinusoidale diversa; la linea orizzontale
risultante dal mapping del punto 1 è un caso
particolare di una sinusoide con ampiezza
nulla.
I punti marcati con A e B mostrano le proprietà
della detection della collinearità della
trasformata di Hough.
Il punto A denota l’intersezione delle curve che
corrispondono ai punti 1, 3 e 5 nel piano xy
dell’immagine. La posizione del punto A indica
che questi tre punti si trovano sulla linea retta
passante per l’origine (ρ=0) e orientata a 45°.
In modo analogo, le curve che si intersecano nel
punto B nello spazio dei parametri indicano che i punti 2, 3 e 4 si trovano sulla linea retta orientata a -45°,
la cui distanza dall’origine è ρ=71 (la metà della distanza tra l’origine all’angolo opposto, arrotondata al
valore intero più vicino).
Infine i punti marcati con Q, R e S illustrano il fatto che la trasformata di Hough esibisce una relazione di
adiacenza riflessiva nei contorni a destra e a sinistra dello spazio dei parametri. Questa proprietà è il
risultato del cambiamento di segno di Θ e ρ nei contorni a .

Sogliatura
La sogliatura, per la sua semplicità di implementazione e velocità computazionale, è una delle tecniche più
importanti per la segmentazione delle immagini.

Sogliatura dell’intensità
Questo metodo ci permette, tramite l’istogramma di un’immagine, di estrarre gli oggetti che ci interessano
dallo sfondo. Se ad esempio abbiamo un istogramma dell’intensità di un’immagine composta di oggetti
chiari su uno sfondo scuro (quindi i valori di intensità sono raggruppati in due mode), possiamo estrarre gli
oggetti dallo sfondo scegliendo una determinata soglia T che separa le due mode presenti nell’istogramma.
Viene definito punto dell’oggetto ogni punto (x, y) nell’immagine in cui f(x,y) > T; al contrario viene definito
punto dello sfondo ogni punto (x, y) nell’immagine in cui f(x,y) < T;
L’immagine segmentata g(x, y) perciò è data da:

Abbiamo diversi tipi di sogliatura in base al valore di T:


Sogliatura globale:
quando T è una costante applicabile all’intera immagine
Sogliatura variabile:
quando il valore di T cambia nel corso del processo
1. Sogliatura regionale (o locale):
sogliatura variabile in cui il valore di T, in un qualsiasi punto (x, y), dipende dalle proprietà
dell’intorno del punto stesso
2. Sogliatura dinamica (o adattativa):
se T dipende dalle coordinate spaziali (x, y)

Il successo della sogliatura quindi dipende dall’altezza delle mode e dalle profondità delle valli che le
separano. I fattori che influenzano le proprietà delle valli sono i seguenti:
1) La distanza tra i picchi (maggiore è la distanza tra i picchi, maggiore è la probabilità di riuscire a
separare le mode)

2) Il rumore contenuto nell’immagine (all’aumentare del rumore le mode si allargano).


Per capire come il rumore modifichi le mode vediamo un’immagine di esempio:

Nel terzo caso non è possibile trovare una soglia per segmentare l’immagine, se non applicando
prima un’elaborazione aggiuntiva.
L’elaborazione aggiuntiva che permette di risolvere il problema del rumore è lo smoothing
dell’immagine, che va applicato quando non è possibile rimuovere il rumore alla sorgente.
Maggiore è lo smoothing che applichiamo maggiore è la presenza di errori (distorsione) dei
contorni.

3) Le relative dimensioni degli oggetti e dello sfondo.

4) L’uniformità della fonte di illuminazione.


Anche in questo caso vediamo un esempio:

l’illuminazione non uniforme non


permette di separare le mode.

5) L’uniformità delle proprietà di riflettanza dell’immagine.


L’illuminazione e la riflettanza sono importantissime per la riuscita della segmentazione ed è quindi
necessario gestire questi fattori all’inizio del processo di segmentazione tramite tre approcci:
a) Correggere direttamente il problema
b) Provare a correggere il modello globale attraverso un processo di elaborazione
c) Lavorare attorno alle parti non uniformi attraverso una sogliatura variabile

Ora vediamo in dettaglio i due tipi di sogliatura accennati prima.

Sogliatura globale
Come abbiamo visto prima, la sogliatura è globale quando la soglia T è una costante applicabile all’intera
immagine. Questo tipo di sogliatura possiamo applicarla quando le distribuzioni di intensità dei pixel dello
sfondo e degli oggetti dell’immagine sono sufficientemente distinti.
Risulta quindi evidente che per ogni immagine è necessario stimare automaticamente il valore della soglia,
per farlo si utilizza il seguente procedimento (algoritmo di bisezione con media):

1) Si stima un valore iniziale per la soglia globale T. Questo valore deve essere compreso tra il minore
e il maggiore livello di intensità dell’immagine, meglio se si utilizza l’intensità media.
2) Si segmenta l’immagine utilizzando T. Questa operazione da come risultato due gruppi di pixel: G1,
che comprende i pixel i cui valori di intensità sono maggiore della soglia T; G2 i cui pixel sono minori
della soglia T
3) Si calcolano i valori di intensità media m1 e m2 per i rispettivi gruppi G1 e G2
4) Si calcola un nuovo valore di soglia, utilizzando la seguente espressione:
T = (m1 + m2)/2
5) Si ripetono i passi dal 2 al 4 fino a quando la differenza tra i valori assegnati a T non risulta minore
di un parametro predefinito ΔT. Quindi maggiore è ΔT minori saranno i tempi di risposta.

Per effettuare la sogliatura globale è possibile utilizzare il metodo di Otsu, in quanto risulta essere un
metodo ottimale perché massimizza la varianza interclasse e si basa su calcoli eseguiti sull’istogramma
dell’immagine.
Il principio su cui si basa è che classi ben sogliate possono essere distinte rispetto ai valori di intensità dei
loro pixel, e viceversa, che una soglia riuscendo ad ottenere la migliore separazione tra le classi rispetto ai
valori di intensità risulterà la migliore.

L’algoritmo di Otsu può essere riassunto nei seguenti passi:+

1) Calcolare l’istogramma normalizzato dell’immagine. Le componenti dell’istogramma vengono


denotate con pi, i = 0,1,2,…,L-1
2) Calcolare le somme cumulative, P1(k), per k = 0,1,2,…,L-1
3) Calcolare le medie cumulative, m(k), per k = 0,1,2,…,L-1
4) Calcolare l’intensità globale media, mG
5) Calcolare la varianza interclasse σ2B(k), per k = 0,1,2,…,L-1
6) Calcolare la soglia di Otsu, k*, cioè il valore di k per il quale σ2B(k)è massimo.
Se il massimo non è unico, ottenere la soglia facendo la media dei valori di k corrispondenti ai
differenti massimi calcolati
7) Ottenere la misura di separabilità η*, tramite la seguente equazione (con k = k*):
Utilizzo dei contorni per migliorare la sogliatura globale
Un metodo che permette di migliorare le caratteristiche dei picchi nell’istogramma (ricordiamo che devono
essere alti, simmetrici e separati da profonde valli) è quello di considerare solo quei pixel che si trovano sui
contorni o in prossimità di essi, quindi tra gli oggetti e lo sfondo.

Questo metodo fa in modo che:


l’istogramma dipenda di meno dalle dimensioni degli oggetti e dello sfondo
l’istogramma risultante avrà dei picchi circa della stessa altezza
la probabilità che un pixel appartenga a un oggetto è simile alla probabilità che appartenga allo
sfondo (migliore simmetria delle mode)
accentuazione della valle tra i picchi (utilizzando pixel che soddisfano determinate condizioni
basate sul gradiente e sul laplaciano)

Il problema di questo metodo è che è necessario conoscere i contorni tra gli oggetti e lo sfondo. Un
algoritmo che permette di fare ciò è il seguente:

1) calcolare un’immagine di edge f(x,y) o come magnitudo del gradiente o tramite il valore assoluto
del laplaciano
2) individuare un valore di soglia T. Solitamente si utilizza un valore alto (90-esimo percentile) per fare
in modo che dopo il calcolo del gradiente o dell’immagine laplaciana siano estratti solo pochi pixel
3) applicare la soglia all’immagine del passo 1 per ottenere un’immagine binaria gT(x,y)
4) utilizzare l’immagine trovata nel passo 3 come maschera per poter individuare i pixel di f(x, y) che
corrispondono agli edge forti. Nello specifico questo viene fatto calcolando l’istogramma
utilizzando solo i pixel di f(x,y) che corrispondono alle posizioni dei pixel con valore 1 in gT(x,y)
5) utilizzare l’istogramma calcolato nel passo 4 per segmentare f(x, y) in maniera globale, ad esempio
tramite il metodo di Otsu

Sogliatura variabile
Come abbiamo visto prima, la sogliatura è locale quando il valore di T cambia nel corso del processo. Uno
dei metodi più semplici di sogliatura variabile è quello di suddividere un’immagine in rettangoli non
sovrapposti. Questo metodo permette di compensare l’illuminazione e la riflettenza non uniformi, infatti la
dimensione dei rettangoli deve essere piccola abbastanza da fare in modo che l’illuminazione di ognuno di
essi sia approssimativamente uniforme.
La debolezza della suddivisione dell’immagine consiste nel fatto che è efficace solo quando gli oggetti di
interesse e dello sfondo occupano regioni di dimensioni confrontabili.
Vediamo un esempio:

(a) immagine rumorosa e


ombreggiata
(b) istogramma
(c) segmentazione utilizzando
l’algoritmo globale iterativo
(d) risultato ottenuto utilizzando il
metodo di Otsu
(e) immagine suddivisa in sei
sottoimmagni
(f) risultato dell’applicazione del
metodo di Otsu in ogni singola
sottoimmagine
Segmentazione basata sulle regioni
Questo tipo di segmentazione si basa sulla ricerca diretta delle regioni.
Vediamo due tecniche diverse:

Region growing (crescita di regioni)


è una procedura che raggruppa i pixel o le sottoregioni in regioni via via più grandi basandosi su criteri
predefiniti di similarità e connettività. I pixel da cui si parte vengono chiamati seed (seme), e man mano si
aggiunge a questi semi quei pixel dell’intorno che hanno delle proprietà predefinite simili a quelle del seme
stesso.
Un problema di questo metodo è che bisogna stabilire una regola d’arresto, in quanto la crescita della
regione dovrebbe cessare quando non ci sono più pixel che soddisfano i criteri per l’inserimento nella
regione stessa.
Criteri aggiuntivi che aumentano la potenza dell’algoritmo utilizzano il concetto di dimensione e di
somiglianza tra un pixel candidato e i pixel già implicati nel processo di crescita e la forma della regione
stessa (implica che sia parzialmente disponibile un modello dei risultati previsti).

Un algoritmo di region growing può essere il seguente:


dove f(x, y) matrice dell’immagine di input; S(x,y) matrice seme che assegna il valore 1 a tutte le posizioni
dei punti seme e 0 nelle posizioni rimanenti; Q predicato da applicare ad ogni posizione (x, y)

1) trovare tutte le componenti connesse in S(x,y) ed erodere ogni componente connessa a un pixel.
Assegnare quindi il valore 1 a tutti i pixel di questo tipo e ai rimanenti 0
2) formare un’immagine fQ in modo che, nel punto (x,y), se l’immagine di input soddisfa il predicato Q
si abbia fQ(x,y) = 1, altrimenti fQ(x,y) = 0
3) sia g l’immagine che si è formata dall’aggiunta a ogni punto seed in S di tutti i punti di valore 1 in fQ
che sono 8-connessi al dato seed
4) marcare ogni componente connessa in g con un’etichetta diversa per ogni regione

Vediamo un’immagine di esempio:

(a) immagine che mostra una saldatura difettosa


(b) immagine contenente i punti di seed iniziali
(c) risultato del region growing
(d) immagine che mostra in nero i contorni delle
falle

Region splitting e merging


procedura che suddivide un’immagine in un insieme di regioni arbitrarie, ma disgiunte e successivamente le
fonde e/o le separa in regioni che possano soddisfare le cinque condizioni di segmentazione viste all’inizio
del capitolo.
In dettaglio considerando R la regione intera dell’immagine si sceglie un predicato Q. Si può segmentare R
in regioni sempre più piccole in modo che per ogni regione Ri, Q(Ri) = VERO. Quindi partendo dalla regione
intera, se Q(R) = FALSO si divide l’immagine in quadranti; se Q è falso per i quadranti che si ottengono
questi a loro volta vengono suddivisi in ulteriori sottoquadranti e così via.
Per questo motivo la tecnica di scissione che si utilizza viene rappresentata in forma di quadtrees, cioè di
alberi nei quali ogni nodo ha esattamente quattro ramificazioni. La radice dell’albero è l’immagine intera,
mentre ciascun nodo corrisponde alla suddivisione di un nodo precedente.
Vediamo un esempio grafico:

Se viene utilizzato soltanto il processo di splitting (scissione), la partizione finale conterrà soltanto regioni
adiacenti con proprietà identiche. Per risolvere questo problema si utilizza il processo di merging (fusione)
che unisce le regioni adiacenti i cui pixel soddisfano il predicato Q.

L’algoritmo quindi è composto dei seguenti passi:


1) scindere in quattro quadranti disgiunti ogni regione Ri per la quale Q(Ri) = FALSO
2) quando non è più possibile separarle, applicare il processo di merging alle regioni adiacenti Rj e Rk
per le quali Q(Rj unione Rk) = VERO
3) fermarsi quando il processo di merging non è più realizzabile

Vediamo un esempio:

L’obiettivo è quello di tagliare fuori l’anello di materia meno


densa che circonda il centro dell’immagine.
Notiamo che la regione di interesse ha le seguenti
caratteristiche: i dati hanno natura casuale, quindi la sua
deviazione standard è maggiore di quella dello sfondo (che è
quasi nulla) e della regione centrale (che è abbastanza sfocata);
l’intensità media è maggiore rispetto allo sfondo scuro e minore
della regione centrale più chiara.
Basandoci su queste caratteristiche possiamo definire un
predicato Q, i pixel in una regione che soddisfano il predicato
vengono etichettati di bianco, mentre tutti gli altri diventano
neri.
(a) Immagine originale della supernova
(b) Risultato ottenuto con una regione quadrata 32x32
(c) Risultato ottenuto con una regione quadrata 16x16
(d) Risultato ottenuto con una regione quadrata 8x8

Notiamo che il risultato migliore si ottiene utilizzando delle regioni quadrate 16x16, perché nel caso 8x8 si introducono
dei blocchi neri che non soddisfano il predicato, mentre nel caso 32x32 otteniamo una segmentazione “a blocchi”.
In tutti i casi comunque le regioni segmentate separano del tutto la zona centrale dallo sfondo, ottenendo tre aree
distinte: sfondo, zona densa, regione rada.
Questi risultati non possono essere ottenuti utilizzando i metodi più semplici quali la segmentazione basata su soglie o
contorni.
Segmentazione mediante watershed morfologica
Il concetto di watershed si basa sulla visualizzazione di un’immagine in tre dimensioni: due coordinate
spaziali e l’intensità. In questa interpretazione consideriamo tre punti chiave:
1. Punti che appartengono ad un minimo locale.
2. Bacino di raccolta (o watershed) del minimo: punti in cui una goccia d’acqua scorrerebbe verso uno
di tali minimi.
3. Linee di separazione (linee di watershed): punti in cui l’acqua potrebbe egualmente cadere in più di
un punto di minimo, che quindi formano le creste sulla superficie topografica.

L’obiettivo di questo metodo è quello di individuare le linee di watershed utilizzando il seguente sistema:
ogni minimo viene perforato e l’intera topografia viene riempita d’acqua dal basso lasciando che l’acqua
risalga uniforme attraverso questi fori (i minimi). Per prevenire la crescita del livello dell’acqua oltre i
contorni dell’immagine, si chiude il perimetro dell’immagine con delle dighe che hanno un’altezza maggiore
delle montagne, il cui valore viene determinato dal più alto valore di intensità presente nell’immagine.
Quando l’acqua dei differenti bacini rischia di debordare, viene costruita una diga al fine di prevenire tale
merging. Si continua con questo processo fino a raggiungere il massimo livello di allagamento (cioè il più
alto valore di intensità dell’immagine). La diga finale corrisponde alle linee di watershed, che corrispondono
al risultato della segmentazione desiderata, infatti le linee formano dei path connessi e di conseguenza dei
contorni continui tra le regioni; questo metodo elimina il problema delle linee di segmentazione
frammentate riscontrato in altri algoritmi.
Nota: tutto questo procedimento può essere fatto anche considerando l’acqua proveniente dall’alto, non
solo dai minimi.

Vediamo un esempio:

(a) Immagine originale


(b) Visualizzazione topografica
(c) - (d) due fasi dell’allagamento
(e) Risultato dell’ulteriore allagamento
(f) Principio di fusione dell’acqua dei due bacini (è stata costruita
una diga molto corta tra i due)
(g) Dighe più lunghe
(h) Linee di watershed finale (segmentazione)
Utilizzo dei marker
Questo algoritmo riscontra dei problemi in presenza di rumore e di irregolarità locali del gradiente, in
quanto porta ad una sovrasegmentazione (oversegmentation). Per risolvere questo problema è necessaria
una fase di pre-elaborazione nella quale si utilizzano i marker, cioè una componente connessa in
un’immagine. La selezione dei marker è formata di due passi principali: pre-elaborazione; determinazione
di un insieme di criteri che devono essere soddisfatti dai marker.
Ci sono due tipi di marker:
Marker interni: sono associati agli oggetti della figura.
Sono definiti come:
a) una regione circondata da punti di altitudine elevata
b) tale che i punti nella regione formino una componente connessa
c) in cui tutti i punti nella componente connessa abbiano la stessa intensità.

L’algoritmo watershed viene applicato come visto prima, ma con la condizione che solo i marker interni
siano possibili minimi regionali. Le linee di watershed che si ottengono sono i marker esterni.
Marker esterni: sono associati allo sfondo.
Dividono efficacemente l’immagine in regioni, dove ogni regione contiene un singolo marker
interno e parte dello sfondo.

Ora per poter concludere la segmentazione è possibile applicare l’algoritmo di watershed a ogni singola
regione.
La selezione dei marker che abbiamo visto si basa su descrizioni semplici, ma è possibile utilizzare
descrizioni più complesse come dimensione, forma, posizione per poter aggiungere una conoscenza a priori
nel processo di segmentazione simile ad alcune peculiarità del sistema visivo umano.

Vediamo un esempio:

(a) Immagine di elettroforesi


(b) Risultato dell’applicazione
dell’algoritmo di segmentazione
watershed sull’immagine gradiente.
Otteniamo un numero eccessivo di
regioni segmentate
(oversegmentation)

(a) Immagine che mostra i marker interni


(regioni in grigio chiaro) ed esterni
(linee di watershed)
(b) Risultato della segmentazione. Molto
migliore rispetto all’esempio
precedente.
Uso del moto nella segmentazione
Nelle applicazioni di imaging, il moto si verifica quando si ha uno spostamento tra il sistema di sensori e la
scena da visualizzare.

Tecniche spaziali
Di seguito vediamo l’uso del moto nella segmentazione nel dominio spaziale.

Approccio di base
Uno degli approcci più semplici per rilevare la variazione tra due scene f(x, y, ti) e f(x, y, tj), scattate in tempi
diversi a ti e tj, è quello di confrontare le due immagini pixel per pixel, generando un’immagine differenza.
Se abbiamo un’immagine di riferimento che contiene soltanto le componenti statiche e la confrontiamo
con le immagini successive della stessa scena, ma che includono un oggetto in movimento, otteniamo la
differenza in cui vengono rimossi gli elementi stazionari, mentre gli elementi non nulli corrispondono alle
componenti in movimento dell’immagine.
Matematicamente parlando l’immagine differenza ottenuta dalle immagini scattate ai tempi ti e tj è può
essere definita:

dove T è la soglia.
Quindi tutti i pixel di dij(x, y) che hanno valore 1 sono gli oggetti in movimento. Questo metodo è applicabile
soltanto se le due immagini vengono registrate spazialmente e se la componente di illuminazione è dentro i
limiti stabiliti dalla soglia. Altrimenti può capitare che i valori 1 siano dovuti alla presenza di rumore e
questo comporterebbe la presenza, nell’immagine differenza, di punti isolati; questi punti sono eliminabili
ignorando le regioni che contengono un numero di elementi inferiore ad una certa quantità stabilita.

Differenze cumulative
Il caso trattato finora prevede la presenza di due immagini, ma possiamo avere anche una sequenza di
immagini. In questo caso si parla di immagine differenza cumulativa (ADI, Accumulative Difference Image)
che si ottiene confrontando l’immagine di riferimento con tutte le immagini successive della sequenza.
Il procedimento è il seguente:
per ogni posizione dei pixel nell’immagine cumulativa, ogni volta che ci si imbatte in una differenza tra
l’immagine di riferimento e l’immagine in sequenza si incrementa un contatore. Quando si confronta il k-
esimo frame con l’immagine di riferimento, ciascun valore dell’immagine cumulativa fornisce il numero di
volte in cui l’intensità risulta, in quel punto, diversa rispetto al valore del pixel corrispondente
nell’immagine di riferimento.
Ci sono tre tipi di ADI:
Assoluta:

Contiene le regioni delle ADI negativa e positiva.


E’ possibile determinare la direzione e la velocità dell’oggetto in movimento.

Positiva:

L’area diversa da zero ha la stessa dimensione dell’oggetto in movimento, quindi i contatori non
aumentano quando l’oggetto non è più sovrapposto rispetto alla sua posizione nel frame di
riferimento.
La posizione dell’ADI corrisponde alla posizione dell’oggetto in movimento nel frame di riferimento.
Negativa:

E’ possibile determinare la direzione e la velocità dell’oggetto in movimento.

Dove R(x, y) è l’immagine di riferimento; k denota tk, quindi f(x, y, k) = f(x, y, tk).
Vediamo un’immagine chiarificatrice:

Il concetto chiave in questo metodo è che bisogna avere un’immagine di riferimento (contenente solo
elementi stazionari) attraverso la quale poter effettuare i confronti. In pratica però è difficile ottenere
un’immagine di riferimento che contiene solo elementi stazionari, risulta quindi necessario generarla
partendo dall’insieme delle immagini che contengono uno o più oggetti in movimento; questo viene fatto
quando si ha a che fare con scene molto affollate.
Il procedimento da seguire per generare l’immagine di riferimento è il seguente:
Si considera come immagine di riferimento la prima immagine della sequenza.
Quando tutte le componenti non stazionarie si sono allontanate dalle loro posizioni nell’immagine
di riferimento, il corrispondente sfondo nel frame può essere duplicato nella posizione che in
origine era occupata dagli oggetti nel frame di riferimento.
Quando tutti gli oggetti in movimento sono stati completamente rimossi dalle loro posizioni
originali, si può creare un’immagine di riferimento che contiene solo le componenti stazionarie.

Nota: lo spostamento degli oggetti può essere stabilito osservando le variazioni dell’ADI positiva, in quanto
abbiamo visto che permette di determinare la posizione iniziale di un oggetto in movimento.

Vediamo un esempio:

(a) - (b) due frame di una sequenza


(c) L’automobile è estratta da (a) e
il background è stato restaurato
attraverso la corrispondente area in
(b).

Per ottenere questo risultato sono stati applicati esattamente i passi descritti sopra.

Potrebbero piacerti anche