Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
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).
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.
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.
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.
con
e
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à.
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:
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.
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.
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.
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.
dove s denota l’intensità di g, mentre r denota l’intensità di f in ogni punto (x, y).
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.
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.
𝐺 𝑧𝑞 = 𝐿 − 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.
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
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.
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:
𝑔 𝑥, 𝑦 = 𝑤 𝑠, 𝑡 𝑓 𝑥 + 𝑠, 𝑦 + 𝑡
𝑠=−𝑎 𝑡=−𝑏
dove x e y variano in modo tale che ogni pixel di w visiti ogni pixel di f.
𝑤 𝑥, 𝑦 ⋆ 𝑓 𝑥, 𝑦 = 𝑤 𝑠, 𝑡 𝑓 𝑥 + 𝑠, 𝑦 + 𝑡
𝑠=−𝑎 𝑡=−𝑏
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.
𝑅 = 𝑤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.
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.
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:
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).
𝜕𝑓
𝑔𝑥 𝜕𝑥
∇𝑓 ≡ 𝑔𝑟𝑎𝑑 𝑓 ≡ = 𝜕𝑓
𝑔𝑦
𝜕𝑦
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
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:
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.
dove
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:
Treno di impulsi
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:
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):
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.
Il treno di impulsi , periodico con periodo ΔT, invece può essere espresso come una serie di Fourier:
dove:
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
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:
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.
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.
è 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.
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
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)
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:
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.
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:
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:
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:
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.
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
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 .
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:
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:
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.
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.
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
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.
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:
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
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:
(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.
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:
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.
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 .
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:
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
Esempio 1
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
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
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.
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:
Come nel caso dei filtri low pass, i filtri high pass di Butterworth hanno dei risultati più tenui rispetto ai filtri
high pass ideali.
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:
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].
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:
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 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:
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.
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.
Vediamo un esempio:
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.
Serve per trovare i punti più chiari di un’immagine e permette di ridurre il rumore pepe avendo
questo rumore valori molto bassi.
filtri adattivi
sono più potenti, ma di maggiore complessità.
vediamone due esempi:
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.
dove G è la trasformata di Fourier dell’immagine osservata e A una costante che descrive la forza
dell’impulso.
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:
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.
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.
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 è un parametro che deve essere regolato in modo tale che venga soddisfatto il vincolo mostrato
sopra; è la trasformata di Fourier della funzione
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
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.
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à.
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.
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:
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.
Dato che le immagini full-color hanno almeno tre componenti i pixel a colori sono dei vettori. Quindi
avremo ad esempio:
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.
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à.
(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 è:
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
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:
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:
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 :
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:
Quindi le due componenti principali che formano un sistema di compressione di un’immagine sono
l’encoder e il decoder:
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.
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.
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à.
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.
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
Profondità di colore:
JPEG salva in full color (24 bits/pixel)
GIF salva in 8 bits/pixel
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:
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.
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
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.
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.
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.
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.
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:
Da notare che aperture e chiusure multiple di un insieme non hanno effetto dopo che l’operatore è stato
applicato una volta.
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:
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:
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:
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:
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:
Piatte (flat):
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:
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).
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:
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.
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.
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:
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:
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.
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:
Gradiente morfologico:
è possibile ottenere il gradiente morfologico tramite la dilatazione e l’erosione combinate con la
sottrazione dell’immagine:
quindi effettuiamo la dilatazione di f attraverso b e poi selezioniamo il minimo 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 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
d) per i = 1,2,…,n
indica le proprietà che devono essere soddisfatte dai pixel in una regione segmentata
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:
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:
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:
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.
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:
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.
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.
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
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
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.
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:
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)
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.
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.
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:
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
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.
Vediamo un esempio:
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:
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:
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:
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:
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:
Per ottenere questo risultato sono stati applicati esattamente i passi descritti sopra.