Bilineare Filterung

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Die bilineare Filterung oder bilineare Interpolation ist eine Erweiterung der linearen Interpolation, um Zwischenwerte innerhalb eines zweidimensionalen rechteckigen Gitters zu bestimmen. Sie wird häufig als Grafikfilter zur Skalierung von Rastergrafiken und zur Darstellung von Texturen bei gerenderten Bildern verwendet.

Mathematische Beschreibung[Bearbeiten]

Bilineare Interpolation

Es wird angenommen, dass der Wert f(x,y) einer Funktion f an einem Punkt P=(x,y) bestimmt werden soll. Dieser soll weiterhin von vier fixen Rasterpunkten Q_{1 1} = (x_1, y_1), Q_{1 2} = (x_1, y_2), Q_{2 1} = (x_2, y_1) und Q_{2 2} = (x_2, y_2) umgeben sein. Um den Wert f(P) näherungsweise (durch lineare Interpolation) zu bestimmen, wird zunächst in eine festgelegte Richtung (horizontal oder vertikal, hier horizontal) zwischen den Rasterpunkten linear interpoliert. Dabei sind R_1 und R_2 Stützpunkte zwischen den in horizontaler Richtung liegenden Rasterpunkten.

f(R_1) \ \approx \ \frac{x_2 - x}{x_2 - x_1} f(Q_{1 1}) + \frac{x - x_1}{x_2 - x_1} f(Q_{2 1}) \quad \text{ mit } R_1 = (x, y_1),
f(R_2) \ \approx \ \frac{x_2 - x}{x_2 - x_1} f(Q_{1 2}) + \frac{x - x_1}{x_2 - x_1} f(Q_{2 2}) \quad \text{ mit } R_2 = (x, y_2).

Nach dem gleichen Verfahren wird anschließend zwischen den Werten dieser beiden Punkte interpoliert.

f(P) \ \approx \ \frac{y_2 - y}{y_2 - y_1} f(R_1) + \frac{y - y_1}{y_2 - y_1} f(R_2).

Sind die Rasterpunkte der Funktion f in regelmäßiger Form (0, 0), (0, 1), (1, 0) und (1, 1) gegeben, so reduziert sich die Gleichung zu

f(x, y) \ \approx \ f(0, 0) (1-x) (1-y) + f(1, 0) x (1-y) + f(0, 1) (1-x) y + f(1, 1) x y.

Diese Gleichung lässt sich in Matrixschreibweise wie folgt zusammenfassen.

f(x, y) \ \approx \ \begin{bmatrix} 1-x & x \end{bmatrix} \begin{bmatrix} f(0, 0) & f(0, 1) \\ f(1, 0) & f(1, 1) \end{bmatrix} \begin{bmatrix} 1-y \\ y \end{bmatrix}

Eine Erweiterung dieses Verfahrens um eine zusätzliche dritte Dimension wird als trilineare Interpolation bezeichnet.

Anwendung in der Computergrafik[Bearbeiten]

Bei bilinearer Filterung werden die der Sample-Mitte am nächsten liegenden vier Farben in jeder Achse (u und v) jeweils linear interpoliert. Dazu werden zunächst die beiden Werte zwischen den oberen und den unteren Texeln entlang der u-Achse linear interpoliert. Diese beiden Werte werden anschließend entlang der v-Achse linear interpoliert. Diese zweistufige lineare Interpolation gibt der bilinearen Interpolation ihren Namen. Die Anteile sind dabei nur von der Abtastposition abhängig, nicht jedoch von der Größe der Projektion des Pixels in den Texturraum. Dies führt zwar bei einer Minifikation (die Textur wird stark gestaucht) zu Abtastfehlern, weil zu wenige Texel beachtet werden, wirkt jedoch bei einer Maxifikation (die Textur wird stark vergrößert) glättend, da hierbei bei jedem Pixel dieselben vier Nachbartexel betrachtet, jedoch unterschiedlich gewichtet werden. Anschaulich gesprochen werden die Texel stärker gewichtet, deren Mittelpunkt näher an der Sample-Mitte liegt, wobei immer alle vier benachbarten Texel betrachtet werden.

Eine besondere Bedeutung kommt der bilinearen Filterung beim Echtzeitrendering auf modernen Grafikkarten zu. Hierbei ist die bilineare Filterung ein gebräuchliches Verfahren zum Antialiasing von Texturen. Bilineare Interpolatoren lassen sich durch kaskadierte lineare Interpolatoren schaltungstechnisch vergleichsweise einfach realisieren.

Würde man die Textur per Point Sampling skalieren, würde man die Texel als kleine Blöcke erkennen, sodass das Resultat sehr „pixelig“ und unschön wäre. Dieses Verfahren fand bei alten Computerspielen, deren Grafik rein von der CPU berechnet wurde, statt.

Grafikprogramme bieten in der Regel auch bikubische Filterung an. Dies vergrößert den Rechenaufwand erheblich, aber liefert in vielen Fällen bessere Qualität.

Weitere Filterungen[Bearbeiten]

Weblinks[Bearbeiten]