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 "mitkNrrdQBallImageWriter.h"
00019 #include "itkMetaDataDictionary.h"
00020 #include "itkMetaDataObject.h"
00021 #include "itkNrrdImageIO.h"
00022 #include "itkImageFileWriter.h"
00023 #include "mitkImageCast.h"
00024
00025
00026 mitk::NrrdQBallImageWriter::NrrdQBallImageWriter()
00027 : m_FileName(""), m_FilePrefix(""), m_FilePattern(""), m_Success(false)
00028 {
00029 this->SetNumberOfRequiredInputs( 1 );
00030 }
00031
00032
00033 mitk::NrrdQBallImageWriter::~NrrdQBallImageWriter()
00034 {}
00035
00036
00037 void mitk::NrrdQBallImageWriter::GenerateData()
00038 {
00039 m_Success = false;
00040 InputType* input = this->GetInput();
00041 if (input == NULL)
00042 {
00043 itkWarningMacro(<<"Sorry, input to NrrdQBallImageWriter is NULL!");
00044 return;
00045 }
00046 if ( m_FileName == "" )
00047 {
00048 itkWarningMacro( << "Sorry, filename has not been set!" );
00049 return ;
00050 }
00051
00052 itk::NrrdImageIO::Pointer io = itk::NrrdImageIO::New();
00053 io->SetFileType( itk::ImageIOBase::Binary );
00054
00055 typedef itk::VectorImage<float, 3> VecImgType;
00056
00057 typedef itk::Image<itk::Vector<float,QBALL_ODFSIZE>,3> ImageType;
00058 typedef itk::ImageFileWriter<VecImgType> WriterType;
00059 WriterType::Pointer nrrdWriter = WriterType::New();
00060
00061 ImageType::Pointer outimage = ImageType::New();
00062 CastToItkImage(input, outimage);
00063
00064 VecImgType::Pointer vecImg = VecImgType::New();
00065 vecImg->SetSpacing( outimage->GetSpacing() );
00066 vecImg->SetOrigin( outimage->GetOrigin() );
00067 vecImg->SetDirection( outimage->GetDirection() );
00068 vecImg->SetLargestPossibleRegion( outimage->GetLargestPossibleRegion());
00069 vecImg->SetBufferedRegion( outimage->GetLargestPossibleRegion() );
00070 vecImg->SetVectorLength(QBALL_ODFSIZE);
00071 vecImg->Allocate();
00072
00073 itk::ImageRegionIterator<VecImgType> ot (vecImg, vecImg->GetLargestPossibleRegion() );
00074 ot = ot.Begin();
00075
00076 itk::ImageRegionIterator<ImageType> it (outimage, outimage->GetLargestPossibleRegion() );
00077
00078 typedef ImageType::PixelType VecPixType;
00079 typedef VecImgType::PixelType VarVecType;
00080
00081 for (it = it.Begin(); !it.IsAtEnd(); ++it)
00082 {
00083 VecPixType vec = it.Get();
00084 VarVecType varVec(vec.GetVnlVector().data_block(), QBALL_ODFSIZE);
00085 ot.Set(varVec);
00086 ++ot;
00087 }
00088
00089 nrrdWriter->SetInput( vecImg );
00090 nrrdWriter->SetImageIO(io);
00091 nrrdWriter->SetFileName(m_FileName);
00092
00093 try
00094 {
00095 nrrdWriter->Update();
00096 }
00097 catch (itk::ExceptionObject e)
00098 {
00099 std::cout << e << std::endl;
00100 }
00101
00102 m_Success = true;
00103 }
00104
00105
00106 void mitk::NrrdQBallImageWriter::SetInput( InputType* diffVolumes )
00107 {
00108 this->ProcessObject::SetNthInput( 0, diffVolumes );
00109 }
00110
00111
00112 mitk::QBallImage* mitk::NrrdQBallImageWriter::GetInput()
00113 {
00114 if ( this->GetNumberOfInputs() < 1 )
00115 {
00116 return NULL;
00117 }
00118 else
00119 {
00120 return dynamic_cast<InputType*> ( this->ProcessObject::GetInput( 0 ) );
00121 }
00122 }
00123
00124
00125 std::vector<std::string> mitk::NrrdQBallImageWriter::GetPossibleFileExtensions()
00126 {
00127 std::vector<std::string> possibleFileExtensions;
00128 possibleFileExtensions.push_back(".qbi");
00129 possibleFileExtensions.push_back(".hqbi");
00130 return possibleFileExtensions;
00131 }