Procesamiento de archivos RAW desde la cámara Raspberry Pi HQ

imagen


Cuando la mayoría de las personas toman una foto, solo necesitan presionar el botón del obturador en su cámara o teléfono, y una imagen lista para ver, generalmente en el conocido formato JPEG, aparece casi instantáneamente en la pantalla. Sin embargo, en algunos casos, se requiere más control sobre la producción de este mismo JPEG. Por ejemplo, es posible que desee aumentar o disminuir la actividad de la función de eliminación de ruido, o puede sentir que los colores no son del todo correctos.



Y luego los archivos RAW vienen al rescate. En este contexto, una imagen sin procesar es una transferencia directa de datos recibidos de los píxeles de la matriz fotográfica y no se sometió a un procesamiento adicional.... Por lo general, estos archivos están en un formato de imagen de Bayer relativamente estándar, llamado así por Bryce Bayer, quien inventó la técnica en 1974 mientras trabajaba para Kodak. La idea es evitar que el procesador de procesamiento de imágenes integrado (ISP) convierta la imagen de Bayer sin procesar en visible, pero hacerlo usted mismo utilizando un programa separado, generalmente llamado conversor RAW.





Una imagen de Bayer registra solo un color para cada píxel, como se muestra.



A veces, la imagen sin procesar se compara con la antigua tecnología de negativos fotográficos y, aunque muchos fabricantes de cámaras usan su propio formato, el tipo más común de archivo RAW es el negativo digital (o DNG ), descrito por Adobe en 2004. La pregunta sigue siendo: cómo obtener archivos DNG de la Raspberry Pi para que puedan procesarse con su convertidor RAW favorito.



Obteniendo una imagen sin procesar de Raspberry Pi



Muchos lectores estarán familiarizados con la aplicación raspistill, que recibe imágenes JPEG de una cámara. Raspistill tiene un comando -r que agrega datos sin procesar al final del archivo JPEG. Los visores de JPEG seguirán mostrando este archivo como de costumbre, ignorando los muchos megabytes de datos sin procesar adjuntos en la parte posterior. Tal archivo JPEG + RAW se puede obtener usando el comando en la terminal:



raspistill -r -o image.jpg


Desafortunadamente, el formato JPEG + RAW es solo lo que sale de la cámara y no es compatible con el convertidor RAW. Para usarlo, necesitamos convertirlo a formato DNG.



PyDNG



Esta utilidad convierte el archivo JPEG + RAW nativo de Raspberry Pi a DNG. PyDNG se puede descargar desde github.com/schoolpost/PyDNG, también hay una instrucción más detallada allí. En resumen, debemos seguir estos pasos:



git clone https://github.com/schoolpost/PyDNG
cd PyDNG
pip3 install src/.  #  PyDNG  Python3


PyDNG se puede utilizar como parte de scripts de Python más grandes o se puede ejecutar por sí solo. Continuando con el ejemplo de raspistill, podemos entrar en la línea de entrada:



python3 examples/utility.py image.jpg


El archivo DNG resultante se puede procesar con varios convertidores RAW. Algunos de ellos son gratuitos (por ejemplo, RawTherapee o dcraw, aunque este último ya no está desarrollado ni soportado), y existen muchas opciones comerciales conocidas (Adobe Camera Raw o Lightroom).



Equilibrio de blancos y matrices de color



Uno de los problemas con el manejo de archivos RAW con la Raspberry Pi en este punto es obtener colores significativos. Antes de esto, las imágenes se renderizaban con un sesgo de verde, ya que no se realizó ningún equilibrio de color, y el verde suele ser el canal de color más sensible. Para empeorar las cosas, dado que los valores RGB en la imagen sin procesar simplemente reflejan la sensibilidad de los píxeles del sensor a diferentes longitudes de onda, a priori no se correlacionan con precisión con los colores que percibimos con nuestros ojos. Aquí es donde el balance de blancos y las matrices de color resultan útiles.



Necesitamos los multiplicadores de blanco correctos para que las partes neutrales de la escena parezcan neutrales. Podemos usar una conjetura educada de raspistill sobre ellos, que se encuentra en el archivo JPEG + RAW (o puede medir su propio valor en algún lugar de la imagen, por ejemplo, en una tarjeta gris). Luego, se requieren matrices y tablas de búsqueda para convertir los colores de la cámara a sRGB o Adobe RGB.



resultados



Intentos anteriores de convertir RAW y los resultados obtenidos después de aplicar la versión actualizada de PyDNG.











































Archivos DCP



Para las personas familiarizadas con los archivos DNG, proporcionamos enlaces a archivos DCP (DNG Camera Profile) con un perfil de cámara (en formato binario). Pruebe diferentes archivos, animamos a los usuarios a experimentar, crear sus propios archivos y publicar los resultados.



  1. El perfil de color base integrado en PyDNG, cuyos resultados se muestran arriba. Es relativamente pequeño y puede verse como un archivo JSON .
  2. Perfil más grande mejorado con tablas de referencia para una representación equilibrada de colores.
  3. Similar al anterior , pero con algunas correcciones para mejorar el color de la piel y el cielo.


Sin embargo, estos archivos tienen varias peculiaridades:



  • Están calibrados para una cámara Raspberry Pi de alta calidad específica, no para un módulo "típico" promedio.
  • Las fuentes de luz eran las que teníamos al alcance de la mano; en particular, la lámpara D65 parece transmitirse de forma un poco imprecisa.
  • La calibración funciona solo si la temperatura del color no difiere mucho de las dos fuentes de color involucradas en la calibración; en nuestro caso, este es el rango de 2900K a 6000K.


Por tanto, todavía hay margen de mejora. Sin embargo, las pruebas en muchos módulos han demostrado que estos parámetros son un paso adelante significativo.



Expresiones de gratitud



Jack Hogan para la calibración de la matriz de color con DCamProf, Zsabe Nagi para agregar nuevas funciones a PyDNG.



Materiales adicionales



  • Hay muchos recursos que describen la conversión de una imagen de Bayer sin procesar en una imagen RGB o YUV visible. Por ejemplo, un artículo en el blog de Jack .
  • Para comprender el papel de las matrices de color que desempeñan en un archivo DNG, consulte su especificación . En particular, esto se trata en el Capítulo 6.



All Articles