• Main Page
  • Classes
  • Files
  • File List
  • File Members

bodySegIDTWT2D.h

00001 /*
00002  * bodySegIDTWT2D.h - pro paralelní výpočet dopřené a zpětné expanzivní DTWT po segmentech, separabilním přístupem algoritmem segDTWT2D
00003  * Autor: Zdeněk Průša, UTKO, FEKT, VUT v Brně, Purkyňova 118, Brno
00004  * Program vznikl za podpory interního grantu FEKT-J-10-8 - Optimální algoritmy paralelního výpočtu waveletové transformace rozsáhlých obrazových dat
00005  * Externí knihovny: Intel Threading Building Blocks 3.0
00006  */
00007 
00008 #ifndef bodySegIDTWT_H
00009 #define bodySegIDTWT_H
00010 #include "segDTWT.h"
00011 #include "cppTypes.h"
00012 
00013 // size = s + 2*(m-1)
00014 // výsledek bude délky floor((size -( filter_size -1))/2)
00015 void convolveIRow(float* i, int size,float* o,float* filter,int filter_size);
00016 
00017 // konvoluce filtrem kratším než pro který bylo prodlužováno
00018 // filter_size je kratší filtr
00019 // výsledek je délky floor((size -( filter_size + zerosLeft + zerosRight -1))/2) (takže stejně jako měl delší)
00020 void convolveIRow(float* i, int size, float* o,float* filter,int filter_size,int zerosLeft,int zerosRight);
00021 
00022 // size = s + 2*(m-1)
00023 // výsledek bude délky floor((size -( filter_size -1))/2)
00024 void convolveICol(float* i, int size,int i_widthStep,float* o,int o_widthStep,float* filter,int filter_size);
00025 
00026 
00027 // konvoluce sloupce filtrem kratším, než pro který bylo prodlouženo, výstupních koeficientů by ale mělo být stejně
00028 void convolveICol(float* i, int size,int i_widthStep,float* o,int o_widthStep,float* filter,int filter_size,int zerosTop,int zerosBottom);
00029 
00036 class bodySegIDTWT2D{
00037         // buffer pro řádkové H pásmo
00038         float* row_buffer;
00039         int row_buffer_widthStep;
00040         // buffer pro řádkové L pásmo
00041         float* col_buffer;
00042         int col_buffer_widthStep;
00043 
00044         // buffer pro řádkové L pásmo
00045         float* third_buffer;
00046         int third_buffer_widthStep;
00047 
00048         // ukazatel na celý obrázek a jeho widthStep
00049         float* o_data;
00050         int o_widthStep;
00051         // pole ukazatelů na subbandy
00052         float** subbands; 
00053         // pole jejich widthStepů
00054         int* widthSteps;
00055 
00056         // definice vlnky
00057         separableWavelet* w;
00058         // velikost bufferů odvozená z teoreticky nejvetsiho bloku
00059         Size maxSize;
00060         // úroveň dekompozice
00061         int level;
00062 
00063         // maximální velikost bufferu
00064         int maxWidth;
00065         int maxHeight;
00066 
00067 
00068 public :
00077         void operator()(const tbb::blocked_range2d_segdtwt_segidtwt_auto<size_t>& r);
00100         bodySegIDTWT2D( float* subbands[],int widthSteps[],float* o_data, int o_widthStep,Size maxSize, separableWavelet* w,int level):
00101         o_data(o_data),o_widthStep(o_widthStep),subbands(subbands),widthSteps(widthSteps),maxSize(maxSize),w(w),level(level){
00102                 // std::cout<< "Konstruktor " << std::endl;
00103                 third_buffer=NULL;      
00104                 row_buffer=NULL;        
00105                 col_buffer=NULL;
00106                 maxWidth = 0;
00107                 maxHeight = 0;
00108         }
00109 
00121         bodySegIDTWT2D(bodySegIDTWT2D& s,tbb::split):
00122         o_data(s.o_data),o_widthStep(s.o_widthStep),subbands(s.subbands),widthSteps(s.widthSteps),maxSize(s.maxSize),w(s.w),level(s.level){
00123                 // std::cout<< "Splitting konstruktor " << std::endl;
00124                 third_buffer=NULL;      
00125                 row_buffer=NULL;        
00126                 col_buffer=NULL;
00127                 maxWidth = 0;
00128                 maxHeight = 0;
00129 
00130 
00131         }
00132 
00142         bodySegIDTWT2D(const bodySegIDTWT2D& s):
00143         o_data(s.o_data),o_widthStep(s.o_widthStep),subbands(s.subbands),widthSteps(s.widthSteps),maxSize(s.maxSize),w(s.w),level(s.level){
00144                 third_buffer=NULL;      
00145                 row_buffer=NULL;        
00146                 col_buffer=NULL;
00147                 maxWidth = 0;
00148                 maxHeight = 0;
00149         }
00150 
00159         ~bodySegIDTWT2D();
00160 
00168         void join(const bodySegIDTWT2D& s){}
00169 };
00170 #endif

Generated on Wed Nov 24 2010 21:26:30 for SegDTWT2D by  doxygen 1.7.1