Added motion stabilization pipeline (videostab module)

This commit is contained in:
Alexey Spizhevoy
2012-04-04 13:58:38 +00:00
parent 5ee7596cbc
commit a7da9681c3
2 changed files with 42 additions and 1 deletions

View File

@@ -52,6 +52,33 @@ namespace cv
namespace videostab
{
void MotionStabilizationPipeline::stabilize(
int size, const vector<Mat> &motions, pair<int,int> range,
Mat *stabilizationMotions) const
{
vector<Mat> updatedMotions(motions);
vector<Mat> stabilizationMotions_(size);
for (int i = 0; i < size; ++i)
stabilizationMotions[i] = Mat::eye(3, 3, CV_32F);
for (size_t i = 0; i < stabilizers_.size(); ++i)
{
stabilizers_[i]->stabilize(size, updatedMotions, range, &stabilizationMotions_[0]);
for (int i = 0; i < size; ++i)
stabilizationMotions[i] = stabilizationMotions_[i] * stabilizationMotions[i];
for (int j = 0; j + 1 < size; ++j)
{
Mat S0 = stabilizationMotions[j];
Mat S1 = stabilizationMotions[j+1];
at(j, updatedMotions) = S1 * at(j, updatedMotions) * S0.inv();
}
}
}
void MotionFilterBase::stabilize(
int size, const vector<Mat> &motions, pair<int,int> range, Mat *stabilizationMotions) const
{