Es ist wie ein Fehler in der folgenden Funktion sieht (es aus SURF::operator()
in surf.cpp genannt):
static int getPointOctave(const CvSURFPoint& kpt, const CvSURFParams& params)
{
int octave = 0, layer = 0, best_octave = 0;
float min_diff = FLT_MAX;
for(octave = 1; octave < params.nOctaves; octave++) <---- octave counter starts from 1
for(layer = 0; layer < params.nOctaveLayers; layer++)
{
float diff = std::abs(kpt.size - (float)((HAAR_SIZE0 + HAAR_SIZE_INC*layer) << octave));
if(min_diff > diff)
{
min_diff = diff;
best_octave = octave;
if(min_diff == 0)
return best_octave;
}
}
return best_octave;
}
Bei dem Code, der oben geschrieben wird, können wir sehen, dass octave
Zähler von 1
beginnen. In Übereinstimmung mit der Initialisierung von min_diff = FLT_MAX
ist die diff
Variable offensichtlich weniger als min_diff
.
also bei nOctaves > 1
führen best_octave
wird nie 0
auch wenn wir keypoint bei Oktave 0
tatsächlich gefunden.
EDIT: Dieses Problem wird in der nächsten Version des OpenCV (2.4)
Fest