Commit 3e23bb6d authored by Alexey Spizhevoy's avatar Alexey Spizhevoy

Refactored videostab module and sample

parent 5fe49347
...@@ -72,8 +72,6 @@ public: ...@@ -72,8 +72,6 @@ public:
virtual void setBlurrinessRates(const std::vector<float> &val) { blurrinessRates_ = &val; } virtual void setBlurrinessRates(const std::vector<float> &val) { blurrinessRates_ = &val; }
virtual const std::vector<float>& blurrinessRates() const { return *blurrinessRates_; } virtual const std::vector<float>& blurrinessRates() const { return *blurrinessRates_; }
virtual void update() {}
virtual void deblur(int idx, Mat &frame) = 0; virtual void deblur(int idx, Mat &frame) = 0;
protected: protected:
......
...@@ -72,6 +72,7 @@ struct CV_EXPORTS RansacParams ...@@ -72,6 +72,7 @@ struct CV_EXPORTS RansacParams
float eps; // max outliers ratio float eps; // max outliers ratio
float prob; // probability of success float prob; // probability of success
RansacParams() : size(0), thresh(0), eps(0), prob(0) {}
RansacParams(int size, float thresh, float eps, float prob) RansacParams(int size, float thresh, float eps, float prob)
: size(size), thresh(thresh), eps(eps), prob(prob) {} : size(size), thresh(thresh), eps(eps), prob(prob) {}
......
...@@ -78,8 +78,6 @@ public: ...@@ -78,8 +78,6 @@ public:
virtual void setStabilizationMotions(const std::vector<Mat> &val) { stabilizationMotions_ = &val; } virtual void setStabilizationMotions(const std::vector<Mat> &val) { stabilizationMotions_ = &val; }
virtual const std::vector<Mat>& stabilizationMotions() const { return *stabilizationMotions_; } virtual const std::vector<Mat>& stabilizationMotions() const { return *stabilizationMotions_; }
virtual void update() {}
virtual void inpaint(int idx, Mat &frame, Mat &mask) = 0; virtual void inpaint(int idx, Mat &frame, Mat &mask) = 0;
protected: protected:
...@@ -108,8 +106,6 @@ public: ...@@ -108,8 +106,6 @@ public:
virtual void setStabilizedFrames(const std::vector<Mat> &val); virtual void setStabilizedFrames(const std::vector<Mat> &val);
virtual void setStabilizationMotions(const std::vector<Mat> &val); virtual void setStabilizationMotions(const std::vector<Mat> &val);
virtual void update();
virtual void inpaint(int idx, Mat &frame, Mat &mask); virtual void inpaint(int idx, Mat &frame, Mat &mask);
private: private:
......
...@@ -79,6 +79,12 @@ class CV_EXPORTS GaussianMotionFilter : public MotionFilterBase ...@@ -79,6 +79,12 @@ class CV_EXPORTS GaussianMotionFilter : public MotionFilterBase
{ {
public: public:
GaussianMotionFilter() : stdev_(-1.f) {} GaussianMotionFilter() : stdev_(-1.f) {}
GaussianMotionFilter(int radius, float stdev = -1.f)
{
setRadius(radius);
setStdev(stdev);
update();
}
void setStdev(float val) { stdev_ = val; } void setStdev(float val) { stdev_ = val; }
float stdev() const { return stdev_; } float stdev() const { return stdev_; }
......
...@@ -160,7 +160,7 @@ public: ...@@ -160,7 +160,7 @@ public:
void setEstimateTrimRatio(bool val) { mustEstTrimRatio_ = val; } void setEstimateTrimRatio(bool val) { mustEstTrimRatio_ = val; }
bool mustEstimateTrimaRatio() const { return mustEstTrimRatio_; } bool mustEstimateTrimaRatio() const { return mustEstTrimRatio_; }
virtual void reset() { resetImpl(); } virtual void reset();
virtual Mat nextFrame(); virtual Mat nextFrame();
// available after pre-pass, before it's empty // available after pre-pass, before it's empty
......
...@@ -93,14 +93,6 @@ void InpaintingPipeline::setStabilizationMotions(const vector<Mat> &val) ...@@ -93,14 +93,6 @@ void InpaintingPipeline::setStabilizationMotions(const vector<Mat> &val)
} }
void InpaintingPipeline::update()
{
for (size_t i = 0; i < inpainters_.size(); ++i)
inpainters_[i]->update();
InpainterBase::update();
}
void InpaintingPipeline::inpaint(int idx, Mat &frame, Mat &mask) void InpaintingPipeline::inpaint(int idx, Mat &frame, Mat &mask)
{ {
for (size_t i = 0; i < inpainters_.size(); ++i) for (size_t i = 0; i < inpainters_.size(); ++i)
......
...@@ -70,12 +70,10 @@ void StabilizerBase::setUp(int cacheSize, const Mat &frame) ...@@ -70,12 +70,10 @@ void StabilizerBase::setUp(int cacheSize, const Mat &frame)
doInpainting_ = dynamic_cast<NullInpainter*>(inpainter) == 0; doInpainting_ = dynamic_cast<NullInpainter*>(inpainter) == 0;
if (doInpainting_) if (doInpainting_)
{ {
inpainter_->setRadius(radius_);
inpainter_->setFrames(frames_); inpainter_->setFrames(frames_);
inpainter_->setMotions(motions_); inpainter_->setMotions(motions_);
inpainter_->setStabilizedFrames(stabilizedFrames_); inpainter_->setStabilizedFrames(stabilizedFrames_);
inpainter_->setStabilizationMotions(stabilizationMotions_); inpainter_->setStabilizationMotions(stabilizationMotions_);
inpainter_->update();
} }
DeblurerBase *deblurer = static_cast<DeblurerBase*>(deblurer_); DeblurerBase *deblurer = static_cast<DeblurerBase*>(deblurer_);
...@@ -86,11 +84,9 @@ void StabilizerBase::setUp(int cacheSize, const Mat &frame) ...@@ -86,11 +84,9 @@ void StabilizerBase::setUp(int cacheSize, const Mat &frame)
float blurriness = calcBlurriness(frame); float blurriness = calcBlurriness(frame);
for (int i = -radius_; i <= 0; ++i) for (int i = -radius_; i <= 0; ++i)
at(i, blurrinessRates_) = blurriness; at(i, blurrinessRates_) = blurriness;
deblurer_->setRadius(radius_);
deblurer_->setFrames(frames_); deblurer_->setFrames(frames_);
deblurer_->setMotions(motions_); deblurer_->setMotions(motions_);
deblurer_->setBlurrinessRates(blurrinessRates_); deblurer_->setBlurrinessRates(blurrinessRates_);
deblurer_->update();
} }
log_->print("processing frames"); log_->print("processing frames");
...@@ -242,7 +238,6 @@ void OnePassStabilizer::setUp(Mat &firstFrame) ...@@ -242,7 +238,6 @@ void OnePassStabilizer::setUp(Mat &firstFrame)
at(0, frames_) = firstFrame; at(0, frames_) = firstFrame;
motionFilter_->setRadius(radius_);
motionFilter_->update(); motionFilter_->update();
StabilizerBase::setUp(cacheSize, firstFrame); StabilizerBase::setUp(cacheSize, firstFrame);
...@@ -267,7 +262,22 @@ TwoPassStabilizer::TwoPassStabilizer() ...@@ -267,7 +262,22 @@ TwoPassStabilizer::TwoPassStabilizer()
{ {
setMotionStabilizer(new GaussianMotionFilter()); setMotionStabilizer(new GaussianMotionFilter());
setEstimateTrimRatio(false); setEstimateTrimRatio(false);
resetImpl(); reset();
}
void TwoPassStabilizer::reset()
{
isPrePassDone_ = false;
frameCount_ = 0;
curPos_ = -1;
curStabilizedPos_ = -1;
frames_.clear();
motions_.clear();
stabilizedFrames_.clear();
stabilizationMotions_.clear();
doDeblurring_ = false;
doInpainting_ = false;
} }
...@@ -288,21 +298,6 @@ vector<Mat> TwoPassStabilizer::motions() const ...@@ -288,21 +298,6 @@ vector<Mat> TwoPassStabilizer::motions() const
} }
void TwoPassStabilizer::resetImpl()
{
isPrePassDone_ = false;
frameCount_ = 0;
curPos_ = -1;
curStabilizedPos_ = -1;
frames_.clear();
motions_.clear();
stabilizedFrames_.clear();
stabilizationMotions_.clear();
doDeblurring_ = false;
doInpainting_ = false;
}
void TwoPassStabilizer::runPrePassIfNecessary() void TwoPassStabilizer::runPrePassIfNecessary()
{ {
if (!isPrePassDone_) if (!isPrePassDone_)
...@@ -335,10 +330,7 @@ void TwoPassStabilizer::runPrePassIfNecessary() ...@@ -335,10 +330,7 @@ void TwoPassStabilizer::runPrePassIfNecessary()
IMotionStabilizer *motionStabilizer = static_cast<IMotionStabilizer*>(motionStabilizer_); IMotionStabilizer *motionStabilizer = static_cast<IMotionStabilizer*>(motionStabilizer_);
MotionFilterBase *motionFilterBase = dynamic_cast<MotionFilterBase*>(motionStabilizer); MotionFilterBase *motionFilterBase = dynamic_cast<MotionFilterBase*>(motionStabilizer);
if (motionFilterBase) if (motionFilterBase)
{
motionFilterBase->setRadius(radius_);
motionFilterBase->update(); motionFilterBase->update();
}
stabilizationMotions_.resize(frameCount_); stabilizationMotions_.resize(frameCount_);
motionStabilizer_->stabilize(&motions_[0], frameCount_, &stabilizationMotions_[0]); motionStabilizer_->stabilize(&motions_[0], frameCount_, &stabilizationMotions_[0]);
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment