2013-10-26 3 views
1

나는 다음과 같은 간단한 라인을 사용하여 이미지에서 SURF 기술자를 추출하고 있습니다 : 범위SURF 디스크립터의 값은 무엇입니까?

Ptr<DescriptorExtractor> descriptor = DescriptorExtractor::create("SURF"); 
    descriptor->compute(im1, kp, desc1); 

지금, 나는 변수 desc1.data를 "볼"때, 포함 된 정수 값을 0에서 255

에 내가 코드를 사용하여 값을 조사 할 때

그러나 :

for (int j=0;j<desc1.cols; j++){ 
      float a=desc1.at<float>(0,j); 

는 -1과 1 사이의 값을 포함하고 어떻게하는 것이 가능할까요? SURF는 SIFT와 같은 정수 값을 반환하지 않아야합니까?

답변

1

OpenCV에서 무슨 일이 일어나는 지 잘 모르겠지만 지금까지 서프가가는 것은 SURF가하는 일입니다. SURF 디스크립터는 작은 이미지 패치를 4x4 하위 영역으로 나누고 영리한 방식으로 각 하위 영역에 대한 웨이블릿 응답을 계산합니다. 기본적으로 4 개의 튜플 설명자입니다. < sum (dx), sum (dy), sum (| dx |), sum (| dy |)> 여기서 dx, dy는 각 하위 영역의 웨이블릿 응답입니다. 디스크립터는 모든 응답을 연결하고 크기를 정규화하여 구성되며 64 차원 설명자가 생성됩니다. 이 설명으로부터, 정규화 된 합계 (dx)와 합계 (dy) 값은 -1과 1 사이에 있고, sum (| dx |)과 sum (| dy |)은 0과 1 사이에 놓여 있음을 알 수 있습니다. 128 차원 서술자, dx 및 dx | dx> = 0 및 dy < 0에 대해 별도로 계산되며, 이는 64 차원 설명자의 크기를 두 배로 만듭니다.

+0

답변 해 주셔서 감사합니다. – GilLevi

관련 문제