/* * 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: CTNonlinearRegistrationInterface.txx,v $ * Language : C++ * Description : * * Author : Martin Urschler * EMail : urschler@icg.tu-graz.ac.at * Date : $Date: 2007-07-11 16:39:04 $ * Version : $Revision: 1.26 $ * Full Id : $Id: CTNonlinearRegistrationInterface.txx,v 1.26 2007-07-11 16:39:04 urschler Exp $ * */ #ifndef _CTNONLINEARREGISTRATIONINTERFACE_TXX_ #define _CTNONLINEARREGISTRATIONINTERFACE_TXX_ #include "CTStandardDemonsRegistration.h" #include "CTSymmetricDemonsRegistration.h" #include "CTLevelSetMotionRegistration.h" #include "CTCurvatureRegistration.h" #include "CTFastBlockMatchingRegistration.h" #include "CTDiffeomorphicDemonsRegistration.h" template CTNonlinearRegistration::ReturnType CTNonlinearRegistrationInterface< TPixelDataType >:: standardDemonsMatching( TPixelDataType * fixedPtr, const int fixedSlices, const int fixedRows, const int fixedCols, const float fixedSliceDistance, const float fixedInplaneVoxelSizeX, const float fixedInplaneVoxelSizeY, TPixelDataType * movingPtr, const int movingSlices, const int movingRows, const int movingCols, const float movingSliceDistance, const float movingInplaneVoxelSizeX, const float movingInplaneVoxelSizeY, const unsigned int maxNrShrinkLevels, const unsigned int iterationsParam1, const unsigned int iterationsParam2 ) { CTStandardDemonsRegistration registrationObject; registrationObject.setImageFilenames( m_fixedFilename, m_movingFilename ); registrationObject.setImageOutputFilename( m_imageOutputFilename ); registrationObject.setResampleDefaultValue( m_resampleDefaultValue ); if (m_displacementFieldFilename != "") { registrationObject.setDisplacementFieldFilename( m_displacementFieldFilename); } registrationObject.setFixedImage(fixedPtr, fixedSlices, fixedRows, fixedCols, fixedSliceDistance, fixedInplaneVoxelSizeX, fixedInplaneVoxelSizeY); registrationObject.setMovingImage(movingPtr, movingSlices, movingRows, movingCols, movingSliceDistance, movingInplaneVoxelSizeX, movingInplaneVoxelSizeY); return registrationObject.matching( maxNrShrinkLevels, iterationsParam1, iterationsParam2 ); } template CTNonlinearRegistration::ReturnType CTNonlinearRegistrationInterface< TPixelDataType >:: symmetricDemonsMatching( TPixelDataType * fixedPtr, const int fixedSlices, const int fixedRows, const int fixedCols, const float fixedSliceDistance, const float fixedInplaneVoxelSizeX, const float fixedInplaneVoxelSizeY, TPixelDataType * movingPtr, const int movingSlices, const int movingRows, const int movingCols, const float movingSliceDistance, const float movingInplaneVoxelSizeX, const float movingInplaneVoxelSizeY, const unsigned int maxNrShrinkLevels, const unsigned int iterationsParam1, const unsigned int iterationsParam2 ) { CTSymmetricDemonsRegistration registrationObject; registrationObject.setResampleDefaultValue( m_resampleDefaultValue ); registrationObject.setImageOutputFilename( m_imageOutputFilename ); registrationObject.setImageFilenames( m_fixedFilename, m_movingFilename ); if (m_displacementFieldFilename != "") { registrationObject.setDisplacementFieldFilename( m_displacementFieldFilename); } registrationObject.setFixedImage(fixedPtr, fixedSlices, fixedRows, fixedCols, fixedSliceDistance, fixedInplaneVoxelSizeX, fixedInplaneVoxelSizeY); registrationObject.setMovingImage(movingPtr, movingSlices, movingRows, movingCols, movingSliceDistance, movingInplaneVoxelSizeX, movingInplaneVoxelSizeY); return registrationObject.matching( maxNrShrinkLevels, iterationsParam1, iterationsParam2 ); } template CTNonlinearRegistration::ReturnType CTNonlinearRegistrationInterface< TPixelDataType >:: curvatureMatching( TPixelDataType * fixedPtr, const int fixedSlices, const int fixedRows, const int fixedCols, const float fixedSliceDistance, const float fixedInplaneVoxelSizeX, const float fixedInplaneVoxelSizeY, TPixelDataType * movingPtr, const int movingSlices, const int movingRows, const int movingCols, const float movingSliceDistance, const float movingInplaneVoxelSizeX, const float movingInplaneVoxelSizeY, const unsigned int maxNrShrinkLevels, const unsigned int iterationsParam1, const unsigned int iterationsParam2 ) { CTCurvatureRegistration registrationObject; registrationObject.setResampleDefaultValue( m_resampleDefaultValue ); registrationObject.setImageOutputFilename( m_imageOutputFilename ); registrationObject.setImageFilenames( m_fixedFilename, m_movingFilename ); if (m_displacementFieldFilename != "") { registrationObject.setDisplacementFieldFilename( m_displacementFieldFilename); } registrationObject.setFixedImage(fixedPtr, fixedSlices, fixedRows, fixedCols, fixedSliceDistance, fixedInplaneVoxelSizeX, fixedInplaneVoxelSizeY); registrationObject.setMovingImage(movingPtr, movingSlices, movingRows, movingCols, movingSliceDistance, movingInplaneVoxelSizeX, movingInplaneVoxelSizeY); return registrationObject.matching( maxNrShrinkLevels, iterationsParam1, iterationsParam2 ); } template CTNonlinearRegistration::ReturnType CTNonlinearRegistrationInterface< TPixelDataType >:: levelSetMotionMatching( TPixelDataType * fixedPtr, const int fixedSlices, const int fixedRows, const int fixedCols, const float fixedSliceDistance, const float fixedInplaneVoxelSizeX, const float fixedInplaneVoxelSizeY, TPixelDataType * movingPtr, const int movingSlices, const int movingRows, const int movingCols, const float movingSliceDistance, const float movingInplaneVoxelSizeX, const float movingInplaneVoxelSizeY, const unsigned int maxNrShrinkLevels, const unsigned int iterationsParam1, const unsigned int iterationsParam2 ) { CTLevelSetMotionRegistration registrationObject; registrationObject.setResampleDefaultValue( m_resampleDefaultValue ); registrationObject.setImageOutputFilename( m_imageOutputFilename ); registrationObject.setImageFilenames( m_fixedFilename, m_movingFilename ); if (m_displacementFieldFilename != "") { registrationObject.setDisplacementFieldFilename( m_displacementFieldFilename); } registrationObject.setFixedImage(fixedPtr, fixedSlices, fixedRows, fixedCols, fixedSliceDistance, fixedInplaneVoxelSizeX, fixedInplaneVoxelSizeY); registrationObject.setMovingImage(movingPtr, movingSlices, movingRows, movingCols, movingSliceDistance, movingInplaneVoxelSizeX, movingInplaneVoxelSizeY); return registrationObject.matching( maxNrShrinkLevels, iterationsParam1, iterationsParam2 ); } template CTNonlinearRegistration::ReturnType CTNonlinearRegistrationInterface< TPixelDataType >:: fastBlockMatching( TPixelDataType * fixedPtr, const int fixedSlices, const int fixedRows, const int fixedCols, const float fixedSliceDistance, const float fixedInplaneVoxelSizeX, const float fixedInplaneVoxelSizeY, TPixelDataType * movingPtr, const int movingSlices, const int movingRows, const int movingCols, const float movingSliceDistance, const float movingInplaneVoxelSizeX, const float movingInplaneVoxelSizeY, const float regularization, const float similarity, const unsigned int levelsNotToCompute ) { CTFastBlockMatchingRegistration registrationObject; registrationObject.setResampleDefaultValue( m_resampleDefaultValue ); registrationObject.setImageOutputFilename( m_imageOutputFilename ); if (m_displacementFieldFilename != "") { registrationObject.setDisplacementFieldFilename( m_displacementFieldFilename); } registrationObject.setImageFilenames( m_fixedFilename, m_movingFilename ); registrationObject.setFixedImage(fixedPtr, fixedSlices, fixedRows, fixedCols, fixedSliceDistance, fixedInplaneVoxelSizeX, fixedInplaneVoxelSizeY); registrationObject.setMovingImage(movingPtr, movingSlices, movingRows, movingCols, movingSliceDistance, movingInplaneVoxelSizeX, movingInplaneVoxelSizeY); return registrationObject.matching( regularization, similarity, levelsNotToCompute ); } template CTNonlinearRegistration::ReturnType CTNonlinearRegistrationInterface< TPixelDataType >:: diffeomorphicDemonsMatching( TPixelDataType * fixedPtr, const int fixedSlices, const int fixedRows, const int fixedCols, const float fixedSliceDistance, const float fixedInplaneVoxelSizeX, const float fixedInplaneVoxelSizeY, TPixelDataType * movingPtr, const int movingSlices, const int movingRows, const int movingCols, const float movingSliceDistance, const float movingInplaneVoxelSizeX, const float movingInplaneVoxelSizeY, const unsigned int maxNrShrinkLevels, const unsigned int iterationsParam1, const unsigned int iterationsParam2, const float sigmaDeformationField, const float sigmaUpdateField, const float maxLengthUpdateField, const unsigned int demonsForceGradientType ) { CTDiffeomorphicDemonsRegistration registrationObject; registrationObject.setResampleDefaultValue( m_resampleDefaultValue ); registrationObject.setImageOutputFilename( m_imageOutputFilename ); if (m_displacementFieldFilename != "") { registrationObject.setDisplacementFieldFilename( m_displacementFieldFilename); } registrationObject.setImageFilenames( m_fixedFilename, m_movingFilename ); registrationObject.setFixedImage(fixedPtr, fixedSlices, fixedRows, fixedCols, fixedSliceDistance, fixedInplaneVoxelSizeX, fixedInplaneVoxelSizeY); registrationObject.setMovingImage(movingPtr, movingSlices, movingRows, movingCols, movingSliceDistance, movingInplaneVoxelSizeX, movingInplaneVoxelSizeY); return registrationObject.matching( maxNrShrinkLevels, iterationsParam1, iterationsParam2, sigmaDeformationField, sigmaUpdateField, maxLengthUpdateField, demonsForceGradientType ); } #endif // _CTNONLINEARREGISTRATIONINTERFACE_TXX_