#include "itkImage.h" #include "itkImageFileReader.h" #include "itkImageFileWriter.h" #include "itkTimeProbe.h" #include "itkSignedMaurerParallelDistanceMapImageFilter.h" #include "itkTimeProbe.h" #include #include typedef unsigned int InputPixelType; typedef double OutputPixelType; typedef itk::Image InputImageType; typedef itk::Image OutputImageType; typedef itk::ImageFileReader ImageReaderType; typedef itk::ImageFileWriter ImageWriterType; typedef itk::SignedMaurerParallelDistanceMapImageFilter ParallelMaurerType; int main(int argc, char** argv) { if(argc<=1) { std::cerr << "Specify input image." << std::endl; return -1; } if(argc<=2) { std::cerr << "Specify number of threads for execution." << std::endl; return -1; } int numThreads = atoi(argv[2]); ImageReaderType::Pointer reader = ImageReaderType::New(); ImageWriterType::Pointer writer = ImageWriterType::New(); reader->SetFileName(argv[1]); try { reader->Update(); } catch(itk::ExceptionObject &e) { assert(0); }; itk::TimeProbe timer; ParallelMaurerType::Pointer parallelMaurer = ParallelMaurerType::New(); parallelMaurer->SetInput(reader->GetOutput()); parallelMaurer->SetSquaredDistance(0); parallelMaurer->SetUseImageSpacing(1); parallelMaurer->SetInsideIsPositive(0); parallelMaurer->SetSigned(1); parallelMaurer->SetBinaryConvert(1); parallelMaurer->SetForegroundValue(1); parallelMaurer->SetNumberOfThreads(numThreads); for(int i = 1; i<=10; i++) { timer.Start(); parallelMaurer->Update(); timer.Stop(); parallelMaurer->Modified(); } std::cout<<"Mean elapsed filter processing time: "<SetInput(parallelMaurer->GetOutput()); writer->SetFileName("para_dist.mhd"); writer->Update(); return 0; }