• Hlavní stránka
  • Třídy
  • Soubory
  • Seznam souborů
  • Symboly v souborech

borderExtension.h

00001 #ifndef BORDER_EXTENSION_H
00002 #define BORDER_EXTENSION_H
00003 #include "segDTWT.h"
00004 
00005 
00006 void wrapBorder_sp0_32f_C1(float* o_data,float* o_data_temp, int o_widthStep,int filter_length,Size size){
00007 float* o_data_begin = o_data;
00008 //float* o_data_temp = (float*) ( o_data + r*(o_widthStep/sizeof(float)) + r );
00009 
00010 // konstantní prodloužení levého okraje
00011  o_data_begin = o_data_temp - filter_length + 1;
00012  for(int x = 0;x<size.height;x++){
00013     std::fill(o_data_begin,o_data_begin+ filter_length,*(o_data_temp+x*o_widthStep/sizeof(float)));
00014         o_data_begin += o_widthStep/sizeof(float);
00015  }
00016 
00017   // konstantní prodloužení pravého okraje
00018  o_data_begin = o_data_temp + size.width;
00019  for(int x = 0;x<size.height;x++){
00020         std::fill(o_data_begin,o_data_begin+filter_length-1,*(o_data_temp+x*o_widthStep/sizeof(float) + size.width -1 ));
00021         o_data_begin += o_widthStep/sizeof(float);
00022  }
00023 
00024  
00025 // konstantní prodloužení horního okraje
00026  o_data_begin = o_data_temp - ( filter_length - 1)*o_widthStep/sizeof(float) - ( filter_length - 1);
00027  for(int x = 0;x<filter_length;x++){
00028          memcpy(o_data_begin,o_data_temp-( filter_length - 1),(size.width+ 2*( filter_length - 1))*sizeof(float));
00029         o_data_begin += o_widthStep/sizeof(float);
00030  }
00031 
00032   // konstantní prodloužení dolního okraje
00033  o_data_begin = o_data_temp + (size.height)*o_widthStep/sizeof(float) - ( filter_length - 1);
00034  o_data_temp = o_data_begin - o_widthStep/sizeof(float);
00035  for(int x = 0;x<filter_length-1;x++){
00036         memcpy(o_data_begin,o_data_temp,(size.width+ 2*( filter_length - 1))*sizeof(float));
00037         o_data_begin += o_widthStep/sizeof(float);
00038  }
00039 }
00040 
00041 void wrapBorder_symh_32f_C1(float* o_data,float* o_data_temp, int o_widthStep,int filter_length,Size size){
00042 float* o_data_begin = o_data;
00043 //float* o_data_temp = (float*) ( o_data + r*(o_widthStep/sizeof(float)) + r );
00044 
00045 // konstantní prodloužení levého okraje
00046  o_data_begin = o_data_temp - filter_length + 1;
00047  for(int x = 0;x<size.height;x++){
00048          std::reverse_copy(o_data_temp+x*o_widthStep/sizeof(float)-1,o_data_temp+x*o_widthStep/sizeof(float)+ filter_length-1,o_data_begin);
00049    // std::fill(o_data_begin,o_data_begin+ filter_length,*(o_data_temp+x*o_widthStep/sizeof(float)));
00050         o_data_begin += o_widthStep/sizeof(float);
00051  }
00052 
00053   // konstantní prodloužení pravého okraje
00054  o_data_begin = o_data_temp + size.width;
00055  float* temp;
00056  for(int x = 0;x<size.height;x++){
00057          temp = o_data_temp+x*o_widthStep/sizeof(float) + size.width - filter_length +1;
00058     std::reverse_copy(temp,temp + filter_length-1,o_data_begin);
00059         //std::fill(o_data_begin,o_data_begin+filter_length-1,*(o_data_temp+x*o_widthStep/sizeof(float) + size.width -1 ));
00060         o_data_begin += o_widthStep/sizeof(float);
00061  }
00062 
00063  
00064 // konstantní prodloužení horního okraje
00065  o_data_begin = o_data_temp - o_widthStep/sizeof(float) - ( filter_length - 1);
00066  for(int x = 0;x<filter_length-1;x++){
00067          memcpy(o_data_begin,o_data_temp-( filter_length - 1)+x*o_widthStep/sizeof(float),(size.width+ 2*( filter_length - 1))*sizeof(float));
00068         o_data_begin -= o_widthStep/sizeof(float);
00069  }
00070   // konstantní prodloužení dolního okraje
00071  o_data_begin = o_data_temp + (size.height)*o_widthStep/sizeof(float) - ( filter_length - 1);
00072  o_data_temp = o_data_begin - o_widthStep/sizeof(float);
00073  for(int x = 0;x<filter_length-1;x++){
00074         memcpy(o_data_begin,o_data_temp-x*o_widthStep/sizeof(float),(size.width+ 2*( filter_length - 1))*sizeof(float));
00075         o_data_begin += o_widthStep/sizeof(float);
00076  }
00077 }
00078 
00079 float* wrapImage_sp0_32f_C1(float* i_data, int i_widthStep, Size size,int level,int filter_length, int* o_widthStep, int s_x,int s_y){
00080 
00081 int r = (pow2(level) - 1)*(filter_length - 1);
00082 
00083 float* o_data = allocateImage_32f_C1<float>(size.width+2*r,size.height+2*r, o_widthStep);
00084 
00085 float* o_data_begin = o_data;
00086 float* o_data_temp = (float*) ( o_data + r*(*o_widthStep/sizeof(float)) + r );
00087 
00088 //nakopírování obrazu
00089 for(int x = 0;x<size.height;x++)
00090   memcpy( o_data_temp + x**o_widthStep/sizeof(float),i_data + x*(i_widthStep/4),size.width*sizeof(float));
00091 
00092 wrapBorder_sp0_32f_C1(o_data,o_data_temp,*o_widthStep,filter_length,size);
00093 
00094 return o_data;
00095 }
00096 
00097 float* wrapImage_symh_32f_C1(float* i_data, int i_widthStep, Size size,int level,int filter_length, int* o_widthStep, int s_x,int s_y){
00098 
00099 int r = (pow2(level) - 1)*(filter_length - 1);
00100 
00101 float* o_data = allocateImage_32f_C1<float>(size.width+2*r,size.height+2*r, o_widthStep);
00102 
00103 float* o_data_begin = o_data;
00104 float* o_data_temp = (float*) ( o_data + r*(*o_widthStep/sizeof(float)) + r );
00105 
00106 //nakopírování obrazu
00107 for(int x = 0;x<size.height;x++)
00108   memcpy( o_data_temp + x**o_widthStep/sizeof(float),i_data + x*(i_widthStep/4),size.width*sizeof(float));
00109 
00110 wrapBorder_symh_32f_C1(o_data,o_data_temp,*o_widthStep,r+1,size);
00111 
00112 return o_data;
00113 }
00114 
00115 #endif

Generováno čt 14. říj 2010 12.27:32 pro projekt SegDTWT2D programem  doxygen 1.7.1