Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef MULTIMARKERBUNDLE_H
00025 #define MULTIMARKERBUNDLE_H
00026
00034 #include "MultiMarker.h"
00035 #include "Optimization.h"
00036 #include <Eigen/StdVector>
00037
00038 namespace alvar {
00039
00045 class ALVAR_EXPORT MultiMarkerBundle : public MultiMarker
00046 {
00047 protected:
00048 int optimization_keyframes;
00049 int optimization_markers;
00050 double optimization_error;
00051 bool optimizing;
00052 std::vector<Pose> camera_poses;
00053 std::map<int, PointDouble> measurements;
00054 int measurements_index(int frame, int marker_id, int marker_corner) {
00055
00056 return (int) (frame*marker_indices.size()*4)+(get_id_index(marker_id)*4)+marker_corner;
00057 }
00058
00059 void _MeasurementsAdd(MarkerIterator &begin, MarkerIterator &end, const Pose& camera_pose);
00060
00061 public:
00062
00066 MultiMarkerBundle(std::vector<int>& indices);
00067
00068 ~MultiMarkerBundle();
00069
00073 void MeasurementsReset();
00074
00075 double GetOptimizationError() { return optimization_error; }
00076 int GetOptimizationKeyframes() { return optimization_keyframes; }
00077 int GetOptimizationMarkers() { return optimization_markers; }
00078 bool GetOptimizing() { return optimizing; }
00079
00084 template <class M>
00085 void MeasurementsAdd(const std::vector<M, Eigen::aligned_allocator<M> > *markers, const Pose& camera_pose) {
00086 MarkerIteratorImpl<M> begin(markers->begin());
00087 MarkerIteratorImpl<M> end(markers->end());
00088 _MeasurementsAdd(begin, end,
00089 camera_pose);
00090 }
00091
00098 bool Optimize(Camera *_cam, double stop, int max_iter, Optimization::OptimizeMethod method = Optimization::TUKEY_LM);
00099 };
00100
00101 }
00102
00103 #endif