2012-04-02 4 views

答えて

2

それは次の関数(それはsurf.cppにSURF::operator()から呼び出される)のバグのようになります。私たちはoctaveカウンタは1から始まることがわかります、上記の記述されたコードで

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; 
} 

min_diff = FLT_MAXの初期化に従って、diff変数は明らかにmin_diffより小さい。

ので、nOctaves > 1の場合には、結果best_octaveは、私たちが実際にオクターブ0でキーポイントを発見した場合でも0になることはありません。

EDIT:この問題は、OpenCVのの次のリリースで修正される(2.4)

関連する問題