From f6e2ad6144e6632af875ae7cdd48129514e7fe32 Mon Sep 17 00:00:00 2001 From: Alexey Spizhevoy Date: Mon, 19 Mar 2012 13:51:20 +0000 Subject: [PATCH] Added missed file --- .../include/opencv2/videostab/inpainting.hpp | 135 +++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 modules/videostab/include/opencv2/videostab/inpainting.hpp diff --git a/modules/videostab/include/opencv2/videostab/inpainting.hpp b/modules/videostab/include/opencv2/videostab/inpainting.hpp new file mode 100644 index 0000000..25dd9b6 --- /dev/null +++ b/modules/videostab/include/opencv2/videostab/inpainting.hpp @@ -0,0 +1,135 @@ +#ifndef __OPENCV_VIDEOSTAB_INPAINTINT_HPP__ +#define __OPENCV_VIDEOSTAB_INPAINTINT_HPP__ + +#include +#include "opencv2/core/core.hpp" +#include "opencv2/videostab/optical_flow.hpp" +#include "opencv2/videostab/fast_marching.hpp" + +namespace cv +{ +namespace videostab +{ + +class IInpainter +{ +public: + IInpainter() + : radius_(0), frames_(0), motions_(0), + stabilizedFrames_(0), stabilizationMotions_(0) {} + + virtual ~IInpainter() {} + + virtual void setRadius(int val) { radius_ = val; } + int radius() const { return radius_; } + + virtual void setFrames(const std::vector &val) { frames_ = &val; } + const std::vector& frames() const { return *frames_; } + + virtual void setMotions(const std::vector &val) { motions_ = &val; } + const std::vector& motions() const { return *motions_; } + + virtual void setStabilizedFrames(const std::vector &val) { stabilizedFrames_ = &val; } + const std::vector& stabilizedFrames() const { return *stabilizedFrames_; } + + virtual void setStabilizationMotions(const std::vector &val) { stabilizationMotions_ = &val; } + const std::vector& stabilizationMotions() const { return *stabilizationMotions_; } + + virtual void inpaint(int idx, Mat &frame, Mat &mask) = 0; + +protected: + int radius_; + const std::vector *frames_; + const std::vector *motions_; + const std::vector *stabilizedFrames_; + const std::vector *stabilizationMotions_; +}; + +class NullInpainter : public IInpainter +{ +public: + virtual void inpaint(int idx, Mat &frame, Mat &mask) {} +}; + +class InpaintingPipeline : public IInpainter +{ +public: + void pushBack(Ptr inpainter) { inpainters_.push_back(inpainter); } + bool empty() const { return inpainters_.empty(); } + + virtual void setRadius(int val); + virtual void setFrames(const std::vector &val); + virtual void setMotions(const std::vector &val); + virtual void setStabilizedFrames(const std::vector &val); + virtual void setStabilizationMotions(const std::vector &val); + + virtual void inpaint(int idx, Mat &frame, Mat &mask); + +private: + std::vector > inpainters_; +}; + +class ConsistentMosaicInpainter : public IInpainter +{ +public: + ConsistentMosaicInpainter(); + + void setStdevThresh(float val) { stdevThresh_ = val; } + float stdevThresh() const { return stdevThresh_; } + + virtual void inpaint(int idx, Mat &frame, Mat &mask); + +private: + float stdevThresh_; +}; + +class MotionInpainter : public IInpainter +{ +public: + MotionInpainter(); + + void setOptFlowEstimator(Ptr val) { optFlowEstimator_ = val; } + Ptr optFlowEstimator() const { return optFlowEstimator_; } + + void setFlowErrorThreshold(float val) { flowErrorThreshold_ = val; } + float flowErrorThreshold() const { return flowErrorThreshold_; } + + void setBorderMode(int val) { borderMode_ = val; } + int borderMode() const { return borderMode_; } + + virtual void inpaint(int idx, Mat &frame, Mat &mask); + +private: + FastMarchingMethod fmm_; + Ptr optFlowEstimator_; + float flowErrorThreshold_; + int borderMode_; + + Mat frame1_, transformedFrame1_; + Mat_ grayFrame_, transformedGrayFrame1_; + Mat_ mask1_, transformedMask1_; + Mat_ flowX_, flowY_, flowErrors_; + Mat_ flowMask_; +}; + +class ColorAverageInpainter : public IInpainter +{ +public: + virtual void inpaint(int idx, Mat &frame, Mat &mask); + +private: + FastMarchingMethod fmm_; +}; + +void calcFlowMask( + const Mat &flowX, const Mat &flowY, const Mat &errors, float maxError, + const Mat &mask0, const Mat &mask1, Mat &flowMask); + +void completeFrameAccordingToFlow( + const Mat &flowMask, const Mat &flowX, const Mat &flowY, const Mat &frame1, const Mat &mask1, + Mat& frame0, Mat &mask0); + +} // namespace videostab +} // namespace cv + +#endif -- 2.7.4