Counting Spots with FISH (RNAscope)

Hello All!

I am trying to use CellProfiler to quantify the results of some fluorescent in situ hybridization. I’ve had great success using CellProfiler so far and have identified my relevant structures, but can’t figure out how to quantify the results.

In short, we labeled neurons that project between two populations using CTB-555. Then we ran FISH to stain for specific sequences (punctae) within the cells and stained with DAPI. We want to see if there’s a difference in the punctae count between neurons that do and do not project to our specific region (those labeled with CTB-555).

We have gotten a pipeline to the point that it can identify the structures within each channel and overlay them (using RelateObjects), but don’t know how to do the final counting. Which modules should be used for this task?

I’ve attached some pictures so you can maybe more clearly see what I mean. Also I’ve attached the pipeline that I have been using, however I haven’t changed it past the active RelateObjects Modules.

In my case, we want to count the dots (punctae) seen in the bottom image of RelateNucPunc. This shows all the punctae that are within nuclei (labeled with DAPI). Next, I want to differentiate those into 2 categories: those punctae within nuclei that do/do NOT overlay with the CTB (RelateSomaNuc).

I generally think that this can be accomplished with the MaskObject and/or FilterObject modules and some other counting module, but really wasn’t sure how it all fit together. Any and all help is greatly appreciated!

Please ask if anything needs clarification! I tried to be relatively succinct without being confusing.

ARB 3 Channel FISH Pipeline.cpproj (1.1 MB)


You’re absolutely on the right track, there are a couple of different ways to get over the finish line-

  1. You relate nuclei to punctae and to soma, so on the “Nuclei” spreadsheet you could compare the Children_ExpandedPunctae in nuclei that have Parent_ExpandedSoma as a number >0 vs 0
  2. Replace your 3 RelateObjects modules with these 4 modules
  • MaskObjects- Mask your ExpandedNuclei by your ExpandedSoma to make something like CTBPositiveNuclei (you’ll probably want to use the ‘Remove based on overlap’ option, but read the manual for more details)
  • MaskObjects- Mask your ExpandedNuclei by your CTBPositiveNuclei with ‘Invert the mask’ set to ‘Yes’- this will let you make CTBNegativeNuclei
  • RelateObjects- Parent CTBPositiveNuclei, Children ExpandedPunctae
  • RelateObjects- Parent CTBNegativeNuclei, Children ExpandedPunctae

I find option 2 more intuitive and easier to understand when sharing or going back to a pipeline later, but option 1 has the advantage that it will work with the pipeline as is so if you’ve already run data you needn’t rerun it.

1 Like