Local minimum diameter/chord length and objects

I’m trying to measure the local minimum chord length/diameter denoted in the attached image as a red arrow. Initially, I thought that MinFeretDiameter would accomplish this, but it only returns the diameter of one of the individual circles because that is the smallest diameter as measured by calipers. Any thoughts as to how I could go about doing this with CellProfiler?

Also, I’m trying to exclude certain identified objects from the initial image in a series of timelapse images using EditObjectsManually and then obtain measurements from only the retained objects for the remainder of the images in the timelapse without having to keep manually editing the objects for each image in the timelapse, i.e. only use EditObjectsManually for the first image in the timelapse and have it “remember” which objects were removed for subsequent images. Is that possible?


As you’ve surmised, CellProfiler doesn’t measure chord length (which can be challenging; see here: sympatec.com/EN/ImageAnalys … ntals.html). But here’s a approach that might work:
IdentifyPrimary to identify the objects. Declump using “Shape” for the method and “Shape” for the dividing lines. - ExpandOrShrinkObjects using “Add partial dividing lines between objects” as the operation.

  • IdentifyTertiary using the primary objects as the larger objects, and the divided objects as the smaller ones. Be sure to select “No” for “Shrink smaller object prior to subtraction.”
  • ReassignObjectNumbers to take these two adjacent objects and unify them into one object.
  • ExpandOrShrinkObjects with the unified object as input and “Skeletonize each object” as the operation, to produce a line segment one pixel wide.
  • MeasureObjectAreaShape to measure the morphology of the skeleton.

The area or the max feret diameter of the final line segment would be the length (approximately).

Unfortunately, there’s no way to have the module only be active for only the 1st frame. However, what you could do is have a separate pipeline create a mask for the 1st frame of all the movies you want analyzed, and save them as separate files. Then, in the tracking pipeline, load the masking image, and apply them per-frame for the respective movies using MaskImage or similar.