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