/** * This file is part of ORB-SLAM2. * * Copyright (C) 2014-2016 Raúl Mur-Artal (University of Zaragoza) * For more information see * * ORB-SLAM2 is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * ORB-SLAM2 is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ORB-SLAM2. If not, see . */ #ifndef ORBEXTRACTOR_H #define ORBEXTRACTOR_H #include #include #include namespace ORB_SLAM2 { class ExtractorNode { public: ExtractorNode():bNoMore(false){} void DivideNode(ExtractorNode &n1, ExtractorNode &n2, ExtractorNode &n3, ExtractorNode &n4); std::vector vKeys; cv::Point2i UL, UR, BL, BR; std::list::iterator lit; bool bNoMore; }; class ORBextractor { public: enum {HARRIS_SCORE=0, FAST_SCORE=1 }; ORBextractor(int nfeatures, float scaleFactor, int nlevels, int iniThFAST, int minThFAST); ~ORBextractor(){} // Compute the ORB features and descriptors on an image. // ORB are dispersed on the image using an octree. // Mask is ignored in the current implementation. void operator()( cv::InputArray image, cv::InputArray mask, std::vector& keypoints, cv::OutputArray descriptors); int inline GetLevels(){ return nlevels;} float inline GetScaleFactor(){ return scaleFactor;} std::vector inline GetScaleFactors(){ return mvScaleFactor; } std::vector inline GetInverseScaleFactors(){ return mvInvScaleFactor; } std::vector inline GetScaleSigmaSquares(){ return mvLevelSigma2; } std::vector inline GetInverseScaleSigmaSquares(){ return mvInvLevelSigma2; } std::vector mvImagePyramid; protected: void ComputePyramid(cv::Mat image); void ComputeKeyPointsOctTree(std::vector >& allKeypoints); std::vector DistributeOctTree(const std::vector& vToDistributeKeys, const int &minX, const int &maxX, const int &minY, const int &maxY, const int &nFeatures, const int &level); void ComputeKeyPointsOld(std::vector >& allKeypoints); std::vector pattern; int nfeatures; double scaleFactor; int nlevels; int iniThFAST; int minThFAST; std::vector mnFeaturesPerLevel; std::vector umax; std::vector mvScaleFactor; std::vector mvInvScaleFactor; std::vector mvLevelSigma2; std::vector mvInvLevelSigma2; }; } //namespace ORB_SLAM #endif