Notre Dame images matched with 90% accuracy (30 features matched).
The point of the project was to demonstrate local feature matching by implementing a working version of the SIFT pipeline. The pipeline consists of 3 seperate parts:
For the corner detector, the Harris corner detector algorithm was chosen. For extracting features, the SIFT-like local feature was chosen. Lastly, for matching the extracting features, the "ratio test" algorithm was chosen.
The Harris corner detector was implemented, and the results can be seen in the following grayscale images. The detector does a pretty good job of detecting keypoints in the images.
![]() ![]() ![]() ![]() |
However, the ones above have been thresholded at a certain value, which was found by trial and error. The same images, thresholded at some other value (a higher value) are shown below. Notice how some of the detail is lost.
![]() ![]() ![]() ![]() |
SIFT-like features were implemented by doing the following:
sobel_f = fspecial('sobel');
dxs = imfilter(image, sobel_f);
dys = imfilter(image, sobel_f');
gradients = atan2(16_dy(1:4, 1:4), 16_dx(1:4, 1:4));
gradients = rad2deg(gradients);
gradients = mod(gradients, 360);
feature(i) = features(i) ./ norm(features(i));
The simple ratio test was implemented by doing the following:
With the above thresholds and constraints, the pipline was run, and the following results were achieved: (First and second rows are the images, third row shows the matches).
![]() |
![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
![]() ![]() |
Therefore, the SIFT filter seems to work for a range of images.