Quantification of fluorescence in 3D spheroids

Hello there,

I’m trying to analyze my 3D spheroids embedded in two different matrices on fluorescence intensity. Since I’ve got 3D stacks of my spheroids, I’m not quite sure how to proceed in this. The idea is two compare the intensities based on the different matrices. Since those spheroids are in a kind of “pancake” shape which gets flatter on outside. Therefore the intensities will change based on the “thickness”.I thought about merging the stacks and just quantify the way you would do with usual 2D images.
This is the first time I’ve done CLSM, so I’m not quite sure how to make up an analysis pipeline for my experiment - hope somebody could give me some hints.

Much appreciate any help!

Are you able to share an example image?? Are the two different matrices in the same image?? Or in different images??

I’ll try to find one example as soon as i can.
There are two different matrices in two different images - so it’s the same approach in analysis for each matrix. I’m just trying to figure out how to tackle the thickness problem.

On the left you can see the merged zstack of the protein. On the right it’ just one slice for DAPI.

The idea behind it is to see if the expression of the protein of the migrating cells (on the outer edges of the spheroid) is changed based on different matrices. I kind of don’t really know why there a dim center in the zstacks as well…

1 Like

Have you tried 3D object counter on the full stack?? https://imagej.net/3D_Objects_Counter. If not I’d recommend looking into it. If you have already tried it, and there is a reason it won’t work for your data perhaps a customize script (for example in imagej-ops) would be needed.

As a disclaimer I have not used 3D Objects Counter much. If I have to do object counting I have a couple of template scripts/plugins written in Imagej-ops to do it. However if you are not used to scripting then I’d start with 3D Objects Counter, then only move to a custom solution if existing plugins won’t do the job.

This may all be information you know well already but…

Depending on the degree of change you see or expect to see (as most things do!), I also want to point out that orientation and depth of embedding can have significant effects on these measurements. So a lot of repeats of samples should be used as you will likely see quite a bit of variation even within a single sample type (luckily, large numbers are usually an advantage to spheroids).

How consistent you can be with your embedding protocol will have a strong influence on the variability of your data, and if you have a range-finder on your microscope to find the coverslip/bottom of plate, you might want to keep track of how far your spheroids are from that surface.

1 Like

This is common in dense spheroids, and is cell type dependent. I see it less often in neural cells, and more often in solid tumor models. Sometimes it is due to lack of dye penetration, while in others it is due to necrosis in the center (lack of nutrients?), and in others still the density is too high and variable for the escaping light to accurately reach the pinhole (imagine hundreds of RI changes, objects causing diffraction, etc.). 2P scanning can sometimes help. Other times you might need to fix and slice to be sure of what is in the center.

Since you mention DAPI, I am going to assume these are fixed and not live, so I would guess it is the cell density rather than other effects, but I am not 100% sure :slight_smile:

One last thing to consider when quantifying. You say “merged Z stack” which I am guessing is a maximum intensity projection.
Don’t mind the crappy arrow, but if you think about your measurements if you were scanning from the direction of the arrow, you would only see the bright center and ignore all of the depth of the less intense material around it, since it only returns the brightest pixel in a line of pixels.
You also probably lose ALL of the measurements on the far side. Though, if you have a high resolution image of both the top and bottom of your spheroids, I would love to hear how :slight_smile: (aside from physically flipping them. maybe between two coverslips? I am also disregarding lightsheet here since that wasn’t brought up).

It sounds like you are trying to avoid 2D measurements, and I think that is a good idea, but if you do go the 2D route, be careful of what exactly you are measuring and where! Fun experiment.

1 Like

No, I have not, I will definetely look into it!

Yes, those are PFA-fixed cells on ibidi’s µ-Slides.

That’s correct, it’s an maximum intensity projection. Probably would be better to use SUM instead…

I think i don’t really get it.

I just have the “first” and the “last” slice of the z-stack, so that would be technically the top and the bottom of the spheroid, right?

The problem is, I don’t really know how to analyze my pictures at all, since it’s the first time I did something like this. Any ideas of how to do it? Is it possible to proceed like that?

I just came up with another question based on this post from @romainGuiet . How can I make sure no to introduce bias, since my POI-channel is the only one i have got (besides DAPI)?

I haven’t seen the data so I am not sure, but I have a feeling the “last” slice of your Z stack would be very difficult to use well. With the center of your spheroid likely not passing light accurately, plus depth decay, you will likely find a lot of variability in that measurement due to variations in spheroid size.

Some of the answers will depend on more specifically what your question is. Should the value you detect go up if there is more volume in the external areas (showing greater expansion)? This would be similar to CTFC, except for the whole, or some defined part of, the spheroid.

Should the value be the same no matter what the volume as long as the amount of protein per cell is the same? How heavily influenced do you want to allow the measurement to be by the morphology of the spheroid (as all spheroids are not spherical. Or even most of them usually.) This measurement would ideally be a bunch of CTFC measurements, or a mean area intensity of some sort.

You mostly can’t, as DAPI itself tends to be very… variable. Or at least it has been in the hands of the people I have seen imaging. The closest I could think of right off was my mention of using the depth TO the spheroid, which may influence the measurements.

If you consistently have a solid core (ok, solid sphere with an empty core? spherical doughnut?), you might be able to segment that dense DAPI signal as a single object, and then measure the intensity in your other channel Xum away in all outward directions. Something like create the mask in analyze particles after processing, fill the hole, save that ROI, Dilate a certain amount, measure the fluorescence in that Dilated area.

This would have upsides and downsides. Upside, no need for bias in the segmentation of your green signal as that would only be measured a certain distance from your DAPI core. Downside, your bias might come from how far from the core you decide to measure, where you take the measurement (Z heights), and whether that expansion ever extends out into “empty” matrix thus reducing the mean intensity. Median might be another option as a measurement, but that no longer estimates the protein content.

If you can define the problem more precisely, someone might be able to help further :slight_smile:

*Actually, rereading, I see that you said “expression level.” So any of the methods that gets you a mean intensity within an area should work, though if your spheroids are too dense, I would recommend limiting your measurements to the bottom of the spheroid. If there are enough cells at the bottom to generate a data set, you might be able to expand (dilate) on the nuclei there to generate measurements without specifically thresholding based on the green channel. I’m sure it can be done in ImageJ/FIJI, CellProfiler, etc, but I only have done it in QuPath. If you have enough slices in your Zstack to generate a full 3D image of the bottom of the spheroid (many slices per cell), you might be able to get data from that as well.

First of all, thank you guys very much for taking the time to tackle my problem.

In a nutshell: I want to look at the protein expression based on different matrices.