@@ -73,7 +73,13 @@ class Pyramid
73
73
* _DOG: if true, a DOG pyramid is build
74
74
*/
75
75
Pyramid::Pyramid (const Mat & img, int octavesN_, int layersN_, float sigma0_, int omin_, bool _DOG) :
76
- params (octavesN_, layersN_, sigma0_, omin_)
76
+ params (
77
+ // Need to set the octavesN parameter globally. See issue #1513
78
+ MIN (octavesN_, int (floor(log((double )MIN(img.size().width, img.size().height)) / log(2 .0f )))),
79
+ layersN_,
80
+ sigma0_,
81
+ omin_
82
+ )
77
83
{
78
84
build (img, _DOG);
79
85
}
@@ -89,9 +95,6 @@ void Pyramid::build(const Mat& img, bool DOG)
89
95
Size ksize (0 , 0 );
90
96
int gsize;
91
97
92
- Size imgSize = img.size ();
93
- int minSize = MIN (imgSize.width , imgSize.height );
94
- int octavesN = MIN (params.octavesN , int (floor (log ((double ) minSize)/log ((float )2 ))));
95
98
float sigma0 = params.sigma0 ;
96
99
float sigma = sigma0;
97
100
int layersN = params.layersN + 3 ;
@@ -165,7 +168,7 @@ void Pyramid::build(const Mat& img, bool DOG)
165
168
/* for every octave build layers*/
166
169
sigma_prev = sigma;
167
170
168
- for (octave = 0 ; octave < octavesN; octave++)
171
+ for (octave = 0 ; octave < params. octavesN ; octave++)
169
172
{
170
173
for (layer = 1 ; layer < layersN; layer++)
171
174
{
@@ -411,7 +414,8 @@ void HarrisLaplaceFeatureDetector_Impl::detect(InputArray img, std::vector<KeyPo
411
414
keypoints = std::vector<KeyPoint> (0 );
412
415
413
416
/* Find Harris corners on each layer*/
414
- for (int octave = 0 ; octave <= numOctaves; octave++)
417
+ // Use pyr.params.octavesN instead of numOctaves. See issue #1513
418
+ for (int octave = 0 ; octave <= pyr.params .octavesN ; octave++)
415
419
{
416
420
for (int layer = 1 ; layer <= num_layers; layer++)
417
421
{
0 commit comments