RNAscope in Spinal Cord Neurons -> Quantitation of overlap between different In Situ Probes



Hi all,
I’m new to Cell Profiler but i’ve heard many good things. I’m trying to see if Cell Profiler is the right tool to do a very basic but time consuming task.

Basically, I do a lot of in situ hybridization and IHC in spinal cord and dorsal root ganglia tissue. Often, the goal is to show co-expression of two or more genes and calculate percentages of overlap.

We do this by hand at the moment using Photoshop or a Matlab script we made. I know people like imageJ too, but either way, it requires manual drawing of ROIs.

it’d be great to have a tool to automatically detect cells, and determine the coexpression of different channels within the same cell.

As an example image:
11 PM

I would love if Cell Profiler could find out the co-expression in panel D.

I realize neuronal cell boundaries are difficult to determine, even for humans, but I would even be happy if we conservatively drew the boundaries around nuclei (DAPI) and did coexpression that way.

Any help would be greatly appreciated.



Lovely assay! Can you please post some raw images of the three channels?

And clarify the goal: I assume DNA = blue and the two stains of interest are pink and white?

It’d be also nice to understand what you mean by neuronal cell boundaries. Maybe it’s the contrast of the images, but I see very textured nuclei, I’m not sure what stain if any indicates the borders of the neurons?


Hi @Anne_Carpenter

Thank you so much for your response and for leading this project. Cell Profiler looks very powerful and hope to use it more for neuroscience microscopy.

And clarify the goal: I assume DNA = blue and the two stains of interest are pink and white?

Yes, blue is DAPI, so that stains the nucleus very clearly. The two stains of interest are the red and white, yes, which are two different genes. This is single-molecule FISH, so those puncta are individual transcripts. At this moment, I’m looking for a binary “yes/no” in terms of co-expression within a cell. Later on, it might be nice to quantitate the signal inside a cell boundary to get a continuous range, but right now, my goal is binary.

What I mean about cell vs. nuclei boundaries -> The cell boundary is often larger than the nucleus (DAPI). Some cells are very much their nucleus w/ little cytoplasm, but some have more cytoplasm that goes beyond the border of the nucleus. That’s what makes neurons hard. I suppose Cell Profiler can’t really guess, but would need some other stain that marks the entire cell?

Here’s an example of what I mean:

You can see here that the majority of the puncta are not overlapping the nucleus but are nearby, likely within the cytoplasm of the cell. I don’t have a whole-cell stain here, so I’m assuming, but I’m pretty sure that’s the same neuron. Dealing with this kind of cell will be hard.

In any case, I’d be happy even if we used the approximation of nucleus == cell. That would undercount the real number number of neurons with signal in them probably, but it’d get us pretty far.

I’m posting the original image files here:


Ah, I see. This definitely sounds feasible. Options:

  1. A cell-body stain of course makes the whole approach much more accurate. That’d be your first choice if you want the greatest accuracy.
  2. The “doughnut” approach. In IdentifySecondaryObjects, you use the distance option which will just expand each nucleus by a fixed number of pixels.
  3. A somewhat more complicated approach, where you blur the pink and white signals, then use them each independently to identify the region that has staining around each nucleus. Then you check for overlap. Or, you merge the two regions and then measure the pink and white staining within that merged object. So for cells with no pink or white at all, you’d just get a nucleus outlined. If you had staining around each nucleus, you’d get a ‘cytoplasm’ like region.


I haven’t provided any detail or an example pipeline (you’d need to start with IdentifyPrimaryObjects to identify the nuclei), hopefully you can give it a shot yourself or someone else can help. I’ve got to go write a grant!


Thanks @Anne_Carpenter! Good luck with your grant. This is very useful. We’ll try to figure it out and seek more help if needed.

My undergrad already was able to segment the nuclei just in an hour or so. Now we’ll work on getting the other channels and hopefully have a reproducible pipeline. This would be huge if it works.


Super, and I’m excited to see on Twitter that this is something a lot of folks would benefit from. Hope you will post the final resulting pipeline here for others to find!


Thanks Anne. Yes, this is a really essential kind of analysis in lots of neuroscience (and related fields) but I think everyone has resolved to do it by hand. Figuring out a way to automate will be broadly useful. It’s been elusive.

I will absolutely share what we discover. I played around a little more and I did run into issues with nuclei clumping. I’m sure there is a way around that.



I bet! Feel free to post raw example images and your pipeline if you run into trouble.


Ah, I see you’ve properly started another thread for that, here: Nuclei clumping - How to resolve?


Hi @achamess

We are doing the same as you do: quantifying the co-localization in neurons of different in situ hybridization and immunohistochemistry signals in the spinal cord in mice. (Also binary, meaning a cell is either positive or negative for a certain signal. And we want to know how many cell are single/double/triple positive.) Until now we did this manually, but now I want to do it automatically with CellProfiler. Have you successfully built a pipeline for this? Would you share your pipeline?



Hi @Rdasgu
I wish I had a good solution for you. I’m sure there is one using CellProfiler, but I haven’t invested the time to really figure it out. What’s were seeking to do is so common, I’m really surprised someone hasn’t figured it out yet.

In any case, I have explored other options though that may suit your needs.

I found a program called QuPath that is very promising. Mostly, it allows one to interact with the images in ways that CellProfiler doesn’t make easy. That’s probably a reflection of the different aims. I think CellProfiler excels at high throughput automation of lots of images where you don’t really want to interact with the image. However, for our area of study, we often want to parse out regions. For example, if I wanted to separate Lamina I/II frmo Lamina III-V. QuPath has really nice ways to do that because it’s made for analysts working with pathology slides.

I started a discussion about it here on my forum:

There is talk about integrating CellProfiler with QuPath at different steps. QuPath, like CellProfiler is open source, so you can do whatever you want.

Let us know how you do in your analysis.

You may also find these discussions relevant:


Thanks a lot @achamess for the fast reply! I’ll check out QuPath and let you know


Hi guys,

If QuPath is working for you, we’re totally happy with that- we don’t believe CP needs to be the solution to EVERY problem (though it is a solution to many problems). I do want to point you at a couple of things though-

In the end though, of course you should choose what’s best for you!


Hi @bcimini
Thanks. I’m sure CP can get the job done. It’s just a matter of how much investment it takes to figure it out and ease of use.

I’m sure I’ll use CP again, but QuPath has an interface that is familiar and ease to interact with the image (for me at least).

But hopefully someone figures out (and shares) a solution to this problem in CP.


Hey, I was wondering if anyone found a good way to do this in Cell Profiler. I’m doing something similar and just started looking at Cell Profiler as a possible way to automate what I’ve been doing by hand.