tubería de color de darktable
La mayoría de las aplicaciones de procesamiento de imágenes provienen de la década de 1990 y/o heredan un flujo de trabajo de la década de 1990. Estas aplicaciones procesaban imágenes codificadas con números enteros sin signo de 8 bits porque era más eficiente en memoria y computacionalmente. Sin embargo, debido al uso de un formato entero (que implica errores de redondeo) tuvieron que aplicar un “gamma” (esencialmente una función de transferencia aplicando una potencia 1 / 2.2 o 1 / 2.4 para codificar los valores RGB) y aumentar la profundidad de bits en condiciones de poca luz para reducir los errores de redondeo (los seres humanos son muy sensibles a los detalles de poca luz). Los formatos de números enteros de 8 bits también están técnicamente limitados al rango 0-255. Todo lo que esté fuera de este rango se desborda y se recorta al límite más cercano.
Estos flujos de trabajo, que utilizan representaciones RGB delimitadas y posiblemente transformaciones no lineales para codificar señales RGB, se denominan “referidos a pantalla”. Se basan en la suposición de que la imagen se preparó para su visualización en una etapa temprana de la línea de procesamiento e incorporan suposiciones codificadas de forma rígida sobre los valores RGB de negro, gris medio y blanco. La mayoría de los algoritmos de procesamiento de imágenes utilizados en estos flujos de trabajo se han ajustado en torno a estos supuestos. Por ejemplo, el modo de fusión overlay espera un gris medio codificado al 50% (o 128 en la codificación entera).
Desafortunadamente, la escala no lineal, que es obligatoria para que la codificación de números enteros funcione, rompe las relaciones naturales entre los valores de los píxeles. El tono y la saturación cambian de manera impredecible, y las relaciones de valor entre los píxeles vecinos se dilatan o comprimen de modo que los degradados también se alteran de forma impredecible.
Por lo tanto, las tuberías referidas a la pantalla rompen los filtros ópticos (desdibujamiento o desvanecimiento de la lente), composición alfa (que se basa en definiciones ópticas y geométricas de oclusión), colores y gradientes (relaciones locales entre crominancia y luminancia de píxeles). Tampoco escalan bien a imágenes HDR, lo que llevó al desarrollo de muchos métodos de mapeo de tonos locales y globales cuestionables y el infame “aspecto HDR” de la década de 2010.
Las computadoras modernas no están atadas a las mismas limitaciones computacionales que las de la década de 1990 y pueden trabajar en píxeles cuyos valores son completamente ilimitados (desde 0 hasta + infinito) y codificados como números reales (usando formatos de punto flotante). Estas posibilidades permiten lo que llamamos un flujo de trabajo “referido a la escena”, en el que los píxeles pueden conservar sus relaciones radiométricas originales a lo largo de casi toda la tubería de procesamiento. En el flujo de trabajo referido a escenas, los píxeles se preparan para mostrarse solo en la última etapa de la canalización, en la transformación de visualización. Esto significa que los valores RGB de los píxeles se mantienen proporcionales a la intensidad de la emisión de luz registrada por la cámara en la escena, lo que permite una composición alfa precisa y emulaciones de filtros ópticos, al tiempo que se escalan a cualquier rango dinámico a través del mismo algoritmo (SDR como así como HDR).
Sin embargo, las tuberías referidas a la escena pierden los convenientes valores fijos de blanco, gris medio y negro que caracterizaban las tuberías referidas a la pantalla, y establecer estos valores, de acuerdo con la escena y las condiciones de filmación, ahora es responsabilidad del usuario. Esto requiere una interfaz de usuario más compleja.
Además, debido a que se supone que los valores referidos a la escena son físicamente significativos, los píxeles no pueden tener intensidad cero. Esto significaría que no tienen luz en absoluto, y la existencia de luz cero rompe muchos algoritmos físicamente precisos. De hecho, el blanco y el negro no significan nada con respecto a la escena original, que es solo una colección de luminancias con diferentes intensidades. El flujo de trabajo referido a la escena simplemente tiene como objetivo reasignar algunas luminancias de escena arbitrarias a lo que aparecerá en blanco o negro en el medio de salida.
Las versiones de darktable anteriores a 2.6 tenían una canalización de referencia de visualización no lineal, asumiendo que una transformación no lineal tuvo lugar al principio de la canalización y que el gris medio se codificó a partir de entonces como 50%. Sin embargo, no todos los módulos y filtros recortaron valores de píxeles por encima del 100%, dejando abierta la posibilidad de recuperar esos valores más adelante en la tubería.
La transformación de vista del módulo película, introducida en darktable 2.6, fue el primer paso hacia una canalización referida a la escena y pospuso la preparación de visualización obligatoria, no lineal, hasta el final de la canalización, junto con la capacidad de configurar negro, gris personalizado y valores de blanco. Luego, el módulo balance de color introdujo una forma de lidiar con una definición variable de gris medio.
A partir de darktable 3.2, los usuarios podían elegir entre dos flujos de trabajo que definían configuraciones predeterminadas consistentes, módulos y orden de canalización tanto para el procesamiento referido a pantalla como el referido a escena.
En darktable 3.4, se introdujo una opción completa de enmascaramiento y combinación referida a la escena, lo que permite definir máscaras para valores de píxeles superiores al 100% y usar solo operadores de combinación ilimitados.
Cambiar a referido a escena es un salto cognitivo para la mayoría de los usuarios experimentados, que están acostumbrados a pensar en formas referidas a la visualización. En un flujo de trabajo referido a la pantalla, se acostumbra anclar el valor de blanco y dejar que los ajustes de tono giren alrededor de ese punto, tratando de maximizar el brillo y evitar el recorte. En un flujo de trabajo referido a la escena, los valores de blanco y negro son fluidos y se adaptan al medio de salida. Se recomienda que los usuarios anclen el gris medio (que se conservará como está para cualquier medio de salida) y permitan que la vista transformada (película) dilate o contraiga el rango dinámico alrededor de ese punto. Debido a que el blanco HDR de 10 bits es 4 veces más brillante que el blanco SDR de 8 bits, cualquier definición rígida de “blanco” se vuelve irrelevante. Pero el anclaje para gris medio es en realidad más conveniente, ya que mantiene el brillo promedio de la imagen sin cambios a través de la transformación de vista.
Algunos módulos (niveles, niveles rgb, curva de tono, curva rgb) son intrínsecamente incompatibles con un flujo de trabajo referido a la escena, porque su interfaz gráfica sugiere implícitamente valores RGB que están delimitados dentro del rango de 0-100%. Si bien las operaciones de píxeles que realizan se pueden usar en flujos de trabajo referidos a escena o referidos a pantalla porque no están limitados internamente, su interfaz de control no permite que los píxeles se seleccionen fuera del rango de 0-100%.
De manera similar, los modos de fusión como superposición, luz lineal, luz suave, luz intensa, oscurecer, aclarar, etc., tienen umbrales codificados que internamente esperan codificación no lineal referida a la pantalla.
En darktable 3.4 y superior, al pasar el cursor sobre el encabezado de un módulo, se muestra una información sobre herramientas que detalla los espacios de color, los rangos y las codificaciones que el módulo espera, usa y produce. Aquí están las definiciones de los términos utilizados:
- lineal
- Los valores de píxeles son proporcionales a la emisión radiométrica de la escena, de manera que permite una emulación precisa de los filtros físicos.
- no lineal
- Los valores de píxeles se vuelven a escalar de manera que a las luces bajas se les da un rango de codificación más grande, generalmente para reasignar el gris medio de referencia del 18,45% a un valor entre el 46 y el 50%.
- referido a la pantalla
- Se espera que los valores de píxeles se encuentren entre 0 y 100% del rango de visualización, donde se entiende que 100% es la luminancia de una superficie blanca reflectante al 20% (el parche blanco de un Color Checker) y 0% se entiende que es el densidad máxima del medio de salida (tinta negra saturada o retroiluminación mínima del panel LED).
- referido a la escena
- Se espera que los valores de píxeles sean superiores a cero hasta + infinito. El significado de los valores de píxeles específicos debe ser definido por el usuario en tiempo de ejecución. Los valores referidos a la escena no implican automáticamente una codificación lineal, escalada radiométricamente.