Suavizado espacial
En el procesamiento de señales digitales, el anti-aliasing espacial es una técnica para minimizar los artefactos de distorsión (aliasing) cuando se representa una imagen de alta resolución a una resolución más baja. El suavizado se utiliza en fotografía digital, gráficos por computadora, audio digital y muchas otras aplicaciones.
Anti-aliasing significa eliminar los componentes de la señal que tienen una frecuencia más alta que la que puede resolver correctamente el dispositivo de grabación (o muestreo). Esta eliminación se realiza antes de (re)muestrear a una resolución más baja. Cuando el muestreo se realiza sin eliminar esta parte de la señal, provoca artefactos no deseados, como el ruido en blanco y negro.
En la adquisición de señales y el audio, el antisolapamiento suele realizarse mediante un filtro antisolapamiento analógico para eliminar el componente fuera de banda de la señal de entrada antes del muestreo con un convertidor de analógico a digital. En fotografía digital, los filtros anti-aliasing ópticos fabricados con materiales birrefringentes suavizan la señal en el dominio óptico espacial. El filtro anti-aliasing esencialmente desenfoca la imagen ligeramente para reducir la resolución a la alcanzable por el sensor digital o por debajo de ella (cuanto mayor sea el tamaño de píxel, menor será la resolución alcanzable a nivel del sensor).
Ejemplos
En gráficos por computadora, el suavizado mejora la apariencia de las imágenes "irregulares" bordes de polígonos, o "irregulares", para que se suavicen en la pantalla. Sin embargo, incurre en un costo de rendimiento para la tarjeta gráfica y usa más memoria de video. El nivel de suavizado determina qué tan suaves son los bordes de los polígonos (y cuánta memoria de video consume).
Cerca de la parte superior de una imagen con un patrón de tablero de ajedrez que retrocede, la imagen es difícil de reconocer y no es estéticamente atractiva. Por el contrario, cuando se suaviza, el tablero de ajedrez cerca de la parte superior se funde con el gris, que suele ser el efecto deseado cuando la resolución es insuficiente para mostrar los detalles. Incluso cerca de la parte inferior de la imagen, los bordes aparecen mucho más suaves en la imagen suavizada. Existen varios métodos, incluido el filtro de sincronización, que se considera un mejor algoritmo de suavizado. Cuando se amplía, se puede ver cómo el suavizado interpola el brillo de los píxeles en los límites para producir píxeles grises, ya que el espacio está ocupado por mosaicos en blanco y negro. Estos ayudan a que la imagen suavizada del filtro de sincronización parezca mucho más suave que la original.
En una imagen de diamante simple, el suavizado combina los píxeles del límite; esto reduce el efecto estéticamente discordante de los límites nítidos y escalonados que aparecen en el gráfico con alias.
El suavizado se aplica a menudo al renderizar texto en la pantalla de una computadora, para sugerir contornos suaves que emulen mejor la apariencia del texto producido por la impresión convencional con tinta y papel. Particularmente con las fuentes que se muestran en pantallas LCD típicas, es común usar técnicas de representación de subpíxeles como ClearType. La reproducción de subpíxeles requiere filtros anti-aliasing especiales con balance de color para convertir lo que sería una distorsión de color severa en franjas de color apenas perceptibles. Se pueden obtener resultados equivalentes haciendo que los subpíxeles individuales sean direccionables como si fueran píxeles completos y proporcionando un filtro anti-aliasing basado en hardware como se hace en el controlador de pantalla de la computadora portátil OLPC XO-1. La geometría de píxeles afecta todo esto, ya sea que el suavizado y el direccionamiento de subpíxeles se realicen en software o hardware.
El enfoque más simple para suavizar
El enfoque más básico para suavizar un píxel es determinar qué porcentaje del píxel está ocupado por una región determinada en el gráfico vectorial (en este caso, un cuadrado del tamaño de un píxel, posiblemente transpuesto sobre varios píxeles) y usar ese porcentaje como el color.
Se puede realizar un gráfico muy básico de un único punto suavizado blanco sobre negro usando ese método de la siguiente manera:
def plot_antialiased_point()x: flotador, Sí.: flotador): ""Plot of a single, white-on-black anti-aliased point."" para rounded_x dentro planta baja()x) a ceil()x): para rounded_y dentro planta baja()Sí.) a ceil()Sí.): percent_x = 1 - abdominales()x - rounded_x) percent_y = 1 - abdominales()Sí. - rounded_y) porcentaje = percent_x * percent_y draw_pixel()coordenadas=()rounded_x, rounded_y), color=porcentaje ()rango 0-1)
Por lo general, este método es más adecuado para gráficos simples, como líneas o curvas básicas, y aplicaciones que, de otro modo, tendrían que convertir coordenadas absolutas en coordenadas con restricciones de píxeles, como gráficos 3D. Es una función bastante rápida, pero es de calidad relativamente baja y se vuelve más lenta a medida que aumenta la complejidad de la forma. Para propósitos que requieran gráficos de muy alta calidad o formas vectoriales muy complejas, probablemente este no sea el mejor enfoque.
Nota: la rutina DrawPixel
anterior no puede establecer ciegamente el valor del color en el porcentaje calculado. Debe añadir el nuevo valor al valor existente en esa ubicación hasta un máximo de 1. De lo contrario, el brillo de cada píxel será igual al valor más oscuro calculado en el tiempo para esa ubicación que produce un muy mal resultado. Por ejemplo, si un punto establece un nivel de brillo de 0,90 para un píxel determinado y otro punto calculado más tarde apenas toca ese píxel y tiene un brillo de 0,05, el valor final establecido para ese píxel debe ser 0,95, no 0,05.
Para formas más sofisticadas, el algoritmo se puede generalizar como la representación de la forma en una cuadrícula de píxeles con una resolución más alta que la superficie de visualización de destino (generalmente un múltiplo que es una potencia de 2 para reducir la distorsión), y luego usar la interpolación bicúbica para determinar la intensidad media de cada píxel real en la superficie de visualización.
Enfoque de procesamiento de señales para anti-aliasing
En este enfoque, la imagen ideal se considera una señal. La imagen que se muestra en la pantalla se toma como muestra, en cada posición de píxel (x,y), de una versión filtrada de la señal. Idealmente, uno entendería cómo el cerebro humano procesaría la señal original y proporcionaría una imagen en pantalla que produciría la respuesta más similar del cerebro.
La herramienta analítica más ampliamente aceptada para este tipo de problemas es la transformada de Fourier; esto descompone una señal en funciones base de diferentes frecuencias, conocidas como componentes de frecuencia, y nos da la amplitud de cada componente de frecuencia en la señal. Las ondas son de la forma:
- # ()2jπ π x)# ()2kπ π Sí.){displaystyle cos(2jpi x)cos(2kpi y)}
donde j y k son números enteros no negativos arbitrarios. También hay componentes de frecuencia que involucran funciones de seno en una o ambas dimensiones, pero para el propósito de esta discusión, el coseno será suficiente.
Los números j y k juntos son la frecuencia del componente: j es la frecuencia en el dirección x, y k es la frecuencia en la dirección y.
El objetivo de un filtro anti-aliasing es reducir en gran medida las frecuencias por encima de cierto límite, conocido como la frecuencia de Nyquist, para que la señal sea representada con precisión por sus muestras, o casi, de acuerdo con el teorema de muestreo; hay muchas opciones diferentes de algoritmo detallado, con diferentes funciones de transferencia de filtro. El conocimiento actual de la percepción visual humana no es suficiente, en general, para decir qué enfoque se verá mejor.
Consideraciones bidimensionales
La discusión anterior asume que el muestreo de malla rectangular es la parte dominante del problema. El filtro generalmente considerado óptimo no es rotacionalmente simétrico, como se muestra en esta primera figura; esto se debe a que los datos se muestrean en una red cuadrada, no utilizando una imagen continua. Este patrón de muestreo es la justificación para realizar el procesamiento de señales a lo largo de cada eje, como se hace tradicionalmente en datos unidimensionales. El remuestreo de Lanczos se basa en la convolución de los datos con una representación discreta de la función sinc.
Si la resolución no está limitada por la frecuencia de muestreo rectangular de la imagen de origen o de destino, lo ideal sería utilizar funciones de filtro o de interpolación con rotación simétrica, como si los datos fueran una función bidimensional de x e y continuos. La función sinc del radio tiene una cola demasiado larga para hacer un buen filtro (ni siquiera es integrable en cuadrado). Un análogo más apropiado al sinc unidimensional es la amplitud del disco de Airy bidimensional, la transformada de Fourier 2D de una región circular en un espacio de frecuencia 2D, en oposición a una región cuadrada.
Se podría considerar una Gaussiana más suficiente de su segunda derivada para aplanar la parte superior (en el dominio de la frecuencia) o agudizarla (en el dominio espacial), como se muestra. Las funciones basadas en la función gaussiana son elecciones naturales, porque la convolución con una gaussiana da otra gaussiana ya sea que se aplique a xey o al radio. Al igual que las wavelets, otra de sus propiedades es que se encuentra a medio camino entre estar localizada en la configuración (x e y) y en la representación espectral (j y k). Como función de interpolación, una gaussiana sola parece demasiado dispersa para conservar el máximo detalle posible y, por lo tanto, se agrega la segunda derivada.
Como ejemplo, cuando se imprime un negativo fotográfico con gran capacidad de procesamiento y en una impresora con un patrón hexagonal, no hay motivo para usar la función de interpolación sinc. Tal interpolación trataría las líneas diagonales de manera diferente a las líneas horizontales y verticales, lo que es como una forma débil de aliasing.
Aproximaciones prácticas de suavizado en tiempo real
Solo hay un puñado de primitivas utilizadas en el nivel más bajo en un motor de renderizado en tiempo real (ya sea acelerado por software o hardware). Estos incluyen "puntos", "líneas" y "triángulos". Si uno va a dibujar una primitiva de este tipo en blanco sobre un fondo negro, es posible diseñar una primitiva de este tipo para que tenga bordes borrosos, logrando algún tipo de suavizado. Sin embargo, este enfoque tiene dificultades para tratar con primitivas adyacentes (como triángulos que comparten un borde).
Para aproximarse al algoritmo de promedio uniforme, se puede usar un búfer adicional para los datos de subpíxeles. El enfoque inicial (y menos hambriento de memoria) usaba 16 bits adicionales por píxel, en una cuadrícula de 4 × 4. Si uno representa las primitivas en un orden cuidadoso, como de adelante hacia atrás, es posible crear una imagen razonable.
Dado que esto requiere que las primitivas estén en cierto orden y, por lo tanto, interactúa mal con una interfaz de programación de aplicaciones como OpenGL, los últimos métodos simplemente tienen dos o más subpíxeles completos por píxel, incluida la información a todo color para cada subpíxel. píxel Parte de la información puede compartirse entre los subpíxeles (como el búfer Z).
Mipmapping
También existe un enfoque especializado para el mapeo de texturas llamado mipmapping, que funciona mediante la creación de versiones prefiltradas y de menor resolución del mapa de texturas. Al renderizar la imagen, se elige el mipmap de resolución adecuada y, por lo tanto, los píxeles de textura (texels) ya están filtrados cuando llegan a la pantalla. El mipmapping generalmente se combina con varias formas de filtrado de texturas para mejorar el resultado final.
Un ejemplo de una imagen con alias pseudoaleatorio extremo
Debido a que los fractales tienen detalles ilimitados y ningún ruido más que el error de redondeo aritmético, ilustran el alias con mayor claridad que las fotografías u otros datos medidos. Los tiempos de escape, que se convierten en colores en los centros exactos de los píxeles, llegan al infinito en el borde del conjunto, por lo que los colores de los centros cercanos a los bordes son impredecibles debido al aliasing. Este ejemplo tiene bordes en aproximadamente la mitad de sus píxeles, por lo que muestra muchos alias. La primera imagen se carga a su frecuencia de muestreo original. (Dado que la mayoría de los software modernos suavizan el alias, es posible que deba descargar la versión de tamaño completo para ver todo el alias). La segunda imagen se calcula a cinco veces la frecuencia de muestreo y se reduce la muestra con el suavizado. Suponiendo que a uno realmente le gustaría algo como el color promedio sobre cada píxel, este se está acercando. Es claramente más ordenado que el primero.
Para poder comparar correctamente estas imágenes, es necesario verlas a escala completa.
Sucede que, en este caso, hay información adicional que se puede utilizar. Al volver a calcular con un "estimador de distancia" algoritmo, se identificaron puntos que están muy cerca del borde del conjunto, de modo que se aliasen detalles inusualmente finos de los tiempos de escape que cambian rápidamente cerca del borde del conjunto. Los colores derivados de estos puntos calculados se han identificado como poco representativos de sus píxeles. El conjunto cambia más rápidamente allí, por lo que una muestra de un solo punto es menos representativa de todo el píxel. Esos puntos fueron reemplazados, en la tercera imagen, interpolando los puntos a su alrededor. Esto reduce el ruido de la imagen pero tiene el efecto secundario de iluminar los colores. Entonces, esta imagen no es exactamente la misma que se obtendría con un conjunto aún mayor de puntos calculados. Para mostrar lo que se descartó, los puntos rechazados, mezclados con un fondo gris, se muestran en la cuarta imagen.
Finalmente, "Turbinas en ciernes" es tan regular que el alias sistemático (Moiré) se puede ver claramente cerca del "eje de la turbina" cuando se reduce tomando el píxel más cercano. El alias en la primera imagen parece aleatorio porque proviene de todos los niveles de detalle, por debajo del tamaño de píxel. Cuando se suprime el aliasing de nivel inferior, para hacer la tercera imagen y luego se reduce la muestra una vez más, sin anti-aliasing, para hacer la quinta imagen, el orden en la escala de la tercera imagen aparece como aliasing sistemático en la quinta. imagen.
El muestreo descendente puro de una imagen tiene el siguiente efecto (se recomienda verla a escala completa):
Súper muestreo/anti-aliasing de escena completa
El suavizado de supermuestreo (SSAA), también llamado suavizado de escena completa (FSAA), se utiliza para evitar el aliasing (o "jaggies") en imágenes de pantalla completa. SSAA fue el primer tipo de suavizado disponible con las primeras tarjetas de video. Pero debido a su tremendo costo computacional y al advenimiento de la compatibilidad con multimuestra anti-aliasing (MSAA) en las GPU, ya no se usa ampliamente en aplicaciones en tiempo real. MSAA proporciona una calidad gráfica algo inferior, pero también un gran ahorro en la potencia informática.
La imagen resultante de SSAA puede parecer más suave y también debería parecer más realista. Sin embargo, si bien es útil para imágenes similares a fotografías, un enfoque simple de suavizado (como el supermuestreo y luego el promedio) puede empeorar la apariencia de algunos tipos de líneas o diagramas (haciendo que la imagen parezca borrosa), especialmente donde la mayoría las líneas son horizontales o verticales. En estos casos puede ser útil un paso previo de montaje de la rejilla (ver indicaciones).
En general, el supermuestreo es una técnica de recopilación de puntos de datos a una resolución mayor (generalmente por una potencia de dos) que la resolución de datos final. Estos puntos de datos luego se combinan (se reducen) a la resolución deseada, a menudo solo por un promedio simple. Los puntos de datos combinados tienen artefactos de alias menos visibles (o patrones muaré).
El antialiasing de escena completa mediante supermuestreo generalmente significa que cada cuadro completo se procesa al doble (2x) o al cuádruple (4x) de la resolución de pantalla y luego se reduce la muestra para que coincida con la resolución de pantalla. Por lo tanto, un FSAA 2x generaría 4 píxeles supermuestreados para cada píxel de cada cuadro. Renderizar a resoluciones más grandes producirá mejores resultados; sin embargo, se necesita más potencia de procesador, lo que puede degradar el rendimiento y la velocidad de fotogramas. A veces, la FSAA se implementa en el hardware de tal manera que una aplicación gráfica ignora que las imágenes se supermuestrean y luego se reducen antes de mostrarse.
Suavizado basado en objetos
Un sistema de renderizado de gráficos crea una imagen basada en objetos construidos con primitivas poligonales; los efectos de alias en la imagen se pueden reducir aplicando un esquema de suavizado solo a las áreas de la imagen que representan los bordes de la silueta de los objetos. Los bordes de la silueta se suavizan mediante la creación de primitivas de suavizado que varían en opacidad. Estas primitivas de suavizado se unen a los bordes silueteados y crean una región en la imagen donde los objetos parecen mezclarse con el fondo. El método tiene algunas ventajas importantes sobre los métodos clásicos basados en el búfer de acumulación, ya que genera suavizado de escena completa en solo dos pasadas y no requiere el uso de memoria adicional requerida por el búfer de acumulación. El suavizado basado en objetos se desarrolló por primera vez en Silicon Graphics para su estación de trabajo Indy.
Suavizado y compresión gamma
Las imágenes digitales generalmente se almacenan en un formato con compresión gamma, pero la mayoría de los filtros ópticos suavizantes son lineales. Entonces, para reducir la muestra de una imagen de una manera que coincida con el desenfoque óptico, primero debe convertirla a un formato lineal, luego aplicar el filtro anti-aliasing y finalmente volver a convertirla a un formato comprimido gamma. El uso de la aritmética lineal en una imagen con compresión gamma da como resultado valores que son ligeramente diferentes del filtro ideal. Este error es mayor cuando se trata de áreas de alto contraste, lo que hace que las áreas de alto contraste se vuelvan más tenues: los detalles brillantes (como los bigotes de un gato) se vuelven visualmente más delgados y los detalles oscuros (como las ramas de los árboles) se vuelven más gruesos, en relación con la imagen ópticamente suavizada. Cada píxel se distorsiona individualmente, lo que significa que los contornos se vuelven irregulares después del suavizado. Debido a que la conversión hacia y desde un formato lineal ralentiza enormemente el proceso, y debido a que las diferencias suelen ser sutiles, la mayoría de los programas de edición de imágenes, incluidos Final Cut Pro y Adobe Photoshop, procesan las imágenes en el dominio de compresión gamma.
La mayoría de las GPU modernas admiten el almacenamiento de texturas en la memoria en formato sRGB, y pueden realizar la transformación a espacio lineal y viceversa de forma transparente, esencialmente sin pérdida de rendimiento.
Historia
Los primeros trabajos importantes en la historia del suavizado incluyen:
- Freeman, H. (marzo de 1974). "Computer processing of line drawing images". ACM Computing Surveys. 6 (1): 57–97. doi:10.1145/356625.356627. S2CID 18962414.
- Crow, Franklin C. (noviembre de 1977). "El problema del aliado en imágenes sombreadas generadas por ordenador". Comunicaciones de la ACM. 20 (11): 799–805. doi:10.1145/359863.359869. S2CID 18799849.
- Catmull, Edwin (23 a 25 de agosto de 1978). "Un algoritmo de superficie oculta con antialiasing". Proceedings of the 5th annual conference on Computer graphics and interactive techniques. págs. 6 a 11.
Contenido relacionado
FLOW-MATIC
Tubo neumático
Duque nukem 3d