NipyはNeuroDebianのSynaptic Package Managerからapt-get installできます。
以下のような使い方をします。
fMRIメタ分析を行っているNeurosynthのサイトから
"semantic", "syntactic"のそれぞれの単語をfeatureとするreverse inference mapをダウンロードします。
http://neurosynth.org/analyses/terms/semantic/
http://neurosynth.org/analyses/terms/syntactic/
のそれぞれのページからsyntactic_pFgA_z_FDR_0.01.nii.gz , semantic_pFgA_z_FDR_0.01.nii.gzを取得し、適当なディレクトリにおきます。
次のPython fileは、両者に共通の脳領域を画像化するプログラムです。
上は、syntactic_pFgA_z_FDR_0.01.nii.gz , semantic_pFgA_z_FDR_0.01.nii.gzのANDを取った
intersection_semantic_syntactic.niiの重要な横断面をXjViewで表示したものです。
以下のスクリプトをintersection_sem_syn.pyとして、iPython上で
run intersection_sem_syn.py
を実行してください。
----------------------------------------------------------
"""
Python script to detect the shared voxels
between the reverse inference maps of "semantic" and "syntactic "
Needs syntactic_pFgA_z_FDR_0.01.nii.gz and semantic_pFgA_z_FDR_0.01.nii.gz
Save this file as synsem.py and execute
run synsem.py
on ipython to create “intersection_semantic_syntactic.nii”.
"""
import numpy as np
from nipy import load_image, save_image #Needs nipy
from nipy.core.api import Image
import os
datalist=['semantic','syntactic']
fname='intersection_semantic_syntactic.nii.gz'
loaded_images=[()]*len(datalist)
image_data=[()]*len(datalist)
all_image_data=[()]*len(datalist)
for i in range(len(datalist)):
loaded_images[i]= load_image(datalist[i] + '_pFgA_z_FDR_0.01.nii.gz')
image_data[i]=loaded_images[i].get_data()
if i==0:
all_image_data[i]=image_data[i]
else:
all_image_data[i]=all_image_data[i-1] * image_data[i]
all_images=Image(all_image_data[i],loaded_images[i].coordmap)
save_image(all_images, fname)
os.system('gzip -cd '+ fname + ' > ' + '' + fname[:-3])
---------------------------------------------------------------------------------------
以上です。Nipyの便利さが分かると思います。
また、A And Not Bのような領域を抽出することも、以上を応用すれば可能です。
たとえば、bodyとmotionをNeurosynthのfeaturesにして、以下のようなスクリプトを実行すると、body_And_Not_motion.nii.gz, motion_And_Not_body.nii.gzなどが生成します。
くわしくは
https://sites.google.com/site/akamatitechlab/research/primer/and_or_of_fimages
#########
import numpy as np
from nipy import load_image, save_image #Needs nipy
from nipy.core.api import Image
import os
# -*- coding: utf-8 -*-
datalist=['body','motion']
B_m_fname=datalist[0] + '_And_Not_' + datalist[1] + '.nii.gz'
M_b_fname=datalist[1] + '_And_Not_' + datalist[0] + '.nii.gz'
first_V = load_image(datalist[0] + '_pFgA_z_FDR_0.01.nii.gz')
ima_first = first_V.get_data()
second_V = load_image(datalist[1] + '_pFgA_z_FDR_0.01.nii.gz')
ima_second = second_V.get_data()
or_ima = ima_first + ima_second
B_m_ima = or_ima + ima_second
M_b_ima = or_ima + ima_first
M_b_ima[M_b_ima>or_ima] = 0
B_m_ima[B_m_ima>or_ima] = 0
save_image(Image(B_m_ima, first_V.coordmap), B_m_fname)
save_image(Image(M_b_ima, first_V.coordmap), M_b_fname)
#########