Next: Differenze fra MPEG-1 e
Up: Riduzione della ridondanza spaziale
Previous: Codifica di entropia
Decodifica
Dopo aver subito le operazioni inverse alla codifica di entropia e allo zig-zag scan, ogni blocco deve essere sottoposto alla dequantizzazione.
La formula per la dequantizzazione intra è
 |
(2.25) |
e per la dequantizzazione nonintra:
 |
(2.26) |
L'operazione successiva è la DCT inversa (IDCT), definita da
![\begin{displaymath}
f(y,x) = \frac{2}{N}
\sum_{u=0}^{N-1} \sum_{v=0}^{N-1} C(u)...
...2x+1)u\pi}{2N} \bigg]
\cos \bigg[ \frac{(2y+1)v\pi}{2N} \bigg]
\end{displaymath}](img85.gif) |
(2.27) |
e nel caso dell' MPEG:
![\begin{displaymath}
f(y,x) = \frac{1}{4}
\sum_{u=0}^{7} \sum_{v=0}^{7} C(u) C(v...
...2x+1)u\pi}{16} \bigg]
\cos \bigg[ \frac{(2y+1)v\pi}{16} \bigg]
\end{displaymath}](img86.gif) |
(2.28) |
Osservando la formula si può vedere che il numero di operazioni richieste per la IDCT di una matrice di
elementi è di 1024 moltiplicazioni e 896 addizioni. Fortunatamente, sono stati studiati numerosi algoritmi che consentono di eseguire la IDCT con un numero di operazioni assai inferiore. Per questo motivo, i documenti dello standard MPEG non definiscono alcuna implementazione particolare della IDCT: è possibile utilizzare un qualsiasi algoritmo, purchè questo sia conforme allo standard IEEE 1180-1190, ``IEEE standard specification for the implementations of the
Inverse Discrete Cosine Transform'', inizialmente sviluppato dal CCITT. Questo standard definisce una precisa procedura per valutare i risultati di un algoritmo per la IDCT [6,36]:
- Per ogni pixel, si generino valori interi casuali nell'intervallo da -L a +H, utilizzando il generatore di numeri casuali fornito (versione in linguaggio C). Si dispongano i valori in matrici
, allocando ogni insieme di 8 numeri consecutivi in una riga. Si producano insiemi di dati di 10,000 blocchi ognuno per (L=256, H=255), (L=H=5), (L=H=300).
- Per ogni blocco si esegua una Trasformata Coseno Discreta (DCT) separabile e ortonormale, mediante moltiplicazione di matrici, utilizzando aritmetica in virgola mobile con almeno 64 bit di precisione
- Per ogni blocco, si arrotondino i 64 coefficienti trasformati all'intero più vicino, quindi li si tronchi nell'intervallo da -2048 a +2047. Questi sono i dati di ingresso su 12 bit alla trasformata inversa.
- Per ogni blocco di 64 pixel su 12 bit ognuno, prodotto al passo 3, si esegua una Trasformata Coseno Discreta Inversa (IDCT) separabile e ortonormale, mediante moltiplicazione di matrici, utilizzando aritmetica in virgola mobile con almeno 64 bit di precisione. Si arrotondino i valori ottenuti all'intero più vicino e li si tronchi nell'intervallo da -256 a +255. Questi blocchi di
pixel costituiscono i dati di riferimento per le uscite della IDCT.
- Per ogni blocco di 64 valori di 12 bit ognuno prodotto al passo 3, si utilizzi il processore IDCT proposto, o un suo esatto simulatore, per eseguire una Trasformata Coseno Discreta Inversa, quindi si tronchino i risultati nell'intervallo da -256 a +255. Questi blocchi di
pixel costituiscono i dati di prova per le uscite della IDCT.
- Per ognuno dei 64 valori di uscita della IDCT, e per ognuno dei 10,000 blocchi generati, si misuri l'errore di picco, l'errore medio e l'errore quadratico medio tra i dati di riferimento e quelli di prova.
- Per ogni pixel, l'errore di picco non deve superare 1 in ampiezza. Per ogni pixel, l'errore quadratico medio non deve superare 0.06. L'errore quadratico medio complessivo non deve superare 0.02. Per ogni pixel, l'errore medio non deve superare 0.0015 in ampiezza. L'errore medio complessivo non deve superare 0.0015 in ampiezza.
- Un ingresso di tutti zeri deve produrre un uscita di tutti zeri.
- Si ripetano le misure utilizzando esattamente gli stessi valori dei dati del passo uno, ma cambiando di segno ogni pixel.
Figura:
Generatore di numeri pseudocasuali secondo le specifiche IEEE 1180-1190.
|
L'errore di picco per pixel (ppe, pel peak error), l'errore quadratico medio per pixel (pmse, pel mean square error) e complessivo (omse, overall mean square error), e l'errore medio per pixel (pme, pel mean error) e complessivo (ome, overall mean error), sono così definiti:
 |
 |
 |
(2.29) |
 |
 |
 |
(2.30) |
 |
 |
 |
(2.31) |
 |
 |
 |
(2.32) |
 |
 |
 |
(2.33) |
 |
 |
 |
(2.34) |
Lo standard specifica, inoltre, una soluzione al problema dell'arrotondamento quando un'uscita della IDCT è esattamente
, dove
è un intero. Si supponga che un solo coefficiente sia diverso da zero, per definzione la IDCT è
![\begin{displaymath}
f(y,x)=\frac{1}{4} C(u) C(v) F(v,u)
\cos \bigg[ \frac{(2x+1) u \pi}{16} \bigg]
\cos \bigg[ \frac{(2y+1) u \pi}{16} \bigg]
\end{displaymath}](img102.gif) |
(2.35) |
Nel caso in cui u e v siano uguali a zero o quattro, l'equazione si riduce a
 |
(2.36) |
Se
è uguale a
, l'arrotondamento può dare
oppure
, a seconda di piccole differenze nella precisione. La soluzione proposta è di evitare valori pari per
, e da questo derivano le regole di ``oddification'' utilizzate nella quantizzazione dei coefficienti della DCT.
Next: Differenze fra MPEG-1 e
Up: Riduzione della ridondanza spaziale
Previous: Codifica di entropia
Marco Delaurenti
1999-06-25