diff --git a/Modules/DiffusionImaging/DiffusionCore/Algorithms/mitkPyramidImageRegistrationMethod.cpp b/Modules/DiffusionImaging/DiffusionCore/Algorithms/mitkPyramidImageRegistrationMethod.cpp new file mode 100644 index 0000000000..0865c005b9 --- /dev/null +++ b/Modules/DiffusionImaging/DiffusionCore/Algorithms/mitkPyramidImageRegistrationMethod.cpp @@ -0,0 +1,65 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#include "mitkPyramidImageRegistrationMethod.h" + +#include "mitkException.h" + +mitk::PyramidImageRegistrationMethod::PyramidImageRegistrationMethod() + : m_FixedImage(NULL), + m_MovingImage(NULL), + m_CrossModalityRegistration(true), + m_UseAffineTransform(true) +{ + +} + +mitk::PyramidImageRegistrationMethod::~PyramidImageRegistrationMethod() +{ + +} + +void mitk::PyramidImageRegistrationMethod::SetFixedImage(mitk::Image::Pointer fixed) +{ + if( fixed.IsNotNull() ) + { + m_FixedImage = fixed; + } +} + +void mitk::PyramidImageRegistrationMethod::SetMovingImage(mitk::Image::Pointer moving) +{ + if( moving.IsNotNull() ) + { + m_MovingImage = moving; + } +} + +void mitk::PyramidImageRegistrationMethod::Update() +{ + if( m_MovingImage.IsNull() ) + { + mitkThrow() << " Moving image is null"; + } + + if( m_FixedImage.IsNull() ) + { + mitkThrow() << " Moving image is null"; + } + + + +} diff --git a/Modules/DiffusionImaging/DiffusionCore/Algorithms/mitkPyramidImageRegistrationMethod.h b/Modules/DiffusionImaging/DiffusionCore/Algorithms/mitkPyramidImageRegistrationMethod.h new file mode 100644 index 0000000000..227904f762 --- /dev/null +++ b/Modules/DiffusionImaging/DiffusionCore/Algorithms/mitkPyramidImageRegistrationMethod.h @@ -0,0 +1,116 @@ +/*=================================================================== + +The Medical Imaging Interaction Toolkit (MITK) + +Copyright (c) German Cancer Research Center, +Division of Medical and Biological Informatics. +All rights reserved. + +This software is distributed WITHOUT ANY WARRANTY; without +even the implied warranty of MERCHANTABILITY or FITNESS FOR +A PARTICULAR PURPOSE. + +See LICENSE.txt or http://www.mitk.org for details. + +===================================================================*/ + +#ifndef MITKPYRAMIDIMAGEREGISTRATION_H +#define MITKPYRAMIDIMAGEREGISTRATION_H + +#include + +#include + +#include "mitkImage.h" +#include "mitkBaseProcess.h" + + +namespace mitk +{ + +/** + * @brief The PyramidImageRegistration class implements a multi-scale registration method + * + * The PyramidImageRegistration class is suitable for aligning (f.e.) brain MR images. The method offers two + * transform types + * - Rigid: optimizing translation and rotation only and + * - Affine ( default ): with scaling in addition ( 12 DOF ) + * + * The error metric is internally chosen based on the selected task type ( @sa SetCrossModalityOn ) + * It uses + * - MattesMutualInformation for CrossModality=on ( default ) and + * - NormalizedCorrelation for CrossModality=off. + */ +class DiffusionCore_EXPORT PyramidImageRegistrationMethod : + public itk::Object +{ +public: + + /** Typedefs */ + mitkClassMacro(PyramidImageRegistrationMethod, itk::Object) + + /** Smart pointer support */ + itkNewMacro(Self) + + /** Registration is between modalities - will take MattesMutualInformation as error metric */ + void SetCrossModalityOn() + { + m_CrossModalityRegistration = true; + } + + /** Registration is between modalities - will take NormalizedCorrelation as error metric */ + void SetCrossModalityOff() + { + m_CrossModalityRegistration = false; + } + + /** Turn the cross-modality on/off */ + void SetCrossModality(bool flag) + { + if( flag ) + this->SetCrossModalityOn(); + else + this->SetCrossModalityOff(); + } + + /** A rigid ( 6dof : translation + rotation ) transform is optimized */ + void SetTransformToRigid() + { + m_UseAffineTransform = false; + } + + /** An affine ( 12dof : Rigid + scale + skew ) transform is optimized */ + void SetTransformToAffine() + { + m_UseAffineTransform = true; + } + + /** Input image, the reference one */ + void SetFixedImage( mitk::Image::Pointer ); + + /** Input image, the one to be transformed */ + void SetMovingImage( mitk::Image::Pointer ); + + void Update(); + + +protected: + PyramidImageRegistrationMethod(); + + ~PyramidImageRegistrationMethod(); + + /** Fixed image, used as reference for registration */ + mitk::Image::Pointer m_FixedImage; + + /** Moving image, will be transformed */ + mitk::Image::Pointer m_MovingImage; + + bool m_CrossModalityRegistration; + + bool m_UseAffineTransform; + +}; + +} // end namespace + +#endif // MITKPYRAMIDIMAGEREGISTRATION_H diff --git a/Modules/DiffusionImaging/DiffusionCore/files.cmake b/Modules/DiffusionImaging/DiffusionCore/files.cmake index 0965a55ebc..bf008c819f 100644 --- a/Modules/DiffusionImaging/DiffusionCore/files.cmake +++ b/Modules/DiffusionImaging/DiffusionCore/files.cmake @@ -1,120 +1,121 @@ set(CPP_FILES # DicomImport DicomImport/mitkDicomDiffusionImageReader.cpp # DicomImport/mitkGroupDiffusionHeadersFilter.cpp DicomImport/mitkDicomDiffusionImageHeaderReader.cpp DicomImport/mitkGEDicomDiffusionImageHeaderReader.cpp DicomImport/mitkPhilipsDicomDiffusionImageHeaderReader.cpp DicomImport/mitkSiemensDicomDiffusionImageHeaderReader.cpp DicomImport/mitkSiemensMosaicDicomDiffusionImageHeaderReader.cpp # DataStructures IODataStructures/mitkDiffusionCoreObjectFactory.cpp # DataStructures -> DWI IODataStructures/DiffusionWeightedImages/mitkDiffusionImageHeaderInformation.cpp IODataStructures/DiffusionWeightedImages/mitkDiffusionImageSource.cpp IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageReader.cpp IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageWriter.cpp IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageIOFactory.cpp IODataStructures/DiffusionWeightedImages/mitkNrrdDiffusionImageWriterFactory.cpp IODataStructures/DiffusionWeightedImages/mitkDiffusionImageSerializer.cpp # DataStructures -> QBall IODataStructures/QBallImages/mitkQBallImageSource.cpp IODataStructures/QBallImages/mitkNrrdQBallImageReader.cpp IODataStructures/QBallImages/mitkNrrdQBallImageWriter.cpp IODataStructures/QBallImages/mitkNrrdQBallImageIOFactory.cpp IODataStructures/QBallImages/mitkNrrdQBallImageWriterFactory.cpp IODataStructures/QBallImages/mitkQBallImage.cpp IODataStructures/QBallImages/mitkQBallImageSerializer.cpp # DataStructures -> Tensor IODataStructures/TensorImages/mitkTensorImageSource.cpp IODataStructures/TensorImages/mitkNrrdTensorImageReader.cpp IODataStructures/TensorImages/mitkNrrdTensorImageWriter.cpp IODataStructures/TensorImages/mitkNrrdTensorImageIOFactory.cpp IODataStructures/TensorImages/mitkNrrdTensorImageWriterFactory.cpp IODataStructures/TensorImages/mitkTensorImage.cpp IODataStructures/TensorImages/mitkTensorImageSerializer.cpp # Rendering Rendering/vtkMaskedProgrammableGlyphFilter.cpp Rendering/mitkCompositeMapper.cpp Rendering/mitkVectorImageVtkGlyphMapper3D.cpp Rendering/vtkOdfSource.cxx Rendering/vtkThickPlane.cxx Rendering/mitkOdfNormalizationMethodProperty.cpp Rendering/mitkOdfScaleByProperty.cpp Rendering/mitkPlanarFigureMapper3D.cpp # Algorithms Algorithms/mitkPartialVolumeAnalysisHistogramCalculator.cpp Algorithms/mitkPartialVolumeAnalysisClusteringCalculator.cpp Algorithms/itkDwiGradientLengthCorrectionFilter.cpp + Algorithms/mitkPyramidImageRegistrationMethod.cpp # Function Collection mitkDiffusionFunctionCollection.cpp ) set(H_FILES # function Collection mitkDiffusionFunctionCollection.h # Rendering Rendering/mitkDiffusionImageMapper.h Rendering/mitkOdfVtkMapper2D.h Rendering/mitkPlanarFigureMapper3D.h # Reconstruction Algorithms/Reconstruction/itkDiffusionQballReconstructionImageFilter.h Algorithms/Reconstruction/mitkTeemDiffusionTensor3DReconstructionImageFilter.h Algorithms/Reconstruction/itkAnalyticalDiffusionQballReconstructionImageFilter.h Algorithms/Reconstruction/itkDiffusionMultiShellQballReconstructionImageFilter.h Algorithms/Reconstruction/itkPointShell.h Algorithms/Reconstruction/itkOrientationDistributionFunction.h Algorithms/Reconstruction/itkDiffusionIntravoxelIncoherentMotionReconstructionImageFilter.h Algorithms/Reconstruction/itkMultiShellAdcAverageReconstructionImageFilter.h # IO Datastructures IODataStructures/DiffusionWeightedImages/mitkDiffusionImage.h # Algorithms Algorithms/itkDiffusionQballGeneralizedFaImageFilter.h Algorithms/itkDiffusionQballPrepareVisualizationImageFilter.h Algorithms/itkTensorDerivedMeasurementsFilter.h Algorithms/itkBrainMaskExtractionImageFilter.h Algorithms/itkB0ImageExtractionImageFilter.h Algorithms/itkB0ImageExtractionToSeparateImageFilter.h Algorithms/itkTensorImageToDiffusionImageFilter.h Algorithms/itkTensorToL2NormImageFilter.h Algorithms/itkGaussianInterpolateImageFunction.h Algorithms/mitkPartialVolumeAnalysisHistogramCalculator.h Algorithms/mitkPartialVolumeAnalysisClusteringCalculator.h Algorithms/itkDiffusionTensorPrincipalDirectionImageFilter.h Algorithms/itkCartesianToPolarVectorImageFilter.h Algorithms/itkPolarToCartesianVectorImageFilter.h Algorithms/itkDistanceMapFilter.h Algorithms/itkProjectionFilter.h Algorithms/itkResidualImageFilter.h Algorithms/itkExtractChannelFromRgbaImageFilter.h Algorithms/itkTensorReconstructionWithEigenvalueCorrectionFilter.h Algorithms/itkMergeDiffusionImagesFilter.h Algorithms/itkDwiPhantomGenerationFilter.h Algorithms/itkFiniteDiffOdfMaximaExtractionFilter.h Algorithms/itkMrtrixPeakImageConverter.h Algorithms/itkFslPeakImageConverter.h Algorithms/itkShCoefficientImageImporter.h Algorithms/itkOdfMaximaExtractionFilter.h Algorithms/itkResampleDwiImageFilter.h Algorithms/itkDwiGradientLengthCorrectionFilter.h Algorithms/itkAdcImageFilter.h ) set( TOOL_FILES )