--- /dev/null
+class ResampleImageFilter
+!!!188162.cpp!!! ProcessSwitch() : void
+ bbtk::TypeInfo t = bbGetInputIn().type();
+ BBTK_TEMPLATE_ITK_IMAGE_SWITCH(t, this->Process);
+
+!!!188290.cpp!!! Process() : void
+ bbtkDebugMessageInc("Core",9,
+ "bbitk::ResampleImageFilter::Process<"
+ <<bbtk::TypeName<T>()<<">()"<<std::endl);
+
+ typedef T ImageType;
+ typedef itk::ResampleImageFilter<ImageType,ImageType> FilterType;
+ typename FilterType::Pointer filter = FilterType::New();
+ const unsigned int Dimension = ImageType::ImageDimension;
+
+ // Input
+ T* in = this->bbGetInputIn().get<T*>();
+ filter->SetInput( in );
+
+ // Size, Spacing, Origin and DefaultPixelVal
+ typename ImageType::SizeType size;
+ typename ImageType::SpacingType spacing;
+ typename ImageType::PointType origin;
+ typename ImageType::RegionType LPR;
+ LPR = in->GetLargestPossibleRegion();
+ size = LPR.GetSize();
+ // origin = LPR.GetIndex(); //in->GetOrigin();
+ for (unsigned int i=0;i<Dimension;++i)
+ {
+ origin[i] = LPR.GetIndex()[i]*in->GetSpacing()[i];
+ spacing[i] = bbGetInputSpacing()[i];
+ double tmp = (LPR.GetSize()[i]*in->GetSpacing()[i]/spacing[i] ) + 0.5;
+ size[i] = (long)floor(tmp);
+// size[i] = (long)lrint(LPR.GetSize()[i]*in->GetSpacing()[i]/spacing[i]);
+ }
+
+ filter->SetOutputOrigin (origin);
+ filter->SetSize (size);
+ filter->SetOutputSpacing( spacing );
+
+ filter->SetDefaultPixelValue (0);
+ filter->SetOutputDirection( in->GetDirection() );
+
+
+
+ // Transform
+ typedef itk::AffineTransform < double, Dimension> TransformType;
+
+ // Instance of the transform object to be passed to the resample filter
+ // By default, identity transform is applied
+ typename TransformType::Pointer transform = TransformType::New();
+ filter->SetTransform ( transform );
+
+
+
+ if ( bbGetInputInterpolation() == "NearestNeighbor" ) {
+ typedef itk::NearestNeighborInterpolateImageFunction < ImageType, double > InterpolatorType;
+ // We create an interpolator of the found type
+ typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+ filter->SetInterpolator( interpolator );
+ }
+ else if ( bbGetInputInterpolation() == "BSpline") {
+ typedef itk::BSplineInterpolateImageFunction < ImageType, double > InterpolatorType;
+ // We create an interpolator of the found type
+ typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+ filter->SetInterpolator(interpolator);
+ // When handling unsigned data, it is possible that the interpolated value is negative
+ // if ( (m_InputImage->GetComponentTypeAsString() == "uchar") ||
+ // (m_InputImage->GetComponentTypeAsString() == "ushort") ||
+ // (m_InputImage->GetComponentTypeAsString() == "uint") ) {
+ // std::cout << "Warning! you're using unsigned data ! The interpolated value may result negative! "<< std::endl;
+ // }
+ } //end else if
+ // Interpolation
+ else { // if ( bbGetInputInterpolation() == "Linear" ) {
+ typedef itk::LinearInterpolateImageFunction < ImageType, double > InterpolatorType;
+ // We create an interpolator of the found type
+ typename InterpolatorType::Pointer interpolator = InterpolatorType::New();
+ filter->SetInterpolator( interpolator );
+ }
+
+ filter->Update();
+ filter->GetOutput()->Register();
+ if (mOutput) mOutput->UnRegister();
+ this->bbSetOutputOut( filter->GetOutput() );
+ mOutput = filter->GetOutput();
+
+ bbtkDebugDecTab("Core",9);
+