-
- // Initial Gaussian blurring if needed
- typedef itk::RecursiveGaussianImageFilter<InputImageType, InputImageType> GaussianFilterType;
- std::vector<typename GaussianFilterType::Pointer> gaussianFilters;
- if (m_GaussianFilteringEnabled) {
- for(unsigned int i=0; i<dim; i++) {
- if (m_GaussianSigma[i] != 0) {
- gaussianFilters.push_back(GaussianFilterType::New());
- gaussianFilters[i]->SetDirection(i);
- gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder);
- gaussianFilters[i]->SetNormalizeAcrossScale(false);
- gaussianFilters[i]->SetSigma(m_GaussianSigma[i]); // in millimeter !
- if (gaussianFilters.size() == 1) { // first
- gaussianFilters[0]->SetInput(input);
- }
- else {
- gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput());
- }
+ std::cout << "Threads = " << this->GetNumberOfThreads() << std::endl;
+ std::cout << "LastDimIsTime = " << m_LastDimensionIsTime << std::endl;
+ }
+
+ // Instance of the transform object to be passed to the resample
+ // filter. By default, identity transform is applied
+ filter->SetTransform(m_Transform);
+ filter->SetSize(m_OutputSize);
+ filter->SetOutputSpacing(m_OutputSpacing);
+ filter->SetOutputOrigin(input->GetOrigin());
+ filter->SetDefaultPixelValue(m_DefaultPixelValue);
+ filter->SetNumberOfThreads(this->GetNumberOfThreads());
+ filter->SetOutputDirection(input->GetDirection()); // <-- NEEDED if we want to keep orientation (in case of PermutAxes for example)
+
+ // Select interpolator
+ switch (m_InterpolationType) {
+ case NearestNeighbor: {
+ typedef itk::NearestNeighborInterpolateImageFunction<InputImageType, double> InterpolatorType;
+ typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+ filter->SetInterpolator(interpolator);
+ break;
+ }
+ case Linear: {
+ typedef itk::LinearInterpolateImageFunction<InputImageType, double> InterpolatorType;
+ typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+ filter->SetInterpolator(interpolator);
+ break;
+ }
+ case BSpline: {
+ typedef itk::BSplineInterpolateImageFunction<InputImageType, double> InterpolatorType;
+ typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+ interpolator->SetSplineOrder(m_BSplineOrder);
+ filter->SetInterpolator(interpolator);
+ break;
+ }
+ case B_LUT: {
+ typedef itk::BSplineInterpolateImageFunctionWithLUT<InputImageType, double> InterpolatorType;
+ typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+ interpolator->SetSplineOrder(m_BSplineOrder);
+ interpolator->SetLUTSamplingFactor(m_BLUTSamplingFactor);
+ filter->SetInterpolator(interpolator);
+ break;
+ }
+ }
+
+ // Initial Gaussian blurring if needed
+ // TODO : replace by itk::DiscreteGaussianImageFilter for small sigma
+ typedef itk::RecursiveGaussianImageFilter<InputImageType, InputImageType> GaussianFilterType;
+ std::vector<typename GaussianFilterType::Pointer> gaussianFilters;
+ if (m_GaussianFilteringEnabled) {
+ for(unsigned int i=0; i<dim; i++) {
+ if (m_GaussianSigma[i] != 0) {
+ gaussianFilters.push_back(GaussianFilterType::New());
+ gaussianFilters[i]->SetDirection(i);
+ gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder);
+ gaussianFilters[i]->SetNormalizeAcrossScale(false);
+ gaussianFilters[i]->SetSigma(m_GaussianSigma[i]); // in millimeter !
+ if (gaussianFilters.size() == 1) { // first
+ gaussianFilters[0]->SetInput(input);
+ } else {
+ gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput());