]> Creatis software - clitk.git/blob - tools/clitkBlurImageGenericFilter.txx
close #59 #58 Change clitkAffineTransform --transform_grid
[clitk.git] / tools / clitkBlurImageGenericFilter.txx
1 /*=========================================================================
2   Program:   vv                     http://www.creatis.insa-lyon.fr/rio/vv
3
4   Authors belong to:
5   - University of LYON              http://www.universite-lyon.fr/
6   - Léon Bérard cancer center       http://www.centreleonberard.fr
7   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
8
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.
12
13   It is distributed under dual licence
14
15   - BSD        See included LICENSE.txt file
16   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ===========================================================================**/
18 #ifndef clitkBlurImageGenericFilter_txx
19 #define clitkBlurImageGenericFilter_txx
20
21 /* =================================================
22  * @file   clitkBlurImageGenericFilter.txx
23  * @author Jef Vandemeulebroucke <jef@creatis.insa-lyon.fr>
24  * @date   29 june 2009
25  *
26  * @brief
27  *
28  ===================================================*/
29
30 // itk include
31 #include "itkDiscreteGaussianImageFilter.h"
32 #include <clitkCommon.h>
33
34 namespace clitk
35 {
36
37 //--------------------------------------------------------------------
38 template<class args_info_type>
39 BlurImageGenericFilter<args_info_type>::BlurImageGenericFilter():
40   ImageToImageGenericFilter<Self>("BlurImage")
41 {
42   InitializeImageType<2>();
43   InitializeImageType<3>();
44   //InitializeImageType<4>();
45 }
46 //--------------------------------------------------------------------
47
48
49 //--------------------------------------------------------------------
50 template<class args_info_type>
51 template<unsigned int Dim>
52 void BlurImageGenericFilter<args_info_type>::InitializeImageType()
53 {
54   ADD_DEFAULT_IMAGE_TYPES(Dim);
55 }
56 //--------------------------------------------------------------------
57
58
59 //--------------------------------------------------------------------
60 template<class args_info_type>
61 void BlurImageGenericFilter<args_info_type>::SetArgsInfo(const args_info_type & a)
62 {
63   mArgsInfo=a;
64   this->SetIOVerbose(mArgsInfo.verbose_flag);
65   if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes();
66
67   if (mArgsInfo.input_given) {
68     this->SetInputFilename(mArgsInfo.input_arg);
69   }
70   if (mArgsInfo.output_given) {
71     this->SetOutputFilename(mArgsInfo.output_arg);
72   }
73 }
74 //--------------------------------------------------------------------
75
76 //--------------------------------------------------------------------
77 // Update with the number of dimensions and the pixeltype
78 //--------------------------------------------------------------------
79 template<class args_info_type>
80 template<class InputImageType>
81 void
82 BlurImageGenericFilter<args_info_type>::UpdateWithInputImageType()
83 {
84   const unsigned int dim = InputImageType::ImageDimension;
85   double varianceArray[dim];
86
87   //std::cout<<"mArgsInfo.variance_given"<<mArgsInfo.variance_given<<std::endl;
88
89
90   //if (mArgsInfo.variance_given != dim) {
91   //  std::cerr << "The number of variance parameters must be equal to the image dimension." << std::endl;
92   //  return;
93   //}
94
95   if (mArgsInfo.variance_given && mArgsInfo.variance_given == dim) {
96     for (unsigned int i = 0; i < dim; i++) {
97       //std::cout<<"mArgsInfo.variance_arg[i]"<<mArgsInfo.variance_arg[i]<<std::endl;
98       varianceArray[i] = mArgsInfo.variance_arg[i];
99     }
100   } else if (mArgsInfo.variance_given && mArgsInfo.variance_given == 1) {
101       for (unsigned int i = 0; i < dim; i++) {
102           varianceArray[i] = mArgsInfo.variance_arg[0];
103       }
104   } else {
105       for (unsigned int i = 0; i < dim; i++) {
106           varianceArray[i] = 1.0;
107       }
108   }
109   // Reading input
110   typename InputImageType::Pointer input = this->template GetInput<InputImageType>(0);
111
112   // Main filter
113   typedef typename InputImageType::PixelType PixelType;
114   typedef itk::Image<float, InputImageType::ImageDimension> OutputImageType;
115
116   // Filter
117   typedef itk::DiscreteGaussianImageFilter<InputImageType, OutputImageType> DiscreteGaussianImageFilterType;
118   typename DiscreteGaussianImageFilterType::Pointer gaussianFilter=DiscreteGaussianImageFilterType::New();
119   gaussianFilter->SetInput(input);
120   gaussianFilter->SetVariance(varianceArray);
121   gaussianFilter->SetUseImageSpacing(true);
122   gaussianFilter->Update();
123
124   //std::cout<<"variance value="<<gaussianFilter->GetVariance()<<std::endl;
125
126   // Write/Save results
127   this->template SetNextOutput<OutputImageType>(gaussianFilter->GetOutput());
128 }
129 //--------------------------------------------------------------------
130
131
132 }//end clitk
133
134 #endif //#define clitkBlurImageGenericFilter_txx