X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=filters%2FclitkImageResampleGenericFilter.txx;h=705ee4c9ef1e90bd1bc0ab266d02c00abb04f04f;hb=8abe9edbdc63a33f8fbb1f321073b762e08be9aa;hp=bdc33c0f20ef21951748d82179716555a446237f;hpb=931a42358442f4ee4f314613c991c838d4b4e3b7;p=clitk.git diff --git a/filters/clitkImageResampleGenericFilter.txx b/filters/clitkImageResampleGenericFilter.txx index bdc33c0..705ee4c 100644 --- a/filters/clitkImageResampleGenericFilter.txx +++ b/filters/clitkImageResampleGenericFilter.txx @@ -1,192 +1,33 @@ +/*========================================================================= + 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://oncora1.lyon.fnclcc.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 CLITKIMAGERESAMPLEGENERICFILTER_TXX #define CLITKIMAGERESAMPLEGENERICFILTER_TXX - /** ------------------------------------------------= * @file clitkImageResampleGenericFilter.txx * @author David Sarrut * @date 23 Feb 2008 08:40:11 - * - * @brief - * - * + * + * @brief + * + * ------------------------------------------------=*/ -//-------------------------------------------------------------------- -template -void ImageResampleGenericFilter::Update_WithDim() { - -#define TRY_TYPE(TYPE) \ - if (IsSameType(mPixelTypeName)) { Update_WithDimAndPixelType(); return; } - TRY_TYPE(signed char); - TRY_TYPE(uchar); - TRY_TYPE(short); - TRY_TYPE(ushort); - TRY_TYPE(int); - TRY_TYPE(unsigned int); - TRY_TYPE(float); - TRY_TYPE(double); -#undef TRY_TYPE - - std::string list = CreateListOfTypes(); - std::cerr << "Error, I don't know the type '" << mPixelTypeName << "' for the input image '" - << mInputFilenames[0] << "'." << std::endl << "Known types are " << list << std::endl; - exit(0); -} -//-------------------------------------------------------------------- - -//-------------------------------------------------------------------- -template -void ImageResampleGenericFilter::Update_WithDimAndPixelType() { - // Reading input - typedef itk::Image ImageType; - //typename ImageType::Pointer input = clitk::readImage(mInputFilenames, mIOVerbose); - typename ImageType::Pointer input = this->GetInput(0); - - // Main filter - typename ImageType::Pointer outputImage = ComputeImage(input); - - // Write results - this->SetNextOutput(outputImage); - //clitk::writeImage(outputImage, mOutputFilename, mIOVerbose); -} -//-------------------------------------------------------------------- - -//-------------------------------------------------------------------- -template -typename ImageType::Pointer -ImageResampleGenericFilter::ComputeImage(typename ImageType::Pointer inputImage) { - - // Warning - if (!std::numeric_limits::is_signed) { - if ((mInterpolatorName == "bspline") || (mInterpolatorName == "blut")) { - std::cerr << "Warning : input pixel type is not signed, use bspline interpolation at your own risk ..." << std::endl; - } - } - - // Check options - static unsigned int dim = ImageType::ImageDimension; - if (mOutputSize.size() != dim) { - std::cerr << "Please set size with " << dim << " dimensions." << std::endl; - return NULL; - } - if (mOutputSpacing.size() != dim) { - std::cerr << "Please set spacing with " << dim << " dimensions." << std::endl; - return NULL; - } - mOutputOrigin.resize(dim); - - if (mApplyGaussianFilterBefore && mSigma.size() != dim) { - std::cerr << "Please set sigma with " << dim << " dimensions." << std::endl; - return NULL; - } - - // Some typedefs - typedef typename ImageType::SizeType SizeType; - typedef typename ImageType::SpacingType SpacingType; - typedef typename ImageType::PointType PointType; - - - // Create Image Filter - typedef itk::ResampleImageFilter FilterType; - typename FilterType::Pointer filter = FilterType::New(); - - // Instance of the transform object to be passed to the resample - // filter. By default, identity transform is applied - typedef itk::AffineTransform TransformType; - typename TransformType::Pointer transform = TransformType::New(); - filter->SetTransform(transform); - - // Set filter's parameters - SizeType outputSize; - SpacingType outputSpacing; - PointType outputOrigin; - for(unsigned int i=0; iGetOrigin()[i]; - } - - filter->SetSize(outputSize); - filter->SetOutputSpacing(outputSpacing); - filter->SetOutputOrigin(outputOrigin); - filter->SetDefaultPixelValue(static_cast(mDefaultPixelValue));//DS TODO//JV comme ça? - - // Select interpolator - if (mInterpolatorName == "nn") { - typedef itk::NearestNeighborInterpolateImageFunction InterpolatorType; - typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); - filter->SetInterpolator(interpolator); - } - else { - if (mInterpolatorName == "linear") { - typedef itk::LinearInterpolateImageFunction InterpolatorType; - typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); - filter->SetInterpolator(interpolator); - } - else { - if (mInterpolatorName == "bspline") { - typedef itk::BSplineInterpolateImageFunction InterpolatorType; - typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); - interpolator->SetSplineOrder(mBSplineOrder); - filter->SetInterpolator(interpolator); - } - else { - if (mInterpolatorName == "blut") { - typedef itk::BSplineInterpolateImageFunctionWithLUT InterpolatorType; - typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); - interpolator->SetSplineOrder(mBSplineOrder); - interpolator->SetLUTSamplingFactor(mSamplingFactors[0]); - filter->SetInterpolator(interpolator); - } - else { - std::cerr << "Sorry, I do not know the interpolator '" << mInterpolatorName - << "'. Known interpolators are : nn, linear, bspline, blut" << std::endl; - exit(0); - } - } - } - } - - // Build initial Gaussian bluring (if needed) - typedef itk::RecursiveGaussianImageFilter GaussianFilterType; - std::vector gaussianFilters; - if (mApplyGaussianFilterBefore) { - for(unsigned int i=0; iSetDirection(i); - gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder); - gaussianFilters[i]->SetNormalizeAcrossScale(false); - gaussianFilters[i]->SetSigma(mSigma[i]); // in millimeter ! - // Set input - if (i==0) gaussianFilters[i]->SetInput(inputImage); - else gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput()); - } - filter->SetInput(gaussianFilters[ImageType::ImageDimension-1]->GetOutput()); - } - else { - filter->SetInput(inputImage); - } - - // Go ! - try { - filter->Update(); - } - catch( itk::ExceptionObject & err ) { - std::cerr << "Error while filtering " << mInputFilenames[0].c_str() - << " " << err << std::endl; - exit(0); - } - - // Return result - return filter->GetOutput(); - -} -//-------------------------------------------------------------------- - - #endif /* end #define CLITKIMAGERESAMPLEGENERICFILTER_TXX */