fractalposetracker.h
Go to the documentation of this file.
1 #include <opencv2/imgproc/imgproc.hpp>
2 #include "../picoflann.h"
3 #include "../cameraparameters.h"
4 #include "../markerdetector.h"
5 #include "fractalmarkerset.h"
6 #include "../aruco_export.h"
7 namespace aruco
8 {
9 
10 
11 void kfilter(std::vector<cv::KeyPoint> &kpoints);
12 
21 void assignClass(const cv::Mat &im, std::vector<cv::KeyPoint> &kpoints,
22  float sizeNorm = 0.f, int wsize = 5);
23 
25 {
26  inline float operator()(const cv::KeyPoint &elem, int dim) const
27  {
28  return dim == 0 ? elem.pt.x : elem.pt.y;
29  }
30  inline float operator()(const cv::Point2f &elem, int dim) const
31  {
32  return dim == 0 ? elem.x : elem.y;
33  }
34 };
35 
37 {
38 public:
46  void setParams(const CameraParameters &cam_params, const FractalMarkerSet &msconf,
47  const float markerSize = -1);
56  bool fractalInnerPose(const cv::Ptr<MarkerDetector> markerDetector,
57  const std::vector<aruco::Marker> &markers, bool refinement = true);
68  bool ROI(const std::vector<cv::Mat> imagePyramid, cv::Mat &img,
69  std::vector<cv::Point2f> &innerPoints2d, cv::Point2f &offset, float &ratio);
70 
81  cv::Mat fractal_solve_ransac(int ninners,
82  std::vector<std::pair<uint, std::vector<uint>>> inner_kpnt,
83  std::vector<cv::KeyPoint> kpnts, uint32_t maxIter = 500,
84  float _minInliers = 0.2f, float _thresInliers = 0.7f);
85 
93  void drawKeyPoints(const cv::Mat image, std::vector<cv::KeyPoint> kpoints,
94  bool text = false, bool transf = false);
95 
104  bool fractalRefinement(const cv::Ptr<MarkerDetector> markerDetector, int markerWarpPix = 10);
105 
106  // return the rotation vector. Returns an empty matrix if last call to estimatePose returned false
107  const cv::Mat getRvec() const
108  {
109  return _rvec;
110  }
111 
112  // return the translation vector. Returns an empty matrix if last call to estimatePose returned false
113  const cv::Mat getTvec() const
114  {
115  return _tvec;
116  }
117 
118  // return all corners from fractal marker
119  const std::vector<cv::Point3f> getInner3d()
120  {
121  return _innerp3d;
122  }
123 
124  // is the pose valid?
125  bool isPoseValid() const
126  {
127  return !_rvec.empty() && !_tvec.empty();
128  }
129 
131  {
132  return _fractalMarker;
133  }
134 
135 private:
136  FractalMarkerSet _fractalMarker; // FractalMarkerSet configuration
137  aruco::CameraParameters _cam_params; // Camera parameters.
138  cv::Mat _rvec, _tvec; // current poses
139  std::map<int, std::vector<cv::Point3f>> _id_innerp3d; // Id_marker-Inners_corners
140  std::vector<cv::Point3f> _innerp3d; // All inners corners
141  std::vector<cv::KeyPoint> _innerkpoints; // All inners keypoints
143  std::map<int, double> _id_radius; // Idmarker_Radius(Optimus)
144  std::map<int, float> _id_area; // Idmarker_projectedArea(Optimus)
145  float _preRadius = 0; // radius used previous iteration
146 };
147 } // namespace aruco
aruco::FractalPoseTracker
Definition: fractalposetracker.h:36
aruco::FractalPoseTracker::_id_innerp3d
std::map< int, std::vector< cv::Point3f > > _id_innerp3d
Definition: fractalposetracker.h:139
aruco::CameraParameters
Parameters of the camera.
Definition: cameraparameters.h:29
aruco::FractalPoseTracker::getInner3d
const std::vector< cv::Point3f > getInner3d()
Definition: fractalposetracker.h:119
aruco::PicoFlann_KeyPointAdapter::operator()
float operator()(const cv::KeyPoint &elem, int dim) const
Definition: fractalposetracker.h:26
aruco::FractalPoseTracker::_tvec
cv::Mat _tvec
Definition: fractalposetracker.h:138
aruco::kfilter
void kfilter(std::vector< cv::KeyPoint > &kpoints)
Definition: fractalposetracker.cpp:40
aruco::FractalPoseTracker::_innerkpoints
std::vector< cv::KeyPoint > _innerkpoints
Definition: fractalposetracker.h:141
aruco::FractalPoseTracker::getFractal
FractalMarkerSet getFractal()
Definition: fractalposetracker.h:130
f
f
aruco::FractalPoseTracker::_cam_params
aruco::CameraParameters _cam_params
Definition: fractalposetracker.h:137
aruco::FractalPoseTracker::_id_radius
std::map< int, double > _id_radius
Definition: fractalposetracker.h:143
aruco::FractalPoseTracker::getRvec
const cv::Mat getRvec() const
Definition: fractalposetracker.h:107
aruco::FractalPoseTracker::isPoseValid
bool isPoseValid() const
Definition: fractalposetracker.h:125
aruco::assignClass
void assignClass(const cv::Mat &im, std::vector< cv::KeyPoint > &kpoints, float sizeNorm=0.f, int wsize=5)
assignClass
Definition: fractalposetracker.cpp:82
aruco::FractalPoseTracker::getTvec
const cv::Mat getTvec() const
Definition: fractalposetracker.h:113
aruco::FractalPoseTracker::_innerp3d
std::vector< cv::Point3f > _innerp3d
Definition: fractalposetracker.h:140
aruco::FractalPoseTracker::_fractalMarker
FractalMarkerSet _fractalMarker
Definition: fractalposetracker.h:136
ARUCO_EXPORT
#define ARUCO_EXPORT
Definition: aruco_export.h:30
fractalmarkerset.h
picoflann::KdTreeIndex
Definition: picoflann.h:149
aruco
Definition: cameraparameters.h:24
aruco::FractalMarkerSet
Definition: fractalmarkerset.h:10
aruco::PicoFlann_KeyPointAdapter
Definition: fractalposetracker.h:24
aruco::PicoFlann_KeyPointAdapter::operator()
float operator()(const cv::Point2f &elem, int dim) const
Definition: fractalposetracker.h:30
aruco::FractalPoseTracker::_id_area
std::map< int, float > _id_area
Definition: fractalposetracker.h:144
aruco::FractalPoseTracker::_kdtree
picoflann::KdTreeIndex< 2, PicoFlann_KeyPointAdapter > _kdtree
Definition: fractalposetracker.h:142


aruco
Author(s): Rafael Muñoz Salinas , Bence Magyar
autogenerated on Sat Sep 23 2023 02:26:45