COMPENSACIÓN
  GAMMA.
  DCRAW
  CON GAMMA


   Creado
   12 May 2008


   Actualizado
   7 Mar 2010


   


© Guillermo Luijk 2008



INTRODUCCIÓN

En este artículo se va a hablar de ese elemento omnipresente en el tratamiento de imágenes pero a la vez desconocido en muchos casos que es la compensación gamma, y que los programas de edición gráfica aplican a las imágenes.

Asimismo, y dado que hoy por hoy no es posible en Photoshop escapar a la aplicación de esta corrección en las imágenes ya que sus herramientas habituales de edición resultan engorrosas de utilizar sobre imágenes lineales, se presenta una versión de DCRAW que permite obtener directamente una salida en gamma compensada.

Esto es una novedad dado que DCRAW es un revelador eminentemente lineal, y en 16 bits su autor no se plantea la posibilidad de producir una salida gráfica que no esté en gamma 1.


MOTIVACIÓN DE LA COMPENSACIÓN GAMMA

NECESIDAD ORIGINAL DE LA CURVA GAMMA

Con facilidad podemos encontrar recursos en la Web donde se justifica la existencia de la compensación gamma por la forma no lineal en que responde la visión humana. Es cierto que nuestro sistema visual tiene una respuesta a la luminosidad de tipo logarítmico, mucho más próxima a una curva gamma que a un comportamiento lineal, pero esta coincidencia no tiene relación alguna con la necesidad de aplicar una compensación gamma a las imágenes.

Hay que dejar claro por lo tanto que la compensación gamma de la imagen es independiente del comportamiento físico de nuestro sistema visual, y surge única y exclusivamente como una compensación de la respuesta no lineal de los dispositivos de reproducción de imágenes. Si las primeras pantallas de tubo que se diseñaron no hubieran tenido una respuesta no lineal, nunca se habría planteado la necesidad de la compensación gamma.

En efecto, tomando el ejemplo de nuestras cámaras digitales: si es bien sabido que la cámara es un dispositivo lineal, y las pantallas de ordenador en las que se visualizan las mismas también lo fueran, por qué habría de introducirse corrección alguna en la luminosidad de las imágenes para que las viéramos tal y como percibimos las escenas reales que representan?

Un elemento lineal (cámara), más otro igualmente lineal (monitor), daría lugar a una reproducción de luminosidades proporcional a las que había en la escena original, por lo tanto no habría modo posible de que viéramos incorrectamente dichas imágenes en el monitor independientemente de cuál fuera la respuesta del ojo.

La siguiente gráfica muestra la respuesta no lineal típica de un monitor de tubo de rayos catódicos, y la curva gamma con la que se compensa dicha no linealidad:


Fig. 1 Respuesta no lineal CRT y curva gamma inversa.


El funcionamiento es el siguiente: supongamos que tenemos un píxel con una luminosidad en la escena del 60% del máximo registrable. Si introducimos dicha señal directamente en el monitor (curva de respuesta en color gris), la salida producida sería de poco más de un 30% respecto al máximo del rango de salida, y como consecuencia veríamos el píxel más oscuro de lo que lo percibíamos en la escena.

Si previamente a la salida por el monitor el nivel de dicho píxel se aumenta del 60% de entrada a un 80% (curva de compensación gamma en color naranja) el nivel finalmente "inyectado" en la pantalla sería un 80%, nivel que será restituido por la respuesta del monitor a un valor de luminosidad 60% y como consecuencia lo percibiremos en el monitor con la misma luminosidad relativa que en la escena.

Puede encontrarse una explicación con más profundidad sobre todo lo que relativo a la curva de compensación gamma en vídeo, imagen digital y procesado de imagen en Frequently Asked Questions about Gamma por Charles Poynton.


JUSTIFICACIÓN ACTUAL EN LA EDICIÓN DE IMÁGENES

Hoy en día cualquier sistema de representación, y en particular los sistemas de visualización de nuestros ordenadores formados por el conjunto tarjeta gráfica, monitor (típicamente TFT) y la capa de software de configuración gráfica del sistema operativo, ofrecen la versatilidad necesaria para tener un sistema calibrado y configurado de modo que se hiciera transparente al usuario la posible no linealidad de respuesta del hardware.

Siendo esto así, por qué sigue siendo la gamma un elemento clave en los perfiles de color empleados en la edición gráfica? por qué se sigue permitiendo que un parámetro no inherente a los datos que forman la imagen influya fuertemente en la distribución de niveles (histograma) de ésta, y como consecuencia condicione una forma de trabajar diferente en las aplicaciones de procesado de imagen?


EDICIÓN LINEAL

En realidad no existe una verdadera justificación para que los sistemas de edición gráfica sigan trabajando hoy en día con imágenes en gamma compensada, y a este respecto hay toda una corriente de expertos que apoyan la edición lineal de imágenes, tales como Timo Autiokari, Iliah Borg o David Coffin. Incluso herramientas software como LightZone trabajan ya linealmente las imágenes, al menos en su concepto.

La edición lineal de imágenes presenta ventajas y facilidades respecto a las imágenes en gamma compensada, en especial en fotografía donde asimilar una imagen lineal a un flujo de trabajo planteado en términos de pasos de diafragma es trivial. Por ejemplo una corrección de exposición por N pasos en lineal se traduce en un escalado de los 3 canales por un mismo factor potencia de 2, de valor 2N, cuando en gamma compensada el factor a aplicar habrá de arrastrar la curva gamma empleada como se verá en el apartado siguiente.

El único motivo para que siga teniendo sentido la compensación gamma de la imagen en la fase de procesado, es que bajo una codificación lineal con números enteros, que es hoy la usada por la mayoría de programas de edición gráfica como Photoshop, incluso con 16 bits es fácil tener problemas de cuantización (posterización) en las sombras debido al reducido número de niveles dedicados a representarlas.

Estas pegas se solucionarían sin ningún problema con editores lineales en coma flotante donde los niveles de color se representen con números decimales de 16 ó más bits, en los que los errores de redondeo no afectarían en las sombras.

Sería deseable que en el futuro ésta se impusiera como la forma de trabajo habitual en los editores y formatos gráficos que a día de hoy trabajan mayoritariamente con números enteros de precisión comprometida, y que la compensación gamma (u otro tipo de curva de expansión) quedase restringida a ser aplicada solo en el archivo final de salida (típicamente un JPEG de 8 bits), pero sin intervenir en la edición de la imagen.


FORMULACIÓN DE LA CURVA GAMMA. GAMMA EN sRGB

FÓRMULA MATEMÁTICA

Para aplicar la compensación gamma se emplea la función potencia de x ya representada en la Fig. 1. De gran simplicidad formal, deja inalterado el 0 y el 1, con lo que basta normalizar la señal a compensar para que su máximo coincida con el 1 del argumento de la gamma:

OUTgamma = INlin1/g

Aunque simple, su implementación informática requiere de cierta potencia de proceso por lo que como las funciones trigonométicas en procesos de velocidad crítica se suele aproximar mediante tablas precalculadas (lookup tables).


PROPIEDAD CONMUTATIVA DE LA COMPENSACIÓN GAMMA

La formulación matemática de la compensación gamma posee una propiedad muy interesante que hace que el escalado de los tres canales de una imagen por un determinado factor (lo que en lineal sabemos que corresponde a un ajuste de exposición), siga pudiendo realizarse mediante un escalado lineal de los mismos aunque estemos empleando una gamma no lineal.

En efecto, si atendemos a la expresión de la compensación gamma puede verse que el escalado por un factor lineal y la compensación gamma son en realidad conmutables:

(f * INlin)1/g = f1/g * INlin1/g

Cualquier factor de escalado lineal f puede sacarse del término elevado a gamma convirtiéndose en un nuevo factor f1/g que multiplicando a los niveles de la imagen ya compensada en gamma dará el mismo resultado final.

Esto tiene varias consecuencias positivas. Una de ellas sería que para llevar a cabo una corrección de exposición, por ejemplo mediante curvas lineales, no vamos a necesitar realizar ninguna corrección previa de la gamma sino que podrá aplicarse directamente sobre la imagen en gamma compensada una nueva curva lineal que dará lugar a una corrección de exposición formalmente correcta.


GAMMA DE LOS PERFILES DE COLOR

Ya en el terreno de los perfiles de color para la representación y edición de imágenes digitales, la elección de un valor de gamma u otro no se justifica por las no linealidades del hardware subyacente que la sugirieron originalmente sino que responde a criterios de eficiencia colorimétrica.

En efecto, aunque la gamma no va afectar al tamaño ni la forma de la gama de tonos soportados por un perfil de color, sí es determinante en la distribución de los valores RGB dentro de la gama representada, es decir, el histograma. Por lo tanto es un parámetro muy importante en el control de los errores de cuantización, en especial en las sombras donde estos se hacen más patentes.

El valor más habitual es 2,2 que suele considerarse como el óptimo en la mayoría de aplicaciones, o bien un valor cercano. La siguiente tabla muestra el valor de gamma empleado en los perfiles de color más típicos:

   PERFIL DE COLOR       GAMMA   
sRGB 2,2 *
Adobe RGB 2,2
ProPhoto RGB 1,8
Apple RGB 1,8
Fig. 2 Valor de gamma en los perfiles de color más habituales.


GAMMA EN sRGB *

En la anterior tabla se indicaba con cierta reserva que la gamma del perfil sRGB es 2,2. Y esto es así porque aunque la curva gamma global de este espacio de trabajo se puede asimilar a una gamma 2,2, no lo es en realidad.

Su definición es un poco más compleja y el resultado viene a ser el de una gamma 2,2 salvo en las sombras más profundas, donde la curva normalizada del espacio sRGB responde a una aproximación lineal que da lugar a un incremento sensiblemente inferior de niveles que la gamma estándar.

De acuerdo a la referencia dada en la Web de Bruce Lindbloom la fórmula de la curva de compensación gamma en sRGB se define como:

OUTgamma = 12,92 * INlin      para INlin<=0,0031308

OUTgamma = 1,055 * INlin1/2,4 - 0,055      para INlin>0,0031308

Si representamos esta curva frente a la de la gamma 2,2 resultan muy similares:


Fig. 3 Compensación gamma 2,2 estándar vs sRGB.


Hay que ampliar la zona inicial del rango para ver las diferencias entre ambas curvas. Junto a las gráficas en escala lineal, se representa la diferencia que supone cada curva en pasos de diafragma:


Fig. 4 Compensación gamma 2,2 estándar vs sRGB.


Esta peculiaridad de la curva gamma de sRGB tiene como consecuencia que este perfil de color no cumpla la propiedad conmutativa vista, y por lo tanto no sea posible realizar un ajuste de exposición estrictamente correcto basado en curvas lineales sobre imágenes representadas en sRGB.

Una curiosidad del revelador Lightroom es que, pese a que emplea como espacio de color para la visualizar los datos de la imagen (histogramas, zonas quemadas,...) el perfil de gran amplitud ProPhoto RGB, usa como compensación gamma la curva normalizada sRGB en lugar de la estándar de ProPhoto (gamma=1,8), lo que propiciará que LR visualice unos histogramas más cercanos a los que se obtendrían con una salida sRGB que con una salida propiamente en ProPhoto RGB, dado el peso que tiene la gamma en el aspecto del histograma como veremos en el siguiente apartado.


INFLUENCIA DE LA GAMMA EN EL HISTOGRAMA

Cada perfil de color tiene una diferente definición matricial que definirá la gama de colores que es capaz de representar, lo que hará que la codificación del color de cada píxel se realice con diferentes combinaciones RGB según el perfil elegido.

Sin embargo será aún más determinante en la distribución de niveles RGB en el histograma la gamma del perfil de color en cuestión, y es sobre este hecho sobre lo que vamos a centrar nuestra atención. Al editar imágenes en BN por ejemplo, donde los píxeles son neutros (R=G=B), la única diferencia en el histograma entre usar uno u otro perfil de color vendrá dada por la curva gamma particular de cada uno.

Como supone una fuerte expansión de los niveles que representan las sombras y tonos medios, y una ligera compresión de los que corresponden a las altas luces (aprox. los últimos 2 diafragmas del rango lineal), la compensación gamma tiene un efecto general de expansión del histograma.

Los histogramas con los que estamos acostumbrados a trabajar en Photoshop, en los reveladores RAW y programas de edición gráfica en general, ya llevan aplicada la compensación gamma por lo que son histogramas "expandidos".

A continuación se muestra el efecto de expansión que tiene en un histograma lineal (gamma=1,0) la aplicación de una curva gamma estándar, deteniéndonos en los valores más típicos (gamma=1,8 de ProPhoto RGB y gamma=2,2 de Adobe RGB):


Fig. 5 Efecto de aplicar la compensación gamma en el histograma.


A la vista de las diferencias queda claro porqué Photoshop por ejemplo no es apto para editar imágenes lineales (gamma=1,0). La información está tan concentrada en la parte izquierda del histograma, que visualizado así éste resulta poco intuitivo y difícilmente manejable con las herramientas habituales de PS.

Acabamos de ver que la gamma es determinante en el nivel de compresión del histograma en función del perfil usado.

A continuación se muestran los histogramas de una misma imagen en los perfiles de gammas dispares sRGB, Adobe RGB y ProPhoto RGB, incluyendo ahora no solo el efecto de la curva gamma propia de cada uno de ellos sino también la codificación particular de los valores RGB en cada perfil:


Fig. 6 Histogramas de una imagen en función del perfil de color escogido.


Como puede verse, las sombras más profundas que en sRGB se encuentran fuertemente agregadas junto al origen aparecen sin embargo mucho más expandidas tanto en Adobe RGB como en ProPhoto RGB. Esto es debido al tramo inicial lineal inicial de la curva de compensación gamma sRGB.

Como consecuencia en sRGB tendremos una menor precisión para el ajuste de niveles en las sombras profundas, con mayor peligro de que se empasten los tonos más bajos al editar la imagen por ejemplo con curvas de contraste.

En mi caso este hecho hace por sí solo, al margen de las consideraciones sobre la amplitud de la gama de colores, que desista de emplear sRGB como espacio de edición. Y de forma particular en imágenes en BN, donde los matices tonales en las sombras cobran especial relevancia.

También puede notarse cómo la menor gamma de ProPhoto RGB respecto a sRGB y Adobe RGB hace que el histograma del primero aparezca menos expandido tanto en las sombras como en las luces que Adobe RGB. En las sombras ProPhoto RGB aún se muestra más expandido que sRGB porque predomina la citada peculiaridad de la curva sRGB.

NOTA: ha de quedar claro que todo lo visto en este apartado hace referencia a la influencia de la gamma únicamente en el histograma, es decir, a la forma en que se distribuyen en él los valores RGB. Cambiar la gamma del perfil con que trabajamos, mientras el programa de visualización o edición sea consciente de dicho cambio, no altera absolutamente en nada el aspecto de la imagen. Así la compensación gamma vista en la Fig. 5 no aclararía la imagen, tan solo redistribuye su histograma.


COMPENSACIÓN GAMMA EN DCRAW

Una de las virtudes de DCRAW es que es un revelador que puede realizar un revelado lineal, es decir, generar una imagen de salida a la que no ha sido aplicada ninguna compensación gamma lo cual es muy útil para estudiar muchos aspectos del RAW y acometer procesados lineales imposibles o más complejos en gamma compensada.

Pero al mismo tiempo uno de los defectos de DCRAW es que solo admite dicha salida lineal, al menos en 16 bits, no permitiendo aplicar compensación gamma aunque en un momento dado así lo prefiramos **.

En la mayoría de ocasiones esto no representa ningún problema: la imagen generada por DCRAW se puede abrir en Photoshop con el perfil de color elegido y PS la reconocerá como lineal. Luego nosotros convertiremos al perfil habitual de modo que PS deslinealice la imagen aplicando la compensación gamma pertinente.

Sin embargo una codificación lineal a 16 bits implica una menor riqueza tonal en las sombras y un histograma en definitiva menos robusto en las mismas con menos niveles tonales. La gamma es un seguro ante problemas de cuantización. Entonces por qué no permitir una opción en DCRAW que aplique la gamma antes de redondear los niveles a enteros de 16 bits si el usuario lo solicita?

Coffin y yo no coincidimos. Él insiste en que ésa no sería una forma legítima de obtener mayor riqueza tonal y la compara con el suavizado del histograma cuando desenfocamos una imagen o le añadimos ruido.

Pero no estoy del todo de acuerdo: si no redondeamos los niveles de la imagen a valores enteros hasta el final, aplicar la gamma antes de dicho redondeo nos da mayor riqueza tonal real y también mayor precisión real en los niveles codificados. En el peor de los casos no ganaremos nada pero tampoco perderemos nada.


DCRAW CON OPCIÓN DE GAMMA

Manuel Llorens ha introducido la opción de gamma en el código original de DCRAW, dotando al revelador de una nueva opción de compensación gamma -g, que seguida de la gamma a aplicar realizará los cálculos oportunos para compensar en gamma la imagen revelada antes de realizar el redondeo final a enteros de 16 bits.

Así para los perfiles de color más típicos usaremos las opciones:

   PERFIL DE COLOR       COMANDO DCRAW   
sRGB    -o 1 -g 0 ó -o 1 -g srgb   
Adobe RGB -o 2 -g 2.2
ProPhoto RGB -o 4 -g 1.8
Fig. 7 Comando -g en los perfiles de color más habituales.


La imagen TIFF resultante llevará incrustado el perfil correcto pero con gamma 1.0, por lo que lo más sencillo al abrirla en Photoshop será simplemente ignorar totalmente el perfil incrustado y asignar directamente el perfil en que la hemos creado de modo que la imagen se visualizará correctamente.

En el caso de elegir sRGB como perfil de salida, que como se ha comentado tiene una curva gamma un tanto especial que levanta menos los niveles bajos del histograma, una alternativa es revelar la imagen en sRGB pero con una gamma estándar mediante la sentencia -o 1 -g 2.2, y asignar el TIFF resultante al perfil de gamma exacta 2,2 de libre distribución que amablemente me ha enviado Hugo Rodríguez denominado H-RGB 2.2 Generic PC.

Este perfil es muy similar a sRGB salvo en la zona de sombras, de modo que estaremos trabajando en un espacio de la misma amplitud que sRGB pero con un histograma algo más fácil de manejar en las sombras, bastante útil por ejemplo en el caso de tratar con imágenes de alto rango dinámico donde es fácil que dichas sombras se nos empasten.


MEJORA DEL HISTOGRAMA

A efectos prácticos, y debido principalmente al ruido y a la cuantización en los diafragmas más bajos del rango dinámico del RAW, es muy probable que la aplicación de la gamma dentro del propio proceso de revelado no suponga una mejora palpable de la calidad de la imagen.

Sin embargo no nos cuesta nada aplicarla, y la mejora en el histograma es muy notoria. Mientras la compensación gamma aplicada a posteriori genera numerosos huecos en la parte baja del histograma, con la opción introducida se obtiene un histograma plenamente lleno de niveles y sin ningún tipo de altibajos debido a agreación en los mismos:


Fig. 8 Histograma revelado lineal y compensación gamma en PS (dcraw -o 2).




Fig. 9 Histograma revelado DCRAW con compensación gamma (dcraw -o 2 -g 2.2).



DESCARGA DE DCRAW CON OPCIÓN DE GAMMA

La versión modificada de DCRAW se puede descargar de este enlace. Bastará guardar la librería adjunta para hacerlo funcionar como cualquier otra versión de DCRAW.

~~~

** NOTA: a partir de la versión v8.93, Coffin ha introducido la opción de aplicar la compensación gamma en el código nativo de DCRAW incluso con salida a 16 bits. Tal cosa se hace mediante el comando -g que permite especificar tanto la gamma como la pendiente máxima de la curva. Para más información acudir al tutorial de DCRAW.

Hay que decir no obstante que la implementación de la gamma de Coffin se hace mediante una LUT (tabla lookup) con números enteros, lo que no produce un histograma completamente suave sino con fuerte presencia de huecos en forma de peine. A efectos prácticos de la calidad de la imagen este hecho tiene una incidencia nula.


~~~


Si este contenido te ha resultado útil, considera realizar una contribución para asegurar la continuidad de esta web. Mantenerla supone un importante esfuerzo, así como un espacio y ancho de banda considerables en el servidor. Es una operación sencilla y totalmente segura.



gluijk@hotmail.com
  ARTÍCULOS

HOME