SURF Descriptor Stability in 2.4.3 (Bug #2640)


Added by Peter Abeles about 12 years ago. Updated about 12 years ago.


Status:Done Start date:
Priority:Normal Due date:
Assignee:Vadim Pisarevsky % Done:

0%

Category:nonfree
Target version:2.4.4
Affected version:2.4.3 Operating System:
Difficulty: HW Platform:
Pull request:

Description

Stability of the SURF descriptor has dropped significantly since 2.3.1. This potential bug was discovered when updating a benchmark comparing SURF implementations. SURF detector stability remains unchanged.

Performance in 2.3.1: 11.971205372636376
Performance in 2.4.3: 8.460255240182965

Sum of F-Statistic across a set of images. Larger values are better. The same benchmark code was run on both versions.

Benchmark Website: http://boofcv.org/index.php?title=Performance:SURF
Github: https://github.com/lessthanoptimal/SURFPerformance

Note that the webpage (as of 12/17/2012) results use a different performance metric and will be updated soon.

Source Code:

void process( Mat image , FILE *output)
{
    // detect the features
    std::vector<KeyPoint> ipts;

    SurfFeatureDetector detector(1100,4,4,false);
    detector.detect(image,ipts);

    // save detected points to a file
    for( size_t i = 0; i < ipts.size(); i++ ) {
        KeyPoint &p = ipts.at(i);
        fprintf(output,"%.3f %.3f %.5f %.5f\n",p.pt.x,p.pt.y,p.size,0.0);
    }
    fclose(output);

    printf("Done: %d\n",(int)ipts.size());
}


Related issues

related to Bug #2219: Example SURF_Homography.cpp no longer works as expected w... Done 2012-07-31

Associated revisions

Revision cccdcac0
Added by Roman Donchenko almost 11 years ago

Merge pull request #2640 from a-wi:2.4

History

Updated by Andrey Pavlenko about 12 years ago

  • Category set to features2d
  • Priority changed from High to Normal
  • Assignee set to Maria Dimashova
  • Start date deleted (2012-12-17)

Updated by Peter Abeles about 12 years ago

I pasted the wrong code. This problem deals with the SURF descriptor and not the detector. The actual source file on github can be found at

https://github.com/lessthanoptimal/SURFPerformance/blob/master/interfaces/opencv_surf/describe_opencv.cpp

Correct Source code:

    // Create Surf Descriptor Object
    SurfDescriptorExtractor extractor;

    printf("points before: %d\n",(int)ipts.size());
    // Extract the descriptors for the ipts
    Mat descriptors;
    extractor.compute( image, ipts, descriptors );

    // output the description
    fprintf(output,"64\n");
    for( size_t i = 0; i < ipts.size(); i++ ) {
        KeyPoint &p = ipts.at(i);
        fprintf(output,"%7.3f %7.3f %7.5f",p.pt.x,p.pt.y,p.angle);
        for( int j = 0; j < 64; j++ ) {
           float val = descriptors.at<float>(i,j);
           fprintf(output," %0.10f",(float)val);
        }
        fprintf(output,"\n");
    }

    printf("Done\n");

Updated by Vadim Pisarevsky about 12 years ago

  • Affected version set to 2.4.3
  • Target version deleted ()

Updated by Vadim Pisarevsky about 12 years ago

  • Assignee deleted (Maria Dimashova)

Updated by Vadim Pisarevsky about 12 years ago

  • Category changed from features2d to nonfree

Updated by Vadim Pisarevsky about 12 years ago

  • Assignee set to Vadim Pisarevsky

Updated by Andrey Kamaev about 12 years ago

Fix is pushed to 2.4: 1f261c2

  • Status changed from Open to Done

Updated by Kirill Kornyakov about 12 years ago

  • Target version set to 2.4.4

Also available in: Atom PDF