2014-04-15 6 views
4

SIFT에 대한 자료를 읽었으며 일부 비디오도 시청했습니다. 나는 SIFT 뒤에있는 대부분의 개념을 이해했지만 나를 혼란스럽게 만드는 것은 SIFT 기술자에 관한 것입니다. SIFT에서SIFT 설명자 뒤에있는 개념

는 :

  • 우리는 우리가 키포인트 주위 16 x 16 픽셀을 키포인트
  • 을 찾을 수 있습니다. 4 x 4 블록
  • 16 수로
  • 나눈다 16 x 16 블록
  • 그러므로, 우리는이 키포인트 위해 4 x 4 x 8 = 128 차원 SIFT 기술자를 얻을 4 x 4 각 블록에 대한 8 bin 히스토그램을 계산한다.

image

내 혼란 :

  • 말할 수 있습니다, 내 이미지는 50 키포인트가 있습니다.
  • 이 이미지 (, 즉 매트 설명자)에 대해 수신 한 SIFT 설명자가 128 columns1 row 인 이유는 무엇입니까 ???
  • 하나의 키포인트에 대해 128 columns1 row을 얻었다면 50 키포인트를 얻었 으면 50 rows128 colmuns 매트릭스가되어서는 안됩니까?

답변

2

opencv의 2.4.8 소스는 128 개의 설명자 행렬로 n을 얻어야한다고 말합니다. 여기서 n은 키포인트의 수입니다. 을 볼 수 있습니다. calcDescriptors()설명자 행을 다시 표시하여 모든 키포인트에 대한 설명자를 만듭니다.

static void calcDescriptors(const vector<Mat>& gpyr, const vector<KeyPoint>& keypoints, 
          Mat& descriptors, int nOctaveLayers, int firstOctave) 
{ 
    int d = SIFT_DESCR_WIDTH, n = SIFT_DESCR_HIST_BINS; 

    for(size_t i = 0; i < keypoints.size(); i++) 
    { 
     // [...] 
     // some unrelevant code 

     calcSIFTDescriptor(img, ptf, angle, size*0.5f, d, n, descriptors.ptr<float>((int)i)); 
    } 
} 
+0

네, 코드에서 확인해 봤는데 쓸데없이 혼란 스러웠습니다 .... 감사합니다 !!! – skm

관련 문제