fpa::Functors::VertexFunction
);
- itkGetConstMacro( Alpha, double );
- itkSetMacro( Alpha, double );
+ itkGetConstMacro( Beta, TValue );
+ itkSetMacro( Beta, TValue );
- itkGetConstMacro( Beta, double );
- itkSetMacro( Beta, double );
+ itkGetConstMacro( Epsilon, TValue );
+ itkSetMacro( Epsilon, TValue );
+
+ itkBooleanMacro( TreatAsWeight );
+ itkGetConstMacro( TreatAsWeight, bool );
+ itkSetMacro( TreatAsWeight, bool );
public:
- virtual TValue Evaluate( const TVertex& v, const TVertex& p ) const override
+ virtual TValue Evaluate(
+ const TVertex& v, const TVertex& p
+ ) const override
{
const TImage* image =
dynamic_cast< const TImage* >(
);
if( image != NULL )
{
- double d = double( image->GetPixel( v ) );
- d -= double( image->GetPixel( p ) );
+ TValue d = TValue( image->GetPixel( v ) );
+ d -= TValue( image->GetPixel( p ) );
d /= this->m_Beta;
- d = std::exp( d * d ) - double( 1 );
- return( TValue( std::pow( d, this->m_Alpha ) ) );
+ d *= d;
+ if( this->m_TreatAsWeight ) d = std::exp( d );
+ else d = std::exp( -d );
+
+ if( d < this->m_Epsilon ) return( this->m_Epsilon );
+ else return( d );
}
else
return( TValue( -1 ) );
protected:
Gaussian( )
: Superclass( ),
- m_Alpha( double( 1 ) ),
- m_Beta( double( 1 ) )
+ m_Beta( TValue( 1 ) ),
+ m_Epsilon( TValue( 1e-5 ) ),
+ m_TreatAsWeight( true )
{
}
virtual ~Gaussian( )
Self& operator=( const Self& other );
protected:
- double m_Alpha;
- double m_Beta;
+ TValue m_Beta;
+ TValue m_Epsilon;
+ bool m_TreatAsWeight;
};
} // ecapseman