00001 /* 00002 // 00003 // Copyright 2009-2010 SRI International 00004 // 00005 // This file is part of the Computational Morphometry Toolkit. 00006 // 00007 // http://www.nitrc.org/projects/cmtk/ 00008 // 00009 // The Computational Morphometry Toolkit is free software: you can 00010 // redistribute it and/or modify it under the terms of the GNU General Public 00011 // License as published by the Free Software Foundation, either version 3 of 00012 // the License, or (at your option) any later version. 00013 // 00014 // The Computational Morphometry Toolkit is distributed in the hope that it 00015 // will be useful, but WITHOUT ANY WARRANTY; without even the implied 00016 // warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 // GNU General Public License for more details. 00018 // 00019 // You should have received a copy of the GNU General Public License along 00020 // with the Computational Morphometry Toolkit. If not, see 00021 // <http://www.gnu.org/licenses/>. 00022 // 00023 // $Revision: 2398 $ 00024 // 00025 // $LastChangedDate: 2010-10-05 14:54:37 -0700 (Tue, 05 Oct 2010) $ 00026 // 00027 // $LastChangedBy: torstenrohlfing $ 00028 // 00029 */ 00030 00031 #ifndef __cmtkImageOperationErodeDilate_h_included_ 00032 #define __cmtkImageOperationErodaDilate_h_included_ 00033 00034 #include <cmtkconfig.h> 00035 00036 #include <Base/cmtkImageOperation.h> 00037 #include <Base/cmtkDataGridMorphologicalOperators.h> 00038 00039 namespace 00040 cmtk 00041 { 00042 00044 class ImageOperationErodeDilate 00046 : public ImageOperation 00047 { 00048 public: 00050 ImageOperationErodeDilate( const int iterations ) : m_Iterations( iterations ) {} 00051 00053 virtual cmtk::UniformVolume::SmartPtr Apply( cmtk::UniformVolume::SmartPtr& volume ) 00054 { 00055 if ( this->m_Iterations < 0 ) 00056 { 00057 cmtk::DataGridMorphologicalOperators ops( volume ); 00058 volume->SetData( ops.GetEroded( -this->m_Iterations ) ); 00059 } 00060 else 00061 { 00062 if ( this->m_Iterations > 0 ) 00063 { 00064 cmtk::DataGridMorphologicalOperators ops( volume ); 00065 volume->SetData( ops.GetDilated( this->m_Iterations ) ); 00066 } 00067 } 00068 return volume; 00069 } 00070 00072 static void NewDilate( const long int iterations ) 00073 { 00074 ImageOperation::m_ImageOperationList.push_back( SmartPtr( new ImageOperationErodeDilate( iterations ) ) ); 00075 } 00076 00078 static void NewErode( const long int iterations ) 00079 { 00080 ImageOperation::m_ImageOperationList.push_back( SmartPtr( new ImageOperationErodeDilate( -iterations ) ) ); 00081 } 00082 00083 private: 00085 int m_Iterations; 00086 }; 00087 00088 } // namespace cmtk 00089 00090 #endif // #ifndef __cmtkImageOperationErodeDilate_h_included_