(a) Calcolare il coefficiente DC e verificare la conservazione dell'energia. (b) Quantizzare la DCT con la tabella standard per luminanza scalata a qualità Q=30. (c) Ricostruire il blocco e calcolare MSE e PSNR. (d) Come cambia il risultato con altri valori di Q? La DCT del blocco è (valori arrotondati)
Per la DCT ortonormale 8×8 il coefficiente (0,0) vale Y(0,0)=82c(0)2∑m,nx(m,n)=41⋅21∑x=81∑x. La somma di tutti i 64 valori del blocco è 68, quindi Y(0,0)=868=8,5 ✓. (Il DC è 64=8 volte la media del blocco, che vale 6468=1,06.)
Ancora un controllo con la formula generale, per (u,v)=(0,1): Y(0,1)=82⋅21∑x(m,n)cos16(2n+1)π≈8,31 ✓.
Conservazione dell'energia (la DCT è ortogonale): ∑x2=19062 e ∑Y2=19062. Perciò l'errore che si fa quantizzando i coefficienti è lo stesso errore che si ritrova sui pixel (vedi (c)).
(b) Quantizzazione con Q=30
SF=305000=166,7, quindi q=min(256,⌈1,667q∗⌉) con q∗ la tabella standard (valori 16,11,10,16,24,…). Alcuni passi: q(0,0)=⌈1,667⋅16⌉=⌈26,7⌉=27; q(0,1)=⌈18,3⌉=19; q(0,2)=⌈16,7⌉=17; q(0,3)=27; q(7,7)=⌈1,667⋅99⌉=165. Tabella:
Solo 9 indici su 64 sono diversi da zero ("molti degli indici di quantizzazione sono nulli, rimangono pochi valori da codificare in lossless"): è il motivo per cui il blocco si comprime bene. Si noti che il DC è diventato 0: la media del blocco (8,5 su una scala che nel blocco centrato va da −128 a 127) è piccola rispetto al passo 27.
(c) Ricostruzione, MSE e PSNR
Il decodificatore moltiplica gli indici per q (dequantizzazione, "quantizzazione inversa" con abuso di termine):
Y~=idx⋅q=0−200000000−20−2200000−5100000005432−4000000−40−44000000000000000000000000000000
(per esempio −3⋅17=−51, 2⋅27=54, −1⋅40=−40), applica la DCT inversa e risomma 128, arrotondando:
Confronto con l'originale (X+128, per esempio 109 in alto a sinistra): l'errore massimo è 25 (riga 7, colonna 5: −28+128=100 contro 125), l'errore quadratico totale è 5477, quindi MSE=645477=85,58 e
PSNR=10log1085,582552=48,13−19,32=28,8dB.
Controllo sul dominio della trasformata: l'errore sui coefficienti 641∑(Y−Y~)2=85,55≈85,58 (la differenza, 0,03, è dovuta solo all'arrotondamento a interi dei pixel): la trasformata ortogonale conserva le distanze, quindi si può ragionare sull'errore direttamente sui coefficienti. 28,8 dB è sotto i 30 dB: qualità "scadente" nella scala empirica; ricordare che è un blocco con molto dettaglio e Q=30 è una qualità bassa.
(d) Effetto della qualità
Stesso blocco con diversi Q (tabella q∗ scalata con SF=5000/Q per Q≤50, 200−2Q per 50<Q≤99, 1 per Q=100):
Q
SF
indici non nulli
MSE
PSNR
10
500
2
197,6
25,2 dB
30
166,7
9
85,6
28,8 dB
50
100
13
64,9
30,0 dB
70
60
16
44,9
31,6 dB
90
20
34
5,5
40,8 dB
100
1
58
0,14
56,7 dB
Più alta è la qualità, più indici non nulli (più bit) e meno errore: è il compromesso tasso-distorsione. A Q=100 la tabella è tutta di 1: quasi nessuna quantizzazione (l'errore residuo viene solo dall'arrotondamento a interi); a Q=10 rimangono 2 indici e si perde quasi tutto il dettaglio.
Errori tipici
Dimenticare il centraggio (−128) prima della DCT e la risomma di 128 dopo l'IDCT.
Quantizzare con ⌊⋅⌋ invece di round.
Confondere indici e valori ricostruiti: al decoder si moltiplica per la stessa tabella q.
Usare per Q=30 il fattore Q5000 senza dividere per 100 (la tabella va scalata per 100SF=1,667).
Calcolare il PSNR con 255 al posto di 2b−1 in segnali a bit diversi (qui 8 bit: 255 è corretto).
Versione ripasso
BloccoX centrato (−128) 8×8, ∑x=68, ∑x2=19062. DC=81∑x=868=8,5 (DCT ortonormale: N2c(0)2∑x). Parseval: ∑Y2=∑x2=19062: la trasformata ortogonale conserva le distanze, l'errore sui coefficienti è l'errore sui pixel.
Ricostruzione.Y~=idx⋅q (−3⋅17=−51, 2⋅27=54, −1⋅40=−40, −1⋅20=−20, −1⋅22=−22, −1⋅44=−44, 1⋅32=32), IDCT, +128, arrotondamento. Primo elemento: 109→101; errore massimo 25. Errore quadratico totale 5477: MSE=645477=85,58; PSNR=48,13−19,32=28,8 dB. Sul dominio dei coefficienti 641∑(Y−Y~)2=85,55 (stesso valore a meno degli arrotondamenti).
Effetto di Q.
Q
non nulli
MSE
PSNR
10
2
197,6
25,2 dB
30
9
85,6
28,8 dB
50
13
64,9
30,0 dB
70
16
44,9
31,6 dB
90
34
5,5
40,8 dB
100
58
0,14
56,7 dB
Più qualità: più indici non nulli (più bit), meno errore.
Errori tipici: niente centraggio ±128; ⌊⋅⌋ invece di round; non moltiplicare gli indici per q al decoder; usare Q5000 senza dividere per 100; leggere 28,8 dB come "buono" (è sotto 30).