00001 /* 00002 // 00003 // Copyright 1997-2009 Torsten Rohlfing 00004 // Copyright 2004-2009 SRI International 00005 // 00006 // This file is part of the Computational Morphometry Toolkit. 00007 // 00008 // http://www.nitrc.org/projects/cmtk/ 00009 // 00010 // The Computational Morphometry Toolkit is free software: you can 00011 // redistribute it and/or modify it under the terms of the GNU General Public 00012 // License as published by the Free Software Foundation, either version 3 of 00013 // the License, or (at your option) any later version. 00014 // 00015 // The Computational Morphometry Toolkit is distributed in the hope that it 00016 // will be useful, but WITHOUT ANY WARRANTY; without even the implied 00017 // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 // GNU General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU General Public License along 00021 // with the Computational Morphometry Toolkit. If not, see 00022 // <http://www.gnu.org/licenses/>. 00023 // 00024 // $Revision: 2398 $ 00025 // 00026 // $LastChangedDate: 2010-10-05 14:54:37 -0700 (Tue, 05 Oct 2010) $ 00027 // 00028 // $LastChangedBy: torstenrohlfing $ 00029 // 00030 */ 00031 00032 #include <cmtkconfig.h> 00033 00034 #include <Base/cmtkUniformVolume.h> 00035 #include <Base/cmtkAffineXform.h> 00036 #include <Base/cmtkSplineWarpXform.h> 00037 00038 namespace 00039 cmtk 00040 { 00041 00042 class AtlasSegmentation 00043 { 00044 public: 00046 AtlasSegmentation( UniformVolume::SmartPtr& targetImage, UniformVolume::SmartPtr& atlasImage, UniformVolume::SmartPtr& atlasLabels ); 00047 00049 AffineXform::SmartPtr& GetAffineXform() 00050 { 00051 if ( ! this->m_AffineXform ) 00052 this->RegisterAffine(); 00053 return this->m_AffineXform; 00054 } 00055 00057 WarpXform::SmartPtr GetWarpXform() 00058 { 00059 if ( ! this->m_WarpXform ) 00060 this->RegisterSpline(); 00061 return this->m_WarpXform; 00062 } 00063 00065 SplineWarpXform::SmartPtr GetSplineWarpXform() 00066 { 00067 return SplineWarpXform::SmartPtr::DynamicCastFrom( this->GetWarpXform() ); 00068 } 00069 00071 UniformVolume::SmartPtr& GetLabelMap() 00072 { 00073 if ( ! this->m_LabelMap ) 00074 this->ReformatLabels(); 00075 return this->m_LabelMap; 00076 } 00077 00079 void SetVerbose( const bool verbose ) 00080 { 00081 this->m_Verbose = verbose; 00082 } 00083 00085 void SetFast( const bool fast ) 00086 { 00087 this->m_Fast = fast; 00088 } 00089 00090 private: 00092 bool m_Verbose; 00093 00095 bool m_Fast; 00096 00098 UniformVolume::SmartPtr m_TargetImage; 00099 00101 UniformVolume::SmartPtr m_AtlasImage; 00102 00104 UniformVolume::SmartPtr m_AtlasLabels; 00105 00107 AffineXform::SmartPtr m_AffineXform; 00108 00110 void RegisterAffine(); 00111 00113 WarpXform::SmartPtr m_WarpXform; 00114 00116 void RegisterSpline(); 00117 00119 UniformVolume::SmartPtr m_LabelMap; 00120 00122 void ReformatLabels(); 00123 }; 00124 00125 } // namespace cmtk