[FieldTrip] reverse source interpolate?

Erick Ortiz erick.ortiz at med.uni-tuebingen.de
Wed Mar 12 11:37:19 CET 2014


Dear Vitoria,

What I do usually, is to simply label and/or define my ROI in the MNI grid.
When I warp to the individuals, everything is in place without a hitch.

About the interpolation, I cannot help much more. I have been using my own
tools for years, and I was not following the support of atlases in
Fieldtrip.I tried it today, but had issues with coordinate system labeling
when defining a ROI (I updated to the latest version by SVN):

afni = ft_read_atlas('template/atlas/afni/TTatlas+tlrc.HEAD');
cfg              = [];
cfg.method       = 'ortho';
cfg.interactive  = 'yes';
cfg.funparameter = 'coh';
cfg.atlas        = afni;
cfg.coordsys     = 'mni';
% cfg.roi          = 'Middle Temporal Gyrus';
% cfg.inputcoord   = 'tal';
ft_sourceplot(cfg, interp);

Also note that I had to use ft_read_atlas, because ft_prepare_atlas does
not generate the brick0label/brick1label fields.

It works well, but if I try to define a ROI (uncommenting the two lines), I
get the error "The field cfg.inputcoord is required". There seems to be
some confusion between inputcoord and coordsys.

It can be because I was doing something wrong: maybe a Fieldtrip developer
could comment on that?

Best,
Erick



On Wed, Mar 12, 2014 at 9:24 AM, Vitoria Piai <v.piai.research at gmail.com>wrote:

>  Dear Erick,
>
> Thanks for your detailed reply.
> I've been using individual MNI-warped grids (point 4 below) and I'm always
> using ft_convert_unit so those points are alright in my data.
>
> The reason why I do need to interpolate (at least, I think I need), is
> because I'm looking for max 'pow' in anatomically defined regions given the
> afni atlas. I managed to get it to work by interpolating to the mri and
> looking for max 'pow' given a label (e.g., 'Middle Temporal Gyrus') using
> ft_volumelookup.
> Do you have any experience with this approach (searching within anatomical
> labels) without having to interpolate?
>
> Thanks once more, Vitória
>
>
>
>
> On 3/11/2014 6:35 PM, Erick Ortiz wrote:
>
> Dear Vitória and Cornelius,
>
> this is a common problem, and maybe it would be good to clarify the
> strategies that can be used here. I hope this can help others in a similar
> situation, which I have found many times.
>
> 1) You are trying to convert voxel indexes to head (CTF) coordinates. In
> this case, there are two mistakes in the code:
> 1a) pos = warp_apply( pinv( sourceNAIInt.transform ), posInt,
> 'homogeneous' );
> ... should be done with sourceNAIInt, not mri. The transforms are
> different, in general; e.g. note the downsample=2.
> 1b) use cfg.locationcoordinates = 'head', as commented by JM in a previous
> post. Or remove this line, since 'head' is the default.
>
> 2) But if you are working with the same subject/grid, there is no need for
> interpolation at all. Simply find the grid position with highest 'pow' and
> take its position.
>     [dummy,ind] = max(source.avg.pow);
>     pos = source.pos(ind,:);
>
> 3) However, this is not possible when using different grids, e.g. in a
> grand average in MNI coordinates. Find the peak ('pos') in the interpolated
> volume, as in Cornelius' code, then find the index of the nearest grid
> position for a common (again, MNI) grid. This is also in JM's message.
>
> dpos = source.pos - repmat( pos, size(source.pos,1), 1 );
> [dummy,ind] = min(sum(dpos.^2,2));
>
> 4) What I have been using, and strongly recommend, is an MNI grid warped
> to the subject's anatomy, according to this procedure:
>
> http://fieldtrip.fcdonders.nl/example/create_single-subject_grids_in_individual_head_space_that_are_all_aligned_in_mni_space
>
> This would give you both the benefits of working in MNI coordinates, and
> the ease of having a common grid across subjects (for instance, enabling
> solution #2). Still, some projects do call for one of the other options.
>
> Just a couple of details:
> - Pay utmost attention to coordinate systems and units. For instance, it
> is common to confuse unlabeled cm for mm, and either of these with voxels.
> Try to also label all structures as CTF or SPM (MNI).
> - Using pinv instead of inv is usually a good idea. Here, it is a not an
> issue, but matrix inversion in MATLAB can lead to a world of hurt to the
> unwary.
>
> Best,
> Erick
>
>
>
> On Tue, Mar 11, 2014 at 4:04 PM, Vitoria Piai <v.piai.research at gmail.com>wrote:
>
>>  Dear FT-ers,
>>
>> I found an old posting to the mailing list (see below) that never got
>> answered so my question still holds: given a location I found in the
>> interpolated source, how do I find back the same location in .pos of the
>> non-interpolated data?
>> I can try and go around it by finding the corresponding MNI coordinates
>> in the interpolated data (which by now I have to do by hand, so not optimal
>> anyways), and then look for those coordinates in .pos. But I was wondering,
>> like Cornelius was in his post, whether there is a neater way to get this
>> information.
>>
>> Thanks a lot for the help,
>> Vitória
>>
>>
>>    >>>>>>>>>>>>>>
>>>
>>> Hi mailing list,
>>>
>>> I'm still struggling with the conversion of coordinates between source
>>> and
>>> interpolated source space.
>>> For example, if i have the position of a single grid point how do i get
>>> the
>>> corresponding voxel  in the interpolated source structure. Or the other
>>> way
>>> around, how to get the grid point which corresponds to a voxel (e.g the
>>> max
>>> voxel) in the interpolated source structure.
>>>
>>> I think this should be a common problem when working with virtual
>>> electrodes, shouldn't it?
>>>
>>> To make things easier i put together a example with the data from the
>>> source tutorial where i tried to calculated the grid pos of the max voxel
>>> in the interpolated source.
>>>
>>> clear all;
>>> load sourcePost_nocon;               % source structure from tutorial
>>> mri = ft_read_mri('Subject01.mri');  % mri of subject01 from tutorial
>>>
>>> sourceNAI = sourcePost_nocon;
>>> sourceNAI.avg.pow = sourcePost_nocon.avg.pow ./
>>> sourcePost_nocon.avg.noise;
>>> sourceNAI=rmfield(sourceNAI,'freq'); % had to remove that to let
>>>
>>> cfg = [];
>>> cfg.downsample = 2;
>>> cfg.parameter = 'avg.pow';
>>> sourceNAIInt = ft_sourceinterpolate(cfg, sourceNAI , mri);
>>>
>>> % Find position of max activity
>>> [dum, maxindx] = max(sourceNAIInt.avg.pow(:));
>>> [xi, yi, zi] = ind2sub(sourceNAIInt.dim, maxindx);
>>> posInt=[xi, yi, zi];
>>>
>>> % Plot interpolated source with position of max activity
>>> cfg              = [];
>>> cfg.method       = 'ortho';
>>> cfg.funparameter = 'avg.pow';
>>> cfg.locationcoordinates = 'voxel';
>>> cfg.location      = posInt;          % location of max activity is marked
>>> correctly.
>>> figure;
>>> ft_sourceplot(cfg,sourceNAIInt);
>>>
>>> % Transform coordinate back to uninterpolated source???
>>> dpos = warp_apply(inv(mri.transform), posInt, 'homogeneous');
>>>
>>>
>>> % Plot uninterpolated source with position aquired from interpolated
>>> source
>>> cfg              = [];
>>> cfg.method       = 'ortho';
>>> cfg.funparameter = 'avg.pow';
>>> cfg.locationcoordinates = 'voxel';
>>> cfg.location      = dpos;               % unfortunately this coordinate
>>> is
>>> obviously wrong!!! WHY?
>>> figure;
>>> ft_sourceplot(cfg,sourceNAI);
>>>
>>>
>>> Unfortunately the solution of Jan Mathijs did not work, nor did mine :(
>>>
>>> Any ideas???
>>>
>>> Cornelius
>>>
>>>
>>>
>>
>>
>>
>> _______________________________________________
>> fieldtrip mailing list
>> fieldtrip at donders.ru.nl
>> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>>
>
>
>
> _______________________________________________
> fieldtrip mailing listfieldtrip at donders.ru.nlhttp://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
>
>
> _______________________________________________
> fieldtrip mailing list
> fieldtrip at donders.ru.nl
> http://mailman.science.ru.nl/mailman/listinfo/fieldtrip
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20140312/164c704e/attachment.html>


More information about the fieldtrip mailing list