GDCM  2.4.5
Public Member Functions | Protected Attributes | List of all members
gdcm::IPPSorter Class Reference

IPPSorter Implement a simple Image Position (Patient) sorter, along the Image Orientation (Patient) direction. This algorithm does NOT support duplicate and will FAIL in case of duplicate IPP. More...

#include <gdcmIPPSorter.h>

Inheritance diagram for gdcm::IPPSorter:
Inheritance graph
[legend]
Collaboration diagram for gdcm::IPPSorter:
Collaboration graph
[legend]

Public Member Functions

 IPPSorter ()
 
double GetDirectionCosinesTolerance () const
 
double GetZSpacing () const
 
double GetZSpacingTolerance () const
 
void SetComputeZSpacing (bool b)
 
void SetDirectionCosinesTolerance (double tol)
 
void SetDropDuplicatePositions (bool b)
 
void SetZSpacingTolerance (double tol)
 
virtual bool Sort (std::vector< std::string > const &filenames)
 
- Public Member Functions inherited from gdcm::Sorter
 Sorter ()
 
virtual ~Sorter ()
 
bool AddSelect (Tag const &tag, const char *value)
 UNSUPPORTED FOR NOW. More...
 
const std::vector< std::string > & GetFilenames () const
 
void Print (std::ostream &os) const
 Print. More...
 
void SetSortFunction (SortFunction f)
 
virtual bool StableSort (std::vector< std::string > const &filenames)
 

Protected Attributes

bool ComputeZSpacing
 
double DirCosTolerance
 
bool DropDuplicatePositions
 
double ZSpacing
 
double ZTolerance
 
- Protected Attributes inherited from gdcm::Sorter
std::vector< std::string > Filenames
 
std::map< Tag, std::string > Selection
 
SortFunction SortFunc
 

Additional Inherited Members

- Public Types inherited from gdcm::Sorter
typedef bool(* SortFunction) (DataSet const &, DataSet const &)
 Set the sort function which compares one dataset to the other. More...
 
- Protected Types inherited from gdcm::Sorter
typedef std::map< Tag, std::string > SelectionMap
 

Detailed Description

IPPSorter Implement a simple Image Position (Patient) sorter, along the Image Orientation (Patient) direction. This algorithm does NOT support duplicate and will FAIL in case of duplicate IPP.

Warning
See special note for SetZSpacingTolerance when computing the ZSpacing from the IPP of each DICOM files (default tolerance for consistent spacing is: 1e-6mm)

For more information on Spacing, and how it is defined in DICOM, advanced users may refers to:

http://gdcm.sourceforge.net/wiki/index.php/Imager_Pixel_Spacing

Bug:
There are currently a couple of bugs in this implementation:
  • Gantry Tilt is not considered
Examples:
Compute3DSpacing.cxx, gdcmorthoplanes.cxx, reslicesphere.cxx, and VolumeSorter.cxx.

Constructor & Destructor Documentation

gdcm::IPPSorter::IPPSorter ( )

Member Function Documentation

double gdcm::IPPSorter::GetDirectionCosinesTolerance ( ) const
inline
double gdcm::IPPSorter::GetZSpacing ( ) const
inline

Read-only function to provide access to the computed value for the Z-Spacing The ComputeZSpacing must have been set to true before execution of sort algorithm. Call this function after calling Sort(); Z-Spacing will be 0 on 2 occasions:

  • Sorting simply failed, potentially duplicate IPP => ZSpacing = 0
  • ZSpacing could not be computed (Z-Spacing is not constant, or ZTolerance is too low)
Examples:
Compute3DSpacing.cxx, gdcmorthoplanes.cxx, and reslicesphere.cxx.
double gdcm::IPPSorter::GetZSpacingTolerance ( ) const
inline
void gdcm::IPPSorter::SetComputeZSpacing ( bool  b)
inline

Functions related to Z-Spacing computation Set to true when sort algorithm should also perform a regular Z-Spacing computation using the Image Position (Patient) Potential reason for failure:

  1. ALL slices are taken into account, if one slice if missing then ZSpacing will be set to 0 since the spacing will not be found to be regular along the Series
Examples:
Compute3DSpacing.cxx, gdcmorthoplanes.cxx, reslicesphere.cxx, and VolumeSorter.cxx.
void gdcm::IPPSorter::SetDirectionCosinesTolerance ( double  tol)
inline

Sometimes IOP along a series is slightly changing for example: "0.999081\\0.0426953\\0.00369272\\-0.0419025\\0.955059\\0.293439", "0.999081\\0.0426953\\0.00369275\\-0.0419025\\0.955059\\0.293439", "0.999081\\0.0426952\\0.00369272\\-0.0419025\\0.955059\\0.293439", We need an API to define the tolerance which is allowed. Internally the cross vector of each direction cosines is computed. The tolerance then define the the distance in between 1. to the dot product of those cross vectors. In a perfect world this dot product is of course 1.0 which imply a DirectionCosines tolerance of exactly 0.0 (default).

void gdcm::IPPSorter::SetDropDuplicatePositions ( bool  b)
inline

Makes the IPPSorter ignore multiple images located at the same position. Only the first occurence will be kept. DropDuplicatePositions defaults to false.

void gdcm::IPPSorter::SetZSpacingTolerance ( double  tol)
inline
  1. Another reason for failure is that that Z-Spacing is only slightly changing (eg 1e-3) along the serie, a human can determine that this is ok and change the tolerance from its default value: 1e-6
Examples:
Compute3DSpacing.cxx, gdcmorthoplanes.cxx, and reslicesphere.cxx.
virtual bool gdcm::IPPSorter::Sort ( std::vector< std::string > const &  filenames)
virtual

Main entry point to the sorter. It will execute the filter, option should be set before running this function (SetZSpacingTolerance, ...) Return value indicate if sorting could be achived. Warning this does NOT imply that spacing is consistent, it only means the file are sorted according to IPP You should check if ZSpacing is 0 or not to deduce if file are actually a 3D volume

Reimplemented from gdcm::Sorter.

Examples:
Compute3DSpacing.cxx, gdcmorthoplanes.cxx, reslicesphere.cxx, and VolumeSorter.cxx.

Member Data Documentation

bool gdcm::IPPSorter::ComputeZSpacing
protected
double gdcm::IPPSorter::DirCosTolerance
protected
bool gdcm::IPPSorter::DropDuplicatePositions
protected
double gdcm::IPPSorter::ZSpacing
protected
double gdcm::IPPSorter::ZTolerance
protected

The documentation for this class was generated from the following file:

Generated on Fri Sep 25 2015 17:58:31 for GDCM by doxygen 1.8.9.1
SourceForge.net Logo