Merge pull request #3299 from felixendres:orb_keypoint_detector_threshold
This commit is contained in:
commit
9575a82a9e
@ -317,7 +317,7 @@ public:
|
||||
enum { kBytes = 32, HARRIS_SCORE=0, FAST_SCORE=1 };
|
||||
|
||||
CV_WRAP explicit ORB(int nfeatures = 500, float scaleFactor = 1.2f, int nlevels = 8, int edgeThreshold = 31,
|
||||
int firstLevel = 0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31 );
|
||||
int firstLevel = 0, int WTA_K=2, int scoreType=ORB::HARRIS_SCORE, int patchSize=31, int fastThreshold = 20);
|
||||
|
||||
// returns the descriptor size in bytes
|
||||
int descriptorSize() const;
|
||||
@ -348,6 +348,7 @@ protected:
|
||||
CV_PROP_RW int WTA_K;
|
||||
CV_PROP_RW int scoreType;
|
||||
CV_PROP_RW int patchSize;
|
||||
CV_PROP_RW int fastThreshold;
|
||||
};
|
||||
|
||||
typedef ORB OrbFeatureDetector;
|
||||
|
@ -91,7 +91,8 @@ CV_INIT_ALGORITHM(ORB, "Feature2D.ORB",
|
||||
obj.info()->addParam(obj, "edgeThreshold", obj.edgeThreshold);
|
||||
obj.info()->addParam(obj, "patchSize", obj.patchSize);
|
||||
obj.info()->addParam(obj, "WTA_K", obj.WTA_K);
|
||||
obj.info()->addParam(obj, "scoreType", obj.scoreType))
|
||||
obj.info()->addParam(obj, "scoreType", obj.scoreType);
|
||||
obj.info()->addParam(obj, "fastThreshold", obj.fastThreshold))
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
@ -649,10 +649,10 @@ static inline float getScale(int level, int firstLevel, double scaleFactor)
|
||||
* @param detector_params parameters to use
|
||||
*/
|
||||
ORB::ORB(int _nfeatures, float _scaleFactor, int _nlevels, int _edgeThreshold,
|
||||
int _firstLevel, int _WTA_K, int _scoreType, int _patchSize) :
|
||||
int _firstLevel, int _WTA_K, int _scoreType, int _patchSize, int _fastThreshold) :
|
||||
nfeatures(_nfeatures), scaleFactor(_scaleFactor), nlevels(_nlevels),
|
||||
edgeThreshold(_edgeThreshold), firstLevel(_firstLevel), WTA_K(_WTA_K),
|
||||
scoreType(_scoreType), patchSize(_patchSize)
|
||||
scoreType(_scoreType), patchSize(_patchSize), fastThreshold(_fastThreshold)
|
||||
{}
|
||||
|
||||
|
||||
@ -730,7 +730,7 @@ static void computeKeyPoints(const Mat& imagePyramid,
|
||||
std::vector<KeyPoint>& allKeypoints,
|
||||
int nfeatures, double scaleFactor,
|
||||
int edgeThreshold, int patchSize, int scoreType,
|
||||
bool useOCL )
|
||||
bool useOCL, int fastThreshold )
|
||||
{
|
||||
int i, nkeypoints, level, nlevels = (int)layerInfo.size();
|
||||
std::vector<int> nfeaturesPerLevel(nlevels);
|
||||
@ -781,7 +781,7 @@ static void computeKeyPoints(const Mat& imagePyramid,
|
||||
Mat mask = maskPyramid.empty() ? Mat() : maskPyramid(layerInfo[level]);
|
||||
|
||||
// Detect FAST features, 20 is a good threshold
|
||||
FastFeatureDetector fd(20, true);
|
||||
FastFeatureDetector fd(fastThreshold, true);
|
||||
fd.detect(img, keypoints, mask);
|
||||
|
||||
// Remove keypoints very close to the border
|
||||
@ -1033,7 +1033,7 @@ void ORB::operator()( InputArray _image, InputArray _mask, std::vector<KeyPoint>
|
||||
// Get keypoints, those will be far enough from the border that no check will be required for the descriptor
|
||||
computeKeyPoints(imagePyramid, uimagePyramid, maskPyramid,
|
||||
layerInfo, ulayerInfo, layerScale, keypoints,
|
||||
nfeatures, scaleFactor, edgeThreshold, patchSize, scoreType, useOCL);
|
||||
nfeatures, scaleFactor, edgeThreshold, patchSize, scoreType, useOCL, fastThreshold);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1131,4 +1131,5 @@ void ORB::computeImpl( InputArray image, std::vector<KeyPoint>& keypoints, Outpu
|
||||
(*this)(image, Mat(), keypoints, descriptors, true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -48,6 +48,8 @@ using namespace cv;
|
||||
TEST(Features2D_ORB, _1996)
|
||||
{
|
||||
Ptr<FeatureDetector> fd = FeatureDetector::create("ORB");
|
||||
fd->set("nFeatures", 10000);//setting a higher maximum to make effect of threshold visible
|
||||
fd->set("fastThreshold", 20);//more features than the default
|
||||
Ptr<DescriptorExtractor> de = DescriptorExtractor::create("ORB");
|
||||
|
||||
Mat image = imread(string(cvtest::TS::ptr()->get_data_path()) + "shared/lena.png");
|
||||
|
Loading…
x
Reference in New Issue
Block a user