{
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);
{
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);
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);
{
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);
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];
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);
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;