+ //Origin
+ typename OutputImageType::PointType outputOrigin;
+ if (m_ArgsInfo.origin_given) {
+ for(unsigned int i=0; i< Dimension; i++)
+ outputOrigin[i]=m_ArgsInfo.origin_arg[i];
+ } else outputOrigin=input->GetOrigin();
+
+ //Direction
+ typename OutputImageType::DirectionType outputDirection;
+ if (m_ArgsInfo.direction_given) {
+ for(unsigned int j=0; j< Dimension; j++)
+ for(unsigned int i=0; i< Dimension; i++)
+ outputDirection[j][i]=m_ArgsInfo.direction_arg[i+Dimension*j];
+ } else outputDirection=input->GetDirection();
+
+ // Set
+ resampler->SetSize( outputSize );
+ resampler->SetOutputSpacing( outputSpacing );
+ resampler->SetOutputOrigin( outputOrigin );
+ resampler->SetOutputDirection( outputDirection );
+
+ }
+
+ if (m_ArgsInfo.spacinglike_given) {
+ typename InputReaderType::Pointer likeReader=InputReaderType::New();
+ likeReader->SetFileName(m_ArgsInfo.spacinglike_arg);
+ likeReader->Update();
+
+ // set the support like the image
+ if (m_ArgsInfo.like_given) {
+ typename OutputImageType::SizeType outputSize;
+ outputSize[0] = ceil(resampler->GetSize()[0]*resampler->GetOutputSpacing()[0]
+ /likeReader->GetOutput()->GetSpacing()[0]);
+ outputSize[1] = ceil(resampler->GetSize()[1]*resampler->GetOutputSpacing()[1]
+ /likeReader->GetOutput()->GetSpacing()[1]);
+ outputSize[2] = ceil(resampler->GetSize()[2]*resampler->GetOutputSpacing()[2]
+ /likeReader->GetOutput()->GetSpacing()[2]);
+ if (m_ArgsInfo.verbose_flag) {
+ std::cout << "Compute the number of pixels such as the support is like " << m_ArgsInfo.like_arg << std::endl;
+ }
+ resampler->SetSize( outputSize );
+ }
+
+ resampler->SetOutputSpacing( likeReader->GetOutput()->GetSpacing() );
+ }
+
+ if (m_ArgsInfo.verbose_flag) {
+ std::cout << "Setting the output size to " << resampler->GetSize() << "..." << std::endl;
+ std::cout << "Setting the output spacing to " << resampler->GetOutputSpacing() << "..." << std::endl;
+ std::cout << "Setting the output origin to " << resampler->GetOutputOrigin() << "..." << std::endl;
+ std::cout << "Setting the output direction to " << resampler->GetOutputDirection() << "..." << std::endl;
+ }
+
+ typedef itk::RecursiveGaussianImageFilter<InputImageType, InputImageType> GaussianFilterType;
+ std::vector<typename GaussianFilterType::Pointer> gaussianFilters;
+ if (gaussianFilteringEnabled || autoGaussEnabled) {
+ for(unsigned int i=0; i<Dimension; i++) {
+ if (gaussianSigma[i] != 0) {
+ gaussianFilters.push_back(GaussianFilterType::New());
+ gaussianFilters[i]->SetDirection(i);
+ gaussianFilters[i]->SetOrder(GaussianFilterType::ZeroOrder);
+ gaussianFilters[i]->SetNormalizeAcrossScale(false);
+ gaussianFilters[i]->SetSigma(gaussianSigma[i]); // in millimeter !
+ if (gaussianFilters.size() == 1) { // first
+ gaussianFilters[0]->SetInput(input);
+ } else {
+ gaussianFilters[i]->SetInput(gaussianFilters[i-1]->GetOutput());
+ }
+ }
+ }
+ if (gaussianFilters.size() > 0) {
+ resampler->SetInput(gaussianFilters[gaussianFilters.size()-1]->GetOutput());
+ } else resampler->SetInput(input);
+ } else resampler->SetInput(input);
+