Counting Nuclei in Myotubes vs Myoblasts



I’m currently working with C2C12 muscle cells. They are originally myoblasts and then over time, they fuse with other single cells and form a myotube. These myotubes by definition contain 2 or more nuclei and are positive for myosin heavy chain (MHC, in the green channel) antibody. On the other hand, myoblasts, which contain only one nucleus, are not MHC positive and therefore do not have any signal in the green channel.

I’m trying to count the total number of nuclei within each myotube. I am also interested in getting the ratio of nuclei within myotubes to the total number of nuclei in the field (within myoblasts or myotubes).

I was thinking to use a strategy to first identify nuclei, and then cytoplasms, and finally count the number of nuclei per cytoplasms. Unfortunately, I couldn’t find a way to let Cell Profiler allow more than one primary object per secondary object.
If there is a way, let me know!

My compromise is to consider myotubes as uni-nucleated cells with MHC signal.

So I have set up cell profiler to first identify all the nuclei with DAPI, then have the program find the myoblast by their absence of signal in the green channel. Once the program has identified the primary and the secondary, I have the program find the cytoplasm, by subtracting the primary channel from the secondary channel. The program then measures the intensity of the Green channel and Filters objects by Intensity from the cytoplasm, the criteria used is the Integrated Intensity Edge set to 19-20.

Now the first image I used to test the Pipeline gives satisfactory numbers (close to manually counted), but when I analyze a second image, the program misses a lot of the nuclei found within a myotube. I have images saved from the Cell Profiler Program, they are on Picassa Images from CellProfiler, the ones starting with 01 are the first image, and the ones with 02 are the second image (The File names are descriptive enough I think). I have taken the images generated by cell profiler at the PrimaryIdentifyAutomatic (nuclei), SecondaryIdentify (Myotubes), TertiaryIdentify (Cytoplasm) and FilterObjectbyMeasurement (Nuclei found within a Myotube).

See below the custom settings of some of the module within my pipeline
Thanks in advance for any input!


  1. IdentifyPrimAutomatic
    Default Settings
    -Discard objects outside of diameter range : No

  2. IdentifySecondary
    Default Settings
    -For Propagation, enter regulization factor: 0.001

  3. FilterByObjectMeasurement
    -Category of Measurement: Intensity
    -Feature: 6
    -Minimum Value: 19
    -Maximum Value: No Maximum


Hi Alphonse,

The way secondary objects are constructed, they are meant to be one-to-one with the primary objects. So unfortunately, you won’t be able to assign more than one primary object per secondary object.

I think your basic strategy is good. But based on the images you posted, I see that the cytoplasm remaining in 02 seems to be concentrated in the brighter patches of the image. Also, it looks like the green channel fluorescence in 01 is more saturated as compared to that in 02. If that’s the case, that could explain why filtering on the basis of intensity fails for 02: the intensity is too dim for the thresholds you set for 01.

One way around is to adjust the threshold by trial-and-error to find one that works for both. But a better way might be to rescale the green channel image to the range of 0 to 1 using RescaleIntensity after you load it, and then continue your analysis on this normalized green image. This might makes your choice of filtering threshold more robust.

Hope this helps,


Hi Mark,

Thank you for the input, I have used the rescale intensity module and the result of the 01 images (number of nuclei within myotubes) are much more closer to what I have counted manually, for the 02 images the numbers of nuclei within a myotube has gotten better, but not exact. I still need to tweak the threshold to get more accurate results for other images that I have taken.

Thanks a lot for the help!



For other readers and other image sets, another idea that might help in these situations (where you’d like to have more than one ‘primary’ object per secondary object is to turn things inside-out: first identify the larger object (cells) and then identify the smaller objects (nuclei), using IdentifyPrimAutomatic in both cases. Finally, use “Relate” to assign each ‘child’ nucleus to a ‘parent’ cell, which will count up how many nuclei per cell. Of course, this only works if your cells are readily identifiable using IdentifyPrimAutomatic (you miss out on the benefit of using the nuclei as the starting points to find cell edges).

If the multiple nuclei in a cell are near each other but far from other cells’ nuclei, you could also IdentifyPrimAutomatic to find nuclei, then Expand them using ExpandOrShrink until they run into each other and merge, then ConvertToImage to turn the nuclei objects into a black/white (binary) image, then IdentifyPrimAutomatic to re-identify the merged, blobby nuclei, then IdentifySecondary to find the cell edges around each merged blobby nucleus. Finally, Relate the original non-merged nuclei ‘children’ to the cell ‘parents’ to count nuclei for each parent. In some cases, this strategy might work.

Lastly, you could identify every nucleus using IdentifyPrimAutomatic, identify cells (even though fragmented) using IdentifySecondary, then expand the cells by one pixel to merge nearby cells with each other using ExpandOrShrink, then ConvertToImage to turn the cell objects into a black/white (binary) image, then IdentifyPrimAutomatic to re-identify the merged cell objects. And again, Relate the original non-merged nuclei ‘children’ to the cell ‘parents’ to count nuclei for each parent. This strategy would only work if separate cells tend not to be very close to each other (i.e., if they are 1 pixel apart they’d get merged).

I realize these probably don’t work for this particular case but might help someone else later.



In addition to the suggestions above, the UnifyObjects module might help. You would first identify the nuclei with IdentifyPrimary, then identify the parts of the myotubes with IdentifySecondary. Next, you would merge adjacent myotube parts into complete myotube cells with UnifyObjects. The default options to UnifyObject (Distance = 0; Grayscale image = None) should be fine.

Of course, this only works if your myotubes are not touching.