Skip to content

Commit 5bd62f7

Browse files
author
AleksandrPanov
committed
update tests and samples to class API
1 parent d4792f3 commit 5bd62f7

18 files changed

+172
-167
lines changed

modules/aruco/include/opencv2/aruco.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ the use of this software, even if advised of the possibility of such damage.
4040
#define __OPENCV_ARUCO_HPP__
4141

4242
#include "opencv2/aruco_detector.hpp"
43+
#include "opencv2/aruco/aruco_calib_pose.hpp"
4344

4445
/**
4546
* @defgroup aruco ArUco Marker Detection

modules/aruco/include/opencv2/aruco_detector.hpp

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,48 @@ enum CornerRefineMethod{
100100
* The parameter tau_i has a direct influence on the processing speed.
101101
*/
102102
struct CV_EXPORTS_W DetectorParameters {
103-
DetectorParameters();
104-
CV_WRAP static Ptr<DetectorParameters> create();
103+
DetectorParameters():
104+
adaptiveThreshWinSizeMin(3),
105+
adaptiveThreshWinSizeMax(23),
106+
adaptiveThreshWinSizeStep(10),
107+
adaptiveThreshConstant(7),
108+
minMarkerPerimeterRate(0.03),
109+
maxMarkerPerimeterRate(4.),
110+
polygonalApproxAccuracyRate(0.03),
111+
minCornerDistanceRate(0.05),
112+
minDistanceToBorder(3),
113+
minMarkerDistanceRate(0.05),
114+
cornerRefinementMethod(CORNER_REFINE_NONE),
115+
cornerRefinementWinSize(5),
116+
cornerRefinementMaxIterations(30),
117+
cornerRefinementMinAccuracy(0.1),
118+
markerBorderBits(1),
119+
perspectiveRemovePixelPerCell(4),
120+
perspectiveRemoveIgnoredMarginPerCell(0.13),
121+
maxErroneousBitsInBorderRate(0.35),
122+
minOtsuStdDev(5.0),
123+
errorCorrectionRate(0.6),
124+
aprilTagQuadDecimate(0.0),
125+
aprilTagQuadSigma(0.0),
126+
aprilTagMinClusterPixels(5),
127+
aprilTagMaxNmaxima(10),
128+
aprilTagCriticalRad( (float)(10* CV_PI /180) ),
129+
aprilTagMaxLineFitMse(10.0),
130+
aprilTagMinWhiteBlackDiff(5),
131+
aprilTagDeglitch(0),
132+
detectInvertedMarker(false),
133+
useAruco3Detection(false),
134+
minSideLengthCanonicalImg(32),
135+
minMarkerLengthRatioOriginalImg(0.0) {};
136+
137+
/**
138+
* @brief Create a new set of DetectorParameters with default values.
139+
*/
140+
CV_WRAP static Ptr<DetectorParameters> create() {
141+
Ptr<DetectorParameters> params = makePtr<DetectorParameters>();
142+
return params;
143+
}
144+
105145
CV_WRAP bool readDetectorParameters(const FileNode& fn);
106146

107147
CV_PROP_RW int adaptiveThreshWinSizeMin;
@@ -145,6 +185,7 @@ struct CV_EXPORTS_W DetectorParameters {
145185
CV_PROP_RW bool useAruco3Detection;
146186
CV_PROP_RW int minSideLengthCanonicalImg;
147187
CV_PROP_RW float minMarkerLengthRatioOriginalImg;
188+
148189
};
149190

150191
struct CV_EXPORTS_W RefineParameters {
@@ -285,7 +326,6 @@ CV_EXPORTS_W void drawDetectedMarkers(InputOutputArray image, InputArrayOfArrays
285326
*/
286327
CV_EXPORTS_W void drawMarker(const Ptr<Dictionary> &dictionary, int id, int sidePixels, OutputArray img,
287328
int borderBits = 1);
288-
//};
289329

290330
//! @}
291331

modules/aruco/perf/perf_aruco.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ PERF_TEST_P(EstimateAruco, ArucoFirst, ESTIMATE_PARAMS)
190190
detectorParams->minSideLengthCanonicalImg = 32;
191191
detectorParams->minMarkerLengthRatioOriginalImg = 0.04f / numMarkersInRow;
192192
}
193+
aruco::ArucoDetector detector(dictionary, detectorParams);
193194
MarkerPainter painter(markerSize);
194195
auto image_map = painter.getProjectMarkersTile(numMarkersInRow, detectorParams, dictionary);
195196

@@ -198,7 +199,7 @@ PERF_TEST_P(EstimateAruco, ArucoFirst, ESTIMATE_PARAMS)
198199
vector<int> ids;
199200
TEST_CYCLE()
200201
{
201-
aruco::detectMarkers(image_map.first, dictionary, corners, ids, detectorParams);
202+
detector.detectMarkers(image_map.first, corners, ids);
202203
}
203204
ASSERT_EQ(numMarkersInRow*numMarkersInRow, static_cast<int>(ids.size()));
204205
double maxDistance = getMaxDistance(image_map.second, ids, corners);
@@ -221,6 +222,7 @@ PERF_TEST_P(EstimateAruco, ArucoSecond, ESTIMATE_PARAMS)
221222
detectorParams->minSideLengthCanonicalImg = 64;
222223
detectorParams->minMarkerLengthRatioOriginalImg = 0.f;
223224
}
225+
aruco::ArucoDetector detector(dictionary, detectorParams);
224226
const int markerSize = 200;
225227
const int numMarkersInRow = 11;
226228
MarkerPainter painter(markerSize);
@@ -231,7 +233,7 @@ PERF_TEST_P(EstimateAruco, ArucoSecond, ESTIMATE_PARAMS)
231233
vector<int> ids;
232234
TEST_CYCLE()
233235
{
234-
aruco::detectMarkers(image_map.first, dictionary, corners, ids, detectorParams);
236+
detector.detectMarkers(image_map.first, corners, ids);
235237
}
236238
ASSERT_EQ(numMarkersInRow*numMarkersInRow, static_cast<int>(ids.size()));
237239
double maxDistance = getMaxDistance(image_map.second, ids, corners);
@@ -276,6 +278,7 @@ PERF_TEST_P(EstimateLargeAruco, ArucoFHD, ESTIMATE_FHD_PARAMS)
276278
detectorParams->minSideLengthCanonicalImg = get<0>(testParams).minSideLengthCanonicalImg;
277279
detectorParams->minMarkerLengthRatioOriginalImg = get<0>(testParams).minMarkerLengthRatioOriginalImg;
278280
}
281+
aruco::ArucoDetector detector(dictionary, detectorParams);
279282
const int markerSize = get<1>(testParams).first; // 1440 or 480 or 144
280283
const int numMarkersInRow = get<1>(testParams).second; // 1 or 3 or 144
281284
MarkerPainter painter(markerSize); // num pixels is 1440x1440 as in FHD 1920x1080
@@ -286,7 +289,7 @@ PERF_TEST_P(EstimateLargeAruco, ArucoFHD, ESTIMATE_FHD_PARAMS)
286289
vector<int> ids;
287290
TEST_CYCLE()
288291
{
289-
aruco::detectMarkers(image_map.first, dictionary, corners, ids, detectorParams);
292+
detector.detectMarkers(image_map.first, corners, ids);
290293
}
291294
ASSERT_EQ(numMarkersInRow*numMarkersInRow, static_cast<int>(ids.size()));
292295
double maxDistance = getMaxDistance(image_map.second, ids, corners);

modules/aruco/perf/perf_precomp.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#define __OPENCV_PERF_PRECOMP_HPP__
66

77
#include "opencv2/ts.hpp"
8-
#include "opencv2/aruco.hpp"
8+
#include "opencv2/aruco_detector.hpp"
99
#include "opencv2/calib3d.hpp"
1010

1111
#endif

modules/aruco/samples/aruco_dict_utils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include <opencv2/core/hal/hal.hpp>
2-
#include <opencv2/aruco.hpp>
2+
#include <opencv2/aruco_detector.hpp>
33
#include <iostream>
44

55
using namespace cv;

modules/aruco/samples/aruco_samples_utility.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include <opencv2/highgui.hpp>
2-
#include <opencv2/aruco.hpp>
2+
#include <opencv2/aruco_detector.hpp>
33
#include <opencv2/calib3d.hpp>
44
#include <ctime>
55

modules/aruco/samples/calibrate_camera.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ the use of this software, even if advised of the possibility of such damage.
3939

4040
#include <opencv2/highgui.hpp>
4141
#include <opencv2/calib3d.hpp>
42-
#include <opencv2/aruco.hpp>
42+
#include <opencv2/aruco_detector.hpp>
43+
#include <opencv2/aruco/aruco_calib_pose.hpp>
4344
#include <opencv2/imgproc.hpp>
4445
#include <vector>
4546
#include <iostream>
@@ -162,6 +163,8 @@ int main(int argc, char *argv[]) {
162163
vector< vector< int > > allIds;
163164
Size imgSize;
164165

166+
aruco::ArucoDetector detector(dictionary, detectorParams);
167+
165168
while(inputVideo.grab()) {
166169
Mat image, imageCopy;
167170
inputVideo.retrieve(image);
@@ -170,10 +173,10 @@ int main(int argc, char *argv[]) {
170173
vector< vector< Point2f > > corners, rejected;
171174

172175
// detect markers
173-
aruco::detectMarkers(image, dictionary, corners, ids, detectorParams, rejected);
176+
detector.detectMarkers(image, corners, ids, rejected);
174177

175178
// refind strategy to detect more markers
176-
if(refindStrategy) aruco::refineDetectedMarkers(image, board, corners, ids, rejected);
179+
if(refindStrategy) detector.refineDetectedMarkers(image, board, corners, ids, rejected);
177180

178181
// draw results
179182
image.copyTo(imageCopy);

modules/aruco/samples/create_board.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ the use of this software, even if advised of the possibility of such damage.
3838

3939

4040
#include <opencv2/highgui.hpp>
41-
#include <opencv2/aruco.hpp>
41+
#include <opencv2/aruco_detector.hpp>
4242
#include <iostream>
4343
#include "aruco_samples_utility.hpp"
4444

modules/aruco/samples/create_marker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ the use of this software, even if advised of the possibility of such damage.
3838

3939

4040
#include <opencv2/highgui.hpp>
41-
#include <opencv2/aruco.hpp>
41+
#include <opencv2/aruco_detector.hpp>
4242
#include <iostream>
4343
#include "aruco_samples_utility.hpp"
4444

modules/aruco/samples/detect_board.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ the use of this software, even if advised of the possibility of such damage.
3838

3939

4040
#include <opencv2/highgui.hpp>
41-
#include <opencv2/aruco.hpp>
41+
#include <opencv2/aruco_detector.hpp>
42+
#include <opencv2/aruco/aruco_calib_pose.hpp>
4243
#include <vector>
4344
#include <iostream>
4445
#include "aruco_samples_utility.hpp"
@@ -135,7 +136,7 @@ int main(int argc, char *argv[]) {
135136
cerr << "Dictionary not specified" << endl;
136137
return 0;
137138
}
138-
139+
aruco::ArucoDetector detector(dictionary, detectorParams);
139140
VideoCapture inputVideo;
140141
int waitTime;
141142
if(!video.empty()) {
@@ -168,12 +169,12 @@ int main(int argc, char *argv[]) {
168169
Vec3d rvec, tvec;
169170

170171
// detect markers
171-
aruco::detectMarkers(image, dictionary, corners, ids, detectorParams, rejected);
172+
detector.detectMarkers(image, corners, ids, rejected);
172173

173174
// refind strategy to detect more markers
174175
if(refindStrategy)
175-
aruco::refineDetectedMarkers(image, board, corners, ids, rejected, camMatrix,
176-
distCoeffs);
176+
detector.refineDetectedMarkers(image, board, corners, ids, rejected, camMatrix,
177+
distCoeffs);
177178

178179
// estimate board pose
179180
int markersOfBoardDetected = 0;

modules/aruco/samples/detect_markers.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ the use of this software, even if advised of the possibility of such damage.
3838

3939

4040
#include <opencv2/highgui.hpp>
41-
#include <opencv2/aruco.hpp>
41+
#include <opencv2/aruco_detector.hpp>
42+
#include <opencv2/aruco/aruco_calib_pose.hpp>
4243
#include <iostream>
4344
#include "aruco_samples_utility.hpp"
4445

@@ -134,7 +135,7 @@ int main(int argc, char *argv[]) {
134135
return 0;
135136
}
136137
}
137-
138+
aruco::ArucoDetector detector(dictionary, detectorParams);
138139
VideoCapture inputVideo;
139140
int waitTime;
140141
if(!video.empty()) {
@@ -159,7 +160,7 @@ int main(int argc, char *argv[]) {
159160
vector< Vec3d > rvecs, tvecs;
160161

161162
// detect markers and estimate pose
162-
aruco::detectMarkers(image, dictionary, corners, ids, detectorParams, rejected);
163+
detector.detectMarkers(image, corners, ids, rejected);
163164
if(estimatePose && ids.size() > 0)
164165
aruco::estimatePoseSingleMarkers(corners, markerLength, camMatrix, distCoeffs, rvecs,
165166
tvecs);

modules/aruco/src/apriltag/apriltag_quad_thresh.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
#define _OPENCV_APRIL_QUAD_THRESH_HPP_
2121

2222
#include <opencv2/imgproc.hpp>
23-
#include "opencv2/aruco.hpp"
23+
#include "opencv2/aruco_detector.hpp"
2424
#include "unionfind.hpp"
2525
#include "zmaxheap.hpp"
2626
#include "zarray.hpp"

modules/aruco/src/aruco_detector.cpp

Lines changed: 3 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -15,50 +15,6 @@ namespace aruco {
1515

1616
using namespace std;
1717

18-
DetectorParameters::DetectorParameters()
19-
: adaptiveThreshWinSizeMin(3),
20-
adaptiveThreshWinSizeMax(23),
21-
adaptiveThreshWinSizeStep(10),
22-
adaptiveThreshConstant(7),
23-
minMarkerPerimeterRate(0.03),
24-
maxMarkerPerimeterRate(4.),
25-
polygonalApproxAccuracyRate(0.03),
26-
minCornerDistanceRate(0.05),
27-
minDistanceToBorder(3),
28-
minMarkerDistanceRate(0.05),
29-
cornerRefinementMethod(CORNER_REFINE_NONE),
30-
cornerRefinementWinSize(5),
31-
cornerRefinementMaxIterations(30),
32-
cornerRefinementMinAccuracy(0.1),
33-
markerBorderBits(1),
34-
perspectiveRemovePixelPerCell(4),
35-
perspectiveRemoveIgnoredMarginPerCell(0.13),
36-
maxErroneousBitsInBorderRate(0.35),
37-
minOtsuStdDev(5.0),
38-
errorCorrectionRate(0.6),
39-
aprilTagQuadDecimate(0.0),
40-
aprilTagQuadSigma(0.0),
41-
aprilTagMinClusterPixels(5),
42-
aprilTagMaxNmaxima(10),
43-
aprilTagCriticalRad( (float)(10* CV_PI /180) ),
44-
aprilTagMaxLineFitMse(10.0),
45-
aprilTagMinWhiteBlackDiff(5),
46-
aprilTagDeglitch(0),
47-
detectInvertedMarker(false),
48-
useAruco3Detection(false),
49-
minSideLengthCanonicalImg(32),
50-
minMarkerLengthRatioOriginalImg(0.0)
51-
{}
52-
53-
54-
/**
55-
* @brief Create a new set of DetectorParameters with default values.
56-
*/
57-
Ptr<DetectorParameters> DetectorParameters::create() {
58-
Ptr<DetectorParameters> params = makePtr<DetectorParameters>();
59-
return params;
60-
}
61-
6218
template<typename T>
6319
static inline bool readParameter(const FileNode& node, T& parameter)
6420
{
@@ -832,7 +788,6 @@ static inline void findCornerInPyrImage(const float scale_init, const int closes
832788
*/
833789
void ArucoDetector::detectMarkers(InputArray _image, OutputArrayOfArrays _corners, OutputArray _ids,
834790
OutputArrayOfArrays _rejectedImgPoints) {
835-
836791
CV_Assert(!_image.empty());
837792
CV_Assert(params->markerBorderBits > 0);
838793
// check that the parameters are set correctly if Aruco3 is used
@@ -991,9 +946,8 @@ void ArucoDetector::refineDetectedMarkers(InputArray _image, const Ptr<Board> &_
991946
vector< bool > alreadyIdentified(_rejectedCorners.total(), false);
992947

993948
// maximum bits that can be corrected
994-
Dictionary &dictionary = *(_board->dictionary);
995949
int maxCorrectionRecalculated =
996-
int(double(dictionary.maxCorrectionBits) * refineParams->errorCorrectionRate);
950+
int(double(dictionary->maxCorrectionBits) * refineParams->errorCorrectionRate);
997951

998952
Mat grey;
999953
_convertToGrey(_image, grey);
@@ -1061,7 +1015,7 @@ void ArucoDetector::refineDetectedMarkers(InputArray _image, const Ptr<Board> &_
10611015

10621016
// extract bits
10631017
Mat bits = _extractBits(
1064-
grey, rotatedMarker, dictionary.markerSize, params->markerBorderBits,
1018+
grey, rotatedMarker, dictionary->markerSize, params->markerBorderBits,
10651019
params->perspectiveRemovePixelPerCell,
10661020
params->perspectiveRemoveIgnoredMarginPerCell, params->minOtsuStdDev);
10671021

@@ -1070,7 +1024,7 @@ void ArucoDetector::refineDetectedMarkers(InputArray _image, const Ptr<Board> &_
10701024
.colRange(params->markerBorderBits, bits.rows - params->markerBorderBits);
10711025

10721026
codeDistance =
1073-
dictionary.getDistanceToId(onlyBits, undetectedMarkersIds[i], false);
1027+
dictionary->getDistanceToId(onlyBits, undetectedMarkersIds[i], false);
10741028
}
10751029

10761030
// if everythin is ok, assign values to current best match

0 commit comments

Comments
 (0)