# Bilineare Filterung

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

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_{11}=(x_{1},y_{1}),$ $Q_{12}=(x_{1},y_{2}),$ $Q_{21}=(x_{2},y_{1})$ und $Q_{22}=(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_{11})+{\frac {x-x_{1}}{x_{2}-x_{1}}}f(Q_{21})\quad {\text{ mit }}R_{1}=(x,y_{1}),$
    $f(R_{2})\ \approx \ {\frac {x_{2}-x}{x_{2}-x_{1}}}f(Q_{12})+{\frac {x-x_{1}}{x_{2}-x_{1}}}f(Q_{22})\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)xy.$
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

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.
Sofern die Textur per Point Sampling skaliert wird, würde man die Texel als kleine Blöcke erkennen, sodass das Resultat sehr „pixelig“ 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

* Trilineare Filterung
* Mip Mapping