Counting iPSC colonies after whole-well imaging



Hi all,

I would like to learn how to use Pick Cells to count iPSC colonies after whole-well imaging by Celigo (further info about this system is here:

Introduction to my problem:
In my experiments, I measure the iPSC reprogramming efficiency by counting (at the moment manually) the number of iPSC colonies at the end of an experiment. To visualize the colonies, I do an immunofluorescence against Nanog, which should stain the iPSCs, and also I use DAPI to detect every colony on a plate. My project involves a large number of reprogramming conditions to be analyzed, therefore counting colonies manually is not practical. Therefore, I would like to use Pick Cells to count colonies automatically, and then give me the number of Nanog+DAPI+ and DAPI only colonies.


In the above example, I show how I count colonies. The Type 1 colonies are Nanog(Red)+&DAPI(Blue)+. The Type 2 colonies are DAPI(Blue)+ only. Because, there are a lot of dead cells in a typical reprogramming experiment, there is Nanog signal everywhere. However, I only consider colonies if their surface area contains at least 9 pixels. In addition, the Type 1 colonies are actually not entirely magenta. This is because the Nanog expression of these colonies is not uniform. Therefore, I would like Pick Cells to measure the area of Nanog signal over DAPI signal. So I can group my colonies as ‘Fully reprogrammed’ and ‘Partially reprogrammed’.

I would be grateful if someone can describe how to tackle this problem using Pick Cells. Below, I provided two images, one with Nanog (red) signal and the other with DAPI (blue) signal. Please feel free to use these in the tutorial.

Thanks in advance!

Calculating clustering between segmented nuclei

Hi @bozkan,

Thanks for posting such a clear question!

First, from Celigo you should be able to export your images as RGB or multipages .tif files. These are the images you can import in PickCells and PickCells should automatically recognise the dimensionality and number of channels your images contain.

###1. Colonies Identification###
NB: There are several ways to go about this, here is one that is already available in PickCells, this is probably not the absolute best method because it requires manual adjustments of some parameters and it may be more robust to use a trainable segmentation system for this. But anyways, I think the following method should give you reasonable results that you will be able to trust, and once parameters are adjusted, PickCells will batch process all your images so you only have to adjust this once. You are very welcome to open a feature request for the trainable segmentation of colonies! :wink:

So, one way to do this is to smooth and threshold your dapi signal. To do this, launch the ‘Simple Segmentation’ module
You will be prompted with a dialog to setup the segmentation pipeline:

  1. Since you have several channels, the first step is to select the channel that contains your Dapi signal, then run ‘use’ and click ‘Next’ to move onto the next step.

  2. Then, you can select ‘Gaussian Blur’ to smooth your image (It should be selected by default in the ‘Available Method’ panel). In your case, your images are low resolution where a single cell is just one pixel large. By selecting a radius of 1px in x and y, we will minimise the signal coming from the isolated cells and at the same time smooth the contour of the colonies.

  3. Then in the next step, you need to apply a threshold on the image to tell the software what is background and what should be considered as signal. Use the slider of the preview channel to do this. The slider allows you to set a lower threshold (blue pixels) and an upper threshold (red pixels). In this case you want to make sure that you do not set an upper threshold -> no red pixels on the image. Your image before clicking ‘Next’ should look like this:

  4. Finally you can try to separate colonies which are not well separated using a “morphological filter” and in this case you want to perform an opening filtering. Select ‘Open’ in the dialog and then choose a radius, I found with the image you provided that a radius of 2px worked well.

    Make sure you are not removing colonies which are very small, if colonies are smaller that twice the radius, they will be removed, adjust the radius based on what you think is the most accurate. On the above images, you can see that the big cluster of colonies on the right has been separated into 4 colonies but very small colonies are removed. This can be acceptable since the same parameters will be applied to all the images that you have imported.

###2. Generate Colonies Properties###
Once the above step is finished, the MetaModel will update and you will see a new ‘SegmentationResult’ Node appearing. You can now generate the features i.e, compute properties such as average intensity in each channel or the size for example.
To do so, launch the Feature Computer module , close the unnecessary feature “envelopes” and leave only the ‘Basic Features’ open. Then, in the upper right corner of the dialog choose ‘Colony’ as a type. Click ‘Compute’, wait that it runs and that’s it you should have Colony objects in your database and a new Colony node in your MetaModel view.
This means you can look at your colonies in any of the visulisation tools, like the Image View for example:

###3. Create a filter to classify colonies as positive vs negative###
The last step is to tell the software what is a positive colony and what is a negative one. Once again, machine learning would be very convenient here and this is a feature which is on its way (Soon available :yum:).
In the meantime, we can manually configure a filter (threshold on properties of the colonies) based on the average intensity and maybe also the intensity variation of the Nanog signal within the colony.

First to see how these properties behave, open up the image viewer and pick a few colonies to see their values (After selcting the picking tool, right click on a colony to display its features):

This way, you can decide appropriate thresholds for each properties and then create the Filter (In the menu bar : Data>new Filter). Below I show how to create a filterwith 2 thresholds Mean Nanog intensity > 10 and Intensity variance >100.
Note: It shows Nucleus on the gif below and above but if you selected ‘Colony’ in the Feature computation step the you should have ‘Colony’ instead, sorry my mistake.

Finally, we can use our filters to create the visualisation we want, when you build your queries, select ‘colony’ as the target and use the grouping panel and ‘split in 2’ with the filter you just created. You should be able to obtain something similar to this:

On the left you see colonies with yellow contours identified as Nanog positive while the others are considered negative. On the right, I created a bubble plot showing the Nanog mean intensity vs Nanog intensity variance and the bubble size is the colony area. Blue is negative, red is positive.
And finally, the actual count:

For looking at different levels of reprogramming you can create 2 or more filters just as I did above.

We could also estimate the actual number of cells within each colonies using a different technique.
You could use the spot finder module on the Nanog channel and then create ‘MEMBER OF’ relationships between the spots and the colony and finally create a new attribute for colonies which would correspond to the number of Nanog+ cells in the colony.
This will be for another post… Please remind me to do this if you think this may be useful for you and if I take to much time to come back to you.

I hope this is helpful and that you succeed to do what you want, please come back over here if you need more help! :wink: