/*========================================================================= Program: vv http://www.creatis.insa-lyon.fr/rio/vv Authors belong to: - University of LYON http://www.universite-lyon.fr/ - Léon Bérard cancer center http://www.centreleonberard.fr - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the copyright notices for more information. It is distributed under dual licence - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html ===========================================================================**/ #ifndef clitkBSplineCoefficientsToValuesGenericFilter_txx #define clitkBSplineCoefficientsToValuesGenericFilter_txx #include /* ================================================= * @file clitkBSplineCoefficientsToValuesGenericFilter.txx * @author * @date * * @brief * ===================================================*/ namespace clitk { //------------------------------------------------------------------- // Update with the number of dimensions //------------------------------------------------------------------- template void BSplineCoefficientsToValuesGenericFilter::UpdateWithDim(std::string PixelType, unsigned int Components) { if (m_Verbose) std::cout << "Image was detected to be "<(); // } // else if(PixelType == "unsigned_short"){ // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_short..." << std::endl; // UpdateWithDimAndPixelType(); // } // else if (PixelType == "unsigned_char"){ // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and unsigned_char..." << std::endl; // UpdateWithDimAndPixelType(); // } // else if (PixelType == "char"){ // if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and signed_char..." << std::endl; // UpdateWithDimAndPixelType(); // } // else { if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and float..." << std::endl; UpdateWithDimAndPixelType(); // } } else if (Components==3) { if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and 3D float (DVF)" << std::endl; UpdateWithDimAndVectorType >(); } else std::cerr<<"Number of components is "< void BSplineCoefficientsToValuesGenericFilter::UpdateWithDimAndPixelType() { // ImageTypes typedef itk::Image InputImageType; typedef itk::Image OutputImageType; // Read the input typedef itk::ImageFileReader InputReaderType; typename InputReaderType::Pointer reader = InputReaderType::New(); reader->SetFileName( m_InputFileName); reader->Update(); typename InputImageType::Pointer input= reader->GetOutput(); //Filter typedef itk::ResampleImageFilter< InputImageType,OutputImageType > ResampleFilterType; typename ResampleFilterType::Pointer resampler = ResampleFilterType::New(); // Properties if (m_ArgsInfo.like_given) { typename InputReaderType::Pointer likeReader=InputReaderType::New(); likeReader->SetFileName(m_ArgsInfo.like_arg); likeReader->Update(); resampler->SetOutputParametersFromImage(likeReader->GetOutput()); if (m_Verbose)std::cout<<"Resampling output like "<GetLargestPossibleRegion().GetSize(); if (m_Verbose)std::cout<<"Setting the size to "<GetSpacing(); if (m_Verbose)std::cout<<"Setting the spacing to "<GetOrigin(); if (m_Verbose)std::cout<<"Setting the origin to "<SetSize( outputSize ); resampler->SetOutputSpacing( outputSpacing ); resampler->SetOutputOrigin( outputOrigin ); } // Interp : coeff typedef itk::BSplineResampleImageFunction InterpolatorType; typename InterpolatorType::Pointer interpolator=InterpolatorType::New(); interpolator->SetSplineOrder(m_ArgsInfo.order_arg); // Set resampler->SetInterpolator( interpolator); resampler->SetDefaultPixelValue( static_cast(m_ArgsInfo.pad_arg) ); resampler->SetInput( input ); // Update try { resampler->Update(); } catch(itk::ExceptionObject) { std::cerr<<"Error resampling the image"<GetOutput(); // Output typedef itk::ImageFileWriter WriterType; typename WriterType::Pointer writer = WriterType::New(); writer->SetFileName(m_ArgsInfo.output_arg); writer->SetInput(output); writer->Update(); } //------------------------------------------------------------------- // Update with the number of dimensions and the Vectortype //------------------------------------------------------------------- template void BSplineCoefficientsToValuesGenericFilter::UpdateWithDimAndVectorType() { // ImageTypes typedef itk::Image InputImageType; typedef itk::Image OutputImageType; // Read the input typedef itk::ImageFileReader InputReaderType; typename InputReaderType::Pointer reader = InputReaderType::New(); reader->SetFileName( m_InputFileName); reader->Update(); typename InputImageType::Pointer input= reader->GetOutput(); //Filter typedef itk::VectorResampleImageFilter< InputImageType,OutputImageType > ResampleFilterType; typename ResampleFilterType::Pointer resampler = ResampleFilterType::New(); // Properties if (m_ArgsInfo.like_given) { typename InputReaderType::Pointer likeReader=InputReaderType::New(); likeReader->SetFileName(m_ArgsInfo.like_arg); likeReader->Update(); // Set resampler->SetSize( likeReader->GetOutput()->GetLargestPossibleRegion().GetSize() ); resampler->SetOutputSpacing(likeReader->GetOutput()->GetSpacing() ); resampler->SetOutputOrigin( likeReader->GetOutput()->GetOrigin() ); if (m_Verbose)std::cout<<"Resampling output like "<GetLargestPossibleRegion().GetSize(); if (m_Verbose)std::cout<<"Setting the size to "<GetSpacing(); if (m_Verbose)std::cout<<"Setting the spacing to "<GetOrigin(); if (m_Verbose)std::cout<<"Setting the origin to "<SetSize( outputSize ); resampler->SetOutputSpacing( outputSpacing ); resampler->SetOutputOrigin( outputOrigin ); } // Interp : coeff typedef clitk::VectorBSplineResampleImageFunction InterpolatorType; typename InterpolatorType::Pointer interpolator=InterpolatorType::New(); interpolator->SetSplineOrder(m_ArgsInfo.order_arg); // Set resampler->SetInterpolator( interpolator); resampler->SetDefaultPixelValue( static_cast(m_ArgsInfo.pad_arg) ); resampler->SetInput( input ); // Update try { resampler->Update(); } catch(itk::ExceptionObject) { std::cerr<<"Error resampling the image"<GetOutput(); //writeImage(output, "/home/jef/tmp/output1.mhd", true); // Matrix Transform if(m_ArgsInfo.matrix_given) { #if ITK_VERSION_MAJOR >= 4 typedef itk::TransformToDisplacementFieldSource ConvertorType; #else typedef itk::TransformToDeformationFieldSource ConvertorType; #endif typename ConvertorType::Pointer filter= ConvertorType::New(); filter->SetOutputParametersFromImage(output); typedef itk::AffineTransform TransformType; typename TransformType::Pointer transform =TransformType::New(); itk::Matrix homMatrix= ReadMatrix( m_ArgsInfo.matrix_arg); itk::Matrix matrix =GetRotationalPartMatrix( homMatrix); itk::Vector offset= GetTranslationPartMatrix( homMatrix); transform->SetMatrix(matrix); transform->SetOffset(offset); filter->SetTransform(transform); filter->Update(); typename OutputImageType::Pointer output2=filter->GetOutput(); //writeImage(output2, "/home/jef/tmp/output2.mhd", true); // Add typedef itk::AddImageFilter< OutputImageType, OutputImageType, OutputImageType > AddType; typename AddType::Pointer adder= AddType::New(); adder->SetInput(output); adder->SetInput(1,output2); adder->Update(); output=adder->GetOutput(); } // Output typedef itk::ImageFileWriter WriterType; typename WriterType::Pointer writer = WriterType::New(); writer->SetFileName(m_ArgsInfo.output_arg); writer->SetInput(output); writer->Update(); } }//end clitk #endif //#define clitkBSplineCoefficientsToValuesGenericFilter_txx