Identify Primary/Secondary Question


I apologize if this is answered somewhere else, but I have been looking for an answer to this question for a while.

We have cells that are labeled with DAPI for nuclei staining and GFP for a marker of a protein inside the cell but outside the nucleus. Some cells have the GFP maker and some don’t.

I have created a pipeline that counts the DAPI labeled cells perfectly, but it will also mark cells as labeled with GFP regardless of whether or not it is actually present. All I need is a basic count of DAPI/GFP labeled versus just DAPI labeled alone.

Here is my current pipeline


For IdentifyPrimAutomatic
Otsu Global
Threshold: 1.1
Method to distinguish clumped objects: Shape
Method to draw dividing lines between clumped objects: Distance

For IdentifySecondary
MoG Adaptive
Threshold: 1.3

Thank you.



Your project should be quite straightforward - you are almost accomplishing it. There are two strategies you might use:

(1) It sounds like you are using IdentifySecondary to find the “cell” boundaries based on the GFP channel? So, in GFP-negative cells, the “cell” is about the same size as the nucleus alone, and in GFP-positive cells, the “cell” is encompassing most of the actual cell…Do I have that right?

If so, you are two steps away: (a) Make sure MeasureObjectIntensity is measuring the intensity of the “cells”. In fact, it would be even better to add an IdentifyTertiarySubregion to define a cytoplasmic compartment (Cells minus nucleus equals cytoplasm). Then, your GFP-negative “cytoplasms” will just be a tiny ring around the nucleus and contain little GFP and your GFP-positive “cytoplasms” will be large and contain a lot of GFP. (b) Add a ClassifyObjects module to classify cells as GFP-positive or GFP-negative, based on your selection of a threshold value of what should count as positive or negative. To decide the threshold value: you can use the DataTool > ShowDataOnImage after running an image set through CellProfiler to see what the typical GFP intensity measurements are for whatever compartment you decide to measure (let’s say the Integrated Intensity of the “cytoplasm” compartment - that is likely to work best). See the ClassifyObject module’s help for more details. This will give you a count of GFP-positive and GFP-negative cells. Instead of ClassifyObjects, you can use FilterObjects to just completely get rid of GFP-negative cells and count the remaining cells. Those two approaches should yield similar results, it’s just a matter of whether you might want further analysis of both GFP-positive and GFP-negative cells downstream in the pipeline or not.

(2) The second option is to change IdentifySecondary to use the Distance - N option rather than Watershed. In this case, the cell’s edges are artificially defined as a certain number of pixels’ distance from each nucleus. This forms a uniform ‘ring’ around each nucleus. Then, as above, you can use IdentifyTertiarySubregion to identify cytoplasms and then MeasureObjectIntensity and Classify or Filter. I think option (1) will likely work better for you; this option (2) works best if your cells are pretty uniformly round and uniformly sized, such that the ‘ring’ around each nucleus is a good approximation of the real cell boundaries.

I am glad the nucleus-counting part of it is up and running already. I hope this solves the rest of the project for you. Please let us know how it works out!