-
-
Notifications
You must be signed in to change notification settings - Fork 56.2k
Fix Aruco marker incorrect detection near image edge #26968
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix Aruco marker incorrect detection near image edge #26968
Conversation
Looks like the image in the issue report is synthetic. Could you add similar test without additional image in opencv_extra (e.g. Board::generateImage(), warpPerspective, detect markers, check count and coordinates). |
The patch conflicts with #26934 a bit. Most probably the larger one will be merged first to simplify things. |
Please take a look on the failed test:
|
@MaximSmolskiy Please rebase and fix conflicts. The related PRs have been merged. |
Now |
…or-detectMarkers Add test for ArucoDetector::detectMarkers #27079 ### Pull Request Readiness Checklist Related to #26968 and #26922 See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request - [x] I agree to contribute to the project under Apache 2 License. - [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV - [x] The PR is proposed to the proper branch - [x] There is a reference to the original bug report and related work - [x] There is accuracy test, performance test and test data in opencv_extra repository, if applicable Patch to opencv_extra has the same branch name. - [x] The feature is well documented and sample code can be built with the project CMake
Pull Request Readiness Checklist
Fix #26922
As I understood the algorithm, at the first stage we search for the contours of the marker several times (adaptive threshold with different windows sizes). Therefore, for the same marker, we get several contours (inner and outer with different sizes due to the different windows sizes). In the second stage, we group the contours for the same marker into one group, from which we take the largest contour as the best candidate (which should best match the border of the marker).
The problem is that using the
minDistanceToBorder
parameter, we discard contours at the first stage. Thus, we discard the best candidates most appropriate to the marker border, and inner contours may remain, representing a significantly smaller marker border (which we observe in the issue).But if we use the
minDistanceToBorder
parameter to discard the best candidate of the group at the second stage, then there will be no such problems and we will completely discard markers located too close to the border of the image.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.