00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MITKIMAGETOITKMULTIPLEXER_H_HEADER_INCLUDED
00020 #define MITKIMAGETOITKMULTIPLEXER_H_HEADER_INCLUDED
00021
00022 #include <itkCastImageFilter.h>
00023 #include <mitkImageToItk.h>
00024
00038 template < typename ItkInputImageType, typename ItkOutputImageType >
00039 typename itk::ImageSource < ItkOutputImageType > ::Pointer
00040 MakeCastImageFilter( ItkInputImageType* inputImage )
00041 {
00042 typedef itk::CastImageFilter < ItkInputImageType ,
00043 ItkOutputImageType > myFilterType;
00044 typename myFilterType::Pointer myFilter = myFilterType::New();
00045 myFilter->SetInput( inputImage );
00046 return myFilter.GetPointer();
00047 }
00048
00049 #define _calculateItkPipelineFunction(result, mitksource, itkpipelinefunction, type, dimension) \
00050 if ( typeId == typeid(type) ) \
00051 { \
00052 typedef itk::Image<type, dimension> ImageType; \
00053 typedef mitk::ImageToItk<ImageType> ImageToItkType; \
00054 typedef itk::SmartPointer<ImageToItkType> ImageToItkTypePointer; \
00055 typedef itk::ImageSource<ImageType> ImageFilterType; \
00056 typedef itk::SmartPointer<ImageFilterType> ImageFilterTypePointer; \
00057 \
00058 ImageToItkTypePointer myImageToItkFilter = ImageToItkType::New(); \
00059 myImageToItkFilter ->SetInput(mitksource); \
00060 \
00061 ImageFilterTypePointer itkpipeline = \
00062 itkpipelinefunction(myImageToItkFilter->GetOutput()).GetPointer(); \
00063 itkpipeline->Update(); \
00064 \
00065 result->InitializeByItk(itkpipeline->GetOutput()); \
00066 result->SetVolume(itkpipeline->GetOutput()->GetBufferPointer()); \
00067 }
00068
00069
00070 #define ItkFunctionMultiplexer(result, mitkSourceImage, itkfunction) \
00071 { \
00072 const std::type_info& typeId=*mitkSourceImage->GetPixelType().GetTypeId(); \
00073 switch (mitkSourceImage->GetDimension()) \
00074 { \
00075 case 2: \
00076 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, double, 2) else \
00077 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, float, 2) else \
00078 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, long, 2) else \
00079 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned long, 2) else \
00080 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, int, 2) else \
00081 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned int, 2) else \
00082 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, short, 2) else \
00083 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned short, 2) else \
00084 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, char, 2) else \
00085 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned char, 2) \
00086 break; \
00087 case 3: \
00088 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, double, 3) else \
00089 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, float, 3) else \
00090 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, long, 3) else \
00091 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned long, 3) else \
00092 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, int, 3) else \
00093 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned int, 3) else \
00094 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, short, 3) else \
00095 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned short, 3) else \
00096 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, char, 3) else \
00097 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned char, 3) \
00098 break; \
00099 case 4: \
00100 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, double, 4) else \
00101 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, float, 4) else \
00102 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, long, 4) else \
00103 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned long, 4) else \
00104 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, int, 4) else \
00105 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned int, 4) else \
00106 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, short, 4) else \
00107 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned short, 4) else \
00108 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, char, 4) else \
00109 _calculateItkPipelineFunction(result, mitkSourceImage, itkfunction, unsigned char, 4) \
00110 break; \
00111 default: break; \
00112 } \
00113 }
00114
00115
00116 #define _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitksource, itkpipelinefunction, type, dimension) \
00117 if ( typeId == typeid(type) ) \
00118 { \
00119 typedef itk::Image<type, dimension> ImageType; \
00120 typedef mitk::ImageToItk<ImageType> ImageToItkType; \
00121 typedef itk::SmartPointer<ImageToItkType> ImageToItkTypePointer; \
00122 typedef itk::ImageSource<resultItkImageType> ImageFilterType; \
00123 typedef itk::SmartPointer<ImageFilterType> ImageFilterTypePointer; \
00124 \
00125 ImageToItkTypePointer myImageToItkFilter = ImageToItkType::New(); \
00126 myImageToItkFilter->SetInput(mitksource); \
00127 \
00128 ImageFilterTypePointer itkpipeline = \
00129 itkpipelinefunction<ImageType,resultItkImageType>(myImageToItkFilter->GetOutput()).GetPointer(); \
00130 itkpipeline->Update(); \
00131 \
00132 resultItkImage = itkpipeline->GetOutput(); \
00133 }
00134
00135
00136
00137 #define AllInputDimensionMitkToItkFunctionMultiplexer(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction) \
00138 { \
00139 const std::type_info& typeId=*mitkSourceImage->GetPixelType().GetTypeId(); \
00140 switch (mitkSourceImage->GetDimension()) \
00141 { \
00142 case 2: \
00143 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, double, 2) else \
00144 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, float, 2) else \
00145 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, long, 2) else \
00146 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned long, 2) else \
00147 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, int, 2) else \
00148 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned int, 2) else \
00149 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, short, 2) else \
00150 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned short, 2) else \
00151 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, char, 2) else \
00152 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned char, 2) \
00153 break; \
00154 case 3: \
00155 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, double, 3) else \
00156 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, float, 3) else \
00157 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, long, 3) else \
00158 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned long, 3) else \
00159 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, int, 3) else \
00160 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned int, 3) else \
00161 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, short, 3) else \
00162 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned short, 3) else \
00163 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, char, 3) else \
00164 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned char, 3) \
00165 break; \
00166 case 4: \
00167 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, double, 4) else \
00168 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, float, 4) else \
00169 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, long, 4) else \
00170 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned long, 4) else \
00171 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, int, 4) else \
00172 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned int, 4) else \
00173 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, short, 4) else \
00174 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned short, 4) else \
00175 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, char, 4) else \
00176 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned char, 4) \
00177 break; \
00178 default: break; \
00179 } \
00180 }
00181
00182
00183
00184 #define FixedInputDimensionMitkToItkFunctionMultiplexer(resultItkImage, resultItkImageType, mitkSourceImage, inputDimension, itkfunction) \
00185 { \
00186 const std::type_info& typeId=*mitkSourceImage->GetPixelType().GetTypeId(); \
00187 if (mitkSourceImage->GetDimension() == inputDimension) \
00188 { \
00189 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, double, inputDimension) else \
00190 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, float, inputDimension) else \
00191 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, long, inputDimension) else \
00192 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned long, inputDimension) else \
00193 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, int, inputDimension) else \
00194 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned int, inputDimension) else \
00195 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, short, inputDimension) else \
00196 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned short, inputDimension) else \
00197 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, char, inputDimension) else \
00198 _calculateMitkToItkPipelineFunction(resultItkImage, resultItkImageType, mitkSourceImage, itkfunction, unsigned char, inputDimension) \
00199 } \
00200 }
00201
00202
00203 #include "mitkImageCast.h"
00204 #endif // of MITKIMAGETOITKMULTIPLEXER_H_HEADER_INCLUDED