#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.
1.7.2