Convert coordinates in MNI space to matrix space

43 sec read

Quite often you need to convert the coordinates of some voxels in MNI space to regular matrix coordinates. Below is a script to do so:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% mni2cor
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function coordinate = mni2cor(mni, T)
% function coordinate = mni2cor(mni, T)
% convert mni coordinate to matrix coordinate
%
% mni: a Nx3 matrix of mni coordinate
% T: (optional) transform matrix
% coordinate is the returned coordinate in matrix
%
% caution: if T is not specified, we use:
% T = ...
%     [-4     0     0    84;...
%      0     4     0  -116;...
%      0     0     4   -56;...
%      0     0     0     1];
%
% xu cui
% 2004-8-18
%

if isempty(mni)
    coordinate = [];
    return;
end

if nargin == 1
	T = ...
        [-4     0     0    84;...
         0     4     0  -116;...
         0     0     4   -56;...
         0     0     0     1];
end

coordinate = [mni(:,1) mni(:,2) mni(:,3) ones(size(mni,1),1)]*(inv(T))';
coordinate(:,4) = [];
coordinate = round(coordinate);
return;

If you need to convert from matrix coordinates to MNI space, then here is the code:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% cor2mni
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function mni = cor2mni(cor, T)
% function mni = cor2mni(cor, T)
% convert matrix coordinate to mni coordinate
%
% cor: an Nx3 matrix
% T: (optional) rotation matrix
% mni is the returned coordinate in mni space
%
% caution: if T is not given, the default T is
% T = ...
%     [-4     0     0    84;...
%      0     4     0  -116;...
%      0     0     4   -56;...
%      0     0     0     1];
%
% xu cui
% 2004-8-18
% last revised: 2005-04-30

if nargin == 1
    T = ...
        [-4     0     0    84;...
         0     4     0  -116;...
         0     0     4   -56;...
         0     0     0     1];
end

cor = round(cor);
mni = T*[cor(:,1) cor(:,2) cor(:,3) ones(size(cor,1),1)]';
mni = mni';
mni(:,4) = [];
return;

第十九期 fNIRS Journal Club 通知 2021/05/29,9:30am

美国普渡大学童云杰助理教授,将为大家讲解他们组最近被接受的一篇使用近红外相位信息研究脑血流变化的文章。热烈欢迎大家参与讨论。 时间: 北京时间2021年5月29日上午9:30地点: https://zoom.com房间号: 846 8391 7517密码: 805190 童云杰教授简介:普渡大学 生物医学工程助理教授、博士生导师。主攻方向是多模态脑成像, 包括核磁,fNIRS, EEG。关注脑功能及生理信号的提取与研究。发表论文九十余篇,引用上千次(H-index = 20)。 童教授要讲解的文章如下: Liang Z, Tian H, Yang HC, Arimitsu T, Takahashi...
Xu Cui
12 sec read

第十八期 fNIRS Journal Club 视频

北京时间2021年4月25日10点,北京师范大学的朱朝喆教授为大家讲解了他们最近几年在经颅脑图谱(Transcranial brain Atlas) 方面做的工作。视频如下: Youtube: https://youtu.be/EhYPuBPQ5uI Youku: 该视频在优酷上传后被优酷屏蔽,不清楚什么原因。申诉无效。
Xu Cui
3 sec read

第七届全国近红外光谱脑功能成像学术会议

会议日期:2021年5月22日-24日会议地点:天津师范大学 一、 会议简介       近红外光谱脑功能成像(fNIRS)具有设备购买与使用成本低、可在自然环境条件下使用、具有较高的时间分辨率和空间定位能力等特点,受到了脑科学研究的高度重视。“近红外光谱脑功能成像学术会议”是由北京师范大学认知神经科学与学习国家重点实验室朱朝喆教授发起并组织的全国性学术会议。已连续成功举办六届,共吸引全国近百家高校、科研院所及医院的六百余名学者参加。该会议已成为国内规模和影响力最大的fNIRS脑成像学术活动。       本届会议由北京师范大学与天津师范大学联合主办。会议将延用往届会议将学术报告与研究方法工作坊相结合的模式。学术报告模块(5月22日周六)将邀请心理学与认知神经科学领域、基础与临床医学领域以及工程技术领域知名学者汇报其fNIRS最新研究成果;工作坊模块(5月23-24日)由fNIRS领域一线研究者系统讲授fNIRS成像原理、fNIRS实验设计、fNIRS数据分析与统计、fNIRS论文写作以及fNIRS前沿技术等。除理论讲授外,还设置了fNIRS空间定位与数据分析操作(NIRS-KIT软件)环节,此外还安排充足的研讨答疑时间以便与会人员交流互动。       具体日程与详细内容等最新消息请关注后续通知,可通过天津师范大学心理部网站http://psych.tjnu.edu.cn/或北京师范大学国家重点实验室网站http://brain.bnu.edu.cn/,或者扫描下方二维码关注微信公众号-“fNIRS脑成像实验室”查阅更新信息,期盼在天津师范大学与您相聚! 二、会议组织机构 主办单位:教育部人文社会科学重点研究基地天津师范大学心理与行为研究院、天津师范大学心理学部、北京师范大学认知神经科学与学习国家重点实验室会议主席:白学军、朱朝喆组织委员会:赵春健、杨邵峰、侯鑫、曹正操 三、说明1.        学术报告模块注册费:人民币500元/人;工作坊模块注册费:人民币2500元/人。发票为电子发票,内容均为:“会议费”。两个模块各自独立收费,参会者可根据自己需要进行选择。2.        注册费包括各自模块的资料费、午餐费;其他费用自理。3.        会议报告人免除会议模块注册费,其他费用请自理。4.       ...
Xu Cui
18 sec read

23 Replies to “Convert coordinates in MNI space to matrix space”

  1. thanks – exactly what I needed!

    My transformation matrix was the following:
    [ans.hdr.hist.srow_x; ans.hdr.hist.srow_y; ans.hdr.hist.srow_z; 0 0 0 1]

  2. Dear Xu,

    thanks for the code. Can you give me a hint how to obtain the transformation matrix? I know that I have to define several fiducials on my images (like anterior and posterior commissure), but I don’t know of any convenient way (i.e. software) to do this and get mni coordinates from voxel indices. Are you aware of a simple way to do that?

    Thanks a lot,
    Michael

    P.S.: Great motto for your blog 🙂

  3. @Xu Cui
    As far as I know, this only results in valid mni coordinates, as long as the image is in alignment with normal space, i.e., with MNI152 – in all other cases it will give me an arbitrary transformation matrix.

  4. Dear Xu,
    thanks, very helpful. This helps me a lot! One related question: I have a set of images that are in a coordinate space and a 4×4 transformation matrix that I can use to covert the cooridnates into mni [3 0 0 81; 0 3 0 -115; 0 0 3 -70; 0 0 0 1]; I could now apply this transformation while looping over all voxels, but that seems cumbersome. Is there a function that could transform the whole 3D (or 4d – 3D +timeseries) from its space into MNI?

    Best, Ralf

  5. Dear Dr. Cui,
    I obtained a transformation matrix from an image preprocessed in SPM (normalized to MNI template already) but when I use this function, the location showing up in the mask is L/R flipped: e.g., in MNI coordinate it was on the left but after putting into the matrix space, it showed up on the right of the image. Is there a parameter i should obtain from spm_vol to know if my data is L/R flipped?
    Thanks!

  6. Dear Dr. Cui,
    I have a problem. I first time have to MNI coordinates to matrix space convert. What am I going to change in the code?
    When entered values mni e.g. -41 -4 10 I have error and the program does not work.
    Is it working for lots of coordinates?

    function coordinate=mni2cor(-41,-4,10), T)
    if isempty(mni)
    coordinate= [];
    return;
    end
    if nargin ==1
    T = …
    [-4 0 0 -84; …
    0 4 0 -116;…
    0 0 4 -56;…
    0 0 0 1];
    end
    coordinate=[mni(:,1) mni(:,2) mni(:,3) ones(size(mni,1),1)]*(inv(T))’;
    coordinate(:,4)=[];
    coordinate=round(coordinate);
    return;

    Best,Ila

  7. Dear Dr. Cui,
    Thank you for your answer. I understand what do you write, but can you give me an example on one of coordination? Unfortunately, it is not clear for me and my friends.
    I need easy example how define mni?

    These are my hard beginnings..
    Best, Ila

  8. Dear Dr Cui,
    My aim is to write a matlabs function to convert an MNI coordinate into voxel space of the AAL template which can then give me the anatomical labelling. MRIcron already does this, but I wanted to automate this in script form rather than GUI form.
    I was hoping to use your mni2cor function but the result doesn’t match with the MNI-voxel conversion as found in MRIcron or SPM. For example, the x y z MNI coordinate of 39,4,58 in the aal template is equivalent to the voxel coordinates of 130 130 130. However, if I use your mni2cor function, leaving the T undefined, gives me the coordinate of 11 30 29 rather than the expected 130 130 130.
    I am sure I missing something here, and I suspect it has something to do with how the image (aal) is sliced. Would you be able to help?
    Thank you in advance,
    Francesca

  9. Oh I just figured it out: the transformation is based on the ratio between MNI and cor, which I can easily calculate. So basically the problem, now solved, was that I needed to define T.

    Thank you anyway.

  10. Hi Xu,

    I have a matrix (9142×9142 single) that represents correlation matrix between two brain areas, and I want to get brain images showing the correlation. Is this program usable for that? Not sure about the input matrix.

    Thanks,
    Fran

  11. Dear Dr Cui
    I want to use your code to convert FEM based head model to MNI space. Could you kindly give me any reference of yours so that i can refer it on my publication.

    Regards
    Dr.Rajan Kashyap

  12. Dear Dr. Cui

    As the transformation is based on the ratio between MNI and cor, please can you explain to me the “T”? And how to calculate the ratio between MNI and cor?

    Regards
    Abdul

  13. Dear Dr. Cui

    I used spm_vol function to get the transform matrix (T). When I tried to convert a voxel coordinate [30,-2,12] from MNI to native space, I got this coordinate [14,24,11], which is different from the coordinates that I got from MRIcro [41,18,15].
    I think I am missing something here. Please help me to understand.
    Regards
    Abdul

    1. Abdul,

      Since I do not use MRIcro, I am not sure how it converts between MNI and matrix coordiantes. I think SPM conversion is accurate.

      Xu

Leave a Reply

Your email address will not be published. Required fields are marked *

Loading