added bilinear interpolation