This is a “Jan’s Gem” from Jan Gläscher…
Subject: Re: [SPM] creating a mask from voxel coordinates
From: Jan Gläscher <glaescher@UKE.UNI-HAMBURG.DE>
Date: Tue, 15 Mar 2005 12:24:27 +0100
To: SPM@JISCMAIL.AC.UK
Dear Susana,
you can try the following recipe. It might not be the easiest way, but it
should work.
Suppose your n MNI coordinates are saved in a 3xn matrix called mni.
(This is essential (not the name, but the format of 3xn), otherwise the
steps below won't work).
1. Create an spm_vol handle to the image, that you determined the
coordinates from
Vin = spm_vol(spm_get(1,'*.img','Select image'));
2. Read the information in the image. (The data are not needed, this is
done purely for the purpose of setting up a matrix of voxel coordinates.
[Y,XYZ] = spm_read_vols(Vin);
3. Setup a matrix of zeros in the dimensions of the input image
mask = zeros(Vin.dim(1:3));
4. Now loop over all voxels in your mni variable and set the corresponding
location in the mask matrix to 1:
for v = 1:size(mni,2)
mask(find(XYZ(1,:)==mni(1,v)&XYZ(2,:)==mni(2,v)&XYZ(3,:)==mni(3,v))) = 1;
end
5. Setup an spm_vol output file handle and change the filename
Vout = Vin;
Vout.fname = '/path/to/the/directory/mask.img';
6. Finally, write the new mask to the output file.
spm_write_vol(Vout,mask);
Cheers,
Jan