1 /*------------------------------------------------------------------------=
3 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
4 l'Image). All rights reserved. See Doc/License.txt or
5 http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
7 This software is distributed WITHOUT ANY WARRANTY; without even
8 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9 PURPOSE. See the above copyright notices for more information.
11 ------------------------------------------------------------------------=*/
13 #ifndef CLITKIMAGECREATE_CXX
14 #define CLITKIMAGECREATE_CXX
17 ------------------------------------------------=
18 * @file clitkImageCreate.cxx
19 * @author David Sarrut <David.Sarrut@creatis.insa-lyon.fr>
20 * @date 14 Oct 2008 08:37:53
21 ------------------------------------------------=*/
24 #include "clitkImageCreate_ggo.h"
25 #include "clitkCommon.h"
26 #include "clitkImageCommon.h"
29 template<class ImageType>
30 void NewFilledImage(int * size, float * spacing, double * origin,
31 double value,typename ImageType::Pointer output)
33 static const unsigned int Dim = ImageType::GetImageDimension();
34 typename ImageType::SizeType mSize;
36 for(unsigned int i=0; i<Dim; i++) mSize[i] = size[i];
37 typename ImageType::RegionType mRegion;
38 mRegion.SetSize(mSize);
39 typename ImageType::SpacingType mSpacing;
40 for(unsigned int i=0; i<Dim; i++) mSpacing[i] = spacing[i];
41 output->SetRegions(mRegion);
42 output->SetSpacing(mSpacing);
44 typename ImageType::PointType mOrigin;
45 for(unsigned int i=0; i<Dim; i++) mOrigin[i] = origin[i];
46 output->SetOrigin(mOrigin);
47 typedef typename ImageType::PixelType PixelType;
48 PixelType p = clitk::PixelTypeDownCast<double, PixelType>(value);
49 output->FillBuffer(p);
53 //--------------------------------------------------------------------
54 int main(int argc, char * argv[]) {
57 GGO(clitkImageCreate, args_info);
60 // Check --like option
62 if (args_info.like_given) {
63 itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.like_arg);
64 dim = header->GetNumberOfDimensions();
65 //mPixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
66 //mNbOfComponents = header->GetNumberOfComponents();
67 args_info.size_given = dim;
68 args_info.size_arg = new int[dim];
69 args_info.spacing_given = dim;
70 args_info.spacing_arg = new float[dim];
71 args_info.origin_given = dim;
72 args_info.origin_arg = new double[dim];
74 for(int i=0; i<dim; i++) {
75 args_info.size_arg[i] = header->GetDimensions(i);
76 args_info.spacing_arg[i] = header->GetSpacing(i);
77 args_info.origin_arg[i]= header->GetOrigin(i);
82 if ((args_info.size_given > 4) || (args_info.size_given <2)) {
83 std::cerr << "ERROR : only 2D/3D/4D image ! Please give 2 or 3 or 4 number to the --size option." << std::endl;
86 dim = args_info.size_given;
89 std::vector<double> origin;
91 for(int i=0; i<dim; i++) origin[i]=0.;
92 if (args_info.origin_given)
94 if (args_info.origin_given==1)
95 for(int i=0; i<dim; i++) origin[i] = args_info.origin_arg[0];
98 if (args_info.origin_given != args_info.size_given) {
99 std::cerr << "ERROR : please give the same number of values for --origin and --size." << std::endl;
102 for(int i=0; i<dim; i++) origin[i] = args_info.origin_arg[i];
107 std::vector<float> spacing;
109 if (args_info.spacing_given == 1) {
110 for(int i=0; i<dim; i++) spacing[i] = args_info.spacing_arg[0];
113 if (args_info.spacing_given != args_info.size_given) {
114 std::cerr << "ERROR : please give the same number of values for --size and --spacing." << std::endl;
117 for(int i=0; i<dim; i++) spacing[i] = args_info.spacing_arg[i];
121 typedef float PixelType;
124 typedef itk::Image<PixelType, Dim> ImageType;
125 ImageType::Pointer output = ImageType::New();
126 NewFilledImage<ImageType>(args_info.size_arg, &spacing[0], &origin[0], args_info.value_arg, output);
127 clitk::writeImage<ImageType>(output, args_info.output_arg);
131 typedef itk::Image<PixelType, Dim> ImageType;
132 ImageType::Pointer output = ImageType::New();
133 NewFilledImage<ImageType>(args_info.size_arg, &spacing[0], &origin[0], args_info.value_arg, output);
134 clitk::writeImage<ImageType>(output, args_info.output_arg);
138 typedef itk::Image<PixelType, Dim> ImageType;
139 ImageType::Pointer output = ImageType::New();
140 NewFilledImage<ImageType>(args_info.size_arg, &spacing[0], &origin[0], args_info.value_arg, output);
141 clitk::writeImage<ImageType>(output, args_info.output_arg);
144 // this is the end my friend
148 #endif //define CLITKIMAGEARITHM_CXX