Triple positives and nuclei texture


First I’d like you to know that you transformed me from a MetaMorph aficionado into a CP aficionado! I do think it is a great program, obviously developped by those who felt the pain of not being able to extract all information images can give away… However, there are couple of things I’m not sure I do right – or that I even understand. So here are my (hopefully not TOO many) questions:

The platform: CPv2 on a PC (Windows XP v5.1, soon to be changed to Windows 7 64-bit version)

The experiment: ViewRNA with 3 colors (FITC, Cy3, Cy5) + DAPI, on blood mononuclear cells. I started by using a pipeline that was already developed for this purpose, to which I did some changes:

  • PBMC are much smaller than adhered cells in culture, therefore I had to chage the parameters for IdentifySecondaryObjects, and I think the result is reasonable, but please tell me if you think there is some better approach.

  • I don’t need to separate cytoplasmic compartment so I removed this set of modules. I kept the background part (IdentifytertiaryObjects module)(I just wanted to make sure there are not big differences between images), although I don’t know if this, together with the modules for background intensity measurements, is really necessary.

  • I added the MeasureImageQuality module because I know some of the images are not perfectly crisp (not that they are not in focus, but I used a huge pinhole, to be able to see all “dots” within a cell). From next expt. on I will do z-series and use the MakeProjectin module, but I would like to know now if I can use directly images obtained with the Olympus software (FluoView) or I would have to save separately each image of each series, for each color?

  • I think the next couple of modules with which I identify the specks for each channel work reasonably well; I preferred manual background because in some I have a pretty high one(especially in green). The green (ch1) dots are the smallest, the red (ch2) are somehow biger and the cyan (ch3) are the biggest, sometimes in big clumps; (I understood that these differences are due to the specific chemistries for each color) - but this means parameters for identifying them should be a little different. Therefore please check my pipeline and advice me if you think there is a better way: I should see very few (close to zero) specks on ch 1, a little more on 2 and most on 3, but even there only in less than about 1/3 cells.

  • I am also interested in nuclei texture, but I don’t understand very well all the parameters. I tried to read more about these, but still… (I’m a cell biologist, not good backgrount in math). I kept for export those that seemed to me more significant, but I’m not sure I would know how to interpret the numbers – any suggestion?

  • The most important question: I am most interested in the double and triple positive cells. I knew how to get the % of single positives, but I just could not figure out how to get the double and especially the triple positive ones, #, %, and images as well (I did read the threads about double positives but it’s still unclear to me).

  • I observed that some of the parameters I checked for export are repeating, some even within the same file. Please help me setup the export function in a more efficient way!

  • Because the images were obtained before I knew about CP, the nomenclature is not very good to do a batch analysis, but we have too many to be able to change their names, however I would like to have all the measurement of one type within one file; is this possible? If so please help me!

Thank you very much!

ViewRNA_3Plex_LeniTest.cp (37 KB)

I think this approach is fine in lieu of a cell stain. If you want to use an automatic approach, you could use Otsu global with 3-class/foreground thresholding.

It might helpful as a quality control measure; if the background fluorescence intensity varies quite a bit from one experiment to another it might be an indication of a protocol in either staining or image acquisition.

If the Olympus can save it as a TIF rather than a OIB or OIF file (which it seems like it can), CellProfiler should be able to handle it.

Typically, I prefer to use Otsu global with 3-class/middle class set to background in order to detect punctate objects substantially above the noise, with suitable adjustment of the threshold correction factor. This maintains an automatic approach in case the absolute intensity levels vary.

The texture measures are not terribly intuitive, but here are some quotes from this webpage:

  • For a human, the texture relates mostly to a specific, spatially repetitive (micro)structure of surfaces formed by repeating a particular element or several elements in different relative spatial positions.
  • It is almost impossible to describe textures in words, although each human definition involves various informal qualitative structural features, such as fineness - coarseness, smoothness, granularity, lineation, directionality, roughness, regularity - randomness, and so on… It is difficult to use human classifications as a basis for formal definitions of image textures, because there is no obvious ways of associating these features, easily perceived by human vision, with computational models that have the goal to describe the textures.

Generally speaking, you will want to set your texture scale to the approximate distance between visual features in the cell. That is often hard to determine, so we offer the option of measuring many of them. Typically, the user will then compare the same texture measure between experiment and positive/negative controls and see which one distinguishes the phenotype the best.

You have already used RelateObjects to assign the 1F,2N, and 3K spots to the nuclei (you don’t need to assign the nuclei to the cells, btw), and now the key is using the FilterObjects module correctly. You can add multiple measurement criteria to filter objects by, in which all the criteria must be fulfilled for the object to be retained. For example, a triply-labeled object must have a child count of 1F,2N, and 3K spots all greater than 0, so you would add each of these in a single FilterObjects module. For doubly-labeled objects, you have 3 combinations: 1F-2N, 1F-3K and 2N-3K. You would need 3 FilterObjects modules to check the child count for each of these pairs, and the number of doubly-labelled objects is the sum of these three object counts (which you could compute using CalculateMath).

I’m not quite what you mean here. Can you give a more specific instance of what you are seeing?

Yes, it is possible using LoadData which takes a .csv of file and path names for analysis. You can also enter metadata to describe the type, and then enable “Group images by metadata?” in LoadData along with using metadata tokens in ExportToSpreadsheet to output images of a given type together; see the help for each of those modules for more details.

Hope this helps!

Hi Mark,

Sorry I could not answer sooner, I was ill several days. Thank you very much for your detailed response - I will try to implement the suggestions, I’m sure things will look better. Regarding the exported data, they were somewhat redundant but I fixed that in the meanwhile. Will let you know in a couple of days how it works.


Hello again!

I implemented your suggestions and it worked very well with the images I had (tons of data…)

Now I started using Z-stacks. Images were taken with Olympus (Fluoview). Each Z-series was exported as a set of tiff files, then each series for each color channel was used to build a stack, using MetaMorph. The purpose was to make a projection for each color channel (using the Maximum type, same way as the Fluoview does) and do nuclei and specks measurements on 4 channels.
I encountered several problems:

  1. If I want to load a “stk movie” type of image (since I have a MetaMorph-generated stack), I get this error:
    “Error while processing LoadImages: Image [name] has n frames, but image [same name] has 0 frames”
    The number of frames n depends on the number of stacks (if I remove one stack, then I get an n – the number of frames in that stack). The only way I can load them is using as file type “Individual images”, which doesn’t make too much sense to me, but maybe this is the correct way to do it - please let me know.

  2. When I look at the projections, no matter what method I use they look similar (I am tempted to say identical but my eyes may be wrong). Moreover, the resulting images are very blurry - I uploaded a projection image obtained in Fluoview as comparison. I guess this will affect image quality, nuclei texture analysis, as well as the ability to detect really small specks.

  3. The most important thing is that I cannot make the program recognize all specks. Now I know it cannot be perfect and I can live with it, except during the testing I found several cases where my eyes clearly see positive cells for Cy5 (in this particular image the cell in the red circle), which are not recognized as such by the program. That particular dot has a relatively high fluorescence (1782 in Fluoview; the bottom one is ~3000 and the ones above are in the range 1200-1400 – cells in the yellow circles), but that cell is not recognized as K+ (the Cy5 channel), although I can see other cells marked as K+ despite the fact that their specks have a clearly lower fluorescence intensity.

Please help me again fix these problems! I uploaded the Fluoview-generated projection, but I don’t know how to make available the 4 stacks (“The extension stk is not allowed.”). I also uploaded the best set of images from the stack, as a working example for problem #3. I will upload separately the pipeline.

Thank you,


ViewRNA_3Plex_FNK-Zseries.cp (46.9 KB)

Actually, here is the Fluoview projection.

[quote=“lenisor”]1. If I want to load a “stk movie” type of image (since I have a MetaMorph-generated stack), I get this error:
“Error while processing LoadImages: Image [name] has n frames, but image [same name] has 0 frames”[/quote]

Could you try renaming the extension from .stik to .tif and see if you are able to upload the files?

Based on your pipeline, I think the key to understanding what’s going on is that the projection is created cumulatively, which means that the final image is available only at the end of the pipeline. This means that you would need to have the MakeProjection module along with a SaveImages module to save the final projection at the end, then load that projection and analyze it in a separate pipeline.


I tried but the files are too big (13 MB each). Is there any other way I can upload? I’m afraid even for email they are too big.

Thanks a lot!

You an also provide us a link using any free cloud-based service (e.g. Dropbox, Google Drive, CloudApp, MediaFire, etc.).

Here is a link to dropbox

I’ve taken a look at the .stk files. Oddly, if I use LoadImages to load only one .stk at a time, it works, but if I load all four in one LoadImages module, it fails with the message you reported. I have filed a bug on this issue:

A workaround would be to load each .stk individually in a separate pipeline to create and save each projection. It’s definitely inconvenient, but you can use File > Run multiple pipelines to streamline the process a bit.


Our lead programmer Lee fixed this bug already! It has already compiled and the Win7-64 bit build is here.
This is the our most current revision of CP, so we can’t promise there won’t be other bugs (but it passes all our tests). And note that once you upgrade and save a pipeline, you cannot easily revert to an older version of CP. But give it a try!


Hi all,
Finally our paper was accepted in PlosOne and I’m uploading the two main pipelines that I used. They were generated with the previous CP version, but they might still be of use if anybody needs them. We looked at FSHR, Nestin and KDR in PBMCs (hence the FNK in their names); VR means ViewRNA (fluorescence in situ hybridization) and ICC means immunocitochemitry, both for the same markers (genes and proteins, respectively).

Also, since the images were obtained with Olympus and were z-stacks, while CP could not use that type of files, I used MetaMorph to generate the stacks for each color, then simple pipelines (that I did not upload) to convert these into projections (LoadImages -> MakeProjection -> SaveImages).

I’ll send you the info for the paper as soon as we have it. I have described in detail the procedures in the Methods section.

Thank you again for helping - I do love CP!
ICC-NFK.cp (67.9 KB)
VR-3Plex-FNK.cp (36.3 KB)

Congratulations on the paper! Once your paper is published, we’d like to put the pipelines here on our Published Pipelines page ( Do we have your explicit permission?
If yes, we’ll put a link to this post in the download. Please let us know any other info you think someone would need to run the pipeline effectively.