The OpenIMAJ difference-of-Gaussian/SIFT implementation is quite fast. To illustrate this, we have created two demos that illustrate SIFT extraction and matching (with homography fitting) in near real-time using a webcam as an input.

The first demonstration performs difference-of-Gaussian peak detection and SIFT extraction on every frame. The detected features are then matched against a model (selected by the user) and a homography is fitted. A video of the demo can be found here.

The second demonstration performs uses a Kanade-Lucas-Tomasi tracker to track an object selected by the user. SIFT features are used to initialise the tracking window, and also to re-initialise it should be tracked object be lost from the scene. The advantage of this hybrid approach is that it is much more efficient than just using a pure SIFT based approach on every frame, and thus higher frame rates can be achieved. A video of the demo can be found here.

If you want to try these demos yourself you'll currently need to be on a Mac, Windows or Linux machine and have a webcam (supported by Quicktime on the mac, DirectShow on Windows or video for linux on linux). You'll also need a version of Java greater than 1.6.

An assembled JAR with all the required dependencies can downloaded here. To run the first demo, open a command prompt and navigate to the directory where you downloaded the JAR, and then run:

java -Xmx1G -cp VideoSIFT.jar org.openimaj.demos.video.videosift.VideoSIFT

The second demo can be run with:

java -Xmx1G -cp VideoSIFT.jar org.openimaj.demos.video.videosift.VideoKLTSIFT

Both demos operate in the same way; once loaded they display a live video picture. Hold the object you wish to track in front of the camera and press the spacebar to pause the video. You can then click on the video window to select the outline of the object you wish to track. Once the object is outlined, press the "c" key to capture the model, and then press the spacebar to resume the video. The object should then be tracked as you move it around.