Improve contours approximations in ChessBoardDetector::generateQuads #25145
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull Request Readiness Checklist
Firstly, there were bugs/problems:
approx_contour.size() == 4, which was wrong,approx_contour.size() <= 4- is correctSecondly, approximation can be sped up. Before we approximated source contour twice on each loop iteration. But we can approximate source contour sequentially (on current iteration approximate output from previous iteration). The previous idea that for getting quadrangle we may need several approximations of source contour is taken into account here. And it will be much faster - because current countour size will decrease quite quickly with iterations.
I tested this PR (on
3.2.0code version with some modern patches) on two private datasets and it sped up chessboards detection by24%with minor changes in detected chessboards number:58seconds to44seconds (without changes in detected chessboards number)142seconds to108seconds (from536detected chessboards to532detected chessboards)And with benchmark
PR sped up chessboards detection by
12-16%with minor changes in detected chessboards number (majority is in favor of PR):See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request
Patch to opencv_extra has the same branch name.