La funcionalidad nueva más importante que hemos implementado en las últimas versiones de la plataforma PixInsight (PixInsight Core 1.0.54.363 y PixInsight Class Library (PCL) 1.0.33.165) consiste en un conjunto de nuevos algoritmos de interpolación de píxel.
Los algoritmos de interpolación de píxel son cruciales para los procesos que incluyen transformaciones geométricas, con la excepción de los procedimientos sin interpolación como IntegerResample (pixel binning) y FastRotation (girar +/-90 y 180 grados, y transformaciones especulares). En particular, los nuevos algoritmos de interpolación de píxel están directamente accesibles al usuario en los procesos Resample, Rotation y DynamicCrop. También son utilizados internamente por otros procesos como DynamicAlignment y ChannelMatch.
El problema de interpolar píxeles es bastante sencillo conceptualmente. Una imagen digital es una representación discreta formada por muestras uniformemente distribuidas en una rejilla rectangular. Cada muestra (o conjunto de muestras en imágenes multicanal o en color) es lo que identificamos como un
píxel. Una interpolación de píxel es necesaria para obtener nuevos valores de píxel en coordenadas arbitrarias, no necesariamente enteras.
En esta figura los círculos grandes representan píxeles existentes. Se desea calcular un nuevo valor de píxel en la posición representada por el punto pequeño, definida por las distancias dx y dy, medidas desde el píxel más cercano truncando coordenadas. Este problema se presenta en una gran variedad de transformaciones geométricas; por ejemplo, para redimensionar una imagen aplicando factores de escala arbitrarios, es necesario obtener nuevos valores de píxel de esta forma a partir de los datos existentes.
Nuevos Algoritmos de Interpolación de PíxelLas últimas versiones de la plataforma PixInsight vienen con un conjunto rediseñado de algoritmos de interpolación. Esto incluye interpolaciones simples que no estaban presentes en versiones anteriores (nearest neighbor - vecino más cercano), implementaciones muy mejoradas (bicubic spline), y nuevos algoritmos de altas prestaciones que enfrentan los problemas de reducción de tamaño y ampliación con suavización de una forma tremendamente eficiente (familia de filtros cúbicos de Mitchell-Netravali).
Al final de este tutorial hemos incluido un ejemplo de demostración que compara las prestaciones de todos los algoritmos dosponibles para reducir y ampliar una imagen de test difícil. Ofrecemos a continuación una breve descripción de estos algoritmos de interpolación, incluyendo referencias.
Nearest Neighbor (Vecino Más Próximo)Este es el algoritmo de interpolación más simple posible. La interpolación del
vecino más próximo selecciona el valor del píxel más cercano redondeando las coordenadas del punto de interpolación deseado.
Bilinear (Bilineal)Un método de interpolación ligeramente más sofisticado que el anterior. El algoritmo bilineal interpola a partir de los cuatro píxeles originales que rodean al punto deseado de interpolación. Se construyen y evalúan dos funciones lineales de interpolación, una para cada dirección del plano.
Bicubic Spline (Spline Bicúbico)Este nuevo algoritmo sustituye a nuestros viejos algoritmos de interpolación bicúbica y por splines bicúbicos. Se trata de un algoritmo de interpolación de píxel de altas prestaciones, que proporciona resultados excelentes tanto en lo relativo a velocidad de ejecución como en calidad de los resultados. Normalmente es la mejor opción para todo tipo de transformaciones geométricas que no involucran reducciones de tamaño muy radicales.
Los algoritmos de interpolación bicúbica interpolan a partir de los dieciséis píxeles originales más cercanos que engloban el punto de interpolación deseado. Nuestra implementación utiliza la siguiente función spline cúbica como un filtro separable para llevar a cabo una interpolación por convolución:
f(x) = (a+2)*x^3 - (a+3)*x^2 + 1 para 0 <= x <= 1
f(x) = a*x^3 - 5*a*x^2 + 8*a*x - 4*a para 1 < x <= 2
f(x) = 0 en otro caso
Referencia: Keys, R. G. (1981),
Cubic Convolution Interpolation for Digital Image Processing, IEEE Trans. Acoustics, Speech & Signal Proc., Vol. 29, pp. 1153-1160.
El parámetro constante
a del spline cúbico (-1 <= a < 0) controla la
profundidad de las zonas negativas de la función a ambos lados del eje Y. En nuestra implementación hemos fijado un valor de a=-1/2 (véase por ejemplo Parker, J. Anthony, et al. (1983),
Comparison of Interpolating Methods for Image Resampling, IEEE Trans. Medical Imaging, Vol. 2, No. 1).
Nuestra implementación incluye un mecanismo automático de limitación que evita problemas debidos a discontinuidades al interpolar imágenes lineales. Esto es necesario porque la función spline tiene zonas con valores negativos que pueden forzar valores interpolados fuera de rango en presencia de variaciones extremadamente fuertes entre píxeles contiguos, lo cual ocurre con frecuencia en imágenes lineales.
Bicubic B-Spline (B-Spline Bicúbico)Como la interpolación por splines bicúbicos, el algoritmo de interpolación por B-splines bicúbicos también interpola a partir de los dieciséis píxeles que rodean al punto de interpolación. Sin embargo, este algoritmo usa funciones B-spline de interpolación en vez de splines cúbicos, las cuales en general proporcionan resultados muy (¿demasiado?) suaves.
Esta implementación se basa en
Bicubic Interpolation for Image Scaling, por Paul Bourke. El algoritmo realiza una convolución con un filtro no separable en dos dimensiones, de manera que su complejidad es O(n^2). Esto es muy desfavorable en comparación con la interpolación por splines bicúbicos, que aplica una convolución con un filtro separable, cuya complejidad es O(n). Sin embargo, los B-splines tienen características de suavidad que los convierten en una buena opción en algunos casos.
Interpolación por Filtros Cúbicos Paramétricos de Mitchell-NetravaliÉsta es realmente una categoría que comprende tres funciones de interpolación diferentes: filtro cúbico de Mitchell-Netravali, filtro spline de Catmull-Rom, y filtro cúbico B-spline.
Esta categoría interpola por convolución con filtros cúbicos separables de dos parámetros, como se describen en Don P. Mitchell, Arun N. Netravali (1988),
Reconstruction Filters in Computer Graphics, Computer Graphics, Vol. 22, No. 4, pp. 221-228.
Estas interpolaciones son particularmente buenas para reducir el tamaño de las imágenes, como veremos en una interesante comparación, más adelante en este documento.
- El filtro cúbico de Mitchell-Netravali tiene los parámetros recomendados por los autores en el paper original (B=C=1/3). Este filtro posee características realmente excelentes en nuestra opinión; se encuentra a mitad de camino entre la acentuación de detalles (ringing) y la suavización de los mismos.
Comparados con Mitchell-Netravali:
- El filtro spline de Catmull-Rom proporciona resultados más detallados.
- El filtro cúbico B-spline proporciona resultados más suaves.
Test de Reducción de TamañoEn este tutorial hemos llevado a cabo un test con una imagen difícil, que puede ver a continuación.
El test consiste en reducir la imagen original a una altura de 400 píxeles utilizando los diferentes algoritmos de interpolación disponibles. Esta operación es aproximadamente una reducción por un factor de escala de 1:11. Este caso es difícil porque la imagen tiene muchas estructuras de alto contraste y pequeña escala, como por ejemplo las ramas de los árboles proyectadas sobre el cielo. Estas estructuras pueden conducir fácilmente a pixelaciones no deseables debidas a algoritmos de interpolación deficientes, o bien a algoritmos que aún siendo excelentes están siendo utilizados de forma inapropiada.
A continuación puede ver los resultados de este test. Las imágenes resultantes han sido aumentadas por un factor 2:1 sin interpolación (IntegerResample) para facilitar las comparaciones.
Nearest Neighbor (Vecino Más Próximo)Bilinear (Bilineal)Bicubic Spline (Spline Bicúbico)Bicubic B-Spline - Bourke (B-Spline Bicúbico de Bourke)Mitchell-Netravali Cubic Filter (Filtro Cúbico de Mitchell-Netravali)Catmull-Rom Spline Filter (Filtro Spline de Catmull-Rom)Cubic B-Spline Filter (Filtro Cúbico B-Spline)De los resultados anteriores, resulta evidente que los nuevos algoritmos de interpolación basados en filtros (particularmente Mitchell-Netravali y Catmull-Rom) pueden ser extremadamente eficientes para reducir imágenes. La interpolación con el filtro cúbico B-spline es probablemente demasiado suave.
Las interpolaciones por splines bicúbicos y B-splines bicúbicos dan resultados casi tan malos como bilineal y vecino más próximo. Esto no significa que la interpolación por splines bicúbicos sea un mal algoritmo de interpolación; de hecho, se trata de un algoritmo de altas prestaciones y gran calidad. Tan sólo ocurre que la interpolación por splines bicúbicos no se adapta a operaciones de reducción tan radicales (1:11 en este caso), al igual que ocurre con todos los algoritmos que interpolan a partir de un entorno de píxeles de tamaño constante. Mitchell-Netravali es en nuestra opinión la mejor opción en este caso.
Nuestra implementación también incluye un parámetro de suavización (smoothness) ajustable por el usuario. Este parámetro permite ajustar con precisión el grado de suavización obtenido en la imagen resampleada resultante. El valor por defecto es 1.5, pero puede variarlo en el rango desde 1.0 a 5.0. Puede ver varias comparaciones a continuación
Mitchell-Netravali Cubic Filter, Smoothness = 1.0Mitchell-Netravali Cubic Filter, Smoothness = 1.5Mitchell-Netravali Cubic Filter, Smoothness = 2.0Test de Aumento de TamañoEn este caso hemos tomado un pequeño recorte de 100x100 píxeles de la imagen original, y hemos aumentado su tamaño hasta 650x650 píxeles. A continuación presentamos los resultados más relevantes.
Recorte original, aumentado 6:1 sin interpolación (IntegerResample)Bicubic SplineMitchell-Netravali Cubic FilterCatmull-Rom Spline FilterCubic B-Spline FilterEste ejemplo muestra claramente que el algoritmo de interpolación Bicubic Spline (splines bicúbicos) es la opción de mayor precisión para aumentar el tamaño de las imágenes. La familia de filtros de interpolación de Mitchell-Netravali se puede usar para lograr un mayor grado de suavidad en el resultado agrandado, lo cual puede ser deseable en algunas aplicaciones.
Nuevo Modo Auto de InterpolaciónHemos implementado un modo de
selección automática de interpolación en las herramientas estándar Resample y DynamicCrop. En este modo, los algoritmos de interpolación Mitchell-Netravali y bicubic spline son seleccionados automáticamente en función de los factores de escala, independientemente para cada eje. Bicubic spline se usa siempre para factores que implican aumentos de tamaño, así como para factores de reducción no muy grandes, para los cuales los filtros de Mitchell-Netravali no pueden ser correctamente muestreados (tamaños de kernel menores que 5x5 elementos). Los filtros cúbicos de Mitchell-Netravali se utilizan para el resto de operaciones de reducción. Pensamos que este modo de selección automática proporciona resultados óptimos en la mayoría de tareas de redimensionamiento de imágenes.