diff --git a/modules/xfeatures2d/src/harris_lapace_detector.cpp b/modules/xfeatures2d/src/harris_lapace_detector.cpp index 1b8d9c149..46b59f714 100644 --- a/modules/xfeatures2d/src/harris_lapace_detector.cpp +++ b/modules/xfeatures2d/src/harris_lapace_detector.cpp @@ -73,7 +73,13 @@ public: * _DOG: if true, a DOG pyramid is build */ Pyramid::Pyramid(const Mat & img, int octavesN_, int layersN_, float sigma0_, int omin_, bool _DOG) : - params(octavesN_, layersN_, sigma0_, omin_) + params( + //Need to set the octavesN parameter globally. See issue #1513 + MIN(octavesN_, int(floor(log((double)MIN(img.size().width, img.size().height)) / log(2.0f)))), + layersN_, + sigma0_, + omin_ + ) { build(img, _DOG); } @@ -89,9 +95,6 @@ void Pyramid::build(const Mat& img, bool DOG) Size ksize(0, 0); int gsize; - Size imgSize = img.size(); - int minSize = MIN(imgSize.width, imgSize.height); - int octavesN = MIN(params.octavesN, int(floor(log((double) minSize)/log((float)2)))); float sigma0 = params.sigma0; float sigma = sigma0; int layersN = params.layersN + 3; @@ -165,7 +168,7 @@ void Pyramid::build(const Mat& img, bool DOG) /*for every octave build layers*/ sigma_prev = sigma; - for (octave = 0; octave < octavesN; octave++) + for (octave = 0; octave < params.octavesN; octave++) { for (layer = 1; layer < layersN; layer++) { @@ -411,7 +414,8 @@ void HarrisLaplaceFeatureDetector_Impl::detect(InputArray img, std::vector (0); /*Find Harris corners on each layer*/ - for (int octave = 0; octave <= numOctaves; octave++) + //Use pyr.params.octavesN instead of numOctaves. See issue #1513 + for (int octave = 0; octave <= pyr.params.octavesN; octave++) { for (int layer = 1; layer <= num_layers; layer++) {