zxhproj v 2.2
zxhproj
|
00001 /*========================================================================= 00002 00003 Program: ZXH Registration Software 00004 Author: GAO, Gang 00005 Language: Visual C++ 00006 OS: Windows 7 00007 Date: $Date: From 2010-08 $ 00008 Version: $Revision: 2.0 $ 00009 00010 Description: this function requires gsl library 00011 =========================================================================*/ 00012 00013 #pragma once 00014 #include "zxh.h" 00015 #include "zxhMetricBase.h" 00016 00017 #define PI 3.1415926; 00018 #define BOUNDARY_RANGE 5.0 00019 00020 #define MAX_INTENSITY 255 00021 #define MIN_DIST_PARAM_1 1 00022 #define MAX_DIST_PARAM_1 MAX_INTENSITY 00023 #define MIN_DIST_PARAM_2 1 00024 #define MAX_DIST_PARAM_2 100 00025 00026 #define GAMMA_DISTRIBUTION 0 00027 #define GAUSSIAN_DISTRIBUTION 1 00028 #define BEAM_THICKNESS_GAUSSIAN_SMOOTHING_2_SIGMA_SQUARED 15.0 00029 #define BOUNDARY_REFLECTION_SIGMA_SQUARED 1800 00030 #define AIR_ACOUSTIC_IMPEDENCE 0.0004 00031 00032 class zxhMetricLogProbability : public zxhMetricBase 00033 { 00034 public: 00035 zxhMetricLogProbability(void){}; 00036 ~zxhMetricLogProbability(void){}; 00037 /* 00041 int GetRefImageCount(); 00042 00046 virtual std::string GetMetricType() {return "_LogProbability_"; } ; 00047 00052 virtual bool SetImage(zxhImageData **pImageRef, int nImageRef); 00053 00055 virtual int GetNoOfEchoImages() {return _nImageRef-1;}; 00057 virtual zxhImageData* GetMRImage() { return m_ppImageRef[0] ; }; 00058 00060 virtual zxhImageData* GetEchoImage( int index) 00061 { 00062 int d = m_ppImageRef[index+1]->GetDimension(); 00063 return m_ppImageRef[index+1] ; 00064 }; 00066 virtual zxhImageData* GetEchoMaskImage( ) 00067 { 00068 if(m_pMaskRef==0) return 0 ; 00069 return m_pMaskRef ; 00070 }; 00072 //todo virtual bool SetImageModelingType() 00074 virtual zxhImageModelingBase* GetEchoModeling(int i) { return & m_pModelingRef[i+1] ; } ; 00076 virtual zxhImageModelingBase* GetMRModeling(void) { return & m_pModelingRef[0] ; } ; 00080 virtual bool SetDistanceImage(zxhImageData *pImageDist) { _pImageDist = pImageDist; return true; }; 00084 virtual bool SetNearestNeighborImage(zxhImageData *pImageNeighbor) {_pImageNeighbor = pImageNeighbor; return true; }; 00085 00086 00087 virtual bool SetGradientImages(zxhImageData *x, zxhImageData *y, zxhImageData *z) 00088 { 00089 _pImageGradX = x; 00090 _pImageGradY = y; 00091 _pImageGradZ = z; 00092 00093 return true; 00094 }; 00098 virtual int GetValue(zxhlfloat &fValue); 00099 00103 virtual bool ComputeLogProbability(); 00104 00108 virtual bool SetLabels(int *labels, int n) 00109 { 00110 _numOfRegs = n; 00111 _regLabels = labels; 00112 00113 return true; 00114 }; 00115 00119 virtual bool SetRegionDistanceIndices(int *idx) 00120 { 00121 _regDistIndices = idx; 00122 00123 return true; 00124 } 00125 00129 virtual bool SetDistanceParameters(double **p) 00130 { 00131 _distParams = p; 00132 00133 return true; 00134 } 00135 00139 virtual bool SetDistanceType(int *distType) 00140 { 00141 _distType = distType; 00142 00143 return true; 00144 } 00145 00146 virtual bool SetEchoProbePosition(double **pos) 00147 { 00148 _echoProbePos = pos; 00149 00150 return true; 00151 } 00152 00153 virtual bool SetRegionZValue(double *zvalues) 00154 { 00155 _regZValues = zvalues; 00156 00157 return true; 00158 }; 00159 00160 virtual bool SetBoundaryWeights(); 00161 00162 00163 void DebugOn() 00164 { 00165 _debug = true; 00166 } 00167 00168 void DebugOff() 00169 { 00170 _debug = false; 00171 } 00172 00173 protected: 00178 bool CreateGradientImages(zxhImageData *image); 00179 00183 double N(const double); 00184 00185 protected: 00189 int _nImageRef; 00190 00194 zxhlfloat _fLogProb; 00195 00199 zxhImageData **m_ppImageRef; 00200 00204 zxhImageData *_pImageDist; 00208 zxhImageData *_pImageNeighbor; 00212 zxhImageData *_pImageGradX; 00216 zxhImageData *_pImageGradY; 00220 zxhImageData *_pImageGradZ; 00221 00225 zxhImageData *_pImageProb; 00226 00227 00228 double _uniformRegProb; 00229 00230 double **_distParams; 00231 double **_echoProbePos; 00232 double **_boundaryWeights; 00233 double **_gaussianDistCumulativeSum; 00234 double **_gammaDistCumulativeSum; 00235 00236 double *_regZValues; 00237 double *_boundaryCumulativeSum; 00238 int *_labelIndices; 00239 int *_regDistIndices; 00240 int *_regLabels; 00241 int *_distType; 00242 00243 int _numOfRegs; 00244 00245 bool _debug; 00246 */ 00247 };