El filtrado de Lanczos y el remuestreo de Lanczos son dos aplicaciones de una determinada fórmula matemática. Se puede utilizar como filtro de paso bajo o para interpolar suavemente el valor de una señal digital entre sus muestras . En el último caso, asigna cada muestra de la señal dada a una copia traducida y escalada del núcleo de Lanczos , que es una función sinc enventanada por el lóbulo central de una segunda función sinc más larga. La suma de estos núcleos traducidos y escalados se evalúa luego en los puntos deseados.
El remuestreo de Lanczos se utiliza normalmente para aumentar la frecuencia de muestreo de una señal digital o para desplazarla en una fracción del intervalo de muestreo. También se suele utilizar para la interpolación multivariable , por ejemplo para cambiar el tamaño o rotar una imagen digital . Se ha considerado el "mejor compromiso" entre varios filtros simples para este propósito. [1]
El filtro fue inventado por Claude Duchon, quien lo bautizó en honor a Cornelius Lanczos debido al uso que Duchon hizo de la aproximación Sigma para construir el filtro, una técnica creada por Lanczos. [2]
El efecto de cada muestra de entrada sobre los valores interpolados se define mediante el núcleo de reconstrucción del filtro L ( x ) , llamado núcleo de Lanczos. Es la función sinc normalizada sinc( x ) , multiplicada por la ventana de Lanczos .o ventana sinc , que es el lóbulo central de una función sinc estirada horizontalmente sinc( x / a ) para − a ≤ x ≤ a .
De manera equivalente,
El parámetro a es un entero positivo, normalmente 2 o 3, que determina el tamaño del núcleo. El núcleo de Lanczos tiene 2 lóbulos a − 1 : uno positivo en el centro y lóbulos negativos y positivos alternados a cada lado.
Dada una señal unidimensional con muestras s i , para valores enteros de i , el valor S ( x ) interpolado en un argumento real arbitrario x se obtiene mediante la convolución discreta de esas muestras con el kernel de Lanczos: [3]
donde a es el parámetro de tamaño del filtro y es la función base . Los límites de esta suma son tales que el núcleo es cero fuera de ellos.
Mientras el parámetro a sea un entero positivo, el núcleo de Lanczos es continuo en todas partes, y su derivada está definida y es continua en todas partes (incluso en x = ± a , donde ambas funciones sinc tienden a cero). Por lo tanto, la señal reconstruida S ( x ) también será continua, con derivada continua.
El kernel de Lanczos es cero en cada argumento entero x , excepto en x = 0 , donde tiene valor 1. Por lo tanto, la señal reconstruida interpola exactamente las muestras dadas: tendremos S ( x ) = s i para cada argumento entero x = i .
El remuestreo de Lanczos es una forma de un método general desarrollado por Lanczos para contrarrestar el fenómeno de Gibbs al multiplicar los coeficientes de una serie de Fourier truncada por , donde es el índice del coeficiente y es la cantidad de coeficientes que conservamos. [4] El mismo razonamiento se aplica en el caso de funciones truncadas si deseamos eliminar las oscilaciones de Gibbs en su espectro.
El núcleo del filtro de Lanczos en dos dimensiones es
El filtro de reconstrucción teóricamente óptimo para señales de banda limitada es el filtro sinc , que tiene soporte infinito . El filtro Lanczos es una de las muchas aproximaciones prácticas (con soporte finito) del filtro sinc. Cada valor interpolado es la suma ponderada de 2 a muestras de entrada consecutivas. Por lo tanto, al variar el parámetro 2 a se puede intercambiar la velocidad de cálculo por una respuesta de frecuencia mejorada. El parámetro también permite elegir entre una interpolación más suave o una preservación de transitorios nítidos en los datos. Para el procesamiento de imágenes, el equilibrio es entre la reducción de artefactos de aliasing y la preservación de bordes nítidos. Además, como con cualquier procesamiento de este tipo, no hay resultados para los bordes de la imagen. Aumentar la longitud del núcleo aumenta el recorte de los bordes de la imagen.
El filtro Lanczos se ha comparado con otros métodos de interpolación para señales discretas, en particular otras versiones en ventana del filtro sinc. Turkowski y Gabriel afirmaron que el filtro Lanczos (con a = 2 ) es el "mejor compromiso en términos de reducción de aliasing, nitidez y zumbido mínimo", en comparación con sinc truncado y sinc con ventanas de Bartlett , coseno y Hann , para la decimación e interpolación de datos de imágenes bidimensionales. [1] Según Jim Blinn , el núcleo Lanczos (con a = 3 ) "mantiene las frecuencias bajas y rechaza las frecuencias altas mejor que cualquier filtro (alcanzable) que hayamos visto hasta ahora". [5]
La interpolación de Lanczos es un filtro popular para "mejorar" la calidad de los videos en varias utilidades multimedia, como AviSynth [6] y FFmpeg . [7]
Dado que el núcleo asume valores negativos para a > 1 , la señal interpolada puede ser negativa incluso si todas las muestras son positivas. En términos más generales, el rango de valores de la señal interpolada puede ser más amplio que el rango abarcado por los valores de muestra discretos. En particular, puede haber artefactos de vibración justo antes y después de cambios abruptos en los valores de muestra, lo que puede generar artefactos de recorte . Sin embargo, estos efectos se reducen en comparación con el filtro sinc (sin ventana). Para a = 2 (un núcleo de tres lóbulos), la vibración es < 1%.
Al utilizar el filtro Lanczos para el remuestreo de imágenes, el efecto de anillo creará halos claros y oscuros a lo largo de los bordes fuertes. Si bien estas bandas pueden resultar visualmente molestas, ayudan a aumentar la nitidez percibida y, por lo tanto, brindan una forma de mejora de los bordes . Esto puede mejorar la calidad subjetiva de la imagen, dada la función especial de la nitidez de los bordes en la visión . [8]
En algunas aplicaciones, los artefactos de recorte de gama baja se pueden mejorar transformando los datos a un dominio logarítmico antes de filtrarlos. En este caso, los valores interpolados serán una media geométrica ponderada, en lugar de una media aritmética, de las muestras de entrada.
El núcleo Lanczos no tiene la propiedad de partición de la unidad . Es decir, la suma de todas las copias del núcleo traducidas a números enteros no siempre es 1. Por lo tanto, la interpolación Lanczos de una señal discreta con muestras constantes no produce una función constante. Este defecto es más evidente cuando a = 1. Además, para a = 1 la señal interpolada tiene derivada cero en cada argumento entero. Esto es bastante académico, ya que el uso de un núcleo de un solo lóbulo ( a = 1) pierde todos los beneficios del enfoque Lanczos y proporciona un filtro deficiente. Hay muchas mejores funciones de ventana de un solo lóbulo en forma de campana.
La partición de la unidad se puede introducir mediante una normalización,
para .
image_filters.cpp
muestra comparaciones de remuestreo repetido de una imagen con varios núcleos.