From: Ilya Lysenkov Date: Tue, 21 Dec 2010 10:08:57 +0000 (+0000) Subject: Used Poitn2f instead of KeyPoint X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~7986 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c4a8ae59311a062d69e3a4e393b2e4507bfdf302;p=platform%2Fupstream%2Fopencv.git Used Poitn2f instead of KeyPoint --- diff --git a/modules/calib3d/src/blobdetector.cpp b/modules/calib3d/src/blobdetector.cpp index 8f6a10d..b247cb5 100644 --- a/modules/calib3d/src/blobdetector.cpp +++ b/modules/calib3d/src/blobdetector.cpp @@ -79,7 +79,7 @@ BlobDetector::BlobDetector(const BlobDetectorParameters ¶meters) : { } -void BlobDetector::detect(const cv::Mat& image, vector& keypoints, const cv::Mat& mask) const +void BlobDetector::detect(const cv::Mat& image, vector& keypoints, const cv::Mat& mask) const { detectImpl(image, keypoints, mask); } @@ -219,7 +219,7 @@ void BlobDetector::findBlobs(const cv::Mat &image, const cv::Mat &binaryImage, v //waitKey(); } -void BlobDetector::detectImpl(const cv::Mat& image, std::vector& keypoints, const cv::Mat& mask) const +void BlobDetector::detectImpl(const cv::Mat& image, std::vector& keypoints, const cv::Mat& mask) const { keypoints.clear(); Mat grayscaleImage; @@ -282,7 +282,6 @@ void BlobDetector::detectImpl(const cv::Mat& image, std::vector& k normalizer += centers[i][j].confidence; } sumPoint *= (1. / normalizer); - KeyPoint kpt(sumPoint, params.defaultKeypointSize); - keypoints.push_back(kpt); + keypoints.push_back(sumPoint); } } diff --git a/modules/calib3d/src/blobdetector.hpp b/modules/calib3d/src/blobdetector.hpp index 925cedb..0d291a8 100644 --- a/modules/calib3d/src/blobdetector.hpp +++ b/modules/calib3d/src/blobdetector.hpp @@ -44,7 +44,6 @@ #define BLOBDETECTOR_HPP_ #include "precomp.hpp" -#include "../../features2d/include/opencv2/features2d/features2d.hpp" struct BlobDetectorParameters { @@ -72,7 +71,7 @@ class BlobDetector //: public cv::FeatureDetector { public: BlobDetector(const BlobDetectorParameters ¶meters = BlobDetectorParameters()); - void detect(const cv::Mat& image, vector& keypoints, const cv::Mat& mask = cv::Mat()) const; + void detect(const cv::Mat& image, std::vector& keypoints, const cv::Mat& mask = cv::Mat()) const; protected: struct Center { @@ -81,10 +80,10 @@ protected: double confidence; }; - virtual void detectImpl(const cv::Mat& image, vector& keypoints, const cv::Mat& mask = cv::Mat()) const; - virtual void findBlobs(const cv::Mat &image, const cv::Mat &binaryImage, vector
¢ers) const; + virtual void detectImpl(const cv::Mat& image, std::vector& keypoints, const cv::Mat& mask = cv::Mat()) const; + virtual void findBlobs(const cv::Mat &image, const cv::Mat &binaryImage, std::vector
¢ers) const; - cv::Point2d computeGrayscaleCentroid(const cv::Mat &image, const vector &contour) const; + cv::Point2d computeGrayscaleCentroid(const cv::Mat &image, const std::vector &contour) const; BlobDetectorParameters params; }; diff --git a/modules/calib3d/src/calibinit.cpp b/modules/calib3d/src/calibinit.cpp index fbc7b83..b2fa404 100644 --- a/modules/calib3d/src/calibinit.cpp +++ b/modules/calib3d/src/calibinit.cpp @@ -1940,7 +1940,7 @@ bool findCirclesGrid( const Mat& image, Size patternSize, { Ptr detector = new BlobDetector(); //Ptr detector = new MserFeatureDetector(); - vector keypoints; + vector keypoints; detector->detect(image, keypoints); CirclesGridFinderParameters parameters; diff --git a/modules/calib3d/src/circlesgrid.cpp b/modules/calib3d/src/circlesgrid.cpp index c95681c..ad4d8bb 100644 --- a/modules/calib3d/src/circlesgrid.cpp +++ b/modules/calib3d/src/circlesgrid.cpp @@ -43,6 +43,7 @@ #include "circlesgrid.hpp" using namespace cv; +using namespace std; Graph::Graph(int n) { @@ -152,7 +153,7 @@ CirclesGridFinderParameters::CirclesGridFinderParameters() existingVertexGain = 0; } -CirclesGridFinder::CirclesGridFinder(Size _patternSize, const vector &testKeypoints, +CirclesGridFinder::CirclesGridFinder(Size _patternSize, const vector &testKeypoints, const CirclesGridFinderParameters &_parameters) : patternSize(_patternSize) { @@ -252,7 +253,7 @@ void CirclesGridFinder::findMCS(const vector &basis, vector &bas } Mat CirclesGridFinder::rectifyGrid(Size detectedGridSize, const vector& centers, - const vector &keypoints, vector &warpedKeypoints) + const vector &keypoints, vector &warpedKeypoints) { assert( !centers.empty() ); const float edgeLength = 30; @@ -274,7 +275,7 @@ Mat CirclesGridFinder::rectifyGrid(Size detectedGridSize, const vector& vector srcKeypoints; for (size_t i = 0; i < keypoints.size(); i++) { - srcKeypoints.push_back(keypoints[i].pt); + srcKeypoints.push_back(keypoints[i]); } Mat dstKeypointsMat; @@ -286,7 +287,7 @@ Mat CirclesGridFinder::rectifyGrid(Size detectedGridSize, const vector& for (size_t i = 0; i < dstKeypoints.size(); i++) { Point2f pt = dstKeypoints[i]; - warpedKeypoints.push_back(KeyPoint(pt, keypointScale)); + warpedKeypoints.push_back(pt); } return H; @@ -298,7 +299,7 @@ int CirclesGridFinder::findNearestKeypoint(Point2f pt) const float minDist = std::numeric_limits::max(); for (size_t i = 0; i < keypoints.size(); i++) { - float dist = norm(pt - keypoints[i].pt); + float dist = norm(pt - keypoints[i]); if (dist < minDist) { minDist = dist; @@ -311,9 +312,9 @@ int CirclesGridFinder::findNearestKeypoint(Point2f pt) const void CirclesGridFinder::addPoint(Point2f pt, vector &points) { int ptIdx = findNearestKeypoint(pt); - if (norm(keypoints[ptIdx].pt - pt) > parameters.minDistanceToAddKeypoint) + if (norm(keypoints[ptIdx] - pt) > parameters.minDistanceToAddKeypoint) { - KeyPoint kpt = KeyPoint(pt, parameters.keypointScale); + Point2f kpt = Point2f(pt); keypoints.push_back(kpt); points.push_back(keypoints.size() - 1); } @@ -333,7 +334,7 @@ void CirclesGridFinder::findCandidateLine(vector &line, int seedLineIdx, bo { for (size_t i = 0; i < holes[seedLineIdx].size(); i++) { - Point2f pt = keypoints[holes[seedLineIdx][i]].pt + basisVec; + Point2f pt = keypoints[holes[seedLineIdx][i]] + basisVec; addPoint(pt, line); seeds.push_back(holes[seedLineIdx][i]); } @@ -342,7 +343,7 @@ void CirclesGridFinder::findCandidateLine(vector &line, int seedLineIdx, bo { for (size_t i = 0; i < holes.size(); i++) { - Point2f pt = keypoints[holes[i][seedLineIdx]].pt + basisVec; + Point2f pt = keypoints[holes[i][seedLineIdx]] + basisVec; addPoint(pt, line); seeds.push_back(holes[i][seedLineIdx]); } @@ -594,7 +595,7 @@ void CirclesGridFinder::findBasis(const vector &samples, vector &vectors, Mat *d if (i == j) continue; - Point2f vec = keypoints[i].pt - keypoints[j].pt; + Point2f vec = keypoints[i] - keypoints[j]; float dist = norm(vec); bool isNeighbors = true; @@ -628,8 +629,8 @@ void CirclesGridFinder::computeEdgeVectorsOfRNG(vector &vectors, Mat *d if (k == i || k == j) continue; - float dist1 = norm(keypoints[i].pt - keypoints[k].pt); - float dist2 = norm(keypoints[j].pt - keypoints[k].pt); + float dist1 = norm(keypoints[i] - keypoints[k]); + float dist2 = norm(keypoints[j] - keypoints[k]); if (dist1 < dist && dist2 < dist) { isNeighbors = false; @@ -639,12 +640,12 @@ void CirclesGridFinder::computeEdgeVectorsOfRNG(vector &vectors, Mat *d if (isNeighbors) { - vectors.push_back(keypoints[i].pt - keypoints[j].pt); + vectors.push_back(keypoints[i] - keypoints[j]); if (drawImage != 0) { - line(*drawImage, keypoints[i].pt, keypoints[j].pt, Scalar(255, 0, 0), 2); - circle(*drawImage, keypoints[i].pt, 3, Scalar(0, 0, 255), -1); - circle(*drawImage, keypoints[j].pt, 3, Scalar(0, 0, 255), -1); + line(*drawImage, keypoints[i], keypoints[j], Scalar(255, 0, 0), 2); + circle(*drawImage, keypoints[i], 3, Scalar(0, 0, 255), -1); + circle(*drawImage, keypoints[j], 3, Scalar(0, 0, 255), -1); } } } @@ -741,8 +742,8 @@ size_t CirclesGridFinder::findLongestPath(vector &basisGraphs, Path &best //int bestPathIdx = rand() % longestPaths.size(); bestPath = longestPaths.at(bestPathIdx); - bool needReverse = (bestGraphIdx == 0 && keypoints[bestPath.lastVertex].pt.x < keypoints[bestPath.firstVertex].pt.x) - || (bestGraphIdx == 1 && keypoints[bestPath.lastVertex].pt.y < keypoints[bestPath.firstVertex].pt.y); + bool needReverse = (bestGraphIdx == 0 && keypoints[bestPath.lastVertex].x < keypoints[bestPath.firstVertex].x) + || (bestGraphIdx == 1 && keypoints[bestPath.lastVertex].y < keypoints[bestPath.firstVertex].y); if (needReverse) { std::swap(bestPath.lastVertex, bestPath.firstVertex); @@ -782,7 +783,7 @@ void CirclesGridFinder::drawBasisGraphs(const vector &basisGraphs, Mat &d { if (basisGraphs[i].areVerticesAdjacent(v1, v2)) { - line(drawImage, keypoints[v1].pt, keypoints[v2].pt, edgeColor, edgeThickness); + line(drawImage, keypoints[v1], keypoints[v2], edgeColor, edgeThickness); } } } @@ -792,7 +793,7 @@ void CirclesGridFinder::drawBasisGraphs(const vector &basisGraphs, Mat &d { for (size_t v = 0; v < basisGraphs[0].getVerticesCount(); v++) { - circle(drawImage, keypoints[v].pt, vertexRadius, vertexColor, vertexThickness); + circle(drawImage, keypoints[v], vertexRadius, vertexColor, vertexThickness); } } } @@ -818,12 +819,12 @@ void CirclesGridFinder::drawHoles(const Mat &srcImage, Mat &drawImage) const for (size_t j = 0; j < holes[i].size(); j++) { if (j != holes[i].size() - 1) - line(drawImage, keypoints[holes[i][j]].pt, keypoints[holes[i][j + 1]].pt, Scalar(255, 0, 0), 2); + line(drawImage, keypoints[holes[i][j]], keypoints[holes[i][j + 1]], Scalar(255, 0, 0), 2); if (i != holes.size() - 1) - line(drawImage, keypoints[holes[i][j]].pt, keypoints[holes[i + 1][j]].pt, Scalar(255, 0, 0), 2); + line(drawImage, keypoints[holes[i][j]], keypoints[holes[i + 1][j]], Scalar(255, 0, 0), 2); - //circle(drawImage, keypoints[holes[i][j]].pt, holeRadius, holeColor, holeThickness); - circle(drawImage, keypoints[holes[i][j]].pt, holeRadius, holeColor, holeThickness); + //circle(drawImage, keypoints[holes[i][j]], holeRadius, holeColor, holeThickness); + circle(drawImage, keypoints[holes[i][j]], holeRadius, holeColor, holeThickness); } } } @@ -844,7 +845,7 @@ void CirclesGridFinder::getHoles(vector &outHoles) const { for (size_t j = 0; j < holes[i].size(); j++) { - outHoles.push_back(keypoints[holes[i][j]].pt); + outHoles.push_back(keypoints[holes[i][j]]); } } } diff --git a/modules/calib3d/src/circlesgrid.hpp b/modules/calib3d/src/circlesgrid.hpp index bc23353..83a181b 100644 --- a/modules/calib3d/src/circlesgrid.hpp +++ b/modules/calib3d/src/circlesgrid.hpp @@ -49,17 +49,16 @@ #include #include "precomp.hpp" -#include "../../features2d/include/opencv2/features2d/features2d.hpp" class Graph { public: - typedef set Neighbors; + typedef std::set Neighbors; struct Vertex { Neighbors neighbors; }; - typedef map Vertices; + typedef std::map Vertices; Graph( int n); bool doesVertexExist( int id ) const; @@ -80,7 +79,7 @@ struct Path int lastVertex; int length; - vector vertices; + std::vector vertices; Path(int first = -1, int last = -1, int len = -1) { @@ -110,45 +109,45 @@ struct CirclesGridFinderParameters class CirclesGridFinder { public: - CirclesGridFinder(cv::Size patternSize, const vector &testKeypoints, + CirclesGridFinder(cv::Size patternSize, const std::vector &testKeypoints, const CirclesGridFinderParameters ¶meters = CirclesGridFinderParameters()); bool findHoles(); - static cv::Mat rectifyGrid(cv::Size detectedGridSize, const vector& centers, - const vector &keypoint, vector &warpedKeypoints); + static cv::Mat rectifyGrid(cv::Size detectedGridSize, const std::vector& centers, + const std::vector &keypoint, std::vector &warpedKeypoints); - void getHoles(vector &holes) const; + void getHoles(std::vector &holes) const; cv::Size getDetectedGridSize() const; - void drawBasis(const vector &basis, cv::Point2f origin, cv::Mat &drawImg) const; - void drawBasisGraphs(const vector &basisGraphs, cv::Mat &drawImg, bool drawEdges = true, bool drawVertices = + void drawBasis(const std::vector &basis, cv::Point2f origin, cv::Mat &drawImg) const; + void drawBasisGraphs(const std::vector &basisGraphs, cv::Mat &drawImg, bool drawEdges = true, bool drawVertices = true) const; void drawHoles(const cv::Mat &srcImage, cv::Mat &drawImage) const; private: - void computeEdgeVectorsOfRNG(vector &vectors, cv::Mat *drawImage = 0) const; - void filterOutliersByDensity(const vector &samples, vector &filteredSamples); - void findBasis(const vector &samples, vector &basis, vector &basisGraphs); - void findMCS(const vector &basis, vector &basisGraphs); - size_t findLongestPath(vector &basisGraphs, Path &bestPath); - float computeGraphConfidence(const vector &basisGraphs, bool addRow, const vector &points, const vector< + void computeEdgeVectorsOfRNG(std::vector &vectors, cv::Mat *drawImage = 0) const; + void filterOutliersByDensity(const std::vector &samples, std::vector &filteredSamples); + void findBasis(const std::vector &samples, std::vector &basis, std::vector &basisGraphs); + void findMCS(const std::vector &basis, std::vector &basisGraphs); + size_t findLongestPath(std::vector &basisGraphs, Path &bestPath); + float computeGraphConfidence(const std::vector &basisGraphs, bool addRow, const std::vector &points, const std::vector< int> &seeds); - void addHolesByGraph(const vector &basisGraphs, bool addRow, cv::Point2f basisVec); + void addHolesByGraph(const std::vector &basisGraphs, bool addRow, cv::Point2f basisVec); int findNearestKeypoint(cv::Point2f pt) const; - void addPoint(cv::Point2f pt, vector &points); - void findCandidateLine(vector &line, int seedLineIdx, bool addRow, cv::Point2f basisVec, vector &seeds); - void findCandidateHoles(vector &above, vector &below, bool addRow, cv::Point2f basisVec, - vector &aboveSeeds, vector &belowSeeds); - static bool areCentersNew( const vector &newCenters, const vector > &holes ); + void addPoint(cv::Point2f pt, std::vector &points); + void findCandidateLine(std::vector &line, int seedLineIdx, bool addRow, cv::Point2f basisVec, std::vector &seeds); + void findCandidateHoles(std::vector &above, std::vector &below, bool addRow, cv::Point2f basisVec, + std::vector &aboveSeeds, std::vector &belowSeeds); + static bool areCentersNew( const std::vector &newCenters, const std::vector > &holes ); bool isDetectionCorrect(); static void insertWinner(float aboveConfidence, float belowConfidence, float minConfidence, bool addRow, - const vector &above, const vector &below, vector > &holes); + const std::vector &above, const std::vector &below, std::vector > &holes); static bool areVerticesAdjacent(const Graph &graph, int vertex1, int vertex2); - vector keypoints; + std::vector keypoints; - vector > holes; + std::vector > holes; const cv::Size patternSize; CirclesGridFinderParameters parameters; };