Medical Imaging Interaction Toolkit
2018.4.99-389bf124
Medical Imaging Interaction Toolkit
|
Split inputs into blocks of equidistant slices (for use in DICOMITKSeriesGDCMReader). More...
#include <mitkEquiDistantBlocksSorter.h>
Classes | |
class | SliceGroupingAnalysisResult |
Return type of AnalyzeFileForITKImageSeriesReaderSpacingAssumption(). More... | |
Public Member Functions | |
mitkClassMacro (EquiDistantBlocksSorter, DICOMDatasetSorter) | |
DICOMTagList | GetTagsOfInterest () override |
Return the tags of interest (to facilitate scanning) More... | |
void | Sort () override |
Delegates work to AnalyzeFileForITKImageSeriesReaderSpacingAssumption(). AnalyzeFileForITKImageSeriesReaderSpacingAssumption() is called until it does not create multiple blocks anymore. More... | |
void | SetAcceptTilt (bool accept) |
Whether or not to accept images from a tilted acquisition in a single output group. More... | |
bool | GetAcceptTilt () const |
void | SetToleratedOriginOffsetToAdaptive (double fractionOfInterSliceDistanct=0.3) |
See class description and SetToleratedOriginOffset(). More... | |
void | SetToleratedOriginOffset (double millimeters=0.005) |
See class description and SetToleratedOriginOffsetToAdaptive(). More... | |
double | GetToleratedOriginOffset () const |
bool | IsToleratedOriginOffsetAbsolute () const |
void | SetAcceptTwoSlicesGroups (bool accept) |
bool | GetAcceptTwoSlicesGroups () const |
void | PrintConfiguration (std::ostream &os, const std::string &indent="") const override |
Print configuration details into stream. More... | |
bool | operator== (const DICOMDatasetSorter &other) const override |
![]() | |
mitkClassMacroItkParent (DICOMDatasetSorter, itk::LightObject) | |
void | SetInput (DICOMDatasetList filenames) |
Input for sorting. More... | |
const DICOMDatasetList & | GetInput () const |
Input for sorting. More... | |
unsigned int | GetNumberOfOutputs () const |
Output of the sorting process. More... | |
const DICOMDatasetList & | GetOutput (unsigned int index) const |
Output of the sorting process. More... | |
DICOMDatasetList & | GetOutput (unsigned int index) |
Output of the sorting process. More... | |
Static Public Member Functions | |
static Pointer | New () |
Protected Types | |
typedef std::vector< SliceGroupingAnalysisResult > | ResultsList |
Protected Member Functions | |
SliceGroupingAnalysisResult | AnalyzeFileForITKImageSeriesReaderSpacingAssumption (const DICOMDatasetList &files, bool groupsOfSimilarImages) |
Ensure an equal z-spacing for a group of files. More... | |
std::string | ConstCharStarToString (const char *s) |
Safely convert const char* to std::string. More... | |
EquiDistantBlocksSorter () | |
~EquiDistantBlocksSorter () override | |
EquiDistantBlocksSorter (const EquiDistantBlocksSorter &other) | |
EquiDistantBlocksSorter & | operator= (const EquiDistantBlocksSorter &other) |
![]() | |
DICOMDatasetSorter () | |
~DICOMDatasetSorter () override | |
DICOMDatasetSorter (const DICOMDatasetSorter &other) | |
DICOMDatasetSorter & | operator= (const DICOMDatasetSorter &other) |
void | ClearOutputs () |
void | SetNumberOfOutputs (unsigned int numberOfOutputs) |
void | SetOutput (unsigned int index, const DICOMDatasetList &output) |
Protected Attributes | |
bool | m_AcceptTilt |
ResultsList | m_SliceGroupingResults |
double | m_ToleratedOriginOffset |
bool | m_ToleratedOriginOffsetIsAbsolute |
bool | m_AcceptTwoSlicesGroups |
Split inputs into blocks of equidistant slices (for use in DICOMITKSeriesGDCMReader).
Since inter-slice distance is not recorded in DICOM tags, we must ensure that blocks are made up of slices that have equal distances between neighboring slices. This is especially necessary because itk::ImageSeriesReader is later used for the actual loading, and this class expects (and does nocht verify) equal inter-slice distance (see Forced Configuration).
To achieve such grouping, the inter-slice distance is calculated from the first two different slice positions of a block. Following slices are added to a block as long as they can be added by adding the calculated inter-slice distance to the last slice of the block. Slices that do not fit into the expected distance pattern, are set aside for further analysis. This grouping is done until each file has been assigned to a group.
Slices that share a position in space are also sorted into separate blocks during this step. So the result of this step is a set of blocks that contain only slices with equal z spacing and uniqe slices at each position.
During sorting, the origins (documented in tag image position patient) are compared against expected origins (from former origin plus moving direction). As there will be minor differences in numbers (from both calculations and unprecise tag values), we must be a bit tolerant here. The default behavior is to expect that an origin is not further away from the expected position than 30% of the inter-slice distance. To support a legacy behavior of a former loader (DicomSeriesReader), this default can be restricted to a constant number of millimeters by calling SetToleratedOriginOffset(mm).
Detailed implementation in AnalyzeFileForITKImageSeriesReaderSpacingAssumption().
Definition at line 53 of file mitkEquiDistantBlocksSorter.h.
|
protected |
Definition at line 200 of file mitkEquiDistantBlocksSorter.h.
|
protected |
Definition at line 120 of file mitkEquiDistantBlocksSorter.cpp.
Referenced by mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::UndoPrematureGrouping().
|
overrideprotected |
Definition at line 140 of file mitkEquiDistantBlocksSorter.cpp.
References operator==().
Referenced by EquiDistantBlocksSorter().
|
protected |
Definition at line 130 of file mitkEquiDistantBlocksSorter.cpp.
References ~EquiDistantBlocksSorter().
|
protected |
Ensure an equal z-spacing for a group of files.
Takes as input a number of images, which are all equally oriented and spatially sorted along their normal direction.
Internally used by GetSeries. Returns two lists: the first one contins slices of equal inter-slice spacing. The second list contains remaining files, which need to be run through AnalyzeFileForITKImageSeriesReaderSpacingAssumption again.
Relevant code that is matched here is in itkImageSeriesReader.txx (ImageSeriesReader<TOutputImage>::GenerateOutputInformation(void)), lines 176 to 245 (as of ITK 3.20)
Definition at line 335 of file mitkEquiDistantBlocksSorter.cpp.
References mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::AddFilesToUnsortedBlock(), mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::AddFileToSortedBlock(), mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::AddFileToUnsortedBlock(), mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::ContainsGantryTilt(), mitk::DICOMStringToOrientationVectors(), mitk::DICOMStringToPoint3D(), mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::FlagGantryTilt(), mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::GetBlockDatasets(), mitk::DICOMDatasetAccess::GetTagValueAsString(), mitk::GantryTiltInformation::IsRegularGantryTilt(), mitk::GantryTiltInformation::IsSheared(), m_AcceptTwoSlicesGroups, m_ToleratedOriginOffset, m_ToleratedOriginOffsetIsAbsolute, mitk::GantryTiltInformation::MakeFromTagValues(), MITK_DEBUG, mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::SetFirstFilenameOfBlock(), mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::SetLastFilenameOfBlock(), mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::UndoPrematureGrouping(), and mitk::DICOMDatasetFinding::value.
Referenced by ConstCharStarToString(), and Sort().
|
protected |
Safely convert const char* to std::string.
Definition at line 328 of file mitkEquiDistantBlocksSorter.cpp.
References AnalyzeFileForITKImageSeriesReaderSpacingAssumption().
Referenced by IsToleratedOriginOffsetAbsolute().
bool mitk::EquiDistantBlocksSorter::GetAcceptTilt | ( | ) | const |
Definition at line 192 of file mitkEquiDistantBlocksSorter.cpp.
References m_AcceptTilt, and SetAcceptTwoSlicesGroups().
Referenced by SetAcceptTilt().
bool mitk::EquiDistantBlocksSorter::GetAcceptTwoSlicesGroups | ( | ) | const |
Definition at line 206 of file mitkEquiDistantBlocksSorter.cpp.
References m_AcceptTwoSlicesGroups, and operator=().
Referenced by SetAcceptTwoSlicesGroups().
|
overridevirtual |
Return the tags of interest (to facilitate scanning)
Implements mitk::DICOMDatasetSorter.
Definition at line 229 of file mitkEquiDistantBlocksSorter.cpp.
References Sort().
Referenced by operator=().
double mitk::EquiDistantBlocksSorter::GetToleratedOriginOffset | ( | ) | const |
Definition at line 313 of file mitkEquiDistantBlocksSorter.cpp.
References IsToleratedOriginOffsetAbsolute(), and m_ToleratedOriginOffset.
Referenced by SetToleratedOriginOffset().
bool mitk::EquiDistantBlocksSorter::IsToleratedOriginOffsetAbsolute | ( | ) | const |
Definition at line 320 of file mitkEquiDistantBlocksSorter.cpp.
References ConstCharStarToString(), and m_ToleratedOriginOffsetIsAbsolute.
Referenced by GetToleratedOriginOffset().
mitk::EquiDistantBlocksSorter::mitkClassMacro | ( | EquiDistantBlocksSorter | , |
DICOMDatasetSorter | |||
) |
|
static |
|
protected |
Definition at line 214 of file mitkEquiDistantBlocksSorter.cpp.
References GetTagsOfInterest(), m_AcceptTilt, m_AcceptTwoSlicesGroups, m_ToleratedOriginOffset, m_ToleratedOriginOffsetIsAbsolute, and mitk::DICOMDatasetSorter::operator=().
Referenced by GetAcceptTwoSlicesGroups().
|
overridevirtual |
Implements mitk::DICOMDatasetSorter.
Definition at line 146 of file mitkEquiDistantBlocksSorter.cpp.
References mitk::eps, m_AcceptTilt, m_AcceptTwoSlicesGroups, m_ToleratedOriginOffset, m_ToleratedOriginOffsetIsAbsolute, and PrintConfiguration().
Referenced by ~EquiDistantBlocksSorter().
|
overridevirtual |
Print configuration details into stream.
Implements mitk::DICOMDatasetSorter.
Definition at line 163 of file mitkEquiDistantBlocksSorter.cpp.
References m_AcceptTilt, m_ToleratedOriginOffset, m_ToleratedOriginOffsetIsAbsolute, and SetAcceptTilt().
Referenced by operator==().
void mitk::EquiDistantBlocksSorter::SetAcceptTilt | ( | bool | accept | ) |
Whether or not to accept images from a tilted acquisition in a single output group.
Definition at line 184 of file mitkEquiDistantBlocksSorter.cpp.
References GetAcceptTilt(), and m_AcceptTilt.
Referenced by PrintConfiguration().
void mitk::EquiDistantBlocksSorter::SetAcceptTwoSlicesGroups | ( | bool | accept | ) |
Definition at line 199 of file mitkEquiDistantBlocksSorter.cpp.
References GetAcceptTwoSlicesGroups(), and m_AcceptTwoSlicesGroups.
Referenced by GetAcceptTilt().
void mitk::EquiDistantBlocksSorter::SetToleratedOriginOffset | ( | double | millimeters = 0.005 | ) |
See class description and SetToleratedOriginOffsetToAdaptive().
Default value of 0.005 is calculated so that we get a maximum of 1/10mm error when having a measurement crosses 20 slices in z direction (too strict? we don't know better..).
Definition at line 301 of file mitkEquiDistantBlocksSorter.cpp.
References GetToleratedOriginOffset(), m_ToleratedOriginOffset, m_ToleratedOriginOffsetIsAbsolute, and MITK_WARN.
Referenced by SetToleratedOriginOffsetToAdaptive().
void mitk::EquiDistantBlocksSorter::SetToleratedOriginOffsetToAdaptive | ( | double | fractionOfInterSliceDistanct = 0.3 | ) |
See class description and SetToleratedOriginOffset().
Definition at line 283 of file mitkEquiDistantBlocksSorter.cpp.
References m_ToleratedOriginOffset, m_ToleratedOriginOffsetIsAbsolute, MITK_WARN, and SetToleratedOriginOffset().
Referenced by Sort().
|
overridevirtual |
Delegates work to AnalyzeFileForITKImageSeriesReaderSpacingAssumption(). AnalyzeFileForITKImageSeriesReaderSpacingAssumption() is called until it does not create multiple blocks anymore.
Implements mitk::DICOMDatasetSorter.
Definition at line 241 of file mitkEquiDistantBlocksSorter.cpp.
References AnalyzeFileForITKImageSeriesReaderSpacingAssumption(), mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::GetBlockDatasets(), mitk::DICOMDatasetSorter::GetInput(), mitk::EquiDistantBlocksSorter::SliceGroupingAnalysisResult::GetUnsortedDatasets(), m_AcceptTilt, m_SliceGroupingResults, MITK_DEBUG, mitk::DICOMDatasetSorter::SetNumberOfOutputs(), mitk::DICOMDatasetSorter::SetOutput(), and SetToleratedOriginOffsetToAdaptive().
Referenced by GetTagsOfInterest().
|
protected |
Definition at line 198 of file mitkEquiDistantBlocksSorter.h.
Referenced by GetAcceptTilt(), operator=(), operator==(), PrintConfiguration(), SetAcceptTilt(), and Sort().
|
protected |
Definition at line 206 of file mitkEquiDistantBlocksSorter.h.
Referenced by AnalyzeFileForITKImageSeriesReaderSpacingAssumption(), GetAcceptTwoSlicesGroups(), operator=(), operator==(), and SetAcceptTwoSlicesGroups().
|
protected |
Definition at line 201 of file mitkEquiDistantBlocksSorter.h.
Referenced by Sort().
|
protected |
Definition at line 203 of file mitkEquiDistantBlocksSorter.h.
Referenced by AnalyzeFileForITKImageSeriesReaderSpacingAssumption(), GetToleratedOriginOffset(), operator=(), operator==(), PrintConfiguration(), SetToleratedOriginOffset(), and SetToleratedOriginOffsetToAdaptive().
|
protected |
Definition at line 204 of file mitkEquiDistantBlocksSorter.h.
Referenced by AnalyzeFileForITKImageSeriesReaderSpacingAssumption(), IsToleratedOriginOffsetAbsolute(), operator=(), operator==(), PrintConfiguration(), SetToleratedOriginOffset(), and SetToleratedOriginOffsetToAdaptive().