[FieldTrip] reverse source interpolate?
Vitoria Piai
v.piai.research at gmail.com
Wed Mar 12 09:24:53 CET 2014
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 <mailto: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 <mailto:fieldtrip at donders.ru.nl>
> http://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/9b947061/attachment-0002.html>
More information about the fieldtrip
mailing list