Operating system: Mac OS 10.13
Slicer version: 4.11.20200930
Expected behavior: separate segmented volume in two segmented volume by a curved plane (drawn by markup points)
I am nuclear medicine physician and I am interested in quantification in nuclear medicine imaging.
For instance, I use Chest Imaging Platform (CIP) extension for interactive lung lobe segmentation.
=> I would like to do the same in liver imaging ie create segmentation in abdominal injected CT based on markup points.
how can I get a curved plane from the markup points (like in CIP extension) ?
how can I use such a curved plan to separate the pre-segmented whole liver in segments ? For instance I would like to, first, segment the whole liver (threshold +/- growing seeds) and then separate the left/right liver with a curved plane from markup points. Then I could again separate the different segments (1 to 8) with the same method (markup points that delimit a curved plane).
Thank you for your help,
You can create curved surfaces driven by control points using Surface Cut effect in Segment Editor (provided by SegmentEditorExtraEffects extension). If you want to specify more concave surfaces then you may generate a model using MarkupsToModel extension (with Convexity>0 and Force convex output disabled) and import the resulting surface in to segmentation. These tools have been used successfully to split the liver into segments.
@RafaelPalomar is currently working on a new curved markups plane type for liver resections, which might be also useful for you.
Thank you very much for your response.
I apologize because I forgot to ask how to draw a curved plane from markup points in different slice levels ie 2-3 points at the top of the liver (red view), 2-3 points at another z level (still red view but another slice). By the way, how a plane can split a segmented volume in two parts.
I installed the SegmentEitorExtraEffects extension that gives really cool extension : thank you so much for improving this powerful tool.
For the first question is this something like what you are building @RafaelPalomar ?
Regarding your second question, that’s a mode I also want to implement for a PET project I’m involved with. Probably it can just be a simple segment editor effect that would be used as follows: use the Paint (or any tool) to draw anything that is possibly lesion and then the effect would calculate the max value of the background in that segment and then only keep the places where the background are 41% of that max. I’m not sure when I get around to it, but I will probably add it to the PETIndiC extension. As part of that I’ll also try to fix up some of the PET-related extensions that aren’t building with the current preview version of Slicer.
We developed the “Surface cut” effect for segmenting liver segments. The effect is available in SegmentEditorExtraEffects extension.
If you want to do this to avoid relying on absolute density values, then you may be much better off with other tools that rely on intensity differences, such as Grow from seeds, Fast marching, or Watershed.
If you are sure that going with a fixed threshold value is the best then there are some tools that you can leverage. First of all, maximum value is very sensitive - a single noisy voxel can cause large error, so you want to work with the entire histogram.
There are 10 automatic threshold computation methods in Threshold effect / Automatic threshold, which uses the entire histogram.
You can also compute a local histogram by drawing a region in any of the slice views. It automatically extracts the histogram’s lower/upper bound and average and you can set the threshold range based on these values. If you confirm on a number of examples that instead of using the lower/upper/average, something like a specific percentile, or percentage of maximum (more robustly: 95th percentile), or something similar work better then we can add such an option there.
I agree with the issues you pointed out, that SUVmax can be noisy and that a global threshold may be more robust, but I’ve been told that the 41% of local SUVmax is common in the clinical literature so we should at least support and make it easy to use. It may get surpassed by other measures when more evidence is accumulated. Global methods are complicated in PET because of non-disease related metabolism.
I see. If there are commonly used clinical methods then they need to be implemented as they are, because there may be decades of accumulated data and experience using that specific metric.
How the region is specified for the local maximum computation? Is it the local maximum value in the selected 3D blob? If yes, then I agree that it is a very specific algorithm that is probably the best to implent in a PET extension.
The way it was described to me, the radiologist drags out a rectangular ROI in the slice that looks hottest and gets the max from that and then that is used to get the 41% cutoff for that lesion. Sometimes people might use SUVpeak, which is like a top percentile or similar to minimize the effect of noise.
For Slicer I was imagining the workflow being something like overpainting the suspected lesion segment and then applying the threshold operation based on the data in that segment (in 3D).
In this use case the challenge apparently is that lesions are typically very hot in the baseline scans but become harder to distinguish as they respond to therapy.
In any case I’ll go through all the PET-related extensions to get them building on the preview release. From a first look it shouldn’t be too hard.
That is exactly what we’re doing in clinical use : drag a ROI (spherical for instance, but the paint effect could also be used) and then get the 41% (or another value, typically 40 to 43 % based on old studies) maximum value threshold (based on the SUV or from native series as computing SUV from native series is linear). I agree that this is not a very powerful way to get a segmentation but this a classical way in nuclear medicine (PET imaging, with hot spots). Also, the Metabolic Tumor Volume (MTV), ie the volume based on this segmentation is a parameter used in therapeutic essais (Lymphoma for instance).
Also, we use this relative threshold in order to make segmentation on PET metabolic imaging and then we send the segmentation to our radiotherapeute (rtstruct) before radiotherapie : the segmentation is called BTV (biological target volume).
Tell me if I can do something (test), comparison / validation with clinical software or whatever.
Great! This is almost the same that is already implemented in Threshold effect’s “Local histogram” section. The only missing feature is to choose a percentile value (currently, you can choose the threshold to be at the global minimum/maximum, local minimum/maximum, or local average, but not at a specific percentage).
Moreover, there is an even better tool that you can use, the Local threshold effect. You just specify how you want to set the threshold (e.g., 43th percentile to maximum; in the example video below it will be still just average to maximum, because the percentile option does not exist yet), click-and-drag in the image to draw the ROI, and then Ctrl-click to add a segment at that position:
Hello. This is similar to what I’m currently working on, but not exactly the same use case. If I understood correctly, @hubelef you would like to obtain the Couinaud division of the liver using curved planes? We are working on a curved plane for planning liver resections. The difference is that we don’t manage interactions between resection curved planes (e.g., intersections and differences) that you would need in your approach. We want to tackle segments classification based on classification of portal vein models which should be more precise and less tedious; but this will come after we implement the resection.
Our plan is to release a Slicer Extension for this, but can’t say yet when this would be available.