1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the copyright notices for more information.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
18 #ifndef CLITKVFRESAMPLE_CXX
19 #define CLITKVFRESAMPLE_CXX
21 ------------------------------------------------=
22 * @file clitkImageResample.cxx
23 * @author David Sarrut <David.Sarrut@creatis.insa-lyon.fr>
24 * @date 23 Feb 2008 08:37:53
25 ------------------------------------------------=*/
28 #include "clitkImageResample_ggo.h"
30 #include "clitkVFResampleGenericFilter.h"
32 //--------------------------------------------------------------------
33 int main(int argc, char * argv[]) {
36 GGO(clitkImageResample, args_info);
39 // Read input image header to check image dimension
40 itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.input_arg);
41 unsigned int dim = header->GetNumberOfDimensions();
42 std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
44 // Print image info if verbose
45 if (args_info.verbose_flag) {
46 std::cout << "Input image <" << args_info.input_arg << "> is ";
47 clitk::printImageHeader(header, std::cout);
48 std::cout << std::endl;
51 // Get input size/spacing
52 std::vector<int> inputSize;
53 std::vector<double> inputSpacing;
54 inputSize.resize(dim);
55 inputSpacing.resize(dim);
56 for(unsigned int i=0; i<dim; i++) {
57 inputSpacing[i] = header->GetSpacing(i);
58 inputSize[i] = header->GetDimensions(i);
62 std::vector<int> outputSize;
63 std::vector<double> outputSpacing;
64 outputSize.resize(dim);
65 outputSpacing.resize(dim);
68 if (!args_info.size_given && !args_info.spacing_given) {
69 std::cerr << "Please indicate output size or spacing." << std::endl;
74 if (args_info.size_given && args_info.spacing_given) {
75 std::cerr << "Please indicate only output size or spacing, not both." << std::endl;
79 // Size is given and not spacing
80 if (args_info.size_given && !args_info.spacing_given) {
81 if (args_info.size_given != dim) {
82 std::cerr << "Input image is " << dim << "D, please give " << dim << " size numbers." << std::endl;
85 for(unsigned int i=0; i<dim; i++) {
86 if ((args_info.size_arg[i] == -1) || (args_info.size_arg[i]==0))
87 outputSize[i] = inputSize[i];
89 outputSize[i] = args_info.size_arg[i];
90 outputSpacing[i] = inputSize[i]*inputSpacing[i]/outputSize[i];
94 // Spacing is given and not size
95 if (!args_info.size_given && args_info.spacing_given) {
96 if (args_info.spacing_given != dim) {
97 if (args_info.spacing_given == 1) {
98 for(unsigned int i=0; i<dim; i++) outputSpacing[i] = args_info.spacing_arg[0];
101 std::cerr << "Input image is " << dim << "D, please give " << dim << " spacing numbers." << std::endl;
106 for(unsigned int i=0; i<dim; i++) {
107 if ((args_info.spacing_arg[i] == -1) || (args_info.spacing_arg[i]==0))
108 outputSpacing[i] = inputSpacing[i];
110 outputSpacing[i] = args_info.spacing_arg[i];
114 for(unsigned int i=0; i<dim; i++)
115 outputSize[i] = (int)lrint(inputSize[i]*inputSpacing[i]/outputSpacing[i]);
118 if (args_info.verbose_flag) {
119 std::cout << "Output image will be : " << std::endl;
121 DDV(outputSpacing,dim);
124 // Get sigma option for Gaussian filter
125 std::vector<double> sigma;
126 sigma.resize(args_info.gauss_given);
127 std::copy(args_info.gauss_arg, args_info.gauss_arg+args_info.gauss_given, sigma.begin());
128 if (args_info.gauss_given) {
129 if (args_info.gauss_given != dim) {
130 if (args_info.gauss_given == 1) {
132 for(unsigned int i=0; i<dim; i++) sigma[i] = args_info.gauss_arg[0];
135 std::cerr << "Input image is " << dim << "D, please give " << dim << " sigma numbers for gaussian filter." << std::endl;
142 clitk::VFResampleGenericFilter::Pointer filter = clitk::VFResampleGenericFilter::New();
143 filter->SetInputFilename(args_info.input_arg);
144 filter->SetOutputSize(outputSize);
145 filter->SetOutputSpacing(outputSpacing);
146 filter->SetInterpolationName(args_info.interp_arg);
147 filter->SetBSplineOrder(args_info.order_arg);
148 filter->SetBLUTSampling(args_info.sampling_arg);
149 if (args_info.gauss_given)
150 filter->SetGaussianSigma(sigma);
151 filter->SetOutputFilename(args_info.output_arg);
156 // this is the end my friend
159 //--------------------------------------------------------------------
161 #endif /* end #define CLITKVFRESAMPLE_CXX */