informatica per la grafica - leoausili.it · informatica per la grafica lezione 4 operazioni...
TRANSCRIPT
Informatica per la Grafica
Lezione 4
Operazioni classiche sulle immagini
Di Blasi Gianpiero - D.M.I. - Università di Catania
Cosa impareremo oggi
● Gli operatori sulle immagini digitali● I filtri puntuali● L'istogramma di un'immagine● L'equalizzazione● Aritmetica delle immagini● I filtri lineari e convolutivi● I filtri non lineari
Gli operatori sulle immagini digitali
● Sono operazioni che possono alterare i valori dei pixel di una immagine
● Esistono migliaia di operatori usati a vario scopo● Essi implementano algoritmi e tecniche di
elaborazione molto diverse● In questo momento ci occuperemo
principalmente di due grandi classi di operatori:– operatori puntuali– operatori convolutivi
Semplifichiamoci la vita
● Per semplificare la discussione lavoreremo solo su immagini a toni di grigio
● Le medesime operazioni descritte per tali immagini si estendono nella massima parte dei casi alle immagini RGB
● Basta operare separatamente sui tre canali R, G e B e trattare ciascuno di essi come una immagine a toni di grigio indipendente dagli altri canali
● Ma prima di fare questo dobbiamo imparare a “convertire” un'immagine in toni di grigio
Conversione a toni di grigio (1)
● Abbiamo visto nella lezione 2 la legge che lega la luminanza Y con le componenti RGB
● Possiamo utilizzare tale legge per ottenere la conversione a toni di grigio
● In effetti tutti i software utilizzano tale legge, ma con dei valori decimali più precisi
● L'idea comunque è che la luminanza Y rappresenta “abbastanza fedelmente” la versione a toni di grigio di un'immagine
Y=0.3⋅R0.6⋅G0.1⋅B
Conversione a toni di grigio (2)
● C'è un altro sistema per convertire un'immagine a toni di grigio: l'indicizzazione
● Mettiamo alla prova i nostri software con i due sistemi appena proposti
Operatori locali e puntuali (1)
● Un operatore che preso in input il valore di un pixel ne restituisce uno cambiato si dice locale se il valore che esso dà in output dipende esclusivamente dai valori del pixel in ingresso e dei pixel ad esso “vicini”
● Tali pixel formano un intorno (neighborhood) del pixel trasformato
Operatori locali e puntuali (2)
● Un operatore che preso in input il valore di un pixel ne restituisce uno cambiato si dice puntuale se il valore che esso dà in output dipende esclusivamente dal valore del pixel in ingresso
● Ogni operatore puntuale è un operatore locale in cui il “vicinato” si riduce al singolo pixel in elaborazione
Gli operatori puntuali (1)
● Gli operatori puntuali sono semplici tabelle● Un pixel di una immagine a toni di grigio ha
(tipicamente) 256 possibili colori (livelli di grigio)
● Poiché un operatore puntuale dipende solo dal valore del pixel esso è completamente descritto da una tabella come quella che segue
Gli operatori puntuali (2)
● Tale tabella si chiama “Look Up Table”
● Ne abbiamo già parlato quando abbiamo introdotto la palette delle immagini e la compressione palette-based
● Il significato qui è “quasi” lo stesso: in quel caso la LUT serviva per ridurre il numero di colori ed indicizzarli, qui serve per “trasformare” un colore in un altro
Gli operatori puntuali (3)
● Numeri? No grazie preferisco i disegni
● Questa è universalmente l'interfaccia che tutti i programmi offrono per la visualizzazione e gestione delle operazioni puntuali
Gli operatori puntuali (4)
Vediamo un esempio di sistema di visualizzazione delle LUT
Esempi di LUT (1)
Identità: i valori non cambiano
Esempi di LUT (2)
Negativo: bianco e nero si
scambiano
Esempi di LUT (3)
Incupimento
Esempi di LUT (4)
Schiarimento
Esempi di LUT (5)
Diminuisce il contrasto
Esempi di LUT (6)
Aumenta il contrasto
Esempi di LUT (7)
Solarizza
Tutte le LUT che non hanno un
andamento regolare si dicono di solarizzazione
Esempi di LUT (8)
Soglia
Esempi di LUT (9)
Quantizzazione
Esercizi
● LUT– provare ad applicare una LUT a diverse tipologie di
immagini (PNG, GIF, JPEG, ecc.)– verificare il comportamento a seconda del formato– provare ad applicare ad una stessa immagine diversi
tipi di LUT– verificare il comportamento a seconda della LUT– provare ad applicare più LUT in cascata e verificare il
diverso comportamento a secondo dell'ordine di applicazione
La statistica: uno strumento di “diagnosi” per le immagini
● I pixel di una immagine posso essere visti come una “popolazione” sulla quale possiamo calcolare tutte le quantità statistiche descrittive che si usano normalmente:– media, mediana, varianza, deviazione standard,
quartili, percentili, ecc.
● Particolarmente importante è la conoscenza della distribuzione delle frequenze dei toni di grigio: l'istogramma
L'istogramma (1)
L'istogramma (2)Attenzione! Immagini diverse potrebbero avere istogrammi simili (se non uguali)L’istogramma tiene conto solo della distribuzione statistica dei livelli di grigio non della distribuzione spaziale dei pixel
L'istogramma (3)
Vediamo qualche esempio pratico e mettiamolo alla prova su diverse immagini
Esercizi
● Istogramma
– verificare l'istogramma di diverse tipologie di immagini (PNG, GIF, JPEG, ecc.)
– provare a modificare (in qualsiasi modo) le immagini e verificare come cambia l'istogramma corrispondente
LUT ed istogramma (1)
● Le operazioni di LUT possono alterare anche in modo significativo l'istogramma di un'immagine
● Ci tocca un bel lavoro adesso
● Dobbiamo infatti riprendere tutte le tecniche di LUT viste precedentemente e vedere come cambia l'istogramma
LUT ed istogramma (2)
Negativo: bianco e nero si
scambiano
LUT ed istogramma (3)
Incupimento
LUT ed istogramma (4)
Schiarimento
LUT ed istogramma (5)
Diminuisce il contrasto
LUT ed istogramma (6)
Aumenta il contrasto
LUT ed istogramma (7)
Solarizza
L'istogramma dopo una solarizzazione è poco
indicativo.Se considero LUT di tipo
“strano” posso trasformare un
istogramma dato in un qualunque altro
LUT ed istogramma (8)
Soglia
LUT ed istogramma (9)
Quantizzazione
Esercizi
● LUT ed istogramma– provare ad applicare una LUT a diverse tipologie di
immagini (PNG, GIF, JPEG, ecc.) e verificare come cambia l'istogramma
– verificare il comportamento a seconda del formato– provare ad applicare ad una stessa immagine diversi
tipi di LUT e verificare come cambia l'istogramma– verificare il comportamento a seconda della LUT– provare ad applicare più LUT in cascata e verificare il
diverso comportamento a secondo dell'ordine di applicazione e come cambia l'istogramma
Analisi degli difetti tramite istogramma (1)
● Gli istogrammi sono un potente strumento di analisi statistica di un'immagine
● Ma soprattutto gli istogrammi consentono una diagnosi dei difetti di una immagine
● Ovviamente non è possibile individuare tutti i difetti possibili
● I tipi di difettosità individuabili devono essere di un qualche tipo riconducibile ad una problema legato alla statistica
Analisi degli difetti tramite istogramma (2)
Immagine sottoesposta
Analisi degli difetti tramite istogramma (3)
Immagine sovraesposta
Analisi degli difetti tramite istogramma (4)
Immagine con range dinamico compresso
Toni non usati
Esercizi
● LUT ed istogramma
– cercare tramite istogramma alcune immagini che presentano i difetti appena presentati (altrimenti crearle artificialmente)
– provare ad applicare una (o più) LUT a tali immagini (PNG, GIF, JPEG, ecc.) nel tentativo di eliminare il difetto
L'equalizzazione (1)
● Si parla di immagine equalizzata quando il contributo di ogni differente tonalità di grigio è “pressappoco uguale”
● Si parla anche di istogramma uniforme● L'equalizzazione si può realizzare con un
semplice algoritmo (non verrà trattato)● Solitamente l'equalizzazione rende più nitida
un'immagine● Attenzione pero, poiché non sempre
l'equalizzazione migliora l'immagine
L'equalizzazione (2)
Il “pressappoco uguale” della slide precedente proviene dal fatto che (per problemi numerici) non è possibile nella pratica ottenere un contributo uguale per ogni tono di grigio.
Questo viene dal fatto che se il “contributo uguale” dovesse risultare un numero decimale sarà necessario approssimare in quale modo
L'equalizzazione (3)Ecco un caso in cui l'equalizzazione fallisce e peggiora l'immagine
In generale funziona male per distribuzioni multimodali (con due o più “picchi”)
Esercizi
● Equalizzazione– provare ad applicare un'equalizzazione a diverse
tipologie di immagini (PNG, GIF, JPEG, ecc.) e verificare come cambia l'istogramma
– trovare delle immagini su cui l'equalizzazione peggiora l'immagine stessa
– provare ad applicare più equalizzazioni in cascata e verificare come cambia l'istogramma
– provare ad applicare equalizzazione e LUT su una stessa immagine e verificare il risultato visivo e tramite l'istogramma
Aritmetica delle immagini (1)
● Fino a questo momento abbiamo soltanto modificato i valori dei pixel di un'immagine in base a delle regole statistiche
● Poiché le immagini non sono altro che “griglie” di numeri è possibile inventarsi una “aritmetica” delle immagini
● Ovvero definire le operazioni di somma, prodotto, ecc.
Aritmetica delle immagini (2)
● Ad esempio un'operazione di somma tra due immagini si ottiene facilmente “sommando” i valori delle due immagini “pixel per pixel”
+ =
Aritmetica delle immagini (3)
● L'operazione di moltiplicazione di un'immagine per “uno scalare” si ottiene “moltiplicando” i valori dell'immagine per un numero
2 x =
Aritmetica delle immagini (4)
● È possibile effettuare una miriade di operazioni tra le immagini
● Alcune anche particolarmente interessanti● I normali programmi di grafica permettono di
gestire tali operazioni principalmente tramite i layer
● Dei layer parleremo a breve, ma per adesso “supponiamo” di conoscerli già e vediamo che operazioni è possibile effettuare
Esercizi
● Aritmetica delle immagini
– provare i vari tipi di operazioni tra le immagini applicate a diverse tipologie di immagini (PNG, GIF, JPEG, ecc.) e verificare come cambia il risultato
– provare anche con più di due layer utilizzando diversi sistemi di sovrapposizione
– lavorare anche sulle trasparenze delle immagini
Problemi di overflow ed altro (1)
● Attenzione! Non tutte le operazioni tra immagini restituirebbero in output un'immagine
● Operando aritmeticamente può accadere che un pixel abbia:– un valore decimale– un valore negativo– un valore maggiore del massimo (tipicamente 255)
● Il primo problema si risolve facilmente con una approssimazione ad intero, gli altri due vanno sotto il nome di problemi di overflow
Problemi di overflow ed altro (2)
● Ci sono diversi modi per risolvere i problemi di overflow– si possono ad esempio semplicemente “troncare” a
zero i valori negativi ed a 255 i valori maggiori di 255● Questa soluzione spesso porta però a dei
problemi di perdita di dettaglio● Se tutto un insieme di valori viene posto a zero e
tutto un altro insieme di valori viene posto a 255 si rischia di “appiattire” alcune zone dell'immagine ottenendo un effetto “solarizzazione”
Problemi di overflow ed altro (3)
● Un sistema migliore è “rimappare” i nuovi valori nel range [0, 255]
● Sfortunatamente quasi nessun software fa una cosa del genere
● Per fare ciò bisogna seguire i seguenti passi:– individuare i valori minimo v
min e massimo v
max trovati
– rimappare ogni valore vold
nel valore vnew
secondo la legge:
vnew=255⋅vold−vmin
vmax−vmin
Problemi di overflow ed altro (4)
+ =
Soluzione 1 Soluzione 2 (simulata)
I filtri convolutivi (1)
● Introduciamo adesso uno degli strumenti più potenti che l'informatica mette a disposizione degli artisti: i filtri convolutivi
● La teoria matematica che sta alla base dei filtri convolutivi è particolarmente complessa e quindi non può essere trattata
● Questo ci impedirà di comprendere appieno il comportamento di un filtro convolutivo
● Cercheremo comunque di spiegare il tutto nel modo più semplice possibile
I filtri convolutivi (2)
● Il bello dei filtri convolutivi è che sono veramente facili da usare
● Inoltre se si riesce a capire come funzionano è anche molto semplice costruirseli da se per ottenere risultati particolari
● Tutti i programmi di elaborazione forniscono una miriade di filtri più o meno utili ed anche la possibilità di creare filtri “custom”
I filtri convolutivi (3)
● Per eseguire una convoluzione è necessario definire prima il kernel della convoluzione
● Il kernel di un filtro spiega come il filtro stesso si comporta: la sua definizione è fondamentale
● Vedremo molti esempi di kernel “notevoli” ovvero di kernel classici atti a svolgere particolari operazioni
● In due parole un kernel è una matrice che descrive come un pixel ed i suoi “vicini” sono utilizzati per calcolare il nuovo valore del pixel
I filtri convolutivi (4)
● Matematicamente un kernel è rappresentabile come una griglia (solitamente) quadrata
● Mentre l'operazione svolta può essere vista come la “somma dei prodotti” di tutti gli elementi del kernel per gli elementi dell'immagine
K=[k 0,0 k 0,1 k 0, n
k 1,0 k 1,1 k 1, n
k n ,0 k n ,1 k n , n
] F x , y=∑i , j
k i , j⋅I xi , y j
I filtri convolutivi (5)
Il modo migliore per capire il comportamento di un filtro convolutivo è tramite un esempio banale fatto
“su carta”
Il problema dei bordi
● Un problema che si presenta è quello dei bordi: come si fa la convoluzione ai bordi?
● Possibili soluzioni:– filtrare solo le zone centrali dell'immagine– supporre che tutto intorno all'immagine ci sia 0,
oppure duplicare il pixel accanto– assumere una topologia “toroidale”: quando si “sfora
a destra” si rientra a sinistra, quando si “sfora” in basso di rientra in alto e viceversa
● Ogni software fa scelte differenti e/o permette all'utente di decidere come deve comportarsi
Il problema dell'overflow
● Anche con le operazioni di convoluzione si rischia di ottenere un overflow
● Anche in questo caso i software di elaborazione si comportano in modo differente anche se la tendenza maggiore prevede il troncamento agli estremi
● Come nel caso precedente anche qui si rischia di avere un risultato anomalo e totalmente differente da cosa ci si aspettava
● Sfortunatamente non c'è molto da fare
Esercizi
● Filtri convolutivi– provare ad inventare dei kernel per filtri convolutivi e
verificare che effetto hanno sulle immagini– provare con diverse tipologie di immagini (PNG, GIF,
JPEG, ecc.) e verificare come cambia il risultato– provare anche con più layer utilizzando diversi
sistemi di sovrapposizione– provare i vari sistemi di gestione dei bordi– verificare le problematiche di overflow
Il filtro N-Box● Sono definiti da kernel NxN con ogni elemento pari a
1/N2 (con N solitamente dispari)● Hanno l'effetto di “sfocare” (o sfumare) le immagini● La sfocatura è molto forte in orizzontale e verticale ma
meno in diagonale● Esempi:
19×
1 111 111 11
125
× 1 11 1 11 11 1 1
1 11 1 1
1 11 1 1
1 11 1 1
3-Box5-Box
Il filtro N-Binomiale● Sono filtri di smussamento con kernel derivati dalla
“distribuzione binomiale” e sono anche detti filtri gaussiani
● Hanno il pregio di smussare egualmente in tutte le direzioni
● Smussano meno vigorosamente degli N-box● Esempi:
116
×2 114 222 11
3-Box5-Box
1256
× 24 366 24 616 244 16 44 61 4 1
16 244 16 44 61 4 1
La conservazione dell'energia
● I filtri appena presentati hanno una caratteristica molto importante: la somma di tutti gli elementi del kernel da sempre 1
● Con abuso di linguaggio, derivato dalla Fisica, si dice che tali filtri conservano l'energia o sono energy preserving
● Questo comporta che la somma dei valori totali della luminanza nella immagine non cambia
● L'immagine non si illumina ne scurisce● Esistono anche filtri non energy preserving
I lati orizzontali
● Questo tipo di filtro trova (dando un alto valore di luminanza) i “lati” cioè le zone di forte transizione chiaro/scuro
● Ne esistono molte versioni più o meno efficienti, ma in realtà la edge detection è un problema ancora aperto dell'informatica
● Esempi:
-1 -1-10 001 11
X-Edge-2 -1-10 002 11
X-Sobel
I lati verticali
● La situazione è identica nel caso dei lati verticali
● Ovviamente i filtri sono solo ruotati di 90 gradi
● Esempi:
0 1-10 1-10 1-1
Y-Edge0 1-10 2-20 1-1
Y-Sobel
Il problema della edge detection
● Come già detto il problema della edge detection non è ancora pienamente risolto, anzi è un problema, probabilmente, in generale irrisolvibile
● In ogni caso migliori risultati si ottengono:– con un'equalizzazione dopo l'applicazione dei filtri– con algoritmi più sofisticati (non lineari) per il calcolo
della grandezza del gradiente (somma del quadrato della risposta di un edge finder orizzontale e del quadrato della risposta di un edge finder verticale)
– con strategie più “intelligenti” (algoritmo di Canny, algoritmi fuzzy, tecniche di backtracking, ecc.)
Il filtro Laplaciano
● I filtri per l'individuazione dei lati (edge finding) appena presentati sono “approssimazioni al discreto” di un'operazione dell'analisi matematica (la derivata prima)
● Analogamente è possibile “approssimare” un'altra operazione (la derivata seconda) ed ottenere quindi l'operatore Laplaciano definito dalla maschera:
-1 004 -1-1-1 00
La conservazione dell'energia: atto 2
● Riprendiamo la discussione inerente la conservazione dell'energia nei filtri convolutivi
● Nel caso dei filtri di edge finding la somma di tutti gli elementi del kernel da sempre 0
● Ciò vuol dire che l'immagine ha “perso” la sua energia e sono rimasti solo i suoi “picchi”
● L'immagine si è fortemente scurita● In generale i filtri significativi danno sempre
come somma degli elementi del kernel un valore nell'intervallo [0, 1]
Il filtro di edge enhancing (1)
● Spesso non siamo interessati a trovare i “lati” di un'immagine ma a migliorarne la qualità, per esempio mettendola più “a fuoco”
● Questa è un'operazione opposta allo smoothing
● Per ottenere tale effetto si può adottare una maschera che, derivata dal Laplaciano, “rinforza” i lati presenti nell'immagine
Il filtro di edge enhancing (2)
● Purtroppo essa rinforza anche il rumore ed i difetti presenti nella immagine
● Si noti comunque che anche in questo caso la somma degli elementi del kernel vale 1
● Ciò vuol dire che questo filtro lascia inalterata l'energia media dell'immagine
-1 005 -1-1-1 00
Il filtro di edge enhancing (3)
Si osservi che aver migliorato i contorni ha anche messo in luce difetti e granularità dell'immagine inizialeSi osservi anche la particolare “texture” a quadretti di 8x8 pixel che è creata non dalla immagine ma dal JPEGA breve vedremo un filtro non lineare per la edge enhancing molto comune: unsharp mask
Originale Edge Enhanced
Il filtro di shifting
● I kernel di convoluzione sono una fonte inesauribile di “effetti speciali” da sperimentare
● Un'applicazione molto banale è lo “shifting” di un'immagine di un offset (dx, dy) rispetto alle coordinate iniziali
● Lo shifting di due posizioni a destra e due in alto per esempio è realizzato dal kernel:
0 00 0 00 00 0 00 00 0 00 01 0 0
0 00 0 0
Filtri locali non lineari (1)
● I filtri convolutivi sono speciali filtri “locali” o “di intorno”
● Essi sfruttano le informazioni in un “vicinato” del pixel per calcolare la propria risposta– usando sempre le stesse operazioni (shift invarianza)– agendo in maniera lineare (linearità)
● Ovviamente si può sfruttare l'informazione locale anche in maniera più complessa non necessariamente lineare
Filtri locali non lineari (2)
● Tale operazione diviene spesso indispensabile per realizzare effetti e manipolazioni sofisticate
● Purtroppo l'analisi matematica di tali filtri è assai complessa e gli algoritmi che li implementano sono difficili da ottimizzare
● Per tale motivo noi vedremo solo il risultato finale cercando di capire “intuitivamente” come il filtro si comporta senza scendere nei dettagli tecnici
I filtri order statistics (1)
● Una categoria di filtri locali non lineari assai usata è quella dei filtri order statistics
● Tali filtri, preso un intorno MxM di un pixel (con M generalmente dispari), sostituiscono il valore del pixel con il valore minimo (massimo, mediano, ecc.) di tutti i valori osservati in tale intorno
● A secondo della scelta fatta si possono ottenere risultati interessanti ed anche miglioramenti notevoli
I filtri order statistics (2)
● Se si sostituisce con il minimo si ottiene un incupimento dell'immagine (si eliminano per esempio macchioline chiare)
● Se si sostituisce con il massimo si ottiene uno schiarimento dell'immagine (si eliminano per esempio i punti neri)
● Se si sostituisce con il mediano si ottiene uno smussamento che però a differenza di N-box rispetta meglio i lati
I filtri order statistics (3)
L'immagine originale è stata “sporcata” con rumore nei quadranti NW e SE
L'immagine è stata filtrata con un filtro minimo applicato su intorni di 3x3 pixel
I filtri order statistics (4)
L'immagine originale è stata “sporcata” con rumore nei quadranti NW e SE
L'immagine è stata filtrata con un filtro massimo applicato su intorni di 3x3 pixel
I filtri order statistics (5)
L'immagine originale è stata “sporcata” con rumore nei quadranti NW e SE
L'immagine è stata filtrata con un filtro mediano applicato su intorni di 5x5 pixel
Unsharp mask:un algoritmo non lineare
● L'uso del kernel derivato dal Laplaciano per fare edge enhancing ha un difetto: esso viene applicato sempre a tutti i pixel dell'immagine
● Come conseguenza esso accentua i “dettagli” anche nelle zone omogenee mettendo in evidenza i difetti ed il rumore
● Sono stati proposti vari algoritmi per evitare questo fenomeno
● Gli algoritmi di tipo unsharp mask sono forse la più tradizionale tecnica usata a questo scopo
Unsharp mask:l'algoritmo (1)
● L'algoritmo procede come segue:– ottiene dall'utente un valore R detto raggio
(tipicamente nel range [1, 200])
– ottiene dall'utente un valore T detto soglia (tipicamente nel range [0, 255])
– ottiene dall'utente un numero C detto fattore di correzione (tipicamente nel range [0, 1], anche se alcuni software preferiscono usare altri valori o valori percentuali)
Unsharp mask:l'algoritmo (2)
● Per ogni pixel:
– se il range dinamico (la massima variazione di toni) in un intorno centrato nel pixel con raggio R è inferiore alla soglia T non si fa nulla
– altrimenti si sostituisce il valore del pixel con quello calcolato secondo lo schema presentato nella successiva slide
Unsharp mask:l'algoritmo (3)
● Se il test precedente non è stato verificato si procede come segue:– sia P il valore di partenza del pixel– si applichi un filtro di smoothing (N-box oppure N-
binomiale) al pixel– sia S il nuovo valore che si ottiene per il pixel– si sostituisca P con il nuovo valore V secondo la
formula:
– con C il parametro ottenuto nella prima fase
V= C2⋅C−1
⋅P−1−C 2⋅C−1
⋅S
Unsharp mask:l'implementazione
● Sfortunatamente non tutti i programmi forniscono l'unsharp mask come è stato appena presentato oppure lo forniscono sotto “ falsi nomi”
● La Tipica interfaccia utente è quella riportata in figura
R C T
Unsharp mask
Volevano stupirvicon effetti Speciali!!Cosa non si riesce a fare???
Esercizi
● C'è bisogno di dirvi cosa dovete fare??– sbizzarritevi con i filtri!!– provare tutto il provabile!!– date sfogo alla fantasia!!
Non andremo avanti finché non vedrò qualcosa di eccezionale fatto “semplicemente” con i filtri