forked from mchiew/vtMRI_Radial
-
Notifications
You must be signed in to change notification settings - Fork 0
/
recon.m
118 lines (109 loc) · 5.9 KB
/
recon.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
% rtSpeech Data Recon Example Script
% Mark Chiew
% mark.chiew@ndcn.ox.ac.uk
% Setup path
addpath('bin');
addpath('bin/irt');
irtdir = strcat(pwd, '/bin/irt');
setup_irt;
% If raw data has not been "prepared", prepare it
% This only needs to be done once ever for each dat file
%
% prep_dat('INPUT.dat', 'OUTPUT_NAME', [Nc], [crop], [shift])
%
% This takes 2 mandatory and 3 optional parameters:
%
% 'INPUT.dat' is the raw data filename
% 'OUTPUT_NAME' is the name of the prepared mat-file
% [Nc] is optional, the number of output coils to use
% the bigger this is, the more accurate the recon
% but slower and more memory intensive
% If you leave it out it uses the maximum number
% of coils by default
% I recommend a value somewhere between Nc = 8 and 16
% [crop] is the amount to crop the FOV to a smaller image
% defaults to 96
% [shift] is the amount to shift the image to better centre
% the head.
% Defaults to [-20, -30] to shift the head up 30 pixels
% and to the left 20 pixels. Modify if necessary
%
twix_data = 'TWIX_DATA.dat';
coil_compression = 16;
crop_size = 96;
prep_dat(twix_data, coil_compression, crop_size, [-20, -30]);
% Setup and run reconstruction
%
% recon_kernel(twix_data, spokes, index, opts)
%
% This takes 4 mandatory parameters:
%
% twix_data is the filename for the associated raw twix file
% prepared data mat-file is automatically named
% spokes is the number of spokes/shots/TRs to combine into
% a single image. Each shot is acquired with a TR=2.5 ms
% so using 12 spokes for example, gives 1 image every
% 30 ms, resulting in 1/.03 = 33.33 FPS
% More spokes means better images, but lower FPS
% Recommend 12 spokes, definitely no lower than 8 (50 FPS)
% opts is a struct() that has fields corresponding to reconstruction options
% These options are:
% opts.lambda lambda weighting for LLR reconstruction
% opts.patch patch size for LLR reconstruction
% opts.iters applies to both, denotes the number of iterations to perform
% opts.Nx output image matrix size
% opts.range dictates the total number of spokes to use
% index = 1:12000 for example, uses the first 12000 shots,
% which when spokes = 12, means a total of 1000 frames over
% a duration of 30s.
% index = 2001:14000, also uses 12000 shots over 30s, but starts
% 5s in, so the images span 5-35s in the dataset
% The total number of spokes available is stored as the variable
% 'nt' in the MATFILE_NAME object
% The reconstruction parameters can depend on the number of frames
% in the data, so some care has to be taken when choosing this
% Pre-determined parameters have been chosen for spokes=12, and
% an index length of 12000
% Empty input [] defaults to all spokes
opts.lambda = 1E-2; % Consider values between approx [1E-2, 2E-2]
opts.patch = [8 8 512]; % If you change this, you'll have to change lambda
opts.iters = 100; % Number of iterations for reconstruction
opts.Nx = crop_size;
opts.range = []; % Choose spokes to reconstruct. If empty, defaults to all
% Run recon
spokes_per_frame = 12;
out = recon_kernel(twix_data, spokes_per_frame, opts);
% Generate movie
%
% gen_movie(twix_data, data, FPS, scale, ['mov_type'])
%
% This takes 4 mandatory and 1 optional parameter
%
% twix_data is the filename for the associated raw twix file
% movie is automatically named based on this
% data is the [Nx, Ny, Nt] dataset returned by recon_kernel
% any cropping of the images can be done here
% By default, data is [160,160,Nt] so to crop to 128x128xNt
% you would input data(17:144,17:144,:) for a centred crop
% FPS is the frames-per-second for the movie
% this should be 1/(0.0025*spokes)
% scale is the scaling of the display of the data (0-100)
% this dictates the magnitude of signal that will appear
% white on the video, as well as any signal values higher
% it is defined as a percentile, so that a parameter
% of e.g. 99 means that all signals above the 99th
% percentile of voxel magnitudes will be pure white
% mov_type is a string dictating the type of movie to output
% options, taken from the help for the MATLAB builtin VideoWriter
%
% 'Grayscale AVI' - Uncompressed AVI file with Grayscale video.
% (default)
% 'Archival' - Motion JPEG 2000 file with lossless compression
% 'Motion JPEG AVI' - Compressed AVI file using Motion JPEG codec.
% 'Motion JPEG 2000' - Compressed Motion JPEG 2000 file
% 'MPEG-4' - Compressed MPEG-4 file with H.264 encoding
% (Windows 7 and Mac OS X 10.7 only)
% 'Uncompressed AVI' - Uncompressed AVI file with RGB24 video.
% 'Indexed AVI' - Uncompressed AVI file with Indexed video.
%
gen_movie(twix_data, squeeze(abs(out)), 1/(0.0025*spokes_per_frame), 99.9, 'MPEG-4');