2011-10-14 11 views
28

¿Es posible aumentar el antialiasing en matplotlib? Todavía puedo ver algunos alias en mis datos, probé varios backends y todavía está allí. Se establece el indicador antialiasing de las líneas.cambiar la intensidad del antialiasing en matplotlib

Aquí se puede ver lo que quiero decir

enter image description here

Es una muestra tomada de una captura de pantalla. Probablemente no sea el mejor ejemplo, pero creo que uno puede ver las escaleras en la línea. Fue tomado con el backend de wxagg.

estoy usando matplotlib versión 1.01 con Windows 7.

Actualización: no tengo el código que produjo la imagen anterior más, pero todavía tengo el problema. A continuación se muestra un ejemplo de código simple que muestra el 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 Y la trama resultante es de impresión se parece a la siguiente. aliasing

Especialmente la curva roja inferior muestra un alias claro.

+6

renderice su trama a mayores dimensiones de píxeles y baje la escala con un algoritmo de alta calidad. –

+0

, pero ¿qué ocurre con las sesiones interactivas? – P3trus

+0

¿Se refiere a gráficos de imágenes con 'imshow'? Si es así, eso no tiene nada que ver con el antialiasing, ese es solo el algoritmo de interpolación utilizado por 'imshow'. (Interpola la matriz de colores de 3 bandas, en lugar de los datos originales, lo que puede generar muchos artefactos). –

Respuesta

4

La imagen que ha agregado a su pregunta ya está perfectamente suavizada. No hay nada mejor que esto. Echar un vistazo a una versión ampliada de la imagen:

Upscaled version of the image in question

+1

Tiene razón en que esto está bien contra el alias, pero no estoy seguro de que vaya tan lejos como "perfecto". Hay muchos factores que entran en un buen algoritmo anti-alias. –

+0

1. No parece tener un número limitado de tonos (como la representación de la fuente de Windows, por ejemplo) 2. No hay artefactos visibles. 3. La representación subpixel no es una opción para cosas rojas. 4. El ancho de un pixel-span en cada fila se define por el ancho de línea, por lo que no puede ser modificado por el algoritmo. Realmente no sé cómo se podría mejorar esto de ninguna manera. ¿Ves una manera? – Simon

+0

Ni siquiera me refería a la representación subpixel. Has mencionado un factor, el número de tonos, que está determinado por la cantidad de supersampling aplicada. Puedo pensar en otros: forma y tamaño del filtro, linealidad del espacio de color. –

4

Si guarda la imagen como un archivo .svg, tendrá una precisión infinita. Luego puede editar este .svg con algo así como InkScape, y obtener la precisión/antialiasing que desee.

+0

Sí, exportar a 'svg -> inkscape -> exportar a png a 5x los ppp -> GIMP -> [desenfocar ligeramente? ->] escalar al 20% -> exportar a png nuevamente'. Totalmente eliminado las líneas blancas entre los polígonos vecinos para mí. – naught101

Cuestiones relacionadas