2012-03-27 8 views
2

Android 용 openCV를 사용하여 로고 감지 알고리즘을 구현하고 있습니다. 내 목표는 이제 안드로이드 카메라로 찍은 사진에서 미리 정의 된 로고를 찾는 것입니다.android 용 openCV를 사용할 때 정확한 FAST-SURF 일치 항목을 찾을 수 없습니다.

필자는 어떤 것이나 일치하는 것을 얻을 수 없다. 나는 거의 openCV 라이브러리 함수 만 사용하고 있다는 것을 고려할 때 매우 이상하다고 생각한다.

먼저 FAST 검출기를 사용하여 키포인트를 감지합니다. 내 이미지의 크기는 500x500입니다. 이후에이 키포인트를 설명하기 위해 서프를 사용합니다. with knn 나는 2 개의 최상의 성냥을 요청하고, A의 비율이 0.6보다 작지 않은 사람들을 쫓아냅니다 (first.distance/second.distance).

나는 약 10 일치 받고 있어요,하지만 그들은 내가 모든 경기 (100 +)를 그릴 때, 그들은 모두

내가 잘못 여기서 뭘하는지 볼 수없는 잘못된 것 같다, 모든 잘못 , 누구든지 같은 문제가 있거나 내가 뭘 잘못하고 있는지 알아?

FeatureDetector FAST = FeatureDetector.create(FeatureDetector.FAST); 

    // extract keypoints 
    FAST.detect(image1, keypoints); 
    FAST.detect(image2, logoKeypoints); 

    DescriptorExtractor SurfExtractor = DescriptorExtractor 
      .create(DescriptorExtractor.SURF); 
    Mat descriptors = new Mat(); 
    Mat logoDescriptors = new Mat(); 

    SurfExtractor.compute(image1, keypoints, descriptors); 
    SurfExtractor.compute(image2, logoKeypoints, logoDescriptors); 

    List<DMatch> matches = new ArrayList<DMatch>(); 
    matches = knn(descriptors, logoDescriptors); 
    Scalar blue = new Scalar(0, 0, 255); 
    Scalar red = new Scalar(255, 0, 0); 
    Features2d.drawMatches(image2, logoKeypoints, image1, keypoints, 
      matches, rgbout, blue, red); 
+1

SURF 키포인트에서 SURF 기능을 사용해 보셨습니까? –

+0

knn 함수 란 무엇입니까? 올바르게 구현 되었습니까? –

+0

내가 거의 모든 조합 ... 이 SURF-SURF FAST-SURF ... 모든 조합이 같은 문제가를 SIFT-SIFT를 시도했다. knn 함수를 사용하면 2 개의 최상의 일치 항목을 얻을 수 있습니다.이 두 항목을 비교하면 실제로 건너 뛰는 일치 항목을 찾을 수 있으며 진정한 긍정을 얻을 수있는 최고의 기회를 얻을 수 있습니다 – piepie

답변

3

나는이 문제가 사용하는 정규 표현식이라고 생각합니다. (SURF) 디스크립터와 같은 float 기반의 경우 FLANN을 정규 표현 자로 사용하거나 BRUTEFORCE를 정규 표현 자로 사용합니다. 또한 SURF 키포인트에서 추출 및 매칭, 즉 SURF 피쳐에 대해 동일한 피쳐 디스크립터를 사용하기 위해 노력하십시오.

이 게시물을 읽고 stackoverflow 및 더 나은 이해를 위해 연결된 기사. How Does OpenCV ORB Feature Detector Work?