1 /*-------------------------------------------------------------------------
4 Module: $RCSfile: clitkVFResample.cxx,v $
6 Date: $Date: 2010/01/06 13:31:56 $
7 Version: $Revision: 1.1 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 -------------------------------------------------------------------------*/
19 #ifndef CLITKVFRESAMPLE_CXX
20 #define CLITKVFRESAMPLE_CXX
23 ------------------------------------------------=
24 * @file clitkImageResample.cxx
25 * @author David Sarrut <David.Sarrut@creatis.insa-lyon.fr>
26 * @date 23 Feb 2008 08:37:53
27 ------------------------------------------------=*/
30 #include "clitkImageResample_ggo.h"
32 #include "clitkVFResampleGenericFilter.h"
34 //--------------------------------------------------------------------
35 int main(int argc, char * argv[]) {
38 GGO(clitkImageResample, args_info);
41 // Read input image header to check image dimension
42 itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.input_arg);
43 unsigned int dim = header->GetNumberOfDimensions();
44 std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
46 // Print image info if verbose
47 if (args_info.verbose_flag) {
48 std::cout << "Input image <" << args_info.input_arg << "> is ";
49 clitk::printImageHeader(header, std::cout);
50 std::cout << std::endl;
53 // Get input size/spacing
54 std::vector<int> inputSize;
55 std::vector<double> inputSpacing;
56 inputSize.resize(dim);
57 inputSpacing.resize(dim);
58 for(unsigned int i=0; i<dim; i++) {
59 inputSpacing[i] = header->GetSpacing(i);
60 inputSize[i] = header->GetDimensions(i);
64 std::vector<int> outputSize;
65 std::vector<double> outputSpacing;
66 outputSize.resize(dim);
67 outputSpacing.resize(dim);
70 if (!args_info.size_given && !args_info.spacing_given) {
71 std::cerr << "Please indicate output size or spacing." << std::endl;
76 if (args_info.size_given && args_info.spacing_given) {
77 std::cerr << "Please indicate only output size or spacing, not both." << std::endl;
81 // Size is given and not spacing
82 if (args_info.size_given && !args_info.spacing_given) {
83 if (args_info.size_given != dim) {
84 std::cerr << "Input image is " << dim << "D, please give " << dim << " size numbers." << std::endl;
87 for(unsigned int i=0; i<dim; i++) {
88 if ((args_info.size_arg[i] == -1) || (args_info.size_arg[i]==0))
89 outputSize[i] = inputSize[i];
91 outputSize[i] = args_info.size_arg[i];
92 outputSpacing[i] = inputSize[i]*inputSpacing[i]/outputSize[i];
96 // Spacing is given and not size
97 if (!args_info.size_given && args_info.spacing_given) {
98 if (args_info.spacing_given != dim) {
99 if (args_info.spacing_given == 1) {
100 for(unsigned int i=0; i<dim; i++) outputSpacing[i] = args_info.spacing_arg[0];
103 std::cerr << "Input image is " << dim << "D, please give " << dim << " spacing numbers." << std::endl;
108 for(unsigned int i=0; i<dim; i++) {
109 if ((args_info.spacing_arg[i] == -1) || (args_info.spacing_arg[i]==0))
110 outputSpacing[i] = inputSpacing[i];
112 outputSpacing[i] = args_info.spacing_arg[i];
116 for(unsigned int i=0; i<dim; i++)
117 outputSize[i] = (int)lrint(inputSize[i]*inputSpacing[i]/outputSpacing[i]);
120 if (args_info.verbose_flag) {
121 std::cout << "Output image will be : " << std::endl;
123 DDV(outputSpacing,dim);
126 // Get sigma option for Gaussian filter
127 std::vector<double> sigma;
128 sigma.resize(args_info.gauss_given);
129 std::copy(args_info.gauss_arg, args_info.gauss_arg+args_info.gauss_given, sigma.begin());
130 if (args_info.gauss_given) {
131 if (args_info.gauss_given != dim) {
132 if (args_info.gauss_given == 1) {
134 for(unsigned int i=0; i<dim; i++) sigma[i] = args_info.gauss_arg[0];
137 std::cerr << "Input image is " << dim << "D, please give " << dim << " sigma numbers for gaussian filter." << std::endl;
144 clitk::VFResampleGenericFilter::Pointer filter = clitk::VFResampleGenericFilter::New();
145 filter->SetInputFilename(args_info.input_arg);
146 filter->SetOutputSize(outputSize);
147 filter->SetOutputSpacing(outputSpacing);
148 filter->SetInterpolationName(args_info.interp_arg);
149 filter->SetBSplineOrder(args_info.order_arg);
150 filter->SetBLUTSampling(args_info.sampling_arg);
151 if (args_info.gauss_given)
152 filter->SetGaussianSigma(sigma);
153 filter->SetOutputFilename(args_info.output_arg);
158 // this is the end my friend
161 //--------------------------------------------------------------------
163 #endif /* end #define CLITKVFRESAMPLE_CXX */