]> Creatis software - bbtk.git/blobdiff - doc/bouml/bbtkk/148098.bodies
.
[bbtk.git] / doc / bouml / bbtkk / 148098.bodies
diff --git a/doc/bouml/bbtkk/148098.bodies b/doc/bouml/bbtkk/148098.bodies
new file mode 100644 (file)
index 0000000..128ef37
--- /dev/null
@@ -0,0 +1,89 @@
+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);
+