Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <Registration/cmtkVoxelMatchingAffineFunctional.h>
00034
00035 #ifdef CMTK_BUILD_SMP
00036 # include <System/cmtkThreads.h>
00037 #endif
00038
00039 #include <Registration/cmtkVoxelMatchingAffineFunctionalTemplate.h>
00040 #include <Registration/cmtkVoxelMatchingMutInf.h>
00041 #include <Registration/cmtkVoxelMatchingNormMutInf.h>
00042 #include <Registration/cmtkVoxelMatchingCorrRatio.h>
00043 #include <Registration/cmtkVoxelMatchingMeanSquaredDifference.h>
00044 #include <Registration/cmtkVoxelMatchingCrossCorrelation.h>
00045
00046 namespace
00047 cmtk
00048 {
00049
00052
00053 VoxelMatchingAffineFunctional*
00054 VoxelMatchingAffineFunctional
00055 ::Create
00056 ( const int metric, UniformVolume::SmartPtr& refVolume, UniformVolume::SmartPtr& fltVolume, AffineXform::SmartPtr& affineXform )
00057 {
00058 switch ( fltVolume->GetData()->GetDataClass() )
00059 {
00060 case DATACLASS_UNKNOWN :
00061 case DATACLASS_GREY :
00062 switch ( metric )
00063 {
00064 case 0:
00065 return new VoxelMatchingAffineFunctionalTemplate< VoxelMatchingNormMutInf_Trilinear >( refVolume, fltVolume, affineXform );
00066 case 1:
00067 return new VoxelMatchingAffineFunctionalTemplate<VoxelMatchingMutInf_Trilinear>( refVolume, fltVolume, affineXform );
00068 case 2:
00069 return new VoxelMatchingAffineFunctionalTemplate<VoxelMatchingCorrRatio_Trilinear>( refVolume, fltVolume, affineXform );
00070 case 3:
00071 return NULL;
00072 case 4:
00073 return new VoxelMatchingAffineFunctionalTemplate<VoxelMatchingMeanSquaredDifference>( refVolume, fltVolume, affineXform );
00074 case 5:
00075 return new VoxelMatchingAffineFunctionalTemplate<VoxelMatchingCrossCorrelation>( refVolume, fltVolume, affineXform );
00076 default:
00077 break;
00078 }
00079 break;
00080 case DATACLASS_LABEL :
00081 switch ( metric )
00082 {
00083 case 0:
00084 return new VoxelMatchingAffineFunctionalTemplate<VoxelMatchingNormMutInf_NearestNeighbor>( refVolume, fltVolume, affineXform );
00085 case 1:
00086 return new VoxelMatchingAffineFunctionalTemplate<VoxelMatchingMutInf_NearestNeighbor>( refVolume, fltVolume, affineXform );
00087 case 2:
00088 return new VoxelMatchingAffineFunctionalTemplate<VoxelMatchingCorrRatio_NearestNeighbor>( refVolume, fltVolume, affineXform );
00089 case 3:
00090 return NULL;
00091 case 4:
00092 return new VoxelMatchingAffineFunctionalTemplate<VoxelMatchingMeanSquaredDifference>( refVolume, fltVolume, affineXform );
00093 case 5:
00094 return new VoxelMatchingAffineFunctionalTemplate<VoxelMatchingCrossCorrelation>( refVolume, fltVolume, affineXform );
00095 default:
00096 break;
00097 }
00098 break;
00099 }
00100
00101 return NULL;
00102 }
00103
00104 }