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 CLITKCONEBEAMPROJECTIMAGEGENERICFILTER_TXX
19 #define CLITKCONEBEAMPROJECTIMAGEGENERICFILTER_TXX
21 =================================================
22 * @file clitkConeBeamProjectImageGenericFilter.txx
23 * @author Jef Vandemeulebroucke <jef@creatis.insa-lyon.fr>
26 * @brief Project a 3D image using a cone-beam geometry
28 =================================================*/
34 //================================================================================
35 template <class PixelType> void ConeBeamProjectImageGenericFilter::UpdateWithPixelType()
38 //===================================================================
39 // Read the input image
40 const unsigned int InputImageDimension=3;
41 typedef itk::Image<PixelType, InputImageDimension> InputImageType;
42 typedef itk::ImageFileReader<InputImageType> ImageReaderType;
43 typename ImageReaderType::Pointer reader = ImageReaderType::New();
44 reader->SetFileName(m_InputFileName);
46 typename InputImageType::Pointer input = reader->GetOutput();
48 // Define the output type
50 typedef float OutputPixelType;
51 const unsigned int OutputImageDimension=2;
52 typedef itk::Image<OutputPixelType, OutputImageDimension> OutputImageType;
54 // Create the ConeBeamProjectImageFilter
55 typedef clitk::ConeBeamProjectImageFilter<InputImageType, OutputImageType> ConeBeamProjectImageFilterType;
56 typename ConeBeamProjectImageFilterType::Pointer filter=ConeBeamProjectImageFilterType::New();
58 // Pass all the necessary parameters
59 filter->SetInput(input);
60 filter->SetVerbose(m_Verbose);
61 if (m_ArgsInfo.threads_given) filter->SetNumberOfThreads(m_ArgsInfo.threads_arg);
63 // Projection parameters
64 typename InputImageType::PointType iso;
66 if (m_ArgsInfo.iso_given)
67 for(i=0;i<InputImageDimension;i++)
69 iso[i]=m_ArgsInfo.iso_arg[i];
70 filter->SetIsoCenter(iso);
72 filter->SetSourceToScreen(m_ArgsInfo.screen_arg);
73 filter->SetSourceToAxis(m_ArgsInfo.axis_arg);
74 filter->SetProjectionAngle(m_ArgsInfo.angle_arg);
75 if (m_ArgsInfo.matrix_given)
77 itk::Matrix<double,4,4> rt =ReadMatrix3D(m_ArgsInfo.matrix_arg);
78 filter->SetRigidTransformMatrix(rt);
80 filter->SetEdgePaddingValue(static_cast<OutputPixelType>(m_ArgsInfo.pad_arg));
83 if (m_ArgsInfo.like_given)
85 typedef itk::ImageFileReader<OutputImageType> ReaderType;
86 ReaderType::Pointer reader2=ReaderType::New();
87 reader2->SetFileName(m_ArgsInfo.like_arg);
90 OutputImageType::Pointer image=reader2->GetOutput();
91 filter->SetOutputParametersFromImage(image);
95 if (m_ArgsInfo.origin_given)
97 OutputImageType::PointType origin;
98 for(i=0;i<OutputImageDimension;i++)
99 origin[i]=m_ArgsInfo.origin_arg[i];
100 filter->SetOutputOrigin(origin);
102 if (m_ArgsInfo.spacing_given)
104 OutputImageType::SpacingType spacing;
105 for(i=0;i<OutputImageDimension;i++)
106 spacing[i]=m_ArgsInfo.spacing_arg[i];
107 filter->SetOutputSpacing(spacing);
109 if (m_ArgsInfo.size_given)
111 OutputImageType::SizeType size;
112 for(i=0;i<OutputImageDimension;i++)
113 size[i]=m_ArgsInfo.size_arg[i];
114 filter->SetOutputSize(size);
122 OutputImageType::Pointer output=filter->GetOutput();
125 typedef itk::ImageFileWriter<OutputImageType> OutputWriterType;
126 OutputWriterType::Pointer outputWriter = OutputWriterType::New();
127 outputWriter->SetInput(output);
128 outputWriter->SetFileName(m_ArgsInfo.output_arg);
129 if (m_Verbose)std::cout<<"Writing projected image..."<<std::endl;
130 outputWriter->Update();
135 #endif //#define CLITKGENERICIMAGEFILTER