00001 /*========================================================================= 00002 00003 Program: Medical Imaging & Interaction Toolkit 00004 Language: C++ 00005 Date: $Date: 2008-02-08 13:23:19 +0100 (Fr, 08 Feb 2008) $ 00006 Version: $Revision: 13561 $ 00007 00008 Copyright (c) German Cancer Research Center, Division of Medical and 00009 Biological Informatics. All rights reserved. 00010 See MITKCopyright.txt or https://www.mitk.org/copyright.html for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 00018 00019 #ifndef __mitkDicomDiffusionImageHeaderReader_h__ 00020 #define __mitkDicomDiffusionImageHeaderReader_h__ 00021 00022 #include "MitkDiffusionImagingExports.h" 00023 00024 #include <mitkFileReader.h> 00025 #include "itkImageSeriesReader.h" 00026 #include "itkImageFileReader.h" 00027 #include "itkOrientedImage.h" 00028 #include "itkGDCMImageIO.h" 00029 #include "mitkDiffusionImageHeaderInformation.h" 00030 00031 namespace mitk 00032 { 00033 00034 class MitkDiffusionImaging_EXPORT DicomDiffusionImageHeaderReader : public itk::Object 00035 { 00036 public: 00037 00038 mitkClassMacro( DicomDiffusionImageHeaderReader, itk::Object ); 00039 itkNewMacro(Self); 00040 00041 enum SupportedVendors{ 00042 SV_SIEMENS, 00043 SV_SIEMENS_MOSAIC, 00044 SV_PHILIPS, 00045 SV_GE, 00046 SV_UNKNOWN_VENDOR 00047 }; 00048 00049 typedef std::vector< std::string > FileNamesContainer; 00050 00051 typedef short PixelValueType; 00052 typedef itk::OrientedImage< PixelValueType, 2 > SliceType; 00053 typedef itk::OrientedImage< PixelValueType, 3 > VolumeType; 00054 typedef itk::ImageSeriesReader< VolumeType > VolumeReaderType; 00055 typedef itk::ImageFileReader< SliceType > SliceReaderType; 00056 typedef itk::GDCMImageIO ImageIOType; 00057 00058 // set input 00059 void SetSeriesDicomFilenames(FileNamesContainer dicomFilenames) 00060 { this->m_DicomFilenames = dicomFilenames; } 00061 00062 void SetGdcmIO(ImageIOType::Pointer gdcmIO) 00063 { this->m_GdcmIO = gdcmIO; } 00064 00065 void SetVolumeReader(VolumeReaderType::Pointer volumeReader) 00066 { this->m_VolumeReader = volumeReader; } 00067 00068 void SetOutputPointer(DiffusionImageHeaderInformation::Pointer output) 00069 { this->m_Output = output; } 00070 00071 // do the work 00072 virtual void Update(); 00073 00074 // return output 00075 DiffusionImageHeaderInformation::Pointer GetOutput(); 00076 00077 // identify vendor 00078 SupportedVendors GetVendorID(); 00079 00080 //virtual const char* GetFileName() const {return 0;} 00081 //virtual void SetFileName(const char* aFileName) {} 00082 //virtual const char* GetFilePrefix() const {return 0;} 00083 //virtual void SetFilePrefix(const char* aFilePrefix) {} 00084 //virtual const char* GetFilePattern() const {return 0;} 00085 //virtual void SetFilePattern(const char* aFilePattern) {} 00086 00087 protected: 00088 00089 DicomDiffusionImageHeaderReader(); 00090 virtual ~DicomDiffusionImageHeaderReader(); 00091 00092 void ReadPublicTags(); 00093 void ReadPublicTags2(); 00094 void TransformGradients(); 00095 00096 FileNamesContainer m_DicomFilenames; 00097 DiffusionImageHeaderInformation::Pointer m_Output; 00098 00099 ImageIOType::Pointer m_GdcmIO; 00100 VolumeReaderType::Pointer m_VolumeReader; 00101 00102 bool m_SliceOrderIS; 00103 bool m_SingleSeries; 00104 int m_nSlice; 00105 std::vector<float> m_sliceLocations; 00106 00107 }; 00108 00109 } 00110 00111 #endif 00112 00113 00114