ANTIALIAS vs BICUBIC en PIL (Python Image Library)?

Estoy usando PIL para cambiar el tamaño de mis imágenes, mi caso es escalar la imagen original.

Estoy confundido sobre el algoritmo usado con `resample = ANTIALIAS ‘.

Según el documento a continuación, ANTIALIAS parece ser el mejor mientras se reduce la escala. Me pregunto: ¿En qué caso puede ganar BICUBIC ? (Algunos de mis casos de prueba muestran que la mejor opción es Búbub)

 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. 

También estoy confundido acerca de la linear interpolation in a 2x2 environment y la cubic spline interpolation in a 4x4 environment en el documento. ¿Qué significa aquí?

Gracias.

Estos se enumeran en orden de menor a mayor complejidad. Habrá diferencias visuales entre ellos. La principal diferencia será el tiempo que demora el algoritmo en ejecutarse.

Tendrás que decidir qué es lo que más te importa, la velocidad o la calidad. Si solo estás haciendo 5 imágenes, ve por la calidad. Si estás haciendo 100,000 imágenes, tal vez ve por la velocidad. Realmente depende de para qué lo estés usando.

El entorno 2×2 y 4×4 significa que el algoritmo mira un área de píxeles de 2×2 o 4×4.

ANTIALIAS ya no es el término adecuado, fue reemplazado por LANCZOS que es un término más descriptivo para el algoritmo utilizado. Aún puedes usar ANTIALIAS en tu código para propósitos de compatibilidad con versiones anteriores, pero no es recomendable.

LANCZOS usa un patrón más grande que BICUBIC y debería producir resultados ligeramente más nítidos. También será más lento.

La documentación ha sido modificada desde que se hizo la pregunta y se eliminaron las referencias a 2×2 o 4×4. Probablemente no fuiste el único confundido por ellos.

 resample – An optional resampling filter. This can be one of PIL.Image.NEAREST (use nearest neighbour), PIL.Image.BILINEAR (linear interpolation), PIL.Image.BICUBIC (cubic spline interpolation), or PIL.Image.LANCZOS (a high-quality downsampling filter). If omitted, or if the image has mode “1” or “P”, it is set PIL.Image.NEAREST. 

Lo de abajo ya no es válido, se solucionó en Pillow 2.7. Lo dejo aquí para aquellos con versiones anteriores, aunque le recomiendo encarecidamente que actualice.


Ahora he pasado por la fuente para averiguar los detalles. No estoy terriblemente complacido por lo que vi.

Primero, BICUBIC . Existen varias fórmulas que pueden clasificarse como bicúbicas, la más común de las cuales es la interpolación Catmull-Rom. Eso no es lo que utiliza PIL. Don Mitchell y Arun Netravali escribieron un artículo que analiza todas las variaciones y las caracteriza utilizando dos variables B y C; el utilizado por PIL corresponde a B = 0 y C = 1. En el documento de Mitchell-Netravali, esto se encuentra claramente en la región de artefactos de Ringing. Esto significa que las imágenes ampliadas tendrán halos shinys u oscuros no naturales alrededor de los bordes.

El siguiente es ANTIALIAS . Esto se basa en un filtro Lanczos-3, que normalmente sería una buena opción tanto para la reducción como para la mejora del tamaño. Desafortunadamente, hay un error en el código al boost el tamaño, en lugar de tomar un área de 6×6 píxeles para calcular el resultado, se trunca en 2×2 píxeles. Esto lo hace apenas mejor que bilineal.