[Insight-users] DiffusionTensor3DReconstructionImageFilter (cont.)
Christina Roßmanith
ChrRossmanith at gmx.de
Fri Oct 20 16:05:26 EDT 2006
Hi,
attaching the source code didn't work, following you find my source code
pasted.
Christina Rossmanith
----------------------------------------------------------------------------------------------------------------------------------------------
#include <itkImageSeriesReader.h>
#include "itkGDCMSeriesFileNames.h"
#include <itkGDCMImageIO.h>
#include "itkImageFileWriter.h"
#include <itkDiffusionTensor3DReconstructionImageFilter.h>
#include "itkImageFileWriter.h"
int main ( int argc, char* argv[] )
{
typedef signed short PixelType;
const unsigned int Dimension = 3;
typedef itk::Image< PixelType, Dimension > ImageType;
typedef itk::ImageSeriesReader< ImageType > ReaderType;
ReaderType::Pointer reader = ReaderType::New();
typedef itk::GDCMImageIO ImageIOType;
ImageIOType::Pointer dicomIO = ImageIOType::New();
reader->SetImageIO( dicomIO );
typedef itk::GDCMSeriesFileNames NamesGeneratorType;
NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();
nameGenerator->SetUseSeriesDetails( true );
if (argc > 1)
{
nameGenerator->SetDirectory( argv[1] );
}
else
{
nameGenerator->SetDirectory( "/tmp/Singer" );
}
typedef std::vector< std::string > SeriesIdContainer;
const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs();
SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();
SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();
typedef itk::DiffusionTensor3DReconstructionImageFilter<
PixelType, PixelType, double > TensorReconstructionImageFilterType;
TensorReconstructionImageFilterType::GradientDirectionType vect3d;
TensorReconstructionImageFilterType::GradientDirectionContainerType::Pointer
diffusionVectors =
TensorReconstructionImageFilterType::GradientDirectionContainerType::New();
TensorReconstructionImageFilterType::Pointer tensorReconstructor =
TensorReconstructionImageFilterType::New();
//
// read gradient directions from file
//
std::ifstream gradientFile;
gradientFile.open ( argv[2] );
std::string line;
unsigned int count=0;
if (gradientFile.is_open())
{
while (! gradientFile.eof())
{
getline (gradientFile, line);
std::istringstream (line) >> vect3d[0] >> vect3d[1] >> vect3d[2];
diffusionVectors->InsertElement (count, vect3d);
count++;
}
}
//
// read 7 series (1 reference + 6 diffusion weighted)
//
count = 0;
while( seriesItr != seriesEnd )
{
std::string seriesIdentifier;
seriesIdentifier = seriesItr->c_str();
typedef std::vector< std::string > FilenamesContainer;
FilenamesContainer filenames;
// read a single serie
filenames = nameGenerator->GetFileNames( seriesIdentifier );
reader->SetFileNames( filenames );
reader->Update();
// first serie is reference
if (count == 0)
{
tensorReconstructor->SetReferenceImage (reader->GetOutput());
}
// series 2-7 are diffusion weighted
else
{
vect3d = diffusionVectors->GetElement( count );
vect3d.normalize();
tensorReconstructor->AddGradientImage (vect3d, reader->GetOutput());
}
count ++;
seriesItr++;
}
// parameterize tensor reconstruction filter
tensorReconstructor->SetNumberOfThreads( 1 );
tensorReconstructor->SetBValue( 1000.0 );
tensorReconstructor->SetThreshold ( 0 );
tensorReconstructor->Update();
// write resulting tensor volume
typedef itk::ImageFileWriter<
TensorReconstructionImageFilterType::TensorImageType > WriterType;
WriterType::Pointer writer = WriterType::New();
writer->SetFileName( argv[3] );
writer->SetInput( tensorReconstructor->GetOutput() );
writer->Update();
exit (EXIT_SUCCESS);
}
More information about the Insight-users
mailing list