In der Diskussion dieses Artikels ging es in unserem Forum hoch her (und nicht nur bei uns). Dabei wurde gar nicht um die Ursprungsintention des Artikels gestritten, sondern es ging viel mehr um eine Randbemerkung. Nämlich, dass u.a. David Newman von Cineform/GoPro behauptet hat, durch Herunterskalieren auf geviertelte Auflösung von 8 Bit 4:2:0-Material enstünde 10 Bit 4:4:4 Material.
Gegner dieser Position behaupten, dass aus einem 8 Bit Sample niemals mehr Information zurückgewonnen werden kann. Folglich könne auch aus der Zusammenfassung mehrerer 8 Bit Werte niemals mehr die Werte zwischen den Sample-Punkten wiedergewonnen werden. Ein Ergebnis müsse immer eine künstliche Interpolation sein, die mit dem Original nichts mehr zu tun habe.
Befürworter sehen dagegen in der Zusammenfassung der vier Pixel durchaus einen Mehrgewinn an Farbtiefe und können diese auch durch spezielle Beispielfälle in der Praxis vor Augen führen.
Der Aufbau
Bei näherer Betrachtung des Problems fiel uns auf, dass die Formel wohl für einige Fälle gilt und für andere nicht. Also liegt es nahe, einmal einen statistischen Blick auf das Problem zu werfen. Hierfür haben wir unserem slashCAM-Elfenbeinturm einmal ein schönes Gedanken-Experiment aufgebaut (und in sehr krudem C/C++ wegen der Nachvollziehbarkeit nachgehackt).
Wir nehmen einen Sensor ohne Bayer Pattern Filter an, der nur Helligkeits-Signale aufzeichnen kann: In unserem Gedankenexperiment liefert jedes Pixel lineare 14 Bit Sensorwerte zwischen 0 und 16383.
Sehen wir uns nun 4 Sensorpixel a, b, c, d an:

Als erstes weisem wir jedem Pixel einen 14 Bit Zufallscode zu:
a = rand() % 16384 ;
b = rand() % 16384 ;
c = rand() % 16384 ;
d = rand() % 16384 ;
Diese Werte sind sozusagen das Abbild, das unser Sensor von der Realität messen kann. Anschließend erfassen wir den Wert jedes Pixels mit 10 Bit Auflösung:
a_10 = a/16;
b_10 = b/16;
c_10 = c/16;
d_10 = d/16;
Die 10 Bit Pixelwerte a_10, b_10, c_10 und d_10 unseres Sensors fassen wir nun zu einem 10 Bit Wert für die vier Pixel zusammen (all_10).
all_10 = (a_10+ b_10+ c_10+ d_10)/4;
"all_10" verhält sich also so wie eine "echte" 10 Bit-Kamera, die beim Downsampling vier 10 Bit-Pixel einfach zusammenfasst. Diese sehen wir als Referenz für echtes 10 Bit Sampling.
Anschließend nehmen wir die selben 14 Bit Sensorwerte, und speichern diese jedoch nur mit 8 Bit pro Pixel:
a_8 = a/64;
b_8 = b/64;
c_8 = c/64;
d_8 = d/64;
Und jetzt kommt die Ketzerei. Wir generieren ein 10 Bit Sample aus der einfachen Addition von vier 8 Bit-Werten:
all_8 = (a_8 + b_8 + c_8 + d_8);
"all_8" ist also eine 8 Bit-Kamera die beim Downsampling ihre Werte auf einer 10 Bit-Summe belässt, anstatt das Ergebnis abschließend wieder nach 8 Bit zu runden.
Um diese Simulation für jede erdenkliche 2 x 2 14 Bit Kombination zu berechnen, wären 163844 = 72.057.594.037.927.936 Durchläufe nötig. Geschätzt bräuchte ein 4 GHZ- Core i7 dafür über 2 Jahre. Doch glücklicherweise gibt es einige Hinweise, die uns diese Rechenarbeit ersparen können:
Mit 12 Bit-Input brauchte unser Rechnner nur weniger als einen Tag, um alle möglichen Fälle tatsächlich durchzurechnen. Mit der selben Ergebnis-Verteilung, die sich bei einer statistischen Zufalls-Auswahl von wenigen 10.000 Samples auch schon deutlich abzeichnet. Und die genau die gleiche Verteilung zeigt sich statistisch auch bei 14 Bit Genauigkeit.