La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Tecniche di interpolazione di basso ordine per lo zooming

Presentazioni simili


Presentazione sul tema: "Tecniche di interpolazione di basso ordine per lo zooming"— Transcript della presentazione:

1 Tecniche di interpolazione di basso ordine per lo zooming
Sturiale Alberto Billa Fabrizio Giuffrida Francesco Università degli Studi di Catania CdL Magistrale in Informatica Seminario MMO A.A. 2011/2012

2 Argomenti trattati Tematica del ridimensionamento delle immagini
Tecniche di interpolazione: Nearest Neighbor Bilineare Bicubica Analisi qualitativa dei risultati ottenuti Misurare la qualità delle immagini Presentazione dell’applicativo sviluppato e degli script dimostrativi

3 Ridimensionare un’immagine
La tematica del ridimensionamento comprende in realtà due aspetti: Ingrandimento Riduzione Perché sono diversi?

4 Riduzione di un’immagine
Partiamo dalla riduzione. In questo caso il problema consiste nel selezionare alcuni pixel (ovviamente non a caso!) per effettuare il cosiddetto “campionamento” dell’immagine di partenza. In questo modo avremo una riduzione delle dimensioni dell’immagine. Cosa implica questo processo?

5 Riduzione di un’immagine
Ciò che accade è la perdita di alcune informazioni. Vengono selezionati soltanto alcuni pixel, mentre quelli scartati vengono eliminati, e con essi anche le informazioni correlate. Si parla di compressione “lossy”

6 Ingrandimento di un’immagine
Ben diverso è il problema relativo all’ingrandimento di un’immagine. Se precedentemente il nostro problema era quello di selezionare delle informazioni, adesso la tematica è diametralmente opposta. Per quale motivo ingrandire un’immagine è più complesso?

7 Ingrandimento di un’immagine
In questo caso il nostro target è di aumentare le dimensioni di un’immagine. Questo implica necessariamente un aumento del numero di pixel. Come possiamo “inventare” delle informazioni che non conosciamo?

8 Una base comune La risposta al quesito non è banale e varia in base alla tecnica che si decide di utilizzare. Tuttavia, tutte le tecniche che coprono questo genere di problematica, trovano una base comune sulla quale svilupparsi, ovvero la teoria dell’interpolazione.

9 Fare delle ipotesi Il concetto di base è quello di ipotizzare quale valore può assumere il pixel del quale non conosciamo l’informazione relativa alla propria intensità, in modo tale da riempire gli spazi vuoti che si vengono a creare in seguito all’ingrandimento.

10 Su cosa basarsi? Sappiamo ora in che direzione muoverci, serve una stima dei valori sconosciuti. Ma in base a cosa? Ciò su cui possiamo basarci sono ovviamente le informazioni a disposizione. Il modo in cui queste vengono sfruttate, determina l’algoritmo adottato e la precisione della stima ottenuta.

11 Due grandi famiglie I tipi di interpolazione per lo zooming di immagini sono classificabili in due gruppi: Non adattivi (o di basso livello) Adattivi (o di alto livello) Dove sta la differenza?

12 Perché due categorie? I metodi adattivi utilizzano tecniche diverse a seconda del tipo di regione che stanno interpolando (in presenza di edge o di aree uniformi). I metodi non adattivi invece trattano tutti i pixel allo stesso modo. Perché utilizzare dei metodi di basso livello se ne esistono di migliori?

13 L’altra faccia della medaglia
I metodi non adattivi, trattati in questo seminario, sebbene risultino meno precisi rispetto all’altra categoria, hanno dalla loro una complessità computazionale piuttosto contenuta. Questo aspetto li rende molto utilizzati per applicazioni “senza troppe pretese”, come possono esserlo ad esempio ritoccare una nostra foto utilizzando una delle tante suite grafiche disponibili in commercio, ma non solo.

14 Come la vede un matematico
Dal punto di vista matematico, effettuare lo zooming su un’immagine significa trovare una funzione f che associ per ogni pixel p(x,y) della matrice risultante (immagine zoomata), il cui valore risulti sconosciuto (?), un valore I di intensità, in base ai valori dei pixel del suo intorno. Le caratteristiche di quest’ultimo variano con l’algoritmo utilizzato. In questo modo risulta possibile effettuare una stima del pixel “senza informazione”. Matematicamente, effettuare uno zoom su un’immagine A ottenendo un’immagine B, significa ottenere una matrice B di dimensioni doppie rispetto a quella di partenza, i cui punti p(x,y) privi di informazione assumono un valore di intensità I in base ad una funzione f che associa all’intorno del pixel del quale cerchiamo l’intensità, il valore di intensità I per esso. Le caratteristiche dell’intorno e come questo venga utilizzato sono peculiari dell’algoritmo e della precisione di interpolazione risultante.

15 Alcune considerazioni
Come abbiamo già detto, i valori risultanti dall’interpolazione saranno delle stime, dunque l’immagine zoomata risultante non avrà mai la qualità dell’immagine originale. Tuttavia i metodi che presenteremo risulteranno generare immagini con qualità sempre crescente.

16 Breve richiamo all’interpolazione
Faremo di seguito un breve excursus su questo argomento, dando una rapida occhiata ai principali tipi di interpolazione più utilizzati. Lineare Polinomiale Interpolazione di Lagrange

17 Di che si tratta? Per interpolazione si intende un metodo per individuare nuovi punti del piano cartesiano a partire da un insieme finito di punti dati, nell'ipotesi che tutti i punti si possano riferire ad una funzione f(x) di una data famiglia di funzioni di una variabile reale. L’interpolazione ci permette di individuare nuovi punti del piano a partire da un insieme finito di punti dati, ipotizzando che tutti i punti possano riferirsi ad una funzione f(x)

18 Un quesito Si supponga di avere la seguente tabella, che dà alcuni valori di una funzione. Diagramma dei punti dati. Ci chiediamo: quanto vale la funzione per esempio, in x =2.5? x f(x) 1 0.84 2 0.90 3 0.14

19 Criteri di scelta Per capire se il metodo scelto e la funzione interpolante trovata sono adatti, occorre rispondere ad alcuni quesiti: Quanto è esatto il metodo? Quanto è costoso? Quanti punti dati sono necessari per procedere?

20 Interpolazione lineare
Si tratta di uno dei metodi più semplici. Poiché 2.5 è il punto medio fra 2 e 3, è ragionevole assegnare a f(2.5) il valore medio fra f(2) e f(3) ovvero f(2.5) = In generale l'interpolazione lineare per ogni coppia di punti dati consecutivi, (xa, ya) e (xb, yb), definisce come funzione interpolante nell'intervallo [xa, xb] la seguente: x f(x) 1 0.84 2 0.90 3 0.14 Potremmo ipotizzare che la funzione assuma in 2.5 il valore medio dei valori assunti in 2 e 3 L’interpolazione lineare per ciascuna coppia di punti consecutivi (xa,ya) ed (xb,yb) assume come funzione interpolante nell’intervallo [xa,xb] la funzione che vedete in basso

21 Pro e contro L'interpolazione lineare è rapida e facile, ma non è molto precisa, come si può apprezzare dal grafico.

22 Interpolazione polinomiale
L'interpolazione polinomiale può considerarsi, grosso modo, una generalizzazione dell'interpolazione lineare. Mentre l'interpolazione lineare è data da una sequenza di funzioni lineari, nell’interpolazione polinomiale si cerca come interpolante un unico polinomio di un grado opportuno. In generale, se abbiamo n punti dati, esiste esattamente un polinomio di grado n−1 che passa attraverso tutti tali punti. L'errore di interpolazione è proporzionale alla distanza fra i punti dati elevata alla potenza n-esima. Mentre nell’interpolazione lineare si considera una sequenza di funzioni lineari, qui si utilizza un unico polinomio di grado pari al numero di punti dati (attraverso i quali il polinomio deve passare) meno 1. L’errore di interpolazione è proporzionale invece alla distanza tra i punti a disposizione elevata alla n

23 Pro e contro Nonostante questo tipo di interpolazione sia decisamente più precisa (come si può vedere dalla “morbidezza” del grafico), risulta anche più costosa dal punto di vista della complessità.

24 Interpolazione di Lagrange
E’ un particolare tipo di interpolazione polinomiale che si può così definire: Data una funzione ‪f(x)‬ e ‪n‬ punti ‪a1,a2...an‬ per cui sono noti i valori ‪f(a1), f(a2)...f(an)‬ si definisce il polinomio interpolante di Lagrange della funzione ‪f‬ il polinomio: E’ un tipo di interpolazione polinomiale che possiamo definire così: Data una funzione f(x) ed n punti da a1 ad an per i quali conosciamo i valori assunti dalla funzione in quei punti, possiamo definire il polinomio interpolante di Lagrange della funzione f il polinomio che vediamo, ovvero la sommatoria per i che va da 1 a n del valore assunto da f in (ai), moltiplicato per la produttoria del rapporto delle differenze tra x ed aj e tra ai ed aj

25 Un esempio Esprimiamo prima il polinomio precedente nella seguente forma: con Prima di fare un breve esempio scomponiamo la formula del polinomio interpolante in due contributi, in modo tale da facilitare il calcolo successivo. Isoliamo la produttoria che indichiamo con Lk(x)

26 Calcolo del polinomio interpolante

27 Pochi punti… Il risultato tuttavia è poco preciso a causa dello scarso grado del polinomio

28 Interpolazione con Matlab
Matlab mette a disposizione due funzioni per effettuare l’interpolazione in una o due dimensioni: interp1 interp2

29 Concentriamoci su interp2
y=interp2(X,Y,Forig(x,y),XInterp,YInterp,tipoInterp) dove: y: è l’insieme dei valori che la f(x,y) calcolata assume nei punti richiesti X: è un vettore che contiene le coordinate x dei punti (x,y,f(x,y)) noti Y: è un vettore che contiene le coordinate y dei punti (x,y,f(x,y)) noti Forig(x,y): è l’insieme dei nodi originali XInterp: è l’insieme dei valori x per i quali si vuole conoscere il valore assunto dalla funzione f (x,y) calcolata da interp2 YInterp: è l’insieme dei valori y per i quali si vuole conoscere il valore assunto dalla funzione f (x,y) calcolata da interp2 tipoInterp: è il tipo di interpolazione: ‘nearest’, ‘bilinear’, ‘bicubic’. Vedremo l’applicazione dei tre metodi con interp2 dopo averli illustrati in dettaglio. Vengono restituiti i valori assunti dalla funzione nei punti richiesti (y piccolo) a partire dai valori di partenza (Forig(x,y)) e dalle coordinate dei punti di partenza (X e Y) e di quelli interpolati (XInterp e YInterp). E’ necessario indicare inoltre il tipo di algoritmo che si intende utilizzare. Vedremo successivamente come applicarlo.

30 Interpolazione Nearest Neighbor
Si tratta del primo dei tre metodi che vedremo in dettaglio. Risulta essere il più semplice ed anche il meno accurato, ma il più veloce. Come funziona questa tecnica?

31 Funzionamento Il metodo di interpolazione Nearest Neighbor, detto anche “pixel replication”, non fa altro che applicare ai valori privi di informazione un valore di intensità pari a quello del pixel più vicino (appunto replicandolo):

32 Come realizzarlo? Come sappiamo, un’immagine può essere vista come una matrice di n righe ed m colonne. Dal punto di vista matematico, uno strumento molto utile per la realizzazione di questa tecnica interpolativa è quella rappresentata dal prodotto di Kronecker.

33 Prodotto di Kronecker Se A è una matrice m×n e B una matrice p×q, allora il loro prodotto di Kronecker è una matrice mp×nq definita a blocchi nel modo seguente: Vediamone un esempio per capire meglio

34 Un esempio funzionale Consideriamo 2 matrici A e B così strutturate: A= B= Il prodotto di Kronecker risultante sarà dato da:

35 Vantaggi di questa applicazione
In questo modo otteniamo un notevole risparmio di tempo nell’esecuzione dell’interpolazione Nearest Neighbor, con la possibilità di effettuare zoom al livello che preferiamo con l’unico accorgimento di modificare la grandezza della matrice B in base ad esso (livello 2: m=n=2, livello 3: m=n=3).

36 Uno sguardo al risultato

37 Nel dettaglio aliasing sui bordi

38 Pro e contro Pro: Rapidità di calcolo;
Bassa complessità computazionale; Buon risultato per immagini che presentano aree uniformi; Contro: Qualità scarsa per immagini ad alta risoluzione; Si verificano fenomeni di aliasing (bordi seghettati).

39 Applicazioni di questa tecnica
La tecnica interpolativa Nearest Neighbor, nonostante la sua estrema semplicità risulta avere alcune applicazioni: Rendering 3D in real-time per l’approssimazione dei valori di colore di una superficie poligonale; Thumbnails; Diagrammi di Voronoi (GIS, Pattern Matching, Fisica dei polimeri, …).

40 Voronoi? Per un dato insieme di punti nello spazio, un diagramma di Voronoi è una decomposizione dello spazio in celle, una per ogni punto dato, in modo che ovunque nello spazio, il punto più vicino risiede all'interno della cella. Ciò equivale all’interpolazione nearest neighbor, assegnando il valore della funzione nel punto dato a tutti i punti all'interno della cella. Di fatto non facciamo altro che suddividere i punti del piano in celle, i cui punti e dunque le cui caratteristiche sono determinate in base ai puntini neri che vedete. In particolare se consideriamo 2 punti e tracciamo una linea lungo i punti del piano da essi equidistanti, troviamo una delle linee che caratterizza una cella. Reiterando otterremmo le celle evidenziate. Di fatto viene applicata un’interpolazione di tipo “replication” a tutti i punti del piano che siano più vicini ad un punto nero rispetto che ad un altro.

41 Interpolazione Bilineare
In matematica l’interpolazione Bilineare è l’estensione 2D dell’interpolazione lineare per interpolare funzioni di 2 variabili. Per passare al campo bidimensionale, basta applicare successivamente lo stesso procedimento lungo entrambe le direzioni degli assi cartesiani

42 Problema : trovare il valore della funzione f al punto P = (x, y).
Passo 1: interpolazione lineare nella direzione x. I quattro puntini rossi indicano i punti dati e il punto verde è il punto in cui si vuole interpolare. dove Q11= (x1,y1) Q12= (x1,y2) Q21= (x2,y1) Q22= (x2,y2) dove

43 Passo 2: interpolazione lineare nella direzione y.
Infine determino la f(x,y), che ci fornisce l’intensità del pixel (x,y) : nota: Se avessimo eseguito prima l’interpolazione lineare nella direzione y e poi in direzione x, il risultato sarebbe lo stesso.

44 Dalla teoria alla pratica
Un'immagine può essere rappresentata per ogni canale su uno spazio tridimensionale in cui su x e y abbiamo la disposizione dei pixel mentre su z intensità riferita al canale.

45 Supponiamo di voler trovare il valore del pixel centrato sui 4 rossi
Effettuando le varie interpolazioni: Il valore della funzione ottenuta interpolando lungo y i punti “I0” e “I1” su “ys” rappresenta l’intensità del pixel interpolato.

46 Esempio Matlab interpolazione bilineare :
[x,y,z]=peaks(10); [x1,y1]=meshgrid(linspace(-3,3,40),linspace(-3,3,40)); z1=interp2(x, y, z,x1,y1,‘bilinear'); mesh(x1,y1,z1); IMMAGINE IN FUNZIONE DELLE INTENSITA’ DEI PIXEL.

47

48 Algoritmo sviluppato L’interpolazione bilineare stima quindi il valore del pixel da determinare considerando le intensità dei 4 pixel intorno ?

49 Passo 1:zooming immagine
Disponiamo i pixel noti sulla matrice da interpolare, passando da un’immagine originale 3x3 ad una 6x6

50 Passo 2: riempimento dei bordi
Tre diverse tecniche per risolvere il problema Zero padding Fixed value padding Diagonal symmetric padding Fixed Value Padding attribuisce ai pixel di contorno il valore del pixel considerato. Mentre l'ultima attribuisce al pixel corrente il valore del pixel speculare rispetto a quello del bordo.

51 In pratica ,scegliendo la tecnica ‘fixed value padding’ otteniamo:

52 Passo 3: interpolazione
1 caso: i pixel noti sono posizionati a forma di ‘x’ ? 2 caso: i pixel noti sono posizionati a forma di ‘+’ ?

53 Risultato

54 Pro e contro Pro: La resa visiva migliora rispetto al metodo precedente. Risoluzione del problema “aliasing” presentato sul Nearest-neighbor. costo computazione comunque basso Contro: Sfocatura diffusa su tutta l’immagine evidenziata in particolare sui contorni, che può comunque essere ridotta applicando un filtro per l’aumento del contrasto all’immagine, come l’unsharp mask, applicabile tramite i comandi fspecial() e imfilter().

55 Interpolazione Bicubica
Un metodo di interpolazione migliore si ottiene utilizzando quella bicubica, che utilizza funzioni smoothing o “smussamento”, interpolando sui 16 pixel vicini. Con questo metodo l'effetto visivo è generalmente migliore, anche se comunque introduce della distorsione che quindi non lo rende sempre adatto per certe tipologie di applicazioni, come ad esempio quelle mediche. La superficie interpolata risulta più liscia rispetto alle superfici corrispondenti ottenute utilizzando l'interpolazione bilineare ed hanno meno artefatti di interpolazione. Nel processamento delle immagini, l'interpolazione bicubica è il metodo più scelto per il ricampionamento dell'immagine, quando il costo computazionale non risulta un problema.

56 Primo passo : Creazione della matrice risultante tramite il valore di scaling. x2 …… …… …… …… 300x300 600x600

57 Secondo passo - Calcolo dell’interpolazione bicubica nel punto celeste nell’intorno dei 16 pixel della matrice 4x4 nell’immagine originale. 255 4x4

58 Per ogni coppia di punti ((i,j),(x,y)), si calcolano i due delta :
Dx=i-x Dy=j-y Essi rappresentano lo scarto tra la posizione calcolata analiticamente e quella effettiva del punto nell’immagine originale.

59 Questi due valori ci servono per calcolare il polinomio interpolatore di 3° grado a due variabili:
ed f(x,y) uguale al valore RGB dell’immagine originale nel punto (x,y).

60 I pesi della sommatoria sono direttamente proporzionali alla distanza di ogni punto dell’intorno da (x,y). Il polinomio R(x) è di 3° grado, e di conseguenza g(x’,y’) è un polinomio di 3° grado, costruito in modo da calcolare il valore del pixel in posizione (x’,y’) come una somma pesata dei valori dei pixel nell’immagine originale posizionati in un intorno 4x4 di (x,y).

61 L’operazione del calcolo del pixel da ricreare va estesa su tutta l’immagine.
…. 4x4 …. 300x300 600x600

62 Aspetti generali dell’intepolazione bicubica
Potremmo pensare che esista una griglia ( griglia di interpolazione) che si sposta lungo x ed y, tutte le volte che bisogna interpolare 16 pixel. Gli indici della griglia servono per calcolare in maniera rapida dal punto di vista dell’implementazione le coordinate dei punti. Ecco come potrebbe essere rappresentata la nostra matrice griglia.

63 Analisi matematica La tecnica dell’interpolazione Bicubica è esattamente un’estensione della cubica, ed entrambi, dunque, usano il metodo dei coefficienti indeterminati. Questo ci servirà per calcolarci l’intensità del pixel nel punto da ricreare. Il metodo consiste nell’imporre le condizioni di interpolazione ad un generico polinomio: e nel risolvere il sistema lineare:

64 Passi dell’interpolazione Bicubica
Si vuole determinare il valore di Z nel punto Q=(xs,ys) , per fare ciò interpoleremo i punti Qij con polinomi cubici prima lungo la direzione X e successivamente lungo la direzione Y, da qui il nome di interpolazione bicubica. Si assume di conoscere i valori di f nei punti Q00=(x0,y0), Q01=(x0,y0)….Qij=(xi,yj) con i=0,..,3 e j=0,..,3. Gli Qij sono i punti disposti nella griglia regolare a due dimensioni. x0= 0 ; y0= 0 x1= 1 ; y1= 1 x2= 2 ; y2= 2 x3= 3 ; y3= 3 z=f(xi,yj) con i,j=0,1,2,3

65 pk(x)=ak+bkx+ckx2+dkx3 per k=0,1,2,3
Passo 1 Determinare i coefficienti dei 4 polinomi cubici interpolanti lungo l’asse X: p0(x),p1(x),p2(x),p3(x) e calcolare i valori p0(xs),p1(xs),p2(xs),p3(xs). Cerchiamo 4 polinomi cubici, ciascuno del tipo: pk(x)=ak+bkx+ckx2+dkx3 per k=0,1,2,3 Secondo i vincoli: pk(x0)=f(x0,yk); pk(x1)=f(x1,yk) pk(x2)=f(x2,yk); pk(x3)=f(x3,yk) Eseguendo l’interpolazione lungo x per ciascun polinomio, yk è mantenuta costante. Per ciascun pk ci sono esattamente 4 vincoli di interpolazione. E visto che k=4 abbiamo in totale 4x4=16 vincoli di interpolazione. I coefficienti ak,bk,ck ed k si trovano risolvendo 4 sistemi di 4 equazioni in 4 incognite.

66 { pk(x0)=ak+bkx+ckx2+dkx3=f(x0,yk) pk(x1)=ak+bkx+ckx2+dkx3=f(x1,yk)
Lungo asse X Il sistema di 4 equazioni nelle 4 incognite è: pk(x0)=ak+bkx+ckx2+dkx3=f(x0,yk) pk(x1)=ak+bkx+ckx2+dkx3=f(x1,yk) pk(x2)=ak+bkx+ckx2+dkx3=f(x2,yk) pk(x3)=ak+bkx+ckx2+dkx3=f(x3,yk) per k=0,1,2,3 Complessivamente 16 equazioni con 16 incognite. {

67 Lungo asse X Z f(x3) = f(x3,y0) Mantenendo Yk costante. X0 X1 X2 X3

68 pk(xs)=ak+bkxs+ckx2s+dkx3s
Lungo asse X Trovati gli pk non ci resta che calcolare i valori pk(xs): pk(xs)=ak+bkxs+ckx2s+dkx3s per k=0,1,2,3 I valori pk(xs) ci serviranno quando dovremo interpolare lungo la direzione dell’asse y, ma prima bisogna calcolare il polinomio interpolante lungo y.

69 q(y) e calcolare il valore q(ys)
Passo 2 Determinare i coefficienti del polinomio cubico interpolante lungo l’asse Y: q(y) e calcolare il valore q(ys)

70 q(y0)=p0(xs); q(y1)=p1(xs) q(y2)=p2(xs); q(y3)=p3(xs)
Lungo asse Y Procedendo come prima si vuole determinare un polinomio cubico del tipo: q(y)=a+by+cy2+dy3 Secondo i vincoli: q(y0)=p0(xs); q(y1)=p1(xs) q(y2)=p2(xs); q(y3)=p3(xs)

71 q(y0)=a+by0+cy02+dy03=p0(xs) q(y1)=a+by1+cy12+dy13=p1(xs)
Lungo asse Y Il sistema di 4 equazioni nelle 4 incognite è: q(y0)=a+by0+cy02+dy03=p0(xs) q(y1)=a+by1+cy12+dy13=p1(xs) q(y2)=a+by2+cy22+dy23=p2(xs) q(y3)=a+by3+cy32+dy33=p3(xs)

72 q(ys)= a+ bys+ cys2+ dys3 Lungo asse Y
A questo punto determinare il valore di Z di (xs,ys) con: Z f(x3) = f(x3,y0) q(ys)= a+ bys+ cys2+ dys3 Mantenendo Xk costante. Y0 Y1 Y2 Y3

73 Mesh di un’interpolazione bicubica.

74 Per avere un'idea di come l'immagine viene ricampionata, sono stati riportate le funzioni utilizzate per il calcolo delle diverse tipologie di interpolazione. (a)Funzione di partenza (b)Funzione nearest neighbour. (c)Interpolazione bilineare (d)Interpolazione bicubica.

75 Vantaggi e Svantaggi del metodo:
Questo metodo assicura migliori risultati relativamente a nitidezza e qualità (risolve meglio i problemi di sfocatura ) Svantaggi: Risulta oneroso dal punto di vista computazionale. Talvolta provoca una lieve distorsione sull’immagine (a volte non idonea per applicazioni mediche).

76 Risultato Bicubica Originale

77 Nel dettaglio

78 A colpo d’occhio

79 Una valutazione oggettiva
E’ possibile valutare in modo oggettivo la qualità delle immagini grazie alle cosiddette metriche di qualità. Esistono due categorie di metriche di qualità: soggettive oggettive

80 Metriche soggettive Si basano su un sistema di rating di campioni di tester che valutano soggettivamente l’immagine che viene loro sottoposta. Richiedono elevate risorse umane, tempi lunghi e forniscono scarsa ripetibilità.

81 Metriche oggettive E’ a questo tipo di metrica che ci affideremo.
Si tratta di un indice di qualità che scaturisce da una serie di calcoli matematici, dunque oggettivi, tra l’immagine di origine e quella distorta. Non è previsto l’intervento umano nella valutazione. Utilizzeremo questa categoria di metriche per le nostre valutazioni, in particolare: MSE PSNR SSIM

82 MSE E‘ l‘acronimo di Mean Square Error e si calcola con la seguente formula: dove: N è il numero di pixel presenti nell’immagine, cioè N=n*m x ed y rappresentano rispettivamente l’altezza e la larghezza dell’immagine, e si riferiscono all’i-esimo pixel, rispettivamente, nell’immagine di riferimento e nell’immagine distorta

83 PSNR E‘ l‘acronimo di Peak Signal-to Noise Ratio e si calcola con la seguente formula: dove: MSE è il Mean Square Error L è il range dinamico dei valori dei pixel, cioè per un segnale che presenta n bits/pixel, L è uguale a 2n-1

84 SSIM E’ l’acronimo di Structural SIMilarity e misura la similarità tra due immagini. Si basa sul fatto che il sistema visivo umano è in grado di estrarre informazioni strutturali dal campo visivo. Pertanto, una misurazione della perdita di informazione strutturale può fornire una buona approssimazione alla distorsione dell’immagine percepita. dove: x e y sono due segnali non negativi corrispondenti rispettivamente all’immagine campione e a quella distorta μx ed μy sono la media di x e y σ2x e σ2y sono la varianza di x e y σxy è la covarianza di x e y C1 e C2 sono due costanti

85 Applicazioni MATLAB

86 Applicativi Per questo seminario sono stati realizzati due applicativi principali Zoomer 2X con analisi dei risultati Script che raccoglie l’applicazione degli algoritmi Matlab per l’interpolazione

87 Zoomer

88 Caratteristiche principali
SCREEN PRINCIPALE SERIE DI MONITOR MONITOR QUALITA’ MONITOR TEMPO

89 Componenti principali
L’applicativo si compone delle seguenti componenti principali: GUI Algoritmo di interpolazione Nearest Neighbor Algoritmo di interpolazione Bilineare Algoritmo di interpolazione Bicubico Funzioni per il calcolo di tempi di esecuzione e metriche

90 Come avremmo potuto implementarlo
Nearest Neighbor Come avremmo potuto implementarlo İmg=double(imread(’kodim21.png’)); [rows colums planes]=size(img); %matrice di dimensioni doppie new=zeros(rows*2,columns*2,planes); for i=1:1:rows for j=1:1:columns new(2*i,2*j,:)=img(i,j,:); % copia del valore originale in new(2*i,2*j) new(2*i-1,2*j,:)=img(i,j,:); % valore replicato in new(2*i-1,2*j) new(2*i-1,2*j-1,:)=img(i,j,:); % valore replicato in new(2*i-1,2*j-1) new(2*i,2*j-1,:)=img(i,j,:); % valore replicato in new(2*i,2*j-1) end

91 Come lo abbiamo implementato
Nearest Neighbor Come lo abbiamo implementato A=double(imread(’kodim21.png’)); % matrice con la quale effettuare il prodotto di Kronecker B=ones(2,2); Re=kron(double(A(:,:,1)),B); % canale rosso Gr=kron(double(A(:,:,2)),B); % canale verde Bl=kron(double(A(:,:,3)),B); % canale blu % ricomposizione dell’immagine img(:,:,1)=uint8(Re); img(:,:,2)=uint8(Gr); img(:,:,3)=uint8(Bl);

92 Bilineare for i=1:1:M % Definizione di partenza della matrice a dimensione doppia. for j=1:1:N img2 (i*2,j*2,:)=img(i,j,:); end for i=1:1:M %Ciclo che definisce i bordi immagine %Definizione prima colonna %Definizione prima riga if(i==1) if(j==1) img2(1,2*j,:)=img(i,j,:); img2(2*i,1,:)=img(i,j,:); img2(1,2*j-1,:)=img(i,j,:); img2(2*i-1,1,:)=img(i,j,:); end end %Definizione ultima colonna %Definizione ultima riga if(i==M) if(j==N) img2(M*2,2*j,:)=img(i,j,:); img2(2*i,N*2,:)=img(i,j,:); img2(M*2,2*j-1,:)=img(i,j,:); img2(2*i-1,N*2,:)=img(i,j,:); end end

93 Fasi di interpolazione
if((mod(i,2)~=0 && mod(j,2)~=0)) %Ricerca posizioni dispari pixel=[img2(i-1,j-1,:) img2(i-1,j+1,:) img2(i+1,j+1,:) img2(i+1,j-1,:)]; %Ricerca dei valori a x img2(i,j,:)=mean(pixel); %Calcolo del valore del pixel if((mod(i,2)==0 | mod(j,2)==0) & (~(mod(i,2)==0 & mod(j,2)==0))) % Ricerca delle posizioni pari-dispari pixel=[img2(i,j-1,:) img2(i,j+1,:) img2(i-1,j,:) img2(i+1,j,:)]; % Ricerca dei valori a + img2(i,j,:)=mean(pixel); %Calcolo del valore del pixel

94 Bicubica %Calcolo in tutta l’immagine interpolata %Calcolo g(x’ , y’)
function Interpolata = Bicubica(Interpolata,ImmagineOriginale,Z) [NumRighe NumColonne]=size(Interpolata); [NumRigheOriginali NumColonneOriginali]=size(ImmagineOriginale); RapportoRighe=NumRigheOriginali/NumRighe; RapportoColonne=NumColonneOriginali/NumColonne; H=waitbar(0,'Interpolazione in corso'); for y1=1:NumRighe i=y1*RapportoRighe; y=floor(i); dy=j-y; for x1=1:NumColonne j=x1*RapportoColonne; x=floor(j); dx=i-x; Interpolata(y1,x1)=0; for m=-1:2 Diffx=m-dx; Sommax=x+m; for n=-1:2 Interpolata(y1,x1)=Interpolata(y1,x1)+f(ImmagineOriginale,NumRigheOriginali,NumColonneOriginali,Sommax,y+n)*R(Diffx)*R(dy-n); end waitbar(y1/NumRighe,H); close(H); %Calcolo in tutta l’immagine interpolata %Calcolo g(x’ , y’)

95 Bicubica %Polinomio di 3°grado %Problema del padding
% Funzione R function R = R(x) R = (P(x+2)^3 - 4*P(x+1)^3 + 6*P(x)^3 - 4*P(x-1)^3)/6; % Funzione P function P = P(x) if x > 0 P = x; else P = 0; end % Funzione per ottenere il valore di un pixel dell'immagine originale function f = f(Matrice,NumRighe,NumColonne,x,y) %i-->y, j-->x if x<=0 x=1; if y<=0 y=1; if x>NumColonne x=NumColonne; if y>NumRighe y=NumRighe; f=Matrice(y,x); %Polinomio di 3°grado %Problema del padding

96 Interpolazione con Matlab

97 Funzioni principali Lo script si compone delle seguenti funzioni principali: Algoritmo di interpolazione Nearest Neighbor Algoritmo di interpolazione Bilineare Algoritmo di interpolazione Bicubico Funzioni per il calcolo delle metriche

98 Nearest Neighbor src=imread(’kodim21.png'); n=size(src); % Matrici di origine e destinazione [x,y] = meshgrid(1:n); [xi,yi] = meshgrid(1:0.50:n); for k = 1:3 output(:,:,k)= interp2(x,y,double(src(:,:,k)),xi,yi,'nearest'); % applicazione interp2 end figure; imshow(uint8(output));

99 Bilineare src=imread(’kodim21.png'); n=size(src); % Matrici di origine e destinazione [x,y] = meshgrid(1:n); [xi,yi] = meshgrid(1:0.50:n); for k = 1:3 output(:,:,k)= interp2(x,y,double(src(:,:,k)),xi,yi,’bilinear'); % applicazione interp2 end figure; imshow(uint8(output));

100 Bicubica src=imread(’kodim21.png'); n=size(src); % Matrici di origine e destinazione [x,y] = meshgrid(1:n); [xi,yi] = meshgrid(1:0.50:n); for k = 1:3 output(:,:,k)= interp2(x,y,double(src(:,:,k)),xi,yi,’bicubic'); % applicazione interp2 end figure; imshow(uint8(output));

101 Analisi dei risultati Tempi di esecuzione Replication Bilineare
Bicubica

102 Distorsioni introdotte
Analisi dei risultati Distorsioni introdotte aliasing sfocatura Altre distorsioni tipiche sono: edge halo: comparsa di aloni luminosi sui bordi distorsioni sulle zone di alta frequenza (eliminazione dei dettagli)

103 Analisi dei risultati Qualità

104 Una piccola annotazione
2 Per il calcolo delle metriche di qualità tra due immagini, è necessario disporre di due immagini di dimensioni identiche. Per questo motivo i nostri applicativi effettuano un campionamento sull’immagine originale. L’immagine risultante viene utilizzata per effettuare le operazioni di zooming, mentre quella originale rappresenta il termine di paragone con le immagini ingrandite. 3 1 RICAMPIONAMENTO ZOOMING CALCOLO METRICHE DI QUALITA’

105 FINE


Scaricare ppt "Tecniche di interpolazione di basso ordine per lo zooming"

Presentazioni simili


Annunci Google