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
의 경우, 우리가 실제로 옥타브 0
에서 키포인트를 발견하더라도 0
없을 것 best_octave
을 초래한다.
EDIT이 문제는 OpenCV의 다음 릴리스에 고정되는 (2.4)