SMIL  1.0.4
DLineArith.hpp
1 #ifndef _D_CHABARDES_LINE_ARITH_HPP_
2 #define _D_CHABARDES_LINE_ARITH_HPP_
3 
4 namespace smil
5 {
6  template <class T> struct supCstLine : public unaryLineFunctionBase<T> {
7  typedef typename unaryLineFunctionBase<T>::lineType lineType;
8  T threshold, trueVal, falseVal;
9  supCstLine() : threshold(0), trueVal(0), falseVal(ImDtTypes<T>::max())
10  {
11  }
12  virtual void _exec(const lineType lIn, const size_t size, lineType lOut)
13  {
14  for (size_t i = 0; i < size; ++i)
15  lOut[i] = lIn[i] > threshold ? trueVal : falseVal;
16  }
17  };
18 
19  template <class T> struct addNoSatCstLine : public unaryLineFunctionBase<T> {
20  addNoSatCstLine() : val(1)
21  {
22  }
23 
24  T val;
25  typedef typename unaryLineFunctionBase<T>::lineType lineType;
26  virtual void _exec(const lineType lIn1, const size_t size, lineType lOut)
27  {
28  for (size_t i = 0; i < size; i++)
29  lOut[i] = lIn1[i] + val;
30  }
31  };
32 
33  template <class T> struct equLines {
34  equLines()
35  {
36  }
37  void _exec(const T *lIn1, const T *lIn2, const T *lIn3, const T *lIn4,
38  const size_t size, T *lOut)
39  {
40  for (size_t i = 0; i < size; ++i) {
41  lOut[i] = lIn1[i] == lIn2[i] ? lIn3[i] : lIn4[i];
42  }
43  }
44  };
45 
46  template <class T> struct equLinesMasked {
47  equLinesMasked(size_t lineLen)
48  {
49  eq.trueVal = ImDtTypes<T>::max();
50  eq.falseVal = 0;
51  }
52  inline void _exec(T *lIn1, T *lIn2, T *lIn3, T *lIn4, const size_t size,
53  T *lOut)
54  {
55  T *buf = ImDtTypes<T>::createLine(size);
56  eq._exec(lIn1, lIn2, size, buf);
57  tes._exec(buf, lIn3, lIn4, size, lOut);
58  }
59 
60  private:
61  equLine<T> eq;
62  testLine<T, T> tes;
63  };
64  /*
65  template <class T1, class T2>
66  struct equLines : public tertiaryLineFunctionBase<T1,T2,T2,T2>
67  {
68  equLines() {}
69 
70  typedef typename tertiaryLineFunctionBase<T1,T2,T2,T2>::lineType1
71  lineType1; typedef typename
72  tertiaryLineFunctionBase<T1,T2,T2,T2>::lineOutType lineType2;
73 
74  virtual void _exec(const lineType1 lIn1, const lineType2 lIn2, const
75  lineType2 lIn3, const size_t size, lineType2 lOut)
76  {
77  for (size_t i=0;i<size;i++)
78  lOut[i] = lIn1[i] == lIn2[i] ? lIn2[i] : lIn3[i];
79  }
80  };
81 
82  template <class T>
83  struct equLines2 : public binaryLineFunctionBase<T>
84  {
85  equLines2() {}
86 
87  typedef typename binaryLineFunctionBase<T>::lineType1 lineType1;
88  typedef typename binaryLineFunctionBase<T>::lineOutType lineType2;
89 
90  virtual void _exec(const lineType1 lIn1, const lineType2 lIn2, const
91  size_t size, lineType2 lOut)
92  {
93  for (size_t i=0;i<size;i++)
94  lOut[i] = lOut[i] == lIn1[i] ? lIn2[i] : lOut[i];
95  }
96  };
97  */
98  template <class T1, class T2>
99  struct supLines : public binaryLineFunctionBase<T1, T1, T2> {
100  typedef typename binaryLineFunctionBase<T1, T1, T2>::lineType1 lineType1;
101  typedef typename binaryLineFunctionBase<T1, T1, T2>::lineOutType lineType2;
102 
103  virtual void _exec(const lineType1 lIn1, const lineType1 lIn2,
104  const size_t size, lineType2 lOut)
105  {
106  for (size_t i = 0; i < size; i++)
107  lOut[i] = lIn1[i] > lIn2[i] ? lIn2[i] : lOut[i];
108  }
109  };
110 
111 } // namespace smil
112 
113 #endif // _D_CHABARDES_LINE_ARITH_HPP_
RES_T threshold(const Image< T > &imIn, T minVal, T maxVal, T_out trueVal, T_out falseVal, Image< T_out > &imOut)
threshold() - Image threshold
Definition: DImageHistogram.hpp:269
Definition: DTypes.hpp:88
Definition: DLineArith.hpp:19
Definition: DBaseLineOperations.hpp:110
Definition: DLineArith.hpp:33
Definition: DLineArith.hpp:46
Definition: DLineArith.hpp:6
Definition: DLineArith.hpp:99
Definition: DBaseLineOperations.hpp:46