| | function [mri] = ft_read_mri(filename, varargin) |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | filename = fetch_url(filename); |
| |
|
| | |
| | dataformat = ft_getopt(varargin, 'dataformat'); |
| |
|
| | |
| | format = ft_getopt(varargin, 'format'); |
| | if ~isempty(format) |
| | warning('the option ''format'' will be deprecated soon, please use ''dataformat'' instead'); |
| | if isempty(dataformat) |
| | dataformat = format; |
| | end |
| | end |
| |
|
| | if isempty(dataformat) |
| | |
| | dataformat = ft_filetype(filename); |
| | end |
| |
|
| | if strcmp(dataformat, 'compressed') |
| | |
| | inflated = true; |
| | filename = inflate_file(filename); |
| | dataformat = ft_filetype(filename); |
| | else |
| | inflated = false; |
| | end |
| |
|
| | |
| | if ~exist(filename, 'file') |
| | error('file ''%s'' does not exist', filename); |
| | end |
| |
|
| | |
| | hasspm2 = ft_hastoolbox('spm2'); |
| | hasspm5 = ft_hastoolbox('spm5'); |
| | hasspm8 = ft_hastoolbox('spm8'); |
| | hasspm12 = ft_hastoolbox('spm12'); |
| |
|
| | switch dataformat |
| | case 'ctf_mri' |
| | [img, hdr] = read_ctf_mri(filename); |
| | transform = hdr.transformMRI2Head; |
| | coordsys = 'ctf'; |
| |
|
| | case 'ctf_mri4' |
| | [img, hdr] = read_ctf_mri4(filename); |
| | transform = hdr.transformMRI2Head; |
| | coordsys = 'ctf'; |
| |
|
| | case 'ctf_svl' |
| | [img, hdr] = read_ctf_svl(filename); |
| | transform = hdr.transform; |
| |
|
| | case 'asa_mri' |
| | [img, seg, hdr] = read_asa_mri(filename); |
| | transform = hdr.transformMRI2Head; |
| | if isempty(seg) |
| | |
| | clear seg |
| | end |
| |
|
| | case 'minc' |
| | if ~(hasspm2 || hasspm5) |
| | fprintf('the SPM2 or SPM5 toolbox is required to read *.mnc files\n'); |
| | ft_hastoolbox('spm2',1); |
| | end |
| | |
| | hdr = spm_vol_minc(filename); |
| | img = spm_read_vols(hdr); |
| | transform = hdr.mat; |
| |
|
| | case 'nifti_spm' |
| | if ~(hasspm5 || hasspm8 || hasspm12) |
| | fprintf('the SPM5 or newer toolbox is required to read *.nii files\n'); |
| | ft_hastoolbox('spm8', 1); |
| | end |
| | |
| | hdr = spm_vol_nifti(filename); |
| | img = spm_read_vols(hdr); |
| | transform = hdr.mat; |
| |
|
| | case {'analyze_img' 'analyze_hdr'} |
| | if ~(hasspm8) |
| | fprintf('the SPM8 toolbox is required to read analyze files\n'); |
| | ft_hastoolbox('spm8', 1); |
| | end |
| |
|
| | |
| | filename((end-2):end) = 'img'; |
| | |
| | hdr = spm_vol(filename); |
| | img = spm_read_vols(hdr); |
| | transform = hdr.mat; |
| |
|
| | case 'analyze_old' |
| | |
| | ft_hastoolbox('mri', 1); |
| |
|
| | avw = avw_img_read(filename, 0); |
| | img = avw.img; |
| | hdr = avw.hdr; |
| | |
| | |
| | |
| | |
| | |
| | |
| | warning('flipping 1st dimension (L-R) to obtain volume in neurological convention'); |
| | img = flipdim(img, 1); |
| |
|
| | transform = diag(hdr.dime.pixdim(2:4)); |
| | transform(4,4) = 1; |
| |
|
| | case {'afni_brik' 'afni_head'} |
| | |
| | ft_hastoolbox('afni', 1); |
| |
|
| | [err, img, hdr, ErrMessage] = BrikLoad(filename); |
| | if err |
| | error('could not read AFNI file'); |
| | end |
| |
|
| | |
| | |
| | warning('homogenous transformation might be incorrect for AFNI file'); |
| | transform = eye(4); |
| | transform(1:3,4) = hdr.ORIGIN(:); |
| | transform(1,1) = hdr.DELTA(1); |
| | transform(2,2) = hdr.DELTA(2); |
| | transform(3,3) = hdr.DELTA(3); |
| |
|
| | |
| | img = flipdim(img,1); |
| | img = flipdim(img,2); |
| | dim = size(img); |
| | transform(1,4) = -dim(1) - transform(1,4); |
| | transform(2,4) = -dim(2) - transform(2,4); |
| |
|
| | case 'neuromag_fif' |
| | |
| | ft_hastoolbox('mne', 1); |
| |
|
| | |
| | hdr = fiff_read_mri(filename); |
| | img_t = cat(3, hdr.slices.data); |
| | img = permute(img_t,[2 1 3]); |
| | hdr.slices = rmfield(hdr.slices, 'data'); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | transform = eye(4); |
| | if isfield(hdr, 'trans') && issubfield(hdr.trans, 'trans') |
| | if (hdr.trans.from == 4) && (hdr.trans.to == 5) |
| | transform = hdr.trans.trans; |
| | else |
| | warning('W: trans does not transform from 4 to 5.'); |
| | warning('W: Please check the MRI fif-file'); |
| | end |
| | else |
| | warning('W: trans structure is not defined.'); |
| | warning('W: Maybe coregistration is missing?'); |
| | end |
| | if isfield(hdr, 'voxel_trans') && issubfield(hdr.voxel_trans, 'trans') |
| | |
| | |
| | if (hdr.voxel_trans.from == 2001) && (hdr.voxel_trans.to == 5) |
| | |
| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | matlab_shift = eye(4); |
| | matlab_shift(1:3,4) = [-1,-1,-1]; |
| | transform = transform\(hdr.voxel_trans.trans * matlab_shift); |
| |
|
| | coordsys = 'neuromag'; |
| | mri.unit = 'm'; |
| | else |
| | warning('W: voxel_trans does not transform from 2001 to 5.'); |
| | warning('W: Please check the MRI fif-file'); |
| | end |
| | else |
| | warning('W: voxel_trans structure is not defined.'); |
| | warning('W: Please check the MRI fif-file'); |
| | end |
| |
|
| | case 'neuromag_fif_old' |
| | |
| | ft_hastoolbox('meg-pd', 1); |
| |
|
| | |
| | [img,coords] = loadmri(filename); |
| | dev = loadtrans(filename,'MRI','HEAD'); |
| | transform = dev*coords; |
| | hdr.coords = coords; |
| | hdr.dev = dev; |
| |
|
| | case 'dicom' |
| | |
| | |
| |
|
| | |
| | ft_hastoolbox('freesurfer', 1); |
| | [dcmdir,junk1,junk2] = fileparts(filename); |
| | if isempty(dcmdir), |
| | dcmdir = '.'; |
| | end |
| | [img,transform,hdr,mr_params] = load_dicom_series(dcmdir,dcmdir,filename); |
| | transform = vox2ras_0to1(transform); |
| |
|
| | case 'dicom_old' |
| | |
| | |
| |
|
| | |
| | |
| | orig = dicominfo(filename); |
| | dim(1) = orig.Rows; |
| | dim(2) = orig.Columns; |
| |
|
| | [p, f] = fileparts(filename); |
| |
|
| | |
| | tok = tokenize(f, '.'); |
| | for i=5:length(tok) |
| | tok{i} = '*'; |
| | end |
| | filename = sprintf('%s.', tok{:}); |
| | filename = filename(1:end-1); |
| | dirlist = dir(fullfile(p, filename)); |
| | dirlist = {dirlist.name}; |
| |
|
| | if length(dirlist)==1 |
| | |
| | dirlist = dir(fullfile(p, '*')); |
| | dirlist = {dirlist(~[dirlist.isdir]).name}; |
| | end |
| |
|
| | keep = false(1, length(dirlist)); |
| | for i=1:length(dirlist) |
| | filename = char(fullfile(p, dirlist{i})); |
| | if ~strcmp(dataformat, 'dicom') |
| | keep(i) = false; |
| | fprintf('skipping ''%s'' because of incorrect filetype\n', filename); |
| | end |
| | |
| | info = dicominfo(filename); |
| | if info.SeriesNumber~=orig.SeriesNumber |
| | keep(i) = false; |
| | fprintf('skipping ''%s'' because of different SeriesNumber\n', filename); |
| | else |
| | keep(i) = true; |
| | hdr(i) = info; |
| | end |
| | end |
| | |
| | hdr = hdr(keep); |
| | dirlist = dirlist(keep); |
| |
|
| | |
| | dim(3) = length(dirlist); |
| | img = zeros(dim(1), dim(2), dim(3)); |
| | for i=1:length(dirlist) |
| | filename = char(fullfile(p, dirlist{i})); |
| | fprintf('reading image data from ''%s''\n', filename); |
| | img(:,:,i) = dicomread(hdr(i)); |
| | end |
| |
|
| | |
| | [z, indx] = sort(cell2mat({hdr.SliceLocation})); |
| | hdr = hdr(indx); |
| | img = img(:,:,indx); |
| |
|
| | try |
| | |
| | dx = hdr(1).PixelSpacing(1); |
| | dy = hdr(1).PixelSpacing(2); |
| | dz = hdr(2).SliceLocation - hdr(1).SliceLocation; |
| | transform = eye(4); |
| | transform(1,1) = dx; |
| | transform(2,2) = dy; |
| | transform(3,3) = dz; |
| | end |
| |
|
| | case {'nifti', 'freesurfer_mgz', 'freesurfer_mgh', 'nifti_fsl'} |
| | if strcmp(dataformat, 'freesurfer_mgz') && ispc |
| | error('Compressed .mgz files cannot be read on a PC'); |
| | end |
| |
|
| | ft_hastoolbox('freesurfer', 1); |
| | tmp = MRIread(filename); |
| | ndims = numel(size(tmp.vol)); |
| | if ndims==3 |
| | img = permute(tmp.vol, [2 1 3]); |
| | |
| | |
| | |
| | elseif ndims==4 |
| | img = permute(tmp.vol, [2 1 3 4]); |
| | end |
| | hdr = rmfield(tmp, 'vol'); |
| | transform = tmp.vox2ras1; |
| |
|
| | case 'yokogawa_mri' |
| | ft_hastoolbox('yokogawa', 1); |
| | fid = fopen(filename, 'rb'); |
| | mri_info = GetMeg160MriInfoM(fid); |
| | patient_info = GetMeg160PatientInfoFromMriFileM(fid); |
| | [data_style, model, marker, image_parameter, normalize, besa_fiducial_point] = GetMeg160MriFileHeaderInfoM(fid); |
| | fclose(fid); |
| |
|
| | |
| | hdr.mri_info = mri_info; |
| | hdr.patient_info = patient_info; |
| | hdr.data_style = data_style; |
| | hdr.model = model; |
| | hdr.marker = marker; |
| | hdr.image_parameter = image_parameter; |
| | hdr.normalize = normalize; |
| | hdr.besa_fiducial_point = besa_fiducial_point; |
| |
|
| | error('FIXME yokogawa_mri implementation is incomplete'); |
| |
|
| | case 'matlab' |
| | mri = loadvar(filename, 'mri'); |
| |
|
| | otherwise |
| | error(sprintf('unrecognized filetype ''%s'' for ''%s''', dataformat, filename)); |
| | end |
| |
|
| | if exist('img', 'var') |
| | |
| | nx = size(img,1); |
| | ny = size(img,2); |
| | nz = size(img,3); |
| | mri.dim = [nx ny nz]; |
| | |
| | mri.anatomy = img; |
| | end |
| |
|
| | if exist('seg', 'var') |
| | |
| | mri.seg = seg; |
| | end |
| |
|
| | if exist('hdr', 'var') |
| | |
| | mri.hdr = hdr; |
| | end |
| |
|
| | try |
| | |
| | mri.transform = transform; |
| | end |
| |
|
| | try |
| | |
| | mri = ft_convert_units(mri); |
| | end |
| |
|
| | try |
| | |
| | mri.coordsys = coordsys; |
| | end |
| |
|
| | if inflated |
| | |
| | delete(filename); |
| | end |
| |
|
| | |
| | |
| | |
| | function value = loadvar(filename, varname) |
| | var = whos('-file', filename); |
| | if length(var)==1 |
| | filecontent = load(filename); |
| | value = filecontent.(var.name); |
| | clear filecontent |
| | else |
| | filecontent = load(filename, varname); |
| | value = filecontent.(varname); |
| | clear filecontent |
| | end |
| |
|