Digital video analysis enables us to extract the trajectories of individual colloidal microspheres from a video tape of their microscope images. The time evolution of the distribution of particles,
then can be used to calculate quantities of interest, some examples of which we discuss in later sections. In eqn. (1), is the location of the i-th particle in a field of N particles at time t.
The software we have developed to extract from a sequence of digital images consists of five logical steps: correcting imperfections in the individual images, locating candidate particle positions, refining these positions, discriminating ``false'' particles, and finally linking the time-resolved particle locations into trajectories. In this section, we discuss our solutions to these interrelated problems.
The difficulty of measuring can vary greatly from system to system. For instance, images of a dilute suspension whose particles are geometrically confined at the microscope's focal plane are simpler to process than pictures of a dense suspension of colloid moving in three dimensions. In the latter case, the tracking algorithm has to deal with the changing appearance of the spheres as they move in and out of focus. Furthermore, it has to distinguish marginally focused particles from noise. The need to locate a large number of spheres by processing the much larger number of pixels in each of a stream of images also places stringent efficiency constraints on the code. The set of algorithms presented below reliably processes ``easy'' and ``difficult'' images alike, and does so with minimal intervention in the form of adjustable tuning parameters.
Our image processing system is implemented in IDL, a programming language optimized for visual data analysis. We have found IDL to be more convenient than conventional languages such as C/C++ or Fortran for rapidly developing, testing, and modifying image analysis software. Although IDL is an interpreted language, its performance on typical tasks such as matrix convolutions is comparable to that of compiled languages thanks to the availability of highly optimized analysis modules and array processing primitives.