# Bilinear filtering tutorial

## Bilinear filtering

Bilinear filtering is an algorithm to interpolate between pixels often used to render textures or pictures in a size larger than the original. Usually a larger version of a picture looks ugly because you can see the rectangle structure of the pixels.

## 1D interpolation

The solution is to interpolate the colors to get a smooth fading from one color to another. An easy 1D interpolation can be done with the following formula:

result = position * col1 + (1 - position) * col2

where col1 is the first color, col2 is the second color and position is a number between 0 and 1 that determines the position between this colors. If you fade two colors with this formula, you get a smooth looking result (for RGB colors, you just have to fade each component seperate).

## 2D interpolation

When you fade 2D data it is getting harder, because you have to fade between 4 pixel colors. But you can still use the formula above. First fade between the two colors on the edges above and below and then fade between these two colors:

col5 = posx * col1 + (1 - posx) * col2
col6 = posx * col3 + (1 - posx) * col4

result = posy * col5 + (1 - posy) * col6

where col1 - col4 are the original four colors, col5 and col6 are the interpolations at the edges above and below and (posx/posy) is a 2D-position between (0,0) and (1,1).

Surprisingly, the result looks very ugly: This is because we used a linear interpolation, which means using posx as a factor in our formula. We now use the SCURVE function to interpolate our function. The SCURVE function has the formula

y = 3*x*x - 2*x*x*x

and looks like this (white = SCURVE function, grey = linear function): The resulting image looks much better and shows the correct way to use bilinear interpolation: 