[Neuroimaging] Question about nibabel.processing

Christopher Markiewicz effigies at bu.edu
Thu Oct 12 10:24:37 EDT 2017


Hi,

What you need to do here is to get a 3D image from your 4D image. There's a
function four_to_three that will give you a list of 3D images.

>>> imgs = nib.four_to_three(img)
>>> r = nib.processing.resample_to_output(imgs[0], [3, 3, 3])

Chris

On Thu, Oct 12, 2017 at 9:15 AM, Christopher Cox <
christopher.cox-2 at manchester.ac.uk> wrote:

> Hello,
>
>
>
> My first question should really be: how do you review the archive for this
> mailing list? I imagine this question has been answered, but I do not know
> where to look.
>
>
>
> I am attempting something very simple: I want to resample a volume. The
> nifti file on disk is 4D, and contains two volumes.
> Nibabel.processing.resample_to_output() will not work with 4D data.
> Fortunately for me, I only care about the first volume in this dataset. So
> I should have no problem.
>
>
>
> But... nothing I can think to try works. I apologize it is difficult to
> read, but I’ve condensed several of my attempts into an interactive python
> session, and copied all of my work and the errors I am getting as a post
> script. I tried to color code, but that might not come through.
>
>
>
> My first attempt is to try and pass the sliced data object (as in, data =
> img.get_data()), but that is a memory map as lacks the metadata the
> function requires. I tried passing the image (as in, img = nib.load(…)),
> but it cannot be sliced like the data can. I then tried simply loading only
> a single volume into memory (as in, vol0 = img.datobj[…,0]), but that
> doesn’t work either (vol0 is a numpy array, and img is still seen as 4D).
> I tried updating the shape metadata in img, but that’s read only.
>
>
>
> Thank you very much for helping me figure out the intended way to use this
> function.
>
>
>
> Best,
>
> Chris
>
>
>
> Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64
> bit (AMD64)] on win32
>
> Type "help", "copyright", "credits" or "license" for more information.
>
> >>> import nibabel as nib
>
> >>> nib.__version__
>
> '2.1.0'
>
>
>
> >>> import nibabel.processing
>
> >>> img = nib.load('Template_6.nii')
>
> >>> img.shape
>
> (121, 145, 121, 2)
>
>
>
> >>> data = img.get_data()
>
> >>> r = nib.processing.resample_to_output(data[...,0], [3,3,3])
>
> Traceback (most recent call last):
>
>   File "<stdin>", line 1, in <module>
>
>   File "C:\Users\mbmhscc4\AppData\Roaming\Python\Python36\site-
> packages\nibabel\processing.py", line 242, in resample_to_output
>
>     out_vox_map = vox2out_vox((in_img.shape, in_img.affine), voxel_sizes)
>
> *AttributeError: 'memmap' object has no attribute 'affine'*
>
>
>
> >>> r = nib.processing.resample_to_output(img, [3,3,3])
>
> Traceback (most recent call last):
>
>   File "<stdin>", line 1, in <module>
>
>   File "C:\Users\mbmhscc4\AppData\Roaming\Python\Python36\site-
> packages\nibabel\processing.py", line 242, in resample_to_output
>
>     out_vox_map = vox2out_vox((in_img.shape, in_img.affine), voxel_sizes)
>
>   File "C:\Users\mbmhscc4\AppData\Roaming\Python\Python36\site-packages\nibabel\spaces.py",
> line 76, in vox2out_vox
>
>     raise ValueError('This function can only deal with 3D images')
>
> *ValueError: This function can only deal with 3D images*
>
>
>
> >>> r = nib.processing.resample_to_output(img[...,0], [3,3,3])
>
> Traceback (most recent call last):
>
>   File "<stdin>", line 1, in <module>
>
> *TypeError: __getitem__() takes 1 positional argument but 2 were given*
>
>
>
> >>> vol0 = img.dataobj[...,0]
>
> >>> r = nib.processing.resample_to_output(vol0, [3,3,3])
>
> Traceback (most recent call last):
>
>   File "<stdin>", line 1, in <module>
>
>   File "C:\Users\mbmhscc4\AppData\Roaming\Python\Python36\site-
> packages\nibabel\processing.py", line 242, in resample_to_output
>
>     out_vox_map = vox2out_vox((in_img.shape, in_img.affine), voxel_sizes)
>
> *AttributeError: 'numpy.ndarray' object has no attribute 'affine'*
>
>
>
> # This is after the previous attempt, loading only the first volume. img
> remains 4D
>
> >>> r = nib.processing.resample_to_output(img, [3,3,3])
>
> Traceback (most recent call last):
>
>   File "<stdin>", line 1, in <module>
>
>   File "C:\Users\mbmhscc4\AppData\Roaming\Python\Python36\site-
> packages\nibabel\processing.py", line 242, in resample_to_output
>
>     out_vox_map = vox2out_vox((in_img.shape, in_img.affine), voxel_sizes)
>
>   File "C:\Users\mbmhscc4\AppData\Roaming\Python\Python36\site-packages\nibabel\spaces.py",
> line 76, in vox2out_vox
>
>     raise ValueError('This function can only deal with 3D images')
>
> *ValueError: This function can only deal with 3D images*
>
>
>
>
>
> >>> img.shape = img.shape[0:3]
>
> Traceback (most recent call last):
>
>   File "<stdin>", line 1, in <module>
>
> *AttributeError: can't set attribute*
>
>
>
>
>
> Christopher R. Cox, PhD
>
> Neuroscience and Aphasia Research Unit (NARU)
>
> University of Manchester, UK
>
> christopher.cox-2 at manchester.ac.uk
>
>
>
> _______________________________________________
> Neuroimaging mailing list
> Neuroimaging at python.org
> https://mail.python.org/mailman/listinfo/neuroimaging
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/neuroimaging/attachments/20171012/d2261fff/attachment.html>


More information about the Neuroimaging mailing list