From a811a08d0d24964ef16b0938940d6c6ff47a0283 Mon Sep 17 00:00:00 2001 From: Ilya Lysenkov Date: Fri, 15 Apr 2011 17:24:07 +0000 Subject: [PATCH] Added checks for incorrect results in the circles grid pattern detection. --- modules/calib3d/src/circlesgrid.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/calib3d/src/circlesgrid.cpp b/modules/calib3d/src/circlesgrid.cpp index 2ad00b4e99..40e174b429 100644 --- a/modules/calib3d/src/circlesgrid.cpp +++ b/modules/calib3d/src/circlesgrid.cpp @@ -107,6 +107,10 @@ void CirclesGridClusterFinder::hierarchicalClustering(const vector poin void CirclesGridClusterFinder::findGrid(const std::vector points, cv::Size patternSize, vector& centers) { centers.clear(); + if(points.empty()) + { + return; + } vector patternPoints; hierarchicalClustering(points, patternSize, patternPoints); @@ -117,18 +121,30 @@ void CirclesGridClusterFinder::findGrid(const std::vector points, c vector hull2f; convexHull(Mat(patternPoints), hull2f, false); + const size_t cornersCount = 6; + if(hull2f.size() < cornersCount) + return; vector corners; findCorners(hull2f, corners); + if(corners.size() != cornersCount) + return; vector outsideCorners; findOutsideCorners(corners, outsideCorners); + const size_t outsideCornersCount = 2; + if(outsideCorners.size() != outsideCornersCount) + return; vector sortedCorners; getSortedCorners(hull2f, corners, outsideCorners, sortedCorners); + if(sortedCorners.size() != cornersCount) + return; vector rectifiedPatternPoints; rectifyPatternPoints(patternSize, patternPoints, sortedCorners, rectifiedPatternPoints); + if(patternPoints.size() != rectifiedPatternPoints.size()) + return; parsePatternPoints(patternSize, patternPoints, rectifiedPatternPoints, centers); }