Life Science, EPFL
The aim of this project was first to implement the algorithm of Scale Invariant Feature Transforms (SIFT) in JAVA as a plugin for ImageJ.
SIFT (David G. Lowe, 2004) is a robust method used to detect features (called "keypoints"), allowing transformation
of an image into a "collection of local feature vectors". The algorithm consists of keypoint detection and
computation of a local image descriptor. SIFT appears to be a very efficient way to detect keypoints on an image,
but it contains some mysterious steps in its algorithm.
The detection part was implemented, but not the descriptor.
The plugin propose an interface where the user can set the parameters used in SIFT and can choose which output to display. As SIFT relies on a few thresholds that are not well defined, some of the output can be used to tune the thresholds in order to find more or less keypoint on the picture of interest.
Then a small comparison between SIFT and two other keypoint detection algorithms (SURF and Harris corner detector) was made based on 3 different pictures (one with many details, one with very few edges and corners, one with illumination changes). The conclusions from this comparison and from other results found in the literature were that SURF detects very few keypoints (but is the fastest method), Harris detects a lot of keypoints (but is less refined that SURF and SIFT) and SIFT lies between the two (it is more refined due to some keypoint elimination steps, but is slower).
Eventually the last part of this project aimed to understand how wavelets can be used to build a SIFT-like descriptor that will be well-defined mathematically. To do so, a Matlab code was written in order to understand how a complex wavelet can be used to detect a discontinuity on a signal in 1D. We observed that the modulus of the complex wavelet transform of the signal can be used to localize keypoints since it peaks at keypoints locations. On the other hand the phase might be used to determine in which direction from a given point the keypoint can be found. The conclusion that can be drawn from these observations is that the modulus and the phase of a complex wavelet transform might be used for keypoint localization, whereas some other data obtained when using the Riesz-Laplace wavelet transform might be used to build a keypoint descriptor. It seems then possible to build a SIFT-like feature detector using wavelet theory.
Fig. 1: Keypoint detection on a picture (source: wikipedia)