informatica per la grafica - leoausili.it · informatica per la grafica lezione 4 operazioni...

Post on 15-Feb-2019

214 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related