1 #ifndef CLITKIMAGECREATE_CXX
2 #define CLITKIMAGECREATE_CXX
4 ------------------------------------------------=
5 * @file clitkImageCreate.cxx
6 * @author David Sarrut <David.Sarrut@creatis.insa-lyon.fr>
7 * @date 14 Oct 2008 08:37:53
8 ------------------------------------------------=*/
11 #include "clitkImageCreate_ggo.h"
12 #include "clitkCommon.h"
13 #include "clitkImageCommon.h"
16 template<class ImageType>
17 void NewFilledImage(int * size, float * spacing, double * origin,
18 double value,typename ImageType::Pointer output)
20 static const unsigned int Dim = ImageType::GetImageDimension();
21 typename ImageType::SizeType mSize;
23 for(unsigned int i=0; i<Dim; i++) mSize[i] = size[i];
24 typename ImageType::RegionType mRegion;
25 mRegion.SetSize(mSize);
26 typename ImageType::SpacingType mSpacing;
27 for(unsigned int i=0; i<Dim; i++) mSpacing[i] = spacing[i];
28 output->SetRegions(mRegion);
29 output->SetSpacing(mSpacing);
31 typename ImageType::PointType mOrigin;
32 for(unsigned int i=0; i<Dim; i++) mOrigin[i] = origin[i];
33 output->SetOrigin(mOrigin);
34 typedef typename ImageType::PixelType PixelType;
35 PixelType p = clitk::PixelTypeDownCast<double, PixelType>(value);
36 output->FillBuffer(p);
40 //--------------------------------------------------------------------
41 int main(int argc, char * argv[]) {
44 GGO(clitkImageCreate, args_info);
47 // Check --like option
49 if (args_info.like_given) {
50 itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.like_arg);
51 dim = header->GetNumberOfDimensions();
52 //mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
53 //mNbOfComponents = header->GetNumberOfComponents();
54 args_info.size_given = dim;
55 args_info.size_arg = new int[dim];
56 args_info.spacing_given = dim;
57 args_info.spacing_arg = new float[dim];
58 args_info.origin_given = dim;
59 args_info.origin_arg = new double[dim];
61 for(int i=0; i<dim; i++) {
62 args_info.size_arg[i] = header->GetDimensions(i);
63 args_info.spacing_arg[i] = header->GetSpacing(i);
64 args_info.origin_arg[i]= header->GetOrigin(i);
69 if ((args_info.size_given > 4) || (args_info.size_given <2)) {
70 std::cerr << "ERROR : only 2D/3D/4D image ! Please give 2 or 3 or 4 number to the --size option." << std::endl;
73 dim = args_info.size_given;
76 std::vector<double> origin;
78 for(int i=0; i<dim; i++) origin[i]=0.;
79 if (args_info.origin_given)
81 if (args_info.origin_given==1)
82 for(int i=0; i<dim; i++) origin[i] = args_info.origin_arg[0];
85 if (args_info.origin_given != args_info.size_given) {
86 std::cerr << "ERROR : please give the same number of values for --origin and --size." << std::endl;
89 for(int i=0; i<dim; i++) origin[i] = args_info.origin_arg[i];
94 std::vector<float> spacing;
96 if (args_info.spacing_given == 1) {
97 for(int i=0; i<dim; i++) spacing[i] = args_info.spacing_arg[0];
100 if (args_info.spacing_given != args_info.size_given) {
101 std::cerr << "ERROR : please give the same number of values for --size and --spacing." << std::endl;
104 for(int i=0; i<dim; i++) spacing[i] = args_info.spacing_arg[i];
108 typedef float PixelType;
111 typedef itk::Image<PixelType, Dim> ImageType;
112 ImageType::Pointer output = ImageType::New();
113 NewFilledImage<ImageType>(args_info.size_arg, &spacing[0], &origin[0], args_info.value_arg, output);
114 clitk::writeImage<ImageType>(output, args_info.output_arg);
118 typedef itk::Image<PixelType, Dim> ImageType;
119 ImageType::Pointer output = ImageType::New();
120 NewFilledImage<ImageType>(args_info.size_arg, &spacing[0], &origin[0], args_info.value_arg, output);
121 clitk::writeImage<ImageType>(output, args_info.output_arg);
125 typedef itk::Image<PixelType, Dim> ImageType;
126 ImageType::Pointer output = ImageType::New();
127 NewFilledImage<ImageType>(args_info.size_arg, &spacing[0], &origin[0], args_info.value_arg, output);
128 clitk::writeImage<ImageType>(output, args_info.output_arg);
131 // this is the end my friend
135 #endif //define CLITKIMAGEARITHM_CXX