1 #include <tclap/CmdLine.h> 4 #include <itkImageFileReader.h> 5 #include <itkImageFileWriter.h> 9 int main(
int argc,
char *argv[] )
11 TCLAP::CmdLine cmd(
"SimuBlochGRE: Simulator for Gradient Echo\nINRIA / IRISA - VisAGeS/Empenn Team",
' ',ANIMA_VERSION);
13 TCLAP::ValueArg<std::string> t1MapArg(
"",
"t1",
"Input T1 map",
true,
"",
"T1 map",cmd);
14 TCLAP::ValueArg<std::string> t2sMapArg(
"",
"t2s",
"Input T2* map",
true,
"",
"T2* map",cmd);
15 TCLAP::ValueArg<std::string> m0ImageArg(
"",
"m0",
"Input M0 image",
true,
"",
"M0 image",cmd);
16 TCLAP::ValueArg<std::string> resArg(
"o",
"output",
"Output simulated image for Gradient Echo",
true,
"",
"output simulated image",cmd);
18 TCLAP::ValueArg<double> trArg(
"r",
"tr",
"TR value (ms), default: 120ms",
false, 120,
"TR value",cmd);
19 TCLAP::ValueArg<double> teArg(
"e",
"te",
"TE value (ms), default: 8ms",
false, 8,
"TE value",cmd);
25 catch (TCLAP::ArgException& e)
27 std::cerr <<
"Error: " << e.error() <<
"for argument " << e.argId() << std::endl;
32 std::string input1FileName = t1MapArg.getValue();
33 std::string input2FileName = t2sMapArg.getValue();
34 std::string input3FileName = m0ImageArg.getValue();
35 std::string outputFileName = resArg.getValue();
36 double TR = trArg.getValue();
37 double TE = teArg.getValue();
40 if ((TR < 0) || (TE < 0))
42 std::cerr <<
"Error: " << std::endl;
43 std::cerr <<
"TR(ms) < 0 or TE(ms) < 0." << std::endl;
44 std::cerr <<
"Please set TR(ms) >= 0 and TE(ms) >= 0." << std::endl;
51 std::cerr <<
"Error: " << std::endl;
52 std::cerr <<
"TE(ms) >= TR(ms)" << std::endl;
53 std::cerr <<
"Please set TE(ms) < TR(ms)." << std::endl;
59 typedef itk::Image<double, 3> ImageType;
63 typedef itk::ImageFileReader<ImageType> ReaderType;
64 ReaderType::Pointer reader1 = ReaderType::New();
65 reader1->SetFileName(input1FileName);
69 typedef itk::ImageFileReader<ImageType> ReaderType;
70 ReaderType::Pointer reader2 = ReaderType::New();
71 reader2->SetFileName(input2FileName);
75 typedef itk::ImageFileReader<ImageType> ReaderType;
76 ReaderType::Pointer reader3 = ReaderType::New();
77 reader3->SetFileName(input3FileName);
81 ReaderType::SizeType size1 = reader1->GetOutput()->GetLargestPossibleRegion().GetSize();
82 ReaderType::SizeType size2 = reader2->GetOutput()->GetLargestPossibleRegion().GetSize();
83 ReaderType::SizeType size3 = reader3->GetOutput()->GetLargestPossibleRegion().GetSize();
86 if ( ((
sizeof(size1)/
sizeof(size1[0])) != (
sizeof(size2)/
sizeof(size2[0])))
87 || ((
sizeof(size1)/
sizeof(size1[0])) != (
sizeof(size3)/
sizeof(size3[0]))) )
89 std::cerr <<
"Error: " << std::endl;
90 std::cerr <<
"The dimensions of the input images are not the same." << std::endl;
91 std::cerr <<
"Please input the images with the same dimension." << std::endl;
96 if (((size1[0] != size2[0]) || (size1[0] != size3[0]))
97 || ((size1[1] != size2[1]) || (size1[1] != size3[1]))
98 || ((size1[2] != size2[2]) || (size1[2] != size3[2])) )
100 std::cerr <<
"Error: " << std::endl;
101 std::cerr <<
"The sizes of the input images are not the same." << std::endl;
102 std::cerr <<
"Please input the images with the same size." << std::endl;
107 FilterType::Pointer filter = FilterType::New();
108 filter->SetInput(0,reader1->GetOutput());
109 filter->SetInput(1,reader2->GetOutput());
110 filter->SetInput(2,reader3->GetOutput());
116 typedef itk::ImageFileWriter< ImageType > WriterType;
117 WriterType::Pointer writer = WriterType::New();
118 writer->SetFileName(outputFileName);
119 writer->SetInput(filter->GetOutput());
int main(int argc, char *argv[])