From cdbaaee8f1906b1bb278ec4cfb16d17b5acd063b Mon Sep 17 00:00:00 2001
From: Sergi Pujol <sergi.pujol.badell@estudiantat.upc.edu>
Date: Thu, 28 Jan 2021 13:29:18 +0100
Subject: [PATCH] CornerFalko2d class refactorized with inheritances

---
 src/corner_falko_2d.cpp | 45 +++++++++++++++++++++--------------------
 src/corner_falko_2d.h   | 41 +++++++++++++++++++++++++++----------
 2 files changed, 53 insertions(+), 33 deletions(-)

diff --git a/src/corner_falko_2d.cpp b/src/corner_falko_2d.cpp
index 80e5b84..6e7b42f 100644
--- a/src/corner_falko_2d.cpp
+++ b/src/corner_falko_2d.cpp
@@ -9,30 +9,31 @@
 
 namespace wolf{
 
-void CornerFalko2d::extract (falkolib::LaserScan scan){
-    
-    
-    
-    fe.setMinExtractionRange(0.25);
-	fe.setMaxExtractionRange(25);
-	fe.enableSubbeam(true);
-    fe.setNMSRadius(0.1);
-    fe.setNeighB(0.01);
-    fe.setBRatio(4);
-	fe.setGridSectors(16);
-    
-    std::vector<falkolib::FALKO> keypoints;
-
-    /*
-    fe.extract(scan, keypoints);
-    
-    
-    falkolib::BSCExtractor<falkolib::FALKO> bsc(16,8);
-    std::vector<falkolib::BSC> bscDesc;
-    bsc.compute(scan, keypoints, bscDesc);
-    */
+CornerFalko2d::CornerFalko2d(int _circularSectorNumber, int _radialRingNumber, bool _useKeypointRadius, double _radius) :BSCExtractor( _circularSectorNumber, _radialRingNumber, _useKeypointRadius ,_radius ) {
+    // FALKO EXTRACTOR PARAMS
+    setMinExtractionRange(0.25);
+    setMaxExtractionRange(25);
+    enableSubbeam(true);
+    setNMSRadius(0.1);
+    setNeighB(0.01);
+    setBRatio(4);
+    setGridSectors(16);
+
 }
 
+
+void CornerFalko2d::train (falkolib::LaserScan scan){
+
+    // Extract keypoints
+    lastKeypointSet.clear();
+    extract(scan, lastKeypointSet);
+
+    //Compute descriptors
+    lastDescriptorSet.clear();
+    bsc.compute(scan, lastKeypointSet, lastDescriptorSet);
+
 }
 
+} // wolf namespace
+
 
diff --git a/src/corner_falko_2d.h b/src/corner_falko_2d.h
index b5986b3..13d5289 100644
--- a/src/corner_falko_2d.h
+++ b/src/corner_falko_2d.h
@@ -33,15 +33,25 @@
 
 namespace wolf
 {
-class CornerFalko2d
+
+/** \brief A 2D corner extractor and loop closure computing class
+ *
+ *
+ *
+ *
+ */
+
+class CornerFalko2d: public falkolib::FALKOExtractor, falkolib::BSCExtractor<falkolib::FALKO>
 {
 public:
-    /** \brief Constructor
-     * 
-     * Constructor
-     * 
-     **/
-    CornerFalko2d(); 
+    /**
+     * @brief Constructor
+     * @param _circularSectorNumber number of grid circular sector (BSCExtractor)
+     * @param _radialRingNumber number of grid radial number (BSCExtractor)
+     * @param _useKeypointRadius if true, the selected neighborhood points search radius is keypoint one (BSCExtractor)
+     * @param _radius neighborhood points search radius (BSCExtractor)
+     */
+    CornerFalko2d(int _circularSectorNumber=16, int _radialRingNumber=8, bool _useKeypointRadius = true, double _radius = 0.1) ;
         
     /** \brief Destructor
      * 
@@ -52,19 +62,28 @@ public:
 
     /** \brief Gets a set of landmarks/scenes to use as trained set.
      **/
-    void train();
+    void train(falkolib::LaserScan scan);
 
     /** \brief Extract landmark/scene (list of corners) from a given 2D scan
      **/
-    void extract(falkolib::LaserScan scan);
+    //void extract(falkolib::LaserScan scan);
 
     /** \brief compare new scans against the training set in order to find loop closures
      **/
     void findLoopClosure();
 
-    std::vector<std::vector<falkolib::FALKO>> CornerSet;
+    std::vector<std::vector<falkolib::FALKO>> keypointSets;
+    std::vector<falkolib::FALKO> lastKeypointSet;
     std::vector<std::vector<falkolib::BSC>> descriptorSets;
-    falkolib::FALKOExtractor fe;
+    std::vector<falkolib::BSC>lastDescriptorSet;
+
+    //int _circularSectorNumber;
+    //int _radialRingNumber;
+    // Keypoints extractor
+    //falkolib::FALKOExtractor fe;
+    // BSC descriptor extractor
+    //falkolib::BSCExtractor<falkolib::FALKO> bsc(_circularSectorNumber,_radialRingNumber);
+
 };
 
 } /* namespace wolf */
-- 
GitLab