Newsgroup: it.comp.software.divx
Titolo: Algoritmi di resize: fate i vostri test

ho rilasciato un programmino che si chiama "test-scale",
scaricabile dalla mia pagina 
http://fsinapsi.altervista.org
l'archivio ssim-index.tar.gz contiene il codice sorgente di
test-scale e l'eseguile precompilato per linux.
l'archivio test-scale.zip (155680 bytes) contiene l'eseguibile
test-scale.exe per windows.
e' un programma a riga di comando che effettua dei test sulla
qualita' (basata sull'indice di similarita' strutturale) delle
immagini ottenute da vari algoritmi di resize.
il programma va lanciato dal prompt DOS, e necessita
obbligatoriamente di 4 argomenti; la riga di comando e'
questa:
test-scale <file> <rx> <ry> u|g
il primo argomento e' l'immagine su cui eseguire il test;
puo' essere in formato PNG, PPM o JPEG
il secondo argomento e' il coefficiente di scalatura
orizzontale; ad esempio, specificando 1, la risoluzione
orizzontale non cambia; specificando 1.2 la risoluzione
aumenta del 20%; specificando 0.8 diminuisce del 20%,
e cosi' via (i valori da usare sono nel range 0.5 - 2.0;
mi sono dimenticato di mettere un controllo, quindi non
andate al di fuori di questo range...)
il terzo argomento e' analogo al secondo, ma riguarda
la risoluzione verticale; anche in questo caso il
range e' 0.5 - 2.0
il quarto argomento e' "u" oppure "g", e serve a
selezionare la matrice dei pesi da usare per il calcolo
dell'indice SSIM; "u" sta per "uniforme 8x8" e "g" sta
per "gaussiana 11x11"; potete usare quella che volete,
ma la seconda e' molto piu' lenta da calcolare...
vediamo un esempio di utilizzo del programma.
prendete un DVD ed estraete un bel fotogramma che vi
piace, salvatelo come frame.png e battete questo
comando:
test-scale frame.png 1.2 1.2 u > test-scale.log
aspettate che il programma arrivi alla conclusione.
poi esaminate il file test-scale.log, che e' un semplice
file di testo (ad esempio, gli utenti windows possono guardarlo
con notepad); il file contiene il riepilogo di tutti i
test effettuati, in particolare la "SEZIONE 4" mostrera'
quali algoritmi si sono comportati meglio, in media.
qui di seguito riporto il risultato di un test che ho
effettuato da un frame estratto da un DVD...
(per Giubbe: se sei interessato solo al caso in cui il
resize intermedio e' stato fatto con lanczos, basta che
cerchi nella "SEZIONE 2" il gruppo intitolato "Resize
intermedio con lanczos")
per ora e' tutto.
segue il risultato di un test:
======================================================
[ SEZIONE 1 - DATI DEL TEST ESEGUITO ]
Immagine usata per il test: 1.ppm
Risoluzione iniziale: 720x576
Risoluzione intermedia: 864x691
Matrice usata per il calcolo SSIM: uniforme 8x8
[ SEZIONE 2 - RISULTATI PARZIALI ]
Di seguito vengono presentati tutti i risultati di tutti
i confronti, in ordine di indice decrescente
---------------------
Resize intermedio con lanczos (media = 0.979066)
sincR: 0.987459
lanczos: 0.987157
bicubic-spline: 0.986968
luma-bicubic: 0.986045
bicubic: 0.985665
full: 0.984742
area: 0.978390
bilinear: 0.974905
fast-bilinear: 0.974262
gauss: 0.966849
nearest-neighbour: 0.957283
---------------------
Resize intermedio con sincR (media = 0.978660)
sincR: 0.987575
lanczos: 0.987302
bicubic-spline: 0.987139
luma-bicubic: 0.986328
bicubic: 0.985902
full: 0.984228
area: 0.978270
bilinear: 0.974942
fast-bilinear: 0.973830
gauss: 0.966882
nearest-neighbour: 0.952867
---------------------
Resize intermedio con bicubic-spline (media = 0.978268)
sincR: 0.987245
lanczos: 0.986890
bicubic-spline: 0.986501
luma-bicubic: 0.985395
bicubic: 0.985036
full: 0.983477
area: 0.977034
bilinear: 0.973403
fast-bilinear: 0.973083
gauss: 0.965017
nearest-neighbour: 0.957869
---------------------
Resize intermedio con bicubic (media = 0.976788)
sincR: 0.985615
lanczos: 0.985301
bicubic-spline: 0.984722
luma-bicubic: 0.983510
bicubic: 0.983160
full: 0.981621
area: 0.975081
fast-bilinear: 0.971559
bilinear: 0.971184
gauss: 0.962692
nearest-neighbour: 0.960223
---------------------
Resize intermedio con luma-bicubic (media = 0.976780)
sincR: 0.985686
lanczos: 0.985363
bicubic-spline: 0.984775
luma-bicubic: 0.983447
bicubic: 0.983185
full: 0.981542
area: 0.975019
fast-bilinear: 0.971510
bilinear: 0.971114
gauss: 0.962609
nearest-neighbour: 0.960329
---------------------
Resize intermedio con full (media = 0.972721)
sincR: 0.982458
lanczos: 0.982407
bicubic-spline: 0.980986
bicubic: 0.979576
luma-bicubic: 0.979561
full: 0.972580
nearest-neighbour: 0.969784
area: 0.967905
fast-bilinear: 0.967136
bilinear: 0.963188
gauss: 0.954350
---------------------
Resize intermedio con nearest-neighbour (media = 0.962018)
nearest-neighbour: 0.991624
full: 0.965665
luma-bicubic: 0.964251
bicubic: 0.963946
lanczos: 0.961481
fast-bilinear: 0.961161
bicubic-spline: 0.961027
area: 0.959915
bilinear: 0.952589
sincR: 0.951313
gauss: 0.949225
---------------------
Resize intermedio con bilinear (media = 0.958752)
sincR: 0.970090
lanczos: 0.969632
bicubic-spline: 0.968051
luma-bicubic: 0.966516
bicubic: 0.966207
full: 0.962087
area: 0.953897
nearest-neighbour: 0.951405
fast-bilinear: 0.950626
bilinear: 0.948856
gauss: 0.938911
---------------------
Resize intermedio con area (media = 0.958752)
sincR: 0.970089
lanczos: 0.969631
bicubic-spline: 0.968051
luma-bicubic: 0.966515
bicubic: 0.966206
full: 0.962086
area: 0.953897
nearest-neighbour: 0.951405
fast-bilinear: 0.950626
bilinear: 0.948855
gauss: 0.938911
---------------------
Resize intermedio con fast-bilinear (media = 0.955900)
sincR: 0.966596
lanczos: 0.966298
bicubic-spline: 0.964789
luma-bicubic: 0.963399
bicubic: 0.963062
full: 0.959359
nearest-neighbour: 0.953947
area: 0.951245
bilinear: 0.946233
fast-bilinear: 0.943532
gauss: 0.936436
---------------------
Resize intermedio con gauss (media = 0.953652)
sincR: 0.966126
lanczos: 0.965331
bicubic-spline: 0.963446
luma-bicubic: 0.961607
bicubic: 0.961428
full: 0.954817
nearest-neighbour: 0.949685
area: 0.947616
fast-bilinear: 0.946042
bilinear: 0.942029
gauss: 0.932046
[ SEZIONE 3 - RISULTATI INTERMEDI ]
Nei dati che seguono, l'algoritmo citato è quello usato
per creare l'immagine intermedia, mentre il valore è
l'indice medio ottenuto da tutti gli algoritmi in tale
sessione:
lanczos: 0.979066
sincR: 0.978660
bicubic-spline: 0.978268
bicubic: 0.976788
luma-bicubic: 0.976780
full: 0.972721
nearest-neighbour: 0.962018
bilinear: 0.958752
area: 0.958752
fast-bilinear: 0.955900
gauss: 0.953652
[ SEZIONE 4 - RISULTATI FINALI ]
Nei dati che seguono, l'algoritmo citato è quello usato
per creare l'immagine finale, mentre il valore è
l'indice medio ottenuto da tale algoritmo in tutte
le sessioni (la media è pesata con i dati della sez. 3):
lanczos: 0.977077
sincR: 0.976488
bicubic-spline: 0.976142
luma-bicubic: 0.975244
bicubic: 0.974953
full: 0.972129
area: 0.965415
fast-bilinear: 0.962240
bilinear: 0.960790
nearest-neighbour: 0.959686
gauss: 0.952305

 bicubic-spline: 0.976142
guardando i risultati mi sono accorto di una particolarita':
i migliori di questo test sono risultati lanczos e sincR;
sincR ha sempre ottenuto punteggi piu' alti di lanczos, ma
l'unica volta che si e' comportato peggio (quando l'immagine
intermedia era stata ottenuta con "nearest neighbour") si
e' visto abbassare la media al punto da risultare secondo...
forse dovrei togliere "nearest neighbour" perche' si tratta
di un tipo di algoritmo molto diverso dagli altri, e credo
che tenda a falsare i risultati...

 ho rilasciato un programmino che si chiama "test-scale",
Spettacolo. ;)
-- 
Saluti, Kap - ICQ 19857429 - ¥'s Fan #01 - 
www.lordkap.it
 - VCC
L'arte è la scienza resa chiara. - Jean Cocteau

 Spettacolo. ;)
l'hai preso? l'hai provato su qualche immagine?
a me, cambiando immagini e risoluzioni intermedie, vengono
risultati diversi

 diversi
Probabilmente alcuni algoritmi funzionano diversamente a seconda del
range in cui lavorano.
-- 
Saluti, Kap - ICQ 19857429 - ¥'s Fan #01 - 
www.lordkap.it
 - VCC
Un gioco che un giorno un baro giocò con un gonzo, intitolato: "Testa
vinco io, croce perdi tu." - John Wilson Croker

 range in cui lavorano.
bisognerebbe prendere un'immagine e ripetere il test con vari valori
di risoluzione intermedia, tipo 0.8 0.85 0.9 0.95 1.05 1.1 1.15 1.2
e cercare di capire come cambiano i risultati;
poi ripetere il tutto con un' immagine diversa, ma avente la stessa
risoluzione.
poi ripetere con un'immagine di diversa risoluzione.
ci vuole un po' di tempo... vedro'...