2
私はOpenCV SURFの実装に取り組んでいます。OpenCV 2.3 SURFキーポイントのオクターブが0になることはありません
SurfFeatureDetector
のデフォルトパラメータを使用して得られたキーポイントが、画像とは独立してオクターブ0で見つからないことがわかりました。
誰かがこの結果を説明できますか?
私はOpenCV SURFの実装に取り組んでいます。OpenCV 2.3 SURFキーポイントのオクターブが0になることはありません
SurfFeatureDetector
のデフォルトパラメータを使用して得られたキーポイントが、画像とは独立してオクターブ0で見つからないことがわかりました。
誰かがこの結果を説明できますか?
それは次の関数(それは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)