2009-05-18 18 views
11

Estoy tratando de entender la reducción a escala. Puedo ver cómo los algoritmos de interpolación como el bicúbico y el vecino más cercano se pueden usar cuando se realiza una ampliación, para "completar los espacios en blanco" entre los puntos conocidos anteriores (píxeles, en el caso de las imágenes).Algoritmos de interpolación al hacer una reducción a escala

¿Pero downscaling? No veo cómo se puede usar ninguna técnica de interpolación allí. ¡No hay espacios en blanco para llenar!

He estado atascado con esto por mucho tiempo, dame un empujoncito en la dirección correcta. ¿Cómo se interpola cuando, de hecho, se eliminan los datos conocidos?

Editar: supongamos que tenemos una imagen unidimensional, con un canal de color por punto. Un algoritmo de escala reducida que escala de 6 a 3 puntos por valor de píxel promedio se ve así: 1,2,3,4,5,6 = (1 + 2)/2, (3 + 4)/2, (5 + 6)/2 ¿Estoy en el camino correcto aquí? ¿Es esta interpolación en downscaling en lugar de simplemente descartar datos?

+0

Tu edición tiene la idea correcta. 1,2,3,4,5,6 -> 1,5, 3,5, 5,5. Otro ejemplo es 6,0,6,0,6,0 -> 3, 3, 3; que es mejor que 0,0,0 o 6,6,6. – tom10

Respuesta

5

Aquí tiene la imagen original en la parte superior, luego un algoritmo de eliminación ingenuo en el medio, y uno de interpolación en la parte inferior.

Considere la posibilidad de un gran foco de luz. La luz en el centro es la más brillante y la luz en los bordes se oscurece. Cuando lo ilumines más lejos, ¿esperarías que el rayo de luz pierda repentinamente la oscuridad cerca de los bordes y se convierta en un contorno sólido de luz?

No, y sucede lo mismo con el logotipo de stackoverflow. Como puede ver en la primera reducción de escala, la imagen ha perdido suavidad en sus bordes y se ve horrible. La segunda reducción de escala ha mantenido la suavidad en los bordes al promediar el entorno de píxeles.

Un filtro de convolución simple para que intente es agregar los valores RGB del píxel y todos los demás píxeles que lo rodean, y hacer un promedio simple. Luego reemplace el píxel con ese valor. Luego puede descartar los píxeles adyacentes ya que ya ha incluido esa información en el píxel central.

alt text

+0

Entonces, un algoritmo de escala descendente unidimensional que cuente el promedio podría verse así (6 puntos hasta 3 puntos): 1,2,3,4,5,6 = (1 + 2)/2, (3 + 4)/2 , (5 + 6)/2. ¿Correcto? Aquí, la cuadrícula de muestra incluye dos puntos durante la escala, pero ¿debería probar más puntos en más direcciones de todos modos? – Mizipzor

+0

Sí, podrías hacerlo de esa manera. Más muestras en general significan mejores imágenes, pero debe tener cuidado. Los píxeles que están muy alejados del nuevo kernel generalmente deberían contribuir menos al nuevo píxel que uno que está cerca. – Unknown

+2

Creo que faltan las imágenes. ¿O realmente deseaba mostrar esta imagen de la portada del DVD? ¿Podría volver a publicar las imágenes, por favor? Sería de gran ayuda. – Joerg

8

Tanto si sube o baja la escala, la "interpolación" que está en curso es, de hecho, un nuevo muestreo.

Si el número de muestras en la versión reducida no es un divisor par del número completo de muestras (píxeles, etc.), el simple descarte de datos producirá errores de muestreo que aparecen en una imagen como "jaggies". Si, en cambio, interpolas dónde se encontrarían las nuevas muestras en el espacio entre las muestras existentes usando uno de los algoritmos que mencionas, los resultados son mucho más suaves.

Puede conceptualizar esto como la primera ampliación hasta el mínimo común múltiplo del tamaño antiguo y nuevo, y luego reduciendo la escala descartando muestras, solo sin generar realmente el resultado intermedio.

+0

Pero reducir el tamaño con un divisor par (2, 4, 8) simplemente descartando los datos también produce errores de muestreo, ¿correcto? – Mizipzor

+1

Sí, definitivamente no será lo mismo que 'en realidad' volver a muestrear los datos fuente. Sin embargo, la interpolación 'adivina' dónde pueden estar las cosas, pero no garantiza que estén realmente allí. Tendrá que volver a muestrear los datos originales si quiere que sean precisos. – sybreon

+2

"Promediar" es mejor que descartar: puede producir un resultado de escala reducida más uniforme. En algunos casos, se usan filtros más sofisticados para ponderar grupos de puntos cuando se realiza una reducción a escala. Cuando reduzca la escala de una imagen 2D, tendrá que agrupar muchos puntos, no solo algunos puntos adyacentes. –

9

Si uno considera que un pixel original tiene un ancho n, entonces el centro del pixel es n/2 desde cualquier borde.

Se puede suponer que este punto, en el centro del píxel, define el color.

Si está disminuyendo la resolución, puede pensarlo de esta manera conceptualmente: aunque esté reduciendo el tamaño físico, en cambio piense que mantiene las mismas dimensiones pero reduce el número de píxeles (que aumentan de tamaño). conceptualmente). Entonces uno puede hacer la matemática ...

Ejemplo: supongamos que su imagen tiene 1 píxel de alto y 3 de ancho, y usted solo descenderá horizontalmente. Digamos que vas a cambiar esto a 2 píxeles de ancho. Ahora la imagen original es 3n, y la está convirtiendo en 2 píxeles, por lo tanto, cada píxel nuevo ocupará (3/2) un píxel de la imagen original.

No vuelva a pensar en los centros ... los centros de los nuevos píxeles están en (3/4) ny en (9/4) n [que es (3/4) + (3/2)]. Los centros de los píxeles originales estaban en (1/2) n, (3/2) n, y (5/2) n. Por lo tanto, cada centro está en algún lugar entre los centros de píxeles originales, ninguno coincide con los centros de los píxeles originales. Miremos el primer píxel en (3/4) n - está (1/4) n lejos del primer píxel original, y (3/4) n lejos del segundo píxel original.

Si queremos mantener una imagen suave, utilice la relación inversa: tomar (3/4) de los valores de color del primer píxel + (1/4) de los valores de color del segundo, ya que el nuevo píxel el centro, conceptualmente, estará más cerca del primer centro de píxeles original (n/4 de distancia) que del segundo (3n/4 de distancia).

Por lo tanto, no es necesario descartar realmente los datos: solo se calculan las proporciones adecuadas de sus vecinos (en un espacio conceptual donde el tamaño físico de la imagen total no cambia). Es un promedio en lugar de un estricto salto/descarte.

En una imagen 2d las relaciones son más complicadas de calcular, pero la esencia es la misma. Interpola y extrae más del valor de los "vecinos" originales más cercanos. La imagen resultante debería verse bastante similar a la original siempre que la resolución no sea terriblemente severa.

+1

Muy buena respuesta, necesitaba un lápiz y papel, pero creo que ya lo tengo. Pero suponiendo que dividimos el tamaño con un número par (2,4,8) para que la cuadrícula de muestra se alinee perfectamente con la cuadrícula de píxeles anterior. ¿Tomaría siempre una cantidad igual de datos de píxeles de cada píxel dentro de cada celda de la cuadrícula de muestra? – Mizipzor

+0

si es que incluso podría promediar. Hay muchas, muchas formas diferentes de escalar una imagen. – Demi

+1

Otra forma de pensar es de la misma manera conceptual en la que el tamaño físico no cambiará, pero sí el ancho del píxel, sino teniendo en cuenta cuántos píxeles originales y cuánto de cada píxel consume el nuevo píxel. Esto funcionaría muy bien en los números pares (por ejemplo, al escalar horizontalmente de 4 píxeles a 2, cada nuevo píxel consumiría dos píxeles antiguos, promediales por igual). – Demi

6

Este boceto muestra una sección a través de unos pocos píxeles que comienzan como tres píxeles (curva negra) y se muestrean a dos píxeles (curva roja) mediante la interpolación (curva azul). La interpolación se determina a partir de los tres píxeles originales y los dos píxeles finales se ajustan al valor de la interpolación en el centro de cada píxel final. (En caso de que no está claro aquí, los espectáculos eje vertical es la intensidad de cada píxel para un solo canal de color.)

alt text http://img391.imageshack.us/img391/3310/downsampling.png

+0

¿Se puede restaurar la imagen? – nobar

+0

@nobar: lo siento, pero no tengo idea de dónde salió la imagen y ciertamente no tengo una copia de 5 años. Con suerte, SO o imageshack lo restaurarán ... ¿sabes cuánto tiempo se ha ido? De lo contrario, podría tener la oportunidad de volver a hacerlo, pero no tengo eso ahora. – tom10

2

Ya sea que estemos ampliación de la escala o la reducción de escala, es necesario determinar (a un cierto grado de precisión) cuál será el valor de color en un punto entre dos píxeles.

permite echar una sola fila de píxeles:

P  P  P  P  P  P  P  P  P 

y frecuencia de procesamiento, queremos conocer los valores de los píxeles para usar en el entre puntos:

P P P P P P P P P P P P P 

y cuando disminuye la resolución , también queremos saber los valores de píxeles para usar en los puntos intermedios:

P  P  P  P  P  P  P 

(Por supuesto, queremos para hacer esto en dos dimensiones en lugar de una, pero es el mismo principio.)

Así que independientemente, tenemos que interpolar para determinar el valor de muestra correcto. Dependiendo de qué tan precisos queramos los resultados, existen diferentes técnicas de interpolación. Idealmente, estaríamos haciendo un remuestreo adecuado con todas las matemáticas involucradas ... ¡pero incluso eso es solo interpolación hecha rigurosamente!

1

Si utiliza un filtro de ventana de sincronismo, tales como Lanczos, en realidad se filtra en los detalles de alta frecuencia que no pueden ser representados en la resolución más baja. Un filtro de promedio no hace esto, lo que causa artefactos. Un filtro sinc también produce una imagen más nítida y funciona tanto para subir de escala como para reducir la escala.

Si tuviera que mejorar una imagen con sinc, luego reducirla al tamaño original, obtendría casi la misma imagen, mientras que si promediara los píxeles al reducir, terminaría con algo ligeramente más borroso que el original. Si usaste una transformada de Fourier para redimensionar, que el sinc de ventana intenta aproximar, obtendrías la imagen original exacta, además de los errores de redondeo.

Sin embargo, a algunas personas no les gusta el ligero zumbido alrededor de los bordes afilados que provienen del uso de un filtro sinc. Sugeriría un promedio para la reducción de gráficos vectoriales, y sinc para la reducción de tamaño de fotos.