www.pudn.com > MatlabSIFT.zip > resample_bilinear.m


%///////////////////////////////////////////////////////////////////////////////////////////// 
% Author : Scott Ettinger 
% 
% resample_bilinear(img, ratio)   
% 
% resamples a 2d matrix by the ratio given by the ratio parameter using bilinear interpolation 
% the 1,1 entry of the matrix is always duplicated.  
%///////////////////////////////////////////////////////////////////////////////////////////// 
 
function img2 = resample_bilinear(img, ratio) 
 
img=double(img); 
 
[h,w]=size(img);  %get size of image 
 
[y,x]=meshgrid( 1:ratio:h-1, 1:ratio:w-1 );  %create vectors of X and Y values for new image 
[h2,w2] = size(x);                           %get dimensions of new image 
 
x = x(:);     %convert to vectors 
y = y(:); 
 
alpha = x - floor(x);   %calculate alphas and betas for each point 
beta = y - floor(y); 
 
fx = floor(x);   fy = floor(y); 
 
inw = fy + (fx-1)*h;    %create index for neighboring pixels 
ine = fy + fx*h; 
isw = fy+1 + (fx-1)*h; 
ise = fy+1 + fx*h; 
 
img2 = (1-alpha).*(1-beta).*img(inw) + ...  %interpolate 
       (1-alpha).*beta.*img(isw) + ... 
       alpha.*(1-beta).*img(ine) + ... 
       alpha.*beta.*img(ise); 
    
img2 = reshape(img2,h2,w2);                 %turn back into 2d 
img2 = img2';