cmtkElasticRegistration.h

Go to the documentation of this file.
00001 /*
00002 //
00003 //  Copyright 1997-2009 Torsten Rohlfing
00004 //
00005 //  Copyright 2004-2010 SRI International
00006 //
00007 //  This file is part of the Computational Morphometry Toolkit.
00008 //
00009 //  http://www.nitrc.org/projects/cmtk/
00010 //
00011 //  The Computational Morphometry Toolkit is free software: you can
00012 //  redistribute it and/or modify it under the terms of the GNU General Public
00013 //  License as published by the Free Software Foundation, either version 3 of
00014 //  the License, or (at your option) any later version.
00015 //
00016 //  The Computational Morphometry Toolkit is distributed in the hope that it
00017 //  will be useful, but WITHOUT ANY WARRANTY; without even the implied
00018 //  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019 //  GNU General Public License for more details.
00020 //
00021 //  You should have received a copy of the GNU General Public License along
00022 //  with the Computational Morphometry Toolkit.  If not, see
00023 //  <http://www.gnu.org/licenses/>.
00024 //
00025 //  $Revision: 2752 $
00026 //
00027 //  $LastChangedDate: 2011-01-17 11:33:31 -0800 (Mon, 17 Jan 2011) $
00028 //
00029 //  $LastChangedBy: torstenrohlfing $
00030 //
00031 */
00032 
00033 #ifndef __cmtkElasticRegistration_h_included_
00034 #define __cmtkElasticRegistration_h_included_
00035 
00036 #include <cmtkconfig.h>
00037 
00038 #include <Registration/cmtkVoxelRegistration.h>
00039 #include <Base/cmtkSplineWarpXform.h>
00040 #include <Base/cmtkMatchedLandmarkList.h>
00041 
00042 #include <string.h>
00043 
00044 namespace
00045 cmtk
00046 {
00047 
00050 
00057 class ElasticRegistration : 
00059   public VoxelRegistration 
00060 {
00061 protected:
00063   SplineWarpXform::SmartPtr InitialWarpXform;
00064 
00066   SplineWarpXform::SmartPtr InverseWarpXform;
00067 
00074   bool ForceSwitchVolumes;
00075   
00077   cmtkGetSetMacro(bool,MatchFltToRefHistogram);
00078 
00080   cmtkGetSetMacro(int,RefineGrid);
00081 
00086   cmtkGetSetMacro(bool,DelayRefineGrid);
00087 
00089   cmtkGetSetMacro(Types::Coordinate,GridSpacing);
00090 
00097   cmtkGetSetMacro(bool,ExactGridSpacing);
00098 
00100   unsigned int IgnoreEdge;
00101 
00104   const char* RestrictToAxes;
00105 
00107   cmtkGetSetMacro(bool,FastMode);
00108 
00110   cmtkGetSetMacro(bool,AdaptiveFixParameters);
00111 
00119   cmtkGetSetMacro(float,AdaptiveFixThreshFactor);
00120 
00122   cmtkGetSetMacro(float,JacobianConstraintWeight);
00123 
00125   cmtkGetSetMacro(float,RigidityConstraintWeight);
00126 
00128   cmtkGetSetMacro(UniformVolume::SmartPtr,RigidityConstraintMap);
00129 
00131   cmtkGetSetMacro(float,GridEnergyWeight);
00132 
00134   cmtkGetSetMacro(float,RelaxWeight);
00135 
00141   cmtkGetSetMacro(float,InverseConsistencyWeight);
00142 
00144   cmtkGetSetMacro(float,LandmarkErrorWeight);
00145 
00147   cmtkGetSetMacro(MatchedLandmarkList::SmartPtr,LandmarkList);
00148 
00150   bool m_RelaxToUnfold;
00151 
00153   virtual void SetForceOutside( const bool flag = true, const Types::DataItem value = 0 )
00154   {
00155     this->m_ForceOutsideFlag = flag;
00156     this->m_ForceOutsideValue = value;
00157   }
00158 
00162   ElasticRegistration();
00163 
00167   virtual ~ElasticRegistration() {};
00168 
00178   virtual CallbackResult InitRegistration ();
00179 
00182   virtual void EnterResolution( CoordinateVector::SmartPtr&, Functional::SmartPtr&, const int, const int );
00183 
00190   virtual int DoneResolution( CoordinateVector::SmartPtr&, Functional::SmartPtr&, const int, const int );
00192 
00194   SplineWarpXform::SmartPtr GetTransformation() const
00195   {
00196     return SplineWarpXform::SmartPtr::DynamicCastFrom( this->m_Xform );
00197   }
00198 
00200   const UniformVolume::SmartPtr GetReformattedFloatingImage( Interpolators::InterpolationEnum interpolator = Interpolators::LINEAR );
00201 
00202 private:
00204   int RefinedGridAtLevel;
00205 
00207   int RefineGridCount;
00208 
00210   typedef VoxelRegistration Superclass;
00211 
00213   bool RelaxationStep;
00214 
00216   bool RefineDelayed;
00217 
00219   bool m_ForceOutsideFlag;
00220 
00222   Types::DataItem m_ForceOutsideValue;
00223 
00231   const SplineWarpXform::SmartPtr MakeWarpXform( const Vector3D& size, const AffineXform* initialAffine ) const;
00232 
00243   Functional* MakeFunctional( UniformVolume::SmartPtr& refVolume, UniformVolume::SmartPtr& fltVolume, UniformVolume::SmartPtr& rigidityMap ) const;
00244 };
00245 
00247 
00248 } // namespace cmtk
00249 
00250 #endif // __cmtkElasticRegistration_h_included_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines