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=278ae557ed7dd9374d09bfae1dc5f9e7ecb7d15d;hpb=73e3158dab6ffe30c215b2899fd80ee868f330ce;p=FrontAlgorithms.git diff --git a/lib/fpa/Base/Functors/InvertCostFunction.h b/lib/fpa/Base/Functors/InvertCostFunction.h index 278ae55..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( 0 ) + 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