dcmjs-org / dcmjs

Javascript implementation of DICOM manipulation
https://dcmjs.netlify.com/
MIT License
293 stars 112 forks source link

feat add generate segmentation from dataset #153

Open helghast79 opened 3 years ago

helghast79 commented 3 years ago

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

JamesAPetts commented 3 years ago

Thanks for this, makes sense to me!

Only things I would suggest is changing the name from generateSegmentationWithDataset to generateSegmentationFromDatasets. "From" implies input rather than an output which "with" suggests, and making datasets plural also demonstrates that it expects and array of datasets.

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: cornerstone.metaData.get('instance', imageId) is a feature within OHIF using its metadata provider, and just returns the entire naturalized DICOM jason for that imageId. Its not a "standard" feature of any cornerstone image loader.

helghast79 commented 3 years ago

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.

pieper commented 3 years ago

It's been a while since I looked, but maybe the _meta would be added by SegmentationDerivation or a superclass?

helghast79 commented 3 years ago

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.

thewildnath commented 2 years ago

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.

pieper commented 2 years ago

I haven't looked at this in a while - @swederik will you be using this for cs3D segs? Maybe @sedghi should have a look make sure it works with the new code.