Dithering ordenado

Algoritmo de tramado de imágenes
En este ejemplo, la fotografía original se muestra a la izquierda. La versión de la derecha muestra el efecto de cuantificarla a 16 colores y tramarla utilizando el patrón de tramado ordenado de 8x8.
Los 17 patrones característicos de la matriz de tramado ordenada 4x4 se pueden ver claramente cuando se utiliza con solo dos colores, blanco y negro. Cada patrón se muestra sobre el tono correspondiente sin tramado.

El tramado ordenado es cualquier algoritmo de tramado de imágenes que utiliza un mapa de umbral preestablecido distribuido en mosaico sobre una imagen. Se utiliza habitualmente para mostrar una imagen continua en una pantalla con una profundidad de color menor . Por ejemplo, Microsoft Windows lo utiliza en modos gráficos de 16 colores. El algoritmo se caracteriza por patrones de trama cruzada notables en el resultado.

Mapa de umbrales

El algoritmo reduce la cantidad de colores aplicando un mapa de umbral M a los píxeles mostrados, lo que hace que algunos píxeles cambien de color según la distancia del color original respecto de las entradas de color disponibles en la paleta reducida.

Los primeros mapas de umbral se diseñaron a mano para minimizar la diferencia perceptiva entre una imagen en escala de grises y su cuantificación de dos bits para una matriz de hasta 4x4. [1]

Una matriz de umbral óptima es aquella que, para cualquier cuantificación posible del color, tiene la textura mínima posible, de modo que la mayor impresión de la característica subyacente proviene de la imagen que se cuantifica. Se puede demostrar que para matrices cuya longitud de lado es una potencia de dos existe una matriz de umbral óptima. [2] El mapa se puede rotar o reflejar sin afectar la efectividad del algoritmo.

METRO 2 = 1 4 [ 0 2 3 1 ] {\displaystyle \mathbf {M_{2}} ={\frac {1}{4}}{\begin{bmatrix}0&2\\3&1\\\end{bmatrix}}}
METRO 4 = 1 16 [ 0 8 2 10 12 4 14 6 3 11 1 9 15 7 13 5 ] {\displaystyle \mathbf {M_{4}} ={\frac {1}{16}}{\begin{bmatrix}0&8&2&10\\12&4&14&6\\3&11&1&9\\15&7&13&5\\\end{bmatrix}}}
METRO 8 = 1 64 [ 0 32 8 40 2 34 10 42 48 16 56 24 50 18 58 26 12 44 4 36 14 46 6 38 60 28 52 20 62 30 54 22 3 35 11 43 1 33 9 41 51 19 59 27 49 17 57 25 15 47 7 39 13 45 5 37 63 31 55 23 61 29 53 21 ] {\displaystyle \mathbf {M_{8}} ={\frac {1}{64}}{\begin{bmatrix}0&32&8&40&2&34&10&42\\48&16&56&24&50&18&58&26\\12&44&4&36&14&46&6&38\\60&28&52&20&62&30&54&22\\3&35&11&43&1&33&9&41\\51&19&59&27&49&17&57&25\\15&47&7&39&13&45&5&37\\63&31&55&23&61&29&53&21\\\end{bmatrix}}}

Este mapa de umbral (para lados con longitud como potencia de dos ) también se conoce como matriz de Bayer o, cuando no está escalado, matriz de índice . Para los mapas de umbral cuyas dimensiones son una potencia de dos, el mapa se puede generar de forma recursiva mediante:

METRO 2 norte = 1 ( 2 norte ) 2 [ ( 2 norte ) 2 METRO norte ( 2 norte ) 2 METRO norte + 2 Yo norte ( 2 norte ) 2 METRO norte + 3 Yo norte ( 2 norte ) 2 METRO norte + Yo norte ] = Yo 2 METRO norte + 1 norte 2 METRO 2 Yo norte , {\displaystyle \mathbf {M} _{2n}={\frac {1}{(2n)^{2}}}{\begin{bmatrix}(2n)^{2}\mathbf {M} _{n }&(2n)^{2}\mathbf {M} _{n}+2\mathbf {J} _{n}\\(2n)^{2}\mathbf {M} _{n}+3\ mathbf {J} _{n}&(2n)^{2}\mathbf {M} _{n}+\mathbf {J} _{n}\end{bmatrix}}=\mathbf {J} _{2 }\otimes \mathbf {M} _{n}+{\frac {1}{n^{2}}}\mathbf {M} _{2}\otimes \mathbf {J} _{n},}

donde son matrices de unos y es el producto de Kronecker . Yo norte {\displaystyle \mathbf {J} _ {n}} norte × norte {\displaystyle n\veces n} {\displaystyle \otimes}

Si bien la métrica de textura que propuso Bayer podría usarse para encontrar matrices óptimas para tamaños que no sean una potencia de dos, dichas matrices son poco comunes ya que no existe una fórmula simple para encontrarlas, y los tamaños de matriz relativamente pequeños con frecuencia dan excelentes resultados prácticos (especialmente cuando se combinan con otras modificaciones al algoritmo de tramado).

Esta función también se puede expresar utilizando sólo aritmética de bits: [3]

M(i, j) = bit_inverso(intercalado_bit(xor_bit a bit(i, j), i)) / n ^ 2

Mapas de umbrales precalculados

En lugar de almacenar el mapa de umbrales como una matriz de × números enteros de 0 a , dependiendo del hardware exacto utilizado para realizar el tramado, puede ser beneficioso precalcular los umbrales del mapa en un formato de punto flotante, en lugar del formato de matriz de números enteros tradicional que se muestra arriba. norte {\estilo de visualización n} norte {\estilo de visualización n} norte 2 {\estilo de visualización n^{2}}

Para ello se puede utilizar la siguiente fórmula:

Mpre(i,j) = Mint(i,j) / n^2

Esto genera una matriz de umbral estándar.

Para el mapa 2×2:

1 4 [ 0 2 3 1 ] {\displaystyle {\frac {1}{4}}{\begin{bmatrix}0&2\\3&1\\\end{bmatrix}}}

Esto crea el mapa precalculado:

[ 0.0 0,5 0,75 0,25 ] {\displaystyle {\begin{bmatrix}0,0 y 0,5\\0,75 y 0,25\\\end{bmatrix}}}

Además, la normalización de los valores para promediar su suma a 0 (como se hace en el algoritmo de tramado que se muestra a continuación) también se puede realizar durante el preprocesamiento restando 12 del valor más grande de cada valor:

Mpre(i,j) = Mint(i,j) / n^2 – 0,5 * valormáximo

Creando el mapa precalculado:

[ 0,375 0,125 0,375 0,125 ] {\displaystyle {\begin{bmatrix}-0,375 y 0,125\\0,375 y -0,125\\\end{bmatrix}}}

Algoritmo

El algoritmo de tramado ordenado renderiza la imagen normalmente, pero para cada píxel compensa su valor de color con un valor correspondiente del mapa de umbral según su ubicación, lo que hace que el valor del píxel se cuantifique a un color diferente si excede el umbral.

Para la mayoría de los propósitos de tramado, es suficiente simplemente sumar el valor del umbral a cada píxel (sin realizar la normalización restando 12 ), o equivalentemente, comparar el valor del píxel con el umbral: si el valor de brillo de un píxel es menor que el número en la celda correspondiente de la matriz, trace ese píxel en negro, de lo contrario, tracelo en blanco. Esta falta de normalización aumenta ligeramente el brillo promedio de la imagen y hace que los píxeles casi blancos no se difuminen. Esto no es un problema cuando se usa una paleta de escala de grises (o cualquier paleta donde las distancias relativas de color sean (casi) constantes), e incluso a menudo es deseable, ya que el ojo humano percibe las diferencias en los colores más oscuros con mayor precisión que en los más claros, sin embargo, produce resultados incorrectos, especialmente cuando se usa una paleta pequeña o arbitraria, por lo que se debe preferir la normalización adecuada.

Dos imágenes que imitan un degradado de 140 × 140 = 19600 colores diferentes. Ambas imágenes utilizan los mismos 64 colores. La imagen de la derecha ha sido difuminada. El difuminado se realizó utilizando un algoritmo de difuminado no normalizador, lo que provocó que la imagen tuviera una ligera sobrerrepresentación de píxeles brillantes.

En otras palabras, el algoritmo realiza la siguiente transformación en cada color c de cada píxel: donde M ( i , j ) es el mapa de umbral en la fila i y la columna j , c es el color transformado y r es la cantidad de dispersión en el espacio de color. Suponiendo una paleta RGB con 2 3 N colores espaciados uniformemente donde cada color (un triple de valores rojo, verde y azul) está representado por un octeto de 0 a 255, uno elegiría típicamente . ( 12 es nuevamente el término normalizador). do " = norte mi a a mi s a _ pag a yo mi a a mi _ do o yo o a ( do + a × ( METRO ( incógnita modificación norte , y modificación norte ) 1 / 2 ) ) {\displaystyle c'=\mathrm {color\_de\_paleta\_más\_cercano} {\mathopen {}}\left(c+r\times \left(M(x{\bmod {n}},y{\bmod {n}})-1/2\right){\mathclose {}}\right)} a 255 norte {\textstyle r\approx {\frac {255}{N}}}

Debido a que el algoritmo opera en píxeles individuales y no tiene declaraciones condicionales, es muy rápido y adecuado para transformaciones en tiempo real. Además, debido a que la ubicación de los patrones de tramado siempre permanece igual en relación con el marco de visualización, es menos propenso a la vibración que los métodos de difusión de errores, lo que lo hace adecuado para animaciones. Debido a que los patrones son más repetitivos que el método de difusión de errores, una imagen con tramado ordenado se comprime mejor. El tramado ordenado es más adecuado para gráficos de arte lineal, ya que dará como resultado líneas más rectas y menos anomalías.

Los valores leídos del mapa de umbral deberían escalarse preferiblemente en el mismo rango que la diferencia mínima entre los distintos colores en la paleta de destino. De manera equivalente, el tamaño del mapa seleccionado debería ser igual o mayor que la relación entre los colores de origen y los colores de destino. Por ejemplo, al cuantificar una imagen de 24 bpp a 15 bpp (256 colores por canal a 32 colores por canal), el mapa más pequeño que se elegiría sería 4×2, para la relación de 8 (256:32). Esto permite expresar cada tono distinto de la entrada con diferentes patrones de tramado. [ cita requerida ]

Una paleta variable: tramado de patrones

Enfoques distintos a los de Bayer

El enfoque de matriz de umbralización anterior describe la familia Bayer de algoritmos de dithering ordenados. También se conocen otros algoritmos que generalmente implican cambios en la matriz de umbral, equivalentes al "ruido" en las descripciones generales del dithering.

Semitono

El tramado de medios tonos realiza una forma de tramado agrupado, creando una apariencia similar a los patrones de medios tonos , utilizando una matriz especialmente diseñada.

Vacío y cúmulo

El algoritmo de vacío y clúster utiliza un ruido azul generado previamente como matriz para el proceso de tramado. [4] La matriz de ruido azul conserva el buen contenido de alta frecuencia de Bayer, pero con una cobertura más uniforme de todas las frecuencias involucradas muestra una cantidad mucho menor de patrones. [5]

El método de "vacíos y cúmulos" recibe su nombre del procedimiento de generación de matrices, en el que una imagen negra con píxeles blancos inicializados aleatoriamente se difumina mediante un método gaussiano para encontrar las partes más brillantes y más oscuras, correspondientes a los vacíos y los cúmulos. Después de que unos pocos intercambios hayan distribuido de manera uniforme las partes brillantes y oscuras, los píxeles se numeran por importancia. Se necesitan recursos computacionales significativos para generar la matriz de ruido azul: en una computadora moderna, una matriz de 64 × 64 requiere un par de segundos utilizando el algoritmo original. [6]

Este algoritmo se puede ampliar para crear máscaras de tramado animadas que también consideren el eje del tiempo. Esto se hace ejecutando el algoritmo en tres dimensiones y utilizando un núcleo que es un producto de un núcleo gaussiano bidimensional en el plano XY y un núcleo gaussiano unidimensional en el eje Z. [7]

Referencias

  1. ^ Lippel, Kurland (diciembre de 1971). "El efecto del tramado en la cuantificación de luminancia de imágenes". IEEE Transactions on Communication Technology . 19 (6): 879–888.
  2. ^ Bayer, Bryce (11-13 de junio de 1973). "Un método óptimo para la reproducción en dos niveles de imágenes de tonos continuos" (PDF) . IEEE International Conference on Communications . 1 : 11–15. Archivado desde el original (PDF) el 2013-05-12 . Consultado el 2012-07-19 .
  3. ^ Joel Yliluoma. “Algoritmo de tramado posicional de paleta arbitraria”
  4. ^ Ulichney, Robert A (1993). "El método void-and-cluster para la generación de matrices de tramado" (PDF) . Consultado el 11 de febrero de 2014 .
  5. ^ Wronski, Bart (31 de octubre de 2016). "Dithering parte tres: dithering de cuantificación 2D en el mundo real".
  6. ^ Peters, Christoph. "Texturas de ruido azul gratuitas". momentsingraphics.de .
  7. ^ Wolfe, Alan; Morrical, Nathan; Akenine-Möller, Tomas; Ramamoorthi, Ravi (2022). Máscaras de ruido azul espaciotemporales. Asociación Eurográfica. doi :10.2312/sr.20221161. ISBN 978-3-03868-187-8. Número de identificación del sujeto  250164404.
  • Dithering ordenado (Proyecto del curso de Gráficos, laboratorio Visgraf, Brasil)
  • Algoritmos de dithering (Lee Daniel Crocker, Paul Boulay y Mike Morra)

Lectura adicional

  • Ancin, Hakan; Bhattacharjya, Anoop K.; Shu, Joseph S. (2 de enero de 1998). Beretta, Giordano B.; Eschbach, Reiner (eds.). "Mejora de los vacíos y los grupos para una mejor uniformidad de los medios tonos". Photonics West '98 Imágenes electrónicas . Imágenes en color: color independiente del dispositivo, copia impresa en color y artes gráficas III. 3300 : 321–329. Código Bibliográfico : 1998SPIE.3300..321A. CiteSeerX  10.1.1.40.5331 . doi :10.1117/12.298295. S2CID  6219511.
  • Implementación en Matlab de varios métodos de tramado
  • anim8gdx, implementación en Java de varios métodos de tramado (en su mayoría ordenados)
Obtenido de "https://es.wikipedia.org/w/index.php?title=Dithering_ordenado&oldid=1251661268"