Attenzione: questa pagina contiene immagini in formato Png che Netscape4 e Explorer4 visualizzano, ma Explorer3 no.
Non è facile ridurre le dimensioni di una
immagine. Ho fatto delle prove con programmi di grafica 2D ed ho notato
delle differenze nei risultati.
Come immagine di prova ne uso una semplice, ma che permette di vedere
le differenze fra i vari metodi. Infatti costituisce un caso molto difficile.
E' un segnale di test in frequenza, ottenuto con formula cos(x2
+ y2), ha frequenze locali proporzionali (al quadrato) della
distanza dal centro.
![]() |
![]() |
|
(file lossless Png) |
|
PhotoShop5 possiede tre algoritmi, utilizzabili sia per ingrandimenti che per riduzioni. Il metodo più veloce è copiare il pixel più vicino (ordine 0). Il metodo successivo è più lento, ma spesso dà risultati visibilmente migliori, è l'interpolazione bilineare (ordine 1). Il terzo metodo è l'interpolazione bicubica, più lenta e spesso solo lievemente migliore (ordine 3). L'immagine Sinc di prova rivela facilmente le differenze di qualità dell'immagine risultante. Infatti contiene frequenze pulite e crescenti, che generano facilmente aliasing se non eliminate.
Anche PaintShopPro5 possiede tre algoritmi, interpolazione di ordine zero, bilineare e bicubica. Ma non conviene usare la bicubica in riduzione perché dà stranamente risultati peggiori della bilineare, oltre che essere più lenta. In ingrandimento invece è la bicubica che dà risultati migliori.
Nessuno dei programmi utilizza un metodo veloce,
ideato da me, di tempo di esecuzione compreso fra la interpolazione di
ordine zero e quella bilineare, ma dai risultati decisamente migliori della
prima. E' tanto veloce da poter essere usato per riscalature di qualità
decente in tempo reale.
Vedi sorgente pascal di routine per la riscalatura di buffer dati (segnali
1D e 2D di numeri floating-point): RiscalaPascal_0188_19990307.txt
In particolare vedi la sottoprocedura RiduzioneX. In essa si
usa questo algoritmo particolare, che ho adattato da quello classico per
il tracciamento di segmenti su display a linea di scansione, quello del
punto medio di Bresenham. Questa procedura riduce buffer solo sulla dimensione
X, e non usa vettori di appoggio. La procedura Riduzione lavora
generalizzando l'algoritmo del punto medio in 2D, e utilizza un vettore
di appoggio.
Adesso non ho intenzione di analizzare dettagliatamente del funzionamento
di questo algoritmo.
Ecco il confronto nella riduzione al 50% dell'immagine Sinc, usando
Ps e Psp con vari algoritmi. L'interpolazione di ordine 0 é stata
effettuata una sola volta perché dovrebbe dare risultati identici.
![]() |
![]() |
![]() |
![]() |
![]() |
|
|
|
|
|
|
Il modo migliore per ricampionare le immagini che
abbia trovato finora è eseguire un filtraggio passa basso con CVIPtools
(ottimo programma freeware di elaborazione di immagini, versione 3.6, della
Southern Illinois University a Edwardsville). Ho provato con un filtraggio
ideale con FFT (conservato solo un disco centrale dello spettro) ma i risultati
non sono stati buoni. Per cui ho riprovato con un filtro più adatto:
![]() |
![]() |
| Logaritmo del modulo della FFT di Sync, dopo filtraggio con butterworth di ordine 8, frequenza di taglio (cutoff) = 64, keep Dc = Off. |
|
![]() |
![]() |
|
|
Filtraggio e poi Ps, ordine 3 |
Di solito per immagini normali la differenza di qualità
non è percettibile.
I buoni programmi di elaborazione audio, come Cool Edit Pro 1.0,
quando eseguono un ricampionamento, eseguono anche un filtraggio, probabilmente
usando un butterworth.