function I_interp = get_intensity_interp(I, x, mode)
if size(I, 3) > 1
error('I has to be a single channel image')
end;
N = size(x, 2);
I_interp = zeros(1, N);
if nargin == 2
mode = 1;
end;
if mode == 2
offsets = [-1 0 1 2];
F = zeros(4, 4);
end;
for h = 1:N
xx = floor(x(:, h));
switch mode
case 0
I_interp(h) = double(I(xx(1), xx(2)));
case 1
delta = x(:, h) - xx;
delta_m = 1 - delta;
F_00 = double(I(xx(1), xx(2)));
F_01 = double(I(xx(1), xx(2)+1));
F_10 = double(I(xx(1)+1, xx(2)));
F_11 = double(I(xx(1)+1, xx(2)+1));
F_A = F_00*delta_m(1)+F_10*delta(1);
F_B = F_01*delta_m(1)+F_11*delta(1);
I_interp(h) = F_A*delta_m(2)+F_B*delta(2);
case 2
for j = 1:4
for i = 1:4
F(i, j) = double(I(xx(1)+offsets(i), xx(2)+offsets(j)));
end;
end;
dx = x(1, h) - xx(1);
dy = x(2, h) - xx(2);
F_0 = F(1);
F_1 = F(2);
F_2 = F(3);
F_3 = F(4);
F_4 = F(5);
F_5 = F(6);
F_6 = F(7);
F_7 = F(8);
F_8 = F(9);
F_9 = F(10);
F_10 = F(11);
F_11 = F(12);
F_12 = F(13);
F_13 = F(14);
F_14 = F(15);
F_15 = F(16);
I_interp(h) = ...
1/6*F_0*(-2/3*dx^3+(dx+1)^3-2/3*(dx+2)^3+1/6*(dx+3)^3)*(1-dy)^3+...
1/6*F_1*(dx^3-2/3*(dx+1)^3+1/6*(dx+2)^3)*(1-dy)^3+...
1/6*F_2*(-2/3*dx^3+1/6*(dx+1)^3)*(1-dy)^3+...
1/36*F_3*dx^3*(1-dy)^3+...
F_4*(-2/3*dx^3+(dx+1)^3-2/3*(dx+2)^3+1/6*(dx+3)^3)*(-2/3*(1-dy)^3+1/6*(-dy+2)^3)+...
F_5*(dx^3-2/3*(dx+1)^3+1/6*(dx+2)^3)*(-2/3*(1-dy)^3+1/6*(-dy+2)^3)+...
F_6*(-2/3*dx^3+1/6*(dx+1)^3)*(-2/3*(1-dy)^3+1/6*(-dy+2)^3)+...
1/6*F_7*dx^3*(-2/3*(1-dy)^3+1/6*(-dy+2)^3)+...
F_8*(-2/3*dx^3+(dx+1)^3-2/3*(dx+2)^3+1/6*(dx+3)^3)*((1-dy)^3-2/3*(-dy+2)^3+1/6*(3-dy)^3)+...
F_9*(dx^3-2/3*(dx+1)^3+1/6*(dx+2)^3)*((1-dy)^3-2/3*(-dy+2)^3+1/6*(3-dy)^3)+...
F_10*(-2/3*dx^3+1/6*(dx+1)^3)*((1-dy)^3-2/3*(-dy+2)^3+1/6*(3-dy)^3)+...
1/6*F_11*dx^3*((1-dy)^3-2/3*(-dy+2)^3+1/6*(3-dy)^3)+...
F_12*(-2/3*dx^3+(dx+1)^3-2/3*(dx+2)^3+1/6*(dx+3)^3)*(-2/3*(1-dy)^3+(-dy+2)^3-2/3*(3-dy)^3+1/6*(-dy+4)^3)+...
F_13*(dx^3-2/3*(dx+1)^3+1/6*(dx+2)^3)*(-2/3*(1-dy)^3+(-dy+2)^3-2/3*(3-dy)^3+1/6*(-dy+4)^3)+...
F_14*(-2/3*dx^3+1/6*(dx+1)^3)*(-2/3*(1-dy)^3+(-dy+2)^3-2/3*(3-dy)^3+1/6*(-dy+4)^3)+...
1/6*F_15*dx^3*(-2/3*(1-dy)^3+(-dy+2)^3-2/3*(3-dy)^3+1/6*(-dy+4)^3);
end;
end;
return