5

Sto usando PIL per ridimensionare le mie immagini, il mio caso è di ingrandire l'immagine originale.ANTIALIAS vs BICUBIC in PIL (libreria immagini Python)?

Sono confuso sull'algoritmo utilizzato con `resample = ANTIALIAS '.

Secondo il documento sottostante, ANTIALIAS sembra essere il migliore durante il ridimensionamento. Mi chiedo Nel qual caso può BICUBIC vincere? (Alcuni dei miei test case mostra bicubico è la scelta migliore)

An optional resampling filter. 
    This can be one of NEAREST (use nearest neighbour), 
    BILINEAR (linear interpolation in a 2x2 environment), 
    BICUBIC (cubic spline interpolation in a 4x4 environment), 
    or ANTIALIAS (a high-quality downsampling filter). 
If omitted, or if the image has mode “1” or “P”, it is set NEAREST. 

Sono anche confuso circa la linear interpolation in a 2x2 environment e cubic spline interpolation in a 4x4 environment nel documento. Cosa significa qui?

Grazie.

+0

Wow. Ho sempre saputo che il PIL era un po 'incasinato, ma non me ne sono reso conto fino a quando non ho visto il codice. Proverò a fare un'indagine completa più tardi. –

risposta

0

Questi sono elencati in ordine di complessità da più bassa a più alta. Ci saranno differenze visive tra di loro. La differenza principale sarà la durata dell'elaborazione dell'algoritmo.

Dovrai decidere cosa conta di più per te, velocità o qualità. Se stai facendo solo 5 immagini, scegli la qualità. Se stai facendo 100.000 immagini, forse vai per la velocità. Dipende davvero da cosa lo stai usando.

L'ambiente 2x2 e 4x4 indica che l'algoritmo esamina un'area di pixel 2x2 o 4x4.

+0

in alcuni dei miei test case, bicubic è il migliore. puoi spiegarlo? – xunzhang

+1

Tutti hanno i loro punti di forza e di debolezza, in realtà dipende dall'immagine sorgente. Alcuni algoritmi possono avere un aspetto migliore per le immagini con linee di contrasto nitide, altri potrebbero funzionare meglio per le scene naturali. – aglassman

+0

è quello che sto chiedendo ... – xunzhang

11

Ora ho passato alla fonte per capire i dettagli. Non sono terribilmente contento di quello che ho visto.

Primo, BICUBIC. Ci sono un certo numero di formule che possono essere classificate come bicubiche, la più comune delle quali è l'interpolazione Catmull-Rom. Questo non è quello che PIL usa. Don Mitchell e Arun Netravali hanno scritto un articolo che analizza tutte le variazioni e le caratterizza utilizzando due variabili B e C; quello usato da PIL corrisponde a B = 0 e C = 1. Nel documento Mitchell-Netravali questo è chiaramente nella regione degli artefatti Ringing. Ciò significa che le immagini ingrandite avranno aloni luminosi o scuri innaturali attorno ai bordi.

Il prossimo è ANTIALIAS. Questo è basato su un filtro Lanczos-3, che normalmente sarebbe una buona scelta sia per il ridimensionamento che per l'upsize. Sfortunatamente c'è un errore nel codice durante l'upsize - piuttosto che occupare un'area di 6x6 pixel per calcolare il risultato, è troncato a 2x2 pixel. Questo lo rende appena migliore di quello bilineare.

+0

Hai segnalato questi problemi a PIL? e indipendentemente ti capita di sapere se sono ancora problemi? –

+0

@GordonWrigley No e no. Sospetto che con lo sviluppo attivo di Pillow le cose siano migliorate. –