Diff of /src/sliceImage.cxx [000000] .. [5d12a0]

Switch to side-by-side view

--- a
+++ b/src/sliceImage.cxx
@@ -0,0 +1,62 @@
+
+#include <nanobind/nanobind.h>
+#include <nanobind/stl/vector.h>
+#include <nanobind/stl/string.h>
+#include <nanobind/stl/tuple.h>
+#include <nanobind/ndarray.h>
+
+#include "itkImage.h"
+#include "itkExtractImageFilter.h"
+
+#include "antsImage.h"
+
+namespace nb = nanobind;
+using namespace nb::literals;
+
+template < typename ImageType, typename SliceImageType>
+AntsImage<SliceImageType> sliceImage( AntsImage<ImageType> & antsImage, int plane, int slice, int collapseStrategy)
+{
+    typename ImageType::Pointer itkImage = antsImage.ptr;
+
+    typedef itk::ExtractImageFilter< ImageType, SliceImageType > FilterType;
+    typename FilterType::Pointer filter = FilterType::New();
+
+    typename ImageType::RegionType inputRegion = itkImage->GetLargestPossibleRegion();
+    typename ImageType::SizeType size = inputRegion.GetSize();
+    size[plane] = 0;
+
+    typename ImageType::IndexType start = inputRegion.GetIndex();
+    const unsigned int sliceNumber = slice;
+    start[plane] = sliceNumber;
+
+    typename ImageType::RegionType desiredRegion;
+    desiredRegion.SetSize( size );
+    desiredRegion.SetIndex( start );
+
+    filter->SetExtractionRegion( desiredRegion );
+    filter->SetInput( itkImage );
+    if( collapseStrategy == 0 )
+      { 
+      filter->SetDirectionCollapseToSubmatrix();
+      } 
+    else if( collapseStrategy == 1 )
+      {
+      filter->SetDirectionCollapseToIdentity();
+      } 
+    else // if( collapseStrategy == 2 ) 
+      {
+      filter->SetDirectionCollapseToGuess();
+      } 
+  
+    filter->Update();
+
+    AntsImage<SliceImageType> myImage = { filter->GetOutput() };
+    return myImage;
+
+}
+
+void local_sliceImage(nb::module_ &m) 
+{
+    m.def("sliceImage", &sliceImage<itk::Image<float,3>, itk::Image<float,2>>);
+    m.def("sliceImage", &sliceImage<itk::Image<float,4>, itk::Image<float,3>>);
+}