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
00051 class SoSeismic
00052 {
00053 private:
00055 static void initClass();
00056
00058 static void exitClass();
00059
00060 public:
00062 SoSeismic();
00063
00065 virtual ~SoSeismic();
00066
00081 virtual int computeInstPhase( SoBufferObject* sourceBufferObject, SoBufferObject* targetBufferObject,
00082 int traceSize, int numTrace );
00083
00098 virtual int computeEnvelope( SoBufferObject* sourceBufferObject, SoBufferObject* targetBufferObject,
00099 int traceSize, int numTrace );
00100
00110 virtual int computeHilbert( SoBufferObject* sourceBufferObject, SoBufferObject* targetBufferObject,
00111 int width, int height );
00112
00118 int computeInstPhase( SoCpuBufferObject* sourceBufferObject, SoCpuBufferObject* targetBufferObject,
00119 int traceSize, int numTrace );
00120
00126 int computeEnvelope( SoCpuBufferObject* sourceBufferObject, SoCpuBufferObject* targetBufferObject,
00127 int traceSize, int numTrace );
00128
00134 int computeHilbert( SoCpuBufferObject* sourceBufferObject, SoCpuBufferObject* targetBufferObject,
00135 int width, int height );
00136
00137 private:
00138
00142 static void initKernel();
00143
00150 static void genHilbert( float* kernel, unsigned int k_radius );
00151
00152 private:
00153
00154
00155 static float s_hilbertKernel[ HILBERT_KERNEL_SIZE ];
00156
00157 private:
00158
00159 SoConvolution* m_convolutionInterface;
00160
00161 };
00162
00163 #endif //SOSEISMIC_H
00164
00165
00166