2 #ifndef OPENGM_TRUNCATED_ABSOLUTE_DIFFERENCE_FUNCTION_HXX
3 #define OPENGM_TRUNCATED_ABSOLUTE_DIFFERENCE_FUNCTION_HXX
14 template<
class T,
class I =
size_t,
class L =
size_t>
16 :
public FunctionBase<TruncatedAbsoluteDifferenceFunction<T, I, L>, T, I, L> {
24 size_t shape(
const IndexType)
const;
27 template<
class ITERATOR> T
operator()(ITERATOR)
const;
30 size_t numberOfLabels1_;
31 size_t numberOfLabels2_;
40 template <
class T,
class I,
class L>
46 template <
class T,
class I,
class L>
47 class FunctionSerialization<TruncatedAbsoluteDifferenceFunction<T, I, L> > {
49 typedef typename TruncatedAbsoluteDifferenceFunction<T, I, L>::ValueType ValueType;
51 static size_t indexSequenceSize(
const TruncatedAbsoluteDifferenceFunction<T, I, L>&);
52 static size_t valueSequenceSize(
const TruncatedAbsoluteDifferenceFunction<T, I, L>&);
53 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
54 static void serialize(
const TruncatedAbsoluteDifferenceFunction<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, TruncatedAbsoluteDifferenceFunction<T, I, L>&);
60 template <
class T,
class I,
class L>
64 const LabelType numberOfLabels1,
65 const LabelType numberOfLabels2,
66 const ValueType parameter1,
67 const ValueType parameter2
69 : numberOfLabels1_(numberOfLabels1),
70 numberOfLabels2_(numberOfLabels2),
71 parameter1_(parameter1),
72 parameter2_(parameter2)
75 template <
class T,
class I,
class L>
76 template <
class ITERATOR>
84 return abs(value) > parameter1_ ? parameter1_ * parameter2_ :
abs(value) * parameter2_;
90 template <
class T,
class I,
class L>
96 return (i==0 ? numberOfLabels1_ : numberOfLabels2_);
100 template <
class T,
class I,
class L>
107 template <
class T,
class I,
class L>
110 return numberOfLabels1_ * numberOfLabels2_;
113 template <
class T,
class I,
class L>
122 template <
class T,
class I,
class L>
124 FunctionSerialization<TruncatedAbsoluteDifferenceFunction<T, I, L> >::valueSequenceSize
126 const TruncatedAbsoluteDifferenceFunction<T, I, L>& src
131 template <
class T,
class I,
class L>
132 template<
class INDEX_OUTPUT_ITERATOR,
class VALUE_OUTPUT_ITERATOR >
134 FunctionSerialization<TruncatedAbsoluteDifferenceFunction<T, I, L> >::serialize
136 const TruncatedAbsoluteDifferenceFunction<T, I, L>& src,
137 INDEX_OUTPUT_ITERATOR indexOutIterator,
138 VALUE_OUTPUT_ITERATOR valueOutIterator
140 *indexOutIterator = src.shape(0);
142 *indexOutIterator = src.shape(1);
144 *valueOutIterator = src.parameter1_;
146 *valueOutIterator = src.parameter2_;
149 template <
class T,
class I,
class L>
150 template<
class INDEX_INPUT_ITERATOR,
class VALUE_INPUT_ITERATOR >
152 FunctionSerialization<TruncatedAbsoluteDifferenceFunction<T, I, L> >::deserialize
154 INDEX_INPUT_ITERATOR indexInIterator,
155 VALUE_INPUT_ITERATOR valueInIterator,
156 TruncatedAbsoluteDifferenceFunction<T, I, L>& dst
158 const size_t shape1=*indexInIterator;
160 const size_t shape2=*indexInIterator;
161 const ValueType param1=*valueInIterator;
163 const ValueType param2=*valueInIterator;
164 dst = TruncatedAbsoluteDifferenceFunction<T, I, L>(shape1,shape2,param1,param2);
169 #endif // OPENGM_TRUNCATED_ABSOLUTE_DIFFERENCE_FUNCTION_HXX
T operator()(ITERATOR) const
Fallback implementation of member functions of OpenGM functions.
#define OPENGM_ASSERT(expression)
size_t shape(const IndexType) const
extension a value table encoding this function would have
size_t size() const
number of entries a value table encoding this function would have (used for I/O)
truncated absolute differents between the labels of 2 variables
const size_t FUNCTION_TYPE_ID_OFFSET
User-defined function have ids smaller than FUNCTION_TYPE_ID_OFFSET.
TruncatedAbsoluteDifferenceFunction(const LabelType=2, const LabelType=2, const ValueType=ValueType(), const ValueType=ValueType())