00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #if !defined SOSEISMIC_H
00024 #define SOSEISMIC_H
00025 
00026 #include <Inventor/SbDataType.h>
00027 
00028 #include <Inventor/algorithms/SoAlgorithmsDefs.h>
00029 
00030 #define HILBERT_FILTER_RADIUS 30
00031 #define HILBERT_KERNEL_SIZE (2 * HILBERT_FILTER_RADIUS + 1)
00032 
00033 class SoBufferObject;
00034 class SoCpuBufferObject;
00035 class SoConvolution;
00036 
00052 class   SoSeismic
00053 {
00054 private:
00059   virtual ~SoSeismic();
00060 
00062   static void initClass();
00063 
00065   static void exitClass();
00066 
00067 public:
00069   SoSeismic();
00070 
00085   virtual int computeInstPhase( SoBufferObject* sourceBufferObject, SoBufferObject* targetBufferObject,
00086                                     int traceSize, int numTrace );
00087 
00102   virtual int computeEnvelope( SoBufferObject* sourceBufferObject, SoBufferObject* targetBufferObject,
00103                                    int traceSize, int numTrace );
00104 
00114   virtual int computeHilbert( SoBufferObject* sourceBufferObject, SoBufferObject* targetBufferObject,
00115                                     int width, int height );
00116 
00122   int computeInstPhase( SoCpuBufferObject* sourceBufferObject, SoCpuBufferObject* targetBufferObject,
00123                                     int traceSize, int numTrace );
00124 
00130   int computeEnvelope( SoCpuBufferObject* sourceBufferObject, SoCpuBufferObject* targetBufferObject,
00131                                    int traceSize, int numTrace );
00132 
00138   int computeHilbert( SoCpuBufferObject* sourceBufferObject, SoCpuBufferObject* targetBufferObject,
00139                                     int width, int height );
00140 
00141 private:
00142 
00146   static void initKernel();
00147 
00154   static void genHilbert( float* kernel, unsigned int k_radius );
00155 
00156 private:
00157 
00158   
00159   static float s_hilbertKernel[ HILBERT_KERNEL_SIZE ];
00160 
00161 private:
00162   
00163   SoConvolution* m_convolutionInterface;
00164 
00165 };
00166 
00167 #endif //SOSEISMIC_H
00168 
00169 
00170