La selección de un filtro particular para el procesamiento de imágenes es algo así como un arte negro, porque el criterio principal para juzgar el resultado es subjetivo: en gráficos por computadora, la pregunta final es casi siempre: "¿se ve bien?". Hay muchos filtros buenos, y la elección entre los mejores a menudo se reduce a un juicio crítico.
Dicho esto, voy a seguir adelante con alguna teoría ...
Puesto que usted está familiarizado con el análisis de Fourier para el procesamiento de señales, usted realmente no necesita saber mucho más para aplicarlo a la imagen procesamiento: todos los filtros de interés inmediato son "separables", lo que básicamente significa que puede aplicarlos de forma independiente en las direcciones xey. Esto reduce el problema del remuestreo de una imagen (2-D) al problema del remuestreo de una señal (1-D). En lugar de una función de tiempo (t), su señal es una función de uno de los ejes de coordenadas (por ejemplo, x); todo lo demás es exactamente lo mismo.
En última instancia, la razón por la que necesita utilizar un filtro es evitar el aliasing: si está reduciendo la resolución, debe filtrar los datos originales de alta frecuencia que la nueva resolución inferior no admite, o se agregará a frecuencias no relacionadas en su lugar.
So. Mientras filtra las frecuencias no deseadas del original, desea conservar la mayor cantidad posible de la señal original. Además, no desea distorsionar la señal que conserva. Finalmente, desea extinguir las frecuencias no deseadas de la forma más completa posible. Esto significa, en teoría, que un buen filtro debe ser una función de "caja" en el espacio de frecuencia: con respuesta cero para frecuencias superiores al límite, respuesta de unidad para frecuencias por debajo del límite, y una función de paso entre ellas. Y, en teoría, esta respuesta es alcanzable: como sabrá, un filtro de sinc directo le dará exactamente eso.
Hay dos problemas con esto. Primero, un filtro sinc directo no tiene límites, y no cae muy rápido; esto significa que hacer una convolución directa será muy lento. En lugar de convolución directa, es más rápido usar una FFT y filtrar en el espacio de frecuencia ...
Sin embargo, si realmente usa un filtro sinc recto, el problema es que en realidad no se ve muy bien !Como dice la pregunta relacionada, perceptivamente hay artefactos que suenan, y prácticamente no hay una forma completamente satisfactoria de lidiar con los valores negativos que resultan de "undershoot".
Finalmente, entonces: una forma de resolver el problema es comenzar con un filtro sinc (por sus buenas propiedades teóricas) y modificarlo hasta que tenga algo que también resuelva sus otros problemas. En concreto, esto le ayudará a algo así como el filtro Lanczos:
Lanczos filter: L(x) = sinc(pi x) sinc(pi x/a) box(|x|<a)
frequency response: F[L(x)](f) = box(|f|<1/2) * box(|f|<1/2a) * sinc(2 pi f a)
[note that "*" here is convolution, not multiplication]
[also, I am ignoring normalization completely...]
- la sinc (pi x) determina la forma general de la respuesta de frecuencia (para ampliar una, la respuesta en frecuencia se ve cada vez más como una caja de función)
- la caja (| x | < a) que da soporte finito, por lo que puede utilizar convolución directa
- la sinc (pi x/a) suaviza los bordes de la caja y (en consecuencia, lo que es equivalente)?? mejora en gran medida el rechazo de altas frecuencias indeseables
- la dos factores ("la ventana") también atenúan el sonido; hacen una gran mejora tanto en el artefacto perceptual como en la incidencia práctica de "undershoot", aunque sin eliminarlos por completo
Tenga en cuenta que no hay nada de mágico en esto. Hay una gran variedad de ventanas disponibles, que funcionan igual de bien. Además, para a = 1 y 2, la respuesta de frecuencia no se parece mucho a una función de paso. Sin embargo, espero que esto responda a su pregunta "por qué sinc", y le dé una idea sobre las respuestas de frecuencia, etc.
¿ha mirado algún código de ejemplo? No sé qué tan legible, por ejemplo, La implementación de splanet de mplayer es. Pero probablemente estés buscando la teoría detrás de esto, que tampoco sé. –
Los lectores interesados encontrarán un examen ilustrado y extendido de esta pregunta en nuestro sitio hermano en http://gis.stackexchange.com/a/14361 – whuber
. Hay un artículo excelente [que compara algoritmos de remuestreo] (http: //www.panotools. org/dersch/interpolator/interpolator.html), aunque su prueba es la rotación, en lugar de escalar. –