From 0c88cc695ed0316f82191ac860813f9e3fb68632 Mon Sep 17 00:00:00 2001 From: Sergi Pujol <sergi.pujol.badell@estudiantat.upc.edu> Date: Thu, 4 Feb 2021 17:39:17 +0100 Subject: [PATCH] scene candidate evaluation added --- src/corner_falko_2d.cpp | 40 ++++++++++++++++-------------- src/corner_falko_2d.h | 16 +++++++++--- src/examples/corner_falko_demo.cpp | 2 +- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/corner_falko_2d.cpp b/src/corner_falko_2d.cpp index 5c1193a..c48b928 100644 --- a/src/corner_falko_2d.cpp +++ b/src/corner_falko_2d.cpp @@ -29,13 +29,7 @@ CornerFalko2d::~CornerFalko2d() } -void CornerFalko2d::storeCorners (LaserScan scan,LaserScanParams scanParams, int scanInterval){ - - scanNumber=scanNumber+1; - - if (scanNumber % scanInterval == 0){ - - falkolib::LaserScan scanFALKO= convert2LaserScanFALKO(scan, scanParams); +void CornerFalko2d::AddNewReferenceScene (falkolib::LaserScan scanFALKO){ // Extract keypoints lastKeypointSet.clear(); @@ -50,8 +44,6 @@ void CornerFalko2d::storeCorners (LaserScan scan,LaserScanParams scanParams, int scansExtracted=scansExtracted+1; - } - } void CornerFalko2d::findLoopClosure(LaserScan scan,LaserScanParams scanParams){ @@ -80,15 +72,7 @@ void CornerFalko2d::findLoopClosure(LaserScan scan,LaserScanParams scanParams){ matchingNumber=NewMatchingNumber; matchingPosition=i; } - -/* for (auto& match : assoNN) { - if (match.second >= 0) { - int i1 = match.first; - int i2 = match.second; - std::cout << "i1: " << i1 << "\ti2: " << i2 << "\t keypoints distance: " << (keypoints1[i1].distance(keypoints2[i2])) << "\t CHG Distance: " << (cghDesc1[i1].distance(cghDesc2[i2])) << "\t BSC Distance: " << (bscDesc1[i1].distance(bscDesc2[i2])) << endl; - } - } - */ } + } } @@ -101,6 +85,26 @@ falkolib::LaserScan CornerFalko2d::convert2LaserScanFALKO(LaserScan scan,LaserSc } +int CornerFalko2d::evaluateNewReferenceScene(LaserScan scan,LaserScanParams scanParams, int scanInterval){ + + scanNumber=scanNumber+1; + + int NewSceneAdded=0; + + if (scanNumber % scanInterval == 0){ + + falkolib::LaserScan scanFALKO= convert2LaserScanFALKO(scan, scanParams); + + AddNewReferenceScene(scanFALKO); + + NewSceneAdded=1; + + } + + return NewSceneAdded; + +} + } // laserscanutils namespace diff --git a/src/corner_falko_2d.h b/src/corner_falko_2d.h index 4d707cd..bdab934 100644 --- a/src/corner_falko_2d.h +++ b/src/corner_falko_2d.h @@ -48,6 +48,11 @@ namespace laserscanutils class CornerFalko2d: public falkolib::FALKOExtractor, public falkolib::BSCExtractor<falkolib::FALKO>, public falkolib::NNMatcher<falkolib::FALKO> { +private: + /** \brief Get and stores a scene to use as trained/Reference set of keypoints. + **/ + void AddNewReferenceScene (falkolib::LaserScan scanFALKO); + public: /** * @brief Constructor @@ -65,10 +70,6 @@ public: **/ ~CornerFalko2d(); - /** \brief Gets a set of landmarks/scenes to use as trained set. - **/ - void storeCorners(LaserScan scan, LaserScanParams scanParams, int scanInterval); - /** \brief Extract landmark/scene (list of corners) from a given 2D scan **/ @@ -85,6 +86,13 @@ public: **/ falkolib::LaserScan convert2LaserScanFALKO(LaserScan scan,LaserScanParams scanParams); + /** \brief Evaluates if New scene is a good candidate to be a Reference Scene. If it is detected as good, + * the scene is added and the functions returns 1. If it is not a good candidate, the function returns 0 + * and the scene is not added. + **/ + int evaluateNewReferenceScene(LaserScan scan,LaserScanParams scanParams, int scanInterval); + + std::vector<std::vector<falkolib::FALKO>> keypointSets; std::vector<falkolib::FALKO> lastKeypointSet; std::vector<std::vector<falkolib::BSC>> descriptorSets; diff --git a/src/examples/corner_falko_demo.cpp b/src/examples/corner_falko_demo.cpp index 4a969bd..e9af47f 100644 --- a/src/examples/corner_falko_demo.cpp +++ b/src/examples/corner_falko_demo.cpp @@ -35,7 +35,7 @@ int main(int argc, char** argv) CornerFalko2d cornerMatching; - cornerMatching.storeCorners(scan, laserParams, scanInterval); + cornerMatching.evaluateNewReferenceScene(scan, laserParams, scanInterval); std::cout << "num keypoints1 extracted: " << cornerMatching.lastKeypointSet.size() << std::endl; -- GitLab