]> Creatis software - clitk.git/blob - tools/clitkBackProjectImageGenericFilter.txx
Debug vvMainWinsow.ui
[clitk.git] / tools / clitkBackProjectImageGenericFilter.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 CLITKBACKPROJECTIMAGEGENERICFILTER_TXX
19 #define CLITKBACKPROJECTIMAGEGENERICFILTER_TXX
20 /**
21    =================================================
22    * @file   clitkBackProjectImageGenericFilter.txx
23    * @author Jef Vandemeulebroucke <jef@creatis.insa-lyon.fr>
24    * @date   30 April 2008
25    * 
26    * @brief Project a 3D image using a cone-beam geometry
27    * 
28    =================================================*/
29
30
31 namespace clitk
32 {
33
34   //================================================================================
35   template <class  InputPixelType> void BackProjectImageGenericFilter::UpdateWithPixelType()
36   {
37    
38     //---------------------------------
39     // Define the images
40     //---------------------------------
41     const unsigned int InputImageDimension=2;
42     typedef itk::Image<InputPixelType, InputImageDimension> InputImageType;
43     typedef itk::ImageFileReader<InputImageType> ImageReaderType;
44     typename  ImageReaderType::Pointer reader = ImageReaderType::New();
45     reader->SetFileName(m_InputFileName);
46     reader->Update();
47     typename InputImageType::Pointer input = reader->GetOutput();
48
49     //Define the output type
50     //JV always float?
51     const unsigned int OutputImageDimension=3;    
52     typedef float OutputPixelType;    
53     typedef itk::Image<OutputPixelType, OutputImageDimension> OutputImageType;
54    
55     //Create the BackProjectImageFilter
56     typedef BackProjectImageFilter<InputImageType, OutputImageType> BackProjectImageFilterType;
57     typename BackProjectImageFilterType::Pointer filter=BackProjectImageFilterType::New();
58    
59
60     //---------------------------------
61     //Pass all the necessary parameters
62     //---------------------------------
63     unsigned int i=0;
64     filter->SetInput(input);
65     if (m_ArgsInfo.threads_given) filter->SetNumberOfThreads(m_ArgsInfo.threads_arg);
66    
67     //Projection parameters
68     OutputImageType::PointType iso;
69     if (m_ArgsInfo.iso_given)
70       {
71         for(i=0;i<OutputImageDimension;i++)
72           iso[i]=m_ArgsInfo.iso_arg[i];
73         filter->SetIsoCenter(iso);
74       }
75     if (m_ArgsInfo.panel_shift_given)
76       filter->SetPanelShift(m_ArgsInfo.panel_shift_arg[0], m_ArgsInfo.panel_shift_arg[1]);
77     filter->SetSourceToScreen(m_ArgsInfo.screen_arg);
78     filter->SetSourceToAxis(m_ArgsInfo.axis_arg); 
79     filter->SetProjectionAngle(m_ArgsInfo.angle_arg);
80     if (m_ArgsInfo.matrix_given)
81       {
82         itk::Matrix<double,4,4> rt =ReadMatrix3D(m_ArgsInfo.matrix_arg);
83         filter->SetRigidTransformMatrix(rt);
84       }
85     filter->SetEdgePaddingValue(static_cast<OutputPixelType>(m_ArgsInfo.pad_arg));
86     
87     //Output image info
88     if (m_ArgsInfo.like_given)
89       {
90         typedef itk::ImageFileReader<OutputImageType> ReaderType;
91         ReaderType::Pointer reader2=ReaderType::New();
92         reader2->SetFileName(m_ArgsInfo.like_arg);
93         reader2->Update();
94
95         OutputImageType::Pointer image=reader2->GetOutput();
96         filter->SetOutputParametersFromImage(image);
97       }
98     else
99       {
100         if(m_ArgsInfo.origin_given)
101           {
102             OutputImageType::PointType origin;
103             for(i=0;i<OutputImageDimension;i++)
104               origin[i]=m_ArgsInfo.origin_arg[i];
105             filter->SetOutputOrigin(origin);
106           }
107         if (m_ArgsInfo.spacing_given)
108           {
109             OutputImageType::SpacingType spacing;
110             for(i=0;i<OutputImageDimension;i++)
111               spacing[i]=m_ArgsInfo.spacing_arg[i];
112             filter->SetOutputSpacing(spacing);
113           }
114         if (m_ArgsInfo.spacing_given)
115           {
116             OutputImageType::SizeType size;
117             for(i=0;i<OutputImageDimension;i++)
118               size[i]=m_ArgsInfo.size_arg[i];
119             filter->SetOutputSize(size);
120           }
121       }
122
123     //Go
124     filter->Update();
125     
126     //Get the output
127     OutputImageType::Pointer output=filter->GetOutput();
128  
129     //Write the output
130     typedef itk::ImageFileWriter<OutputImageType> OutputWriterType;
131     OutputWriterType::Pointer outputWriter = OutputWriterType::New();
132     outputWriter->SetInput(output);
133     outputWriter->SetFileName(m_ArgsInfo.output_arg); 
134     if (m_Verbose)std::cout<<"Writing back projected image..."<<std::endl;
135     outputWriter->Update(); 
136   }
137
138 }
139  
140 #endif //#define CLITKBACKPROJECTIMAGEGENERICFILTER_TXX