-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfake_inplane.m
76 lines (58 loc) · 2.2 KB
/
fake_inplane.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
function fake_inplane(datadir)
% Make a fake inplane
cd(datadir)
data=[];
% parentdir = '/home/ekubota/Desktop/raw';
% datadir = '/home/ekubota/Desktop/raw/';
functionals = dir('run01_mcf.nii.gz');
for ii = 1:length(functionals)
im = readFileNifti(fullfile(datadir,sprintf(functionals(ii).name,ii)));
data = cat(4,data,im.data);
% movefile(fullfile(datadir,sprintf('run%02d.nii',ii)),fullfile(datadir,'RAW',sprintf('run%02d.nii',ii)));
end
datam = nanmean(data,4); %data(:,:,:,1);
im.data = datam;
im.pixdim = im.pixdim(1:3);
im.dim = im.dim(1:3);
im.ndim = 3;
im.descrip = 'firstfMRI';
im.fname = fullfile(datadir,'Inplane.nii.gz');
writeFileNifti(im)
%% Align t1 to first functional
f = im; % Mean functional
t1 = readFileNifti('t1_acpc.nii.gz');
% t1FileName = t1w.name;
% t1 = readFileNifti(t1FileName);
% t1.data = datam;
% t1.pixdim = t1.pixdim(1:3);
% t1.dim = t1.dim(1:3);
% t1.ndim = 3;
% t1.descrip = 'T1w';
% t1.fname = fullfile(datadir,'T1w.nii.gz');
% writeFileNifti(t1)
seed = inv(f.qto_xyz)*t1.qto_xyz; % EPI image space to T1 image space
% get into KK format
T1 = matrixtotransformation(seed,1,t1.pixdim(1:3),f.dim(1:3),f.dim(1:3).*f.pixdim(1:3));
% call the alignment
alignvolumedata(double(t1.data),t1.pixdim(1:3),double(f.data),f.pixdim(1:3),T1);
% Define ellipse
[~,mn,sd] = defineellipse3d(double(f.data));
%% Automatic alignment (coarse)
useMI = true; % you need MI if the two volumes have different tissue contrast.
% it's much faster to not use MI.
alignvolumedata_auto(mn,sd,1,[4 4 4],[],[],[],useMI); % rigid body, coarse, mutual information metric
%% Automatic alignment (fine)
alignvolumedata_auto( mn, sd,1,[1 1 1],[],[],[],useMI); % rigid body, fine, mutual information metric
%% Export the final transformation
tr = alignvolumedata_exporttransformation;
% make the transformation into a 4x4 matrix
T = transformationtomatrix(tr,1,t1.pixdim(1:3));
%% (5) Save as alignment for your vista session
vw = initHiddenInplane; mrGlobals;
mrSESSION.alignment = eye(4);
saveSession;
%% Optional: Save images showing the alignment
t1match = extractslices(double(t1.data),t1.pixdim(1:3),double(f.data),f.pixdim(1:3),tr);
f.data = t1match;
f.fname = 'Inplane.nii.gz';
writeFileNifti(f);