#include <mitkDicomDiffusionImageHeaderReader.h>
Public Types | |
enum | SupportedVendors { SV_SIEMENS, SV_SIEMENS_MOSAIC, SV_PHILIPS, SV_GE, SV_UNKNOWN_VENDOR } |
typedef DicomDiffusionImageHeaderReader | Self |
typedef itk::Object | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer < const Self > | ConstPointer |
typedef std::vector< std::string > | FileNamesContainer |
typedef short | PixelValueType |
typedef itk::OrientedImage < PixelValueType, 2 > | SliceType |
typedef itk::OrientedImage < PixelValueType, 3 > | VolumeType |
typedef itk::ImageSeriesReader < VolumeType > | VolumeReaderType |
typedef itk::ImageFileReader < SliceType > | SliceReaderType |
typedef itk::GDCMImageIO | ImageIOType |
Public Member Functions | |
virtual const char * | GetClassName () const |
void | SetSeriesDicomFilenames (FileNamesContainer dicomFilenames) |
void | SetGdcmIO (ImageIOType::Pointer gdcmIO) |
void | SetVolumeReader (VolumeReaderType::Pointer volumeReader) |
void | SetOutputPointer (DiffusionImageHeaderInformation::Pointer output) |
virtual void | Update () |
DiffusionImageHeaderInformation::Pointer | GetOutput () |
SupportedVendors | GetVendorID () |
Static Public Member Functions | |
static Pointer | New () |
Protected Member Functions | |
DicomDiffusionImageHeaderReader () | |
virtual | ~DicomDiffusionImageHeaderReader () |
void | ReadPublicTags () |
void | ReadPublicTags2 () |
void | TransformGradients () |
Protected Attributes | |
FileNamesContainer | m_DicomFilenames |
DiffusionImageHeaderInformation::Pointer | m_Output |
ImageIOType::Pointer | m_GdcmIO |
VolumeReaderType::Pointer | m_VolumeReader |
bool | m_SliceOrderIS |
bool | m_SingleSeries |
int | m_nSlice |
std::vector< float > | m_sliceLocations |
Definition at line 34 of file mitkDicomDiffusionImageHeaderReader.h.
typedef itk::SmartPointer<const Self> mitk::DicomDiffusionImageHeaderReader::ConstPointer |
Reimplemented in mitk::GEDicomDiffusionImageHeaderReader, mitk::PhilipsDicomDiffusionImageHeaderReader, mitk::SiemensDicomDiffusionImageHeaderReader, and mitk::SiemensMosaicDicomDiffusionImageHeaderReader.
Definition at line 38 of file mitkDicomDiffusionImageHeaderReader.h.
typedef std::vector< std::string > mitk::DicomDiffusionImageHeaderReader::FileNamesContainer |
Definition at line 49 of file mitkDicomDiffusionImageHeaderReader.h.
typedef itk::GDCMImageIO mitk::DicomDiffusionImageHeaderReader::ImageIOType |
Definition at line 56 of file mitkDicomDiffusionImageHeaderReader.h.
typedef short mitk::DicomDiffusionImageHeaderReader::PixelValueType |
Definition at line 51 of file mitkDicomDiffusionImageHeaderReader.h.
typedef itk::SmartPointer<Self> mitk::DicomDiffusionImageHeaderReader::Pointer |
Reimplemented in mitk::GEDicomDiffusionImageHeaderReader, mitk::PhilipsDicomDiffusionImageHeaderReader, mitk::SiemensDicomDiffusionImageHeaderReader, and mitk::SiemensMosaicDicomDiffusionImageHeaderReader.
Definition at line 38 of file mitkDicomDiffusionImageHeaderReader.h.
Reimplemented in mitk::GEDicomDiffusionImageHeaderReader, mitk::PhilipsDicomDiffusionImageHeaderReader, mitk::SiemensDicomDiffusionImageHeaderReader, and mitk::SiemensMosaicDicomDiffusionImageHeaderReader.
Definition at line 38 of file mitkDicomDiffusionImageHeaderReader.h.
typedef itk::ImageFileReader< SliceType > mitk::DicomDiffusionImageHeaderReader::SliceReaderType |
Definition at line 55 of file mitkDicomDiffusionImageHeaderReader.h.
typedef itk::OrientedImage< PixelValueType, 2 > mitk::DicomDiffusionImageHeaderReader::SliceType |
Definition at line 52 of file mitkDicomDiffusionImageHeaderReader.h.
typedef itk::Object mitk::DicomDiffusionImageHeaderReader::Superclass |
Reimplemented in mitk::GEDicomDiffusionImageHeaderReader, mitk::PhilipsDicomDiffusionImageHeaderReader, mitk::SiemensDicomDiffusionImageHeaderReader, and mitk::SiemensMosaicDicomDiffusionImageHeaderReader.
Definition at line 38 of file mitkDicomDiffusionImageHeaderReader.h.
typedef itk::ImageSeriesReader< VolumeType > mitk::DicomDiffusionImageHeaderReader::VolumeReaderType |
Definition at line 54 of file mitkDicomDiffusionImageHeaderReader.h.
typedef itk::OrientedImage< PixelValueType, 3 > mitk::DicomDiffusionImageHeaderReader::VolumeType |
Definition at line 53 of file mitkDicomDiffusionImageHeaderReader.h.
Definition at line 41 of file mitkDicomDiffusionImageHeaderReader.h.
mitk::DicomDiffusionImageHeaderReader::DicomDiffusionImageHeaderReader | ( | ) | [protected] |
Definition at line 49 of file mitkDicomDiffusionImageHeaderReader.cpp.
References m_SingleSeries, and m_SliceOrderIS.
{ m_SliceOrderIS = true; m_SingleSeries = true; }
mitk::DicomDiffusionImageHeaderReader::~DicomDiffusionImageHeaderReader | ( | ) | [protected, virtual] |
Definition at line 55 of file mitkDicomDiffusionImageHeaderReader.cpp.
{ }
virtual const char* mitk::DicomDiffusionImageHeaderReader::GetClassName | ( | ) | const [virtual] |
mitk::DiffusionImageHeaderInformation::Pointer mitk::DicomDiffusionImageHeaderReader::GetOutput | ( | void | ) |
Definition at line 200 of file mitkDicomDiffusionImageHeaderReader.cpp.
{ return m_Output; }
mitk::DicomDiffusionImageHeaderReader::SupportedVendors mitk::DicomDiffusionImageHeaderReader::GetVendorID | ( | ) |
Definition at line 60 of file mitkDicomDiffusionImageHeaderReader.cpp.
{ // adapted from namic-sandbox // DicomToNrrdConverter.cxx m_GdcmIO = ImageIOType::New(); m_GdcmIO->LoadPrivateTagsOn(); m_GdcmIO->SetMaxSizeLoadEntry( 65536 ); m_VolumeReader = VolumeReaderType::New(); m_VolumeReader->SetImageIO( m_GdcmIO ); m_VolumeReader->SetFileNames( m_DicomFilenames ); try { m_VolumeReader->Update(); } catch (itk::ExceptionObject &excp) { std::cerr << "Exception thrown while reading slice" << std::endl; std::cerr << excp << std::endl; return SV_UNKNOWN_VENDOR; } VolumeReaderType::DictionaryArrayRawPointer inputDict = m_VolumeReader->GetMetaDataDictionaryArray(); std::string vendor; itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0008|0070", vendor ); // std::cout << vendor << std::endl; std::string ImageType; itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0008|0008", ImageType ); //std::cout << ImageType << std::endl; if ( vendor.find("GE") != std::string::npos ) { // for GE data return SV_GE; } else if( vendor.find("SIEMENS") != std::string::npos ) { if ( ImageType.find("MOSAIC") != std::string::npos ) { // for Siemens MOSAIC return SV_SIEMENS_MOSAIC; } else { // for Siemens SPLIT return SV_SIEMENS; } } else if( vendor.find("PHILIPS") != std::string::npos ) { // for philips data return SV_PHILIPS; } else { // for unrecognized vendors return SV_UNKNOWN_VENDOR; } }
static Pointer mitk::DicomDiffusionImageHeaderReader::New | ( | ) | [static] |
void mitk::DicomDiffusionImageHeaderReader::ReadPublicTags | ( | ) | [protected] |
Definition at line 205 of file mitkDicomDiffusionImageHeaderReader.cpp.
References InsertUnique().
{ VolumeReaderType::DictionaryArrayRawPointer inputDict = m_VolumeReader->GetMetaDataDictionaryArray(); // load in all public tags m_nSlice = inputDict->size(); std::string tag; tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0008|103e", tag ); this->m_Output->seriesDescription = tag.c_str(); tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0020|0011", tag ); this->m_Output->seriesNumber = atoi(tag.c_str()); tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0010|0010", tag ); this->m_Output->patientName = tag.c_str(); tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0028|0010", tag ); this->m_Output->nRows = atoi( tag.c_str() ); tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0028|0011", tag ); this->m_Output->nCols = atoi( tag.c_str() ); tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0028|0030", tag ); sscanf( tag.c_str(), "%f\\%f", &this->m_Output->xRes, &this->m_Output->yRes ); tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0020|0032", tag ); sscanf( tag.c_str(), "%f\\%f\\%f", &this->m_Output->xOrigin, &this->m_Output->yOrigin, &this->m_Output->zOrigin ); tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0018|0050", tag ); this->m_Output->sliceThickness = atof( tag.c_str() ); tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0018|0088", tag ); this->m_Output->sliceSpacing = atof( tag.c_str() ); // figure out how many slices are there in a volume, each unique // SliceLocation represent one slice for (int k = 0; k < m_nSlice; k++) { tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[k], "0020|1041", tag); float sliceLocation = atof( tag.c_str() ); InsertUnique( m_sliceLocations, sliceLocation ); } // check ImageOrientationPatient and figure out slice direction in // L-P-I (right-handed) system. // In Dicom, the coordinate frame is L-P by default. Look at // http://medical.nema.org/dicom/2007/07_03pu.pdf , page 301 tag.clear(); itk::ExposeMetaData<std::string> ( *(*inputDict)[0], "0020|0037", tag ); float xRow, yRow, zRow, xCol, yCol, zCol, xSlice, ySlice, zSlice /*, orthoSliceSpacing*/; sscanf( tag.c_str(), "%f\\%f\\%f\\%f\\%f\\%f", &xRow, &yRow, &zRow, &xCol, &yCol, &zCol ); //std::cout << "ImageOrientationPatient (0020:0037): "; //std::cout << xRow << ", " << yRow << ", " << zRow << "; "; //std::cout << xCol << ", " << yCol << ", " << zCol << "\n"; // In Dicom, the measurement frame is L-P by default. Look at // http://medical.nema.org/dicom/2007/07_03pu.pdf , page 301, in // order to make this compatible with Slicer's RAS frame, we // multiply the direction cosines by the negatives of the resolution // (resolution is required by nrrd format). Direction cosine is not // affacted since the resulting frame is still a right-handed frame. xRow = -xRow; yRow = -yRow; xCol = -xCol; yCol = -yCol; // Cross product, this gives I-axis direction xSlice = (yRow*zCol-zRow*yCol)*this->m_Output->sliceSpacing; ySlice = (zRow*xCol-xRow*zCol)*this->m_Output->sliceSpacing; zSlice = (xRow*yCol-yRow*xCol)*this->m_Output->sliceSpacing; xRow *= this->m_Output->xRes; yRow *= this->m_Output->xRes; zRow *= this->m_Output->xRes; xCol *= this->m_Output->yRes; yCol *= this->m_Output->yRes; zCol *= this->m_Output->yRes; this->m_Output->xRow = xRow; this->m_Output->yRow = yRow; this->m_Output->zRow = zRow; this->m_Output->xCol = xCol; this->m_Output->yCol = yCol; this->m_Output->zCol = zCol; this->m_Output->xSlice = xSlice; this->m_Output->ySlice = ySlice; this->m_Output->zSlice = zSlice; }
void mitk::DicomDiffusionImageHeaderReader::ReadPublicTags2 | ( | ) | [protected] |
Definition at line 314 of file mitkDicomDiffusionImageHeaderReader.cpp.
{ if (!m_SliceOrderIS) { this->m_Output->xSlice = -this->m_Output->xSlice; this->m_Output->ySlice = -this->m_Output->ySlice; this->m_Output->zSlice = -this->m_Output->zSlice; } //std::cout << "Row: " << this->m_Output->xRow << ", " << this->m_Output->yRow << ", " << this->m_Output->zRow << std::endl; //std::cout << "Col: " << this->m_Output->xCol << ", " << this->m_Output->yCol << ", " << this->m_Output->zCol << std::endl; //std::cout << "Sli: " << this->m_Output->xSlice << ", " << this->m_Output->ySlice << ", " << this->m_Output->zSlice << std::endl; //orthoSliceSpacing = fabs(zSlice); //int nVolume; //float maxBvalue = 0; //int nBaseline = 0; }
void mitk::DicomDiffusionImageHeaderReader::SetGdcmIO | ( | ImageIOType::Pointer | gdcmIO ) | [inline] |
Definition at line 62 of file mitkDicomDiffusionImageHeaderReader.h.
{ this->m_GdcmIO = gdcmIO; }
void mitk::DicomDiffusionImageHeaderReader::SetOutputPointer | ( | DiffusionImageHeaderInformation::Pointer | output ) | [inline] |
Definition at line 68 of file mitkDicomDiffusionImageHeaderReader.h.
{ this->m_Output = output; }
void mitk::DicomDiffusionImageHeaderReader::SetSeriesDicomFilenames | ( | FileNamesContainer | dicomFilenames ) | [inline] |
Definition at line 59 of file mitkDicomDiffusionImageHeaderReader.h.
{ this->m_DicomFilenames = dicomFilenames; }
void mitk::DicomDiffusionImageHeaderReader::SetVolumeReader | ( | VolumeReaderType::Pointer | volumeReader ) | [inline] |
Definition at line 65 of file mitkDicomDiffusionImageHeaderReader.h.
{ this->m_VolumeReader = volumeReader; }
void mitk::DicomDiffusionImageHeaderReader::TransformGradients | ( | ) | [protected] |
Definition at line 337 of file mitkDicomDiffusionImageHeaderReader.cpp.
{ // transform gradient directions into RAS frame if ( !m_SliceOrderIS ) { this->m_Output->DiffusionVector[2] = -this->m_Output->DiffusionVector[2]; // I -> S } }
void mitk::DicomDiffusionImageHeaderReader::Update | ( | ) | [virtual] |
Reimplemented in mitk::GEDicomDiffusionImageHeaderReader, mitk::PhilipsDicomDiffusionImageHeaderReader, mitk::SiemensDicomDiffusionImageHeaderReader, and mitk::SiemensMosaicDicomDiffusionImageHeaderReader.
Definition at line 126 of file mitkDicomDiffusionImageHeaderReader.cpp.
References mitk::PhilipsDicomDiffusionImageHeaderReader::New(), mitk::SiemensMosaicDicomDiffusionImageHeaderReader::New(), mitk::SiemensDicomDiffusionImageHeaderReader::New(), mitk::GEDicomDiffusionImageHeaderReader::New(), and mitk::DiffusionImageHeaderInformation::New().
{ // check if there are filenames if(m_DicomFilenames.size()) { m_Output = mitk::DiffusionImageHeaderInformation::New(); m_Output->m_DicomFilenames = m_DicomFilenames; // create correct reader switch(GetVendorID()) { case(SV_GE): { GEDicomDiffusionImageHeaderReader::Pointer reader = GEDicomDiffusionImageHeaderReader::New(); reader->SetSeriesDicomFilenames(this->m_DicomFilenames); reader->SetGdcmIO(this->m_GdcmIO); reader->SetVolumeReader(this->m_VolumeReader); reader->SetOutputPointer(this->m_Output); reader->Update(); this->m_Output = reader->GetOutput(); break; } case(SV_SIEMENS): { SiemensDicomDiffusionImageHeaderReader::Pointer reader = SiemensDicomDiffusionImageHeaderReader::New(); reader->SetSeriesDicomFilenames(this->m_DicomFilenames); reader->SetGdcmIO(this->m_GdcmIO); reader->SetVolumeReader(this->m_VolumeReader); reader->SetOutputPointer(this->m_Output); reader->Update(); this->m_Output = reader->GetOutput(); break; } case(SV_SIEMENS_MOSAIC): { SiemensMosaicDicomDiffusionImageHeaderReader::Pointer reader = SiemensMosaicDicomDiffusionImageHeaderReader::New(); reader->SetSeriesDicomFilenames(this->m_DicomFilenames); reader->SetGdcmIO(this->m_GdcmIO); reader->SetVolumeReader(this->m_VolumeReader); reader->SetOutputPointer(this->m_Output); reader->Update(); this->m_Output = reader->GetOutput(); break; } case(SV_PHILIPS): { PhilipsDicomDiffusionImageHeaderReader::Pointer reader = PhilipsDicomDiffusionImageHeaderReader::New(); reader->SetSeriesDicomFilenames(this->m_DicomFilenames); reader->SetGdcmIO(this->m_GdcmIO); reader->SetVolumeReader(this->m_VolumeReader); reader->SetOutputPointer(this->m_Output); reader->Update(); this->m_Output = reader->GetOutput(); break; } case(SV_UNKNOWN_VENDOR): { std::cerr << "diffusion header reader: unknown vendor" << std::endl; break; } } } }
Definition at line 96 of file mitkDicomDiffusionImageHeaderReader.h.
ImageIOType::Pointer mitk::DicomDiffusionImageHeaderReader::m_GdcmIO [protected] |
Definition at line 99 of file mitkDicomDiffusionImageHeaderReader.h.
int mitk::DicomDiffusionImageHeaderReader::m_nSlice [protected] |
Definition at line 104 of file mitkDicomDiffusionImageHeaderReader.h.
DiffusionImageHeaderInformation::Pointer mitk::DicomDiffusionImageHeaderReader::m_Output [protected] |
Definition at line 97 of file mitkDicomDiffusionImageHeaderReader.h.
bool mitk::DicomDiffusionImageHeaderReader::m_SingleSeries [protected] |
Definition at line 103 of file mitkDicomDiffusionImageHeaderReader.h.
Referenced by DicomDiffusionImageHeaderReader().
std::vector<float> mitk::DicomDiffusionImageHeaderReader::m_sliceLocations [protected] |
Definition at line 105 of file mitkDicomDiffusionImageHeaderReader.h.
bool mitk::DicomDiffusionImageHeaderReader::m_SliceOrderIS [protected] |
Definition at line 102 of file mitkDicomDiffusionImageHeaderReader.h.
Referenced by DicomDiffusionImageHeaderReader().
VolumeReaderType::Pointer mitk::DicomDiffusionImageHeaderReader::m_VolumeReader [protected] |
Definition at line 100 of file mitkDicomDiffusionImageHeaderReader.h.