CS 143 / Project 2 / Local Feature Matching

[Project description]
  1. Algorithms
  2. Results

Algorithms

In this project, we need to implement a simplified version of a classic computer vision algorithm called SIFT (Scale-invariant feature transform). At the beginning, we implement the Harris corner detector which uses gradients along x and y directions as well as Gaussian filter to compute cornorness scores for each point in the image, then we threshold the image and apply the non-maximum suppression. This part is implemented in get_interest_points.m. The way I do non-maximum suppression is to apply a maximum filter at each pixel and then compare it with the original image, only keep those pixels that have the same value in the original image. In that case, we only keep pointer that are local maximum within selected windows size. The second step is to compute the local features for a given interesting points. The feature we used a histogram of sum of magnitudes of gradients over angels for a selected window size. This feature is very good indicator to tell if two pixels match in two different images. The part is implemented in get_features.m and feature_of_cell.m. Finally, a match function that computes matched features is implemented in match_features.m. We use Euclid distance to denote the distance between two features.


Results

Notre Dame (Standard Example)

Notre Dame

Capricho Gaudi

House

Pantheon Paris


This result is not bad even one image is of high dynamic range while the other is normal.

Examples that doesn't work well

Mount Rushmore

Sacre Coeur


This simple implementation doesn't quite work for two images with very different viewing angle.