2014-02-25 2 views
2

OpenCV SURFDetector를 사용하여 이미지의 키포인트를 검색하고 있습니다. 내 프로그램에서 사용자에게 트랙 바를 사용하여 minHessian의 값을 설정할 기회를주고 싶지만 이것은 내가 hessian 값의 범위를 알아야한다는 것을 의미합니다.OpenCV SURFDetector minHessian 범위

이 임계 값을 높게 설정할수록 내가 얻는 키포인트가 적어지고 그 반대도 마찬가지라는 것을 알고 있습니다.

hessian 값의 범위를 계산할 수있는 방법이있어서 트랙볼에서 "no keypoints"와 100 (아마도 minHessian = 1 또는 0)으로 0을 설정할 수 있습니까 (매우 높은 minHessian 임계 값이 될 수 있습니다)) "가능한 모든 키포인트"에 대해?

은 이미이 질문을 검토 한 결과,하지만이 날 여기를 도움이되지 않습니다 Whats the meaning of minHessian (Surffeaturedetector)

편집 : I 작동 내 응용 프로그램에 대한 방법을 발견했습니다,하지만 난 ' 이 솔루션에 만족하지 않습니다. 제가 지금하고있는 일입니다. 끊임없이 내 minHessian을 올리고 키포인트를 찾았는지 확인하지만이 변종은 빠르지도 않고 정확하지도 않습니다. 결과를 빨리 얻으려면 더 큰 단계 (내 경우에는 i + = 100)를 사용해야하기 때문입니다. 나는 또 다른 해결책이 있다는 것을 확신한다. 바이너리 검색이나 그와 비슷한 것은 어떤가? maxHessian 값을 계산할 수 없습니까? 여기

내 코드입니다 :

C#을 - 측 :

private int getMaxHessianValue() 
{ 
    int maxHessian = 0; 
    for (int i = 0; i < 100000; i+=100) 
    { 
     int numberOfKeypoints = GetNumberOfKeypoints(pathToImage, i); 

     if (numberOfKeypoints == 0) // no keypoints found? -> maxHessian 
     { 
      maxHessian = i; 
      break; 
     } 
    } 
    return maxHessian; 
} 

C++ - 측면 : 나는 [의 결정]에 대한 상한에 관한 동일한 질문이

int GetNumberOfKeypoints(char* path, int minHessian) 
{ 
    /// Load image 
    Mat templ; 
    templ = imread(path, CV_LOAD_IMAGE_GRAYSCALE); 


    // Detect the keypoints using SURF Detector 

    SurfFeatureDetector detector(minHessian); 
    std::vector<KeyPoint> keypoints; 
    detector.detect(templ, keypoints); 

     // return number of keypoints 
    return keypoints.size(); 
} 

답변

1

헤센, 그리고 나는 이론적 인 관점에서 답을 찾지 못했습니다.

그러나 귀하의 특정 목적을 위해 SURF detector의 소스 코드로 이동하는 것이 좋습니다. 특히 SURFFindInvoker :: findMaximaInLayer에 대한 부분을 찾아서 키포인트 탐지가이를 통해 허용/거부되는 것을 확인할 수 있습니다 조건부 : if (val0> hessianThreshold). 그래서, 당신은 IF 문 바로 앞에 val0의 최대 값을 저장하기 위해 몇 줄의 코드를 삽입 할 수 있다고 생각합니다. 그러면이 특정 이미지에 대한 헤 시안의 최대 값을 알려줄 것입니다. 최대 값이 모든 레이어와 옥타브에 저장되는지 확인해야합니다. 그렇지 않으면 로컬 최대 값만 찾습니다.

물론 훨씬 더 우아하게 생각할 수도 있지만, 기본적으로 최대를 직접 찾을 수 있습니다. 당신이 구현 한 것은 가치를 찾는 간접적 인 방법입니다.

희망이 있으시면, Lood Guck!

관련 문제