Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkDicomSR_ImageBlockDescriptor.cpp
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
14 
15 #include <gdcmUIDs.h>
16 
17 namespace mitk
18 {
20  : m_HasGantryTiltCorrected(false), m_HasMultipleTimePoints(false), m_IsMultiFrameImage(false)
21  {
22  }
23 
25  {
26  // nothing
27  }
28 
30  : m_HasGantryTiltCorrected(false), m_HasMultipleTimePoints(false), m_IsMultiFrameImage(false)
31  {
32  m_Filenames = files;
33  }
34 
35  void DicomSeriesReader::ImageBlockDescriptor::AddFile(const std::string &filename)
36  {
37  m_Filenames.push_back(filename);
38  }
39 
40  void DicomSeriesReader::ImageBlockDescriptor::AddFiles(const StringContainer &files)
41  {
42  m_Filenames.insert(m_Filenames.end(), files.begin(), files.end());
43  }
44 
46  {
47  return m_Filenames;
48  }
49 
50  std::string DicomSeriesReader::ImageBlockDescriptor::GetImageBlockUID() const { return m_ImageBlockUID; }
51  std::string DicomSeriesReader::ImageBlockDescriptor::GetSeriesInstanceUID() const { return m_SeriesInstanceUID; }
52  std::string DicomSeriesReader::ImageBlockDescriptor::GetModality() const { return m_Modality; }
54  {
55  gdcm::UIDs uidKnowledge;
56  uidKnowledge.SetFromUID(m_SOPClassUID.c_str());
57  return uidKnowledge.GetName();
58  }
59 
60  std::string DicomSeriesReader::ImageBlockDescriptor::GetSOPClassUID() const { return m_SOPClassUID; }
61  bool DicomSeriesReader::ImageBlockDescriptor::IsMultiFrameImage() const { return m_IsMultiFrameImage; }
63  const
64  {
65  if (this->IsMultiFrameImage())
67 
68  gdcm::UIDs uidKnowledge;
69  uidKnowledge.SetFromUID(m_SOPClassUID.c_str());
70 
71  gdcm::UIDs::TSName uid = static_cast<gdcm::UIDs::TSName>((gdcm::UIDs::TSType)uidKnowledge);
72 
73  switch (uid)
74  {
75  case gdcm::UIDs::CTImageStorage:
76  case gdcm::UIDs::MRImageStorage:
77  case gdcm::UIDs::PositronEmissionTomographyImageStorage:
78  case gdcm::UIDs::ComputedRadiographyImageStorage:
79  case gdcm::UIDs::DigitalXRayImageStorageForPresentation:
80  case gdcm::UIDs::DigitalXRayImageStorageForProcessing:
82 
83  case gdcm::UIDs::NuclearMedicineImageStorage:
85 
86  case gdcm::UIDs::SecondaryCaptureImageStorage:
88 
89  default:
91  }
92  }
93 
94  bool DicomSeriesReader::ImageBlockDescriptor::HasGantryTiltCorrected() const { return m_HasGantryTiltCorrected; }
95  /*
96  PS defined IPS defined PS==IPS
97  0 0 --> UNKNOWN spacing, loader will invent
98  0 1 --> spacing as at detector surface
99  1 0 --> spacing as in patient
100  1 1 0 --> detector surface spacing CORRECTED for geometrical magnifications:
101  spacing as in patient
102  1 1 1 --> detector surface spacing NOT corrected for geometrical
103  magnifications:
104  spacing as at detector
105  */
107  {
108  if (m_PixelSpacing.empty())
109  {
110  if (m_ImagerPixelSpacing.empty())
111  {
113  }
114  else
115  {
117  }
118  }
119  else // Pixel Spacing defined
120  {
121  if (m_ImagerPixelSpacing.empty())
122  {
124  }
125  else if (m_PixelSpacing != m_ImagerPixelSpacing)
126  {
128  }
129  else
130  {
132  }
133  }
134  }
135 
137  {
139  }
140 
142  {
144  }
145 
147  {
149  }
150 
151  void DicomSeriesReader::ImageBlockDescriptor::SetPixelSpacingInformation(const std::string &pixelSpacing,
152  const std::string &imagerPixelSpacing)
153  {
154  m_PixelSpacing = pixelSpacing;
155  m_ImagerPixelSpacing = imagerPixelSpacing;
156  }
157 
158  void DicomSeriesReader::ImageBlockDescriptor::GetDesiredMITKImagePixelSpacing(ScalarType &spacingX,
159  ScalarType &spacingY) const
160  {
161  // preference for "in patient" pixel spacing
162  if (!DICOMStringToSpacing(m_PixelSpacing, spacingX, spacingY))
163  {
164  // fallback to "on detector" spacing
165  if (!DICOMStringToSpacing(m_ImagerPixelSpacing, spacingX, spacingY))
166  {
167  // last resort: invent something
168  spacingX = spacingY = 1.0;
169  }
170  }
171  }
172 
173  bool DicomSeriesReader::ImageBlockDescriptor::HasMultipleTimePoints() const { return m_HasMultipleTimePoints; }
174  void DicomSeriesReader::ImageBlockDescriptor::SetImageBlockUID(const std::string &uid) { m_ImageBlockUID = uid; }
175  void DicomSeriesReader::ImageBlockDescriptor::SetSeriesInstanceUID(const std::string &uid)
176  {
177  m_SeriesInstanceUID = uid;
178  }
179 
180  void DicomSeriesReader::ImageBlockDescriptor::SetModality(const std::string &modality) { m_Modality = modality; }
181  void DicomSeriesReader::ImageBlockDescriptor::SetNumberOfFrames(const std::string &numberOfFrames)
182  {
183  m_IsMultiFrameImage = !numberOfFrames.empty();
184  }
185 
186  void DicomSeriesReader::ImageBlockDescriptor::SetSOPClassUID(const std::string &sopClassUID)
187  {
188  m_SOPClassUID = sopClassUID;
189  }
190 
191  void DicomSeriesReader::ImageBlockDescriptor::SetHasGantryTiltCorrected(bool on) { m_HasGantryTiltCorrected = on; }
192  void DicomSeriesReader::ImageBlockDescriptor::SetHasMultipleTimePoints(bool on) { m_HasMultipleTimePoints = on; }
193 } // end namespace mitk
PixelSpacingInterpretation
How the mitk::Image spacing should be interpreted.
static bool DICOMStringToSpacing(const std::string &s, ScalarType &spacingX, ScalarType &spacingY)
Safely convert a string into pixel spacing x and y.
PixelSpacingInterpretation GetPixelSpacingType() const
How the mitk::Image spacing can meaningfully be interpreted.
bool PixelSpacingRelatesToPatient() const
Whether or not mitk::Image spacing relates to the patient.
double ScalarType
std::vector< std::string > StringContainer
Lists of filenames.
DataCollection - Class to facilitate loading/accessing structured data.
std::string GetSOPClassUIDAsString() const
SOP Class UID as readable string (Computed Tomography Image Storage, Secondary Capture Image Storage...
StringContainer GetFilenames() const
List of files in this group.
loader code is implemented but not accompanied by tests
std::string GetSeriesInstanceUID() const
The Series Instance UID.
bool PixelSpacingIsUnknown() const
Whether or not mitk::Image spacing is of unknown origin.
ReaderImplementationLevel GetReaderImplementationLevel() const
Confidence of the reader that this block can be read successfully.
std::string GetModality() const
Series Modality (CT, MR, etc.)
std::string GetSOPClassUID() const
SOP Class UID as DICOM UID.
std::string GetImageBlockUID() const
A unique ID describing this bloc (enhanced Series Instance UID).
bool PixelSpacingRelatesToDetector() const
Whether or not mitk::Image spacing relates to the detector surface.
bool IsMultiFrameImage() const
Multi-frame image(s) or not.
ReaderImplementationLevel
Describes how well the reader is tested for a certain file type.
bool HasGantryTiltCorrected() const
Whether or not the block contains a gantry tilt which will be "corrected" during loading.