X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=tools%2FclitkCropImageGenericFilter.txx;h=b5b80ee97ce08ac3f95534ff79eba6462cb44e20;hb=7dd4f61d0341af69d3c6ddfb115a219bc54284c3;hp=b35e5574a2f72aa13340e1986ade1d67b02faad9;hpb=a26cd8a19e1b9ad8344ab501436045f171a73713;p=clitk.git diff --git a/tools/clitkCropImageGenericFilter.txx b/tools/clitkCropImageGenericFilter.txx index b35e557..b5b80ee 100755 --- a/tools/clitkCropImageGenericFilter.txx +++ b/tools/clitkCropImageGenericFilter.txx @@ -14,139 +14,144 @@ - BSD See included LICENSE.txt file - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html -======================================================================-====*/ -#ifndef clitkCropImageGenericFilter_txx -#define clitkCropImageGenericFilter_txx + ======================================================================-====*/ -/* ================================================= - * @file clitkCropImageGenericFilter.txx - * @author - * @date - * - * @brief - * - ===================================================*/ +#include "clitkImageCommon.h" - -namespace clitk +//-------------------------------------------------------------------- +template +clitk::CropImageGenericFilter::CropImageGenericFilter(): + ImageToImageGenericFilter("CropImage") { - - //------------------------------------------------------------------- - // Update with the number of dimensions - //------------------------------------------------------------------- - template - void - CropImageGenericFilter::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(); - } + // Default values + cmdline_parser_clitkCropImage_init(&mArgsInfo); + InitializeImageType<2>(); + InitializeImageType<3>(); + InitializeImageType<4>(); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +template +void clitk::CropImageGenericFilter::InitializeImageType() +{ + ADD_DEFAULT_IMAGE_TYPES(Dim); + //ADD_IMAGE_TYPE(Dim, uchar); + //ADD_IMAGE_TYPE(Dim, short); + // ADD_IMAGE_TYPE(Dim, uint); + // ADD_IMAGE_TYPE(Dim, ulong); + // ADD_IMAGE_TYPE(Dim, int); + // ADD_IMAGE_TYPE(Dim, float); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +template +void clitk::CropImageGenericFilter::SetArgsInfo(const ArgsInfoType & a) +{ + mArgsInfo=a; + SetIOVerbose(mArgsInfo.verbose_flag); + if (mArgsInfo.imagetypes_flag) this->PrintAvailableImageTypes(); + if (mArgsInfo.input_given) AddInputFilename(mArgsInfo.input_arg); + if (mArgsInfo.output_given) AddOutputFilename(mArgsInfo.output_arg); +} +//-------------------------------------------------------------------- + + +//-------------------------------------------------------------------- +// Update with the number of dimensions and the pixeltype +//-------------------------------------------------------------------- +template +template +void clitk::CropImageGenericFilter::UpdateWithInputImageType() +{ + // Reading input + typename ImageType::Pointer input = this->template GetInput(0); + + // Check options + if (mArgsInfo.BG_given && mArgsInfo.like_given) + clitkExceptionMacro("Do not use --BG and --like at the same time"); + + // Prepare output + typename ImageType::Pointer output; + + // ------------------------------------------------ + if (mArgsInfo.BG_given) { // AutoCrop filter + if (mArgsInfo.boundingBox_given) + clitkExceptionMacro("Do not use --BG and --boundingBox at the same time"); + if (mArgsInfo.lower_given) + clitkExceptionMacro("Do not use --BG and --lower at the same time"); + if (mArgsInfo.upper_given) + clitkExceptionMacro("Do not use --BG and --upper at the same time"); + typedef clitk::AutoCropFilter FilterType; + typename FilterType::Pointer filter = FilterType::New(); + filter->SetInput(input); + filter->SetBackgroundValue(mArgsInfo.BG_arg); + filter->Update(); + output = filter->GetOutput(); + } + else { + // ------------------------------------------------ + if (mArgsInfo.like_given) { // CropLike filter + if (mArgsInfo.boundingBox_given) + clitkExceptionMacro("Do not use --like and --boundingBox at the same time"); + if (mArgsInfo.lower_given) + clitkExceptionMacro("Do not use --like and --lower at the same time"); + if (mArgsInfo.upper_given) + clitkExceptionMacro("Do not use --like and --upper at the same time"); + typedef clitk::CropLikeImageFilter FilterType; + typename FilterType::Pointer filter = FilterType::New(); + filter->SetInput(input); + filter->SetCropLikeFilename(mArgsInfo.like_arg); + filter->SetBackgroundValue(mArgsInfo.BGLike_arg); + filter->Update(); + output = filter->GetOutput(); + } + else { + // ------------------------------------------------ + typename ImageType::SizeType lSize; + typename ImageType::SizeType uSize; + if (mArgsInfo.boundingBox_given) { + for(unsigned int i=0; iGetLargestPossibleRegion().GetSize()[i]-mArgsInfo.boundingBox_arg[2*i+1]-1; + } } - - else if (Components==3) - { - if (m_Verbose) std::cout << "Launching filter in "<< Dimension <<"D and 3D float (DVF)" << std::endl; - UpdateWithDimAndPixelType >(); + else { + if (mArgsInfo.lower_given) { + for(unsigned int i=0; i(mArgsInfo.lower_arg[i]); + } + else lSize.Fill(0); + if (mArgsInfo.upper_given) { + for(unsigned int i=0; i(mArgsInfo.upper_arg[i]); + } + else uSize.Fill(0); } - - else std::cerr<<"Number of components is "< CropImageFilterType; + typename CropImageFilterType::Pointer filter=CropImageFilterType::New(); + filter->SetInput(input); + filter->SetLowerBoundaryCropSize(lSize); + filter->SetUpperBoundaryCropSize(uSize); + filter->Update(); + output = filter->GetOutput(); + } } - - //------------------------------------------------------------------- - // Update with the number of dimensions and the pixeltype - //------------------------------------------------------------------- - template - void - CropImageGenericFilter::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::CropImageFilter CropImageFilterType; - typename CropImageFilterType::Pointer cropFilter=CropImageFilterType::New(); - cropFilter->SetInput(input); - typename InputImageType::SizeType lSize, uSize; - - if (m_ArgsInfo.boundingBox_given) - { - for(unsigned int i=0;iGetLargestPossibleRegion().GetSize()[i]-m_ArgsInfo.boundingBox_arg[2*i+1]-1; - } - } - else - { - - if (m_ArgsInfo.lower_given) - for(unsigned int i=0;i(m_ArgsInfo.lower_arg[i]); - else lSize.Fill(0); - - if (m_ArgsInfo.upper_given) - for(unsigned int i=0;i(m_ArgsInfo.upper_arg[i]); - else uSize.Fill(0); - } - - cropFilter->SetLowerBoundaryCropSize(lSize); - cropFilter->SetUpperBoundaryCropSize(uSize); - cropFilter->Update(); - typename OutputImageType::Pointer output= cropFilter->GetOutput(); - - // Origin? - typename OutputImageType::PointType origin; + // Force origin if needed + if (mArgsInfo.origin_flag) { + typename ImageType::PointType origin; origin.Fill(itk::NumericTraits::Zero); - if (m_ArgsInfo.origin_flag) - { - output->SetOrigin(origin); - output->Update(); - if (m_Verbose) std::cout<<"Setting origin to "<< origin<<"..."< WriterType; - typename WriterType::Pointer writer = WriterType::New(); - writer->SetFileName(m_ArgsInfo.output_arg); - writer->SetInput(output); - writer->Update(); + output->SetOrigin(origin); } + // Write/Save results + this->template SetNextOutput(output); +} +//-------------------------------------------------------------------- + -}//end clitk - -#endif //#define clitkCropImageGenericFilter_txx