2009-12-06 13 views
22

Me interesan los algoritmos de escalamiento de imágenes y he implementado los métodos bilineal y bicúbico. Sin embargo, he oído hablar de lanczos y otros métodos más sofisticados para escalar imágenes de mayor calidad y tengo mucha curiosidad sobre cómo funcionan.¿Cuál es la idea detrás de escalar una imagen usando lanczos?

¿Podría alguien explicar aquí la idea básica de escalar una imagen usando lanczos (tanto la ampliación como la reducción) y por qué resulta en una calidad superior?

Tengo experiencia en el análisis de Fourier y he hecho algo de procesamiento de señales en el pasado, pero no en relación con el procesamiento de imágenes, así que no temas usar términos como "respuesta de frecuencia" y tal en tu respuesta :)

EDIT: supongo que lo que realmente quiero saber es el concepto y la teoría detrás de usar un filtro de convolución para la interpolación.

(Nota: Ya he leído el artículo de Wikipedia sobre Lanczos remuestreo pero no tienen suficiente detalle para mí)

gracias mucho!

+0

¿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é. –

+1

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

+0

. 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. –

Respuesta

34

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.

+0

una respuesta excelente y detallada :) muchas gracias :)) – horseyguy

+0

Sé que esta respuesta es muy antigua, pero me pregunto: ¿es realmente deseable reducir las imágenes con un filtro de cuadro de frecuencia? ¿No significaría eso intrínsecamente que se eliminan cosas como los contornos de un píxel (por el filtro ideal)? ¿Es eso deseable alguna vez, o los filtros basados ​​en sinc solo son realmente buenos para imágenes que pueden considerarse de naturaleza "continua" (como las fotografías muestreadas con ráster) y nunca para imágenes que son más píxel-arty en la naturaleza? – Dolda2000

+3

Los contornos de un píxel no desaparecerían, pero ofrecen una versión particularmente clara del efecto de "sonar" visualmente desagradable que se describió anteriormente cuando se pasa a través de un filtro de sinc puro. Los filtros estilo Lanczos son mejores en este aspecto, pero está en lo cierto de que los filtros basados ​​en sinc son los más apropiados para imágenes "continuas": las imágenes estilo pixel art no funcionan bien con * cualquier tipo de filtro lineal de tamaño, debido a su dependencia de los bordes agudos horizontales y verticales. – comingstorm

Cuestiones relacionadas