
Wenn die meisten Menschen ein Foto aufnehmen, müssen sie nur den Auslöser ihrer Kamera oder ihres Telefons drücken, und ein sofort sichtbares Bild, normalerweise im bekannten JPEG-Format, wird fast sofort auf dem Bildschirm angezeigt. In einigen Fällen ist jedoch mehr Kontrolle über die Produktion dieses JPEG erforderlich. Beispielsweise möchten Sie möglicherweise die Aktivität der Rauschunterdrückungsfunktion erhöhen oder verringern, oder Sie haben das Gefühl, dass die Farben nicht ganz richtig sind.
Und dann kommen RAW-Dateien zur Rettung. In diesem Zusammenhang ist ein Rohbild eine direkte Übertragung von Daten, die von den Pixeln der Fotomatrix empfangen wurden, und wurde keiner zusätzlichen Verarbeitung unterzogen... Typischerweise haben diese Dateien ein relativ normales Bayer-Bildformat, benannt nach Bryce Bayer, der die Technik 1974 bei Kodak erfand. Die Idee ist, zu verhindern, dass der integrierte Bildverarbeitungsprozessor (ISP) das Bayer-Rohbild in ein sichtbares Bild konvertiert, dies jedoch selbst mit einem separaten Programm zu tun, das normalerweise als RAW-Konverter bezeichnet wird.

Ein Bayer-Bild zeichnet wie gezeigt nur eine Farbe für jedes Pixel auf.
Manchmal wird das Rohbild mit der alten Technologie für fotografische Negative verglichen, und obwohl viele Kamerahersteller ihr eigenes Format verwenden, ist der häufigste Typ von RAW-Dateien das digitale Negativ (oder DNG) ), beschrieben von Adobe im Jahr 2004. Die Frage bleibt, wie DNG-Dateien vom Raspberry Pi abgerufen werden können, damit sie mit Ihrem bevorzugten RAW-Konverter verarbeitet werden können.
Rohbild von Raspberry Pi erhalten
Viele Leser werden mit der Raspistill-Anwendung vertraut sein, die JPEG-Bilder von einer Kamera empfängt. Raspistill hat einen Befehl -r, der Rohdaten an das Ende der JPEG-Datei anfügt. JPEG-Viewer zeigen diese Datei weiterhin wie gewohnt an und ignorieren die vielen Megabyte an Rohdaten, die auf der Rückseite angehängt sind. Eine solche JPEG + RAW-Datei kann mit dem Befehl im Terminal abgerufen werden:
raspistill -r -o image.jpg
Leider ist das JPEG + RAW-Format genau das, was aus der Kamera kommt und wird vom RAW-Konverter nicht unterstützt. Um es zu verwenden, müssen wir es in das DNG-Format konvertieren.
PyDNG
Dieses Dienstprogramm konvertiert die native JPEG + RAW-Datei von Raspberry Pi in DNG. PyDNG kann von github.com/schoolpost/PyDNG heruntergeladen werden. Dort finden Sie auch eine ausführlichere Anleitung. Kurz gesagt, wir müssen die folgenden Schritte ausführen:
git clone https://github.com/schoolpost/PyDNG
cd PyDNG
pip3 install src/. # PyDNG Python3
PyDNG kann als Teil größerer Python-Skripte verwendet oder einzeln ausgeführt werden. Wenn wir mit dem Raspistill-Beispiel fortfahren, können wir in die Eingabezeile eingeben:
python3 examples/utility.py image.jpg
Die resultierende DNG-Datei kann mit verschiedenen RAW-Konvertern verarbeitet werden. Einige von ihnen sind kostenlos (z. B. RawTherapee oder dcraw, obwohl letzteres nicht mehr entwickelt oder unterstützt wird), und es gibt viele bekannte kommerzielle Optionen (Adobe Camera Raw oder Lightroom).
Weißabgleich und Farbmatrizen
Eines der Probleme beim Umgang mit RAW-Dateien mit dem Raspberry Pi besteht derzeit darin, aussagekräftige Farben zu erhalten. Zuvor wurden Bilder mit einer grünen Vorspannung gerendert, da kein Farbausgleich durchgeführt wurde und Grün normalerweise der empfindlichste Farbkanal ist. Da die RGB-Werte im Rohbild lediglich die Empfindlichkeit der Sensorpixel gegenüber verschiedenen Wellenlängen widerspiegeln, korrelieren sie a priori nicht genau mit den Farben, die wir mit unseren Augen wahrnehmen. Hier bieten sich Weißabgleich und Farbmatrizen an.
Wir brauchen die richtigen weißen Multiplikatoren, damit die neutralen Teile der Szene neutral erscheinen. Wir können eine fundierte Vermutung von raspistill über sie verwenden, die in der JPEG + RAW-Datei enthalten ist (oder Sie können Ihren eigenen Wert irgendwo im Bild messen - zum Beispiel auf einer Graukarte). Dann sind Matrizen und Nachschlagetabellen erforderlich, um die Farben von der Kamera in sRGB oder Adobe RGB zu konvertieren.
Ergebnisse
Frühere Versuche, RAW und die Ergebnisse nach dem Anwenden der aktualisierten Version von PyDNG zu konvertieren.
DCP-Dateien
Für Personen, die mit DNG-Dateien vertraut sind, bieten wir Links zu DCP-Dateien (DNG Camera Profile) mit einem Kameraprofil (im Binärformat). Probieren Sie verschiedene Dateien aus. Wir empfehlen Benutzern, zu experimentieren, eigene Dateien zu erstellen und die Ergebnisse zu veröffentlichen.
- Das in PyDNG integrierte Grundfarbprofil, dessen Ergebnisse oben gezeigt sind. Es ist relativ klein und kann als JSON-Datei angezeigt werden .
- Verbessertes größeres Profil mit Referenztabellen für eine ausgewogene Farbwiedergabe.
- Ähnlich wie beim vorherigen , jedoch mit einigen Korrekturen zur Verbesserung der Haut- und Himmelsfarbe.
Diese Dateien haben jedoch mehrere Funktionen:
- Sie sind für eine bestimmte Raspberry Pi High Quality-Kamera kalibriert, nicht für ein durchschnittliches "typisches" Modul.
- Die Lichtquellen waren diejenigen, die uns zur Verfügung standen - insbesondere die D65-Lampe scheint etwas ungenau durchgelassen zu sein.
- Die Kalibrierung funktioniert nur, wenn sich die Farbtemperatur nicht wesentlich von den beiden an der Kalibrierung beteiligten Farbquellen unterscheidet. In unserem Fall liegt dieser Bereich zwischen 2900 K und 6000 K.
Daher gibt es noch Raum für Verbesserungen. Tests an vielen Modulen haben jedoch gezeigt, dass diese Parameter einen bedeutenden Fortschritt darstellen.
Danksagung
Jack Hogan für die Farbmatrixkalibrierung mit DCamProf, Zsabe Nagi für das Hinzufügen neuer Funktionen zu PyDNG.
Zusätzliche Materialien
- Es gibt viele Ressourcen, die die Konvertierung eines Bayer-Rohbilds in ein sichtbares RGB- oder YUV-Bild beschreiben. Zum Beispiel ein Artikel in Jacks Blog .
- Informationen zur Rolle von Farbmatrizen in einer DNG-Datei finden Sie in deren Spezifikation . Dies wird insbesondere in Kapitel 6 behandelt.