2011-10-14 11 views
28

E 'possibile aumentare l'antialiasing in matplotlib? Posso ancora vedere alcuni alias nei miei dati, ho provato diversi backend ed è ancora lì. Il flag antialiasing delle linee è impostato.variazione di resistenza dell'antialiasing in matplotlib

Qui potete vedere quello che voglio dire

enter image description here

Si tratta di un campione prelevato da uno screenshot. Probabilmente non è il miglior esempio, ma immagino che si possano vedere le scale sulla linea. È stato preso con il backend wxagg.

sto usando matplotlib versione 1.01 con Windows 7.

Aggiornamento: non ho il codice che ha prodotto più l'immagine precedente, ma ho ancora il problema. Di seguito è riportato un semplice esempio di codice che mostra l'aliasing.

import numpy as np 
import matplotlib 
matplotlib.use('wxAgg') 
import matplotlib.pyplot as pl 
print 'Backend:', pl.get_backend() 

x = np.linspace(0,6,100) 
y = np.sin(x) 

for a in range(10): 
    pl.plot(x, a/10.*x, linewidth=1) 

pl.show() 

Backend: WXAgg E la trama: è lo stampa Sembra simile alla seguente. aliasing

Soprattutto la curva rossa inferiore mostra un aliasing chiaro.

+6

rende la trama con pixel di dimensioni superiori e una scala inferiore con un algoritmo di alta qualità. –

+0

ma per quanto riguarda le sessioni interattive? – P3trus

+0

Ti stai riferendo ai grafici delle immagini con 'imshow'? Se è così, questo non ha nulla a che fare con l'antialiasing, è solo l'algoritmo di interpolazione usato da imshow'. (Interpola l'array di colori a 3 bande, piuttosto che i dati originali, il che può portare a molti artefatti.) –

risposta

4

L'immagine aggiunta alla tua domanda è già perfettamente anti-alias. Non c'è niente di meglio di questo. Date un'occhiata a una versione ingrandita dell'immagine:

Upscaled version of the image in question

+1

Hai ragione nel dire che questo è ben contro l'alias, ma non sono sicuro che mi spingerei fino a "perfetto". Ci sono molti fattori che entrano in un buon algoritmo anti-alias. –

+0

1. Non sembra avere un numero limitato di sfumature (ad esempio il rendering di Font Windows) 2. Nessun artefatto visibile. 3. Il rendering subpixel non è un'opzione per le cose rosse. 4. La larghezza di un pixel-span in ogni riga è definita dalla larghezza della linea, quindi non può essere modificata dall'algoritmo. Io davvero non so come questo possa essere migliorato in alcun modo. Vedi un modo? – Simon

+0

Non mi riferivo nemmeno al rendering subpixel. Hai sollevato un fattore, il numero di sfumature, che è determinato dalla quantità di supersampling applicato. Posso pensare agli altri: forma e dimensione del filtro, linearità dello spazio colore. –

4

Se si salva l'immagine come file SVG, si avrà precisione infinita. Puoi quindi modificare questo .svg con qualcosa come InkScape e ottenere quanto precisione/antialiasing vuoi.

+0

Sì, esporta in 'svg -> inkscape -> esporta in png a 5x dpi -> GIMP -> [sfoca leggermente? ->] ridimensiona al 20% -> esporta nuovamente in png. Totalmente rimosso le linee bianche tra poligoni vicini per me. – naught101

Problemi correlati