Lorsque la plupart des gens prennent une photo, il leur suffit d'appuyer sur le déclencheur de leur appareil photo ou de leur téléphone, et une image prête à être visualisée, généralement au format JPEG bien connu, apparaît presque instantanément à l'écran. Cependant, dans certains cas, plus de contrôle est nécessaire sur la production de ce même JPEG. Par exemple, vous souhaiterez peut-être augmenter ou diminuer l'activité de la fonction de suppression du bruit, ou vous pourriez avoir l'impression que les couleurs ne sont pas tout à fait correctes.
Et c'est là que les fichiers RAW entrent en jeu. Dans ce contexte, une image brute est un transfert direct des données reçues des pixels de la matrice photo, et n'a pas subi de traitement supplémentaire... En règle générale, ces fichiers sont dans un format d'image Bayer relativement standard, nommé d'après Bryce Bayer, qui a inventé la technique en 1974 alors qu'il travaillait pour Kodak. L'idée est d'empêcher le processeur de traitement d'image embarqué (FAI) de convertir l'image brute Bayer en image visible, mais de le faire vous-même en utilisant un programme séparé, généralement appelé convertisseur RAW.
Une image Bayer n'enregistre qu'une seule couleur pour chaque pixel, comme indiqué.
Parfois, l'image brute est comparée à l'ancienne technologie de négatifs photographiques, et bien que de nombreux fabricants d'appareils photo utilisent leur propre format, le type de fichier RAW le plus courant est le négatif numérique (ou DNG ), décrit par Adobe en 2004. La question demeure: comment obtenir des fichiers DNG à partir du Raspberry Pi afin qu'ils puissent être traités à l'aide de votre convertisseur RAW préféré.
Obtenir une image brute de Raspberry Pi
De nombreux lecteurs seront familiarisés avec l'application raspistill, qui reçoit des images JPEG d'une caméra. Raspistill a une commande -r qui ajoute des données brutes à la fin du fichier JPEG. Les visionneuses JPEG afficheront toujours ce fichier comme d'habitude, ignorant les nombreux mégaoctets de données brutes attachées à l'arrière. Un tel fichier JPEG + RAW peut être obtenu en utilisant la commande dans le terminal:
raspistill -r -o image.jpg
Malheureusement, le format JPEG + RAW est exactement ce qui sort de l'appareil photo et n'est pas pris en charge par le convertisseur RAW. Pour l'utiliser, nous devons le convertir au format DNG.
PyDNG
Cet utilitaire convertit le fichier JPEG + RAW natif de Raspberry Pi en DNG. PyDNG peut être téléchargé sur github.com/schoolpost/PyDNG, il y a aussi des instructions plus détaillées. En bref, nous devons suivre ces étapes:
git clone https://github.com/schoolpost/PyDNG
cd PyDNG
pip3 install src/. # PyDNG Python3
PyDNG peut être utilisé dans le cadre de scripts Python plus volumineux ou s'exécuter seul. En continuant avec l'exemple raspistill, nous pouvons entrer dans la ligne d'entrée:
python3 examples/utility.py image.jpg
Le fichier DNG résultant peut être traité avec différents convertisseurs RAW. Certains d'entre eux sont gratuits (par exemple, RawTherapee ou dcraw, bien que ce dernier ne soit plus développé ni pris en charge), et il existe de nombreuses options commerciales bien connues (Adobe Camera Raw ou Lightroom).
Balance des blancs et matrices de couleurs
L'un des problèmes liés à la gestion des fichiers RAW avec le Raspberry Pi à ce stade est d'obtenir des couleurs significatives. Auparavant, les images étaient rendues avec un biais vert, car aucun équilibrage des couleurs n'était effectué et le vert est généralement le canal de couleur le plus sensible. Pour aggraver les choses, puisque les valeurs RVB de l'image brute reflètent simplement la sensibilité des pixels du capteur à différentes longueurs d'onde, elles ne sont a priori pas en corrélation précise avec les couleurs que nous percevons avec nos yeux. C'est là que la balance des blancs et les matrices de couleurs sont utiles.
Nous avons besoin des bons multiplicateurs blancs pour que les parties neutres de la scène apparaissent neutres. Nous pouvons utiliser une estimation éclairée de raspistill à leur sujet, contenue dans le fichier JPEG + RAW (ou vous pouvez mesurer votre propre valeur quelque part dans l'image - par exemple, sur une carte grise). Ensuite, des matrices et des tables de recherche sont nécessaires pour convertir les couleurs de la caméra en sRVB ou Adobe RVB.
résultats
Tentatives précédentes de conversion de RAW et résultats obtenus après l'application de la version mise à jour de PyDNG.
Fichiers DCP
Pour les personnes familiarisées avec les fichiers DNG, nous fournissons des liens vers des fichiers DCP (DNG Camera Profile) avec un profil de caméra (au format binaire). Essayez différents fichiers, nous encourageons les utilisateurs à expérimenter, à créer leurs propres fichiers et à publier les résultats!
- Le profil de couleur de base intégré à PyDNG, dont les résultats sont indiqués ci-dessus. Il est relativement petit et peut être considéré comme un fichier JSON .
- Profil plus grand amélioré avec des tableaux de référence pour un rendu équilibré des couleurs.
- Semblable au précédent , mais avec quelques corrections pour améliorer la couleur de la peau et du ciel.
Cependant, ces fichiers présentent plusieurs particularités:
- Ils sont calibrés pour une caméra de haute qualité Raspberry Pi spécifique, et non pour un module "typique" moyen.
- Les sources de lumière étaient celles à portée de main - en particulier, la lampe D65 semble être transmise un peu de manière imprécise.
- L'étalonnage ne fonctionne que si la température de couleur ne diffère pas beaucoup des deux sources de couleur impliquées dans l'étalonnage - dans notre cas, c'est la plage de 2900K à 6000K.
Par conséquent, il y a encore place à l'amélioration. Cependant, des tests sur de nombreux modules ont montré que ces paramètres sont un pas en avant significatif.
Remerciements
Jack Hogan pour l'étalonnage de la matrice couleur avec DCamProf, Zsabe Nagi pour l'ajout de nouvelles fonctionnalités à PyDNG.
Matériaux additionnels
- Il existe de nombreuses ressources décrivant la conversion d'une image Bayer brute en une image RVB ou YUV visible. Par exemple, un article sur le blog de Jack .
- Pour comprendre le rôle des matrices de couleurs qu'elles jouent dans un fichier DNG, reportez-vous à sa spécification . En particulier, cela est traité au chapitre 6.