DNG verwendet übrigens das verlustfreie Huffman Coding-Verfahren für die Komprimierung der Daten. Diese Konvertierung/Komprimierung ist reversibel umkehrbar und ist ohne Informationsverlust! (Wer hier an einen Informationsverlust glaubt und seine Bilder als heilig ansieht, der brauchts ja nicht zu verwenden. Da kann ich aber auch nur drüber Lachen.)
Das mit dem Informationsverlust ist leider nicht so einfach.
Es geht hier nicht um Polemik, sondern eher um das ganz genau hinschauen. Dann sehen einfache Dinge auf einmal sehr komplex aus.
"Verlustfrei" kann zwei Bedeutungen haben und je nach dem, was gerade wichtig ist, haben beide ihre Bedeutung.
Bedeutung 1: Der Kodierprozeß ist umkehrbar. Aus A ist B und aus B ist A generierbar.
Bedeutung 2: In der Kopie B ist exakt die gleiche Information wie im Original A. Wenn man B hat, kann man genau sagen, ob A eine mögliche Quelle von B ist.
Prozesse mit der Bedeutung 1 sind "richtig" verlustfrei. Ohne wenn und aber. Prozesse mit der Bedeutung 2 können irreversible Fehler mit sich bringen, obwohl auf den ersten und zweiten Blick ja alles drin ist.
Eine Datei zippen, ist verlustfrei nach 1.
Eine Datei entzippen, ist verlustfrei nach 2.
Aus einer 24-bit-PCM-Datei ein MP3 erzeugen, ist verlustbehaftet.
Eine MP3-Datei in eine 24-bit-PCM-Datei umwandeln, ist meist verlustfrei nach 2, aber nie nach 1. Eine sich daraus ergebende schwerwiegende Konsequenz ist das zwangsläufige Auftreten von Generationsverlusten.
DNG ist eine nette Idee. Zwei wichtige Funktionen fehlen mir aber darin:
- Abspeichern der Original-Metadaten, so wie sie sind. Nicht weil man sie braucht, sondern weil mansie brauchen könnte.
- Verlustbehaftete Komprimierung
Wer hier jetzt schreit über "Verlustbehaftete Komprimierung", der sollte sich im klaren sein, das
- Rohdaten nie Rohdaten sein können (das ist sicherer als das Amen in der Kirche)
- Auch 12-, 14- oder 16-bit-Rohdaten nicht verllustfrei sind.
Grund ist, das immer eine sogenannte Flatfield-Korrektur notwendig ist. Das sind minimale Größenunterschiede der einzelnen Pixel. Macht man sie nicht, rauscht das Bild. Es ist zwar kein temporales Rauschen (es ist zwischen aufeinandernfolgenden Bildern gleich), sondern "nur" ein laterales Rauschen, kann aber vom Betrachter nicht von einem temporalen Rauschen unterscheiden werden.
Zusätzlich zur Flatfield (oder auch Whiteflied)-Korrektur kommt meist noch eine Darkfield-Korrektur dazu.
D.h.
Rohdatum = ( AD-Wandlerwert - Dunkelwert ) / relativeEmpfindlichkeit
bzw. meist
Rohdatum = ( AD-Wandlerwert - Dunkelwert ) / relativeEmpfindlichkeit + BIAS
Schwupps, und man hat statt einem 12 bit- oder 14-bit-Ganzzahl-Datum eine Gleitkommazahl. Derzeit wird diese Zahl linear auf 4096 oder 16384 Schritte skaliert und dann gerundet. Das ist nichts schlimmes, aber es ist nicht verlustfrei. Wenn, dann müßte man entweder die Gleitkommazahl oder alle drei Werte AD-Wandlerwert, Dunkelwert und relativeEmpfindlichkeit abspeichern, wenn es wirklich verlustfrei sein soll.
Wenn man es verlustbehaftet macht, ist die legitime Frage, die sich mir stellt: Die Kodierung sollte so sein, das die abgespeicherte Information aus dem Aufnahmeprozeß maximal für die erzielte Dateigröße ist.
Und damit landet man immer bei nichtlinearen Kodierungen.Würde man sie anwenden, wären die RAW-Dateien deutlich kleiner. Bei unsichtbaren, aber statistisch nachweisbaren Verlusten würde man etwa bei der Größe von JPEG fine-Dateien landen. Geht man noch weiter runter, landet man bei etwa 1,5x der Größe des JPEGs.
Verluste. Keine bis auf leicht erhöhtes Rauschen. Dieser Grad sollte natürlich wählbar sein.