2
我正在使用OpenCV SURF實現。OpenCV 2.3 SURF關鍵點倍頻程永遠不等於0
我發現通過使用帶有默認參數的SurfFeatureDetector
而不是在八度0處獨立於圖像而獲得的關鍵點。
有人可以解釋這個結果嗎?
我正在使用OpenCV SURF實現。OpenCV 2.3 SURF關鍵點倍頻程永遠不等於0
我發現通過使用帶有默認參數的SurfFeatureDetector
而不是在八度0處獨立於圖像而獲得的關鍵點。
有人可以解釋這個結果嗎?
它看起來像在下面的函數中的錯誤(從SURF::operator()
在surf.cpp叫):
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;
}
在那上面寫的代碼,我們可以看到,octave
計數器從1
開始。根據min_diff = FLT_MAX
的初始化,diff
變量明顯小於min_diff
。
所以,在nOctaves > 1
情況下,導致best_octave
將永遠不會,即使我們居然發現關鍵點在八度0
0
。
編輯:此問題是固定在OpenCV中的下一個版本(2.4)