Bilineare Interpolation

Aus aktuellem Anlasss habe ich heute den 8. März 2026 diesen Artikel verfasst:

 

Interpolation bedeutet das errechnen von Werten zwischen zwei bekannten Werten. Nehmen wir erstmal die einfache interpolation im zweidimensionalen Raum.

 

Im einfachsten Fall haben wir ein Polynom ersten Grades was einer Gerade entspricht und die Form y = a*x + b hat. Dabei sind die Punkte P0 und P1 bekannt. Pneu liegt zwischen P0 und P1. Die x-Koordinate von Pneu wir festgelegt. Die entsprechende y- Koordinate ist gesucht. Die Vorgehensweise ähnelt dem Dreisatz mit dem Unterschied, dass es hier um Differenzen geht. Aus der Differenz der x-Koordinaten wird die Differenz der y-Koordinaten berechnet.

 

In den ersten beiden Schritten ermittelt man die Differenzen dx und dy der bekannten Punkte P0 und P1. Im dritten Schritt berechnen wir die Differenz der bekannten Werte aus P0 und Pneu . Dies ist dx, da x-Kordinaten bekannt ist. Die Strecke dy aus P0 und Pneu ist unbekannt und kann im vierten und letzten Schritt berechnet.

 

1. dx = x1 – x0

 

2. dy = y1 – y0

 

3. dxneu = xneu – x0

 

4. dyneu = y0 + dy : dx * dxneu

 

Zum vierten Schritt noch eine kleine Anmerkung. Der Ausdruck dy : dx wird sehr häufig in der Mathematik verwendet. Er ist die Steigung der Gerade und hat den Namen Gradient.

 

Die lineare Interpolation wird verwendet, wenn ich zwischen zwei Werten einen Zwischenwert ermitteln möchte. Beispielsweise bei einer geradlinigen Straße, die nur in Fahrtrichtung ein gerades Gefälle hat. Die Querrichtung ist dabei immer Waagrecht. Das bedeutet wenn man eine Wasserwaage in Querrichtung legt ist diese Waagrecht und die Luftblase ist mittig. In Längsrichtung ist die Luftblase dagegen auf der Seite, die höher ist.

 

Ein weiteres Beispiel wäre der Tankinhalt (das Volumen des noch vorhandenen Treibstoffes) eines Fahrzeugs bei ebener Strecke und stets konstanter Geschwindigkeit bzw. eine Annäherung wenn Strecke und Fahrverhalten gleichmäßig sind. Es klappt nicht wenn die Funktion zwar stetig aber nicht differenzierbar ist. Stetig differenzierbar bedeutet, wenn man den Anfangswert und den Endwert nimmt berechnet man den Durchschnittsverbrauch dy : dx den man, wie wir wissen, Gradient nennt. Bei konstanter Fahrweise und Strecken verlauf klappt das, weil der Gradient immer den gleichen wert hat. Eben den Durchschnittsverbrauch. Ist der erste Teil in einem flachen Streckenabschnitt und der zweite Teil in einem bergigen Abschnitt, so habe ich an der Stelle wo sich die Steigung des Weges stark ändert einen anderen Gradienten. Dieser Punkt ist zwar stetig aber nicht differenzierbar. Weil von der flacheren Seite der Strecke ein anderer Gradient berechnet wird als auf der steileren. In diesen Fall sind Strecken zwar differenzierbar aber nur bis zu den Bruchpunkten. Dies nennt man dann partiell differentierbar.

 

Verlassen wir nun die Zweidimensionalität und nehmen die dritte Dimension hinzu. Hier läßt sich eine Ebene immer durch drei Punkte bestimmen. Einen Neuen Punkt innerhalb dieses Dreiecks berechnet man durch baryzentrische Koordinaten. Ob er in der Ebene liegt über die Ebenengleichung. Letzteres ist unsicher, da wir hier auch Punkte außerhalb des Dreiecks liegen können. Wir sprechen dann von einer Extrapolation. Dies gibt es zu vermeiden. Tiefer möchte ich aber hier nicht eingehen. Das wäre dann das Thema Dreiecksvermaschung, welches ich vielleicht zu einem späteren Zeitpunkg genauer erklären werde.

 

Aus aktuellem Anlass, erkläre ich in wenigen Worten aber was viel wichtiger ist mit einer Skizze die Bilinearen Interpolation von Höhen.

 

Um die Höhe eines beliebigen Punktes auf einer Oberfläche berechnen zu können braucht es entweder eine Dreiecksvermaschung oder ein regelmäßiges Gitter. Wer schon mal ein kariertes Blatt Papier in der Hand hielt, hat dazu gleich das passende Bild im Kopf. Das ist die wahrscheinlich bekannteste Abbildung einer Gitterstruktur. Jetzt denkt man sich für jeden Kreuzungspunkt eine Höhe und wir haben die Struktur eines regelmäßigen Höhengitters. Voilá.

 

Zeichnet man jetzt einen Beliebigen Punkt auf das Blatt Papier, so gibt es drei Möglihkeiten:

 

1. Der Punkt ist direkt auf einem Kreuzungspunkt. Dann ist die Höhe bereits bekannt und kann aus einer Tabelle mit den Höhenwerten direkt abgelesen werden.

 

2. Der Punkt liegt auf einer Linie. Dann verfahren wir so, wie in der linearen Interpolation vorhin beschrieben und erhalten den richtigen Wert.

 

3. Die häufigste Wahrscheinlichkeit ist aber, dass der Punkt innerhalb des Kästchens fällt. Für diesen Fall können wir als Annäherung die Ecken nehmen, die am nächsten dem Punkt ist und annäherungsweise diese Höhe verwenden. Dieses Verfahren nennt man Nächste Nachbarschaft.

 

Genauer ist aber die bilineare Interpolation, die ich im Folgenden beschreibe.

 

Beispiel:

 

Gegeben ist der Punkt Pneu(5,37 | 7,54) auf einem karierten Blatt Papier mit 0,5cm Gitterweite, sowie die vier Höhen:

 

hunten.links = 3,28cm

 

hunten.rechts = 4,11cm

 

hoben.links = 4,02cm

 

hunten.rechts = 3,59cm

 

Gesucht: Höhe hneu von Punkt Pneu

 

Zeichnung

 

Lösung:

In einem 5mm Raster ist der nächstkleinere Wert von x = 5,37cm ist 5,00cm. Der nächstgrößere ist folge dessen bei 5,50mm. Der nächstkleinere Wert von 7,54cm ist 7,50cm und 8,00cm ist der nächstgrößere. Somit haben wie die vier Koordinaten der benachbarten 4 Punkte.

 

Die Nachbarpunkte bilden alle möglichen Kombinationen der beiden Koordinaten. Und heißen Punten.links , Punten.rechts , Poben.links und Poben.rechts . Wie bereits oben erwähnt haben sie folgende Werte:

 

Punten.links = (5,00 |7,50)

 

Punten.rechts = (5,50 | 7,50)

 

Poben.links = (5,00 | 8,00)

 

Poben.rechts = (5,50 | 8,00)

 

Nun bilden wir die vier Differenzen und zwar jeweils links, rechts oben und unten zum neuen Punkt. Diese Differenzen heißen dxlinks , dxrechts , dyunten und dyoben

 

dxlinks = xneu – xlinks = 5,37cm – 5,00cm = 0,37cm

 

dxrechts = xrechts – xneu = 5,50cm – 5,37cm = 0,13cm

 

dyunten = yneu – yunten = 7,54cm – 7,50cm = 0,04cm

 

dyoben = yoben – yneu = 8,00cm - 7,54cm = 0,46cm

 

Den im Gegensatz zur einfachen linearen Interpolation, der graphisch auch der Strahlensatz ist, berechnen wir nicht den exakten Wert sondern eine bestmögliche Lösung. Der Unterschied liegt darin, dass wir eine Überbestimmung haben. Das heißt, wir haben mehr Werte als wir für eine Lösung bräuchten und diese Werte können sich widersprechen. Deshalb bilden wir einen speziellen Mittelwert der Höhen. Zu den Höhen der Punkte Punten.links , Punten.rechts , Poben.links und Poben.rechts multiplizieren wir proportional in Relation des Abstand (dxlinks , dxrechts , dyunten und dyoben) von Punkt Pneu zu seinen vier Gitterpunkten Gewichte. Es bietet sich an nicht den direkten Abstand zu wählen sondern den Neupunkt Pneu als neuen Schnittpunkt zu sehen, der das Quadrat der vier Punkte Punten.links , Punten.rechts , Poben.links und Poben.rechts in vier Rechtecke unterteilt.

 

Skizze

 

Diese vier Rechtecke gunten.links , gunten.rechts , goben.links und goben.rechts bilden unsere Gewichte deshalb benennen wir sich auch gleich mit dem kleinen g. Das Quadrat q, das den gleichen Inhalt hat wie die vier Gewichte zusammen bildet den Quotienten.

 

gunten.links = dxlinks * dyunten = 0,37cm * 0,04cm = 0,0148cm²

 

gunten.rechts = dxrechts * dyunten = 0,13cm * 0,04cm = 0,0052cm²

 

goben.links = dxlinks * dyoben = 0.37cm * 0.46cm = 0,1702cm²

 

goben.rechts = dxrechts * dyoben = 0.13cm * 0,46cm = 0.0598cm²

 

dx = 5,50cm – 5,00cm = 0,50cm für die Breite bzw.

 

dy = 8,00cm -7,50cm = 0,50cm für die Höhe des Rasters

 

q = dx * dy = 0,50cm * 0,50cm = 0,2500cm²

 

Da wir erreichen wollen, dass der Punkt der am nächsten zu Pneu ist, stärker gewichtet wird, weil er mehr Einfluss auf den Punkt hat, als einer der weiter entfernt ist, nehmen wir immer die schräg gegenüberliegende Fläche.

 

Skizze

 

Nun kommen wir zurück zum speziellen Mittelwert. Statt dass wir die Summe die vier Höhen der Punkte Punten.links , Punten.rechts , Poben.links und Poben.rechts bildenund diese durch vier teilen Multiplizieren wir die gegenüberliegenden Gewichte zu den Höhen und teilen es durch das Quadrat q bzw. die Gesamtfläche der vier einzelnen Rechtecke gunten.links , gunten.rechts , goben.links und goben.rechts.

 

q = gunten.links + gunten.rechts + goben.links + goben.rechts.

 

q = 0,0148cm² + 0,0052cm² + 0,1702cm² + 0.0598cm²

 

q = 0,2500cm²

 

Damit stimmen unsere Gewichte!

 

hneu = (hunten.links * goben.rechts. + hunten.rechts * goben.links. + hoben.links * gunten.rechts + hunten.rechts * gunten.links) : q

 

hneu = (3,28cm * 0.0598cm² + 4,11cm * 0,1702cm² +4,02cm * 0,0052cm² + 3,59cm * 0,0148cm²) : 0,2500cm²

 

hneu = 0,9796cm³ : 0,2500cm²

 

hneu = 3,9184cm gerundet 3,92cm

 

Somit ist er niedriger als der Maximalwert und höher als der Minimalwert was die erste Kontrolle ist. Wäre er außerhalb des Werteintervalls von [3,28 ; 4,11] dann würde das auf einen Rechenfehler hinweisen.

 

Ich hoffe anhand dieses Rechnebeispiels konnte ich euch die Bilineare Interpolation gut erklären.

 

Bei Fragen oder Anregungen gerne eine email an: info@friedl-ffb.de

Ich versuche in den nächsten Tagen die Skizzen hinzuzufügen.

 

Druckversion | Sitemap
© M. Friedl