CS 4670 - Project 2

Pradeep Gopinathan (pbg42) and Kolbeinn Karlsson (kk752)
09/24/12

Feature Detection and Matching

In this project we implement a feature detector, feature descriptor, and a feature macthing algorithm.

Harris Feature Point Detector

When assigning Harris values:

To determine the intensity derivatives, we used a Sobel X and Sobel Y filter, as they were provided in the code and are quite accurate.

To weight the pixels, we chose a Gaussian filter for the same reasons.

When choosing maxima:

We found the performance loss for using a 5x5 instead of a 3x3 range to be minimal, and we found better results using a large field of search.

We chose as a threshold .01, because for when we fixed all other design choices, this threshold gave a feature set that most closely matched the solution.

Finally, we calculated the actual eigenvector in order to find the orientation of the feature, primarily because that was what was suggested by the lecture, and once again, the performance did not suffer too much.


MOPS Feature Descriptor

Patch:
The MOPS feature descriptor takes an 8x8 oriented patch around each feature point, downsampled from a 40x40 patch, and uses that for the descriptor. The patch must be pre-filtered before it is downsampled. In our implementation of the MOPS, we would simply pre-filter the entire image, then take every 5th point of the 40x40 patch around each feature point.

Filter:
We pre-filter applied was a Gaussian filter with standard deviation of ...

Subpixels:
We implemented our own function to compute subpixel values using bilinear interpolation.

The feature points that were too close to the edge to have a 40x40 points around them were simply skipped.

Performance

ROC Curves for graf:

ROC Curves for Yosemite:


There were problems with getting the SSD plots for threshold that we could not fix in time.

Harris detector images:
graf/img1:

yosemite/Yosemite1:


Strengths and Weaknesses

The Harris detector is extremely sensitive, and perhaps sees features where there aren't any. Also, because I don't fix the weights for edge cases, they seem to not get picked as often.

The MOPS descriptor is not scale invariant


Additional Images