Mostrando resultados del 1 al 3 de 3

Tema: Revelando un archivo raw con una red neuronal/lut (iteración fallida)

  1. #1
    Fecha de Ingreso
    nov 2006
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    6.409

    Predeterminado Revelando un archivo raw con una red neuronal/lut (iteración fallida)

    Los datos crudos (RAW) que captura un sensor de imagen están muy lejos de la fotografía (JPEG) que te entrega la cámara. Para llegar a esta imagen la cámara en sus tripas ha hecho:

    ◼ Un balance de blancos para adecuar los datos capturados al color de la luz ambiente
    ◼ Una interpolación de color, ya que en cada píxel el sensor solo captura uno de los 3 colores RGB y los otros 2 deben estimarse
    ◼ Una conversión a un espacio de color de salida para que los colores puedan visualizarse de forma realista en pantallas normalizadas
    ◼ Un procesado de imagen (brillo, contraste, saturación,...) para que el resultado sea atractivo

    Como todo lo anterior (salvo la interpolación) no es más que una transformación de valores RGB de entrada a unos valores RGB de salida, he hecho el ejercicio de modelar todos los pasos con una red neuronal que realice la transformación de los datos RAW a la imagen JPEG final. Esta red neuronal se convertirá en una LUT.

    Para el entrenamiento se ha usado una captura sobre una carta de color IT8 que contiene una buena cantidad de colores y luminosidades representativos, y para validar el resultado se ha aplicado la red neuronal sobre una imagen de test correspondiente a una escena real.

    http://guillermoluijk.com/misc/failedtest.jpg

    Esta primera iteración aunque prometedora ha sido fallida por un doble motivo:

    ◼ El caprichoso Python (o mejor dicho la librería usada) ha convertido a 8 bits las imágenes de entrada de 16 bits, redondeo que ha dado lugar a posterización en las sombras por falta de niveles tonales al aplicarse la gamma del espacio de color de salida (ProPhoto RGB en el ejercicio). La solución es buscar una librería que no haga ese estropicio.
    ◼ La carta IT8 de colores parece que resulta insuficiente para capacitar la red neuronal para convertir cualquier combinación de color y luminosidad de entrada, dando lugar a colores erróneos en las sombras profundas. La solución que quiero probar es usar como entrenamiento un archivo RAW sintético que contenga el máximo de combinaciones RGB de entrada posibles, de modo que la red "vea" en su entrenamiento cualquier color al que vaya a enfrentarse a posteriori.

    Pero esto para después de las vacaciones.

    Disclaimer: el ejercicio lo hago por practicar y aprender cosas, no tengo ni idea de si revelar RAWs con una LUT puede servir para algo. Se me ocurre que poder procesar del tirón una serie de archivos RAW podría acelerar bastante el proceso, p.ej. a la hora de revelar vídeo capturado en RAW.

    Salu2!

  2. #2
    Fecha de Ingreso
    ene 2007
    Ubicación
    Barcelona
    Mensajes
    2.793

    Predeterminado

    ¿Qué piensas hacer con los procesados "locales" (HDR o similares, nitidez, viñeteo, geometría...) que pueda haber hecho la cámara? Con este tipo de transformaciones, los mismos valores RGB del RAW se transforman en valores distintos en el JPEG, dependiendo de la posición o del contexto; entonces, ¿no es como si alimentaras la red neuronal con información contradictoria?

  3. #3
    Fecha de Ingreso
    nov 2006
    Ubicación
    Madrid (a ratos Alicante)
    Mensajes
    6.409

    Predeterminado

    Por desgracia las cámaras no hacen procesados HDR sobre el RAW ni correcciones de viñeteo, así que estos efectos no afectan. Los ajustes de luces y sombras los dejaré a 0. La red convierte ternas RGB y en termas RGB, así que no es capaz de emular ningún procesado espacial.

    Salu2!

Marcadores

Normas de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •