Search code examples
image-processingtrackingimage-segmentationmotion-detectionkalman-filter

Easy Object Tracking Matlab Algorithms


I have timelapse images of moving mammalian cells from a cell culture and I'm trying to design a tracking algorithm for the cells using Matlab. I am trying to look for an algorithm that is simple and easy to implement with low processing times. Most importantly, I would prefer to use an algorithm that requires minimal mathematical understanding. So far, I found that the Kalman filter is popular for motion tracking but I would like to know more about different available options for such an application. Any dynamic information or parameters that are available from the images are limited: area, centroids, etc.

Here is an example of what a typical image might look like (but with less background noise than this particular image from the web

I would also like to know about the exact relationship between segmentation and tracking since this is a bit unclear for me. Is segmentation a necessary preliminary step for tracking? Or is tracking possible without a segmentation step?

I would very much appreciate it if anyone could suggest any tracking algorithms which won't be too complicated to implement. Any help is appreciated.. Thanks!


Solution

  • Traditionally, segmentation has been a crucial first step to tracking. The idea of segmentation is to identify the objects of interest. This task is typically challenged by the existence of noise in acquired images. So, people usually apply several noise-reduction filters (e.g., Gaussian blurring) to remove noise as much as possible and therefore make the life easier for the segmentation algorithm.

    The resulting image after a segmentation step is a binary image. Below on the right, you see a segmented image.

    left: original image, right: segmented image

    After segmentation, the next natural step is to track those cells. There are several parameters one has to consider to choose the right tracker:

    • Cell mobility and direction: linear, random, etc.
    • Number of cells (aka algorithm complexity): how does your algorithm scale with the number of cells
    • Cell-division awareness: can your tracker successfully track daughter cells following a mitosis.
    • Closing gaps: can your tracker handle cells that enter/leave the scene

    There are many more things to consider but as a first start you can code up a simple nearest-neighbor tracker. This tracker would find for each cell in time frame t, its closest neighbor in t+1. This is obviously a very simple tracker and may not work for a majority of cases, but it can give you a starting foundation to build upon.

    I would also suggest that you check Fiji/ImageJ's cell tracking plugins after getting your segmentation done.