2 #ifndef OPENGM_ABSOLUTE_DIFFERENCE_FUNCTION_HXX
3 #define OPENGM_ABSOLUTE_DIFFERENCE_FUNCTION_HXX
14 template<
class T,
class I =
size_t,
class L =
size_t>
16 :
public FunctionBase<AbsoluteDifferenceFunction<T, I, L>, T, I, L>
24 size_t shape(
const IndexType)
const;
27 template<
class ITERATOR> ValueType
operator()(ITERATOR)
const;
30 LabelType numberOfLabels1_;
31 LabelType numberOfLabels2_;
37 template <
class T,
class I,
class L>
46 template<
class T,
class I,
class L>
47 class FunctionSerialization<AbsoluteDifferenceFunction<T, I, L> > {
49 typedef typename AbsoluteDifferenceFunction<T, I, L>::ValueType ValueType;
51 static size_t indexSequenceSize(
const AbsoluteDifferenceFunction<T, I, L>&);
52 static size_t valueSequenceSize(
const AbsoluteDifferenceFunction<T, I, L>&);
53 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
54 static void serialize(
const AbsoluteDifferenceFunction<T, I, L>&, INDEX_OUTPUT_ITERATOR, VALUE_OUTPUT_ITERATOR);
55 template<
class INDEX_INPUT_ITERATOR ,
class VALUE_INPUT_ITERATOR>
56 static void deserialize(INDEX_INPUT_ITERATOR, VALUE_INPUT_ITERATOR, AbsoluteDifferenceFunction<T, I, L>&);
65 template <
class T,
class I,
class L>
73 : numberOfLabels1_(numberOfLabels1),
74 numberOfLabels2_(numberOfLabels2),
78 template <
class T,
class I,
class L>
79 template <
class ITERATOR>
87 return scale_*
abs(value);
93 template <
class T,
class I,
class L>
100 return (i==0 ? numberOfLabels1_ : numberOfLabels2_);
104 template <
class T,
class I,
class L>
111 template <
class T,
class I,
class L>
114 return numberOfLabels1_ * numberOfLabels2_;
117 template<
class T,
class I,
class L>
126 template<
class T,
class I,
class L>
128 FunctionSerialization<AbsoluteDifferenceFunction<T, I, L> >::valueSequenceSize
130 const AbsoluteDifferenceFunction<T, I, L>& src
135 template<
class T,
class I,
class L>
136 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
138 FunctionSerialization<AbsoluteDifferenceFunction<T, I, L> >::serialize
140 const AbsoluteDifferenceFunction<T, I, L>& src,
141 INDEX_OUTPUT_ITERATOR indexOutIterator,
142 VALUE_OUTPUT_ITERATOR valueOutIterator
144 *indexOutIterator = src.shape(0);
146 *indexOutIterator = src.shape(1);
148 *valueOutIterator = src(l);
151 template<
class T,
class I,
class L>
152 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR >
154 FunctionSerialization< AbsoluteDifferenceFunction<T, I, L> >::deserialize
156 INDEX_INPUT_ITERATOR indexInIterator,
157 VALUE_INPUT_ITERATOR valueInIterator,
158 AbsoluteDifferenceFunction<T, I, L>& dst
160 const size_t shape0=*indexInIterator;
162 dst=AbsoluteDifferenceFunction<T, I, L>(shape0, *indexInIterator,*valueInIterator);
167 #endif // OPENGM_ABSOLUTE_DIFFERENCE_FUNCTION_HXX
Fallback implementation of member functions of OpenGM functions.
ValueType operator()(ITERATOR) const
Absolute difference between two labels.
#define OPENGM_ASSERT(expression)
const size_t FUNCTION_TYPE_ID_OFFSET
User-defined function have ids smaller than FUNCTION_TYPE_ID_OFFSET.
size_t shape(const IndexType) const
extension a value table encoding this function would have
AbsoluteDifferenceFunction(const LabelType=2, const LabelType=2, const ValueType=1)
Constructor.
size_t size() const
number of entries a value table encoding this function would have (used for I/O)