Renderizar una imagen RAW



Figura: Foto 1: Foto de la Nikon D610 con lente AF-S 24-120 mm f / 4 a 24 mm f / 8 ISO100



¿Cuáles son los pasos básicos para renderizar una imagen RAW a bajo nivel? En este artículo, describiré lo que sucede bajo el capó de los convertidores de cámaras digitales, donde los datos sin procesar se convierten en una imagen RAW visible, a veces llamada renderización. Para demostrar la transformación de la información de la imagen en cada paso, utilizaré la foto que se muestra al principio del artículo, tomada con una Nikon D610 con una lente AF-S 24-120 mm f / 4 y configuraciones de 24 mm f / 8 ISO100.



La renderización es conversión y edición RAW



El renderizado se puede dividir en dos procesos principales: conversión RAW y edición. La conversión RAW es necesaria para convertir los datos de la imagen sin procesar en un formato estándar que la edición de imágenes, los programas de visualización y los dispositivos puedan comprender. Normalmente, esto se hace utilizando un espacio de color colorimétrico RGB como Adobe o sRGB.



Los editores toman información sobre una imagen en un espacio de color estándar y le aplican ajustes para hacer que la imagen sea más "adecuada" o "agradable" para el fotógrafo.



Un ejemplo de un conversor RAW limpio es dcraw de David Coffin. Un ejemplo de un editor limpio es Photoshop de Adobe. La mayoría de los convertidores RAW combinan las funciones de conversión RAW con las funciones del editor (por ejemplo, Capture NX, LR, C1).



7 pasos para la conversión RAW básica



El límite de dónde termina la conversión y comienza la edición es bastante borroso, pero dependiendo de cómo los separe, solo hay 7 pasos en el proceso principal de conversión de un archivo RAW a un espacio de color colorimétrico estándar, por ejemplo, sRGB. Los pasos no tienen que ir en ese orden, pero la siguiente secuencia es bastante lógica.



  1. Cargue datos lineales del archivo RAW y reste los niveles de negro.
  2. Equilibrar el blanco.
  3. Brillo lineal correcto.
  4. Recortar datos de imagen.
  5. Restaurar la imagen original del mosaico ( debayering ).
  6. Aplicar transformaciones y correcciones de color.
  7. Aplicar gamma.


En la conversión RAW básica, el proceso permanece lineal hasta el final. Idealmente, la curva gamma en el último paso es corregida por el dispositivo que muestra la imagen, por lo que el sistema de procesamiento de imágenes desde el principio hasta el final, desde el momento en que la luz llega al sensor hasta el momento en que la luz llega al ojo, es aproximadamente lineal. Si necesita renderizar "honestamente" una imagen tal como llegó al sensor, entonces esto es todo lo que necesita de un convertidor RAW.



+ Mapeo de tonos: se adapta al rango dinámico del dispositivo de salida



Sin embargo, como veremos, la conversión básica de archivos RAW en cámaras digitales existentes casi nunca da un resultado satisfactorio, ya que la mayoría de los dispositivos de salida (papel fotográfico, monitores) tienen relaciones de contraste inferiores a las que pueden capturar las buenas cámaras digitales. Por lo tanto, es prácticamente necesario realizar una corrección de tono para llevar el amplio rango dinámico de la cámara al estrecho rango dinámico del dispositivo. Puede ser una simple curva de contraste, o un mapeo de tonos más complejo junto con ajustes locales y globales para sombras, luces, claridad, etc. (controles deslizantes estándar en editores comerciales y software de conversión). Por lo general, esto se hace al editar un render, pero si su objetivo es un color "preciso",Idealmente, el mapeo de tonos debería ser parte del sexto paso de la gradación de color durante la conversión RAW (ver.un gran sitio de Alex Torgera que describe los perfiles de color).



Después de siete pasos básicos de conversión, puede pasar al editor para corregir objetivamente las imperfecciones identificadas en un fotograma en particular y en una salida de imagen particular al dispositivo de salida, y también hacer que la imagen sea subjetivamente más agradable para el ojo del artista. Por ejemplo, corrija la distorsión de la lente y la aberración cromática lateral; aplicar reducción de ruido; aplique un filtro de afilado. Puede ser mejor realizar algunas de estas funciones en un espacio lineal antes de ciertos pasos de conversión RAW, pero generalmente son opcionales y se pueden hacer de la misma manera en el editor después de renderizar en el espacio gamma.



En este artículo, nos centraremos en la parte básica de renderizado de la conversión RAW, dejando el mapeo de tonos y la edición para otro momento.



1. Cargue datos lineales del archivo RAW y reste los niveles de negro



El primer paso para convertir RAW es simplemente cargar datos del archivo RAW en la memoria. Dado que los formatos RAW difieren de una cámara a otra, la mayoría de los convertidores utilizan variaciones de los programas LibRaw / dcraw de código abierto. Los siguientes comandos para LibRaw o dcraw volverán a empaquetar el RAW en un TIF lineal de 16 bits que se puede leer mediante aplicaciones de procesamiento (Matlab, ImageJ, PS, etc.). No es necesario instalar el programa, solo necesita que el archivo ejecutable esté en la variable PATH o en el mismo directorio.



unprocessed_raw -T  yourRawFile


o



dcraw -d -4 -T  yourRawFile


Si su sensor de imagen está bien diseñado y dentro de las especificaciones, los datos registrados estarán en una relación lineal con la intensidad de la luz, sin embargo, generalmente se almacenan con sesgos dependientes de la cámara y el canal. TENNESSE. los niveles de negro tienen magnitudes de varios cientos o miles de DN, y deben restarse de los datos sin procesar originales para que la intensidad de píxeles cero coincida con la luz cero. dcraw con la línea de comando anterior hará esto por usted (aunque con algunos valores promedio). Cuando use unprocessed_raw, necesita conocer el nivel de negro de su cámara y restarlo en consecuencia (o puede usar el parámetro –B, que, sin embargo, no parece ser compatible con la versión actual de LibRaw).



Resulta que Nikon resta los niveles de negro de cada canal antes de escribir en los archivos D610, por lo que para nuestro marco de referencia, cualquiera de los dos comandos funcionará. Lo cargué con el comando dcraw -d -4 -T, que también escala los datos a 16 bits (consulte el paso 3 para corregir el brillo a continuación).



Los datos cargados en esta etapa son simplemente la intensidad de la escala de grises de la imagen. Sin embargo, tienen una correspondencia con la posición en la matriz asociada con un filtro de color específico bajo el cual se encuentra. En las matrices de Bayer, hay filas de colores rojo y verde alternos, y verde y azul, como se muestra en la imagen. El orden exacto está determinado por el primer cuarteto del área activa de la matriz; en este caso es RGGB, pero también son posibles otras tres opciones.





Figura 2: Matriz de filtros de color de Bayer: diseño RGGB.



Bayer Matrix para la D610 tiene un diseño RGGB. Los datos brutos en esta etapa se ven como una imagen en blanco y negro subexpuesta:





Fig. 3: Paso 1: Imagen lineal sin procesar con la resta de los niveles de negro. Debería verse tan brillante como la siguiente foto. 4. Si no es así, su navegador no maneja los colores correctamente (estoy usando Chrome y obviamente no los maneja correctamente).



Si la foto es negra, entonces su navegador no sabe cómo mostrar datos de línea correctamente etiquetados. Curiosamente, el editor de WordPress muestra la imagen correctamente, pero después de publicarla en Chrome, no se ve bien (nota: esto finalmente se solucionó en 2019) [artículo de 2016 / aprox. transl.]. Así es como debe verse esta imagen:





Fig. 4: misma foto, pero como escala de grises CFA



Así es como se ven los datos CFA lineales directamente en el archivo. Se ve un poco oscuro, ya que cambié la exposición a la derecha para no cortar los aspectos más destacados de la cascada; lo arreglaremos más adelante, en el paso de ajuste de brillo lineal.



La imagen parece un blanco y negro en toda regla debido a su pequeño tamaño, pero en realidad no lo es: incluso en áreas igualmente iluminadas, la pixelación es visible. Esto se debe al hecho de que los filtros de color vecinos, que tienen una sensibilidad espectral diferente, recopilan información diferente sobre los colores. Esto se ve fácilmente cuando se amplía la imagen. Así es como se ve el área de la imagen justo debajo de la tarjeta WhiBal con un aumento de hasta el 600%:





Figura 5: La pixelación CFA es visible en una tarjeta uniformemente gris (arriba) y en hojas de colores.



2. Datos de balance de blancos



Debido a la distribución espectral de la energía de la fuente de luz (en este caso, el cielo está parcialmente cubierto por nubes, cuya luz penetra a través del follaje) y a la sensibilidad espectral de los filtros ubicados en la matriz, los píxeles de diferentes colores registran valores proporcionalmente mayores o menores incluso bajo la misma iluminación. Esto es especialmente evidente en las partes neutrales de la imagen, donde parecería que deberían aparecer los mismos valores medios en todos los planos de color. En este caso, en la tarjeta gris neutro, los píxeles rojos y azules registraron valores de 48,8% y 75,4% del valor verde, respectivamente, por lo que aparecen más oscuros.



Entonces, el siguiente paso es aplicar el balance de blancos a los datos CFA lineales multiplicando cada píxel rojo por 2.0493 (1 / 48.8%) y cada píxel azul por 1.3256 (1 / 75.4%). En términos de Adobe, obtenemos una imagen en blanco y negro que es neutral para la cámara. Entonces se garantiza, con la excepción del ruido, que todos los píxeles mostrarán los mismos valores lineales en las partes neutrales de la imagen.





Figura: 6: Después del balance de blancos, la pixelación de la tarjeta gris desaparece, pero sigue siendo visible en los objetos de color.



Vea cómo desapareció la pixelación en la parte superior de la imagen: se usó una tarjeta gris neutra para la calibración. Pero, por supuesto, la pixelación no ha desaparecido de los objetos de color: la información sobre los colores se almacena en la diferencia entre las intensidades de los tres canales.



3. Corrección de brillo lineal



La mayoría de las cámaras digitales modernas con lentes intercambiables proporcionan datos sin procesar en 12-14 bits lineales. La profundidad de bits estándar de los archivos (jpeg, TIFF, PNG) generalmente se establece como un multiplicador de 8, y 16 bits es la profundidad favorita de la mayoría de los editores de hoy. No podemos simplemente tomar datos de 14 bits con niveles de negro restados y almacenarlos en 16 bits; todo caerá en el 25% inferior del rango lineal y será demasiado oscuro. Idealmente, queremos recortar los datos después del balance de blancos y la resta de negro para ajustar los datos recortados en un archivo de 16 bits y escalarlos en consecuencia (consulte el paso 4). Una forma sencilla de convertir los datos de forma aproximada es simplemente multiplicar los datos de 14 bits por 4, escalarlos a 16 bits. Esto es exactamente lo que se hizo en el paso 1 después de restar el negro (dcraw -d -4 -T lo hace automáticamente,y con unprocessed_raw tendrá que hacerlo manualmente).



Hablando de escala, es posible que también queramos ajustar nuestro brillo. Este paso es subjetivo y probablemente no valga la pena hacerlo si lo que busca es una representación "honesta" de una imagen, como la que salió en el sensor y se registró en un archivo RAW. Sin embargo, nadie logra perfeccionar la exposición, y diferentes cámaras a menudo miden el gris promedio en diferentes porcentajes de los datos sin procesar, por lo que es útil poder ajustar el brillo. Por lo tanto, muchos convertidores se refieren a los controles deslizantes relativos como "compensación de exposición" o "compensación de exposición". Adobe tiene una etiqueta DNG asociada que normaliza el medidor de exposición para diferentes cámaras, BaselineExposure. Para el D610, son 0,35 pasos.



Nuestra imagen es un poco oscura para mi gusto, y la tarjeta WhiBal, que debería ser 50% reflectante, es solo 17% a escala completa. La corrección de luminancia lineal es la multiplicación de cada píxel de los datos por una constante. Si consideramos que en esta imagen no necesitamos conservar las áreas más brillantes de la imagen con un brillo superior al 100% de luz blanca dispersa, entonces esta constante en este ejemplo será 50/17, aproximadamente 1,5 pasos de corrección. En este caso, decidí aplicar una corrección subjetivo-conservadora de +1,1 pasos de brillo lineal, multiplicando todos los datos del archivo por 2,14, y se obtuvo lo siguiente:





Fig. 7: imagen CFA después de la resta de niveles de negro, balance de blancos, recorte, corrección de brillo lineal en 1,1 pasos



Mejor. Pero como puede ver, el precio a pagar por la corrección de brillo lineal es iluminar partes de la cascada. Aquí es donde los controles deslizantes avanzados de recuperación de sombras y luces no lineales que se encuentran en la mayoría de los convertidores RAW vienen al rescate.



4.Asegúrese de que los datos del balance de blancos se recorten de manera uniforme



Si el canal verde se recortó inicialmente en los datos sin procesar, es posible que deba recortar los otros dos a escala completa después de aplicar multiplicadores de balance de blancos para corregir la no linealidad resultante. La escala completa se muestra en los histogramas siguientes como un valor normalizado de 1.0. Puede ver que el canal verde de los datos brutos originales se recortó (debido al desorden de valores) y los demás no.





Figura: 8: De arriba a abajo: Histogramas R, G, B después de aplicar multiplicadores de balance de blancos a los datos sin procesar, antes de recortar. Asegúrese de recortar los tres en el canal inferior para que no aparezcan colores falsos en las áreas brillantes. Los datos de la imagen se trazan en 0-1, donde 1 es la escala completa.



Es necesario recortar a escala completa porque en áreas donde no hay datos de los tres canales, es probable que el color resultante sea incorrecto. En la imagen final, esto puede manifestarse como, digamos, un tinte rosado en áreas cercanas al brillo máximo. Esto es muy molesto, por ejemplo, en imágenes de montañas cubiertas de nieve. Por tanto, la poda resuelve este problema sin concesiones.





Figura: 9: Izquierda: imagen correctamente recortada después de aplicar el balance de blancos. Derecha: la imagen no se recorta. La flecha amarilla muestra un área cercana al brillo máximo, donde la información incompleta de los canales de color da un tinte rosado.



En lugar de recortar, se podrían hacer ciertas suposiciones sobre los colores que faltan y complementar los datos relativos. En los convertidores RAW avanzados, esto se realiza mediante algoritmos o controles deslizantes con nombres como "reconstrucción de resaltado". Hay muchas maneras de hacer esto. Por ejemplo, si solo falta un canal, como en el caso del verde de 1.0 a 1.2 en la Fig. 8, es más fácil asumir que las altas luces están en un área de blanco neutro y los datos de la imagen sin procesar tienen el balance de blancos correcto. Entonces, en cualquier cuarteto donde se cortará el color verde y los otros dos no, entonces el valor del verde será igual al valor promedio de los otros dos canales. Para esta toma, esta estrategia no podría reconstruir más de 1/4 de paso en áreas brillantes (log 2(1,2)). Entonces sería necesario comprimir los aspectos más destacados y / o volver a normalizar la nueva escala completa a 1.0.



5. Desbayerización de datos CFA



Hasta ahora, la imagen CFA estaba ubicada en el mismo plano en blanco y negro, lo que hacía que las áreas coloreadas aparecieran pixeladas, como se ve en la Fig. 6. Es hora de discutir, separando los píxeles rojos, verdes y azules que se muestran en la fig. 2, en planos de color separados de tamaño completo mediante la aproximación de los datos faltantes (en la figura siguiente se muestran como cuadrados blancos).





Figura: 10: Desbayering: completar los datos faltantes en cada plano de color utilizando información de los tres planos.



En este paso se puede utilizar cualquiera de los numerosos algoritmos avanzados de depuración. La mayoría de ellos funcionan muy bien, pero algunos son mejores que otros, dependiendo de la situación. Algunos convertidores RAW como RawTherapee de código abierto y dcraw le piden al usuario que seleccione un algoritmo de una lista. La mayoría de los convertidores no ofrecen esta opción y utilizan el mismo algoritmo de debate. ¿Sabes qué algoritmo de debate utiliza tu convertidor RAW favorito?



En esta prueba, decidí hacer trampa y simplemente comprimir cada cuarteto RGGB en un solo píxel RGB, dejando los valores R y B para cada cuarteto como estaban en los datos sin procesar y promediando G sobre dos (esto es equivalente al modo dcraw –h). Es un algoritmo de debate del vecino más cercano 2 × 2. Proporciona una imagen más cómoda de usar que tiene la mitad del tamaño (en dimensiones lineales o cuatro veces en área).





Figura: 11: Imagen RGB sin procesar después de la resta de negro, balance de blancos, recorte, corrección de brillo lineal y degradación del vecino más cercano 2x2 (equivalente a dcraw –h).



En la Fig. 11, puede ver que nuestros datos sin procesar ahora son RGB con tres planos de color completamente llenos. Los colores, que fueron registrados por la cámara, fueron mostrados por el navegador y el monitor. Se ven aburridos, pero no muy diferentes del original. Las sombras no se almacenan en el espacio RGB estándar, por lo que el software y el hardware no siempre saben qué hacer con ellas. El siguiente paso es convertir estos colores en un espacio de color estándar colorimétrico común.



6. Conversión y corrección de color



Este es uno de los pasos menos intuitivos pero más importantes necesarios para obtener una imagen terminada con colores agradables. Todos los fabricantes guardan celosamente los secretos de sus filtros de color en el CFA de sus matrices, pero con el equipo adecuado, no es demasiado difícil derivar funciones de sensibilidad espectral. Puede hacerse una idea aproximada de las funciones de su cámara incluso con un espectrómetro barato .



Armado con todo esto, y haciendo muchas suposiciones sobre fuentes de luz típicas, escenas y métodos de visualización, se puede generar una matriz lineal de compromiso que convierte el color de una imagen CFA (como se muestra en la Figura 11) a un color estándar, que es podrá reconocer programas comunes como editores o navegadores, así como dispositivos como pantallas e impresoras.



Afortunadamente para nosotros, varios laboratorios excelentes se dedican a medir y calcular estas matrices, y luego ponen los cálculos en el dominio público. Por ejemplo, DXOmark.com produce matrices para convertir datos fotográficos sin procesar después del balance de blancos a sRGB para dos fuentes para cualquier cámara en su base de datos. Por ejemplo, aquí está su sensor para Nikon D610 yfuente de luz estándar D50:





Fig 12: Matriz de color del laboratorio DXO para la fuente de luz D50: desde datos balanceados de blancos y desbayerizados hasta sRGB.



Cuál de las matrices de compromiso será la mejor depende de la distribución espectral de la energía de la fuente de luz en el momento de tomar el fotograma, por lo que la matriz real suele interpolarse en base a un par de referencias. En el mundo de Adobe actual, estas son las fuentes de luz estándar A y D65, responsables de limitar el rango de iluminación típica en la fotografía cotidiana, desde el tungsteno hasta la luz del día y la fotografía de interiores. Los datos convertidos luego se adaptan a una fuente de luz que coincide con el espacio de color final, para sRGB, por ejemplo, D65. El resultado es una especie de matriz, como la que se muestra en la Fig. 12. Luego, solo necesita multiplicarlo por los valores RGB de cada píxel degradado después del paso 5.



En la especificaciónAdobe recomienda un proceso más flexible para su DNG Converter. En lugar de una transición directa de la cámara CFA al espacio de color colorimétrico, Adobe primero convierte los datos al espacio de color de Profile Connection (XYZ D50), multiplicando los datos después del balance de blancos y la descomposición por una matriz directa interpolada, y luego llega al espacio de color final como sRGB. A veces, Adobe también aplica una corrección de color no lineal adicional utilizando perfiles especiales en XYZ (en lenguaje DNG, estas son correcciones HSV a través de ProPhoto RGB, HueSatMap y LookTable).



Las matrices directas de la cámara que tomó la fotografía se registran en cada archivo DNG, alaba Adobe. He descargado las matrices de D610 a partir de ahí, y matrices XYZD50 -> sRGBD65 a partir de Bruce Lindblum sitio , y consiguióImagen final:





Fig. 13: Imagen convertida "bastante". Datos brutos, sustracción de los niveles de negro, balance de blancos realizado, recorte, corrección de brillo, depuración 2x2, corrección de color y conversión a sRGB.



Ahora los colores son los que los programas y dispositivos esperan encontrar en el espacio de color sRGB. En caso de que se lo pregunte, esta imagen es casi idéntica a la del convertidor Capture NX-D de perfil plano de Nikon. Sin embargo, no se ve muy nítido debido al bajo contraste de nuestros monitores (ver Mapeo de tonos).



7. Aplicación de gamma



El último paso depende del espacio de color seleccionado. La gama para el espacio sRGB es de aproximadamente 2,2 . Solo menciono esto específicamente para mostrar que el proceso de renderizado se vuelve no lineal en este punto. A partir de este momento, la imagen se reduce a la gama colorimétrica del espacio de color y puede cargarse en su editor favorito o mostrarse en la pantalla. En teoría, todos los pasos anteriores eran lineales, es decir, fácilmente reversibles.



+ Pantalla de tono



En 2016, casi siempre se requiere corrección de tono para elegir cómo exprimir el alto rango dinámico de una cámara en un rango pequeño del dispositivo de imágenes. Por ejemplo, dependiendo de su resistencia al ruido, el rango dinámico de mi D610 tiene 12 pasos, mientras que mi monitor bastante bueno tiene una relación de contraste de 500: 1, o alrededor de 9 pasos. Esto significa que los tres pasos inferiores de la cámara no serán visibles en el monitor debido a su luz de fondo.



La curva RGB redistribuirá subjetivamente los tonos en todo el rango, de modo que algunas sombras sean más visibles a expensas de algunas de las áreas más brillantes (de ahí que esta curva se denomine "curva de tono"). En el momento de escribir este artículo, Adobe suele aplicar dicha curva en ACR / LR en el momento del renderizado, antes de mostrar la imagen por primera vez:





Figura: 14: Curva de tono aplicada por ACR / LR cerca del final del proceso de renderizado en la Versión de proceso 3 (2012-2016). El eje horizontal no es lineal.



En este caso, no lo usé. Acabo de aplicar una curva para aumentar el contraste y agregar algo de nitidez en Photoshop CS5 a la fig. 13 para obtener la imagen final:





Fig. 15: Imagen sRGB final. Inicialmente datos sin procesar, niveles de negro restados, balance de blancos, recorte, ajuste de brillo, depuración, ajuste de color, curva de tono aplicada



Por supuesto, aplicar una curva de contraste en una etapa posterior cambia la cromaticidad y la saturación de los colores, pero esto es exactamente lo que sucede cuando aplica estos ajustes al espacio gamma RGB después de renderizar la imagen. Históricamente, así es como sucedía todo en las cámaras, y así es como sucede todo en los convertidores RAW populares: este es el procedimiento, y nos acostumbramos a él a lo largo de los años. Una alternativa para lograr la "precisión" de la reproducción del color será utilizar el perfil de color del sitio web de Torgera y ya no tocar el tono.



Resumamos



Por lo tanto, para una conversión RAW básica con ajuste lineal de brillo y color, necesita:



  1. Cargue datos lineales del archivo RAW y reste los niveles de negro.
  2. Equilibrar el blanco.
  3. Brillo lineal correcto.
  4. Recortar datos de imagen.
  5. Desbayerizar.
  6. Aplicar transformaciones y correcciones de color.
  7. Aplicar gamma.


Y eso es todo: se ha arrancado el velo del secreto de la conversión de datos sin procesar.



Los scripts de Matlab para obtener las imágenes que se dan en este artículo se pueden descargar desde el enlace . Los 7 pasos básicos están marcados en amarillo:



s = raw2RGB(‘DSC_4022’ , ‘ROI’ , 1.1)



Después de usar el script, guarde el archivo en formato TIFF, cárguelo en el editor de color y aplique el espacio de color elegido para ver los colores correctos.






All Articles