stereo
sparse_stereo_types.h
Go to the documentation of this file.
1 #ifndef __SPARSE_STEREO_TYPES_HPP__
2 #define __SPARSE_STEREO_TYPES_HPP__
3 
4 #include <base/Eigen.hpp>
5 #include <vector>
6 #include <base/Time.hpp>
7 #include <opencv2/opencv.hpp>
8 #include "store_vector.hpp"
9 
10 namespace stereo
11 {
13 {
22 };
23 
24 enum FILTER
25 {
32 };
33 
35 {
38 };
39 
40 
42 {
44  : SURFparam(170),
45  goodParam(0.1),
46  mserParam(3),
47  starParam(9),
48  fastParam(12)
49  {}
50 
51  int SURFparam;
52  float goodParam;
53  float mserParam;
54  float starParam;
55  float fastParam;
56 };
57 
59 {
61  : debugImage( true ),
62  targetNumFeatures( 100 ),
63  maxStereoYDeviation( 5 ),
64  knn( 1 ),
65  distanceFactor( 2.0 ),
66  isometryFilterMaxSteps( 1000 ),
67  isometryFilterThreshold( 0.1 ),
68  adaptiveDetectorParam( false ),
69  descriptorType( DESCRIPTOR_SURF ),
70  detectorType( DETECTOR_SURF ),
71  filterType( FILTER_STEREO )
72  {}
73 
77  bool debugImage;
78 
82 
83  /* the difference in pixels, that the stereo matcher allows, so that two
84  * features are still considered epipolar
85  */
87 
93  int knn;
94 
102 
106 
111 
114 
118 };
119 
121 {
122 public:
123  base::Time time;
124 
125  typedef float Scalar;
126  typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1, Eigen::DontAlign> Descriptor;
127 
130 
131  std::vector<base::Vector3d> points;
132  std::vector<cv::KeyPoint> keypoints;
133  std::vector<Scalar> descriptors;
134  std::vector<int> source_frame;
135 
136  double mean_z_value;
137 
138  StereoFeatureArray() : descriptorSize(0) {}
139 
140  void push_back( const base::Vector3d& point, const cv::KeyPoint& keypoint, const Descriptor& descriptor, int _source_frame = -1 )
141  {
142  points.push_back( point );
143  keypoints.push_back( keypoint );
144 
145  if( descriptorSize == 0 )
146  descriptorSize = descriptor.size();
147 
148  assert( descriptorSize == descriptor.size() );
149 
150  // try to have some efficiency in copying the descriptor data
151  descriptors.resize( descriptors.size() + descriptorSize );
152  memcpy( &descriptors[0] + descriptors.size() - descriptorSize, descriptor.data(), descriptorSize );
153 
154  source_frame.push_back(_source_frame);
155  }
156 
157  Eigen::Map<Descriptor> getDescriptor( size_t index )
158  {
159  return Eigen::Map<Descriptor>( &descriptors[index*descriptorSize], descriptorSize );
160  }
161 
162  Eigen::Map<const Descriptor> getDescriptor( size_t index ) const
163  {
164  return Eigen::Map<const Descriptor>( &descriptors[index*descriptorSize], descriptorSize );
165  }
166 
167  size_t size() const
168  {
169  return keypoints.size();
170  }
171 
172  void clear()
173  {
174  descriptorSize = 0;
175  points.clear();
176  descriptors.clear();
177  keypoints.clear();
178  source_frame.clear();
179  }
180 
182  {
183  target.time = time;
184  target.descriptorSize = descriptorSize;
185  target.descriptorType = descriptorType;
186  for(size_t i = 0; i < points.size(); ++i)
187  {
188  target.points.push_back(points[i]);
189  }
190  for(size_t i = 0; i < keypoints.size(); ++i)
191  {
192  target.keypoints.push_back(keypoints[i]);
193  }
194  for(size_t i = 0; i < descriptors.size(); ++i)
195  {
196  target.descriptors.push_back(descriptors[i]);
197  }
198  for(size_t i = 0; i < source_frame.size(); ++i)
199  {
200  target.source_frame.push_back(source_frame[i]);
201  }
202  }
203 
204  bool operator == (StereoFeatureArray const& target) const
205  {
206  return target.time == time &&
207  target.descriptorSize == descriptorSize &&
208  target.descriptorType == descriptorType &&
209  target.points.size() == points.size() &&
210  target.keypoints.size() == keypoints.size() &&
211  target.source_frame.size() == source_frame.size() &&
212  target.descriptors.size() == descriptors.size();
213  }
214 
215 
216  void store(std::ostream& os) const
217  {
218  os << time.microseconds << "\n";
219  os << descriptorSize << "\n";
220  os << (int)descriptorType << "\n";
221  os << points.size() << "\n";
222  for(size_t i = 0; i < points.size(); ++i)
223  {
224  os << points[i][0] << " " << points[i][1] << " " << points[i][2] << "\n";
225  }
226  StoreClassVector(keypoints, os);
227  os << "\n";
228  StorePODVector(descriptors, os);
229  os << "\n";
230  StorePODVector(source_frame, os);
231  os << "\n";
232  }
233 
234  void load(std::istream& is)
235  {
236  is >> time.microseconds;
237  is.ignore(10, '\n');
238  is >> descriptorSize;
239  is.ignore(10, '\n');
240  int temp;
241  is >> temp;
242  is.ignore(10, '\n');
243  descriptorType = (DESCRIPTOR)temp;
244  size_t size = 0;
245  is >> size;
246  is.ignore(10, '\n');
247  double a, b, c;
248  for(size_t i = 0; i < size; ++i)
249  {
250  is >> a;
251  is >> b;
252  is >> c;
253  points.push_back(Eigen::Vector3d(a, b, c));
254  is.ignore(10, '\n');
255  }
256  LoadClassVector(keypoints, is);
257  is.ignore(10, '\n');
258  LoadPODVector(descriptors, is);
259  is.ignore(10, '\n');
260  LoadPODVector(source_frame, is);
261  is.ignore(10, '\n');
262  }
263 };
264 }
265 
266 #endif
DETECTOR detectorType
Definition: sparse_stereo_types.h:116
void LoadPODVector(std::vector< T > &Tvector, std::istream &is)
Definition: store_vector.hpp:82
int descriptorSize
Definition: sparse_stereo_types.h:128
FILTER
Definition: sparse_stereo_types.h:24
Definition: sparse_stereo_types.h:120
Definition: sparse_stereo_types.h:21
int SURFparam
Definition: sparse_stereo_types.h:51
Definition: sparse_stereo_types.h:28
std::vector< int > source_frame
Definition: sparse_stereo_types.h:134
std::vector< base::Vector3d > points
Definition: sparse_stereo_types.h:131
FILTER filterType
Definition: sparse_stereo_types.h:117
Definition: sparse_stereo_types.h:41
Definition: sparse_stereo_types.h:26
bool adaptiveDetectorParam
Definition: sparse_stereo_types.h:112
int targetNumFeatures
Definition: sparse_stereo_types.h:81
Definition: sparse_stereo_types.h:16
Definition: sparse_stereo_types.h:18
Eigen::Matrix< Scalar, Eigen::Dynamic, 1, Eigen::DontAlign > Descriptor
Definition: sparse_stereo_types.h:126
int distanceFactor
Definition: sparse_stereo_types.h:101
FeatureConfiguration()
Definition: sparse_stereo_types.h:60
DESCRIPTOR descriptorType
Definition: sparse_stereo_types.h:115
void push_back(const base::Vector3d &point, const cv::KeyPoint &keypoint, const Descriptor &descriptor, int _source_frame=-1)
Definition: sparse_stereo_types.h:140
Eigen::Map< const Descriptor > getDescriptor(size_t index) const
Definition: sparse_stereo_types.h:162
float fastParam
Definition: sparse_stereo_types.h:55
base::Time time
Definition: sparse_stereo_types.h:123
Definition: sparse_stereo_types.h:36
Definition: configuration.cpp:3
int maxStereoYDeviation
Definition: sparse_stereo_types.h:86
DetectorConfiguration detectorConfig
Definition: sparse_stereo_types.h:113
int knn
Definition: sparse_stereo_types.h:93
std::vector< cv::KeyPoint > keypoints
Definition: sparse_stereo_types.h:132
StereoFeatureArray()
Definition: sparse_stereo_types.h:138
Definition: sparse_stereo_types.h:19
double isometryFilterThreshold
Definition: sparse_stereo_types.h:110
void load(std::istream &is)
Definition: sparse_stereo_types.h:234
float starParam
Definition: sparse_stereo_types.h:54
void copyTo(StereoFeatureArray &target)
Definition: sparse_stereo_types.h:181
int isometryFilterMaxSteps
Definition: sparse_stereo_types.h:105
size_t size() const
Definition: sparse_stereo_types.h:167
void clear()
Definition: sparse_stereo_types.h:172
DESCRIPTOR
Definition: sparse_stereo_types.h:34
DESCRIPTOR descriptorType
Definition: sparse_stereo_types.h:129
float mserParam
Definition: sparse_stereo_types.h:53
Definition: sparse_stereo_types.h:14
float Scalar
Definition: sparse_stereo_types.h:125
Definition: sparse_stereo_types.h:31
Definition: sparse_stereo_types.h:29
double mean_z_value
Definition: sparse_stereo_types.h:136
Definition: sparse_stereo_types.h:30
Definition: sparse_stereo_types.h:20
bool debugImage
Definition: sparse_stereo_types.h:77
Definition: sparse_stereo_types.h:58
void store(std::ostream &os) const
Definition: sparse_stereo_types.h:216
Definition: sparse_stereo_types.h:17
float goodParam
Definition: sparse_stereo_types.h:52
void StoreClassVector(const std::vector< T > &Tvector, std::ostream &os)
Definition: store_vector.hpp:47
DETECTOR
Definition: sparse_stereo_types.h:12
Definition: sparse_stereo_types.h:15
Definition: sparse_stereo_types.h:37
DetectorConfiguration()
Definition: sparse_stereo_types.h:43
void StorePODVector(const std::vector< T > &Tvector, std::ostream &os)
Definition: store_vector.hpp:73
void LoadClassVector(std::vector< T > &Tvector, std::istream &is, int max_load_indices=-1)
Definition: store_vector.hpp:58
std::vector< Scalar > descriptors
Definition: sparse_stereo_types.h:133
Definition: sparse_stereo_types.h:27
Eigen::Map< Descriptor > getDescriptor(size_t index)
Definition: sparse_stereo_types.h:157