Pipeline for Identifying LysoTracker puncta

The attached pipeline was created to identify puncta stained with the fluorescent dye LysoTracker (which labels acidic organelles). I have also attached 2 image sets (DAPI files are of Nuclei, Cy3 files are of LysoTracker).

I think the identification of Nuclei works fine, but I am wondering if anyone has any advice on improving the identification of LysoTracker puncta.

Additionally, this pipeline was created on CellProfiler 2.2.0 but it does not seem compatible with CellProfiler 3. I think this is an issue with the different thresholding strategies when Identifying Primary Objects but I am not sure how to modify the pipeline to make it compatible with CellProfiler 3. I would really appreciate any help in this!

iN7 Lysotracker Analysis.cpproj (1.0 MB)

It seems new users can only upload 1 file at a time so I am attaching 2 image sets (4 images; 2 Nuclei & 2 LysoTracker) as comments!

B - 02(fld 1 wv Cy3 - Cy3).tif (8.0 MB)

B - 02(fld 1 wv DAPI - DAPI).tif (8.0 MB)

B - 02(fld 2 wv Cy3 - Cy3).tif (8.0 MB)

B - 02(fld 2 wv DAPI - DAPI).tif (8.0 MB)

Hi dkurup

It’s hard to help if I am unsure as to what exactly you need to improve. Maybe take a small screenshot and show what you would like to make better.

In your images it looks like the nuclear identification is merging small nuclei, do you want this?

Are you only looking for the live (large) dapi cells. If so I would use Otsu to stop identifying background.

Your nuclear identification watershed is not identifying the correct separation on cells.

I would leverage the fact that nuclei are round and not use intensity to separate overlapping cells.

It also looks like you are trying to identify the cytoplasm using the LysoTracker, which is not appropriate. If you have the lightfeild images this can be done, or you could expand the nuclei, which again isn’t perfect.


When you come to identify puncta, your thresholding is off and watershed is failing to separate puncta.


This is likely as Otsu is looking for ~50% foreground vs background. I would recommend adjusting the Otsu to 0.5 and using propagation watershed to separate the puncta.


Now that you have both nuclei and puncta, I would expand your nuclei to become pseudo cytoplasms and use this to relate each puncta to a particular cell.


Further optimization could be done to remove puncta associated with small(dead) nuclei. I hope this helps.

iN7 Lysotracker Analysis.cpproj (863.6 KB)

I used CellProfiler 3.1.5



Hi Lee,

Thank you so much for your detailed response! I am not super familiar with using CellProfiler so your modifications and explanations are very helpful. I really appreciate it!

1 Like

I am working on this project with dkurup and I had some follow up questions about the updates you made to the pipeline.

For the second IdentifyPrimaryObjects Module (for identifying lysosomal puncta):

  1. How did you determine which specific threshold correction factor to use? You suggested 0.5 but how did you come up with this value? More broadly why did you suggest that the threshold factor become more lenient <1 instead of more stringent >1.
  2. For the Method to draw dividing lines between clumped objects you chose propagate as opposed to shape (which was used in the original pipeline) can you explain why you thought propagate would be more appropriate?

For the ExpandorShrinkObjects, RelateObjects, & OverlayOutline Modules:
3. By adding the ExpandorShrinkObjects, RelateObjects, & OverlayOutline modules, does this mean that the puncta that are outside of the constructed cells boundaries are not counted or are total puncta and nuclei counts independent of constructed cell boundaries?
4. In the ExpandorShrinkObjects modules you chose to expand the nuclei by 40 pixels. How did you derive the value of 40 pixels?

Finally could you explain why you chose to switch fill in holes in identified objects after both thresholding and declumping → Never?

Thanks so much for the help!!

Hi Sadeleye

  1. In the original pipeline, you used a robust background threshold (not correct for this model) which gave a threshold of 0.0185. I assume you are trying to identify even the lightly fluorescent punta (see above). If I adjust the OTSU to 0.5 it gives a threshold of 0.0253 which is close to you original goal. If you go in the opposite direction you will only identify the heavily fluorescent punta, is that your goal?

  2. When dealing with small circular objects, particularly ones with a greater intensity in the centre of the object, propagate does a much better job (see above for the comparison to your original pipeline). However you can try all versions and decide which one you believe is the most appropriate.

  3. You can decide if you want to just want to count all puncta in an image (remove the expand and relate objects) or in the case where you want to count puncta per cell (keep the expand objects and relate objects).

  4. 40 pixels was an arbitrary size I decided on looking at how close each nuclei was and the puncta. You could expand all cell bodies until touching if you like, however I chose not to do this as the dead cells may have puncta, so I was being conservative.

  5. You need to be more specific as to which part you don’t like filling holes? If you are talking about the puncta then doesn’t this seem obvious, dense puncta may create a hole that is not actually puncta, therefore filling in this gap would produce puncta that are not real.

  6. To make this pipeline better, I would take advantage of gaussian smoothing to increase threshold detection across multiple images, enhanced speckles to better identify the puncta.


In response to
3. We are trying to count all puncta in an image so we are going to the remove the expand & relate objects modules, but does this imply that we should also remove the overlay outlines modules since there are no longer constructed cell boundaries?

  1. In terms of “filling in holes”, I guess I should have asked the more broad question of what exactly is “filling in holes”? Does this mean that the software is creating an object in place of background if it is surrounded by many identified objects? I’m trying to make sure I fully understand the concept especially between the three options presented of 1. after both thresholding and declumping 2. after declumping only & 3. never.
    I’m just trying to clarify because in the first IdentifyPrimaryObjects module (for identifying nuclei) for “fill holes in identified objects” after both thresholding and declumping is selected but for the second IdentifyPrimaryObjects module (for identifying lysosomal puncta) never is selected.

  2. If you are referring to gaussian smoothing in the CorrectIlluminationCalculate modules we have done this.

We really appreciate all of your help!

  1. The overlay was just a visualization step to show you what the results look like. I personally always like to overlay my image and save a simple png, this way I can visualize my results to make sure the analysis ran correctly for all images. The overlay is not used for any analysis.

  2. I understand now. Imagine that in very rare cases that multiple puncta touch to form a donut shape. If we fill in the wholes, the centre of the donut which are not pixels from puncta will be called pixels from puncta. With the nuclei, what are the chances that multiple nuclei form a donut (very very small), however because the nuclei has variable staining across each nuclei, some small sections of a single nuclei may not be detected by the thresholding. So if we don’t fill in the wholes for nuclei, some nuclei will have small holes inside the nuclei that are not detected when they should have been. Does this help?

  3. The CorrectIlluminationCalculate module uses a gaussian smoothing to adjust the original image correction. I was talking about using a gaussian smoothing on the nuclei before identify primary and using an enhance speckles before identifying puncta.


For 3. how do you export/save these images?

  1. Now I understand! Thank you that was a very helpful explanation

For 5. So you are referring to the Gaussian Filter module? I’m assuming my input image into that module would be the nuclei image that has been corrected using the correctedillumination and rescaledintensity.
For the enhanceorsupressfeatures module the input would be the lysomal puncta image that has been correctedillumination? Furthermore, when trying to determine the feature size does one just measure varying puncta radii and finds an average pixel length to determine how long it is?



  1. I just add the module saveimage and save the overlayed image.

  2. No problem

  3. So I would take the nuclei rescaledintensity image and using the smooth module, add a small guassion smooth (example 10pixels). This helps with both the threshold detection step next and the variability of pixel intensities in the nuclei. So this smoothed image is used to identify nuclei. Also take the puncta rescaledintensity image and using the enhanced module, add speckles (example 2-10pixels) to enhance the puncta image, before it goes into the identify puncta.

  4. The module measureimagearea and pick objects punta, will measure all puncta. Then add the module exporttospreadsheet, which will output a csv. For you I would output the puncta total counts per image, area of total puncta per image (pixels) and area of total image (pixels). So counts per pixel and puncta per pixel.