1 #include <tclap/CmdLine.h> 4 #include <itkImageFileReader.h> 5 #include <itkImageFileWriter.h> 9 int main(
int argc,
char *argv[] )
11 TCLAP::CmdLine cmd(
"SimuBlochSP-GRE: Simulator for Spoiled Gradient Echo ( SPGR, FLASH, or T1-FFE )\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> b1ImageArg(
"",
"b1",
"Input B1 image",
false,
"",
"B1 image",cmd);
17 TCLAP::ValueArg<std::string> resArg(
"o",
"output",
"Output simulated image for Spoiled Gradient Echo",
true,
"",
"output simulated image",cmd);
19 TCLAP::ValueArg<double> trArg(
"r",
"tr",
"TR value (ms), default: 35ms",
false, 35,
"TR value",cmd);
20 TCLAP::ValueArg<double> teArg(
"e",
"te",
"TE value (ms), default: 6ms",
false, 6,
"TE value",cmd);
21 TCLAP::ValueArg<double> faArg(
"f",
"fa",
"Flip Angle (degree), default: 40degree",
false, 40,
"FA value",cmd);
27 catch (TCLAP::ArgException& e)
29 std::cerr <<
"Error: " << e.error() <<
"for argument " << e.argId() << std::endl;
34 std::string input1FileName = t1MapArg.getValue();
35 std::string input2FileName = t2sMapArg.getValue();
36 std::string input3FileName = m0ImageArg.getValue();
37 std::string outputFileName = resArg.getValue();
38 double TR = trArg.getValue();
39 double TE = teArg.getValue();
40 double FA = faArg.getValue();
43 if ((TR < 0) || (TE < 0))
45 std::cerr <<
"Error: " << std::endl;
46 std::cerr <<
"TR(ms) < 0 or TE(ms)" << std::endl;
47 std::cerr <<
"Please set TR(ms) >= 0 and TE(ms) >= 0." << std::endl;
54 std::cerr <<
"Error: " << std::endl;
55 std::cerr <<
"TE(ms) >= TR(ms)" << std::endl;
56 std::cerr <<
"Please set TE and TR values which satisfy TE(ms) < TR(ms)." << std::endl;
62 if ((FA > 180) || (FA < 0))
64 std::cerr <<
"Error: " << std::endl;
65 std::cerr <<
"FA(degree) < 0 or FA(degree) > 180" << std::endl;
66 std::cerr <<
"Please set FA(degree) in the range of [0, 180]." << std::endl;
71 typedef itk::Image<double, 3> ImageType;
75 typedef itk::ImageFileReader<ImageType> ReaderType;
76 ReaderType::Pointer reader1 = ReaderType::New();
77 reader1->SetFileName(input1FileName);
81 ReaderType::Pointer reader2 = ReaderType::New();
82 reader2->SetFileName(input2FileName);
86 ReaderType::Pointer reader3 = ReaderType::New();
87 reader3->SetFileName(input3FileName);
91 ReaderType::SizeType size1 = reader1->GetOutput()->GetLargestPossibleRegion().GetSize();
92 ReaderType::SizeType size2 = reader2->GetOutput()->GetLargestPossibleRegion().GetSize();
93 ReaderType::SizeType size3 = reader3->GetOutput()->GetLargestPossibleRegion().GetSize();
96 if ( ((
sizeof(size1)/
sizeof(size1[0])) != (
sizeof(size2)/
sizeof(size2[0])))
97 || ((
sizeof(size1)/
sizeof(size1[0])) != (
sizeof(size3)/
sizeof(size3[0]))) )
99 std::cerr <<
"Error: " << std::endl;
100 std::cerr <<
"The dimensions of the input images are not the same." << std::endl;
101 std::cerr <<
"Please input the images with the same dimension." << std::endl;
106 if (((size1[0] != size2[0]) || (size1[0] != size3[0]))
107 || ((size1[1] != size2[1]) || (size1[1] != size3[1]))
108 || ((size1[2] != size2[2]) || (size1[2] != size3[2])) )
110 std::cerr <<
"Error: " << std::endl;
111 std::cerr <<
"The sizes of the input images are not the same." << std::endl;
112 std::cerr <<
"Please input the images with the same size." << std::endl;
117 FilterType::Pointer filter = FilterType::New();
118 filter->SetInput(0,reader1->GetOutput());
119 filter->SetInput(1,reader2->GetOutput());
120 filter->SetInput(2,reader3->GetOutput());
123 if (b1ImageArg.getValue() !=
"")
125 ReaderType::Pointer readerB1 = ReaderType::New();
126 readerB1->SetFileName(b1ImageArg.getValue().c_str());
129 filter->SetInput(3,readerB1->GetOutput());
138 typedef itk::ImageFileWriter< ImageType > WriterType;
139 WriterType::Pointer writer = WriterType::New();
140 writer->SetFileName(outputFileName);
141 writer->SetInput(filter->GetOutput());
int main(int argc, char *argv[])