diff --git a/Modules/Filtering/ImageManipulation/include/otbAffineFunctor.h b/Modules/Filtering/ImageManipulation/include/otbAffineFunctor.h new file mode 100644 index 0000000000000000000000000000000000000000..2b7594f088e19f9fff6ad409fcb7d048ef880f79 --- /dev/null +++ b/Modules/Filtering/ImageManipulation/include/otbAffineFunctor.h @@ -0,0 +1,90 @@ +/*========================================================================= + + Program: ORFEO Toolbox + Language: C++ + Date: $Date$ + Version: $Revision$ + + + Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. + See OTBCopyright.txt for details. + + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef __otbAffineFunctor_h +#define __otbAffineFunctor_h + +namespace otb +{ +namespace Functor +{ +/** \class AffineFunctor + * \brief This functor performs a linear transform of its input. + * + * \f[ output = a*input + b \f] + * + * Coefficient a is a scalar, its type is templated (default is double). + * Coefficient b has the same type as output type. Standard casting is applied + * between input and output type. + * + * TInput and TOutput type are supposed to be scalar types. + * + * \ingroup OTBImageManipulation + */ +template<class TInput, class TOutput, class TScale=double> +class AffineFunctor +{ +public: + /// Constructor + AffineFunctor() {} + + /// Constructor + virtual ~AffineFunctor() {} + + /// Accessors + void SetA(TScale value) + { + m_A = value; + } + TScale GetA() + { + return m_A; + } + void SetB(TOutput value) + { + m_B = value; + } + TOutput GetB() + { + return m_B; + } + + bool operator !=(const AffineFunctor& other) const + { + return ((m_A != other.GetA()) || (m_B != other.GetB())); + } + + bool operator==(const AffineFunctor& other) const + { + return ((m_A == other.GetA()) && (m_B == other.GetB())); + } + + // main computation method + inline TOutput operator()(const TInput & x) const + { + return (m_B + static_cast<TOutput>(m_A*x)); + } + +private: + TScale m_A; + TOutput m_B; +}; +} // End namespace Functor +} // End namespace otb + +#endif