stringtranslate.com

Anti-aliasing espacial

En el procesamiento de señales digitales , el anti-aliasing espacial es una técnica para minimizar los artefactos de distorsión ( aliasing ) al representar una imagen de alta resolución a una resolución más baja. El anti-aliasing se utiliza en fotografía digital , gráficos de computadora , audio digital y muchas otras aplicaciones.

El anti-aliasing consiste en 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 realizar un (re)muestreo a una resolución más baja. Cuando se realiza un muestreo sin eliminar esta parte de la señal, se producen artefactos no deseados, como ruido en blanco y negro.

En la adquisición de señales y audio, el anti-aliasing se realiza a menudo utilizando un filtro anti-aliasing analógico para eliminar el componente fuera de banda de la señal de entrada antes del muestreo con un convertidor analógico a digital . En la fotografía digital, los filtros anti-aliasing ópticos hechos de materiales birrefringentes suavizan la señal en el dominio óptico espacial. El filtro anti-aliasing esencialmente difumina la imagen ligeramente para reducir la resolución a la que se puede lograr con el sensor digital o por debajo de ella (cuanto mayor sea el paso de píxel , menor será la resolución que se puede lograr a nivel del sensor).

Ejemplos

En gráficos de computadora, el anti-aliasing mejora la apariencia de los bordes "irregulares" de los polígonos, o " jaggies ", para que se suavicen en la pantalla. Sin embargo, esto implica un costo de rendimiento para la tarjeta gráfica y utiliza más memoria de video . El nivel de anti-aliasing 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 se aleja, la imagen es difícil de reconocer y no es estéticamente atractiva. Por el contrario, cuando se aplica anti-aliasing, el tablero de ajedrez cerca de la parte superior se mezcla con gris, que suele ser el efecto deseado cuando la resolución es insuficiente para mostrar el detalle. Incluso cerca de la parte inferior de la imagen, los bordes parecen mucho más suaves en la imagen anti-aliasing. Existen múltiples métodos, incluido el filtro sinc , que se considera un mejor algoritmo de anti-aliasing. [1] Cuando se amplía, se puede ver cómo el anti-aliasing interpola el brillo de los píxeles en los límites para producir píxeles grises , ya que el espacio está ocupado por mosaicos blancos y negros. Esto ayuda a que la imagen anti-aliasing con filtro sinc parezca mucho más suave que la original.

Izquierda: una versión con alias de una forma simple. Derecha: una versión con suavizado de la misma forma.

En una imagen de diamante simple, el suavizado combina los píxeles de los límites, lo que reduce el efecto estéticamente discordante de los límites nítidos y escalonados que aparecen en el gráfico suavizado.

El anti-aliasing se aplica a menudo en la representación de texto en una pantalla de ordenador, 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 las pantallas LCD típicas, es común utilizar técnicas de representación de subpíxeles como ClearType . La representación de subpíxeles requiere filtros anti-aliasing especiales con equilibrio de color para convertir lo que sería una distorsión de color grave 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 del portátil OLPC XO-1 . La geometría de píxeles afecta a todo esto, ya sea que el anti-aliasing y el direccionamiento de subpíxeles se realicen en software o hardware.

El enfoque más simple para suavizar el contorno

El enfoque más básico para suavizar un píxel es determinar qué porcentaje del píxel está ocupado por una región dada en el gráfico vectorial (en este caso, un cuadrado del tamaño de un píxel, posiblemente transpuesto en varios píxeles) y usar ese porcentaje como color.

Un gráfico muy básico de un único punto anti-aliasing blanco sobre negro utilizando ese método se puede hacer de la siguiente manera:

def  plot_antialiased_point ( x :  float ,  y :  float ): """Grafica un único punto antialiased blanco sobre negro.""" para rounded_x en floor ( x ) a ceil ( x ): para rounded_y en floor ( y ) a ceil ( y ): percent_x = 1 - abs ( x - rounded_x ) percent_y = 1 - abs ( y - rounded_y ) percent = percent_x * percent_y draw_pixel ( coordinates = ( rounded_x , rounded_y ), color = percent ( rango 0 - 1 ))                                     

Este método es generalmente el 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 limitadas por píxeles, como gráficos 3D. Es una función bastante rápida, pero de calidad relativamente baja y se vuelve más lenta a medida que aumenta la complejidad de la forma. Para propósitos que requieren gráficos de muy alta calidad o formas vectoriales muy complejas, probablemente este no sea el mejor enfoque.

Nota: La draw_pixelrutina anterior no puede establecer ciegamente el valor del color en el porcentaje calculado. Debe sumar 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 ese momento para esa ubicación, lo que produce un resultado muy malo. 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 debería ser 0,95, no 0,05.

Para formas más sofisticadas, el algoritmo se puede generalizar para representar la forma en una cuadrícula de píxeles con una resolución mayor 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 una interpolación bicúbica para determinar la intensidad promedio de cada píxel real en la superficie de visualización.

Enfoque de procesamiento de señales para el anti-aliasing

En este enfoque, la imagen ideal se considera una señal . La imagen que se muestra en la pantalla se toma como muestras, 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 por parte del cerebro.

La herramienta analítica más aceptada para este tipo de problemas es la transformada de Fourier , que 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 de la señal. Las ondas tienen la forma:

donde j y k son números enteros no negativos arbitrarios . También hay componentes de frecuencia que involucran las funciones 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 la 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 un cierto límite, conocido como frecuencia de Nyquist , de modo que la señal sea representada con precisión por sus muestras, o casi, de acuerdo con el teorema de muestreo ; existen muchas opciones diferentes de algoritmos detallados, 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 será el mejor.

Consideraciones bidimensionales

Función Sinc, con X e Y separados

La discusión anterior asume que el muestreo de malla rectangular es la parte dominante del problema. El filtro que generalmente se considera ó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 un filtro simétrico rotacional o funciones de interpolación, como si los datos fueran una función bidimensional de x e y continuas. La función sinc del radio tiene una cola demasiado larga para ser un buen filtro (ni siquiera es integrable al cuadrado ). Un análogo más apropiado para la función 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 contraposición a una región cuadrada.

Función gaussiana más diferencial

Se podría considerar una gaussiana más una cantidad 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 opciones naturales, porque la convolución con una gaussiana da otra gaussiana, ya sea que se aplique a x e y o al radio. De manera similar a las ondículas, otra de sus propiedades es que está 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 preservar el máximo detalle posible, y por lo tanto se agrega la segunda derivada.

Por ejemplo, al imprimir un negativo fotográfico con una gran capacidad de procesamiento y en una impresora con un patrón hexagonal, no hay razón para utilizar la interpolación de la función sinc. Dicha 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 anti-aliasing en tiempo real

Solo hay un puñado de primitivas que se utilizan en el nivel más bajo en un motor de renderizado en tiempo real (ya sea acelerado por software o por hardware). Entre ellas se incluyen "puntos", "líneas" y "triángulos". Si se va a dibujar una primitiva de este tipo en blanco sobre un fondo negro, es posible diseñarla para que tenga bordes difusos, con lo que se consigue 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 promediado uniforme, se puede utilizar un búfer adicional para los datos de subpíxeles. El enfoque inicial (y el que menos memoria consume) utilizaba 16 bits adicionales por píxel, en una cuadrícula de 4 × 4. Si se representan los primitivos en un orden cuidadoso, como de adelante hacia atrás, es posible crear una imagen razonable.

Dado que esto requiere que los primitivos estén en cierto orden y, por lo tanto, interactúa de manera deficiente con una interfaz de programación de aplicaciones como OpenGL , los métodos más recientes simplemente tienen dos o más subpíxeles completos por píxel, incluida la información de color completa para cada subpíxel. Es posible que se comparta cierta información entre los subpíxeles (como el búfer Z ).

Mapeo MIP

También existe un enfoque especializado para el mapeo de texturas llamado mipmapping , que funciona creando versiones prefiltradas de menor resolución del mapa de texturas. Al renderizar la imagen, se elige el mapa mip 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.

Ejemplo de una imagen con aliasing pseudoaleatorio extremo

Debido a que los fractales tienen un nivel de detalle ilimitado y no tienen ruido, salvo el error de redondeo aritmético, ilustran el aliasing con más 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 cerca de los bordes son impredecibles debido al aliasing. Este ejemplo tiene bordes en aproximadamente la mitad de sus píxeles, por lo que muestra mucho aliasing. La primera imagen se carga con su frecuencia de muestreo original. (Dado que la mayoría de los software modernos utilizan anti-aliasing, es posible que deba descargar la versión de tamaño completo para ver todo el aliasing). La segunda imagen se calcula a cinco veces la frecuencia de muestreo y se reduce la resolución con anti-aliasing. Suponiendo que realmente nos gustaría algo así como el color promedio sobre cada píxel, esta se está acercando. Es claramente más ordenada que la primera.

Para comparar adecuadamente estas imágenes, es necesario verlas a escala completa.

En este caso, se puede utilizar información adicional. Al volver a calcular con un algoritmo de "estimación de distancia", se identificaron puntos que están muy cerca del borde del conjunto, de modo que se introducen detalles inusualmente finos debido a los tiempos de escape que cambian rápidamente cerca del borde del conjunto. Los colores derivados de estos puntos calculados se identificaron como inusualmente 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 se reemplazaron, en la tercera imagen, interpolando los puntos que los rodeaban. Esto reduce el ruido de la imagen, pero tiene el efecto secundario de aclarar los colores. Por lo tanto, esta imagen no es exactamente la misma que se obtendría con un conjunto aún más grande de puntos calculados. Para mostrar lo que se descartó, los puntos rechazados, mezclados en un fondo gris, se muestran en la cuarta imagen.

Por último, "Budding Turbines" es tan regular que se puede ver claramente un alias sistemático (Muaré) cerca del "eje de la turbina" principal cuando se reduce su tamaño 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 del píxel. Cuando se suprime el alias de nivel inferior, para hacer la tercera imagen y luego se reduce la resolución una vez más, sin anti-aliasing, para hacer la quinta imagen, el orden en la escala de la tercera imagen aparece como alias 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 / suavizado de escena completa

El anti-aliasing de supermuestreo (SSAA) , [2] también llamado anti-aliasing de escena completa (FSAA), [3] se utiliza para evitar el aliasing (o " dientes de sierra ") en imágenes de pantalla completa. [4] El SSAA fue el primer tipo de anti-aliasing disponible con las primeras tarjetas de video. Pero debido a su tremendo costo computacional y la llegada del soporte de anti-aliasing multimuestra (MSAA) en las GPU, ya no se usa ampliamente en aplicaciones en tiempo real. El MSAA proporciona una calidad gráfica algo menor, pero también enormes ahorros en potencia computacional.

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 arte lineal o diagramas (haciendo que la imagen parezca borrosa), especialmente cuando la mayoría de las líneas son horizontales o verticales. En estos casos, un paso previo de ajuste de la cuadrícula puede ser útil (consulte la sugerencia ).

En general, el supermuestreo es una técnica de recolección de puntos de datos con una resolución mayor (generalmente por una potencia de dos) que la resolución de los datos finales. Luego, estos puntos de datos se combinan (reducen la resolución) hasta obtener la resolución deseada, a menudo simplemente mediante un promedio simple . Los puntos de datos combinados tienen artefactos de aliasing menos visibles (o patrones muaré ).

El anti-aliasing de escena completa mediante supermuestreo generalmente significa que cada fotograma completo se renderiza al doble (2x) o al cuádruple (4x) de la resolución de pantalla y luego se reduce la resolución para que coincida con la resolución de pantalla. Por lo tanto, un FSAA 2x renderizaría 4 píxeles supermuestreados por cada píxel individual de cada fotograma. La renderización a resoluciones mayores producirá mejores resultados; sin embargo, se necesita más potencia del procesador, lo que puede degradar el rendimiento y la velocidad de fotogramas. A veces, el FSAA se implementa en hardware de tal manera que una aplicación gráfica no se da cuenta de que las imágenes se están supermuestreando y luego se están reduciendo antes de mostrarse.

Anti-aliasing basado en objetos

Un sistema de renderizado de gráficos crea una imagen basada en objetos construidos con primitivas poligonales; los efectos de suavizado 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 creando 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 fundirse con el fondo. El método tiene algunas ventajas importantes sobre los métodos clásicos basados ​​en el búfer de acumulación [ aclaración necesaria ] 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 .

Anti-aliasing y compresión gamma

Las imágenes digitales se almacenan normalmente en un formato comprimido gamma , pero la mayoría de los filtros anti-aliasing ópticos son lineales. Por lo tanto, para reducir la resolución de una imagen de forma que coincida con el desenfoque óptico, primero se debe convertir a un formato lineal, luego aplicar el filtro anti-aliasing y, por último, volver a convertirla a un formato comprimido gamma. [5] El uso de aritmética lineal en una imagen comprimida 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 anti-aliasing ópticamente. [6] Cada píxel se distorsiona individualmente, lo que significa que los contornos se vuelven poco suaves después del anti-aliasing. Debido a que la conversión hacia y desde un formato lineal ralentiza en gran medida el proceso, y debido a que las diferencias suelen ser sutiles, la mayoría del software de edición de imágenes , incluidos Final Cut Pro y Adobe Photoshop , procesan 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 transformaciones al espacio lineal y viceversa de forma transparente, prácticamente sin ninguna pérdida de rendimiento.

Historia

Entre los primeros trabajos importantes en la historia del anti-aliasing se incluyen:

Véase también

Referencias

  1. ^ Leler, William J. (julio de 1980). "Visión humana, anti-aliasing y la pantalla barata de 4000 líneas". ACM SIGGRAPH Computer Graphics . 14 (3): 308–313. doi :10.1145/965105.807509.
  2. ^ "Radeon HD 5870 de AMD: la próxima generación de GPU". AnandTech.com.
  3. ^ Jason Gregory, Jeff Lander (2009). Arquitectura del motor de juego. AK Peters, Ltd., pág. 39. ISBN 978-1-56881-413-1.
  4. ^ M. Carmen Juan Lizandra (junio de 2000). "Librerías gráficas para programación en Windows". Crossroads . 6 (4). ACM: 14–18. doi :10.1145/333424.333433. S2CID  15786664.
  5. ^ Maruszczyk, Kuba; Denes, Gyorgy; Mantiuk, Rafal K. (2018). "Mejora de la calidad del anti-aliasing en la realidad virtual" (PDF) . EG UK Computer Graphics & Visual Computing . S2CID  54081570. Archivado desde el original (PDF) el 18 de febrero de 2019.
  6. ^ Brasseur, Eric. "Error gamma en el escalado de imágenes". www.4p8.com . Archivado desde el original el 23 de diciembre de 2012. Consultado el 14 de diciembre de 2012 .

Enlaces externos