Página 1 de 2 12 ÚltimoÚltimo
Mostrando resultados del 1 al 12 de 15

Tema: Ejercicio de perfilado de cámara con red neuronal y carta IT8

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

    Predeterminado Ejercicio de perfilado de cámara con red neuronal y carta IT8



    Tras un ejercicio previo en el que usaba con éxito una red neuronal sencilla para emular un procesado de imagen:

    Ingeniería inversa de procesado de imagen con redes neuronales

    Estoy tratando de extender el ejercicio al perfilado de una cámara. Se trata de ver si entrenando una red neuronal con las capturas hechas sobre parches de una carta IT8 normalizada, se puede hacer un perfilado con un modelo (la red neuronal) más simple que los perfiles ICC basados en LUTs:
    • Hugo Rodríguez ha tenido la amabilidad de enviarme una captura RAW hecha en condiciones óptimas de su carta IT8, junto a los valores de color medidos sobre ella (espectrofotómetro) que deberían obtenerse tras el perfilado, así que la usaré para perfilar su cámara y comparar con el rendimiento del perfil ICC que obtuvo él
    • He decidido que la red neuronal no genere valores Lab (idea inicial), sino valores XYZ, que son el paso intermedio ideal y fácilmente convertibles tanto a Lab (para medir desviaciones de color delta E), como a sRGB para tener una imagen visualizable en un perfil estándar
    • Las fórmulas para hacer todo lo anterior las he sacado de la Biblia de las matemáticas del color, y obtengo las mismas conversiones que las calculadoras de Lindbloom y EasyRGB, así que no usaré Photoshop para ninguna etapa del proceso de revelado + perfilado + conversión a espacio de salida


    El esquema de perfilado va a ser así:



    Ésta es la distribución de colores (medida con espectrofotómetro) de la carta IT8 de Hugo: en el gráfico a-b las componentes de color de los parches de color, y en la curva el valor L de los parches grises:








    SOBRE LA RED NEURONAL

    La red neuronal no es más que una aproximación de una función: para cada terna de valores RGB del RAW con WB que le suministres, ella generará los valores XYZ calibrados de salida. La idea es entrenar la red neuronal dándole como:
    • Valores de entrada: las medianas (he visto que la carta tiene algún arañazo, la mediana los eliminará mucho mejor que una media y ahorra tener que andar clonando imperefecciones) de los valores RAW en cada parche de tu RAW, una vez hecho el WB.
    • Valores de salida: los valores XYZ que me pasas en tu tabla y que son los ideales que deberían tenerse en cada parche.


    Eso hace que la red neuronal sepa convertir cualquier terna de valores RAW con WB a los valores XYZ esperables. Luego esos valores XYZ:
    • Se convierten a Lab para medir desviaciones delta E respecto a los valores ideales de salida
    • Se convierten a sRGB para tener una imagen visualizable estándar y poderla comparar con otras obtenidas por otros métodos

    Una vez la red ha sido entrenada sirve para obtener una imagen calibrada de cualquier archivo RAW (obtenido en similares condiciones de iluminación, usando el mismo WB, etc...)


    SOBRE LA VALIDACIÓN DE PERFILES

    Le he hecho a Hugo la siguiente reflexión, que me parece importante al menos para tomar conciencia de las limitaciones del perfilado de una cámara (o escáner) en base a una carta de colores: una carta tiene un conjunto de parches que es solo una muestra de los millones de colores posibles que la cámara va a fotografiar. Cómo se garantiza la precisión del perfil ICC al convertir un color que NO esté en la carta? por ejemplo un color intermedio entre dos parches. Entiendo que se asume que la interpolación que harán las LUTs del perfil será buena, pero en realidad no se comprueba, solo se asume, no?.

    En los algoritmos de inteligencia artificial (en este caso redes neuronales), es una práctica imprescindible analizar cómo de bueno es el algoritmo a la hora de predecir valores de salida para entradas que nunca ha visto. Imagina que un algoritmo que predice bajas de clientes, acierta al 100% al predecir la baja sobre esos mismos clientes con los que ha sido entrenado, pero falla estrepitosamente al predecir las posibles bajas de otros clientes que nunca ha "visto"; ese algoritmo le sirve de poco a la empresa. Esto se soluciona reservando una parte de tu set de datos, de manera que el algoritmo no los "vea" durante su entrenamiento, y luego se analiza cómo de bueno es el algoritmo prediciendo esos datos descartados en la fase de entrenamiento.

    Traducido a la IT8 sería equivalente a reservar ciertos parches (por ejemplo un 20% de total), y entrenar la red solo con los restantes 80%. La precisión de la red neuronal no se medirá como lo bien que genere el color de los parches con que ha sido entrenada (donde ya te digo que si se quiere puede dar el valor exacto con todos los decimales que se quiera), sino precisamente por lo buena que sea prediciendo el color en parches que no ha usado en su entrenamiento. Si veo que la precisión en los parches "no vistos" por la red es buena, quizá haga un entrenamiento final con todos los parches; obviamente cuantos más parches se tengan mejor. Por eso los pseudo "perfiles" generados con cartas Colorchecker, que solo tienen 24 parches, me parecen toda una temeridad (aunque pueda ser mejor que no hacer nada).

    Salu2!

  2. #2
    Fecha de Ingreso
    ago 2007
    Ubicación
    Madrid
    Mensajes
    10.829

    Predeterminado

    Gracias por compartir esta información, Guillermo. Queda muy lejos para mis conocimientos y capacidades, pero en cualquier caso admiro y agradezco tu trabajo.
    Canon EOS 5D y 350D | Canon EF 50 1.8 MkI, EF 70-300 IS USM | Tamron SP AF 90 (172E), SP AF 24-135 (190D) | CZ Flektogon 2.4/35 MC, Planar 1.7/50 T* | Porst MC 2.8/35, 2.8/135 | Fuji X100S


  3. #3
    Fecha de Ingreso
    ago 2014
    Ubicación
    Valencia
    Mensajes
    648

    Predeterminado

    Hola,
    Ayer me subscribí al Tema, para no perder el hilo, quería haber puesto algo pero no se me ocurría qué...
    El compañero u420067 lo ha resumido perfectamente en una frase, la que suscribo.
    Saludos.

  4. #4
    Fecha de Ingreso
    abr 2008
    Ubicación
    Bilbao
    Mensajes
    7.833

    Predeterminado

    Hola,admiro tu trabajo y asi mismo te lo agradezco salu2 de Felipe

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

    Predeterminado

    Gracias por vuestras palabras. Este finde no se ha avanzado mucho:

    - Práctica con librería para leer/guardar imágenes en 16 bits (imageio)
    - Extracción RAW lineal con balance de blancos sobre parches grises
    - Carta leída, recortada y calculada la mediana en cada parche



    El código aquí

    Salu2!

  6. #6
    Fecha de Ingreso
    oct 2008
    Mensajes
    653

    Predeterminado

    Gracias por compartir estos posts, me lo guardo para leer más detenidamente.

  7. #7
    Fecha de Ingreso
    jun 2005
    Mensajes
    1.035

    Predeterminado

    Yo cuando se habla de perfilar la camara siempre me quedo con la duda ¿que es lo que se perfila? porque quedamos que los sensores no "ven" colores, los colores son una recreacion de software en base a una matriz de colores presente delante de los fotositos, deduzco que lo que se calibra es el software asociado a ese sensor en los programas de edicion y el de la propia camara. Por otro lado, Adobe no admite perfiles icm, solo los suyos propios dcp, lo cual es una dificultad añadida.

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

    Predeterminado

    Cita Iniciado por josin Ver Mensaje
    los sensores no "ven" colores, los colores son una recreacion de software en base a una matriz de colores presente delante de los fotositos
    Bueno eso no es del todo así. Los sensores sí ven colores, o mejor dicho ven de forma diferente colores diferentes porque ése es precisamente el efecto discriminador que introducen esos filtros de color que lleva el sensor.

    Respecto a qué es el "perfilado", es solo un mapeo (correspondencia) entre el color capturado por el sensor y el color exacto que se esperaba. Por ejemplo si un parche rojo debería tener un tu imagen final unos valores RGB (230, 50, 15) y el sensor con la transformación matricial estándar te lo entrega como (220, 60, 20), el "perfilado" no es más que la corrección o transformación de ese (220, 60, 20) en el (230, 50, 15), o muy próximo. En la carta de color tienes colores normalizados. También tienes el color que tu sensor "ve" en cada parche. El perfilado es la transformación de lo que "ve" el sensor a lo que queremos tener (el color preciso).

    Salu2!
    Última edición por Guillermo Luijk; 20/05/19 a las 11:12:54

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

    Predeterminado

    Hoy he entrenado las primeras redes neuronales para convertir los valores RGB que resultan al extraer los datos del RAW (solo aplicando balance de blancos) al espacio XYZ. XYZ es el espacio intermedio que suele usarse como salto a cualquier espacio de salida. Desde él llegaré (esta vez con fórmulas exactas cerradas) a:
    • Lab para medir la precisión del color
    • sRGB/ProPhoto RGB para tener una imagen de salida visualizable


    Red neuronal 1: es una red sin etapas ocultas, es decir, es equivalente a la matriz 3x3 de conversión que usan los reveladores RAW básicos. Al comparar los valores XYZ teóricos con las predicciones de la red se tiene:



    Si la conversión fuera perfecta todas las pelotitas caerían perfectamente alineadas en la diagonal.

    Red neuronal 2: es una red densa de dos etapas y 200 neuronas por etapa. El resultado mejora mucho aunque esperaba que fuese perfecto.



    En el siguiente rato que saque haré la conversión a Lab para medir las desviaciones de color de cada red, y cómo comparan sus salidas.

    El código aquí.

    Salu2!

  10. #10
    Fecha de Ingreso
    oct 2007
    Ubicación
    Portugalete (Bizkaia)
    Mensajes
    7.558

    Predeterminado

    No entiendo ni la mitad de lo que pones pero hay que agradecerte la investigación que haces y el hecho de que lo compartas con nosotros. Gracias y enhorabuena.

    Un saludo

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

    Predeterminado

    Gracias Bitxi, me está costando un poco porque no me sabía las fórmulas matemáticas, pero una vez controladas cuando termine trataré de escribir un artículo que entiendan el máximo número de fotógrafos y de aficionados a las redes neuronales.

    Recopilación de las tres redes probadas hasta ahora (se ha añadido red con salida Lab, que mejora la salida XYZ + conversión a Lab):

    """Delta E calculation
    ΔE Quality:
    <1 = Excellent (imperceptible)
    1-2 = Good
    2-4 = Normal
    4-5 = Sufficient
    >5 = Bad
    """

    • Red neuronal RGB_RAW -> XYZ sin etapas ocultas (equivalente a matrix 3x3):

    () NN:
    ΔE_max = 29.579874621089253 and ΔE_mean = 3.4460693382616014


    • Red neuronal RGB_RAW -> XYZ con dos etapas ocultas de 200 neuronas cada una:

    (200, 200) NN:
    ΔE_max = 7.035319348235826 and ΔE_mean = 1.035222151090219


    • Red neuronal RGB_RAW -> Lab con dos etapas ocultas de 200 neuronas cada una:

    (200, 200) NN:
    ΔE_max = 5.659828256166601 and ΔE_mean = 0.8287066247766278


    La más exacta es la que convierte directamente a valores Lab, que llega a tener un Delta E promedio muy bueno: inferior a 1. Puede verse que es más precisa en color (a, b) que en Luminosidad (L). Quiero ver si puedo mejorar esto con unos consejos que me han dado.

    Aquí los histogramas de los Delta E de los 288 parches:
    De las primeras dos redes (RGB_RAW -> XYZ):



    De la última (RGB_RAW -> Lab):



    Salu2!

  12. #12
    Fecha de Ingreso
    mar 2011
    Ubicación
    Barcelona
    Mensajes
    12.447

    Predeterminado

    Interesante trabajo. Hay que leerlo con calma y hacer una buena digestión. ¡Gracias!

Página 1 de 2 12 ÚltimoÚltimo

Marcadores

Normas de Publicación

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