function g3=linearinterpolation(g,f,down1,down2)


%f gegebenes downgesampeltes Bild 
%f1 Originalbild
%down1 sampling Rate des Downsamplings in x-Richtung
%down2 sampling Rate des Downsamplings in y-Richtung
% bilineare Interpolation

[L1,L2]=size(g)
[N1,N2]=size(f)
g1=[g;g(L1,:)];   %Randbedingungen setzen (falls am rechten bzw. unteren Rand noch Werte rekonstruiert werden muessen
				  % die Ÿber den letzten Wert von g hinausgehen)
g=[g1,g1(:,L2)];



g3=zeros(N1,N2);
for i=1:N1                    
  for j=1:N2
    k1=floor((i-1)/down1);
	k2=floor((j-1)/down2);
	i1= 1+k1*down1; j1=1+k2*down1; %Berechnung eines Pixels in der Nachbarschaft von (i,j) mit bekanntem Bildwert
	if i1==i & j1==j g3(i,j)=g(k1+1,k2+1);
	elseif i1==i y=(j-j1)/down2; b=g(k1+1,k2+2)-g(k1+1,k2+1); d=g(k1+1,k2+1);
	             g3(i,j)=b*y+d;
	elseif j1==j x=(i-i1)/down1; a=g(k1+2,k2+1)-g(k1+1,k2+1); d=g(k1+1,k2+1);
	             g3(i,j)=a*x+d;
	else  	 x=(i-i1)/down1; y=(j-j1)/down2; 
	             a=g(k1++2,k2+1)-g(k1+1,k2+1); b=g(k1+1,k2+2)-g(k1+1,k2+1); c=g(k1+2,k2+2)-g(k1+2,k2+1)-g(k1+1,k2+2)+g(k1+1,k2+1);
	             d=g(k1+1,k2+1);
				 g3(i,j)=a*x+b*y+c*x*y+d;
	end;			 
  end;
  
end;  		







