1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-29 15:23:05 +04:00

Added support of vertical straightening into stitching

This commit is contained in:
Alexey Spizhevoy
2011-09-24 08:20:13 +00:00
parent 48dec9c03a
commit 16f5c67914
7 changed files with 64 additions and 12 deletions
+32 -2
View File
@@ -567,7 +567,7 @@ void BundleAdjusterRay::calcJacobian(Mat &jac)
//////////////////////////////////////////////////////////////////////////////
void waveCorrect(vector<Mat> &rmats)
void waveCorrect(vector<Mat> &rmats, WaveCorrectKind kind)
{
LOGLN("Wave correcting...");
int64 t = getTickCount();
@@ -580,7 +580,14 @@ void waveCorrect(vector<Mat> &rmats)
}
Mat eigen_vals, eigen_vecs;
eigen(moment, eigen_vals, eigen_vecs);
Mat rg1 = eigen_vecs.row(2).t();
Mat rg1;
if (kind == WAVE_CORRECT_HORIZ)
rg1 = eigen_vecs.row(2).t();
else if (kind == WAVE_CORRECT_VERT)
rg1 = eigen_vecs.row(0).t();
else
CV_Error(CV_StsBadArg, "unsupported kind of wave correction");
Mat img_k = Mat::zeros(3, 1, CV_32F);
for (size_t i = 0; i < rmats.size(); ++i)
@@ -590,6 +597,29 @@ void waveCorrect(vector<Mat> &rmats)
Mat rg2 = rg0.cross(rg1);
double conf = 0;
if (kind == WAVE_CORRECT_HORIZ)
{
for (size_t i = 0; i < rmats.size(); ++i)
conf += rg0.dot(rmats[i].col(0));
if (conf < 0)
{
rg0 *= -1;
rg1 *= -1;
}
}
else if (kind == WAVE_CORRECT_VERT)
{
for (size_t i = 0; i < rmats.size(); ++i)
conf -= rg1.dot(rmats[i].col(0));
cout << conf << endl;
if (conf < 0)
{
rg0 *= -1;
rg1 *= -1;
}
}
Mat R = Mat::zeros(3, 3, CV_32F);
Mat tmp = R.row(0);
Mat(rg0.t()).copyTo(tmp);