1

Dies scheint ein ziemlich elementare Mathematik/Grafik-Frage, aber aus irgendeinem Grund scheinen kann ich nicht meinen Kopf zu wickeln um ihn herum.Berechnung interner Farbwerte zwischen bekannten Farbpunkten (bilineare Interpolation?)

Was ich habe, sind vier Liniensegmente, einen Quad umreißt. Jeder Scheitelpunkt in jedem Liniensegment hat einen bekannten Farbwert. Der Einfachheit halber nehmen wir an, dass jedes Liniensegment 100 Scheitelpunkte hat (bekannt als 100 bekannte Farbpunkte). Ein Beispiel könnte wie folgt aussehen:

Was ich tun muß, ist, machen eine solide Quad mit jedem internen Pixel gefärbt, basierend auf den Farben der Punkte auf der Kontur. Der offensichtlichste Weg, dies zu tun (ohne einen Scheitelpunkt für jeden 100 * 100 Farbort Spezifizierungs) würde zunächst einen 100x100-Bitmap mit jedem interpolierten Farbwert zu erzeugen, sein, dann ist diese mit dem Quad als Textur anzuwenden. Ich habe nur Schwierigkeiten herauszufinden, wie diese internen Farbwerte berechnet werden.

Es scheint, als wäre es eine Frage der bilinearen Interpolation, aber da ich nicht versuche, Werte innerhalb von vier bekannten Eckpunkten zu finden, sondern am Schnittpunkt eines "+" bekannter Farbpunkte, werde ich immer verwirrt. Meine Mathematik ist ein wenig rostig: P

Als Beispiel, wie könnte ich nähern Berechnung des Farbwerts des Punktes bei (50,50) - in der Mitte des Quads - mit bekannten Farbpunkten bei (0,50), (50,0), (50,100) und (100,50)? Ist das überhaupt bilineare Interpolation, oder ist es etwas ganz anderes?

Vielen Dank im Voraus!

Antwort

1

Das sieht wie ein boundary value problem mit Dirichet conditions (das heißt, werden die Werte an der Grenze angegeben). Sie können dies nicht mithilfe der bilinearen Interpolation lösen, da es sich in der Regel ergibt (wenn Sie mehr als vier Eingabepunkte haben), dass die Pixel neben Ihren Kantenpixeln keine Farbe haben, die mit ihrem unmittelbaren Nachbarn fortlaufend ist.

Die Hauptsache Sie dies ist eine Gleichung lösen müssen, die vernünftigerweise glatt ist und das gibt immer einen Farbwert nahe dran an der Grenze Nachbar ist, und es gibt mehrere Optionen. Die offensichtliche Sache zu verwenden ist Laplace's equation, die im Grunde eine Gummiplatte auf den Wert jedes Farbkanals an der Grenze wie Pinning und dann entspannen gelassen. Das Lösen von Laplaces ist nicht trivial, da Sie das Gummiblatt für jeden neuen Satz von Randbedingungen simulieren müssen, aber es ist sehr üblich, so dass Sie nach Lösern oder Beispielen in fast jeder Sprache suchen können.

+0

Nun, die Farben an den Rändern * sind * mehr oder weniger kontinuierlich - das heißt, es wird keine besonders starken Veränderungen sein. Die Datenpunkte sind tatsächlich Bodendichtemessungen, die durch Schieben eines Radars in Linien über den Boden erhalten werden; wir wollen das Bild durch Interpolation zwischen den explizit gesammelten Werten (den Farblinien) "vervollständigen". Früher hatten wir nur Pässe, die entlang einer Achse verliefen, so dass LERPing zwischen den parallelen Linien einfach war. Jetzt gehen wir über die andere Achse, um ein bisschen mehr Details hinzuzufügen. Bilineare Interpolation wäre in diesem Fall keine akzeptable Näherung? – Metal450

+0

Ich dachte über eine solche Situation nach, als ich meine Antwort schrieb. Im Allgemeinen ist die Antwort nein. Genauer gesagt, wenn du zwischen zwei parallelen Kanten läufst und die senkrechten Kanten zurück holst, dann, ja, ich schätze, du kannst lernen, aber das wird normalerweise nicht der Fall sein. Wenn Sie die Füllung als kontinuierlich mit allen vier Kanten verwenden möchten, müssen Sie im Allgemeinen alle vier Kanten gleichmäßig berücksichtigen, und die Laplace-Lösung (oder ein anderer Grenzwert soln) tut dies. Da es sich um ein physikalisches System handelt, ist Laplace einfach zu rechtfertigen und zu erklären ... es ist einfach das einfachste Grenzwertsystem. – tom10

+0

Auch "die Farben entlang der Ränder sind mehr oder weniger kontinuierlich" ist nicht das Thema, auf das ich mich beziehe. Stattdessen bedenke ich die obere Reihe von Werten, die du gemessen hast.Jetzt wie Sie die Zeile direkt darunter ausfüllen? Diese Zeile muss glatt mit der oberen Zeile sein, aber auch glatt an den Endpunkten, die die Oberseiten der vertikalen Datenpunkte sind. Ich sehe keinen Weg, um zu garantieren, dass alle diese Bedingungen (sowie alle anderen Seiten) erfüllt werden, es sei denn, Sie bauen es speziell in die Lösung ein, und die bilineare Interpolation tut dies nicht. – tom10