-
-
Notifications
You must be signed in to change notification settings - Fork 697
BUG: Fix case where DICOM series order has negative spacing #5357
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
base: master
Are you sure you want to change the base?
BUG: Fix case where DICOM series order has negative spacing #5357
Conversation
relates to SimpleITK/SimpleITK#2292 |
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 good after a quick look.
0ba9197
to
cb4f83f
Compare
I update the test case to use the sample MRI series in ITK test data, and use the ReverseOrder flag. The test is compare the pixel values at the physical locations match. |
Maybe we could have both of those tests? |
The DICOM tags were not correct in the prior example test case where the DICOM files were manually created. And oddly the X,Y spacing was being swapped for some reason likely related to the TAGs. Also this test case for the file has a non identify cosine matrix, which helps verifies the correct column was multiplied and not a row by -1. |
Thanks @blowekamp I'm just trying to understand the issue. It reminds me of an ITKElastix issue reported by @thewtex: Which appeared related to ITK/Modules/IO/ImageBase/include/itkImageFileReader.hxx Lines 222 to 235 in b375cef
|
The original issue was reported in SimpleITK here: The cause appeared to be that the z-slice direction was negative. This was more easily reproduce by enabling the "ReverseOrder" flag. It may very well be likely related to this change too: ITK/Modules/IO/ImageBase/include/itkImageFileReader.hxx Lines 222 to 235 in b375cef
It's not clear to me if the original DICOM reported in SimpleITK had negative spacing. The "ReverseOrder" reproduction of the issue, has negative inter-slice distance. There is certainly areas that need further investigation. The principle used in the test, that for DICOM if the "reverse order" flag is set then the physical location of the voxel should be maintained, should be correct. But DICOM is complicated. |
For the the change related to SpacingBetweenSlices s. DICOM doesn't force any order of slices. For classic series it is easy to sort files (ascending along slice normal, if IPP/IOP are available). This is done in itkGDCMSeriesFileNames.cxx. For enhanced multi-frame instances is it not really done in GDCM, but if the order is descending (very very often) GDCM returns negative spacing and the code in itkImageFileReader.hxx (posted above) is triggered and so far the image is correct, but has left-handed matrix. P.S. I don't use this stuff in my app, so it is just FYI. |
@N-Dekker To demonstrate how GDCM returns negative spacing and the code in itkImageFileReader.hxx is triggered: The test file can be e.g. this one, used for regular testing. Add e.g. or it is possible to load the file, save as MHA and look at the line Edit: I mean at least in this particular case this code in itkImageFileReader.hxx does a good job, even it is somehow simplified approach and left-handed matrix can cause issues. BTW, there is no guarantee that frames in enhanced multi-frame are sorted at all, but in most cases they are sorted, either ascending or descending. And there are really complex cases, like multiple stacks, time frames, etc., where the naive approach can't work. To proper handle complex enhanced multi-frame: usage of the Multi-frame Dimension Module and knowledge about every frame and the ability to sort frames, if required. Edit: BTW, I don't know, is this negative spacing here expected by GDCM or not, but surprisingly together with the code in itkImageFileReader.hxx it seems to work. But again, I don't use all of this and don't really care about, it is just FYI. Edit: another multi-frame test file Edit: S. this post (D. Clunie) with examples of intentionally randomized frames in enhanced multi-frame for testing, if interested. Not supported by GetSpacingValueFromSequence, of course. Edit: for completeness, this file is an example there negative SpacingBetweenSlices is valid. It is only (!) applicable to NM Reconstruction Module, "The sign of the Spacing Between Slices (0018,0088) determines the direction of stacking" |
If the spacing between slices is negative, then direction cosine matrix was not correct with reguards to the sign.
cb4f83f
to
d46d322
Compare
If the spacing between slices is negative, then direction cosine matrix was not correct with reguards to the sign.
PR Checklist
Refer to the ITK Software Guide for
further development details if necessary.