#ifndef __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__ #define __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__ #include #include namespace fpa { namespace Base { namespace Functors { /** */ template< class C > class InvertCostFunction : public itk::FunctionBase< C, C > { public: /// Type-related and pointers typedef InvertCostFunction Self; typedef itk::FunctionBase< C, C > Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; public: itkNewMacro( Self ); itkTypeMacro( InvertCostFunction, itkFunctionBase ); itkGetConstMacro( Alpha, C ); itkGetConstMacro( Beta, C ); itkSetMacro( Alpha, C ); itkSetMacro( Beta, C ); public: virtual C Evaluate( const C& input ) const ITK_OVERRIDE { C a = std::pow( input, this->m_Alpha ); if( input >= C( 0 ) ) return( std::pow( C( 1 ) / ( C( 1 ) + a ), this->m_Beta ) ); else return( std::pow( C( -1 ) / ( C( 1 ) - a ), this->m_Beta ) ); } protected: InvertCostFunction( ) : Superclass( ), m_Alpha( C( 1 ) ), m_Beta( C( 1 ) ) { } virtual ~InvertCostFunction( ) { } private: // Purposely not implemented InvertCostFunction( const Self& ); void operator=( const Self& ); protected: C m_Alpha; C m_Beta; }; } // ecapseman } // ecapseman } // ecapseman #endif // __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__ // eof - $RCSfile$