1 /*-------------------------------------------------------------------------
6 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
7 l'Image). All rights reserved. See Doc/License.txt or
8 http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notices for more information.
14 -------------------------------------------------------------------------*/
16 #ifndef CLITKIMAGERESAMPLE_CXX
17 #define CLITKIMAGERESAMPLE_CXX
20 ------------------------------------------------=
21 * @file clitkImageResample.cxx
22 * @author David Sarrut <David.Sarrut@creatis.insa-lyon.fr>
23 * @date 23 Feb 2008 08:37:53
24 ------------------------------------------------=*/
27 #include "clitkImageResample_ggo.h"
29 #include "clitkImageResampleGenericFilter.h"
31 //--------------------------------------------------------------------
32 int main(int argc, char * argv[]) {
35 GGO(clitkImageResample, args_info);
38 // Read input image header to check image dimension
39 itk::ImageIOBase::Pointer header = clitk::readImageHeader(args_info.input_arg);
40 unsigned int dim = header->GetNumberOfDimensions();
41 std::string pixelTypeName = header->GetComponentTypeAsString(header->GetComponentType());
43 // Print image info if verbose
44 if (args_info.verbose_flag) {
45 std::cout << "Input image <" << args_info.input_arg << "> is ";
46 clitk::printImageHeader(header, std::cout);
47 std::cout << std::endl;
50 // Get input size/spacing
51 std::vector<int> inputSize;
52 std::vector<double> inputSpacing;
53 inputSize.resize(dim);
54 inputSpacing.resize(dim);
55 for(unsigned int i=0; i<dim; i++) {
56 inputSpacing[i] = header->GetSpacing(i);
57 inputSize[i] = header->GetDimensions(i);
61 std::vector<int> outputSize;
62 std::vector<double> outputSpacing;
63 outputSize.resize(dim);
64 outputSpacing.resize(dim);
67 if (!args_info.size_given && !args_info.spacing_given) {
68 std::cerr << "Please indicate output size or spacing." << std::endl;
73 if (args_info.size_given && args_info.spacing_given) {
74 std::cerr << "Please indicate only output size or spacing, not both." << std::endl;
78 // Size is given and not spacing
79 if (args_info.size_given && !args_info.spacing_given) {
80 if (args_info.size_given != dim) {
81 std::cerr << "Input image is " << dim << "D, please give " << dim << " size numbers." << std::endl;
84 for(unsigned int i=0; i<dim; i++) {
85 if ((args_info.size_arg[i] == -1) || (args_info.size_arg[i]==0))
86 outputSize[i] = inputSize[i];
88 outputSize[i] = args_info.size_arg[i];
89 outputSpacing[i] = inputSize[i]*inputSpacing[i]/outputSize[i];
93 // Spacing is given and not size
94 if (!args_info.size_given && args_info.spacing_given) {
95 if (args_info.spacing_given != dim) {
96 if (args_info.spacing_given == 1) {
97 for(unsigned int i=0; i<dim; i++) outputSpacing[i] = args_info.spacing_arg[0];
100 std::cerr << "Input image is " << dim << "D, please give " << dim << " spacing numbers." << std::endl;
105 for(unsigned int i=0; i<dim; i++) {
106 if ((args_info.spacing_arg[i] == -1) || (args_info.spacing_arg[i]==0))
107 outputSpacing[i] = inputSpacing[i];
109 outputSpacing[i] = args_info.spacing_arg[i];
113 for(unsigned int i=0; i<dim; i++)
114 outputSize[i] = (int)lrint(inputSize[i]*inputSpacing[i]/outputSpacing[i]);
117 if (args_info.verbose_flag) {
118 std::cout << "Output image will be : " << std::endl;
120 DDV(outputSpacing,dim);
123 // Get sigma option for Gaussian filter
124 std::vector<double> sigma;
125 sigma.resize(args_info.gauss_given);
126 std::copy(args_info.gauss_arg, args_info.gauss_arg+args_info.gauss_given, sigma.begin());
127 if (args_info.gauss_given) {
128 if (args_info.gauss_given != dim) {
129 if (args_info.gauss_given == 1) {
131 for(unsigned int i=0; i<dim; i++) sigma[i] = args_info.gauss_arg[0];
134 std::cerr << "Input image is " << dim << "D, please give " << dim << " sigma numbers for gaussian filter." << std::endl;
141 clitk::ImageResampleGenericFilter::Pointer filter = clitk::ImageResampleGenericFilter::New();
142 filter->SetInputFilename(args_info.input_arg);
143 filter->SetOutputSize(outputSize);
144 filter->SetOutputSpacing(outputSpacing);
145 filter->SetInterpolationName(args_info.interp_arg);
146 filter->SetBSplineOrder(args_info.order_arg);
147 filter->SetBLUTSampling(args_info.sampling_arg);
148 if (args_info.gauss_given)
149 filter->SetGaussianSigma(sigma);
150 filter->SetOutputFilename(args_info.output_arg);
155 // this is the end my friend
158 //--------------------------------------------------------------------
160 #endif /* end #define CLITKIMAGERESAMPLE_CXX */