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();
}