Ricampionamento Immagini

Leonardo Maffi - 11 Mag. '99



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.
 

Sinc 255x254x32 grigi 
(file lossless Png)
Logaritmo del modulo della FFT di Sinc
    Di solito non è facile vedere le differenze fra gli algoritmi di ricampionamento del PhotoShop5 (Ps) e PaintShopPro5 (Psp). (Nel ricampionamento di piccole immagini la differenza di velocità fra i due programmi si nota poco. Quando si ricampionano immagini che occupano il 70% o il 130% della memoria Ram fisica del computer, si vede la differenza di efficienza nella gestione della memoria virtuale. Ps diviene molto più veloce del Psp, minimizzando i salti delle testine dell'Hd).

    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.
 

Ps, ordine 0
Ps, ordine 1
Ps, ordine 3
Psp, ordine 1
Psp, ordine 3
Nelle immagini, in particolare nella prima, si nota oltre alla struttura centrale, altre otto strutture a cerchi concentrici. Esse sono prodotte dall'aliasing (scalettatura) cioè da difetti del campionamento. Non dovrebbero essere visibili.
Come si vede Ps con interpolazione bicubica é il migliore. Date le piccole dimensioni dell'immagine non ho misurato i tempi di calcolo. Si noti come la riduzione con l'interpolazione bicubica nel Psp dia risultati simili a quella di ordine 0 (pixel più vicino).

    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.
IFFT (antitrasformata) della precedente
L'immagine risultante l'ho ridotta con Ps, e questo é stato il risultato:
 
Ps, ordine 3
Filtraggio e poi Ps, ordine 3
Sono visibili quasi solo le due strutture concentriche sopra e sotto, mentre la struttura centrale mostra i suoi anelli fino al massimo possibile.

    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.

Nota 188 del 19990307