Seite 3 von 4

Verfasst: Mi 22. Dez 2004, 19:27
von Arjay
Blue Heron hat geschrieben:Hier noch mal für's Protokoll:
Das Bild vom Sensor ist SW und es wird so umgewandelt.
Roland, natürlich hast Du recht, dass die Sensordaten prinzipiell ein Schwarz/Weiss-Bild beschreiben, wobei im RAW-Bild eine feste Position für das Beyer-Pattern aus den pixelbezogenen Farbfiltern vorausgesetzt wird. Das hat aber mit dem Thema RAW-Kompression zunächst mal nichts zu tun.

Die Kompressions-Diskussion bei Raw-Dateien geht nicht um die Zuordnung, welches Pixel zu welcher Farbe gehört, sondern darum, wie die Helligkeitswerte der ausgelesenen Pixel in Zahlenwerte in der Bilddatei umgesetzt werden. Denn das Format dieser Zahlenwerte bestimmt ganz wesentlich die Dateigrösse der RAW-Bilddatei.

Ich will diesen Sachverhalt mal ein wenig aus der Sicht des Nachrichtentechnik-Inscheniörs :wink: mit etwas theoretischem Hintergrund verdeutlichen - hoffentlich halbwegs verständlich:

Beispiel:
  • Wenn die Helligkeitswerte als echte 12-Bit Daten abgelegt werden, dann muss für jedes Pixel eine 12-Stellige Binärzahl in die Bilddatei eingetragen werden. Würde man anstelle der 12-stelligen Zahlen nur 10-stellige Zahlen verwenden, so erntspräche dies automatisch einer Verringerung der Dateigröße (bei gleichbleibender Pixelzahl) um ca. 17% - einfach weil weniger Bits gespeichert werden müssen. Und wenn weniger Bits zu speichern sind, dann lassen sich diese weniger umfangreichen Daten auch schneller speichern.
Die Sache hat natürlich einen Haken:
  • Eine 12-stellige Binärzahl kann 4096 unterschiedliche Werte für den gegebenen Helligkeitsbereich beschreiben. Eine 10-stellige Zahl löst für den gleichen Helligkeitsbereich nur 1024 unterschiedliche Werte auf. Das andere Zahlenformat kann die Daten also nicht in der gleichen Auflösung abbilden, denn die Differenz zwischen einem der 4096 Schritte und seinem Nachbarn ist natürlich kleiner als der Unterschied zwischen einem aus 1024 Schritten und dessen Nachbarwert - sofern beide Zahlendarstellungen den gleichen Helligkeitbsbereich beschreiben.
Nun gibt es aber einen hinterhältigen technischen Trick - die Datenkompression.
  • Mit ihr kann man bei niedrig auflösenden Zahlenformaten trotzdem eine höhere Auflösung abbilden - nur eben nicht über den ganzen Wertebereich! Klingt sonderbar, ist aber tatsächlich so.
Bisher sind wir unausgesprochen immer von einer linearen Codierung ausgegangen.
  • Das bedeutet, dass der Schritt von einem Zahlenwert zum nächsten immer konstant ist - dass die Helligkeitswerte in einem linearen Zusammenhang zur zugehörigen Zahl stehen. Beispiel: Der Unterschied zwischen den Werten 3578 und 3579 ist gleich (Gesamt-Helligkeitsbereich / 4096), und die Differenz zwischen den Werten 475 und 476 hat genau die gleiche Größe. Bei linearer Codierung sind diese Schrittwerte immer gleich - egal, um welche Zahl (im zulässigen Wertebereich) es geht.
Was aber, wenn man sich sagt "Ich benutze keine gleichmäßigen Werteabstände mehr"?
  • Dann kann ich mir die Werteauflösung genau so "hinbiegen", wie ich sie für die technische Aufgabenstellung brauche - und ich benötige dafür nicht mehr so viele unterschiedliche Zahlenwerte. Dementsprechend lässt sich damit die Menge der zu speichernden Daten verringern.
Man definiert dazu eine "Kompressionskurve",
  • die sieht oft so ähnlich aus wie eine S-förmig gestellte Gradationskurve. Nur - sie beschreibt etwas anderes: Auf der horizontalen Achse sind in linearer Skalierung alle Zahlenwerte des verwendeten Zahlenformats aufgeführt (z.B. 0 - 1023), auf der vertikalen Achse stehen die Helligkeitswerte (von schwarz bis weiss). Dort, wo die Kurve flach ist, beschreibt ein Schritt von einer Zahl zum benachbarten Wert nur einen kleinen Helligkeitsunterschied. An einer steilen Stelle sieht's ganz anders aus: Dort ist der Helligkeitsunterschied zwischen zwei benachbarten Werten viel größer! Sowas nennt man eine nichtlineare Codierung.
Mit einer solchen Kurve (oder einer entsprechenden Tabelle) kann man nun eine feine Helligkeitsauflösung gewährleisten, wo's nötig ist.
  • Im Gegenzug sieht man an anderen Stellen im Helligkeitsbereich (wo's nicht so wichtig ist) eine wesentlich gröbere Helligkeitsauflösung vor, um trotzdem mit der gewünschten niedrigen Anzahl unterschiedlicher Zahlenwerte auszukommen. Das ist Datenkompression (mit dieser Technik arbeiten übrigens auch alle unsere digitalen Telefone).

    Wenn man diese Methode zusamen mit anderen Verfahren der Datenkompression für Datenströme (z.B. Zip- oder LZW-Kompression) verwendet, so lässt sich die Größe der RAW-Bilddateien erheblich verringern, ohne dass (im Gegensatz zur JPEG-Kompression, einer fundamental anderen Technik) geometrische Details des Bildes verloren gehen!
So, und nun zurück zum Thema:

Wenn man den Adobe Raw-Converter per Reverse Engineering analysiert, und dort für D70 RAW-Dateien auf Kompression schliessen kann, so kann ich mir nicht vorstellen, dass diese Info aus den Fingern gesogen ist. Denn wenn die Analyse korrekt ist, und der Adobe RAW Konverter die D70-Dateien unbestrittenermaßen korrekt lesen kann, dann lässt dies tatsächlich auf Dateikompression schliessen - sonst könnte der Konverter die Daten ja schliesslich nicht lesen.

Die Frage, ob RAW-Daten verlustbehaftet ("lossy") oder verlustfrei ("lossless") abgespeichert werden können, hängt sehr stark von der verwendeten Kompressionstechnik ab - und davon, ob die technischen Kompromisse bei der nichtlinearen Codierung richtig gewählt wurden. Die Helligkeitswahrnehmung unserer Augen ist logarithmisch, also stark nichtlinear. Insofern ist es durchaus sinnvoll, auch RAW-Daten zu komprimieren, und zwar in den Bereichen, die unser Auge ohnehin nicht unterscheiden kann.

Fazit: Ob man Raw-Daten ohne wahrnehmbaren Qualitätsverlust komprmieren kann oder nicht , ist eine Frage der verwendeten Technik, und keine Glaubensfrage. Letzten Endes sind alle diese technischen Tricks zulässig, so lange sie nicht zu einer wahrnehmbaren Verschlechterung des erfassten Bildes führen!

Verfasst: Mi 22. Dez 2004, 19:56
von Reiner
Hervorragende Erklärung :!: :!: :!:

Verfasst: Mi 22. Dez 2004, 19:58
von PeterB
Ja, packt mal Timos Beitrag irgendwie in die FAQs :D

Verfasst: Mi 22. Dez 2004, 20:02
von Reiner
Timo is' selber gross... Das kann er alleine :wink:

Verfasst: Mi 22. Dez 2004, 20:04
von Arjay
:lol: Klar, das mache ich gerne! Allerdings möchte ich damit noch ein wenig warten, denn wer weiss, was in diesem Thread noch für technische Fragen hochkommen...

Verfasst: Do 23. Dez 2004, 14:57
von Andreas H
Die Erklärung von Timo ist plausibel. Aber: Es ist einer unter mehreren Lösungswegen. Gibt es eine Möglichkeit, herauszufinden ob bei NEF wirklich so verfahren wird? Wäre es denkbar, daß verschiedene NEF-Konverter unterschiedlich vorgehen? Sie erzeugen ja mitunter auch deutlich unterschiedliche Ergebnisse.

Bis vor einer Woche (vor der "Spiegel-Affäre") hätte ich noch mein Gehalt darauf verwettet daß man dem Nikon-Prospekt blind vertrauen kann wenn Nikon dort von verlustfreier Kompression schreibt.

Auch wenn das Ergebnis für mich persönlich ohne jede praktische Auswirkung ist (ich bin mit den Ergebnissen, die ich aus NEF erzielen kann sehr zufrieden) wäre es doch eine interessante Hintergrundinformation.

Grüße
Andreas

Verfasst: Do 23. Dez 2004, 15:29
von ManU
Mal eine grundsätzliche Frage: Wenn ein Bild unkomprimiert gespeichert würde, bedeutet das nicht auch gleichzeitig, dass die Dateigröße eines jeden Bildes exakt übereinstimmt?

Aus meinen bisherigen Aufnahmen habe ich mal das kleinste und das größte NEF rausgesucht: 5.042 KB gegenüber 6.035 KB. Alleine aufgrund dieser Tatsache würde ich persönlich davon ausgehen, dass die jeweilige Kamera niemals verlustfrei speichert. Denn nur durch eine (schwankende) Kompression kann ich mir ehrlich gesagt den Unterschied in den Dateigrößen erklären.

Oder ist ein NEF "intern" doch etwas anders aufgebaut als ein TIFF? Denn beim TIFF bekommt man eine bis aufs Byte übereinstimmende Dateigröße, egal aus welchem NEF man dieses generiert.

Verfasst: Do 23. Dez 2004, 15:43
von Arjay
@ManU, bei einer unkomprimierten Datei würde ich auch von einheitlichen Dateigrößen ausgehen. Das wäre mal eine interessante Frage an unsere D100-User, weil man dort AFAIK die Kompression ein- und abschalten kann. Also Freunde - wie sieht's bei der D100 aus?

Nach allem, was ich bisher über die technischen Hintergünde des NEF-Formats herausgefunden habe, dürfte das D70 NEF-Format zwei verschiedene Kompressionstechniken kombinieren:
  • Kompression des Helligkeitswertes über eine Kompressions-Kennlinie (siehe mein Beitrag weiter oben), und
  • verlustlose "Run Length"-Kompression à la ZIP oder LZW (letztere Technik wird übrigens auch bei TIFF-Dateien verwendet).
Ich schliesse das aus der Tatsache, dass "komprimierte" NEF-Dateien um mehr als 17% kleiner sind als unkomprimierte NEF-Dateien aus der D100 (genauer Wertevergleich vorbehalten).

Verfasst: Do 23. Dez 2004, 16:12
von Reiner
Arjay hat geschrieben: Also Freunde - wie sieht's bei der D100 aus?
Gerade mal 300 NEF-Dateien sortiert:

Grösster Wert: 9.873MB
Kleinster Wert: 9.762MB

Komprimiert: 7,836MB

Verfasst: Do 23. Dez 2004, 16:48
von UweL
ManU hat geschrieben:Aus meinen bisherigen Aufnahmen habe ich mal das kleinste und das größte NEF rausgesucht: 5.042 KB gegenüber 6.035 KB. Alleine aufgrund dieser Tatsache würde ich persönlich davon ausgehen, dass die jeweilige Kamera niemals verlustfrei speichert. Denn nur durch eine (schwankende) Kompression kann ich mir ehrlich gesagt den Unterschied in den Dateigrößen erklären.
Man muß hier Kompression und Codierung auseinanderhalten. LZW oder RunLength-Codierungen (und eine Menge anderer) sind Codierungen, die verlusfrei arbeiten. Da sie aber bei jedem Bild auf unterschiedlichen Daten aufsetzen, sind sie unterschiedlich effizient. Jeder kennt das von seine ZIP-Dateien - manches kann man gut packen, anderes nicht. TIFF kann alles mögliche beinhalten. Uncodiert ist ein TIFF-Datei der D70 natürlich immer fast gleich groß (kleinere Unterschiede können z.B. durch EXIF-Daten oder andere TIFF-Tags kommen). Daneben könnte man aber auch die Bilddaten JPEG oder LZW codiert da reinstecken. Dann wird's ziemlich unterschiedlich groß. Welche Art der Codierung verwendet wird (verlustbehaftet oder verlustfrei) lässt sich aus unterschiedlichen Dateigrößen längst nicht sagen.
Ich denke aber, dass die Codierung in jedem Fall nicht vergleichbar mit einer JPEG-Datenkompression ist - dazu hat Timo eigentlich schon alles gesagt.