Using non-maximum suppression, I got 113 good matches with 2 bad matches with 98% accuracy.
1) Compute x and y derivatives of image
2) Compute products of derivatives of every pixel
3) Compute the sums of products of derivatives at each pixel
4) Define at each pixel (x,y) the matrix
5) Compute the response of the detector at each pixel
These parameters were tweaked to allow for more accuracy:
Non-maximum suppression was also implemented. This method would ignore some of the less significant points. for suppressing some of the unimportant points.
For finding descriptors, I used the SIFT algorithm by taking the gradients of the image and calculating the magnitude and the orientation at every pixel. SIFT performs really well since it is invariant to scale and orientation.
For matching features, I simply used Matlab's k nearest neighbor search algorithm with k=2. My code for matching is as follows:
[index, d] = knnsearch(features1, features2, 'K', 2);
matches = []; confidences = [];
for i = 1:size(index, 1)
indexes = index(i, :); distances = d(i, :);
if distances(1) / distances(2) < 0.76
matches = [matches; indexes(1) i]; confidences = [confidences; 1 - distances(1)];
end
end
My SIFT algorithm worked really well with most of the images as seen already. But when I ran it on the Episcopal Gaudi pair, it failed to even detect interest points. Reason for this I think is the intensity of the images. Since SIFT is not really invariant to intensity of the images, it would fail to produce accurate results.