// ------------------------------------------------------------------------ void LoadImage(const std::string &filename, ImageType::Pointer &image) { typedef itk::Image<unsigned short, 4> InImageType; typedef itk::ImageFileReader<InImageType> ReaderType; ReaderType::Pointer reader = ReaderType::New(); reader->SetFileName(filename); reader->SetImageIO(itk::NrrdImageIO::New()); reader->Update(); typedef itk::ExtractImageFilter<InImageType, ImageType> ExtractorType; ExtractorType::Pointer extractor = ExtractorType::New(); extractor->SetInput(reader->GetOutput()); InImageType::RegionType exRegion = reader->GetOutput()->GetLargestPossibleRegion(); InImageType::SizeType exSize = exRegion.GetSize(); InImageType::IndexType exIndex = exRegion.GetIndex(); exSize[3] = 0; exIndex[3] = 0; exRegion.SetSize(exSize); exRegion.SetIndex(exIndex); extractor->SetExtractionRegion(exRegion); extractor->SetDirectionCollapseToSubmatrix(); extractor->Update(); image = extractor->GetOutput(); }
int main(int argc,char ** argv){ typedef itk::Image<float,3> ImageType; typedef itk::Image<float,2> SliceType; typedef itk::ImageFileReader<ImageType> ReaderType; typedef itk::ImageFileWriter<SliceType> WriterType; typedef itk::BoundedReciprocalImageFilter<ImageType,ImageType> BoundedReciprocalType; BoundedReciprocalType::Pointer boundedReciprocal = BoundedReciprocalType::New(); typedef ttt::AdvectiveDiffusion2DIterationImageFilter<SliceType,SliceType> AdvectionDiffusion2DIterationType; ReaderType::Pointer reader = ReaderType::New(); reader->SetFileName(argv[1]); reader->UpdateOutputInformation(); typedef itk::ExtractImageFilter<ImageType,SliceType> ExtractorType; ExtractorType::Pointer extractor = ExtractorType::New(); ImageType::RegionType extractionRegion = reader->GetOutput()->GetLargestPossibleRegion(); extractionRegion.SetSize(2,0); boundedReciprocal->SetInput(reader->GetOutput()); extractor->SetInput(boundedReciprocal->GetOutput()); extractor->SetExtractionRegion(extractionRegion); extractor->SetDirectionCollapseToIdentity(); AdvectionDiffusion2DIterationType::Pointer advectionDiffusionIteration =AdvectionDiffusion2DIterationType::New(); advectionDiffusionIteration->SetInput(extractor->GetOutput()); advectionDiffusionIteration->SetNumberOfThreads(1.0); WriterType::Pointer sliceWriter = WriterType::New(); sliceWriter->SetInput(extractor->GetOutput()); sliceWriter->SetFileName(argv[2]); sliceWriter->Update(); WriterType::Pointer writer = WriterType::New(); writer->SetFileName(argv[3]); writer->SetInput(advectionDiffusionIteration->GetOutput()); writer->Update(); }