By Yan Huang (yh553) and Sean Ryan (ser99)

Design Decisions

We split out part of computeHarrisValues into a computeHarrisMatrices function. This function takes a grayscale image and produces three images filled with A, B, and C values for each pixel; thus it effectively computes a Harris matrix at each pixel. We did this so that we could compute Harris matrices in the computeHarrisValues function and in ComputeHarrisFeatures (for rotation) using the same code.

In ComputeHarrisValues, we compute the maximum eigenvalue and the corresponding eigenvector for each feature to get the feature's angle. We do this here because we consider the angle to be fundamental to the Harris feature. Note that this means we must force the angle to zero in ComputeSimpleDescriptors.

We wrote our MOPS descriptor before we knew about WarpGlobal and thus did the transformations and interpolation using our own code. Since it worked well enough we didn't go back and rewrite it all. Our MOPS code does the following

  1. Make a copy of enough data to contain the rotated feature.
  2. Applies a 7x7 Gaussian blur.
  3. Uses inverse warping to get a 8x8 image, scaling and rotating the pixels; bilinear interpolation is used.
  4. Subtracts the mean and divides by the standard deviation.

We've made the bugfix changes on Piazza, including the benchmark fixes from @53. Thus our benchmark figures can be trusted.

Performace

ROC Curves

Here are the two sets of six ROC curves. The first is between graph/img1.ppm and graph/img2.ppm; the second is between the Yosemite images. Thresholds of 60 and 3 were used for SSD and the ratio test respectively.


Harris Images

Here are the Harris operator images for graph/img1.ppm and Yosemite1.jpg


Benchmarks

Bikes
AVG ErrorAVG AUC
Simple SDD 4030.379
Simple Ratio4030.571
MOPS SDD 3900.831
MOPS Ratio 3900.882

Leuven
AVG ErrorAVG AUC
Simple SDD 3610.121
Simple Ratio3610.261
MOPS SDD 2140.827
MOPS Ratio 2140.925

Wall
AVG ErrorAVG AUC
Simple SDD 3840.238
Simple Ratio3840.684
MOPS SDD 3280.820
MOPS Ratio 3280.838

Strengths & Weaknesses

Clearly the simple descriptor with SDD matching is quite bad. However, investigation with the GUI shows that the simple descriptor is decent at matching things in the Yosemite images because they are translation only.

Our MOPS descriptor has a good AUC and acts as expected in the GUI. It is very good at working under different lighting conditions and under translations. It is decent at matching under rotation. However, it is defeated by any transformation that significantly changes the plane of the image (graf/img4) and by images with high amounts of blur.