Waehlby splitting in 3d segmentation

Hi folks,
I am trying to use KNIME to segment confocal images of tissue sections containing densely packed nuclei (retinas). In the past, I have used Bitplane Imaris to do so. Imaris’ “Surfaces” segmentation tool works very well in this context- I believe it uses something very similar to the Waehlby algorithm in KNIME, with seeded watershed region growing followed by clump splitting based on size/shape. I would like to replace my Imaris workflow entirely with KNIME, since KNIME is so much more flexible.

I have several questions regarding the KNIME implementation:

  1. Is there some particular reason the Waehlby algorithm only available in 2 dimensions? The paper implements it in 3d without much ado- normalisation for z attenuation and rescaling to correct for acubic voxels. I don’t have any meaningful experience with Java and wasn’t able to see anything in the node code that would explain the limitation.

  2. Is there a straightforward way to implement the z attenuation adjustment in KNIME? The Waehlby paper thresholds each plane and fits a line to the average signal through the z-stack, then performs a multiplicative adjustment to the original image. I couldn’t figure out how to extract average signal values from images in KNIME- should I be looking to write a python script to do this?

  3. Imaris can output segmentation results in the form of arrays of voxels occupied by each object. It would be useful to import these data as labels in KNIME (to compare with whatever workflow I end up with, or as a backup in case I can’t get the Waehlby stuff to work adequately). Any suggestions for how such importation might be accomplished?

Many thanks for your time!

1 Like

Dear @mattocks,

Sorry that this has been sitting for so long!

I don’t think there is. It just never has been implemented and/or tested for n-dimensional inputs…

In general, you can use the Image Features nodes to compute aggregate values for a complete image. In this case, you’d have to activate First order statistics and select Mean (where the values for the computation are the intensity values from the image). For a stack, however, you’d compute the average intensity for all slices. You can use a Slice Loop Start (setting the dimensions to X and Y), Image Features, and Loop End node to compute the average value per slice and create a table afterwards (that’s what the Loop End does automatically).

Would it be possible for you to provide such a file so that we can take a look?