Research‎ > ‎Tips‎ > ‎

mni2tal

MNI, Talairachの2つの脳地図の関係と変換

MRC CBSU Wiki: The MNI brain and the Talairach atlas: http://imaging.mrc-cbu.cam.ac.uk/imaging/MniTalairach

などに詳しいです。MNI YALEのWebアプリケーションhttp://sprout022.sprout.yale.edu/mni2tal/mni2tal.htmlでは、GUI環境であたかも為替レートの計算のように変換が可能です。

ただし、このアプリケーションは左右の定義がradiologicalなので注意が必要です。

MATLABで動く変換スクリプトは

http://imaging.mrc-cbu.cam.ac.uk/downloads/MNI2tal/

にmni2tal.m, tal2mni.mの2つがあります。

簡単なスクリプトで、変換自体は決まった微調整の産物と言ってもよく、他の言語でもすぐに移し替えられます。

これらMファイルの使い方(Matlab上でSPMは起動する必要はありません)

>> tal=mni2tal([24 35 -2])

tal =

   23.7600   33.8236   -3.3747

>> mni=tal2mni(tal)

mni =

    24    35    -2

>> tal2mni([24 35 -2])

ans =

   24.2424   36.1404   -0.2955

これをPythonではどうしたらよいかという質問がネットに投げられていましたが、そんなに難しくはありません。

(i) Pythonを使う場合

(Lauren R. Moo によるtal2nbi.mを踏まえており、極めて単純化しています。そのため精度がよくないようです。Matthew Brettによるものを薦めますが、これはSPM, spmtrf.mを必要としており、まだPythonには直しておりません。)

def tal2mni(x,y,z):

    a = 0.99

    b = 0.9688

    c = 0.0460

    d = -0.0485

    e = 0.9189

    f = 0.0420

    g = 0.8390

    if(z - d*y)/e >= 0:

        xm = x/a 

        ym = (e*y)/(b*e - c*d) - (c*z)/(b*e - c*d)

        zm = (z/e) - (d/e)*((e*y - c*z)/(b*e - c*d))

    else:

        xm = x/a

        ym = (e*y)/(b*e - f*d) - (f*z)/(b*e - f*d)

        zm = (z/g) - (d/g)*((e*y - c*z)/(b*e - c*d))

    print xm, ym, zm

ipythonを起動して実行する場合は%paste

tal2mni(24,35,-2)

24.2424242424 36.1388333711 -0.294651765898

(ii)おまけ:MATHEMATICAを使った場合(極めて単純化しています)

In[1]:= tal2mni[x_, y_, z_] :=    Module[{a = 0.99, b = 0.9688, c = 0.0460, d = -0.0485, e = 0.9189,      f = 0.0420, g = 0.8390, xm, ym, zm},     If[(z - d*y)/e >= 0, xm = N[x/a];      ym = N[(e*y)/(b*e - c*d) - (c*z)/(b*e - c*d)];      zm = N[(z/e) - (d/e)*((e*y - c*z)/(b*e - c*d))], xm = N[x/a];      ym = N[(e*y)/(b*e - f*d) - (f*z)/(b*e - f*d)];      zm = N[(z/g) - (d/g)*((e*y - c*z)/(b*e - c*d))]]; {xm, ym, zm}];

In[2]:= tal2mni[24, 35, -2]  

Out[2]= {24.2424, 36.1388, -0.294652}


Comments