ITK  4.0.0
Insight Segmentation and Registration Toolkit
itkMinMaxCurvatureFlowImageFilter.h
Go to the documentation of this file.
00001 /*=========================================================================
00002  *
00003  *  Copyright Insight Software Consortium
00004  *
00005  *  Licensed under the Apache License, Version 2.0 (the "License");
00006  *  you may not use this file except in compliance with the License.
00007  *  You may obtain a copy of the License at
00008  *
00009  *         http://www.apache.org/licenses/LICENSE-2.0.txt
00010  *
00011  *  Unless required by applicable law or agreed to in writing, software
00012  *  distributed under the License is distributed on an "AS IS" BASIS,
00013  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014  *  See the License for the specific language governing permissions and
00015  *  limitations under the License.
00016  *
00017  *=========================================================================*/
00018 #ifndef __itkMinMaxCurvatureFlowImageFilter_h
00019 #define __itkMinMaxCurvatureFlowImageFilter_h
00020 
00021 #include "itkCurvatureFlowImageFilter.h"
00022 #include "itkMinMaxCurvatureFlowFunction.h"
00023 
00024 namespace itk
00025 {
00076 template< class TInputImage, class TOutputImage >
00077 class ITK_EXPORT MinMaxCurvatureFlowImageFilter:
00078   public CurvatureFlowImageFilter< TInputImage, TOutputImage >
00079 {
00080 public:
00082   typedef MinMaxCurvatureFlowImageFilter                        Self;
00083   typedef CurvatureFlowImageFilter< TInputImage, TOutputImage > Superclass;
00084   typedef SmartPointer< Self >                                  Pointer;
00085   typedef SmartPointer< const Self >                            ConstPointer;
00086 
00088   itkNewMacro(Self);
00089 
00091   itkTypeMacro(MinMaxCurvatureFlowImageFilter, CurvatureFlowImageFilter);
00092 
00094   typedef typename Superclass::FiniteDifferenceFunctionType FiniteDifferenceFunctionType;
00095   typedef typename Superclass::OutputImageType              OutputImageType;
00096 
00098   typedef MinMaxCurvatureFlowFunction< OutputImageType >
00099   MinMaxCurvatureFlowFunctionType;
00100 
00103   itkStaticConstMacro(ImageDimension, unsigned int,
00104                       Superclass::ImageDimension);
00105 
00107   typedef typename FiniteDifferenceFunctionType::RadiusType RadiusType;
00108   typedef typename RadiusType::SizeValueType                RadiusValueType;
00109 
00111   itkSetMacro(StencilRadius, RadiusValueType);
00112   itkGetConstMacro(StencilRadius, RadiusValueType);
00114 
00115 #ifdef ITK_USE_CONCEPT_CHECKING
00116 
00117   itkConceptMacro( UnsignedLongConvertibleToOutputCheck,
00118                    ( Concept::Convertible< unsigned long, typename TOutputImage::PixelType > ) );
00119   itkConceptMacro( OutputLessThanComparableCheck,
00120                    ( Concept::LessThanComparable< typename TOutputImage::PixelType > ) );
00121   itkConceptMacro( LongConvertibleToOutputCheck,
00122                    ( Concept::Convertible< long, typename TOutputImage::PixelType > ) );
00123   itkConceptMacro( OutputDoubleComparableCheck,
00124                    ( Concept::Comparable< typename TOutputImage::PixelType, double > ) );
00125   itkConceptMacro( OutputDoubleMultiplyAndAssignOperatorCheck,
00126                    ( Concept::MultiplyAndAssignOperator< typename TOutputImage::PixelType,
00127                                                          double > ) );
00128   itkConceptMacro( OutputGreaterThanUnsignedLongCheck,
00129                    ( Concept::GreaterThanComparable< typename TOutputImage::PixelType,
00130                                                      unsigned long > ) );
00131   itkConceptMacro( UnsignedLongOutputAditiveOperatorsCheck,
00132                    ( Concept::AdditiveOperators< unsigned long,
00133                                                  typename TOutputImage::PixelType > ) );
00134 
00136 #endif
00137 protected:
00138   MinMaxCurvatureFlowImageFilter();
00139   ~MinMaxCurvatureFlowImageFilter() {}
00140   void PrintSelf(std::ostream & os, Indent indent) const;
00142 
00145   virtual void InitializeIteration();
00146 
00147 private:
00148   MinMaxCurvatureFlowImageFilter(const Self &); //purposely not implemented
00149   void operator=(const Self &);                 //purposely not implemented
00150 
00151   RadiusValueType m_StencilRadius;
00152 };
00153 } // end namspace itk
00154 
00155 #ifndef ITK_MANUAL_INSTANTIATION
00156 #include "itkMinMaxCurvatureFlowImageFilter.hxx"
00157 #endif
00158 
00159 #endif
00160