Yeast nuclei colocalization

I am trying to construct a pipeline to compare staining of yeast cells.
This is the experiment as I understand it.
I have yeast cells grown under 2 stress conditions (salt/no salt).

I have been given 4 images all in color that I convert to grayscale:
a white field image
a blue DAPI stained image as a control for nuclear staining.
a red image which is a transcription factor tagged with mCherry
a green image with a transcription factor tagged with GFP

I need to figure out:

  1. What fraction of cells have a nuclear signal?
  2. What are the distribution of nuclear fluorescence values for stained nuclei?
  3. When either of the transcription factors are in the nucleus, what fraction
    of the time are both transcription factors in the nucleus?

I have attached the images and my pipeline.

I see on the forum that one is supposed to ID the nuclei first,
I have managed to do that, but I am having issues with getting
good cell identification, there are more cells divisions than expected.

How can I go from identifying nuclei to getting good cell id?
I switched to manual for the the first nuclei because I was unable
to get the auto methods to work.

I have looked at and tried several of the pipelines listed on the
forum and tried some of the tutorials. I find them confusing,
is seems there are so many options and everyone does something
a bit differently. I have attached my latest pipeline
the images are available via box at:

https://uwmadison.app.box.com/s/jpe1s7tdch79yvfhw85tgcg4mrs6p097

MyTest-Pipeline.cppipe (60.7 KB)

Welcome to the forum! Hopefully someone will have suggestions for you soon.

Note this post is a repeat of this one: Yeast Cell & nuclei id, DAPI, mCherry, GFP

Yes, I am sorry about the double post, never got a response for the 1st post
and I am unsure of where to go for help.

Thank you

Hi there,
Ok, I hope I can get you going here!

I fixed up your pipeline a bit as follows:

  1. removed ApplyThreshold modules. These are unnecessary and in fact confuse the module that does the real work: IdentifyPrimaryObjects.
  2. Adjusted the settings in the first IdentifyPrimaryObjects - what was happening is that most of your objects were being excluded because they are too large! The module was thinking you were looking for the entire yeast cell, not just the brighter nucleus within it (which I assume is what you want to look for - LMK if that’s not the case!) Thus everything outlined in pink in this module was a large object being discarded. To avoid getting confused by this in the future you can uncheck the setting to discard objects outside the size range- that way it’s easier to see what’s actually happening and once things look pretty decent you can turn the size exclusion back on.
  3. Adjusted IdentifySecondary. Both here and in (2) one major thing I changed is to use three-class thresholding. The module identifies three classes (background, yeast cell staining, yeast nucleus staining). In IdPrimary you want the middle class to be background and here in IdSecondary you want the middle class to be foreground.

I didn’t do anything beyond those modules but hopefully this gets you within range you can start tweaking on your own.

There might be some additional things to try:

  1. I believe it is a nice strategy that can work very well in a case like yours where the background of each cell varies so the nucleus can be difficult to detect above that background. Here is what you do: try CorrectIlluminationCalculate on an “each-image” basis to basically try to ‘subtract’ the cell body staining from each cell prior to finding the nucleus. This might help if run before IdPrimary.
  2. Or maybe just running conventional illumination correction would help - if you can white reference your images using a control image acquired on your scope that would help, or if you collect a large number of images then you can add them all together and smooth to create the illumination correction function.

Let us know how it goes!

MyTest-Pipeline_AEC.cppipe (52.5 KB)

Thank you very much, I will give it a go.

1 Like

Thank you for the help. This didn’t quite give me what I wanted, many of the primary objects appear to be whole cells. I need to identify the tiny bright spots in the image, as they are the nuclei. I realize they are just a little bit brighter than the cytosol. The secondary objects clump together to much, multiple cells are called as a single cell, also some cells are broken up into several cells.

Since I have 3 images, is it possible for me to use the first image (say the dapi one) as a template or grid
for the other images and attempt to identify the nuclei & cells found in the first image in the other 2 images.
I am unsure what to call this process?

Any ideas would be appreciated.
Thanks again for the help and the software, its great.

Indeed, you would identify the cells using the DAPI image (I did that in the attached new pipeline; seems to work beautifully), then follow with another IdentifyPrimaryObject module to identify the nuclei - the key change would be to use Threshold Strategy: Per Object to find the nuclei - this allows a different threshold for each nucleus and accounts therefore for different brightness in each. Because sometimes multiple “chunks” of nucleus are found in each cell, we need to then unify them, using RelateObjects followed by ReassignObjectNumbers.

There is a gradient of intensity across the image so you will get better results if you can fix that at the acquisition stage. As a temporary fix, I’ve added illumination correction to the pipeline BUT the results will be much better if fixed at acquisition or at the least if you calculate the illumination correction function based on a large number of images (see examples/tutorials on cellprofiler.org and read the help for illum correction to learn more). As such, you will see the current illumination correction overcompensates: the original image is brighter towards the top left and goes down from there; the corrected image is dimmer towards the top left and goes up from there! I didn’t futz around with this much because as I said alternate methods of correction will be better. The cell outlines look great but for now you will have to ignore the fact that the nucleus identification looks worse towards the bottom right (I left this using the uncorrected DAPI image for now but you hopefully can adjust to use a nicely corrected image later).

I didn’t fix anything downstream in the pipeline, after Reassign so you will want to fix and triple check all that (e.g. outlines are not the right ones, etc.)

Jane in our lab also took a crack at this using a strategy employing the EnhanceSpeckles module to enhance the nuclei. I’m also attaching that strategy in case you want to play around with that too.

I am attaching some results. Hopefully this gets you on the right track!

EnhanceSpeckles.cppipe (56.4 KB)
PerObject.cppipe (55.5 KB)

That is beautiful, thank you so much.

1 Like

Thanks again for the help. I am posting my new pipeline for anyone that is interested.
PerObject.cppipe (49.1 KB)

1 Like

I need to make some modifications to my pipeline. I would like to create a template of cells from my 1st image (DAPI)
and use that as the only area of interest in the following images. I have tried using the ideas posted : Analyze different images using the same ROIs?
It appears that my DAPI_CELL_MASK is just a black image, and I am not sure why?

I have one pipeline create_DAPI_CELL_MASK.cppipe, where I find my DAPI cells and convert the objects to a uint16
image and save the image. In the Find_CELLS_NUCLEI_USING_MASK pipeline I import that as a stand alone
image. I then use it as a masking object, but when I identify my GFP cells I get more cells than in the original
DAPI image.

I want to only consider the DAPI cell outlines for my GFP and Cherry image analysis.
I am not sure I understand what maskimage does, I assumed it meant only the objects created
would be used in the follow on tasks? I don’t really want to ID new objects in the GFP and Cherry images.
But use only the DAPI identified regions to count the nuclei and get the image intensity values for the nuclei
and cytoplasm. Is this possible?

My pipelines are listed below. Created with the help of the CP team.
My images are located here: https://uwmadison.box.com/s/jpe1s7tdch79yvfhw85tgcg4mrs6p097

create_DAPI_CELL_MASK.cppipe (9.9 KB)
Find_CELLS_NUCLEI_USING_MASK.cppipe (41.6 KB)

Thanks again for the nice software and the help.

I think rather than trying to identify nuclei in every channel, a much cleaner thing would be to
-Mask your DAPI image using the cell mask;
-Use IdentifyPrimaryObjects to find the nuclei in the masked DAPI image,
-Use the ReassignObjectNumbers “per parent” option on the nuclei
-Use IdentifyTertiary to subtract your nuclei from your cells to get Cytoplasm objects

Then you can use a combination of MeasureObjectIntensity modules, FilterObject modules (to get only GFP+ or mCherry+ nuclei; these will allow you to filter the Cells and Cytoplasm at the same time as the nuclei so that you can look at ratios only in cells with GFP+ nuclei, for instance), and CalculateMath modules to create all your different subgroups and calcuate whatever ratios you need.

Good luck!

Thank you for the reply. I have a pipeline that more or less does that. I added an alignment step. Here is my pipeline:

Find_cells_nuclei_using_DAPI_image.cppipe (31.9 KB)

I do not have channels, I actually have 3 images which is why I assumed I needed to align them.

I am having a very strange problem. I created the above pipeline, but when I load new images they are not being used?
The original test images are being used instead. When I click on the images module and load images the click the image
I see the image I want to analyze but when I step through the pipeline I see my test image? Any suggestions would be greatly appreciated.

Sorry I figured it out, I was loading a single image and not changing the file, duh!