2 #ifndef OPENGM_L_POTTS_FUNCTION_HXX
3 #define OPENGM_L_POTTS_FUNCTION_HXX
18 template<
class T,
class I =
size_t,
class L =
size_t>
31 const IndexType valueNotEqual
33 LabelType
shape(
const size_t)
const;
36 template<
class ITERATOR> ValueType
operator()(ITERATOR)
const;
41 ValueType
min()
const;
42 ValueType
max()
const;
43 ValueType
sum()
const;
45 MinMaxFunctor<ValueType>
minMax()
const;
52 return piValueNotEqual_;
57 LabelType numberOfLabels1_;
58 LabelType numberOfLabels2_;
62 IndexType piValueNotEqual_;
68 template<
class T,
class I,
class L>
79 template <
class T,
class I,
class L>
83 const L numberOfLabels1,
84 const L numberOfLabels2,
88 : numberOfLabels1_(numberOfLabels1),
89 numberOfLabels2_(numberOfLabels2),
91 piValueNotEqual_(valueNotEqual)
94 template <
class T,
class I,
class L>
95 template <
class ITERATOR>
101 return (begin[0]==begin[1] ?
102 static_cast<ValueType>(0.0) : params_->getParameter(piValueNotEqual_) );
107 template <
class T,
class I,
class L>
114 return (i==0 ? numberOfLabels1_ : numberOfLabels2_);
117 template <
class T,
class I,
class L>
123 template <
class T,
class I,
class L>
126 return numberOfLabels1_*numberOfLabels2_;
130 template<
class T,
class I,
class L>
136 return numberOfLabels1_ == fb.numberOfLabels1_ &&
137 numberOfLabels2_ == fb.numberOfLabels2_ &&
138 piValueNotEqual_ == fb.piValueNotEqual_;
142 template<
class T,
class I,
class L>
149 template<
class T,
class I,
class L>
156 template<
class T,
class I,
class L>
160 const T val = params_->getParameter(piValueNotEqual_);
161 return 0.0<val ? 0.0 :val;
164 template<
class T,
class I,
class L>
168 const T val = params_->getParameter(piValueNotEqual_);
169 return 0.0>val ? 0.0 :val;
172 template<
class T,
class I,
class L>
176 const T val = params_->getParameter(piValueNotEqual_);
177 const LabelType minLabels = std::min(numberOfLabels1_, numberOfLabels2_);
178 return val *
static_cast<T
>(numberOfLabels1_ * numberOfLabels2_ - minLabels);
181 template<
class T,
class I,
class L>
188 template<
class T,
class I,
class L>
189 inline MinMaxFunctor<typename LPottsFunction<T, I, L>::ValueType>
192 if(static_cast<ValueType>(0) < piValueNotEqual_) {
193 return MinMaxFunctor<T>(
static_cast<ValueType>(0), params_[piValueNotEqual_]);
196 return MinMaxFunctor<T>(params_[piValueNotEqual_],
static_cast<ValueType>(0));
202 #endif // #ifndef OPENGM_L_POTTS_FUNCTION_HXX
Fallback implementation of member functions of OpenGM functions.
Potts function for two variables.
LabelType shape(const size_t) const
MinMaxFunctor< ValueType > minMax() const
ValueType operator()(ITERATOR) const
bool operator==(const LPottsFunction &) const
#define OPENGM_ASSERT(expression)
bool isGeneralizedPotts() const
ValueType product() const
size_t numberOfParameters() const
const size_t FUNCTION_TYPE_ID_OFFSET
User-defined function have ids smaller than FUNCTION_TYPE_ID_OFFSET.
IndexType parameterIndex(const size_t paramNumber) const
LPottsFunction(const LabelType, const LabelType, const Parameters< ValueType, IndexType > ¶meters, const IndexType valueNotEqual)