Ariel Schwartz (als364) & Luke Johnson (lrj34)

Major Design Decisions

Some of the major design choices include how we computed the MOPS descriptors and how we found the Harris Values. For computing the Harris values, we set up an individual image to store the Harris values of each pixel. Convovling with ConvolveKernel_SobelX and ConvolveKernel_SobelY gave us the X and Y derivatives for the entire image. Then we simply stored the derivatives for each pixel into the Pixel data point at each location.

The way we computed the MOPS descriptors was to use multiple transforms so as to only make one call to WarpGlobal(). Before cycling through the features, a gaussian blur was convolved with the original image in order to be more accurate during subsampling. For each feature, a blank 8 x 8 CFloatImage was created as well as several transforms. The transform objects would translate the feature location to the origin, rotate the image at the origin to the appropriate angle based off of the feature angle which was stored in Radeans, scale the image down by a factor of five, and translate the image so the edge of the 8 x 8 pixels around the feature matched up with the origin of the axis. Stringing these transformations together using the overloaded * operator allowed for only one call to WarpGlobal, which would store the values into the 8 x 8 CFloatImage.

We had to modify some of the skeleton code in features.cpp to accompany issues with id values being zero. In evaluateMatch and addRocData functions, there were situations where id1 or id2 would be zero valued. When id1-1 and id2-1 were called, they were going outside of the vector range, throwing "out of vector" issues.

Performanace on Benchmark Image Sets

ROC Curves

Yosemite

AUC values:

MOPS + Ratio Test: 0.909593
MOPS + SSD: 0.914529
Simple Descriptor + Ratio Test: 0.909593
Simple Descriptor + SSD: 0.914529

Graffiti

AUC values:

MOPS + Ratio Test: 0.747500
MOPS + SSD: 0.766020
Simple Descriptor + Ratio Test: 0.381664
Simple Descriptor + SSD: 0.381664

Harris Operator: Yosemite

Harris Operator: graf

Average AUCs

Bikes: Average AUC: 0.510228 Average Error: 256.613 Pixels

Leuven: Average AUC: 0.498446 Average Error: 291.96228 Pixels

Wall: Average AUC: -1.IND00 Average Error: 395.95595 Pixels

There was a problem with doing benchmark testing on the Wall images, but we couldn't figure out what was causing it. The other benchmarks seemed reasonable. Note that Graf and Yosemite did not have 6 images and could not run benchmark tests.

Strengths & Weaknesses

Our major strength was in getting our Harris features to create properly. However, our major weakness was the computeMOPSdescriptors function as it did not work originally. This resulted in the program not being able to match features at all. Since no features were matched, it was impossible to map out the ROC matches for anything. However, now that we've fixed the issue with MOPS, we were able to complete the assignment without issues.

Custom Images

Here's a some pretty pictures of some cats!

And here are the harris values for those pictures.

Pretty cool, right?