00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date: 2009-05-28 17:19:30 +0200 (Thu, 28 May 2009) $ 00006 Version: $Revision: 17495 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 #ifndef MITKPYRAMIDALREGISTRATIONMETHOD_H 00019 #define MITKPYRAMIDALREGISTRATIONMETHOD_H 00020 00021 #include "itkImageRegistrationMethod.h" 00022 #include "MitkRigidRegistrationExports.h" 00023 #include "itkSingleValuedNonLinearOptimizer.h" 00024 00025 #include "mitkImageToImageFilter.h" 00026 #include "mitkImageAccessByItk.h" 00027 #include "mitkRigidRegistrationObserver.h" 00028 #include "mitkCommon.h" 00029 #include "mitkOptimizerParameters.h" 00030 #include "mitkTransformParameters.h" 00031 #include "mitkMetricParameters.h" 00032 00033 #include "itkImageMaskSpatialObject.h" 00034 #include "mitkRigidRegistrationTestPreset.h" 00035 00036 00037 00038 namespace mitk 00039 { 00040 00041 00051 class MITK_RIGIDREGISTRATION_EXPORT PyramidalRegistrationMethod : public ImageToImageFilter 00052 { 00053 00054 public: 00055 00056 typedef itk::SingleValuedNonLinearOptimizer OptimizerType; 00057 typedef itk::ImageMaskSpatialObject< 3 > MaskType; 00058 00059 00060 mitkClassMacro(PyramidalRegistrationMethod, ImageToImageFilter); 00061 00062 itkNewMacro(Self); 00063 00064 static const int LINEARINTERPOLATOR = 0; 00065 static const int NEARESTNEIGHBORINTERPOLATOR = 1; 00066 00067 void SetObserver(RigidRegistrationObserver::Pointer observer); 00068 00069 void SetInterpolator(int interpolator); 00070 00071 virtual void GenerateData(); 00072 00073 virtual void SetReferenceImage( Image::Pointer fixedImage); 00074 00075 virtual void SetFixedMask( Image::Pointer fixedMask); 00076 00077 virtual void SetMovingMask( Image::Pointer movingMask); 00078 00079 void SetOptimizerParameters(OptimizerParameters::Pointer optimizerParameters) 00080 { 00081 m_OptimizerParameters = optimizerParameters; 00082 } 00083 00084 OptimizerParameters::Pointer GetOptimizerParameters() 00085 { 00086 return m_OptimizerParameters; 00087 } 00088 00089 void SetTransformParameters(TransformParameters::Pointer transformParameters) 00090 { 00091 m_TransformParameters = transformParameters; 00092 } 00093 00094 TransformParameters::Pointer GetTransformParameters() 00095 { 00096 return m_TransformParameters; 00097 } 00098 00099 void SetMetricParameters(MetricParameters::Pointer metricParameters) 00100 { 00101 m_MetricParameters = metricParameters; 00102 } 00103 00104 MetricParameters::Pointer GetMetricParameters() 00105 { 00106 return m_MetricParameters; 00107 } 00108 00109 void SetPresets(std::vector<std::string> presets) 00110 { 00111 m_Presets = presets; 00112 } 00113 00114 itkSetMacro(FixedSchedule, itk::Array2D<unsigned int>); 00115 itkSetMacro(MovingSchedule, itk::Array2D<unsigned int>); 00116 itkSetMacro(MatchHistograms, bool); 00117 itkGetMacro(Preset, mitk::RigidRegistrationTestPreset*); 00118 itkSetMacro(BlurFixedImage, bool); 00119 itkSetMacro(BlurMovingImage, bool); 00120 00121 00122 protected: 00123 PyramidalRegistrationMethod(); 00124 virtual ~PyramidalRegistrationMethod(); 00125 00126 template < typename TPixel, unsigned int VImageDimension > 00127 void GenerateData2( itk::Image<TPixel, VImageDimension>* itkImage1); 00128 00129 RigidRegistrationObserver::Pointer m_Observer; 00130 int m_Interpolator; 00131 Image::Pointer m_ReferenceImage; 00132 Image::Pointer m_FixedMask; 00133 Image::Pointer m_MovingMask; 00134 00135 void GenerateOutputInformation(){}; 00136 00137 00138 private: 00139 OptimizerParameters::Pointer m_OptimizerParameters; 00140 TransformParameters::Pointer m_TransformParameters; 00141 MetricParameters::Pointer m_MetricParameters; 00142 00143 std::vector<std::string> m_Presets; 00144 mitk::RigidRegistrationTestPreset* m_Preset; 00145 00146 // Schedules 00147 itk::Array2D<unsigned int> m_FixedSchedule; 00148 itk::Array2D<unsigned int> m_MovingSchedule; 00149 00150 00151 bool m_UseMask; 00152 bool m_MatchHistograms; 00153 bool m_BlurFixedImage; 00154 bool m_BlurMovingImage; 00155 MaskType::Pointer m_BrainMask; 00156 00157 mitk::TransformParameters::Pointer ParseTransformParameters(itk::Array<double> transformValues); 00158 mitk::MetricParameters::Pointer ParseMetricParameters(itk::Array<double> metricValues); 00159 mitk::OptimizerParameters::Pointer ParseOptimizerParameters(itk::Array<double> optimizerValues); 00160 00161 00162 }; 00163 } 00164 00165 00166 #endif // MITKIMAGEREGISTRATIONMETHOD_H 00167