Jonathan Beall's Feature Detector

Design Decisions

Feature Detection

My detector locates features using a harmonic mean corner detector after finding the x and y derivatives with a Sobel filter, and then smoothing the image with a gaussian with σ = 1.5, a value suggested in the Multi-Scale Oriented Patches paper. Those points which are local maxima in a 3x3 area and which score above a threshold (which is dynamically lowered to obtain a minimum number of points) are features.

Feature Descriptors

My features are a variant on the MOPS features described in the above referenced paper, but are only computed at a single scale. I chose this simplification in part because it was easier and in part because we will only be needing translations in the panorama generator in Project 2. My SOPS (Single-scale Orientable Patches) features are generated for each feature by finding the direction of the derivative (x and y derivatives are found using Sobel filters, and then smoothed using a gaussian with σ = 4.5. A 40x40 window is then extracted from a grayscale version of the image, centered at the feature, and rotated such that the extracted selection has it's derivative oriented in the x direction. This selection is then blurred with a gaussian with σ = 2, and then downsampled to a 8x8 swatch. The values in this swatch then have their intensity and variance normalized by adjusting each value d to d' = (d - μ) / σ, so that the new values have a mean of 0 and a standard deviation of 1. The feature descriptor is these values as doubles, taken in row major order. This process and the parameters I used are all taken from the MOPS paper, which will hopefully give me the benefits of using a (with the exception of scale independence) well-tuned feature.

Matching

For matching features, rather than using the wavelets employed in the MOPS paper, I chose the simpler test of exhaustively comparing the sum-squared-distance between the two features, and then taking the ratio of the best feature match to the second best feature match, as this proved to be much simpler to implement.

Performance

Performance Graphs and plots


The ROC for the graf test images.


The ROC for the Yosemite test images.

Examining Harris Values and Features


The Harris values for one of the Yosemite test images.


The selected features from this Yosemite test image. As you can see, the features found were concentrated on the left side of the image, and the threshold had to be lowered considerably to get any features on the right.


The Harris values for one of the Graf test images.


As you can see, the features were much more evenly distributed in this image.

Benchmarks

Image set bikesgrafleuvenwall
Avg. AUC 0.7507860.6130390.7012020.652727

An Example


Here's an example of the features nicely covering an (feature-rich) image of me climbing around.

Evaluation

While my features were fairly good when matching images that were blurred , translated, or had changes to their exposure, they didn't do as well when handing perspective changes or warped images. This is not surprising, as they are essentially a sampled bit of image. My detector also had trouble with images where one part was much more feature-rich than another, and chose unevenly distributed features in this case.

Code

The code and a binary compiled to run on an Intel Mac (binary may require 10.5 or fltk installed in /sw/) are available for download.