diff --git a/Modules/DiffusionImaging/DiffusionCore/Algorithms/mitkPyramidImageRegistrationMethod.cpp b/Modules/DiffusionImaging/DiffusionCore/Algorithms/mitkPyramidImageRegistrationMethod.cpp new file mode 100644 index 0000000000..878f8c47c4 --- /dev/null +++ b/Modules/DiffusionImaging/DiffusionCore/Algorithms/mitkPyramidImageRegistrationMethod.cpp @@ -0,0 +1,96 @@ +/*=================================================================== + +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" +#include "mitkImageAccessByItk.h" + +mitk::PyramidImageRegistrationMethod::PyramidImageRegistrationMethod() + : m_FixedImage(NULL), + m_MovingImage(NULL), + m_CrossModalityRegistration(true), + m_UseAffineTransform(true), + m_EstimatedParameters(NULL) +{ + +} + +mitk::PyramidImageRegistrationMethod::~PyramidImageRegistrationMethod() +{ + if( m_EstimatedParameters != NULL) + { + delete [] m_EstimatedParameters; + } +} + +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"; + } + + unsigned int allowedDimension = 3; + + if( m_FixedImage->GetDimension() != allowedDimension || + m_MovingImage->GetDimension() != allowedDimension ) + { + mitkThrow() << " Only 3D Images supported."; + } + + // + // One possibility: use the FixedDimesnionByItk, but this instantiates ALL possible + // pixel type combinations! + // AccessTwoImagesFixedDimensionByItk( m_FixedImage, m_MovingImage, RegisterTwoImages, 3); + // in helper: TypeSubset : short, float + AccessTwoImagesFixedDimensionTypeSubsetByItk( m_FixedImage, m_MovingImage, RegisterTwoImages, 3); + +} + +mitk::Image::Pointer mitk::PyramidImageRegistrationMethod +::GetResampledMovingImage() +{ + + mitk::Image::Pointer output = mitk::Image::New(); + //output->Initialize( this->m_FixedImage ); + + AccessFixedDimensionByItk_1( this->m_MovingImage, ResampleMitkImage, 3, output ); + + return output; + +} diff --git a/Modules/DiffusionImaging/DiffusionCore/IODataStructures/mitkRegistrationObject.cpp b/Modules/DiffusionImaging/DiffusionCore/IODataStructures/mitkRegistrationObject.cpp new file mode 100644 index 0000000000..8276d95253 --- /dev/null +++ b/Modules/DiffusionImaging/DiffusionCore/IODataStructures/mitkRegistrationObject.cpp @@ -0,0 +1,45 @@ +/*=================================================================== + +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 "mitkRegistrationObject.h" + +mitk::RegistrationObject::RegistrationObject() + : m_ReferenceGeometry(0), + m_Transformation(0) +{ + +} + +void mitk::RegistrationObject::SetReferenceGeometry(mitk::Geometry3D::Pointer geom) +{ + if( m_ReferenceGeometry.IsNull() ) + m_ReferenceGeometry = mitk::Geometry3D::New(); + + m_ReferenceGeometry = geom->Clone(); +} + +void mitk::RegistrationObject::SetReferenceImage(mitk::Image::Pointer image) +{ + this->SetReferenceGeometry( image->GetTimeSlicedGeometry()->GetGeometry() ); +} + +void mitk::RegistrationObject::SetTransformation(itk::AffineGeometryFrame::Pointer transform) +{ + if( m_Transformation.IsNull() ) + m_Transformation = mitk::AffineGeometryFrame3D::New(); + + m_Transformation = transform; +} diff --git a/Modules/DiffusionImaging/DiffusionCore/IODataStructures/mitkRegistrationObject.h b/Modules/DiffusionImaging/DiffusionCore/IODataStructures/mitkRegistrationObject.h new file mode 100644 index 0000000000..68ba030c63 --- /dev/null +++ b/Modules/DiffusionImaging/DiffusionCore/IODataStructures/mitkRegistrationObject.h @@ -0,0 +1,73 @@ +/*=================================================================== + +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 MITKREGISTRATIONOBJECT_H +#define MITKREGISTRATIONOBJECT_H + +#include + +#include "mitkBaseData.h" +#include "mitkGeometry3D.h" + +#include "mitkImage.h" + +namespace mitk +{ +/** + * @brief The RegistrationObject class stores all necessary information for image registration. + * + * + */ + +class DiffusionCore_EXPORT RegistrationObject : public BaseData +{ +public: + + mitkClassMacro( RegistrationObject, BaseData ); + itkNewMacro( Self ); + + void SetReferenceGeometry( mitk::Geometry3D::Pointer ); + + void SetReferenceImage( mitk::Image::Pointer ); + + void SetTransformation( mitk::AffineGeometryFrame3D::Pointer ); + + mitk::Geometry3D::Pointer GetReferenceGeometry() const + { + return m_ReferenceGeometry; + } + + mitk::AffineGeometryFrame3D::Pointer GetTransformation() const + { + return m_Transformation; + } + +protected: + RegistrationObject(); + virtual ~RegistrationObject(){} + + /** + * @brief Reference geometry of the fixed image used for registration computation + */ + mitk::Geometry3D::Pointer m_ReferenceGeometry; + + mitk::AffineGeometryFrame3D::Pointer m_Transformation; + + +}; + +} +#endif // MITKREGISTRATIONOBJECT_H diff --git a/Modules/DiffusionImaging/DiffusionCore/Testing/files.cmake b/Modules/DiffusionImaging/DiffusionCore/Testing/files.cmake index ad622dfcbb..bfd17c86db 100644 --- a/Modules/DiffusionImaging/DiffusionCore/Testing/files.cmake +++ b/Modules/DiffusionImaging/DiffusionCore/Testing/files.cmake @@ -1,4 +1,8 @@ set(MODULE_TESTS mitkFactoryRegistrationTest.cpp ) +set(MODULE_CUSTOM_TESTS + mitkPyramidImageRegistrationMethodTest.cpp +) + diff --git a/Modules/DiffusionImaging/DiffusionCore/files.cmake b/Modules/DiffusionImaging/DiffusionCore/files.cmake index 0a47620934..24f4dc0886 100644 --- a/Modules/DiffusionImaging/DiffusionCore/files.cmake +++ b/Modules/DiffusionImaging/DiffusionCore/files.cmake @@ -1,121 +1,124 @@ 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 + #IODataStructures/mitkRegistrationObject.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 Algorithms/Reconstruction/itkMultiShellRadialAdcKurtosisImageFilter.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 )