21 #include "itkImageIOBase.h" 22 #include "itkImageIOFactory.h" 23 #include "itkDiffusionTensor3D.h" 25 #include "itkImageFileReader.h" 26 #include "itkImageFileWriter.h" 27 #include "itkNiftiImageIO.h" 33 #include "itkDiffusionTensor3D.h" 65 const std::string &output);
75 const std::string &output,
86 const std::string &output,
87 const std::string &prefix);
98 const std::string &output,
99 const bool verbose,
const std::string &prefix);
115 void SetParameters(
const std::vector<std::string> &inputFileNames,
116 const std::string &output,
const std::string &prefix );
123 template<
typename PixelType,
unsigned int Dimension >
126 typedef typename itk::Image< PixelType, Dimension > InputImageType;
127 typedef typename itk::ImageFileReader< InputImageType > ReaderType;
128 typedef typename ReaderType::Pointer ReaderPointerType;
129 typedef typename itk::ImageFileWriter< InputImageType > WriterType;
131 typename FilterType::Pointer meanFilter = FilterType::New();
134 typename std::vector< ReaderPointerType > readers;
135 for(
unsigned int i=0; i<inpFiles.size(); i++ )
137 typename ReaderType::Pointer reader = ReaderType::New();
138 itk::NiftiImageIO::Pointer imageIOr = itk::NiftiImageIO::New();
139 reader->SetFileName( inpFiles[i] );
141 readers.push_back(reader);
143 reader->SetImageIO( imageIOr );
144 meanFilter->SetInput(i,reader->GetOutput());
148 typename WriterType::Pointer writer = WriterType::New();
149 itk::NiftiImageIO::Pointer imageIOw = itk::NiftiImageIO::New();
150 writer->SetImageIO( imageIOw );
151 writer->SetFileName( outputBase );
153 writer->SetInput( meanFilter->GetOutput() );
162 template <
typename PixelType,
unsigned int Dimension>
165 typedef typename itk::Image< PixelType, Dimension > InputImageType;
166 typedef typename itk::ImageFileReader< InputImageType > ReaderType;
167 typedef typename ReaderType::Pointer ReaderPointerType;
168 typedef typename itk::ImageFileWriter< InputImageType > WriterType;
170 < InputImageType, InputImageType > FilterType;
171 typename FilterType::Pointer meanFilter = FilterType::New();
174 typename std::vector< ReaderPointerType > readers;
175 for(
unsigned int i=0; i<inpFiles.size(); i++ )
177 typename ReaderType::Pointer reader = ReaderType::New();
178 itk::NiftiImageIO::Pointer imageIOr = itk::NiftiImageIO::New();
179 reader->SetFileName( inpFiles[i] );
181 readers.push_back(reader);
183 reader->SetImageIO( imageIOr );
184 meanFilter->SetInput(i,reader->GetOutput());
188 typename WriterType::Pointer writer = WriterType::New();
189 itk::NiftiImageIO::Pointer imageIOw = itk::NiftiImageIO::New();
190 writer->SetImageIO( imageIOw );
191 writer->SetFileName( outputBase );
193 writer->SetInput( meanFilter->GetOutput() );
201 inline void runAlgorithm();
204 bool m_verbose, m_isScalar;
210 template <const
unsigned int Dimension>
211 inline void invokeRunner()
215 std::cout <<
"Computing normal Average Map...\n";
216 switch( m_componentType )
218 case itk::ImageIOBase::CHAR:
220 computeMeanRunner<char, Dimension>(m_inputFiles, m_outputFiles[0]);
223 case itk::ImageIOBase::UCHAR:
225 computeMeanRunner<unsigned char, Dimension>(m_inputFiles, m_outputFiles[0]);
228 case itk::ImageIOBase::SHORT:
230 computeMeanRunner<short, Dimension>(m_inputFiles, m_outputFiles[0]);
233 case itk::ImageIOBase::USHORT:
235 computeMeanRunner<unsigned short, Dimension>(m_inputFiles, m_outputFiles[0]);
238 case itk::ImageIOBase::INT:
240 computeMeanRunner<int, Dimension>(m_inputFiles, m_outputFiles[0]);
243 case itk::ImageIOBase::UINT:
245 computeMeanRunner<unsigned int, Dimension>(m_inputFiles, m_outputFiles[0]);
248 case itk::ImageIOBase::LONG:
250 computeMeanRunner<long, Dimension>(m_inputFiles, m_outputFiles[0]);
253 case itk::ImageIOBase::ULONG:
255 computeMeanRunner<unsigned long, Dimension>(m_inputFiles, m_outputFiles[0]);
258 case itk::ImageIOBase::FLOAT:
260 computeMeanRunner<float, Dimension>(m_inputFiles, m_outputFiles[0]);
263 case itk::ImageIOBase::DOUBLE:
265 computeMeanRunner<double, Dimension>(m_inputFiles, m_outputFiles[0]);
270 std::cerr <<
"Unsupported component type: " << m_componentType_asString << std::endl;
276 else if( m_pixelType == itk::ImageIOBase::SYMMETRICSECONDRANKTENSOR ||
277 m_pixelType == itk::ImageIOBase::DIFFUSIONTENSOR3D )
279 std::cout <<
"Computing Average Map from Tensor...\n";
280 switch( m_componentType )
322 case itk::ImageIOBase::FLOAT:
324 computeMeanDTIRunner<float, Dimension>(m_inputFiles, m_outputFiles[0]);
327 case itk::ImageIOBase::DOUBLE:
329 computeMeanDTIRunner<double, Dimension>(m_inputFiles, m_outputFiles[0]);
334 std::cerr <<
"Unsupported component type: " << m_componentType_asString << std::endl;
342 std::cerr <<
"Unsupported pixel type: " << m_pixelType_asString << std::endl <<
343 "ITKComputeAverageMap class can only work with Scalar or diffusion tensor images.\n";
350 inline void checkInputs() { };
Declaration & Implementation of the NaryMeanDiffusionTensorImageFilter class.
Declaration & Implementation of the NaryMeanImageFilter class.
Declaration of the CommonHolder class.
void computeMeanRunner(std::vector< std::string > &inpFiles, std::string &outputBase)
Main mean algorithm.
Definition: cbicaITKComputeAverageMap.h:124
Computes the average of a series of images and writes the output.
Definition: cbicaITKComputeAverageMap.h:49
Common data container for all statistical computations of images.
Definition: cbicaITKCommonHolder.h:44
void computeMeanDTIRunner(std::vector< std::string > &inpFiles, std::string &outputBase)
Main mean algorithm for DTI images.
Definition: cbicaITKComputeAverageMap.h:163
Declaration of the DTILogEuclideanCalculator class.
Implements an operator for pixel-wise averaging of two images.
Definition: itkNaryMeanImageFilter.h:81
Implements an operator for pixel-wise averaging of two Diffusion Tensor images.
Definition: itkNaryMeanDiffusionTensorImageFilter.h:152