I got an error after doing the following, it seems that after changing the source, itk.GetArrayFromImage no longer works, however .GetOutput() still works.
reader = itk.ImageSeriesReader[ItkTypes.IF3].New()
reader.SetFileNames(files)
reader.Update()
itk.GetArrayFromImage(reader.GetOutput())
reader.SetFileNames(newFiles)
reader.UpdateLargestPossibleRegion()
# Some Filter Down the Line
itk.GetArrayFromImage(someFilter.GetOutput()) # This Fails
This is the error I get:
File "/usr/local/Cellar/insighttoolkit/4.12.1/lib/python3.6/site-packages/itk/Configuration/../itkPyBufferPython.py", line 3120, in GetArrayViewFromImage
ndarrview = numpy.asarray(memview).view(dtype = numpydatatype).reshape(shape).view(numpy.ndarray)
ValueError: cannot reshape array of size 262144 into shape (23,512,512)
hmm looks like I managed to solve this by doing reader.Modified after setting FileNames. Am I doing this the right way?
hmm it seems that calling UpdateLargestPossibleRegion() at the end of the pipeline doesn’t propagate to all filters up. Do I need to call UpdateLargestPossibleRegion() in every single filter I’m my pipe? It seems like it only works if it do.
Hi matt, I’m currently on 4.12.1 installed using home-brew.
when I call UpdateLargestPossibleRegion() at the end of the pipeline, it seems that I can get itk.GetArrayFromImage from the end, but when I try to get some outputs from the middle of the pipeline, they give me that error.
Yes, calling UpdateLargestPossibleRegion() is necessary to ensure that the image passed into GetArrayFromImage() has been populated appropriately. I will look into calling this automatically to avoid the need to call it manually.
Hi matt, I was further debugging and found out that it was an intermediate ExtractSlice filter that was changing all my RequestedRegion to 512 by 512 by 1. Such that when I call itk.GetArrayFromImage, I have to call UpdateLargestPossibleRegion() again.
My assumption was that ExtractSlice which I used as a split off filter off my main pipeline would not affect the upstream but it did.
I think I understand more now, will update if I find out anything again
To help other folks from being caught by this gotcha, this proposed patch will call UpdateLargestPossibleRegion before converting the image to a NumPy array.