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
00009
00010
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
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
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
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
00044
00045
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
00050 o_data_begin += o_widthStep/sizeof(float);
00051 }
00052
00053
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
00060 o_data_begin += o_widthStep/sizeof(float);
00061 }
00062
00063
00064
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
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
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
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