First, MRIcroN and R. In the image above I show the fake brain NIfTI file I've used before opened in MRIcroN. In both, the value of the voxel at coordinates 18, 16, 21 is 13.
Now, pyMVPA. Here's the code (thanks, Ben!), with a screenshot from running it within NeuroDebian:
python
from mvpa2.suite import *
ds = fmri_dataset('/home/brain/host/fakeBrain.nii.gz')
def ijkIdx(dataset, i, j, k):
return np.where((dataset.fa['voxel_indices'][:,0] == i)
& (dataset.fa['voxel_indices'][:,1] == j)
& (dataset.fa['voxel_indices'][:,2] == k))[0][0]
ds.samples[0,ijkIdx(ds, 18,16,21)]
ds.samples[0,ijkIdx(ds, 17,15,20)]
Notice the lines marked in green: the voxel at 18, 16, 21 does not have the value 13, but 25: the voxel at 17, 15, 20 has the value 13 (orange). Python is zero-based and R is one-based, which may be the source of this discrepancy.
Ben wrote the little function ijkIdx to return a voxel value by i,j,k coordinates since pyMVPA stores the values internally as vectors; see the pyMVPA tutorial for more details.
Update 11 June 2013: spm is also 1-based while afni is 0-based.
Update 9 August 2013: fsl and caret are both 0-based.
Ben wrote the little function ijkIdx to return a voxel value by i,j,k coordinates since pyMVPA stores the values internally as vectors; see the pyMVPA tutorial for more details.
Update 11 June 2013: spm is also 1-based while afni is 0-based.
Update 9 August 2013: fsl and caret are both 0-based.
yikes... so R and MRICron are made by mathematicians while the rest of the MRI-analysis-software-world (python, FSL, afni, ...) is by programmers ;)
ReplyDeleteHey now, no insults to R allowed here. :)
DeleteI just included afni (0-based) and spm8 (1-based) in a new post, so it looks like the MRI analysis software is split. Not a big deal once you know about it, but certainly can cause problems if you don't!