2013-05-22 1 views
2

작은 이미지 50x50이 있습니다. 나는과 ORB의 키포인트를 찾을 수 :ORB 계산 버그 : 작은 이미지로 모든 키포인트를 제거합니다.

(I 감지 몇 가지 키포인트 얻을 수 (14)에 31 patchSize의 기본 PARAM을 변경해야 할 사항) : 내가 orb.compute 내 키포인트를 통과하면 지금

OrbFeatureDetector det(500,1.2f,8,14,0,2,0,14); //> (From 31 to 14) 
OrbDescriptorExtractor desc; 

det.detect(image,kp) 
//> kp.size() is about 50 keypoints 

을 모든 키포인트가 지워집니다.

desc.compute(image,kp,kpDesc); 
//> Now kp.size() == 0 

즉, .compute를 호출하면이 메서드는 모든 키포인트를 삭제합니다. enter image description here

나는 이것이 버그의 일종이라고 생각 :

내가 사용하고 이미지는 이것이다. 누가 확인할 수 있니? OpenCV 2.4.5를 사용 중입니다.

+1

어떻게 'OrbFeatureDetector' 및'OrbFeatureExtractor'가 선언됩니까? 기본 매개 변수 이외의 값으로 초기화하고 있습니까? 내가 탐지 한 키포인트를 얻지 못한 채로 이미지를 탐지하려고 시도 할 때. – Aurelius

+0

@Aurelius : 예, 나는 더 많은 키포인트를 찾기 위해 PatchSize를 변경했습니다. – dynamic

+0

코드를 업데이트 할 것입니다. 아마도 OrbDescriptorExtractor에도 동일한 매개 변수를 전달해야합니다. 예, 방금 테스트했습니다. 이제 키포인트가 지워지지 않습니다. – dynamic

답변

4

아니요, 그것은 버그가 아닙니다.

문제는 OrbDescriptorExtractor가 FeatureDetector에서 매개 변수를 변경했음을 알 수 없다는 것입니다. 따라서 올바른 매개 변수를 다시 설정해야합니다.

OrbFeatureDetector  det(500,1.2f,8,14,0,2,0,14); //> (From 31 to 14) 
OrbDescriptorExtractor desc(500,1.2f,8,14,0,2,0,14); 
4

두 개의 객체, 특성 검출기 및 설명자 추출기를 생성하고 있습니다. 동일한 매개 변수로 초기화해야합니다.

당신과 같이, cv::ORB::operator()를 호출 한 후 cv::ORB의 단일 인스턴스를 생성하고 의해 두 번 동일한 매개 변수를 설정하는 데에 코드 중복을 줄일 수

cv::ORB orb(500,1.2f,8,14,0,2,0,14); 
orb(image,cv::noArray(),kp,kpDesc); 

이것은 초기 솔루션 동일 할 것이라고부터 피쳐 감지기와 추출기는 실제로 같은 대상입니다. OpenCV 헤더에서 :

typedef ORB OrbFeatureDetector; 
typedef ORB OrbDescriptorExtractor; 
관련 문제