/* * Copyright (c) ICG. All rights reserved. * * Institute for Computer Graphics and Vision * Graz, University of Technology / Austria * * * This software is distributed WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the above copyright notices for more information. * * * Project : projects * Module : MIPViewer - plugins * Class : $RCSfile: CTNonlinearRegistrationBase.h,v $ * Language : C++ * Description : * * Author : Martin Urschler * EMail : urschler@icg.tu-graz.ac.at * Date : $Date: 2007-07-02 15:15:04 $ * Version : $Revision: 1.9 $ * Full Id : $Id: CTNonlinearRegistrationBase.h,v 1.9 2007-07-02 15:15:04 urschler Exp $ * */ #ifndef _CTNONLINEARREGISTRATIONBASE_H_ #define _CTNONLINEARREGISTRATIONBASE_H_ // this is needed although it might not seem so! #include "mlmath.hpp" #include "commonItkTypedefs.h" #include "DownAndUpsampleUtilities.h" #include "CTNonlinearRegistrationReturnValue.h" #define MY_DEBUG_MACRO(arg) std::cout << arg << std::endl; #define EXCEPTION_CHECKED_ITK_FILTER_UPDATE( message, arg ) \ try \ { \ if (message != std::string("")) \ MY_DEBUG_MACRO(message); \ arg; \ } \ catch( itk::MemoryAllocationError& err ) \ { \ MY_DEBUG_MACRO("ITK Memory Allocation Error!"); \ MY_DEBUG_MACRO(err); \ return CTNonlinearRegistration::MEMORY_EXCEPTION; \ } \ catch( itk::ExceptionObject& err ) \ { \ MY_DEBUG_MACRO("ITK Exception Object caught!"); \ MY_DEBUG_MACRO(err); \ return CTNonlinearRegistration::UNKNOWN_EXCEPTION; \ } template< typename TPixelDataType > class CTNonlinearRegistrationBase { typedef CTNonlinearRegistrationBase Self; public: typedef Int16ImageType3D InputImageType; CTNonlinearRegistrationBase(); virtual ~CTNonlinearRegistrationBase(); void setDisplacementFieldFilename( const std::string& displacementFieldFilename ); void setImageFilenames( const std::string& fixedFilename, const std::string& movingFilename ); void setImageOutputFilename( const std::string& outputFilename ); void setResampleDefaultValue( const int resampleDefaultValue ); CTNonlinearRegistration::ReturnType setFixedImage(TPixelDataType * ptr, const int nrSlices, const int nrRows, const int nrCols, const float sliceDistance, const float inplaneVoxelSizeX, const float inplaneVoxelSizeY ); CTNonlinearRegistration::ReturnType setMovingImage(TPixelDataType * ptr, const int nrSlices, const int nrRows, const int nrCols, const float sliceDistance, const float inplaneVoxelSizeX, const float inplaneVoxelSizeY ); protected: typedef std::vector< typename InputImageType::Pointer > PyramidType; CTNonlinearRegistration::ReturnType calculateFixedAndMovingPyramid( PyramidType& fixedPyramid, PyramidType& movingPyramid ); static CTNonlinearRegistration::ReturnType calculateImagePyramid( const typename InputImageType::Pointer& image, PyramidType& Pyramid, DownAndUpsampleUtilities::PyramidDownsampleModeSequence& downsampleModeSequence ); CTNonlinearRegistration::ReturnType warpMovingImage( const DeformationFieldType::Pointer deformationField ); // member variables typename InputImageType::Pointer m_fixedImage; typename InputImageType::Pointer m_movingImage; typename InputImageType::SizeType m_fixedImageSize; typename InputImageType::SizeType m_movingImageSize; typename InputImageType::SpacingType m_fixedImageSpacing; typename InputImageType::SpacingType m_movingImageSpacing; std::string m_displacementFieldFilename; std::string m_fixedFilename; std::string m_movingFilename; std::string m_imageOutputFilename; int m_resampleDefaultValue; DownAndUpsampleUtilities::PyramidDownsampleModeSequence m_fixedDownsampleModeSequence; DownAndUpsampleUtilities::PyramidDownsampleModeSequence m_movingDownsampleModeSequence; private: CTNonlinearRegistrationBase( const Self& ); Self& operator=( const Self& ); static bool testPowerOfTwoImageSize( const typename InputImageType::SizeType& size ); static bool testDivisibleByTwoImageSize( const typename InputImageType::SizeType& size, const unsigned int nrTimesDivisible ); }; #endif // _CTNONLINEARREGISTRATIONBASE_H_