Ejemplo. Zoom de 10x con interpolación bilineal.R(x,y):= A’(x/10, y/10) Indicación: un zoom entero de K con interpolación bilineal es parecido (= a veces) a un zoom de K con vecino más próximo, seguido de un filtro de media de KxK. Imagen original 25×26 Vecino más próximo Interpolación bilineal
La interpolación bilineal mejora la de vecino más próximo, pero produce un efecto de “zonas rectangulares”. Interpolación bicúbica: basada en dos interpolaciones cúbicas. En una dimensión, la interpolación cúbica consiste en trazar una cúbica entre los 4 puntos más próximos (2 a la izquierda y 2 a la derecha). A’(x) = c1x3 + c2x2 + c3x + c4 A(x) i-1 i i+1 X p i+2 Valores interpolados
Cálculo de la interpolación cúbica. Sea p el punto que queremos interpolar. i= ?p? Obtener las 4 ecuaciones:A’(i-1)=A(i-1); A’(i)=A(i); A’(i+1)=A(i+1); A’(i+2)=A(i+2) 4 ecuaciones, 4 incógnitas ? despejar y obtener c1, c2, c3, c4 Aplicar las constantes, obteniendo A’(p) Interpolación bicúbica. Igual que la bilineal, se basa en dos interpolaciones cúbicas: 1. Interpolación cúbica horizontal, en las filas existentes (usando 4 puntos). 2. Interpolación cúbica vertical en todo el espacio usando 4 puntos (usando la anterior interpolación). ? En la interpolación bicúbica de un punto (px, py) intervienen los 16 puntos circundantes.
Cálculo de la interpolación bicúbica. j i X Y a b (px,py) i-1 i+1 i+2 j-1 j+1 j+2 Igual que con la bilineal, el valor del punto se puede calcular como una media ponderada de los 4×4 píxeles circundantes. A’(px,py) = Sn=-1..2Sm=-1..2 A(i+n,j+m)·P(n-a)·P(b-m) Siendo: P(k) = 1/6(C(k+2)3-4C(k+1)3+6C(k)3-4C(k-1)3) C(k) = max(0, k)
Ejemplo. Zoom de 10x con interpolación bicúbica. Imagen original 25×26 Aumento de 10x con interpolación bilineal Aumento de 10x con interpolación bicúbica
Comparación. Detalle del zoom de 10x, con vecino más próximo, interpolación bilineal y bicúbica. Se ha aplicado un perfilado en las 3, para destacar el efecto del zoom. Interpolación bilineal Interpolación bicúbica Vecino más próximo En todos los casos se nota la falta de detalle (obviamente), pero en la bilineal son más evidentes los artificios horizontales y verticales que en la bicúbica. +
La interpolación también es importante en las rotaciones no exactas (que veremos más adelante) y, en general, en cualquier transformación geométrica. Interpolación bilineal Interpolación bicúbica Vecino más próximo La interpolación bicúbica siempre suele producir el mejor resultado, aunque es algo más costosa. ¿Merece la pena el aumento de tiempo respecto a la bilineal? Este artificio de escalonamiento abrupto es conocido como aliasing
En las operaciones de reducción también se aplican interpolaciones, pero… Reducción de k: R(x, y):= A(k·x, k·y), con R: mX/k x mY/k Ejemplo. Reducción de 5x. Imagen original 500×386 Reducción de 5x con vecino más próximo Observar estas estructuras extrañas. Esto tb. es aliasing
El problema no se soluciona con interpolación bilineal o bicúbica. Imagen original 500×386 Reducción de 5x con interpolación bilineal Reducción de 5x con interpolac. bicúbica El problema se debe a que los detalles son más pequeños que la resolución de salida. Pero, además, los métodos de interpolación no mejoran la situación: cada píxel de salida es un muestreo ordenado de uno de entrada.
Ejemplo. Reducción de 3x. R(x,y) = A(3x, 3y) Solución: cada píxel de salida debería ser la media de los 3×3 píxeles de entrada correspondientes. Interpolación por supermuestreo (super sampling)Idea: considerar el píxel como un “volumen” con cierto área. Aplicar varias veces la transformación y tomar la media. R 0 1 0 1 0 1 0 1 2 3 4 5 2 3 A Todos esos píxeles no influyen en el resultado
Supermuestreo uniforme, en rejilla cuadrada. (Gp:) 1 (Gp:) 1.5 (Gp:) 0.5 (Gp:) X (Gp:) Y (Gp:) R(x,y) (Gp:) 0.75 (Gp:) 1.25 (Gp:) 1 (Gp:) 1.5 (Gp:) 0.5 (Gp:) 0.75 (Gp:) 1.25
A(f1(1,1), f2(1,1)) A(f1(1.25,0.75), f2(1.25,0.75)) A(f1(1,0.5), f2(1,0.5)) A(f1(1.25,1.5), f2(1.25,1.5)) R(x,y):= media {A(f1(x-0.5,y-0.5), f2(x-0.5,y-0.5)), … A(f1(x-0.5,y+0.5), f2(x-0.5,y+0.5)), …, A(f1(x,y-0.5), f2(x,y-0.5)), …, A(f1(x,y+0.5), f2(x,y+0.5)), …, A(f1(x+0.5,y-0.5), f2(x+0.5,y-0.5)), …, A(f1(x+0.5,y+0.5), f2(x+0.5,y+0.5))}
Ejemplo. Reducción de 5x, con supermuestreo. Imagen original 500×386 Reducción de 5x con interpolación bilineal Reducción de 5x con supermuestreo Resultado: el supermuestreo logra un resultado de mucha más calidad. Evita el problema del aliasing. Sin embargo, el supermuestreo es mucho más costoso, requiere más cálculos. Cuanto mayor reducción, mayor es el efecto del aliasing.
Una alternativa al supermuestreo es aplicar primero un filtro de suavizado (por ejemplo, de media) y después un simple vecino más próximo. Imagen suavizada con media de 5×5 Reducción de 5x con vecino más próximo, de la suavizada Reducción de 5x con supermuestreo, de la original Pero esto sólo es aplicable en las transformaciones que impliquen una reducción de resolución.
Conclusiones Transformación geométrica: cada píxel de salida depende de uno de entrada cuya posición es calculada de acuerdo a un par de funciones. Como las posiciones pueden ser no enteras, es necesario aplicar interpolaciones: vec. más próximo, bilineal, bicúbica. En zoom, funciona mejor la bicúbica. En reducción, el supermuestreo. Pero son más costosas que las otras. Las interpolaciones bilineal y bicúbica (y otras más avanzadas) dan la sensación de mejorar la resolución de la imagen, pero cuidado… Cualquier detalle aparente de resolución inferior a un píxel es una mera alucinación.
Página anterior | Volver al principio del trabajo | Página siguiente |