Main Page   Modules   Class Hierarchy   Compound List   File List   Compound Members   Related Pages   Examples  

Translation.cpp

00001 /* Copyright (c) 2001 S.E. Grigorescu */
00002 
00003 #include "Translation.h"
00004 
00005 template void Translate< int >(Image< int >&, float, float, Image< int >&);
00006 template void Translate< byte >(Image< byte >&, float, float, Image< byte >&);
00007 template void Translate< float >(Image< float >&, float, float, Image< float >&);
00008 template void Translate< int >(Image< int >&, float, float);
00009 template void Translate< byte >(Image< byte >&, float, float);
00010 template void Translate< float >(Image< float >&, float, float);
00011  
00012 template< class T > void Translate(Image< T >& input, float x, float y, Image< T >& output)
00013 {
00014   double xo, yo, alfa, beta;
00015   int ir, jr;
00016   Image< T > res;
00017   res = input;
00018   res = 0;
00019   for (int i = 0; i < input.getHeight(); i++)
00020     for (int j = 0; j < input.getWidth(); j++){
00021       xo = j - x; yo = i - y; 
00022       alfa = xo - floor(xo);
00023       beta = yo - floor(yo);
00024       jr = (int)floor(xo); ir = (int)floor(yo);
00025       if (jr >= 0 && jr < input.getWidth()-1 && ir >= 0 && ir < input.getHeight()-1)
00026         res[i][j] = (T)((1-alfa)*(1-beta)*input[ir][jr] + alfa*(1-beta)*input[ir][jr+1] + 
00027           (1-alfa)*beta*input[ir+1][jr] + alfa*beta*input[ir+1][jr+1]);      
00028       if (jr == -1 && jr < input.getWidth()-1 && ir >= 0 && ir < input.getHeight()-1)
00029         res[i][j] = (T)((1-beta)*input[ir][jr+1] + beta*input[ir+1][jr+1]);      
00030       if (jr >= 0 && jr == input.getWidth()-1 && ir >= 0 && ir < input.getHeight()-1)
00031         res[i][j] = (T)((1-beta)*input[ir][jr] + beta*input[ir+1][jr]);      
00032       if (jr >= 0 && jr < input.getWidth()-1 && ir == -1 && ir < input.getHeight()-1)
00033         res[i][j] = (T)((1-alfa)*input[ir+1][jr] + alfa*input[ir+1][jr+1]);      
00034       if (jr >= 0 && jr < input.getWidth()-1 && ir >= 0 && ir == input.getHeight()-1)
00035         res[i][j] = (T)((1-alfa)*input[ir][jr] + alfa*input[ir][jr+1]);
00036     }
00037   output = res;
00038 }
00039 
00040 template< class T > void Translate(Image< T >& input, float x, float y)
00041 {
00042   Translate(input, x, y, input);
00043 }
00044 
00045 
00046 
00047