Is there a working example of how to use the itk.PyImageFilter class? It seems like the key is using the SetPyGenerateData method to set a python function to do the work. I have the below toy example working, but I can’t figure out how to access the input data or set the output data within the passed python function. It does appear to get called upon “Update” however.
import itk
import sys
def myFunc():
print("myFunc is running")
# Fun stuff goes here?
return(None)
img = itk.imread("in.nii.gz")
InputImageType = type(img)
OutputPixelType = itk.ctype("unsigned char")
OutputImageType = itk.Image[OutputPixelType, img.GetImageDimension()]
# PyImageFilter only wrapped for UC (2D,3D) and US (2D,3D)
caster = itk.CastImageFilter[InputImageType, OutputImageType].New(img)
filter = itk.PyImageFilter[OutputImageType, OutputImageType].New()
filter.SetPyGenerateData( myFunc )
filter.SetInput( caster.GetOutput() )
filter.Update()
outImg = filter.GetOutput()
print(type(outImg))
print(outImg)
print(itk.size(outImg))