summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_tracker_aruco
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-09-30 16:21:41 +0200
committerStanislaw Halik <sthalik@misaki.pl>2015-09-30 16:22:00 +0200
commitac4dc94acc5d1e1d8fd4867730b835e2aa1fcc89 (patch)
tree8ca3dc84958e572e3f890ac3f56dfda670c63f60 /ftnoir_tracker_aruco
parent03a164ed74d616e8d5203142ec7e9738c8aae547 (diff)
parenteb7703b4ecea5540a4c4a65faa1ff4c53fe97631 (diff)
Merge branch 'unstable' into trackhat-ui
Sponsored-by: TrackHat * unstable: (112 commits) Revert "accela: try more complex deadzone algorithm" pt: add wiki link for calibration instructions qfc: more gray colors when graph is disabled qfc, mapping: disallow editing and change color when checkbox disabled qfc: don't allow editing when disabled plugin-support: workaround multiple copies of modules accela: change translation gain accela: change rotation gain pt: change extraction code freepie-udp: add license freepie-udp: update accela: try more complex deadzone algorithm accela: add helpful comment accela: revert to more quadratic spline at start also save if save pending when start tracking ui: force saving if saving timer is pending accela: slightly more linear function pose-widget: simplify freepie-udp: nix harmless warning pose-widget: add comment simple-mat: add __restrict for GNU ui: save settings on a timer ui: show a warning if configuration directory can't be used aruco: tune min/max marker size win32-joystick: fix duplicate device name selection logic ui: no need to reset settings on tracking start ui: save profile when combobox text changes, not merely index ui: save current tracker/filter/proto, not last win32-joystick: fix COM failure path win32-joystick: nix unused variable win32-joystick: allow for unique selection of joysticks qfc: also draw line from function start while moving no need to save on tracking start anymore save axis opts, not just spline control points tracker: change centering order again fix typo cmake: don't say "opentrack" twice for osx build ui: really don't switch profiles while refreshing combobox pt: fix type mismatch ui: save prior to switching configs tracker_rs: adjusted tracker's name ui: don't reload settings if config wasn't changed ui: save everything before switching profiles options: return .ini basename easier tracker_rs: more readable icon tracker_rs: prevent potential thread starvation ui: switch to newly-created config ui: decruft ui: also bail on new config if its name is ".ini" ui: auto-refresh config list ui: display up to 20 profiles w/o scrolling ui: create an empty config properly in another code branch udp-tracker: silence harmless warning plugin-support: fix typo plugin-support: set more sane RTLD flags plugin-support: free modules from address space when needed ui: rename symbol to reflect current usage ui: move some slots to private ui, shortcuts: these are slots, actually ui: no need to write anything to new empty config ui: avoid potential memory leak ft: new game support game-data: chomp newlines in extractor ui: append extension in the right place simple-mat: fix arglist SFINAE simple-mat: can use static_cast here nix default empty config. it gets created on its own. ui: these aren't qt slots ui: nix wrong headers ui: remove GNU GPL ui: simplify condition props changed only main, ui: store config files in a predefined directory pt: show extracted points' areas and success count close dialogs on switch to new module ...
Diffstat (limited to 'ftnoir_tracker_aruco')
-rw-r--r--ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp26
-rw-r--r--ftnoir_tracker_aruco/include/markerdetector.h3
2 files changed, 18 insertions, 11 deletions
diff --git a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp
index 08ddd3b2..570c2e0d 100644
--- a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp
+++ b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp
@@ -134,6 +134,7 @@ void Tracker::run()
cv::Vec3d rvec, tvec;
cv::Mat intrinsics = cv::Mat::eye(3, 3, CV_32FC1);
cv::Mat dist_coeffs = cv::Mat::zeros(5, 1, CV_32FC1);
+ bool otsu = false;
while (!stop)
{
@@ -144,18 +145,20 @@ void Tracker::run()
if (!camera.read(color))
continue;
}
+ static constexpr int thres_param2 = 5;
cv::Mat grayscale;
cv::cvtColor(color, grayscale, cv::COLOR_RGB2GRAY);
const int scale = grayscale.cols > 480 ? 2 : 1;
- detector.setThresholdParams(box_sizes[box_idx], 5);
+ detector.setThresholdParams(box_sizes[box_idx], thres_param2);
static constexpr double pi = 3.1415926f;
const int w = grayscale.cols, h = grayscale.rows;
- const double diag = sqrt(w * w + h * h)/w, diag_fov = static_cast<int>(s.fov) * pi / 180.;
- const double fov = 2.*atan(tan(diag_fov/2.)/sqrt(1. + diag*diag));
- const float focal_length_w = .5 * w / tan(.5 * fov);
- const float focal_length_h = focal_length_w;
+ const double diag_fov = static_cast<int>(s.fov) * pi / 180.;
+ const double fov_w = 2.*atan(tan(diag_fov/2.)/sqrt(1. + h/(double)w * h/(double)w));
+ const double fov_h = 2.*atan(tan(diag_fov/2.)/sqrt(1. + w/(double)h * w/(double)h));
+ const float focal_length_w = .5 * w / tan(.5 * fov_w);
+ const float focal_length_h = .5 * h / tan(.5 * fov_h);
intrinsics.at<float> (0, 0) = focal_length_w;
intrinsics.at<float> (1, 1) = focal_length_h;
@@ -164,8 +167,8 @@ void Tracker::run()
std::vector< aruco::Marker > markers;
- const double size_min = 0.02;
- const double size_max = 0.4;
+ const double size_min = 0.05;
+ const double size_max = 0.3;
bool roi_valid = false;
@@ -177,11 +180,12 @@ void Tracker::run()
if (last_roi.width > 0 && last_roi.height)
{
- detector.setThresholdParams(box_sizes[box_idx], 5);
+ detector.setThresholdParams(box_sizes[box_idx], thres_param2);
detector.setMinMaxSize(std::max(0.01, size_min * grayscale.cols / last_roi.width),
std::min(1.0, size_max * grayscale.cols / last_roi.width));
- if (detector.detect(grayscale(last_roi), markers, cv::Mat(), cv::Mat(), -1, false),
+ cv::Mat grayscale_ = grayscale(last_roi).clone();
+ if (detector.detect(grayscale_, markers, cv::Mat(), cv::Mat(), -1, false),
markers.size() == 1 && markers[0].size() == 4)
{
failed = std::max(0., failed - dt);
@@ -198,6 +202,8 @@ void Tracker::run()
if (!roi_valid)
{
+ otsu = !otsu;
+ detector._thresMethod = otsu ? aruco::MarkerDetector::FIXED_THRES : aruco::MarkerDetector::ADPT_THRES;
failed += dt;
if (failed > max_failed)
{
@@ -206,7 +212,7 @@ void Tracker::run()
qDebug() << "aruco: box size now" << box_sizes[box_idx];
failed = 0;
}
- detector.setThresholdParams(box_sizes[box_idx], 5);
+ detector.setThresholdParams(box_sizes[box_idx], thres_param2);
detector.setMinMaxSize(size_min, size_max);
detector.detect(grayscale, markers, cv::Mat(), cv::Mat(), -1, false);
}
diff --git a/ftnoir_tracker_aruco/include/markerdetector.h b/ftnoir_tracker_aruco/include/markerdetector.h
index ac120b18..8a7e75ca 100644
--- a/ftnoir_tracker_aruco/include/markerdetector.h
+++ b/ftnoir_tracker_aruco/include/markerdetector.h
@@ -277,6 +277,7 @@ private:
* This function returns in candidates all the rectangles found in a thresolded image
*/
void detectRectangles(const cv::Mat &thresImg,vector<MarkerCandidate> & candidates);
+public:
//Current threshold method
ThresholdMethods _thresMethod;
//Threshold parameters
@@ -297,7 +298,7 @@ private:
cv::Mat grey,thres,thres2,reduced;
//pointer to the function that analizes a rectangular region so as to detect its internal marker
int (* markerIdDetector_ptrfunc)(const cv::Mat &in,int &nRotations);
-
+private:
/**
*/
bool isInto(cv::Mat &contour,std::vector<cv::Point2f> &b);