summaryrefslogtreecommitdiffhomepage
path: root/filter-kalman/ftnoir_filter_kalman.h
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-10-30 07:37:41 +0100
committerStanislaw Halik <sthalik@misaki.pl>2015-10-30 08:39:32 +0100
commitaa066bdd4622d4f6824fee864f6be6806813f04d (patch)
tree3df328b8b364cba2373a85827191b259bd78d546 /filter-kalman/ftnoir_filter_kalman.h
parentd6a54431d178632a2bf466c9904f74abd143afe6 (diff)
move to subdirectory-based build system
Closes #224
Diffstat (limited to 'filter-kalman/ftnoir_filter_kalman.h')
-rw-r--r--filter-kalman/ftnoir_filter_kalman.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/filter-kalman/ftnoir_filter_kalman.h b/filter-kalman/ftnoir_filter_kalman.h
new file mode 100644
index 00000000..a6f40bb7
--- /dev/null
+++ b/filter-kalman/ftnoir_filter_kalman.h
@@ -0,0 +1,73 @@
+#pragma once
+/* Copyright (c) 2013 Stanisław Halik <sthalik@misaki.pl>
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ */
+#ifndef INCLUDED_FTN_FILTER_H
+#define INCLUDED_FTN_FILTER_H
+
+#include "ui_ftnoir_kalman_filtercontrols.h"
+#include "opentrack/plugin-api.hpp"
+#include <opencv2/core/core.hpp>
+#include <opencv2/video/video.hpp>
+#include <vector>
+#include <QString>
+#include <QElapsedTimer>
+#include <QWidget>
+#include "opentrack/options.hpp"
+using namespace options;
+
+struct settings : opts {
+ value<int> noise_stddev_slider;
+ // slider for noise_stddev goes 0->(mult_noise_stddev * 100)
+ static constexpr double mult_noise_stddev = .5;
+ settings() : opts("kalman-filter"), noise_stddev_slider(b, "noise-stddev", 40)
+ {}
+};
+
+class FTNoIR_Filter : public IFilter
+{
+public:
+ FTNoIR_Filter();
+ void reset();
+ void filter(const double *input, double *output);
+ // Set accel_stddev assuming moving 0.0->accel in dt_ is 3 stddevs: (accel*4/dt_^2)/3.
+ static constexpr double dt_ = .4;
+ static constexpr double accel = 60.;
+ static constexpr double accel_stddev = (accel*4/(dt_*dt_))/3.0;
+ cv::KalmanFilter kalman;
+ double last_input[6];
+ QElapsedTimer timer;
+ settings s;
+ int prev_slider_pos;
+};
+
+class FTNoIR_FilterDll : public Metadata
+{
+public:
+ QString name() { return QString("Kalman"); }
+ QIcon icon() { return QIcon(":/images/filter-16.png"); }
+};
+
+class FilterControls: public IFilterDialog
+{
+ Q_OBJECT
+public:
+ FilterControls() {
+ ui.setupUi(this);
+ connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK()));
+ connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel()));
+ tie_setting(s.noise_stddev_slider, ui.noise_slider);
+ }
+ Ui::KalmanUICFilterControls ui;
+ void register_filter(IFilter*) override {}
+ void unregister_filter() override {}
+ settings s;
+public slots:
+ void doOK();
+ void doCancel();
+};
+
+#endif