1 #ifndef CLITKIMAGERESAMPLE_CXX
2 #define CLITKIMAGERESAMPLE_CXX
4 ------------------------------------------------=
5 * @file clitkImageResample.cxx
6 * @author David Sarrut <David.Sarrut@creatis.insa-lyon.fr>
7 * @date 23 Feb 2008 08:37:53
8 ------------------------------------------------=*/
11 #include "clitkImageResample_ggo.h"
13 #include "clitkImageResampleGenericFilter.h"
15 //--------------------------------------------------------------------
16 int main(int argc, char * argv[]) {
19 GGO(clitkImageResample, args_info);
22 // Read input image header to check image dimension
23 itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.input_arg);
24 unsigned int dim = header->GetNumberOfDimensions();
25 std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
27 // Print image info if verbose
28 if (args_info.verbose_flag) {
29 std::cout << "Input image <" << args_info.input_arg << "> is ";
30 clitk::printImageHeader(header, std::cout);
31 std::cout << std::endl;
34 // Get input size/spacing
35 std::vector<int> inputSize;
36 std::vector<double> inputSpacing;
37 inputSize.resize(dim);
38 inputSpacing.resize(dim);
39 for(unsigned int i=0; i<dim; i++) {
40 inputSpacing[i] = header->GetSpacing(i);
41 inputSize[i] = header->GetDimensions(i);
45 std::vector<int> outputSize;
46 std::vector<double> outputSpacing;
47 outputSize.resize(dim);
48 outputSpacing.resize(dim);
51 if (!args_info.size_given && !args_info.spacing_given) {
52 std::cerr << "Please indicate output size or spacing." << std::endl;
57 if (args_info.size_given && args_info.spacing_given) {
58 std::cerr << "Please indicate only output size or spacing, not both." << std::endl;
62 // Size is given and not spacing
63 if (args_info.size_given && !args_info.spacing_given) {
64 if (args_info.size_given != dim) {
65 std::cerr << "Input image is " << dim << "D, please give " << dim << " size numbers." << std::endl;
68 for(unsigned int i=0; i<dim; i++) {
69 if ((args_info.size_arg[i] == -1) || (args_info.size_arg[i]==0))
70 outputSize[i] = inputSize[i];
72 outputSize[i] = args_info.size_arg[i];
73 outputSpacing[i] = inputSize[i]*inputSpacing[i]/outputSize[i];
77 // Spacing is given and not size
78 if (!args_info.size_given && args_info.spacing_given) {
79 if (args_info.spacing_given != dim) {
80 if (args_info.spacing_given == 1) {
81 for(unsigned int i=0; i<dim; i++) outputSpacing[i] = args_info.spacing_arg[0];
84 std::cerr << "Input image is " << dim << "D, please give " << dim << " spacing numbers." << std::endl;
89 for(unsigned int i=0; i<dim; i++) {
90 if ((args_info.spacing_arg[i] == -1) || (args_info.spacing_arg[i]==0))
91 outputSpacing[i] = inputSpacing[i];
93 outputSpacing[i] = args_info.spacing_arg[i];
97 for(unsigned int i=0; i<dim; i++)
98 outputSize[i] = (int)lrint(inputSize[i]*inputSpacing[i]/outputSpacing[i]);
101 if (args_info.verbose_flag) {
102 std::cout << "Output image will be : " << std::endl;
104 DDV(outputSpacing,dim);
107 // Get sigma option for Gaussian filter
108 std::vector<double> sigma;
109 sigma.resize(args_info.gauss_given);
110 std::copy(args_info.gauss_arg, args_info.gauss_arg+args_info.gauss_given, sigma.begin());
111 if (args_info.gauss_given) {
112 if (args_info.gauss_given != dim) {
113 if (args_info.gauss_given == 1) {
115 for(unsigned int i=0; i<dim; i++) sigma[i] = args_info.gauss_arg[0];
118 std::cerr << "Input image is " << dim << "D, please give " << dim << " sigma numbers for gaussian filter." << std::endl;
125 clitk::ImageResampleGenericFilter::Pointer filter = clitk::ImageResampleGenericFilter::New();
126 filter->SetInputFilename(args_info.input_arg);
127 filter->SetOutputSize(outputSize);
128 filter->SetOutputSpacing(outputSpacing);
129 filter->SetInterpolationName(args_info.interp_arg);
130 filter->SetBSplineOrder(args_info.order_arg);
131 filter->SetBLUTSampling(args_info.sampling_arg);
132 if (args_info.gauss_given)
133 filter->SetGaussianSigma(sigma);
134 filter->SetOutputFilename(args_info.output_arg);
139 // this is the end my friend
142 //--------------------------------------------------------------------
144 #endif /* end #define CLITKIMAGERESAMPLE_CXX */