1d2d28ad8be988158b95969fe1e435b9764388c34zongwave/*
2d2d28ad8be988158b95969fe1e435b9764388c34zongwave * stablizer.h - abstract header for DVS (Digital Video Stabilizer)
3d2d28ad8be988158b95969fe1e435b9764388c34zongwave *
4d2d28ad8be988158b95969fe1e435b9764388c34zongwave *    Copyright (c) 2014-2016 Intel Corporation
5d2d28ad8be988158b95969fe1e435b9764388c34zongwave *
6d2d28ad8be988158b95969fe1e435b9764388c34zongwave * Licensed under the Apache License, Version 2.0 (the "License");
7d2d28ad8be988158b95969fe1e435b9764388c34zongwave * you may not use this file except in compliance with the License.
8d2d28ad8be988158b95969fe1e435b9764388c34zongwave * You may obtain a copy of the License at
9d2d28ad8be988158b95969fe1e435b9764388c34zongwave *
10d2d28ad8be988158b95969fe1e435b9764388c34zongwave *        http://www.apache.org/licenses/LICENSE-2.0
11d2d28ad8be988158b95969fe1e435b9764388c34zongwave *
12d2d28ad8be988158b95969fe1e435b9764388c34zongwave * Unless required by applicable law or agreed to in writing, software
13d2d28ad8be988158b95969fe1e435b9764388c34zongwave * distributed under the License is distributed on an "AS IS" BASIS,
14d2d28ad8be988158b95969fe1e435b9764388c34zongwave * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15d2d28ad8be988158b95969fe1e435b9764388c34zongwave * See the License for the specific language governing permissions and
16d2d28ad8be988158b95969fe1e435b9764388c34zongwave * limitations under the License.
17d2d28ad8be988158b95969fe1e435b9764388c34zongwave *
18d2d28ad8be988158b95969fe1e435b9764388c34zongwave * Author: Zong Wei <wei.zong@intel.com>
19d2d28ad8be988158b95969fe1e435b9764388c34zongwave */
20d2d28ad8be988158b95969fe1e435b9764388c34zongwave
21d2d28ad8be988158b95969fe1e435b9764388c34zongwave#ifndef _STABILIZER_H_
22d2d28ad8be988158b95969fe1e435b9764388c34zongwave#define _STABILIZER_H_
23d2d28ad8be988158b95969fe1e435b9764388c34zongwave
24d2d28ad8be988158b95969fe1e435b9764388c34zongwave#include <vector>
25d2d28ad8be988158b95969fe1e435b9764388c34zongwave#include <opencv2/core.hpp>
26d2d28ad8be988158b95969fe1e435b9764388c34zongwave#include <opencv2/opencv.hpp>
279e4b6e70aa46038169cb624c56ab77344aa13786U. Artie Eoff#include <opencv2/videostab.hpp>
28d2d28ad8be988158b95969fe1e435b9764388c34zongwave
29d2d28ad8be988158b95969fe1e435b9764388c34zongwave#include "libdvs.h"
30d2d28ad8be988158b95969fe1e435b9764388c34zongwave
312d97fabc6bb36032ea64c5a91860664193b91c43zongwaveclass OnePassVideoStabilizer : public cv::videostab::OnePassStabilizer
32d2d28ad8be988158b95969fe1e435b9764388c34zongwave{
33d2d28ad8be988158b95969fe1e435b9764388c34zongwavepublic:
34d2d28ad8be988158b95969fe1e435b9764388c34zongwave    virtual ~OnePassVideoStabilizer() {};
35d2d28ad8be988158b95969fe1e435b9764388c34zongwave
362d97fabc6bb36032ea64c5a91860664193b91c43zongwave    virtual cv::Mat nextStabilizedMotion(DvsData* frame, int& stablizedPos);
37d2d28ad8be988158b95969fe1e435b9764388c34zongwave
38d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprotected:
392d97fabc6bb36032ea64c5a91860664193b91c43zongwave    virtual cv::Mat estimateMotion();
402d97fabc6bb36032ea64c5a91860664193b91c43zongwave    virtual void setUpFrame(const cv::Mat &firstFrame);
41d2d28ad8be988158b95969fe1e435b9764388c34zongwave
42d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprivate:
43d2d28ad8be988158b95969fe1e435b9764388c34zongwave
44d2d28ad8be988158b95969fe1e435b9764388c34zongwave};
45d2d28ad8be988158b95969fe1e435b9764388c34zongwave
462d97fabc6bb36032ea64c5a91860664193b91c43zongwaveclass TwoPassVideoStabilizer : public cv::videostab::TwoPassStabilizer
47d2d28ad8be988158b95969fe1e435b9764388c34zongwave{
48d2d28ad8be988158b95969fe1e435b9764388c34zongwavepublic:
49d2d28ad8be988158b95969fe1e435b9764388c34zongwave    virtual ~TwoPassVideoStabilizer() {};
50d2d28ad8be988158b95969fe1e435b9764388c34zongwave
512d97fabc6bb36032ea64c5a91860664193b91c43zongwave    virtual cv::Mat nextStabilizedMotion(DvsData* frame, int& stablizedPos);
52d2d28ad8be988158b95969fe1e435b9764388c34zongwave
53d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprotected:
542d97fabc6bb36032ea64c5a91860664193b91c43zongwave    virtual cv::Mat estimateMotion();
552d97fabc6bb36032ea64c5a91860664193b91c43zongwave    virtual void setUpFrame(const cv::Mat &firstFrame);
56d2d28ad8be988158b95969fe1e435b9764388c34zongwave
57d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprivate:
58d2d28ad8be988158b95969fe1e435b9764388c34zongwave
59d2d28ad8be988158b95969fe1e435b9764388c34zongwave};
60d2d28ad8be988158b95969fe1e435b9764388c34zongwave
61d2d28ad8be988158b95969fe1e435b9764388c34zongwaveclass VideoStabilizer
62d2d28ad8be988158b95969fe1e435b9764388c34zongwave{
63d2d28ad8be988158b95969fe1e435b9764388c34zongwavepublic:
64d2d28ad8be988158b95969fe1e435b9764388c34zongwave    VideoStabilizer(bool isTwoPass = false,
65d2d28ad8be988158b95969fe1e435b9764388c34zongwave                    bool wobbleSuppress = false,
66d2d28ad8be988158b95969fe1e435b9764388c34zongwave                    bool deblur = false,
67d2d28ad8be988158b95969fe1e435b9764388c34zongwave                    bool inpainter = false);
68d2d28ad8be988158b95969fe1e435b9764388c34zongwave    virtual ~VideoStabilizer();
69d2d28ad8be988158b95969fe1e435b9764388c34zongwave
702d97fabc6bb36032ea64c5a91860664193b91c43zongwave    cv::Ptr<cv::videostab::StabilizerBase> stabilizer() const {
71d2d28ad8be988158b95969fe1e435b9764388c34zongwave        return stabilizer_;
72d2d28ad8be988158b95969fe1e435b9764388c34zongwave    }
73d2d28ad8be988158b95969fe1e435b9764388c34zongwave
742d97fabc6bb36032ea64c5a91860664193b91c43zongwave    cv::Mat nextFrame();
752d97fabc6bb36032ea64c5a91860664193b91c43zongwave    cv::Mat nextStabilizedMotion(DvsData* frame, int& stablizedPos);
76d2d28ad8be988158b95969fe1e435b9764388c34zongwave
772d97fabc6bb36032ea64c5a91860664193b91c43zongwave    cv::Size trimedVideoSize(cv::Size frameSize);
782d97fabc6bb36032ea64c5a91860664193b91c43zongwave    cv::Mat cropVideoFrame(cv::Mat& frame);
79d2d28ad8be988158b95969fe1e435b9764388c34zongwave
802d97fabc6bb36032ea64c5a91860664193b91c43zongwave    void setFrameSize(cv::Size frameSize);
812d97fabc6bb36032ea64c5a91860664193b91c43zongwave    cv::Size getFrameSize() const {
82d2d28ad8be988158b95969fe1e435b9764388c34zongwave        return frameSize_;
83d2d28ad8be988158b95969fe1e435b9764388c34zongwave    }
84d2d28ad8be988158b95969fe1e435b9764388c34zongwave
85d2d28ad8be988158b95969fe1e435b9764388c34zongwave    void configFeatureDetector(int features, double minDistance);
86d2d28ad8be988158b95969fe1e435b9764388c34zongwave    void configMotionFilter(int radius, float stdev);
87d2d28ad8be988158b95969fe1e435b9764388c34zongwave    void configDeblurrer(int radius, double sensitivity);
88d2d28ad8be988158b95969fe1e435b9764388c34zongwave
89d2d28ad8be988158b95969fe1e435b9764388c34zongwavepublic:
902d97fabc6bb36032ea64c5a91860664193b91c43zongwave    cv::VideoWriter writer_;
91d2d28ad8be988158b95969fe1e435b9764388c34zongwave
92d2d28ad8be988158b95969fe1e435b9764388c34zongwaveprivate:
93d2d28ad8be988158b95969fe1e435b9764388c34zongwave    bool isTwoPass_;
94d2d28ad8be988158b95969fe1e435b9764388c34zongwave    float trimRatio_;
952d97fabc6bb36032ea64c5a91860664193b91c43zongwave    cv::Size frameSize_;
962d97fabc6bb36032ea64c5a91860664193b91c43zongwave    cv::Ptr<cv::videostab::StabilizerBase> stabilizer_;
97d2d28ad8be988158b95969fe1e435b9764388c34zongwave};
98d2d28ad8be988158b95969fe1e435b9764388c34zongwave
99d2d28ad8be988158b95969fe1e435b9764388c34zongwave
100d2d28ad8be988158b95969fe1e435b9764388c34zongwave#endif
101