[Neuroimaging] using nibabel to convert a dtscalar parcellation (1-N for each greyordinate) to a 4d (binary slice for each parcel) dtseries

Uri Elias uri.urie at gmail.com
Tue Oct 27 03:20:37 EDT 2020


Python is robust and easy to use given you know its foundations, however,
designated tools are generally more safe to use. Anyway, for whom may be
interested in the following answer I've found on the HCP channel - the goto
command in HCP-workbench is
>>  wb_command -cifti-all-labels-to-rois

apparently it does the exact transformation I described.
For me, this thread has ended. Thanks again.

On Mon, Oct 26, 2020 at 11:44 AM Michiel Cottaar <
michiel.cottaar at ndcn.ox.ac.uk> wrote:

> Hi,
>
> That makes sense. As described on
> https://fsl.fmrib.ox.ac.uk/fsl/fslwiki/DualRegression dual regression is
> just doing a linear regression twice, once to get subject-specific time
> courses, and a second time to get subject-specific spatial maps.
>
> I can't answer your question on which data format to use, because that
> depends on which tool you are going to use to do the regressions. If that
> tool supports CIFTI data, you can produce a CIFTI file with the correct
> shape as described in my previous email. But, if it only supports NIFTI
> data you will have to create the 4D NIFTI file. If you are happy to run
> your regression within python, you will be able to pass on your newdata
> array directly without writing to disk. There are a lot of excellent tools
> to do linear regression, so it is really up to you to decide which one you
> find easiest to use.
>
> Best wishes,
>
> Michiel
>
> On 25 Oct 2020, at 21:08, Uri Elias <uri.urie at gmail.com> wrote:
>
> Thanks!
>
> I may indeed try that, but before - and because you were doubtful about
> this sort of pipeline - I'll try to go over again -
>
> I want to get an "individualized atlas" by taking one and using it as a
> reference to dual regression (on a rest state time series), all this over
> Cifti. Does that make sense? If so, what's the best way of doing so?
>
>
>
>
>
> On Sun, Oct 25, 2020 at 2:08 PM Michiel Cottaar <
> michiel.cottaar at ndcn.ox.ac.uk> wrote:
>
>> Hi Uri,
>>
>> You will have to tell Cifti what is along this new axis you created. One
>> way to do this is to use the cifti2 axes (
>> https://nipy.org/nibabel/reference/nibabel.cifti2.html#module-nibabel.cifti2.cifti2_axes).
>> After creating newdata this would look like:
>> >>> from nibabel import cifti2
>> >>> new_axis = cifti2.ScalarAxis([f"parcel {idx + 1}" for idx in
>> range(N)])  # these are the names for all the parcels; you might want to
>> replace them with something more meaningfull
>> >>> grayordinate_axis = dsobj.header.get_axis(1)  # get a description of
>> the greyordinate space from the loaded CIFTI file
>> >>> newobj = nb.Cifti2Image(newdata, (new_axis, grayordinate_axis))  #
>> creates a new Cifti2 header based on these axes
>> This newobj will have the shape of (N, 64984) for N parcels.
>>
>> However, based on your description I'm not completely sure if this is
>> what you want to be doing. The output will still be a 2D CIFTI file rather
>> than a 4D NIFTI file. If you want the latter, just reshape the newdata to
>> be 4D using something like `newdata.T.reshape(64984, 1, 1, N)` and create a
>> new nb.Nifti1Image object from that data.
>>
>> Good luck,
>>
>> Michiel
>>
>> On 24 Oct 2020, at 19:05, Uri Elias <uri.urie at gmail.com> wrote:
>>
>>
>>
>> Hi All,
>>
>> Top level - I'd like to apply dual regression on rest fMRI based on
>> parcellation where my rs-fMRI data in in CIFTI format.
>>
>> For a dual-regression SW I've chosen FSL, also because it works on Cifti
>> (according to manual).
>> For parcellation I've chosen the Schaefer parcellation, as it is
>> Cifti-available and also partially based on rest-fMRI.
>>
>> Now, the Cifti parcellation file is a dscalar file (that is - a single
>> volume/surface), with each greyordinate belongs to one of N parcels. FSL
>> (AFAIU) requires a 4D file as a reference
>> Working with nibabel, reformatting the matrix is easy - reading it with
>> nibabel and do something like: for k in range(N):
>>     newdata[k,:] = (orgdata==k+1).astype(float)
>>
>> Updating the Nifti header is also easy -
>>     newobj = nb.Cifti2Image(newdata, dscobj.header, dscobj.nifti_header)
>>     newobj.update_headers()
>>
>> The problem with this way is the the Cifti header is not being updated -
>>     newobj.header.matrix.get_data_shape()
>> yeilds
>>     (1, 64984)
>>
>> What's a good way of doing this? - either by sticking to the nibabel->FSL
>> line right or by any alternative
>>
>> Thanks all so much,
>> Uri
>>
>> --
>> Uri Elias
>> Computational Neuropsychiatry Lab
>> Hadassah Hebrew University Medical School
>> [image: www.neuropsychiatrylab.com] <http://www.neuropsychiatrylab.com/>
>>
>> [image: facebook] <https://www.facebook.com/uri.urie>
>> [image: linkedin] <https://www.linkedin.com/in/uri-elias-99a43546/>
>> _______________________________________________
>> Neuroimaging mailing list
>> Neuroimaging at python.org
>> https://mail.python.org/mailman/listinfo/neuroimaging
>>
>>
>> _______________________________________________
>> Neuroimaging mailing list
>> Neuroimaging at python.org
>> https://mail.python.org/mailman/listinfo/neuroimaging
>>
>
>
> --
> Uri Elias
> Computational Neuropsychiatry Lab
> Hadassah Hebrew University Medical School
> [image: www.neuropsychiatrylab.com] <http://www.neuropsychiatrylab.com/>
>
> [image: facebook] <https://www.facebook.com/uri.urie>
> [image: linkedin] <https://www.linkedin.com/in/uri-elias-99a43546/>
> _______________________________________________
> Neuroimaging mailing list
> Neuroimaging at python.org
> https://mail.python.org/mailman/listinfo/neuroimaging
>
>
> _______________________________________________
> Neuroimaging mailing list
> Neuroimaging at python.org
> https://mail.python.org/mailman/listinfo/neuroimaging
>


-- 
Uri Elias

Computational Neuropsychiatry Lab

Hadassah Hebrew University Medical School
[image: www.neuropsychiatrylab.com] <http://www.neuropsychiatrylab.com/>

[image: facebook] <https://www.facebook.com/uri.urie>
[image: linkedin] <https://www.linkedin.com/in/uri-elias-99a43546/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/pipermail/neuroimaging/attachments/20201027/09b166c2/attachment.html>


More information about the Neuroimaging mailing list