-
Notifications
You must be signed in to change notification settings - Fork 112
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat add generate segmentation from dataset #153
base: master
Are you sure you want to change the base?
Conversation
…one adapter from dataset instead of images.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks reasonable to me, but I hope @JamesAPetts has a minute to look.
Thanks for this, makes sense to me! Only things I would suggest is changing the name from Also could you expose the call through here in the same way as the current two functions? You don't need to write an implementation for cornerstoneTools 3, but it'd be good to throw an error if they try to call a v3 method that doesn't exist. P.S. for readers who stumble upon this thread a year from now: |
…on in segmentation object with cornerstone version control/warning
totally agree. Done. Also @pieper & @JamesAPetts, do you think it's better to generate _meta property automatically inside this function if not defined or leave it as it is now? Impact on performance is probably negligible but would facilitate the use of the function since the lack of _meta property will not trigger an error but will produce a segmentation file without metadata. |
It's been a while since I looked, but maybe the |
Well, yes and I thinks that's the problem if the datasets have no _meta property already defined. Segmentation class extends from DerivedPixels class which in turn extends from DerivedDataset. So, the Segmentation constructor call it's superclass parent constructors where _meta property is added by assigning the input datasets _meta property to it. |
@@ -57,7 +57,8 @@ function generateSegmentationFromDatasets( | |||
inputLabelmaps3D, | |||
userOptions = {} | |||
) { | |||
//on multiframe images, datasets array contains only 1 element but should work as well | |||
//make sure _meta property is present in every element of datasets with at least an empty array | |||
datasets = datasets.map(ds => ({ ...ds, _meta: ds._meta || [] })); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi - thanks for this, I'm trying to get my head back into the details.
Wouldn't we get the same effect more generally if this line where changed to:
_meta: this.referencedDataset._meta || []
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi Pieper,
Yes, much better. Thanks
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the contribution 👍
Hello! Any update on merging this PR? I am currently trying to use dmcjs to save cornerstone-tools segmentations into a DICOM-SEG file, and am running into the same error that this PR fixes. |
In some cases cornerstone image loaders deprive _image object from data property, like reported here #144. The added function uses underlying dcmjs functionality but allow users to generate this dataset array themselves and use it to create the segmentation blob.
Dataset array can be filled with
cornerstone.metaData.get('instance', imageId)
for each image int the series.Important: each element in dataset needs a _meta property with empty array (
_meta=[]
) otherwise segmentation will be saved without any metadata