Identifying cell tight junctions and their intensities


I am working with confluent layers of human epithelial cells and am interested in characterizing the quality of their cell-cell junctions. I have several stained ZO-1 images and would like to identify these borders and have my pipeline output an intensity reading as a function of cell-edge distance. In other words, I would like to individually identify the borders around each cell and see how the intensity varies along that border. Is this possible to do with CellProfiler?
So far, my pipline (attached) uses the maskimage and correctilluminationcalc functions to identify my cell bodies and it (for the most part) correctly identifies the cells by their corresponding junctions. I am not sure what to do from here.

I’ve also attached an image of the ZO-1 staining.
Thank you so much for your help–it is really appreciated.

Cell_identify with masking .cp (8.17 KB)

Hi Else,

Good job on the pipeline, it appears to work well!

My suggestion would be to either use MeasureObjectIntensity on the Fibril objects and then examine the value of the edge measurements (IntegratedIntensityEdge, MeanIntensityEdge, StdIntensityEdge, MaxIntensityEdge, MinIntensityEdge) for each fibril. However, my suspicion is that the fibril borders may not extend far enough to the boundary to get a good reading; they’re close but perhaps a few pixels short due to thresholding.

So in this case, you might be well served by using IdentifySecondaryObjects on the original image and use the fibrils as input. That way, your new objects will touch and therefore fully cover the bright edge pixels. Then use MeasureObjectIntensity to make your measurements. You also may be able to play further tricks with ExpandOrShrinkObjects to fine-tune how much of the edge each fibril covers.


Hi Mark,

Thank you so much for your reply–it was very helpful! I didn’t realize there was a module to shrink/expand objects, so that has been useful. After implementing your suggestions, I just have a few technical questions.

  1. Is there a way to have the MeasureObjectIntensity module recognize the ‘edge’ of the object as being wider than just one pixel?
  2. Can I program a module to output the number of edge pixels above or below a certain intensity value? (different from LowerQuartileIntensity)
  3. Can I also program a module to normalize the IntegratedIntensityEdge value with the object perimeter?

Basically, I would like to get a better understanding of the intensity continuity around the edge of each object.

I hope these questions aren’t too confusing.

Thanks again for your help, Mark!


You can use the CalculateMath module to divide the per-object IntegratedIntensityEdge by the perimeter computed by the MeasureObjectSizeShape module.


Hello, I am looking at Junctional staining of Epithelial and endothelial cells with ZO-1 and CD31. I was trying to look at just overall intensity on the junctions, to compare between treatment groups but my pipeline isn’t detecting the junctions, just the overall area, which it’s not doing very well at either. I’ve tried changing the threshold and just can’t get it to work. Is this pipeline able to do this?


Hi Ryan,

Can you provide to us some example images so we can address your issue better?