Three-dimensional marker tracking system

I developed this system as part of my Master's thesis at the University of Stellenbosch. The system tracks markers by using two video cameras for stereo imaging. The marker itself can be any white, spherical object.

This project included the design and building of two video cameras and framegrabber cards for a PC. Software was written to recognize markers and to calculate there 3D positions. The software was written mainly in C and assembly language. Besides noise on the camera images, the implementation of this system was successful. The accuracy of the system is 2mm if the distance between the cameras and markers is 2m. The maximum samplingrate of the system was 21.4 frames per second if a 150MHz Pentium Pro PC was used.

The following documents explains some aspects of the system in more detail:

Marker recognition explains the marker recognition algorithm.
Calibration explains the calibration algorithm as well as how 3D coordinates are determined from two camera images.
Below is a screenshot of the Tracker program:

The screen is basically divided into two vertical sections. The top section has three image windows, while the bottom half is used for all specific function dialog windows. Each of the three windows has buttons at there top which are used to select what appears in that image window. In the screenshot the left and right camera images of the calibration frame are displayed in the two left windows. The right window contains a zoomed image of the marker in the rectangle on the right-hand camera images. The zoom window can also be using during tracking to show the image of the marker being tracked. This is useful for debugging purposes.

Below is a screenshot of the dialog window which is used to generate a mask:

As can be seen a false color image is used to represent the mask. The yellow square around the mask is the computer generated margins.  The computer generate these margins by determining the smallest rectangle that can hold all mask points above black level. The Left, Right, Top, Bottom margin controls is used to set the maximum size of the mask, as it my sometime happen that there are some stray points which are above black level, but which is not part of the mask.

The Black clip level is the minimum pixel intensity which is considered as non-black. If any pixel's intensity is equal to or below this value, its intensity is set to 0, which is black.

The Quantisize control is used to set the quantisization steps. The image intensities in this system can be from 0 to 63 for bright white.  By increasing the quantisization steps, the number of possible quantisization levels is decreased.

The Filter control is used to filter the mask image a little bit. It can have a value of 0 for no filtering, or 100 for maximum filtering.

The Symmetry toggle button, if activated, makes the mask symmetrical.

Below is a screenshot of the tracker program while calibration is performed.

This is a screenshot of the tracker program while a marker is tracked.


Test Results:

For testing purposes a marble, spray-painted white, was glued to the corner of a disc. A stepper motor, which was controlled using a PC, was used to turn the disc. Below is a photo of the test setup. This photo was captured using the left video camera.

The software was instructed to find the marker, after which the stepper motor was activated and the software tracked to moving marker. The following results were obtained: The first graph displays the X, Y and Z axis versus time. As the marker moved in the X and Y plane, the Z-axis graph has a smaller scale than the other two. What can be seen clearly on the Z-axis graph is the increase in noise as the speed of the marker movement increases. One of the reasons for this noise increase is that a fast moving marker will no longer be round in shape as the image may be blurred.

The graph below shows the XY plot of the movement. Here the circular path of the marker can be clearly seen.

  Back to main page