Counting immune cell infiltration into spheroids over time (+ specific tracking question)

Hi everyone,

I have never used CellProfiler before, but I need to create a pipeline to automate my analysis.
Here is what I have:

  • a 3D timelapse of immune cell infiltration into spheroids which I have max projected to create a 2D timelapse

Here is what I want to do:

  • I want to count the immune cells infiltrating my spheroids over time. In each 2D timelapse there are multiple spheroids in an image and there are immune cells evenly distributed throughout the matrix which with time infiltrate the spheroids. So I need the end readout to be: there are x number of immune cells (or total area of immune cells) in spheroid 1 in timelapse 1 at timepoint 1, 2, 3, etc. and so on for all of the spheroids in all of my timelapses.

So far my pipeline goes as follows:
ID primary object (spheroid)
ID primary object (immune cells)
Relate objects (parent objects are spheroids and children objects are immune cells)

Now for the questions:

  1. Is cellprofiler unable to process timelapses as a unit? Because I’ve had to load my movies timepoint by timepoint
  2. Because each individual timepoint of the same movie is processed separately, when CP segments my spheroids and labels them in each image spheroid 1 at timepoint 1 may not be the same spheroid as spheroid 1 at timepoint 2 and I need continuity for me to record the number of immune cells within the same spheroid over time. So I assume that in order to keep the spheroids labelled the same from one timepoint to the next I need to track them (even though they aren’t moving tracking would tell CP that spheroid 1 in one image is still the same spheroid at a different timepoint of the same movie). How do I track my spheroids? Or if there is an alternative solution to this problem.

Thank you so much for your help!


Unfortunately, you have to process them as multi-sequence time-lapse images. First, you need to segments immune cells and spheroids for each time-point. In TrackObjects module you can choose Overlap/Distance method and define suitable pixel distance of objects in two consecutive frames to be considered as the same object. As long as the distance between spheroids and immune cells is within the selected distance in pixel range. They are assigned with the same label from time point(1) till time point(n)


@habbasi is quite right that you have to open your images frame-wise- it’s simply how CP works.

One thing you could do however to avoid tracking is break your pipeline into two (it’s relatively simple)-

Make two identical copies of your pipeline.

In the first copy:
Delete everything after you identify your spheroids, then add two more modules- ConvertObjectsToImage (use uint16) and SaveImages (use 16-bit TIF). Run one (and only one) frame from each movie through this first pipeline- you now have all of one image “map” of spheroids for each movie.

In the second copy:
Delete the identification of the spheroids. Load all the frames of your movies AND the spheroid object images you made in step 1. Under all your other channels in NamesAndTypes, add a new one with the type ‘object’ and the name you use in your pipeline for the spheroids (‘Spheroids’, ‘spheroids’, ‘spheres’, what have you). You’ll need to set up Metadata matching; see this thread for more info, as well as the help for the NamesAndTypes module (I’ve screenshotted the relevant portion here).