[ VIGRA Homepage | Function Index | Class Index | Namespaces | File List | Main Page ]

features.hxx VIGRA

1 #ifndef RN_FEATURES_HXX
2 #define RN_FEATURES_HXX
3 
4 
5 
6 
7 
8 class FeatureBase
9 {
10 public:
11  MultiArrayShape<2>::type shape() = 0;
12  int shape(int index)
13  {
14  return shape()[index];
15  }
16  double & operator() (int i, int j) = 0;
17 };
18 
19 
20 class CompositFeatures : public FeatureBase
21 {
22 public:
23  typedef typename MultiArrayShape<2>::type
24  Shp;
25  ArrayVector<Shp>
26  ext2int;
27  ArrayVector<FeatureBase > sub_feats;
28  void add(FeatureBase & feat)
29  {
30  if(feat.shape(0) != this->shape(0))
31  throw std::runtime_error("Wrong Number Of samples");
32 
33  sub_feats.push_back(feat);
34  for(int ii = 0; ii < feat.shape(1); ++ii)
35  ext2int.push_back(Shp(sub_feats.size()-1,
36  ii));
37 
38  }
39 
41  {
42  return MultiArrayShape<2>::type(sub_feats[0].shape(0),
43  ext2int.size());
44  }
45 
46  double & operator() (int i, int j)
47  {
48  return sub_feats[ext2int[j][0]](i, ext2int[j][1]);
49  }
50 };
51 
52 template<int N, class T, class C>
53 class NeighborFeatures : public FeatureBase
54 {
55 public:
56  typedef typename MultiArrayShape<N>::type Shp;
57  MultiArrayView<N, T, C> raw_data;
58  ArrayVector<Shp >
59  feat_coos;
61  {
62  return MultiArrayShape<2>::type(raw_data.size(),
63  feat_coos.size());
64  }
65 
66  double & operator() (int i, int j)
67  {
68  return raw_data(raw_data.scanOrderIndexToCoordinate(i) + feat_coos(j));
69  }
70  NeighborFeatures(MultiArrayView<N, T, C> & in, MultiArrayView<2, int> const & coos)
71  : raw_data(in)
72  {
73  for(int ii = 0; ii < coos.shape(0); ++ii)
74  feat_coos.push_back(Shp());
75  for(int jj = 0; jj < coos.shape(1); ++jj)
76  feat_coos.back()[jj] = coos(ii, jj);
77  }
78 
79 };
80 
81 
82 class BindFeatureColumn : public FeatureBase
83 {
84  typedef typename MultiArrayShape<N>::type Shp;
85  int index;
86  FeatureBase & underlying;
87 
89  {
90  return MultiArrayShape<2>::type(underlying.shape(0), 1);
91  }
92 
93  double & operator() (int i, int j)
94  {
95  return underlying(i, index);
96  }
97  double & operator[](int i)
98  {
99  return underlying(i, index);
100  }
101 
102  BindFeatureColumn(FeaetureBase & in, int index_)
103  : index(index_), underlying(in)
104  {
105  ;
106  }
107 };
108 
109 FeatureBase columnVector(FeatureBase & in, int ii)
110 {
111  return BindFeatureColumn(in, ii);
112 }
113 
114 #endif
MultiArrayView< 2, T, C > columnVector(MultiArrayView< 2, T, C > const &m, MultiArrayIndex d)
Definition: matrix.hxx:727
void add(FixedPoint< IntBits1, FracBits1 > l, FixedPoint< IntBits2, FracBits2 > r, FixedPoint< IntBits3, FracBits3 > &result)
addition with enforced result type.
Definition: fixedpoint.hxx:561
TinyVector< MultiArrayIndex, N > type
Definition: multi_shape.hxx:272

© Ullrich Köthe (ullrich.koethe@iwr.uni-heidelberg.de)
Heidelberg Collaboratory for Image Processing, University of Heidelberg, Germany

html generated using doxygen and Python
vigra 1.11.1 (Fri May 19 2017)