How to segment single molecule RNA fish diffraction-limited spots in FIJI?

Hi everyone!

I am trying to segment single molecule RNA fish spots in fixed mammalian cell lines. Here’s an example of a processed z-projected image:

My goal is to be able to count spots per cell based on a cell membrane marker or DIC and also measure their fluorescence in case I eventually have to filter out dimmer spots. My problem is that my RNA spot segmentation is not very good, so I wanted to know if anyone had a suggestion on how to improve it.

I use the Stellaris RNA FISH system that consist of 48 fluorescently labeled nucleotide probes that target a specific mRNA molecule. For imaging, I obtain a z-stack of approximately 20 planes with a 0.3 um step and using a 63X 1.25 NA objective. The single molecules are readily detectable as diffraction limited spots.

My pipeline so far has been the following:
First, I create the ROIs/labelled mask of the entire cells based on membrane fluorescence or DIC (either manually: rois + connected components tool to label them or with the morphological segmentation plugin of morpholibJ).

Then, for the RNA image, I apply a Laplacian of Gaussian filter on the RNA spots which cleans the image very well while preserving the spots (FeatureJ Laplacian), then invert the results and then Z-project it. Then, I make a binary mask of the spots using an intensity threshold and then use the analyze particles tool to add them to the ROI manager (filtering them by size and circularity). I can later assign each specific spot to a cell based on the cell labels (multiplication of the RNA binary mask by the labeled mask cells image), which allows me to eventually generate tables that I can later analyze in R.

Although the results I get with this strategy are not that bad, I think there should be something better. The problem is that since the spots are very close together, the intensity threshold segmentation often merges several spots together and also it doesn’t take into account the 3D shape of the RNA spots. Applying a watershed on the binary mask does not improve the results. I am curious whether there is a tool in Fiji that could be better than just an intensity threshold.

There is a Matlab tool to perform this kind of analysis that takes into account the shape of the spots, but it is not that easy to use and I would prefer to perform all the analysis in Fiji and R.

I am quite new to all these processing, so I would really appreciate if anyone could give any suggestion.This text will be hidden

In case it is useful, in the following link I put an example of a raw image stack of DAPI and the smFISH:

Thanks a lot!!

Maybe one of the localization microscopy tools in FIJI would be helpful here? ThunderSTORM for example is designed to identify spots in images.

Thanks a lot for the info Hazen! I will check it out. In the mean time, I found that the Trackmate plugin, which I didn’t know, works incredibly well in finding the spots. I can tune a lot the detection parameters, and I can later export all their info:

Thanks again!


Glad I could help with your cp problem. Mind if I ask how you got the image to look as good as the above? I downloaded the confocal stack image and tied the “FeatureJ Laplacian” imagej plugin, but couldn’t get it to look like the image like the ‘processed z projection’ image above. -John

Hi John!

Yes, below I recorded the FIJI steps. What I do is splitting the channels, performing the FeatureJ Laplacian, inverting the whole stack, Z-Projecting, adjusting the levels and then turn the image from 32 to 16 bits. Regarding DAPI, I decided to choose only one of the slices, since the Z-projection in this channel would bring up the blured extreemes of the stack. And that is it.

It is important to note that the FeatureJ laplacian, by applying the Laplacian of Log (LoG) transformation is actually changing the pixel values, so I it wouldn’t be correct to measure the spot intensity after this “procedure”, although the image looks good for a presentation.

I am quite new to image processing, I originally measured the intensity in this transformed image and later realized that it is not OK. What I think it is the correct way to go to make the measurements is to actually analyze the original RNA image with Trackmate, which also applies a LoG behind the scenes to make the segmentation. I did this in the projected Z-stack of the RNA image and I think it does an excellent job.

Hope that helps, let me know otherwise !
Good luck

run(“Split Channels”);
run(“FeatureJ Laplacian”, “compute smoothing=1.0”); // on the RNA image
run(“Invert”, “stack”);
run(“Z Project…”, “projection=[Max Intensity]”);
run(“Enhance Contrast”, “saturated=0.35”);
setOption(“ScaleConversions”, true);
run(“Duplicate…”, " ");
run(“Merge Channels…”, “c6=DAPI-FINAL c7=RNA-FINAL create keep”);
rename(“FINAL IMAGE”);