Mit 2 RGB-Werten:
Ich möchte sie mitteln, dieser Link sagt, dass ich sie wirklich zuerst quadrieren, mitteln und dann die Quadratwurzel finden muss. Ich habe ein paar andere Punkte gesehen, die dasselbe sagen oder näher an der Leistung von 2,2 liegen (und ein Video, warum die Computerfarbe falsch ist).
Ist das wirklich der richtige Weg und wie heißt die Quadrierungsmethode? Ich weiß, dass der TATSÄCHLICH beste Weg der LAB-Raum ist, aber damit kann ich nicht umgehen.
R (255+201)/2 = 228
G (23+18)/2 = 20,5
B (22+122)/2 = 72
Dies hängt von Ihrem Konzept des "Durchschnitts" ab.
Wenn es sich um den Durchschnitt zwischen Schwarz und Weiß handelt, würde ich erwarten, dass das Ergebnis 128 ist und die Gammakorrektur von der Grafikkarte durchgeführt wird .
Aber der Wahrnehmungsgrund hinter dieser Verbindung ist interessant.
Der Punkt ist, dass es nicht nur einen Mittelweg gibt, Sie müssen sich daran erinnern, dass der Farbraum ein 3D-Modell ist, kein lineares.
Schauen Sie sich diese anderen verwandten Beiträge an:
In diesem Beitrag zeige ich 4 verschiedene Wege für einen Farbübergang zwischen Rot und Grün ... und das ist nur auf einem normalen Farbrad.
Erzeugen einer Reihe von Farben zwischen zwei Farben
Aber die Farbe ist nicht nur eine 2D-Oberfläche, sondern ein Körper, der in vielen Formen und Modellen vorkommt.
Wie findet man eine Umkehrfarbe?
Es gibt also nicht nur einen universellen Weg, um Farben zu mitteln . Das hängt von vielen Dingen ab.
Wahrscheinlich bist du mit Computergrafik besser bedient als mit Grafikdesign, da es dort Brot und Butter gibt und hier ein bisschen zu viel Mathematik. Aber sice Sie sind schon hier. Tatsächlich sind beide Argumentationen enge Annäherungen.
Es stimmt, dass das Bild nicht linear ist. Sie können also nicht davon ausgehen, dass die Addition von Werten deren Summe ergibt, also auch kein Durchschnitt. Wenn Sie richtig liegen wollen, müssen Sie eine Profil-zu-Profil-Konvertierung durchführen*. Technisch würden Sie wahrscheinlich davon ausgehen, dass das Profil sRGB ist, was tatsächlich einer Gammakorrektur von 2,2 nahe kommt. wobei das Gamma definiert ist als:
V aus = V ein Ɣ
Nur ist es nicht ganz ein Gamma von 2,2, weil es tatsächlich linear unter den Werten von 0,04045 ist (oder unter ganzzahligen Werten von 10 in 8-Bit-Farbkanälen). Da die Farbebenen unabhängig sind, können Sie sie zuerst in linear umwandeln und dann berechnen und wieder in nichtlinear umwandeln.
* Hängt jedoch von Ihrer Definition von richtig ab, wenn es richtig ist, wie es im wirklichen Leben funktioniert, dann nein, das funktioniert nicht wirklich. Da die von Computern verwendeten Farbwerte natürliches Licht nicht erfassen können. Dazu benötigen Sie Spektraldaten. Aber das ist ein unendliches Rabbi-Thole. Farbe ist nicht wirklich so einfach, wie die meisten von uns denken, es ist schwieriger, als sie sich vorstellen können.
TL;DR Gut genug
Das Minute Physics-Video Computer Color is Broken erklärt das Problem gut, hat aber einige (kleine) Probleme.
Er stellt fest, dass RGB mit einer Quadratwurzel-komprimierten Version der tatsächlichen Intensität arbeitet:
+--------------+ +-----+
| Linear Light |----> √r, √g, √b ---->| RGB |
+--------------+ +-----+
Bevor Sie also versuchen, RGB zu mischen, müssen Sie es wieder in "lineares Licht" umwandeln, indem Sie die Umkehrung anwenden:
+--------------+ +-----+
| Linear Light |<---- r², g², b² <----| RGB |
+--------------+ +-----+
Aber das Internet und fast alle Elektronik- und Verbrauchergeräte haben sich auf einen Standard (genannt sRGB) geeinigt, bei dem etwas angewendet wird, das nicht ganz die Quadratwurzel ist.
Es ist also etwas, das kein Quadrat ist (und keine Quadratwurzel, um es rückgängig zu machen).
Die Formel, die von sRGB verwendet wird, um lineares Licht in sRGB-codiertes Licht umzuwandeln, ist nicht linear:
Mit anderen Worten, es kommt einer einfachen Quadratwurzelbildung sehr nahe:
Mit dem einzigen Fallstrick des linearen Abschnitts, wenn Sie wirklich nahe an Null kommen.
Normalerweise benötigen Sie also eine Funktion, die diese Fast-Quadratwurzel- sRGB-Kompandierungsfunktion anwendet:
r = SrgbCompanding(Rlinear);
g = SrgbCompanding(Glinear);
b = SrgbCompanding(Blinear);
Bevor Sie beginnen, Farben in RGB zu mitteln oder zu mischen, müssen Sie die Umkehrung anwenden:
Rlinear = SrgbInverseCompanding(r);
Glinear = SrgbInverseCompanding(g);
Blinear = SrgbInverseCompanding(b);
Sobald sich R, G und B im linearen Licht befinden, können Sie sie mitteln:
R3 = (SrgbInverseCompanding(r1) + SrgbInverseCompanding(r2)) / 2;
G3 = (SrgbInverseCompanding(g1) + SrgbInverseCompanding(g2)) / 2;
B3 = (SrgbInverseCompanding(b1) + SrgbInverseCompanding(b2)) / 2;
Und dann müssen Sie die sRGB-Kompandierung erneut anwenden:
R3 = SrgbCompanding(R3);
G3 = SrgbCompanding(G3);
B3 = SrgbCompanding(B3);
Philipp
joojaa