Implemented new algorithm for asymmetric circles pattern detection. Use flag CALIB_CB_CLUSTERING.

This commit is contained in:
Ilya Lysenkov
2011-04-15 15:33:11 +00:00
parent 2c8af20bd0
commit 37cd2b6f25
4 changed files with 290 additions and 2 deletions

View File

@@ -45,9 +45,33 @@
#include <fstream>
#include <set>
#include <list>
#include <numeric>
#include "precomp.hpp"
class CirclesGridClusterFinder
{
public:
CirclesGridClusterFinder()
{
squareSize = 1.0f;
maxRectifiedDistance = squareSize / 2.0;
}
void findGrid(const std::vector<cv::Point2f> points, cv::Size patternSize, std::vector<cv::Point2f>& centers);
//cluster 2d points by geometric coordinates
void hierarchicalClustering(const std::vector<cv::Point2f> points, const cv::Size &patternSize, std::vector<cv::Point2f> &patternPoints);
private:
void findCorners(const std::vector<cv::Point2f> &hull2f, std::vector<cv::Point2f> &corners);
void findOutsideCorners(const std::vector<cv::Point2f> &corners, std::vector<cv::Point2f> &outsideCorners);
void getSortedCorners(const std::vector<cv::Point2f> &hull2f, const std::vector<cv::Point2f> &corners, const std::vector<cv::Point2f> &outsideCorners, std::vector<cv::Point2f> &sortedCorners);
void rectifyPatternPoints(const cv::Size &patternSize, const std::vector<cv::Point2f> &patternPoints, const std::vector<cv::Point2f> &sortedCorners, std::vector<cv::Point2f> &rectifiedPatternPoints);
void parsePatternPoints(const cv::Size &patternSize, const std::vector<cv::Point2f> &patternPoints, const std::vector<cv::Point2f> &rectifiedPatternPoints, std::vector<cv::Point2f> &centers);
float squareSize, maxRectifiedDistance;
};
class Graph
{
public: