Hi, I have been using Dcm2niixPlugin to convert 4D DTI Dicom files to a 4D NIFTI file (.nii).
However, when I checked the output from the plugin’s
load(self,loadable) function, it returned a 3D volume node while it’s supposed to return a 4D volume (or a series of 3D volumes).
I tried tracing the issue and noticed that
load(self,loadable) function has a call to
slicer.util.loadVolume() at line 175.
dcm2niix command correctly produced a 4D NIFTI file, it appears that a call to the
loadVolume() has converted it to a 3D volume. According to this related post and my testing, I believe 4D NIFTI file can’t be properly loaded using
slicer.util.loadVolume(). (Please correct me if I am wrong.)
So I was wondering why we are using
slicer.util.loadVolume() instead of MultiVolumeImporter as mentioned in this post.
Any explanation would be greatly appreciated. Thank you in advance for your help!
If the plugin isn’t working for your data I’d suggest running dcm2niix independently from Slicer to confirm that your data is compatible.
There’s a nrrd export option for dcm2niix that should make the results directly compatible with SlicerDMRI. If it turns out your data isn’t compatible, the dcm2niix developer may be able to help.
Thank you @pieper for your reply.
I tried running dcm2niix independently and checked that my data is compatible. It produced a 4D .nii file.
The part that I still don’t understand from the plugin is that call to
slicer.util.loadVolume() at line 175. By any chance, do you know why it’s calling
loadVolume() instead of
MultiVolumeImporter.read4DNIfTI()? Is that a mistake or was the plugin designed to support only 3D Dicoms and not 4D dicoms?
Thank you for your help!
I think dcm2niix can create nrrd files. If you generate a 4D nrrd file then Slicer should be able to read it (just choose “Volume Sequence” in the “Description” column in “Add data” window).
If the scan is a compatible dwi scan (depends on both the scanner model and acquisition protocol) then dcm2niix can convert it to a valid nrrd file.
slicer.util.loadVolume automatically detects and loads nrrd files as scalar, vector, tensor, or dwi automatically based on the content.
Thank you for your prompt replies @lassoan & @pieper!
I followed your suggestion and changed the dcm2niixPlugin to convert it to a 4D
.nrrd file and now the
slicer.util.loadVolume() works well.
And now I would like to save the loaded 4D nrrd volume to 4D NIFTI file but
slicer.util.saveNode() doesn’t seem to allow me to do that. Is there a way I can save a 4D nrrd to a 4D NIFTI?
Not directly in Slicer but you can use this code:
Thank you @pieper! I will try using the conversion package.