00001
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