40 os << indent <<
"NormalDirectionConsistencySorter" << std::endl;
68 tags.push_back(
DICOMTag(0x0020, 0x0032) );
69 tags.push_back(
DICOMTag(0x0020, 0x0037) );
80 if (datasets.size() > 1)
102 bool hasOrientation(
false);
104 right, up, hasOrientation );
106 Point3D firstOrigin; firstOrigin.Fill(0.0f);
107 bool firstHasOrigin(
false);
110 Point3D lastOrigin; lastOrigin.Fill(0.0f);
111 bool lastHasOrigin(
false);
115 normal[0] = right[1] * up[2] - right[2] * up[1];
116 normal[1] = right[2] * up[0] - right[0] * up[2];
117 normal[2] = right[0] * up[1] - right[1] * up[0];
121 directionOfSlices = lastOrigin - firstOrigin;
122 directionOfSlices.Normalize();
124 double projection = normal * directionOfSlices;
126 MITK_DEBUG <<
"Making sense of \norientation '" << imageOrientationString
127 <<
"'\nfirst position '" << imagePositionPatientFirst
128 <<
"'\nlast position '" << imagePositionPatientLast <<
"'";
130 MITK_DEBUG <<
"Direction of slices: " << directionOfSlices;
131 MITK_DEBUG <<
"Projection of direction onto slice normal: " << projection;
133 if ( projection < 0.0 )
136 std::reverse( datasets.begin(), datasets.end() );
139 imagePositionPatientLast,
140 imagePositionPatientFirst,
141 imageOrientationString,
148 imagePositionPatientFirst,
149 imagePositionPatientLast,
150 imageOrientationString,
NormalDirectionConsistencySorter & operator=(const NormalDirectionConsistencySorter &other)
NormalDirectionConsistencySorter()
The sorting/splitting building-block of DICOMITKSeriesGDCMReader.
std::vector< DICOMTag > DICOMTagList
void DICOMStringToOrientationVectors(const std::string &s, Vector3D &right, Vector3D &up, bool &successful)
Convert DICOM string describing a point two Vector3D.
Representation of a DICOM tag.
void PrintConfiguration(std::ostream &os, const std::string &indent="") const override
Print configuration details into stream.
void SetNumberOfOutputs(unsigned int numberOfOutputs)
const DICOMDatasetList & GetInput() const
Input for sorting.
Interface to datasets that is presented to sorting classes such as DICOMDatasetSorter.
DICOMTagList GetTagsOfInterest() override
Return the tags of interest (to facilitate scanning)
virtual DICOMDatasetFinding GetTagValueAsString(const DICOMTag &tag) const =0
Return a DICOMDatasetFinding instance of the tag. The return containes (if valid) the raw value of th...
Makes sure that the order of files is along the image plane normals.
void Sort() override
See class description.
bool operator==(const DICOMDatasetSorter &other) const override
GantryTiltInformation GetTiltInformation() const
See class description and DICOMITKSeriesGDCMReader.
Point3D DICOMStringToPoint3D(const std::string &s, bool &successful)
Convert DICOM string describing a point to Point3D.
void SetOutput(unsigned int index, const DICOMDatasetList &output)
DICOMDatasetSorter & operator=(const DICOMDatasetSorter &other)
std::vector< DICOMDatasetAccess * > DICOMDatasetList
GantryTiltInformation m_TiltInfo
~NormalDirectionConsistencySorter() override