/*========================================================================= 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 CLITKRESAMPLEIMAGEGENERICFILTER_TXX #define CLITKRESAMPLEIMAGEGENERICFILTER_TXX // clitk #include "clitkResampleImageWithOptionsFilter.h" //-------------------------------------------------------------------- // Update with the number of dimensions and the pixeltype //-------------------------------------------------------------------- template void clitk::ResampleImageGenericFilter::UpdateWithInputImageType() { // Reading input typename InputImageType::Pointer input = this->template GetInput(0); // Main filter typedef typename InputImageType::PixelType PixelType; typedef InputImageType OutputImageType; // to change to float is user ask it (?) // Filter typedef clitk::ResampleImageWithOptionsFilter ResampleImageFilterType; typename ResampleImageFilterType::Pointer filter = ResampleImageFilterType::New(); filter->SetInput(input); // Set Verbose filter->SetVerboseOptions(mArgsInfo.verbose_flag); // Set size / spacing static const unsigned int dim = OutputImageType::ImageDimension; typename OutputImageType::SpacingType spacing; typename OutputImageType::SizeType size; typename OutputImageType::PointType origin; typename OutputImageType::DirectionType direction; if (mArgsInfo.like_given) { itk::ImageIOBase::Pointer header = clitk::readImageHeader(mArgsInfo.like_arg); if (header) { for(unsigned int i=0; iGetSpacing(i); size[i] = header->GetDimensions(i); origin[i] = header->GetOrigin(i); } for(unsigned int i=0; iGetDirection(i)[j]; } } filter->SetOutputSpacing(spacing); filter->SetOutputSize(size); filter->SetOutputOrigin(origin); filter->SetOutputDirection(direction); } else { std::cerr << "*** Warning : I could not read '" << mArgsInfo.like_arg << "' ***" << std::endl; exit(0); } } else { if (mArgsInfo.spacing_given == 1) { filter->SetOutputIsoSpacing(mArgsInfo.spacing_arg[0]); } else if ((mArgsInfo.spacing_given != 0) && (mArgsInfo.size_given != 0)) { std::cerr << "Error: use spacing or size, not both." << std::endl; exit(0); } else if (mArgsInfo.spacing_given) { if ((mArgsInfo.spacing_given != 0) && (mArgsInfo.spacing_given != dim)) { std::cerr << "Error: spacing should have one or " << dim << " values." << std::endl; exit(0); } for(unsigned int i=0; iSetOutputSpacing(spacing); } else if (mArgsInfo.size_given) { if ((mArgsInfo.size_given != 0) && (mArgsInfo.size_given != dim)) { std::cerr << "Error: size should have " << dim << " values." << std::endl; exit(0); } for(unsigned int i=0; iSetOutputSize(size); } for(unsigned int i=0; iGetOrigin()[i]; } for(unsigned int i=0; iGetDirection()[i][j]; } } filter->SetOutputOrigin(origin); filter->SetOutputDirection(direction); } // Set temporal dimension filter->SetLastDimensionIsTime(mArgsInfo.time_flag); // Set Gauss filter->SetGaussianFilteringEnabled(mArgsInfo.autogauss_flag); if (mArgsInfo.gauss_given != 0) { typename ResampleImageFilterType::GaussianSigmaType g; for(unsigned int i=0; iSetGaussianSigma(g); } // Set Interpolation std::string interp = std::string(mArgsInfo.interp_arg); if (interp == "nn") { filter->SetInterpolationType(ResampleImageFilterType::NearestNeighbor); } else { if (interp == "linear") { filter->SetInterpolationType(ResampleImageFilterType::Linear); } else { if (interp == "bspline") { filter->SetInterpolationType(ResampleImageFilterType::BSpline); } else { if (interp == "blut") { filter->SetInterpolationType(ResampleImageFilterType::B_LUT); } else { if (interp == "windowed sinc") { filter->SetInterpolationType(ResampleImageFilterType::WSINC); } else { std::cerr << "Error. I do not know interpolation '" << mArgsInfo.interp_arg << "'. Choose among: nn, linear, bspline, blut, windowed sinc" << std::endl; exit(0); } } } } } // Set default pixel value filter->SetDefaultPixelValue(mArgsInfo.default_arg); // Set thread if (mArgsInfo.thread_given) { filter->SetNumberOfThreads(mArgsInfo.thread_arg); } // Go ! filter->Update(); typename OutputImageType::Pointer outputImage = filter->GetOutput(); this->template SetNextOutput(outputImage); } //-------------------------------------------------------------------- #endif /* end #define CLITKRESAMPLEIMAGEGENERICFILTER_TXX */