]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Base/Functors/InvertCostFunction.h
...
[FrontAlgorithms.git] / lib / fpa / Base / Functors / InvertCostFunction.h
index faf4fb2dbea2027c58874f75d77f9ff2df8fbb73..22644adb38d9ef4c70f3c0b4052b3bda719c7ea2 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__
 #define __FPA__BASE__FUNCTORS__INVERTCOSTFUNCTION__H__
 
+#include <cmath>
 #include <itkFunctionBase.h>
 
 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