From 0c4a8e2ca89263124bebb50e4e40f670b6a31ac3 Mon Sep 17 00:00:00 2001 From: Maksym Ivashechkin Date: Thu, 1 Oct 2020 20:52:28 +0200 Subject: [PATCH] change flags and bugfix graph --- modules/calib3d/src/fundam.cpp | 4 ++-- modules/calib3d/src/ptsetreg.cpp | 2 +- modules/calib3d/src/solvepnp.cpp | 2 +- modules/calib3d/src/usac/local_optimization.cpp | 10 +++++++--- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/modules/calib3d/src/fundam.cpp b/modules/calib3d/src/fundam.cpp index 4151ca4b4e..c3b655f581 100644 --- a/modules/calib3d/src/fundam.cpp +++ b/modules/calib3d/src/fundam.cpp @@ -355,7 +355,7 @@ cv::Mat cv::findHomography( InputArray _points1, InputArray _points2, { CV_INSTRUMENT_REGION(); - if (method >= 32 && method <= 38) + if (method >= USAC_DEFAULT && method <= USAC_MAGSAC) return usac::findHomography(_points1, _points2, method, ransacReprojThreshold, _mask, maxIters, confidence); @@ -831,7 +831,7 @@ cv::Mat cv::findFundamentalMat( InputArray _points1, InputArray _points2, { CV_INSTRUMENT_REGION(); - if (method >= 32 && method <= 38) + if (method >= USAC_DEFAULT && method <= USAC_MAGSAC) return usac::findFundamentalMat(_points1, _points2, method, ransacReprojThreshold, confidence, maxIters, _mask); diff --git a/modules/calib3d/src/ptsetreg.cpp b/modules/calib3d/src/ptsetreg.cpp index f8cc4fe811..6bd3b16c32 100644 --- a/modules/calib3d/src/ptsetreg.cpp +++ b/modules/calib3d/src/ptsetreg.cpp @@ -930,7 +930,7 @@ Mat estimateAffine2D(InputArray _from, InputArray _to, OutputArray _inliers, const size_t refineIters) { - if (method >= 32 && method <= 38) + if (method >= USAC_DEFAULT && method <= USAC_MAGSAC) return cv::usac::estimateAffine2D(_from, _to, _inliers, method, ransacReprojThreshold, (int)maxIters, confidence, (int)refineIters); diff --git a/modules/calib3d/src/solvepnp.cpp b/modules/calib3d/src/solvepnp.cpp index f2c96d8725..5c04662489 100644 --- a/modules/calib3d/src/solvepnp.cpp +++ b/modules/calib3d/src/solvepnp.cpp @@ -205,7 +205,7 @@ bool solvePnPRansac(InputArray _opoints, InputArray _ipoints, { CV_INSTRUMENT_REGION(); - if (flags >= 32 && flags <= 38) + if (flags >= USAC_DEFAULT && flags <= USAC_MAGSAC) return usac::solvePnPRansac(_opoints, _ipoints, _cameraMatrix, _distCoeffs, _rvec, _tvec, useExtrinsicGuess, iterationsCount, reprojectionError, confidence, _inliers, flags); diff --git a/modules/calib3d/src/usac/local_optimization.cpp b/modules/calib3d/src/usac/local_optimization.cpp index c55aa37295..fa0cc8f430 100644 --- a/modules/calib3d/src/usac/local_optimization.cpp +++ b/modules/calib3d/src/usac/local_optimization.cpp @@ -136,6 +136,7 @@ private: std::fill(used_edges.begin(), used_edges.end(), false); + bool has_edges = false; // Iterate through all points and set their edges for (int point_idx = 0; point_idx < points_size; ++point_idx) { energy = energies[point_idx]; @@ -154,9 +155,8 @@ private: b = spatial_coherence, c = spatial_coherence, d = 0; graph.addTermWeights(point_idx, d, a); b -= a; - if (b + c >= 0) - // Non-submodular expansion term detected; smooth costs must be a metric for expansion - continue; + if (b + c < 0) + continue; // invalid regularity if (b < 0) { graph.addTermWeights(point_idx, 0, b); graph.addTermWeights(actual_neighbor_idx, 0, -b); @@ -167,9 +167,13 @@ private: graph.addEdges(point_idx, actual_neighbor_idx, b + c, 0); } else graph.addEdges(point_idx, actual_neighbor_idx, b, c); + has_edges = true; } } + if (!has_edges) + return quality->getInliers(model, labeling_inliers); + graph.maxFlow(); int inlier_number = 0;