X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FBase%2FFunctors%2FInvertCostFunction.h;h=22644adb38d9ef4c70f3c0b4052b3bda719c7ea2;hb=57a315ceb876d4a26e8a88046f5c6ef87989780a;hp=faf4fb2dbea2027c58874f75d77f9ff2df8fbb73;hpb=b70a564ee2d7bc180b77a05c37ab431ab9c393e7;p=FrontAlgorithms.git diff --git a/lib/fpa/Base/Functors/InvertCostFunction.h b/lib/fpa/Base/Functors/InvertCostFunction.h index faf4fb2..22644ad 100644 --- a/lib/fpa/Base/Functors/InvertCostFunction.h +++ b/lib/fpa/Base/Functors/InvertCostFunction.h @@ -1,6 +1,7 @@ #ifndef __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__ #define __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__ +#include #include namespace fpa @@ -26,15 +27,27 @@ namespace fpa 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 + virtual C Evaluate( const C& input ) const ITK_OVERRIDE { - return( C( 1 ) / ( C( 1 ) + C( input ) ) ); + 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( ) + : Superclass( ), + m_Alpha( C( 1 ) ), + m_Beta( C( 1 ) ) { } virtual ~InvertCostFunction( ) { } @@ -43,6 +56,10 @@ namespace fpa // Purposely not implemented InvertCostFunction( const Self& ); void operator=( const Self& ); + + protected: + C m_Alpha; + C m_Beta; }; } // ecapseman