change flags and bugfix graph
authorMaksym Ivashechkin <maksimivashechkin@gmail.com>
Thu, 1 Oct 2020 18:52:28 +0000 (20:52 +0200)
committerMaksym Ivashechkin <maksimivashechkin@gmail.com>
Thu, 1 Oct 2020 18:52:28 +0000 (20:52 +0200)
modules/calib3d/src/fundam.cpp
modules/calib3d/src/ptsetreg.cpp
modules/calib3d/src/solvepnp.cpp
modules/calib3d/src/usac/local_optimization.cpp

index 4151ca4b4ebb9fe7b021b5910c39c8d9e0e1c5cd..c3b655f581e4376f73315c14fd64c7493f8069c7 100644 (file)
@@ -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);
 
index f8cc4fe811918674cdfb385fd12a869e1460cead..6bd3b16c32f64c41708a9b4d83f670e4ac169c67 100644 (file)
@@ -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);
 
index f2c96d8725d2343e774e4fee5fc01257783c7165..5c046624892a43c3826943c4380288939ceee209 100644 (file)
@@ -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);
index c55aa37295a407edf446bf7fb580f981846b5909..fa0cc8f430c54f8302e59cc6857e2008cb5926ba 100644 (file)
@@ -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;