A seguito della richiesta di lucapas nel topic relativo al confronto del nuovo codec DivX 6 con gli altri, apro questo nuovo topic in cui, chi vuole, può dettagliare l'argomento "PSNR" come gli pare.
il PSNR è una stima di massima sulla bontà dell'immagine compressa, in altre parole è
la misura della distorsione introdotta comprimendo l'immagine originale.Una scala di valori (peraltro indicativa, da prendere con le dovute precauzioni, più avanti dirò il perchè) relativa alla bontà della compressione in funzione del PSNR (espresso in decibel, dB) è la seguente:
- [15,30] -> qualità pessima-scarsa
- [30,40] -> qualità scarsa-buona
- [40-55] -> qualità buona-ottima
In una compressione, normalmente il range di valori è compreso nell'intervallo [20-50] ma già i valori compresi nell'intervallo [45-50] sono ottenibili con quantizer 1. Quindi senza compressione.
C'è da dire che l'analisi secca del PSNR non dà molte informazioni.
Certamente valori particolarmente bassi potrebbero essere indici di una qualità piuttosto scadente ma è anche vero che valori medio-alti del PSNR non mettono al riparo da altri artefatti tipici della compressione MPEG come blocchettizzazione e ringing.
Non bisogna quindi considerare il PSNR come misura assoluta ma è molto utile quando si confrontano (sullo stesso video ovviamente):
- 1) gli indici ottenuti con diverse impostazione del codec (discriminante sulla CONFIGURAZIONE del codec)
- 2) gli indici ottenuti da codec diversi (discriminante sul CODEC)
- 3) gli indici ottenuti con differenti impostazioni dello script avs per es. (discriminante sul METODO, utile per capire l'impatto di una certa risoluzione, di un resize o di un filtro per il denoise)
Ovviamente i vari casi possono essere combinati (con criterio) fra loro.
Confrontando i vari PSNR si può avere un'idea di massima su come
vari la fedeltà della compressione rispetto all'originale al variare delle condizioni di compressione.Come calcolare il PSNR:
Esistono tool che permettono di calcolare altri indici (SSIM per es.) oltre al PSNR. Ne conosco un paio:
- PSNRCreator, in pratica una GUI per il calcolo del PSNR con Avisynth (http://www.canalxvid.com/pafiledb/pafiledb.php?action=category&id=2)
- VideoQualityStudio (www.everwicked.com/vqstudio)
molto contenuti, fra l'altro, in quanto a dimensioni.
Io uso uno script per AviSynth attraverso il quale si può analizzare un qualunque frammento del video con pochissime istruzioni. Il "compare" mi restituisce il PSNR.
Lo script che uso sempre è il seguente:
LoadPlugin("C:\Programmi\GordianKnot\dgmpgdec140final\DGDecode.dll")
# SOURCE A
a=mpeg2source("C:\myVideo\myFilm.d2v", idct=0).trim(n1,n2)
a=a.crop(x1,y1,x2,y2).filterResize(x,y,[a1,a2,...,an]).ConvertToYUY2
# SOURCE B
b=AVISource("C:\myVideo\myFilm.avi").trim(n1,n2).ConvertToYUY2
Compare(a,b,"","compare.log",true)
#SelectRangeEvery(280,14)
Ho volutamente commentato l'ultima riga perchè si può scegliere se analizzare una parte consistente del video prelevandone campioni con "SelectRangeEvery" oppure analizzarne tutti i frame.
Quanto al modo di procedere, è chiaro che se si analizzano i comportamenti dei codec (che è quello che va per la maggiore)
bisogna scegliere delle impostazioni che li rendano confrontabili.Es. si può verificare come si comportino i codec al massimo delle loro potenzialità o, al contrario, con bassi bitrate
senza alterare i filtri di resize, risoluzioni e altro. E' facile capire che, in caso contrario i risultati ottenuti non saranno di alcuna utilità.