Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkNrrdTensorImageReader.h"
00019
00020 #include "itkImageFileReader.h"
00021 #include "itkImageRegionIterator.h"
00022 #include "itkMetaDataObject.h"
00023 #include "itkNrrdImageIO.h"
00024 #include "itkDiffusionTensor3D.h"
00025
00026 #include "mitkITKImageImport.h"
00027 #include "mitkImageDataItem.h"
00028
00029 namespace mitk
00030 {
00031
00032 void NrrdTensorImageReader
00033 ::GenerateData()
00034 {
00035 if ( m_FileName == "")
00036 {
00037 throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, the filename is empty!");
00038 }
00039 else
00040 {
00041 try
00042 {
00043 typedef itk::VectorImage<float,3> ImageType;
00044 itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New();
00045 typedef itk::ImageFileReader<ImageType> FileReaderType;
00046 FileReaderType::Pointer reader = FileReaderType::New();
00047 reader->SetImageIO(io);
00048 reader->SetFileName(this->m_FileName);
00049 reader->Update();
00050 ImageType::Pointer img = reader->GetOutput();
00051
00052 typedef itk::Image<itk::DiffusionTensor3D<float>,3> VecImgType;
00053 VecImgType::Pointer vecImg = VecImgType::New();
00054 vecImg->SetSpacing( img->GetSpacing() );
00055 vecImg->SetOrigin( img->GetOrigin() );
00056 vecImg->SetDirection( img->GetDirection() );
00057 vecImg->SetRegions( img->GetLargestPossibleRegion());
00058 vecImg->Allocate();
00059
00060 itk::ImageRegionIterator<VecImgType> ot (vecImg, vecImg->GetLargestPossibleRegion() );
00061 ot = ot.Begin();
00062
00063 itk::ImageRegionIterator<ImageType> it (img, img->GetLargestPossibleRegion() );
00064 it = it.Begin();
00065
00066 typedef ImageType::PixelType VarPixType;
00067 typedef VecImgType::PixelType FixPixType;
00068
00069 while (!it.IsAtEnd())
00070 {
00071 VarPixType vec = it.Get();
00072 FixPixType fixVec(vec.GetDataPointer());
00073 ot.Set(fixVec);
00074 ++ot;
00075 ++it;
00076 }
00077
00078 this->GetOutput()->InitializeByItk(vecImg.GetPointer());
00079 this->GetOutput()->SetVolume(vecImg->GetBufferPointer());
00080
00081 }
00082 catch(std::exception& e)
00083 {
00084 throw itk::ImageFileReaderException(__FILE__, __LINE__, e.what());
00085 }
00086 catch(...)
00087 {
00088 throw itk::ImageFileReaderException(__FILE__, __LINE__, "Sorry, an error occurred while reading the requested DTI file!");
00089 }
00090 }
00091 }
00092
00093 void NrrdTensorImageReader::GenerateOutputInformation()
00094 {
00095
00096 }
00097
00098
00099
00100 const char* NrrdTensorImageReader
00101 ::GetFileName() const
00102 {
00103 return m_FileName.c_str();
00104 }
00105
00106
00107 void NrrdTensorImageReader
00108 ::SetFileName(const char* aFileName)
00109 {
00110 m_FileName = aFileName;
00111 }
00112
00113
00114 const char* NrrdTensorImageReader
00115 ::GetFilePrefix() const
00116 {
00117 return m_FilePrefix.c_str();
00118 }
00119
00120
00121 void NrrdTensorImageReader
00122 ::SetFilePrefix(const char* aFilePrefix)
00123 {
00124 m_FilePrefix = aFilePrefix;
00125 }
00126
00127
00128 const char* NrrdTensorImageReader
00129 ::GetFilePattern() const
00130 {
00131 return m_FilePattern.c_str();
00132 }
00133
00134
00135 void NrrdTensorImageReader
00136 ::SetFilePattern(const char* aFilePattern)
00137 {
00138 m_FilePattern = aFilePattern;
00139 }
00140
00141
00142 bool NrrdTensorImageReader
00143 ::CanReadFile(const std::string filename, const std::string , const std::string )
00144 {
00145
00146 if( filename == "" )
00147 {
00148 return false;
00149 }
00150 std::string ext = itksys::SystemTools::GetFilenameLastExtension(filename);
00151 ext = itksys::SystemTools::LowerCase(ext);
00152
00153 if (ext == ".hdti" || ext == ".dti")
00154 {
00155 return true;
00156 }
00157
00158 return false;
00159 }
00160
00161 }