[FieldTrip] How do I use an atlas to find regions on an individual MRI?

Schoffelen, J.M. (Jan Mathijs) jan.schoffelen at donders.ru.nl
Wed Jul 6 18:43:20 CEST 2016


Sorry Andreja,
I forgot the find() indeed.
Also, I forgot to mention that the cfg to ft_sourceinterpolate should specify the interpolation method to be ‘nearest’.
I hope this helps.
Best,
Jan-Mathijs

On 06 Jul 2016, at 18:20, Andreja Kostić <andrejakosticln at gmail.com<mailto:andrejakosticln at gmail.com>> wrote:

Hello Jan-Mathijs and thank you very much for your answer!!
Since my approach is not producing results, I'm naturally very open to different strategies!

Unfortunately, I do not understand how exactly your suggested process of creating a mask works.
Namely, at least for me, the mri2.tissue is a 3D matrix that has the same size as the anatomy. Result of strcmp(atlas.tissuelabel, ‘yourfavoritebrodmannarea’) is a vector that has a 1 at the index of my favorite Brodmann area. Matlab does not allow comparison between two of them.
At first I thought that the value in the tissue structure is a number matching the index of a label, but then I saw that there are also decimal numbers in the mri2.tissue as well, which confused me.
I also tried with following:
mri2.mask = mri2.tissue==find(strcmp(atlas.tissuelabel,'brodmann area 17'));
which does return something, but the mask has points spread around the whole brain, so this obviously doesn't work the way I thought it does.
So I'm not really sure how to make this mask work.

All the best,
Andreja Kostić

2016-07-06 16:06 GMT+02:00 Schoffelen, J.M. (Jan Mathijs) <jan.schoffelen at donders.ru.nl<mailto:jan.schoffelen at donders.ru.nl>>:
Dear Andreja,

I have never understood ft_volumelookup myself, so I wonder whether you would be helped by proposing a different strategy…

I would do the following:

% read in the atlas
atlas = ft_read_atlas(‘somefilename’);

% read in and normalise the anatomical image
mri = ft_read_mri(‘someotherfilename’)
mri = ft_volumenormalise([], mri);

% assuming that both atlas and mri are in the same coordinate system
cfg = [];
cfg.parameter = ‘tissue’;
mri2 = ft_sourceinterpolate(cfg, atlas, mri);

The last step gives you the atlas interpolated onto the anatomical MRI.

It should be straightforward to create a boolean mask from here that specifies a particular ROI

mri2.mask = mri2.tissue==strcmp(atlas.tissuelabel, ‘yourfavoritebrodmannarea’);


I hope this helps.

Best wishes,
Jan-Mathijs



On 06 Jul 2016, at 15:33, Andreja Kostić <andrejakosticln at gmail.com<mailto:andrejakosticln at gmail.com>> wrote:

Hello dear Fieldtrippers!
This is my first post on the mailing list, so I apologize if this looks a bit confused.

So I'm trying to use the WFU PickAtlas for Brodmann areas in what I think are MNI coordinates to find specific regions inside of a brain (I'm coming from electrical engineering background, so I can't do that "by hand") in an individual whole-head MRI and I'm having issues getting sane results.

I suspect that my workflow is the problem, so I would be very grateful if someone could provide some advice as to what I should be actually doing.

My original idea was to take MRI in CTF coordinates, convert it to MNI coordinates and then just use atlas to make masks. From what I could gather, it's not that simple.
So here are examples of what I'm doing right now:

ft_defaults;
%Let's read atlas
atlas = ft_read_atlas('C:\REALY_LONG_PATH_TO_PICKATLAS\wfu_pickatlas\MNI_atlas_templates\TD_brodmann.nii');


%Using Subject01from FT tutorials right now, for simplicity's sake.
mri = ft_read_mri('Subject01\Subject01.mri');


%Reslice, apply transformations
cfg=[];
cfg.dim=[256 256 256];
mri_resliced=ft_volumereslice(cfg, mri);

cfg=[];
mri_norm1=ft_volumenormalise(cfg,mri_resliced);
%Unfortunately, this cuts off everything below the nose!
%Still let's take a look at the visualization with atlas

cfg=[];
cfg.inputcoord='mni';
cfg.atlas=atlas;
cfg.roi='brodmann area 4';

mask4 = ft_volumelookup(cfg, mri_norm1);
mri_norm1.mask4=mask4;

cfg=[];
cfg.atlas=atlas;
cfg.funparameter = 'mask4';
ft_sourceplot(cfg,mri_norm1)

%The result doesn't look so good, big part of the area seems to fit inside of the gaps between brain tissue!
So this doesn't seem to have worked out. My next attempt was to directly use ft_convert_coordsys. This fixed the cutting issue, but it didn't solve the problem of results looking strange.
So my other idea was to try with

template=ft_read_mri('C:\PathToFT\external\spm8\templates\T1.nii');

cfg=[];
cfg.method='spm';
cfg.coordsys='spm';
mri_realigned=ft_volumerealign(cfg,mri_resliced,template);
But this produces very obviously wrong results, like coronal slices on sagittal plane.
I'm also not sure if I should be trying to somehow transform an atlas to fit the individual MRI that I'm using?

All the best,
Andreja Kostić








_______________________________________________
fieldtrip mailing list
fieldtrip at donders.ru.nl<mailto:fieldtrip at donders.ru.nl>
https://mailman.science.ru.nl/mailman/listinfo/fieldtrip


_______________________________________________
fieldtrip mailing list
fieldtrip at donders.ru.nl<mailto:fieldtrip at donders.ru.nl>
https://mailman.science.ru.nl/mailman/listinfo/fieldtrip

_______________________________________________
fieldtrip mailing list
fieldtrip at donders.ru.nl<mailto:fieldtrip at donders.ru.nl>
https://mailman.science.ru.nl/mailman/listinfo/fieldtrip

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.science.ru.nl/pipermail/fieldtrip/attachments/20160706/0d138ab0/attachment-0001.html>


More information about the fieldtrip mailing list