Chandrika Jayant
Vision Project # 1
4/14/05

FEATURE DETECTION, DESCRIPTION, AND MATCHING


Feature Descriptor


My first feature descriptor is a simple 5 X 5 window descriptor. At each pixel, I record the r,g,b as a converted grey value using the equation in the skeleton code Convert.cpp. The center pixel of the window (feature pixel) has a data vector, in which I store all of the neighboring pixels' (in the window) intensity values (grey)-- this is the feature descriptor.

My second feature descriptor is a simplified version of SIFT, and doesn't deal with scale invariance. There are 8 bins that I make for the descriptor for each pixel, and use as follows. The feature pixel has a principal gradient direction and magnitude, calculated from its Harris Matrix. The gradient magnitude is the largest eigenvalue of the 2 x 2 matrix, and the gradient direction is x= [u,v] where x is the eigenvector of the matrix. Each pixel in the window of this feature has an individual gradient, which I have already calculated earlier. It is [Ix,Iy] where Ix = x intensity gradient, and iy = y intensity gradient. I calculate Ix by Intensity(x+1,y) - Intensity(x-1,y), and similar for Iy. I want to find out the angle between the neighboring pixel gradient direction and the feature's principal gradient direction. To find the angle of each pixel, I take arctan(v/u) where the gradient vector is [u,v]. I take the difference between the 2 angles and place in the appropriate of the 8 bins, where the bins are equally divided by angle from 0 to 360 degrees. In the bins, I add the magnitude of the gradient that falls into that bin. These 8 bins are the descriptor of the feature in this descriptor.

Major Design Choices


Test Results

Strengths and Weaknesses


My code works well with translational variance, which is much easier to deal with. My code for the rotational and illumination variance performs decently, although there are quite a few outliers though major features are matched. The simplified SIFT procedure has the advantage of being much less computationally expensive, and may be good for finding major features, but falls short (at least in my implementation) for robust matching.

Results on My Own Photos


I had good results on the photos I took. The matching is showed below- I tried to match the cat's face from 2 different angles.