Wie wird die bilineare Interpolation von RGB-Werten durchgeführt?

7

Gegeben die schwarzen Pixelkoordinaten, könnte ich die Koordinatenwerte des blauen Pixels über die mathematische Gleichung y = mx + c interpolieren. Aber was ist mit den neuen RGB-Pixelwerten? Wie gehe ich vor, um den gewichteten durchschnittlichen RGB-Wert für die blauen Pixel zu erhalten, vorausgesetzt, dass die schwarzen Pixel RGB-Werte als solche in der Figur angegeben sind?

Jede Hilfe wird sehr geschätzt. Vielen Dank im Voraus.

    
f0rfun 12.01.2012, 14:15
quelle

3 Antworten

8

Sie interpolieren die Werte unabhängig voneinander und führen jeweils eine Berechnung für R, G und B durch. Zum Beispiel interpolieren Sie zwischen (200,50,10) und (0,0,0) Renditen (100,25,5). .

    
Esoteric Screen Name 12.01.2012, 14:20
quelle
12

(Das könnte lange dauern. Ich werde versuchen, es kurz zu halten. In diesem Fall werde ich wahrscheinlich zu meiner Antwort zurückkehren müssen, um Fragen zu beantworten.) Die Farbrauminterpolation in RGB verwendet oft eine trilineare Interpolation, die erstellt werden kann auf ein paar bilineare Interpolationen. Es besteht jedoch keine Anforderung, dass eine trilineare Interpolation verwendet wird. In der Tat sind andere Interpolationsmittel oft besser, zum Beispiel wird ein simplizielles (oder tetraedrisches) Interpolationsmittel für eine Vielzahl von Gründen gegenüber trilinearen normalerweise bevorzugt. Es gibt mehrere solcher tetraedrischer Zerlegungen eines Gitters, die man verwenden kann. Man ist ziemlich Standard. (Ich werde dort nicht auf Einzelheiten eingehen, zumindest noch nicht.) Außerdem gibt es keinen Grund, warum man RGB statt eines anderen Raums interpolieren sollte, obwohl man argumentieren könnte, dass RGB seine eigenen speziellen Probleme hat, normalerweise herum Interpolation von neutralen und nahen Neutralen.

Die für RGB und Interpolation relevante Eigenschaft ist, dass ein Neutral als ein Punkt definiert wird, so dass R = G = B. Das trilineare Interpolant hat einen maximalen Fehler entlang dieser neutralen Achse und es wird normalerweise eine charakteristische (überbackene) Form für die Fehler entlang des neutralen Pfades durch den Farbraum haben.

Also wie interpolieren wir in 3-d? Ich nehme an, dass man in einem regelmäßigen Gitter von Punkten im Farbraum interpoliert. In diesem Fall kann man einen Würfel identifizieren, der einen einzelnen Punkt enthält. Wenn Sie innerhalb einer verstreuten Menge von Punkten interpolieren, dann besteht die einfachste Lösung darin, eine Triangulation dieser Punkte zu erstellen und dann eine simpliziale (lineare) Interpolation innerhalb eines gegebenen Tetraeders durchzuführen. Interpolatoren höherer Ordnung sind hier ohnehin problematisch, da sie unter Umständen Farbprobleme verursachen können. Man möchte beispielsweise keine Umkehrungen entlang von Gradienten sehen. Dies könnte passieren, da das Überschwingen bei spline-basierten Interpolanten in Regionen mit relativ hoher Krümmung ein ernsthaftes Problem darstellt. Und wenn es Gamut-Mapping gibt, werden solche Übergänge sicherlich ein Problem sein. Auch wenn kein Gamut-Mapping erforderlich ist, gibt es immer noch Probleme mit dem Gamut.

Es gibt mehrere Möglichkeiten, Triangulationen von Domänen aus verstreuten Daten zu erstellen. Alpha-Shapes basieren auf einer Delaunay-Triangulation und sind eine vernünftige Wahl. Unter der Annahme, dass Sie ein reguläres Gitter haben und eine trilineare Interpolation durchführen möchten, reduziert sich das Problem auf die Interpolation innerhalb eines einfachen Würfels in 3-d.

Beachten Sie, dass die trilineare Interpolation nicht wirklich ein linearer Interpolant ist, genauso wenig wie die bilineare Interpolation. Diese Schemata sind NUR linear entlang der Gitterachsen, aber entlang jedem anderen Weg durch den Farbraum haben sie einen polynomischen Charakter. Somit zeigt ein trilinearer Interpolant kubisches polynomisches Verhalten entlang der Hauptdiagonalen oder entlang der meisten allgemeinen Pfade durch den Würfel. Wir können uns davon überzeugen, dass die trilineare Interpolation NICHT wirklich linear ist, da es 8 Punkte gibt, zwischen denen wir interpolieren. In 3-d bestimmen 4 Punkte einen wirklich linearen Interpolanten als eine Funktion dieser unabhängigen Variablen, aber wir haben 8 Punkte, die einen Würfel definieren. Das heißt, wir werden eine Zuordnung von einem RGB-Raum zu einem anderen als wirklich 3 unabhängige Abbildungen betrachten, also RGB - & gt; UVW (Ich habe hier UVW gewählt, um einen generischen anderen Farbraum darzustellen, der ein RGB-Zeichen sein kann oder nicht.)

Der Trick ist, wir bauen einen trilinearen Interpolanten durch Interpolation zwischen einem Paar bilinearer Interpolanten. Wir bauen diese bilinearen Interpolanten durch lineare Interpolation zwischen einem Paar von Punkten entlang einer Kante und dann eine dritte Interpolation zwischen ihnen. Wir können also einen trilinearen Interpolanten als aus 7 einfachen linearen Interpolationen bestehend behandeln. Interessanterweise kann man zeigen, dass es egal ist, mit welchen Achsen wir zuerst die Interpolationen durchführen. Wir können also zuerst entlang des R, dann des B, dann der G-Achsen interpolieren oder irgendeine andere Reihenfolge wählen - der trilineare Interpolant wird für jede gewählte Reihenfolge eindeutig und identisch sein. (Dasselbe gilt für das bilineare Interpolationsmittel.)

Der Trick ist also, wie machen wir eine lineare Interpolation zwischen zwei Triaden von Punkten? Zuerst müssen wir bestimmen, wo auf dem Liniensegment zwischen diesen Punkten wir liegen. Betrachten Sie beispielsweise zwei Punkte in unserem Farbraum, die entlang einer roten (R) Kante des Würfels liegen. Ich verwende die gleichen Werte, die Sie für diese Punkte gezeigt haben:

%Vor%

Dies sind die Werte, zwischen denen wir interpolieren werden, im Wesentlichen die Ausgabe unserer Abbildung, aber wir müssen auch wissen, wo diese Punkte im RGB-Eingabebereich liegen. Angenommen, diese Koordinaten basieren auf den Koordinaten des Würfels, aus dem sie stammen:

%Vor%

Dies ist ein Einheitswürfel in 3-d, wie ich es geschrieben habe, also würden die anderen Punkte bei

liegen %Vor%

Natürlich funktioniert jeder allgemeine Würfel auch, und es gibt keinen Grund dafür, dass er ein echter Würfel ist. Jedes rechtwinklige 4-seitige 3D-Prisma funktioniert auch hier. Sie können Dinge immer in den Einheitswürfel umwandeln.

Nehmen wir nun an, dass wir entlang dieser Kante des Würfels zwischen P1 und P2 in die durch Q1 und Q2 definierte Domäne interpolieren möchten? Wähle einen Punkt entlang dieser Kante. Sie können sehen, dass nur R entlang dieser Kante zwischen diesen Punkten variiert, so dass wir uns nur um den Wert von R an dem Punkt kümmern, an dem wir interpolieren. Stellen Sie sich einen Prozentsatz der Entfernung entlang der Kante vor. Die Interpolation ist lediglich ein gewichteter Mittelwert der beiden Endpunkte, eine Linearkombination. Für den Punkt mit dem roten Wert von r entlang der Kante von 0 bis 1 im roten Kanal ist unsere Interpolation

%Vor%

Wie Sie sehen können, wird, wenn r 1/2 ist, also in der Mitte der Kante, unser Interpolant auf

reduziert %Vor%

Logischerweise ist der Mittelpunktwert der Durchschnitt der beiden Endpunkte. Sie führen die Interpolation für jeden Ausgangskanal unabhängig durch.

%Vor%

Funktioniert das zum Wiederherstellen der Endpunkte? Natürlich tut es das. Wenn r = 0 oder r = 1, können Sie sehen, dass es genau das entsprechende Q1 oder Q2 zurückgibt.

Auch hier führen Sie diese Interpolation entlang jeder der vier roten Kanten für einen trilinearen Interpolanten durch. Dann machen Sie zwei weitere Interpolationen, vielleicht entlang der grünen Kanten der vier Ergebnisse, die wir oben erhalten haben. Schließlich führen Sie eine weitere Interpolation entlang der blauen Kante durch, um den trilinearen Interpolanten zu erhalten. Auch hier spielt es keine Rolle, in welcher Reihenfolge Sie die Achsen der Interpolation wählen. Das Ergebnis wird mathematisch gleich sein.

Hatten Sie bei einer bilinearen Interpolation angehalten, dann gibt es drei solche lineare Interpolationen. Ja, es ist richtig, dass ein bilinearer Interpolant oder ein trilinearer Interpolant auch als eine gewichtete Kombination aller 4 (oder 8) Ecken des Rechtecks ​​(oder Würfels) ausgeführt werden kann. Das kann der Zukunft überlassen werden.

    
user85109 12.01.2012 17:00
quelle
1
%Vor%

Hier gepflegter Code

Ссылка

    
Malcolm McLean 09.01.2017 22:09
quelle