summaryrefslogtreecommitdiffstats
path: root/jni/feature_stab/src/dbreg/dbstabsmooth.h
diff options
context:
space:
mode:
Diffstat (limited to 'jni/feature_stab/src/dbreg/dbstabsmooth.h')
-rw-r--r--jni/feature_stab/src/dbreg/dbstabsmooth.h157
1 files changed, 157 insertions, 0 deletions
diff --git a/jni/feature_stab/src/dbreg/dbstabsmooth.h b/jni/feature_stab/src/dbreg/dbstabsmooth.h
new file mode 100644
index 0000000..f03546e
--- /dev/null
+++ b/jni/feature_stab/src/dbreg/dbstabsmooth.h
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#pragma once
+
+
+#ifdef _WIN32
+#ifdef DBREG_EXPORTS
+#define DBREG_API __declspec(dllexport)
+#else
+#define DBREG_API __declspec(dllimport)
+#endif
+#else
+#define DBREG_API
+#endif
+
+extern "C" {
+#include "vp_motionmodel.h"
+}
+
+#define MOTION_ARRAY 5
+
+
+/*!
+ * Performs smoothing on the motion estimate from feature_stab.
+ */
+class DBREG_API db_StabilizationSmoother
+{
+public:
+ db_StabilizationSmoother();
+ ~db_StabilizationSmoother();
+
+ /*!
+ * Initialize parameters for stab-smoother.
+ */
+ void Init();
+
+ //! Smothing type
+ typedef enum {
+ SimpleSmooth = 0, //!< simple smooth
+ AdaptSmooth = 1, //!< adaptive smooth
+ PanSmooth = 2 //!< pan motion smooth
+ } SmoothType;
+
+ /*!
+ * Smooth-motion is to do a weight-average between the current affine and
+ * motLF. The way to change the affine is only for the display purpose.
+ * It removes the high frequency motion and keep the low frequency motion
+ * to the display. IIR implmentation.
+ * \param inmot input motion parameters
+ * \param outmot smoothed output motion parameters
+ */
+ bool smoothMotion(VP_MOTION *inmot, VP_MOTION *outmot);
+
+ /*!
+ * The adaptive smoothing version of the above fixed smoothing function.
+ * \param hsize width of the image being aligned
+ * \param vsize height of the image being aligned
+ * \param inmot input motion parameters
+ * \param outmot smoothed output motion parameters
+ */
+ bool smoothMotionAdaptive(/*VP_BIMG *bimg,*/int hsize, int vsize, VP_MOTION *inmot, VP_MOTION *outmot);
+ bool smoothPanMotion_1(VP_MOTION *inmot, VP_MOTION *outmot);
+ bool smoothPanMotion_2(VP_MOTION *inmot, VP_MOTION *outmot);
+
+ /*!
+ * Set the smoothing factor for the stab-smoother.
+ * \param factor the factor value to set
+ */
+ inline void setSmoothingFactor(float factor) { f_smoothFactor = factor; }
+
+ /*!
+ * Reset smoothing
+ */
+ inline void resetSmoothing(bool flag) { f_smoothReset = flag; }
+ /*!
+ * Set the zoom factor value.
+ * \param zoom the value to set to
+ */
+ inline void setZoomFactor(float zoom) { f_zoom = zoom; }
+ /*!
+ * Set the minimum damping factor value.
+ * \param factor the value to set to
+ */
+ inline void setminDampingFactor(float factor) { f_minDampingFactor = factor; }
+
+ /*!
+ * Returns the current smoothing factor.
+ */
+ inline float getSmoothingFactor(void) { return f_smoothFactor; }
+ /*!
+ * Returns the current zoom factor.
+ */
+ inline float getZoomFactor(void) { return f_zoom; }
+ /*!
+ * Returns the current minimum damping factor.
+ */
+ inline float getminDampingFactor(void) { return f_minDampingFactor; }
+ /*!
+ * Returns the current state of the smoothing reset flag.
+ */
+ inline bool getSmoothReset(void) { return f_smoothReset; }
+ /*!
+ * Returns the current low frequency motion parameters.
+ */
+ inline VP_MOTION getMotLF(void) { return f_motLF; }
+ /*!
+ * Returns the inverse of the current low frequency motion parameters.
+ */
+ inline VP_MOTION getImotLF(void) { return f_imotLF; }
+ /*!
+ * Set the dimensions of the alignment image.
+ * \param hsize width of the image
+ * \param vsize height of the image
+ */
+ inline void setSize(int hsize, int vsize) { f_hsize = hsize; f_vsize = vsize; }
+
+protected:
+
+ bool smoothMotion(VP_MOTION *inmot, VP_MOTION *outmot, double smooth_factor);
+ bool smoothMotion1(VP_MOTION *inmot, VP_MOTION *outmot, VP_MOTION *motLF, VP_MOTION *imotLF, double smooth_factor);
+ void iterativeSmooth(VP_MOTION *input, VP_MOTION *output, double border_factor);
+ bool is_point_in_rect(double px, double py, double rx, double ry, double w, double h);
+
+
+private:
+ int f_hsize;
+ int f_vsize;
+ bool f_smoothOn;
+ bool f_smoothReset;
+ float f_smoothFactor;
+ float f_minDampingFactor;
+ float f_zoom;
+ VP_MOTION f_motLF;
+ VP_MOTION f_imotLF;
+ VP_MOTION f_hist_mot[MOTION_ARRAY];
+ VP_MOTION f_hist_mot_speed[MOTION_ARRAY-1];
+ VP_MOTION f_hist_diff_mot[MOTION_ARRAY-1];
+ VP_MOTION f_disp_mot;
+ VP_MOTION f_src_mot;
+ VP_MOTION f_diff_avg;
+
+};
+