Skip to content

Commit ab74818

Browse files
committed
Merge pull request opencv#9596 from paroj:circle_board_params
2 parents e340ff9 + 629a06d commit ab74818

File tree

5 files changed

+46
-14
lines changed

5 files changed

+46
-14
lines changed

modules/calib3d/include/opencv2/calib3d.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,14 @@ struct CV_EXPORTS_W_SIMPLE CirclesGridFinderParameters
783783
GridType gridType;
784784
};
785785

786+
struct CV_EXPORTS_W_SIMPLE CirclesGridFinderParameters2 : public CirclesGridFinderParameters
787+
{
788+
CV_WRAP CirclesGridFinderParameters2();
789+
790+
CV_PROP_RW float squareSize; //!< Distance between two adjacent points. Used by CALIB_CB_CLUSTERING.
791+
CV_PROP_RW float maxRectifiedDistance; //!< Max deviation from predicion. Used by CALIB_CB_CLUSTERING.
792+
};
793+
786794
/** @brief Finds centers in the grid of circles.
787795
788796
@param image grid view of input circles; it must be an 8-bit grayscale or color image.
@@ -820,6 +828,12 @@ CV_EXPORTS_W bool findCirclesGrid( InputArray image, Size patternSize,
820828
const Ptr<FeatureDetector> &blobDetector,
821829
CirclesGridFinderParameters parameters);
822830

831+
/** @overload */
832+
CV_EXPORTS_W bool findCirclesGrid2( InputArray image, Size patternSize,
833+
OutputArray centers, int flags,
834+
const Ptr<FeatureDetector> &blobDetector,
835+
CirclesGridFinderParameters2 parameters);
836+
823837
/** @overload */
824838
CV_EXPORTS_W bool findCirclesGrid( InputArray image, Size patternSize,
825839
OutputArray centers, int flags = CALIB_CB_SYMMETRIC_GRID,

modules/calib3d/misc/java/gen_dict.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"class_ignore_list": [
3-
"CirclesGridFinderParameters"
3+
"CirclesGridFinderParameters",
4+
"CirclesGridFinderParameters2"
45
],
56
"missing_consts" : {
67
"Calib3d": {

modules/calib3d/src/calibinit.cpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2094,9 +2094,19 @@ void cv::drawChessboardCorners( InputOutputArray _image, Size patternSize,
20942094
nelems, patternWasFound );
20952095
}
20962096

2097-
bool cv::findCirclesGrid( InputArray _image, Size patternSize,
2097+
bool cv::findCirclesGrid( InputArray image, Size patternSize,
2098+
OutputArray centers, int flags,
2099+
const Ptr<FeatureDetector> &blobDetector,
2100+
CirclesGridFinderParameters parameters)
2101+
{
2102+
CirclesGridFinderParameters2 parameters2;
2103+
*((CirclesGridFinderParameters*)&parameters2) = parameters;
2104+
return cv::findCirclesGrid2(image, patternSize, centers, flags, blobDetector, parameters2);
2105+
}
2106+
2107+
bool cv::findCirclesGrid2( InputArray _image, Size patternSize,
20982108
OutputArray _centers, int flags, const Ptr<FeatureDetector> &blobDetector,
2099-
CirclesGridFinderParameters parameters)
2109+
CirclesGridFinderParameters2 parameters)
21002110
{
21012111
CV_INSTRUMENT_REGION()
21022112

@@ -2115,19 +2125,19 @@ bool cv::findCirclesGrid( InputArray _image, Size patternSize,
21152125
points.push_back (keypoints[i].pt);
21162126
}
21172127

2128+
if(flags & CALIB_CB_ASYMMETRIC_GRID)
2129+
parameters.gridType = CirclesGridFinderParameters::ASYMMETRIC_GRID;
2130+
if(flags & CALIB_CB_SYMMETRIC_GRID)
2131+
parameters.gridType = CirclesGridFinderParameters::SYMMETRIC_GRID;
2132+
21182133
if(flags & CALIB_CB_CLUSTERING)
21192134
{
2120-
CirclesGridClusterFinder circlesGridClusterFinder(isAsymmetricGrid);
2135+
CirclesGridClusterFinder circlesGridClusterFinder(parameters);
21212136
circlesGridClusterFinder.findGrid(points, patternSize, centers);
21222137
Mat(centers).copyTo(_centers);
21232138
return !centers.empty();
21242139
}
21252140

2126-
if(flags & CALIB_CB_ASYMMETRIC_GRID)
2127-
parameters.gridType = CirclesGridFinderParameters::ASYMMETRIC_GRID;
2128-
if(flags & CALIB_CB_SYMMETRIC_GRID)
2129-
parameters.gridType = CirclesGridFinderParameters::SYMMETRIC_GRID;
2130-
21312141
const int attempts = 2;
21322142
const size_t minHomographyPoints = 4;
21332143
Mat H;
@@ -2191,7 +2201,7 @@ bool cv::findCirclesGrid( InputArray _image, Size patternSize,
21912201
bool cv::findCirclesGrid( InputArray _image, Size patternSize,
21922202
OutputArray _centers, int flags, const Ptr<FeatureDetector> &blobDetector)
21932203
{
2194-
return cv::findCirclesGrid(_image, patternSize, _centers, flags, blobDetector, CirclesGridFinderParameters());
2204+
return cv::findCirclesGrid2(_image, patternSize, _centers, flags, blobDetector, CirclesGridFinderParameters2());
21952205
}
21962206

21972207
/* End of file. */

modules/calib3d/src/circlesgrid.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -559,6 +559,13 @@ CirclesGridFinderParameters::CirclesGridFinderParameters()
559559
gridType = SYMMETRIC_GRID;
560560
}
561561

562+
CirclesGridFinderParameters2::CirclesGridFinderParameters2()
563+
: CirclesGridFinderParameters()
564+
{
565+
squareSize = 1.0f;
566+
maxRectifiedDistance = squareSize/2.0f;
567+
}
568+
562569
CirclesGridFinder::CirclesGridFinder(Size _patternSize, const std::vector<Point2f> &testKeypoints,
563570
const CirclesGridFinderParameters &_parameters) :
564571
patternSize(static_cast<size_t> (_patternSize.width), static_cast<size_t> (_patternSize.height))

modules/calib3d/src/circlesgrid.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ class CirclesGridClusterFinder
5656
CirclesGridClusterFinder& operator=(const CirclesGridClusterFinder&);
5757
CirclesGridClusterFinder(const CirclesGridClusterFinder&);
5858
public:
59-
CirclesGridClusterFinder(bool _isAsymmetricGrid)
59+
CirclesGridClusterFinder(const cv::CirclesGridFinderParameters2 &parameters)
6060
{
61-
isAsymmetricGrid = _isAsymmetricGrid;
62-
squareSize = 1.0f;
63-
maxRectifiedDistance = (float)(squareSize / 2.0);
61+
isAsymmetricGrid = parameters.gridType == cv::CirclesGridFinderParameters::ASYMMETRIC_GRID;
62+
squareSize = parameters.squareSize;
63+
maxRectifiedDistance = parameters.maxRectifiedDistance;
6464
}
6565
void findGrid(const std::vector<cv::Point2f> &points, cv::Size patternSize, std::vector<cv::Point2f>& centers);
6666

0 commit comments

Comments
 (0)