Page MenuHomePhabricator

Relax DicomSeriesReader, verify its results more (support basic NM,CR,DX,SC files)
Closed, ResolvedPublic

Description

DicomSeriesReader uses ITK's ImageSeriesReader and GDCM to load DICOM images. Both libraries and DicomSeriesReader's code interpret spacing information.

  1. It should be clearly documented, how things are processed and DicomSeriesReader should perform some basic checks after loading to make sure we got everything right.

1.5. DicomSeriesReader should be more relaxed about missing information and properly process most CR/DX/SC/NM files (except multi-frame versions).

  1. Whenever some library makes default assumptions because information is missing in DICOM files, the resulting images should be marked for applications as "missing some information, measurements questionable/impossible"
  1. The GetSeries(..) methods should return some more informative data structure, which distinguishes loadable and non-loadable files with more clear information. This supports helpful feedback in applications.

Event Timeline

(In reply to comment #1)

1.5. DicomSeriesReader should be more relaxed about missing information and
properly process most CR/DX/SC/NM files (except multi-frame versions).

Works with many test data, TODO: determine and ignore multi-frame

  1. Whenever some library makes default assumptions because information is

missing in DICOM files, the resulting images should be marked for
applications as "missing some information, measurements
questionable/impossible"

Implemented and written to logging, TODO: make accessible and replace strings by enums.

  1. The GetSeries(..) methods should return some more informative data

structure, which distinguishes loadable and non-loadable files with more
clear information. This supports helpful feedback in applications.

Implemented internally. Next, I need to touch the interface and adapt existing code to use the new one.

Other than that, I fixed proper evaluation of "Photometric Interpretation" values MONOCHROME1 and MONOCHROME2. Also I changed the default PET LUT to MONOCHROME2.

Issue 1 from the Bug Description is still open, here I at least found out how ITK/GDCM handles CR/DX images (uses ONLY Imager Pixel Spacing as far as I understand). This needs a fix on our side and perhaps a fix in GDCM (could be submitted without too much overhead I guess).

Changes are pushed as bug-13564-relax-dicomseriesreader

New remote branch pushed: bug-13564-relax-dicomseriesreader

(In reply to comment #1)

(In reply to comment #1)

1.5. DicomSeriesReader should be more relaxed about missing information and
properly process most CR/DX/SC/NM files (except multi-frame versions).

Works with many test data, TODO: determine and ignore multi-frame

Done

  1. Whenever some library makes default assumptions because information is

missing in DICOM files, the resulting images should be marked for
applications as "missing some information, measurements
questionable/impossible"

Implemented and written to logging, TODO: make accessible and replace
strings by enums.

Done

  1. The GetSeries(..) methods should return some more informative data

structure, which distinguishes loadable and non-loadable files with more
clear information. This supports helpful feedback in applications.

Implemented internally. Next, I need to touch the interface and adapt
existing code to use the new one.

Done

Issue 1 from the Bug Description is still open, here I at least found out
how ITK/GDCM handles CR/DX images (uses ONLY Imager Pixel Spacing as far as
I understand). This needs a fix on our side and perhaps a fix in GDCM (could
be submitted without too much overhead I guess).

All planned changes are now implemented and documented. Test cases are locally prepared and will be pushed to MITK-Data after Needs_Core_Modification flag is granted.

[aaac26]: Merge branch 'bug-13564-relax-dicomseriesreader'

Merged commits:

2012-11-13 16:23:29 Daniel Maleike [183aee]
Remove trailing spaces (as in T13553)


2012-11-13 16:08:48 Daniel Maleike [3b315b]
Point to more recent test data


2012-11-13 14:32:54 Daniel Maleike [38b4a0]
Document the properties which are provided to Image and DataNode


2012-11-13 14:17:39 Daniel Maleike [6d3266]
Update test list


2012-11-13 14:11:25 Daniel Maleike [61ace5]
Document where the assumptions on ITK's series reader originate from


2012-11-12 17:32:40 Daniel Maleike [48596c]
Document new additions / changes


2012-11-12 16:53:21 Daniel Maleike [24d3ae]
Move includes to cpp file


2012-11-12 16:52:34 Daniel Maleike [0e3a38]
Add test cases for (CR) spacing variations; declare CR supported


2012-11-12 15:51:38 Daniel Maleike [96d48f]
Provide multi-frame information as property after loading, too


2012-11-12 15:37:08 Daniel Maleike [51b886]
Remove obsolete typedef


2012-11-12 15:37:02 Daniel Maleike [b63b26]
Adapt interface usage in DicomEventHandler


2012-11-12 15:16:03 Daniel Maleike [65c610]
Be more verbose before loading, use new interface with callers


2012-11-12 14:57:45 Daniel Maleike [4b93c2]
Also provide enum properties directly


2012-11-12 14:50:34 Daniel Maleike [28407f]
Use enum type to describe pixel spacing interpretation


2012-11-12 14:42:28 Daniel Maleike [af3616]
Rename Loadability to ReaderImplementationLevel


2012-11-12 14:39:04 Daniel Maleike [a55d8e]
Group and ignore multi-frame; use enum type for Loadability


2012-11-12 13:20:36 Daniel Maleike [71454a]
Set spacing to PixelSpacing when available, even when GDCM prefers ImagerPixelSpacing


2012-11-09 17:46:55 Daniel Maleike [142a57]
Fix reporting of Series Instance UID and make output INFO instead of DEBUG


2012-11-09 09:24:21 Daniel Maleike [7831a5]
Provide block descriptor as properties to generated image/node


2012-11-08 19:23:12 Daniel Maleike [afe003]
Prepare more feedback during scanning and loading


2012-11-08 17:38:35 Daniel Maleike [712417]
Preparing more informative scanning phase (old interface still kept)


2012-11-08 14:24:43 Daniel Maleike [edc84b]
Correctly assign LUT depending on photometric interpretation MONOCHROME1/2


2012-11-08 13:46:25 Daniel Maleike [8756e4]
Handle missing position information more tolerantly


2012-11-08 13:45:40 Daniel Maleike [b4da46]
Correcting error message


2012-11-07 17:43:09 Daniel Maleike [3b2bc6]
Mark several TODOs, invert if-else structure to support last resort sorting


2012-11-07 15:20:57 Daniel Maleike [8bd8db]
Adapt fix from master

[e00ff3]: Merge branch 'bug-13564-relax-dicomseriesreader'

Merged commits:

2012-11-14 09:17:53 Daniel Maleike [1fc513]
COMP export interface class

[537c1e]: Merge branch 'bug-13564-relax-dicomseriesreader'

Merged commits:

2012-11-14 09:31:21 Daniel Maleike [9bc4b0]
COMP: invent empty destructor

[2b7892]: Merge branch 'bug-13564-relax-dicomseriesreader'

Merged commits:

2012-11-14 09:37:57 Daniel Maleike [c7c660]
COMP: don't name unused variables

New remote branch pushed: bug-13564-relax-dicomseriesreader-COMPed

Changes are now finished. When integrating the branch, I hit an interesting CDash behavior: I only found a reported linker error which I couldn't understand. In the end it turned out to be a hidden compiler warning, which was treated as error. I just didnt' find it because it was not reported as an error by CDash.

[bef557]: Merge branch 'bug-13564-relax-dicomseriesreader-COMPed'

Merged commits:

2012-11-14 09:04:58 Daniel Maleike [62bbae]
Remove/answer some previous TODOs, remove obsolete ifdef

The GDCM < 2.0.14 ifdef is not needed anymore because we take the spacing
now directly from DICOM tags, not from GDCM

[8711f9]: Merge branch 'bug-13564-relax-dicomseriesreader-COMPed'

Merged commits:

2012-11-16 15:01:17 Daniel Maleike [fc2e50]
Remove obsolete check for old GDCM versions (spacing checked elsewhere)


2012-11-16 15:00:57 Daniel Maleike [41dc9b]
MITK_INFO -> MITK_DEBUG


2012-11-16 15:00:11 Daniel Maleike [9128ec]
Adding debug output, splitting Seconday Capture more clearly

Noticed that I left too much debugging output and that some Secondary Capture sorting might have been wrong. Both is fixed with the last commits