2012-04-02 2 views
2

Ich arbeite mit OpenCV SURF-Implementierung.OpenCV 2.3 SURF Keypoint Oktave ist nie gleich 0

Ich habe gefunden, dass Schlüsselpunkte, die durch Verwendung, wenn die SurfFeatureDetector mit Standard-Parameter nie bei Oktave 0 unabhängig von dem Bild gefunden werden.

Kann jemand dieses Ergebnis erklären?

Antwort

2

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