Assertion (gdcmAttribute.h:443)
"assert( GetTag() == de.GetTag() || GetTag().GetGroup() == 0x6000 || GetTag().GetGroup() == 0x5000 );"
fails with Siemens C-Arm CT images.
The last working release was 2013.03
Assertion (gdcmAttribute.h:443)
"assert( GetTag() == de.GetTag() || GetTag().GetGroup() == 0x6000 || GetTag().GetGroup() == 0x5000 );"
fails with Siemens C-Arm CT images.
The last working release was 2013.03
Status | Assigned | Task | ||
---|---|---|---|---|
Resolved | None | T17376 Visual Studio 2013 compatibility | ||
Resolved | None | T16241 DICOM loading crashes with C-Arm CT data |
First we tested if the ITK and GDCM updates are the problem.
Downgrade to old GDCM version 2.0.18 did not solve the problem. Also tried newest GDCM version 2.4.0 without success.
The problem seems to be ITK related.
The z-spacing of our image data is stored at (0x0018,0x0050) "SliceThickness"
GDCM however expects the information at (0x0018,0x0088) "SpacingBetweenSlices" and fails to compensate missing information. For example, GDCM tries to use a "FrameIncrementPointer" at (0x0028,0x0009), which points to a non-existent tag "FrameTime" at (0x0028,0x1063).
If we force the method GetZSpacingTagFromMediaStorage to return our desired tag (0x0018,0x0050), everything works fine.
We have a fix for the gdcmImageHelper.cxx. We ignore the FrameIncrementPointer, if it points to a non-existent tag (0x0018,0x1063). This still results in warnings, but C-Arm CT images can be loaded again in MITK.
1232c1232
if( at.GetValue() == Tag(0x0018,0x1063) && at.GetNumberOfValues() == 1 && ds.FindDataElement(Tag(0x0018,0x1063)) )
GDCM was updated to solve the frame increment pointer issue.
Building MITK with the current GDCM release-2-2 branch (2.2.6) allows us to load C-Arm CT images again.
Unfortunately, the mitkDICOMSeriesReaderTest gets a SegFault and throws the following Warnings:
GDCM-src/Source/DataStructureAndEncodingDefinition/gdcmReader.cxx, line 582, function bool gdcm::Reader::InternalReadCommon(const T_Caller&) [with T_Caller = gdcm::details::DefaultCaller]
Attempt to read file with VR16bits
GDCM-src/Source/DataStructureAndEncodingDefinition/gdcmVR16ExplicitDataElement.txx, line 124, function std::istream& gdcm::VR16ExplicitDataElement::ReadPreValue(std::istream&) [with TSwap = gdcm::SwapperNoOp, std::istream = std::basic_istream<char>]
Assuming 16 bits VR for Tag=(343a,3a35) in order to read a buggy DICOM file.
GDCM-src/Source/DataStructureAndEncodingDefinition/gdcmReader.cxx, line 622, function bool gdcm::Reader::InternalReadCommon(const T_Caller&) [with T_Caller = gdcm::details::DefaultCaller]
Attempt to read file with explicit/implicit
We therefore postpone updating to the newest GDCM after release.