dgobbi / vtk-dicom

A set of classes for using DICOM in VTK.
BSD 3-Clause "New" or "Revised" License
259 stars 94 forks source link

Dealing with RescaleSlope in MRI #200

Open dgobbi opened 4 years ago

dgobbi commented 4 years ago

The modality LUT is not part of the MR IOD, but some manufacturers (e.g. Philips) include RescaleSlope and RescaleIntercept in quantitative MR images. Their purpose is not to add a modality LUT, but rather to achieve something similar to real-world value mapping. In other words, the RescaleSlope and RescaleIntercept in these images is not intended to be part of the display pipeline, and the VOI LUT applies directly to the stored values. This is different from CT, where the VOI LUT applies to the modality values (i.e. after rescale).

More info can be found by searching comp.protocols.dicom.

The issue here is that vtkDICOMReader is intended to produce modality values. This means that it should apply Rescale to PET and CT but not to MR (since the stored values are modality values for MR). For MR, rescaling should be done separately by vtkDICOMApplyRescale (which uses RWVM if present, otherwise it uses RescaleSlope and RescaleIntercept).

Currently, it is the responsibility of the user to call reader->AutoRescaleOff() for MR images with RescaleSlope. Following the standard, rescaling should always be off for MR (and all other modalities where it isn't in the IOD).

dgobbi commented 4 years ago

There is an issue here for PET, as well. In PET, the VOI LUT applies to stored values (though this is reported to be inconsistent). However, rescaling must be done with PET since each slice generally has different rescale values (and a different VOI LUT).

For PET, it seems that the display pipeline should ignore the VOI LUT unless it can be made consistent across the image series (e.g. by rescaling the LUT for each image). This is currently beyond the scope of vtk-dicom.