diff options
Diffstat (limited to 'jni/feature_stab/src/dbreg/dbstabsmooth.h')
-rw-r--r-- | jni/feature_stab/src/dbreg/dbstabsmooth.h | 157 |
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; + +}; + |