--- a +++ b/src/padImage.cxx @@ -0,0 +1,66 @@ + +#include <nanobind/nanobind.h> +#include <nanobind/stl/vector.h> +#include <nanobind/stl/string.h> +#include <nanobind/stl/tuple.h> +#include <nanobind/ndarray.h> + +#include <exception> +#include <vector> +#include <string> + +#include "itkImage.h" +#include "itkConstantPadImageFilter.h" + +#include "antsImage.h" + +namespace nb = nanobind; +using namespace nb::literals; + +template < typename ImageType > +AntsImage<ImageType> padImage( AntsImage<ImageType> & antsImage, + std::vector<int> lowerPadDims, + std::vector<int> upperPadDims, + float padValue ) +{ + typedef typename ImageType::Pointer ImagePointerType; + typename ImageType::Pointer itkImage = antsImage.ptr; + + + typename ImageType::SizeType lowerExtendRegion; + lowerExtendRegion[0] = lowerPadDims[0]; + lowerExtendRegion[1] = lowerPadDims[1]; + if (lowerPadDims.size() == 3) + { + lowerExtendRegion[2] = lowerPadDims[2]; + } + + typename ImageType::SizeType upperExtendRegion; + upperExtendRegion[0] = upperPadDims[0]; + upperExtendRegion[1] = upperPadDims[1]; + if (upperPadDims.size() == 3) + { + upperExtendRegion[2] = upperPadDims[2]; + } + + //ImageType::PixelType constantPixel = padValue; + typedef itk::ConstantPadImageFilter<ImageType, ImageType> PadImageFilterType; + typename PadImageFilterType::Pointer padFilter = PadImageFilterType::New(); + padFilter->SetInput( itkImage ); + padFilter->SetPadLowerBound( lowerExtendRegion ); + padFilter->SetPadUpperBound( upperExtendRegion ); + padFilter->SetConstant( padValue ); + padFilter->Update(); + FixNonZeroIndex<ImageType>( padFilter->GetOutput() ); + + AntsImage<ImageType> myImage = { padFilter->GetOutput() }; + return myImage; +} + +void local_padImage(nb::module_ &m) +{ + m.def("padImage", &padImage<itk::Image<float, 2>>); + m.def("padImage", &padImage<itk::Image<float, 3>>); + m.def("padImage", &padImage<itk::Image<float, 4>>); +} +