added wave correct support into opencv_stitching
This commit is contained in:
parent
3928dd9d99
commit
15173fc559
@ -11,16 +11,20 @@ using namespace cv;
|
|||||||
|
|
||||||
void printUsage()
|
void printUsage()
|
||||||
{
|
{
|
||||||
cout << "Rotation model images stitcher.\n"
|
cout << "Rotation model images stitcher.\n\n";
|
||||||
<< "Usage: opencv_stitching img1 img2 [...imgN]\n"
|
cout << "Usage: opencv_stitching img1 img2 [...imgN]\n"
|
||||||
<< "\t[--matchconf <0.0-1.0>]\n"
|
<< "\t[--matchconf <float>]\n"
|
||||||
<< "\t[--ba (ray|focal_ray)]\n"
|
<< "\t[--ba (ray|focal_ray)]\n"
|
||||||
<< "\t[--ba_thresh <float>]\n"
|
<< "\t[--ba_thresh <float>]\n"
|
||||||
//<< "\t[--wavecorrect (no|yes)]\n"
|
<< "\t[--wavecorrect (no|yes)]\n"
|
||||||
<< "\t[--warp (plane|cylindrical|spherical)]\n"
|
<< "\t[--warp (plane|cylindrical|spherical)]\n"
|
||||||
<< "\t[--seam (no|voronoi|graphcut)]\n"
|
<< "\t[--seam (no|voronoi|graphcut)]\n"
|
||||||
<< "\t[--blend (no|feather|multiband)]\n"
|
<< "\t[--blend (no|feather|multiband)]\n"
|
||||||
<< "\t[--output <result_img>]\n";
|
<< "\t[--output <result_img>]\n\n";
|
||||||
|
cout << "--matchconf\n"
|
||||||
|
<< "\tGood values are in [0.2, 0.8] range usually.\n\n";
|
||||||
|
cout << "--ba_thresh\n"
|
||||||
|
<< "\tGood values are in [0.3, 1.0] range usually.\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
@ -29,7 +33,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
vector<Mat> images;
|
vector<Mat> images;
|
||||||
string result_name = "result.png";
|
string result_name = "result.png";
|
||||||
int ba_space = BundleAdjuster::RAY_SPACE;
|
int ba_space = BundleAdjuster::FOCAL_RAY_SPACE;
|
||||||
float ba_thresh = 1.f;
|
float ba_thresh = 1.f;
|
||||||
bool wave_correct = false;
|
bool wave_correct = false;
|
||||||
int warp_type = Warper::SPHERICAL;
|
int warp_type = Warper::SPHERICAL;
|
||||||
@ -75,19 +79,19 @@ int main(int argc, char* argv[])
|
|||||||
ba_thresh = static_cast<float>(atof(argv[i + 1]));
|
ba_thresh = static_cast<float>(atof(argv[i + 1]));
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
//else if (string(argv[i]) == "--wavecorrect")
|
else if (string(argv[i]) == "--wavecorrect")
|
||||||
//{
|
{
|
||||||
// if (string(argv[i + 1]) == "no")
|
if (string(argv[i + 1]) == "no")
|
||||||
// wave_correct = false;
|
wave_correct = false;
|
||||||
// else if (string(argv[i + 1]) == "yes")
|
else if (string(argv[i + 1]) == "yes")
|
||||||
// wave_correct = true;
|
wave_correct = true;
|
||||||
// else
|
else
|
||||||
// {
|
{
|
||||||
// cout << "Bad wave correct flag value\n";
|
cout << "Bad wave correct flag value\n";
|
||||||
// return -1;
|
return -1;
|
||||||
// }
|
}
|
||||||
// i++;
|
i++;
|
||||||
//}
|
}
|
||||||
else if (string(argv[i]) == "--warp")
|
else if (string(argv[i]) == "--warp")
|
||||||
{
|
{
|
||||||
if (string(argv[i + 1]) == "plane")
|
if (string(argv[i + 1]) == "plane")
|
||||||
|
@ -685,7 +685,6 @@ void BundleAdjuster::calcJacobian()
|
|||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
// TODO test on adobe/halfdome
|
|
||||||
void waveCorrect(vector<Mat> &rmats)
|
void waveCorrect(vector<Mat> &rmats)
|
||||||
{
|
{
|
||||||
float data[9];
|
float data[9];
|
||||||
@ -710,10 +709,13 @@ void waveCorrect(vector<Mat> &rmats)
|
|||||||
Mat avgz = Mat::zeros(3, 1, CV_32F);
|
Mat avgz = Mat::zeros(3, 1, CV_32F);
|
||||||
for (size_t i = 0; i < rmats.size(); ++i)
|
for (size_t i = 0; i < rmats.size(); ++i)
|
||||||
avgz += rmats[i].col(2);
|
avgz += rmats[i].col(2);
|
||||||
avgz.t().cross(r1).copyTo(r0);
|
r1.cross(avgz.t()).copyTo(r0);
|
||||||
normalize(r0, r0);
|
normalize(r0, r0);
|
||||||
|
|
||||||
r0.cross(r1).copyTo(r2);
|
r1.cross(r0).copyTo(r2);
|
||||||
|
|
||||||
|
if (determinant(R) < 0)
|
||||||
|
R *= -1;
|
||||||
|
|
||||||
for (size_t i = 0; i < rmats.size(); ++i)
|
for (size_t i = 0; i < rmats.size(); ++i)
|
||||||
rmats[i] = R * rmats[i];
|
rmats[i] = R * rmats[i];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user